angular-three-soba 2.14.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/abstractions/lib/catmull-rom-line.d.ts +117 -117
- package/abstractions/lib/edges.d.ts +126 -126
- package/abstractions/lib/grid.d.ts +15 -15
- package/abstractions/lib/line.d.ts +1 -1
- package/abstractions/lib/prism-geometry.d.ts +4 -4
- package/abstractions/lib/rounded-box.d.ts +1 -1
- package/abstractions/lib/text-3d.d.ts +22 -22
- package/abstractions/lib/text.d.ts +1 -1
- package/cameras/lib/cube-camera.d.ts +1 -1
- package/cameras/lib/orthographic-camera.d.ts +1 -1
- package/cameras/lib/perspective-camera.d.ts +1 -1
- package/controls/index.d.ts +0 -9
- package/controls/lib/camera-controls.d.ts +1 -1
- package/controls/lib/orbit-controls.d.ts +1 -1
- package/fesm2022/angular-three-soba-abstractions.mjs +41 -52
- package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
- package/fesm2022/angular-three-soba-cameras.mjs +12 -15
- package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
- package/fesm2022/angular-three-soba-controls.mjs +16 -24
- package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
- package/fesm2022/angular-three-soba-gizmos.mjs +59 -60
- package/fesm2022/angular-three-soba-gizmos.mjs.map +1 -1
- package/fesm2022/angular-three-soba-loaders.mjs +3 -3
- package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-materials.mjs +27 -35
- package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
- package/fesm2022/angular-three-soba-misc.mjs +27 -29
- package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
- package/fesm2022/angular-three-soba-performances.mjs +31 -34
- package/fesm2022/angular-three-soba-performances.mjs.map +1 -1
- package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-staging.mjs +91 -105
- package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
- package/fesm2022/angular-three-soba-stats.mjs +3 -3
- package/fesm2022/angular-three-soba-stats.mjs.map +1 -1
- package/gizmos/lib/gizmo-helper/gizmo-viewport.d.ts +1 -1
- package/gizmos/lib/pivot-controls/axis-arrow.d.ts +1 -1
- package/gizmos/lib/pivot-controls/axis-rotator.d.ts +1 -1
- package/gizmos/lib/pivot-controls/pivot-controls.d.ts +1 -1
- package/gizmos/lib/pivot-controls/plane-slider.d.ts +1 -1
- package/gizmos/lib/pivot-controls/scaling-sphere.d.ts +1 -1
- package/gizmos/lib/transform-controls.d.ts +2 -2
- package/materials/lib/custom-shader-material.d.ts +2 -2
- package/materials/lib/mesh-portal-material.d.ts +9 -9
- package/materials/lib/mesh-refraction-material.d.ts +2 -2
- package/materials/lib/mesh-transmission-material.d.ts +1 -1
- package/misc/lib/computed-attribute.d.ts +6 -6
- package/misc/lib/decal.d.ts +1 -1
- package/misc/lib/html/html.d.ts +2 -2
- package/misc/lib/sampler.d.ts +1 -1
- package/package.json +11 -37
- package/performances/lib/instances/instances.d.ts +5 -5
- package/performances/lib/points/points.d.ts +10 -10
- package/performances/lib/segments/segments.d.ts +4 -4
- package/shaders/lib/mesh-refraction-material.d.ts +2 -2
- package/staging/lib/caustics.d.ts +1 -1
- package/staging/lib/center.d.ts +2 -2
- package/staging/lib/contact-shadows.d.ts +1 -1
- package/staging/lib/lightformer.d.ts +1 -1
- package/staging/lib/mask.d.ts +1 -1
- package/staging/lib/render-texture.d.ts +1 -1
- package/staging/lib/spot-light.d.ts +2 -2
- package/esm2022/abstractions/angular-three-soba-abstractions.mjs +0 -5
- package/esm2022/abstractions/index.mjs +0 -14
- package/esm2022/abstractions/lib/billboard.mjs +0 -69
- package/esm2022/abstractions/lib/catmull-rom-line.mjs +0 -76
- package/esm2022/abstractions/lib/cubic-bezier-line.mjs +0 -51
- package/esm2022/abstractions/lib/edges.mjs +0 -66
- package/esm2022/abstractions/lib/gradient-texture.mjs +0 -91
- package/esm2022/abstractions/lib/grid.mjs +0 -103
- package/esm2022/abstractions/lib/helper.mjs +0 -74
- package/esm2022/abstractions/lib/line.mjs +0 -123
- package/esm2022/abstractions/lib/prism-geometry.mjs +0 -46
- package/esm2022/abstractions/lib/quadratic-bezier-line.mjs +0 -73
- package/esm2022/abstractions/lib/rounded-box.mjs +0 -131
- package/esm2022/abstractions/lib/text-3d.mjs +0 -100
- package/esm2022/abstractions/lib/text.mjs +0 -86
- package/esm2022/angular-three-soba.mjs +0 -5
- package/esm2022/cameras/angular-three-soba-cameras.mjs +0 -5
- package/esm2022/cameras/index.mjs +0 -5
- package/esm2022/cameras/lib/camera-content.mjs +0 -14
- package/esm2022/cameras/lib/cube-camera.mjs +0 -102
- package/esm2022/cameras/lib/orthographic-camera.mjs +0 -131
- package/esm2022/cameras/lib/perspective-camera.mjs +0 -105
- package/esm2022/controls/angular-three-soba-controls.mjs +0 -5
- package/esm2022/controls/index.mjs +0 -9
- package/esm2022/controls/lib/camera-controls.mjs +0 -126
- package/esm2022/controls/lib/orbit-controls.mjs +0 -114
- package/esm2022/controls/lib/scroll-controls.mjs +0 -261
- package/esm2022/gizmos/angular-three-soba-gizmos.mjs +0 -5
- package/esm2022/gizmos/index.mjs +0 -6
- package/esm2022/gizmos/lib/gizmo-helper/gizmo-helper.mjs +0 -191
- package/esm2022/gizmos/lib/gizmo-helper/gizmo-viewcube.mjs +0 -304
- package/esm2022/gizmos/lib/gizmo-helper/gizmo-viewport.mjs +0 -348
- package/esm2022/gizmos/lib/pivot-controls/axis-arrow.mjs +0 -265
- package/esm2022/gizmos/lib/pivot-controls/axis-rotator.mjs +0 -264
- package/esm2022/gizmos/lib/pivot-controls/pivot-controls.mjs +0 -349
- package/esm2022/gizmos/lib/pivot-controls/plane-slider.mjs +0 -266
- package/esm2022/gizmos/lib/pivot-controls/scaling-sphere.mjs +0 -232
- package/esm2022/gizmos/lib/transform-controls.mjs +0 -177
- package/esm2022/index.mjs +0 -2
- package/esm2022/loaders/angular-three-soba-loaders.mjs +0 -5
- package/esm2022/loaders/index.mjs +0 -7
- package/esm2022/loaders/lib/fbx-loader.mjs +0 -13
- package/esm2022/loaders/lib/font-loader.mjs +0 -49
- package/esm2022/loaders/lib/gltf-loader.mjs +0 -51
- package/esm2022/loaders/lib/loader.mjs +0 -103
- package/esm2022/loaders/lib/progress.mjs +0 -51
- package/esm2022/loaders/lib/texture-loader.mjs +0 -32
- package/esm2022/materials/angular-three-soba-materials.mjs +0 -5
- package/esm2022/materials/index.mjs +0 -9
- package/esm2022/materials/lib/custom-shader-material.mjs +0 -67
- package/esm2022/materials/lib/mesh-distort-material.mjs +0 -43
- package/esm2022/materials/lib/mesh-portal-material.mjs +0 -294
- package/esm2022/materials/lib/mesh-reflector-material.mjs +0 -274
- package/esm2022/materials/lib/mesh-refraction-material.mjs +0 -140
- package/esm2022/materials/lib/mesh-transmission-material.mjs +0 -188
- package/esm2022/materials/lib/mesh-wobble-material.mjs +0 -43
- package/esm2022/materials/lib/point-material.mjs +0 -34
- package/esm2022/misc/angular-three-soba-misc.mjs +0 -5
- package/esm2022/misc/index.mjs +0 -15
- package/esm2022/misc/lib/animations.mjs +0 -71
- package/esm2022/misc/lib/bake-shadows.mjs +0 -24
- package/esm2022/misc/lib/computed-attribute.mjs +0 -51
- package/esm2022/misc/lib/constants.mjs +0 -5
- package/esm2022/misc/lib/decal.mjs +0 -142
- package/esm2022/misc/lib/deprecated.mjs +0 -15
- package/esm2022/misc/lib/depth-buffer.mjs +0 -35
- package/esm2022/misc/lib/fbo.mjs +0 -86
- package/esm2022/misc/lib/html/html-content.mjs +0 -322
- package/esm2022/misc/lib/html/html.mjs +0 -129
- package/esm2022/misc/lib/html/utils.mjs +0 -74
- package/esm2022/misc/lib/intersect.mjs +0 -49
- package/esm2022/misc/lib/preload.mjs +0 -58
- package/esm2022/misc/lib/sampler.mjs +0 -122
- package/esm2022/misc/lib/scale-factor.mjs +0 -29
- package/esm2022/performances/angular-three-soba-performances.mjs +0 -5
- package/esm2022/performances/index.mjs +0 -7
- package/esm2022/performances/lib/adaptive-dpr.mjs +0 -46
- package/esm2022/performances/lib/adaptive-events.mjs +0 -24
- package/esm2022/performances/lib/detailed.mjs +0 -53
- package/esm2022/performances/lib/instances/instances.mjs +0 -177
- package/esm2022/performances/lib/instances/position-mesh.mjs +0 -51
- package/esm2022/performances/lib/points/points.mjs +0 -272
- package/esm2022/performances/lib/points/position-point.mjs +0 -53
- package/esm2022/performances/lib/segments/segment-object.mjs +0 -9
- package/esm2022/performances/lib/segments/segments.mjs +0 -126
- package/esm2022/shaders/angular-three-soba-shaders.mjs +0 -5
- package/esm2022/shaders/index.mjs +0 -4
- package/esm2022/shaders/lib/grid-material.mjs +0 -81
- package/esm2022/shaders/lib/mesh-refraction-material.mjs +0 -163
- package/esm2022/shaders/lib/point-material.mjs +0 -24
- package/esm2022/staging/angular-three-soba-staging.mjs +0 -5
- package/esm2022/staging/index.mjs +0 -21
- package/esm2022/staging/lib/accumulative-shadows.mjs +0 -180
- package/esm2022/staging/lib/backdrop.mjs +0 -69
- package/esm2022/staging/lib/bb-anchor.mjs +0 -58
- package/esm2022/staging/lib/bounds.mjs +0 -282
- package/esm2022/staging/lib/camera-shake.mjs +0 -65
- package/esm2022/staging/lib/caustics.mjs +0 -184
- package/esm2022/staging/lib/center.mjs +0 -114
- package/esm2022/staging/lib/contact-shadows.mjs +0 -214
- package/esm2022/staging/lib/environment/environment.mjs +0 -344
- package/esm2022/staging/lib/environment/inject-environment.mjs +0 -184
- package/esm2022/staging/lib/float.mjs +0 -70
- package/esm2022/staging/lib/lightformer.mjs +0 -103
- package/esm2022/staging/lib/mask.mjs +0 -74
- package/esm2022/staging/lib/matcap-texture.mjs +0 -79
- package/esm2022/staging/lib/normal-texture.mjs +0 -79
- package/esm2022/staging/lib/randomized-lights.mjs +0 -100
- package/esm2022/staging/lib/render-texture.mjs +0 -202
- package/esm2022/staging/lib/sky.mjs +0 -86
- package/esm2022/staging/lib/spot-light.mjs +0 -445
- package/esm2022/staging/lib/stage.mjs +0 -232
- package/esm2022/stats/angular-three-soba-stats.mjs +0 -5
- package/esm2022/stats/index.mjs +0 -2
- package/esm2022/stats/lib/stats.mjs +0 -57
- package/esm2022/vanilla-exports/angular-three-soba-vanilla-exports.mjs +0 -5
- package/esm2022/vanilla-exports/index.mjs +0 -3
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, input, viewChild, } from '@angular/core';
|
|
2
|
-
import { extend, injectBeforeRender, NgtArgs, omit, pick } from 'angular-three';
|
|
3
|
-
import { GridMaterial } from 'angular-three-soba/shaders';
|
|
4
|
-
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
5
|
-
import { BackSide, Mesh, Plane, PlaneGeometry, Vector3 } from 'three';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
const defaultOptions = {
|
|
8
|
-
planeArgs: [],
|
|
9
|
-
cellSize: 0.5,
|
|
10
|
-
cellThickness: 0.5,
|
|
11
|
-
cellColor: 'black',
|
|
12
|
-
sectionSize: 1,
|
|
13
|
-
sectionThickness: 1,
|
|
14
|
-
sectionColor: '#2080ff',
|
|
15
|
-
infiniteGrid: false,
|
|
16
|
-
followCamera: false,
|
|
17
|
-
fadeDistance: 100,
|
|
18
|
-
fadeStrength: 1,
|
|
19
|
-
fadeFrom: 1,
|
|
20
|
-
side: BackSide,
|
|
21
|
-
};
|
|
22
|
-
export class NgtsGrid {
|
|
23
|
-
constructor() {
|
|
24
|
-
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
25
|
-
this.parameters = omit(this.options, [
|
|
26
|
-
'planeArgs',
|
|
27
|
-
'cellSize',
|
|
28
|
-
'cellThickness',
|
|
29
|
-
'cellColor',
|
|
30
|
-
'sectionSize',
|
|
31
|
-
'sectionThickness',
|
|
32
|
-
'sectionColor',
|
|
33
|
-
'infiniteGrid',
|
|
34
|
-
'followCamera',
|
|
35
|
-
'fadeDistance',
|
|
36
|
-
'fadeStrength',
|
|
37
|
-
'fadeFrom',
|
|
38
|
-
'side',
|
|
39
|
-
]);
|
|
40
|
-
this.meshRef = viewChild.required('mesh');
|
|
41
|
-
this.plane = new Plane();
|
|
42
|
-
this.upVector = new Vector3(0, 1, 0);
|
|
43
|
-
this.zeroVector = new Vector3(0, 0, 0);
|
|
44
|
-
this.planeArgs = pick(this.options, 'planeArgs');
|
|
45
|
-
this.side = pick(this.options, 'side');
|
|
46
|
-
this.uniforms = computed(() => {
|
|
47
|
-
const { cellSize, sectionSize, cellColor, sectionColor, cellThickness, sectionThickness, fadeDistance, fadeStrength, fadeFrom, infiniteGrid, followCamera, } = this.options();
|
|
48
|
-
return {
|
|
49
|
-
cellSize,
|
|
50
|
-
sectionSize,
|
|
51
|
-
cellColor,
|
|
52
|
-
sectionColor,
|
|
53
|
-
cellThickness,
|
|
54
|
-
sectionThickness,
|
|
55
|
-
fadeDistance,
|
|
56
|
-
fadeStrength,
|
|
57
|
-
fadeFrom,
|
|
58
|
-
infiniteGrid,
|
|
59
|
-
followCamera,
|
|
60
|
-
};
|
|
61
|
-
});
|
|
62
|
-
extend({ Mesh, PlaneGeometry, GridMaterial });
|
|
63
|
-
injectBeforeRender(({ camera }) => {
|
|
64
|
-
const mesh = this.meshRef().nativeElement;
|
|
65
|
-
this.plane.setFromNormalAndCoplanarPoint(this.upVector, this.zeroVector).applyMatrix4(mesh.matrixWorld);
|
|
66
|
-
const gridMaterial = mesh.material;
|
|
67
|
-
const worldCamProjPosition = gridMaterial.uniforms['worldCamProjPosition'];
|
|
68
|
-
const worldPlanePosition = gridMaterial.uniforms['worldPlanePosition'];
|
|
69
|
-
this.plane.projectPoint(camera.position, worldCamProjPosition.value);
|
|
70
|
-
worldPlanePosition.value.set(0, 0, 0).applyMatrix4(mesh.matrixWorld);
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsGrid, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
74
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.11", type: NgtsGrid, isStandalone: true, selector: "ngts-grid", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "meshRef", first: true, predicate: ["mesh"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
75
|
-
<ngt-mesh #mesh [frustumCulled]="false" [parameters]="parameters()">
|
|
76
|
-
<ngt-plane-geometry *args="planeArgs()" />
|
|
77
|
-
<ngt-grid-material [transparent]="true" [side]="side()" [parameters]="uniforms()">
|
|
78
|
-
<ngt-value attach="extensions.derivatives" [rawValue]="true" />
|
|
79
|
-
</ngt-grid-material>
|
|
80
|
-
<ng-content />
|
|
81
|
-
</ngt-mesh>
|
|
82
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
83
|
-
}
|
|
84
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsGrid, decorators: [{
|
|
85
|
-
type: Component,
|
|
86
|
-
args: [{
|
|
87
|
-
selector: 'ngts-grid',
|
|
88
|
-
standalone: true,
|
|
89
|
-
template: `
|
|
90
|
-
<ngt-mesh #mesh [frustumCulled]="false" [parameters]="parameters()">
|
|
91
|
-
<ngt-plane-geometry *args="planeArgs()" />
|
|
92
|
-
<ngt-grid-material [transparent]="true" [side]="side()" [parameters]="uniforms()">
|
|
93
|
-
<ngt-value attach="extensions.derivatives" [rawValue]="true" />
|
|
94
|
-
</ngt-grid-material>
|
|
95
|
-
<ng-content />
|
|
96
|
-
</ngt-mesh>
|
|
97
|
-
`,
|
|
98
|
-
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
99
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
100
|
-
imports: [NgtArgs],
|
|
101
|
-
}]
|
|
102
|
-
}], ctorParameters: () => [] });
|
|
103
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9hYnN0cmFjdGlvbnMvc3JjL2xpYi9ncmlkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixzQkFBc0IsRUFFdEIsS0FBSyxFQUNMLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBVyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxZQUFZLEVBQXVCLE1BQU0sNEJBQTRCLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQTJCLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQzs7QUFFL0YsTUFBTSxjQUFjLEdBQ2dFO0lBQ25GLFNBQVMsRUFBRSxFQUFFO0lBQ2IsUUFBUSxFQUFFLEdBQUc7SUFDYixhQUFhLEVBQUUsR0FBRztJQUNsQixTQUFTLEVBQUUsT0FBTztJQUNsQixXQUFXLEVBQUUsQ0FBQztJQUNkLGdCQUFnQixFQUFFLENBQUM7SUFDbkIsWUFBWSxFQUFFLFNBQVM7SUFDdkIsWUFBWSxFQUFFLEtBQUs7SUFDbkIsWUFBWSxFQUFFLEtBQUs7SUFDbkIsWUFBWSxFQUFFLEdBQUc7SUFDakIsWUFBWSxFQUFFLENBQUM7SUFDZixRQUFRLEVBQUUsQ0FBQztJQUNYLElBQUksRUFBRSxRQUFRO0NBQ2QsQ0FBQztBQWtCRixNQUFNLE9BQU8sUUFBUTtJQXVEcEI7UUF0REEsWUFBTyxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMs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QU8sRUFBRSxDQUFDLE9BQU8sQ0FBQztpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRjb21wdXRlZCxcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0RWxlbWVudFJlZixcblx0aW5wdXQsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBleHRlbmQsIGluamVjdEJlZm9yZVJlbmRlciwgTmd0QXJncywgTmd0TWVzaCwgb21pdCwgcGljayB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgR3JpZE1hdGVyaWFsLCBHcmlkTWF0ZXJpYWxPcHRpb25zIH0gZnJvbSAnYW5ndWxhci10aHJlZS1zb2JhL3NoYWRlcnMnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgQmFja1NpZGUsIE1lc2gsIFBsYW5lLCBQbGFuZUdlb21ldHJ5LCBTaGFkZXJNYXRlcmlhbCwgVW5pZm9ybSwgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IFBhcnRpYWw8Tmd0TWVzaD4gJlxuXHRHcmlkTWF0ZXJpYWxPcHRpb25zICYgeyBwbGFuZUFyZ3M6IENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgUGxhbmVHZW9tZXRyeT4gfSA9IHtcblx0cGxhbmVBcmdzOiBbXSxcblx0Y2VsbFNpemU6IDAuNSxcblx0Y2VsbFRoaWNrbmVzczogMC41LFxuXHRjZWxsQ29sb3I6ICdibGFjaycsXG5cdHNlY3Rpb25TaXplOiAxLFxuXHRzZWN0aW9uVGhpY2tuZXNzOiAxLFxuXHRzZWN0aW9uQ29sb3I6ICcjMjA4MGZmJyxcblx0aW5maW5pdGVHcmlkOiBmYWxzZSxcblx0Zm9sbG93Q2FtZXJhOiBmYWxzZSxcblx0ZmFkZURpc3RhbmNlOiAxMDAsXG5cdGZhZGVTdHJlbmd0aDogMSxcblx0ZmFkZUZyb206IDEsXG5cdHNpZGU6IEJhY2tTaWRlLFxufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1ncmlkJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LW1lc2ggI21lc2ggW2ZydXN0dW1DdWxsZWRdPVwiZmFsc2VcIiBbcGFyYW1ldGVyc109XCJwYXJhbWV0ZXJzKClcIj5cblx0XHRcdDxuZ3QtcGxhbmUtZ2VvbWV0cnkgKmFyZ3M9XCJwbGFuZUFyZ3MoKVwiIC8+XG5cdFx0XHQ8bmd0LWdyaWQtbWF0ZXJpYWwgW3RyYW5zcGFyZW50XT1cInRydWVcIiBbc2lkZV09XCJzaWRlKClcIiBbcGFyYW1ldGVyc109XCJ1bmlmb3JtcygpXCI+XG5cdFx0XHRcdDxuZ3QtdmFsdWUgYXR0YWNoPVwiZXh0ZW5zaW9ucy5kZXJpdmF0aXZlc1wiIFtyYXdWYWx1ZV09XCJ0cnVlXCIgLz5cblx0XHRcdDwvbmd0LWdyaWQtbWF0ZXJpYWw+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmd0LW1lc2g+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cdGltcG9ydHM6IFtOZ3RBcmdzXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0dyaWQge1xuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cdHBhcmFtZXRlcnMgPSBvbWl0KHRoaXMub3B0aW9ucywgW1xuXHRcdCdwbGFuZUFyZ3MnLFxuXHRcdCdjZWxsU2l6ZScsXG5cdFx0J2NlbGxUaGlja25lc3MnLFxuXHRcdCdjZWxsQ29sb3InLFxuXHRcdCdzZWN0aW9uU2l6ZScsXG5cdFx0J3NlY3Rpb25UaGlja25lc3MnLFxuXHRcdCdzZWN0aW9uQ29sb3InLFxuXHRcdCdpbmZpbml0ZUdyaWQnLFxuXHRcdCdmb2xsb3dDYW1lcmEnLFxuXHRcdCdmYWRlRGlzdGFuY2UnLFxuXHRcdCdmYWRlU3RyZW5ndGgnLFxuXHRcdCdmYWRlRnJvbScsXG5cdFx0J3NpZGUnLFxuXHRdKTtcblxuXHRtZXNoUmVmID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8TWVzaD4+KCdtZXNoJyk7XG5cblx0cHJpdmF0ZSBwbGFuZSA9IG5ldyBQbGFuZSgpO1xuXHRwcml2YXRlIHVwVmVjdG9yID0gbmV3IFZlY3RvcjMoMCwgMSwgMCk7XG5cdHByaXZhdGUgemVyb1ZlY3RvciA9IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xuXG5cdHBsYW5lQXJncyA9IHBpY2sodGhpcy5vcHRpb25zLCAncGxhbmVBcmdzJyk7XG5cdHNpZGUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3NpZGUnKTtcblx0dW5pZm9ybXMgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0Y2VsbFNpemUsXG5cdFx0XHRzZWN0aW9uU2l6ZSxcblx0XHRcdGNlbGxDb2xvcixcblx0XHRcdHNlY3Rpb25Db2xvcixcblx0XHRcdGNlbGxUaGlja25lc3MsXG5cdFx0XHRzZWN0aW9uVGhpY2tuZXNzLFxuXHRcdFx0ZmFkZURpc3RhbmNlLFxuXHRcdFx0ZmFkZVN0cmVuZ3RoLFxuXHRcdFx0ZmFkZUZyb20sXG5cdFx0XHRpbmZpbml0ZUdyaWQsXG5cdFx0XHRmb2xsb3dDYW1lcmEsXG5cdFx0fSA9IHRoaXMub3B0aW9ucygpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRjZWxsU2l6ZSxcblx0XHRcdHNlY3Rpb25TaXplLFxuXHRcdFx0Y2VsbENvbG9yLFxuXHRcdFx0c2VjdGlvbkNvbG9yLFxuXHRcdFx0Y2VsbFRoaWNrbmVzcyxcblx0XHRcdHNlY3Rpb25UaGlja25lc3MsXG5cdFx0XHRmYWRlRGlzdGFuY2UsXG5cdFx0XHRmYWRlU3RyZW5ndGgsXG5cdFx0XHRmYWRlRnJvbSxcblx0XHRcdGluZmluaXRlR3JpZCxcblx0XHRcdGZvbGxvd0NhbWVyYSxcblx0XHR9O1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRleHRlbmQoeyBNZXNoLCBQbGFuZUdlb21ldHJ5LCBHcmlkTWF0ZXJpYWwgfSk7XG5cblx0XHRpbmplY3RCZWZvcmVSZW5kZXIoKHsgY2FtZXJhIH0pID0+IHtcblx0XHRcdGNvbnN0IG1lc2ggPSB0aGlzLm1lc2hSZWYoKS5uYXRpdmVFbGVtZW50O1xuXG5cdFx0XHR0aGlzLnBsYW5lLnNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KHRoaXMudXBWZWN0b3IsIHRoaXMuemVyb1ZlY3RvcikuYXBwbHlNYXRyaXg0KG1lc2gubWF0cml4V29ybGQpO1xuXG5cdFx0XHRjb25zdCBncmlkTWF0ZXJpYWwgPSBtZXNoLm1hdGVyaWFsIGFzIFNoYWRlck1hdGVyaWFsO1xuXHRcdFx0Y29uc3Qgd29ybGRDYW1Qcm9qUG9zaXRpb24gPSBncmlkTWF0ZXJpYWwudW5pZm9ybXNbJ3dvcmxkQ2FtUHJvalBvc2l0aW9uJ10gYXMgVW5pZm9ybTxWZWN0b3IzPjtcblx0XHRcdGNvbnN0IHdvcmxkUGxhbmVQb3NpdGlvbiA9IGdyaWRNYXRlcmlhbC51bmlmb3Jtc1snd29ybGRQbGFuZVBvc2l0aW9uJ10gYXMgVW5pZm9ybTxWZWN0b3IzPjtcblxuXHRcdFx0dGhpcy5wbGFuZS5wcm9qZWN0UG9pbnQoY2FtZXJhLnBvc2l0aW9uLCB3b3JsZENhbVByb2pQb3NpdGlvbi52YWx1ZSk7XG5cdFx0XHR3b3JsZFBsYW5lUG9zaXRpb24udmFsdWUuc2V0KDAsIDAsIDApLmFwcGx5TWF0cml4NChtZXNoLm1hdHJpeFdvcmxkKTtcblx0XHR9KTtcblx0fVxufVxuIl19
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, effect, input, viewChild, } from '@angular/core';
|
|
2
|
-
import { extend, getLocalState, injectBeforeRender, injectStore, resolveRef } from 'angular-three';
|
|
3
|
-
import { assertInjector } from 'ngxtension/assert-injector';
|
|
4
|
-
import { Object3D } from 'three';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export function injectHelper(object, helperConstructor, { injector, args = () => [], } = {}) {
|
|
7
|
-
return assertInjector(injectHelper, injector, () => {
|
|
8
|
-
const store = injectStore();
|
|
9
|
-
const scene = store.select('scene');
|
|
10
|
-
const helper = computed(() => {
|
|
11
|
-
const maybeObject3D = object();
|
|
12
|
-
if (!maybeObject3D)
|
|
13
|
-
return null;
|
|
14
|
-
const object3D = resolveRef(maybeObject3D);
|
|
15
|
-
if (!object3D)
|
|
16
|
-
return null;
|
|
17
|
-
const currentHelper = new (helperConstructor())(object3D, ...args());
|
|
18
|
-
currentHelper.traverse((child) => (child.raycast = () => null));
|
|
19
|
-
return currentHelper;
|
|
20
|
-
});
|
|
21
|
-
effect((onCleanup) => {
|
|
22
|
-
const currentHelper = helper();
|
|
23
|
-
if (!currentHelper)
|
|
24
|
-
return;
|
|
25
|
-
const _scene = scene();
|
|
26
|
-
_scene.add(currentHelper);
|
|
27
|
-
onCleanup(() => {
|
|
28
|
-
_scene.remove(currentHelper);
|
|
29
|
-
currentHelper.dispose?.();
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
injectBeforeRender(() => {
|
|
33
|
-
const currentHelper = helper();
|
|
34
|
-
if (currentHelper)
|
|
35
|
-
currentHelper.update();
|
|
36
|
-
});
|
|
37
|
-
return helper;
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
export class NgtsHelper {
|
|
41
|
-
constructor() {
|
|
42
|
-
this.type = input.required();
|
|
43
|
-
this.options = input([]);
|
|
44
|
-
this.helperRef = viewChild.required('helper');
|
|
45
|
-
this.parent = computed(() => {
|
|
46
|
-
const helper = this.helperRef().nativeElement;
|
|
47
|
-
if (!helper)
|
|
48
|
-
return;
|
|
49
|
-
const localState = getLocalState(helper);
|
|
50
|
-
if (!localState)
|
|
51
|
-
return;
|
|
52
|
-
return localState.parent();
|
|
53
|
-
});
|
|
54
|
-
this.helper = injectHelper(this.parent, this.type, { args: this.options });
|
|
55
|
-
extend({ Object3D });
|
|
56
|
-
}
|
|
57
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsHelper, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
58
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.11", type: NgtsHelper, isStandalone: true, selector: "ngts-helper", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "helperRef", first: true, predicate: ["helper"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
59
|
-
<ngt-object3D #helper />
|
|
60
|
-
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
61
|
-
}
|
|
62
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsHelper, decorators: [{
|
|
63
|
-
type: Component,
|
|
64
|
-
args: [{
|
|
65
|
-
standalone: true,
|
|
66
|
-
selector: 'ngts-helper',
|
|
67
|
-
template: `
|
|
68
|
-
<ngt-object3D #helper />
|
|
69
|
-
`,
|
|
70
|
-
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
71
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
72
|
-
}]
|
|
73
|
-
}], ctorParameters: () => [] });
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL2Fic3RyYWN0aW9ucy9zcmMvbGliL2hlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1Isc0JBQXNCLEVBQ3RCLE1BQU0sRUFHTixLQUFLLEVBQ0wsU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7O0FBSWpDLE1BQU0sVUFBVSxZQUFZLENBSTNCLE1BQWdFLEVBQ2hFLGlCQUFxQyxFQUNyQyxFQUNDLFFBQVEsRUFDUixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBZ0UsTUFDYSxFQUFFO0lBRTdGLE9BQU8sY0FBYyxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ2xELE1BQU0sS0FBSyxHQUFHLFdBQVcsRUFBRSxDQUFDO1FBQzVCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFcEMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUM1QixNQUFNLGFBQWEsR0FBRyxNQUFNLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsYUFBYTtnQkFBRSxPQUFPLElBQUksQ0FBQztZQUVoQyxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFFM0IsTUFBTSxhQUFhLEdBQW9CLEtBQUssaUJBQWlCLEVBQVUsRUFBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzdGLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2hFLE9BQU8sYUFBYSxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDcEIsTUFBTSxhQUFhLEdBQUcsTUFBTSxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLGFBQWE7Z0JBQUUsT0FBTztZQUUzQixNQUFNLE1BQU0sR0FBRyxLQUFLLEVBQUUsQ0FBQztZQUV2QixNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBRTFCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDN0IsYUFBYSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILGtCQUFrQixDQUFDLEdBQUcsRUFBRTtZQUN2QixNQUFNLGFBQWEsR0FBRyxNQUFNLEVBQUUsQ0FBQztZQUMvQixJQUFJLGFBQWE7Z0JBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLENBQUM7SUFDZixDQUFDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFXRCxNQUFNLE9BQU8sVUFBVTtJQWtCdEI7UUFqQkEsU0FBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQWdCLENBQUM7UUFDdEMsWUFBTyxHQUFHLEtBQUssQ0FDZCxFQUFnRSxDQUNoRSxDQUFDO1FBRUYsY0FBUyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQXVCLFFBQVEsQ0FBQyxDQUFDO1FBRXZELFdBQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzlCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxhQUFhLENBQUM7WUFDOUMsSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTztZQUNwQixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLFVBQVU7Z0JBQUUsT0FBTztZQUN4QixPQUFPLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILFdBQU0sR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBR3JFLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDdEIsQ0FBQzsrR0FwQlcsVUFBVTttR0FBVixVQUFVLDBiQU5aOztFQUVUOzs0RkFJVyxVQUFVO2tCQVR0QixTQUFTO21CQUFDO29CQUNWLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsYUFBYTtvQkFDdkIsUUFBUSxFQUFFOztFQUVUO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDL0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRjb21wdXRlZCxcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0ZWZmZWN0LFxuXHRFbGVtZW50UmVmLFxuXHRJbmplY3Rvcixcblx0aW5wdXQsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBleHRlbmQsIGdldExvY2FsU3RhdGUsIGluamVjdEJlZm9yZVJlbmRlciwgaW5qZWN0U3RvcmUsIHJlc29sdmVSZWYgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0IHsgT2JqZWN0M0QgfSBmcm9tICd0aHJlZSc7XG5cbnR5cGUgSGVscGVyQXJnczxUPiA9IFQgZXh0ZW5kcyBbaW5mZXIgXywgLi4uaW5mZXIgUl0gPyBSIDogbmV2ZXI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RIZWxwZXI8XG5cdFRDb25zdHJ1Y3RvciBleHRlbmRzIG5ldyAoLi4uYXJnczogYW55W10pID0+IE9iamVjdDNELFxuXHRUSGVscGVySW5zdGFuY2UgZXh0ZW5kcyBJbnN0YW5jZVR5cGU8VENvbnN0cnVjdG9yPiAmIHsgdXBkYXRlOiAoKSA9PiB2b2lkOyBkaXNwb3NlOiAoKSA9PiB2b2lkIH0sXG4+KFxuXHRvYmplY3Q6ICgpID0+IEVsZW1lbnRSZWY8T2JqZWN0M0Q+IHwgT2JqZWN0M0QgfCB1bmRlZmluZWQgfCBudWxsLFxuXHRoZWxwZXJDb25zdHJ1Y3RvcjogKCkgPT4gVENvbnN0cnVjdG9yLFxuXHR7XG5cdFx0aW5qZWN0b3IsXG5cdFx0YXJncyA9ICgpID0+IFtdIGFzIHVua25vd24gYXMgSGVscGVyQXJnczxDb25zdHJ1Y3RvclBhcmFtZXRlcnM8VENvbnN0cnVjdG9yPj4sXG5cdH06IHsgaW5qZWN0b3I/OiBJbmplY3RvcjsgYXJncz86ICgpID0+IEhlbHBlckFyZ3M8Q29uc3RydWN0b3JQYXJhbWV0ZXJzPFRDb25zdHJ1Y3Rvcj4+IH0gPSB7fSxcbikge1xuXHRyZXR1cm4gYXNzZXJ0SW5qZWN0b3IoaW5qZWN0SGVscGVyLCBpbmplY3RvciwgKCkgPT4ge1xuXHRcdGNvbnN0IHN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblx0XHRjb25zdCBzY2VuZSA9IHN0b3JlLnNlbGVjdCgnc2NlbmUnKTtcblxuXHRcdGNvbnN0IGhlbHBlciA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IG1heWJlT2JqZWN0M0QgPSBvYmplY3QoKTtcblx0XHRcdGlmICghbWF5YmVPYmplY3QzRCkgcmV0dXJuIG51bGw7XG5cblx0XHRcdGNvbnN0IG9iamVjdDNEID0gcmVzb2x2ZVJlZihtYXliZU9iamVjdDNEKTtcblx0XHRcdGlmICghb2JqZWN0M0QpIHJldHVybiBudWxsO1xuXG5cdFx0XHRjb25zdCBjdXJyZW50SGVscGVyOiBUSGVscGVySW5zdGFuY2UgPSBuZXcgKGhlbHBlckNvbnN0cnVjdG9yKCkgYXMgYW55KShvYmplY3QzRCwgLi4uYXJncygpKTtcblx0XHRcdGN1cnJlbnRIZWxwZXIudHJhdmVyc2UoKGNoaWxkKSA9PiAoY2hpbGQucmF5Y2FzdCA9ICgpID0+IG51bGwpKTtcblx0XHRcdHJldHVybiBjdXJyZW50SGVscGVyO1xuXHRcdH0pO1xuXG5cdFx0ZWZmZWN0KChvbkNsZWFudXApID0+IHtcblx0XHRcdGNvbnN0IGN1cnJlbnRIZWxwZXIgPSBoZWxwZXIoKTtcblx0XHRcdGlmICghY3VycmVudEhlbHBlcikgcmV0dXJuO1xuXG5cdFx0XHRjb25zdCBfc2NlbmUgPSBzY2VuZSgpO1xuXG5cdFx0XHRfc2NlbmUuYWRkKGN1cnJlbnRIZWxwZXIpO1xuXG5cdFx0XHRvbkNsZWFudXAoKCkgPT4ge1xuXHRcdFx0XHRfc2NlbmUucmVtb3ZlKGN1cnJlbnRIZWxwZXIpO1xuXHRcdFx0XHRjdXJyZW50SGVscGVyLmRpc3Bvc2U/LigpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRpbmplY3RCZWZvcmVSZW5kZXIoKCkgPT4ge1xuXHRcdFx0Y29uc3QgY3VycmVudEhlbHBlciA9IGhlbHBlcigpO1xuXHRcdFx0aWYgKGN1cnJlbnRIZWxwZXIpIGN1cnJlbnRIZWxwZXIudXBkYXRlKCk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gaGVscGVyO1xuXHR9KTtcbn1cblxuQENvbXBvbmVudCh7XG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHNlbGVjdG9yOiAnbmd0cy1oZWxwZXInLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3Qtb2JqZWN0M0QgI2hlbHBlciAvPlxuXHRgLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzSGVscGVyPFRDb25zdHJ1Y3RvciBleHRlbmRzIG5ldyAoLi4uYXJnczogYW55W10pID0+IE9iamVjdDNEPiB7XG5cdHR5cGUgPSBpbnB1dC5yZXF1aXJlZDxUQ29uc3RydWN0b3I+KCk7XG5cdG9wdGlvbnMgPSBpbnB1dDxIZWxwZXJBcmdzPENvbnN0cnVjdG9yUGFyYW1ldGVyczxUQ29uc3RydWN0b3I+Pj4oXG5cdFx0W10gYXMgdW5rbm93biBhcyBIZWxwZXJBcmdzPENvbnN0cnVjdG9yUGFyYW1ldGVyczxUQ29uc3RydWN0b3I+Pixcblx0KTtcblxuXHRoZWxwZXJSZWYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxPYmplY3QzRD4+KCdoZWxwZXInKTtcblxuXHRwcml2YXRlIHBhcmVudCA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBoZWxwZXIgPSB0aGlzLmhlbHBlclJlZigpLm5hdGl2ZUVsZW1lbnQ7XG5cdFx0aWYgKCFoZWxwZXIpIHJldHVybjtcblx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShoZWxwZXIpO1xuXHRcdGlmICghbG9jYWxTdGF0ZSkgcmV0dXJuO1xuXHRcdHJldHVybiBsb2NhbFN0YXRlLnBhcmVudCgpO1xuXHR9KTtcblxuXHRoZWxwZXIgPSBpbmplY3RIZWxwZXIodGhpcy5wYXJlbnQsIHRoaXMudHlwZSwgeyBhcmdzOiB0aGlzLm9wdGlvbnMgfSk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZXh0ZW5kKHsgT2JqZWN0M0QgfSk7XG5cdH1cbn1cbiJdfQ==
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, effect, input, viewChild, } from '@angular/core';
|
|
2
|
-
import { checkNeedsUpdate, injectStore, NgtArgs, omit, pick } from 'angular-three';
|
|
3
|
-
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
4
|
-
import { Color, Vector2, Vector3, Vector4 } from 'three';
|
|
5
|
-
import { Line2, LineGeometry, LineMaterial, LineSegments2, LineSegmentsGeometry, } from 'three-stdlib';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
const defaultOptions = {
|
|
8
|
-
lineWidth: 1,
|
|
9
|
-
segments: false,
|
|
10
|
-
color: 0xffffff,
|
|
11
|
-
};
|
|
12
|
-
export class NgtsLine {
|
|
13
|
-
// NOTE: use attached event to call computeLineDistances to ensure the geometry has been attached
|
|
14
|
-
onGeometryAttached({ parent }) {
|
|
15
|
-
parent.computeLineDistances();
|
|
16
|
-
}
|
|
17
|
-
constructor() {
|
|
18
|
-
this.points = input.required();
|
|
19
|
-
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
20
|
-
this.parameters = omit(this.options, ['color', 'vertexColors', 'lineWidth', 'segments', 'linewidth', 'dashed']);
|
|
21
|
-
this.lineRef = viewChild('line');
|
|
22
|
-
this.store = injectStore();
|
|
23
|
-
this.size = this.store.select('size');
|
|
24
|
-
this.segments = pick(this.options, 'segments');
|
|
25
|
-
this.vertexColors = pick(this.options, 'vertexColors');
|
|
26
|
-
this.dashed = pick(this.options, 'dashed');
|
|
27
|
-
this.color = pick(this.options, 'color');
|
|
28
|
-
this.vertex = computed(() => Boolean(this.vertexColors()));
|
|
29
|
-
this.resolution = computed(() => [this.size().width, this.size().height]);
|
|
30
|
-
this.lineWidth = pick(this.options, 'lineWidth');
|
|
31
|
-
this.linewidth = pick(this.options, 'linewidth');
|
|
32
|
-
this.line2 = computed(() => (this.segments() ? new LineSegments2() : new Line2()));
|
|
33
|
-
this.lineMaterial = new LineMaterial();
|
|
34
|
-
this.actualLineWidth = computed(() => this.linewidth() ?? this.lineWidth() ?? 1);
|
|
35
|
-
this.itemSize = computed(() => (this.vertexColors()?.[0]?.length === 4 ? 4 : 3));
|
|
36
|
-
this.lineGeometry = computed(() => {
|
|
37
|
-
const geom = this.segments() ? new LineSegmentsGeometry() : new LineGeometry();
|
|
38
|
-
const pValues = this.points().map((p) => {
|
|
39
|
-
const isArray = Array.isArray(p);
|
|
40
|
-
return p instanceof Vector3 || p instanceof Vector4
|
|
41
|
-
? [p.x, p.y, p.z]
|
|
42
|
-
: p instanceof Vector2
|
|
43
|
-
? [p.x, p.y, 0]
|
|
44
|
-
: isArray && p.length === 3
|
|
45
|
-
? [p[0], p[1], p[2]]
|
|
46
|
-
: isArray && p.length === 2
|
|
47
|
-
? [p[0], p[1], 0]
|
|
48
|
-
: p;
|
|
49
|
-
});
|
|
50
|
-
geom.setPositions(pValues.flat());
|
|
51
|
-
const vertexColors = this.vertexColors();
|
|
52
|
-
if (vertexColors) {
|
|
53
|
-
const cValues = vertexColors.map((c) => (c instanceof Color ? c.toArray() : c));
|
|
54
|
-
// @ts-expect-error - flat() isn't defined
|
|
55
|
-
geom.setColors(cValues.flat(), this.itemSize());
|
|
56
|
-
}
|
|
57
|
-
return geom;
|
|
58
|
-
});
|
|
59
|
-
effect(() => {
|
|
60
|
-
const [lineMaterial, dashed] = [this.lineMaterial, this.dashed()];
|
|
61
|
-
if (dashed) {
|
|
62
|
-
lineMaterial.defines['USE_DASH'] = '';
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
delete lineMaterial.defines['USE_DASH'];
|
|
66
|
-
}
|
|
67
|
-
checkNeedsUpdate(lineMaterial);
|
|
68
|
-
});
|
|
69
|
-
effect((onCleanup) => {
|
|
70
|
-
const [lineGeometry, lineMaterial] = [this.lineGeometry(), this.lineMaterial];
|
|
71
|
-
onCleanup(() => {
|
|
72
|
-
lineGeometry.dispose();
|
|
73
|
-
lineMaterial.dispose();
|
|
74
|
-
});
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsLine, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
78
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.11", type: NgtsLine, isStandalone: true, selector: "ngts-line", inputs: { points: { classPropertyName: "points", publicName: "points", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "lineRef", first: true, predicate: ["line"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
79
|
-
<ngt-primitive *args="[line2()]" #line [parameters]="parameters()">
|
|
80
|
-
<ngt-primitive *args="[lineGeometry()]" attach="geometry" (attached)="onGeometryAttached($any($event))" />
|
|
81
|
-
<ngt-primitive
|
|
82
|
-
*args="[lineMaterial]"
|
|
83
|
-
attach="material"
|
|
84
|
-
[color]="color()"
|
|
85
|
-
[vertexColors]="vertex()"
|
|
86
|
-
[resolution]="resolution()"
|
|
87
|
-
[linewidth]="actualLineWidth()"
|
|
88
|
-
[dashed]="dashed()"
|
|
89
|
-
[transparent]="itemSize() === 4"
|
|
90
|
-
[parameters]="parameters()"
|
|
91
|
-
/>
|
|
92
|
-
<ng-content />
|
|
93
|
-
</ngt-primitive>
|
|
94
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
95
|
-
}
|
|
96
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsLine, decorators: [{
|
|
97
|
-
type: Component,
|
|
98
|
-
args: [{
|
|
99
|
-
selector: 'ngts-line',
|
|
100
|
-
standalone: true,
|
|
101
|
-
template: `
|
|
102
|
-
<ngt-primitive *args="[line2()]" #line [parameters]="parameters()">
|
|
103
|
-
<ngt-primitive *args="[lineGeometry()]" attach="geometry" (attached)="onGeometryAttached($any($event))" />
|
|
104
|
-
<ngt-primitive
|
|
105
|
-
*args="[lineMaterial]"
|
|
106
|
-
attach="material"
|
|
107
|
-
[color]="color()"
|
|
108
|
-
[vertexColors]="vertex()"
|
|
109
|
-
[resolution]="resolution()"
|
|
110
|
-
[linewidth]="actualLineWidth()"
|
|
111
|
-
[dashed]="dashed()"
|
|
112
|
-
[transparent]="itemSize() === 4"
|
|
113
|
-
[parameters]="parameters()"
|
|
114
|
-
/>
|
|
115
|
-
<ng-content />
|
|
116
|
-
</ngt-primitive>
|
|
117
|
-
`,
|
|
118
|
-
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
119
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
120
|
-
imports: [NgtArgs],
|
|
121
|
-
}]
|
|
122
|
-
}], ctorParameters: () => [] });
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9hYnN0cmFjdGlvbnMvc3JjL2xpYi9saW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixzQkFBc0IsRUFDdEIsTUFBTSxFQUVOLEtBQUssRUFDTCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBa0IsT0FBTyxFQUFtQixJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsS0FBSyxFQUF1QixPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM5RSxPQUFPLEVBQ04sS0FBSyxFQUNMLFlBQVksRUFDWixZQUFZLEVBRVosYUFBYSxFQUNiLG9CQUFvQixHQUNwQixNQUFNLGNBQWMsQ0FBQzs7QUFrQnRCLE1BQU0sY0FBYyxHQUFvQjtJQUN2QyxTQUFTLEVBQUUsQ0FBQztJQUNaLFFBQVEsRUFBRSxLQUFLO0lBQ2YsS0FBSyxFQUFFLFFBQVE7Q0FDZixDQUFDO0FBMEJGLE1BQU0sT0FBTyxRQUFRO0lBdURwQixpR0FBaUc7SUFDakcsa0JBQWtCLENBQUMsRUFBRSxNQUFNLEVBQXVEO1FBQ2pGLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRDtRQTNEQSxXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBbUYsQ0FBQztRQUMzRyxZQUFPLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLGVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUUzRyxZQUFPLEdBQUcsU0FBUyxDQUFvQyxNQUFNLENBQUMsQ0FBQztRQUV2RCxVQUFLLEdBQUcsV0FBVyxFQUFFLENBQUM7UUFDdEIsU0FBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWpDLGFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMxQyxpQkFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRWhELFdBQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN0QyxVQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDcEMsV0FBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0RCxlQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUV2RSxjQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDNUMsY0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRXBELFVBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlFLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUV4QixvQkFBZSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzVFLGFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQTBCLEVBQUUsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWhILGlCQUFZLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUM1QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUMvRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3ZDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLE9BQU8sQ0FBQyxZQUFZLE9BQU8sSUFBSSxDQUFDLFlBQVksT0FBTztvQkFDbEQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2pCLENBQUMsQ0FBQyxDQUFDLFlBQVksT0FBTzt3QkFDckIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDZixDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQzs0QkFDMUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ3BCLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO2dDQUMxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQ0FDakIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNULENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUVsQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFekMsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDbEIsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hGLDBDQUEwQztnQkFDMUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDakQsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUM7UUFRRixNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsTUFBTSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDbEUsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWixZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN2QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ1AsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7WUFDRCxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ3BCLE1BQU0sQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzlFLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN2QixZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7K0dBOUVXLFFBQVE7bUdBQVIsUUFBUSwwYkFyQlY7Ozs7Ozs7Ozs7Ozs7Ozs7RUFnQlQsNERBR1MsT0FBTzs7NEZBRUwsUUFBUTtrQkF4QnBCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7RUFnQlQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7aUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdGVmZmVjdCxcblx0RWxlbWVudFJlZixcblx0aW5wdXQsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjaGVja05lZWRzVXBkYXRlLCBpbmplY3RTdG9yZSwgTmd0QWZ0ZXJBdHRhY2gsIE5ndEFyZ3MsIE5ndE9iamVjdDNETm9kZSwgb21pdCwgcGljayB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgQ29sb3IsIENvbG9yUmVwcmVzZW50YXRpb24sIFZlY3RvcjIsIFZlY3RvcjMsIFZlY3RvcjQgfSBmcm9tICd0aHJlZSc7XG5pbXBvcnQge1xuXHRMaW5lMixcblx0TGluZUdlb21ldHJ5LFxuXHRMaW5lTWF0ZXJpYWwsXG5cdExpbmVNYXRlcmlhbFBhcmFtZXRlcnMsXG5cdExpbmVTZWdtZW50czIsXG5cdExpbmVTZWdtZW50c0dlb21ldHJ5LFxufSBmcm9tICd0aHJlZS1zdGRsaWInO1xuXG5leHBvcnQgdHlwZSBOZ3RMaW5lMiA9IE5ndE9iamVjdDNETm9kZTxMaW5lMiwgdHlwZW9mIExpbmUyPjtcbmV4cG9ydCB0eXBlIE5ndExpbmVNYXRlcmlhbCA9IE5ndE9iamVjdDNETm9kZTxMaW5lTWF0ZXJpYWwsIFtMaW5lTWF0ZXJpYWxQYXJhbWV0ZXJzXT47XG5cbmV4cG9ydCB0eXBlIE5ndHNMaW5lT3B0aW9ucyA9IE9taXQ8TGluZU1hdGVyaWFsUGFyYW1ldGVycywgJ3ZlcnRleENvbG9ycycgfCAnY29sb3InPiAmXG5cdE9taXQ8UGFydGlhbDxOZ3RMaW5lMj4sICdfX25ndF9hcmdzX18nPiAmXG5cdE9taXQ8UGFydGlhbDxOZ3RMaW5lTWF0ZXJpYWw+LCAnY29sb3InIHwgJ3ZlcnRleENvbG9ycycgfCAnX19uZ3RfYXJnc19fJz4gJiB7XG5cdFx0LyoqIEFycmF5IG9mIGNvbG9ycywgWzAsIDAsIDBdICovXG5cdFx0dmVydGV4Q29sb3JzPzogQXJyYXk8Q29sb3JSZXByZXNlbnRhdGlvbiB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdPjtcblx0XHQvKiogTGluZSB3aWR0aCwgMSAqL1xuXHRcdGxpbmVXaWR0aDogbnVtYmVyO1xuXHRcdC8qKiBTZWdtZW50cywgZmFsc2UgKi9cblx0XHRzZWdtZW50czogYm9vbGVhbjtcblx0XHQvKiogQ29sb3IgKi9cblx0XHRjb2xvcj86IENvbG9yUmVwcmVzZW50YXRpb247XG5cdH07XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOZ3RzTGluZU9wdGlvbnMgPSB7XG5cdGxpbmVXaWR0aDogMSxcblx0c2VnbWVudHM6IGZhbHNlLFxuXHRjb2xvcjogMHhmZmZmZmYsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLWxpbmUnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtcHJpbWl0aXZlICphcmdzPVwiW2xpbmUyKCldXCIgI2xpbmUgW3BhcmFtZXRlcnNdPVwicGFyYW1ldGVycygpXCI+XG5cdFx0XHQ8bmd0LXByaW1pdGl2ZSAqYXJncz1cIltsaW5lR2VvbWV0cnkoKV1cIiBhdHRhY2g9XCJnZW9tZXRyeVwiIChhdHRhY2hlZCk9XCJvbkdlb21ldHJ5QXR0YWNoZWQoJGFueSgkZXZlbnQpKVwiIC8+XG5cdFx0XHQ8bmd0LXByaW1pdGl2ZVxuXHRcdFx0XHQqYXJncz1cIltsaW5lTWF0ZXJpYWxdXCJcblx0XHRcdFx0YXR0YWNoPVwibWF0ZXJpYWxcIlxuXHRcdFx0XHRbY29sb3JdPVwiY29sb3IoKVwiXG5cdFx0XHRcdFt2ZXJ0ZXhDb2xvcnNdPVwidmVydGV4KClcIlxuXHRcdFx0XHRbcmVzb2x1dGlvbl09XCJyZXNvbHV0aW9uKClcIlxuXHRcdFx0XHRbbGluZXdpZHRoXT1cImFjdHVhbExpbmVXaWR0aCgpXCJcblx0XHRcdFx0W2Rhc2hlZF09XCJkYXNoZWQoKVwiXG5cdFx0XHRcdFt0cmFuc3BhcmVudF09XCJpdGVtU2l6ZSgpID09PSA0XCJcblx0XHRcdFx0W3BhcmFtZXRlcnNdPVwicGFyYW1ldGVycygpXCJcblx0XHRcdC8+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmd0LXByaW1pdGl2ZT5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW05ndEFyZ3NdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzTGluZSB7XG5cdHBvaW50cyA9IGlucHV0LnJlcXVpcmVkPEFycmF5PFZlY3RvcjMgfCBWZWN0b3IyIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHwgW251bWJlciwgbnVtYmVyXSB8IG51bWJlcj4+KCk7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblx0cGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbJ2NvbG9yJywgJ3ZlcnRleENvbG9ycycsICdsaW5lV2lkdGgnLCAnc2VnbWVudHMnLCAnbGluZXdpZHRoJywgJ2Rhc2hlZCddKTtcblxuXHRsaW5lUmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8TGluZTIgfCBMaW5lU2VnbWVudHMyPj4oJ2xpbmUnKTtcblxuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblx0cHJpdmF0ZSBzaXplID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3NpemUnKTtcblxuXHRwcml2YXRlIHNlZ21lbnRzID0gcGljayh0aGlzLm9wdGlvbnMsICdzZWdtZW50cycpO1xuXHRwcml2YXRlIHZlcnRleENvbG9ycyA9IHBpY2sodGhpcy5vcHRpb25zLCAndmVydGV4Q29sb3JzJyk7XG5cblx0cHJvdGVjdGVkIGRhc2hlZCA9IHBpY2sodGhpcy5vcHRpb25zLCAnZGFzaGVkJyk7XG5cdHByb3RlY3RlZCBjb2xvciA9IHBpY2sodGhpcy5vcHRpb25zLCAnY29sb3InKTtcblx0cHJvdGVjdGVkIHZlcnRleCA9IGNvbXB1dGVkKCgpID0+IEJvb2xlYW4odGhpcy52ZXJ0ZXhDb2xvcnMoKSkpO1xuXHRwcm90ZWN0ZWQgcmVzb2x1dGlvbiA9IGNvbXB1dGVkKCgpID0+IFt0aGlzLnNpemUoKS53aWR0aCwgdGhpcy5zaXplKCkuaGVpZ2h0XSk7XG5cblx0cHJpdmF0ZSBsaW5lV2lkdGggPSBwaWNrKHRoaXMub3B0aW9ucywgJ2xpbmVXaWR0aCcpO1xuXHRwcml2YXRlIGxpbmV3aWR0aCA9IHBpY2sodGhpcy5vcHRpb25zLCAnbGluZXdpZHRoJyk7XG5cblx0bGluZTIgPSBjb21wdXRlZCgoKSA9PiAodGhpcy5zZWdtZW50cygpID8gbmV3IExpbmVTZWdtZW50czIoKSA6IG5ldyBMaW5lMigpKSk7XG5cdGxpbmVNYXRlcmlhbCA9IG5ldyBMaW5lTWF0ZXJpYWwoKTtcblxuXHRwcm90ZWN0ZWQgYWN0dWFsTGluZVdpZHRoID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5saW5ld2lkdGgoKSA/PyB0aGlzLmxpbmVXaWR0aCgpID8/IDEpO1xuXHRwcm90ZWN0ZWQgaXRlbVNpemUgPSBjb21wdXRlZCgoKSA9PiAoKHRoaXMudmVydGV4Q29sb3JzKCk/LlswXSBhcyBudW1iZXJbXSB8IHVuZGVmaW5lZCk/Lmxlbmd0aCA9PT0gNCA/IDQgOiAzKSk7XG5cblx0bGluZUdlb21ldHJ5ID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IGdlb20gPSB0aGlzLnNlZ21lbnRzKCkgPyBuZXcgTGluZVNlZ21lbnRzR2VvbWV0cnkoKSA6IG5ldyBMaW5lR2VvbWV0cnkoKTtcblx0XHRjb25zdCBwVmFsdWVzID0gdGhpcy5wb2ludHMoKS5tYXAoKHApID0+IHtcblx0XHRcdGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHApO1xuXHRcdFx0cmV0dXJuIHAgaW5zdGFuY2VvZiBWZWN0b3IzIHx8IHAgaW5zdGFuY2VvZiBWZWN0b3I0XG5cdFx0XHRcdD8gW3AueCwgcC55LCBwLnpdXG5cdFx0XHRcdDogcCBpbnN0YW5jZW9mIFZlY3RvcjJcblx0XHRcdFx0XHQ/IFtwLngsIHAueSwgMF1cblx0XHRcdFx0XHQ6IGlzQXJyYXkgJiYgcC5sZW5ndGggPT09IDNcblx0XHRcdFx0XHRcdD8gW3BbMF0sIHBbMV0sIHBbMl1dXG5cdFx0XHRcdFx0XHQ6IGlzQXJyYXkgJiYgcC5sZW5ndGggPT09IDJcblx0XHRcdFx0XHRcdFx0PyBbcFswXSwgcFsxXSwgMF1cblx0XHRcdFx0XHRcdFx0OiBwO1xuXHRcdH0pO1xuXG5cdFx0Z2VvbS5zZXRQb3NpdGlvbnMocFZhbHVlcy5mbGF0KCkpO1xuXG5cdFx0Y29uc3QgdmVydGV4Q29sb3JzID0gdGhpcy52ZXJ0ZXhDb2xvcnMoKTtcblxuXHRcdGlmICh2ZXJ0ZXhDb2xvcnMpIHtcblx0XHRcdGNvbnN0IGNWYWx1ZXMgPSB2ZXJ0ZXhDb2xvcnMubWFwKChjKSA9PiAoYyBpbnN0YW5jZW9mIENvbG9yID8gYy50b0FycmF5KCkgOiBjKSk7XG5cdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIC0gZmxhdCgpIGlzbid0IGRlZmluZWRcblx0XHRcdGdlb20uc2V0Q29sb3JzKGNWYWx1ZXMuZmxhdCgpLCB0aGlzLml0ZW1TaXplKCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBnZW9tO1xuXHR9KTtcblxuXHQvLyBOT1RFOiB1c2UgYXR0YWNoZWQgZXZlbnQgdG8gY2FsbCBjb21wdXRlTGluZURpc3RhbmNlcyB0byBlbnN1cmUgdGhlIGdlb21ldHJ5IGhhcyBiZWVuIGF0dGFjaGVkXG5cdG9uR2VvbWV0cnlBdHRhY2hlZCh7IHBhcmVudCB9OiBOZ3RBZnRlckF0dGFjaDxMaW5lR2VvbWV0cnksIExpbmUyIHwgTGluZVNlZ21lbnRzMj4pIHtcblx0XHRwYXJlbnQuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTtcblx0fVxuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBbbGluZU1hdGVyaWFsLCBkYXNoZWRdID0gW3RoaXMubGluZU1hdGVyaWFsLCB0aGlzLmRhc2hlZCgpXTtcblx0XHRcdGlmIChkYXNoZWQpIHtcblx0XHRcdFx0bGluZU1hdGVyaWFsLmRlZmluZXNbJ1VTRV9EQVNIJ10gPSAnJztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbGV0ZSBsaW5lTWF0ZXJpYWwuZGVmaW5lc1snVVNFX0RBU0gnXTtcblx0XHRcdH1cblx0XHRcdGNoZWNrTmVlZHNVcGRhdGUobGluZU1hdGVyaWFsKTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgob25DbGVhbnVwKSA9PiB7XG5cdFx0XHRjb25zdCBbbGluZUdlb21ldHJ5LCBsaW5lTWF0ZXJpYWxdID0gW3RoaXMubGluZUdlb21ldHJ5KCksIHRoaXMubGluZU1hdGVyaWFsXTtcblx0XHRcdG9uQ2xlYW51cCgoKSA9PiB7XG5cdFx0XHRcdGxpbmVHZW9tZXRyeS5kaXNwb3NlKCk7XG5cdFx0XHRcdGxpbmVNYXRlcmlhbC5kaXNwb3NlKCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxufVxuIl19
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, input, viewChild, } from '@angular/core';
|
|
2
|
-
import { extend, NgtArgs } from 'angular-three';
|
|
3
|
-
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
4
|
-
import { ExtrudeGeometry, Shape, Vector2 } from 'three';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
const defaultOptions = {
|
|
7
|
-
height: 1,
|
|
8
|
-
bevelEnabled: false,
|
|
9
|
-
};
|
|
10
|
-
export class NgtsPrismGeometry {
|
|
11
|
-
constructor() {
|
|
12
|
-
this.attach = input('geometry');
|
|
13
|
-
this.vertices = input.required();
|
|
14
|
-
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
15
|
-
this.parameters = computed(() => ({ ...this.options(), depth: this.options().height }));
|
|
16
|
-
this.shape = computed(() => {
|
|
17
|
-
const vertices = this.vertices();
|
|
18
|
-
const interpolatedVertices = vertices.map((v) => (v instanceof Vector2 ? v : new Vector2(...v)));
|
|
19
|
-
return new Shape(interpolatedVertices);
|
|
20
|
-
});
|
|
21
|
-
this.geometryRef = viewChild('geometry');
|
|
22
|
-
extend({ ExtrudeGeometry });
|
|
23
|
-
}
|
|
24
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsPrismGeometry, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.11", type: NgtsPrismGeometry, isStandalone: true, selector: "ngts-prism-geometry", inputs: { attach: { classPropertyName: "attach", publicName: "attach", isSignal: true, isRequired: false, transformFunction: null }, vertices: { classPropertyName: "vertices", publicName: "vertices", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "geometryRef", first: true, predicate: ["geometry"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
26
|
-
<ngt-extrude-geometry #geometry *args="[shape(), parameters()]" [attach]="attach()">
|
|
27
|
-
<ng-content />
|
|
28
|
-
</ngt-extrude-geometry>
|
|
29
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
30
|
-
}
|
|
31
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsPrismGeometry, decorators: [{
|
|
32
|
-
type: Component,
|
|
33
|
-
args: [{
|
|
34
|
-
selector: 'ngts-prism-geometry',
|
|
35
|
-
standalone: true,
|
|
36
|
-
template: `
|
|
37
|
-
<ngt-extrude-geometry #geometry *args="[shape(), parameters()]" [attach]="attach()">
|
|
38
|
-
<ng-content />
|
|
39
|
-
</ngt-extrude-geometry>
|
|
40
|
-
`,
|
|
41
|
-
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
42
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
43
|
-
imports: [NgtArgs],
|
|
44
|
-
}]
|
|
45
|
-
}], ctorParameters: () => [] });
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpc20tZ2VvbWV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvYWJzdHJhY3Rpb25zL3NyYy9saWIvcHJpc20tZ2VvbWV0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLHNCQUFzQixFQUV0QixLQUFLLEVBQ0wsU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBMEIsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQzs7QUFPaEYsTUFBTSxjQUFjLEdBQTZCO0lBQ2hELE1BQU0sRUFBRSxDQUFDO0lBQ1QsWUFBWSxFQUFFLEtBQUs7Q0FDbkIsQ0FBQztBQWNGLE1BQU0sT0FBTyxpQkFBaUI7SUFjN0I7UUFiQSxXQUFNLEdBQUcsS0FBSyxDQUFnQixVQUFVLENBQUMsQ0FBQztRQUMxQyxhQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBcUMsQ0FBQztRQUMvRCxZQUFPLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTVFLGVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25GLFVBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3JCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqQyxNQUFNLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRyxPQUFPLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxnQkFBVyxHQUFHLFNBQVMsQ0FBOEIsVUFBVSxDQUFDLENBQUM7UUFHaEUsTUFBTSxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztJQUM3QixDQUFDOytHQWhCVyxpQkFBaUI7bUdBQWpCLGlCQUFpQiw2a0JBVG5COzs7O0VBSVQsNERBR1MsT0FBTzs7NEZBRUwsaUJBQWlCO2tCQVo3QixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7RUFJVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQztpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRjb21wdXRlZCxcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0RWxlbWVudFJlZixcblx0aW5wdXQsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBleHRlbmQsIE5ndEFyZ3MsIE5ndEF0dGFjaGFibGUgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IG1lcmdlSW5wdXRzIH0gZnJvbSAnbmd4dGVuc2lvbi9pbmplY3QtaW5wdXRzJztcbmltcG9ydCB7IEV4dHJ1ZGVHZW9tZXRyeSwgRXh0cnVkZUdlb21ldHJ5T3B0aW9ucywgU2hhcGUsIFZlY3RvcjIgfSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c1ByaXNtR2VvbWV0cnlPcHRpb25zIGV4dGVuZHMgT21pdDxFeHRydWRlR2VvbWV0cnlPcHRpb25zLCAnZGVwdGgnPiB7XG5cdC8qKiBIZWlnaHQgKi9cblx0aGVpZ2h0OiBudW1iZXI7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOZ3RzUHJpc21HZW9tZXRyeU9wdGlvbnMgPSB7XG5cdGhlaWdodDogMSxcblx0YmV2ZWxFbmFibGVkOiBmYWxzZSxcbn07XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtcHJpc20tZ2VvbWV0cnknLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtZXh0cnVkZS1nZW9tZXRyeSAjZ2VvbWV0cnkgKmFyZ3M9XCJbc2hhcGUoKSwgcGFyYW1ldGVycygpXVwiIFthdHRhY2hdPVwiYXR0YWNoKClcIj5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3QtZXh0cnVkZS1nZW9tZXRyeT5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW05ndEFyZ3NdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzUHJpc21HZW9tZXRyeSB7XG5cdGF0dGFjaCA9IGlucHV0PE5ndEF0dGFjaGFibGU+KCdnZW9tZXRyeScpO1xuXHR2ZXJ0aWNlcyA9IGlucHV0LnJlcXVpcmVkPEFycmF5PFZlY3RvcjIgfCBbbnVtYmVyLCBudW1iZXJdPj4oKTtcblx0b3B0aW9ucyA9IGlucHV0KGRlZmF1bHRPcHRpb25zLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMoZGVmYXVsdE9wdGlvbnMpIH0pO1xuXG5cdHBhcmFtZXRlcnMgPSBjb21wdXRlZCgoKSA9PiAoeyAuLi50aGlzLm9wdGlvbnMoKSwgZGVwdGg6IHRoaXMub3B0aW9ucygpLmhlaWdodCB9KSk7XG5cdHNoYXBlID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlcygpO1xuXHRcdGNvbnN0IGludGVycG9sYXRlZFZlcnRpY2VzID0gdmVydGljZXMubWFwKCh2KSA9PiAodiBpbnN0YW5jZW9mIFZlY3RvcjIgPyB2IDogbmV3IFZlY3RvcjIoLi4udikpKTtcblx0XHRyZXR1cm4gbmV3IFNoYXBlKGludGVycG9sYXRlZFZlcnRpY2VzKTtcblx0fSk7XG5cblx0Z2VvbWV0cnlSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxFeHRydWRlR2VvbWV0cnk+PignZ2VvbWV0cnknKTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRleHRlbmQoeyBFeHRydWRlR2VvbWV0cnkgfSk7XG5cdH1cbn1cbiJdfQ==
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, computed, input, viewChild } from '@angular/core';
|
|
2
|
-
import { omit, pick } from 'angular-three';
|
|
3
|
-
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
4
|
-
import { QuadraticBezierCurve3, Vector3 } from 'three';
|
|
5
|
-
import { NgtsLine } from './line';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
const defaultOptions = {
|
|
8
|
-
lineWidth: 1,
|
|
9
|
-
segments: 20,
|
|
10
|
-
};
|
|
11
|
-
export class NgtsQuadraticBezierLine {
|
|
12
|
-
constructor() {
|
|
13
|
-
this.start = input([0, 0, 0]);
|
|
14
|
-
this.end = input([0, 0, 0]);
|
|
15
|
-
this.mid = input();
|
|
16
|
-
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
17
|
-
this.parameters = omit(this.options, ['segments']);
|
|
18
|
-
this.segments = pick(this.options, 'segments');
|
|
19
|
-
this.line = viewChild.required(NgtsLine);
|
|
20
|
-
this.points = computed(() => this.getPoints(this.start(), this.end(), this.mid(), this.segments()));
|
|
21
|
-
this.curve = new QuadraticBezierCurve3();
|
|
22
|
-
}
|
|
23
|
-
setPoints(start, end, mid) {
|
|
24
|
-
const points = this.getPoints(start, end, mid);
|
|
25
|
-
const geometry = this.line().lineGeometry();
|
|
26
|
-
if (geometry)
|
|
27
|
-
geometry.setPositions(points.map((p) => p.toArray()).flat());
|
|
28
|
-
}
|
|
29
|
-
getPoints(start, end, mid, segments = 20) {
|
|
30
|
-
if (start instanceof Vector3)
|
|
31
|
-
this.curve.v0.copy(start);
|
|
32
|
-
else
|
|
33
|
-
this.curve.v0.set(...start);
|
|
34
|
-
if (end instanceof Vector3)
|
|
35
|
-
this.curve.v2.copy(end);
|
|
36
|
-
else
|
|
37
|
-
this.curve.v2.set(...end);
|
|
38
|
-
if (mid instanceof Vector3) {
|
|
39
|
-
this.curve.v1.copy(mid);
|
|
40
|
-
}
|
|
41
|
-
else if (Array.isArray(mid)) {
|
|
42
|
-
this.curve.v1.set(...mid);
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
this.curve.v1.copy(this.curve.v0
|
|
46
|
-
.clone()
|
|
47
|
-
.add(this.curve.v2.clone().sub(this.curve.v0))
|
|
48
|
-
.add(new Vector3(0, this.curve.v0.y - this.curve.v2.y, 0)));
|
|
49
|
-
}
|
|
50
|
-
return this.curve.getPoints(segments);
|
|
51
|
-
}
|
|
52
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsQuadraticBezierLine, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
53
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.11", type: NgtsQuadraticBezierLine, isStandalone: true, selector: "ngts-quadratic-bezier-line", inputs: { start: { classPropertyName: "start", publicName: "start", isSignal: true, isRequired: false, transformFunction: null }, end: { classPropertyName: "end", publicName: "end", isSignal: true, isRequired: false, transformFunction: null }, mid: { classPropertyName: "mid", publicName: "mid", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "line", first: true, predicate: NgtsLine, descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
54
|
-
<ngts-line [points]="points()" [options]="parameters()">
|
|
55
|
-
<ng-content />
|
|
56
|
-
</ngts-line>
|
|
57
|
-
`, isInline: true, dependencies: [{ kind: "component", type: NgtsLine, selector: "ngts-line", inputs: ["points", "options"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
58
|
-
}
|
|
59
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsQuadraticBezierLine, decorators: [{
|
|
60
|
-
type: Component,
|
|
61
|
-
args: [{
|
|
62
|
-
selector: 'ngts-quadratic-bezier-line',
|
|
63
|
-
standalone: true,
|
|
64
|
-
template: `
|
|
65
|
-
<ngts-line [points]="points()" [options]="parameters()">
|
|
66
|
-
<ng-content />
|
|
67
|
-
</ngts-line>
|
|
68
|
-
`,
|
|
69
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
70
|
-
imports: [NgtsLine],
|
|
71
|
-
}]
|
|
72
|
-
}] });
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhZHJhdGljLWJlemllci1saW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL2Fic3RyYWN0aW9ucy9zcmMvbGliL3F1YWRyYXRpYy1iZXppZXItbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxRQUFRLEVBQW1CLE1BQU0sUUFBUSxDQUFDOztBQU1uRCxNQUFNLGNBQWMsR0FBbUM7SUFDdEQsU0FBUyxFQUFFLENBQUM7SUFDWixRQUFRLEVBQUUsRUFBRTtDQUNaLENBQUM7QUFhRixNQUFNLE9BQU8sdUJBQXVCO0lBWHBDO1FBWUMsVUFBSyxHQUFHLEtBQUssQ0FBcUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0QsUUFBRyxHQUFHLEtBQUssQ0FBcUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0QsUUFBRyxHQUFHLEtBQUssRUFBc0MsQ0FBQztRQUNsRCxZQUFPLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLGVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFdEMsYUFBUSxHQUFHLElBQUks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dEMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7OztFQUlUO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGlucHV0LCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG9taXQsIHBpY2sgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IG1lcmdlSW5wdXRzIH0gZnJvbSAnbmd4dGVuc2lvbi9pbmplY3QtaW5wdXRzJztcbmltcG9ydCB7IFF1YWRyYXRpY0JlemllckN1cnZlMywgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE5ndHNMaW5lLCBOZ3RzTGluZU9wdGlvbnMgfSBmcm9tICcuL2xpbmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNRdWFkcmF0aWNCZXppZXJMaW5lT3B0aW9ucyBleHRlbmRzIE9taXQ8Tmd0c0xpbmVPcHRpb25zLCAnc2VnbWVudHMnPiB7XG5cdHNlZ21lbnRzPzogbnVtYmVyO1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c1F1YWRyYXRpY0JlemllckxpbmVPcHRpb25zID0ge1xuXHRsaW5lV2lkdGg6IDEsXG5cdHNlZ21lbnRzOiAyMCxcbn07XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtcXVhZHJhdGljLWJlemllci1saW5lJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0cy1saW5lIFtwb2ludHNdPVwicG9pbnRzKClcIiBbb3B0aW9uc109XCJwYXJhbWV0ZXJzKClcIj5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3RzLWxpbmU+XG5cdGAsXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuXHRpbXBvcnRzOiBbTmd0c0xpbmVdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzUXVhZHJhdGljQmV6aWVyTGluZSB7XG5cdHN0YXJ0ID0gaW5wdXQ8VmVjdG9yMyB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXT4oWzAsIDAsIDBdKTtcblx0ZW5kID0gaW5wdXQ8VmVjdG9yMyB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXT4oWzAsIDAsIDBdKTtcblx0bWlkID0gaW5wdXQ8VmVjdG9yMyB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXT4oKTtcblx0b3B0aW9ucyA9IGlucHV0KGRlZmF1bHRPcHRpb25zLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMoZGVmYXVsdE9wdGlvbnMpIH0pO1xuXHRwYXJhbWV0ZXJzID0gb21pdCh0aGlzLm9wdGlvbnMsIFsnc2VnbWVudHMnXSk7XG5cblx0cHJpdmF0ZSBzZWdtZW50cyA9IHBpY2sodGhpcy5vcHRpb25zLCAnc2VnbWVudHMnKTtcblxuXHRsaW5lID0gdmlld0NoaWxkLnJlcXVpcmVkKE5ndHNMaW5lKTtcblxuXHRwb2ludHMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmdldFBvaW50cyh0aGlzLnN0YXJ0KCksIHRoaXMuZW5kKCksIHRoaXMubWlkKCksIHRoaXMuc2VnbWVudHMoKSkpO1xuXG5cdHByaXZhdGUgY3VydmUgPSBuZXcgUXVhZHJhdGljQmV6aWVyQ3VydmUzKCk7XG5cblx0c2V0UG9pbnRzKFxuXHRcdHN0YXJ0OiBWZWN0b3IzIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuXHRcdGVuZDogVmVjdG9yMyB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcblx0XHRtaWQ6IFZlY3RvcjMgfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG5cdCkge1xuXHRcdGNvbnN0IHBvaW50cyA9IHRoaXMuZ2V0UG9pbnRzKHN0YXJ0LCBlbmQsIG1pZCk7XG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSB0aGlzLmxpbmUoKS5saW5lR2VvbWV0cnkoKTtcblx0XHRpZiAoZ2VvbWV0cnkpIGdlb21ldHJ5LnNldFBvc2l0aW9ucyhwb2ludHMubWFwKChwKSA9PiBwLnRvQXJyYXkoKSkuZmxhdCgpKTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0UG9pbnRzKFxuXHRcdHN0YXJ0OiBWZWN0b3IzIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuXHRcdGVuZDogVmVjdG9yMyB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcblx0XHRtaWQ/OiBWZWN0b3IzIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuXHRcdHNlZ21lbnRzID0gMjAsXG5cdCkge1xuXHRcdGlmIChzdGFydCBpbnN0YW5jZW9mIFZlY3RvcjMpIHRoaXMuY3VydmUudjAuY29weShzdGFydCk7XG5cdFx0ZWxzZSB0aGlzLmN1cnZlLnYwLnNldCguLi4oc3RhcnQgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdKSk7XG5cdFx0aWYgKGVuZCBpbnN0YW5jZW9mIFZlY3RvcjMpIHRoaXMuY3VydmUudjIuY29weShlbmQpO1xuXHRcdGVsc2UgdGhpcy5jdXJ2ZS52Mi5zZXQoLi4uKGVuZCBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pKTtcblx0XHRpZiAobWlkIGluc3RhbmNlb2YgVmVjdG9yMykge1xuXHRcdFx0dGhpcy5jdXJ2ZS52MS5jb3B5KG1pZCk7XG5cdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG1pZCkpIHtcblx0XHRcdHRoaXMuY3VydmUudjEuc2V0KC4uLihtaWQgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuY3VydmUudjEuY29weShcblx0XHRcdFx0dGhpcy5jdXJ2ZS52MFxuXHRcdFx0XHRcdC5jbG9uZSgpXG5cdFx0XHRcdFx0LmFkZCh0aGlzLmN1cnZlLnYyLmNsb25lKCkuc3ViKHRoaXMuY3VydmUudjApKVxuXHRcdFx0XHRcdC5hZGQobmV3IFZlY3RvcjMoMCwgdGhpcy5jdXJ2ZS52MC55IC0gdGhpcy5jdXJ2ZS52Mi55LCAwKSksXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5jdXJ2ZS5nZXRQb2ludHMoc2VnbWVudHMpO1xuXHR9XG59XG4iXX0=
|