@tetacom/svg-charts 1.0.1
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/.browserslistrc +16 -0
- package/README.md +24 -0
- package/dist/README.md +24 -0
- package/dist/chart/base/series-base.component.d.ts +22 -0
- package/dist/chart/chart/chart.component.d.ts +29 -0
- package/dist/chart/chart-container/chart-container.component.d.ts +42 -0
- package/dist/chart/chart-container/gridlines/gridlines.component.d.ts +23 -0
- package/dist/chart/chart-container/plotband/plotband.component.d.ts +33 -0
- package/dist/chart/chart-container/plotline/plotline.component.d.ts +30 -0
- package/dist/chart/chart-container/series/bar/bar-series.component.d.ts +25 -0
- package/dist/chart/chart-container/series/line/line-series.component.d.ts +28 -0
- package/dist/chart/chart-container/series-host/series-host.component.d.ts +20 -0
- package/dist/chart/chart-container/tooltip/tooltip.component.d.ts +29 -0
- package/dist/chart/chart-container/x-axis/x-axis.component.d.ts +23 -0
- package/dist/chart/chart-container/y-axis/y-axis.component.d.ts +24 -0
- package/dist/chart/chart.module.d.ts +22 -0
- package/dist/chart/core/axis/axis.d.ts +54 -0
- package/dist/chart/core/axis/builders/axis-size-builder.d.ts +8 -0
- package/dist/chart/core/axis/builders/extremes-builder.d.ts +7 -0
- package/dist/chart/core/axis/builders/public-api.d.ts +2 -0
- package/dist/chart/core/utils/generate-ticks.d.ts +1 -0
- package/dist/chart/core/utils/get-text-width.d.ts +1 -0
- package/dist/chart/core/utils/public-api.d.ts +2 -0
- package/dist/chart/directives/brushable.directive.d.ts +17 -0
- package/dist/chart/directives/zoomable.directive.d.ts +20 -0
- package/dist/chart/legend/legend.component.d.ts +14 -0
- package/dist/chart/model/axis-options.d.ts +17 -0
- package/dist/chart/model/base-point.d.ts +9 -0
- package/dist/chart/model/chart-bounds.d.ts +12 -0
- package/dist/chart/model/enum/axis-orientation.d.ts +4 -0
- package/dist/chart/model/enum/axis-type.d.ts +7 -0
- package/dist/chart/model/enum/brush-type.d.ts +5 -0
- package/dist/chart/model/enum/drag-point-type.d.ts +5 -0
- package/dist/chart/model/enum/series-type.d.ts +4 -0
- package/dist/chart/model/enum/tooltip-tracking.d.ts +4 -0
- package/dist/chart/model/enum/zoom-type.d.ts +5 -0
- package/dist/chart/model/i-broadcast-message.d.ts +5 -0
- package/dist/chart/model/i-builder.d.ts +3 -0
- package/dist/chart/model/i-chart-config.d.ts +32 -0
- package/dist/chart/model/i-chart-event.d.ts +4 -0
- package/dist/chart/model/i-display-tooltip.d.ts +6 -0
- package/dist/chart/model/i-point-move.d.ts +6 -0
- package/dist/chart/model/marker-options.d.ts +7 -0
- package/dist/chart/model/plotband.d.ts +31 -0
- package/dist/chart/model/plotline.d.ts +19 -0
- package/dist/chart/model/series.d.ts +17 -0
- package/dist/chart/model/svg-attributes.d.ts +14 -0
- package/dist/chart/model/tooltip-options.d.ts +8 -0
- package/dist/chart/service/axes.service.d.ts +11 -0
- package/dist/chart/service/broadcast.service.d.ts +11 -0
- package/dist/chart/service/brush.service.d.ts +17 -0
- package/dist/chart/service/chart.service.d.ts +38 -0
- package/dist/chart/service/scale.service.d.ts +14 -0
- package/dist/chart/service/zoom.service.d.ts +25 -0
- package/dist/esm2020/chart/base/series-base.component.mjs +34 -0
- package/dist/esm2020/chart/chart/chart.component.mjs +73 -0
- package/dist/esm2020/chart/chart-container/chart-container.component.mjs +151 -0
- package/dist/esm2020/chart/chart-container/gridlines/gridlines.component.mjs +41 -0
- package/dist/esm2020/chart/chart-container/plotband/plotband.component.mjs +139 -0
- package/dist/esm2020/chart/chart-container/plotline/plotline.component.mjs +79 -0
- package/dist/esm2020/chart/chart-container/series/bar/bar-series.component.mjs +48 -0
- package/dist/esm2020/chart/chart-container/series/line/line-series.component.mjs +148 -0
- package/dist/esm2020/chart/chart-container/series-host/series-host.component.mjs +59 -0
- package/dist/esm2020/chart/chart-container/tooltip/tooltip.component.mjs +81 -0
- package/dist/esm2020/chart/chart-container/x-axis/x-axis.component.mjs +56 -0
- package/dist/esm2020/chart/chart-container/y-axis/y-axis.component.mjs +63 -0
- package/dist/esm2020/chart/chart.module.mjs +62 -0
- package/dist/esm2020/chart/core/axis/axis.mjs +96 -0
- package/dist/esm2020/chart/core/axis/builders/axis-size-builder.mjs +24 -0
- package/dist/esm2020/chart/core/axis/builders/extremes-builder.mjs +32 -0
- package/dist/esm2020/chart/core/axis/builders/public-api.mjs +3 -0
- package/dist/esm2020/chart/core/utils/generate-ticks.mjs +11 -0
- package/dist/esm2020/chart/core/utils/get-text-width.mjs +6 -0
- package/dist/esm2020/chart/core/utils/public-api.mjs +3 -0
- package/dist/esm2020/chart/directives/brushable.directive.mjs +28 -0
- package/dist/esm2020/chart/directives/zoomable.directive.mjs +37 -0
- package/dist/esm2020/chart/legend/legend.component.mjs +30 -0
- package/dist/esm2020/chart/model/axis-options.mjs +2 -0
- package/dist/esm2020/chart/model/base-point.mjs +2 -0
- package/dist/esm2020/chart/model/chart-bounds.mjs +13 -0
- package/dist/esm2020/chart/model/enum/axis-orientation.mjs +6 -0
- package/dist/esm2020/chart/model/enum/axis-type.mjs +9 -0
- package/dist/esm2020/chart/model/enum/brush-type.mjs +7 -0
- package/dist/esm2020/chart/model/enum/drag-point-type.mjs +7 -0
- package/dist/esm2020/chart/model/enum/series-type.mjs +6 -0
- package/dist/esm2020/chart/model/enum/tooltip-tracking.mjs +6 -0
- package/dist/esm2020/chart/model/enum/zoom-type.mjs +7 -0
- package/dist/esm2020/chart/model/i-broadcast-message.mjs +2 -0
- package/dist/esm2020/chart/model/i-builder.mjs +2 -0
- package/dist/esm2020/chart/model/i-chart-config.mjs +2 -0
- package/dist/esm2020/chart/model/i-chart-event.mjs +2 -0
- package/dist/esm2020/chart/model/i-display-tooltip.mjs +2 -0
- package/dist/esm2020/chart/model/i-point-move.mjs +2 -0
- package/dist/esm2020/chart/model/marker-options.mjs +2 -0
- package/dist/esm2020/chart/model/plotband.mjs +16 -0
- package/dist/esm2020/chart/model/plotline.mjs +12 -0
- package/dist/esm2020/chart/model/series.mjs +2 -0
- package/dist/esm2020/chart/model/svg-attributes.mjs +2 -0
- package/dist/esm2020/chart/model/tooltip-options.mjs +2 -0
- package/dist/esm2020/chart/service/axes.service.mjs +29 -0
- package/dist/esm2020/chart/service/broadcast.service.mjs +25 -0
- package/dist/esm2020/chart/service/brush.service.mjs +67 -0
- package/dist/esm2020/chart/service/chart.service.mjs +76 -0
- package/dist/esm2020/chart/service/scale.service.mjs +64 -0
- package/dist/esm2020/chart/service/zoom.service.mjs +117 -0
- package/dist/esm2020/public-api.mjs +7 -0
- package/dist/esm2020/tetacom-svg-charts.mjs +5 -0
- package/dist/fesm2015/tetacom-svg-charts.mjs +1589 -0
- package/dist/fesm2015/tetacom-svg-charts.mjs.map +1 -0
- package/dist/fesm2020/tetacom-svg-charts.mjs +1575 -0
- package/dist/fesm2020/tetacom-svg-charts.mjs.map +1 -0
- package/dist/package.json +35 -0
- package/dist/public-api.d.ts +3 -0
- package/dist/tetacom-svg-charts.d.ts +5 -0
- package/karma.conf.js +44 -0
- package/ng-package.json +7 -0
- package/package.json +15 -0
- package/src/chart/Chart.stories.ts +397 -0
- package/src/chart/base/series-base.component.ts +41 -0
- package/src/chart/chart/chart.component.html +5 -0
- package/src/chart/chart/chart.component.scss +6 -0
- package/src/chart/chart/chart.component.spec.ts +25 -0
- package/src/chart/chart/chart.component.ts +97 -0
- package/src/chart/chart-container/chart-container.component.html +78 -0
- package/src/chart/chart-container/chart-container.component.scss +15 -0
- package/src/chart/chart-container/chart-container.component.spec.ts +25 -0
- package/src/chart/chart-container/chart-container.component.ts +242 -0
- package/src/chart/chart-container/gridlines/gridlines.component.html +7 -0
- package/src/chart/chart-container/gridlines/gridlines.component.scss +8 -0
- package/src/chart/chart-container/gridlines/gridlines.component.spec.ts +25 -0
- package/src/chart/chart-container/gridlines/gridlines.component.ts +55 -0
- package/src/chart/chart-container/plotband/plotband.component.html +58 -0
- package/src/chart/chart-container/plotband/plotband.component.scss +13 -0
- package/src/chart/chart-container/plotband/plotband.component.spec.ts +25 -0
- package/src/chart/chart-container/plotband/plotband.component.ts +206 -0
- package/src/chart/chart-container/plotline/plotline.component.html +22 -0
- package/src/chart/chart-container/plotline/plotline.component.scss +6 -0
- package/src/chart/chart-container/plotline/plotline.component.spec.ts +25 -0
- package/src/chart/chart-container/plotline/plotline.component.ts +113 -0
- package/src/chart/chart-container/series/bar/bar-series.component.html +3 -0
- package/src/chart/chart-container/series/bar/bar-series.component.scss +0 -0
- package/src/chart/chart-container/series/bar/bar-series.component.ts +71 -0
- package/src/chart/chart-container/series/line/line-series.component.html +38 -0
- package/src/chart/chart-container/series/line/line-series.component.scss +9 -0
- package/src/chart/chart-container/series/line/line-series.component.spec.ts +25 -0
- package/src/chart/chart-container/series/line/line-series.component.ts +245 -0
- package/src/chart/chart-container/series-host/series-host.component.ts +80 -0
- package/src/chart/chart-container/tooltip/tooltip.component.html +14 -0
- package/src/chart/chart-container/tooltip/tooltip.component.scss +7 -0
- package/src/chart/chart-container/tooltip/tooltip.component.spec.ts +25 -0
- package/src/chart/chart-container/tooltip/tooltip.component.ts +134 -0
- package/src/chart/chart-container/x-axis/x-axis.component.html +1 -0
- package/src/chart/chart-container/x-axis/x-axis.component.scss +3 -0
- package/src/chart/chart-container/x-axis/x-axis.component.spec.ts +25 -0
- package/src/chart/chart-container/x-axis/x-axis.component.ts +80 -0
- package/src/chart/chart-container/y-axis/y-axis.component.html +4 -0
- package/src/chart/chart-container/y-axis/y-axis.component.scss +13 -0
- package/src/chart/chart-container/y-axis/y-axis.component.spec.ts +25 -0
- package/src/chart/chart-container/y-axis/y-axis.component.ts +90 -0
- package/src/chart/chart.module.ts +40 -0
- package/src/chart/core/axis/axis.ts +132 -0
- package/src/chart/core/axis/builders/axis-size-builder.ts +37 -0
- package/src/chart/core/axis/builders/extremes-builder.ts +45 -0
- package/src/chart/core/axis/builders/public-api.ts +2 -0
- package/src/chart/core/utils/generate-ticks.ts +14 -0
- package/src/chart/core/utils/get-text-width.ts +10 -0
- package/src/chart/core/utils/public-api.ts +2 -0
- package/src/chart/default/default-chart-config.ts +12 -0
- package/src/chart/directives/brushable.directive.ts +30 -0
- package/src/chart/directives/zoomable.directive.ts +31 -0
- package/src/chart/legend/legend.component.html +6 -0
- package/src/chart/legend/legend.component.scss +20 -0
- package/src/chart/legend/legend.component.spec.ts +25 -0
- package/src/chart/legend/legend.component.ts +35 -0
- package/src/chart/model/axis-options.ts +18 -0
- package/src/chart/model/base-point.ts +10 -0
- package/src/chart/model/chart-bounds.ts +18 -0
- package/src/chart/model/enum/axis-orientation.ts +4 -0
- package/src/chart/model/enum/axis-type.ts +7 -0
- package/src/chart/model/enum/brush-type.ts +5 -0
- package/src/chart/model/enum/drag-point-type.ts +5 -0
- package/src/chart/model/enum/public-api.ts +7 -0
- package/src/chart/model/enum/series-type.ts +4 -0
- package/src/chart/model/enum/tooltip-tracking.ts +4 -0
- package/src/chart/model/enum/zoom-type.ts +5 -0
- package/src/chart/model/i-broadcast-message.ts +5 -0
- package/src/chart/model/i-builder.ts +3 -0
- package/src/chart/model/i-chart-config.ts +33 -0
- package/src/chart/model/i-chart-event.ts +4 -0
- package/src/chart/model/i-display-tooltip.ts +7 -0
- package/src/chart/model/i-drag-event.ts +5 -0
- package/src/chart/model/i-point-move.ts +7 -0
- package/src/chart/model/marker-options.ts +8 -0
- package/src/chart/model/plotband.ts +45 -0
- package/src/chart/model/plotline.ts +29 -0
- package/src/chart/model/public-api.ts +0 -0
- package/src/chart/model/series.ts +18 -0
- package/src/chart/model/svg-attributes.ts +14 -0
- package/src/chart/model/tooltip-options.ts +37 -0
- package/src/chart/service/axes.service.spec.ts +16 -0
- package/src/chart/service/axes.service.ts +27 -0
- package/src/chart/service/broadcast.service.spec.ts +16 -0
- package/src/chart/service/broadcast.service.ts +24 -0
- package/src/chart/service/brush.service.spec.ts +16 -0
- package/src/chart/service/brush.service.ts +87 -0
- package/src/chart/service/chart.service.spec.ts +16 -0
- package/src/chart/service/chart.service.ts +100 -0
- package/src/chart/service/scale.service.spec.ts +16 -0
- package/src/chart/service/scale.service.ts +74 -0
- package/src/chart/service/zoom.service.spec.ts +16 -0
- package/src/chart/service/zoom.service.ts +153 -0
- package/src/public-api.ts +7 -0
- package/src/test.ts +27 -0
- package/tsconfig.lib.json +15 -0
- package/tsconfig.lib.prod.json +10 -0
- package/tsconfig.spec.json +17 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AfterViewInit,
|
|
3
|
+
Directive,
|
|
4
|
+
ElementRef,
|
|
5
|
+
Input,
|
|
6
|
+
OnInit,
|
|
7
|
+
} from '@angular/core';
|
|
8
|
+
import { IChartConfig } from '../model/i-chart-config';
|
|
9
|
+
import { BrushService } from '../service/brush.service';
|
|
10
|
+
import { ChartService } from '../service/chart.service';
|
|
11
|
+
|
|
12
|
+
@Directive({
|
|
13
|
+
selector: 'svg:svg[tetaBrushable]',
|
|
14
|
+
})
|
|
15
|
+
export class BrushableDirective implements OnInit, AfterViewInit {
|
|
16
|
+
@Input() config?: IChartConfig;
|
|
17
|
+
@Input() size?: DOMRect;
|
|
18
|
+
|
|
19
|
+
constructor(
|
|
20
|
+
private brushService: BrushService,
|
|
21
|
+
private chartService: ChartService,
|
|
22
|
+
private element: ElementRef
|
|
23
|
+
) {}
|
|
24
|
+
|
|
25
|
+
ngOnInit() {}
|
|
26
|
+
|
|
27
|
+
ngAfterViewInit() {
|
|
28
|
+
this.brushService.applyBrush(this.element, this.config, this.size);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Directive, ElementRef, HostBinding, Input } from '@angular/core';
|
|
2
|
+
import { ZoomService } from '../service/zoom.service';
|
|
3
|
+
import { ChartService } from '../service/chart.service';
|
|
4
|
+
import { IChartConfig } from '../model/i-chart-config';
|
|
5
|
+
import { Axis } from '../core/axis/axis';
|
|
6
|
+
|
|
7
|
+
@Directive({
|
|
8
|
+
selector: '[tetaZoomable]',
|
|
9
|
+
})
|
|
10
|
+
export class ZoomableDirective {
|
|
11
|
+
@Input() config?: IChartConfig;
|
|
12
|
+
@Input() axis?: Axis;
|
|
13
|
+
@Input() size?: DOMRect;
|
|
14
|
+
|
|
15
|
+
@HostBinding('class.zoomable') private zoomable = false;
|
|
16
|
+
|
|
17
|
+
constructor(
|
|
18
|
+
private element: ElementRef,
|
|
19
|
+
private svc: ZoomService,
|
|
20
|
+
private chartService: ChartService
|
|
21
|
+
) {}
|
|
22
|
+
|
|
23
|
+
ngOnInit() {
|
|
24
|
+
if (this.config?.zoom?.enable || this.axis?.options?.zoom) {
|
|
25
|
+
this.zoomable = true;
|
|
26
|
+
|
|
27
|
+
this.svc.applyZoom(this.element, this.chartService.config, this.size);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
ngAfterViewInit() {}
|
|
31
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
:host {
|
|
2
|
+
display: flex;
|
|
3
|
+
grid-gap: 8px;
|
|
4
|
+
flex-wrap: wrap;
|
|
5
|
+
align-items: center;
|
|
6
|
+
justify-content: space-evenly;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
:host .legend-item {
|
|
10
|
+
display: flex;
|
|
11
|
+
align-items: center;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
:host .legend-icon-form {
|
|
15
|
+
width: 12px;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
:host .legend-label {
|
|
19
|
+
margin-left: 5px;
|
|
20
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
|
2
|
+
|
|
3
|
+
import { LegendComponent } from './legend.component';
|
|
4
|
+
|
|
5
|
+
describe('LegendComponent', () => {
|
|
6
|
+
let component: LegendComponent;
|
|
7
|
+
let fixture: ComponentFixture<LegendComponent>;
|
|
8
|
+
|
|
9
|
+
beforeEach(async () => {
|
|
10
|
+
await TestBed.configureTestingModule({
|
|
11
|
+
declarations: [ LegendComponent ]
|
|
12
|
+
})
|
|
13
|
+
.compileComponents();
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
beforeEach(() => {
|
|
17
|
+
fixture = TestBed.createComponent(LegendComponent);
|
|
18
|
+
component = fixture.componentInstance;
|
|
19
|
+
fixture.detectChanges();
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('should create', () => {
|
|
23
|
+
expect(component).toBeTruthy();
|
|
24
|
+
});
|
|
25
|
+
});
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ChangeDetectionStrategy,
|
|
3
|
+
Component,
|
|
4
|
+
HostBinding,
|
|
5
|
+
Input,
|
|
6
|
+
OnInit,
|
|
7
|
+
} from '@angular/core';
|
|
8
|
+
import { Series } from '../model/series';
|
|
9
|
+
import { BasePoint } from '../model/base-point';
|
|
10
|
+
import { SeriesType } from '../model/enum/series-type';
|
|
11
|
+
|
|
12
|
+
@Component({
|
|
13
|
+
selector: 'teta-legend',
|
|
14
|
+
templateUrl: './legend.component.html',
|
|
15
|
+
styleUrls: ['./legend.component.scss'],
|
|
16
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
17
|
+
})
|
|
18
|
+
export class LegendComponent implements OnInit {
|
|
19
|
+
private sizeMapping = new Map<SeriesType, number>()
|
|
20
|
+
.set(SeriesType.line, 2)
|
|
21
|
+
.set(SeriesType.bar, 12);
|
|
22
|
+
|
|
23
|
+
@Input() series: Array<Series<BasePoint>>;
|
|
24
|
+
@HostBinding('class.padding-bottom-4') classLegend = true;
|
|
25
|
+
|
|
26
|
+
constructor() {}
|
|
27
|
+
|
|
28
|
+
ngOnInit(): void {
|
|
29
|
+
this.series = this.series?.filter((_) => _.showInLegend !== false);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
getHeight(serie: Series<BasePoint>) {
|
|
33
|
+
return this.sizeMapping.get(serie.type);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { AxisType } from './enum/axis-type';
|
|
2
|
+
import { Plotband } from './plotband';
|
|
3
|
+
import { PlotLine } from './plotline';
|
|
4
|
+
|
|
5
|
+
export interface AxisOptions {
|
|
6
|
+
title?: string;
|
|
7
|
+
min?: number;
|
|
8
|
+
max?: number;
|
|
9
|
+
visible?: boolean;
|
|
10
|
+
tickFormat?: (d: any) => string;
|
|
11
|
+
type?: AxisType;
|
|
12
|
+
zoom?: boolean;
|
|
13
|
+
inverted?: boolean;
|
|
14
|
+
negative?: boolean;
|
|
15
|
+
opposite?: boolean;
|
|
16
|
+
plotbands?: Plotband[];
|
|
17
|
+
plotlines?: PlotLine[];
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export class ChartBounds {
|
|
2
|
+
top = 0;
|
|
3
|
+
right = 30;
|
|
4
|
+
bottom = 0;
|
|
5
|
+
left = 0;
|
|
6
|
+
|
|
7
|
+
constructor(options?: {
|
|
8
|
+
top?: number;
|
|
9
|
+
right?: number;
|
|
10
|
+
bottom?: number;
|
|
11
|
+
left: number;
|
|
12
|
+
}) {
|
|
13
|
+
this.top = options?.top || this.top;
|
|
14
|
+
this.right = options?.right || this.right;
|
|
15
|
+
this.bottom = options?.bottom || this.bottom;
|
|
16
|
+
this.left = options?.left || this.left;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Series } from './series';
|
|
2
|
+
import { BasePoint } from './base-point';
|
|
3
|
+
import { AxisOptions } from './axis-options';
|
|
4
|
+
import { ZoomType } from './enum/zoom-type';
|
|
5
|
+
import { TooltipOptions } from './tooltip-options';
|
|
6
|
+
import { ChartBounds } from './chart-bounds';
|
|
7
|
+
import { BrushType } from './enum/brush-type';
|
|
8
|
+
|
|
9
|
+
export interface IChartConfig {
|
|
10
|
+
name?: string;
|
|
11
|
+
series?: Series<BasePoint>[];
|
|
12
|
+
zoom?: {
|
|
13
|
+
enable: boolean;
|
|
14
|
+
type: ZoomType;
|
|
15
|
+
syncChannel?: string;
|
|
16
|
+
};
|
|
17
|
+
brush?: {
|
|
18
|
+
enable: boolean;
|
|
19
|
+
type: BrushType;
|
|
20
|
+
axisIndex?: number;
|
|
21
|
+
};
|
|
22
|
+
legend?: {
|
|
23
|
+
enable?: boolean;
|
|
24
|
+
};
|
|
25
|
+
bounds?: ChartBounds;
|
|
26
|
+
inverted?: boolean;
|
|
27
|
+
tooltip?: TooltipOptions;
|
|
28
|
+
xAxis: AxisOptions[];
|
|
29
|
+
yAxis: AxisOptions[];
|
|
30
|
+
gridLines?: boolean;
|
|
31
|
+
width?: number;
|
|
32
|
+
height?: number;
|
|
33
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { SvgAttributes } from './svg-attributes';
|
|
2
|
+
|
|
3
|
+
export class Plotband {
|
|
4
|
+
id: number | string;
|
|
5
|
+
from: number;
|
|
6
|
+
to: number;
|
|
7
|
+
label?: string;
|
|
8
|
+
showGrabbers?: boolean;
|
|
9
|
+
draggable?: boolean;
|
|
10
|
+
resizable?: boolean;
|
|
11
|
+
min?: number;
|
|
12
|
+
max?: number;
|
|
13
|
+
style?: {
|
|
14
|
+
plotband?: SvgAttributes;
|
|
15
|
+
grabbers?: SvgAttributes;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
constructor(options?: {
|
|
19
|
+
id: any;
|
|
20
|
+
from: number;
|
|
21
|
+
to: number;
|
|
22
|
+
label?: string;
|
|
23
|
+
showGrabbers?: boolean;
|
|
24
|
+
draggable?: boolean;
|
|
25
|
+
resizable?: boolean;
|
|
26
|
+
min?: number;
|
|
27
|
+
max?: number;
|
|
28
|
+
style?: {
|
|
29
|
+
plotband?: SvgAttributes;
|
|
30
|
+
grabbers?: SvgAttributes;
|
|
31
|
+
};
|
|
32
|
+
}) {
|
|
33
|
+
this.id = options?.id;
|
|
34
|
+
this.from = options?.from;
|
|
35
|
+
this.to = options?.to;
|
|
36
|
+
this.label = options?.label;
|
|
37
|
+
this.showGrabbers =
|
|
38
|
+
options?.showGrabbers != null ? options.showGrabbers : true;
|
|
39
|
+
this.draggable = options?.draggable != null ? options?.draggable : false;
|
|
40
|
+
this.resizable = options?.resizable != null ? options?.resizable : true;
|
|
41
|
+
this.min = options?.min;
|
|
42
|
+
this.max = options?.max;
|
|
43
|
+
this.style = options?.style;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { SvgAttributes } from './svg-attributes';
|
|
2
|
+
|
|
3
|
+
export class PlotLine {
|
|
4
|
+
id?: number | string;
|
|
5
|
+
value: number;
|
|
6
|
+
label?: string;
|
|
7
|
+
min?: number;
|
|
8
|
+
max?: number;
|
|
9
|
+
draggable?: boolean;
|
|
10
|
+
style?: SvgAttributes;
|
|
11
|
+
|
|
12
|
+
constructor(options?: {
|
|
13
|
+
id?: number;
|
|
14
|
+
value: number;
|
|
15
|
+
label?: string;
|
|
16
|
+
min?: number;
|
|
17
|
+
max?: number;
|
|
18
|
+
draggable?: boolean;
|
|
19
|
+
style?: SvgAttributes;
|
|
20
|
+
}) {
|
|
21
|
+
this.id = options?.id;
|
|
22
|
+
this.value = options?.value;
|
|
23
|
+
this.label = options?.label;
|
|
24
|
+
this.min = options?.min;
|
|
25
|
+
this.max = options?.max;
|
|
26
|
+
this.draggable = options?.draggable;
|
|
27
|
+
this.style = options?.style;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { BasePoint } from './base-point';
|
|
2
|
+
import { SeriesType } from './enum/series-type';
|
|
3
|
+
import { SeriesBaseComponent } from '../base/series-base.component';
|
|
4
|
+
import { SvgAttributes } from './svg-attributes';
|
|
5
|
+
|
|
6
|
+
export interface Series<T extends BasePoint> {
|
|
7
|
+
id?: number | string;
|
|
8
|
+
type: SeriesType;
|
|
9
|
+
data: T[];
|
|
10
|
+
name?: string;
|
|
11
|
+
xAxisIndex?: number;
|
|
12
|
+
yAxisIndex?: number;
|
|
13
|
+
component?: typeof SeriesBaseComponent;
|
|
14
|
+
visible?: boolean;
|
|
15
|
+
color?: string;
|
|
16
|
+
showInLegend?: boolean;
|
|
17
|
+
style?: SvgAttributes;
|
|
18
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface SvgAttributes {
|
|
2
|
+
className?: string;
|
|
3
|
+
fill?: string;
|
|
4
|
+
fillOpacity?: number;
|
|
5
|
+
opacity?: number;
|
|
6
|
+
stroke?: string;
|
|
7
|
+
strokeLinecap?: 'butt' | 'round' | 'square';
|
|
8
|
+
strokeLinejoin?: 'butt' | 'round' | 'square';
|
|
9
|
+
strokeDasharray?: string;
|
|
10
|
+
strokeOpacity?: number;
|
|
11
|
+
strokeWidth?: number;
|
|
12
|
+
patternImage?: string;
|
|
13
|
+
radius?: number;
|
|
14
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { TooltipTracking } from './enum/tooltip-tracking';
|
|
2
|
+
|
|
3
|
+
export interface TooltipOptions {
|
|
4
|
+
enable?: boolean;
|
|
5
|
+
showMarkers?: boolean;
|
|
6
|
+
showLine?: boolean;
|
|
7
|
+
tracking?: TooltipTracking;
|
|
8
|
+
format?: (data: any) => any;
|
|
9
|
+
//
|
|
10
|
+
// constructor(options?: {
|
|
11
|
+
// enable?: boolean;
|
|
12
|
+
// showMarkers?: boolean;
|
|
13
|
+
// showLine?: boolean;
|
|
14
|
+
// tracking?: TooltipTracking;
|
|
15
|
+
// format?: (data: any) => any;
|
|
16
|
+
// }) {
|
|
17
|
+
// const defaultFormatter = (tooltips) => {
|
|
18
|
+
// let html = '';
|
|
19
|
+
//
|
|
20
|
+
// // tooltips
|
|
21
|
+
// // .filter((_) => _.point)
|
|
22
|
+
// // .forEach((_) => {
|
|
23
|
+
// // html += `<div>${_.name ?? 'Без названия'} x: ${_.point?.x?.toFixed(
|
|
24
|
+
// // 2
|
|
25
|
+
// // )} y: ${_.point?.y?.toFixed(2)}</div>`;
|
|
26
|
+
// // });
|
|
27
|
+
//
|
|
28
|
+
// return html;
|
|
29
|
+
// };
|
|
30
|
+
//
|
|
31
|
+
// this.enable = options?.enable ?? true;
|
|
32
|
+
// this.showMarkers = options?.showMarkers ?? true;
|
|
33
|
+
// this.showLine = options?.showLine ?? false;
|
|
34
|
+
// this.tracking = options?.tracking ?? TooltipTracking.x;
|
|
35
|
+
// this.format = options?.format ?? defaultFormatter;
|
|
36
|
+
// }
|
|
37
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { TestBed } from '@angular/core/testing';
|
|
2
|
+
|
|
3
|
+
import { AxesService } from './axes.service';
|
|
4
|
+
|
|
5
|
+
describe('AxesService', () => {
|
|
6
|
+
let service: AxesService;
|
|
7
|
+
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
TestBed.configureTestingModule({});
|
|
10
|
+
service = TestBed.inject(AxesService);
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it('should be created', () => {
|
|
14
|
+
expect(service).toBeTruthy();
|
|
15
|
+
});
|
|
16
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { IChartConfig } from '../model/i-chart-config';
|
|
3
|
+
import { AxisOrientation } from '../model/enum/axis-orientation';
|
|
4
|
+
import { Axis } from '../core/axis/axis';
|
|
5
|
+
|
|
6
|
+
@Injectable({
|
|
7
|
+
providedIn: 'root',
|
|
8
|
+
})
|
|
9
|
+
export class AxesService {
|
|
10
|
+
public yAxis: Map<number, Axis> = new Map<number, Axis>();
|
|
11
|
+
public xAxis: Map<number, Axis> = new Map<number, Axis>();
|
|
12
|
+
|
|
13
|
+
constructor() {}
|
|
14
|
+
|
|
15
|
+
init(config: IChartConfig) {
|
|
16
|
+
config?.yAxis.forEach((_, index) => {
|
|
17
|
+
const axis = Axis.createAxis(AxisOrientation.y, config, index);
|
|
18
|
+
|
|
19
|
+
this.yAxis.set(index, axis);
|
|
20
|
+
});
|
|
21
|
+
config?.xAxis.forEach((_, index) => {
|
|
22
|
+
const axis = Axis.createAxis(AxisOrientation.x, config, index);
|
|
23
|
+
|
|
24
|
+
this.xAxis.set(index, axis);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { TestBed } from '@angular/core/testing';
|
|
2
|
+
|
|
3
|
+
import { BroadcastService } from './broadcast.service';
|
|
4
|
+
|
|
5
|
+
describe('BroadcastService', () => {
|
|
6
|
+
let service: BroadcastService;
|
|
7
|
+
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
TestBed.configureTestingModule({});
|
|
10
|
+
service = TestBed.inject(BroadcastService);
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it('should be created', () => {
|
|
14
|
+
expect(service).toBeTruthy();
|
|
15
|
+
});
|
|
16
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { IBroadcastMessage } from '../model/i-broadcast-message';
|
|
3
|
+
import { filter, Observable, Subject } from 'rxjs';
|
|
4
|
+
|
|
5
|
+
@Injectable({
|
|
6
|
+
providedIn: 'root',
|
|
7
|
+
})
|
|
8
|
+
export class BroadcastService {
|
|
9
|
+
private emitter: Subject<IBroadcastMessage>;
|
|
10
|
+
|
|
11
|
+
constructor() {
|
|
12
|
+
this.emitter = new Subject<IBroadcastMessage>();
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
broadcast(value: IBroadcastMessage) {
|
|
16
|
+
this.emitter.next(value);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
subscribeToChannel(channel: string): Observable<IBroadcastMessage> {
|
|
20
|
+
return this.emitter
|
|
21
|
+
.asObservable()
|
|
22
|
+
.pipe(filter((msg) => channel && msg.channel === channel));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { TestBed } from '@angular/core/testing';
|
|
2
|
+
|
|
3
|
+
import { BrushService } from './brush.service';
|
|
4
|
+
|
|
5
|
+
describe('BrushService', () => {
|
|
6
|
+
let service: BrushService;
|
|
7
|
+
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
TestBed.configureTestingModule({});
|
|
10
|
+
service = TestBed.inject(BrushService);
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it('should be created', () => {
|
|
14
|
+
expect(service).toBeTruthy();
|
|
15
|
+
});
|
|
16
|
+
});
|