UNPKG

@covalent/echarts

Version:

Teradata UI Platform Echarts Module

156 lines 18.7 kB
import { Component, Input, Directive, TemplateRef, ChangeDetectionStrategy, ElementRef, ChangeDetectorRef, ContentChild, ViewChild, } from '@angular/core'; import { TdChartOptionsService, assignDefined, } from '@covalent/echarts/base'; import * as i0 from "@angular/core"; import * as i1 from "@covalent/echarts/base"; import * as i2 from "@angular/common"; export class TdTooltipContext { } export class TdChartTooltipFormatterDirective { } TdChartTooltipFormatterDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TdChartTooltipFormatterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); TdChartTooltipFormatterDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: TdChartTooltipFormatterDirective, selector: "ng-template[tdTooltipFormatter]", ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TdChartTooltipFormatterDirective, decorators: [{ type: Directive, args: [{ selector: 'ng-template[tdTooltipFormatter]', }] }] }); export class TdChartTooltipComponent { constructor(_changeDetectorRef, _elementRef, _optionsService) { this._changeDetectorRef = _changeDetectorRef; this._elementRef = _elementRef; this._optionsService = _optionsService; this._state = {}; this._context = new TdTooltipContext(); this.config = {}; this.show = true; this.trigger = 'axis'; this.showContent = true; this.alwaysShowContent = false; this.triggerOn = 'mousemove|click'; this.showDelay = 0; this.hideDelay = 0; this.enterable = false; this.confine = false; this.transitionDuration = 0.5; this.backgroundColor = 'rgba(50,50,50,0.7)'; // series this.borderColor = '#333'; // series this.borderWidth = 0; // series this.padding = 5; // series this.textStyle = { // series color: '#FFF', }; } ngOnChanges() { this._setOptions(); } ngOnDestroy() { this._removeOption(); } _setOptions() { const config = assignDefined(this._state, { show: this.show, trigger: this.trigger, axisPointer: this.axisPointer, showContent: this.showContent, alwaysShowContent: this.alwaysShowContent, triggerOn: this.triggerOn, showDelay: this.showDelay, hideDelay: this.hideDelay, enterable: this.enterable, confine: this.confine, transitionDuration: this.transitionDuration, position: this.position, formatter: this.formatter ? this.formatter : this.formatterTemplate ? this._formatter() : undefined, backgroundColor: this.backgroundColor, borderColor: this.borderColor, borderWidth: this.borderWidth, padding: this.padding, textStyle: this.textStyle, extraCssText: this.extraCssText, }, this.config ? this.config : {}); // set tooltip configuration in parent chart and render new configurations this._optionsService.setOption('tooltip', config); } _removeOption() { this._optionsService.clearOption('tooltip'); } _formatter() { return (params, ticket, callback) => { this._context = { $implicit: params, ticket, }; // timeout set since we need to set the HTML at the end of the angular lifecycle when // the tooltip delay is more than 0 setTimeout(() => { callback(ticket, this._elementRef.nativeElement.innerHTML); }); this._changeDetectorRef.markForCheck(); return this._elementRef.nativeElement.innerHTML; }; } } TdChartTooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TdChartTooltipComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.TdChartOptionsService }], target: i0.ɵɵFactoryTarget.Component }); TdChartTooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TdChartTooltipComponent, selector: "td-chart-tooltip", inputs: { config: "config", show: "show", trigger: "trigger", axisPointer: "axisPointer", showContent: "showContent", alwaysShowContent: "alwaysShowContent", triggerOn: "triggerOn", showDelay: "showDelay", hideDelay: "hideDelay", enterable: "enterable", renderMode: "renderMode", confine: "confine", transitionDuration: "transitionDuration", position: "position", formatter: "formatter", backgroundColor: "backgroundColor", borderColor: "borderColor", borderWidth: "borderWidth", padding: "padding", textStyle: "textStyle", extraCssText: "extraCssText" }, queries: [{ propertyName: "formatterTemplate", first: true, predicate: TdChartTooltipFormatterDirective, descendants: true, read: TemplateRef, static: true }], viewQueries: [{ propertyName: "fullTemplate", first: true, predicate: ["tooltipContent"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<ng-template\n #tooltipContent\n [ngTemplateOutlet]=\"formatterTemplate\"\n [ngTemplateOutletContext]=\"_context\"\n></ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TdChartTooltipComponent, decorators: [{ type: Component, args: [{ selector: 'td-chart-tooltip', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template\n #tooltipContent\n [ngTemplateOutlet]=\"formatterTemplate\"\n [ngTemplateOutletContext]=\"_context\"\n></ng-template>\n" }] }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.TdChartOptionsService }]; }, propDecorators: { config: [{ type: Input }], show: [{ type: Input }], trigger: [{ type: Input }], axisPointer: [{ type: Input }], showContent: [{ type: Input }], alwaysShowContent: [{ type: Input }], triggerOn: [{ type: Input }], showDelay: [{ type: Input }], hideDelay: [{ type: Input }], enterable: [{ type: Input }], renderMode: [{ type: Input }], confine: [{ type: Input }], transitionDuration: [{ type: Input }], position: [{ type: Input }], formatter: [{ type: Input }], backgroundColor: [{ type: Input }], borderColor: [{ type: Input }], borderWidth: [{ type: Input }], padding: [{ type: Input }], textStyle: [{ type: Input }], extraCssText: [{ type: Input }], formatterTemplate: [{ type: ContentChild, args: [TdChartTooltipFormatterDirective, { read: TemplateRef, static: true, }] }], fullTemplate: [{ type: ViewChild, args: ['tooltipContent', { static: true }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItZWNoYXJ0cy90b29sdGlwL3NyYy90b29sdGlwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1lY2hhcnRzL3Rvb2x0aXAvc3JjL3Rvb2x0aXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsU0FBUyxFQUNULFdBQVcsRUFDWCx1QkFBdUIsRUFDdkIsVUFBVSxFQUNWLGlCQUFpQixFQUVqQixZQUFZLEVBQ1osU0FBUyxHQUVWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsYUFBYSxHQUlkLE1BQU0sd0JBQXdCLENBQUM7Ozs7QUFFaEMsTUFBTSxPQUFPLGdCQUFnQjtDQUc1QjtBQUtELE1BQU0sT0FBTyxnQ0FBZ0M7OzhIQUFoQyxnQ0FBZ0M7a0hBQWhDLGdDQUFnQzs0RkFBaEMsZ0NBQWdDO2tCQUg1QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQ0FBaUM7aUJBQzVDOztBQVFELE1BQU0sT0FBTyx1QkFBdUI7SUF1Q2xDLFlBQ1Usa0JBQXFDLEVBQ3JDLFdBQXVCLEVBQ3ZCLGVBQXNDO1FBRnRDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBbUI7UUFDckMsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDdkIsb0JBQWUsR0FBZixlQUFlLENBQXVCO1FBekN4QyxXQUFNLEdBQVEsRUFBRSxDQUFDO1FBRXpCLGFBQVEsR0FBcUIsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBRTNDLFdBQU0sR0FBUSxFQUFFLENBQUM7UUFFakIsU0FBSSxHQUFJLElBQUksQ0FBQztRQUNiLFlBQU8sR0FBc0IsTUFBTSxDQUFDO1FBRXBDLGdCQUFXLEdBQUksSUFBSSxDQUFDO1FBQ3BCLHNCQUFp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bnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgRGlyZWN0aXZlLFxuICBUZW1wbGF0ZVJlZixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIEVsZW1lbnRSZWYsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBPbkNoYW5nZXMsXG4gIENvbnRlbnRDaGlsZCxcbiAgVmlld0NoaWxkLFxuICBPbkRlc3Ryb3ksXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBUZENoYXJ0T3B0aW9uc1NlcnZpY2UsXG4gIGFzc2lnbkRlZmluZWQsXG4gIFRkVG9vbHRpcFRyaWdnZXIsXG4gIFRkVG9vbHRpcFRyaWdnZXJPbixcbiAgVGRUb29sdGlwUG9zaXRpb24sXG59IGZyb20gJ0Bjb3ZhbGVudC9lY2hhcnRzL2Jhc2UnO1xuXG5leHBvcnQgY2xhc3MgVGRUb29sdGlwQ29udGV4dCB7XG4gICRpbXBsaWNpdDogYW55O1xuICB0aWNrZXQhOiBzdHJpbmc7XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ25nLXRlbXBsYXRlW3RkVG9vbHRpcEZvcm1hdHRlcl0nLFxufSlcbmV4cG9ydCBjbGFzcyBUZENoYXJ0VG9vbHRpcEZvcm1hdHRlckRpcmVjdGl2ZSB7fVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZC1jaGFydC10b29sdGlwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Rvb2x0aXAuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVGRDaGFydFRvb2x0aXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX3N0YXRlOiBhbnkgPSB7fTtcblxuICBfY29udGV4dDogVGRUb29sdGlwQ29udGV4dCA9IG5ldyBUZFRvb2x0aXBDb250ZXh0KCk7XG5cbiAgQElucHV0KCkgY29uZmlnOiBhbnkgPSB7fTtcblxuICBASW5wdXQoKSBzaG93PyA9IHRydWU7XG4gIEBJbnB1dCgpIHRyaWdnZXI/OiBUZFRvb2x0aXBUcmlnZ2VyID0gJ2F4aXMnO1xuICBASW5wdXQoKSBheGlzUG9pbnRlcjogYW55O1xuICBASW5wdXQoKSBzaG93Q29udGVudD8gPSB0cnVlO1xuICBASW5wdXQoKSBhbHdheXNTaG93Q29udGVudD8gPSBmYWxzZTtcbiAgQElucHV0KCkgdHJpZ2dlck9uPzogVGRUb29sdGlwVHJpZ2dlck9uID0gJ21vdXNlbW92ZXxjbGljayc7XG4gIEBJbnB1dCgpIHNob3dEZWxheT8gPSAwO1xuICBASW5wdXQoKSBoaWRlRGVsYXk/ID0gMDtcbiAgQElucHV0KCkgZW50ZXJhYmxlPyA9IGZhbHNlO1xuICBASW5wdXQoKSByZW5kZXJNb2RlPzogJ2h0bWwnIHwgJ3JpY2hUZXh0JztcbiAgQElucHV0KCkgY29uZmluZSA9IGZhbHNlO1xuICBASW5wdXQoKSB0cmFuc2l0aW9uRHVyYXRpb24gPSAwLjU7XG4gIEBJbnB1dCgpIHBvc2l0aW9uPzogVGRUb29sdGlwUG9zaXRpb247IC8vIHNlcmllc1xuICBASW5wdXQoKSBmb3JtYXR0ZXI/OiBzdHJpbmcgfCBGdW5jdGlvbjsgLy8gc2VyaWVzXG4gIEBJbnB1dCgpIGJhY2tncm91bmRDb2xvcj8gPSAncmdiYSg1MCw1MCw1MCwwLjcpJzsgLy8gc2VyaWVzXG4gIEBJbnB1dCgpIGJvcmRlckNvbG9yPyA9ICcjMzMzJzsgLy8gc2VyaWVzXG4gIEBJbnB1dCgpIGJvcmRlcldpZHRoPyA9IDA7IC8vIHNlcmllc1xuICBASW5wdXQoKSBwYWRkaW5nPyA9IDU7IC8vIHNlcmllc1xuICBASW5wdXQoKSB0ZXh0U3R5bGU6IGFueSA9IHtcbiAgICAvLyBzZXJpZXNcbiAgICBjb2xvcjogJyNGRkYnLFxuICB9O1xuICBASW5wdXQoKSBleHRyYUNzc1RleHQ/OiBzdHJpbmc7IC8vIHNlcmllc1xuXG4gIEBDb250ZW50Q2hpbGQoVGRDaGFydFRvb2x0aXBGb3JtYXR0ZXJEaXJlY3RpdmUsIHtcbiAgICByZWFkOiBUZW1wbGF0ZVJlZixcbiAgICBzdGF0aWM6IHRydWUsXG4gIH0pXG4gIGZvcm1hdHRlclRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgndG9vbHRpcENvbnRlbnQnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBmdWxsVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgX29wdGlvbnNTZXJ2aWNlOiBUZENoYXJ0T3B0aW9uc1NlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuX3NldE9wdGlvbnMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3JlbW92ZU9wdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0T3B0aW9ucygpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWc6IGFueSA9IGFzc2lnbkRlZmluZWQoXG4gICAgICB0aGlzLl9zdGF0ZSxcbiAgICAgIHtcbiAgICAgICAgc2hvdzogdGhpcy5zaG93LFxuICAgICAgICB0cmlnZ2VyOiB0aGlzLnRyaWdnZXIsXG4gICAgICAgIGF4aXNQb2ludGVyOiB0aGlzLmF4aXNQb2ludGVyLFxuICAgICAgICBzaG93Q29udGVudDogdGhpcy5zaG93Q29udGVudCxcbiAgICAgICAgYWx3YXlzU2hvd0NvbnRlbnQ6IHRoaXMuYWx3YXlzU2hvd0NvbnRlbnQsXG4gICAgICAgIHRyaWdnZXJPbjogdGhpcy50cmlnZ2VyT24sXG4gICAgICAgIHNob3dEZWxheTogdGhpcy5zaG93RGVsYXksXG4gICAgICAgIGhpZGVEZWxheTogdGhpcy5oaWRlRGVsYXksXG4gICAgICAgIGVudGVyYWJsZTogdGhpcy5lbnRlcmFibGUsXG4gICAgICAgIGNvbmZpbmU6IHRoaXMuY29uZmluZSxcbiAgICAgICAgdHJhbnNpdGlvbkR1cmF0aW9uOiB0aGlzLnRyYW5zaXRpb25EdXJhdGlvbixcbiAgICAgICAgcG9zaXRpb246IHRoaXMucG9zaXRpb24sXG4gICAgICAgIGZvcm1hdHRlcjogdGhpcy5mb3JtYXR0ZXJcbiAgICAgICAgICA/IHRoaXMuZm9ybWF0dGVyXG4gICAgICAgICAgOiB0aGlzLmZvcm1hdHRlclRlbXBsYXRlXG4gICAgICAgICAgPyB0aGlzLl9mb3JtYXR0ZXIoKVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuYmFja2dyb3VuZENvbG9yLFxuICAgICAgICBib3JkZXJDb2xvcjogdGhpcy5ib3JkZXJDb2xvcixcbiAgICAgICAgYm9yZGVyV2lkdGg6IHRoaXMuYm9yZGVyV2lkdGgsXG4gICAgICAgIHBhZGRpbmc6IHRoaXMucGFkZGluZyxcbiAgICAgICAgdGV4dFN0eWxlOiB0aGlzLnRleHRTdHlsZSxcbiAgICAgICAgZXh0cmFDc3NUZXh0OiB0aGlzLmV4dHJhQ3NzVGV4dCxcbiAgICAgIH0sXG4gICAgICB0aGlzLmNvbmZpZyA/IHRoaXMuY29uZmlnIDoge31cbiAgICApO1xuICAgIC8vIHNldCB0b29sdGlwIGNvbmZpZ3VyYXRpb24gaW4gcGFyZW50IGNoYXJ0IGFuZCByZW5kZXIgbmV3IGNvbmZpZ3VyYXRpb25zXG4gICAgdGhpcy5fb3B0aW9uc1NlcnZpY2Uuc2V0T3B0aW9uKCd0b29sdGlwJywgY29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbW92ZU9wdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9vcHRpb25zU2VydmljZS5jbGVhck9wdGlvbigndG9vbHRpcCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZm9ybWF0dGVyKCk6IChcbiAgICBwYXJhbXM6IGFueSxcbiAgICB0aWNrZXQ6IGFueSxcbiAgICBjYWxsYmFjazogKHRpY2tldDogc3RyaW5nLCBodG1sOiBzdHJpbmcpID0+IHZvaWRcbiAgKSA9PiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICBwYXJhbXM6IGFueSxcbiAgICAgIHRpY2tldDogYW55LFxuICAgICAgY2FsbGJhY2s6ICh0aWNrZXQ6IHN0cmluZywgaHRtbDogc3RyaW5nKSA9PiB2b2lkXG4gICAgKSA9PiB7XG4gICAgICB0aGlzLl9jb250ZXh0ID0ge1xuICAgICAgICAkaW1wbGljaXQ6IHBhcmFtcyxcbiAgICAgICAgdGlja2V0LFxuICAgICAgfTtcbiAgICAgIC8vIHRpbWVvdXQgc2V0IHNpbmNlIHdlIG5lZWQgdG8gc2V0IHRoZSBIVE1MIGF0IHRoZSBlbmQgb2YgdGhlIGFuZ3VsYXIgbGlmZWN5Y2xlIHdoZW5cbiAgICAgIC8vIHRoZSB0b29sdGlwIGRlbGF5IGlzIG1vcmUgdGhhbiAwXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY2FsbGJhY2soXG4gICAgICAgICAgdGlja2V0LFxuICAgICAgICAgICg8SFRNTEVsZW1lbnQ+dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5pbm5lckhUTUxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICByZXR1cm4gKDxIVE1MRWxlbWVudD50aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmlubmVySFRNTDtcbiAgICB9O1xuICB9XG59XG4iLCI8bmctdGVtcGxhdGVcbiAgI3Rvb2x0aXBDb250ZW50XG4gIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZvcm1hdHRlclRlbXBsYXRlXCJcbiAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIl9jb250ZXh0XCJcbj48L25nLXRlbXBsYXRlPlxuIl19