angular-three-soba 2.0.0-beta.9 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. package/README.md +62 -4
  2. package/abstractions/README.md +279 -2
  3. package/abstractions/index.d.ts +13 -6
  4. package/abstractions/lib/billboard.d.ts +19 -0
  5. package/abstractions/lib/catmull-rom-line.d.ts +617 -0
  6. package/abstractions/lib/cubic-bezier-line.d.ts +19 -0
  7. package/abstractions/lib/edges.d.ts +800 -0
  8. package/abstractions/lib/gradient-texture.d.ts +24 -0
  9. package/abstractions/lib/grid.d.ts +315 -0
  10. package/abstractions/lib/helper.d.ts +25 -0
  11. package/abstractions/lib/line.d.ts +41 -0
  12. package/abstractions/lib/prism-geometry.d.ts +32 -0
  13. package/abstractions/lib/quadratic-bezier-line.d.ts +21 -0
  14. package/abstractions/lib/rounded-box.d.ts +41 -0
  15. package/abstractions/lib/text-3d.d.ts +314 -0
  16. package/abstractions/lib/text.d.ts +54 -0
  17. package/cameras/README.md +91 -2
  18. package/cameras/index.d.ts +4 -4
  19. package/cameras/lib/camera-content.d.ts +10 -0
  20. package/cameras/lib/cube-camera.d.ts +38 -0
  21. package/cameras/lib/orthographic-camera.d.ts +40 -0
  22. package/cameras/lib/perspective-camera.d.ts +36 -0
  23. package/controls/README.md +96 -2
  24. package/controls/index.d.ts +4 -1
  25. package/controls/lib/camera-controls.d.ts +31 -0
  26. package/controls/lib/orbit-controls.d.ts +38 -0
  27. package/controls/lib/pivot-controls/axis-arrow.d.ts +31 -0
  28. package/controls/lib/pivot-controls/axis-rotator.d.ts +30 -0
  29. package/controls/lib/pivot-controls/pivot-controls.d.ts +110 -0
  30. package/controls/lib/pivot-controls/plane-slider.d.ts +32 -0
  31. package/controls/lib/pivot-controls/scaling-sphere.d.ts +32 -0
  32. package/controls/lib/scroll-controls.d.ts +78 -0
  33. package/esm2022/abstractions/index.mjs +14 -7
  34. package/esm2022/abstractions/lib/billboard.mjs +69 -0
  35. package/esm2022/abstractions/lib/catmull-rom-line.mjs +76 -0
  36. package/esm2022/abstractions/lib/cubic-bezier-line.mjs +51 -0
  37. package/esm2022/abstractions/lib/edges.mjs +70 -0
  38. package/esm2022/abstractions/lib/gradient-texture.mjs +91 -0
  39. package/esm2022/abstractions/lib/grid.mjs +103 -0
  40. package/esm2022/abstractions/lib/helper.mjs +76 -0
  41. package/esm2022/abstractions/lib/line.mjs +126 -0
  42. package/esm2022/abstractions/lib/prism-geometry.mjs +46 -0
  43. package/esm2022/abstractions/lib/quadratic-bezier-line.mjs +73 -0
  44. package/esm2022/abstractions/lib/rounded-box.mjs +111 -0
  45. package/esm2022/abstractions/lib/text-3d.mjs +98 -0
  46. package/esm2022/abstractions/lib/text.mjs +91 -0
  47. package/esm2022/cameras/index.mjs +5 -5
  48. package/esm2022/cameras/lib/camera-content.mjs +14 -0
  49. package/esm2022/cameras/lib/cube-camera.mjs +111 -0
  50. package/esm2022/cameras/lib/orthographic-camera.mjs +131 -0
  51. package/esm2022/cameras/lib/perspective-camera.mjs +104 -0
  52. package/esm2022/controls/index.mjs +5 -2
  53. package/esm2022/controls/lib/camera-controls.mjs +127 -0
  54. package/esm2022/controls/lib/orbit-controls.mjs +132 -0
  55. package/esm2022/controls/lib/pivot-controls/axis-arrow.mjs +263 -0
  56. package/esm2022/controls/lib/pivot-controls/axis-rotator.mjs +264 -0
  57. package/esm2022/controls/lib/pivot-controls/pivot-controls.mjs +340 -0
  58. package/esm2022/controls/lib/pivot-controls/plane-slider.mjs +266 -0
  59. package/esm2022/controls/lib/pivot-controls/scaling-sphere.mjs +232 -0
  60. package/esm2022/controls/lib/scroll-controls.mjs +268 -0
  61. package/esm2022/loaders/index.mjs +6 -5
  62. package/esm2022/loaders/lib/font-loader.mjs +49 -0
  63. package/esm2022/loaders/lib/gltf-loader.mjs +51 -0
  64. package/esm2022/loaders/lib/loader.mjs +109 -0
  65. package/esm2022/loaders/lib/progress.mjs +51 -0
  66. package/esm2022/loaders/lib/texture-loader.mjs +32 -0
  67. package/esm2022/materials/index.mjs +8 -7
  68. package/esm2022/materials/lib/custom-shader-material.mjs +71 -0
  69. package/esm2022/materials/lib/mesh-distort-material.mjs +42 -0
  70. package/esm2022/materials/lib/mesh-reflector-material.mjs +278 -0
  71. package/esm2022/materials/lib/mesh-refraction-material.mjs +144 -0
  72. package/esm2022/materials/lib/mesh-transmission-material.mjs +188 -0
  73. package/esm2022/materials/lib/mesh-wobble-material.mjs +42 -0
  74. package/esm2022/materials/lib/point-material.mjs +33 -0
  75. package/esm2022/misc/index.mjs +14 -14
  76. package/esm2022/misc/lib/animations.mjs +71 -0
  77. package/esm2022/misc/lib/bake-shadows.mjs +26 -0
  78. package/esm2022/misc/lib/computed-attribute.mjs +55 -0
  79. package/esm2022/misc/lib/constants.mjs +5 -0
  80. package/esm2022/misc/lib/decal.mjs +139 -0
  81. package/esm2022/misc/lib/deprecated.mjs +15 -0
  82. package/esm2022/misc/lib/depth-buffer.mjs +39 -0
  83. package/esm2022/misc/lib/fbo.mjs +86 -0
  84. package/esm2022/misc/lib/html/html-content.mjs +327 -0
  85. package/esm2022/misc/lib/html/html.mjs +129 -0
  86. package/esm2022/misc/lib/html/utils.mjs +74 -0
  87. package/esm2022/misc/lib/intersect.mjs +52 -0
  88. package/esm2022/misc/lib/sampler.mjs +122 -0
  89. package/esm2022/misc/lib/scale-factor.mjs +29 -0
  90. package/esm2022/performances/index.mjs +7 -6
  91. package/esm2022/performances/lib/adaptive-dpr.mjs +52 -0
  92. package/esm2022/performances/lib/adaptive-events.mjs +28 -0
  93. package/esm2022/performances/lib/detailed.mjs +57 -0
  94. package/esm2022/performances/lib/instances/instances.mjs +183 -0
  95. package/esm2022/performances/lib/instances/position-mesh.mjs +51 -0
  96. package/esm2022/performances/lib/points/points.mjs +278 -0
  97. package/esm2022/performances/lib/points/position-point.mjs +53 -0
  98. package/esm2022/performances/lib/segments/segment-object.mjs +9 -0
  99. package/esm2022/performances/lib/segments/segments.mjs +129 -0
  100. package/esm2022/shaders/index.mjs +4 -18
  101. package/esm2022/shaders/lib/grid-material.mjs +81 -0
  102. package/esm2022/shaders/lib/mesh-refraction-material.mjs +163 -0
  103. package/esm2022/shaders/lib/point-material.mjs +24 -0
  104. package/esm2022/staging/index.mjs +20 -22
  105. package/esm2022/staging/lib/accumulative-shadows.mjs +182 -0
  106. package/esm2022/staging/lib/backdrop.mjs +73 -0
  107. package/esm2022/staging/lib/bb-anchor.mjs +58 -0
  108. package/esm2022/staging/lib/bounds.mjs +286 -0
  109. package/esm2022/staging/lib/camera-shake.mjs +69 -0
  110. package/esm2022/staging/lib/caustics.mjs +188 -0
  111. package/esm2022/staging/lib/center.mjs +118 -0
  112. package/esm2022/staging/lib/contact-shadows.mjs +214 -0
  113. package/esm2022/staging/lib/environment.mjs +481 -0
  114. package/esm2022/staging/lib/float.mjs +70 -0
  115. package/esm2022/staging/lib/lightformer.mjs +107 -0
  116. package/esm2022/staging/lib/mask.mjs +78 -0
  117. package/esm2022/staging/lib/matcap-texture.mjs +81 -0
  118. package/esm2022/staging/lib/normal-texture.mjs +81 -0
  119. package/esm2022/staging/lib/randomized-lights.mjs +104 -0
  120. package/esm2022/staging/lib/render-texture.mjs +203 -0
  121. package/esm2022/staging/lib/sky.mjs +86 -0
  122. package/esm2022/staging/lib/spot-light.mjs +453 -0
  123. package/esm2022/staging/lib/stage.mjs +236 -0
  124. package/esm2022/{utils/angular-three-soba-utils.mjs → stats/angular-three-soba-stats.mjs} +1 -1
  125. package/esm2022/stats/index.mjs +2 -0
  126. package/esm2022/stats/lib/stats.mjs +63 -0
  127. package/esm2022/vanilla-exports/angular-three-soba-vanilla-exports.mjs +5 -0
  128. package/esm2022/vanilla-exports/index.mjs +3 -0
  129. package/fesm2022/angular-three-soba-abstractions.mjs +884 -697
  130. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  131. package/fesm2022/angular-three-soba-cameras.mjs +261 -308
  132. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  133. package/fesm2022/angular-three-soba-controls.mjs +1776 -109
  134. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  135. package/fesm2022/angular-three-soba-loaders.mjs +191 -145
  136. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  137. package/fesm2022/angular-three-soba-materials.mjs +527 -748
  138. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  139. package/fesm2022/angular-three-soba-misc.mjs +783 -1935
  140. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  141. package/fesm2022/angular-three-soba-performances.mjs +591 -475
  142. package/fesm2022/angular-three-soba-performances.mjs.map +1 -1
  143. package/fesm2022/angular-three-soba-shaders.mjs +51 -1369
  144. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  145. package/fesm2022/angular-three-soba-staging.mjs +2421 -3521
  146. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  147. package/fesm2022/angular-three-soba-stats.mjs +70 -0
  148. package/fesm2022/angular-three-soba-stats.mjs.map +1 -0
  149. package/fesm2022/angular-three-soba-vanilla-exports.mjs +6 -0
  150. package/fesm2022/angular-three-soba-vanilla-exports.mjs.map +1 -0
  151. package/loaders/README.md +130 -2
  152. package/loaders/index.d.ts +5 -4
  153. package/loaders/lib/font-loader.d.ts +27 -0
  154. package/loaders/lib/gltf-loader.d.ts +24 -0
  155. package/loaders/lib/loader.d.ts +29 -0
  156. package/loaders/lib/progress.d.ts +9 -0
  157. package/loaders/lib/texture-loader.d.ts +13 -0
  158. package/materials/README.md +160 -2
  159. package/materials/index.d.ts +7 -6
  160. package/materials/lib/custom-shader-material.d.ts +20 -0
  161. package/materials/lib/mesh-distort-material.d.ts +17 -0
  162. package/materials/lib/mesh-reflector-material.d.ts +51 -0
  163. package/materials/lib/mesh-refraction-material.d.ts +42 -0
  164. package/materials/lib/mesh-transmission-material.d.ts +77 -0
  165. package/materials/lib/mesh-wobble-material.d.ts +15 -0
  166. package/materials/lib/point-material.d.ts +11 -0
  167. package/metadata.json +1 -1
  168. package/misc/README.md +217 -2
  169. package/misc/index.d.ts +13 -13
  170. package/misc/lib/animations.d.ts +17 -0
  171. package/misc/lib/computed-attribute.d.ts +64 -0
  172. package/misc/lib/constants.d.ts +1 -0
  173. package/misc/lib/decal.d.ts +27 -0
  174. package/misc/lib/deprecated.d.ts +14 -0
  175. package/misc/lib/depth-buffer.d.ts +8 -0
  176. package/misc/lib/fbo.d.ts +46 -0
  177. package/misc/lib/html/html-content.d.ts +47 -0
  178. package/misc/lib/html/html.d.ts +30 -0
  179. package/misc/lib/html/utils.d.ts +14 -0
  180. package/misc/lib/intersect.d.ts +13 -0
  181. package/misc/lib/sampler.d.ts +73 -0
  182. package/misc/lib/scale-factor.d.ts +3 -0
  183. package/package.json +90 -50
  184. package/performances/index.d.ts +6 -5
  185. package/performances/lib/adaptive-dpr.d.ts +7 -0
  186. package/performances/{adaptive-events → lib}/adaptive-events.d.ts +0 -3
  187. package/performances/lib/detailed.d.ts +17 -0
  188. package/performances/lib/instances/instances.d.ts +122 -0
  189. package/performances/lib/instances/position-mesh.d.ts +20 -0
  190. package/performances/lib/points/points.d.ts +224 -0
  191. package/performances/lib/points/position-point.d.ts +21 -0
  192. package/performances/lib/segments/segment-object.d.ts +17 -0
  193. package/performances/lib/segments/segments.d.ts +97 -0
  194. package/shaders/index.d.ts +3 -17
  195. package/shaders/lib/grid-material.d.ts +69 -0
  196. package/shaders/lib/mesh-refraction-material.d.ts +11 -0
  197. package/shaders/lib/point-material.d.ts +14 -0
  198. package/staging/README.md +473 -2
  199. package/staging/index.d.ts +19 -21
  200. package/staging/lib/accumulative-shadows.d.ts +75 -0
  201. package/staging/lib/backdrop.d.ts +22 -0
  202. package/staging/lib/bb-anchor.d.ts +17 -0
  203. package/staging/lib/bounds.d.ts +47 -0
  204. package/staging/lib/camera-shake.d.ts +29 -0
  205. package/staging/lib/caustics.d.ts +53 -0
  206. package/staging/lib/center.d.ts +390 -0
  207. package/staging/lib/contact-shadows.d.ts +55 -0
  208. package/staging/lib/environment.d.ts +132 -0
  209. package/staging/lib/float.d.ts +20 -0
  210. package/staging/lib/lightformer.d.ts +310 -0
  211. package/staging/lib/mask.d.ts +30 -0
  212. package/staging/lib/matcap-texture.d.ts +32 -0
  213. package/staging/lib/normal-texture.d.ts +37 -0
  214. package/staging/lib/randomized-lights.d.ts +54 -0
  215. package/staging/lib/render-texture.d.ts +64 -0
  216. package/staging/lib/sky.d.ts +32 -0
  217. package/staging/lib/spot-light.d.ts +119 -0
  218. package/staging/lib/stage.d.ts +352 -0
  219. package/stats/README.md +3 -0
  220. package/stats/index.d.ts +1 -0
  221. package/stats/lib/stats.d.ts +14 -0
  222. package/vanilla-exports/README.md +3 -0
  223. package/vanilla-exports/index.d.ts +27 -0
  224. package/web-types.json +1 -1
  225. package/abstractions/billboard/billboard.d.ts +0 -28
  226. package/abstractions/detailed/detailed.d.ts +0 -26
  227. package/abstractions/edges/edges.d.ts +0 -34
  228. package/abstractions/grid/grid.d.ts +0 -50
  229. package/abstractions/text/text.d.ts +0 -82
  230. package/abstractions/text-3d/text-3d.d.ts +0 -81
  231. package/assets/distort.vert.glsl +0 -1
  232. package/cameras/camera/camera-content.d.ts +0 -13
  233. package/cameras/camera/camera.d.ts +0 -26
  234. package/cameras/cube-camera/cube-camera.d.ts +0 -69
  235. package/cameras/orthographic-camera/orthographic-camera.d.ts +0 -37
  236. package/cameras/perspective-camera/perspective-camera.d.ts +0 -18
  237. package/controls/orbit-controls/orbit-controls.d.ts +0 -54
  238. package/esm2022/abstractions/billboard/billboard.mjs +0 -74
  239. package/esm2022/abstractions/detailed/detailed.mjs +0 -64
  240. package/esm2022/abstractions/edges/edges.mjs +0 -88
  241. package/esm2022/abstractions/grid/grid.mjs +0 -180
  242. package/esm2022/abstractions/text/text.mjs +0 -274
  243. package/esm2022/abstractions/text-3d/text-3d.mjs +0 -165
  244. package/esm2022/cameras/camera/camera-content.mjs +0 -20
  245. package/esm2022/cameras/camera/camera.mjs +0 -77
  246. package/esm2022/cameras/cube-camera/cube-camera.mjs +0 -161
  247. package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +0 -102
  248. package/esm2022/cameras/perspective-camera/perspective-camera.mjs +0 -46
  249. package/esm2022/controls/orbit-controls/orbit-controls.mjs +0 -181
  250. package/esm2022/loaders/gltf-loader/gltf-loader.mjs +0 -30
  251. package/esm2022/loaders/loader/loader.mjs +0 -138
  252. package/esm2022/loaders/progress/progress.mjs +0 -45
  253. package/esm2022/loaders/texture-loader/texture-loader.mjs +0 -28
  254. package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +0 -82
  255. package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +0 -367
  256. package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +0 -171
  257. package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +0 -278
  258. package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +0 -68
  259. package/esm2022/materials/point-material/point-material.mjs +0 -46
  260. package/esm2022/misc/animations/animations.mjs +0 -59
  261. package/esm2022/misc/bake-shadows/bake-shadows.mjs +0 -24
  262. package/esm2022/misc/caustics/caustics.mjs +0 -387
  263. package/esm2022/misc/decal/decal.mjs +0 -187
  264. package/esm2022/misc/depth-buffer/depth-buffer.mjs +0 -44
  265. package/esm2022/misc/example/example.mjs +0 -160
  266. package/esm2022/misc/fbo/fbo.mjs +0 -47
  267. package/esm2022/misc/html/html-wrapper.mjs +0 -478
  268. package/esm2022/misc/html/html.mjs +0 -304
  269. package/esm2022/misc/sampler/sampler.mjs +0 -142
  270. package/esm2022/misc/shadow/shadow.mjs +0 -111
  271. package/esm2022/misc/stats-gl/stats-gl.mjs +0 -61
  272. package/esm2022/misc/trail/trail.mjs +0 -209
  273. package/esm2022/misc/trail-texture/inject-trail-texture.mjs +0 -17
  274. package/esm2022/misc/trail-texture/trail-texture.mjs +0 -106
  275. package/esm2022/modifiers/angular-three-soba-modifiers.mjs +0 -5
  276. package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +0 -64
  277. package/esm2022/modifiers/index.mjs +0 -2
  278. package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +0 -44
  279. package/esm2022/performances/adaptive-events/adaptive-events.mjs +0 -27
  280. package/esm2022/performances/points/points-input.mjs +0 -64
  281. package/esm2022/performances/points/points.mjs +0 -329
  282. package/esm2022/performances/points/position-point.mjs +0 -54
  283. package/esm2022/performances/segments/segment-object.mjs +0 -9
  284. package/esm2022/performances/segments/segments.mjs +0 -182
  285. package/esm2022/shaders/blur-pass/blur-pass.mjs +0 -61
  286. package/esm2022/shaders/caustics/caustics-material.mjs +0 -130
  287. package/esm2022/shaders/caustics/caustics-projection-material.mjs +0 -31
  288. package/esm2022/shaders/convolution-material/convolution-material.mjs +0 -94
  289. package/esm2022/shaders/discard-material/discard-material.mjs +0 -3
  290. package/esm2022/shaders/grid-material/grid-material.mjs +0 -77
  291. package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +0 -56
  292. package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +0 -223
  293. package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +0 -170
  294. package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +0 -268
  295. package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +0 -37
  296. package/esm2022/shaders/shader-material/shader-material.mjs +0 -34
  297. package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +0 -25
  298. package/esm2022/shaders/sparkles-material/sparkles-material.mjs +0 -33
  299. package/esm2022/shaders/spot-light-material/spot-light-material.mjs +0 -86
  300. package/esm2022/shaders/star-field-material/star-field-material.mjs +0 -33
  301. package/esm2022/shaders/wireframe-material/wireframe-material.mjs +0 -247
  302. package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +0 -267
  303. package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +0 -108
  304. package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +0 -206
  305. package/esm2022/staging/backdrop/backdrop.mjs +0 -77
  306. package/esm2022/staging/bb-anchor/bb-anchor.mjs +0 -70
  307. package/esm2022/staging/bounds/bounds.mjs +0 -308
  308. package/esm2022/staging/camera-shake/camera-shake.mjs +0 -123
  309. package/esm2022/staging/center/center.mjs +0 -163
  310. package/esm2022/staging/cloud/cloud.mjs +0 -158
  311. package/esm2022/staging/contact-shadows/contact-shadows.mjs +0 -246
  312. package/esm2022/staging/environment/assets.mjs +0 -13
  313. package/esm2022/staging/environment/environment-cube.mjs +0 -47
  314. package/esm2022/staging/environment/environment-ground.mjs +0 -41
  315. package/esm2022/staging/environment/environment-input.mjs +0 -119
  316. package/esm2022/staging/environment/environment-map.mjs +0 -53
  317. package/esm2022/staging/environment/environment-portal.mjs +0 -113
  318. package/esm2022/staging/environment/environment.mjs +0 -61
  319. package/esm2022/staging/environment/utils.mjs +0 -105
  320. package/esm2022/staging/float/float.mjs +0 -94
  321. package/esm2022/staging/matcap-texture/matcap-texture.mjs +0 -64
  322. package/esm2022/staging/normal-texture/normal-texture.mjs +0 -53
  323. package/esm2022/staging/sky/sky.mjs +0 -119
  324. package/esm2022/staging/sparkles/sparkles.mjs +0 -164
  325. package/esm2022/staging/spot-light/shadow-mesh-input.mjs +0 -63
  326. package/esm2022/staging/spot-light/shadow-mesh.mjs +0 -266
  327. package/esm2022/staging/spot-light/spot-light-input.mjs +0 -84
  328. package/esm2022/staging/spot-light/spot-light.mjs +0 -81
  329. package/esm2022/staging/spot-light/volumetric-mesh.mjs +0 -98
  330. package/esm2022/staging/stage/stage.mjs +0 -388
  331. package/esm2022/staging/stars/stars.mjs +0 -147
  332. package/esm2022/staging/wireframe/wireframe-input.mjs +0 -191
  333. package/esm2022/staging/wireframe/wireframe.mjs +0 -224
  334. package/esm2022/utils/content/content.mjs +0 -15
  335. package/esm2022/utils/index.mjs +0 -2
  336. package/fesm2022/angular-three-soba-modifiers.mjs +0 -71
  337. package/fesm2022/angular-three-soba-modifiers.mjs.map +0 -1
  338. package/fesm2022/angular-three-soba-utils.mjs +0 -22
  339. package/fesm2022/angular-three-soba-utils.mjs.map +0 -1
  340. package/loaders/gltf-loader/gltf-loader.d.ts +0 -10
  341. package/loaders/loader/loader.d.ts +0 -33
  342. package/loaders/progress/progress.d.ts +0 -9
  343. package/loaders/texture-loader/texture-loader.d.ts +0 -7
  344. package/materials/mesh-distort-material/mesh-distort-material.d.ts +0 -40
  345. package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +0 -99
  346. package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +0 -62
  347. package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +0 -107
  348. package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +0 -29
  349. package/materials/point-material/point-material.d.ts +0 -24
  350. package/misc/animations/animations.d.ts +0 -15
  351. package/misc/caustics/caustics.d.ts +0 -87
  352. package/misc/decal/decal.d.ts +0 -49
  353. package/misc/depth-buffer/depth-buffer.d.ts +0 -9
  354. package/misc/example/example.d.ts +0 -81
  355. package/misc/fbo/fbo.d.ts +0 -17
  356. package/misc/html/html-wrapper.d.ts +0 -559
  357. package/misc/html/html.d.ts +0 -214
  358. package/misc/sampler/sampler.d.ts +0 -67
  359. package/misc/shadow/shadow.d.ts +0 -37
  360. package/misc/stats-gl/stats-gl.d.ts +0 -24
  361. package/misc/trail/trail.d.ts +0 -57
  362. package/misc/trail-texture/inject-trail-texture.d.ts +0 -9
  363. package/misc/trail-texture/trail-texture.d.ts +0 -50
  364. package/modifiers/README.md +0 -3
  365. package/modifiers/curve-modifier/curve-modifier.d.ts +0 -23
  366. package/modifiers/index.d.ts +0 -1
  367. package/performances/adaptive-dpr/adaptive-dpr.d.ts +0 -14
  368. package/performances/points/points-input.d.ts +0 -32
  369. package/performances/points/points.d.ts +0 -92
  370. package/performances/points/position-point.d.ts +0 -11
  371. package/performances/segments/segment-object.d.ts +0 -7
  372. package/performances/segments/segments.d.ts +0 -124
  373. package/shaders/blur-pass/blur-pass.d.ts +0 -23
  374. package/shaders/caustics/caustics-material.d.ts +0 -4
  375. package/shaders/caustics/caustics-projection-material.d.ts +0 -4
  376. package/shaders/convolution-material/convolution-material.d.ts +0 -7
  377. package/shaders/discard-material/discard-material.d.ts +0 -3
  378. package/shaders/grid-material/grid-material.d.ts +0 -37
  379. package/shaders/mesh-distort-material/mesh-distort-material.d.ts +0 -295
  380. package/shaders/mesh-reflector-material/mesh-reflector-material.d.ts +0 -50
  381. package/shaders/mesh-refraction-material/mesh-refraction-material.d.ts +0 -4
  382. package/shaders/mesh-transmission-material/mesh-transmission-material.d.ts +0 -25
  383. package/shaders/mesh-wobble-material/mesh-wobble-material.d.ts +0 -16
  384. package/shaders/shader-material/shader-material.d.ts +0 -6
  385. package/shaders/soft-shadow-material/soft-shadow-material.d.ts +0 -19
  386. package/shaders/sparkles-material/sparkles-material.d.ts +0 -17
  387. package/shaders/spot-light-material/spot-light-material.d.ts +0 -13
  388. package/shaders/star-field-material/star-field-material.d.ts +0 -13
  389. package/shaders/wireframe-material/wireframe-material.d.ts +0 -58
  390. package/staging/accumulative-shadows/accumulative-shadows.d.ts +0 -146
  391. package/staging/accumulative-shadows/progressive-light-map.d.ts +0 -34
  392. package/staging/accumulative-shadows/randomized-lights.d.ts +0 -90
  393. package/staging/backdrop/backdrop.d.ts +0 -30
  394. package/staging/bb-anchor/bb-anchor.d.ts +0 -27
  395. package/staging/bounds/bounds.d.ts +0 -134
  396. package/staging/camera-shake/camera-shake.d.ts +0 -43
  397. package/staging/center/center.d.ts +0 -70
  398. package/staging/cloud/cloud.d.ts +0 -51
  399. package/staging/contact-shadows/contact-shadows.d.ts +0 -70
  400. package/staging/environment/assets.d.ts +0 -13
  401. package/staging/environment/environment-cube.d.ts +0 -15
  402. package/staging/environment/environment-ground.d.ts +0 -13
  403. package/staging/environment/environment-input.d.ts +0 -68
  404. package/staging/environment/environment-map.d.ts +0 -16
  405. package/staging/environment/environment-portal.d.ts +0 -18
  406. package/staging/environment/environment.d.ts +0 -8
  407. package/staging/environment/utils.d.ts +0 -7
  408. package/staging/float/float.d.ts +0 -31
  409. package/staging/matcap-texture/matcap-texture.d.ts +0 -13
  410. package/staging/normal-texture/normal-texture.d.ts +0 -16
  411. package/staging/sky/sky.d.ts +0 -48
  412. package/staging/sparkles/sparkles.d.ts +0 -63
  413. package/staging/spot-light/shadow-mesh-input.d.ts +0 -29
  414. package/staging/spot-light/shadow-mesh.d.ts +0 -37
  415. package/staging/spot-light/spot-light-input.d.ts +0 -38
  416. package/staging/spot-light/spot-light.d.ts +0 -39
  417. package/staging/spot-light/volumetric-mesh.d.ts +0 -24
  418. package/staging/stage/stage.d.ts +0 -130
  419. package/staging/stars/stars.d.ts +0 -45
  420. package/staging/wireframe/wireframe-input.d.ts +0 -65
  421. package/staging/wireframe/wireframe.d.ts +0 -28
  422. package/utils/README.md +0 -3
  423. package/utils/content/content.d.ts +0 -8
  424. package/utils/index.d.ts +0 -1
  425. /package/misc/{bake-shadows → lib}/bake-shadows.d.ts +0 -0
@@ -1,247 +0,0 @@
1
- import { computed, effect, runInInjectionContext } from '@angular/core';
2
- import { assertInjectionContext } from 'angular-three';
3
- import * as THREE from 'three';
4
- import { shaderMaterial } from '../shader-material/shader-material';
5
- export const WireframeMaterialShaders = {
6
- uniforms: {
7
- strokeOpacity: 1,
8
- fillOpacity: 0.25,
9
- fillMix: 0,
10
- thickness: 0.05,
11
- colorBackfaces: false,
12
- dashInvert: true,
13
- dash: false,
14
- dashRepeats: 4,
15
- dashLength: 0.5,
16
- squeeze: false,
17
- squeezeMin: 0.2,
18
- squeezeMax: 1,
19
- stroke: new THREE.Color('#ff0000'),
20
- backfaceStroke: new THREE.Color('#0000ff'),
21
- fill: new THREE.Color('#00ff00'),
22
- },
23
- vertex: /* glsl */ `
24
- attribute vec3 barycentric;
25
-
26
- varying vec3 v_edges_Barycentric;
27
- varying vec3 v_edges_Position;
28
-
29
- void initWireframe() {
30
- v_edges_Barycentric = barycentric;
31
- v_edges_Position = position.xyz;
32
- }
33
- `,
34
- fragment: /* glsl */ `
35
- #ifndef PI
36
- #define PI 3.1415926535897932384626433832795
37
- #endif
38
-
39
- varying vec3 v_edges_Barycentric;
40
- varying vec3 v_edges_Position;
41
-
42
- uniform float strokeOpacity;
43
- uniform float fillOpacity;
44
- uniform float fillMix;
45
- uniform float thickness;
46
- uniform bool colorBackfaces;
47
-
48
- // Dash
49
- uniform bool dashInvert;
50
- uniform bool dash;
51
- uniform bool dashOnly;
52
- uniform float dashRepeats;
53
- uniform float dashLength;
54
-
55
- // Squeeze
56
- uniform bool squeeze;
57
- uniform float squeezeMin;
58
- uniform float squeezeMax;
59
-
60
- // Colors
61
- uniform vec3 stroke;
62
- uniform vec3 backfaceStroke;
63
- uniform vec3 fill;
64
-
65
- // This is like
66
- float wireframe_aastep(float threshold, float dist) {
67
- float afwidth = fwidth(dist) * 0.5;
68
- return smoothstep(threshold - afwidth, threshold + afwidth, dist);
69
- }
70
-
71
- float wireframe_map(float value, float min1, float max1, float min2, float max2) {
72
- return min2 + (value - min1) * (max2 - min2) / (max1 - min1);
73
- }
74
-
75
- float getWireframe() {
76
- vec3 barycentric = v_edges_Barycentric;
77
-
78
- // Distance from center of each triangle to its edges.
79
- float d = min(min(barycentric.x, barycentric.y), barycentric.z);
80
-
81
- // for dashed rendering, we can use this to get the 0 .. 1 value of the line length
82
- float positionAlong = max(barycentric.x, barycentric.y);
83
- if (barycentric.y < barycentric.x && barycentric.y < barycentric.z) {
84
- positionAlong = 1.0 - positionAlong;
85
- }
86
-
87
- // the thickness of the stroke
88
- float computedThickness = wireframe_map(thickness, 0.0, 1.0, 0.0, 0.34);
89
-
90
- // if we want to shrink the thickness toward the center of the line segment
91
- if (squeeze) {
92
- computedThickness *= mix(squeezeMin, squeezeMax, (1.0 - sin(positionAlong * PI)));
93
- }
94
-
95
- // Create dash pattern
96
- if (dash) {
97
- // here we offset the stroke position depending on whether it
98
- // should overlap or not
99
- float offset = 1.0 / dashRepeats * dashLength / 2.0;
100
- if (!dashInvert) {
101
- offset += 1.0 / dashRepeats / 2.0;
102
- }
103
-
104
- // if we should animate the dash or not
105
- // if (dashAnimate) {
106
- // offset += time * 0.22;
107
- // }
108
-
109
- // create the repeating dash pattern
110
- float pattern = fract((positionAlong + offset) * dashRepeats);
111
- computedThickness *= 1.0 - wireframe_aastep(dashLength, pattern);
112
- }
113
-
114
- // compute the anti-aliased stroke edge
115
- float edge = 1.0 - wireframe_aastep(computedThickness, d);
116
-
117
- return edge;
118
- }
119
- `,
120
- };
121
- export const WireframeMaterial = shaderMaterial(WireframeMaterialShaders.uniforms, WireframeMaterialShaders.vertex +
122
- /* glsl */ `
123
- void main() {
124
- initWireframe();
125
- gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
126
- }
127
- `, WireframeMaterialShaders.fragment +
128
- /* glsl */ `
129
- void main () {
130
- // Compute color
131
-
132
- float edge = getWireframe();
133
- vec4 colorStroke = vec4(stroke, edge);
134
-
135
- #ifdef FLIP_SIDED
136
- colorStroke.rgb = backfaceStroke;
137
- #endif
138
-
139
- vec4 colorFill = vec4(fill, fillOpacity);
140
- vec4 outColor = mix(colorFill, colorStroke, edge * strokeOpacity);
141
-
142
- gl_FragColor = outColor;
143
- }
144
- `);
145
- export function setWireframeOverride(material, uniforms) {
146
- material.onBeforeCompile = (shader) => {
147
- shader.uniforms = {
148
- ...shader.uniforms,
149
- ...uniforms,
150
- };
151
- shader.vertexShader = shader.vertexShader.replace('void main() {', `
152
- ${WireframeMaterialShaders.vertex}
153
- void main() {
154
- initWireframe();
155
- `);
156
- shader.fragmentShader = shader.fragmentShader.replace('void main() {', `
157
- ${WireframeMaterialShaders.fragment}
158
- void main() {
159
- `);
160
- shader.fragmentShader = shader.fragmentShader.replace('#include <color_fragment>',
161
- /* glsl */ `
162
- #include <color_fragment>
163
- float edge = getWireframe();
164
- vec4 colorStroke = vec4(stroke, edge);
165
- #ifdef FLIP_SIDED
166
- colorStroke.rgb = backfaceStroke;
167
- #endif
168
- vec4 colorFill = vec4(mix(diffuseColor.rgb, fill, fillMix), mix(diffuseColor.a, fillOpacity, fillMix));
169
- vec4 outColor = mix(colorFill, colorStroke, edge * strokeOpacity);
170
-
171
- diffuseColor.rgb = outColor.rgb;
172
- diffuseColor.a *= outColor.a;
173
- `);
174
- };
175
- material.side = THREE.DoubleSide;
176
- material.transparent = true;
177
- }
178
- export function injectNgtsWireframeUniforms(uniformsFactory, stateFactory, { injector } = {}) {
179
- injector = assertInjectionContext(injectNgtsWireframeUniforms, injector);
180
- return runInInjectionContext(injector, () => {
181
- const uniforms = uniformsFactory();
182
- const state = computed(() => stateFactory());
183
- const fillOpacity = computed(() => state().fillOpacity);
184
- const fillMix = computed(() => state().fillMix);
185
- const strokeOpacity = computed(() => state().strokeOpacity);
186
- const thickness = computed(() => state().thickness);
187
- const colorBackfaces = computed(() => state().colorBackfaces);
188
- const dash = computed(() => state().dash);
189
- const dashInvert = computed(() => state().dashInvert);
190
- const dashRepeats = computed(() => state().dashRepeats);
191
- const dashLength = computed(() => state().dashLength);
192
- const squeeze = computed(() => state().squeeze);
193
- const squeezeMin = computed(() => state().squeezeMin);
194
- const squeezeMax = computed(() => state().squeezeMax);
195
- const stroke = computed(() => state().stroke);
196
- const fill = computed(() => state().fill);
197
- const backfaceStroke = computed(() => state().backfaceStroke);
198
- effect(() => {
199
- uniforms['fillOpacity'].value = fillOpacity() ?? uniforms['fillOpacity'].value;
200
- });
201
- effect(() => {
202
- uniforms['fillMix'].value = fillMix() ?? uniforms['fillMix'].value;
203
- });
204
- effect(() => {
205
- uniforms['strokeOpacity'].value = strokeOpacity() ?? uniforms['strokeOpacity'].value;
206
- });
207
- effect(() => {
208
- uniforms['thickness'].value = thickness() ?? uniforms['thickness'].value;
209
- });
210
- effect(() => {
211
- uniforms['colorBackfaces'].value = colorBackfaces() ?? uniforms['colorBackfaces'].value;
212
- });
213
- effect(() => {
214
- uniforms['dash'].value = dash() ?? uniforms['dash'].value;
215
- });
216
- effect(() => {
217
- uniforms['dashInvert'].value = dashInvert() ?? uniforms['dashInvert'].value;
218
- });
219
- effect(() => {
220
- uniforms['dashRepeats'].value = dashRepeats() ?? uniforms['dashRepeats'].value;
221
- });
222
- effect(() => {
223
- uniforms['dashLength'].value = dashLength() ?? uniforms['dashLength'].value;
224
- });
225
- effect(() => {
226
- uniforms['squeeze'].value = squeeze() ?? uniforms['squeeze'].value;
227
- });
228
- effect(() => {
229
- uniforms['squeezeMin'].value = squeezeMin() ?? uniforms['squeezeMin'].value;
230
- });
231
- effect(() => {
232
- uniforms['squeezeMax'].value = squeezeMax() ?? uniforms['squeezeMax'].value;
233
- });
234
- effect(() => {
235
- uniforms['stroke'].value = stroke() ? new THREE.Color(stroke()) : uniforms['stroke'].value;
236
- });
237
- effect(() => {
238
- uniforms['fill'].value = fill() ? new THREE.Color(fill()) : uniforms['fill'].value;
239
- });
240
- effect(() => {
241
- uniforms['backfaceStroke'].value = backfaceStroke()
242
- ? new THREE.Color(backfaceStroke())
243
- : uniforms['backfaceStroke'].value;
244
- });
245
- });
246
- }
247
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lyZWZyYW1lLW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL3NoYWRlcnMvc3JjL3dpcmVmcmFtZS1tYXRlcmlhbC93aXJlZnJhbWUtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUscUJBQXFCLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxzQkFBc0IsRUFBMEIsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBb0JwRSxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRztJQUN2QyxRQUFRLEVBQUU7UUFDVCxhQUFhLEVBQUUsQ0FBQztRQUNoQixXQUFXLEVBQUUsSUFBSTtRQUNqQixPQUFPLEVBQUUsQ0FBQztRQUNWLFNBQVMsRUFBRSxJQUFJO1FBQ2YsY0FBYyxFQUFFLEtBQUs7UUFDckIsVUFBVSxFQUFFLElBQUk7UUFDaEIsSUFBSSxFQUFFLEtBQUs7UUFDWCxXQUFXLEVBQUUsQ0FBQztRQUNkLFVBQVUsRUFBRSxHQUFHO1FBQ2YsT0FBTyxFQUFFLEtBQUs7UUFDZCxVQUFVLEVBQUUsR0FBRztRQUNmLFVBQVUsRUFBRSxDQUFDO1FBQ2IsTUFBTSxFQUFFLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDbEMsY0FBYyxFQUFFLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDMUMsSUFBSSxFQUFFLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7S0FDaEM7SUFDRCxNQUFNLEVBQUUsVUFBVSxDQUFDOzs7Ozs7Ozs7O0lBVWhCO0lBQ0gsUUFBUSxFQUFFLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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LENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCBlZmZlY3QsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCwgdHlwZSBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0aW9uQ29udGV4dCwgdHlwZSBOZ3RTaGFkZXJNYXRlcmlhbCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgc2hhZGVyTWF0ZXJpYWwgfSBmcm9tICcuLi9zaGFkZXItbWF0ZXJpYWwvc2hhZGVyLW1hdGVyaWFsJztcblxuZXhwb3J0IHR5cGUgV2lyZWZyYW1lTWF0ZXJpYWxTdGF0ZSA9IHtcblx0ZmlsbE9wYWNpdHk/OiBudW1iZXI7XG5cdGZpbGxNaXg/OiBudW1iZXI7XG5cdHN0cm9rZU9wYWNpdHk/OiBudW1iZXI7XG5cdHRoaWNrbmVzcz86IG51bWJlcjtcblx0Y29sb3JCYWNrZmFjZXM/OiBib29sZWFuO1xuXHRkYXNoSW52ZXJ0PzogYm9vbGVhbjtcblx0ZGFzaD86IGJvb2xlYW47XG5cdGRhc2hSZXBlYXRzPzogbnVtYmVyO1xuXHRkYXNoTGVuZ3RoPzogbnVtYmVyO1xuXHRzcXVlZXplPzogYm9vbGVhbjtcblx0c3F1ZWV6ZU1pbj86IG51bWJlcjtcblx0c3F1ZWV6ZU1heD86IG51bWJlcjtcblx0c3Ryb2tlPzogVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbjtcblx0YmFja2ZhY2VTdHJva2U/OiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uO1xuXHRmaWxsPzogVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBXaXJlZnJhbWVNYXRlcmlhbFNoYWRlcnMgPSB7XG5cdHVuaWZvcm1zOiB7XG5cdFx0c3Ryb2tlT3BhY2l0eTogMSxcblx0XHRmaWxsT3BhY2l0eTogMC4yNSxcblx0XHRmaWxsTWl4OiAwLFxuXHRcdHRoaWNrbmVzczogMC4wNSxcblx0XHRjb2xvckJhY2tmYWNlczogZmFsc2UsXG5cdFx0ZGFzaEludmVydDogdHJ1ZSxcblx0XHRkYXNoOiBmYWxzZSxcblx0XHRkYXNoUmVwZWF0czogNCxcblx0XHRkYXNoTGVuZ3RoOiAwLjUsXG5cdFx0c3F1ZWV6ZTogZmFsc2UsXG5cdFx0c3F1ZWV6ZU1pbjogMC4yLFxuXHRcdHNxdWVlemVNYXg6IDEsXG5cdFx0c3Ryb2tlOiBuZXcgVEhSRUUuQ29sb3IoJyNmZjAwMDAnKSxcblx0XHRiYWNrZmFjZVN0cm9rZTogbmV3IFRIUkVFLkNvbG9yKCcjMDAwMGZmJyksXG5cdFx0ZmlsbDogbmV3IFRIUkVFLkNvbG9yKCcjMDBmZjAwJyksXG5cdH0sXG5cdHZlcnRleDogLyogZ2xzbCAqLyBgXG5cdCAgYXR0cmlidXRlIHZlYzMgYmFyeWNlbnRyaWM7XG5cblx0XHR2YXJ5aW5nIHZlYzMgdl9lZGdlc19CYXJ5Y2VudHJpYztcblx0XHR2YXJ5aW5nIHZlYzMgdl9lZGdlc19Qb3NpdGlvbjtcblxuXHRcdHZvaWQgaW5pdFdpcmVmcmFtZSgpIHtcblx0XHRcdHZfZWRnZXNfQmFyeWNlbnRyaWMgPSBiYXJ5Y2VudHJpYztcblx0XHRcdHZfZWRnZXNfUG9zaXRpb24gPSBwb3NpdGlvbi54eXo7XG5cdFx0fVxuXHQgIGAsXG5cdGZyYWdtZW50OiAvKiBnbHNsICovIGBcblx0XHQjaWZuZGVmIFBJXG5cdCAgXHQjZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NVxuXHRcdCNlbmRpZlxuXG5cdCAgdmFyeWluZyB2ZWMzIHZfZWRnZXNfQmFyeWNlbnRyaWM7XG5cdCAgdmFyeWluZyB2ZWMzIHZfZWRnZXNfUG9zaXRpb247XG5cblx0ICB1bmlmb3JtIGZsb2F0IHN0cm9rZU9wYWNpdHk7XG5cdCAgdW5pZm9ybSBmbG9hdCBmaWxsT3BhY2l0eTtcblx0ICB1bmlmb3JtIGZsb2F0IGZpbGxNaXg7XG5cdCAgdW5pZm9ybSBmbG9hdCB0aGlja25lc3M7XG5cdCAgdW5pZm9ybSBib29sIGNvbG9yQmFja2ZhY2VzO1xuXG5cdCAgLy8gRGFzaFxuXHQgIHVuaWZvcm0gYm9vbCBkYXNoSW52ZXJ0O1xuXHQgIHVuaWZvcm0gYm9vbCBkYXNoO1xuXHQgIHVuaWZvcm0gYm9vbCBkYXNoT25seTtcblx0ICB1bmlmb3JtIGZsb2F0IGRhc2hSZXBlYXRzO1xuXHQgIHVuaWZvcm0gZmxvYXQgZGFzaExlbmd0aDtcblxuXHQgIC8vIFNxdWVlemVcblx0ICB1bmlmb3JtIGJvb2wgc3F1ZWV6ZTtcblx0ICB1bmlmb3JtIGZsb2F0IHNxdWVlemVNaW47XG5cdCAgdW5pZm9ybSBmbG9hdCBzcXVlZXplTWF4O1xuXG5cdCAgLy8gQ29sb3JzXG5cdCAgdW5pZm9ybSB2ZWMzIHN0cm9rZTtcblx0ICB1bmlmb3JtIHZlYzMgYmFja2ZhY2VTdHJva2U7XG5cdCAgdW5pZm9ybSB2ZWMzIGZpbGw7XG5cblx0ICAvLyBUaGlzIGlzIGxpa2Vcblx0ICBmbG9hdCB3aXJlZnJhbWVfYWFzdGVwKGZsb2F0IHRocmVzaG9sZCwgZmxvYXQgZGlzdCkge1xuXHRcdCAgZmxvYXQgYWZ3aWR0aCA9IGZ3aWR0aChkaXN0KSAqIDAuNTtcblx0XHQgIHJldHVybiBzbW9vdGhzdGVwKHRocmVzaG9sZCAtIGFmd2lkdGgsIHRocmVzaG9sZCArIGFmd2lkdGgsIGRpc3QpO1xuXHQgIH1cblxuXHQgIGZsb2F0IHdpcmVmcmFtZV9tYXAoZmxvYXQgdmFsdWUsIGZsb2F0IG1pbjEsIGZsb2F0IG1heDEsIGZsb2F0IG1pbjIsIGZsb2F0IG1heDIpIHtcblx0XHQgIHJldHVybiBtaW4yICsgKHZhbHVlIC0gbWluMSkgKiAobWF4MiAtIG1pbjIpIC8gKG1heDEgLSBtaW4xKTtcblx0ICB9XG5cblx0ICBmbG9hdCBnZXRXaXJlZnJhbWUoKSB7XG5cdFx0XHR2ZWMzIGJhcnljZW50cmljID0gdl9lZGdlc19CYXJ5Y2VudHJpYztcblxuXHRcdFx0Ly8gRGlzdGFuY2UgZnJvbSBjZW50ZXIgb2YgZWFjaCB0cmlhbmdsZSB0byBpdHMgZWRnZXMuXG5cdFx0XHRmbG9hdCBkID0gbWluKG1pbihiYXJ5Y2VudHJpYy54LCBiYXJ5Y2VudHJpYy55KSwgYmFyeWNlbnRyaWMueik7XG5cblx0XHRcdC8vIGZvciBkYXNoZWQgcmVuZGVyaW5nLCB3ZSBjYW4gdXNlIHRoaXMgdG8gZ2V0IHRoZSAwIC4uIDEgdmFsdWUgb2YgdGhlIGxpbmUgbGVuZ3RoXG5cdFx0XHRmbG9hdCBwb3NpdGlvbkFsb25nID0gbWF4KGJhcnljZW50cmljLngsIGJhcnljZW50cmljLnkpO1xuXHRcdFx0aWYgKGJhcnljZW50cmljLnkgPCBiYXJ5Y2VudHJpYy54ICYmIGJhcnljZW50cmljLnkgPCBiYXJ5Y2VudHJpYy56KSB7XG5cdFx0XHRcdHBvc2l0aW9uQWxvbmcgPSAxLjAgLSBwb3NpdGlvbkFsb25nO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2Vcblx0XHRcdGZsb2F0IGNvbXB1dGVkVGhpY2tuZXNzID0gd2lyZWZyYW1lX21hcCh0aGlja25lc3MsIDAuMCwgMS4wLCAwLjAsIDAuMzQpO1xuXG5cdFx0XHQvLyBpZiB3ZSB3YW50IHRvIHNocmluayB0aGUgdGhpY2tuZXNzIHRvd2FyZCB0aGUgY2VudGVyIG9mIHRoZSBsaW5lIHNlZ21lbnRcblx0XHRcdGlmIChzcXVlZXplKSB7XG5cdFx0XHRcdGNvbXB1dGVkVGhpY2tuZXNzICo9IG1peChzcXVlZXplTWluLCBzcXVlZXplTWF4LCAoMS4wIC0gc2luKHBvc2l0aW9uQWxvbmcgKiBQSSkpKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ3JlYXRlIGRhc2ggcGF0dGVyblxuXHRcdFx0aWYgKGRhc2gpIHtcblx0XHRcdFx0Ly8gaGVyZSB3ZSBvZmZzZXQgdGhlIHN0cm9rZSBwb3NpdGlvbiBkZXBlbmRpbmcgb24gd2hldGhlciBpdFxuXHRcdFx0XHQvLyBzaG91bGQgb3ZlcmxhcCBvciBub3Rcblx0XHRcdFx0ZmxvYXQgb2Zmc2V0ID0gMS4wIC8gZGFzaFJlcGVhdHMgKiBkYXNoTGVuZ3RoIC8gMi4wO1xuXHRcdFx0XHRpZiAoIWRhc2hJbnZlcnQpIHtcblx0XHRcdFx0XHRvZmZzZXQgKz0gMS4wIC8gZGFzaFJlcGVhdHMgLyAyLjA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBpZiB3ZSBzaG91bGQgYW5pbWF0ZSB0aGUgZGFzaCBvciBub3Rcblx0XHRcdFx0Ly8gaWYgKGRhc2hBbmltYXRlKSB7XG5cdFx0XHRcdC8vIFx0b2Zmc2V0ICs9IHRpbWUgKiAwLjIyO1xuXHRcdFx0XHQvLyB9XG5cblx0XHRcdFx0Ly8gY3JlYXRlIHRoZSByZXBlYXRpbmcgZGFzaCBwYXR0ZXJuXG5cdFx0XHRcdGZsb2F0IHBhdHRlcm4gPSBmcmFjdCgocG9zaXRpb25BbG9uZyArIG9mZnNldCkgKiBkYXNoUmVwZWF0cyk7XG5cdFx0XHRcdGNvbXB1dGVkVGhpY2tuZXNzICo9IDEuMCAtIHdpcmVmcmFtZV9hYXN0ZXAoZGFzaExlbmd0aCwgcGF0dGVybik7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGNvbXB1dGUgdGhlIGFudGktYWxpYXNlZCBzdHJva2UgZWRnZVxuXHRcdFx0ZmxvYXQgZWRnZSA9IDEuMCAtIHdpcmVmcmFtZV9hYXN0ZXAoY29tcHV0ZWRUaGlja25lc3MsIGQpO1xuXG5cdFx0XHRyZXR1cm4gZWRnZTtcblx0ICB9XG5cdCAgYCxcbn07XG5cbmV4cG9ydCBjb25zdCBXaXJlZnJhbWVNYXRlcmlhbCA9IHNoYWRlck1hdGVyaWFsKFxuXHRXaXJlZnJhbWVNYXRlcmlhbFNoYWRlcnMudW5pZm9ybXMsXG5cdFdpcmVmcmFtZU1hdGVyaWFsU2hhZGVycy52ZXJ0ZXggK1xuXHRcdC8qIGdsc2wgKi8gYFxuICBcdHZvaWQgbWFpbigpIHtcblx0XHRpbml0V2lyZWZyYW1lKCk7XG5cdFx0Z2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMS4wKTtcblx0fVxuICBgLFxuXHRXaXJlZnJhbWVNYXRlcmlhbFNoYWRlcnMuZnJhZ21lbnQgK1xuXHRcdC8qIGdsc2wgKi8gYFxuICB2b2lkIG1haW4gKCkge1xuXHRcdC8vIENvbXB1dGUgY29sb3JcblxuXHRcdGZsb2F0IGVkZ2UgPSBnZXRXaXJlZnJhbWUoKTtcblx0XHR2ZWM0IGNvbG9yU3Ryb2tlID0gdmVjNChzdHJva2UsIGVkZ2UpO1xuXG5cdFx0I2lmZGVmIEZMSVBfU0lERURcblx0XHRcdGNvbG9yU3Ryb2tlLnJnYiA9IGJhY2tmYWNlU3Ryb2tlO1xuXHRcdCNlbmRpZlxuXG5cdFx0dmVjNCBjb2xvckZpbGwgPSB2ZWM0KGZpbGwsIGZpbGxPcGFjaXR5KTtcblx0XHR2ZWM0IG91dENvbG9yID0gbWl4KGNvbG9yRmlsbCwgY29sb3JTdHJva2UsIGVkZ2UgKiBzdHJva2VPcGFjaXR5KTtcblxuXHRcdGdsX0ZyYWdDb2xvciA9IG91dENvbG9yO1xuXHR9XG4gIGAsXG4pO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuXHRcdC8qKlxuXHRcdCAqIEBleHRlbmRzIG5ndC1zaGFkZXItbWF0ZXJpYWxcblx0XHQgKi9cblx0XHQnbmd0LXdpcmVmcmFtZS1tYXRlcmlhbCc6IFdpcmVmcmFtZU1hdGVyaWFsU3RhdGUgJiBOZ3RTaGFkZXJNYXRlcmlhbDtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0V2lyZWZyYW1lT3ZlcnJpZGUoXG5cdG1hdGVyaWFsOiBUSFJFRS5NYXRlcmlhbCxcblx0dW5pZm9ybXM6IHtcblx0XHRba2V5OiBzdHJpbmddOiBUSFJFRS5JVW5pZm9ybTxhbnk+O1xuXHR9LFxuKSB7XG5cdG1hdGVyaWFsLm9uQmVmb3JlQ29tcGlsZSA9IChzaGFkZXIpID0+IHtcblx0XHRzaGFkZXIudW5pZm9ybXMgPSB7XG5cdFx0XHQuLi5zaGFkZXIudW5pZm9ybXMsXG5cdFx0XHQuLi51bmlmb3Jtcyxcblx0XHR9O1xuXG5cdFx0c2hhZGVyLnZlcnRleFNoYWRlciA9IHNoYWRlci52ZXJ0ZXhTaGFkZXIucmVwbGFjZShcblx0XHRcdCd2b2lkIG1haW4oKSB7Jyxcblx0XHRcdGBcblx0XHQgICR7V2lyZWZyYW1lTWF0ZXJpYWxTaGFkZXJzLnZlcnRleH1cblx0XHQgIHZvaWQgbWFpbigpIHtcblx0XHRcdGluaXRXaXJlZnJhbWUoKTtcblx0XHRgLFxuXHRcdCk7XG5cblx0XHRzaGFkZXIuZnJhZ21lbnRTaGFkZXIgPSBzaGFkZXIuZnJhZ21lbnRTaGFkZXIucmVwbGFjZShcblx0XHRcdCd2b2lkIG1haW4oKSB7Jyxcblx0XHRcdGBcblx0XHQgICR7V2lyZWZyYW1lTWF0ZXJpYWxTaGFkZXJzLmZyYWdtZW50fVxuXHRcdCAgdm9pZCBtYWluKCkge1xuXHRcdGAsXG5cdFx0KTtcblxuXHRcdHNoYWRlci5mcmFnbWVudFNoYWRlciA9IHNoYWRlci5mcmFnbWVudFNoYWRlci5yZXBsYWNlKFxuXHRcdFx0JyNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4nLFxuXHRcdFx0LyogZ2xzbCAqLyBgXG5cdFx0ICAjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdFx0XHQgIGZsb2F0IGVkZ2UgPSBnZXRXaXJlZnJhbWUoKTtcblx0XHQgIHZlYzQgY29sb3JTdHJva2UgPSB2ZWM0KHN0cm9rZSwgZWRnZSk7XG5cdFx0ICAjaWZkZWYgRkxJUF9TSURFRFxuXHRcdFx0ICBjb2xvclN0cm9rZS5yZ2IgPSBiYWNrZmFjZVN0cm9rZTtcblx0XHQgICNlbmRpZlxuXHRcdCAgdmVjNCBjb2xvckZpbGwgPSB2ZWM0KG1peChkaWZmdXNlQ29sb3IucmdiLCBmaWxsLCBmaWxsTWl4KSwgbWl4KGRpZmZ1c2VDb2xvci5hLCBmaWxsT3BhY2l0eSwgZmlsbE1peCkpO1xuXHRcdCAgdmVjNCBvdXRDb2xvciA9IG1peChjb2xvckZpbGwsIGNvbG9yU3Ryb2tlLCBlZGdlICogc3Ryb2tlT3BhY2l0eSk7XG5cblx0XHQgIGRpZmZ1c2VDb2xvci5yZ2IgPSBvdXRDb2xvci5yZ2I7XG5cdFx0ICBkaWZmdXNlQ29sb3IuYSAqPSBvdXRDb2xvci5hO1xuXHRcdGAsXG5cdFx0KTtcblx0fTtcblxuXHRtYXRlcmlhbC5zaWRlID0gVEhSRUUuRG91YmxlU2lkZTtcblx0bWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Tmd0c1dpcmVmcmFtZVVuaWZvcm1zKFxuXHR1bmlmb3Jtc0ZhY3Rvcnk6ICgpID0+IFJlY29yZDxzdHJpbmcsIFRIUkVFLklVbmlmb3JtPGFueT4+LFxuXHRzdGF0ZUZhY3Rvcnk6ICgpID0+IFBhcnRpYWw8V2lyZWZyYW1lTWF0ZXJpYWxTdGF0ZT4sXG5cdHsgaW5qZWN0b3IgfTogeyBpbmplY3Rvcj86IEluamVjdG9yIH0gPSB7fSxcbikge1xuXHRpbmplY3RvciA9IGFzc2VydEluamVjdGlvbkNvbnRleHQoaW5qZWN0Tmd0c1dpcmVmcmFtZVVuaWZvcm1zLCBpbmplY3Rvcik7XG5cdHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCB1bmlmb3JtcyA9IHVuaWZvcm1zRmFjdG9yeSgpO1xuXHRcdGNvbnN0IHN0YXRlID0gY29tcHV0ZWQoKCkgPT4gc3RhdGVGYWN0b3J5KCkpO1xuXHRcdGNvbnN0IGZpbGxPcGFjaXR5ID0gY29tcHV0ZWQoKCkgPT4gc3RhdGUoKS5maWxsT3BhY2l0eSk7XG5cdFx0Y29uc3QgZmlsbE1peCA9IGNvbXB1dGVkKCgpID0+IHN0YXRlKCkuZmlsbE1peCk7XG5cdFx0Y29uc3Qgc3Ryb2tlT3BhY2l0eSA9IGNvbXB1dGVkKCgpID0+IHN0YXRlKCkuc3Ryb2tlT3BhY2l0eSk7XG5cdFx0Y29uc3QgdGhpY2tuZXNzID0gY29tcHV0ZWQoKCkgPT4gc3RhdGUoKS50aGlja25lc3MpO1xuXHRcdGNvbnN0IGNvbG9yQmFja2ZhY2VzID0gY29tcHV0ZWQoKCkgPT4gc3RhdGUoKS5jb2xvckJhY2tmYWNlcyk7XG5cdFx0Y29uc3QgZGFzaCA9IGNvbXB1dGVkKCgpID0+IHN0YXRlKCkuZGFzaCk7XG5cdFx0Y29uc3QgZGFzaEludmVydCA9IGNvbXB1dGVkKCgpID0+IHN0YXRlKCkuZGFzaEludmVydCk7XG5cdFx0Y29uc3QgZGFzaFJlcGVhdHMgPSBjb21wdXRlZCgoKSA9PiBzdGF0ZSgpLmRhc2hSZXBlYXRzKTtcblx0XHRjb25zdCBkYXNoTGVuZ3RoID0gY29tcHV0ZWQoKCkgPT4gc3RhdGUoKS5kYXNoTGVuZ3RoKTtcblx0XHRjb25zdCBzcXVlZXplID0gY29tcHV0ZWQoKCkgPT4gc3RhdGUoKS5zcXVlZXplKTtcblx0XHRjb25zdCBzcXVlZXplTWluID0gY29tcHV0ZWQoKCkgPT4gc3RhdGUoKS5zcXVlZXplTWluKTtcblx0XHRjb25zdCBzcXVlZXplTWF4ID0gY29tcHV0ZWQoKCkgPT4gc3RhdGUoKS5zcXVlZXplTWF4KTtcblx0XHRjb25zdCBzdHJva2UgPSBjb21wdXRlZCgoKSA9PiBzdGF0ZSgpLnN0cm9rZSk7XG5cdFx0Y29uc3QgZmlsbCA9IGNvbXB1dGVkKCgpID0+IHN0YXRlKCkuZmlsbCk7XG5cdFx0Y29uc3QgYmFja2ZhY2VTdHJva2UgPSBjb21wdXRlZCgoKSA9PiBzdGF0ZSgpLmJhY2tmYWNlU3Ryb2tlKTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR1bmlmb3Jtc1snZmlsbE9wYWNpdHknXS52YWx1ZSA9IGZpbGxPcGFjaXR5KCkgPz8gdW5pZm9ybXNbJ2ZpbGxPcGFjaXR5J10udmFsdWU7XG5cdFx0fSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0dW5pZm9ybXNbJ2ZpbGxNaXgnXS52YWx1ZSA9IGZpbGxNaXgoKSA/PyB1bmlmb3Jtc1snZmlsbE1peCddLnZhbHVlO1xuXHRcdH0pO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdHVuaWZvcm1zWydzdHJva2VPcGFjaXR5J10udmFsdWUgPSBzdHJva2VPcGFjaXR5KCkgPz8gdW5pZm9ybXNbJ3N0cm9rZU9wYWNpdHknXS52YWx1ZTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR1bmlmb3Jtc1sndGhpY2tuZXNzJ10udmFsdWUgPSB0aGlja25lc3MoKSA/PyB1bmlmb3Jtc1sndGhpY2tuZXNzJ10udmFsdWU7XG5cdFx0fSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0dW5pZm9ybXNbJ2NvbG9yQmFja2ZhY2VzJ10udmFsdWUgPSBjb2xvckJhY2tmYWNlcygpID8/IHVuaWZvcm1zWydjb2xvckJhY2tmYWNlcyddLnZhbHVlO1xuXHRcdH0pO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdHVuaWZvcm1zWydkYXNoJ10udmFsdWUgPSBkYXNoKCkgPz8gdW5pZm9ybXNbJ2Rhc2gnXS52YWx1ZTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR1bmlmb3Jtc1snZGFzaEludmVydCddLnZhbHVlID0gZGFzaEludmVydCgpID8/IHVuaWZvcm1zWydkYXNoSW52ZXJ0J10udmFsdWU7XG5cdFx0fSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0dW5pZm9ybXNbJ2Rhc2hSZXBlYXRzJ10udmFsdWUgPSBkYXNoUmVwZWF0cygpID8/IHVuaWZvcm1zWydkYXNoUmVwZWF0cyddLnZhbHVlO1xuXHRcdH0pO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdHVuaWZvcm1zWydkYXNoTGVuZ3RoJ10udmFsdWUgPSBkYXNoTGVuZ3RoKCkgPz8gdW5pZm9ybXNbJ2Rhc2hMZW5ndGgnXS52YWx1ZTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR1bmlmb3Jtc1snc3F1ZWV6ZSddLnZhbHVlID0gc3F1ZWV6ZSgpID8/IHVuaWZvcm1zWydzcXVlZXplJ10udmFsdWU7XG5cdFx0fSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0dW5pZm9ybXNbJ3NxdWVlemVNaW4nXS52YWx1ZSA9IHNxdWVlemVNaW4oKSA/PyB1bmlmb3Jtc1snc3F1ZWV6ZU1pbiddLnZhbHVlO1xuXHRcdH0pO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdHVuaWZvcm1zWydzcXVlZXplTWF4J10udmFsdWUgPSBzcXVlZXplTWF4KCkgPz8gdW5pZm9ybXNbJ3NxdWVlemVNYXgnXS52YWx1ZTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR1bmlmb3Jtc1snc3Ryb2tlJ10udmFsdWUgPSBzdHJva2UoKSA/IG5ldyBUSFJFRS5Db2xvcihzdHJva2UoKSkgOiB1bmlmb3Jtc1snc3Ryb2tlJ10udmFsdWU7XG5cdFx0fSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0dW5pZm9ybXNbJ2ZpbGwnXS52YWx1ZSA9IGZpbGwoKSA/IG5ldyBUSFJFRS5Db2xvcihmaWxsKCkpIDogdW5pZm9ybXNbJ2ZpbGwnXS52YWx1ZTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR1bmlmb3Jtc1snYmFja2ZhY2VTdHJva2UnXS52YWx1ZSA9IGJhY2tmYWNlU3Ryb2tlKClcblx0XHRcdFx0PyBuZXcgVEhSRUUuQ29sb3IoYmFja2ZhY2VTdHJva2UoKSlcblx0XHRcdFx0OiB1bmlmb3Jtc1snYmFja2ZhY2VTdHJva2UnXS52YWx1ZTtcblx0XHR9KTtcblx0fSk7XG59XG4iXX0=
@@ -1,267 +0,0 @@
1
- import { Component, computed, CUSTOM_ELEMENTS_SCHEMA, effect, forwardRef, Input, untracked, } from '@angular/core';
2
- import { createInjectionToken, extend, getLocalState, injectBeforeRender, injectNgtRef, injectNgtStore, signalStore, } from 'angular-three';
3
- import { SoftShadowMaterial } from 'angular-three-soba/shaders';
4
- import { Group, Mesh, PlaneGeometry } from 'three';
5
- import { ProgressiveLightMap } from './progressive-light-map';
6
- import * as i0 from "@angular/core";
7
- extend({ Group, SoftShadowMaterial, Mesh, PlaneGeometry });
8
- export const [injectNgtsAccumulativeShadowsApi, provideNgtsAccumulativeShadowsApi] = createInjectionToken((shadows) => shadows.api, { isRoot: false, deps: [forwardRef(() => NgtsAccumulativeShadows)] });
9
- export class NgtsAccumulativeShadows {
10
- /** How many frames it can render, more yields cleaner results but takes more time, 40 */
11
- set _frames(frames) {
12
- this.inputs.set({ frames });
13
- }
14
- /** If frames === Infinity blend controls the refresh ratio, 100 */
15
- set _blend(blend) {
16
- this.inputs.set({ blend });
17
- }
18
- /** Can limit the amount of frames rendered if frames === Infinity, usually to get some performance back once a movable scene has settled, Infinity */
19
- set _limit(limit) {
20
- this.inputs.set({ limit });
21
- }
22
- /** Scale of the plane, */
23
- set _scale(scale) {
24
- this.inputs.set({ scale });
25
- }
26
- /** Temporal accumulates shadows over time which is more performant but has a visual regression over instant results, false */
27
- set _temporal(temporal) {
28
- this.inputs.set({ temporal });
29
- }
30
- /** Opacity of the plane, 1 */
31
- set _opacity(opacity) {
32
- this.inputs.set({ opacity });
33
- }
34
- /** Discards alpha pixels, 0.65 */
35
- set _alphaTest(alphaTest) {
36
- this.inputs.set({ alphaTest });
37
- }
38
- /** Shadow color, black */
39
- set _color(color) {
40
- this.inputs.set({ color });
41
- }
42
- /** Colorblend, how much colors turn to black, 0 is black, 2 */
43
- set _colorBlend(colorBlend) {
44
- this.inputs.set({ colorBlend });
45
- }
46
- /** Buffer resolution, 1024 */
47
- set _resolution(resolution) {
48
- this.inputs.set({ resolution });
49
- }
50
- /** Texture tonemapping */
51
- set _toneMapped(toneMapped) {
52
- this.inputs.set({ toneMapped });
53
- }
54
- constructor() {
55
- this.inputs = signalStore({
56
- frames: 40,
57
- limit: Infinity,
58
- blend: 20,
59
- scale: 10,
60
- opacity: 1,
61
- alphaTest: 0.75,
62
- color: 'black',
63
- colorBlend: 2,
64
- resolution: 1024,
65
- toneMapped: true,
66
- temporal: false,
67
- });
68
- this.nullTraverse = () => null;
69
- this.Math = Math;
70
- this.accumulativeShadowsRef = injectNgtRef();
71
- this.meshRef = injectNgtRef();
72
- this.store = injectNgtStore();
73
- this.gl = this.store.select('gl');
74
- this.scene = this.store.select('scene');
75
- this.camera = this.store.select('camera');
76
- this.invalidate = this.store.select('invalidate');
77
- this.resolution = this.inputs.select('resolution');
78
- this.alphaTest = this.inputs.select('alphaTest');
79
- this.opacity = this.inputs.select('opacity');
80
- this.temporal = this.inputs.select('temporal');
81
- this.blend = this.inputs.select('blend');
82
- this.frames = this.inputs.select('frames');
83
- this.pLM = computed(() => new ProgressiveLightMap(untracked(this.gl), untracked(this.scene), this.resolution()));
84
- this.scale = this.inputs.select('scale');
85
- this.toneMapped = this.inputs.select('toneMapped');
86
- this.color = this.inputs.select('color');
87
- this.colorBlend = this.inputs.select('colorBlend');
88
- this.map = computed(() => this.pLM().progressiveLightMap2.texture);
89
- this.api = computed(() => {
90
- const [pLM, alphaTest, opacity, camera, temporal, blend, frames] = [
91
- this.pLM(),
92
- this.alphaTest(),
93
- this.opacity(),
94
- this.camera(),
95
- this.temporal(),
96
- this.blend(),
97
- this.frames(),
98
- ];
99
- const api = {
100
- lights: new Map(),
101
- temporal,
102
- frames: Math.max(2, frames),
103
- blend: Math.max(2, frames === Infinity ? blend : frames),
104
- count: 0,
105
- getMesh: () => this.meshRef.nativeElement,
106
- reset: () => {
107
- if (!this.meshRef.nativeElement)
108
- return;
109
- // Clear buffers, reset opacities, set frame count to 0
110
- pLM.clear();
111
- const material = this.meshRef.nativeElement.material;
112
- material.opacity = 0;
113
- material.alphaTest = 0;
114
- api.count = 0;
115
- },
116
- update: (frames = 1) => {
117
- if (!this.meshRef.nativeElement)
118
- return;
119
- // Adapt the opacity-blend ratio to the number of frames
120
- const material = this.meshRef.nativeElement.material;
121
- if (!api.temporal) {
122
- material.opacity = opacity;
123
- material.alphaTest = alphaTest;
124
- }
125
- else {
126
- material.opacity = Math.min(opacity, material.opacity + opacity / api.blend);
127
- material.alphaTest = Math.min(alphaTest, material.alphaTest + alphaTest / api.blend);
128
- }
129
- // Switch accumulative lights on
130
- this.accumulativeShadowsRef.nativeElement.visible = true;
131
- // Collect scene lights and meshes
132
- pLM.prepare();
133
- // Update the lightmap and the accumulative lights
134
- for (let i = 0; i < frames; i++) {
135
- api.lights.forEach((light) => light().update());
136
- pLM.update(camera, api.blend);
137
- }
138
- // Switch lights off
139
- this.accumulativeShadowsRef.nativeElement.visible = false;
140
- // Restore lights and meshes
141
- pLM.finish();
142
- },
143
- };
144
- return api;
145
- });
146
- this.configure();
147
- this.resetAndUpdate();
148
- this.beforeRender();
149
- }
150
- configure() {
151
- effect(() => {
152
- const [pLM, mesh] = [this.pLM(), this.meshRef.nativeElement];
153
- if (!mesh)
154
- return;
155
- pLM.configure(mesh);
156
- });
157
- }
158
- resetAndUpdate() {
159
- effect(() => {
160
- const [, , mesh] = [
161
- this.inputs.state(),
162
- getLocalState(untracked(this.scene)).objects(),
163
- this.meshRef.nativeElement,
164
- ];
165
- if (!mesh)
166
- return;
167
- const api = untracked(this.api);
168
- // Reset internals, buffers, ...
169
- api.reset();
170
- // Update lightmap
171
- if (!api.temporal && api.frames !== Infinity)
172
- api.update(api.blend);
173
- });
174
- }
175
- beforeRender() {
176
- injectBeforeRender(() => {
177
- const [api, limit] = [this.api(), this.inputs.get('limit')];
178
- if ((api.temporal || api.frames === Infinity) && api.count < api.frames && api.count < limit) {
179
- this.invalidate();
180
- api.update();
181
- api.count++;
182
- }
183
- });
184
- }
185
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsAccumulativeShadows, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
186
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NgtsAccumulativeShadows, isStandalone: true, selector: "ngts-accumulative-shadows", inputs: { accumulativeShadowsRef: "accumulativeShadowsRef", _frames: ["frames", "_frames"], _blend: ["blend", "_blend"], _limit: ["limit", "_limit"], _scale: ["scale", "_scale"], _temporal: ["temporal", "_temporal"], _opacity: ["opacity", "_opacity"], _alphaTest: ["alphaTest", "_alphaTest"], _color: ["color", "_color"], _colorBlend: ["colorBlend", "_colorBlend"], _resolution: ["resolution", "_resolution"], _toneMapped: ["toneMapped", "_toneMapped"] }, providers: [provideNgtsAccumulativeShadowsApi()], ngImport: i0, template: `
187
- <ngt-group ngtCompound>
188
- <ngt-group [traverse]="nullTraverse" [ref]="accumulativeShadowsRef">
189
- <ng-content />
190
- </ngt-group>
191
- <ngt-mesh [receiveShadow]="true" [ref]="meshRef" [scale]="scale()" [rotation]="[-Math.PI / 2, 0, 0]">
192
- <ngt-plane-geometry />
193
- <ngt-soft-shadow-material
194
- [transparent]="true"
195
- [depthWrite]="false"
196
- [toneMapped]="toneMapped()"
197
- [color]="color()"
198
- [blend]="colorBlend()"
199
- [map]="map()"
200
- />
201
- </ngt-mesh>
202
- </ngt-group>
203
- `, isInline: true }); }
204
- }
205
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsAccumulativeShadows, decorators: [{
206
- type: Component,
207
- args: [{
208
- selector: 'ngts-accumulative-shadows',
209
- standalone: true,
210
- template: `
211
- <ngt-group ngtCompound>
212
- <ngt-group [traverse]="nullTraverse" [ref]="accumulativeShadowsRef">
213
- <ng-content />
214
- </ngt-group>
215
- <ngt-mesh [receiveShadow]="true" [ref]="meshRef" [scale]="scale()" [rotation]="[-Math.PI / 2, 0, 0]">
216
- <ngt-plane-geometry />
217
- <ngt-soft-shadow-material
218
- [transparent]="true"
219
- [depthWrite]="false"
220
- [toneMapped]="toneMapped()"
221
- [color]="color()"
222
- [blend]="colorBlend()"
223
- [map]="map()"
224
- />
225
- </ngt-mesh>
226
- </ngt-group>
227
- `,
228
- providers: [provideNgtsAccumulativeShadowsApi()],
229
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
230
- }]
231
- }], ctorParameters: function () { return []; }, propDecorators: { accumulativeShadowsRef: [{
232
- type: Input
233
- }], _frames: [{
234
- type: Input,
235
- args: [{ alias: 'frames' }]
236
- }], _blend: [{
237
- type: Input,
238
- args: [{ alias: 'blend' }]
239
- }], _limit: [{
240
- type: Input,
241
- args: [{ alias: 'limit' }]
242
- }], _scale: [{
243
- type: Input,
244
- args: [{ alias: 'scale' }]
245
- }], _temporal: [{
246
- type: Input,
247
- args: [{ alias: 'temporal' }]
248
- }], _opacity: [{
249
- type: Input,
250
- args: [{ alias: 'opacity' }]
251
- }], _alphaTest: [{
252
- type: Input,
253
- args: [{ alias: 'alphaTest' }]
254
- }], _color: [{
255
- type: Input,
256
- args: [{ alias: 'color' }]
257
- }], _colorBlend: [{
258
- type: Input,
259
- args: [{ alias: 'colorBlend' }]
260
- }], _resolution: [{
261
- type: Input,
262
- args: [{ alias: 'resolution' }]
263
- }], _toneMapped: [{
264
- type: Input,
265
- args: [{ alias: 'toneMapped' }]
266
- }] } });
267
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjdW11bGF0aXZlLXNoYWRvd3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvYWNjdW11bGF0aXZlLXNoYWRvd3MvYWNjdW11bGF0aXZlLXNoYWRvd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFDVCxRQUFRLEVBQ1Isc0JBQXNCLEVBQ3RCLE1BQU0sRUFDTixVQUFVLEVBQ1YsS0FBSyxFQUVMLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ04sb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixhQUFhLEVBQ2Isa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixjQUFjLEVBQ2QsV0FBVyxHQUVYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBbUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBRTlELE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztBQXNDM0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxnQ0FBZ0MsRUFBRSxpQ0FBaUMsQ0FBQyxHQUFHLG9CQUFvQixDQUN4RyxDQUFDLE9BQWdDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQ2pELEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxFQUFFLENBQ3BFLENBQUM7QUEwQkYsTUFBTSxPQUFPLHVCQUF1QjtJQW9CbkMseUZBQXlGO0lBQ3pGLElBQWdDLE9BQU8sQ0FBQyxNQUFjO1FB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QXNCLENBQUM7aUJBQ2pDOzBFQW1CUyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBRzBCLE9BQU87c0JBQXRDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO2dCQUtLLE1BQU07c0JBQXBDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUtNLE1BQU07c0JBQXBDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUtNLE1BQU07c0JBQXBDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUtTLFNBQVM7c0JBQTFDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFO2dCQUtLLFFBQVE7c0JBQXhDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO2dCQUtRLFVBQVU7c0JBQTVDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFO2dCQUtFLE1BQU07c0JBQXBDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUtXLFdBQVc7c0JBQTlDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFO2dCQUtNLFdBQVc7c0JBQTlDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFO2dCQUtNLFdBQVc7c0JBQTlDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRjb21wdXRlZCxcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0ZWZmZWN0LFxuXHRmb3J3YXJkUmVmLFxuXHRJbnB1dCxcblx0U2lnbmFsLFxuXHR1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcblx0Y3JlYXRlSW5qZWN0aW9uVG9rZW4sXG5cdGV4dGVuZCxcblx0Z2V0TG9jYWxTdGF0ZSxcblx0aW5qZWN0QmVmb3JlUmVuZGVyLFxuXHRpbmplY3ROZ3RSZWYsXG5cdGluamVjdE5ndFN0b3JlLFxuXHRzaWduYWxTdG9yZSxcblx0dHlwZSBOZ3RHcm91cCxcbn0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBTb2Z0U2hhZG93TWF0ZXJpYWwsIHR5cGUgTmd0U29mdFNoYWRvd01hdGVyaWFsU3RhdGUgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvc2hhZGVycyc7XG5pbXBvcnQgeyBHcm91cCwgTWVzaCwgUGxhbmVHZW9tZXRyeSB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IFByb2dyZXNzaXZlTGlnaHRNYXAgfSBmcm9tICcuL3Byb2dyZXNzaXZlLWxpZ2h0LW1hcCc7XG5cbmV4dGVuZCh7IEdyb3VwLCBTb2Z0U2hhZG93TWF0ZXJpYWwsIE1lc2gsIFBsYW5lR2VvbWV0cnkgfSk7XG5cbmV4cG9ydCB0eXBlIE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzU3RhdGUgPSB7XG5cdC8qKiBIb3cgbWFueSBmcmFtZXMgaXQgY2FuIHJlbmRlciwgbW9yZSB5aWVsZHMgY2xlYW5lciByZXN1bHRzIGJ1dCB0YWtlcyBtb3JlIHRpbWUsIDQwICovXG5cdGZyYW1lczogbnVtYmVyO1xuXHQvKiogSWYgZnJhbWVzID09PSBJbmZpbml0eSBibGVuZCBjb250cm9scyB0aGUgcmVmcmVzaCByYXRpbywgMTAwICovXG5cdGJsZW5kOiBudW1iZXI7XG5cdC8qKiBDYW4gbGltaXQgdGhlIGFtb3VudCBvZiBmcmFtZXMgcmVuZGVyZWQgaWYgZnJhbWVzID09PSBJbmZpbml0eSwgdXN1YWxseSB0byBnZXQgc29tZSBwZXJmb3JtYW5jZSBiYWNrIG9uY2UgYSBtb3ZhYmxlIHNjZW5lIGhhcyBzZXR0bGVkLCBJbmZpbml0eSAqL1xuXHRsaW1pdDogbnVtYmVyO1xuXHQvKiogU2NhbGUgb2YgdGhlIHBsYW5lLCAgKi9cblx0c2NhbGU6IG51bWJlcjtcblx0LyoqIFRlbXBvcmFsIGFjY3VtdWxhdGVzIHNoYWRvd3Mgb3ZlciB0aW1lIHdoaWNoIGlzIG1vcmUgcGVyZm9ybWFudCBidXQgaGFzIGEgdmlzdWFsIHJlZ3Jlc3Npb24gb3ZlciBpbnN0YW50IHJlc3VsdHMsIGZhbHNlICAqL1xuXHR0ZW1wb3JhbDogYm9vbGVhbjtcblx0LyoqIE9wYWNpdHkgb2YgdGhlIHBsYW5lLCAxICovXG5cdG9wYWNpdHk6IG51bWJlcjtcblx0LyoqIERpc2NhcmRzIGFscGhhIHBpeGVscywgMC42NSAqL1xuXHRhbHBoYVRlc3Q6IG51bWJlcjtcblx0LyoqIFNoYWRvdyBjb2xvciwgYmxhY2sgKi9cblx0Y29sb3I6IHN0cmluZztcblx0LyoqIENvbG9yYmxlbmQsIGhvdyBtdWNoIGNvbG9ycyB0dXJuIHRvIGJsYWNrLCAwIGlzIGJsYWNrLCAyICovXG5cdGNvbG9yQmxlbmQ6IG51bWJlcjtcblx0LyoqIEJ1ZmZlciByZXNvbHV0aW9uLCAxMDI0ICovXG5cdHJlc29sdXRpb246IG51bWJlcjtcblx0LyoqIFRleHR1cmUgdG9uZW1hcHBpbmcgKi9cblx0dG9uZU1hcHBlZDogYm9vbGVhbjtcbn07XG5cbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG5cdFx0LyoqXG5cdFx0ICogQGV4dGVuZHMgbmd0LWdyb3VwXG5cdFx0ICovXG5cdFx0J25ndHMtYWNjdW11bGF0aXZlLXNoYWRvd3MnOiBOZ3RzQWNjdW11bGF0aXZlU2hhZG93c1N0YXRlICYgTmd0R3JvdXA7XG5cdH1cbn1cblxuZXhwb3J0IHR5cGUgTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3NMaWdodEFwaSA9IHsgdXBkYXRlOiAoKSA9PiB2b2lkIH07XG5cbmV4cG9ydCBjb25zdCBbaW5qZWN0Tmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3NBcGksIHByb3ZpZGVOZ3RzQWNjdW11bGF0aXZlU2hhZG93c0FwaV0gPSBjcmVhdGVJbmplY3Rpb25Ub2tlbihcblx0KHNoYWRvd3M6IE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzKSA9PiBzaGFkb3dzLmFwaSxcblx0eyBpc1Jvb3Q6IGZhbHNlLCBkZXBzOiBbZm9yd2FyZFJlZigoKSA9PiBOZ3RzQWNjdW11bGF0aXZlU2hhZG93cyldIH0sXG4pO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLWFjY3VtdWxhdGl2ZS1zaGFkb3dzJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LWdyb3VwIG5ndENvbXBvdW5kPlxuXHRcdFx0PG5ndC1ncm91cCBbdHJhdmVyc2VdPVwibnVsbFRyYXZlcnNlXCIgW3JlZl09XCJhY2N1bXVsYXRpdmVTaGFkb3dzUmVmXCI+XG5cdFx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0XHQ8L25ndC1ncm91cD5cblx0XHRcdDxuZ3QtbWVzaCBbcmVjZWl2ZVNoYWRvd109XCJ0cnVlXCIgW3JlZl09XCJtZXNoUmVmXCIgW3NjYWxlXT1cInNjYWxlKClcIiBbcm90YXRpb25dPVwiWy1NYXRoLlBJIC8gMiwgMCwgMF1cIj5cblx0XHRcdFx0PG5ndC1wbGFuZS1nZW9tZXRyeSAvPlxuXHRcdFx0XHQ8bmd0LXNvZnQtc2hhZG93LW1hdGVyaWFsXG5cdFx0XHRcdFx0W3RyYW5zcGFyZW50XT1cInRydWVcIlxuXHRcdFx0XHRcdFtkZXB0aFdyaXRlXT1cImZhbHNlXCJcblx0XHRcdFx0XHRbdG9uZU1hcHBlZF09XCJ0b25lTWFwcGVkKClcIlxuXHRcdFx0XHRcdFtjb2xvcl09XCJjb2xvcigpXCJcblx0XHRcdFx0XHRbYmxlbmRdPVwiY29sb3JCbGVuZCgpXCJcblx0XHRcdFx0XHRbbWFwXT1cIm1hcCgpXCJcblx0XHRcdFx0Lz5cblx0XHRcdDwvbmd0LW1lc2g+XG5cdFx0PC9uZ3QtZ3JvdXA+XG5cdGAsXG5cdHByb3ZpZGVyczogW3Byb3ZpZGVOZ3RzQWNjdW11bGF0aXZlU2hhZG93c0FwaSgpXSxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzQWNjdW11bGF0aXZlU2hhZG93cyB7XG5cdHByaXZhdGUgaW5wdXRzID0gc2lnbmFsU3RvcmU8Tmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3NTdGF0ZT4oe1xuXHRcdGZyYW1lczogNDAsXG5cdFx0bGltaXQ6IEluZmluaXR5LFxuXHRcdGJsZW5kOiAyMCxcblx0XHRzY2FsZTogMTAsXG5cdFx0b3BhY2l0eTogMSxcblx0XHRhbHBoYVRlc3Q6IDAuNzUsXG5cdFx0Y29sb3I6ICdibGFjaycsXG5cdFx0Y29sb3JCbGVuZDogMixcblx0XHRyZXNvbHV0aW9uOiAxMDI0LFxuXHRcdHRvbmVNYXBwZWQ6IHRydWUsXG5cdFx0dGVtcG9yYWw6IGZhbHNlLFxuXHR9KTtcblxuXHRudWxsVHJhdmVyc2UgPSAoKSA9PiBudWxsO1xuXHRNYXRoID0gTWF0aDtcblxuXHRASW5wdXQoKSBhY2N1bXVsYXRpdmVTaGFkb3dzUmVmID0gaW5qZWN0Tmd0UmVmPFRIUkVFLkdyb3VwPigpO1xuXG5cdC8qKiBIb3cgbWFueSBmcmFtZXMgaXQgY2FuIHJlbmRlciwgbW9yZSB5aWVsZHMgY2xlYW5lciByZXN1bHRzIGJ1dCB0YWtlcyBtb3JlIHRpbWUsIDQwICovXG5cdEBJbnB1dCh7IGFsaWFzOiAnZnJhbWVzJyB9KSBzZXQgX2ZyYW1lcyhmcmFtZXM6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGZyYW1lcyB9KTtcblx0fVxuXG5cdC8qKiBJZiBmcmFtZXMgPT09IEluZmluaXR5IGJsZW5kIGNvbnRyb2xzIHRoZSByZWZyZXNoIHJhdGlvLCAxMDAgKi9cblx0QElucHV0KHsgYWxpYXM6ICdibGVuZCcgfSkgc2V0IF9ibGVuZChibGVuZDogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgYmxlbmQgfSk7XG5cdH1cblxuXHQvKiogQ2FuIGxpbWl0IHRoZSBhbW91bnQgb2YgZnJhbWVzIHJlbmRlcmVkIGlmIGZyYW1lcyA9PT0gSW5maW5pdHksIHVzdWFsbHkgdG8gZ2V0IHNvbWUgcGVyZm9ybWFuY2UgYmFjayBvbmNlIGEgbW92YWJsZSBzY2VuZSBoYXMgc2V0dGxlZCwgSW5maW5pdHkgKi9cblx0QElucHV0KHsgYWxpYXM6ICdsaW1pdCcgfSkgc2V0IF9saW1pdChsaW1pdDogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgbGltaXQgfSk7XG5cdH1cblxuXHQvKiogU2NhbGUgb2YgdGhlIHBsYW5lLCAgKi9cblx0QElucHV0KHsgYWxpYXM6ICdzY2FsZScgfSkgc2V0IF9zY2FsZShzY2FsZTogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgc2NhbGUgfSk7XG5cdH1cblxuXHQvKiogVGVtcG9yYWwgYWNjdW11bGF0ZXMgc2hhZG93cyBvdmVyIHRpbWUgd2hpY2ggaXMgbW9yZSBwZXJmb3JtYW50IGJ1dCBoYXMgYSB2aXN1YWwgcmVncmVzc2lvbiBvdmVyIGluc3RhbnQgcmVzdWx0cywgZmFsc2UgICovXG5cdEBJbnB1dCh7IGFsaWFzOiAndGVtcG9yYWwnIH0pIHNldCBfdGVtcG9yYWwodGVtcG9yYWw6IGJvb2xlYW4pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyB0ZW1wb3JhbCB9KTtcblx0fVxuXG5cdC8qKiBPcGFjaXR5IG9mIHRoZSBwbGFuZSwgMSAqL1xuXHRASW5wdXQoeyBhbGlhczogJ29wYWNpdHknIH0pIHNldCBfb3BhY2l0eShvcGFjaXR5OiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBvcGFjaXR5IH0pO1xuXHR9XG5cblx0LyoqIERpc2NhcmRzIGFscGhhIHBpeGVscywgMC42NSAqL1xuXHRASW5wdXQoeyBhbGlhczogJ2FscGhhVGVzdCcgfSkgc2V0IF9hbHBoYVRlc3QoYWxwaGFUZXN0OiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBhbHBoYVRlc3QgfSk7XG5cdH1cblxuXHQvKiogU2hhZG93IGNvbG9yLCBibGFjayAqL1xuXHRASW5wdXQoeyBhbGlhczogJ2NvbG9yJyB9KSBzZXQgX2NvbG9yKGNvbG9yOiBzdHJpbmcpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBjb2xvciB9KTtcblx0fVxuXG5cdC8qKiBDb2xvcmJsZW5kLCBob3cgbXVjaCBjb2xvcnMgdHVybiB0byBibGFjaywgMCBpcyBibGFjaywgMiAqL1xuXHRASW5wdXQoeyBhbGlhczogJ2NvbG9yQmxlbmQnIH0pIHNldCBfY29sb3JCbGVuZChjb2xvckJsZW5kOiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBjb2xvckJsZW5kIH0pO1xuXHR9XG5cblx0LyoqIEJ1ZmZlciByZXNvbHV0aW9uLCAxMDI0ICovXG5cdEBJbnB1dCh7IGFsaWFzOiAncmVzb2x1dGlvbicgfSkgc2V0IF9yZXNvbHV0aW9uKHJlc29sdXRpb246IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHJlc29sdXRpb24gfSk7XG5cdH1cblxuXHQvKiogVGV4dHVyZSB0b25lbWFwcGluZyAqL1xuXHRASW5wdXQoeyBhbGlhczogJ3RvbmVNYXBwZWQnIH0pIHNldCBfdG9uZU1hcHBlZCh0b25lTWFwcGVkOiBib29sZWFuKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgdG9uZU1hcHBlZCB9KTtcblx0fVxuXG5cdG1lc2hSZWYgPSBpbmplY3ROZ3RSZWY8VEhSRUUuTWVzaDxUSFJFRS5QbGFuZUdlb21ldHJ5LCBOZ3RTb2Z0U2hhZG93TWF0ZXJpYWxTdGF0ZSAmIFRIUkVFLlNoYWRlck1hdGVyaWFsPj4oKTtcblxuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0Tmd0U3RvcmUoKTtcblx0cHJpdmF0ZSBnbCA9IHRoaXMuc3RvcmUuc2VsZWN0KCdnbCcpO1xuXHRwcml2YXRlIHNjZW5lID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3NjZW5lJyk7XG5cdHByaXZhdGUgY2FtZXJhID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2NhbWVyYScpO1xuXHRwcml2YXRlIGludmFsaWRhdGUgPSB0aGlzLnN0b3JlLnNlbGVjdCgnaW52YWxpZGF0ZScpO1xuXG5cdHByaXZhdGUgcmVzb2x1dGlvbiA9IHRoaXMuaW5wdXRzLnNlbGVjdCgncmVzb2x1dGlvbicpO1xuXHRwcml2YXRlIGFscGhhVGVzdCA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnYWxwaGFUZXN0Jyk7XG5cdHByaXZhdGUgb3BhY2l0eSA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnb3BhY2l0eScpO1xuXHRwcml2YXRlIHRlbXBvcmFsID0gdGhpcy5pbnB1dHMuc2VsZWN0KCd0ZW1wb3JhbCcpO1xuXHRwcml2YXRlIGJsZW5kID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdibGVuZCcpO1xuXHRwcml2YXRlIGZyYW1lcyA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnZnJhbWVzJyk7XG5cblx0cExNID0gY29tcHV0ZWQoKCkgPT4gbmV3IFByb2dyZXNzaXZlTGlnaHRNYXAodW50cmFja2VkKHRoaXMuZ2wpLCB1bnRyYWNrZWQodGhpcy5zY2VuZSksIHRoaXMucmVzb2x1dGlvbigpKSk7XG5cblx0c2NhbGUgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ3NjYWxlJyk7XG5cdHRvbmVNYXBwZWQgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ3RvbmVNYXBwZWQnKTtcblx0Y29sb3IgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ2NvbG9yJyk7XG5cdGNvbG9yQmxlbmQgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ2NvbG9yQmxlbmQnKTtcblx0bWFwID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wTE0oKS5wcm9ncmVzc2l2ZUxpZ2h0TWFwMi50ZXh0dXJlKTtcblxuXHRhcGkgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgW3BMTSwgYWxwaGFUZXN0LCBvcGFjaXR5LCBjYW1lcmEsIHRlbXBvcmFsLCBibGVuZCwgZnJhbWVzXSA9IFtcblx0XHRcdHRoaXMucExNKCksXG5cdFx0XHR0aGlzLmFscGhhVGVzdCgpLFxuXHRcdFx0dGhpcy5vcGFjaXR5KCksXG5cdFx0XHR0aGlzLmNhbWVyYSgpLFxuXHRcdFx0dGhpcy50ZW1wb3JhbCgpLFxuXHRcdFx0dGhpcy5ibGVuZCgpLFxuXHRcdFx0dGhpcy5mcmFtZXMoKSxcblx0XHRdO1xuXHRcdGNvbnN0IGFwaSA9IHtcblx0XHRcdGxpZ2h0czogbmV3IE1hcDxzdHJpbmcsIFNpZ25hbDxOZ3RzQWNjdW11bGF0aXZlU2hhZG93c0xpZ2h0QXBpPj4oKSxcblx0XHRcdHRlbXBvcmFsLFxuXHRcdFx0ZnJhbWVzOiBNYXRoLm1heCgyLCBmcmFtZXMpLFxuXHRcdFx0YmxlbmQ6IE1hdGgubWF4KDIsIGZyYW1lcyA9PT0gSW5maW5pdHkgPyBibGVuZCA6IGZyYW1lcyksXG5cdFx0XHRjb3VudDogMCxcblx0XHRcdGdldE1lc2g6ICgpID0+IHRoaXMubWVzaFJlZi5uYXRpdmVFbGVtZW50LFxuXHRcdFx0cmVzZXQ6ICgpID0+IHtcblx0XHRcdFx0aWYgKCF0aGlzLm1lc2hSZWYubmF0aXZlRWxlbWVudCkgcmV0dXJuO1xuXHRcdFx0XHQvLyBDbGVhciBidWZmZXJzLCByZXNldCBvcGFjaXRpZXMsIHNldCBmcmFtZSBjb3VudCB0byAwXG5cdFx0XHRcdHBMTS5jbGVhcigpO1xuXHRcdFx0XHRjb25zdCBtYXRlcmlhbCA9IHRoaXMubWVzaFJlZi5uYXRpdmVFbGVtZW50Lm1hdGVyaWFsO1xuXHRcdFx0XHRtYXRlcmlhbC5vcGFjaXR5ID0gMDtcblx0XHRcdFx0bWF0ZXJpYWwuYWxwaGFUZXN0ID0gMDtcblx0XHRcdFx0YXBpLmNvdW50ID0gMDtcblx0XHRcdH0sXG5cdFx0XHR1cGRhdGU6IChmcmFtZXMgPSAxKSA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5tZXNoUmVmLm5hdGl2ZUVsZW1lbnQpIHJldHVybjtcblx0XHRcdFx0Ly8gQWRhcHQgdGhlIG9wYWNpdHktYmxlbmQgcmF0aW8gdG8gdGhlIG51bWJlciBvZiBmcmFtZXNcblx0XHRcdFx0Y29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1lc2hSZWYubmF0aXZlRWxlbWVudC5tYXRlcmlhbDtcblx0XHRcdFx0aWYgKCFhcGkudGVtcG9yYWwpIHtcblx0XHRcdFx0XHRtYXRlcmlhbC5vcGFjaXR5ID0gb3BhY2l0eTtcblx0XHRcdFx0XHRtYXRlcmlhbC5hbHBoYVRlc3QgPSBhbHBoYVRlc3Q7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bWF0ZXJpYWwub3BhY2l0eSA9IE1hdGgubWluKG9wYWNpdHksIG1hdGVyaWFsLm9wYWNpdHkgKyBvcGFjaXR5IC8gYXBpLmJsZW5kKTtcblx0XHRcdFx0XHRtYXRlcmlhbC5hbHBoYVRlc3QgPSBNYXRoLm1pbihhbHBoYVRlc3QsIG1hdGVyaWFsLmFscGhhVGVzdCArIGFscGhhVGVzdCAvIGFwaS5ibGVuZCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTd2l0Y2ggYWNjdW11bGF0aXZlIGxpZ2h0cyBvblxuXHRcdFx0XHR0aGlzLmFjY3VtdWxhdGl2ZVNoYWRvd3NSZWYubmF0aXZlRWxlbWVudC52aXNpYmxlID0gdHJ1ZTtcblx0XHRcdFx0Ly8gQ29sbGVjdCBzY2VuZSBsaWdodHMgYW5kIG1lc2hlc1xuXHRcdFx0XHRwTE0ucHJlcGFyZSgpO1xuXG5cdFx0XHRcdC8vIFVwZGF0ZSB0aGUgbGlnaHRtYXAgYW5kIHRoZSBhY2N1bXVsYXRpdmUgbGlnaHRzXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWVzOyBpKyspIHtcblx0XHRcdFx0XHRhcGkubGlnaHRzLmZvckVhY2goKGxpZ2h0KSA9PiBsaWdodCgpLnVwZGF0ZSgpKTtcblx0XHRcdFx0XHRwTE0udXBkYXRlKGNhbWVyYSwgYXBpLmJsZW5kKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN3aXRjaCBsaWdodHMgb2ZmXG5cdFx0XHRcdHRoaXMuYWNjdW11bGF0aXZlU2hhZG93c1JlZi5uYXRpdmVFbGVtZW50LnZpc2libGUgPSBmYWxzZTtcblx0XHRcdFx0Ly8gUmVzdG9yZSBsaWdodHMgYW5kIG1lc2hlc1xuXHRcdFx0XHRwTE0uZmluaXNoKCk7XG5cdFx0XHR9LFxuXHRcdH07XG5cblx0XHRyZXR1cm4gYXBpO1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmNvbmZpZ3VyZSgpO1xuXHRcdHRoaXMucmVzZXRBbmRVcGRhdGUoKTtcblx0XHR0aGlzLmJlZm9yZVJlbmRlcigpO1xuXHR9XG5cblx0cHJpdmF0ZSBjb25maWd1cmUoKSB7XG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IFtwTE0sIG1lc2hdID0gW3RoaXMucExNKCksIHRoaXMubWVzaFJlZi5uYXRpdmVFbGVtZW50XTtcblx0XHRcdGlmICghbWVzaCkgcmV0dXJuO1xuXHRcdFx0cExNLmNvbmZpZ3VyZShtZXNoKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgcmVzZXRBbmRVcGRhdGUoKSB7XG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IFssICwgbWVzaF0gPSBbXG5cdFx0XHRcdHRoaXMuaW5wdXRzLnN0YXRlKCksXG5cdFx0XHRcdGdldExvY2FsU3RhdGUodW50cmFja2VkKHRoaXMuc2NlbmUpKS5vYmplY3RzKCksXG5cdFx0XHRcdHRoaXMubWVzaFJlZi5uYXRpdmVFbGVtZW50LFxuXHRcdFx0XTtcblx0XHRcdGlmICghbWVzaCkgcmV0dXJuO1xuXHRcdFx0Y29uc3QgYXBpID0gdW50cmFja2VkKHRoaXMuYXBpKTtcblx0XHRcdC8vIFJlc2V0IGludGVybmFscywgYnVmZmVycywgLi4uXG5cdFx0XHRhcGkucmVzZXQoKTtcblx0XHRcdC8vIFVwZGF0ZSBsaWdodG1hcFxuXHRcdFx0aWYgKCFhcGkudGVtcG9yYWwgJiYgYXBpLmZyYW1lcyAhPT0gSW5maW5pdHkpIGFwaS51cGRhdGUoYXBpLmJsZW5kKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgYmVmb3JlUmVuZGVyKCkge1xuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoKSA9PiB7XG5cdFx0XHRjb25zdCBbYXBpLCBsaW1pdF0gPSBbdGhpcy5hcGkoKSwgdGhpcy5pbnB1dHMuZ2V0KCdsaW1pdCcpXTtcblx0XHRcdGlmICgoYXBpLnRlbXBvcmFsIHx8IGFwaS5mcmFtZXMgPT09IEluZmluaXR5KSAmJiBhcGkuY291bnQgPCBhcGkuZnJhbWVzICYmIGFwaS5jb3VudCA8IGxpbWl0KSB7XG5cdFx0XHRcdHRoaXMuaW52YWxpZGF0ZSgpO1xuXHRcdFx0XHRhcGkudXBkYXRlKCk7XG5cdFx0XHRcdGFwaS5jb3VudCsrO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG4iXX0=