angular-three-soba 2.0.0-beta.7 → 2.0.0-beta.8

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 (296) hide show
  1. package/abstractions/billboard/billboard.d.ts +11 -7
  2. package/abstractions/detailed/detailed.d.ts +26 -0
  3. package/abstractions/edges/edges.d.ts +23 -11
  4. package/abstractions/grid/grid.d.ts +41 -50
  5. package/abstractions/index.d.ts +1 -7
  6. package/abstractions/text/text.d.ts +10 -4
  7. package/abstractions/text-3d/text-3d.d.ts +47 -40
  8. package/cameras/camera/camera-content.d.ts +1 -1
  9. package/cameras/camera/camera.d.ts +16 -13
  10. package/cameras/cube-camera/cube-camera.d.ts +50 -23
  11. package/cameras/index.d.ts +0 -1
  12. package/cameras/orthographic-camera/orthographic-camera.d.ts +29 -18
  13. package/cameras/perspective-camera/perspective-camera.d.ts +10 -1
  14. package/controls/orbit-controls/orbit-controls.d.ts +30 -13
  15. package/esm2022/abstractions/billboard/billboard.mjs +36 -33
  16. package/esm2022/abstractions/detailed/detailed.mjs +64 -0
  17. package/esm2022/abstractions/edges/edges.mjs +58 -63
  18. package/esm2022/abstractions/grid/grid.mjs +140 -110
  19. package/esm2022/abstractions/index.mjs +2 -8
  20. package/esm2022/abstractions/text/text.mjs +123 -122
  21. package/esm2022/abstractions/text-3d/text-3d.mjs +119 -121
  22. package/esm2022/cameras/camera/camera-content.mjs +5 -6
  23. package/esm2022/cameras/camera/camera.mjs +48 -42
  24. package/esm2022/cameras/cube-camera/cube-camera.mjs +129 -99
  25. package/esm2022/cameras/index.mjs +1 -2
  26. package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +78 -75
  27. package/esm2022/cameras/perspective-camera/perspective-camera.mjs +25 -26
  28. package/esm2022/controls/orbit-controls/orbit-controls.mjs +94 -90
  29. package/esm2022/loaders/gltf-loader/gltf-loader.mjs +3 -6
  30. package/esm2022/loaders/loader/loader.mjs +92 -87
  31. package/esm2022/loaders/progress/progress.mjs +1 -1
  32. package/esm2022/loaders/texture-loader/texture-loader.mjs +4 -4
  33. package/esm2022/materials/index.mjs +2 -1
  34. package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +60 -51
  35. package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +239 -255
  36. package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +99 -97
  37. package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +167 -146
  38. package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +44 -42
  39. package/esm2022/materials/point-material/point-material.mjs +46 -0
  40. package/esm2022/misc/animations/animations.mjs +20 -16
  41. package/esm2022/misc/bake-shadows/bake-shadows.mjs +13 -13
  42. package/esm2022/misc/caustics/caustics.mjs +387 -0
  43. package/esm2022/misc/decal/decal.mjs +187 -0
  44. package/esm2022/misc/depth-buffer/depth-buffer.mjs +33 -35
  45. package/esm2022/misc/example/example.mjs +160 -0
  46. package/esm2022/misc/fbo/fbo.mjs +35 -35
  47. package/esm2022/misc/html/html-wrapper.mjs +478 -0
  48. package/esm2022/misc/html/html.mjs +304 -0
  49. package/esm2022/misc/index.mjs +10 -1
  50. package/esm2022/misc/sampler/sampler.mjs +142 -0
  51. package/esm2022/misc/shadow/shadow.mjs +111 -0
  52. package/esm2022/misc/stats-gl/stats-gl.mjs +61 -0
  53. package/esm2022/misc/trail/trail.mjs +209 -0
  54. package/esm2022/misc/trail-texture/inject-trail-texture.mjs +17 -0
  55. package/esm2022/misc/trail-texture/trail-texture.mjs +106 -0
  56. package/esm2022/modifiers/angular-three-soba-modifiers.mjs +5 -0
  57. package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +64 -0
  58. package/esm2022/modifiers/index.mjs +2 -0
  59. package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +44 -0
  60. package/esm2022/performances/adaptive-events/adaptive-events.mjs +27 -0
  61. package/esm2022/performances/angular-three-soba-performances.mjs +5 -0
  62. package/esm2022/performances/index.mjs +6 -0
  63. package/esm2022/performances/points/points-input.mjs +64 -0
  64. package/esm2022/performances/points/points.mjs +329 -0
  65. package/esm2022/performances/points/position-point.mjs +54 -0
  66. package/esm2022/performances/segments/segment-object.mjs +9 -0
  67. package/esm2022/performances/segments/segments.mjs +182 -0
  68. package/esm2022/shaders/blur-pass/blur-pass.mjs +1 -1
  69. package/esm2022/shaders/caustics/caustics-material.mjs +130 -0
  70. package/esm2022/shaders/caustics/caustics-projection-material.mjs +31 -0
  71. package/esm2022/shaders/convolution-material/convolution-material.mjs +1 -1
  72. package/esm2022/shaders/discard-material/discard-material.mjs +1 -1
  73. package/esm2022/shaders/grid-material/grid-material.mjs +29 -14
  74. package/esm2022/shaders/index.mjs +5 -3
  75. package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +42 -41
  76. package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +1 -1
  77. package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +2 -2
  78. package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +4 -4
  79. package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +1 -1
  80. package/esm2022/shaders/shader-material/shader-material.mjs +1 -1
  81. package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +17 -25
  82. package/esm2022/shaders/sparkles-material/sparkles-material.mjs +32 -46
  83. package/esm2022/shaders/spot-light-material/spot-light-material.mjs +7 -7
  84. package/esm2022/shaders/star-field-material/star-field-material.mjs +3 -2
  85. package/esm2022/shaders/wireframe-material/wireframe-material.mjs +247 -0
  86. package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +160 -176
  87. package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +1 -1
  88. package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +126 -128
  89. package/esm2022/staging/backdrop/backdrop.mjs +77 -0
  90. package/esm2022/staging/bb-anchor/bb-anchor.mjs +70 -0
  91. package/esm2022/staging/bounds/bounds.mjs +144 -143
  92. package/esm2022/staging/camera-shake/camera-shake.mjs +86 -80
  93. package/esm2022/staging/center/center.mjs +106 -91
  94. package/esm2022/staging/cloud/cloud.mjs +118 -124
  95. package/esm2022/staging/contact-shadows/contact-shadows.mjs +131 -134
  96. package/esm2022/staging/environment/assets.mjs +12 -12
  97. package/esm2022/staging/environment/environment-cube.mjs +28 -30
  98. package/esm2022/staging/environment/environment-ground.mjs +18 -20
  99. package/esm2022/staging/environment/environment-input.mjs +97 -84
  100. package/esm2022/staging/environment/environment-map.mjs +33 -33
  101. package/esm2022/staging/environment/environment-portal.mjs +75 -97
  102. package/esm2022/staging/environment/environment.mjs +34 -51
  103. package/esm2022/staging/environment/utils.mjs +35 -14
  104. package/esm2022/staging/float/float.mjs +70 -58
  105. package/esm2022/staging/index.mjs +7 -3
  106. package/esm2022/staging/matcap-texture/matcap-texture.mjs +64 -0
  107. package/esm2022/staging/normal-texture/normal-texture.mjs +53 -0
  108. package/esm2022/staging/sky/sky.mjs +85 -80
  109. package/esm2022/staging/sparkles/sparkles.mjs +108 -105
  110. package/esm2022/staging/spot-light/shadow-mesh-input.mjs +63 -0
  111. package/esm2022/staging/spot-light/shadow-mesh.mjs +266 -0
  112. package/esm2022/staging/spot-light/spot-light-input.mjs +67 -58
  113. package/esm2022/staging/spot-light/spot-light.mjs +51 -64
  114. package/esm2022/staging/spot-light/volumetric-mesh.mjs +61 -78
  115. package/esm2022/staging/stage/stage.mjs +304 -290
  116. package/esm2022/staging/stars/stars.mjs +101 -102
  117. package/esm2022/staging/wireframe/wireframe-input.mjs +191 -0
  118. package/esm2022/staging/wireframe/wireframe.mjs +224 -0
  119. package/esm2022/utils/angular-three-soba-utils.mjs +5 -0
  120. package/esm2022/utils/content/content.mjs +15 -0
  121. package/esm2022/utils/index.mjs +2 -0
  122. package/fesm2022/angular-three-soba-abstractions.mjs +505 -2087
  123. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  124. package/fesm2022/angular-three-soba-cameras.mjs +302 -259
  125. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  126. package/fesm2022/angular-three-soba-controls.mjs +93 -88
  127. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  128. package/fesm2022/angular-three-soba-loaders.mjs +94 -90
  129. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  130. package/fesm2022/angular-three-soba-materials.mjs +655 -590
  131. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  132. package/fesm2022/angular-three-soba-misc.mjs +2198 -89
  133. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  134. package/fesm2022/angular-three-soba-modifiers.mjs +71 -0
  135. package/fesm2022/angular-three-soba-modifiers.mjs.map +1 -0
  136. package/fesm2022/angular-three-soba-performances.mjs +697 -0
  137. package/fesm2022/angular-three-soba-performances.mjs.map +1 -0
  138. package/fesm2022/angular-three-soba-shaders.mjs +501 -264
  139. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  140. package/fesm2022/angular-three-soba-staging.mjs +2870 -2555
  141. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  142. package/fesm2022/angular-three-soba-utils.mjs +22 -0
  143. package/fesm2022/angular-three-soba-utils.mjs.map +1 -0
  144. package/loaders/gltf-loader/gltf-loader.d.ts +4 -3
  145. package/loaders/loader/loader.d.ts +19 -17
  146. package/loaders/progress/progress.d.ts +1 -1
  147. package/loaders/texture-loader/texture-loader.d.ts +2 -2
  148. package/materials/index.d.ts +1 -0
  149. package/materials/mesh-distort-material/mesh-distort-material.d.ts +25 -15
  150. package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +74 -56
  151. package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +33 -21
  152. package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +55 -39
  153. package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +19 -10
  154. package/materials/point-material/point-material.d.ts +24 -0
  155. package/metadata.json +1 -0
  156. package/misc/animations/animations.d.ts +6 -4
  157. package/misc/caustics/caustics.d.ts +87 -0
  158. package/misc/decal/decal.d.ts +49 -0
  159. package/misc/depth-buffer/depth-buffer.d.ts +2 -2
  160. package/misc/example/example.d.ts +81 -0
  161. package/misc/fbo/fbo.d.ts +2 -2
  162. package/misc/html/html-wrapper.d.ts +559 -0
  163. package/misc/html/html.d.ts +214 -0
  164. package/misc/index.d.ts +9 -0
  165. package/misc/sampler/sampler.d.ts +67 -0
  166. package/misc/shadow/shadow.d.ts +37 -0
  167. package/misc/stats-gl/stats-gl.d.ts +24 -0
  168. package/misc/trail/trail.d.ts +57 -0
  169. package/misc/trail-texture/inject-trail-texture.d.ts +9 -0
  170. package/misc/trail-texture/trail-texture.d.ts +50 -0
  171. package/modifiers/README.md +3 -0
  172. package/modifiers/curve-modifier/curve-modifier.d.ts +23 -0
  173. package/modifiers/index.d.ts +1 -0
  174. package/package.json +30 -22
  175. package/performances/README.md +3 -0
  176. package/performances/adaptive-dpr/adaptive-dpr.d.ts +14 -0
  177. package/{performance/adaptive → performances/adaptive-events}/adaptive-events.d.ts +3 -0
  178. package/performances/index.d.ts +5 -0
  179. package/performances/points/points-input.d.ts +32 -0
  180. package/performances/points/points.d.ts +92 -0
  181. package/{performance/instances/position-mesh.d.ts → performances/points/position-point.d.ts} +4 -3
  182. package/performances/segments/segment-object.d.ts +7 -0
  183. package/performances/segments/segments.d.ts +124 -0
  184. package/shaders/grid-material/grid-material.d.ts +33 -0
  185. package/shaders/index.d.ts +4 -2
  186. package/shaders/mesh-distort-material/mesh-distort-material.d.ts +146 -1
  187. package/shaders/mesh-transmission-material/mesh-transmission-material.d.ts +1 -1
  188. package/shaders/shader-material/shader-material.d.ts +2 -2
  189. package/shaders/soft-shadow-material/soft-shadow-material.d.ts +10 -1
  190. package/shaders/sparkles-material/sparkles-material.d.ts +15 -1
  191. package/shaders/spot-light-material/spot-light-material.d.ts +11 -2
  192. package/shaders/star-field-material/star-field-material.d.ts +11 -1
  193. package/shaders/wireframe-material/wireframe-material.d.ts +58 -0
  194. package/staging/accumulative-shadows/accumulative-shadows.d.ts +89 -39
  195. package/staging/accumulative-shadows/randomized-lights.d.ts +40 -27
  196. package/staging/backdrop/backdrop.d.ts +30 -0
  197. package/staging/bb-anchor/bb-anchor.d.ts +27 -0
  198. package/staging/bounds/bounds.d.ts +100 -24
  199. package/staging/camera-shake/camera-shake.d.ts +30 -19
  200. package/staging/center/center.d.ts +43 -35
  201. package/staging/cloud/cloud.d.ts +26 -23
  202. package/staging/contact-shadows/contact-shadows.d.ts +41 -28
  203. package/staging/environment/assets.d.ts +9 -9
  204. package/staging/environment/environment-cube.d.ts +9 -5
  205. package/staging/environment/environment-ground.d.ts +7 -7
  206. package/staging/environment/environment-input.d.ts +36 -36
  207. package/staging/environment/environment-map.d.ts +10 -5
  208. package/staging/environment/environment-portal.d.ts +10 -5
  209. package/staging/environment/environment.d.ts +0 -4
  210. package/staging/environment/utils.d.ts +2 -2
  211. package/staging/float/float.d.ts +14 -10
  212. package/staging/index.d.ts +6 -2
  213. package/staging/matcap-texture/matcap-texture.d.ts +13 -0
  214. package/staging/normal-texture/normal-texture.d.ts +16 -0
  215. package/staging/sky/sky.d.ts +28 -21
  216. package/staging/sparkles/sparkles.d.ts +35 -21
  217. package/staging/spot-light/shadow-mesh-input.d.ts +29 -0
  218. package/staging/spot-light/shadow-mesh.d.ts +37 -0
  219. package/staging/spot-light/spot-light-input.d.ts +25 -25
  220. package/staging/spot-light/spot-light.d.ts +31 -15
  221. package/staging/spot-light/volumetric-mesh.d.ts +15 -9
  222. package/staging/stage/stage.d.ts +88 -63
  223. package/staging/stars/stars.d.ts +27 -16
  224. package/staging/wireframe/wireframe-input.d.ts +65 -0
  225. package/staging/wireframe/wireframe.d.ts +28 -0
  226. package/utils/README.md +3 -0
  227. package/utils/content/content.d.ts +8 -0
  228. package/utils/index.d.ts +1 -0
  229. package/web-types.json +1 -0
  230. package/abstractions/catmull-rom-line/catmull-rom-line.d.ts +0 -25
  231. package/abstractions/cubic-bezier-line/cubic-bezier-line.d.ts +0 -25
  232. package/abstractions/gizmo-helper/gizmo-helper.d.ts +0 -34
  233. package/abstractions/gizmo-helper/gizmo-viewcube/constants.d.ts +0 -12
  234. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +0 -22
  235. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +0 -30
  236. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +0 -32
  237. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +0 -14
  238. package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +0 -47
  239. package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +0 -40
  240. package/abstractions/line/line-input.d.ts +0 -42
  241. package/abstractions/line/line.d.ts +0 -35
  242. package/abstractions/quadratic-bezier-line/quadratic-bezier-line.d.ts +0 -23
  243. package/esm2022/abstractions/catmull-rom-line/catmull-rom-line.mjs +0 -131
  244. package/esm2022/abstractions/cubic-bezier-line/cubic-bezier-line.mjs +0 -113
  245. package/esm2022/abstractions/gizmo-helper/gizmo-helper.mjs +0 -210
  246. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/constants.mjs +0 -31
  247. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -95
  248. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -155
  249. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +0 -62
  250. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +0 -80
  251. package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -206
  252. package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +0 -273
  253. package/esm2022/abstractions/line/line-input.mjs +0 -113
  254. package/esm2022/abstractions/line/line.mjs +0 -165
  255. package/esm2022/abstractions/quadratic-bezier-line/quadratic-bezier-line.mjs +0 -128
  256. package/esm2022/performance/adaptive/adaptive-dpr.mjs +0 -46
  257. package/esm2022/performance/adaptive/adaptive-events.mjs +0 -31
  258. package/esm2022/performance/angular-three-soba-performance.mjs +0 -5
  259. package/esm2022/performance/detailed/detailed.mjs +0 -61
  260. package/esm2022/performance/index.mjs +0 -7
  261. package/esm2022/performance/instances/instance.mjs +0 -48
  262. package/esm2022/performance/instances/instances.mjs +0 -189
  263. package/esm2022/performance/instances/position-mesh.mjs +0 -52
  264. package/esm2022/performance/stats/stats.mjs +0 -79
  265. package/esm2022/shaders/caustics-material/caustics-material.mjs +0 -128
  266. package/esm2022/shaders/caustics-material/caustics-projection-material.mjs +0 -33
  267. package/esm2022/staging/caustics/caustisc.mjs +0 -384
  268. package/esm2022/staging/spot-light/spot-light-shadow-mesh-input.mjs +0 -57
  269. package/esm2022/staging/spot-light/spot-light-shadow-mesh.mjs +0 -258
  270. package/fesm2022/angular-three-soba-performance.mjs +0 -487
  271. package/fesm2022/angular-three-soba-performance.mjs.map +0 -1
  272. package/performance/README.md +0 -3
  273. package/performance/adaptive/adaptive-dpr.d.ts +0 -8
  274. package/performance/detailed/detailed.d.ts +0 -20
  275. package/performance/index.d.ts +0 -6
  276. package/performance/instances/instance.d.ts +0 -9
  277. package/performance/instances/instances.d.ts +0 -35
  278. package/performance/stats/stats.d.ts +0 -18
  279. package/plugin/generators.json +0 -19
  280. package/plugin/libs/plugin/README.md +0 -11
  281. package/plugin/package.json +0 -9
  282. package/plugin/src/generators/init/compat.d.ts +0 -2
  283. package/plugin/src/generators/init/compat.js +0 -6
  284. package/plugin/src/generators/init/compat.js.map +0 -1
  285. package/plugin/src/generators/init/init.d.ts +0 -7
  286. package/plugin/src/generators/init/init.js +0 -28
  287. package/plugin/src/generators/init/init.js.map +0 -1
  288. package/plugin/src/generators/init/schema.json +0 -6
  289. package/plugin/src/index.d.ts +0 -1
  290. package/plugin/src/index.js +0 -6
  291. package/plugin/src/index.js.map +0 -1
  292. package/staging/caustics/caustisc.d.ts +0 -70
  293. package/staging/spot-light/spot-light-shadow-mesh-input.d.ts +0 -29
  294. package/staging/spot-light/spot-light-shadow-mesh.d.ts +0 -38
  295. /package/shaders/{caustics-material → caustics}/caustics-material.d.ts +0 -0
  296. /package/shaders/{caustics-material → caustics}/caustics-projection-material.d.ts +0 -0
@@ -1,258 +0,0 @@
1
- import { NgIf } from '@angular/common';
2
- import { CUSTOM_ELEMENTS_SCHEMA, Component, computed, effect, inject, runInInjectionContext, } from '@angular/core';
3
- import { assertInjectionContext, checkUpdate, extend, injectBeforeRender, injectNgtRef, requestAnimationFrameInInjectionContext, } from 'angular-three';
4
- import * as THREE from 'three';
5
- import { Mesh, MeshBasicMaterial, PlaneGeometry } from 'three';
6
- import { FullScreenQuad } from 'three-stdlib';
7
- import { NGTS_SPOT_LIGHT_API } from './spot-light';
8
- import { NgtsSpotLightShadowMeshInput } from './spot-light-shadow-mesh-input';
9
- import * as i0 from "@angular/core";
10
- const isSpotLight = (child) => {
11
- return child?.isSpotLight;
12
- };
13
- function injectShadowMeshCommon(spotLightRef, meshRef, width, height, distance, injector) {
14
- injector = assertInjectionContext(injectShadowMeshCommon, injector);
15
- runInInjectionContext(injector, () => {
16
- const pos = new THREE.Vector3();
17
- const dir = new THREE.Vector3();
18
- requestAnimationFrameInInjectionContext(() => {
19
- effect(() => {
20
- const spotLight = spotLightRef.nativeElement;
21
- if (!spotLight)
22
- return;
23
- if (isSpotLight(spotLight)) {
24
- spotLight.shadow.mapSize.set(width(), height());
25
- if (spotLight.shadow.map) {
26
- spotLight.shadow.map.setSize(width(), height());
27
- }
28
- spotLight.shadow.needsUpdate = true;
29
- }
30
- else {
31
- throw new Error('<ngts-spot-light-shadow> must be a child of a <ngts-spot-light>');
32
- }
33
- });
34
- });
35
- injectBeforeRender(() => {
36
- const spotLight = spotLightRef.nativeElement;
37
- const mesh = meshRef.nativeElement;
38
- if (!spotLight)
39
- return;
40
- const A = spotLight.position;
41
- const B = spotLight.target.position;
42
- dir.copy(B).sub(A);
43
- const len = dir.length();
44
- dir.normalize().multiplyScalar(len * distance());
45
- pos.copy(A).add(dir);
46
- if (mesh) {
47
- mesh.position.copy(pos);
48
- mesh.lookAt(spotLight.target.position);
49
- }
50
- });
51
- });
52
- }
53
- extend({ Mesh, PlaneGeometry, MeshBasicMaterial });
54
- class NgtsSpotLightShadowMeshNoShader {
55
- #spotLightApi;
56
- constructor() {
57
- this.shadowMeshInput = inject(NgtsSpotLightShadowMeshInput);
58
- this.#spotLightApi = inject(NGTS_SPOT_LIGHT_API);
59
- this.meshRef = injectNgtRef();
60
- this.DoubleSide = THREE.DoubleSide;
61
- this.debug = this.#spotLightApi.debug;
62
- this.shadowMeshInput.patch({ distance: 0.4, alphaTest: 0.5, width: 512, height: 512, scale: 1 });
63
- requestAnimationFrameInInjectionContext(() => {
64
- effect(() => {
65
- const map = this.shadowMeshInput.shadowMeshMap();
66
- if (map) {
67
- map.wrapS = map.wrapT = THREE.RepeatWrapping;
68
- checkUpdate(map);
69
- }
70
- });
71
- });
72
- injectShadowMeshCommon(this.#spotLightApi.spotLight, this.meshRef, this.shadowMeshInput.shadowMeshWidth, this.shadowMeshInput.shadowMeshHeight, this.shadowMeshInput.shadowMeshDistance);
73
- }
74
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtsSpotLightShadowMeshNoShader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
75
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: NgtsSpotLightShadowMeshNoShader, isStandalone: true, selector: "ngts-spot-light-shadow-mesh-no-shader", ngImport: i0, template: `
76
- <ngt-mesh [ref]="meshRef" [scale]="shadowMeshInput.shadowMeshScale()" [castShadow]="true">
77
- <ngt-plane-geometry />
78
- <ngt-mesh-basic-material
79
- [transparent]="true"
80
- [side]="DoubleSide"
81
- [alphaTest]="shadowMeshInput.shadowMeshAlphaTest()"
82
- [alphaMap]="shadowMeshInput.shadowMeshMap()"
83
- [opacity]="debug() ? 1 : 0"
84
- >
85
- <ng-content />
86
- </ngt-mesh-basic-material>
87
- </ngt-mesh>
88
- `, isInline: true }); }
89
- }
90
- export { NgtsSpotLightShadowMeshNoShader };
91
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtsSpotLightShadowMeshNoShader, decorators: [{
92
- type: Component,
93
- args: [{
94
- selector: 'ngts-spot-light-shadow-mesh-no-shader',
95
- standalone: true,
96
- template: `
97
- <ngt-mesh [ref]="meshRef" [scale]="shadowMeshInput.shadowMeshScale()" [castShadow]="true">
98
- <ngt-plane-geometry />
99
- <ngt-mesh-basic-material
100
- [transparent]="true"
101
- [side]="DoubleSide"
102
- [alphaTest]="shadowMeshInput.shadowMeshAlphaTest()"
103
- [alphaMap]="shadowMeshInput.shadowMeshMap()"
104
- [opacity]="debug() ? 1 : 0"
105
- >
106
- <ng-content />
107
- </ngt-mesh-basic-material>
108
- </ngt-mesh>
109
- `,
110
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
111
- }]
112
- }], ctorParameters: function () { return []; } });
113
- class NgtsSpotLightShadowMeshShader {
114
- #spotLightApi;
115
- #fsQuad;
116
- constructor() {
117
- this.shadowMeshInput = inject(NgtsSpotLightShadowMeshInput);
118
- this.meshRef = injectNgtRef();
119
- this.#spotLightApi = inject(NGTS_SPOT_LIGHT_API);
120
- this.DoubleSide = THREE.DoubleSide;
121
- this.RepeatWrapping = THREE.RepeatWrapping;
122
- this.debug = this.#spotLightApi.debug;
123
- this.renderTarget = computed(() => {
124
- const width = this.shadowMeshInput.shadowMeshWidth();
125
- const height = this.shadowMeshInput.shadowMeshHeight();
126
- return new THREE.WebGLRenderTarget(width, height, {
127
- format: THREE.RGBAFormat,
128
- encoding: THREE.LinearEncoding,
129
- stencilBuffer: false,
130
- // depthTexture: null!
131
- });
132
- });
133
- this.uniforms = {
134
- uShadowMap: { value: this.shadowMeshInput.shadowMeshMap() },
135
- uTime: { value: 0 },
136
- };
137
- this.#fsQuad = computed(() => {
138
- const shader = this.shadowMeshInput.shadowMeshShader();
139
- if (!shader)
140
- return null;
141
- return new FullScreenQuad(new THREE.ShaderMaterial({
142
- uniforms: this.uniforms,
143
- vertexShader: /* glsl */ `
144
- varying vec2 vUv;
145
-
146
- void main() {
147
- vUv = uv;
148
- gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
149
- }
150
- `,
151
- fragmentShader: shader,
152
- }));
153
- });
154
- this.shadowMeshInput.patch({ distance: 0.4, alphaTest: 0.5, width: 512, height: 512, scale: 4 });
155
- injectShadowMeshCommon(this.#spotLightApi.spotLight, this.meshRef, this.shadowMeshInput.shadowMeshWidth, this.shadowMeshInput.shadowMeshHeight, this.shadowMeshInput.shadowMeshDistance);
156
- injectBeforeRender(({ delta, gl }) => {
157
- this.uniforms.uTime.value += delta;
158
- const fsQuad = this.#fsQuad();
159
- const renderTarget = this.renderTarget();
160
- if (fsQuad && renderTarget) {
161
- gl.setRenderTarget(renderTarget);
162
- fsQuad.render(gl);
163
- gl.setRenderTarget(null);
164
- }
165
- });
166
- requestAnimationFrameInInjectionContext(() => {
167
- effect(() => {
168
- const map = this.shadowMeshInput.shadowMeshMap();
169
- if (map) {
170
- this.uniforms.uShadowMap.value = map;
171
- }
172
- });
173
- effect((onCleanup) => {
174
- const fsQuad = this.#fsQuad();
175
- onCleanup(() => {
176
- if (fsQuad) {
177
- fsQuad.dispose();
178
- fsQuad.material.dispose();
179
- }
180
- });
181
- });
182
- effect((onCleanup) => {
183
- const renderTarget = this.renderTarget();
184
- onCleanup(() => {
185
- renderTarget.dispose();
186
- });
187
- });
188
- });
189
- }
190
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtsSpotLightShadowMeshShader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
191
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: NgtsSpotLightShadowMeshShader, isStandalone: true, selector: "ngts-spot-light-shadow-mesh-shader", ngImport: i0, template: `
192
- <ngt-mesh [ref]="meshRef" [scale]="shadowMeshInput.shadowMeshScale()" [castShadow]="true">
193
- <ngt-plane-geometry />
194
- <ngt-mesh-basic-material
195
- [transparent]="true"
196
- [side]="DoubleSide"
197
- [alphaTest]="shadowMeshInput.shadowMeshAlphaTest()"
198
- [alphaMap]="renderTarget().texture"
199
- [opacity]="debug() ? 1 : 0"
200
- >
201
- <ngt-value [rawValue]="RepeatWrapping" attach="alphaMap.wrapS" />
202
- <ngt-value [rawValue]="RepeatWrapping" attach="alphaMap.wrapT" />
203
- <ng-content />
204
- </ngt-mesh-basic-material>
205
- </ngt-mesh>
206
- `, isInline: true }); }
207
- }
208
- export { NgtsSpotLightShadowMeshShader };
209
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtsSpotLightShadowMeshShader, decorators: [{
210
- type: Component,
211
- args: [{
212
- selector: 'ngts-spot-light-shadow-mesh-shader',
213
- standalone: true,
214
- template: `
215
- <ngt-mesh [ref]="meshRef" [scale]="shadowMeshInput.shadowMeshScale()" [castShadow]="true">
216
- <ngt-plane-geometry />
217
- <ngt-mesh-basic-material
218
- [transparent]="true"
219
- [side]="DoubleSide"
220
- [alphaTest]="shadowMeshInput.shadowMeshAlphaTest()"
221
- [alphaMap]="renderTarget().texture"
222
- [opacity]="debug() ? 1 : 0"
223
- >
224
- <ngt-value [rawValue]="RepeatWrapping" attach="alphaMap.wrapS" />
225
- <ngt-value [rawValue]="RepeatWrapping" attach="alphaMap.wrapT" />
226
- <ng-content />
227
- </ngt-mesh-basic-material>
228
- </ngt-mesh>
229
- `,
230
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
231
- }]
232
- }], ctorParameters: function () { return []; } });
233
- class NgtsSpotLightShadow extends NgtsSpotLightShadowMeshInput {
234
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtsSpotLightShadow, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
235
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: NgtsSpotLightShadow, isStandalone: true, selector: "ngts-spot-light-shadow", providers: [{ provide: NgtsSpotLightShadowMeshInput, useExisting: NgtsSpotLightShadow }], usesInheritance: true, ngImport: i0, template: `
236
- <ngts-spot-light-shadow-mesh-shader *ngIf="shadowMeshShader(); else noShader" />
237
- <ng-template #noShader>
238
- <ngts-spot-light-shadow-mesh-no-shader />
239
- </ng-template>
240
- `, isInline: true, dependencies: [{ kind: "component", type: NgtsSpotLightShadowMeshShader, selector: "ngts-spot-light-shadow-mesh-shader" }, { kind: "component", type: NgtsSpotLightShadowMeshNoShader, selector: "ngts-spot-light-shadow-mesh-no-shader" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
241
- }
242
- export { NgtsSpotLightShadow };
243
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtsSpotLightShadow, decorators: [{
244
- type: Component,
245
- args: [{
246
- selector: 'ngts-spot-light-shadow',
247
- standalone: true,
248
- template: `
249
- <ngts-spot-light-shadow-mesh-shader *ngIf="shadowMeshShader(); else noShader" />
250
- <ng-template #noShader>
251
- <ngts-spot-light-shadow-mesh-no-shader />
252
- </ng-template>
253
- `,
254
- imports: [NgtsSpotLightShadowMeshShader, NgtsSpotLightShadowMeshNoShader, NgIf],
255
- providers: [{ provide: NgtsSpotLightShadowMeshInput, useExisting: NgtsSpotLightShadow }],
256
- }]
257
- }] });
258
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdC1saWdodC1zaGFkb3ctbWVzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9zdGFnaW5nL3NyYy9zcG90LWxpZ2h0L3Nwb3QtbGlnaHQtc2hhZG93LW1lc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFDSCxzQkFBc0IsRUFDdEIsU0FBUyxFQUVULFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLHFCQUFxQixHQUN4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUgsc0JBQXNCLEVBQ3RCLFdBQVcsRUFDWCxNQUFNLEVBQ04sa0JBQWtCLEVBQ2xCLFlBQVksRUFDWix1Q0FBdUMsR0FDMUMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM5QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbkQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7O0FBRTlFLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBNEIsRUFBNEIsRUFBRTtJQUMzRSxPQUFRLEtBQXlCLEVBQUUsV0FBVyxDQUFDO0FBQ25ELENBQUMsQ0FBQztBQUVGLFNBQVMsc0JBQXNCLENBQzNCLFlBQTZDLEVBQzdDLE9BQW1DLEVBQ25DLEtBQW1CLEVBQ25CLE1BQW9CLEVBQ3BCLFFBQXNCLEVBQ3RCLFFBQW1CO0lBRW5CLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQyxzQkFBc0IsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNwRSxxQkFBcUIsQ0FBQyxR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QUFFLHdCQUF3QjtvQkFDbEMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7S0FLVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyw2QkFBNkIsRUFBRSwrQkFBK0IsRUFBRSxJQUFJLENBQUM7b0JBQy9FLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLFdBQVcscUJBQXFCLEVBQUUsQ0FBQztpQkFDM0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcbiAgICBDb21wb25lbnQsXG4gICAgSW5qZWN0b3IsXG4gICAgY29tcHV0ZWQsXG4gICAgZWZmZWN0LFxuICAgIGluamVjdCxcbiAgICBydW5JbkluamVjdGlvbkNvbnRleHQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBOZ3RJbmplY3RlZFJlZixcbiAgICBhc3NlcnRJbmplY3Rpb25Db250ZXh0LFxuICAgIGNoZWNrVXBkYXRlLFxuICAgIGV4dGVuZCxcbiAgICBpbmplY3RCZWZvcmVSZW5kZXIsXG4gICAgaW5qZWN0Tmd0UmVmLFxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZUluSW5qZWN0aW9uQ29udGV4dCxcbn0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBNZXNoLCBNZXNoQmFzaWNNYXRlcmlhbCwgUGxhbmVHZW9tZXRyeSB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IEZ1bGxTY3JlZW5RdWFkIH0gZnJvbSAndGhyZWUtc3RkbGliJztcbmltcG9ydCB7IE5HVFNfU1BPVF9MSUdIVF9BUEkgfSBmcm9tICcuL3Nwb3QtbGlnaHQnO1xuaW1wb3J0IHsgTmd0c1Nwb3RMaWdodFNoYWRvd01lc2hJbnB1dCB9IGZyb20gJy4vc3BvdC1saWdodC1zaGFkb3ctbWVzaC1pbnB1dCc7XG5cbmNvbnN0IGlzU3BvdExpZ2h0ID0gKGNoaWxkOiBUSFJFRS5PYmplY3QzRCB8IG51bGwpOiBjaGlsZCBpcyBUSFJFRS5TcG90TGlnaHQgPT4ge1xuICAgIHJldHVybiAoY2hpbGQgYXMgVEhSRUUuU3BvdExpZ2h0KT8uaXNTcG90TGlnaHQ7XG59O1xuXG5mdW5jdGlvbiBpbmplY3RTaGFkb3dNZXNoQ29tbW9uKFxuICAgIHNwb3RMaWdodFJlZjogTmd0SW5qZWN0ZWRSZWY8VEhSRUUuU3BvdExpZ2h0PixcbiAgICBtZXNoUmVmOiBOZ3RJbmplY3RlZFJlZjxUSFJFRS5NZXNoPixcbiAgICB3aWR0aDogKCkgPT4gbnVtYmVyLFxuICAgIGhlaWdodDogKCkgPT4gbnVtYmVyLFxuICAgIGRpc3RhbmNlOiAoKSA9PiBudW1iZXIsXG4gICAgaW5qZWN0b3I/OiBJbmplY3RvclxuKSB7XG4gICAgaW5qZWN0b3IgPSBhc3NlcnRJbmplY3Rpb25Db250ZXh0KGluamVjdFNoYWRvd01lc2hDb21tb24sIGluamVjdG9yKTtcbiAgICBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcbiAgICAgICAgY29uc3QgcG9zID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcbiAgICAgICAgY29uc3QgZGlyID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcblxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWVJbkluamVjdGlvbkNvbnRleHQoKCkgPT4ge1xuICAgICAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcG90TGlnaHQgPSBzcG90TGlnaHRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAoIXNwb3RMaWdodCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmIChpc1Nwb3RMaWdodChzcG90TGlnaHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNwb3RMaWdodC5zaGFkb3cubWFwU2l6ZS5zZXQod2lkdGgoKSwgaGVpZ2h0KCkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3BvdExpZ2h0LnNoYWRvdy5tYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwb3RMaWdodC5zaGFkb3cubWFwLnNldFNpemUod2lkdGgoKSwgaGVpZ2h0KCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNwb3RMaWdodC5zaGFkb3cubmVlZHNVcGRhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignPG5ndHMtc3BvdC1saWdodC1zaGFkb3c+IG11c3QgYmUgYSBjaGlsZCBvZiBhIDxuZ3RzLXNwb3QtbGlnaHQ+Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGluamVjdEJlZm9yZVJlbmRlcigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzcG90TGlnaHQgPSBzcG90TGlnaHRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IG1lc2ggPSBtZXNoUmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgICAgIGlmICghc3BvdExpZ2h0KSByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IEEgPSBzcG90TGlnaHQucG9zaXRpb247XG4gICAgICAgICAgICBjb25zdCBCID0gc3BvdExpZ2h0LnRhcmdldC5wb3NpdGlvbjtcblxuICAgICAgICAgICAgZGlyLmNvcHkoQikuc3ViKEEpO1xuICAgICAgICAgICAgY29uc3QgbGVuID0gZGlyLmxlbmd0aCgpO1xuICAgICAgICAgICAgZGlyLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKGxlbiAqIGRpc3RhbmNlKCkpO1xuICAgICAgICAgICAgcG9zLmNvcHkoQSkuYWRkKGRpcik7XG5cbiAgICAgICAgICAgIGlmIChtZXNoKSB7XG4gICAgICAgICAgICAgICAgbWVzaC5wb3NpdGlvbi5jb3B5KHBvcyk7XG4gICAgICAgICAgICAgICAgbWVzaC5sb29rQXQoc3BvdExpZ2h0LnRhcmdldC5wb3NpdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5leHRlbmQoeyBNZXNoLCBQbGFuZUdlb21ldHJ5LCBNZXNoQmFzaWNNYXRlcmlhbCB9KTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RzLXNwb3QtbGlnaHQtc2hhZG93LW1lc2gtbm8tc2hhZGVyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3QtbWVzaCBbcmVmXT1cIm1lc2hSZWZcIiBbc2NhbGVdPVwic2hhZG93TWVzaElucHV0LnNoYWRvd01lc2hTY2FsZSgpXCIgW2Nhc3RTaGFkb3ddPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPG5ndC1wbGFuZS1nZW9tZXRyeSAvPlxuICAgICAgICAgICAgPG5ndC1tZXNoLWJhc2ljLW1hdGVyaWFsXG4gICAgICAgICAgICAgICAgW3RyYW5zcGFyZW50XT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtzaWRlXT1cIkRvdWJsZVNpZGVcIlxuICAgICAgICAgICAgICAgIFthbHBoYVRlc3RdPVwic2hhZG93TWVzaElucHV0LnNoYWRvd01lc2hBbHBoYVRlc3QoKVwiXG4gICAgICAgICAgICAgICAgW2FscGhhTWFwXT1cInNoYWRvd01lc2hJbnB1dC5zaGFkb3dNZXNoTWFwKClcIlxuICAgICAgICAgICAgICAgIFtvcGFjaXR5XT1cImRlYnVnKCkgPyAxIDogMFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgLz5cbiAgICAgICAgICAgIDwvbmd0LW1lc2gtYmFzaWMtbWF0ZXJpYWw+XG4gICAgICAgIDwvbmd0LW1lc2g+XG4gICAgYCxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNTcG90TGlnaHRTaGFkb3dNZXNoTm9TaGFkZXIge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBzaGFkb3dNZXNoSW5wdXQgPSBpbmplY3QoTmd0c1Nwb3RMaWdodFNoYWRvd01lc2hJbnB1dCk7XG4gICAgcmVhZG9ubHkgI3Nwb3RMaWdodEFwaSA9IGluamVjdChOR1RTX1NQT1RfTElHSFRfQVBJKTtcblxuICAgIHJlYWRvbmx5IG1lc2hSZWYgPSBpbmplY3ROZ3RSZWY8VEhSRUUuTWVzaD4oKTtcbiAgICByZWFkb25seSBEb3VibGVTaWRlID0gVEhSRUUuRG91YmxlU2lkZTtcblxuICAgIHJlYWRvbmx5IGRlYnVnID0gdGhpcy4jc3BvdExpZ2h0QXBpLmRlYnVnO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuc2hhZG93TWVzaElucHV0LnBhdGNoKHsgZGlzdGFuY2U6IDAuNCwgYWxwaGFUZXN0OiAwLjUsIHdpZHRoOiA1MTIsIGhlaWdodDogNTEyLCBzY2FsZTogMSB9KTtcblxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWVJbkluamVjdGlvbkNvbnRleHQoKCkgPT4ge1xuICAgICAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXAgPSB0aGlzLnNoYWRvd01lc2hJbnB1dC5zaGFkb3dNZXNoTWFwKCk7XG4gICAgICAgICAgICAgICAgaWYgKG1hcCkge1xuICAgICAgICAgICAgICAgICAgICBtYXAud3JhcFMgPSBtYXAud3JhcFQgPSBUSFJFRS5SZXBlYXRXcmFwcGluZztcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tVcGRhdGUobWFwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW5qZWN0U2hhZG93TWVzaENvbW1vbihcbiAgICAgICAgICAgIHRoaXMuI3Nwb3RMaWdodEFwaS5zcG90TGlnaHQsXG4gICAgICAgICAgICB0aGlzLm1lc2hSZWYsXG4gICAgICAgICAgICB0aGlzLnNoYWRvd01lc2hJbnB1dC5zaGFkb3dNZXNoV2lkdGgsXG4gICAgICAgICAgICB0aGlzLnNoYWRvd01lc2hJbnB1dC5zaGFkb3dNZXNoSGVpZ2h0LFxuICAgICAgICAgICAgdGhpcy5zaGFkb3dNZXNoSW5wdXQuc2hhZG93TWVzaERpc3RhbmNlXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndHMtc3BvdC1saWdodC1zaGFkb3ctbWVzaC1zaGFkZXInLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5ndC1tZXNoIFtyZWZdPVwibWVzaFJlZlwiIFtzY2FsZV09XCJzaGFkb3dNZXNoSW5wdXQuc2hhZG93TWVzaFNjYWxlKClcIiBbY2FzdFNoYWRvd109XCJ0cnVlXCI+XG4gICAgICAgICAgICA8bmd0LXBsYW5lLWdlb21ldHJ5IC8+XG4gICAgICAgICAgICA8bmd0LW1lc2gtYmFzaWMtbWF0ZXJpYWxcbiAgICAgICAgICAgICAgICBbdHJhbnNwYXJlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3NpZGVdPVwiRG91YmxlU2lkZVwiXG4gICAgICAgICAgICAgICAgW2FscGhhVGVzdF09XCJzaGFkb3dNZXNoSW5wdXQuc2hhZG93TWVzaEFscGhhVGVzdCgpXCJcbiAgICAgICAgICAgICAgICBbYWxwaGFNYXBdPVwicmVuZGVyVGFyZ2V0KCkudGV4dHVyZVwiXG4gICAgICAgICAgICAgICAgW29wYWNpdHldPVwiZGVidWcoKSA/IDEgOiAwXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmd0LXZhbHVlIFtyYXdWYWx1ZV09XCJSZXBlYXRXcmFwcGluZ1wiIGF0dGFjaD1cImFscGhhTWFwLndyYXBTXCIgLz5cbiAgICAgICAgICAgICAgICA8bmd0LXZhbHVlIFtyYXdWYWx1ZV09XCJSZXBlYXRXcmFwcGluZ1wiIGF0dGFjaD1cImFscGhhTWFwLndyYXBUXCIgLz5cbiAgICAgICAgICAgICAgICA8bmctY29udGVudCAvPlxuICAgICAgICAgICAgPC9uZ3QtbWVzaC1iYXNpYy1tYXRlcmlhbD5cbiAgICAgICAgPC9uZ3QtbWVzaD5cbiAgICBgLFxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c1Nwb3RMaWdodFNoYWRvd01lc2hTaGFkZXIge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBzaGFkb3dNZXNoSW5wdXQgPSBpbmplY3QoTmd0c1Nwb3RMaWdodFNoYWRvd01lc2hJbnB1dCk7XG4gICAgcmVhZG9ubHkgbWVzaFJlZiA9IGluamVjdE5ndFJlZjxUSFJFRS5NZXNoPigpO1xuICAgIHJlYWRvbmx5ICNzcG90TGlnaHRBcGkgPSBpbmplY3QoTkdUU19TUE9UX0xJR0hUX0FQSSk7XG5cbiAgICByZWFkb25seSBEb3VibGVTaWRlID0gVEhSRUUuRG91YmxlU2lkZTtcbiAgICByZWFkb25seSBSZXBlYXRXcmFwcGluZyA9IFRIUkVFLlJlcGVhdFdyYXBwaW5nO1xuXG4gICAgcmVhZG9ubHkgZGVidWcgPSB0aGlzLiNzcG90TGlnaHRBcGkuZGVidWc7XG4gICAgcmVhZG9ubHkgcmVuZGVyVGFyZ2V0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuc2hhZG93TWVzaElucHV0LnNoYWRvd01lc2hXaWR0aCgpO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnNoYWRvd01lc2hJbnB1dC5zaGFkb3dNZXNoSGVpZ2h0KCk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBUSFJFRS5XZWJHTFJlbmRlclRhcmdldCh3aWR0aCwgaGVpZ2h0LCB7XG4gICAgICAgICAgICBmb3JtYXQ6IFRIUkVFLlJHQkFGb3JtYXQsXG4gICAgICAgICAgICBlbmNvZGluZzogVEhSRUUuTGluZWFyRW5jb2RpbmcsXG4gICAgICAgICAgICBzdGVuY2lsQnVmZmVyOiBmYWxzZSxcbiAgICAgICAgICAgIC8vIGRlcHRoVGV4dHVyZTogbnVsbCFcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmVhZG9ubHkgdW5pZm9ybXMgPSB7XG4gICAgICAgIHVTaGFkb3dNYXA6IHsgdmFsdWU6IHRoaXMuc2hhZG93TWVzaElucHV0LnNoYWRvd01lc2hNYXAoKSB9LFxuICAgICAgICB1VGltZTogeyB2YWx1ZTogMCB9LFxuICAgIH07XG5cbiAgICByZWFkb25seSAjZnNRdWFkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBzaGFkZXIgPSB0aGlzLnNoYWRvd01lc2hJbnB1dC5zaGFkb3dNZXNoU2hhZGVyKCk7XG4gICAgICAgIGlmICghc2hhZGVyKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIG5ldyBGdWxsU2NyZWVuUXVhZChcbiAgICAgICAgICAgIG5ldyBUSFJFRS5TaGFkZXJNYXRlcmlhbCh7XG4gICAgICAgICAgICAgICAgdW5pZm9ybXM6IHRoaXMudW5pZm9ybXMsXG4gICAgICAgICAgICAgICAgdmVydGV4U2hhZGVyOiAvKiBnbHNsICovIGBcbiAgICAgICAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2VXY7XG5cbiAgICAgICAgICAgICAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgICAgICAgICAgICAgdlV2ID0gdXY7XG4gICAgICAgICAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYCxcbiAgICAgICAgICAgICAgICBmcmFnbWVudFNoYWRlcjogc2hhZGVyLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnNoYWRvd01lc2hJbnB1dC5wYXRjaCh7IGRpc3RhbmNlOiAwLjQsIGFscGhhVGVzdDogMC41LCB3aWR0aDogNTEyLCBoZWlnaHQ6IDUxMiwgc2NhbGU6IDQgfSk7XG5cbiAgICAgICAgaW5qZWN0U2hhZG93TWVzaENvbW1vbihcbiAgICAgICAgICAgIHRoaXMuI3Nwb3RMaWdodEFwaS5zcG90TGlnaHQsXG4gICAgICAgICAgICB0aGlzLm1lc2hSZWYsXG4gICAgICAgICAgICB0aGlzLnNoYWRvd01lc2hJbnB1dC5zaGFkb3dNZXNoV2lkdGgsXG4gICAgICAgICAgICB0aGlzLnNoYWRvd01lc2hJbnB1dC5zaGFkb3dNZXNoSGVpZ2h0LFxuICAgICAgICAgICAgdGhpcy5zaGFkb3dNZXNoSW5wdXQuc2hhZG93TWVzaERpc3RhbmNlXG4gICAgICAgICk7XG5cbiAgICAgICAgaW5qZWN0QmVmb3JlUmVuZGVyKCh7IGRlbHRhLCBnbCB9KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuaWZvcm1zLnVUaW1lLnZhbHVlICs9IGRlbHRhO1xuICAgICAgICAgICAgY29uc3QgZnNRdWFkID0gdGhpcy4jZnNRdWFkKCk7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJUYXJnZXQgPSB0aGlzLnJlbmRlclRhcmdldCgpO1xuICAgICAgICAgICAgaWYgKGZzUXVhZCAmJiByZW5kZXJUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICBnbC5zZXRSZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBmc1F1YWQucmVuZGVyKGdsKTtcbiAgICAgICAgICAgICAgICBnbC5zZXRSZW5kZXJUYXJnZXQobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZUluSW5qZWN0aW9uQ29udGV4dCgoKSA9PiB7XG4gICAgICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hcCA9IHRoaXMuc2hhZG93TWVzaElucHV0LnNoYWRvd01lc2hNYXAoKTtcbiAgICAgICAgICAgICAgICBpZiAobWFwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5pZm9ybXMudVNoYWRvd01hcC52YWx1ZSA9IG1hcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZWZmZWN0KChvbkNsZWFudXApID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmc1F1YWQgPSB0aGlzLiNmc1F1YWQoKTtcbiAgICAgICAgICAgICAgICBvbkNsZWFudXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZnNRdWFkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmc1F1YWQuZGlzcG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZnNRdWFkLm1hdGVyaWFsLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGVmZmVjdCgob25DbGVhbnVwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyVGFyZ2V0ID0gdGhpcy5yZW5kZXJUYXJnZXQoKTtcbiAgICAgICAgICAgICAgICBvbkNsZWFudXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXJUYXJnZXQuZGlzcG9zZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RzLXNwb3QtbGlnaHQtc2hhZG93JyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3RzLXNwb3QtbGlnaHQtc2hhZG93LW1lc2gtc2hhZGVyICpuZ0lmPVwic2hhZG93TWVzaFNoYWRlcigpOyBlbHNlIG5vU2hhZGVyXCIgLz5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub1NoYWRlcj5cbiAgICAgICAgICAgIDxuZ3RzLXNwb3QtbGlnaHQtc2hhZG93LW1lc2gtbm8tc2hhZGVyIC8+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgYCxcbiAgICBpbXBvcnRzOiBbTmd0c1Nwb3RMaWdodFNoYWRvd01lc2hTaGFkZXIsIE5ndHNTcG90TGlnaHRTaGFkb3dNZXNoTm9TaGFkZXIsIE5nSWZdLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTmd0c1Nwb3RMaWdodFNoYWRvd01lc2hJbnB1dCwgdXNlRXhpc3Rpbmc6IE5ndHNTcG90TGlnaHRTaGFkb3cgfV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNTcG90TGlnaHRTaGFkb3cgZXh0ZW5kcyBOZ3RzU3BvdExpZ2h0U2hhZG93TWVzaElucHV0IHt9XG4iXX0=