angular-three-soba 1.3.2 → 1.5.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/README.md +3 -0
- package/abstractions/index.d.ts +10 -0
- package/abstractions/lib/billboard/billboard.d.ts +14 -0
- package/abstractions/lib/catmull-rom-line/catmull-rom-line.d.ts +15 -0
- package/abstractions/lib/cubic-bezier-line/cubic-bezier-line.d.ts +15 -0
- package/abstractions/lib/gizmo-helper/gizmo-helper.d.ts +41 -0
- package/abstractions/lib/gizmo-helper/gizmo-viewcube/constants.d.ts +12 -0
- package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +16 -0
- package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +24 -0
- package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +14 -0
- package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +15 -0
- package/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +28 -0
- package/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +21 -0
- package/abstractions/lib/line/line-input.d.ts +19 -0
- package/abstractions/lib/line/line.d.ts +21 -0
- package/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.d.ts +19 -0
- package/abstractions/lib/text/text.d.ts +21 -0
- package/abstractions/lib/text-3d/text-3d.d.ts +39 -0
- package/esm2020/abstractions/angular-three-soba-abstractions.mjs +5 -0
- package/esm2020/abstractions/index.mjs +11 -0
- package/esm2020/abstractions/lib/billboard/billboard.mjs +73 -0
- package/esm2020/abstractions/lib/catmull-rom-line/catmull-rom-line.mjs +119 -0
- package/esm2020/abstractions/lib/cubic-bezier-line/cubic-bezier-line.mjs +98 -0
- package/esm2020/abstractions/lib/gizmo-helper/gizmo-helper.mjs +206 -0
- package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/constants.mjs +31 -0
- package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +91 -0
- package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +182 -0
- package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +45 -0
- package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +133 -0
- package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +193 -0
- package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +266 -0
- package/esm2020/abstractions/lib/line/line-input.mjs +75 -0
- package/esm2020/abstractions/lib/line/line.mjs +147 -0
- package/esm2020/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.mjs +127 -0
- package/esm2020/abstractions/lib/text/text.mjs +110 -0
- package/esm2020/abstractions/lib/text-3d/text-3d.mjs +144 -0
- package/esm2020/cameras/lib/orthographic-camera/orthographic-camera.mjs +5 -5
- package/esm2020/staging/index.mjs +3 -1
- package/esm2020/staging/lib/camera-shake/camera-shake.mjs +121 -0
- package/esm2020/staging/lib/cloud/cloud.mjs +159 -0
- package/fesm2015/angular-three-soba-abstractions.mjs +1965 -0
- package/fesm2015/angular-three-soba-abstractions.mjs.map +1 -0
- package/fesm2015/angular-three-soba-cameras.mjs +4 -4
- package/fesm2015/angular-three-soba-cameras.mjs.map +1 -1
- package/fesm2015/angular-three-soba-staging.mjs +274 -4
- package/fesm2015/angular-three-soba-staging.mjs.map +1 -1
- package/fesm2020/angular-three-soba-abstractions.mjs +1962 -0
- package/fesm2020/angular-three-soba-abstractions.mjs.map +1 -0
- package/fesm2020/angular-three-soba-cameras.mjs +4 -4
- package/fesm2020/angular-three-soba-cameras.mjs.map +1 -1
- package/fesm2020/angular-three-soba-staging.mjs +274 -4
- package/fesm2020/angular-three-soba-staging.mjs.map +1 -1
- package/package.json +11 -3
- package/plugin/package.json +1 -1
- package/staging/index.d.ts +2 -0
- package/staging/lib/camera-shake/camera-shake.d.ts +28 -0
- package/staging/lib/cloud/cloud.d.ts +23 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './lib/billboard/billboard';
|
|
2
|
+
export * from './lib/catmull-rom-line/catmull-rom-line';
|
|
3
|
+
export * from './lib/cubic-bezier-line/cubic-bezier-line';
|
|
4
|
+
export * from './lib/gizmo-helper/gizmo-helper';
|
|
5
|
+
export * from './lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube';
|
|
6
|
+
export * from './lib/gizmo-helper/gizmo-viewport/gizmo-viewport';
|
|
7
|
+
export * from './lib/line/line';
|
|
8
|
+
export * from './lib/quadratic-bezier-line/quadratic-bezier-line';
|
|
9
|
+
export * from './lib/text-3d/text-3d';
|
|
10
|
+
export * from './lib/text/text';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { NgtBeforeRenderEvent, NgtRxStore } from 'angular-three';
|
|
2
|
+
import { Group } from 'three';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class NgtsBillboard extends NgtRxStore {
|
|
5
|
+
billboardRef: import("angular-three").NgtInjectedRef<Group>;
|
|
6
|
+
set follow(follow: boolean);
|
|
7
|
+
set lockX(lockX: boolean);
|
|
8
|
+
set lockY(lockY: boolean);
|
|
9
|
+
set lockZ(lockZ: boolean);
|
|
10
|
+
initialize(): void;
|
|
11
|
+
onBeforeRender(event: NgtBeforeRenderEvent<Group>): void;
|
|
12
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsBillboard, never>;
|
|
13
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsBillboard, "ngts-billboard", never, { "billboardRef": "billboardRef"; "follow": "follow"; "lockX": "lockX"; "lockY": "lockY"; "lockZ": "lockZ"; }, {}, never, ["*"], true, never>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import { Line2 } from 'three-stdlib';
|
|
3
|
+
import { NgtsLineInput } from '../line/line-input';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class NgtsCatmullRomLine extends NgtsLineInput {
|
|
6
|
+
lineRef: import("angular-three").NgtInjectedRef<Line2>;
|
|
7
|
+
set points(points: Array<THREE.Vector3 | THREE.Vector2 | [number, number, number] | [number, number] | number>);
|
|
8
|
+
set closed(closed: boolean);
|
|
9
|
+
set curveType(curveType: 'centripetal' | 'chordal' | 'catmullrom');
|
|
10
|
+
set tension(tension: number);
|
|
11
|
+
set segments(segments: number);
|
|
12
|
+
initialize(): void;
|
|
13
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsCatmullRomLine, never>;
|
|
14
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsCatmullRomLine, "ngts-catmull-rom-line[points]", never, { "lineRef": "lineRef"; "points": "points"; "closed": "closed"; "curveType": "curveType"; "tension": "tension"; "segments": "segments"; }, {}, never, never, true, never>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import { Line2 } from 'three-stdlib';
|
|
3
|
+
import { NgtsLineInput } from '../line/line-input';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class NgtsCubicBezierLine extends NgtsLineInput {
|
|
6
|
+
lineRef: import("angular-three").NgtInjectedRef<Line2>;
|
|
7
|
+
set start(start: THREE.Vector3 | [number, number, number]);
|
|
8
|
+
set end(end: THREE.Vector3 | [number, number, number]);
|
|
9
|
+
set midA(midA: THREE.Vector3 | [number, number, number]);
|
|
10
|
+
set midB(midB: THREE.Vector3 | [number, number, number]);
|
|
11
|
+
set segments(segments: number);
|
|
12
|
+
initialize(): void;
|
|
13
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsCubicBezierLine, never>;
|
|
14
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsCubicBezierLine, "ngts-cubic-bezier-line[start][end][midA][midB]", never, { "lineRef": "lineRef"; "start": "start"; "end": "end"; "midA": "midA"; "midB": "midB"; "segments": "segments"; }, {}, never, never, true, never>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { EventEmitter, InjectionToken, OnInit, TemplateRef } from '@angular/core';
|
|
2
|
+
import { NgtRxStore } from 'angular-three';
|
|
3
|
+
import { Group, Object3D, OrthographicCamera, Quaternion, Vector3 } from 'three';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export interface NgtsGizmoHelperApi {
|
|
6
|
+
tweenCamera: (direction: Vector3) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare const NGTS_GIZMO_HELPER_API: InjectionToken<NgtsGizmoHelperApi>;
|
|
9
|
+
export declare class NgtsGizmoHelperContent {
|
|
10
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsGizmoHelperContent, never>;
|
|
11
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<NgtsGizmoHelperContent, "ng-template[ngtsGizmoHelperContent]", never, {}, {}, never, never, true, never>;
|
|
12
|
+
}
|
|
13
|
+
export declare class NgtsGizmoHelper extends NgtRxStore implements OnInit {
|
|
14
|
+
private readonly store;
|
|
15
|
+
readonly gizmoRef: import("angular-three").NgtInjectedRef<Group>;
|
|
16
|
+
readonly virtualCameraRef: import("angular-three").NgtInjectedRef<OrthographicCamera>;
|
|
17
|
+
animating: boolean;
|
|
18
|
+
radius: number;
|
|
19
|
+
focusPoint: Vector3;
|
|
20
|
+
q1: Quaternion;
|
|
21
|
+
q2: Quaternion;
|
|
22
|
+
target: Vector3;
|
|
23
|
+
targetPosition: Vector3;
|
|
24
|
+
dummy: Object3D<import("three").Event>;
|
|
25
|
+
private defaultUp;
|
|
26
|
+
private turnRate;
|
|
27
|
+
private matrix;
|
|
28
|
+
set alignment(alignment: 'top-left' | 'top-right' | 'bottom-right' | 'bottom-left' | 'bottom-center' | 'center-right' | 'center-left' | 'center-center' | 'top-center');
|
|
29
|
+
set margin(margin: [number, number]);
|
|
30
|
+
set renderPriority(renderPriority: number);
|
|
31
|
+
set autoClear(autoClear: boolean);
|
|
32
|
+
updated: EventEmitter<void>;
|
|
33
|
+
gizmoHelperContent: TemplateRef<unknown>;
|
|
34
|
+
initialize(): void;
|
|
35
|
+
ngOnInit(): void;
|
|
36
|
+
onBeforeRender(delta: number): void;
|
|
37
|
+
private setGizmoPosition;
|
|
38
|
+
private updateDefaultUp;
|
|
39
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsGizmoHelper, never>;
|
|
40
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsGizmoHelper, "ngts-gizmo-helper", never, { "alignment": "alignment"; "margin": "margin"; "renderPriority": "renderPriority"; "autoClear": "autoClear"; }, { "updated": "updated"; }, ["gizmoHelperContent"], never, true, never>;
|
|
41
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
export declare const colors: {
|
|
3
|
+
bg: string;
|
|
4
|
+
hover: string;
|
|
5
|
+
text: string;
|
|
6
|
+
stroke: string;
|
|
7
|
+
};
|
|
8
|
+
export declare const defaultFaces: string[];
|
|
9
|
+
export declare const corners: THREE.Vector3[];
|
|
10
|
+
export declare const cornerDimensions: [number, number, number];
|
|
11
|
+
export declare const edges: THREE.Vector3[];
|
|
12
|
+
export declare const edgeDimensions: [number, number, number][];
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { NgtThreeEvent } from 'angular-three';
|
|
2
|
+
import { Vector3 } from 'three';
|
|
3
|
+
import { NgtsGizmoViewcubeInputs } from './gizmo-viewcube-inputs';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class NgtsGizmoViewcubeEdgeCube extends NgtsGizmoViewcubeInputs {
|
|
6
|
+
readonly gizmoHelperApi: import("../gizmo-helper").NgtsGizmoHelperApi;
|
|
7
|
+
hover: boolean;
|
|
8
|
+
set dimensions(dimensions: [number, number, number]);
|
|
9
|
+
set position(position: Vector3);
|
|
10
|
+
initialize(): void;
|
|
11
|
+
onPointerMove(event: NgtThreeEvent<PointerEvent>): void;
|
|
12
|
+
onPointerOut(event: NgtThreeEvent<PointerEvent>): void;
|
|
13
|
+
onClick(event: NgtThreeEvent<MouseEvent>): void;
|
|
14
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsGizmoViewcubeEdgeCube, never>;
|
|
15
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsGizmoViewcubeEdgeCube, "ngts-gizmo-viewcube-edge-cube[dimensions][position]", never, { "dimensions": "dimensions"; "position": "position"; }, {}, never, never, true, never>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { NgtThreeEvent } from 'angular-three';
|
|
2
|
+
import { NgtsGizmoViewcubeInputs } from './gizmo-viewcube-inputs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class NgtsGizmoViewcubeFaceMaterial extends NgtsGizmoViewcubeInputs {
|
|
5
|
+
private readonly document;
|
|
6
|
+
set index(index: number);
|
|
7
|
+
set hover(hover: boolean);
|
|
8
|
+
set font(font: string);
|
|
9
|
+
set color(color: string);
|
|
10
|
+
initialize(): void;
|
|
11
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsGizmoViewcubeFaceMaterial, never>;
|
|
12
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsGizmoViewcubeFaceMaterial, "ngts-gizmo-viewcube-face-material[hover][index]", never, { "index": "index"; "hover": "hover"; "font": "font"; "color": "color"; }, {}, never, never, true, never>;
|
|
13
|
+
}
|
|
14
|
+
export declare class NgtsGizmoViewcubeFaceCube extends NgtsGizmoViewcubeInputs {
|
|
15
|
+
readonly gizmoHelperApi: import("../gizmo-helper").NgtsGizmoHelperApi;
|
|
16
|
+
set font(font: string);
|
|
17
|
+
set color(color: string);
|
|
18
|
+
hover: number;
|
|
19
|
+
onPointerMove(event: NgtThreeEvent<PointerEvent>): void;
|
|
20
|
+
onPointerOut(event: NgtThreeEvent<PointerEvent>): void;
|
|
21
|
+
onClick(event: NgtThreeEvent<MouseEvent>): void;
|
|
22
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsGizmoViewcubeFaceCube, never>;
|
|
23
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsGizmoViewcubeFaceCube, "ngts-gizmo-viewcube-face-cube", never, { "font": "font"; "color": "color"; }, {}, never, never, true, never>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { NgtRxStore, NgtStore, NgtThreeEvent } from 'angular-three';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare abstract class NgtsGizmoViewcubeInputs extends NgtRxStore {
|
|
5
|
+
protected readonly store: NgtStore;
|
|
6
|
+
set opacity(opacity: number);
|
|
7
|
+
set hoverColor(hoverColor: string);
|
|
8
|
+
set textColor(textColor: string);
|
|
9
|
+
set strokeColor(strokeColor: string);
|
|
10
|
+
set faces(faces: string[]);
|
|
11
|
+
set clickEmitter(clickEmitter: EventEmitter<NgtThreeEvent<MouseEvent>>);
|
|
12
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsGizmoViewcubeInputs, never>;
|
|
13
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<NgtsGizmoViewcubeInputs, never, never, { "opacity": "opacity"; "hoverColor": "hoverColor"; "textColor": "textColor"; "strokeColor": "strokeColor"; "faces": "faces"; "clickEmitter": "clickEmitter"; }, {}, never, never, false, never>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { NgtThreeEvent } from 'angular-three';
|
|
3
|
+
import { NgtsGizmoViewcubeInputs } from './gizmo-viewcube-inputs';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class NgtsGizmoViewcube extends NgtsGizmoViewcubeInputs {
|
|
6
|
+
readonly edges: import("three").Vector3[];
|
|
7
|
+
readonly edgeDimensions: [number, number, number][];
|
|
8
|
+
readonly corners: import("three").Vector3[];
|
|
9
|
+
readonly cornerDimensions: [number, number, number];
|
|
10
|
+
set font(font: string);
|
|
11
|
+
set color(color: string);
|
|
12
|
+
clicked: EventEmitter<NgtThreeEvent<MouseEvent>>;
|
|
13
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsGizmoViewcube, never>;
|
|
14
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsGizmoViewcube, "ngts-gizmo-viewcube", never, { "font": "font"; "color": "color"; }, { "clicked": "clicked"; }, never, never, true, never>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { NgtRxStore, NgtThreeEvent } from 'angular-three';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class NgtsGizmoViewportAxis extends NgtRxStore {
|
|
5
|
+
set color(color: string);
|
|
6
|
+
set rotation(rotation: [number, number, number]);
|
|
7
|
+
set scale(scale: [number, number, number]);
|
|
8
|
+
initialize(): void;
|
|
9
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsGizmoViewportAxis, never>;
|
|
10
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsGizmoViewportAxis, "ngts-gizmo-viewport-axis[color][rotation]", never, { "color": "color"; "rotation": "rotation"; "scale": "scale"; }, {}, never, never, true, never>;
|
|
11
|
+
}
|
|
12
|
+
export declare class NgtsGizmoViewportAxisHead extends NgtRxStore {
|
|
13
|
+
private readonly document;
|
|
14
|
+
private readonly store;
|
|
15
|
+
readonly gl: import("three").WebGLRenderer;
|
|
16
|
+
set arcStyle(arcStyle: string);
|
|
17
|
+
set label(label: string);
|
|
18
|
+
set labelColor(labelColor: string);
|
|
19
|
+
set axisHeadScale(axisHeadScale: number);
|
|
20
|
+
set disabled(disabled: boolean);
|
|
21
|
+
set font(font: string);
|
|
22
|
+
set clickEmitter(clickEmitter: EventEmitter<NgtThreeEvent<MouseEvent>>);
|
|
23
|
+
initialize(): void;
|
|
24
|
+
onPointerOver(event: NgtThreeEvent<PointerEvent>): void;
|
|
25
|
+
onPointerOut(event: NgtThreeEvent<PointerEvent>): void;
|
|
26
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsGizmoViewportAxisHead, never>;
|
|
27
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsGizmoViewportAxisHead, "ngts-gizmo-viewport-axis-head", never, { "arcStyle": "arcStyle"; "label": "label"; "labelColor": "labelColor"; "axisHeadScale": "axisHeadScale"; "disabled": "disabled"; "font": "font"; "clickEmitter": "clickEmitter"; }, {}, never, never, true, never>;
|
|
28
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { NgtRxStore, NgtThreeEvent } from 'angular-three';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class NgtsGizmoViewport extends NgtRxStore {
|
|
5
|
+
readonly gizmoHelperApi: import("../gizmo-helper").NgtsGizmoHelperApi;
|
|
6
|
+
readonly Math: Math;
|
|
7
|
+
set axisColors(axisColors: [string, string, string]);
|
|
8
|
+
set axisScale(axisScale: [number, number, number]);
|
|
9
|
+
set labels(labels: [string, string, string]);
|
|
10
|
+
set axisHeadScale(axisHeadScale: number);
|
|
11
|
+
set labelColor(labelColor: string);
|
|
12
|
+
set hideNegativeAxes(hideNegativeAxes: boolean);
|
|
13
|
+
set hideAxisHeads(hideAxisHeads: boolean);
|
|
14
|
+
set disabled(disabled: boolean);
|
|
15
|
+
set font(font: string);
|
|
16
|
+
clicked: EventEmitter<NgtThreeEvent<MouseEvent>>;
|
|
17
|
+
initialize(): void;
|
|
18
|
+
onPointerDown(event: NgtThreeEvent<PointerEvent>): void;
|
|
19
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsGizmoViewport, never>;
|
|
20
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsGizmoViewport, "ngts-gizmo-viewport", never, { "axisColors": "axisColors"; "axisScale": "axisScale"; "labels": "labels"; "axisHeadScale": "axisHeadScale"; "labelColor": "labelColor"; "hideNegativeAxes": "hideNegativeAxes"; "hideAxisHeads": "hideAxisHeads"; "disabled": "disabled"; "font": "font"; }, { "clicked": "clicked"; }, never, never, true, never>;
|
|
21
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { NgtRxStore } from 'angular-three';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare abstract class NgtsLineInput extends NgtRxStore {
|
|
4
|
+
set vertexColors(vertexColors: Array<THREE.Color | [number, number, number]>);
|
|
5
|
+
set lineWidth(lineWidth: number);
|
|
6
|
+
set alphaToCoverage(alphaToCoverage: boolean);
|
|
7
|
+
set color(color: THREE.ColorRepresentation);
|
|
8
|
+
set dashed(dashed: boolean);
|
|
9
|
+
set dashScale(dashScale: number);
|
|
10
|
+
set dashSize(dashSize: number);
|
|
11
|
+
set dashOffset(dashOffset: number);
|
|
12
|
+
set gapSize(gapSize: number);
|
|
13
|
+
set resolution(resolution: THREE.Vector2);
|
|
14
|
+
set wireframe(wireframe: boolean);
|
|
15
|
+
set worldUnits(worldUnits: boolean);
|
|
16
|
+
initialize(): void;
|
|
17
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsLineInput, never>;
|
|
18
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<NgtsLineInput, never, never, { "vertexColors": "vertexColors"; "lineWidth": "lineWidth"; "alphaToCoverage": "alphaToCoverage"; "color": "color"; "dashed": "dashed"; "dashScale": "dashScale"; "dashSize": "dashSize"; "dashOffset": "dashOffset"; "gapSize": "gapSize"; "resolution": "resolution"; "wireframe": "wireframe"; "worldUnits": "worldUnits"; }, {}, never, never, false, never>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { OnInit } from '@angular/core';
|
|
2
|
+
import { NgtAfterAttach } from 'angular-three';
|
|
3
|
+
import * as THREE from 'three';
|
|
4
|
+
import { Line2, LineGeometry, LineMaterial, LineSegments2 } from 'three-stdlib';
|
|
5
|
+
import { NgtsLineInput } from './line-input';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export declare class NgtsLine extends NgtsLineInput implements OnInit {
|
|
8
|
+
readonly Boolean: BooleanConstructor;
|
|
9
|
+
readonly lineMaterial: LineMaterial;
|
|
10
|
+
private readonly store;
|
|
11
|
+
lineRef: import("angular-three").NgtInjectedRef<LineSegments2 | Line2>;
|
|
12
|
+
set points(points: Array<THREE.Vector3 | THREE.Vector2 | [number, number, number] | [number, number] | number>);
|
|
13
|
+
set segments(segments: boolean);
|
|
14
|
+
onAfterGeometryAttached({ parent }: NgtAfterAttach<Line2 | LineSegments2, LineGeometry>): void;
|
|
15
|
+
initialize(): void;
|
|
16
|
+
ngOnInit(): void;
|
|
17
|
+
private computeLineDistances;
|
|
18
|
+
private disposeGeometry;
|
|
19
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsLine, never>;
|
|
20
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsLine, "ngts-line[points]", never, { "lineRef": "lineRef"; "points": "points"; "segments": "segments"; }, {}, never, never, true, never>;
|
|
21
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { OnInit } from '@angular/core';
|
|
2
|
+
import * as THREE from 'three';
|
|
3
|
+
import { Line2 } from 'three-stdlib';
|
|
4
|
+
import { NgtsLineInput } from '../line/line-input';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class NgtsQuadraticBezierLine extends NgtsLineInput implements OnInit {
|
|
7
|
+
readonly curve: THREE.QuadraticBezierCurve3;
|
|
8
|
+
lineRef: import("angular-three").NgtInjectedRef<Line2>;
|
|
9
|
+
set start(start: THREE.Vector3 | [number, number, number]);
|
|
10
|
+
set end(end: THREE.Vector3 | [number, number, number]);
|
|
11
|
+
set mid(mid: THREE.Vector3 | [number, number, number]);
|
|
12
|
+
set segments(segments: number);
|
|
13
|
+
initialize(): void;
|
|
14
|
+
ngOnInit(): void;
|
|
15
|
+
private replaceSetPoints;
|
|
16
|
+
private getPoints;
|
|
17
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsQuadraticBezierLine, never>;
|
|
18
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsQuadraticBezierLine, "ngts-quadratic-bezier-line", never, { "lineRef": "lineRef"; "start": "start"; "end": "end"; "mid": "mid"; "segments": "segments"; }, {}, never, never, true, never>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { EventEmitter, OnDestroy, OnInit } from '@angular/core';
|
|
2
|
+
import { NgtRxStore } from 'angular-three';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class NgtsText extends NgtRxStore implements OnInit, OnDestroy {
|
|
5
|
+
textRef: import("angular-three").NgtInjectedRef<Text>;
|
|
6
|
+
set text(text: string);
|
|
7
|
+
set characters(characters: string);
|
|
8
|
+
set font(font: string);
|
|
9
|
+
set anchorX(anchorX: number | 'left' | 'center' | 'right');
|
|
10
|
+
set anchorY(anchorY: number | 'top' | 'top-baseline' | 'middle' | 'bottom-baseline' | 'bottom');
|
|
11
|
+
sync: EventEmitter<Text>;
|
|
12
|
+
initialize(): void;
|
|
13
|
+
private readonly store;
|
|
14
|
+
private readonly troikaText;
|
|
15
|
+
ngOnInit(): void;
|
|
16
|
+
ngOnDestroy(): void;
|
|
17
|
+
private preloadFont;
|
|
18
|
+
private syncText;
|
|
19
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsText, never>;
|
|
20
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsText, "ngts-text[text]", never, { "textRef": "textRef"; "text": "text"; "characters": "characters"; "font": "font"; "anchorX": "anchorX"; "anchorY": "anchorY"; }, { "sync": "sync"; }, never, ["*"], true, never>;
|
|
21
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { NgtRxStore } from 'angular-three';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
declare type Glyph = {
|
|
4
|
+
_cachedOutline: string[];
|
|
5
|
+
ha: number;
|
|
6
|
+
o: string;
|
|
7
|
+
};
|
|
8
|
+
declare type FontData = {
|
|
9
|
+
boundingBox: {
|
|
10
|
+
yMax: number;
|
|
11
|
+
yMin: number;
|
|
12
|
+
};
|
|
13
|
+
familyName: string;
|
|
14
|
+
glyphs: {
|
|
15
|
+
[k: string]: Glyph;
|
|
16
|
+
};
|
|
17
|
+
resolution: number;
|
|
18
|
+
underlineThickness: number;
|
|
19
|
+
};
|
|
20
|
+
export declare class NgtsText3D extends NgtRxStore {
|
|
21
|
+
set font(font: FontData | string);
|
|
22
|
+
set text(text: string);
|
|
23
|
+
set bevelEnabled(bevelEnabled: boolean);
|
|
24
|
+
set bevelOffset(bevelOffset: number);
|
|
25
|
+
set bevelSize(bevelSize: number);
|
|
26
|
+
set bevelThickness(bevelThickness: number);
|
|
27
|
+
set curveSegments(curveSegments: number);
|
|
28
|
+
set bevelSegments(bevelSegments: number);
|
|
29
|
+
set height(height: number);
|
|
30
|
+
set size(size: number);
|
|
31
|
+
set lineHeight(lineHeight: number);
|
|
32
|
+
set letterSpacing(letterSpacing: number);
|
|
33
|
+
initialize(): void;
|
|
34
|
+
private readonly font$;
|
|
35
|
+
readonly geometryArgs$: import("rxjs").Observable<any[]>;
|
|
36
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsText3D, never>;
|
|
37
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsText3D, "ngts-text-3d[font]", never, { "font": "font"; "text": "text"; "bevelEnabled": "bevelEnabled"; "bevelOffset": "bevelOffset"; "bevelSize": "bevelSize"; "bevelThickness": "bevelThickness"; "curveSegments": "curveSegments"; "bevelSegments": "bevelSegments"; "height": "height"; "size": "size"; "lineHeight": "lineHeight"; "letterSpacing": "letterSpacing"; }, {}, never, ["*"], true, never>;
|
|
38
|
+
}
|
|
39
|
+
export {};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS1zb2JhLWFic3RyYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS1zb2JhL2Fic3RyYWN0aW9ucy9zcmMvYW5ndWxhci10aHJlZS1zb2JhLWFic3RyYWN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from './lib/billboard/billboard';
|
|
2
|
+
export * from './lib/catmull-rom-line/catmull-rom-line';
|
|
3
|
+
export * from './lib/cubic-bezier-line/cubic-bezier-line';
|
|
4
|
+
export * from './lib/gizmo-helper/gizmo-helper';
|
|
5
|
+
export * from './lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube';
|
|
6
|
+
export * from './lib/gizmo-helper/gizmo-viewport/gizmo-viewport';
|
|
7
|
+
export * from './lib/line/line';
|
|
8
|
+
export * from './lib/quadratic-bezier-line/quadratic-bezier-line';
|
|
9
|
+
export * from './lib/text-3d/text-3d';
|
|
10
|
+
export * from './lib/text/text';
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9hYnN0cmFjdGlvbnMvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxrREFBa0QsQ0FBQztBQUNqRSxjQUFjLGtEQUFrRCxDQUFDO0FBQ2pFLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9iaWxsYm9hcmQvYmlsbGJvYXJkJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NhdG11bGwtcm9tLWxpbmUvY2F0bXVsbC1yb20tbGluZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jdWJpYy1iZXppZXItbGluZS9jdWJpYy1iZXppZXItbGluZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9naXptby1oZWxwZXIvZ2l6bW8taGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2dpem1vLWhlbHBlci9naXptby12aWV3Y3ViZS9naXptby12aWV3Y3ViZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9naXptby1oZWxwZXIvZ2l6bW8tdmlld3BvcnQvZ2l6bW8tdmlld3BvcnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbGluZS9saW5lJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3F1YWRyYXRpYy1iZXppZXItbGluZS9xdWFkcmF0aWMtYmV6aWVyLWxpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGV4dC0zZC90ZXh0LTNkJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RleHQvdGV4dCc7XG4iXX0=
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA, Input } from '@angular/core';
|
|
2
|
+
import { extend, injectNgtRef, NgtRxStore } from 'angular-three';
|
|
3
|
+
import { Group } from 'three';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
extend({ Group });
|
|
6
|
+
export class NgtsBillboard extends NgtRxStore {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
9
|
+
this.billboardRef = injectNgtRef();
|
|
10
|
+
}
|
|
11
|
+
set follow(follow) {
|
|
12
|
+
this.set({ follow });
|
|
13
|
+
}
|
|
14
|
+
set lockX(lockX) {
|
|
15
|
+
this.set({ lockX });
|
|
16
|
+
}
|
|
17
|
+
set lockY(lockY) {
|
|
18
|
+
this.set({ lockY });
|
|
19
|
+
}
|
|
20
|
+
set lockZ(lockZ) {
|
|
21
|
+
this.set({ lockZ });
|
|
22
|
+
}
|
|
23
|
+
initialize() {
|
|
24
|
+
super.initialize();
|
|
25
|
+
this.set({ follow: true, lockX: false, lockY: false, lockZ: false });
|
|
26
|
+
}
|
|
27
|
+
onBeforeRender(event) {
|
|
28
|
+
const { follow, lockX, lockY, lockZ } = this.get();
|
|
29
|
+
if (!follow)
|
|
30
|
+
return;
|
|
31
|
+
// save prev rotation in case we're locking axises
|
|
32
|
+
const prevRotation = event.object.rotation.clone();
|
|
33
|
+
// always face the camera
|
|
34
|
+
event.object.quaternion.copy(event.state.camera.quaternion);
|
|
35
|
+
// readjust any axis that is locked
|
|
36
|
+
if (lockX)
|
|
37
|
+
event.object.rotation.x = prevRotation.x;
|
|
38
|
+
if (lockY)
|
|
39
|
+
event.object.rotation.y = prevRotation.y;
|
|
40
|
+
if (lockZ)
|
|
41
|
+
event.object.rotation.z = prevRotation.z;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
NgtsBillboard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsBillboard, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
45
|
+
NgtsBillboard.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.3", type: NgtsBillboard, isStandalone: true, selector: "ngts-billboard", inputs: { billboardRef: "billboardRef", follow: "follow", lockX: "lockX", lockY: "lockY", lockZ: "lockZ" }, usesInheritance: true, ngImport: i0, template: `
|
|
46
|
+
<ngt-group ngtCompound [ref]="billboardRef" (beforeRender)="onBeforeRender($any($event))">
|
|
47
|
+
<ng-content />
|
|
48
|
+
</ngt-group>
|
|
49
|
+
`, isInline: true });
|
|
50
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsBillboard, decorators: [{
|
|
51
|
+
type: Component,
|
|
52
|
+
args: [{
|
|
53
|
+
selector: 'ngts-billboard',
|
|
54
|
+
standalone: true,
|
|
55
|
+
template: `
|
|
56
|
+
<ngt-group ngtCompound [ref]="billboardRef" (beforeRender)="onBeforeRender($any($event))">
|
|
57
|
+
<ng-content />
|
|
58
|
+
</ngt-group>
|
|
59
|
+
`,
|
|
60
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
61
|
+
}]
|
|
62
|
+
}], propDecorators: { billboardRef: [{
|
|
63
|
+
type: Input
|
|
64
|
+
}], follow: [{
|
|
65
|
+
type: Input
|
|
66
|
+
}], lockX: [{
|
|
67
|
+
type: Input
|
|
68
|
+
}], lockY: [{
|
|
69
|
+
type: Input
|
|
70
|
+
}], lockZ: [{
|
|
71
|
+
type: Input
|
|
72
|
+
}] } });
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlsbGJvYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXNvYmEvYWJzdHJhY3Rpb25zL3NyYy9saWIvYmlsbGJvYXJkL2JpbGxib2FyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBd0IsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxPQUFPLENBQUM7O0FBRTlCLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFZbEIsTUFBTSxPQUFPLGFBQWMsU0FBUSxVQUFVO0lBVjdDOztRQVdhLGlCQUFZLEdBQUcsWUFBWSxFQUFTLENBQUM7S0FpQ2pEO0lBL0JHLElBQWEsTUFBTSxDQUFDLE1BQWU7UUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUNELElBQWEsS0FBSyxDQUFDLEtBQWM7UUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUNELElBQWEsS0FBSyxDQUFDLEtBQWM7UUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUNELElBQWEsS0FBSyxDQUFDLEtBQWM7UUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVRLFVBQVU7UUFDZixLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBa0M7UUFDN0MsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87UUFFcEIsa0RBQWtEO1FBQ2xELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25ELHlCQUF5QjtRQUN6QixLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUQsbUNBQW1DO1FBQ25DLElBQUksS0FBSztZQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ3BELElBQUksS0FBSztZQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ3BELElBQUksS0FBSztZQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7OzBHQWpDUSxhQUFhOzhGQUFiLGFBQWEsNk1BUFo7Ozs7S0FJVDsyRkFHUSxhQUFhO2tCQVZ6QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7S0FJVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDcEM7OEJBRVksWUFBWTtzQkFBcEIsS0FBSztnQkFFTyxNQUFNO3NCQUFsQixLQUFLO2dCQUdPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBR08sS0FBSztzQkFBakIsS0FBSztnQkFHTyxLQUFLO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZXh0ZW5kLCBpbmplY3ROZ3RSZWYsIE5ndEJlZm9yZVJlbmRlckV2ZW50LCBOZ3RSeFN0b3JlIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBHcm91cCB9IGZyb20gJ3RocmVlJztcblxuZXh0ZW5kKHsgR3JvdXAgfSk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0cy1iaWxsYm9hcmQnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5ndC1ncm91cCBuZ3RDb21wb3VuZCBbcmVmXT1cImJpbGxib2FyZFJlZlwiIChiZWZvcmVSZW5kZXIpPVwib25CZWZvcmVSZW5kZXIoJGFueSgkZXZlbnQpKVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgLz5cbiAgICAgICAgPC9uZ3QtZ3JvdXA+XG4gICAgYCxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNCaWxsYm9hcmQgZXh0ZW5kcyBOZ3RSeFN0b3JlIHtcbiAgICBASW5wdXQoKSBiaWxsYm9hcmRSZWYgPSBpbmplY3ROZ3RSZWY8R3JvdXA+KCk7XG5cbiAgICBASW5wdXQoKSBzZXQgZm9sbG93KGZvbGxvdzogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldCh7IGZvbGxvdyB9KTtcbiAgICB9XG4gICAgQElucHV0KCkgc2V0IGxvY2tYKGxvY2tYOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbG9ja1ggfSk7XG4gICAgfVxuICAgIEBJbnB1dCgpIHNldCBsb2NrWShsb2NrWTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldCh7IGxvY2tZIH0pO1xuICAgIH1cbiAgICBASW5wdXQoKSBzZXQgbG9ja1oobG9ja1o6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBsb2NrWiB9KTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBpbml0aWFsaXplKCkge1xuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgICAgIHRoaXMuc2V0KHsgZm9sbG93OiB0cnVlLCBsb2NrWDogZmFsc2UsIGxvY2tZOiBmYWxzZSwgbG9ja1o6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIG9uQmVmb3JlUmVuZGVyKGV2ZW50OiBOZ3RCZWZvcmVSZW5kZXJFdmVudDxHcm91cD4pIHtcbiAgICAgICAgY29uc3QgeyBmb2xsb3csIGxvY2tYLCBsb2NrWSwgbG9ja1ogfSA9IHRoaXMuZ2V0KCk7XG4gICAgICAgIGlmICghZm9sbG93KSByZXR1cm47XG5cbiAgICAgICAgLy8gc2F2ZSBwcmV2IHJvdGF0aW9uIGluIGNhc2Ugd2UncmUgbG9ja2luZyBheGlzZXNcbiAgICAgICAgY29uc3QgcHJldlJvdGF0aW9uID0gZXZlbnQub2JqZWN0LnJvdGF0aW9uLmNsb25lKCk7XG4gICAgICAgIC8vIGFsd2F5cyBmYWNlIHRoZSBjYW1lcmFcbiAgICAgICAgZXZlbnQub2JqZWN0LnF1YXRlcm5pb24uY29weShldmVudC5zdGF0ZS5jYW1lcmEucXVhdGVybmlvbik7XG4gICAgICAgIC8vIHJlYWRqdXN0IGFueSBheGlzIHRoYXQgaXMgbG9ja2VkXG4gICAgICAgIGlmIChsb2NrWCkgZXZlbnQub2JqZWN0LnJvdGF0aW9uLnggPSBwcmV2Um90YXRpb24ueDtcbiAgICAgICAgaWYgKGxvY2tZKSBldmVudC5vYmplY3Qucm90YXRpb24ueSA9IHByZXZSb3RhdGlvbi55O1xuICAgICAgICBpZiAobG9ja1opIGV2ZW50Lm9iamVjdC5yb3RhdGlvbi56ID0gcHJldlJvdGF0aW9uLno7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA, Input } from '@angular/core';
|
|
2
|
+
import { injectNgtRef, startWithUndefined } from 'angular-three';
|
|
3
|
+
import { combineLatest, map } from 'rxjs';
|
|
4
|
+
import * as THREE from 'three';
|
|
5
|
+
import { CatmullRomCurve3 } from 'three';
|
|
6
|
+
import { NgtsLine } from '../line/line';
|
|
7
|
+
import { NgtsLineInput } from '../line/line-input';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
export class NgtsCatmullRomLine extends NgtsLineInput {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments);
|
|
12
|
+
this.lineRef = injectNgtRef();
|
|
13
|
+
}
|
|
14
|
+
set points(points) {
|
|
15
|
+
this.set({ points });
|
|
16
|
+
}
|
|
17
|
+
set closed(closed) {
|
|
18
|
+
this.set({ closed });
|
|
19
|
+
}
|
|
20
|
+
set curveType(curveType) {
|
|
21
|
+
this.set({ curveType });
|
|
22
|
+
}
|
|
23
|
+
set tension(tension) {
|
|
24
|
+
this.set({ tension });
|
|
25
|
+
}
|
|
26
|
+
set segments(segments) {
|
|
27
|
+
this.set({ segments });
|
|
28
|
+
}
|
|
29
|
+
initialize() {
|
|
30
|
+
super.initialize();
|
|
31
|
+
this.set({ closed: false, curveType: 'centripetal', tension: 0.5, segments: 64 });
|
|
32
|
+
this.connect('curve', combineLatest([
|
|
33
|
+
this.select('points'),
|
|
34
|
+
this.select('closed'),
|
|
35
|
+
this.select('curveType'),
|
|
36
|
+
this.select('tension'),
|
|
37
|
+
]).pipe(map(([points, closed, curveType, tension]) => {
|
|
38
|
+
const mappedPoints = points.map((p) => p instanceof THREE.Vector3 ? p : new THREE.Vector3(...p));
|
|
39
|
+
return new CatmullRomCurve3(mappedPoints, closed, curveType, tension);
|
|
40
|
+
})));
|
|
41
|
+
this.connect('segmentedPoints', combineLatest([this.select('curve'), this.select('segments')]).pipe(map(([curve, segments]) => curve.getPoints(segments))));
|
|
42
|
+
this.connect('interpolatedVertexColors', combineLatest([this.select('vertexColors').pipe(startWithUndefined()), this.select('segments')]).pipe(map(([vertexColors, segments]) => {
|
|
43
|
+
if (!vertexColors || vertexColors.length < 2)
|
|
44
|
+
return undefined;
|
|
45
|
+
if (vertexColors.length === segments + 1)
|
|
46
|
+
return vertexColors;
|
|
47
|
+
const mappedColors = vertexColors.map((color) => color instanceof THREE.Color ? color : new THREE.Color(...color));
|
|
48
|
+
if (this.get('closed'))
|
|
49
|
+
mappedColors.push(mappedColors[0].clone());
|
|
50
|
+
const iColors = [mappedColors[0]];
|
|
51
|
+
const divisions = segments / (mappedColors.length - 1);
|
|
52
|
+
for (let i = 0; i < segments; i++) {
|
|
53
|
+
const alpha = (i % divisions) / divisions;
|
|
54
|
+
const colorIndex = Math.floor(i / divisions);
|
|
55
|
+
iColors.push(mappedColors[colorIndex].clone().lerp(mappedColors[colorIndex + 1], alpha));
|
|
56
|
+
}
|
|
57
|
+
iColors.push(mappedColors[mappedColors.length - 1]);
|
|
58
|
+
})));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
NgtsCatmullRomLine.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsCatmullRomLine, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
62
|
+
NgtsCatmullRomLine.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.3", type: NgtsCatmullRomLine, isStandalone: true, selector: "ngts-catmull-rom-line[points]", inputs: { lineRef: "lineRef", points: "points", closed: "closed", curveType: "curveType", tension: "tension", segments: "segments" }, usesInheritance: true, ngImport: i0, template: `
|
|
63
|
+
<ngts-line
|
|
64
|
+
[lineRef]="lineRef"
|
|
65
|
+
[points]="get('segmentedPoints')"
|
|
66
|
+
[color]="get('color')"
|
|
67
|
+
[vertexColors]="get('interpolatedVertexColors')"
|
|
68
|
+
[resolution]="get('resolution')"
|
|
69
|
+
[lineWidth]="get('lineWidth')"
|
|
70
|
+
[alphaToCoverage]="get('alphaToCoverage')"
|
|
71
|
+
[dashed]="get('dashed')"
|
|
72
|
+
[dashScale]="get('dashScale')"
|
|
73
|
+
[dashOffset]="get('dashOffset')"
|
|
74
|
+
[dashSize]="get('dashSize')"
|
|
75
|
+
[gapSize]="get('gapSize')"
|
|
76
|
+
[wireframe]="get('wireframe')"
|
|
77
|
+
[worldUnits]="get('worldUnits')"
|
|
78
|
+
/>
|
|
79
|
+
`, isInline: true, dependencies: [{ kind: "component", type: NgtsLine, selector: "ngts-line[points]", inputs: ["lineRef", "points", "segments"] }] });
|
|
80
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsCatmullRomLine, decorators: [{
|
|
81
|
+
type: Component,
|
|
82
|
+
args: [{
|
|
83
|
+
selector: 'ngts-catmull-rom-line[points]',
|
|
84
|
+
standalone: true,
|
|
85
|
+
template: `
|
|
86
|
+
<ngts-line
|
|
87
|
+
[lineRef]="lineRef"
|
|
88
|
+
[points]="get('segmentedPoints')"
|
|
89
|
+
[color]="get('color')"
|
|
90
|
+
[vertexColors]="get('interpolatedVertexColors')"
|
|
91
|
+
[resolution]="get('resolution')"
|
|
92
|
+
[lineWidth]="get('lineWidth')"
|
|
93
|
+
[alphaToCoverage]="get('alphaToCoverage')"
|
|
94
|
+
[dashed]="get('dashed')"
|
|
95
|
+
[dashScale]="get('dashScale')"
|
|
96
|
+
[dashOffset]="get('dashOffset')"
|
|
97
|
+
[dashSize]="get('dashSize')"
|
|
98
|
+
[gapSize]="get('gapSize')"
|
|
99
|
+
[wireframe]="get('wireframe')"
|
|
100
|
+
[worldUnits]="get('worldUnits')"
|
|
101
|
+
/>
|
|
102
|
+
`,
|
|
103
|
+
imports: [NgtsLine],
|
|
104
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
105
|
+
}]
|
|
106
|
+
}], propDecorators: { lineRef: [{
|
|
107
|
+
type: Input
|
|
108
|
+
}], points: [{
|
|
109
|
+
type: Input
|
|
110
|
+
}], closed: [{
|
|
111
|
+
type: Input
|
|
112
|
+
}], curveType: [{
|
|
113
|
+
type: Input
|
|
114
|
+
}], tension: [{
|
|
115
|
+
type: Input
|
|
116
|
+
}], segments: [{
|
|
117
|
+
type: Input
|
|
118
|
+
}] } });
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0bXVsbC1yb20tbGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS1zb2JhL2Fic3RyYWN0aW9ucy9zcmMvbGliL2NhdG11bGwtcm9tLWxpbmUvY2F0bXVsbC1yb20tbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUV6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUEwQm5ELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxhQUFhO0lBeEJyRDs7UUF5QmEsWUFBTyxHQUFHLFlBQVksRUFBUyxDQUFDO0tBMkU1QztJQXpFRyxJQUFhLE1BQU0sQ0FDZixNQUFtRztRQUVuRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBYSxNQUFNLENBQUMsTUFBZTtRQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBYSxTQUFTLENBQUMsU0FBbUQ7UUFDdEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQWEsT0FBTyxDQUFDLE9BQWU7UUFD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c0JBQXJCLEtBQUs7Z0JBSU8sT0FBTztzQkFBbkIsS0FBSztnQkFJTyxRQUFRO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0Tmd0UmVmLCBzdGFydFdpdGhVbmRlZmluZWQgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgQ2F0bXVsbFJvbUN1cnZlMyB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IExpbmUyIH0gZnJvbSAndGhyZWUtc3RkbGliJztcbmltcG9ydCB7IE5ndHNMaW5lIH0gZnJvbSAnLi4vbGluZS9saW5lJztcbmltcG9ydCB7IE5ndHNMaW5lSW5wdXQgfSBmcm9tICcuLi9saW5lL2xpbmUtaW5wdXQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndHMtY2F0bXVsbC1yb20tbGluZVtwb2ludHNdJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3RzLWxpbmVcbiAgICAgICAgICAgIFtsaW5lUmVmXT1cImxpbmVSZWZcIlxuICAgICAgICAgICAgW3BvaW50c109XCJnZXQoJ3NlZ21lbnRlZFBvaW50cycpXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJnZXQoJ2NvbG9yJylcIlxuICAgICAgICAgICAgW3ZlcnRleENvbG9yc109XCJnZXQoJ2ludGVycG9sYXRlZFZlcnRleENvbG9ycycpXCJcbiAgICAgICAgICAgIFtyZXNvbHV0aW9uXT1cImdldCgncmVzb2x1dGlvbicpXCJcbiAgICAgICAgICAgIFtsaW5lV2lkdGhdPVwiZ2V0KCdsaW5lV2lkdGgnKVwiXG4gICAgICAgICAgICBbYWxwaGFUb0NvdmVyYWdlXT1cImdldCgnYWxwaGFUb0NvdmVyYWdlJylcIlxuICAgICAgICAgICAgW2Rhc2hlZF09XCJnZXQoJ2Rhc2hlZCcpXCJcbiAgICAgICAgICAgIFtkYXNoU2NhbGVdPVwiZ2V0KCdkYXNoU2NhbGUnKVwiXG4gICAgICAgICAgICBbZGFzaE9mZnNldF09XCJnZXQoJ2Rhc2hPZmZzZXQnKVwiXG4gICAgICAgICAgICBbZGFzaFNpemVdPVwiZ2V0KCdkYXNoU2l6ZScpXCJcbiAgICAgICAgICAgIFtnYXBTaXplXT1cImdldCgnZ2FwU2l6ZScpXCJcbiAgICAgICAgICAgIFt3aXJlZnJhbWVdPVwiZ2V0KCd3aXJlZnJhbWUnKVwiXG4gICAgICAgICAgICBbd29ybGRVbml0c109XCJnZXQoJ3dvcmxkVW5pdHMnKVwiXG4gICAgICAgIC8+XG4gICAgYCxcbiAgICBpbXBvcnRzOiBbTmd0c0xpbmVdLFxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0NhdG11bGxSb21MaW5lIGV4dGVuZHMgTmd0c0xpbmVJbnB1dCB7XG4gICAgQElucHV0KCkgbGluZVJlZiA9IGluamVjdE5ndFJlZjxMaW5lMj4oKTtcblxuICAgIEBJbnB1dCgpIHNldCBwb2ludHMoXG4gICAgICAgIHBvaW50czogQXJyYXk8VEhSRUUuVmVjdG9yMyB8IFRIUkVFLlZlY3RvcjIgfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBbbnVtYmVyLCBudW1iZXJdIHwgbnVtYmVyPlxuICAgICkge1xuICAgICAgICB0aGlzLnNldCh7IHBvaW50cyB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgY2xvc2VkKGNsb3NlZDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldCh7IGNsb3NlZCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgY3VydmVUeXBlKGN1cnZlVHlwZTogJ2NlbnRyaXBldGFsJyB8ICdjaG9yZGFsJyB8ICdjYXRtdWxscm9tJykge1xuICAgICAgICB0aGlzLnNldCh7IGN1cnZlVHlwZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgdGVuc2lvbih0ZW5zaW9uOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyB0ZW5zaW9uIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBzZWdtZW50cyhzZWdtZW50czogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc2VnbWVudHMgfSk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgICAgICB0aGlzLnNldCh7IGNsb3NlZDogZmFsc2UsIGN1cnZlVHlwZTogJ2NlbnRyaXBldGFsJywgdGVuc2lvbjogMC41LCBzZWdtZW50czogNjQgfSk7XG4gICAgICAgIHRoaXMuY29ubmVjdChcbiAgICAgICAgICAgICdjdXJ2ZScsXG4gICAgICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCgncG9pbnRzJyksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ2Nsb3NlZCcpLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KCdjdXJ2ZVR5cGUnKSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCgndGVuc2lvbicpLFxuICAgICAgICAgICAgXSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKFtwb2ludHMsIGNsb3NlZCwgY3VydmVUeXBlLCB0ZW5zaW9uXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWRQb2ludHMgPSAocG9pbnRzIGFzIE5ndHNDYXRtdWxsUm9tTGluZVsncG9pbnRzJ10pLm1hcCgocCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHAgaW5zdGFuY2VvZiBUSFJFRS5WZWN0b3IzID8gcCA6IG5ldyBUSFJFRS5WZWN0b3IzKC4uLihwIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSkpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ2F0bXVsbFJvbUN1cnZlMyhtYXBwZWRQb2ludHMsIGNsb3NlZCwgY3VydmVUeXBlLCB0ZW5zaW9uKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuY29ubmVjdChcbiAgICAgICAgICAgICdzZWdtZW50ZWRQb2ludHMnLFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5zZWxlY3QoJ2N1cnZlJyksIHRoaXMuc2VsZWN0KCdzZWdtZW50cycpXSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKFtjdXJ2ZSwgc2VnbWVudHNdKSA9PiBjdXJ2ZS5nZXRQb2ludHMoc2VnbWVudHMpKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuY29ubmVjdChcbiAgICAgICAgICAgICdpbnRlcnBvbGF0ZWRWZXJ0ZXhDb2xvcnMnLFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5zZWxlY3QoJ3ZlcnRleENvbG9ycycpLnBpcGUoc3RhcnRXaXRoVW5kZWZpbmVkKCkpLCB0aGlzLnNlbGVjdCgnc2VnbWVudHMnKV0pLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChbdmVydGV4Q29sb3JzLCBzZWdtZW50c10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2ZXJ0ZXhDb2xvcnMgfHwgdmVydGV4Q29sb3JzLmxlbmd0aCA8IDIpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXhDb2xvcnMubGVuZ3RoID09PSBzZWdtZW50cyArIDEpIHJldHVybiB2ZXJ0ZXhDb2xvcnM7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkQ29sb3JzID0gdmVydGV4Q29sb3JzLm1hcCgoY29sb3I6IFRIUkVFLkNvbG9yIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgaW5zdGFuY2VvZiBUSFJFRS5Db2xvciA/IGNvbG9yIDogbmV3IFRIUkVFLkNvbG9yKC4uLmNvbG9yKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXQoJ2Nsb3NlZCcpKSBtYXBwZWRDb2xvcnMucHVzaChtYXBwZWRDb2xvcnNbMF0uY2xvbmUoKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaUNvbG9yczogVEhSRUUuQ29sb3JbXSA9IFttYXBwZWRDb2xvcnNbMF1dO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXZpc2lvbnMgPSBzZWdtZW50cyAvIChtYXBwZWRDb2xvcnMubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VnbWVudHM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxwaGEgPSAoaSAlIGRpdmlzaW9ucykgLyBkaXZpc2lvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xvckluZGV4ID0gTWF0aC5mbG9vcihpIC8gZGl2aXNpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlDb2xvcnMucHVzaChtYXBwZWRDb2xvcnNbY29sb3JJbmRleF0uY2xvbmUoKS5sZXJwKG1hcHBlZENvbG9yc1tjb2xvckluZGV4ICsgMV0sIGFscGhhKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaUNvbG9ycy5wdXNoKG1hcHBlZENvbG9yc1ttYXBwZWRDb2xvcnMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
|