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.
Files changed (57) hide show
  1. package/abstractions/README.md +3 -0
  2. package/abstractions/index.d.ts +10 -0
  3. package/abstractions/lib/billboard/billboard.d.ts +14 -0
  4. package/abstractions/lib/catmull-rom-line/catmull-rom-line.d.ts +15 -0
  5. package/abstractions/lib/cubic-bezier-line/cubic-bezier-line.d.ts +15 -0
  6. package/abstractions/lib/gizmo-helper/gizmo-helper.d.ts +41 -0
  7. package/abstractions/lib/gizmo-helper/gizmo-viewcube/constants.d.ts +12 -0
  8. package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +16 -0
  9. package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +24 -0
  10. package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +14 -0
  11. package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +15 -0
  12. package/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +28 -0
  13. package/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +21 -0
  14. package/abstractions/lib/line/line-input.d.ts +19 -0
  15. package/abstractions/lib/line/line.d.ts +21 -0
  16. package/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.d.ts +19 -0
  17. package/abstractions/lib/text/text.d.ts +21 -0
  18. package/abstractions/lib/text-3d/text-3d.d.ts +39 -0
  19. package/esm2020/abstractions/angular-three-soba-abstractions.mjs +5 -0
  20. package/esm2020/abstractions/index.mjs +11 -0
  21. package/esm2020/abstractions/lib/billboard/billboard.mjs +73 -0
  22. package/esm2020/abstractions/lib/catmull-rom-line/catmull-rom-line.mjs +119 -0
  23. package/esm2020/abstractions/lib/cubic-bezier-line/cubic-bezier-line.mjs +98 -0
  24. package/esm2020/abstractions/lib/gizmo-helper/gizmo-helper.mjs +206 -0
  25. package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/constants.mjs +31 -0
  26. package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +91 -0
  27. package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +182 -0
  28. package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +45 -0
  29. package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +133 -0
  30. package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +193 -0
  31. package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +266 -0
  32. package/esm2020/abstractions/lib/line/line-input.mjs +75 -0
  33. package/esm2020/abstractions/lib/line/line.mjs +147 -0
  34. package/esm2020/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.mjs +127 -0
  35. package/esm2020/abstractions/lib/text/text.mjs +110 -0
  36. package/esm2020/abstractions/lib/text-3d/text-3d.mjs +144 -0
  37. package/esm2020/cameras/lib/orthographic-camera/orthographic-camera.mjs +5 -5
  38. package/esm2020/staging/index.mjs +3 -1
  39. package/esm2020/staging/lib/camera-shake/camera-shake.mjs +121 -0
  40. package/esm2020/staging/lib/cloud/cloud.mjs +159 -0
  41. package/fesm2015/angular-three-soba-abstractions.mjs +1965 -0
  42. package/fesm2015/angular-three-soba-abstractions.mjs.map +1 -0
  43. package/fesm2015/angular-three-soba-cameras.mjs +4 -4
  44. package/fesm2015/angular-three-soba-cameras.mjs.map +1 -1
  45. package/fesm2015/angular-three-soba-staging.mjs +274 -4
  46. package/fesm2015/angular-three-soba-staging.mjs.map +1 -1
  47. package/fesm2020/angular-three-soba-abstractions.mjs +1962 -0
  48. package/fesm2020/angular-three-soba-abstractions.mjs.map +1 -0
  49. package/fesm2020/angular-three-soba-cameras.mjs +4 -4
  50. package/fesm2020/angular-three-soba-cameras.mjs.map +1 -1
  51. package/fesm2020/angular-three-soba-staging.mjs +274 -4
  52. package/fesm2020/angular-three-soba-staging.mjs.map +1 -1
  53. package/package.json +11 -3
  54. package/plugin/package.json +1 -1
  55. package/staging/index.d.ts +2 -0
  56. package/staging/lib/camera-shake/camera-shake.d.ts +28 -0
  57. package/staging/lib/cloud/cloud.d.ts +23 -0
@@ -0,0 +1,266 @@
1
+ import { NgIf } from '@angular/common';
2
+ import { Component, CUSTOM_ELEMENTS_SCHEMA, EventEmitter, inject, Input, Output } from '@angular/core';
3
+ import { extend, NgtRxStore } from 'angular-three';
4
+ import { AmbientLight, Group, PointLight } from 'three';
5
+ import { NGTS_GIZMO_HELPER_API } from '../gizmo-helper';
6
+ import { NgtsGizmoViewportAxis, NgtsGizmoViewportAxisHead } from './gizmo-viewport-axis';
7
+ import * as i0 from "@angular/core";
8
+ extend({ Group, AmbientLight, PointLight });
9
+ export class NgtsGizmoViewport extends NgtRxStore {
10
+ constructor() {
11
+ super(...arguments);
12
+ this.gizmoHelperApi = inject(NGTS_GIZMO_HELPER_API);
13
+ this.Math = Math;
14
+ this.clicked = new EventEmitter();
15
+ }
16
+ set axisColors(axisColors) {
17
+ this.set({ axisColors });
18
+ }
19
+ set axisScale(axisScale) {
20
+ this.set({ axisScale });
21
+ }
22
+ set labels(labels) {
23
+ this.set({ labels });
24
+ }
25
+ set axisHeadScale(axisHeadScale) {
26
+ this.set({ axisHeadScale });
27
+ }
28
+ set labelColor(labelColor) {
29
+ this.set({ labelColor });
30
+ }
31
+ set hideNegativeAxes(hideNegativeAxes) {
32
+ this.set({ hideNegativeAxes });
33
+ }
34
+ set hideAxisHeads(hideAxisHeads) {
35
+ this.set({ hideAxisHeads });
36
+ }
37
+ set disabled(disabled) {
38
+ this.set({ disabled });
39
+ }
40
+ set font(font) {
41
+ this.set({ font });
42
+ }
43
+ initialize() {
44
+ super.initialize();
45
+ this.set({
46
+ font: '18px Inter var, Arial, sans-serif',
47
+ axisColors: ['#ff2060', '#20df80', '#2080ff'],
48
+ axisHeadScale: 1,
49
+ labels: ['X', 'Y', 'Z'],
50
+ labelColor: '#000',
51
+ });
52
+ }
53
+ onPointerDown(event) {
54
+ if (!this.get('disabled')) {
55
+ event.stopPropagation();
56
+ this.gizmoHelperApi.tweenCamera(event.object.position);
57
+ }
58
+ }
59
+ }
60
+ NgtsGizmoViewport.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsGizmoViewport, deps: null, target: i0.ɵɵFactoryTarget.Component });
61
+ NgtsGizmoViewport.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.3", type: NgtsGizmoViewport, isStandalone: true, selector: "ngts-gizmo-viewport", inputs: { axisColors: "axisColors", axisScale: "axisScale", labels: "labels", axisHeadScale: "axisHeadScale", labelColor: "labelColor", hideNegativeAxes: "hideNegativeAxes", hideAxisHeads: "hideAxisHeads", disabled: "disabled", font: "font" }, outputs: { clicked: "clicked" }, usesInheritance: true, ngImport: i0, template: `
62
+ <ngt-group ngtCompound [scale]="40">
63
+ <ngts-gizmo-viewport-axis
64
+ [color]="get('axisColors')[0]"
65
+ [rotation]="[0, 0, 0]"
66
+ [scale]="get('axisScale')"
67
+ ></ngts-gizmo-viewport-axis>
68
+ <ngts-gizmo-viewport-axis
69
+ [color]="get('axisColors')[1]"
70
+ [rotation]="[0, 0, Math.PI / 2]"
71
+ [scale]="get('axisScale')"
72
+ ></ngts-gizmo-viewport-axis>
73
+ <ngts-gizmo-viewport-axis
74
+ [color]="get('axisColors')[2]"
75
+ [rotation]="[0, -Math.PI / 2, 0]"
76
+ [scale]="get('axisScale')"
77
+ ></ngts-gizmo-viewport-axis>
78
+ <ng-container *ngIf="!get('hideAxisHeads')">
79
+ <ngts-gizmo-viewport-axis-head
80
+ [arcStyle]="get('axisColors')[0]"
81
+ [position]="[1, 0, 0]"
82
+ [label]="get('labels')[0]"
83
+ [font]="get('font')"
84
+ [disabled]="get('disabled')"
85
+ [labelColor]="get('labelColor')"
86
+ [clickEmitter]="clicked"
87
+ [axisHeadScale]="get('axisHeadScale')"
88
+ (pointerdown)="onPointerDown($any($event))"
89
+ ></ngts-gizmo-viewport-axis-head>
90
+ <ngts-gizmo-viewport-axis-head
91
+ [arcStyle]="get('axisColors')[1]"
92
+ [position]="[0, 1, 0]"
93
+ [label]="get('labels')[1]"
94
+ [font]="get('font')"
95
+ [disabled]="get('disabled')"
96
+ [labelColor]="get('labelColor')"
97
+ [clickEmitter]="clicked"
98
+ [axisHeadScale]="get('axisHeadScale')"
99
+ (pointerdown)="onPointerDown($any($event))"
100
+ ></ngts-gizmo-viewport-axis-head>
101
+ <ngts-gizmo-viewport-axis-head
102
+ [arcStyle]="get('axisColors')[2]"
103
+ [position]="[0, 0, 1]"
104
+ [label]="get('labels')[2]"
105
+ [font]="get('font')"
106
+ [disabled]="get('disabled')"
107
+ [labelColor]="get('labelColor')"
108
+ [clickEmitter]="clicked"
109
+ [axisHeadScale]="get('axisHeadScale')"
110
+ (pointerdown)="onPointerDown($any($event))"
111
+ ></ngts-gizmo-viewport-axis-head>
112
+ <ng-container *ngIf="!get('hideNegativeAxes')">
113
+ <ngts-gizmo-viewport-axis-head
114
+ [arcStyle]="get('axisColors')[0]"
115
+ [position]="[-1, 0, 0]"
116
+ [font]="get('font')"
117
+ [disabled]="get('disabled')"
118
+ [labelColor]="get('labelColor')"
119
+ [clickEmitter]="clicked"
120
+ [axisHeadScale]="get('axisHeadScale')"
121
+ (pointerdown)="onPointerDown($any($event))"
122
+ ></ngts-gizmo-viewport-axis-head>
123
+ <ngts-gizmo-viewport-axis-head
124
+ [arcStyle]="get('axisColors')[1]"
125
+ [position]="[0, -1, 0]"
126
+ [font]="get('font')"
127
+ [disabled]="get('disabled')"
128
+ [labelColor]="get('labelColor')"
129
+ [clickEmitter]="clicked"
130
+ [axisHeadScale]="get('axisHeadScale')"
131
+ (pointerdown)="onPointerDown($any($event))"
132
+ ></ngts-gizmo-viewport-axis-head>
133
+ <ngts-gizmo-viewport-axis-head
134
+ [arcStyle]="get('axisColors')[2]"
135
+ [position]="[0, 0, -1]"
136
+ [font]="get('font')"
137
+ [disabled]="get('disabled')"
138
+ [labelColor]="get('labelColor')"
139
+ [clickEmitter]="clicked"
140
+ [axisHeadScale]="get('axisHeadScale')"
141
+ (pointerdown)="onPointerDown($any($event))"
142
+ ></ngts-gizmo-viewport-axis-head>
143
+ </ng-container>
144
+ </ng-container>
145
+ <ngt-ambient-light intensity="0.5"></ngt-ambient-light>
146
+ <ngt-point-light position="10" intensity="0.5"></ngt-point-light>
147
+ </ngt-group>
148
+ `, isInline: true, dependencies: [{ kind: "component", type: NgtsGizmoViewportAxis, selector: "ngts-gizmo-viewport-axis[color][rotation]", inputs: ["color", "rotation", "scale"] }, { kind: "component", type: NgtsGizmoViewportAxisHead, selector: "ngts-gizmo-viewport-axis-head", inputs: ["arcStyle", "label", "labelColor", "axisHeadScale", "disabled", "font", "clickEmitter"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
149
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsGizmoViewport, decorators: [{
150
+ type: Component,
151
+ args: [{
152
+ selector: 'ngts-gizmo-viewport',
153
+ standalone: true,
154
+ template: `
155
+ <ngt-group ngtCompound [scale]="40">
156
+ <ngts-gizmo-viewport-axis
157
+ [color]="get('axisColors')[0]"
158
+ [rotation]="[0, 0, 0]"
159
+ [scale]="get('axisScale')"
160
+ ></ngts-gizmo-viewport-axis>
161
+ <ngts-gizmo-viewport-axis
162
+ [color]="get('axisColors')[1]"
163
+ [rotation]="[0, 0, Math.PI / 2]"
164
+ [scale]="get('axisScale')"
165
+ ></ngts-gizmo-viewport-axis>
166
+ <ngts-gizmo-viewport-axis
167
+ [color]="get('axisColors')[2]"
168
+ [rotation]="[0, -Math.PI / 2, 0]"
169
+ [scale]="get('axisScale')"
170
+ ></ngts-gizmo-viewport-axis>
171
+ <ng-container *ngIf="!get('hideAxisHeads')">
172
+ <ngts-gizmo-viewport-axis-head
173
+ [arcStyle]="get('axisColors')[0]"
174
+ [position]="[1, 0, 0]"
175
+ [label]="get('labels')[0]"
176
+ [font]="get('font')"
177
+ [disabled]="get('disabled')"
178
+ [labelColor]="get('labelColor')"
179
+ [clickEmitter]="clicked"
180
+ [axisHeadScale]="get('axisHeadScale')"
181
+ (pointerdown)="onPointerDown($any($event))"
182
+ ></ngts-gizmo-viewport-axis-head>
183
+ <ngts-gizmo-viewport-axis-head
184
+ [arcStyle]="get('axisColors')[1]"
185
+ [position]="[0, 1, 0]"
186
+ [label]="get('labels')[1]"
187
+ [font]="get('font')"
188
+ [disabled]="get('disabled')"
189
+ [labelColor]="get('labelColor')"
190
+ [clickEmitter]="clicked"
191
+ [axisHeadScale]="get('axisHeadScale')"
192
+ (pointerdown)="onPointerDown($any($event))"
193
+ ></ngts-gizmo-viewport-axis-head>
194
+ <ngts-gizmo-viewport-axis-head
195
+ [arcStyle]="get('axisColors')[2]"
196
+ [position]="[0, 0, 1]"
197
+ [label]="get('labels')[2]"
198
+ [font]="get('font')"
199
+ [disabled]="get('disabled')"
200
+ [labelColor]="get('labelColor')"
201
+ [clickEmitter]="clicked"
202
+ [axisHeadScale]="get('axisHeadScale')"
203
+ (pointerdown)="onPointerDown($any($event))"
204
+ ></ngts-gizmo-viewport-axis-head>
205
+ <ng-container *ngIf="!get('hideNegativeAxes')">
206
+ <ngts-gizmo-viewport-axis-head
207
+ [arcStyle]="get('axisColors')[0]"
208
+ [position]="[-1, 0, 0]"
209
+ [font]="get('font')"
210
+ [disabled]="get('disabled')"
211
+ [labelColor]="get('labelColor')"
212
+ [clickEmitter]="clicked"
213
+ [axisHeadScale]="get('axisHeadScale')"
214
+ (pointerdown)="onPointerDown($any($event))"
215
+ ></ngts-gizmo-viewport-axis-head>
216
+ <ngts-gizmo-viewport-axis-head
217
+ [arcStyle]="get('axisColors')[1]"
218
+ [position]="[0, -1, 0]"
219
+ [font]="get('font')"
220
+ [disabled]="get('disabled')"
221
+ [labelColor]="get('labelColor')"
222
+ [clickEmitter]="clicked"
223
+ [axisHeadScale]="get('axisHeadScale')"
224
+ (pointerdown)="onPointerDown($any($event))"
225
+ ></ngts-gizmo-viewport-axis-head>
226
+ <ngts-gizmo-viewport-axis-head
227
+ [arcStyle]="get('axisColors')[2]"
228
+ [position]="[0, 0, -1]"
229
+ [font]="get('font')"
230
+ [disabled]="get('disabled')"
231
+ [labelColor]="get('labelColor')"
232
+ [clickEmitter]="clicked"
233
+ [axisHeadScale]="get('axisHeadScale')"
234
+ (pointerdown)="onPointerDown($any($event))"
235
+ ></ngts-gizmo-viewport-axis-head>
236
+ </ng-container>
237
+ </ng-container>
238
+ <ngt-ambient-light intensity="0.5"></ngt-ambient-light>
239
+ <ngt-point-light position="10" intensity="0.5"></ngt-point-light>
240
+ </ngt-group>
241
+ `,
242
+ imports: [NgtsGizmoViewportAxis, NgtsGizmoViewportAxisHead, NgIf],
243
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
244
+ }]
245
+ }], propDecorators: { axisColors: [{
246
+ type: Input
247
+ }], axisScale: [{
248
+ type: Input
249
+ }], labels: [{
250
+ type: Input
251
+ }], axisHeadScale: [{
252
+ type: Input
253
+ }], labelColor: [{
254
+ type: Input
255
+ }], hideNegativeAxes: [{
256
+ type: Input
257
+ }], hideAxisHeads: [{
258
+ type: Input
259
+ }], disabled: [{
260
+ type: Input
261
+ }], font: [{
262
+ type: Input
263
+ }], clicked: [{
264
+ type: Output
265
+ }] } });
266
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l6bW8tdmlld3BvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9hYnN0cmFjdGlvbnMvc3JjL2xpYi9naXptby1oZWxwZXIvZ2l6bW8tdmlld3BvcnQvZ2l6bW8tdmlld3BvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBRXpGLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztBQWdHNUMsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFVBQVU7SUE5RmpEOztRQStGYSxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBRS9DLFNBQUksR0FBRyxJQUFJLENBQUM7UUFzQ1gsWUFBTyxHQUFHLElBQUksWUFBWSxFQUE2QixDQUFDO0tBbUJyRTtJQXZERyxJQUFhLFVBQVUsQ0FBQyxVQUFvQztRQUN4RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBYSxTQUFTLENBQUMsU0FBbUM7UUFDdEQsSUFB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QU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGV4dGVuZCwgTmd0UnhTdG9yZSwgTmd0VGhyZWVFdmVudCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgQW1iaWVudExpZ2h0LCBHcm91cCwgUG9pbnRMaWdodCB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE5HVFNfR0laTU9fSEVMUEVSX0FQSSB9IGZyb20gJy4uL2dpem1vLWhlbHBlcic7XG5pbXBvcnQgeyBOZ3RzR2l6bW9WaWV3cG9ydEF4aXMsIE5ndHNHaXptb1ZpZXdwb3J0QXhpc0hlYWQgfSBmcm9tICcuL2dpem1vLXZpZXdwb3J0LWF4aXMnO1xuXG5leHRlbmQoeyBHcm91cCwgQW1iaWVudExpZ2h0LCBQb2ludExpZ2h0IH0pO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndHMtZ2l6bW8tdmlld3BvcnQnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5ndC1ncm91cCBuZ3RDb21wb3VuZCBbc2NhbGVdPVwiNDBcIj5cbiAgICAgICAgICAgIDxuZ3RzLWdpem1vLXZpZXdwb3J0LWF4aXNcbiAgICAgICAgICAgICAgICBbY29sb3JdPVwiZ2V0KCdheGlzQ29sb3JzJylbMF1cIlxuICAgICAgICAgICAgICAgIFtyb3RhdGlvbl09XCJbMCwgMCwgMF1cIlxuICAgICAgICAgICAgICAgIFtzY2FsZV09XCJnZXQoJ2F4aXNTY2FsZScpXCJcbiAgICAgICAgICAgID48L25ndHMtZ2l6bW8tdmlld3BvcnQtYXhpcz5cbiAgICAgICAgICAgIDxuZ3RzLWdpem1vLXZpZXdwb3J0LWF4aXNcbiAgICAgICAgICAgICAgICBbY29sb3JdPVwiZ2V0KCdheGlzQ29sb3JzJylbMV1cIlxuICAgICAgICAgICAgICAgIFtyb3RhdGlvbl09XCJbMCwgMCwgTWF0aC5QSSAvIDJdXCJcbiAgICAgICAgICAgICAgICBbc2NhbGVdPVwiZ2V0KCdheGlzU2NhbGUnKVwiXG4gICAgICAgICAgICA+PC9uZ3RzLWdpem1vLXZpZXdwb3J0LWF4aXM+XG4gICAgICAgICAgICA8bmd0cy1naXptby12aWV3cG9ydC1heGlzXG4gICAgICAgICAgICAgICAgW2NvbG9yXT1cImdldCgnYXhpc0NvbG9ycycpWzJdXCJcbiAgICAgICAgICAgICAgICBbcm90YXRpb25dPVwiWzAsIC1NYXRoLlBJIC8gMiwgMF1cIlxuICAgICAgICAgICAgICAgIFtzY2FsZV09XCJnZXQoJ2F4aXNTY2FsZScpXCJcbiAgICAgICAgICAgID48L25ndHMtZ2l6bW8tdmlld3BvcnQtYXhpcz5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZ2V0KCdoaWRlQXhpc0hlYWRzJylcIj5cbiAgICAgICAgICAgICAgICA8bmd0cy1naXptby12aWV3cG9ydC1heGlzLWhlYWRcbiAgICAgICAgICAgICAgICAgICAgW2FyY1N0eWxlXT1cImdldCgnYXhpc0NvbG9ycycpWzBdXCJcbiAgICAgICAgICAgICAgICAgICAgW3Bvc2l0aW9uXT1cIlsxLCAwLCAwXVwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJnZXQoJ2xhYmVscycpWzBdXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZvbnRdPVwiZ2V0KCdmb250JylcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2V0KCdkaXNhYmxlZCcpXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsQ29sb3JdPVwiZ2V0KCdsYWJlbENvbG9yJylcIlxuICAgICAgICAgICAgICAgICAgICBbY2xpY2tFbWl0dGVyXT1cImNsaWNrZWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXhpc0hlYWRTY2FsZV09XCJnZXQoJ2F4aXNIZWFkU2NhbGUnKVwiXG4gICAgICAgICAgICAgICAgICAgIChwb2ludGVyZG93bik9XCJvblBvaW50ZXJEb3duKCRhbnkoJGV2ZW50KSlcIlxuICAgICAgICAgICAgICAgID48L25ndHMtZ2l6bW8tdmlld3BvcnQtYXhpcy1oZWFkPlxuICAgICAgICAgICAgICAgIDxuZ3RzLWdpem1vLXZpZXdwb3J0LWF4aXMtaGVhZFxuICAgICAgICAgICAgICAgICAgICBbYXJjU3R5bGVdPVwiZ2V0KCdheGlzQ29sb3JzJylbMV1cIlxuICAgICAgICAgICAgICAgICAgICBbcG9zaXRpb25dPVwiWzAsIDEsIDBdXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImdldCgnbGFiZWxzJylbMV1cIlxuICAgICAgICAgICAgICAgICAgICBbZm9udF09XCJnZXQoJ2ZvbnQnKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJnZXQoJ2Rpc2FibGVkJylcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxDb2xvcl09XCJnZXQoJ2xhYmVsQ29sb3InKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGlja0VtaXR0ZXJdPVwiY2xpY2tlZFwiXG4gICAgICAgICAgICAgICAgICAgIFtheGlzSGVhZFNjYWxlXT1cImdldCgnYXhpc0hlYWRTY2FsZScpXCJcbiAgICAgICAgICAgICAgICAgICAgKHBvaW50ZXJkb3duKT1cIm9uUG9pbnRlckRvd24oJGFueSgkZXZlbnQpKVwiXG4gICAgICAgICAgICAgICAgPjwvbmd0cy1naXptby12aWV3cG9ydC1heGlzLWhlYWQ+XG4gICAgICAgICAgICAgICAgPG5ndHMtZ2l6bW8tdmlld3BvcnQtYXhpcy1oZWFkXG4gICAgICAgICAgICAgICAgICAgIFthcmNTdHlsZV09XCJnZXQoJ2F4aXNDb2xvcnMnKVsyXVwiXG4gICAgICAgICAgICAgICAgICAgIFtwb3NpdGlvbl09XCJbMCwgMCwgMV1cIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZ2V0KCdsYWJlbHMnKVsyXVwiXG4gICAgICAgICAgICAgICAgICAgIFtmb250XT1cImdldCgnZm9udCcpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdldCgnZGlzYWJsZWQnKVwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbENvbG9yXT1cImdldCgnbGFiZWxDb2xvcicpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsaWNrRW1pdHRlcl09XCJjbGlja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgW2F4aXNIZWFkU2NhbGVdPVwiZ2V0KCdheGlzSGVhZFNjYWxlJylcIlxuICAgICAgICAgICAgICAgICAgICAocG9pbnRlcmRvd24pPVwib25Qb2ludGVyRG93bigkYW55KCRldmVudCkpXCJcbiAgICAgICAgICAgICAgICA+PC9uZ3RzLWdpem1vLXZpZXdwb3J0LWF4aXMtaGVhZD5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWdldCgnaGlkZU5lZ2F0aXZlQXhlcycpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZ3RzLWdpem1vLXZpZXdwb3J0LWF4aXMtaGVhZFxuICAgICAgICAgICAgICAgICAgICAgICAgW2FyY1N0eWxlXT1cImdldCgnYXhpc0NvbG9ycycpWzBdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwb3NpdGlvbl09XCJbLTEsIDAsIDBdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb250XT1cImdldCgnZm9udCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJnZXQoJ2Rpc2FibGVkJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsQ29sb3JdPVwiZ2V0KCdsYWJlbENvbG9yJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsaWNrRW1pdHRlcl09XCJjbGlja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtheGlzSGVhZFNjYWxlXT1cImdldCgnYXhpc0hlYWRTY2FsZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChwb2ludGVyZG93bik9XCJvblBvaW50ZXJEb3duKCRhbnkoJGV2ZW50KSlcIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZ3RzLWdpem1vLXZpZXdwb3J0LWF4aXMtaGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPG5ndHMtZ2l6bW8tdmlld3BvcnQtYXhpcy1oZWFkXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXJjU3R5bGVdPVwiZ2V0KCdheGlzQ29sb3JzJylbMV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Bvc2l0aW9uXT1cIlswLCAtMSwgMF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZvbnRdPVwiZ2V0KCdmb250JylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdldCgnZGlzYWJsZWQnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxDb2xvcl09XCJnZXQoJ2xhYmVsQ29sb3InKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xpY2tFbWl0dGVyXT1cImNsaWNrZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F4aXNIZWFkU2NhbGVdPVwiZ2V0KCdheGlzSGVhZFNjYWxlJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHBvaW50ZXJkb3duKT1cIm9uUG9pbnRlckRvd24oJGFueSgkZXZlbnQpKVwiXG4gICAgICAgICAgICAgICAgICAgID48L25ndHMtZ2l6bW8tdmlld3BvcnQtYXhpcy1oZWFkPlxuICAgICAgICAgICAgICAgICAgICA8bmd0cy1naXptby12aWV3cG9ydC1heGlzLWhlYWRcbiAgICAgICAgICAgICAgICAgICAgICAgIFthcmNTdHlsZV09XCJnZXQoJ2F4aXNDb2xvcnMnKVsyXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcG9zaXRpb25dPVwiWzAsIDAsIC0xXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9udF09XCJnZXQoJ2ZvbnQnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2V0KCdkaXNhYmxlZCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbENvbG9yXT1cImdldCgnbGFiZWxDb2xvcicpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGlja0VtaXR0ZXJdPVwiY2xpY2tlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXhpc0hlYWRTY2FsZV09XCJnZXQoJ2F4aXNIZWFkU2NhbGUnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAocG9pbnRlcmRvd24pPVwib25Qb2ludGVyRG93bigkYW55KCRldmVudCkpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmd0cy1naXptby12aWV3cG9ydC1heGlzLWhlYWQ+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZ3QtYW1iaWVudC1saWdodCBpbnRlbnNpdHk9XCIwLjVcIj48L25ndC1hbWJpZW50LWxpZ2h0PlxuICAgICAgICAgICAgPG5ndC1wb2ludC1saWdodCBwb3NpdGlvbj1cIjEwXCIgaW50ZW5zaXR5PVwiMC41XCI+PC9uZ3QtcG9pbnQtbGlnaHQ+XG4gICAgICAgIDwvbmd0LWdyb3VwPlxuICAgIGAsXG4gICAgaW1wb3J0czogW05ndHNHaXptb1ZpZXdwb3J0QXhpcywgTmd0c0dpem1vVmlld3BvcnRBeGlzSGVhZCwgTmdJZl0sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzR2l6bW9WaWV3cG9ydCBleHRlbmRzIE5ndFJ4U3RvcmUge1xuICAgIHJlYWRvbmx5IGdpem1vSGVscGVyQXBpID0gaW5qZWN0KE5HVFNfR0laTU9fSEVMUEVSX0FQSSk7XG5cbiAgICByZWFkb25seSBNYXRoID0gTWF0aDtcblxuICAgIEBJbnB1dCgpIHNldCBheGlzQ29sb3JzKGF4aXNDb2xvcnM6IFtzdHJpbmcsIHN0cmluZywgc3RyaW5nXSkge1xuICAgICAgICB0aGlzLnNldCh7IGF4aXNDb2xvcnMgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGF4aXNTY2FsZShheGlzU2NhbGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSkge1xuICAgICAgICB0aGlzLnNldCh7IGF4aXNTY2FsZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgbGFiZWxzKGxhYmVsczogW3N0cmluZywgc3RyaW5nLCBzdHJpbmddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbGFiZWxzIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBheGlzSGVhZFNjYWxlKGF4aXNIZWFkU2NhbGU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGF4aXNIZWFkU2NhbGUgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGxhYmVsQ29sb3IobGFiZWxDb2xvcjogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbGFiZWxDb2xvciB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgaGlkZU5lZ2F0aXZlQXhlcyhoaWRlTmVnYXRpdmVBeGVzOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgaGlkZU5lZ2F0aXZlQXhlcyB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgaGlkZUF4aXNIZWFkcyhoaWRlQXhpc0hlYWRzOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgaGlkZUF4aXNIZWFkcyB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZGlzYWJsZWQoZGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkaXNhYmxlZCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZm9udChmb250OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBmb250IH0pO1xuICAgIH1cblxuICAgIEBPdXRwdXQoKSBjbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxOZ3RUaHJlZUV2ZW50PE1vdXNlRXZlbnQ+PigpO1xuXG4gICAgb3ZlcnJpZGUgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgICAgICB0aGlzLnNldCh7XG4gICAgICAgICAgICBmb250OiAnMThweCBJbnRlciB2YXIsIEFyaWFsLCBzYW5zLXNlcmlmJyxcbiAgICAgICAgICAgIGF4aXNDb2xvcnM6IFsnI2ZmMjA2MCcsICcjMjBkZjgwJywgJyMyMDgwZmYnXSxcbiAgICAgICAgICAgIGF4aXNIZWFkU2NhbGU6IDEsXG4gICAgICAgICAgICBsYWJlbHM6IFsnWCcsICdZJywgJ1onXSxcbiAgICAgICAgICAgIGxhYmVsQ29sb3I6ICcjMDAwJyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25Qb2ludGVyRG93bihldmVudDogTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KSB7XG4gICAgICAgIGlmICghdGhpcy5nZXQoJ2Rpc2FibGVkJykpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5naXptb0hlbHBlckFwaS50d2VlbkNhbWVyYShldmVudC5vYmplY3QucG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -0,0 +1,75 @@
1
+ import { Directive, Input } from '@angular/core';
2
+ import { NgtRxStore } from 'angular-three';
3
+ import * as i0 from "@angular/core";
4
+ export class NgtsLineInput extends NgtRxStore {
5
+ set vertexColors(vertexColors) {
6
+ this.set({ vertexColors });
7
+ }
8
+ set lineWidth(lineWidth) {
9
+ this.set({ lineWidth });
10
+ }
11
+ set alphaToCoverage(alphaToCoverage) {
12
+ this.set({ alphaToCoverage });
13
+ }
14
+ set color(color) {
15
+ this.set({ color });
16
+ }
17
+ set dashed(dashed) {
18
+ this.set({ dashed });
19
+ }
20
+ set dashScale(dashScale) {
21
+ this.set({ dashScale });
22
+ }
23
+ set dashSize(dashSize) {
24
+ this.set({ dashSize });
25
+ }
26
+ set dashOffset(dashOffset) {
27
+ this.set({ dashOffset });
28
+ }
29
+ set gapSize(gapSize) {
30
+ this.set({ gapSize });
31
+ }
32
+ set resolution(resolution) {
33
+ this.set({ resolution });
34
+ }
35
+ set wireframe(wireframe) {
36
+ this.set({ wireframe });
37
+ }
38
+ set worldUnits(worldUnits) {
39
+ this.set({ worldUnits });
40
+ }
41
+ initialize() {
42
+ super.initialize();
43
+ this.set({ color: 'black' });
44
+ }
45
+ }
46
+ NgtsLineInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsLineInput, deps: null, target: i0.ɵɵFactoryTarget.Directive });
47
+ NgtsLineInput.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.3", type: NgtsLineInput, inputs: { vertexColors: "vertexColors", lineWidth: "lineWidth", alphaToCoverage: "alphaToCoverage", color: "color", dashed: "dashed", dashScale: "dashScale", dashSize: "dashSize", dashOffset: "dashOffset", gapSize: "gapSize", resolution: "resolution", wireframe: "wireframe", worldUnits: "worldUnits" }, usesInheritance: true, ngImport: i0 });
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsLineInput, decorators: [{
49
+ type: Directive
50
+ }], propDecorators: { vertexColors: [{
51
+ type: Input
52
+ }], lineWidth: [{
53
+ type: Input
54
+ }], alphaToCoverage: [{
55
+ type: Input
56
+ }], color: [{
57
+ type: Input
58
+ }], dashed: [{
59
+ type: Input
60
+ }], dashScale: [{
61
+ type: Input
62
+ }], dashSize: [{
63
+ type: Input
64
+ }], dashOffset: [{
65
+ type: Input
66
+ }], gapSize: [{
67
+ type: Input
68
+ }], resolution: [{
69
+ type: Input
70
+ }], wireframe: [{
71
+ type: Input
72
+ }], worldUnits: [{
73
+ type: Input
74
+ }] } });
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1pbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS1zb2JhL2Fic3RyYWN0aW9ucy9zcmMvbGliL2xpbmUvbGluZS1pbnB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUczQyxNQUFNLE9BQWdCLGFBQWMsU0FBUSxVQUFVO0lBQ2xELElBQWEsWUFBWSxDQUFDLFlBQTJEO1FBQ2pGLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFhLFNBQVMsQ0FBQyxTQUFpQjtRQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBYSxlQUFlLENBQUMsZUFBd0I7UUFDakQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQWEsS0FBSyxDQUFDLEtBQWdDO1FBQy9DLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFhLE1BQU0sQ0FBQyxNQUFlO1FBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFhLFNBQVMsQ0FBQyxTQUFpQjtRQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBYSxRQUFRLENBQUMsUUFBZ0I7UUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQWEsVUFBVSxDQUFDLFVBQWtCO1FBQ3RDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFhLE9BQU8sQ0FBQyxPQUFlO1FBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFhLFVBQVUsQ0FBQyxVQUF5QjtRQUM3QyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBYSxTQUFTLENBQUMsU0FBa0I7UUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQWEsVUFBVSxDQUFDLFVBQW1CO1FBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFUSxVQUFVO1FBQ2YsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNqQyxDQUFDOzswR0FwRGlCLGFBQWE7OEZBQWIsYUFBYTsyRkFBYixhQUFhO2tCQURsQyxTQUFTOzhCQUVPLFlBQVk7c0JBQXhCLEtBQUs7Z0JBSU8sU0FBUztzQkFBckIsS0FBSztnQkFJTyxlQUFlO3NCQUEzQixLQUFLO2dCQUlPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBSU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJTyxTQUFTO3NCQUFyQixLQUFLO2dCQUlPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBSU8sVUFBVTtzQkFBdEIsS0FBSztnQkFJTyxPQUFPO3NCQUFuQixLQUFLO2dCQUlPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBSU8sU0FBUztzQkFBckIsS0FBSztnQkFJTyxVQUFVO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd0UnhTdG9yZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOZ3RzTGluZUlucHV0IGV4dGVuZHMgTmd0UnhTdG9yZSB7XG4gICAgQElucHV0KCkgc2V0IHZlcnRleENvbG9ycyh2ZXJ0ZXhDb2xvcnM6IEFycmF5PFRIUkVFLkNvbG9yIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdPikge1xuICAgICAgICB0aGlzLnNldCh7IHZlcnRleENvbG9ycyB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgbGluZVdpZHRoKGxpbmVXaWR0aDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbGluZVdpZHRoIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBhbHBoYVRvQ292ZXJhZ2UoYWxwaGFUb0NvdmVyYWdlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYWxwaGFUb0NvdmVyYWdlIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBjb2xvcihjb2xvcjogVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbikge1xuICAgICAgICB0aGlzLnNldCh7IGNvbG9yIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBkYXNoZWQoZGFzaGVkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZGFzaGVkIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBkYXNoU2NhbGUoZGFzaFNjYWxlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkYXNoU2NhbGUgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGRhc2hTaXplKGRhc2hTaXplOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkYXNoU2l6ZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZGFzaE9mZnNldChkYXNoT2Zmc2V0OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkYXNoT2Zmc2V0IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBnYXBTaXplKGdhcFNpemU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGdhcFNpemUgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHJlc29sdXRpb24ocmVzb2x1dGlvbjogVEhSRUUuVmVjdG9yMikge1xuICAgICAgICB0aGlzLnNldCh7IHJlc29sdXRpb24gfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHdpcmVmcmFtZSh3aXJlZnJhbWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyB3aXJlZnJhbWUgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHdvcmxkVW5pdHMod29ybGRVbml0czogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldCh7IHdvcmxkVW5pdHMgfSk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgICAgICB0aGlzLnNldCh7IGNvbG9yOiAnYmxhY2snIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,147 @@
1
+ import { Component, CUSTOM_ELEMENTS_SCHEMA, inject, Input } from '@angular/core';
2
+ import { injectNgtRef, NgtArgs, NgtStore, startWithUndefined } from 'angular-three';
3
+ import { combineLatest, map } from 'rxjs';
4
+ import * as THREE from 'three';
5
+ import { Line2, LineGeometry, LineMaterial, LineSegments2, LineSegmentsGeometry } from 'three-stdlib';
6
+ import { NgtsLineInput } from './line-input';
7
+ import * as i0 from "@angular/core";
8
+ export class NgtsLine extends NgtsLineInput {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.Boolean = Boolean;
12
+ this.lineMaterial = new LineMaterial();
13
+ this.store = inject(NgtStore);
14
+ this.lineRef = injectNgtRef();
15
+ }
16
+ set points(points) {
17
+ this.set({ points });
18
+ }
19
+ set segments(segments) {
20
+ this.set({ segments });
21
+ }
22
+ // TODO: Figure out if this is the case for everything else.
23
+ // We'd want to run computeLineDistances on the Line2 on "points" changed
24
+ // Consequently,when "points" changes, LineGeometry also changes and that causes
25
+ // the Renderer to replace the LineGeometry on the Line2, which is what's happening.
26
+ // But the effect that runs line.computeLineDistances() runs a little BEFORE the new lineGeometry
27
+ // has been attached. So it doesn't work with the props changed from the Material
28
+ //
29
+ // Alternatively, we can also run the effect on line#children changes.
30
+ onAfterGeometryAttached({ parent }) {
31
+ // parent.computeLineDistances();
32
+ }
33
+ initialize() {
34
+ super.initialize();
35
+ this.set({ segments: false });
36
+ this.connect('lineGeometry', combineLatest([
37
+ this.select('points'),
38
+ this.select('segments'),
39
+ this.select('vertexColors').pipe(startWithUndefined()),
40
+ ]).pipe(map(([points, segments, vertexColors]) => {
41
+ const geometry = segments ? new LineSegmentsGeometry() : new LineGeometry();
42
+ const pValues = points.map((p) => {
43
+ const isArray = Array.isArray(p);
44
+ return p instanceof THREE.Vector3
45
+ ? [p.x, p.y, p.z]
46
+ : p instanceof THREE.Vector2
47
+ ? [p.x, p.y, 0]
48
+ : isArray && p.length === 3
49
+ ? [p[0], p[1], p[2]]
50
+ : isArray && p.length === 2
51
+ ? [p[0], p[1], 0]
52
+ : p;
53
+ });
54
+ geometry.setPositions(pValues.flat());
55
+ if (vertexColors) {
56
+ const cValues = vertexColors.map((c) => c instanceof THREE.Color ? c.toArray() : c);
57
+ geometry.setColors(cValues.flat());
58
+ }
59
+ return geometry;
60
+ })));
61
+ }
62
+ ngOnInit() {
63
+ this.connect('materialResolution', combineLatest([this.store.select('size'), this.select('resolution').pipe(startWithUndefined())]).pipe(map(([size, resolution]) => resolution ?? [size.width, size.height])));
64
+ if (!this.lineRef.nativeElement) {
65
+ this.lineRef.nativeElement = this.get('segments') ? new LineSegments2() : new Line2();
66
+ }
67
+ this.computeLineDistances();
68
+ this.disposeGeometry();
69
+ }
70
+ computeLineDistances() {
71
+ this.hold(combineLatest([this.lineRef.$, this.lineRef.children$('nonObjects'), this.select('points')]), ([line]) => {
72
+ line.computeLineDistances();
73
+ });
74
+ }
75
+ disposeGeometry() {
76
+ this.effect(this.select('lineGeometry'), (lineGeometry) => {
77
+ return () => lineGeometry.dispose();
78
+ });
79
+ }
80
+ }
81
+ NgtsLine.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsLine, deps: null, target: i0.ɵɵFactoryTarget.Component });
82
+ NgtsLine.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.3", type: NgtsLine, isStandalone: true, selector: "ngts-line[points]", inputs: { lineRef: "lineRef", points: "points", segments: "segments" }, usesInheritance: true, ngImport: i0, template: `
83
+ <ngt-primitive *args="[lineRef.nativeElement]" [ref]="lineRef" ngtCompound>
84
+ <ngt-primitive
85
+ *args="[get('lineGeometry')]"
86
+ attach="geometry"
87
+ (afterAttach)="onAfterGeometryAttached($any($event))"
88
+ />
89
+ <ngt-primitive
90
+ *args="[lineMaterial]"
91
+ attach="material"
92
+ [color]="get('color')"
93
+ [vertexColors]="Boolean(get('vertexColors'))"
94
+ [resolution]="get('materialResolution')"
95
+ [linewidth]="get('lineWidth')"
96
+ [alphaToCoverage]="get('alphaToCoverage')"
97
+ [dashed]="get('dashed')"
98
+ [dashScale]="get('dashScale') ?? lineMaterial.dashScale"
99
+ [dashSize]="get('dashSize') ?? lineMaterial.dashSize"
100
+ [dashOffset]="get('dashOffset') ?? lineMaterial.dashOffset"
101
+ [gapSize]="get('gapSize') ?? lineMaterial.gapSize"
102
+ [wireframe]="get('wireframe') ?? lineMaterial.wireframe"
103
+ [worldUnits]="get('worldUnits')"
104
+ />
105
+ </ngt-primitive>
106
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] });
107
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsLine, decorators: [{
108
+ type: Component,
109
+ args: [{
110
+ selector: 'ngts-line[points]',
111
+ standalone: true,
112
+ template: `
113
+ <ngt-primitive *args="[lineRef.nativeElement]" [ref]="lineRef" ngtCompound>
114
+ <ngt-primitive
115
+ *args="[get('lineGeometry')]"
116
+ attach="geometry"
117
+ (afterAttach)="onAfterGeometryAttached($any($event))"
118
+ />
119
+ <ngt-primitive
120
+ *args="[lineMaterial]"
121
+ attach="material"
122
+ [color]="get('color')"
123
+ [vertexColors]="Boolean(get('vertexColors'))"
124
+ [resolution]="get('materialResolution')"
125
+ [linewidth]="get('lineWidth')"
126
+ [alphaToCoverage]="get('alphaToCoverage')"
127
+ [dashed]="get('dashed')"
128
+ [dashScale]="get('dashScale') ?? lineMaterial.dashScale"
129
+ [dashSize]="get('dashSize') ?? lineMaterial.dashSize"
130
+ [dashOffset]="get('dashOffset') ?? lineMaterial.dashOffset"
131
+ [gapSize]="get('gapSize') ?? lineMaterial.gapSize"
132
+ [wireframe]="get('wireframe') ?? lineMaterial.wireframe"
133
+ [worldUnits]="get('worldUnits')"
134
+ />
135
+ </ngt-primitive>
136
+ `,
137
+ imports: [NgtArgs],
138
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
139
+ }]
140
+ }], propDecorators: { lineRef: [{
141
+ type: Input
142
+ }], points: [{
143
+ type: Input
144
+ }], segments: [{
145
+ type: Input
146
+ }] } });
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS1zb2JhL2Fic3RyYWN0aW9ucy9zcmMvbGliL2xpbmUvbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLFlBQVksRUFBa0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRyxPQUFPLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBaUM3QyxNQUFNLE9BQU8sUUFBUyxTQUFRLGFBQWE7SUEvQjNDOztRQWdDYSxZQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ2xCLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUxQixVQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWpDLFlBQU8sR0FBRyxZQUFZLEVBQXlCLENBQUM7S0E4RjVEO0lBNUZHLElBQWEsTUFBTSxDQUNmLE1BQW1HO1FBRW5HLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFhLFFBQVEsQ0FBQyxRQUFpQjtRQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsNERBQTREO0lBQzVELHlF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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXdCVCw0REFDUyxPQUFPOzJGQUdSLFFBQVE7a0JBL0JwQixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXdCVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7b0JBQ2xCLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQzs4QkFPWSxPQUFPO3NCQUFmLEtBQUs7Z0JBRU8sTUFBTTtzQkFBbEIsS0FBSztnQkFNTyxRQUFRO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBpbmplY3QsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGluamVjdE5ndFJlZiwgTmd0QWZ0ZXJBdHRhY2gsIE5ndEFyZ3MsIE5ndFN0b3JlLCBzdGFydFdpdGhVbmRlZmluZWQgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTGluZTIsIExpbmVHZW9tZXRyeSwgTGluZU1hdGVyaWFsLCBMaW5lU2VnbWVudHMyLCBMaW5lU2VnbWVudHNHZW9tZXRyeSB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5pbXBvcnQgeyBOZ3RzTGluZUlucHV0IH0gZnJvbSAnLi9saW5lLWlucHV0JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RzLWxpbmVbcG9pbnRzXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LXByaW1pdGl2ZSAqYXJncz1cIltsaW5lUmVmLm5hdGl2ZUVsZW1lbnRdXCIgW3JlZl09XCJsaW5lUmVmXCIgbmd0Q29tcG91bmQ+XG4gICAgICAgICAgICA8bmd0LXByaW1pdGl2ZVxuICAgICAgICAgICAgICAgICphcmdzPVwiW2dldCgnbGluZUdlb21ldHJ5JyldXCJcbiAgICAgICAgICAgICAgICBhdHRhY2g9XCJnZW9tZXRyeVwiXG4gICAgICAgICAgICAgICAgKGFmdGVyQXR0YWNoKT1cIm9uQWZ0ZXJHZW9tZXRyeUF0dGFjaGVkKCRhbnkoJGV2ZW50KSlcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxuZ3QtcHJpbWl0aXZlXG4gICAgICAgICAgICAgICAgKmFyZ3M9XCJbbGluZU1hdGVyaWFsXVwiXG4gICAgICAgICAgICAgICAgYXR0YWNoPVwibWF0ZXJpYWxcIlxuICAgICAgICAgICAgICAgIFtjb2xvcl09XCJnZXQoJ2NvbG9yJylcIlxuICAgICAgICAgICAgICAgIFt2ZXJ0ZXhDb2xvcnNdPVwiQm9vbGVhbihnZXQoJ3ZlcnRleENvbG9ycycpKVwiXG4gICAgICAgICAgICAgICAgW3Jlc29sdXRpb25dPVwiZ2V0KCdtYXRlcmlhbFJlc29sdXRpb24nKVwiXG4gICAgICAgICAgICAgICAgW2xpbmV3aWR0aF09XCJnZXQoJ2xpbmVXaWR0aCcpXCJcbiAgICAgICAgICAgICAgICBbYWxwaGFUb0NvdmVyYWdlXT1cImdldCgnYWxwaGFUb0NvdmVyYWdlJylcIlxuICAgICAgICAgICAgICAgIFtkYXNoZWRdPVwiZ2V0KCdkYXNoZWQnKVwiXG4gICAgICAgICAgICAgICAgW2Rhc2hTY2FsZV09XCJnZXQoJ2Rhc2hTY2FsZScpID8/IGxpbmVNYXRlcmlhbC5kYXNoU2NhbGVcIlxuICAgICAgICAgICAgICAgIFtkYXNoU2l6ZV09XCJnZXQoJ2Rhc2hTaXplJykgPz8gbGluZU1hdGVyaWFsLmRhc2hTaXplXCJcbiAgICAgICAgICAgICAgICBbZGFzaE9mZnNldF09XCJnZXQoJ2Rhc2hPZmZzZXQnKSA/PyBsaW5lTWF0ZXJpYWwuZGFzaE9mZnNldFwiXG4gICAgICAgICAgICAgICAgW2dhcFNpemVdPVwiZ2V0KCdnYXBTaXplJykgPz8gbGluZU1hdGVyaWFsLmdhcFNpemVcIlxuICAgICAgICAgICAgICAgIFt3aXJlZnJhbWVdPVwiZ2V0KCd3aXJlZnJhbWUnKSA/PyBsaW5lTWF0ZXJpYWwud2lyZWZyYW1lXCJcbiAgICAgICAgICAgICAgICBbd29ybGRVbml0c109XCJnZXQoJ3dvcmxkVW5pdHMnKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L25ndC1wcmltaXRpdmU+XG4gICAgYCxcbiAgICBpbXBvcnRzOiBbTmd0QXJnc10sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzTGluZSBleHRlbmRzIE5ndHNMaW5lSW5wdXQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHJlYWRvbmx5IEJvb2xlYW4gPSBCb29sZWFuO1xuICAgIHJlYWRvbmx5IGxpbmVNYXRlcmlhbCA9IG5ldyBMaW5lTWF0ZXJpYWwoKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmUgPSBpbmplY3QoTmd0U3RvcmUpO1xuXG4gICAgQElucHV0KCkgbGluZVJlZiA9IGluamVjdE5ndFJlZjxMaW5lU2VnbWVudHMyIHwgTGluZTI+KCk7XG5cbiAgICBASW5wdXQoKSBzZXQgcG9pbnRzKFxuICAgICAgICBwb2ludHM6IEFycmF5PFRIUkVFLlZlY3RvcjMgfCBUSFJFRS5WZWN0b3IyIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHwgW251bWJlciwgbnVtYmVyXSB8IG51bWJlcj5cbiAgICApIHtcbiAgICAgICAgdGhpcy5zZXQoeyBwb2ludHMgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHNlZ21lbnRzKHNlZ21lbnRzOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc2VnbWVudHMgfSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogRmlndXJlIG91dCBpZiB0aGlzIGlzIHRoZSBjYXNlIGZvciBldmVyeXRoaW5nIGVsc2UuXG4gICAgLy8gV2UnZCB3YW50IHRvIHJ1biBjb21wdXRlTGluZURpc3RhbmNlcyBvbiB0aGUgTGluZTIgb24gXCJwb2ludHNcIiBjaGFuZ2VkXG4gICAgLy8gQ29uc2VxdWVudGx5LHdoZW4gXCJwb2ludHNcIiBjaGFuZ2VzLCBMaW5lR2VvbWV0cnkgYWxzbyBjaGFuZ2VzIGFuZCB0aGF0IGNhdXNlc1xuICAgIC8vIHRoZSBSZW5kZXJlciB0byByZXBsYWNlIHRoZSBMaW5lR2VvbWV0cnkgb24gdGhlIExpbmUyLCB3aGljaCBpcyB3aGF0J3MgaGFwcGVuaW5nLlxuICAgIC8vIEJ1dCB0aGUgZWZmZWN0IHRoYXQgcnVucyBsaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgcnVucyBhIGxpdHRsZSBCRUZPUkUgdGhlIG5ldyBsaW5lR2VvbWV0cnlcbiAgICAvLyBoYXMgYmVlbiBhdHRhY2hlZC4gU28gaXQgZG9lc24ndCB3b3JrIHdpdGggdGhlIHByb3BzIGNoYW5nZWQgZnJvbSB0aGUgTWF0ZXJpYWxcbiAgICAvL1xuICAgIC8vIEFsdGVybmF0aXZlbHksIHdlIGNhbiBhbHNvIHJ1biB0aGUgZWZmZWN0IG9uIGxpbmUjY2hpbGRyZW4gY2hhbmdlcy5cbiAgICBvbkFmdGVyR2VvbWV0cnlBdHRhY2hlZCh7IHBhcmVudCB9OiBOZ3RBZnRlckF0dGFjaDxMaW5lMiB8IExpbmVTZWdtZW50czIsIExpbmVHZW9tZXRyeT4pIHtcbiAgICAgICAgLy8gcGFyZW50LmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgICAgICB0aGlzLnNldCh7IHNlZ21lbnRzOiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy5jb25uZWN0KFxuICAgICAgICAgICAgJ2xpbmVHZW9tZXRyeScsXG4gICAgICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCgncG9pbnRzJyksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ3NlZ21lbnRzJyksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ3ZlcnRleENvbG9ycycpLnBpcGUoc3RhcnRXaXRoVW5kZWZpbmVkKCkpLFxuICAgICAgICAgICAgXSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKFtwb2ludHMsIHNlZ21lbnRzLCB2ZXJ0ZXhDb2xvcnNdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gc2VnbWVudHMgPyBuZXcgTGluZVNlZ21lbnRzR2VvbWV0cnkoKSA6IG5ldyBMaW5lR2VvbWV0cnkoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcFZhbHVlcyA9IChwb2ludHMgYXMgTmd0c0xpbmVbJ3BvaW50cyddKS5tYXAoKHApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAgaW5zdGFuY2VvZiBUSFJFRS5WZWN0b3IzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBbcC54LCBwLnksIHAuel1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHAgaW5zdGFuY2VvZiBUSFJFRS5WZWN0b3IyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBbcC54LCBwLnksIDBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpc0FycmF5ICYmIHAubGVuZ3RoID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBbcFswXSwgcFsxXSwgcFsyXV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGlzQXJyYXkgJiYgcC5sZW5ndGggPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFtwWzBdLCBwWzFdLCAwXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuc2V0UG9zaXRpb25zKHBWYWx1ZXMuZmxhdCgpKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodmVydGV4Q29sb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjVmFsdWVzID0gKHZlcnRleENvbG9ycyBhcyBOZ3RzTGluZUlucHV0Wyd2ZXJ0ZXhDb2xvcnMnXSkubWFwKChjKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgaW5zdGFuY2VvZiBUSFJFRS5Db2xvciA/IGMudG9BcnJheSgpIDogY1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LnNldENvbG9ycyhjVmFsdWVzLmZsYXQoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2VvbWV0cnk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0KFxuICAgICAgICAgICAgJ21hdGVyaWFsUmVzb2x1dGlvbicsXG4gICAgICAgICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLnN0b3JlLnNlbGVjdCgnc2l6ZScpLCB0aGlzLnNlbGVjdCgncmVzb2x1dGlvbicpLnBpcGUoc3RhcnRXaXRoVW5kZWZpbmVkKCkpXSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKFtzaXplLCByZXNvbHV0aW9uXSkgPT4gcmVzb2x1dGlvbiA/PyBbc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHRdKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghdGhpcy5saW5lUmVmLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMubGluZVJlZi5uYXRpdmVFbGVtZW50ID0gdGhpcy5nZXQoJ3NlZ21lbnRzJykgPyBuZXcgTGluZVNlZ21lbnRzMigpIDogbmV3IExpbmUyKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk7XG4gICAgICAgIHRoaXMuZGlzcG9zZUdlb21ldHJ5KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21wdXRlTGluZURpc3RhbmNlcygpIHtcbiAgICAgICAgdGhpcy5ob2xkKFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5saW5lUmVmLiQsIHRoaXMubGluZVJlZi5jaGlsZHJlbiQoJ25vbk9iamVjdHMnKSwgdGhpcy5zZWxlY3QoJ3BvaW50cycpXSksXG4gICAgICAgICAgICAoW2xpbmVdKSA9PiB7XG4gICAgICAgICAgICAgICAgbGluZS5jb21wdXRlTGluZURpc3RhbmNlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGlzcG9zZUdlb21ldHJ5KCkge1xuICAgICAgICB0aGlzLmVmZmVjdCh0aGlzLnNlbGVjdCgnbGluZUdlb21ldHJ5JyksIChsaW5lR2VvbWV0cnk6IExpbmVHZW9tZXRyeSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IGxpbmVHZW9tZXRyeS5kaXNwb3NlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==