angular-three-soba 2.0.0-beta.3 → 2.0.0-beta.30

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 (321) 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 +50 -0
  5. package/abstractions/index.d.ts +2 -7
  6. package/abstractions/text/text.d.ts +10 -5
  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 +50 -23
  11. package/cameras/index.d.ts +0 -1
  12. package/cameras/orthographic-camera/orthographic-camera.d.ts +29 -18
  13. package/cameras/perspective-camera/perspective-camera.d.ts +10 -1
  14. package/controls/orbit-controls/orbit-controls.d.ts +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 +180 -0
  19. package/esm2022/abstractions/index.mjs +3 -8
  20. package/esm2022/abstractions/text/text.mjs +123 -124
  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 +130 -99
  25. package/esm2022/cameras/index.mjs +1 -2
  26. package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +78 -75
  27. package/esm2022/cameras/perspective-camera/perspective-camera.mjs +25 -26
  28. package/esm2022/controls/orbit-controls/orbit-controls.mjs +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 +8 -6
  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 +6 -5
  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 +102 -99
  47. package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +167 -146
  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 +39 -34
  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 +35 -36
  55. package/esm2022/misc/example/example.mjs +161 -0
  56. package/esm2022/misc/fbo/fbo.mjs +37 -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 +143 -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 +210 -0
  64. package/esm2022/misc/trail-texture/inject-trail-texture.mjs +18 -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 +31 -0
  83. package/esm2022/shaders/convolution-material/convolution-material.mjs +1 -1
  84. package/esm2022/shaders/discard-material/discard-material.mjs +1 -1
  85. package/esm2022/shaders/grid-material/grid-material.mjs +77 -0
  86. package/esm2022/shaders/index.mjs +6 -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 +2 -2
  90. package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +4 -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 +17 -25
  94. package/esm2022/shaders/sparkles-material/sparkles-material.mjs +32 -46
  95. package/esm2022/shaders/spot-light-material/spot-light-material.mjs +7 -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 +128 -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/content/content.mjs +15 -0
  133. package/esm2022/utils/index.mjs +2 -0
  134. package/fesm2022/angular-three-soba-abstractions.mjs +514 -1947
  135. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  136. package/fesm2022/angular-three-soba-cameras.mjs +303 -259
  137. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  138. package/fesm2022/angular-three-soba-controls.mjs +108 -83
  139. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  140. package/fesm2022/angular-three-soba-gizmos.mjs +1045 -0
  141. package/fesm2022/angular-three-soba-gizmos.mjs.map +1 -0
  142. package/fesm2022/angular-three-soba-loaders.mjs +129 -119
  143. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  144. package/fesm2022/angular-three-soba-materials.mjs +662 -592
  145. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  146. package/fesm2022/angular-three-soba-misc.mjs +2219 -108
  147. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  148. package/fesm2022/angular-three-soba-modifiers.mjs +71 -0
  149. package/fesm2022/angular-three-soba-modifiers.mjs.map +1 -0
  150. package/fesm2022/angular-three-soba-performances.mjs +957 -0
  151. package/fesm2022/angular-three-soba-performances.mjs.map +1 -0
  152. package/fesm2022/angular-three-soba-shaders.mjs +551 -256
  153. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  154. package/fesm2022/angular-three-soba-staging.mjs +2910 -2573
  155. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  156. package/fesm2022/angular-three-soba-utils.mjs +22 -0
  157. package/fesm2022/angular-three-soba-utils.mjs.map +1 -0
  158. package/gizmos/README.md +3 -0
  159. package/gizmos/gizmo-helper/gizmo-helper.d.ts +69 -0
  160. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +22 -0
  161. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +29 -0
  162. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.d.ts +33 -0
  163. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +10 -0
  164. package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +40 -0
  165. package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +30 -0
  166. package/gizmos/index.d.ts +3 -0
  167. package/loaders/gltf-loader/gltf-loader.d.ts +4 -3
  168. package/loaders/loader/loader.d.ts +19 -17
  169. package/loaders/progress/progress.d.ts +1 -1
  170. package/loaders/texture-loader/texture-loader.d.ts +2 -2
  171. package/materials/index.d.ts +1 -0
  172. package/materials/mesh-distort-material/mesh-distort-material.d.ts +25 -15
  173. package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +74 -56
  174. package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +33 -21
  175. package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +55 -39
  176. package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +19 -10
  177. package/materials/point-material/point-material.d.ts +24 -0
  178. package/metadata.json +1 -0
  179. package/misc/animations/animations.d.ts +6 -4
  180. package/misc/caustics/caustics.d.ts +87 -0
  181. package/misc/decal/decal.d.ts +49 -0
  182. package/misc/depth-buffer/depth-buffer.d.ts +2 -2
  183. package/misc/example/example.d.ts +81 -0
  184. package/misc/fbo/fbo.d.ts +2 -2
  185. package/misc/html/html-wrapper.d.ts +559 -0
  186. package/misc/html/html.d.ts +214 -0
  187. package/misc/index.d.ts +9 -0
  188. package/misc/sampler/sampler.d.ts +67 -0
  189. package/misc/shadow/shadow.d.ts +37 -0
  190. package/misc/stats-gl/stats-gl.d.ts +24 -0
  191. package/misc/trail/trail.d.ts +57 -0
  192. package/misc/trail-texture/inject-trail-texture.d.ts +9 -0
  193. package/misc/trail-texture/trail-texture.d.ts +50 -0
  194. package/modifiers/README.md +3 -0
  195. package/modifiers/curve-modifier/curve-modifier.d.ts +23 -0
  196. package/modifiers/index.d.ts +1 -0
  197. package/package.json +42 -26
  198. package/performances/README.md +3 -0
  199. package/performances/adaptive-dpr/adaptive-dpr.d.ts +14 -0
  200. package/{performance/adaptive → performances/adaptive-events}/adaptive-events.d.ts +3 -0
  201. package/performances/index.d.ts +7 -0
  202. package/performances/instances/instances.d.ts +79 -0
  203. package/{performance → performances}/instances/position-mesh.d.ts +1 -1
  204. package/performances/points/points-input.d.ts +32 -0
  205. package/performances/points/points.d.ts +92 -0
  206. package/performances/points/position-point.d.ts +11 -0
  207. package/performances/segments/segment-object.d.ts +7 -0
  208. package/performances/segments/segments.d.ts +124 -0
  209. package/shaders/grid-material/grid-material.d.ts +37 -0
  210. package/shaders/index.d.ts +5 -2
  211. package/shaders/mesh-distort-material/mesh-distort-material.d.ts +173 -6
  212. package/shaders/mesh-transmission-material/mesh-transmission-material.d.ts +1 -1
  213. package/shaders/shader-material/shader-material.d.ts +2 -2
  214. package/shaders/soft-shadow-material/soft-shadow-material.d.ts +10 -1
  215. package/shaders/sparkles-material/sparkles-material.d.ts +15 -1
  216. package/shaders/spot-light-material/spot-light-material.d.ts +11 -2
  217. package/shaders/star-field-material/star-field-material.d.ts +11 -1
  218. package/shaders/wireframe-material/wireframe-material.d.ts +58 -0
  219. package/staging/accumulative-shadows/accumulative-shadows.d.ts +89 -39
  220. package/staging/accumulative-shadows/randomized-lights.d.ts +41 -28
  221. package/staging/backdrop/backdrop.d.ts +30 -0
  222. package/staging/bb-anchor/bb-anchor.d.ts +27 -0
  223. package/staging/bounds/bounds.d.ts +101 -25
  224. package/staging/camera-shake/camera-shake.d.ts +30 -19
  225. package/staging/center/center.d.ts +43 -35
  226. package/staging/cloud/cloud.d.ts +27 -24
  227. package/staging/contact-shadows/contact-shadows.d.ts +43 -30
  228. package/staging/environment/assets.d.ts +9 -9
  229. package/staging/environment/environment-cube.d.ts +9 -5
  230. package/staging/environment/environment-ground.d.ts +7 -7
  231. package/staging/environment/environment-input.d.ts +38 -38
  232. package/staging/environment/environment-map.d.ts +10 -5
  233. package/staging/environment/environment-portal.d.ts +10 -5
  234. package/staging/environment/environment.d.ts +0 -4
  235. package/staging/environment/utils.d.ts +2 -2
  236. package/staging/float/float.d.ts +15 -11
  237. package/staging/index.d.ts +6 -2
  238. package/staging/matcap-texture/matcap-texture.d.ts +13 -0
  239. package/staging/normal-texture/normal-texture.d.ts +16 -0
  240. package/staging/sky/sky.d.ts +28 -21
  241. package/staging/sparkles/sparkles.d.ts +36 -22
  242. package/staging/spot-light/shadow-mesh-input.d.ts +29 -0
  243. package/staging/spot-light/shadow-mesh.d.ts +37 -0
  244. package/staging/spot-light/spot-light-input.d.ts +25 -25
  245. package/staging/spot-light/spot-light.d.ts +31 -15
  246. package/staging/spot-light/volumetric-mesh.d.ts +15 -9
  247. package/staging/stage/stage.d.ts +89 -65
  248. package/staging/stars/stars.d.ts +28 -17
  249. package/staging/wireframe/wireframe-input.d.ts +65 -0
  250. package/staging/wireframe/wireframe.d.ts +28 -0
  251. package/utils/README.md +3 -0
  252. package/utils/content/content.d.ts +8 -0
  253. package/utils/index.d.ts +1 -0
  254. package/web-types.json +1 -0
  255. package/abstractions/catmull-rom-line/catmull-rom-line.d.ts +0 -25
  256. package/abstractions/cubic-bezier-line/cubic-bezier-line.d.ts +0 -25
  257. package/abstractions/gizmo-helper/gizmo-helper.d.ts +0 -34
  258. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +0 -22
  259. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +0 -30
  260. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +0 -32
  261. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +0 -14
  262. package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +0 -47
  263. package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +0 -40
  264. package/abstractions/line/line-input.d.ts +0 -42
  265. package/abstractions/line/line.d.ts +0 -35
  266. package/abstractions/quadratic-bezier-line/quadratic-bezier-line.d.ts +0 -23
  267. package/esm2022/abstractions/catmull-rom-line/catmull-rom-line.mjs +0 -131
  268. package/esm2022/abstractions/cubic-bezier-line/cubic-bezier-line.mjs +0 -113
  269. package/esm2022/abstractions/gizmo-helper/gizmo-helper.mjs +0 -210
  270. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/constants.mjs +0 -31
  271. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -95
  272. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -155
  273. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +0 -62
  274. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +0 -80
  275. package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -206
  276. package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +0 -273
  277. package/esm2022/abstractions/line/line-input.mjs +0 -113
  278. package/esm2022/abstractions/line/line.mjs +0 -165
  279. package/esm2022/abstractions/quadratic-bezier-line/quadratic-bezier-line.mjs +0 -128
  280. package/esm2022/performance/adaptive/adaptive-dpr.mjs +0 -46
  281. package/esm2022/performance/adaptive/adaptive-events.mjs +0 -31
  282. package/esm2022/performance/angular-three-soba-performance.mjs +0 -5
  283. package/esm2022/performance/detailed/detailed.mjs +0 -61
  284. package/esm2022/performance/index.mjs +0 -7
  285. package/esm2022/performance/instances/instance.mjs +0 -48
  286. package/esm2022/performance/instances/instances.mjs +0 -189
  287. package/esm2022/performance/instances/position-mesh.mjs +0 -52
  288. package/esm2022/performance/stats/stats.mjs +0 -79
  289. package/esm2022/shaders/caustics-material/caustics-material.mjs +0 -128
  290. package/esm2022/shaders/caustics-material/caustics-projection-material.mjs +0 -33
  291. package/esm2022/staging/caustics/caustisc.mjs +0 -384
  292. package/esm2022/staging/spot-light/spot-light-shadow-mesh-input.mjs +0 -57
  293. package/esm2022/staging/spot-light/spot-light-shadow-mesh.mjs +0 -256
  294. package/fesm2022/angular-three-soba-performance.mjs +0 -487
  295. package/fesm2022/angular-three-soba-performance.mjs.map +0 -1
  296. package/performance/README.md +0 -3
  297. package/performance/adaptive/adaptive-dpr.d.ts +0 -8
  298. package/performance/detailed/detailed.d.ts +0 -20
  299. package/performance/index.d.ts +0 -6
  300. package/performance/instances/instance.d.ts +0 -9
  301. package/performance/instances/instances.d.ts +0 -35
  302. package/performance/stats/stats.d.ts +0 -18
  303. package/plugin/generators.json +0 -19
  304. package/plugin/libs/plugin/README.md +0 -11
  305. package/plugin/package.json +0 -9
  306. package/plugin/src/generators/init/compat.d.ts +0 -2
  307. package/plugin/src/generators/init/compat.js +0 -6
  308. package/plugin/src/generators/init/compat.js.map +0 -1
  309. package/plugin/src/generators/init/init.d.ts +0 -4
  310. package/plugin/src/generators/init/init.js +0 -22
  311. package/plugin/src/generators/init/init.js.map +0 -1
  312. package/plugin/src/generators/init/schema.json +0 -6
  313. package/plugin/src/index.d.ts +0 -1
  314. package/plugin/src/index.js +0 -6
  315. package/plugin/src/index.js.map +0 -1
  316. package/staging/caustics/caustisc.d.ts +0 -70
  317. package/staging/spot-light/spot-light-shadow-mesh-input.d.ts +0 -29
  318. package/staging/spot-light/spot-light-shadow-mesh.d.ts +0 -38
  319. /package/{abstractions → gizmos}/gizmo-helper/gizmo-viewcube/constants.d.ts +0 -0
  320. /package/shaders/{caustics-material → caustics}/caustics-material.d.ts +0 -0
  321. /package/shaders/{caustics-material → caustics}/caustics-projection-material.d.ts +0 -0
@@ -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+KCk7XG5cblx0QElucHV0KHsgYWxpYXM6ICdjb2xvclN0b3AnIH0pIHNldCBfY29sb3JTdG9wKGNvbG9yU3RvcDogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgY29sb3JTdG9wIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdmb2cnIH0pIHNldCBfZm9nKGZvZzogYm9vbGVhbikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGZvZyB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnY29sb3InIH0pIHNldCBfY29sb3IoY29sb3I6IFRIUkVFLkNvbG9yUmVwcmVzZW50YXRpb24pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBjb2xvciB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnb3BhY2l0eScgfSkgc2V0IF9vcGFjaXR5KG9wYWNpdHk6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IG9wYWNpdHkgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ2RlcHRoV3JpdGUnIH0pIHNldCBfZGVwdGhXcml0ZShkZXB0aFdyaXRlOiBib29sZWFuKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgZGVwdGhXcml0ZSB9KTtcblx0fVxuXG5cdHByaXZhdGUgY29sb3JTdG9wID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdjb2xvclN0b3AnKTtcblx0cHJpdmF0ZSBjb2xvciA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnY29sb3InKTtcblxuXHRvcGFjaXR5ID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdvcGFjaXR5Jyk7XG5cdGZvZyA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnZm9nJyk7XG5cdGRlcHRoV3JpdGUgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ2RlcHRoV3JpdGUnKTtcblxuXHRjYW52YXMgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgW2NvbG9yU3RvcCwgY29sb3JdID0gW3RoaXMuY29sb3JTdG9wKCksIHRoaXMuY29sb3IoKV07XG5cdFx0Y29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cdFx0Y2FudmFzLndpZHRoID0gMTI4O1xuXHRcdGNhbnZhcy5oZWlnaHQgPSAxMjg7XG5cdFx0Y29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcblx0XHRjb25zdCBncmFkaWVudCA9IGNvbnRleHQuY3JlYXRlUmFkaWFsR3JhZGllbnQoXG5cdFx0XHRjYW52YXMud2lkdGggLyAyLFxuXHRcdFx0Y2FudmFzLmhlaWdodCAvIDIsXG5cdFx0XHQwLFxuXHRcdFx0Y2FudmFzLndpZHRoIC8gMixcblx0XHRcdGNhbnZhcy5oZWlnaHQgLyAyLFxuXHRcdFx0Y2FudmFzLndpZHRoIC8gMixcblx0XHQpO1xuXHRcdGdyYWRpZW50LmFkZENvbG9yU3RvcChjb2xvclN0b3AsIG5ldyBUSFJFRS5Db2xvcihjb2xvcikuZ2V0U3R5bGUoKSk7XG5cdFx0Z3JhZGllbnQuYWRkQ29sb3JTdG9wKDEsICdyZ2JhKDAsMCwwLDApJyk7XG5cdFx0Y29udGV4dC5maWxsU3R5bGUgPSBncmFkaWVudDtcblx0XHRjb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG5cdFx0cmV0dXJuIGNhbnZhcztcblx0fSk7XG59XG5cbi8vXG4vL1xuLy8gdHlwZSBQcm9wcyA9IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snbWVzaCddICYge1xuLy8gICBjb2xvclN0b3A/OiBudW1iZXJcbi8vICAgZm9nPzogYm9vbGVhblxuLy8gICBjb2xvcj86IENvbG9yIHwgbnVtYmVyIHwgc3RyaW5nXG4vLyAgIG9wYWNpdHk/OiBudW1iZXJcbi8vICAgZGVwdGhXcml0ZT86IGJvb2xlYW5cbi8vIH1cbi8vXG4vLyBleHBvcnQgY29uc3QgU2hhZG93ID0gUmVhY3QuZm9yd2FyZFJlZihcbi8vICAgKFxuLy8gICAgIHsgZm9nID0gZmFsc2UsIHJlbmRlck9yZGVyLCBkZXB0aFdyaXRlID0gZmFsc2UsIGNvbG9yU3RvcCA9IDAuMCwgY29sb3IgPSAnYmxhY2snLCBvcGFjaXR5ID0gMC41LCAuLi5wcm9wcyB9OiBQcm9wcyxcbi8vICAgICByZWZcbi8vICAgKSA9PiB7XG4vLyAgICAgY29uc3QgY2FudmFzID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4vLyAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxuLy8gICAgICAgY2FudmFzLndpZHRoID0gMTI4XG4vLyAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTI4XG4vLyAgICAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJykgYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEXG4vLyAgICAgICBjb25zdCBncmFkaWVudCA9IGNvbnRleHQuY3JlYXRlUmFkaWFsR3JhZGllbnQoXG4vLyAgICAgICAgIGNhbnZhcy53aWR0aCAvIDIsXG4vLyAgICAgICAgIGNhbnZhcy5oZWlnaHQgLyAyLFxuLy8gICAgICAgICAwLFxuLy8gICAgICAgICBjYW52YXMud2lkdGggLyAyLFxuLy8gICAgICAgICBjYW52YXMuaGVpZ2h0IC8gMixcbi8vICAgICAgICAgY2FudmFzLndpZHRoIC8gMlxuLy8gICAgICAgKVxuLy8gICAgICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKGNvbG9yU3RvcCwgbmV3IENvbG9yKGNvbG9yKS5nZXRTdHlsZSgpKVxuLy8gICAgICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDEsICdyZ2JhKDAsMCwwLDApJylcbi8vICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gZ3JhZGllbnRcbi8vICAgICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KVxuLy8gICAgICAgcmV0dXJuIGNhbnZhc1xuLy8gICAgIH0sIFtjb2xvciwgY29sb3JTdG9wXSlcbi8vICAgICByZXR1cm4gKFxuLy8gICAgICAgPG1lc2ggcmVuZGVyT3JkZXI9e3JlbmRlck9yZGVyfSByZWY9e3JlZiBhcyBSZWFjdC5NdXRhYmxlUmVmT2JqZWN0PE1lc2g+fSByb3RhdGlvbi14PXstTWF0aC5QSSAvIDJ9IHsuLi5wcm9wc30+XG4vLyAgICAgICAgIDxwbGFuZUdlb21ldHJ5IC8+XG4vLyAgICAgICAgIDxtZXNoQmFzaWNNYXRlcmlhbCB0cmFuc3BhcmVudCBvcGFjaXR5PXtvcGFjaXR5fSBmb2c9e2ZvZ30gZGVwdGhXcml0ZT17ZGVwdGhXcml0ZX0gc2lkZT17RG91YmxlU2lkZX0+XG4vLyAgICAgICAgICAgPGNhbnZhc1RleHR1cmUgYXR0YWNoPVwibWFwXCIgYXJncz17W2NhbnZhc119IC8+XG4vLyAgICAgICAgIDwvbWVzaEJhc2ljTWF0ZXJpYWw+XG4vLyAgICAgICA8L21lc2g+XG4vLyAgICAgKVxuLy8gICB9XG4vLyApXG4iXX0=
@@ -0,0 +1,61 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { Directive, Input, computed, effect, inject } from '@angular/core';
3
+ import { addAfterEffect, addEffect, injectNgtStore, is, signalStore } from 'angular-three';
4
+ import Stats from 'stats-gl';
5
+ import * as i0 from "@angular/core";
6
+ export class NgtsStatsGL {
7
+ set _parent(parent) {
8
+ this.inputs.set({ parent });
9
+ }
10
+ set _containerClass(containerClass) {
11
+ this.inputs.set({ containerClass });
12
+ }
13
+ set _config(config) {
14
+ this.inputs.set({ config });
15
+ }
16
+ constructor() {
17
+ this.inputs = signalStore();
18
+ this.document = inject(DOCUMENT);
19
+ this.store = injectNgtStore();
20
+ this.gl = this.store.select('gl');
21
+ this.config = this.inputs.select('config');
22
+ this.parent = this.inputs.select('parent');
23
+ this.containerClass = this.inputs.select('containerClass');
24
+ this.stats = computed(() => {
25
+ const [config, gl] = [this.config() || {}, this.gl()];
26
+ const stats = new Stats(config);
27
+ stats.init(gl.domElement);
28
+ return stats;
29
+ });
30
+ effect((onCleanup) => {
31
+ const [parent, stats, containerClass] = [this.parent(), this.stats(), this.containerClass()];
32
+ const node = parent ? (is.ref(parent) ? parent.nativeElement : parent) : this.document.body;
33
+ node.appendChild(stats.container);
34
+ if (containerClass)
35
+ stats.container.classList.add(...containerClass.split(' ').filter(Boolean));
36
+ const begin = addEffect(() => stats.begin());
37
+ const end = addAfterEffect(() => stats.end());
38
+ onCleanup(() => {
39
+ node.removeChild(stats.container);
40
+ begin();
41
+ end();
42
+ });
43
+ });
44
+ }
45
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: NgtsStatsGL, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
46
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.3", type: NgtsStatsGL, isStandalone: true, selector: "ngts-stats-gl", inputs: { _parent: ["parent", "_parent"], _containerClass: ["containerClass", "_containerClass"], _config: ["config", "_config"] }, ngImport: i0 }); }
47
+ }
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: NgtsStatsGL, decorators: [{
49
+ type: Directive,
50
+ args: [{ selector: 'ngts-stats-gl', standalone: true }]
51
+ }], ctorParameters: function () { return []; }, propDecorators: { _parent: [{
52
+ type: Input,
53
+ args: [{ alias: 'parent' }]
54
+ }], _containerClass: [{
55
+ type: Input,
56
+ args: [{ alias: 'containerClass' }]
57
+ }], _config: [{
58
+ type: Input,
59
+ args: [{ alias: 'config' }]
60
+ }] } });
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHMtZ2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWlzYy9zcmMvc3RhdHMtZ2wvc3RhdHMtZ2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQ3hHLE9BQU8sS0FBSyxNQUFNLFVBQVUsQ0FBQzs7QUFTN0IsTUFBTSxPQUFPLFdBQVc7SUFHdkIsSUFBZ0MsT0FBTyxDQUFDLE1BQTJCO1FBQ2xFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBd0MsZUFBZSxDQUFDLGNBQXNCO1FBQzdFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBZ0MsT0FBTyxDQUFDLE1BQWtDO1FBQ3pFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBaUJEO1FBN0JRLFdBQU0sR0FBRyxXQUFXLEVBQW9CLENBQUM7UUFjekMsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QixVQUFLLEdBQUcsY0FBYyxFQUFFLENBQUM7UUFDekIsT0FBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTdCLFdBQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0QyxXQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsbUJBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXRELFVBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzdCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzFCLE9BQU8sS0FBSyxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7UUFHRixNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNwQixNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7WUFDN0YsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUM1RixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNsQyxJQUFJLGNBQWM7Z0JBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUVoRyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDN0MsTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ2xDLEtBQUssRUFBRSxDQUFDO2dCQUNSLEdBQUcsRUFBRSxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7OEdBN0NXLFdBQVc7a0dBQVgsV0FBVzs7MkZBQVgsV0FBVztrQkFEdkIsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTswRUFJekIsT0FBTztzQkFBdEMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7Z0JBSWMsZUFBZTtzQkFBdEQsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRTtnQkFJRixPQUFPO3NCQUF0QyxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYWRkQWZ0ZXJFZmZlY3QsIGFkZEVmZmVjdCwgaW5qZWN0Tmd0U3RvcmUsIGlzLCBzaWduYWxTdG9yZSwgdHlwZSBOZ3RSZWYgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCBTdGF0cyBmcm9tICdzdGF0cy1nbCc7XG5cbmV4cG9ydCB0eXBlIE5ndHNTdGF0c0dMU3RhdGUgPSB7XG5cdHBhcmVudD86IE5ndFJlZjxIVE1MRWxlbWVudD47XG5cdGNvbnRhaW5lckNsYXNzPzogc3RyaW5nO1xuXHRjb25maWc/OiBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8dHlwZW9mIFN0YXRzPlswXTtcbn07XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ25ndHMtc3RhdHMtZ2wnLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgTmd0c1N0YXRzR0wge1xuXHRwcml2YXRlIGlucHV0cyA9IHNpZ25hbFN0b3JlPE5ndHNTdGF0c0dMU3RhdGU+KCk7XG5cblx0QElucHV0KHsgYWxpYXM6ICdwYXJlbnQnIH0pIHNldCBfcGFyZW50KHBhcmVudDogTmd0UmVmPEhUTUxFbGVtZW50Pikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHBhcmVudCB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnY29udGFpbmVyQ2xhc3MnIH0pIHNldCBfY29udGFpbmVyQ2xhc3MoY29udGFpbmVyQ2xhc3M6IHN0cmluZykge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGNvbnRhaW5lckNsYXNzIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdjb25maWcnIH0pIHNldCBfY29uZmlnKGNvbmZpZzogTmd0c1N0YXRzR0xTdGF0ZVsnY29uZmlnJ10pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBjb25maWcgfSk7XG5cdH1cblxuXHRwcml2YXRlIGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblx0cHJpdmF0ZSBzdG9yZSA9IGluamVjdE5ndFN0b3JlKCk7XG5cdHByaXZhdGUgZ2wgPSB0aGlzLnN0b3JlLnNlbGVjdCgnZ2wnKTtcblxuXHRwcml2YXRlIGNvbmZpZyA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnY29uZmlnJyk7XG5cdHByaXZhdGUgcGFyZW50ID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdwYXJlbnQnKTtcblx0cHJpdmF0ZSBjb250YWluZXJDbGFzcyA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnY29udGFpbmVyQ2xhc3MnKTtcblxuXHRwcml2YXRlIHN0YXRzID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IFtjb25maWcsIGdsXSA9IFt0aGlzLmNvbmZpZygpIHx8IHt9LCB0aGlzLmdsKCldO1xuXHRcdGNvbnN0IHN0YXRzID0gbmV3IFN0YXRzKGNvbmZpZyk7XG5cdFx0c3RhdHMuaW5pdChnbC5kb21FbGVtZW50KTtcblx0XHRyZXR1cm4gc3RhdHM7XG5cdH0pO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGVmZmVjdCgob25DbGVhbnVwKSA9PiB7XG5cdFx0XHRjb25zdCBbcGFyZW50LCBzdGF0cywgY29udGFpbmVyQ2xhc3NdID0gW3RoaXMucGFyZW50KCksIHRoaXMuc3RhdHMoKSwgdGhpcy5jb250YWluZXJDbGFzcygpXTtcblx0XHRcdGNvbnN0IG5vZGUgPSBwYXJlbnQgPyAoaXMucmVmKHBhcmVudCkgPyBwYXJlbnQubmF0aXZlRWxlbWVudCA6IHBhcmVudCkgOiB0aGlzLmRvY3VtZW50LmJvZHk7XG5cdFx0XHRub2RlLmFwcGVuZENoaWxkKHN0YXRzLmNvbnRhaW5lcik7XG5cdFx0XHRpZiAoY29udGFpbmVyQ2xhc3MpIHN0YXRzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKC4uLmNvbnRhaW5lckNsYXNzLnNwbGl0KCcgJykuZmlsdGVyKEJvb2xlYW4pKTtcblxuXHRcdFx0Y29uc3QgYmVnaW4gPSBhZGRFZmZlY3QoKCkgPT4gc3RhdHMuYmVnaW4oKSk7XG5cdFx0XHRjb25zdCBlbmQgPSBhZGRBZnRlckVmZmVjdCgoKSA9PiBzdGF0cy5lbmQoKSk7XG5cdFx0XHRvbkNsZWFudXAoKCkgPT4ge1xuXHRcdFx0XHRub2RlLnJlbW92ZUNoaWxkKHN0YXRzLmNvbnRhaW5lcik7XG5cdFx0XHRcdGJlZ2luKCk7XG5cdFx0XHRcdGVuZCgpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
@@ -0,0 +1,210 @@
1
+ import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, computed, effect, runInInjectionContext, } from '@angular/core';
2
+ import { NgtPortal, NgtPortalContent, extend, injectBeforeRender, injectNgtRef, injectNgtStore, is, signalStore, } from 'angular-three';
3
+ import { MeshLineGeometry, MeshLineMaterial } from 'meshline';
4
+ import { assertInjector } from 'ngxtension/assert-injector';
5
+ import * as THREE from 'three';
6
+ import { Group, Mesh } from 'three';
7
+ import * as i0 from "@angular/core";
8
+ const shiftLeft = (collection, steps = 1) => {
9
+ collection.set(collection.subarray(steps));
10
+ collection.fill(-Infinity, -steps);
11
+ return collection;
12
+ };
13
+ const defaultSettings = {
14
+ width: 0.2,
15
+ length: 1,
16
+ decay: 1,
17
+ local: false,
18
+ stride: 0,
19
+ interval: 1,
20
+ };
21
+ export function injectNgtsTrail(targetFactory, settingsFactory, { injector } = {}) {
22
+ injector = assertInjector(injectNgtsTrail, injector);
23
+ return runInInjectionContext(injector, () => {
24
+ const points = injectNgtRef();
25
+ let frameCount = 0;
26
+ const prevPosition = new THREE.Vector3();
27
+ const worldPosition = new THREE.Vector3();
28
+ const _target = computed(() => {
29
+ const _target = targetFactory();
30
+ if (is.ref(_target))
31
+ return _target.nativeElement;
32
+ return _target;
33
+ });
34
+ const _settings = computed(() => ({ ...defaultSettings, ...settingsFactory() }));
35
+ const _length = computed(() => _settings().length);
36
+ effect(() => {
37
+ const [target, length] = [_target(), _length()];
38
+ if (target) {
39
+ points.nativeElement = Float32Array.from({ length: length * 10 * 3 }, (_, i) => target.position.getComponent(i % 3));
40
+ }
41
+ });
42
+ injectBeforeRender(() => {
43
+ const [target, _points, { local, decay, stride, interval }] = [
44
+ _target(),
45
+ points.nativeElement,
46
+ _settings(),
47
+ ];
48
+ if (!target)
49
+ return;
50
+ if (!_points)
51
+ return;
52
+ if (frameCount === 0) {
53
+ let newPosition;
54
+ if (local) {
55
+ newPosition = target.position;
56
+ }
57
+ else {
58
+ target.getWorldPosition(worldPosition);
59
+ newPosition = worldPosition;
60
+ }
61
+ const steps = 1 * decay;
62
+ for (let i = 0; i < steps; i++) {
63
+ if (newPosition.distanceTo(prevPosition) < stride)
64
+ continue;
65
+ shiftLeft(_points, 3);
66
+ _points.set(newPosition.toArray(), _points.length - 3);
67
+ }
68
+ prevPosition.copy(newPosition);
69
+ }
70
+ frameCount++;
71
+ frameCount = frameCount % interval;
72
+ });
73
+ return points;
74
+ });
75
+ }
76
+ extend({ Group, Mesh });
77
+ export class NgtsTrail {
78
+ set _color(color) {
79
+ this.inputs.set({ color });
80
+ }
81
+ set _attenuation(attenuation) {
82
+ this.inputs.set({ attenuation });
83
+ }
84
+ set _target(target) {
85
+ this.inputs.set({ target });
86
+ }
87
+ set _settings(settings) {
88
+ this.inputs.set({ settings: { ...defaultSettings, ...settings } });
89
+ }
90
+ constructor() {
91
+ this.inputs = signalStore({ settings: defaultSettings, color: 'hotpink' });
92
+ this.trailRef = injectNgtRef();
93
+ this.groupRef = injectNgtRef();
94
+ this.children = this.groupRef.children('both');
95
+ this.store = injectNgtStore();
96
+ this.size = this.store.select('size');
97
+ this.target = this.inputs.select('target');
98
+ this.settings = this.inputs.select('settings');
99
+ this.width = computed(() => this.settings().width);
100
+ this.color = this.inputs.select('color');
101
+ this.attenuation = this.inputs.select('attenuation');
102
+ this.anchor = computed(() => {
103
+ const target = this.target();
104
+ if (target)
105
+ return target;
106
+ const group = this.groupRef.nativeElement;
107
+ if (group) {
108
+ return group.children.find((child) => child instanceof THREE.Object3D) || null;
109
+ }
110
+ return null;
111
+ });
112
+ this.points = injectNgtsTrail(this.anchor, this.settings);
113
+ this.scene = this.store.select('scene');
114
+ this.geometry = new MeshLineGeometry();
115
+ this.material = computed(() => {
116
+ const [width, color, size] = [this.width(), this.color(), this.size()];
117
+ const m = new MeshLineMaterial({
118
+ lineWidth: 0.1 * width,
119
+ color,
120
+ sizeAttenuation: 1,
121
+ resolution: new THREE.Vector2(size.width, size.height),
122
+ });
123
+ // TODO: understand this first
124
+ // Get and apply first <meshLineMaterial /> from children
125
+ // let matOverride: React.ReactElement | undefined;
126
+ // if (children) {
127
+ // if (Array.isArray(children)) {
128
+ // matOverride = children.find((child: React.ReactNode) => {
129
+ // const c = child as React.ReactElement;
130
+ // return typeof c.type === 'string' && c.type === 'meshLineMaterial';
131
+ // }) as React.ReactElement | undefined;
132
+ // } else {
133
+ // const c = children as React.ReactElement;
134
+ // if (typeof c.type === 'string' && c.type === 'meshLineMaterial') {
135
+ // matOverride = c;
136
+ // }
137
+ // }
138
+ // }
139
+ // if (typeof matOverride?.props === 'object') {
140
+ // m.setValues(matOverride.props);
141
+ // }
142
+ return m;
143
+ });
144
+ this.setMaterialSize();
145
+ this.beforeRender();
146
+ }
147
+ setMaterialSize() {
148
+ effect(() => {
149
+ const [material, size] = [this.material(), this.size()];
150
+ material.uniforms['resolution'].value.set(size.width, size.height);
151
+ });
152
+ }
153
+ beforeRender() {
154
+ injectBeforeRender(() => {
155
+ const [points, attenuation] = [this.points.nativeElement, this.attenuation()];
156
+ if (!points)
157
+ return;
158
+ this.geometry.setPoints(points, attenuation);
159
+ });
160
+ }
161
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: NgtsTrail, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
162
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.3", type: NgtsTrail, isStandalone: true, selector: "ngts-trail", inputs: { trailRef: "trailRef", _color: ["color", "_color"], _attenuation: ["attenuation", "_attenuation"], _target: ["target", "_target"], _settings: ["settings", "_settings"] }, ngImport: i0, template: `
163
+ <ngt-group>
164
+ <ngt-portal [container]="scene()" [autoRender]="false">
165
+ <ng-template ngtPortalContent>
166
+ <ngt-mesh [ref]="trailRef" [geometry]="geometry" [material]="material()" />
167
+ </ng-template>
168
+ </ngt-portal>
169
+ <ngt-group [ref]="groupRef">
170
+ <ng-content />
171
+ </ngt-group>
172
+ </ngt-group>
173
+ `, isInline: true, dependencies: [{ kind: "component", type: NgtPortal, selector: "ngt-portal", inputs: ["container", "state", "autoRender", "autoRenderPriority"], outputs: ["beforeRender"] }, { kind: "directive", type: NgtPortalContent, selector: "ng-template[ngtPortalContent]" }] }); }
174
+ }
175
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: NgtsTrail, decorators: [{
176
+ type: Component,
177
+ args: [{
178
+ selector: 'ngts-trail',
179
+ standalone: true,
180
+ template: `
181
+ <ngt-group>
182
+ <ngt-portal [container]="scene()" [autoRender]="false">
183
+ <ng-template ngtPortalContent>
184
+ <ngt-mesh [ref]="trailRef" [geometry]="geometry" [material]="material()" />
185
+ </ng-template>
186
+ </ngt-portal>
187
+ <ngt-group [ref]="groupRef">
188
+ <ng-content />
189
+ </ngt-group>
190
+ </ngt-group>
191
+ `,
192
+ imports: [NgtPortal, NgtPortalContent],
193
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
194
+ }]
195
+ }], ctorParameters: function () { return []; }, propDecorators: { trailRef: [{
196
+ type: Input
197
+ }], _color: [{
198
+ type: Input,
199
+ args: [{ alias: 'color' }]
200
+ }], _attenuation: [{
201
+ type: Input,
202
+ args: [{ alias: 'attenuation' }]
203
+ }], _target: [{
204
+ type: Input,
205
+ args: [{ alias: 'target' }]
206
+ }], _settings: [{
207
+ type: Input,
208
+ args: [{ alias: 'settings' }]
209
+ }] } });
210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhaWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWlzYy9zcmMvdHJhaWwvdHJhaWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLHNCQUFzQixFQUN0QixTQUFTLEVBQ1QsS0FBSyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04scUJBQXFCLEdBRXJCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLE1BQU0sRUFDTixrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLGNBQWMsRUFDZCxFQUFFLEVBQ0YsV0FBVyxHQUVYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxPQUFPLENBQUM7O0FBRXBDLE1BQU0sU0FBUyxHQUFHLENBQUMsVUFBd0IsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFnQixFQUFFO0lBQ3ZFLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzNDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxPQUFPLFVBQVUsQ0FBQztBQUNuQixDQUFDLENBQUM7QUFnQkYsTUFBTSxlQUFlLEdBQXNCO0lBQzFDLEtBQUssRUFBRSxHQUFHO0lBQ1YsTUFBTSxFQUFFLENBQUM7SUFDVCxLQUFLLEVBQUUsQ0FBQztJQUNSLEtBQUssRUFBRSxLQUFLO0lBQ1osTUFBTSxFQUFFLENBQUM7SUFDVCxRQUFRLEVBQUUsQ0FBQztDQUNYLENBQUM7QUFFRixNQUFNLFVBQVUsZUFBZSxDQUM5QixhQUFrRCxFQUNsRCxlQUFpRCxFQUNqRCxFQUFFLFFBQVEsS0FBOEIsRUFBRTtJQUUxQyxRQUFRLEdBQUcsY0FBYyxDQUFDLGVBQWUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNyRCxPQUFPLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDM0MsTUFBTSxNQUFNLEdBQUcsWUFBWSxFQUFnQixDQUFDO1FBQzVDLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUVuQixNQUFNLFlBQVksR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN6QyxNQUFNLGFBQWEsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUUxQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzdCLE1BQU0sT0FBTyxHQUFHLGFBQWEsRUFBRSxDQUFDO1lBQ2hDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7Z0JBQUUsT0FBTyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQ2xELE9BQU8sT0FBTyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLGVBQWUsRUFBRSxHQUFHLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVuRCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDaEQsSUFBSSxNQUFNLEVBQUU7Z0JBQ1gsTUFBTSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDOUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUNuQyxDQUFDO2FBQ0Y7UUFDRixDQUFDLENBQUMsQ0FBQztRQUVILGtCQUFrQixDQUFDLEdBQUcsRUFBRTtZQUN2QixNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUc7Z0JBQzdELE9BQU8sRUFBRTtnQkFDVCxNQUFNLENBQUMsYUFBYTtnQkFDcEIsU0FBUyxFQUFFO2FBQ1gsQ0FBQztZQUNGLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU87WUFDcEIsSUFBSSxDQUFDLE9BQU87Z0JBQUUsT0FBTztZQUVyQixJQUFJLFVBQVUsS0FBSyxDQUFDLEVBQUU7Z0JBQ3JCLElBQUksV0FBMEIsQ0FBQztnQkFDL0IsSUFBSSxLQUFLLEVBQUU7b0JBQ1YsV0FBVyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7aUJBQzlCO3FCQUFNO29CQUNOLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDdkMsV0FBVyxHQUFHLGFBQWEsQ0FBQztpQkFDNUI7Z0JBRUQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDeEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDL0IsSUFBSSxXQUFXLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU07d0JBQUUsU0FBUztvQkFFNUQsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztpQkFDdkQ7Z0JBQ0QsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUMvQjtZQUVELFVBQVUsRUFBRSxDQUFDO1lBQ2IsVUFBVSxHQUFHLFVBQVUsR0FBRyxRQUFRLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQztJQUNmLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQWVELE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBb0J4QixNQUFNLE9BQU8sU0FBUztJQUtyQixJQUErQixNQUFNLENBQUMsS0FBZ0M7UUFDckUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFxQyxZQUFZLENBQUMsV0FBc0M7UUFDdkYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFnQyxPQUFPLENBQUMsTUFBOEI7UUFDckUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFrQyxTQUFTLENBQUMsUUFBb0M7UUFDL0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLGVBQWUsRUFBRSxHQUFHLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBOEREO1FBaEZRLFdBQU0sR0FBRyxXQUFXLENBQWlCLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUVyRixhQUFRLEdBQUcsWUFBWSxFQUFRLENBQUM7UUFrQnpDLGFBQVEsR0FBRyxZQUFZLEVBQVMsQ0FBQztRQUV6QixhQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFMUMsVUFBSyxHQUFHLGNBQWMsRUFBRSxDQUFDO1FBQ3pCLFNBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVqQyxXQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsYUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFDLFVBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlDLFVBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxnQkFBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWhELFdBQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzlCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3QixJQUFJLE1BQU07Z0JBQUUsT0FBTyxNQUFNLENBQUM7WUFDMUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7WUFDMUMsSUFBSSxLQUFLLEVBQUU7Z0JBQ1YsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxZQUFZLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUM7YUFDL0U7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDO1FBRUssV0FBTSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU3RCxVQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsYUFBUSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUNsQyxhQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN4QixNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFFdkUsTUFBTSxDQUFDLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQztnQkFDOUIsU0FBUyxFQUFFLEdBQUcsR0FBRyxLQUFLO2dCQUN0QixLQUFLO2dCQUNMLGVBQWUsRUFBRSxDQUFDO2dCQUNsQixVQUFVLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQzthQUN0RCxDQUFDLENBQUM7WUFFSCw4QkFBOEI7WUFDOUIseURBQXlEO1lBQ3pELG1EQUFtRDtZQUNuRCxrQkFBa0I7WUFDbEIsa0NBQWtDO1lBQ2xDLDhEQUE4RDtZQUM5RCw0Q0FBNEM7WUFDNUMseUVBQXlFO1lBQ3pFLDBDQUEwQztZQUMxQyxZQUFZO1lBQ1osOENBQThDO1lBQzlDLHVFQUF1RTtZQUN2RSxzQkFBc0I7WUFDdEIsTUFBTTtZQUNOLEtBQUs7WUFDTCxJQUFJO1lBQ0osZ0RBQWdEO1lBQ2hELG1DQUFtQztZQUNuQyxJQUFJO1lBRUosT0FBTyxDQUFDLENBQUM7UUFDVixDQUFDLENBQUMsQ0FBQztRQUdGLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVPLGVBQWU7UUFDdEIsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNYLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDeEQsUUFBUSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BFLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVPLFlBQVk7UUFDbkIsa0JBQWtCLENBQUMsR0FBRyxFQUFFO1lBQ3ZCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUM5RSxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPO1lBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7OEdBbkdXLFNBQVM7a0dBQVQsU0FBUywwUEFmWDs7Ozs7Ozs7Ozs7RUFXVCw0REFDUyxTQUFTLHNKQUFFLGdCQUFnQjs7MkZBR3pCLFNBQVM7a0JBbEJyQixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxZQUFZO29CQUN0QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7Ozs7OztFQVdUO29CQUNELE9BQU8sRUFBRSxDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQztvQkFDdEMsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ2pDOzBFQUlTLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRXlCLE1BQU07c0JBQXBDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUlZLFlBQVk7c0JBQWhELEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO2dCQUlDLE9BQU87c0JBQXRDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO2dCQUlRLFNBQVM7c0JBQTFDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0Q29tcG9uZW50LFxuXHRJbnB1dCxcblx0Y29tcHV0ZWQsXG5cdGVmZmVjdCxcblx0cnVuSW5JbmplY3Rpb25Db250ZXh0LFxuXHR0eXBlIEluamVjdG9yLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG5cdE5ndFBvcnRhbCxcblx0Tmd0UG9ydGFsQ29udGVudCxcblx0ZXh0ZW5kLFxuXHRpbmplY3RCZWZvcmVSZW5kZXIsXG5cdGluamVjdE5ndFJlZixcblx0aW5qZWN0Tmd0U3RvcmUsXG5cdGlzLFxuXHRzaWduYWxTdG9yZSxcblx0dHlwZSBOZ3RSZWYsXG59IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgTWVzaExpbmVHZW9tZXRyeSwgTWVzaExpbmVNYXRlcmlhbCB9IGZyb20gJ21lc2hsaW5lJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgR3JvdXAsIE1lc2ggfSBmcm9tICd0aHJlZSc7XG5cbmNvbnN0IHNoaWZ0TGVmdCA9IChjb2xsZWN0aW9uOiBGbG9hdDMyQXJyYXksIHN0ZXBzID0gMSk6IEZsb2F0MzJBcnJheSA9PiB7XG5cdGNvbGxlY3Rpb24uc2V0KGNvbGxlY3Rpb24uc3ViYXJyYXkoc3RlcHMpKTtcblx0Y29sbGVjdGlvbi5maWxsKC1JbmZpbml0eSwgLXN0ZXBzKTtcblx0cmV0dXJuIGNvbGxlY3Rpb247XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RzVHJhaWxTZXR0aW5ncyA9IHtcblx0d2lkdGg6IG51bWJlcjtcblx0bGVuZ3RoOiBudW1iZXI7XG5cdGRlY2F5OiBudW1iZXI7XG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gdXNlIHRoZSB0YXJnZXQncyB3b3JsZCBvciBsb2NhbCBwb3NpdGlvbnNcblx0ICovXG5cdGxvY2FsOiBib29sZWFuO1xuXHQvLyBNaW4gZGlzdGFuY2UgYmV0d2VlbiBwcmV2aW91cyBhbmQgY3VycmVudCBwb2ludHNcblx0c3RyaWRlOiBudW1iZXI7XG5cdC8vIE51bWJlciBvZiBmcmFtZXMgdG8gd2FpdCBiZWZvcmUgbmV4dCBjYWxjdWxhdGlvblxuXHRpbnRlcnZhbDogbnVtYmVyO1xufTtcblxuY29uc3QgZGVmYXVsdFNldHRpbmdzOiBOZ3RzVHJhaWxTZXR0aW5ncyA9IHtcblx0d2lkdGg6IDAuMixcblx0bGVuZ3RoOiAxLFxuXHRkZWNheTogMSxcblx0bG9jYWw6IGZhbHNlLFxuXHRzdHJpZGU6IDAsXG5cdGludGVydmFsOiAxLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdE5ndHNUcmFpbChcblx0dGFyZ2V0RmFjdG9yeTogKCkgPT4gTmd0UmVmPFRIUkVFLk9iamVjdDNEPiB8IG51bGwsXG5cdHNldHRpbmdzRmFjdG9yeTogKCkgPT4gUGFydGlhbDxOZ3RzVHJhaWxTZXR0aW5ncz4sXG5cdHsgaW5qZWN0b3IgfTogeyBpbmplY3Rvcj86IEluamVjdG9yIH0gPSB7fSxcbikge1xuXHRpbmplY3RvciA9IGFzc2VydEluamVjdG9yKGluamVjdE5ndHNUcmFpbCwgaW5qZWN0b3IpO1xuXHRyZXR1cm4gcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCAoKSA9PiB7XG5cdFx0Y29uc3QgcG9pbnRzID0gaW5qZWN0Tmd0UmVmPEZsb2F0MzJBcnJheT4oKTtcblx0XHRsZXQgZnJhbWVDb3VudCA9IDA7XG5cblx0XHRjb25zdCBwcmV2UG9zaXRpb24gPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuXHRcdGNvbnN0IHdvcmxkUG9zaXRpb24gPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuXG5cdFx0Y29uc3QgX3RhcmdldCA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IF90YXJnZXQgPSB0YXJnZXRGYWN0b3J5KCk7XG5cdFx0XHRpZiAoaXMucmVmKF90YXJnZXQpKSByZXR1cm4gX3RhcmdldC5uYXRpdmVFbGVtZW50O1xuXHRcdFx0cmV0dXJuIF90YXJnZXQ7XG5cdFx0fSk7XG5cblx0XHRjb25zdCBfc2V0dGluZ3MgPSBjb21wdXRlZCgoKSA9PiAoeyAuLi5kZWZhdWx0U2V0dGluZ3MsIC4uLnNldHRpbmdzRmFjdG9yeSgpIH0pKTtcblx0XHRjb25zdCBfbGVuZ3RoID0gY29tcHV0ZWQoKCkgPT4gX3NldHRpbmdzKCkubGVuZ3RoKTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBbdGFyZ2V0LCBsZW5ndGhdID0gW190YXJnZXQoKSwgX2xlbmd0aCgpXTtcblx0XHRcdGlmICh0YXJnZXQpIHtcblx0XHRcdFx0cG9pbnRzLm5hdGl2ZUVsZW1lbnQgPSBGbG9hdDMyQXJyYXkuZnJvbSh7IGxlbmd0aDogbGVuZ3RoICogMTAgKiAzIH0sIChfLCBpKSA9PlxuXHRcdFx0XHRcdHRhcmdldC5wb3NpdGlvbi5nZXRDb21wb25lbnQoaSAlIDMpLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKCgpID0+IHtcblx0XHRcdGNvbnN0IFt0YXJnZXQsIF9wb2ludHMsIHsgbG9jYWwsIGRlY2F5LCBzdHJpZGUsIGludGVydmFsIH1dID0gW1xuXHRcdFx0XHRfdGFyZ2V0KCksXG5cdFx0XHRcdHBvaW50cy5uYXRpdmVFbGVtZW50LFxuXHRcdFx0XHRfc2V0dGluZ3MoKSxcblx0XHRcdF07XG5cdFx0XHRpZiAoIXRhcmdldCkgcmV0dXJuO1xuXHRcdFx0aWYgKCFfcG9pbnRzKSByZXR1cm47XG5cblx0XHRcdGlmIChmcmFtZUNvdW50ID09PSAwKSB7XG5cdFx0XHRcdGxldCBuZXdQb3NpdGlvbjogVEhSRUUuVmVjdG9yMztcblx0XHRcdFx0aWYgKGxvY2FsKSB7XG5cdFx0XHRcdFx0bmV3UG9zaXRpb24gPSB0YXJnZXQucG9zaXRpb247XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGFyZ2V0LmdldFdvcmxkUG9zaXRpb24od29ybGRQb3NpdGlvbik7XG5cdFx0XHRcdFx0bmV3UG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3Qgc3RlcHMgPSAxICogZGVjYXk7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc3RlcHM7IGkrKykge1xuXHRcdFx0XHRcdGlmIChuZXdQb3NpdGlvbi5kaXN0YW5jZVRvKHByZXZQb3NpdGlvbikgPCBzdHJpZGUpIGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0c2hpZnRMZWZ0KF9wb2ludHMsIDMpO1xuXHRcdFx0XHRcdF9wb2ludHMuc2V0KG5ld1Bvc2l0aW9uLnRvQXJyYXkoKSwgX3BvaW50cy5sZW5ndGggLSAzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRwcmV2UG9zaXRpb24uY29weShuZXdQb3NpdGlvbik7XG5cdFx0XHR9XG5cblx0XHRcdGZyYW1lQ291bnQrKztcblx0XHRcdGZyYW1lQ291bnQgPSBmcmFtZUNvdW50ICUgaW50ZXJ2YWw7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gcG9pbnRzO1xuXHR9KTtcbn1cblxuZXhwb3J0IHR5cGUgTmd0c1RyYWlsU3RhdGUgPSB7XG5cdGNvbG9yOiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uO1xuXHRhdHRlbnVhdGlvbjogKHdpZHRoOiBudW1iZXIpID0+IG51bWJlcjtcblx0c2V0dGluZ3M6IE5ndHNUcmFpbFNldHRpbmdzO1xuXHR0YXJnZXQ/OiBOZ3RSZWY8VEhSRUUuT2JqZWN0M0Q+O1xufTtcblxuZGVjbGFyZSBnbG9iYWwge1xuXHRpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcblx0XHQnbmd0cy10cmFpbCc6IE5ndHNUcmFpbFN0YXRlO1xuXHR9XG59XG5cbmV4dGVuZCh7IEdyb3VwLCBNZXNoIH0pO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLXRyYWlsJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LWdyb3VwPlxuXHRcdFx0PG5ndC1wb3J0YWwgW2NvbnRhaW5lcl09XCJzY2VuZSgpXCIgW2F1dG9SZW5kZXJdPVwiZmFsc2VcIj5cblx0XHRcdFx0PG5nLXRlbXBsYXRlIG5ndFBvcnRhbENvbnRlbnQ+XG5cdFx0XHRcdFx0PG5ndC1tZXNoIFtyZWZdPVwidHJhaWxSZWZcIiBbZ2VvbWV0cnldPVwiZ2VvbWV0cnlcIiBbbWF0ZXJpYWxdPVwibWF0ZXJpYWwoKVwiIC8+XG5cdFx0XHRcdDwvbmctdGVtcGxhdGU+XG5cdFx0XHQ8L25ndC1wb3J0YWw+XG5cdFx0XHQ8bmd0LWdyb3VwIFtyZWZdPVwiZ3JvdXBSZWZcIj5cblx0XHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHRcdDwvbmd0LWdyb3VwPlxuXHRcdDwvbmd0LWdyb3VwPlxuXHRgLFxuXHRpbXBvcnRzOiBbTmd0UG9ydGFsLCBOZ3RQb3J0YWxDb250ZW50XSxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzVHJhaWwge1xuXHRwcml2YXRlIGlucHV0cyA9IHNpZ25hbFN0b3JlPE5ndHNUcmFpbFN0YXRlPih7IHNldHRpbmdzOiBkZWZhdWx0U2V0dGluZ3MsIGNvbG9yOiAnaG90cGluaycgfSk7XG5cblx0QElucHV0KCkgdHJhaWxSZWYgPSBpbmplY3ROZ3RSZWY8TWVzaD4oKTtcblxuXHRASW5wdXQoeyBhbGlhczogJ2NvbG9yJyB9KSBzZXQgX2NvbG9yKGNvbG9yOiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgY29sb3IgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ2F0dGVudWF0aW9uJyB9KSBzZXQgX2F0dGVudWF0aW9uKGF0dGVudWF0aW9uOiAod2lkdGg6IG51bWJlcikgPT4gbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgYXR0ZW51YXRpb24gfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ3RhcmdldCcgfSkgc2V0IF90YXJnZXQodGFyZ2V0OiBOZ3RSZWY8VEhSRUUuT2JqZWN0M0Q+KSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgdGFyZ2V0IH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdzZXR0aW5ncycgfSkgc2V0IF9zZXR0aW5ncyhzZXR0aW5nczogUGFydGlhbDxOZ3RzVHJhaWxTZXR0aW5ncz4pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBzZXR0aW5nczogeyAuLi5kZWZhdWx0U2V0dGluZ3MsIC4uLnNldHRpbmdzIH0gfSk7XG5cdH1cblxuXHRncm91cFJlZiA9IGluamVjdE5ndFJlZjxHcm91cD4oKTtcblxuXHRwcml2YXRlIGNoaWxkcmVuID0gdGhpcy5ncm91cFJlZi5jaGlsZHJlbignYm90aCcpO1xuXG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3ROZ3RTdG9yZSgpO1xuXHRwcml2YXRlIHNpemUgPSB0aGlzLnN0b3JlLnNlbGVjdCgnc2l6ZScpO1xuXG5cdHByaXZhdGUgdGFyZ2V0ID0gdGhpcy5pbnB1dHMuc2VsZWN0KCd0YXJnZXQnKTtcblx0cHJpdmF0ZSBzZXR0aW5ncyA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnc2V0dGluZ3MnKTtcblx0cHJpdmF0ZSB3aWR0aCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2V0dGluZ3MoKS53aWR0aCk7XG5cdHByaXZhdGUgY29sb3IgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ2NvbG9yJyk7XG5cdHByaXZhdGUgYXR0ZW51YXRpb24gPSB0aGlzLmlucHV0cy5zZWxlY3QoJ2F0dGVudWF0aW9uJyk7XG5cblx0cHJpdmF0ZSBhbmNob3IgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gdGhpcy50YXJnZXQoKTtcblx0XHRpZiAodGFyZ2V0KSByZXR1cm4gdGFyZ2V0O1xuXHRcdGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cFJlZi5uYXRpdmVFbGVtZW50O1xuXHRcdGlmIChncm91cCkge1xuXHRcdFx0cmV0dXJuIGdyb3VwLmNoaWxkcmVuLmZpbmQoKGNoaWxkKSA9PiBjaGlsZCBpbnN0YW5jZW9mIFRIUkVFLk9iamVjdDNEKSB8fCBudWxsO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fSk7XG5cblx0cHJpdmF0ZSBwb2ludHMgPSBpbmplY3ROZ3RzVHJhaWwodGhpcy5hbmNob3IsIHRoaXMuc2V0dGluZ3MpO1xuXG5cdHNjZW5lID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3NjZW5lJyk7XG5cdGdlb21ldHJ5ID0gbmV3IE1lc2hMaW5lR2VvbWV0cnkoKTtcblx0bWF0ZXJpYWwgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgW3dpZHRoLCBjb2xvciwgc2l6ZV0gPSBbdGhpcy53aWR0aCgpLCB0aGlzLmNvbG9yKCksIHRoaXMuc2l6ZSgpXTtcblxuXHRcdGNvbnN0IG0gPSBuZXcgTWVzaExpbmVNYXRlcmlhbCh7XG5cdFx0XHRsaW5lV2lkdGg6IDAuMSAqIHdpZHRoLFxuXHRcdFx0Y29sb3IsXG5cdFx0XHRzaXplQXR0ZW51YXRpb246IDEsXG5cdFx0XHRyZXNvbHV0aW9uOiBuZXcgVEhSRUUuVmVjdG9yMihzaXplLndpZHRoLCBzaXplLmhlaWdodCksXG5cdFx0fSk7XG5cblx0XHQvLyBUT0RPOiB1bmRlcnN0YW5kIHRoaXMgZmlyc3Rcblx0XHQvLyBHZXQgYW5kIGFwcGx5IGZpcnN0IDxtZXNoTGluZU1hdGVyaWFsIC8+IGZyb20gY2hpbGRyZW5cblx0XHQvLyBsZXQgbWF0T3ZlcnJpZGU6IFJlYWN0LlJlYWN0RWxlbWVudCB8IHVuZGVmaW5lZDtcblx0XHQvLyBpZiAoY2hpbGRyZW4pIHtcblx0XHQvLyBcdGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuXHRcdC8vIFx0XHRtYXRPdmVycmlkZSA9IGNoaWxkcmVuLmZpbmQoKGNoaWxkOiBSZWFjdC5SZWFjdE5vZGUpID0+IHtcblx0XHQvLyBcdFx0XHRjb25zdCBjID0gY2hpbGQgYXMgUmVhY3QuUmVhY3RFbGVtZW50O1xuXHRcdC8vIFx0XHRcdHJldHVybiB0eXBlb2YgYy50eXBlID09PSAnc3RyaW5nJyAmJiBjLnR5cGUgPT09ICdtZXNoTGluZU1hdGVyaWFsJztcblx0XHQvLyBcdFx0fSkgYXMgUmVhY3QuUmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkO1xuXHRcdC8vIFx0fSBlbHNlIHtcblx0XHQvLyBcdFx0Y29uc3QgYyA9IGNoaWxkcmVuIGFzIFJlYWN0LlJlYWN0RWxlbWVudDtcblx0XHQvLyBcdFx0aWYgKHR5cGVvZiBjLnR5cGUgPT09ICdzdHJpbmcnICYmIGMudHlwZSA9PT0gJ21lc2hMaW5lTWF0ZXJpYWwnKSB7XG5cdFx0Ly8gXHRcdFx0bWF0T3ZlcnJpZGUgPSBjO1xuXHRcdC8vIFx0XHR9XG5cdFx0Ly8gXHR9XG5cdFx0Ly8gfVxuXHRcdC8vIGlmICh0eXBlb2YgbWF0T3ZlcnJpZGU/LnByb3BzID09PSAnb2JqZWN0Jykge1xuXHRcdC8vIFx0bS5zZXRWYWx1ZXMobWF0T3ZlcnJpZGUucHJvcHMpO1xuXHRcdC8vIH1cblxuXHRcdHJldHVybiBtO1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnNldE1hdGVyaWFsU2l6ZSgpO1xuXHRcdHRoaXMuYmVmb3JlUmVuZGVyKCk7XG5cdH1cblxuXHRwcml2YXRlIHNldE1hdGVyaWFsU2l6ZSgpIHtcblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0Y29uc3QgW21hdGVyaWFsLCBzaXplXSA9IFt0aGlzLm1hdGVyaWFsKCksIHRoaXMuc2l6ZSgpXTtcblx0XHRcdG1hdGVyaWFsLnVuaWZvcm1zWydyZXNvbHV0aW9uJ10udmFsdWUuc2V0KHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgYmVmb3JlUmVuZGVyKCkge1xuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoKSA9PiB7XG5cdFx0XHRjb25zdCBbcG9pbnRzLCBhdHRlbnVhdGlvbl0gPSBbdGhpcy5wb2ludHMubmF0aXZlRWxlbWVudCwgdGhpcy5hdHRlbnVhdGlvbigpXTtcblx0XHRcdGlmICghcG9pbnRzKSByZXR1cm47XG5cdFx0XHR0aGlzLmdlb21ldHJ5LnNldFBvaW50cyhwb2ludHMsIGF0dGVudWF0aW9uKTtcblx0XHR9KTtcblx0fVxufVxuIl19
@@ -0,0 +1,18 @@
1
+ import { Injector, computed, runInInjectionContext } from '@angular/core';
2
+ import { injectBeforeRender } from 'angular-three';
3
+ import { assertInjector } from 'ngxtension/assert-injector';
4
+ import { TrailTexture } from './trail-texture';
5
+ export function injectNgtsTrailTexture(trailConfigFn, { injector } = {}) {
6
+ injector = assertInjector(injectNgtsTrailTexture, injector);
7
+ return runInInjectionContext(injector, () => {
8
+ const config = computed(() => trailConfigFn() || {});
9
+ const trail = computed(() => new TrailTexture(config()));
10
+ const texture = computed(() => trail().texture);
11
+ injectBeforeRender(({ delta }) => {
12
+ trail().update(delta);
13
+ });
14
+ const onMove = (ev) => trail().addTouch(ev.uv);
15
+ return { texture, onMove };
16
+ });
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0LXRyYWlsLXRleHR1cmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWlzYy9zcmMvdHJhaWwtdGV4dHVyZS9pbmplY3QtdHJhaWwtdGV4dHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQUUsa0JBQWtCLEVBQXNCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsWUFBWSxFQUFvQixNQUFNLGlCQUFpQixDQUFDO0FBRWpFLE1BQU0sVUFBVSxzQkFBc0IsQ0FDckMsYUFBeUMsRUFDekMsRUFBRSxRQUFRLEtBQThCLEVBQUU7SUFFMUMsUUFBUSxHQUFHLGNBQWMsQ0FBQyxzQkFBc0IsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM1RCxPQUFPLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDM0MsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWhELGtCQUFrQixDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2hDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sTUFBTSxHQUFHLENBQUMsRUFBK0IsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFHLENBQUMsQ0FBQztRQUU3RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzVCLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yLCBjb21wdXRlZCwgcnVuSW5JbmplY3Rpb25Db250ZXh0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpbmplY3RCZWZvcmVSZW5kZXIsIHR5cGUgTmd0VGhyZWVFdmVudCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0b3IgfSBmcm9tICduZ3h0ZW5zaW9uL2Fzc2VydC1pbmplY3Rvcic7XG5pbXBvcnQgeyBUcmFpbFRleHR1cmUsIHR5cGUgVHJhaWxDb25maWcgfSBmcm9tICcuL3RyYWlsLXRleHR1cmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Tmd0c1RyYWlsVGV4dHVyZShcblx0dHJhaWxDb25maWdGbjogKCkgPT4gUGFydGlhbDxUcmFpbENvbmZpZz4sXG5cdHsgaW5qZWN0b3IgfTogeyBpbmplY3Rvcj86IEluamVjdG9yIH0gPSB7fSxcbikge1xuXHRpbmplY3RvciA9IGFzc2VydEluamVjdG9yKGluamVjdE5ndHNUcmFpbFRleHR1cmUsIGluamVjdG9yKTtcblx0cmV0dXJuIHJ1bkluSW5qZWN0aW9uQ29udGV4dChpbmplY3RvciwgKCkgPT4ge1xuXHRcdGNvbnN0IGNvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHRyYWlsQ29uZmlnRm4oKSB8fCB7fSk7XG5cdFx0Y29uc3QgdHJhaWwgPSBjb21wdXRlZCgoKSA9PiBuZXcgVHJhaWxUZXh0dXJlKGNvbmZpZygpKSk7XG5cdFx0Y29uc3QgdGV4dHVyZSA9IGNvbXB1dGVkKCgpID0+IHRyYWlsKCkudGV4dHVyZSk7XG5cblx0XHRpbmplY3RCZWZvcmVSZW5kZXIoKHsgZGVsdGEgfSkgPT4ge1xuXHRcdFx0dHJhaWwoKS51cGRhdGUoZGVsdGEpO1xuXHRcdH0pO1xuXG5cdFx0Y29uc3Qgb25Nb3ZlID0gKGV2OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pID0+IHRyYWlsKCkuYWRkVG91Y2goZXYudXYhKTtcblxuXHRcdHJldHVybiB7IHRleHR1cmUsIG9uTW92ZSB9O1xuXHR9KTtcbn1cbiJdfQ==
@@ -0,0 +1,106 @@
1
+ import { Texture } from 'three';
2
+ // default ease
3
+ const easeCircleOut = (x) => Math.sqrt(1 - Math.pow(x - 1, 2));
4
+ // smooth new sample (measurement) based on previous sample (current)
5
+ function smoothAverage(current, measurement, smoothing = 0.9) {
6
+ return measurement * smoothing + current * (1.0 - smoothing);
7
+ }
8
+ export class TrailTexture {
9
+ constructor({ size = 256, maxAge = 750, radius = 0.3, intensity = 0.2, interpolate = 0, smoothing = 0, minForce = 0.3, blend = 'screen', // source-over is canvas default. Others are slower
10
+ ease = easeCircleOut, } = {}) {
11
+ this.size = size;
12
+ this.maxAge = maxAge;
13
+ this.radius = radius;
14
+ this.intensity = intensity;
15
+ this.ease = ease;
16
+ this.interpolate = interpolate;
17
+ this.smoothing = smoothing;
18
+ this.minForce = minForce;
19
+ this.blend = blend;
20
+ this.trail = [];
21
+ this.force = 0;
22
+ this.initTexture();
23
+ }
24
+ initTexture() {
25
+ this.canvas = document.createElement('canvas');
26
+ this.canvas.width = this.canvas.height = this.size;
27
+ this.ctx = this.canvas.getContext('2d');
28
+ this.ctx.fillStyle = 'black';
29
+ this.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);
30
+ this.texture = new Texture(this.canvas);
31
+ this.canvas.id = 'touchTexture';
32
+ this.canvas.style.width = this.canvas.style.height = `${this.canvas.width}px`;
33
+ }
34
+ update(delta) {
35
+ this.clear();
36
+ // age points
37
+ this.trail.forEach((point, i) => {
38
+ point.age += delta * 1000;
39
+ // remove old
40
+ if (point.age > this.maxAge) {
41
+ this.trail.splice(i, 1);
42
+ }
43
+ });
44
+ // reset force when empty (when smoothing)
45
+ if (!this.trail.length)
46
+ this.force = 0;
47
+ this.trail.forEach((point) => {
48
+ this.drawTouch(point);
49
+ });
50
+ this.texture.needsUpdate = true;
51
+ }
52
+ clear() {
53
+ this.ctx.globalCompositeOperation = 'source-over';
54
+ this.ctx.fillStyle = 'black';
55
+ this.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);
56
+ }
57
+ addTouch(point) {
58
+ const last = this.trail[this.trail.length - 1];
59
+ if (last) {
60
+ const dx = last.x - point.x;
61
+ const dy = last.y - point.y;
62
+ const dd = dx * dx + dy * dy;
63
+ const force = Math.max(this.minForce, Math.min(dd * 10000, 1));
64
+ this.force = smoothAverage(force, this.force, this.smoothing);
65
+ if (!!this.interpolate) {
66
+ const lines = Math.ceil(dd / Math.pow((this.radius * 0.5) / this.interpolate, 2));
67
+ if (lines > 1) {
68
+ for (let i = 1; i < lines; i++) {
69
+ this.trail.push({
70
+ x: last.x - (dx / lines) * i,
71
+ y: last.y - (dy / lines) * i,
72
+ age: 0,
73
+ force,
74
+ });
75
+ }
76
+ }
77
+ }
78
+ }
79
+ this.trail.push({ x: point.x, y: point.y, age: 0, force: this.force });
80
+ }
81
+ drawTouch(point) {
82
+ const pos = {
83
+ x: point.x * this.size,
84
+ y: (1 - point.y) * this.size,
85
+ };
86
+ let intensity = 1;
87
+ if (point.age < this.maxAge * 0.3) {
88
+ intensity = this.ease(point.age / (this.maxAge * 0.3));
89
+ }
90
+ else {
91
+ intensity = this.ease(1 - (point.age - this.maxAge * 0.3) / (this.maxAge * 0.7));
92
+ }
93
+ intensity *= point.force;
94
+ // apply blending
95
+ this.ctx.globalCompositeOperation = this.blend;
96
+ const radius = this.size * this.radius * intensity;
97
+ const grd = this.ctx.createRadialGradient(pos.x, pos.y, Math.max(0, radius * 0.25), pos.x, pos.y, Math.max(0, radius));
98
+ grd.addColorStop(0, `rgba(255, 255, 255, ${this.intensity})`);
99
+ grd.addColorStop(1, `rgba(0, 0, 0, 0.0)`);
100
+ this.ctx.beginPath();
101
+ this.ctx.fillStyle = grd;
102
+ this.ctx.arc(pos.x, pos.y, Math.max(0, radius), 0, Math.PI * 2);
103
+ this.ctx.fill();
104
+ }
105
+ }
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhaWwtdGV4dHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9taXNjL3NyYy90cmFpbC10ZXh0dXJlL3RyYWlsLXRleHR1cmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQThCaEMsZUFBZTtBQUNmLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUV2RSxxRUFBcUU7QUFDckUsU0FBUyxhQUFhLENBQUMsT0FBZSxFQUFFLFdBQW1CLEVBQUUsU0FBUyxHQUFHLEdBQUc7SUFDM0UsT0FBTyxXQUFXLEdBQUcsU0FBUyxHQUFHLE9BQU8sR0FBRyxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQsTUFBTSxPQUFPLFlBQVk7SUFnQnhCLFlBQVksRUFDWCxJQUFJLEdBQUcsR0FBRyxFQUNWLE1BQU0sR0FBRyxHQUFHLEVBQ1osTUFBTSxHQUFHLEdBQUcsRUFDWixTQUFTLEdBQUcsR0FBRyxFQUNmLFdBQVcsR0FBRyxDQUFDLEVBQ2YsU0FBUyxHQUFHLENBQUMsRUFDYixRQUFRLEdBQUcsR0FBRyxFQUNkLEtBQUssR0FBRyxRQUFRLEVBQUUsbURBQW1EO0lBQ3JFLElBQUksR0FBRyxhQUFhLE1BQ0osRUFBRTtRQUNsQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxH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LEtBQUssQ0FBQztRQUUvQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1FBQ25ELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQ3hDLEdBQUcsQ0FBQyxDQUFDLEVBQ0wsR0FBRyxDQUFDLENBQUMsRUFDTCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQzFCLEdBQUcsQ0FBQyxDQUFDLEVBQ0wsR0FBRyxDQUFDLENBQUMsRUFDTCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FDbkIsQ0FBQztRQUNGLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLHVCQUF1QixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUM5RCxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBRTFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2pCLENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRleHR1cmUgfSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCB0eXBlIFBvaW50ID0ge1xuXHR4OiBudW1iZXI7XG5cdHk6IG51bWJlcjtcblx0YWdlOiBudW1iZXI7XG5cdGZvcmNlOiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBUcmFpbENvbmZpZyA9IHtcblx0LyoqIHRleHR1cmUgc2l6ZSAoZGVmYXVsdDogMjU2eDI1NikgKi9cblx0c2l6ZT86IG51bWJlcjtcblx0LyoqIE1heCBhZ2UgKG1zKSBvZiB0cmFpbCBwb2ludHMgKGRlZmF1bHQ6IDc1MCkgKi9cblx0bWF4QWdlPzogbnVtYmVyO1xuXHQvKiogVHJhaWwgcmFkaXVzIChkZWZhdWx0OiAwLjMpICovXG5cdHJhZGl1cz86IG51bWJlcjtcblx0LyoqIENhbnZhcyB0cmFpbCBvcGFjaXR5IChkZWZhdWx0OiAwLjIpICovXG5cdGludGVuc2l0eT86IG51bWJlcjtcblx0LyoqIEFkZCBwb2ludHMgaW4gYmV0d2VlbiBzbG93IHBvaW50ZXIgZXZlbnRzIChkZWZhdWx0OiAwKSAqL1xuXHRpbnRlcnBvbGF0ZT86IG51bWJlcjtcblx0LyoqIE1vdmluZyBhdmVyYWdlIG9mIHBvaW50ZXIgZm9yY2UgKGRlZmF1bHQ6IDApICovXG5cdHNtb290aGluZz86IG51bWJlcjtcblx0LyoqIE1pbmltdW0gcG9pbnRlciBmb3JjZSAoZGVmYXVsdDogMC4zKSAqL1xuXHRtaW5Gb3JjZT86IG51bWJlcjtcblx0LyoqIEJsZW5kIG1vZGUgKGRlZmF1bHQ6ICdzY3JlZW4nKSAqL1xuXHRibGVuZD86IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFsnZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uJ107XG5cdC8qKiBFYXNpbmcgKGRlZmF1bHQ6IGVhc2VDaXJjT3V0KSAqL1xuXHRlYXNlPzogKHQ6IG51bWJlcikgPT4gbnVtYmVyO1xufTtcblxuLy8gZGVmYXVsdCBlYXNlXG5jb25zdCBlYXNlQ2lyY2xlT3V0ID0gKHg6IG51bWJlcikgPT4gTWF0aC5zcXJ0KDEgLSBNYXRoLnBvdyh4IC0gMSwgMikpO1xuXG4vLyBzbW9vdGggbmV3IHNhbXBsZSAobWVhc3VyZW1lbnQpIGJhc2VkIG9uIHByZXZpb3VzIHNhbXBsZSAoY3VycmVudClcbmZ1bmN0aW9uIHNtb290aEF2ZXJhZ2UoY3VycmVudDogbnVtYmVyLCBtZWFzdXJlbWVudDogbnVtYmVyLCBzbW9vdGhpbmcgPSAwLjkpIHtcblx0cmV0dXJuIG1lYXN1cmVtZW50ICogc21vb3RoaW5nICsgY3VycmVudCAqICgxLjAgLSBzbW9vdGhpbmcpO1xufVxuXG5leHBvcnQgY2xhc3MgVHJhaWxUZXh0dXJlIHtcblx0dHJhaWw6IFBvaW50W107XG5cdGNhbnZhcyE6IEhUTUxDYW52YXNFbGVtZW50O1xuXHRjdHghOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG5cdHRleHR1cmUhOiBUZXh0dXJlO1xuXHRmb3JjZTogbnVtYmVyO1xuXHRzaXplOiBudW1iZXI7XG5cdG1heEFnZTogbnVtYmVyO1xuXHRyYWRpdXM6IG51bWJlcjtcblx0aW50ZW5zaXR5OiBudW1iZXI7XG5cdGVhc2U6ICh0OiBudW1iZXIpID0+IG51bWJlcjtcblx0bWluRm9yY2U6IG51bWJlcjtcblx0aW50ZXJwb2xhdGU6IG51bWJlcjtcblx0c21vb3RoaW5nOiBudW1iZXI7XG5cdGJsZW5kOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRbJ2dsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiddO1xuXG5cdGNvbnN0cnVjdG9yKHtcblx0XHRzaXplID0gMjU2LFxuXHRcdG1heEFnZSA9IDc1MCxcblx0XHRyYWRpdXMgPSAwLjMsXG5cdFx0aW50ZW5zaXR5ID0gMC4yLFxuXHRcdGludGVycG9sYXRlID0gMCxcblx0XHRzbW9vdGhpbmcgPSAwLFxuXHRcdG1pbkZvcmNlID0gMC4zLFxuXHRcdGJsZW5kID0gJ3NjcmVlbicsIC8vIHNvdXJjZS1vdmVyIGlzIGNhbnZhcyBkZWZhdWx0LiBPdGhlcnMgYXJlIHNsb3dlclxuXHRcdGVhc2UgPSBlYXNlQ2lyY2xlT3V0LFxuXHR9OiBUcmFpbENvbmZpZyA9IHt9KSB7XG5cdFx0dGhpcy5zaXplID0gc2l6ZTtcblx0XHR0aGlzLm1heEFnZSA9IG1heEFnZTtcblx0XHR0aGlzLnJhZGl1cyA9IHJhZGl1cztcblx0XHR0aGlzLmludGVuc2l0eSA9IGludGVuc2l0eTtcblx0XHR0aGlzLmVhc2UgPSBlYXNlO1xuXHRcdHRoaXMuaW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZTtcblx0XHR0aGlzLnNtb290aGluZyA9IHNtb290aGluZztcblx0XHR0aGlzLm1pbkZvcmNlID0gbWluRm9yY2U7XG5cdFx0dGhpcy5ibGVuZCA9IGJsZW5kIGFzIEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbjtcblxuXHRcdHRoaXMudHJhaWwgPSBbXTtcblx0XHR0aGlzLmZvcmNlID0gMDtcblx0XHR0aGlzLmluaXRUZXh0dXJlKCk7XG5cdH1cblxuXHRpbml0VGV4dHVyZSgpIHtcblx0XHR0aGlzLmNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXHRcdHRoaXMuY2FudmFzLndpZHRoID0gdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5zaXplO1xuXHRcdHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKSE7XG5cdFx0dGhpcy5jdHguZmlsbFN0eWxlID0gJ2JsYWNrJztcblx0XHR0aGlzLmN0eC5maWxsUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcblxuXHRcdHRoaXMudGV4dHVyZSA9IG5ldyBUZXh0dXJlKHRoaXMuY2FudmFzKTtcblxuXHRcdHRoaXMuY2FudmFzLmlkID0gJ3RvdWNoVGV4dHVyZSc7XG5cdFx0dGhpcy5jYW52YXMuc3R5bGUud2lkdGggPSB0aGlzLmNhbnZhcy5zdHlsZS5oZWlnaHQgPSBgJHt0aGlzLmNhbnZhcy53aWR0aH1weGA7XG5cdH1cblxuXHR1cGRhdGUoZGVsdGE6IG51bWJlcikge1xuXHRcdHRoaXMuY2xlYXIoKTtcblxuXHRcdC8vIGFnZSBwb2ludHNcblx0XHR0aGlzLnRyYWlsLmZvckVhY2goKHBvaW50LCBpKSA9PiB7XG5cdFx0XHRwb2ludC5hZ2UgKz0gZGVsdGEgKiAxMDAwO1xuXHRcdFx0Ly8gcmVtb3ZlIG9sZFxuXHRcdFx0aWYgKHBvaW50LmFnZSA+IHRoaXMubWF4QWdlKSB7XG5cdFx0XHRcdHRoaXMudHJhaWwuc3BsaWNlKGksIDEpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gcmVzZXQgZm9yY2Ugd2hlbiBlbXB0eSAod2hlbiBzbW9vdGhpbmcpXG5cdFx0aWYgKCF0aGlzLnRyYWlsLmxlbmd0aCkgdGhpcy5mb3JjZSA9IDA7XG5cblx0XHR0aGlzLnRyYWlsLmZvckVhY2goKHBvaW50KSA9PiB7XG5cdFx0XHR0aGlzLmRyYXdUb3VjaChwb2ludCk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHR9XG5cblx0Y2xlYXIoKSB7XG5cdFx0dGhpcy5jdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ3NvdXJjZS1vdmVyJztcblx0XHR0aGlzLmN0eC5maWxsU3R5bGUgPSAnYmxhY2snO1xuXHRcdHRoaXMuY3R4LmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuXHR9XG5cblx0YWRkVG91Y2gocG9pbnQ6IFBpY2s8UG9pbnQsICd4JyB8ICd5Jz4pIHtcblx0XHRjb25zdCBsYXN0ID0gdGhpcy50cmFpbFt0aGlzLnRyYWlsLmxlbmd0aCAtIDFdO1xuXG5cdFx0aWYgKGxhc3QpIHtcblx0XHRcdGNvbnN0IGR4ID0gbGFzdC54IC0gcG9pbnQueDtcblx0XHRcdGNvbnN0IGR5ID0gbGFzdC55IC0gcG9pbnQueTtcblx0XHRcdGNvbnN0IGRkID0gZHggKiBkeCArIGR5ICogZHk7XG5cblx0XHRcdGNvbnN0IGZvcmNlID0gTWF0aC5tYXgodGhpcy5taW5Gb3JjZSwgTWF0aC5taW4oZGQgKiAxMDAwMCwgMSkpO1xuXG5cdFx0XHR0aGlzLmZvcmNlID0gc21vb3RoQXZlcmFnZShmb3JjZSwgdGhpcy5mb3JjZSwgdGhpcy5zbW9vdGhpbmcpO1xuXG5cdFx0XHRpZiAoISF0aGlzLmludGVycG9sYXRlKSB7XG5cdFx0XHRcdGNvbnN0IGxpbmVzID0gTWF0aC5jZWlsKGRkIC8gTWF0aC5wb3coKHRoaXMucmFkaXVzICogMC41KSAvIHRoaXMuaW50ZXJwb2xhdGUsIDIpKTtcblxuXHRcdFx0XHRpZiAobGluZXMgPiAxKSB7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDE7IGkgPCBsaW5lczsgaSsrKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnRyYWlsLnB1c2goe1xuXHRcdFx0XHRcdFx0XHR4OiBsYXN0LnggLSAoZHggLyBsaW5lcykgKiBpLFxuXHRcdFx0XHRcdFx0XHR5OiBsYXN0LnkgLSAoZHkgLyBsaW5lcykgKiBpLFxuXHRcdFx0XHRcdFx0XHRhZ2U6IDAsXG5cdFx0XHRcdFx0XHRcdGZvcmNlLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMudHJhaWwucHVzaCh7IHg6IHBvaW50LngsIHk6IHBvaW50LnksIGFnZTogMCwgZm9yY2U6IHRoaXMuZm9yY2UgfSk7XG5cdH1cblxuXHRkcmF3VG91Y2gocG9pbnQ6IFBvaW50KSB7XG5cdFx0Y29uc3QgcG9zID0ge1xuXHRcdFx0eDogcG9pbnQueCAqIHRoaXMuc2l6ZSxcblx0XHRcdHk6ICgxIC0gcG9pbnQueSkgKiB0aGlzLnNpemUsXG5cdFx0fTtcblxuXHRcdGxldCBpbnRlbnNpdHkgPSAxO1xuXHRcdGlmIChwb2ludC5hZ2UgPCB0aGlzLm1heEFnZSAqIDAuMykge1xuXHRcdFx0aW50ZW5zaXR5ID0gdGhpcy5lYXNlKHBvaW50LmFnZSAvICh0aGlzLm1heEFnZSAqIDAuMykpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbnRlbnNpdHkgPSB0aGlzLmVhc2UoMSAtIChwb2ludC5hZ2UgLSB0aGlzLm1heEFnZSAqIDAuMykgLyAodGhpcy5tYXhBZ2UgKiAwLjcpKTtcblx0XHR9XG5cblx0XHRpbnRlbnNpdHkgKj0gcG9pbnQuZm9yY2U7XG5cblx0XHQvLyBhcHBseSBibGVuZGluZ1xuXHRcdHRoaXMuY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHRoaXMuYmxlbmQ7XG5cblx0XHRjb25zdCByYWRpdXMgPSB0aGlzLnNpemUgKiB0aGlzLnJhZGl1cyAqIGludGVuc2l0eTtcblx0XHRjb25zdCBncmQgPSB0aGlzLmN0eC5jcmVhdGVSYWRpYWxHcmFkaWVudChcblx0XHRcdHBvcy54LFxuXHRcdFx0cG9zLnksXG5cdFx0XHRNYXRoLm1heCgwLCByYWRpdXMgKiAwLjI1KSxcblx0XHRcdHBvcy54LFxuXHRcdFx0cG9zLnksXG5cdFx0XHRNYXRoLm1heCgwLCByYWRpdXMpLFxuXHRcdCk7XG5cdFx0Z3JkLmFkZENvbG9yU3RvcCgwLCBgcmdiYSgyNTUsIDI1NSwgMjU1LCAke3RoaXMuaW50ZW5zaXR5fSlgKTtcblx0XHRncmQuYWRkQ29sb3JTdG9wKDEsIGByZ2JhKDAsIDAsIDAsIDAuMClgKTtcblxuXHRcdHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuXHRcdHRoaXMuY3R4LmZpbGxTdHlsZSA9IGdyZDtcblx0XHR0aGlzLmN0eC5hcmMocG9zLngsIHBvcy55LCBNYXRoLm1heCgwLCByYWRpdXMpLCAwLCBNYXRoLlBJICogMik7XG5cdFx0dGhpcy5jdHguZmlsbCgpO1xuXHR9XG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS1zb2JhLW1vZGlmaWVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9tb2RpZmllcnMvc3JjL2FuZ3VsYXItdGhyZWUtc29iYS1tb2RpZmllcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=