angular-three-soba 1.13.0 → 2.0.0-beta.2

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 (428) hide show
  1. package/README.md +2 -2
  2. package/abstractions/billboard/billboard.d.ts +24 -0
  3. package/abstractions/catmull-rom-line/catmull-rom-line.d.ts +25 -0
  4. package/abstractions/cubic-bezier-line/cubic-bezier-line.d.ts +25 -0
  5. package/abstractions/edges/edges.d.ts +22 -0
  6. package/abstractions/gizmo-helper/gizmo-helper.d.ts +34 -0
  7. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +22 -0
  8. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +30 -0
  9. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +32 -0
  10. package/abstractions/{lib/gizmo-helper → gizmo-helper}/gizmo-viewcube/gizmo-viewcube.d.ts +2 -3
  11. package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +47 -0
  12. package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +40 -0
  13. package/abstractions/index.d.ts +11 -11
  14. package/abstractions/line/line-input.d.ts +42 -0
  15. package/abstractions/line/line.d.ts +35 -0
  16. package/abstractions/quadratic-bezier-line/quadratic-bezier-line.d.ts +23 -0
  17. package/abstractions/text/text.d.ts +77 -0
  18. package/abstractions/text-3d/text-3d.d.ts +74 -0
  19. package/cameras/{lib/camera → camera}/camera-content.d.ts +2 -2
  20. package/cameras/camera/camera.d.ts +23 -0
  21. package/cameras/cube-camera/cube-camera.d.ts +42 -0
  22. package/cameras/index.d.ts +5 -4
  23. package/cameras/orthographic-camera/orthographic-camera.d.ts +26 -0
  24. package/controls/index.d.ts +1 -1
  25. package/controls/orbit-controls/orbit-controls.d.ts +35 -0
  26. package/esm2022/abstractions/angular-three-soba-abstractions.mjs +5 -0
  27. package/esm2022/abstractions/billboard/billboard.mjs +71 -0
  28. package/esm2022/abstractions/catmull-rom-line/catmull-rom-line.mjs +131 -0
  29. package/esm2022/abstractions/cubic-bezier-line/cubic-bezier-line.mjs +113 -0
  30. package/esm2022/abstractions/edges/edges.mjs +93 -0
  31. package/esm2022/abstractions/gizmo-helper/gizmo-helper.mjs +210 -0
  32. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/constants.mjs +31 -0
  33. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +95 -0
  34. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +155 -0
  35. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +62 -0
  36. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +80 -0
  37. package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +206 -0
  38. package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +273 -0
  39. package/esm2022/abstractions/index.mjs +12 -0
  40. package/esm2022/abstractions/line/line-input.mjs +113 -0
  41. package/esm2022/abstractions/line/line.mjs +165 -0
  42. package/esm2022/abstractions/quadratic-bezier-line/quadratic-bezier-line.mjs +128 -0
  43. package/esm2022/abstractions/text/text.mjs +275 -0
  44. package/esm2022/abstractions/text-3d/text-3d.mjs +167 -0
  45. package/esm2022/angular-three-soba.mjs +5 -0
  46. package/esm2022/cameras/angular-three-soba-cameras.mjs +5 -0
  47. package/esm2022/cameras/camera/camera-content.mjs +21 -0
  48. package/esm2022/cameras/camera/camera.mjs +71 -0
  49. package/esm2022/cameras/cube-camera/cube-camera.mjs +131 -0
  50. package/esm2022/cameras/index.mjs +6 -0
  51. package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +99 -0
  52. package/esm2022/cameras/perspective-camera/perspective-camera.mjs +47 -0
  53. package/esm2022/controls/angular-three-soba-controls.mjs +5 -0
  54. package/esm2022/controls/index.mjs +2 -0
  55. package/esm2022/controls/orbit-controls/orbit-controls.mjs +165 -0
  56. package/esm2022/index.mjs +2 -0
  57. package/esm2022/loaders/angular-three-soba-loaders.mjs +5 -0
  58. package/esm2022/loaders/gltf-loader/gltf-loader.mjs +33 -0
  59. package/esm2022/loaders/index.mjs +5 -0
  60. package/esm2022/loaders/loader/loader.mjs +133 -0
  61. package/esm2022/loaders/progress/progress.mjs +52 -0
  62. package/esm2022/loaders/texture-loader/texture-loader.mjs +28 -0
  63. package/esm2022/materials/angular-three-soba-materials.mjs +5 -0
  64. package/esm2022/materials/index.mjs +6 -0
  65. package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +73 -0
  66. package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +383 -0
  67. package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +168 -0
  68. package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +257 -0
  69. package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +66 -0
  70. package/esm2022/misc/angular-three-soba-misc.mjs +5 -0
  71. package/esm2022/misc/animations/animations.mjs +55 -0
  72. package/esm2022/misc/bake-shadows/bake-shadows.mjs +24 -0
  73. package/esm2022/misc/depth-buffer/depth-buffer.mjs +46 -0
  74. package/esm2022/misc/fbo/fbo.mjs +47 -0
  75. package/esm2022/misc/index.mjs +5 -0
  76. package/esm2022/performance/adaptive/adaptive-dpr.mjs +46 -0
  77. package/esm2022/performance/adaptive/adaptive-events.mjs +31 -0
  78. package/esm2022/performance/angular-three-soba-performance.mjs +5 -0
  79. package/esm2022/performance/detailed/detailed.mjs +61 -0
  80. package/esm2022/performance/index.mjs +7 -0
  81. package/esm2022/performance/instances/instance.mjs +48 -0
  82. package/esm2022/performance/instances/instances.mjs +189 -0
  83. package/esm2022/performance/instances/position-mesh.mjs +52 -0
  84. package/esm2022/performance/stats/stats.mjs +79 -0
  85. package/esm2022/shaders/angular-three-soba-shaders.mjs +5 -0
  86. package/esm2022/shaders/blur-pass/blur-pass.mjs +61 -0
  87. package/esm2022/shaders/caustics-material/caustics-material.mjs +128 -0
  88. package/esm2022/shaders/caustics-material/caustics-projection-material.mjs +33 -0
  89. package/esm2022/shaders/convolution-material/convolution-material.mjs +94 -0
  90. package/esm2022/shaders/discard-material/discard-material.mjs +3 -0
  91. package/esm2022/shaders/index.mjs +15 -0
  92. package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +55 -0
  93. package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +223 -0
  94. package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +170 -0
  95. package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +268 -0
  96. package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +37 -0
  97. package/esm2022/shaders/shader-material/shader-material.mjs +34 -0
  98. package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +33 -0
  99. package/esm2022/shaders/sparkles-material/sparkles-material.mjs +47 -0
  100. package/esm2022/shaders/spot-light-material/spot-light-material.mjs +86 -0
  101. package/esm2022/shaders/star-field-material/star-field-material.mjs +32 -0
  102. package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +283 -0
  103. package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +108 -0
  104. package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +208 -0
  105. package/esm2022/staging/angular-three-soba-staging.mjs +5 -0
  106. package/esm2022/staging/bounds/bounds.mjs +307 -0
  107. package/esm2022/staging/camera-shake/camera-shake.mjs +117 -0
  108. package/esm2022/staging/caustics/caustisc.mjs +384 -0
  109. package/esm2022/staging/center/center.mjs +148 -0
  110. package/esm2022/staging/cloud/cloud.mjs +164 -0
  111. package/esm2022/staging/contact-shadows/contact-shadows.mjs +249 -0
  112. package/esm2022/staging/environment/assets.mjs +13 -0
  113. package/esm2022/staging/environment/environment-cube.mjs +49 -0
  114. package/esm2022/staging/environment/environment-ground.mjs +43 -0
  115. package/esm2022/staging/environment/environment-input.mjs +106 -0
  116. package/esm2022/staging/environment/environment-map.mjs +53 -0
  117. package/esm2022/staging/environment/environment-portal.mjs +135 -0
  118. package/esm2022/staging/environment/environment.mjs +78 -0
  119. package/esm2022/staging/environment/utils.mjs +84 -0
  120. package/esm2022/staging/float/float.mjs +82 -0
  121. package/esm2022/staging/index.mjs +18 -0
  122. package/esm2022/staging/sky/sky.mjs +114 -0
  123. package/esm2022/staging/sparkles/sparkles.mjs +161 -0
  124. package/esm2022/staging/spot-light/spot-light-input.mjs +75 -0
  125. package/esm2022/staging/spot-light/spot-light-shadow-mesh-input.mjs +57 -0
  126. package/esm2022/staging/spot-light/spot-light-shadow-mesh.mjs +256 -0
  127. package/esm2022/staging/spot-light/spot-light.mjs +94 -0
  128. package/esm2022/staging/spot-light/volumetric-mesh.mjs +101 -0
  129. package/esm2022/staging/stage/stage.mjs +374 -0
  130. package/esm2022/staging/stars/stars.mjs +148 -0
  131. package/fesm2022/angular-three-soba-abstractions.mjs +2271 -0
  132. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -0
  133. package/{fesm2015 → fesm2022}/angular-three-soba-cameras.mjs +141 -137
  134. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -0
  135. package/fesm2022/angular-three-soba-controls.mjs +171 -0
  136. package/fesm2022/angular-three-soba-controls.mjs.map +1 -0
  137. package/fesm2022/angular-three-soba-loaders.mjs +244 -0
  138. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -0
  139. package/{fesm2020 → fesm2022}/angular-three-soba-materials.mjs +363 -281
  140. package/fesm2022/angular-three-soba-materials.mjs.map +1 -0
  141. package/fesm2022/angular-three-soba-misc.mjs +169 -0
  142. package/fesm2022/angular-three-soba-misc.mjs.map +1 -0
  143. package/fesm2022/angular-three-soba-performance.mjs +487 -0
  144. package/fesm2022/angular-three-soba-performance.mjs.map +1 -0
  145. package/{fesm2020 → fesm2022}/angular-three-soba-shaders.mjs +58 -10
  146. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -0
  147. package/fesm2022/angular-three-soba-staging.mjs +3826 -0
  148. package/fesm2022/angular-three-soba-staging.mjs.map +1 -0
  149. package/fesm2022/angular-three-soba.mjs.map +1 -0
  150. package/loaders/gltf-loader/gltf-loader.d.ts +9 -0
  151. package/loaders/index.d.ts +4 -5
  152. package/loaders/loader/loader.d.ts +31 -0
  153. package/loaders/progress/progress.d.ts +9 -0
  154. package/loaders/texture-loader/texture-loader.d.ts +7 -0
  155. package/materials/index.d.ts +5 -5
  156. package/materials/mesh-distort-material/mesh-distort-material.d.ts +30 -0
  157. package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +81 -0
  158. package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +50 -0
  159. package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +91 -0
  160. package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +20 -0
  161. package/misc/animations/animations.d.ts +13 -0
  162. package/misc/{lib/bake-shadows → bake-shadows}/bake-shadows.d.ts +2 -5
  163. package/misc/depth-buffer/depth-buffer.d.ts +9 -0
  164. package/misc/{lib/fbo → fbo}/fbo.d.ts +4 -2
  165. package/misc/index.d.ts +4 -4
  166. package/package.json +45 -68
  167. package/performance/adaptive/adaptive-dpr.d.ts +8 -0
  168. package/performance/{lib/adaptive → adaptive}/adaptive-events.d.ts +2 -6
  169. package/performance/detailed/detailed.d.ts +20 -0
  170. package/performance/index.d.ts +6 -4
  171. package/performance/instances/instance.d.ts +9 -0
  172. package/performance/instances/instances.d.ts +35 -0
  173. package/performance/instances/position-mesh.d.ts +10 -0
  174. package/performance/stats/stats.d.ts +18 -0
  175. package/plugin/package.json +1 -1
  176. package/plugin/src/generators/init/compat.js +1 -1
  177. package/plugin/src/generators/init/compat.js.map +1 -1
  178. package/plugin/src/generators/init/init.d.ts +2 -2
  179. package/plugin/src/generators/init/init.js +2 -2
  180. package/plugin/src/generators/init/init.js.map +1 -1
  181. package/plugin/src/index.js.map +1 -1
  182. package/shaders/{lib/blur-pass → blur-pass}/blur-pass.d.ts +2 -2
  183. package/shaders/index.d.ts +14 -14
  184. package/shaders/{lib/mesh-distort-material → mesh-distort-material}/mesh-distort-material.d.ts +1 -1
  185. package/shaders/{lib/mesh-wobble-material → mesh-wobble-material}/mesh-wobble-material.d.ts +1 -0
  186. package/shaders/{lib/soft-shadow-material → soft-shadow-material}/soft-shadow-material.d.ts +2 -2
  187. package/shaders/sparkles-material/sparkles-material.d.ts +3 -0
  188. package/staging/accumulative-shadows/accumulative-shadows.d.ts +96 -0
  189. package/staging/{lib/accumulative-shadows → accumulative-shadows}/progressive-light-map.d.ts +2 -2
  190. package/staging/accumulative-shadows/randomized-lights.d.ts +77 -0
  191. package/staging/bounds/bounds.d.ts +58 -0
  192. package/staging/camera-shake/camera-shake.d.ts +32 -0
  193. package/staging/caustics/caustisc.d.ts +70 -0
  194. package/staging/center/center.d.ts +62 -0
  195. package/staging/cloud/cloud.d.ts +48 -0
  196. package/staging/contact-shadows/contact-shadows.d.ts +57 -0
  197. package/staging/environment/environment-cube.d.ts +11 -0
  198. package/staging/environment/environment-ground.d.ts +13 -0
  199. package/staging/environment/environment-input.d.ts +68 -0
  200. package/staging/environment/environment-map.d.ts +11 -0
  201. package/staging/{lib/environment → environment}/environment-portal.d.ts +5 -7
  202. package/staging/{lib/environment → environment}/environment.d.ts +2 -2
  203. package/staging/environment/utils.d.ts +7 -0
  204. package/staging/float/float.d.ts +27 -0
  205. package/staging/index.d.ts +17 -17
  206. package/staging/sky/sky.d.ts +41 -0
  207. package/staging/sparkles/sparkles.d.ts +49 -0
  208. package/staging/spot-light/spot-light-input.d.ts +38 -0
  209. package/staging/spot-light/spot-light-shadow-mesh-input.d.ts +29 -0
  210. package/staging/spot-light/spot-light-shadow-mesh.d.ts +38 -0
  211. package/staging/{lib/spot-light → spot-light}/spot-light.d.ts +12 -6
  212. package/staging/{lib/spot-light → spot-light}/volumetric-mesh.d.ts +7 -4
  213. package/staging/{lib/stage → stage}/stage.d.ts +35 -16
  214. package/staging/stars/stars.d.ts +34 -0
  215. package/abstractions/lib/billboard/billboard.d.ts +0 -14
  216. package/abstractions/lib/catmull-rom-line/catmull-rom-line.d.ts +0 -15
  217. package/abstractions/lib/cubic-bezier-line/cubic-bezier-line.d.ts +0 -15
  218. package/abstractions/lib/edges/edges.d.ts +0 -18
  219. package/abstractions/lib/gizmo-helper/gizmo-helper.d.ts +0 -41
  220. package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +0 -16
  221. package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +0 -24
  222. package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +0 -14
  223. package/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +0 -28
  224. package/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +0 -21
  225. package/abstractions/lib/line/line-input.d.ts +0 -19
  226. package/abstractions/lib/line/line.d.ts +0 -21
  227. package/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.d.ts +0 -19
  228. package/abstractions/lib/text/text.d.ts +0 -21
  229. package/abstractions/lib/text-3d/text-3d.d.ts +0 -39
  230. package/assets/default-spot-light-shadow.glsl +0 -10
  231. package/cameras/lib/camera/camera.d.ts +0 -19
  232. package/cameras/lib/cube-camera/cube-camera.d.ts +0 -27
  233. package/cameras/lib/orthographic-camera/orthographic-camera.d.ts +0 -17
  234. package/controls/lib/orbit-controls/orbit-controls.d.ts +0 -27
  235. package/esm2020/abstractions/angular-three-soba-abstractions.mjs +0 -5
  236. package/esm2020/abstractions/index.mjs +0 -12
  237. package/esm2020/abstractions/lib/billboard/billboard.mjs +0 -73
  238. package/esm2020/abstractions/lib/catmull-rom-line/catmull-rom-line.mjs +0 -119
  239. package/esm2020/abstractions/lib/cubic-bezier-line/cubic-bezier-line.mjs +0 -98
  240. package/esm2020/abstractions/lib/edges/edges.mjs +0 -95
  241. package/esm2020/abstractions/lib/gizmo-helper/gizmo-helper.mjs +0 -211
  242. package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/constants.mjs +0 -31
  243. package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -91
  244. package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -182
  245. package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +0 -45
  246. package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +0 -133
  247. package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -193
  248. package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +0 -266
  249. package/esm2020/abstractions/lib/line/line-input.mjs +0 -75
  250. package/esm2020/abstractions/lib/line/line.mjs +0 -132
  251. package/esm2020/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.mjs +0 -127
  252. package/esm2020/abstractions/lib/text/text.mjs +0 -114
  253. package/esm2020/abstractions/lib/text-3d/text-3d.mjs +0 -144
  254. package/esm2020/angular-three-soba.mjs +0 -5
  255. package/esm2020/cameras/angular-three-soba-cameras.mjs +0 -5
  256. package/esm2020/cameras/index.mjs +0 -5
  257. package/esm2020/cameras/lib/camera/camera-content.mjs +0 -20
  258. package/esm2020/cameras/lib/camera/camera.mjs +0 -74
  259. package/esm2020/cameras/lib/cube-camera/cube-camera.mjs +0 -130
  260. package/esm2020/cameras/lib/orthographic-camera/orthographic-camera.mjs +0 -92
  261. package/esm2020/cameras/lib/perspective-camera/perspective-camera.mjs +0 -46
  262. package/esm2020/controls/angular-three-soba-controls.mjs +0 -5
  263. package/esm2020/controls/index.mjs +0 -2
  264. package/esm2020/controls/lib/orbit-controls/orbit-controls.mjs +0 -146
  265. package/esm2020/index.mjs +0 -2
  266. package/esm2020/loaders/angular-three-soba-loaders.mjs +0 -5
  267. package/esm2020/loaders/index.mjs +0 -6
  268. package/esm2020/loaders/lib/cube-texture-loader/cube-texture-loader.mjs +0 -10
  269. package/esm2020/loaders/lib/gltf-loader/gltf-loader.mjs +0 -32
  270. package/esm2020/loaders/lib/loader/loader.mjs +0 -133
  271. package/esm2020/loaders/lib/progress/progress.mjs +0 -39
  272. package/esm2020/loaders/lib/texture-loader/texture-loader.mjs +0 -19
  273. package/esm2020/materials/angular-three-soba-materials.mjs +0 -5
  274. package/esm2020/materials/index.mjs +0 -6
  275. package/esm2020/materials/lib/mesh-distort-material/mesh-distort-material.mjs +0 -74
  276. package/esm2020/materials/lib/mesh-reflector-material/mesh-reflector-material.mjs +0 -327
  277. package/esm2020/materials/lib/mesh-refraction-material/mesh-refraction-material.mjs +0 -157
  278. package/esm2020/materials/lib/mesh-transmission-material/mesh-transmission-material.mjs +0 -237
  279. package/esm2020/materials/lib/mesh-wobble-material/mesh-wobble-material.mjs +0 -67
  280. package/esm2020/misc/angular-three-soba-misc.mjs +0 -5
  281. package/esm2020/misc/index.mjs +0 -5
  282. package/esm2020/misc/lib/animations/animations.mjs +0 -52
  283. package/esm2020/misc/lib/bake-shadows/bake-shadows.mjs +0 -25
  284. package/esm2020/misc/lib/depth-buffer/depth-buffer.mjs +0 -39
  285. package/esm2020/misc/lib/fbo/fbo.mjs +0 -39
  286. package/esm2020/performance/angular-three-soba-performance.mjs +0 -5
  287. package/esm2020/performance/index.mjs +0 -5
  288. package/esm2020/performance/lib/adaptive/adaptive-dpr.mjs +0 -46
  289. package/esm2020/performance/lib/adaptive/adaptive-events.mjs +0 -36
  290. package/esm2020/performance/lib/detailed/detailed.mjs +0 -53
  291. package/esm2020/performance/lib/stats/stats.mjs +0 -79
  292. package/esm2020/shaders/angular-three-soba-shaders.mjs +0 -5
  293. package/esm2020/shaders/index.mjs +0 -15
  294. package/esm2020/shaders/lib/blur-pass/blur-pass.mjs +0 -61
  295. package/esm2020/shaders/lib/caustics-material/caustics-material.mjs +0 -128
  296. package/esm2020/shaders/lib/caustics-projection-material/caustics-projection-material.mjs +0 -33
  297. package/esm2020/shaders/lib/convolution-material/convolution-material.mjs +0 -94
  298. package/esm2020/shaders/lib/discard-material/discard-material.mjs +0 -3
  299. package/esm2020/shaders/lib/mesh-distort-material/mesh-distort-material.mjs +0 -55
  300. package/esm2020/shaders/lib/mesh-reflector-material/mesh-reflector-material.mjs +0 -223
  301. package/esm2020/shaders/lib/mesh-refraction-material/mesh-refraction-material.mjs +0 -169
  302. package/esm2020/shaders/lib/mesh-transmission-material/mesh-transmission-material.mjs +0 -268
  303. package/esm2020/shaders/lib/mesh-wobble-material/mesh-wobble-material.mjs +0 -37
  304. package/esm2020/shaders/lib/shader-material/shader-material.mjs +0 -34
  305. package/esm2020/shaders/lib/soft-shadow-material/soft-shadow-material.mjs +0 -33
  306. package/esm2020/shaders/lib/spot-light-material/spot-light-material.mjs +0 -86
  307. package/esm2020/shaders/lib/star-field-material/star-field-material.mjs +0 -32
  308. package/esm2020/staging/angular-three-soba-staging.mjs +0 -5
  309. package/esm2020/staging/index.mjs +0 -18
  310. package/esm2020/staging/lib/accumulative-shadows/accumulative-shadows.mjs +0 -247
  311. package/esm2020/staging/lib/accumulative-shadows/progressive-light-map.mjs +0 -108
  312. package/esm2020/staging/lib/accumulative-shadows/randomized-lights.mjs +0 -199
  313. package/esm2020/staging/lib/bounds/bounds.mjs +0 -283
  314. package/esm2020/staging/lib/camera-shake/camera-shake.mjs +0 -121
  315. package/esm2020/staging/lib/caustics/caustics.mjs +0 -363
  316. package/esm2020/staging/lib/center/center.mjs +0 -142
  317. package/esm2020/staging/lib/cloud/cloud.mjs +0 -159
  318. package/esm2020/staging/lib/contact-shadows/contact-shadows.mjs +0 -227
  319. package/esm2020/staging/lib/environment/assets.mjs +0 -13
  320. package/esm2020/staging/lib/environment/environment-cube.mjs +0 -40
  321. package/esm2020/staging/lib/environment/environment-ground.mjs +0 -66
  322. package/esm2020/staging/lib/environment/environment-inputs.mjs +0 -86
  323. package/esm2020/staging/lib/environment/environment-map.mjs +0 -38
  324. package/esm2020/staging/lib/environment/environment-portal.mjs +0 -110
  325. package/esm2020/staging/lib/environment/environment.mjs +0 -163
  326. package/esm2020/staging/lib/environment/utils.mjs +0 -70
  327. package/esm2020/staging/lib/float/float.mjs +0 -76
  328. package/esm2020/staging/lib/sky/sky.mjs +0 -108
  329. package/esm2020/staging/lib/sparkles/sparkles.mjs +0 -209
  330. package/esm2020/staging/lib/spot-light/common.mjs +0 -42
  331. package/esm2020/staging/lib/spot-light/shadow-mesh-input.mjs +0 -50
  332. package/esm2020/staging/lib/spot-light/spot-light-input.mjs +0 -61
  333. package/esm2020/staging/lib/spot-light/spot-light-shadow-no-shader.mjs +0 -73
  334. package/esm2020/staging/lib/spot-light/spot-light-shadow-shader.mjs +0 -125
  335. package/esm2020/staging/lib/spot-light/spot-light-shadow.mjs +0 -62
  336. package/esm2020/staging/lib/spot-light/spot-light.mjs +0 -116
  337. package/esm2020/staging/lib/spot-light/volumetric-mesh.mjs +0 -85
  338. package/esm2020/staging/lib/stage/stage.mjs +0 -366
  339. package/esm2020/staging/lib/stars/stars.mjs +0 -139
  340. package/fesm2015/angular-three-soba-abstractions.mjs +0 -2048
  341. package/fesm2015/angular-three-soba-abstractions.mjs.map +0 -1
  342. package/fesm2015/angular-three-soba-cameras.mjs.map +0 -1
  343. package/fesm2015/angular-three-soba-controls.mjs +0 -153
  344. package/fesm2015/angular-three-soba-controls.mjs.map +0 -1
  345. package/fesm2015/angular-three-soba-loaders.mjs +0 -229
  346. package/fesm2015/angular-three-soba-loaders.mjs.map +0 -1
  347. package/fesm2015/angular-three-soba-materials.mjs +0 -851
  348. package/fesm2015/angular-three-soba-materials.mjs.map +0 -1
  349. package/fesm2015/angular-three-soba-misc.mjs +0 -148
  350. package/fesm2015/angular-three-soba-misc.mjs.map +0 -1
  351. package/fesm2015/angular-three-soba-performance.mjs +0 -210
  352. package/fesm2015/angular-three-soba-performance.mjs.map +0 -1
  353. package/fesm2015/angular-three-soba-shaders.mjs +0 -1239
  354. package/fesm2015/angular-three-soba-shaders.mjs.map +0 -1
  355. package/fesm2015/angular-three-soba-staging.mjs +0 -3772
  356. package/fesm2015/angular-three-soba-staging.mjs.map +0 -1
  357. package/fesm2015/angular-three-soba.mjs.map +0 -1
  358. package/fesm2020/angular-three-soba-abstractions.mjs +0 -2045
  359. package/fesm2020/angular-three-soba-abstractions.mjs.map +0 -1
  360. package/fesm2020/angular-three-soba-cameras.mjs +0 -347
  361. package/fesm2020/angular-three-soba-cameras.mjs.map +0 -1
  362. package/fesm2020/angular-three-soba-controls.mjs +0 -153
  363. package/fesm2020/angular-three-soba-controls.mjs.map +0 -1
  364. package/fesm2020/angular-three-soba-loaders.mjs +0 -228
  365. package/fesm2020/angular-three-soba-loaders.mjs.map +0 -1
  366. package/fesm2020/angular-three-soba-materials.mjs.map +0 -1
  367. package/fesm2020/angular-three-soba-misc.mjs +0 -152
  368. package/fesm2020/angular-three-soba-misc.mjs.map +0 -1
  369. package/fesm2020/angular-three-soba-performance.mjs +0 -210
  370. package/fesm2020/angular-three-soba-performance.mjs.map +0 -1
  371. package/fesm2020/angular-three-soba-shaders.mjs.map +0 -1
  372. package/fesm2020/angular-three-soba-staging.mjs +0 -3778
  373. package/fesm2020/angular-three-soba-staging.mjs.map +0 -1
  374. package/fesm2020/angular-three-soba.mjs +0 -6
  375. package/fesm2020/angular-three-soba.mjs.map +0 -1
  376. package/loaders/lib/cube-texture-loader/cube-texture-loader.d.ts +0 -3
  377. package/loaders/lib/gltf-loader/gltf-loader.d.ts +0 -8
  378. package/loaders/lib/loader/loader.d.ts +0 -26
  379. package/loaders/lib/progress/progress.d.ts +0 -16
  380. package/loaders/lib/texture-loader/texture-loader.d.ts +0 -5
  381. package/materials/lib/mesh-distort-material/mesh-distort-material.d.ts +0 -24
  382. package/materials/lib/mesh-reflector-material/mesh-reflector-material.d.ts +0 -41
  383. package/materials/lib/mesh-refraction-material/mesh-refraction-material.d.ts +0 -28
  384. package/materials/lib/mesh-transmission-material/mesh-transmission-material.d.ts +0 -46
  385. package/materials/lib/mesh-wobble-material/mesh-wobble-material.d.ts +0 -14
  386. package/misc/lib/animations/animations.d.ts +0 -13
  387. package/misc/lib/depth-buffer/depth-buffer.d.ts +0 -7
  388. package/performance/lib/adaptive/adaptive-dpr.d.ts +0 -11
  389. package/performance/lib/detailed/detailed.d.ts +0 -13
  390. package/performance/lib/stats/stats.d.ts +0 -15
  391. package/staging/lib/accumulative-shadows/accumulative-shadows.d.ts +0 -58
  392. package/staging/lib/accumulative-shadows/randomized-lights.d.ts +0 -42
  393. package/staging/lib/bounds/bounds.d.ts +0 -48
  394. package/staging/lib/camera-shake/camera-shake.d.ts +0 -28
  395. package/staging/lib/caustics/caustics.d.ts +0 -47
  396. package/staging/lib/center/center.d.ts +0 -40
  397. package/staging/lib/cloud/cloud.d.ts +0 -23
  398. package/staging/lib/contact-shadows/contact-shadows.d.ts +0 -29
  399. package/staging/lib/environment/environment-cube.d.ts +0 -11
  400. package/staging/lib/environment/environment-ground.d.ts +0 -9
  401. package/staging/lib/environment/environment-inputs.d.ts +0 -28
  402. package/staging/lib/environment/environment-map.d.ts +0 -10
  403. package/staging/lib/environment/utils.d.ts +0 -8
  404. package/staging/lib/float/float.d.ts +0 -16
  405. package/staging/lib/sky/sky.d.ts +0 -20
  406. package/staging/lib/sparkles/sparkles.d.ts +0 -29
  407. package/staging/lib/spot-light/common.d.ts +0 -3
  408. package/staging/lib/spot-light/shadow-mesh-input.d.ts +0 -14
  409. package/staging/lib/spot-light/spot-light-input.d.ts +0 -16
  410. package/staging/lib/spot-light/spot-light-shadow-no-shader.d.ts +0 -14
  411. package/staging/lib/spot-light/spot-light-shadow-shader.d.ts +0 -25
  412. package/staging/lib/spot-light/spot-light-shadow.d.ts +0 -6
  413. package/staging/lib/stars/stars.d.ts +0 -20
  414. /package/abstractions/{lib/gizmo-helper → gizmo-helper}/gizmo-viewcube/constants.d.ts +0 -0
  415. /package/cameras/{lib/perspective-camera → perspective-camera}/perspective-camera.d.ts +0 -0
  416. /package/{fesm2015 → fesm2022}/angular-three-soba.mjs +0 -0
  417. /package/plugin/{README.md → libs/plugin/README.md} +0 -0
  418. /package/shaders/{lib/caustics-material → caustics-material}/caustics-material.d.ts +0 -0
  419. /package/shaders/{lib/caustics-projection-material → caustics-material}/caustics-projection-material.d.ts +0 -0
  420. /package/shaders/{lib/convolution-material → convolution-material}/convolution-material.d.ts +0 -0
  421. /package/shaders/{lib/discard-material → discard-material}/discard-material.d.ts +0 -0
  422. /package/shaders/{lib/mesh-reflector-material → mesh-reflector-material}/mesh-reflector-material.d.ts +0 -0
  423. /package/shaders/{lib/mesh-refraction-material → mesh-refraction-material}/mesh-refraction-material.d.ts +0 -0
  424. /package/shaders/{lib/mesh-transmission-material → mesh-transmission-material}/mesh-transmission-material.d.ts +0 -0
  425. /package/shaders/{lib/shader-material → shader-material}/shader-material.d.ts +0 -0
  426. /package/shaders/{lib/spot-light-material → spot-light-material}/spot-light-material.d.ts +0 -0
  427. /package/shaders/{lib/star-field-material → star-field-material}/star-field-material.d.ts +0 -0
  428. /package/staging/{lib/environment → environment}/assets.d.ts +0 -0
@@ -0,0 +1,374 @@
1
+ import { NgIf } from '@angular/common';
2
+ import { ChangeDetectorRef, Component, computed, CUSTOM_ELEMENTS_SCHEMA, Directive, EventEmitter, inject, Input, Output, } from '@angular/core';
3
+ import { createSignal, extend, NgtArgs, NgtSignalStore, safeDetectChanges } from 'angular-three';
4
+ import { AmbientLight, Group, PointLight, SpotLight, Vector2 } from 'three';
5
+ import { NgtsAccumulativeShadows } from '../accumulative-shadows/accumulative-shadows';
6
+ import { NgtsRandomizedLights } from '../accumulative-shadows/randomized-lights';
7
+ import { NGTS_BOUNDS_API, NgtsBounds } from '../bounds/bounds';
8
+ import { NgtsCenter } from '../center/center';
9
+ import { NgtsContactShadows } from '../contact-shadows/contact-shadows';
10
+ import { NgtsEnvironment } from '../environment/environment';
11
+ import * as i0 from "@angular/core";
12
+ const presets = {
13
+ rembrandt: {
14
+ main: [1, 2, 1],
15
+ fill: [-2, -0.5, -2],
16
+ },
17
+ portrait: {
18
+ main: [-1, 2, 0.5],
19
+ fill: [-1, 0.5, -1.5],
20
+ },
21
+ upfront: {
22
+ main: [0, 2, 1],
23
+ fill: [-1, 0.5, -1.5],
24
+ },
25
+ soft: {
26
+ main: [-2, 4, 4],
27
+ fill: [-1, 0.5, -1.5],
28
+ },
29
+ };
30
+ class NgtsStageRefit {
31
+ constructor() {
32
+ this.#boundsApi = inject(NGTS_BOUNDS_API);
33
+ this.radius = 0;
34
+ this.adjustCamera = true;
35
+ }
36
+ #boundsApi;
37
+ ngOnChanges() {
38
+ if (this.adjustCamera) {
39
+ this.#boundsApi().refresh().clip().fit();
40
+ }
41
+ }
42
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsStageRefit, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
43
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: NgtsStageRefit, isStandalone: true, selector: "ngts-stage-refit", inputs: { radius: "radius", adjustCamera: "adjustCamera" }, usesOnChanges: true, ngImport: i0 }); }
44
+ }
45
+ export { NgtsStageRefit };
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsStageRefit, decorators: [{
47
+ type: Directive,
48
+ args: [{ selector: 'ngts-stage-refit', standalone: true }]
49
+ }], propDecorators: { radius: [{
50
+ type: Input
51
+ }], adjustCamera: [{
52
+ type: Input
53
+ }] } });
54
+ extend({ AmbientLight, SpotLight, Vector2, PointLight, Group });
55
+ class NgtsStage extends NgtSignalStore {
56
+ #cdr;
57
+ set preset(preset) {
58
+ this.set({ preset });
59
+ }
60
+ set shadows(shadows) {
61
+ this.set({ shadows });
62
+ }
63
+ set adjustCamera(adjustCamera) {
64
+ this.set({ adjustCamera });
65
+ }
66
+ set environment(environment) {
67
+ this.set({ environment });
68
+ }
69
+ set intensity(intensity) {
70
+ this.set({ intensity });
71
+ }
72
+ set center(center) {
73
+ this.set({ center });
74
+ }
75
+ #preset;
76
+ #environment;
77
+ constructor() {
78
+ super({
79
+ adjustCamera: true,
80
+ intensity: 0.5,
81
+ shadows: 'contact',
82
+ environment: 'city',
83
+ preset: 'rembrandt',
84
+ });
85
+ this.#cdr = inject(ChangeDetectorRef);
86
+ this.Number = Number;
87
+ this.centered = new EventEmitter();
88
+ this.boundingState = createSignal({ radius: 0, width: 0, height: 0, depth: 0 });
89
+ this.#preset = this.select('preset');
90
+ this.#environment = this.select('environment');
91
+ this.stageShadows = this.select('shadows');
92
+ this.stageIntensity = this.select('intensity');
93
+ this.stageAdjustCamera = this.select('adjustCamera');
94
+ this.stageCenter = this.select('center');
95
+ this.config = computed(() => {
96
+ const preset = this.#preset();
97
+ return typeof preset === 'string' ? presets[preset] : preset;
98
+ });
99
+ this.shadowsInfo = computed(() => {
100
+ const shadows = this.stageShadows();
101
+ const restProps = typeof shadows === 'string' ? {} : shadows || {};
102
+ return {
103
+ contactShadow: shadows === 'contact' || shadows?.type === 'contact',
104
+ accumulativeShadow: shadows === 'accumulative' || shadows?.type === 'accumulative',
105
+ shadowBias: shadows?.bias ?? -0.0001,
106
+ normalBias: shadows?.normalBias ?? 0,
107
+ shadowSize: shadows?.size ?? 1024,
108
+ shadowOffset: shadows?.offset ?? 0,
109
+ ...restProps,
110
+ };
111
+ });
112
+ this.spotLightPosition = computed(() => {
113
+ const config = this.config();
114
+ if (!config)
115
+ return [0, 0, 0];
116
+ const radius = this.boundingState().radius;
117
+ return [config.main[0] * radius, config.main[1] * radius, config.main[2] * radius];
118
+ });
119
+ this.pointLightPosition = computed(() => {
120
+ const config = this.config();
121
+ if (!config)
122
+ return [0, 0, 0];
123
+ const radius = this.boundingState().radius;
124
+ return [config.fill[0] * radius, config.fill[1] * radius, config.fill[2] * radius];
125
+ });
126
+ this.environmentInfo = computed(() => {
127
+ const environment = this.#environment();
128
+ if (!environment)
129
+ return null;
130
+ if (typeof environment === 'string')
131
+ return { preset: environment };
132
+ return environment;
133
+ });
134
+ }
135
+ onCentered(props) {
136
+ const { boundingSphere, width, height, depth } = props;
137
+ this.boundingState.set({ radius: boundingSphere.radius, width, height, depth });
138
+ safeDetectChanges(this.#cdr);
139
+ if (this.centered.observed)
140
+ this.centered.emit(props);
141
+ }
142
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsStage, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
143
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtsStage, isStandalone: true, selector: "ngts-stage", inputs: { preset: "preset", shadows: "shadows", adjustCamera: "adjustCamera", environment: "environment", intensity: "intensity", center: "center" }, outputs: { centered: "centered" }, usesInheritance: true, ngImport: i0, template: `
144
+ <ngt-ambient-light [intensity]="stageIntensity() / 3" />
145
+ <ngt-spot-light
146
+ [penumbra]="1"
147
+ [position]="spotLightPosition()"
148
+ [intensity]="stageIntensity() * 2"
149
+ [castShadow]="!!stageShadows()"
150
+ >
151
+ <ngt-value [rawValue]="shadowsInfo().shadowBias" attach="shadow.bias" />
152
+ <ngt-value [rawValue]="shadowsInfo().normalBias" attach="shadow.normalBias" />
153
+ <ngt-vector2 *args="[shadowsInfo().shadowSize, shadowsInfo().shadowSize]" attach="shadow.mapSize" />
154
+ </ngt-spot-light>
155
+ <ngt-point-light [position]="pointLightPosition()" [intensity]="stageIntensity()" />
156
+
157
+ <ngts-bounds
158
+ [fit]="!!stageAdjustCamera()"
159
+ [clip]="!!stageAdjustCamera()"
160
+ [margin]="Number(stageAdjustCamera())"
161
+ [observe]="true"
162
+ >
163
+ <ngts-stage-refit [radius]="boundingState().radius" [adjustCamera]="!!stageAdjustCamera()" />
164
+ <ngts-center
165
+ [position]="[0, shadowsInfo().shadowOffset / 2, 0]"
166
+ [top]="!!stageCenter()?.top"
167
+ [right]="!!stageCenter()?.right"
168
+ [bottom]="!!stageCenter()?.bottom"
169
+ [left]="!!stageCenter()?.left"
170
+ [front]="!!stageCenter()?.front"
171
+ [back]="!!stageCenter()?.back"
172
+ [disableX]="!!stageCenter()?.disableX"
173
+ [disableY]="!!stageCenter()?.disableY"
174
+ [disableZ]="!!stageCenter()?.disableZ"
175
+ [precise]="!!stageCenter()?.precise"
176
+ (centered)="onCentered($event)"
177
+ >
178
+ <ng-content />
179
+ </ngts-center>
180
+ </ngts-bounds>
181
+ <ngt-group [position]="[0, -boundingState().height / 2 - shadowsInfo().shadowOffset / 2, 0]">
182
+ <ngts-contact-shadows
183
+ *ngIf="shadowsInfo().contactShadow"
184
+ [scale]="boundingState().radius * 4"
185
+ [far]="boundingState().radius"
186
+ [blur]="2"
187
+ [opacity]="shadowsInfo().opacity"
188
+ [width]="shadowsInfo().width"
189
+ [height]="shadowsInfo().height"
190
+ [smooth]="shadowsInfo().smooth"
191
+ [resolution]="shadowsInfo().resolution"
192
+ [frames]="shadowsInfo().frames"
193
+ [scale]="shadowsInfo().scale"
194
+ [color]="shadowsInfo().color"
195
+ [depthWrite]="shadowsInfo().depthWrite"
196
+ [renderOrder]="shadowsInfo().renderOrder"
197
+ />
198
+ <ngts-accumulative-shadows
199
+ *ngIf="shadowsInfo().accumulativeShadow"
200
+ [temporal]="true"
201
+ [frames]="100"
202
+ [alphaTest]="0.9"
203
+ [toneMapped]="true"
204
+ [scale]="boundingState().radius * 4"
205
+ [opacity]="shadowsInfo().opacity"
206
+ [alphaTest]="shadowsInfo().alphaTest"
207
+ [color]="shadowsInfo().color"
208
+ [colorBlend]="shadowsInfo().colorBlend"
209
+ [resolution]="shadowsInfo().resolution"
210
+ >
211
+ <ngts-randomized-lights
212
+ [amount]="shadowsInfo().amount ?? 8"
213
+ [radius]="shadowsInfo().radius ?? boundingState().radius"
214
+ [ambient]="shadowsInfo().ambient ?? 0.5"
215
+ [intensity]="shadowsInfo().intensity ?? 1"
216
+ [position]="spotLightPosition()"
217
+ [size]="boundingState().radius * 4"
218
+ [bias]="-shadowsInfo().shadowBias"
219
+ [mapSize]="shadowsInfo().shadowSize"
220
+ />
221
+ </ngts-accumulative-shadows>
222
+ </ngt-group>
223
+ <ngts-environment
224
+ *ngIf="environmentInfo() as environmentInfo"
225
+ [frames]="environmentInfo.frames"
226
+ [near]="environmentInfo.near"
227
+ [far]="environmentInfo.far"
228
+ [resolution]="environmentInfo.resolution"
229
+ [background]="environmentInfo.background"
230
+ [blur]="environmentInfo.blur"
231
+ [map]="environmentInfo.map"
232
+ [files]="environmentInfo.files"
233
+ [path]="environmentInfo.path"
234
+ [preset]="environmentInfo.preset"
235
+ [scene]="environmentInfo.scene"
236
+ [extensions]="environmentInfo.extensions"
237
+ [ground]="environmentInfo.ground"
238
+ [encoding]="environmentInfo.encoding"
239
+ />
240
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }, { kind: "component", type: NgtsBounds, selector: "ngts-bounds", inputs: ["boundsRef", "damping", "fit", "clip", "observe", "margin", "eps"], outputs: ["fitted"] }, { kind: "directive", type: NgtsStageRefit, selector: "ngts-stage-refit", inputs: ["radius", "adjustCamera"] }, { kind: "component", type: NgtsCenter, selector: "ngts-center", inputs: ["centerRef", "top", "right", "bottom", "left", "front", "back", "disableX", "disableY", "disableZ", "disable", "precise"], outputs: ["centered"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NgtsContactShadows, selector: "ngts-contact-shadows", inputs: ["contactShadowsRef", "opacity", "width", "height", "blur", "far", "smooth", "resolution", "frames", "scale", "color", "depthWrite", "renderOrder"] }, { kind: "component", type: NgtsAccumulativeShadows, selector: "ngts-accumulative-shadows", inputs: ["frames", "blend", "limit", "scale", "temporal", "opacity", "alphaTest", "color", "colorBlend", "resolution", "toneMapped"] }, { kind: "component", type: NgtsRandomizedLights, selector: "ngts-randomized-lights", inputs: ["lightsRef", "frames", "position", "radius", "amount", "intensity", "ambient", "castShadow", "bias", "mapSize", "size", "near", "far"] }, { kind: "component", type: NgtsEnvironment, selector: "ngts-environment" }] }); }
241
+ }
242
+ export { NgtsStage };
243
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsStage, decorators: [{
244
+ type: Component,
245
+ args: [{
246
+ selector: 'ngts-stage',
247
+ standalone: true,
248
+ template: `
249
+ <ngt-ambient-light [intensity]="stageIntensity() / 3" />
250
+ <ngt-spot-light
251
+ [penumbra]="1"
252
+ [position]="spotLightPosition()"
253
+ [intensity]="stageIntensity() * 2"
254
+ [castShadow]="!!stageShadows()"
255
+ >
256
+ <ngt-value [rawValue]="shadowsInfo().shadowBias" attach="shadow.bias" />
257
+ <ngt-value [rawValue]="shadowsInfo().normalBias" attach="shadow.normalBias" />
258
+ <ngt-vector2 *args="[shadowsInfo().shadowSize, shadowsInfo().shadowSize]" attach="shadow.mapSize" />
259
+ </ngt-spot-light>
260
+ <ngt-point-light [position]="pointLightPosition()" [intensity]="stageIntensity()" />
261
+
262
+ <ngts-bounds
263
+ [fit]="!!stageAdjustCamera()"
264
+ [clip]="!!stageAdjustCamera()"
265
+ [margin]="Number(stageAdjustCamera())"
266
+ [observe]="true"
267
+ >
268
+ <ngts-stage-refit [radius]="boundingState().radius" [adjustCamera]="!!stageAdjustCamera()" />
269
+ <ngts-center
270
+ [position]="[0, shadowsInfo().shadowOffset / 2, 0]"
271
+ [top]="!!stageCenter()?.top"
272
+ [right]="!!stageCenter()?.right"
273
+ [bottom]="!!stageCenter()?.bottom"
274
+ [left]="!!stageCenter()?.left"
275
+ [front]="!!stageCenter()?.front"
276
+ [back]="!!stageCenter()?.back"
277
+ [disableX]="!!stageCenter()?.disableX"
278
+ [disableY]="!!stageCenter()?.disableY"
279
+ [disableZ]="!!stageCenter()?.disableZ"
280
+ [precise]="!!stageCenter()?.precise"
281
+ (centered)="onCentered($event)"
282
+ >
283
+ <ng-content />
284
+ </ngts-center>
285
+ </ngts-bounds>
286
+ <ngt-group [position]="[0, -boundingState().height / 2 - shadowsInfo().shadowOffset / 2, 0]">
287
+ <ngts-contact-shadows
288
+ *ngIf="shadowsInfo().contactShadow"
289
+ [scale]="boundingState().radius * 4"
290
+ [far]="boundingState().radius"
291
+ [blur]="2"
292
+ [opacity]="shadowsInfo().opacity"
293
+ [width]="shadowsInfo().width"
294
+ [height]="shadowsInfo().height"
295
+ [smooth]="shadowsInfo().smooth"
296
+ [resolution]="shadowsInfo().resolution"
297
+ [frames]="shadowsInfo().frames"
298
+ [scale]="shadowsInfo().scale"
299
+ [color]="shadowsInfo().color"
300
+ [depthWrite]="shadowsInfo().depthWrite"
301
+ [renderOrder]="shadowsInfo().renderOrder"
302
+ />
303
+ <ngts-accumulative-shadows
304
+ *ngIf="shadowsInfo().accumulativeShadow"
305
+ [temporal]="true"
306
+ [frames]="100"
307
+ [alphaTest]="0.9"
308
+ [toneMapped]="true"
309
+ [scale]="boundingState().radius * 4"
310
+ [opacity]="shadowsInfo().opacity"
311
+ [alphaTest]="shadowsInfo().alphaTest"
312
+ [color]="shadowsInfo().color"
313
+ [colorBlend]="shadowsInfo().colorBlend"
314
+ [resolution]="shadowsInfo().resolution"
315
+ >
316
+ <ngts-randomized-lights
317
+ [amount]="shadowsInfo().amount ?? 8"
318
+ [radius]="shadowsInfo().radius ?? boundingState().radius"
319
+ [ambient]="shadowsInfo().ambient ?? 0.5"
320
+ [intensity]="shadowsInfo().intensity ?? 1"
321
+ [position]="spotLightPosition()"
322
+ [size]="boundingState().radius * 4"
323
+ [bias]="-shadowsInfo().shadowBias"
324
+ [mapSize]="shadowsInfo().shadowSize"
325
+ />
326
+ </ngts-accumulative-shadows>
327
+ </ngt-group>
328
+ <ngts-environment
329
+ *ngIf="environmentInfo() as environmentInfo"
330
+ [frames]="environmentInfo.frames"
331
+ [near]="environmentInfo.near"
332
+ [far]="environmentInfo.far"
333
+ [resolution]="environmentInfo.resolution"
334
+ [background]="environmentInfo.background"
335
+ [blur]="environmentInfo.blur"
336
+ [map]="environmentInfo.map"
337
+ [files]="environmentInfo.files"
338
+ [path]="environmentInfo.path"
339
+ [preset]="environmentInfo.preset"
340
+ [scene]="environmentInfo.scene"
341
+ [extensions]="environmentInfo.extensions"
342
+ [ground]="environmentInfo.ground"
343
+ [encoding]="environmentInfo.encoding"
344
+ />
345
+ `,
346
+ imports: [
347
+ NgtArgs,
348
+ NgtsBounds,
349
+ NgtsStageRefit,
350
+ NgtsCenter,
351
+ NgIf,
352
+ NgtsContactShadows,
353
+ NgtsAccumulativeShadows,
354
+ NgtsRandomizedLights,
355
+ NgtsEnvironment,
356
+ ],
357
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
358
+ }]
359
+ }], ctorParameters: function () { return []; }, propDecorators: { preset: [{
360
+ type: Input
361
+ }], shadows: [{
362
+ type: Input
363
+ }], adjustCamera: [{
364
+ type: Input
365
+ }], environment: [{
366
+ type: Input
367
+ }], intensity: [{
368
+ type: Input
369
+ }], center: [{
370
+ type: Input
371
+ }], centered: [{
372
+ type: Output
373
+ }] } });
374
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvc3RhZ2Uvc3RhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFFBQVEsRUFDUixzQkFBc0IsRUFDdEIsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzVFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXhFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFHN0QsTUFBTSxPQUFPLEdBQUc7SUFDWixTQUFTLEVBQUU7UUFDUCxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNmLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tB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QUksNkZBQ0osa0JBQWtCLDhOQUNsQix1QkFBdUIsNE1BQ3ZCLG9CQUFvQixvTkFDcEIsZUFBZTs7U0FJVixTQUFTOzJGQUFULFNBQVM7a0JBbEhyQixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxZQUFZO29CQUN0QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBaUdUO29CQUNELE9BQU8sRUFBRTt3QkFDTCxPQUFPO3dCQUNQLFVBQVU7d0JBQ1YsY0FBYzt3QkFDZCxVQUFVO3dCQUNWLElBQUk7d0JBQ0osa0JBQWtCO3dCQUNsQix1QkFBdUI7d0JBQ3ZCLG9CQUFvQjt3QkFDcEIsZUFBZTtxQkFDbEI7b0JBQ0QsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ3BDOzBFQUtnQixNQUFNO3NCQUFsQixLQUFLO2dCQUlPLE9BQU87c0JBQW5CLEtBQUs7Z0JBSU8sWUFBWTtzQkFBeEIsS0FBSztnQkFJTyxXQUFXO3NCQUF2QixLQUFLO2dCQUlPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBSU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBjb21wdXRlZCxcbiAgICBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCBleHRlbmQsIE5ndEFyZ3MsIE5ndFNpZ25hbFN0b3JlLCBzYWZlRGV0ZWN0Q2hhbmdlcyB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgQW1iaWVudExpZ2h0LCBHcm91cCwgUG9pbnRMaWdodCwgU3BvdExpZ2h0LCBWZWN0b3IyIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3MgfSBmcm9tICcuLi9hY2N1bXVsYXRpdmUtc2hhZG93cy9hY2N1bXVsYXRpdmUtc2hhZG93cyc7XG5pbXBvcnQgeyBOZ3RzUmFuZG9taXplZExpZ2h0cyB9IGZyb20gJy4uL2FjY3VtdWxhdGl2ZS1zaGFkb3dzL3JhbmRvbWl6ZWQtbGlnaHRzJztcbmltcG9ydCB7IE5HVFNfQk9VTkRTX0FQSSwgTmd0c0JvdW5kcyB9IGZyb20gJy4uL2JvdW5kcy9ib3VuZHMnO1xuaW1wb3J0IHsgTmd0c0NlbnRlciB9IGZyb20gJy4uL2NlbnRlci9jZW50ZXInO1xuaW1wb3J0IHsgTmd0c0NvbnRhY3RTaGFkb3dzIH0gZnJvbSAnLi4vY29udGFjdC1zaGFkb3dzL2NvbnRhY3Qtc2hhZG93cyc7XG5pbXBvcnQgeyBOZ3RzRW52aXJvbm1lbnRQcmVzZXRzVHlwZSB9IGZyb20gJy4uL2Vudmlyb25tZW50L2Fzc2V0cyc7XG5pbXBvcnQgeyBOZ3RzRW52aXJvbm1lbnQgfSBmcm9tICcuLi9lbnZpcm9ubWVudC9lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBOZ3RzRW52aXJvbm1lbnRJbnB1dCB9IGZyb20gJy4uL2Vudmlyb25tZW50L2Vudmlyb25tZW50LWlucHV0JztcblxuY29uc3QgcHJlc2V0cyA9IHtcbiAgICByZW1icmFuZHQ6IHtcbiAgICAgICAgbWFpbjogWzEsIDIsIDFdLFxuICAgICAgICBmaWxsOiBbLTIsIC0wLjUsIC0yXSxcbiAgICB9LFxuICAgIHBvcnRyYWl0OiB7XG4gICAgICAgIG1haW46IFstMSwgMiwgMC41XSxcbiAgICAgICAgZmlsbDogWy0xLCAwLjUsIC0xLjVdLFxuICAgIH0sXG4gICAgdXBmcm9udDoge1xuICAgICAgICBtYWluOiBbMCwgMiwgMV0sXG4gICAgICAgIGZpbGw6IFstMSwgMC41LCAtMS41XSxcbiAgICB9LFxuICAgIHNvZnQ6IHtcbiAgICAgICAgbWFpbjogWy0yLCA0LCA0XSxcbiAgICAgICAgZmlsbDogWy0xLCAwLjUsIC0xLjVdLFxuICAgIH0sXG59O1xuXG50eXBlIE5ndHNTdGFnZVNoYWRvd3MgPSBQYXJ0aWFsPE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzPiAmXG4gICAgUGFydGlhbDxOZ3RzUmFuZG9taXplZExpZ2h0cz4gJlxuICAgIFBhcnRpYWw8Tmd0c0NvbnRhY3RTaGFkb3dzPiAmIHtcbiAgICAgICAgdHlwZTogJ2NvbnRhY3QnIHwgJ2FjY3VtdWxhdGl2ZSc7XG4gICAgICAgIC8qKiBTaGFkb3cgcGxhbmUgb2Zmc2V0LCBkZWZhdWx0OiAwICovXG4gICAgICAgIG9mZnNldD86IG51bWJlcjtcbiAgICAgICAgLyoqIFNoYWRvdyBiaWFzLCBkZWZhdWx0OiAtMC4wMDAxICovXG4gICAgICAgIGJpYXM/OiBudW1iZXI7XG4gICAgICAgIC8qKiBTaGFkb3cgbm9ybWFsIGJpYXMsIGRlZmF1bHQ6IDAgKi9cbiAgICAgICAgbm9ybWFsQmlhcz86IG51bWJlcjtcbiAgICAgICAgLyoqIFNoYWRvdyBtYXAgc2l6ZSwgZGVmYXVsdDogMTAyNCAqL1xuICAgICAgICBzaXplPzogbnVtYmVyO1xuICAgIH07XG5cbmludGVyZmFjZSBOZ3RzU3RhZ2VQcm9wcyB7XG4gICAgLyoqIExpZ2h0aW5nIHNldHVwLCBkZWZhdWx0OiBcInJlbWJyYW5kdFwiICovXG4gICAgcHJlc2V0OlxuICAgICAgICB8ICdyZW1icmFuZHQnXG4gICAgICAgIHwgJ3BvcnRyYWl0J1xuICAgICAgICB8ICd1cGZyb250J1xuICAgICAgICB8ICdzb2Z0J1xuICAgICAgICB8IHsgbWFpbjogW3g6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXJdOyBmaWxsOiBbeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcl0gfTtcbiAgICAvKiogQ29udHJvbHMgdGhlIGdyb3VuZCBzaGFkb3dzLCBkZWZhdWx0OiBcImNvbnRhY3RcIiAqL1xuICAgIHNoYWRvd3M6IGJvb2xlYW4gfCAnY29udGFjdCcgfCAnYWNjdW11bGF0aXZlJyB8IE5ndHNTdGFnZVNoYWRvd3M7XG4gICAgLyoqIE9wdGlvbmFsbHkgd3JhcHMgYW5kIHRoZXJlYnkgY2VudGVycyB0aGUgbW9kZWxzIHVzaW5nIDxCb3VuZHM+LCBjYW4gYWxzbyBiZSBhIG1hcmdpbiwgZGVmYXVsdDogdHJ1ZSAqL1xuICAgIGFkanVzdENhbWVyYTogYm9vbGVhbiB8IG51bWJlcjtcbiAgICAvKiogVGhlIGRlZmF1bHQgZW52aXJvbm1lbnQsIGRlZmF1bHQ6IFwiY2l0eVwiICovXG4gICAgZW52aXJvbm1lbnQ6IE5ndHNFbnZpcm9ubWVudFByZXNldHNUeXBlIHwgUGFydGlhbDxOZ3RzRW52aXJvbm1lbnRJbnB1dD47XG4gICAgLyoqIFRoZSBsaWdodGluZyBpbnRlbnNpdHksIGRlZmF1bHQ6IDAuNSAqL1xuICAgIGludGVuc2l0eTogbnVtYmVyO1xuICAgIC8qKiBUbyBhZGp1c3QgY2VudGVyaW5nLCBkZWZhdWx0OiB1bmRlZmluZWQgKi9cbiAgICBjZW50ZXI/OiBQYXJ0aWFsPE5ndHNDZW50ZXI+O1xufVxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICduZ3RzLXN0YWdlLXJlZml0Jywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5ndHNTdGFnZVJlZml0IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgICByZWFkb25seSAjYm91bmRzQXBpID0gaW5qZWN0KE5HVFNfQk9VTkRTX0FQSSk7XG5cbiAgICBASW5wdXQoKSByYWRpdXMgPSAwO1xuICAgIEBJbnB1dCgpIGFkanVzdENhbWVyYSA9IHRydWU7XG5cbiAgICBuZ09uQ2hhbmdlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuYWRqdXN0Q2FtZXJhKSB7XG4gICAgICAgICAgICB0aGlzLiNib3VuZHNBcGkoKS5yZWZyZXNoKCkuY2xpcCgpLmZpdCgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHRlbmQoeyBBbWJpZW50TGlnaHQsIFNwb3RMaWdodCwgVmVjdG9yMiwgUG9pbnRMaWdodCwgR3JvdXAgfSk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0cy1zdGFnZScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LWFtYmllbnQtbGlnaHQgW2ludGVuc2l0eV09XCJzdGFnZUludGVuc2l0eSgpIC8gM1wiIC8+XG4gICAgICAgIDxuZ3Qtc3BvdC1saWdodFxuICAgICAgICAgICAgW3BlbnVtYnJhXT1cIjFcIlxuICAgICAgICAgICAgW3Bvc2l0aW9uXT1cInNwb3RMaWdodFBvc2l0aW9uKClcIlxuICAgICAgICAgICAgW2ludGVuc2l0eV09XCJzdGFnZUludGVuc2l0eSgpICogMlwiXG4gICAgICAgICAgICBbY2FzdFNoYWRvd109XCIhIXN0YWdlU2hhZG93cygpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG5ndC12YWx1ZSBbcmF3VmFsdWVdPVwic2hhZG93c0luZm8oKS5zaGFkb3dCaWFzXCIgYXR0YWNoPVwic2hhZG93LmJpYXNcIiAvPlxuICAgICAgICAgICAgPG5ndC12YWx1ZSBbcmF3VmFsdWVdPVwic2hhZG93c0luZm8oKS5ub3JtYWxCaWFzXCIgYXR0YWNoPVwic2hhZG93Lm5vcm1hbEJpYXNcIiAvPlxuICAgICAgICAgICAgPG5ndC12ZWN0b3IyICphcmdzPVwiW3NoYWRvd3NJbmZvKCkuc2hhZG93U2l6ZSwgc2hhZG93c0luZm8oKS5zaGFkb3dTaXplXVwiIGF0dGFjaD1cInNoYWRvdy5tYXBTaXplXCIgLz5cbiAgICAgICAgPC9uZ3Qtc3BvdC1saWdodD5cbiAgICAgICAgPG5ndC1wb2ludC1saWdodCBbcG9zaXRpb25dPVwicG9pbnRMaWdodFBvc2l0aW9uKClcIiBbaW50ZW5zaXR5XT1cInN0YWdlSW50ZW5zaXR5KClcIiAvPlxuXG4gICAgICAgIDxuZ3RzLWJvdW5kc1xuICAgICAgICAgICAgW2ZpdF09XCIhIXN0YWdlQWRqdXN0Q2FtZXJhKClcIlxuICAgICAgICAgICAgW2NsaXBdPVwiISFzdGFnZUFkanVzdENhbWVyYSgpXCJcbiAgICAgICAgICAgIFttYXJnaW5dPVwiTnVtYmVyKHN0YWdlQWRqdXN0Q2FtZXJhKCkpXCJcbiAgICAgICAgICAgIFtvYnNlcnZlXT1cInRydWVcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmd0cy1zdGFnZS1yZWZpdCBbcmFkaXVzXT1cImJvdW5kaW5nU3RhdGUoKS5yYWRpdXNcIiBbYWRqdXN0Q2FtZXJhXT1cIiEhc3RhZ2VBZGp1c3RDYW1lcmEoKVwiIC8+XG4gICAgICAgICAgICA8bmd0cy1jZW50ZXJcbiAgICAgICAgICAgICAgICBbcG9zaXRpb25dPVwiWzAsIHNoYWRvd3NJbmZvKCkuc2hhZG93T2Zmc2V0IC8gMiwgMF1cIlxuICAgICAgICAgICAgICAgIFt0b3BdPVwiISFzdGFnZUNlbnRlcigpPy50b3BcIlxuICAgICAgICAgICAgICAgIFtyaWdodF09XCIhIXN0YWdlQ2VudGVyKCk/LnJpZ2h0XCJcbiAgICAgICAgICAgICAgICBbYm90dG9tXT1cIiEhc3RhZ2VDZW50ZXIoKT8uYm90dG9tXCJcbiAgICAgICAgICAgICAgICBbbGVmdF09XCIhIXN0YWdlQ2VudGVyKCk/LmxlZnRcIlxuICAgICAgICAgICAgICAgIFtmcm9udF09XCIhIXN0YWdlQ2VudGVyKCk/LmZyb250XCJcbiAgICAgICAgICAgICAgICBbYmFja109XCIhIXN0YWdlQ2VudGVyKCk/LmJhY2tcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlWF09XCIhIXN0YWdlQ2VudGVyKCk/LmRpc2FibGVYXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZVldPVwiISFzdGFnZUNlbnRlcigpPy5kaXNhYmxlWVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVaXT1cIiEhc3RhZ2VDZW50ZXIoKT8uZGlzYWJsZVpcIlxuICAgICAgICAgICAgICAgIFtwcmVjaXNlXT1cIiEhc3RhZ2VDZW50ZXIoKT8ucHJlY2lzZVwiXG4gICAgICAgICAgICAgICAgKGNlbnRlcmVkKT1cIm9uQ2VudGVyZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgLz5cbiAgICAgICAgICAgIDwvbmd0cy1jZW50ZXI+XG4gICAgICAgIDwvbmd0cy1ib3VuZHM+XG4gICAgICAgIDxuZ3QtZ3JvdXAgW3Bvc2l0aW9uXT1cIlswLCAtYm91bmRpbmdTdGF0ZSgpLmhlaWdodCAvIDIgLSBzaGFkb3dzSW5mbygpLnNoYWRvd09mZnNldCAvIDIsIDBdXCI+XG4gICAgICAgICAgICA8bmd0cy1jb250YWN0LXNoYWRvd3NcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNoYWRvd3NJbmZvKCkuY29udGFjdFNoYWRvd1wiXG4gICAgICAgICAgICAgICAgW3NjYWxlXT1cImJvdW5kaW5nU3RhdGUoKS5yYWRpdXMgKiA0XCJcbiAgICAgICAgICAgICAgICBbZmFyXT1cImJvdW5kaW5nU3RhdGUoKS5yYWRpdXNcIlxuICAgICAgICAgICAgICAgIFtibHVyXT1cIjJcIlxuICAgICAgICAgICAgICAgIFtvcGFjaXR5XT1cInNoYWRvd3NJbmZvKCkub3BhY2l0eVwiXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cInNoYWRvd3NJbmZvKCkud2lkdGhcIlxuICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwic2hhZG93c0luZm8oKS5oZWlnaHRcIlxuICAgICAgICAgICAgICAgIFtzbW9vdGhdPVwic2hhZG93c0luZm8oKS5zbW9vdGhcIlxuICAgICAgICAgICAgICAgIFtyZXNvbHV0aW9uXT1cInNoYWRvd3NJbmZvKCkucmVzb2x1dGlvblwiXG4gICAgICAgICAgICAgICAgW2ZyYW1lc109XCJzaGFkb3dzSW5mbygpLmZyYW1lc1wiXG4gICAgICAgICAgICAgICAgW3NjYWxlXT1cInNoYWRvd3NJbmZvKCkuc2NhbGVcIlxuICAgICAgICAgICAgICAgIFtjb2xvcl09XCJzaGFkb3dzSW5mbygpLmNvbG9yXCJcbiAgICAgICAgICAgICAgICBbZGVwdGhXcml0ZV09XCJzaGFkb3dzSW5mbygpLmRlcHRoV3JpdGVcIlxuICAgICAgICAgICAgICAgIFtyZW5kZXJPcmRlcl09XCJzaGFkb3dzSW5mbygpLnJlbmRlck9yZGVyXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bmd0cy1hY2N1bXVsYXRpdmUtc2hhZG93c1xuICAgICAgICAgICAgICAgICpuZ0lmPVwic2hhZG93c0luZm8oKS5hY2N1bXVsYXRpdmVTaGFkb3dcIlxuICAgICAgICAgICAgICAgIFt0ZW1wb3JhbF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbZnJhbWVzXT1cIjEwMFwiXG4gICAgICAgICAgICAgICAgW2FscGhhVGVzdF09XCIwLjlcIlxuICAgICAgICAgICAgICAgIFt0b25lTWFwcGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtzY2FsZV09XCJib3VuZGluZ1N0YXRlKCkucmFkaXVzICogNFwiXG4gICAgICAgICAgICAgICAgW29wYWNpdHldPVwic2hhZG93c0luZm8oKS5vcGFjaXR5XCJcbiAgICAgICAgICAgICAgICBbYWxwaGFUZXN0XT1cInNoYWRvd3NJbmZvKCkuYWxwaGFUZXN0XCJcbiAgICAgICAgICAgICAgICBbY29sb3JdPVwic2hhZG93c0luZm8oKS5jb2xvclwiXG4gICAgICAgICAgICAgICAgW2NvbG9yQmxlbmRdPVwic2hhZG93c0luZm8oKS5jb2xvckJsZW5kXCJcbiAgICAgICAgICAgICAgICBbcmVzb2x1dGlvbl09XCJzaGFkb3dzSW5mbygpLnJlc29sdXRpb25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZ3RzLXJhbmRvbWl6ZWQtbGlnaHRzXG4gICAgICAgICAgICAgICAgICAgIFthbW91bnRdPVwic2hhZG93c0luZm8oKS5hbW91bnQgPz8gOFwiXG4gICAgICAgICAgICAgICAgICAgIFtyYWRpdXNdPVwic2hhZG93c0luZm8oKS5yYWRpdXMgPz8gYm91bmRpbmdTdGF0ZSgpLnJhZGl1c1wiXG4gICAgICAgICAgICAgICAgICAgIFthbWJpZW50XT1cInNoYWRvd3NJbmZvKCkuYW1iaWVudCA/PyAwLjVcIlxuICAgICAgICAgICAgICAgICAgICBbaW50ZW5zaXR5XT1cInNoYWRvd3NJbmZvKCkuaW50ZW5zaXR5ID8/IDFcIlxuICAgICAgICAgICAgICAgICAgICBbcG9zaXRpb25dPVwic3BvdExpZ2h0UG9zaXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgIFtzaXplXT1cImJvdW5kaW5nU3RhdGUoKS5yYWRpdXMgKiA0XCJcbiAgICAgICAgICAgICAgICAgICAgW2JpYXNdPVwiLXNoYWRvd3NJbmZvKCkuc2hhZG93Qmlhc1wiXG4gICAgICAgICAgICAgICAgICAgIFttYXBTaXplXT1cInNoYWRvd3NJbmZvKCkuc2hhZG93U2l6ZVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmd0cy1hY2N1bXVsYXRpdmUtc2hhZG93cz5cbiAgICAgICAgPC9uZ3QtZ3JvdXA+XG4gICAgICAgIDxuZ3RzLWVudmlyb25tZW50XG4gICAgICAgICAgICAqbmdJZj1cImVudmlyb25tZW50SW5mbygpIGFzIGVudmlyb25tZW50SW5mb1wiXG4gICAgICAgICAgICBbZnJhbWVzXT1cImVudmlyb25tZW50SW5mby5mcmFtZXNcIlxuICAgICAgICAgICAgW25lYXJdPVwiZW52aXJvbm1lbnRJbmZvLm5lYXJcIlxuICAgICAgICAgICAgW2Zhcl09XCJlbnZpcm9ubWVudEluZm8uZmFyXCJcbiAgICAgICAgICAgIFtyZXNvbHV0aW9uXT1cImVudmlyb25tZW50SW5mby5yZXNvbHV0aW9uXCJcbiAgICAgICAgICAgIFtiYWNrZ3JvdW5kXT1cImVudmlyb25tZW50SW5mby5iYWNrZ3JvdW5kXCJcbiAgICAgICAgICAgIFtibHVyXT1cImVudmlyb25tZW50SW5mby5ibHVyXCJcbiAgICAgICAgICAgIFttYXBdPVwiZW52aXJvbm1lbnRJbmZvLm1hcFwiXG4gICAgICAgICAgICBbZmlsZXNdPVwiZW52aXJvbm1lbnRJbmZvLmZpbGVzXCJcbiAgICAgICAgICAgIFtwYXRoXT1cImVudmlyb25tZW50SW5mby5wYXRoXCJcbiAgICAgICAgICAgIFtwcmVzZXRdPVwiZW52aXJvbm1lbnRJbmZvLnByZXNldFwiXG4gICAgICAgICAgICBbc2NlbmVdPVwiZW52aXJvbm1lbnRJbmZvLnNjZW5lXCJcbiAgICAgICAgICAgIFtleHRlbnNpb25zXT1cImVudmlyb25tZW50SW5mby5leHRlbnNpb25zXCJcbiAgICAgICAgICAgIFtncm91bmRdPVwiZW52aXJvbm1lbnRJbmZvLmdyb3VuZFwiXG4gICAgICAgICAgICBbZW5jb2RpbmddPVwiZW52aXJvbm1lbnRJbmZvLmVuY29kaW5nXCJcbiAgICAgICAgLz5cbiAgICBgLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmd0QXJncyxcbiAgICAgICAgTmd0c0JvdW5kcyxcbiAgICAgICAgTmd0c1N0YWdlUmVmaXQsXG4gICAgICAgIE5ndHNDZW50ZXIsXG4gICAgICAgIE5nSWYsXG4gICAgICAgIE5ndHNDb250YWN0U2hhZG93cyxcbiAgICAgICAgTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3MsXG4gICAgICAgIE5ndHNSYW5kb21pemVkTGlnaHRzLFxuICAgICAgICBOZ3RzRW52aXJvbm1lbnQsXG4gICAgXSxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNTdGFnZSBleHRlbmRzIE5ndFNpZ25hbFN0b3JlPE5ndHNTdGFnZVByb3BzPiB7XG4gICAgcmVhZG9ubHkgI2NkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgcmVhZG9ubHkgTnVtYmVyID0gTnVtYmVyO1xuXG4gICAgQElucHV0KCkgc2V0IHByZXNldChwcmVzZXQ6IE5ndHNTdGFnZVByb3BzWydwcmVzZXQnXSkge1xuICAgICAgICB0aGlzLnNldCh7IHByZXNldCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgc2hhZG93cyhzaGFkb3dzOiBOZ3RzU3RhZ2VQcm9wc1snc2hhZG93cyddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc2hhZG93cyB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgYWRqdXN0Q2FtZXJhKGFkanVzdENhbWVyYTogTmd0c1N0YWdlUHJvcHNbJ2FkanVzdENhbWVyYSddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYWRqdXN0Q2FtZXJhIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogTmd0c1N0YWdlUHJvcHNbJ2Vudmlyb25tZW50J10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBlbnZpcm9ubWVudCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgaW50ZW5zaXR5KGludGVuc2l0eTogTmd0c1N0YWdlUHJvcHNbJ2ludGVuc2l0eSddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgaW50ZW5zaXR5IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBjZW50ZXIoY2VudGVyOiBOZ3RzU3RhZ2VQcm9wc1snY2VudGVyJ10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBjZW50ZXIgfSk7XG4gICAgfVxuXG4gICAgQE91dHB1dCgpIGNlbnRlcmVkID0gbmV3IEV2ZW50RW1pdHRlcigpIGFzIE5ndHNDZW50ZXJbJ2NlbnRlcmVkJ107XG5cbiAgICByZWFkb25seSBib3VuZGluZ1N0YXRlID0gY3JlYXRlU2lnbmFsKHsgcmFkaXVzOiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwLCBkZXB0aDogMCB9KTtcblxuICAgIHJlYWRvbmx5ICNwcmVzZXQgPSB0aGlzLnNlbGVjdCgncHJlc2V0Jyk7XG4gICAgcmVhZG9ubHkgI2Vudmlyb25tZW50ID0gdGhpcy5zZWxlY3QoJ2Vudmlyb25tZW50Jyk7XG5cbiAgICByZWFkb25seSBzdGFnZVNoYWRvd3MgPSB0aGlzLnNlbGVjdCgnc2hhZG93cycpO1xuICAgIHJlYWRvbmx5IHN0YWdlSW50ZW5zaXR5ID0gdGhpcy5zZWxlY3QoJ2ludGVuc2l0eScpO1xuICAgIHJlYWRvbmx5IHN0YWdlQWRqdXN0Q2FtZXJhID0gdGhpcy5zZWxlY3QoJ2FkanVzdENhbWVyYScpO1xuICAgIHJlYWRvbmx5IHN0YWdlQ2VudGVyID0gdGhpcy5zZWxlY3QoJ2NlbnRlcicpO1xuXG4gICAgcmVhZG9ubHkgY29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBwcmVzZXQgPSB0aGlzLiNwcmVzZXQoKTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBwcmVzZXQgPT09ICdzdHJpbmcnID8gcHJlc2V0c1twcmVzZXRdIDogcHJlc2V0O1xuICAgIH0pO1xuXG4gICAgcmVhZG9ubHkgc2hhZG93c0luZm8gPSBjb21wdXRlZDxhbnk+KCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2hhZG93cyA9IHRoaXMuc3RhZ2VTaGFkb3dzKCk7XG4gICAgICAgIGNvbnN0IHJlc3RQcm9wcyA9IHR5cGVvZiBzaGFkb3dzID09PSAnc3RyaW5nJyA/IHt9IDogKHNoYWRvd3MgYXMgTmd0c1N0YWdlU2hhZG93cykgfHwge307XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250YWN0U2hhZG93OiBzaGFkb3dzID09PSAnY29udGFjdCcgfHwgKHNoYWRvd3MgYXMgTmd0c1N0YWdlU2hhZG93cyk/LnR5cGUgPT09ICdjb250YWN0JyxcbiAgICAgICAgICAgIGFjY3VtdWxhdGl2ZVNoYWRvdzogc2hhZG93cyA9PT0gJ2FjY3VtdWxhdGl2ZScgfHwgKHNoYWRvd3MgYXMgTmd0c1N0YWdlU2hhZG93cyk/LnR5cGUgPT09ICdhY2N1bXVsYXRpdmUnLFxuICAgICAgICAgICAgc2hhZG93QmlhczogKHNoYWRvd3MgYXMgTmd0c1N0YWdlU2hhZG93cyk/LmJpYXMgPz8gLTAuMDAwMSxcbiAgICAgICAgICAgIG5vcm1hbEJpYXM6IChzaGFkb3dzIGFzIE5ndHNTdGFnZVNoYWRvd3MpPy5ub3JtYWxCaWFzID8/IDAsXG4gICAgICAgICAgICBzaGFkb3dTaXplOiAoc2hhZG93cyBhcyBOZ3RzU3RhZ2VTaGFkb3dzKT8uc2l6ZSA/PyAxMDI0LFxuICAgICAgICAgICAgc2hhZG93T2Zmc2V0OiAoc2hhZG93cyBhcyBOZ3RzU3RhZ2VTaGFkb3dzKT8ub2Zmc2V0ID8/IDAsXG4gICAgICAgICAgICAuLi5yZXN0UHJvcHMsXG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZWFkb25seSBzcG90TGlnaHRQb3NpdGlvbiA9IGNvbXB1dGVkPFtudW1iZXIsIG51bWJlciwgbnVtYmVyXT4oKCkgPT4ge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZygpO1xuICAgICAgICBpZiAoIWNvbmZpZykgcmV0dXJuIFswLCAwLCAwXTtcbiAgICAgICAgY29uc3QgcmFkaXVzID0gdGhpcy5ib3VuZGluZ1N0YXRlKCkucmFkaXVzO1xuICAgICAgICByZXR1cm4gW2NvbmZpZy5tYWluWzBdICogcmFkaXVzLCBjb25maWcubWFpblsxXSAqIHJhZGl1cywgY29uZmlnLm1haW5bMl0gKiByYWRpdXNdO1xuICAgIH0pO1xuXG4gICAgcmVhZG9ubHkgcG9pbnRMaWdodFBvc2l0aW9uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZygpO1xuICAgICAgICBpZiAoIWNvbmZpZykgcmV0dXJuIFswLCAwLCAwXTtcbiAgICAgICAgY29uc3QgcmFkaXVzID0gdGhpcy5ib3VuZGluZ1N0YXRlKCkucmFkaXVzO1xuICAgICAgICByZXR1cm4gW2NvbmZpZy5maWxsWzBdICogcmFkaXVzLCBjb25maWcuZmlsbFsxXSAqIHJhZGl1cywgY29uZmlnLmZpbGxbMl0gKiByYWRpdXNdO1xuICAgIH0pO1xuXG4gICAgcmVhZG9ubHkgZW52aXJvbm1lbnRJbmZvID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBlbnZpcm9ubWVudCA9IHRoaXMuI2Vudmlyb25tZW50KCk7XG4gICAgICAgIGlmICghZW52aXJvbm1lbnQpIHJldHVybiBudWxsO1xuICAgICAgICBpZiAodHlwZW9mIGVudmlyb25tZW50ID09PSAnc3RyaW5nJykgcmV0dXJuIHsgcHJlc2V0OiBlbnZpcm9ubWVudCB9O1xuICAgICAgICByZXR1cm4gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgYWRqdXN0Q2FtZXJhOiB0cnVlLFxuICAgICAgICAgICAgaW50ZW5zaXR5OiAwLjUsXG4gICAgICAgICAgICBzaGFkb3dzOiAnY29udGFjdCcsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogJ2NpdHknLFxuICAgICAgICAgICAgcHJlc2V0OiAncmVtYnJhbmR0JyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25DZW50ZXJlZChwcm9wczoge1xuICAgICAgICAvKiogVGhlIG5leHQgcGFyZW50IGFib3ZlIDxDZW50ZXI+ICovXG4gICAgICAgIHBhcmVudDogVEhSRUUuT2JqZWN0M0Q7XG4gICAgICAgIC8qKiBUaGUgb3V0bW9zdCBjb250YWluZXIgZ3JvdXAgb2YgdGhlIDxDZW50ZXI+IGNvbXBvbmVudCAqL1xuICAgICAgICBjb250YWluZXI6IFRIUkVFLk9iamVjdDNEO1xuICAgICAgICB3aWR0aDogbnVtYmVyO1xuICAgICAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICAgICAgZGVwdGg6IG51bWJlcjtcbiAgICAgICAgYm91bmRpbmdCb3g6IFRIUkVFLkJveDM7XG4gICAgICAgIGJvdW5kaW5nU3BoZXJlOiBUSFJFRS5TcGhlcmU7XG4gICAgICAgIGNlbnRlcjogVEhSRUUuVmVjdG9yMztcbiAgICAgICAgdmVydGljYWxBbGlnbm1lbnQ6IG51bWJlcjtcbiAgICAgICAgaG9yaXpvbnRhbEFsaWdubWVudDogbnVtYmVyO1xuICAgICAgICBkZXB0aEFsaWdubWVudDogbnVtYmVyO1xuICAgIH0pIHtcbiAgICAgICAgY29uc3QgeyBib3VuZGluZ1NwaGVyZSwgd2lkdGgsIGhlaWdodCwgZGVwdGggfSA9IHByb3BzO1xuICAgICAgICB0aGlzLmJvdW5kaW5nU3RhdGUuc2V0KHsgcmFkaXVzOiBib3VuZGluZ1NwaGVyZS5yYWRpdXMsIHdpZHRoLCBoZWlnaHQsIGRlcHRoIH0pO1xuICAgICAgICBzYWZlRGV0ZWN0Q2hhbmdlcyh0aGlzLiNjZHIpO1xuICAgICAgICBpZiAodGhpcy5jZW50ZXJlZC5vYnNlcnZlZCkgdGhpcy5jZW50ZXJlZC5lbWl0KHByb3BzKTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,148 @@
1
+ import { Component, computed, CUSTOM_ELEMENTS_SCHEMA, Input } from '@angular/core';
2
+ import { extend, injectBeforeRender, injectNgtRef, NgtArgs, NgtSignalStore } from 'angular-three';
3
+ import { StarFieldMaterial } from 'angular-three-soba/shaders';
4
+ import * as THREE from 'three';
5
+ import { BufferAttribute, BufferGeometry, Points } from 'three';
6
+ import * as i0 from "@angular/core";
7
+ extend({ Points, BufferGeometry, BufferAttribute });
8
+ const genStar = (r) => {
9
+ return new THREE.Vector3().setFromSpherical(new THREE.Spherical(r, Math.acos(1 - Math.random() * 2), Math.random() * 2 * Math.PI));
10
+ };
11
+ class NgtsStars extends NgtSignalStore {
12
+ set radius(radius) {
13
+ this.set({ radius });
14
+ }
15
+ set depth(depth) {
16
+ this.set({ depth });
17
+ }
18
+ set count(count) {
19
+ this.set({ count });
20
+ }
21
+ set factor(factor) {
22
+ this.set({ factor });
23
+ }
24
+ set saturation(saturation) {
25
+ this.set({ saturation });
26
+ }
27
+ set starsFade(fade) {
28
+ this.set({ fade });
29
+ }
30
+ set speed(speed) {
31
+ this.set({ speed });
32
+ }
33
+ #count;
34
+ #depth;
35
+ #factor;
36
+ #radius;
37
+ #saturation;
38
+ constructor() {
39
+ super({
40
+ radius: 100,
41
+ depth: 50,
42
+ count: 5000,
43
+ saturation: 0,
44
+ factor: 4,
45
+ fade: false,
46
+ speed: 1,
47
+ });
48
+ this.AdditiveBlending = THREE.AdditiveBlending;
49
+ this.material = new StarFieldMaterial();
50
+ this.starsRef = injectNgtRef();
51
+ this.#count = this.select('count');
52
+ this.#depth = this.select('depth');
53
+ this.#factor = this.select('factor');
54
+ this.#radius = this.select('radius');
55
+ this.#saturation = this.select('saturation');
56
+ this.fade = this.select('fade');
57
+ this.bufferAttributes = computed(() => {
58
+ const positions = [];
59
+ const colors = [];
60
+ const sizes = Array.from({ length: this.#count() }, () => (0.5 + 0.5 * Math.random()) * this.#factor());
61
+ const color = new THREE.Color();
62
+ let r = this.#radius() + this.#depth();
63
+ const increment = this.#depth() / this.#count();
64
+ for (let i = 0; i < this.#count(); i++) {
65
+ r -= increment * Math.random();
66
+ positions.push(...genStar(r).toArray());
67
+ color.setHSL(i / this.#count(), this.#saturation(), 0.9);
68
+ colors.push(color.r, color.g, color.b);
69
+ }
70
+ return {
71
+ positions: new Float32Array(positions),
72
+ colors: new Float32Array(colors),
73
+ sizes: new Float32Array(sizes),
74
+ };
75
+ });
76
+ injectBeforeRender(this.#onBeforeRender.bind(this));
77
+ }
78
+ #onBeforeRender({ clock }) {
79
+ this.material.uniforms['time'].value = clock.getElapsedTime() * this.get('speed');
80
+ }
81
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsStars, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
82
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtsStars, isStandalone: true, selector: "ngts-stars", inputs: { starsRef: "starsRef", radius: "radius", depth: "depth", count: "count", factor: "factor", saturation: "saturation", starsFade: ["fade", "starsFade"], speed: "speed" }, usesInheritance: true, ngImport: i0, template: `
83
+ <ngt-points [ref]="starsRef">
84
+ <ngt-buffer-geometry>
85
+ <ngt-buffer-attribute attach="attributes.position" *args="[bufferAttributes().positions, 3]" />
86
+ <ngt-buffer-attribute attach="attributes.color" *args="[bufferAttributes().colors, 3]" />
87
+ <ngt-buffer-attribute attach="attributes.size" *args="[bufferAttributes().sizes, 1]" />
88
+ </ngt-buffer-geometry>
89
+ <ngt-primitive
90
+ *args="[material]"
91
+ attach="material"
92
+ [blending]="AdditiveBlending"
93
+ [depthWrite]="false"
94
+ [transparent]="true"
95
+ [vertexColors]="true"
96
+ >
97
+ <ngt-value attach="uniforms.fade.value" [rawValue]="fade()" />
98
+ </ngt-primitive>
99
+ </ngt-points>
100
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] }); }
101
+ }
102
+ export { NgtsStars };
103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsStars, decorators: [{
104
+ type: Component,
105
+ args: [{
106
+ selector: 'ngts-stars',
107
+ standalone: true,
108
+ template: `
109
+ <ngt-points [ref]="starsRef">
110
+ <ngt-buffer-geometry>
111
+ <ngt-buffer-attribute attach="attributes.position" *args="[bufferAttributes().positions, 3]" />
112
+ <ngt-buffer-attribute attach="attributes.color" *args="[bufferAttributes().colors, 3]" />
113
+ <ngt-buffer-attribute attach="attributes.size" *args="[bufferAttributes().sizes, 1]" />
114
+ </ngt-buffer-geometry>
115
+ <ngt-primitive
116
+ *args="[material]"
117
+ attach="material"
118
+ [blending]="AdditiveBlending"
119
+ [depthWrite]="false"
120
+ [transparent]="true"
121
+ [vertexColors]="true"
122
+ >
123
+ <ngt-value attach="uniforms.fade.value" [rawValue]="fade()" />
124
+ </ngt-primitive>
125
+ </ngt-points>
126
+ `,
127
+ imports: [NgtArgs],
128
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
129
+ }]
130
+ }], ctorParameters: function () { return []; }, propDecorators: { starsRef: [{
131
+ type: Input
132
+ }], radius: [{
133
+ type: Input
134
+ }], depth: [{
135
+ type: Input
136
+ }], count: [{
137
+ type: Input
138
+ }], factor: [{
139
+ type: Input
140
+ }], saturation: [{
141
+ type: Input
142
+ }], starsFade: [{
143
+ type: Input,
144
+ args: ['fade']
145
+ }], speed: [{
146
+ type: Input
147
+ }] } });
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvc3RhcnMvc3RhcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFBRSxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLE9BQU8sQ0FBQzs7QUFFaEUsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO0FBRXBELE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUU7SUFDMUIsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FDdkMsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQ3hGLENBQUM7QUFDTixDQUFDLENBQUM7QUFZRixNQXlCYSxTQUFVLFNBQVEsY0FBOEI7SUFNekQsSUFBYSxNQUFNLENBQUMsTUFBYztRQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQs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RSxDQUFDLE9BQU8sQ0FBQztvQkFDbEIsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ3BDOzBFQUtZLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJTyxLQUFLO3NCQUFqQixLQUFLO2dCQUlPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBSU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJTyxVQUFVO3NCQUF0QixLQUFLO2dCQUlhLFNBQVM7c0JBQTNCLEtBQUs7dUJBQUMsTUFBTTtnQkFJQSxLQUFLO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGV4dGVuZCwgaW5qZWN0QmVmb3JlUmVuZGVyLCBpbmplY3ROZ3RSZWYsIE5ndEFyZ3MsIE5ndFNpZ25hbFN0b3JlLCB0eXBlIE5ndFJlbmRlclN0YXRlIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBTdGFyRmllbGRNYXRlcmlhbCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IEJ1ZmZlckF0dHJpYnV0ZSwgQnVmZmVyR2VvbWV0cnksIFBvaW50cyB9IGZyb20gJ3RocmVlJztcblxuZXh0ZW5kKHsgUG9pbnRzLCBCdWZmZXJHZW9tZXRyeSwgQnVmZmVyQXR0cmlidXRlIH0pO1xuXG5jb25zdCBnZW5TdGFyID0gKHI6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiBuZXcgVEhSRUUuVmVjdG9yMygpLnNldEZyb21TcGhlcmljYWwoXG4gICAgICAgIG5ldyBUSFJFRS5TcGhlcmljYWwociwgTWF0aC5hY29zKDEgLSBNYXRoLnJhbmRvbSgpICogMiksIE1hdGgucmFuZG9tKCkgKiAyICogTWF0aC5QSSlcbiAgICApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzU3RhcnNTdGF0ZSB7XG4gICAgcmFkaXVzOiBudW1iZXI7XG4gICAgZGVwdGg6IG51bWJlcjtcbiAgICBjb3VudDogbnVtYmVyO1xuICAgIGZhY3RvcjogbnVtYmVyO1xuICAgIHNhdHVyYXRpb246IG51bWJlcjtcbiAgICBmYWRlOiBib29sZWFuO1xuICAgIHNwZWVkOiBudW1iZXI7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0cy1zdGFycycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LXBvaW50cyBbcmVmXT1cInN0YXJzUmVmXCI+XG4gICAgICAgICAgICA8bmd0LWJ1ZmZlci1nZW9tZXRyeT5cbiAgICAgICAgICAgICAgICA8bmd0LWJ1ZmZlci1hdHRyaWJ1dGUgYXR0YWNoPVwiYXR0cmlidXRlcy5wb3NpdGlvblwiICphcmdzPVwiW2J1ZmZlckF0dHJpYnV0ZXMoKS5wb3NpdGlvbnMsIDNdXCIgLz5cbiAgICAgICAgICAgICAgICA8bmd0LWJ1ZmZlci1hdHRyaWJ1dGUgYXR0YWNoPVwiYXR0cmlidXRlcy5jb2xvclwiICphcmdzPVwiW2J1ZmZlckF0dHJpYnV0ZXMoKS5jb2xvcnMsIDNdXCIgLz5cbiAgICAgICAgICAgICAgICA8bmd0LWJ1ZmZlci1hdHRyaWJ1dGUgYXR0YWNoPVwiYXR0cmlidXRlcy5zaXplXCIgKmFyZ3M9XCJbYnVmZmVyQXR0cmlidXRlcygpLnNpemVzLCAxXVwiIC8+XG4gICAgICAgICAgICA8L25ndC1idWZmZXItZ2VvbWV0cnk+XG4gICAgICAgICAgICA8bmd0LXByaW1pdGl2ZVxuICAgICAgICAgICAgICAgICphcmdzPVwiW21hdGVyaWFsXVwiXG4gICAgICAgICAgICAgICAgYXR0YWNoPVwibWF0ZXJpYWxcIlxuICAgICAgICAgICAgICAgIFtibGVuZGluZ109XCJBZGRpdGl2ZUJsZW5kaW5nXCJcbiAgICAgICAgICAgICAgICBbZGVwdGhXcml0ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW3RyYW5zcGFyZW50XT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt2ZXJ0ZXhDb2xvcnNdPVwidHJ1ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5ndC12YWx1ZSBhdHRhY2g9XCJ1bmlmb3Jtcy5mYWRlLnZhbHVlXCIgW3Jhd1ZhbHVlXT1cImZhZGUoKVwiIC8+XG4gICAgICAgICAgICA8L25ndC1wcmltaXRpdmU+XG4gICAgICAgIDwvbmd0LXBvaW50cz5cbiAgICBgLFxuICAgIGltcG9ydHM6IFtOZ3RBcmdzXSxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNTdGFycyBleHRlbmRzIE5ndFNpZ25hbFN0b3JlPE5ndHNTdGFyc1N0YXRlPiB7XG4gICAgcmVhZG9ubHkgQWRkaXRpdmVCbGVuZGluZyA9IFRIUkVFLkFkZGl0aXZlQmxlbmRpbmc7XG4gICAgcmVhZG9ubHkgbWF0ZXJpYWwgPSBuZXcgU3RhckZpZWxkTWF0ZXJpYWwoKTtcblxuICAgIEBJbnB1dCgpIHN0YXJzUmVmID0gaW5qZWN0Tmd0UmVmPFBvaW50cz4oKTtcblxuICAgIEBJbnB1dCgpIHNldCByYWRpdXMocmFkaXVzOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyByYWRpdXMgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGRlcHRoKGRlcHRoOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkZXB0aCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgY291bnQoY291bnQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGNvdW50IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBmYWN0b3IoZmFjdG9yOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBmYWN0b3IgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHNhdHVyYXRpb24oc2F0dXJhdGlvbjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc2F0dXJhdGlvbiB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoJ2ZhZGUnKSBzZXQgc3RhcnNGYWRlKGZhZGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBmYWRlIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBzcGVlZChzcGVlZDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc3BlZWQgfSk7XG4gICAgfVxuXG4gICAgcmVhZG9ubHkgI2NvdW50ID0gdGhpcy5zZWxlY3QoJ2NvdW50Jyk7XG4gICAgcmVhZG9ubHkgI2RlcHRoID0gdGhpcy5zZWxlY3QoJ2RlcHRoJyk7XG4gICAgcmVhZG9ubHkgI2ZhY3RvciA9IHRoaXMuc2VsZWN0KCdmYWN0b3InKTtcbiAgICByZWFkb25seSAjcmFkaXVzID0gdGhpcy5zZWxlY3QoJ3JhZGl1cycpO1xuICAgIHJlYWRvbmx5ICNzYXR1cmF0aW9uID0gdGhpcy5zZWxlY3QoJ3NhdHVyYXRpb24nKTtcblxuICAgIHJlYWRvbmx5IGZhZGUgPSB0aGlzLnNlbGVjdCgnZmFkZScpO1xuICAgIHJlYWRvbmx5IGJ1ZmZlckF0dHJpYnV0ZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uczogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgY29uc3QgY29sb3JzOiBudW1iZXJbXSA9IFtdO1xuICAgICAgICBjb25zdCBzaXplcyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IHRoaXMuI2NvdW50KCkgfSwgKCkgPT4gKDAuNSArIDAuNSAqIE1hdGgucmFuZG9tKCkpICogdGhpcy4jZmFjdG9yKCkpO1xuICAgICAgICBjb25zdCBjb2xvciA9IG5ldyBUSFJFRS5Db2xvcigpO1xuICAgICAgICBsZXQgciA9IHRoaXMuI3JhZGl1cygpICsgdGhpcy4jZGVwdGgoKTtcbiAgICAgICAgY29uc3QgaW5jcmVtZW50ID0gdGhpcy4jZGVwdGgoKSAvIHRoaXMuI2NvdW50KCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy4jY291bnQoKTsgaSsrKSB7XG4gICAgICAgICAgICByIC09IGluY3JlbWVudCAqIE1hdGgucmFuZG9tKCk7XG4gICAgICAgICAgICBwb3NpdGlvbnMucHVzaCguLi5nZW5TdGFyKHIpLnRvQXJyYXkoKSk7XG4gICAgICAgICAgICBjb2xvci5zZXRIU0woaSAvIHRoaXMuI2NvdW50KCksIHRoaXMuI3NhdHVyYXRpb24oKSwgMC45KTtcbiAgICAgICAgICAgIGNvbG9ycy5wdXNoKGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwb3NpdGlvbnM6IG5ldyBGbG9hdDMyQXJyYXkocG9zaXRpb25zKSxcbiAgICAgICAgICAgIGNvbG9yczogbmV3IEZsb2F0MzJBcnJheShjb2xvcnMpLFxuICAgICAgICAgICAgc2l6ZXM6IG5ldyBGbG9hdDMyQXJyYXkoc2l6ZXMpLFxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIHJhZGl1czogMTAwLFxuICAgICAgICAgICAgZGVwdGg6IDUwLFxuICAgICAgICAgICAgY291bnQ6IDUwMDAsXG4gICAgICAgICAgICBzYXR1cmF0aW9uOiAwLFxuICAgICAgICAgICAgZmFjdG9yOiA0LFxuICAgICAgICAgICAgZmFkZTogZmFsc2UsXG4gICAgICAgICAgICBzcGVlZDogMSxcbiAgICAgICAgfSk7XG4gICAgICAgIGluamVjdEJlZm9yZVJlbmRlcih0aGlzLiNvbkJlZm9yZVJlbmRlci5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICAjb25CZWZvcmVSZW5kZXIoeyBjbG9jayB9OiBOZ3RSZW5kZXJTdGF0ZSkge1xuICAgICAgICB0aGlzLm1hdGVyaWFsLnVuaWZvcm1zWyd0aW1lJ10udmFsdWUgPSBjbG9jay5nZXRFbGFwc2VkVGltZSgpICogdGhpcy5nZXQoJ3NwZWVkJyk7XG4gICAgfVxufVxuIl19