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,103 @@
1
+ import { ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, input, viewChild, } from '@angular/core';
2
+ import { extend, injectBeforeRender, NgtArgs, omit, pick } from 'angular-three';
3
+ import { GridMaterial } from 'angular-three-soba/shaders';
4
+ import { mergeInputs } from 'ngxtension/inject-inputs';
5
+ import { BackSide, Mesh, Plane, PlaneGeometry, Vector3 } from 'three';
6
+ import * as i0 from "@angular/core";
7
+ const defaultOptions = {
8
+ planeArgs: [],
9
+ cellSize: 0.5,
10
+ cellThickness: 0.5,
11
+ cellColor: 'black',
12
+ sectionSize: 1,
13
+ sectionThickness: 1,
14
+ sectionColor: '#2080ff',
15
+ infiniteGrid: false,
16
+ followCamera: false,
17
+ fadeDistance: 100,
18
+ fadeStrength: 1,
19
+ fadeFrom: 1,
20
+ side: BackSide,
21
+ };
22
+ export class NgtsGrid {
23
+ constructor() {
24
+ this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
25
+ this.parameters = omit(this.options, [
26
+ 'planeArgs',
27
+ 'cellSize',
28
+ 'cellThickness',
29
+ 'cellColor',
30
+ 'sectionSize',
31
+ 'sectionThickness',
32
+ 'sectionColor',
33
+ 'infiniteGrid',
34
+ 'followCamera',
35
+ 'fadeDistance',
36
+ 'fadeStrength',
37
+ 'fadeFrom',
38
+ 'side',
39
+ ]);
40
+ this.mesh = viewChild.required('mesh');
41
+ this.plane = new Plane();
42
+ this.upVector = new Vector3(0, 1, 0);
43
+ this.zeroVector = new Vector3(0, 0, 0);
44
+ this.planeArgs = pick(this.options, 'planeArgs');
45
+ this.side = pick(this.options, 'side');
46
+ this.uniforms = computed(() => {
47
+ const { cellSize, sectionSize, cellColor, sectionColor, cellThickness, sectionThickness, fadeDistance, fadeStrength, fadeFrom, infiniteGrid, followCamera, } = this.options();
48
+ return {
49
+ cellSize,
50
+ sectionSize,
51
+ cellColor,
52
+ sectionColor,
53
+ cellThickness,
54
+ sectionThickness,
55
+ fadeDistance,
56
+ fadeStrength,
57
+ fadeFrom,
58
+ infiniteGrid,
59
+ followCamera,
60
+ };
61
+ });
62
+ extend({ Mesh, PlaneGeometry, GridMaterial });
63
+ injectBeforeRender(({ camera }) => {
64
+ const mesh = this.mesh().nativeElement;
65
+ this.plane.setFromNormalAndCoplanarPoint(this.upVector, this.zeroVector).applyMatrix4(mesh.matrixWorld);
66
+ const gridMaterial = mesh.material;
67
+ const worldCamProjPosition = gridMaterial.uniforms['worldCamProjPosition'];
68
+ const worldPlanePosition = gridMaterial.uniforms['worldPlanePosition'];
69
+ this.plane.projectPoint(camera.position, worldCamProjPosition.value);
70
+ worldPlanePosition.value.set(0, 0, 0).applyMatrix4(mesh.matrixWorld);
71
+ });
72
+ }
73
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsGrid, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
74
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.1.0", type: NgtsGrid, isStandalone: true, selector: "ngts-grid", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "mesh", first: true, predicate: ["mesh"], descendants: true, isSignal: true }], ngImport: i0, template: `
75
+ <ngt-mesh #mesh [frustumCulled]="false" [parameters]="parameters()">
76
+ <ngt-plane-geometry *args="planeArgs()" />
77
+ <ngt-grid-material [transparent]="true" [side]="side()" [parameters]="uniforms()">
78
+ <ngt-value attach="extensions.derivatives" [rawValue]="true" />
79
+ </ngt-grid-material>
80
+ <ng-content />
81
+ </ngt-mesh>
82
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
83
+ }
84
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsGrid, decorators: [{
85
+ type: Component,
86
+ args: [{
87
+ selector: 'ngts-grid',
88
+ standalone: true,
89
+ template: `
90
+ <ngt-mesh #mesh [frustumCulled]="false" [parameters]="parameters()">
91
+ <ngt-plane-geometry *args="planeArgs()" />
92
+ <ngt-grid-material [transparent]="true" [side]="side()" [parameters]="uniforms()">
93
+ <ngt-value attach="extensions.derivatives" [rawValue]="true" />
94
+ </ngt-grid-material>
95
+ <ng-content />
96
+ </ngt-mesh>
97
+ `,
98
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
99
+ changeDetection: ChangeDetectionStrategy.OnPush,
100
+ imports: [NgtArgs],
101
+ }]
102
+ }], ctorParameters: () => [] });
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9hYnN0cmFjdGlvbnMvc3JjL2xpYi9ncmlkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixzQkFBc0IsRUFFdEIsS0FBSyxFQUNMLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBVyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxZQUFZLEVBQXVCLE1BQU0sNEJBQTRCLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQTJCLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQzs7QUFFL0YsTUFBTSxjQUFjLEdBQ2dFO0lBQ25GLFNBQVMsRUFBRSxFQUFFO0lBQ2IsUUFBUSxFQUFFLEdBQUc7SUFDYixhQUFhLEVBQUUsR0FBRztJQUNsQixTQUFTLEVBQUUsT0FBTztJQUNsQixXQUFXLEVBQUUsQ0FBQztJQUNkLGdCQUFnQixFQUFFLENBQUM7SUFDbkIsWUFBWSxFQUFFLFNBQVM7SUFDdkIsWUFBWSxFQUFFLEtBQUs7SUFDbkIsWUFBWSxFQUFFLEtBQUs7SUFDbkIsWUFBWSxFQUFFLEdBQUc7SUFDakIsWUFBWSxFQUFFLENBQUM7SUFDZixRQUFRLEVBQUUsQ0FBQztJQUNYLElBQUksRUFBRSxRQUFRO0NBQ2QsQ0FBQztBQWtCRixNQUFNLE9BQU8sUUFBUTtJQXVEcEI7UUF0REEsWUFBTyxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMs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QU8sRUFBRSxDQUFDLE9BQU8sQ0FBQztpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRjb21wdXRlZCxcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0RWxlbWVudFJlZixcblx0aW5wdXQsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBleHRlbmQsIGluamVjdEJlZm9yZVJlbmRlciwgTmd0QXJncywgTmd0TWVzaCwgb21pdCwgcGljayB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgR3JpZE1hdGVyaWFsLCBHcmlkTWF0ZXJpYWxPcHRpb25zIH0gZnJvbSAnYW5ndWxhci10aHJlZS1zb2JhL3NoYWRlcnMnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgQmFja1NpZGUsIE1lc2gsIFBsYW5lLCBQbGFuZUdlb21ldHJ5LCBTaGFkZXJNYXRlcmlhbCwgVW5pZm9ybSwgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IFBhcnRpYWw8Tmd0TWVzaD4gJlxuXHRHcmlkTWF0ZXJpYWxPcHRpb25zICYgeyBwbGFuZUFyZ3M6IENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgUGxhbmVHZW9tZXRyeT4gfSA9IHtcblx0cGxhbmVBcmdzOiBbXSxcblx0Y2VsbFNpemU6IDAuNSxcblx0Y2VsbFRoaWNrbmVzczogMC41LFxuXHRjZWxsQ29sb3I6ICdibGFjaycsXG5cdHNlY3Rpb25TaXplOiAxLFxuXHRzZWN0aW9uVGhpY2tuZXNzOiAxLFxuXHRzZWN0aW9uQ29sb3I6ICcjMjA4MGZmJyxcblx0aW5maW5pdGVHcmlkOiBmYWxzZSxcblx0Zm9sbG93Q2FtZXJhOiBmYWxzZSxcblx0ZmFkZURpc3RhbmNlOiAxMDAsXG5cdGZhZGVTdHJlbmd0aDogMSxcblx0ZmFkZUZyb206IDEsXG5cdHNpZGU6IEJhY2tTaWRlLFxufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1ncmlkJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LW1lc2ggI21lc2ggW2ZydXN0dW1DdWxsZWRdPVwiZmFsc2VcIiBbcGFyYW1ldGVyc109XCJwYXJhbWV0ZXJzKClcIj5cblx0XHRcdDxuZ3QtcGxhbmUtZ2VvbWV0cnkgKmFyZ3M9XCJwbGFuZUFyZ3MoKVwiIC8+XG5cdFx0XHQ8bmd0LWdyaWQtbWF0ZXJpYWwgW3RyYW5zcGFyZW50XT1cInRydWVcIiBbc2lkZV09XCJzaWRlKClcIiBbcGFyYW1ldGVyc109XCJ1bmlmb3JtcygpXCI+XG5cdFx0XHRcdDxuZ3QtdmFsdWUgYXR0YWNoPVwiZXh0ZW5zaW9ucy5kZXJpdmF0aXZlc1wiIFtyYXdWYWx1ZV09XCJ0cnVlXCIgLz5cblx0XHRcdDwvbmd0LWdyaWQtbWF0ZXJpYWw+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmd0LW1lc2g+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cdGltcG9ydHM6IFtOZ3RBcmdzXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0dyaWQge1xuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cdHBhcmFtZXRlcnMgPSBvbWl0KHRoaXMub3B0aW9ucywgW1xuXHRcdCdwbGFuZUFyZ3MnLFxuXHRcdCdjZWxsU2l6ZScsXG5cdFx0J2NlbGxUaGlja25lc3MnLFxuXHRcdCdjZWxsQ29sb3InLFxuXHRcdCdzZWN0aW9uU2l6ZScsXG5cdFx0J3NlY3Rpb25UaGlja25lc3MnLFxuXHRcdCdzZWN0aW9uQ29sb3InLFxuXHRcdCdpbmZpbml0ZUdyaWQnLFxuXHRcdCdmb2xsb3dDYW1lcmEnLFxuXHRcdCdmYWRlRGlzdGFuY2UnLFxuXHRcdCdmYWRlU3RyZW5ndGgnLFxuXHRcdCdmYWRlRnJvbScsXG5cdFx0J3NpZGUnLFxuXHRdKTtcblxuXHRtZXNoID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8TWVzaD4+KCdtZXNoJyk7XG5cblx0cHJpdmF0ZSBwbGFuZSA9IG5ldyBQbGFuZSgpO1xuXHRwcml2YXRlIHVwVmVjdG9yID0gbmV3IFZlY3RvcjMoMCwgMSwgMCk7XG5cdHByaXZhdGUgemVyb1ZlY3RvciA9IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xuXG5cdHBsYW5lQXJncyA9IHBpY2sodGhpcy5vcHRpb25zLCAncGxhbmVBcmdzJyk7XG5cdHNpZGUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3NpZGUnKTtcblx0dW5pZm9ybXMgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0Y2VsbFNpemUsXG5cdFx0XHRzZWN0aW9uU2l6ZSxcblx0XHRcdGNlbGxDb2xvcixcblx0XHRcdHNlY3Rpb25Db2xvcixcblx0XHRcdGNlbGxUaGlja25lc3MsXG5cdFx0XHRzZWN0aW9uVGhpY2tuZXNzLFxuXHRcdFx0ZmFkZURpc3RhbmNlLFxuXHRcdFx0ZmFkZVN0cmVuZ3RoLFxuXHRcdFx0ZmFkZUZyb20sXG5cdFx0XHRpbmZpbml0ZUdyaWQsXG5cdFx0XHRmb2xsb3dDYW1lcmEsXG5cdFx0fSA9IHRoaXMub3B0aW9ucygpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRjZWxsU2l6ZSxcblx0XHRcdHNlY3Rpb25TaXplLFxuXHRcdFx0Y2VsbENvbG9yLFxuXHRcdFx0c2VjdGlvbkNvbG9yLFxuXHRcdFx0Y2VsbFRoaWNrbmVzcyxcblx0XHRcdHNlY3Rpb25UaGlja25lc3MsXG5cdFx0XHRmYWRlRGlzdGFuY2UsXG5cdFx0XHRmYWRlU3RyZW5ndGgsXG5cdFx0XHRmYWRlRnJvbSxcblx0XHRcdGluZmluaXRlR3JpZCxcblx0XHRcdGZvbGxvd0NhbWVyYSxcblx0XHR9O1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRleHRlbmQoeyBNZXNoLCBQbGFuZUdlb21ldHJ5LCBHcmlkTWF0ZXJpYWwgfSk7XG5cblx0XHRpbmplY3RCZWZvcmVSZW5kZXIoKHsgY2FtZXJhIH0pID0+IHtcblx0XHRcdGNvbnN0IG1lc2ggPSB0aGlzLm1lc2goKS5uYXRpdmVFbGVtZW50O1xuXG5cdFx0XHR0aGlzLnBsYW5lLnNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KHRoaXMudXBWZWN0b3IsIHRoaXMuemVyb1ZlY3RvcikuYXBwbHlNYXRyaXg0KG1lc2gubWF0cml4V29ybGQpO1xuXG5cdFx0XHRjb25zdCBncmlkTWF0ZXJpYWwgPSBtZXNoLm1hdGVyaWFsIGFzIFNoYWRlck1hdGVyaWFsO1xuXHRcdFx0Y29uc3Qgd29ybGRDYW1Qcm9qUG9zaXRpb24gPSBncmlkTWF0ZXJpYWwudW5pZm9ybXNbJ3dvcmxkQ2FtUHJvalBvc2l0aW9uJ10gYXMgVW5pZm9ybTxWZWN0b3IzPjtcblx0XHRcdGNvbnN0IHdvcmxkUGxhbmVQb3NpdGlvbiA9IGdyaWRNYXRlcmlhbC51bmlmb3Jtc1snd29ybGRQbGFuZVBvc2l0aW9uJ10gYXMgVW5pZm9ybTxWZWN0b3IzPjtcblxuXHRcdFx0dGhpcy5wbGFuZS5wcm9qZWN0UG9pbnQoY2FtZXJhLnBvc2l0aW9uLCB3b3JsZENhbVByb2pQb3NpdGlvbi52YWx1ZSk7XG5cdFx0XHR3b3JsZFBsYW5lUG9zaXRpb24udmFsdWUuc2V0KDAsIDAsIDApLmFwcGx5TWF0cml4NChtZXNoLm1hdHJpeFdvcmxkKTtcblx0XHR9KTtcblx0fVxufVxuIl19
@@ -0,0 +1,80 @@
1
+ import { afterNextRender, ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, input, signal, untracked, viewChild, } from '@angular/core';
2
+ import { extend, getLocalState, injectBeforeRender, injectStore, resolveRef } from 'angular-three';
3
+ import { assertInjector } from 'ngxtension/assert-injector';
4
+ import { injectAutoEffect } from 'ngxtension/auto-effect';
5
+ import { Object3D } from 'three';
6
+ import * as i0 from "@angular/core";
7
+ export function injectHelper(object, helperConstructor, { injector, args = () => [], } = {}) {
8
+ return assertInjector(injectHelper, injector, () => {
9
+ const autoEffect = injectAutoEffect();
10
+ const store = injectStore();
11
+ const scene = store.select('scene');
12
+ const helper = signal(null);
13
+ afterNextRender(() => {
14
+ autoEffect(() => {
15
+ let currentHelper = undefined;
16
+ const maybeObject3D = object();
17
+ if (!maybeObject3D)
18
+ return;
19
+ const object3D = resolveRef(maybeObject3D);
20
+ if (!object3D)
21
+ return;
22
+ currentHelper = new (helperConstructor())(object3D, ...args());
23
+ if (!currentHelper)
24
+ return;
25
+ untracked(() => {
26
+ helper.set(currentHelper);
27
+ });
28
+ // Prevent the helpers from blocking rays
29
+ currentHelper.traverse((child) => (child.raycast = () => null));
30
+ scene().add(currentHelper);
31
+ return () => {
32
+ helper.set(null);
33
+ scene().remove(currentHelper);
34
+ currentHelper.dispose?.();
35
+ };
36
+ });
37
+ });
38
+ injectBeforeRender(() => {
39
+ const currentHelper = helper();
40
+ if (currentHelper)
41
+ currentHelper.update();
42
+ });
43
+ return helper.asReadonly();
44
+ });
45
+ }
46
+ export class NgtsHelper {
47
+ constructor() {
48
+ this.type = input.required();
49
+ this.options = input([]);
50
+ this.helperRef = viewChild.required('helper');
51
+ this.parent = computed(() => {
52
+ const helper = this.helperRef().nativeElement;
53
+ if (!helper)
54
+ return;
55
+ const localState = getLocalState(helper);
56
+ if (!localState)
57
+ return;
58
+ return localState.parent();
59
+ });
60
+ this.helper = injectHelper(this.parent, this.type, { args: this.options });
61
+ extend({ Object3D });
62
+ }
63
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsHelper, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
64
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.1.0", type: NgtsHelper, isStandalone: true, selector: "ngts-helper", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "helperRef", first: true, predicate: ["helper"], descendants: true, isSignal: true }], ngImport: i0, template: `
65
+ <ngt-object-3D #helper />
66
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
67
+ }
68
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsHelper, decorators: [{
69
+ type: Component,
70
+ args: [{
71
+ standalone: true,
72
+ selector: 'ngts-helper',
73
+ template: `
74
+ <ngt-object-3D #helper />
75
+ `,
76
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
77
+ changeDetection: ChangeDetectionStrategy.OnPush,
78
+ }]
79
+ }], ctorParameters: () => [] });
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL2Fic3RyYWN0aW9ucy9zcmMvbGliL2hlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sZUFBZSxFQUNmLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLHNCQUFzQixFQUd0QixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQzs7QUFJakMsTUFBTSxVQUFVLFlBQVksQ0FJM0IsTUFBZ0UsRUFDaEUsaUJBQXFDLEVBQ3JDLEVBQ0MsUUFBUSxFQUNSLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUF5QyxNQUNhLEVBQUU7SUFFdEUsT0FBTyxjQUFjLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDbEQsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUN0QyxNQUFNLEtBQUssR0FBRyxXQUFXLEVBQUUsQ0FBQztRQUM1QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXBDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBeUIsSUFBSSxDQUFDLENBQUM7UUFFcEQsZUFBZSxDQUFDLEdBQUcsRUFBRTtZQUNwQixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNmLElBQUksYUFBYSxHQUFnQyxTQUFTLENBQUM7Z0JBQzNELE1BQU0sYUFBYSxHQUFHLE1BQU0sRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUMsYUFBYTtvQkFBRSxPQUFPO2dCQUUzQixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxRQUFRO29CQUFFLE9BQU87Z0JBRXRCLGFBQWEsR0FBRyxLQUFLLGlCQUFpQixFQUFVLEVBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDdEUsSUFBSSxDQUFDLGFBQWE7b0JBQUUsT0FBTztnQkFFM0IsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUMzQixDQUFDLENBQUMsQ0FBQztnQkFFSCx5Q0FBeUM7Z0JBQ3pDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNoRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBRTNCLE9BQU8sR0FBRyxFQUFFO29CQUNYLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2pCLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDOUIsYUFBYSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Z0JBQzNCLENBQUMsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxrQkFBa0IsQ0FBQyxHQUFHLEVBQUU7WUFDdkIsTUFBTSxhQUFhLEdBQUcsTUFBTSxFQUFFLENBQUM7WUFDL0IsSUFBSSxhQUFhO2dCQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzVCLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQVdELE1BQU0sT0FBTyxVQUFVO0lBZ0J0QjtRQWZBLFNBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFnQixDQUFDO1FBQ3RDLFlBQU8sR0FBRyxLQUFLLENBQTJCLEVBQXlDLENBQUMsQ0FBQztRQUVyRixjQUFTLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBdUIsUUFBUSxDQUFDLENBQUM7UUFFdkQsV0FBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDOUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLGFBQWEsQ0FBQztZQUM5QyxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPO1lBQ3BCLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsVUFBVTtnQkFBRSxPQUFPO1lBQ3hCLE9BQU8sVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgsV0FBTSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFHckUsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN0QixDQUFDOzhHQWxCVyxVQUFVO2tHQUFWLFVBQVUsMGJBTlo7O0VBRVQ7OzJGQUlXLFVBQVU7a0JBVHRCLFNBQVM7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxhQUFhO29CQUN2QixRQUFRLEVBQUU7O0VBRVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUMvQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdGFmdGVyTmV4dFJlbmRlcixcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdEVsZW1lbnRSZWYsXG5cdEluamVjdG9yLFxuXHRpbnB1dCxcblx0c2lnbmFsLFxuXHR1bnRyYWNrZWQsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBleHRlbmQsIGdldExvY2FsU3RhdGUsIGluamVjdEJlZm9yZVJlbmRlciwgaW5qZWN0U3RvcmUsIHJlc29sdmVSZWYgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0IHsgaW5qZWN0QXV0b0VmZmVjdCB9IGZyb20gJ25neHRlbnNpb24vYXV0by1lZmZlY3QnO1xuaW1wb3J0IHsgT2JqZWN0M0QgfSBmcm9tICd0aHJlZSc7XG5cbnR5cGUgSGVscGVyQXJnczxUPiA9IFQgZXh0ZW5kcyBbaW5mZXIgXywgLi4uaW5mZXIgUl0gPyBSIDogbmV2ZXI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RIZWxwZXI8XG5cdFRDb25zdHJ1Y3RvciBleHRlbmRzIG5ldyAoLi4uYXJnczogYW55W10pID0+IE9iamVjdDNELFxuXHRUSGVscGVySW5zdGFuY2UgZXh0ZW5kcyBJbnN0YW5jZVR5cGU8VENvbnN0cnVjdG9yPiAmIHsgdXBkYXRlOiAoKSA9PiB2b2lkOyBkaXNwb3NlOiAoKSA9PiB2b2lkIH0sXG4+KFxuXHRvYmplY3Q6ICgpID0+IEVsZW1lbnRSZWY8T2JqZWN0M0Q+IHwgT2JqZWN0M0QgfCB1bmRlZmluZWQgfCBudWxsLFxuXHRoZWxwZXJDb25zdHJ1Y3RvcjogKCkgPT4gVENvbnN0cnVjdG9yLFxuXHR7XG5cdFx0aW5qZWN0b3IsXG5cdFx0YXJncyA9ICgpID0+IFtdIGFzIHVua25vd24gYXMgSGVscGVyQXJnczxUQ29uc3RydWN0b3I+LFxuXHR9OiB7IGluamVjdG9yPzogSW5qZWN0b3I7IGFyZ3M/OiAoKSA9PiBIZWxwZXJBcmdzPFRDb25zdHJ1Y3Rvcj4gfSA9IHt9LFxuKSB7XG5cdHJldHVybiBhc3NlcnRJbmplY3RvcihpbmplY3RIZWxwZXIsIGluamVjdG9yLCAoKSA9PiB7XG5cdFx0Y29uc3QgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblx0XHRjb25zdCBzdG9yZSA9IGluamVjdFN0b3JlKCk7XG5cdFx0Y29uc3Qgc2NlbmUgPSBzdG9yZS5zZWxlY3QoJ3NjZW5lJyk7XG5cblx0XHRjb25zdCBoZWxwZXIgPSBzaWduYWw8VEhlbHBlckluc3RhbmNlIHwgbnVsbD4obnVsbCk7XG5cblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuXHRcdFx0YXV0b0VmZmVjdCgoKSA9PiB7XG5cdFx0XHRcdGxldCBjdXJyZW50SGVscGVyOiBUSGVscGVySW5zdGFuY2UgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdGNvbnN0IG1heWJlT2JqZWN0M0QgPSBvYmplY3QoKTtcblx0XHRcdFx0aWYgKCFtYXliZU9iamVjdDNEKSByZXR1cm47XG5cblx0XHRcdFx0Y29uc3Qgb2JqZWN0M0QgPSByZXNvbHZlUmVmKG1heWJlT2JqZWN0M0QpO1xuXHRcdFx0XHRpZiAoIW9iamVjdDNEKSByZXR1cm47XG5cblx0XHRcdFx0Y3VycmVudEhlbHBlciA9IG5ldyAoaGVscGVyQ29uc3RydWN0b3IoKSBhcyBhbnkpKG9iamVjdDNELCAuLi5hcmdzKCkpO1xuXHRcdFx0XHRpZiAoIWN1cnJlbnRIZWxwZXIpIHJldHVybjtcblxuXHRcdFx0XHR1bnRyYWNrZWQoKCkgPT4ge1xuXHRcdFx0XHRcdGhlbHBlci5zZXQoY3VycmVudEhlbHBlcik7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgdGhlIGhlbHBlcnMgZnJvbSBibG9ja2luZyByYXlzXG5cdFx0XHRcdGN1cnJlbnRIZWxwZXIudHJhdmVyc2UoKGNoaWxkKSA9PiAoY2hpbGQucmF5Y2FzdCA9ICgpID0+IG51bGwpKTtcblx0XHRcdFx0c2NlbmUoKS5hZGQoY3VycmVudEhlbHBlcik7XG5cblx0XHRcdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdFx0XHRoZWxwZXIuc2V0KG51bGwpO1xuXHRcdFx0XHRcdHNjZW5lKCkucmVtb3ZlKGN1cnJlbnRIZWxwZXIpO1xuXHRcdFx0XHRcdGN1cnJlbnRIZWxwZXIuZGlzcG9zZT8uKCk7XG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoKSA9PiB7XG5cdFx0XHRjb25zdCBjdXJyZW50SGVscGVyID0gaGVscGVyKCk7XG5cdFx0XHRpZiAoY3VycmVudEhlbHBlcikgY3VycmVudEhlbHBlci51cGRhdGUoKTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBoZWxwZXIuYXNSZWFkb25seSgpO1xuXHR9KTtcbn1cblxuQENvbXBvbmVudCh7XG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHNlbGVjdG9yOiAnbmd0cy1oZWxwZXInLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3Qtb2JqZWN0LTNEICNoZWxwZXIgLz5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0hlbHBlcjxUQ29uc3RydWN0b3IgZXh0ZW5kcyBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBPYmplY3QzRD4ge1xuXHR0eXBlID0gaW5wdXQucmVxdWlyZWQ8VENvbnN0cnVjdG9yPigpO1xuXHRvcHRpb25zID0gaW5wdXQ8SGVscGVyQXJnczxUQ29uc3RydWN0b3I+PihbXSBhcyB1bmtub3duIGFzIEhlbHBlckFyZ3M8VENvbnN0cnVjdG9yPik7XG5cblx0aGVscGVyUmVmID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8T2JqZWN0M0Q+PignaGVscGVyJyk7XG5cblx0cHJpdmF0ZSBwYXJlbnQgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgaGVscGVyID0gdGhpcy5oZWxwZXJSZWYoKS5uYXRpdmVFbGVtZW50O1xuXHRcdGlmICghaGVscGVyKSByZXR1cm47XG5cdFx0Y29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUoaGVscGVyKTtcblx0XHRpZiAoIWxvY2FsU3RhdGUpIHJldHVybjtcblx0XHRyZXR1cm4gbG9jYWxTdGF0ZS5wYXJlbnQoKTtcblx0fSk7XG5cblx0aGVscGVyID0gaW5qZWN0SGVscGVyKHRoaXMucGFyZW50LCB0aGlzLnR5cGUsIHsgYXJnczogdGhpcy5vcHRpb25zIH0pO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGV4dGVuZCh7IE9iamVjdDNEIH0pO1xuXHR9XG59XG4iXX0=
@@ -0,0 +1,123 @@
1
+ import { afterNextRender, ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, input, viewChild, } from '@angular/core';
2
+ import { checkNeedsUpdate, injectStore, NgtArgs, omit, pick } from 'angular-three';
3
+ import { injectAutoEffect } from 'ngxtension/auto-effect';
4
+ import { mergeInputs } from 'ngxtension/inject-inputs';
5
+ import { Color, Vector2, Vector3, Vector4 } from 'three';
6
+ import { Line2, LineGeometry, LineMaterial, LineSegments2, LineSegmentsGeometry, } from 'three-stdlib';
7
+ import * as i0 from "@angular/core";
8
+ const defaultOptions = {
9
+ lineWidth: 1,
10
+ segments: false,
11
+ color: 0xffffff,
12
+ };
13
+ export class NgtsLine {
14
+ // NOTE: use attached event to call computeLineDistances to ensure the geometry has been attached
15
+ onGeometryAttached({ parent }) {
16
+ parent.computeLineDistances();
17
+ }
18
+ constructor() {
19
+ this.points = input.required();
20
+ this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
21
+ this.parameters = omit(this.options, ['color', 'vertexColors', 'lineWidth', 'segments', 'linewidth', 'dashed']);
22
+ this.line = viewChild('line');
23
+ this.store = injectStore();
24
+ this.size = this.store.select('size');
25
+ this.segments = pick(this.options, 'segments');
26
+ this.vertexColors = pick(this.options, 'vertexColors');
27
+ this.dashed = pick(this.options, 'dashed');
28
+ this.color = pick(this.options, 'color');
29
+ this.lineWidth = pick(this.options, 'lineWidth');
30
+ this.linewidth = pick(this.options, 'linewidth');
31
+ this.vertex = computed(() => Boolean(this.vertexColors()));
32
+ this.resolution = computed(() => [this.size().width, this.size().height]);
33
+ this.line2 = computed(() => (this.segments() ? new LineSegments2() : new Line2()));
34
+ this.lineMaterial = computed(() => new LineMaterial());
35
+ this.itemSize = computed(() => (this.vertexColors()?.[0]?.length === 4 ? 4 : 3));
36
+ this.lineGeometry = computed(() => {
37
+ const geom = this.segments() ? new LineSegmentsGeometry() : new LineGeometry();
38
+ const pValues = this.points().map((p) => {
39
+ const isArray = Array.isArray(p);
40
+ return p instanceof Vector3 || p instanceof Vector4
41
+ ? [p.x, p.y, p.z]
42
+ : p instanceof Vector2
43
+ ? [p.x, p.y, 0]
44
+ : isArray && p.length === 3
45
+ ? [p[0], p[1], p[2]]
46
+ : isArray && p.length === 2
47
+ ? [p[0], p[1], 0]
48
+ : p;
49
+ });
50
+ geom.setPositions(pValues.flat());
51
+ const vertexColors = this.vertexColors();
52
+ if (vertexColors) {
53
+ const cValues = vertexColors.map((c) => (c instanceof Color ? c.toArray() : c));
54
+ // @ts-expect-error - flat() isn't defined
55
+ geom.setColors(cValues.flat(), this.itemSize());
56
+ }
57
+ return geom;
58
+ });
59
+ const autoEffect = injectAutoEffect();
60
+ afterNextRender(() => {
61
+ autoEffect(() => {
62
+ const [lineMaterial, dashed] = [this.lineMaterial(), this.dashed()];
63
+ if (dashed) {
64
+ lineMaterial.defines['USE_DASH'] = '';
65
+ }
66
+ else {
67
+ delete lineMaterial.defines['USE_DASH'];
68
+ }
69
+ checkNeedsUpdate(lineMaterial);
70
+ });
71
+ autoEffect(() => {
72
+ const lineGeometry = this.lineGeometry();
73
+ return () => lineGeometry.dispose();
74
+ });
75
+ });
76
+ }
77
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsLine, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
78
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.1.0", type: NgtsLine, isStandalone: true, selector: "ngts-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: ["line"], descendants: true, isSignal: true }], ngImport: i0, template: `
79
+ <ngt-primitive *args="[line2()]" #line [parameters]="parameters()">
80
+ <ngt-primitive *args="[lineGeometry()]" attach="geometry" (attached)="onGeometryAttached($any($event))" />
81
+ <ngt-primitive
82
+ *args="[lineMaterial()]"
83
+ attach="material"
84
+ [color]="color()"
85
+ [vertexColors]="vertex()"
86
+ [resolution]="resolution()"
87
+ [linewidth]="linewidth() ?? lineWidth() ?? 1"
88
+ [dashed]="dashed()"
89
+ [transparent]="itemSize() === 4"
90
+ [parameters]="parameters()"
91
+ />
92
+ <ng-content />
93
+ </ngt-primitive>
94
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
95
+ }
96
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsLine, decorators: [{
97
+ type: Component,
98
+ args: [{
99
+ selector: 'ngts-line',
100
+ standalone: true,
101
+ template: `
102
+ <ngt-primitive *args="[line2()]" #line [parameters]="parameters()">
103
+ <ngt-primitive *args="[lineGeometry()]" attach="geometry" (attached)="onGeometryAttached($any($event))" />
104
+ <ngt-primitive
105
+ *args="[lineMaterial()]"
106
+ attach="material"
107
+ [color]="color()"
108
+ [vertexColors]="vertex()"
109
+ [resolution]="resolution()"
110
+ [linewidth]="linewidth() ?? lineWidth() ?? 1"
111
+ [dashed]="dashed()"
112
+ [transparent]="itemSize() === 4"
113
+ [parameters]="parameters()"
114
+ />
115
+ <ng-content />
116
+ </ngt-primitive>
117
+ `,
118
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
119
+ changeDetection: ChangeDetectionStrategy.OnPush,
120
+ imports: [NgtArgs],
121
+ }]
122
+ }], ctorParameters: () => [] });
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9hYnN0cmFjdGlvbnMvc3JjL2xpYi9saW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1Isc0JBQXNCLEVBRXRCLEtBQUssRUFDTCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBa0IsT0FBTyxFQUFtQixJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsS0FBSyxFQUF1QixPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM5RSxPQUFPLEVBQ04sS0FBSyxFQUNMLFlBQVksRUFDWixZQUFZLEVBRVosYUFBYSxFQUNiLG9CQUFvQixHQUNwQixNQUFNLGNBQWMsQ0FBQzs7QUFrQnRCLE1BQU0sY0FBYyxHQUFvQjtJQUN2QyxTQUFTLEVBQUUsQ0FBQztJQUNaLFFBQVEsRUFBRSxLQUFLO0lBQ2YsS0FBSyxFQUFFLFFBQVE7Q0FDZixDQUFDO0FBMEJGLE1BQU0sT0FBTyxRQUFRO0lBcURwQixpR0FBaUc7SUFDakcsa0JBQWtCLENBQUMsRUFBRSxNQUFNLEVBQXVEO1FBQ2pGLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRDtRQXpEQSxXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBbUYsQ0FBQztRQUMzRyxZQUFPLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFD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QUUsQ0FBQztvQkFDWixZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDdkMsQ0FBQztxQkFBTSxDQUFDO29CQUNQLE9BQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDekMsQ0FBQztnQkFDRCxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FBQztZQUVILFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2YsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN6QyxPQUFPLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNyQyxDQUFDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs4R0E3RVcsUUFBUTtrR0FBUixRQUFRLHViQXJCVjs7Ozs7Ozs7Ozs7Ozs7OztFQWdCVCw0REFHUyxPQUFPOzsyRkFFTCxRQUFRO2tCQXhCcEIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsV0FBVztvQkFDckIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7OztFQWdCVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQztpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRhZnRlck5leHRSZW5kZXIsXG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRDb21wb25lbnQsXG5cdGNvbXB1dGVkLFxuXHRDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuXHRFbGVtZW50UmVmLFxuXHRpbnB1dCxcblx0dmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNoZWNrTmVlZHNVcGRhdGUsIGluamVjdFN0b3JlLCBOZ3RBZnRlckF0dGFjaCwgTmd0QXJncywgTmd0T2JqZWN0M0ROb2RlLCBvbWl0LCBwaWNrIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBpbmplY3RBdXRvRWZmZWN0IH0gZnJvbSAnbmd4dGVuc2lvbi9hdXRvLWVmZmVjdCc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBDb2xvciwgQ29sb3JSZXByZXNlbnRhdGlvbiwgVmVjdG9yMiwgVmVjdG9yMywgVmVjdG9yNCB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7XG5cdExpbmUyLFxuXHRMaW5lR2VvbWV0cnksXG5cdExpbmVNYXRlcmlhbCxcblx0TGluZU1hdGVyaWFsUGFyYW1ldGVycyxcblx0TGluZVNlZ21lbnRzMixcblx0TGluZVNlZ21lbnRzR2VvbWV0cnksXG59IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5cbmV4cG9ydCB0eXBlIE5ndExpbmUyID0gTmd0T2JqZWN0M0ROb2RlPExpbmUyLCB0eXBlb2YgTGluZTI+O1xuZXhwb3J0IHR5cGUgTmd0TGluZU1hdGVyaWFsID0gTmd0T2JqZWN0M0ROb2RlPExpbmVNYXRlcmlhbCwgW0xpbmVNYXRlcmlhbFBhcmFtZXRlcnNdPjtcblxuZXhwb3J0IHR5cGUgTmd0c0xpbmVPcHRpb25zID0gT21pdDxMaW5lTWF0ZXJpYWxQYXJhbWV0ZXJzLCAndmVydGV4Q29sb3JzJyB8ICdjb2xvcic+ICZcblx0T21pdDxQYXJ0aWFsPE5ndExpbmUyPiwgJ19fbmd0X2FyZ3NfXyc+ICZcblx0T21pdDxQYXJ0aWFsPE5ndExpbmVNYXRlcmlhbD4sICdjb2xvcicgfCAndmVydGV4Q29sb3JzJyB8ICdfX25ndF9hcmdzX18nPiAmIHtcblx0XHQvKiogQXJyYXkgb2YgY29sb3JzLCBbMCwgMCwgMF0gKi9cblx0XHR2ZXJ0ZXhDb2xvcnM/OiBBcnJheTxDb2xvclJlcHJlc2VudGF0aW9uIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0+O1xuXHRcdC8qKiBMaW5lIHdpZHRoLCAxICovXG5cdFx0bGluZVdpZHRoOiBudW1iZXI7XG5cdFx0LyoqIFNlZ21lbnRzLCBmYWxzZSAqL1xuXHRcdHNlZ21lbnRzOiBib29sZWFuO1xuXHRcdC8qKiBDb2xvciAqL1xuXHRcdGNvbG9yPzogQ29sb3JSZXByZXNlbnRhdGlvbjtcblx0fTtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE5ndHNMaW5lT3B0aW9ucyA9IHtcblx0bGluZVdpZHRoOiAxLFxuXHRzZWdtZW50czogZmFsc2UsXG5cdGNvbG9yOiAweGZmZmZmZixcbn07XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtbGluZScsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1wcmltaXRpdmUgKmFyZ3M9XCJbbGluZTIoKV1cIiAjbGluZSBbcGFyYW1ldGVyc109XCJwYXJhbWV0ZXJzKClcIj5cblx0XHRcdDxuZ3QtcHJpbWl0aXZlICphcmdzPVwiW2xpbmVHZW9tZXRyeSgpXVwiIGF0dGFjaD1cImdlb21ldHJ5XCIgKGF0dGFjaGVkKT1cIm9uR2VvbWV0cnlBdHRhY2hlZCgkYW55KCRldmVudCkpXCIgLz5cblx0XHRcdDxuZ3QtcHJpbWl0aXZlXG5cdFx0XHRcdCphcmdzPVwiW2xpbmVNYXRlcmlhbCgpXVwiXG5cdFx0XHRcdGF0dGFjaD1cIm1hdGVyaWFsXCJcblx0XHRcdFx0W2NvbG9yXT1cImNvbG9yKClcIlxuXHRcdFx0XHRbdmVydGV4Q29sb3JzXT1cInZlcnRleCgpXCJcblx0XHRcdFx0W3Jlc29sdXRpb25dPVwicmVzb2x1dGlvbigpXCJcblx0XHRcdFx0W2xpbmV3aWR0aF09XCJsaW5ld2lkdGgoKSA/PyBsaW5lV2lkdGgoKSA/PyAxXCJcblx0XHRcdFx0W2Rhc2hlZF09XCJkYXNoZWQoKVwiXG5cdFx0XHRcdFt0cmFuc3BhcmVudF09XCJpdGVtU2l6ZSgpID09PSA0XCJcblx0XHRcdFx0W3BhcmFtZXRlcnNdPVwicGFyYW1ldGVycygpXCJcblx0XHRcdC8+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmd0LXByaW1pdGl2ZT5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW05ndEFyZ3NdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzTGluZSB7XG5cdHBvaW50cyA9IGlucHV0LnJlcXVpcmVkPEFycmF5PFZlY3RvcjMgfCBWZWN0b3IyIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHwgW251bWJlciwgbnVtYmVyXSB8IG51bWJlcj4+KCk7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblx0cGFyYW1ldGVycyA9IG9taXQodGhpcy5vcHRpb25zLCBbJ2NvbG9yJywgJ3ZlcnRleENvbG9ycycsICdsaW5lV2lkdGgnLCAnc2VnbWVudHMnLCAnbGluZXdpZHRoJywgJ2Rhc2hlZCddKTtcblxuXHRsaW5lID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8TGluZTIgfCBMaW5lU2VnbWVudHMyPj4oJ2xpbmUnKTtcblxuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblx0cHJpdmF0ZSBzaXplID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3NpemUnKTtcblxuXHRwcml2YXRlIHNlZ21lbnRzID0gcGljayh0aGlzLm9wdGlvbnMsICdzZWdtZW50cycpO1xuXHRwcml2YXRlIHZlcnRleENvbG9ycyA9IHBpY2sodGhpcy5vcHRpb25zLCAndmVydGV4Q29sb3JzJyk7XG5cblx0ZGFzaGVkID0gcGljayh0aGlzLm9wdGlvbnMsICdkYXNoZWQnKTtcblx0Y29sb3IgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2NvbG9yJyk7XG5cdGxpbmVXaWR0aCA9IHBpY2sodGhpcy5vcHRpb25zLCAnbGluZVdpZHRoJyk7XG5cdGxpbmV3aWR0aCA9IHBpY2sodGhpcy5vcHRpb25zLCAnbGluZXdpZHRoJyk7XG5cdHZlcnRleCA9IGNvbXB1dGVkKCgpID0+IEJvb2xlYW4odGhpcy52ZXJ0ZXhDb2xvcnMoKSkpO1xuXHRyZXNvbHV0aW9uID0gY29tcHV0ZWQoKCkgPT4gW3RoaXMuc2l6ZSgpLndpZHRoLCB0aGlzLnNpemUoKS5oZWlnaHRdKTtcblxuXHRsaW5lMiA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLnNlZ21lbnRzKCkgPyBuZXcgTGluZVNlZ21lbnRzMigpIDogbmV3IExpbmUyKCkpKTtcblx0bGluZU1hdGVyaWFsID0gY29tcHV0ZWQoKCkgPT4gbmV3IExpbmVNYXRlcmlhbCgpKTtcblxuXHRpdGVtU2l6ZSA9IGNvbXB1dGVkKCgpID0+ICgodGhpcy52ZXJ0ZXhDb2xvcnMoKT8uWzBdIGFzIG51bWJlcltdIHwgdW5kZWZpbmVkKT8ubGVuZ3RoID09PSA0ID8gNCA6IDMpKTtcblxuXHRsaW5lR2VvbWV0cnkgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgZ2VvbSA9IHRoaXMuc2VnbWVudHMoKSA/IG5ldyBMaW5lU2VnbWVudHNHZW9tZXRyeSgpIDogbmV3IExpbmVHZW9tZXRyeSgpO1xuXHRcdGNvbnN0IHBWYWx1ZXMgPSB0aGlzLnBvaW50cygpLm1hcCgocCkgPT4ge1xuXHRcdFx0Y29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkocCk7XG5cdFx0XHRyZXR1cm4gcCBpbnN0YW5jZW9mIFZlY3RvcjMgfHwgcCBpbnN0YW5jZW9mIFZlY3RvcjRcblx0XHRcdFx0PyBbcC54LCBwLnksIHAuel1cblx0XHRcdFx0OiBwIGluc3RhbmNlb2YgVmVjdG9yMlxuXHRcdFx0XHRcdD8gW3AueCwgcC55LCAwXVxuXHRcdFx0XHRcdDogaXNBcnJheSAmJiBwLmxlbmd0aCA9PT0gM1xuXHRcdFx0XHRcdFx0PyBbcFswXSwgcFsxXSwgcFsyXV1cblx0XHRcdFx0XHRcdDogaXNBcnJheSAmJiBwLmxlbmd0aCA9PT0gMlxuXHRcdFx0XHRcdFx0XHQ/IFtwWzBdLCBwWzFdLCAwXVxuXHRcdFx0XHRcdFx0XHQ6IHA7XG5cdFx0fSk7XG5cblx0XHRnZW9tLnNldFBvc2l0aW9ucyhwVmFsdWVzLmZsYXQoKSk7XG5cblx0XHRjb25zdCB2ZXJ0ZXhDb2xvcnMgPSB0aGlzLnZlcnRleENvbG9ycygpO1xuXG5cdFx0aWYgKHZlcnRleENvbG9ycykge1xuXHRcdFx0Y29uc3QgY1ZhbHVlcyA9IHZlcnRleENvbG9ycy5tYXAoKGMpID0+IChjIGluc3RhbmNlb2YgQ29sb3IgPyBjLnRvQXJyYXkoKSA6IGMpKTtcblx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgLSBmbGF0KCkgaXNuJ3QgZGVmaW5lZFxuXHRcdFx0Z2VvbS5zZXRDb2xvcnMoY1ZhbHVlcy5mbGF0KCksIHRoaXMuaXRlbVNpemUoKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGdlb207XG5cdH0pO1xuXG5cdC8vIE5PVEU6IHVzZSBhdHRhY2hlZCBldmVudCB0byBjYWxsIGNvbXB1dGVMaW5lRGlzdGFuY2VzIHRvIGVuc3VyZSB0aGUgZ2VvbWV0cnkgaGFzIGJlZW4gYXR0YWNoZWRcblx0b25HZW9tZXRyeUF0dGFjaGVkKHsgcGFyZW50IH06IE5ndEFmdGVyQXR0YWNoPExpbmVHZW9tZXRyeSwgTGluZTIgfCBMaW5lU2VnbWVudHMyPikge1xuXHRcdHBhcmVudC5jb21wdXRlTGluZURpc3RhbmNlcygpO1xuXHR9XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0Y29uc3QgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblxuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHRhdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdFx0Y29uc3QgW2xpbmVNYXRlcmlhbCwgZGFzaGVkXSA9IFt0aGlzLmxpbmVNYXRlcmlhbCgpLCB0aGlzLmRhc2hlZCgpXTtcblx0XHRcdFx0aWYgKGRhc2hlZCkge1xuXHRcdFx0XHRcdGxpbmVNYXRlcmlhbC5kZWZpbmVzWydVU0VfREFTSCddID0gJyc7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGVsZXRlIGxpbmVNYXRlcmlhbC5kZWZpbmVzWydVU0VfREFTSCddO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNoZWNrTmVlZHNVcGRhdGUobGluZU1hdGVyaWFsKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRhdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdFx0Y29uc3QgbGluZUdlb21ldHJ5ID0gdGhpcy5saW5lR2VvbWV0cnkoKTtcblx0XHRcdFx0cmV0dXJuICgpID0+IGxpbmVHZW9tZXRyeS5kaXNwb3NlKCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxufVxuIl19
@@ -0,0 +1,55 @@
1
+ import { afterNextRender, ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, input, viewChild, } from '@angular/core';
2
+ import { extend, NgtArgs } from 'angular-three';
3
+ import { injectAutoEffect } from 'ngxtension/auto-effect';
4
+ import { mergeInputs } from 'ngxtension/inject-inputs';
5
+ import { ExtrudeGeometry, Shape, Vector2 } from 'three';
6
+ import * as i0 from "@angular/core";
7
+ const defaultOptions = {
8
+ height: 1,
9
+ bevelEnabled: false,
10
+ };
11
+ export class NgtsPrismGeometry {
12
+ constructor() {
13
+ this.vertices = input.required();
14
+ this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
15
+ this.parameters = computed(() => ({ ...this.options(), depth: this.options().height }));
16
+ this.shape = computed(() => {
17
+ const vertices = this.vertices();
18
+ const interpolatedVertices = vertices.map((v) => (v instanceof Vector2 ? v : new Vector2(...v)));
19
+ return new Shape(interpolatedVertices);
20
+ });
21
+ this.geometry = viewChild('geometry');
22
+ extend({ ExtrudeGeometry });
23
+ const autoEffect = injectAutoEffect();
24
+ afterNextRender(() => {
25
+ // autoEffect(() => {
26
+ // const geometry = this.geometry()?.nativeElement;
27
+ // if (!geometry) return;
28
+ //
29
+ // geometry.center();
30
+ // });
31
+ });
32
+ }
33
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsPrismGeometry, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
34
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.1.0", type: NgtsPrismGeometry, isStandalone: true, selector: "ngts-prism-geometry", inputs: { vertices: { classPropertyName: "vertices", publicName: "vertices", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "geometry", first: true, predicate: ["geometry"], descendants: true, isSignal: true }], ngImport: i0, template: `
35
+ <ngt-extrude-geometry #geometry *args="[shape(), parameters()]">
36
+ <ng-content />
37
+ </ngt-extrude-geometry>
38
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39
+ }
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsPrismGeometry, decorators: [{
41
+ type: Component,
42
+ args: [{
43
+ selector: 'ngts-prism-geometry',
44
+ standalone: true,
45
+ template: `
46
+ <ngt-extrude-geometry #geometry *args="[shape(), parameters()]">
47
+ <ng-content />
48
+ </ngt-extrude-geometry>
49
+ `,
50
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
51
+ changeDetection: ChangeDetectionStrategy.OnPush,
52
+ imports: [NgtArgs],
53
+ }]
54
+ }], ctorParameters: () => [] });
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpc20tZ2VvbWV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvYWJzdHJhY3Rpb25zL3NyYy9saWIvcHJpc20tZ2VvbWV0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLGVBQWUsRUFDZix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixzQkFBc0IsRUFFdEIsS0FBSyxFQUNMLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBMEIsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQzs7QUFPaEYsTUFBTSxjQUFjLEdBQTZCO0lBQ2hELE1BQU0sRUFBRSxDQUFDO0lBQ1QsWUFBWSxFQUFFLEtBQUs7Q0FDbkIsQ0FBQztBQWNGLE1BQU0sT0FBTyxpQkFBaUI7SUFhN0I7UUFaQSxhQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBcUMsQ0FBQztRQUMvRCxZQUFPLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTVFLGVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25GLFVBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3JCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqQyxNQUFNLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRyxPQUFPLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxhQUFRLEdBQUcsU0FBUyxDQUE4QixVQUFVLENBQUMsQ0FBQztRQUc3RCxNQUFNLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBRTVCLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixFQUFFLENBQUM7UUFFdEMsZUFBZSxDQUFDLEdBQUcsRUFBRTtZQUNwQixxQkFBcUI7WUFDckIsb0RBQW9EO1lBQ3BELDBCQUEwQjtZQUMxQixFQUFFO1lBQ0Ysc0JBQXNCO1lBQ3RCLE1BQU07UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7OEdBMUJXLGlCQUFpQjtrR0FBakIsaUJBQWlCLCtjQVRuQjs7OztFQUlULDREQUdTLE9BQU87OzJGQUVMLGlCQUFpQjtrQkFaN0IsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUscUJBQXFCO29CQUMvQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7O0VBSVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7aUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0YWZ0ZXJOZXh0UmVuZGVyLFxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRjb21wdXRlZCxcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0RWxlbWVudFJlZixcblx0aW5wdXQsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBleHRlbmQsIE5ndEFyZ3MgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGluamVjdEF1dG9FZmZlY3QgfSBmcm9tICduZ3h0ZW5zaW9uL2F1dG8tZWZmZWN0JztcbmltcG9ydCB7IG1lcmdlSW5wdXRzIH0gZnJvbSAnbmd4dGVuc2lvbi9pbmplY3QtaW5wdXRzJztcbmltcG9ydCB7IEV4dHJ1ZGVHZW9tZXRyeSwgRXh0cnVkZUdlb21ldHJ5T3B0aW9ucywgU2hhcGUsIFZlY3RvcjIgfSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c1ByaXNtR2VvbWV0cnlPcHRpb25zIGV4dGVuZHMgT21pdDxFeHRydWRlR2VvbWV0cnlPcHRpb25zLCAnZGVwdGgnPiB7XG5cdC8qKiBIZWlnaHQgKi9cblx0aGVpZ2h0OiBudW1iZXI7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOZ3RzUHJpc21HZW9tZXRyeU9wdGlvbnMgPSB7XG5cdGhlaWdodDogMSxcblx0YmV2ZWxFbmFibGVkOiBmYWxzZSxcbn07XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtcHJpc20tZ2VvbWV0cnknLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtZXh0cnVkZS1nZW9tZXRyeSAjZ2VvbWV0cnkgKmFyZ3M9XCJbc2hhcGUoKSwgcGFyYW1ldGVycygpXVwiPlxuXHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHQ8L25ndC1leHRydWRlLWdlb21ldHJ5PlxuXHRgLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuXHRpbXBvcnRzOiBbTmd0QXJnc10sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNQcmlzbUdlb21ldHJ5IHtcblx0dmVydGljZXMgPSBpbnB1dC5yZXF1aXJlZDxBcnJheTxWZWN0b3IyIHwgW251bWJlciwgbnVtYmVyXT4+KCk7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblxuXHRwYXJhbWV0ZXJzID0gY29tcHV0ZWQoKCkgPT4gKHsgLi4udGhpcy5vcHRpb25zKCksIGRlcHRoOiB0aGlzLm9wdGlvbnMoKS5oZWlnaHQgfSkpO1xuXHRzaGFwZSA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IHRoaXMudmVydGljZXMoKTtcblx0XHRjb25zdCBpbnRlcnBvbGF0ZWRWZXJ0aWNlcyA9IHZlcnRpY2VzLm1hcCgodikgPT4gKHYgaW5zdGFuY2VvZiBWZWN0b3IyID8gdiA6IG5ldyBWZWN0b3IyKC4uLnYpKSk7XG5cdFx0cmV0dXJuIG5ldyBTaGFwZShpbnRlcnBvbGF0ZWRWZXJ0aWNlcyk7XG5cdH0pO1xuXG5cdGdlb21ldHJ5ID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8RXh0cnVkZUdlb21ldHJ5Pj4oJ2dlb21ldHJ5Jyk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZXh0ZW5kKHsgRXh0cnVkZUdlb21ldHJ5IH0pO1xuXG5cdFx0Y29uc3QgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblxuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHQvLyBhdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdC8vIFx0Y29uc3QgZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5KCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHQvLyBcdGlmICghZ2VvbWV0cnkpIHJldHVybjtcblx0XHRcdC8vXG5cdFx0XHQvLyBcdGdlb21ldHJ5LmNlbnRlcigpO1xuXHRcdFx0Ly8gfSk7XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
@@ -0,0 +1,73 @@
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 { QuadraticBezierCurve3, 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 NgtsQuadraticBezierLine {
12
+ constructor() {
13
+ this.start = input([0, 0, 0]);
14
+ this.end = input([0, 0, 0]);
15
+ this.mid = input();
16
+ this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
17
+ this.parameters = omit(this.options, ['segments']);
18
+ this.segments = pick(this.options, 'segments');
19
+ this.line = viewChild.required(NgtsLine);
20
+ this.points = computed(() => this.getPoints(this.start(), this.end(), this.mid(), this.segments()));
21
+ this.curve = new QuadraticBezierCurve3();
22
+ }
23
+ setPoints(start, end, mid) {
24
+ const points = this.getPoints(start, end, mid);
25
+ const geometry = this.line().lineGeometry();
26
+ if (geometry)
27
+ geometry.setPositions(points.map((p) => p.toArray()).flat());
28
+ }
29
+ getPoints(start, end, mid, segments = 20) {
30
+ if (start instanceof Vector3)
31
+ this.curve.v0.copy(start);
32
+ else
33
+ this.curve.v0.set(...start);
34
+ if (end instanceof Vector3)
35
+ this.curve.v2.copy(end);
36
+ else
37
+ this.curve.v2.set(...end);
38
+ if (mid instanceof Vector3) {
39
+ this.curve.v1.copy(mid);
40
+ }
41
+ else if (Array.isArray(mid)) {
42
+ this.curve.v1.set(...mid);
43
+ }
44
+ else {
45
+ this.curve.v1.copy(this.curve.v0
46
+ .clone()
47
+ .add(this.curve.v2.clone().sub(this.curve.v0))
48
+ .add(new Vector3(0, this.curve.v0.y - this.curve.v2.y, 0)));
49
+ }
50
+ return this.curve.getPoints(segments);
51
+ }
52
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsQuadraticBezierLine, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
53
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.1.0", type: NgtsQuadraticBezierLine, isStandalone: true, selector: "ngts-quadratic-bezier-line", inputs: { start: { classPropertyName: "start", publicName: "start", isSignal: true, isRequired: false, transformFunction: null }, end: { classPropertyName: "end", publicName: "end", isSignal: true, isRequired: false, transformFunction: null }, mid: { classPropertyName: "mid", publicName: "mid", isSignal: true, isRequired: false, 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: `
54
+ <ngts-line [points]="points()" [options]="parameters()">
55
+ <ng-content />
56
+ </ngts-line>
57
+ `, isInline: true, dependencies: [{ kind: "component", type: NgtsLine, selector: "ngts-line", inputs: ["points", "options"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
58
+ }
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsQuadraticBezierLine, decorators: [{
60
+ type: Component,
61
+ args: [{
62
+ selector: 'ngts-quadratic-bezier-line',
63
+ standalone: true,
64
+ template: `
65
+ <ngts-line [points]="points()" [options]="parameters()">
66
+ <ng-content />
67
+ </ngts-line>
68
+ `,
69
+ changeDetection: ChangeDetectionStrategy.OnPush,
70
+ imports: [NgtsLine],
71
+ }]
72
+ }] });
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhZHJhdGljLWJlemllci1saW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL2Fic3RyYWN0aW9ucy9zcmMvbGliL3F1YWRyYXRpYy1iZXppZXItbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxRQUFRLEVBQW1CLE1BQU0sUUFBUSxDQUFDOztBQU1uRCxNQUFNLGNBQWMsR0FBbUM7SUFDdEQsU0FBUyxFQUFFLENBQUM7SUFDWixRQUFRLEVBQUUsRUFBRTtDQUNaLENBQUM7QUFhRixNQUFNLE9BQU8sdUJBQXVCO0lBWHBDO1FBWUMsVUFBSyxHQUFHLEtBQUssQ0FBcUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0QsUUFBRyxHQUFHLEtBQUssQ0FBcUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0QsUUFBRyxHQUFHLEtBQUssRUFBc0MsQ0FBQztRQUNsRCxZQUFPLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLGVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFdEMsYUFBUSxHQUFHLElBQUks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dEMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7OztFQUlUO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGlucHV0LCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG9taXQsIHBpY2sgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IG1lcmdlSW5wdXRzIH0gZnJvbSAnbmd4dGVuc2lvbi9pbmplY3QtaW5wdXRzJztcbmltcG9ydCB7IFF1YWRyYXRpY0JlemllckN1cnZlMywgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE5ndHNMaW5lLCBOZ3RzTGluZU9wdGlvbnMgfSBmcm9tICcuL2xpbmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNRdWFkcmF0aWNCZXppZXJMaW5lT3B0aW9ucyBleHRlbmRzIE9taXQ8Tmd0c0xpbmVPcHRpb25zLCAnc2VnbWVudHMnPiB7XG5cdHNlZ21lbnRzPzogbnVtYmVyO1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c1F1YWRyYXRpY0JlemllckxpbmVPcHRpb25zID0ge1xuXHRsaW5lV2lkdGg6IDEsXG5cdHNlZ21lbnRzOiAyMCxcbn07XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtcXVhZHJhdGljLWJlemllci1saW5lJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0cy1saW5lIFtwb2ludHNdPVwicG9pbnRzKClcIiBbb3B0aW9uc109XCJwYXJhbWV0ZXJzKClcIj5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3RzLWxpbmU+XG5cdGAsXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuXHRpbXBvcnRzOiBbTmd0c0xpbmVdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzUXVhZHJhdGljQmV6aWVyTGluZSB7XG5cdHN0YXJ0ID0gaW5wdXQ8VmVjdG9yMyB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXT4oWzAsIDAsIDBdKTtcblx0ZW5kID0gaW5wdXQ8VmVjdG9yMyB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXT4oWzAsIDAsIDBdKTtcblx0bWlkID0gaW5wdXQ8VmVjdG9yMyB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXT4oKTtcblx0b3B0aW9ucyA9IGlucHV0KGRlZmF1bHRPcHRpb25zLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMoZGVmYXVsdE9wdGlvbnMpIH0pO1xuXHRwYXJhbWV0ZXJzID0gb21pdCh0aGlzLm9wdGlvbnMsIFsnc2VnbWVudHMnXSk7XG5cblx0cHJpdmF0ZSBzZWdtZW50cyA9IHBpY2sodGhpcy5vcHRpb25zLCAnc2VnbWVudHMnKTtcblxuXHRsaW5lID0gdmlld0NoaWxkLnJlcXVpcmVkKE5ndHNMaW5lKTtcblxuXHRwb2ludHMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmdldFBvaW50cyh0aGlzLnN0YXJ0KCksIHRoaXMuZW5kKCksIHRoaXMubWlkKCksIHRoaXMuc2VnbWVudHMoKSkpO1xuXG5cdHByaXZhdGUgY3VydmUgPSBuZXcgUXVhZHJhdGljQmV6aWVyQ3VydmUzKCk7XG5cblx0c2V0UG9pbnRzKFxuXHRcdHN0YXJ0OiBWZWN0b3IzIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuXHRcdGVuZDogVmVjdG9yMyB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcblx0XHRtaWQ6IFZlY3RvcjMgfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG5cdCkge1xuXHRcdGNvbnN0IHBvaW50cyA9IHRoaXMuZ2V0UG9pbnRzKHN0YXJ0LCBlbmQsIG1pZCk7XG5cdFx0Y29uc3QgZ2VvbWV0cnkgPSB0aGlzLmxpbmUoKS5saW5lR2VvbWV0cnkoKTtcblx0XHRpZiAoZ2VvbWV0cnkpIGdlb21ldHJ5LnNldFBvc2l0aW9ucyhwb2ludHMubWFwKChwKSA9PiBwLnRvQXJyYXkoKSkuZmxhdCgpKTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0UG9pbnRzKFxuXHRcdHN0YXJ0OiBWZWN0b3IzIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuXHRcdGVuZDogVmVjdG9yMyB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcblx0XHRtaWQ/OiBWZWN0b3IzIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuXHRcdHNlZ21lbnRzID0gMjAsXG5cdCkge1xuXHRcdGlmIChzdGFydCBpbnN0YW5jZW9mIFZlY3RvcjMpIHRoaXMuY3VydmUudjAuY29weShzdGFydCk7XG5cdFx0ZWxzZSB0aGlzLmN1cnZlLnYwLnNldCguLi4oc3RhcnQgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdKSk7XG5cdFx0aWYgKGVuZCBpbnN0YW5jZW9mIFZlY3RvcjMpIHRoaXMuY3VydmUudjIuY29weShlbmQpO1xuXHRcdGVsc2UgdGhpcy5jdXJ2ZS52Mi5zZXQoLi4uKGVuZCBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pKTtcblx0XHRpZiAobWlkIGluc3RhbmNlb2YgVmVjdG9yMykge1xuXHRcdFx0dGhpcy5jdXJ2ZS52MS5jb3B5KG1pZCk7XG5cdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG1pZCkpIHtcblx0XHRcdHRoaXMuY3VydmUudjEuc2V0KC4uLihtaWQgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuY3VydmUudjEuY29weShcblx0XHRcdFx0dGhpcy5jdXJ2ZS52MFxuXHRcdFx0XHRcdC5jbG9uZSgpXG5cdFx0XHRcdFx0LmFkZCh0aGlzLmN1cnZlLnYyLmNsb25lKCkuc3ViKHRoaXMuY3VydmUudjApKVxuXHRcdFx0XHRcdC5hZGQobmV3IFZlY3RvcjMoMCwgdGhpcy5jdXJ2ZS52MC55IC0gdGhpcy5jdXJ2ZS52Mi55LCAwKSksXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5jdXJ2ZS5nZXRQb2ludHMoc2VnbWVudHMpO1xuXHR9XG59XG4iXX0=
@@ -0,0 +1,98 @@
1
+ import { afterNextRender, ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, input, viewChild, } from '@angular/core';
2
+ import { extend, NgtArgs, omit, pick } from 'angular-three';
3
+ import { injectFont } from 'angular-three-soba/loaders';
4
+ import { injectAutoEffect } from 'ngxtension/auto-effect';
5
+ import { mergeInputs } from 'ngxtension/inject-inputs';
6
+ import { Mesh } from 'three';
7
+ import { mergeVertices, TextGeometry } from 'three-stdlib';
8
+ import * as i0 from "@angular/core";
9
+ const defaultOptions = {
10
+ letterSpacing: 0,
11
+ lineHeight: 1,
12
+ size: 1,
13
+ height: 0.2,
14
+ bevelThickness: 0.1,
15
+ bevelSize: 0.01,
16
+ bevelEnabled: false,
17
+ bevelOffset: 0,
18
+ bevelSegments: 4,
19
+ curveSegments: 8,
20
+ };
21
+ export class NgtsText3D {
22
+ constructor() {
23
+ this.font = input.required();
24
+ this.text = input.required();
25
+ this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
26
+ this.parameters = omit(this.options, [
27
+ 'letterSpacing',
28
+ 'lineHeight',
29
+ 'size',
30
+ 'height',
31
+ 'bevelThickness',
32
+ 'bevelSize',
33
+ 'bevelEnabled',
34
+ 'bevelOffset',
35
+ 'bevelSegments',
36
+ 'curveSegments',
37
+ 'smooth',
38
+ ]);
39
+ this.mesh = viewChild('mesh');
40
+ this.loadedFont = injectFont(this.font);
41
+ this.smooth = pick(this.options, 'smooth');
42
+ this.textOptions = pick(this.options, [
43
+ 'letterSpacing',
44
+ 'lineHeight',
45
+ 'size',
46
+ 'height',
47
+ 'bevelThickness',
48
+ 'bevelSize',
49
+ 'bevelEnabled',
50
+ 'bevelOffset',
51
+ 'bevelSegments',
52
+ 'curveSegments',
53
+ ]);
54
+ this.textArgs = computed(() => {
55
+ const [text, font, textOptions] = [this.text(), this.loadedFont(), this.textOptions()];
56
+ if (!font)
57
+ return null;
58
+ return [text, { font, ...textOptions }];
59
+ });
60
+ extend({ Mesh, TextGeometry });
61
+ const autoEffect = injectAutoEffect();
62
+ afterNextRender(() => {
63
+ autoEffect(() => {
64
+ const [mesh, smooth, textArgs] = [this.mesh()?.nativeElement, this.smooth(), this.textArgs()];
65
+ if (!textArgs || !mesh)
66
+ return;
67
+ if (smooth) {
68
+ mesh.geometry = mergeVertices(mesh.geometry, smooth);
69
+ mesh.geometry.computeVertexNormals();
70
+ }
71
+ });
72
+ });
73
+ }
74
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsText3D, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
75
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.1.0", type: NgtsText3D, isStandalone: true, selector: "ngts-text-3d", inputs: { font: { classPropertyName: "font", publicName: "font", isSignal: true, isRequired: true, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: true, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "mesh", first: true, predicate: ["mesh"], descendants: true, isSignal: true }], ngImport: i0, template: `
76
+ <ngt-mesh #mesh [parameters]="parameters()">
77
+ <ngt-text-geometry *args="textArgs()" />
78
+ <ng-content />
79
+ </ngt-mesh>
80
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
81
+ }
82
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: NgtsText3D, decorators: [{
83
+ type: Component,
84
+ args: [{
85
+ selector: 'ngts-text-3d',
86
+ standalone: true,
87
+ template: `
88
+ <ngt-mesh #mesh [parameters]="parameters()">
89
+ <ngt-text-geometry *args="textArgs()" />
90
+ <ng-content />
91
+ </ngt-mesh>
92
+ `,
93
+ imports: [NgtArgs],
94
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
95
+ changeDetection: ChangeDetectionStrategy.OnPush,
96
+ }]
97
+ }], ctorParameters: () => [] });
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC0zZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9hYnN0cmFjdGlvbnMvc3JjL2xpYi90ZXh0LTNkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1Isc0JBQXNCLEVBRXRCLEtBQUssRUFDTCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQVcsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFpQixNQUFNLDRCQUE0QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUEwQixNQUFNLGNBQWMsQ0FBQzs7QUFPbkYsTUFBTSxjQUFjLEdBQXlDO0lBQzVELGFBQWEsRUFBRSxDQUFDO0lBQ2hCLFVBQVUsRUFBRSxDQUFDO0lBQ2IsSUFBSSxFQUFFLENBQUM7SUFDUCxNQUFNLEVBQUUsR0FBRztJQUNYLGNBQWMsRUFBRSxHQUFHO0lBQ25CLFNBQVMsRUFBRSxJQUFJO0lBQ2YsWUFBWSxFQUFFLEtBQUs7SUFDbkIsV0FBVyxFQUFFLENBQUM7SUFDZCxhQUFhLEVBQUUsQ0FBQztJQUNoQixhQUFhLEVBQUUsQ0FBQztDQUNoQixDQUFDO0FBZUYsTUFBTSxPQUFPLFVBQVU7SUF5Q3RCO1FBeENBLFNBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFpQixDQUFDO1FBQ3ZDLFNBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7UUFDaEMsWUFBTyxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1RSxlQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDL0IsZUFBZTtZQUNmLFlBQVk7WUFDWixNQUFNO1lBQ04sUUFBUTtZQUNSLGdCQUFnQjtZQUNoQixXQUFXO1lBQ1gsY0FBYztZQUNkLGFBQWE7WUFDYixlQUFlO1lBQ2YsZUFBZTtZQUNmLFFBQVE7U0FDUixDQUFDLENBQUM7UUFFSCxTQUFJLEdBQUcsU0FBUyxDQUFtQixNQUFNLENBQUMsQ0FBQztRQUUzQyxlQUFVLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixXQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdEMsZ0JBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUN4QyxlQUFlO1lBQ2YsWUFBWTtZQUNaLE1BQU07WUFDTixRQUFRO1lBQ1IsZ0JBQWdCO1lBQ2hCLFdBQVc7WUFDWCxjQUFjO1lBQ2QsYUFBYTtZQUNiLGVBQWU7WUFDZixlQUFlO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsYUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDeEIsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZGLElBQUksQ0FBQyxJQUFJO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBR0YsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7UUFFL0IsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUV0QyxlQUFlLENBQUMsR0FBRyxFQUFFO1lBQ3BCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2YsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDOUYsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUk7b0JBQUUsT0FBTztnQkFDL0IsSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDWixJQUFJLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUNyRCxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQ3RDLENBQUM7WUFDRixDQUFDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs4R0F4RFcsVUFBVTtrR0FBVixVQUFVLHdpQkFWWjs7Ozs7RUFLVCw0REFDUyxPQUFPOzsyRkFJTCxVQUFVO2tCQWJ0QixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxjQUFjO29CQUN4QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7OztFQUtUO29CQUNELE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQztvQkFDbEIsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUMvQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdGFmdGVyTmV4dFJlbmRlcixcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdEVsZW1lbnRSZWYsXG5cdGlucHV0LFxuXHR2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZXh0ZW5kLCBOZ3RBcmdzLCBOZ3RNZXNoLCBvbWl0LCBwaWNrIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBpbmplY3RGb250LCBOZ3RzRm9udElucHV0IH0gZnJvbSAnYW5ndWxhci10aHJlZS1zb2JhL2xvYWRlcnMnO1xuaW1wb3J0IHsgaW5qZWN0QXV0b0VmZmVjdCB9IGZyb20gJ25neHRlbnNpb24vYXV0by1lZmZlY3QnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgTWVzaCB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IG1lcmdlVmVydGljZXMsIFRleHRHZW9tZXRyeSwgVGV4dEdlb21ldHJ5UGFyYW1ldGVycyB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c1RleHQzRE9wdGlvbnMgZXh0ZW5kcyBPbWl0PFRleHRHZW9tZXRyeVBhcmFtZXRlcnMsICdmb250Jz4ge1xuXHRiZXZlbFNlZ21lbnRzOiBudW1iZXI7XG5cdHNtb290aD86IG51bWJlcjtcbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IFBhcnRpYWw8Tmd0TWVzaD4gJiBOZ3RzVGV4dDNET3B0aW9ucyA9IHtcblx0bGV0dGVyU3BhY2luZzogMCxcblx0bGluZUhlaWdodDogMSxcblx0c2l6ZTogMSxcblx0aGVpZ2h0OiAwLjIsXG5cdGJldmVsVGhpY2tuZXNzOiAwLjEsXG5cdGJldmVsU2l6ZTogMC4wMSxcblx0YmV2ZWxFbmFibGVkOiBmYWxzZSxcblx0YmV2ZWxPZmZzZXQ6IDAsXG5cdGJldmVsU2VnbWVudHM6IDQsXG5cdGN1cnZlU2VnbWVudHM6IDgsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLXRleHQtM2QnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtbWVzaCAjbWVzaCBbcGFyYW1ldGVyc109XCJwYXJhbWV0ZXJzKClcIj5cblx0XHRcdDxuZ3QtdGV4dC1nZW9tZXRyeSAqYXJncz1cInRleHRBcmdzKClcIiAvPlxuXHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHQ8L25ndC1tZXNoPlxuXHRgLFxuXHRpbXBvcnRzOiBbTmd0QXJnc10sXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNUZXh0M0Qge1xuXHRmb250ID0gaW5wdXQucmVxdWlyZWQ8Tmd0c0ZvbnRJbnB1dD4oKTtcblx0dGV4dCA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcblx0b3B0aW9ucyA9IGlucHV0KGRlZmF1bHRPcHRpb25zLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMoZGVmYXVsdE9wdGlvbnMpIH0pO1xuXHRwYXJhbWV0ZXJzID0gb21pdCh0aGlzLm9wdGlvbnMsIFtcblx0XHQnbGV0dGVyU3BhY2luZycsXG5cdFx0J2xpbmVIZWlnaHQnLFxuXHRcdCdzaXplJyxcblx0XHQnaGVpZ2h0Jyxcblx0XHQnYmV2ZWxUaGlja25lc3MnLFxuXHRcdCdiZXZlbFNpemUnLFxuXHRcdCdiZXZlbEVuYWJsZWQnLFxuXHRcdCdiZXZlbE9mZnNldCcsXG5cdFx0J2JldmVsU2VnbWVudHMnLFxuXHRcdCdjdXJ2ZVNlZ21lbnRzJyxcblx0XHQnc21vb3RoJyxcblx0XSk7XG5cblx0bWVzaCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPE1lc2g+PignbWVzaCcpO1xuXG5cdGxvYWRlZEZvbnQgPSBpbmplY3RGb250KHRoaXMuZm9udCk7XG5cdHByaXZhdGUgc21vb3RoID0gcGljayh0aGlzLm9wdGlvbnMsICdzbW9vdGgnKTtcblx0cHJpdmF0ZSB0ZXh0T3B0aW9ucyA9IHBpY2sodGhpcy5vcHRpb25zLCBbXG5cdFx0J2xldHRlclNwYWNpbmcnLFxuXHRcdCdsaW5lSGVpZ2h0Jyxcblx0XHQnc2l6ZScsXG5cdFx0J2hlaWdodCcsXG5cdFx0J2JldmVsVGhpY2tuZXNzJyxcblx0XHQnYmV2ZWxTaXplJyxcblx0XHQnYmV2ZWxFbmFibGVkJyxcblx0XHQnYmV2ZWxPZmZzZXQnLFxuXHRcdCdiZXZlbFNlZ21lbnRzJyxcblx0XHQnY3VydmVTZWdtZW50cycsXG5cdF0pO1xuXG5cdHRleHRBcmdzID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IFt0ZXh0LCBmb250LCB0ZXh0T3B0aW9uc10gPSBbdGhpcy50ZXh0KCksIHRoaXMubG9hZGVkRm9udCgpLCB0aGlzLnRleHRPcHRpb25zKCldO1xuXHRcdGlmICghZm9udCkgcmV0dXJuIG51bGw7XG5cdFx0cmV0dXJuIFt0ZXh0LCB7IGZvbnQsIC4uLnRleHRPcHRpb25zIH1dO1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRleHRlbmQoeyBNZXNoLCBUZXh0R2VvbWV0cnkgfSk7XG5cblx0XHRjb25zdCBhdXRvRWZmZWN0ID0gaW5qZWN0QXV0b0VmZmVjdCgpO1xuXG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdGF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBbbWVzaCwgc21vb3RoLCB0ZXh0QXJnc10gPSBbdGhpcy5tZXNoKCk/Lm5hdGl2ZUVsZW1lbnQsIHRoaXMuc21vb3RoKCksIHRoaXMudGV4dEFyZ3MoKV07XG5cdFx0XHRcdGlmICghdGV4dEFyZ3MgfHwgIW1lc2gpIHJldHVybjtcblx0XHRcdFx0aWYgKHNtb290aCkge1xuXHRcdFx0XHRcdG1lc2guZ2VvbWV0cnkgPSBtZXJnZVZlcnRpY2VzKG1lc2guZ2VvbWV0cnksIHNtb290aCk7XG5cdFx0XHRcdFx0bWVzaC5nZW9tZXRyeS5jb21wdXRlVmVydGV4Tm9ybWFscygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxufVxuIl19