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

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 +11 -7
  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 +31 -12
  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 +129 -99
  25. package/esm2022/cameras/index.mjs +1 -2
  26. package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +78 -75
  27. package/esm2022/cameras/perspective-camera/perspective-camera.mjs +25 -26
  28. package/esm2022/controls/orbit-controls/orbit-controls.mjs +105 -85
  29. package/esm2022/gizmos/angular-three-soba-gizmos.mjs +5 -0
  30. package/esm2022/gizmos/gizmo-helper/gizmo-helper.mjs +197 -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 +150 -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 +3 -6
  40. package/esm2022/loaders/loader/loader.mjs +92 -87
  41. package/esm2022/loaders/progress/progress.mjs +29 -29
  42. package/esm2022/loaders/texture-loader/texture-loader.mjs +4 -4
  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 +36 -32
  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 +33 -35
  55. package/esm2022/misc/example/example.mjs +160 -0
  56. package/esm2022/misc/fbo/fbo.mjs +35 -35
  57. package/esm2022/misc/html/html-wrapper.mjs +478 -0
  58. package/esm2022/misc/html/html.mjs +304 -0
  59. package/esm2022/misc/index.mjs +10 -1
  60. package/esm2022/misc/sampler/sampler.mjs +142 -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 +209 -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 +220 -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 +326 -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 +182 -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 +1 -1
  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 +160 -176
  99. package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +1 -1
  100. package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +126 -128
  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 +144 -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 -134
  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 +37 -15
  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 +266 -0
  124. package/esm2022/staging/spot-light/spot-light-input.mjs +67 -58
  125. package/esm2022/staging/spot-light/spot-light.mjs +51 -64
  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 +302 -259
  137. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  138. package/fesm2022/angular-three-soba-controls.mjs +104 -83
  139. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  140. package/fesm2022/angular-three-soba-gizmos.mjs +1043 -0
  141. package/fesm2022/angular-three-soba-gizmos.mjs.map +1 -0
  142. package/fesm2022/angular-three-soba-loaders.mjs +121 -117
  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 +2214 -105
  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 +956 -0
  151. package/fesm2022/angular-three-soba-performances.mjs.map +1 -0
  152. package/fesm2022/angular-three-soba-shaders.mjs +549 -252
  153. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  154. package/fesm2022/angular-three-soba-staging.mjs +2899 -2563
  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 +31 -16
  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 +147 -2
  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 +40 -27
  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 +100 -24
  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 +26 -23
  227. package/staging/contact-shadows/contact-shadows.d.ts +41 -28
  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 +37 -37
  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 +14 -10
  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.2", ngImport: i0, type: NgtsShadow, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
54
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", 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.2", 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.2", ngImport: i0, type: NgtsStatsGL, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
46
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.2", 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.2", 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,209 @@
1
+ import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, computed, effect, runInInjectionContext, } from '@angular/core';
2
+ import { NgtPortal, NgtPortalContent, assertInjectionContext, extend, injectBeforeRender, injectNgtRef, injectNgtStore, is, signalStore, } from 'angular-three';
3
+ import { MeshLineGeometry, MeshLineMaterial } from 'meshline';
4
+ import * as THREE from 'three';
5
+ import { Group, Mesh } from 'three';
6
+ import * as i0 from "@angular/core";
7
+ const shiftLeft = (collection, steps = 1) => {
8
+ collection.set(collection.subarray(steps));
9
+ collection.fill(-Infinity, -steps);
10
+ return collection;
11
+ };
12
+ const defaultSettings = {
13
+ width: 0.2,
14
+ length: 1,
15
+ decay: 1,
16
+ local: false,
17
+ stride: 0,
18
+ interval: 1,
19
+ };
20
+ export function injectNgtsTrail(targetFactory, settingsFactory, { injector } = {}) {
21
+ injector = assertInjectionContext(injectNgtsTrail, injector);
22
+ return runInInjectionContext(injector, () => {
23
+ const points = injectNgtRef();
24
+ let frameCount = 0;
25
+ const prevPosition = new THREE.Vector3();
26
+ const worldPosition = new THREE.Vector3();
27
+ const _target = computed(() => {
28
+ const _target = targetFactory();
29
+ if (is.ref(_target))
30
+ return _target.nativeElement;
31
+ return _target;
32
+ });
33
+ const _settings = computed(() => ({ ...defaultSettings, ...settingsFactory() }));
34
+ const _length = computed(() => _settings().length);
35
+ effect(() => {
36
+ const [target, length] = [_target(), _length()];
37
+ if (target) {
38
+ points.nativeElement = Float32Array.from({ length: length * 10 * 3 }, (_, i) => target.position.getComponent(i % 3));
39
+ }
40
+ });
41
+ injectBeforeRender(() => {
42
+ const [target, _points, { local, decay, stride, interval }] = [
43
+ _target(),
44
+ points.nativeElement,
45
+ _settings(),
46
+ ];
47
+ if (!target)
48
+ return;
49
+ if (!_points)
50
+ return;
51
+ if (frameCount === 0) {
52
+ let newPosition;
53
+ if (local) {
54
+ newPosition = target.position;
55
+ }
56
+ else {
57
+ target.getWorldPosition(worldPosition);
58
+ newPosition = worldPosition;
59
+ }
60
+ const steps = 1 * decay;
61
+ for (let i = 0; i < steps; i++) {
62
+ if (newPosition.distanceTo(prevPosition) < stride)
63
+ continue;
64
+ shiftLeft(_points, 3);
65
+ _points.set(newPosition.toArray(), _points.length - 3);
66
+ }
67
+ prevPosition.copy(newPosition);
68
+ }
69
+ frameCount++;
70
+ frameCount = frameCount % interval;
71
+ });
72
+ return points;
73
+ });
74
+ }
75
+ extend({ Group, Mesh });
76
+ export class NgtsTrail {
77
+ set _color(color) {
78
+ this.inputs.set({ color });
79
+ }
80
+ set _attenuation(attenuation) {
81
+ this.inputs.set({ attenuation });
82
+ }
83
+ set _target(target) {
84
+ this.inputs.set({ target });
85
+ }
86
+ set _settings(settings) {
87
+ this.inputs.set({ settings: { ...defaultSettings, ...settings } });
88
+ }
89
+ constructor() {
90
+ this.inputs = signalStore({ settings: defaultSettings, color: 'hotpink' });
91
+ this.trailRef = injectNgtRef();
92
+ this.groupRef = injectNgtRef();
93
+ this.children = this.groupRef.children('both');
94
+ this.store = injectNgtStore();
95
+ this.size = this.store.select('size');
96
+ this.target = this.inputs.select('target');
97
+ this.settings = this.inputs.select('settings');
98
+ this.width = computed(() => this.settings().width);
99
+ this.color = this.inputs.select('color');
100
+ this.attenuation = this.inputs.select('attenuation');
101
+ this.anchor = computed(() => {
102
+ const target = this.target();
103
+ if (target)
104
+ return target;
105
+ const group = this.groupRef.nativeElement;
106
+ if (group) {
107
+ return group.children.find((child) => child instanceof THREE.Object3D) || null;
108
+ }
109
+ return null;
110
+ });
111
+ this.points = injectNgtsTrail(this.anchor, this.settings);
112
+ this.scene = this.store.select('scene');
113
+ this.geometry = new MeshLineGeometry();
114
+ this.material = computed(() => {
115
+ const [width, color, size] = [this.width(), this.color(), this.size()];
116
+ const m = new MeshLineMaterial({
117
+ lineWidth: 0.1 * width,
118
+ color,
119
+ sizeAttenuation: 1,
120
+ resolution: new THREE.Vector2(size.width, size.height),
121
+ });
122
+ // TODO: understand this first
123
+ // Get and apply first <meshLineMaterial /> from children
124
+ // let matOverride: React.ReactElement | undefined;
125
+ // if (children) {
126
+ // if (Array.isArray(children)) {
127
+ // matOverride = children.find((child: React.ReactNode) => {
128
+ // const c = child as React.ReactElement;
129
+ // return typeof c.type === 'string' && c.type === 'meshLineMaterial';
130
+ // }) as React.ReactElement | undefined;
131
+ // } else {
132
+ // const c = children as React.ReactElement;
133
+ // if (typeof c.type === 'string' && c.type === 'meshLineMaterial') {
134
+ // matOverride = c;
135
+ // }
136
+ // }
137
+ // }
138
+ // if (typeof matOverride?.props === 'object') {
139
+ // m.setValues(matOverride.props);
140
+ // }
141
+ return m;
142
+ });
143
+ this.setMaterialSize();
144
+ this.beforeRender();
145
+ }
146
+ setMaterialSize() {
147
+ effect(() => {
148
+ const [material, size] = [this.material(), this.size()];
149
+ material.uniforms['resolution'].value.set(size.width, size.height);
150
+ });
151
+ }
152
+ beforeRender() {
153
+ injectBeforeRender(() => {
154
+ const [points, attenuation] = [this.points.nativeElement, this.attenuation()];
155
+ if (!points)
156
+ return;
157
+ this.geometry.setPoints(points, attenuation);
158
+ });
159
+ }
160
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtsTrail, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
161
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", 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: `
162
+ <ngt-group>
163
+ <ngt-portal [container]="scene()" [autoRender]="false">
164
+ <ng-template ngtPortalContent>
165
+ <ngt-mesh [ref]="trailRef" [geometry]="geometry" [material]="material()" />
166
+ </ng-template>
167
+ </ngt-portal>
168
+ <ngt-group [ref]="groupRef">
169
+ <ng-content />
170
+ </ngt-group>
171
+ </ngt-group>
172
+ `, 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]" }] }); }
173
+ }
174
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtsTrail, decorators: [{
175
+ type: Component,
176
+ args: [{
177
+ selector: 'ngts-trail',
178
+ standalone: true,
179
+ template: `
180
+ <ngt-group>
181
+ <ngt-portal [container]="scene()" [autoRender]="false">
182
+ <ng-template ngtPortalContent>
183
+ <ngt-mesh [ref]="trailRef" [geometry]="geometry" [material]="material()" />
184
+ </ng-template>
185
+ </ngt-portal>
186
+ <ngt-group [ref]="groupRef">
187
+ <ng-content />
188
+ </ngt-group>
189
+ </ngt-group>
190
+ `,
191
+ imports: [NgtPortal, NgtPortalContent],
192
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
193
+ }]
194
+ }], ctorParameters: function () { return []; }, propDecorators: { trailRef: [{
195
+ type: Input
196
+ }], _color: [{
197
+ type: Input,
198
+ args: [{ alias: 'color' }]
199
+ }], _attenuation: [{
200
+ type: Input,
201
+ args: [{ alias: 'attenuation' }]
202
+ }], _target: [{
203
+ type: Input,
204
+ args: [{ alias: 'target' }]
205
+ }], _settings: [{
206
+ type: Input,
207
+ args: [{ alias: 'settings' }]
208
+ }] } });
209
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhaWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWlzYy9zcmMvdHJhaWwvdHJhaWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLHNCQUFzQixFQUN0QixTQUFTLEVBQ1QsS0FBSyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04scUJBQXFCLEdBRXJCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLHNCQUFzQixFQUN0QixNQUFNLEVBQ04sa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixjQUFjLEVBQ2QsRUFBRSxFQUNGLFdBQVcsR0FFWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDOUQsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxPQUFPLENBQUM7O0FBRXBDLE1BQU0sU0FBUyxHQUFHLENBQUMsVUFBd0IsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFnQixFQUFFO0lBQ3ZFLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzNDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxPQUFPLFVBQVUsQ0FBQztBQUNuQixDQUFDLENBQUM7QUFnQkYsTUFBTSxlQUFlLEdBQXNCO0lBQzFDLEtBQUssRUFBRSxHQUFHO0lBQ1YsTUFBTSxFQUFFLENBQUM7SUFDVCxLQUFLLEVBQUUsQ0FBQztJQUNSLEtBQUssRUFBRSxLQUFLO0lBQ1osTUFBTSxFQUFFLENBQUM7SUFDVCxRQUFRLEVBQUUsQ0FBQztDQUNYLENBQUM7QUFFRixNQUFNLFVBQVUs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dCI6WyJpbXBvcnQge1xuXHRDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuXHRDb21wb25lbnQsXG5cdElucHV0LFxuXHRjb21wdXRlZCxcblx0ZWZmZWN0LFxuXHRydW5JbkluamVjdGlvbkNvbnRleHQsXG5cdHR5cGUgSW5qZWN0b3IsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcblx0Tmd0UG9ydGFsLFxuXHROZ3RQb3J0YWxDb250ZW50LFxuXHRhc3NlcnRJbmplY3Rpb25Db250ZXh0LFxuXHRleHRlbmQsXG5cdGluamVjdEJlZm9yZVJlbmRlcixcblx0aW5qZWN0Tmd0UmVmLFxuXHRpbmplY3ROZ3RTdG9yZSxcblx0aXMsXG5cdHNpZ25hbFN0b3JlLFxuXHR0eXBlIE5ndFJlZixcbn0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBNZXNoTGluZUdlb21ldHJ5LCBNZXNoTGluZU1hdGVyaWFsIH0gZnJvbSAnbWVzaGxpbmUnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgR3JvdXAsIE1lc2ggfSBmcm9tICd0aHJlZSc7XG5cbmNvbnN0IHNoaWZ0TGVmdCA9IChjb2xsZWN0aW9uOiBGbG9hdDMyQXJyYXksIHN0ZXBzID0gMSk6IEZsb2F0MzJBcnJheSA9PiB7XG5cdGNvbGxlY3Rpb24uc2V0KGNvbGxlY3Rpb24uc3ViYXJyYXkoc3RlcHMpKTtcblx0Y29sbGVjdGlvbi5maWxsKC1JbmZpbml0eSwgLXN0ZXBzKTtcblx0cmV0dXJuIGNvbGxlY3Rpb247XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RzVHJhaWxTZXR0aW5ncyA9IHtcblx0d2lkdGg6IG51bWJlcjtcblx0bGVuZ3RoOiBudW1iZXI7XG5cdGRlY2F5OiBudW1iZXI7XG5cdC8qKlxuXHQgKiBXZXRoZXIgdG8gdXNlIHRoZSB0YXJnZXQncyB3b3JsZCBvciBsb2NhbCBwb3NpdGlvbnNcblx0ICovXG5cdGxvY2FsOiBib29sZWFuO1xuXHQvLyBNaW4gZGlzdGFuY2UgYmV0d2VlbiBwcmV2aW91cyBhbmQgY3VycmVudCBwb2ludHNcblx0c3RyaWRlOiBudW1iZXI7XG5cdC8vIE51bWJlciBvZiBmcmFtZXMgdG8gd2FpdCBiZWZvcmUgbmV4dCBjYWxjdWxhdGlvblxuXHRpbnRlcnZhbDogbnVtYmVyO1xufTtcblxuY29uc3QgZGVmYXVsdFNldHRpbmdzOiBOZ3RzVHJhaWxTZXR0aW5ncyA9IHtcblx0d2lkdGg6IDAuMixcblx0bGVuZ3RoOiAxLFxuXHRkZWNheTogMSxcblx0bG9jYWw6IGZhbHNlLFxuXHRzdHJpZGU6IDAsXG5cdGludGVydmFsOiAxLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdE5ndHNUcmFpbChcblx0dGFyZ2V0RmFjdG9yeTogKCkgPT4gTmd0UmVmPFRIUkVFLk9iamVjdDNEPiB8IG51bGwsXG5cdHNldHRpbmdzRmFjdG9yeTogKCkgPT4gUGFydGlhbDxOZ3RzVHJhaWxTZXR0aW5ncz4sXG5cdHsgaW5qZWN0b3IgfTogeyBpbmplY3Rvcj86IEluamVjdG9yIH0gPSB7fSxcbikge1xuXHRpbmplY3RvciA9IGFzc2VydEluamVjdGlvbkNvbnRleHQoaW5qZWN0Tmd0c1RyYWlsLCBpbmplY3Rvcik7XG5cdHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCBwb2ludHMgPSBpbmplY3ROZ3RSZWY8RmxvYXQzMkFycmF5PigpO1xuXHRcdGxldCBmcmFtZUNvdW50ID0gMDtcblxuXHRcdGNvbnN0IHByZXZQb3NpdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5cdFx0Y29uc3Qgd29ybGRQb3NpdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5cblx0XHRjb25zdCBfdGFyZ2V0ID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgX3RhcmdldCA9IHRhcmdldEZhY3RvcnkoKTtcblx0XHRcdGlmIChpcy5yZWYoX3RhcmdldCkpIHJldHVybiBfdGFyZ2V0Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRyZXR1cm4gX3RhcmdldDtcblx0XHR9KTtcblxuXHRcdGNvbnN0IF9zZXR0aW5ncyA9IGNvbXB1dGVkKCgpID0+ICh7IC4uLmRlZmF1bHRTZXR0aW5ncywgLi4uc2V0dGluZ3NGYWN0b3J5KCkgfSkpO1xuXHRcdGNvbnN0IF9sZW5ndGggPSBjb21wdXRlZCgoKSA9PiBfc2V0dGluZ3MoKS5sZW5ndGgpO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IFt0YXJnZXQsIGxlbmd0aF0gPSBbX3RhcmdldCgpLCBfbGVuZ3RoKCldO1xuXHRcdFx0aWYgKHRhcmdldCkge1xuXHRcdFx0XHRwb2ludHMubmF0aXZlRWxlbWVudCA9IEZsb2F0MzJBcnJheS5mcm9tKHsgbGVuZ3RoOiBsZW5ndGggKiAxMCAqIDMgfSwgKF8sIGkpID0+XG5cdFx0XHRcdFx0dGFyZ2V0LnBvc2l0aW9uLmdldENvbXBvbmVudChpICUgMyksXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRpbmplY3RCZWZvcmVSZW5kZXIoKCkgPT4ge1xuXHRcdFx0Y29uc3QgW3RhcmdldCwgX3BvaW50cywgeyBsb2NhbCwgZGVjYXksIHN0cmlkZSwgaW50ZXJ2YWwgfV0gPSBbXG5cdFx0XHRcdF90YXJnZXQoKSxcblx0XHRcdFx0cG9pbnRzLm5hdGl2ZUVsZW1lbnQsXG5cdFx0XHRcdF9zZXR0aW5ncygpLFxuXHRcdFx0XTtcblx0XHRcdGlmICghdGFyZ2V0KSByZXR1cm47XG5cdFx0XHRpZiAoIV9wb2ludHMpIHJldHVybjtcblxuXHRcdFx0aWYgKGZyYW1lQ291bnQgPT09IDApIHtcblx0XHRcdFx0bGV0IG5ld1Bvc2l0aW9uOiBUSFJFRS5WZWN0b3IzO1xuXHRcdFx0XHRpZiAobG9jYWwpIHtcblx0XHRcdFx0XHRuZXdQb3NpdGlvbiA9IHRhcmdldC5wb3NpdGlvbjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0YXJnZXQuZ2V0V29ybGRQb3NpdGlvbih3b3JsZFBvc2l0aW9uKTtcblx0XHRcdFx0XHRuZXdQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb247XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBzdGVwcyA9IDEgKiBkZWNheTtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzdGVwczsgaSsrKSB7XG5cdFx0XHRcdFx0aWYgKG5ld1Bvc2l0aW9uLmRpc3RhbmNlVG8ocHJldlBvc2l0aW9uKSA8IHN0cmlkZSkgY29udGludWU7XG5cblx0XHRcdFx0XHRzaGlmdExlZnQoX3BvaW50cywgMyk7XG5cdFx0XHRcdFx0X3BvaW50cy5zZXQobmV3UG9zaXRpb24udG9BcnJheSgpLCBfcG9pbnRzLmxlbmd0aCAtIDMpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHByZXZQb3NpdGlvbi5jb3B5KG5ld1Bvc2l0aW9uKTtcblx0XHRcdH1cblxuXHRcdFx0ZnJhbWVDb3VudCsrO1xuXHRcdFx0ZnJhbWVDb3VudCA9IGZyYW1lQ291bnQgJSBpbnRlcnZhbDtcblx0XHR9KTtcblxuXHRcdHJldHVybiBwb2ludHM7XG5cdH0pO1xufVxuXG5leHBvcnQgdHlwZSBOZ3RzVHJhaWxTdGF0ZSA9IHtcblx0Y29sb3I6IFRIUkVFLkNvbG9yUmVwcmVzZW50YXRpb247XG5cdGF0dGVudWF0aW9uOiAod2lkdGg6IG51bWJlcikgPT4gbnVtYmVyO1xuXHRzZXR0aW5nczogTmd0c1RyYWlsU2V0dGluZ3M7XG5cdHRhcmdldD86IE5ndFJlZjxUSFJFRS5PYmplY3QzRD47XG59O1xuXG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuXHRcdCduZ3RzLXRyYWlsJzogTmd0c1RyYWlsU3RhdGU7XG5cdH1cbn1cblxuZXh0ZW5kKHsgR3JvdXAsIE1lc2ggfSk7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtdHJhaWwnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtZ3JvdXA+XG5cdFx0XHQ8bmd0LXBvcnRhbCBbY29udGFpbmVyXT1cInNjZW5lKClcIiBbYXV0b1JlbmRlcl09XCJmYWxzZVwiPlxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgbmd0UG9ydGFsQ29udGVudD5cblx0XHRcdFx0XHQ8bmd0LW1lc2ggW3JlZl09XCJ0cmFpbFJlZlwiIFtnZW9tZXRyeV09XCJnZW9tZXRyeVwiIFttYXRlcmlhbF09XCJtYXRlcmlhbCgpXCIgLz5cblx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHRcdDwvbmd0LXBvcnRhbD5cblx0XHRcdDxuZ3QtZ3JvdXAgW3JlZl09XCJncm91cFJlZlwiPlxuXHRcdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdFx0PC9uZ3QtZ3JvdXA+XG5cdFx0PC9uZ3QtZ3JvdXA+XG5cdGAsXG5cdGltcG9ydHM6IFtOZ3RQb3J0YWwsIE5ndFBvcnRhbENvbnRlbnRdLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNUcmFpbCB7XG5cdHByaXZhdGUgaW5wdXRzID0gc2lnbmFsU3RvcmU8Tmd0c1RyYWlsU3RhdGU+KHsgc2V0dGluZ3M6IGRlZmF1bHRTZXR0aW5ncywgY29sb3I6ICdob3RwaW5rJyB9KTtcblxuXHRASW5wdXQoKSB0cmFpbFJlZiA9IGluamVjdE5ndFJlZjxNZXNoPigpO1xuXG5cdEBJbnB1dCh7IGFsaWFzOiAnY29sb3InIH0pIHNldCBfY29sb3IoY29sb3I6IFRIUkVFLkNvbG9yUmVwcmVzZW50YXRpb24pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBjb2xvciB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnYXR0ZW51YXRpb24nIH0pIHNldCBfYXR0ZW51YXRpb24oYXR0ZW51YXRpb246ICh3aWR0aDogbnVtYmVyKSA9PiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBhdHRlbnVhdGlvbiB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAndGFyZ2V0JyB9KSBzZXQgX3RhcmdldCh0YXJnZXQ6IE5ndFJlZjxUSFJFRS5PYmplY3QzRD4pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyB0YXJnZXQgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ3NldHRpbmdzJyB9KSBzZXQgX3NldHRpbmdzKHNldHRpbmdzOiBQYXJ0aWFsPE5ndHNUcmFpbFNldHRpbmdzPikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHNldHRpbmdzOiB7IC4uLmRlZmF1bHRTZXR0aW5ncywgLi4uc2V0dGluZ3MgfSB9KTtcblx0fVxuXG5cdGdyb3VwUmVmID0gaW5qZWN0Tmd0UmVmPEdyb3VwPigpO1xuXG5cdHByaXZhdGUgY2hpbGRyZW4gPSB0aGlzLmdyb3VwUmVmLmNoaWxkcmVuKCdib3RoJyk7XG5cblx0cHJpdmF0ZSBzdG9yZSA9IGluamVjdE5ndFN0b3JlKCk7XG5cdHByaXZhdGUgc2l6ZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdzaXplJyk7XG5cblx0cHJpdmF0ZSB0YXJnZXQgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ3RhcmdldCcpO1xuXHRwcml2YXRlIHNldHRpbmdzID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdzZXR0aW5ncycpO1xuXHRwcml2YXRlIHdpZHRoID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZXR0aW5ncygpLndpZHRoKTtcblx0cHJpdmF0ZSBjb2xvciA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnY29sb3InKTtcblx0cHJpdmF0ZSBhdHRlbnVhdGlvbiA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnYXR0ZW51YXRpb24nKTtcblxuXHRwcml2YXRlIGFuY2hvciA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCB0YXJnZXQgPSB0aGlzLnRhcmdldCgpO1xuXHRcdGlmICh0YXJnZXQpIHJldHVybiB0YXJnZXQ7XG5cdFx0Y29uc3QgZ3JvdXAgPSB0aGlzLmdyb3VwUmVmLm5hdGl2ZUVsZW1lbnQ7XG5cdFx0aWYgKGdyb3VwKSB7XG5cdFx0XHRyZXR1cm4gZ3JvdXAuY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IGNoaWxkIGluc3RhbmNlb2YgVEhSRUUuT2JqZWN0M0QpIHx8IG51bGw7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9KTtcblxuXHRwcml2YXRlIHBvaW50cyA9IGluamVjdE5ndHNUcmFpbCh0aGlzLmFuY2hvciwgdGhpcy5zZXR0aW5ncyk7XG5cblx0c2NlbmUgPSB0aGlzLnN0b3JlLnNlbGVjdCgnc2NlbmUnKTtcblx0Z2VvbWV0cnkgPSBuZXcgTWVzaExpbmVHZW9tZXRyeSgpO1xuXHRtYXRlcmlhbCA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBbd2lkdGgsIGNvbG9yLCBzaXplXSA9IFt0aGlzLndpZHRoKCksIHRoaXMuY29sb3IoKSwgdGhpcy5zaXplKCldO1xuXG5cdFx0Y29uc3QgbSA9IG5ldyBNZXNoTGluZU1hdGVyaWFsKHtcblx0XHRcdGxpbmVXaWR0aDogMC4xICogd2lkdGgsXG5cdFx0XHRjb2xvcixcblx0XHRcdHNpemVBdHRlbnVhdGlvbjogMSxcblx0XHRcdHJlc29sdXRpb246IG5ldyBUSFJFRS5WZWN0b3IyKHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KSxcblx0XHR9KTtcblxuXHRcdC8vIFRPRE86IHVuZGVyc3RhbmQgdGhpcyBmaXJzdFxuXHRcdC8vIEdldCBhbmQgYXBwbHkgZmlyc3QgPG1lc2hMaW5lTWF0ZXJpYWwgLz4gZnJvbSBjaGlsZHJlblxuXHRcdC8vIGxldCBtYXRPdmVycmlkZTogUmVhY3QuUmVhY3RFbGVtZW50IHwgdW5kZWZpbmVkO1xuXHRcdC8vIGlmIChjaGlsZHJlbikge1xuXHRcdC8vIFx0aWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG5cdFx0Ly8gXHRcdG1hdE92ZXJyaWRlID0gY2hpbGRyZW4uZmluZCgoY2hpbGQ6IFJlYWN0LlJlYWN0Tm9kZSkgPT4ge1xuXHRcdC8vIFx0XHRcdGNvbnN0IGMgPSBjaGlsZCBhcyBSZWFjdC5SZWFjdEVsZW1lbnQ7XG5cdFx0Ly8gXHRcdFx0cmV0dXJuIHR5cGVvZiBjLnR5cGUgPT09ICdzdHJpbmcnICYmIGMudHlwZSA9PT0gJ21lc2hMaW5lTWF0ZXJpYWwnO1xuXHRcdC8vIFx0XHR9KSBhcyBSZWFjdC5SZWFjdEVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cdFx0Ly8gXHR9IGVsc2Uge1xuXHRcdC8vIFx0XHRjb25zdCBjID0gY2hpbGRyZW4gYXMgUmVhY3QuUmVhY3RFbGVtZW50O1xuXHRcdC8vIFx0XHRpZiAodHlwZW9mIGMudHlwZSA9PT0gJ3N0cmluZycgJiYgYy50eXBlID09PSAnbWVzaExpbmVNYXRlcmlhbCcpIHtcblx0XHQvLyBcdFx0XHRtYXRPdmVycmlkZSA9IGM7XG5cdFx0Ly8gXHRcdH1cblx0XHQvLyBcdH1cblx0XHQvLyB9XG5cdFx0Ly8gaWYgKHR5cGVvZiBtYXRPdmVycmlkZT8ucHJvcHMgPT09ICdvYmplY3QnKSB7XG5cdFx0Ly8gXHRtLnNldFZhbHVlcyhtYXRPdmVycmlkZS5wcm9wcyk7XG5cdFx0Ly8gfVxuXG5cdFx0cmV0dXJuIG07XG5cdH0pO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuc2V0TWF0ZXJpYWxTaXplKCk7XG5cdFx0dGhpcy5iZWZvcmVSZW5kZXIoKTtcblx0fVxuXG5cdHByaXZhdGUgc2V0TWF0ZXJpYWxTaXplKCkge1xuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBbbWF0ZXJpYWwsIHNpemVdID0gW3RoaXMubWF0ZXJpYWwoKSwgdGhpcy5zaXplKCldO1xuXHRcdFx0bWF0ZXJpYWwudW5pZm9ybXNbJ3Jlc29sdXRpb24nXS52YWx1ZS5zZXQoc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBiZWZvcmVSZW5kZXIoKSB7XG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKCgpID0+IHtcblx0XHRcdGNvbnN0IFtwb2ludHMsIGF0dGVudWF0aW9uXSA9IFt0aGlzLnBvaW50cy5uYXRpdmVFbGVtZW50LCB0aGlzLmF0dGVudWF0aW9uKCldO1xuXHRcdFx0aWYgKCFwb2ludHMpIHJldHVybjtcblx0XHRcdHRoaXMuZ2VvbWV0cnkuc2V0UG9pbnRzKHBvaW50cywgYXR0ZW51YXRpb24pO1xuXHRcdH0pO1xuXHR9XG59XG4iXX0=
@@ -0,0 +1,17 @@
1
+ import { Injector, computed, runInInjectionContext } from '@angular/core';
2
+ import { assertInjectionContext, injectBeforeRender } from 'angular-three';
3
+ import { TrailTexture } from './trail-texture';
4
+ export function injectNgtsTrailTexture(trailConfigFn, { injector } = {}) {
5
+ injector = assertInjectionContext(injectNgtsTrailTexture, injector);
6
+ return runInInjectionContext(injector, () => {
7
+ const config = computed(() => trailConfigFn() || {});
8
+ const trail = computed(() => new TrailTexture(config()));
9
+ const texture = computed(() => trail().texture);
10
+ injectBeforeRender(({ delta }) => {
11
+ trail().update(delta);
12
+ });
13
+ const onMove = (ev) => trail().addTouch(ev.uv);
14
+ return { texture, onMove };
15
+ });
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0LXRyYWlsLXRleHR1cmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWlzYy9zcmMvdHJhaWwtdGV4dHVyZS9pbmplY3QtdHJhaWwtdGV4dHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQXNCLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxZQUFZLEVBQW9CLE1BQU0saUJBQWlCLENBQUM7QUFFakUsTUFBTSxVQUFVLHNCQUFzQixDQUNyQyxhQUF5QyxFQUN6QyxFQUFFLFFBQVEsS0FBOEIsRUFBRTtJQUUxQyxRQUFRLEdBQUcsc0JBQXNCLENBQUMsc0JBQXNCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDcEUsT0FBTyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQzNDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNyRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVoRCxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNoQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLE1BQU0sR0FBRyxDQUFDLEVBQStCLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRyxDQUFDLENBQUM7UUFFN0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUM1QixDQUFDLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RvciwgY29tcHV0ZWQsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0aW9uQ29udGV4dCwgaW5qZWN0QmVmb3JlUmVuZGVyLCB0eXBlIE5ndFRocmVlRXZlbnQgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IFRyYWlsVGV4dHVyZSwgdHlwZSBUcmFpbENvbmZpZyB9IGZyb20gJy4vdHJhaWwtdGV4dHVyZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3ROZ3RzVHJhaWxUZXh0dXJlKFxuXHR0cmFpbENvbmZpZ0ZuOiAoKSA9PiBQYXJ0aWFsPFRyYWlsQ29uZmlnPixcblx0eyBpbmplY3RvciB9OiB7IGluamVjdG9yPzogSW5qZWN0b3IgfSA9IHt9LFxuKSB7XG5cdGluamVjdG9yID0gYXNzZXJ0SW5qZWN0aW9uQ29udGV4dChpbmplY3ROZ3RzVHJhaWxUZXh0dXJlLCBpbmplY3Rvcik7XG5cdHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCBjb25maWcgPSBjb21wdXRlZCgoKSA9PiB0cmFpbENvbmZpZ0ZuKCkgfHwge30pO1xuXHRcdGNvbnN0IHRyYWlsID0gY29tcHV0ZWQoKCkgPT4gbmV3IFRyYWlsVGV4dHVyZShjb25maWcoKSkpO1xuXHRcdGNvbnN0IHRleHR1cmUgPSBjb21wdXRlZCgoKSA9PiB0cmFpbCgpLnRleHR1cmUpO1xuXG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKCh7IGRlbHRhIH0pID0+IHtcblx0XHRcdHRyYWlsKCkudXBkYXRlKGRlbHRhKTtcblx0XHR9KTtcblxuXHRcdGNvbnN0IG9uTW92ZSA9IChldjogTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KSA9PiB0cmFpbCgpLmFkZFRvdWNoKGV2LnV2ISk7XG5cblx0XHRyZXR1cm4geyB0ZXh0dXJlLCBvbk1vdmUgfTtcblx0fSk7XG59XG4iXX0=
@@ -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=