angular-three-soba 2.14.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/abstractions/lib/catmull-rom-line.d.ts +117 -117
- package/abstractions/lib/edges.d.ts +126 -126
- package/abstractions/lib/grid.d.ts +15 -15
- package/abstractions/lib/line.d.ts +1 -1
- package/abstractions/lib/prism-geometry.d.ts +4 -4
- package/abstractions/lib/rounded-box.d.ts +1 -1
- package/abstractions/lib/text-3d.d.ts +22 -22
- package/abstractions/lib/text.d.ts +1 -1
- package/cameras/lib/cube-camera.d.ts +1 -1
- package/cameras/lib/orthographic-camera.d.ts +1 -1
- package/cameras/lib/perspective-camera.d.ts +1 -1
- package/controls/index.d.ts +0 -9
- package/controls/lib/camera-controls.d.ts +1 -1
- package/controls/lib/orbit-controls.d.ts +1 -1
- package/fesm2022/angular-three-soba-abstractions.mjs +41 -52
- package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
- package/fesm2022/angular-three-soba-cameras.mjs +12 -15
- package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
- package/fesm2022/angular-three-soba-controls.mjs +16 -24
- package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
- package/fesm2022/angular-three-soba-gizmos.mjs +59 -60
- package/fesm2022/angular-three-soba-gizmos.mjs.map +1 -1
- package/fesm2022/angular-three-soba-loaders.mjs +3 -3
- package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-materials.mjs +27 -35
- package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
- package/fesm2022/angular-three-soba-misc.mjs +27 -29
- package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
- package/fesm2022/angular-three-soba-performances.mjs +31 -34
- package/fesm2022/angular-three-soba-performances.mjs.map +1 -1
- package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-staging.mjs +91 -105
- package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
- package/fesm2022/angular-three-soba-stats.mjs +3 -3
- package/fesm2022/angular-three-soba-stats.mjs.map +1 -1
- package/gizmos/lib/gizmo-helper/gizmo-viewport.d.ts +1 -1
- package/gizmos/lib/pivot-controls/axis-arrow.d.ts +1 -1
- package/gizmos/lib/pivot-controls/axis-rotator.d.ts +1 -1
- package/gizmos/lib/pivot-controls/pivot-controls.d.ts +1 -1
- package/gizmos/lib/pivot-controls/plane-slider.d.ts +1 -1
- package/gizmos/lib/pivot-controls/scaling-sphere.d.ts +1 -1
- package/gizmos/lib/transform-controls.d.ts +2 -2
- package/materials/lib/custom-shader-material.d.ts +2 -2
- package/materials/lib/mesh-portal-material.d.ts +9 -9
- package/materials/lib/mesh-refraction-material.d.ts +2 -2
- package/materials/lib/mesh-transmission-material.d.ts +1 -1
- package/misc/lib/computed-attribute.d.ts +6 -6
- package/misc/lib/decal.d.ts +1 -1
- package/misc/lib/html/html.d.ts +2 -2
- package/misc/lib/sampler.d.ts +1 -1
- package/package.json +11 -37
- package/performances/lib/instances/instances.d.ts +5 -5
- package/performances/lib/points/points.d.ts +10 -10
- package/performances/lib/segments/segments.d.ts +4 -4
- package/shaders/lib/mesh-refraction-material.d.ts +2 -2
- package/staging/lib/caustics.d.ts +1 -1
- package/staging/lib/center.d.ts +2 -2
- package/staging/lib/contact-shadows.d.ts +1 -1
- package/staging/lib/lightformer.d.ts +1 -1
- package/staging/lib/mask.d.ts +1 -1
- package/staging/lib/render-texture.d.ts +1 -1
- package/staging/lib/spot-light.d.ts +2 -2
- package/esm2022/abstractions/angular-three-soba-abstractions.mjs +0 -5
- package/esm2022/abstractions/index.mjs +0 -14
- package/esm2022/abstractions/lib/billboard.mjs +0 -69
- package/esm2022/abstractions/lib/catmull-rom-line.mjs +0 -76
- package/esm2022/abstractions/lib/cubic-bezier-line.mjs +0 -51
- package/esm2022/abstractions/lib/edges.mjs +0 -66
- package/esm2022/abstractions/lib/gradient-texture.mjs +0 -91
- package/esm2022/abstractions/lib/grid.mjs +0 -103
- package/esm2022/abstractions/lib/helper.mjs +0 -74
- package/esm2022/abstractions/lib/line.mjs +0 -123
- package/esm2022/abstractions/lib/prism-geometry.mjs +0 -46
- package/esm2022/abstractions/lib/quadratic-bezier-line.mjs +0 -73
- package/esm2022/abstractions/lib/rounded-box.mjs +0 -131
- package/esm2022/abstractions/lib/text-3d.mjs +0 -100
- package/esm2022/abstractions/lib/text.mjs +0 -86
- package/esm2022/angular-three-soba.mjs +0 -5
- package/esm2022/cameras/angular-three-soba-cameras.mjs +0 -5
- package/esm2022/cameras/index.mjs +0 -5
- package/esm2022/cameras/lib/camera-content.mjs +0 -14
- package/esm2022/cameras/lib/cube-camera.mjs +0 -102
- package/esm2022/cameras/lib/orthographic-camera.mjs +0 -131
- package/esm2022/cameras/lib/perspective-camera.mjs +0 -105
- package/esm2022/controls/angular-three-soba-controls.mjs +0 -5
- package/esm2022/controls/index.mjs +0 -9
- package/esm2022/controls/lib/camera-controls.mjs +0 -126
- package/esm2022/controls/lib/orbit-controls.mjs +0 -114
- package/esm2022/controls/lib/scroll-controls.mjs +0 -261
- package/esm2022/gizmos/angular-three-soba-gizmos.mjs +0 -5
- package/esm2022/gizmos/index.mjs +0 -6
- package/esm2022/gizmos/lib/gizmo-helper/gizmo-helper.mjs +0 -191
- package/esm2022/gizmos/lib/gizmo-helper/gizmo-viewcube.mjs +0 -304
- package/esm2022/gizmos/lib/gizmo-helper/gizmo-viewport.mjs +0 -348
- package/esm2022/gizmos/lib/pivot-controls/axis-arrow.mjs +0 -265
- package/esm2022/gizmos/lib/pivot-controls/axis-rotator.mjs +0 -264
- package/esm2022/gizmos/lib/pivot-controls/pivot-controls.mjs +0 -349
- package/esm2022/gizmos/lib/pivot-controls/plane-slider.mjs +0 -266
- package/esm2022/gizmos/lib/pivot-controls/scaling-sphere.mjs +0 -232
- package/esm2022/gizmos/lib/transform-controls.mjs +0 -177
- package/esm2022/index.mjs +0 -2
- package/esm2022/loaders/angular-three-soba-loaders.mjs +0 -5
- package/esm2022/loaders/index.mjs +0 -7
- package/esm2022/loaders/lib/fbx-loader.mjs +0 -13
- package/esm2022/loaders/lib/font-loader.mjs +0 -49
- package/esm2022/loaders/lib/gltf-loader.mjs +0 -51
- package/esm2022/loaders/lib/loader.mjs +0 -103
- package/esm2022/loaders/lib/progress.mjs +0 -51
- package/esm2022/loaders/lib/texture-loader.mjs +0 -32
- package/esm2022/materials/angular-three-soba-materials.mjs +0 -5
- package/esm2022/materials/index.mjs +0 -9
- package/esm2022/materials/lib/custom-shader-material.mjs +0 -67
- package/esm2022/materials/lib/mesh-distort-material.mjs +0 -43
- package/esm2022/materials/lib/mesh-portal-material.mjs +0 -294
- package/esm2022/materials/lib/mesh-reflector-material.mjs +0 -274
- package/esm2022/materials/lib/mesh-refraction-material.mjs +0 -140
- package/esm2022/materials/lib/mesh-transmission-material.mjs +0 -188
- package/esm2022/materials/lib/mesh-wobble-material.mjs +0 -43
- package/esm2022/materials/lib/point-material.mjs +0 -34
- package/esm2022/misc/angular-three-soba-misc.mjs +0 -5
- package/esm2022/misc/index.mjs +0 -15
- package/esm2022/misc/lib/animations.mjs +0 -71
- package/esm2022/misc/lib/bake-shadows.mjs +0 -24
- package/esm2022/misc/lib/computed-attribute.mjs +0 -51
- package/esm2022/misc/lib/constants.mjs +0 -5
- package/esm2022/misc/lib/decal.mjs +0 -142
- package/esm2022/misc/lib/deprecated.mjs +0 -15
- package/esm2022/misc/lib/depth-buffer.mjs +0 -35
- package/esm2022/misc/lib/fbo.mjs +0 -86
- package/esm2022/misc/lib/html/html-content.mjs +0 -322
- package/esm2022/misc/lib/html/html.mjs +0 -129
- package/esm2022/misc/lib/html/utils.mjs +0 -74
- package/esm2022/misc/lib/intersect.mjs +0 -49
- package/esm2022/misc/lib/preload.mjs +0 -58
- package/esm2022/misc/lib/sampler.mjs +0 -122
- package/esm2022/misc/lib/scale-factor.mjs +0 -29
- package/esm2022/performances/angular-three-soba-performances.mjs +0 -5
- package/esm2022/performances/index.mjs +0 -7
- package/esm2022/performances/lib/adaptive-dpr.mjs +0 -46
- package/esm2022/performances/lib/adaptive-events.mjs +0 -24
- package/esm2022/performances/lib/detailed.mjs +0 -53
- package/esm2022/performances/lib/instances/instances.mjs +0 -177
- package/esm2022/performances/lib/instances/position-mesh.mjs +0 -51
- package/esm2022/performances/lib/points/points.mjs +0 -272
- package/esm2022/performances/lib/points/position-point.mjs +0 -53
- package/esm2022/performances/lib/segments/segment-object.mjs +0 -9
- package/esm2022/performances/lib/segments/segments.mjs +0 -126
- package/esm2022/shaders/angular-three-soba-shaders.mjs +0 -5
- package/esm2022/shaders/index.mjs +0 -4
- package/esm2022/shaders/lib/grid-material.mjs +0 -81
- package/esm2022/shaders/lib/mesh-refraction-material.mjs +0 -163
- package/esm2022/shaders/lib/point-material.mjs +0 -24
- package/esm2022/staging/angular-three-soba-staging.mjs +0 -5
- package/esm2022/staging/index.mjs +0 -21
- package/esm2022/staging/lib/accumulative-shadows.mjs +0 -180
- package/esm2022/staging/lib/backdrop.mjs +0 -69
- package/esm2022/staging/lib/bb-anchor.mjs +0 -58
- package/esm2022/staging/lib/bounds.mjs +0 -282
- package/esm2022/staging/lib/camera-shake.mjs +0 -65
- package/esm2022/staging/lib/caustics.mjs +0 -184
- package/esm2022/staging/lib/center.mjs +0 -114
- package/esm2022/staging/lib/contact-shadows.mjs +0 -214
- package/esm2022/staging/lib/environment/environment.mjs +0 -344
- package/esm2022/staging/lib/environment/inject-environment.mjs +0 -184
- package/esm2022/staging/lib/float.mjs +0 -70
- package/esm2022/staging/lib/lightformer.mjs +0 -103
- package/esm2022/staging/lib/mask.mjs +0 -74
- package/esm2022/staging/lib/matcap-texture.mjs +0 -79
- package/esm2022/staging/lib/normal-texture.mjs +0 -79
- package/esm2022/staging/lib/randomized-lights.mjs +0 -100
- package/esm2022/staging/lib/render-texture.mjs +0 -202
- package/esm2022/staging/lib/sky.mjs +0 -86
- package/esm2022/staging/lib/spot-light.mjs +0 -445
- package/esm2022/staging/lib/stage.mjs +0 -232
- package/esm2022/stats/angular-three-soba-stats.mjs +0 -5
- package/esm2022/stats/index.mjs +0 -2
- package/esm2022/stats/lib/stats.mjs +0 -57
- package/esm2022/vanilla-exports/angular-three-soba-vanilla-exports.mjs +0 -5
- package/esm2022/vanilla-exports/index.mjs +0 -3
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, DestroyRef, computed, effect, inject, input, untracked, viewChild, } from '@angular/core';
|
|
2
|
-
import { extend, getLocalState, injectBeforeRender, injectStore, omit, pick } from 'angular-three';
|
|
3
|
-
import { ProgressiveLightMap, SoftShadowMaterial } from 'angular-three-soba/vanilla-exports';
|
|
4
|
-
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
5
|
-
import { Group, Mesh, PlaneGeometry } from 'three';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
const defaultOptions = {
|
|
8
|
-
temporal: false,
|
|
9
|
-
frames: 40,
|
|
10
|
-
limit: Infinity,
|
|
11
|
-
blend: 20,
|
|
12
|
-
scale: 10,
|
|
13
|
-
opacity: 1,
|
|
14
|
-
alphaTest: 0.75,
|
|
15
|
-
color: 'black',
|
|
16
|
-
colorBlend: 2,
|
|
17
|
-
resolution: 1024,
|
|
18
|
-
toneMapped: true,
|
|
19
|
-
};
|
|
20
|
-
export class NgtsAccumulativeShadows {
|
|
21
|
-
constructor() {
|
|
22
|
-
this.nullTraversal = () => null;
|
|
23
|
-
this.Math = Math;
|
|
24
|
-
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
25
|
-
this.parameters = omit(this.options, [
|
|
26
|
-
'temporal',
|
|
27
|
-
'frames',
|
|
28
|
-
'limit',
|
|
29
|
-
'blend',
|
|
30
|
-
'scale',
|
|
31
|
-
'opacity',
|
|
32
|
-
'alphaTest',
|
|
33
|
-
'color',
|
|
34
|
-
'colorBlend',
|
|
35
|
-
'resolution',
|
|
36
|
-
'toneMapped',
|
|
37
|
-
]);
|
|
38
|
-
this.lightsRef = viewChild.required('lights');
|
|
39
|
-
this.planeRef = viewChild.required('plane');
|
|
40
|
-
this.store = injectStore();
|
|
41
|
-
this.gl = this.store.select('gl');
|
|
42
|
-
this.camera = this.store.select('camera');
|
|
43
|
-
this.scene = this.store.select('scene');
|
|
44
|
-
this.invalidate = this.store.select('invalidate');
|
|
45
|
-
this.opacity = pick(this.options, 'opacity');
|
|
46
|
-
this.alphaTest = pick(this.options, 'alphaTest');
|
|
47
|
-
this.limit = pick(this.options, 'limit');
|
|
48
|
-
this.resolution = pick(this.options, 'resolution');
|
|
49
|
-
this.pLM = computed(() => {
|
|
50
|
-
if (this.previousPLM) {
|
|
51
|
-
this.previousPLM.clear();
|
|
52
|
-
}
|
|
53
|
-
return (this.previousPLM = new ProgressiveLightMap(this.gl(), this.scene(), this.resolution()));
|
|
54
|
-
});
|
|
55
|
-
this.scale = pick(this.options, 'scale');
|
|
56
|
-
this.toneMapped = pick(this.options, 'toneMapped');
|
|
57
|
-
this.color = pick(this.options, 'color');
|
|
58
|
-
this.colorBlend = pick(this.options, 'colorBlend');
|
|
59
|
-
this.map = computed(() => this.pLM().progressiveLightMap2.texture);
|
|
60
|
-
this.lightsMap = new Map();
|
|
61
|
-
this.temporal = computed(() => !!this.options().temporal);
|
|
62
|
-
this.frames = computed(() => Math.max(2, this.options().frames));
|
|
63
|
-
this.blend = computed(() => Math.max(2, this.options().frames === Infinity ? this.options().blend : this.options().frames));
|
|
64
|
-
this.count = 0;
|
|
65
|
-
extend({ Group, SoftShadowMaterial, Mesh, PlaneGeometry });
|
|
66
|
-
effect(() => {
|
|
67
|
-
this.pLM().configure(this.planeRef().nativeElement);
|
|
68
|
-
});
|
|
69
|
-
effect(() => {
|
|
70
|
-
const sceneLS = getLocalState(this.scene());
|
|
71
|
-
if (!sceneLS)
|
|
72
|
-
return;
|
|
73
|
-
// track deps
|
|
74
|
-
this.planeRef();
|
|
75
|
-
this.options();
|
|
76
|
-
sceneLS.objects();
|
|
77
|
-
// Reset internals, buffers, ...
|
|
78
|
-
this.reset();
|
|
79
|
-
// Update lightmap
|
|
80
|
-
if (!this.temporal() && this.frames() !== Infinity)
|
|
81
|
-
this.update(this.blend());
|
|
82
|
-
});
|
|
83
|
-
injectBeforeRender(() => {
|
|
84
|
-
const [frames, temporal, invalidate, limit] = [this.frames(), !!this.temporal(), this.invalidate(), this.limit()];
|
|
85
|
-
if ((temporal || frames === Infinity) && this.count < frames && this.count < limit) {
|
|
86
|
-
invalidate();
|
|
87
|
-
this.update();
|
|
88
|
-
this.count++;
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
inject(DestroyRef).onDestroy(() => {
|
|
92
|
-
this.previousPLM?.clear();
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
getMesh() {
|
|
96
|
-
return this.planeRef().nativeElement;
|
|
97
|
-
}
|
|
98
|
-
reset() {
|
|
99
|
-
// Clear buffers, reset opacities, set frame count to 0
|
|
100
|
-
untracked(this.pLM).clear();
|
|
101
|
-
const material = untracked(this.planeRef).nativeElement.material;
|
|
102
|
-
material.opacity = 0;
|
|
103
|
-
material.alphaTest = 0;
|
|
104
|
-
this.count = 0;
|
|
105
|
-
}
|
|
106
|
-
update(frames = 1) {
|
|
107
|
-
// Adapt the opacity-blend ratio to the number of frames
|
|
108
|
-
const material = this.planeRef().nativeElement.material;
|
|
109
|
-
if (!this.temporal()) {
|
|
110
|
-
material.opacity = this.opacity();
|
|
111
|
-
material.alphaTest = this.alphaTest();
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
material.opacity = Math.min(this.opacity(), material.opacity + this.opacity() / this.blend());
|
|
115
|
-
material.alphaTest = Math.min(this.alphaTest(), material.alphaTest + this.alphaTest() / this.blend());
|
|
116
|
-
}
|
|
117
|
-
// Switch accumulative lights on
|
|
118
|
-
this.lightsRef().nativeElement.visible = true;
|
|
119
|
-
// Collect scene lights and meshes
|
|
120
|
-
this.pLM().prepare();
|
|
121
|
-
// Update the lightmap and the accumulative lights
|
|
122
|
-
for (let i = 0; i < frames; i++) {
|
|
123
|
-
this.lightsMap.forEach((lightUpdate) => lightUpdate());
|
|
124
|
-
this.pLM().update(this.camera(), this.blend());
|
|
125
|
-
}
|
|
126
|
-
// Switch lights off
|
|
127
|
-
this.lightsRef().nativeElement.visible = false;
|
|
128
|
-
// Restore lights and meshes
|
|
129
|
-
this.pLM().finish();
|
|
130
|
-
}
|
|
131
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsAccumulativeShadows, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
132
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.11", type: NgtsAccumulativeShadows, isStandalone: true, selector: "ngts-accumulative-shadows", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "lightsRef", first: true, predicate: ["lights"], descendants: true, isSignal: true }, { propertyName: "planeRef", first: true, predicate: ["plane"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
133
|
-
<ngt-group [parameters]="parameters()">
|
|
134
|
-
<ngt-group #lights [traverse]="nullTraversal">
|
|
135
|
-
<ng-content />
|
|
136
|
-
</ngt-group>
|
|
137
|
-
|
|
138
|
-
<ngt-mesh #plane [scale]="scale()" [rotation]="[-Math.PI / 2, 0, 0]" [receiveShadow]="true">
|
|
139
|
-
<ngt-plane-geometry />
|
|
140
|
-
<ngt-soft-shadow-material
|
|
141
|
-
[depthWrite]="false"
|
|
142
|
-
[toneMapped]="toneMapped()"
|
|
143
|
-
[color]="color()"
|
|
144
|
-
[blend]="colorBlend()"
|
|
145
|
-
[map]="map()"
|
|
146
|
-
[transparent]="true"
|
|
147
|
-
/>
|
|
148
|
-
</ngt-mesh>
|
|
149
|
-
</ngt-group>
|
|
150
|
-
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
151
|
-
}
|
|
152
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsAccumulativeShadows, decorators: [{
|
|
153
|
-
type: Component,
|
|
154
|
-
args: [{
|
|
155
|
-
selector: 'ngts-accumulative-shadows',
|
|
156
|
-
standalone: true,
|
|
157
|
-
template: `
|
|
158
|
-
<ngt-group [parameters]="parameters()">
|
|
159
|
-
<ngt-group #lights [traverse]="nullTraversal">
|
|
160
|
-
<ng-content />
|
|
161
|
-
</ngt-group>
|
|
162
|
-
|
|
163
|
-
<ngt-mesh #plane [scale]="scale()" [rotation]="[-Math.PI / 2, 0, 0]" [receiveShadow]="true">
|
|
164
|
-
<ngt-plane-geometry />
|
|
165
|
-
<ngt-soft-shadow-material
|
|
166
|
-
[depthWrite]="false"
|
|
167
|
-
[toneMapped]="toneMapped()"
|
|
168
|
-
[color]="color()"
|
|
169
|
-
[blend]="colorBlend()"
|
|
170
|
-
[map]="map()"
|
|
171
|
-
[transparent]="true"
|
|
172
|
-
/>
|
|
173
|
-
</ngt-mesh>
|
|
174
|
-
</ngt-group>
|
|
175
|
-
`,
|
|
176
|
-
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
177
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
178
|
-
}]
|
|
179
|
-
}], ctorParameters: () => [] });
|
|
180
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjdW11bGF0aXZlLXNoYWRvd3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvbGliL2FjY3VtdWxhdGl2ZS1zaGFkb3dzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBRVYsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFZLE1BQU0sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDN0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxNQUFNLE9BQU8sQ0FBQzs7QUEyQm5ELE1BQU0sY0FBYyxHQUFtQztJQUN0RCxRQUFRLEVBQUUsS0FBSztJQUNmLE1BQU0sRUFBRSxFQUFFO0lBQ1YsS0FBSyxFQUFFLFFBQVE7SUFDZixLQUFLLEVBQUUsRUFBRTtJQUNULEtBQUssRUFBRSxFQUFFO0lBQ1QsT0FBTyxFQUFFLENBQUM7SUFDVixTQUFTLEVBQUUsSUFBSTtJQUNmLEtBQUssRUFBRSxPQUFPO0lBQ2QsVUFBVSxFQUFFLENBQUM7SUFDYixVQUFVLEVBQUUsSUFBSTtJQUNoQixVQUFVLEVBQUUsSUFBSTtDQUNoQixDQUFDO0FBMkJGLE1BQU0sT0FBTyx1QkFBdUI7SUF1RG5DO1FBdERBLGtCQUFhLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO1FBQzNCLFNBQUksR0FB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RCxDQUFDO1FBQ0Qsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxhQUFhLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUMvQyw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3JCLENBQUM7K0dBaklXLHVCQUF1QjttR0FBdkIsdUJBQXVCLHdiQXRCekI7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWtCVDs7NEZBSVcsdUJBQXVCO2tCQXpCbkMsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsMkJBQTJCO29CQUNyQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFrQlQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUMvQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRDb21wb25lbnQsXG5cdERlc3Ryb3lSZWYsXG5cdEVsZW1lbnRSZWYsXG5cdGNvbXB1dGVkLFxuXHRlZmZlY3QsXG5cdGluamVjdCxcblx0aW5wdXQsXG5cdHVudHJhY2tlZCxcblx0dmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5ndEdyb3VwLCBleHRlbmQsIGdldExvY2FsU3RhdGUsIGluamVjdEJlZm9yZVJlbmRlciwgaW5qZWN0U3RvcmUsIG9taXQsIHBpY2sgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IFByb2dyZXNzaXZlTGlnaHRNYXAsIFNvZnRTaGFkb3dNYXRlcmlhbCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS92YW5pbGxhLWV4cG9ydHMnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgR3JvdXAsIE1lc2gsIFBsYW5lR2VvbWV0cnkgfSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3NPcHRpb25zIGV4dGVuZHMgUGFydGlhbDxOZ3RHcm91cD4ge1xuXHQvKiogSG93IG1hbnkgZnJhbWVzIGl0IGNhbiByZW5kZXIsIG1vcmUgeWllbGRzIGNsZWFuZXIgcmVzdWx0cyBidXQgdGFrZXMgbW9yZSB0aW1lLCA0MCAqL1xuXHRmcmFtZXM6IG51bWJlcjtcblx0LyoqIElmIGZyYW1lcyA9PT0gSW5maW5pdHkgYmxlbmQgY29udHJvbHMgdGhlIHJlZnJlc2ggcmF0aW8sIDEwMCAqL1xuXHRibGVuZDogbnVtYmVyO1xuXHQvKiogQ2FuIGxpbWl0IHRoZSBhbW91bnQgb2YgZnJhbWVzIHJlbmRlcmVkIGlmIGZyYW1lcyA9PT0gSW5maW5pdHksIHVzdWFsbHkgdG8gZ2V0IHNvbWUgcGVyZm9ybWFuY2UgYmFjayBvbmNlIGEgbW92YWJsZSBzY2VuZSBoYXMgc2V0dGxlZCwgSW5maW5pdHkgKi9cblx0bGltaXQ6IG51bWJlcjtcblx0LyoqIFNjYWxlIG9mIHRoZSBwbGFuZSwgICovXG5cdHNjYWxlOiBudW1iZXI7XG5cdC8qKiBUZW1wb3JhbCBhY2N1bXVsYXRlcyBzaGFkb3dzIG92ZXIgdGltZSB3aGljaCBpcyBtb3JlIHBlcmZvcm1hbnQgYnV0IGhhcyBhIHZpc3VhbCByZWdyZXNzaW9uIG92ZXIgaW5zdGFudCByZXN1bHRzLCBmYWxzZSAgKi9cblx0dGVtcG9yYWw/OiBib29sZWFuO1xuXHQvKiogT3BhY2l0eSBvZiB0aGUgcGxhbmUsIDEgKi9cblx0b3BhY2l0eTogbnVtYmVyO1xuXHQvKiogRGlzY2FyZHMgYWxwaGEgcGl4ZWxzLCAwLjY1ICovXG5cdGFscGhhVGVzdDogbnVtYmVyO1xuXHQvKiogU2hhZG93IGNvbG9yLCBibGFjayAqL1xuXHRjb2xvcjogc3RyaW5nO1xuXHQvKiogQ29sb3JibGVuZCwgaG93IG11Y2ggY29sb3JzIHR1cm4gdG8gYmxhY2ssIDAgaXMgYmxhY2ssIDIgKi9cblx0Y29sb3JCbGVuZDogbnVtYmVyO1xuXHQvKiogQnVmZmVyIHJlc29sdXRpb24sIDEwMjQgKi9cblx0cmVzb2x1dGlvbjogbnVtYmVyO1xuXHQvKiogVGV4dHVyZSB0b25lbWFwcGluZyAqL1xuXHR0b25lTWFwcGVkOiBib29sZWFuO1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3NPcHRpb25zID0ge1xuXHR0ZW1wb3JhbDogZmFsc2UsXG5cdGZyYW1lczogNDAsXG5cdGxpbWl0OiBJbmZpbml0eSxcblx0YmxlbmQ6IDIwLFxuXHRzY2FsZTogMTAsXG5cdG9wYWNpdHk6IDEsXG5cdGFscGhhVGVzdDogMC43NSxcblx0Y29sb3I6ICdibGFjaycsXG5cdGNvbG9yQmxlbmQ6IDIsXG5cdHJlc29sdXRpb246IDEwMjQsXG5cdHRvbmVNYXBwZWQ6IHRydWUsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLWFjY3VtdWxhdGl2ZS1zaGFkb3dzJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LWdyb3VwIFtwYXJhbWV0ZXJzXT1cInBhcmFtZXRlcnMoKVwiPlxuXHRcdFx0PG5ndC1ncm91cCAjbGlnaHRzIFt0cmF2ZXJzZV09XCJudWxsVHJhdmVyc2FsXCI+XG5cdFx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0XHQ8L25ndC1ncm91cD5cblxuXHRcdFx0PG5ndC1tZXNoICNwbGFuZSBbc2NhbGVdPVwic2NhbGUoKVwiIFtyb3RhdGlvbl09XCJbLU1hdGguUEkgLyAyLCAwLCAwXVwiIFtyZWNlaXZlU2hhZG93XT1cInRydWVcIj5cblx0XHRcdFx0PG5ndC1wbGFuZS1nZW9tZXRyeSAvPlxuXHRcdFx0XHQ8bmd0LXNvZnQtc2hhZG93LW1hdGVyaWFsXG5cdFx0XHRcdFx0W2RlcHRoV3JpdGVdPVwiZmFsc2VcIlxuXHRcdFx0XHRcdFt0b25lTWFwcGVkXT1cInRvbmVNYXBwZWQoKVwiXG5cdFx0XHRcdFx0W2NvbG9yXT1cImNvbG9yKClcIlxuXHRcdFx0XHRcdFtibGVuZF09XCJjb2xvckJsZW5kKClcIlxuXHRcdFx0XHRcdFttYXBdPVwibWFwKClcIlxuXHRcdFx0XHRcdFt0cmFuc3BhcmVudF09XCJ0cnVlXCJcblx0XHRcdFx0Lz5cblx0XHRcdDwvbmd0LW1lc2g+XG5cdFx0PC9uZ3QtZ3JvdXA+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzIHtcblx0bnVsbFRyYXZlcnNhbCA9ICgpID0+IG51bGw7XG5cdE1hdGggPSBNYXRoO1xuXG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblx0cGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbXG5cdFx0J3RlbXBvcmFsJyxcblx0XHQnZnJhbWVzJyxcblx0XHQnbGltaXQnLFxuXHRcdCdibGVuZCcsXG5cdFx0J3NjYWxlJyxcblx0XHQnb3BhY2l0eScsXG5cdFx0J2FscGhhVGVzdCcsXG5cdFx0J2NvbG9yJyxcblx0XHQnY29sb3JCbGVuZCcsXG5cdFx0J3Jlc29sdXRpb24nLFxuXHRcdCd0b25lTWFwcGVkJyxcblx0XSk7XG5cblx0bGlnaHRzUmVmID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8R3JvdXA+PignbGlnaHRzJyk7XG5cdHBsYW5lUmVmID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8TWVzaDxQbGFuZUdlb21ldHJ5LCBJbnN0YW5jZVR5cGU8dHlwZW9mIFNvZnRTaGFkb3dNYXRlcmlhbD4+Pj4oJ3BsYW5lJyk7XG5cblx0cHJpdmF0ZSBzdG9yZSA9IGluamVjdFN0b3JlKCk7XG5cdHByaXZhdGUgZ2wgPSB0aGlzLnN0b3JlLnNlbGVjdCgnZ2wnKTtcblx0cHJpdmF0ZSBjYW1lcmEgPSB0aGlzLnN0b3JlLnNlbGVjdCgnY2FtZXJhJyk7XG5cdHByaXZhdGUgc2NlbmUgPSB0aGlzLnN0b3JlLnNlbGVjdCgnc2NlbmUnKTtcblx0cHJpdmF0ZSBpbnZhbGlkYXRlID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2ludmFsaWRhdGUnKTtcblxuXHRwcml2YXRlIG9wYWNpdHkgPSBwaWNrKHRoaXMub3B0aW9ucywgJ29wYWNpdHknKTtcblx0cHJpdmF0ZSBhbHBoYVRlc3QgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2FscGhhVGVzdCcpO1xuXHRwcml2YXRlIGxpbWl0ID0gcGljayh0aGlzLm9wdGlvbnMsICdsaW1pdCcpO1xuXHRwcml2YXRlIHJlc29sdXRpb24gPSBwaWNrKHRoaXMub3B0aW9ucywgJ3Jlc29sdXRpb24nKTtcblxuXHRwcml2YXRlIHByZXZpb3VzUExNOiBQcm9ncmVzc2l2ZUxpZ2h0TWFwIHwgdW5kZWZpbmVkO1xuXHRwcml2YXRlIHBMTSA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRpZiAodGhpcy5wcmV2aW91c1BMTSkge1xuXHRcdFx0dGhpcy5wcmV2aW91c1BMTS5jbGVhcigpO1xuXHRcdH1cblx0XHRyZXR1cm4gKHRoaXMucHJldmlvdXNQTE0gPSBuZXcgUHJvZ3Jlc3NpdmVMaWdodE1hcCh0aGlzLmdsKCksIHRoaXMuc2NlbmUoKSwgdGhpcy5yZXNvbHV0aW9uKCkpKTtcblx0fSk7XG5cblx0c2NhbGUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3NjYWxlJyk7XG5cdHRvbmVNYXBwZWQgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3RvbmVNYXBwZWQnKTtcblx0Y29sb3IgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2NvbG9yJyk7XG5cdGNvbG9yQmxlbmQgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2NvbG9yQmxlbmQnKTtcblx0bWFwID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wTE0oKS5wcm9ncmVzc2l2ZUxpZ2h0TWFwMi50ZXh0dXJlKTtcblxuXHRsaWdodHNNYXAgPSBuZXcgTWFwPHN0cmluZywgKCkgPT4gdm9pZD4oKTtcblx0dGVtcG9yYWwgPSBjb21wdXRlZCgoKSA9PiAhIXRoaXMub3B0aW9ucygpLnRlbXBvcmFsKTtcblx0ZnJhbWVzID0gY29tcHV0ZWQoKCkgPT4gTWF0aC5tYXgoMiwgdGhpcy5vcHRpb25zKCkuZnJhbWVzKSk7XG5cdGJsZW5kID0gY29tcHV0ZWQoKCkgPT5cblx0XHRNYXRoLm1heCgyLCB0aGlzLm9wdGlvbnMoKS5mcmFtZXMgPT09IEluZmluaXR5ID8gdGhpcy5vcHRpb25zKCkuYmxlbmQgOiB0aGlzLm9wdGlvbnMoKS5mcmFtZXMpLFxuXHQpO1xuXHRjb3VudCA9IDA7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZXh0ZW5kKHsgR3JvdXAsIFNvZnRTaGFkb3dNYXRlcmlhbCwgTWVzaCwgUGxhbmVHZW9tZXRyeSB9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR0aGlzLnBMTSgpLmNvbmZpZ3VyZSh0aGlzLnBsYW5lUmVmKCkubmF0aXZlRWxlbWVudCk7XG5cdFx0fSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0Y29uc3Qgc2NlbmVMUyA9IGdldExvY2FsU3RhdGUodGhpcy5zY2VuZSgpKTtcblx0XHRcdGlmICghc2NlbmVMUykgcmV0dXJuO1xuXG5cdFx0XHQvLyB0cmFjayBkZXBzXG5cdFx0XHR0aGlzLnBsYW5lUmVmKCk7XG5cdFx0XHR0aGlzLm9wdGlvbnMoKTtcblx0XHRcdHNjZW5lTFMub2JqZWN0cygpO1xuXG5cdFx0XHQvLyBSZXNldCBpbnRlcm5hbHMsIGJ1ZmZlcnMsIC4uLlxuXHRcdFx0dGhpcy5yZXNldCgpO1xuXHRcdFx0Ly8gVXBkYXRlIGxpZ2h0bWFwXG5cdFx0XHRpZiAoIXRoaXMudGVtcG9yYWwoKSAmJiB0aGlzLmZyYW1lcygpICE9PSBJbmZpbml0eSkgdGhpcy51cGRhdGUodGhpcy5ibGVuZCgpKTtcblx0XHR9KTtcblxuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoKSA9PiB7XG5cdFx0XHRjb25zdCBbZnJhbWVzLCB0ZW1wb3JhbCwgaW52YWxpZGF0ZSwgbGltaXRdID0gW3RoaXMuZnJhbWVzKCksICEhdGhpcy50ZW1wb3JhbCgpLCB0aGlzLmludmFsaWRhdGUoKSwgdGhpcy5saW1pdCgpXTtcblx0XHRcdGlmICgodGVtcG9yYWwgfHwgZnJhbWVzID09PSBJbmZpbml0eSkgJiYgdGhpcy5jb3VudCA8IGZyYW1lcyAmJiB0aGlzLmNvdW50IDwgbGltaXQpIHtcblx0XHRcdFx0aW52YWxpZGF0ZSgpO1xuXHRcdFx0XHR0aGlzLnVwZGF0ZSgpO1xuXHRcdFx0XHR0aGlzLmNvdW50Kys7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRpbmplY3QoRGVzdHJveVJlZikub25EZXN0cm95KCgpID0+IHtcblx0XHRcdHRoaXMucHJldmlvdXNQTE0/LmNsZWFyKCk7XG5cdFx0fSk7XG5cdH1cblxuXHRnZXRNZXNoKCkge1xuXHRcdHJldHVybiB0aGlzLnBsYW5lUmVmKCkubmF0aXZlRWxlbWVudDtcblx0fVxuXG5cdHJlc2V0KCkge1xuXHRcdC8vIENsZWFyIGJ1ZmZlcnMsIHJlc2V0IG9wYWNpdGllcywgc2V0IGZyYW1lIGNvdW50IHRvIDBcblx0XHR1bnRyYWNrZWQodGhpcy5wTE0pLmNsZWFyKCk7XG5cdFx0Y29uc3QgbWF0ZXJpYWwgPSB1bnRyYWNrZWQodGhpcy5wbGFuZVJlZikubmF0aXZlRWxlbWVudC5tYXRlcmlhbDtcblx0XHRtYXRlcmlhbC5vcGFjaXR5ID0gMDtcblx0XHRtYXRlcmlhbC5hbHBoYVRlc3QgPSAwO1xuXHRcdHRoaXMuY291bnQgPSAwO1xuXHR9XG5cblx0dXBkYXRlKGZyYW1lcyA9IDEpIHtcblx0XHQvLyBBZGFwdCB0aGUgb3BhY2l0eS1ibGVuZCByYXRpbyB0byB0aGUgbnVtYmVyIG9mIGZyYW1lc1xuXHRcdGNvbnN0IG1hdGVyaWFsID0gdGhpcy5wbGFuZVJlZigpLm5hdGl2ZUVsZW1lbnQubWF0ZXJpYWw7XG5cdFx0aWYgKCF0aGlzLnRlbXBvcmFsKCkpIHtcblx0XHRcdG1hdGVyaWFsLm9wYWNpdHkgPSB0aGlzLm9wYWNpdHkoKTtcblx0XHRcdG1hdGVyaWFsLmFscGhhVGVzdCA9IHRoaXMuYWxwaGFUZXN0KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGVyaWFsLm9wYWNpdHkgPSBNYXRoLm1pbih0aGlzLm9wYWNpdHkoKSwgbWF0ZXJpYWwub3BhY2l0eSArIHRoaXMub3BhY2l0eSgpIC8gdGhpcy5ibGVuZCgpKTtcblx0XHRcdG1hdGVyaWFsLmFscGhhVGVzdCA9IE1hdGgubWluKHRoaXMuYWxwaGFUZXN0KCksIG1hdGVyaWFsLmFscGhhVGVzdCArIHRoaXMuYWxwaGFUZXN0KCkgLyB0aGlzLmJsZW5kKCkpO1xuXHRcdH1cblxuXHRcdC8vIFN3aXRjaCBhY2N1bXVsYXRpdmUgbGlnaHRzIG9uXG5cdFx0dGhpcy5saWdodHNSZWYoKS5uYXRpdmVFbGVtZW50LnZpc2libGUgPSB0cnVlO1xuXHRcdC8vIENvbGxlY3Qgc2NlbmUgbGlnaHRzIGFuZCBtZXNoZXNcblx0XHR0aGlzLnBMTSgpLnByZXBhcmUoKTtcblxuXHRcdC8vIFVwZGF0ZSB0aGUgbGlnaHRtYXAgYW5kIHRoZSBhY2N1bXVsYXRpdmUgbGlnaHRzXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBmcmFtZXM7IGkrKykge1xuXHRcdFx0dGhpcy5saWdodHNNYXAuZm9yRWFjaCgobGlnaHRVcGRhdGUpID0+IGxpZ2h0VXBkYXRlKCkpO1xuXHRcdFx0dGhpcy5wTE0oKS51cGRhdGUodGhpcy5jYW1lcmEoKSwgdGhpcy5ibGVuZCgpKTtcblx0XHR9XG5cdFx0Ly8gU3dpdGNoIGxpZ2h0cyBvZmZcblx0XHR0aGlzLmxpZ2h0c1JlZigpLm5hdGl2ZUVsZW1lbnQudmlzaWJsZSA9IGZhbHNlO1xuXHRcdC8vIFJlc3RvcmUgbGlnaHRzIGFuZCBtZXNoZXNcblx0XHR0aGlzLnBMTSgpLmZpbmlzaCgpO1xuXHR9XG59XG4iXX0=
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, effect, input, viewChild, } from '@angular/core';
|
|
2
|
-
import { checkUpdate, extend, NgtArgs, omit, pick } from 'angular-three';
|
|
3
|
-
import { mergeInputs } from 'ngxtension/inject-inputs';
|
|
4
|
-
import { Group, Mesh, PlaneGeometry } from 'three';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
function easeInExpo(x) {
|
|
7
|
-
return x === 0 ? 0 : Math.pow(2, 10 * x - 10);
|
|
8
|
-
}
|
|
9
|
-
const defaultOptions = {
|
|
10
|
-
floor: 0.25,
|
|
11
|
-
segments: 20,
|
|
12
|
-
};
|
|
13
|
-
export class NgtsBackdrop {
|
|
14
|
-
constructor() {
|
|
15
|
-
this.Math = Math;
|
|
16
|
-
this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
|
|
17
|
-
this.parameters = omit(this.options, ['floor', 'segments', 'receiveShadow']);
|
|
18
|
-
this.groupRef = viewChild.required('group');
|
|
19
|
-
this.planeRef = viewChild('plane');
|
|
20
|
-
this.receiveShadow = pick(this.options, 'receiveShadow');
|
|
21
|
-
this.segments = pick(this.options, 'segments');
|
|
22
|
-
this.floor = pick(this.options, 'floor');
|
|
23
|
-
extend({ Group, Mesh, PlaneGeometry });
|
|
24
|
-
effect(() => {
|
|
25
|
-
const plane = this.planeRef()?.nativeElement;
|
|
26
|
-
if (!plane)
|
|
27
|
-
return;
|
|
28
|
-
const [segments, floor] = [this.segments(), this.floor()];
|
|
29
|
-
let i = 0;
|
|
30
|
-
const offset = segments / segments / 2;
|
|
31
|
-
const position = plane.attributes['position'];
|
|
32
|
-
for (let x = 0; x < segments + 1; x++) {
|
|
33
|
-
for (let y = 0; y < segments + 1; y++) {
|
|
34
|
-
position.setXYZ(i++, x / segments - offset + (x === 0 ? -floor : 0), y / segments - offset, easeInExpo(x / segments));
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
checkUpdate(position);
|
|
38
|
-
plane.computeVertexNormals();
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsBackdrop, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
42
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.11", type: NgtsBackdrop, isStandalone: true, selector: "ngts-backdrop", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "groupRef", first: true, predicate: ["group"], descendants: true, isSignal: true }, { propertyName: "planeRef", first: true, predicate: ["plane"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
43
|
-
<ngt-group #group [parameters]="parameters()">
|
|
44
|
-
<ngt-mesh [receiveShadow]="receiveShadow()" [rotation]="[-Math.PI / 2, 0, Math.PI / 2]">
|
|
45
|
-
<ngt-plane-geometry #plane *args="[1, 1, segments(), segments()]" />
|
|
46
|
-
<ng-content />
|
|
47
|
-
</ngt-mesh>
|
|
48
|
-
</ngt-group>
|
|
49
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
50
|
-
}
|
|
51
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsBackdrop, decorators: [{
|
|
52
|
-
type: Component,
|
|
53
|
-
args: [{
|
|
54
|
-
selector: 'ngts-backdrop',
|
|
55
|
-
standalone: true,
|
|
56
|
-
template: `
|
|
57
|
-
<ngt-group #group [parameters]="parameters()">
|
|
58
|
-
<ngt-mesh [receiveShadow]="receiveShadow()" [rotation]="[-Math.PI / 2, 0, Math.PI / 2]">
|
|
59
|
-
<ngt-plane-geometry #plane *args="[1, 1, segments(), segments()]" />
|
|
60
|
-
<ng-content />
|
|
61
|
-
</ngt-mesh>
|
|
62
|
-
</ngt-group>
|
|
63
|
-
`,
|
|
64
|
-
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
65
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
66
|
-
imports: [NgtArgs],
|
|
67
|
-
}]
|
|
68
|
-
}], ctorParameters: () => [] });
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2Ryb3AuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvbGliL2JhY2tkcm9wLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULHNCQUFzQixFQUN0QixNQUFNLEVBRU4sS0FBSyxFQUNMLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQVksSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFtQixLQUFLLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxNQUFNLE9BQU8sQ0FBQzs7QUFFcEUsU0FBUyxVQUFVLENBQUMsQ0FBUztJQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBUUQsTUFBTSxjQUFjLEdBQXdCO0lBQzNDLEtBQUssRUFBRSxJQUFJO0lBQ1gsUUFBUSxFQUFFLEVBQUU7Q0FDWixDQUFDO0FBaUJGLE1BQU0sT0FBTyxZQUFZO0lBYXhCO1FBWm1CLFNBQUksR0FBRyxJQUFJLENBQUM7UUFFL0IsWUFBTyxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1RSxlQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFFeEUsYUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQW9CLE9BQU8sQ0FBQyxDQUFDO1FBQzFELGFBQVEsR0FBRyxTQUFTLENBQTRCLE9BQU8sQ0FBQyxDQUFDO1FBRXpELGtCQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDcEQsYUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2xDLFVBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUczQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFFdkMsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNYLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxhQUFhLENBQUM7WUFDN0MsSUFBSSxDQUFDLEtBQUs7Z0JBQUUsT0FBTztZQUVuQixNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBRTFELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNWLE1BQU0sTUFBTSxHQUFHLFFBQVEsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFvQixDQUFDO1lBQ2pFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3ZDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ3ZDLFFBQVEsQ0FBQyxNQUFNLENBQ2QsQ0FBQyxFQUFFLEVBQ0gsQ0FBQyxHQUFHLFFBQVEsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzlDLENBQUMsR0FBRyxRQUFRLEdBQUcsTUFBTSxFQUNyQixVQUFVLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUN4QixDQUFDO2dCQUNILENBQUM7WUFDRixDQUFDO1lBRUQsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3RCLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzsrR0F2Q1csWUFBWTttR0FBWixZQUFZLDBhQVpkOzs7Ozs7O0VBT1QsNERBR1MsT0FBTzs7NEZBRUwsWUFBWTtrQkFmeEIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsZUFBZTtvQkFDekIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7OztFQU9UO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRDb21wb25lbnQsXG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdGVmZmVjdCxcblx0RWxlbWVudFJlZixcblx0aW5wdXQsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjaGVja1VwZGF0ZSwgZXh0ZW5kLCBOZ3RBcmdzLCBOZ3RHcm91cCwgb21pdCwgcGljayB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgQnVmZmVyQXR0cmlidXRlLCBHcm91cCwgTWVzaCwgUGxhbmVHZW9tZXRyeSB9IGZyb20gJ3RocmVlJztcblxuZnVuY3Rpb24gZWFzZUluRXhwbyh4OiBudW1iZXIpIHtcblx0cmV0dXJuIHggPT09IDAgPyAwIDogTWF0aC5wb3coMiwgMTAgKiB4IC0gMTApO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNCYWNrZHJvcE9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPE5ndEdyb3VwPiB7XG5cdGZsb29yOiBudW1iZXI7XG5cdHNlZ21lbnRzOiBudW1iZXI7XG5cdHJlY2VpdmVTaGFkb3c/OiBib29sZWFuO1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c0JhY2tkcm9wT3B0aW9ucyA9IHtcblx0Zmxvb3I6IDAuMjUsXG5cdHNlZ21lbnRzOiAyMCxcbn07XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtYmFja2Ryb3AnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtZ3JvdXAgI2dyb3VwIFtwYXJhbWV0ZXJzXT1cInBhcmFtZXRlcnMoKVwiPlxuXHRcdFx0PG5ndC1tZXNoIFtyZWNlaXZlU2hhZG93XT1cInJlY2VpdmVTaGFkb3coKVwiIFtyb3RhdGlvbl09XCJbLU1hdGguUEkgLyAyLCAwLCBNYXRoLlBJIC8gMl1cIj5cblx0XHRcdFx0PG5ndC1wbGFuZS1nZW9tZXRyeSAjcGxhbmUgKmFyZ3M9XCJbMSwgMSwgc2VnbWVudHMoKSwgc2VnbWVudHMoKV1cIiAvPlxuXHRcdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdFx0PC9uZ3QtbWVzaD5cblx0XHQ8L25ndC1ncm91cD5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW05ndEFyZ3NdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzQmFja2Ryb3Age1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgTWF0aCA9IE1hdGg7XG5cblx0b3B0aW9ucyA9IGlucHV0KGRlZmF1bHRPcHRpb25zLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMoZGVmYXVsdE9wdGlvbnMpIH0pO1xuXHRwYXJhbWV0ZXJzID0gb21pdCh0aGlzLm9wdGlvbnMsIFsnZmxvb3InLCAnc2VnbWVudHMnLCAncmVjZWl2ZVNoYWRvdyddKTtcblxuXHRncm91cFJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEdyb3VwPj4oJ2dyb3VwJyk7XG5cdHBsYW5lUmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8UGxhbmVHZW9tZXRyeT4+KCdwbGFuZScpO1xuXG5cdHJlY2VpdmVTaGFkb3cgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3JlY2VpdmVTaGFkb3cnKTtcblx0c2VnbWVudHMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3NlZ21lbnRzJyk7XG5cdHByaXZhdGUgZmxvb3IgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2Zsb29yJyk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZXh0ZW5kKHsgR3JvdXAsIE1lc2gsIFBsYW5lR2VvbWV0cnkgfSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0Y29uc3QgcGxhbmUgPSB0aGlzLnBsYW5lUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRpZiAoIXBsYW5lKSByZXR1cm47XG5cblx0XHRcdGNvbnN0IFtzZWdtZW50cywgZmxvb3JdID0gW3RoaXMuc2VnbWVudHMoKSwgdGhpcy5mbG9vcigpXTtcblxuXHRcdFx0bGV0IGkgPSAwO1xuXHRcdFx0Y29uc3Qgb2Zmc2V0ID0gc2VnbWVudHMgLyBzZWdtZW50cyAvIDI7XG5cdFx0XHRjb25zdCBwb3NpdGlvbiA9IHBsYW5lLmF0dHJpYnV0ZXNbJ3Bvc2l0aW9uJ10gYXMgQnVmZmVyQXR0cmlidXRlO1xuXHRcdFx0Zm9yIChsZXQgeCA9IDA7IHggPCBzZWdtZW50cyArIDE7IHgrKykge1xuXHRcdFx0XHRmb3IgKGxldCB5ID0gMDsgeSA8IHNlZ21lbnRzICsgMTsgeSsrKSB7XG5cdFx0XHRcdFx0cG9zaXRpb24uc2V0WFlaKFxuXHRcdFx0XHRcdFx0aSsrLFxuXHRcdFx0XHRcdFx0eCAvIHNlZ21lbnRzIC0gb2Zmc2V0ICsgKHggPT09IDAgPyAtZmxvb3IgOiAwKSxcblx0XHRcdFx0XHRcdHkgLyBzZWdtZW50cyAtIG9mZnNldCxcblx0XHRcdFx0XHRcdGVhc2VJbkV4cG8oeCAvIHNlZ21lbnRzKSxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGNoZWNrVXBkYXRlKHBvc2l0aW9uKTtcblx0XHRcdHBsYW5lLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk7XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, effect, input, signal, viewChild, } from '@angular/core';
|
|
2
|
-
import { extend, getLocalState, injectBeforeRender, omit, vector3 } from 'angular-three';
|
|
3
|
-
import { Box3, Group, Vector3 } from 'three';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
const boundingBox = new Box3();
|
|
6
|
-
const boundingBoxSize = new Vector3();
|
|
7
|
-
export class NgtsBBAnchor {
|
|
8
|
-
constructor() {
|
|
9
|
-
this.options = input.required();
|
|
10
|
-
this.parameters = omit(this.options, ['anchor']);
|
|
11
|
-
this.bbAnchorRef = viewChild.required('bbAnchor');
|
|
12
|
-
this.parent = signal(null);
|
|
13
|
-
this.anchor = vector3(this.options, 'anchor');
|
|
14
|
-
extend({ Group });
|
|
15
|
-
// Reattach group created by this component to the parent's parent,
|
|
16
|
-
// so it becomes a sibling of its initial parent.
|
|
17
|
-
// We do that so the children have no impact on a bounding box of a parent.
|
|
18
|
-
effect(() => {
|
|
19
|
-
const bbAnchorLS = getLocalState(this.bbAnchorRef().nativeElement);
|
|
20
|
-
const bbAnchorParent = bbAnchorLS?.parent();
|
|
21
|
-
if (bbAnchorParent?.parent) {
|
|
22
|
-
this.parent.set(bbAnchorParent);
|
|
23
|
-
bbAnchorParent.parent.add(this.bbAnchorRef().nativeElement);
|
|
24
|
-
}
|
|
25
|
-
}, { allowSignalWrites: true });
|
|
26
|
-
injectBeforeRender(() => {
|
|
27
|
-
const parent = this.parent();
|
|
28
|
-
if (parent) {
|
|
29
|
-
boundingBox.setFromObject(parent);
|
|
30
|
-
boundingBox.getSize(boundingBoxSize);
|
|
31
|
-
const anchor = this.anchor();
|
|
32
|
-
const bbAnchor = this.bbAnchorRef().nativeElement;
|
|
33
|
-
bbAnchor.position.set(parent.position.x + (boundingBoxSize.x * anchor.x) / 2, parent.position.y + (boundingBoxSize.y * anchor.y) / 2, parent.position.z + (boundingBoxSize.z * anchor.z) / 2);
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsBBAnchor, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
38
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.11", type: NgtsBBAnchor, isStandalone: true, selector: "ngts-bb-anchor", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: "bbAnchorRef", first: true, predicate: ["bbAnchor"], descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
39
|
-
<ngt-group #bbAnchor [parameters]="parameters()">
|
|
40
|
-
<ng-content />
|
|
41
|
-
</ngt-group>
|
|
42
|
-
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
43
|
-
}
|
|
44
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsBBAnchor, decorators: [{
|
|
45
|
-
type: Component,
|
|
46
|
-
args: [{
|
|
47
|
-
selector: 'ngts-bb-anchor',
|
|
48
|
-
standalone: true,
|
|
49
|
-
template: `
|
|
50
|
-
<ngt-group #bbAnchor [parameters]="parameters()">
|
|
51
|
-
<ng-content />
|
|
52
|
-
</ngt-group>
|
|
53
|
-
`,
|
|
54
|
-
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
55
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
56
|
-
}]
|
|
57
|
-
}], ctorParameters: () => [] });
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmItYW5jaG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL3N0YWdpbmcvc3JjL2xpYi9iYi1hbmNob3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLHNCQUFzQixFQUN0Qix1QkFBdUIsRUFDdkIsU0FBUyxFQUVULE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLE1BQU0sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBWSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7O0FBRXZELE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7QUFDL0IsTUFBTSxlQUFlLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQWlCdEMsTUFBTSxPQUFPLFlBQVk7SUFTeEI7UUFSQSxZQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBdUIsQ0FBQztRQUNoRCxlQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRTVDLGdCQUFXLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBb0IsVUFBVSxDQUFDLENBQUM7UUFFaEUsV0FBTSxHQUFHLE1BQU0sQ0FBa0IsSUFBSSxDQUFDLENBQUM7UUFDL0IsV0FBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBR2hELE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFbEIsbUVBQW1FO1FBQ25FLGlEQUFpRDtRQUNqRCwyRUFBMkU7UUFDM0UsTUFBTSxDQUNMLEdBQUcsRUFBRTtZQUNKLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDbkUsTUFBTSxjQUFjLEdBQUcsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzVDLElBQUksY0FBYyxFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDaEMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzdELENBQUM7UUFDRixDQUFDLEVBQ0QsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FDM0IsQ0FBQztRQUVGLGtCQUFrQixDQUFDLEdBQUcsRUFBRTtZQUN2QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDN0IsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWixXQUFXLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNsQyxXQUFXLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUVyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxhQUFhLENBQUM7Z0JBRWxELFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUNwQixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFDdEQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQ3RELE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUN0RCxDQUFDO1lBQ0gsQ0FBQztRQUNGLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzsrR0EzQ1csWUFBWTttR0FBWixZQUFZLDRVQVJkOzs7O0VBSVQ7OzRGQUlXLFlBQVk7a0JBWHhCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7OztFQUlUO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDL0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRFbGVtZW50UmVmLFxuXHRlZmZlY3QsXG5cdGlucHV0LFxuXHRzaWduYWwsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3RHcm91cCwgTmd0VmVjdG9yMywgZXh0ZW5kLCBnZXRMb2NhbFN0YXRlLCBpbmplY3RCZWZvcmVSZW5kZXIsIG9taXQsIHZlY3RvcjMgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IEJveDMsIEdyb3VwLCBPYmplY3QzRCwgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcblxuY29uc3QgYm91bmRpbmdCb3ggPSBuZXcgQm94MygpO1xuY29uc3QgYm91bmRpbmdCb3hTaXplID0gbmV3IFZlY3RvcjMoKTtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzQkJBbmNob3JPcHRpb25zIGV4dGVuZHMgUGFydGlhbDxOZ3RHcm91cD4ge1xuXHRhbmNob3I6IE5ndFZlY3RvcjM7XG59XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtYmItYW5jaG9yJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LWdyb3VwICNiYkFuY2hvciBbcGFyYW1ldGVyc109XCJwYXJhbWV0ZXJzKClcIj5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3QtZ3JvdXA+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNCQkFuY2hvciB7XG5cdG9wdGlvbnMgPSBpbnB1dC5yZXF1aXJlZDxOZ3RzQkJBbmNob3JPcHRpb25zPigpO1xuXHRwYXJhbWV0ZXJzID0gb21pdCh0aGlzLm9wdGlvbnMsIFsnYW5jaG9yJ10pO1xuXG5cdGJiQW5jaG9yUmVmID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8R3JvdXA+PignYmJBbmNob3InKTtcblxuXHRwYXJlbnQgPSBzaWduYWw8T2JqZWN0M0QgfCBudWxsPihudWxsKTtcblx0cHJpdmF0ZSBhbmNob3IgPSB2ZWN0b3IzKHRoaXMub3B0aW9ucywgJ2FuY2hvcicpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGV4dGVuZCh7IEdyb3VwIH0pO1xuXG5cdFx0Ly8gUmVhdHRhY2ggZ3JvdXAgY3JlYXRlZCBieSB0aGlzIGNvbXBvbmVudCB0byB0aGUgcGFyZW50J3MgcGFyZW50LFxuXHRcdC8vIHNvIGl0IGJlY29tZXMgYSBzaWJsaW5nIG9mIGl0cyBpbml0aWFsIHBhcmVudC5cblx0XHQvLyBXZSBkbyB0aGF0IHNvIHRoZSBjaGlsZHJlbiBoYXZlIG5vIGltcGFjdCBvbiBhIGJvdW5kaW5nIGJveCBvZiBhIHBhcmVudC5cblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGJiQW5jaG9yTFMgPSBnZXRMb2NhbFN0YXRlKHRoaXMuYmJBbmNob3JSZWYoKS5uYXRpdmVFbGVtZW50KTtcblx0XHRcdFx0Y29uc3QgYmJBbmNob3JQYXJlbnQgPSBiYkFuY2hvckxTPy5wYXJlbnQoKTtcblx0XHRcdFx0aWYgKGJiQW5jaG9yUGFyZW50Py5wYXJlbnQpIHtcblx0XHRcdFx0XHR0aGlzLnBhcmVudC5zZXQoYmJBbmNob3JQYXJlbnQpO1xuXHRcdFx0XHRcdGJiQW5jaG9yUGFyZW50LnBhcmVudC5hZGQodGhpcy5iYkFuY2hvclJlZigpLm5hdGl2ZUVsZW1lbnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cblx0XHRpbmplY3RCZWZvcmVSZW5kZXIoKCkgPT4ge1xuXHRcdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQoKTtcblx0XHRcdGlmIChwYXJlbnQpIHtcblx0XHRcdFx0Ym91bmRpbmdCb3guc2V0RnJvbU9iamVjdChwYXJlbnQpO1xuXHRcdFx0XHRib3VuZGluZ0JveC5nZXRTaXplKGJvdW5kaW5nQm94U2l6ZSk7XG5cblx0XHRcdFx0Y29uc3QgYW5jaG9yID0gdGhpcy5hbmNob3IoKTtcblx0XHRcdFx0Y29uc3QgYmJBbmNob3IgPSB0aGlzLmJiQW5jaG9yUmVmKCkubmF0aXZlRWxlbWVudDtcblxuXHRcdFx0XHRiYkFuY2hvci5wb3NpdGlvbi5zZXQoXG5cdFx0XHRcdFx0cGFyZW50LnBvc2l0aW9uLnggKyAoYm91bmRpbmdCb3hTaXplLnggKiBhbmNob3IueCkgLyAyLFxuXHRcdFx0XHRcdHBhcmVudC5wb3NpdGlvbi55ICsgKGJvdW5kaW5nQm94U2l6ZS55ICogYW5jaG9yLnkpIC8gMixcblx0XHRcdFx0XHRwYXJlbnQucG9zaXRpb24ueiArIChib3VuZGluZ0JveFNpemUueiAqIGFuY2hvci56KSAvIDIsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
|