@tetacom/svg-charts 1.7.19 → 1.7.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/chart/chart-container/series-controls/series-controls.component.d.ts +1 -0
- package/chart/directives/zoomable.directive.d.ts +2 -2
- package/chart/model/enum/series-type.d.ts +2 -1
- package/chart/model/series.d.ts +1 -0
- package/fesm2022/tetacom-svg-charts.mjs +29 -11
- package/fesm2022/tetacom-svg-charts.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -7,6 +7,7 @@ export declare class SeriesControlsComponent {
|
|
|
7
7
|
private chartService;
|
|
8
8
|
protected readonly Align: typeof Align;
|
|
9
9
|
series: import("@angular/core").InputSignal<Series<BasePoint>[]>;
|
|
10
|
+
availableSeries: import("@angular/core").Signal<Series<BasePoint>[]>;
|
|
10
11
|
enabledSeries: import("@angular/core").Signal<Series<BasePoint>[]>;
|
|
11
12
|
disabledSeries: import("@angular/core").Signal<Series<BasePoint>[]>;
|
|
12
13
|
strokeWidth: {
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { AfterViewInit, ElementRef, NgZone, OnDestroy } from '@angular/core';
|
|
1
|
+
import { AfterViewInit, ElementRef, NgZone, OnDestroy, OnInit } from '@angular/core';
|
|
2
2
|
import { ZoomService } from '../service/zoom.service';
|
|
3
3
|
import { IChartConfig } from '../model/i-chart-config';
|
|
4
4
|
import { Axis } from '../core/axis/axis';
|
|
5
5
|
import { D3ZoomEvent } from 'd3';
|
|
6
6
|
import { ScaleService } from '../service/scale.service';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
|
-
export declare class ZoomableDirective implements OnDestroy, AfterViewInit {
|
|
8
|
+
export declare class ZoomableDirective implements OnDestroy, AfterViewInit, OnInit {
|
|
9
9
|
private elementRef;
|
|
10
10
|
private zoomService;
|
|
11
11
|
private scaleService;
|
package/chart/model/series.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ import { maxIndex } from 'd3-array';
|
|
|
7
7
|
import { toSignal } from '@angular/core/rxjs-interop';
|
|
8
8
|
import * as i3 from '@angular/platform-browser';
|
|
9
9
|
import { AsyncPipe, NgTemplateOutlet, KeyValuePipe, NgStyle } from '@angular/common';
|
|
10
|
-
import { Align as Align$1, TetaSize, ButtonComponent, DropdownComponent, DropdownContentDirective, DropdownHeadDirective, IconComponent, AccordionComponent, AccordionHeadComponent, AccordionItemComponent, AccordionContentDirective, ColorInputComponent, SelectComponent, SelectOptionDirective, SelectValueDirective, ScrollableComponent, InputComponent
|
|
10
|
+
import { Align as Align$1, TetaSize, ButtonComponent, DropdownComponent, DropdownContentDirective, DropdownHeadDirective, IconComponent, AccordionComponent, AccordionHeadComponent, AccordionItemComponent, AccordionContentDirective, ColorInputComponent, SelectComponent, SelectOptionDirective, SelectValueDirective, ScrollableComponent, InputComponent } from '@tetacom/ng-components';
|
|
11
11
|
import * as i1 from '@angular/forms';
|
|
12
12
|
import { FormsModule } from '@angular/forms';
|
|
13
13
|
import { TranslocoPipe } from '@jsverse/transloco';
|
|
@@ -150,6 +150,7 @@ var SeriesType;
|
|
|
150
150
|
SeriesType[SeriesType["scatter"] = 3] = "scatter";
|
|
151
151
|
SeriesType[SeriesType["block"] = 4] = "block";
|
|
152
152
|
SeriesType[SeriesType["blockArea"] = 5] = "blockArea";
|
|
153
|
+
SeriesType[SeriesType["custom"] = 6] = "custom";
|
|
153
154
|
})(SeriesType || (SeriesType = {}));
|
|
154
155
|
|
|
155
156
|
var FillType;
|
|
@@ -753,10 +754,24 @@ class ScaleService {
|
|
|
753
754
|
const [size, config, zoom] = data;
|
|
754
755
|
const xAxisMap = new Map();
|
|
755
756
|
const yAxisMap = new Map();
|
|
756
|
-
config.yAxis.map((
|
|
757
|
+
config.yAxis.map((axis, index) => {
|
|
758
|
+
if (axis.visible &&
|
|
759
|
+
config.series.some((serie) => serie.yAxisIndex === index && serie.enabled && serie.data?.length > 0)) {
|
|
760
|
+
axis.visible = true;
|
|
761
|
+
}
|
|
762
|
+
else {
|
|
763
|
+
axis.visible = false;
|
|
764
|
+
}
|
|
757
765
|
yAxisMap.set(index, Axis.createAxis(AxisOrientation.y, config, index));
|
|
758
766
|
});
|
|
759
|
-
config.xAxis.map((
|
|
767
|
+
config.xAxis.map((axis, index) => {
|
|
768
|
+
if (axis.visible &&
|
|
769
|
+
config.series.some((serie) => serie.xAxisIndex === index && serie.enabled && serie.data?.length > 0)) {
|
|
770
|
+
axis.visible = true;
|
|
771
|
+
}
|
|
772
|
+
else {
|
|
773
|
+
axis.visible = false;
|
|
774
|
+
}
|
|
760
775
|
xAxisMap.set(index, Axis.createAxis(AxisOrientation.x, config, index));
|
|
761
776
|
});
|
|
762
777
|
// Generate x scales
|
|
@@ -1312,9 +1327,10 @@ class ZoomableDirective {
|
|
|
1312
1327
|
this.alive = false;
|
|
1313
1328
|
}
|
|
1314
1329
|
initZoomSync() {
|
|
1315
|
-
combineLatest([this.scaleService.scales, this.zoomService.zoomed])
|
|
1330
|
+
combineLatest([this.scaleService.scales, this.zoomService.zoomed])
|
|
1331
|
+
.pipe(takeWhile(() => this.alive))
|
|
1332
|
+
.subscribe((data) => {
|
|
1316
1333
|
const [scales, zoomed] = data;
|
|
1317
|
-
console.log(zoomed.domain);
|
|
1318
1334
|
if (this._element &&
|
|
1319
1335
|
this.elementRef !== zoomed?.element &&
|
|
1320
1336
|
zoomed?.axis?.index === this.axis.index &&
|
|
@@ -1402,7 +1418,7 @@ class ZoomableDirective {
|
|
|
1402
1418
|
transform = transform.translate(this.currentTransform.x - delta / 2, 0);
|
|
1403
1419
|
}
|
|
1404
1420
|
transform = transform.scale(this.currentTransform.k);
|
|
1405
|
-
|
|
1421
|
+
const domain = this.axis.orientation === AxisOrientation.y
|
|
1406
1422
|
? transform.rescaleY(origin).domain()
|
|
1407
1423
|
: transform.rescaleX(origin).domain();
|
|
1408
1424
|
const extent = this.axis.options?.inverted ? domain : [...domain].reverse();
|
|
@@ -2616,11 +2632,14 @@ class SeriesControlsComponent {
|
|
|
2616
2632
|
this.chartService = inject(ChartService);
|
|
2617
2633
|
this.Align = Align$1;
|
|
2618
2634
|
this.series = input();
|
|
2635
|
+
this.availableSeries = computed(() => {
|
|
2636
|
+
return this.series()?.filter((item) => item.showInControls !== false && item.type !== SeriesType.custom) ?? [];
|
|
2637
|
+
});
|
|
2619
2638
|
this.enabledSeries = computed(() => {
|
|
2620
|
-
return this.
|
|
2639
|
+
return this.availableSeries()?.filter((item) => item.enabled) ?? [];
|
|
2621
2640
|
});
|
|
2622
2641
|
this.disabledSeries = computed(() => {
|
|
2623
|
-
return this.
|
|
2642
|
+
return this.availableSeries()?.filter((item) => !item.enabled) ?? [];
|
|
2624
2643
|
});
|
|
2625
2644
|
this.strokeWidth = [
|
|
2626
2645
|
{ id: 1, value: 1 },
|
|
@@ -2691,7 +2710,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
2691
2710
|
AccordionHeadComponent,
|
|
2692
2711
|
AccordionItemComponent,
|
|
2693
2712
|
AccordionContentDirective,
|
|
2694
|
-
CheckboxComponent,
|
|
2695
2713
|
ColorInputComponent,
|
|
2696
2714
|
FormsModule,
|
|
2697
2715
|
SelectComponent,
|
|
@@ -2846,7 +2864,7 @@ class ChartContainerComponent {
|
|
|
2846
2864
|
this._svc.setPointerMove(event);
|
|
2847
2865
|
}
|
|
2848
2866
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ChartContainerComponent, deps: [{ token: ChartService }, { token: ScaleService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2849
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: ChartContainerComponent, isStandalone: true, selector: "teta-chart-container", ngImport: i0, template: "@if ({\n size: size | async,\n config: config | async,\n scales: scales | async,\n plotBands: plotBands | async,\n visibleRect: visibleRect | async,\n}
|
|
2867
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: ChartContainerComponent, isStandalone: true, selector: "teta-chart-container", ngImport: i0, template: "@if ({\n size: size | async,\n config: config | async,\n scales: scales | async,\n plotBands: plotBands | async,\n visibleRect: visibleRect | async,\n}; as data) {\n @if (data.config?.tooltip?.enable) {\n <teta-tooltip [size]=\"data.size\" [config]=\"data.config\"></teta-tooltip>\n }\n @if (data.size?.height > 0 &&\n data.size?.width > 0 &&\n data.visibleRect?.height > 0 &&\n data.visibleRect?.width > 0 &&\n data.scales?.x.size === data.config.xAxis.length &&\n data.scales?.y.size === data.config.yAxis.length) {\n <svg height=\"100%\" width=\"100%\" class=\"position-absolute\">\n <g class=\"y-axis-container\">\n @for (item of data.scales.y | keyvalue; track item.value.index) {\n @if (item.value.selfSize > 0 && item.value.options.visible && data.scales.x.size > 0 && data.scales.y.size > 0) {\n <g teta-y-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></g>\n <rect tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"data.config\"\n [size]=\"data.visibleRect\"\n [attr.x]=\"item.value.options.opposite ? 0 : -item.value.selfSize\"\n [attr.y]=\"0\"\n [attr.height]=\"data.visibleRect.height\"\n [attr.width]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></rect>\n }\n }\n </g>\n <g class=\"x-axis-container\">\n @for (item of data.scales.x | keyvalue; track item.value.index) {\n @if (item.value.options.visible && data.scales.x.size > 0 && data.scales.y.size > 0) {\n <g teta-x-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></g>\n <rect tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"data.config\"\n [size]=\"data.visibleRect\"\n [attr.x]=\"0\"\n [attr.y]=\"item.value.options.opposite ? -item.value.selfSize : 0\"\n [attr.width]=\"data.visibleRect.width\"\n [attr.height]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></rect>\n }\n }\n </g>\n </svg>\n }\n @if (data.size?.height > 0 &&\n data.size?.width > 0 &&\n data.visibleRect?.height > 0 &&\n data.visibleRect?.width > 0 &&\n data.scales?.x.size === data.config.xAxis.length &&\n data.scales?.y.size === data.config.yAxis.length) {\n <svg\n tetaZoomable\n tetaBrushable\n class=\"position-absolute\"\n [size]=\"data.visibleRect\"\n [config]=\"data.config\"\n [axis]=\"data.config?.zoom?.type === zoomType.x ? data.scales.x.get(0) : data.scales.y.get(0)\"\n [attr.width]=\"data.visibleRect.width\"\n [attr.height]=\"data.visibleRect.height\"\n [attr.viewBox]=\"'0 0 ' + data.visibleRect.width + ' ' + data.visibleRect.height\"\n [style.transform]=\"'translate(' + data.visibleRect.x + 'px, ' + data.visibleRect.y + 'px)'\"\n (contextmenu)=\"contextMenu($event, data.scales.x, data.scales.y)\"\n (click)=\"click($event, data.scales.x, data.scales.y)\"\n (mouseleave)=\"mouseLeave($event)\"\n (mousemove)=\"mouseMove($event)\">\n @if (data.config.gridLines?.enable !== false) {\n <g class=\"gridlines\" teta-gridlines [size]=\"data.size\"></g>\n }\n <g class=\"x-axis-plotband-container\">\n @for (plotBand of data.plotBands; track $index) {\n <g teta-plot-band\n [plotBand]=\"plotBand.plotBand\"\n [scale]=\"plotBand.axis.scale\"\n [size]=\"data.visibleRect\"\n [axis]=\"plotBand.axis\"></g>\n }\n </g>\n <g class=\"series-container\">\n @for (series of data.config.series; track $index) {\n @if (series.visible && series.enabled) {\n <g teta-series-host [config]=\"data.config\" [series]=\"series\"></g>\n }\n }\n </g>\n <g class=\"x-axis-plotline-container\">\n @for (axis of data.config.xAxis; let i = $index; track axis) {\n @for (plotLine of axis.plotLines; track $index) {\n <g teta-plot-line\n [plotLine]=\"plotLine\"\n [scale]=\"data.scales.x.get(i).scale\"\n [size]=\"data.size\"\n [axis]=\"data.scales.x.get(i)\"></g>\n }\n }\n </g>\n <g class=\"y-axis-plotline-container\">\n @for (axis of data.config.yAxis; let i = $index; track axis) {\n @for (plotLine of axis.plotLines; track $index) {\n <g teta-plot-line\n [plotLine]=\"plotLine\"\n [scale]=\"data.scales.y.get(i).scale\"\n [size]=\"data.size\"\n [axis]=\"data.scales.y.get(i)\"></g>\n }\n }\n </g>\n <g class=\"annotations\">\n @for (annotation of data.config.annotations; track annotation) {\n <g teta-annotation [visibleRect]=\"data.visibleRect\" [annotation]=\"annotation\"></g>\n }\n </g>\n @if (data.config.tooltip?.showCrosshair) {\n <g class=\"crosshair\">\n <g teta-crosshair [size]=\"data.visibleRect\"></g>\n </g>\n }\n </svg>\n @if (data.config.controls?.enable) {\n <teta-series-controls [series]=\"data.config.series\"\n class=\"position-absolute\"\n style=\"transform: translateX(-100%)\"\n [style.top.px]=\"data.visibleRect.y + 12\"\n [style.left.px]=\"data.visibleRect.width + data.visibleRect.x -12\">\n </teta-series-controls>\n }\n }\n}\n", styles: [":host{display:flex;flex-direction:column;flex-grow:1;min-width:0;min-height:0}:host .zoomable:hover{cursor:grab}:host .zoomable:active{cursor:grabbing}:host .crosshair{cursor:crosshair}\n"], dependencies: [{ kind: "component", type: TooltipComponent, selector: "teta-tooltip", inputs: ["size", "config"] }, { kind: "directive", type: ZoomableDirective, selector: "[tetaZoomable]", inputs: ["config", "axis", "size"] }, { kind: "component", type: XAxisComponent, selector: "[teta-x-axis]", inputs: ["axis", "size"] }, { kind: "component", type: YAxisComponent, selector: "[teta-y-axis]", inputs: ["axis", "size"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "component", type: PlotBandComponent, selector: "[teta-plot-band]", inputs: ["plotBand", "axis", "scale", "size"] }, { kind: "component", type: GridlinesComponent, selector: "[teta-gridlines]", inputs: ["size"] }, { kind: "component", type: SeriesHostComponent, selector: "[teta-series-host]", inputs: ["config", "series"] }, { kind: "component", type: PlotlineComponent, selector: "[teta-plot-line]", inputs: ["plotLine", "size", "axis", "scale"] }, { kind: "component", type: AnnotationComponent, selector: "[teta-annotation]", inputs: ["visibleRect", "annotation"] }, { kind: "component", type: CrosshairComponent, selector: "[teta-crosshair]", inputs: ["size"] }, { kind: "directive", type: BrushableDirective, selector: "[tetaBrushable]", inputs: ["config", "axis"] }, { kind: "component", type: SeriesControlsComponent, selector: "teta-series-controls", inputs: ["series"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
2850
2868
|
}
|
|
2851
2869
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ChartContainerComponent, decorators: [{
|
|
2852
2870
|
type: Component,
|
|
@@ -2865,7 +2883,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
2865
2883
|
CrosshairComponent,
|
|
2866
2884
|
BrushableDirective,
|
|
2867
2885
|
SeriesControlsComponent,
|
|
2868
|
-
], template: "@if ({\n size: size | async,\n config: config | async,\n scales: scales | async,\n plotBands: plotBands | async,\n visibleRect: visibleRect | async,\n}
|
|
2886
|
+
], template: "@if ({\n size: size | async,\n config: config | async,\n scales: scales | async,\n plotBands: plotBands | async,\n visibleRect: visibleRect | async,\n}; as data) {\n @if (data.config?.tooltip?.enable) {\n <teta-tooltip [size]=\"data.size\" [config]=\"data.config\"></teta-tooltip>\n }\n @if (data.size?.height > 0 &&\n data.size?.width > 0 &&\n data.visibleRect?.height > 0 &&\n data.visibleRect?.width > 0 &&\n data.scales?.x.size === data.config.xAxis.length &&\n data.scales?.y.size === data.config.yAxis.length) {\n <svg height=\"100%\" width=\"100%\" class=\"position-absolute\">\n <g class=\"y-axis-container\">\n @for (item of data.scales.y | keyvalue; track item.value.index) {\n @if (item.value.selfSize > 0 && item.value.options.visible && data.scales.x.size > 0 && data.scales.y.size > 0) {\n <g teta-y-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></g>\n <rect tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"data.config\"\n [size]=\"data.visibleRect\"\n [attr.x]=\"item.value.options.opposite ? 0 : -item.value.selfSize\"\n [attr.y]=\"0\"\n [attr.height]=\"data.visibleRect.height\"\n [attr.width]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></rect>\n }\n }\n </g>\n <g class=\"x-axis-container\">\n @for (item of data.scales.x | keyvalue; track item.value.index) {\n @if (item.value.options.visible && data.scales.x.size > 0 && data.scales.y.size > 0) {\n <g teta-x-axis\n [axis]=\"item.value\"\n [size]=\"data.visibleRect\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></g>\n <rect tetaZoomable\n fill-opacity=\"0\"\n [axis]=\"item.value\"\n [config]=\"data.config\"\n [size]=\"data.visibleRect\"\n [attr.x]=\"0\"\n [attr.y]=\"item.value.options.opposite ? -item.value.selfSize : 0\"\n [attr.width]=\"data.visibleRect.width\"\n [attr.height]=\"item.value.selfSize\"\n [attr.transform]=\"getTranslate(item.value, data.size) | async\"></rect>\n }\n }\n </g>\n </svg>\n }\n @if (data.size?.height > 0 &&\n data.size?.width > 0 &&\n data.visibleRect?.height > 0 &&\n data.visibleRect?.width > 0 &&\n data.scales?.x.size === data.config.xAxis.length &&\n data.scales?.y.size === data.config.yAxis.length) {\n <svg\n tetaZoomable\n tetaBrushable\n class=\"position-absolute\"\n [size]=\"data.visibleRect\"\n [config]=\"data.config\"\n [axis]=\"data.config?.zoom?.type === zoomType.x ? data.scales.x.get(0) : data.scales.y.get(0)\"\n [attr.width]=\"data.visibleRect.width\"\n [attr.height]=\"data.visibleRect.height\"\n [attr.viewBox]=\"'0 0 ' + data.visibleRect.width + ' ' + data.visibleRect.height\"\n [style.transform]=\"'translate(' + data.visibleRect.x + 'px, ' + data.visibleRect.y + 'px)'\"\n (contextmenu)=\"contextMenu($event, data.scales.x, data.scales.y)\"\n (click)=\"click($event, data.scales.x, data.scales.y)\"\n (mouseleave)=\"mouseLeave($event)\"\n (mousemove)=\"mouseMove($event)\">\n @if (data.config.gridLines?.enable !== false) {\n <g class=\"gridlines\" teta-gridlines [size]=\"data.size\"></g>\n }\n <g class=\"x-axis-plotband-container\">\n @for (plotBand of data.plotBands; track $index) {\n <g teta-plot-band\n [plotBand]=\"plotBand.plotBand\"\n [scale]=\"plotBand.axis.scale\"\n [size]=\"data.visibleRect\"\n [axis]=\"plotBand.axis\"></g>\n }\n </g>\n <g class=\"series-container\">\n @for (series of data.config.series; track $index) {\n @if (series.visible && series.enabled) {\n <g teta-series-host [config]=\"data.config\" [series]=\"series\"></g>\n }\n }\n </g>\n <g class=\"x-axis-plotline-container\">\n @for (axis of data.config.xAxis; let i = $index; track axis) {\n @for (plotLine of axis.plotLines; track $index) {\n <g teta-plot-line\n [plotLine]=\"plotLine\"\n [scale]=\"data.scales.x.get(i).scale\"\n [size]=\"data.size\"\n [axis]=\"data.scales.x.get(i)\"></g>\n }\n }\n </g>\n <g class=\"y-axis-plotline-container\">\n @for (axis of data.config.yAxis; let i = $index; track axis) {\n @for (plotLine of axis.plotLines; track $index) {\n <g teta-plot-line\n [plotLine]=\"plotLine\"\n [scale]=\"data.scales.y.get(i).scale\"\n [size]=\"data.size\"\n [axis]=\"data.scales.y.get(i)\"></g>\n }\n }\n </g>\n <g class=\"annotations\">\n @for (annotation of data.config.annotations; track annotation) {\n <g teta-annotation [visibleRect]=\"data.visibleRect\" [annotation]=\"annotation\"></g>\n }\n </g>\n @if (data.config.tooltip?.showCrosshair) {\n <g class=\"crosshair\">\n <g teta-crosshair [size]=\"data.visibleRect\"></g>\n </g>\n }\n </svg>\n @if (data.config.controls?.enable) {\n <teta-series-controls [series]=\"data.config.series\"\n class=\"position-absolute\"\n style=\"transform: translateX(-100%)\"\n [style.top.px]=\"data.visibleRect.y + 12\"\n [style.left.px]=\"data.visibleRect.width + data.visibleRect.x -12\">\n </teta-series-controls>\n }\n }\n}\n", styles: [":host{display:flex;flex-direction:column;flex-grow:1;min-width:0;min-height:0}:host .zoomable:hover{cursor:grab}:host .zoomable:active{cursor:grabbing}:host .crosshair{cursor:crosshair}\n"] }]
|
|
2869
2887
|
}], ctorParameters: () => [{ type: ChartService }, { type: ScaleService }, { type: i0.ElementRef }] });
|
|
2870
2888
|
|
|
2871
2889
|
class LegendComponent {
|