angular-three-soba 2.0.0-beta.26 → 2.0.0-beta.261

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 (397) hide show
  1. package/README.md +62 -4
  2. package/abstractions/README.md +278 -2
  3. package/abstractions/index.d.ts +11 -6
  4. package/abstractions/lib/catmull-rom-line.d.ts +648 -0
  5. package/abstractions/lib/cubic-bezier-line.d.ts +19 -0
  6. package/abstractions/lib/edges.d.ts +850 -0
  7. package/abstractions/lib/gradient-texture.d.ts +24 -0
  8. package/abstractions/lib/grid.d.ts +339 -0
  9. package/abstractions/lib/helper.d.ts +25 -0
  10. package/abstractions/lib/line.d.ts +41 -0
  11. package/abstractions/lib/prism-geometry.d.ts +30 -0
  12. package/abstractions/lib/quadratic-bezier-line.d.ts +21 -0
  13. package/abstractions/lib/text-3d.d.ts +338 -0
  14. package/abstractions/lib/text.d.ts +55 -0
  15. package/cameras/README.md +91 -2
  16. package/cameras/index.d.ts +4 -4
  17. package/cameras/lib/camera-content.d.ts +10 -0
  18. package/cameras/lib/cube-camera.d.ts +38 -0
  19. package/cameras/lib/orthographic-camera.d.ts +40 -0
  20. package/cameras/lib/perspective-camera.d.ts +36 -0
  21. package/controls/README.md +95 -2
  22. package/controls/index.d.ts +2 -1
  23. package/controls/lib/camera-controls.d.ts +31 -0
  24. package/controls/lib/orbit-controls.d.ts +38 -0
  25. package/esm2022/abstractions/index.mjs +12 -7
  26. package/esm2022/abstractions/lib/catmull-rom-line.mjs +76 -0
  27. package/esm2022/abstractions/lib/cubic-bezier-line.mjs +51 -0
  28. package/esm2022/abstractions/lib/edges.mjs +70 -0
  29. package/esm2022/abstractions/lib/gradient-texture.mjs +91 -0
  30. package/esm2022/abstractions/lib/grid.mjs +103 -0
  31. package/esm2022/abstractions/lib/helper.mjs +80 -0
  32. package/esm2022/abstractions/lib/line.mjs +123 -0
  33. package/esm2022/abstractions/lib/prism-geometry.mjs +55 -0
  34. package/esm2022/abstractions/lib/quadratic-bezier-line.mjs +73 -0
  35. package/esm2022/abstractions/lib/text-3d.mjs +98 -0
  36. package/esm2022/abstractions/lib/text.mjs +92 -0
  37. package/esm2022/cameras/index.mjs +5 -5
  38. package/esm2022/cameras/lib/camera-content.mjs +14 -0
  39. package/esm2022/cameras/lib/cube-camera.mjs +111 -0
  40. package/esm2022/cameras/lib/orthographic-camera.mjs +131 -0
  41. package/esm2022/cameras/lib/perspective-camera.mjs +104 -0
  42. package/esm2022/controls/index.mjs +3 -2
  43. package/esm2022/controls/lib/camera-controls.mjs +127 -0
  44. package/esm2022/controls/lib/orbit-controls.mjs +126 -0
  45. package/esm2022/loaders/index.mjs +6 -5
  46. package/esm2022/loaders/lib/font-loader.mjs +49 -0
  47. package/esm2022/loaders/lib/gltf-loader.mjs +33 -0
  48. package/esm2022/loaders/lib/loader.mjs +109 -0
  49. package/esm2022/loaders/lib/progress.mjs +51 -0
  50. package/esm2022/loaders/lib/texture-loader.mjs +32 -0
  51. package/esm2022/materials/index.mjs +7 -7
  52. package/esm2022/materials/lib/custom-shader-material.mjs +71 -0
  53. package/esm2022/materials/lib/mesh-distort-material.mjs +42 -0
  54. package/esm2022/materials/lib/mesh-reflector-material.mjs +278 -0
  55. package/esm2022/materials/lib/mesh-refraction-material.mjs +144 -0
  56. package/esm2022/materials/lib/mesh-transmission-material.mjs +188 -0
  57. package/esm2022/materials/lib/mesh-wobble-material.mjs +42 -0
  58. package/esm2022/misc/index.mjs +10 -14
  59. package/esm2022/misc/lib/animations.mjs +74 -0
  60. package/esm2022/misc/lib/bake-shadows.mjs +26 -0
  61. package/esm2022/misc/lib/computed-attribute.mjs +56 -0
  62. package/esm2022/misc/lib/constants.mjs +5 -0
  63. package/esm2022/misc/lib/decal.mjs +135 -0
  64. package/esm2022/misc/lib/deprecated.mjs +15 -0
  65. package/esm2022/misc/lib/depth-buffer.mjs +39 -0
  66. package/esm2022/misc/lib/fbo.mjs +89 -0
  67. package/esm2022/misc/lib/sampler.mjs +121 -0
  68. package/esm2022/shaders/index.mjs +3 -18
  69. package/esm2022/shaders/lib/grid-material.mjs +81 -0
  70. package/esm2022/shaders/lib/mesh-refraction-material.mjs +163 -0
  71. package/esm2022/staging/index.mjs +19 -22
  72. package/esm2022/staging/lib/accumulative-shadows.mjs +182 -0
  73. package/esm2022/staging/lib/backdrop.mjs +73 -0
  74. package/esm2022/staging/lib/bb-anchor.mjs +58 -0
  75. package/esm2022/staging/lib/bounds.mjs +286 -0
  76. package/esm2022/staging/lib/camera-shake.mjs +69 -0
  77. package/esm2022/staging/lib/caustics.mjs +188 -0
  78. package/esm2022/staging/lib/center.mjs +113 -0
  79. package/esm2022/staging/lib/contact-shadows.mjs +201 -0
  80. package/esm2022/staging/lib/environment.mjs +465 -0
  81. package/esm2022/staging/lib/float.mjs +60 -0
  82. package/esm2022/staging/lib/lightformer.mjs +107 -0
  83. package/esm2022/staging/lib/matcap-texture.mjs +81 -0
  84. package/esm2022/staging/lib/normal-texture.mjs +85 -0
  85. package/esm2022/staging/lib/randomized-lights.mjs +104 -0
  86. package/esm2022/staging/lib/render-texture.mjs +213 -0
  87. package/esm2022/staging/lib/sky.mjs +86 -0
  88. package/esm2022/staging/lib/spot-light.mjs +450 -0
  89. package/esm2022/staging/lib/stage.mjs +236 -0
  90. package/esm2022/vanilla-exports/angular-three-soba-vanilla-exports.mjs +5 -0
  91. package/esm2022/vanilla-exports/index.mjs +3 -0
  92. package/fesm2022/angular-three-soba-abstractions.mjs +739 -718
  93. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  94. package/fesm2022/angular-three-soba-cameras.mjs +260 -307
  95. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  96. package/fesm2022/angular-three-soba-controls.mjs +174 -110
  97. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  98. package/fesm2022/angular-three-soba-loaders.mjs +151 -129
  99. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  100. package/fesm2022/angular-three-soba-materials.mjs +511 -764
  101. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  102. package/fesm2022/angular-three-soba-misc.mjs +405 -2149
  103. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  104. package/fesm2022/angular-three-soba-shaders.mjs +33 -1373
  105. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  106. package/fesm2022/angular-three-soba-staging.mjs +2329 -3538
  107. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  108. package/fesm2022/angular-three-soba-vanilla-exports.mjs +6 -0
  109. package/fesm2022/angular-three-soba-vanilla-exports.mjs.map +1 -0
  110. package/loaders/README.md +130 -2
  111. package/loaders/index.d.ts +5 -4
  112. package/loaders/lib/font-loader.d.ts +27 -0
  113. package/loaders/lib/gltf-loader.d.ts +21 -0
  114. package/loaders/lib/loader.d.ts +29 -0
  115. package/loaders/lib/progress.d.ts +9 -0
  116. package/loaders/lib/texture-loader.d.ts +13 -0
  117. package/materials/README.md +160 -2
  118. package/materials/index.d.ts +6 -6
  119. package/materials/lib/custom-shader-material.d.ts +19 -0
  120. package/materials/lib/mesh-distort-material.d.ts +18 -0
  121. package/materials/lib/mesh-reflector-material.d.ts +50 -0
  122. package/materials/lib/mesh-refraction-material.d.ts +42 -0
  123. package/materials/lib/mesh-transmission-material.d.ts +77 -0
  124. package/materials/lib/mesh-wobble-material.d.ts +15 -0
  125. package/metadata.json +1 -1
  126. package/misc/README.md +217 -2
  127. package/misc/index.d.ts +9 -13
  128. package/misc/lib/animations.d.ts +14 -0
  129. package/misc/lib/computed-attribute.d.ts +69 -0
  130. package/misc/lib/constants.d.ts +1 -0
  131. package/misc/lib/decal.d.ts +27 -0
  132. package/misc/lib/deprecated.d.ts +14 -0
  133. package/misc/lib/depth-buffer.d.ts +8 -0
  134. package/misc/lib/fbo.d.ts +47 -0
  135. package/misc/lib/sampler.d.ts +73 -0
  136. package/package.json +60 -38
  137. package/shaders/index.d.ts +2 -17
  138. package/shaders/lib/grid-material.d.ts +69 -0
  139. package/shaders/lib/mesh-refraction-material.d.ts +11 -0
  140. package/staging/README.md +472 -2
  141. package/staging/index.d.ts +18 -21
  142. package/staging/lib/accumulative-shadows.d.ts +75 -0
  143. package/staging/lib/backdrop.d.ts +22 -0
  144. package/staging/lib/bb-anchor.d.ts +17 -0
  145. package/staging/lib/bounds.d.ts +47 -0
  146. package/staging/lib/camera-shake.d.ts +29 -0
  147. package/staging/lib/caustics.d.ts +53 -0
  148. package/staging/lib/center.d.ts +422 -0
  149. package/staging/lib/contact-shadows.d.ts +45 -0
  150. package/staging/lib/environment.d.ts +159 -0
  151. package/staging/lib/float.d.ts +19 -0
  152. package/staging/lib/lightformer.d.ts +334 -0
  153. package/staging/lib/matcap-texture.d.ts +32 -0
  154. package/staging/lib/normal-texture.d.ts +37 -0
  155. package/staging/lib/randomized-lights.d.ts +54 -0
  156. package/staging/lib/render-texture.d.ts +64 -0
  157. package/staging/lib/sky.d.ts +32 -0
  158. package/staging/lib/spot-light.d.ts +120 -0
  159. package/staging/lib/stage.d.ts +376 -0
  160. package/vanilla-exports/README.md +3 -0
  161. package/vanilla-exports/index.d.ts +27 -0
  162. package/web-types.json +1 -1
  163. package/abstractions/billboard/billboard.d.ts +0 -28
  164. package/abstractions/detailed/detailed.d.ts +0 -26
  165. package/abstractions/edges/edges.d.ts +0 -34
  166. package/abstractions/grid/grid.d.ts +0 -50
  167. package/abstractions/text/text.d.ts +0 -82
  168. package/abstractions/text-3d/text-3d.d.ts +0 -84
  169. package/assets/distort.vert.glsl +0 -1
  170. package/cameras/camera/camera-content.d.ts +0 -13
  171. package/cameras/camera/camera.d.ts +0 -26
  172. package/cameras/cube-camera/cube-camera.d.ts +0 -69
  173. package/cameras/orthographic-camera/orthographic-camera.d.ts +0 -37
  174. package/cameras/perspective-camera/perspective-camera.d.ts +0 -18
  175. package/controls/orbit-controls/orbit-controls.d.ts +0 -54
  176. package/esm2022/abstractions/billboard/billboard.mjs +0 -74
  177. package/esm2022/abstractions/detailed/detailed.mjs +0 -64
  178. package/esm2022/abstractions/edges/edges.mjs +0 -88
  179. package/esm2022/abstractions/grid/grid.mjs +0 -180
  180. package/esm2022/abstractions/text/text.mjs +0 -274
  181. package/esm2022/abstractions/text-3d/text-3d.mjs +0 -172
  182. package/esm2022/cameras/camera/camera-content.mjs +0 -21
  183. package/esm2022/cameras/camera/camera.mjs +0 -77
  184. package/esm2022/cameras/cube-camera/cube-camera.mjs +0 -161
  185. package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +0 -102
  186. package/esm2022/cameras/perspective-camera/perspective-camera.mjs +0 -46
  187. package/esm2022/controls/orbit-controls/orbit-controls.mjs +0 -185
  188. package/esm2022/gizmos/angular-three-soba-gizmos.mjs +0 -5
  189. package/esm2022/gizmos/gizmo-helper/gizmo-helper.mjs +0 -197
  190. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/constants.mjs +0 -31
  191. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -93
  192. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -150
  193. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.mjs +0 -66
  194. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +0 -71
  195. package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -195
  196. package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +0 -272
  197. package/esm2022/gizmos/index.mjs +0 -4
  198. package/esm2022/loaders/gltf-loader/gltf-loader.mjs +0 -30
  199. package/esm2022/loaders/loader/loader.mjs +0 -138
  200. package/esm2022/loaders/progress/progress.mjs +0 -52
  201. package/esm2022/loaders/texture-loader/texture-loader.mjs +0 -28
  202. package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +0 -82
  203. package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +0 -367
  204. package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +0 -171
  205. package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +0 -278
  206. package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +0 -68
  207. package/esm2022/materials/point-material/point-material.mjs +0 -50
  208. package/esm2022/misc/animations/animations.mjs +0 -59
  209. package/esm2022/misc/bake-shadows/bake-shadows.mjs +0 -24
  210. package/esm2022/misc/caustics/caustics.mjs +0 -387
  211. package/esm2022/misc/decal/decal.mjs +0 -187
  212. package/esm2022/misc/depth-buffer/depth-buffer.mjs +0 -44
  213. package/esm2022/misc/example/example.mjs +0 -160
  214. package/esm2022/misc/fbo/fbo.mjs +0 -47
  215. package/esm2022/misc/html/html-wrapper.mjs +0 -478
  216. package/esm2022/misc/html/html.mjs +0 -304
  217. package/esm2022/misc/sampler/sampler.mjs +0 -142
  218. package/esm2022/misc/shadow/shadow.mjs +0 -111
  219. package/esm2022/misc/stats-gl/stats-gl.mjs +0 -61
  220. package/esm2022/misc/trail/trail.mjs +0 -209
  221. package/esm2022/misc/trail-texture/inject-trail-texture.mjs +0 -17
  222. package/esm2022/misc/trail-texture/trail-texture.mjs +0 -106
  223. package/esm2022/modifiers/angular-three-soba-modifiers.mjs +0 -5
  224. package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +0 -64
  225. package/esm2022/modifiers/index.mjs +0 -2
  226. package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +0 -44
  227. package/esm2022/performances/adaptive-events/adaptive-events.mjs +0 -27
  228. package/esm2022/performances/angular-three-soba-performances.mjs +0 -5
  229. package/esm2022/performances/index.mjs +0 -8
  230. package/esm2022/performances/instances/instances.mjs +0 -220
  231. package/esm2022/performances/instances/position-mesh.mjs +0 -52
  232. package/esm2022/performances/points/points-input.mjs +0 -64
  233. package/esm2022/performances/points/points.mjs +0 -326
  234. package/esm2022/performances/points/position-point.mjs +0 -54
  235. package/esm2022/performances/segments/segment-object.mjs +0 -9
  236. package/esm2022/performances/segments/segments.mjs +0 -182
  237. package/esm2022/shaders/blur-pass/blur-pass.mjs +0 -61
  238. package/esm2022/shaders/caustics/caustics-material.mjs +0 -130
  239. package/esm2022/shaders/caustics/caustics-projection-material.mjs +0 -31
  240. package/esm2022/shaders/convolution-material/convolution-material.mjs +0 -94
  241. package/esm2022/shaders/discard-material/discard-material.mjs +0 -3
  242. package/esm2022/shaders/grid-material/grid-material.mjs +0 -77
  243. package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +0 -56
  244. package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +0 -223
  245. package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +0 -170
  246. package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +0 -268
  247. package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +0 -37
  248. package/esm2022/shaders/shader-material/shader-material.mjs +0 -34
  249. package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +0 -25
  250. package/esm2022/shaders/sparkles-material/sparkles-material.mjs +0 -33
  251. package/esm2022/shaders/spot-light-material/spot-light-material.mjs +0 -86
  252. package/esm2022/shaders/star-field-material/star-field-material.mjs +0 -33
  253. package/esm2022/shaders/wireframe-material/wireframe-material.mjs +0 -247
  254. package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +0 -267
  255. package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +0 -108
  256. package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +0 -206
  257. package/esm2022/staging/backdrop/backdrop.mjs +0 -77
  258. package/esm2022/staging/bb-anchor/bb-anchor.mjs +0 -69
  259. package/esm2022/staging/bounds/bounds.mjs +0 -308
  260. package/esm2022/staging/camera-shake/camera-shake.mjs +0 -123
  261. package/esm2022/staging/center/center.mjs +0 -165
  262. package/esm2022/staging/cloud/cloud.mjs +0 -158
  263. package/esm2022/staging/contact-shadows/contact-shadows.mjs +0 -246
  264. package/esm2022/staging/environment/assets.mjs +0 -13
  265. package/esm2022/staging/environment/environment-cube.mjs +0 -47
  266. package/esm2022/staging/environment/environment-ground.mjs +0 -41
  267. package/esm2022/staging/environment/environment-input.mjs +0 -119
  268. package/esm2022/staging/environment/environment-map.mjs +0 -53
  269. package/esm2022/staging/environment/environment-portal.mjs +0 -113
  270. package/esm2022/staging/environment/environment.mjs +0 -61
  271. package/esm2022/staging/environment/utils.mjs +0 -106
  272. package/esm2022/staging/float/float.mjs +0 -94
  273. package/esm2022/staging/matcap-texture/matcap-texture.mjs +0 -64
  274. package/esm2022/staging/normal-texture/normal-texture.mjs +0 -53
  275. package/esm2022/staging/sky/sky.mjs +0 -119
  276. package/esm2022/staging/sparkles/sparkles.mjs +0 -164
  277. package/esm2022/staging/spot-light/shadow-mesh-input.mjs +0 -63
  278. package/esm2022/staging/spot-light/shadow-mesh.mjs +0 -266
  279. package/esm2022/staging/spot-light/spot-light-input.mjs +0 -84
  280. package/esm2022/staging/spot-light/spot-light.mjs +0 -81
  281. package/esm2022/staging/spot-light/volumetric-mesh.mjs +0 -98
  282. package/esm2022/staging/stage/stage.mjs +0 -389
  283. package/esm2022/staging/stars/stars.mjs +0 -147
  284. package/esm2022/staging/wireframe/wireframe-input.mjs +0 -191
  285. package/esm2022/staging/wireframe/wireframe.mjs +0 -228
  286. package/esm2022/utils/angular-three-soba-utils.mjs +0 -5
  287. package/esm2022/utils/content/content.mjs +0 -15
  288. package/esm2022/utils/index.mjs +0 -2
  289. package/fesm2022/angular-three-soba-gizmos.mjs +0 -1043
  290. package/fesm2022/angular-three-soba-gizmos.mjs.map +0 -1
  291. package/fesm2022/angular-three-soba-modifiers.mjs +0 -71
  292. package/fesm2022/angular-three-soba-modifiers.mjs.map +0 -1
  293. package/fesm2022/angular-three-soba-performances.mjs +0 -956
  294. package/fesm2022/angular-three-soba-performances.mjs.map +0 -1
  295. package/fesm2022/angular-three-soba-utils.mjs +0 -22
  296. package/fesm2022/angular-three-soba-utils.mjs.map +0 -1
  297. package/gizmos/README.md +0 -3
  298. package/gizmos/gizmo-helper/gizmo-helper.d.ts +0 -69
  299. package/gizmos/gizmo-helper/gizmo-viewcube/constants.d.ts +0 -12
  300. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +0 -22
  301. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +0 -29
  302. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.d.ts +0 -33
  303. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +0 -10
  304. package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +0 -40
  305. package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +0 -30
  306. package/gizmos/index.d.ts +0 -3
  307. package/loaders/gltf-loader/gltf-loader.d.ts +0 -10
  308. package/loaders/loader/loader.d.ts +0 -33
  309. package/loaders/progress/progress.d.ts +0 -9
  310. package/loaders/texture-loader/texture-loader.d.ts +0 -7
  311. package/materials/mesh-distort-material/mesh-distort-material.d.ts +0 -40
  312. package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +0 -99
  313. package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +0 -62
  314. package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +0 -107
  315. package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +0 -29
  316. package/materials/point-material/point-material.d.ts +0 -24
  317. package/misc/animations/animations.d.ts +0 -15
  318. package/misc/caustics/caustics.d.ts +0 -87
  319. package/misc/decal/decal.d.ts +0 -49
  320. package/misc/depth-buffer/depth-buffer.d.ts +0 -9
  321. package/misc/example/example.d.ts +0 -81
  322. package/misc/fbo/fbo.d.ts +0 -17
  323. package/misc/html/html-wrapper.d.ts +0 -559
  324. package/misc/html/html.d.ts +0 -214
  325. package/misc/sampler/sampler.d.ts +0 -67
  326. package/misc/shadow/shadow.d.ts +0 -37
  327. package/misc/stats-gl/stats-gl.d.ts +0 -24
  328. package/misc/trail/trail.d.ts +0 -57
  329. package/misc/trail-texture/inject-trail-texture.d.ts +0 -9
  330. package/misc/trail-texture/trail-texture.d.ts +0 -50
  331. package/modifiers/README.md +0 -3
  332. package/modifiers/curve-modifier/curve-modifier.d.ts +0 -23
  333. package/modifiers/index.d.ts +0 -1
  334. package/performances/README.md +0 -3
  335. package/performances/adaptive-dpr/adaptive-dpr.d.ts +0 -14
  336. package/performances/adaptive-events/adaptive-events.d.ts +0 -9
  337. package/performances/index.d.ts +0 -7
  338. package/performances/instances/instances.d.ts +0 -79
  339. package/performances/instances/position-mesh.d.ts +0 -10
  340. package/performances/points/points-input.d.ts +0 -32
  341. package/performances/points/points.d.ts +0 -92
  342. package/performances/points/position-point.d.ts +0 -11
  343. package/performances/segments/segment-object.d.ts +0 -7
  344. package/performances/segments/segments.d.ts +0 -124
  345. package/shaders/blur-pass/blur-pass.d.ts +0 -23
  346. package/shaders/caustics/caustics-material.d.ts +0 -4
  347. package/shaders/caustics/caustics-projection-material.d.ts +0 -4
  348. package/shaders/convolution-material/convolution-material.d.ts +0 -7
  349. package/shaders/discard-material/discard-material.d.ts +0 -3
  350. package/shaders/grid-material/grid-material.d.ts +0 -37
  351. package/shaders/mesh-distort-material/mesh-distort-material.d.ts +0 -295
  352. package/shaders/mesh-reflector-material/mesh-reflector-material.d.ts +0 -50
  353. package/shaders/mesh-refraction-material/mesh-refraction-material.d.ts +0 -4
  354. package/shaders/mesh-transmission-material/mesh-transmission-material.d.ts +0 -25
  355. package/shaders/mesh-wobble-material/mesh-wobble-material.d.ts +0 -16
  356. package/shaders/shader-material/shader-material.d.ts +0 -6
  357. package/shaders/soft-shadow-material/soft-shadow-material.d.ts +0 -19
  358. package/shaders/sparkles-material/sparkles-material.d.ts +0 -17
  359. package/shaders/spot-light-material/spot-light-material.d.ts +0 -13
  360. package/shaders/star-field-material/star-field-material.d.ts +0 -13
  361. package/shaders/wireframe-material/wireframe-material.d.ts +0 -58
  362. package/staging/accumulative-shadows/accumulative-shadows.d.ts +0 -146
  363. package/staging/accumulative-shadows/progressive-light-map.d.ts +0 -34
  364. package/staging/accumulative-shadows/randomized-lights.d.ts +0 -90
  365. package/staging/backdrop/backdrop.d.ts +0 -30
  366. package/staging/bb-anchor/bb-anchor.d.ts +0 -27
  367. package/staging/bounds/bounds.d.ts +0 -134
  368. package/staging/camera-shake/camera-shake.d.ts +0 -43
  369. package/staging/center/center.d.ts +0 -70
  370. package/staging/cloud/cloud.d.ts +0 -51
  371. package/staging/contact-shadows/contact-shadows.d.ts +0 -70
  372. package/staging/environment/assets.d.ts +0 -13
  373. package/staging/environment/environment-cube.d.ts +0 -15
  374. package/staging/environment/environment-ground.d.ts +0 -13
  375. package/staging/environment/environment-input.d.ts +0 -68
  376. package/staging/environment/environment-map.d.ts +0 -16
  377. package/staging/environment/environment-portal.d.ts +0 -18
  378. package/staging/environment/environment.d.ts +0 -8
  379. package/staging/environment/utils.d.ts +0 -7
  380. package/staging/float/float.d.ts +0 -31
  381. package/staging/matcap-texture/matcap-texture.d.ts +0 -13
  382. package/staging/normal-texture/normal-texture.d.ts +0 -16
  383. package/staging/sky/sky.d.ts +0 -48
  384. package/staging/sparkles/sparkles.d.ts +0 -63
  385. package/staging/spot-light/shadow-mesh-input.d.ts +0 -29
  386. package/staging/spot-light/shadow-mesh.d.ts +0 -37
  387. package/staging/spot-light/spot-light-input.d.ts +0 -38
  388. package/staging/spot-light/spot-light.d.ts +0 -39
  389. package/staging/spot-light/volumetric-mesh.d.ts +0 -24
  390. package/staging/stage/stage.d.ts +0 -130
  391. package/staging/stars/stars.d.ts +0 -45
  392. package/staging/wireframe/wireframe-input.d.ts +0 -65
  393. package/staging/wireframe/wireframe.d.ts +0 -28
  394. package/utils/README.md +0 -3
  395. package/utils/content/content.d.ts +0 -8
  396. package/utils/index.d.ts +0 -1
  397. /package/misc/{bake-shadows → lib}/bake-shadows.d.ts +0 -0
@@ -0,0 +1,36 @@
1
+ import { ElementRef, TemplateRef } from '@angular/core';
2
+ import { NgtPerspectiveCamera } from 'angular-three';
3
+ import { Group, PerspectiveCamera, Texture } from 'three';
4
+ import * as i0 from "@angular/core";
5
+ export interface NgtsPerspectiveCameraOptions extends Partial<NgtPerspectiveCamera> {
6
+ /** Registers the camera as the system default, fiber will start rendering with it */
7
+ makeDefault?: boolean;
8
+ /** Making it manual will stop responsiveness and you have to calculate aspect ratio yourself. */
9
+ manual?: boolean;
10
+ /** Number of frames to render, Infinity */
11
+ frames: number;
12
+ /** Resolution of the FBO, 256 */
13
+ resolution: number;
14
+ /** Optional environment map for functional use */
15
+ envMap?: Texture;
16
+ }
17
+ export declare class NgtsPerspectiveCamera {
18
+ options: import("@angular/core").InputSignalWithTransform<NgtsPerspectiveCameraOptions, "" | Partial<NgtsPerspectiveCameraOptions>>;
19
+ parameters: import("@angular/core").Signal<Omit<NgtsPerspectiveCameraOptions, "resolution" | "envMap" | "frames" | "makeDefault" | "manual">>;
20
+ content: import("@angular/core").Signal<TemplateRef<any> | undefined>;
21
+ cameraContent: import("@angular/core").Signal<TemplateRef<any> | undefined>;
22
+ cameraRef: import("@angular/core").Signal<ElementRef<PerspectiveCamera>>;
23
+ groupRef: import("@angular/core").Signal<ElementRef<Group<import("three").Object3DEventMap>>>;
24
+ private autoEffect;
25
+ private store;
26
+ private camera;
27
+ private size;
28
+ private manual;
29
+ private makeDefault;
30
+ private resolution;
31
+ private fbo;
32
+ texture: import("@angular/core").Signal<Texture>;
33
+ constructor();
34
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgtsPerspectiveCamera, never>;
35
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgtsPerspectiveCamera, "ngts-perspective-camera", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; }, {}, ["content", "cameraContent"], never, true, never>;
36
+ }
@@ -1,3 +1,96 @@
1
- # angular-three-soba/controls
1
+ # `angular-three-soba/controls`
2
2
 
3
- Secondary entry point of `angular-three-soba`. It can be used by importing from `angular-three-soba/controls`.
3
+ This secondary entry point includes controls for manipulating the camera in your scene. It requires `camera-controls` as an additional dependency.
4
+
5
+ | Package | Description |
6
+ | ----------------- | -------------------------------- |
7
+ | `camera-controls` | required by `NgtsCameraControls` |
8
+
9
+ ```bash
10
+ npm install camera-controls
11
+ # yarn add camera-controls
12
+ # pnpm add camera-controls
13
+ ```
14
+
15
+ ## TOC
16
+
17
+ - [NgtsCameraControls](#ngtscameracontrols)
18
+ - [NgtsOrbitControls](#ngtsorbitcontrols)
19
+
20
+ ## NgtsCameraControls
21
+
22
+ A component that provides advanced camera controls based on the `camera-controls` library. It allows you to manipulate the camera's position, rotation, and other properties through various interactions.
23
+
24
+ ### Object Input (`NgtsCameraControlsOptions`)
25
+
26
+ | Property | Description | Default Value |
27
+ | ----------- | ---------------------------------------------------------------------------------------------------- | ------------------------ |
28
+ | camera | An instance of `NgtCamera` that the controls will manipulate. | `NgtStore.camera` |
29
+ | domElement | The HTML element that the controls will listen for events on. | `NgtStore.gl.domElement` |
30
+ | makeDefault | A boolean flag indicating whether these controls should be set as the default controls in the store. | `false` |
31
+ | events | A boolean flag indicating whether to enable or disable event listeners for the controls. | `false` |
32
+ | regress | A boolean flag indicating whether to enable or disable performance regression for the controls. | `false` |
33
+
34
+ Other options are available in the `camera-controls` library. For more information, see the [official documentation](https://github.com/yomotsu/camera-controls?tab=readme-ov-file)
35
+
36
+ ### Usage
37
+
38
+ ```ts
39
+ @Component({
40
+ standalone: true,
41
+ template: `
42
+ <ngt-mesh>
43
+ <ngt-box-geometry />
44
+ <ngt-mesh-basic-material color="red" [wireframe]="true" />
45
+ </ngt-mesh>
46
+
47
+ <ngt-grid-helper *args="[50, 50]" [position]="[0, -1, 0]" />
48
+
49
+ <ngts-camera-controls />
50
+ `,
51
+ imports: [NgtsCameraControls, NgtArgs],
52
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
53
+ changeDetection: ChangeDetectionStrategy.OnPush,
54
+ })
55
+ class DefaultCameraControlsStory {
56
+ rotate = input<keyof typeof rotations | 'none'>('none');
57
+
58
+ cameraControlsRef = viewChild.required(NgtsCameraControls);
59
+
60
+ constructor() {
61
+ effect(() => {
62
+ const [rotate, controls] = [this.rotate(), this.cameraControlsRef().controls()];
63
+ if (rotate !== 'none') {
64
+ const [theta, phi, animate] = rotations[rotate];
65
+ void controls.rotate(theta, phi, animate);
66
+ } else {
67
+ void controls.reset(true);
68
+ }
69
+ });
70
+ }
71
+ }
72
+ ```
73
+
74
+ ## NgtsOrbitControls
75
+
76
+ A component that provides orbit controls for rotating the camera around a target point. It is based on the OrbitControls class from the `three-stdlib` library.
77
+
78
+ ### Object Input (`NgtsOrbitControlsOptions`)
79
+
80
+ | Property | Description | Default Value |
81
+ | ------------- | ---------------------------------------------------------------------------------------------------- | ------------------------ |
82
+ | camera | An instance of `NgtCamera` that the controls will manipulate. | `NgtStore.camera` |
83
+ | domElement | The HTML element that the controls will listen for events on. | `NgtStore.gl.domElement` |
84
+ | target | The coordinates that the camera will orbit around. | `[0, 0, 0]` |
85
+ | makeDefault | A boolean flag indicating whether these controls should be set as the default controls in the store. | `false` |
86
+ | regress | A boolean flag indicating whether to enable or disable performance regression for the controls. | `false` |
87
+ | enableDamping | A boolean flag indicating whether to enable or disable damping (smoothness) of the camera movement. | `true` |
88
+ | keyEvents | A boolean flag or an HTML element indicating whether to enable keyboard events for the controls. | `false` |
89
+
90
+ Other options can pass through to `OrbitControls`.
91
+
92
+ ### Usage
93
+
94
+ ```html
95
+ <ngts-orbit-controls [options]="{ autoRotate: true }" />
96
+ ```
@@ -1 +1,2 @@
1
- export * from './orbit-controls/orbit-controls';
1
+ export * from './lib/camera-controls';
2
+ export * from './lib/orbit-controls';
@@ -0,0 +1,31 @@
1
+ import { NgtCamera } from 'angular-three';
2
+ import CameraControls from 'camera-controls';
3
+ import * as i0 from "@angular/core";
4
+ export interface NgtsCameraControlsOptions {
5
+ camera?: NgtCamera;
6
+ domElement?: HTMLElement;
7
+ makeDefault: boolean;
8
+ events: boolean;
9
+ regress: boolean;
10
+ }
11
+ export declare class NgtsCameraControls {
12
+ options: import("@angular/core").InputSignalWithTransform<Partial<CameraControls> & NgtsCameraControlsOptions, "" | Partial<Partial<CameraControls> & NgtsCameraControlsOptions>>;
13
+ parameters: import("@angular/core").Signal<Omit<Partial<CameraControls> & NgtsCameraControlsOptions, "camera" | "makeDefault" | "regress" | "domElement">>;
14
+ changed: import("@angular/core").OutputEmitterRef<any>;
15
+ started: import("@angular/core").OutputEmitterRef<any>;
16
+ ended: import("@angular/core").OutputEmitterRef<any>;
17
+ private store;
18
+ private invalidate;
19
+ private performanceRegress;
20
+ private defaultCamera;
21
+ private glDomElement;
22
+ private eventsElement;
23
+ private camera;
24
+ private regress;
25
+ private domElement;
26
+ private makeDefault;
27
+ controls: import("@angular/core").Signal<CameraControls>;
28
+ constructor();
29
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgtsCameraControls, never>;
30
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgtsCameraControls, "ngts-camera-controls", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; }, { "changed": "changed"; "started": "started"; "ended": "ended"; }, never, ["*"], true, never>;
31
+ }
@@ -0,0 +1,38 @@
1
+ import { NgtVector3 } from 'angular-three';
2
+ import { Camera, Event } from 'three';
3
+ import { OrbitControls } from 'three-stdlib';
4
+ import * as i0 from "@angular/core";
5
+ export interface NgtsOrbitControlsOptions {
6
+ camera?: Camera;
7
+ domElement?: HTMLElement;
8
+ target?: NgtVector3;
9
+ makeDefault: boolean;
10
+ regress: boolean;
11
+ enableDamping: boolean;
12
+ keyEvents: boolean | HTMLElement;
13
+ }
14
+ export declare class NgtsOrbitControls {
15
+ options: import("@angular/core").InputSignalWithTransform<Partial<OrbitControls> & NgtsOrbitControlsOptions, "" | Partial<Partial<OrbitControls> & NgtsOrbitControlsOptions>>;
16
+ parameters: import("@angular/core").Signal<Omit<Partial<OrbitControls> & NgtsOrbitControlsOptions, "camera" | "makeDefault" | "regress" | "domElement" | "enableDamping" | "keyEvents">>;
17
+ changed: import("@angular/core").OutputEmitterRef<Event<string, unknown>>;
18
+ started: import("@angular/core").OutputEmitterRef<Event<string, unknown>>;
19
+ ended: import("@angular/core").OutputEmitterRef<Event<string, unknown>>;
20
+ private store;
21
+ private invalidate;
22
+ private performanceRegress;
23
+ private defaultCamera;
24
+ private glDomElement;
25
+ private camera;
26
+ private regress;
27
+ private keyEvents;
28
+ private domElement;
29
+ private makeDefault;
30
+ controls: import("@angular/core").Signal<OrbitControls>;
31
+ protected enableDamping: import("@angular/core").Signal<boolean>;
32
+ constructor();
33
+ private connectElement;
34
+ private makeControlsDefault;
35
+ private setEvents;
36
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgtsOrbitControls, never>;
37
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgtsOrbitControls, "ngts-orbit-controls", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; }, { "changed": "changed"; "started": "started"; "ended": "ended"; }, never, ["*"], true, never>;
38
+ }
@@ -1,7 +1,12 @@
1
- export * from './billboard/billboard';
2
- export * from './detailed/detailed';
3
- export * from './edges/edges';
4
- export * from './grid/grid';
5
- export * from './text-3d/text-3d';
6
- export * from './text/text';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvYWJzdHJhY3Rpb25zL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYmlsbGJvYXJkL2JpbGxib2FyZCc7XG5leHBvcnQgKiBmcm9tICcuL2RldGFpbGVkL2RldGFpbGVkJztcbmV4cG9ydCAqIGZyb20gJy4vZWRnZXMvZWRnZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9ncmlkL2dyaWQnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXh0LTNkL3RleHQtM2QnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXh0L3RleHQnO1xuIl19
1
+ export * from './lib/catmull-rom-line';
2
+ export * from './lib/cubic-bezier-line';
3
+ export * from './lib/edges';
4
+ export * from './lib/gradient-texture';
5
+ export * from './lib/grid';
6
+ export * from './lib/helper';
7
+ export * from './lib/line';
8
+ export * from './lib/prism-geometry';
9
+ export * from './lib/quadratic-bezier-line';
10
+ export * from './lib/text';
11
+ export * from './lib/text-3d';
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvYWJzdHJhY3Rpb25zL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9jYXRtdWxsLXJvbS1saW5lJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2N1YmljLWJlemllci1saW5lJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VkZ2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2dyYWRpZW50LXRleHR1cmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZ3JpZCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9oZWxwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbGluZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcmlzbS1nZW9tZXRyeSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9xdWFkcmF0aWMtYmV6aWVyLWxpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGV4dCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90ZXh0LTNkJztcbiJdfQ==
@@ -0,0 +1,76 @@
1
+ import { ChangeDetectionStrategy, Component, computed, input, untracked, viewChild } from '@angular/core';
2
+ import { omit, pick } from 'angular-three';
3
+ import { mergeInputs } from 'ngxtension/inject-inputs';
4
+ import { CatmullRomCurve3, Color, Vector3 } from 'three';
5
+ import { NgtsLine } from './line';
6
+ import * as i0 from "@angular/core";
7
+ const defaultOptions = {
8
+ curveType: 'centripetal',
9
+ tension: 0.5,
10
+ segments: 20,
11
+ closed: false,
12
+ lineWidth: 1,
13
+ };
14
+ export class NgtsCatmullRomLine {
15
+ constructor() {
16
+ this.points = input.required();
17
+ this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
18
+ this.parameters = omit(this.options, ['curveType', 'tension', 'segments', 'closed', 'vertexColors']);
19
+ this.line = viewChild.required(NgtsLine);
20
+ this.closed = pick(this.options, 'closed');
21
+ this.curveType = pick(this.options, 'curveType');
22
+ this.tension = pick(this.options, 'tension');
23
+ this.segments = pick(this.options, 'segments');
24
+ this.vertexColors = pick(this.options, 'vertexColors');
25
+ this.curve = computed(() => {
26
+ const [points, closed, curveType, tension] = [this.points(), this.closed(), this.curveType(), this.tension()];
27
+ const mappedPoints = points.map((pt) => pt instanceof Vector3 ? pt : new Vector3(...pt));
28
+ return new CatmullRomCurve3(mappedPoints, closed, curveType, tension);
29
+ });
30
+ this.segmentedPoints = computed(() => {
31
+ const [curve, segments] = [this.curve(), this.segments()];
32
+ return curve.getPoints(segments);
33
+ });
34
+ this.interpolatedVertexColors = computed(() => {
35
+ const [vertexColors, segments] = [this.vertexColors(), this.segments()];
36
+ if (!vertexColors || vertexColors.length < 2)
37
+ return undefined;
38
+ if (vertexColors.length === segments + 1)
39
+ return vertexColors;
40
+ const mappedColors = vertexColors.map((color) => color instanceof Color ? color : new Color(...color));
41
+ if (untracked(this.closed))
42
+ mappedColors.push(mappedColors[0].clone());
43
+ const iColors = [mappedColors[0]];
44
+ const divisions = segments / (mappedColors.length - 1);
45
+ for (let i = 1; i < segments; i++) {
46
+ const alpha = (i % divisions) / divisions;
47
+ const colorIndex = Math.floor(i / divisions);
48
+ iColors.push(mappedColors[colorIndex].clone().lerp(mappedColors[colorIndex + 1], alpha));
49
+ }
50
+ iColors.push(mappedColors[mappedColors.length - 1]);
51
+ return iColors;
52
+ });
53
+ this.lineOptions = computed(() => ({ ...this.parameters(), vertexColors: this.interpolatedVertexColors() }));
54
+ }
55
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsCatmullRomLine, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
56
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.1.0", type: NgtsCatmullRomLine, isStandalone: true, selector: "ngts-catmull-rom-line", inputs: { points: { classPropertyName: "points", publicName: "points", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "line", first: true, predicate: NgtsLine, descendants: true, isSignal: true }], ngImport: i0, template: `
57
+ <ngts-line [points]="segmentedPoints()" [options]="lineOptions()">
58
+ <ng-content />
59
+ </ngts-line>
60
+ `, isInline: true, dependencies: [{ kind: "component", type: NgtsLine, selector: "ngts-line", inputs: ["points", "options"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
61
+ }
62
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsCatmullRomLine, decorators: [{
63
+ type: Component,
64
+ args: [{
65
+ selector: 'ngts-catmull-rom-line',
66
+ standalone: true,
67
+ template: `
68
+ <ngts-line [points]="segmentedPoints()" [options]="lineOptions()">
69
+ <ng-content />
70
+ </ngts-line>
71
+ `,
72
+ changeDetection: ChangeDetectionStrategy.OnPush,
73
+ imports: [NgtsLine],
74
+ }]
75
+ }] });
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0bXVsbC1yb20tbGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9hYnN0cmFjdGlvbnMvc3JjL2xpYi9jYXRtdWxsLXJvbS1saW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFtQixNQUFNLFFBQVEsQ0FBQzs7QUFTbkQsTUFBTSxjQUFjLEdBQThCO0lBQ2pELFNBQVMsRUFBRSxhQUFhO0lBQ3hCLE9BQU8sRUFBRSxHQUFHO0lBQ1osUUFBUSxFQUFFLEVBQUU7SUFDWixNQUFNLEVBQUUsS0FBSztJQUNiLFNBQVMsRUFBRSxDQUFDO0NBQ1osQ0FBQztBQWFGLE1BQU0sT0FBTyxrQkFBa0I7SUFYL0I7UUFZQyxXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBNkMsQ0FBQztRQUNyRSxZQUFPLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLGVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBRWhHLFNBQUksR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FB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VUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO2dCQUM3QyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzFGLENBQUM7WUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFcEQsT0FBTyxPQUFPLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxnQkFBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3hHOzhHQXBEWSxrQkFBa0I7a0dBQWxCLGtCQUFrQiwyWEFLSixRQUFRLGdFQWJ4Qjs7OztFQUlULDREQUVTLFFBQVE7OzJGQUVOLGtCQUFrQjtrQkFYOUIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7O0VBSVQ7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5wdXQsIHVudHJhY2tlZCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvbWl0LCBwaWNrIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBDYXRtdWxsUm9tQ3VydmUzLCBDb2xvciwgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE5ndHNMaW5lLCBOZ3RzTGluZU9wdGlvbnMgfSBmcm9tICcuL2xpbmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNDYXRtdWxsUm9tTGluZU9wdGlvbnMgZXh0ZW5kcyBPbWl0PE5ndHNMaW5lT3B0aW9ucywgJ3NlZ21lbnRzJz4ge1xuXHRjdXJ2ZVR5cGU6ICdjZW50cmlwZXRhbCcgfCAnY2hvcmRhbCcgfCAnY2F0bXVsbHJvbSc7XG5cdHRlbnNpb246IG51bWJlcjtcblx0c2VnbWVudHM6IG51bWJlcjtcblx0Y2xvc2VkOiBib29sZWFuO1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c0NhdG11bGxSb21MaW5lT3B0aW9ucyA9IHtcblx0Y3VydmVUeXBlOiAnY2VudHJpcGV0YWwnLFxuXHR0ZW5zaW9uOiAwLjUsXG5cdHNlZ21lbnRzOiAyMCxcblx0Y2xvc2VkOiBmYWxzZSxcblx0bGluZVdpZHRoOiAxLFxufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1jYXRtdWxsLXJvbS1saW5lJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0cy1saW5lIFtwb2ludHNdPVwic2VnbWVudGVkUG9pbnRzKClcIiBbb3B0aW9uc109XCJsaW5lT3B0aW9ucygpXCI+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmd0cy1saW5lPlxuXHRgLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW05ndHNMaW5lXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0NhdG11bGxSb21MaW5lIHtcblx0cG9pbnRzID0gaW5wdXQucmVxdWlyZWQ8QXJyYXk8VmVjdG9yMyB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXT4+KCk7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblx0cGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbJ2N1cnZlVHlwZScsICd0ZW5zaW9uJywgJ3NlZ21lbnRzJywgJ2Nsb3NlZCcsICd2ZXJ0ZXhDb2xvcnMnXSk7XG5cblx0bGluZSA9IHZpZXdDaGlsZC5yZXF1aXJlZChOZ3RzTGluZSk7XG5cblx0cHJpdmF0ZSBjbG9zZWQgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2Nsb3NlZCcpO1xuXHRwcml2YXRlIGN1cnZlVHlwZSA9IHBpY2sodGhpcy5vcHRpb25zLCAnY3VydmVUeXBlJyk7XG5cdHByaXZhdGUgdGVuc2lvbiA9IHBpY2sodGhpcy5vcHRpb25zLCAndGVuc2lvbicpO1xuXHRwcml2YXRlIHNlZ21lbnRzID0gcGljayh0aGlzLm9wdGlvbnMsICdzZWdtZW50cycpO1xuXHRwcml2YXRlIHZlcnRleENvbG9ycyA9IHBpY2sodGhpcy5vcHRpb25zLCAndmVydGV4Q29sb3JzJyk7XG5cblx0cHJpdmF0ZSBjdXJ2ZSA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBbcG9pbnRzLCBjbG9zZWQsIGN1cnZlVHlwZSwgdGVuc2lvbl0gPSBbdGhpcy5wb2ludHMoKSwgdGhpcy5jbG9zZWQoKSwgdGhpcy5jdXJ2ZVR5cGUoKSwgdGhpcy50ZW5zaW9uKCldO1xuXG5cdFx0Y29uc3QgbWFwcGVkUG9pbnRzID0gcG9pbnRzLm1hcCgocHQpID0+XG5cdFx0XHRwdCBpbnN0YW5jZW9mIFZlY3RvcjMgPyBwdCA6IG5ldyBWZWN0b3IzKC4uLihwdCBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pKSxcblx0XHQpO1xuXG5cdFx0cmV0dXJuIG5ldyBDYXRtdWxsUm9tQ3VydmUzKG1hcHBlZFBvaW50cywgY2xvc2VkLCBjdXJ2ZVR5cGUsIHRlbnNpb24pO1xuXHR9KTtcblxuXHRzZWdtZW50ZWRQb2ludHMgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgW2N1cnZlLCBzZWdtZW50c10gPSBbdGhpcy5jdXJ2ZSgpLCB0aGlzLnNlZ21lbnRzKCldO1xuXHRcdHJldHVybiBjdXJ2ZS5nZXRQb2ludHMoc2VnbWVudHMpO1xuXHR9KTtcblxuXHRwcml2YXRlIGludGVycG9sYXRlZFZlcnRleENvbG9ycyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBbdmVydGV4Q29sb3JzLCBzZWdtZW50c10gPSBbdGhpcy52ZXJ0ZXhDb2xvcnMoKSwgdGhpcy5zZWdtZW50cygpXTtcblx0XHRpZiAoIXZlcnRleENvbG9ycyB8fCB2ZXJ0ZXhDb2xvcnMubGVuZ3RoIDwgMikgcmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdGlmICh2ZXJ0ZXhDb2xvcnMubGVuZ3RoID09PSBzZWdtZW50cyArIDEpIHJldHVybiB2ZXJ0ZXhDb2xvcnM7XG5cblx0XHRjb25zdCBtYXBwZWRDb2xvcnMgPSB2ZXJ0ZXhDb2xvcnMubWFwKChjb2xvcikgPT5cblx0XHRcdGNvbG9yIGluc3RhbmNlb2YgQ29sb3IgPyBjb2xvciA6IG5ldyBDb2xvciguLi4oY29sb3IgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdKSksXG5cdFx0KTtcblx0XHRpZiAodW50cmFja2VkKHRoaXMuY2xvc2VkKSkgbWFwcGVkQ29sb3JzLnB1c2gobWFwcGVkQ29sb3JzWzBdLmNsb25lKCkpO1xuXG5cdFx0Y29uc3QgaUNvbG9yczogQ29sb3JbXSA9IFttYXBwZWRDb2xvcnNbMF1dO1xuXHRcdGNvbnN0IGRpdmlzaW9ucyA9IHNlZ21lbnRzIC8gKG1hcHBlZENvbG9ycy5sZW5ndGggLSAxKTtcblx0XHRmb3IgKGxldCBpID0gMTsgaSA8IHNlZ21lbnRzOyBpKyspIHtcblx0XHRcdGNvbnN0IGFscGhhID0gKGkgJSBkaXZpc2lvbnMpIC8gZGl2aXNpb25zO1xuXHRcdFx0Y29uc3QgY29sb3JJbmRleCA9IE1hdGguZmxvb3IoaSAvIGRpdmlzaW9ucyk7XG5cdFx0XHRpQ29sb3JzLnB1c2gobWFwcGVkQ29sb3JzW2NvbG9ySW5kZXhdLmNsb25lKCkubGVycChtYXBwZWRDb2xvcnNbY29sb3JJbmRleCArIDFdLCBhbHBoYSkpO1xuXHRcdH1cblx0XHRpQ29sb3JzLnB1c2gobWFwcGVkQ29sb3JzW21hcHBlZENvbG9ycy5sZW5ndGggLSAxXSk7XG5cblx0XHRyZXR1cm4gaUNvbG9ycztcblx0fSk7XG5cblx0bGluZU9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiAoeyAuLi50aGlzLnBhcmFtZXRlcnMoKSwgdmVydGV4Q29sb3JzOiB0aGlzLmludGVycG9sYXRlZFZlcnRleENvbG9ycygpIH0pKTtcbn1cbiJdfQ==
@@ -0,0 +1,51 @@
1
+ import { ChangeDetectionStrategy, Component, computed, input, viewChild } from '@angular/core';
2
+ import { omit, pick } from 'angular-three';
3
+ import { mergeInputs } from 'ngxtension/inject-inputs';
4
+ import { CubicBezierCurve3, Vector3 } from 'three';
5
+ import { NgtsLine } from './line';
6
+ import * as i0 from "@angular/core";
7
+ const defaultOptions = {
8
+ lineWidth: 1,
9
+ segments: 20,
10
+ };
11
+ export class NgtsCubicBezierLine {
12
+ constructor() {
13
+ this.start = input.required();
14
+ this.end = input.required();
15
+ this.midA = input.required();
16
+ this.midB = input.required();
17
+ this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
18
+ this.parameters = omit(this.options, ['segments']);
19
+ this.line = viewChild.required(NgtsLine);
20
+ this.segments = pick(this.options, 'segments');
21
+ this.points = computed(() => {
22
+ const [start, end, midA, midB, segments] = [this.start(), this.end(), this.midA(), this.midB(), this.segments()];
23
+ const startV = start instanceof Vector3 ? start : new Vector3(...start);
24
+ const endV = end instanceof Vector3 ? end : new Vector3(...end);
25
+ const midAV = midA instanceof Vector3 ? midA : new Vector3(...midA);
26
+ const midBV = midB instanceof Vector3 ? midB : new Vector3(...midB);
27
+ return new CubicBezierCurve3(startV, midAV, midBV, endV).getPoints(segments);
28
+ });
29
+ }
30
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsCubicBezierLine, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
31
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.1.0", type: NgtsCubicBezierLine, isStandalone: true, selector: "ngts-cubic-bezier-line", inputs: { start: { classPropertyName: "start", publicName: "start", isSignal: true, isRequired: true, transformFunction: null }, end: { classPropertyName: "end", publicName: "end", isSignal: true, isRequired: true, transformFunction: null }, midA: { classPropertyName: "midA", publicName: "midA", isSignal: true, isRequired: true, transformFunction: null }, midB: { classPropertyName: "midB", publicName: "midB", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "line", first: true, predicate: NgtsLine, descendants: true, isSignal: true }], ngImport: i0, template: `
32
+ <ngts-line [points]="points()" [options]="parameters()">
33
+ <ng-content />
34
+ </ngts-line>
35
+ `, isInline: true, dependencies: [{ kind: "component", type: NgtsLine, selector: "ngts-line", inputs: ["points", "options"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36
+ }
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsCubicBezierLine, decorators: [{
38
+ type: Component,
39
+ args: [{
40
+ selector: 'ngts-cubic-bezier-line',
41
+ standalone: true,
42
+ template: `
43
+ <ngts-line [points]="points()" [options]="parameters()">
44
+ <ng-content />
45
+ </ngts-line>
46
+ `,
47
+ changeDetection: ChangeDetectionStrategy.OnPush,
48
+ imports: [NgtsLine],
49
+ }]
50
+ }] });
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ViaWMtYmV6aWVyLWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvYWJzdHJhY3Rpb25zL3NyYy9saWIvY3ViaWMtYmV6aWVyLWxpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNuRCxPQUFPLEVBQUUsUUFBUSxFQUFtQixNQUFNLFFBQVEsQ0FBQzs7QUFNbkQsTUFBTSxjQUFjLEdBQStCO0lBQ2xELFNBQVMsRUFBRSxDQUFDO0lBQ1osUUFBUSxFQUFFLEVBQUU7Q0FDWixDQUFDO0FBYUYsTUFBTSxPQUFPLG1CQUFtQjtJQVhoQztRQVlDLFVBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFzQyxDQUFDO1FBQzdELFFBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFzQyxDQUFDO1FBQzNELFNBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFzQyxDQUFDO1FBQzVELFNBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFzQyxDQUFDO1FBQzVELFlBQU8sR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUUsZUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUU5QyxTQUFJLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU1QixhQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFbEQsV0FBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDdEIsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNqSCxNQUFNLE1BQU0sR0FBRyxLQUFLLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFDeEUsTUFBTSxJQUFJLEdBQUcsR0FBRyxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sS0FBSyxHQUFHLElBQUksWUFBWSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUNwRSxNQUFNLEtBQUssR0FBRyxJQUFJLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDcEUsT0FBTyxJQUFJLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5RSxDQUFDLENBQUMsQ0FBQztLQUNIOzhHQXBCWSxtQkFBbUI7a0dBQW5CLG1CQUFtQixrdEJBUUwsUUFBUSxnRUFoQnhCOzs7O0VBSVQsNERBRVMsUUFBUTs7MkZBRU4sbUJBQW1CO2tCQVgvQixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7RUFJVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbnB1dCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvbWl0LCBwaWNrIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBDdWJpY0JlemllckN1cnZlMywgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE5ndHNMaW5lLCBOZ3RzTGluZU9wdGlvbnMgfSBmcm9tICcuL2xpbmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNDdWJpY0JlemllckxpbmVPcHRpb25zIGV4dGVuZHMgT21pdDxOZ3RzTGluZU9wdGlvbnMsICdzZWdtZW50cyc+IHtcblx0c2VnbWVudHM/OiBudW1iZXI7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOZ3RzQ3ViaWNCZXppZXJMaW5lT3B0aW9ucyA9IHtcblx0bGluZVdpZHRoOiAxLFxuXHRzZWdtZW50czogMjAsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLWN1YmljLWJlemllci1saW5lJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0cy1saW5lIFtwb2ludHNdPVwicG9pbnRzKClcIiBbb3B0aW9uc109XCJwYXJhbWV0ZXJzKClcIj5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3RzLWxpbmU+XG5cdGAsXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuXHRpbXBvcnRzOiBbTmd0c0xpbmVdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzQ3ViaWNCZXppZXJMaW5lIHtcblx0c3RhcnQgPSBpbnB1dC5yZXF1aXJlZDxWZWN0b3IzIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdPigpO1xuXHRlbmQgPSBpbnB1dC5yZXF1aXJlZDxWZWN0b3IzIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdPigpO1xuXHRtaWRBID0gaW5wdXQucmVxdWlyZWQ8VmVjdG9yMyB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXT4oKTtcblx0bWlkQiA9IGlucHV0LnJlcXVpcmVkPFZlY3RvcjMgfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0+KCk7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblx0cGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbJ3NlZ21lbnRzJ10pO1xuXG5cdGxpbmUgPSB2aWV3Q2hpbGQucmVxdWlyZWQoTmd0c0xpbmUpO1xuXG5cdHByaXZhdGUgc2VnbWVudHMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3NlZ21lbnRzJyk7XG5cblx0cG9pbnRzID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IFtzdGFydCwgZW5kLCBtaWRBLCBtaWRCLCBzZWdtZW50c10gPSBbdGhpcy5zdGFydCgpLCB0aGlzLmVuZCgpLCB0aGlzLm1pZEEoKSwgdGhpcy5taWRCKCksIHRoaXMuc2VnbWVudHMoKV07XG5cdFx0Y29uc3Qgc3RhcnRWID0gc3RhcnQgaW5zdGFuY2VvZiBWZWN0b3IzID8gc3RhcnQgOiBuZXcgVmVjdG9yMyguLi5zdGFydCk7XG5cdFx0Y29uc3QgZW5kViA9IGVuZCBpbnN0YW5jZW9mIFZlY3RvcjMgPyBlbmQgOiBuZXcgVmVjdG9yMyguLi5lbmQpO1xuXHRcdGNvbnN0IG1pZEFWID0gbWlkQSBpbnN0YW5jZW9mIFZlY3RvcjMgPyBtaWRBIDogbmV3IFZlY3RvcjMoLi4ubWlkQSk7XG5cdFx0Y29uc3QgbWlkQlYgPSBtaWRCIGluc3RhbmNlb2YgVmVjdG9yMyA/IG1pZEIgOiBuZXcgVmVjdG9yMyguLi5taWRCKTtcblx0XHRyZXR1cm4gbmV3IEN1YmljQmV6aWVyQ3VydmUzKHN0YXJ0ViwgbWlkQVYsIG1pZEJWLCBlbmRWKS5nZXRQb2ludHMoc2VnbWVudHMpO1xuXHR9KTtcbn1cbiJdfQ==
@@ -0,0 +1,70 @@
1
+ import { afterNextRender, ChangeDetectionStrategy, Component, computed, input, viewChild } from '@angular/core';
2
+ import { checkNeedsUpdate, getLocalState, omit } from 'angular-three';
3
+ import { injectAutoEffect } from 'ngxtension/auto-effect';
4
+ import { mergeInputs } from 'ngxtension/inject-inputs';
5
+ import { EdgesGeometry } from 'three';
6
+ import { NgtsLine } from './line';
7
+ import * as i0 from "@angular/core";
8
+ const defaultOptions = {
9
+ lineWidth: 1,
10
+ threshold: 15,
11
+ };
12
+ export class NgtsEdges {
13
+ constructor() {
14
+ this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
15
+ this.parameters = omit(this.options, ['threshold', 'geometry']);
16
+ this.lineOptions = computed(() => ({ ...this.parameters(), raycast: () => null }));
17
+ this.tmpPoints = [0, 0, 0, 1, 0, 0];
18
+ this.line = viewChild.required(NgtsLine);
19
+ const autoEffect = injectAutoEffect();
20
+ afterNextRender(() => {
21
+ autoEffect(() => {
22
+ const line = this.line().line()?.nativeElement;
23
+ if (!line)
24
+ return;
25
+ const lS = getLocalState(line);
26
+ if (!lS)
27
+ return;
28
+ const parent = lS.parent();
29
+ if (!parent)
30
+ return;
31
+ const { geometry: explicitGeometry, threshold } = this.options();
32
+ const geometry = explicitGeometry ?? parent.geometry;
33
+ if (!geometry)
34
+ return;
35
+ const cached = this.memoizedGeometry === geometry && this.memoizedThreshold === threshold;
36
+ if (cached)
37
+ return;
38
+ this.memoizedGeometry = geometry;
39
+ this.memoizedThreshold = threshold;
40
+ const points = new EdgesGeometry(geometry, threshold).attributes['position']
41
+ .array;
42
+ line.geometry.setPositions(points);
43
+ checkNeedsUpdate(line.geometry.attributes['instanceStart']);
44
+ checkNeedsUpdate(line.geometry.attributes['instanceEnd']);
45
+ line.computeLineDistances();
46
+ });
47
+ });
48
+ }
49
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsEdges, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
50
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.1.0", type: NgtsEdges, isStandalone: true, selector: "ngts-edges", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "line", first: true, predicate: NgtsLine, descendants: true, isSignal: true }], ngImport: i0, template: `
51
+ <ngts-line [points]="tmpPoints" [options]="lineOptions()">
52
+ <ng-content />
53
+ </ngts-line>
54
+ `, isInline: true, dependencies: [{ kind: "component", type: NgtsLine, selector: "ngts-line", inputs: ["points", "options"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
55
+ }
56
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsEdges, decorators: [{
57
+ type: Component,
58
+ args: [{
59
+ selector: 'ngts-edges',
60
+ standalone: true,
61
+ template: `
62
+ <ngts-line [points]="tmpPoints" [options]="lineOptions()">
63
+ <ng-content />
64
+ </ngts-line>
65
+ `,
66
+ imports: [NgtsLine],
67
+ changeDetection: ChangeDetectionStrategy.OnPush,
68
+ }]
69
+ }], ctorParameters: () => [] });
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvYWJzdHJhY3Rpb25zL3NyYy9saWIvZWRnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBVyxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBd0QsYUFBYSxFQUFRLE1BQU0sT0FBTyxDQUFDO0FBRWxHLE9BQU8sRUFBNkIsUUFBUSxFQUFFLE1BQU0sUUFBUSxDQUFDOztBQVk3RCxNQUFNLGNBQWMsR0FBcUI7SUFDeEMsU0FBUyxFQUFFLENBQUM7SUFDWixTQUFTLEVBQUUsRUFBRTtDQUNiLENBQUM7QUFhRixNQUFNLE9BQU8sU0FBUztJQVlyQjtRQVhBLFlBQU8sR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEUsZUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFekQsZ0JBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUUsY0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV6QyxTQUFJLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQU1uQyxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3RDLGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsYUFBYSxDQUFDO2dCQUMvQyxJQUFJLENBQUMsSUFBSTtvQkFBRSxPQUFPO2dCQUVsQixNQUFNLEVBQUUsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxFQUFFO29CQUFFLE9BQU87Z0JBRWhCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQVUsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLE1BQU07b0JBQUUsT0FBTztnQkFFcEIsTUFBTSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pFLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxRQUFRO29CQUFFLE9BQU87Z0JBRXRCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLFNBQVMsQ0FBQztnQkFDMUYsSUFBSSxNQUFNO29CQUFFLE9BQU87Z0JBRW5CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7Z0JBRW5DLE1BQU0sTUFBTSxHQUFJLElBQUksYUFBYSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFxQjtxQkFDL0YsS0FBcUIsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ25DLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7Z0JBQzVELGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQzFELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDOzhHQTNDVyxTQUFTO2tHQUFULFNBQVMsc1BBT0ssUUFBUSxnRUFmeEI7Ozs7RUFJVCw0REFDUyxRQUFROzsyRkFHTixTQUFTO2tCQVhyQixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxZQUFZO29CQUN0QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7O0VBSVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO29CQUNuQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDL0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhZnRlck5leHRSZW5kZXIsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbnB1dCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjaGVja05lZWRzVXBkYXRlLCBnZXRMb2NhbFN0YXRlLCBOZ3RNZXNoLCBvbWl0IH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBpbmplY3RBdXRvRWZmZWN0IH0gZnJvbSAnbmd4dGVuc2lvbi9hdXRvLWVmZmVjdCc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBCdWZmZXJBdHRyaWJ1dGUsIEJ1ZmZlckdlb21ldHJ5LCBDb2xvclJlcHJlc2VudGF0aW9uLCBFZGdlc0dlb21ldHJ5LCBNZXNoIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTGluZU1hdGVyaWFsUGFyYW1ldGVycyB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5pbXBvcnQgeyBOZ3RMaW5lMiwgTmd0TGluZU1hdGVyaWFsLCBOZ3RzTGluZSB9IGZyb20gJy4vbGluZSc7XG5cbmV4cG9ydCB0eXBlIE5ndHNFZGdlc09wdGlvbnMgPSBQYXJ0aWFsPE5ndE1lc2g+ICYge1xuXHR0aHJlc2hvbGQ/OiBudW1iZXI7XG5cdGxpbmVXaWR0aD86IG51bWJlcjtcbn0gJiBPbWl0PExpbmVNYXRlcmlhbFBhcmFtZXRlcnMsICd2ZXJ0ZXhDb2xvcnMnIHwgJ2NvbG9yJz4gJlxuXHRPbWl0PFBhcnRpYWw8Tmd0TGluZTI+LCAnZ2VvbWV0cnknPiAmXG5cdE9taXQ8UGFydGlhbDxOZ3RMaW5lTWF0ZXJpYWw+LCAnY29sb3InIHwgJ3ZlcnRleENvbG9ycyc+ICYge1xuXHRcdGdlb21ldHJ5PzogQnVmZmVyR2VvbWV0cnk7XG5cdFx0Y29sb3I/OiBDb2xvclJlcHJlc2VudGF0aW9uO1xuXHR9O1xuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c0VkZ2VzT3B0aW9ucyA9IHtcblx0bGluZVdpZHRoOiAxLFxuXHR0aHJlc2hvbGQ6IDE1LFxufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1lZGdlcycsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndHMtbGluZSBbcG9pbnRzXT1cInRtcFBvaW50c1wiIFtvcHRpb25zXT1cImxpbmVPcHRpb25zKClcIj5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3RzLWxpbmU+XG5cdGAsXG5cdGltcG9ydHM6IFtOZ3RzTGluZV0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzRWRnZXMge1xuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cdHByaXZhdGUgcGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbJ3RocmVzaG9sZCcsICdnZW9tZXRyeSddKTtcblxuXHRwcm90ZWN0ZWQgbGluZU9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiAoeyAuLi50aGlzLnBhcmFtZXRlcnMoKSwgcmF5Y2FzdDogKCkgPT4gbnVsbCB9KSk7XG5cdHByb3RlY3RlZCB0bXBQb2ludHMgPSBbMCwgMCwgMCwgMSwgMCwgMF07XG5cblx0bGluZSA9IHZpZXdDaGlsZC5yZXF1aXJlZChOZ3RzTGluZSk7XG5cblx0cHJpdmF0ZSBtZW1vaXplZEdlb21ldHJ5PzogQnVmZmVyR2VvbWV0cnk7XG5cdHByaXZhdGUgbWVtb2l6ZWRUaHJlc2hvbGQ/OiBudW1iZXI7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0Y29uc3QgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuXHRcdFx0YXV0b0VmZmVjdCgoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGxpbmUgPSB0aGlzLmxpbmUoKS5saW5lKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRcdGlmICghbGluZSkgcmV0dXJuO1xuXG5cdFx0XHRcdGNvbnN0IGxTID0gZ2V0TG9jYWxTdGF0ZShsaW5lKTtcblx0XHRcdFx0aWYgKCFsUykgcmV0dXJuO1xuXG5cdFx0XHRcdGNvbnN0IHBhcmVudCA9IGxTLnBhcmVudCgpIGFzIE1lc2g7XG5cdFx0XHRcdGlmICghcGFyZW50KSByZXR1cm47XG5cblx0XHRcdFx0Y29uc3QgeyBnZW9tZXRyeTogZXhwbGljaXRHZW9tZXRyeSwgdGhyZXNob2xkIH0gPSB0aGlzLm9wdGlvbnMoKTtcblx0XHRcdFx0Y29uc3QgZ2VvbWV0cnkgPSBleHBsaWNpdEdlb21ldHJ5ID8/IHBhcmVudC5nZW9tZXRyeTtcblx0XHRcdFx0aWYgKCFnZW9tZXRyeSkgcmV0dXJuO1xuXG5cdFx0XHRcdGNvbnN0IGNhY2hlZCA9IHRoaXMubWVtb2l6ZWRHZW9tZXRyeSA9PT0gZ2VvbWV0cnkgJiYgdGhpcy5tZW1vaXplZFRocmVzaG9sZCA9PT0gdGhyZXNob2xkO1xuXHRcdFx0XHRpZiAoY2FjaGVkKSByZXR1cm47XG5cblx0XHRcdFx0dGhpcy5tZW1vaXplZEdlb21ldHJ5ID0gZ2VvbWV0cnk7XG5cdFx0XHRcdHRoaXMubWVtb2l6ZWRUaHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG5cblx0XHRcdFx0Y29uc3QgcG9pbnRzID0gKG5ldyBFZGdlc0dlb21ldHJ5KGdlb21ldHJ5LCB0aHJlc2hvbGQpLmF0dHJpYnV0ZXNbJ3Bvc2l0aW9uJ10gYXMgQnVmZmVyQXR0cmlidXRlKVxuXHRcdFx0XHRcdC5hcnJheSBhcyBGbG9hdDMyQXJyYXk7XG5cdFx0XHRcdGxpbmUuZ2VvbWV0cnkuc2V0UG9zaXRpb25zKHBvaW50cyk7XG5cdFx0XHRcdGNoZWNrTmVlZHNVcGRhdGUobGluZS5nZW9tZXRyeS5hdHRyaWJ1dGVzWydpbnN0YW5jZVN0YXJ0J10pO1xuXHRcdFx0XHRjaGVja05lZWRzVXBkYXRlKGxpbmUuZ2VvbWV0cnkuYXR0cmlidXRlc1snaW5zdGFuY2VFbmQnXSk7XG5cdFx0XHRcdGxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG59XG4iXX0=
@@ -0,0 +1,91 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, inject, input, untracked, } from '@angular/core';
3
+ import { extend, injectStore, NgtArgs, omit } from 'angular-three';
4
+ import { mergeInputs } from 'ngxtension/inject-inputs';
5
+ import { CanvasTexture, Color } from 'three';
6
+ import * as i0 from "@angular/core";
7
+ const defaultOptions = {
8
+ size: 1024,
9
+ width: 16,
10
+ type: 'linear',
11
+ innerCircleRadius: 0,
12
+ outerCircleRadius: 'auto',
13
+ };
14
+ export class NgtsGradientTexture {
15
+ constructor() {
16
+ this.attach = input('map');
17
+ this.stops = input.required();
18
+ this.colors = input.required();
19
+ this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
20
+ this.parameters = omit(this.options, ['size', 'width', 'type', 'innerCircleRadius', 'outerCircleRadius']);
21
+ this.store = injectStore();
22
+ this.gl = this.store.select('gl');
23
+ this.document = inject(DOCUMENT);
24
+ this.canvas = computed(() => {
25
+ const canvas = this.document.createElement('canvas');
26
+ const context = canvas.getContext('2d');
27
+ const [{ width, size, type, outerCircleRadius, innerCircleRadius }, stops, colors] = [
28
+ untracked(this.options),
29
+ this.stops(),
30
+ this.colors(),
31
+ ];
32
+ canvas.width = width;
33
+ canvas.height = size;
34
+ let gradient;
35
+ if (type === 'linear') {
36
+ gradient = context.createLinearGradient(0, 0, 0, size);
37
+ }
38
+ else {
39
+ const canvasCenterX = canvas.width / 2;
40
+ const canvasCenterY = canvas.height / 2;
41
+ const radius = outerCircleRadius !== 'auto'
42
+ ? Math.abs(Number(outerCircleRadius))
43
+ : Math.sqrt(canvasCenterX ** 2 + canvasCenterY ** 2);
44
+ gradient = context.createRadialGradient(canvasCenterX, canvasCenterY, Math.abs(innerCircleRadius), canvasCenterX, canvasCenterY, radius);
45
+ }
46
+ const tempColor = new Color(); // reuse instance for performance
47
+ let i = stops.length;
48
+ while (i--) {
49
+ gradient.addColorStop(stops[i], tempColor.set(colors[i]).getStyle());
50
+ }
51
+ context.save();
52
+ context.fillStyle = gradient;
53
+ context.fillRect(0, 0, width, size);
54
+ context.restore();
55
+ return canvas;
56
+ });
57
+ extend({ CanvasTexture });
58
+ }
59
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsGradientTexture, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
60
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.1.0", type: NgtsGradientTexture, isStandalone: true, selector: "ngts-gradient-texture", inputs: { attach: { classPropertyName: "attach", publicName: "attach", isSignal: true, isRequired: false, transformFunction: null }, stops: { classPropertyName: "stops", publicName: "stops", isSignal: true, isRequired: true, transformFunction: null }, colors: { classPropertyName: "colors", publicName: "colors", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
61
+ <ngt-canvas-texture
62
+ *args="[canvas()]"
63
+ [attach]="attach()"
64
+ [colorSpace]="gl().outputColorSpace"
65
+ [parameters]="parameters()"
66
+ >
67
+ <ng-content />
68
+ </ngt-canvas-texture>
69
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
70
+ }
71
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsGradientTexture, decorators: [{
72
+ type: Component,
73
+ args: [{
74
+ selector: 'ngts-gradient-texture',
75
+ standalone: true,
76
+ template: `
77
+ <ngt-canvas-texture
78
+ *args="[canvas()]"
79
+ [attach]="attach()"
80
+ [colorSpace]="gl().outputColorSpace"
81
+ [parameters]="parameters()"
82
+ >
83
+ <ng-content />
84
+ </ngt-canvas-texture>
85
+ `,
86
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
87
+ changeDetection: ChangeDetectionStrategy.OnPush,
88
+ imports: [NgtArgs],
89
+ }]
90
+ }], ctorParameters: () => [] });
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhZGllbnQtdGV4dHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9hYnN0cmFjdGlvbnMvc3JjL2xpYi9ncmFkaWVudC10ZXh0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ04sdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1Isc0JBQXNCLEVBQ3RCLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBYyxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUF1QixNQUFNLE9BQU8sQ0FBQzs7QUFVbEUsTUFBTSxjQUFjLEdBQStCO0lBQ2xELElBQUksRUFBRSxJQUFJO0lBQ1YsS0FBSyxFQUFFLEVBQUU7SUFDVCxJQUFJLEVBQUUsUUFBUTtJQUNkLGlCQUFpQixFQUFFLENBQUM7SUFDcEIsaUJBQWlCLEVBQUUsTUFBTTtDQUN6QixDQUFDO0FBbUJGLE1BQU0sT0FBTyxtQkFBbUI7SUEwRC9CO1FBekRBLFdBQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQWlCLENBQUM7UUFDeEMsV0FBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQThCLENBQUM7UUFDdEQsWUFBTyxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1RSxlQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFP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LDREQUdTLE9BQU87OzJGQUVMLG1CQUFtQjtrQkFqQi9CLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7O0VBU1Q7b0JBQ0QsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7aUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdGluamVjdCxcblx0aW5wdXQsXG5cdHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBleHRlbmQsIGluamVjdFN0b3JlLCBOZ3RBcmdzLCBOZ3RUZXh0dXJlLCBvbWl0IH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBDYW52YXNUZXh0dXJlLCBDb2xvciwgQ29sb3JSZXByZXNlbnRhdGlvbiB9IGZyb20gJ3RocmVlJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzR3JhZGllbnRUZXh0dXJlT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8T21pdDxOZ3RUZXh0dXJlLCAndHlwZSc+PiB7XG5cdHNpemU6IG51bWJlcjtcblx0d2lkdGg6IG51bWJlcjtcblx0dHlwZTogJ2xpbmVhcicgfCAncmFkaWFsJztcblx0aW5uZXJDaXJjbGVSYWRpdXM6IG51bWJlcjtcblx0b3V0ZXJDaXJjbGVSYWRpdXM6IHN0cmluZyB8IG51bWJlcjtcbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE5ndHNHcmFkaWVudFRleHR1cmVPcHRpb25zID0ge1xuXHRzaXplOiAxMDI0LFxuXHR3aWR0aDogMTYsXG5cdHR5cGU6ICdsaW5lYXInLFxuXHRpbm5lckNpcmNsZVJhZGl1czogMCxcblx0b3V0ZXJDaXJjbGVSYWRpdXM6ICdhdXRvJyxcbn07XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtZ3JhZGllbnQtdGV4dHVyZScsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1jYW52YXMtdGV4dHVyZVxuXHRcdFx0KmFyZ3M9XCJbY2FudmFzKCldXCJcblx0XHRcdFthdHRhY2hdPVwiYXR0YWNoKClcIlxuXHRcdFx0W2NvbG9yU3BhY2VdPVwiZ2woKS5vdXRwdXRDb2xvclNwYWNlXCJcblx0XHRcdFtwYXJhbWV0ZXJzXT1cInBhcmFtZXRlcnMoKVwiXG5cdFx0PlxuXHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHQ8L25ndC1jYW52YXMtdGV4dHVyZT5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW05ndEFyZ3NdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzR3JhZGllbnRUZXh0dXJlIHtcblx0YXR0YWNoID0gaW5wdXQoJ21hcCcpO1xuXHRzdG9wcyA9IGlucHV0LnJlcXVpcmVkPEFycmF5PG51bWJlcj4+KCk7XG5cdGNvbG9ycyA9IGlucHV0LnJlcXVpcmVkPEFycmF5PENvbG9yUmVwcmVzZW50YXRpb24+PigpO1xuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cdHBhcmFtZXRlcnMgPSBvbWl0KHRoaXMub3B0aW9ucywgWydzaXplJywgJ3dpZHRoJywgJ3R5cGUnLCAnaW5uZXJDaXJjbGVSYWRpdXMnLCAnb3V0ZXJDaXJjbGVSYWRpdXMnXSk7XG5cblx0cHJpdmF0ZSBzdG9yZSA9IGluamVjdFN0b3JlKCk7XG5cdGdsID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2dsJyk7XG5cdHByaXZhdGUgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG5cdGNhbnZhcyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBjYW52YXMgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXHRcdGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKSE7XG5cdFx0Y29uc3QgW3sgd2lkdGgsIHNpemUsIHR5cGUsIG91dGVyQ2lyY2xlUmFkaXVzLCBpbm5lckNpcmNsZVJhZGl1cyB9LCBzdG9wcywgY29sb3JzXSA9IFtcblx0XHRcdHVudHJhY2tlZCh0aGlzLm9wdGlvbnMpLFxuXHRcdFx0dGhpcy5zdG9wcygpLFxuXHRcdFx0dGhpcy5jb2xvcnMoKSxcblx0XHRdO1xuXHRcdGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuXHRcdGNhbnZhcy5oZWlnaHQgPSBzaXplO1xuXG5cdFx0bGV0IGdyYWRpZW50OiBDYW52YXNHcmFkaWVudDtcblxuXHRcdGlmICh0eXBlID09PSAnbGluZWFyJykge1xuXHRcdFx0Z3JhZGllbnQgPSBjb250ZXh0LmNyZWF0ZUxpbmVhckdyYWRpZW50KDAsIDAsIDAsIHNpemUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBjYW52YXNDZW50ZXJYID0gY2FudmFzLndpZHRoIC8gMjtcblx0XHRcdGNvbnN0IGNhbnZhc0NlbnRlclkgPSBjYW52YXMuaGVpZ2h0IC8gMjtcblx0XHRcdGNvbnN0IHJhZGl1cyA9XG5cdFx0XHRcdG91dGVyQ2lyY2xlUmFkaXVzICE9PSAnYXV0bydcblx0XHRcdFx0XHQ/IE1hdGguYWJzKE51bWJlcihvdXRlckNpcmNsZVJhZGl1cykpXG5cdFx0XHRcdFx0OiBNYXRoLnNxcnQoY2FudmFzQ2VudGVyWCAqKiAyICsgY2FudmFzQ2VudGVyWSAqKiAyKTtcblx0XHRcdGdyYWRpZW50ID0gY29udGV4dC5jcmVhdGVSYWRpYWxHcmFkaWVudChcblx0XHRcdFx0Y2FudmFzQ2VudGVyWCxcblx0XHRcdFx0Y2FudmFzQ2VudGVyWSxcblx0XHRcdFx0TWF0aC5hYnMoaW5uZXJDaXJjbGVSYWRpdXMpLFxuXHRcdFx0XHRjYW52YXNDZW50ZXJYLFxuXHRcdFx0XHRjYW52YXNDZW50ZXJZLFxuXHRcdFx0XHRyYWRpdXMsXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRlbXBDb2xvciA9IG5ldyBDb2xvcigpOyAvLyByZXVzZSBpbnN0YW5jZSBmb3IgcGVyZm9ybWFuY2VcblxuXHRcdGxldCBpID0gc3RvcHMubGVuZ3RoO1xuXHRcdHdoaWxlIChpLS0pIHtcblx0XHRcdGdyYWRpZW50LmFkZENvbG9yU3RvcChzdG9wc1tpXSwgdGVtcENvbG9yLnNldChjb2xvcnNbaV0pLmdldFN0eWxlKCkpO1xuXHRcdH1cblxuXHRcdGNvbnRleHQuc2F2ZSgpO1xuXHRcdGNvbnRleHQuZmlsbFN0eWxlID0gZ3JhZGllbnQ7XG5cdFx0Y29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgc2l6ZSk7XG5cdFx0Y29udGV4dC5yZXN0b3JlKCk7XG5cblx0XHRyZXR1cm4gY2FudmFzO1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRleHRlbmQoeyBDYW52YXNUZXh0dXJlIH0pO1xuXHR9XG59XG4iXX0=