@tetacom/ng-threejs-chart 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/.eslintrc.json +43 -0
  2. package/README.md +7 -0
  3. package/common/model/base-3d-point.d.ts +5 -0
  4. package/component/three/custom-series/custom-series.component.d.ts +20 -0
  5. package/component/three/public-api.d.ts +11 -0
  6. package/component/three/three-chart/area-3d/area-3d.component.d.ts +13 -0
  7. package/component/three/three-chart/axes-3d/axes-3d.component.d.ts +28 -0
  8. package/component/three/three-chart/base-3d-series/base3d-series.component.d.ts +15 -0
  9. package/component/three/three-chart/block-3d/block-3d.component.d.ts +28 -0
  10. package/component/three/three-chart/canvas/canvas.component.d.ts +11 -0
  11. package/component/three/three-chart/directive/canvas-3d-host.d.ts +19 -0
  12. package/component/three/three-chart/directive/public-api.d.ts +2 -0
  13. package/component/three/three-chart/directive/series-3d-host.d.ts +16 -0
  14. package/component/three/three-chart/line-3d/line-3d.component.d.ts +19 -0
  15. package/component/three/three-chart/model/axes-3d-min-max.d.ts +5 -0
  16. package/component/three/three-chart/model/axis-3d-point.d.ts +4 -0
  17. package/component/three/three-chart/model/base-3d-series.d.ts +11 -0
  18. package/component/three/three-chart/model/base-3d-three-point.d.ts +8 -0
  19. package/component/three/three-chart/model/block-3d-series.d.ts +6 -0
  20. package/component/three/three-chart/model/block3d-point.d.ts +5 -0
  21. package/component/three/three-chart/model/enum/public-api.d.ts +1 -0
  22. package/component/three/three-chart/model/enum/series-3d-type.d.ts +4 -0
  23. package/component/three/three-chart/model/i-3d-chart-config.d.ts +14 -0
  24. package/component/three/three-chart/model/line-3d-point.d.ts +5 -0
  25. package/component/three/three-chart/model/line-3d-series.d.ts +6 -0
  26. package/component/three/three-chart/model/public-api.d.ts +10 -0
  27. package/component/three/three-chart/scene/scene.component.d.ts +20 -0
  28. package/component/three/three-chart/service/chart-3d.service.d.ts +21 -0
  29. package/component/three/three-chart/three-chart.component.d.ts +19 -0
  30. package/esm2022/common/model/base-3d-point.mjs +2 -0
  31. package/esm2022/component/three/custom-series/custom-series.component.mjs +32 -0
  32. package/esm2022/component/three/public-api.mjs +12 -0
  33. package/esm2022/component/three/three-chart/area-3d/area-3d.component.mjs +54 -0
  34. package/esm2022/component/three/three-chart/axes-3d/axes-3d.component.mjs +59 -0
  35. package/esm2022/component/three/three-chart/base-3d-series/base3d-series.component.mjs +28 -0
  36. package/esm2022/component/three/three-chart/block-3d/block-3d.component.mjs +74 -0
  37. package/esm2022/component/three/three-chart/canvas/canvas.component.mjs +22 -0
  38. package/esm2022/component/three/three-chart/directive/canvas-3d-host.mjs +45 -0
  39. package/esm2022/component/three/three-chart/directive/public-api.mjs +3 -0
  40. package/esm2022/component/three/three-chart/directive/series-3d-host.mjs +45 -0
  41. package/esm2022/component/three/three-chart/line-3d/line-3d.component.mjs +40 -0
  42. package/esm2022/component/three/three-chart/model/axes-3d-min-max.mjs +2 -0
  43. package/esm2022/component/three/three-chart/model/axis-3d-point.mjs +2 -0
  44. package/esm2022/component/three/three-chart/model/base-3d-series.mjs +2 -0
  45. package/esm2022/component/three/three-chart/model/base-3d-three-point.mjs +2 -0
  46. package/esm2022/component/three/three-chart/model/block-3d-series.mjs +2 -0
  47. package/esm2022/component/three/three-chart/model/block3d-point.mjs +2 -0
  48. package/esm2022/component/three/three-chart/model/enum/public-api.mjs +2 -0
  49. package/esm2022/component/three/three-chart/model/enum/series-3d-type.mjs +6 -0
  50. package/esm2022/component/three/three-chart/model/i-3d-chart-config.mjs +2 -0
  51. package/esm2022/component/three/three-chart/model/line-3d-point.mjs +2 -0
  52. package/esm2022/component/three/three-chart/model/line-3d-series.mjs +2 -0
  53. package/esm2022/component/three/three-chart/model/public-api.mjs +11 -0
  54. package/esm2022/component/three/three-chart/scene/scene.component.mjs +45 -0
  55. package/esm2022/component/three/three-chart/service/chart-3d.service.mjs +83 -0
  56. package/esm2022/component/three/three-chart/three-chart.component.mjs +45 -0
  57. package/esm2022/index.mjs +2 -0
  58. package/esm2022/tetacom-ng-threejs-chart.mjs +5 -0
  59. package/fesm2022/tetacom-ng-threejs-chart.mjs +496 -0
  60. package/fesm2022/tetacom-ng-threejs-chart.mjs.map +1 -0
  61. package/index.d.ts +1 -0
  62. package/package.json +29 -0
package/.eslintrc.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "extends": ["../../.eslintrc.json"],
3
+ "ignorePatterns": ["!**/*"],
4
+ "overrides": [
5
+ {
6
+ "files": ["*.ts"],
7
+ "extends": [
8
+ "plugin:@nx/angular",
9
+ "plugin:@angular-eslint/template/process-inline-templates"
10
+ ],
11
+ "rules": {
12
+ "@angular-eslint/directive-selector": [
13
+ "error",
14
+ {
15
+ "type": "attribute",
16
+ "prefix": "ngComponents",
17
+ "style": "camelCase"
18
+ }
19
+ ],
20
+ "@angular-eslint/component-selector": [
21
+ "error",
22
+ {
23
+ "type": "element",
24
+ "prefix": "ng-components",
25
+ "style": "kebab-case"
26
+ }
27
+ ]
28
+ }
29
+ },
30
+ {
31
+ "files": ["*.html"],
32
+ "extends": ["plugin:@nx/angular-template"],
33
+ "rules": {}
34
+ },
35
+ {
36
+ "files": ["*.json"],
37
+ "parser": "jsonc-eslint-parser",
38
+ "rules": {
39
+ "@nx/dependency-checks": "error"
40
+ }
41
+ }
42
+ ]
43
+ }
package/README.md ADDED
@@ -0,0 +1,7 @@
1
+ # three
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Running unit tests
6
+
7
+ Run `nx test three` to execute the unit tests.
@@ -0,0 +1,5 @@
1
+ export interface Base3dPoint {
2
+ x: number;
3
+ y: number;
4
+ z: number;
5
+ }
@@ -0,0 +1,20 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { Base3dSeriesComponent } from '../three-chart/base-3d-series/base3d-series.component';
3
+ import { Base3dPoint } from '../../../common/model/base-3d-point';
4
+ import { Chart3dService } from '../three-chart/service/chart-3d.service';
5
+ import { NgtStore } from 'angular-three';
6
+ import { Observable } from 'rxjs';
7
+ import * as i0 from "@angular/core";
8
+ export declare class CustomSeriesComponent extends Base3dSeriesComponent<Base3dPoint> implements OnInit {
9
+ svc: Chart3dService;
10
+ ngtStore: NgtStore;
11
+ scales: Observable<{
12
+ x: any;
13
+ y: any;
14
+ z: any;
15
+ }>;
16
+ constructor(svc: Chart3dService, ngtStore: NgtStore);
17
+ ngOnInit(): void;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<CustomSeriesComponent, never>;
19
+ static ɵcmp: i0.ɵɵComponentDeclaration<CustomSeriesComponent, "teta-custom-series", never, {}, {}, never, never, true, never>;
20
+ }
@@ -0,0 +1,11 @@
1
+ export * from './custom-series/custom-series.component';
2
+ export * from './three-chart/area-3d/area-3d.component';
3
+ export * from './three-chart/axes-3d/axes-3d.component';
4
+ export * from './three-chart/base-3d-series/base3d-series.component';
5
+ export * from './three-chart/block-3d/block-3d.component';
6
+ export * from './three-chart/directive/public-api';
7
+ export * from './three-chart/line-3d/line-3d.component';
8
+ export * from './three-chart/model/public-api';
9
+ export * from './three-chart/canvas/canvas.component';
10
+ export * from './three-chart/scene/scene.component';
11
+ export * from './three-chart/three-chart.component';
@@ -0,0 +1,13 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { GridHelper } from 'three';
3
+ import * as i0 from "@angular/core";
4
+ export declare class Area3dComponent implements OnInit {
5
+ area: GridHelper[];
6
+ protected readonly THREE: any;
7
+ createArea(): GridHelper[];
8
+ getMainGrid(): any;
9
+ createGrid(gridsCount: number, gridSize: number, rectsInGrid: number, direction: 'vertical' | 'horizontal'): GridHelper[];
10
+ ngOnInit(): void;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<Area3dComponent, never>;
12
+ static ɵcmp: i0.ɵɵComponentDeclaration<Area3dComponent, "teta-area-3d", never, {}, {}, never, never, true, never>;
13
+ }
@@ -0,0 +1,28 @@
1
+ import { OnDestroy } from '@angular/core';
2
+ import { Euler } from 'three';
3
+ import { Axis3dPoint } from '../model/axis-3d-point';
4
+ import { Chart3dService } from '../service/chart-3d.service';
5
+ import { Observable } from 'rxjs';
6
+ import { Axes3dMinMax } from '../model/axes-3d-min-max';
7
+ import * as i0 from "@angular/core";
8
+ export declare class Axes3dComponent implements OnDestroy {
9
+ rotation: Euler;
10
+ axes: Observable<{
11
+ z: Axis3dPoint[];
12
+ y: Axis3dPoint[];
13
+ x: Axis3dPoint[];
14
+ }>;
15
+ private _alive;
16
+ protected readonly chartService: Chart3dService;
17
+ constructor();
18
+ createAxes(scales: any, minMax: Axes3dMinMax): {
19
+ z: any;
20
+ y: any;
21
+ x: any;
22
+ };
23
+ generateTicks(extremes: number[], count?: number): any;
24
+ trackBy(i: any): any;
25
+ ngOnDestroy(): void;
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<Axes3dComponent, never>;
27
+ static ɵcmp: i0.ɵɵComponentDeclaration<Axes3dComponent, "teta-axes-3d", never, { "rotation": { "alias": "rotation"; "required": false; }; }, {}, never, never, true, never>;
28
+ }
@@ -0,0 +1,15 @@
1
+ import { Chart3dService } from '../service/chart-3d.service';
2
+ import { Base3dThreePoint } from '../model/base-3d-three-point';
3
+ import { Base3dSeries } from '../model/base-3d-series';
4
+ import { NgtStore } from 'angular-three';
5
+ import * as i0 from "@angular/core";
6
+ export declare class Base3dSeriesComponent<T extends Base3dThreePoint> {
7
+ protected svc: Chart3dService;
8
+ protected ngtStore: NgtStore;
9
+ set series(series: Base3dSeries<T>);
10
+ get series(): Base3dSeries<T>;
11
+ protected _series: Base3dSeries<T>;
12
+ constructor(svc: Chart3dService, ngtStore: NgtStore);
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<Base3dSeriesComponent<any>, never>;
14
+ static ɵcmp: i0.ɵɵComponentDeclaration<Base3dSeriesComponent<any>, "teta-base3d-series", never, { "series": { "alias": "series"; "required": false; }; }, {}, never, never, true, never>;
15
+ }
@@ -0,0 +1,28 @@
1
+ import { OnDestroy } from '@angular/core';
2
+ import { NgtStore } from 'angular-three';
3
+ import { Observable } from 'rxjs';
4
+ import * as THREE from 'three';
5
+ import { Texture } from 'three';
6
+ import { Base3dSeriesComponent } from '../base-3d-series/base3d-series.component';
7
+ import { Block3dPoint } from '../model/block3d-point';
8
+ import { Chart3dService } from '../service/chart-3d.service';
9
+ import * as i0 from "@angular/core";
10
+ export declare class Block3dComponent<T extends Block3dPoint> extends Base3dSeriesComponent<T> implements OnDestroy {
11
+ svc: Chart3dService;
12
+ ngtStore: NgtStore;
13
+ blocks: Observable<{
14
+ component: THREE.Mesh<THREE.PlaneGeometry, THREE.MeshBasicMaterial>;
15
+ position: number;
16
+ }[][]>;
17
+ private _alive;
18
+ protected readonly Math: Math;
19
+ constructor(svc: Chart3dService, ngtStore: NgtStore);
20
+ createSVGTexture(y: number, y1: number, iconId: number): {
21
+ component: any;
22
+ position: number;
23
+ }[];
24
+ createTexturedPlane(texture: Texture, width: number, height: number, visible: boolean): any;
25
+ ngOnDestroy(): void;
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<Block3dComponent<any>, never>;
27
+ static ɵcmp: i0.ɵɵComponentDeclaration<Block3dComponent<any>, "teta-block-3d", never, {}, {}, never, never, true, never>;
28
+ }
@@ -0,0 +1,11 @@
1
+ import { SceneComponent } from '../scene/scene.component';
2
+ import { I3dChartConfig } from '../model/i-3d-chart-config';
3
+ import { Camera } from 'three';
4
+ import * as i0 from "@angular/core";
5
+ export declare class CanvasComponent {
6
+ scene: typeof SceneComponent;
7
+ camera: Camera;
8
+ data: I3dChartConfig;
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<CanvasComponent, never>;
10
+ static ɵcmp: i0.ɵɵComponentDeclaration<CanvasComponent, "teta-canvas", never, { "scene": { "alias": "scene"; "required": false; }; "camera": { "alias": "camera"; "required": false; }; "data": { "alias": "data"; "required": false; }; }, {}, never, never, true, never>;
11
+ }
@@ -0,0 +1,19 @@
1
+ import { OnChanges, OnInit, ViewContainerRef } from '@angular/core';
2
+ import { Camera } from 'three';
3
+ import { I3dChartConfig } from '../model/i-3d-chart-config';
4
+ import { SceneComponent } from '../scene/scene.component';
5
+ import * as i0 from "@angular/core";
6
+ export declare class Canvas3dHost implements OnInit, OnChanges {
7
+ private viewContainerRef;
8
+ scene: typeof SceneComponent;
9
+ camera: Camera;
10
+ data: I3dChartConfig;
11
+ private _init;
12
+ private _componentRef;
13
+ constructor(viewContainerRef: ViewContainerRef);
14
+ ngOnInit(): void;
15
+ ngOnChanges(): void;
16
+ createCanvas(): void;
17
+ static ɵfac: i0.ɵɵFactoryDeclaration<Canvas3dHost, never>;
18
+ static ɵcmp: i0.ɵɵComponentDeclaration<Canvas3dHost, "[teta-canvas-3d-host]", never, { "scene": { "alias": "scene"; "required": false; }; "camera": { "alias": "camera"; "required": false; }; "data": { "alias": "data"; "required": false; }; }, {}, never, never, true, never>;
19
+ }
@@ -0,0 +1,2 @@
1
+ export * from './series-3d-host';
2
+ export * from './canvas-3d-host';
@@ -0,0 +1,16 @@
1
+ import { OnInit, SimpleChanges, ViewContainerRef } from '@angular/core';
2
+ import { Base3dSeries } from '../model/base-3d-series';
3
+ import { Base3dThreePoint } from '../model/base-3d-three-point';
4
+ import * as i0 from "@angular/core";
5
+ export declare class Series3dHost<T extends Base3dThreePoint> implements OnInit {
6
+ private viewContainerRef;
7
+ series: Base3dSeries<T>;
8
+ private seriesMap;
9
+ private _init;
10
+ private _componentRef;
11
+ constructor(viewContainerRef: ViewContainerRef);
12
+ ngOnInit(): void;
13
+ ngOnChanges(changes: SimpleChanges): void;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<Series3dHost<any>, never>;
15
+ static ɵcmp: i0.ɵɵComponentDeclaration<Series3dHost<any>, "[teta-series-3d-host]", never, { "series": { "alias": "series"; "required": false; }; }, {}, never, never, true, never>;
16
+ }
@@ -0,0 +1,19 @@
1
+ import { OnDestroy } from '@angular/core';
2
+ import { NgtStore } from 'angular-three';
3
+ import { Observable } from 'rxjs';
4
+ import { Chart3dService } from '../service/chart-3d.service';
5
+ import { Base3dSeriesComponent } from '../base-3d-series/base3d-series.component';
6
+ import { Line3dPoint } from '../model/line-3d-point';
7
+ import * as i0 from "@angular/core";
8
+ export declare class Line3dComponent extends Base3dSeriesComponent<Line3dPoint> implements OnDestroy {
9
+ svc: Chart3dService;
10
+ ngtStore: NgtStore;
11
+ points: Observable<[number, number, number]>;
12
+ private _alive;
13
+ protected readonly Math: Math;
14
+ constructor(svc: Chart3dService, ngtStore: NgtStore);
15
+ getPoints(scales: any): [number, number, number];
16
+ ngOnDestroy(): void;
17
+ static ɵfac: i0.ɵɵFactoryDeclaration<Line3dComponent, never>;
18
+ static ɵcmp: i0.ɵɵComponentDeclaration<Line3dComponent, "teta-line-3d", never, {}, {}, never, never, true, never>;
19
+ }
@@ -0,0 +1,5 @@
1
+ export interface Axes3dMinMax {
2
+ x: [number, number];
3
+ y: [number, number];
4
+ z: [number, number];
5
+ }
@@ -0,0 +1,4 @@
1
+ export interface Axis3dPoint {
2
+ value: string;
3
+ position: number;
4
+ }
@@ -0,0 +1,11 @@
1
+ import { Base3dThreePoint } from './base-3d-three-point';
2
+ import { Series3dType } from './enum/series-3d-type';
3
+ import { Base3dSeriesComponent } from '../base-3d-series/base3d-series.component';
4
+ export interface Base3dSeries<T extends Base3dThreePoint> {
5
+ name?: string;
6
+ type: Series3dType;
7
+ component?: typeof Base3dSeriesComponent;
8
+ data: T[];
9
+ visible?: boolean;
10
+ color?: string;
11
+ }
@@ -0,0 +1,8 @@
1
+ export interface Base3dThreePoint {
2
+ x: number;
3
+ x1?: number;
4
+ y: number;
5
+ y1?: number;
6
+ z: number;
7
+ z1?: number;
8
+ }
@@ -0,0 +1,6 @@
1
+ import { Base3dSeries } from './base-3d-series';
2
+ import { Block3dPoint } from './block3d-point';
3
+ import { Series3dType } from './enum/series-3d-type';
4
+ export interface Block3dSeries extends Base3dSeries<Block3dPoint> {
5
+ type: Series3dType.block;
6
+ }
@@ -0,0 +1,5 @@
1
+ import { Base3dThreePoint } from './base-3d-three-point';
2
+ export interface Block3dPoint extends Base3dThreePoint {
3
+ iconId: number;
4
+ name?: string;
5
+ }
@@ -0,0 +1 @@
1
+ export * from './series-3d-type';
@@ -0,0 +1,4 @@
1
+ export declare enum Series3dType {
2
+ line = 0,
3
+ block = 1
4
+ }
@@ -0,0 +1,14 @@
1
+ import { Base3dSeries } from './base-3d-series';
2
+ import { Base3dThreePoint } from './base-3d-three-point';
3
+ export interface I3dChartConfig {
4
+ series?: Base3dSeries<Base3dThreePoint>[];
5
+ noDataText?: string;
6
+ xAxis?: minMax;
7
+ yAxis?: minMax;
8
+ zAxis?: minMax;
9
+ }
10
+ interface minMax {
11
+ min?: number;
12
+ max?: number;
13
+ }
14
+ export {};
@@ -0,0 +1,5 @@
1
+ export interface Line3dPoint {
2
+ x: number;
3
+ y: number;
4
+ z: number;
5
+ }
@@ -0,0 +1,6 @@
1
+ import { Base3dSeries } from './base-3d-series';
2
+ import { Series3dType } from './enum/series-3d-type';
3
+ import { Line3dPoint } from './line-3d-point';
4
+ export interface Line3dSeries extends Base3dSeries<Line3dPoint> {
5
+ type: Series3dType.line;
6
+ }
@@ -0,0 +1,10 @@
1
+ export * from './axes-3d-min-max';
2
+ export * from './axis-3d-point';
3
+ export * from './base-3d-series';
4
+ export * from './base-3d-three-point';
5
+ export * from './block3d-point';
6
+ export * from './enum/public-api';
7
+ export * from './i-3d-chart-config';
8
+ export * from './line-3d-point';
9
+ export * from './line-3d-series';
10
+ export * from './block-3d-series';
@@ -0,0 +1,20 @@
1
+ import { ChangeDetectorRef, OnInit } from '@angular/core';
2
+ import { NgtStore } from 'angular-three';
3
+ import { Observable } from 'rxjs';
4
+ import { Euler } from 'three';
5
+ import { I3dChartConfig } from '../model/i-3d-chart-config';
6
+ import { Chart3dService } from '../service/chart-3d.service';
7
+ import * as i0 from "@angular/core";
8
+ export declare class SceneComponent implements OnInit {
9
+ data: Observable<I3dChartConfig>;
10
+ rotation: Euler;
11
+ readonly store: NgtStore;
12
+ protected readonly Math: Math;
13
+ protected readonly chartService: Chart3dService;
14
+ protected readonly _cdr: ChangeDetectorRef;
15
+ constructor();
16
+ setRotation(): void;
17
+ ngOnInit(): void;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<SceneComponent, never>;
19
+ static ɵcmp: i0.ɵɵComponentDeclaration<SceneComponent, "teta-scene", never, {}, {}, never, never, true, never>;
20
+ }
@@ -0,0 +1,21 @@
1
+ import { Observable } from 'rxjs';
2
+ import { Axes3dMinMax } from '../model/axes-3d-min-max';
3
+ import { I3dChartConfig } from '../model/i-3d-chart-config';
4
+ import * as i0 from "@angular/core";
5
+ export declare class Chart3dService {
6
+ minMax: Observable<Axes3dMinMax>;
7
+ data: Observable<I3dChartConfig>;
8
+ scales: Observable<{
9
+ x: any;
10
+ y: any;
11
+ z: any;
12
+ }>;
13
+ private data$;
14
+ constructor();
15
+ setData(data: any): void;
16
+ private getAxesMinMax;
17
+ private getMinMaxRange;
18
+ private getScales;
19
+ static ɵfac: i0.ɵɵFactoryDeclaration<Chart3dService, never>;
20
+ static ɵprov: i0.ɵɵInjectableDeclaration<Chart3dService>;
21
+ }
@@ -0,0 +1,19 @@
1
+ import { ChangeDetectorRef, OnChanges, OnInit, SimpleChanges } from '@angular/core';
2
+ import { NgtStore } from 'angular-three';
3
+ import { OrthographicCamera } from 'three';
4
+ import { I3dChartConfig } from './model/i-3d-chart-config';
5
+ import { SceneComponent } from './scene/scene.component';
6
+ import { Chart3dService } from './service/chart-3d.service';
7
+ import * as i0 from "@angular/core";
8
+ export declare class ThreeChartComponent implements OnInit, OnChanges {
9
+ data: I3dChartConfig;
10
+ scene: typeof SceneComponent;
11
+ camera: OrthographicCamera;
12
+ protected readonly chartService: Chart3dService;
13
+ protected readonly store: NgtStore;
14
+ protected readonly cdr: ChangeDetectorRef;
15
+ ngOnInit(): void;
16
+ ngOnChanges(changes: SimpleChanges): void;
17
+ static ɵfac: i0.ɵɵFactoryDeclaration<ThreeChartComponent, never>;
18
+ static ɵcmp: i0.ɵɵComponentDeclaration<ThreeChartComponent, "teta-three-chart", never, { "data": { "alias": "data"; "required": false; }; }, {}, never, never, true, never>;
19
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS0zZC1wb2ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21tb24vbW9kZWwvYmFzZS0zZC1wb2ludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBCYXNlM2RQb2ludCB7XG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICB6OiBudW1iZXI7XG59XG4iXX0=
@@ -0,0 +1,32 @@
1
+ import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { Base3dSeriesComponent } from '../three-chart/base-3d-series/base3d-series.component';
4
+ import { Chart3dService } from '../three-chart/service/chart-3d.service';
5
+ import { extend, NgtArgs, NgtStore } from 'angular-three';
6
+ import * as THREE from 'three';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../three-chart/service/chart-3d.service";
9
+ import * as i2 from "angular-three";
10
+ import * as i3 from "@angular/common";
11
+ extend(THREE);
12
+ export class CustomSeriesComponent extends Base3dSeriesComponent {
13
+ constructor(svc, ngtStore) {
14
+ super(svc, ngtStore);
15
+ this.svc = svc;
16
+ this.ngtStore = ngtStore;
17
+ this.scales = this.svc.scales;
18
+ }
19
+ ngOnInit() {
20
+ setTimeout(() => {
21
+ this.ngtStore.get('camera').zoom = 2;
22
+ this.ngtStore.get('camera').updateProjectionMatrix();
23
+ }, 1000);
24
+ }
25
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: CustomSeriesComponent, deps: [{ token: i1.Chart3dService }, { token: i2.NgtStore }], target: i0.ɵɵFactoryTarget.Component }); }
26
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: CustomSeriesComponent, isStandalone: true, selector: "teta-custom-series", usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\" {scales:scales|async} as scales\">\n <ngt-mesh [position]=\"[scales.scales.x(this.series.data[0].x),scales.scales.y(this.series.data[0].y),scales.scales.z(this.series.data[0].z) ]\">\n <ngt-box-geometry *args=\"[5,5,5]\"></ngt-box-geometry>\n <ngt-mesh-basic-material></ngt-mesh-basic-material>\n </ngt-mesh>\n</ng-container>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27
+ }
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: CustomSeriesComponent, decorators: [{
29
+ type: Component,
30
+ args: [{ selector: 'teta-custom-series', standalone: true, imports: [CommonModule, NgtArgs], schemas: [CUSTOM_ELEMENTS_SCHEMA], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\" {scales:scales|async} as scales\">\n <ngt-mesh [position]=\"[scales.scales.x(this.series.data[0].x),scales.scales.y(this.series.data[0].y),scales.scales.z(this.series.data[0].z) ]\">\n <ngt-box-geometry *args=\"[5,5,5]\"></ngt-box-geometry>\n <ngt-mesh-basic-material></ngt-mesh-basic-material>\n </ngt-mesh>\n</ng-container>\n" }]
31
+ }], ctorParameters: () => [{ type: i1.Chart3dService }, { type: i2.NgtStore }] });
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXNlcmllcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RocmVlL2N1c3RvbS1zZXJpZXMvY3VzdG9tLXNlcmllcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RocmVlL2N1c3RvbS1zZXJpZXMvY3VzdG9tLXNlcmllcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxzQkFBc0IsR0FFdkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHVEQUF1RCxDQUFDO0FBRTVGLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUN2RSxPQUFPLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFeEQsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7Ozs7O0FBRS9CLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQVVkLE1BQU0sT0FBTyxxQkFDWCxTQUFRLHFCQUFrQztJQUkxQyxZQUFxQixHQUFtQixFQUFXLFFBQWtCO1FBQ25FLEtBQUssQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFERixRQUFHLEdBQUgsR0FBRyxDQUFnQjtRQUFXLGFBQVEsR0FBUixRQUFRLENBQVU7UUFFbkUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUNoQyxDQUFDO0lBRUQsUUFBUTtRQUNOLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDdkQsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ1gsQ0FBQzs4R0FmVSxxQkFBcUI7a0dBQXJCLHFCQUFxQixxR0N4QmxDLGtYQU1BLDJDRGFZLFlBQVksd0xBQUUsT0FBTzs7MkZBS3BCLHFCQUFxQjtrQkFSakMsU0FBUzsrQkFDRSxvQkFBb0IsY0FDbEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxXQUN2QixDQUFDLHNCQUFzQixDQUFDLG1CQUNoQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtCYXNlM2RTZXJpZXNDb21wb25lbnR9IGZyb20gJy4uL3RocmVlLWNoYXJ0L2Jhc2UtM2Qtc2VyaWVzL2Jhc2UzZC1zZXJpZXMuY29tcG9uZW50JztcbmltcG9ydCB7QmFzZTNkUG9pbnR9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9tb2RlbC9iYXNlLTNkLXBvaW50JztcbmltcG9ydCB7Q2hhcnQzZFNlcnZpY2V9IGZyb20gJy4uL3RocmVlLWNoYXJ0L3NlcnZpY2UvY2hhcnQtM2Quc2VydmljZSc7XG5pbXBvcnQge2V4dGVuZCwgTmd0QXJncywgTmd0U3RvcmV9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcblxuZXh0ZW5kKFRIUkVFKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGV0YS1jdXN0b20tc2VyaWVzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTmd0QXJnc10sXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20tc2VyaWVzLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgQ3VzdG9tU2VyaWVzQ29tcG9uZW50XG4gIGV4dGVuZHMgQmFzZTNkU2VyaWVzQ29tcG9uZW50PEJhc2UzZFBvaW50PlxuICBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHB1YmxpYyBzY2FsZXM6IE9ic2VydmFibGU8eyB4OyB5OyB6IH0+O1xuXG4gIGNvbnN0cnVjdG9yKG92ZXJyaWRlIHN2YzogQ2hhcnQzZFNlcnZpY2UsIG92ZXJyaWRlIG5ndFN0b3JlOiBOZ3RTdG9yZSkge1xuICAgIHN1cGVyKHN2Yywgbmd0U3RvcmUpO1xuICAgIHRoaXMuc2NhbGVzID0gdGhpcy5zdmMuc2NhbGVzO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm5ndFN0b3JlLmdldCgnY2FtZXJhJykuem9vbSA9IDI7XG4gICAgICB0aGlzLm5ndFN0b3JlLmdldCgnY2FtZXJhJykudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuICAgIH0sIDEwMDApO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiIHtzY2FsZXM6c2NhbGVzfGFzeW5jfSBhcyBzY2FsZXNcIj5cbiAgICA8bmd0LW1lc2ggW3Bvc2l0aW9uXT1cIltzY2FsZXMuc2NhbGVzLngodGhpcy5zZXJpZXMuZGF0YVswXS54KSxzY2FsZXMuc2NhbGVzLnkodGhpcy5zZXJpZXMuZGF0YVswXS55KSxzY2FsZXMuc2NhbGVzLnoodGhpcy5zZXJpZXMuZGF0YVswXS56KSBdXCI+XG4gICAgICA8bmd0LWJveC1nZW9tZXRyeSAgICphcmdzPVwiWzUsNSw1XVwiPjwvbmd0LWJveC1nZW9tZXRyeT5cbiAgICAgIDxuZ3QtbWVzaC1iYXNpYy1tYXRlcmlhbD48L25ndC1tZXNoLWJhc2ljLW1hdGVyaWFsPlxuICAgIDwvbmd0LW1lc2g+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -0,0 +1,12 @@
1
+ export * from './custom-series/custom-series.component';
2
+ export * from './three-chart/area-3d/area-3d.component';
3
+ export * from './three-chart/axes-3d/axes-3d.component';
4
+ export * from './three-chart/base-3d-series/base3d-series.component';
5
+ export * from './three-chart/block-3d/block-3d.component';
6
+ export * from './three-chart/directive/public-api';
7
+ export * from './three-chart/line-3d/line-3d.component';
8
+ export * from './three-chart/model/public-api';
9
+ export * from './three-chart/canvas/canvas.component';
10
+ export * from './three-chart/scene/scene.component';
11
+ export * from './three-chart/three-chart.component';
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvdGhyZWUvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLHNEQUFzRCxDQUFDO0FBQ3JFLGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMscUNBQXFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2N1c3RvbS1zZXJpZXMvY3VzdG9tLXNlcmllcy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90aHJlZS1jaGFydC9hcmVhLTNkL2FyZWEtM2QuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGhyZWUtY2hhcnQvYXhlcy0zZC9heGVzLTNkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RocmVlLWNoYXJ0L2Jhc2UtM2Qtc2VyaWVzL2Jhc2UzZC1zZXJpZXMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGhyZWUtY2hhcnQvYmxvY2stM2QvYmxvY2stM2QuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGhyZWUtY2hhcnQvZGlyZWN0aXZlL3B1YmxpYy1hcGknO1xuZXhwb3J0ICogZnJvbSAnLi90aHJlZS1jaGFydC9saW5lLTNkL2xpbmUtM2QuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGhyZWUtY2hhcnQvbW9kZWwvcHVibGljLWFwaSc7XG5leHBvcnQgKiBmcm9tICcuL3RocmVlLWNoYXJ0L2NhbnZhcy9jYW52YXMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGhyZWUtY2hhcnQvc2NlbmUvc2NlbmUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGhyZWUtY2hhcnQvdGhyZWUtY2hhcnQuY29tcG9uZW50JztcbiJdfQ==
@@ -0,0 +1,54 @@
1
+ import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as THREE from 'three';
4
+ import { GridHelper } from 'three';
5
+ import { extend, NgtArgs } from 'angular-three';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common";
8
+ extend(THREE);
9
+ export class Area3dComponent {
10
+ constructor() {
11
+ this.THREE = THREE;
12
+ }
13
+ createArea() {
14
+ const grids = [];
15
+ grids.push(this.getMainGrid());
16
+ grids.push(...this.createGrid(4, 25, 3, 'vertical'));
17
+ grids.push(...this.createGrid(4, 25, 3, 'horizontal'));
18
+ return grids;
19
+ }
20
+ getMainGrid() {
21
+ const mainGrid = new GridHelper(100, 12);
22
+ mainGrid.position.set(0, 0, 0);
23
+ mainGrid.rotateZ(Math.PI / 2);
24
+ return mainGrid;
25
+ }
26
+ createGrid(gridsCount, gridSize, rectsInGrid, direction) {
27
+ const plane = [];
28
+ for (let p = 0; p <= gridsCount - 1; p++) {
29
+ plane[p] = new THREE.GridHelper(gridSize, rectsInGrid, '#666', '#666');
30
+ plane[p].renderOrder = -1;
31
+ switch (direction) {
32
+ case 'horizontal':
33
+ plane[p].position.set(gridSize / 2, -50, gridSize * p + gridSize / 2 - 50);
34
+ break;
35
+ case 'vertical':
36
+ plane[p].position.set(gridSize / 2, gridSize * p + gridSize / 2 - 50, -50);
37
+ plane[p].rotateZ(Math.PI / 2);
38
+ plane[p].rotateX(Math.PI / 2);
39
+ break;
40
+ }
41
+ }
42
+ return plane;
43
+ }
44
+ ngOnInit() {
45
+ this.area = this.createArea();
46
+ }
47
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: Area3dComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
48
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: Area3dComponent, isStandalone: true, selector: "teta-area-3d", ngImport: i0, template: "<ngt-mesh>\n <ngt-mesh-basic-material [side]=\"THREE.DoubleSide\"></ngt-mesh-basic-material>\n <ng-container *ngFor=\"let rect of area\">\n <ngt-primitive *args=\"[rect]\"></ngt-primitive>\n </ng-container>\n</ngt-mesh>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
49
+ }
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: Area3dComponent, decorators: [{
51
+ type: Component,
52
+ args: [{ selector: 'teta-area-3d', standalone: true, imports: [CommonModule, NgtArgs], changeDetection: ChangeDetectionStrategy.OnPush, schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<ngt-mesh>\n <ngt-mesh-basic-material [side]=\"THREE.DoubleSide\"></ngt-mesh-basic-material>\n <ng-container *ngFor=\"let rect of area\">\n <ngt-primitive *args=\"[rect]\"></ngt-primitive>\n </ng-container>\n</ngt-mesh>\n" }]
53
+ }] });
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJlYS0zZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RocmVlL3RocmVlLWNoYXJ0L2FyZWEtM2QvYXJlYS0zZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RocmVlL3RocmVlLWNoYXJ0L2FyZWEtM2QvYXJlYS0zZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxzQkFBc0IsR0FFdkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDbkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQUVoRCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFVZCxNQUFNLE9BQU8sZUFBZTtJQVI1QjtRQVdxQixVQUFLLEdBQUcsS0FBSyxDQUFDO0tBb0RsQztJQWxEQyxVQUFVO1FBQ1IsTUFBTSxLQUFLLEdBQWlCLEVBQUUsQ0FBQztRQUMvQixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDckQsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUN2RCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxXQUFXO1FBQ1QsTUFBTSxRQUFRLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0IsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlCLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxVQUFVLENBQ1IsVUFBa0IsRUFDbEIsUUFBZ0IsRUFDaEIsV0FBbUIsRUFDbkIsU0FBb0M7UUFFcEMsTUFBTSxLQUFLLEdBQWlCLEVBQUUsQ0FBQztRQUMvQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3pDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDdkUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxQixRQUFRLFNBQVMsRUFBRSxDQUFDO2dCQUNsQixLQUFLLFlBQVk7b0JBQ2YsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQ25CLFFBQVEsR0FBRyxDQUFDLEVBQ1osQ0FBQyxFQUFFLEVBQ0gsUUFBUSxHQUFHLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FDakMsQ0FBQztvQkFDRixNQUFNO2dCQUNSLEtBQUssVUFBVTtvQkFDYixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FDbkIsUUFBUSxHQUFHLENBQUMsRUFDWixRQUFRLEdBQUcsQ0FBQyxHQUFHLFFBQVEsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUNoQyxDQUFDLEVBQUUsQ0FDSixDQUFDO29CQUNGLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDOUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUM5QixNQUFNO1lBQ1YsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDaEMsQ0FBQzs4R0F0RFUsZUFBZTtrR0FBZixlQUFlLHdFQ3JCNUIscU9BTUEsMkNEV1ksWUFBWSw0SkFBRSxPQUFPOzsyRkFJcEIsZUFBZTtrQkFSM0IsU0FBUzsrQkFDRSxjQUFjLGNBRVosSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxtQkFDZix1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IEdyaWRIZWxwZXIgfSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBleHRlbmQsIE5ndEFyZ3MgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcblxuZXh0ZW5kKFRIUkVFKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGV0YS1hcmVhLTNkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FyZWEtM2QuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBOZ3RBcmdzXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgQXJlYTNkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHVibGljIGFyZWE6IEdyaWRIZWxwZXJbXTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgVEhSRUUgPSBUSFJFRTtcblxuICBjcmVhdGVBcmVhKCkge1xuICAgIGNvbnN0IGdyaWRzOiBHcmlkSGVscGVyW10gPSBbXTtcbiAgICBncmlkcy5wdXNoKHRoaXMuZ2V0TWFpbkdyaWQoKSk7XG4gICAgZ3JpZHMucHVzaCguLi50aGlzLmNyZWF0ZUdyaWQoNCwgMjUsIDMsICd2ZXJ0aWNhbCcpKTtcbiAgICBncmlkcy5wdXNoKC4uLnRoaXMuY3JlYXRlR3JpZCg0LCAyNSwgMywgJ2hvcml6b250YWwnKSk7XG4gICAgcmV0dXJuIGdyaWRzO1xuICB9XG5cbiAgZ2V0TWFpbkdyaWQoKSB7XG4gICAgY29uc3QgbWFpbkdyaWQgPSBuZXcgR3JpZEhlbHBlcigxMDAsIDEyKTtcbiAgICBtYWluR3JpZC5wb3NpdGlvbi5zZXQoMCwgMCwgMCk7XG4gICAgbWFpbkdyaWQucm90YXRlWihNYXRoLlBJIC8gMik7XG4gICAgcmV0dXJuIG1haW5HcmlkO1xuICB9XG5cbiAgY3JlYXRlR3JpZChcbiAgICBncmlkc0NvdW50OiBudW1iZXIsXG4gICAgZ3JpZFNpemU6IG51bWJlcixcbiAgICByZWN0c0luR3JpZDogbnVtYmVyLFxuICAgIGRpcmVjdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJ1xuICApIHtcbiAgICBjb25zdCBwbGFuZTogR3JpZEhlbHBlcltdID0gW107XG4gICAgZm9yIChsZXQgcCA9IDA7IHAgPD0gZ3JpZHNDb3VudCAtIDE7IHArKykge1xuICAgICAgcGxhbmVbcF0gPSBuZXcgVEhSRUUuR3JpZEhlbHBlcihncmlkU2l6ZSwgcmVjdHNJbkdyaWQsICcjNjY2JywgJyM2NjYnKTtcbiAgICAgIHBsYW5lW3BdLnJlbmRlck9yZGVyID0gLTE7XG4gICAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgICBjYXNlICdob3Jpem9udGFsJzpcbiAgICAgICAgICBwbGFuZVtwXS5wb3NpdGlvbi5zZXQoXG4gICAgICAgICAgICBncmlkU2l6ZSAvIDIsXG4gICAgICAgICAgICAtNTAsXG4gICAgICAgICAgICBncmlkU2l6ZSAqIHAgKyBncmlkU2l6ZSAvIDIgLSA1MFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3ZlcnRpY2FsJzpcbiAgICAgICAgICBwbGFuZVtwXS5wb3NpdGlvbi5zZXQoXG4gICAgICAgICAgICBncmlkU2l6ZSAvIDIsXG4gICAgICAgICAgICBncmlkU2l6ZSAqIHAgKyBncmlkU2l6ZSAvIDIgLSA1MCxcbiAgICAgICAgICAgIC01MFxuICAgICAgICAgICk7XG4gICAgICAgICAgcGxhbmVbcF0ucm90YXRlWihNYXRoLlBJIC8gMik7XG4gICAgICAgICAgcGxhbmVbcF0ucm90YXRlWChNYXRoLlBJIC8gMik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwbGFuZTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYXJlYSA9IHRoaXMuY3JlYXRlQXJlYSgpO1xuICB9XG59XG4iLCI8bmd0LW1lc2g+XG4gIDxuZ3QtbWVzaC1iYXNpYy1tYXRlcmlhbCBbc2lkZV09XCJUSFJFRS5Eb3VibGVTaWRlXCI+PC9uZ3QtbWVzaC1iYXNpYy1tYXRlcmlhbD5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcmVjdCBvZiBhcmVhXCI+XG4gICAgPG5ndC1wcmltaXRpdmUgKmFyZ3M9XCJbcmVjdF1cIj48L25ndC1wcmltaXRpdmU+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZ3QtbWVzaD5cbiJdfQ==