UNPKG

@lxlib/chart

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 9.1.1.

296 lines 21.1 kB
/** * @fileoverview added by tsickle * Generated from: tag-cloud.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { __assign, __decorate, __metadata } from "tslib"; import { ChangeDetectionStrategy, Component, ElementRef, Input, NgZone, ViewEncapsulation, } from '@angular/core'; import DataSet from '@antv/data-set'; import { Chart, registerShape, Util } from '@antv/g2'; import { InputNumber } from '@lxlib/util'; import { fromEvent } from 'rxjs'; import { debounceTime, filter } from 'rxjs/operators'; /** * @record */ export function G2TagCloudData() { } if (false) { /** @type {?|undefined} */ G2TagCloudData.prototype.x; /** @type {?|undefined} */ G2TagCloudData.prototype.value; /** @type {?|undefined} */ G2TagCloudData.prototype.category; /* Skipping unhandled member: [key: string]: any;*/ } var G2TagCloudComponent = /** @class */ (function () { // #endregion function G2TagCloudComponent(el, ngZone) { this.el = el; this.ngZone = ngZone; // #region fields this.delay = 0; this.height = 100; this.padding = 0; this.data = []; } /** * @private * @return {?} */ G2TagCloudComponent.prototype.initTagCloud = /** * @private * @return {?} */ function () { // 给point注册一个词云的shape registerShape('point', 'cloud', { draw: /** * @param {?} cfg * @param {?} container * @return {?} */ function (cfg, container) { /** @type {?} */ var data = (/** @type {?} */ (cfg.data)); /** @type {?} */ var textShape = container.addShape('text', { attrs: __assign(__assign(__assign({}, cfg.defaultStyle), cfg.style), { fontSize: data.size, text: data.text, textAlign: 'center', fontFamily: data.font, fill: cfg.color, textBaseline: 'Alphabetic', x: cfg.x, y: cfg.y }), }); if (data.rotate) { Util.rotate(textShape, (data.rotate * Math.PI) / 180); } return textShape; }, }); }; /** * @private * @return {?} */ G2TagCloudComponent.prototype.install = /** * @private * @return {?} */ function () { var _a = this, el = _a.el, padding = _a.padding, height = _a.height; /** @type {?} */ var chart = (this.chart = new Chart({ container: el.nativeElement, padding: padding, height: height, })); chart.legend(false); chart.axis(false); chart.tooltip({ showTitle: false, showMarkers: false, }); chart.coordinate().reflect('x'); chart.point().position('x*y').color('category').shape('cloud').tooltip('value*category'); chart.interaction('element-active'); this.attachChart(); }; /** * @private * @return {?} */ G2TagCloudComponent.prototype.attachChart = /** * @private * @return {?} */ function () { var _a = this, chart = _a.chart, height = _a.height, padding = _a.padding, data = _a.data; if (!chart || !data || data.length <= 0) return; chart.height = height; chart.padding = padding; chart.forceFit(); /** @type {?} */ var dv = new DataSet.View().source(data); /** @type {?} */ var range = dv.range('value'); /** @type {?} */ var min = range[0]; /** @type {?} */ var max = range[1]; dv.transform((/** @type {?} */ ({ type: 'tag-cloud', fields: ['x', 'value'], size: [chart.width, chart.height], padding: typeof padding === 'number' ? padding : undefined, timeInterval: 5000, // max execute time rotate: (/** * @return {?} */ function () { /** @type {?} */ var random = ~~(Math.random() * 4) % 4; if (random === 2) { random = 0; } return random * 90; // 0, 90, 270 }), fontSize: /** * @param {?} d * @return {?} */ function (d) { if (d.value) { return ((d.value - min) / (max - min)) * (80 - 24) + 24; } return 0; }, }))); chart.scale({ x: { nice: false }, y: { nice: false }, }); chart.changeData(dv.rows); chart.render(); }; /** * @private * @return {?} */ G2TagCloudComponent.prototype._attachChart = /** * @private * @return {?} */ function () { var _this = this; this.ngZone.runOutsideAngular((/** * @return {?} */ function () { return _this.attachChart(); })); }; /** * @private * @return {?} */ G2TagCloudComponent.prototype.installResizeEvent = /** * @private * @return {?} */ function () { var _this = this; this.resize$ = fromEvent(window, 'resize') .pipe(filter((/** * @return {?} */ function () { return !!_this.chart; })), debounceTime(200)) .subscribe((/** * @return {?} */ function () { return _this._attachChart(); })); }; /** * @return {?} */ G2TagCloudComponent.prototype.ngOnInit = /** * @return {?} */ function () { var _this = this; this.initTagCloud(); this.installResizeEvent(); this.ngZone.runOutsideAngular((/** * @return {?} */ function () { return setTimeout((/** * @return {?} */ function () { return _this.install(); }), _this.delay); })); }; /** * @return {?} */ G2TagCloudComponent.prototype.ngOnChanges = /** * @return {?} */ function () { this._attachChart(); }; /** * @return {?} */ G2TagCloudComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { var _this = this; this.resize$.unsubscribe(); if (this.chart) { this.ngZone.runOutsideAngular((/** * @return {?} */ function () { return _this.chart.destroy(); })); } }; G2TagCloudComponent.decorators = [ { type: Component, args: [{ selector: 'g2-tag-cloud', exportAs: 'g2TagCloud', template: "", host: { '[style.height.px]': 'height', }, preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None }] } ]; /** @nocollapse */ G2TagCloudComponent.ctorParameters = function () { return [ { type: ElementRef }, { type: NgZone } ]; }; G2TagCloudComponent.propDecorators = { delay: [{ type: Input }], height: [{ type: Input }], padding: [{ type: Input }], data: [{ type: Input }] }; __decorate([ InputNumber(), __metadata("design:type", Object) ], G2TagCloudComponent.prototype, "delay", void 0); __decorate([ InputNumber(), __metadata("design:type", Object) ], G2TagCloudComponent.prototype, "height", void 0); return G2TagCloudComponent; }()); export { G2TagCloudComponent }; if (false) { /** * @type {?} * @private */ G2TagCloudComponent.prototype.resize$; /** * @type {?} * @private */ G2TagCloudComponent.prototype.chart; /** @type {?} */ G2TagCloudComponent.prototype.delay; /** @type {?} */ G2TagCloudComponent.prototype.height; /** @type {?} */ G2TagCloudComponent.prototype.padding; /** @type {?} */ G2TagCloudComponent.prototype.data; /** * @type {?} * @private */ G2TagCloudComponent.prototype.el; /** * @type {?} * @private */ G2TagCloudComponent.prototype.ngZone; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLWNsb3VkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BseGxpYi9jaGFydC90YWctY2xvdWQvIiwic291cmNlcyI6WyJ0YWctY2xvdWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUlOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUUxQyxPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBRXRELG9DQUtDOzs7SUFKQywyQkFBVzs7SUFDWCwrQkFBZTs7SUFDZixrQ0FBZTs7O0FBSWpCO0lBc0JFLGFBQWE7SUFFYiw2QkFBb0IsRUFBYyxFQUFVLE1BQWM7UUFBdEMsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7O1FBUGxDLFVBQUssR0FBRyxDQUFDLENBQUM7UUFDVixXQUFNLEdBQUcsR0FBRyxDQUFDO1FBQzVCLFlBQU8sR0FBK0IsQ0FBQyxDQUFDO1FBQ3hDLFNBQUksR0FBcUIsRUFBRSxDQUFDO0lBSXdCLENBQUM7Ozs7O0lBRXRELDBDQUFZOzs7O0lBQXBCO1FBQ0UscUJBQXFCO1FBQ3JCLGFBQWEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFO1lBQzlCLElBQUk7Ozs7O1lBQUosVUFBSyxHQUFHLEVBQUUsU0FBb0I7O29CQUN0QixJQUFJLEdBQUcsbUJBQUEsR0FBRyxDQUFDLElBQUks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LEVBQUU7b0JBQ1osSUFBSSxFQUFFO3dCQUNKLG1CQUFtQixFQUFFLFFBQVE7cUJBQzlCO29CQUNELG1CQUFtQixFQUFFLEtBQUs7b0JBQzFCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtpQkFDdEM7Ozs7Z0JBaENDLFVBQVU7Z0JBRVYsTUFBTTs7O3dCQXFDTCxLQUFLO3lCQUNMLEtBQUs7MEJBQ0wsS0FBSzt1QkFDTCxLQUFLOztJQUhrQjtRQUFkLFdBQVcsRUFBRTs7c0RBQVc7SUFDVjtRQUFkLFdBQVcsRUFBRTs7dURBQWM7SUFnSXZDLDBCQUFDO0NBQUEsQUFsSkQsSUFrSkM7U0F2SVksbUJBQW1COzs7Ozs7SUFDOUIsc0NBQThCOzs7OztJQUM5QixvQ0FBcUI7O0lBSXJCLG9DQUFrQzs7SUFDbEMscUNBQXFDOztJQUNyQyxzQ0FBaUQ7O0lBQ2pELG1DQUFxQzs7Ozs7SUFJekIsaUNBQXNCOzs7OztJQUFFLHFDQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBEYXRhU2V0IGZyb20gJ0BhbnR2L2RhdGEtc2V0JztcbmltcG9ydCB7IENoYXJ0LCByZWdpc3RlclNoYXBlLCBVdGlsIH0gZnJvbSAnQGFudHYvZzInO1xuaW1wb3J0IHsgSW5wdXROdW1iZXIgfSBmcm9tICdAbHhsaWIvdXRpbCc7XG5pbXBvcnQgeyBOelNhZmVBbnkgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdHlwZXMnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEcyVGFnQ2xvdWREYXRhIHtcbiAgeD86IHN0cmluZztcbiAgdmFsdWU/OiBudW1iZXI7XG4gIGNhdGVnb3J5PzogYW55O1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2cyLXRhZy1jbG91ZCcsXG4gIGV4cG9ydEFzOiAnZzJUYWdDbG91ZCcsXG4gIHRlbXBsYXRlOiBgYCxcbiAgaG9zdDoge1xuICAgICdbc3R5bGUuaGVpZ2h0LnB4XSc6ICdoZWlnaHQnLFxuICB9LFxuICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEcyVGFnQ2xvdWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgT25Jbml0IHtcbiAgcHJpdmF0ZSByZXNpemUkOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgY2hhcnQ6IENoYXJ0O1xuXG4gIC8vICNyZWdpb24gZmllbGRzXG5cbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgZGVsYXkgPSAwO1xuICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSBoZWlnaHQgPSAxMDA7XG4gIEBJbnB1dCgpIHBhZGRpbmc6IG51bWJlciB8IG51bWJlcltdIHwgJ2F1dG8nID0gMDtcbiAgQElucHV0KCkgZGF0YTogRzJUYWdDbG91ZERhdGFbXSA9IFtdO1xuXG4gIC8vICNlbmRyZWdpb25cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmLCBwcml2YXRlIG5nWm9uZTogTmdab25lKSB7fVxuXG4gIHByaXZhdGUgaW5pdFRhZ0Nsb3VkKCkge1xuICAgIC8vIOe7mXBvaW505rOo5YaM5LiA5Liq6K+N5LqR55qEc2hhcGVcbiAgICByZWdpc3RlclNoYXBlKCdwb2ludCcsICdjbG91ZCcsIHtcbiAgICAgIGRyYXcoY2ZnLCBjb250YWluZXI6IE56U2FmZUFueSkge1xuICAgICAgICBjb25zdCBkYXRhID0gY2ZnLmRhdGEgYXMgTnpTYWZlQW55O1xuICAgICAgICBjb25zdCB0ZXh0U2hhcGUgPSBjb250YWluZXIuYWRkU2hhcGUoJ3RleHQnLCB7XG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIC4uLmNmZy5kZWZhdWx0U3R5bGUsXG4gICAgICAgICAgICAuLi5jZmcuc3R5bGUsXG4gICAgICAgICAgICBmb250U2l6ZTogZGF0YS5zaXplLFxuICAgICAgICAgICAgdGV4dDogZGF0YS50ZXh0LFxuICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IGRhdGEuZm9udCxcbiAgICAgICAgICAgIGZpbGw6IGNmZy5jb2xvciwgLy8gfHwgY2ZnLmRlZmF1bHRTdHlsZSEuc3Ryb2tlLFxuICAgICAgICAgICAgdGV4dEJhc2VsaW5lOiAnQWxwaGFiZXRpYycsXG4gICAgICAgICAgICB4OiBjZmcueCxcbiAgICAgICAgICAgIHk6IGNmZy55LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZGF0YS5yb3RhdGUpIHtcbiAgICAgICAgICBVdGlsLnJvdGF0ZSh0ZXh0U2hhcGUsIChkYXRhLnJvdGF0ZSAqIE1hdGguUEkpIC8gMTgwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dFNoYXBlO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5zdGFsbCgpIHtcbiAgICBjb25zdCB7IGVsLCBwYWRkaW5nLCBoZWlnaHQgfSA9IHRoaXM7XG5cbiAgICBjb25zdCBjaGFydCA9ICh0aGlzLmNoYXJ0ID0gbmV3IENoYXJ0KHtcbiAgICAgIGNvbnRhaW5lcjogZWwubmF0aXZlRWxlbWVudCxcbiAgICAgIHBhZGRpbmcsXG4gICAgICBoZWlnaHQsXG4gICAgfSkpO1xuICAgIGNoYXJ0LmxlZ2VuZChmYWxzZSk7XG4gICAgY2hhcnQuYXhpcyhmYWxzZSk7XG4gICAgY2hhcnQudG9vbHRpcCh7XG4gICAgICBzaG93VGl0bGU6IGZhbHNlLFxuICAgICAgc2hvd01hcmtlcnM6IGZhbHNlLFxuICAgIH0pO1xuICAgIGNoYXJ0LmNvb3JkaW5hdGUoKS5yZWZsZWN0KCd4Jyk7XG4gICAgY2hhcnQucG9pbnQoKS5wb3NpdGlvbigneCp5JykuY29sb3IoJ2NhdGVnb3J5Jykuc2hhcGUoJ2Nsb3VkJykudG9vbHRpcCgndmFsdWUqY2F0ZWdvcnknKTtcbiAgICBjaGFydC5pbnRlcmFjdGlvbignZWxlbWVudC1hY3RpdmUnKTtcblxuICAgIHRoaXMuYXR0YWNoQ2hhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoQ2hhcnQoKSB7XG4gICAgY29uc3QgeyBjaGFydCwgaGVpZ2h0LCBwYWRkaW5nLCBkYXRhIH0gPSB0aGlzO1xuICAgIGlmICghY2hhcnQgfHwgIWRhdGEgfHwgZGF0YS5sZW5ndGggPD0gMCkgcmV0dXJuO1xuXG4gICAgY2hhcnQuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGNoYXJ0LnBhZGRpbmcgPSBwYWRkaW5nO1xuICAgIGNoYXJ0LmZvcmNlRml0KCk7XG5cbiAgICBjb25zdCBkdiA9IG5ldyBEYXRhU2V0LlZpZXcoKS5zb3VyY2UoZGF0YSk7XG4gICAgY29uc3QgcmFuZ2UgPSBkdi5yYW5nZSgndmFsdWUnKTtcbiAgICBjb25zdCBtaW4gPSByYW5nZVswXTtcbiAgICBjb25zdCBtYXggPSByYW5nZVsxXTtcblxuICAgIGR2LnRyYW5zZm9ybSh7XG4gICAgICB0eXBlOiAndGFnLWNsb3VkJyxcbiAgICAgIGZpZWxkczogWyd4JywgJ3ZhbHVlJ10sXG4gICAgICBzaXplOiBbY2hhcnQud2lkdGgsIGNoYXJ0LmhlaWdodF0sXG4gICAgICBwYWRkaW5nOiB0eXBlb2YgcGFkZGluZyA9PT0gJ251bWJlcicgPyBwYWRkaW5nIDogdW5kZWZpbmVkLFxuICAgICAgdGltZUludGVydmFsOiA1MDAwLCAvLyBtYXggZXhlY3V0ZSB0aW1lXG4gICAgICByb3RhdGU6ICgpID0+IHtcbiAgICAgICAgbGV0IHJhbmRvbSA9IH5+KE1hdGgucmFuZG9tKCkgKiA0KSAlIDQ7XG4gICAgICAgIGlmIChyYW5kb20gPT09IDIpIHtcbiAgICAgICAgICByYW5kb20gPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByYW5kb20gKiA5MDsgLy8gMCwgOTAsIDI3MFxuICAgICAgfSxcbiAgICAgIGZvbnRTaXplKGQ6IE56U2FmZUFueSkge1xuICAgICAgICBpZiAoZC52YWx1ZSkge1xuICAgICAgICAgIHJldHVybiAoKGQudmFsdWUgLSBtaW4pIC8gKG1heCAtIG1pbikpICogKDgwIC0gMjQpICsgMjQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9LFxuICAgIH0gYXMgTnpTYWZlQW55KTtcblxuICAgIGNoYXJ0LnNjYWxlKHtcbiAgICAgIHg6IHsgbmljZTogZmFsc2UgfSxcbiAgICAgIHk6IHsgbmljZTogZmFsc2UgfSxcbiAgICB9KTtcblxuICAgIGNoYXJ0LmNoYW5nZURhdGEoZHYucm93cyk7XG4gICAgY2hhcnQucmVuZGVyKCk7XG4gIH1cblxuICBwcml2YXRlIF9hdHRhY2hDaGFydCgpIHtcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB0aGlzLmF0dGFjaENoYXJ0KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnN0YWxsUmVzaXplRXZlbnQoKSB7XG4gICAgdGhpcy5yZXNpemUkID0gZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+ICEhdGhpcy5jaGFydCksXG4gICAgICAgIGRlYm91bmNlVGltZSgyMDApLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9hdHRhY2hDaGFydCgpKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdFRhZ0Nsb3VkKCk7XG4gICAgdGhpcy5pbnN0YWxsUmVzaXplRXZlbnQoKTtcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaW5zdGFsbCgpLCB0aGlzLmRlbGF5KSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLl9hdHRhY2hDaGFydCgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemUkLnVuc3Vic2NyaWJlKCk7XG4gICAgaWYgKHRoaXMuY2hhcnQpIHtcbiAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMuY2hhcnQuZGVzdHJveSgpKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==