ngx-echarts
Advanced tools
Comparing version 4.0.1 to 4.1.0
(function (global, factory) { | ||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('rxjs'), require('@angular/core'), require('rxjs/operators'), require('echarts')) : | ||
typeof define === 'function' && define.amd ? define('ngx-echarts', ['exports', 'rxjs', '@angular/core', 'rxjs/operators', 'echarts'], factory) : | ||
(factory((global['ngx-echarts'] = {}),global.rxjs,global.ng.core,global.rxjs.operators,global.echarts)); | ||
}(this, (function (exports,rxjs,core,operators,echarts) { 'use strict'; | ||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('rxjs'), require('@angular/core'), require('echarts'), require('rxjs/operators')) : | ||
typeof define === 'function' && define.amd ? define('ngx-echarts', ['exports', 'rxjs', '@angular/core', 'echarts', 'rxjs/operators'], factory) : | ||
(factory((global['ngx-echarts'] = {}),global.rxjs,global.ng.core,global.echarts,global.rxjs.operators)); | ||
}(this, (function (exports,rxjs,core,echarts,operators) { 'use strict'; | ||
@@ -109,109 +109,51 @@ /** | ||
*/ | ||
var EChartEvents = /** @class */ (function () { | ||
function EChartEvents() { | ||
} | ||
EChartEvents.Click = 'click'; | ||
EChartEvents.DblClick = 'dblclick'; | ||
EChartEvents.MouseDown = 'mousedown'; | ||
EChartEvents.MouseUp = 'mouseup'; | ||
EChartEvents.MouseOver = 'mouseover'; | ||
EChartEvents.MouseOut = 'mouseout'; | ||
EChartEvents.GlobalOut = 'globalout'; | ||
EChartEvents.ContextMenu = 'contextmenu'; | ||
EChartEvents.DataZoom = 'datazoom'; | ||
EChartEvents.MapSelectChanged = 'mapselectchanged'; | ||
EChartEvents.MapSelected = 'mapselected'; | ||
EChartEvents.MapUnselected = 'mapunselected'; | ||
EChartEvents.All = [ | ||
EChartEvents.Click, | ||
EChartEvents.DblClick, | ||
EChartEvents.MouseDown, | ||
EChartEvents.MouseUp, | ||
EChartEvents.MouseOver, | ||
EChartEvents.MouseOut, | ||
EChartEvents.GlobalOut, | ||
EChartEvents.ContextMenu, | ||
EChartEvents.DataZoom, | ||
EChartEvents.MapSelectChanged, | ||
EChartEvents.MapSelected, | ||
EChartEvents.MapUnselected, | ||
]; | ||
return EChartEvents; | ||
}()); | ||
/** | ||
* @fileoverview added by tsickle | ||
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc | ||
*/ | ||
var NgxEchartsDirective = /** @class */ (function () { | ||
function NgxEchartsDirective(el, _ngZone) { | ||
function NgxEchartsDirective(el, ngZone) { | ||
this.el = el; | ||
this._ngZone = _ngZone; | ||
this.ngZone = ngZone; | ||
this.autoResize = true; | ||
this.loadingType = 'default'; | ||
/** | ||
* Whether to register event handlers on echartInstance. Default is true. | ||
* Use it to avoid unwanted change detection, if you want to optimize the performance. | ||
*/ | ||
this.detectEventChanges = true; | ||
// chart events: | ||
this.detectEventChanges = true; // deprecated, left for compatibility reasons to avoid triggering major version | ||
// deprecated, left for compatibility reasons to avoid triggering major version | ||
// ngx-echarts events | ||
this.chartInit = new core.EventEmitter(); | ||
this.chartClick = new core.EventEmitter(); | ||
this.chartDblClick = new core.EventEmitter(); | ||
this.chartMouseDown = new core.EventEmitter(); | ||
this.chartMouseUp = new core.EventEmitter(); | ||
this.chartMouseOver = new core.EventEmitter(); | ||
this.chartMouseOut = new core.EventEmitter(); | ||
this.chartGlobalOut = new core.EventEmitter(); | ||
this.chartContextMenu = new core.EventEmitter(); | ||
this.chartDataZoom = new core.EventEmitter(); | ||
this.chartMapSelectChanged = new core.EventEmitter(); | ||
this.chartMapSelected = new core.EventEmitter(); | ||
this.chartMapUnselected = new core.EventEmitter(); | ||
// echarts mouse events | ||
this.chartClick = this.createLazyEvent('click'); | ||
this.chartDblClick = this.createLazyEvent('dblclick'); | ||
this.chartMouseDown = this.createLazyEvent('mousedown'); | ||
this.chartMouseMove = this.createLazyEvent('mousemove'); | ||
this.chartMouseUp = this.createLazyEvent('mouseup'); | ||
this.chartMouseOver = this.createLazyEvent('mouseover'); | ||
this.chartMouseOut = this.createLazyEvent('mouseout'); | ||
this.chartGlobalOut = this.createLazyEvent('globalout'); | ||
this.chartContextMenu = this.createLazyEvent('contextmenu'); | ||
// echarts mouse events | ||
this.chartLegendSelectChanged = this.createLazyEvent('legendselectchanged'); | ||
this.chartLegendSelected = this.createLazyEvent('legendselected'); | ||
this.chartLegendUnselected = this.createLazyEvent('legendunselected'); | ||
this.chartLegendScroll = this.createLazyEvent('legendscroll'); | ||
this.chartDataZoom = this.createLazyEvent('datazoom'); | ||
this.chartDataRangeSelected = this.createLazyEvent('datarangeselected'); | ||
this.chartTimelineChanged = this.createLazyEvent('timelinechanged'); | ||
this.chartTimelinePlayChanged = this.createLazyEvent('timelineplaychanged'); | ||
this.chartRestore = this.createLazyEvent('restore'); | ||
this.chartDataViewChanged = this.createLazyEvent('dataviewchanged'); | ||
this.chartMagicTypeChanged = this.createLazyEvent('magictypechanged'); | ||
this.chartPieSelectChanged = this.createLazyEvent('pieselectchanged'); | ||
this.chartPieSelected = this.createLazyEvent('pieselected'); | ||
this.chartPieUnselected = this.createLazyEvent('pieunselected'); | ||
this.chartMapSelectChanged = this.createLazyEvent('mapselectchanged'); | ||
this.chartMapSelected = this.createLazyEvent('mapselected'); | ||
this.chartMapUnselected = this.createLazyEvent('mapunselected'); | ||
this.chartAxisAreaSelected = this.createLazyEvent('axisareaselected'); | ||
this.chartFocusNodeAdjacency = this.createLazyEvent('focusnodeadjacency'); | ||
this.chartUnfocusNodeAdjacency = this.createLazyEvent('unfocusnodeadjacency'); | ||
this.chartBrush = this.createLazyEvent('brush'); | ||
this.chartBrushSelected = this.createLazyEvent('brushselected'); | ||
this.chartRendered = this.createLazyEvent('rendered'); | ||
this.chartFinished = this.createLazyEvent('finished'); | ||
this.currentOffsetWidth = 0; | ||
this.currentOffsetHeight = 0; | ||
this._resize$ = new rxjs.Subject(); | ||
} | ||
/** | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.createChart = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
var _this = this; | ||
this.currentWindowWidth = window.innerWidth; | ||
this.currentOffsetWidth = this.el.nativeElement.offsetWidth; | ||
this.currentOffsetHeight = this.el.nativeElement.offsetHeight; | ||
/** @type {?} */ | ||
var dom = this.el.nativeElement; | ||
if (window && window.getComputedStyle) { | ||
/** @type {?} */ | ||
var prop = window.getComputedStyle(dom, null).getPropertyValue('height'); | ||
if ((!prop || prop === '0px') && | ||
(!dom.style.height || dom.style.height === '0px')) { | ||
dom.style.height = '400px'; | ||
} | ||
} | ||
return this._ngZone.runOutsideAngular(function () { return echarts.init(dom, _this.theme || undefined, _this.initOpts || undefined); }); | ||
}; | ||
/** | ||
* @param {?} event | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.onWindowResize = /** | ||
* @param {?} event | ||
* @return {?} | ||
*/ | ||
function (event) { | ||
/** @type {?} */ | ||
var target = ( /** @type {?} */(event.target)); | ||
if (this.autoResize && target.innerWidth !== this.currentWindowWidth) { | ||
this.currentWindowWidth = target.innerWidth; | ||
this.currentOffsetWidth = this.el.nativeElement.offsetWidth; | ||
this.currentOffsetHeight = this.el.nativeElement.offsetHeight; | ||
this._resize$.next(); | ||
} | ||
}; | ||
/** | ||
* @param {?} changes | ||
@@ -231,3 +173,2 @@ * @return {?} | ||
filter.has('loading').subscribe(function (v) { return _this.toggleLoading(!!v); }); | ||
filter.notFirst('detectEventChanges').subscribe(function (v) { return _this.toggleEventDetectors(!!v); }); | ||
filter.notFirst('theme').subscribe(function () { return _this.refreshChart(); }); | ||
@@ -238,2 +179,19 @@ }; | ||
*/ | ||
NgxEchartsDirective.prototype.ngOnInit = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
var _this = this; | ||
this.resizeSub = rxjs.fromEvent(window, 'resize').pipe(operators.debounceTime(50)).subscribe(function () { | ||
if (_this.autoResize && window.innerWidth !== _this.currentWindowWidth) { | ||
_this.currentWindowWidth = window.innerWidth; | ||
_this.currentOffsetWidth = _this.el.nativeElement.offsetWidth; | ||
_this.currentOffsetHeight = _this.el.nativeElement.offsetHeight; | ||
_this.resize(); | ||
} | ||
}); | ||
}; | ||
/** | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.ngOnDestroy = /** | ||
@@ -243,10 +201,4 @@ * @return {?} | ||
function () { | ||
if (this._resizeSub) { | ||
this._resizeSub.unsubscribe(); | ||
this._resizeSub = null; | ||
} | ||
if (this._chart) { | ||
this._chart.dispose(); | ||
this._chart = null; | ||
} | ||
this.resizeSub.unsubscribe(); | ||
this.dispose(); | ||
}; | ||
@@ -261,3 +213,3 @@ /** | ||
// No heavy work in DoCheck! | ||
if (this._chart && this.autoResize) { | ||
if (this.chart && this.autoResize) { | ||
/** @type {?} */ | ||
@@ -270,3 +222,3 @@ var offsetWidth = this.el.nativeElement.offsetWidth; | ||
this.currentOffsetHeight = offsetHeight; | ||
this._resize$.next(); | ||
this.resize(); | ||
} | ||
@@ -288,68 +240,48 @@ } | ||
*/ | ||
NgxEchartsDirective.prototype.initChart = /** | ||
NgxEchartsDirective.prototype.dispose = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
this.onOptionsChange(this.options); | ||
if (this.merge && this._chart) { | ||
this.setOption(this.merge); | ||
if (this.chart) { | ||
this.chart.dispose(); | ||
this.chart = null; | ||
} | ||
}; | ||
/** | ||
* @param {?} opt | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.onOptionsChange = /** | ||
* @param {?} opt | ||
NgxEchartsDirective.prototype.resize = /** | ||
* @return {?} | ||
*/ | ||
function (opt) { | ||
var _this = this; | ||
if (opt) { | ||
if (!this._chart) { | ||
this._chart = this.createChart(); | ||
// subscribe to _resize$ and debounced | ||
this._resizeSub = this._resize$.pipe(operators.debounceTime(50)).subscribe(function () { | ||
if (_this._chart) { | ||
_this._chart.resize(); | ||
} | ||
}); | ||
// output echart instance: | ||
this.chartInit.emit(this._chart); | ||
// register events: | ||
if (this.detectEventChanges) { | ||
this.registerEvents(); | ||
} | ||
} | ||
this._chart.setOption(this.options, true); | ||
function () { | ||
if (this.chart) { | ||
this.chart.resize(); | ||
} | ||
}; | ||
/** | ||
* @param {?} loading | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.registerEvents = /** | ||
NgxEchartsDirective.prototype.toggleLoading = /** | ||
* @param {?} loading | ||
* @return {?} | ||
*/ | ||
function () { | ||
if (this._chart) { | ||
/** @type {?} */ | ||
var events = EChartEvents.All; | ||
for (var i = 0, len = events.length; i < len; i++) { | ||
this._chart.on(events[i], this.eventHandler, this); | ||
} | ||
function (loading) { | ||
if (this.chart) { | ||
loading ? this.chart.showLoading(this.loadingType, this.loadingOpts) : this.chart.hideLoading(); | ||
} | ||
}; | ||
/** | ||
* @param {?} option | ||
* @param {?=} opts | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.unregisterEvents = /** | ||
NgxEchartsDirective.prototype.setOption = /** | ||
* @param {?} option | ||
* @param {?=} opts | ||
* @return {?} | ||
*/ | ||
function () { | ||
if (this._chart) { | ||
/** @type {?} */ | ||
var events = EChartEvents.All; | ||
for (var i = 0, len = events.length; i < len; i++) { | ||
this._chart.off(events[i], this.eventHandler); | ||
} | ||
function (option, opts) { | ||
if (this.chart) { | ||
this.chart.setOption(option, opts); | ||
} | ||
@@ -360,110 +292,87 @@ }; | ||
*/ | ||
NgxEchartsDirective.prototype.clear = /** | ||
NgxEchartsDirective.prototype.refreshChart = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
if (this._chart) { | ||
this._chart.clear(); | ||
} | ||
this.dispose(); | ||
this.initChart(); | ||
}; | ||
/** | ||
* @param {?} loading | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.toggleLoading = /** | ||
* @param {?} loading | ||
NgxEchartsDirective.prototype.createChart = /** | ||
* @return {?} | ||
*/ | ||
function (loading) { | ||
if (this._chart) { | ||
loading ? this._chart.showLoading(this.loadingType, this.loadingOpts) : this._chart.hideLoading(); | ||
function () { | ||
var _this = this; | ||
this.currentWindowWidth = window.innerWidth; | ||
this.currentOffsetWidth = this.el.nativeElement.offsetWidth; | ||
this.currentOffsetHeight = this.el.nativeElement.offsetHeight; | ||
/** @type {?} */ | ||
var dom = this.el.nativeElement; | ||
if (window && window.getComputedStyle) { | ||
/** @type {?} */ | ||
var prop = window.getComputedStyle(dom, null).getPropertyValue('height'); | ||
if ((!prop || prop === '0px') && | ||
(!dom.style.height || dom.style.height === '0px')) { | ||
dom.style.height = '400px'; | ||
} | ||
} | ||
return this.ngZone.runOutsideAngular(function () { return echarts.init(dom, _this.theme, _this.initOpts); }); | ||
}; | ||
/** | ||
* @param {?} option | ||
* @param {?=} opts | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.setOption = /** | ||
* @param {?} option | ||
* @param {?=} opts | ||
NgxEchartsDirective.prototype.initChart = /** | ||
* @return {?} | ||
*/ | ||
function (option, opts) { | ||
if (this._chart) { | ||
this._chart.setOption(option, opts); | ||
function () { | ||
this.onOptionsChange(this.options); | ||
if (this.merge && this.chart) { | ||
this.setOption(this.merge); | ||
} | ||
}; | ||
/** | ||
* @param {?} event | ||
* @param {?} opt | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.eventHandler = /** | ||
* @param {?} event | ||
NgxEchartsDirective.prototype.onOptionsChange = /** | ||
* @param {?} opt | ||
* @return {?} | ||
*/ | ||
function (event) { | ||
var _this = this; | ||
switch (event.type) { | ||
case EChartEvents.Click: | ||
this._ngZone.run(function () { return _this.chartClick.emit(event); }); | ||
break; | ||
case EChartEvents.DblClick: | ||
this._ngZone.run(function () { return _this.chartDblClick.emit(event); }); | ||
break; | ||
case EChartEvents.MouseDown: | ||
this._ngZone.run(function () { return _this.chartMouseDown.emit(event); }); | ||
break; | ||
case EChartEvents.MouseUp: | ||
this._ngZone.run(function () { return _this.chartMouseUp.emit(event); }); | ||
break; | ||
case EChartEvents.MouseOver: | ||
this._ngZone.run(function () { return _this.chartMouseOver.emit(event); }); | ||
break; | ||
case EChartEvents.MouseOut: | ||
this._ngZone.run(function () { return _this.chartMouseOut.emit(event); }); | ||
break; | ||
case EChartEvents.GlobalOut: | ||
this._ngZone.run(function () { return _this.chartGlobalOut.emit(event); }); | ||
break; | ||
case EChartEvents.ContextMenu: | ||
this._ngZone.run(function () { return _this.chartContextMenu.emit(event); }); | ||
break; | ||
case EChartEvents.DataZoom: | ||
this._ngZone.run(function () { return _this.chartDataZoom.emit(event); }); | ||
break; | ||
case EChartEvents.MapSelectChanged: | ||
this._ngZone.run(function () { return _this.chartMapSelectChanged.emit(event); }); | ||
break; | ||
case EChartEvents.MapSelected: | ||
this._ngZone.run(function () { return _this.chartMapSelected.emit(event); }); | ||
break; | ||
case EChartEvents.MapUnselected: | ||
this._ngZone.run(function () { return _this.chartMapUnselected.emit(event); }); | ||
break; | ||
function (opt) { | ||
if (opt) { | ||
if (!this.chart) { | ||
this.chart = this.createChart(); | ||
this.chartInit.emit(this.chart); | ||
} | ||
this.chart.setOption(this.options, true); | ||
} | ||
}; | ||
// allows to lazily bind to only those events that are requested through the `@Output` by parent components | ||
// see https://stackoverflow.com/questions/51787972/optimal-reentering-the-ngzone-from-eventemitter-event for more info | ||
// allows to lazily bind to only those events that are requested through the `@Output` by parent components | ||
// see https://stackoverflow.com/questions/51787972/optimal-reentering-the-ngzone-from-eventemitter-event for more info | ||
/** | ||
* @param {?} detect | ||
* @template T | ||
* @param {?} eventName | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.toggleEventDetectors = /** | ||
* @param {?} detect | ||
* @return {?} | ||
*/ | ||
function (detect) { | ||
if (this._chart) { | ||
detect ? this.registerEvents() : this.unregisterEvents(); | ||
} | ||
NgxEchartsDirective.prototype.createLazyEvent = | ||
// allows to lazily bind to only those events that are requested through the `@Output` by parent components | ||
// see https://stackoverflow.com/questions/51787972/optimal-reentering-the-ngzone-from-eventemitter-event for more info | ||
/** | ||
* @template T | ||
* @param {?} eventName | ||
* @return {?} | ||
*/ | ||
function (eventName) { | ||
var _this = this; | ||
return ( /** @type {?} */(this.chartInit.pipe(operators.switchMap(function (chart) { | ||
return new rxjs.Observable(function (observer) { | ||
chart.on(eventName, function (data) { return _this.ngZone.run(function () { return observer.next(data); }); }); | ||
return null; // no need to react on unsubscribe as long as the `dispose()` is called in ngOnDestroy | ||
}); | ||
})))); | ||
}; | ||
/** | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.refreshChart = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
this.ngOnDestroy(); | ||
this.initChart(); | ||
}; | ||
NgxEchartsDirective.decorators = [ | ||
@@ -495,2 +404,3 @@ { type: core.Directive, args: [{ | ||
chartMouseDown: [{ type: core.Output }], | ||
chartMouseMove: [{ type: core.Output }], | ||
chartMouseUp: [{ type: core.Output }], | ||
@@ -501,7 +411,26 @@ chartMouseOver: [{ type: core.Output }], | ||
chartContextMenu: [{ type: core.Output }], | ||
chartLegendSelectChanged: [{ type: core.Output }], | ||
chartLegendSelected: [{ type: core.Output }], | ||
chartLegendUnselected: [{ type: core.Output }], | ||
chartLegendScroll: [{ type: core.Output }], | ||
chartDataZoom: [{ type: core.Output }], | ||
chartDataRangeSelected: [{ type: core.Output }], | ||
chartTimelineChanged: [{ type: core.Output }], | ||
chartTimelinePlayChanged: [{ type: core.Output }], | ||
chartRestore: [{ type: core.Output }], | ||
chartDataViewChanged: [{ type: core.Output }], | ||
chartMagicTypeChanged: [{ type: core.Output }], | ||
chartPieSelectChanged: [{ type: core.Output }], | ||
chartPieSelected: [{ type: core.Output }], | ||
chartPieUnselected: [{ type: core.Output }], | ||
chartMapSelectChanged: [{ type: core.Output }], | ||
chartMapSelected: [{ type: core.Output }], | ||
chartMapUnselected: [{ type: core.Output }], | ||
onWindowResize: [{ type: core.HostListener, args: ['window:resize', ['$event'],] }] | ||
chartAxisAreaSelected: [{ type: core.Output }], | ||
chartFocusNodeAdjacency: [{ type: core.Output }], | ||
chartUnfocusNodeAdjacency: [{ type: core.Output }], | ||
chartBrush: [{ type: core.Output }], | ||
chartBrushSelected: [{ type: core.Output }], | ||
chartRendered: [{ type: core.Output }], | ||
chartFinished: [{ type: core.Output }] | ||
}; | ||
@@ -549,2 +478,2 @@ return NgxEchartsDirective; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWVjaGFydHMudW1kLmpzLm1hcCIsInNvdXJjZXMiOlsibmc6Ly9uZ3gtZWNoYXJ0cy9saWIvY2hhbmdlLWZpbHRlci50cyIsIm5nOi8vbmd4LWVjaGFydHMvbGliL2VjaGFydC1ldmVudHMudHMiLCJuZzovL25neC1lY2hhcnRzL2xpYi9uZ3gtZWNoYXJ0cy5kaXJlY3RpdmUudHMiLCJuZzovL25neC1lY2hhcnRzL2xpYi9uZ3gtZWNoYXJ0cy5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgZW1wdHkgfSBmcm9tICdyeGpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaGFuZ2VGaWx0ZXIge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHsgfVxyXG5cclxuICBzdGF0aWMgb2YoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgcmV0dXJuIG5ldyBDaGFuZ2VGaWx0ZXIoY2hhbmdlcyk7XHJcbiAgfVxyXG5cclxuICBub3RFbXB0eTxUPihrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgaWYgKHRoaXMuX2NoYW5nZXNba2V5XSkge1xyXG4gICAgICBjb25zdCB2YWx1ZTogVCA9IHRoaXMuX2NoYW5nZXNba2V5XS5jdXJyZW50VmFsdWU7XHJcblxyXG4gICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBvZih2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBlbXB0eSgpO1xyXG4gIH1cclxuXHJcbiAgaGFzPFQ+KGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICBpZiAodGhpcy5fY2hhbmdlc1trZXldKSB7XHJcbiAgICAgIGNvbnN0IHZhbHVlOiBUID0gdGhpcy5fY2hhbmdlc1trZXldLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgcmV0dXJuIG9mKHZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBlbXB0eSgpO1xyXG4gIH1cclxuXHJcbiAgbm90Rmlyc3Q8VD4oa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIGlmICh0aGlzLl9jaGFuZ2VzW2tleV0gJiYgIXRoaXMuX2NoYW5nZXNba2V5XS5pc0ZpcnN0Q2hhbmdlKCkpIHtcclxuICAgICAgY29uc3QgdmFsdWU6IFQgPSB0aGlzLl9jaGFuZ2VzW2tleV0uY3VycmVudFZhbHVlO1xyXG4gICAgICByZXR1cm4gb2YodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVtcHR5KCk7XHJcbiAgfVxyXG5cclxuICBub3RGaXJzdEFuZEVtcHR5PFQ+KGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICBpZiAodGhpcy5fY2hhbmdlc1trZXldICYmICF0aGlzLl9jaGFuZ2VzW2tleV0uaXNGaXJzdENoYW5nZSgpKSB7XHJcbiAgICAgIGNvbnN0IHZhbHVlOiBUID0gdGhpcy5fY2hhbmdlc1trZXldLmN1cnJlbnRWYWx1ZTtcclxuXHJcbiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIG9mKHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVtcHR5KCk7XHJcbiAgfVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBFQ2hhcnRFdmVudHMge1xyXG4gIHN0YXRpYyBDbGljayA9ICdjbGljayc7XHJcbiAgc3RhdGljIERibENsaWNrID0gJ2RibGNsaWNrJztcclxuICBzdGF0aWMgTW91c2VEb3duID0gJ21vdXNlZG93bic7XHJcbiAgc3RhdGljIE1vdXNlVXAgPSAnbW91c2V1cCc7XHJcbiAgc3RhdGljIE1vdXNlT3ZlciA9ICdtb3VzZW92ZXInO1xyXG4gIHN0YXRpYyBNb3VzZU91dCA9ICdtb3VzZW91dCc7XHJcbiAgc3RhdGljIEdsb2JhbE91dCA9ICdnbG9iYWxvdXQnO1xyXG4gIHN0YXRpYyBDb250ZXh0TWVudSA9ICdjb250ZXh0bWVudSc7XHJcbiAgc3RhdGljIERhdGFab29tID0gJ2RhdGF6b29tJztcclxuICBzdGF0aWMgTWFwU2VsZWN0Q2hhbmdlZCA9ICdtYXBzZWxlY3RjaGFuZ2VkJztcclxuICBzdGF0aWMgTWFwU2VsZWN0ZWQgPSAnbWFwc2VsZWN0ZWQnO1xyXG4gIHN0YXRpYyBNYXBVbnNlbGVjdGVkID0gJ21hcHVuc2VsZWN0ZWQnO1xyXG5cclxuICBzdGF0aWMgQWxsID0gW1xyXG4gICAgRUNoYXJ0RXZlbnRzLkNsaWNrLFxyXG4gICAgRUNoYXJ0RXZlbnRzLkRibENsaWNrLFxyXG4gICAgRUNoYXJ0RXZlbnRzLk1vdXNlRG93bixcclxuICAgIEVDaGFydEV2ZW50cy5Nb3VzZVVwLFxyXG4gICAgRUNoYXJ0RXZlbnRzLk1vdXNlT3ZlcixcclxuICAgIEVDaGFydEV2ZW50cy5Nb3VzZU91dCxcclxuICAgIEVDaGFydEV2ZW50cy5HbG9iYWxPdXQsXHJcbiAgICBFQ2hhcnRFdmVudHMuQ29udGV4dE1lbnUsXHJcbiAgICBFQ2hhcnRFdmVudHMuRGF0YVpvb20sXHJcbiAgICBFQ2hhcnRFdmVudHMuTWFwU2VsZWN0Q2hhbmdlZCxcclxuICAgIEVDaGFydEV2ZW50cy5NYXBTZWxlY3RlZCxcclxuICAgIEVDaGFydEV2ZW50cy5NYXBVbnNlbGVjdGVkLFxyXG4gIF07XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuICBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIFJlbmRlcmVyLCBJbnB1dCwgT3V0cHV0LCBIb3N0TGlzdGVuZXIsIEV2ZW50RW1pdHRlcixcclxuICBPbkNoYW5nZXMsIE9uRGVzdHJveSwgU2ltcGxlQ2hhbmdlcywgTmdab25lLCBEb0NoZWNrLCBBZnRlclZpZXdJbml0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENoYW5nZUZpbHRlciB9IGZyb20gJy4vY2hhbmdlLWZpbHRlcic7XHJcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IGluaXQsIEVDaGFydHMsIEVDaGFydE9wdGlvbiB9IGZyb20gJ2VjaGFydHMnO1xyXG5pbXBvcnQgeyBFQ2hhcnRFdmVudHMgfSBmcm9tICcuL2VjaGFydC1ldmVudHMnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdlY2hhcnRzLCBbZWNoYXJ0c10nLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4RWNoYXJ0c0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95LCBEb0NoZWNrLCBBZnRlclZpZXdJbml0IHtcclxuICBASW5wdXQoKSBvcHRpb25zOiBFQ2hhcnRPcHRpb247XHJcbiAgQElucHV0KCkgdGhlbWU6IHN0cmluZztcclxuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGluaXRPcHRzOiB7XHJcbiAgICBkZXZpY2VQaXhlbFJhdGlvPzogbnVtYmVyXHJcbiAgICByZW5kZXJlcj86IHN0cmluZ1xyXG4gICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmdcclxuICAgIGhlaWdodD86IG51bWJlciB8IHN0cmluZ1xyXG4gIH07XHJcbiAgQElucHV0KCkgbWVyZ2U6IEVDaGFydE9wdGlvbjtcclxuICBASW5wdXQoKSBhdXRvUmVzaXplID0gdHJ1ZTtcclxuICBASW5wdXQoKSBsb2FkaW5nVHlwZSA9ICdkZWZhdWx0JztcclxuICBASW5wdXQoKSBsb2FkaW5nT3B0czogb2JqZWN0O1xyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHRvIHJlZ2lzdGVyIGV2ZW50IGhhbmRsZXJzIG9uIGVjaGFydEluc3RhbmNlLiBEZWZhdWx0IGlzIHRydWUuXHJcbiAgICogVXNlIGl0IHRvIGF2b2lkIHVud2FudGVkIGNoYW5nZSBkZXRlY3Rpb24sIGlmIHlvdSB3YW50IHRvIG9wdGltaXplIHRoZSBwZXJmb3JtYW5jZS5cclxuICAgKi9cclxuICBASW5wdXQoKSBkZXRlY3RFdmVudENoYW5nZXMgPSB0cnVlO1xyXG5cclxuICAvLyBjaGFydCBldmVudHM6XHJcbiAgQE91dHB1dCgpIGNoYXJ0SW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8RUNoYXJ0cz4oKTtcclxuICBAT3V0cHV0KCkgY2hhcnRDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBjaGFydERibENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TW91c2VEb3duID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TW91c2VVcCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBjaGFydE1vdXNlT3ZlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBjaGFydE1vdXNlT3V0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0R2xvYmFsT3V0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0Q29udGV4dE1lbnUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgY2hhcnREYXRhWm9vbSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBjaGFydE1hcFNlbGVjdENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgY2hhcnRNYXBTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBjaGFydE1hcFVuc2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfY2hhcnQ6IEVDaGFydHM7XHJcbiAgcHJpdmF0ZSBjdXJyZW50T2Zmc2V0V2lkdGggPSAwO1xyXG4gIHByaXZhdGUgY3VycmVudE9mZnNldEhlaWdodCA9IDA7XHJcbiAgcHJpdmF0ZSBjdXJyZW50V2luZG93V2lkdGg6IG51bWJlcjtcclxuICBwcml2YXRlIF9yZXNpemUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIF9yZXNpemVTdWI6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZiwgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUpIHsgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUNoYXJ0KCkge1xyXG4gICAgdGhpcy5jdXJyZW50V2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICAgIHRoaXMuY3VycmVudE9mZnNldFdpZHRoID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgdGhpcy5jdXJyZW50T2Zmc2V0SGVpZ2h0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgIGNvbnN0IGRvbSA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcclxuXHJcbiAgICBpZiAod2luZG93ICYmIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKSB7XHJcbiAgICAgIGNvbnN0IHByb3AgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb20sIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2hlaWdodCcpO1xyXG4gICAgICBpZiAoKCFwcm9wIHx8IHByb3AgPT09ICcwcHgnKSAmJlxyXG4gICAgICAgICghZG9tLnN0eWxlLmhlaWdodCB8fCBkb20uc3R5bGUuaGVpZ2h0ID09PSAnMHB4JykpIHtcclxuICAgICAgICBkb20uc3R5bGUuaGVpZ2h0ID0gJzQwMHB4JztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gaW5pdChkb20sIHRoaXMudGhlbWUgfHwgdW5kZWZpbmVkLCB0aGlzLmluaXRPcHRzIHx8IHVuZGVmaW5lZCkpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXHJcbiAgb25XaW5kb3dSZXNpemUoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgV2luZG93O1xyXG5cclxuICAgIGlmICh0aGlzLmF1dG9SZXNpemUgJiYgdGFyZ2V0LmlubmVyV2lkdGggIT09IHRoaXMuY3VycmVudFdpbmRvd1dpZHRoKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFdpbmRvd1dpZHRoID0gdGFyZ2V0LmlubmVyV2lkdGg7XHJcbiAgICAgIHRoaXMuY3VycmVudE9mZnNldFdpZHRoID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgICB0aGlzLmN1cnJlbnRPZmZzZXRIZWlnaHQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5fcmVzaXplJC5uZXh0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBjb25zdCBmaWx0ZXIgPSBDaGFuZ2VGaWx0ZXIub2YoY2hhbmdlcyk7XHJcbiAgICBmaWx0ZXIubm90Rmlyc3RBbmRFbXB0eTxhbnk+KCdvcHRpb25zJykuc3Vic2NyaWJlKG9wdCA9PiB0aGlzLm9uT3B0aW9uc0NoYW5nZShvcHQpKTtcclxuICAgIGZpbHRlci5ub3RGaXJzdEFuZEVtcHR5PGFueT4oJ21lcmdlJykuc3Vic2NyaWJlKG9wdCA9PiB0aGlzLnNldE9wdGlvbihvcHQpKTtcclxuICAgIGZpbHRlci5oYXM8Ym9vbGVhbj4oJ2xvYWRpbmcnKS5zdWJzY3JpYmUodiA9PiB0aGlzLnRvZ2dsZUxvYWRpbmcoISF2KSk7XHJcbiAgICBmaWx0ZXIubm90Rmlyc3Q8Ym9vbGVhbj4oJ2RldGVjdEV2ZW50Q2hhbmdlcycpLnN1YnNjcmliZSh2ID0+IHRoaXMudG9nZ2xlRXZlbnREZXRlY3RvcnMoISF2KSk7XHJcbiAgICBmaWx0ZXIubm90Rmlyc3Q8c3RyaW5nPigndGhlbWUnKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZWZyZXNoQ2hhcnQoKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLl9yZXNpemVTdWIpIHtcclxuICAgICAgdGhpcy5fcmVzaXplU3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIHRoaXMuX3Jlc2l6ZVN1YiA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2NoYXJ0KSB7XHJcbiAgICAgIHRoaXMuX2NoYXJ0LmRpc3Bvc2UoKTtcclxuICAgICAgdGhpcy5fY2hhcnQgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdEb0NoZWNrKCkge1xyXG4gICAgLy8gTm8gaGVhdnkgd29yayBpbiBEb0NoZWNrIVxyXG4gICAgaWYgKHRoaXMuX2NoYXJ0ICYmIHRoaXMuYXV0b1Jlc2l6ZSkge1xyXG4gICAgICBjb25zdCBvZmZzZXRXaWR0aCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcclxuICAgICAgY29uc3Qgb2Zmc2V0SGVpZ2h0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcclxuXHJcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRPZmZzZXRXaWR0aCAhPT0gb2Zmc2V0V2lkdGggfHwgdGhpcy5jdXJyZW50T2Zmc2V0SGVpZ2h0ICE9PSBvZmZzZXRIZWlnaHQpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRPZmZzZXRXaWR0aCA9IG9mZnNldFdpZHRoO1xyXG4gICAgICAgIHRoaXMuY3VycmVudE9mZnNldEhlaWdodCA9IG9mZnNldEhlaWdodDtcclxuICAgICAgICB0aGlzLl9yZXNpemUkLm5leHQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluaXRDaGFydCgpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENoYXJ0KCkge1xyXG4gICAgdGhpcy5vbk9wdGlvbnNDaGFuZ2UodGhpcy5vcHRpb25zKTtcclxuXHJcbiAgICBpZiAodGhpcy5tZXJnZSAmJiB0aGlzLl9jaGFydCkge1xyXG4gICAgICB0aGlzLnNldE9wdGlvbih0aGlzLm1lcmdlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25PcHRpb25zQ2hhbmdlKG9wdDogRUNoYXJ0T3B0aW9uKSB7XHJcbiAgICBpZiAob3B0KSB7XHJcbiAgICAgIGlmICghdGhpcy5fY2hhcnQpIHtcclxuICAgICAgICB0aGlzLl9jaGFydCA9IHRoaXMuY3JlYXRlQ2hhcnQoKTtcclxuXHJcbiAgICAgICAgLy8gc3Vic2NyaWJlIHRvIF9yZXNpemUkIGFuZCBkZWJvdW5jZWRcclxuICAgICAgICB0aGlzLl9yZXNpemVTdWIgPSB0aGlzLl9yZXNpemUkLnBpcGUoZGVib3VuY2VUaW1lKDUwKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLl9jaGFydCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jaGFydC5yZXNpemUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gb3V0cHV0IGVjaGFydCBpbnN0YW5jZTpcclxuICAgICAgICB0aGlzLmNoYXJ0SW5pdC5lbWl0KHRoaXMuX2NoYXJ0KTtcclxuXHJcbiAgICAgICAgLy8gcmVnaXN0ZXIgZXZlbnRzOlxyXG4gICAgICAgIGlmICh0aGlzLmRldGVjdEV2ZW50Q2hhbmdlcykge1xyXG4gICAgICAgICAgdGhpcy5yZWdpc3RlckV2ZW50cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5fY2hhcnQuc2V0T3B0aW9uKHRoaXMub3B0aW9ucywgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlZ2lzdGVyRXZlbnRzKCkge1xyXG4gICAgaWYgKHRoaXMuX2NoYXJ0KSB7XHJcbiAgICAgIGNvbnN0IGV2ZW50cyA9IEVDaGFydEV2ZW50cy5BbGw7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBldmVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICB0aGlzLl9jaGFydC5vbihldmVudHNbaV0sIHRoaXMuZXZlbnRIYW5kbGVyLCB0aGlzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1bnJlZ2lzdGVyRXZlbnRzKCkge1xyXG4gICAgaWYgKHRoaXMuX2NoYXJ0KSB7XHJcbiAgICAgIGNvbnN0IGV2ZW50cyA9IEVDaGFydEV2ZW50cy5BbGw7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBldmVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICB0aGlzLl9jaGFydC5vZmYoZXZlbnRzW2ldLCB0aGlzLmV2ZW50SGFuZGxlcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsZWFyKCkge1xyXG4gICAgaWYgKHRoaXMuX2NoYXJ0KSB7XHJcbiAgICAgIHRoaXMuX2NoYXJ0LmNsZWFyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVMb2FkaW5nKGxvYWRpbmc6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl9jaGFydCkge1xyXG4gICAgICBsb2FkaW5nID8gdGhpcy5fY2hhcnQuc2hvd0xvYWRpbmcodGhpcy5sb2FkaW5nVHlwZSwgdGhpcy5sb2FkaW5nT3B0cykgOiB0aGlzLl9jaGFydC5oaWRlTG9hZGluZygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0T3B0aW9uKG9wdGlvbjogYW55LCBvcHRzPzogYW55KSB7XHJcbiAgICBpZiAodGhpcy5fY2hhcnQpIHtcclxuICAgICAgdGhpcy5fY2hhcnQuc2V0T3B0aW9uKG9wdGlvbiwgb3B0cyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2ZW50SGFuZGxlcihldmVudCkge1xyXG4gICAgc3dpdGNoIChldmVudC50eXBlKSB7XHJcbiAgICAgIGNhc2UgRUNoYXJ0RXZlbnRzLkNsaWNrOlxyXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5jaGFydENsaWNrLmVtaXQoZXZlbnQpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQ2hhcnRFdmVudHMuRGJsQ2xpY2s6XHJcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmNoYXJ0RGJsQ2xpY2suZW1pdChldmVudCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVDaGFydEV2ZW50cy5Nb3VzZURvd246XHJcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmNoYXJ0TW91c2VEb3duLmVtaXQoZXZlbnQpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQ2hhcnRFdmVudHMuTW91c2VVcDpcclxuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMuY2hhcnRNb3VzZVVwLmVtaXQoZXZlbnQpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQ2hhcnRFdmVudHMuTW91c2VPdmVyOlxyXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5jaGFydE1vdXNlT3Zlci5lbWl0KGV2ZW50KSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUNoYXJ0RXZlbnRzLk1vdXNlT3V0OlxyXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5jaGFydE1vdXNlT3V0LmVtaXQoZXZlbnQpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQ2hhcnRFdmVudHMuR2xvYmFsT3V0OlxyXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5jaGFydEdsb2JhbE91dC5lbWl0KGV2ZW50KSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUNoYXJ0RXZlbnRzLkNvbnRleHRNZW51OlxyXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5jaGFydENvbnRleHRNZW51LmVtaXQoZXZlbnQpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQ2hhcnRFdmVudHMuRGF0YVpvb206XHJcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmNoYXJ0RGF0YVpvb20uZW1pdChldmVudCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVDaGFydEV2ZW50cy5NYXBTZWxlY3RDaGFuZ2VkOlxyXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5jaGFydE1hcFNlbGVjdENoYW5nZWQuZW1pdChldmVudCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVDaGFydEV2ZW50cy5NYXBTZWxlY3RlZDpcclxuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMuY2hhcnRNYXBTZWxlY3RlZC5lbWl0KGV2ZW50KSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUNoYXJ0RXZlbnRzLk1hcFVuc2VsZWN0ZWQ6XHJcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmNoYXJ0TWFwVW5zZWxlY3RlZC5lbWl0KGV2ZW50KSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRvZ2dsZUV2ZW50RGV0ZWN0b3JzKGRldGVjdDogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuX2NoYXJ0KSB7XHJcbiAgICAgIGRldGVjdCA/IHRoaXMucmVnaXN0ZXJFdmVudHMoKSA6IHRoaXMudW5yZWdpc3RlckV2ZW50cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoQ2hhcnQoKSB7XHJcbiAgICB0aGlzLm5nT25EZXN0cm95KCk7XHJcbiAgICB0aGlzLmluaXRDaGFydCgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ3hFY2hhcnRzRGlyZWN0aXZlIH0gZnJvbSAnLi9uZ3gtZWNoYXJ0cy5kaXJlY3RpdmUnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBpbXBvcnRzOiBbXSxcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIE5neEVjaGFydHNEaXJlY3RpdmVcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIE5neEVjaGFydHNEaXJlY3RpdmVcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hFY2hhcnRzTW9kdWxlIHsgfVxyXG4iXSwibmFtZXMiOlsib2YiLCJlbXB0eSIsIkV2ZW50RW1pdHRlciIsIlN1YmplY3QiLCJpbml0IiwiZGVib3VuY2VUaW1lIiwiRGlyZWN0aXZlIiwiRWxlbWVudFJlZiIsIk5nWm9uZSIsIklucHV0IiwiT3V0cHV0IiwiSG9zdExpc3RlbmVyIiwiTmdNb2R1bGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFDQSxJQUVBO1FBQ0Usc0JBQW9CLFFBQXVCO1lBQXZCLGFBQVEsR0FBUixRQUFRLENBQWU7U0FBSzs7Ozs7UUFFekMsZUFBRTs7OztZQUFULFVBQVUsT0FBc0I7Z0JBQzlCLE9BQU8sSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDbEM7Ozs7OztRQUVELCtCQUFROzs7OztZQUFSLFVBQVksR0FBVztnQkFDckIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFOzt3QkFDaEIsS0FBSyxHQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsR0FB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 | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWVjaGFydHMudW1kLmpzLm1hcCIsInNvdXJjZXMiOlsibmc6Ly9uZ3gtZWNoYXJ0cy9saWIvY2hhbmdlLWZpbHRlci50cyIsIm5nOi8vbmd4LWVjaGFydHMvbGliL25neC1lY2hhcnRzLmRpcmVjdGl2ZS50cyIsIm5nOi8vbmd4LWVjaGFydHMvbGliL25neC1lY2hhcnRzLm1vZHVsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBlbXB0eSB9IGZyb20gJ3J4anMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENoYW5nZUZpbHRlciB7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfY2hhbmdlczogU2ltcGxlQ2hhbmdlcykgeyB9XHJcblxyXG4gIHN0YXRpYyBvZihjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICByZXR1cm4gbmV3IENoYW5nZUZpbHRlcihjaGFuZ2VzKTtcclxuICB9XHJcblxyXG4gIG5vdEVtcHR5PFQ+KGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICBpZiAodGhpcy5fY2hhbmdlc1trZXldKSB7XHJcbiAgICAgIGNvbnN0IHZhbHVlOiBUID0gdGhpcy5fY2hhbmdlc1trZXldLmN1cnJlbnRWYWx1ZTtcclxuXHJcbiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIG9mKHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVtcHR5KCk7XHJcbiAgfVxyXG5cclxuICBoYXM8VD4oa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIGlmICh0aGlzLl9jaGFuZ2VzW2tleV0pIHtcclxuICAgICAgY29uc3QgdmFsdWU6IFQgPSB0aGlzLl9jaGFuZ2VzW2tleV0uY3VycmVudFZhbHVlO1xyXG4gICAgICByZXR1cm4gb2YodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVtcHR5KCk7XHJcbiAgfVxyXG5cclxuICBub3RGaXJzdDxUPihrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgaWYgKHRoaXMuX2NoYW5nZXNba2V5XSAmJiAhdGhpcy5fY2hhbmdlc1trZXldLmlzRmlyc3RDaGFuZ2UoKSkge1xyXG4gICAgICBjb25zdCB2YWx1ZTogVCA9IHRoaXMuX2NoYW5nZXNba2V5XS5jdXJyZW50VmFsdWU7XHJcbiAgICAgIHJldHVybiBvZih2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIG5vdEZpcnN0QW5kRW1wdHk8VD4oa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIGlmICh0aGlzLl9jaGFuZ2VzW2tleV0gJiYgIXRoaXMuX2NoYW5nZXNba2V5XS5pc0ZpcnN0Q2hhbmdlKCkpIHtcclxuICAgICAgY29uc3QgdmFsdWU6IFQgPSB0aGlzLl9jaGFuZ2VzW2tleV0uY3VycmVudFZhbHVlO1xyXG5cclxuICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gb2YodmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZW1wdHkoKTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBEb0NoZWNrLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBOZ1pvbmUsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBFQ2hhcnRPcHRpb24sIEVDaGFydHMsIGluaXQgfSBmcm9tICdlY2hhcnRzJztcclxuaW1wb3J0IHsgZnJvbUV2ZW50LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENoYW5nZUZpbHRlciB9IGZyb20gJy4vY2hhbmdlLWZpbHRlcic7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ2VjaGFydHMsIFtlY2hhcnRzXScsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hFY2hhcnRzRGlyZWN0aXZlIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgRG9DaGVjaywgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQElucHV0KCkgb3B0aW9uczogRUNoYXJ0T3B0aW9uO1xyXG4gIEBJbnB1dCgpIHRoZW1lOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBpbml0T3B0czoge1xyXG4gICAgZGV2aWNlUGl4ZWxSYXRpbz86IG51bWJlclxyXG4gICAgcmVuZGVyZXI/OiBzdHJpbmdcclxuICAgIHdpZHRoPzogbnVtYmVyIHwgc3RyaW5nXHJcbiAgICBoZWlnaHQ/OiBudW1iZXIgfCBzdHJpbmdcclxuICB9O1xyXG4gIEBJbnB1dCgpIG1lcmdlOiBFQ2hhcnRPcHRpb247XHJcbiAgQElucHV0KCkgYXV0b1Jlc2l6ZSA9IHRydWU7XHJcbiAgQElucHV0KCkgbG9hZGluZ1R5cGUgPSAnZGVmYXVsdCc7XHJcbiAgQElucHV0KCkgbG9hZGluZ09wdHM6IG9iamVjdDtcclxuICBASW5wdXQoKSBkZXRlY3RFdmVudENoYW5nZXMgPSB0cnVlOyAvLyBkZXByZWNhdGVkLCBsZWZ0IGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMgdG8gYXZvaWQgdHJpZ2dlcmluZyBtYWpvciB2ZXJzaW9uXHJcblxyXG4gIC8vIG5neC1lY2hhcnRzIGV2ZW50c1xyXG4gIEBPdXRwdXQoKSBjaGFydEluaXQgPSBuZXcgRXZlbnRFbWl0dGVyPEVDaGFydHM+KCk7XHJcblxyXG4gIC8vIGVjaGFydHMgbW91c2UgZXZlbnRzXHJcbiAgQE91dHB1dCgpIGNoYXJ0Q2xpY2sgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnY2xpY2snKTtcclxuICBAT3V0cHV0KCkgY2hhcnREYmxDbGljayA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdkYmxjbGljaycpO1xyXG4gIEBPdXRwdXQoKSBjaGFydE1vdXNlRG93biA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdtb3VzZWRvd24nKTtcclxuICBAT3V0cHV0KCkgY2hhcnRNb3VzZU1vdmUgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnbW91c2Vtb3ZlJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TW91c2VVcCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdtb3VzZXVwJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TW91c2VPdmVyID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ21vdXNlb3ZlcicpO1xyXG4gIEBPdXRwdXQoKSBjaGFydE1vdXNlT3V0ID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ21vdXNlb3V0Jyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0R2xvYmFsT3V0ID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ2dsb2JhbG91dCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydENvbnRleHRNZW51ID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ2NvbnRleHRtZW51Jyk7XHJcblxyXG4gIC8vIGVjaGFydHMgbW91c2UgZXZlbnRzXHJcbiAgQE91dHB1dCgpIGNoYXJ0TGVnZW5kU2VsZWN0Q2hhbmdlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdsZWdlbmRzZWxlY3RjaGFuZ2VkJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TGVnZW5kU2VsZWN0ZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnbGVnZW5kc2VsZWN0ZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRMZWdlbmRVbnNlbGVjdGVkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ2xlZ2VuZHVuc2VsZWN0ZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRMZWdlbmRTY3JvbGwgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnbGVnZW5kc2Nyb2xsJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0RGF0YVpvb20gPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnZGF0YXpvb20nKTtcclxuICBAT3V0cHV0KCkgY2hhcnREYXRhUmFuZ2VTZWxlY3RlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdkYXRhcmFuZ2VzZWxlY3RlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydFRpbWVsaW5lQ2hhbmdlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCd0aW1lbGluZWNoYW5nZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRUaW1lbGluZVBsYXlDaGFuZ2VkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ3RpbWVsaW5lcGxheWNoYW5nZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRSZXN0b3JlID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ3Jlc3RvcmUnKTtcclxuICBAT3V0cHV0KCkgY2hhcnREYXRhVmlld0NoYW5nZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnZGF0YXZpZXdjaGFuZ2VkJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TWFnaWNUeXBlQ2hhbmdlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdtYWdpY3R5cGVjaGFuZ2VkJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0UGllU2VsZWN0Q2hhbmdlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdwaWVzZWxlY3RjaGFuZ2VkJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0UGllU2VsZWN0ZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgncGllc2VsZWN0ZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRQaWVVbnNlbGVjdGVkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ3BpZXVuc2VsZWN0ZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRNYXBTZWxlY3RDaGFuZ2VkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ21hcHNlbGVjdGNoYW5nZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRNYXBTZWxlY3RlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdtYXBzZWxlY3RlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydE1hcFVuc2VsZWN0ZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnbWFwdW5zZWxlY3RlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydEF4aXNBcmVhU2VsZWN0ZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnYXhpc2FyZWFzZWxlY3RlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydEZvY3VzTm9kZUFkamFjZW5jeSA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdmb2N1c25vZGVhZGphY2VuY3knKTtcclxuICBAT3V0cHV0KCkgY2hhcnRVbmZvY3VzTm9kZUFkamFjZW5jeSA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCd1bmZvY3Vzbm9kZWFkamFjZW5jeScpO1xyXG4gIEBPdXRwdXQoKSBjaGFydEJydXNoID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ2JydXNoJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0QnJ1c2hTZWxlY3RlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdicnVzaHNlbGVjdGVkJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0UmVuZGVyZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgncmVuZGVyZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRGaW5pc2hlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdmaW5pc2hlZCcpO1xyXG5cclxuICBwcml2YXRlIGNoYXJ0OiBFQ2hhcnRzO1xyXG4gIHByaXZhdGUgY3VycmVudE9mZnNldFdpZHRoID0gMDtcclxuICBwcml2YXRlIGN1cnJlbnRPZmZzZXRIZWlnaHQgPSAwO1xyXG4gIHByaXZhdGUgY3VycmVudFdpbmRvd1dpZHRoOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSByZXNpemVTdWI6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZiwgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSkgeyB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGNvbnN0IGZpbHRlciA9IENoYW5nZUZpbHRlci5vZihjaGFuZ2VzKTtcclxuICAgIGZpbHRlci5ub3RGaXJzdEFuZEVtcHR5PGFueT4oJ29wdGlvbnMnKS5zdWJzY3JpYmUob3B0ID0+IHRoaXMub25PcHRpb25zQ2hhbmdlKG9wdCkpO1xyXG4gICAgZmlsdGVyLm5vdEZpcnN0QW5kRW1wdHk8YW55PignbWVyZ2UnKS5zdWJzY3JpYmUob3B0ID0+IHRoaXMuc2V0T3B0aW9uKG9wdCkpO1xyXG4gICAgZmlsdGVyLmhhczxib29sZWFuPignbG9hZGluZycpLnN1YnNjcmliZSh2ID0+IHRoaXMudG9nZ2xlTG9hZGluZyghIXYpKTtcclxuICAgIGZpbHRlci5ub3RGaXJzdDxzdHJpbmc+KCd0aGVtZScpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlZnJlc2hDaGFydCgpKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5yZXNpemVTdWIgPSBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJykucGlwZShkZWJvdW5jZVRpbWUoNTApKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5hdXRvUmVzaXplICYmIHdpbmRvdy5pbm5lcldpZHRoICE9PSB0aGlzLmN1cnJlbnRXaW5kb3dXaWR0aCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50T2Zmc2V0V2lkdGggPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50T2Zmc2V0SGVpZ2h0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5yZXNpemVTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdEb0NoZWNrKCkge1xyXG4gICAgLy8gTm8gaGVhdnkgd29yayBpbiBEb0NoZWNrIVxyXG4gICAgaWYgKHRoaXMuY2hhcnQgJiYgdGhpcy5hdXRvUmVzaXplKSB7XHJcbiAgICAgIGNvbnN0IG9mZnNldFdpZHRoID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgICBjb25zdCBvZmZzZXRIZWlnaHQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG5cclxuICAgICAgaWYgKHRoaXMuY3VycmVudE9mZnNldFdpZHRoICE9PSBvZmZzZXRXaWR0aCB8fCB0aGlzLmN1cnJlbnRPZmZzZXRIZWlnaHQgIT09IG9mZnNldEhlaWdodCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudE9mZnNldFdpZHRoID0gb2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50T2Zmc2V0SGVpZ2h0ID0gb2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgIHRoaXMucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5pbml0Q2hhcnQoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpc3Bvc2UoKSB7XHJcbiAgICBpZiAodGhpcy5jaGFydCkge1xyXG4gICAgICB0aGlzLmNoYXJ0LmRpc3Bvc2UoKTtcclxuICAgICAgdGhpcy5jaGFydCA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2l6ZSgpIHtcclxuICAgIGlmICh0aGlzLmNoYXJ0KSB7XHJcbiAgICAgIHRoaXMuY2hhcnQucmVzaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRvZ2dsZUxvYWRpbmcobG9hZGluZzogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuY2hhcnQpIHtcclxuICAgICAgbG9hZGluZyA/IHRoaXMuY2hhcnQuc2hvd0xvYWRpbmcodGhpcy5sb2FkaW5nVHlwZSwgdGhpcy5sb2FkaW5nT3B0cykgOiB0aGlzLmNoYXJ0LmhpZGVMb2FkaW5nKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldE9wdGlvbihvcHRpb246IGFueSwgb3B0cz86IGFueSkge1xyXG4gICAgaWYgKHRoaXMuY2hhcnQpIHtcclxuICAgICAgdGhpcy5jaGFydC5zZXRPcHRpb24ob3B0aW9uLCBvcHRzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVmcmVzaENoYXJ0KCkge1xyXG4gICAgdGhpcy5kaXNwb3NlKCk7XHJcbiAgICB0aGlzLmluaXRDaGFydCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVDaGFydCgpIHtcclxuICAgIHRoaXMuY3VycmVudFdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICB0aGlzLmN1cnJlbnRPZmZzZXRXaWR0aCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcclxuICAgIHRoaXMuY3VycmVudE9mZnNldEhlaWdodCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICBjb25zdCBkb20gPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgaWYgKHdpbmRvdyAmJiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSkge1xyXG4gICAgICBjb25zdCBwcm9wID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9tLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdoZWlnaHQnKTtcclxuICAgICAgaWYgKCghcHJvcCB8fCBwcm9wID09PSAnMHB4JykgJiZcclxuICAgICAgICAoIWRvbS5zdHlsZS5oZWlnaHQgfHwgZG9tLnN0eWxlLmhlaWdodCA9PT0gJzBweCcpKSB7XHJcbiAgICAgICAgZG9tLnN0eWxlLmhlaWdodCA9ICc0MDBweCc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gaW5pdChkb20sIHRoaXMudGhlbWUsIHRoaXMuaW5pdE9wdHMpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENoYXJ0KCkge1xyXG4gICAgdGhpcy5vbk9wdGlvbnNDaGFuZ2UodGhpcy5vcHRpb25zKTtcclxuXHJcbiAgICBpZiAodGhpcy5tZXJnZSAmJiB0aGlzLmNoYXJ0KSB7XHJcbiAgICAgIHRoaXMuc2V0T3B0aW9uKHRoaXMubWVyZ2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbk9wdGlvbnNDaGFuZ2Uob3B0OiBFQ2hhcnRPcHRpb24pIHtcclxuICAgIGlmIChvcHQpIHtcclxuICAgICAgaWYgKCF0aGlzLmNoYXJ0KSB7XHJcbiAgICAgICAgdGhpcy5jaGFydCA9IHRoaXMuY3JlYXRlQ2hhcnQoKTtcclxuICAgICAgICB0aGlzLmNoYXJ0SW5pdC5lbWl0KHRoaXMuY2hhcnQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNoYXJ0LnNldE9wdGlvbih0aGlzLm9wdGlvbnMsIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gYWxsb3dzIHRvIGxhemlseSBiaW5kIHRvIG9ubHkgdGhvc2UgZXZlbnRzIHRoYXQgYXJlIHJlcXVlc3RlZCB0aHJvdWdoIHRoZSBgQE91dHB1dGAgYnkgcGFyZW50IGNvbXBvbmVudHNcclxuICAvLyBzZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTE3ODc5NzIvb3B0aW1hbC1yZWVudGVyaW5nLXRoZS1uZ3pvbmUtZnJvbS1ldmVudGVtaXR0ZXItZXZlbnQgZm9yIG1vcmUgaW5mb1xyXG4gIHByaXZhdGUgY3JlYXRlTGF6eUV2ZW50PFQ+KGV2ZW50TmFtZTogc3RyaW5nKTogRXZlbnRFbWl0dGVyPFQ+IHtcclxuICAgIHJldHVybiB0aGlzLmNoYXJ0SW5pdC5waXBlKFxyXG4gICAgICBzd2l0Y2hNYXAoKGNoYXJ0OiBFQ2hhcnRzKSA9PiBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XHJcbiAgICAgICAgY2hhcnQub24oZXZlbnROYW1lLCAoZGF0YTogVCkgPT4gdGhpcy5uZ1pvbmUucnVuKCgpID0+IG9ic2VydmVyLm5leHQoZGF0YSkpKTtcclxuICAgICAgICByZXR1cm4gbnVsbDsgLy8gbm8gbmVlZCB0byByZWFjdCBvbiB1bnN1YnNjcmliZSBhcyBsb25nIGFzIHRoZSBgZGlzcG9zZSgpYCBpcyBjYWxsZWQgaW4gbmdPbkRlc3Ryb3lcclxuICAgICAgfSkpXHJcbiAgICApIGFzIEV2ZW50RW1pdHRlcjxUPjtcclxuICB9XHJcblxyXG59XHJcbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5neEVjaGFydHNEaXJlY3RpdmUgfSBmcm9tICcuL25neC1lY2hhcnRzLmRpcmVjdGl2ZSc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGltcG9ydHM6IFtdLFxyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgTmd4RWNoYXJ0c0RpcmVjdGl2ZVxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgTmd4RWNoYXJ0c0RpcmVjdGl2ZVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE5neEVjaGFydHNNb2R1bGUgeyB9XHJcbiJdLCJuYW1lcyI6WyJvZiIsImVtcHR5IiwiRXZlbnRFbWl0dGVyIiwiZnJvbUV2ZW50IiwiZGVib3VuY2VUaW1lIiwiaW5pdCIsInN3aXRjaE1hcCIsIk9ic2VydmFibGUiLCJEaXJlY3RpdmUiLCJFbGVtZW50UmVmIiwiTmdab25lIiwiSW5wdXQiLCJPdXRw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 |
@@ -1,2 +0,2 @@ | ||
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("rxjs"),require("@angular/core"),require("rxjs/operators"),require("echarts")):"function"==typeof define&&define.amd?define("ngx-echarts",["exports","rxjs","@angular/core","rxjs/operators","echarts"],e):e(t["ngx-echarts"]={},t.rxjs,t.ng.core,t.rxjs.operators,t.echarts)}(this,function(t,n,r,i,s){"use strict";var o=function(){function e(t){this._changes=t}return e.of=function(t){return new e(t)},e.prototype.notEmpty=function(t){if(this._changes[t]){var e=this._changes[t].currentValue;if(e!==undefined&&null!==e)return n.of(e)}return n.empty()},e.prototype.has=function(t){if(this._changes[t]){var e=this._changes[t].currentValue;return n.of(e)}return n.empty()},e.prototype.notFirst=function(t){if(this._changes[t]&&!this._changes[t].isFirstChange()){var e=this._changes[t].currentValue;return n.of(e)}return n.empty()},e.prototype.notFirstAndEmpty=function(t){if(this._changes[t]&&!this._changes[t].isFirstChange()){var e=this._changes[t].currentValue;if(e!==undefined&&null!==e)return n.of(e)}return n.empty()},e}(),h=function(){function t(){}return t.All=[t.Click="click",t.DblClick="dblclick",t.MouseDown="mousedown",t.MouseUp="mouseup",t.MouseOver="mouseover",t.MouseOut="mouseout",t.GlobalOut="globalout",t.ContextMenu="contextmenu",t.DataZoom="datazoom",t.MapSelectChanged="mapselectchanged",t.MapSelected="mapselected",t.MapUnselected="mapunselected"],t}(),e=function(){function t(t,e){this.el=t,this._ngZone=e,this.autoResize=!0,this.loadingType="default",this.detectEventChanges=!0,this.chartInit=new r.EventEmitter,this.chartClick=new r.EventEmitter,this.chartDblClick=new r.EventEmitter,this.chartMouseDown=new r.EventEmitter,this.chartMouseUp=new r.EventEmitter,this.chartMouseOver=new r.EventEmitter,this.chartMouseOut=new r.EventEmitter,this.chartGlobalOut=new r.EventEmitter,this.chartContextMenu=new r.EventEmitter,this.chartDataZoom=new r.EventEmitter,this.chartMapSelectChanged=new r.EventEmitter,this.chartMapSelected=new r.EventEmitter,this.chartMapUnselected=new r.EventEmitter,this.currentOffsetWidth=0,this.currentOffsetHeight=0,this._resize$=new n.Subject}return t.prototype.createChart=function(){var t=this;this.currentWindowWidth=window.innerWidth,this.currentOffsetWidth=this.el.nativeElement.offsetWidth,this.currentOffsetHeight=this.el.nativeElement.offsetHeight;var e=this.el.nativeElement;if(window&&window.getComputedStyle){var n=window.getComputedStyle(e,null).getPropertyValue("height");n&&"0px"!==n||e.style.height&&"0px"!==e.style.height||(e.style.height="400px")}return this._ngZone.runOutsideAngular(function(){return s.init(e,t.theme||undefined,t.initOpts||undefined)})},t.prototype.onWindowResize=function(t){var e=t.target;this.autoResize&&e.innerWidth!==this.currentWindowWidth&&(this.currentWindowWidth=e.innerWidth,this.currentOffsetWidth=this.el.nativeElement.offsetWidth,this.currentOffsetHeight=this.el.nativeElement.offsetHeight,this._resize$.next())},t.prototype.ngOnChanges=function(t){var e=this,n=o.of(t);n.notFirstAndEmpty("options").subscribe(function(t){return e.onOptionsChange(t)}),n.notFirstAndEmpty("merge").subscribe(function(t){return e.setOption(t)}),n.has("loading").subscribe(function(t){return e.toggleLoading(!!t)}),n.notFirst("detectEventChanges").subscribe(function(t){return e.toggleEventDetectors(!!t)}),n.notFirst("theme").subscribe(function(){return e.refreshChart()})},t.prototype.ngOnDestroy=function(){this._resizeSub&&(this._resizeSub.unsubscribe(),this._resizeSub=null),this._chart&&(this._chart.dispose(),this._chart=null)},t.prototype.ngDoCheck=function(){if(this._chart&&this.autoResize){var t=this.el.nativeElement.offsetWidth,e=this.el.nativeElement.offsetHeight;this.currentOffsetWidth===t&&this.currentOffsetHeight===e||(this.currentOffsetWidth=t,this.currentOffsetHeight=e,this._resize$.next())}},t.prototype.ngAfterViewInit=function(){var t=this;setTimeout(function(){return t.initChart()})},t.prototype.initChart=function(){this.onOptionsChange(this.options),this.merge&&this._chart&&this.setOption(this.merge)},t.prototype.onOptionsChange=function(t){var e=this;t&&(this._chart||(this._chart=this.createChart(),this._resizeSub=this._resize$.pipe(i.debounceTime(50)).subscribe(function(){e._chart&&e._chart.resize()}),this.chartInit.emit(this._chart),this.detectEventChanges&&this.registerEvents()),this._chart.setOption(this.options,!0))},t.prototype.registerEvents=function(){if(this._chart)for(var t=h.All,e=0,n=t.length;e<n;e++)this._chart.on(t[e],this.eventHandler,this)},t.prototype.unregisterEvents=function(){if(this._chart)for(var t=h.All,e=0,n=t.length;e<n;e++)this._chart.off(t[e],this.eventHandler)},t.prototype.clear=function(){this._chart&&this._chart.clear()},t.prototype.toggleLoading=function(t){this._chart&&(t?this._chart.showLoading(this.loadingType,this.loadingOpts):this._chart.hideLoading())},t.prototype.setOption=function(t,e){this._chart&&this._chart.setOption(t,e)},t.prototype.eventHandler=function(t){var e=this;switch(t.type){case h.Click:this._ngZone.run(function(){return e.chartClick.emit(t)});break;case h.DblClick:this._ngZone.run(function(){return e.chartDblClick.emit(t)});break;case h.MouseDown:this._ngZone.run(function(){return e.chartMouseDown.emit(t)});break;case h.MouseUp:this._ngZone.run(function(){return e.chartMouseUp.emit(t)});break;case h.MouseOver:this._ngZone.run(function(){return e.chartMouseOver.emit(t)});break;case h.MouseOut:this._ngZone.run(function(){return e.chartMouseOut.emit(t)});break;case h.GlobalOut:this._ngZone.run(function(){return e.chartGlobalOut.emit(t)});break;case h.ContextMenu:this._ngZone.run(function(){return e.chartContextMenu.emit(t)});break;case h.DataZoom:this._ngZone.run(function(){return e.chartDataZoom.emit(t)});break;case h.MapSelectChanged:this._ngZone.run(function(){return e.chartMapSelectChanged.emit(t)});break;case h.MapSelected:this._ngZone.run(function(){return e.chartMapSelected.emit(t)});break;case h.MapUnselected:this._ngZone.run(function(){return e.chartMapUnselected.emit(t)})}},t.prototype.toggleEventDetectors=function(t){this._chart&&(t?this.registerEvents():this.unregisterEvents())},t.prototype.refreshChart=function(){this.ngOnDestroy(),this.initChart()},t.decorators=[{type:r.Directive,args:[{selector:"echarts, [echarts]"}]}],t.ctorParameters=function(){return[{type:r.ElementRef},{type:r.NgZone}]},t.propDecorators={options:[{type:r.Input}],theme:[{type:r.Input}],loading:[{type:r.Input}],initOpts:[{type:r.Input}],merge:[{type:r.Input}],autoResize:[{type:r.Input}],loadingType:[{type:r.Input}],loadingOpts:[{type:r.Input}],detectEventChanges:[{type:r.Input}],chartInit:[{type:r.Output}],chartClick:[{type:r.Output}],chartDblClick:[{type:r.Output}],chartMouseDown:[{type:r.Output}],chartMouseUp:[{type:r.Output}],chartMouseOver:[{type:r.Output}],chartMouseOut:[{type:r.Output}],chartGlobalOut:[{type:r.Output}],chartContextMenu:[{type:r.Output}],chartDataZoom:[{type:r.Output}],chartMapSelectChanged:[{type:r.Output}],chartMapSelected:[{type:r.Output}],chartMapUnselected:[{type:r.Output}],onWindowResize:[{type:r.HostListener,args:["window:resize",["$event"]]}]},t}(),u=function(){function t(){}return t.decorators=[{type:r.NgModule,args:[{imports:[],declarations:[e],exports:[e]}]}],t}();t.NgxEchartsModule=u,t.ɵa=e,Object.defineProperty(t,"__esModule",{value:!0})}); | ||
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("rxjs"),require("@angular/core"),require("echarts"),require("rxjs/operators")):"function"==typeof define&&define.amd?define("ngx-echarts",["exports","rxjs","@angular/core","echarts","rxjs/operators"],e):e(t["ngx-echarts"]={},t.rxjs,t.ng.core,t.echarts,t.rxjs.operators)}(this,function(t,r,n,i,e){"use strict";var h=function(){function e(t){this._changes=t}return e.of=function(t){return new e(t)},e.prototype.notEmpty=function(t){if(this._changes[t]){var e=this._changes[t].currentValue;if(e!==undefined&&null!==e)return r.of(e)}return r.empty()},e.prototype.has=function(t){if(this._changes[t]){var e=this._changes[t].currentValue;return r.of(e)}return r.empty()},e.prototype.notFirst=function(t){if(this._changes[t]&&!this._changes[t].isFirstChange()){var e=this._changes[t].currentValue;return r.of(e)}return r.empty()},e.prototype.notFirstAndEmpty=function(t){if(this._changes[t]&&!this._changes[t].isFirstChange()){var e=this._changes[t].currentValue;if(e!==undefined&&null!==e)return r.of(e)}return r.empty()},e}(),a=function(){function t(t,e){this.el=t,this.ngZone=e,this.autoResize=!0,this.loadingType="default",this.detectEventChanges=!0,this.chartInit=new n.EventEmitter,this.chartClick=this.createLazyEvent("click"),this.chartDblClick=this.createLazyEvent("dblclick"),this.chartMouseDown=this.createLazyEvent("mousedown"),this.chartMouseMove=this.createLazyEvent("mousemove"),this.chartMouseUp=this.createLazyEvent("mouseup"),this.chartMouseOver=this.createLazyEvent("mouseover"),this.chartMouseOut=this.createLazyEvent("mouseout"),this.chartGlobalOut=this.createLazyEvent("globalout"),this.chartContextMenu=this.createLazyEvent("contextmenu"),this.chartLegendSelectChanged=this.createLazyEvent("legendselectchanged"),this.chartLegendSelected=this.createLazyEvent("legendselected"),this.chartLegendUnselected=this.createLazyEvent("legendunselected"),this.chartLegendScroll=this.createLazyEvent("legendscroll"),this.chartDataZoom=this.createLazyEvent("datazoom"),this.chartDataRangeSelected=this.createLazyEvent("datarangeselected"),this.chartTimelineChanged=this.createLazyEvent("timelinechanged"),this.chartTimelinePlayChanged=this.createLazyEvent("timelineplaychanged"),this.chartRestore=this.createLazyEvent("restore"),this.chartDataViewChanged=this.createLazyEvent("dataviewchanged"),this.chartMagicTypeChanged=this.createLazyEvent("magictypechanged"),this.chartPieSelectChanged=this.createLazyEvent("pieselectchanged"),this.chartPieSelected=this.createLazyEvent("pieselected"),this.chartPieUnselected=this.createLazyEvent("pieunselected"),this.chartMapSelectChanged=this.createLazyEvent("mapselectchanged"),this.chartMapSelected=this.createLazyEvent("mapselected"),this.chartMapUnselected=this.createLazyEvent("mapunselected"),this.chartAxisAreaSelected=this.createLazyEvent("axisareaselected"),this.chartFocusNodeAdjacency=this.createLazyEvent("focusnodeadjacency"),this.chartUnfocusNodeAdjacency=this.createLazyEvent("unfocusnodeadjacency"),this.chartBrush=this.createLazyEvent("brush"),this.chartBrushSelected=this.createLazyEvent("brushselected"),this.chartRendered=this.createLazyEvent("rendered"),this.chartFinished=this.createLazyEvent("finished"),this.currentOffsetWidth=0,this.currentOffsetHeight=0}return t.prototype.ngOnChanges=function(t){var e=this,n=h.of(t);n.notFirstAndEmpty("options").subscribe(function(t){return e.onOptionsChange(t)}),n.notFirstAndEmpty("merge").subscribe(function(t){return e.setOption(t)}),n.has("loading").subscribe(function(t){return e.toggleLoading(!!t)}),n.notFirst("theme").subscribe(function(){return e.refreshChart()})},t.prototype.ngOnInit=function(){var t=this;this.resizeSub=r.fromEvent(window,"resize").pipe(e.debounceTime(50)).subscribe(function(){t.autoResize&&window.innerWidth!==t.currentWindowWidth&&(t.currentWindowWidth=window.innerWidth,t.currentOffsetWidth=t.el.nativeElement.offsetWidth,t.currentOffsetHeight=t.el.nativeElement.offsetHeight,t.resize())})},t.prototype.ngOnDestroy=function(){this.resizeSub.unsubscribe(),this.dispose()},t.prototype.ngDoCheck=function(){if(this.chart&&this.autoResize){var t=this.el.nativeElement.offsetWidth,e=this.el.nativeElement.offsetHeight;this.currentOffsetWidth===t&&this.currentOffsetHeight===e||(this.currentOffsetWidth=t,this.currentOffsetHeight=e,this.resize())}},t.prototype.ngAfterViewInit=function(){var t=this;setTimeout(function(){return t.initChart()})},t.prototype.dispose=function(){this.chart&&(this.chart.dispose(),this.chart=null)},t.prototype.resize=function(){this.chart&&this.chart.resize()},t.prototype.toggleLoading=function(t){this.chart&&(t?this.chart.showLoading(this.loadingType,this.loadingOpts):this.chart.hideLoading())},t.prototype.setOption=function(t,e){this.chart&&this.chart.setOption(t,e)},t.prototype.refreshChart=function(){this.dispose(),this.initChart()},t.prototype.createChart=function(){var t=this;this.currentWindowWidth=window.innerWidth,this.currentOffsetWidth=this.el.nativeElement.offsetWidth,this.currentOffsetHeight=this.el.nativeElement.offsetHeight;var e=this.el.nativeElement;if(window&&window.getComputedStyle){var n=window.getComputedStyle(e,null).getPropertyValue("height");n&&"0px"!==n||e.style.height&&"0px"!==e.style.height||(e.style.height="400px")}return this.ngZone.runOutsideAngular(function(){return i.init(e,t.theme,t.initOpts)})},t.prototype.initChart=function(){this.onOptionsChange(this.options),this.merge&&this.chart&&this.setOption(this.merge)},t.prototype.onOptionsChange=function(t){t&&(this.chart||(this.chart=this.createChart(),this.chartInit.emit(this.chart)),this.chart.setOption(this.options,!0))},t.prototype.createLazyEvent=function(n){var i=this;return this.chartInit.pipe(e.switchMap(function(t){return new r.Observable(function(e){return t.on(n,function(t){return i.ngZone.run(function(){return e.next(t)})}),null})}))},t.decorators=[{type:n.Directive,args:[{selector:"echarts, [echarts]"}]}],t.ctorParameters=function(){return[{type:n.ElementRef},{type:n.NgZone}]},t.propDecorators={options:[{type:n.Input}],theme:[{type:n.Input}],loading:[{type:n.Input}],initOpts:[{type:n.Input}],merge:[{type:n.Input}],autoResize:[{type:n.Input}],loadingType:[{type:n.Input}],loadingOpts:[{type:n.Input}],detectEventChanges:[{type:n.Input}],chartInit:[{type:n.Output}],chartClick:[{type:n.Output}],chartDblClick:[{type:n.Output}],chartMouseDown:[{type:n.Output}],chartMouseMove:[{type:n.Output}],chartMouseUp:[{type:n.Output}],chartMouseOver:[{type:n.Output}],chartMouseOut:[{type:n.Output}],chartGlobalOut:[{type:n.Output}],chartContextMenu:[{type:n.Output}],chartLegendSelectChanged:[{type:n.Output}],chartLegendSelected:[{type:n.Output}],chartLegendUnselected:[{type:n.Output}],chartLegendScroll:[{type:n.Output}],chartDataZoom:[{type:n.Output}],chartDataRangeSelected:[{type:n.Output}],chartTimelineChanged:[{type:n.Output}],chartTimelinePlayChanged:[{type:n.Output}],chartRestore:[{type:n.Output}],chartDataViewChanged:[{type:n.Output}],chartMagicTypeChanged:[{type:n.Output}],chartPieSelectChanged:[{type:n.Output}],chartPieSelected:[{type:n.Output}],chartPieUnselected:[{type:n.Output}],chartMapSelectChanged:[{type:n.Output}],chartMapSelected:[{type:n.Output}],chartMapUnselected:[{type:n.Output}],chartAxisAreaSelected:[{type:n.Output}],chartFocusNodeAdjacency:[{type:n.Output}],chartUnfocusNodeAdjacency:[{type:n.Output}],chartBrush:[{type:n.Output}],chartBrushSelected:[{type:n.Output}],chartRendered:[{type:n.Output}],chartFinished:[{type:n.Output}]},t}(),s=function(){function t(){}return t.decorators=[{type:n.NgModule,args:[{imports:[],declarations:[a],exports:[a]}]}],t}();t.NgxEchartsModule=s,t.ɵa=a,Object.defineProperty(t,"__esModule",{value:!0})}); | ||
//# sourceMappingURL=ngx-echarts.umd.min.js.map |
@@ -5,75 +5,60 @@ /** | ||
*/ | ||
import { Directive, ElementRef, Input, Output, HostListener, EventEmitter, NgZone } from '@angular/core'; | ||
import { Directive, ElementRef, EventEmitter, Input, NgZone, Output } from '@angular/core'; | ||
import { EChartOption, init } from 'echarts'; | ||
import { fromEvent, Observable } from 'rxjs'; | ||
import { debounceTime, switchMap } from 'rxjs/operators'; | ||
import { ChangeFilter } from './change-filter'; | ||
import { Subject } from 'rxjs'; | ||
import { debounceTime } from 'rxjs/operators'; | ||
import { init, EChartOption } from 'echarts'; | ||
import { EChartEvents } from './echart-events'; | ||
export class NgxEchartsDirective { | ||
/** | ||
* @param {?} el | ||
* @param {?} _ngZone | ||
* @param {?} ngZone | ||
*/ | ||
constructor(el, _ngZone) { | ||
constructor(el, ngZone) { | ||
this.el = el; | ||
this._ngZone = _ngZone; | ||
this.ngZone = ngZone; | ||
this.autoResize = true; | ||
this.loadingType = 'default'; | ||
/** | ||
* Whether to register event handlers on echartInstance. Default is true. | ||
* Use it to avoid unwanted change detection, if you want to optimize the performance. | ||
*/ | ||
this.detectEventChanges = true; | ||
// chart events: | ||
this.detectEventChanges = true; // deprecated, left for compatibility reasons to avoid triggering major version | ||
// deprecated, left for compatibility reasons to avoid triggering major version | ||
// ngx-echarts events | ||
this.chartInit = new EventEmitter(); | ||
this.chartClick = new EventEmitter(); | ||
this.chartDblClick = new EventEmitter(); | ||
this.chartMouseDown = new EventEmitter(); | ||
this.chartMouseUp = new EventEmitter(); | ||
this.chartMouseOver = new EventEmitter(); | ||
this.chartMouseOut = new EventEmitter(); | ||
this.chartGlobalOut = new EventEmitter(); | ||
this.chartContextMenu = new EventEmitter(); | ||
this.chartDataZoom = new EventEmitter(); | ||
this.chartMapSelectChanged = new EventEmitter(); | ||
this.chartMapSelected = new EventEmitter(); | ||
this.chartMapUnselected = new EventEmitter(); | ||
// echarts mouse events | ||
this.chartClick = this.createLazyEvent('click'); | ||
this.chartDblClick = this.createLazyEvent('dblclick'); | ||
this.chartMouseDown = this.createLazyEvent('mousedown'); | ||
this.chartMouseMove = this.createLazyEvent('mousemove'); | ||
this.chartMouseUp = this.createLazyEvent('mouseup'); | ||
this.chartMouseOver = this.createLazyEvent('mouseover'); | ||
this.chartMouseOut = this.createLazyEvent('mouseout'); | ||
this.chartGlobalOut = this.createLazyEvent('globalout'); | ||
this.chartContextMenu = this.createLazyEvent('contextmenu'); | ||
// echarts mouse events | ||
this.chartLegendSelectChanged = this.createLazyEvent('legendselectchanged'); | ||
this.chartLegendSelected = this.createLazyEvent('legendselected'); | ||
this.chartLegendUnselected = this.createLazyEvent('legendunselected'); | ||
this.chartLegendScroll = this.createLazyEvent('legendscroll'); | ||
this.chartDataZoom = this.createLazyEvent('datazoom'); | ||
this.chartDataRangeSelected = this.createLazyEvent('datarangeselected'); | ||
this.chartTimelineChanged = this.createLazyEvent('timelinechanged'); | ||
this.chartTimelinePlayChanged = this.createLazyEvent('timelineplaychanged'); | ||
this.chartRestore = this.createLazyEvent('restore'); | ||
this.chartDataViewChanged = this.createLazyEvent('dataviewchanged'); | ||
this.chartMagicTypeChanged = this.createLazyEvent('magictypechanged'); | ||
this.chartPieSelectChanged = this.createLazyEvent('pieselectchanged'); | ||
this.chartPieSelected = this.createLazyEvent('pieselected'); | ||
this.chartPieUnselected = this.createLazyEvent('pieunselected'); | ||
this.chartMapSelectChanged = this.createLazyEvent('mapselectchanged'); | ||
this.chartMapSelected = this.createLazyEvent('mapselected'); | ||
this.chartMapUnselected = this.createLazyEvent('mapunselected'); | ||
this.chartAxisAreaSelected = this.createLazyEvent('axisareaselected'); | ||
this.chartFocusNodeAdjacency = this.createLazyEvent('focusnodeadjacency'); | ||
this.chartUnfocusNodeAdjacency = this.createLazyEvent('unfocusnodeadjacency'); | ||
this.chartBrush = this.createLazyEvent('brush'); | ||
this.chartBrushSelected = this.createLazyEvent('brushselected'); | ||
this.chartRendered = this.createLazyEvent('rendered'); | ||
this.chartFinished = this.createLazyEvent('finished'); | ||
this.currentOffsetWidth = 0; | ||
this.currentOffsetHeight = 0; | ||
this._resize$ = new Subject(); | ||
} | ||
/** | ||
* @return {?} | ||
*/ | ||
createChart() { | ||
this.currentWindowWidth = window.innerWidth; | ||
this.currentOffsetWidth = this.el.nativeElement.offsetWidth; | ||
this.currentOffsetHeight = this.el.nativeElement.offsetHeight; | ||
/** @type {?} */ | ||
const dom = this.el.nativeElement; | ||
if (window && window.getComputedStyle) { | ||
/** @type {?} */ | ||
const prop = window.getComputedStyle(dom, null).getPropertyValue('height'); | ||
if ((!prop || prop === '0px') && | ||
(!dom.style.height || dom.style.height === '0px')) { | ||
dom.style.height = '400px'; | ||
} | ||
} | ||
return this._ngZone.runOutsideAngular(() => init(dom, this.theme || undefined, this.initOpts || undefined)); | ||
} | ||
/** | ||
* @param {?} event | ||
* @return {?} | ||
*/ | ||
onWindowResize(event) { | ||
/** @type {?} */ | ||
const target = (/** @type {?} */ (event.target)); | ||
if (this.autoResize && target.innerWidth !== this.currentWindowWidth) { | ||
this.currentWindowWidth = target.innerWidth; | ||
this.currentOffsetWidth = this.el.nativeElement.offsetWidth; | ||
this.currentOffsetHeight = this.el.nativeElement.offsetHeight; | ||
this._resize$.next(); | ||
} | ||
} | ||
/** | ||
* @param {?} changes | ||
@@ -88,3 +73,2 @@ * @return {?} | ||
filter.has('loading').subscribe(v => this.toggleLoading(!!v)); | ||
filter.notFirst('detectEventChanges').subscribe(v => this.toggleEventDetectors(!!v)); | ||
filter.notFirst('theme').subscribe(() => this.refreshChart()); | ||
@@ -95,11 +79,18 @@ } | ||
*/ | ||
ngOnInit() { | ||
this.resizeSub = fromEvent(window, 'resize').pipe(debounceTime(50)).subscribe(() => { | ||
if (this.autoResize && window.innerWidth !== this.currentWindowWidth) { | ||
this.currentWindowWidth = window.innerWidth; | ||
this.currentOffsetWidth = this.el.nativeElement.offsetWidth; | ||
this.currentOffsetHeight = this.el.nativeElement.offsetHeight; | ||
this.resize(); | ||
} | ||
}); | ||
} | ||
/** | ||
* @return {?} | ||
*/ | ||
ngOnDestroy() { | ||
if (this._resizeSub) { | ||
this._resizeSub.unsubscribe(); | ||
this._resizeSub = null; | ||
} | ||
if (this._chart) { | ||
this._chart.dispose(); | ||
this._chart = null; | ||
} | ||
this.resizeSub.unsubscribe(); | ||
this.dispose(); | ||
} | ||
@@ -111,3 +102,3 @@ /** | ||
// No heavy work in DoCheck! | ||
if (this._chart && this.autoResize) { | ||
if (this.chart && this.autoResize) { | ||
/** @type {?} */ | ||
@@ -120,3 +111,3 @@ const offsetWidth = this.el.nativeElement.offsetWidth; | ||
this.currentOffsetHeight = offsetHeight; | ||
this._resize$.next(); | ||
this.resize(); | ||
} | ||
@@ -134,54 +125,33 @@ } | ||
*/ | ||
initChart() { | ||
this.onOptionsChange(this.options); | ||
if (this.merge && this._chart) { | ||
this.setOption(this.merge); | ||
dispose() { | ||
if (this.chart) { | ||
this.chart.dispose(); | ||
this.chart = null; | ||
} | ||
} | ||
/** | ||
* @param {?} opt | ||
* @return {?} | ||
*/ | ||
onOptionsChange(opt) { | ||
if (opt) { | ||
if (!this._chart) { | ||
this._chart = this.createChart(); | ||
// subscribe to _resize$ and debounced | ||
this._resizeSub = this._resize$.pipe(debounceTime(50)).subscribe(() => { | ||
if (this._chart) { | ||
this._chart.resize(); | ||
} | ||
}); | ||
// output echart instance: | ||
this.chartInit.emit(this._chart); | ||
// register events: | ||
if (this.detectEventChanges) { | ||
this.registerEvents(); | ||
} | ||
} | ||
this._chart.setOption(this.options, true); | ||
resize() { | ||
if (this.chart) { | ||
this.chart.resize(); | ||
} | ||
} | ||
/** | ||
* @param {?} loading | ||
* @return {?} | ||
*/ | ||
registerEvents() { | ||
if (this._chart) { | ||
/** @type {?} */ | ||
const events = EChartEvents.All; | ||
for (let i = 0, len = events.length; i < len; i++) { | ||
this._chart.on(events[i], this.eventHandler, this); | ||
} | ||
toggleLoading(loading) { | ||
if (this.chart) { | ||
loading ? this.chart.showLoading(this.loadingType, this.loadingOpts) : this.chart.hideLoading(); | ||
} | ||
} | ||
/** | ||
* @param {?} option | ||
* @param {?=} opts | ||
* @return {?} | ||
*/ | ||
unregisterEvents() { | ||
if (this._chart) { | ||
/** @type {?} */ | ||
const events = EChartEvents.All; | ||
for (let i = 0, len = events.length; i < len; i++) { | ||
this._chart.off(events[i], this.eventHandler); | ||
} | ||
setOption(option, opts) { | ||
if (this.chart) { | ||
this.chart.setOption(option, opts); | ||
} | ||
@@ -192,86 +162,60 @@ } | ||
*/ | ||
clear() { | ||
if (this._chart) { | ||
this._chart.clear(); | ||
} | ||
refreshChart() { | ||
this.dispose(); | ||
this.initChart(); | ||
} | ||
/** | ||
* @param {?} loading | ||
* @return {?} | ||
*/ | ||
toggleLoading(loading) { | ||
if (this._chart) { | ||
loading ? this._chart.showLoading(this.loadingType, this.loadingOpts) : this._chart.hideLoading(); | ||
createChart() { | ||
this.currentWindowWidth = window.innerWidth; | ||
this.currentOffsetWidth = this.el.nativeElement.offsetWidth; | ||
this.currentOffsetHeight = this.el.nativeElement.offsetHeight; | ||
/** @type {?} */ | ||
const dom = this.el.nativeElement; | ||
if (window && window.getComputedStyle) { | ||
/** @type {?} */ | ||
const prop = window.getComputedStyle(dom, null).getPropertyValue('height'); | ||
if ((!prop || prop === '0px') && | ||
(!dom.style.height || dom.style.height === '0px')) { | ||
dom.style.height = '400px'; | ||
} | ||
} | ||
return this.ngZone.runOutsideAngular(() => init(dom, this.theme, this.initOpts)); | ||
} | ||
/** | ||
* @param {?} option | ||
* @param {?=} opts | ||
* @return {?} | ||
*/ | ||
setOption(option, opts) { | ||
if (this._chart) { | ||
this._chart.setOption(option, opts); | ||
initChart() { | ||
this.onOptionsChange(this.options); | ||
if (this.merge && this.chart) { | ||
this.setOption(this.merge); | ||
} | ||
} | ||
/** | ||
* @param {?} event | ||
* @param {?} opt | ||
* @return {?} | ||
*/ | ||
eventHandler(event) { | ||
switch (event.type) { | ||
case EChartEvents.Click: | ||
this._ngZone.run(() => this.chartClick.emit(event)); | ||
break; | ||
case EChartEvents.DblClick: | ||
this._ngZone.run(() => this.chartDblClick.emit(event)); | ||
break; | ||
case EChartEvents.MouseDown: | ||
this._ngZone.run(() => this.chartMouseDown.emit(event)); | ||
break; | ||
case EChartEvents.MouseUp: | ||
this._ngZone.run(() => this.chartMouseUp.emit(event)); | ||
break; | ||
case EChartEvents.MouseOver: | ||
this._ngZone.run(() => this.chartMouseOver.emit(event)); | ||
break; | ||
case EChartEvents.MouseOut: | ||
this._ngZone.run(() => this.chartMouseOut.emit(event)); | ||
break; | ||
case EChartEvents.GlobalOut: | ||
this._ngZone.run(() => this.chartGlobalOut.emit(event)); | ||
break; | ||
case EChartEvents.ContextMenu: | ||
this._ngZone.run(() => this.chartContextMenu.emit(event)); | ||
break; | ||
case EChartEvents.DataZoom: | ||
this._ngZone.run(() => this.chartDataZoom.emit(event)); | ||
break; | ||
case EChartEvents.MapSelectChanged: | ||
this._ngZone.run(() => this.chartMapSelectChanged.emit(event)); | ||
break; | ||
case EChartEvents.MapSelected: | ||
this._ngZone.run(() => this.chartMapSelected.emit(event)); | ||
break; | ||
case EChartEvents.MapUnselected: | ||
this._ngZone.run(() => this.chartMapUnselected.emit(event)); | ||
break; | ||
onOptionsChange(opt) { | ||
if (opt) { | ||
if (!this.chart) { | ||
this.chart = this.createChart(); | ||
this.chartInit.emit(this.chart); | ||
} | ||
this.chart.setOption(this.options, true); | ||
} | ||
} | ||
// allows to lazily bind to only those events that are requested through the `@Output` by parent components | ||
// see https://stackoverflow.com/questions/51787972/optimal-reentering-the-ngzone-from-eventemitter-event for more info | ||
/** | ||
* @param {?} detect | ||
* @template T | ||
* @param {?} eventName | ||
* @return {?} | ||
*/ | ||
toggleEventDetectors(detect) { | ||
if (this._chart) { | ||
detect ? this.registerEvents() : this.unregisterEvents(); | ||
} | ||
createLazyEvent(eventName) { | ||
return (/** @type {?} */ (this.chartInit.pipe(switchMap((chart) => new Observable(observer => { | ||
chart.on(eventName, (data) => this.ngZone.run(() => observer.next(data))); | ||
return null; // no need to react on unsubscribe as long as the `dispose()` is called in ngOnDestroy | ||
}))))); | ||
} | ||
/** | ||
* @return {?} | ||
*/ | ||
refreshChart() { | ||
this.ngOnDestroy(); | ||
this.initChart(); | ||
} | ||
} | ||
@@ -302,2 +246,3 @@ NgxEchartsDirective.decorators = [ | ||
chartMouseDown: [{ type: Output }], | ||
chartMouseMove: [{ type: Output }], | ||
chartMouseUp: [{ type: Output }], | ||
@@ -308,7 +253,26 @@ chartMouseOver: [{ type: Output }], | ||
chartContextMenu: [{ type: Output }], | ||
chartLegendSelectChanged: [{ type: Output }], | ||
chartLegendSelected: [{ type: Output }], | ||
chartLegendUnselected: [{ type: Output }], | ||
chartLegendScroll: [{ type: Output }], | ||
chartDataZoom: [{ type: Output }], | ||
chartDataRangeSelected: [{ type: Output }], | ||
chartTimelineChanged: [{ type: Output }], | ||
chartTimelinePlayChanged: [{ type: Output }], | ||
chartRestore: [{ type: Output }], | ||
chartDataViewChanged: [{ type: Output }], | ||
chartMagicTypeChanged: [{ type: Output }], | ||
chartPieSelectChanged: [{ type: Output }], | ||
chartPieSelected: [{ type: Output }], | ||
chartPieUnselected: [{ type: Output }], | ||
chartMapSelectChanged: [{ type: Output }], | ||
chartMapSelected: [{ type: Output }], | ||
chartMapUnselected: [{ type: Output }], | ||
onWindowResize: [{ type: HostListener, args: ['window:resize', ['$event'],] }] | ||
chartAxisAreaSelected: [{ type: Output }], | ||
chartFocusNodeAdjacency: [{ type: Output }], | ||
chartUnfocusNodeAdjacency: [{ type: Output }], | ||
chartBrush: [{ type: Output }], | ||
chartBrushSelected: [{ type: Output }], | ||
chartRendered: [{ type: Output }], | ||
chartFinished: [{ type: Output }] | ||
}; | ||
@@ -332,7 +296,3 @@ if (false) { | ||
NgxEchartsDirective.prototype.loadingOpts; | ||
/** | ||
* Whether to register event handlers on echartInstance. Default is true. | ||
* Use it to avoid unwanted change detection, if you want to optimize the performance. | ||
* @type {?} | ||
*/ | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.detectEventChanges; | ||
@@ -348,2 +308,4 @@ /** @type {?} */ | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartMouseMove; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartMouseUp; | ||
@@ -359,4 +321,30 @@ /** @type {?} */ | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartLegendSelectChanged; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartLegendSelected; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartLegendUnselected; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartLegendScroll; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartDataZoom; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartDataRangeSelected; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartTimelineChanged; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartTimelinePlayChanged; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartRestore; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartDataViewChanged; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartMagicTypeChanged; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartPieSelectChanged; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartPieSelected; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartPieUnselected; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartMapSelectChanged; | ||
@@ -368,4 +356,18 @@ /** @type {?} */ | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype._chart; | ||
NgxEchartsDirective.prototype.chartAxisAreaSelected; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartFocusNodeAdjacency; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartUnfocusNodeAdjacency; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartBrush; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartBrushSelected; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartRendered; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartFinished; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chart; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.currentOffsetWidth; | ||
@@ -377,10 +379,8 @@ /** @type {?} */ | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype._resize$; | ||
NgxEchartsDirective.prototype.resizeSub; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype._resizeSub; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.el; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype._ngZone; | ||
NgxEchartsDirective.prototype.ngZone; | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWVjaGFydHMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWVjaGFydHMvIiwic291cmNlcyI6WyJsaWIvbmd4LWVjaGFydHMuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUFFLFVBQVUsRUFBWSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQ3JDLE1BQU0sRUFDNUMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsSUFBSSxFQUFXLFlBQVksRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFLL0MsTUFBTSxPQUFPLG1CQUFtQjs7Ozs7SUEyQzlCLFlBQW9CLEVBQWMsRUFBVSxPQUFlO1FBQXZDLE9BQUUsR0FBRixFQUFFLENBQVk7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBaENsRCxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLGdCQUFXLEdBQUcsU0FBUyxDQUFDOzs7OztRQU94Qix1QkFBa0IsR0FBRyxJQUFJLENBQUM7O1FBR3pCLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBQ3hDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3JDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN4QyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDekMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3ZDLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN6QyxrQkFBYSxH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SUFDbEQsNkNBQW1EOztJQUNuRCwyQ0FBaUQ7O0lBQ2pELDZDQUFtRDs7SUFDbkQsNENBQWtEOztJQUNsRCw2Q0FBbUQ7O0lBQ25ELCtDQUFxRDs7SUFDckQsNENBQWtEOztJQUNsRCxvREFBMEQ7O0lBQzFELCtDQUFxRDs7SUFDckQsaURBQXVEOztJQUV2RCxxQ0FBd0I7O0lBQ3hCLGlEQUErQjs7SUFDL0Isa0RBQWdDOztJQUNoQyxpREFBbUM7O0lBQ25DLHVDQUF1Qzs7SUFDdkMseUNBQWlDOztJQUVyQixpQ0FBc0I7O0lBQUUsc0NBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIFJlbmRlcmVyLCBJbnB1dCwgT3V0cHV0LCBIb3N0TGlzdGVuZXIsIEV2ZW50RW1pdHRlcixcclxuICBPbkNoYW5nZXMsIE9uRGVzdHJveSwgU2ltcGxlQ2hhbmdlcywgTmdab25lLCBEb0NoZWNrLCBBZnRlclZpZXdJbml0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENoYW5nZUZpbHRlciB9IGZyb20gJy4vY2hhbmdlLWZpbHRlcic7XHJcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IGluaXQsIEVDaGFydHMsIEVDaGFydE9wdGlvbiB9IGZyb20gJ2VjaGFydHMnO1xyXG5pbXBvcnQgeyBFQ2hhcnRFdmVudHMgfSBmcm9tICcuL2VjaGFydC1ldmVudHMnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdlY2hhcnRzLCBbZWNoYXJ0c10nLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4RWNoYXJ0c0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95LCBEb0NoZWNrLCBBZnRlclZpZXdJbml0IHtcclxuICBASW5wdXQoKSBvcHRpb25zOiBFQ2hhcnRPcHRpb247XHJcbiAgQElucHV0KCkgdGhlbWU6IHN0cmluZztcclxuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGluaXRPcHRzOiB7XHJcbiAgICBkZXZpY2VQaXhlbFJhdGlvPzogbnVtYmVyXHJcbiAgICByZW5kZXJlcj86IHN0cmluZ1xyXG4gICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmdcclxuICAgIGhlaWdodD86IG51bWJlciB8IHN0cmluZ1xyXG4gIH07XHJcbiAgQElucHV0KCkgbWVyZ2U6IEVDaGFydE9wdGlvbjtcclxuICBASW5wdXQoKSBhdXRvUmVzaXplID0gdHJ1ZTtcclxuICBASW5wdXQoKSBsb2FkaW5nVHlwZSA9ICdkZWZhdWx0JztcclxuICBASW5wdXQoKSBsb2FkaW5nT3B0czogb2JqZWN0O1xyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHRvIHJlZ2lzdGVyIGV2ZW50IGhhbmRsZXJzIG9uIGVjaGFydEluc3RhbmNlLiBEZWZhdWx0IGlzIHRydWUuXHJcbiAgICogVXNlIGl0IHRvIGF2b2lkIHVud2FudGVkIGNoYW5nZSBkZXRlY3Rpb24sIGlmIHlvdSB3YW50IHRvIG9wdGltaXplIHRoZSBwZXJmb3JtYW5jZS5cclxuICAgKi9cclxuICBASW5wdXQoKSBkZXRlY3RFdmVudENoYW5nZXMgPSB0cnVlO1xyXG5cclxuICAvLyBjaGFydCBldmVudHM6XHJcbiAgQE91dHB1dCgpIGNoYXJ0SW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8RUNoYXJ0cz4oKTtcclxuICBAT3V0cHV0KCkgY2hhcnRDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBjaGFydERibENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TW91c2VEb3duID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TW91c2VVcCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBjaGFydE1vdXNlT3ZlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBjaGFydE1vdXNlT3V0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0R2xvYmFsT3V0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0Q29udGV4dE1lbnUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgY2hhcnREYXRhWm9vbSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBjaGFydE1hcFNlbGVjdENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgY2hhcnRNYXBTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBjaGFydE1hcFVuc2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfY2hhcnQ6IEVDaGFydHM7XHJcbiAgcHJpdmF0ZSBjdXJyZW50T2Zmc2V0V2lkdGggPSAwO1xyXG4gIHByaXZhdGUgY3VycmVudE9mZnNldEhlaWdodCA9IDA7XHJcbiAgcHJpdmF0ZSBjdXJyZW50V2luZG93V2lkdGg6IG51bWJlcjtcclxuICBwcml2YXRlIF9yZXNpemUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIF9yZXNpemVTdWI6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZiwgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUpIHsgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUNoYXJ0KCkge1xyXG4gICAgdGhpcy5jdXJyZW50V2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICAgIHRoaXMuY3VycmVudE9mZnNldFdpZHRoID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgdGhpcy5jdXJyZW50T2Zmc2V0SGVpZ2h0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgIGNvbnN0IGRvbSA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcclxuXHJcbiAgICBpZiAod2luZG93ICYmIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKSB7XHJcbiAgICAgIGNvbnN0IHByb3AgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb20sIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2hlaWdodCcpO1xyXG4gICAgICBpZiAoKCFwcm9wIHx8IHByb3AgPT09ICcwcHgnKSAmJlxyXG4gICAgICAgICghZG9tLnN0eWxlLmhlaWdodCB8fCBkb20uc3R5bGUuaGVpZ2h0ID09PSAnMHB4JykpIHtcclxuICAgICAgICBkb20uc3R5bGUuaGVpZ2h0ID0gJzQwMHB4JztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gaW5pdChkb20sIHRoaXMudGhlbWUgfHwgdW5kZWZpbmVkLCB0aGlzLmluaXRPcHRzIHx8IHVuZGVmaW5lZCkpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXHJcbiAgb25XaW5kb3dSZXNpemUoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgV2luZG93O1xyXG5cclxuICAgIGlmICh0aGlzLmF1dG9SZXNpemUgJiYgdGFyZ2V0LmlubmVyV2lkdGggIT09IHRoaXMuY3VycmVudFdpbmRvd1dpZHRoKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFdpbmRvd1dpZHRoID0gdGFyZ2V0LmlubmVyV2lkdGg7XHJcbiAgICAgIHRoaXMuY3VycmVudE9mZnNldFdpZHRoID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgICB0aGlzLmN1cnJlbnRPZmZzZXRIZWlnaHQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG5cclxuICAgICAgdGhpcy5fcmVzaXplJC5uZXh0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBjb25zdCBmaWx0ZXIgPSBDaGFuZ2VGaWx0ZXIub2YoY2hhbmdlcyk7XHJcbiAgICBmaWx0ZXIubm90Rmlyc3RBbmRFbXB0eTxhbnk+KCdvcHRpb25zJykuc3Vic2NyaWJlKG9wdCA9PiB0aGlzLm9uT3B0aW9uc0NoYW5nZShvcHQpKTtcclxuICAgIGZpbHRlci5ub3RGaXJzdEFuZEVtcHR5PGFueT4oJ21lcmdlJykuc3Vic2NyaWJlKG9wdCA9PiB0aGlzLnNldE9wdGlvbihvcHQpKTtcclxuICAgIGZpbHRlci5oYXM8Ym9vbGVhbj4oJ2xvYWRpbmcnKS5zdWJzY3JpYmUodiA9PiB0aGlzLnRvZ2dsZUxvYWRpbmcoISF2KSk7XHJcbiAgICBmaWx0ZXIubm90Rmlyc3Q8Ym9vbGVhbj4oJ2RldGVjdEV2ZW50Q2hhbmdlcycpLnN1YnNjcmliZSh2ID0+IHRoaXMudG9nZ2xlRXZlbnREZXRlY3RvcnMoISF2KSk7XHJcbiAgICBmaWx0ZXIubm90Rmlyc3Q8c3RyaW5nPigndGhlbWUnKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZWZyZXNoQ2hhcnQoKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLl9yZXNpemVTdWIpIHtcclxuICAgICAgdGhpcy5fcmVzaXplU3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIHRoaXMuX3Jlc2l6ZVN1YiA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2NoYXJ0KSB7XHJcbiAgICAgIHRoaXMuX2NoYXJ0LmRpc3Bvc2UoKTtcclxuICAgICAgdGhpcy5fY2hhcnQgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdEb0NoZWNrKCkge1xyXG4gICAgLy8gTm8gaGVhdnkgd29yayBpbiBEb0NoZWNrIVxyXG4gICAgaWYgKHRoaXMuX2NoYXJ0ICYmIHRoaXMuYXV0b1Jlc2l6ZSkge1xyXG4gICAgICBjb25zdCBvZmZzZXRXaWR0aCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcclxuICAgICAgY29uc3Qgb2Zmc2V0SGVpZ2h0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcclxuXHJcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRPZmZzZXRXaWR0aCAhPT0gb2Zmc2V0V2lkdGggfHwgdGhpcy5jdXJyZW50T2Zmc2V0SGVpZ2h0ICE9PSBvZmZzZXRIZWlnaHQpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRPZmZzZXRXaWR0aCA9IG9mZnNldFdpZHRoO1xyXG4gICAgICAgIHRoaXMuY3VycmVudE9mZnNldEhlaWdodCA9IG9mZnNldEhlaWdodDtcclxuICAgICAgICB0aGlzLl9yZXNpemUkLm5leHQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluaXRDaGFydCgpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENoYXJ0KCkge1xyXG4gICAgdGhpcy5vbk9wdGlvbnNDaGFuZ2UodGhpcy5vcHRpb25zKTtcclxuXHJcbiAgICBpZiAodGhpcy5tZXJnZSAmJiB0aGlzLl9jaGFydCkge1xyXG4gICAgICB0aGlzLnNldE9wdGlvbih0aGlzLm1lcmdlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25PcHRpb25zQ2hhbmdlKG9wdDogRUNoYXJ0T3B0aW9uKSB7XHJcbiAgICBpZiAob3B0KSB7XHJcbiAgICAgIGlmICghdGhpcy5fY2hhcnQpIHtcclxuICAgICAgICB0aGlzLl9jaGFydCA9IHRoaXMuY3JlYXRlQ2hhcnQoKTtcclxuXHJcbiAgICAgICAgLy8gc3Vic2NyaWJlIHRvIF9yZXNpemUkIGFuZCBkZWJvdW5jZWRcclxuICAgICAgICB0aGlzLl9yZXNpemVTdWIgPSB0aGlzLl9yZXNpemUkLnBpcGUoZGVib3VuY2VUaW1lKDUwKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLl9jaGFydCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jaGFydC5yZXNpemUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gb3V0cHV0IGVjaGFydCBpbnN0YW5jZTpcclxuICAgICAgICB0aGlzLmNoYXJ0SW5pdC5lbWl0KHRoaXMuX2NoYXJ0KTtcclxuXHJcbiAgICAgICAgLy8gcmVnaXN0ZXIgZXZlbnRzOlxyXG4gICAgICAgIGlmICh0aGlzLmRldGVjdEV2ZW50Q2hhbmdlcykge1xyXG4gICAgICAgICAgdGhpcy5yZWdpc3RlckV2ZW50cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5fY2hhcnQuc2V0T3B0aW9uKHRoaXMub3B0aW9ucywgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlZ2lzdGVyRXZlbnRzKCkge1xyXG4gICAgaWYgKHRoaXMuX2NoYXJ0KSB7XHJcbiAgICAgIGNvbnN0IGV2ZW50cyA9IEVDaGFydEV2ZW50cy5BbGw7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBldmVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICB0aGlzLl9jaGFydC5vbihldmVudHNbaV0sIHRoaXMuZXZlbnRIYW5kbGVyLCB0aGlzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1bnJlZ2lzdGVyRXZlbnRzKCkge1xyXG4gICAgaWYgKHRoaXMuX2NoYXJ0KSB7XHJcbiAgICAgIGNvbnN0IGV2ZW50cyA9IEVDaGFydEV2ZW50cy5BbGw7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBldmVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICB0aGlzLl9jaGFydC5vZmYoZXZlbnRzW2ldLCB0aGlzLmV2ZW50SGFuZGxlcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsZWFyKCkge1xyXG4gICAgaWYgKHRoaXMuX2NoYXJ0KSB7XHJcbiAgICAgIHRoaXMuX2NoYXJ0LmNsZWFyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVMb2FkaW5nKGxvYWRpbmc6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl9jaGFydCkge1xyXG4gICAgICBsb2FkaW5nID8gdGhpcy5fY2hhcnQuc2hvd0xvYWRpbmcodGhpcy5sb2FkaW5nVHlwZSwgdGhpcy5sb2FkaW5nT3B0cykgOiB0aGlzLl9jaGFydC5oaWRlTG9hZGluZygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0T3B0aW9uKG9wdGlvbjogYW55LCBvcHRzPzogYW55KSB7XHJcbiAgICBpZiAodGhpcy5fY2hhcnQpIHtcclxuICAgICAgdGhpcy5fY2hhcnQuc2V0T3B0aW9uKG9wdGlvbiwgb3B0cyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2ZW50SGFuZGxlcihldmVudCkge1xyXG4gICAgc3dpdGNoIChldmVudC50eXBlKSB7XHJcbiAgICAgIGNhc2UgRUNoYXJ0RXZlbnRzLkNsaWNrOlxyXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5jaGFydENsaWNrLmVtaXQoZXZlbnQpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQ2hhcnRFdmVudHMuRGJsQ2xpY2s6XHJcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmNoYXJ0RGJsQ2xpY2suZW1pdChldmVudCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVDaGFydEV2ZW50cy5Nb3VzZURvd246XHJcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmNoYXJ0TW91c2VEb3duLmVtaXQoZXZlbnQpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQ2hhcnRFdmVudHMuTW91c2VVcDpcclxuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMuY2hhcnRNb3VzZVVwLmVtaXQoZXZlbnQpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQ2hhcnRFdmVudHMuTW91c2VPdmVyOlxyXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5jaGFydE1vdXNlT3Zlci5lbWl0KGV2ZW50KSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUNoYXJ0RXZlbnRzLk1vdXNlT3V0OlxyXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5jaGFydE1vdXNlT3V0LmVtaXQoZXZlbnQpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQ2hhcnRFdmVudHMuR2xvYmFsT3V0OlxyXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5jaGFydEdsb2JhbE91dC5lbWl0KGV2ZW50KSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUNoYXJ0RXZlbnRzLkNvbnRleHRNZW51OlxyXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5jaGFydENvbnRleHRNZW51LmVtaXQoZXZlbnQpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQ2hhcnRFdmVudHMuRGF0YVpvb206XHJcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmNoYXJ0RGF0YVpvb20uZW1pdChldmVudCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVDaGFydEV2ZW50cy5NYXBTZWxlY3RDaGFuZ2VkOlxyXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5jaGFydE1hcFNlbGVjdENoYW5nZWQuZW1pdChldmVudCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVDaGFydEV2ZW50cy5NYXBTZWxlY3RlZDpcclxuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMuY2hhcnRNYXBTZWxlY3RlZC5lbWl0KGV2ZW50KSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUNoYXJ0RXZlbnRzLk1hcFVuc2VsZWN0ZWQ6XHJcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmNoYXJ0TWFwVW5zZWxlY3RlZC5lbWl0KGV2ZW50KSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRvZ2dsZUV2ZW50RGV0ZWN0b3JzKGRldGVjdDogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuX2NoYXJ0KSB7XHJcbiAgICAgIGRldGVjdCA/IHRoaXMucmVnaXN0ZXJFdmVudHMoKSA6IHRoaXMudW5yZWdpc3RlckV2ZW50cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoQ2hhcnQoKSB7XHJcbiAgICB0aGlzLm5nT25EZXN0cm95KCk7XHJcbiAgICB0aGlzLmluaXRDaGFydCgpO1xyXG4gIH1cclxufVxyXG4iXX0= | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWVjaGFydHMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWVjaGFydHMvIiwic291cmNlcyI6WyJsaWIvbmd4LWVjaGFydHMuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBVyxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWdDLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDaEssT0FBTyxFQUFFLFlBQVksRUFBVyxJQUFJLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSy9DLE1BQU0sT0FBTyxtQkFBbUI7Ozs7O0lBOEQ5QixZQUFvQixFQUFjLEVBQVUsTUFBYztRQUF0QyxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQW5EakQsZUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixnQkFBVyxHQUFHLFNBQVMsQ0FBQztRQUV4Qix1QkFBa0IsR0FBRyxJQUFJLENBQUMsQ0FBQywrRUFBK0U7OztRQUd6RyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQzs7UUFHeEMsZUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0Msa0JBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELG1CQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuRCxtQkFBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkQsaUJBQVks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O0lBQ3pFLHVEQUFpRjs7SUFDakYsMkNBQXlEOztJQUN6RCxtREFBeUU7O0lBQ3pFLG9EQUEyRTs7SUFDM0Usb0RBQTJFOztJQUMzRSwrQ0FBaUU7O0lBQ2pFLGlEQUFxRTs7SUFDckUsb0RBQTJFOztJQUMzRSwrQ0FBaUU7O0lBQ2pFLGlEQUFxRTs7SUFDckUsb0RBQTJFOztJQUMzRSxzREFBK0U7O0lBQy9FLHdEQUFtRjs7SUFDbkYseUNBQXFEOztJQUNyRCxpREFBcUU7O0lBQ3JFLDRDQUEyRDs7SUFDM0QsNENBQTJEOztJQUUzRCxvQ0FBdUI7O0lBQ3ZCLGlEQUErQjs7SUFDL0Isa0RBQWdDOztJQUNoQyxpREFBbUM7O0lBQ25DLHdDQUFnQzs7SUFFcEIsaUNBQXNCOztJQUFFLHFDQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgRG9DaGVjaywgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgTmdab25lLCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRUNoYXJ0T3B0aW9uLCBFQ2hhcnRzLCBpbml0IH0gZnJvbSAnZWNoYXJ0cyc7XHJcbmltcG9ydCB7IGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDaGFuZ2VGaWx0ZXIgfSBmcm9tICcuL2NoYW5nZS1maWx0ZXInO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdlY2hhcnRzLCBbZWNoYXJ0c10nLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4RWNoYXJ0c0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIERvQ2hlY2ssIEFmdGVyVmlld0luaXQge1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IEVDaGFydE9wdGlvbjtcclxuICBASW5wdXQoKSB0aGVtZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaW5pdE9wdHM6IHtcclxuICAgIGRldmljZVBpeGVsUmF0aW8/OiBudW1iZXJcclxuICAgIHJlbmRlcmVyPzogc3RyaW5nXHJcbiAgICB3aWR0aD86IG51bWJlciB8IHN0cmluZ1xyXG4gICAgaGVpZ2h0PzogbnVtYmVyIHwgc3RyaW5nXHJcbiAgfTtcclxuICBASW5wdXQoKSBtZXJnZTogRUNoYXJ0T3B0aW9uO1xyXG4gIEBJbnB1dCgpIGF1dG9SZXNpemUgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGxvYWRpbmdUeXBlID0gJ2RlZmF1bHQnO1xyXG4gIEBJbnB1dCgpIGxvYWRpbmdPcHRzOiBvYmplY3Q7XHJcbiAgQElucHV0KCkgZGV0ZWN0RXZlbnRDaGFuZ2VzID0gdHJ1ZTsgLy8gZGVwcmVjYXRlZCwgbGVmdCBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zIHRvIGF2b2lkIHRyaWdnZXJpbmcgbWFqb3IgdmVyc2lvblxyXG5cclxuICAvLyBuZ3gtZWNoYXJ0cyBldmVudHNcclxuICBAT3V0cHV0KCkgY2hhcnRJbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxFQ2hhcnRzPigpO1xyXG5cclxuICAvLyBlY2hhcnRzIG1vdXNlIGV2ZW50c1xyXG4gIEBPdXRwdXQoKSBjaGFydENsaWNrID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ2NsaWNrJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0RGJsQ2xpY2sgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnZGJsY2xpY2snKTtcclxuICBAT3V0cHV0KCkgY2hhcnRNb3VzZURvd24gPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnbW91c2Vkb3duJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TW91c2VNb3ZlID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ21vdXNlbW92ZScpO1xyXG4gIEBPdXRwdXQoKSBjaGFydE1vdXNlVXAgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnbW91c2V1cCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydE1vdXNlT3ZlciA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdtb3VzZW92ZXInKTtcclxuICBAT3V0cHV0KCkgY2hhcnRNb3VzZU91dCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdtb3VzZW91dCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydEdsb2JhbE91dCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdnbG9iYWxvdXQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRDb250ZXh0TWVudSA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdjb250ZXh0bWVudScpO1xyXG5cclxuICAvLyBlY2hhcnRzIG1vdXNlIGV2ZW50c1xyXG4gIEBPdXRwdXQoKSBjaGFydExlZ2VuZFNlbGVjdENoYW5nZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnbGVnZW5kc2VsZWN0Y2hhbmdlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydExlZ2VuZFNlbGVjdGVkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ2xlZ2VuZHNlbGVjdGVkJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TGVnZW5kVW5zZWxlY3RlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdsZWdlbmR1bnNlbGVjdGVkJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TGVnZW5kU2Nyb2xsID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ2xlZ2VuZHNjcm9sbCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydERhdGFab29tID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ2RhdGF6b29tJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0RGF0YVJhbmdlU2VsZWN0ZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnZGF0YXJhbmdlc2VsZWN0ZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRUaW1lbGluZUNoYW5nZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgndGltZWxpbmVjaGFuZ2VkJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0VGltZWxpbmVQbGF5Q2hhbmdlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCd0aW1lbGluZXBsYXljaGFuZ2VkJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0UmVzdG9yZSA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdyZXN0b3JlJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0RGF0YVZpZXdDaGFuZ2VkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ2RhdGF2aWV3Y2hhbmdlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydE1hZ2ljVHlwZUNoYW5nZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnbWFnaWN0eXBlY2hhbmdlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydFBpZVNlbGVjdENoYW5nZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgncGllc2VsZWN0Y2hhbmdlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydFBpZVNlbGVjdGVkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ3BpZXNlbGVjdGVkJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0UGllVW5zZWxlY3RlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdwaWV1bnNlbGVjdGVkJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TWFwU2VsZWN0Q2hhbmdlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdtYXBzZWxlY3RjaGFuZ2VkJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TWFwU2VsZWN0ZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnbWFwc2VsZWN0ZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRNYXBVbnNlbGVjdGVkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ21hcHVuc2VsZWN0ZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRBeGlzQXJlYVNlbGVjdGVkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ2F4aXNhcmVhc2VsZWN0ZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRGb2N1c05vZGVBZGphY2VuY3kgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnZm9jdXNub2RlYWRqYWNlbmN5Jyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0VW5mb2N1c05vZGVBZGphY2VuY3kgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgndW5mb2N1c25vZGVhZGphY2VuY3knKTtcclxuICBAT3V0cHV0KCkgY2hhcnRCcnVzaCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdicnVzaCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydEJydXNoU2VsZWN0ZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnYnJ1c2hzZWxlY3RlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydFJlbmRlcmVkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ3JlbmRlcmVkJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0RmluaXNoZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnZmluaXNoZWQnKTtcclxuXHJcbiAgcHJpdmF0ZSBjaGFydDogRUNoYXJ0cztcclxuICBwcml2YXRlIGN1cnJlbnRPZmZzZXRXaWR0aCA9IDA7XHJcbiAgcHJpdmF0ZSBjdXJyZW50T2Zmc2V0SGVpZ2h0ID0gMDtcclxuICBwcml2YXRlIGN1cnJlbnRXaW5kb3dXaWR0aDogbnVtYmVyO1xyXG4gIHByaXZhdGUgcmVzaXplU3ViOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsIHByaXZhdGUgbmdab25lOiBOZ1pvbmUpIHsgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBjb25zdCBmaWx0ZXIgPSBDaGFuZ2VGaWx0ZXIub2YoY2hhbmdlcyk7XHJcbiAgICBmaWx0ZXIubm90Rmlyc3RBbmRFbXB0eTxhbnk+KCdvcHRpb25zJykuc3Vic2NyaWJlKG9wdCA9PiB0aGlzLm9uT3B0aW9uc0NoYW5nZShvcHQpKTtcclxuICAgIGZpbHRlci5ub3RGaXJzdEFuZEVtcHR5PGFueT4oJ21lcmdlJykuc3Vic2NyaWJlKG9wdCA9PiB0aGlzLnNldE9wdGlvbihvcHQpKTtcclxuICAgIGZpbHRlci5oYXM8Ym9vbGVhbj4oJ2xvYWRpbmcnKS5zdWJzY3JpYmUodiA9PiB0aGlzLnRvZ2dsZUxvYWRpbmcoISF2KSk7XHJcbiAgICBmaWx0ZXIubm90Rmlyc3Q8c3RyaW5nPigndGhlbWUnKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZWZyZXNoQ2hhcnQoKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMucmVzaXplU3ViID0gZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpLnBpcGUoZGVib3VuY2VUaW1lKDUwKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZSAmJiB3aW5kb3cuaW5uZXJXaWR0aCAhPT0gdGhpcy5jdXJyZW50V2luZG93V2lkdGgpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRXaW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xyXG4gICAgICAgIHRoaXMuY3VycmVudE9mZnNldFdpZHRoID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgICAgIHRoaXMuY3VycmVudE9mZnNldEhlaWdodCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgdGhpcy5yZXNpemUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMucmVzaXplU3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIG5nRG9DaGVjaygpIHtcclxuICAgIC8vIE5vIGhlYXZ5IHdvcmsgaW4gRG9DaGVjayFcclxuICAgIGlmICh0aGlzLmNoYXJ0ICYmIHRoaXMuYXV0b1Jlc2l6ZSkge1xyXG4gICAgICBjb25zdCBvZmZzZXRXaWR0aCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcclxuICAgICAgY29uc3Qgb2Zmc2V0SGVpZ2h0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcclxuXHJcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRPZmZzZXRXaWR0aCAhPT0gb2Zmc2V0V2lkdGggfHwgdGhpcy5jdXJyZW50T2Zmc2V0SGVpZ2h0ICE9PSBvZmZzZXRIZWlnaHQpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRPZmZzZXRXaWR0aCA9IG9mZnNldFdpZHRoO1xyXG4gICAgICAgIHRoaXMuY3VycmVudE9mZnNldEhlaWdodCA9IG9mZnNldEhlaWdodDtcclxuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaW5pdENoYXJ0KCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkaXNwb3NlKCkge1xyXG4gICAgaWYgKHRoaXMuY2hhcnQpIHtcclxuICAgICAgdGhpcy5jaGFydC5kaXNwb3NlKCk7XHJcbiAgICAgIHRoaXMuY2hhcnQgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNpemUoKSB7XHJcbiAgICBpZiAodGhpcy5jaGFydCkge1xyXG4gICAgICB0aGlzLmNoYXJ0LnJlc2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b2dnbGVMb2FkaW5nKGxvYWRpbmc6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLmNoYXJ0KSB7XHJcbiAgICAgIGxvYWRpbmcgPyB0aGlzLmNoYXJ0LnNob3dMb2FkaW5nKHRoaXMubG9hZGluZ1R5cGUsIHRoaXMubG9hZGluZ09wdHMpIDogdGhpcy5jaGFydC5oaWRlTG9hZGluZygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRPcHRpb24ob3B0aW9uOiBhbnksIG9wdHM/OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmNoYXJ0KSB7XHJcbiAgICAgIHRoaXMuY2hhcnQuc2V0T3B0aW9uKG9wdGlvbiwgb3B0cyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlZnJlc2hDaGFydCgpIHtcclxuICAgIHRoaXMuZGlzcG9zZSgpO1xyXG4gICAgdGhpcy5pbml0Q2hhcnQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQ2hhcnQoKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRXaW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xyXG4gICAgdGhpcy5jdXJyZW50T2Zmc2V0V2lkdGggPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XHJcbiAgICB0aGlzLmN1cnJlbnRPZmZzZXRIZWlnaHQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgY29uc3QgZG9tID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgIGlmICh3aW5kb3cgJiYgd2luZG93LmdldENvbXB1dGVkU3R5bGUpIHtcclxuICAgICAgY29uc3QgcHJvcCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnaGVpZ2h0Jyk7XHJcbiAgICAgIGlmICgoIXByb3AgfHwgcHJvcCA9PT0gJzBweCcpICYmXHJcbiAgICAgICAgKCFkb20uc3R5bGUuaGVpZ2h0IHx8IGRvbS5zdHlsZS5oZWlnaHQgPT09ICcwcHgnKSkge1xyXG4gICAgICAgIGRvbS5zdHlsZS5oZWlnaHQgPSAnNDAwcHgnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IGluaXQoZG9tLCB0aGlzLnRoZW1lLCB0aGlzLmluaXRPcHRzKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRDaGFydCgpIHtcclxuICAgIHRoaXMub25PcHRpb25zQ2hhbmdlKHRoaXMub3B0aW9ucyk7XHJcblxyXG4gICAgaWYgKHRoaXMubWVyZ2UgJiYgdGhpcy5jaGFydCkge1xyXG4gICAgICB0aGlzLnNldE9wdGlvbih0aGlzLm1lcmdlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25PcHRpb25zQ2hhbmdlKG9wdDogRUNoYXJ0T3B0aW9uKSB7XHJcbiAgICBpZiAob3B0KSB7XHJcbiAgICAgIGlmICghdGhpcy5jaGFydCkge1xyXG4gICAgICAgIHRoaXMuY2hhcnQgPSB0aGlzLmNyZWF0ZUNoYXJ0KCk7XHJcbiAgICAgICAgdGhpcy5jaGFydEluaXQuZW1pdCh0aGlzLmNoYXJ0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jaGFydC5zZXRPcHRpb24odGhpcy5vcHRpb25zLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGFsbG93cyB0byBsYXppbHkgYmluZCB0byBvbmx5IHRob3NlIGV2ZW50cyB0aGF0IGFyZSByZXF1ZXN0ZWQgdGhyb3VnaCB0aGUgYEBPdXRwdXRgIGJ5IHBhcmVudCBjb21wb25lbnRzXHJcbiAgLy8gc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzUxNzg3OTcyL29wdGltYWwtcmVlbnRlcmluZy10aGUtbmd6b25lLWZyb20tZXZlbnRlbWl0dGVyLWV2ZW50IGZvciBtb3JlIGluZm9cclxuICBwcml2YXRlIGNyZWF0ZUxhenlFdmVudDxUPihldmVudE5hbWU6IHN0cmluZyk6IEV2ZW50RW1pdHRlcjxUPiB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGFydEluaXQucGlwZShcclxuICAgICAgc3dpdGNoTWFwKChjaGFydDogRUNoYXJ0cykgPT4gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xyXG4gICAgICAgIGNoYXJ0Lm9uKGV2ZW50TmFtZSwgKGRhdGE6IFQpID0+IHRoaXMubmdab25lLnJ1bigoKSA9PiBvYnNlcnZlci5uZXh0KGRhdGEpKSk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7IC8vIG5vIG5lZWQgdG8gcmVhY3Qgb24gdW5zdWJzY3JpYmUgYXMgbG9uZyBhcyB0aGUgYGRpc3Bvc2UoKWAgaXMgY2FsbGVkIGluIG5nT25EZXN0cm95XHJcbiAgICAgIH0pKVxyXG4gICAgKSBhcyBFdmVudEVtaXR0ZXI8VD47XHJcbiAgfVxyXG5cclxufVxyXG4iXX0= |
@@ -5,79 +5,56 @@ /** | ||
*/ | ||
import { Directive, ElementRef, Input, Output, HostListener, EventEmitter, NgZone } from '@angular/core'; | ||
import { Directive, ElementRef, EventEmitter, Input, NgZone, Output } from '@angular/core'; | ||
import { EChartOption, init } from 'echarts'; | ||
import { fromEvent, Observable } from 'rxjs'; | ||
import { debounceTime, switchMap } from 'rxjs/operators'; | ||
import { ChangeFilter } from './change-filter'; | ||
import { Subject } from 'rxjs'; | ||
import { debounceTime } from 'rxjs/operators'; | ||
import { init, EChartOption } from 'echarts'; | ||
import { EChartEvents } from './echart-events'; | ||
var NgxEchartsDirective = /** @class */ (function () { | ||
function NgxEchartsDirective(el, _ngZone) { | ||
function NgxEchartsDirective(el, ngZone) { | ||
this.el = el; | ||
this._ngZone = _ngZone; | ||
this.ngZone = ngZone; | ||
this.autoResize = true; | ||
this.loadingType = 'default'; | ||
/** | ||
* Whether to register event handlers on echartInstance. Default is true. | ||
* Use it to avoid unwanted change detection, if you want to optimize the performance. | ||
*/ | ||
this.detectEventChanges = true; | ||
// chart events: | ||
this.detectEventChanges = true; // deprecated, left for compatibility reasons to avoid triggering major version | ||
// deprecated, left for compatibility reasons to avoid triggering major version | ||
// ngx-echarts events | ||
this.chartInit = new EventEmitter(); | ||
this.chartClick = new EventEmitter(); | ||
this.chartDblClick = new EventEmitter(); | ||
this.chartMouseDown = new EventEmitter(); | ||
this.chartMouseUp = new EventEmitter(); | ||
this.chartMouseOver = new EventEmitter(); | ||
this.chartMouseOut = new EventEmitter(); | ||
this.chartGlobalOut = new EventEmitter(); | ||
this.chartContextMenu = new EventEmitter(); | ||
this.chartDataZoom = new EventEmitter(); | ||
this.chartMapSelectChanged = new EventEmitter(); | ||
this.chartMapSelected = new EventEmitter(); | ||
this.chartMapUnselected = new EventEmitter(); | ||
// echarts mouse events | ||
this.chartClick = this.createLazyEvent('click'); | ||
this.chartDblClick = this.createLazyEvent('dblclick'); | ||
this.chartMouseDown = this.createLazyEvent('mousedown'); | ||
this.chartMouseMove = this.createLazyEvent('mousemove'); | ||
this.chartMouseUp = this.createLazyEvent('mouseup'); | ||
this.chartMouseOver = this.createLazyEvent('mouseover'); | ||
this.chartMouseOut = this.createLazyEvent('mouseout'); | ||
this.chartGlobalOut = this.createLazyEvent('globalout'); | ||
this.chartContextMenu = this.createLazyEvent('contextmenu'); | ||
// echarts mouse events | ||
this.chartLegendSelectChanged = this.createLazyEvent('legendselectchanged'); | ||
this.chartLegendSelected = this.createLazyEvent('legendselected'); | ||
this.chartLegendUnselected = this.createLazyEvent('legendunselected'); | ||
this.chartLegendScroll = this.createLazyEvent('legendscroll'); | ||
this.chartDataZoom = this.createLazyEvent('datazoom'); | ||
this.chartDataRangeSelected = this.createLazyEvent('datarangeselected'); | ||
this.chartTimelineChanged = this.createLazyEvent('timelinechanged'); | ||
this.chartTimelinePlayChanged = this.createLazyEvent('timelineplaychanged'); | ||
this.chartRestore = this.createLazyEvent('restore'); | ||
this.chartDataViewChanged = this.createLazyEvent('dataviewchanged'); | ||
this.chartMagicTypeChanged = this.createLazyEvent('magictypechanged'); | ||
this.chartPieSelectChanged = this.createLazyEvent('pieselectchanged'); | ||
this.chartPieSelected = this.createLazyEvent('pieselected'); | ||
this.chartPieUnselected = this.createLazyEvent('pieunselected'); | ||
this.chartMapSelectChanged = this.createLazyEvent('mapselectchanged'); | ||
this.chartMapSelected = this.createLazyEvent('mapselected'); | ||
this.chartMapUnselected = this.createLazyEvent('mapunselected'); | ||
this.chartAxisAreaSelected = this.createLazyEvent('axisareaselected'); | ||
this.chartFocusNodeAdjacency = this.createLazyEvent('focusnodeadjacency'); | ||
this.chartUnfocusNodeAdjacency = this.createLazyEvent('unfocusnodeadjacency'); | ||
this.chartBrush = this.createLazyEvent('brush'); | ||
this.chartBrushSelected = this.createLazyEvent('brushselected'); | ||
this.chartRendered = this.createLazyEvent('rendered'); | ||
this.chartFinished = this.createLazyEvent('finished'); | ||
this.currentOffsetWidth = 0; | ||
this.currentOffsetHeight = 0; | ||
this._resize$ = new Subject(); | ||
} | ||
/** | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.createChart = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
var _this = this; | ||
this.currentWindowWidth = window.innerWidth; | ||
this.currentOffsetWidth = this.el.nativeElement.offsetWidth; | ||
this.currentOffsetHeight = this.el.nativeElement.offsetHeight; | ||
/** @type {?} */ | ||
var dom = this.el.nativeElement; | ||
if (window && window.getComputedStyle) { | ||
/** @type {?} */ | ||
var prop = window.getComputedStyle(dom, null).getPropertyValue('height'); | ||
if ((!prop || prop === '0px') && | ||
(!dom.style.height || dom.style.height === '0px')) { | ||
dom.style.height = '400px'; | ||
} | ||
} | ||
return this._ngZone.runOutsideAngular(function () { return init(dom, _this.theme || undefined, _this.initOpts || undefined); }); | ||
}; | ||
/** | ||
* @param {?} event | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.onWindowResize = /** | ||
* @param {?} event | ||
* @return {?} | ||
*/ | ||
function (event) { | ||
/** @type {?} */ | ||
var target = (/** @type {?} */ (event.target)); | ||
if (this.autoResize && target.innerWidth !== this.currentWindowWidth) { | ||
this.currentWindowWidth = target.innerWidth; | ||
this.currentOffsetWidth = this.el.nativeElement.offsetWidth; | ||
this.currentOffsetHeight = this.el.nativeElement.offsetHeight; | ||
this._resize$.next(); | ||
} | ||
}; | ||
/** | ||
* @param {?} changes | ||
@@ -97,3 +74,2 @@ * @return {?} | ||
filter.has('loading').subscribe(function (v) { return _this.toggleLoading(!!v); }); | ||
filter.notFirst('detectEventChanges').subscribe(function (v) { return _this.toggleEventDetectors(!!v); }); | ||
filter.notFirst('theme').subscribe(function () { return _this.refreshChart(); }); | ||
@@ -104,2 +80,19 @@ }; | ||
*/ | ||
NgxEchartsDirective.prototype.ngOnInit = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
var _this = this; | ||
this.resizeSub = fromEvent(window, 'resize').pipe(debounceTime(50)).subscribe(function () { | ||
if (_this.autoResize && window.innerWidth !== _this.currentWindowWidth) { | ||
_this.currentWindowWidth = window.innerWidth; | ||
_this.currentOffsetWidth = _this.el.nativeElement.offsetWidth; | ||
_this.currentOffsetHeight = _this.el.nativeElement.offsetHeight; | ||
_this.resize(); | ||
} | ||
}); | ||
}; | ||
/** | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.ngOnDestroy = /** | ||
@@ -109,10 +102,4 @@ * @return {?} | ||
function () { | ||
if (this._resizeSub) { | ||
this._resizeSub.unsubscribe(); | ||
this._resizeSub = null; | ||
} | ||
if (this._chart) { | ||
this._chart.dispose(); | ||
this._chart = null; | ||
} | ||
this.resizeSub.unsubscribe(); | ||
this.dispose(); | ||
}; | ||
@@ -127,3 +114,3 @@ /** | ||
// No heavy work in DoCheck! | ||
if (this._chart && this.autoResize) { | ||
if (this.chart && this.autoResize) { | ||
/** @type {?} */ | ||
@@ -136,3 +123,3 @@ var offsetWidth = this.el.nativeElement.offsetWidth; | ||
this.currentOffsetHeight = offsetHeight; | ||
this._resize$.next(); | ||
this.resize(); | ||
} | ||
@@ -154,68 +141,48 @@ } | ||
*/ | ||
NgxEchartsDirective.prototype.initChart = /** | ||
NgxEchartsDirective.prototype.dispose = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
this.onOptionsChange(this.options); | ||
if (this.merge && this._chart) { | ||
this.setOption(this.merge); | ||
if (this.chart) { | ||
this.chart.dispose(); | ||
this.chart = null; | ||
} | ||
}; | ||
/** | ||
* @param {?} opt | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.onOptionsChange = /** | ||
* @param {?} opt | ||
NgxEchartsDirective.prototype.resize = /** | ||
* @return {?} | ||
*/ | ||
function (opt) { | ||
var _this = this; | ||
if (opt) { | ||
if (!this._chart) { | ||
this._chart = this.createChart(); | ||
// subscribe to _resize$ and debounced | ||
this._resizeSub = this._resize$.pipe(debounceTime(50)).subscribe(function () { | ||
if (_this._chart) { | ||
_this._chart.resize(); | ||
} | ||
}); | ||
// output echart instance: | ||
this.chartInit.emit(this._chart); | ||
// register events: | ||
if (this.detectEventChanges) { | ||
this.registerEvents(); | ||
} | ||
} | ||
this._chart.setOption(this.options, true); | ||
function () { | ||
if (this.chart) { | ||
this.chart.resize(); | ||
} | ||
}; | ||
/** | ||
* @param {?} loading | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.registerEvents = /** | ||
NgxEchartsDirective.prototype.toggleLoading = /** | ||
* @param {?} loading | ||
* @return {?} | ||
*/ | ||
function () { | ||
if (this._chart) { | ||
/** @type {?} */ | ||
var events = EChartEvents.All; | ||
for (var i = 0, len = events.length; i < len; i++) { | ||
this._chart.on(events[i], this.eventHandler, this); | ||
} | ||
function (loading) { | ||
if (this.chart) { | ||
loading ? this.chart.showLoading(this.loadingType, this.loadingOpts) : this.chart.hideLoading(); | ||
} | ||
}; | ||
/** | ||
* @param {?} option | ||
* @param {?=} opts | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.unregisterEvents = /** | ||
NgxEchartsDirective.prototype.setOption = /** | ||
* @param {?} option | ||
* @param {?=} opts | ||
* @return {?} | ||
*/ | ||
function () { | ||
if (this._chart) { | ||
/** @type {?} */ | ||
var events = EChartEvents.All; | ||
for (var i = 0, len = events.length; i < len; i++) { | ||
this._chart.off(events[i], this.eventHandler); | ||
} | ||
function (option, opts) { | ||
if (this.chart) { | ||
this.chart.setOption(option, opts); | ||
} | ||
@@ -226,109 +193,84 @@ }; | ||
*/ | ||
NgxEchartsDirective.prototype.clear = /** | ||
NgxEchartsDirective.prototype.refreshChart = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
if (this._chart) { | ||
this._chart.clear(); | ||
} | ||
this.dispose(); | ||
this.initChart(); | ||
}; | ||
/** | ||
* @param {?} loading | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.toggleLoading = /** | ||
* @param {?} loading | ||
NgxEchartsDirective.prototype.createChart = /** | ||
* @return {?} | ||
*/ | ||
function (loading) { | ||
if (this._chart) { | ||
loading ? this._chart.showLoading(this.loadingType, this.loadingOpts) : this._chart.hideLoading(); | ||
function () { | ||
var _this = this; | ||
this.currentWindowWidth = window.innerWidth; | ||
this.currentOffsetWidth = this.el.nativeElement.offsetWidth; | ||
this.currentOffsetHeight = this.el.nativeElement.offsetHeight; | ||
/** @type {?} */ | ||
var dom = this.el.nativeElement; | ||
if (window && window.getComputedStyle) { | ||
/** @type {?} */ | ||
var prop = window.getComputedStyle(dom, null).getPropertyValue('height'); | ||
if ((!prop || prop === '0px') && | ||
(!dom.style.height || dom.style.height === '0px')) { | ||
dom.style.height = '400px'; | ||
} | ||
} | ||
return this.ngZone.runOutsideAngular(function () { return init(dom, _this.theme, _this.initOpts); }); | ||
}; | ||
/** | ||
* @param {?} option | ||
* @param {?=} opts | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.setOption = /** | ||
* @param {?} option | ||
* @param {?=} opts | ||
NgxEchartsDirective.prototype.initChart = /** | ||
* @return {?} | ||
*/ | ||
function (option, opts) { | ||
if (this._chart) { | ||
this._chart.setOption(option, opts); | ||
function () { | ||
this.onOptionsChange(this.options); | ||
if (this.merge && this.chart) { | ||
this.setOption(this.merge); | ||
} | ||
}; | ||
/** | ||
* @param {?} event | ||
* @param {?} opt | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.eventHandler = /** | ||
* @param {?} event | ||
NgxEchartsDirective.prototype.onOptionsChange = /** | ||
* @param {?} opt | ||
* @return {?} | ||
*/ | ||
function (event) { | ||
var _this = this; | ||
switch (event.type) { | ||
case EChartEvents.Click: | ||
this._ngZone.run(function () { return _this.chartClick.emit(event); }); | ||
break; | ||
case EChartEvents.DblClick: | ||
this._ngZone.run(function () { return _this.chartDblClick.emit(event); }); | ||
break; | ||
case EChartEvents.MouseDown: | ||
this._ngZone.run(function () { return _this.chartMouseDown.emit(event); }); | ||
break; | ||
case EChartEvents.MouseUp: | ||
this._ngZone.run(function () { return _this.chartMouseUp.emit(event); }); | ||
break; | ||
case EChartEvents.MouseOver: | ||
this._ngZone.run(function () { return _this.chartMouseOver.emit(event); }); | ||
break; | ||
case EChartEvents.MouseOut: | ||
this._ngZone.run(function () { return _this.chartMouseOut.emit(event); }); | ||
break; | ||
case EChartEvents.GlobalOut: | ||
this._ngZone.run(function () { return _this.chartGlobalOut.emit(event); }); | ||
break; | ||
case EChartEvents.ContextMenu: | ||
this._ngZone.run(function () { return _this.chartContextMenu.emit(event); }); | ||
break; | ||
case EChartEvents.DataZoom: | ||
this._ngZone.run(function () { return _this.chartDataZoom.emit(event); }); | ||
break; | ||
case EChartEvents.MapSelectChanged: | ||
this._ngZone.run(function () { return _this.chartMapSelectChanged.emit(event); }); | ||
break; | ||
case EChartEvents.MapSelected: | ||
this._ngZone.run(function () { return _this.chartMapSelected.emit(event); }); | ||
break; | ||
case EChartEvents.MapUnselected: | ||
this._ngZone.run(function () { return _this.chartMapUnselected.emit(event); }); | ||
break; | ||
function (opt) { | ||
if (opt) { | ||
if (!this.chart) { | ||
this.chart = this.createChart(); | ||
this.chartInit.emit(this.chart); | ||
} | ||
this.chart.setOption(this.options, true); | ||
} | ||
}; | ||
// allows to lazily bind to only those events that are requested through the `@Output` by parent components | ||
// see https://stackoverflow.com/questions/51787972/optimal-reentering-the-ngzone-from-eventemitter-event for more info | ||
// allows to lazily bind to only those events that are requested through the `@Output` by parent components | ||
// see https://stackoverflow.com/questions/51787972/optimal-reentering-the-ngzone-from-eventemitter-event for more info | ||
/** | ||
* @param {?} detect | ||
* @template T | ||
* @param {?} eventName | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.toggleEventDetectors = /** | ||
* @param {?} detect | ||
* @return {?} | ||
*/ | ||
function (detect) { | ||
if (this._chart) { | ||
detect ? this.registerEvents() : this.unregisterEvents(); | ||
} | ||
}; | ||
NgxEchartsDirective.prototype.createLazyEvent = | ||
// allows to lazily bind to only those events that are requested through the `@Output` by parent components | ||
// see https://stackoverflow.com/questions/51787972/optimal-reentering-the-ngzone-from-eventemitter-event for more info | ||
/** | ||
* @template T | ||
* @param {?} eventName | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.refreshChart = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
this.ngOnDestroy(); | ||
this.initChart(); | ||
function (eventName) { | ||
var _this = this; | ||
return (/** @type {?} */ (this.chartInit.pipe(switchMap(function (chart) { return new Observable(function (observer) { | ||
chart.on(eventName, function (data) { return _this.ngZone.run(function () { return observer.next(data); }); }); | ||
return null; // no need to react on unsubscribe as long as the `dispose()` is called in ngOnDestroy | ||
}); })))); | ||
}; | ||
@@ -359,2 +301,3 @@ NgxEchartsDirective.decorators = [ | ||
chartMouseDown: [{ type: Output }], | ||
chartMouseMove: [{ type: Output }], | ||
chartMouseUp: [{ type: Output }], | ||
@@ -365,7 +308,26 @@ chartMouseOver: [{ type: Output }], | ||
chartContextMenu: [{ type: Output }], | ||
chartLegendSelectChanged: [{ type: Output }], | ||
chartLegendSelected: [{ type: Output }], | ||
chartLegendUnselected: [{ type: Output }], | ||
chartLegendScroll: [{ type: Output }], | ||
chartDataZoom: [{ type: Output }], | ||
chartDataRangeSelected: [{ type: Output }], | ||
chartTimelineChanged: [{ type: Output }], | ||
chartTimelinePlayChanged: [{ type: Output }], | ||
chartRestore: [{ type: Output }], | ||
chartDataViewChanged: [{ type: Output }], | ||
chartMagicTypeChanged: [{ type: Output }], | ||
chartPieSelectChanged: [{ type: Output }], | ||
chartPieSelected: [{ type: Output }], | ||
chartPieUnselected: [{ type: Output }], | ||
chartMapSelectChanged: [{ type: Output }], | ||
chartMapSelected: [{ type: Output }], | ||
chartMapUnselected: [{ type: Output }], | ||
onWindowResize: [{ type: HostListener, args: ['window:resize', ['$event'],] }] | ||
chartAxisAreaSelected: [{ type: Output }], | ||
chartFocusNodeAdjacency: [{ type: Output }], | ||
chartUnfocusNodeAdjacency: [{ type: Output }], | ||
chartBrush: [{ type: Output }], | ||
chartBrushSelected: [{ type: Output }], | ||
chartRendered: [{ type: Output }], | ||
chartFinished: [{ type: Output }] | ||
}; | ||
@@ -392,7 +354,3 @@ return NgxEchartsDirective; | ||
NgxEchartsDirective.prototype.loadingOpts; | ||
/** | ||
* Whether to register event handlers on echartInstance. Default is true. | ||
* Use it to avoid unwanted change detection, if you want to optimize the performance. | ||
* @type {?} | ||
*/ | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.detectEventChanges; | ||
@@ -408,2 +366,4 @@ /** @type {?} */ | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartMouseMove; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartMouseUp; | ||
@@ -419,4 +379,30 @@ /** @type {?} */ | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartLegendSelectChanged; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartLegendSelected; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartLegendUnselected; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartLegendScroll; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartDataZoom; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartDataRangeSelected; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartTimelineChanged; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartTimelinePlayChanged; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartRestore; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartDataViewChanged; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartMagicTypeChanged; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartPieSelectChanged; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartPieSelected; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartPieUnselected; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartMapSelectChanged; | ||
@@ -428,4 +414,18 @@ /** @type {?} */ | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype._chart; | ||
NgxEchartsDirective.prototype.chartAxisAreaSelected; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartFocusNodeAdjacency; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartUnfocusNodeAdjacency; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartBrush; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartBrushSelected; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartRendered; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chartFinished; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.chart; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.currentOffsetWidth; | ||
@@ -437,10 +437,8 @@ /** @type {?} */ | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype._resize$; | ||
NgxEchartsDirective.prototype.resizeSub; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype._resizeSub; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype.el; | ||
/** @type {?} */ | ||
NgxEchartsDirective.prototype._ngZone; | ||
NgxEchartsDirective.prototype.ngZone; | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWVjaGFydHMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWVjaGFydHMvIiwic291cmNlcyI6WyJsaWIvbmd4LWVjaGFydHMuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUFFLFVBQVUsRUFBWSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQ3JDLE1BQU0sRUFDNUMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsSUFBSSxFQUFXLFlBQVksRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0M7SUE4Q0UsNkJBQW9CLEVBQWMsRUFBVSxPQUFlO1FBQXZDLE9BQUUsR0FBRixFQUFFLENBQVk7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBaENsRCxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLGdCQUFXLEdBQUcsU0FBUyxDQUFDOzs7OztRQU94Qix1QkFBa0IsR0FBRyxJQUFJLENBQUM7O1FBR3pCLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBQ3hDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3JDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN4QyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDekMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3ZDLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN6QyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFPLENB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Q0FDTixNQUFNOytCQUNOLE1BQU07aUNBQ04sTUFBTTtnQ0FDTixNQUFNO2lDQUNOLE1BQU07bUNBQ04sTUFBTTtnQ0FDTixNQUFNO3dDQUNOLE1BQU07bUNBQ04sTUFBTTtxQ0FDTixNQUFNO2lDQTRCTixZQUFZLFNBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDOztJQTRLM0MsMEJBQUM7Q0FBQSxBQTdPRCxJQTZPQztTQTFPWSxtQkFBbUI7OztJQUM5QixzQ0FBK0I7O0lBQy9CLG9DQUF1Qjs7SUFDdkIsc0NBQTBCOztJQUMxQix1Q0FLRTs7SUFDRixvQ0FBNkI7O0lBQzdCLHlDQUEyQjs7SUFDM0IsMENBQWlDOztJQUNqQywwQ0FBNkI7Ozs7OztJQU03QixpREFBbUM7O0lBR25DLHdDQUFrRDs7SUFDbEQseUNBQStDOztJQUMvQyw0Q0FBa0Q7O0lBQ2xELDZDQUFtRDs7SUFDbkQsMkNBQWlEOztJQUNqRCw2Q0FBbUQ7O0lBQ25ELDRDQUFrRDs7SUFDbEQsNkNBQW1EOztJQUNuRCwrQ0FBcUQ7O0lBQ3JELDRDQUFrRDs7SUFDbEQsb0RBQTBEOztJQUMxRCwrQ0FBcUQ7O0lBQ3JELGlEQUF1RDs7SUFFdkQscUNBQXdCOztJQUN4QixpREFBK0I7O0lBQy9CLGtEQUFnQzs7SUFDaEMsaURBQW1DOztJQUNuQyx1Q0FBdUM7O0lBQ3ZDLHlDQUFpQzs7SUFFckIsaUNBQXNCOztJQUFFLHNDQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBSZW5kZXJlciwgSW5wdXQsIE91dHB1dCwgSG9zdExpc3RlbmVyLCBFdmVudEVtaXR0ZXIsXHJcbiAgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIFNpbXBsZUNoYW5nZXMsIE5nWm9uZSwgRG9DaGVjaywgQWZ0ZXJWaWV3SW5pdFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDaGFuZ2VGaWx0ZXIgfSBmcm9tICcuL2NoYW5nZS1maWx0ZXInO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBpbml0LCBFQ2hhcnRzLCBFQ2hhcnRPcHRpb24gfSBmcm9tICdlY2hhcnRzJztcclxuaW1wb3J0IHsgRUNoYXJ0RXZlbnRzIH0gZnJvbSAnLi9lY2hhcnQtZXZlbnRzJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnZWNoYXJ0cywgW2VjaGFydHNdJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5neEVjaGFydHNEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSwgRG9DaGVjaywgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQElucHV0KCkgb3B0aW9uczogRUNoYXJ0T3B0aW9uO1xyXG4gIEBJbnB1dCgpIHRoZW1lOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBpbml0T3B0czoge1xyXG4gICAgZGV2aWNlUGl4ZWxSYXRpbz86IG51bWJlclxyXG4gICAgcmVuZGVyZXI/OiBzdHJpbmdcclxuICAgIHdpZHRoPzogbnVtYmVyIHwgc3RyaW5nXHJcbiAgICBoZWlnaHQ/OiBudW1iZXIgfCBzdHJpbmdcclxuICB9O1xyXG4gIEBJbnB1dCgpIG1lcmdlOiBFQ2hhcnRPcHRpb247XHJcbiAgQElucHV0KCkgYXV0b1Jlc2l6ZSA9IHRydWU7XHJcbiAgQElucHV0KCkgbG9hZGluZ1R5cGUgPSAnZGVmYXVsdCc7XHJcbiAgQElucHV0KCkgbG9hZGluZ09wdHM6IG9iamVjdDtcclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0byByZWdpc3RlciBldmVudCBoYW5kbGVycyBvbiBlY2hhcnRJbnN0YW5jZS4gRGVmYXVsdCBpcyB0cnVlLlxyXG4gICAqIFVzZSBpdCB0byBhdm9pZCB1bndhbnRlZCBjaGFuZ2UgZGV0ZWN0aW9uLCBpZiB5b3Ugd2FudCB0byBvcHRpbWl6ZSB0aGUgcGVyZm9ybWFuY2UuXHJcbiAgICovXHJcbiAgQElucHV0KCkgZGV0ZWN0RXZlbnRDaGFuZ2VzID0gdHJ1ZTtcclxuXHJcbiAgLy8gY2hhcnQgZXZlbnRzOlxyXG4gIEBPdXRwdXQoKSBjaGFydEluaXQgPSBuZXcgRXZlbnRFbWl0dGVyPEVDaGFydHM+KCk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgY2hhcnREYmxDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBjaGFydE1vdXNlRG93biA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBjaGFydE1vdXNlVXAgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgY2hhcnRNb3VzZU92ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgY2hhcnRNb3VzZU91dCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBjaGFydEdsb2JhbE91dCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBjaGFydENvbnRleHRNZW51ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0RGF0YVpvb20gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgY2hhcnRNYXBTZWxlY3RDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TWFwU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgY2hhcnRNYXBVbnNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIHByaXZhdGUgX2NoYXJ0OiBFQ2hhcnRzO1xyXG4gIHByaXZhdGUgY3VycmVudE9mZnNldFdpZHRoID0gMDtcclxuICBwcml2YXRlIGN1cnJlbnRPZmZzZXRIZWlnaHQgPSAwO1xyXG4gIHByaXZhdGUgY3VycmVudFdpbmRvd1dpZHRoOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfcmVzaXplJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJpdmF0ZSBfcmVzaXplU3ViOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsIHByaXZhdGUgX25nWm9uZTogTmdab25lKSB7IH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVDaGFydCgpIHtcclxuICAgIHRoaXMuY3VycmVudFdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICB0aGlzLmN1cnJlbnRPZmZzZXRXaWR0aCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcclxuICAgIHRoaXMuY3VycmVudE9mZnNldEhlaWdodCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICBjb25zdCBkb20gPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgaWYgKHdpbmRvdyAmJiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSkge1xyXG4gICAgICBjb25zdCBwcm9wID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9tLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdoZWlnaHQnKTtcclxuICAgICAgaWYgKCghcHJvcCB8fCBwcm9wID09PSAnMHB4JykgJiZcclxuICAgICAgICAoIWRvbS5zdHlsZS5oZWlnaHQgfHwgZG9tLnN0eWxlLmhlaWdodCA9PT0gJzBweCcpKSB7XHJcbiAgICAgICAgZG9tLnN0eWxlLmhlaWdodCA9ICc0MDBweCc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IGluaXQoZG9tLCB0aGlzLnRoZW1lIHx8IHVuZGVmaW5lZCwgdGhpcy5pbml0T3B0cyB8fCB1bmRlZmluZWQpKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxyXG4gIG9uV2luZG93UmVzaXplKGV2ZW50OiBFdmVudCkge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIFdpbmRvdztcclxuXHJcbiAgICBpZiAodGhpcy5hdXRvUmVzaXplICYmIHRhcmdldC5pbm5lcldpZHRoICE9PSB0aGlzLmN1cnJlbnRXaW5kb3dXaWR0aCkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRXaW5kb3dXaWR0aCA9IHRhcmdldC5pbm5lcldpZHRoO1xyXG4gICAgICB0aGlzLmN1cnJlbnRPZmZzZXRXaWR0aCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcclxuICAgICAgdGhpcy5jdXJyZW50T2Zmc2V0SGVpZ2h0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcclxuXHJcbiAgICAgIHRoaXMuX3Jlc2l6ZSQubmV4dCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgY29uc3QgZmlsdGVyID0gQ2hhbmdlRmlsdGVyLm9mKGNoYW5nZXMpO1xyXG4gICAgZmlsdGVyLm5vdEZpcnN0QW5kRW1wdHk8YW55Pignb3B0aW9ucycpLnN1YnNjcmliZShvcHQgPT4gdGhpcy5vbk9wdGlvbnNDaGFuZ2Uob3B0KSk7XHJcbiAgICBmaWx0ZXIubm90Rmlyc3RBbmRFbXB0eTxhbnk+KCdtZXJnZScpLnN1YnNjcmliZShvcHQgPT4gdGhpcy5zZXRPcHRpb24ob3B0KSk7XHJcbiAgICBmaWx0ZXIuaGFzPGJvb2xlYW4+KCdsb2FkaW5nJykuc3Vic2NyaWJlKHYgPT4gdGhpcy50b2dnbGVMb2FkaW5nKCEhdikpO1xyXG4gICAgZmlsdGVyLm5vdEZpcnN0PGJvb2xlYW4+KCdkZXRlY3RFdmVudENoYW5nZXMnKS5zdWJzY3JpYmUodiA9PiB0aGlzLnRvZ2dsZUV2ZW50RGV0ZWN0b3JzKCEhdikpO1xyXG4gICAgZmlsdGVyLm5vdEZpcnN0PHN0cmluZz4oJ3RoZW1lJykuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVmcmVzaENoYXJ0KCkpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5fcmVzaXplU3ViKSB7XHJcbiAgICAgIHRoaXMuX3Jlc2l6ZVN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgICB0aGlzLl9yZXNpemVTdWIgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9jaGFydCkge1xyXG4gICAgICB0aGlzLl9jaGFydC5kaXNwb3NlKCk7XHJcbiAgICAgIHRoaXMuX2NoYXJ0ID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nRG9DaGVjaygpIHtcclxuICAgIC8vIE5vIGhlYXZ5IHdvcmsgaW4gRG9DaGVjayFcclxuICAgIGlmICh0aGlzLl9jaGFydCAmJiB0aGlzLmF1dG9SZXNpemUpIHtcclxuICAgICAgY29uc3Qgb2Zmc2V0V2lkdGggPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XHJcbiAgICAgIGNvbnN0IG9mZnNldEhlaWdodCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAodGhpcy5jdXJyZW50T2Zmc2V0V2lkdGggIT09IG9mZnNldFdpZHRoIHx8IHRoaXMuY3VycmVudE9mZnNldEhlaWdodCAhPT0gb2Zmc2V0SGVpZ2h0KSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50T2Zmc2V0V2lkdGggPSBvZmZzZXRXaWR0aDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRPZmZzZXRIZWlnaHQgPSBvZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgdGhpcy5fcmVzaXplJC5uZXh0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5pbml0Q2hhcnQoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRDaGFydCgpIHtcclxuICAgIHRoaXMub25PcHRpb25zQ2hhbmdlKHRoaXMub3B0aW9ucyk7XHJcblxyXG4gICAgaWYgKHRoaXMubWVyZ2UgJiYgdGhpcy5fY2hhcnQpIHtcclxuICAgICAgdGhpcy5zZXRPcHRpb24odGhpcy5tZXJnZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uT3B0aW9uc0NoYW5nZShvcHQ6IEVDaGFydE9wdGlvbikge1xyXG4gICAgaWYgKG9wdCkge1xyXG4gICAgICBpZiAoIXRoaXMuX2NoYXJ0KSB7XHJcbiAgICAgICAgdGhpcy5fY2hhcnQgPSB0aGlzLmNyZWF0ZUNoYXJ0KCk7XHJcblxyXG4gICAgICAgIC8vIHN1YnNjcmliZSB0byBfcmVzaXplJCBhbmQgZGVib3VuY2VkXHJcbiAgICAgICAgdGhpcy5fcmVzaXplU3ViID0gdGhpcy5fcmVzaXplJC5waXBlKGRlYm91bmNlVGltZSg1MCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5fY2hhcnQpIHtcclxuICAgICAgICAgICAgdGhpcy5fY2hhcnQucmVzaXplKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIG91dHB1dCBlY2hhcnQgaW5zdGFuY2U6XHJcbiAgICAgICAgdGhpcy5jaGFydEluaXQuZW1pdCh0aGlzLl9jaGFydCk7XHJcblxyXG4gICAgICAgIC8vIHJlZ2lzdGVyIGV2ZW50czpcclxuICAgICAgICBpZiAodGhpcy5kZXRlY3RFdmVudENoYW5nZXMpIHtcclxuICAgICAgICAgIHRoaXMucmVnaXN0ZXJFdmVudHMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX2NoYXJ0LnNldE9wdGlvbih0aGlzLm9wdGlvbnMsIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWdpc3RlckV2ZW50cygpIHtcclxuICAgIGlmICh0aGlzLl9jaGFydCkge1xyXG4gICAgICBjb25zdCBldmVudHMgPSBFQ2hhcnRFdmVudHMuQWxsO1xyXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZXZlbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5fY2hhcnQub24oZXZlbnRzW2ldLCB0aGlzLmV2ZW50SGFuZGxlciwgdGhpcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdW5yZWdpc3RlckV2ZW50cygpIHtcclxuICAgIGlmICh0aGlzLl9jaGFydCkge1xyXG4gICAgICBjb25zdCBldmVudHMgPSBFQ2hhcnRFdmVudHMuQWxsO1xyXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZXZlbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5fY2hhcnQub2ZmKGV2ZW50c1tpXSwgdGhpcy5ldmVudEhhbmRsZXIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIGlmICh0aGlzLl9jaGFydCkge1xyXG4gICAgICB0aGlzLl9jaGFydC5jbGVhcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlTG9hZGluZyhsb2FkaW5nOiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fY2hhcnQpIHtcclxuICAgICAgbG9hZGluZyA/IHRoaXMuX2NoYXJ0LnNob3dMb2FkaW5nKHRoaXMubG9hZGluZ1R5cGUsIHRoaXMubG9hZGluZ09wdHMpIDogdGhpcy5fY2hhcnQuaGlkZUxvYWRpbmcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldE9wdGlvbihvcHRpb246IGFueSwgb3B0cz86IGFueSkge1xyXG4gICAgaWYgKHRoaXMuX2NoYXJ0KSB7XHJcbiAgICAgIHRoaXMuX2NoYXJ0LnNldE9wdGlvbihvcHRpb24sIG9wdHMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmVudEhhbmRsZXIoZXZlbnQpIHtcclxuICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xyXG4gICAgICBjYXNlIEVDaGFydEV2ZW50cy5DbGljazpcclxuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMuY2hhcnRDbGljay5lbWl0KGV2ZW50KSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUNoYXJ0RXZlbnRzLkRibENsaWNrOlxyXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5jaGFydERibENsaWNrLmVtaXQoZXZlbnQpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQ2hhcnRFdmVudHMuTW91c2VEb3duOlxyXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5jaGFydE1vdXNlRG93bi5lbWl0KGV2ZW50KSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUNoYXJ0RXZlbnRzLk1vdXNlVXA6XHJcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmNoYXJ0TW91c2VVcC5lbWl0KGV2ZW50KSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUNoYXJ0RXZlbnRzLk1vdXNlT3ZlcjpcclxuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMuY2hhcnRNb3VzZU92ZXIuZW1pdChldmVudCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVDaGFydEV2ZW50cy5Nb3VzZU91dDpcclxuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMuY2hhcnRNb3VzZU91dC5lbWl0KGV2ZW50KSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUNoYXJ0RXZlbnRzLkdsb2JhbE91dDpcclxuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMuY2hhcnRHbG9iYWxPdXQuZW1pdChldmVudCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVDaGFydEV2ZW50cy5Db250ZXh0TWVudTpcclxuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMuY2hhcnRDb250ZXh0TWVudS5lbWl0KGV2ZW50KSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUNoYXJ0RXZlbnRzLkRhdGFab29tOlxyXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5jaGFydERhdGFab29tLmVtaXQoZXZlbnQpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQ2hhcnRFdmVudHMuTWFwU2VsZWN0Q2hhbmdlZDpcclxuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMuY2hhcnRNYXBTZWxlY3RDaGFuZ2VkLmVtaXQoZXZlbnQpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQ2hhcnRFdmVudHMuTWFwU2VsZWN0ZWQ6XHJcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmNoYXJ0TWFwU2VsZWN0ZWQuZW1pdChldmVudCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVDaGFydEV2ZW50cy5NYXBVbnNlbGVjdGVkOlxyXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5jaGFydE1hcFVuc2VsZWN0ZWQuZW1pdChldmVudCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b2dnbGVFdmVudERldGVjdG9ycyhkZXRlY3Q6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl9jaGFydCkge1xyXG4gICAgICBkZXRlY3QgPyB0aGlzLnJlZ2lzdGVyRXZlbnRzKCkgOiB0aGlzLnVucmVnaXN0ZXJFdmVudHMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVmcmVzaENoYXJ0KCkge1xyXG4gICAgdGhpcy5uZ09uRGVzdHJveSgpO1xyXG4gICAgdGhpcy5pbml0Q2hhcnQoKTtcclxuICB9XHJcbn1cclxuIl19 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWVjaGFydHMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWVjaGFydHMvIiwic291cmNlcyI6WyJsaWIvbmd4LWVjaGFydHMuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBVyxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWdDLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDaEssT0FBTyxFQUFFLFlBQVksRUFBVyxJQUFJLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DO0lBaUVFLDZCQUFvQixFQUFjLEVBQVUsTUFBYztRQUF0QyxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQW5EakQsZUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixnQkFBVyxHQUFHLFNBQVMsQ0FBQztRQUV4Qix1QkFBa0IsR0FBRyxJQUFJLENBQUMsQ0FBQywrRUFBK0U7OztRQUd6RyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQzs7UUFHeEMsZUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0Msa0JBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELG1CQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuRCxtQkFBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkQsaUJBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxD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QUE2Qjs7SUFDN0IseUNBQTJCOztJQUMzQiwwQ0FBaUM7O0lBQ2pDLDBDQUE2Qjs7SUFDN0IsaURBQW1DOztJQUduQyx3Q0FBa0Q7O0lBR2xELHlDQUFxRDs7SUFDckQsNENBQTJEOztJQUMzRCw2Q0FBNkQ7O0lBQzdELDZDQUE2RDs7SUFDN0QsMkNBQXlEOztJQUN6RCw2Q0FBNkQ7O0lBQzdELDRDQUEyRDs7SUFDM0QsNkNBQTZEOztJQUM3RCwrQ0FBaUU7O0lBR2pFLHVEQUFpRjs7SUFDakYsa0RBQXVFOztJQUN2RSxvREFBMkU7O0lBQzNFLGdEQUFtRTs7SUFDbkUsNENBQTJEOztJQUMzRCxxREFBNkU7O0lBQzdFLG1EQUF5RTs7SUFDekUsdURBQWlGOztJQUNqRiwyQ0FBeUQ7O0lBQ3pELG1EQUF5RTs7SUFDekUsb0RBQTJFOztJQUMzRSxvREFBMkU7O0lBQzNFLCtDQUFpRTs7SUFDakUsaURBQXFFOztJQUNyRSxvREFBMkU7O0lBQzNFLCtDQUFpRTs7SUFDakUsaURBQXFFOztJQUNyRSxvREFBMkU7O0lBQzNFLHNEQUErRTs7SUFDL0Usd0RBQW1GOztJQUNuRix5Q0FBcUQ7O0lBQ3JELGlEQUFxRTs7SUFDckUsNENBQTJEOztJQUMzRCw0Q0FBMkQ7O0lBRTNELG9DQUF1Qjs7SUFDdkIsaURBQStCOztJQUMvQixrREFBZ0M7O0lBQ2hDLGlEQUFtQzs7SUFDbkMsd0NBQWdDOztJQUVwQixpQ0FBc0I7O0lBQUUscUNBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBEb0NoZWNrLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBOZ1pvbmUsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBFQ2hhcnRPcHRpb24sIEVDaGFydHMsIGluaXQgfSBmcm9tICdlY2hhcnRzJztcclxuaW1wb3J0IHsgZnJvbUV2ZW50LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENoYW5nZUZpbHRlciB9IGZyb20gJy4vY2hhbmdlLWZpbHRlcic7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ2VjaGFydHMsIFtlY2hhcnRzXScsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hFY2hhcnRzRGlyZWN0aXZlIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgRG9DaGVjaywgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQElucHV0KCkgb3B0aW9uczogRUNoYXJ0T3B0aW9uO1xyXG4gIEBJbnB1dCgpIHRoZW1lOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBpbml0T3B0czoge1xyXG4gICAgZGV2aWNlUGl4ZWxSYXRpbz86IG51bWJlclxyXG4gICAgcmVuZGVyZXI/OiBzdHJpbmdcclxuICAgIHdpZHRoPzogbnVtYmVyIHwgc3RyaW5nXHJcbiAgICBoZWlnaHQ/OiBudW1iZXIgfCBzdHJpbmdcclxuICB9O1xyXG4gIEBJbnB1dCgpIG1lcmdlOiBFQ2hhcnRPcHRpb247XHJcbiAgQElucHV0KCkgYXV0b1Jlc2l6ZSA9IHRydWU7XHJcbiAgQElucHV0KCkgbG9hZGluZ1R5cGUgPSAnZGVmYXVsdCc7XHJcbiAgQElucHV0KCkgbG9hZGluZ09wdHM6IG9iamVjdDtcclxuICBASW5wdXQoKSBkZXRlY3RFdmVudENoYW5nZXMgPSB0cnVlOyAvLyBkZXByZWNhdGVkLCBsZWZ0IGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMgdG8gYXZvaWQgdHJpZ2dlcmluZyBtYWpvciB2ZXJzaW9uXHJcblxyXG4gIC8vIG5neC1lY2hhcnRzIGV2ZW50c1xyXG4gIEBPdXRwdXQoKSBjaGFydEluaXQgPSBuZXcgRXZlbnRFbWl0dGVyPEVDaGFydHM+KCk7XHJcblxyXG4gIC8vIGVjaGFydHMgbW91c2UgZXZlbnRzXHJcbiAgQE91dHB1dCgpIGNoYXJ0Q2xpY2sgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnY2xpY2snKTtcclxuICBAT3V0cHV0KCkgY2hhcnREYmxDbGljayA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdkYmxjbGljaycpO1xyXG4gIEBPdXRwdXQoKSBjaGFydE1vdXNlRG93biA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdtb3VzZWRvd24nKTtcclxuICBAT3V0cHV0KCkgY2hhcnRNb3VzZU1vdmUgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnbW91c2Vtb3ZlJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TW91c2VVcCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdtb3VzZXVwJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TW91c2VPdmVyID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ21vdXNlb3ZlcicpO1xyXG4gIEBPdXRwdXQoKSBjaGFydE1vdXNlT3V0ID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ21vdXNlb3V0Jyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0R2xvYmFsT3V0ID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ2dsb2JhbG91dCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydENvbnRleHRNZW51ID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ2NvbnRleHRtZW51Jyk7XHJcblxyXG4gIC8vIGVjaGFydHMgbW91c2UgZXZlbnRzXHJcbiAgQE91dHB1dCgpIGNoYXJ0TGVnZW5kU2VsZWN0Q2hhbmdlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdsZWdlbmRzZWxlY3RjaGFuZ2VkJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TGVnZW5kU2VsZWN0ZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnbGVnZW5kc2VsZWN0ZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRMZWdlbmRVbnNlbGVjdGVkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ2xlZ2VuZHVuc2VsZWN0ZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRMZWdlbmRTY3JvbGwgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnbGVnZW5kc2Nyb2xsJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0RGF0YVpvb20gPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnZGF0YXpvb20nKTtcclxuICBAT3V0cHV0KCkgY2hhcnREYXRhUmFuZ2VTZWxlY3RlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdkYXRhcmFuZ2VzZWxlY3RlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydFRpbWVsaW5lQ2hhbmdlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCd0aW1lbGluZWNoYW5nZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRUaW1lbGluZVBsYXlDaGFuZ2VkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ3RpbWVsaW5lcGxheWNoYW5nZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRSZXN0b3JlID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ3Jlc3RvcmUnKTtcclxuICBAT3V0cHV0KCkgY2hhcnREYXRhVmlld0NoYW5nZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnZGF0YXZpZXdjaGFuZ2VkJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TWFnaWNUeXBlQ2hhbmdlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdtYWdpY3R5cGVjaGFuZ2VkJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0UGllU2VsZWN0Q2hhbmdlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdwaWVzZWxlY3RjaGFuZ2VkJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0UGllU2VsZWN0ZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgncGllc2VsZWN0ZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRQaWVVbnNlbGVjdGVkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ3BpZXVuc2VsZWN0ZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRNYXBTZWxlY3RDaGFuZ2VkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ21hcHNlbGVjdGNoYW5nZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRNYXBTZWxlY3RlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdtYXBzZWxlY3RlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydE1hcFVuc2VsZWN0ZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnbWFwdW5zZWxlY3RlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydEF4aXNBcmVhU2VsZWN0ZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnYXhpc2FyZWFzZWxlY3RlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydEZvY3VzTm9kZUFkamFjZW5jeSA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdmb2N1c25vZGVhZGphY2VuY3knKTtcclxuICBAT3V0cHV0KCkgY2hhcnRVbmZvY3VzTm9kZUFkamFjZW5jeSA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCd1bmZvY3Vzbm9kZWFkamFjZW5jeScpO1xyXG4gIEBPdXRwdXQoKSBjaGFydEJydXNoID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ2JydXNoJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0QnJ1c2hTZWxlY3RlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdicnVzaHNlbGVjdGVkJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0UmVuZGVyZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgncmVuZGVyZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRGaW5pc2hlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdmaW5pc2hlZCcpO1xyXG5cclxuICBwcml2YXRlIGNoYXJ0OiBFQ2hhcnRzO1xyXG4gIHByaXZhdGUgY3VycmVudE9mZnNldFdpZHRoID0gMDtcclxuICBwcml2YXRlIGN1cnJlbnRPZmZzZXRIZWlnaHQgPSAwO1xyXG4gIHByaXZhdGUgY3VycmVudFdpbmRvd1dpZHRoOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSByZXNpemVTdWI6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZiwgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSkgeyB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGNvbnN0IGZpbHRlciA9IENoYW5nZUZpbHRlci5vZihjaGFuZ2VzKTtcclxuICAgIGZpbHRlci5ub3RGaXJzdEFuZEVtcHR5PGFueT4oJ29wdGlvbnMnKS5zdWJzY3JpYmUob3B0ID0+IHRoaXMub25PcHRpb25zQ2hhbmdlKG9wdCkpO1xyXG4gICAgZmlsdGVyLm5vdEZpcnN0QW5kRW1wdHk8YW55PignbWVyZ2UnKS5zdWJzY3JpYmUob3B0ID0+IHRoaXMuc2V0T3B0aW9uKG9wdCkpO1xyXG4gICAgZmlsdGVyLmhhczxib29sZWFuPignbG9hZGluZycpLnN1YnNjcmliZSh2ID0+IHRoaXMudG9nZ2xlTG9hZGluZyghIXYpKTtcclxuICAgIGZpbHRlci5ub3RGaXJzdDxzdHJpbmc+KCd0aGVtZScpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlZnJlc2hDaGFydCgpKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5yZXNpemVTdWIgPSBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJykucGlwZShkZWJvdW5jZVRpbWUoNTApKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5hdXRvUmVzaXplICYmIHdpbmRvdy5pbm5lcldpZHRoICE9PSB0aGlzLmN1cnJlbnRXaW5kb3dXaWR0aCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50T2Zmc2V0V2lkdGggPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50T2Zmc2V0SGVpZ2h0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5yZXNpemVTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdEb0NoZWNrKCkge1xyXG4gICAgLy8gTm8gaGVhdnkgd29yayBpbiBEb0NoZWNrIVxyXG4gICAgaWYgKHRoaXMuY2hhcnQgJiYgdGhpcy5hdXRvUmVzaXplKSB7XHJcbiAgICAgIGNvbnN0IG9mZnNldFdpZHRoID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgICBjb25zdCBvZmZzZXRIZWlnaHQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG5cclxuICAgICAgaWYgKHRoaXMuY3VycmVudE9mZnNldFdpZHRoICE9PSBvZmZzZXRXaWR0aCB8fCB0aGlzLmN1cnJlbnRPZmZzZXRIZWlnaHQgIT09IG9mZnNldEhlaWdodCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudE9mZnNldFdpZHRoID0gb2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50T2Zmc2V0SGVpZ2h0ID0gb2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgIHRoaXMucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5pbml0Q2hhcnQoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpc3Bvc2UoKSB7XHJcbiAgICBpZiAodGhpcy5jaGFydCkge1xyXG4gICAgICB0aGlzLmNoYXJ0LmRpc3Bvc2UoKTtcclxuICAgICAgdGhpcy5jaGFydCA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2l6ZSgpIHtcclxuICAgIGlmICh0aGlzLmNoYXJ0KSB7XHJcbiAgICAgIHRoaXMuY2hhcnQucmVzaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRvZ2dsZUxvYWRpbmcobG9hZGluZzogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuY2hhcnQpIHtcclxuICAgICAgbG9hZGluZyA/IHRoaXMuY2hhcnQuc2hvd0xvYWRpbmcodGhpcy5sb2FkaW5nVHlwZSwgdGhpcy5sb2FkaW5nT3B0cykgOiB0aGlzLmNoYXJ0LmhpZGVMb2FkaW5nKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldE9wdGlvbihvcHRpb246IGFueSwgb3B0cz86IGFueSkge1xyXG4gICAgaWYgKHRoaXMuY2hhcnQpIHtcclxuICAgICAgdGhpcy5jaGFydC5zZXRPcHRpb24ob3B0aW9uLCBvcHRzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVmcmVzaENoYXJ0KCkge1xyXG4gICAgdGhpcy5kaXNwb3NlKCk7XHJcbiAgICB0aGlzLmluaXRDaGFydCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVDaGFydCgpIHtcclxuICAgIHRoaXMuY3VycmVudFdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICB0aGlzLmN1cnJlbnRPZmZzZXRXaWR0aCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcclxuICAgIHRoaXMuY3VycmVudE9mZnNldEhlaWdodCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICBjb25zdCBkb20gPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgaWYgKHdpbmRvdyAmJiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSkge1xyXG4gICAgICBjb25zdCBwcm9wID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9tLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdoZWlnaHQnKTtcclxuICAgICAgaWYgKCghcHJvcCB8fCBwcm9wID09PSAnMHB4JykgJiZcclxuICAgICAgICAoIWRvbS5zdHlsZS5oZWlnaHQgfHwgZG9tLnN0eWxlLmhlaWdodCA9PT0gJzBweCcpKSB7XHJcbiAgICAgICAgZG9tLnN0eWxlLmhlaWdodCA9ICc0MDBweCc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gaW5pdChkb20sIHRoaXMudGhlbWUsIHRoaXMuaW5pdE9wdHMpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENoYXJ0KCkge1xyXG4gICAgdGhpcy5vbk9wdGlvbnNDaGFuZ2UodGhpcy5vcHRpb25zKTtcclxuXHJcbiAgICBpZiAodGhpcy5tZXJnZSAmJiB0aGlzLmNoYXJ0KSB7XHJcbiAgICAgIHRoaXMuc2V0T3B0aW9uKHRoaXMubWVyZ2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbk9wdGlvbnNDaGFuZ2Uob3B0OiBFQ2hhcnRPcHRpb24pIHtcclxuICAgIGlmIChvcHQpIHtcclxuICAgICAgaWYgKCF0aGlzLmNoYXJ0KSB7XHJcbiAgICAgICAgdGhpcy5jaGFydCA9IHRoaXMuY3JlYXRlQ2hhcnQoKTtcclxuICAgICAgICB0aGlzLmNoYXJ0SW5pdC5lbWl0KHRoaXMuY2hhcnQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNoYXJ0LnNldE9wdGlvbih0aGlzLm9wdGlvbnMsIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gYWxsb3dzIHRvIGxhemlseSBiaW5kIHRvIG9ubHkgdGhvc2UgZXZlbnRzIHRoYXQgYXJlIHJlcXVlc3RlZCB0aHJvdWdoIHRoZSBgQE91dHB1dGAgYnkgcGFyZW50IGNvbXBvbmVudHNcclxuICAvLyBzZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTE3ODc5NzIvb3B0aW1hbC1yZWVudGVyaW5nLXRoZS1uZ3pvbmUtZnJvbS1ldmVudGVtaXR0ZXItZXZlbnQgZm9yIG1vcmUgaW5mb1xyXG4gIHByaXZhdGUgY3JlYXRlTGF6eUV2ZW50PFQ+KGV2ZW50TmFtZTogc3RyaW5nKTogRXZlbnRFbWl0dGVyPFQ+IHtcclxuICAgIHJldHVybiB0aGlzLmNoYXJ0SW5pdC5waXBlKFxyXG4gICAgICBzd2l0Y2hNYXAoKGNoYXJ0OiBFQ2hhcnRzKSA9PiBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XHJcbiAgICAgICAgY2hhcnQub24oZXZlbnROYW1lLCAoZGF0YTogVCkgPT4gdGhpcy5uZ1pvbmUucnVuKCgpID0+IG9ic2VydmVyLm5leHQoZGF0YSkpKTtcclxuICAgICAgICByZXR1cm4gbnVsbDsgLy8gbm8gbmVlZCB0byByZWFjdCBvbiB1bnN1YnNjcmliZSBhcyBsb25nIGFzIHRoZSBgZGlzcG9zZSgpYCBpcyBjYWxsZWQgaW4gbmdPbkRlc3Ryb3lcclxuICAgICAgfSkpXHJcbiAgICApIGFzIEV2ZW50RW1pdHRlcjxUPjtcclxuICB9XHJcblxyXG59XHJcbiJdfQ== |
@@ -1,5 +0,5 @@ | ||
import { of, empty, Subject } from 'rxjs'; | ||
import { Directive, ElementRef, Input, Output, HostListener, EventEmitter, NgZone, NgModule } from '@angular/core'; | ||
import { debounceTime } from 'rxjs/operators'; | ||
import { of, empty, fromEvent, Observable } from 'rxjs'; | ||
import { Directive, ElementRef, EventEmitter, Input, NgZone, Output, NgModule } from '@angular/core'; | ||
import { init } from 'echarts'; | ||
import { debounceTime, switchMap } from 'rxjs/operators'; | ||
@@ -86,102 +86,55 @@ /** | ||
*/ | ||
class EChartEvents { | ||
} | ||
EChartEvents.Click = 'click'; | ||
EChartEvents.DblClick = 'dblclick'; | ||
EChartEvents.MouseDown = 'mousedown'; | ||
EChartEvents.MouseUp = 'mouseup'; | ||
EChartEvents.MouseOver = 'mouseover'; | ||
EChartEvents.MouseOut = 'mouseout'; | ||
EChartEvents.GlobalOut = 'globalout'; | ||
EChartEvents.ContextMenu = 'contextmenu'; | ||
EChartEvents.DataZoom = 'datazoom'; | ||
EChartEvents.MapSelectChanged = 'mapselectchanged'; | ||
EChartEvents.MapSelected = 'mapselected'; | ||
EChartEvents.MapUnselected = 'mapunselected'; | ||
EChartEvents.All = [ | ||
EChartEvents.Click, | ||
EChartEvents.DblClick, | ||
EChartEvents.MouseDown, | ||
EChartEvents.MouseUp, | ||
EChartEvents.MouseOver, | ||
EChartEvents.MouseOut, | ||
EChartEvents.GlobalOut, | ||
EChartEvents.ContextMenu, | ||
EChartEvents.DataZoom, | ||
EChartEvents.MapSelectChanged, | ||
EChartEvents.MapSelected, | ||
EChartEvents.MapUnselected, | ||
]; | ||
/** | ||
* @fileoverview added by tsickle | ||
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc | ||
*/ | ||
class NgxEchartsDirective { | ||
/** | ||
* @param {?} el | ||
* @param {?} _ngZone | ||
* @param {?} ngZone | ||
*/ | ||
constructor(el, _ngZone) { | ||
constructor(el, ngZone) { | ||
this.el = el; | ||
this._ngZone = _ngZone; | ||
this.ngZone = ngZone; | ||
this.autoResize = true; | ||
this.loadingType = 'default'; | ||
/** | ||
* Whether to register event handlers on echartInstance. Default is true. | ||
* Use it to avoid unwanted change detection, if you want to optimize the performance. | ||
*/ | ||
this.detectEventChanges = true; | ||
// chart events: | ||
this.detectEventChanges = true; // deprecated, left for compatibility reasons to avoid triggering major version | ||
// deprecated, left for compatibility reasons to avoid triggering major version | ||
// ngx-echarts events | ||
this.chartInit = new EventEmitter(); | ||
this.chartClick = new EventEmitter(); | ||
this.chartDblClick = new EventEmitter(); | ||
this.chartMouseDown = new EventEmitter(); | ||
this.chartMouseUp = new EventEmitter(); | ||
this.chartMouseOver = new EventEmitter(); | ||
this.chartMouseOut = new EventEmitter(); | ||
this.chartGlobalOut = new EventEmitter(); | ||
this.chartContextMenu = new EventEmitter(); | ||
this.chartDataZoom = new EventEmitter(); | ||
this.chartMapSelectChanged = new EventEmitter(); | ||
this.chartMapSelected = new EventEmitter(); | ||
this.chartMapUnselected = new EventEmitter(); | ||
// echarts mouse events | ||
this.chartClick = this.createLazyEvent('click'); | ||
this.chartDblClick = this.createLazyEvent('dblclick'); | ||
this.chartMouseDown = this.createLazyEvent('mousedown'); | ||
this.chartMouseMove = this.createLazyEvent('mousemove'); | ||
this.chartMouseUp = this.createLazyEvent('mouseup'); | ||
this.chartMouseOver = this.createLazyEvent('mouseover'); | ||
this.chartMouseOut = this.createLazyEvent('mouseout'); | ||
this.chartGlobalOut = this.createLazyEvent('globalout'); | ||
this.chartContextMenu = this.createLazyEvent('contextmenu'); | ||
// echarts mouse events | ||
this.chartLegendSelectChanged = this.createLazyEvent('legendselectchanged'); | ||
this.chartLegendSelected = this.createLazyEvent('legendselected'); | ||
this.chartLegendUnselected = this.createLazyEvent('legendunselected'); | ||
this.chartLegendScroll = this.createLazyEvent('legendscroll'); | ||
this.chartDataZoom = this.createLazyEvent('datazoom'); | ||
this.chartDataRangeSelected = this.createLazyEvent('datarangeselected'); | ||
this.chartTimelineChanged = this.createLazyEvent('timelinechanged'); | ||
this.chartTimelinePlayChanged = this.createLazyEvent('timelineplaychanged'); | ||
this.chartRestore = this.createLazyEvent('restore'); | ||
this.chartDataViewChanged = this.createLazyEvent('dataviewchanged'); | ||
this.chartMagicTypeChanged = this.createLazyEvent('magictypechanged'); | ||
this.chartPieSelectChanged = this.createLazyEvent('pieselectchanged'); | ||
this.chartPieSelected = this.createLazyEvent('pieselected'); | ||
this.chartPieUnselected = this.createLazyEvent('pieunselected'); | ||
this.chartMapSelectChanged = this.createLazyEvent('mapselectchanged'); | ||
this.chartMapSelected = this.createLazyEvent('mapselected'); | ||
this.chartMapUnselected = this.createLazyEvent('mapunselected'); | ||
this.chartAxisAreaSelected = this.createLazyEvent('axisareaselected'); | ||
this.chartFocusNodeAdjacency = this.createLazyEvent('focusnodeadjacency'); | ||
this.chartUnfocusNodeAdjacency = this.createLazyEvent('unfocusnodeadjacency'); | ||
this.chartBrush = this.createLazyEvent('brush'); | ||
this.chartBrushSelected = this.createLazyEvent('brushselected'); | ||
this.chartRendered = this.createLazyEvent('rendered'); | ||
this.chartFinished = this.createLazyEvent('finished'); | ||
this.currentOffsetWidth = 0; | ||
this.currentOffsetHeight = 0; | ||
this._resize$ = new Subject(); | ||
} | ||
/** | ||
* @return {?} | ||
*/ | ||
createChart() { | ||
this.currentWindowWidth = window.innerWidth; | ||
this.currentOffsetWidth = this.el.nativeElement.offsetWidth; | ||
this.currentOffsetHeight = this.el.nativeElement.offsetHeight; | ||
/** @type {?} */ | ||
const dom = this.el.nativeElement; | ||
if (window && window.getComputedStyle) { | ||
/** @type {?} */ | ||
const prop = window.getComputedStyle(dom, null).getPropertyValue('height'); | ||
if ((!prop || prop === '0px') && | ||
(!dom.style.height || dom.style.height === '0px')) { | ||
dom.style.height = '400px'; | ||
} | ||
} | ||
return this._ngZone.runOutsideAngular(() => init(dom, this.theme || undefined, this.initOpts || undefined)); | ||
} | ||
/** | ||
* @param {?} event | ||
* @return {?} | ||
*/ | ||
onWindowResize(event) { | ||
/** @type {?} */ | ||
const target = (/** @type {?} */ (event.target)); | ||
if (this.autoResize && target.innerWidth !== this.currentWindowWidth) { | ||
this.currentWindowWidth = target.innerWidth; | ||
this.currentOffsetWidth = this.el.nativeElement.offsetWidth; | ||
this.currentOffsetHeight = this.el.nativeElement.offsetHeight; | ||
this._resize$.next(); | ||
} | ||
} | ||
/** | ||
* @param {?} changes | ||
@@ -196,3 +149,2 @@ * @return {?} | ||
filter.has('loading').subscribe(v => this.toggleLoading(!!v)); | ||
filter.notFirst('detectEventChanges').subscribe(v => this.toggleEventDetectors(!!v)); | ||
filter.notFirst('theme').subscribe(() => this.refreshChart()); | ||
@@ -203,11 +155,18 @@ } | ||
*/ | ||
ngOnInit() { | ||
this.resizeSub = fromEvent(window, 'resize').pipe(debounceTime(50)).subscribe(() => { | ||
if (this.autoResize && window.innerWidth !== this.currentWindowWidth) { | ||
this.currentWindowWidth = window.innerWidth; | ||
this.currentOffsetWidth = this.el.nativeElement.offsetWidth; | ||
this.currentOffsetHeight = this.el.nativeElement.offsetHeight; | ||
this.resize(); | ||
} | ||
}); | ||
} | ||
/** | ||
* @return {?} | ||
*/ | ||
ngOnDestroy() { | ||
if (this._resizeSub) { | ||
this._resizeSub.unsubscribe(); | ||
this._resizeSub = null; | ||
} | ||
if (this._chart) { | ||
this._chart.dispose(); | ||
this._chart = null; | ||
} | ||
this.resizeSub.unsubscribe(); | ||
this.dispose(); | ||
} | ||
@@ -219,3 +178,3 @@ /** | ||
// No heavy work in DoCheck! | ||
if (this._chart && this.autoResize) { | ||
if (this.chart && this.autoResize) { | ||
/** @type {?} */ | ||
@@ -228,3 +187,3 @@ const offsetWidth = this.el.nativeElement.offsetWidth; | ||
this.currentOffsetHeight = offsetHeight; | ||
this._resize$.next(); | ||
this.resize(); | ||
} | ||
@@ -242,54 +201,33 @@ } | ||
*/ | ||
initChart() { | ||
this.onOptionsChange(this.options); | ||
if (this.merge && this._chart) { | ||
this.setOption(this.merge); | ||
dispose() { | ||
if (this.chart) { | ||
this.chart.dispose(); | ||
this.chart = null; | ||
} | ||
} | ||
/** | ||
* @param {?} opt | ||
* @return {?} | ||
*/ | ||
onOptionsChange(opt) { | ||
if (opt) { | ||
if (!this._chart) { | ||
this._chart = this.createChart(); | ||
// subscribe to _resize$ and debounced | ||
this._resizeSub = this._resize$.pipe(debounceTime(50)).subscribe(() => { | ||
if (this._chart) { | ||
this._chart.resize(); | ||
} | ||
}); | ||
// output echart instance: | ||
this.chartInit.emit(this._chart); | ||
// register events: | ||
if (this.detectEventChanges) { | ||
this.registerEvents(); | ||
} | ||
} | ||
this._chart.setOption(this.options, true); | ||
resize() { | ||
if (this.chart) { | ||
this.chart.resize(); | ||
} | ||
} | ||
/** | ||
* @param {?} loading | ||
* @return {?} | ||
*/ | ||
registerEvents() { | ||
if (this._chart) { | ||
/** @type {?} */ | ||
const events = EChartEvents.All; | ||
for (let i = 0, len = events.length; i < len; i++) { | ||
this._chart.on(events[i], this.eventHandler, this); | ||
} | ||
toggleLoading(loading) { | ||
if (this.chart) { | ||
loading ? this.chart.showLoading(this.loadingType, this.loadingOpts) : this.chart.hideLoading(); | ||
} | ||
} | ||
/** | ||
* @param {?} option | ||
* @param {?=} opts | ||
* @return {?} | ||
*/ | ||
unregisterEvents() { | ||
if (this._chart) { | ||
/** @type {?} */ | ||
const events = EChartEvents.All; | ||
for (let i = 0, len = events.length; i < len; i++) { | ||
this._chart.off(events[i], this.eventHandler); | ||
} | ||
setOption(option, opts) { | ||
if (this.chart) { | ||
this.chart.setOption(option, opts); | ||
} | ||
@@ -300,86 +238,60 @@ } | ||
*/ | ||
clear() { | ||
if (this._chart) { | ||
this._chart.clear(); | ||
} | ||
refreshChart() { | ||
this.dispose(); | ||
this.initChart(); | ||
} | ||
/** | ||
* @param {?} loading | ||
* @return {?} | ||
*/ | ||
toggleLoading(loading) { | ||
if (this._chart) { | ||
loading ? this._chart.showLoading(this.loadingType, this.loadingOpts) : this._chart.hideLoading(); | ||
createChart() { | ||
this.currentWindowWidth = window.innerWidth; | ||
this.currentOffsetWidth = this.el.nativeElement.offsetWidth; | ||
this.currentOffsetHeight = this.el.nativeElement.offsetHeight; | ||
/** @type {?} */ | ||
const dom = this.el.nativeElement; | ||
if (window && window.getComputedStyle) { | ||
/** @type {?} */ | ||
const prop = window.getComputedStyle(dom, null).getPropertyValue('height'); | ||
if ((!prop || prop === '0px') && | ||
(!dom.style.height || dom.style.height === '0px')) { | ||
dom.style.height = '400px'; | ||
} | ||
} | ||
return this.ngZone.runOutsideAngular(() => init(dom, this.theme, this.initOpts)); | ||
} | ||
/** | ||
* @param {?} option | ||
* @param {?=} opts | ||
* @return {?} | ||
*/ | ||
setOption(option, opts) { | ||
if (this._chart) { | ||
this._chart.setOption(option, opts); | ||
initChart() { | ||
this.onOptionsChange(this.options); | ||
if (this.merge && this.chart) { | ||
this.setOption(this.merge); | ||
} | ||
} | ||
/** | ||
* @param {?} event | ||
* @param {?} opt | ||
* @return {?} | ||
*/ | ||
eventHandler(event) { | ||
switch (event.type) { | ||
case EChartEvents.Click: | ||
this._ngZone.run(() => this.chartClick.emit(event)); | ||
break; | ||
case EChartEvents.DblClick: | ||
this._ngZone.run(() => this.chartDblClick.emit(event)); | ||
break; | ||
case EChartEvents.MouseDown: | ||
this._ngZone.run(() => this.chartMouseDown.emit(event)); | ||
break; | ||
case EChartEvents.MouseUp: | ||
this._ngZone.run(() => this.chartMouseUp.emit(event)); | ||
break; | ||
case EChartEvents.MouseOver: | ||
this._ngZone.run(() => this.chartMouseOver.emit(event)); | ||
break; | ||
case EChartEvents.MouseOut: | ||
this._ngZone.run(() => this.chartMouseOut.emit(event)); | ||
break; | ||
case EChartEvents.GlobalOut: | ||
this._ngZone.run(() => this.chartGlobalOut.emit(event)); | ||
break; | ||
case EChartEvents.ContextMenu: | ||
this._ngZone.run(() => this.chartContextMenu.emit(event)); | ||
break; | ||
case EChartEvents.DataZoom: | ||
this._ngZone.run(() => this.chartDataZoom.emit(event)); | ||
break; | ||
case EChartEvents.MapSelectChanged: | ||
this._ngZone.run(() => this.chartMapSelectChanged.emit(event)); | ||
break; | ||
case EChartEvents.MapSelected: | ||
this._ngZone.run(() => this.chartMapSelected.emit(event)); | ||
break; | ||
case EChartEvents.MapUnselected: | ||
this._ngZone.run(() => this.chartMapUnselected.emit(event)); | ||
break; | ||
onOptionsChange(opt) { | ||
if (opt) { | ||
if (!this.chart) { | ||
this.chart = this.createChart(); | ||
this.chartInit.emit(this.chart); | ||
} | ||
this.chart.setOption(this.options, true); | ||
} | ||
} | ||
// allows to lazily bind to only those events that are requested through the `@Output` by parent components | ||
// see https://stackoverflow.com/questions/51787972/optimal-reentering-the-ngzone-from-eventemitter-event for more info | ||
/** | ||
* @param {?} detect | ||
* @template T | ||
* @param {?} eventName | ||
* @return {?} | ||
*/ | ||
toggleEventDetectors(detect) { | ||
if (this._chart) { | ||
detect ? this.registerEvents() : this.unregisterEvents(); | ||
} | ||
createLazyEvent(eventName) { | ||
return (/** @type {?} */ (this.chartInit.pipe(switchMap((chart) => new Observable(observer => { | ||
chart.on(eventName, (data) => this.ngZone.run(() => observer.next(data))); | ||
return null; // no need to react on unsubscribe as long as the `dispose()` is called in ngOnDestroy | ||
}))))); | ||
} | ||
/** | ||
* @return {?} | ||
*/ | ||
refreshChart() { | ||
this.ngOnDestroy(); | ||
this.initChart(); | ||
} | ||
} | ||
@@ -410,2 +322,3 @@ NgxEchartsDirective.decorators = [ | ||
chartMouseDown: [{ type: Output }], | ||
chartMouseMove: [{ type: Output }], | ||
chartMouseUp: [{ type: Output }], | ||
@@ -416,7 +329,26 @@ chartMouseOver: [{ type: Output }], | ||
chartContextMenu: [{ type: Output }], | ||
chartLegendSelectChanged: [{ type: Output }], | ||
chartLegendSelected: [{ type: Output }], | ||
chartLegendUnselected: [{ type: Output }], | ||
chartLegendScroll: [{ type: Output }], | ||
chartDataZoom: [{ type: Output }], | ||
chartDataRangeSelected: [{ type: Output }], | ||
chartTimelineChanged: [{ type: Output }], | ||
chartTimelinePlayChanged: [{ type: Output }], | ||
chartRestore: [{ type: Output }], | ||
chartDataViewChanged: [{ type: Output }], | ||
chartMagicTypeChanged: [{ type: Output }], | ||
chartPieSelectChanged: [{ type: Output }], | ||
chartPieSelected: [{ type: Output }], | ||
chartPieUnselected: [{ type: Output }], | ||
chartMapSelectChanged: [{ type: Output }], | ||
chartMapSelected: [{ type: Output }], | ||
chartMapUnselected: [{ type: Output }], | ||
onWindowResize: [{ type: HostListener, args: ['window:resize', ['$event'],] }] | ||
chartAxisAreaSelected: [{ type: Output }], | ||
chartFocusNodeAdjacency: [{ type: Output }], | ||
chartUnfocusNodeAdjacency: [{ type: Output }], | ||
chartBrush: [{ type: Output }], | ||
chartBrushSelected: [{ type: Output }], | ||
chartRendered: [{ type: Output }], | ||
chartFinished: [{ type: Output }] | ||
}; | ||
@@ -454,2 +386,2 @@ | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWVjaGFydHMuanMubWFwIiwic291cmNlcyI6WyJuZzovL25neC1lY2hhcnRzL2xpYi9jaGFuZ2UtZmlsdGVyLnRzIiwibmc6Ly9uZ3gtZWNoYXJ0cy9saWIvZWNoYXJ0LWV2ZW50cy50cyIsIm5nOi8vbmd4LWVjaGFydHMvbGliL25neC1lY2hhcnRzLmRpcmVjdGl2ZS50cyIsIm5nOi8vbmd4LWVjaGFydHMvbGliL25neC1lY2hhcnRzLm1vZHVsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBlbXB0eSB9IGZyb20gJ3J4anMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENoYW5nZUZpbHRlciB7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfY2hhbmdlczogU2ltcGxlQ2hhbmdlcykgeyB9XHJcblxyXG4gIHN0YXRpYyBvZihjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICByZXR1cm4gbmV3IENoYW5nZUZpbHRlcihjaGFuZ2VzKTtcclxuICB9XHJcblxyXG4gIG5vdEVtcHR5PFQ+KGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICBpZiAodGhpcy5fY2hhbmdlc1trZXldKSB7XHJcbiAgICAgIGNvbnN0IHZhbHVlOiBUID0gdGhpcy5fY2hhbmdlc1trZXldLmN1cnJlbnRWYWx1ZTtcclxuXHJcbiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIG9mKHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVtcHR5KCk7XHJcbiAgfVxyXG5cclxuICBoYXM8VD4oa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIGlmICh0aGlzLl9jaGFuZ2VzW2tleV0pIHtcclxuICAgICAgY29uc3QgdmFsdWU6IFQgPSB0aGlzLl9jaGFuZ2VzW2tleV0uY3VycmVudFZhbHVlO1xyXG4gICAgICByZXR1cm4gb2YodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVtcHR5KCk7XHJcbiAgfVxyXG5cclxuICBub3RGaXJzdDxUPihrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgaWYgKHRoaXMuX2NoYW5nZXNba2V5XSAmJiAhdGhpcy5fY2hhbmdlc1trZXldLmlzRmlyc3RDaGFuZ2UoKSkge1xyXG4gICAgICBjb25zdCB2YWx1ZTogVCA9IHRoaXMuX2NoYW5nZXNba2V5XS5jdXJyZW50VmFsdWU7XHJcbiAgICAgIHJldHVybiBvZih2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIG5vdEZpcnN0QW5kRW1wdHk8VD4oa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIGlmICh0aGlzLl9jaGFuZ2VzW2tleV0gJiYgIXRoaXMuX2NoYW5nZXNba2V5XS5pc0ZpcnN0Q2hhbmdlKCkpIHtcclxuICAgICAgY29uc3QgdmFsdWU6IFQgPSB0aGlzLl9jaGFuZ2VzW2tleV0uY3VycmVudFZhbHVlO1xyXG5cclxuICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gb2YodmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZW1wdHkoKTtcclxuICB9XHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIEVDaGFydEV2ZW50cyB7XHJcbiAgc3RhdGljIENsaWNrID0gJ2NsaWNrJztcclxuICBzdGF0aWMgRGJsQ2xpY2sgPSAnZGJsY2xpY2snO1xyXG4gIHN0YXRpYyBNb3VzZURvd24gPSAnbW91c2Vkb3duJztcclxuICBzdGF0aWMgTW91c2VVcCA9ICdtb3VzZXVwJztcclxuICBzdGF0aWMgTW91c2VPdmVyID0gJ21vdXNlb3Zlcic7XHJcbiAgc3RhdGljIE1vdXNlT3V0ID0gJ21vdXNlb3V0JztcclxuICBzdGF0aWMgR2xvYmFsT3V0ID0gJ2dsb2JhbG91dCc7XHJcbiAgc3RhdGljIENvbnRleHRNZW51ID0gJ2NvbnRleHRtZW51JztcclxuICBzdGF0aWMgRGF0YVpvb20gPSAnZGF0YXpvb20nO1xyXG4gIHN0YXRpYyBNYXBTZWxlY3RDaGFuZ2VkID0gJ21hcHNlbGVjdGNoYW5nZWQnO1xyXG4gIHN0YXRpYyBNYXBTZWxlY3RlZCA9ICdtYXBzZWxlY3RlZCc7XHJcbiAgc3RhdGljIE1hcFVuc2VsZWN0ZWQgPSAnbWFwdW5zZWxlY3RlZCc7XHJcblxyXG4gIHN0YXRpYyBBbGwgPSBbXHJcbiAgICBFQ2hhcnRFdmVudHMuQ2xpY2ssXHJcbiAgICBFQ2hhcnRFdmVudHMuRGJsQ2xpY2ssXHJcbiAgICBFQ2hhcnRFdmVudHMuTW91c2VEb3duLFxyXG4gICAgRUNoYXJ0RXZlbnRzLk1vdXNlVXAsXHJcbiAgICBFQ2hhcnRFdmVudHMuTW91c2VPdmVyLFxyXG4gICAgRUNoYXJ0RXZlbnRzLk1vdXNlT3V0LFxyXG4gICAgRUNoYXJ0RXZlbnRzLkdsb2JhbE91dCxcclxuICAgIEVDaGFydEV2ZW50cy5Db250ZXh0TWVudSxcclxuICAgIEVDaGFydEV2ZW50cy5EYXRhWm9vbSxcclxuICAgIEVDaGFydEV2ZW50cy5NYXBTZWxlY3RDaGFuZ2VkLFxyXG4gICAgRUNoYXJ0RXZlbnRzLk1hcFNlbGVjdGVkLFxyXG4gICAgRUNoYXJ0RXZlbnRzLk1hcFVuc2VsZWN0ZWQsXHJcbiAgXTtcclxufVxyXG4iLCJpbXBvcnQge1xyXG4gIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgUmVuZGVyZXIsIElucHV0LCBPdXRwdXQsIEhvc3RMaXN0ZW5lciwgRXZlbnRFbWl0dGVyLFxyXG4gIE9uQ2hhbmdlcywgT25EZXN0cm95LCBTaW1wbGVDaGFuZ2VzLCBOZ1pvbmUsIERvQ2hlY2ssIEFmdGVyVmlld0luaXRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2hhbmdlRmlsdGVyIH0gZnJvbSAnLi9jaGFuZ2UtZmlsdGVyJztcclxuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgaW5pdCwgRUNoYXJ0cywgRUNoYXJ0T3B0aW9uIH0gZnJvbSAnZWNoYXJ0cyc7XHJcbmltcG9ydCB7IEVDaGFydEV2ZW50cyB9IGZyb20gJy4vZWNoYXJ0LWV2ZW50cyc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ2VjaGFydHMsIFtlY2hhcnRzXScsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hFY2hhcnRzRGlyZWN0aXZlIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIERvQ2hlY2ssIEFmdGVyVmlld0luaXQge1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IEVDaGFydE9wdGlvbjtcclxuICBASW5wdXQoKSB0aGVtZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaW5pdE9wdHM6IHtcclxuICAgIGRldmljZVBpeGVsUmF0aW8/OiBudW1iZXJcclxuICAgIHJlbmRlcmVyPzogc3RyaW5nXHJcbiAgICB3aWR0aD86IG51bWJlciB8IHN0cmluZ1xyXG4gICAgaGVpZ2h0PzogbnVtYmVyIHwgc3RyaW5nXHJcbiAgfTtcclxuICBASW5wdXQoKSBtZXJnZTogRUNoYXJ0T3B0aW9uO1xyXG4gIEBJbnB1dCgpIGF1dG9SZXNpemUgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGxvYWRpbmdUeXBlID0gJ2RlZmF1bHQnO1xyXG4gIEBJbnB1dCgpIGxvYWRpbmdPcHRzOiBvYmplY3Q7XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdG8gcmVnaXN0ZXIgZXZlbnQgaGFuZGxlcnMgb24gZWNoYXJ0SW5zdGFuY2UuIERlZmF1bHQgaXMgdHJ1ZS5cclxuICAgKiBVc2UgaXQgdG8gYXZvaWQgdW53YW50ZWQgY2hhbmdlIGRldGVjdGlvbiwgaWYgeW91IHdhbnQgdG8gb3B0aW1pemUgdGhlIHBlcmZvcm1hbmNlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGRldGVjdEV2ZW50Q2hhbmdlcyA9IHRydWU7XHJcblxyXG4gIC8vIGNoYXJ0IGV2ZW50czpcclxuICBAT3V0cHV0KCkgY2hhcnRJbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxFQ2hhcnRzPigpO1xyXG4gIEBPdXRwdXQoKSBjaGFydENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0RGJsQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgY2hhcnRNb3VzZURvd24gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgY2hhcnRNb3VzZVVwID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TW91c2VPdmVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TW91c2VPdXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgY2hhcnRHbG9iYWxPdXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgY2hhcnRDb250ZXh0TWVudSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBjaGFydERhdGFab29tID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TWFwU2VsZWN0Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBjaGFydE1hcFNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TWFwVW5zZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBwcml2YXRlIF9jaGFydDogRUNoYXJ0cztcclxuICBwcml2YXRlIGN1cnJlbnRPZmZzZXRXaWR0aCA9IDA7XHJcbiAgcHJpdmF0ZSBjdXJyZW50T2Zmc2V0SGVpZ2h0ID0gMDtcclxuICBwcml2YXRlIGN1cnJlbnRXaW5kb3dXaWR0aDogbnVtYmVyO1xyXG4gIHByaXZhdGUgX3Jlc2l6ZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgX3Jlc2l6ZVN1YjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmLCBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSkgeyB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQ2hhcnQoKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRXaW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xyXG4gICAgdGhpcy5jdXJyZW50T2Zmc2V0V2lkdGggPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XHJcbiAgICB0aGlzLmN1cnJlbnRPZmZzZXRIZWlnaHQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgY29uc3QgZG9tID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgIGlmICh3aW5kb3cgJiYgd2luZG93LmdldENvbXB1dGVkU3R5bGUpIHtcclxuICAgICAgY29uc3QgcHJvcCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnaGVpZ2h0Jyk7XHJcbiAgICAgIGlmICgoIXByb3AgfHwgcHJvcCA9PT0gJzBweCcpICYmXHJcbiAgICAgICAgKCFkb20uc3R5bGUuaGVpZ2h0IHx8IGRvbS5zdHlsZS5oZWlnaHQgPT09ICcwcHgnKSkge1xyXG4gICAgICAgIGRvbS5zdHlsZS5oZWlnaHQgPSAnNDAwcHgnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiBpbml0KGRvbSwgdGhpcy50aGVtZSB8fCB1bmRlZmluZWQsIHRoaXMuaW5pdE9wdHMgfHwgdW5kZWZpbmVkKSk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuICBvbldpbmRvd1Jlc2l6ZShldmVudDogRXZlbnQpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBXaW5kb3c7XHJcblxyXG4gICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZSAmJiB0YXJnZXQuaW5uZXJXaWR0aCAhPT0gdGhpcy5jdXJyZW50V2luZG93V2lkdGgpIHtcclxuICAgICAgdGhpcy5jdXJyZW50V2luZG93V2lkdGggPSB0YXJnZXQuaW5uZXJXaWR0aDtcclxuICAgICAgdGhpcy5jdXJyZW50T2Zmc2V0V2lkdGggPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XHJcbiAgICAgIHRoaXMuY3VycmVudE9mZnNldEhlaWdodCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLl9yZXNpemUkLm5leHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGNvbnN0IGZpbHRlciA9IENoYW5nZUZpbHRlci5vZihjaGFuZ2VzKTtcclxuICAgIGZpbHRlci5ub3RGaXJzdEFuZEVtcHR5PGFueT4oJ29wdGlvbnMnKS5zdWJzY3JpYmUob3B0ID0+IHRoaXMub25PcHRpb25zQ2hhbmdlKG9wdCkpO1xyXG4gICAgZmlsdGVyLm5vdEZpcnN0QW5kRW1wdHk8YW55PignbWVyZ2UnKS5zdWJzY3JpYmUob3B0ID0+IHRoaXMuc2V0T3B0aW9uKG9wdCkpO1xyXG4gICAgZmlsdGVyLmhhczxib29sZWFuPignbG9hZGluZycpLnN1YnNjcmliZSh2ID0+IHRoaXMudG9nZ2xlTG9hZGluZyghIXYpKTtcclxuICAgIGZpbHRlci5ub3RGaXJzdDxib29sZWFuPignZGV0ZWN0RXZlbnRDaGFuZ2VzJykuc3Vic2NyaWJlKHYgPT4gdGhpcy50b2dnbGVFdmVudERldGVjdG9ycyghIXYpKTtcclxuICAgIGZpbHRlci5ub3RGaXJzdDxzdHJpbmc+KCd0aGVtZScpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlZnJlc2hDaGFydCgpKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuX3Jlc2l6ZVN1Yikge1xyXG4gICAgICB0aGlzLl9yZXNpemVTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgICAgdGhpcy5fcmVzaXplU3ViID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fY2hhcnQpIHtcclxuICAgICAgdGhpcy5fY2hhcnQuZGlzcG9zZSgpO1xyXG4gICAgICB0aGlzLl9jaGFydCA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0RvQ2hlY2soKSB7XHJcbiAgICAvLyBObyBoZWF2eSB3b3JrIGluIERvQ2hlY2shXHJcbiAgICBpZiAodGhpcy5fY2hhcnQgJiYgdGhpcy5hdXRvUmVzaXplKSB7XHJcbiAgICAgIGNvbnN0IG9mZnNldFdpZHRoID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgICBjb25zdCBvZmZzZXRIZWlnaHQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG5cclxuICAgICAgaWYgKHRoaXMuY3VycmVudE9mZnNldFdpZHRoICE9PSBvZmZzZXRXaWR0aCB8fCB0aGlzLmN1cnJlbnRPZmZzZXRIZWlnaHQgIT09IG9mZnNldEhlaWdodCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudE9mZnNldFdpZHRoID0gb2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50T2Zmc2V0SGVpZ2h0ID0gb2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgIHRoaXMuX3Jlc2l6ZSQubmV4dCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaW5pdENoYXJ0KCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0Q2hhcnQoKSB7XHJcbiAgICB0aGlzLm9uT3B0aW9uc0NoYW5nZSh0aGlzLm9wdGlvbnMpO1xyXG5cclxuICAgIGlmICh0aGlzLm1lcmdlICYmIHRoaXMuX2NoYXJ0KSB7XHJcbiAgICAgIHRoaXMuc2V0T3B0aW9uKHRoaXMubWVyZ2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbk9wdGlvbnNDaGFuZ2Uob3B0OiBFQ2hhcnRPcHRpb24pIHtcclxuICAgIGlmIChvcHQpIHtcclxuICAgICAgaWYgKCF0aGlzLl9jaGFydCkge1xyXG4gICAgICAgIHRoaXMuX2NoYXJ0ID0gdGhpcy5jcmVhdGVDaGFydCgpO1xyXG5cclxuICAgICAgICAvLyBzdWJzY3JpYmUgdG8gX3Jlc2l6ZSQgYW5kIGRlYm91bmNlZFxyXG4gICAgICAgIHRoaXMuX3Jlc2l6ZVN1YiA9IHRoaXMuX3Jlc2l6ZSQucGlwZShkZWJvdW5jZVRpbWUoNTApKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2NoYXJ0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoYXJ0LnJlc2l6ZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBvdXRwdXQgZWNoYXJ0IGluc3RhbmNlOlxyXG4gICAgICAgIHRoaXMuY2hhcnRJbml0LmVtaXQodGhpcy5fY2hhcnQpO1xyXG5cclxuICAgICAgICAvLyByZWdpc3RlciBldmVudHM6XHJcbiAgICAgICAgaWYgKHRoaXMuZGV0ZWN0RXZlbnRDaGFuZ2VzKSB7XHJcbiAgICAgICAgICB0aGlzLnJlZ2lzdGVyRXZlbnRzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLl9jaGFydC5zZXRPcHRpb24odGhpcy5vcHRpb25zLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVnaXN0ZXJFdmVudHMoKSB7XHJcbiAgICBpZiAodGhpcy5fY2hhcnQpIHtcclxuICAgICAgY29uc3QgZXZlbnRzID0gRUNoYXJ0RXZlbnRzLkFsbDtcclxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGV2ZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIHRoaXMuX2NoYXJ0Lm9uKGV2ZW50c1tpXSwgdGhpcy5ldmVudEhhbmRsZXIsIHRoaXMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVucmVnaXN0ZXJFdmVudHMoKSB7XHJcbiAgICBpZiAodGhpcy5fY2hhcnQpIHtcclxuICAgICAgY29uc3QgZXZlbnRzID0gRUNoYXJ0RXZlbnRzLkFsbDtcclxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGV2ZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIHRoaXMuX2NoYXJ0Lm9mZihldmVudHNbaV0sIHRoaXMuZXZlbnRIYW5kbGVyKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICBpZiAodGhpcy5fY2hhcnQpIHtcclxuICAgICAgdGhpcy5fY2hhcnQuY2xlYXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZUxvYWRpbmcobG9hZGluZzogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuX2NoYXJ0KSB7XHJcbiAgICAgIGxvYWRpbmcgPyB0aGlzLl9jaGFydC5zaG93TG9hZGluZyh0aGlzLmxvYWRpbmdUeXBlLCB0aGlzLmxvYWRpbmdPcHRzKSA6IHRoaXMuX2NoYXJ0LmhpZGVMb2FkaW5nKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRPcHRpb24ob3B0aW9uOiBhbnksIG9wdHM/OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLl9jaGFydCkge1xyXG4gICAgICB0aGlzLl9jaGFydC5zZXRPcHRpb24ob3B0aW9uLCBvcHRzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZlbnRIYW5kbGVyKGV2ZW50KSB7XHJcbiAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcclxuICAgICAgY2FzZSBFQ2hhcnRFdmVudHMuQ2xpY2s6XHJcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmNoYXJ0Q2xpY2suZW1pdChldmVudCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVDaGFydEV2ZW50cy5EYmxDbGljazpcclxuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMuY2hhcnREYmxDbGljay5lbWl0KGV2ZW50KSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUNoYXJ0RXZlbnRzLk1vdXNlRG93bjpcclxuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMuY2hhcnRNb3VzZURvd24uZW1pdChldmVudCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVDaGFydEV2ZW50cy5Nb3VzZVVwOlxyXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5jaGFydE1vdXNlVXAuZW1pdChldmVudCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVDaGFydEV2ZW50cy5Nb3VzZU92ZXI6XHJcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmNoYXJ0TW91c2VPdmVyLmVtaXQoZXZlbnQpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQ2hhcnRFdmVudHMuTW91c2VPdXQ6XHJcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmNoYXJ0TW91c2VPdXQuZW1pdChldmVudCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVDaGFydEV2ZW50cy5HbG9iYWxPdXQ6XHJcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmNoYXJ0R2xvYmFsT3V0LmVtaXQoZXZlbnQpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQ2hhcnRFdmVudHMuQ29udGV4dE1lbnU6XHJcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmNoYXJ0Q29udGV4dE1lbnUuZW1pdChldmVudCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVDaGFydEV2ZW50cy5EYXRhWm9vbTpcclxuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMuY2hhcnREYXRhWm9vbS5lbWl0KGV2ZW50KSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUNoYXJ0RXZlbnRzLk1hcFNlbGVjdENoYW5nZWQ6XHJcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmNoYXJ0TWFwU2VsZWN0Q2hhbmdlZC5lbWl0KGV2ZW50KSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUNoYXJ0RXZlbnRzLk1hcFNlbGVjdGVkOlxyXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5jaGFydE1hcFNlbGVjdGVkLmVtaXQoZXZlbnQpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQ2hhcnRFdmVudHMuTWFwVW5zZWxlY3RlZDpcclxuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMuY2hhcnRNYXBVbnNlbGVjdGVkLmVtaXQoZXZlbnQpKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdG9nZ2xlRXZlbnREZXRlY3RvcnMoZGV0ZWN0OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fY2hhcnQpIHtcclxuICAgICAgZGV0ZWN0ID8gdGhpcy5yZWdpc3RlckV2ZW50cygpIDogdGhpcy51bnJlZ2lzdGVyRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlZnJlc2hDaGFydCgpIHtcclxuICAgIHRoaXMubmdPbkRlc3Ryb3koKTtcclxuICAgIHRoaXMuaW5pdENoYXJ0KCk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5neEVjaGFydHNEaXJlY3RpdmUgfSBmcm9tICcuL25neC1lY2hhcnRzLmRpcmVjdGl2ZSc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGltcG9ydHM6IFtdLFxyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgTmd4RWNoYXJ0c0RpcmVjdGl2ZVxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgTmd4RWNoYXJ0c0RpcmVjdGl2ZVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE5neEVjaGFydHNNb2R1bGUgeyB9XHJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFDQSxNQUVhLFlBQVk7Ozs7SUFDdkIsWUFBb0IsUUFBdUI7UUFBdkIsYUFBUSxHQUFSLFFBQVEsQ0FBZTtLQUFLOzs7OztJQUVoRCxPQUFPLEVBQUUsQ0FBQyxPQUFzQjtRQUM5QixPQUFPLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ2xDOzs7Ozs7SUFFRCxRQUFRLENBQUksR0FBVztRQUNyQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7O2tCQUNoQixLQUFLLEdBQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZO1lBRWhELElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO2dCQUN6QyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNsQjtTQUNGO1FBQ0QsT0FBTyxLQUFLLEVBQUUsQ0FBQztLQUNoQjs7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USxLQUFLLENBQUMsSUFBSTtZQUNoQixLQUFLLFlBQVksQ0FBQyxLQUFLO2dCQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3BELE1BQU07WUFDUixLQUFLLFlBQVksQ0FBQyxRQUFRO2dCQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZELE1BQU07WUFDUixLQUFLLFlBQVksQ0FBQyxTQUFTO2dCQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3hELE1BQU07WUFDUixLQUFLLFlBQVksQ0FBQyxPQUFPO2dCQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELE1BQU07WUFDUixLQUFLLFlBQVksQ0FBQyxTQUFTO2dCQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3hELE1BQU07WUFDUixLQUFLLFlBQVksQ0FBQyxRQUFRO2dCQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZELE1BQU07WUFDUixLQUFLLFlBQVksQ0FBQyxTQUFTO2dCQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3hELE1BQU07WUFDUixLQUFLLFlBQVksQ0FBQyxXQUFXO2dCQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDMUQsTUFBTTtZQUNSLEtBQUssWUFBWSxDQUFDLFFBQVE7Z0JBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDdkQsTUFBTTtZQUNSLEtBQUssWUFBWSxDQUFDLGdCQUFnQjtnQkFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQy9ELE1BQU07WUFDUixLQUFLLFlBQVksQ0FBQyxXQUFXO2dCQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDMUQsTUFBTTtZQUNSLEtBQUssWUFBWSxDQUFDLGFBQWE7Z0JBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUM1RCxNQUFNO1NBQ1Q7S0FDRjs7Ozs7SUFFTyxvQkFBb0IsQ0FBQyxNQUFlO1FBQzFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNmLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDMUQ7S0FDRjs7OztJQUVPLFlBQVk7UUFDbEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztLQUNsQjs7O1lBNU9GLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsb0JBQW9CO2FBQy9COzs7O1lBWFksVUFBVTtZQUNnQixNQUFNOzs7c0JBWTFDLEtBQUs7b0JBQ0wsS0FBSztzQkFDTCxLQUFLO3VCQUNMLEtBQUs7b0JBTUwsS0FBSzt5QkFDTCxLQUFLOzBCQUNMLEtBQUs7MEJBQ0wsS0FBSztpQ0FNTCxLQUFLO3dCQUdMLE1BQU07eUJBQ04sTUFBTTs0QkFDTixNQUFNOzZCQUNOLE1BQU07MkJBQ04sTUFBTTs2QkFDTixNQUFNOzRCQUNOLE1BQU07NkJBQ04sTUFBTTsrQkFDTixNQUFNOzRCQUNOLE1BQU07b0NBQ04sTUFBTTsrQkFDTixNQUFNO2lDQUNOLE1BQU07NkJBNEJOLFlBQVksU0FBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7QUMzRTNDLE1BWWEsZ0JBQWdCOzs7WUFUNUIsUUFBUSxTQUFDO2dCQUNSLE9BQU8sRUFBRSxFQUFFO2dCQUNYLFlBQVksRUFBRTtvQkFDWixtQkFBbUI7aUJBQ3BCO2dCQUNELE9BQU8sRUFBRTtvQkFDUCxtQkFBbUI7aUJBQ3BCO2FBQ0Y7Ozs7Ozs7Ozs7Ozs7OzsifQ== | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWVjaGFydHMuanMubWFwIiwic291cmNlcyI6WyJuZzovL25neC1lY2hhcnRzL2xpYi9jaGFuZ2UtZmlsdGVyLnRzIiwibmc6Ly9uZ3gtZWNoYXJ0cy9saWIvbmd4LWVjaGFydHMuZGlyZWN0aXZlLnRzIiwibmc6Ly9uZ3gtZWNoYXJ0cy9saWIvbmd4LWVjaGFydHMubW9kdWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIGVtcHR5IH0gZnJvbSAncnhqcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hhbmdlRmlsdGVyIHtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7IH1cclxuXHJcbiAgc3RhdGljIG9mKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIHJldHVybiBuZXcgQ2hhbmdlRmlsdGVyKGNoYW5nZXMpO1xyXG4gIH1cclxuXHJcbiAgbm90RW1wdHk8VD4oa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIGlmICh0aGlzLl9jaGFuZ2VzW2tleV0pIHtcclxuICAgICAgY29uc3QgdmFsdWU6IFQgPSB0aGlzLl9jaGFuZ2VzW2tleV0uY3VycmVudFZhbHVlO1xyXG5cclxuICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gb2YodmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIGhhczxUPihrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgaWYgKHRoaXMuX2NoYW5nZXNba2V5XSkge1xyXG4gICAgICBjb25zdCB2YWx1ZTogVCA9IHRoaXMuX2NoYW5nZXNba2V5XS5jdXJyZW50VmFsdWU7XHJcbiAgICAgIHJldHVybiBvZih2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIG5vdEZpcnN0PFQ+KGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICBpZiAodGhpcy5fY2hhbmdlc1trZXldICYmICF0aGlzLl9jaGFuZ2VzW2tleV0uaXNGaXJzdENoYW5nZSgpKSB7XHJcbiAgICAgIGNvbnN0IHZhbHVlOiBUID0gdGhpcy5fY2hhbmdlc1trZXldLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgcmV0dXJuIG9mKHZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBlbXB0eSgpO1xyXG4gIH1cclxuXHJcbiAgbm90Rmlyc3RBbmRFbXB0eTxUPihrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgaWYgKHRoaXMuX2NoYW5nZXNba2V5XSAmJiAhdGhpcy5fY2hhbmdlc1trZXldLmlzRmlyc3RDaGFuZ2UoKSkge1xyXG4gICAgICBjb25zdCB2YWx1ZTogVCA9IHRoaXMuX2NoYW5nZXNba2V5XS5jdXJyZW50VmFsdWU7XHJcblxyXG4gICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBvZih2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBlbXB0eSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIERvQ2hlY2ssIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE5nWm9uZSwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEVDaGFydE9wdGlvbiwgRUNoYXJ0cywgaW5pdCB9IGZyb20gJ2VjaGFydHMnO1xyXG5pbXBvcnQgeyBmcm9tRXZlbnQsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ2hhbmdlRmlsdGVyIH0gZnJvbSAnLi9jaGFuZ2UtZmlsdGVyJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnZWNoYXJ0cywgW2VjaGFydHNdJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5neEVjaGFydHNEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBEb0NoZWNrLCBBZnRlclZpZXdJbml0IHtcclxuICBASW5wdXQoKSBvcHRpb25zOiBFQ2hhcnRPcHRpb247XHJcbiAgQElucHV0KCkgdGhlbWU6IHN0cmluZztcclxuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGluaXRPcHRzOiB7XHJcbiAgICBkZXZpY2VQaXhlbFJhdGlvPzogbnVtYmVyXHJcbiAgICByZW5kZXJlcj86IHN0cmluZ1xyXG4gICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmdcclxuICAgIGhlaWdodD86IG51bWJlciB8IHN0cmluZ1xyXG4gIH07XHJcbiAgQElucHV0KCkgbWVyZ2U6IEVDaGFydE9wdGlvbjtcclxuICBASW5wdXQoKSBhdXRvUmVzaXplID0gdHJ1ZTtcclxuICBASW5wdXQoKSBsb2FkaW5nVHlwZSA9ICdkZWZhdWx0JztcclxuICBASW5wdXQoKSBsb2FkaW5nT3B0czogb2JqZWN0O1xyXG4gIEBJbnB1dCgpIGRldGVjdEV2ZW50Q2hhbmdlcyA9IHRydWU7IC8vIGRlcHJlY2F0ZWQsIGxlZnQgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucyB0byBhdm9pZCB0cmlnZ2VyaW5nIG1ham9yIHZlcnNpb25cclxuXHJcbiAgLy8gbmd4LWVjaGFydHMgZXZlbnRzXHJcbiAgQE91dHB1dCgpIGNoYXJ0SW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8RUNoYXJ0cz4oKTtcclxuXHJcbiAgLy8gZWNoYXJ0cyBtb3VzZSBldmVudHNcclxuICBAT3V0cHV0KCkgY2hhcnRDbGljayA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdjbGljaycpO1xyXG4gIEBPdXRwdXQoKSBjaGFydERibENsaWNrID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ2RibGNsaWNrJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TW91c2VEb3duID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ21vdXNlZG93bicpO1xyXG4gIEBPdXRwdXQoKSBjaGFydE1vdXNlTW92ZSA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdtb3VzZW1vdmUnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRNb3VzZVVwID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ21vdXNldXAnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRNb3VzZU92ZXIgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnbW91c2VvdmVyJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TW91c2VPdXQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnbW91c2VvdXQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRHbG9iYWxPdXQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnZ2xvYmFsb3V0Jyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0Q29udGV4dE1lbnUgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnY29udGV4dG1lbnUnKTtcclxuXHJcbiAgLy8gZWNoYXJ0cyBtb3VzZSBldmVudHNcclxuICBAT3V0cHV0KCkgY2hhcnRMZWdlbmRTZWxlY3RDaGFuZ2VkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ2xlZ2VuZHNlbGVjdGNoYW5nZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRMZWdlbmRTZWxlY3RlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdsZWdlbmRzZWxlY3RlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydExlZ2VuZFVuc2VsZWN0ZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnbGVnZW5kdW5zZWxlY3RlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydExlZ2VuZFNjcm9sbCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdsZWdlbmRzY3JvbGwnKTtcclxuICBAT3V0cHV0KCkgY2hhcnREYXRhWm9vbSA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdkYXRhem9vbScpO1xyXG4gIEBPdXRwdXQoKSBjaGFydERhdGFSYW5nZVNlbGVjdGVkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ2RhdGFyYW5nZXNlbGVjdGVkJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0VGltZWxpbmVDaGFuZ2VkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ3RpbWVsaW5lY2hhbmdlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydFRpbWVsaW5lUGxheUNoYW5nZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgndGltZWxpbmVwbGF5Y2hhbmdlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydFJlc3RvcmUgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgncmVzdG9yZScpO1xyXG4gIEBPdXRwdXQoKSBjaGFydERhdGFWaWV3Q2hhbmdlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdkYXRhdmlld2NoYW5nZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRNYWdpY1R5cGVDaGFuZ2VkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ21hZ2ljdHlwZWNoYW5nZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRQaWVTZWxlY3RDaGFuZ2VkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ3BpZXNlbGVjdGNoYW5nZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRQaWVTZWxlY3RlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdwaWVzZWxlY3RlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydFBpZVVuc2VsZWN0ZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgncGlldW5zZWxlY3RlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydE1hcFNlbGVjdENoYW5nZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnbWFwc2VsZWN0Y2hhbmdlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydE1hcFNlbGVjdGVkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ21hcHNlbGVjdGVkJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TWFwVW5zZWxlY3RlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdtYXB1bnNlbGVjdGVkJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0QXhpc0FyZWFTZWxlY3RlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdheGlzYXJlYXNlbGVjdGVkJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0Rm9jdXNOb2RlQWRqYWNlbmN5ID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ2ZvY3Vzbm9kZWFkamFjZW5jeScpO1xyXG4gIEBPdXRwdXQoKSBjaGFydFVuZm9jdXNOb2RlQWRqYWNlbmN5ID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ3VuZm9jdXNub2RlYWRqYWNlbmN5Jyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0QnJ1c2ggPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnYnJ1c2gnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRCcnVzaFNlbGVjdGVkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ2JydXNoc2VsZWN0ZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRSZW5kZXJlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdyZW5kZXJlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydEZpbmlzaGVkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ2ZpbmlzaGVkJyk7XHJcblxyXG4gIHByaXZhdGUgY2hhcnQ6IEVDaGFydHM7XHJcbiAgcHJpdmF0ZSBjdXJyZW50T2Zmc2V0V2lkdGggPSAwO1xyXG4gIHByaXZhdGUgY3VycmVudE9mZnNldEhlaWdodCA9IDA7XHJcbiAgcHJpdmF0ZSBjdXJyZW50V2luZG93V2lkdGg6IG51bWJlcjtcclxuICBwcml2YXRlIHJlc2l6ZVN1YjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmLCBwcml2YXRlIG5nWm9uZTogTmdab25lKSB7IH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgY29uc3QgZmlsdGVyID0gQ2hhbmdlRmlsdGVyLm9mKGNoYW5nZXMpO1xyXG4gICAgZmlsdGVyLm5vdEZpcnN0QW5kRW1wdHk8YW55Pignb3B0aW9ucycpLnN1YnNjcmliZShvcHQgPT4gdGhpcy5vbk9wdGlvbnNDaGFuZ2Uob3B0KSk7XHJcbiAgICBmaWx0ZXIubm90Rmlyc3RBbmRFbXB0eTxhbnk+KCdtZXJnZScpLnN1YnNjcmliZShvcHQgPT4gdGhpcy5zZXRPcHRpb24ob3B0KSk7XHJcbiAgICBmaWx0ZXIuaGFzPGJvb2xlYW4+KCdsb2FkaW5nJykuc3Vic2NyaWJlKHYgPT4gdGhpcy50b2dnbGVMb2FkaW5nKCEhdikpO1xyXG4gICAgZmlsdGVyLm5vdEZpcnN0PHN0cmluZz4oJ3RoZW1lJykuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVmcmVzaENoYXJ0KCkpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnJlc2l6ZVN1YiA9IGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKS5waXBlKGRlYm91bmNlVGltZSg1MCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmF1dG9SZXNpemUgJiYgd2luZG93LmlubmVyV2lkdGggIT09IHRoaXMuY3VycmVudFdpbmRvd1dpZHRoKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50V2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRPZmZzZXRXaWR0aCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRPZmZzZXRIZWlnaHQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgIHRoaXMucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnJlc2l6ZVN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0RvQ2hlY2soKSB7XHJcbiAgICAvLyBObyBoZWF2eSB3b3JrIGluIERvQ2hlY2shXHJcbiAgICBpZiAodGhpcy5jaGFydCAmJiB0aGlzLmF1dG9SZXNpemUpIHtcclxuICAgICAgY29uc3Qgb2Zmc2V0V2lkdGggPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XHJcbiAgICAgIGNvbnN0IG9mZnNldEhlaWdodCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAodGhpcy5jdXJyZW50T2Zmc2V0V2lkdGggIT09IG9mZnNldFdpZHRoIHx8IHRoaXMuY3VycmVudE9mZnNldEhlaWdodCAhPT0gb2Zmc2V0SGVpZ2h0KSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50T2Zmc2V0V2lkdGggPSBvZmZzZXRXaWR0aDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRPZmZzZXRIZWlnaHQgPSBvZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgdGhpcy5yZXNpemUoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluaXRDaGFydCgpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmNoYXJ0KSB7XHJcbiAgICAgIHRoaXMuY2hhcnQuZGlzcG9zZSgpO1xyXG4gICAgICB0aGlzLmNoYXJ0ID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzaXplKCkge1xyXG4gICAgaWYgKHRoaXMuY2hhcnQpIHtcclxuICAgICAgdGhpcy5jaGFydC5yZXNpemUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdG9nZ2xlTG9hZGluZyhsb2FkaW5nOiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5jaGFydCkge1xyXG4gICAgICBsb2FkaW5nID8gdGhpcy5jaGFydC5zaG93TG9hZGluZyh0aGlzLmxvYWRpbmdUeXBlLCB0aGlzLmxvYWRpbmdPcHRzKSA6IHRoaXMuY2hhcnQuaGlkZUxvYWRpbmcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0T3B0aW9uKG9wdGlvbjogYW55LCBvcHRzPzogYW55KSB7XHJcbiAgICBpZiAodGhpcy5jaGFydCkge1xyXG4gICAgICB0aGlzLmNoYXJ0LnNldE9wdGlvbihvcHRpb24sIG9wdHMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoQ2hhcnQoKSB7XHJcbiAgICB0aGlzLmRpc3Bvc2UoKTtcclxuICAgIHRoaXMuaW5pdENoYXJ0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUNoYXJ0KCkge1xyXG4gICAgdGhpcy5jdXJyZW50V2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICAgIHRoaXMuY3VycmVudE9mZnNldFdpZHRoID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgdGhpcy5jdXJyZW50T2Zmc2V0SGVpZ2h0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgIGNvbnN0IGRvbSA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcclxuXHJcbiAgICBpZiAod2luZG93ICYmIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKSB7XHJcbiAgICAgIGNvbnN0IHByb3AgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb20sIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2hlaWdodCcpO1xyXG4gICAgICBpZiAoKCFwcm9wIHx8IHByb3AgPT09ICcwcHgnKSAmJlxyXG4gICAgICAgICghZG9tLnN0eWxlLmhlaWdodCB8fCBkb20uc3R5bGUuaGVpZ2h0ID09PSAnMHB4JykpIHtcclxuICAgICAgICBkb20uc3R5bGUuaGVpZ2h0ID0gJzQwMHB4JztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiBpbml0KGRvbSwgdGhpcy50aGVtZSwgdGhpcy5pbml0T3B0cykpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0Q2hhcnQoKSB7XHJcbiAgICB0aGlzLm9uT3B0aW9uc0NoYW5nZSh0aGlzLm9wdGlvbnMpO1xyXG5cclxuICAgIGlmICh0aGlzLm1lcmdlICYmIHRoaXMuY2hhcnQpIHtcclxuICAgICAgdGhpcy5zZXRPcHRpb24odGhpcy5tZXJnZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uT3B0aW9uc0NoYW5nZShvcHQ6IEVDaGFydE9wdGlvbikge1xyXG4gICAgaWYgKG9wdCkge1xyXG4gICAgICBpZiAoIXRoaXMuY2hhcnQpIHtcclxuICAgICAgICB0aGlzLmNoYXJ0ID0gdGhpcy5jcmVhdGVDaGFydCgpO1xyXG4gICAgICAgIHRoaXMuY2hhcnRJbml0LmVtaXQodGhpcy5jaGFydCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY2hhcnQuc2V0T3B0aW9uKHRoaXMub3B0aW9ucywgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBhbGxvd3MgdG8gbGF6aWx5IGJpbmQgdG8gb25seSB0aG9zZSBldmVudHMgdGhhdCBhcmUgcmVxdWVzdGVkIHRocm91Z2ggdGhlIGBAT3V0cHV0YCBieSBwYXJlbnQgY29tcG9uZW50c1xyXG4gIC8vIHNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81MTc4Nzk3Mi9vcHRpbWFsLXJlZW50ZXJpbmctdGhlLW5nem9uZS1mcm9tLWV2ZW50ZW1pdHRlci1ldmVudCBmb3IgbW9yZSBpbmZvXHJcbiAgcHJpdmF0ZSBjcmVhdGVMYXp5RXZlbnQ8VD4oZXZlbnROYW1lOiBzdHJpbmcpOiBFdmVudEVtaXR0ZXI8VD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hhcnRJbml0LnBpcGUoXHJcbiAgICAgIHN3aXRjaE1hcCgoY2hhcnQ6IEVDaGFydHMpID0+IG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcclxuICAgICAgICBjaGFydC5vbihldmVudE5hbWUsIChkYXRhOiBUKSA9PiB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gb2JzZXJ2ZXIubmV4dChkYXRhKSkpO1xyXG4gICAgICAgIHJldHVybiBudWxsOyAvLyBubyBuZWVkIHRvIHJlYWN0IG9uIHVuc3Vic2NyaWJlIGFzIGxvbmcgYXMgdGhlIGBkaXNwb3NlKClgIGlzIGNhbGxlZCBpbiBuZ09uRGVzdHJveVxyXG4gICAgICB9KSlcclxuICAgICkgYXMgRXZlbnRFbWl0dGVyPFQ+O1xyXG4gIH1cclxuXHJcbn1cclxuIiwiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmd4RWNoYXJ0c0RpcmVjdGl2ZSB9IGZyb20gJy4vbmd4LWVjaGFydHMuZGlyZWN0aXZlJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW10sXHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBOZ3hFY2hhcnRzRGlyZWN0aXZlXHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBOZ3hFY2hhcnRzRGlyZWN0aXZlXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4RWNoYXJ0c01vZHVsZSB7IH1cclxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUNBLE1BRWEsWUFBWTs7OztJQUN2QixZQUFvQixRQUF1QjtRQUF2QixhQUFRLEdBQVIsUUFBUSxDQUFlO0tBQUs7Ozs7O0lBRWhELE9BQU8sRUFBRSxDQUFDLE9BQXNCO1FBQzlCLE9BQU8sSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDbEM7Ozs7OztJQUVELFFBQVEsQ0FBSSxHQUFXO1FBQ3JCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTs7a0JBQ2hCLEtBQUssR0FBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVk7WUFFaEQsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7Z0JBQ3pDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2xCO1NBQ0Y7UUFDRCxPQUFPLEtBQUssRUFBRSxDQUFDO0tBQ2hCOzs7Ozs7SUFFRCxHQUFHLENBQUksR0FBVztRQUNoQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7O2tCQUNoQixLQUFLLEdBQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZO1lBQ2hELE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2xCO1FBQ0QsT0FBTyxLQUFLLEVBQUUsQ0FBQztLQUNoQjs7Ozs7O0lBRUQsUUFBUSxDQUFJLEdBQVc7UUFDckIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRTs7a0JBQ3ZELEtBQUssR0FBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVk7WUFDaEQsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbEI7UUFDRCxPQUFPLEtBQUssRUFBRSxDQUFDO0tBQ2hCOzs7Ozs7SUFFRCxnQkFBZ0IsQ0FBSSxHQUFXO1FBQzdCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUU7O2tCQUN2RCxLQUFLLEdBQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZO1lBRWhELElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO2dCQUN6QyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNsQjtTQUNGO1FBQ0QsT0FBTyxLQUFLLEVBQUUsQ0FBQztLQUNoQjtDQUNGOzs7Ozs7QUMvQ0QsTUFTYSxtQkFBbUI7Ozs7O0lBOEQ5QixZQUFvQixFQUFjLEVBQVUsTUFBYztRQUF0QyxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQW5EakQsZUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixnQkFBVyxHQUFHLFNBQVMsQ0FBQztRQUV4Qix1QkFBa0IsR0FBRyxJQUFJLENBQUM7OztRQUd6QixjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQzs7UUFHeEMsZUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0Msa0JBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELG1CQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuRCxtQkFBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkQsaUJBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9DLG1CQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuRCxrQkFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsbUJBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25ELHFCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7O1FBR3ZELDZCQUF3QixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN2RSx3QkFBbUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDN0QsMEJBQXFCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2pFLHNCQUFpQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekQsa0JBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELDJCQUFzQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNuRSx5QkFBb0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDL0QsNkJBQXdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3ZFLGlCQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQyx5QkFBb0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDL0QsMEJBQXFCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2pFLDBCQUFxQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNqRSxxQkFBZ0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZELHVCQUFrQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDM0QsMEJBQXFCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2pFLHFCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdkQsdUJBQWtCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMzRCwwQkFBcUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDakUsNEJBQXVCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3JFLDhCQUF5QixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN6RSxlQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQyx1QkFBa0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzNELGtCQUFhLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRCxrQkFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFHbkQsdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLHdCQUFtQixHQUFHLENBQUMsQ0FBQztLQUkrQjs7Ozs7SUFFL0QsV0FBVyxDQUFDLE9BQXNCOztjQUMxQixNQUFNLEdBQUcsWUFBWSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUM7UUFDdkMsTUFBTSxDQUFDLGdCQUFnQixDQUFNLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3BGLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBTSxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM1RSxNQUFNLENBQUMsR0FBRyxDQUFVLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RSxNQUFNLENBQUMsUUFBUSxDQUFTLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0tBQ3ZFOzs7O0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzVFLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtnQkFDcEUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUM7Z0JBQzVELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUM7Z0JBQzlELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNmO1NBQ0YsQ0FBQyxDQUFDO0tBQ0o7Ozs7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDaEI7Ozs7SUFFRCxTQUFTOztRQUVQLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFOztrQkFDM0IsV0FBVyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVc7O2tCQUMvQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsWUFBWTtZQUV2RCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLG1CQUFtQixLQUFLLFlBQVksRUFBRTtnQkFDeEYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFdBQVcsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFlBQVksQ0FBQztnQkFDeEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ2Y7U0FDRjtLQUNGOzs7O0lBRUQsZUFBZTtRQUNiLFVBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0tBQ3BDOzs7O0lBRU8sT0FBTztRQUNiLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7U0FDbkI7S0FDRjs7OztJQUVPLE1BQU07UUFDWixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3JCO0tBQ0Y7Ozs7O0lBRU8sYUFBYSxDQUFDLE9BQWdCO1FBQ3BDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ2pHO0tBQ0Y7Ozs7OztJQUVPLFNBQVMsQ0FBQyxNQUFXLEVBQUUsSUFBVTtRQUN2QyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDcEM7S0FDRjs7OztJQUVPLFlBQVk7UUFDbEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0tBQ2xCOzs7O0lBRU8sV0FBVztRQUNqQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUM1QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDO1FBQzVELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUM7O2NBQ3hELEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWE7UUFFakMsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLGdCQUFnQixFQUFFOztrQkFDL0IsSUFBSSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO1lBQzFFLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSztpQkFDekIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsRUFBRTtnQkFDbkQsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO2FBQzVCO1NBQ0Y7UUFFRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7S0FDbEY7Ozs7SUFFTyxTQUFTO1FBQ2YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkMsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUI7S0FDRjs7Ozs7SUFFTyxlQUFlLENBQUMsR0FBaUI7UUFDdkMsSUFBSSxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDZixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2pDO1lBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztTQUMxQztLQUNGOzs7Ozs7OztJQUlPLGVBQWUsQ0FBSSxTQUFpQjtRQUMxQywwQkFBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FDeEIsU0FBUyxDQUFDLENBQUMsS0FBYyxLQUFLLElBQUksVUFBVSxDQUFDLFFBQVE7WUFDbkQsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFPLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3RSxPQUFPLElBQUksQ0FBQztTQUNiLENBQUMsQ0FBQyxDQUNKLEdBQW9CO0tBQ3RCOzs7WUF4TEYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxvQkFBb0I7YUFDL0I7Ozs7WUFSMkMsVUFBVTtZQUF1QixNQUFNOzs7c0JBVWhGLEtBQUs7b0JBQ0wsS0FBSztzQkFDTCxLQUFLO3VCQUNMLEtBQUs7b0JBTUwsS0FBSzt5QkFDTCxLQUFLOzBCQUNMLEtBQUs7MEJBQ0wsS0FBSztpQ0FDTCxLQUFLO3dCQUdMLE1BQU07eUJBR04sTUFBTTs0QkFDTixNQUFNOzZCQUNOLE1BQU07NkJBQ04sTUFBTTsyQkFDTixNQUFNOzZCQUNOLE1BQU07NEJBQ04sTUFBTTs2QkFDTixNQUFNOytCQUNOLE1BQU07dUNBR04sTUFBTTtrQ0FDTixNQUFNO29DQUNOLE1BQU07Z0NBQ04sTUFBTTs0QkFDTixNQUFNO3FDQUNOLE1BQU07bUNBQ04sTUFBTTt1Q0FDTixNQUFNOzJCQUNOLE1BQU07bUNBQ04sTUFBTTtvQ0FDTixNQUFNO29DQUNOLE1BQU07K0JBQ04sTUFBTTtpQ0FDTixNQUFNO29DQUNOLE1BQU07K0JBQ04sTUFBTTtpQ0FDTixNQUFNO29DQUNOLE1BQU07c0NBQ04sTUFBTTt3Q0FDTixNQUFNO3lCQUNOLE1BQU07aUNBQ04sTUFBTTs0QkFDTixNQUFNOzRCQUNOLE1BQU07Ozs7Ozs7QUMvRFQsTUFZYSxnQkFBZ0I7OztZQVQ1QixRQUFRLFNBQUM7Z0JBQ1IsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsWUFBWSxFQUFFO29CQUNaLG1CQUFtQjtpQkFDcEI7Z0JBQ0QsT0FBTyxFQUFFO29CQUNQLG1CQUFtQjtpQkFDcEI7YUFDRjs7Ozs7Ozs7Ozs7Ozs7OyJ9 |
@@ -1,5 +0,5 @@ | ||
import { of, empty, Subject } from 'rxjs'; | ||
import { Directive, ElementRef, Input, Output, HostListener, EventEmitter, NgZone, NgModule } from '@angular/core'; | ||
import { debounceTime } from 'rxjs/operators'; | ||
import { of, empty, fromEvent, Observable } from 'rxjs'; | ||
import { Directive, ElementRef, EventEmitter, Input, NgZone, Output, NgModule } from '@angular/core'; | ||
import { init } from 'echarts'; | ||
import { debounceTime, switchMap } from 'rxjs/operators'; | ||
@@ -108,109 +108,51 @@ /** | ||
*/ | ||
var EChartEvents = /** @class */ (function () { | ||
function EChartEvents() { | ||
} | ||
EChartEvents.Click = 'click'; | ||
EChartEvents.DblClick = 'dblclick'; | ||
EChartEvents.MouseDown = 'mousedown'; | ||
EChartEvents.MouseUp = 'mouseup'; | ||
EChartEvents.MouseOver = 'mouseover'; | ||
EChartEvents.MouseOut = 'mouseout'; | ||
EChartEvents.GlobalOut = 'globalout'; | ||
EChartEvents.ContextMenu = 'contextmenu'; | ||
EChartEvents.DataZoom = 'datazoom'; | ||
EChartEvents.MapSelectChanged = 'mapselectchanged'; | ||
EChartEvents.MapSelected = 'mapselected'; | ||
EChartEvents.MapUnselected = 'mapunselected'; | ||
EChartEvents.All = [ | ||
EChartEvents.Click, | ||
EChartEvents.DblClick, | ||
EChartEvents.MouseDown, | ||
EChartEvents.MouseUp, | ||
EChartEvents.MouseOver, | ||
EChartEvents.MouseOut, | ||
EChartEvents.GlobalOut, | ||
EChartEvents.ContextMenu, | ||
EChartEvents.DataZoom, | ||
EChartEvents.MapSelectChanged, | ||
EChartEvents.MapSelected, | ||
EChartEvents.MapUnselected, | ||
]; | ||
return EChartEvents; | ||
}()); | ||
/** | ||
* @fileoverview added by tsickle | ||
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc | ||
*/ | ||
var NgxEchartsDirective = /** @class */ (function () { | ||
function NgxEchartsDirective(el, _ngZone) { | ||
function NgxEchartsDirective(el, ngZone) { | ||
this.el = el; | ||
this._ngZone = _ngZone; | ||
this.ngZone = ngZone; | ||
this.autoResize = true; | ||
this.loadingType = 'default'; | ||
/** | ||
* Whether to register event handlers on echartInstance. Default is true. | ||
* Use it to avoid unwanted change detection, if you want to optimize the performance. | ||
*/ | ||
this.detectEventChanges = true; | ||
// chart events: | ||
this.detectEventChanges = true; // deprecated, left for compatibility reasons to avoid triggering major version | ||
// deprecated, left for compatibility reasons to avoid triggering major version | ||
// ngx-echarts events | ||
this.chartInit = new EventEmitter(); | ||
this.chartClick = new EventEmitter(); | ||
this.chartDblClick = new EventEmitter(); | ||
this.chartMouseDown = new EventEmitter(); | ||
this.chartMouseUp = new EventEmitter(); | ||
this.chartMouseOver = new EventEmitter(); | ||
this.chartMouseOut = new EventEmitter(); | ||
this.chartGlobalOut = new EventEmitter(); | ||
this.chartContextMenu = new EventEmitter(); | ||
this.chartDataZoom = new EventEmitter(); | ||
this.chartMapSelectChanged = new EventEmitter(); | ||
this.chartMapSelected = new EventEmitter(); | ||
this.chartMapUnselected = new EventEmitter(); | ||
// echarts mouse events | ||
this.chartClick = this.createLazyEvent('click'); | ||
this.chartDblClick = this.createLazyEvent('dblclick'); | ||
this.chartMouseDown = this.createLazyEvent('mousedown'); | ||
this.chartMouseMove = this.createLazyEvent('mousemove'); | ||
this.chartMouseUp = this.createLazyEvent('mouseup'); | ||
this.chartMouseOver = this.createLazyEvent('mouseover'); | ||
this.chartMouseOut = this.createLazyEvent('mouseout'); | ||
this.chartGlobalOut = this.createLazyEvent('globalout'); | ||
this.chartContextMenu = this.createLazyEvent('contextmenu'); | ||
// echarts mouse events | ||
this.chartLegendSelectChanged = this.createLazyEvent('legendselectchanged'); | ||
this.chartLegendSelected = this.createLazyEvent('legendselected'); | ||
this.chartLegendUnselected = this.createLazyEvent('legendunselected'); | ||
this.chartLegendScroll = this.createLazyEvent('legendscroll'); | ||
this.chartDataZoom = this.createLazyEvent('datazoom'); | ||
this.chartDataRangeSelected = this.createLazyEvent('datarangeselected'); | ||
this.chartTimelineChanged = this.createLazyEvent('timelinechanged'); | ||
this.chartTimelinePlayChanged = this.createLazyEvent('timelineplaychanged'); | ||
this.chartRestore = this.createLazyEvent('restore'); | ||
this.chartDataViewChanged = this.createLazyEvent('dataviewchanged'); | ||
this.chartMagicTypeChanged = this.createLazyEvent('magictypechanged'); | ||
this.chartPieSelectChanged = this.createLazyEvent('pieselectchanged'); | ||
this.chartPieSelected = this.createLazyEvent('pieselected'); | ||
this.chartPieUnselected = this.createLazyEvent('pieunselected'); | ||
this.chartMapSelectChanged = this.createLazyEvent('mapselectchanged'); | ||
this.chartMapSelected = this.createLazyEvent('mapselected'); | ||
this.chartMapUnselected = this.createLazyEvent('mapunselected'); | ||
this.chartAxisAreaSelected = this.createLazyEvent('axisareaselected'); | ||
this.chartFocusNodeAdjacency = this.createLazyEvent('focusnodeadjacency'); | ||
this.chartUnfocusNodeAdjacency = this.createLazyEvent('unfocusnodeadjacency'); | ||
this.chartBrush = this.createLazyEvent('brush'); | ||
this.chartBrushSelected = this.createLazyEvent('brushselected'); | ||
this.chartRendered = this.createLazyEvent('rendered'); | ||
this.chartFinished = this.createLazyEvent('finished'); | ||
this.currentOffsetWidth = 0; | ||
this.currentOffsetHeight = 0; | ||
this._resize$ = new Subject(); | ||
} | ||
/** | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.createChart = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
var _this = this; | ||
this.currentWindowWidth = window.innerWidth; | ||
this.currentOffsetWidth = this.el.nativeElement.offsetWidth; | ||
this.currentOffsetHeight = this.el.nativeElement.offsetHeight; | ||
/** @type {?} */ | ||
var dom = this.el.nativeElement; | ||
if (window && window.getComputedStyle) { | ||
/** @type {?} */ | ||
var prop = window.getComputedStyle(dom, null).getPropertyValue('height'); | ||
if ((!prop || prop === '0px') && | ||
(!dom.style.height || dom.style.height === '0px')) { | ||
dom.style.height = '400px'; | ||
} | ||
} | ||
return this._ngZone.runOutsideAngular(function () { return init(dom, _this.theme || undefined, _this.initOpts || undefined); }); | ||
}; | ||
/** | ||
* @param {?} event | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.onWindowResize = /** | ||
* @param {?} event | ||
* @return {?} | ||
*/ | ||
function (event) { | ||
/** @type {?} */ | ||
var target = (/** @type {?} */ (event.target)); | ||
if (this.autoResize && target.innerWidth !== this.currentWindowWidth) { | ||
this.currentWindowWidth = target.innerWidth; | ||
this.currentOffsetWidth = this.el.nativeElement.offsetWidth; | ||
this.currentOffsetHeight = this.el.nativeElement.offsetHeight; | ||
this._resize$.next(); | ||
} | ||
}; | ||
/** | ||
* @param {?} changes | ||
@@ -230,3 +172,2 @@ * @return {?} | ||
filter.has('loading').subscribe(function (v) { return _this.toggleLoading(!!v); }); | ||
filter.notFirst('detectEventChanges').subscribe(function (v) { return _this.toggleEventDetectors(!!v); }); | ||
filter.notFirst('theme').subscribe(function () { return _this.refreshChart(); }); | ||
@@ -237,2 +178,19 @@ }; | ||
*/ | ||
NgxEchartsDirective.prototype.ngOnInit = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
var _this = this; | ||
this.resizeSub = fromEvent(window, 'resize').pipe(debounceTime(50)).subscribe(function () { | ||
if (_this.autoResize && window.innerWidth !== _this.currentWindowWidth) { | ||
_this.currentWindowWidth = window.innerWidth; | ||
_this.currentOffsetWidth = _this.el.nativeElement.offsetWidth; | ||
_this.currentOffsetHeight = _this.el.nativeElement.offsetHeight; | ||
_this.resize(); | ||
} | ||
}); | ||
}; | ||
/** | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.ngOnDestroy = /** | ||
@@ -242,10 +200,4 @@ * @return {?} | ||
function () { | ||
if (this._resizeSub) { | ||
this._resizeSub.unsubscribe(); | ||
this._resizeSub = null; | ||
} | ||
if (this._chart) { | ||
this._chart.dispose(); | ||
this._chart = null; | ||
} | ||
this.resizeSub.unsubscribe(); | ||
this.dispose(); | ||
}; | ||
@@ -260,3 +212,3 @@ /** | ||
// No heavy work in DoCheck! | ||
if (this._chart && this.autoResize) { | ||
if (this.chart && this.autoResize) { | ||
/** @type {?} */ | ||
@@ -269,3 +221,3 @@ var offsetWidth = this.el.nativeElement.offsetWidth; | ||
this.currentOffsetHeight = offsetHeight; | ||
this._resize$.next(); | ||
this.resize(); | ||
} | ||
@@ -287,68 +239,48 @@ } | ||
*/ | ||
NgxEchartsDirective.prototype.initChart = /** | ||
NgxEchartsDirective.prototype.dispose = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
this.onOptionsChange(this.options); | ||
if (this.merge && this._chart) { | ||
this.setOption(this.merge); | ||
if (this.chart) { | ||
this.chart.dispose(); | ||
this.chart = null; | ||
} | ||
}; | ||
/** | ||
* @param {?} opt | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.onOptionsChange = /** | ||
* @param {?} opt | ||
NgxEchartsDirective.prototype.resize = /** | ||
* @return {?} | ||
*/ | ||
function (opt) { | ||
var _this = this; | ||
if (opt) { | ||
if (!this._chart) { | ||
this._chart = this.createChart(); | ||
// subscribe to _resize$ and debounced | ||
this._resizeSub = this._resize$.pipe(debounceTime(50)).subscribe(function () { | ||
if (_this._chart) { | ||
_this._chart.resize(); | ||
} | ||
}); | ||
// output echart instance: | ||
this.chartInit.emit(this._chart); | ||
// register events: | ||
if (this.detectEventChanges) { | ||
this.registerEvents(); | ||
} | ||
} | ||
this._chart.setOption(this.options, true); | ||
function () { | ||
if (this.chart) { | ||
this.chart.resize(); | ||
} | ||
}; | ||
/** | ||
* @param {?} loading | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.registerEvents = /** | ||
NgxEchartsDirective.prototype.toggleLoading = /** | ||
* @param {?} loading | ||
* @return {?} | ||
*/ | ||
function () { | ||
if (this._chart) { | ||
/** @type {?} */ | ||
var events = EChartEvents.All; | ||
for (var i = 0, len = events.length; i < len; i++) { | ||
this._chart.on(events[i], this.eventHandler, this); | ||
} | ||
function (loading) { | ||
if (this.chart) { | ||
loading ? this.chart.showLoading(this.loadingType, this.loadingOpts) : this.chart.hideLoading(); | ||
} | ||
}; | ||
/** | ||
* @param {?} option | ||
* @param {?=} opts | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.unregisterEvents = /** | ||
NgxEchartsDirective.prototype.setOption = /** | ||
* @param {?} option | ||
* @param {?=} opts | ||
* @return {?} | ||
*/ | ||
function () { | ||
if (this._chart) { | ||
/** @type {?} */ | ||
var events = EChartEvents.All; | ||
for (var i = 0, len = events.length; i < len; i++) { | ||
this._chart.off(events[i], this.eventHandler); | ||
} | ||
function (option, opts) { | ||
if (this.chart) { | ||
this.chart.setOption(option, opts); | ||
} | ||
@@ -359,109 +291,84 @@ }; | ||
*/ | ||
NgxEchartsDirective.prototype.clear = /** | ||
NgxEchartsDirective.prototype.refreshChart = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
if (this._chart) { | ||
this._chart.clear(); | ||
} | ||
this.dispose(); | ||
this.initChart(); | ||
}; | ||
/** | ||
* @param {?} loading | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.toggleLoading = /** | ||
* @param {?} loading | ||
NgxEchartsDirective.prototype.createChart = /** | ||
* @return {?} | ||
*/ | ||
function (loading) { | ||
if (this._chart) { | ||
loading ? this._chart.showLoading(this.loadingType, this.loadingOpts) : this._chart.hideLoading(); | ||
function () { | ||
var _this = this; | ||
this.currentWindowWidth = window.innerWidth; | ||
this.currentOffsetWidth = this.el.nativeElement.offsetWidth; | ||
this.currentOffsetHeight = this.el.nativeElement.offsetHeight; | ||
/** @type {?} */ | ||
var dom = this.el.nativeElement; | ||
if (window && window.getComputedStyle) { | ||
/** @type {?} */ | ||
var prop = window.getComputedStyle(dom, null).getPropertyValue('height'); | ||
if ((!prop || prop === '0px') && | ||
(!dom.style.height || dom.style.height === '0px')) { | ||
dom.style.height = '400px'; | ||
} | ||
} | ||
return this.ngZone.runOutsideAngular(function () { return init(dom, _this.theme, _this.initOpts); }); | ||
}; | ||
/** | ||
* @param {?} option | ||
* @param {?=} opts | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.setOption = /** | ||
* @param {?} option | ||
* @param {?=} opts | ||
NgxEchartsDirective.prototype.initChart = /** | ||
* @return {?} | ||
*/ | ||
function (option, opts) { | ||
if (this._chart) { | ||
this._chart.setOption(option, opts); | ||
function () { | ||
this.onOptionsChange(this.options); | ||
if (this.merge && this.chart) { | ||
this.setOption(this.merge); | ||
} | ||
}; | ||
/** | ||
* @param {?} event | ||
* @param {?} opt | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.eventHandler = /** | ||
* @param {?} event | ||
NgxEchartsDirective.prototype.onOptionsChange = /** | ||
* @param {?} opt | ||
* @return {?} | ||
*/ | ||
function (event) { | ||
var _this = this; | ||
switch (event.type) { | ||
case EChartEvents.Click: | ||
this._ngZone.run(function () { return _this.chartClick.emit(event); }); | ||
break; | ||
case EChartEvents.DblClick: | ||
this._ngZone.run(function () { return _this.chartDblClick.emit(event); }); | ||
break; | ||
case EChartEvents.MouseDown: | ||
this._ngZone.run(function () { return _this.chartMouseDown.emit(event); }); | ||
break; | ||
case EChartEvents.MouseUp: | ||
this._ngZone.run(function () { return _this.chartMouseUp.emit(event); }); | ||
break; | ||
case EChartEvents.MouseOver: | ||
this._ngZone.run(function () { return _this.chartMouseOver.emit(event); }); | ||
break; | ||
case EChartEvents.MouseOut: | ||
this._ngZone.run(function () { return _this.chartMouseOut.emit(event); }); | ||
break; | ||
case EChartEvents.GlobalOut: | ||
this._ngZone.run(function () { return _this.chartGlobalOut.emit(event); }); | ||
break; | ||
case EChartEvents.ContextMenu: | ||
this._ngZone.run(function () { return _this.chartContextMenu.emit(event); }); | ||
break; | ||
case EChartEvents.DataZoom: | ||
this._ngZone.run(function () { return _this.chartDataZoom.emit(event); }); | ||
break; | ||
case EChartEvents.MapSelectChanged: | ||
this._ngZone.run(function () { return _this.chartMapSelectChanged.emit(event); }); | ||
break; | ||
case EChartEvents.MapSelected: | ||
this._ngZone.run(function () { return _this.chartMapSelected.emit(event); }); | ||
break; | ||
case EChartEvents.MapUnselected: | ||
this._ngZone.run(function () { return _this.chartMapUnselected.emit(event); }); | ||
break; | ||
function (opt) { | ||
if (opt) { | ||
if (!this.chart) { | ||
this.chart = this.createChart(); | ||
this.chartInit.emit(this.chart); | ||
} | ||
this.chart.setOption(this.options, true); | ||
} | ||
}; | ||
// allows to lazily bind to only those events that are requested through the `@Output` by parent components | ||
// see https://stackoverflow.com/questions/51787972/optimal-reentering-the-ngzone-from-eventemitter-event for more info | ||
// allows to lazily bind to only those events that are requested through the `@Output` by parent components | ||
// see https://stackoverflow.com/questions/51787972/optimal-reentering-the-ngzone-from-eventemitter-event for more info | ||
/** | ||
* @param {?} detect | ||
* @template T | ||
* @param {?} eventName | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.toggleEventDetectors = /** | ||
* @param {?} detect | ||
* @return {?} | ||
*/ | ||
function (detect) { | ||
if (this._chart) { | ||
detect ? this.registerEvents() : this.unregisterEvents(); | ||
} | ||
}; | ||
NgxEchartsDirective.prototype.createLazyEvent = | ||
// allows to lazily bind to only those events that are requested through the `@Output` by parent components | ||
// see https://stackoverflow.com/questions/51787972/optimal-reentering-the-ngzone-from-eventemitter-event for more info | ||
/** | ||
* @template T | ||
* @param {?} eventName | ||
* @return {?} | ||
*/ | ||
NgxEchartsDirective.prototype.refreshChart = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
this.ngOnDestroy(); | ||
this.initChart(); | ||
function (eventName) { | ||
var _this = this; | ||
return (/** @type {?} */ (this.chartInit.pipe(switchMap(function (chart) { return new Observable(function (observer) { | ||
chart.on(eventName, function (data) { return _this.ngZone.run(function () { return observer.next(data); }); }); | ||
return null; // no need to react on unsubscribe as long as the `dispose()` is called in ngOnDestroy | ||
}); })))); | ||
}; | ||
@@ -492,2 +399,3 @@ NgxEchartsDirective.decorators = [ | ||
chartMouseDown: [{ type: Output }], | ||
chartMouseMove: [{ type: Output }], | ||
chartMouseUp: [{ type: Output }], | ||
@@ -498,7 +406,26 @@ chartMouseOver: [{ type: Output }], | ||
chartContextMenu: [{ type: Output }], | ||
chartLegendSelectChanged: [{ type: Output }], | ||
chartLegendSelected: [{ type: Output }], | ||
chartLegendUnselected: [{ type: Output }], | ||
chartLegendScroll: [{ type: Output }], | ||
chartDataZoom: [{ type: Output }], | ||
chartDataRangeSelected: [{ type: Output }], | ||
chartTimelineChanged: [{ type: Output }], | ||
chartTimelinePlayChanged: [{ type: Output }], | ||
chartRestore: [{ type: Output }], | ||
chartDataViewChanged: [{ type: Output }], | ||
chartMagicTypeChanged: [{ type: Output }], | ||
chartPieSelectChanged: [{ type: Output }], | ||
chartPieSelected: [{ type: Output }], | ||
chartPieUnselected: [{ type: Output }], | ||
chartMapSelectChanged: [{ type: Output }], | ||
chartMapSelected: [{ type: Output }], | ||
chartMapUnselected: [{ type: Output }], | ||
onWindowResize: [{ type: HostListener, args: ['window:resize', ['$event'],] }] | ||
chartAxisAreaSelected: [{ type: Output }], | ||
chartFocusNodeAdjacency: [{ type: Output }], | ||
chartUnfocusNodeAdjacency: [{ type: Output }], | ||
chartBrush: [{ type: Output }], | ||
chartBrushSelected: [{ type: Output }], | ||
chartRendered: [{ type: Output }], | ||
chartFinished: [{ type: Output }] | ||
}; | ||
@@ -541,2 +468,2 @@ return NgxEchartsDirective; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWVjaGFydHMuanMubWFwIiwic291cmNlcyI6WyJuZzovL25neC1lY2hhcnRzL2xpYi9jaGFuZ2UtZmlsdGVyLnRzIiwibmc6Ly9uZ3gtZWNoYXJ0cy9saWIvZWNoYXJ0LWV2ZW50cy50cyIsIm5nOi8vbmd4LWVjaGFydHMvbGliL25neC1lY2hhcnRzLmRpcmVjdGl2ZS50cyIsIm5nOi8vbmd4LWVjaGFydHMvbGliL25neC1lY2hhcnRzLm1vZHVsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBlbXB0eSB9IGZyb20gJ3J4anMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENoYW5nZUZpbHRlciB7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfY2hhbmdlczogU2ltcGxlQ2hhbmdlcykgeyB9XHJcblxyXG4gIHN0YXRpYyBvZihjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICByZXR1cm4gbmV3IENoYW5nZUZpbHRlcihjaGFuZ2VzKTtcclxuICB9XHJcblxyXG4gIG5vdEVtcHR5PFQ+KGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICBpZiAodGhpcy5fY2hhbmdlc1trZXldKSB7XHJcbiAgICAgIGNvbnN0IHZhbHVlOiBUID0gdGhpcy5fY2hhbmdlc1trZXldLmN1cnJlbnRWYWx1ZTtcclxuXHJcbiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIG9mKHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVtcHR5KCk7XHJcbiAgfVxyXG5cclxuICBoYXM8VD4oa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIGlmICh0aGlzLl9jaGFuZ2VzW2tleV0pIHtcclxuICAgICAgY29uc3QgdmFsdWU6IFQgPSB0aGlzLl9jaGFuZ2VzW2tleV0uY3VycmVudFZhbHVlO1xyXG4gICAgICByZXR1cm4gb2YodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVtcHR5KCk7XHJcbiAgfVxyXG5cclxuICBub3RGaXJzdDxUPihrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgaWYgKHRoaXMuX2NoYW5nZXNba2V5XSAmJiAhdGhpcy5fY2hhbmdlc1trZXldLmlzRmlyc3RDaGFuZ2UoKSkge1xyXG4gICAgICBjb25zdCB2YWx1ZTogVCA9IHRoaXMuX2NoYW5nZXNba2V5XS5jdXJyZW50VmFsdWU7XHJcbiAgICAgIHJldHVybiBvZih2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIG5vdEZpcnN0QW5kRW1wdHk8VD4oa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIGlmICh0aGlzLl9jaGFuZ2VzW2tleV0gJiYgIXRoaXMuX2NoYW5nZXNba2V5XS5pc0ZpcnN0Q2hhbmdlKCkpIHtcclxuICAgICAgY29uc3QgdmFsdWU6IFQgPSB0aGlzLl9jaGFuZ2VzW2tleV0uY3VycmVudFZhbHVlO1xyXG5cclxuICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gb2YodmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZW1wdHkoKTtcclxuICB9XHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIEVDaGFydEV2ZW50cyB7XHJcbiAgc3RhdGljIENsaWNrID0gJ2NsaWNrJztcclxuICBzdGF0aWMgRGJsQ2xpY2sgPSAnZGJsY2xpY2snO1xyXG4gIHN0YXRpYyBNb3VzZURvd24gPSAnbW91c2Vkb3duJztcclxuICBzdGF0aWMgTW91c2VVcCA9ICdtb3VzZXVwJztcclxuICBzdGF0aWMgTW91c2VPdmVyID0gJ21vdXNlb3Zlcic7XHJcbiAgc3RhdGljIE1vdXNlT3V0ID0gJ21vdXNlb3V0JztcclxuICBzdGF0aWMgR2xvYmFsT3V0ID0gJ2dsb2JhbG91dCc7XHJcbiAgc3RhdGljIENvbnRleHRNZW51ID0gJ2NvbnRleHRtZW51JztcclxuICBzdGF0aWMgRGF0YVpvb20gPSAnZGF0YXpvb20nO1xyXG4gIHN0YXRpYyBNYXBTZWxlY3RDaGFuZ2VkID0gJ21hcHNlbGVjdGNoYW5nZWQnO1xyXG4gIHN0YXRpYyBNYXBTZWxlY3RlZCA9ICdtYXBzZWxlY3RlZCc7XHJcbiAgc3RhdGljIE1hcFVuc2VsZWN0ZWQgPSAnbWFwdW5zZWxlY3RlZCc7XHJcblxyXG4gIHN0YXRpYyBBbGwgPSBbXHJcbiAgICBFQ2hhcnRFdmVudHMuQ2xpY2ssXHJcbiAgICBFQ2hhcnRFdmVudHMuRGJsQ2xpY2ssXHJcbiAgICBFQ2hhcnRFdmVudHMuTW91c2VEb3duLFxyXG4gICAgRUNoYXJ0RXZlbnRzLk1vdXNlVXAsXHJcbiAgICBFQ2hhcnRFdmVudHMuTW91c2VPdmVyLFxyXG4gICAgRUNoYXJ0RXZlbnRzLk1vdXNlT3V0LFxyXG4gICAgRUNoYXJ0RXZlbnRzLkdsb2JhbE91dCxcclxuICAgIEVDaGFydEV2ZW50cy5Db250ZXh0TWVudSxcclxuICAgIEVDaGFydEV2ZW50cy5EYXRhWm9vbSxcclxuICAgIEVDaGFydEV2ZW50cy5NYXBTZWxlY3RDaGFuZ2VkLFxyXG4gICAgRUNoYXJ0RXZlbnRzLk1hcFNlbGVjdGVkLFxyXG4gICAgRUNoYXJ0RXZlbnRzLk1hcFVuc2VsZWN0ZWQsXHJcbiAgXTtcclxufVxyXG4iLCJpbXBvcnQge1xyXG4gIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgUmVuZGVyZXIsIElucHV0LCBPdXRwdXQsIEhvc3RMaXN0ZW5lciwgRXZlbnRFbWl0dGVyLFxyXG4gIE9uQ2hhbmdlcywgT25EZXN0cm95LCBTaW1wbGVDaGFuZ2VzLCBOZ1pvbmUsIERvQ2hlY2ssIEFmdGVyVmlld0luaXRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2hhbmdlRmlsdGVyIH0gZnJvbSAnLi9jaGFuZ2UtZmlsdGVyJztcclxuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgaW5pdCwgRUNoYXJ0cywgRUNoYXJ0T3B0aW9uIH0gZnJvbSAnZWNoYXJ0cyc7XHJcbmltcG9ydCB7IEVDaGFydEV2ZW50cyB9IGZyb20gJy4vZWNoYXJ0LWV2ZW50cyc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ2VjaGFydHMsIFtlY2hhcnRzXScsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hFY2hhcnRzRGlyZWN0aXZlIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIERvQ2hlY2ssIEFmdGVyVmlld0luaXQge1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IEVDaGFydE9wdGlvbjtcclxuICBASW5wdXQoKSB0aGVtZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaW5pdE9wdHM6IHtcclxuICAgIGRldmljZVBpeGVsUmF0aW8/OiBudW1iZXJcclxuICAgIHJlbmRlcmVyPzogc3RyaW5nXHJcbiAgICB3aWR0aD86IG51bWJlciB8IHN0cmluZ1xyXG4gICAgaGVpZ2h0PzogbnVtYmVyIHwgc3RyaW5nXHJcbiAgfTtcclxuICBASW5wdXQoKSBtZXJnZTogRUNoYXJ0T3B0aW9uO1xyXG4gIEBJbnB1dCgpIGF1dG9SZXNpemUgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGxvYWRpbmdUeXBlID0gJ2RlZmF1bHQnO1xyXG4gIEBJbnB1dCgpIGxvYWRpbmdPcHRzOiBvYmplY3Q7XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdG8gcmVnaXN0ZXIgZXZlbnQgaGFuZGxlcnMgb24gZWNoYXJ0SW5zdGFuY2UuIERlZmF1bHQgaXMgdHJ1ZS5cclxuICAgKiBVc2UgaXQgdG8gYXZvaWQgdW53YW50ZWQgY2hhbmdlIGRldGVjdGlvbiwgaWYgeW91IHdhbnQgdG8gb3B0aW1pemUgdGhlIHBlcmZvcm1hbmNlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGRldGVjdEV2ZW50Q2hhbmdlcyA9IHRydWU7XHJcblxyXG4gIC8vIGNoYXJ0IGV2ZW50czpcclxuICBAT3V0cHV0KCkgY2hhcnRJbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxFQ2hhcnRzPigpO1xyXG4gIEBPdXRwdXQoKSBjaGFydENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0RGJsQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgY2hhcnRNb3VzZURvd24gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgY2hhcnRNb3VzZVVwID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TW91c2VPdmVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TW91c2VPdXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgY2hhcnRHbG9iYWxPdXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgY2hhcnRDb250ZXh0TWVudSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBjaGFydERhdGFab29tID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TWFwU2VsZWN0Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBjaGFydE1hcFNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TWFwVW5zZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBwcml2YXRlIF9jaGFydDogRUNoYXJ0cztcclxuICBwcml2YXRlIGN1cnJlbnRPZmZzZXRXaWR0aCA9IDA7XHJcbiAgcHJpdmF0ZSBjdXJyZW50T2Zmc2V0SGVpZ2h0ID0gMDtcclxuICBwcml2YXRlIGN1cnJlbnRXaW5kb3dXaWR0aDogbnVtYmVyO1xyXG4gIHByaXZhdGUgX3Jlc2l6ZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgX3Jlc2l6ZVN1YjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmLCBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSkgeyB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQ2hhcnQoKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRXaW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xyXG4gICAgdGhpcy5jdXJyZW50T2Zmc2V0V2lkdGggPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XHJcbiAgICB0aGlzLmN1cnJlbnRPZmZzZXRIZWlnaHQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgY29uc3QgZG9tID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgIGlmICh3aW5kb3cgJiYgd2luZG93LmdldENvbXB1dGVkU3R5bGUpIHtcclxuICAgICAgY29uc3QgcHJvcCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnaGVpZ2h0Jyk7XHJcbiAgICAgIGlmICgoIXByb3AgfHwgcHJvcCA9PT0gJzBweCcpICYmXHJcbiAgICAgICAgKCFkb20uc3R5bGUuaGVpZ2h0IHx8IGRvbS5zdHlsZS5oZWlnaHQgPT09ICcwcHgnKSkge1xyXG4gICAgICAgIGRvbS5zdHlsZS5oZWlnaHQgPSAnNDAwcHgnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiBpbml0KGRvbSwgdGhpcy50aGVtZSB8fCB1bmRlZmluZWQsIHRoaXMuaW5pdE9wdHMgfHwgdW5kZWZpbmVkKSk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuICBvbldpbmRvd1Jlc2l6ZShldmVudDogRXZlbnQpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBXaW5kb3c7XHJcblxyXG4gICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZSAmJiB0YXJnZXQuaW5uZXJXaWR0aCAhPT0gdGhpcy5jdXJyZW50V2luZG93V2lkdGgpIHtcclxuICAgICAgdGhpcy5jdXJyZW50V2luZG93V2lkdGggPSB0YXJnZXQuaW5uZXJXaWR0aDtcclxuICAgICAgdGhpcy5jdXJyZW50T2Zmc2V0V2lkdGggPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XHJcbiAgICAgIHRoaXMuY3VycmVudE9mZnNldEhlaWdodCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcblxyXG4gICAgICB0aGlzLl9yZXNpemUkLm5leHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGNvbnN0IGZpbHRlciA9IENoYW5nZUZpbHRlci5vZihjaGFuZ2VzKTtcclxuICAgIGZpbHRlci5ub3RGaXJzdEFuZEVtcHR5PGFueT4oJ29wdGlvbnMnKS5zdWJzY3JpYmUob3B0ID0+IHRoaXMub25PcHRpb25zQ2hhbmdlKG9wdCkpO1xyXG4gICAgZmlsdGVyLm5vdEZpcnN0QW5kRW1wdHk8YW55PignbWVyZ2UnKS5zdWJzY3JpYmUob3B0ID0+IHRoaXMuc2V0T3B0aW9uKG9wdCkpO1xyXG4gICAgZmlsdGVyLmhhczxib29sZWFuPignbG9hZGluZycpLnN1YnNjcmliZSh2ID0+IHRoaXMudG9nZ2xlTG9hZGluZyghIXYpKTtcclxuICAgIGZpbHRlci5ub3RGaXJzdDxib29sZWFuPignZGV0ZWN0RXZlbnRDaGFuZ2VzJykuc3Vic2NyaWJlKHYgPT4gdGhpcy50b2dnbGVFdmVudERldGVjdG9ycyghIXYpKTtcclxuICAgIGZpbHRlci5ub3RGaXJzdDxzdHJpbmc+KCd0aGVtZScpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlZnJlc2hDaGFydCgpKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuX3Jlc2l6ZVN1Yikge1xyXG4gICAgICB0aGlzLl9yZXNpemVTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgICAgdGhpcy5fcmVzaXplU3ViID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fY2hhcnQpIHtcclxuICAgICAgdGhpcy5fY2hhcnQuZGlzcG9zZSgpO1xyXG4gICAgICB0aGlzLl9jaGFydCA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0RvQ2hlY2soKSB7XHJcbiAgICAvLyBObyBoZWF2eSB3b3JrIGluIERvQ2hlY2shXHJcbiAgICBpZiAodGhpcy5fY2hhcnQgJiYgdGhpcy5hdXRvUmVzaXplKSB7XHJcbiAgICAgIGNvbnN0IG9mZnNldFdpZHRoID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgICBjb25zdCBvZmZzZXRIZWlnaHQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG5cclxuICAgICAgaWYgKHRoaXMuY3VycmVudE9mZnNldFdpZHRoICE9PSBvZmZzZXRXaWR0aCB8fCB0aGlzLmN1cnJlbnRPZmZzZXRIZWlnaHQgIT09IG9mZnNldEhlaWdodCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudE9mZnNldFdpZHRoID0gb2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50T2Zmc2V0SGVpZ2h0ID0gb2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgIHRoaXMuX3Jlc2l6ZSQubmV4dCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaW5pdENoYXJ0KCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0Q2hhcnQoKSB7XHJcbiAgICB0aGlzLm9uT3B0aW9uc0NoYW5nZSh0aGlzLm9wdGlvbnMpO1xyXG5cclxuICAgIGlmICh0aGlzLm1lcmdlICYmIHRoaXMuX2NoYXJ0KSB7XHJcbiAgICAgIHRoaXMuc2V0T3B0aW9uKHRoaXMubWVyZ2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbk9wdGlvbnNDaGFuZ2Uob3B0OiBFQ2hhcnRPcHRpb24pIHtcclxuICAgIGlmIChvcHQpIHtcclxuICAgICAgaWYgKCF0aGlzLl9jaGFydCkge1xyXG4gICAgICAgIHRoaXMuX2NoYXJ0ID0gdGhpcy5jcmVhdGVDaGFydCgpO1xyXG5cclxuICAgICAgICAvLyBzdWJzY3JpYmUgdG8gX3Jlc2l6ZSQgYW5kIGRlYm91bmNlZFxyXG4gICAgICAgIHRoaXMuX3Jlc2l6ZVN1YiA9IHRoaXMuX3Jlc2l6ZSQucGlwZShkZWJvdW5jZVRpbWUoNTApKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2NoYXJ0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoYXJ0LnJlc2l6ZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBvdXRwdXQgZWNoYXJ0IGluc3RhbmNlOlxyXG4gICAgICAgIHRoaXMuY2hhcnRJbml0LmVtaXQodGhpcy5fY2hhcnQpO1xyXG5cclxuICAgICAgICAvLyByZWdpc3RlciBldmVudHM6XHJcbiAgICAgICAgaWYgKHRoaXMuZGV0ZWN0RXZlbnRDaGFuZ2VzKSB7XHJcbiAgICAgICAgICB0aGlzLnJlZ2lzdGVyRXZlbnRzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLl9jaGFydC5zZXRPcHRpb24odGhpcy5vcHRpb25zLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVnaXN0ZXJFdmVudHMoKSB7XHJcbiAgICBpZiAodGhpcy5fY2hhcnQpIHtcclxuICAgICAgY29uc3QgZXZlbnRzID0gRUNoYXJ0RXZlbnRzLkFsbDtcclxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGV2ZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIHRoaXMuX2NoYXJ0Lm9uKGV2ZW50c1tpXSwgdGhpcy5ldmVudEhhbmRsZXIsIHRoaXMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVucmVnaXN0ZXJFdmVudHMoKSB7XHJcbiAgICBpZiAodGhpcy5fY2hhcnQpIHtcclxuICAgICAgY29uc3QgZXZlbnRzID0gRUNoYXJ0RXZlbnRzLkFsbDtcclxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGV2ZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIHRoaXMuX2NoYXJ0Lm9mZihldmVudHNbaV0sIHRoaXMuZXZlbnRIYW5kbGVyKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICBpZiAodGhpcy5fY2hhcnQpIHtcclxuICAgICAgdGhpcy5fY2hhcnQuY2xlYXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZUxvYWRpbmcobG9hZGluZzogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuX2NoYXJ0KSB7XHJcbiAgICAgIGxvYWRpbmcgPyB0aGlzLl9jaGFydC5zaG93TG9hZGluZyh0aGlzLmxvYWRpbmdUeXBlLCB0aGlzLmxvYWRpbmdPcHRzKSA6IHRoaXMuX2NoYXJ0LmhpZGVMb2FkaW5nKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRPcHRpb24ob3B0aW9uOiBhbnksIG9wdHM/OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLl9jaGFydCkge1xyXG4gICAgICB0aGlzLl9jaGFydC5zZXRPcHRpb24ob3B0aW9uLCBvcHRzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZlbnRIYW5kbGVyKGV2ZW50KSB7XHJcbiAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcclxuICAgICAgY2FzZSBFQ2hhcnRFdmVudHMuQ2xpY2s6XHJcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmNoYXJ0Q2xpY2suZW1pdChldmVudCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVDaGFydEV2ZW50cy5EYmxDbGljazpcclxuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMuY2hhcnREYmxDbGljay5lbWl0KGV2ZW50KSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUNoYXJ0RXZlbnRzLk1vdXNlRG93bjpcclxuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMuY2hhcnRNb3VzZURvd24uZW1pdChldmVudCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVDaGFydEV2ZW50cy5Nb3VzZVVwOlxyXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5jaGFydE1vdXNlVXAuZW1pdChldmVudCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVDaGFydEV2ZW50cy5Nb3VzZU92ZXI6XHJcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmNoYXJ0TW91c2VPdmVyLmVtaXQoZXZlbnQpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQ2hhcnRFdmVudHMuTW91c2VPdXQ6XHJcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmNoYXJ0TW91c2VPdXQuZW1pdChldmVudCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVDaGFydEV2ZW50cy5HbG9iYWxPdXQ6XHJcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmNoYXJ0R2xvYmFsT3V0LmVtaXQoZXZlbnQpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQ2hhcnRFdmVudHMuQ29udGV4dE1lbnU6XHJcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmNoYXJ0Q29udGV4dE1lbnUuZW1pdChldmVudCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVDaGFydEV2ZW50cy5EYXRhWm9vbTpcclxuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMuY2hhcnREYXRhWm9vbS5lbWl0KGV2ZW50KSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUNoYXJ0RXZlbnRzLk1hcFNlbGVjdENoYW5nZWQ6XHJcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLmNoYXJ0TWFwU2VsZWN0Q2hhbmdlZC5lbWl0KGV2ZW50KSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUNoYXJ0RXZlbnRzLk1hcFNlbGVjdGVkOlxyXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5jaGFydE1hcFNlbGVjdGVkLmVtaXQoZXZlbnQpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQ2hhcnRFdmVudHMuTWFwVW5zZWxlY3RlZDpcclxuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHRoaXMuY2hhcnRNYXBVbnNlbGVjdGVkLmVtaXQoZXZlbnQpKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdG9nZ2xlRXZlbnREZXRlY3RvcnMoZGV0ZWN0OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fY2hhcnQpIHtcclxuICAgICAgZGV0ZWN0ID8gdGhpcy5yZWdpc3RlckV2ZW50cygpIDogdGhpcy51bnJlZ2lzdGVyRXZlbnRzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlZnJlc2hDaGFydCgpIHtcclxuICAgIHRoaXMubmdPbkRlc3Ryb3koKTtcclxuICAgIHRoaXMuaW5pdENoYXJ0KCk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5neEVjaGFydHNEaXJlY3RpdmUgfSBmcm9tICcuL25neC1lY2hhcnRzLmRpcmVjdGl2ZSc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGltcG9ydHM6IFtdLFxyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgTmd4RWNoYXJ0c0RpcmVjdGl2ZVxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgTmd4RWNoYXJ0c0RpcmVjdGl2ZVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE5neEVjaGFydHNNb2R1bGUgeyB9XHJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFDQSxBQUVBO0lBQ0Usc0JBQW9CLFFBQXVCO1FBQXZCLGFBQVEsR0FBUixRQUFRLENBQWU7S0FBSzs7Ozs7SUFFekMsZUFBRTs7OztJQUFULFVBQVUsT0FBc0I7UUFDOUIsT0FBTyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUNsQzs7Ozs7O0lBRUQsK0JBQVE7Ozs7O0lBQVIsVUFBWSxHQUFXO1FBQ3JCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTs7Z0JBQ2hCLEtBQUssR0FBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVk7WUFFaEQsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7Z0JBQ3pDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2xCO1NBQ0Y7UUFDRCxPQUFPLEtBQUssRUFBRSxDQUFDO0tB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 | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWVjaGFydHMuanMubWFwIiwic291cmNlcyI6WyJuZzovL25neC1lY2hhcnRzL2xpYi9jaGFuZ2UtZmlsdGVyLnRzIiwibmc6Ly9uZ3gtZWNoYXJ0cy9saWIvbmd4LWVjaGFydHMuZGlyZWN0aXZlLnRzIiwibmc6Ly9uZ3gtZWNoYXJ0cy9saWIvbmd4LWVjaGFydHMubW9kdWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIGVtcHR5IH0gZnJvbSAncnhqcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hhbmdlRmlsdGVyIHtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7IH1cclxuXHJcbiAgc3RhdGljIG9mKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIHJldHVybiBuZXcgQ2hhbmdlRmlsdGVyKGNoYW5nZXMpO1xyXG4gIH1cclxuXHJcbiAgbm90RW1wdHk8VD4oa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIGlmICh0aGlzLl9jaGFuZ2VzW2tleV0pIHtcclxuICAgICAgY29uc3QgdmFsdWU6IFQgPSB0aGlzLl9jaGFuZ2VzW2tleV0uY3VycmVudFZhbHVlO1xyXG5cclxuICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gb2YodmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIGhhczxUPihrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgaWYgKHRoaXMuX2NoYW5nZXNba2V5XSkge1xyXG4gICAgICBjb25zdCB2YWx1ZTogVCA9IHRoaXMuX2NoYW5nZXNba2V5XS5jdXJyZW50VmFsdWU7XHJcbiAgICAgIHJldHVybiBvZih2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZW1wdHkoKTtcclxuICB9XHJcblxyXG4gIG5vdEZpcnN0PFQ+KGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICBpZiAodGhpcy5fY2hhbmdlc1trZXldICYmICF0aGlzLl9jaGFuZ2VzW2tleV0uaXNGaXJzdENoYW5nZSgpKSB7XHJcbiAgICAgIGNvbnN0IHZhbHVlOiBUID0gdGhpcy5fY2hhbmdlc1trZXldLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgcmV0dXJuIG9mKHZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBlbXB0eSgpO1xyXG4gIH1cclxuXHJcbiAgbm90Rmlyc3RBbmRFbXB0eTxUPihrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgaWYgKHRoaXMuX2NoYW5nZXNba2V5XSAmJiAhdGhpcy5fY2hhbmdlc1trZXldLmlzRmlyc3RDaGFuZ2UoKSkge1xyXG4gICAgICBjb25zdCB2YWx1ZTogVCA9IHRoaXMuX2NoYW5nZXNba2V5XS5jdXJyZW50VmFsdWU7XHJcblxyXG4gICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBvZih2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBlbXB0eSgpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIERvQ2hlY2ssIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE5nWm9uZSwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEVDaGFydE9wdGlvbiwgRUNoYXJ0cywgaW5pdCB9IGZyb20gJ2VjaGFydHMnO1xyXG5pbXBvcnQgeyBmcm9tRXZlbnQsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ2hhbmdlRmlsdGVyIH0gZnJvbSAnLi9jaGFuZ2UtZmlsdGVyJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnZWNoYXJ0cywgW2VjaGFydHNdJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5neEVjaGFydHNEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBEb0NoZWNrLCBBZnRlclZpZXdJbml0IHtcclxuICBASW5wdXQoKSBvcHRpb25zOiBFQ2hhcnRPcHRpb247XHJcbiAgQElucHV0KCkgdGhlbWU6IHN0cmluZztcclxuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGluaXRPcHRzOiB7XHJcbiAgICBkZXZpY2VQaXhlbFJhdGlvPzogbnVtYmVyXHJcbiAgICByZW5kZXJlcj86IHN0cmluZ1xyXG4gICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmdcclxuICAgIGhlaWdodD86IG51bWJlciB8IHN0cmluZ1xyXG4gIH07XHJcbiAgQElucHV0KCkgbWVyZ2U6IEVDaGFydE9wdGlvbjtcclxuICBASW5wdXQoKSBhdXRvUmVzaXplID0gdHJ1ZTtcclxuICBASW5wdXQoKSBsb2FkaW5nVHlwZSA9ICdkZWZhdWx0JztcclxuICBASW5wdXQoKSBsb2FkaW5nT3B0czogb2JqZWN0O1xyXG4gIEBJbnB1dCgpIGRldGVjdEV2ZW50Q2hhbmdlcyA9IHRydWU7IC8vIGRlcHJlY2F0ZWQsIGxlZnQgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucyB0byBhdm9pZCB0cmlnZ2VyaW5nIG1ham9yIHZlcnNpb25cclxuXHJcbiAgLy8gbmd4LWVjaGFydHMgZXZlbnRzXHJcbiAgQE91dHB1dCgpIGNoYXJ0SW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8RUNoYXJ0cz4oKTtcclxuXHJcbiAgLy8gZWNoYXJ0cyBtb3VzZSBldmVudHNcclxuICBAT3V0cHV0KCkgY2hhcnRDbGljayA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdjbGljaycpO1xyXG4gIEBPdXRwdXQoKSBjaGFydERibENsaWNrID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ2RibGNsaWNrJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TW91c2VEb3duID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ21vdXNlZG93bicpO1xyXG4gIEBPdXRwdXQoKSBjaGFydE1vdXNlTW92ZSA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdtb3VzZW1vdmUnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRNb3VzZVVwID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ21vdXNldXAnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRNb3VzZU92ZXIgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnbW91c2VvdmVyJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TW91c2VPdXQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnbW91c2VvdXQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRHbG9iYWxPdXQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnZ2xvYmFsb3V0Jyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0Q29udGV4dE1lbnUgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnY29udGV4dG1lbnUnKTtcclxuXHJcbiAgLy8gZWNoYXJ0cyBtb3VzZSBldmVudHNcclxuICBAT3V0cHV0KCkgY2hhcnRMZWdlbmRTZWxlY3RDaGFuZ2VkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ2xlZ2VuZHNlbGVjdGNoYW5nZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRMZWdlbmRTZWxlY3RlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdsZWdlbmRzZWxlY3RlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydExlZ2VuZFVuc2VsZWN0ZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnbGVnZW5kdW5zZWxlY3RlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydExlZ2VuZFNjcm9sbCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdsZWdlbmRzY3JvbGwnKTtcclxuICBAT3V0cHV0KCkgY2hhcnREYXRhWm9vbSA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdkYXRhem9vbScpO1xyXG4gIEBPdXRwdXQoKSBjaGFydERhdGFSYW5nZVNlbGVjdGVkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ2RhdGFyYW5nZXNlbGVjdGVkJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0VGltZWxpbmVDaGFuZ2VkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ3RpbWVsaW5lY2hhbmdlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydFRpbWVsaW5lUGxheUNoYW5nZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgndGltZWxpbmVwbGF5Y2hhbmdlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydFJlc3RvcmUgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgncmVzdG9yZScpO1xyXG4gIEBPdXRwdXQoKSBjaGFydERhdGFWaWV3Q2hhbmdlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdkYXRhdmlld2NoYW5nZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRNYWdpY1R5cGVDaGFuZ2VkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ21hZ2ljdHlwZWNoYW5nZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRQaWVTZWxlY3RDaGFuZ2VkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ3BpZXNlbGVjdGNoYW5nZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRQaWVTZWxlY3RlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdwaWVzZWxlY3RlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydFBpZVVuc2VsZWN0ZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgncGlldW5zZWxlY3RlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydE1hcFNlbGVjdENoYW5nZWQgPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnbWFwc2VsZWN0Y2hhbmdlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydE1hcFNlbGVjdGVkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ21hcHNlbGVjdGVkJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0TWFwVW5zZWxlY3RlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdtYXB1bnNlbGVjdGVkJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0QXhpc0FyZWFTZWxlY3RlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdheGlzYXJlYXNlbGVjdGVkJyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0Rm9jdXNOb2RlQWRqYWNlbmN5ID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ2ZvY3Vzbm9kZWFkamFjZW5jeScpO1xyXG4gIEBPdXRwdXQoKSBjaGFydFVuZm9jdXNOb2RlQWRqYWNlbmN5ID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ3VuZm9jdXNub2RlYWRqYWNlbmN5Jyk7XHJcbiAgQE91dHB1dCgpIGNoYXJ0QnJ1c2ggPSB0aGlzLmNyZWF0ZUxhenlFdmVudCgnYnJ1c2gnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRCcnVzaFNlbGVjdGVkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ2JydXNoc2VsZWN0ZWQnKTtcclxuICBAT3V0cHV0KCkgY2hhcnRSZW5kZXJlZCA9IHRoaXMuY3JlYXRlTGF6eUV2ZW50KCdyZW5kZXJlZCcpO1xyXG4gIEBPdXRwdXQoKSBjaGFydEZpbmlzaGVkID0gdGhpcy5jcmVhdGVMYXp5RXZlbnQoJ2ZpbmlzaGVkJyk7XHJcblxyXG4gIHByaXZhdGUgY2hhcnQ6IEVDaGFydHM7XHJcbiAgcHJpdmF0ZSBjdXJyZW50T2Zmc2V0V2lkdGggPSAwO1xyXG4gIHByaXZhdGUgY3VycmVudE9mZnNldEhlaWdodCA9IDA7XHJcbiAgcHJpdmF0ZSBjdXJyZW50V2luZG93V2lkdGg6IG51bWJlcjtcclxuICBwcml2YXRlIHJlc2l6ZVN1YjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmLCBwcml2YXRlIG5nWm9uZTogTmdab25lKSB7IH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgY29uc3QgZmlsdGVyID0gQ2hhbmdlRmlsdGVyLm9mKGNoYW5nZXMpO1xyXG4gICAgZmlsdGVyLm5vdEZpcnN0QW5kRW1wdHk8YW55Pignb3B0aW9ucycpLnN1YnNjcmliZShvcHQgPT4gdGhpcy5vbk9wdGlvbnNDaGFuZ2Uob3B0KSk7XHJcbiAgICBmaWx0ZXIubm90Rmlyc3RBbmRFbXB0eTxhbnk+KCdtZXJnZScpLnN1YnNjcmliZShvcHQgPT4gdGhpcy5zZXRPcHRpb24ob3B0KSk7XHJcbiAgICBmaWx0ZXIuaGFzPGJvb2xlYW4+KCdsb2FkaW5nJykuc3Vic2NyaWJlKHYgPT4gdGhpcy50b2dnbGVMb2FkaW5nKCEhdikpO1xyXG4gICAgZmlsdGVyLm5vdEZpcnN0PHN0cmluZz4oJ3RoZW1lJykuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVmcmVzaENoYXJ0KCkpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnJlc2l6ZVN1YiA9IGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKS5waXBlKGRlYm91bmNlVGltZSg1MCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmF1dG9SZXNpemUgJiYgd2luZG93LmlubmVyV2lkdGggIT09IHRoaXMuY3VycmVudFdpbmRvd1dpZHRoKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50V2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRPZmZzZXRXaWR0aCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRPZmZzZXRIZWlnaHQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgIHRoaXMucmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnJlc2l6ZVN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0RvQ2hlY2soKSB7XHJcbiAgICAvLyBObyBoZWF2eSB3b3JrIGluIERvQ2hlY2shXHJcbiAgICBpZiAodGhpcy5jaGFydCAmJiB0aGlzLmF1dG9SZXNpemUpIHtcclxuICAgICAgY29uc3Qgb2Zmc2V0V2lkdGggPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XHJcbiAgICAgIGNvbnN0IG9mZnNldEhlaWdodCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAodGhpcy5jdXJyZW50T2Zmc2V0V2lkdGggIT09IG9mZnNldFdpZHRoIHx8IHRoaXMuY3VycmVudE9mZnNldEhlaWdodCAhPT0gb2Zmc2V0SGVpZ2h0KSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50T2Zmc2V0V2lkdGggPSBvZmZzZXRXaWR0aDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRPZmZzZXRIZWlnaHQgPSBvZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgdGhpcy5yZXNpemUoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluaXRDaGFydCgpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGlzcG9zZSgpIHtcclxuICAgIGlmICh0aGlzLmNoYXJ0KSB7XHJcbiAgICAgIHRoaXMuY2hhcnQuZGlzcG9zZSgpO1xyXG4gICAgICB0aGlzLmNoYXJ0ID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzaXplKCkge1xyXG4gICAgaWYgKHRoaXMuY2hhcnQpIHtcclxuICAgICAgdGhpcy5jaGFydC5yZXNpemUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdG9nZ2xlTG9hZGluZyhsb2FkaW5nOiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5jaGFydCkge1xyXG4gICAgICBsb2FkaW5nID8gdGhpcy5jaGFydC5zaG93TG9hZGluZyh0aGlzLmxvYWRpbmdUeXBlLCB0aGlzLmxvYWRpbmdPcHRzKSA6IHRoaXMuY2hhcnQuaGlkZUxvYWRpbmcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0T3B0aW9uKG9wdGlvbjogYW55LCBvcHRzPzogYW55KSB7XHJcbiAgICBpZiAodGhpcy5jaGFydCkge1xyXG4gICAgICB0aGlzLmNoYXJ0LnNldE9wdGlvbihvcHRpb24sIG9wdHMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoQ2hhcnQoKSB7XHJcbiAgICB0aGlzLmRpc3Bvc2UoKTtcclxuICAgIHRoaXMuaW5pdENoYXJ0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUNoYXJ0KCkge1xyXG4gICAgdGhpcy5jdXJyZW50V2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICAgIHRoaXMuY3VycmVudE9mZnNldFdpZHRoID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgdGhpcy5jdXJyZW50T2Zmc2V0SGVpZ2h0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgIGNvbnN0IGRvbSA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcclxuXHJcbiAgICBpZiAod2luZG93ICYmIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKSB7XHJcbiAgICAgIGNvbnN0IHByb3AgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb20sIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2hlaWdodCcpO1xyXG4gICAgICBpZiAoKCFwcm9wIHx8IHByb3AgPT09ICcwcHgnKSAmJlxyXG4gICAgICAgICghZG9tLnN0eWxlLmhlaWdodCB8fCBkb20uc3R5bGUuaGVpZ2h0ID09PSAnMHB4JykpIHtcclxuICAgICAgICBkb20uc3R5bGUuaGVpZ2h0ID0gJzQwMHB4JztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiBpbml0KGRvbSwgdGhpcy50aGVtZSwgdGhpcy5pbml0T3B0cykpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0Q2hhcnQoKSB7XHJcbiAgICB0aGlzLm9uT3B0aW9uc0NoYW5nZSh0aGlzLm9wdGlvbnMpO1xyXG5cclxuICAgIGlmICh0aGlzLm1lcmdlICYmIHRoaXMuY2hhcnQpIHtcclxuICAgICAgdGhpcy5zZXRPcHRpb24odGhpcy5tZXJnZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uT3B0aW9uc0NoYW5nZShvcHQ6IEVDaGFydE9wdGlvbikge1xyXG4gICAgaWYgKG9wdCkge1xyXG4gICAgICBpZiAoIXRoaXMuY2hhcnQpIHtcclxuICAgICAgICB0aGlzLmNoYXJ0ID0gdGhpcy5jcmVhdGVDaGFydCgpO1xyXG4gICAgICAgIHRoaXMuY2hhcnRJbml0LmVtaXQodGhpcy5jaGFydCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY2hhcnQuc2V0T3B0aW9uKHRoaXMub3B0aW9ucywgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBhbGxvd3MgdG8gbGF6aWx5IGJpbmQgdG8gb25seSB0aG9zZSBldmVudHMgdGhhdCBhcmUgcmVxdWVzdGVkIHRocm91Z2ggdGhlIGBAT3V0cHV0YCBieSBwYXJlbnQgY29tcG9uZW50c1xyXG4gIC8vIHNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81MTc4Nzk3Mi9vcHRpbWFsLXJlZW50ZXJpbmctdGhlLW5nem9uZS1mcm9tLWV2ZW50ZW1pdHRlci1ldmVudCBmb3IgbW9yZSBpbmZvXHJcbiAgcHJpdmF0ZSBjcmVhdGVMYXp5RXZlbnQ8VD4oZXZlbnROYW1lOiBzdHJpbmcpOiBFdmVudEVtaXR0ZXI8VD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hhcnRJbml0LnBpcGUoXHJcbiAgICAgIHN3aXRjaE1hcCgoY2hhcnQ6IEVDaGFydHMpID0+IG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcclxuICAgICAgICBjaGFydC5vbihldmVudE5hbWUsIChkYXRhOiBUKSA9PiB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gb2JzZXJ2ZXIubmV4dChkYXRhKSkpO1xyXG4gICAgICAgIHJldHVybiBudWxsOyAvLyBubyBuZWVkIHRvIHJlYWN0IG9uIHVuc3Vic2NyaWJlIGFzIGxvbmcgYXMgdGhlIGBkaXNwb3NlKClgIGlzIGNhbGxlZCBpbiBuZ09uRGVzdHJveVxyXG4gICAgICB9KSlcclxuICAgICkgYXMgRXZlbnRFbWl0dGVyPFQ+O1xyXG4gIH1cclxuXHJcbn1cclxuIiwiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmd4RWNoYXJ0c0RpcmVjdGl2ZSB9IGZyb20gJy4vbmd4LWVjaGFydHMuZGlyZWN0aXZlJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW10sXHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBOZ3hFY2hhcnRzRGlyZWN0aXZlXHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBOZ3hFY2hhcnRzRGlyZWN0aXZlXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd4RWNoYXJ0c01vZHVsZSB7IH1cclxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUNBLEFBRUE7SUFDRSxzQkFBb0IsUUFBdUI7UUFBdkIsYUFBUSxHQUFSLFFBQVEsQ0FBZTtLQUFLOzs7OztJQUV6QyxlQUFFOzs7O0lBQVQsVUFBVSxPQUFzQjtRQUM5QixPQUFPLElBQUksWUFBWSxD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 |
@@ -1,6 +0,6 @@ | ||
import { ElementRef, EventEmitter, OnChanges, OnDestroy, SimpleChanges, NgZone, DoCheck, AfterViewInit } from '@angular/core'; | ||
import { AfterViewInit, DoCheck, ElementRef, EventEmitter, NgZone, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core'; | ||
import { EChartOption } from 'echarts'; | ||
export declare class NgxEchartsDirective implements OnChanges, OnDestroy, DoCheck, AfterViewInit { | ||
export declare class NgxEchartsDirective implements OnChanges, OnDestroy, OnInit, DoCheck, AfterViewInit { | ||
private el; | ||
private _ngZone; | ||
private ngZone; | ||
options: EChartOption; | ||
@@ -19,43 +19,57 @@ theme: string; | ||
loadingOpts: object; | ||
/** | ||
* Whether to register event handlers on echartInstance. Default is true. | ||
* Use it to avoid unwanted change detection, if you want to optimize the performance. | ||
*/ | ||
detectEventChanges: boolean; | ||
chartInit: EventEmitter<any>; | ||
chartClick: EventEmitter<any>; | ||
chartDblClick: EventEmitter<any>; | ||
chartMouseDown: EventEmitter<any>; | ||
chartMouseUp: EventEmitter<any>; | ||
chartMouseOver: EventEmitter<any>; | ||
chartMouseOut: EventEmitter<any>; | ||
chartGlobalOut: EventEmitter<any>; | ||
chartContextMenu: EventEmitter<any>; | ||
chartDataZoom: EventEmitter<any>; | ||
chartMapSelectChanged: EventEmitter<any>; | ||
chartMapSelected: EventEmitter<any>; | ||
chartMapUnselected: EventEmitter<any>; | ||
private _chart; | ||
chartClick: EventEmitter<{}>; | ||
chartDblClick: EventEmitter<{}>; | ||
chartMouseDown: EventEmitter<{}>; | ||
chartMouseMove: EventEmitter<{}>; | ||
chartMouseUp: EventEmitter<{}>; | ||
chartMouseOver: EventEmitter<{}>; | ||
chartMouseOut: EventEmitter<{}>; | ||
chartGlobalOut: EventEmitter<{}>; | ||
chartContextMenu: EventEmitter<{}>; | ||
chartLegendSelectChanged: EventEmitter<{}>; | ||
chartLegendSelected: EventEmitter<{}>; | ||
chartLegendUnselected: EventEmitter<{}>; | ||
chartLegendScroll: EventEmitter<{}>; | ||
chartDataZoom: EventEmitter<{}>; | ||
chartDataRangeSelected: EventEmitter<{}>; | ||
chartTimelineChanged: EventEmitter<{}>; | ||
chartTimelinePlayChanged: EventEmitter<{}>; | ||
chartRestore: EventEmitter<{}>; | ||
chartDataViewChanged: EventEmitter<{}>; | ||
chartMagicTypeChanged: EventEmitter<{}>; | ||
chartPieSelectChanged: EventEmitter<{}>; | ||
chartPieSelected: EventEmitter<{}>; | ||
chartPieUnselected: EventEmitter<{}>; | ||
chartMapSelectChanged: EventEmitter<{}>; | ||
chartMapSelected: EventEmitter<{}>; | ||
chartMapUnselected: EventEmitter<{}>; | ||
chartAxisAreaSelected: EventEmitter<{}>; | ||
chartFocusNodeAdjacency: EventEmitter<{}>; | ||
chartUnfocusNodeAdjacency: EventEmitter<{}>; | ||
chartBrush: EventEmitter<{}>; | ||
chartBrushSelected: EventEmitter<{}>; | ||
chartRendered: EventEmitter<{}>; | ||
chartFinished: EventEmitter<{}>; | ||
private chart; | ||
private currentOffsetWidth; | ||
private currentOffsetHeight; | ||
private currentWindowWidth; | ||
private _resize$; | ||
private _resizeSub; | ||
constructor(el: ElementRef, _ngZone: NgZone); | ||
private createChart; | ||
onWindowResize(event: Event): void; | ||
private resizeSub; | ||
constructor(el: ElementRef, ngZone: NgZone); | ||
ngOnChanges(changes: SimpleChanges): void; | ||
ngOnInit(): void; | ||
ngOnDestroy(): void; | ||
ngDoCheck(): void; | ||
ngAfterViewInit(): void; | ||
private dispose; | ||
private resize; | ||
private toggleLoading; | ||
private setOption; | ||
private refreshChart; | ||
private createChart; | ||
private initChart; | ||
private onOptionsChange; | ||
private registerEvents; | ||
private unregisterEvents; | ||
clear(): void; | ||
toggleLoading(loading: boolean): void; | ||
setOption(option: any, opts?: any): void; | ||
private eventHandler; | ||
private toggleEventDetectors; | ||
private refreshChart; | ||
private createLazyEvent; | ||
} |
@@ -1,1 +0,1 @@ | ||
{"__symbolic":"module","version":4,"metadata":{"NgxEchartsModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":3,"character":1},"arguments":[{"imports":[],"declarations":[{"__symbolic":"reference","name":"ɵa"}],"exports":[{"__symbolic":"reference","name":"ɵa"}]}]}],"members":{}},"ɵa":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":10,"character":1},"arguments":[{"selector":"echarts, [echarts]"}]}],"members":{"options":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":14,"character":3}}]}],"theme":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":15,"character":3}}]}],"loading":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":16,"character":3}}]}],"initOpts":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":17,"character":3}}]}],"merge":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":23,"character":3}}]}],"autoResize":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":24,"character":3}}]}],"loadingType":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":25,"character":3}}]}],"loadingOpts":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":26,"character":3}}]}],"detectEventChanges":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":32,"character":3}}]}],"chartInit":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":35,"character":3}}]}],"chartClick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":36,"character":3}}]}],"chartDblClick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":37,"character":3}}]}],"chartMouseDown":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":38,"character":3}}]}],"chartMouseUp":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":39,"character":3}}]}],"chartMouseOver":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":40,"character":3}}]}],"chartMouseOut":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":41,"character":3}}]}],"chartGlobalOut":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":42,"character":3}}]}],"chartContextMenu":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":43,"character":3}}]}],"chartDataZoom":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":44,"character":3}}]}],"chartMapSelectChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":45,"character":3}}]}],"chartMapSelected":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":46,"character":3}}]}],"chartMapUnselected":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":47,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":56,"character":26},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":56,"character":55}]}],"createChart":[{"__symbolic":"method"}],"onWindowResize":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":75,"character":3},"arguments":["window:resize",["$event"]]}]}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"ngDoCheck":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"initChart":[{"__symbolic":"method"}],"onOptionsChange":[{"__symbolic":"method"}],"registerEvents":[{"__symbolic":"method"}],"unregisterEvents":[{"__symbolic":"method"}],"clear":[{"__symbolic":"method"}],"toggleLoading":[{"__symbolic":"method"}],"setOption":[{"__symbolic":"method"}],"eventHandler":[{"__symbolic":"method"}],"toggleEventDetectors":[{"__symbolic":"method"}],"refreshChart":[{"__symbolic":"method"}]}}},"origins":{"NgxEchartsModule":"./lib/ngx-echarts.module","ɵa":"./lib/ngx-echarts.directive"},"importAs":"ngx-echarts"} | ||
{"__symbolic":"module","version":4,"metadata":{"NgxEchartsModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":3,"character":1},"arguments":[{"imports":[],"declarations":[{"__symbolic":"reference","name":"ɵa"}],"exports":[{"__symbolic":"reference","name":"ɵa"}]}]}],"members":{}},"ɵa":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":6,"character":1},"arguments":[{"selector":"echarts, [echarts]"}]}],"members":{"options":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":10,"character":3}}]}],"theme":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":11,"character":3}}]}],"loading":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":12,"character":3}}]}],"initOpts":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":13,"character":3}}]}],"merge":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":19,"character":3}}]}],"autoResize":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":20,"character":3}}]}],"loadingType":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":21,"character":3}}]}],"loadingOpts":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":22,"character":3}}]}],"detectEventChanges":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":23,"character":3}}]}],"chartInit":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":26,"character":3}}]}],"chartClick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":29,"character":3}}]}],"chartDblClick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":30,"character":3}}]}],"chartMouseDown":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":31,"character":3}}]}],"chartMouseMove":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":32,"character":3}}]}],"chartMouseUp":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":33,"character":3}}]}],"chartMouseOver":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":34,"character":3}}]}],"chartMouseOut":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":35,"character":3}}]}],"chartGlobalOut":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":36,"character":3}}]}],"chartContextMenu":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":37,"character":3}}]}],"chartLegendSelectChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":40,"character":3}}]}],"chartLegendSelected":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":41,"character":3}}]}],"chartLegendUnselected":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":42,"character":3}}]}],"chartLegendScroll":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":43,"character":3}}]}],"chartDataZoom":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":44,"character":3}}]}],"chartDataRangeSelected":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":45,"character":3}}]}],"chartTimelineChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":46,"character":3}}]}],"chartTimelinePlayChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":47,"character":3}}]}],"chartRestore":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":48,"character":3}}]}],"chartDataViewChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":49,"character":3}}]}],"chartMagicTypeChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":50,"character":3}}]}],"chartPieSelectChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":51,"character":3}}]}],"chartPieSelected":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":52,"character":3}}]}],"chartPieUnselected":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":53,"character":3}}]}],"chartMapSelectChanged":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":54,"character":3}}]}],"chartMapSelected":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":55,"character":3}}]}],"chartMapUnselected":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":56,"character":3}}]}],"chartAxisAreaSelected":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":57,"character":3}}]}],"chartFocusNodeAdjacency":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":58,"character":3}}]}],"chartUnfocusNodeAdjacency":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":59,"character":3}}]}],"chartBrush":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":60,"character":3}}]}],"chartBrushSelected":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":61,"character":3}}]}],"chartRendered":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":62,"character":3}}]}],"chartFinished":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":63,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":71,"character":26},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":71,"character":54}]}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"ngDoCheck":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"dispose":[{"__symbolic":"method"}],"resize":[{"__symbolic":"method"}],"toggleLoading":[{"__symbolic":"method"}],"setOption":[{"__symbolic":"method"}],"refreshChart":[{"__symbolic":"method"}],"createChart":[{"__symbolic":"method"}],"initChart":[{"__symbolic":"method"}],"onOptionsChange":[{"__symbolic":"method"}],"createLazyEvent":[{"__symbolic":"method"}]}}},"origins":{"NgxEchartsModule":"./lib/ngx-echarts.module","ɵa":"./lib/ngx-echarts.directive"},"importAs":"ngx-echarts"} |
{ | ||
"name": "ngx-echarts", | ||
"version": "4.0.1", | ||
"version": "4.1.0", | ||
"author": "Xie, Ziyu", | ||
@@ -5,0 +5,0 @@ "license": "MIT", |
@@ -26,3 +26,3 @@ # ngx-echarts | ||
Latest version @npm: | ||
+ `v4.0.1` for Angular >= 6 | ||
+ `v4.1.0` for Angular >= 6 | ||
+ `v2.3.1` for Angular < 6 (Please refer to https://github.com/xieziyu/ngx-echarts/blob/v2.x/README.md) | ||
@@ -33,2 +33,7 @@ | ||
# Latest Update | ||
+ 2018.12.16: v4.1.0 | ||
+ Perfomance update: echarts events are now lazily bounded, so it won't trigger change dectection unexpectedly. Please refer to [PR #154](https://github.com/xieziyu/ngx-echarts/pull/154) for more details. Thanks to [smnbbrv](https://github.com/smnbbrv)! | ||
+ `[detectEventChanges]` is now deprecated. | ||
+ Plenty of echarts event are now [supported](#events). | ||
+ 2018.11.11: v4.0.1 | ||
@@ -51,3 +56,2 @@ + Add map events support: (chartMapSelectChanged), (chartMapSelected), (chartMapUnselected). (by [amirch1](https://github.com/amirch1) - [PR #147](https://github.com/xieziyu/ngx-echarts/pull/147)) | ||
``` | ||
+ No need to configure `angular.json` any more. But we still need to configure `tsconfig.json` currently. | ||
+ Import echarts theme files or other extension files in `main.ts`. Refer to [ECharts Extensions](#echarts-extensions) | ||
@@ -103,30 +107,2 @@ | ||
+ tsconfig.json: | ||
You need to map the echarts path to minified version of echarts in the **compilerOptions** of **"tsconfig.json"** in your project's root (this is important for AoT build): | ||
```diff | ||
{ | ||
..., | ||
"compilerOptions": { | ||
..., | ||
+ "paths": { | ||
+ "echarts": ["node_modules/echarts/dist/echarts.min.js"] | ||
+ } | ||
} | ||
} | ||
``` | ||
+ If you also installed ECharts GL: | ||
```diff | ||
{ | ||
..., | ||
"compilerOptions": { | ||
..., | ||
"paths": { | ||
"echarts": ["node_modules/echarts/dist/echarts.min.js"], | ||
+ "echarts-gl": ["node_modules/echarts-gl/dist/echarts-gl.min.js"] | ||
} | ||
} | ||
} | ||
``` | ||
+ Import other extentions such as themes or `echarts-gl` in your `main.ts`: [ECharts Extensions](#echarts-extensions) | ||
@@ -136,5 +112,5 @@ | ||
## Upgrade from v3.x | ||
1. Remove ECharts related files from `scripts` in `angular.json`, including lib, theme and extension files. | ||
2. Modify `tsconfig.json` according to the installation guidance above. | ||
3. Import necessary theme or extension files in `main.ts`. Refer to [ECharts Extensions](#echarts-extensions). | ||
1. Install `@types/echarts` | ||
2. Import necessary theme or extension files in `main.ts`. Refer to [ECharts Extensions](#echarts-extensions). | ||
3. Remove `echarts` related scripts in `angular.json`. | ||
@@ -297,15 +273,41 @@ # Usage | ||
It supports following event outputs: | ||
+ `chartClick`: It emits the same `params` of `'click'` event | ||
+ `chartDblClick`: It emits the same `params` of `'dblclick'` event | ||
+ `chartMouseDown`: It emits the same `params` of `'mousedown'` event | ||
+ `chartMouseUp`: It emits the same `params` of `'mouseup'` event | ||
+ `chartMouseOver`: It emits the same `params` of `'mouseover'` event | ||
+ `chartMouseOut`: It emits the same `params` of `'mouseout'` event | ||
+ `chartGlobalOut`: It emits the same `params` of `'globalout'` event | ||
+ `chartContextMenu`: It emits the same `params` of `'contextmenu'` event (since v1.2.1) | ||
+ `chartDataZoom`: It emits the same `params` of `'dataZoom'` event (thanks to averhaegen) | ||
+ `chartMapSelectChanged`: It emits the same `params` of `'mapselectchanged'` event (thanks to amirch1) | ||
+ `chartMapSelected`: It emits the same `params` of `'mapselected'` event (thanks to amirch1) | ||
+ `chartMapUnselected`: It emits the same `params` of `'mapunselected'` event (thanks to amirch1) | ||
| @Output | Event | | ||
| ------- | ----- | | ||
| chartInit | Emitted when chart is intialized | | ||
| chartClick | echarts event: `'click'` | | ||
| chartDblClick | echarts event: `'dblclick'` | | ||
| chartMouseDown | echarts event: `'mousedown'` | | ||
| chartMouseMove | echarts event: `'mousemove'` | | ||
| chartMouseUp | echarts event: `'mouseup'` | | ||
| chartMouseOver | echarts event: `'mouseover'` | | ||
| chartMouseOut | echarts event: `'mouseout'` | | ||
| chartGlobalOut | echarts event: `'globalout'` | | ||
| chartContextMenu | echarts event: `'contextmenu'` | | ||
| chartLegendSelectChanged | echarts event: `'legendselectchanged'` | | ||
| chartLegendSelected | echarts event: `'legendselected'` | | ||
| chartLegendUnselected | echarts event: `'legendunselected'` | | ||
| chartLegendScroll | echarts event: `'legendscroll'` | | ||
| chartDataZoom | echarts event: `'datazoom'` | | ||
| chartDataRangeSelected | echarts event: `'datarangeselected'` | | ||
| chartTimelineChanged | echarts event: `'timelinechanged'` | | ||
| chartTimelinePlayChanged | echarts event: `'timelineplaychanged'` | | ||
| chartRestore | echarts event: `'restore'` | | ||
| chartDataViewChanged | echarts event: `'dataviewchanged'` | | ||
| chartMagicTypeChanged | echarts event: `'magictypechanged'` | | ||
| chartPieSelectChanged | echarts event: `'pieselectchanged'` | | ||
| chartPieSelected | echarts event: `'pieselected'` | | ||
| chartPieUnselected | echarts event: `'pieunselected'` | | ||
| chartMapSelectChanged | echarts event: `'mapselectchanged'` | | ||
| chartMapSelected | echarts event: `'mapselected'` | | ||
| chartMapUnselected | echarts event: `'mapunselected'` | | ||
| chartAxisAreaSelected | echarts event: `'axisareaselected'` | | ||
| chartFocusNodeAdjacency | echarts event: `'focusnodeadjacency'` | | ||
| chartUnfocusNodeAdjacency | echarts event: `'unfocusnodeadjacency'` | | ||
| chartBrush | echarts event: `'brush'` | | ||
| chartBrushSelected | echarts event: `'brushselected'` | | ||
| chartRendered | echarts event: `'rendered'` | | ||
| chartFinished | echarts event: `'finished'` | | ||
You can refer to the echarts tutorial: [Events and Actions in ECharts](https://ecomfe.github.io/echarts-doc/public/en/tutorial.html#Events%20and%20Actions%20in%20ECharts) for more details of the event params. You can also refer to the [demo](https://xieziyu.github.io/#/ngx-echarts/demo) page for the detailed example. | ||
@@ -327,2 +329,2 @@ | ||
[npm-badge-url]: https://www.npmjs.com/package/ngx-echarts | ||
[ci-url]: https://travis-ci.org/xieziyu/ngx-echarts | ||
[ci-url]: https://travis-ci.org/xieziyu/ngx-echarts |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
324
313264
26
2459
1