@tetacom/ng-threejs-chart 1.2.1 → 1.2.3

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 (33) hide show
  1. package/.eslintrc.json +2 -2
  2. package/fesm2022/tetacom-ng-threejs-chart.mjs +66 -60
  3. package/fesm2022/tetacom-ng-threejs-chart.mjs.map +1 -1
  4. package/package.json +5 -4
  5. package/types/tetacom-ng-threejs-chart.d.ts +244 -0
  6. package/common/model/base-3d-point.d.ts +0 -5
  7. package/component/three/custom-series/custom-series.component.d.ts +0 -18
  8. package/component/three/public-api.d.ts +0 -11
  9. package/component/three/three-chart/area-3d/area-3d.component.d.ts +0 -14
  10. package/component/three/three-chart/axes-3d/axes-3d.component.d.ts +0 -27
  11. package/component/three/three-chart/base-3d-series/base3d-series.component.d.ts +0 -14
  12. package/component/three/three-chart/block-3d/block-3d.component.d.ts +0 -26
  13. package/component/three/three-chart/canvas/canvas.component.d.ts +0 -11
  14. package/component/three/three-chart/directive/canvas-3d-host.d.ts +0 -19
  15. package/component/three/three-chart/directive/public-api.d.ts +0 -2
  16. package/component/three/three-chart/directive/series-3d-host.d.ts +0 -16
  17. package/component/three/three-chart/line-3d/line-3d.component.d.ts +0 -17
  18. package/component/three/three-chart/model/axes-3d-min-max.d.ts +0 -5
  19. package/component/three/three-chart/model/axis-3d-point.d.ts +0 -4
  20. package/component/three/three-chart/model/base-3d-series.d.ts +0 -11
  21. package/component/three/three-chart/model/base-3d-three-point.d.ts +0 -8
  22. package/component/three/three-chart/model/block-3d-series.d.ts +0 -6
  23. package/component/three/three-chart/model/block3d-point.d.ts +0 -5
  24. package/component/three/three-chart/model/enum/public-api.d.ts +0 -1
  25. package/component/three/three-chart/model/enum/series-3d-type.d.ts +0 -4
  26. package/component/three/three-chart/model/i-3d-chart-config.d.ts +0 -14
  27. package/component/three/three-chart/model/line-3d-point.d.ts +0 -5
  28. package/component/three/three-chart/model/line-3d-series.d.ts +0 -6
  29. package/component/three/three-chart/model/public-api.d.ts +0 -10
  30. package/component/three/three-chart/scene/scene.component.d.ts +0 -19
  31. package/component/three/three-chart/service/chart-3d.service.d.ts +0 -21
  32. package/component/three/three-chart/three-chart.component.d.ts +0 -17
  33. package/index.d.ts +0 -1
package/.eslintrc.json CHANGED
@@ -10,7 +10,7 @@
10
10
  "error",
11
11
  {
12
12
  "type": "attribute",
13
- "prefix": "ngComponents",
13
+ "prefix": ["ngComponents", "teta"],
14
14
  "style": "camelCase"
15
15
  }
16
16
  ],
@@ -18,7 +18,7 @@
18
18
  "error",
19
19
  {
20
20
  "type": "element",
21
- "prefix": "ng-components",
21
+ "prefix": ["ng-components", "teta"],
22
22
  "style": "kebab-case"
23
23
  }
24
24
  ],
@@ -1,14 +1,16 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Component, Input, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, inject, ChangeDetectorRef } from '@angular/core';
3
- import * as i2 from '@angular/common';
2
+ import { Injectable, inject, Input, Component, ChangeDetectionStrategy, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectorRef } from '@angular/core';
3
+ import * as i1 from '@angular/common';
4
4
  import { CommonModule, AsyncPipe } from '@angular/common';
5
5
  import * as d3 from 'd3';
6
6
  import { ReplaySubject, map, shareReplay, combineLatest, takeWhile } from 'rxjs';
7
- import { injectStore, extend, NgtArgs, NgtCanvas } from 'angular-three';
7
+ import { injectStore, extend, NgtArgs } from 'angular-three';
8
8
  import * as THREE from 'three';
9
9
  import { GridHelper, OrthographicCamera } from 'three';
10
10
  import { NgtsText, NgtsLine } from 'angular-three-soba/abstractions';
11
11
  import { NgtsOrbitControls } from 'angular-three-soba/controls';
12
+ import * as i1$1 from 'angular-three/dom';
13
+ import { NgtCanvas } from 'angular-three/dom';
12
14
 
13
15
  class Chart3dService {
14
16
  constructor() {
@@ -52,6 +54,13 @@ class Chart3dService {
52
54
  const ZMinMaxVal = [Math.min(...zArr), Math.max(...zArr)];
53
55
  const XMinMaxVal = [Math.min(...xArr), Math.max(...xArr)];
54
56
  const YMinMaxVal = [Math.min(...yArr), Math.max(...yArr)];
57
+ const zDelta = ZMinMaxVal[1] - ZMinMaxVal[0];
58
+ const xDelta = XMinMaxVal[1] - XMinMaxVal[0];
59
+ const yDelta = YMinMaxVal[1] - YMinMaxVal[0];
60
+ const maxDelta = Math.max(zDelta, xDelta, yDelta);
61
+ ZMinMaxVal[1] = ZMinMaxVal[0] + maxDelta;
62
+ XMinMaxVal[1] = XMinMaxVal[0] + maxDelta;
63
+ YMinMaxVal[1] = YMinMaxVal[0] + maxDelta;
55
64
  return {
56
65
  z: this.getMinMaxRange(ZMinMaxVal, data.zAxis?.min, data.zAxis?.max),
57
66
  x: this.getMinMaxRange(XMinMaxVal, data.xAxis?.min, data.xAxis?.max),
@@ -73,10 +82,10 @@ class Chart3dService {
73
82
  z,
74
83
  };
75
84
  }
76
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: Chart3dService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
77
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: Chart3dService, providedIn: 'root' }); }
85
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: Chart3dService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
86
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: Chart3dService, providedIn: 'root' }); }
78
87
  }
79
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: Chart3dService, decorators: [{
88
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: Chart3dService, decorators: [{
80
89
  type: Injectable,
81
90
  args: [{
82
91
  providedIn: 'root',
@@ -84,46 +93,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
84
93
  }], ctorParameters: () => [] });
85
94
 
86
95
  class Base3dSeriesComponent {
96
+ constructor() {
97
+ this.svc = inject(Chart3dService);
98
+ this.ngtStore = injectStore();
99
+ }
87
100
  set series(series) {
88
101
  this._series = series;
89
102
  }
90
103
  get series() {
91
104
  return this._series;
92
105
  }
93
- constructor(svc) {
94
- this.svc = svc;
95
- this.ngtStore = injectStore();
96
- }
97
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: Base3dSeriesComponent, deps: [{ token: Chart3dService }], target: i0.ɵɵFactoryTarget.Component }); }
98
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: Base3dSeriesComponent, isStandalone: true, selector: "teta-base3d-series", inputs: { series: "series" }, ngImport: i0, template: "<p>base3d-series works!</p>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
106
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: Base3dSeriesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
107
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: Base3dSeriesComponent, isStandalone: true, selector: "teta-base3d-series", inputs: { series: "series" }, ngImport: i0, template: "<p>base3d-series works!</p>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
99
108
  }
100
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: Base3dSeriesComponent, decorators: [{
109
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: Base3dSeriesComponent, decorators: [{
101
110
  type: Component,
102
111
  args: [{ selector: 'teta-base3d-series', imports: [CommonModule], template: "<p>base3d-series works!</p>\n" }]
103
- }], ctorParameters: () => [{ type: Chart3dService }], propDecorators: { series: [{
112
+ }], propDecorators: { series: [{
104
113
  type: Input
105
114
  }] } });
106
115
 
107
116
  extend(THREE);
108
117
  class CustomSeriesComponent extends Base3dSeriesComponent {
109
- constructor(svc) {
110
- super(svc);
111
- this.svc = svc;
118
+ constructor() {
119
+ super();
112
120
  this.scales = this.svc.scales;
113
121
  }
114
122
  ngOnInit() {
115
123
  setTimeout(() => {
116
- this.ngtStore.get('camera').zoom = 2;
117
- this.ngtStore.get('camera').updateProjectionMatrix();
124
+ this.ngtStore().camera.zoom = 2;
125
+ this.ngtStore().camera.updateProjectionMatrix();
118
126
  }, 1000);
119
127
  }
120
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: CustomSeriesComponent, deps: [{ token: Chart3dService }], target: i0.ɵɵFactoryTarget.Component }); }
121
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: CustomSeriesComponent, isStandalone: true, selector: "teta-custom-series", usesInheritance: true, ngImport: i0, template: "@if ({ scales: scales | async }; as scales) {\n <ngt-mesh\n [position]=\"[\n scales.scales.x(this.series.data[0].x),\n scales.scales.y(this.series.data[0].y),\n scales.scales.z(this.series.data[0].z),\n ]\"\n >\n <ngt-box-geometry *args=\"[5, 5, 5]\"></ngt-box-geometry>\n <ngt-mesh-basic-material></ngt-mesh-basic-material>\n </ngt-mesh>\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
128
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CustomSeriesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
129
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: CustomSeriesComponent, isStandalone: true, selector: "teta-custom-series", usesInheritance: true, ngImport: i0, template: "@if ({ scales: scales | async }; as scales) {\n <ngt-mesh\n [position]=\"[\n scales.scales.x(this.series.data[0].x),\n scales.scales.y(this.series.data[0].y),\n scales.scales.z(this.series.data[0].z),\n ]\"\n >\n <ngt-box-geometry *args=\"[5, 5, 5]\"></ngt-box-geometry>\n <ngt-mesh-basic-material></ngt-mesh-basic-material>\n </ngt-mesh>\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
122
130
  }
123
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: CustomSeriesComponent, decorators: [{
131
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CustomSeriesComponent, decorators: [{
124
132
  type: Component,
125
133
  args: [{ selector: 'teta-custom-series', imports: [CommonModule, NgtArgs], schemas: [CUSTOM_ELEMENTS_SCHEMA], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if ({ scales: scales | async }; as scales) {\n <ngt-mesh\n [position]=\"[\n scales.scales.x(this.series.data[0].x),\n scales.scales.y(this.series.data[0].y),\n scales.scales.z(this.series.data[0].z),\n ]\"\n >\n <ngt-box-geometry *args=\"[5, 5, 5]\"></ngt-box-geometry>\n <ngt-mesh-basic-material></ngt-mesh-basic-material>\n </ngt-mesh>\n}\n" }]
126
- }], ctorParameters: () => [{ type: Chart3dService }] });
134
+ }], ctorParameters: () => [] });
127
135
 
128
136
  extend(THREE);
129
137
  class Area3dComponent {
@@ -164,10 +172,10 @@ class Area3dComponent {
164
172
  ngOnInit() {
165
173
  this.area = this.createArea();
166
174
  }
167
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: Area3dComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
168
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", 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 @for (rect of area; track rect) {\n <ngt-primitive *args=\"[rect]\"></ngt-primitive>\n }\n</ngt-mesh>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
175
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: Area3dComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
176
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", 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 @for (rect of area; track rect) {\n <ngt-primitive *args=\"[rect]\"></ngt-primitive>\n }\n</ngt-mesh>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
169
177
  }
170
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: Area3dComponent, decorators: [{
178
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: Area3dComponent, decorators: [{
171
179
  type: Component,
172
180
  args: [{ selector: 'teta-area-3d', 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 @for (rect of area; track rect) {\n <ngt-primitive *args=\"[rect]\"></ngt-primitive>\n }\n</ngt-mesh>\n" }]
173
181
  }] });
@@ -202,10 +210,10 @@ class Axes3dComponent {
202
210
  ngOnDestroy() {
203
211
  this._alive = false;
204
212
  }
205
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: Axes3dComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
206
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: Axes3dComponent, isStandalone: true, selector: "teta-axes-3d", inputs: { rotation: "rotation" }, ngImport: i0, template: "@if ({ axes: axes | async }; as data) {\n @for (tick of data.axes?.x; track tick) {\n <ngts-text\n [text]=\"tick.value + '-'\"\n [options]=\"{\n color:'var(--color-text-90)',\n rotation:rotation,\n fontSize:2.5,\n position:[tick.position, -50, 50],\n anchorX:'right',\n anchorY:'middle',\n textAlign:'right',\n }\"></ngts-text>\n }\n @for (tick of data.axes?.y; track tick) {\n <ngts-text\n [text]=\"tick.value + '-'\"\n [options]=\"{\n color:'var(--color-text-90)',\n rotation:rotation,\n fontSize:2.5,\n position:[0, tick.position, 50],\n anchorX:'right',\n anchorY:'middle',\n textAlign:'right',\n }\"></ngts-text>\n }\n @for (tick of data.axes?.z; track tick) {\n <ngts-text\n [text]=\"tick.value\"\n [options]=\"{\n color: 'var(--color-text-90)',\n rotation: rotation,\n fontSize: 2.5,\n position: [25, -50, tick.position],\n }\"></ngts-text>\n }\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "component", type: NgtsText, selector: "ngts-text", inputs: ["text", "options"], outputs: ["synced"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
213
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: Axes3dComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
214
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: Axes3dComponent, isStandalone: true, selector: "teta-axes-3d", inputs: { rotation: "rotation" }, ngImport: i0, template: "@if ({ axes: axes | async }; as data) {\n @for (tick of data.axes?.x; track tick) {\n <ngts-text\n [text]=\"tick.value + '-'\"\n [options]=\"{\n color:'var(--color-text-90)',\n rotation:rotation,\n fontSize:2.5,\n position:[tick.position, -50, 50],\n anchorX:'right',\n anchorY:'middle',\n textAlign:'right',\n }\"></ngts-text>\n }\n @for (tick of data.axes?.y; track tick) {\n <ngts-text\n [text]=\"tick.value + '-'\"\n [options]=\"{\n color:'var(--color-text-90)',\n rotation:rotation,\n fontSize:2.5,\n position:[0, tick.position, 50],\n anchorX:'right',\n anchorY:'middle',\n textAlign:'right',\n }\"></ngts-text>\n }\n @for (tick of data.axes?.z; track tick) {\n <ngts-text\n [text]=\"tick.value\"\n [options]=\"{\n color: 'var(--color-text-90)',\n rotation: rotation,\n fontSize: 2.5,\n position: [25, -50, tick.position],\n }\"></ngts-text>\n }\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: NgtsText, selector: "ngts-text", inputs: ["text", "options"], outputs: ["synced"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
207
215
  }
208
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: Axes3dComponent, decorators: [{
216
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: Axes3dComponent, decorators: [{
209
217
  type: Component,
210
218
  args: [{ selector: 'teta-axes-3d', imports: [CommonModule, NgtsText], schemas: [CUSTOM_ELEMENTS_SCHEMA], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if ({ axes: axes | async }; as data) {\n @for (tick of data.axes?.x; track tick) {\n <ngts-text\n [text]=\"tick.value + '-'\"\n [options]=\"{\n color:'var(--color-text-90)',\n rotation:rotation,\n fontSize:2.5,\n position:[tick.position, -50, 50],\n anchorX:'right',\n anchorY:'middle',\n textAlign:'right',\n }\"></ngts-text>\n }\n @for (tick of data.axes?.y; track tick) {\n <ngts-text\n [text]=\"tick.value + '-'\"\n [options]=\"{\n color:'var(--color-text-90)',\n rotation:rotation,\n fontSize:2.5,\n position:[0, tick.position, 50],\n anchorX:'right',\n anchorY:'middle',\n textAlign:'right',\n }\"></ngts-text>\n }\n @for (tick of data.axes?.z; track tick) {\n <ngts-text\n [text]=\"tick.value\"\n [options]=\"{\n color: 'var(--color-text-90)',\n rotation: rotation,\n fontSize: 2.5,\n position: [25, -50, tick.position],\n }\"></ngts-text>\n }\n}\n" }]
211
219
  }], ctorParameters: () => [], propDecorators: { rotation: [{
@@ -214,9 +222,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
214
222
 
215
223
  extend(THREE);
216
224
  class Block3dComponent extends Base3dSeriesComponent {
217
- constructor(svc) {
218
- super(svc);
219
- this.svc = svc;
225
+ constructor() {
226
+ super();
220
227
  this._alive = true;
221
228
  this.Math = Math;
222
229
  this.blocks = this.svc.scales.pipe(takeWhile(() => this._alive), map((scales) => {
@@ -268,19 +275,18 @@ class Block3dComponent extends Base3dSeriesComponent {
268
275
  ngOnDestroy() {
269
276
  this._alive = false;
270
277
  }
271
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: Block3dComponent, deps: [{ token: Chart3dService }], target: i0.ɵɵFactoryTarget.Component }); }
272
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: Block3dComponent, isStandalone: true, selector: "teta-block-3d", usesInheritance: true, ngImport: i0, template: "@if ({ blocks: blocks | async, scales: svc.scales | async }; as data) {\n @for (mesh of data.blocks; let i = $index; track mesh) {\n <ngt-primitive *args=\"[mesh[0].component]\"></ngt-primitive>\n <ngts-text\n [text]=\"series.data[i].name\"\n color=\"black\"\n [fontSize]=\"2.5\"\n [rotation]=\"[0, Math.PI / 2, 0]\"\n [position]=\"[1, mesh[0].position, 5]\"\n [textAlign]=\"'left'\"\n [anchorX]=\"'center'\"\n [anchorY]=\"'middle'\"\n ></ngts-text>\n <ngt-primitive *args=\"[mesh[1].component]\"></ngt-primitive>\n }\n}\n", dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "component", type: NgtsText, selector: "ngts-text", inputs: ["text", "options"], outputs: ["synced"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
278
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: Block3dComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
279
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: Block3dComponent, isStandalone: true, selector: "teta-block-3d", usesInheritance: true, ngImport: i0, template: "@if ({ blocks: blocks | async, scales: svc.scales | async }; as data) {\n @for (mesh of data.blocks; let i = $index; track mesh) {\n <ngt-primitive *args=\"[mesh[0].component]\"></ngt-primitive>\n <ngts-text\n [text]=\"series.data[i].name\"\n color=\"black\"\n [fontSize]=\"2.5\"\n [rotation]=\"[0, Math.PI / 2, 0]\"\n [position]=\"[1, mesh[0].position, 5]\"\n [textAlign]=\"'left'\"\n [anchorX]=\"'center'\"\n [anchorY]=\"'middle'\"\n ></ngts-text>\n <ngt-primitive *args=\"[mesh[1].component]\"></ngt-primitive>\n }\n}\n", dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "component", type: NgtsText, selector: "ngts-text", inputs: ["text", "options"], outputs: ["synced"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
273
280
  }
274
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: Block3dComponent, decorators: [{
281
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: Block3dComponent, decorators: [{
275
282
  type: Component,
276
283
  args: [{ selector: 'teta-block-3d', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgtArgs, NgtsText, AsyncPipe], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "@if ({ blocks: blocks | async, scales: svc.scales | async }; as data) {\n @for (mesh of data.blocks; let i = $index; track mesh) {\n <ngt-primitive *args=\"[mesh[0].component]\"></ngt-primitive>\n <ngts-text\n [text]=\"series.data[i].name\"\n color=\"black\"\n [fontSize]=\"2.5\"\n [rotation]=\"[0, Math.PI / 2, 0]\"\n [position]=\"[1, mesh[0].position, 5]\"\n [textAlign]=\"'left'\"\n [anchorX]=\"'center'\"\n [anchorY]=\"'middle'\"\n ></ngts-text>\n <ngt-primitive *args=\"[mesh[1].component]\"></ngt-primitive>\n }\n}\n" }]
277
- }], ctorParameters: () => [{ type: Chart3dService }] });
284
+ }], ctorParameters: () => [] });
278
285
 
279
286
  extend(THREE);
280
287
  class Line3dComponent extends Base3dSeriesComponent {
281
- constructor(svc) {
282
- super(svc);
283
- this.svc = svc;
288
+ constructor() {
289
+ super();
284
290
  this._alive = true;
285
291
  this.Math = Math;
286
292
  this.points = this.svc.scales.pipe(takeWhile(() => this._alive), map((scales) => {
@@ -297,13 +303,13 @@ class Line3dComponent extends Base3dSeriesComponent {
297
303
  ngOnDestroy() {
298
304
  this._alive = false;
299
305
  }
300
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: Line3dComponent, deps: [{ token: Chart3dService }], target: i0.ɵɵFactoryTarget.Component }); }
301
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: Line3dComponent, isStandalone: true, selector: "teta-line-3d", usesInheritance: true, ngImport: i0, template: "@if ({ points: points | async }; as data) {\n @if (data?.points?.length) {\n <ngt-mesh>\n <ngts-line [options]=\"{color: series.color,lineWidth: 2}\"\n [points]=\"data.points\"></ngts-line>\n <ngt-line-basic-material></ngt-line-basic-material>\n </ngt-mesh>\n }\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "component", type: NgtsLine, selector: "ngts-line", inputs: ["points", "options"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
306
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: Line3dComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
307
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: Line3dComponent, isStandalone: true, selector: "teta-line-3d", usesInheritance: true, ngImport: i0, template: "@if ({ points: points | async }; as data) {\n @if (data?.points?.length) {\n <ngt-mesh>\n <ngts-line [options]=\"{color: series.color,lineWidth: 2}\"\n [points]=\"data.points\"></ngts-line>\n <ngt-line-basic-material></ngt-line-basic-material>\n </ngt-mesh>\n }\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: NgtsLine, selector: "ngts-line", inputs: ["points", "options"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
302
308
  }
303
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: Line3dComponent, decorators: [{
309
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: Line3dComponent, decorators: [{
304
310
  type: Component,
305
311
  args: [{ selector: 'teta-line-3d', changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, NgtsLine, NgtArgs], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "@if ({ points: points | async }; as data) {\n @if (data?.points?.length) {\n <ngt-mesh>\n <ngts-line [options]=\"{color: series.color,lineWidth: 2}\"\n [points]=\"data.points\"></ngts-line>\n <ngt-line-basic-material></ngt-line-basic-material>\n </ngt-mesh>\n }\n}\n" }]
306
- }], ctorParameters: () => [{ type: Chart3dService }] });
312
+ }], ctorParameters: () => [] });
307
313
 
308
314
  var Series3dType;
309
315
  (function (Series3dType) {
@@ -333,10 +339,10 @@ class Series3dHost {
333
339
  this._componentRef.injector.get(ChangeDetectorRef).detectChanges();
334
340
  }
335
341
  }
336
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: Series3dHost, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
337
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: Series3dHost, isStandalone: true, selector: "[teta-series-3d-host]", inputs: { series: "series" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
342
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: Series3dHost, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
343
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: Series3dHost, isStandalone: true, selector: "[teta-series-3d-host]", inputs: { series: "series" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
338
344
  }
339
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: Series3dHost, decorators: [{
345
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: Series3dHost, decorators: [{
340
346
  type: Component,
341
347
  args: [{
342
348
  selector: '[teta-series-3d-host]',
@@ -359,16 +365,16 @@ class SceneComponent {
359
365
  setRotation() {
360
366
  this.rotation = null;
361
367
  this._cdr.detectChanges();
362
- this.rotation = this.store.get('camera').rotation;
368
+ this.rotation = this.store().camera.rotation;
363
369
  this._cdr.detectChanges();
364
370
  }
365
371
  ngOnInit() {
366
- this.rotation = this.store.get('camera').rotation;
372
+ this.rotation = this.store().camera.rotation;
367
373
  }
368
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: SceneComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
369
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: SceneComponent, isStandalone: true, selector: "teta-scene", ngImport: i0, template: "@if ({ data: data | async }; as config) {\n <ngt-scene>\n <ngts-orbit-controls\n [minAzimuthAngle]=\"0\"\n [maxAzimuthAngle]=\"Math.PI / 2\"\n [maxZoom]=\"30\"\n [minZoom]=\"2\"\n (change)=\"setRotation()\"\n ></ngts-orbit-controls>\n </ngt-scene>\n <teta-area-3d></teta-area-3d>\n @for (s of config.data?.series; track s) {\n <div teta-series-3d-host [series]=\"s\"></div>\n }\n <teta-axes-3d [rotation]=\"rotation\"></teta-axes-3d>\n}\n", dependencies: [{ kind: "component", type: NgtsOrbitControls, selector: "ngts-orbit-controls", inputs: ["options"], outputs: ["changed", "started", "ended"] }, { kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "component", type: Area3dComponent, selector: "teta-area-3d" }, { kind: "component", type: Axes3dComponent, selector: "teta-axes-3d", inputs: ["rotation"] }, { kind: "component", type: Series3dHost, selector: "[teta-series-3d-host]", inputs: ["series"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
374
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SceneComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
375
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: SceneComponent, isStandalone: true, selector: "teta-scene", ngImport: i0, template: "@if ({ data: data | async }; as config) {\n <ngt-scene>\n <ngts-orbit-controls\n [minAzimuthAngle]=\"0\"\n [maxAzimuthAngle]=\"Math.PI / 2\"\n [maxZoom]=\"30\"\n [minZoom]=\"2\"\n (change)=\"setRotation()\"\n ></ngts-orbit-controls>\n </ngt-scene>\n <teta-area-3d></teta-area-3d>\n @for (s of config.data?.series; track s) {\n <div teta-series-3d-host [series]=\"s\"></div>\n }\n <teta-axes-3d [rotation]=\"rotation\"></teta-axes-3d>\n}\n", dependencies: [{ kind: "component", type: NgtsOrbitControls, selector: "ngts-orbit-controls", inputs: ["options"], outputs: ["changed", "started", "ended"] }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: Area3dComponent, selector: "teta-area-3d" }, { kind: "component", type: Axes3dComponent, selector: "teta-axes-3d", inputs: ["rotation"] }, { kind: "component", type: Series3dHost, selector: "[teta-series-3d-host]", inputs: ["series"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
370
376
  }
371
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: SceneComponent, decorators: [{
377
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SceneComponent, decorators: [{
372
378
  type: Component,
373
379
  args: [{ selector: 'teta-scene', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
374
380
  NgtsOrbitControls,
@@ -382,10 +388,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
382
388
  }], ctorParameters: () => [] });
383
389
 
384
390
  class CanvasComponent {
385
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: CanvasComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
386
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: CanvasComponent, isStandalone: true, selector: "teta-canvas", inputs: { scene: "scene", camera: "camera", data: "data" }, ngImport: i0, template: "@if (data?.series?.length) {\n <ngt-canvas [sceneGraph]=\"scene\" [camera]=\"camera\"> </ngt-canvas>\n} @else {\n <p>{{ data?.noDataText || 'no data' }}</p>\n}\n", styles: [":host{width:100%;height:100%}\n"], dependencies: [{ kind: "component", type: NgtCanvas, selector: "ngt-canvas", inputs: ["sceneGraph", "gl", "size", "shadows", "legacy", "linear", "flat", "orthographic", "frameloop", "performance", "dpr", "raycaster", "scene", "camera", "events", "eventSource", "eventPrefix", "lookAt"], outputs: ["created", "rendered", "pointerMissed"] }, { kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
391
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CanvasComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
392
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: CanvasComponent, isStandalone: true, selector: "teta-canvas", inputs: { scene: "scene", camera: "camera", data: "data" }, ngImport: i0, template: "@if (data?.series?.length) {\n <ngt-canvas [sceneGraph]=\"scene\" [camera]=\"camera\"> </ngt-canvas>\n} @else {\n <p>{{ data?.noDataText || 'no data' }}</p>\n}\n", styles: [":host{width:100%;height:100%}\n"], dependencies: [{ kind: "component", type: i1$1.NgtCanvasImpl, selector: "ngt-canvas", inputs: ["gl", "size", "shadows", "legacy", "linear", "flat", "orthographic", "frameloop", "performance", "dpr", "raycaster", "scene", "camera", "events", "eventSource", "eventPrefix", "lookAt"], outputs: ["created", "pointerMissed"] }, { kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
387
393
  }
388
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: CanvasComponent, decorators: [{
394
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: CanvasComponent, decorators: [{
389
395
  type: Component,
390
396
  args: [{ selector: 'teta-canvas', schemas: [CUSTOM_ELEMENTS_SCHEMA], changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgtCanvas, SceneComponent, CommonModule], template: "@if (data?.series?.length) {\n <ngt-canvas [sceneGraph]=\"scene\" [camera]=\"camera\"> </ngt-canvas>\n} @else {\n <p>{{ data?.noDataText || 'no data' }}</p>\n}\n", styles: [":host{width:100%;height:100%}\n"] }]
391
397
  }], propDecorators: { scene: [{
@@ -418,10 +424,10 @@ class Canvas3dHost {
418
424
  this._componentRef.instance.camera = this.camera;
419
425
  this._componentRef.instance.data = this.data;
420
426
  }
421
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: Canvas3dHost, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
422
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: Canvas3dHost, isStandalone: true, selector: "[teta-canvas-3d-host]", inputs: { scene: "scene", camera: "camera", data: "data" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
427
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: Canvas3dHost, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
428
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: Canvas3dHost, isStandalone: true, selector: "[teta-canvas-3d-host]", inputs: { scene: "scene", camera: "camera", data: "data" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
423
429
  }
424
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: Canvas3dHost, decorators: [{
430
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: Canvas3dHost, decorators: [{
425
431
  type: Component,
426
432
  args: [{
427
433
  selector: '[teta-canvas-3d-host]',
@@ -455,10 +461,10 @@ class ThreeChartComponent {
455
461
  this.chartService.setData(this.data);
456
462
  }
457
463
  }
458
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ThreeChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
459
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ThreeChartComponent, isStandalone: true, selector: "teta-three-chart", inputs: { data: "data" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"column_auto column justify-content-center align-center\" style=\"height: 100%; width: 100%\">\n <div teta-canvas-3d-host [camera]=\"camera\" [data]=\"data\" [scene]=\"scene\"></div>\n</div>\n", styles: [":host{width:100%;height:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: Canvas3dHost, selector: "[teta-canvas-3d-host]", inputs: ["scene", "camera", "data"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
464
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ThreeChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
465
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: ThreeChartComponent, isStandalone: true, selector: "teta-three-chart", inputs: { data: "data" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"column_auto column justify-content-center align-center\" style=\"height: 100%; width: 100%\">\n <div teta-canvas-3d-host [camera]=\"camera\" [data]=\"data\" [scene]=\"scene\"></div>\n</div>\n", styles: [":host{width:100%;height:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: Canvas3dHost, selector: "[teta-canvas-3d-host]", inputs: ["scene", "camera", "data"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
460
466
  }
461
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ThreeChartComponent, decorators: [{
467
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ThreeChartComponent, decorators: [{
462
468
  type: Component,
463
469
  args: [{ selector: 'teta-three-chart', schemas: [CUSTOM_ELEMENTS_SCHEMA], changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, Canvas3dHost], template: "<div class=\"column_auto column justify-content-center align-center\" style=\"height: 100%; width: 100%\">\n <div teta-canvas-3d-host [camera]=\"camera\" [data]=\"data\" [scene]=\"scene\"></div>\n</div>\n", styles: [":host{width:100%;height:100%}\n"] }]
464
470
  }], propDecorators: { data: [{
@@ -1 +1 @@
1
- {"version":3,"file":"tetacom-ng-threejs-chart.mjs","sources":["../../src/component/three/three-chart/service/chart-3d.service.ts","../../src/component/three/three-chart/base-3d-series/base3d-series.component.ts","../../src/component/three/three-chart/base-3d-series/base3d-series.component.html","../../src/component/three/custom-series/custom-series.component.ts","../../src/component/three/custom-series/custom-series.component.html","../../src/component/three/three-chart/area-3d/area-3d.component.ts","../../src/component/three/three-chart/area-3d/area-3d.component.html","../../src/component/three/three-chart/axes-3d/axes-3d.component.ts","../../src/component/three/three-chart/axes-3d/axes-3d.component.html","../../src/component/three/three-chart/block-3d/block-3d.component.ts","../../src/component/three/three-chart/block-3d/block-3d.component.html","../../src/component/three/three-chart/line-3d/line-3d.component.ts","../../src/component/three/three-chart/line-3d/line-3d.component.html","../../src/component/three/three-chart/model/enum/series-3d-type.ts","../../src/component/three/three-chart/directive/series-3d-host.ts","../../src/component/three/three-chart/scene/scene.component.ts","../../src/component/three/three-chart/scene/scene.component.html","../../src/component/three/three-chart/canvas/canvas.component.ts","../../src/component/three/three-chart/canvas/canvas.component.html","../../src/component/three/three-chart/directive/canvas-3d-host.ts","../../src/component/three/three-chart/three-chart.component.ts","../../src/component/three/three-chart/three-chart.component.html","../../src/tetacom-ng-threejs-chart.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport * as d3 from 'd3';\nimport { map, Observable, ReplaySubject, shareReplay } from 'rxjs';\n\nimport { Axes3dMinMax } from '../model/axes-3d-min-max';\nimport { I3dChartConfig } from '../model/i-3d-chart-config';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class Chart3dService {\n public minMax: Observable<Axes3dMinMax>;\n public data: Observable<I3dChartConfig>;\n public scales: Observable<{ x; y; z }>;\n private data$: ReplaySubject<I3dChartConfig> = new ReplaySubject<I3dChartConfig>(1);\n\n constructor() {\n this.data = this.data$.asObservable();\n this.minMax = this.data.pipe(\n map((_) => {\n return this.getAxesMinMax(_);\n }),\n );\n this.scales = this.minMax.pipe(\n map((minMax) => {\n return this.getScales(minMax);\n }),\n shareReplay(1),\n );\n }\n\n setData(data) {\n this.data$.next(data);\n }\n\n private getAxesMinMax(data: I3dChartConfig): Axes3dMinMax {\n const zArr: number[] = data.series\n .map((_) => {\n return _?.data?.map((d) => d?.z);\n })\n .flat()\n .filter((_) => {\n return _ !== null && _ !== undefined;\n });\n const xArr: number[] = data.series\n .map((_) => {\n return _?.data?.map((d) => d?.x);\n })\n .flat()\n .filter((_) => {\n return _ !== null && _ !== undefined;\n });\n const yArr: number[] = data.series\n .map((_) => {\n return _?.data?.map((d) => d?.y);\n })\n .flat()\n .filter((_) => {\n return _ !== null && _ !== undefined;\n });\n const ZMinMaxVal: [number, number] = [Math.min(...zArr), Math.max(...zArr)];\n const XMinMaxVal: [number, number] = [Math.min(...xArr), Math.max(...xArr)];\n const YMinMaxVal: [number, number] = [Math.min(...yArr), Math.max(...yArr)];\n return {\n z: this.getMinMaxRange(ZMinMaxVal, data.zAxis?.min, data.zAxis?.max),\n x: this.getMinMaxRange(XMinMaxVal, data.xAxis?.min, data.xAxis?.max),\n y: this.getMinMaxRange(YMinMaxVal, data.yAxis?.min, data.yAxis?.max),\n };\n }\n\n private getMinMaxRange(minMax: [number, number], axisMin: number, axisMax: number): [number, number] {\n const min =\n axisMin || (Math.abs(minMax[0] - minMax[1]) < 0.0000001 ? minMax[0] - Math.abs(minMax[0] - 1) * 0.1 : minMax[0]);\n const max =\n axisMax || (Math.abs(minMax[0] - minMax[1]) < 0.0000001 ? minMax[1] + Math.abs(minMax[1] + 1) * 0.1 : minMax[1]);\n return [min, max];\n }\n\n private getScales(axesMinMax: Axes3dMinMax) {\n const z = d3.scaleLinear().domain(axesMinMax.z).range([50, -50]);\n const x = d3.scaleLinear().domain(axesMinMax.x).range([25, 0]);\n const y = d3.scaleLinear().domain(axesMinMax.y).range([50, -50]);\n return {\n x,\n y,\n z,\n };\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Chart3dService } from '../service/chart-3d.service';\nimport { Base3dThreePoint } from '../model/base-3d-three-point';\nimport { Base3dSeries } from '../model/base-3d-series';\nimport { injectStore} from 'angular-three';\n\n@Component({\n selector: 'teta-base3d-series',\n imports: [CommonModule],\n templateUrl: './base3d-series.component.html',\n styleUrls: ['./base3d-series.component.scss']\n})\nexport class Base3dSeriesComponent<T extends Base3dThreePoint> {\n protected ngtStore = injectStore();\n @Input()\n set series(series: Base3dSeries<T>) {\n this._series = series;\n }\n\n get series() {\n return this._series;\n }\n protected _series: Base3dSeries<T>;\n constructor(\n protected svc: Chart3dService,\n\n ) {}\n}\n","<p>base3d-series works!</p>\n","import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Base3dSeriesComponent } from '../three-chart/base-3d-series/base3d-series.component';\nimport { Base3dPoint } from '../../../common/model/base-3d-point';\nimport { Chart3dService } from '../three-chart/service/chart-3d.service';\nimport { extend, NgtArgs } from 'angular-three';\nimport { Observable } from 'rxjs';\nimport * as THREE from 'three';\n\nextend(THREE);\n\n@Component({\n selector: 'teta-custom-series',\n imports: [CommonModule, NgtArgs],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './custom-series.component.html'\n})\nexport class CustomSeriesComponent extends Base3dSeriesComponent<Base3dPoint> implements OnInit {\n public scales: Observable<{ x; y; z }>;\n\n constructor(\n override svc: Chart3dService,\n ) {\n super(svc);\n this.scales = this.svc.scales;\n }\n\n ngOnInit(): void {\n setTimeout(() => {\n this.ngtStore.get('camera').zoom = 2;\n this.ngtStore.get('camera').updateProjectionMatrix();\n }, 1000);\n }\n}\n","@if ({ scales: scales | async }; as scales) {\n <ngt-mesh\n [position]=\"[\n scales.scales.x(this.series.data[0].x),\n scales.scales.y(this.series.data[0].y),\n scales.scales.z(this.series.data[0].z),\n ]\"\n >\n <ngt-box-geometry *args=\"[5, 5, 5]\"></ngt-box-geometry>\n <ngt-mesh-basic-material></ngt-mesh-basic-material>\n </ngt-mesh>\n}\n","import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport * as THREE from 'three';\nimport { GridHelper } from 'three';\nimport { extend, NgtArgs } from 'angular-three';\n\nextend(THREE);\n\n@Component({\n selector: 'teta-area-3d',\n templateUrl: './area-3d.component.html',\n imports: [CommonModule, NgtArgs],\n changeDetection: ChangeDetectionStrategy.OnPush,\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class Area3dComponent implements OnInit {\n public area: GridHelper[];\n\n protected readonly THREE = THREE;\n\n createArea() {\n const grids: GridHelper[] = [];\n grids.push(this.getMainGrid());\n grids.push(...this.createGrid(4, 25, 3, 'vertical'));\n grids.push(...this.createGrid(4, 25, 3, 'horizontal'));\n return grids;\n }\n\n getMainGrid() {\n const mainGrid = new GridHelper(100, 12);\n mainGrid.position.set(0, 0, 0);\n mainGrid.rotateZ(Math.PI / 2);\n return mainGrid;\n }\n\n createGrid(gridsCount: number, gridSize: number, rectsInGrid: number, direction: 'vertical' | 'horizontal') {\n const plane: GridHelper[] = [];\n for (let p = 0; p <= gridsCount - 1; p++) {\n plane[p] = new THREE.GridHelper(gridSize, rectsInGrid, '#666', '#666');\n plane[p].renderOrder = -1;\n switch (direction) {\n case 'horizontal':\n plane[p].position.set(gridSize / 2, -50, gridSize * p + gridSize / 2 - 50);\n break;\n case 'vertical':\n plane[p].position.set(gridSize / 2, gridSize * p + gridSize / 2 - 50, -50);\n plane[p].rotateZ(Math.PI / 2);\n plane[p].rotateX(Math.PI / 2);\n break;\n }\n }\n return plane;\n }\n\n ngOnInit(): void {\n this.area = this.createArea();\n }\n}\n","<ngt-mesh>\n <ngt-mesh-basic-material [side]=\"THREE.DoubleSide\"></ngt-mesh-basic-material>\n @for (rect of area; track rect) {\n <ngt-primitive *args=\"[rect]\"></ngt-primitive>\n }\n</ngt-mesh>\n","import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, inject, Input, OnDestroy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgtsText } from 'angular-three-soba/abstractions';\nimport * as d3 from 'd3';\nimport * as THREE from 'three';\nimport { Euler } from 'three';\nimport { extend } from 'angular-three';\nimport { Axis3dPoint } from '../model/axis-3d-point';\nimport { Chart3dService } from '../service/chart-3d.service';\nimport { combineLatest, map, Observable, takeWhile } from 'rxjs';\nimport { Axes3dMinMax } from '../model/axes-3d-min-max';\n\nextend(THREE);\n\n@Component({\n selector: 'teta-axes-3d',\n templateUrl: './axes-3d.component.html',\n imports: [CommonModule, NgtsText],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class Axes3dComponent implements OnDestroy {\n @Input() rotation: Euler;\n public axes: Observable<{\n z: Axis3dPoint[];\n y: Axis3dPoint[];\n x: Axis3dPoint[];\n }>;\n private _alive = true;\n\n protected readonly chartService = inject(Chart3dService);\n\n constructor() {\n this.axes = combineLatest([this.chartService.scales, this.chartService.minMax]).pipe(\n takeWhile(() => this._alive),\n map(([scales, minMax]) => {\n return this.createAxes(scales, minMax);\n }),\n );\n }\n\n createAxes(scales, minMax: Axes3dMinMax) {\n const axisZ = this.generateTicks(minMax.z, 12).map((_) => {\n return { value: _.toFixed(1), position: scales.z(_) };\n });\n const axisY = this.generateTicks(minMax.y, 12).map((_) => {\n return { value: _.toFixed(1), position: scales.y(_) };\n });\n const axisX = this.generateTicks(minMax.x, 4).map((_) => {\n return { value: _.toFixed(1), position: scales.x(_) };\n });\n return { z: axisZ, y: axisY, x: axisX };\n }\n\n generateTicks(extremes: number[], count = 10) {\n const [min, max] = extremes;\n const tickStep = (max - min) / count;\n\n const ticks = d3.range(min, max + tickStep, tickStep).filter((step) => step <= max);\n\n return ticks;\n }\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n}\n","@if ({ axes: axes | async }; as data) {\n @for (tick of data.axes?.x; track tick) {\n <ngts-text\n [text]=\"tick.value + '-'\"\n [options]=\"{\n color:'var(--color-text-90)',\n rotation:rotation,\n fontSize:2.5,\n position:[tick.position, -50, 50],\n anchorX:'right',\n anchorY:'middle',\n textAlign:'right',\n }\"></ngts-text>\n }\n @for (tick of data.axes?.y; track tick) {\n <ngts-text\n [text]=\"tick.value + '-'\"\n [options]=\"{\n color:'var(--color-text-90)',\n rotation:rotation,\n fontSize:2.5,\n position:[0, tick.position, 50],\n anchorX:'right',\n anchorY:'middle',\n textAlign:'right',\n }\"></ngts-text>\n }\n @for (tick of data.axes?.z; track tick) {\n <ngts-text\n [text]=\"tick.value\"\n [options]=\"{\n color: 'var(--color-text-90)',\n rotation: rotation,\n fontSize: 2.5,\n position: [25, -50, tick.position],\n }\"></ngts-text>\n }\n}\n","import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, OnDestroy } from '@angular/core';\nimport { extend, NgtArgs } from 'angular-three';\nimport { NgtsText } from 'angular-three-soba/abstractions';\nimport { map, Observable, takeWhile } from 'rxjs';\nimport * as THREE from 'three';\nimport { Texture } from 'three';\n\nimport { Base3dSeriesComponent } from '../base-3d-series/base3d-series.component';\nimport { Block3dPoint } from '../model/block3d-point';\nimport { Chart3dService } from '../service/chart-3d.service';\nimport { AsyncPipe } from '@angular/common';\n\nextend(THREE);\n\n@Component({\n selector: 'teta-block-3d',\n templateUrl: './block-3d.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgtArgs, NgtsText, AsyncPipe],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class Block3dComponent<T extends Block3dPoint> extends Base3dSeriesComponent<T> implements OnDestroy {\n public blocks: Observable<\n {\n component: THREE.Mesh<THREE.PlaneGeometry, THREE.MeshBasicMaterial>;\n position: number;\n }[][]\n >;\n private _alive = true;\n protected readonly Math = Math;\n\n constructor(\n override svc: Chart3dService,\n ) {\n super(svc);\n this.blocks = this.svc.scales.pipe(\n takeWhile(() => this._alive),\n map((scales) => {\n return this.series?.data?.map((_) => {\n return this.createSVGTexture(scales.y(_?.y), scales.y(_?.y1), _?.iconId);\n });\n }),\n );\n }\n\n createSVGTexture(y: number, y1: number, iconId: number) {\n const max = Math.max(y, y1);\n const min = Math.min(y, y1);\n const height = Math.abs(max - min);\n const icon = iconId ? document.querySelector(`#${iconId}`) : null;\n const svgString = icon\n ? `<svg width='100' height='100' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'>${icon?.innerHTML}</svg>`\n : null;\n const loader = new THREE.TextureLoader();\n const texture = loader.load(`data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgString)}`);\n const plane = this.createTexturedPlane(texture, 100, height, !!icon);\n const plane1 = this.createTexturedPlane(texture, 25, height, !!icon);\n plane.rotation.set(0, Math.PI / 2, 0);\n plane.position.set(0.17, min + height / 2, 0);\n plane1.position.set(25 / 2, min + height / 2, -50 + 0.17);\n return [\n { component: plane, position: min + height / 2 },\n { component: plane1, position: min + height / 2 },\n ];\n }\n\n createTexturedPlane(texture: Texture, width: number, height: number, visible: boolean) {\n texture.wrapS = THREE.RepeatWrapping;\n texture.wrapT = THREE.RepeatWrapping;\n texture.repeat.set(10, height / 9);\n const material = new THREE.MeshBasicMaterial({ map: texture, visible });\n const geometry = new THREE.PlaneGeometry(width, height, 1, 1);\n const uvs = geometry.attributes['uv'].array;\n const newUvs = new Float32Array(uvs);\n newUvs[0] = 0;\n newUvs[1] = 1;\n newUvs[2] = width / 100;\n newUvs[3] = 1;\n newUvs[4] = 0;\n newUvs[5] = 0;\n newUvs[6] = width / 100;\n newUvs[7] = 0;\n geometry.attributes['uv'].needsUpdate = true;\n geometry.setAttribute('uv', new THREE.BufferAttribute(newUvs, 2));\n return new THREE.Mesh(geometry, material);\n }\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n}\n","@if ({ blocks: blocks | async, scales: svc.scales | async }; as data) {\n @for (mesh of data.blocks; let i = $index; track mesh) {\n <ngt-primitive *args=\"[mesh[0].component]\"></ngt-primitive>\n <ngts-text\n [text]=\"series.data[i].name\"\n color=\"black\"\n [fontSize]=\"2.5\"\n [rotation]=\"[0, Math.PI / 2, 0]\"\n [position]=\"[1, mesh[0].position, 5]\"\n [textAlign]=\"'left'\"\n [anchorX]=\"'center'\"\n [anchorY]=\"'middle'\"\n ></ngts-text>\n <ngt-primitive *args=\"[mesh[1].component]\"></ngt-primitive>\n }\n}\n","import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, OnDestroy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgtsLine } from 'angular-three-soba/abstractions';\nimport { extend, NgtArgs } from 'angular-three';\nimport * as THREE from 'three';\nimport { map, Observable, takeWhile } from 'rxjs';\nimport { Chart3dService } from '../service/chart-3d.service';\nimport { Base3dSeriesComponent } from '../base-3d-series/base3d-series.component';\nimport { Line3dPoint } from '../model/line-3d-point';\n\nextend(THREE);\n@Component({\n selector: 'teta-line-3d',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, NgtsLine, NgtArgs],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n templateUrl: './line-3d.component.html'\n})\nexport class Line3dComponent extends Base3dSeriesComponent<Line3dPoint> implements OnDestroy {\n public points: Observable<[number, number, number]>;\n private _alive = true;\n\n protected readonly Math = Math;\n constructor(\n override svc: Chart3dService,\n ) {\n super(svc);\n this.points = this.svc.scales.pipe(\n takeWhile(() => this._alive),\n map((scales) => {\n return this.getPoints(scales);\n }),\n );\n }\n getPoints(scales) {\n return this.series?.data\n ?.map((_) => {\n return [scales.x(_?.x), scales.y(_?.y), scales.z(_?.z)];\n })\n .flat() as [number, number, number];\n }\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n}\n","@if ({ points: points | async }; as data) {\n @if (data?.points?.length) {\n <ngt-mesh>\n <ngts-line [options]=\"{color: series.color,lineWidth: 2}\"\n [points]=\"data.points\"></ngts-line>\n <ngt-line-basic-material></ngt-line-basic-material>\n </ngt-mesh>\n }\n}\n","export enum Series3dType {\n line,\n block,\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n Input,\n OnInit,\n SimpleChanges,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { Base3dSeriesComponent } from '../base-3d-series/base3d-series.component';\nimport { Block3dComponent } from '../block-3d/block-3d.component';\nimport { Line3dComponent } from '../line-3d/line-3d.component';\nimport { Base3dSeries } from '../model/base-3d-series';\nimport { Base3dThreePoint } from '../model/base-3d-three-point';\nimport { Series3dType } from '../model/enum/series-3d-type';\n\n@Component({\n selector: '[teta-series-3d-host]',\n template: '',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Series3dHost<T extends Base3dThreePoint> implements OnInit {\n @Input() series: Base3dSeries<T>;\n\n private seriesMap: Map<Series3dType, typeof Base3dSeriesComponent> = new Map()\n .set(Series3dType.line, Line3dComponent)\n .set(Series3dType.block, Block3dComponent);\n private _init = false;\n private _componentRef: ComponentRef<any>;\n\n constructor(private viewContainerRef: ViewContainerRef) {}\n\n ngOnInit(): void {\n if (!Object.prototype.isPrototypeOf.call(Base3dSeriesComponent, this.series.component)) {\n this.series.component = this.seriesMap.get(this.series.type);\n }\n this._componentRef = this.viewContainerRef.createComponent(this.series.component);\n\n this._componentRef.instance.series = this.series;\n this._init = true;\n }\n ngOnChanges(changes: SimpleChanges): void {\n if (this._init && (Object.prototype.hasOwnProperty.call(changes, 'series') || changes.hasOwnProperty('config'))) {\n this._componentRef.instance.series = this.series;\n this._componentRef.injector.get(ChangeDetectorRef).detectChanges();\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n inject,\n OnInit,\n} from '@angular/core';\nimport { NgtsOrbitControls } from 'angular-three-soba/controls';\nimport { Observable } from 'rxjs';\nimport { Euler } from 'three';\n\nimport { Area3dComponent } from '../area-3d/area-3d.component';\nimport { Axes3dComponent } from '../axes-3d/axes-3d.component';\nimport { Block3dComponent } from '../block-3d/block-3d.component';\nimport { Series3dHost } from '../directive/series-3d-host';\nimport { Line3dComponent } from '../line-3d/line-3d.component';\nimport { I3dChartConfig } from '../model/i-3d-chart-config';\nimport { Chart3dService } from '../service/chart-3d.service';\nimport { injectStore } from 'angular-three';\n\n@Component({\n selector: 'teta-scene',\n templateUrl: './scene.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgtsOrbitControls,\n CommonModule,\n Area3dComponent,\n Line3dComponent,\n Axes3dComponent,\n Block3dComponent,\n Series3dHost,\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class SceneComponent implements OnInit {\n public data: Observable<I3dChartConfig>;\n public rotation: Euler;\n public readonly store = injectStore();\n protected readonly Math = Math;\n protected readonly chartService = inject(Chart3dService);\n protected readonly _cdr = inject(ChangeDetectorRef);\n\n constructor() {\n this.data = this.chartService.data;\n }\n\n setRotation() {\n this.rotation = null;\n this._cdr.detectChanges();\n this.rotation = this.store.get('camera').rotation;\n this._cdr.detectChanges();\n }\n\n ngOnInit(): void {\n this.rotation = this.store.get('camera').rotation;\n }\n}\n","@if ({ data: data | async }; as config) {\n <ngt-scene>\n <ngts-orbit-controls\n [minAzimuthAngle]=\"0\"\n [maxAzimuthAngle]=\"Math.PI / 2\"\n [maxZoom]=\"30\"\n [minZoom]=\"2\"\n (change)=\"setRotation()\"\n ></ngts-orbit-controls>\n </ngt-scene>\n <teta-area-3d></teta-area-3d>\n @for (s of config.data?.series; track s) {\n <div teta-series-3d-host [series]=\"s\"></div>\n }\n <teta-axes-3d [rotation]=\"rotation\"></teta-axes-3d>\n}\n","import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgtCamera, NgtCanvas } from 'angular-three';\nimport { SceneComponent } from '../scene/scene.component';\nimport { I3dChartConfig } from '../model/i-3d-chart-config';\n\n@Component({\n selector: 'teta-canvas',\n templateUrl: './canvas.component.html',\n styleUrls: ['./canvas.component.scss'],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgtCanvas, SceneComponent, CommonModule]\n})\nexport class CanvasComponent {\n @Input() scene: typeof SceneComponent;\n @Input() camera: NgtCamera;\n @Input() data: I3dChartConfig;\n}\n","@if (data?.series?.length) {\n <ngt-canvas [sceneGraph]=\"scene\" [camera]=\"camera\"> </ngt-canvas>\n} @else {\n <p>{{ data?.noDataText || 'no data' }}</p>\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n Input,\n OnChanges,\n OnInit,\n ViewContainerRef,\n} from '@angular/core';\nimport { Camera } from 'three';\n\nimport { CanvasComponent } from '../canvas/canvas.component';\nimport { I3dChartConfig } from '../model/i-3d-chart-config';\nimport { SceneComponent } from '../scene/scene.component';\n\n@Component({\n selector: '[teta-canvas-3d-host]',\n template: '',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Canvas3dHost implements OnInit, OnChanges {\n @Input() scene: typeof SceneComponent;\n @Input() camera: Camera;\n @Input() data: I3dChartConfig;\n\n private _init = false;\n private _componentRef: ComponentRef<any>;\n\n constructor(private viewContainerRef: ViewContainerRef) {}\n\n ngOnInit(): void {\n this.createCanvas();\n this._init = true;\n }\n\n ngOnChanges(): void {\n if (this._init) {\n this.createCanvas();\n this._componentRef.injector.get(ChangeDetectorRef).detectChanges();\n }\n }\n\n createCanvas() {\n this.viewContainerRef.clear();\n this._componentRef = this.viewContainerRef.createComponent(CanvasComponent);\n this._componentRef.instance.scene = this.scene;\n this._componentRef.instance.camera = this.camera;\n this._componentRef.instance.data = this.data;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n inject,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport { extend } from 'angular-three';\nimport * as THREE from 'three';\nimport { OrthographicCamera } from 'three';\n\nimport { I3dChartConfig } from './model/i-3d-chart-config';\nimport { SceneComponent } from './scene/scene.component';\nimport { Chart3dService } from './service/chart-3d.service';\nimport { Canvas3dHost } from './directive/canvas-3d-host';\n\nextend(THREE);\n\n@Component({\n selector: 'teta-three-chart',\n templateUrl: './three-chart.component.html',\n styleUrls: ['./three-chart.component.scss'],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, Canvas3dHost],\n})\nexport class ThreeChartComponent implements OnInit, OnChanges {\n @Input() data: I3dChartConfig;\n public scene: typeof SceneComponent;\n public camera: OrthographicCamera;\n\n protected readonly chartService = inject(Chart3dService);\n protected readonly cdr = inject(ChangeDetectorRef);\n\n ngOnInit(): void {\n this.scene = SceneComponent;\n this.camera = new OrthographicCamera(20, 20, 20, 20, 0.1, 1000);\n this.camera.position.set(100, 20, 70);\n this.camera.zoom = 4.5;\n this.camera.updateProjectionMatrix();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.data?.series?.length) {\n this.chartService.setData(this.data);\n }\n }\n}\n","<div class=\"column_auto column justify-content-center align-center\" style=\"height: 100%; width: 100%\">\n <div teta-canvas-3d-host [camera]=\"camera\" [data]=\"data\" [scene]=\"scene\"></div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.Chart3dService","i1"],"mappings":"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"}
1
+ {"version":3,"file":"tetacom-ng-threejs-chart.mjs","sources":["../../src/component/three/three-chart/service/chart-3d.service.ts","../../src/component/three/three-chart/base-3d-series/base3d-series.component.ts","../../src/component/three/three-chart/base-3d-series/base3d-series.component.html","../../src/component/three/custom-series/custom-series.component.ts","../../src/component/three/custom-series/custom-series.component.html","../../src/component/three/three-chart/area-3d/area-3d.component.ts","../../src/component/three/three-chart/area-3d/area-3d.component.html","../../src/component/three/three-chart/axes-3d/axes-3d.component.ts","../../src/component/three/three-chart/axes-3d/axes-3d.component.html","../../src/component/three/three-chart/block-3d/block-3d.component.ts","../../src/component/three/three-chart/block-3d/block-3d.component.html","../../src/component/three/three-chart/line-3d/line-3d.component.ts","../../src/component/three/three-chart/line-3d/line-3d.component.html","../../src/component/three/three-chart/model/enum/series-3d-type.ts","../../src/component/three/three-chart/directive/series-3d-host.ts","../../src/component/three/three-chart/scene/scene.component.ts","../../src/component/three/three-chart/scene/scene.component.html","../../src/component/three/three-chart/canvas/canvas.component.ts","../../src/component/three/three-chart/canvas/canvas.component.html","../../src/component/three/three-chart/directive/canvas-3d-host.ts","../../src/component/three/three-chart/three-chart.component.ts","../../src/component/three/three-chart/three-chart.component.html","../../src/tetacom-ng-threejs-chart.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport * as d3 from 'd3';\nimport { map, Observable, ReplaySubject, shareReplay } from 'rxjs';\n\nimport { Axes3dMinMax } from '../model/axes-3d-min-max';\nimport { I3dChartConfig } from '../model/i-3d-chart-config';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class Chart3dService {\n public minMax: Observable<Axes3dMinMax>;\n public data: Observable<I3dChartConfig>;\n public scales: Observable<{ x; y; z }>;\n private data$: ReplaySubject<I3dChartConfig> = new ReplaySubject<I3dChartConfig>(1);\n\n constructor() {\n this.data = this.data$.asObservable();\n this.minMax = this.data.pipe(\n map((_) => {\n return this.getAxesMinMax(_);\n }),\n );\n this.scales = this.minMax.pipe(\n map((minMax) => {\n return this.getScales(minMax);\n }),\n shareReplay(1),\n );\n }\n\n setData(data) {\n this.data$.next(data);\n }\n\n private getAxesMinMax(data: I3dChartConfig): Axes3dMinMax {\n const zArr: number[] = data.series\n .map((_) => {\n return _?.data?.map((d) => d?.z);\n })\n .flat()\n .filter((_) => {\n return _ !== null && _ !== undefined;\n });\n const xArr: number[] = data.series\n .map((_) => {\n return _?.data?.map((d) => d?.x);\n })\n .flat()\n .filter((_) => {\n return _ !== null && _ !== undefined;\n });\n const yArr: number[] = data.series\n .map((_) => {\n return _?.data?.map((d) => d?.y);\n })\n .flat()\n .filter((_) => {\n return _ !== null && _ !== undefined;\n });\n const ZMinMaxVal: [number, number] = [Math.min(...zArr), Math.max(...zArr)];\n const XMinMaxVal: [number, number] = [Math.min(...xArr), Math.max(...xArr)];\n const YMinMaxVal: [number, number] = [Math.min(...yArr), Math.max(...yArr)];\n const zDelta = ZMinMaxVal[1] - ZMinMaxVal[0];\n const xDelta = XMinMaxVal[1] - XMinMaxVal[0];\n const yDelta = YMinMaxVal[1] - YMinMaxVal[0];\n const maxDelta = Math.max(zDelta, xDelta, yDelta);\n ZMinMaxVal[1] = ZMinMaxVal[0] + maxDelta;\n XMinMaxVal[1] = XMinMaxVal[0] + maxDelta;\n YMinMaxVal[1] = YMinMaxVal[0] + maxDelta;\n return {\n z: this.getMinMaxRange(ZMinMaxVal, data.zAxis?.min, data.zAxis?.max),\n x: this.getMinMaxRange(XMinMaxVal, data.xAxis?.min, data.xAxis?.max),\n y: this.getMinMaxRange(YMinMaxVal, data.yAxis?.min, data.yAxis?.max),\n };\n }\n\n private getMinMaxRange(minMax: [number, number], axisMin: number, axisMax: number): [number, number] {\n const min =\n axisMin || (Math.abs(minMax[0] - minMax[1]) < 0.0000001 ? minMax[0] - Math.abs(minMax[0] - 1) * 0.1 : minMax[0]);\n const max =\n axisMax || (Math.abs(minMax[0] - minMax[1]) < 0.0000001 ? minMax[1] + Math.abs(minMax[1] + 1) * 0.1 : minMax[1]);\n return [min, max];\n }\n\n private getScales(axesMinMax: Axes3dMinMax) {\n const z = d3.scaleLinear().domain(axesMinMax.z).range([50, -50]);\n const x = d3.scaleLinear().domain(axesMinMax.x).range([25, 0]);\n const y = d3.scaleLinear().domain(axesMinMax.y).range([50, -50]);\n return {\n x,\n y,\n z,\n };\n }\n}\n","import { Component, inject, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Chart3dService } from '../service/chart-3d.service';\nimport { Base3dThreePoint } from '../model/base-3d-three-point';\nimport { Base3dSeries } from '../model/base-3d-series';\nimport { injectStore } from 'angular-three';\n\n@Component({\n selector: 'teta-base3d-series',\n imports: [CommonModule],\n templateUrl: './base3d-series.component.html',\n styleUrls: ['./base3d-series.component.scss'],\n})\nexport class Base3dSeriesComponent<T extends Base3dThreePoint> {\n protected svc = inject(Chart3dService);\n protected ngtStore = injectStore();\n\n @Input()\n set series(series: Base3dSeries<T>) {\n this._series = series;\n }\n\n get series() {\n return this._series;\n }\n\n protected _series: Base3dSeries<T>;\n}\n","<p>base3d-series works!</p>\n","import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Base3dSeriesComponent } from '../three-chart/base-3d-series/base3d-series.component';\nimport { Base3dPoint } from '../../../common/model/base-3d-point';\nimport { extend, NgtArgs } from 'angular-three';\nimport { Observable } from 'rxjs';\nimport * as THREE from 'three';\n\nextend(THREE);\n\n@Component({\n selector: 'teta-custom-series',\n imports: [CommonModule, NgtArgs],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './custom-series.component.html',\n})\nexport class CustomSeriesComponent extends Base3dSeriesComponent<Base3dPoint> implements OnInit {\n public scales: Observable<{ x; y; z }>;\n\n constructor() {\n super();\n this.scales = this.svc.scales;\n }\n\n ngOnInit(): void {\n setTimeout(() => {\n this.ngtStore().camera.zoom = 2;\n this.ngtStore().camera.updateProjectionMatrix();\n }, 1000);\n }\n}\n","@if ({ scales: scales | async }; as scales) {\n <ngt-mesh\n [position]=\"[\n scales.scales.x(this.series.data[0].x),\n scales.scales.y(this.series.data[0].y),\n scales.scales.z(this.series.data[0].z),\n ]\"\n >\n <ngt-box-geometry *args=\"[5, 5, 5]\"></ngt-box-geometry>\n <ngt-mesh-basic-material></ngt-mesh-basic-material>\n </ngt-mesh>\n}\n","import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport * as THREE from 'three';\nimport { GridHelper } from 'three';\nimport { extend, NgtArgs } from 'angular-three';\n\nextend(THREE);\n\n@Component({\n selector: 'teta-area-3d',\n templateUrl: './area-3d.component.html',\n imports: [CommonModule, NgtArgs],\n changeDetection: ChangeDetectionStrategy.OnPush,\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class Area3dComponent implements OnInit {\n public area: GridHelper[];\n\n protected readonly THREE = THREE;\n\n createArea() {\n const grids: GridHelper[] = [];\n grids.push(this.getMainGrid());\n grids.push(...this.createGrid(4, 25, 3, 'vertical'));\n grids.push(...this.createGrid(4, 25, 3, 'horizontal'));\n return grids;\n }\n\n getMainGrid() {\n const mainGrid = new GridHelper(100, 12);\n mainGrid.position.set(0, 0, 0);\n mainGrid.rotateZ(Math.PI / 2);\n return mainGrid;\n }\n\n createGrid(gridsCount: number, gridSize: number, rectsInGrid: number, direction: 'vertical' | 'horizontal') {\n const plane: GridHelper[] = [];\n for (let p = 0; p <= gridsCount - 1; p++) {\n plane[p] = new THREE.GridHelper(gridSize, rectsInGrid, '#666', '#666');\n plane[p].renderOrder = -1;\n switch (direction) {\n case 'horizontal':\n plane[p].position.set(gridSize / 2, -50, gridSize * p + gridSize / 2 - 50);\n break;\n case 'vertical':\n plane[p].position.set(gridSize / 2, gridSize * p + gridSize / 2 - 50, -50);\n plane[p].rotateZ(Math.PI / 2);\n plane[p].rotateX(Math.PI / 2);\n break;\n }\n }\n return plane;\n }\n\n ngOnInit(): void {\n this.area = this.createArea();\n }\n}\n","<ngt-mesh>\n <ngt-mesh-basic-material [side]=\"THREE.DoubleSide\"></ngt-mesh-basic-material>\n @for (rect of area; track rect) {\n <ngt-primitive *args=\"[rect]\"></ngt-primitive>\n }\n</ngt-mesh>\n","import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, inject, Input, OnDestroy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgtsText } from 'angular-three-soba/abstractions';\nimport * as d3 from 'd3';\nimport * as THREE from 'three';\nimport { Euler } from 'three';\nimport { extend } from 'angular-three';\nimport { Axis3dPoint } from '../model/axis-3d-point';\nimport { Chart3dService } from '../service/chart-3d.service';\nimport { combineLatest, map, Observable, takeWhile } from 'rxjs';\nimport { Axes3dMinMax } from '../model/axes-3d-min-max';\n\nextend(THREE);\n\n@Component({\n selector: 'teta-axes-3d',\n templateUrl: './axes-3d.component.html',\n imports: [CommonModule, NgtsText],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class Axes3dComponent implements OnDestroy {\n @Input() rotation: Euler;\n public axes: Observable<{\n z: Axis3dPoint[];\n y: Axis3dPoint[];\n x: Axis3dPoint[];\n }>;\n private _alive = true;\n\n protected readonly chartService = inject(Chart3dService);\n\n constructor() {\n this.axes = combineLatest([this.chartService.scales, this.chartService.minMax]).pipe(\n takeWhile(() => this._alive),\n map(([scales, minMax]) => {\n return this.createAxes(scales, minMax);\n }),\n );\n }\n\n createAxes(scales, minMax: Axes3dMinMax) {\n const axisZ = this.generateTicks(minMax.z, 12).map((_) => {\n return { value: _.toFixed(1), position: scales.z(_) };\n });\n const axisY = this.generateTicks(minMax.y, 12).map((_) => {\n return { value: _.toFixed(1), position: scales.y(_) };\n });\n const axisX = this.generateTicks(minMax.x, 4).map((_) => {\n return { value: _.toFixed(1), position: scales.x(_) };\n });\n return { z: axisZ, y: axisY, x: axisX };\n }\n\n generateTicks(extremes: number[], count = 10) {\n const [min, max] = extremes;\n const tickStep = (max - min) / count;\n\n const ticks = d3.range(min, max + tickStep, tickStep).filter((step) => step <= max);\n\n return ticks;\n }\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n}\n","@if ({ axes: axes | async }; as data) {\n @for (tick of data.axes?.x; track tick) {\n <ngts-text\n [text]=\"tick.value + '-'\"\n [options]=\"{\n color:'var(--color-text-90)',\n rotation:rotation,\n fontSize:2.5,\n position:[tick.position, -50, 50],\n anchorX:'right',\n anchorY:'middle',\n textAlign:'right',\n }\"></ngts-text>\n }\n @for (tick of data.axes?.y; track tick) {\n <ngts-text\n [text]=\"tick.value + '-'\"\n [options]=\"{\n color:'var(--color-text-90)',\n rotation:rotation,\n fontSize:2.5,\n position:[0, tick.position, 50],\n anchorX:'right',\n anchorY:'middle',\n textAlign:'right',\n }\"></ngts-text>\n }\n @for (tick of data.axes?.z; track tick) {\n <ngts-text\n [text]=\"tick.value\"\n [options]=\"{\n color: 'var(--color-text-90)',\n rotation: rotation,\n fontSize: 2.5,\n position: [25, -50, tick.position],\n }\"></ngts-text>\n }\n}\n","import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, OnDestroy } from '@angular/core';\nimport { extend, NgtArgs } from 'angular-three';\nimport { NgtsText } from 'angular-three-soba/abstractions';\nimport { map, Observable, takeWhile } from 'rxjs';\nimport * as THREE from 'three';\nimport { Texture } from 'three';\n\nimport { Base3dSeriesComponent } from '../base-3d-series/base3d-series.component';\nimport { Block3dPoint } from '../model/block3d-point';\nimport { AsyncPipe } from '@angular/common';\n\nextend(THREE);\n\n@Component({\n selector: 'teta-block-3d',\n templateUrl: './block-3d.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgtArgs, NgtsText, AsyncPipe],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class Block3dComponent<T extends Block3dPoint> extends Base3dSeriesComponent<T> implements OnDestroy {\n public blocks: Observable<\n {\n component: THREE.Mesh<THREE.PlaneGeometry, THREE.MeshBasicMaterial>;\n position: number;\n }[][]\n >;\n private _alive = true;\n protected readonly Math = Math;\n\n constructor() {\n super();\n this.blocks = this.svc.scales.pipe(\n takeWhile(() => this._alive),\n map((scales) => {\n return this.series?.data?.map((_) => {\n return this.createSVGTexture(scales.y(_?.y), scales.y(_?.y1), _?.iconId);\n });\n }),\n );\n }\n\n createSVGTexture(y: number, y1: number, iconId: number) {\n const max = Math.max(y, y1);\n const min = Math.min(y, y1);\n const height = Math.abs(max - min);\n const icon = iconId ? document.querySelector(`#${iconId}`) : null;\n const svgString = icon\n ? `<svg width='100' height='100' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'>${icon?.innerHTML}</svg>`\n : null;\n const loader = new THREE.TextureLoader();\n const texture = loader.load(`data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgString)}`);\n const plane = this.createTexturedPlane(texture, 100, height, !!icon);\n const plane1 = this.createTexturedPlane(texture, 25, height, !!icon);\n plane.rotation.set(0, Math.PI / 2, 0);\n plane.position.set(0.17, min + height / 2, 0);\n plane1.position.set(25 / 2, min + height / 2, -50 + 0.17);\n return [\n { component: plane, position: min + height / 2 },\n { component: plane1, position: min + height / 2 },\n ];\n }\n\n createTexturedPlane(texture: Texture, width: number, height: number, visible: boolean) {\n texture.wrapS = THREE.RepeatWrapping;\n texture.wrapT = THREE.RepeatWrapping;\n texture.repeat.set(10, height / 9);\n const material = new THREE.MeshBasicMaterial({ map: texture, visible });\n const geometry = new THREE.PlaneGeometry(width, height, 1, 1);\n const uvs = geometry.attributes['uv'].array;\n const newUvs = new Float32Array(uvs);\n newUvs[0] = 0;\n newUvs[1] = 1;\n newUvs[2] = width / 100;\n newUvs[3] = 1;\n newUvs[4] = 0;\n newUvs[5] = 0;\n newUvs[6] = width / 100;\n newUvs[7] = 0;\n geometry.attributes['uv'].needsUpdate = true;\n geometry.setAttribute('uv', new THREE.BufferAttribute(newUvs, 2));\n return new THREE.Mesh(geometry, material);\n }\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n}\n","@if ({ blocks: blocks | async, scales: svc.scales | async }; as data) {\n @for (mesh of data.blocks; let i = $index; track mesh) {\n <ngt-primitive *args=\"[mesh[0].component]\"></ngt-primitive>\n <ngts-text\n [text]=\"series.data[i].name\"\n color=\"black\"\n [fontSize]=\"2.5\"\n [rotation]=\"[0, Math.PI / 2, 0]\"\n [position]=\"[1, mesh[0].position, 5]\"\n [textAlign]=\"'left'\"\n [anchorX]=\"'center'\"\n [anchorY]=\"'middle'\"\n ></ngts-text>\n <ngt-primitive *args=\"[mesh[1].component]\"></ngt-primitive>\n }\n}\n","import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, OnDestroy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgtsLine } from 'angular-three-soba/abstractions';\nimport { extend, NgtArgs } from 'angular-three';\nimport * as THREE from 'three';\nimport { map, Observable, takeWhile } from 'rxjs';\nimport { Base3dSeriesComponent } from '../base-3d-series/base3d-series.component';\nimport { Line3dPoint } from '../model/line-3d-point';\n\nextend(THREE);\n@Component({\n selector: 'teta-line-3d',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, NgtsLine, NgtArgs],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n templateUrl: './line-3d.component.html',\n})\nexport class Line3dComponent extends Base3dSeriesComponent<Line3dPoint> implements OnDestroy {\n public points: Observable<[number, number, number]>;\n private _alive = true;\n\n protected readonly Math = Math;\n constructor() {\n super();\n this.points = this.svc.scales.pipe(\n takeWhile(() => this._alive),\n map((scales) => {\n return this.getPoints(scales);\n }),\n );\n }\n getPoints(scales) {\n return this.series?.data\n ?.map((_) => {\n return [scales.x(_?.x), scales.y(_?.y), scales.z(_?.z)];\n })\n .flat() as [number, number, number];\n }\n\n ngOnDestroy(): void {\n this._alive = false;\n }\n}\n","@if ({ points: points | async }; as data) {\n @if (data?.points?.length) {\n <ngt-mesh>\n <ngts-line [options]=\"{color: series.color,lineWidth: 2}\"\n [points]=\"data.points\"></ngts-line>\n <ngt-line-basic-material></ngt-line-basic-material>\n </ngt-mesh>\n }\n}\n","export enum Series3dType {\n line,\n block,\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n Input,\n OnInit,\n SimpleChanges,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { Base3dSeriesComponent } from '../base-3d-series/base3d-series.component';\nimport { Block3dComponent } from '../block-3d/block-3d.component';\nimport { Line3dComponent } from '../line-3d/line-3d.component';\nimport { Base3dSeries } from '../model/base-3d-series';\nimport { Base3dThreePoint } from '../model/base-3d-three-point';\nimport { Series3dType } from '../model/enum/series-3d-type';\n\n@Component({\n selector: '[teta-series-3d-host]',\n template: '',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Series3dHost<T extends Base3dThreePoint> implements OnInit {\n @Input() series: Base3dSeries<T>;\n\n private seriesMap: Map<Series3dType, typeof Base3dSeriesComponent> = new Map()\n .set(Series3dType.line, Line3dComponent)\n .set(Series3dType.block, Block3dComponent);\n private _init = false;\n private _componentRef: ComponentRef<any>;\n\n constructor(private viewContainerRef: ViewContainerRef) {}\n\n ngOnInit(): void {\n if (!Object.prototype.isPrototypeOf.call(Base3dSeriesComponent, this.series.component)) {\n this.series.component = this.seriesMap.get(this.series.type);\n }\n this._componentRef = this.viewContainerRef.createComponent(this.series.component);\n\n this._componentRef.instance.series = this.series;\n this._init = true;\n }\n ngOnChanges(changes: SimpleChanges): void {\n if (this._init && (Object.prototype.hasOwnProperty.call(changes, 'series') || changes.hasOwnProperty('config'))) {\n this._componentRef.instance.series = this.series;\n this._componentRef.injector.get(ChangeDetectorRef).detectChanges();\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n inject,\n OnInit,\n} from '@angular/core';\nimport { NgtsOrbitControls } from 'angular-three-soba/controls';\nimport { Observable } from 'rxjs';\nimport { Euler } from 'three';\n\nimport { Area3dComponent } from '../area-3d/area-3d.component';\nimport { Axes3dComponent } from '../axes-3d/axes-3d.component';\nimport { Block3dComponent } from '../block-3d/block-3d.component';\nimport { Series3dHost } from '../directive/series-3d-host';\nimport { Line3dComponent } from '../line-3d/line-3d.component';\nimport { I3dChartConfig } from '../model/i-3d-chart-config';\nimport { Chart3dService } from '../service/chart-3d.service';\nimport { injectStore } from 'angular-three';\n\n@Component({\n selector: 'teta-scene',\n templateUrl: './scene.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n NgtsOrbitControls,\n CommonModule,\n Area3dComponent,\n Line3dComponent,\n Axes3dComponent,\n Block3dComponent,\n Series3dHost,\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class SceneComponent implements OnInit {\n public data: Observable<I3dChartConfig>;\n public rotation: Euler;\n public readonly store = injectStore();\n protected readonly Math = Math;\n protected readonly chartService = inject(Chart3dService);\n protected readonly _cdr = inject(ChangeDetectorRef);\n\n constructor() {\n this.data = this.chartService.data;\n }\n\n setRotation() {\n this.rotation = null;\n this._cdr.detectChanges();\n this.rotation = this.store().camera.rotation;\n this._cdr.detectChanges();\n }\n\n ngOnInit(): void {\n this.rotation = this.store().camera.rotation;\n }\n}\n","@if ({ data: data | async }; as config) {\n <ngt-scene>\n <ngts-orbit-controls\n [minAzimuthAngle]=\"0\"\n [maxAzimuthAngle]=\"Math.PI / 2\"\n [maxZoom]=\"30\"\n [minZoom]=\"2\"\n (change)=\"setRotation()\"\n ></ngts-orbit-controls>\n </ngt-scene>\n <teta-area-3d></teta-area-3d>\n @for (s of config.data?.series; track s) {\n <div teta-series-3d-host [series]=\"s\"></div>\n }\n <teta-axes-3d [rotation]=\"rotation\"></teta-axes-3d>\n}\n","import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NgtCamera } from 'angular-three';\nimport { SceneComponent } from '../scene/scene.component';\nimport { I3dChartConfig } from '../model/i-3d-chart-config';\nimport { NgtCanvas } from 'angular-three/dom';\n\n@Component({\n selector: 'teta-canvas',\n templateUrl: './canvas.component.html',\n styleUrls: ['./canvas.component.scss'],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgtCanvas, SceneComponent, CommonModule],\n})\nexport class CanvasComponent {\n @Input() scene: typeof SceneComponent;\n @Input() camera: NgtCamera;\n @Input() data: I3dChartConfig;\n}\n","@if (data?.series?.length) {\n <ngt-canvas [sceneGraph]=\"scene\" [camera]=\"camera\"> </ngt-canvas>\n} @else {\n <p>{{ data?.noDataText || 'no data' }}</p>\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ComponentRef,\n Input,\n OnChanges,\n OnInit,\n ViewContainerRef,\n} from '@angular/core';\nimport { Camera } from 'three';\n\nimport { CanvasComponent } from '../canvas/canvas.component';\nimport { I3dChartConfig } from '../model/i-3d-chart-config';\nimport { SceneComponent } from '../scene/scene.component';\n\n@Component({\n selector: '[teta-canvas-3d-host]',\n template: '',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Canvas3dHost implements OnInit, OnChanges {\n @Input() scene: typeof SceneComponent;\n @Input() camera: Camera;\n @Input() data: I3dChartConfig;\n\n private _init = false;\n private _componentRef: ComponentRef<any>;\n\n constructor(private viewContainerRef: ViewContainerRef) {}\n\n ngOnInit(): void {\n this.createCanvas();\n this._init = true;\n }\n\n ngOnChanges(): void {\n if (this._init) {\n this.createCanvas();\n this._componentRef.injector.get(ChangeDetectorRef).detectChanges();\n }\n }\n\n createCanvas() {\n this.viewContainerRef.clear();\n this._componentRef = this.viewContainerRef.createComponent(CanvasComponent);\n this._componentRef.instance.scene = this.scene;\n this._componentRef.instance.camera = this.camera;\n this._componentRef.instance.data = this.data;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n CUSTOM_ELEMENTS_SCHEMA,\n inject,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport { extend } from 'angular-three';\nimport * as THREE from 'three';\nimport { OrthographicCamera } from 'three';\n\nimport { I3dChartConfig } from './model/i-3d-chart-config';\nimport { SceneComponent } from './scene/scene.component';\nimport { Chart3dService } from './service/chart-3d.service';\nimport { Canvas3dHost } from './directive/canvas-3d-host';\n\nextend(THREE);\n\n@Component({\n selector: 'teta-three-chart',\n templateUrl: './three-chart.component.html',\n styleUrls: ['./three-chart.component.scss'],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, Canvas3dHost],\n})\nexport class ThreeChartComponent implements OnInit, OnChanges {\n @Input() data: I3dChartConfig;\n public scene: typeof SceneComponent;\n public camera: OrthographicCamera;\n\n protected readonly chartService = inject(Chart3dService);\n protected readonly cdr = inject(ChangeDetectorRef);\n\n ngOnInit(): void {\n this.scene = SceneComponent;\n this.camera = new OrthographicCamera(20, 20, 20, 20, 0.1, 1000);\n this.camera.position.set(100, 20, 70);\n this.camera.zoom = 4.5;\n this.camera.updateProjectionMatrix();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.data?.series?.length) {\n this.chartService.setData(this.data);\n }\n }\n}\n","<div class=\"column_auto column justify-content-center align-center\" style=\"height: 100%; width: 100%\">\n <div teta-canvas-3d-host [camera]=\"camera\" [data]=\"data\" [scene]=\"scene\"></div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}