@rfprodz/client-d3-charts 1.0.0
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/LICENSE +21 -0
- package/README.md +88 -0
- package/esm2020/index.mjs +5 -0
- package/esm2020/lib/client-d3-charts.module.mjs +47 -0
- package/esm2020/lib/components/bar-chart/bar-chart.component.mjs +87 -0
- package/esm2020/lib/components/chart-examples/chart-examples.component.mjs +181 -0
- package/esm2020/lib/components/force-directed-chart/force-directed-chart.component.mjs +92 -0
- package/esm2020/lib/components/index.mjs +7 -0
- package/esm2020/lib/components/line-chart/line-chart.component.mjs +91 -0
- package/esm2020/lib/components/pie-chart/pie-chart.component.mjs +90 -0
- package/esm2020/lib/components/radar-chart/radar-chart.component.mjs +102 -0
- package/esm2020/lib/interfaces/bar-chart.interface.mjs +2 -0
- package/esm2020/lib/interfaces/force-directed-chart.interface.mjs +2 -0
- package/esm2020/lib/interfaces/index.mjs +6 -0
- package/esm2020/lib/interfaces/line-chart.interface.mjs +2 -0
- package/esm2020/lib/interfaces/pie-chart.interface.mjs +2 -0
- package/esm2020/lib/interfaces/radar-chart.interface.mjs +2 -0
- package/esm2020/lib/providers/d3-chart-factory.provider.mjs +18 -0
- package/esm2020/lib/util/bar-chart.util.mjs +255 -0
- package/esm2020/lib/util/configuration.util.mjs +31 -0
- package/esm2020/lib/util/force-directed-chart.util.mjs +255 -0
- package/esm2020/lib/util/index.mjs +6 -0
- package/esm2020/lib/util/line-chart.util.mjs +266 -0
- package/esm2020/lib/util/pie-chart.util.mjs +89 -0
- package/esm2020/lib/util/radar-chart.util.mjs +295 -0
- package/esm2020/rfprodz-client-d3-charts.mjs +5 -0
- package/fesm2015/rfprodz-client-d3-charts.mjs +1868 -0
- package/fesm2015/rfprodz-client-d3-charts.mjs.map +1 -0
- package/fesm2020/rfprodz-client-d3-charts.mjs +1855 -0
- package/fesm2020/rfprodz-client-d3-charts.mjs.map +1 -0
- package/index.d.ts +4 -0
- package/lib/client-d3-charts.module.d.ts +13 -0
- package/lib/components/bar-chart/bar-chart.component.d.ts +49 -0
- package/lib/components/chart-examples/chart-examples.component.d.ts +60 -0
- package/lib/components/force-directed-chart/force-directed-chart.component.d.ts +49 -0
- package/lib/components/index.d.ts +6 -0
- package/lib/components/line-chart/line-chart.component.d.ts +49 -0
- package/lib/components/pie-chart/pie-chart.component.d.ts +49 -0
- package/lib/components/radar-chart/radar-chart.component.d.ts +49 -0
- package/lib/interfaces/bar-chart.interface.d.ts +25 -0
- package/lib/interfaces/force-directed-chart.interface.d.ts +50 -0
- package/lib/interfaces/index.d.ts +5 -0
- package/lib/interfaces/line-chart.interface.d.ts +28 -0
- package/lib/interfaces/pie-chart.interface.d.ts +19 -0
- package/lib/interfaces/radar-chart.interface.d.ts +30 -0
- package/lib/providers/d3-chart-factory.provider.d.ts +15 -0
- package/lib/util/bar-chart.util.d.ts +14 -0
- package/lib/util/configuration.util.d.ts +7 -0
- package/lib/util/force-directed-chart.util.d.ts +14 -0
- package/lib/util/index.d.ts +5 -0
- package/lib/util/line-chart.util.d.ts +14 -0
- package/lib/util/pie-chart.util.d.ts +14 -0
- package/lib/util/radar-chart.util.d.ts +14 -0
- package/package.json +53 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2022 rfprod.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Angular D3 Chart Components Module
|
|
2
|
+
|
|
3
|
+
This library was generated with [Nx](https://nx.dev).
|
|
4
|
+
|
|
5
|
+
## Description
|
|
6
|
+
|
|
7
|
+
The Angular chart components based on the [D3.js](https://d3js.org/) library.
|
|
8
|
+
|
|
9
|
+
Supported chart types:
|
|
10
|
+
|
|
11
|
+
- bar chart;
|
|
12
|
+
- line chart;
|
|
13
|
+
- pie chart;
|
|
14
|
+
- radar chart;
|
|
15
|
+
- force-directed chart;
|
|
16
|
+
|
|
17
|
+
The library contains Angular components as well as basic utility functions that can be used to implement the chart types mentioned above in TypeScript.
|
|
18
|
+
|
|
19
|
+
## Development commands reference
|
|
20
|
+
|
|
21
|
+
Run `nx test client-d3-charts` to execute the unit tests.
|
|
22
|
+
|
|
23
|
+
Run `nx lint client-d3-charts` to lint the library.
|
|
24
|
+
|
|
25
|
+
Run `nx build client-d3-charts` to build the library.
|
|
26
|
+
|
|
27
|
+
## Usage
|
|
28
|
+
|
|
29
|
+
### Within the development workspace
|
|
30
|
+
|
|
31
|
+
Import the charts module
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
import { AppClientD3ChartsModule } from '@app/client-d3-charts';
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### As an external package
|
|
38
|
+
|
|
39
|
+
Install the package
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
yarn add @rfprodz/client-d3-charts d3 @types/d3
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Import the charts module
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
import { AppClientD3ChartsModule } from '@rfprodz/client-d3-charts';
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Use the chart components
|
|
52
|
+
|
|
53
|
+
#### in templates
|
|
54
|
+
|
|
55
|
+
```html
|
|
56
|
+
<!-- bar chart -->
|
|
57
|
+
<app-bar-chart></app-bar-chart>
|
|
58
|
+
<!-- line chart -->
|
|
59
|
+
<app-line-chart></app-line-chart>
|
|
60
|
+
<!-- pie chart -->
|
|
61
|
+
<app-pie-chart></app-pie-chart>
|
|
62
|
+
<!-- radar chart -->
|
|
63
|
+
<app-radar-chart></app-radar-chart>
|
|
64
|
+
<!-- force-directed chart -->
|
|
65
|
+
<app-force-directed-chart></app-force-directed-chart>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
#### in classes
|
|
69
|
+
|
|
70
|
+
```typescript
|
|
71
|
+
import {
|
|
72
|
+
AppPieChartComponent,
|
|
73
|
+
AppRadarChartComponent,
|
|
74
|
+
AppForceDirectedChartComponent,
|
|
75
|
+
AppBarChartComponent,
|
|
76
|
+
AppLineChartComponent,
|
|
77
|
+
} from '@rfprodz/client-d3-charts';
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Chart examples
|
|
81
|
+
|
|
82
|
+
See the chart eamples components
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
import { AppChartExamplesComponent } from '@rfprodz/client-d3-charts';
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
or the [source code](https://github.com/rfprod/nx-ng-starter/blob/main/libs/client-d3-charts/src/lib/components/chart-examples/chart-examples.component.ts) of the chart examples component
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from './lib/client-d3-charts.module';
|
|
2
|
+
export * from './lib/components';
|
|
3
|
+
export * from './lib/interfaces';
|
|
4
|
+
export * from './lib/util';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2NsaWVudC1kMy1jaGFydHMvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvY2xpZW50LWQzLWNoYXJ0cy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnRlcmZhY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWwnO1xuIl19
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { AppBarChartComponent } from './components/bar-chart/bar-chart.component';
|
|
4
|
+
import { AppChartExamplesComponent } from './components/chart-examples/chart-examples.component';
|
|
5
|
+
import { AppForceDirectedChartComponent } from './components/force-directed-chart/force-directed-chart.component';
|
|
6
|
+
import { AppLineChartComponent } from './components/line-chart/line-chart.component';
|
|
7
|
+
import { AppPieChartComponent } from './components/pie-chart/pie-chart.component';
|
|
8
|
+
import { AppRadarChartComponent } from './components/radar-chart/radar-chart.component';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
export class AppClientD3ChartsModule {
|
|
11
|
+
}
|
|
12
|
+
/** @nocollapse */ AppClientD3ChartsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AppClientD3ChartsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
13
|
+
/** @nocollapse */ AppClientD3ChartsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.6", ngImport: i0, type: AppClientD3ChartsModule, declarations: [AppPieChartComponent,
|
|
14
|
+
AppRadarChartComponent,
|
|
15
|
+
AppForceDirectedChartComponent,
|
|
16
|
+
AppBarChartComponent,
|
|
17
|
+
AppLineChartComponent,
|
|
18
|
+
AppChartExamplesComponent], imports: [CommonModule], exports: [AppPieChartComponent,
|
|
19
|
+
AppRadarChartComponent,
|
|
20
|
+
AppForceDirectedChartComponent,
|
|
21
|
+
AppBarChartComponent,
|
|
22
|
+
AppLineChartComponent,
|
|
23
|
+
AppChartExamplesComponent] });
|
|
24
|
+
/** @nocollapse */ AppClientD3ChartsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AppClientD3ChartsModule, imports: [CommonModule] });
|
|
25
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AppClientD3ChartsModule, decorators: [{
|
|
26
|
+
type: NgModule,
|
|
27
|
+
args: [{
|
|
28
|
+
imports: [CommonModule],
|
|
29
|
+
declarations: [
|
|
30
|
+
AppPieChartComponent,
|
|
31
|
+
AppRadarChartComponent,
|
|
32
|
+
AppForceDirectedChartComponent,
|
|
33
|
+
AppBarChartComponent,
|
|
34
|
+
AppLineChartComponent,
|
|
35
|
+
AppChartExamplesComponent,
|
|
36
|
+
],
|
|
37
|
+
exports: [
|
|
38
|
+
AppPieChartComponent,
|
|
39
|
+
AppRadarChartComponent,
|
|
40
|
+
AppForceDirectedChartComponent,
|
|
41
|
+
AppBarChartComponent,
|
|
42
|
+
AppLineChartComponent,
|
|
43
|
+
AppChartExamplesComponent,
|
|
44
|
+
],
|
|
45
|
+
}]
|
|
46
|
+
}] });
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LWQzLWNoYXJ0cy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NsaWVudC1kMy1jaGFydHMvc3JjL2xpYi9jbGllbnQtZDMtY2hhcnRzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNsRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUNsSCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNyRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNsRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQzs7QUFxQnhGLE1BQU0sT0FBTyx1QkFBdUI7O3VJQUF2Qix1QkFBdUI7d0lBQXZCLHVCQUF1QixpQkFoQmhDLG9CQUFvQjtRQUNwQixzQkFBc0I7UUFDdEIsOEJBQThCO1FBQzlCLG9CQUFvQjtRQUNwQixxQkFBcUI7UUFDckIseUJBQXlCLGFBUGpCLFlBQVksYUFVcEIsb0JBQW9CO1FBQ3BCLHNCQUFzQjtRQUN0Qiw4QkFBOEI7UUFDOUIsb0JBQW9CO1FBQ3BCLHFCQUFxQjtRQUNyQix5QkFBeUI7d0lBR2hCLHVCQUF1QixZQWxCeEIsWUFBWTsyRkFrQlgsdUJBQXVCO2tCQW5CbkMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLFlBQVksRUFBRTt3QkFDWixvQkFBb0I7d0JBQ3BCLHNCQUFzQjt3QkFDdEIsOEJBQThCO3dCQUM5QixvQkFBb0I7d0JBQ3BCLHFCQUFxQjt3QkFDckIseUJBQXlCO3FCQUMxQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1Asb0JBQW9CO3dCQUNwQixzQkFBc0I7d0JBQ3RCLDhCQUE4Qjt3QkFDOUIsb0JBQW9CO3dCQUNwQixxQkFBcUI7d0JBQ3JCLHlCQUF5QjtxQkFDMUI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQXBwQmFyQ2hhcnRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYmFyLWNoYXJ0L2Jhci1jaGFydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXBwQ2hhcnRFeGFtcGxlc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jaGFydC1leGFtcGxlcy9jaGFydC1leGFtcGxlcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXBwRm9yY2VEaXJlY3RlZENoYXJ0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2ZvcmNlLWRpcmVjdGVkLWNoYXJ0L2ZvcmNlLWRpcmVjdGVkLWNoYXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBcHBMaW5lQ2hhcnRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbGluZS1jaGFydC9saW5lLWNoYXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBcHBQaWVDaGFydENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9waWUtY2hhcnQvcGllLWNoYXJ0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBcHBSYWRhckNoYXJ0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3JhZGFyLWNoYXJ0L3JhZGFyLWNoYXJ0LmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBBcHBQaWVDaGFydENvbXBvbmVudCxcbiAgICBBcHBSYWRhckNoYXJ0Q29tcG9uZW50LFxuICAgIEFwcEZvcmNlRGlyZWN0ZWRDaGFydENvbXBvbmVudCxcbiAgICBBcHBCYXJDaGFydENvbXBvbmVudCxcbiAgICBBcHBMaW5lQ2hhcnRDb21wb25lbnQsXG4gICAgQXBwQ2hhcnRFeGFtcGxlc0NvbXBvbmVudCxcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIEFwcFBpZUNoYXJ0Q29tcG9uZW50LFxuICAgIEFwcFJhZGFyQ2hhcnRDb21wb25lbnQsXG4gICAgQXBwRm9yY2VEaXJlY3RlZENoYXJ0Q29tcG9uZW50LFxuICAgIEFwcEJhckNoYXJ0Q29tcG9uZW50LFxuICAgIEFwcExpbmVDaGFydENvbXBvbmVudCxcbiAgICBBcHBDaGFydEV4YW1wbGVzQ29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBDbGllbnREM0NoYXJ0c01vZHVsZSB7fVxuIl19
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { DOCUMENT } from '@angular/common';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, ElementRef, Inject, Input, ViewChild, } from '@angular/core';
|
|
3
|
+
import { D3_CHART_FACTORY } from '../../providers/d3-chart-factory.provider';
|
|
4
|
+
import { defaultBarChartConfig } from '../../util';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class AppBarChartComponent {
|
|
7
|
+
constructor(doc, d3Factory) {
|
|
8
|
+
this.doc = doc;
|
|
9
|
+
this.d3Factory = d3Factory;
|
|
10
|
+
/**
|
|
11
|
+
* The chart id.
|
|
12
|
+
*/
|
|
13
|
+
this.chartId = 'bar-0';
|
|
14
|
+
/**
|
|
15
|
+
* The chart data.
|
|
16
|
+
*/
|
|
17
|
+
this.data = [];
|
|
18
|
+
/**
|
|
19
|
+
* The chart options.
|
|
20
|
+
*/
|
|
21
|
+
this.options = {};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The chart options constructor.
|
|
25
|
+
* @returns chart options
|
|
26
|
+
*/
|
|
27
|
+
chartOptions() {
|
|
28
|
+
const bodyWidthAdjustment = 10;
|
|
29
|
+
const width = Math.min(this.options.width ?? defaultBarChartConfig.width, this.doc.body.clientWidth - defaultBarChartConfig.margin.left - defaultBarChartConfig.margin.right - bodyWidthAdjustment);
|
|
30
|
+
const height = Math.min(this.options.height ?? width, this.doc.body.clientWidth - defaultBarChartConfig.margin.top - defaultBarChartConfig.margin.bottom - bodyWidthAdjustment);
|
|
31
|
+
const yAxisTicks = Math.max(...this.data.map(item => item.value));
|
|
32
|
+
const options = {
|
|
33
|
+
width,
|
|
34
|
+
height,
|
|
35
|
+
yAxisTicks,
|
|
36
|
+
...this.options,
|
|
37
|
+
};
|
|
38
|
+
return options;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Draws the chart.
|
|
42
|
+
*/
|
|
43
|
+
drawChart() {
|
|
44
|
+
if (typeof this.container !== 'undefined') {
|
|
45
|
+
const options = this.chartOptions();
|
|
46
|
+
this.d3Factory.drawBarChart(this.container, this.data, options);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Actually draws the chart after the component view is initialized.
|
|
51
|
+
*/
|
|
52
|
+
ngAfterViewInit() {
|
|
53
|
+
this.drawChart();
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Redraws the chart on changes.
|
|
57
|
+
*/
|
|
58
|
+
ngOnChanges(changes) {
|
|
59
|
+
const data = changes.data?.currentValue;
|
|
60
|
+
const options = changes.options?.currentValue;
|
|
61
|
+
if ((typeof data !== 'undefined' && data !== null) || (typeof options !== 'undefined' && options !== null)) {
|
|
62
|
+
this.drawChart();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/** @nocollapse */ AppBarChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AppBarChartComponent, deps: [{ token: DOCUMENT }, { token: D3_CHART_FACTORY }], target: i0.ɵɵFactoryTarget.Component });
|
|
67
|
+
/** @nocollapse */ AppBarChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: AppBarChartComponent, selector: "app-bar-chart", inputs: { chartId: "chartId", data: "data", options: "options" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"container\" id=\"{{ chartId }}\" #container></div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host .container{flex:0 1 auto}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
68
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AppBarChartComponent, decorators: [{
|
|
69
|
+
type: Component,
|
|
70
|
+
args: [{ selector: 'app-bar-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\" id=\"{{ chartId }}\" #container></div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host .container{flex:0 1 auto}\n"] }]
|
|
71
|
+
}], ctorParameters: function () { return [{ type: Document, decorators: [{
|
|
72
|
+
type: Inject,
|
|
73
|
+
args: [DOCUMENT]
|
|
74
|
+
}] }, { type: undefined, decorators: [{
|
|
75
|
+
type: Inject,
|
|
76
|
+
args: [D3_CHART_FACTORY]
|
|
77
|
+
}] }]; }, propDecorators: { chartId: [{
|
|
78
|
+
type: Input
|
|
79
|
+
}], data: [{
|
|
80
|
+
type: Input
|
|
81
|
+
}], options: [{
|
|
82
|
+
type: Input
|
|
83
|
+
}], container: [{
|
|
84
|
+
type: ViewChild,
|
|
85
|
+
args: ['container']
|
|
86
|
+
}] } });
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2xpZW50LWQzLWNoYXJ0cy9zcmMvbGliL2NvbXBvbmVudHMvYmFyLWNoYXJ0L2Jhci1jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NsaWVudC1kMy1jaGFydHMvc3JjL2xpYi9jb21wb25lbnRzL2Jhci1jaGFydC9iYXItY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUdMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQW1CLE1BQU0sMkNBQTJDLENBQUM7QUFDOUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sWUFBWSxDQUFDOztBQWFuRCxNQUFNLE9BQU8sb0JBQW9CO0lBcUIvQixZQUErQyxHQUFhLEVBQTZDLFNBQTBCO1FBQXBGLFFBQUcsR0FBSCxHQUFHLENBQVU7UUFBNkMsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFwQm5JOztXQUVHO1FBQ2EsWUFBTyxHQUFHLE9BQU8sQ0FBQztRQUVsQzs7V0FFRztRQUNhLFNBQUksR0FBa0IsRUFBRSxDQUFDO1FBRXpDOztXQUVHO1FBQ2EsWUFBTyxHQUE4QixFQUFFLENBQUM7SUFPOEUsQ0FBQztJQUV2STs7O09BR0c7SUFDSyxZQUFZO1FBQ2xCLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQy9CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLHFCQUFxQixDQUFDLEtBQUssRUFDakQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FDekgsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLEtBQUssRUFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxtQkFBbUIsQ0FDekgsQ0FBQztRQUNGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sT0FBTyxHQUE4QjtZQUN6QyxLQUFLO1lBQ0wsTUFBTTtZQUNOLFVBQVU7WUFDVixHQUFHLElBQUksQ0FBQyxPQUFPO1NBQ2hCLENBQUM7UUFDRixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxTQUFTO1FBQ2YsSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssV0FBVyxFQUFFO1lBQ3pDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDakU7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxlQUFlO1FBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxXQUFXLENBQUMsT0FBc0I7UUFDdkMsTUFBTSxJQUFJLEdBQTBCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDO1FBQy9ELE1BQU0sT0FBTyxHQUE4QixPQUFPLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQztRQUN6RSxJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssV0FBVyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFBSSxPQUFPLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDMUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQzs7b0lBekVVLG9CQUFvQixrQkFxQlgsUUFBUSxhQUEwQyxnQkFBZ0I7d0hBckIzRSxvQkFBb0Isb1BDNUJqQyxtRUFDQTsyRkQyQmEsb0JBQW9CO2tCQU5oQyxTQUFTOytCQUNFLGVBQWUsbUJBR1IsdUJBQXVCLENBQUMsTUFBTTswREF1QkssUUFBUTswQkFBL0MsTUFBTTsyQkFBQyxRQUFROzswQkFBbUMsTUFBTTsyQkFBQyxnQkFBZ0I7NENBakJ0RSxPQUFPO3NCQUF0QixLQUFLO2dCQUtVLElBQUk7c0JBQW5CLEtBQUs7Z0JBS1UsT0FBTztzQkFBdEIsS0FBSztnQkFLbUMsU0FBUztzQkFBakQsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2UsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IElCYXJDaGFydERhdGFOb2RlLCBJQmFyQ2hhcnRPcHRpb25zLCBUQmFyQ2hhcnREYXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9iYXItY2hhcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEQzX0NIQVJUX0ZBQ1RPUlksIElEM0NoYXJ0RmFjdG9yeSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9kMy1jaGFydC1mYWN0b3J5LnByb3ZpZGVyJztcbmltcG9ydCB7IGRlZmF1bHRCYXJDaGFydENvbmZpZyB9IGZyb20gJy4uLy4uL3V0aWwnO1xuXG5pbnRlcmZhY2UgSUlucHV0Q2hhbmdlcyB7XG4gIGRhdGE/OiBTaW1wbGVDaGFuZ2UgfCBudWxsO1xuICBvcHRpb25zPzogU2ltcGxlQ2hhbmdlIHwgbnVsbDtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWJhci1jaGFydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9iYXItY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9iYXItY2hhcnQuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFwcEJhckNoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcbiAgLyoqXG4gICAqIFRoZSBjaGFydCBpZC5cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBjaGFydElkID0gJ2Jhci0wJztcblxuICAvKipcbiAgICogVGhlIGNoYXJ0IGRhdGEuXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgZGF0YTogVEJhckNoYXJ0RGF0YSA9IFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgY2hhcnQgb3B0aW9ucy5cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBvcHRpb25zOiBQYXJ0aWFsPElCYXJDaGFydE9wdGlvbnM+ID0ge307XG5cbiAgLyoqXG4gICAqIEQzIGNoYXJ0IHZpZXcgY2hpbGQgcmVmZXJlbmNlLlxuICAgKi9cbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgcHJpdmF0ZSByZWFkb25seSBjb250YWluZXI/OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IGRvYzogRG9jdW1lbnQsIEBJbmplY3QoRDNfQ0hBUlRfRkFDVE9SWSkgcHJpdmF0ZSByZWFkb25seSBkM0ZhY3Rvcnk6IElEM0NoYXJ0RmFjdG9yeSkge31cblxuICAvKipcbiAgICogVGhlIGNoYXJ0IG9wdGlvbnMgY29uc3RydWN0b3IuXG4gICAqIEByZXR1cm5zIGNoYXJ0IG9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgY2hhcnRPcHRpb25zKCkge1xuICAgIGNvbnN0IGJvZHlXaWR0aEFkanVzdG1lbnQgPSAxMDtcbiAgICBjb25zdCB3aWR0aCA9IE1hdGgubWluKFxuICAgICAgdGhpcy5vcHRpb25zLndpZHRoID8/IGRlZmF1bHRCYXJDaGFydENvbmZpZy53aWR0aCxcbiAgICAgIHRoaXMuZG9jLmJvZHkuY2xpZW50V2lkdGggLSBkZWZhdWx0QmFyQ2hhcnRDb25maWcubWFyZ2luLmxlZnQgLSBkZWZhdWx0QmFyQ2hhcnRDb25maWcubWFyZ2luLnJpZ2h0IC0gYm9keVdpZHRoQWRqdXN0bWVudCxcbiAgICApO1xuICAgIGNvbnN0IGhlaWdodCA9IE1hdGgubWluKFxuICAgICAgdGhpcy5vcHRpb25zLmhlaWdodCA/PyB3aWR0aCxcbiAgICAgIHRoaXMuZG9jLmJvZHkuY2xpZW50V2lkdGggLSBkZWZhdWx0QmFyQ2hhcnRDb25maWcubWFyZ2luLnRvcCAtIGRlZmF1bHRCYXJDaGFydENvbmZpZy5tYXJnaW4uYm90dG9tIC0gYm9keVdpZHRoQWRqdXN0bWVudCxcbiAgICApO1xuICAgIGNvbnN0IHlBeGlzVGlja3MgPSBNYXRoLm1heCguLi50aGlzLmRhdGEubWFwKGl0ZW0gPT4gaXRlbS52YWx1ZSkpO1xuICAgIGNvbnN0IG9wdGlvbnM6IFBhcnRpYWw8SUJhckNoYXJ0T3B0aW9ucz4gPSB7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIHlBeGlzVGlja3MsXG4gICAgICAuLi50aGlzLm9wdGlvbnMsXG4gICAgfTtcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBEcmF3cyB0aGUgY2hhcnQuXG4gICAqL1xuICBwcml2YXRlIGRyYXdDaGFydCgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuY29udGFpbmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuY2hhcnRPcHRpb25zKCk7XG4gICAgICB0aGlzLmQzRmFjdG9yeS5kcmF3QmFyQ2hhcnQodGhpcy5jb250YWluZXIsIHRoaXMuZGF0YSwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFjdHVhbGx5IGRyYXdzIHRoZSBjaGFydCBhZnRlciB0aGUgY29tcG9uZW50IHZpZXcgaXMgaW5pdGlhbGl6ZWQuXG4gICAqL1xuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZHJhd0NoYXJ0KCk7XG4gIH1cblxuICAvKipcbiAgICogUmVkcmF3cyB0aGUgY2hhcnQgb24gY2hhbmdlcy5cbiAgICovXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBJSW5wdXRDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgZGF0YTogSUJhckNoYXJ0RGF0YU5vZGVbXVtdID0gY2hhbmdlcy5kYXRhPy5jdXJyZW50VmFsdWU7XG4gICAgY29uc3Qgb3B0aW9uczogUGFydGlhbDxJQmFyQ2hhcnRPcHRpb25zPiA9IGNoYW5nZXMub3B0aW9ucz8uY3VycmVudFZhbHVlO1xuICAgIGlmICgodHlwZW9mIGRhdGEgIT09ICd1bmRlZmluZWQnICYmIGRhdGEgIT09IG51bGwpIHx8ICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgb3B0aW9ucyAhPT0gbnVsbCkpIHtcbiAgICAgIHRoaXMuZHJhd0NoYXJ0KCk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCIgaWQ9XCJ7eyBjaGFydElkIH19XCIgI2NvbnRhaW5lcj48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';
|
|
2
|
+
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { first, map, switchMap, timer } from 'rxjs';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/cdk/layout";
|
|
6
|
+
import * as i2 from "@angular/common";
|
|
7
|
+
import * as i3 from "../pie-chart/pie-chart.component";
|
|
8
|
+
import * as i4 from "../radar-chart/radar-chart.component";
|
|
9
|
+
import * as i5 from "../force-directed-chart/force-directed-chart.component";
|
|
10
|
+
import * as i6 from "../bar-chart/bar-chart.component";
|
|
11
|
+
import * as i7 from "../line-chart/line-chart.component";
|
|
12
|
+
export class AppChartExamplesComponent {
|
|
13
|
+
constructor(breakpointObserver) {
|
|
14
|
+
this.breakpointObserver = breakpointObserver;
|
|
15
|
+
this.breakpoint$ = this.breakpointObserver
|
|
16
|
+
.observe([Breakpoints.XSmall, Breakpoints.Small, Breakpoints.Medium, Breakpoints.Large, Breakpoints.XLarge])
|
|
17
|
+
.pipe(map(result => Object.keys(result.breakpoints).find(item => result.breakpoints[item]) ?? 'unknown'));
|
|
18
|
+
this.barChartConfig$ = this.breakpoint$.pipe(switchMap(() => timer(this.timeout).pipe(first(), map(() => ({ data: this.barChartData, options: this.barChartOptions() })))));
|
|
19
|
+
this.lineChartConfig$ = this.breakpoint$.pipe(switchMap(() => timer(this.timeout).pipe(first(), map(() => ({ data: this.lineChartData, options: this.lineChartOptions() })))));
|
|
20
|
+
this.radarChartConfig$ = this.breakpoint$.pipe(switchMap(() => timer(this.timeout).pipe(first(), map(() => ({ data: this.radarChartData, options: this.radarChartOptions() })))));
|
|
21
|
+
this.pieChartConfig$ = this.breakpoint$.pipe(switchMap(() => timer(this.timeout).pipe(first(), map(() => ({ data: this.pieChartData, options: this.pieChartOptions() })))));
|
|
22
|
+
this.forceDirectedChartConfig$ = this.breakpoint$.pipe(switchMap(() => timer(this.timeout).pipe(first(), map(() => ({ data: this.forceDirectedChartData, options: this.forceDirectedChartOptions() })))));
|
|
23
|
+
this.timeout = 100;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Sample bar chart data.
|
|
27
|
+
*/
|
|
28
|
+
get barChartData() {
|
|
29
|
+
return [
|
|
30
|
+
{ title: 'one', value: 1 },
|
|
31
|
+
{ title: 'two', value: 2 },
|
|
32
|
+
{ title: 'three', value: 3 },
|
|
33
|
+
{ title: 'four', value: 4 },
|
|
34
|
+
{ title: 'five', value: 5 },
|
|
35
|
+
];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Sample line chart data.
|
|
39
|
+
*/
|
|
40
|
+
get lineChartData() {
|
|
41
|
+
const increment = 10000;
|
|
42
|
+
const multiplier = 2;
|
|
43
|
+
return [
|
|
44
|
+
{ timestamp: new Date().getTime(), value: 1 },
|
|
45
|
+
{ timestamp: new Date().getTime() + increment, value: 10 },
|
|
46
|
+
{ timestamp: new Date().getTime() + increment * multiplier, value: 3 },
|
|
47
|
+
{ timestamp: new Date().getTime() + increment * Math.pow(multiplier, multiplier), value: 5 },
|
|
48
|
+
{ timestamp: new Date().getTime() + increment * Math.pow(multiplier, multiplier) * multiplier, value: 4 },
|
|
49
|
+
{ timestamp: new Date().getTime() + increment * Math.pow(multiplier, multiplier) * Math.pow(multiplier, multiplier), value: 7 },
|
|
50
|
+
{
|
|
51
|
+
timestamp: new Date().getTime() + increment * Math.pow(multiplier, multiplier) * Math.pow(multiplier, multiplier) * multiplier,
|
|
52
|
+
value: 8,
|
|
53
|
+
},
|
|
54
|
+
];
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Sample radar chart data.
|
|
58
|
+
*/
|
|
59
|
+
get radarChartData() {
|
|
60
|
+
return [
|
|
61
|
+
[
|
|
62
|
+
{ axis: 'one', value: 1, unit: 'x' },
|
|
63
|
+
{ axis: 'two', value: 2, unit: 'x' },
|
|
64
|
+
{ axis: 'three', value: 3, unit: 'x' },
|
|
65
|
+
{ axis: 'four', value: 4, unit: 'x' },
|
|
66
|
+
{ axis: 'five', value: 5, unit: 'x' },
|
|
67
|
+
{ axis: 'six', value: 6, unit: 'x' },
|
|
68
|
+
{ axis: 'seven', value: 7, unit: 'x' },
|
|
69
|
+
{ axis: 'eight', value: 8, unit: 'x' },
|
|
70
|
+
{ axis: 'nine (long labels are wrapped)', value: 9, unit: 'x' },
|
|
71
|
+
],
|
|
72
|
+
[
|
|
73
|
+
{ axis: 'one', value: 9, unit: 'y' },
|
|
74
|
+
{ axis: 'two', value: 8, unit: 'y' },
|
|
75
|
+
{ axis: 'three', value: 7, unit: 'y' },
|
|
76
|
+
{ axis: 'four', value: 6, unit: 'y' },
|
|
77
|
+
{ axis: 'five', value: 5, unit: 'y' },
|
|
78
|
+
{ axis: 'six', value: 4, unit: 'y' },
|
|
79
|
+
{ axis: 'seven', value: 3, unit: 'y' },
|
|
80
|
+
{ axis: 'eight', value: 2, unit: 'y' },
|
|
81
|
+
{ axis: 'nine (long labels are wrapped)', value: 1, unit: 'y' },
|
|
82
|
+
],
|
|
83
|
+
];
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Sample pie chart data.
|
|
87
|
+
*/
|
|
88
|
+
get pieChartData() {
|
|
89
|
+
return [
|
|
90
|
+
{ key: 'one', y: 1 },
|
|
91
|
+
{ key: 'two', y: 2 },
|
|
92
|
+
{ key: 'three', y: 3 },
|
|
93
|
+
{ key: 'four', y: 4 },
|
|
94
|
+
{ key: 'five', y: 5 },
|
|
95
|
+
{ key: 'six', y: 6 },
|
|
96
|
+
];
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Sample force directed chart data.
|
|
100
|
+
*/
|
|
101
|
+
get forceDirectedChartData() {
|
|
102
|
+
const input = {
|
|
103
|
+
domains: ['first', 'second', 'third'],
|
|
104
|
+
entities: [
|
|
105
|
+
{ name: 'one', domains: ['first'], img: '' },
|
|
106
|
+
{ name: 'two', domains: ['second'], img: '' },
|
|
107
|
+
{ name: 'three', domains: ['third'], img: '' },
|
|
108
|
+
{ name: 'four', domains: ['first', 'second'], img: '' },
|
|
109
|
+
{ name: 'five', domains: ['second'], img: '' },
|
|
110
|
+
{ name: 'six', domains: ['third', 'second'], img: '' },
|
|
111
|
+
{ name: 'seven', domains: ['second'], img: '' },
|
|
112
|
+
{ name: 'eight', domains: ['third'], img: '' },
|
|
113
|
+
],
|
|
114
|
+
};
|
|
115
|
+
const domains = input.domains.map((name, index) => ({ index, name, value: 1 }));
|
|
116
|
+
const entities = input.entities.map((app, index) => ({
|
|
117
|
+
index: index,
|
|
118
|
+
name: app.name,
|
|
119
|
+
domains: [...app.domains],
|
|
120
|
+
img: app.img,
|
|
121
|
+
linksCount: 0,
|
|
122
|
+
}));
|
|
123
|
+
const nodes = [...entities];
|
|
124
|
+
const links = entities
|
|
125
|
+
.map(entity => {
|
|
126
|
+
return entity.domains.map(domain => {
|
|
127
|
+
const source = domains.find(value => domain === value.name)?.index ?? -1;
|
|
128
|
+
const target = entity.index;
|
|
129
|
+
return { source, target };
|
|
130
|
+
});
|
|
131
|
+
})
|
|
132
|
+
.reduce((accumulator, item) => (Array.isArray(item) ? [...accumulator, ...item] : [...accumulator, item]), [])
|
|
133
|
+
.filter(link => link.source !== -1 && link.target !== -1 && typeof link.target !== 'undefined');
|
|
134
|
+
const chartData = {
|
|
135
|
+
domains,
|
|
136
|
+
entities: entities.map(item => ({
|
|
137
|
+
...item,
|
|
138
|
+
linksCount: links.reduce((acc, link) => (link.target === item.index ? acc + 1 : acc), 0),
|
|
139
|
+
})),
|
|
140
|
+
links,
|
|
141
|
+
nodes,
|
|
142
|
+
};
|
|
143
|
+
return chartData;
|
|
144
|
+
}
|
|
145
|
+
barChartOptions() {
|
|
146
|
+
return {
|
|
147
|
+
chartTitle: 'Example bar chart',
|
|
148
|
+
xAxisTitle: 'long x axis title',
|
|
149
|
+
yAxisTitle: 'long y axis title',
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
lineChartOptions() {
|
|
153
|
+
return {
|
|
154
|
+
chartTitle: 'Example line chart',
|
|
155
|
+
xAxisTitle: 'Date range',
|
|
156
|
+
yAxisTitle: 'Value range',
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
radarChartOptions() {
|
|
160
|
+
return {
|
|
161
|
+
chartTitle: 'Example radar chart',
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
pieChartOptions() {
|
|
165
|
+
return {
|
|
166
|
+
chartTitle: 'Example pie chart',
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
forceDirectedChartOptions() {
|
|
170
|
+
return {
|
|
171
|
+
chartTitle: 'Example force directed chart',
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/** @nocollapse */ AppChartExamplesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AppChartExamplesComponent, deps: [{ token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
|
|
176
|
+
/** @nocollapse */ AppChartExamplesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: AppChartExamplesComponent, selector: "app-chart-examples", ngImport: i0, template: "<div class=\"container\" *ngIf=\"barChartConfig$ | async as config\">\n <app-bar-chart [chartId]=\"'bar-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-bar-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"lineChartConfig$ | async as config\">\n <app-line-chart [chartId]=\"'line-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-line-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"radarChartConfig$ | async as config\">\n <app-radar-chart [chartId]=\"'radar-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-radar-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"pieChartConfig$ | async as config\">\n <app-pie-chart [chartId]=\"'pie-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-pie-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"forceDirectedChartConfig$ | async as config\">\n <app-force-directed-chart\n [chartId]=\"'force-directed-example-1'\"\n [data]=\"config.data\"\n [options]=\"config.options\"\n ></app-force-directed-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{flex:1 1 auto;width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.AppPieChartComponent, selector: "app-pie-chart", inputs: ["chartId", "data", "options"] }, { kind: "component", type: i4.AppRadarChartComponent, selector: "app-radar-chart", inputs: ["chartId", "data", "options"] }, { kind: "component", type: i5.AppForceDirectedChartComponent, selector: "app-force-directed-chart", inputs: ["chartId", "data", "options"] }, { kind: "component", type: i6.AppBarChartComponent, selector: "app-bar-chart", inputs: ["chartId", "data", "options"] }, { kind: "component", type: i7.AppLineChartComponent, selector: "app-line-chart", inputs: ["chartId", "data", "options"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
177
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AppChartExamplesComponent, decorators: [{
|
|
178
|
+
type: Component,
|
|
179
|
+
args: [{ selector: 'app-chart-examples', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\" *ngIf=\"barChartConfig$ | async as config\">\n <app-bar-chart [chartId]=\"'bar-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-bar-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"lineChartConfig$ | async as config\">\n <app-line-chart [chartId]=\"'line-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-line-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"radarChartConfig$ | async as config\">\n <app-radar-chart [chartId]=\"'radar-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-radar-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"pieChartConfig$ | async as config\">\n <app-pie-chart [chartId]=\"'pie-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-pie-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"forceDirectedChartConfig$ | async as config\">\n <app-force-directed-chart\n [chartId]=\"'force-directed-example-1'\"\n [data]=\"config.data\"\n [options]=\"config.options\"\n ></app-force-directed-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{flex:1 1 auto;width:100%}\n"] }]
|
|
180
|
+
}], ctorParameters: function () { return [{ type: i1.BreakpointObserver }]; } });
|
|
181
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtZXhhbXBsZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jbGllbnQtZDMtY2hhcnRzL3NyYy9saWIvY29tcG9uZW50cy9jaGFydC1leGFtcGxlcy9jaGFydC1leGFtcGxlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NsaWVudC1kMy1jaGFydHMvc3JjL2xpYi9jb21wb25lbnRzL2NoYXJ0LWV4YW1wbGVzL2NoYXJ0LWV4YW1wbGVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7OztBQWtCcEQsTUFBTSxPQUFPLHlCQUF5QjtJQStLcEMsWUFBNkIsa0JBQXNDO1FBQXRDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFqRGxELGdCQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQjthQUNuRCxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUMzRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJ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QU0sS0FBSyxHQUFHO1lBQ1osT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUM7WUFDckMsUUFBUSxFQUFFO2dCQUNSLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFO2dCQUM1QyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRTtnQkFDN0MsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7Z0JBQzlDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRTtnQkFDdkQsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7Z0JBQzlDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRTtnQkFDdEQsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7Z0JBQy9DLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFO2FBQy9DO1NBQ0YsQ0FBQztRQUNGLE1BQU0sT0FBTyxHQUF1QyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFD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QUMzQyxDQUFDO0lBQ0osQ0FBQzs7eUlBbk5VLHlCQUF5Qjs2SEFBekIseUJBQXlCLDBEQ3BCdEMsZ3RDQStCQTsyRkRYYSx5QkFBeUI7a0JBTnJDLFNBQVM7K0JBQ0Usb0JBQW9CLG1CQUdiLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIsIEJyZWFrcG9pbnRzIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaXJzdCwgbWFwLCBzd2l0Y2hNYXAsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IElCYXJDaGFydE9wdGlvbnMsIFRCYXJDaGFydERhdGEgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2Jhci1jaGFydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgSUZvcmNlRGlyZWN0ZWRDaGFydERhdGEsXG4gIElGb3JjZURpcmVjdGVkQ2hhcnRPcHRpb25zLFxuICBJRm9yY2VEaXJlY3RlZEdyYXBoRW50aXR5LFxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2ZvcmNlLWRpcmVjdGVkLWNoYXJ0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJTGluZUNoYXJ0T3B0aW9ucywgVExpbmVDaGFydERhdGEgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2xpbmUtY2hhcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElQaWVDaGFydERhdGFOb2RlLCBJUGllQ2hhcnRPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9waWUtY2hhcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElSYWRhckNoYXJ0RGF0YU5vZGUsIElSYWRhckNoYXJ0T3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcmFkYXItY2hhcnQuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNoYXJ0LWV4YW1wbGVzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXJ0LWV4YW1wbGVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hhcnQtZXhhbXBsZXMuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFwcENoYXJ0RXhhbXBsZXNDb21wb25lbnQge1xuICAvKipcbiAgICogU2FtcGxlIGJhciBjaGFydCBkYXRhLlxuICAgKi9cbiAgcHVibGljIGdldCBiYXJDaGFydERhdGEoKSB7XG4gICAgcmV0dXJuIDxUQmFyQ2hhcnREYXRhPltcbiAgICAgIHsgdGl0bGU6ICdvbmUnLCB2YWx1ZTogMSB9LFxuICAgICAgeyB0aXRsZTogJ3R3bycsIHZhbHVlOiAyIH0sXG4gICAgICB7IHRpdGxlOiAndGhyZWUnLCB2YWx1ZTogMyB9LFxuICAgICAgeyB0aXRsZTogJ2ZvdXInLCB2YWx1ZTogNCB9LFxuICAgICAgeyB0aXRsZTogJ2ZpdmUnLCB2YWx1ZTogNSB9LFxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogU2FtcGxlIGxpbmUgY2hhcnQgZGF0YS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbGluZUNoYXJ0RGF0YSgpIHtcbiAgICBjb25zdCBpbmNyZW1lbnQgPSAxMDAwMDtcbiAgICBjb25zdCBtdWx0aXBsaWVyID0gMjtcbiAgICByZXR1cm4gPFRMaW5lQ2hhcnREYXRhPltcbiAgICAgIHsgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLmdldFRpbWUoKSwgdmFsdWU6IDEgfSxcbiAgICAgIHsgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIGluY3JlbWVudCwgdmFsdWU6IDEwIH0sXG4gICAgICB7IHRpbWVzdGFtcDogbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBpbmNyZW1lbnQgKiBtdWx0aXBsaWVyLCB2YWx1ZTogMyB9LFxuICAgICAgeyB0aW1lc3RhbXA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgaW5jcmVtZW50ICogTWF0aC5wb3cobXVsdGlwbGllciwgbXVsdGlwbGllciksIHZhbHVlOiA1IH0sXG4gICAgICB7IHRpbWVzdGFtcDogbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBpbmNyZW1lbnQgKiBNYXRoLnBvdyhtdWx0aXBsaWVyLCBtdWx0aXBsaWVyKSAqIG11bHRpcGxpZXIsIHZhbHVlOiA0IH0sXG4gICAgICB7IHRpbWVzdGFtcDogbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBpbmNyZW1lbnQgKiBNYXRoLnBvdyhtdWx0aXBsaWVyLCBtdWx0aXBsaWVyKSAqIE1hdGgucG93KG11bHRpcGxpZXIsIG11bHRpcGxpZXIpLCB2YWx1ZTogNyB9LFxuICAgICAge1xuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgaW5jcmVtZW50ICogTWF0aC5wb3cobXVsdGlwbGllciwgbXVsdGlwbGllcikgKiBNYXRoLnBvdyhtdWx0aXBsaWVyLCBtdWx0aXBsaWVyKSAqIG11bHRpcGxpZXIsXG4gICAgICAgIHZhbHVlOiA4LFxuICAgICAgfSxcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhbXBsZSByYWRhciBjaGFydCBkYXRhLlxuICAgKi9cbiAgcHVibGljIGdldCByYWRhckNoYXJ0RGF0YSgpIHtcbiAgICByZXR1cm4gPElSYWRhckNoYXJ0RGF0YU5vZGVbXVtdPltcbiAgICAgIFtcbiAgICAgICAgeyBheGlzOiAnb25lJywgdmFsdWU6IDEsIHVuaXQ6ICd4JyB9LFxuICAgICAgICB7IGF4aXM6ICd0d28nLCB2YWx1ZTogMiwgdW5pdDogJ3gnIH0sXG4gICAgICAgIHsgYXhpczogJ3RocmVlJywgdmFsdWU6IDMsIHVuaXQ6ICd4JyB9LFxuICAgICAgICB7IGF4aXM6ICdmb3VyJywgdmFsdWU6IDQsIHVuaXQ6ICd4JyB9LFxuICAgICAgICB7IGF4aXM6ICdmaXZlJywgdmFsdWU6IDUsIHVuaXQ6ICd4JyB9LFxuICAgICAgICB7IGF4aXM6ICdzaXgnLCB2YWx1ZTogNiwgdW5pdDogJ3gnIH0sXG4gICAgICAgIHsgYXhpczogJ3NldmVuJywgdmFsdWU6IDcsIHVuaXQ6ICd4JyB9LFxuICAgICAgICB7IGF4aXM6ICdlaWdodCcsIHZhbHVlOiA4LCB1bml0OiAneCcgfSxcbiAgICAgICAgeyBheGlzOiAnbmluZSAobG9uZyBsYWJlbHMgYXJlIHdyYXBwZWQpJywgdmFsdWU6IDksIHVuaXQ6ICd4JyB9LFxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgeyBheGlzOiAnb25lJywgdmFsdWU6IDksIHVuaXQ6ICd5JyB9LFxuICAgICAgICB7IGF4aXM6ICd0d28nLCB2YWx1ZTogOCwgdW5pdDogJ3knIH0sXG4gICAgICAgIHsgYXhpczogJ3RocmVlJywgdmFsdWU6IDcsIHVuaXQ6ICd5JyB9LFxuICAgICAgICB7IGF4aXM6ICdmb3VyJywgdmFsdWU6IDYsIHVuaXQ6ICd5JyB9LFxuICAgICAgICB7IGF4aXM6ICdmaXZlJywgdmFsdWU6IDUsIHVuaXQ6ICd5JyB9LFxuICAgICAgICB7IGF4aXM6ICdzaXgnLCB2YWx1ZTogNCwgdW5pdDogJ3knIH0sXG4gICAgICAgIHsgYXhpczogJ3NldmVuJywgdmFsdWU6IDMsIHVuaXQ6ICd5JyB9LFxuICAgICAgICB7IGF4aXM6ICdlaWdodCcsIHZhbHVlOiAyLCB1bml0OiAneScgfSxcbiAgICAgICAgeyBheGlzOiAnbmluZSAobG9uZyBsYWJlbHMgYXJlIHdyYXBwZWQpJywgdmFsdWU6IDEsIHVuaXQ6ICd5JyB9LFxuICAgICAgXSxcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhbXBsZSBwaWUgY2hhcnQgZGF0YS5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGllQ2hhcnREYXRhKCkge1xuICAgIHJldHVybiA8SVBpZUNoYXJ0RGF0YU5vZGVbXT5bXG4gICAgICB7IGtleTogJ29uZScsIHk6IDEgfSxcbiAgICAgIHsga2V5OiAndHdvJywgeTogMiB9LFxuICAgICAgeyBrZXk6ICd0aHJlZScsIHk6IDMgfSxcbiAgICAgIHsga2V5OiAnZm91cicsIHk6IDQgfSxcbiAgICAgIHsga2V5OiAnZml2ZScsIHk6IDUgfSxcbiAgICAgIHsga2V5OiAnc2l4JywgeTogNiB9LFxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogU2FtcGxlIGZvcmNlIGRpcmVjdGVkIGNoYXJ0IGRhdGEuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGZvcmNlRGlyZWN0ZWRDaGFydERhdGEoKSB7XG4gICAgY29uc3QgaW5wdXQgPSB7XG4gICAgICBkb21haW5zOiBbJ2ZpcnN0JywgJ3NlY29uZCcsICd0aGlyZCddLFxuICAgICAgZW50aXRpZXM6IFtcbiAgICAgICAgeyBuYW1lOiAnb25lJywgZG9tYWluczogWydmaXJzdCddLCBpbWc6ICcnIH0sXG4gICAgICAgIHsgbmFtZTogJ3R3bycsIGRvbWFpbnM6IFsnc2Vjb25kJ10sIGltZzogJycgfSxcbiAgICAgICAgeyBuYW1lOiAndGhyZWUnLCBkb21haW5zOiBbJ3RoaXJkJ10sIGltZzogJycgfSxcbiAgICAgICAgeyBuYW1lOiAnZm91cicsIGRvbWFpbnM6IFsnZmlyc3QnLCAnc2Vjb25kJ10sIGltZzogJycgfSxcbiAgICAgICAgeyBuYW1lOiAnZml2ZScsIGRvbWFpbnM6IFsnc2Vjb25kJ10sIGltZzogJycgfSxcbiAgICAgICAgeyBuYW1lOiAnc2l4JywgZG9tYWluczogWyd0aGlyZCcsICdzZWNvbmQnXSwgaW1nOiAnJyB9LFxuICAgICAgICB7IG5hbWU6ICdzZXZlbicsIGRvbWFpbnM6IFsnc2Vjb25kJ10sIGltZzogJycgfSxcbiAgICAgICAgeyBuYW1lOiAnZWlnaHQnLCBkb21haW5zOiBbJ3RoaXJkJ10sIGltZzogJycgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgICBjb25zdCBkb21haW5zOiBJRm9yY2VEaXJlY3RlZENoYXJ0RGF0YVsnZG9tYWlucyddID0gaW5wdXQuZG9tYWlucy5tYXAoKG5hbWUsIGluZGV4KSA9PiAoeyBpbmRleCwgbmFtZSwgdmFsdWU6IDEgfSkpO1xuICAgIGNvbnN0IGVudGl0aWVzOiBJRm9yY2VEaXJlY3RlZENoYXJ0RGF0YVsnZW50aXRpZXMnXSA9IGlucHV0LmVudGl0aWVzLm1hcCgoYXBwLCBpbmRleCkgPT4gKHtcbiAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgIG5hbWU6IGFwcC5uYW1lLFxuICAgICAgZG9tYWluczogWy4uLmFwcC5kb21haW5zXSxcbiAgICAgIGltZzogYXBwLmltZyxcbiAgICAgIGxpbmtzQ291bnQ6IDAsXG4gICAgfSkpO1xuICAgIGNvbnN0IG5vZGVzOiBJRm9yY2VEaXJlY3RlZEdyYXBoRW50aXR5W10gPSBbLi4uZW50aXRpZXNdO1xuICAgIGNvbnN0IGxpbmtzOiBJRm9yY2VEaXJlY3RlZENoYXJ0RGF0YVsnbGlua3MnXSA9IGVudGl0aWVzXG4gICAgICAubWFwKGVudGl0eSA9PiB7XG4gICAgICAgIHJldHVybiBlbnRpdHkuZG9tYWlucy5tYXAoZG9tYWluID0+IHtcbiAgICAgICAgICBjb25zdCBzb3VyY2UgPSBkb21haW5zLmZpbmQodmFsdWUgPT4gZG9tYWluID09PSB2YWx1ZS5uYW1lKT8uaW5kZXggPz8gLTE7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZW50aXR5LmluZGV4O1xuICAgICAgICAgIHJldHVybiB7IHNvdXJjZSwgdGFyZ2V0IH07XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgIC5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBpdGVtKSA9PiAoQXJyYXkuaXNBcnJheShpdGVtKSA/IFsuLi5hY2N1bXVsYXRvciwgLi4uaXRlbV0gOiBbLi4uYWNjdW11bGF0b3IsIGl0ZW1dKSwgW10pXG4gICAgICAuZmlsdGVyKGxpbmsgPT4gbGluay5zb3VyY2UgIT09IC0xICYmIGxpbmsudGFyZ2V0ICE9PSAtMSAmJiB0eXBlb2YgbGluay50YXJnZXQgIT09ICd1bmRlZmluZWQnKTtcbiAgICBjb25zdCBjaGFydERhdGE6IElGb3JjZURpcmVjdGVkQ2hhcnREYXRhID0ge1xuICAgICAgZG9tYWlucyxcbiAgICAgIGVudGl0aWVzOiBlbnRpdGllcy5tYXAoaXRlbSA9PiAoe1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICBsaW5rc0NvdW50OiBsaW5rcy5yZWR1Y2UoKGFjYywgbGluaykgPT4gKGxpbmsudGFyZ2V0ID09PSBpdGVtLmluZGV4ID8gYWNjICsgMSA6IGFjYyksIDApLFxuICAgICAgfSkpLFxuICAgICAgbGlua3MsXG4gICAgICBub2RlcyxcbiAgICB9O1xuICAgIHJldHVybiBjaGFydERhdGE7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGJyZWFrcG9pbnQkID0gdGhpcy5icmVha3BvaW50T2JzZXJ2ZXJcbiAgICAub2JzZXJ2ZShbQnJlYWtwb2ludHMuWFNtYWxsLCBCcmVha3BvaW50cy5TbWFsbCwgQnJlYWtwb2ludHMuTWVkaXVtLCBCcmVha3BvaW50cy5MYXJnZSwgQnJlYWtwb2ludHMuWExhcmdlXSlcbiAgICAucGlwZShtYXAocmVzdWx0ID0+IE9iamVjdC5rZXlzKHJlc3VsdC5icmVha3BvaW50cykuZmluZChpdGVtID0+IHJlc3VsdC5icmVha3BvaW50c1tpdGVtXSkgPz8gJ3Vua25vd24nKSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGJhckNoYXJ0Q29uZmlnJCA9IHRoaXMuYnJlYWtwb2ludCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRpbWVyKHRoaXMudGltZW91dCkucGlwZShcbiAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgbWFwKCgpID0+ICh7IGRhdGE6IHRoaXMuYmFyQ2hhcnREYXRhLCBvcHRpb25zOiB0aGlzLmJhckNoYXJ0T3B0aW9ucygpIH0pKSxcbiAgICAgICksXG4gICAgKSxcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgbGluZUNoYXJ0Q29uZmlnJCA9IHRoaXMuYnJlYWtwb2ludCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRpbWVyKHRoaXMudGltZW91dCkucGlwZShcbiAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgbWFwKCgpID0+ICh7IGRhdGE6IHRoaXMubGluZUNoYXJ0RGF0YSwgb3B0aW9uczogdGhpcy5saW5lQ2hhcnRPcHRpb25zKCkgfSkpLFxuICAgICAgKSxcbiAgICApLFxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSByYWRhckNoYXJ0Q29uZmlnJCA9IHRoaXMuYnJlYWtwb2ludCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRpbWVyKHRoaXMudGltZW91dCkucGlwZShcbiAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgbWFwKCgpID0+ICh7IGRhdGE6IHRoaXMucmFkYXJDaGFydERhdGEsIG9wdGlvbnM6IHRoaXMucmFkYXJDaGFydE9wdGlvbnMoKSB9KSksXG4gICAgICApLFxuICAgICksXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHBpZUNoYXJ0Q29uZmlnJCA9IHRoaXMuYnJlYWtwb2ludCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRpbWVyKHRoaXMudGltZW91dCkucGlwZShcbiAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgbWFwKCgpID0+ICh7IGRhdGE6IHRoaXMucGllQ2hhcnREYXRhLCBvcHRpb25zOiB0aGlzLnBpZUNoYXJ0T3B0aW9ucygpIH0pKSxcbiAgICAgICksXG4gICAgKSxcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZm9yY2VEaXJlY3RlZENoYXJ0Q29uZmlnJCA9IHRoaXMuYnJlYWtwb2ludCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRpbWVyKHRoaXMudGltZW91dCkucGlwZShcbiAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgbWFwKCgpID0+ICh7IGRhdGE6IHRoaXMuZm9yY2VEaXJlY3RlZENoYXJ0RGF0YSwgb3B0aW9uczogdGhpcy5mb3JjZURpcmVjdGVkQ2hhcnRPcHRpb25zKCkgfSkpLFxuICAgICAgKSxcbiAgICApLFxuICApO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXIpIHt9XG5cbiAgcHJpdmF0ZSByZWFkb25seSB0aW1lb3V0ID0gMTAwO1xuXG4gIHB1YmxpYyBiYXJDaGFydE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIDxQYXJ0aWFsPElCYXJDaGFydE9wdGlvbnM+PntcbiAgICAgIGNoYXJ0VGl0bGU6ICdFeGFtcGxlIGJhciBjaGFydCcsXG4gICAgICB4QXhpc1RpdGxlOiAnbG9uZyB4IGF4aXMgdGl0bGUnLFxuICAgICAgeUF4aXNUaXRsZTogJ2xvbmcgeSBheGlzIHRpdGxlJyxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGxpbmVDaGFydE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIDxQYXJ0aWFsPElMaW5lQ2hhcnRPcHRpb25zPj57XG4gICAgICBjaGFydFRpdGxlOiAnRXhhbXBsZSBsaW5lIGNoYXJ0JyxcbiAgICAgIHhBeGlzVGl0bGU6ICdEYXRlIHJhbmdlJyxcbiAgICAgIHlBeGlzVGl0bGU6ICdWYWx1ZSByYW5nZScsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyByYWRhckNoYXJ0T3B0aW9ucygpIHtcbiAgICByZXR1cm4gPFBhcnRpYWw8SVJhZGFyQ2hhcnRPcHRpb25zPj57XG4gICAgICBjaGFydFRpdGxlOiAnRXhhbXBsZSByYWRhciBjaGFydCcsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBwaWVDaGFydE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIDxQYXJ0aWFsPElQaWVDaGFydE9wdGlvbnM+PntcbiAgICAgIGNoYXJ0VGl0bGU6ICdFeGFtcGxlIHBpZSBjaGFydCcsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JjZURpcmVjdGVkQ2hhcnRPcHRpb25zKCkge1xuICAgIHJldHVybiA8UGFydGlhbDxJRm9yY2VEaXJlY3RlZENoYXJ0T3B0aW9ucz4+e1xuICAgICAgY2hhcnRUaXRsZTogJ0V4YW1wbGUgZm9yY2UgZGlyZWN0ZWQgY2hhcnQnLFxuICAgIH07XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb250YWluZXJcIiAqbmdJZj1cImJhckNoYXJ0Q29uZmlnJCB8IGFzeW5jIGFzIGNvbmZpZ1wiPlxuICA8YXBwLWJhci1jaGFydCBbY2hhcnRJZF09XCInYmFyLWV4YW1wbGUtMSdcIiBbZGF0YV09XCJjb25maWcuZGF0YVwiIFtvcHRpb25zXT1cImNvbmZpZy5vcHRpb25zXCI+PC9hcHAtYmFyLWNoYXJ0PlxuPC9kaXY+XG5cbjxociBbbmdTdHlsZV09XCJ7IHdpZHRoOiAnMTAwJScgfVwiIC8+XG5cbjxkaXYgY2xhc3M9XCJjb250YWluZXJcIiAqbmdJZj1cImxpbmVDaGFydENvbmZpZyQgfCBhc3luYyBhcyBjb25maWdcIj5cbiAgPGFwcC1saW5lLWNoYXJ0IFtjaGFydElkXT1cIidsaW5lLWV4YW1wbGUtMSdcIiBbZGF0YV09XCJjb25maWcuZGF0YVwiIFtvcHRpb25zXT1cImNvbmZpZy5vcHRpb25zXCI+PC9hcHAtbGluZS1jaGFydD5cbjwvZGl2PlxuXG48aHIgW25nU3R5bGVdPVwieyB3aWR0aDogJzEwMCUnIH1cIiAvPlxuXG48ZGl2IGNsYXNzPVwiY29udGFpbmVyXCIgKm5nSWY9XCJyYWRhckNoYXJ0Q29uZmlnJCB8IGFzeW5jIGFzIGNvbmZpZ1wiPlxuICA8YXBwLXJhZGFyLWNoYXJ0IFtjaGFydElkXT1cIidyYWRhci1leGFtcGxlLTEnXCIgW2RhdGFdPVwiY29uZmlnLmRhdGFcIiBbb3B0aW9uc109XCJjb25maWcub3B0aW9uc1wiPjwvYXBwLXJhZGFyLWNoYXJ0PlxuPC9kaXY+XG5cbjxociBbbmdTdHlsZV09XCJ7IHdpZHRoOiAnMTAwJScgfVwiIC8+XG5cbjxkaXYgY2xhc3M9XCJjb250YWluZXJcIiAqbmdJZj1cInBpZUNoYXJ0Q29uZmlnJCB8IGFzeW5jIGFzIGNvbmZpZ1wiPlxuICA8YXBwLXBpZS1jaGFydCBbY2hhcnRJZF09XCIncGllLWV4YW1wbGUtMSdcIiBbZGF0YV09XCJjb25maWcuZGF0YVwiIFtvcHRpb25zXT1cImNvbmZpZy5vcHRpb25zXCI+PC9hcHAtcGllLWNoYXJ0PlxuPC9kaXY+XG5cbjxociBbbmdTdHlsZV09XCJ7IHdpZHRoOiAnMTAwJScgfVwiIC8+XG5cbjxkaXYgY2xhc3M9XCJjb250YWluZXJcIiAqbmdJZj1cImZvcmNlRGlyZWN0ZWRDaGFydENvbmZpZyQgfCBhc3luYyBhcyBjb25maWdcIj5cbiAgPGFwcC1mb3JjZS1kaXJlY3RlZC1jaGFydFxuICAgIFtjaGFydElkXT1cIidmb3JjZS1kaXJlY3RlZC1leGFtcGxlLTEnXCJcbiAgICBbZGF0YV09XCJjb25maWcuZGF0YVwiXG4gICAgW29wdGlvbnNdPVwiY29uZmlnLm9wdGlvbnNcIlxuICA+PC9hcHAtZm9yY2UtZGlyZWN0ZWQtY2hhcnQ+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { DOCUMENT } from '@angular/common';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, ElementRef, Inject, Input, ViewChild, } from '@angular/core';
|
|
3
|
+
import { D3_CHART_FACTORY } from '../../providers/d3-chart-factory.provider';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class AppForceDirectedChartComponent {
|
|
6
|
+
constructor(doc, d3Factory) {
|
|
7
|
+
this.doc = doc;
|
|
8
|
+
this.d3Factory = d3Factory;
|
|
9
|
+
/**
|
|
10
|
+
* The chart identifier.
|
|
11
|
+
*/
|
|
12
|
+
this.chartId = 'force-0';
|
|
13
|
+
/**
|
|
14
|
+
* The chart data.
|
|
15
|
+
*/
|
|
16
|
+
this.data = {
|
|
17
|
+
domains: [],
|
|
18
|
+
entities: [],
|
|
19
|
+
links: [],
|
|
20
|
+
nodes: [],
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* The chart options.
|
|
24
|
+
*/
|
|
25
|
+
this.options = {};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The chart options constructor.
|
|
29
|
+
* @returns chart options
|
|
30
|
+
*/
|
|
31
|
+
chartOptions() {
|
|
32
|
+
const margin = { top: 50, right: 50, bottom: 50, left: 50 };
|
|
33
|
+
const minWidth = 350;
|
|
34
|
+
const modifiers = {
|
|
35
|
+
width: 10,
|
|
36
|
+
height: 20,
|
|
37
|
+
};
|
|
38
|
+
const width = Math.min(minWidth, this.doc.body.clientWidth - modifiers.width) - margin.left - margin.right;
|
|
39
|
+
const height = Math.min(width, this.doc.body.clientHeight - margin.top - margin.bottom - modifiers.height);
|
|
40
|
+
const options = { width, height, margin, ...this.options };
|
|
41
|
+
return options;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Draws the chart.
|
|
45
|
+
*/
|
|
46
|
+
drawChart() {
|
|
47
|
+
if (typeof this.container !== 'undefined') {
|
|
48
|
+
const options = this.chartOptions();
|
|
49
|
+
this.d3Factory.drawForceDirectedChart(this.container, this.data, options);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Actually draws the chart after the component view is initialized.
|
|
54
|
+
*/
|
|
55
|
+
ngAfterViewInit() {
|
|
56
|
+
this.drawChart();
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Redraws the chart on changes.
|
|
60
|
+
*/
|
|
61
|
+
ngOnChanges(changes) {
|
|
62
|
+
const prevData = changes.data?.previousValue;
|
|
63
|
+
const nextData = changes.data?.currentValue;
|
|
64
|
+
const options = changes.options?.currentValue;
|
|
65
|
+
if ((Boolean(changes.data?.currentValue) && (prevData?.nodes ?? []).length !== (nextData?.nodes ?? []).length) ||
|
|
66
|
+
(typeof options !== 'undefined' && options !== null)) {
|
|
67
|
+
this.drawChart();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/** @nocollapse */ AppForceDirectedChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AppForceDirectedChartComponent, deps: [{ token: DOCUMENT }, { token: D3_CHART_FACTORY }], target: i0.ɵɵFactoryTarget.Component });
|
|
72
|
+
/** @nocollapse */ AppForceDirectedChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: AppForceDirectedChartComponent, selector: "app-force-directed-chart", inputs: { chartId: "chartId", data: "data", options: "options" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"container\">\n <div id=\"{{ chartId }}\" #container></div>\n\n <small class=\"container--chart-title\">{{ options.chartTitle }}</small>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host .container{flex:0 1 auto}:host .container--chart-title{display:block;text-align:center}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
73
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AppForceDirectedChartComponent, decorators: [{
|
|
74
|
+
type: Component,
|
|
75
|
+
args: [{ selector: 'app-force-directed-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\">\n <div id=\"{{ chartId }}\" #container></div>\n\n <small class=\"container--chart-title\">{{ options.chartTitle }}</small>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host .container{flex:0 1 auto}:host .container--chart-title{display:block;text-align:center}\n"] }]
|
|
76
|
+
}], ctorParameters: function () { return [{ type: Document, decorators: [{
|
|
77
|
+
type: Inject,
|
|
78
|
+
args: [DOCUMENT]
|
|
79
|
+
}] }, { type: undefined, decorators: [{
|
|
80
|
+
type: Inject,
|
|
81
|
+
args: [D3_CHART_FACTORY]
|
|
82
|
+
}] }]; }, propDecorators: { chartId: [{
|
|
83
|
+
type: Input
|
|
84
|
+
}], data: [{
|
|
85
|
+
type: Input
|
|
86
|
+
}], options: [{
|
|
87
|
+
type: Input
|
|
88
|
+
}], container: [{
|
|
89
|
+
type: ViewChild,
|
|
90
|
+
args: ['container']
|
|
91
|
+
}] } });
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yY2UtZGlyZWN0ZWQtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jbGllbnQtZDMtY2hhcnRzL3NyYy9saWIvY29tcG9uZW50cy9mb3JjZS1kaXJlY3RlZC1jaGFydC9mb3JjZS1kaXJlY3RlZC1jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NsaWVudC1kMy1jaGFydHMvc3JjL2xpYi9jb21wb25lbnRzL2ZvcmNlLWRpcmVjdGVkLWNoYXJ0L2ZvcmNlLWRpcmVjdGVkLWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFHTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFtQixNQUFNLDJDQUEyQyxDQUFDOztBQWE5RixNQUFNLE9BQU8sOEJBQThCO0lBMEJ6QyxZQUErQyxHQUFhLEVBQTZDLFNBQTBCO1FBQXBGLFFBQUcsR0FBSCxHQUFHLENBQVU7UUFBNkMsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUF6Qm5JOztXQUVHO1FBQ2EsWUFBTyxHQUFHLFNBQVMsQ0FBQztRQUVwQzs7V0FFRztRQUNhLFNBQUksR0FBNEI7WUFDOUMsT0FBTyxFQUFFLEVBQUU7WUFDWCxRQUFRLEVBQUUsRUFBRTtZQUNaLEtBQUssRUFBRSxFQUFFO1lBQ1QsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDO1FBRUY7O1dBRUc7UUFDYSxZQUFPLEdBQXdDLEVBQUUsQ0FBQztJQU9vRSxDQUFDO0lBRXZJOzs7T0FHRztJQUNLLFlBQVk7UUFDbEIsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDNUQsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDO1FBQ3JCLE1BQU0sU0FBUyxHQUFHO1lBQ2hCLEtBQUssRUFBRSxFQUFFO1lBQ1QsTUFBTSxFQUFFLEVBQUU7U0FDWCxDQUFDO1FBQ0YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDM0csTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0csTUFBTSxPQUFPLEdBQXdDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDaEcsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssU0FBUztRQUNmLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFdBQVcsRUFBRTtZQUN6QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDM0U7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxlQUFlO1FBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxXQUFXLENBQUMsT0FBc0I7UUFDdkMsTUFBTSxRQUFRLEdBQXdDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDO1FBQ2xGLE1BQU0sUUFBUSxHQUF3QyxPQUFPLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQztRQUNqRixNQUFNLE9BQU8sR0FBd0MsT0FBTyxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUM7UUFDbkYsSUFDRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUMxRyxDQUFDLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFBSSxPQUFPLEtBQUssSUFBSSxDQUFDLEVBQ3BEO1lBQ0EsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQzs7OElBM0VVLDhCQUE4QixrQkEwQnJCLFFBQVEsYUFBMEMsZ0JBQWdCO2tJQTFCM0UsOEJBQThCLCtQQzNCM0Msa0tBS0E7MkZEc0JhLDhCQUE4QjtrQkFOMUMsU0FBUzsrQkFDRSwwQkFBMEIsbUJBR25CLHVCQUF1QixDQUFDLE1BQU07MERBNEJLLFFBQVE7MEJBQS9DLE1BQU07MkJBQUMsUUFBUTs7MEJBQW1DLE1BQU07MkJBQUMsZ0JBQWdCOzRDQXRCdEUsT0FBTztzQkFBdEIsS0FBSztnQkFLVSxJQUFJO3NCQUFuQixLQUFLO2dCQVVVLE9BQU87c0JBQXRCLEtBQUs7Z0JBS21DLFNBQVM7c0JBQWpELFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBJRm9yY2VEaXJlY3RlZENoYXJ0RGF0YSwgSUZvcmNlRGlyZWN0ZWRDaGFydE9wdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2ZvcmNlLWRpcmVjdGVkLWNoYXJ0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBEM19DSEFSVF9GQUNUT1JZLCBJRDNDaGFydEZhY3RvcnkgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvZDMtY2hhcnQtZmFjdG9yeS5wcm92aWRlcic7XG5cbmludGVyZmFjZSBJSW5wdXRDaGFuZ2VzIHtcbiAgZGF0YT86IFNpbXBsZUNoYW5nZSB8IG51bGw7XG4gIG9wdGlvbnM/OiBTaW1wbGVDaGFuZ2UgfCBudWxsO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZm9yY2UtZGlyZWN0ZWQtY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9yY2UtZGlyZWN0ZWQtY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mb3JjZS1kaXJlY3RlZC1jaGFydC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQXBwRm9yY2VEaXJlY3RlZENoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcbiAgLyoqXG4gICAqIFRoZSBjaGFydCBpZGVudGlmaWVyLlxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGNoYXJ0SWQgPSAnZm9yY2UtMCc7XG5cbiAgLyoqXG4gICAqIFRoZSBjaGFydCBkYXRhLlxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGRhdGE6IElGb3JjZURpcmVjdGVkQ2hhcnREYXRhID0ge1xuICAgIGRvbWFpbnM6IFtdLFxuICAgIGVudGl0aWVzOiBbXSxcbiAgICBsaW5rczogW10sXG4gICAgbm9kZXM6IFtdLFxuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgY2hhcnQgb3B0aW9ucy5cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBvcHRpb25zOiBQYXJ0aWFsPElGb3JjZURpcmVjdGVkQ2hhcnRPcHRpb25zPiA9IHt9O1xuXG4gIC8qKlxuICAgKiBUaGUgY2hhcnQgY29udGFpbmVyIHZpZXcgY2hpbGQgcmVmZXJlbmNlLlxuICAgKi9cbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgcHJpdmF0ZSByZWFkb25seSBjb250YWluZXI/OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IGRvYzogRG9jdW1lbnQsIEBJbmplY3QoRDNfQ0hBUlRfRkFDVE9SWSkgcHJpdmF0ZSByZWFkb25seSBkM0ZhY3Rvcnk6IElEM0NoYXJ0RmFjdG9yeSkge31cblxuICAvKipcbiAgICogVGhlIGNoYXJ0IG9wdGlvbnMgY29uc3RydWN0b3IuXG4gICAqIEByZXR1cm5zIGNoYXJ0IG9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgY2hhcnRPcHRpb25zKCkge1xuICAgIGNvbnN0IG1hcmdpbiA9IHsgdG9wOiA1MCwgcmlnaHQ6IDUwLCBib3R0b206IDUwLCBsZWZ0OiA1MCB9O1xuICAgIGNvbnN0IG1pbldpZHRoID0gMzUwO1xuICAgIGNvbnN0IG1vZGlmaWVycyA9IHtcbiAgICAgIHdpZHRoOiAxMCxcbiAgICAgIGhlaWdodDogMjAsXG4gICAgfTtcbiAgICBjb25zdCB3aWR0aCA9IE1hdGgubWluKG1pbldpZHRoLCB0aGlzLmRvYy5ib2R5LmNsaWVudFdpZHRoIC0gbW9kaWZpZXJzLndpZHRoKSAtIG1hcmdpbi5sZWZ0IC0gbWFyZ2luLnJpZ2h0O1xuICAgIGNvbnN0IGhlaWdodCA9IE1hdGgubWluKHdpZHRoLCB0aGlzLmRvYy5ib2R5LmNsaWVudEhlaWdodCAtIG1hcmdpbi50b3AgLSBtYXJnaW4uYm90dG9tIC0gbW9kaWZpZXJzLmhlaWdodCk7XG4gICAgY29uc3Qgb3B0aW9uczogUGFydGlhbDxJRm9yY2VEaXJlY3RlZENoYXJ0T3B0aW9ucz4gPSB7IHdpZHRoLCBoZWlnaHQsIG1hcmdpbiwgLi4udGhpcy5vcHRpb25zIH07XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogRHJhd3MgdGhlIGNoYXJ0LlxuICAgKi9cbiAgcHJpdmF0ZSBkcmF3Q2hhcnQoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmNvbnRhaW5lciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmNoYXJ0T3B0aW9ucygpO1xuICAgICAgdGhpcy5kM0ZhY3RvcnkuZHJhd0ZvcmNlRGlyZWN0ZWRDaGFydCh0aGlzLmNvbnRhaW5lciwgdGhpcy5kYXRhLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWN0dWFsbHkgZHJhd3MgdGhlIGNoYXJ0IGFmdGVyIHRoZSBjb21wb25lbnQgdmlldyBpcyBpbml0aWFsaXplZC5cbiAgICovXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5kcmF3Q2hhcnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRyYXdzIHRoZSBjaGFydCBvbiBjaGFuZ2VzLlxuICAgKi9cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IElJbnB1dENoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCBwcmV2RGF0YTogSUZvcmNlRGlyZWN0ZWRDaGFydERhdGEgfCB1bmRlZmluZWQgPSBjaGFuZ2VzLmRhdGE/LnByZXZpb3VzVmFsdWU7XG4gICAgY29uc3QgbmV4dERhdGE6IElGb3JjZURpcmVjdGVkQ2hhcnREYXRhIHwgdW5kZWZpbmVkID0gY2hhbmdlcy5kYXRhPy5jdXJyZW50VmFsdWU7XG4gICAgY29uc3Qgb3B0aW9uczogUGFydGlhbDxJRm9yY2VEaXJlY3RlZENoYXJ0T3B0aW9ucz4gPSBjaGFuZ2VzLm9wdGlvbnM/LmN1cnJlbnRWYWx1ZTtcbiAgICBpZiAoXG4gICAgICAoQm9vbGVhbihjaGFuZ2VzLmRhdGE/LmN1cnJlbnRWYWx1ZSkgJiYgKHByZXZEYXRhPy5ub2RlcyA/PyBbXSkubGVuZ3RoICE9PSAobmV4dERhdGE/Lm5vZGVzID8/IFtdKS5sZW5ndGgpIHx8XG4gICAgICAodHlwZW9mIG9wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIG9wdGlvbnMgIT09IG51bGwpXG4gICAgKSB7XG4gICAgICB0aGlzLmRyYXdDaGFydCgpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICA8ZGl2IGlkPVwie3sgY2hhcnRJZCB9fVwiICNjb250YWluZXI+PC9kaXY+XG5cbiAgPHNtYWxsIGNsYXNzPVwiY29udGFpbmVyLS1jaGFydC10aXRsZVwiPnt7IG9wdGlvbnMuY2hhcnRUaXRsZSB9fTwvc21hbGw+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './bar-chart/bar-chart.component';
|
|
2
|
+
export * from './chart-examples/chart-examples.component';
|
|
3
|
+
export * from './force-directed-chart/force-directed-chart.component';
|
|
4
|
+
export * from './line-chart/line-chart.component';
|
|
5
|
+
export * from './pie-chart/pie-chart.component';
|
|
6
|
+
export * from './radar-chart/radar-chart.component';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NsaWVudC1kMy1jaGFydHMvc3JjL2xpYi9jb21wb25lbnRzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLHVEQUF1RCxDQUFDO0FBQ3RFLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLHFDQUFxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9iYXItY2hhcnQvYmFyLWNoYXJ0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NoYXJ0LWV4YW1wbGVzL2NoYXJ0LWV4YW1wbGVzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2ZvcmNlLWRpcmVjdGVkLWNoYXJ0L2ZvcmNlLWRpcmVjdGVkLWNoYXJ0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpbmUtY2hhcnQvbGluZS1jaGFydC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9waWUtY2hhcnQvcGllLWNoYXJ0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3JhZGFyLWNoYXJ0L3JhZGFyLWNoYXJ0LmNvbXBvbmVudCc7XG4iXX0=
|