angular-three-soba 2.14.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 (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,322 +0,0 @@
1
- import { NgTemplateOutlet } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, computed, effect, inject, input, output, Renderer2, untracked, viewChild, } from '@angular/core';
3
- import { injectBeforeRender, NgtHTML, pick, resolveRef } from 'angular-three';
4
- import { mergeInputs } from 'ngxtension/inject-inputs';
5
- import { Vector3 } from 'three';
6
- import { NgtsHTML } from './html';
7
- import { defaultCalculatePosition, epsilon, getCameraCSSMatrix, getObjectCSSMatrix, isObjectBehindCamera, isObjectVisible, objectScale, objectZIndex, } from './utils';
8
- import * as i0 from "@angular/core";
9
- const defaultHtmlContentOptions = {
10
- eps: 0.001,
11
- zIndexRange: [16777271, 0],
12
- pointerEvents: 'auto',
13
- calculatePosition: defaultCalculatePosition,
14
- containerClass: '',
15
- containerStyle: {},
16
- center: false,
17
- prepend: false,
18
- fullscreen: false,
19
- sprite: false,
20
- };
21
- export class NgtsHTMLContent extends NgtHTML {
22
- constructor() {
23
- super();
24
- this.options = input(defaultHtmlContentOptions, {
25
- transform: mergeInputs(defaultHtmlContentOptions),
26
- alias: 'ngtsHTMLContent',
27
- });
28
- this.occluded = output();
29
- this.html = inject(NgtsHTML);
30
- this.transformOuterRef = viewChild('transformOuter');
31
- this.transformInnerRef = viewChild('transformInner');
32
- this.containerRef = viewChild('container');
33
- this.gl = this.store.select('gl');
34
- this.events = this.store.select('events');
35
- this.camera = this.store.select('camera');
36
- this.scene = this.store.select('scene');
37
- this.size = this.store.select('size');
38
- this.parent = pick(this.options, 'parent');
39
- this.zIndexRange = pick(this.options, 'zIndexRange');
40
- this.calculatePosition = pick(this.options, 'calculatePosition');
41
- this.prepend = pick(this.options, 'prepend');
42
- this.center = pick(this.options, 'center');
43
- this.fullscreen = pick(this.options, 'fullscreen');
44
- this.pointerEvents = pick(this.options, 'pointerEvents');
45
- this.containerClass = pick(this.options, 'containerClass');
46
- this.containerStyle = pick(this.options, 'containerStyle');
47
- this.target = computed(() => {
48
- const parent = resolveRef(this.parent());
49
- if (parent)
50
- return parent;
51
- return (this.events().connected || this.gl().domElement.parentNode);
52
- });
53
- const renderer = inject(Renderer2);
54
- let isMeshSizeSet = false;
55
- effect(() => {
56
- const [occlude, canvasEl, zIndexRange] = [
57
- this.html.occlude(),
58
- untracked(this.gl).domElement,
59
- untracked(this.zIndexRange),
60
- ];
61
- if (occlude && occlude === 'blending') {
62
- renderer.setStyle(canvasEl, 'z-index', `${Math.floor(zIndexRange[0] / 2)}`);
63
- renderer.setStyle(canvasEl, 'position', 'absolute');
64
- renderer.setStyle(canvasEl, 'pointer-events', 'none');
65
- }
66
- else {
67
- renderer.removeStyle(canvasEl, 'z-index');
68
- renderer.removeStyle(canvasEl, 'position');
69
- renderer.removeStyle(canvasEl, 'pointer-events');
70
- }
71
- });
72
- effect((onCleanup) => {
73
- const [transform, target, hostEl, prepend, scene, calculatePosition, group, size, camera] = [
74
- this.html.transform(),
75
- this.target(),
76
- this.host.nativeElement,
77
- untracked(this.prepend),
78
- untracked(this.scene),
79
- untracked(this.calculatePosition),
80
- untracked(this.html.groupRef).nativeElement,
81
- untracked(this.size),
82
- untracked(this.camera),
83
- ];
84
- scene.updateMatrixWorld();
85
- renderer.setStyle(hostEl, 'position', 'absolute');
86
- renderer.setStyle(hostEl, 'top', '0');
87
- renderer.setStyle(hostEl, 'left', '0');
88
- if (transform) {
89
- renderer.setStyle(hostEl, 'pointer-events', 'none');
90
- renderer.setStyle(hostEl, 'overflow', 'hidden');
91
- renderer.removeStyle(hostEl, 'transform');
92
- renderer.removeStyle(hostEl, 'transform-origin');
93
- }
94
- else {
95
- const vec = calculatePosition(group, camera, size);
96
- renderer.setStyle(hostEl, 'transform', `translate3d(${vec[0]}px,${vec[1]}px,0)`);
97
- renderer.setStyle(hostEl, 'transform-origin', '0 0');
98
- renderer.removeStyle(hostEl, 'pointer-events');
99
- renderer.removeStyle(hostEl, 'overflow');
100
- }
101
- if (prepend)
102
- target.prepend(hostEl);
103
- else
104
- target.appendChild(hostEl);
105
- onCleanup(() => {
106
- if (target)
107
- target.removeChild(hostEl);
108
- });
109
- });
110
- effect(() => {
111
- const _ = [this.options(), this.html.options()];
112
- isMeshSizeSet = false;
113
- });
114
- let visible = true;
115
- let oldZoom = 0;
116
- let oldPosition = [0, 0];
117
- injectBeforeRender(({ camera: rootCamera }) => {
118
- const [hostEl, transformOuterEl, transformInnerEl, group, occlusionMesh, occlusionGeometry, isRaycastOcclusion, { camera, size, viewport, raycaster, scene }, { calculatePosition, eps, zIndexRange, sprite, distanceFactor }, { transform, occlude, scale },] = [
119
- this.host.nativeElement,
120
- this.transformOuterRef()?.nativeElement,
121
- this.transformInnerRef()?.nativeElement,
122
- this.html.groupRef().nativeElement,
123
- this.html.occlusionMeshRef()?.nativeElement,
124
- this.html.occlusionGeometryRef()?.nativeElement,
125
- this.html.isRaycastOcclusion(),
126
- this.store.snapshot,
127
- this.options(),
128
- this.html.options(),
129
- ];
130
- if (group) {
131
- camera.updateMatrixWorld();
132
- group.updateWorldMatrix(true, false);
133
- const vec = transform ? oldPosition : calculatePosition(group, camera, size);
134
- if (transform ||
135
- Math.abs(oldZoom - camera.zoom) > eps ||
136
- Math.abs(oldPosition[0] - vec[0]) > eps ||
137
- Math.abs(oldPosition[1] - vec[1]) > eps) {
138
- const isBehindCamera = isObjectBehindCamera(group, camera);
139
- let raytraceTarget = false;
140
- if (isRaycastOcclusion) {
141
- if (Array.isArray(occlude)) {
142
- raytraceTarget = occlude.map((item) => resolveRef(item));
143
- }
144
- else if (occlude !== 'blending') {
145
- raytraceTarget = [scene];
146
- }
147
- }
148
- const previouslyVisible = visible;
149
- if (raytraceTarget) {
150
- const isVisible = isObjectVisible(group, camera, raycaster, raytraceTarget);
151
- visible = isVisible && !isBehindCamera;
152
- }
153
- else {
154
- visible = !isBehindCamera;
155
- }
156
- if (previouslyVisible !== visible) {
157
- if (this.occluded['listeners'])
158
- this.occluded.emit(!visible);
159
- else
160
- renderer.setStyle(hostEl, 'display', visible ? 'block' : 'none');
161
- }
162
- const halfRange = Math.floor(zIndexRange[0] / 2);
163
- const zRange = occlude
164
- ? isRaycastOcclusion //
165
- ? [zIndexRange[0], halfRange]
166
- : [halfRange - 1, 0]
167
- : zIndexRange;
168
- renderer.setStyle(hostEl, 'z-index', `${objectZIndex(group, camera, zRange)}`);
169
- if (transform) {
170
- const [widthHalf, heightHalf] = [size.width / 2, size.height / 2];
171
- const fov = camera.projectionMatrix.elements[5] * heightHalf;
172
- const { isOrthographicCamera, top, left, bottom, right } = camera;
173
- const cameraMatrix = getCameraCSSMatrix(camera.matrixWorldInverse);
174
- const cameraTransform = isOrthographicCamera
175
- ? `scale(${fov})translate(${epsilon(-(right + left) / 2)}px,${epsilon((top + bottom) / 2)}px)`
176
- : `translateZ(${fov}px)`;
177
- let matrix = group.matrixWorld;
178
- if (sprite) {
179
- matrix = camera.matrixWorldInverse.clone().transpose().copyPosition(matrix).scale(group.scale);
180
- matrix.elements[3] = matrix.elements[7] = matrix.elements[11] = 0;
181
- matrix.elements[15] = 1;
182
- }
183
- renderer.setStyle(hostEl, 'width', size.width + 'px');
184
- renderer.setStyle(hostEl, 'height', size.height + 'px');
185
- renderer.setStyle(hostEl, 'perspective', isOrthographicCamera ? '' : `${fov}px`);
186
- if (transformOuterEl && transformInnerEl) {
187
- renderer.setStyle(transformOuterEl, 'transform', `${cameraTransform}${cameraMatrix}translate(${widthHalf}px,${heightHalf}px)`);
188
- renderer.setStyle(transformInnerEl, 'transform', getObjectCSSMatrix(matrix, 1 / ((distanceFactor || 10) / 400)));
189
- }
190
- }
191
- else {
192
- const scale = distanceFactor === undefined ? 1 : objectScale(group, camera) * distanceFactor;
193
- renderer.setStyle(hostEl, 'transform', `translate3d(${vec[0]}px,${vec[1]}px,0) scale(${scale})`);
194
- }
195
- oldPosition = vec;
196
- oldZoom = camera.zoom;
197
- }
198
- }
199
- if (!isRaycastOcclusion && occlusionMesh && !isMeshSizeSet) {
200
- if (transform) {
201
- if (transformOuterEl) {
202
- const el = transformOuterEl.children[0];
203
- if (el?.clientWidth && el?.clientHeight) {
204
- const { isOrthographicCamera } = camera;
205
- if (isOrthographicCamera || occlusionGeometry) {
206
- if (scale) {
207
- if (!Array.isArray(scale)) {
208
- occlusionMesh.scale.setScalar(1 / scale);
209
- }
210
- else if (scale instanceof Vector3) {
211
- occlusionMesh.scale.copy(scale.clone().divideScalar(1));
212
- }
213
- else {
214
- occlusionMesh.scale.set(1 / scale[0], 1 / scale[1], 1 / scale[2]);
215
- }
216
- }
217
- }
218
- else {
219
- const ratio = (distanceFactor || 10) / 400;
220
- const w = el.clientWidth * ratio;
221
- const h = el.clientHeight * ratio;
222
- occlusionMesh.scale.set(w, h, 1);
223
- }
224
- isMeshSizeSet = true;
225
- }
226
- }
227
- }
228
- else {
229
- const ele = hostEl.children[0];
230
- if (ele?.clientWidth && ele?.clientHeight) {
231
- const ratio = 1 / viewport.factor;
232
- const w = ele.clientWidth * ratio;
233
- const h = ele.clientHeight * ratio;
234
- occlusionMesh.scale.set(w, h, 1);
235
- isMeshSizeSet = true;
236
- }
237
- occlusionMesh.lookAt(rootCamera.position);
238
- }
239
- }
240
- });
241
- }
242
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsHTMLContent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
243
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: NgtsHTMLContent, isStandalone: true, selector: "[ngtsHTMLContent]", inputs: { options: { classPropertyName: "options", publicName: "ngtsHTMLContent", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { occluded: "occluded" }, host: { attributes: { "data-ngts-html-content": "" } }, viewQueries: [{ propertyName: "transformOuterRef", first: true, predicate: ["transformOuter"], descendants: true, isSignal: true }, { propertyName: "transformInnerRef", first: true, predicate: ["transformInner"], descendants: true, isSignal: true }, { propertyName: "containerRef", first: true, predicate: ["container"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
244
- @if (html.transform()) {
245
- <div
246
- #transformOuter
247
- style="position: absolute; top: 0; left: 0; transform-style: preserve-3d; pointer-events: none;"
248
- [style.width.px]="size().width"
249
- [style.height.px]="size().height"
250
- >
251
- <div #transformInner style="position: absolute" [style.pointer-events]="pointerEvents()">
252
- <div #container [class]="containerClass()" [style]="containerStyle()">
253
- <ng-container [ngTemplateOutlet]="content" />
254
- </div>
255
- </div>
256
- </div>
257
- } @else {
258
- <div
259
- #container
260
- style="position:absolute"
261
- [style.transform]="center() ? 'translate3d(-50%,-50%,0)' : 'none'"
262
- [style.top]="fullscreen() ? -size().height / 2 + 'px' : 'unset'"
263
- [style.left]="fullscreen() ? -size().width / 2 + 'px' : 'unset'"
264
- [style.width]="fullscreen() ? size().width : 'unset'"
265
- [style.height]="fullscreen() ? size().height : 'unset'"
266
- [class]="containerClass()"
267
- [style]="containerStyle()"
268
- >
269
- <ng-container [ngTemplateOutlet]="content" />
270
- </div>
271
- }
272
-
273
- <ng-template #content>
274
- <ng-content />
275
- </ng-template>
276
- `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
277
- }
278
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsHTMLContent, decorators: [{
279
- type: Component,
280
- args: [{
281
- selector: '[ngtsHTMLContent]',
282
- standalone: true,
283
- template: `
284
- @if (html.transform()) {
285
- <div
286
- #transformOuter
287
- style="position: absolute; top: 0; left: 0; transform-style: preserve-3d; pointer-events: none;"
288
- [style.width.px]="size().width"
289
- [style.height.px]="size().height"
290
- >
291
- <div #transformInner style="position: absolute" [style.pointer-events]="pointerEvents()">
292
- <div #container [class]="containerClass()" [style]="containerStyle()">
293
- <ng-container [ngTemplateOutlet]="content" />
294
- </div>
295
- </div>
296
- </div>
297
- } @else {
298
- <div
299
- #container
300
- style="position:absolute"
301
- [style.transform]="center() ? 'translate3d(-50%,-50%,0)' : 'none'"
302
- [style.top]="fullscreen() ? -size().height / 2 + 'px' : 'unset'"
303
- [style.left]="fullscreen() ? -size().width / 2 + 'px' : 'unset'"
304
- [style.width]="fullscreen() ? size().width : 'unset'"
305
- [style.height]="fullscreen() ? size().height : 'unset'"
306
- [class]="containerClass()"
307
- [style]="containerStyle()"
308
- >
309
- <ng-container [ngTemplateOutlet]="content" />
310
- </div>
311
- }
312
-
313
- <ng-template #content>
314
- <ng-content />
315
- </ng-template>
316
- `,
317
- changeDetection: ChangeDetectionStrategy.OnPush,
318
- imports: [NgTemplateOutlet],
319
- host: { 'data-ngts-html-content': '' },
320
- }]
321
- }], ctorParameters: () => [] });
322
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC1jb250ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL21pc2Mvc3JjL2xpYi9odG1sL2h0bWwtY29udGVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQ04sdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUVOLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFnQyxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDOUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNsQyxPQUFPLEVBRU4sd0JBQXdCLEVBQ3hCLE9BQU8sRUFDUCxrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLG9CQUFvQixFQUNwQixlQUFlLEVBQ2YsV0FBVyxFQUNYLFlBQVksR0FDWixNQUFNLFNBQVMsQ0FBQzs7QUE4QmpCLE1BQU0seUJBQXlCLEdBQTJCO0lBQ3pELEdBQUcsRUFBRSxLQUFLO0lBQ1YsV0FBVyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMxQixhQUFhLEVBQUUsTUFBTTtJQUNyQixpQkFBaUIsRUFBRSx3QkFBd0I7SUFDM0MsY0FBYyxFQUFFLEVBQUU7SUFDbEIsY0FBYyxFQUFFLEVBQUU7SUFDbEIsTUFBTSxFQUFFLEtBQUs7SUFDYixPQUFPLEVBQUUsS0FBSztJQUNkLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLE1B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RyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7d0JBRW5DLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBRWpDLGFBQWEsR0FBRyxJQUFJLENBQUM7b0JBQ3RCLENBQUM7b0JBRUQsYUFBYSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzNDLENBQUM7WUFDRixDQUFDO1FBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDOytHQXZRVyxlQUFlO21HQUFmLGVBQWUsd3JCQXRDakI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWlDVCw0REFFUyxnQkFBZ0I7OzRGQUdkLGVBQWU7a0JBekMzQixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWlDVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQzNCLElBQUksRUFBRSxFQUFFLHdCQUF3QixFQUFFLEVBQUUsRUFBRTtpQkFDdEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRDb21wb25lbnQsXG5cdGNvbXB1dGVkLFxuXHRlZmZlY3QsXG5cdEVsZW1lbnRSZWYsXG5cdGluamVjdCxcblx0aW5wdXQsXG5cdG91dHB1dCxcblx0UmVuZGVyZXIyLFxuXHR1bnRyYWNrZWQsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpbmplY3RCZWZvcmVSZW5kZXIsIE5ndEhUTUwsIHBpY2ssIHJlc29sdmVSZWYgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IG1lcmdlSW5wdXRzIH0gZnJvbSAnbmd4dGVuc2lvbi9pbmplY3QtaW5wdXRzJztcbmltcG9ydCB7IE9iamVjdDNELCBPcnRob2dyYXBoaWNDYW1lcmEsIFZlY3RvcjMgfSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBOZ3RzSFRNTCB9IGZyb20gJy4vaHRtbCc7XG5pbXBvcnQge1xuXHRDYWxjdWxhdGVQb3NpdGlvbixcblx0ZGVmYXVsdENhbGN1bGF0ZVBvc2l0aW9uLFxuXHRlcHNpbG9uLFxuXHRnZXRDYW1lcmFDU1NNYXRyaXgsXG5cdGdldE9iamVjdENTU01hdHJpeCxcblx0aXNPYmplY3RCZWhpbmRDYW1lcmEsXG5cdGlzT2JqZWN0VmlzaWJsZSxcblx0b2JqZWN0U2NhbGUsXG5cdG9iamVjdFpJbmRleCxcbn0gZnJvbSAnLi91dGlscyc7XG5cbnR5cGUgUG9pbnRlckV2ZW50c1Byb3BlcnRpZXMgPVxuXHR8ICdhdXRvJ1xuXHR8ICdub25lJ1xuXHR8ICd2aXNpYmxlUGFpbnRlZCdcblx0fCAndmlzaWJsZUZpbGwnXG5cdHwgJ3Zpc2libGVTdHJva2UnXG5cdHwgJ3Zpc2libGUnXG5cdHwgJ3BhaW50ZWQnXG5cdHwgJ2ZpbGwnXG5cdHwgJ3N0cm9rZSdcblx0fCAnYWxsJ1xuXHR8ICdpbmhlcml0JztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzSFRNTENvbnRlbnRPcHRpb25zIHtcblx0ZXBzOiBudW1iZXI7XG5cdHpJbmRleFJhbmdlOiBbbnVtYmVyLCBudW1iZXJdO1xuXHRjZW50ZXI6IGJvb2xlYW47XG5cdHByZXBlbmQ6IGJvb2xlYW47XG5cdGZ1bGxzY3JlZW46IGJvb2xlYW47XG5cdGNvbnRhaW5lckNsYXNzOiBzdHJpbmc7XG5cdGNvbnRhaW5lclN0eWxlOiBQYXJ0aWFsPENTU1N0eWxlRGVjbGFyYXRpb24+O1xuXHRwb2ludGVyRXZlbnRzOiBQb2ludGVyRXZlbnRzUHJvcGVydGllcztcblx0Y2FsY3VsYXRlUG9zaXRpb246IENhbGN1bGF0ZVBvc2l0aW9uO1xuXHRzcHJpdGU6IGJvb2xlYW47XG5cdGRpc3RhbmNlRmFjdG9yPzogbnVtYmVyO1xuXHRwYXJlbnQ/OiBIVE1MRWxlbWVudCB8IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xufVxuXG5jb25zdCBkZWZhdWx0SHRtbENvbnRlbnRPcHRpb25zOiBOZ3RzSFRNTENvbnRlbnRPcHRpb25zID0ge1xuXHRlcHM6IDAuMDAxLFxuXHR6SW5kZXhSYW5nZTogWzE2Nzc3MjcxLCAwXSxcblx0cG9pbnRlckV2ZW50czogJ2F1dG8nLFxuXHRjYWxjdWxhdGVQb3NpdGlvbjogZGVmYXVsdENhbGN1bGF0ZVBvc2l0aW9uLFxuXHRjb250YWluZXJDbGFzczogJycsXG5cdGNvbnRhaW5lclN0eWxlOiB7fSxcblx0Y2VudGVyOiBmYWxzZSxcblx0cHJlcGVuZDogZmFsc2UsXG5cdGZ1bGxzY3JlZW46IGZhbHNlLFxuXHRzcHJpdGU6IGZhbHNlLFxufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnW25ndHNIVE1MQ29udGVudF0nLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdEBpZiAoaHRtbC50cmFuc2Zvcm0oKSkge1xuXHRcdFx0PGRpdlxuXHRcdFx0XHQjdHJhbnNmb3JtT3V0ZXJcblx0XHRcdFx0c3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgbGVmdDogMDsgdHJhbnNmb3JtLXN0eWxlOiBwcmVzZXJ2ZS0zZDsgcG9pbnRlci1ldmVudHM6IG5vbmU7XCJcblx0XHRcdFx0W3N0eWxlLndpZHRoLnB4XT1cInNpemUoKS53aWR0aFwiXG5cdFx0XHRcdFtzdHlsZS5oZWlnaHQucHhdPVwic2l6ZSgpLmhlaWdodFwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgI3RyYW5zZm9ybUlubmVyIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlXCIgW3N0eWxlLnBvaW50ZXItZXZlbnRzXT1cInBvaW50ZXJFdmVudHMoKVwiPlxuXHRcdFx0XHRcdDxkaXYgI2NvbnRhaW5lciBbY2xhc3NdPVwiY29udGFpbmVyQ2xhc3MoKVwiIFtzdHlsZV09XCJjb250YWluZXJTdHlsZSgpXCI+XG5cdFx0XHRcdFx0XHQ8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnRcIiAvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdH0gQGVsc2Uge1xuXHRcdFx0PGRpdlxuXHRcdFx0XHQjY29udGFpbmVyXG5cdFx0XHRcdHN0eWxlPVwicG9zaXRpb246YWJzb2x1dGVcIlxuXHRcdFx0XHRbc3R5bGUudHJhbnNmb3JtXT1cImNlbnRlcigpID8gJ3RyYW5zbGF0ZTNkKC01MCUsLTUwJSwwKScgOiAnbm9uZSdcIlxuXHRcdFx0XHRbc3R5bGUudG9wXT1cImZ1bGxzY3JlZW4oKSA/IC1zaXplKCkuaGVpZ2h0IC8gMiArICdweCcgOiAndW5zZXQnXCJcblx0XHRcdFx0W3N0eWxlLmxlZnRdPVwiZnVsbHNjcmVlbigpID8gLXNpemUoKS53aWR0aCAvIDIgKyAncHgnIDogJ3Vuc2V0J1wiXG5cdFx0XHRcdFtzdHlsZS53aWR0aF09XCJmdWxsc2NyZWVuKCkgPyBzaXplKCkud2lkdGggOiAndW5zZXQnXCJcblx0XHRcdFx0W3N0eWxlLmhlaWdodF09XCJmdWxsc2NyZWVuKCkgPyBzaXplKCkuaGVpZ2h0IDogJ3Vuc2V0J1wiXG5cdFx0XHRcdFtjbGFzc109XCJjb250YWluZXJDbGFzcygpXCJcblx0XHRcdFx0W3N0eWxlXT1cImNvbnRhaW5lclN0eWxlKClcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnRcIiAvPlxuXHRcdFx0PC9kaXY+XG5cdFx0fVxuXG5cdFx0PG5nLXRlbXBsYXRlICNjb250ZW50PlxuXHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHQ8L25nLXRlbXBsYXRlPlxuXHRgLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW05nVGVtcGxhdGVPdXRsZXRdLFxuXHRob3N0OiB7ICdkYXRhLW5ndHMtaHRtbC1jb250ZW50JzogJycgfSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0hUTUxDb250ZW50IGV4dGVuZHMgTmd0SFRNTCB7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0SHRtbENvbnRlbnRPcHRpb25zLCB7XG5cdFx0dHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0SHRtbENvbnRlbnRPcHRpb25zKSxcblx0XHRhbGlhczogJ25ndHNIVE1MQ29udGVudCcsXG5cdH0pO1xuXHRvY2NsdWRlZCA9IG91dHB1dDxib29sZWFuPigpO1xuXG5cdGh0bWwgPSBpbmplY3QoTmd0c0hUTUwpO1xuXG5cdHRyYW5zZm9ybU91dGVyUmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+PigndHJhbnNmb3JtT3V0ZXInKTtcblx0dHJhbnNmb3JtSW5uZXJSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+KCd0cmFuc2Zvcm1Jbm5lcicpO1xuXHRjb250YWluZXJSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+KCdjb250YWluZXInKTtcblxuXHRwcml2YXRlIGdsID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2dsJyk7XG5cdHByaXZhdGUgZXZlbnRzID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2V2ZW50cycpO1xuXHRwcml2YXRlIGNhbWVyYSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdjYW1lcmEnKTtcblx0cHJpdmF0ZSBzY2VuZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdzY2VuZScpO1xuXHRwcm90ZWN0ZWQgc2l6ZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdzaXplJyk7XG5cblx0cHJpdmF0ZSBwYXJlbnQgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3BhcmVudCcpO1xuXHRwcml2YXRlIHpJbmRleFJhbmdlID0gcGljayh0aGlzLm9wdGlvbnMsICd6SW5kZXhSYW5nZScpO1xuXHRwcml2YXRlIGNhbGN1bGF0ZVBvc2l0aW9uID0gcGljayh0aGlzLm9wdGlvbnMsICdjYWxjdWxhdGVQb3NpdGlvbicpO1xuXHRwcml2YXRlIHByZXBlbmQgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3ByZXBlbmQnKTtcblx0cHJvdGVjdGVkIGNlbnRlciA9IHBpY2sodGhpcy5vcHRpb25zLCAnY2VudGVyJyk7XG5cdHByb3RlY3RlZCBmdWxsc2NyZWVuID0gcGljayh0aGlzLm9wdGlvbnMsICdmdWxsc2NyZWVuJyk7XG5cdHByb3RlY3RlZCBwb2ludGVyRXZlbnRzID0gcGljayh0aGlzLm9wdGlvbnMsICdwb2ludGVyRXZlbnRzJyk7XG5cdHByb3RlY3RlZCBjb250YWluZXJDbGFzcyA9IHBpY2sodGhpcy5vcHRpb25zLCAnY29udGFpbmVyQ2xhc3MnKTtcblx0cHJvdGVjdGVkIGNvbnRhaW5lclN0eWxlID0gcGljayh0aGlzLm9wdGlvbnMsICdjb250YWluZXJTdHlsZScpO1xuXG5cdHByaXZhdGUgdGFyZ2V0ID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IHBhcmVudCA9IHJlc29sdmVSZWYodGhpcy5wYXJlbnQoKSk7XG5cdFx0aWYgKHBhcmVudCkgcmV0dXJuIHBhcmVudDtcblx0XHRyZXR1cm4gKHRoaXMuZXZlbnRzKCkuY29ubmVjdGVkIHx8IHRoaXMuZ2woKS5kb21FbGVtZW50LnBhcmVudE5vZGUpIGFzIEhUTUxFbGVtZW50O1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0Y29uc3QgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcblxuXHRcdGxldCBpc01lc2hTaXplU2V0ID0gZmFsc2U7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0Y29uc3QgW29jY2x1ZGUsIGNhbnZhc0VsLCB6SW5kZXhSYW5nZV0gPSBbXG5cdFx0XHRcdHRoaXMuaHRtbC5vY2NsdWRlKCksXG5cdFx0XHRcdHVudHJhY2tlZCh0aGlzLmdsKS5kb21FbGVtZW50LFxuXHRcdFx0XHR1bnRyYWNrZWQodGhpcy56SW5kZXhSYW5nZSksXG5cdFx0XHRdO1xuXG5cdFx0XHRpZiAob2NjbHVkZSAmJiBvY2NsdWRlID09PSAnYmxlbmRpbmcnKSB7XG5cdFx0XHRcdHJlbmRlcmVyLnNldFN0eWxlKGNhbnZhc0VsLCAnei1pbmRleCcsIGAke01hdGguZmxvb3IoekluZGV4UmFuZ2VbMF0gLyAyKX1gKTtcblx0XHRcdFx0cmVuZGVyZXIuc2V0U3R5bGUoY2FudmFzRWwsICdwb3NpdGlvbicsICdhYnNvbHV0ZScpO1xuXHRcdFx0XHRyZW5kZXJlci5zZXRTdHlsZShjYW52YXNFbCwgJ3BvaW50ZXItZXZlbnRzJywgJ25vbmUnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlbmRlcmVyLnJlbW92ZVN0eWxlKGNhbnZhc0VsLCAnei1pbmRleCcpO1xuXHRcdFx0XHRyZW5kZXJlci5yZW1vdmVTdHlsZShjYW52YXNFbCwgJ3Bvc2l0aW9uJyk7XG5cdFx0XHRcdHJlbmRlcmVyLnJlbW92ZVN0eWxlKGNhbnZhc0VsLCAncG9pbnRlci1ldmVudHMnKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGVmZmVjdCgob25DbGVhbnVwKSA9PiB7XG5cdFx0XHRjb25zdCBbdHJhbnNmb3JtLCB0YXJnZXQsIGhvc3RFbCwgcHJlcGVuZCwgc2NlbmUsIGNhbGN1bGF0ZVBvc2l0aW9uLCBncm91cCwgc2l6ZSwgY2FtZXJhXSA9IFtcblx0XHRcdFx0dGhpcy5odG1sLnRyYW5zZm9ybSgpLFxuXHRcdFx0XHR0aGlzLnRhcmdldCgpLFxuXHRcdFx0XHR0aGlzLmhvc3QubmF0aXZlRWxlbWVudCxcblx0XHRcdFx0dW50cmFja2VkKHRoaXMucHJlcGVuZCksXG5cdFx0XHRcdHVudHJhY2tlZCh0aGlzLnNjZW5lKSxcblx0XHRcdFx0dW50cmFja2VkKHRoaXMuY2FsY3VsYXRlUG9zaXRpb24pLFxuXHRcdFx0XHR1bnRyYWNrZWQodGhpcy5odG1sLmdyb3VwUmVmKS5uYXRpdmVFbGVtZW50LFxuXHRcdFx0XHR1bnRyYWNrZWQodGhpcy5zaXplKSxcblx0XHRcdFx0dW50cmFja2VkKHRoaXMuY2FtZXJhKSxcblx0XHRcdF07XG5cblx0XHRcdHNjZW5lLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XG5cdFx0XHRyZW5kZXJlci5zZXRTdHlsZShob3N0RWwsICdwb3NpdGlvbicsICdhYnNvbHV0ZScpO1xuXHRcdFx0cmVuZGVyZXIuc2V0U3R5bGUoaG9zdEVsLCAndG9wJywgJzAnKTtcblx0XHRcdHJlbmRlcmVyLnNldFN0eWxlKGhvc3RFbCwgJ2xlZnQnLCAnMCcpO1xuXG5cdFx0XHRpZiAodHJhbnNmb3JtKSB7XG5cdFx0XHRcdHJlbmRlcmVyLnNldFN0eWxlKGhvc3RFbCwgJ3BvaW50ZXItZXZlbnRzJywgJ25vbmUnKTtcblx0XHRcdFx0cmVuZGVyZXIuc2V0U3R5bGUoaG9zdEVsLCAnb3ZlcmZsb3cnLCAnaGlkZGVuJyk7XG5cdFx0XHRcdHJlbmRlcmVyLnJlbW92ZVN0eWxlKGhvc3RFbCwgJ3RyYW5zZm9ybScpO1xuXHRcdFx0XHRyZW5kZXJlci5yZW1vdmVTdHlsZShob3N0RWwsICd0cmFuc2Zvcm0tb3JpZ2luJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCB2ZWMgPSBjYWxjdWxhdGVQb3NpdGlvbihncm91cCwgY2FtZXJhLCBzaXplKTtcblx0XHRcdFx0cmVuZGVyZXIuc2V0U3R5bGUoaG9zdEVsLCAndHJhbnNmb3JtJywgYHRyYW5zbGF0ZTNkKCR7dmVjWzBdfXB4LCR7dmVjWzFdfXB4LDApYCk7XG5cdFx0XHRcdHJlbmRlcmVyLnNldFN0eWxlKGhvc3RFbCwgJ3RyYW5zZm9ybS1vcmlnaW4nLCAnMCAwJyk7XG5cdFx0XHRcdHJlbmRlcmVyLnJlbW92ZVN0eWxlKGhvc3RFbCwgJ3BvaW50ZXItZXZlbnRzJyk7XG5cdFx0XHRcdHJlbmRlcmVyLnJlbW92ZVN0eWxlKGhvc3RFbCwgJ292ZXJmbG93Jyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChwcmVwZW5kKSB0YXJnZXQucHJlcGVuZChob3N0RWwpO1xuXHRcdFx0ZWxzZSB0YXJnZXQuYXBwZW5kQ2hpbGQoaG9zdEVsKTtcblxuXHRcdFx0b25DbGVhbnVwKCgpID0+IHtcblx0XHRcdFx0aWYgKHRhcmdldCkgdGFyZ2V0LnJlbW92ZUNoaWxkKGhvc3RFbCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBfID0gW3RoaXMub3B0aW9ucygpLCB0aGlzLmh0bWwub3B0aW9ucygpXTtcblx0XHRcdGlzTWVzaFNpemVTZXQgPSBmYWxzZTtcblx0XHR9KTtcblxuXHRcdGxldCB2aXNpYmxlID0gdHJ1ZTtcblx0XHRsZXQgb2xkWm9vbSA9IDA7XG5cdFx0bGV0IG9sZFBvc2l0aW9uID0gWzAsIDBdO1xuXG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKCh7IGNhbWVyYTogcm9vdENhbWVyYSB9KSA9PiB7XG5cdFx0XHRjb25zdCBbXG5cdFx0XHRcdGhvc3RFbCxcblx0XHRcdFx0dHJhbnNmb3JtT3V0ZXJFbCxcblx0XHRcdFx0dHJhbnNmb3JtSW5uZXJFbCxcblx0XHRcdFx0Z3JvdXAsXG5cdFx0XHRcdG9jY2x1c2lvbk1lc2gsXG5cdFx0XHRcdG9jY2x1c2lvbkdlb21ldHJ5LFxuXHRcdFx0XHRpc1JheWNhc3RPY2NsdXNpb24sXG5cdFx0XHRcdHsgY2FtZXJhLCBzaXplLCB2aWV3cG9ydCwgcmF5Y2FzdGVyLCBzY2VuZSB9LFxuXHRcdFx0XHR7IGNhbGN1bGF0ZVBvc2l0aW9uLCBlcHMsIHpJbmRleFJhbmdlLCBzcHJpdGUsIGRpc3RhbmNlRmFjdG9yIH0sXG5cdFx0XHRcdHsgdHJhbnNmb3JtLCBvY2NsdWRlLCBzY2FsZSB9LFxuXHRcdFx0XSA9IFtcblx0XHRcdFx0dGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsXG5cdFx0XHRcdHRoaXMudHJhbnNmb3JtT3V0ZXJSZWYoKT8ubmF0aXZlRWxlbWVudCxcblx0XHRcdFx0dGhpcy50cmFuc2Zvcm1Jbm5lclJlZigpPy5uYXRpdmVFbGVtZW50LFxuXHRcdFx0XHR0aGlzLmh0bWwuZ3JvdXBSZWYoKS5uYXRpdmVFbGVtZW50LFxuXHRcdFx0XHR0aGlzLmh0bWwub2NjbHVzaW9uTWVzaFJlZigpPy5uYXRpdmVFbGVtZW50LFxuXHRcdFx0XHR0aGlzLmh0bWwub2NjbHVzaW9uR2VvbWV0cnlSZWYoKT8ubmF0aXZlRWxlbWVudCxcblx0XHRcdFx0dGhpcy5odG1sLmlzUmF5Y2FzdE9jY2x1c2lvbigpLFxuXHRcdFx0XHR0aGlzLnN0b3JlLnNuYXBzaG90LFxuXHRcdFx0XHR0aGlzLm9wdGlvbnMoKSxcblx0XHRcdFx0dGhpcy5odG1sLm9wdGlvbnMoKSxcblx0XHRcdF07XG5cblx0XHRcdGlmIChncm91cCkge1xuXHRcdFx0XHRjYW1lcmEudXBkYXRlTWF0cml4V29ybGQoKTtcblx0XHRcdFx0Z3JvdXAudXBkYXRlV29ybGRNYXRyaXgodHJ1ZSwgZmFsc2UpO1xuXHRcdFx0XHRjb25zdCB2ZWMgPSB0cmFuc2Zvcm0gPyBvbGRQb3NpdGlvbiA6IGNhbGN1bGF0ZVBvc2l0aW9uKGdyb3VwLCBjYW1lcmEsIHNpemUpO1xuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR0cmFuc2Zvcm0gfHxcblx0XHRcdFx0XHRNYXRoLmFicyhvbGRab29tIC0gY2FtZXJhLnpvb20pID4gZXBzIHx8XG5cdFx0XHRcdFx0TWF0aC5hYnMob2xkUG9zaXRpb25bMF0gLSB2ZWNbMF0pID4gZXBzIHx8XG5cdFx0XHRcdFx0TWF0aC5hYnMob2xkUG9zaXRpb25bMV0gLSB2ZWNbMV0pID4gZXBzXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGNvbnN0IGlzQmVoaW5kQ2FtZXJhID0gaXNPYmplY3RCZWhpbmRDYW1lcmEoZ3JvdXAsIGNhbWVyYSk7XG5cdFx0XHRcdFx0bGV0IHJheXRyYWNlVGFyZ2V0OiBudWxsIHwgdW5kZWZpbmVkIHwgYm9vbGVhbiB8IE9iamVjdDNEW10gPSBmYWxzZTtcblxuXHRcdFx0XHRcdGlmIChpc1JheWNhc3RPY2NsdXNpb24pIHtcblx0XHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KG9jY2x1ZGUpKSB7XG5cdFx0XHRcdFx0XHRcdHJheXRyYWNlVGFyZ2V0ID0gb2NjbHVkZS5tYXAoKGl0ZW0pID0+IHJlc29sdmVSZWYoaXRlbSkpIGFzIE9iamVjdDNEW107XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKG9jY2x1ZGUgIT09ICdibGVuZGluZycpIHtcblx0XHRcdFx0XHRcdFx0cmF5dHJhY2VUYXJnZXQgPSBbc2NlbmVdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IHByZXZpb3VzbHlWaXNpYmxlID0gdmlzaWJsZTtcblx0XHRcdFx0XHRpZiAocmF5dHJhY2VUYXJnZXQpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGlzVmlzaWJsZSA9IGlzT2JqZWN0VmlzaWJsZShncm91cCwgY2FtZXJhLCByYXljYXN0ZXIsIHJheXRyYWNlVGFyZ2V0KTtcblx0XHRcdFx0XHRcdHZpc2libGUgPSBpc1Zpc2libGUgJiYgIWlzQmVoaW5kQ2FtZXJhO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR2aXNpYmxlID0gIWlzQmVoaW5kQ2FtZXJhO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChwcmV2aW91c2x5VmlzaWJsZSAhPT0gdmlzaWJsZSkge1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMub2NjbHVkZWRbJ2xpc3RlbmVycyddKSB0aGlzLm9jY2x1ZGVkLmVtaXQoIXZpc2libGUpO1xuXHRcdFx0XHRcdFx0ZWxzZSByZW5kZXJlci5zZXRTdHlsZShob3N0RWwsICdkaXNwbGF5JywgdmlzaWJsZSA/ICdibG9jaycgOiAnbm9uZScpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGhhbGZSYW5nZSA9IE1hdGguZmxvb3IoekluZGV4UmFuZ2VbMF0gLyAyKTtcblx0XHRcdFx0XHRjb25zdCB6UmFuZ2UgPSBvY2NsdWRlXG5cdFx0XHRcdFx0XHQ/IGlzUmF5Y2FzdE9jY2x1c2lvbiAvL1xuXHRcdFx0XHRcdFx0XHQ/IFt6SW5kZXhSYW5nZVswXSwgaGFsZlJhbmdlXVxuXHRcdFx0XHRcdFx0XHQ6IFtoYWxmUmFuZ2UgLSAxLCAwXVxuXHRcdFx0XHRcdFx0OiB6SW5kZXhSYW5nZTtcblxuXHRcdFx0XHRcdHJlbmRlcmVyLnNldFN0eWxlKGhvc3RFbCwgJ3otaW5kZXgnLCBgJHtvYmplY3RaSW5kZXgoZ3JvdXAsIGNhbWVyYSwgelJhbmdlKX1gKTtcblxuXHRcdFx0XHRcdGlmICh0cmFuc2Zvcm0pIHtcblx0XHRcdFx0XHRcdGNvbnN0IFt3aWR0aEhhbGYsIGhlaWdodEhhbGZdID0gW3NpemUud2lkdGggLyAyLCBzaXplLmhlaWdodCAvIDJdO1xuXHRcdFx0XHRcdFx0Y29uc3QgZm92ID0gY2FtZXJhLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbNV0gKiBoZWlnaHRIYWxmO1xuXHRcdFx0XHRcdFx0Y29uc3QgeyBpc09ydGhvZ3JhcGhpY0NhbWVyYSwgdG9wLCBsZWZ0LCBib3R0b20sIHJpZ2h0IH0gPSBjYW1lcmEgYXMgT3J0aG9ncmFwaGljQ2FtZXJhO1xuXHRcdFx0XHRcdFx0Y29uc3QgY2FtZXJhTWF0cml4ID0gZ2V0Q2FtZXJhQ1NTTWF0cml4KGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UpO1xuXHRcdFx0XHRcdFx0Y29uc3QgY2FtZXJhVHJhbnNmb3JtID0gaXNPcnRob2dyYXBoaWNDYW1lcmFcblx0XHRcdFx0XHRcdFx0PyBgc2NhbGUoJHtmb3Z9KXRyYW5zbGF0ZSgke2Vwc2lsb24oLShyaWdodCArIGxlZnQpIC8gMil9cHgsJHtlcHNpbG9uKCh0b3AgKyBib3R0b20pIC8gMil9cHgpYFxuXHRcdFx0XHRcdFx0XHQ6IGB0cmFuc2xhdGVaKCR7Zm92fXB4KWA7XG5cdFx0XHRcdFx0XHRsZXQgbWF0cml4ID0gZ3JvdXAubWF0cml4V29ybGQ7XG5cdFx0XHRcdFx0XHRpZiAoc3ByaXRlKSB7XG5cdFx0XHRcdFx0XHRcdG1hdHJpeCA9IGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UuY2xvbmUoKS50cmFuc3Bvc2UoKS5jb3B5UG9zaXRpb24obWF0cml4KS5zY2FsZShncm91cC5zY2FsZSk7XG5cdFx0XHRcdFx0XHRcdG1hdHJpeC5lbGVtZW50c1szXSA9IG1hdHJpeC5lbGVtZW50c1s3XSA9IG1hdHJpeC5lbGVtZW50c1sxMV0gPSAwO1xuXHRcdFx0XHRcdFx0XHRtYXRyaXguZWxlbWVudHNbMTVdID0gMTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cmVuZGVyZXIuc2V0U3R5bGUoaG9zdEVsLCAnd2lkdGgnLCBzaXplLndpZHRoICsgJ3B4Jyk7XG5cdFx0XHRcdFx0XHRyZW5kZXJlci5zZXRTdHlsZShob3N0RWwsICdoZWlnaHQnLCBzaXplLmhlaWdodCArICdweCcpO1xuXHRcdFx0XHRcdFx0cmVuZGVyZXIuc2V0U3R5bGUoaG9zdEVsLCAncGVyc3BlY3RpdmUnLCBpc09ydGhvZ3JhcGhpY0NhbWVyYSA/ICcnIDogYCR7Zm92fXB4YCk7XG5cblx0XHRcdFx0XHRcdGlmICh0cmFuc2Zvcm1PdXRlckVsICYmIHRyYW5zZm9ybUlubmVyRWwpIHtcblx0XHRcdFx0XHRcdFx0cmVuZGVyZXIuc2V0U3R5bGUoXG5cdFx0XHRcdFx0XHRcdFx0dHJhbnNmb3JtT3V0ZXJFbCxcblx0XHRcdFx0XHRcdFx0XHQndHJhbnNmb3JtJyxcblx0XHRcdFx0XHRcdFx0XHRgJHtjYW1lcmFUcmFuc2Zvcm19JHtjYW1lcmFNYXRyaXh9dHJhbnNsYXRlKCR7d2lkdGhIYWxmfXB4LCR7aGVpZ2h0SGFsZn1weClgLFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRyZW5kZXJlci5zZXRTdHlsZShcblx0XHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm1Jbm5lckVsLFxuXHRcdFx0XHRcdFx0XHRcdCd0cmFuc2Zvcm0nLFxuXHRcdFx0XHRcdFx0XHRcdGdldE9iamVjdENTU01hdHJpeChtYXRyaXgsIDEgLyAoKGRpc3RhbmNlRmFjdG9yIHx8IDEwKSAvIDQwMCkpLFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzY2FsZSA9IGRpc3RhbmNlRmFjdG9yID09PSB1bmRlZmluZWQgPyAxIDogb2JqZWN0U2NhbGUoZ3JvdXAsIGNhbWVyYSkgKiBkaXN0YW5jZUZhY3Rvcjtcblx0XHRcdFx0XHRcdHJlbmRlcmVyLnNldFN0eWxlKGhvc3RFbCwgJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUzZCgke3ZlY1swXX1weCwke3ZlY1sxXX1weCwwKSBzY2FsZSgke3NjYWxlfSlgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0b2xkUG9zaXRpb24gPSB2ZWM7XG5cdFx0XHRcdFx0b2xkWm9vbSA9IGNhbWVyYS56b29tO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICghaXNSYXljYXN0T2NjbHVzaW9uICYmIG9jY2x1c2lvbk1lc2ggJiYgIWlzTWVzaFNpemVTZXQpIHtcblx0XHRcdFx0aWYgKHRyYW5zZm9ybSkge1xuXHRcdFx0XHRcdGlmICh0cmFuc2Zvcm1PdXRlckVsKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBlbCA9IHRyYW5zZm9ybU91dGVyRWwuY2hpbGRyZW5bMF07XG5cblx0XHRcdFx0XHRcdGlmIChlbD8uY2xpZW50V2lkdGggJiYgZWw/LmNsaWVudEhlaWdodCkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB7IGlzT3J0aG9ncmFwaGljQ2FtZXJhIH0gPSBjYW1lcmEgYXMgT3J0aG9ncmFwaGljQ2FtZXJhO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChpc09ydGhvZ3JhcGhpY0NhbWVyYSB8fCBvY2NsdXNpb25HZW9tZXRyeSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChzY2FsZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KHNjYWxlKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRvY2NsdXNpb25NZXNoLnNjYWxlLnNldFNjYWxhcigxIC8gKHNjYWxlIGFzIG51bWJlcikpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChzY2FsZSBpbnN0YW5jZW9mIFZlY3RvcjMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0b2NjbHVzaW9uTWVzaC5zY2FsZS5jb3B5KHNjYWxlLmNsb25lKCkuZGl2aWRlU2NhbGFyKDEpKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9jY2x1c2lvbk1lc2guc2NhbGUuc2V0KDEgLyBzY2FsZVswXSwgMSAvIHNjYWxlWzFdLCAxIC8gc2NhbGVbMl0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCByYXRpbyA9IChkaXN0YW5jZUZhY3RvciB8fCAxMCkgLyA0MDA7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgdyA9IGVsLmNsaWVudFdpZHRoICogcmF0aW87XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgaCA9IGVsLmNsaWVudEhlaWdodCAqIHJhdGlvO1xuXG5cdFx0XHRcdFx0XHRcdFx0b2NjbHVzaW9uTWVzaC5zY2FsZS5zZXQodywgaCwgMSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpc01lc2hTaXplU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgZWxlID0gaG9zdEVsLmNoaWxkcmVuWzBdO1xuXG5cdFx0XHRcdFx0aWYgKGVsZT8uY2xpZW50V2lkdGggJiYgZWxlPy5jbGllbnRIZWlnaHQpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHJhdGlvID0gMSAvIHZpZXdwb3J0LmZhY3Rvcjtcblx0XHRcdFx0XHRcdGNvbnN0IHcgPSBlbGUuY2xpZW50V2lkdGggKiByYXRpbztcblx0XHRcdFx0XHRcdGNvbnN0IGggPSBlbGUuY2xpZW50SGVpZ2h0ICogcmF0aW87XG5cblx0XHRcdFx0XHRcdG9jY2x1c2lvbk1lc2guc2NhbGUuc2V0KHcsIGgsIDEpO1xuXG5cdFx0XHRcdFx0XHRpc01lc2hTaXplU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRvY2NsdXNpb25NZXNoLmxvb2tBdChyb290Q2FtZXJhLnBvc2l0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG4iXX0=
@@ -1,129 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, input, viewChild, } from '@angular/core';
2
- import { extend, is, omit, pick } from 'angular-three';
3
- import { mergeInputs } from 'ngxtension/inject-inputs';
4
- import { DoubleSide, Group, Mesh, PlaneGeometry, ShaderMaterial } from 'three';
5
- import * as i0 from "@angular/core";
6
- const defaultHtmlOptions = {
7
- occlude: false,
8
- transform: false,
9
- castShadow: false,
10
- receiveShadow: false,
11
- };
12
- export class NgtsHTML {
13
- constructor() {
14
- this.options = input(defaultHtmlOptions, { transform: mergeInputs(defaultHtmlOptions) });
15
- this.parameters = omit(this.options, ['occlude', 'castShadow', 'receiveShadow', 'transform']);
16
- this.groupRef = viewChild.required('group');
17
- this.occlusionMeshRef = viewChild('occlusionMesh');
18
- this.occlusionGeometryRef = viewChild('occlusionGeometry');
19
- this.occlude = pick(this.options, 'occlude');
20
- this.transform = pick(this.options, 'transform');
21
- this.castShadow = pick(this.options, 'castShadow');
22
- this.receiveShadow = pick(this.options, 'receiveShadow');
23
- this.scale = pick(this.options, 'scale');
24
- this.isRaycastOcclusion = computed(() => {
25
- const occlude = this.occlude();
26
- return (occlude && occlude !== 'blending') || (Array.isArray(occlude) && occlude.length && is.ref(occlude[0]));
27
- });
28
- this.shaders = computed(() => {
29
- const transform = this.transform();
30
- const vertexShader = !transform
31
- ? /* language=glsl glsl */ `
32
- /*
33
- This shader is from the THREE's SpriteMaterial.
34
- We need to turn the backing plane into a Sprite
35
- (make it always face the camera) if "transfrom"
36
- is false.
37
- */
38
- #include <common>
39
-
40
- void main() {
41
- vec2 center = vec2(0., 1.);
42
- float rotation = 0.0;
43
-
44
- // This is somewhat arbitrary, but it seems to work well
45
- // Need to figure out how to derive this dynamically if it even matters
46
- float size = 0.03;
47
-
48
- vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );
49
- vec2 scale;
50
- scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );
51
- scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );
52
-
53
- bool isPerspective = isPerspectiveMatrix( projectionMatrix );
54
- if ( isPerspective ) scale *= - mvPosition.z;
55
-
56
- vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale * size;
57
- vec2 rotatedPosition;
58
- rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;
59
- rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;
60
- mvPosition.xy += rotatedPosition;
61
-
62
- gl_Position = projectionMatrix * mvPosition;
63
- }
64
- `
65
- : undefined;
66
- const fragmentShader = /* language=glsl glsl */ `
67
- void main() {
68
- gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
69
- }
70
- `;
71
- return { vertexShader, fragmentShader };
72
- });
73
- this.vertexShader = pick(this.shaders, 'vertexShader');
74
- this.fragmentShader = pick(this.shaders, 'fragmentShader');
75
- this.DoubleSide = DoubleSide;
76
- extend({ Group, Mesh, PlaneGeometry, ShaderMaterial });
77
- }
78
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsHTML, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
79
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: NgtsHTML, isStandalone: true, selector: "ngts-html", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "groupRef", first: true, predicate: ["group"], descendants: true, isSignal: true }, { propertyName: "occlusionMeshRef", first: true, predicate: ["occlusionMesh"], descendants: true, isSignal: true }, { propertyName: "occlusionGeometryRef", first: true, predicate: ["occlusionGeometry"], descendants: true, isSignal: true }], ngImport: i0, template: `
80
- <ngt-group #group [parameters]="parameters()">
81
- @if (occlude() && !isRaycastOcclusion()) {
82
- <ngt-mesh #occlusionMesh [castShadow]="castShadow()" [receiveShadow]="receiveShadow()">
83
- <ng-content select="[data-occlusion-geometry]">
84
- <ngt-plane-geometry #occlusionGeometry />
85
- </ng-content>
86
- <ng-content select="[data-occlusion-material]">
87
- <ngt-shader-material
88
- [side]="DoubleSide"
89
- [vertexShader]="vertexShader()"
90
- [fragmentShader]="fragmentShader()"
91
- />
92
- </ng-content>
93
- </ngt-mesh>
94
- }
95
- </ngt-group>
96
-
97
- <ng-content />
98
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
99
- }
100
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsHTML, decorators: [{
101
- type: Component,
102
- args: [{
103
- selector: 'ngts-html',
104
- standalone: true,
105
- template: `
106
- <ngt-group #group [parameters]="parameters()">
107
- @if (occlude() && !isRaycastOcclusion()) {
108
- <ngt-mesh #occlusionMesh [castShadow]="castShadow()" [receiveShadow]="receiveShadow()">
109
- <ng-content select="[data-occlusion-geometry]">
110
- <ngt-plane-geometry #occlusionGeometry />
111
- </ng-content>
112
- <ng-content select="[data-occlusion-material]">
113
- <ngt-shader-material
114
- [side]="DoubleSide"
115
- [vertexShader]="vertexShader()"
116
- [fragmentShader]="fragmentShader()"
117
- />
118
- </ng-content>
119
- </ngt-mesh>
120
- }
121
- </ngt-group>
122
-
123
- <ng-content />
124
- `,
125
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
126
- changeDetection: ChangeDetectionStrategy.OnPush,
127
- }]
128
- }], ctorParameters: () => [] });
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9taXNjL3NyYy9saWIvaHRtbC9odG1sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixzQkFBc0IsRUFFdEIsS0FBSyxFQUNMLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBWSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQVksYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLE9BQU8sQ0FBQzs7QUFTekYsTUFBTSxrQkFBa0IsR0FBb0I7SUFDM0MsT0FBTyxFQUFFLEtBQUs7SUFDZCxTQUFTLEVBQUUsS0FBSztJQUNoQixVQUFVLEVBQUUsS0FBSztJQUNqQixhQUFhLEVBQUUsS0FBSztDQUNwQixDQUFDO0FBNEJGLE1BQU0sT0FBTyxRQUFRO0lBc0VwQjtRQXJFQSxZQUFPLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwRixlQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBRXpGLGFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFvQixPQUFPLENBQUMsQ0FBQztRQUMxRCxxQkFBZ0IsR0FBRyxTQUFTLENBQW1CLGVBQWUsQ0FBQyxDQUFDO1FBQ2hFLHlCQUFvQixHQUFHLFNBQVMsQ0FBNEIsbUJBQW1CLENBQUMsQ0FBQztRQUVqRixZQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDeEMsY0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzVDLGVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM5QyxrQkFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3BELFVBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVwQyx1QkFBa0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ2xDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMvQixPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sS0FBSyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEgsQ0FBQyxDQUFDLENBQUM7UUFFSyxZQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUMvQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxTQUFTO2dCQUM5QixDQUFDLENBQUMsd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQWlDdkI7Z0JBQ0osQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUViLE1BQU0sY0FBYyxHQUFHLHdCQUF3QixDQUFDOzs7O0tBSTdDLENBQUM7WUFFSixPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsaUJBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNsRCxtQkFBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFNbkMsZUFBVSxHQUFHLFVBQVUsQ0FBQztRQUgxQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7K0dBeEVXLFFBQVE7bUdBQVIsUUFBUSxrakJBdkJWOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBbUJUOzs0RkFJVyxRQUFRO2tCQTFCcEIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsV0FBVztvQkFDckIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW1CVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQy9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdEVsZW1lbnRSZWYsXG5cdGlucHV0LFxuXHR2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZXh0ZW5kLCBpcywgTmd0R3JvdXAsIG9taXQsIHBpY2sgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IG1lcmdlSW5wdXRzIH0gZnJvbSAnbmd4dGVuc2lvbi9pbmplY3QtaW5wdXRzJztcbmltcG9ydCB7IERvdWJsZVNpZGUsIEdyb3VwLCBNZXNoLCBPYmplY3QzRCwgUGxhbmVHZW9tZXRyeSwgU2hhZGVyTWF0ZXJpYWwgfSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c0hUTUxPcHRpb25zIGV4dGVuZHMgUGFydGlhbDxOZ3RHcm91cD4ge1xuXHRvY2NsdWRlOiBFbGVtZW50UmVmPE9iamVjdDNEPltdIHwgT2JqZWN0M0RbXSB8IGJvb2xlYW4gfCAncmF5Y2FzdCcgfCAnYmxlbmRpbmcnO1xuXHR0cmFuc2Zvcm06IGJvb2xlYW47XG5cdGNhc3RTaGFkb3c6IGJvb2xlYW47XG5cdHJlY2VpdmVTaGFkb3c6IGJvb2xlYW47XG59XG5cbmNvbnN0IGRlZmF1bHRIdG1sT3B0aW9uczogTmd0c0hUTUxPcHRpb25zID0ge1xuXHRvY2NsdWRlOiBmYWxzZSxcblx0dHJhbnNmb3JtOiBmYWxzZSxcblx0Y2FzdFNoYWRvdzogZmFsc2UsXG5cdHJlY2VpdmVTaGFkb3c6IGZhbHNlLFxufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1odG1sJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LWdyb3VwICNncm91cCBbcGFyYW1ldGVyc109XCJwYXJhbWV0ZXJzKClcIj5cblx0XHRcdEBpZiAob2NjbHVkZSgpICYmICFpc1JheWNhc3RPY2NsdXNpb24oKSkge1xuXHRcdFx0XHQ8bmd0LW1lc2ggI29jY2x1c2lvbk1lc2ggW2Nhc3RTaGFkb3ddPVwiY2FzdFNoYWRvdygpXCIgW3JlY2VpdmVTaGFkb3ddPVwicmVjZWl2ZVNoYWRvdygpXCI+XG5cdFx0XHRcdFx0PG5nLWNvbnRlbnQgc2VsZWN0PVwiW2RhdGEtb2NjbHVzaW9uLWdlb21ldHJ5XVwiPlxuXHRcdFx0XHRcdFx0PG5ndC1wbGFuZS1nZW9tZXRyeSAjb2NjbHVzaW9uR2VvbWV0cnkgLz5cblx0XHRcdFx0XHQ8L25nLWNvbnRlbnQ+XG5cdFx0XHRcdFx0PG5nLWNvbnRlbnQgc2VsZWN0PVwiW2RhdGEtb2NjbHVzaW9uLW1hdGVyaWFsXVwiPlxuXHRcdFx0XHRcdFx0PG5ndC1zaGFkZXItbWF0ZXJpYWxcblx0XHRcdFx0XHRcdFx0W3NpZGVdPVwiRG91YmxlU2lkZVwiXG5cdFx0XHRcdFx0XHRcdFt2ZXJ0ZXhTaGFkZXJdPVwidmVydGV4U2hhZGVyKClcIlxuXHRcdFx0XHRcdFx0XHRbZnJhZ21lbnRTaGFkZXJdPVwiZnJhZ21lbnRTaGFkZXIoKVwiXG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvbmctY29udGVudD5cblx0XHRcdFx0PC9uZ3QtbWVzaD5cblx0XHRcdH1cblx0XHQ8L25ndC1ncm91cD5cblxuXHRcdDxuZy1jb250ZW50IC8+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNIVE1MIHtcblx0b3B0aW9ucyA9IGlucHV0KGRlZmF1bHRIdG1sT3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRIdG1sT3B0aW9ucykgfSk7XG5cdHBhcmFtZXRlcnMgPSBvbWl0KHRoaXMub3B0aW9ucywgWydvY2NsdWRlJywgJ2Nhc3RTaGFkb3cnLCAncmVjZWl2ZVNoYWRvdycsICd0cmFuc2Zvcm0nXSk7XG5cblx0Z3JvdXBSZWYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxHcm91cD4+KCdncm91cCcpO1xuXHRvY2NsdXNpb25NZXNoUmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8TWVzaD4+KCdvY2NsdXNpb25NZXNoJyk7XG5cdG9jY2x1c2lvbkdlb21ldHJ5UmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8UGxhbmVHZW9tZXRyeT4+KCdvY2NsdXNpb25HZW9tZXRyeScpO1xuXG5cdG9jY2x1ZGUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ29jY2x1ZGUnKTtcblx0dHJhbnNmb3JtID0gcGljayh0aGlzLm9wdGlvbnMsICd0cmFuc2Zvcm0nKTtcblx0Y2FzdFNoYWRvdyA9IHBpY2sodGhpcy5vcHRpb25zLCAnY2FzdFNoYWRvdycpO1xuXHRyZWNlaXZlU2hhZG93ID0gcGljayh0aGlzLm9wdGlvbnMsICdyZWNlaXZlU2hhZG93Jyk7XG5cdHNjYWxlID0gcGljayh0aGlzLm9wdGlvbnMsICdzY2FsZScpO1xuXG5cdGlzUmF5Y2FzdE9jY2x1c2lvbiA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBvY2NsdWRlID0gdGhpcy5vY2NsdWRlKCk7XG5cdFx0cmV0dXJuIChvY2NsdWRlICYmIG9jY2x1ZGUgIT09ICdibGVuZGluZycpIHx8IChBcnJheS5pc0FycmF5KG9jY2x1ZGUpICYmIG9jY2x1ZGUubGVuZ3RoICYmIGlzLnJlZihvY2NsdWRlWzBdKSk7XG5cdH0pO1xuXG5cdHByaXZhdGUgc2hhZGVycyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCB0cmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybSgpO1xuXHRcdGNvbnN0IHZlcnRleFNoYWRlciA9ICF0cmFuc2Zvcm1cblx0XHRcdD8gLyogbGFuZ3VhZ2U9Z2xzbCBnbHNsICovIGBcbiAgICAgICAgICAvKlxuICAgICAgICAgICAgVGhpcyBzaGFkZXIgaXMgZnJvbSB0aGUgVEhSRUUncyBTcHJpdGVNYXRlcmlhbC5cbiAgICAgICAgICAgIFdlIG5lZWQgdG8gdHVybiB0aGUgYmFja2luZyBwbGFuZSBpbnRvIGEgU3ByaXRlXG4gICAgICAgICAgICAobWFrZSBpdCBhbHdheXMgZmFjZSB0aGUgY2FtZXJhKSBpZiBcInRyYW5zZnJvbVwiXG4gICAgICAgICAgICBpcyBmYWxzZS5cbiAgICAgICAgICAqL1xuICAgICAgICAgICNpbmNsdWRlIDxjb21tb24+XG5cbiAgICAgICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgICAgICB2ZWMyIGNlbnRlciA9IHZlYzIoMC4sIDEuKTtcbiAgICAgICAgICAgIGZsb2F0IHJvdGF0aW9uID0gMC4wO1xuXG4gICAgICAgICAgICAvLyBUaGlzIGlzIHNvbWV3aGF0IGFyYml0cmFyeSwgYnV0IGl0IHNlZW1zIHRvIHdvcmsgd2VsbFxuICAgICAgICAgICAgLy8gTmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBkZXJpdmUgdGhpcyBkeW5hbWljYWxseSBpZiBpdCBldmVuIG1hdHRlcnNcbiAgICAgICAgICAgIGZsb2F0IHNpemUgPSAwLjAzO1xuXG4gICAgICAgICAgICB2ZWM0IG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTtcbiAgICAgICAgICAgIHZlYzIgc2NhbGU7XG4gICAgICAgICAgICBzY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLngsIG1vZGVsTWF0cml4WyAwIF0ueSwgbW9kZWxNYXRyaXhbIDAgXS56ICkgKTtcbiAgICAgICAgICAgIHNjYWxlLnkgPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAxIF0ueCwgbW9kZWxNYXRyaXhbIDEgXS55LCBtb2RlbE1hdHJpeFsgMSBdLnogKSApO1xuXG4gICAgICAgICAgICBib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7XG4gICAgICAgICAgICBpZiAoIGlzUGVyc3BlY3RpdmUgKSBzY2FsZSAqPSAtIG12UG9zaXRpb24uejtcblxuICAgICAgICAgICAgdmVjMiBhbGlnbmVkUG9zaXRpb24gPSAoIHBvc2l0aW9uLnh5IC0gKCBjZW50ZXIgLSB2ZWMyKCAwLjUgKSApICkgKiBzY2FsZSAqIHNpemU7XG4gICAgICAgICAgICB2ZWMyIHJvdGF0ZWRQb3NpdGlvbjtcbiAgICAgICAgICAgIHJvdGF0ZWRQb3NpdGlvbi54ID0gY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggLSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTtcbiAgICAgICAgICAgIHJvdGF0ZWRQb3NpdGlvbi55ID0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggKyBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTtcbiAgICAgICAgICAgIG12UG9zaXRpb24ueHkgKz0gcm90YXRlZFBvc2l0aW9uO1xuXG4gICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xuICAgICAgICAgIH1cbiAgICAgIGBcblx0XHRcdDogdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3QgZnJhZ21lbnRTaGFkZXIgPSAvKiBsYW5ndWFnZT1nbHNsIGdsc2wgKi8gYFxuICAgICAgdm9pZCBtYWluKCkge1xuICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDAuMCk7XG4gICAgICB9XG4gICAgYDtcblxuXHRcdHJldHVybiB7IHZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIgfTtcblx0fSk7XG5cblx0dmVydGV4U2hhZGVyID0gcGljayh0aGlzLnNoYWRlcnMsICd2ZXJ0ZXhTaGFkZXInKTtcblx0ZnJhZ21lbnRTaGFkZXIgPSBwaWNrKHRoaXMuc2hhZGVycywgJ2ZyYWdtZW50U2hhZGVyJyk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZXh0ZW5kKHsgR3JvdXAsIE1lc2gsIFBsYW5lR2VvbWV0cnksIFNoYWRlck1hdGVyaWFsIH0pO1xuXHR9XG5cblx0cHJvdGVjdGVkIHJlYWRvbmx5IERvdWJsZVNpZGUgPSBEb3VibGVTaWRlO1xufVxuIl19
@@ -1,74 +0,0 @@
1
- import { OrthographicCamera, PerspectiveCamera, Vector2, Vector3 } from 'three';
2
- const v1 = new Vector3();
3
- const v2 = new Vector3();
4
- const v3 = new Vector3();
5
- const v4 = new Vector2();
6
- export function defaultCalculatePosition(el, camera, size) {
7
- const objectPos = v1.setFromMatrixPosition(el.matrixWorld);
8
- objectPos.project(camera);
9
- const widthHalf = size.width / 2;
10
- const heightHalf = size.height / 2;
11
- return [objectPos.x * widthHalf + widthHalf, -(objectPos.y * heightHalf) + heightHalf];
12
- }
13
- export function isObjectBehindCamera(el, camera) {
14
- const objectPos = v1.setFromMatrixPosition(el.matrixWorld);
15
- const cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);
16
- const deltaCamObj = objectPos.sub(cameraPos);
17
- const camDir = camera.getWorldDirection(v3);
18
- return deltaCamObj.angleTo(camDir) > Math.PI / 2;
19
- }
20
- export function isObjectVisible(el, camera, raycaster, occlude) {
21
- const elPos = v1.setFromMatrixPosition(el.matrixWorld);
22
- const screenPos = elPos.clone();
23
- screenPos.project(camera);
24
- v4.set(screenPos.x, screenPos.y);
25
- raycaster.setFromCamera(v4, camera);
26
- const intersects = raycaster.intersectObjects(occlude, true);
27
- if (intersects.length) {
28
- const intersectionDistance = intersects[0].distance;
29
- const pointDistance = elPos.distanceTo(raycaster.ray.origin);
30
- return pointDistance < intersectionDistance;
31
- }
32
- return true;
33
- }
34
- export function objectScale(el, camera) {
35
- if (camera instanceof OrthographicCamera)
36
- return camera.zoom;
37
- if (camera instanceof PerspectiveCamera) {
38
- const objectPos = v1.setFromMatrixPosition(el.matrixWorld);
39
- const cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);
40
- const vFOV = (camera.fov * Math.PI) / 180;
41
- const dist = objectPos.distanceTo(cameraPos);
42
- const scaleFOV = 2 * Math.tan(vFOV / 2) * dist;
43
- return 1 / scaleFOV;
44
- }
45
- return 1;
46
- }
47
- export function objectZIndex(el, camera, zIndexRange) {
48
- if (camera instanceof PerspectiveCamera || camera instanceof OrthographicCamera) {
49
- const objectPos = v1.setFromMatrixPosition(el.matrixWorld);
50
- const cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);
51
- const dist = objectPos.distanceTo(cameraPos);
52
- const A = (zIndexRange[1] - zIndexRange[0]) / (camera.far - camera.near);
53
- const B = zIndexRange[1] - A * camera.far;
54
- return Math.round(A * dist + B);
55
- }
56
- return undefined;
57
- }
58
- export function epsilon(value) {
59
- return Math.abs(value) < 1e-10 ? 0 : value;
60
- }
61
- export function getCSSMatrix(matrix, multipliers, prepend = '') {
62
- let matrix3d = 'matrix3d(';
63
- for (let i = 0; i !== 16; i++) {
64
- matrix3d += epsilon(multipliers[i] * matrix.elements[i]) + (i !== 15 ? ',' : ')');
65
- }
66
- return prepend + matrix3d;
67
- }
68
- export const getCameraCSSMatrix = ((multipliers) => {
69
- return (matrix) => getCSSMatrix(matrix, multipliers);
70
- })([1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1]);
71
- export const getObjectCSSMatrix = ((scaleMultipliers) => {
72
- return (matrix, factor) => getCSSMatrix(matrix, scaleMultipliers(factor), 'translate(-50%,-50%)');
73
- })((f) => [1 / f, 1 / f, 1 / f, 1, -1 / f, -1 / f, -1 / f, -1, 1 / f, 1 / f, 1 / f, 1, 1, 1, 1, 1]);
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWlzYy9zcmMvbGliL2h0bWwvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE2QixrQkFBa0IsRUFBRSxpQkFBaUIsRUFBYSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRXRILE1BQU0sRUFBRSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDekIsTUFBTSxFQUFFLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUN6QixNQUFNLEVBQUUsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ3pCLE1BQU0sRUFBRSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFFekIsTUFBTSxVQUFVLHdCQUF3QixDQUFDLEVBQVksRUFBRSxNQUFjLEVBQUUsSUFBdUM7SUFDN0csTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMzRCxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7QUFDeEYsQ0FBQztBQUlELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxFQUFZLEVBQUUsTUFBYztJQUNoRSxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzNELE1BQU0sU0FBUyxH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WUFBWSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztBQUMvRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUV6RCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUMsZ0JBQXlDLEVBQUUsRUFBRTtJQUNoRixPQUFPLENBQUMsTUFBZSxFQUFFLE1BQWMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0FBQ3BILENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENhbWVyYSwgTWF0cml4NCwgT2JqZWN0M0QsIE9ydGhvZ3JhcGhpY0NhbWVyYSwgUGVyc3BlY3RpdmVDYW1lcmEsIFJheWNhc3RlciwgVmVjdG9yMiwgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcblxuY29uc3QgdjEgPSBuZXcgVmVjdG9yMygpO1xuY29uc3QgdjIgPSBuZXcgVmVjdG9yMygpO1xuY29uc3QgdjMgPSBuZXcgVmVjdG9yMygpO1xuY29uc3QgdjQgPSBuZXcgVmVjdG9yMigpO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdENhbGN1bGF0ZVBvc2l0aW9uKGVsOiBPYmplY3QzRCwgY2FtZXJhOiBDYW1lcmEsIHNpemU6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSkge1xuXHRjb25zdCBvYmplY3RQb3MgPSB2MS5zZXRGcm9tTWF0cml4UG9zaXRpb24oZWwubWF0cml4V29ybGQpO1xuXHRvYmplY3RQb3MucHJvamVjdChjYW1lcmEpO1xuXHRjb25zdCB3aWR0aEhhbGYgPSBzaXplLndpZHRoIC8gMjtcblx0Y29uc3QgaGVpZ2h0SGFsZiA9IHNpemUuaGVpZ2h0IC8gMjtcblx0cmV0dXJuIFtvYmplY3RQb3MueCAqIHdpZHRoSGFsZiArIHdpZHRoSGFsZiwgLShvYmplY3RQb3MueSAqIGhlaWdodEhhbGYpICsgaGVpZ2h0SGFsZl07XG59XG5cbmV4cG9ydCB0eXBlIENhbGN1bGF0ZVBvc2l0aW9uID0gdHlwZW9mIGRlZmF1bHRDYWxjdWxhdGVQb3NpdGlvbjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0QmVoaW5kQ2FtZXJhKGVsOiBPYmplY3QzRCwgY2FtZXJhOiBDYW1lcmEpIHtcblx0Y29uc3Qgb2JqZWN0UG9zID0gdjEuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGVsLm1hdHJpeFdvcmxkKTtcblx0Y29uc3QgY2FtZXJhUG9zID0gdjIuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGNhbWVyYS5tYXRyaXhXb3JsZCk7XG5cdGNvbnN0IGRlbHRhQ2FtT2JqID0gb2JqZWN0UG9zLnN1YihjYW1lcmFQb3MpO1xuXHRjb25zdCBjYW1EaXIgPSBjYW1lcmEuZ2V0V29ybGREaXJlY3Rpb24odjMpO1xuXHRyZXR1cm4gZGVsdGFDYW1PYmouYW5nbGVUbyhjYW1EaXIpID4gTWF0aC5QSSAvIDI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdFZpc2libGUoZWw6IE9iamVjdDNELCBjYW1lcmE6IENhbWVyYSwgcmF5Y2FzdGVyOiBSYXljYXN0ZXIsIG9jY2x1ZGU6IE9iamVjdDNEW10pIHtcblx0Y29uc3QgZWxQb3MgPSB2MS5zZXRGcm9tTWF0cml4UG9zaXRpb24oZWwubWF0cml4V29ybGQpO1xuXHRjb25zdCBzY3JlZW5Qb3MgPSBlbFBvcy5jbG9uZSgpO1xuXHRzY3JlZW5Qb3MucHJvamVjdChjYW1lcmEpO1xuXHR2NC5zZXQoc2NyZWVuUG9zLngsIHNjcmVlblBvcy55KTtcblx0cmF5Y2FzdGVyLnNldEZyb21DYW1lcmEodjQsIGNhbWVyYSk7XG5cdGNvbnN0IGludGVyc2VjdHMgPSByYXljYXN0ZXIuaW50ZXJzZWN0T2JqZWN0cyhvY2NsdWRlLCB0cnVlKTtcblx0aWYgKGludGVyc2VjdHMubGVuZ3RoKSB7XG5cdFx0Y29uc3QgaW50ZXJzZWN0aW9uRGlzdGFuY2UgPSBpbnRlcnNlY3RzWzBdLmRpc3RhbmNlO1xuXHRcdGNvbnN0IHBvaW50RGlzdGFuY2UgPSBlbFBvcy5kaXN0YW5jZVRvKHJheWNhc3Rlci5yYXkub3JpZ2luKTtcblx0XHRyZXR1cm4gcG9pbnREaXN0YW5jZSA8IGludGVyc2VjdGlvbkRpc3RhbmNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0U2NhbGUoZWw6IE9iamVjdDNELCBjYW1lcmE6IENhbWVyYSkge1xuXHRpZiAoY2FtZXJhIGluc3RhbmNlb2YgT3J0aG9ncmFwaGljQ2FtZXJhKSByZXR1cm4gY2FtZXJhLnpvb207XG5cdGlmIChjYW1lcmEgaW5zdGFuY2VvZiBQZXJzcGVjdGl2ZUNhbWVyYSkge1xuXHRcdGNvbnN0IG9iamVjdFBvcyA9IHYxLnNldEZyb21NYXRyaXhQb3NpdGlvbihlbC5tYXRyaXhXb3JsZCk7XG5cdFx0Y29uc3QgY2FtZXJhUG9zID0gdjIuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGNhbWVyYS5tYXRyaXhXb3JsZCk7XG5cdFx0Y29uc3QgdkZPViA9IChjYW1lcmEuZm92ICogTWF0aC5QSSkgLyAxODA7XG5cdFx0Y29uc3QgZGlzdCA9IG9iamVjdFBvcy5kaXN0YW5jZVRvKGNhbWVyYVBvcyk7XG5cdFx0Y29uc3Qgc2NhbGVGT1YgPSAyICogTWF0aC50YW4odkZPViAvIDIpICogZGlzdDtcblx0XHRyZXR1cm4gMSAvIHNjYWxlRk9WO1xuXHR9XG5cdHJldHVybiAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0WkluZGV4KGVsOiBPYmplY3QzRCwgY2FtZXJhOiBDYW1lcmEsIHpJbmRleFJhbmdlOiBBcnJheTxudW1iZXI+KSB7XG5cdGlmIChjYW1lcmEgaW5zdGFuY2VvZiBQZXJzcGVjdGl2ZUNhbWVyYSB8fCBjYW1lcmEgaW5zdGFuY2VvZiBPcnRob2dyYXBoaWNDYW1lcmEpIHtcblx0XHRjb25zdCBvYmplY3RQb3MgPSB2MS5zZXRGcm9tTWF0cml4UG9zaXRpb24oZWwubWF0cml4V29ybGQpO1xuXHRcdGNvbnN0IGNhbWVyYVBvcyA9IHYyLnNldEZyb21NYXRyaXhQb3NpdGlvbihjYW1lcmEubWF0cml4V29ybGQpO1xuXHRcdGNvbnN0IGRpc3QgPSBvYmplY3RQb3MuZGlzdGFuY2VUbyhjYW1lcmFQb3MpO1xuXHRcdGNvbnN0IEEgPSAoekluZGV4UmFuZ2VbMV0gLSB6SW5kZXhSYW5nZVswXSkgLyAoY2FtZXJhLmZhciAtIGNhbWVyYS5uZWFyKTtcblx0XHRjb25zdCBCID0gekluZGV4UmFuZ2VbMV0gLSBBICogY2FtZXJhLmZhcjtcblx0XHRyZXR1cm4gTWF0aC5yb3VuZChBICogZGlzdCArIEIpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcHNpbG9uKHZhbHVlOiBudW1iZXIpIHtcblx0cmV0dXJuIE1hdGguYWJzKHZhbHVlKSA8IDFlLTEwID8gMCA6IHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q1NTTWF0cml4KG1hdHJpeDogTWF0cml4NCwgbXVsdGlwbGllcnM6IG51bWJlcltdLCBwcmVwZW5kID0gJycpIHtcblx0bGV0IG1hdHJpeDNkID0gJ21hdHJpeDNkKCc7XG5cdGZvciAobGV0IGkgPSAwOyBpICE9PSAxNjsgaSsrKSB7XG5cdFx0bWF0cml4M2QgKz0gZXBzaWxvbihtdWx0aXBsaWVyc1tpXSAqIG1hdHJpeC5lbGVtZW50c1tpXSkgKyAoaSAhPT0gMTUgPyAnLCcgOiAnKScpO1xuXHR9XG5cdHJldHVybiBwcmVwZW5kICsgbWF0cml4M2Q7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRDYW1lcmFDU1NNYXRyaXggPSAoKG11bHRpcGxpZXJzOiBudW1iZXJbXSkgPT4ge1xuXHRyZXR1cm4gKG1hdHJpeDogTWF0cml4NCkgPT4gZ2V0Q1NTTWF0cml4KG1hdHJpeCwgbXVsdGlwbGllcnMpO1xufSkoWzEsIC0xLCAxLCAxLCAxLCAtMSwgMSwgMSwgMSwgLTEsIDEsIDEsIDEsIC0xLCAxLCAxXSk7XG5cbmV4cG9ydCBjb25zdCBnZXRPYmplY3RDU1NNYXRyaXggPSAoKHNjYWxlTXVsdGlwbGllcnM6IChuOiBudW1iZXIpID0+IG51bWJlcltdKSA9PiB7XG5cdHJldHVybiAobWF0cml4OiBNYXRyaXg0LCBmYWN0b3I6IG51bWJlcikgPT4gZ2V0Q1NTTWF0cml4KG1hdHJpeCwgc2NhbGVNdWx0aXBsaWVycyhmYWN0b3IpLCAndHJhbnNsYXRlKC01MCUsLTUwJSknKTtcbn0pKChmOiBudW1iZXIpID0+IFsxIC8gZiwgMSAvIGYsIDEgLyBmLCAxLCAtMSAvIGYsIC0xIC8gZiwgLTEgLyBmLCAtMSwgMSAvIGYsIDEgLyBmLCAxIC8gZiwgMSwgMSwgMSwgMSwgMV0pO1xuIl19