angular-three-soba 1.4.0 → 1.6.0-beta.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.
Files changed (51) hide show
  1. package/abstractions/index.d.ts +4 -0
  2. package/abstractions/lib/catmull-rom-line/catmull-rom-line.d.ts +15 -0
  3. package/abstractions/lib/cubic-bezier-line/cubic-bezier-line.d.ts +15 -0
  4. package/abstractions/lib/line/line-input.d.ts +19 -0
  5. package/abstractions/lib/line/line.d.ts +21 -0
  6. package/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.d.ts +19 -0
  7. package/abstractions/lib/text/text.d.ts +1 -1
  8. package/esm2020/abstractions/index.mjs +5 -1
  9. package/esm2020/abstractions/lib/billboard/billboard.mjs +6 -5
  10. package/esm2020/abstractions/lib/catmull-rom-line/catmull-rom-line.mjs +119 -0
  11. package/esm2020/abstractions/lib/cubic-bezier-line/cubic-bezier-line.mjs +98 -0
  12. package/esm2020/abstractions/lib/gizmo-helper/gizmo-helper.mjs +6 -6
  13. package/esm2020/abstractions/lib/line/line-input.mjs +75 -0
  14. package/esm2020/abstractions/lib/line/line.mjs +136 -0
  15. package/esm2020/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.mjs +127 -0
  16. package/esm2020/abstractions/lib/text/text.mjs +28 -26
  17. package/esm2020/cameras/lib/orthographic-camera/orthographic-camera.mjs +6 -6
  18. package/esm2020/cameras/lib/perspective-camera/perspective-camera.mjs +6 -6
  19. package/esm2020/performance/lib/detailed/detailed.mjs +6 -5
  20. package/esm2020/staging/lib/accumulative-shadows/accumulative-shadows.mjs +8 -8
  21. package/esm2020/staging/lib/accumulative-shadows/randomized-lights.mjs +6 -6
  22. package/esm2020/staging/lib/bounds/bounds.mjs +6 -5
  23. package/esm2020/staging/lib/center/center.mjs +10 -9
  24. package/esm2020/staging/lib/cloud/cloud.mjs +6 -6
  25. package/esm2020/staging/lib/contact-shadows/contact-shadows.mjs +14 -10
  26. package/esm2020/staging/lib/environment/environment-portal.mjs +10 -6
  27. package/esm2020/staging/lib/float/float.mjs +6 -5
  28. package/esm2020/staging/lib/sky/sky.mjs +23 -22
  29. package/esm2020/staging/lib/sparkles/sparkles.mjs +8 -8
  30. package/esm2020/staging/lib/stage/stage.mjs +2 -5
  31. package/esm2020/staging/lib/stars/stars.mjs +6 -6
  32. package/fesm2015/angular-three-soba-abstractions.mjs +564 -38
  33. package/fesm2015/angular-three-soba-abstractions.mjs.map +1 -1
  34. package/fesm2015/angular-three-soba-cameras.mjs +9 -9
  35. package/fesm2015/angular-three-soba-cameras.mjs.map +1 -1
  36. package/fesm2015/angular-three-soba-performance.mjs +5 -4
  37. package/fesm2015/angular-three-soba-performance.mjs.map +1 -1
  38. package/fesm2015/angular-three-soba-staging.mjs +83 -74
  39. package/fesm2015/angular-three-soba-staging.mjs.map +1 -1
  40. package/fesm2020/angular-three-soba-abstractions.mjs +564 -38
  41. package/fesm2020/angular-three-soba-abstractions.mjs.map +1 -1
  42. package/fesm2020/angular-three-soba-cameras.mjs +9 -9
  43. package/fesm2020/angular-three-soba-cameras.mjs.map +1 -1
  44. package/fesm2020/angular-three-soba-performance.mjs +5 -4
  45. package/fesm2020/angular-three-soba-performance.mjs.map +1 -1
  46. package/fesm2020/angular-three-soba-staging.mjs +83 -74
  47. package/fesm2020/angular-three-soba-staging.mjs.map +1 -1
  48. package/package.json +3 -3
  49. package/plugin/package.json +1 -1
  50. package/staging/lib/sky/sky.d.ts +2 -3
  51. package/staging/lib/stage/stage.d.ts +1 -1
@@ -1,6 +1,10 @@
1
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';
2
4
  export * from './lib/gizmo-helper/gizmo-helper';
3
5
  export * from './lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube';
4
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';
5
9
  export * from './lib/text-3d/text-3d';
6
10
  export * from './lib/text/text';
@@ -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,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, 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
+ line: Line2 | LineSegments2 | null;
12
+ lineRef: import("angular-three").NgtInjectedRef<Line2 | LineSegments2>;
13
+ set points(points: Array<THREE.Vector3 | THREE.Vector2 | [number, number, number] | [number, number] | number>);
14
+ set segments(segments: boolean);
15
+ onAfterAttach({ parent }: NgtAfterAttach<Line2 | LineSegments2>): void;
16
+ initialize(): void;
17
+ ngOnInit(): void;
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
+ }
@@ -11,7 +11,7 @@ export declare class NgtsText extends NgtRxStore implements OnInit, OnDestroy {
11
11
  sync: EventEmitter<Text>;
12
12
  initialize(): void;
13
13
  private readonly store;
14
- private readonly troikaText;
14
+ readonly troikaText: any;
15
15
  ngOnInit(): void;
16
16
  ngOnDestroy(): void;
17
17
  private preloadFont;
@@ -1,7 +1,11 @@
1
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';
2
4
  export * from './lib/gizmo-helper/gizmo-helper';
3
5
  export * from './lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube';
4
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';
5
9
  export * from './lib/text-3d/text-3d';
6
10
  export * from './lib/text/text';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9hYnN0cmFjdGlvbnMvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLGtEQUFrRCxDQUFDO0FBQ2pFLGNBQWMsa0RBQWtELENBQUM7QUFDakUsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvYmlsbGJvYXJkL2JpbGxib2FyZCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9naXptby1oZWxwZXIvZ2l6bW8taGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2dpem1vLWhlbHBlci9naXptby12aWV3Y3ViZS9naXptby12aWV3Y3ViZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9naXptby1oZWxwZXIvZ2l6bW8tdmlld3BvcnQvZ2l6bW8tdmlld3BvcnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGV4dC0zZC90ZXh0LTNkJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RleHQvdGV4dCc7XG4iXX0=
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9hYnN0cmFjdGlvbnMvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxrREFBa0QsQ0FBQztBQUNqRSxjQUFjLGtEQUFrRCxDQUFDO0FBQ2pFLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9iaWxsYm9hcmQvYmlsbGJvYXJkJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NhdG11bGwtcm9tLWxpbmUvY2F0bXVsbC1yb20tbGluZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jdWJpYy1iZXppZXItbGluZS9jdWJpYy1iZXppZXItbGluZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9naXptby1oZWxwZXIvZ2l6bW8taGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2dpem1vLWhlbHBlci9naXptby12aWV3Y3ViZS9naXptby12aWV3Y3ViZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9naXptby1oZWxwZXIvZ2l6bW8tdmlld3BvcnQvZ2l6bW8tdmlld3BvcnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbGluZS9saW5lJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3F1YWRyYXRpYy1iZXppZXItbGluZS9xdWFkcmF0aWMtYmV6aWVyLWxpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGV4dC0zZC90ZXh0LTNkJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RleHQvdGV4dCc7XG4iXX0=
@@ -1,5 +1,5 @@
1
1
  import { Component, CUSTOM_ELEMENTS_SCHEMA, Input } from '@angular/core';
2
- import { extend, injectNgtRef, NgtRxStore } from 'angular-three';
2
+ import { extend, injectNgtRef, NgtRef, NgtRxStore } from 'angular-three';
3
3
  import { Group } from 'three';
4
4
  import * as i0 from "@angular/core";
5
5
  extend({ Group });
@@ -43,20 +43,21 @@ export class NgtsBillboard extends NgtRxStore {
43
43
  }
44
44
  NgtsBillboard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsBillboard, deps: null, target: i0.ɵɵFactoryTarget.Component });
45
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))">
46
+ <ngt-group ngtCompound *ref="billboardRef" (beforeRender)="onBeforeRender($any($event))">
47
47
  <ng-content />
48
48
  </ngt-group>
49
- `, isInline: true });
49
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtRef, selector: "[ref]", inputs: ["ref"] }] });
50
50
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsBillboard, decorators: [{
51
51
  type: Component,
52
52
  args: [{
53
53
  selector: 'ngts-billboard',
54
54
  standalone: true,
55
55
  template: `
56
- <ngt-group ngtCompound [ref]="billboardRef" (beforeRender)="onBeforeRender($any($event))">
56
+ <ngt-group ngtCompound *ref="billboardRef" (beforeRender)="onBeforeRender($any($event))">
57
57
  <ng-content />
58
58
  </ngt-group>
59
59
  `,
60
+ imports: [NgtRef],
60
61
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
61
62
  }]
62
63
  }], propDecorators: { billboardRef: [{
@@ -70,4 +71,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImpor
70
71
  }], lockZ: [{
71
72
  type: Input
72
73
  }] } });
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlsbGJvYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXNvYmEvYWJzdHJhY3Rpb25zL3NyYy9saWIvYmlsbGJvYXJkL2JpbGxib2FyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBd0IsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxPQUFPLENBQUM7O0FBRTlCLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFZbEIsTUFBTSxPQUFPLGFBQWMsU0FBUSxVQUFVO0lBVjdDOztRQVdhLGlCQUFZLEdBQUcsWUFBWSxFQUFTLENBQUM7S0FpQ2pEO0lBL0JHLElBQWEsTUFBTSxDQUFDLE1BQWU7UUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUNELElBQWEsS0FBSyxDQUFDLEtBQWM7UUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUNELElBQWEsS0FBSyxDQUFDLEtBQWM7UUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUNELElBQWEsS0FBSyxDQUFDLEtBQWM7UUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVRLFVBQVU7UUFDZixLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBa0M7UUFDN0MsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87UUFFcEIsa0RBQWtEO1FBQ2xELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25ELHlCQUF5QjtRQUN6QixLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUQsbUNBQW1DO1FBQ25DLElBQUksS0FBSztZQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ3BELElBQUksS0FBSztZQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ3BELElBQUksS0FBSztZQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7OzBHQWpDUSxhQUFhOzhGQUFiLGFBQWEsNk1BUFo7Ozs7S0FJVDsyRkFHUSxhQUFhO2tCQVZ6QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7S0FJVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDcEM7OEJBRVksWUFBWTtzQkFBcEIsS0FBSztnQkFFTyxNQUFNO3NCQUFsQixLQUFLO2dCQUdPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBR08sS0FBSztzQkFBakIsS0FBSztnQkFHTyxLQUFLO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZXh0ZW5kLCBpbmplY3ROZ3RSZWYsIE5ndEJlZm9yZVJlbmRlckV2ZW50LCBOZ3RSeFN0b3JlIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBHcm91cCB9IGZyb20gJ3RocmVlJztcblxuZXh0ZW5kKHsgR3JvdXAgfSk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0cy1iaWxsYm9hcmQnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5ndC1ncm91cCBuZ3RDb21wb3VuZCBbcmVmXT1cImJpbGxib2FyZFJlZlwiIChiZWZvcmVSZW5kZXIpPVwib25CZWZvcmVSZW5kZXIoJGFueSgkZXZlbnQpKVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgLz5cbiAgICAgICAgPC9uZ3QtZ3JvdXA+XG4gICAgYCxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNCaWxsYm9hcmQgZXh0ZW5kcyBOZ3RSeFN0b3JlIHtcbiAgICBASW5wdXQoKSBiaWxsYm9hcmRSZWYgPSBpbmplY3ROZ3RSZWY8R3JvdXA+KCk7XG5cbiAgICBASW5wdXQoKSBzZXQgZm9sbG93KGZvbGxvdzogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldCh7IGZvbGxvdyB9KTtcbiAgICB9XG4gICAgQElucHV0KCkgc2V0IGxvY2tYKGxvY2tYOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbG9ja1ggfSk7XG4gICAgfVxuICAgIEBJbnB1dCgpIHNldCBsb2NrWShsb2NrWTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldCh7IGxvY2tZIH0pO1xuICAgIH1cbiAgICBASW5wdXQoKSBzZXQgbG9ja1oobG9ja1o6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBsb2NrWiB9KTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBpbml0aWFsaXplKCkge1xuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgICAgIHRoaXMuc2V0KHsgZm9sbG93OiB0cnVlLCBsb2NrWDogZmFsc2UsIGxvY2tZOiBmYWxzZSwgbG9ja1o6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIG9uQmVmb3JlUmVuZGVyKGV2ZW50OiBOZ3RCZWZvcmVSZW5kZXJFdmVudDxHcm91cD4pIHtcbiAgICAgICAgY29uc3QgeyBmb2xsb3csIGxvY2tYLCBsb2NrWSwgbG9ja1ogfSA9IHRoaXMuZ2V0KCk7XG4gICAgICAgIGlmICghZm9sbG93KSByZXR1cm47XG5cbiAgICAgICAgLy8gc2F2ZSBwcmV2IHJvdGF0aW9uIGluIGNhc2Ugd2UncmUgbG9ja2luZyBheGlzZXNcbiAgICAgICAgY29uc3QgcHJldlJvdGF0aW9uID0gZXZlbnQub2JqZWN0LnJvdGF0aW9uLmNsb25lKCk7XG4gICAgICAgIC8vIGFsd2F5cyBmYWNlIHRoZSBjYW1lcmFcbiAgICAgICAgZXZlbnQub2JqZWN0LnF1YXRlcm5pb24uY29weShldmVudC5zdGF0ZS5jYW1lcmEucXVhdGVybmlvbik7XG4gICAgICAgIC8vIHJlYWRqdXN0IGFueSBheGlzIHRoYXQgaXMgbG9ja2VkXG4gICAgICAgIGlmIChsb2NrWCkgZXZlbnQub2JqZWN0LnJvdGF0aW9uLnggPSBwcmV2Um90YXRpb24ueDtcbiAgICAgICAgaWYgKGxvY2tZKSBldmVudC5vYmplY3Qucm90YXRpb24ueSA9IHByZXZSb3RhdGlvbi55O1xuICAgICAgICBpZiAobG9ja1opIGV2ZW50Lm9iamVjdC5yb3RhdGlvbi56ID0gcHJldlJvdGF0aW9uLno7XG4gICAgfVxufVxuIl19
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlsbGJvYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXNvYmEvYWJzdHJhY3Rpb25zL3NyYy9saWIvYmlsbGJvYXJkL2JpbGxib2FyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBd0IsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFDOztBQUU5QixNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBYWxCLE1BQU0sT0FBTyxhQUFjLFNBQVEsVUFBVTtJQVg3Qzs7UUFZYSxpQkFBWSxHQUFHLFlBQVksRUFBUyxDQUFDO0tBaUNqRDtJQS9CRyxJQUFhLE1BQU0sQ0FBQyxNQUFlO1FBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFDRCxJQUFhLEtBQUssQ0FBQyxLQUFjO1FBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFhLEtBQUssQ0FBQyxLQUFjO1FBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFhLEtBQUssQ0FBQyxLQUFjO1FBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFUSxVQUFVO1FBQ2YsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQWtDO1FBQzdDLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRXBCLGtEQUFrRDtRQUNsRCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuRCx5QkFBeUI7UUFDekIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVELG1DQUFtQztRQUNuQyxJQUFJLEtBQUs7WUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUNwRCxJQUFJLEtBQUs7WUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUNwRCxJQUFJLEtBQUs7WUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDOzswR0FqQ1EsYUFBYTs4RkFBYixhQUFhLDZNQVJaOzs7O0tBSVQsNERBQ1MsTUFBTTsyRkFHUCxhQUFhO2tCQVh6QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7S0FJVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7b0JBQ2pCLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQzs4QkFFWSxZQUFZO3NCQUFwQixLQUFLO2dCQUVPLE1BQU07c0JBQWxCLEtBQUs7Z0JBR08sS0FBSztzQkFBakIsS0FBSztnQkFHTyxLQUFLO3NCQUFqQixLQUFLO2dCQUdPLEtBQUs7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBleHRlbmQsIGluamVjdE5ndFJlZiwgTmd0QmVmb3JlUmVuZGVyRXZlbnQsIE5ndFJlZiwgTmd0UnhTdG9yZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgR3JvdXAgfSBmcm9tICd0aHJlZSc7XG5cbmV4dGVuZCh7IEdyb3VwIH0pO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndHMtYmlsbGJvYXJkJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3QtZ3JvdXAgbmd0Q29tcG91bmQgKnJlZj1cImJpbGxib2FyZFJlZlwiIChiZWZvcmVSZW5kZXIpPVwib25CZWZvcmVSZW5kZXIoJGFueSgkZXZlbnQpKVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgLz5cbiAgICAgICAgPC9uZ3QtZ3JvdXA+XG4gICAgYCxcbiAgICBpbXBvcnRzOiBbTmd0UmVmXSxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNCaWxsYm9hcmQgZXh0ZW5kcyBOZ3RSeFN0b3JlIHtcbiAgICBASW5wdXQoKSBiaWxsYm9hcmRSZWYgPSBpbmplY3ROZ3RSZWY8R3JvdXA+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
@@ -0,0 +1,98 @@
1
+ import { NgIf } from '@angular/common';
2
+ import { Component, CUSTOM_ELEMENTS_SCHEMA, Input } from '@angular/core';
3
+ import { injectNgtRef } from 'angular-three';
4
+ import * as THREE from 'three';
5
+ import { NgtsLine } from '../line/line';
6
+ import { NgtsLineInput } from '../line/line-input';
7
+ import * as i0 from "@angular/core";
8
+ export class NgtsCubicBezierLine extends NgtsLineInput {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.lineRef = injectNgtRef();
12
+ }
13
+ set start(start) {
14
+ this.set({ start });
15
+ }
16
+ set end(end) {
17
+ this.set({ end });
18
+ }
19
+ set midA(midA) {
20
+ this.set({ midA });
21
+ }
22
+ set midB(midB) {
23
+ this.set({ midB });
24
+ }
25
+ set segments(segments) {
26
+ this.set({ segments });
27
+ }
28
+ initialize() {
29
+ super.initialize();
30
+ this.set({ segments: 10 });
31
+ this.connect('points', this.select(['start', 'end', 'midA', 'midB', 'segments'], ({ start, end, midA, midB, segments }) => {
32
+ const startV = start instanceof THREE.Vector3 ? start : new THREE.Vector3(...start);
33
+ const endV = end instanceof THREE.Vector3 ? end : new THREE.Vector3(...end);
34
+ const midAV = midA instanceof THREE.Vector3 ? midA : new THREE.Vector3(...midA);
35
+ const midBV = midB instanceof THREE.Vector3 ? midB : new THREE.Vector3(...midB);
36
+ return new THREE.CubicBezierCurve3(startV, midAV, midBV, endV).getPoints(segments);
37
+ }));
38
+ }
39
+ }
40
+ NgtsCubicBezierLine.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsCubicBezierLine, deps: null, target: i0.ɵɵFactoryTarget.Component });
41
+ NgtsCubicBezierLine.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.3", type: NgtsCubicBezierLine, isStandalone: true, selector: "ngts-cubic-bezier-line[start][end][midA][midB]", inputs: { lineRef: "lineRef", start: "start", end: "end", midA: "midA", midB: "midB", segments: "segments" }, usesInheritance: true, ngImport: i0, template: `
42
+ <ngts-line
43
+ [lineRef]="lineRef"
44
+ [points]="get('points')"
45
+ [color]="get('color')"
46
+ [vertexColors]="get('vertexColors')"
47
+ [resolution]="get('resolution')"
48
+ [lineWidth]="get('lineWidth')"
49
+ [alphaToCoverage]="get('alphaToCoverage')"
50
+ [dashed]="get('dashed')"
51
+ [dashScale]="get('dashScale')"
52
+ [dashSize]="get('dashSize')"
53
+ [dashOffset]="get('dashOffset')"
54
+ [gapSize]="get('gapSize')"
55
+ [wireframe]="get('wireframe')"
56
+ [worldUnits]="get('worldUnits')"
57
+ />
58
+ `, isInline: true, dependencies: [{ kind: "component", type: NgtsLine, selector: "ngts-line[points]", inputs: ["lineRef", "points", "segments"] }] });
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsCubicBezierLine, decorators: [{
60
+ type: Component,
61
+ args: [{
62
+ selector: 'ngts-cubic-bezier-line[start][end][midA][midB]',
63
+ standalone: true,
64
+ template: `
65
+ <ngts-line
66
+ [lineRef]="lineRef"
67
+ [points]="get('points')"
68
+ [color]="get('color')"
69
+ [vertexColors]="get('vertexColors')"
70
+ [resolution]="get('resolution')"
71
+ [lineWidth]="get('lineWidth')"
72
+ [alphaToCoverage]="get('alphaToCoverage')"
73
+ [dashed]="get('dashed')"
74
+ [dashScale]="get('dashScale')"
75
+ [dashSize]="get('dashSize')"
76
+ [dashOffset]="get('dashOffset')"
77
+ [gapSize]="get('gapSize')"
78
+ [wireframe]="get('wireframe')"
79
+ [worldUnits]="get('worldUnits')"
80
+ />
81
+ `,
82
+ imports: [NgtsLine, NgIf],
83
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
84
+ }]
85
+ }], propDecorators: { lineRef: [{
86
+ type: Input
87
+ }], start: [{
88
+ type: Input
89
+ }], end: [{
90
+ type: Input
91
+ }], midA: [{
92
+ type: Input
93
+ }], midB: [{
94
+ type: Input
95
+ }], segments: [{
96
+ type: Input
97
+ }] } });
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ViaWMtYmV6aWVyLWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9hYnN0cmFjdGlvbnMvc3JjL2xpYi9jdWJpYy1iZXppZXItbGluZS9jdWJpYy1iZXppZXItbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUvQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUEwQm5ELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxhQUFhO0lBeEJ0RDs7UUF5QmEsWUFBTyxHQUFHLFlBQVksRUFBUyxDQUFDO0tBb0M1QztJQWxDRyxJQUFhLEtBQUssQ0FBQyxLQUErQztRQUM5RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBYSxHQUFHLENBQUMsR0FBNkM7UUFDMUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQWEsSUFBSSxDQUFDLElBQThDO1FBQzVELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFhLElBQUksQ0FBQyxJQUE4QztRQUM1RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBYSxRQUFRLENBQUMsUUFBZ0I7UUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVRLFVBQVU7UUFDZixLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQ1IsUUFBUSxFQUNSLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO1lBQy9GLE1BQU0sTUFBTSxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQ3BGLE1BQU0sSUFBSSxHQUFHLEdBQUcsWUFBWSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQzVFLE1BQU0sS0FBSyxHQUFHLElBQUksWUFBWSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ2hGLE1BQU0sS0FBSyxHQUFHLElBQUksWUFBWSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ2hGLE9BQU8sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZGLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDOztnSEFwQ1EsbUJBQW1CO29HQUFuQixtQkFBbUIsK09BckJsQjs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FpQlQsNERBQ1MsUUFBUTsyRkFHVCxtQkFBbUI7a0JBeEIvQixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxnREFBZ0Q7b0JBQzFELFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBaUJUO29CQUNELE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7b0JBQ3pCLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQzs4QkFFWSxPQUFPO3NCQUFmLEtBQUs7Z0JBRU8sS0FBSztzQkFBakIsS0FBSztnQkFJTyxHQUFHO3NCQUFmLEtBQUs7Z0JBSU8sSUFBSTtzQkFBaEIsS0FBSztnQkFJTyxJQUFJO3NCQUFoQixLQUFLO2dCQUlPLFFBQVE7c0JBQXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGluamVjdE5ndFJlZiB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTGluZTIgfSBmcm9tICd0aHJlZS1zdGRsaWInO1xuaW1wb3J0IHsgTmd0c0xpbmUgfSBmcm9tICcuLi9saW5lL2xpbmUnO1xuaW1wb3J0IHsgTmd0c0xpbmVJbnB1dCB9IGZyb20gJy4uL2xpbmUvbGluZS1pbnB1dCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0cy1jdWJpYy1iZXppZXItbGluZVtzdGFydF1bZW5kXVttaWRBXVttaWRCXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0cy1saW5lXG4gICAgICAgICAgICBbbGluZVJlZl09XCJsaW5lUmVmXCJcbiAgICAgICAgICAgIFtwb2ludHNdPVwiZ2V0KCdwb2ludHMnKVwiXG4gICAgICAgICAgICBbY29sb3JdPVwiZ2V0KCdjb2xvcicpXCJcbiAgICAgICAgICAgIFt2ZXJ0ZXhDb2xvcnNdPVwiZ2V0KCd2ZXJ0ZXhDb2xvcnMnKVwiXG4gICAgICAgICAgICBbcmVzb2x1dGlvbl09XCJnZXQoJ3Jlc29sdXRpb24nKVwiXG4gICAgICAgICAgICBbbGluZVdpZHRoXT1cImdldCgnbGluZVdpZHRoJylcIlxuICAgICAgICAgICAgW2FscGhhVG9Db3ZlcmFnZV09XCJnZXQoJ2FscGhhVG9Db3ZlcmFnZScpXCJcbiAgICAgICAgICAgIFtkYXNoZWRdPVwiZ2V0KCdkYXNoZWQnKVwiXG4gICAgICAgICAgICBbZGFzaFNjYWxlXT1cImdldCgnZGFzaFNjYWxlJylcIlxuICAgICAgICAgICAgW2Rhc2hTaXplXT1cImdldCgnZGFzaFNpemUnKVwiXG4gICAgICAgICAgICBbZGFzaE9mZnNldF09XCJnZXQoJ2Rhc2hPZmZzZXQnKVwiXG4gICAgICAgICAgICBbZ2FwU2l6ZV09XCJnZXQoJ2dhcFNpemUnKVwiXG4gICAgICAgICAgICBbd2lyZWZyYW1lXT1cImdldCgnd2lyZWZyYW1lJylcIlxuICAgICAgICAgICAgW3dvcmxkVW5pdHNdPVwiZ2V0KCd3b3JsZFVuaXRzJylcIlxuICAgICAgICAvPlxuICAgIGAsXG4gICAgaW1wb3J0czogW05ndHNMaW5lLCBOZ0lmXSxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNDdWJpY0JlemllckxpbmUgZXh0ZW5kcyBOZ3RzTGluZUlucHV0IHtcbiAgICBASW5wdXQoKSBsaW5lUmVmID0gaW5qZWN0Tmd0UmVmPExpbmUyPigpO1xuXG4gICAgQElucHV0KCkgc2V0IHN0YXJ0KHN0YXJ0OiBUSFJFRS5WZWN0b3IzIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc3RhcnQgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGVuZChlbmQ6IFRIUkVFLlZlY3RvcjMgfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBlbmQgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IG1pZEEobWlkQTogVEhSRUUuVmVjdG9yMyB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSkge1xuICAgICAgICB0aGlzLnNldCh7IG1pZEEgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IG1pZEIobWlkQjogVEhSRUUuVmVjdG9yMyB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSkge1xuICAgICAgICB0aGlzLnNldCh7IG1pZEIgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHNlZ21lbnRzKHNlZ21lbnRzOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBzZWdtZW50cyB9KTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgICAgIHRoaXMuc2V0KHsgc2VnbWVudHM6IDEwIH0pO1xuICAgICAgICB0aGlzLmNvbm5lY3QoXG4gICAgICAgICAgICAncG9pbnRzJyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0KFsnc3RhcnQnLCAnZW5kJywgJ21pZEEnLCAnbWlkQicsICdzZWdtZW50cyddLCAoeyBzdGFydCwgZW5kLCBtaWRBLCBtaWRCLCBzZWdtZW50cyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRWID0gc3RhcnQgaW5zdGFuY2VvZiBUSFJFRS5WZWN0b3IzID8gc3RhcnQgOiBuZXcgVEhSRUUuVmVjdG9yMyguLi5zdGFydCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kViA9IGVuZCBpbnN0YW5jZW9mIFRIUkVFLlZlY3RvcjMgPyBlbmQgOiBuZXcgVEhSRUUuVmVjdG9yMyguLi5lbmQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pZEFWID0gbWlkQSBpbnN0YW5jZW9mIFRIUkVFLlZlY3RvcjMgPyBtaWRBIDogbmV3IFRIUkVFLlZlY3RvcjMoLi4ubWlkQSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbWlkQlYgPSBtaWRCIGluc3RhbmNlb2YgVEhSRUUuVmVjdG9yMyA/IG1pZEIgOiBuZXcgVEhSRUUuVmVjdG9yMyguLi5taWRCKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRIUkVFLkN1YmljQmV6aWVyQ3VydmUzKHN0YXJ0ViwgbWlkQVYsIG1pZEJWLCBlbmRWKS5nZXRQb2ludHMoc2VnbWVudHMpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
@@ -1,7 +1,7 @@
1
1
  import { NgTemplateOutlet } from '@angular/common';
2
2
  import { Component, ContentChild, CUSTOM_ELEMENTS_SCHEMA, Directive, EventEmitter, inject, InjectionToken, Input, Output, TemplateRef, } from '@angular/core';
3
3
  import { selectSlice } from '@rx-angular/state';
4
- import { extend, injectNgtRef, NgtPortal, NgtPortalContent, NgtRxStore, NgtStore } from 'angular-three';
4
+ import { extend, injectNgtRef, NgtPortal, NgtPortalContent, NgtRef, NgtRxStore, NgtStore } from 'angular-three';
5
5
  import { NgtsOrthographicCamera } from 'angular-three-soba/cameras';
6
6
  import { combineLatest, map } from 'rxjs';
7
7
  import { Group, Matrix4, Object3D, Quaternion, Vector3 } from 'three';
@@ -153,7 +153,7 @@ NgtsGizmoHelper.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", versio
153
153
  [position]="[0, 0, 200]"
154
154
  />
155
155
  <ngt-group
156
- [ref]="gizmoRef"
156
+ *ref="gizmoRef"
157
157
  [position]="get('gizmoPosition')"
158
158
  (beforeRender)="onBeforeRender($any($event).state.delta)"
159
159
  >
@@ -161,7 +161,7 @@ NgtsGizmoHelper.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", versio
161
161
  </ngt-group>
162
162
  </ng-template>
163
163
  </ngt-portal>
164
- `, isInline: true, dependencies: [{ kind: "component", type: NgtPortal, selector: "ngt-portal", inputs: ["container", "state", "autoRender", "autoRenderPriority"], outputs: ["beforeRender"] }, { kind: "directive", type: NgtPortalContent, selector: "ng-template[ngtPortalContent]" }, { kind: "component", type: NgtsOrthographicCamera, selector: "ngts-orthographic-camera", inputs: ["left", "right", "top", "bottom"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
164
+ `, isInline: true, dependencies: [{ kind: "component", type: NgtPortal, selector: "ngt-portal", inputs: ["container", "state", "autoRender", "autoRenderPriority"], outputs: ["beforeRender"] }, { kind: "directive", type: NgtPortalContent, selector: "ng-template[ngtPortalContent]" }, { kind: "directive", type: NgtRef, selector: "[ref]", inputs: ["ref"] }, { kind: "component", type: NgtsOrthographicCamera, selector: "ngts-orthographic-camera", inputs: ["left", "right", "top", "bottom"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
165
165
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsGizmoHelper, decorators: [{
166
166
  type: Component,
167
167
  args: [{
@@ -176,7 +176,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImpor
176
176
  [position]="[0, 0, 200]"
177
177
  />
178
178
  <ngt-group
179
- [ref]="gizmoRef"
179
+ *ref="gizmoRef"
180
180
  [position]="get('gizmoPosition')"
181
181
  (beforeRender)="onBeforeRender($any($event).state.delta)"
182
182
  >
@@ -185,7 +185,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImpor
185
185
  </ng-template>
186
186
  </ngt-portal>
187
187
  `,
188
- imports: [NgtPortal, NgtPortalContent, NgtsOrthographicCamera, NgTemplateOutlet],
188
+ imports: [NgtPortal, NgtPortalContent, NgtRef, NgtsOrthographicCamera, NgTemplateOutlet],
189
189
  providers: [{ provide: NGTS_GIZMO_HELPER_API, useFactory: gizmoHelperApiFactory, deps: [NgtsGizmoHelper] }],
190
190
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
191
191
  }]
@@ -203,4 +203,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImpor
203
203
  type: ContentChild,
204
204
  args: [NgtsGizmoHelperContent, { static: true, read: TemplateRef }]
205
205
  }] } });
206
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l6bW8taGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXNvYmEvYWJzdHJhY3Rpb25zL3NyYy9saWIvZ2l6bW8taGVscGVyL2dpem1vLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixzQkFBc0IsRUFDdEIsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFFTCxNQUFNLEVBQ04sV0FBVyxHQUNkLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQXNCLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7O0FBSzFGLE1BQU0sZUFBZSxHQUFHLENBQUMsUUFBdUIsRUFBNkIsRUFBRTtJQUMzRSxPQUFPLGVBQWUsSUFBSyxRQUEwQixDQUFDO0FBQzFELENBQUMsQ0FBQztBQU1GLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUFxQixxQkFBcUIsQ0FBQyxDQUFDO0FBRW5HLFNBQVMscUJBQXFCLENBQUMsS0FBc0I7SUFDakQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEs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VyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcbiAgICBEaXJlY3RpdmUsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGluamVjdCxcbiAgICBJbmplY3Rpb25Ub2tlbixcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHNlbGVjdFNsaWNlIH0gZnJvbSAnQHJ4LWFuZ3VsYXIvc3RhdGUnO1xuaW1wb3J0IHsgZXh0ZW5kLCBpbmplY3ROZ3RSZWYsIE5ndFBvcnRhbCwgTmd0UG9ydGFsQ29udGVudCwgTmd0UnhTdG9yZSwgTmd0U3RvcmUgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IE5ndHNPcnRob2dyYXBoaWNDYW1lcmEgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvY2FtZXJhcyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEdyb3VwLCBNYXRyaXg0LCBPYmplY3QzRCwgT3J0aG9ncmFwaGljQ2FtZXJhLCBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgT3JiaXRDb250cm9scyB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5cbnR5cGUgQ29udHJvbHNQcm90byA9IHsgdXBkYXRlKCk6IHZvaWQ7IHRhcmdldDogVEhSRUUuVmVjdG9yMyB9O1xuXG5jb25zdCBpc09yYml0Q29udHJvbHMgPSAoY29udHJvbHM6IENvbnRyb2xzUHJvdG8pOiBjb250cm9scyBpcyBPcmJpdENvbnRyb2xzID0+IHtcbiAgICByZXR1cm4gJ21pblBvbGFyQW5nbGUnIGluIChjb250cm9scyBhcyBPcmJpdENvbnRyb2xzKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c0dpem1vSGVscGVyQXBpIHtcbiAgICB0d2VlbkNhbWVyYTogKGRpcmVjdGlvbjogVmVjdG9yMykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IE5HVFNfR0laTU9fSEVMUEVSX0FQSSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxOZ3RzR2l6bW9IZWxwZXJBcGk+KCdOZ3RzR2l6bW9IZWxwZXIgQVBJJyk7XG5cbmZ1bmN0aW9uIGdpem1vSGVscGVyQXBpRmFjdG9yeShnaXptbzogTmd0c0dpem1vSGVscGVyKSB7XG4gICAgY29uc3Qgc3RvcmUgPSBpbmplY3QoTmd0U3RvcmUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHdlZW5DYW1lcmE6IChkaXJlY3Rpb246IFZlY3RvcjMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgY29udHJvbHMsIGNhbWVyYSwgaW52YWxpZGF0ZSB9ID0gc3RvcmUuZ2V0KCk7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0Q29udHJvbHMgPSBjb250cm9scyBhcyB1bmtub3duIGFzIENvbnRyb2xzUHJvdG87XG5cbiAgICAgICAgICAgIGdpem1vLmFuaW1hdGluZyA9IHRydWU7XG4gICAgICAgICAgICBpZiAoZGVmYXVsdENvbnRyb2xzKSBnaXptby5mb2N1c1BvaW50ID0gZGVmYXVsdENvbnRyb2xzLnRhcmdldDtcbiAgICAgICAgICAgIGdpem1vLnJhZGl1cyA9IGNhbWVyYS5wb3NpdGlvbi5kaXN0YW5jZVRvKGdpem1vLnRhcmdldCk7XG4gICAgICAgICAgICAvLyByb3RhdGUgZnJvbSBjdXJyZW50IGNhbWVyYSBvcmllbnRhdGlvblxuICAgICAgICAgICAgZ2l6bW8ucTEuY29weShjYW1lcmEucXVhdGVybmlvbik7XG4gICAgICAgICAgICAvLyB0byBuZXcgY3VycmVudCBjYW1lcmEgb3JpZW50YXRpb25cbiAgICAgICAgICAgIGdpem1vLnRhcmdldFBvc2l0aW9uLmNvcHkoZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihnaXptby5yYWRpdXMpLmFkZChnaXptby50YXJnZXQpO1xuICAgICAgICAgICAgZ2l6bW8uZHVtbXkubG9va0F0KGdpem1vLnRhcmdldFBvc2l0aW9uKTtcbiAgICAgICAgICAgIGdpem1vLnEyLmNvcHkoZ2l6bW8uZHVtbXkucXVhdGVybmlvbik7XG4gICAgICAgICAgICBpbnZhbGlkYXRlKCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuZXh0ZW5kKHsgR3JvdXAgfSk7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbbmd0c0dpem1vSGVscGVyQ29udGVudF0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNHaXptb0hlbHBlckNvbnRlbnQge31cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RzLWdpem1vLWhlbHBlcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LXBvcnRhbCBbcmVuZGVyUHJpb3JpdHldPVwiZ2V0KCdyZW5kZXJQcmlvcml0eScpXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbmd0UG9ydGFsQ29udGVudD5cbiAgICAgICAgICAgICAgICA8bmd0cy1vcnRob2dyYXBoaWMtY2FtZXJhXG4gICAgICAgICAgICAgICAgICAgIFtjYW1lcmFSZWZdPVwidmlydHVhbENhbWVyYVJlZlwiXG4gICAgICAgICAgICAgICAgICAgIFttYWtlRGVmYXVsdF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Bvc2l0aW9uXT1cIlswLCAwLCAyMDBdXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxuZ3QtZ3JvdXBcbiAgICAgICAgICAgICAgICAgICAgW3JlZl09XCJnaXptb1JlZlwiXG4gICAgICAgICAgICAgICAgICAgIFtwb3NpdGlvbl09XCJnZXQoJ2dpem1vUG9zaXRpb24nKVwiXG4gICAgICAgICAgICAgICAgICAgIChiZWZvcmVSZW5kZXIpPVwib25CZWZvcmVSZW5kZXIoJGFueSgkZXZlbnQpLnN0YXRlLmRlbHRhKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ2l6bW9IZWxwZXJDb250ZW50XCIgLz5cbiAgICAgICAgICAgICAgICA8L25ndC1ncm91cD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmd0LXBvcnRhbD5cbiAgICBgLFxuICAgIGltcG9ydHM6IFtOZ3RQb3J0YWwsIE5ndFBvcnRhbENvbnRlbnQsIE5ndHNPcnRob2dyYXBoaWNDYW1lcmEsIE5nVGVtcGxhdGVPdXRsZXRdLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTkdUU19HSVpNT19IRUxQRVJfQVBJLCB1c2VGYWN0b3J5OiBnaXptb0hlbHBlckFwaUZhY3RvcnksIGRlcHM6IFtOZ3RzR2l6bW9IZWxwZXJdIH1dLFxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0dpem1vSGVscGVyIGV4dGVuZHMgTmd0UnhTdG9yZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG5cbiAgICByZWFkb25seSBnaXptb1JlZiA9IGluamVjdE5ndFJlZjxHcm91cD4oKTtcbiAgICByZWFkb25seSB2aXJ0dWFsQ2FtZXJhUmVmID0gaW5qZWN0Tmd0UmVmPE9ydGhvZ3JhcGhpY0NhbWVyYT4oKTtcblxuICAgIGFuaW1hdGluZyA9IGZhbHNlO1xuICAgIHJhZGl1cyA9IDA7XG4gICAgZm9jdXNQb2ludCA9IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xuICAgIHExID0gbmV3IFF1YXRlcm5pb24oKTtcbiAgICBxMiA9IG5ldyBRdWF0ZXJuaW9uKCk7XG5cbiAgICB0YXJnZXQgPSBuZXcgVmVjdG9yMygpO1xuICAgIHRhcmdldFBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTtcbiAgICBkdW1teSA9IG5ldyBPYmplY3QzRCgpO1xuXG4gICAgcHJpdmF0ZSBkZWZhdWx0VXAgPSBuZXcgVmVjdG9yMygwLCAwLCAwKTtcbiAgICBwcml2YXRlIHR1cm5SYXRlID0gMiAqIE1hdGguUEk7IC8vIHR1cm4gcmF0ZSBpbiBhbmdsZXMgcGVyIHNlY1xuICAgIHByaXZhdGUgbWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcblxuICAgIEBJbnB1dCgpIHNldCBhbGlnbm1lbnQoXG4gICAgICAgIGFsaWdubWVudDpcbiAgICAgICAgICAgIHwgJ3RvcC1sZWZ0J1xuICAgICAgICAgICAgfCAndG9wLXJpZ2h0J1xuICAgICAgICAgICAgfCAnYm90dG9tLXJpZ2h0J1xuICAgICAgICAgICAgfCAnYm90dG9tLWxlZnQnXG4gICAgICAgICAgICB8ICdib3R0b20tY2VudGVyJ1xuICAgICAgICAgICAgfCAnY2VudGVyLXJpZ2h0J1xuICAgICAgICAgICAgfCAnY2VudGVyLWxlZnQnXG4gICAgICAgICAgICB8ICdjZW50ZXItY2VudGVyJ1xuICAgICAgICAgICAgfCAndG9wLWNlbnRlcidcbiAgICApIHtcbiAgICAgICAgdGhpcy5zZXQoeyBhbGlnbm1lbnQgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IG1hcmdpbihtYXJnaW46IFtudW1iZXIsIG51bWJlcl0pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBtYXJnaW4gfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHJlbmRlclByaW9yaXR5KHJlbmRlclByaW9yaXR5OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyByZW5kZXJQcmlvcml0eSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgYXV0b0NsZWFyKGF1dG9DbGVhcjogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldCh7IGF1dG9DbGVhciB9KTtcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgdXBkYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIEBDb250ZW50Q2hpbGQoTmd0c0dpem1vSGVscGVyQ29udGVudCwgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgZ2l6bW9IZWxwZXJDb250ZW50ITogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgICBvdmVycmlkZSBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgICAgIHRoaXMuc2V0KHsgYWxpZ25tZW50OiAnYm90dG9tLXJpZ2h0JywgbWFyZ2luOiBbODAsIDgwXSwgcmVuZGVyUHJpb3JpdHk6IDEgfSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRGVmYXVsdFVwKCk7XG4gICAgICAgIHRoaXMuc2V0R2l6bW9Qb3NpdGlvbigpO1xuICAgIH1cblxuICAgIG9uQmVmb3JlUmVuZGVyKGRlbHRhOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMudmlydHVhbENhbWVyYVJlZi5uYXRpdmVFbGVtZW50ICYmIHRoaXMuZ2l6bW9SZWYubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgeyBjb250cm9scywgY2FtZXJhOiBtYWluQ2FtZXJhLCBpbnZhbGlkYXRlIH0gPSB0aGlzLnN0b3JlLmdldCgpO1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdENvbnRyb2xzID0gY29udHJvbHMgYXMgdW5rbm93biBhcyBDb250cm9sc1Byb3RvO1xuICAgICAgICAgICAgLy8gQW5pbWF0ZSBzdGVwXG4gICAgICAgICAgICBpZiAodGhpcy5hbmltYXRpbmcpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5xMS5hbmdsZVRvKHRoaXMucTIpIDwgMC4wMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAvLyBPcmJpdCBjb250cm9scyB1c2VzIFVQIHZlY3RvciBhcyB0aGUgb3JiaXQgYXhlcyxcbiAgICAgICAgICAgICAgICAgICAgLy8gc28gd2UgbmVlZCB0byByZXNldCBpdCBhZnRlciB0aGUgYW5pbWF0aW9uIGlzIGRvbmVcbiAgICAgICAgICAgICAgICAgICAgLy8gbW92aW5nIGl0IGFyb3VuZCBmb3IgdGhlIGNvbnRyb2xzIHRvIHdvcmsgY29ycmVjdGx5XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc09yYml0Q29udHJvbHMoZGVmYXVsdENvbnRyb2xzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFpbkNhbWVyYS51cC5jb3B5KHRoaXMuZGVmYXVsdFVwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBkZWx0YSAqIHRoaXMudHVyblJhdGU7XG4gICAgICAgICAgICAgICAgICAgIC8vIGFuaW1hdGUgcG9zaXRpb24gYnkgZG9pbmcgYSBzbGVycCBhbmQgdGhlbiBzY2FsaW5nIHRoZSBwb3NpdGlvbiBvbiB0aGUgdW5pdCBzcGhlcmVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xMS5yb3RhdGVUb3dhcmRzKHRoaXMucTIsIHN0ZXApO1xuICAgICAgICAgICAgICAgICAgICAvLyBhbmltYXRlIG9yaWVudGF0aW9uXG4gICAgICAgICAgICAgICAgICAgIG1haW5DYW1lcmEucG9zaXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIC5zZXQoMCwgMCwgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBseVF1YXRlcm5pb24odGhpcy5xMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tdWx0aXBseVNjYWxhcih0aGlzLnJhZGl1cylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGQodGhpcy5mb2N1c1BvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbkNhbWVyYS51cC5zZXQoMCwgMSwgMCkuYXBwbHlRdWF0ZXJuaW9uKHRoaXMucTEpLm5vcm1hbGl6ZSgpO1xuICAgICAgICAgICAgICAgICAgICBtYWluQ2FtZXJhLnF1YXRlcm5pb24uY29weSh0aGlzLnExKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudXBkYXRlZC5vYnNlcnZlZCkgdGhpcy51cGRhdGVkLmVtaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGVmYXVsdENvbnRyb2xzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29udHJvbHMudXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU3luYyBHaXptbyB3aXRoIG1haW4gY2FtZXJhIG9yaWVudGF0aW9uXG4gICAgICAgICAgICB0aGlzLm1hdHJpeC5jb3B5KG1haW5DYW1lcmEubWF0cml4KS5pbnZlcnQoKTtcbiAgICAgICAgICAgIHRoaXMuZ2l6bW9SZWYubmF0aXZlRWxlbWVudC5xdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeCh0aGlzLm1hdHJpeCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEdpem1vUG9zaXRpb24oKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdChcbiAgICAgICAgICAgICdnaXptb1Bvc2l0aW9uJyxcbiAgICAgICAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuc3RvcmUuc2VsZWN0KCdzaXplJyksIHRoaXMuc2VsZWN0KHNlbGVjdFNsaWNlKFsnYWxpZ25tZW50JywgJ21hcmdpbiddKSldKS5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoW3NpemUsIHsgYWxpZ25tZW50LCBtYXJnaW4gfV0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgW21hcmdpblgsIG1hcmdpblldID0gbWFyZ2luO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4ID0gYWxpZ25tZW50LmVuZHNXaXRoKCctY2VudGVyJylcbiAgICAgICAgICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBhbGlnbm1lbnQuZW5kc1dpdGgoJy1sZWZ0JylcbiAgICAgICAgICAgICAgICAgICAgICAgID8gLXNpemUud2lkdGggLyAyICsgbWFyZ2luWFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBzaXplLndpZHRoIC8gMiAtIG1hcmdpblg7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHkgPSBhbGlnbm1lbnQuc3RhcnRzV2l0aCgnY2VudGVyLScpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IDBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYWxpZ25tZW50LnN0YXJ0c1dpdGgoJ3RvcC0nKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzaXplLmhlaWdodCAvIDIgLSBtYXJnaW5ZXG4gICAgICAgICAgICAgICAgICAgICAgICA6IC1zaXplLmhlaWdodCAvIDIgKyBtYXJnaW5ZO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3gsIHksIDBdO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVEZWZhdWx0VXAoKSB7XG4gICAgICAgIHRoaXMuaG9sZCh0aGlzLnN0b3JlLnNlbGVjdCgnY2FtZXJhJyksIChjYW1lcmEpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFVwLmNvcHkoY2FtZXJhLnVwKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l6bW8taGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXNvYmEvYWJzdHJhY3Rpb25zL3NyYy9saWIvZ2l6bW8taGVscGVyL2dpem1vLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixzQkFBc0IsRUFDdEIsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFFTCxNQUFNLEVBQ04sV0FBVyxHQUNkLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFzQixVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDOztBQUsxRixNQUFNLGVBQWUsR0FBRyxDQUFDLFFBQXVCLEVBQTZCLEVBQUU7SUFDM0UsT0FBTyxlQUFlLElBQUssUUFBMEIsQ0FBQztBQUMxRCxDQUFDLENBQUM7QUFNRixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLGNBQWMsQ0FBcUIscUJBQXFCLENBQUMsQ0FBQztBQUVuRyxTQUFTLHFCQUFxQixDQUFDLEtBQXNCO0lBQ2pELE1BQU0sS0FBSyxHQUFHLE1BQU0s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QU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG4gICAgRGlyZWN0aXZlLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgSW5qZWN0aW9uVG9rZW4sXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBzZWxlY3RTbGljZSB9IGZyb20gJ0ByeC1hbmd1bGFyL3N0YXRlJztcbmltcG9ydCB7IGV4dGVuZCwgaW5qZWN0Tmd0UmVmLCBOZ3RQb3J0YWwsIE5ndFBvcnRhbENvbnRlbnQsIE5ndFJlZiwgTmd0UnhTdG9yZSwgTmd0U3RvcmUgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IE5ndHNPcnRob2dyYXBoaWNDYW1lcmEgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvY2FtZXJhcyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEdyb3VwLCBNYXRyaXg0LCBPYmplY3QzRCwgT3J0aG9ncmFwaGljQ2FtZXJhLCBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgT3JiaXRDb250cm9scyB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5cbnR5cGUgQ29udHJvbHNQcm90byA9IHsgdXBkYXRlKCk6IHZvaWQ7IHRhcmdldDogVEhSRUUuVmVjdG9yMyB9O1xuXG5jb25zdCBpc09yYml0Q29udHJvbHMgPSAoY29udHJvbHM6IENvbnRyb2xzUHJvdG8pOiBjb250cm9scyBpcyBPcmJpdENvbnRyb2xzID0+IHtcbiAgICByZXR1cm4gJ21pblBvbGFyQW5nbGUnIGluIChjb250cm9scyBhcyBPcmJpdENvbnRyb2xzKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c0dpem1vSGVscGVyQXBpIHtcbiAgICB0d2VlbkNhbWVyYTogKGRpcmVjdGlvbjogVmVjdG9yMykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IE5HVFNfR0laTU9fSEVMUEVSX0FQSSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxOZ3RzR2l6bW9IZWxwZXJBcGk+KCdOZ3RzR2l6bW9IZWxwZXIgQVBJJyk7XG5cbmZ1bmN0aW9uIGdpem1vSGVscGVyQXBpRmFjdG9yeShnaXptbzogTmd0c0dpem1vSGVscGVyKSB7XG4gICAgY29uc3Qgc3RvcmUgPSBpbmplY3QoTmd0U3RvcmUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHdlZW5DYW1lcmE6IChkaXJlY3Rpb246IFZlY3RvcjMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgY29udHJvbHMsIGNhbWVyYSwgaW52YWxpZGF0ZSB9ID0gc3RvcmUuZ2V0KCk7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0Q29udHJvbHMgPSBjb250cm9scyBhcyB1bmtub3duIGFzIENvbnRyb2xzUHJvdG87XG5cbiAgICAgICAgICAgIGdpem1vLmFuaW1hdGluZyA9IHRydWU7XG4gICAgICAgICAgICBpZiAoZGVmYXVsdENvbnRyb2xzKSBnaXptby5mb2N1c1BvaW50ID0gZGVmYXVsdENvbnRyb2xzLnRhcmdldDtcbiAgICAgICAgICAgIGdpem1vLnJhZGl1cyA9IGNhbWVyYS5wb3NpdGlvbi5kaXN0YW5jZVRvKGdpem1vLnRhcmdldCk7XG4gICAgICAgICAgICAvLyByb3RhdGUgZnJvbSBjdXJyZW50IGNhbWVyYSBvcmllbnRhdGlvblxuICAgICAgICAgICAgZ2l6bW8ucTEuY29weShjYW1lcmEucXVhdGVybmlvbik7XG4gICAgICAgICAgICAvLyB0byBuZXcgY3VycmVudCBjYW1lcmEgb3JpZW50YXRpb25cbiAgICAgICAgICAgIGdpem1vLnRhcmdldFBvc2l0aW9uLmNvcHkoZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihnaXptby5yYWRpdXMpLmFkZChnaXptby50YXJnZXQpO1xuICAgICAgICAgICAgZ2l6bW8uZHVtbXkubG9va0F0KGdpem1vLnRhcmdldFBvc2l0aW9uKTtcbiAgICAgICAgICAgIGdpem1vLnEyLmNvcHkoZ2l6bW8uZHVtbXkucXVhdGVybmlvbik7XG4gICAgICAgICAgICBpbnZhbGlkYXRlKCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuZXh0ZW5kKHsgR3JvdXAgfSk7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbbmd0c0dpem1vSGVscGVyQ29udGVudF0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNHaXptb0hlbHBlckNvbnRlbnQge31cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RzLWdpem1vLWhlbHBlcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LXBvcnRhbCBbcmVuZGVyUHJpb3JpdHldPVwiZ2V0KCdyZW5kZXJQcmlvcml0eScpXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbmd0UG9ydGFsQ29udGVudD5cbiAgICAgICAgICAgICAgICA8bmd0cy1vcnRob2dyYXBoaWMtY2FtZXJhXG4gICAgICAgICAgICAgICAgICAgIFtjYW1lcmFSZWZdPVwidmlydHVhbENhbWVyYVJlZlwiXG4gICAgICAgICAgICAgICAgICAgIFttYWtlRGVmYXVsdF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Bvc2l0aW9uXT1cIlswLCAwLCAyMDBdXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxuZ3QtZ3JvdXBcbiAgICAgICAgICAgICAgICAgICAgKnJlZj1cImdpem1vUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgW3Bvc2l0aW9uXT1cImdldCgnZ2l6bW9Qb3NpdGlvbicpXCJcbiAgICAgICAgICAgICAgICAgICAgKGJlZm9yZVJlbmRlcik9XCJvbkJlZm9yZVJlbmRlcigkYW55KCRldmVudCkuc3RhdGUuZGVsdGEpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnaXptb0hlbHBlckNvbnRlbnRcIiAvPlxuICAgICAgICAgICAgICAgIDwvbmd0LWdyb3VwPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZ3QtcG9ydGFsPlxuICAgIGAsXG4gICAgaW1wb3J0czogW05ndFBvcnRhbCwgTmd0UG9ydGFsQ29udGVudCwgTmd0UmVmLCBOZ3RzT3J0aG9ncmFwaGljQ2FtZXJhLCBOZ1RlbXBsYXRlT3V0bGV0XSxcbiAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE5HVFNfR0laTU9fSEVMUEVSX0FQSSwgdXNlRmFjdG9yeTogZ2l6bW9IZWxwZXJBcGlGYWN0b3J5LCBkZXBzOiBbTmd0c0dpem1vSGVscGVyXSB9XSxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNHaXptb0hlbHBlciBleHRlbmRzIE5ndFJ4U3RvcmUgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmUgPSBpbmplY3QoTmd0U3RvcmUpO1xuXG4gICAgcmVhZG9ubHkgZ2l6bW9SZWYgPSBpbmplY3ROZ3RSZWY8R3JvdXA+KCk7XG4gICAgcmVhZG9ubHkgdmlydHVhbENhbWVyYVJlZiA9IGluamVjdE5ndFJlZjxPcnRob2dyYXBoaWNDYW1lcmE+KCk7XG5cbiAgICBhbmltYXRpbmcgPSBmYWxzZTtcbiAgICByYWRpdXMgPSAwO1xuICAgIGZvY3VzUG9pbnQgPSBuZXcgVmVjdG9yMygwLCAwLCAwKTtcbiAgICBxMSA9IG5ldyBRdWF0ZXJuaW9uKCk7XG4gICAgcTIgPSBuZXcgUXVhdGVybmlvbigpO1xuXG4gICAgdGFyZ2V0ID0gbmV3IFZlY3RvcjMoKTtcbiAgICB0YXJnZXRQb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7XG4gICAgZHVtbXkgPSBuZXcgT2JqZWN0M0QoKTtcblxuICAgIHByaXZhdGUgZGVmYXVsdFVwID0gbmV3IFZlY3RvcjMoMCwgMCwgMCk7XG4gICAgcHJpdmF0ZSB0dXJuUmF0ZSA9IDIgKiBNYXRoLlBJOyAvLyB0dXJuIHJhdGUgaW4gYW5nbGVzIHBlciBzZWNcbiAgICBwcml2YXRlIG1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG5cbiAgICBASW5wdXQoKSBzZXQgYWxpZ25tZW50KFxuICAgICAgICBhbGlnbm1lbnQ6XG4gICAgICAgICAgICB8ICd0b3AtbGVmdCdcbiAgICAgICAgICAgIHwgJ3RvcC1yaWdodCdcbiAgICAgICAgICAgIHwgJ2JvdHRvbS1yaWdodCdcbiAgICAgICAgICAgIHwgJ2JvdHRvbS1sZWZ0J1xuICAgICAgICAgICAgfCAnYm90dG9tLWNlbnRlcidcbiAgICAgICAgICAgIHwgJ2NlbnRlci1yaWdodCdcbiAgICAgICAgICAgIHwgJ2NlbnRlci1sZWZ0J1xuICAgICAgICAgICAgfCAnY2VudGVyLWNlbnRlcidcbiAgICAgICAgICAgIHwgJ3RvcC1jZW50ZXInXG4gICAgKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYWxpZ25tZW50IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBtYXJnaW4obWFyZ2luOiBbbnVtYmVyLCBudW1iZXJdKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbWFyZ2luIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCByZW5kZXJQcmlvcml0eShyZW5kZXJQcmlvcml0eTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgcmVuZGVyUHJpb3JpdHkgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGF1dG9DbGVhcihhdXRvQ2xlYXI6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBhdXRvQ2xlYXIgfSk7XG4gICAgfVxuXG4gICAgQE91dHB1dCgpIHVwZGF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICBAQ29udGVudENoaWxkKE5ndHNHaXptb0hlbHBlckNvbnRlbnQsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICAgIGdpem1vSGVscGVyQ29udGVudCE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gICAgb3ZlcnJpZGUgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgICAgICB0aGlzLnNldCh7IGFsaWdubWVudDogJ2JvdHRvbS1yaWdodCcsIG1hcmdpbjogWzgwLCA4MF0sIHJlbmRlclByaW9yaXR5OiAxIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnVwZGF0ZURlZmF1bHRVcCgpO1xuICAgICAgICB0aGlzLnNldEdpem1vUG9zaXRpb24oKTtcbiAgICB9XG5cbiAgICBvbkJlZm9yZVJlbmRlcihkZWx0YTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLnZpcnR1YWxDYW1lcmFSZWYubmF0aXZlRWxlbWVudCAmJiB0aGlzLmdpem1vUmVmLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgY29udHJvbHMsIGNhbWVyYTogbWFpbkNhbWVyYSwgaW52YWxpZGF0ZSB9ID0gdGhpcy5zdG9yZS5nZXQoKTtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRDb250cm9scyA9IGNvbnRyb2xzIGFzIHVua25vd24gYXMgQ29udHJvbHNQcm90bztcbiAgICAgICAgICAgIC8vIEFuaW1hdGUgc3RlcFxuICAgICAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW5nKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucTEuYW5nbGVUbyh0aGlzLnEyKSA8IDAuMDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbmltYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gT3JiaXQgY29udHJvbHMgdXNlcyBVUCB2ZWN0b3IgYXMgdGhlIG9yYml0IGF4ZXMsXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gcmVzZXQgaXQgYWZ0ZXIgdGhlIGFuaW1hdGlvbiBpcyBkb25lXG4gICAgICAgICAgICAgICAgICAgIC8vIG1vdmluZyBpdCBhcm91bmQgZm9yIHRoZSBjb250cm9scyB0byB3b3JrIGNvcnJlY3RseVxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNPcmJpdENvbnRyb2xzKGRlZmF1bHRDb250cm9scykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1haW5DYW1lcmEudXAuY29weSh0aGlzLmRlZmF1bHRVcCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGVwID0gZGVsdGEgKiB0aGlzLnR1cm5SYXRlO1xuICAgICAgICAgICAgICAgICAgICAvLyBhbmltYXRlIHBvc2l0aW9uIGJ5IGRvaW5nIGEgc2xlcnAgYW5kIHRoZW4gc2NhbGluZyB0aGUgcG9zaXRpb24gb24gdGhlIHVuaXQgc3BoZXJlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucTEucm90YXRlVG93YXJkcyh0aGlzLnEyLCBzdGVwKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gYW5pbWF0ZSBvcmllbnRhdGlvblxuICAgICAgICAgICAgICAgICAgICBtYWluQ2FtZXJhLnBvc2l0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2V0KDAsIDAsIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXBwbHlRdWF0ZXJuaW9uKHRoaXMucTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAubXVsdGlwbHlTY2FsYXIodGhpcy5yYWRpdXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAuYWRkKHRoaXMuZm9jdXNQb2ludCk7XG4gICAgICAgICAgICAgICAgICAgIG1haW5DYW1lcmEudXAuc2V0KDAsIDEsIDApLmFwcGx5UXVhdGVybmlvbih0aGlzLnExKS5ub3JtYWxpemUoKTtcbiAgICAgICAgICAgICAgICAgICAgbWFpbkNhbWVyYS5xdWF0ZXJuaW9uLmNvcHkodGhpcy5xMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnVwZGF0ZWQub2JzZXJ2ZWQpIHRoaXMudXBkYXRlZC5lbWl0KCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRlZmF1bHRDb250cm9scykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbnRyb2xzLnVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGludmFsaWRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFN5bmMgR2l6bW8gd2l0aCBtYWluIGNhbWVyYSBvcmllbnRhdGlvblxuICAgICAgICAgICAgdGhpcy5tYXRyaXguY29weShtYWluQ2FtZXJhLm1hdHJpeCkuaW52ZXJ0KCk7XG4gICAgICAgICAgICB0aGlzLmdpem1vUmVmLm5hdGl2ZUVsZW1lbnQucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgodGhpcy5tYXRyaXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRHaXptb1Bvc2l0aW9uKCkge1xuICAgICAgICB0aGlzLmNvbm5lY3QoXG4gICAgICAgICAgICAnZ2l6bW9Qb3NpdGlvbicsXG4gICAgICAgICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLnN0b3JlLnNlbGVjdCgnc2l6ZScpLCB0aGlzLnNlbGVjdChzZWxlY3RTbGljZShbJ2FsaWdubWVudCcsICdtYXJnaW4nXSkpXSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKFtzaXplLCB7IGFsaWdubWVudCwgbWFyZ2luIH1dKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFttYXJnaW5YLCBtYXJnaW5ZXSA9IG1hcmdpbjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeCA9IGFsaWdubWVudC5lbmRzV2l0aCgnLWNlbnRlcicpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IDBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYWxpZ25tZW50LmVuZHNXaXRoKCctbGVmdCcpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IC1zaXplLndpZHRoIC8gMiArIG1hcmdpblhcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc2l6ZS53aWR0aCAvIDIgLSBtYXJnaW5YO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB5ID0gYWxpZ25tZW50LnN0YXJ0c1dpdGgoJ2NlbnRlci0nKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGFsaWdubWVudC5zdGFydHNXaXRoKCd0b3AtJylcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2l6ZS5oZWlnaHQgLyAyIC0gbWFyZ2luWVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAtc2l6ZS5oZWlnaHQgLyAyICsgbWFyZ2luWTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt4LCB5LCAwXTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRGVmYXVsdFVwKCkge1xuICAgICAgICB0aGlzLmhvbGQodGhpcy5zdG9yZS5zZWxlY3QoJ2NhbWVyYScpLCAoY2FtZXJhKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRVcC5jb3B5KGNhbWVyYS51cCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==