angular-three-soba 2.13.0 → 3.0.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 (170) hide show
  1. package/abstractions/lib/catmull-rom-line.d.ts +247 -247
  2. package/abstractions/lib/edges.d.ts +276 -276
  3. package/abstractions/lib/grid.d.ts +45 -45
  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 +51 -51
  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/fesm2022/angular-three-soba-abstractions.mjs +41 -52
  14. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  15. package/fesm2022/angular-three-soba-cameras.mjs +12 -15
  16. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  17. package/fesm2022/angular-three-soba-controls.mjs +16 -30
  18. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  19. package/fesm2022/angular-three-soba-gizmos.mjs +59 -60
  20. package/fesm2022/angular-three-soba-gizmos.mjs.map +1 -1
  21. package/fesm2022/angular-three-soba-loaders.mjs +3 -3
  22. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  23. package/fesm2022/angular-three-soba-materials.mjs +27 -35
  24. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  25. package/fesm2022/angular-three-soba-misc.mjs +27 -29
  26. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  27. package/fesm2022/angular-three-soba-performances.mjs +31 -34
  28. package/fesm2022/angular-three-soba-performances.mjs.map +1 -1
  29. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  30. package/fesm2022/angular-three-soba-staging.mjs +91 -105
  31. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  32. package/fesm2022/angular-three-soba-stats.mjs +3 -3
  33. package/fesm2022/angular-three-soba-stats.mjs.map +1 -1
  34. package/gizmos/lib/gizmo-helper/gizmo-viewport.d.ts +1 -1
  35. package/gizmos/lib/pivot-controls/pivot-controls.d.ts +1 -1
  36. package/materials/lib/mesh-portal-material.d.ts +1 -1
  37. package/materials/lib/mesh-refraction-material.d.ts +1 -1
  38. package/misc/lib/computed-attribute.d.ts +3 -3
  39. package/misc/lib/decal.d.ts +1 -1
  40. package/misc/lib/html/html.d.ts +2 -2
  41. package/package.json +8 -34
  42. package/performances/lib/instances/instances.d.ts +7 -7
  43. package/performances/lib/points/points.d.ts +16 -16
  44. package/performances/lib/segments/segments.d.ts +1 -1
  45. package/staging/lib/accumulative-shadows.d.ts +1 -1
  46. package/staging/lib/caustics.d.ts +1 -1
  47. package/staging/lib/center.d.ts +2 -2
  48. package/staging/lib/contact-shadows.d.ts +1 -1
  49. package/staging/lib/lightformer.d.ts +1 -1
  50. package/staging/lib/mask.d.ts +1 -1
  51. package/staging/lib/sky.d.ts +1 -1
  52. package/staging/lib/spot-light.d.ts +1 -1
  53. package/staging/lib/stage.d.ts +5 -5
  54. package/esm2022/abstractions/angular-three-soba-abstractions.mjs +0 -5
  55. package/esm2022/abstractions/index.mjs +0 -14
  56. package/esm2022/abstractions/lib/billboard.mjs +0 -69
  57. package/esm2022/abstractions/lib/catmull-rom-line.mjs +0 -76
  58. package/esm2022/abstractions/lib/cubic-bezier-line.mjs +0 -51
  59. package/esm2022/abstractions/lib/edges.mjs +0 -66
  60. package/esm2022/abstractions/lib/gradient-texture.mjs +0 -91
  61. package/esm2022/abstractions/lib/grid.mjs +0 -103
  62. package/esm2022/abstractions/lib/helper.mjs +0 -74
  63. package/esm2022/abstractions/lib/line.mjs +0 -123
  64. package/esm2022/abstractions/lib/prism-geometry.mjs +0 -46
  65. package/esm2022/abstractions/lib/quadratic-bezier-line.mjs +0 -73
  66. package/esm2022/abstractions/lib/rounded-box.mjs +0 -131
  67. package/esm2022/abstractions/lib/text-3d.mjs +0 -100
  68. package/esm2022/abstractions/lib/text.mjs +0 -86
  69. package/esm2022/angular-three-soba.mjs +0 -5
  70. package/esm2022/cameras/angular-three-soba-cameras.mjs +0 -5
  71. package/esm2022/cameras/index.mjs +0 -5
  72. package/esm2022/cameras/lib/camera-content.mjs +0 -14
  73. package/esm2022/cameras/lib/cube-camera.mjs +0 -102
  74. package/esm2022/cameras/lib/orthographic-camera.mjs +0 -131
  75. package/esm2022/cameras/lib/perspective-camera.mjs +0 -105
  76. package/esm2022/controls/angular-three-soba-controls.mjs +0 -5
  77. package/esm2022/controls/index.mjs +0 -9
  78. package/esm2022/controls/lib/camera-controls.mjs +0 -126
  79. package/esm2022/controls/lib/orbit-controls.mjs +0 -120
  80. package/esm2022/controls/lib/scroll-controls.mjs +0 -261
  81. package/esm2022/gizmos/angular-three-soba-gizmos.mjs +0 -5
  82. package/esm2022/gizmos/index.mjs +0 -6
  83. package/esm2022/gizmos/lib/gizmo-helper/gizmo-helper.mjs +0 -191
  84. package/esm2022/gizmos/lib/gizmo-helper/gizmo-viewcube.mjs +0 -304
  85. package/esm2022/gizmos/lib/gizmo-helper/gizmo-viewport.mjs +0 -348
  86. package/esm2022/gizmos/lib/pivot-controls/axis-arrow.mjs +0 -265
  87. package/esm2022/gizmos/lib/pivot-controls/axis-rotator.mjs +0 -264
  88. package/esm2022/gizmos/lib/pivot-controls/pivot-controls.mjs +0 -349
  89. package/esm2022/gizmos/lib/pivot-controls/plane-slider.mjs +0 -266
  90. package/esm2022/gizmos/lib/pivot-controls/scaling-sphere.mjs +0 -232
  91. package/esm2022/gizmos/lib/transform-controls.mjs +0 -177
  92. package/esm2022/index.mjs +0 -2
  93. package/esm2022/loaders/angular-three-soba-loaders.mjs +0 -5
  94. package/esm2022/loaders/index.mjs +0 -7
  95. package/esm2022/loaders/lib/fbx-loader.mjs +0 -13
  96. package/esm2022/loaders/lib/font-loader.mjs +0 -49
  97. package/esm2022/loaders/lib/gltf-loader.mjs +0 -51
  98. package/esm2022/loaders/lib/loader.mjs +0 -103
  99. package/esm2022/loaders/lib/progress.mjs +0 -51
  100. package/esm2022/loaders/lib/texture-loader.mjs +0 -32
  101. package/esm2022/materials/angular-three-soba-materials.mjs +0 -5
  102. package/esm2022/materials/index.mjs +0 -9
  103. package/esm2022/materials/lib/custom-shader-material.mjs +0 -67
  104. package/esm2022/materials/lib/mesh-distort-material.mjs +0 -43
  105. package/esm2022/materials/lib/mesh-portal-material.mjs +0 -294
  106. package/esm2022/materials/lib/mesh-reflector-material.mjs +0 -274
  107. package/esm2022/materials/lib/mesh-refraction-material.mjs +0 -140
  108. package/esm2022/materials/lib/mesh-transmission-material.mjs +0 -188
  109. package/esm2022/materials/lib/mesh-wobble-material.mjs +0 -43
  110. package/esm2022/materials/lib/point-material.mjs +0 -34
  111. package/esm2022/misc/angular-three-soba-misc.mjs +0 -5
  112. package/esm2022/misc/index.mjs +0 -15
  113. package/esm2022/misc/lib/animations.mjs +0 -71
  114. package/esm2022/misc/lib/bake-shadows.mjs +0 -24
  115. package/esm2022/misc/lib/computed-attribute.mjs +0 -51
  116. package/esm2022/misc/lib/constants.mjs +0 -5
  117. package/esm2022/misc/lib/decal.mjs +0 -142
  118. package/esm2022/misc/lib/deprecated.mjs +0 -15
  119. package/esm2022/misc/lib/depth-buffer.mjs +0 -35
  120. package/esm2022/misc/lib/fbo.mjs +0 -86
  121. package/esm2022/misc/lib/html/html-content.mjs +0 -322
  122. package/esm2022/misc/lib/html/html.mjs +0 -129
  123. package/esm2022/misc/lib/html/utils.mjs +0 -74
  124. package/esm2022/misc/lib/intersect.mjs +0 -49
  125. package/esm2022/misc/lib/preload.mjs +0 -58
  126. package/esm2022/misc/lib/sampler.mjs +0 -122
  127. package/esm2022/misc/lib/scale-factor.mjs +0 -29
  128. package/esm2022/performances/angular-three-soba-performances.mjs +0 -5
  129. package/esm2022/performances/index.mjs +0 -7
  130. package/esm2022/performances/lib/adaptive-dpr.mjs +0 -46
  131. package/esm2022/performances/lib/adaptive-events.mjs +0 -24
  132. package/esm2022/performances/lib/detailed.mjs +0 -53
  133. package/esm2022/performances/lib/instances/instances.mjs +0 -177
  134. package/esm2022/performances/lib/instances/position-mesh.mjs +0 -51
  135. package/esm2022/performances/lib/points/points.mjs +0 -272
  136. package/esm2022/performances/lib/points/position-point.mjs +0 -53
  137. package/esm2022/performances/lib/segments/segment-object.mjs +0 -9
  138. package/esm2022/performances/lib/segments/segments.mjs +0 -126
  139. package/esm2022/shaders/angular-three-soba-shaders.mjs +0 -5
  140. package/esm2022/shaders/index.mjs +0 -4
  141. package/esm2022/shaders/lib/grid-material.mjs +0 -81
  142. package/esm2022/shaders/lib/mesh-refraction-material.mjs +0 -163
  143. package/esm2022/shaders/lib/point-material.mjs +0 -24
  144. package/esm2022/staging/angular-three-soba-staging.mjs +0 -5
  145. package/esm2022/staging/index.mjs +0 -21
  146. package/esm2022/staging/lib/accumulative-shadows.mjs +0 -180
  147. package/esm2022/staging/lib/backdrop.mjs +0 -69
  148. package/esm2022/staging/lib/bb-anchor.mjs +0 -58
  149. package/esm2022/staging/lib/bounds.mjs +0 -282
  150. package/esm2022/staging/lib/camera-shake.mjs +0 -65
  151. package/esm2022/staging/lib/caustics.mjs +0 -184
  152. package/esm2022/staging/lib/center.mjs +0 -114
  153. package/esm2022/staging/lib/contact-shadows.mjs +0 -214
  154. package/esm2022/staging/lib/environment/environment.mjs +0 -344
  155. package/esm2022/staging/lib/environment/inject-environment.mjs +0 -184
  156. package/esm2022/staging/lib/float.mjs +0 -70
  157. package/esm2022/staging/lib/lightformer.mjs +0 -103
  158. package/esm2022/staging/lib/mask.mjs +0 -74
  159. package/esm2022/staging/lib/matcap-texture.mjs +0 -79
  160. package/esm2022/staging/lib/normal-texture.mjs +0 -79
  161. package/esm2022/staging/lib/randomized-lights.mjs +0 -100
  162. package/esm2022/staging/lib/render-texture.mjs +0 -202
  163. package/esm2022/staging/lib/sky.mjs +0 -86
  164. package/esm2022/staging/lib/spot-light.mjs +0 -445
  165. package/esm2022/staging/lib/stage.mjs +0 -232
  166. package/esm2022/stats/angular-three-soba-stats.mjs +0 -5
  167. package/esm2022/stats/index.mjs +0 -2
  168. package/esm2022/stats/lib/stats.mjs +0 -57
  169. package/esm2022/vanilla-exports/angular-three-soba-vanilla-exports.mjs +0 -5
  170. package/esm2022/vanilla-exports/index.mjs +0 -3
@@ -1,282 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, effect, input, untracked, viewChild, } from '@angular/core';
2
- import { extend, injectBeforeRender, injectStore, is, pick } from 'angular-three';
3
- import { mergeInputs } from 'ngxtension/inject-inputs';
4
- import { Box3, Group, Matrix4, Quaternion, Vector3 } from 'three';
5
- import * as i0 from "@angular/core";
6
- var AnimationState;
7
- (function (AnimationState) {
8
- AnimationState[AnimationState["NONE"] = 0] = "NONE";
9
- AnimationState[AnimationState["START"] = 1] = "START";
10
- AnimationState[AnimationState["ACTIVE"] = 2] = "ACTIVE";
11
- })(AnimationState || (AnimationState = {}));
12
- function isBox3(def) {
13
- return !!def && def.isBox3;
14
- }
15
- function interpolateFuncDefault(t) {
16
- // Imitates the previously used THREE.MathUtils.damp
17
- return 1 - Math.exp(-5 * t) + 0.007 * t;
18
- }
19
- const defaultOptions = {
20
- maxDuration: 1.0,
21
- margin: 1.2,
22
- interpolateFunc: interpolateFuncDefault,
23
- clip: false,
24
- fit: false,
25
- observe: false,
26
- };
27
- export class NgtsBounds {
28
- constructor() {
29
- this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
30
- this.groupRef = viewChild.required('group');
31
- this.store = injectStore();
32
- this.camera = this.store.select('camera');
33
- this.invalidate = this.store.select('invalidate');
34
- this.size = this.store.select('size');
35
- this.controls = this.store.select('controls');
36
- this.clipOption = pick(this.options, 'clip');
37
- this.fitOption = pick(this.options, 'fit');
38
- this.observe = pick(this.options, 'observe');
39
- this.origin = {
40
- camPos: new Vector3(),
41
- camRot: new Quaternion(),
42
- camZoom: 1,
43
- };
44
- this.goal = {
45
- camPos: undefined,
46
- camRot: undefined,
47
- camZoom: undefined,
48
- camUp: undefined,
49
- target: undefined,
50
- };
51
- this.animationState = AnimationState.NONE;
52
- // represent animation state from 0 to 1
53
- this.t = 0;
54
- this.box = new Box3();
55
- extend({ Group });
56
- effect((onCleanup) => {
57
- const [controls, camera] = [this.controls(), untracked(this.camera)];
58
- if (!controls)
59
- return;
60
- const callback = () => {
61
- if (controls && this.goal.target && this.animationState !== AnimationState.NONE) {
62
- const front = new Vector3().setFromMatrixColumn(camera.matrix, 2);
63
- const d0 = this.origin.camPos.distanceTo(controls.target);
64
- const d1 = (this.goal.camPos || this.origin.camPos).distanceTo(this.goal.target);
65
- const d = (1 - this.t) * d0 + this.t * d1;
66
- controls.target.copy(camera.position).addScaledVector(front, -d);
67
- controls.update();
68
- }
69
- this.animationState = AnimationState.NONE;
70
- };
71
- controls.addEventListener('start', callback);
72
- onCleanup(() => controls.removeEventListener('start', callback));
73
- });
74
- let count = 0;
75
- effect(() => {
76
- const [clip, fit, observe] = [
77
- this.clipOption(),
78
- this.fitOption(),
79
- this.observe(),
80
- this.size(),
81
- this.camera(),
82
- this.controls(),
83
- ];
84
- if (observe || count++ === 0) {
85
- this.refresh();
86
- if (fit)
87
- this.reset().fit();
88
- if (clip)
89
- this.clip();
90
- }
91
- });
92
- injectBeforeRender(({ delta }) => {
93
- // This [additional animation step START] is needed to guarantee that delta used in animation isn't absurdly high (2-3 seconds) which is actually possible if rendering happens on demand...
94
- if (this.animationState === AnimationState.START) {
95
- this.animationState = AnimationState.ACTIVE;
96
- this.invalidate();
97
- }
98
- else if (this.animationState === AnimationState.ACTIVE) {
99
- const [{ maxDuration, interpolateFunc }, camera, controls, invalidate] = [
100
- this.options(),
101
- this.camera(),
102
- this.controls(),
103
- this.invalidate(),
104
- ];
105
- this.t += delta / maxDuration;
106
- if (this.t >= 1) {
107
- this.goal.camPos && camera.position.copy(this.goal.camPos);
108
- this.goal.camRot && camera.quaternion.copy(this.goal.camRot);
109
- this.goal.camUp && camera.up.copy(this.goal.camUp);
110
- this.goal.camZoom && is.orthographicCamera(camera) && (camera.zoom = this.goal.camZoom);
111
- camera.updateMatrixWorld();
112
- camera.updateProjectionMatrix();
113
- if (controls && this.goal.target) {
114
- controls.target.copy(this.goal.target);
115
- controls.update();
116
- }
117
- this.animationState = AnimationState.NONE;
118
- }
119
- else {
120
- const k = interpolateFunc(this.t);
121
- this.goal.camPos && camera.position.lerpVectors(this.origin.camPos, this.goal.camPos, k);
122
- this.goal.camRot && camera.quaternion.slerpQuaternions(this.origin.camRot, this.goal.camRot, k);
123
- this.goal.camUp && camera.up.set(0, 1, 0).applyQuaternion(camera.quaternion);
124
- this.goal.camZoom &&
125
- is.orthographicCamera(camera) &&
126
- (camera.zoom = (1 - k) * this.origin.camZoom + k * this.goal.camZoom);
127
- camera.updateMatrixWorld();
128
- camera.updateProjectionMatrix();
129
- }
130
- invalidate();
131
- }
132
- });
133
- }
134
- getSize() {
135
- const [camera, { margin }] = [untracked(this.camera), untracked(this.options)];
136
- const boxSize = this.box.getSize(new Vector3());
137
- const center = this.box.getCenter(new Vector3());
138
- const maxSize = Math.max(boxSize.x, boxSize.y, boxSize.z);
139
- const fitHeightDistance = is.orthographicCamera(camera)
140
- ? maxSize * 4
141
- : maxSize / (2 * Math.atan((Math.PI * camera.fov) / 360));
142
- const fitWidthDistance = is.orthographicCamera(camera) ? maxSize * 4 : fitHeightDistance / camera.aspect;
143
- const distance = margin * Math.max(fitHeightDistance, fitWidthDistance);
144
- return { box: this.box, size: boxSize, center, distance };
145
- }
146
- refresh(object) {
147
- const [group, camera] = [untracked(this.groupRef).nativeElement, untracked(this.camera)];
148
- if (isBox3(object))
149
- this.box.copy(object);
150
- else {
151
- const target = object || group;
152
- if (!target)
153
- return this;
154
- target.updateWorldMatrix(true, true);
155
- this.box.setFromObject(target);
156
- }
157
- if (this.box.isEmpty()) {
158
- const max = camera.position.length() || 10;
159
- this.box.setFromCenterAndSize(new Vector3(), new Vector3(max, max, max));
160
- }
161
- this.origin.camPos.copy(camera.position);
162
- this.origin.camRot.copy(camera.quaternion);
163
- is.orthographicCamera(camera) && (this.origin.camZoom = camera.zoom);
164
- this.goal.camPos = undefined;
165
- this.goal.camRot = undefined;
166
- this.goal.camZoom = undefined;
167
- this.goal.camUp = undefined;
168
- this.goal.target = undefined;
169
- return this;
170
- }
171
- reset() {
172
- const [camera] = [untracked(this.camera)];
173
- const { center, distance } = this.getSize();
174
- const direction = camera.position.clone().sub(center).normalize();
175
- this.goal.camPos = center.clone().addScaledVector(direction, distance);
176
- this.goal.target = center.clone();
177
- const mCamRot = new Matrix4().lookAt(this.goal.camPos, this.goal.target, camera.up);
178
- this.goal.camRot = new Quaternion().setFromRotationMatrix(mCamRot);
179
- this.animationState = AnimationState.START;
180
- this.t = 0;
181
- return this;
182
- }
183
- moveTo(position) {
184
- this.goal.camPos = Array.isArray(position) ? new Vector3(...position) : position.clone();
185
- this.animationState = AnimationState.START;
186
- this.t = 0;
187
- return this;
188
- }
189
- lookAt({ target, up }) {
190
- const [camera] = [untracked(this.camera)];
191
- this.goal.target = Array.isArray(target) ? new Vector3(...target) : target.clone();
192
- if (up) {
193
- this.goal.camUp = Array.isArray(up) ? new Vector3(...up) : up.clone();
194
- }
195
- else {
196
- this.goal.camUp = camera.up.clone();
197
- }
198
- const mCamRot = new Matrix4().lookAt(this.goal.camPos || camera.position, this.goal.target, this.goal.camUp);
199
- this.goal.camRot = new Quaternion().setFromRotationMatrix(mCamRot);
200
- this.animationState = AnimationState.START;
201
- this.t = 0;
202
- return this;
203
- }
204
- fit() {
205
- const [camera, controls, { margin }] = [untracked(this.camera), untracked(this.controls), untracked(this.options)];
206
- if (!is.orthographicCamera(camera)) {
207
- // For non-orthographic cameras, fit should behave exactly like reset
208
- return this.reset();
209
- }
210
- // For orthographic cameras, fit should only modify the zoom value
211
- let maxHeight = 0;
212
- let maxWidth = 0;
213
- const vertices = [
214
- new Vector3(this.box.min.x, this.box.min.y, this.box.min.z),
215
- new Vector3(this.box.min.x, this.box.max.y, this.box.min.z),
216
- new Vector3(this.box.min.x, this.box.min.y, this.box.max.z),
217
- new Vector3(this.box.min.x, this.box.max.y, this.box.max.z),
218
- new Vector3(this.box.max.x, this.box.max.y, this.box.max.z),
219
- new Vector3(this.box.max.x, this.box.max.y, this.box.min.z),
220
- new Vector3(this.box.max.x, this.box.min.y, this.box.max.z),
221
- new Vector3(this.box.max.x, this.box.min.y, this.box.min.z),
222
- ];
223
- // Transform the center and each corner to camera space
224
- const pos = this.goal.camPos || camera.position;
225
- const target = this.goal.target || controls.target;
226
- const up = this.goal.camUp || camera.up;
227
- const mCamWInv = target
228
- ? new Matrix4().lookAt(pos, target, up).setPosition(pos).invert()
229
- : camera.matrixWorldInverse;
230
- for (const v of vertices) {
231
- v.applyMatrix4(mCamWInv);
232
- maxHeight = Math.max(maxHeight, Math.abs(v.y));
233
- maxWidth = Math.max(maxWidth, Math.abs(v.x));
234
- }
235
- maxHeight *= 2;
236
- maxWidth *= 2;
237
- const zoomForHeight = (camera.top - camera.bottom) / maxHeight;
238
- const zoomForWidth = (camera.right - camera.left) / maxWidth;
239
- this.goal.camZoom = Math.min(zoomForHeight, zoomForWidth) / margin;
240
- this.animationState = AnimationState.START;
241
- this.t = 0;
242
- return this;
243
- }
244
- clip() {
245
- const [camera, controls, invalidate] = [
246
- untracked(this.camera),
247
- untracked(this.controls),
248
- untracked(this.invalidate),
249
- ];
250
- const { distance } = this.getSize();
251
- camera.near = distance / 100;
252
- camera.far = distance * 100;
253
- camera.updateProjectionMatrix();
254
- if (controls) {
255
- controls.maxDistance = distance * 10;
256
- controls.update();
257
- }
258
- invalidate();
259
- return this;
260
- }
261
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsBounds, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
262
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.11", type: NgtsBounds, isStandalone: true, selector: "ngts-bounds", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "groupRef", first: true, predicate: ["group"], descendants: true, isSignal: true }], ngImport: i0, template: `
263
- <ngt-group #group>
264
- <ng-content />
265
- </ngt-group>
266
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
267
- }
268
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsBounds, decorators: [{
269
- type: Component,
270
- args: [{
271
- selector: 'ngts-bounds',
272
- standalone: true,
273
- template: `
274
- <ngt-group #group>
275
- <ng-content />
276
- </ngt-group>
277
- `,
278
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
279
- changeDetection: ChangeDetectionStrategy.OnPush,
280
- }]
281
- }], ctorParameters: () => [] });
282
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm91bmRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL3N0YWdpbmcvc3JjL2xpYi9ib3VuZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLHVCQUF1QixFQUN2QixTQUFTLEVBQ1Qsc0JBQXNCLEVBQ3RCLE1BQU0sRUFFTixLQUFLLEVBRUwsU0FBUyxFQUNULFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQVksSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQVksVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQzs7QUFXNUUsSUFBSyxjQUlKO0FBSkQsV0FBSyxjQUFjO0lBQ2xCLG1EQUFRLENBQUE7SUFDUixxREFBUyxDQUFBO0lBQ1QsdURBQVUsQ0FBQTtBQUNYLENBQUMsRUFKSSxjQUFjLEtBQWQsY0FBYyxRQUlsQjtBQUVELFNBQVMsTUFBTSxDQUFDLEdBQVk7SUFDM0IsT0FBTyxDQUFDLENBQUMsR0FBRyxJQUFLLEdBQVksQ0FBQyxNQUFNLENBQUM7QUFDdEMsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQUMsQ0FBUztJQUN4QyxvREFBb0Q7SUFDcEQsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFXRCxNQUFNLGNBQWMsR0FBc0I7SUFDekMsV0FBVyxFQUFFLEdBQUc7SUFDaEIsTUFBTSxFQUFFLEdBQUc7SUFDWCxlQUFlLEVBQUUsc0JBQXNCO0lBQ3ZDLElBQUksRUFBRSxL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QkFBb0IsQ0FBQyxJQUFJLE9BQU8sRUFBRSxFQUFFLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVyRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1FBRTdCLE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVELEtBQUs7UUFDSixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDMUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFNUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbEUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUss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QyxDQUFDLENBQUM7UUFFbkgsSUFBSSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3BDLHFFQUFxRTtZQUNyRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNyQixDQUFDO1FBRUQsa0VBQWtFO1FBQ2xFLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNsQixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDakIsTUFBTSxRQUFRLEdBQUc7WUFDaEIsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDM0QsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDM0QsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDM0QsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDM0QsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMs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QztRQUVwQyxNQUFNLENBQUMsSUFBSSxHQUFHLFFBQVEsR0FBRyxHQUFHLENBQUM7UUFDN0IsTUFBTSxDQUFDLEdBQUcsR0FBRyxRQUFRLEdBQUcsR0FBRyxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBRWhDLElBQUksUUFBUSxFQUFFLENBQUM7WUFDZCxRQUFRLENBQUMsV0FBVyxHQUFHLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDckMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25CLENBQUM7UUFFRCxVQUFVLEVBQUUsQ0FBQztRQUViLE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQzsrR0FwUlcsVUFBVTttR0FBVixVQUFVLG9VQVJaOzs7O0VBSVQ7OzRGQUlXLFVBQVU7a0JBWHRCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7RUFJVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQy9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0ZWZmZWN0LFxuXHRFbGVtZW50UmVmLFxuXHRpbnB1dCxcblx0U2lnbmFsLFxuXHR1bnRyYWNrZWQsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBleHRlbmQsIGluamVjdEJlZm9yZVJlbmRlciwgaW5qZWN0U3RvcmUsIGlzLCBOZ3RHcm91cCwgcGljayB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgQm94MywgR3JvdXAsIE1hdHJpeDQsIE9iamVjdDNELCBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSAndGhyZWUnO1xuXG5pbnRlcmZhY2UgQ29udHJvbHNQcm90byB7XG5cdHVwZGF0ZSgpOiB2b2lkO1xuXG5cdHRhcmdldDogVmVjdG9yMztcblx0bWF4RGlzdGFuY2U6IG51bWJlcjtcblx0YWRkRXZlbnRMaXN0ZW5lcjogKGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiAoZXZlbnQ6IGFueSkgPT4gdm9pZCkgPT4gdm9pZDtcblx0cmVtb3ZlRXZlbnRMaXN0ZW5lcjogKGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiAoZXZlbnQ6IGFueSkgPT4gdm9pZCkgPT4gdm9pZDtcbn1cblxuZW51bSBBbmltYXRpb25TdGF0ZSB7XG5cdE5PTkUgPSAwLFxuXHRTVEFSVCA9IDEsXG5cdEFDVElWRSA9IDIsXG59XG5cbmZ1bmN0aW9uIGlzQm94MyhkZWY6IHVua25vd24pOiBkZWYgaXMgQm94MyB7XG5cdHJldHVybiAhIWRlZiAmJiAoZGVmIGFzIEJveDMpLmlzQm94Mztcbn1cblxuZnVuY3Rpb24gaW50ZXJwb2xhdGVGdW5jRGVmYXVsdCh0OiBudW1iZXIpIHtcblx0Ly8gSW1pdGF0ZXMgdGhlIHByZXZpb3VzbHkgdXNlZCBUSFJFRS5NYXRoVXRpbHMuZGFtcFxuXHRyZXR1cm4gMSAtIE1hdGguZXhwKC01ICogdCkgKyAwLjAwNyAqIHQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c0JvdW5kc09wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPE5ndEdyb3VwPiB7XG5cdG1heER1cmF0aW9uOiBudW1iZXI7XG5cdG1hcmdpbjogbnVtYmVyO1xuXHRvYnNlcnZlOiBib29sZWFuO1xuXHRmaXQ6IGJvb2xlYW47XG5cdGNsaXA6IGJvb2xlYW47XG5cdGludGVycG9sYXRlRnVuYzogKHQ6IG51bWJlcikgPT4gbnVtYmVyO1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c0JvdW5kc09wdGlvbnMgPSB7XG5cdG1heER1cmF0aW9uOiAxLjAsXG5cdG1hcmdpbjogMS4yLFxuXHRpbnRlcnBvbGF0ZUZ1bmM6IGludGVycG9sYXRlRnVuY0RlZmF1bHQsXG5cdGNsaXA6IGZhbHNlLFxuXHRmaXQ6IGZhbHNlLFxuXHRvYnNlcnZlOiBmYWxzZSxcbn07XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtYm91bmRzJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LWdyb3VwICNncm91cD5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3QtZ3JvdXA+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNCb3VuZHMge1xuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cblx0Z3JvdXBSZWYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxHcm91cD4+KCdncm91cCcpO1xuXG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXHRwcml2YXRlIGNhbWVyYSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdjYW1lcmEnKTtcblx0cHJpdmF0ZSBpbnZhbGlkYXRlID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2ludmFsaWRhdGUnKTtcblx0cHJpdmF0ZSBzaXplID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3NpemUnKTtcblx0cHJpdmF0ZSBjb250cm9scyA9IHRoaXMuc3RvcmUuc2VsZWN0KCdjb250cm9scycpIGFzIHVua25vd24gYXMgU2lnbmFsPENvbnRyb2xzUHJvdG8+O1xuXG5cdHByaXZhdGUgY2xpcE9wdGlvbiA9IHBpY2sodGhpcy5vcHRpb25zLCAnY2xpcCcpO1xuXHRwcml2YXRlIGZpdE9wdGlvbiA9IHBpY2sodGhpcy5vcHRpb25zLCAnZml0Jyk7XG5cdHByaXZhdGUgb2JzZXJ2ZSA9IHBpY2sodGhpcy5vcHRpb25zLCAnb2JzZXJ2ZScpO1xuXG5cdHByaXZhdGUgb3JpZ2luID0ge1xuXHRcdGNhbVBvczogbmV3IFZlY3RvcjMoKSxcblx0XHRjYW1Sb3Q6IG5ldyBRdWF0ZXJuaW9uKCksXG5cdFx0Y2FtWm9vbTogMSxcblx0fTtcblx0cHJpdmF0ZSBnb2FsID0ge1xuXHRcdGNhbVBvczogdW5kZWZpbmVkIGFzIFZlY3RvcjMgfCB1bmRlZmluZWQsXG5cdFx0Y2FtUm90OiB1bmRlZmluZWQgYXMgUXVhdGVybmlvbiB8IHVuZGVmaW5lZCxcblx0XHRjYW1ab29tOiB1bmRlZmluZWQgYXMgbnVtYmVyIHwgdW5kZWZpbmVkLFxuXHRcdGNhbVVwOiB1bmRlZmluZWQgYXMgVmVjdG9yMyB8IHVuZGVmaW5lZCxcblx0XHR0YXJnZXQ6IHVuZGVmaW5lZCBhcyBWZWN0b3IzIHwgdW5kZWZpbmVkLFxuXHR9O1xuXHRwcml2YXRlIGFuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGUuTk9ORTtcblxuXHQvLyByZXByZXNlbnQgYW5pbWF0aW9uIHN0YXRlIGZyb20gMCB0byAxXG5cdHByaXZhdGUgdCA9IDA7XG5cdHByaXZhdGUgYm94ID0gbmV3IEJveDMoKTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRleHRlbmQoeyBHcm91cCB9KTtcblxuXHRcdGVmZmVjdCgob25DbGVhbnVwKSA9PiB7XG5cdFx0XHRjb25zdCBbY29udHJvbHMsIGNhbWVyYV0gPSBbdGhpcy5jb250cm9scygpLCB1bnRyYWNrZWQodGhpcy5jYW1lcmEpXTtcblx0XHRcdGlmICghY29udHJvbHMpIHJldHVybjtcblxuXHRcdFx0Y29uc3QgY2FsbGJhY2sgPSAoKSA9PiB7XG5cdFx0XHRcdGlmIChjb250cm9scyAmJiB0aGlzLmdvYWwudGFyZ2V0ICYmIHRoaXMuYW5pbWF0aW9uU3RhdGUgIT09IEFuaW1hdGlvblN0YXRlLk5PTkUpIHtcblx0XHRcdFx0XHRjb25zdCBmcm9udCA9IG5ldyBWZWN0b3IzKCkuc2V0RnJvbU1hdHJpeENvbHVtbihjYW1lcmEubWF0cml4LCAyKTtcblx0XHRcdFx0XHRjb25zdCBkMCA9IHRoaXMub3JpZ2luLmNhbVBvcy5kaXN0YW5jZVRvKGNvbnRyb2xzLnRhcmdldCk7XG5cdFx0XHRcdFx0Y29uc3QgZDEgPSAodGhpcy5nb2FsLmNhbVBvcyB8fCB0aGlzLm9yaWdpbi5jYW1Qb3MpLmRpc3RhbmNlVG8odGhpcy5nb2FsLnRhcmdldCk7XG5cdFx0XHRcdFx0Y29uc3QgZCA9ICgxIC0gdGhpcy50KSAqIGQwICsgdGhpcy50ICogZDE7XG5cblx0XHRcdFx0XHRjb250cm9scy50YXJnZXQuY29weShjYW1lcmEucG9zaXRpb24pLmFkZFNjYWxlZFZlY3Rvcihmcm9udCwgLWQpO1xuXHRcdFx0XHRcdGNvbnRyb2xzLnVwZGF0ZSgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlLk5PTkU7XG5cdFx0XHR9O1xuXG5cdFx0XHRjb250cm9scy5hZGRFdmVudExpc3RlbmVyKCdzdGFydCcsIGNhbGxiYWNrKTtcblx0XHRcdG9uQ2xlYW51cCgoKSA9PiBjb250cm9scy5yZW1vdmVFdmVudExpc3RlbmVyKCdzdGFydCcsIGNhbGxiYWNrKSk7XG5cdFx0fSk7XG5cblx0XHRsZXQgY291bnQgPSAwO1xuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBbY2xpcCwgZml0LCBvYnNlcnZlXSA9IFtcblx0XHRcdFx0dGhpcy5jbGlwT3B0aW9uKCksXG5cdFx0XHRcdHRoaXMuZml0T3B0aW9uKCksXG5cdFx0XHRcdHRoaXMub2JzZXJ2ZSgpLFxuXHRcdFx0XHR0aGlzLnNpemUoKSxcblx0XHRcdFx0dGhpcy5jYW1lcmEoKSxcblx0XHRcdFx0dGhpcy5jb250cm9scygpLFxuXHRcdFx0XTtcblx0XHRcdGlmIChvYnNlcnZlIHx8IGNvdW50KysgPT09IDApIHtcblx0XHRcdFx0dGhpcy5yZWZyZXNoKCk7XG5cdFx0XHRcdGlmIChmaXQpIHRoaXMucmVzZXQoKS5maXQoKTtcblx0XHRcdFx0aWYgKGNsaXApIHRoaXMuY2xpcCgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKCh7IGRlbHRhIH0pID0+IHtcblx0XHRcdC8vIFRoaXMgW2FkZGl0aW9uYWwgYW5pbWF0aW9uIHN0ZXAgU1RBUlRdIGlzIG5lZWRlZCB0byBndWFyYW50ZWUgdGhhdCBkZWx0YSB1c2VkIGluIGFuaW1hdGlvbiBpc24ndCBhYnN1cmRseSBoaWdoICgyLTMgc2Vjb25kcykgd2hpY2ggaXMgYWN0dWFsbHkgcG9zc2libGUgaWYgcmVuZGVyaW5nIGhhcHBlbnMgb24gZGVtYW5kLi4uXG5cdFx0XHRpZiAodGhpcy5hbmltYXRpb25TdGF0ZSA9PT0gQW5pbWF0aW9uU3RhdGUuU1RBUlQpIHtcblx0XHRcdFx0dGhpcy5hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlLkFDVElWRTtcblx0XHRcdFx0dGhpcy5pbnZhbGlkYXRlKCk7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuYW5pbWF0aW9uU3RhdGUgPT09IEFuaW1hdGlvblN0YXRlLkFDVElWRSkge1xuXHRcdFx0XHRjb25zdCBbeyBtYXhEdXJhdGlvbiwgaW50ZXJwb2xhdGVGdW5jIH0sIGNhbWVyYSwgY29udHJvbHMsIGludmFsaWRhdGVdID0gW1xuXHRcdFx0XHRcdHRoaXMub3B0aW9ucygpLFxuXHRcdFx0XHRcdHRoaXMuY2FtZXJhKCksXG5cdFx0XHRcdFx0dGhpcy5jb250cm9scygpLFxuXHRcdFx0XHRcdHRoaXMuaW52YWxpZGF0ZSgpLFxuXHRcdFx0XHRdO1xuXHRcdFx0XHR0aGlzLnQgKz0gZGVsdGEgLyBtYXhEdXJhdGlvbjtcblxuXHRcdFx0XHRpZiAodGhpcy50ID49IDEpIHtcblx0XHRcdFx0XHR0aGlzLmdvYWwuY2FtUG9zICYmIGNhbWVyYS5wb3NpdGlvbi5jb3B5KHRoaXMuZ29hbC5jYW1Qb3MpO1xuXHRcdFx0XHRcdHRoaXMuZ29hbC5jYW1Sb3QgJiYgY2FtZXJhLnF1YXRlcm5pb24uY29weSh0aGlzLmdvYWwuY2FtUm90KTtcblx0XHRcdFx0XHR0aGlzLmdvYWwuY2FtVXAgJiYgY2FtZXJhLnVwLmNvcHkodGhpcy5nb2FsLmNhbVVwKTtcblx0XHRcdFx0XHR0aGlzLmdvYWwuY2FtWm9vbSAmJiBpcy5vcnRob2dyYXBoaWNDYW1lcmEoY2FtZXJhKSAmJiAoY2FtZXJhLnpvb20gPSB0aGlzLmdvYWwuY2FtWm9vbSk7XG5cblx0XHRcdFx0XHRjYW1lcmEudXBkYXRlTWF0cml4V29ybGQoKTtcblx0XHRcdFx0XHRjYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuXG5cdFx0XHRcdFx0aWYgKGNvbnRyb2xzICYmIHRoaXMuZ29hbC50YXJnZXQpIHtcblx0XHRcdFx0XHRcdGNvbnRyb2xzLnRhcmdldC5jb3B5KHRoaXMuZ29hbC50YXJnZXQpO1xuXHRcdFx0XHRcdFx0Y29udHJvbHMudXBkYXRlKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGhpcy5hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlLk5PTkU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgayA9IGludGVycG9sYXRlRnVuYyh0aGlzLnQpO1xuXG5cdFx0XHRcdFx0dGhpcy5nb2FsLmNhbVBvcyAmJiBjYW1lcmEucG9zaXRpb24ubGVycFZlY3RvcnModGhpcy5vcmlnaW4uY2FtUG9zLCB0aGlzLmdvYWwuY2FtUG9zLCBrKTtcblx0XHRcdFx0XHR0aGlzLmdvYWwuY2FtUm90ICYmIGNhbWVyYS5xdWF0ZXJuaW9uLnNsZXJwUXVhdGVybmlvbnModGhpcy5vcmlnaW4uY2FtUm90LCB0aGlzLmdvYWwuY2FtUm90LCBrKTtcblx0XHRcdFx0XHR0aGlzLmdvYWwuY2FtVXAgJiYgY2FtZXJhLnVwLnNldCgwLCAxLCAwKS5hcHBseVF1YXRlcm5pb24oY2FtZXJhLnF1YXRlcm5pb24pO1xuXHRcdFx0XHRcdHRoaXMuZ29hbC5jYW1ab29tICYmXG5cdFx0XHRcdFx0XHRpcy5vcnRob2dyYXBoaWNDYW1lcmEoY2FtZXJhKSAmJlxuXHRcdFx0XHRcdFx0KGNhbWVyYS56b29tID0gKDEgLSBrKSAqIHRoaXMub3JpZ2luLmNhbVpvb20gKyBrICogdGhpcy5nb2FsLmNhbVpvb20pO1xuXG5cdFx0XHRcdFx0Y2FtZXJhLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XG5cdFx0XHRcdFx0Y2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGludmFsaWRhdGUoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGdldFNpemUoKSB7XG5cdFx0Y29uc3QgW2NhbWVyYSwgeyBtYXJnaW4gfV0gPSBbdW50cmFja2VkKHRoaXMuY2FtZXJhKSwgdW50cmFja2VkKHRoaXMub3B0aW9ucyldO1xuXG5cdFx0Y29uc3QgYm94U2l6ZSA9IHRoaXMuYm94LmdldFNpemUobmV3IFZlY3RvcjMoKSk7XG5cdFx0Y29uc3QgY2VudGVyID0gdGhpcy5ib3guZ2V0Q2VudGVyKG5ldyBWZWN0b3IzKCkpO1xuXHRcdGNvbnN0IG1heFNpemUgPSBNYXRoLm1heChib3hTaXplLngsIGJveFNpemUueSwgYm94U2l6ZS56KTtcblx0XHRjb25zdCBmaXRIZWlnaHREaXN0YW5jZSA9IGlzLm9ydGhvZ3JhcGhpY0NhbWVyYShjYW1lcmEpXG5cdFx0XHQ/IG1heFNpemUgKiA0XG5cdFx0XHQ6IG1heFNpemUgLyAoMiAqIE1hdGguYXRhbigoTWF0aC5QSSAqIGNhbWVyYS5mb3YpIC8gMzYwKSk7XG5cdFx0Y29uc3QgZml0V2lkdGhEaXN0YW5jZSA9IGlzLm9ydGhvZ3JhcGhpY0NhbWVyYShjYW1lcmEpID8gbWF4U2l6ZSAqIDQgOiBmaXRIZWlnaHREaXN0YW5jZSAvIGNhbWVyYS5hc3BlY3Q7XG5cdFx0Y29uc3QgZGlzdGFuY2UgPSBtYXJnaW4gKiBNYXRoLm1heChmaXRIZWlnaHREaXN0YW5jZSwgZml0V2lkdGhEaXN0YW5jZSk7XG5cblx0XHRyZXR1cm4geyBib3g6IHRoaXMuYm94LCBzaXplOiBib3hTaXplLCBjZW50ZXIsIGRpc3RhbmNlIH07XG5cdH1cblxuXHRyZWZyZXNoKG9iamVjdD86IE9iamVjdDNEIHwgQm94Mykge1xuXHRcdGNvbnN0IFtncm91cCwgY2FtZXJhXSA9IFt1bnRyYWNrZWQodGhpcy5ncm91cFJlZikubmF0aXZlRWxlbWVudCwgdW50cmFja2VkKHRoaXMuY2FtZXJhKV07XG5cblx0XHRpZiAoaXNCb3gzKG9iamVjdCkpIHRoaXMuYm94LmNvcHkob2JqZWN0KTtcblx0XHRlbHNlIHtcblx0XHRcdGNvbnN0IHRhcmdldCA9IG9iamVjdCB8fCBncm91cDtcblx0XHRcdGlmICghdGFyZ2V0KSByZXR1cm4gdGhpcztcblx0XHRcdHRhcmdldC51cGRhdGVXb3JsZE1hdHJpeCh0cnVlLCB0cnVlKTtcblx0XHRcdHRoaXMuYm94LnNldEZyb21PYmplY3QodGFyZ2V0KTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuYm94LmlzRW1wdHkoKSkge1xuXHRcdFx0Y29uc3QgbWF4ID0gY2FtZXJhLnBvc2l0aW9uLmxlbmd0aCgpIHx8IDEwO1xuXHRcdFx0dGhpcy5ib3guc2V0RnJvbUNlbnRlckFuZFNpemUobmV3IFZlY3RvcjMoKSwgbmV3IFZlY3RvcjMobWF4LCBtYXgsIG1heCkpO1xuXHRcdH1cblxuXHRcdHRoaXMub3JpZ2luLmNhbVBvcy5jb3B5KGNhbWVyYS5wb3NpdGlvbik7XG5cdFx0dGhpcy5vcmlnaW4uY2FtUm90LmNvcHkoY2FtZXJhLnF1YXRlcm5pb24pO1xuXHRcdGlzLm9ydGhvZ3JhcGhpY0NhbWVyYShjYW1lcmEpICYmICh0aGlzLm9yaWdpbi5jYW1ab29tID0gY2FtZXJhLnpvb20pO1xuXG5cdFx0dGhpcy5nb2FsLmNhbVBvcyA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLmdvYWwuY2FtUm90ID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMuZ29hbC5jYW1ab29tID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMuZ29hbC5jYW1VcCA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLmdvYWwudGFyZ2V0ID0gdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRyZXNldCgpIHtcblx0XHRjb25zdCBbY2FtZXJhXSA9IFt1bnRyYWNrZWQodGhpcy5jYW1lcmEpXTtcblx0XHRjb25zdCB7IGNlbnRlciwgZGlzdGFuY2UgfSA9IHRoaXMuZ2V0U2l6ZSgpO1xuXG5cdFx0Y29uc3QgZGlyZWN0aW9uID0gY2FtZXJhLnBvc2l0aW9uLmNsb25lKCkuc3ViKGNlbnRlcikubm9ybWFsaXplKCk7XG5cdFx0dGhpcy5nb2FsLmNhbVBvcyA9IGNlbnRlci5jbG9uZSgpLmFkZFNjYWxlZFZlY3RvcihkaXJlY3Rpb24sIGRpc3RhbmNlKTtcblx0XHR0aGlzLmdvYWwudGFyZ2V0ID0gY2VudGVyLmNsb25lKCk7XG5cdFx0Y29uc3QgbUNhbVJvdCA9IG5ldyBNYXRyaXg0KCkubG9va0F0KHRoaXMuZ29hbC5jYW1Qb3MsIHRoaXMuZ29hbC50YXJnZXQsIGNhbWVyYS51cCk7XG5cdFx0dGhpcy5nb2FsLmNhbVJvdCA9IG5ldyBRdWF0ZXJuaW9uKCkuc2V0RnJvbVJvdGF0aW9uTWF0cml4KG1DYW1Sb3QpO1xuXG5cdFx0dGhpcy5hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlLlNUQVJUO1xuXHRcdHRoaXMudCA9IDA7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG1vdmVUbyhwb3NpdGlvbjogVmVjdG9yMyB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSkge1xuXHRcdHRoaXMuZ29hbC5jYW1Qb3MgPSBBcnJheS5pc0FycmF5KHBvc2l0aW9uKSA/IG5ldyBWZWN0b3IzKC4uLnBvc2l0aW9uKSA6IHBvc2l0aW9uLmNsb25lKCk7XG5cblx0XHR0aGlzLmFuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGUuU1RBUlQ7XG5cdFx0dGhpcy50ID0gMDtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0bG9va0F0KHsgdGFyZ2V0LCB1cCB9OiB7IHRhcmdldDogVmVjdG9yMyB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTsgdXA/OiBWZWN0b3IzIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdIH0pIHtcblx0XHRjb25zdCBbY2FtZXJhXSA9IFt1bnRyYWNrZWQodGhpcy5jYW1lcmEpXTtcblxuXHRcdHRoaXMuZ29hbC50YXJnZXQgPSBBcnJheS5pc0FycmF5KHRhcmdldCkgPyBuZXcgVmVjdG9yMyguLi50YXJnZXQpIDogdGFyZ2V0LmNsb25lKCk7XG5cdFx0aWYgKHVwKSB7XG5cdFx0XHR0aGlzLmdvYWwuY2FtVXAgPSBBcnJheS5pc0FycmF5KHVwKSA/IG5ldyBWZWN0b3IzKC4uLnVwKSA6IHVwLmNsb25lKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZ29hbC5jYW1VcCA9IGNhbWVyYS51cC5jbG9uZSgpO1xuXHRcdH1cblx0XHRjb25zdCBtQ2FtUm90ID0gbmV3IE1hdHJpeDQoKS5sb29rQXQodGhpcy5nb2FsLmNhbVBvcyB8fCBjYW1lcmEucG9zaXRpb24sIHRoaXMuZ29hbC50YXJnZXQsIHRoaXMuZ29hbC5jYW1VcCk7XG5cdFx0dGhpcy5nb2FsLmNhbVJvdCA9IG5ldyBRdWF0ZXJuaW9uKCkuc2V0RnJvbVJvdGF0aW9uTWF0cml4KG1DYW1Sb3QpO1xuXG5cdFx0dGhpcy5hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlLlNUQVJUO1xuXHRcdHRoaXMudCA9IDA7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGZpdCgpIHtcblx0XHRjb25zdCBbY2FtZXJhLCBjb250cm9scywgeyBtYXJnaW4gfV0gPSBbdW50cmFja2VkKHRoaXMuY2FtZXJhKSwgdW50cmFja2VkKHRoaXMuY29udHJvbHMpLCB1bnRyYWNrZWQodGhpcy5vcHRpb25zKV07XG5cblx0XHRpZiAoIWlzLm9ydGhvZ3JhcGhpY0NhbWVyYShjYW1lcmEpKSB7XG5cdFx0XHQvLyBGb3Igbm9uLW9ydGhvZ3JhcGhpYyBjYW1lcmFzLCBmaXQgc2hvdWxkIGJlaGF2ZSBleGFjdGx5IGxpa2UgcmVzZXRcblx0XHRcdHJldHVybiB0aGlzLnJlc2V0KCk7XG5cdFx0fVxuXG5cdFx0Ly8gRm9yIG9ydGhvZ3JhcGhpYyBjYW1lcmFzLCBmaXQgc2hvdWxkIG9ubHkgbW9kaWZ5IHRoZSB6b29tIHZhbHVlXG5cdFx0bGV0IG1heEhlaWdodCA9IDA7XG5cdFx0bGV0IG1heFdpZHRoID0gMDtcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtcblx0XHRcdG5ldyBWZWN0b3IzKHRoaXMuYm94Lm1pbi54LCB0aGlzLmJveC5taW4ueSwgdGhpcy5ib3gubWluLnopLFxuXHRcdFx0bmV3IFZlY3RvcjModGhpcy5ib3gubWluLngsIHRoaXMuYm94Lm1heC55LCB0aGlzLmJveC5taW4ueiksXG5cdFx0XHRuZXcgVmVjdG9yMyh0aGlzLmJveC5taW4ueCwgdGhpcy5ib3gubWluLnksIHRoaXMuYm94Lm1heC56KSxcblx0XHRcdG5ldyBWZWN0b3IzKHRoaXMuYm94Lm1pbi54LCB0aGlzLmJveC5tYXgueSwgdGhpcy5ib3gubWF4LnopLFxuXHRcdFx0bmV3IFZlY3RvcjModGhpcy5ib3gubWF4LngsIHRoaXMuYm94Lm1heC55LCB0aGlzLmJveC5tYXgueiksXG5cdFx0XHRuZXcgVmVjdG9yMyh0aGlzLmJveC5tYXgueCwgdGhpcy5ib3gubWF4LnksIHRoaXMuYm94Lm1pbi56KSxcblx0XHRcdG5ldyBWZWN0b3IzKHRoaXMuYm94Lm1heC54LCB0aGlzLmJveC5taW4ueSwgdGhpcy5ib3gubWF4LnopLFxuXHRcdFx0bmV3IFZlY3RvcjModGhpcy5ib3gubWF4LngsIHRoaXMuYm94Lm1pbi55LCB0aGlzLmJveC5taW4ueiksXG5cdFx0XTtcblxuXHRcdC8vIFRyYW5zZm9ybSB0aGUgY2VudGVyIGFuZCBlYWNoIGNvcm5lciB0byBjYW1lcmEgc3BhY2Vcblx0XHRjb25zdCBwb3MgPSB0aGlzLmdvYWwuY2FtUG9zIHx8IGNhbWVyYS5wb3NpdGlvbjtcblx0XHRjb25zdCB0YXJnZXQgPSB0aGlzLmdvYWwudGFyZ2V0IHx8IGNvbnRyb2xzLnRhcmdldDtcblx0XHRjb25zdCB1cCA9IHRoaXMuZ29hbC5jYW1VcCB8fCBjYW1lcmEudXA7XG5cdFx0Y29uc3QgbUNhbVdJbnYgPSB0YXJnZXRcblx0XHRcdD8gbmV3IE1hdHJpeDQoKS5sb29rQXQocG9zLCB0YXJnZXQsIHVwKS5zZXRQb3NpdGlvbihwb3MpLmludmVydCgpXG5cdFx0XHQ6IGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2U7XG5cdFx0Zm9yIChjb25zdCB2IG9mIHZlcnRpY2VzKSB7XG5cdFx0XHR2LmFwcGx5TWF0cml4NChtQ2FtV0ludik7XG5cdFx0XHRtYXhIZWlnaHQgPSBNYXRoLm1heChtYXhIZWlnaHQsIE1hdGguYWJzKHYueSkpO1xuXHRcdFx0bWF4V2lkdGggPSBNYXRoLm1heChtYXhXaWR0aCwgTWF0aC5hYnModi54KSk7XG5cdFx0fVxuXHRcdG1heEhlaWdodCAqPSAyO1xuXHRcdG1heFdpZHRoICo9IDI7XG5cdFx0Y29uc3Qgem9vbUZvckhlaWdodCA9IChjYW1lcmEudG9wIC0gY2FtZXJhLmJvdHRvbSkgLyBtYXhIZWlnaHQ7XG5cdFx0Y29uc3Qgem9vbUZvcldpZHRoID0gKGNhbWVyYS5yaWdodCAtIGNhbWVyYS5sZWZ0KSAvIG1heFdpZHRoO1xuXG5cdFx0dGhpcy5nb2FsLmNhbVpvb20gPSBNYXRoLm1pbih6b29tRm9ySGVpZ2h0LCB6b29tRm9yV2lkdGgpIC8gbWFyZ2luO1xuXG5cdFx0dGhpcy5hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlLlNUQVJUO1xuXHRcdHRoaXMudCA9IDA7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNsaXAoKSB7XG5cdFx0Y29uc3QgW2NhbWVyYSwgY29udHJvbHMsIGludmFsaWRhdGVdID0gW1xuXHRcdFx0dW50cmFja2VkKHRoaXMuY2FtZXJhKSxcblx0XHRcdHVudHJhY2tlZCh0aGlzLmNvbnRyb2xzKSxcblx0XHRcdHVudHJhY2tlZCh0aGlzLmludmFsaWRhdGUpLFxuXHRcdF07XG5cdFx0Y29uc3QgeyBkaXN0YW5jZSB9ID0gdGhpcy5nZXRTaXplKCk7XG5cblx0XHRjYW1lcmEubmVhciA9IGRpc3RhbmNlIC8gMTAwO1xuXHRcdGNhbWVyYS5mYXIgPSBkaXN0YW5jZSAqIDEwMDtcblx0XHRjYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuXG5cdFx0aWYgKGNvbnRyb2xzKSB7XG5cdFx0XHRjb250cm9scy5tYXhEaXN0YW5jZSA9IGRpc3RhbmNlICogMTA7XG5cdFx0XHRjb250cm9scy51cGRhdGUoKTtcblx0XHR9XG5cblx0XHRpbnZhbGlkYXRlKCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuIl19
@@ -1,65 +0,0 @@
1
- import { Directive, effect, input, untracked } from '@angular/core';
2
- import { injectBeforeRender, injectStore } from 'angular-three';
3
- import { mergeInputs } from 'ngxtension/inject-inputs';
4
- import { SimplexNoise } from 'three-stdlib';
5
- import * as i0 from "@angular/core";
6
- const defaultOptions = {
7
- intensity: 1,
8
- decayRate: 0.65,
9
- maxYaw: 0.1,
10
- maxPitch: 0.1,
11
- maxRoll: 0.1,
12
- yawFrequency: 0.1,
13
- pitchFrequency: 0.1,
14
- rollFrequency: 0.1,
15
- };
16
- export class NgtsCameraShake {
17
- get intensity() {
18
- return this.intensityOption;
19
- }
20
- set intensity(val) {
21
- this.intensityOption = Math.min(1, Math.max(0, val));
22
- }
23
- constructor() {
24
- this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
25
- this.store = injectStore();
26
- this.camera = this.store.select('camera');
27
- this.defaultControls = this.store.select('controls');
28
- this.initialRotation = untracked(this.camera).rotation.clone();
29
- this.intensityOption = untracked(this.options).intensity;
30
- this.yawNoise = new SimplexNoise();
31
- this.pitchNoise = new SimplexNoise();
32
- this.rollNoise = new SimplexNoise();
33
- effect((onCleanup) => {
34
- const defaultControls = this.defaultControls();
35
- if (!defaultControls)
36
- return;
37
- const camera = this.camera();
38
- const callback = () => void (this.initialRotation = camera.rotation.clone());
39
- defaultControls.addEventListener('change', callback);
40
- callback();
41
- onCleanup(() => void defaultControls.removeEventListener('change', callback));
42
- });
43
- injectBeforeRender(({ delta, clock }) => {
44
- const [{ maxYaw, yawFrequency, maxPitch, pitchFrequency, maxRoll, rollFrequency, decay, decayRate }, camera] = [
45
- this.options(),
46
- this.camera(),
47
- ];
48
- const shake = Math.pow(this.intensity, 2);
49
- const yaw = maxYaw * shake * this.yawNoise.noise(clock.elapsedTime * yawFrequency, 1);
50
- const pitch = maxPitch * shake * this.pitchNoise.noise(clock.elapsedTime * pitchFrequency, 1);
51
- const roll = maxRoll * shake * this.rollNoise.noise(clock.elapsedTime * rollFrequency, 1);
52
- camera.rotation.set(this.initialRotation.x + pitch, this.initialRotation.y + yaw, this.initialRotation.z + roll);
53
- if (decay && this.intensity > 0) {
54
- this.intensity -= decayRate * delta;
55
- }
56
- });
57
- }
58
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsCameraShake, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
59
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.11", type: NgtsCameraShake, isStandalone: true, selector: "ngts-camera-shake", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
60
- }
61
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsCameraShake, decorators: [{
62
- type: Directive,
63
- args: [{ selector: 'ngts-camera-shake', standalone: true }]
64
- }], ctorParameters: () => [] });
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FtZXJhLXNoYWtlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL3N0YWdpbmcvc3JjL2xpYi9jYW1lcmEtc2hha2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDOztBQXFCNUMsTUFBTSxjQUFjLEdBQTJCO0lBQzlDLFNBQVMsRUFBRSxDQUFDO0lBQ1osU0FBUyxFQUFFLElBQUk7SUFDZixNQUFNLEVBQUUsR0FBRztJQUNYLFFBQVEsRUFBRSxHQUFHO0lBQ2IsT0FBTyxFQUFFLEdBQUc7SUFDWixZQUFZLEVBQUUsR0FBRztJQUNqQixjQUFjLEVBQUUsR0FBRztJQUNuQixhQUFhLEVBQUUsR0FBRztDQUNsQixDQUFDO0FBR0YsTUFBTSxPQUFPLGVBQWU7SUFVM0IsSUFBSSxTQUFTO1FBQ1osT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLFNBQVMsQ0FBQyxHQUFXO1FBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBTUQ7UUFyQkEsWUFBTyxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVwRSxVQUFLLEdBQUcsV0FBVyxFQUFFLENBQUM7UUFD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QWYsZUFBZTs7NEZBQWYsZUFBZTtrQkFEM0IsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBTaWduYWwsIGVmZmVjdCwgaW5wdXQsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0QmVmb3JlUmVuZGVyLCBpbmplY3RTdG9yZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IFNpbXBsZXhOb2lzZSB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5cbmludGVyZmFjZSBDb250cm9sc1Byb3RvIHtcblx0dXBkYXRlKCk6IHZvaWQ7XG5cdHRhcmdldDogVmVjdG9yMztcblx0YWRkRXZlbnRMaXN0ZW5lcjogKGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiAoZXZlbnQ6IGFueSkgPT4gdm9pZCkgPT4gdm9pZDtcblx0cmVtb3ZlRXZlbnRMaXN0ZW5lcjogKGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiAoZXZlbnQ6IGFueSkgPT4gdm9pZCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzQ2FtZXJhU2hha2VPcHRpb25zIHtcblx0aW50ZW5zaXR5OiBudW1iZXI7XG5cdGRlY2F5PzogYm9vbGVhbjtcblx0ZGVjYXlSYXRlOiBudW1iZXI7XG5cdG1heFlhdzogbnVtYmVyO1xuXHRtYXhQaXRjaDogbnVtYmVyO1xuXHRtYXhSb2xsOiBudW1iZXI7XG5cdHlhd0ZyZXF1ZW5jeTogbnVtYmVyO1xuXHRwaXRjaEZyZXF1ZW5jeTogbnVtYmVyO1xuXHRyb2xsRnJlcXVlbmN5OiBudW1iZXI7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOZ3RzQ2FtZXJhU2hha2VPcHRpb25zID0ge1xuXHRpbnRlbnNpdHk6IDEsXG5cdGRlY2F5UmF0ZTogMC42NSxcblx0bWF4WWF3OiAwLjEsXG5cdG1heFBpdGNoOiAwLjEsXG5cdG1heFJvbGw6IDAuMSxcblx0eWF3RnJlcXVlbmN5OiAwLjEsXG5cdHBpdGNoRnJlcXVlbmN5OiAwLjEsXG5cdHJvbGxGcmVxdWVuY3k6IDAuMSxcbn07XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ25ndHMtY2FtZXJhLXNoYWtlJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5ndHNDYW1lcmFTaGFrZSB7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblxuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblx0cHJpdmF0ZSBjYW1lcmEgPSB0aGlzLnN0b3JlLnNlbGVjdCgnY2FtZXJhJyk7XG5cdHByaXZhdGUgZGVmYXVsdENvbnRyb2xzID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2NvbnRyb2xzJykgYXMgdW5rbm93biBhcyBTaWduYWw8Q29udHJvbHNQcm90bz47XG5cblx0cHJpdmF0ZSBpbml0aWFsUm90YXRpb24gPSB1bnRyYWNrZWQodGhpcy5jYW1lcmEpLnJvdGF0aW9uLmNsb25lKCk7XG5cdHByaXZhdGUgaW50ZW5zaXR5T3B0aW9uID0gdW50cmFja2VkKHRoaXMub3B0aW9ucykuaW50ZW5zaXR5O1xuXG5cdGdldCBpbnRlbnNpdHkoKSB7XG5cdFx0cmV0dXJuIHRoaXMuaW50ZW5zaXR5T3B0aW9uO1xuXHR9XG5cblx0c2V0IGludGVuc2l0eSh2YWw6IG51bWJlcikge1xuXHRcdHRoaXMuaW50ZW5zaXR5T3B0aW9uID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgdmFsKSk7XG5cdH1cblxuXHRwcml2YXRlIHlhd05vaXNlID0gbmV3IFNpbXBsZXhOb2lzZSgpO1xuXHRwcml2YXRlIHBpdGNoTm9pc2UgPSBuZXcgU2ltcGxleE5vaXNlKCk7XG5cdHByaXZhdGUgcm9sbE5vaXNlID0gbmV3IFNpbXBsZXhOb2lzZSgpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGVmZmVjdCgob25DbGVhbnVwKSA9PiB7XG5cdFx0XHRjb25zdCBkZWZhdWx0Q29udHJvbHMgPSB0aGlzLmRlZmF1bHRDb250cm9scygpO1xuXHRcdFx0aWYgKCFkZWZhdWx0Q29udHJvbHMpIHJldHVybjtcblx0XHRcdGNvbnN0IGNhbWVyYSA9IHRoaXMuY2FtZXJhKCk7XG5cblx0XHRcdGNvbnN0IGNhbGxiYWNrID0gKCkgPT4gdm9pZCAodGhpcy5pbml0aWFsUm90YXRpb24gPSBjYW1lcmEucm90YXRpb24uY2xvbmUoKSk7XG5cdFx0XHRkZWZhdWx0Q29udHJvbHMuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgY2FsbGJhY2spO1xuXHRcdFx0Y2FsbGJhY2soKTtcblxuXHRcdFx0b25DbGVhbnVwKCgpID0+IHZvaWQgZGVmYXVsdENvbnRyb2xzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGNhbGxiYWNrKSk7XG5cdFx0fSk7XG5cblx0XHRpbmplY3RCZWZvcmVSZW5kZXIoKHsgZGVsdGEsIGNsb2NrIH0pID0+IHtcblx0XHRcdGNvbnN0IFt7IG1heFlhdywgeWF3RnJlcXVlbmN5LCBtYXhQaXRjaCwgcGl0Y2hGcmVxdWVuY3ksIG1heFJvbGwsIHJvbGxGcmVxdWVuY3ksIGRlY2F5LCBkZWNheVJhdGUgfSwgY2FtZXJhXSA9IFtcblx0XHRcdFx0dGhpcy5vcHRpb25zKCksXG5cdFx0XHRcdHRoaXMuY2FtZXJhKCksXG5cdFx0XHRdO1xuXHRcdFx0Y29uc3Qgc2hha2UgPSBNYXRoLnBvdyh0aGlzLmludGVuc2l0eSwgMik7XG5cdFx0XHRjb25zdCB5YXcgPSBtYXhZYXcgKiBzaGFrZSAqIHRoaXMueWF3Tm9pc2Uubm9pc2UoY2xvY2suZWxhcHNlZFRpbWUgKiB5YXdGcmVxdWVuY3ksIDEpO1xuXHRcdFx0Y29uc3QgcGl0Y2ggPSBtYXhQaXRjaCAqIHNoYWtlICogdGhpcy5waXRjaE5vaXNlLm5vaXNlKGNsb2NrLmVsYXBzZWRUaW1lICogcGl0Y2hGcmVxdWVuY3ksIDEpO1xuXHRcdFx0Y29uc3Qgcm9sbCA9IG1heFJvbGwgKiBzaGFrZSAqIHRoaXMucm9sbE5vaXNlLm5vaXNlKGNsb2NrLmVsYXBzZWRUaW1lICogcm9sbEZyZXF1ZW5jeSwgMSk7XG5cblx0XHRcdGNhbWVyYS5yb3RhdGlvbi5zZXQodGhpcy5pbml0aWFsUm90YXRpb24ueCArIHBpdGNoLCB0aGlzLmluaXRpYWxSb3RhdGlvbi55ICsgeWF3LCB0aGlzLmluaXRpYWxSb3RhdGlvbi56ICsgcm9sbCk7XG5cblx0XHRcdGlmIChkZWNheSAmJiB0aGlzLmludGVuc2l0eSA+IDApIHtcblx0XHRcdFx0dGhpcy5pbnRlbnNpdHkgLT0gZGVjYXlSYXRlICogZGVsdGE7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
@@ -1,184 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, effect, input, viewChild, } from '@angular/core';
2
- import { extend, getLocalState, injectBeforeRender, omit, pick, resolveRef } from 'angular-three';
3
- import { injectHelper, NgtsEdges } from 'angular-three-soba/abstractions';
4
- import { injectFBO } from 'angular-three-soba/misc';
5
- import { CausticsProjectionMaterial, createCausticsUpdate } from 'angular-three-soba/vanilla-exports';
6
- import { mergeInputs } from 'ngxtension/inject-inputs';
7
- import { CameraHelper, CustomBlending, FloatType, Group, LinearFilter, LinearMipmapLinearFilter, LineBasicMaterial, Mesh, OneFactor, OrthographicCamera, PlaneGeometry, Scene, SrcAlphaFactor, UnsignedByteType, Vector3, } from 'three';
8
- import * as i0 from "@angular/core";
9
- const NORMAL_OPTIONS = {
10
- depth: true,
11
- minFilter: LinearFilter,
12
- magFilter: LinearFilter,
13
- type: UnsignedByteType,
14
- };
15
- const CAUSTIC_OPTIONS = {
16
- minFilter: LinearMipmapLinearFilter,
17
- magFilter: LinearFilter,
18
- type: FloatType,
19
- generateMipmaps: true,
20
- };
21
- const defaultOptions = {
22
- frames: 1,
23
- debug: false,
24
- causticsOnly: false,
25
- backside: false,
26
- ior: 1.1,
27
- backsideIOR: 1.1,
28
- worldRadius: 0.3125,
29
- intensity: 0.05,
30
- color: 'white',
31
- resolution: 2024,
32
- lightSource: [5, 5, 5],
33
- };
34
- export class NgtsCaustics {
35
- constructor() {
36
- this.Math = Math;
37
- this.CustomBlending = CustomBlending;
38
- this.OneFactor = OneFactor;
39
- this.SrcAlphaFactor = SrcAlphaFactor;
40
- this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
41
- this.parameters = omit(this.options, [
42
- 'frames',
43
- 'debug',
44
- 'causticsOnly',
45
- 'backside',
46
- 'ior',
47
- 'backsideIOR',
48
- 'worldRadius',
49
- 'intensity',
50
- 'color',
51
- 'resolution',
52
- 'lightSource',
53
- ]);
54
- this.debug = pick(this.options, 'debug');
55
- this.color = pick(this.options, 'color');
56
- this.resolution = pick(this.options, 'resolution');
57
- this.groupRef = viewChild.required('group');
58
- this.sceneRef = viewChild.required('scene');
59
- this.cameraRef = viewChild.required('camera');
60
- this.planeRef = viewChild.required('plane');
61
- this.normalTargetParams = computed(() => ({
62
- width: this.resolution(),
63
- height: this.resolution(),
64
- settings: NORMAL_OPTIONS,
65
- }));
66
- // Buffers for front and back faces
67
- this.normalTarget = injectFBO(this.normalTargetParams);
68
- this.normalTargetB = injectFBO(this.normalTargetParams);
69
- this.causticsTargetParams = computed(() => ({
70
- width: this.resolution(),
71
- height: this.resolution(),
72
- settings: CAUSTIC_OPTIONS,
73
- }));
74
- this.causticsTarget = injectFBO(this.causticsTargetParams);
75
- this.causticsTargetB = injectFBO(this.causticsTargetParams);
76
- this.cameraHelper = injectHelper(() => (this.debug() ? this.cameraRef().nativeElement : null), () => CameraHelper);
77
- extend({ CausticsProjectionMaterial, Group, Scene, Mesh, PlaneGeometry, LineBasicMaterial, OrthographicCamera });
78
- effect(() => {
79
- // track all changes
80
- const [group, scene, plane] = [
81
- this.groupRef().nativeElement,
82
- this.sceneRef().nativeElement,
83
- this.planeRef().nativeElement,
84
- this.options(),
85
- ];
86
- const groupLocalState = getLocalState(group);
87
- const sceneLocalState = getLocalState(scene);
88
- const planeLocalState = getLocalState(plane);
89
- if (!groupLocalState || !sceneLocalState || !planeLocalState)
90
- return;
91
- groupLocalState.objects();
92
- sceneLocalState.objects();
93
- planeLocalState.objects();
94
- planeLocalState.nonObjects();
95
- group.updateWorldMatrix(false, true);
96
- });
97
- const update = createCausticsUpdate(() => {
98
- const { lightSource, ...rest } = this.options();
99
- return {
100
- params: Object.assign(rest, {
101
- lightSource: Array.isArray(lightSource) ? new Vector3(...lightSource) : resolveRef(lightSource),
102
- }),
103
- normalTarget: this.normalTarget(),
104
- normalTargetB: this.normalTargetB(),
105
- causticsTarget: this.causticsTarget(),
106
- causticsTargetB: this.causticsTargetB(),
107
- camera: this.cameraRef().nativeElement,
108
- scene: this.sceneRef().nativeElement,
109
- group: this.groupRef().nativeElement,
110
- plane: this.planeRef().nativeElement,
111
- helper: this.cameraHelper(),
112
- };
113
- });
114
- injectBeforeRender(({ gl }) => update(gl));
115
- }
116
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsCaustics, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
117
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: NgtsCaustics, isStandalone: true, selector: "ngts-caustics", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "groupRef", first: true, predicate: ["group"], descendants: true, isSignal: true }, { propertyName: "sceneRef", first: true, predicate: ["scene"], descendants: true, isSignal: true }, { propertyName: "cameraRef", first: true, predicate: ["camera"], descendants: true, isSignal: true }, { propertyName: "planeRef", first: true, predicate: ["plane"], descendants: true, isSignal: true }], ngImport: i0, template: `
118
- <ngt-group #group [parameters]="parameters()">
119
- <ngt-scene #scene>
120
- <ngt-orthographic-camera #camera [up]="[0, 1, 0]" />
121
- <ng-content />
122
- </ngt-scene>
123
-
124
- <ngt-mesh #plane [renderOrder]="2" [rotation]="[-Math.PI / 2, 0, 0]">
125
- <ngt-plane-geometry />
126
- <ngt-caustics-projection-material
127
- [transparent]="true"
128
- [color]="color()"
129
- [causticsTexture]="causticsTarget().texture"
130
- [causticsTextureB]="causticsTargetB().texture"
131
- [blending]="CustomBlending"
132
- [blendSrc]="OneFactor"
133
- [blendDst]="SrcAlphaFactor"
134
- [depthWrite]="false"
135
- />
136
-
137
- @if (debug()) {
138
- <ngts-edges>
139
- <ngt-line-basic-material color="#ffff00" [toneMapped]="false" />
140
- </ngts-edges>
141
- }
142
- </ngt-mesh>
143
- </ngt-group>
144
- `, isInline: true, dependencies: [{ kind: "component", type: NgtsEdges, selector: "ngts-edges", inputs: ["options"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
145
- }
146
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsCaustics, decorators: [{
147
- type: Component,
148
- args: [{
149
- selector: 'ngts-caustics',
150
- standalone: true,
151
- template: `
152
- <ngt-group #group [parameters]="parameters()">
153
- <ngt-scene #scene>
154
- <ngt-orthographic-camera #camera [up]="[0, 1, 0]" />
155
- <ng-content />
156
- </ngt-scene>
157
-
158
- <ngt-mesh #plane [renderOrder]="2" [rotation]="[-Math.PI / 2, 0, 0]">
159
- <ngt-plane-geometry />
160
- <ngt-caustics-projection-material
161
- [transparent]="true"
162
- [color]="color()"
163
- [causticsTexture]="causticsTarget().texture"
164
- [causticsTextureB]="causticsTargetB().texture"
165
- [blending]="CustomBlending"
166
- [blendSrc]="OneFactor"
167
- [blendDst]="SrcAlphaFactor"
168
- [depthWrite]="false"
169
- />
170
-
171
- @if (debug()) {
172
- <ngts-edges>
173
- <ngt-line-basic-material color="#ffff00" [toneMapped]="false" />
174
- </ngts-edges>
175
- }
176
- </ngt-mesh>
177
- </ngt-group>
178
- `,
179
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
180
- changeDetection: ChangeDetectionStrategy.OnPush,
181
- imports: [NgtsEdges],
182
- }]
183
- }], ctorParameters: () => [] });
184
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F1c3RpY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvbGliL2NhdXN0aWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixzQkFBc0IsRUFDdEIsTUFBTSxFQUVOLEtBQUssRUFDTCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQVksSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFDTixZQUFZLEVBRVosY0FBYyxFQUNkLFNBQVMsRUFDVCxLQUFLLEVBQ0wsWUFBWSxFQUNaLHdCQUF3QixFQUN4QixpQkFBaUIsRUFDakIsSUFBSSxFQUVKLFNBQVMsRUFDVCxrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLEtBQUssRUFDTCxjQUFjLEVBQ2QsZ0JBQWdCLEVBQ2hCLE9BQU8sR0FDUCxNQUFNLE9BQU8sQ0FBQzs7QUFFZixNQUFNLGNBQWMsR0FBRztJQUN0QixLQUFLLEVBQUUsSUFBSTtJQUNYLFNBQVMsRUFBRSxZQUFZO0lBQ3ZCLFNBQVMsRUFBRSxZQUFZO0lBQ3ZCLElBQUksRUFBRSxnQkFBZ0I7Q0FDdEIsQ0FBQztBQUVGLE1BQU0sZUFBZSxHQUFHO0lBQ3ZCLFNBQVMsRUFBRSx3QkFBd0I7SUFDbkMsU0FB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VDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQztpQkFDcEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRjb21wdXRlZCxcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0ZWZmZWN0LFxuXHRFbGVtZW50UmVmLFxuXHRpbnB1dCxcblx0dmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGV4dGVuZCwgZ2V0TG9jYWxTdGF0ZSwgaW5qZWN0QmVmb3JlUmVuZGVyLCBOZ3RHcm91cCwgb21pdCwgcGljaywgcmVzb2x2ZVJlZiB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgaW5qZWN0SGVscGVyLCBOZ3RzRWRnZXMgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvYWJzdHJhY3Rpb25zJztcbmltcG9ydCB7IGluamVjdEZCTyB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS9taXNjJztcbmltcG9ydCB7IENhdXN0aWNzUHJvamVjdGlvbk1hdGVyaWFsLCBjcmVhdGVDYXVzdGljc1VwZGF0ZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS92YW5pbGxhLWV4cG9ydHMnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHtcblx0Q2FtZXJhSGVscGVyLFxuXHRDb2xvclJlcHJlc2VudGF0aW9uLFxuXHRDdXN0b21CbGVuZGluZyxcblx0RmxvYXRUeXBlLFxuXHRHcm91cCxcblx0TGluZWFyRmlsdGVyLFxuXHRMaW5lYXJNaXBtYXBMaW5lYXJGaWx0ZXIsXG5cdExpbmVCYXNpY01hdGVyaWFsLFxuXHRNZXNoLFxuXHRPYmplY3QzRCxcblx0T25lRmFjdG9yLFxuXHRPcnRob2dyYXBoaWNDYW1lcmEsXG5cdFBsYW5lR2VvbWV0cnksXG5cdFNjZW5lLFxuXHRTcmNBbHBoYUZhY3Rvcixcblx0VW5zaWduZWRCeXRlVHlwZSxcblx0VmVjdG9yMyxcbn0gZnJvbSAndGhyZWUnO1xuXG5jb25zdCBOT1JNQUxfT1BUSU9OUyA9IHtcblx0ZGVwdGg6IHRydWUsXG5cdG1pbkZpbHRlcjogTGluZWFyRmlsdGVyLFxuXHRtYWdGaWx0ZXI6IExpbmVhckZpbHRlcixcblx0dHlwZTogVW5zaWduZWRCeXRlVHlwZSxcbn07XG5cbmNvbnN0IENBVVNUSUNfT1BUSU9OUyA9IHtcblx0bWluRmlsdGVyOiBMaW5lYXJNaXBtYXBMaW5lYXJGaWx0ZXIsXG5cdG1hZ0ZpbHRlcjogTGluZWFyRmlsdGVyLFxuXHR0eXBlOiBGbG9hdFR5cGUsXG5cdGdlbmVyYXRlTWlwbWFwczogdHJ1ZSxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c0NhdXN0aWNzT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8Tmd0R3JvdXA+IHtcblx0LyoqIEhvdyBtYW55IGZyYW1lcyBpdCB3aWxsIHJlbmRlciwgc2V0IGl0IHRvIEluZmluaXR5IGZvciBydW50aW1lLCBkZWZhdWx0OiAxICovXG5cdGZyYW1lczogbnVtYmVyO1xuXHQvKiogRW5hYmxlcyB2aXN1YWwgY3VlcyB0byBoZWxwIHlvdSBzdGFnZSB5b3VyIHNjZW5lLCBkZWZhdWx0OiBmYWxzZSAqL1xuXHRkZWJ1ZzogYm9vbGVhbjtcblx0LyoqIFdpbGwgZGlzcGxheSBjYXVzdGljcyBvbmx5IGFuZCBza2lwIHRoZSBtb2RlbHMsIGRlZmF1bHQ6IGZhbHNlICovXG5cdGNhdXN0aWNzT25seTogYm9vbGVhbjtcblx0LyoqIFdpbGwgaW5jbHVkZSBiYWNrIGZhY2VzIGFuZCBlbmFibGUgdGhlIGJhY2tzaWRlSU9SIHByb3AsIGRlZmF1bHQ6IGZhbHNlICovXG5cdGJhY2tzaWRlOiBib29sZWFuO1xuXHQvKiogVGhlIElPUiByZWZyYWN0aW9uIGluZGV4LCBkZWZhdWx0OiAxLjEgKi9cblx0aW9yOiBudW1iZXI7XG5cdC8qKiBUaGUgSU9SIHJlZnJhY3Rpb24gaW5kZXggZm9yIGJhY2sgZmFjZXMgKG9ubHkgYXZhaWxhYmxlIHdoZW4gYmFja3NpZGUgaXMgZW5hYmxlZCksIGRlZmF1bHQ6IDEuMSAqL1xuXHRiYWNrc2lkZUlPUjogbnVtYmVyO1xuXHQvKiogVGhlIHRleGVsIHNpemUsIGRlZmF1bHQ6IDAuMzEyNSAqL1xuXHR3b3JsZFJhZGl1czogbnVtYmVyO1xuXHQvKiogSW50ZW5zaXR5IG9mIHRoZSBwcmplY3RlZCBjYXVzdGljcywgZGVmYXVsdDogMC4wNSAqL1xuXHRpbnRlbnNpdHk6IG51bWJlcjtcblx0LyoqIENhdXN0aWNzIGNvbG9yLCBkZWZhdWx0OiB3aGl0ZSAqL1xuXHRjb2xvcjogQ29sb3JSZXByZXNlbnRhdGlvbjtcblx0LyoqIEJ1ZmZlciByZXNvbHV0aW9uLCBkZWZhdWx0OiAyMDQ4ICovXG5cdHJlc29sdXRpb246IG51bWJlcjtcblx0LyoqIENhbWVyYSBwb3NpdGlvbiwgaXQgd2lsbCBwb2ludCB0b3dhcmRzIHRoZSBjb250ZW50cyBib3VuZHMgY2VudGVyLCBkZWZhdWx0OiBbNSwgNSwgNV0gKi9cblx0bGlnaHRTb3VyY2U6IFt4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyXSB8IEVsZW1lbnRSZWY8T2JqZWN0M0Q+IHwgT2JqZWN0M0Q7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOZ3RzQ2F1c3RpY3NPcHRpb25zID0ge1xuXHRmcmFtZXM6IDEsXG5cdGRlYnVnOiBmYWxzZSxcblx0Y2F1c3RpY3NPbmx5OiBmYWxzZSxcblx0YmFja3NpZGU6IGZhbHNlLFxuXHRpb3I6IDEuMSxcblx0YmFja3NpZGVJT1I6IDEuMSxcblx0d29ybGRSYWRpdXM6IDAuMzEyNSxcblx0aW50ZW5zaXR5OiAwLjA1LFxuXHRjb2xvcjogJ3doaXRlJyxcblx0cmVzb2x1dGlvbjogMjAyNCxcblx0bGlnaHRTb3VyY2U6IFs1LCA1LCA1XSxcbn07XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtY2F1c3RpY3MnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtZ3JvdXAgI2dyb3VwIFtwYXJhbWV0ZXJzXT1cInBhcmFtZXRlcnMoKVwiPlxuXHRcdFx0PG5ndC1zY2VuZSAjc2NlbmU+XG5cdFx0XHRcdDxuZ3Qtb3J0aG9ncmFwaGljLWNhbWVyYSAjY2FtZXJhIFt1cF09XCJbMCwgMSwgMF1cIiAvPlxuXHRcdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdFx0PC9uZ3Qtc2NlbmU+XG5cblx0XHRcdDxuZ3QtbWVzaCAjcGxhbmUgW3JlbmRlck9yZGVyXT1cIjJcIiBbcm90YXRpb25dPVwiWy1NYXRoLlBJIC8gMiwgMCwgMF1cIj5cblx0XHRcdFx0PG5ndC1wbGFuZS1nZW9tZXRyeSAvPlxuXHRcdFx0XHQ8bmd0LWNhdXN0aWNzLXByb2plY3Rpb24tbWF0ZXJpYWxcblx0XHRcdFx0XHRbdHJhbnNwYXJlbnRdPVwidHJ1ZVwiXG5cdFx0XHRcdFx0W2NvbG9yXT1cImNvbG9yKClcIlxuXHRcdFx0XHRcdFtjYXVzdGljc1RleHR1cmVdPVwiY2F1c3RpY3NUYXJnZXQoKS50ZXh0dXJlXCJcblx0XHRcdFx0XHRbY2F1c3RpY3NUZXh0dXJlQl09XCJjYXVzdGljc1RhcmdldEIoKS50ZXh0dXJlXCJcblx0XHRcdFx0XHRbYmxlbmRpbmddPVwiQ3VzdG9tQmxlbmRpbmdcIlxuXHRcdFx0XHRcdFtibGVuZFNyY109XCJPbmVGYWN0b3JcIlxuXHRcdFx0XHRcdFtibGVuZERzdF09XCJTcmNBbHBoYUZhY3RvclwiXG5cdFx0XHRcdFx0W2RlcHRoV3JpdGVdPVwiZmFsc2VcIlxuXHRcdFx0XHQvPlxuXG5cdFx0XHRcdEBpZiAoZGVidWcoKSkge1xuXHRcdFx0XHRcdDxuZ3RzLWVkZ2VzPlxuXHRcdFx0XHRcdFx0PG5ndC1saW5lLWJhc2ljLW1hdGVyaWFsIGNvbG9yPVwiI2ZmZmYwMFwiIFt0b25lTWFwcGVkXT1cImZhbHNlXCIgLz5cblx0XHRcdFx0XHQ8L25ndHMtZWRnZXM+XG5cdFx0XHRcdH1cblx0XHRcdDwvbmd0LW1lc2g+XG5cdFx0PC9uZ3QtZ3JvdXA+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cdGltcG9ydHM6IFtOZ3RzRWRnZXNdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzQ2F1c3RpY3Mge1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgTWF0aCA9IE1hdGg7XG5cdHByb3RlY3RlZCByZWFkb25seSBDdXN0b21CbGVuZGluZyA9IEN1c3RvbUJsZW5kaW5nO1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgT25lRmFjdG9yID0gT25lRmFjdG9yO1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgU3JjQWxwaGFGYWN0b3IgPSBTcmNBbHBoYUZhY3RvcjtcblxuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cdHBhcmFtZXRlcnMgPSBvbWl0KHRoaXMub3B0aW9ucywgW1xuXHRcdCdmcmFtZXMnLFxuXHRcdCdkZWJ1ZycsXG5cdFx0J2NhdXN0aWNzT25seScsXG5cdFx0J2JhY2tzaWRlJyxcblx0XHQnaW9yJyxcblx0XHQnYmFja3NpZGVJT1InLFxuXHRcdCd3b3JsZFJhZGl1cycsXG5cdFx0J2ludGVuc2l0eScsXG5cdFx0J2NvbG9yJyxcblx0XHQncmVzb2x1dGlvbicsXG5cdFx0J2xpZ2h0U291cmNlJyxcblx0XSk7XG5cblx0ZGVidWcgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2RlYnVnJyk7XG5cdGNvbG9yID0gcGljayh0aGlzLm9wdGlvbnMsICdjb2xvcicpO1xuXHRwcml2YXRlIHJlc29sdXRpb24gPSBwaWNrKHRoaXMub3B0aW9ucywgJ3Jlc29sdXRpb24nKTtcblxuXHRncm91cFJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEdyb3VwPj4oJ2dyb3VwJyk7XG5cdHByaXZhdGUgc2NlbmVSZWYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxTY2VuZT4+KCdzY2VuZScpO1xuXHRwcml2YXRlIGNhbWVyYVJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPE9ydGhvZ3JhcGhpY0NhbWVyYT4+KCdjYW1lcmEnKTtcblx0cHJpdmF0ZSBwbGFuZVJlZiA9XG5cdFx0dmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8TWVzaDxQbGFuZUdlb21ldHJ5LCBJbnN0YW5jZVR5cGU8dHlwZW9mIENhdXN0aWNzUHJvamVjdGlvbk1hdGVyaWFsPj4+PigncGxhbmUnKTtcblxuXHRwcml2YXRlIG5vcm1hbFRhcmdldFBhcmFtcyA9IGNvbXB1dGVkKCgpID0+ICh7XG5cdFx0d2lkdGg6IHRoaXMucmVzb2x1dGlvbigpLFxuXHRcdGhlaWdodDogdGhpcy5yZXNvbHV0aW9uKCksXG5cdFx0c2V0dGluZ3M6IE5PUk1BTF9PUFRJT05TLFxuXHR9KSk7XG5cblx0Ly8gQnVmZmVycyBmb3IgZnJvbnQgYW5kIGJhY2sgZmFjZXNcblx0cHJpdmF0ZSBub3JtYWxUYXJnZXQgPSBpbmplY3RGQk8odGhpcy5ub3JtYWxUYXJnZXRQYXJhbXMpO1xuXHRwcml2YXRlIG5vcm1hbFRhcmdldEIgPSBpbmplY3RGQk8odGhpcy5ub3JtYWxUYXJnZXRQYXJhbXMpO1xuXG5cdHByaXZhdGUgY2F1c3RpY3NUYXJnZXRQYXJhbXMgPSBjb21wdXRlZCgoKSA9PiAoe1xuXHRcdHdpZHRoOiB0aGlzLnJlc29sdXRpb24oKSxcblx0XHRoZWlnaHQ6IHRoaXMucmVzb2x1dGlvbigpLFxuXHRcdHNldHRpbmdzOiBDQVVTVElDX09QVElPTlMsXG5cdH0pKTtcblx0Y2F1c3RpY3NUYXJnZXQgPSBpbmplY3RGQk8odGhpcy5jYXVzdGljc1RhcmdldFBhcmFtcyk7XG5cdGNhdXN0aWNzVGFyZ2V0QiA9IGluamVjdEZCTyh0aGlzLmNhdXN0aWNzVGFyZ2V0UGFyYW1zKTtcblxuXHRwcml2YXRlIGNhbWVyYUhlbHBlciA9IGluamVjdEhlbHBlcihcblx0XHQoKSA9PiAodGhpcy5kZWJ1ZygpID8gdGhpcy5jYW1lcmFSZWYoKS5uYXRpdmVFbGVtZW50IDogbnVsbCksXG5cdFx0KCkgPT4gQ2FtZXJhSGVscGVyLFxuXHQpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGV4dGVuZCh7IENhdXN0aWNzUHJvamVjdGlvbk1hdGVyaWFsLCBHcm91cCwgU2NlbmUsIE1lc2gsIFBsYW5lR2VvbWV0cnksIExpbmVCYXNpY01hdGVyaWFsLCBPcnRob2dyYXBoaWNDYW1lcmEgfSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0Ly8gdHJhY2sgYWxsIGNoYW5nZXNcblx0XHRcdGNvbnN0IFtncm91cCwgc2NlbmUsIHBsYW5lXSA9IFtcblx0XHRcdFx0dGhpcy5ncm91cFJlZigpLm5hdGl2ZUVsZW1lbnQsXG5cdFx0XHRcdHRoaXMuc2NlbmVSZWYoKS5uYXRpdmVFbGVtZW50LFxuXHRcdFx0XHR0aGlzLnBsYW5lUmVmKCkubmF0aXZlRWxlbWVudCxcblx0XHRcdFx0dGhpcy5vcHRpb25zKCksXG5cdFx0XHRdO1xuXHRcdFx0Y29uc3QgZ3JvdXBMb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShncm91cCk7XG5cdFx0XHRjb25zdCBzY2VuZUxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKHNjZW5lKTtcblx0XHRcdGNvbnN0IHBsYW5lTG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUocGxhbmUpO1xuXG5cdFx0XHRpZiAoIWdyb3VwTG9jYWxTdGF0ZSB8fCAhc2NlbmVMb2NhbFN0YXRlIHx8ICFwbGFuZUxvY2FsU3RhdGUpIHJldHVybjtcblxuXHRcdFx0Z3JvdXBMb2NhbFN0YXRlLm9iamVjdHMoKTtcblx0XHRcdHNjZW5lTG9jYWxTdGF0ZS5vYmplY3RzKCk7XG5cdFx0XHRwbGFuZUxvY2FsU3RhdGUub2JqZWN0cygpO1xuXHRcdFx0cGxhbmVMb2NhbFN0YXRlLm5vbk9iamVjdHMoKTtcblxuXHRcdFx0Z3JvdXAudXBkYXRlV29ybGRNYXRyaXgoZmFsc2UsIHRydWUpO1xuXHRcdH0pO1xuXG5cdFx0Y29uc3QgdXBkYXRlID0gY3JlYXRlQ2F1c3RpY3NVcGRhdGUoKCkgPT4ge1xuXHRcdFx0Y29uc3QgeyBsaWdodFNvdXJjZSwgLi4ucmVzdCB9ID0gdGhpcy5vcHRpb25zKCk7XG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHBhcmFtczogT2JqZWN0LmFzc2lnbihyZXN0LCB7XG5cdFx0XHRcdFx0bGlnaHRTb3VyY2U6IEFycmF5LmlzQXJyYXkobGlnaHRTb3VyY2UpID8gbmV3IFZlY3RvcjMoLi4ubGlnaHRTb3VyY2UpIDogcmVzb2x2ZVJlZihsaWdodFNvdXJjZSksXG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRub3JtYWxUYXJnZXQ6IHRoaXMubm9ybWFsVGFyZ2V0KCksXG5cdFx0XHRcdG5vcm1hbFRhcmdldEI6IHRoaXMubm9ybWFsVGFyZ2V0QigpLFxuXHRcdFx0XHRjYXVzdGljc1RhcmdldDogdGhpcy5jYXVzdGljc1RhcmdldCgpLFxuXHRcdFx0XHRjYXVzdGljc1RhcmdldEI6IHRoaXMuY2F1c3RpY3NUYXJnZXRCKCksXG5cdFx0XHRcdGNhbWVyYTogdGhpcy5jYW1lcmFSZWYoKS5uYXRpdmVFbGVtZW50LFxuXHRcdFx0XHRzY2VuZTogdGhpcy5zY2VuZVJlZigpLm5hdGl2ZUVsZW1lbnQsXG5cdFx0XHRcdGdyb3VwOiB0aGlzLmdyb3VwUmVmKCkubmF0aXZlRWxlbWVudCxcblx0XHRcdFx0cGxhbmU6IHRoaXMucGxhbmVSZWYoKS5uYXRpdmVFbGVtZW50LFxuXHRcdFx0XHRoZWxwZXI6IHRoaXMuY2FtZXJhSGVscGVyKCksXG5cdFx0XHR9O1xuXHRcdH0pO1xuXG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKCh7IGdsIH0pID0+IHVwZGF0ZShnbCkpO1xuXHR9XG59XG4iXX0=