angular-three-soba 2.0.0-beta.4 → 2.0.0-beta.40

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 (323) hide show
  1. package/abstractions/billboard/billboard.d.ts +12 -8
  2. package/abstractions/detailed/detailed.d.ts +26 -0
  3. package/abstractions/edges/edges.d.ts +24 -12
  4. package/abstractions/grid/grid.d.ts +42 -51
  5. package/abstractions/index.d.ts +1 -7
  6. package/abstractions/text/text.d.ts +10 -4
  7. package/abstractions/text-3d/text-3d.d.ts +51 -41
  8. package/cameras/camera/camera-content.d.ts +1 -1
  9. package/cameras/camera/camera.d.ts +16 -13
  10. package/cameras/cube-camera/cube-camera.d.ts +49 -23
  11. package/cameras/index.d.ts +0 -1
  12. package/cameras/orthographic-camera/orthographic-camera.d.ts +29 -18
  13. package/cameras/perspective-camera/perspective-camera.d.ts +10 -1
  14. package/controls/orbit-controls/orbit-controls.d.ts +34 -15
  15. package/esm2022/abstractions/billboard/billboard.mjs +36 -33
  16. package/esm2022/abstractions/detailed/detailed.mjs +64 -0
  17. package/esm2022/abstractions/edges/edges.mjs +58 -63
  18. package/esm2022/abstractions/grid/grid.mjs +140 -110
  19. package/esm2022/abstractions/index.mjs +2 -8
  20. package/esm2022/abstractions/text/text.mjs +123 -122
  21. package/esm2022/abstractions/text-3d/text-3d.mjs +120 -115
  22. package/esm2022/cameras/camera/camera-content.mjs +6 -6
  23. package/esm2022/cameras/camera/camera.mjs +48 -42
  24. package/esm2022/cameras/cube-camera/cube-camera.mjs +120 -100
  25. package/esm2022/cameras/index.mjs +1 -2
  26. package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +78 -75
  27. package/esm2022/cameras/perspective-camera/perspective-camera.mjs +25 -26
  28. package/esm2022/controls/orbit-controls/orbit-controls.mjs +109 -85
  29. package/esm2022/gizmos/angular-three-soba-gizmos.mjs +5 -0
  30. package/esm2022/gizmos/gizmo-helper/gizmo-helper.mjs +198 -0
  31. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/constants.mjs +31 -0
  32. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +93 -0
  33. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +151 -0
  34. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.mjs +66 -0
  35. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +71 -0
  36. package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +195 -0
  37. package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +272 -0
  38. package/esm2022/gizmos/index.mjs +4 -0
  39. package/esm2022/loaders/gltf-loader/gltf-loader.mjs +14 -9
  40. package/esm2022/loaders/loader/loader.mjs +92 -87
  41. package/esm2022/loaders/progress/progress.mjs +31 -30
  42. package/esm2022/loaders/texture-loader/texture-loader.mjs +20 -15
  43. package/esm2022/materials/index.mjs +2 -1
  44. package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +60 -51
  45. package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +239 -255
  46. package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +99 -97
  47. package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +164 -144
  48. package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +44 -42
  49. package/esm2022/materials/point-material/point-material.mjs +50 -0
  50. package/esm2022/misc/animations/animations.mjs +28 -23
  51. package/esm2022/misc/bake-shadows/bake-shadows.mjs +13 -13
  52. package/esm2022/misc/caustics/caustics.mjs +387 -0
  53. package/esm2022/misc/decal/decal.mjs +187 -0
  54. package/esm2022/misc/depth-buffer/depth-buffer.mjs +41 -37
  55. package/esm2022/misc/example/example.mjs +161 -0
  56. package/esm2022/misc/fbo/fbo.mjs +42 -36
  57. package/esm2022/misc/html/html-wrapper.mjs +478 -0
  58. package/esm2022/misc/html/html.mjs +305 -0
  59. package/esm2022/misc/index.mjs +10 -1
  60. package/esm2022/misc/sampler/sampler.mjs +132 -0
  61. package/esm2022/misc/shadow/shadow.mjs +111 -0
  62. package/esm2022/misc/stats-gl/stats-gl.mjs +61 -0
  63. package/esm2022/misc/trail/trail.mjs +204 -0
  64. package/esm2022/misc/trail-texture/inject-trail-texture.mjs +17 -0
  65. package/esm2022/misc/trail-texture/trail-texture.mjs +106 -0
  66. package/esm2022/modifiers/angular-three-soba-modifiers.mjs +5 -0
  67. package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +64 -0
  68. package/esm2022/modifiers/index.mjs +2 -0
  69. package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +44 -0
  70. package/esm2022/performances/adaptive-events/adaptive-events.mjs +27 -0
  71. package/esm2022/performances/angular-three-soba-performances.mjs +5 -0
  72. package/esm2022/performances/index.mjs +8 -0
  73. package/esm2022/performances/instances/instances.mjs +221 -0
  74. package/esm2022/performances/instances/position-mesh.mjs +52 -0
  75. package/esm2022/performances/points/points-input.mjs +64 -0
  76. package/esm2022/performances/points/points.mjs +327 -0
  77. package/esm2022/performances/points/position-point.mjs +54 -0
  78. package/esm2022/performances/segments/segment-object.mjs +9 -0
  79. package/esm2022/performances/segments/segments.mjs +183 -0
  80. package/esm2022/shaders/blur-pass/blur-pass.mjs +2 -2
  81. package/esm2022/shaders/caustics/caustics-material.mjs +130 -0
  82. package/esm2022/shaders/caustics/caustics-projection-material.mjs +32 -0
  83. package/esm2022/shaders/convolution-material/convolution-material.mjs +3 -2
  84. package/esm2022/shaders/discard-material/discard-material.mjs +1 -1
  85. package/esm2022/shaders/grid-material/grid-material.mjs +30 -14
  86. package/esm2022/shaders/index.mjs +5 -3
  87. package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +42 -41
  88. package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +2 -2
  89. package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +3 -2
  90. package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +7 -4
  91. package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +1 -1
  92. package/esm2022/shaders/shader-material/shader-material.mjs +3 -5
  93. package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +18 -25
  94. package/esm2022/shaders/sparkles-material/sparkles-material.mjs +32 -46
  95. package/esm2022/shaders/spot-light-material/spot-light-material.mjs +8 -7
  96. package/esm2022/shaders/star-field-material/star-field-material.mjs +3 -2
  97. package/esm2022/shaders/wireframe-material/wireframe-material.mjs +247 -0
  98. package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +161 -176
  99. package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +8 -8
  100. package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +129 -129
  101. package/esm2022/staging/backdrop/backdrop.mjs +77 -0
  102. package/esm2022/staging/bb-anchor/bb-anchor.mjs +69 -0
  103. package/esm2022/staging/bounds/bounds.mjs +145 -143
  104. package/esm2022/staging/camera-shake/camera-shake.mjs +86 -80
  105. package/esm2022/staging/center/center.mjs +129 -112
  106. package/esm2022/staging/cloud/cloud.mjs +118 -124
  107. package/esm2022/staging/contact-shadows/contact-shadows.mjs +131 -136
  108. package/esm2022/staging/environment/assets.mjs +12 -12
  109. package/esm2022/staging/environment/environment-cube.mjs +28 -30
  110. package/esm2022/staging/environment/environment-ground.mjs +17 -19
  111. package/esm2022/staging/environment/environment-input.mjs +98 -85
  112. package/esm2022/staging/environment/environment-map.mjs +33 -33
  113. package/esm2022/staging/environment/environment-portal.mjs +75 -97
  114. package/esm2022/staging/environment/environment.mjs +34 -51
  115. package/esm2022/staging/environment/utils.mjs +40 -17
  116. package/esm2022/staging/float/float.mjs +70 -58
  117. package/esm2022/staging/index.mjs +7 -3
  118. package/esm2022/staging/matcap-texture/matcap-texture.mjs +64 -0
  119. package/esm2022/staging/normal-texture/normal-texture.mjs +53 -0
  120. package/esm2022/staging/sky/sky.mjs +85 -80
  121. package/esm2022/staging/sparkles/sparkles.mjs +108 -105
  122. package/esm2022/staging/spot-light/shadow-mesh-input.mjs +63 -0
  123. package/esm2022/staging/spot-light/shadow-mesh.mjs +267 -0
  124. package/esm2022/staging/spot-light/spot-light-input.mjs +67 -58
  125. package/esm2022/staging/spot-light/spot-light.mjs +51 -63
  126. package/esm2022/staging/spot-light/volumetric-mesh.mjs +67 -70
  127. package/esm2022/staging/stage/stage.mjs +305 -290
  128. package/esm2022/staging/stars/stars.mjs +101 -102
  129. package/esm2022/staging/wireframe/wireframe-input.mjs +191 -0
  130. package/esm2022/staging/wireframe/wireframe.mjs +228 -0
  131. package/esm2022/utils/angular-three-soba-utils.mjs +5 -0
  132. package/esm2022/utils/constants.mjs +3 -0
  133. package/esm2022/utils/content/content.mjs +15 -0
  134. package/esm2022/utils/index.mjs +3 -0
  135. package/fesm2022/angular-three-soba-abstractions.mjs +504 -2079
  136. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  137. package/fesm2022/angular-three-soba-cameras.mjs +293 -260
  138. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  139. package/fesm2022/angular-three-soba-controls.mjs +108 -83
  140. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  141. package/fesm2022/angular-three-soba-gizmos.mjs +1045 -0
  142. package/fesm2022/angular-three-soba-gizmos.mjs.map +1 -0
  143. package/fesm2022/angular-three-soba-loaders.mjs +148 -132
  144. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  145. package/fesm2022/angular-three-soba-materials.mjs +656 -588
  146. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  147. package/fesm2022/angular-three-soba-misc.mjs +2202 -99
  148. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  149. package/fesm2022/angular-three-soba-modifiers.mjs +71 -0
  150. package/fesm2022/angular-three-soba-modifiers.mjs.map +1 -0
  151. package/fesm2022/angular-three-soba-performances.mjs +957 -0
  152. package/fesm2022/angular-three-soba-performances.mjs.map +1 -0
  153. package/fesm2022/angular-three-soba-shaders.mjs +508 -269
  154. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  155. package/fesm2022/angular-three-soba-staging.mjs +2910 -2573
  156. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  157. package/fesm2022/angular-three-soba-utils.mjs +25 -0
  158. package/fesm2022/angular-three-soba-utils.mjs.map +1 -0
  159. package/gizmos/README.md +3 -0
  160. package/gizmos/gizmo-helper/gizmo-helper.d.ts +73 -0
  161. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +22 -0
  162. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +29 -0
  163. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.d.ts +33 -0
  164. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +10 -0
  165. package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +40 -0
  166. package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +30 -0
  167. package/gizmos/index.d.ts +3 -0
  168. package/loaders/gltf-loader/gltf-loader.d.ts +15 -4
  169. package/loaders/loader/loader.d.ts +19 -17
  170. package/loaders/progress/progress.d.ts +1 -1
  171. package/loaders/texture-loader/texture-loader.d.ts +8 -3
  172. package/materials/index.d.ts +1 -0
  173. package/materials/mesh-distort-material/mesh-distort-material.d.ts +25 -15
  174. package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +74 -56
  175. package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +33 -21
  176. package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +55 -39
  177. package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +19 -10
  178. package/materials/point-material/point-material.d.ts +24 -0
  179. package/metadata.json +1 -0
  180. package/misc/animations/animations.d.ts +6 -4
  181. package/misc/caustics/caustics.d.ts +87 -0
  182. package/misc/decal/decal.d.ts +49 -0
  183. package/misc/depth-buffer/depth-buffer.d.ts +2 -2
  184. package/misc/example/example.d.ts +85 -0
  185. package/misc/fbo/fbo.d.ts +2 -2
  186. package/misc/html/html-wrapper.d.ts +559 -0
  187. package/misc/html/html.d.ts +218 -0
  188. package/misc/index.d.ts +9 -0
  189. package/misc/sampler/sampler.d.ts +67 -0
  190. package/misc/shadow/shadow.d.ts +37 -0
  191. package/misc/stats-gl/stats-gl.d.ts +24 -0
  192. package/misc/trail/trail.d.ts +57 -0
  193. package/misc/trail-texture/inject-trail-texture.d.ts +9 -0
  194. package/misc/trail-texture/trail-texture.d.ts +50 -0
  195. package/modifiers/README.md +3 -0
  196. package/modifiers/curve-modifier/curve-modifier.d.ts +23 -0
  197. package/modifiers/index.d.ts +1 -0
  198. package/package.json +36 -18
  199. package/performances/README.md +3 -0
  200. package/performances/adaptive-dpr/adaptive-dpr.d.ts +14 -0
  201. package/{performance/adaptive → performances/adaptive-events}/adaptive-events.d.ts +3 -0
  202. package/performances/index.d.ts +7 -0
  203. package/performances/instances/instances.d.ts +83 -0
  204. package/{performance → performances}/instances/position-mesh.d.ts +1 -1
  205. package/performances/points/points-input.d.ts +32 -0
  206. package/performances/points/points.d.ts +96 -0
  207. package/performances/points/position-point.d.ts +11 -0
  208. package/performances/segments/segment-object.d.ts +7 -0
  209. package/performances/segments/segments.d.ts +128 -0
  210. package/shaders/grid-material/grid-material.d.ts +33 -0
  211. package/shaders/index.d.ts +4 -2
  212. package/shaders/mesh-distort-material/mesh-distort-material.d.ts +173 -6
  213. package/shaders/mesh-transmission-material/mesh-transmission-material.d.ts +1 -1
  214. package/shaders/shader-material/shader-material.d.ts +2 -2
  215. package/shaders/soft-shadow-material/soft-shadow-material.d.ts +10 -1
  216. package/shaders/sparkles-material/sparkles-material.d.ts +13 -0
  217. package/shaders/spot-light-material/spot-light-material.d.ts +11 -2
  218. package/shaders/star-field-material/star-field-material.d.ts +9 -0
  219. package/shaders/wireframe-material/wireframe-material.d.ts +58 -0
  220. package/staging/accumulative-shadows/accumulative-shadows.d.ts +93 -39
  221. package/staging/accumulative-shadows/randomized-lights.d.ts +41 -28
  222. package/staging/backdrop/backdrop.d.ts +30 -0
  223. package/staging/bb-anchor/bb-anchor.d.ts +27 -0
  224. package/staging/bounds/bounds.d.ts +105 -25
  225. package/staging/camera-shake/camera-shake.d.ts +30 -19
  226. package/staging/center/center.d.ts +43 -35
  227. package/staging/cloud/cloud.d.ts +27 -24
  228. package/staging/contact-shadows/contact-shadows.d.ts +43 -30
  229. package/staging/environment/assets.d.ts +9 -9
  230. package/staging/environment/environment-cube.d.ts +9 -5
  231. package/staging/environment/environment-ground.d.ts +7 -7
  232. package/staging/environment/environment-input.d.ts +38 -38
  233. package/staging/environment/environment-map.d.ts +10 -5
  234. package/staging/environment/environment-portal.d.ts +10 -5
  235. package/staging/environment/environment.d.ts +0 -4
  236. package/staging/environment/utils.d.ts +2 -2
  237. package/staging/float/float.d.ts +15 -11
  238. package/staging/index.d.ts +6 -2
  239. package/staging/matcap-texture/matcap-texture.d.ts +13 -0
  240. package/staging/normal-texture/normal-texture.d.ts +16 -0
  241. package/staging/sky/sky.d.ts +28 -21
  242. package/staging/sparkles/sparkles.d.ts +36 -22
  243. package/staging/spot-light/shadow-mesh-input.d.ts +29 -0
  244. package/staging/spot-light/shadow-mesh.d.ts +37 -0
  245. package/staging/spot-light/spot-light-input.d.ts +25 -25
  246. package/staging/spot-light/spot-light.d.ts +35 -15
  247. package/staging/spot-light/volumetric-mesh.d.ts +15 -9
  248. package/staging/stage/stage.d.ts +89 -65
  249. package/staging/stars/stars.d.ts +28 -17
  250. package/staging/wireframe/wireframe-input.d.ts +65 -0
  251. package/staging/wireframe/wireframe.d.ts +28 -0
  252. package/utils/README.md +3 -0
  253. package/utils/constants.d.ts +1 -0
  254. package/utils/content/content.d.ts +8 -0
  255. package/utils/index.d.ts +2 -0
  256. package/web-types.json +1 -0
  257. package/abstractions/catmull-rom-line/catmull-rom-line.d.ts +0 -25
  258. package/abstractions/cubic-bezier-line/cubic-bezier-line.d.ts +0 -25
  259. package/abstractions/gizmo-helper/gizmo-helper.d.ts +0 -34
  260. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +0 -22
  261. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +0 -30
  262. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +0 -32
  263. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +0 -14
  264. package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +0 -47
  265. package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +0 -40
  266. package/abstractions/line/line-input.d.ts +0 -42
  267. package/abstractions/line/line.d.ts +0 -35
  268. package/abstractions/quadratic-bezier-line/quadratic-bezier-line.d.ts +0 -23
  269. package/esm2022/abstractions/catmull-rom-line/catmull-rom-line.mjs +0 -131
  270. package/esm2022/abstractions/cubic-bezier-line/cubic-bezier-line.mjs +0 -113
  271. package/esm2022/abstractions/gizmo-helper/gizmo-helper.mjs +0 -210
  272. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/constants.mjs +0 -31
  273. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -95
  274. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -155
  275. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +0 -62
  276. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +0 -80
  277. package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -206
  278. package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +0 -273
  279. package/esm2022/abstractions/line/line-input.mjs +0 -113
  280. package/esm2022/abstractions/line/line.mjs +0 -165
  281. package/esm2022/abstractions/quadratic-bezier-line/quadratic-bezier-line.mjs +0 -128
  282. package/esm2022/performance/adaptive/adaptive-dpr.mjs +0 -46
  283. package/esm2022/performance/adaptive/adaptive-events.mjs +0 -31
  284. package/esm2022/performance/angular-three-soba-performance.mjs +0 -5
  285. package/esm2022/performance/detailed/detailed.mjs +0 -61
  286. package/esm2022/performance/index.mjs +0 -7
  287. package/esm2022/performance/instances/instance.mjs +0 -48
  288. package/esm2022/performance/instances/instances.mjs +0 -189
  289. package/esm2022/performance/instances/position-mesh.mjs +0 -52
  290. package/esm2022/performance/stats/stats.mjs +0 -79
  291. package/esm2022/shaders/caustics-material/caustics-material.mjs +0 -128
  292. package/esm2022/shaders/caustics-material/caustics-projection-material.mjs +0 -33
  293. package/esm2022/staging/caustics/caustisc.mjs +0 -384
  294. package/esm2022/staging/spot-light/spot-light-shadow-mesh-input.mjs +0 -57
  295. package/esm2022/staging/spot-light/spot-light-shadow-mesh.mjs +0 -256
  296. package/fesm2022/angular-three-soba-performance.mjs +0 -487
  297. package/fesm2022/angular-three-soba-performance.mjs.map +0 -1
  298. package/performance/README.md +0 -3
  299. package/performance/adaptive/adaptive-dpr.d.ts +0 -8
  300. package/performance/detailed/detailed.d.ts +0 -20
  301. package/performance/index.d.ts +0 -6
  302. package/performance/instances/instance.d.ts +0 -9
  303. package/performance/instances/instances.d.ts +0 -35
  304. package/performance/stats/stats.d.ts +0 -18
  305. package/plugin/generators.json +0 -19
  306. package/plugin/libs/plugin/README.md +0 -11
  307. package/plugin/package.json +0 -9
  308. package/plugin/src/generators/init/compat.d.ts +0 -2
  309. package/plugin/src/generators/init/compat.js +0 -6
  310. package/plugin/src/generators/init/compat.js.map +0 -1
  311. package/plugin/src/generators/init/init.d.ts +0 -7
  312. package/plugin/src/generators/init/init.js +0 -28
  313. package/plugin/src/generators/init/init.js.map +0 -1
  314. package/plugin/src/generators/init/schema.json +0 -6
  315. package/plugin/src/index.d.ts +0 -1
  316. package/plugin/src/index.js +0 -6
  317. package/plugin/src/index.js.map +0 -1
  318. package/staging/caustics/caustisc.d.ts +0 -70
  319. package/staging/spot-light/spot-light-shadow-mesh-input.d.ts +0 -29
  320. package/staging/spot-light/spot-light-shadow-mesh.d.ts +0 -38
  321. /package/{abstractions → gizmos}/gizmo-helper/gizmo-viewcube/constants.d.ts +0 -0
  322. /package/shaders/{caustics-material → caustics}/caustics-material.d.ts +0 -0
  323. /package/shaders/{caustics-material → caustics}/caustics-projection-material.d.ts +0 -0
@@ -0,0 +1,305 @@
1
+ import { NgIf } from '@angular/common';
2
+ import { CUSTOM_ELEMENTS_SCHEMA, Component, ContentChild, EventEmitter, Input, Output, TemplateRef, computed, forwardRef, } from '@angular/core';
3
+ import { extend, injectNgtRef, is, signalStore } from 'angular-three';
4
+ import { NgtsSobaContent } from 'angular-three-soba/utils';
5
+ import { createInjectionToken } from 'ngxtension/create-injection-token';
6
+ import * as THREE from 'three';
7
+ import { Group, Mesh, PlaneGeometry, ShaderMaterial } from 'three';
8
+ import { NgtsHtmlWrapper, defaultCalculatePosition } from './html-wrapper';
9
+ import * as i0 from "@angular/core";
10
+ extend({ Group, PlaneGeometry, Mesh, ShaderMaterial });
11
+ export const [injectNgtsHtmlInputs, provideNgtsHtmlInputs] = createInjectionToken((html) => ({ state: html.inputs.state, ...html.state }), { isRoot: false, deps: [forwardRef(() => NgtsHtml)] });
12
+ export class NgtsHtml {
13
+ constructor() {
14
+ this.DoubleSide = THREE.DoubleSide;
15
+ this.inputs = signalStore({
16
+ as: 'div',
17
+ prepend: false,
18
+ transform: false,
19
+ fullscreen: false,
20
+ center: false,
21
+ sprite: false,
22
+ zIndexRange: [16777271, 0],
23
+ eps: 0.001,
24
+ scale: 1,
25
+ calculatePosition: defaultCalculatePosition,
26
+ pointerEvents: 'auto',
27
+ occlude: false,
28
+ castShadow: false,
29
+ receiveShadow: false,
30
+ });
31
+ this.groupRef = injectNgtRef();
32
+ this.occluded = new EventEmitter();
33
+ this.occlusionMeshRef = injectNgtRef();
34
+ this.transform = this.inputs.select('transform');
35
+ this.isRayCastOcclusion = computed(() => {
36
+ const occlude = this.occlude();
37
+ return ((occlude && occlude !== 'blending') || (Array.isArray(occlude) && !!occlude.length && is.ref(occlude[0])));
38
+ });
39
+ this.occlude = this.inputs.select('occlude');
40
+ this.castShadow = this.inputs.select('castShadow');
41
+ this.receiveShadow = this.inputs.select('receiveShadow');
42
+ this.geometry = this.inputs.select('geometry');
43
+ this.material = this.inputs.select('material');
44
+ this.scale = this.inputs.select('scale');
45
+ this.shaders = computed(() => {
46
+ const transform = this.transform();
47
+ return {
48
+ vertexShader: !transform
49
+ ? /* glsl */ `
50
+ /*
51
+ This shader is from the THREE's SpriteMaterial.
52
+ We need to turn the backing plane into a Sprite
53
+ (make it always face the camera) if "transfrom"
54
+ is false.
55
+ */
56
+ #include <common>
57
+
58
+ void main() {
59
+ vec2 center = vec2(0., 1.);
60
+ float rotation = 0.0;
61
+
62
+ // This is somewhat arbitrary, but it seems to work well
63
+ // Need to figure out how to derive this dynamically if it even matters
64
+ float size = 0.03;
65
+
66
+ vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );
67
+ vec2 scale;
68
+ scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );
69
+ scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );
70
+
71
+ bool isPerspective = isPerspectiveMatrix( projectionMatrix );
72
+ if ( isPerspective ) scale *= - mvPosition.z;
73
+
74
+ vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale * size;
75
+ vec2 rotatedPosition;
76
+ rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;
77
+ rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;
78
+ mvPosition.xy += rotatedPosition;
79
+
80
+ gl_Position = projectionMatrix * mvPosition;
81
+ }
82
+ `
83
+ : undefined,
84
+ fragmentShader: /* glsl */ `
85
+ void main() {
86
+ gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
87
+ }
88
+ `,
89
+ };
90
+ });
91
+ this.state = {
92
+ zIndexRange: this.inputs.select('zIndexRange'),
93
+ prepend: this.inputs.select('prepend'),
94
+ transform: this.transform,
95
+ center: this.inputs.select('center'),
96
+ fullscreen: this.inputs.select('fullscreen'),
97
+ calculatePosition: this.inputs.select('calculatePosition'),
98
+ wrapperClass: this.inputs.select('wrapperClass'),
99
+ renderedDivClass: this.inputs.select('renderedDivClass'),
100
+ style: this.inputs.select('style'),
101
+ pointerEvents: this.inputs.select('pointerEvents'),
102
+ eps: this.inputs.select('eps'),
103
+ distanceFactor: this.inputs.select('distanceFactor'),
104
+ sprite: this.inputs.select('sprite'),
105
+ as: this.inputs.select('as'),
106
+ portal: this.inputs.select('portal'),
107
+ content: this.inputs.select('content'),
108
+ occlude: this.occlude,
109
+ isRayCastOcclusion: this.isRayCastOcclusion,
110
+ occlusionMeshRef: this.occlusionMeshRef,
111
+ occluded: this.occluded,
112
+ geometry: this.geometry,
113
+ scale: this.scale,
114
+ groupRef: this.groupRef,
115
+ };
116
+ }
117
+ set content(content) {
118
+ this.inputs.set({ content });
119
+ }
120
+ set _as(as) {
121
+ this.inputs.set({ as });
122
+ }
123
+ set _zIndexRange(zIndexRange) {
124
+ this.inputs.set({ zIndexRange });
125
+ }
126
+ set _portal(portal) {
127
+ this.inputs.set({ portal });
128
+ }
129
+ set _occlude(occlude) {
130
+ this.inputs.set({ occlude });
131
+ }
132
+ set _castShadow(castShadow) {
133
+ this.inputs.set({ castShadow });
134
+ }
135
+ set _receiveShadow(receiveShadow) {
136
+ this.inputs.set({ receiveShadow });
137
+ }
138
+ set _material(material) {
139
+ this.inputs.set({ material });
140
+ }
141
+ set _geometry(geometry) {
142
+ this.inputs.set({ geometry });
143
+ }
144
+ set _scale(scale) {
145
+ this.inputs.set({ scale });
146
+ }
147
+ set _prepend(prepend) {
148
+ this.inputs.set({ prepend });
149
+ }
150
+ set _transform(transform) {
151
+ this.inputs.set({ transform });
152
+ }
153
+ set _center(center) {
154
+ this.inputs.set({ center });
155
+ }
156
+ set _sprite(sprite) {
157
+ this.inputs.set({ sprite });
158
+ }
159
+ set _fullscreen(fullscreen) {
160
+ this.inputs.set({ fullscreen });
161
+ }
162
+ set _eps(eps) {
163
+ this.inputs.set({ eps });
164
+ }
165
+ set _distanceFactor(distanceFactor) {
166
+ this.inputs.set({ distanceFactor });
167
+ }
168
+ set _wrapperClass(wrapperClass) {
169
+ this.inputs.set({ wrapperClass });
170
+ }
171
+ set _renderedDivClass(renderedDivClass) {
172
+ this.inputs.set({ renderedDivClass });
173
+ }
174
+ set _style(style) {
175
+ this.inputs.set({ style });
176
+ }
177
+ set _pointerEvents(pointerEvents) {
178
+ this.inputs.set({ pointerEvents });
179
+ }
180
+ set _calculatePosition(calculatePosition) {
181
+ this.inputs.set({ calculatePosition });
182
+ }
183
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: NgtsHtml, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
184
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.3", type: NgtsHtml, isStandalone: true, selector: "ngts-html", inputs: { groupRef: "groupRef", _as: ["as", "_as"], _zIndexRange: ["zIndexRange", "_zIndexRange"], _portal: ["portal", "_portal"], _occlude: ["occlude", "_occlude"], _castShadow: ["castShadow", "_castShadow"], _receiveShadow: ["receiveShadow", "_receiveShadow"], _material: ["material", "_material"], _geometry: ["geometry", "_geometry"], _scale: ["scale", "_scale"], _prepend: ["prepend", "_prepend"], _transform: ["transform", "_transform"], _center: ["center", "_center"], _sprite: ["sprite", "_sprite"], _fullscreen: ["fullscreen", "_fullscreen"], _eps: ["eps", "_eps"], _distanceFactor: ["distanceFactor", "_distanceFactor"], _wrapperClass: ["wrapperClass", "_wrapperClass"], _renderedDivClass: ["renderedDivClass", "_renderedDivClass"], _style: ["style", "_style"], _pointerEvents: ["pointerEvents", "_pointerEvents"], _calculatePosition: ["calculatePosition", "_calculatePosition"] }, outputs: { occluded: "occluded" }, providers: [provideNgtsHtmlInputs()], queries: [{ propertyName: "content", first: true, predicate: NgtsSobaContent, descendants: true, read: TemplateRef }], ngImport: i0, template: `
185
+ <ngt-group ngtCompound [ref]="groupRef" [scale]="scale()">
186
+ <ngt-mesh
187
+ *ngIf="occlude() && !isRayCastOcclusion()"
188
+ [castShadow]="castShadow()"
189
+ [receiveShadow]="receiveShadow()"
190
+ [ref]="occlusionMeshRef"
191
+ >
192
+ <ngt-plane-geometry *ngIf="geometry()" />
193
+ <ngt-shader-material
194
+ *ngIf="material()"
195
+ [side]="DoubleSide"
196
+ [vertexShader]="shaders().vertexShader"
197
+ [fragmentShader]="shaders().fragmentShader"
198
+ />
199
+ </ngt-mesh>
200
+ </ngt-group>
201
+
202
+ <ngts-html-wrapper />
203
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NgtsHtmlWrapper, selector: "ngts-html-wrapper" }] }); }
204
+ }
205
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: NgtsHtml, decorators: [{
206
+ type: Component,
207
+ args: [{
208
+ selector: 'ngts-html',
209
+ standalone: true,
210
+ template: `
211
+ <ngt-group ngtCompound [ref]="groupRef" [scale]="scale()">
212
+ <ngt-mesh
213
+ *ngIf="occlude() && !isRayCastOcclusion()"
214
+ [castShadow]="castShadow()"
215
+ [receiveShadow]="receiveShadow()"
216
+ [ref]="occlusionMeshRef"
217
+ >
218
+ <ngt-plane-geometry *ngIf="geometry()" />
219
+ <ngt-shader-material
220
+ *ngIf="material()"
221
+ [side]="DoubleSide"
222
+ [vertexShader]="shaders().vertexShader"
223
+ [fragmentShader]="shaders().fragmentShader"
224
+ />
225
+ </ngt-mesh>
226
+ </ngt-group>
227
+
228
+ <ngts-html-wrapper />
229
+ `,
230
+ imports: [NgIf, NgtsHtmlWrapper],
231
+ providers: [provideNgtsHtmlInputs()],
232
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
233
+ }]
234
+ }], propDecorators: { content: [{
235
+ type: ContentChild,
236
+ args: [NgtsSobaContent, { read: TemplateRef }]
237
+ }], groupRef: [{
238
+ type: Input
239
+ }], _as: [{
240
+ type: Input,
241
+ args: [{ alias: 'as' }]
242
+ }], _zIndexRange: [{
243
+ type: Input,
244
+ args: [{ alias: 'zIndexRange' }]
245
+ }], _portal: [{
246
+ type: Input,
247
+ args: [{ alias: 'portal' }]
248
+ }], _occlude: [{
249
+ type: Input,
250
+ args: [{ alias: 'occlude' }]
251
+ }], _castShadow: [{
252
+ type: Input,
253
+ args: [{ alias: 'castShadow' }]
254
+ }], _receiveShadow: [{
255
+ type: Input,
256
+ args: [{ alias: 'receiveShadow' }]
257
+ }], _material: [{
258
+ type: Input,
259
+ args: [{ alias: 'material' }]
260
+ }], _geometry: [{
261
+ type: Input,
262
+ args: [{ alias: 'geometry' }]
263
+ }], _scale: [{
264
+ type: Input,
265
+ args: [{ alias: 'scale' }]
266
+ }], _prepend: [{
267
+ type: Input,
268
+ args: [{ alias: 'prepend' }]
269
+ }], _transform: [{
270
+ type: Input,
271
+ args: [{ alias: 'transform' }]
272
+ }], _center: [{
273
+ type: Input,
274
+ args: [{ alias: 'center' }]
275
+ }], _sprite: [{
276
+ type: Input,
277
+ args: [{ alias: 'sprite' }]
278
+ }], _fullscreen: [{
279
+ type: Input,
280
+ args: [{ alias: 'fullscreen' }]
281
+ }], _eps: [{
282
+ type: Input,
283
+ args: [{ alias: 'eps' }]
284
+ }], _distanceFactor: [{
285
+ type: Input,
286
+ args: [{ alias: 'distanceFactor' }]
287
+ }], _wrapperClass: [{
288
+ type: Input,
289
+ args: [{ alias: 'wrapperClass' }]
290
+ }], _renderedDivClass: [{
291
+ type: Input,
292
+ args: [{ alias: 'renderedDivClass' }]
293
+ }], _style: [{
294
+ type: Input,
295
+ args: [{ alias: 'style' }]
296
+ }], _pointerEvents: [{
297
+ type: Input,
298
+ args: [{ alias: 'pointerEvents' }]
299
+ }], _calculatePosition: [{
300
+ type: Input,
301
+ args: [{ alias: 'calculatePosition' }]
302
+ }], occluded: [{
303
+ type: Output
304
+ }] } });
305
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9taXNjL3NyYy9odG1sL2h0bWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFDTixzQkFBc0IsRUFDdEIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixXQUFXLEVBQ1gsUUFBUSxFQUNSLFVBQVUsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUErQyxNQUFNLGVBQWUsQ0FBQztBQUNuSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekUsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRTNFLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7QUF3Q3ZELE1BQU0sQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUUscUJBQXFCLENBQUMsR0FBRyxvQkFBb0IsQ0FDaEYsQ0FBQyxJQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFDakUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElB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Szt1QkFBQyxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRTtnQkFJTCxNQUFNO3NCQUFwQyxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFJYyxjQUFjO3NCQUFwRCxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRTtnQkFJVSxrQkFBa0I7c0JBQTVELEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUU7Z0JBTTNCLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdENvbXBvbmVudCxcblx0Q29udGVudENoaWxkLFxuXHRFdmVudEVtaXR0ZXIsXG5cdElucHV0LFxuXHRPdXRwdXQsXG5cdFRlbXBsYXRlUmVmLFxuXHRjb21wdXRlZCxcblx0Zm9yd2FyZFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBleHRlbmQsIGluamVjdE5ndFJlZiwgaXMsIHNpZ25hbFN0b3JlLCB0eXBlIE5ndEdyb3VwLCB0eXBlIE5ndFJlZiwgdHlwZSBOZ3RWZWN0b3IzIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBOZ3RzU29iYUNvbnRlbnQgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvdXRpbHMnO1xuaW1wb3J0IHsgY3JlYXRlSW5qZWN0aW9uVG9rZW4gfSBmcm9tICduZ3h0ZW5zaW9uL2NyZWF0ZS1pbmplY3Rpb24tdG9rZW4nO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgR3JvdXAsIE1lc2gsIFBsYW5lR2VvbWV0cnksIFNoYWRlck1hdGVyaWFsIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0c0h0bWxXcmFwcGVyLCBkZWZhdWx0Q2FsY3VsYXRlUG9zaXRpb24gfSBmcm9tICcuL2h0bWwtd3JhcHBlcic7XG5cbmV4dGVuZCh7IEdyb3VwLCBQbGFuZUdlb21ldHJ5LCBNZXNoLCBTaGFkZXJNYXRlcmlhbCB9KTtcblxudHlwZSBQb2ludGVyRXZlbnRzUHJvcGVydGllcyA9XG5cdHwgJ2F1dG8nXG5cdHwgJ25vbmUnXG5cdHwgJ3Zpc2libGVQYWludGVkJ1xuXHR8ICd2aXNpYmxlRmlsbCdcblx0fCAndmlzaWJsZVN0cm9rZSdcblx0fCAndmlzaWJsZSdcblx0fCAncGFpbnRlZCdcblx0fCAnZmlsbCdcblx0fCAnc3Ryb2tlJ1xuXHR8ICdhbGwnXG5cdHwgJ2luaGVyaXQnO1xuXG5leHBvcnQgdHlwZSBOZ3RzSHRtbFN0YXRlID0ge1xuXHRhczoga2V5b2YgSFRNTEVsZW1lbnRUYWdOYW1lTWFwO1xuXHRwcmVwZW5kOiBib29sZWFuO1xuXHR0cmFuc2Zvcm06IGJvb2xlYW47XG5cdHpJbmRleFJhbmdlOiBBcnJheTxudW1iZXI+O1xuXHRjYWxjdWxhdGVQb3NpdGlvbjogdHlwZW9mIGRlZmF1bHRDYWxjdWxhdGVQb3NpdGlvbjtcblx0ZnVsbHNjcmVlbjogYm9vbGVhbjtcblx0Y2VudGVyOiBib29sZWFuO1xuXHRzcHJpdGU6IGJvb2xlYW47XG5cdHBvaW50ZXJFdmVudHM6IFBvaW50ZXJFdmVudHNQcm9wZXJ0aWVzO1xuXHRlcHM6IG51bWJlcjtcblx0c2NhbGU6IE5ndFZlY3RvcjM7XG5cdGNvbnRlbnQ/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblx0ZGlzdGFuY2VGYWN0b3I/OiBudW1iZXI7XG5cdHN0eWxlPzogQ1NTU3R5bGVEZWNsYXJhdGlvbjtcblx0cmVuZGVyZWREaXZDbGFzcz86IHN0cmluZztcblx0d3JhcHBlckNsYXNzPzogc3RyaW5nO1xuXHRwb3J0YWw/OiBOZ3RSZWY8SFRNTEVsZW1lbnQ+O1xuXHRvY2NsdWRlOiBOZ3RSZWY8VEhSRUUuT2JqZWN0M0Q+W10gfCBib29sZWFuIHwgJ3JheWNhc3QnIHwgJ2JsZW5kaW5nJztcblx0bWF0ZXJpYWw/OiBOZ3RSZWY8VEhSRUUuTWF0ZXJpYWw+O1xuXHRnZW9tZXRyeT86IE5ndFJlZjxUSFJFRS5CdWZmZXJHZW9tZXRyeT47XG5cdGNhc3RTaGFkb3c6IGJvb2xlYW47IC8vIENhc3Qgc2hhZG93IGZvciBvY2NsdXNpb24gcGxhbmVcblx0cmVjZWl2ZVNoYWRvdzogYm9vbGVhbjsgLy8gUmVjZWl2ZSBzaGFkb3cgZm9yIG9jY2x1c2lvbiBwbGFuZVxufTtcblxuZXhwb3J0IGNvbnN0IFtpbmplY3ROZ3RzSHRtbElucHV0cywgcHJvdmlkZU5ndHNIdG1sSW5wdXRzXSA9IGNyZWF0ZUluamVjdGlvblRva2VuKFxuXHQoaHRtbDogTmd0c0h0bWwpID0+ICh7IHN0YXRlOiBodG1sLmlucHV0cy5zdGF0ZSwgLi4uaHRtbC5zdGF0ZSB9KSxcblx0eyBpc1Jvb3Q6IGZhbHNlLCBkZXBzOiBbZm9yd2FyZFJlZigoKSA9PiBOZ3RzSHRtbCldIH0sXG4pO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuXHRcdC8qKlxuXHRcdCAqIEBleHRlbmRzIG5ndC1ncm91cFxuXHRcdCAqL1xuXHRcdCduZ3RzLWh0bWwnOiBOZ3RzSHRtbFN0YXRlICYgTmd0R3JvdXA7XG5cdH1cbn1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1odG1sJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LWdyb3VwIG5ndENvbXBvdW5kIFtyZWZdPVwiZ3JvdXBSZWZcIiBbc2NhbGVdPVwic2NhbGUoKVwiPlxuXHRcdFx0PG5ndC1tZXNoXG5cdFx0XHRcdCpuZ0lmPVwib2NjbHVkZSgpICYmICFpc1JheUNhc3RPY2NsdXNpb24oKVwiXG5cdFx0XHRcdFtjYXN0U2hhZG93XT1cImNhc3RTaGFkb3coKVwiXG5cdFx0XHRcdFtyZWNlaXZlU2hhZG93XT1cInJlY2VpdmVTaGFkb3coKVwiXG5cdFx0XHRcdFtyZWZdPVwib2NjbHVzaW9uTWVzaFJlZlwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxuZ3QtcGxhbmUtZ2VvbWV0cnkgKm5nSWY9XCJnZW9tZXRyeSgpXCIgLz5cblx0XHRcdFx0PG5ndC1zaGFkZXItbWF0ZXJpYWxcblx0XHRcdFx0XHQqbmdJZj1cIm1hdGVyaWFsKClcIlxuXHRcdFx0XHRcdFtzaWRlXT1cIkRvdWJsZVNpZGVcIlxuXHRcdFx0XHRcdFt2ZXJ0ZXhTaGFkZXJdPVwic2hhZGVycygpLnZlcnRleFNoYWRlclwiXG5cdFx0XHRcdFx0W2ZyYWdtZW50U2hhZGVyXT1cInNoYWRlcnMoKS5mcmFnbWVudFNoYWRlclwiXG5cdFx0XHRcdC8+XG5cdFx0XHQ8L25ndC1tZXNoPlxuXHRcdDwvbmd0LWdyb3VwPlxuXG5cdFx0PG5ndHMtaHRtbC13cmFwcGVyIC8+XG5cdGAsXG5cdGltcG9ydHM6IFtOZ0lmLCBOZ3RzSHRtbFdyYXBwZXJdLFxuXHRwcm92aWRlcnM6IFtwcm92aWRlTmd0c0h0bWxJbnB1dHMoKV0sXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0h0bWwge1xuXHREb3VibGVTaWRlID0gVEhSRUUuRG91YmxlU2lkZTtcblxuXHRpbnB1dHMgPSBzaWduYWxTdG9yZTxOZ3RzSHRtbFN0YXRlPih7XG5cdFx0YXM6ICdkaXYnLFxuXHRcdHByZXBlbmQ6IGZhbHNlLFxuXHRcdHRyYW5zZm9ybTogZmFsc2UsXG5cdFx0ZnVsbHNjcmVlbjogZmFsc2UsXG5cdFx0Y2VudGVyOiBmYWxzZSxcblx0XHRzcHJpdGU6IGZhbHNlLFxuXHRcdHpJbmRleFJhbmdlOiBbMTY3NzcyNzEsIDBdLFxuXHRcdGVwczogMC4wMDEsXG5cdFx0c2NhbGU6IDEsXG5cdFx0Y2FsY3VsYXRlUG9zaXRpb246IGRlZmF1bHRDYWxjdWxhdGVQb3NpdGlvbixcblx0XHRwb2ludGVyRXZlbnRzOiAnYXV0bycsXG5cdFx0b2NjbHVkZTogZmFsc2UsXG5cdFx0Y2FzdFNoYWRvdzogZmFsc2UsXG5cdFx0cmVjZWl2ZVNoYWRvdzogZmFsc2UsXG5cdH0pO1xuXG5cdEBDb250ZW50Q2hpbGQoTmd0c1NvYmFDb250ZW50LCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIHNldCBjb250ZW50KGNvbnRlbnQ6IFRlbXBsYXRlUmVmPHVua25vd24+KSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgY29udGVudCB9KTtcblx0fVxuXG5cdEBJbnB1dCgpIGdyb3VwUmVmID0gaW5qZWN0Tmd0UmVmPEdyb3VwPigpO1xuXG5cdEBJbnB1dCh7IGFsaWFzOiAnYXMnIH0pIHNldCBfYXMoYXM6IGtleW9mIEhUTUxFbGVtZW50VGFnTmFtZU1hcCkge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGFzIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICd6SW5kZXhSYW5nZScgfSkgc2V0IF96SW5kZXhSYW5nZSh6SW5kZXhSYW5nZTogQXJyYXk8bnVtYmVyPikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHpJbmRleFJhbmdlIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdwb3J0YWwnIH0pIHNldCBfcG9ydGFsKHBvcnRhbDogTmd0UmVmPEhUTUxFbGVtZW50Pikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHBvcnRhbCB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnb2NjbHVkZScgfSkgc2V0IF9vY2NsdWRlKG9jY2x1ZGU6IE5ndHNIdG1sU3RhdGVbJ29jY2x1ZGUnXSkge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IG9jY2x1ZGUgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ2Nhc3RTaGFkb3cnIH0pIHNldCBfY2FzdFNoYWRvdyhjYXN0U2hhZG93OiBOZ3RzSHRtbFN0YXRlWydjYXN0U2hhZG93J10pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBjYXN0U2hhZG93IH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdyZWNlaXZlU2hhZG93JyB9KSBzZXQgX3JlY2VpdmVTaGFkb3cocmVjZWl2ZVNoYWRvdzogTmd0c0h0bWxTdGF0ZVsncmVjZWl2ZVNoYWRvdyddKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgcmVjZWl2ZVNoYWRvdyB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnbWF0ZXJpYWwnIH0pIHNldCBfbWF0ZXJpYWwobWF0ZXJpYWw6IE5ndHNIdG1sU3RhdGVbJ21hdGVyaWFsJ10pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBtYXRlcmlhbCB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnZ2VvbWV0cnknIH0pIHNldCBfZ2VvbWV0cnkoZ2VvbWV0cnk6IE5ndHNIdG1sU3RhdGVbJ2dlb21ldHJ5J10pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBnZW9tZXRyeSB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnc2NhbGUnIH0pIHNldCBfc2NhbGUoc2NhbGU6IE5ndHNIdG1sU3RhdGVbJ3NjYWxlJ10pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBzY2FsZSB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAncHJlcGVuZCcgfSkgc2V0IF9wcmVwZW5kKHByZXBlbmQ6IGJvb2xlYW4pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBwcmVwZW5kIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICd0cmFuc2Zvcm0nIH0pIHNldCBfdHJhbnNmb3JtKHRyYW5zZm9ybTogYm9vbGVhbikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHRyYW5zZm9ybSB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnY2VudGVyJyB9KSBzZXQgX2NlbnRlcihjZW50ZXI6IGJvb2xlYW4pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBjZW50ZXIgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ3Nwcml0ZScgfSkgc2V0IF9zcHJpdGUoc3ByaXRlOiBib29sZWFuKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgc3ByaXRlIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdmdWxsc2NyZWVuJyB9KSBzZXQgX2Z1bGxzY3JlZW4oZnVsbHNjcmVlbjogYm9vbGVhbikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGZ1bGxzY3JlZW4gfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ2VwcycgfSkgc2V0IF9lcHMoZXBzOiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBlcHMgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ2Rpc3RhbmNlRmFjdG9yJyB9KSBzZXQgX2Rpc3RhbmNlRmFjdG9yKGRpc3RhbmNlRmFjdG9yOiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBkaXN0YW5jZUZhY3RvciB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnd3JhcHBlckNsYXNzJyB9KSBzZXQgX3dyYXBwZXJDbGFzcyh3cmFwcGVyQ2xhc3M6IHN0cmluZykge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHdyYXBwZXJDbGFzcyB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAncmVuZGVyZWREaXZDbGFzcycgfSkgc2V0IF9yZW5kZXJlZERpdkNsYXNzKHJlbmRlcmVkRGl2Q2xhc3M6IHN0cmluZykge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHJlbmRlcmVkRGl2Q2xhc3MgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ3N0eWxlJyB9KSBzZXQgX3N0eWxlKHN0eWxlOiBDU1NTdHlsZURlY2xhcmF0aW9uKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgc3R5bGUgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ3BvaW50ZXJFdmVudHMnIH0pIHNldCBfcG9pbnRlckV2ZW50cyhwb2ludGVyRXZlbnRzOiBQb2ludGVyRXZlbnRzUHJvcGVydGllcykge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHBvaW50ZXJFdmVudHMgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ2NhbGN1bGF0ZVBvc2l0aW9uJyB9KSBzZXQgX2NhbGN1bGF0ZVBvc2l0aW9uKFxuXHRcdGNhbGN1bGF0ZVBvc2l0aW9uOiBOZ3RzSHRtbFN0YXRlWydjYWxjdWxhdGVQb3NpdGlvbiddLFxuXHQpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBjYWxjdWxhdGVQb3NpdGlvbiB9KTtcblx0fVxuXG5cdEBPdXRwdXQoKSBvY2NsdWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuXHRvY2NsdXNpb25NZXNoUmVmID0gaW5qZWN0Tmd0UmVmPE1lc2g+KCk7XG5cblx0cHJpdmF0ZSB0cmFuc2Zvcm0gPSB0aGlzLmlucHV0cy5zZWxlY3QoJ3RyYW5zZm9ybScpO1xuXG5cdGlzUmF5Q2FzdE9jY2x1c2lvbiA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBvY2NsdWRlID0gdGhpcy5vY2NsdWRlKCk7XG5cdFx0cmV0dXJuIChcblx0XHRcdChvY2NsdWRlICYmIG9jY2x1ZGUgIT09ICdibGVuZGluZycpIHx8IChBcnJheS5pc0FycmF5KG9jY2x1ZGUpICYmICEhb2NjbHVkZS5sZW5ndGggJiYgaXMucmVmKG9jY2x1ZGVbMF0pKVxuXHRcdCk7XG5cdH0pO1xuXG5cdG9jY2x1ZGUgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ29jY2x1ZGUnKTtcblx0Y2FzdFNoYWRvdyA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnY2FzdFNoYWRvdycpO1xuXHRyZWNlaXZlU2hhZG93ID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdyZWNlaXZlU2hhZG93Jyk7XG5cdGdlb21ldHJ5ID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdnZW9tZXRyeScpO1xuXHRtYXRlcmlhbCA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnbWF0ZXJpYWwnKTtcblx0c2NhbGUgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ3NjYWxlJyk7XG5cblx0c2hhZGVycyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCB0cmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybSgpO1xuXHRcdHJldHVybiB7XG5cdFx0XHR2ZXJ0ZXhTaGFkZXI6ICF0cmFuc2Zvcm1cblx0XHRcdFx0PyAvKiBnbHNsICovIGBcbiAgICAgICAgICAvKlxuICAgICAgICAgICAgVGhpcyBzaGFkZXIgaXMgZnJvbSB0aGUgVEhSRUUncyBTcHJpdGVNYXRlcmlhbC5cbiAgICAgICAgICAgIFdlIG5lZWQgdG8gdHVybiB0aGUgYmFja2luZyBwbGFuZSBpbnRvIGEgU3ByaXRlXG4gICAgICAgICAgICAobWFrZSBpdCBhbHdheXMgZmFjZSB0aGUgY2FtZXJhKSBpZiBcInRyYW5zZnJvbVwiXG4gICAgICAgICAgICBpcyBmYWxzZS5cbiAgICAgICAgICAqL1xuICAgICAgICAgICNpbmNsdWRlIDxjb21tb24+XG5cbiAgICAgICAgICB2b2lkIG1haW4oKSB7XG4gICAgICAgICAgICB2ZWMyIGNlbnRlciA9IHZlYzIoMC4sIDEuKTtcbiAgICAgICAgICAgIGZsb2F0IHJvdGF0aW9uID0gMC4wO1xuXG4gICAgICAgICAgICAvLyBUaGlzIGlzIHNvbWV3aGF0IGFyYml0cmFyeSwgYnV0IGl0IHNlZW1zIHRvIHdvcmsgd2VsbFxuICAgICAgICAgICAgLy8gTmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBkZXJpdmUgdGhpcyBkeW5hbWljYWxseSBpZiBpdCBldmVuIG1hdHRlcnNcbiAgICAgICAgICAgIGZsb2F0IHNpemUgPSAwLjAzO1xuXG4gICAgICAgICAgICB2ZWM0IG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTtcbiAgICAgICAgICAgIHZlYzIgc2NhbGU7XG4gICAgICAgICAgICBzY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLngsIG1vZGVsTWF0cml4WyAwIF0ueSwgbW9kZWxNYXRyaXhbIDAgXS56ICkgKTtcbiAgICAgICAgICAgIHNjYWxlLnkgPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAxIF0ueCwgbW9kZWxNYXRyaXhbIDEgXS55LCBtb2RlbE1hdHJpeFsgMSBdLnogKSApO1xuXG4gICAgICAgICAgICBib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7XG4gICAgICAgICAgICBpZiAoIGlzUGVyc3BlY3RpdmUgKSBzY2FsZSAqPSAtIG12UG9zaXRpb24uejtcblxuICAgICAgICAgICAgdmVjMiBhbGlnbmVkUG9zaXRpb24gPSAoIHBvc2l0aW9uLnh5IC0gKCBjZW50ZXIgLSB2ZWMyKCAwLjUgKSApICkgKiBzY2FsZSAqIHNpemU7XG4gICAgICAgICAgICB2ZWMyIHJvdGF0ZWRQb3NpdGlvbjtcbiAgICAgICAgICAgIHJvdGF0ZWRQb3NpdGlvbi54ID0gY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggLSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTtcbiAgICAgICAgICAgIHJvdGF0ZWRQb3NpdGlvbi55ID0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggKyBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTtcbiAgICAgICAgICAgIG12UG9zaXRpb24ueHkgKz0gcm90YXRlZFBvc2l0aW9uO1xuXG4gICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xuICAgICAgICAgIH1cbiAgICAgIGBcblx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRmcmFnbWVudFNoYWRlcjogLyogZ2xzbCAqLyBgXG4gICAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDAuMCk7XG4gICAgICAgIH1cbiAgICAgIGAsXG5cdFx0fTtcblx0fSk7XG5cblx0c3RhdGUgPSB7XG5cdFx0ekluZGV4UmFuZ2U6IHRoaXMuaW5wdXRzLnNlbGVjdCgnekluZGV4UmFuZ2UnKSxcblx0XHRwcmVwZW5kOiB0aGlzLmlucHV0cy5zZWxlY3QoJ3ByZXBlbmQnKSxcblx0XHR0cmFuc2Zvcm06IHRoaXMudHJhbnNmb3JtLFxuXHRcdGNlbnRlcjogdGhpcy5pbnB1dHMuc2VsZWN0KCdjZW50ZXInKSxcblx0XHRmdWxsc2NyZWVuOiB0aGlzLmlucHV0cy5zZWxlY3QoJ2Z1bGxzY3JlZW4nKSxcblx0XHRjYWxjdWxhdGVQb3NpdGlvbjogdGhpcy5pbnB1dHMuc2VsZWN0KCdjYWxjdWxhdGVQb3NpdGlvbicpLFxuXHRcdHdyYXBwZXJDbGFzczogdGhpcy5pbnB1dHMuc2VsZWN0KCd3cmFwcGVyQ2xhc3MnKSxcblx0XHRyZW5kZXJlZERpdkNsYXNzOiB0aGlzLmlucHV0cy5zZWxlY3QoJ3JlbmRlcmVkRGl2Q2xhc3MnKSxcblx0XHRzdHlsZTogdGhpcy5pbnB1dHMuc2VsZWN0KCdzdHlsZScpLFxuXHRcdHBvaW50ZXJFdmVudHM6IHRoaXMuaW5wdXRzLnNlbGVjdCgncG9pbnRlckV2ZW50cycpLFxuXHRcdGVwczogdGhpcy5pbnB1dHMuc2VsZWN0KCdlcHMnKSxcblx0XHRkaXN0YW5jZUZhY3RvcjogdGhpcy5pbnB1dHMuc2VsZWN0KCdkaXN0YW5jZUZhY3RvcicpLFxuXHRcdHNwcml0ZTogdGhpcy5pbnB1dHMuc2VsZWN0KCdzcHJpdGUnKSxcblx0XHRhczogdGhpcy5pbnB1dHMuc2VsZWN0KCdhcycpLFxuXHRcdHBvcnRhbDogdGhpcy5pbnB1dHMuc2VsZWN0KCdwb3J0YWwnKSxcblx0XHRjb250ZW50OiB0aGlzLmlucHV0cy5zZWxlY3QoJ2NvbnRlbnQnKSxcblx0XHRvY2NsdWRlOiB0aGlzLm9jY2x1ZGUsXG5cdFx0aXNSYXlDYXN0T2NjbHVzaW9uOiB0aGlzLmlzUmF5Q2FzdE9jY2x1c2lvbixcblx0XHRvY2NsdXNpb25NZXNoUmVmOiB0aGlzLm9jY2x1c2lvbk1lc2hSZWYsXG5cdFx0b2NjbHVkZWQ6IHRoaXMub2NjbHVkZWQsXG5cdFx0Z2VvbWV0cnk6IHRoaXMuZ2VvbWV0cnksXG5cdFx0c2NhbGU6IHRoaXMuc2NhbGUsXG5cdFx0Z3JvdXBSZWY6IHRoaXMuZ3JvdXBSZWYsXG5cdH07XG59XG4iXX0=
@@ -1,5 +1,14 @@
1
1
  export * from './animations/animations';
2
2
  export * from './bake-shadows/bake-shadows';
3
+ export * from './caustics/caustics';
4
+ export * from './decal/decal';
3
5
  export * from './depth-buffer/depth-buffer';
6
+ export * from './example/example';
4
7
  export * from './fbo/fbo';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWlzYy9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FuaW1hdGlvbnMvYW5pbWF0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL2Jha2Utc2hhZG93cy9iYWtlLXNoYWRvd3MnO1xuZXhwb3J0ICogZnJvbSAnLi9kZXB0aC1idWZmZXIvZGVwdGgtYnVmZmVyJztcbmV4cG9ydCAqIGZyb20gJy4vZmJvL2Zibyc7XG4iXX0=
8
+ export * from './html/html';
9
+ export * from './sampler/sampler';
10
+ export * from './shadow/shadow';
11
+ export * from './stats-gl/stats-gl';
12
+ export * from './trail-texture/inject-trail-texture';
13
+ export * from './trail/trail';
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWlzYy9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FuaW1hdGlvbnMvYW5pbWF0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL2Jha2Utc2hhZG93cy9iYWtlLXNoYWRvd3MnO1xuZXhwb3J0ICogZnJvbSAnLi9jYXVzdGljcy9jYXVzdGljcyc7XG5leHBvcnQgKiBmcm9tICcuL2RlY2FsL2RlY2FsJztcbmV4cG9ydCAqIGZyb20gJy4vZGVwdGgtYnVmZmVyL2RlcHRoLWJ1ZmZlcic7XG5leHBvcnQgKiBmcm9tICcuL2V4YW1wbGUvZXhhbXBsZSc7XG5leHBvcnQgKiBmcm9tICcuL2Ziby9mYm8nO1xuZXhwb3J0ICogZnJvbSAnLi9odG1sL2h0bWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zYW1wbGVyL3NhbXBsZXInO1xuZXhwb3J0ICogZnJvbSAnLi9zaGFkb3cvc2hhZG93JztcbmV4cG9ydCAqIGZyb20gJy4vc3RhdHMtZ2wvc3RhdHMtZ2wnO1xuZXhwb3J0ICogZnJvbSAnLi90cmFpbC10ZXh0dXJlL2luamVjdC10cmFpbC10ZXh0dXJlJztcbmV4cG9ydCAqIGZyb20gJy4vdHJhaWwvdHJhaWwnO1xuIl19
@@ -0,0 +1,132 @@
1
+ import { CUSTOM_ELEMENTS_SCHEMA, Component, Injector, Input, computed, effect, runInInjectionContext, signal, untracked, } from '@angular/core';
2
+ import { checkUpdate, extend, injectNgtRef, is, signalStore } from 'angular-three';
3
+ import { assertInjector } from 'ngxtension/assert-injector';
4
+ import * as THREE from 'three';
5
+ import { Group } from 'three';
6
+ import { MeshSurfaceSampler } from 'three-stdlib';
7
+ import * as i0 from "@angular/core";
8
+ const defaultState = {
9
+ count: 16,
10
+ };
11
+ export function injectNgtsSurfaceSampler(surfaceSamplerState, { injector } = {}) {
12
+ injector = assertInjector(injectNgtsSurfaceSampler, injector);
13
+ return runInInjectionContext(injector, () => {
14
+ const state = computed(() => ({ ...defaultState, ...(surfaceSamplerState() || {}) }));
15
+ const _buffer = signal((() => {
16
+ const arr = Array.from({ length: state().count }, () => [
17
+ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1,
18
+ ]).flat();
19
+ return new THREE.InstancedBufferAttribute(Float32Array.from(arr), 16);
20
+ })());
21
+ effect(() => {
22
+ const { mesh, count, transform, instancedMesh, weight } = state();
23
+ const meshObj = is.ref(mesh) ? mesh.nativeElement : mesh;
24
+ if (!meshObj)
25
+ return;
26
+ const instancedMeshObj = is.ref(instancedMesh) ? instancedMesh.nativeElement : instancedMesh;
27
+ const buffer = untracked(_buffer);
28
+ const sampler = new MeshSurfaceSampler(meshObj);
29
+ if (weight) {
30
+ sampler.setWeightAttribute(weight);
31
+ }
32
+ sampler.build();
33
+ const position = new THREE.Vector3();
34
+ const normal = new THREE.Vector3();
35
+ const color = new THREE.Color();
36
+ const dummy = new THREE.Object3D();
37
+ meshObj.updateMatrixWorld(true);
38
+ for (let i = 0; i < count; i++) {
39
+ sampler.sample(position, normal, color);
40
+ if (typeof transform === 'function') {
41
+ transform({ dummy, sampledMesh: meshObj, position, normal, color }, i);
42
+ }
43
+ else {
44
+ dummy.position.copy(position);
45
+ }
46
+ dummy.updateMatrix();
47
+ if (instancedMeshObj) {
48
+ instancedMeshObj.setMatrixAt(i, dummy.matrix);
49
+ }
50
+ dummy.matrix.toArray(buffer.array, i * 16);
51
+ }
52
+ if (instancedMeshObj) {
53
+ checkUpdate(instancedMeshObj.instanceMatrix);
54
+ }
55
+ checkUpdate(buffer);
56
+ untracked(() => {
57
+ _buffer.set(buffer.clone());
58
+ });
59
+ });
60
+ return _buffer.asReadonly();
61
+ });
62
+ }
63
+ extend({ Group });
64
+ export class NgtsSampler {
65
+ set _count(count) {
66
+ this.inputs.set({ count });
67
+ }
68
+ set _mesh(mesh) {
69
+ this.inputs.set({ mesh });
70
+ }
71
+ set _transform(transform) {
72
+ this.inputs.set({ transform });
73
+ }
74
+ set _weight(weight) {
75
+ this.inputs.set({ weight });
76
+ }
77
+ set _instancedMesh(instancedMesh) {
78
+ this.inputs.set({ instancedMesh });
79
+ }
80
+ constructor() {
81
+ this.inputs = signalStore({ count: 16 });
82
+ this.samplerRef = injectNgtRef();
83
+ this.surfaceSamplerState = computed(() => {
84
+ const sampler = this.samplerRef.nativeElement;
85
+ if (!sampler)
86
+ return null;
87
+ const { count, weight, transform, mesh, instancedMesh } = this.inputs.state();
88
+ const instancedMeshRef = instancedMesh ??
89
+ sampler.children.find((child) => child.hasOwnProperty('instanceMatrix'));
90
+ const meshRef = mesh ?? sampler.children.find((child) => child.type === 'Mesh');
91
+ return { count, weight, transform, mesh: meshRef, instancedMesh: instancedMeshRef };
92
+ });
93
+ injectNgtsSurfaceSampler(this.surfaceSamplerState);
94
+ }
95
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: NgtsSampler, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
96
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.3", type: NgtsSampler, isStandalone: true, selector: "ngts-sampler", inputs: { samplerRef: "samplerRef", _count: ["count", "_count"], _mesh: ["mesh", "_mesh"], _transform: ["transform", "_transform"], _weight: ["weight", "_weight"], _instancedMesh: ["instancedMesh", "_instancedMesh"] }, ngImport: i0, template: `
97
+ <ngt-group ngtCompound [ref]="samplerRef">
98
+ <ng-content />
99
+ </ngt-group>
100
+ `, isInline: true }); }
101
+ }
102
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: NgtsSampler, decorators: [{
103
+ type: Component,
104
+ args: [{
105
+ selector: 'ngts-sampler',
106
+ standalone: true,
107
+ template: `
108
+ <ngt-group ngtCompound [ref]="samplerRef">
109
+ <ng-content />
110
+ </ngt-group>
111
+ `,
112
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
113
+ }]
114
+ }], ctorParameters: function () { return []; }, propDecorators: { samplerRef: [{
115
+ type: Input
116
+ }], _count: [{
117
+ type: Input,
118
+ args: [{ alias: 'count' }]
119
+ }], _mesh: [{
120
+ type: Input,
121
+ args: [{ alias: 'mesh' }]
122
+ }], _transform: [{
123
+ type: Input,
124
+ args: [{ alias: 'transform' }]
125
+ }], _weight: [{
126
+ type: Input,
127
+ args: [{ alias: 'weight' }]
128
+ }], _instancedMesh: [{
129
+ type: Input,
130
+ args: [{ alias: 'instancedMesh' }]
131
+ }] } });
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FtcGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9taXNjL3NyYy9zYW1wbGVyL3NhbXBsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLHNCQUFzQixFQUN0QixTQUFTLEVBQ1QsUUFBUSxFQUNSLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLHFCQUFxQixFQUNyQixNQUFNLEVBQ04sU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUE4QixNQUFNLGVBQWUsQ0FBQztBQUMvRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM5QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBMENsRCxNQUFNLFlBQVksR0FBMEM7SUFDM0QsS0FBSyxFQUFFLEVBQUU7Q0FDVCxDQUFDO0FBRUYsTUFBTSxVQUFVLHdCQUF3QixDQUN2QyxtQkFBaUgsRUFDakgsRUFBRSxRQUFRLEtBQThCLEVBQUU7SUFFMUMsUUFBUSxHQUFHLGNBQWMsQ0FBQyx3QkFBd0IsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM5RCxPQUFPLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDM0MsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLFlBQVksRUFBRSxHQUFHLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0RixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQ3JCLENBQUMsR0FBRyxFQUFF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O3VCQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFJSyxLQUFLO3NCQUFsQyxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtnQkFJVyxVQUFVO3NCQUE1QyxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRTtnQkFJRyxPQUFPO3NCQUF0QyxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtnQkFJYSxjQUFjO3NCQUFwRCxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdENvbXBvbmVudCxcblx0SW5qZWN0b3IsXG5cdElucHV0LFxuXHRjb21wdXRlZCxcblx0ZWZmZWN0LFxuXHRydW5JbkluamVjdGlvbkNvbnRleHQsXG5cdHNpZ25hbCxcblx0dW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNoZWNrVXBkYXRlLCBleHRlbmQsIGluamVjdE5ndFJlZiwgaXMsIHNpZ25hbFN0b3JlLCB0eXBlIE5ndEdyb3VwLCB0eXBlIE5ndFJlZiB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0b3IgfSBmcm9tICduZ3h0ZW5zaW9uL2Fzc2VydC1pbmplY3Rvcic7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBHcm91cCB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE1lc2hTdXJmYWNlU2FtcGxlciB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5cbnR5cGUgU2FtcGxlUGF5bG9hZCA9IHtcblx0LyoqXG5cdCAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgc2FtcGxlLlxuXHQgKi9cblx0cG9zaXRpb246IFRIUkVFLlZlY3RvcjM7XG5cdC8qKlxuXHQgKiBUaGUgbm9ybWFsIG9mIHRoZSBtZXNoIGF0IHRoZSBzYW1wbGVkIHBvc2l0aW9uLlxuXHQgKi9cblx0bm9ybWFsOiBUSFJFRS5WZWN0b3IzO1xuXHQvKipcblx0ICogVGhlIHZlcnRleCBjb2xvciBvZiB0aGUgbWVzaCBhdCB0aGUgc2FtcGxlZCBwb3NpdGlvbi5cblx0ICovXG5cdGNvbG9yOiBUSFJFRS5Db2xvcjtcbn07XG5cbnR5cGUgVHJhbnNmb3JtUGF5bG9hZCA9IFNhbXBsZVBheWxvYWQgJiB7XG5cdC8qKlxuXHQgKiBUaGUgZHVtbXkgb2JqZWN0IHVzZWQgdG8gdHJhbnNmb3JtIGVhY2ggaW5zdGFuY2UuXG5cdCAqIFRoaXMgb2JqZWN0J3MgbWF0cml4IHdpbGwgYmUgdXBkYXRlZCBhZnRlciB0cmFuc2Zvcm1pbmcgJiBpdCB3aWxsIGJlIHVzZWRcblx0ICogdG8gc2V0IHRoZSBpbnN0YW5jZSdzIG1hdHJpeC5cblx0ICovXG5cdGR1bW15OiBUSFJFRS5PYmplY3QzRDtcblx0LyoqXG5cdCAqIFRoZSBtZXNoIHRoYXQncyBpbml0aWFsbHkgcGFzc2VkIHRvIHRoZSBzYW1wbGVyLlxuXHQgKiBVc2UgdGhpcyBpZiB5b3UgbmVlZCB0byBhcHBseSB0cmFuc2Zvcm1zIGZyb20geW91ciBtZXNoIHRvIHlvdXIgaW5zdGFuY2VzXG5cdCAqIG9yIGlmIHlvdSBuZWVkIHRvIGdyYWIgYXR0cmlidXRlcyBmcm9tIHRoZSBnZW9tZXRyeS5cblx0ICovXG5cdHNhbXBsZWRNZXNoOiBUSFJFRS5NZXNoO1xufTtcblxuZXhwb3J0IHR5cGUgTmd0c1N1cmZhY2VTYW1wbGVyVHJhbnNmb3JtRm4gPSAocGF5bG9hZDogVHJhbnNmb3JtUGF5bG9hZCwgaTogbnVtYmVyKSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBOZ3RzU3VyZmFjZVNhbXBsZXJTdGF0ZSA9IHtcblx0Y291bnQ6IG51bWJlcjtcblx0bWVzaDogTmd0UmVmPFRIUkVFLk1lc2g+O1xuXHR0cmFuc2Zvcm0/OiBOZ3RzU3VyZmFjZVNhbXBsZXJUcmFuc2Zvcm1Gbjtcblx0d2VpZ2h0Pzogc3RyaW5nO1xuXHRpbnN0YW5jZWRNZXNoPzogTmd0UmVmPFRIUkVFLkluc3RhbmNlZE1lc2g+O1xufTtcblxuY29uc3QgZGVmYXVsdFN0YXRlOiBPbWl0PE5ndHNTdXJmYWNlU2FtcGxlclN0YXRlLCAnbWVzaCc+ID0ge1xuXHRjb3VudDogMTYsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Tmd0c1N1cmZhY2VTYW1wbGVyKFxuXHRzdXJmYWNlU2FtcGxlclN0YXRlOiAoKSA9PiAoUGFydGlhbDxPbWl0PE5ndHNTdXJmYWNlU2FtcGxlclN0YXRlLCAnbWVzaCc+PiAmIHsgbWVzaDogTmd0UmVmPFRIUkVFLk1lc2g+IH0pIHwgbnVsbCxcblx0eyBpbmplY3RvciB9OiB7IGluamVjdG9yPzogSW5qZWN0b3IgfSA9IHt9LFxuKSB7XG5cdGluamVjdG9yID0gYXNzZXJ0SW5qZWN0b3IoaW5qZWN0Tmd0c1N1cmZhY2VTYW1wbGVyLCBpbmplY3Rvcik7XG5cdHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCBzdGF0ZSA9IGNvbXB1dGVkKCgpID0+ICh7IC4uLmRlZmF1bHRTdGF0ZSwgLi4uKHN1cmZhY2VTYW1wbGVyU3RhdGUoKSB8fCB7fSkgfSkpO1xuXHRcdGNvbnN0IF9idWZmZXIgPSBzaWduYWwoXG5cdFx0XHQoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBhcnIgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBzdGF0ZSgpLmNvdW50IH0sICgpID0+IFtcblx0XHRcdFx0XHQxLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxLFxuXHRcdFx0XHRdKS5mbGF0KCk7XG5cdFx0XHRcdHJldHVybiBuZXcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlKEZsb2F0MzJBcnJheS5mcm9tKGFyciksIDE2KTtcblx0XHRcdH0pKCksXG5cdFx0KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCB7IG1lc2gsIGNvdW50LCB0cmFuc2Zvcm0sIGluc3RhbmNlZE1lc2gsIHdlaWdodCB9ID0gc3RhdGUoKTtcblx0XHRcdGNvbnN0IG1lc2hPYmogPSBpcy5yZWYobWVzaCkgPyBtZXNoLm5hdGl2ZUVsZW1lbnQgOiBtZXNoO1xuXHRcdFx0aWYgKCFtZXNoT2JqKSByZXR1cm47XG5cdFx0XHRjb25zdCBpbnN0YW5jZWRNZXNoT2JqID0gaXMucmVmKGluc3RhbmNlZE1lc2gpID8gaW5zdGFuY2VkTWVzaC5uYXRpdmVFbGVtZW50IDogaW5zdGFuY2VkTWVzaDtcblx0XHRcdGNvbnN0IGJ1ZmZlciA9IHVudHJhY2tlZChfYnVmZmVyKTtcblxuXHRcdFx0Y29uc3Qgc2FtcGxlciA9IG5ldyBNZXNoU3VyZmFjZVNhbXBsZXIobWVzaE9iaik7XG5cblx0XHRcdGlmICh3ZWlnaHQpIHtcblx0XHRcdFx0c2FtcGxlci5zZXRXZWlnaHRBdHRyaWJ1dGUod2VpZ2h0KTtcblx0XHRcdH1cblxuXHRcdFx0c2FtcGxlci5idWlsZCgpO1xuXG5cdFx0XHRjb25zdCBwb3NpdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5cdFx0XHRjb25zdCBub3JtYWwgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuXHRcdFx0Y29uc3QgY29sb3IgPSBuZXcgVEhSRUUuQ29sb3IoKTtcblx0XHRcdGNvbnN0IGR1bW15ID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XG5cblx0XHRcdG1lc2hPYmoudXBkYXRlTWF0cml4V29ybGQodHJ1ZSk7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuXHRcdFx0XHRzYW1wbGVyLnNhbXBsZShwb3NpdGlvbiwgbm9ybWFsLCBjb2xvcik7XG5cblx0XHRcdFx0aWYgKHR5cGVvZiB0cmFuc2Zvcm0gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHR0cmFuc2Zvcm0oeyBkdW1teSwgc2FtcGxlZE1lc2g6IG1lc2hPYmosIHBvc2l0aW9uLCBub3JtYWwsIGNvbG9yIH0sIGkpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGR1bW15LnBvc2l0aW9uLmNvcHkocG9zaXRpb24pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZHVtbXkudXBkYXRlTWF0cml4KCk7XG5cblx0XHRcdFx0aWYgKGluc3RhbmNlZE1lc2hPYmopIHtcblx0XHRcdFx0XHRpbnN0YW5jZWRNZXNoT2JqLnNldE1hdHJpeEF0KGksIGR1bW15Lm1hdHJpeCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkdW1teS5tYXRyaXgudG9BcnJheShidWZmZXIuYXJyYXksIGkgKiAxNik7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpbnN0YW5jZWRNZXNoT2JqKSB7XG5cdFx0XHRcdGNoZWNrVXBkYXRlKGluc3RhbmNlZE1lc2hPYmouaW5zdGFuY2VNYXRyaXgpO1xuXHRcdFx0fVxuXG5cdFx0XHRjaGVja1VwZGF0ZShidWZmZXIpO1xuXG5cdFx0XHR1bnRyYWNrZWQoKCkgPT4ge1xuXHRcdFx0XHRfYnVmZmVyLnNldChidWZmZXIuY2xvbmUoKSBhcyBUSFJFRS5JbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gX2J1ZmZlci5hc1JlYWRvbmx5KCk7XG5cdH0pO1xufVxuXG5leHRlbmQoeyBHcm91cCB9KTtcblxuZGVjbGFyZSBnbG9iYWwge1xuXHRpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcblx0XHQvKipcblx0XHQgKiBAZXh0ZW5kcyBuZ3QtZ3JvdXBcblx0XHQgKi9cblx0XHQnbmd0cy1zYW1wbGVyJzogTmd0c1N1cmZhY2VTYW1wbGVyU3RhdGUgJiBOZ3RHcm91cDtcblx0fVxufVxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLXNhbXBsZXInLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtZ3JvdXAgbmd0Q29tcG91bmQgW3JlZl09XCJzYW1wbGVyUmVmXCI+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmd0LWdyb3VwPlxuXHRgLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNTYW1wbGVyIHtcblx0cHJpdmF0ZSBpbnB1dHMgPSBzaWduYWxTdG9yZTxOZ3RzU3VyZmFjZVNhbXBsZXJTdGF0ZT4oeyBjb3VudDogMTYgfSk7XG5cblx0QElucHV0KCkgc2FtcGxlclJlZiA9IGluamVjdE5ndFJlZjxHcm91cD4oKTtcblxuXHRASW5wdXQoeyBhbGlhczogJ2NvdW50JyB9KSBzZXQgX2NvdW50KGNvdW50OiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBjb3VudCB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnbWVzaCcgfSkgc2V0IF9tZXNoKG1lc2g6IE5ndFJlZjxUSFJFRS5NZXNoPikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IG1lc2ggfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ3RyYW5zZm9ybScgfSkgc2V0IF90cmFuc2Zvcm0odHJhbnNmb3JtOiBOZ3RzU3VyZmFjZVNhbXBsZXJUcmFuc2Zvcm1Gbikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHRyYW5zZm9ybSB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnd2VpZ2h0JyB9KSBzZXQgX3dlaWdodCh3ZWlnaHQ6IHN0cmluZykge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHdlaWdodCB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnaW5zdGFuY2VkTWVzaCcgfSkgc2V0IF9pbnN0YW5jZWRNZXNoKGluc3RhbmNlZE1lc2g6IE5ndFJlZjxUSFJFRS5JbnN0YW5jZWRNZXNoPikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGluc3RhbmNlZE1lc2ggfSk7XG5cdH1cblxuXHRwcml2YXRlIHN1cmZhY2VTYW1wbGVyU3RhdGUgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3Qgc2FtcGxlciA9IHRoaXMuc2FtcGxlclJlZi5uYXRpdmVFbGVtZW50O1xuXHRcdGlmICghc2FtcGxlcikgcmV0dXJuIG51bGw7XG5cdFx0Y29uc3QgeyBjb3VudCwgd2VpZ2h0LCB0cmFuc2Zvcm0sIG1lc2gsIGluc3RhbmNlZE1lc2ggfSA9IHRoaXMuaW5wdXRzLnN0YXRlKCk7XG5cblx0XHRjb25zdCBpbnN0YW5jZWRNZXNoUmVmID1cblx0XHRcdGluc3RhbmNlZE1lc2ggPz9cblx0XHRcdChzYW1wbGVyLmNoaWxkcmVuLmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5oYXNPd25Qcm9wZXJ0eSgnaW5zdGFuY2VNYXRyaXgnKSkgYXMgVEhSRUUuSW5zdGFuY2VkTWVzaCk7XG5cblx0XHRjb25zdCBtZXNoUmVmID0gbWVzaCA/PyAoc2FtcGxlci5jaGlsZHJlbi5maW5kKChjaGlsZCkgPT4gY2hpbGQudHlwZSA9PT0gJ01lc2gnKSBhcyBUSFJFRS5NZXNoKTtcblxuXHRcdHJldHVybiB7IGNvdW50LCB3ZWlnaHQsIHRyYW5zZm9ybSwgbWVzaDogbWVzaFJlZiwgaW5zdGFuY2VkTWVzaDogaW5zdGFuY2VkTWVzaFJlZiB9O1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRpbmplY3ROZ3RzU3VyZmFjZVNhbXBsZXIodGhpcy5zdXJmYWNlU2FtcGxlclN0YXRlKTtcblx0fVxufVxuIl19
@@ -0,0 +1,111 @@
1
+ import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, computed } from '@angular/core';
2
+ import { NgtArgs, extend, injectNgtRef, signalStore } from 'angular-three';
3
+ import * as THREE from 'three';
4
+ import { CanvasTexture, Mesh, MeshBasicMaterial, PlaneGeometry } from 'three';
5
+ import * as i0 from "@angular/core";
6
+ extend({ Mesh, CanvasTexture, PlaneGeometry, MeshBasicMaterial });
7
+ export class NgtsShadow {
8
+ constructor() {
9
+ this.Math = Math;
10
+ this.DoubleSide = THREE.DoubleSide;
11
+ this.inputs = signalStore({
12
+ fog: false,
13
+ depthWrite: false,
14
+ colorStop: 0.0,
15
+ color: 'black',
16
+ opacity: 0.5,
17
+ });
18
+ this.shadowRef = injectNgtRef();
19
+ this.colorStop = this.inputs.select('colorStop');
20
+ this.color = this.inputs.select('color');
21
+ this.opacity = this.inputs.select('opacity');
22
+ this.fog = this.inputs.select('fog');
23
+ this.depthWrite = this.inputs.select('depthWrite');
24
+ this.canvas = computed(() => {
25
+ const [colorStop, color] = [this.colorStop(), this.color()];
26
+ const canvas = document.createElement('canvas');
27
+ canvas.width = 128;
28
+ canvas.height = 128;
29
+ const context = canvas.getContext('2d');
30
+ const gradient = context.createRadialGradient(canvas.width / 2, canvas.height / 2, 0, canvas.width / 2, canvas.height / 2, canvas.width / 2);
31
+ gradient.addColorStop(colorStop, new THREE.Color(color).getStyle());
32
+ gradient.addColorStop(1, 'rgba(0,0,0,0)');
33
+ context.fillStyle = gradient;
34
+ context.fillRect(0, 0, canvas.width, canvas.height);
35
+ return canvas;
36
+ });
37
+ }
38
+ set _colorStop(colorStop) {
39
+ this.inputs.set({ colorStop });
40
+ }
41
+ set _fog(fog) {
42
+ this.inputs.set({ fog });
43
+ }
44
+ set _color(color) {
45
+ this.inputs.set({ color });
46
+ }
47
+ set _opacity(opacity) {
48
+ this.inputs.set({ opacity });
49
+ }
50
+ set _depthWrite(depthWrite) {
51
+ this.inputs.set({ depthWrite });
52
+ }
53
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: NgtsShadow, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
54
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.3", type: NgtsShadow, isStandalone: true, selector: "ngts-shadow", inputs: { shadowRef: "shadowRef", _colorStop: ["colorStop", "_colorStop"], _fog: ["fog", "_fog"], _color: ["color", "_color"], _opacity: ["opacity", "_opacity"], _depthWrite: ["depthWrite", "_depthWrite"] }, ngImport: i0, template: `
55
+ <ngt-mesh ngtCompound [ref]="shadowRef" [rotation]="[-Math.PI / 2, 0, 0]">
56
+ <ngt-plane-geometry />
57
+ <ngt-mesh-basic-material
58
+ [transparent]="true"
59
+ [opacity]="opacity()"
60
+ [fog]="fog()"
61
+ [depthWrite]="depthWrite()"
62
+ [side]="DoubleSide"
63
+ >
64
+ <ngt-canvas-texture *args="[canvas()]" attach="map" />
65
+ </ngt-mesh-basic-material>
66
+ <ng-content />
67
+ </ngt-mesh>
68
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }] }); }
69
+ }
70
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: NgtsShadow, decorators: [{
71
+ type: Component,
72
+ args: [{
73
+ selector: 'ngts-shadow',
74
+ standalone: true,
75
+ template: `
76
+ <ngt-mesh ngtCompound [ref]="shadowRef" [rotation]="[-Math.PI / 2, 0, 0]">
77
+ <ngt-plane-geometry />
78
+ <ngt-mesh-basic-material
79
+ [transparent]="true"
80
+ [opacity]="opacity()"
81
+ [fog]="fog()"
82
+ [depthWrite]="depthWrite()"
83
+ [side]="DoubleSide"
84
+ >
85
+ <ngt-canvas-texture *args="[canvas()]" attach="map" />
86
+ </ngt-mesh-basic-material>
87
+ <ng-content />
88
+ </ngt-mesh>
89
+ `,
90
+ imports: [NgtArgs],
91
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
92
+ }]
93
+ }], propDecorators: { shadowRef: [{
94
+ type: Input
95
+ }], _colorStop: [{
96
+ type: Input,
97
+ args: [{ alias: 'colorStop' }]
98
+ }], _fog: [{
99
+ type: Input,
100
+ args: [{ alias: 'fog' }]
101
+ }], _color: [{
102
+ type: Input,
103
+ args: [{ alias: 'color' }]
104
+ }], _opacity: [{
105
+ type: Input,
106
+ args: [{ alias: 'opacity' }]
107
+ }], _depthWrite: [{
108
+ type: Input,
109
+ args: [{ alias: 'depthWrite' }]
110
+ }] } });
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhZG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL21pc2Mvc3JjL3NoYWRvdy9zaGFkb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxNQUFNLE9BQU8sQ0FBQzs7QUFtQjlFLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQztBQXVCbEUsTUFBTSxPQUFPLFVBQVU7SUFyQnZCO1FBc0JDLFNBQUksR0FBRyxJQUFJLENBQUM7UUFDWixlQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUV0QixXQUFNLEdBQUcsV0FBVyxDQUFrQjtZQUM3QyxHQUFHLEVBQUUsS0FBSztZQUNWLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFNBQVMsRUFBRSxHQUFHO1lBQ2QsS0FBSyxFQUFFLE9BQU87WUFDZCxPQUFPLEVBQUUsR0FBRztTQUNaLENBQUMsQ0FBQztRQUVNLGNBQVMsR0FBRyxZQUFZLEVBQVEsQ0FBQztRQXNCbEMsY0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVDLFVBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU1QyxZQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMs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QUFFO2dCQUlBLElBQUk7c0JBQWhDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO2dCQUlRLE1BQU07c0JBQXBDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUlRLFFBQVE7c0JBQXhDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO2dCQUlTLFdBQVc7c0JBQTlDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgQ29tcG9uZW50LCBJbnB1dCwgY29tcHV0ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5ndEFyZ3MsIGV4dGVuZCwgaW5qZWN0Tmd0UmVmLCBzaWduYWxTdG9yZSwgdHlwZSBOZ3RNZXNoIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBDYW52YXNUZXh0dXJlLCBNZXNoLCBNZXNoQmFzaWNNYXRlcmlhbCwgUGxhbmVHZW9tZXRyeSB9IGZyb20gJ3RocmVlJztcblxuZXhwb3J0IHR5cGUgTmd0c1NoYWRvd1N0YXRlID0ge1xuXHRjb2xvclN0b3A6IG51bWJlcjtcblx0Zm9nOiBib29sZWFuO1xuXHRjb2xvcjogVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbjtcblx0b3BhY2l0eTogbnVtYmVyO1xuXHRkZXB0aFdyaXRlOiBib29sZWFuO1xufTtcblxuZGVjbGFyZSBnbG9iYWwge1xuXHRpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcblx0XHQvKipcblx0XHQgKiBAZXh0ZW5kcyBuZ3QtbWVzaFxuXHRcdCAqL1xuXHRcdCduZ3RzLXNoYWRvdyc6IE5ndHNTaGFkb3dTdGF0ZSAmIE5ndE1lc2g7XG5cdH1cbn1cblxuZXh0ZW5kKHsgTWVzaCwgQ2FudmFzVGV4dHVyZSwgUGxhbmVHZW9tZXRyeSwgTWVzaEJhc2ljTWF0ZXJpYWwgfSk7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtc2hhZG93Jyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LW1lc2ggbmd0Q29tcG91bmQgW3JlZl09XCJzaGFkb3dSZWZcIiBbcm90YXRpb25dPVwiWy1NYXRoLlBJIC8gMiwgMCwgMF1cIj5cblx0XHRcdDxuZ3QtcGxhbmUtZ2VvbWV0cnkgLz5cblx0XHRcdDxuZ3QtbWVzaC1iYXNpYy1tYXRlcmlhbFxuXHRcdFx0XHRbdHJhbnNwYXJlbnRdPVwidHJ1ZVwiXG5cdFx0XHRcdFtvcGFjaXR5XT1cIm9wYWNpdHkoKVwiXG5cdFx0XHRcdFtmb2ddPVwiZm9nKClcIlxuXHRcdFx0XHRbZGVwdGhXcml0ZV09XCJkZXB0aFdyaXRlKClcIlxuXHRcdFx0XHRbc2lkZV09XCJEb3VibGVTaWRlXCJcblx0XHRcdD5cblx0XHRcdFx0PG5ndC1jYW52YXMtdGV4dHVyZSAqYXJncz1cIltjYW52YXMoKV1cIiBhdHRhY2g9XCJtYXBcIiAvPlxuXHRcdFx0PC9uZ3QtbWVzaC1iYXNpYy1tYXRlcmlhbD5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3QtbWVzaD5cblx0YCxcblx0aW1wb3J0czogW05ndEFyZ3NdLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNTaGFkb3cge1xuXHRNYXRoID0gTWF0aDtcblx0RG91YmxlU2lkZSA9IFRIUkVFLkRvdWJsZVNpZGU7XG5cblx0cHJpdmF0ZSBpbnB1dHMgPSBzaWduYWxTdG9yZTxOZ3RzU2hhZG93U3RhdGU+KHtcblx0XHRmb2c6IGZhbHNlLFxuXHRcdGRlcHRoV3JpdGU6IGZhbHNlLFxuXHRcdGNvbG9yU3RvcDogMC4wLFxuXHRcdGNvbG9yOiAnYmxhY2snLFxuXHRcdG9wYWNpdHk6IDAuNSxcblx0fSk7XG5cblx0QElucHV0KCkgc2hhZG93UmVmID0gaW5qZWN0Tmd0UmVmPE1lc2g+KCk7XG5cblx0QElucHV0KHsgYWxpYXM6ICdjb2xvclN0b3AnIH0pIHNldCBfY29sb3JTdG9wKGNvbG9yU3RvcDogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgY29sb3JTdG9wIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdmb2cnIH0pIHNldCBfZm9nKGZvZzogYm9vbGVhbikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGZvZyB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnY29sb3InIH0pIHNldCBfY29sb3IoY29sb3I6IFRIUkVFLkNvbG9yUmVwcmVzZW50YXRpb24pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBjb2xvciB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnb3BhY2l0eScgfSkgc2V0IF9vcGFjaXR5KG9wYWNpdHk6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IG9wYWNpdHkgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ2RlcHRoV3JpdGUnIH0pIHNldCBfZGVwdGhXcml0ZShkZXB0aFdyaXRlOiBib29sZWFuKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgZGVwdGhXcml0ZSB9KTtcblx0fVxuXG5cdHByaXZhdGUgY29sb3JTdG9wID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdjb2xvclN0b3AnKTtcblx0cHJpdmF0ZSBjb2xvciA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnY29sb3InKTtcblxuXHRvcGFjaXR5ID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdvcGFjaXR5Jyk7XG5cdGZvZyA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnZm9nJyk7XG5cdGRlcHRoV3JpdGUgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ2RlcHRoV3JpdGUnKTtcblxuXHRjYW52YXMgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgW2NvbG9yU3RvcCwgY29sb3JdID0gW3RoaXMuY29sb3JTdG9wKCksIHRoaXMuY29sb3IoKV07XG5cdFx0Y29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cdFx0Y2FudmFzLndpZHRoID0gMTI4O1xuXHRcdGNhbnZhcy5oZWlnaHQgPSAxMjg7XG5cdFx0Y29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcblx0XHRjb25zdCBncmFkaWVudCA9IGNvbnRleHQuY3JlYXRlUmFkaWFsR3JhZGllbnQoXG5cdFx0XHRjYW52YXMud2lkdGggLyAyLFxuXHRcdFx0Y2FudmFzLmhlaWdodCAvIDIsXG5cdFx0XHQwLFxuXHRcdFx0Y2FudmFzLndpZHRoIC8gMixcblx0XHRcdGNhbnZhcy5oZWlnaHQgLyAyLFxuXHRcdFx0Y2FudmFzLndpZHRoIC8gMixcblx0XHQpO1xuXHRcdGdyYWRpZW50LmFkZENvbG9yU3RvcChjb2xvclN0b3AsIG5ldyBUSFJFRS5Db2xvcihjb2xvcikuZ2V0U3R5bGUoKSk7XG5cdFx0Z3JhZGllbnQuYWRkQ29sb3JTdG9wKDEsICdyZ2JhKDAsMCwwLDApJyk7XG5cdFx0Y29udGV4dC5maWxsU3R5bGUgPSBncmFkaWVudDtcblx0XHRjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG5cdFx0cmV0dXJuIGNhbnZhcztcblx0fSk7XG59XG4iXX0=