@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.
- package/.eslintrc.json +43 -0
- package/README.md +7 -0
- package/common/model/base-3d-point.d.ts +5 -0
- package/component/three/custom-series/custom-series.component.d.ts +20 -0
- package/component/three/public-api.d.ts +11 -0
- package/component/three/three-chart/area-3d/area-3d.component.d.ts +13 -0
- package/component/three/three-chart/axes-3d/axes-3d.component.d.ts +28 -0
- package/component/three/three-chart/base-3d-series/base3d-series.component.d.ts +15 -0
- package/component/three/three-chart/block-3d/block-3d.component.d.ts +28 -0
- package/component/three/three-chart/canvas/canvas.component.d.ts +11 -0
- package/component/three/three-chart/directive/canvas-3d-host.d.ts +19 -0
- package/component/three/three-chart/directive/public-api.d.ts +2 -0
- package/component/three/three-chart/directive/series-3d-host.d.ts +16 -0
- package/component/three/three-chart/line-3d/line-3d.component.d.ts +19 -0
- package/component/three/three-chart/model/axes-3d-min-max.d.ts +5 -0
- package/component/three/three-chart/model/axis-3d-point.d.ts +4 -0
- package/component/three/three-chart/model/base-3d-series.d.ts +11 -0
- package/component/three/three-chart/model/base-3d-three-point.d.ts +8 -0
- package/component/three/three-chart/model/block-3d-series.d.ts +6 -0
- package/component/three/three-chart/model/block3d-point.d.ts +5 -0
- package/component/three/three-chart/model/enum/public-api.d.ts +1 -0
- package/component/three/three-chart/model/enum/series-3d-type.d.ts +4 -0
- package/component/three/three-chart/model/i-3d-chart-config.d.ts +14 -0
- package/component/three/three-chart/model/line-3d-point.d.ts +5 -0
- package/component/three/three-chart/model/line-3d-series.d.ts +6 -0
- package/component/three/three-chart/model/public-api.d.ts +10 -0
- package/component/three/three-chart/scene/scene.component.d.ts +20 -0
- package/component/three/three-chart/service/chart-3d.service.d.ts +21 -0
- package/component/three/three-chart/three-chart.component.d.ts +19 -0
- package/esm2022/common/model/base-3d-point.mjs +2 -0
- package/esm2022/component/three/custom-series/custom-series.component.mjs +32 -0
- package/esm2022/component/three/public-api.mjs +12 -0
- package/esm2022/component/three/three-chart/area-3d/area-3d.component.mjs +54 -0
- package/esm2022/component/three/three-chart/axes-3d/axes-3d.component.mjs +59 -0
- package/esm2022/component/three/three-chart/base-3d-series/base3d-series.component.mjs +28 -0
- package/esm2022/component/three/three-chart/block-3d/block-3d.component.mjs +74 -0
- package/esm2022/component/three/three-chart/canvas/canvas.component.mjs +22 -0
- package/esm2022/component/three/three-chart/directive/canvas-3d-host.mjs +45 -0
- package/esm2022/component/three/three-chart/directive/public-api.mjs +3 -0
- package/esm2022/component/three/three-chart/directive/series-3d-host.mjs +45 -0
- package/esm2022/component/three/three-chart/line-3d/line-3d.component.mjs +40 -0
- package/esm2022/component/three/three-chart/model/axes-3d-min-max.mjs +2 -0
- package/esm2022/component/three/three-chart/model/axis-3d-point.mjs +2 -0
- package/esm2022/component/three/three-chart/model/base-3d-series.mjs +2 -0
- package/esm2022/component/three/three-chart/model/base-3d-three-point.mjs +2 -0
- package/esm2022/component/three/three-chart/model/block-3d-series.mjs +2 -0
- package/esm2022/component/three/three-chart/model/block3d-point.mjs +2 -0
- package/esm2022/component/three/three-chart/model/enum/public-api.mjs +2 -0
- package/esm2022/component/three/three-chart/model/enum/series-3d-type.mjs +6 -0
- package/esm2022/component/three/three-chart/model/i-3d-chart-config.mjs +2 -0
- package/esm2022/component/three/three-chart/model/line-3d-point.mjs +2 -0
- package/esm2022/component/three/three-chart/model/line-3d-series.mjs +2 -0
- package/esm2022/component/three/three-chart/model/public-api.mjs +11 -0
- package/esm2022/component/three/three-chart/scene/scene.component.mjs +45 -0
- package/esm2022/component/three/three-chart/service/chart-3d.service.mjs +83 -0
- package/esm2022/component/three/three-chart/three-chart.component.mjs +45 -0
- package/esm2022/index.mjs +2 -0
- package/esm2022/tetacom-ng-threejs-chart.mjs +5 -0
- package/fesm2022/tetacom-ng-threejs-chart.mjs +496 -0
- package/fesm2022/tetacom-ng-threejs-chart.mjs.map +1 -0
- package/index.d.ts +1 -0
- package/package.json +29 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as d3 from 'd3';
|
|
3
|
+
import { map, ReplaySubject, shareReplay } from 'rxjs';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class Chart3dService {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.data$ = new ReplaySubject(1);
|
|
8
|
+
this.data = this.data$.asObservable();
|
|
9
|
+
this.minMax = this.data.pipe(map(_ => {
|
|
10
|
+
return this.getAxesMinMax(_);
|
|
11
|
+
}));
|
|
12
|
+
this.scales = this.minMax.pipe(map(minMax => {
|
|
13
|
+
return this.getScales(minMax);
|
|
14
|
+
}), shareReplay(1));
|
|
15
|
+
}
|
|
16
|
+
setData(data) {
|
|
17
|
+
this.data$.next(data);
|
|
18
|
+
}
|
|
19
|
+
getAxesMinMax(data) {
|
|
20
|
+
const zArr = data.series
|
|
21
|
+
.map(_ => {
|
|
22
|
+
return _?.data?.map(d => d?.z);
|
|
23
|
+
})
|
|
24
|
+
.flat()
|
|
25
|
+
.filter(_ => {
|
|
26
|
+
return _ !== null && _ !== undefined;
|
|
27
|
+
});
|
|
28
|
+
const xArr = data.series
|
|
29
|
+
.map(_ => {
|
|
30
|
+
return _?.data?.map(d => d?.x);
|
|
31
|
+
})
|
|
32
|
+
.flat()
|
|
33
|
+
.filter(_ => {
|
|
34
|
+
return _ !== null && _ !== undefined;
|
|
35
|
+
});
|
|
36
|
+
const yArr = data.series
|
|
37
|
+
.map(_ => {
|
|
38
|
+
return _?.data?.map(d => d?.y);
|
|
39
|
+
})
|
|
40
|
+
.flat()
|
|
41
|
+
.filter(_ => {
|
|
42
|
+
return _ !== null && _ !== undefined;
|
|
43
|
+
});
|
|
44
|
+
const ZMinMaxVal = [Math.min(...zArr), Math.max(...zArr)];
|
|
45
|
+
const XMinMaxVal = [Math.min(...xArr), Math.max(...xArr)];
|
|
46
|
+
const YMinMaxVal = [Math.min(...yArr), Math.max(...yArr)];
|
|
47
|
+
return {
|
|
48
|
+
z: this.getMinMaxRange(ZMinMaxVal, data.zAxis?.min, data.zAxis?.max),
|
|
49
|
+
x: this.getMinMaxRange(XMinMaxVal, data.xAxis?.min, data.xAxis?.max),
|
|
50
|
+
y: this.getMinMaxRange(YMinMaxVal, data.yAxis?.min, data.yAxis?.max),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
getMinMaxRange(minMax, axisMin, axisMax) {
|
|
54
|
+
const min = axisMin ||
|
|
55
|
+
(Math.abs(minMax[0] - minMax[1]) < 0.0000001
|
|
56
|
+
? minMax[0] - Math.abs(minMax[0] - 1) * 0.1
|
|
57
|
+
: minMax[0]);
|
|
58
|
+
const max = axisMax ||
|
|
59
|
+
(Math.abs(minMax[0] - minMax[1]) < 0.0000001
|
|
60
|
+
? minMax[1] + Math.abs(minMax[1] + 1) * 0.1
|
|
61
|
+
: minMax[1]);
|
|
62
|
+
return [min, max];
|
|
63
|
+
}
|
|
64
|
+
getScales(axesMinMax) {
|
|
65
|
+
const z = d3.scaleLinear().domain(axesMinMax.z).range([50, -50]);
|
|
66
|
+
const x = d3.scaleLinear().domain(axesMinMax.x).range([25, 0]);
|
|
67
|
+
const y = d3.scaleLinear().domain(axesMinMax.y).range([50, -50]);
|
|
68
|
+
return {
|
|
69
|
+
x,
|
|
70
|
+
y,
|
|
71
|
+
z,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: Chart3dService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
75
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: Chart3dService, providedIn: 'root' }); }
|
|
76
|
+
}
|
|
77
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: Chart3dService, decorators: [{
|
|
78
|
+
type: Injectable,
|
|
79
|
+
args: [{
|
|
80
|
+
providedIn: 'root',
|
|
81
|
+
}]
|
|
82
|
+
}], ctorParameters: () => [] });
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtM2Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvdGhyZWUvdGhyZWUtY2hhcnQvc2VydmljZS9jaGFydC0zZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxFQUFFLEdBQUcsRUFBYyxhQUFhLEVBQUUsV0FBVyxFQUFDLE1BQU0sTUFBTSxDQUFDOztBQVFsRSxNQUFNLE9BQU8sY0FBYztJQU96QjtRQUhRLFVBQUssR0FDWCxJQUFJLGFBQWEsQ0FBaUIsQ0FBQyxDQUFDLENBQUM7UUFHckMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQzFCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDNUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ1gsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxFQUNGLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUFJO1FBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVPLGFBQWEsQ0FBQyxJQUFvQjtRQUN4QyxNQUFNLElB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QUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBzaGFyZVJlcGxheX0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEF4ZXMzZE1pbk1heCB9IGZyb20gJy4uL21vZGVsL2F4ZXMtM2QtbWluLW1heCc7XG5pbXBvcnQgeyBJM2RDaGFydENvbmZpZyB9IGZyb20gJy4uL21vZGVsL2ktM2QtY2hhcnQtY29uZmlnJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIENoYXJ0M2RTZXJ2aWNlIHtcbiAgcHVibGljIG1pbk1heDogT2JzZXJ2YWJsZTxBeGVzM2RNaW5NYXg+O1xuICBwdWJsaWMgZGF0YTogT2JzZXJ2YWJsZTxJM2RDaGFydENvbmZpZz47XG4gIHB1YmxpYyBzY2FsZXM6IE9ic2VydmFibGU8eyB4OyB5OyB6IH0+O1xuICBwcml2YXRlIGRhdGEkOiBSZXBsYXlTdWJqZWN0PEkzZENoYXJ0Q29uZmlnPiA9XG4gICAgbmV3IFJlcGxheVN1YmplY3Q8STNkQ2hhcnRDb25maWc+KDEpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5taW5NYXggPSB0aGlzLmRhdGEucGlwZShcbiAgICAgIG1hcChfID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXhlc01pbk1heChfKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnNjYWxlcyA9IHRoaXMubWluTWF4LnBpcGUoXG4gICAgICBtYXAobWluTWF4ID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2NhbGVzKG1pbk1heCk7XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgfVxuXG4gIHNldERhdGEoZGF0YSkge1xuICAgIHRoaXMuZGF0YSQubmV4dChkYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXhlc01pbk1heChkYXRhOiBJM2RDaGFydENvbmZpZyk6IEF4ZXMzZE1pbk1heCB7XG4gICAgY29uc3QgekFycjogbnVtYmVyW10gPSBkYXRhLnNlcmllc1xuICAgICAgLm1hcChfID0+IHtcbiAgICAgICAgcmV0dXJuIF8/LmRhdGE/Lm1hcChkID0+IGQ/LnopO1xuICAgICAgfSlcbiAgICAgIC5mbGF0KClcbiAgICAgIC5maWx0ZXIoXyA9PiB7XG4gICAgICAgIHJldHVybiBfICE9PSBudWxsICYmIF8gIT09IHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuICAgIGNvbnN0IHhBcnI6IG51bWJlcltdID0gZGF0YS5zZXJpZXNcbiAgICAgIC5tYXAoXyA9PiB7XG4gICAgICAgIHJldHVybiBfPy5kYXRhPy5tYXAoZCA9PiBkPy54KTtcbiAgICAgIH0pXG4gICAgICAuZmxhdCgpXG4gICAgICAuZmlsdGVyKF8gPT4ge1xuICAgICAgICByZXR1cm4gXyAhPT0gbnVsbCAmJiBfICE9PSB1bmRlZmluZWQ7XG4gICAgICB9KTtcbiAgICBjb25zdCB5QXJyOiBudW1iZXJbXSA9IGRhdGEuc2VyaWVzXG4gICAgICAubWFwKF8gPT4ge1xuICAgICAgICByZXR1cm4gXz8uZGF0YT8ubWFwKGQgPT4gZD8ueSk7XG4gICAgICB9KVxuICAgICAgLmZsYXQoKVxuICAgICAgLmZpbHRlcihfID0+IHtcbiAgICAgICAgcmV0dXJuIF8gIT09IG51bGwgJiYgXyAhPT0gdW5kZWZpbmVkO1xuICAgICAgfSk7XG4gICAgY29uc3QgWk1pbk1heFZhbDogW251bWJlciwgbnVtYmVyXSA9IFtNYXRoLm1pbiguLi56QXJyKSwgTWF0aC5tYXgoLi4uekFycildO1xuICAgIGNvbnN0IFhNaW5NYXhWYWw6IFtudW1iZXIsIG51bWJlcl0gPSBbTWF0aC5taW4oLi4ueEFyciksIE1hdGgubWF4KC4uLnhBcnIpXTtcbiAgICBjb25zdCBZTWluTWF4VmFsOiBbbnVtYmVyLCBudW1iZXJdID0gW01hdGgubWluKC4uLnlBcnIpLCBNYXRoLm1heCguLi55QXJyKV07XG4gICAgcmV0dXJuIHtcbiAgICAgIHo6IHRoaXMuZ2V0TWluTWF4UmFuZ2UoWk1pbk1heFZhbCwgZGF0YS56QXhpcz8ubWluLCBkYXRhLnpBeGlzPy5tYXgpLFxuICAgICAgeDogdGhpcy5nZXRNaW5NYXhSYW5nZShYTWluTWF4VmFsLCBkYXRhLnhBeGlzPy5taW4sIGRhdGEueEF4aXM/Lm1heCksXG4gICAgICB5OiB0aGlzLmdldE1pbk1heFJhbmdlKFlNaW5NYXhWYWwsIGRhdGEueUF4aXM/Lm1pbiwgZGF0YS55QXhpcz8ubWF4KSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNaW5NYXhSYW5nZShcbiAgICBtaW5NYXg6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgYXhpc01pbjogbnVtYmVyLFxuICAgIGF4aXNNYXg6IG51bWJlclxuICApOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgICBjb25zdCBtaW4gPVxuICAgICAgYXhpc01pbiB8fFxuICAgICAgKE1hdGguYWJzKG1pbk1heFswXSAtIG1pbk1heFsxXSkgPCAwLjAwMDAwMDFcbiAgICAgICAgPyBtaW5NYXhbMF0gLSBNYXRoLmFicyhtaW5NYXhbMF0gLSAxKSAqIDAuMVxuICAgICAgICA6IG1pbk1heFswXSk7XG4gICAgY29uc3QgbWF4ID1cbiAgICAgIGF4aXNNYXggfHxcbiAgICAgIChNYXRoLmFicyhtaW5NYXhbMF0gLSBtaW5NYXhbMV0pIDwgMC4wMDAwMDAxXG4gICAgICAgID8gbWluTWF4WzFdICsgTWF0aC5hYnMobWluTWF4WzFdICsgMSkgKiAwLjFcbiAgICAgICAgOiBtaW5NYXhbMV0pO1xuICAgIHJldHVybiBbbWluLCBtYXhdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTY2FsZXMoYXhlc01pbk1heDogQXhlczNkTWluTWF4KSB7XG4gICAgY29uc3QgeiA9IGQzLnNjYWxlTGluZWFyKCkuZG9tYWluKGF4ZXNNaW5NYXgueikucmFuZ2UoWzUwLCAtNTBdKTtcbiAgICBjb25zdCB4ID0gZDMuc2NhbGVMaW5lYXIoKS5kb21haW4oYXhlc01pbk1heC54KS5yYW5nZShbMjUsIDBdKTtcbiAgICBjb25zdCB5ID0gZDMuc2NhbGVMaW5lYXIoKS5kb21haW4oYXhlc01pbk1heC55KS5yYW5nZShbNTAsIC01MF0pO1xuICAgIHJldHVybiB7XG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHosXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA, inject, Input, } from '@angular/core';
|
|
3
|
+
import { extend, NgtCanvas, NgtStore } from 'angular-three';
|
|
4
|
+
import * as THREE from 'three';
|
|
5
|
+
import { OrthographicCamera } from 'three';
|
|
6
|
+
import { SceneComponent } from './scene/scene.component';
|
|
7
|
+
import { Chart3dService } from './service/chart-3d.service';
|
|
8
|
+
import { CanvasComponent } from './canvas/canvas.component';
|
|
9
|
+
import { Canvas3dHost } from './directive/canvas-3d-host';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
extend(THREE);
|
|
12
|
+
export class ThreeChartComponent {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.chartService = inject(Chart3dService);
|
|
15
|
+
this.store = inject(NgtStore);
|
|
16
|
+
this.cdr = inject(ChangeDetectorRef);
|
|
17
|
+
}
|
|
18
|
+
ngOnInit() {
|
|
19
|
+
this.scene = SceneComponent;
|
|
20
|
+
this.camera = new OrthographicCamera(20, 20, 20, 20, 0.1, 1000);
|
|
21
|
+
this.camera.position.set(100, 20, 70);
|
|
22
|
+
this.camera.zoom = 4.5;
|
|
23
|
+
this.camera.updateProjectionMatrix();
|
|
24
|
+
}
|
|
25
|
+
ngOnChanges(changes) {
|
|
26
|
+
if (this.data?.series?.length) {
|
|
27
|
+
this.chartService.setData(this.data);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ThreeChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
31
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: ThreeChartComponent, isStandalone: true, selector: "teta-three-chart", inputs: { data: "data" }, providers: [NgtStore], 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 }); }
|
|
32
|
+
}
|
|
33
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ThreeChartComponent, decorators: [{
|
|
34
|
+
type: Component,
|
|
35
|
+
args: [{ selector: 'teta-three-chart', standalone: true, schemas: [CUSTOM_ELEMENTS_SCHEMA], changeDetection: ChangeDetectionStrategy.OnPush, providers: [NgtStore], imports: [
|
|
36
|
+
NgtCanvas,
|
|
37
|
+
SceneComponent,
|
|
38
|
+
CommonModule,
|
|
39
|
+
CanvasComponent,
|
|
40
|
+
Canvas3dHost,
|
|
41
|
+
], 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"] }]
|
|
42
|
+
}], propDecorators: { data: [{
|
|
43
|
+
type: Input
|
|
44
|
+
}] } });
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyZWUtY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudC90aHJlZS90aHJlZS1jaGFydC90aHJlZS1jaGFydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RocmVlL3RocmVlLWNoYXJ0L3RocmVlLWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1Qsc0JBQXNCLEVBQ3RCLE1BQU0sRUFDTixLQUFLLEdBSU4sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUczQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBRTFELE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQWtCZCxNQUFNLE9BQU8sbUJBQW1CO0lBaEJoQztRQXFCcUIsaUJBQVksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEMsVUFBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QixRQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7S0FlcEQ7SUFiQyxRQUFRO1FBQ04sSUFBSSxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUM7UUFDNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDSCxDQUFDOzhHQXJCVSxtQkFBbUI7a0dBQW5CLG1CQUFtQix5RkFUbkIsQ0FBQyxRQUFRLENBQUMsK0NDL0J2QixnTkFHQSx3RkRnQ0ksWUFBWSwrQkFFWixZQUFZOzsyRkFHSCxtQkFBbUI7a0JBaEIvQixTQUFTOytCQUNFLGtCQUFrQixjQUdoQixJQUFJLFdBQ1AsQ0FBQyxzQkFBc0IsQ0FBQyxtQkFDaEIsdUJBQXVCLENBQUMsTUFBTSxhQUNwQyxDQUFDLFFBQVEsQ0FBQyxXQUNaO3dCQUNQLFNBQVM7d0JBQ1QsY0FBYzt3QkFDZCxZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsWUFBWTtxQkFDYjs4QkFHUSxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGV4dGVuZCwgTmd0Q2FudmFzLCBOZ3RTdG9yZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgT3J0aG9ncmFwaGljQ2FtZXJhIH0gZnJvbSAndGhyZWUnO1xuXG5pbXBvcnQgeyBJM2RDaGFydENvbmZpZyB9IGZyb20gJy4vbW9kZWwvaS0zZC1jaGFydC1jb25maWcnO1xuaW1wb3J0IHsgU2NlbmVDb21wb25lbnQgfSBmcm9tICcuL3NjZW5lL3NjZW5lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDaGFydDNkU2VydmljZSB9IGZyb20gJy4vc2VydmljZS9jaGFydC0zZC5zZXJ2aWNlJztcbmltcG9ydCB7IENhbnZhc0NvbXBvbmVudCB9IGZyb20gJy4vY2FudmFzL2NhbnZhcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FudmFzM2RIb3N0IH0gZnJvbSAnLi9kaXJlY3RpdmUvY2FudmFzLTNkLWhvc3QnO1xuXG5leHRlbmQoVEhSRUUpO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLXRocmVlLWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RocmVlLWNoYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGhyZWUtY2hhcnQuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbTmd0U3RvcmVdLFxuICBpbXBvcnRzOiBbXG4gICAgTmd0Q2FudmFzLFxuICAgIFNjZW5lQ29tcG9uZW50LFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBDYW52YXNDb21wb25lbnQsXG4gICAgQ2FudmFzM2RIb3N0LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBUaHJlZUNoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBkYXRhOiBJM2RDaGFydENvbmZpZztcbiAgcHVibGljIHNjZW5lOiB0eXBlb2YgU2NlbmVDb21wb25lbnQ7XG4gIHB1YmxpYyBjYW1lcmE6IE9ydGhvZ3JhcGhpY0NhbWVyYTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2hhcnRTZXJ2aWNlID0gaW5qZWN0KENoYXJ0M2RTZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHN0b3JlID0gaW5qZWN0KE5ndFN0b3JlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zY2VuZSA9IFNjZW5lQ29tcG9uZW50O1xuICAgIHRoaXMuY2FtZXJhID0gbmV3IE9ydGhvZ3JhcGhpY0NhbWVyYSgyMCwgMjAsIDIwLCAyMCwgMC4xLCAxMDAwKTtcbiAgICB0aGlzLmNhbWVyYS5wb3NpdGlvbi5zZXQoMTAwLCAyMCwgNzApO1xuICAgIHRoaXMuY2FtZXJhLnpvb20gPSA0LjU7XG4gICAgdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGE/LnNlcmllcz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmNoYXJ0U2VydmljZS5zZXREYXRhKHRoaXMuZGF0YSk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2ICBjbGFzcz1cImNvbHVtbl9hdXRvIGNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWNlbnRlclwiIHN0eWxlPVwiaGVpZ2h0OiAxMDAlO3dpZHRoOiAxMDAlO1wiPlxuICA8ZGl2IHRldGEtY2FudmFzLTNkLWhvc3QgW2NhbWVyYV09XCJjYW1lcmFcIiBbZGF0YV09XCJkYXRhXCIgW3NjZW5lXT1cInNjZW5lXCI+PC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './component/three/public-api';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw4QkFBOEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50L3RocmVlL3B1YmxpYy1hcGknO1xuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV0YWNvbS1uZy10aHJlZWpzLWNoYXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RldGFjb20tbmctdGhyZWVqcy1jaGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
|