angular-three-soba 1.3.2 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/abstractions/README.md +3 -0
- package/abstractions/index.d.ts +10 -0
- package/abstractions/lib/billboard/billboard.d.ts +14 -0
- package/abstractions/lib/catmull-rom-line/catmull-rom-line.d.ts +15 -0
- package/abstractions/lib/cubic-bezier-line/cubic-bezier-line.d.ts +15 -0
- package/abstractions/lib/gizmo-helper/gizmo-helper.d.ts +41 -0
- package/abstractions/lib/gizmo-helper/gizmo-viewcube/constants.d.ts +12 -0
- package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +16 -0
- package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +24 -0
- package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +14 -0
- package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +15 -0
- package/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +28 -0
- package/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +21 -0
- package/abstractions/lib/line/line-input.d.ts +19 -0
- package/abstractions/lib/line/line.d.ts +21 -0
- package/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.d.ts +19 -0
- package/abstractions/lib/text/text.d.ts +21 -0
- package/abstractions/lib/text-3d/text-3d.d.ts +39 -0
- package/esm2020/abstractions/angular-three-soba-abstractions.mjs +5 -0
- package/esm2020/abstractions/index.mjs +11 -0
- package/esm2020/abstractions/lib/billboard/billboard.mjs +73 -0
- package/esm2020/abstractions/lib/catmull-rom-line/catmull-rom-line.mjs +119 -0
- package/esm2020/abstractions/lib/cubic-bezier-line/cubic-bezier-line.mjs +98 -0
- package/esm2020/abstractions/lib/gizmo-helper/gizmo-helper.mjs +206 -0
- package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/constants.mjs +31 -0
- package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +91 -0
- package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +182 -0
- package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +45 -0
- package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +133 -0
- package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +193 -0
- package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +266 -0
- package/esm2020/abstractions/lib/line/line-input.mjs +75 -0
- package/esm2020/abstractions/lib/line/line.mjs +147 -0
- package/esm2020/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.mjs +127 -0
- package/esm2020/abstractions/lib/text/text.mjs +110 -0
- package/esm2020/abstractions/lib/text-3d/text-3d.mjs +144 -0
- package/esm2020/cameras/lib/orthographic-camera/orthographic-camera.mjs +5 -5
- package/esm2020/staging/index.mjs +3 -1
- package/esm2020/staging/lib/camera-shake/camera-shake.mjs +121 -0
- package/esm2020/staging/lib/cloud/cloud.mjs +159 -0
- package/fesm2015/angular-three-soba-abstractions.mjs +1965 -0
- package/fesm2015/angular-three-soba-abstractions.mjs.map +1 -0
- package/fesm2015/angular-three-soba-cameras.mjs +4 -4
- package/fesm2015/angular-three-soba-cameras.mjs.map +1 -1
- package/fesm2015/angular-three-soba-staging.mjs +274 -4
- package/fesm2015/angular-three-soba-staging.mjs.map +1 -1
- package/fesm2020/angular-three-soba-abstractions.mjs +1962 -0
- package/fesm2020/angular-three-soba-abstractions.mjs.map +1 -0
- package/fesm2020/angular-three-soba-cameras.mjs +4 -4
- package/fesm2020/angular-three-soba-cameras.mjs.map +1 -1
- package/fesm2020/angular-three-soba-staging.mjs +274 -4
- package/fesm2020/angular-three-soba-staging.mjs.map +1 -1
- package/package.json +11 -3
- package/plugin/package.json +1 -1
- package/staging/index.d.ts +2 -0
- package/staging/lib/camera-shake/camera-shake.d.ts +28 -0
- package/staging/lib/cloud/cloud.d.ts +23 -0
|
@@ -0,0 +1,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==
|