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.
Files changed (179) hide show
  1. package/abstractions/lib/catmull-rom-line.d.ts +117 -117
  2. package/abstractions/lib/edges.d.ts +126 -126
  3. package/abstractions/lib/grid.d.ts +15 -15
  4. package/abstractions/lib/line.d.ts +1 -1
  5. package/abstractions/lib/prism-geometry.d.ts +4 -4
  6. package/abstractions/lib/rounded-box.d.ts +1 -1
  7. package/abstractions/lib/text-3d.d.ts +22 -22
  8. package/abstractions/lib/text.d.ts +1 -1
  9. package/cameras/lib/cube-camera.d.ts +1 -1
  10. package/cameras/lib/orthographic-camera.d.ts +1 -1
  11. package/cameras/lib/perspective-camera.d.ts +1 -1
  12. package/controls/index.d.ts +0 -9
  13. package/controls/lib/camera-controls.d.ts +1 -1
  14. package/controls/lib/orbit-controls.d.ts +1 -1
  15. package/fesm2022/angular-three-soba-abstractions.mjs +41 -52
  16. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  17. package/fesm2022/angular-three-soba-cameras.mjs +12 -15
  18. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  19. package/fesm2022/angular-three-soba-controls.mjs +16 -24
  20. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  21. package/fesm2022/angular-three-soba-gizmos.mjs +59 -60
  22. package/fesm2022/angular-three-soba-gizmos.mjs.map +1 -1
  23. package/fesm2022/angular-three-soba-loaders.mjs +3 -3
  24. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  25. package/fesm2022/angular-three-soba-materials.mjs +27 -35
  26. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  27. package/fesm2022/angular-three-soba-misc.mjs +27 -29
  28. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  29. package/fesm2022/angular-three-soba-performances.mjs +31 -34
  30. package/fesm2022/angular-three-soba-performances.mjs.map +1 -1
  31. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  32. package/fesm2022/angular-three-soba-staging.mjs +91 -105
  33. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  34. package/fesm2022/angular-three-soba-stats.mjs +3 -3
  35. package/fesm2022/angular-three-soba-stats.mjs.map +1 -1
  36. package/gizmos/lib/gizmo-helper/gizmo-viewport.d.ts +1 -1
  37. package/gizmos/lib/pivot-controls/axis-arrow.d.ts +1 -1
  38. package/gizmos/lib/pivot-controls/axis-rotator.d.ts +1 -1
  39. package/gizmos/lib/pivot-controls/pivot-controls.d.ts +1 -1
  40. package/gizmos/lib/pivot-controls/plane-slider.d.ts +1 -1
  41. package/gizmos/lib/pivot-controls/scaling-sphere.d.ts +1 -1
  42. package/gizmos/lib/transform-controls.d.ts +2 -2
  43. package/materials/lib/custom-shader-material.d.ts +2 -2
  44. package/materials/lib/mesh-portal-material.d.ts +9 -9
  45. package/materials/lib/mesh-refraction-material.d.ts +2 -2
  46. package/materials/lib/mesh-transmission-material.d.ts +1 -1
  47. package/misc/lib/computed-attribute.d.ts +6 -6
  48. package/misc/lib/decal.d.ts +1 -1
  49. package/misc/lib/html/html.d.ts +2 -2
  50. package/misc/lib/sampler.d.ts +1 -1
  51. package/package.json +11 -37
  52. package/performances/lib/instances/instances.d.ts +5 -5
  53. package/performances/lib/points/points.d.ts +10 -10
  54. package/performances/lib/segments/segments.d.ts +4 -4
  55. package/shaders/lib/mesh-refraction-material.d.ts +2 -2
  56. package/staging/lib/caustics.d.ts +1 -1
  57. package/staging/lib/center.d.ts +2 -2
  58. package/staging/lib/contact-shadows.d.ts +1 -1
  59. package/staging/lib/lightformer.d.ts +1 -1
  60. package/staging/lib/mask.d.ts +1 -1
  61. package/staging/lib/render-texture.d.ts +1 -1
  62. package/staging/lib/spot-light.d.ts +2 -2
  63. package/esm2022/abstractions/angular-three-soba-abstractions.mjs +0 -5
  64. package/esm2022/abstractions/index.mjs +0 -14
  65. package/esm2022/abstractions/lib/billboard.mjs +0 -69
  66. package/esm2022/abstractions/lib/catmull-rom-line.mjs +0 -76
  67. package/esm2022/abstractions/lib/cubic-bezier-line.mjs +0 -51
  68. package/esm2022/abstractions/lib/edges.mjs +0 -66
  69. package/esm2022/abstractions/lib/gradient-texture.mjs +0 -91
  70. package/esm2022/abstractions/lib/grid.mjs +0 -103
  71. package/esm2022/abstractions/lib/helper.mjs +0 -74
  72. package/esm2022/abstractions/lib/line.mjs +0 -123
  73. package/esm2022/abstractions/lib/prism-geometry.mjs +0 -46
  74. package/esm2022/abstractions/lib/quadratic-bezier-line.mjs +0 -73
  75. package/esm2022/abstractions/lib/rounded-box.mjs +0 -131
  76. package/esm2022/abstractions/lib/text-3d.mjs +0 -100
  77. package/esm2022/abstractions/lib/text.mjs +0 -86
  78. package/esm2022/angular-three-soba.mjs +0 -5
  79. package/esm2022/cameras/angular-three-soba-cameras.mjs +0 -5
  80. package/esm2022/cameras/index.mjs +0 -5
  81. package/esm2022/cameras/lib/camera-content.mjs +0 -14
  82. package/esm2022/cameras/lib/cube-camera.mjs +0 -102
  83. package/esm2022/cameras/lib/orthographic-camera.mjs +0 -131
  84. package/esm2022/cameras/lib/perspective-camera.mjs +0 -105
  85. package/esm2022/controls/angular-three-soba-controls.mjs +0 -5
  86. package/esm2022/controls/index.mjs +0 -9
  87. package/esm2022/controls/lib/camera-controls.mjs +0 -126
  88. package/esm2022/controls/lib/orbit-controls.mjs +0 -114
  89. package/esm2022/controls/lib/scroll-controls.mjs +0 -261
  90. package/esm2022/gizmos/angular-three-soba-gizmos.mjs +0 -5
  91. package/esm2022/gizmos/index.mjs +0 -6
  92. package/esm2022/gizmos/lib/gizmo-helper/gizmo-helper.mjs +0 -191
  93. package/esm2022/gizmos/lib/gizmo-helper/gizmo-viewcube.mjs +0 -304
  94. package/esm2022/gizmos/lib/gizmo-helper/gizmo-viewport.mjs +0 -348
  95. package/esm2022/gizmos/lib/pivot-controls/axis-arrow.mjs +0 -265
  96. package/esm2022/gizmos/lib/pivot-controls/axis-rotator.mjs +0 -264
  97. package/esm2022/gizmos/lib/pivot-controls/pivot-controls.mjs +0 -349
  98. package/esm2022/gizmos/lib/pivot-controls/plane-slider.mjs +0 -266
  99. package/esm2022/gizmos/lib/pivot-controls/scaling-sphere.mjs +0 -232
  100. package/esm2022/gizmos/lib/transform-controls.mjs +0 -177
  101. package/esm2022/index.mjs +0 -2
  102. package/esm2022/loaders/angular-three-soba-loaders.mjs +0 -5
  103. package/esm2022/loaders/index.mjs +0 -7
  104. package/esm2022/loaders/lib/fbx-loader.mjs +0 -13
  105. package/esm2022/loaders/lib/font-loader.mjs +0 -49
  106. package/esm2022/loaders/lib/gltf-loader.mjs +0 -51
  107. package/esm2022/loaders/lib/loader.mjs +0 -103
  108. package/esm2022/loaders/lib/progress.mjs +0 -51
  109. package/esm2022/loaders/lib/texture-loader.mjs +0 -32
  110. package/esm2022/materials/angular-three-soba-materials.mjs +0 -5
  111. package/esm2022/materials/index.mjs +0 -9
  112. package/esm2022/materials/lib/custom-shader-material.mjs +0 -67
  113. package/esm2022/materials/lib/mesh-distort-material.mjs +0 -43
  114. package/esm2022/materials/lib/mesh-portal-material.mjs +0 -294
  115. package/esm2022/materials/lib/mesh-reflector-material.mjs +0 -274
  116. package/esm2022/materials/lib/mesh-refraction-material.mjs +0 -140
  117. package/esm2022/materials/lib/mesh-transmission-material.mjs +0 -188
  118. package/esm2022/materials/lib/mesh-wobble-material.mjs +0 -43
  119. package/esm2022/materials/lib/point-material.mjs +0 -34
  120. package/esm2022/misc/angular-three-soba-misc.mjs +0 -5
  121. package/esm2022/misc/index.mjs +0 -15
  122. package/esm2022/misc/lib/animations.mjs +0 -71
  123. package/esm2022/misc/lib/bake-shadows.mjs +0 -24
  124. package/esm2022/misc/lib/computed-attribute.mjs +0 -51
  125. package/esm2022/misc/lib/constants.mjs +0 -5
  126. package/esm2022/misc/lib/decal.mjs +0 -142
  127. package/esm2022/misc/lib/deprecated.mjs +0 -15
  128. package/esm2022/misc/lib/depth-buffer.mjs +0 -35
  129. package/esm2022/misc/lib/fbo.mjs +0 -86
  130. package/esm2022/misc/lib/html/html-content.mjs +0 -322
  131. package/esm2022/misc/lib/html/html.mjs +0 -129
  132. package/esm2022/misc/lib/html/utils.mjs +0 -74
  133. package/esm2022/misc/lib/intersect.mjs +0 -49
  134. package/esm2022/misc/lib/preload.mjs +0 -58
  135. package/esm2022/misc/lib/sampler.mjs +0 -122
  136. package/esm2022/misc/lib/scale-factor.mjs +0 -29
  137. package/esm2022/performances/angular-three-soba-performances.mjs +0 -5
  138. package/esm2022/performances/index.mjs +0 -7
  139. package/esm2022/performances/lib/adaptive-dpr.mjs +0 -46
  140. package/esm2022/performances/lib/adaptive-events.mjs +0 -24
  141. package/esm2022/performances/lib/detailed.mjs +0 -53
  142. package/esm2022/performances/lib/instances/instances.mjs +0 -177
  143. package/esm2022/performances/lib/instances/position-mesh.mjs +0 -51
  144. package/esm2022/performances/lib/points/points.mjs +0 -272
  145. package/esm2022/performances/lib/points/position-point.mjs +0 -53
  146. package/esm2022/performances/lib/segments/segment-object.mjs +0 -9
  147. package/esm2022/performances/lib/segments/segments.mjs +0 -126
  148. package/esm2022/shaders/angular-three-soba-shaders.mjs +0 -5
  149. package/esm2022/shaders/index.mjs +0 -4
  150. package/esm2022/shaders/lib/grid-material.mjs +0 -81
  151. package/esm2022/shaders/lib/mesh-refraction-material.mjs +0 -163
  152. package/esm2022/shaders/lib/point-material.mjs +0 -24
  153. package/esm2022/staging/angular-three-soba-staging.mjs +0 -5
  154. package/esm2022/staging/index.mjs +0 -21
  155. package/esm2022/staging/lib/accumulative-shadows.mjs +0 -180
  156. package/esm2022/staging/lib/backdrop.mjs +0 -69
  157. package/esm2022/staging/lib/bb-anchor.mjs +0 -58
  158. package/esm2022/staging/lib/bounds.mjs +0 -282
  159. package/esm2022/staging/lib/camera-shake.mjs +0 -65
  160. package/esm2022/staging/lib/caustics.mjs +0 -184
  161. package/esm2022/staging/lib/center.mjs +0 -114
  162. package/esm2022/staging/lib/contact-shadows.mjs +0 -214
  163. package/esm2022/staging/lib/environment/environment.mjs +0 -344
  164. package/esm2022/staging/lib/environment/inject-environment.mjs +0 -184
  165. package/esm2022/staging/lib/float.mjs +0 -70
  166. package/esm2022/staging/lib/lightformer.mjs +0 -103
  167. package/esm2022/staging/lib/mask.mjs +0 -74
  168. package/esm2022/staging/lib/matcap-texture.mjs +0 -79
  169. package/esm2022/staging/lib/normal-texture.mjs +0 -79
  170. package/esm2022/staging/lib/randomized-lights.mjs +0 -100
  171. package/esm2022/staging/lib/render-texture.mjs +0 -202
  172. package/esm2022/staging/lib/sky.mjs +0 -86
  173. package/esm2022/staging/lib/spot-light.mjs +0 -445
  174. package/esm2022/staging/lib/stage.mjs +0 -232
  175. package/esm2022/stats/angular-three-soba-stats.mjs +0 -5
  176. package/esm2022/stats/index.mjs +0 -2
  177. package/esm2022/stats/lib/stats.mjs +0 -57
  178. package/esm2022/vanilla-exports/angular-three-soba-vanilla-exports.mjs +0 -5
  179. 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==