angular-three-soba 2.14.0 → 3.1.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
|
@@ -32,7 +32,7 @@ export declare class NgtsCaustics {
|
|
|
32
32
|
protected readonly OneFactor: 201;
|
|
33
33
|
protected readonly SrcAlphaFactor: 204;
|
|
34
34
|
options: import("@angular/core").InputSignalWithTransform<NgtsCausticsOptions, "" | Partial<NgtsCausticsOptions>>;
|
|
35
|
-
parameters: import("@angular/core").Signal<Omit<NgtsCausticsOptions, "
|
|
35
|
+
parameters: import("@angular/core").Signal<Omit<NgtsCausticsOptions, "frames" | "color" | "resolution" | "debug" | "causticsOnly" | "backside" | "ior" | "backsideIOR" | "worldRadius" | "intensity" | "lightSource">>;
|
|
36
36
|
debug: import("@angular/core").Signal<boolean>;
|
|
37
37
|
color: import("@angular/core").Signal<ColorRepresentation>;
|
|
38
38
|
private resolution;
|
package/staging/lib/center.d.ts
CHANGED
|
@@ -293,7 +293,7 @@ export declare class NgtsCenter {
|
|
|
293
293
|
layers: import("angular-three").NgtLayers;
|
|
294
294
|
dispose: (() => void) | null;
|
|
295
295
|
raycast: Object3D["raycast"] | null;
|
|
296
|
-
}> & NgtsCenterOptions, "
|
|
296
|
+
}> & NgtsCenterOptions, "disable" | "precise" | "cacheKey" | "top" | "right" | "bottom" | "left" | "front" | "back" | "disableX" | "disableY" | "disableZ">>;
|
|
297
297
|
centered: import("@angular/core").OutputEmitterRef<NgtsCenterState>;
|
|
298
298
|
groupRef: import("@angular/core").Signal<ElementRef<Group<import("three").Object3DEventMap>>>;
|
|
299
299
|
private outerRef;
|
|
@@ -383,7 +383,7 @@ export declare class NgtsCenter {
|
|
|
383
383
|
layers: import("angular-three").NgtLayers;
|
|
384
384
|
dispose: (() => void) | null;
|
|
385
385
|
raycast: Object3D["raycast"] | null;
|
|
386
|
-
}> & NgtsCenterOptions, "
|
|
386
|
+
}> & NgtsCenterOptions, "disable" | "precise" | "cacheKey" | "top" | "right" | "bottom" | "left" | "front" | "back" | "disableX" | "disableY" | "disableZ">>;
|
|
387
387
|
constructor();
|
|
388
388
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsCenter, never>;
|
|
389
389
|
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsCenter, "ngts-center", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; }, { "centered": "centered"; }, never, ["*"], true, never>;
|
|
@@ -19,7 +19,7 @@ export interface NgtsContactShadowsOptions extends Partial<Omit<NgtGroup, 'scale
|
|
|
19
19
|
export declare class NgtsContactShadows {
|
|
20
20
|
Math: Math;
|
|
21
21
|
options: import("@angular/core").InputSignalWithTransform<NgtsContactShadowsOptions, "" | Partial<NgtsContactShadowsOptions>>;
|
|
22
|
-
parameters: import("@angular/core").Signal<Omit<NgtsContactShadowsOptions, "scale" | "renderOrder" | "
|
|
22
|
+
parameters: import("@angular/core").Signal<Omit<NgtsContactShadowsOptions, "scale" | "renderOrder" | "frames" | "opacity" | "color" | "resolution" | "depthWrite" | "near" | "far" | "width" | "height" | "blur" | "smooth">>;
|
|
23
23
|
contactShadowsRef: import("@angular/core").Signal<ElementRef<Group<import("three").Object3DEventMap>>>;
|
|
24
24
|
shadowsCameraRef: import("@angular/core").Signal<ElementRef<OrthographicCamera> | undefined>;
|
|
25
25
|
private store;
|
|
@@ -293,7 +293,7 @@ export declare class NgtsLightformer {
|
|
|
293
293
|
layers: import("angular-three").NgtLayers;
|
|
294
294
|
dispose: (() => void) | null;
|
|
295
295
|
raycast: import("three").Object3D["raycast"] | null;
|
|
296
|
-
}, "scale">> & NgtsLightformerOptions, "scale" | "
|
|
296
|
+
}, "scale">> & NgtsLightformerOptions, "scale" | "color" | "toneMapped" | "map" | "target" | "intensity" | "form">>;
|
|
297
297
|
private intensity;
|
|
298
298
|
private color;
|
|
299
299
|
private target;
|
package/staging/lib/mask.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ export interface NgtsMaskOptions extends Partial<NgtMesh> {
|
|
|
9
9
|
export declare class NgtsMask {
|
|
10
10
|
id: import("@angular/core").InputSignalWithTransform<number, unknown>;
|
|
11
11
|
options: import("@angular/core").InputSignalWithTransform<NgtsMaskOptions, "" | Partial<NgtsMaskOptions>>;
|
|
12
|
-
parameters: import("@angular/core").Signal<Omit<NgtsMaskOptions, "
|
|
12
|
+
parameters: import("@angular/core").Signal<Omit<NgtsMaskOptions, "colorWrite" | "depthWrite">>;
|
|
13
13
|
meshRef: import("@angular/core").Signal<ElementRef<Mesh<BufferGeometry<import("three").NormalBufferAttributes>, Material, import("three").Object3DEventMap>>>;
|
|
14
14
|
private colorWrite;
|
|
15
15
|
private depthWrite;
|
|
@@ -45,7 +45,7 @@ export declare class NgtsRenderTextureContent {
|
|
|
45
45
|
export declare class NgtsRenderTexture {
|
|
46
46
|
attach: import("@angular/core").InputSignal<NgtAttachable>;
|
|
47
47
|
options: import("@angular/core").InputSignalWithTransform<NgtsRenderTextureOptions, "" | Partial<NgtsRenderTextureOptions>>;
|
|
48
|
-
parameters: import("@angular/core").Signal<Omit<NgtsRenderTextureOptions, "
|
|
48
|
+
parameters: import("@angular/core").Signal<Omit<NgtsRenderTextureOptions, "frames" | "width" | "height" | "depthBuffer" | "stencilBuffer" | "samples" | "generateMipmaps" | "renderPriority" | "eventPriority" | "compute">>;
|
|
49
49
|
content: import("@angular/core").Signal<TemplateRef<any>>;
|
|
50
50
|
private store;
|
|
51
51
|
private size;
|
|
@@ -104,8 +104,8 @@ export declare class NgtsSpotLightShadow {
|
|
|
104
104
|
export declare class NgtsSpotLight {
|
|
105
105
|
protected readonly SpotLightHelper: typeof SpotLightHelper;
|
|
106
106
|
options: import("@angular/core").InputSignalWithTransform<NgtsSpotLightOptions, "" | Partial<NgtsSpotLightOptions>>;
|
|
107
|
-
parameters: import("@angular/core").Signal<Omit<NgtsSpotLightOptions, "opacity" | "color" | "
|
|
108
|
-
volumetricOptions: import("@angular/core").Signal<Pick<NgtsSpotLightOptions, "opacity" | "color" | "distance" | "
|
|
107
|
+
parameters: import("@angular/core").Signal<Omit<NgtsSpotLightOptions, "opacity" | "color" | "distance" | "debug" | "depthBuffer" | "volumetric" | "angle" | "attenuation" | "anglePower" | "radiusTop" | "radiusBottom">>;
|
|
108
|
+
volumetricOptions: import("@angular/core").Signal<Pick<NgtsSpotLightOptions, "opacity" | "color" | "distance" | "debug" | "depthBuffer" | "angle" | "attenuation" | "anglePower" | "radiusTop" | "radiusBottom">>;
|
|
109
109
|
spotLight: import("@angular/core").Signal<ElementRef<SpotLight>>;
|
|
110
110
|
debug: import("@angular/core").Signal<boolean | undefined>;
|
|
111
111
|
angle: import("@angular/core").Signal<number | undefined>;
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './index';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS1zb2JhLWFic3RyYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9hYnN0cmFjdGlvbnMvc3JjL2FuZ3VsYXItdGhyZWUtc29iYS1hYnN0cmFjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export * from './lib/billboard';
|
|
2
|
-
export * from './lib/catmull-rom-line';
|
|
3
|
-
export * from './lib/cubic-bezier-line';
|
|
4
|
-
export * from './lib/edges';
|
|
5
|
-
export * from './lib/gradient-texture';
|
|
6
|
-
export * from './lib/grid';
|
|
7
|
-
export * from './lib/helper';
|
|
8
|
-
export * from './lib/line';
|
|
9
|
-
export * from './lib/prism-geometry';
|
|
10
|
-
export * from './lib/quadratic-bezier-line';
|
|
11
|
-
export * from './lib/rounded-box';
|
|
12
|
-
export * from './lib/text';
|
|
13
|
-
export * from './lib/text-3d';
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvYWJzdHJhY3Rpb25zL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvYmlsbGJvYXJkJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NhdG11bGwtcm9tLWxpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY3ViaWMtYmV6aWVyLWxpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZWRnZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZ3JhZGllbnQtdGV4dHVyZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9ncmlkJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2hlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9saW5lJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXNtLWdlb21ldHJ5JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3F1YWRyYXRpYy1iZXppZXItbGluZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yb3VuZGVkLWJveCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90ZXh0JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RleHQtM2QnO1xuIl19
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, input, viewChild, } from '@angular/core';
|
|
2
|
-
import { extend, injectBeforeRender, omit } from 'angular-three';
|
|
3
|
-
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
4
|
-
import { Group, Quaternion } from 'three';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
const defaultOptions = {
|
|
7
|
-
follow: true,
|
|
8
|
-
lockX: false,
|
|
9
|
-
lockY: false,
|
|
10
|
-
lockZ: false,
|
|
11
|
-
};
|
|
12
|
-
export class NgtsBillboard {
|
|
13
|
-
constructor() {
|
|
14
|
-
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
15
|
-
this.parameters = omit(this.options, ['follow', 'lockX', 'lockY', 'lockZ']);
|
|
16
|
-
this.groupRef = viewChild.required('group');
|
|
17
|
-
this.innerRef = viewChild.required('inner');
|
|
18
|
-
extend({ Group });
|
|
19
|
-
const q = new Quaternion();
|
|
20
|
-
injectBeforeRender(({ camera }) => {
|
|
21
|
-
const [{ follow, lockX, lockY, lockZ }, group, inner] = [
|
|
22
|
-
this.options(),
|
|
23
|
-
this.groupRef().nativeElement,
|
|
24
|
-
this.innerRef().nativeElement,
|
|
25
|
-
];
|
|
26
|
-
if (!follow || !group)
|
|
27
|
-
return;
|
|
28
|
-
// save previous rotation in case we're locking an axis
|
|
29
|
-
const prevRotation = group.rotation.clone();
|
|
30
|
-
// always face the camera
|
|
31
|
-
group.updateMatrix();
|
|
32
|
-
group.updateWorldMatrix(false, false);
|
|
33
|
-
group.getWorldQuaternion(q);
|
|
34
|
-
camera.getWorldQuaternion(inner.quaternion).premultiply(q.invert());
|
|
35
|
-
// readjust any axis that is locked
|
|
36
|
-
if (lockX)
|
|
37
|
-
group.rotation.x = prevRotation.x;
|
|
38
|
-
if (lockY)
|
|
39
|
-
group.rotation.y = prevRotation.y;
|
|
40
|
-
if (lockZ)
|
|
41
|
-
group.rotation.z = prevRotation.z;
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsBillboard, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
45
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.11", type: NgtsBillboard, isStandalone: true, selector: "ngts-billboard", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "groupRef", first: true, predicate: ["group"], descendants: true, isSignal: true }, { propertyName: "innerRef", first: true, predicate: ["inner"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
46
|
-
<ngt-group #group [parameters]="parameters()">
|
|
47
|
-
<ngt-group #inner>
|
|
48
|
-
<ng-content />
|
|
49
|
-
</ngt-group>
|
|
50
|
-
</ngt-group>
|
|
51
|
-
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
52
|
-
}
|
|
53
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsBillboard, decorators: [{
|
|
54
|
-
type: Component,
|
|
55
|
-
args: [{
|
|
56
|
-
selector: 'ngts-billboard',
|
|
57
|
-
standalone: true,
|
|
58
|
-
template: `
|
|
59
|
-
<ngt-group #group [parameters]="parameters()">
|
|
60
|
-
<ngt-group #inner>
|
|
61
|
-
<ng-content />
|
|
62
|
-
</ngt-group>
|
|
63
|
-
</ngt-group>
|
|
64
|
-
`,
|
|
65
|
-
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
66
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
67
|
-
}]
|
|
68
|
-
}], ctorParameters: () => [] });
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlsbGJvYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL2Fic3RyYWN0aW9ucy9zcmMvbGliL2JpbGxib2FyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxzQkFBc0IsRUFFdEIsS0FBSyxFQUNMLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFZLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxPQUFPLENBQUM7O0FBUzFDLE1BQU0sY0FBYyxHQUF5QjtJQUM1QyxNQUFNLEVBQUUsSUFBSTtJQUNaLEtBQUssRUFBRSxLQUFLO0lBQ1osS0FBSyxFQUFFLEtBQUs7SUFDWixLQUFLLEVBQUUsS0FBSztDQUNaLENBQUM7QUFlRixNQUFNLE9BQU8sYUFBYTtJQU96QjtRQU5BLFlBQU8sR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUUsZUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUV2RSxhQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBb0IsT0FBTyxDQUFDLENBQUM7UUFDMUQsYUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQW9CLE9BQU8sQ0FBQyxDQUFDO1FBR3pELE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFbEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUMzQixrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRTtZQUNqQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUc7Z0JBQ3ZELElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLGFBQWE7Z0JBQzdCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxhQUFhO2FBQzdCLENBQUM7WUFFRixJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPO1lBRTlCLHVEQUF1RDtZQUN2RCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBRTVDLHlCQUF5QjtZQUN6QixLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDckIsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0QyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFFcEUsbUNBQW1DO1lBQ25DLElBQUksS0FBSztnQkFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQzdDLElBQUksS0FBSztnQkFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQzdDLElBQUksS0FBSztnQkFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzsrR0FsQ1csYUFBYTttR0FBYixhQUFhLDJhQVZmOzs7Ozs7RUFNVDs7NEZBSVcsYUFBYTtrQkFiekIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7RUFNVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQy9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0RWxlbWVudFJlZixcblx0aW5wdXQsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBleHRlbmQsIGluamVjdEJlZm9yZVJlbmRlciwgTmd0R3JvdXAsIG9taXQgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IG1lcmdlSW5wdXRzIH0gZnJvbSAnbmd4dGVuc2lvbi9pbmplY3QtaW5wdXRzJztcbmltcG9ydCB7IEdyb3VwLCBRdWF0ZXJuaW9uIH0gZnJvbSAndGhyZWUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNCaWxsYm9hcmRPcHRpb25zIGV4dGVuZHMgUGFydGlhbDxOZ3RHcm91cD4ge1xuXHRmb2xsb3c/OiBib29sZWFuO1xuXHRsb2NrWD86IGJvb2xlYW47XG5cdGxvY2tZPzogYm9vbGVhbjtcblx0bG9ja1o/OiBib29sZWFuO1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c0JpbGxib2FyZE9wdGlvbnMgPSB7XG5cdGZvbGxvdzogdHJ1ZSxcblx0bG9ja1g6IGZhbHNlLFxuXHRsb2NrWTogZmFsc2UsXG5cdGxvY2taOiBmYWxzZSxcbn07XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtYmlsbGJvYXJkJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LWdyb3VwICNncm91cCBbcGFyYW1ldGVyc109XCJwYXJhbWV0ZXJzKClcIj5cblx0XHRcdDxuZ3QtZ3JvdXAgI2lubmVyPlxuXHRcdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdFx0PC9uZ3QtZ3JvdXA+XG5cdFx0PC9uZ3QtZ3JvdXA+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNCaWxsYm9hcmQge1xuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cdHBhcmFtZXRlcnMgPSBvbWl0KHRoaXMub3B0aW9ucywgWydmb2xsb3cnLCAnbG9ja1gnLCAnbG9ja1knLCAnbG9ja1onXSk7XG5cblx0Z3JvdXBSZWYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxHcm91cD4+KCdncm91cCcpO1xuXHRpbm5lclJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEdyb3VwPj4oJ2lubmVyJyk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZXh0ZW5kKHsgR3JvdXAgfSk7XG5cblx0XHRjb25zdCBxID0gbmV3IFF1YXRlcm5pb24oKTtcblx0XHRpbmplY3RCZWZvcmVSZW5kZXIoKHsgY2FtZXJhIH0pID0+IHtcblx0XHRcdGNvbnN0IFt7IGZvbGxvdywgbG9ja1gsIGxvY2tZLCBsb2NrWiB9LCBncm91cCwgaW5uZXJdID0gW1xuXHRcdFx0XHR0aGlzLm9wdGlvbnMoKSxcblx0XHRcdFx0dGhpcy5ncm91cFJlZigpLm5hdGl2ZUVsZW1lbnQsXG5cdFx0XHRcdHRoaXMuaW5uZXJSZWYoKS5uYXRpdmVFbGVtZW50LFxuXHRcdFx0XTtcblxuXHRcdFx0aWYgKCFmb2xsb3cgfHwgIWdyb3VwKSByZXR1cm47XG5cblx0XHRcdC8vIHNhdmUgcHJldmlvdXMgcm90YXRpb24gaW4gY2FzZSB3ZSdyZSBsb2NraW5nIGFuIGF4aXNcblx0XHRcdGNvbnN0IHByZXZSb3RhdGlvbiA9IGdyb3VwLnJvdGF0aW9uLmNsb25lKCk7XG5cblx0XHRcdC8vIGFsd2F5cyBmYWNlIHRoZSBjYW1lcmFcblx0XHRcdGdyb3VwLnVwZGF0ZU1hdHJpeCgpO1xuXHRcdFx0Z3JvdXAudXBkYXRlV29ybGRNYXRyaXgoZmFsc2UsIGZhbHNlKTtcblx0XHRcdGdyb3VwLmdldFdvcmxkUXVhdGVybmlvbihxKTtcblx0XHRcdGNhbWVyYS5nZXRXb3JsZFF1YXRlcm5pb24oaW5uZXIucXVhdGVybmlvbikucHJlbXVsdGlwbHkocS5pbnZlcnQoKSk7XG5cblx0XHRcdC8vIHJlYWRqdXN0IGFueSBheGlzIHRoYXQgaXMgbG9ja2VkXG5cdFx0XHRpZiAobG9ja1gpIGdyb3VwLnJvdGF0aW9uLnggPSBwcmV2Um90YXRpb24ueDtcblx0XHRcdGlmIChsb2NrWSkgZ3JvdXAucm90YXRpb24ueSA9IHByZXZSb3RhdGlvbi55O1xuXHRcdFx0aWYgKGxvY2taKSBncm91cC5yb3RhdGlvbi56ID0gcHJldlJvdGF0aW9uLno7XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, computed, input, untracked, viewChild } from '@angular/core';
|
|
2
|
-
import { omit, pick } from 'angular-three';
|
|
3
|
-
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
4
|
-
import { CatmullRomCurve3, Color, Vector3 } from 'three';
|
|
5
|
-
import { NgtsLine } from './line';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
const defaultOptions = {
|
|
8
|
-
curveType: 'centripetal',
|
|
9
|
-
tension: 0.5,
|
|
10
|
-
segments: 20,
|
|
11
|
-
closed: false,
|
|
12
|
-
lineWidth: 1,
|
|
13
|
-
};
|
|
14
|
-
export class NgtsCatmullRomLine {
|
|
15
|
-
constructor() {
|
|
16
|
-
this.points = input.required();
|
|
17
|
-
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
18
|
-
this.parameters = omit(this.options, ['curveType', 'tension', 'segments', 'closed', 'vertexColors']);
|
|
19
|
-
this.line = viewChild.required(NgtsLine);
|
|
20
|
-
this.closed = pick(this.options, 'closed');
|
|
21
|
-
this.curveType = pick(this.options, 'curveType');
|
|
22
|
-
this.tension = pick(this.options, 'tension');
|
|
23
|
-
this.segments = pick(this.options, 'segments');
|
|
24
|
-
this.vertexColors = pick(this.options, 'vertexColors');
|
|
25
|
-
this.curve = computed(() => {
|
|
26
|
-
const [points, closed, curveType, tension] = [this.points(), this.closed(), this.curveType(), this.tension()];
|
|
27
|
-
const mappedPoints = points.map((pt) => pt instanceof Vector3 ? pt : new Vector3(...pt));
|
|
28
|
-
return new CatmullRomCurve3(mappedPoints, closed, curveType, tension);
|
|
29
|
-
});
|
|
30
|
-
this.segmentedPoints = computed(() => {
|
|
31
|
-
const [curve, segments] = [this.curve(), this.segments()];
|
|
32
|
-
return curve.getPoints(segments);
|
|
33
|
-
});
|
|
34
|
-
this.interpolatedVertexColors = computed(() => {
|
|
35
|
-
const [vertexColors, segments] = [this.vertexColors(), this.segments()];
|
|
36
|
-
if (!vertexColors || vertexColors.length < 2)
|
|
37
|
-
return undefined;
|
|
38
|
-
if (vertexColors.length === segments + 1)
|
|
39
|
-
return vertexColors;
|
|
40
|
-
const mappedColors = vertexColors.map((color) => color instanceof Color ? color : new Color(...color));
|
|
41
|
-
if (untracked(this.closed))
|
|
42
|
-
mappedColors.push(mappedColors[0].clone());
|
|
43
|
-
const iColors = [mappedColors[0]];
|
|
44
|
-
const divisions = segments / (mappedColors.length - 1);
|
|
45
|
-
for (let i = 1; i < segments; i++) {
|
|
46
|
-
const alpha = (i % divisions) / divisions;
|
|
47
|
-
const colorIndex = Math.floor(i / divisions);
|
|
48
|
-
iColors.push(mappedColors[colorIndex].clone().lerp(mappedColors[colorIndex + 1], alpha));
|
|
49
|
-
}
|
|
50
|
-
iColors.push(mappedColors[mappedColors.length - 1]);
|
|
51
|
-
return iColors;
|
|
52
|
-
});
|
|
53
|
-
this.lineOptions = computed(() => ({ ...this.parameters(), vertexColors: this.interpolatedVertexColors() }));
|
|
54
|
-
}
|
|
55
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsCatmullRomLine, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
56
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.11", type: NgtsCatmullRomLine, isStandalone: true, selector: "ngts-catmull-rom-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: "line", first: true, predicate: NgtsLine, descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
57
|
-
<ngts-line [points]="segmentedPoints()" [options]="lineOptions()">
|
|
58
|
-
<ng-content />
|
|
59
|
-
</ngts-line>
|
|
60
|
-
`, isInline: true, dependencies: [{ kind: "component", type: NgtsLine, selector: "ngts-line", inputs: ["points", "options"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
61
|
-
}
|
|
62
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsCatmullRomLine, decorators: [{
|
|
63
|
-
type: Component,
|
|
64
|
-
args: [{
|
|
65
|
-
selector: 'ngts-catmull-rom-line',
|
|
66
|
-
standalone: true,
|
|
67
|
-
template: `
|
|
68
|
-
<ngts-line [points]="segmentedPoints()" [options]="lineOptions()">
|
|
69
|
-
<ng-content />
|
|
70
|
-
</ngts-line>
|
|
71
|
-
`,
|
|
72
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
73
|
-
imports: [NgtsLine],
|
|
74
|
-
}]
|
|
75
|
-
}] });
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0bXVsbC1yb20tbGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9hYnN0cmFjdGlvbnMvc3JjL2xpYi9jYXRtdWxsLXJvbS1saW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFtQixNQUFNLFFBQVEsQ0FBQzs7QUFTbkQsTUFBTSxjQUFjLEdBQThCO0lBQ2pELFNBQVMsRUFBRSxhQUFhO0lBQ3hCLE9BQU8sRUFBRSxHQUFHO0lBQ1osUUFBUSxFQUFFLEVBQUU7SUFDWixNQUFNLEVBQUUsS0FBSztJQUNiLFNBQVMsRUFBRSxDQUFDO0NBQ1osQ0FBQztBQWFGLE1BQU0sT0FBTyxrQkFBa0I7SUFYL0I7UUFZQyxXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBNkMsQ0FBQztRQUNyRSxZQUFPLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLGVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBRWhHLFNBQUksR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FB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VUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO2dCQUM3QyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzFGLENBQUM7WUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFcEQsT0FBTyxPQUFPLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxnQkFBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3hHOytHQXBEWSxrQkFBa0I7bUdBQWxCLGtCQUFrQiwyWEFLSixRQUFRLGdFQWJ4Qjs7OztFQUlULDREQUVTLFFBQVE7OzRGQUVOLGtCQUFrQjtrQkFYOUIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7O0VBSVQ7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5wdXQsIHVudHJhY2tlZCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvbWl0LCBwaWNrIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBDYXRtdWxsUm9tQ3VydmUzLCBDb2xvciwgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE5ndHNMaW5lLCBOZ3RzTGluZU9wdGlvbnMgfSBmcm9tICcuL2xpbmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNDYXRtdWxsUm9tTGluZU9wdGlvbnMgZXh0ZW5kcyBPbWl0PE5ndHNMaW5lT3B0aW9ucywgJ3NlZ21lbnRzJz4ge1xuXHRjdXJ2ZVR5cGU6ICdjZW50cmlwZXRhbCcgfCAnY2hvcmRhbCcgfCAnY2F0bXVsbHJvbSc7XG5cdHRlbnNpb246IG51bWJlcjtcblx0c2VnbWVudHM6IG51bWJlcjtcblx0Y2xvc2VkOiBib29sZWFuO1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c0NhdG11bGxSb21MaW5lT3B0aW9ucyA9IHtcblx0Y3VydmVUeXBlOiAnY2VudHJpcGV0YWwnLFxuXHR0ZW5zaW9uOiAwLjUsXG5cdHNlZ21lbnRzOiAyMCxcblx0Y2xvc2VkOiBmYWxzZSxcblx0bGluZVdpZHRoOiAxLFxufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1jYXRtdWxsLXJvbS1saW5lJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0cy1saW5lIFtwb2ludHNdPVwic2VnbWVudGVkUG9pbnRzKClcIiBbb3B0aW9uc109XCJsaW5lT3B0aW9ucygpXCI+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmd0cy1saW5lPlxuXHRgLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW05ndHNMaW5lXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0NhdG11bGxSb21MaW5lIHtcblx0cG9pbnRzID0gaW5wdXQucmVxdWlyZWQ8QXJyYXk8VmVjdG9yMyB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXT4+KCk7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblx0cGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbJ2N1cnZlVHlwZScsICd0ZW5zaW9uJywgJ3NlZ21lbnRzJywgJ2Nsb3NlZCcsICd2ZXJ0ZXhDb2xvcnMnXSk7XG5cblx0bGluZSA9IHZpZXdDaGlsZC5yZXF1aXJlZChOZ3RzTGluZSk7XG5cblx0cHJpdmF0ZSBjbG9zZWQgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2Nsb3NlZCcpO1xuXHRwcml2YXRlIGN1cnZlVHlwZSA9IHBpY2sodGhpcy5vcHRpb25zLCAnY3VydmVUeXBlJyk7XG5cdHByaXZhdGUgdGVuc2lvbiA9IHBpY2sodGhpcy5vcHRpb25zLCAndGVuc2lvbicpO1xuXHRwcml2YXRlIHNlZ21lbnRzID0gcGljayh0aGlzLm9wdGlvbnMsICdzZWdtZW50cycpO1xuXHRwcml2YXRlIHZlcnRleENvbG9ycyA9IHBpY2sodGhpcy5vcHRpb25zLCAndmVydGV4Q29sb3JzJyk7XG5cblx0cHJpdmF0ZSBjdXJ2ZSA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBbcG9pbnRzLCBjbG9zZWQsIGN1cnZlVHlwZSwgdGVuc2lvbl0gPSBbdGhpcy5wb2ludHMoKSwgdGhpcy5jbG9zZWQoKSwgdGhpcy5jdXJ2ZVR5cGUoKSwgdGhpcy50ZW5zaW9uKCldO1xuXG5cdFx0Y29uc3QgbWFwcGVkUG9pbnRzID0gcG9pbnRzLm1hcCgocHQpID0+XG5cdFx0XHRwdCBpbnN0YW5jZW9mIFZlY3RvcjMgPyBwdCA6IG5ldyBWZWN0b3IzKC4uLihwdCBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pKSxcblx0XHQpO1xuXG5cdFx0cmV0dXJuIG5ldyBDYXRtdWxsUm9tQ3VydmUzKG1hcHBlZFBvaW50cywgY2xvc2VkLCBjdXJ2ZVR5cGUsIHRlbnNpb24pO1xuXHR9KTtcblxuXHRzZWdtZW50ZWRQb2ludHMgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgW2N1cnZlLCBzZWdtZW50c10gPSBbdGhpcy5jdXJ2ZSgpLCB0aGlzLnNlZ21lbnRzKCldO1xuXHRcdHJldHVybiBjdXJ2ZS5nZXRQb2ludHMoc2VnbWVudHMpO1xuXHR9KTtcblxuXHRwcml2YXRlIGludGVycG9sYXRlZFZlcnRleENvbG9ycyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBbdmVydGV4Q29sb3JzLCBzZWdtZW50c10gPSBbdGhpcy52ZXJ0ZXhDb2xvcnMoKSwgdGhpcy5zZWdtZW50cygpXTtcblx0XHRpZiAoIXZlcnRleENvbG9ycyB8fCB2ZXJ0ZXhDb2xvcnMubGVuZ3RoIDwgMikgcmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdGlmICh2ZXJ0ZXhDb2xvcnMubGVuZ3RoID09PSBzZWdtZW50cyArIDEpIHJldHVybiB2ZXJ0ZXhDb2xvcnM7XG5cblx0XHRjb25zdCBtYXBwZWRDb2xvcnMgPSB2ZXJ0ZXhDb2xvcnMubWFwKChjb2xvcikgPT5cblx0XHRcdGNvbG9yIGluc3RhbmNlb2YgQ29sb3IgPyBjb2xvciA6IG5ldyBDb2xvciguLi4oY29sb3IgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdKSksXG5cdFx0KTtcblx0XHRpZiAodW50cmFja2VkKHRoaXMuY2xvc2VkKSkgbWFwcGVkQ29sb3JzLnB1c2gobWFwcGVkQ29sb3JzWzBdLmNsb25lKCkpO1xuXG5cdFx0Y29uc3QgaUNvbG9yczogQ29sb3JbXSA9IFttYXBwZWRDb2xvcnNbMF1dO1xuXHRcdGNvbnN0IGRpdmlzaW9ucyA9IHNlZ21lbnRzIC8gKG1hcHBlZENvbG9ycy5sZW5ndGggLSAxKTtcblx0XHRmb3IgKGxldCBpID0gMTsgaSA8IHNlZ21lbnRzOyBpKyspIHtcblx0XHRcdGNvbnN0IGFscGhhID0gKGkgJSBkaXZpc2lvbnMpIC8gZGl2aXNpb25zO1xuXHRcdFx0Y29uc3QgY29sb3JJbmRleCA9IE1hdGguZmxvb3IoaSAvIGRpdmlzaW9ucyk7XG5cdFx0XHRpQ29sb3JzLnB1c2gobWFwcGVkQ29sb3JzW2NvbG9ySW5kZXhdLmNsb25lKCkubGVycChtYXBwZWRDb2xvcnNbY29sb3JJbmRleCArIDFdLCBhbHBoYSkpO1xuXHRcdH1cblx0XHRpQ29sb3JzLnB1c2gobWFwcGVkQ29sb3JzW21hcHBlZENvbG9ycy5sZW5ndGggLSAxXSk7XG5cblx0XHRyZXR1cm4gaUNvbG9ycztcblx0fSk7XG5cblx0bGluZU9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiAoeyAuLi50aGlzLnBhcmFtZXRlcnMoKSwgdmVydGV4Q29sb3JzOiB0aGlzLmludGVycG9sYXRlZFZlcnRleENvbG9ycygpIH0pKTtcbn1cbiJdfQ==
|
|
@@ -1,51 +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 { CubicBezierCurve3, 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 NgtsCubicBezierLine {
|
|
12
|
-
constructor() {
|
|
13
|
-
this.start = input.required();
|
|
14
|
-
this.end = input.required();
|
|
15
|
-
this.midA = input.required();
|
|
16
|
-
this.midB = input.required();
|
|
17
|
-
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
18
|
-
this.parameters = omit(this.options, ['segments']);
|
|
19
|
-
this.line = viewChild.required(NgtsLine);
|
|
20
|
-
this.segments = pick(this.options, 'segments');
|
|
21
|
-
this.points = computed(() => {
|
|
22
|
-
const [start, end, midA, midB, segments] = [this.start(), this.end(), this.midA(), this.midB(), this.segments()];
|
|
23
|
-
const startV = start instanceof Vector3 ? start : new Vector3(...start);
|
|
24
|
-
const endV = end instanceof Vector3 ? end : new Vector3(...end);
|
|
25
|
-
const midAV = midA instanceof Vector3 ? midA : new Vector3(...midA);
|
|
26
|
-
const midBV = midB instanceof Vector3 ? midB : new Vector3(...midB);
|
|
27
|
-
return new CubicBezierCurve3(startV, midAV, midBV, endV).getPoints(segments);
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsCubicBezierLine, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
31
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.11", type: NgtsCubicBezierLine, isStandalone: true, selector: "ngts-cubic-bezier-line", inputs: { start: { classPropertyName: "start", publicName: "start", isSignal: true, isRequired: true, transformFunction: null }, end: { classPropertyName: "end", publicName: "end", isSignal: true, isRequired: true, transformFunction: null }, midA: { classPropertyName: "midA", publicName: "midA", isSignal: true, isRequired: true, transformFunction: null }, midB: { classPropertyName: "midB", publicName: "midB", isSignal: true, isRequired: true, 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: `
|
|
32
|
-
<ngts-line [points]="points()" [options]="parameters()">
|
|
33
|
-
<ng-content />
|
|
34
|
-
</ngts-line>
|
|
35
|
-
`, isInline: true, dependencies: [{ kind: "component", type: NgtsLine, selector: "ngts-line", inputs: ["points", "options"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
36
|
-
}
|
|
37
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsCubicBezierLine, decorators: [{
|
|
38
|
-
type: Component,
|
|
39
|
-
args: [{
|
|
40
|
-
selector: 'ngts-cubic-bezier-line',
|
|
41
|
-
standalone: true,
|
|
42
|
-
template: `
|
|
43
|
-
<ngts-line [points]="points()" [options]="parameters()">
|
|
44
|
-
<ng-content />
|
|
45
|
-
</ngts-line>
|
|
46
|
-
`,
|
|
47
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
48
|
-
imports: [NgtsLine],
|
|
49
|
-
}]
|
|
50
|
-
}] });
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ViaWMtYmV6aWVyLWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvYWJzdHJhY3Rpb25zL3NyYy9saWIvY3ViaWMtYmV6aWVyLWxpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNuRCxPQUFPLEVBQUUsUUFBUSxFQUFtQixNQUFNLFFBQVEsQ0FBQzs7QUFNbkQsTUFBTSxjQUFjLEdBQStCO0lBQ2xELFNBQVMsRUFBRSxDQUFDO0lBQ1osUUFBUSxFQUFFLEVBQUU7Q0FDWixDQUFDO0FBYUYsTUFBTSxPQUFPLG1CQUFtQjtJQVhoQztRQVlDLFVBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFzQyxDQUFDO1FBQzdELFFBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFzQyxDQUFDO1FBQzNELFNBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFzQyxDQUFDO1FBQzVELFNBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFzQyxDQUFDO1FBQzVELFlBQU8sR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUUsZUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUU5QyxTQUFJLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU1QixhQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFbEQsV0FBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDdEIsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNqSCxNQUFNLE1BQU0sR0FBRyxLQUFLLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFDeEUsTUFBTSxJQUFJLEdBQUcsR0FBRyxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sS0FBSyxHQUFHLElBQUksWUFBWSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUNwRSxNQUFNLEtBQUssR0FBRyxJQUFJLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDcEUsT0FBTyxJQUFJLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5RSxDQUFDLENBQUMsQ0FBQztLQUNIOytHQXBCWSxtQkFBbUI7bUdBQW5CLG1CQUFtQixrdEJBUUwsUUFBUSxnRUFoQnhCOzs7O0VBSVQsNERBRVMsUUFBUTs7NEZBRU4sbUJBQW1CO2tCQVgvQixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7RUFJVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbnB1dCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvbWl0LCBwaWNrIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBDdWJpY0JlemllckN1cnZlMywgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE5ndHNMaW5lLCBOZ3RzTGluZU9wdGlvbnMgfSBmcm9tICcuL2xpbmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNDdWJpY0JlemllckxpbmVPcHRpb25zIGV4dGVuZHMgT21pdDxOZ3RzTGluZU9wdGlvbnMsICdzZWdtZW50cyc+IHtcblx0c2VnbWVudHM/OiBudW1iZXI7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOZ3RzQ3ViaWNCZXppZXJMaW5lT3B0aW9ucyA9IHtcblx0bGluZVdpZHRoOiAxLFxuXHRzZWdtZW50czogMjAsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLWN1YmljLWJlemllci1saW5lJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0cy1saW5lIFtwb2ludHNdPVwicG9pbnRzKClcIiBbb3B0aW9uc109XCJwYXJhbWV0ZXJzKClcIj5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3RzLWxpbmU+XG5cdGAsXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuXHRpbXBvcnRzOiBbTmd0c0xpbmVdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzQ3ViaWNCZXppZXJMaW5lIHtcblx0c3RhcnQgPSBpbnB1dC5yZXF1aXJlZDxWZWN0b3IzIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdPigpO1xuXHRlbmQgPSBpbnB1dC5yZXF1aXJlZDxWZWN0b3IzIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdPigpO1xuXHRtaWRBID0gaW5wdXQucmVxdWlyZWQ8VmVjdG9yMyB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXT4oKTtcblx0bWlkQiA9IGlucHV0LnJlcXVpcmVkPFZlY3RvcjMgfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0+KCk7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblx0cGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbJ3NlZ21lbnRzJ10pO1xuXG5cdGxpbmUgPSB2aWV3Q2hpbGQucmVxdWlyZWQoTmd0c0xpbmUpO1xuXG5cdHByaXZhdGUgc2VnbWVudHMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3NlZ21lbnRzJyk7XG5cblx0cG9pbnRzID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IFtzdGFydCwgZW5kLCBtaWRBLCBtaWRCLCBzZWdtZW50c10gPSBbdGhpcy5zdGFydCgpLCB0aGlzLmVuZCgpLCB0aGlzLm1pZEEoKSwgdGhpcy5taWRCKCksIHRoaXMuc2VnbWVudHMoKV07XG5cdFx0Y29uc3Qgc3RhcnRWID0gc3RhcnQgaW5zdGFuY2VvZiBWZWN0b3IzID8gc3RhcnQgOiBuZXcgVmVjdG9yMyguLi5zdGFydCk7XG5cdFx0Y29uc3QgZW5kViA9IGVuZCBpbnN0YW5jZW9mIFZlY3RvcjMgPyBlbmQgOiBuZXcgVmVjdG9yMyguLi5lbmQpO1xuXHRcdGNvbnN0IG1pZEFWID0gbWlkQSBpbnN0YW5jZW9mIFZlY3RvcjMgPyBtaWRBIDogbmV3IFZlY3RvcjMoLi4ubWlkQSk7XG5cdFx0Y29uc3QgbWlkQlYgPSBtaWRCIGluc3RhbmNlb2YgVmVjdG9yMyA/IG1pZEIgOiBuZXcgVmVjdG9yMyguLi5taWRCKTtcblx0XHRyZXR1cm4gbmV3IEN1YmljQmV6aWVyQ3VydmUzKHN0YXJ0ViwgbWlkQVYsIG1pZEJWLCBlbmRWKS5nZXRQb2ludHMoc2VnbWVudHMpO1xuXHR9KTtcbn1cbiJdfQ==
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, computed, effect, input, viewChild } from '@angular/core';
|
|
2
|
-
import { checkNeedsUpdate, getLocalState, omit } from 'angular-three';
|
|
3
|
-
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
4
|
-
import { EdgesGeometry } from 'three';
|
|
5
|
-
import { NgtsLine } from './line';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
const defaultOptions = {
|
|
8
|
-
lineWidth: 1,
|
|
9
|
-
threshold: 15,
|
|
10
|
-
};
|
|
11
|
-
export class NgtsEdges {
|
|
12
|
-
constructor() {
|
|
13
|
-
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
14
|
-
this.parameters = omit(this.options, ['threshold', 'geometry']);
|
|
15
|
-
this.lineOptions = computed(() => ({ ...this.parameters(), raycast: () => null }));
|
|
16
|
-
this.tmpPoints = [0, 0, 0, 1, 0, 0];
|
|
17
|
-
this.line = viewChild.required(NgtsLine);
|
|
18
|
-
effect(() => {
|
|
19
|
-
const line = this.line().lineRef()?.nativeElement;
|
|
20
|
-
if (!line)
|
|
21
|
-
return;
|
|
22
|
-
const lS = getLocalState(line);
|
|
23
|
-
if (!lS)
|
|
24
|
-
return;
|
|
25
|
-
const parent = lS.parent();
|
|
26
|
-
if (!parent)
|
|
27
|
-
return;
|
|
28
|
-
const { geometry: explicitGeometry, threshold } = this.options();
|
|
29
|
-
const geometry = explicitGeometry ?? parent.geometry;
|
|
30
|
-
if (!geometry)
|
|
31
|
-
return;
|
|
32
|
-
const cached = this.memoizedGeometry === geometry && this.memoizedThreshold === threshold;
|
|
33
|
-
if (cached)
|
|
34
|
-
return;
|
|
35
|
-
this.memoizedGeometry = geometry;
|
|
36
|
-
this.memoizedThreshold = threshold;
|
|
37
|
-
const points = new EdgesGeometry(geometry, threshold).attributes['position']
|
|
38
|
-
.array;
|
|
39
|
-
line.geometry.setPositions(points);
|
|
40
|
-
checkNeedsUpdate(line.geometry.attributes['instanceStart']);
|
|
41
|
-
checkNeedsUpdate(line.geometry.attributes['instanceEnd']);
|
|
42
|
-
line.computeLineDistances();
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsEdges, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
46
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.11", type: NgtsEdges, isStandalone: true, selector: "ngts-edges", inputs: { 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: `
|
|
47
|
-
<ngts-line [points]="tmpPoints" [options]="lineOptions()">
|
|
48
|
-
<ng-content />
|
|
49
|
-
</ngts-line>
|
|
50
|
-
`, isInline: true, dependencies: [{ kind: "component", type: NgtsLine, selector: "ngts-line", inputs: ["points", "options"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
51
|
-
}
|
|
52
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsEdges, decorators: [{
|
|
53
|
-
type: Component,
|
|
54
|
-
args: [{
|
|
55
|
-
selector: 'ngts-edges',
|
|
56
|
-
standalone: true,
|
|
57
|
-
template: `
|
|
58
|
-
<ngts-line [points]="tmpPoints" [options]="lineOptions()">
|
|
59
|
-
<ng-content />
|
|
60
|
-
</ngts-line>
|
|
61
|
-
`,
|
|
62
|
-
imports: [NgtsLine],
|
|
63
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
64
|
-
}]
|
|
65
|
-
}], ctorParameters: () => [] });
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvYWJzdHJhY3Rpb25zL3NyYy9saWIvZWRnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBVyxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBd0QsYUFBYSxFQUFRLE1BQU0sT0FBTyxDQUFDO0FBRWxHLE9BQU8sRUFBNkIsUUFBUSxFQUFFLE1BQU0sUUFBUSxDQUFDOztBQVk3RCxNQUFNLGNBQWMsR0FBcUI7SUFDeEMsU0FBUyxFQUFFLENBQUM7SUFDWixTQUFTLEVBQUUsRUFBRTtDQUNiLENBQUM7QUFhRixNQUFNLE9BQU8sU0FBUztJQVlyQjtRQVhBLFlBQU8sR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEUsZUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFekQsZ0JBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUUsY0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV6QyxTQUFJLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQU1uQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLGFBQWEsQ0FBQztZQUNsRCxJQUFJLENBQUMsSUFBSTtnQkFBRSxPQUFPO1lBRWxCLE1BQU0sRUFBRSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsRUFBRTtnQkFBRSxPQUFPO1lBRWhCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQVUsQ0FBQztZQUNuQyxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPO1lBRXBCLE1BQU0sRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pFLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDckQsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsT0FBTztZQUV0QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxTQUFTLENBQUM7WUFDMUYsSUFBSSxNQUFNO2dCQUFFLE9BQU87WUFFbkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztZQUNqQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDO1lBRW5DLE1BQU0sTUFBTSxHQUFJLElBQUksYUFBYSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFxQjtpQkFDL0YsS0FBcUIsQ0FBQztZQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBQzVELGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDOytHQXhDVyxTQUFTO21HQUFULFNBQVMsc1BBT0ssUUFBUSxnRUFmeEI7Ozs7RUFJVCw0REFDUyxRQUFROzs0RkFHTixTQUFTO2tCQVhyQixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxZQUFZO29CQUN0QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7O0VBSVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO29CQUNuQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDL0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbnB1dCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjaGVja05lZWRzVXBkYXRlLCBnZXRMb2NhbFN0YXRlLCBOZ3RNZXNoLCBvbWl0IH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBCdWZmZXJBdHRyaWJ1dGUsIEJ1ZmZlckdlb21ldHJ5LCBDb2xvclJlcHJlc2VudGF0aW9uLCBFZGdlc0dlb21ldHJ5LCBNZXNoIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTGluZU1hdGVyaWFsUGFyYW1ldGVycyB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5pbXBvcnQgeyBOZ3RMaW5lMiwgTmd0TGluZU1hdGVyaWFsLCBOZ3RzTGluZSB9IGZyb20gJy4vbGluZSc7XG5cbmV4cG9ydCB0eXBlIE5ndHNFZGdlc09wdGlvbnMgPSBQYXJ0aWFsPE5ndE1lc2g+ICYge1xuXHR0aHJlc2hvbGQ/OiBudW1iZXI7XG5cdGxpbmVXaWR0aD86IG51bWJlcjtcbn0gJiBPbWl0PExpbmVNYXRlcmlhbFBhcmFtZXRlcnMsICd2ZXJ0ZXhDb2xvcnMnIHwgJ2NvbG9yJz4gJlxuXHRPbWl0PFBhcnRpYWw8Tmd0TGluZTI+LCAnZ2VvbWV0cnknPiAmXG5cdE9taXQ8UGFydGlhbDxOZ3RMaW5lTWF0ZXJpYWw+LCAnY29sb3InIHwgJ3ZlcnRleENvbG9ycyc+ICYge1xuXHRcdGdlb21ldHJ5PzogQnVmZmVyR2VvbWV0cnk7XG5cdFx0Y29sb3I/OiBDb2xvclJlcHJlc2VudGF0aW9uO1xuXHR9O1xuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c0VkZ2VzT3B0aW9ucyA9IHtcblx0bGluZVdpZHRoOiAxLFxuXHR0aHJlc2hvbGQ6IDE1LFxufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1lZGdlcycsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndHMtbGluZSBbcG9pbnRzXT1cInRtcFBvaW50c1wiIFtvcHRpb25zXT1cImxpbmVPcHRpb25zKClcIj5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3RzLWxpbmU+XG5cdGAsXG5cdGltcG9ydHM6IFtOZ3RzTGluZV0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzRWRnZXMge1xuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cdHByaXZhdGUgcGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbJ3RocmVzaG9sZCcsICdnZW9tZXRyeSddKTtcblxuXHRwcm90ZWN0ZWQgbGluZU9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiAoeyAuLi50aGlzLnBhcmFtZXRlcnMoKSwgcmF5Y2FzdDogKCkgPT4gbnVsbCB9KSk7XG5cdHByb3RlY3RlZCB0bXBQb2ludHMgPSBbMCwgMCwgMCwgMSwgMCwgMF07XG5cblx0bGluZSA9IHZpZXdDaGlsZC5yZXF1aXJlZChOZ3RzTGluZSk7XG5cblx0cHJpdmF0ZSBtZW1vaXplZEdlb21ldHJ5PzogQnVmZmVyR2VvbWV0cnk7XG5cdHByaXZhdGUgbWVtb2l6ZWRUaHJlc2hvbGQ/OiBudW1iZXI7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IGxpbmUgPSB0aGlzLmxpbmUoKS5saW5lUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRpZiAoIWxpbmUpIHJldHVybjtcblxuXHRcdFx0Y29uc3QgbFMgPSBnZXRMb2NhbFN0YXRlKGxpbmUpO1xuXHRcdFx0aWYgKCFsUykgcmV0dXJuO1xuXG5cdFx0XHRjb25zdCBwYXJlbnQgPSBsUy5wYXJlbnQoKSBhcyBNZXNoO1xuXHRcdFx0aWYgKCFwYXJlbnQpIHJldHVybjtcblxuXHRcdFx0Y29uc3QgeyBnZW9tZXRyeTogZXhwbGljaXRHZW9tZXRyeSwgdGhyZXNob2xkIH0gPSB0aGlzLm9wdGlvbnMoKTtcblx0XHRcdGNvbnN0IGdlb21ldHJ5ID0gZXhwbGljaXRHZW9tZXRyeSA/PyBwYXJlbnQuZ2VvbWV0cnk7XG5cdFx0XHRpZiAoIWdlb21ldHJ5KSByZXR1cm47XG5cblx0XHRcdGNvbnN0IGNhY2hlZCA9IHRoaXMubWVtb2l6ZWRHZW9tZXRyeSA9PT0gZ2VvbWV0cnkgJiYgdGhpcy5tZW1vaXplZFRocmVzaG9sZCA9PT0gdGhyZXNob2xkO1xuXHRcdFx0aWYgKGNhY2hlZCkgcmV0dXJuO1xuXG5cdFx0XHR0aGlzLm1lbW9pemVkR2VvbWV0cnkgPSBnZW9tZXRyeTtcblx0XHRcdHRoaXMubWVtb2l6ZWRUaHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG5cblx0XHRcdGNvbnN0IHBvaW50cyA9IChuZXcgRWRnZXNHZW9tZXRyeShnZW9tZXRyeSwgdGhyZXNob2xkKS5hdHRyaWJ1dGVzWydwb3NpdGlvbiddIGFzIEJ1ZmZlckF0dHJpYnV0ZSlcblx0XHRcdFx0LmFycmF5IGFzIEZsb2F0MzJBcnJheTtcblx0XHRcdGxpbmUuZ2VvbWV0cnkuc2V0UG9zaXRpb25zKHBvaW50cyk7XG5cdFx0XHRjaGVja05lZWRzVXBkYXRlKGxpbmUuZ2VvbWV0cnkuYXR0cmlidXRlc1snaW5zdGFuY2VTdGFydCddKTtcblx0XHRcdGNoZWNrTmVlZHNVcGRhdGUobGluZS5nZW9tZXRyeS5hdHRyaWJ1dGVzWydpbnN0YW5jZUVuZCddKTtcblx0XHRcdGxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTtcblx0XHR9KTtcblx0fVxufVxuIl19
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import { DOCUMENT } from '@angular/common';
|
|
2
|
-
import { ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, inject, input, untracked, } from '@angular/core';
|
|
3
|
-
import { extend, injectStore, NgtArgs, omit } from 'angular-three';
|
|
4
|
-
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
5
|
-
import { CanvasTexture, Color } from 'three';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
const defaultOptions = {
|
|
8
|
-
size: 1024,
|
|
9
|
-
width: 16,
|
|
10
|
-
type: 'linear',
|
|
11
|
-
innerCircleRadius: 0,
|
|
12
|
-
outerCircleRadius: 'auto',
|
|
13
|
-
};
|
|
14
|
-
export class NgtsGradientTexture {
|
|
15
|
-
constructor() {
|
|
16
|
-
this.attach = input('map');
|
|
17
|
-
this.stops = input.required();
|
|
18
|
-
this.colors = input.required();
|
|
19
|
-
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
20
|
-
this.parameters = omit(this.options, ['size', 'width', 'type', 'innerCircleRadius', 'outerCircleRadius']);
|
|
21
|
-
this.store = injectStore();
|
|
22
|
-
this.outputColorSpace = this.store.select('gl', 'outputColorSpace');
|
|
23
|
-
this.document = inject(DOCUMENT);
|
|
24
|
-
this.canvas = computed(() => {
|
|
25
|
-
const canvas = this.document.createElement('canvas');
|
|
26
|
-
const context = canvas.getContext('2d');
|
|
27
|
-
const [{ width, size, type, outerCircleRadius, innerCircleRadius }, stops, colors] = [
|
|
28
|
-
untracked(this.options),
|
|
29
|
-
this.stops(),
|
|
30
|
-
this.colors(),
|
|
31
|
-
];
|
|
32
|
-
canvas.width = width;
|
|
33
|
-
canvas.height = size;
|
|
34
|
-
let gradient;
|
|
35
|
-
if (type === 'linear') {
|
|
36
|
-
gradient = context.createLinearGradient(0, 0, 0, size);
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
const canvasCenterX = canvas.width / 2;
|
|
40
|
-
const canvasCenterY = canvas.height / 2;
|
|
41
|
-
const radius = outerCircleRadius !== 'auto'
|
|
42
|
-
? Math.abs(Number(outerCircleRadius))
|
|
43
|
-
: Math.sqrt(canvasCenterX ** 2 + canvasCenterY ** 2);
|
|
44
|
-
gradient = context.createRadialGradient(canvasCenterX, canvasCenterY, Math.abs(innerCircleRadius), canvasCenterX, canvasCenterY, radius);
|
|
45
|
-
}
|
|
46
|
-
const tempColor = new Color(); // reuse instance for performance
|
|
47
|
-
let i = stops.length;
|
|
48
|
-
while (i--) {
|
|
49
|
-
gradient.addColorStop(stops[i], tempColor.set(colors[i]).getStyle());
|
|
50
|
-
}
|
|
51
|
-
context.save();
|
|
52
|
-
context.fillStyle = gradient;
|
|
53
|
-
context.fillRect(0, 0, width, size);
|
|
54
|
-
context.restore();
|
|
55
|
-
return canvas;
|
|
56
|
-
});
|
|
57
|
-
extend({ CanvasTexture });
|
|
58
|
-
}
|
|
59
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsGradientTexture, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
60
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.11", type: NgtsGradientTexture, isStandalone: true, selector: "ngts-gradient-texture", inputs: { attach: { classPropertyName: "attach", publicName: "attach", isSignal: true, isRequired: false, transformFunction: null }, stops: { classPropertyName: "stops", publicName: "stops", isSignal: true, isRequired: true, transformFunction: null }, colors: { classPropertyName: "colors", publicName: "colors", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
61
|
-
<ngt-canvas-texture
|
|
62
|
-
*args="[canvas()]"
|
|
63
|
-
[attach]="attach()"
|
|
64
|
-
[colorSpace]="outputColorSpace()"
|
|
65
|
-
[parameters]="parameters()"
|
|
66
|
-
>
|
|
67
|
-
<ng-content />
|
|
68
|
-
</ngt-canvas-texture>
|
|
69
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
70
|
-
}
|
|
71
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsGradientTexture, decorators: [{
|
|
72
|
-
type: Component,
|
|
73
|
-
args: [{
|
|
74
|
-
selector: 'ngts-gradient-texture',
|
|
75
|
-
standalone: true,
|
|
76
|
-
template: `
|
|
77
|
-
<ngt-canvas-texture
|
|
78
|
-
*args="[canvas()]"
|
|
79
|
-
[attach]="attach()"
|
|
80
|
-
[colorSpace]="outputColorSpace()"
|
|
81
|
-
[parameters]="parameters()"
|
|
82
|
-
>
|
|
83
|
-
<ng-content />
|
|
84
|
-
</ngt-canvas-texture>
|
|
85
|
-
`,
|
|
86
|
-
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
87
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
88
|
-
imports: [NgtArgs],
|
|
89
|
-
}]
|
|
90
|
-
}], ctorParameters: () => [] });
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhZGllbnQtdGV4dHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9hYnN0cmFjdGlvbnMvc3JjL2xpYi9ncmFkaWVudC10ZXh0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ04sdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1Isc0JBQXNCLEVBQ3RCLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBNkIsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBdUIsTUFBTSxPQUFPLENBQUM7O0FBVWxFLE1BQU0sY0FBYyxHQUErQjtJQUNsRCxJQUFJLEVBQUUsSUFBSTtJQUNWLEtBQUssRUFBRSxFQUFFO0lBQ1QsSUFBSSxFQUFFLFFBQVE7SUFDZCxpQkFBaUIsRUFBRSxDQUFDO0lBQ3BCLGlCQUFpQixFQUFFLE1BQU07Q0FDekIsQ0FBQztBQW1CRixNQUFNLE9BQU8sbUJBQW1CO0lBMEQvQjtRQXpEQSxXQUFNLEdBQUcsS0FBSyxDQUFnQixLQUFLLENBQUMsQ0FBQztRQUNyQyxVQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBaUIsQ0FBQztRQUN4QyxXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBOEIsQ0FBQztRQUN0RCxZQUFPLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLGVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9B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ZHJCOzs7Ozs7Ozs7RUFTVCw0REFHUyxPQUFPOzs0RkFFTCxtQkFBbUI7a0JBakIvQixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7Ozs7OztFQVNUO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRDb21wb25lbnQsXG5cdGNvbXB1dGVkLFxuXHRDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuXHRpbmplY3QsXG5cdGlucHV0LFxuXHR1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZXh0ZW5kLCBpbmplY3RTdG9yZSwgTmd0QXJncywgTmd0QXR0YWNoYWJsZSwgTmd0VGV4dHVyZSwgb21pdCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgQ2FudmFzVGV4dHVyZSwgQ29sb3IsIENvbG9yUmVwcmVzZW50YXRpb24gfSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c0dyYWRpZW50VGV4dHVyZU9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPE9taXQ8Tmd0VGV4dHVyZSwgJ3R5cGUnPj4ge1xuXHRzaXplOiBudW1iZXI7XG5cdHdpZHRoOiBudW1iZXI7XG5cdHR5cGU6ICdsaW5lYXInIHwgJ3JhZGlhbCc7XG5cdGlubmVyQ2lyY2xlUmFkaXVzOiBudW1iZXI7XG5cdG91dGVyQ2lyY2xlUmFkaXVzOiBzdHJpbmcgfCBudW1iZXI7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOZ3RzR3JhZGllbnRUZXh0dXJlT3B0aW9ucyA9IHtcblx0c2l6ZTogMTAyNCxcblx0d2lkdGg6IDE2LFxuXHR0eXBlOiAnbGluZWFyJyxcblx0aW5uZXJDaXJjbGVSYWRpdXM6IDAsXG5cdG91dGVyQ2lyY2xlUmFkaXVzOiAnYXV0bycsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLWdyYWRpZW50LXRleHR1cmUnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtY2FudmFzLXRleHR1cmVcblx0XHRcdCphcmdzPVwiW2NhbnZhcygpXVwiXG5cdFx0XHRbYXR0YWNoXT1cImF0dGFjaCgpXCJcblx0XHRcdFtjb2xvclNwYWNlXT1cIm91dHB1dENvbG9yU3BhY2UoKVwiXG5cdFx0XHRbcGFyYW1ldGVyc109XCJwYXJhbWV0ZXJzKClcIlxuXHRcdD5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3QtY2FudmFzLXRleHR1cmU+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cdGltcG9ydHM6IFtOZ3RBcmdzXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0dyYWRpZW50VGV4dHVyZSB7XG5cdGF0dGFjaCA9IGlucHV0PE5ndEF0dGFjaGFibGU+KCdtYXAnKTtcblx0c3RvcHMgPSBpbnB1dC5yZXF1aXJlZDxBcnJheTxudW1iZXI+PigpO1xuXHRjb2xvcnMgPSBpbnB1dC5yZXF1aXJlZDxBcnJheTxDb2xvclJlcHJlc2VudGF0aW9uPj4oKTtcblx0b3B0aW9ucyA9IGlucHV0KGRlZmF1bHRPcHRpb25zLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMoZGVmYXVsdE9wdGlvbnMpIH0pO1xuXHRwYXJhbWV0ZXJzID0gb21pdCh0aGlzLm9wdGlvbnMsIFsnc2l6ZScsICd3aWR0aCcsICd0eXBlJywgJ2lubmVyQ2lyY2xlUmFkaXVzJywgJ291dGVyQ2lyY2xlUmFkaXVzJ10pO1xuXG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXHRvdXRwdXRDb2xvclNwYWNlID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2dsJywgJ291dHB1dENvbG9yU3BhY2UnKTtcblx0cHJpdmF0ZSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG5cblx0Y2FudmFzID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IGNhbnZhcyA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cdFx0Y29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpITtcblx0XHRjb25zdCBbeyB3aWR0aCwgc2l6ZSwgdHlwZSwgb3V0ZXJDaXJjbGVSYWRpdXMsIGlubmVyQ2lyY2xlUmFkaXVzIH0sIHN0b3BzLCBjb2xvcnNdID0gW1xuXHRcdFx0dW50cmFja2VkKHRoaXMub3B0aW9ucyksXG5cdFx0XHR0aGlzLnN0b3BzKCksXG5cdFx0XHR0aGlzLmNvbG9ycygpLFxuXHRcdF07XG5cdFx0Y2FudmFzLndpZHRoID0gd2lkdGg7XG5cdFx0Y2FudmFzLmhlaWdodCA9IHNpemU7XG5cblx0XHRsZXQgZ3JhZGllbnQ6IENhbnZhc0dyYWRpZW50O1xuXG5cdFx0aWYgKHR5cGUgPT09ICdsaW5lYXInKSB7XG5cdFx0XHRncmFkaWVudCA9IGNvbnRleHQuY3JlYXRlTGluZWFyR3JhZGllbnQoMCwgMCwgMCwgc2l6ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGNhbnZhc0NlbnRlclggPSBjYW52YXMud2lkdGggLyAyO1xuXHRcdFx0Y29uc3QgY2FudmFzQ2VudGVyWSA9IGNhbnZhcy5oZWlnaHQgLyAyO1xuXHRcdFx0Y29uc3QgcmFkaXVzID1cblx0XHRcdFx0b3V0ZXJDaXJjbGVSYWRpdXMgIT09ICdhdXRvJ1xuXHRcdFx0XHRcdD8gTWF0aC5hYnMoTnVtYmVyKG91dGVyQ2lyY2xlUmFkaXVzKSlcblx0XHRcdFx0XHQ6IE1hdGguc3FydChjYW52YXNDZW50ZXJYICoqIDIgKyBjYW52YXNDZW50ZXJZICoqIDIpO1xuXHRcdFx0Z3JhZGllbnQgPSBjb250ZXh0LmNyZWF0ZVJhZGlhbEdyYWRpZW50KFxuXHRcdFx0XHRjYW52YXNDZW50ZXJYLFxuXHRcdFx0XHRjYW52YXNDZW50ZXJZLFxuXHRcdFx0XHRNYXRoLmFicyhpbm5lckNpcmNsZVJhZGl1cyksXG5cdFx0XHRcdGNhbnZhc0NlbnRlclgsXG5cdFx0XHRcdGNhbnZhc0NlbnRlclksXG5cdFx0XHRcdHJhZGl1cyxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGVtcENvbG9yID0gbmV3IENvbG9yKCk7IC8vIHJldXNlIGluc3RhbmNlIGZvciBwZXJmb3JtYW5jZVxuXG5cdFx0bGV0IGkgPSBzdG9wcy5sZW5ndGg7XG5cdFx0d2hpbGUgKGktLSkge1xuXHRcdFx0Z3JhZGllbnQuYWRkQ29sb3JTdG9wKHN0b3BzW2ldLCB0ZW1wQ29sb3Iuc2V0KGNvbG9yc1tpXSkuZ2V0U3R5bGUoKSk7XG5cdFx0fVxuXG5cdFx0Y29udGV4dC5zYXZlKCk7XG5cdFx0Y29udGV4dC5maWxsU3R5bGUgPSBncmFkaWVudDtcblx0XHRjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBzaXplKTtcblx0XHRjb250ZXh0LnJlc3RvcmUoKTtcblxuXHRcdHJldHVybiBjYW52YXM7XG5cdH0pO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGV4dGVuZCh7IENhbnZhc1RleHR1cmUgfSk7XG5cdH1cbn1cbiJdfQ==
|