@tusharghoshbd/ngx-charts
Version:
Ngx charts is an angular library for presenting data in chart.
167 lines • 17.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, Input, ViewChild, ElementRef, Output, EventEmitter } from "@angular/core";
import { trimLabel } from '../../utils/trim-label.helper';
var YAxisComponent = /** @class */ (function () {
function YAxisComponent() {
this.categories = [];
this.series = [];
this.yAxisWidthChange = new EventEmitter();
this.ticks = [];
this.rightTicks = [];
this.trimLabel = trimLabel;
}
/**
* @return {?}
*/
YAxisComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
//console.log(this.yScale)
};
/**
* @param {?} changes
* @return {?}
*/
YAxisComponent.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
// console.log(changes)
// console.log("-------------------")
// console.log( JSON.stringify(this.yScale('Africa')))
//console.log(this.yScale(-200))
this.update();
};
/**
* @return {?}
*/
YAxisComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
var _this = this;
setTimeout((/**
* @return {?}
*/
function () {
/** @type {?} */
var yAxisWidth = parseInt(_this.yAxisWidthEl.nativeElement.getBoundingClientRect().width, 10) + 30;
/** @type {?} */
var yAxisHeight = parseInt(_this.yAxisWidthEl.nativeElement.getBoundingClientRect().height, 10) + 300;
/** @type {?} */
var yAxisRightWidth = parseInt(_this.yAxisRightWidthEl.nativeElement.getBoundingClientRect().width, 10) + 30;
if (yAxisHeight !== _this.options.yAxis.height || yAxisWidth !== _this.options.yAxis.width) {
_this.yAxisWidthChange.emit({ yAxisWidth: yAxisWidth, yAxisHeight: yAxisHeight, yAxisRightWidth: yAxisRightWidth });
}
//setTimeout(() => this.updateDims());
}), 0);
};
/**
* @return {?}
*/
YAxisComponent.prototype.update = /**
* @return {?}
*/
function () {
if (this.options.barType == "vertical") {
if (this.yScale)
this.ticks = this.yScale.nice().ticks();
if (this.yRightScale)
this.rightTicks = this.yRightScale.nice().ticks();
}
else {
//this.ticks=this.xScale.nice().ticks();
}
this.ngAfterViewInit();
};
/**
* @param {?} x
* @return {?}
*/
YAxisComponent.prototype.transform = /**
* @param {?} x
* @return {?}
*/
function (x) {
return "rotate(270, " + x + ", " + this.options.height / 2 + ")";
};
/**
* @param {?} tick
* @return {?}
*/
YAxisComponent.prototype.pathDirection = /**
* @param {?} tick
* @return {?}
*/
function (tick) {
//console.log(tick, this.yScale(tick))
return 'M ' + (this.options.yAxis.width) + ' ' + (this.yScale(tick) + this.options.header.height) + ' L ' + (this.options.plotBackground.width + this.options.yAxis.width) + ' ' + (this.yScale(tick) + this.options.header.height);
};
/**
* @param {?} item
* @return {?}
*/
YAxisComponent.prototype.calculateYTextPosition = /**
* @param {?} item
* @return {?}
*/
function (item) {
if (this.yScale(item))
return parseInt(this.yScale(item) + (this.yScale.bandwidth() / 2) + this.options.header.height);
return this.options.header.height;
};
YAxisComponent.decorators = [
{ type: Component, args: [{
selector: "g[y-axis]",
template: "<svg>\n <g #yAxisWidthEl>\n <g class=\"highcharts-axis highcharts-yaxis\" data-z-index=\"2\" aria-hidden=\"true\">\n <text x=\"10\" [attr.y]=\"options.height/2\" text-anchor=\"middle\" dominant-baseline=\"central\" \n style=\"color:#666666;cursor:default;font-size:11px;fill:#666666;\" \n class=\"highcharts-axis-title\"\n [attr.transform]=\"transform(10)\">\n {{options.yAxis ? options.yAxis.title : \"\"}}\n </text>\n </g>\n <g class=\"highcharts-axis-labels highcharts-yaxis-labels\" data-z-index=\"7\" aria-hidden=\"true\"\n *ngIf=\"options.barType == 'vertical'\">\n <text\n style=\"color:#666666;cursor:default;font-size:11px;fill:#666666;\" \n text-anchor=\"start\"\n *ngFor=\"let tick of ticks\" \n [attr.x]=\"30\"\n [attr.y]=\"yScale(tick)+this.options.header.height\" \n opacity=\"1\">{{ options.yAxis.labelEllipsis ? trimLabel(tick, options.yAxis.labelEllipsisSize) :tick}} </text>\n </g>\n <g class=\"highcharts-axis-labels highcharts-xaxis-labels\" data-z-index=\"7\" aria-hidden=\"true\"\n *ngIf=\"options.barType == 'horizontal'\">\n <text \n *ngFor=\"let item of categories; let i = index;\"\n [attr.x] = \"30\"\n [attr.y] = \"calculateYTextPosition(item)\"\n style=\"color:#666666;cursor:default;font-size:11px;fill:#666666;\" text-anchor=\"right\" \n opacity=\"1\">{{ options.yAxis.labelEllipsis ? trimLabel(item, options.yAxis.labelEllipsisSize) :item}}</text>\n </g> \n </g>\n\n <g #yAxisRightWidthEl>\n <g *ngIf= \"yRightScale\" class=\"highcharts-axis highcharts-yaxis\" data-z-index=\"2\" aria-hidden=\"true\" >\n <text \n [attr.x]=\"options.width - 10\" \n [attr.y]=\"options.height/2\" text-anchor=\"middle\" dominant-baseline=\"central\" \n style=\"color:#666666;cursor:default;font-size:11px;fill:#666666;\" \n class=\"highcharts-axis-title\"\n [attr.transform]=\"transform(options.width - 10)\">\n {{options.yAxis ? options.yAxis.rightTitle : \"\"}}\n </text>\n </g>\n <g class=\"highcharts-axis-labels highcharts-yaxis-labels\" data-z-index=\"7\" aria-hidden=\"true\"\n *ngIf=\"options.barType == 'vertical' && yRightScale\">\n <text\n style=\"color:#666666;cursor:default;font-size:11px;fill:#666666;\" \n text-anchor=\"end\"\n *ngFor=\"let tick of rightTicks\" \n [attr.x]=\"options.width - 30\"\n [attr.y]=\"yRightScale(tick)+this.options.header.height\" \n opacity=\"1\">{{ options.yAxis.labelEllipsis ? trimLabel(tick, options.yAxis.labelEllipsisSize) :tick}} </text>\n </g>\n </g>\n \n <g *ngIf=\"options.barType == 'vertical'\" class=\"highcharts-grid highcharts-yaxis-grid\" data-z-index=\"1\" aria-hidden=\"true\">\n <path fill=\"none\" stroke=\"#e6e6e6\" stroke-width=\"1\" data-z-index=\"1\" class=\"highcharts-grid-line\"\n *ngFor=\"let tick of ticks\" [attr.d]=\"pathDirection(tick)\" opacity=\"1\">\n </path>\n </g>\n\n</svg>",
styles: [""]
}] }
];
/** @nocollapse */
YAxisComponent.ctorParameters = function () { return []; };
YAxisComponent.propDecorators = {
xScale: [{ type: Input }],
yScale: [{ type: Input }],
yRightScale: [{ type: Input }],
options: [{ type: Input }],
categories: [{ type: Input }],
series: [{ type: Input }],
yAxisWidthEl: [{ type: ViewChild, args: ['yAxisWidthEl', { static: true },] }],
yAxisRightWidthEl: [{ type: ViewChild, args: ['yAxisRightWidthEl', { static: true },] }],
yAxisWidthChange: [{ type: Output }]
};
return YAxisComponent;
}());
export { YAxisComponent };
if (false) {
/** @type {?} */
YAxisComponent.prototype.xScale;
/** @type {?} */
YAxisComponent.prototype.yScale;
/** @type {?} */
YAxisComponent.prototype.yRightScale;
/** @type {?} */
YAxisComponent.prototype.options;
/** @type {?} */
YAxisComponent.prototype.categories;
/** @type {?} */
YAxisComponent.prototype.series;
/** @type {?} */
YAxisComponent.prototype.yAxisWidthEl;
/** @type {?} */
YAxisComponent.prototype.yAxisRightWidthEl;
/** @type {?} */
YAxisComponent.prototype.yAxisWidthChange;
/** @type {?} */
YAxisComponent.prototype.ticks;
/** @type {?} */
YAxisComponent.prototype.rightTicks;
/** @type {?} */
YAxisComponent.prototype.trimLabel;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieS1heGlzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B0dXNoYXJnaG9zaGJkL25neC1jaGFydHMvIiwic291cmNlcyI6WyJsaWIvYXhlcy95LWF4aXMveS1heGlzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNILFNBQVMsRUFBVSxLQUFLLEVBQ1QsU0FBUyxFQUFFLFVBQVUsRUFDcEMsTUFBTSxFQUFDLFlBQVksRUFDdEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzFEO0lBc0JJO1FBWFMsZUFBVSxHQUFNLEVBQUUsQ0FBQztRQUNuQixXQUFNLEdBQU0sRUFBRSxDQUFDO1FBSWQscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVoRCxVQUFLLEdBQVEsRUFBRSxDQUFDO1FBQ2hCLGVBQVUsR0FBUSxFQUFFLENBQUM7UUFJakIsSUFBSSxDQUFDLFNBQVMsR0FBQyxTQUFTLENBQUM7SUFDN0IsQ0FBQzs7OztJQUVELGlDQUFROzs7SUFBUjtRQUNJLDBCQUEwQjtJQUM5QixDQUFDOzs7OztJQUVELG9DQUFXOzs7O0lBQVgsVUFBWSxPQUFzQjtRQUM5Qix1QkFBdUI7UUFDdkIscUNBQXFDO1FBQ3JDLHNEQUFzRDtRQUN0RCxnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2xCLENBQUM7Ozs7SUFDRCx3Q0FBZTs7O0lBQWY7UUFBQSxpQkFhQztRQVhHLFVBQVU7OztRQUFDOztnQkFDRCxVQUFVLEdBQUMsUUFBUSxDQUFDLEtBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFDLEVBQUU7O2dCQUN6RixXQUFXLEdBQUMsUUFBUSxDQUFDLEtBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMs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QUFtQixFQUFFLEVBQUMsTUFBTSxFQUFDLElBQUksRUFBQzttQ0FDNUMsTUFBTTs7SUFpRVgscUJBQUM7Q0FBQSxBQWpGRCxJQWlGQztTQTVFWSxjQUFjOzs7SUFDdkIsZ0NBQXFCOztJQUNyQixnQ0FBcUI7O0lBQ3JCLHFDQUEwQjs7SUFDMUIsaUNBQXNCOztJQUV0QixvQ0FBNEI7O0lBQzVCLGdDQUF3Qjs7SUFFeEIsc0NBQXNFOztJQUN0RSwyQ0FBNkU7O0lBQzdFLDBDQUFnRDs7SUFFaEQsK0JBQWdCOztJQUNoQixvQ0FBcUI7O0lBRXJCLG1DQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT25DaGFuZ2VzLFxyXG4gICAgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBFbGVtZW50UmVmLFxyXG4gICAgT3V0cHV0LEV2ZW50RW1pdHRlclxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENsYXNzR2V0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXIvc3JjL291dHB1dC9vdXRwdXRfYXN0JztcclxuaW1wb3J0IHsgdHJpbUxhYmVsIH0gZnJvbSAnLi4vLi4vdXRpbHMvdHJpbS1sYWJlbC5oZWxwZXInO1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcImdbeS1heGlzXVwiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwiLi95LWF4aXMuY29tcG9uZW50Lmh0bWxcIixcclxuICAgIHN0eWxlVXJsczogW1wiLi95LWF4aXMuY29tcG9uZW50LmNzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFlBeGlzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gICAgQElucHV0KCkgeFNjYWxlOiBhbnk7XHJcbiAgICBASW5wdXQoKSB5U2NhbGU6IGFueTtcclxuICAgIEBJbnB1dCgpIHlSaWdodFNjYWxlOiBhbnk7XHJcbiAgICBASW5wdXQoKSBvcHRpb25zOiBhbnk7XHJcblxyXG4gICAgQElucHV0KCkgY2F0ZWdvcmllczogYW55PVtdO1xyXG4gICAgQElucHV0KCkgc2VyaWVzOiBhbnk9W107XHJcblxyXG4gICAgQFZpZXdDaGlsZCgneUF4aXNXaWR0aEVsJywgeyBzdGF0aWM6IHRydWUgfSkgeUF4aXNXaWR0aEVsOiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZCgneUF4aXNSaWdodFdpZHRoRWwnLCB7c3RhdGljOnRydWV9KSB5QXhpc1JpZ2h0V2lkdGhFbDogRWxlbWVudFJlZjtcclxuICAgIEBPdXRwdXQoKSB5QXhpc1dpZHRoQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAgIHRpY2tzOiBhbnlbXT1bXTtcclxuICAgIHJpZ2h0VGlja3M6IGFueVtdPVtdO1xyXG4gICAgXHJcbiAgICB0cmltTGFiZWw6IGFueTtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMudHJpbUxhYmVsPXRyaW1MYWJlbDtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMueVNjYWxlKVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhjaGFuZ2VzKVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiLS0tLS0tLS0tLS0tLS0tLS0tLVwiKVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCBKU09OLnN0cmluZ2lmeSh0aGlzLnlTY2FsZSgnQWZyaWNhJykpKVxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy55U2NhbGUoLTIwMCkpXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgIH1cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgeUF4aXNXaWR0aD1wYXJzZUludCh0aGlzLnlBeGlzV2lkdGhFbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLCAxMCkrMzA7XHJcbiAgICAgICAgICAgIGNvbnN0IHlBeGlzSGVpZ2h0PXBhcnNlSW50KHRoaXMueUF4aXNXaWR0aEVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0LCAxMCkrMzAwO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgeUF4aXNSaWdodFdpZHRoPXBhcnNlSW50KHRoaXMueUF4aXNSaWdodFdpZHRoRWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCwgMTApKzMwO1xyXG5cclxuICAgICAgICAgICAgaWYgKHlBeGlzSGVpZ2h0IT09dGhpcy5vcHRpb25zLnlBeGlzLmhlaWdodHx8eUF4aXNXaWR0aCE9PXRoaXMub3B0aW9ucy55QXhpcy53aWR0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy55QXhpc1dpZHRoQ2hhbmdlLmVtaXQoeyB5QXhpc1dpZHRoLCB5QXhpc0hlaWdodCwgeUF4aXNSaWdodFdpZHRoIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZURpbXMoKSk7XHJcbiAgICAgICAgfSwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYmFyVHlwZT09XCJ2ZXJ0aWNhbFwiKSB7XHJcbiAgICAgICAgICAgIGlmKHRoaXMueVNjYWxlKVxyXG4gICAgICAgICAgICB0aGlzLnRpY2tzPXRoaXMueVNjYWxlLm5pY2UoKS50aWNrcygpO1xyXG4gICAgICAgICAgICBpZih0aGlzLnlSaWdodFNjYWxlKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodFRpY2tzPXRoaXMueVJpZ2h0U2NhbGUubmljZSgpLnRpY2tzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvL3RoaXMudGlja3M9dGhpcy54U2NhbGUubmljZSgpLnRpY2tzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubmdBZnRlclZpZXdJbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdHJhbnNmb3JtKHgpIHtcclxuICAgICAgICByZXR1cm4gXCJyb3RhdGUoMjcwLCBcIit4K1wiLCBcIit0aGlzLm9wdGlvbnMuaGVpZ2h0LzIrXCIpXCI7XHJcbiAgICB9XHJcbiAgICBwYXRoRGlyZWN0aW9uKHRpY2spIHsgXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aWNrLCB0aGlzLnlTY2FsZSh0aWNrKSlcclxuICAgICAgICByZXR1cm4gJ00gJysodGhpcy5vcHRpb25zLnlBeGlzLndpZHRoKSsnICcrKHRoaXMueVNjYWxlKHRpY2spK3RoaXMub3B0aW9ucy5oZWFkZXIuaGVpZ2h0KSsnIEwgJysodGhpcy5vcHRpb25zLnBsb3RCYWNrZ3JvdW5kLndpZHRoICsgdGhpcy5vcHRpb25zLnlBeGlzLndpZHRoKSsnICcrKHRoaXMueVNjYWxlKHRpY2spK3RoaXMub3B0aW9ucy5oZWFkZXIuaGVpZ2h0KTtcclxuICAgIH1cclxuICAgIGNhbGN1bGF0ZVlUZXh0UG9zaXRpb24oaXRlbSkgeyBcclxuICAgICAgICBpZiAodGhpcy55U2NhbGUoaXRlbSkpXHJcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludCh0aGlzLnlTY2FsZShpdGVtKSsodGhpcy55U2NhbGUuYmFuZHdpZHRoKCkvMikrdGhpcy5vcHRpb25zLmhlYWRlci5oZWlnaHQpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaGVhZGVyLmhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcblxyXG59XHJcbiJdfQ==