@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.
Files changed (54) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +88 -0
  3. package/esm2020/index.mjs +5 -0
  4. package/esm2020/lib/client-d3-charts.module.mjs +47 -0
  5. package/esm2020/lib/components/bar-chart/bar-chart.component.mjs +87 -0
  6. package/esm2020/lib/components/chart-examples/chart-examples.component.mjs +181 -0
  7. package/esm2020/lib/components/force-directed-chart/force-directed-chart.component.mjs +92 -0
  8. package/esm2020/lib/components/index.mjs +7 -0
  9. package/esm2020/lib/components/line-chart/line-chart.component.mjs +91 -0
  10. package/esm2020/lib/components/pie-chart/pie-chart.component.mjs +90 -0
  11. package/esm2020/lib/components/radar-chart/radar-chart.component.mjs +102 -0
  12. package/esm2020/lib/interfaces/bar-chart.interface.mjs +2 -0
  13. package/esm2020/lib/interfaces/force-directed-chart.interface.mjs +2 -0
  14. package/esm2020/lib/interfaces/index.mjs +6 -0
  15. package/esm2020/lib/interfaces/line-chart.interface.mjs +2 -0
  16. package/esm2020/lib/interfaces/pie-chart.interface.mjs +2 -0
  17. package/esm2020/lib/interfaces/radar-chart.interface.mjs +2 -0
  18. package/esm2020/lib/providers/d3-chart-factory.provider.mjs +18 -0
  19. package/esm2020/lib/util/bar-chart.util.mjs +255 -0
  20. package/esm2020/lib/util/configuration.util.mjs +31 -0
  21. package/esm2020/lib/util/force-directed-chart.util.mjs +255 -0
  22. package/esm2020/lib/util/index.mjs +6 -0
  23. package/esm2020/lib/util/line-chart.util.mjs +266 -0
  24. package/esm2020/lib/util/pie-chart.util.mjs +89 -0
  25. package/esm2020/lib/util/radar-chart.util.mjs +295 -0
  26. package/esm2020/rfprodz-client-d3-charts.mjs +5 -0
  27. package/fesm2015/rfprodz-client-d3-charts.mjs +1868 -0
  28. package/fesm2015/rfprodz-client-d3-charts.mjs.map +1 -0
  29. package/fesm2020/rfprodz-client-d3-charts.mjs +1855 -0
  30. package/fesm2020/rfprodz-client-d3-charts.mjs.map +1 -0
  31. package/index.d.ts +4 -0
  32. package/lib/client-d3-charts.module.d.ts +13 -0
  33. package/lib/components/bar-chart/bar-chart.component.d.ts +49 -0
  34. package/lib/components/chart-examples/chart-examples.component.d.ts +60 -0
  35. package/lib/components/force-directed-chart/force-directed-chart.component.d.ts +49 -0
  36. package/lib/components/index.d.ts +6 -0
  37. package/lib/components/line-chart/line-chart.component.d.ts +49 -0
  38. package/lib/components/pie-chart/pie-chart.component.d.ts +49 -0
  39. package/lib/components/radar-chart/radar-chart.component.d.ts +49 -0
  40. package/lib/interfaces/bar-chart.interface.d.ts +25 -0
  41. package/lib/interfaces/force-directed-chart.interface.d.ts +50 -0
  42. package/lib/interfaces/index.d.ts +5 -0
  43. package/lib/interfaces/line-chart.interface.d.ts +28 -0
  44. package/lib/interfaces/pie-chart.interface.d.ts +19 -0
  45. package/lib/interfaces/radar-chart.interface.d.ts +30 -0
  46. package/lib/providers/d3-chart-factory.provider.d.ts +15 -0
  47. package/lib/util/bar-chart.util.d.ts +14 -0
  48. package/lib/util/configuration.util.d.ts +7 -0
  49. package/lib/util/force-directed-chart.util.d.ts +14 -0
  50. package/lib/util/index.d.ts +5 -0
  51. package/lib/util/line-chart.util.d.ts +14 -0
  52. package/lib/util/pie-chart.util.d.ts +14 -0
  53. package/lib/util/radar-chart.util.d.ts +14 -0
  54. 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=