angular-three-soba 2.0.0-beta.9 → 2.1.0

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 (425) hide show
  1. package/README.md +62 -4
  2. package/abstractions/README.md +279 -2
  3. package/abstractions/index.d.ts +13 -6
  4. package/abstractions/lib/billboard.d.ts +19 -0
  5. package/abstractions/lib/catmull-rom-line.d.ts +617 -0
  6. package/abstractions/lib/cubic-bezier-line.d.ts +19 -0
  7. package/abstractions/lib/edges.d.ts +800 -0
  8. package/abstractions/lib/gradient-texture.d.ts +24 -0
  9. package/abstractions/lib/grid.d.ts +315 -0
  10. package/abstractions/lib/helper.d.ts +25 -0
  11. package/abstractions/lib/line.d.ts +41 -0
  12. package/abstractions/lib/prism-geometry.d.ts +32 -0
  13. package/abstractions/lib/quadratic-bezier-line.d.ts +21 -0
  14. package/abstractions/lib/rounded-box.d.ts +41 -0
  15. package/abstractions/lib/text-3d.d.ts +314 -0
  16. package/abstractions/lib/text.d.ts +54 -0
  17. package/cameras/README.md +91 -2
  18. package/cameras/index.d.ts +4 -4
  19. package/cameras/lib/camera-content.d.ts +10 -0
  20. package/cameras/lib/cube-camera.d.ts +38 -0
  21. package/cameras/lib/orthographic-camera.d.ts +40 -0
  22. package/cameras/lib/perspective-camera.d.ts +36 -0
  23. package/controls/README.md +96 -2
  24. package/controls/index.d.ts +4 -1
  25. package/controls/lib/camera-controls.d.ts +31 -0
  26. package/controls/lib/orbit-controls.d.ts +38 -0
  27. package/controls/lib/pivot-controls/axis-arrow.d.ts +31 -0
  28. package/controls/lib/pivot-controls/axis-rotator.d.ts +30 -0
  29. package/controls/lib/pivot-controls/pivot-controls.d.ts +110 -0
  30. package/controls/lib/pivot-controls/plane-slider.d.ts +32 -0
  31. package/controls/lib/pivot-controls/scaling-sphere.d.ts +32 -0
  32. package/controls/lib/scroll-controls.d.ts +78 -0
  33. package/esm2022/abstractions/index.mjs +14 -7
  34. package/esm2022/abstractions/lib/billboard.mjs +69 -0
  35. package/esm2022/abstractions/lib/catmull-rom-line.mjs +76 -0
  36. package/esm2022/abstractions/lib/cubic-bezier-line.mjs +51 -0
  37. package/esm2022/abstractions/lib/edges.mjs +70 -0
  38. package/esm2022/abstractions/lib/gradient-texture.mjs +91 -0
  39. package/esm2022/abstractions/lib/grid.mjs +103 -0
  40. package/esm2022/abstractions/lib/helper.mjs +76 -0
  41. package/esm2022/abstractions/lib/line.mjs +126 -0
  42. package/esm2022/abstractions/lib/prism-geometry.mjs +46 -0
  43. package/esm2022/abstractions/lib/quadratic-bezier-line.mjs +73 -0
  44. package/esm2022/abstractions/lib/rounded-box.mjs +111 -0
  45. package/esm2022/abstractions/lib/text-3d.mjs +98 -0
  46. package/esm2022/abstractions/lib/text.mjs +91 -0
  47. package/esm2022/cameras/index.mjs +5 -5
  48. package/esm2022/cameras/lib/camera-content.mjs +14 -0
  49. package/esm2022/cameras/lib/cube-camera.mjs +111 -0
  50. package/esm2022/cameras/lib/orthographic-camera.mjs +131 -0
  51. package/esm2022/cameras/lib/perspective-camera.mjs +104 -0
  52. package/esm2022/controls/index.mjs +5 -2
  53. package/esm2022/controls/lib/camera-controls.mjs +127 -0
  54. package/esm2022/controls/lib/orbit-controls.mjs +132 -0
  55. package/esm2022/controls/lib/pivot-controls/axis-arrow.mjs +263 -0
  56. package/esm2022/controls/lib/pivot-controls/axis-rotator.mjs +264 -0
  57. package/esm2022/controls/lib/pivot-controls/pivot-controls.mjs +340 -0
  58. package/esm2022/controls/lib/pivot-controls/plane-slider.mjs +266 -0
  59. package/esm2022/controls/lib/pivot-controls/scaling-sphere.mjs +232 -0
  60. package/esm2022/controls/lib/scroll-controls.mjs +268 -0
  61. package/esm2022/loaders/index.mjs +6 -5
  62. package/esm2022/loaders/lib/font-loader.mjs +49 -0
  63. package/esm2022/loaders/lib/gltf-loader.mjs +51 -0
  64. package/esm2022/loaders/lib/loader.mjs +109 -0
  65. package/esm2022/loaders/lib/progress.mjs +51 -0
  66. package/esm2022/loaders/lib/texture-loader.mjs +32 -0
  67. package/esm2022/materials/index.mjs +8 -7
  68. package/esm2022/materials/lib/custom-shader-material.mjs +71 -0
  69. package/esm2022/materials/lib/mesh-distort-material.mjs +42 -0
  70. package/esm2022/materials/lib/mesh-reflector-material.mjs +278 -0
  71. package/esm2022/materials/lib/mesh-refraction-material.mjs +144 -0
  72. package/esm2022/materials/lib/mesh-transmission-material.mjs +188 -0
  73. package/esm2022/materials/lib/mesh-wobble-material.mjs +42 -0
  74. package/esm2022/materials/lib/point-material.mjs +33 -0
  75. package/esm2022/misc/index.mjs +14 -14
  76. package/esm2022/misc/lib/animations.mjs +71 -0
  77. package/esm2022/misc/lib/bake-shadows.mjs +26 -0
  78. package/esm2022/misc/lib/computed-attribute.mjs +55 -0
  79. package/esm2022/misc/lib/constants.mjs +5 -0
  80. package/esm2022/misc/lib/decal.mjs +139 -0
  81. package/esm2022/misc/lib/deprecated.mjs +15 -0
  82. package/esm2022/misc/lib/depth-buffer.mjs +39 -0
  83. package/esm2022/misc/lib/fbo.mjs +86 -0
  84. package/esm2022/misc/lib/html/html-content.mjs +327 -0
  85. package/esm2022/misc/lib/html/html.mjs +129 -0
  86. package/esm2022/misc/lib/html/utils.mjs +74 -0
  87. package/esm2022/misc/lib/intersect.mjs +52 -0
  88. package/esm2022/misc/lib/sampler.mjs +122 -0
  89. package/esm2022/misc/lib/scale-factor.mjs +29 -0
  90. package/esm2022/performances/index.mjs +7 -6
  91. package/esm2022/performances/lib/adaptive-dpr.mjs +52 -0
  92. package/esm2022/performances/lib/adaptive-events.mjs +28 -0
  93. package/esm2022/performances/lib/detailed.mjs +57 -0
  94. package/esm2022/performances/lib/instances/instances.mjs +183 -0
  95. package/esm2022/performances/lib/instances/position-mesh.mjs +51 -0
  96. package/esm2022/performances/lib/points/points.mjs +278 -0
  97. package/esm2022/performances/lib/points/position-point.mjs +53 -0
  98. package/esm2022/performances/lib/segments/segment-object.mjs +9 -0
  99. package/esm2022/performances/lib/segments/segments.mjs +129 -0
  100. package/esm2022/shaders/index.mjs +4 -18
  101. package/esm2022/shaders/lib/grid-material.mjs +81 -0
  102. package/esm2022/shaders/lib/mesh-refraction-material.mjs +163 -0
  103. package/esm2022/shaders/lib/point-material.mjs +24 -0
  104. package/esm2022/staging/index.mjs +20 -22
  105. package/esm2022/staging/lib/accumulative-shadows.mjs +182 -0
  106. package/esm2022/staging/lib/backdrop.mjs +73 -0
  107. package/esm2022/staging/lib/bb-anchor.mjs +58 -0
  108. package/esm2022/staging/lib/bounds.mjs +286 -0
  109. package/esm2022/staging/lib/camera-shake.mjs +69 -0
  110. package/esm2022/staging/lib/caustics.mjs +188 -0
  111. package/esm2022/staging/lib/center.mjs +118 -0
  112. package/esm2022/staging/lib/contact-shadows.mjs +214 -0
  113. package/esm2022/staging/lib/environment.mjs +481 -0
  114. package/esm2022/staging/lib/float.mjs +70 -0
  115. package/esm2022/staging/lib/lightformer.mjs +107 -0
  116. package/esm2022/staging/lib/mask.mjs +78 -0
  117. package/esm2022/staging/lib/matcap-texture.mjs +81 -0
  118. package/esm2022/staging/lib/normal-texture.mjs +81 -0
  119. package/esm2022/staging/lib/randomized-lights.mjs +104 -0
  120. package/esm2022/staging/lib/render-texture.mjs +203 -0
  121. package/esm2022/staging/lib/sky.mjs +86 -0
  122. package/esm2022/staging/lib/spot-light.mjs +453 -0
  123. package/esm2022/staging/lib/stage.mjs +236 -0
  124. package/esm2022/{utils/angular-three-soba-utils.mjs → stats/angular-three-soba-stats.mjs} +1 -1
  125. package/esm2022/stats/index.mjs +2 -0
  126. package/esm2022/stats/lib/stats.mjs +63 -0
  127. package/esm2022/vanilla-exports/angular-three-soba-vanilla-exports.mjs +5 -0
  128. package/esm2022/vanilla-exports/index.mjs +3 -0
  129. package/fesm2022/angular-three-soba-abstractions.mjs +884 -697
  130. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  131. package/fesm2022/angular-three-soba-cameras.mjs +261 -308
  132. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  133. package/fesm2022/angular-three-soba-controls.mjs +1776 -109
  134. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  135. package/fesm2022/angular-three-soba-loaders.mjs +191 -145
  136. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  137. package/fesm2022/angular-three-soba-materials.mjs +527 -748
  138. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  139. package/fesm2022/angular-three-soba-misc.mjs +783 -1935
  140. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  141. package/fesm2022/angular-three-soba-performances.mjs +591 -475
  142. package/fesm2022/angular-three-soba-performances.mjs.map +1 -1
  143. package/fesm2022/angular-three-soba-shaders.mjs +51 -1369
  144. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  145. package/fesm2022/angular-three-soba-staging.mjs +2421 -3521
  146. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  147. package/fesm2022/angular-three-soba-stats.mjs +70 -0
  148. package/fesm2022/angular-three-soba-stats.mjs.map +1 -0
  149. package/fesm2022/angular-three-soba-vanilla-exports.mjs +6 -0
  150. package/fesm2022/angular-three-soba-vanilla-exports.mjs.map +1 -0
  151. package/loaders/README.md +130 -2
  152. package/loaders/index.d.ts +5 -4
  153. package/loaders/lib/font-loader.d.ts +27 -0
  154. package/loaders/lib/gltf-loader.d.ts +24 -0
  155. package/loaders/lib/loader.d.ts +29 -0
  156. package/loaders/lib/progress.d.ts +9 -0
  157. package/loaders/lib/texture-loader.d.ts +13 -0
  158. package/materials/README.md +160 -2
  159. package/materials/index.d.ts +7 -6
  160. package/materials/lib/custom-shader-material.d.ts +20 -0
  161. package/materials/lib/mesh-distort-material.d.ts +17 -0
  162. package/materials/lib/mesh-reflector-material.d.ts +51 -0
  163. package/materials/lib/mesh-refraction-material.d.ts +42 -0
  164. package/materials/lib/mesh-transmission-material.d.ts +77 -0
  165. package/materials/lib/mesh-wobble-material.d.ts +15 -0
  166. package/materials/lib/point-material.d.ts +11 -0
  167. package/metadata.json +1 -1
  168. package/misc/README.md +217 -2
  169. package/misc/index.d.ts +13 -13
  170. package/misc/lib/animations.d.ts +17 -0
  171. package/misc/lib/computed-attribute.d.ts +64 -0
  172. package/misc/lib/constants.d.ts +1 -0
  173. package/misc/lib/decal.d.ts +27 -0
  174. package/misc/lib/deprecated.d.ts +14 -0
  175. package/misc/lib/depth-buffer.d.ts +8 -0
  176. package/misc/lib/fbo.d.ts +46 -0
  177. package/misc/lib/html/html-content.d.ts +47 -0
  178. package/misc/lib/html/html.d.ts +30 -0
  179. package/misc/lib/html/utils.d.ts +14 -0
  180. package/misc/lib/intersect.d.ts +13 -0
  181. package/misc/lib/sampler.d.ts +73 -0
  182. package/misc/lib/scale-factor.d.ts +3 -0
  183. package/package.json +90 -50
  184. package/performances/index.d.ts +6 -5
  185. package/performances/lib/adaptive-dpr.d.ts +7 -0
  186. package/performances/{adaptive-events → lib}/adaptive-events.d.ts +0 -3
  187. package/performances/lib/detailed.d.ts +17 -0
  188. package/performances/lib/instances/instances.d.ts +122 -0
  189. package/performances/lib/instances/position-mesh.d.ts +20 -0
  190. package/performances/lib/points/points.d.ts +224 -0
  191. package/performances/lib/points/position-point.d.ts +21 -0
  192. package/performances/lib/segments/segment-object.d.ts +17 -0
  193. package/performances/lib/segments/segments.d.ts +97 -0
  194. package/shaders/index.d.ts +3 -17
  195. package/shaders/lib/grid-material.d.ts +69 -0
  196. package/shaders/lib/mesh-refraction-material.d.ts +11 -0
  197. package/shaders/lib/point-material.d.ts +14 -0
  198. package/staging/README.md +473 -2
  199. package/staging/index.d.ts +19 -21
  200. package/staging/lib/accumulative-shadows.d.ts +75 -0
  201. package/staging/lib/backdrop.d.ts +22 -0
  202. package/staging/lib/bb-anchor.d.ts +17 -0
  203. package/staging/lib/bounds.d.ts +47 -0
  204. package/staging/lib/camera-shake.d.ts +29 -0
  205. package/staging/lib/caustics.d.ts +53 -0
  206. package/staging/lib/center.d.ts +390 -0
  207. package/staging/lib/contact-shadows.d.ts +55 -0
  208. package/staging/lib/environment.d.ts +132 -0
  209. package/staging/lib/float.d.ts +20 -0
  210. package/staging/lib/lightformer.d.ts +310 -0
  211. package/staging/lib/mask.d.ts +30 -0
  212. package/staging/lib/matcap-texture.d.ts +32 -0
  213. package/staging/lib/normal-texture.d.ts +37 -0
  214. package/staging/lib/randomized-lights.d.ts +54 -0
  215. package/staging/lib/render-texture.d.ts +64 -0
  216. package/staging/lib/sky.d.ts +32 -0
  217. package/staging/lib/spot-light.d.ts +119 -0
  218. package/staging/lib/stage.d.ts +352 -0
  219. package/stats/README.md +3 -0
  220. package/stats/index.d.ts +1 -0
  221. package/stats/lib/stats.d.ts +14 -0
  222. package/vanilla-exports/README.md +3 -0
  223. package/vanilla-exports/index.d.ts +27 -0
  224. package/web-types.json +1 -1
  225. package/abstractions/billboard/billboard.d.ts +0 -28
  226. package/abstractions/detailed/detailed.d.ts +0 -26
  227. package/abstractions/edges/edges.d.ts +0 -34
  228. package/abstractions/grid/grid.d.ts +0 -50
  229. package/abstractions/text/text.d.ts +0 -82
  230. package/abstractions/text-3d/text-3d.d.ts +0 -81
  231. package/assets/distort.vert.glsl +0 -1
  232. package/cameras/camera/camera-content.d.ts +0 -13
  233. package/cameras/camera/camera.d.ts +0 -26
  234. package/cameras/cube-camera/cube-camera.d.ts +0 -69
  235. package/cameras/orthographic-camera/orthographic-camera.d.ts +0 -37
  236. package/cameras/perspective-camera/perspective-camera.d.ts +0 -18
  237. package/controls/orbit-controls/orbit-controls.d.ts +0 -54
  238. package/esm2022/abstractions/billboard/billboard.mjs +0 -74
  239. package/esm2022/abstractions/detailed/detailed.mjs +0 -64
  240. package/esm2022/abstractions/edges/edges.mjs +0 -88
  241. package/esm2022/abstractions/grid/grid.mjs +0 -180
  242. package/esm2022/abstractions/text/text.mjs +0 -274
  243. package/esm2022/abstractions/text-3d/text-3d.mjs +0 -165
  244. package/esm2022/cameras/camera/camera-content.mjs +0 -20
  245. package/esm2022/cameras/camera/camera.mjs +0 -77
  246. package/esm2022/cameras/cube-camera/cube-camera.mjs +0 -161
  247. package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +0 -102
  248. package/esm2022/cameras/perspective-camera/perspective-camera.mjs +0 -46
  249. package/esm2022/controls/orbit-controls/orbit-controls.mjs +0 -181
  250. package/esm2022/loaders/gltf-loader/gltf-loader.mjs +0 -30
  251. package/esm2022/loaders/loader/loader.mjs +0 -138
  252. package/esm2022/loaders/progress/progress.mjs +0 -45
  253. package/esm2022/loaders/texture-loader/texture-loader.mjs +0 -28
  254. package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +0 -82
  255. package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +0 -367
  256. package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +0 -171
  257. package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +0 -278
  258. package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +0 -68
  259. package/esm2022/materials/point-material/point-material.mjs +0 -46
  260. package/esm2022/misc/animations/animations.mjs +0 -59
  261. package/esm2022/misc/bake-shadows/bake-shadows.mjs +0 -24
  262. package/esm2022/misc/caustics/caustics.mjs +0 -387
  263. package/esm2022/misc/decal/decal.mjs +0 -187
  264. package/esm2022/misc/depth-buffer/depth-buffer.mjs +0 -44
  265. package/esm2022/misc/example/example.mjs +0 -160
  266. package/esm2022/misc/fbo/fbo.mjs +0 -47
  267. package/esm2022/misc/html/html-wrapper.mjs +0 -478
  268. package/esm2022/misc/html/html.mjs +0 -304
  269. package/esm2022/misc/sampler/sampler.mjs +0 -142
  270. package/esm2022/misc/shadow/shadow.mjs +0 -111
  271. package/esm2022/misc/stats-gl/stats-gl.mjs +0 -61
  272. package/esm2022/misc/trail/trail.mjs +0 -209
  273. package/esm2022/misc/trail-texture/inject-trail-texture.mjs +0 -17
  274. package/esm2022/misc/trail-texture/trail-texture.mjs +0 -106
  275. package/esm2022/modifiers/angular-three-soba-modifiers.mjs +0 -5
  276. package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +0 -64
  277. package/esm2022/modifiers/index.mjs +0 -2
  278. package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +0 -44
  279. package/esm2022/performances/adaptive-events/adaptive-events.mjs +0 -27
  280. package/esm2022/performances/points/points-input.mjs +0 -64
  281. package/esm2022/performances/points/points.mjs +0 -329
  282. package/esm2022/performances/points/position-point.mjs +0 -54
  283. package/esm2022/performances/segments/segment-object.mjs +0 -9
  284. package/esm2022/performances/segments/segments.mjs +0 -182
  285. package/esm2022/shaders/blur-pass/blur-pass.mjs +0 -61
  286. package/esm2022/shaders/caustics/caustics-material.mjs +0 -130
  287. package/esm2022/shaders/caustics/caustics-projection-material.mjs +0 -31
  288. package/esm2022/shaders/convolution-material/convolution-material.mjs +0 -94
  289. package/esm2022/shaders/discard-material/discard-material.mjs +0 -3
  290. package/esm2022/shaders/grid-material/grid-material.mjs +0 -77
  291. package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +0 -56
  292. package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +0 -223
  293. package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +0 -170
  294. package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +0 -268
  295. package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +0 -37
  296. package/esm2022/shaders/shader-material/shader-material.mjs +0 -34
  297. package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +0 -25
  298. package/esm2022/shaders/sparkles-material/sparkles-material.mjs +0 -33
  299. package/esm2022/shaders/spot-light-material/spot-light-material.mjs +0 -86
  300. package/esm2022/shaders/star-field-material/star-field-material.mjs +0 -33
  301. package/esm2022/shaders/wireframe-material/wireframe-material.mjs +0 -247
  302. package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +0 -267
  303. package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +0 -108
  304. package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +0 -206
  305. package/esm2022/staging/backdrop/backdrop.mjs +0 -77
  306. package/esm2022/staging/bb-anchor/bb-anchor.mjs +0 -70
  307. package/esm2022/staging/bounds/bounds.mjs +0 -308
  308. package/esm2022/staging/camera-shake/camera-shake.mjs +0 -123
  309. package/esm2022/staging/center/center.mjs +0 -163
  310. package/esm2022/staging/cloud/cloud.mjs +0 -158
  311. package/esm2022/staging/contact-shadows/contact-shadows.mjs +0 -246
  312. package/esm2022/staging/environment/assets.mjs +0 -13
  313. package/esm2022/staging/environment/environment-cube.mjs +0 -47
  314. package/esm2022/staging/environment/environment-ground.mjs +0 -41
  315. package/esm2022/staging/environment/environment-input.mjs +0 -119
  316. package/esm2022/staging/environment/environment-map.mjs +0 -53
  317. package/esm2022/staging/environment/environment-portal.mjs +0 -113
  318. package/esm2022/staging/environment/environment.mjs +0 -61
  319. package/esm2022/staging/environment/utils.mjs +0 -105
  320. package/esm2022/staging/float/float.mjs +0 -94
  321. package/esm2022/staging/matcap-texture/matcap-texture.mjs +0 -64
  322. package/esm2022/staging/normal-texture/normal-texture.mjs +0 -53
  323. package/esm2022/staging/sky/sky.mjs +0 -119
  324. package/esm2022/staging/sparkles/sparkles.mjs +0 -164
  325. package/esm2022/staging/spot-light/shadow-mesh-input.mjs +0 -63
  326. package/esm2022/staging/spot-light/shadow-mesh.mjs +0 -266
  327. package/esm2022/staging/spot-light/spot-light-input.mjs +0 -84
  328. package/esm2022/staging/spot-light/spot-light.mjs +0 -81
  329. package/esm2022/staging/spot-light/volumetric-mesh.mjs +0 -98
  330. package/esm2022/staging/stage/stage.mjs +0 -388
  331. package/esm2022/staging/stars/stars.mjs +0 -147
  332. package/esm2022/staging/wireframe/wireframe-input.mjs +0 -191
  333. package/esm2022/staging/wireframe/wireframe.mjs +0 -224
  334. package/esm2022/utils/content/content.mjs +0 -15
  335. package/esm2022/utils/index.mjs +0 -2
  336. package/fesm2022/angular-three-soba-modifiers.mjs +0 -71
  337. package/fesm2022/angular-three-soba-modifiers.mjs.map +0 -1
  338. package/fesm2022/angular-three-soba-utils.mjs +0 -22
  339. package/fesm2022/angular-three-soba-utils.mjs.map +0 -1
  340. package/loaders/gltf-loader/gltf-loader.d.ts +0 -10
  341. package/loaders/loader/loader.d.ts +0 -33
  342. package/loaders/progress/progress.d.ts +0 -9
  343. package/loaders/texture-loader/texture-loader.d.ts +0 -7
  344. package/materials/mesh-distort-material/mesh-distort-material.d.ts +0 -40
  345. package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +0 -99
  346. package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +0 -62
  347. package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +0 -107
  348. package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +0 -29
  349. package/materials/point-material/point-material.d.ts +0 -24
  350. package/misc/animations/animations.d.ts +0 -15
  351. package/misc/caustics/caustics.d.ts +0 -87
  352. package/misc/decal/decal.d.ts +0 -49
  353. package/misc/depth-buffer/depth-buffer.d.ts +0 -9
  354. package/misc/example/example.d.ts +0 -81
  355. package/misc/fbo/fbo.d.ts +0 -17
  356. package/misc/html/html-wrapper.d.ts +0 -559
  357. package/misc/html/html.d.ts +0 -214
  358. package/misc/sampler/sampler.d.ts +0 -67
  359. package/misc/shadow/shadow.d.ts +0 -37
  360. package/misc/stats-gl/stats-gl.d.ts +0 -24
  361. package/misc/trail/trail.d.ts +0 -57
  362. package/misc/trail-texture/inject-trail-texture.d.ts +0 -9
  363. package/misc/trail-texture/trail-texture.d.ts +0 -50
  364. package/modifiers/README.md +0 -3
  365. package/modifiers/curve-modifier/curve-modifier.d.ts +0 -23
  366. package/modifiers/index.d.ts +0 -1
  367. package/performances/adaptive-dpr/adaptive-dpr.d.ts +0 -14
  368. package/performances/points/points-input.d.ts +0 -32
  369. package/performances/points/points.d.ts +0 -92
  370. package/performances/points/position-point.d.ts +0 -11
  371. package/performances/segments/segment-object.d.ts +0 -7
  372. package/performances/segments/segments.d.ts +0 -124
  373. package/shaders/blur-pass/blur-pass.d.ts +0 -23
  374. package/shaders/caustics/caustics-material.d.ts +0 -4
  375. package/shaders/caustics/caustics-projection-material.d.ts +0 -4
  376. package/shaders/convolution-material/convolution-material.d.ts +0 -7
  377. package/shaders/discard-material/discard-material.d.ts +0 -3
  378. package/shaders/grid-material/grid-material.d.ts +0 -37
  379. package/shaders/mesh-distort-material/mesh-distort-material.d.ts +0 -295
  380. package/shaders/mesh-reflector-material/mesh-reflector-material.d.ts +0 -50
  381. package/shaders/mesh-refraction-material/mesh-refraction-material.d.ts +0 -4
  382. package/shaders/mesh-transmission-material/mesh-transmission-material.d.ts +0 -25
  383. package/shaders/mesh-wobble-material/mesh-wobble-material.d.ts +0 -16
  384. package/shaders/shader-material/shader-material.d.ts +0 -6
  385. package/shaders/soft-shadow-material/soft-shadow-material.d.ts +0 -19
  386. package/shaders/sparkles-material/sparkles-material.d.ts +0 -17
  387. package/shaders/spot-light-material/spot-light-material.d.ts +0 -13
  388. package/shaders/star-field-material/star-field-material.d.ts +0 -13
  389. package/shaders/wireframe-material/wireframe-material.d.ts +0 -58
  390. package/staging/accumulative-shadows/accumulative-shadows.d.ts +0 -146
  391. package/staging/accumulative-shadows/progressive-light-map.d.ts +0 -34
  392. package/staging/accumulative-shadows/randomized-lights.d.ts +0 -90
  393. package/staging/backdrop/backdrop.d.ts +0 -30
  394. package/staging/bb-anchor/bb-anchor.d.ts +0 -27
  395. package/staging/bounds/bounds.d.ts +0 -134
  396. package/staging/camera-shake/camera-shake.d.ts +0 -43
  397. package/staging/center/center.d.ts +0 -70
  398. package/staging/cloud/cloud.d.ts +0 -51
  399. package/staging/contact-shadows/contact-shadows.d.ts +0 -70
  400. package/staging/environment/assets.d.ts +0 -13
  401. package/staging/environment/environment-cube.d.ts +0 -15
  402. package/staging/environment/environment-ground.d.ts +0 -13
  403. package/staging/environment/environment-input.d.ts +0 -68
  404. package/staging/environment/environment-map.d.ts +0 -16
  405. package/staging/environment/environment-portal.d.ts +0 -18
  406. package/staging/environment/environment.d.ts +0 -8
  407. package/staging/environment/utils.d.ts +0 -7
  408. package/staging/float/float.d.ts +0 -31
  409. package/staging/matcap-texture/matcap-texture.d.ts +0 -13
  410. package/staging/normal-texture/normal-texture.d.ts +0 -16
  411. package/staging/sky/sky.d.ts +0 -48
  412. package/staging/sparkles/sparkles.d.ts +0 -63
  413. package/staging/spot-light/shadow-mesh-input.d.ts +0 -29
  414. package/staging/spot-light/shadow-mesh.d.ts +0 -37
  415. package/staging/spot-light/spot-light-input.d.ts +0 -38
  416. package/staging/spot-light/spot-light.d.ts +0 -39
  417. package/staging/spot-light/volumetric-mesh.d.ts +0 -24
  418. package/staging/stage/stage.d.ts +0 -130
  419. package/staging/stars/stars.d.ts +0 -45
  420. package/staging/wireframe/wireframe-input.d.ts +0 -65
  421. package/staging/wireframe/wireframe.d.ts +0 -28
  422. package/utils/README.md +0 -3
  423. package/utils/content/content.d.ts +0 -8
  424. package/utils/index.d.ts +0 -1
  425. /package/misc/{bake-shadows → lib}/bake-shadows.d.ts +0 -0
@@ -0,0 +1,268 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { afterNextRender, ChangeDetectionStrategy, Component, Directive, ElementRef, inject, input, model, untracked, } from '@angular/core';
3
+ import { injectBeforeRender, injectStore, NgtHTML, pick, provideHTMLDomElement } from 'angular-three';
4
+ import { easing } from 'maath';
5
+ import { injectAutoEffect } from 'ngxtension/auto-effect';
6
+ import { mergeInputs } from 'ngxtension/inject-inputs';
7
+ import * as i0 from "@angular/core";
8
+ const defaultOptions = {
9
+ eps: 0.00001,
10
+ horizontal: false,
11
+ infinite: false,
12
+ pages: 1,
13
+ distance: 1,
14
+ damping: 0.25,
15
+ maxSpeed: Infinity,
16
+ prepend: false,
17
+ enabled: true,
18
+ style: {},
19
+ };
20
+ export class NgtsScrollControls {
21
+ constructor() {
22
+ this.progress = model(0);
23
+ this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
24
+ this.document = inject(DOCUMENT);
25
+ this.store = injectStore();
26
+ this.gl = this.store.select('gl');
27
+ this.events = this.store.select('events');
28
+ this.invalidate = this.store.select('invalidate');
29
+ this.size = this.store.select('size');
30
+ this.domElement = pick(this.gl, 'domElement');
31
+ this.target = pick(this.domElement, 'parentNode');
32
+ this._el = this.document.createElement('div');
33
+ this._fill = this.document.createElement('div');
34
+ this._fixed = this.document.createElement('div');
35
+ this.style = pick(this.options, 'style');
36
+ this.prepend = pick(this.options, 'prepend');
37
+ this.enabled = pick(this.options, 'enabled');
38
+ this.infinite = pick(this.options, 'infinite');
39
+ this.maxSpeed = pick(this.options, 'maxSpeed');
40
+ this.eps = pick(this.options, 'eps');
41
+ this.horizontal = pick(this.options, 'horizontal');
42
+ this.pages = pick(this.options, 'pages');
43
+ this.distance = pick(this.options, 'distance');
44
+ this.damping = pick(this.options, 'damping');
45
+ this.scroll = 0;
46
+ this.offset = 0;
47
+ this.delta = 0;
48
+ const autoEffect = injectAutoEffect();
49
+ afterNextRender(() => {
50
+ autoEffect(() => {
51
+ const target = this.target();
52
+ if (!target)
53
+ return;
54
+ const parent = target;
55
+ const [pages, distance, horizontal, el, fill, fixed, style, prepend, domElement, events] = [
56
+ this.pages(),
57
+ this.distance(),
58
+ this.horizontal(),
59
+ this.el,
60
+ this.fill,
61
+ this.fixed,
62
+ untracked(this.style),
63
+ untracked(this.prepend),
64
+ untracked(this.domElement),
65
+ untracked(this.events),
66
+ ];
67
+ el.style.position = 'absolute';
68
+ el.style.width = '100%';
69
+ el.style.height = '100%';
70
+ el.style[horizontal ? 'overflowX' : 'overflowY'] = 'auto';
71
+ el.style[horizontal ? 'overflowY' : 'overflowX'] = 'hidden';
72
+ el.style.top = '0px';
73
+ el.style.left = '0px';
74
+ for (const key in style) {
75
+ el.style[key] = style[key];
76
+ }
77
+ fixed.style.position = 'sticky';
78
+ fixed.style.top = '0px';
79
+ fixed.style.left = '0px';
80
+ fixed.style.width = '100%';
81
+ fixed.style.height = '100%';
82
+ fixed.style.overflow = 'hidden';
83
+ el.appendChild(fixed);
84
+ fill.style.height = horizontal ? '100%' : `${pages * distance * 100}%`;
85
+ fill.style.width = horizontal ? `${pages * distance * 100}%` : '100%';
86
+ fill.style.pointerEvents = 'none';
87
+ el.appendChild(fill);
88
+ if (prepend)
89
+ parent.prepend(el);
90
+ else
91
+ parent.appendChild(el);
92
+ // Init scroll one pixel in to allow upward/leftward scroll
93
+ el[horizontal ? 'scrollLeft' : 'scrollTop'] = 1;
94
+ const oldTarget = (events.connected || domElement);
95
+ requestAnimationFrame(() => events.connect?.(el));
96
+ const oldCompute = events.compute?.bind(events);
97
+ this.store.snapshot.setEvents({
98
+ compute(event, store) {
99
+ const state = store.snapshot;
100
+ // we are using boundingClientRect because we could not rely on target.offsetTop as canvas could be positioned anywhere in dom
101
+ const { left, top } = parent.getBoundingClientRect();
102
+ const offsetX = event.clientX - left;
103
+ const offsetY = event.clientY - top;
104
+ state.pointer.set((offsetX / state.size.width) * 2 - 1, -(offsetY / state.size.height) * 2 + 1);
105
+ state.raycaster.setFromCamera(state.pointer, state.camera);
106
+ },
107
+ });
108
+ return () => {
109
+ parent.removeChild(el);
110
+ this.store.snapshot.setEvents({ compute: oldCompute });
111
+ events.connect?.(oldTarget);
112
+ };
113
+ });
114
+ autoEffect(() => {
115
+ const [el, events, size, infinite, invalidate, horizontal, enabled] = [
116
+ this.el,
117
+ this.events(),
118
+ this.size(),
119
+ this.infinite(),
120
+ this.invalidate(),
121
+ this.horizontal(),
122
+ this.enabled(),
123
+ ];
124
+ if (events.connected !== el)
125
+ return;
126
+ const containerLength = size[horizontal ? 'width' : 'height'];
127
+ const scrollLength = el[horizontal ? 'scrollWidth' : 'scrollHeight'];
128
+ const scrollThreshold = scrollLength - containerLength;
129
+ let current = 0;
130
+ let disableScroll = true;
131
+ let firstRun = true;
132
+ const onScroll = () => {
133
+ // Prevent first scroll because it is indirectly caused by the one pixel offset
134
+ if (!enabled || firstRun)
135
+ return;
136
+ invalidate();
137
+ current = el[horizontal ? 'scrollLeft' : 'scrollTop'];
138
+ this.scroll = current / scrollThreshold;
139
+ if (infinite) {
140
+ if (!disableScroll) {
141
+ if (current >= scrollThreshold) {
142
+ const damp = 1 - this.offset;
143
+ el[horizontal ? 'scrollLeft' : 'scrollTop'] = 1;
144
+ this.scroll = this.offset = -damp;
145
+ disableScroll = true;
146
+ }
147
+ else if (current <= 0) {
148
+ const damp = 1 + this.offset;
149
+ el[horizontal ? 'scrollLeft' : 'scrollTop'] = scrollLength;
150
+ this.scroll = this.offset = damp;
151
+ disableScroll = true;
152
+ }
153
+ }
154
+ if (disableScroll)
155
+ setTimeout(() => (disableScroll = false), 40);
156
+ }
157
+ untracked(() => {
158
+ this.progress.set(this.scroll);
159
+ });
160
+ };
161
+ el.addEventListener('scroll', onScroll, { passive: true });
162
+ requestAnimationFrame(() => (firstRun = false));
163
+ const onWheel = (e) => (el[horizontal ? 'scrollLeft' : 'scrollTop'] += e.deltaY / 2);
164
+ if (horizontal)
165
+ el.addEventListener('wheel', onWheel, { passive: true });
166
+ return () => {
167
+ el.removeEventListener('scroll', onScroll);
168
+ if (horizontal)
169
+ el.removeEventListener('wheel', onWheel);
170
+ };
171
+ });
172
+ });
173
+ let last = 0;
174
+ injectBeforeRender(({ delta }) => {
175
+ last = this.offset;
176
+ easing.damp(this, 'offset', this.scroll, this.damping(), delta, this.maxSpeed(), undefined, this.eps());
177
+ easing.damp(this, 'delta', Math.abs(last - this.offset), this.damping(), delta, this.maxSpeed(), undefined, this.eps());
178
+ if (this.delta > this.eps())
179
+ this.invalidate()();
180
+ });
181
+ }
182
+ get el() {
183
+ return this._el;
184
+ }
185
+ get fill() {
186
+ return this._fill;
187
+ }
188
+ get fixed() {
189
+ return this._fixed;
190
+ }
191
+ range(from, distance, margin = 0) {
192
+ const start = from - margin;
193
+ const end = start + distance + margin * 2;
194
+ return this.offset < start ? 0 : this.offset > end ? 1 : (this.offset - start) / (end - start);
195
+ }
196
+ curve(from, distance, margin = 0) {
197
+ return Math.sin(this.range(from, distance, margin) * Math.PI);
198
+ }
199
+ visible(from, distance, margin = 0) {
200
+ const start = from - margin;
201
+ const end = start + distance + margin * 2;
202
+ return this.offset >= start && this.offset <= end;
203
+ }
204
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsScrollControls, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
205
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.0", type: NgtsScrollControls, isStandalone: true, selector: "ngts-scroll-controls", inputs: { progress: { classPropertyName: "progress", publicName: "progress", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { progress: "progressChange" }, ngImport: i0, template: `
206
+ <ng-content />
207
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
208
+ }
209
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsScrollControls, decorators: [{
210
+ type: Component,
211
+ args: [{
212
+ selector: 'ngts-scroll-controls',
213
+ standalone: true,
214
+ template: `
215
+ <ng-content />
216
+ `,
217
+ changeDetection: ChangeDetectionStrategy.OnPush,
218
+ }]
219
+ }], ctorParameters: () => [] });
220
+ export class NgtsScrollCanvas {
221
+ constructor() {
222
+ this.host = inject(ElementRef);
223
+ this.scrollControls = inject(NgtsScrollControls);
224
+ this.store = injectStore();
225
+ this.viewport = this.store.select('viewport');
226
+ injectBeforeRender(() => {
227
+ const group = this.host.nativeElement;
228
+ group.position.x = this.scrollControls.horizontal()
229
+ ? -this.viewport().width * (this.scrollControls.pages() - 1) * this.scrollControls.offset
230
+ : 0;
231
+ group.position.y = this.scrollControls.horizontal()
232
+ ? 0
233
+ : this.viewport().height * (this.scrollControls.pages() - 1) * this.scrollControls.offset;
234
+ });
235
+ }
236
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsScrollCanvas, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
237
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.0", type: NgtsScrollCanvas, isStandalone: true, selector: "ngt-group[ngtsScrollCanvas]", ngImport: i0 }); }
238
+ }
239
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsScrollCanvas, decorators: [{
240
+ type: Directive,
241
+ args: [{ selector: 'ngt-group[ngtsScrollCanvas]', standalone: true }]
242
+ }], ctorParameters: () => [] });
243
+ export class NgtsScrollHtml extends NgtHTML {
244
+ constructor() {
245
+ super();
246
+ this.scrollControls = inject(NgtsScrollControls);
247
+ this.size = this.store.select('size');
248
+ injectBeforeRender(() => {
249
+ if (this.scrollControls.delta > this.scrollControls.eps()) {
250
+ this.host.nativeElement.style.transform = `translate3d(${this.scrollControls.horizontal()
251
+ ? -this.size().width * (this.scrollControls.pages() - 1) * this.scrollControls.offset
252
+ : 0}px,${this.scrollControls.horizontal() ? 0 : this.size().height * (this.scrollControls.pages() - 1) * -this.scrollControls.offset}px,0)`;
253
+ }
254
+ });
255
+ }
256
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsScrollHtml, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
257
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.0", type: NgtsScrollHtml, isStandalone: true, selector: "div[ngtsScrollHTML]", host: { styleAttribute: "position: absolute; top: 0; left: 0; will-change: transform;" }, providers: [provideHTMLDomElement([NgtsScrollControls], (scrollControls) => scrollControls.fixed)], usesInheritance: true, ngImport: i0 }); }
258
+ }
259
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsScrollHtml, decorators: [{
260
+ type: Directive,
261
+ args: [{
262
+ selector: 'div[ngtsScrollHTML]',
263
+ standalone: true,
264
+ host: { style: 'position: absolute; top: 0; left: 0; will-change: transform;' },
265
+ providers: [provideHTMLDomElement([NgtsScrollControls], (scrollControls) => scrollControls.fixed)],
266
+ }]
267
+ }], ctorParameters: () => [] });
268
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLWNvbnRyb2xzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL2NvbnRyb2xzL3NyYy9saWIvc2Nyb2xsLWNvbnRyb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ04sZUFBZSxFQUNmLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssRUFDTCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQTJCdkQsTUFBTSxjQUFjLEdBQThCO0lBQ2pELEdBQUcsRUFBRSxPQUFPO0lBQ1osVUFBVSxFQUFFLEtBQUs7SUFDakIsUUFBUSxFQUFFLEtBQUs7SUFDZixLQUFLLEVBQUUsQ0FBQztJQUNSLFFBQVEsRUFBRSxDQUFDO0lBQ1gsT0FBTyxFQUFFLElBQUk7SUFDYixRQUFRLEVBQUUsUUFBUTtJQUNsQixPQUFPLEVBQUUsS0FBSztJQUNkLE9BQU8sRUFBRSxJQUFJO0lBQ2IsS0FBSyxFQUFFLEVBQUU7Q0FDVCxDQUFDO0FBVUYsTUFBTSxPQUFPLGtCQUFrQjtJQWdDOUI7UUEvQkEsYUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixZQUFPLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFX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QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sT0FBTyxDQUFDO1lBQzFJLENBQUM7UUFDRixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7OEdBZlcsY0FBYztrR0FBZCxjQUFjLDRKQUZmLENBQUMscUJBQXFCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7OzJGQUV0RixjQUFjO2tCQU4xQixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFVBQVUsRUFBRSxJQUFJO29CQUNoQixJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsOERBQThELEVBQUU7b0JBQy9FLFNBQVMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNsRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG5cdGFmdGVyTmV4dFJlbmRlcixcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0RGlyZWN0aXZlLFxuXHRFbGVtZW50UmVmLFxuXHRpbmplY3QsXG5cdGlucHV0LFxuXHRtb2RlbCxcblx0dW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGluamVjdEJlZm9yZVJlbmRlciwgaW5qZWN0U3RvcmUsIE5ndEhUTUwsIHBpY2ssIHByb3ZpZGVIVE1MRG9tRWxlbWVudCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgZWFzaW5nIH0gZnJvbSAnbWFhdGgnO1xuaW1wb3J0IHsgaW5qZWN0QXV0b0VmZmVjdCB9IGZyb20gJ25neHRlbnNpb24vYXV0by1lZmZlY3QnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgR3JvdXAgfSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c1Njcm9sbENvbnRyb2xzT3B0aW9ucyB7XG5cdC8qKiBQcmVjaXNpb24sIGRlZmF1bHQgMC4wMDAwMSAqL1xuXHRlcHM6IG51bWJlcjtcblx0LyoqIEhvcml6b250YWwgc2Nyb2xsLCBkZWZhdWx0IGZhbHNlICh2ZXJ0aWNhbCkgKi9cblx0aG9yaXpvbnRhbDogYm9vbGVhbjtcblx0LyoqIEluZmluaXRlIHNjcm9sbCwgZGVmYXVsdCBmYWxzZSAoZXhwZXJpbWVudGFsISkgKi9cblx0aW5maW5pdGU6IGJvb2xlYW47XG5cdC8qKiBEZWZpbmVzIHRoZSBsZW5naHQgb2YgdGhlIHNjcm9sbCBhcmVhLCBlYWNoIHBhZ2UgaXMgaGVpZ2h0OjEwMCUsIGRlZmF1bHQgMSAqL1xuXHRwYWdlczogbnVtYmVyO1xuXHQvKiogQSBmYWN0b3IgdGhhdCBpbmNyZWFzZXMgc2Nyb2xsIGJhciB0cmF2ZWwsZGVmYXVsdDogMSAqL1xuXHRkaXN0YW5jZTogbnVtYmVyO1xuXHQvKiogRnJpY3Rpb24gaW4gc2Vjb25kcywgZGVmYXVsdDogMC4yNSAoMS80IHNlY29uZCkgKi9cblx0ZGFtcGluZzogbnVtYmVyO1xuXHQvKiogbWF4U3BlZWQgb3B0aW9uYWxseSBhbGxvd3MgeW91IHRvIGNsYW1wIHRoZSBtYXhpbXVtIHNwZWVkLiBJZiBkYW1waW5nIGlzIDAuMnMgYW5kIGxvb2tzIE9LXG5cdCAqICBnb2luZyBiZXR3ZWVuLCBzYXksIHBhZ2UgMSBhbmQgMiwgYnV0IG5vdCBmb3IgcGFnZXMgZmFyIGFwYXJ0IGFzIGl0J2xsIG1vdmUgdmVyeSByYXBpZCxcblx0ICogIHRoZW4gYSBtYXhTcGVlZCBvZiBlLmcuIDMgd2hpY2ggd2lsbCBjbGFtcCB0aGUgc3BlZWQgdG8gMyB1bml0cyBwZXIgc2Vjb25kLCBpdCBtYXkgbm93XG5cdCAqICB0YWtlIG11Y2ggbG9uZ2VyIHRoYW4gZGFtcGluZyB0byByZWFjaCB0aGUgdGFyZ2V0IGlmIGl0IGlzIGZhciBhd2F5LiBEZWZhdWx0OiBJbmZpbml0eSAqL1xuXHRtYXhTcGVlZDogbnVtYmVyO1xuXHQvKiogSWYgdHJ1ZSBhdHRhY2hlcyB0aGUgc2Nyb2xsIGNvbnRhaW5lciBiZWZvcmUgdGhlIGNhbnZhcyAqL1xuXHRwcmVwZW5kOiBib29sZWFuO1xuXHRlbmFibGVkOiBib29sZWFuO1xuXHRzdHlsZTogUGFydGlhbDxDU1NTdHlsZURlY2xhcmF0aW9uPjtcbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE5ndHNTY3JvbGxDb250cm9sc09wdGlvbnMgPSB7XG5cdGVwczogMC4wMDAwMSxcblx0aG9yaXpvbnRhbDogZmFsc2UsXG5cdGluZmluaXRlOiBmYWxzZSxcblx0cGFnZXM6IDEsXG5cdGRpc3RhbmNlOiAxLFxuXHRkYW1waW5nOiAwLjI1LFxuXHRtYXhTcGVlZDogSW5maW5pdHksXG5cdHByZXBlbmQ6IGZhbHNlLFxuXHRlbmFibGVkOiB0cnVlLFxuXHRzdHlsZToge30sXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLXNjcm9sbC1jb250cm9scycsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5nLWNvbnRlbnQgLz5cblx0YCxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNTY3JvbGxDb250cm9scyB7XG5cdHByb2dyZXNzID0gbW9kZWwoMCk7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblxuXHRwcml2YXRlIGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblx0cHJpdmF0ZSBzdG9yZSA9IGluamVjdFN0b3JlKCk7XG5cdHByaXZhdGUgZ2wgPSB0aGlzLnN0b3JlLnNlbGVjdCgnZ2wnKTtcblx0cHJpdmF0ZSBldmVudHMgPSB0aGlzLnN0b3JlLnNlbGVjdCgnZXZlbnRzJyk7XG5cdHByaXZhdGUgaW52YWxpZGF0ZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdpbnZhbGlkYXRlJyk7XG5cdHByaXZhdGUgc2l6ZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdzaXplJyk7XG5cblx0cHJpdmF0ZSBkb21FbGVtZW50ID0gcGljayh0aGlzLmdsLCAnZG9tRWxlbWVudCcpO1xuXHRwcml2YXRlIHRhcmdldCA9IHBpY2sodGhpcy5kb21FbGVtZW50LCAncGFyZW50Tm9kZScpO1xuXG5cdHByaXZhdGUgX2VsID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblx0cHJpdmF0ZSBfZmlsbCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdHByaXZhdGUgX2ZpeGVkID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuXHRwcml2YXRlIHN0eWxlID0gcGljayh0aGlzLm9wdGlvbnMsICdzdHlsZScpO1xuXHRwcml2YXRlIHByZXBlbmQgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3ByZXBlbmQnKTtcblx0cHJpdmF0ZSBlbmFibGVkID0gcGljayh0aGlzLm9wdGlvbnMsICdlbmFibGVkJyk7XG5cdHByaXZhdGUgaW5maW5pdGUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2luZmluaXRlJyk7XG5cdHByaXZhdGUgbWF4U3BlZWQgPSBwaWNrKHRoaXMub3B0aW9ucywgJ21heFNwZWVkJyk7XG5cdGVwcyA9IHBpY2sodGhpcy5vcHRpb25zLCAnZXBzJyk7XG5cdGhvcml6b250YWwgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2hvcml6b250YWwnKTtcblx0cGFnZXMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3BhZ2VzJyk7XG5cdGRpc3RhbmNlID0gcGljayh0aGlzLm9wdGlvbnMsICdkaXN0YW5jZScpO1xuXHRkYW1waW5nID0gcGljayh0aGlzLm9wdGlvbnMsICdkYW1waW5nJyk7XG5cdHNjcm9sbCA9IDA7XG5cdG9mZnNldCA9IDA7XG5cdGRlbHRhID0gMDtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRjb25zdCBhdXRvRWZmZWN0ID0gaW5qZWN0QXV0b0VmZmVjdCgpO1xuXG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdGF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCB0YXJnZXQgPSB0aGlzLnRhcmdldCgpO1xuXHRcdFx0XHRpZiAoIXRhcmdldCkgcmV0dXJuO1xuXG5cdFx0XHRcdGNvbnN0IHBhcmVudCA9IHRhcmdldCBhcyBIVE1MRWxlbWVudDtcblx0XHRcdFx0Y29uc3QgW3BhZ2VzLCBkaXN0YW5jZSwgaG9yaXpvbnRhbCwgZWwsIGZpbGwsIGZpeGVkLCBzdHlsZSwgcHJlcGVuZCwgZG9tRWxlbWVudCwgZXZlbnRzXSA9IFtcblx0XHRcdFx0XHR0aGlzLnBhZ2VzKCksXG5cdFx0XHRcdFx0dGhpcy5kaXN0YW5jZSgpLFxuXHRcdFx0XHRcdHRoaXMuaG9yaXpvbnRhbCgpLFxuXHRcdFx0XHRcdHRoaXMuZWwsXG5cdFx0XHRcdFx0dGhpcy5maWxsLFxuXHRcdFx0XHRcdHRoaXMuZml4ZWQsXG5cdFx0XHRcdFx0dW50cmFja2VkKHRoaXMuc3R5bGUpLFxuXHRcdFx0XHRcdHVudHJhY2tlZCh0aGlzLnByZXBlbmQpLFxuXHRcdFx0XHRcdHVudHJhY2tlZCh0aGlzLmRvbUVsZW1lbnQpLFxuXHRcdFx0XHRcdHVudHJhY2tlZCh0aGlzLmV2ZW50cyksXG5cdFx0XHRcdF07XG5cblx0XHRcdFx0ZWwuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuXHRcdFx0XHRlbC5zdHlsZS53aWR0aCA9ICcxMDAlJztcblx0XHRcdFx0ZWwuc3R5bGUuaGVpZ2h0ID0gJzEwMCUnO1xuXHRcdFx0XHRlbC5zdHlsZVtob3Jpem9udGFsID8gJ292ZXJmbG93WCcgOiAnb3ZlcmZsb3dZJ10gPSAnYXV0byc7XG5cdFx0XHRcdGVsLnN0eWxlW2hvcml6b250YWwgPyAnb3ZlcmZsb3dZJyA6ICdvdmVyZmxvd1gnXSA9ICdoaWRkZW4nO1xuXHRcdFx0XHRlbC5zdHlsZS50b3AgPSAnMHB4Jztcblx0XHRcdFx0ZWwuc3R5bGUubGVmdCA9ICcwcHgnO1xuXG5cdFx0XHRcdGZvciAoY29uc3Qga2V5IGluIHN0eWxlKSB7XG5cdFx0XHRcdFx0ZWwuc3R5bGVba2V5XSA9IChzdHlsZSBhcyBDU1NTdHlsZURlY2xhcmF0aW9uKVtrZXldO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zml4ZWQuc3R5bGUucG9zaXRpb24gPSAnc3RpY2t5Jztcblx0XHRcdFx0Zml4ZWQuc3R5bGUudG9wID0gJzBweCc7XG5cdFx0XHRcdGZpeGVkLnN0eWxlLmxlZnQgPSAnMHB4Jztcblx0XHRcdFx0Zml4ZWQuc3R5bGUud2lkdGggPSAnMTAwJSc7XG5cdFx0XHRcdGZpeGVkLnN0eWxlLmhlaWdodCA9ICcxMDAlJztcblx0XHRcdFx0Zml4ZWQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcblx0XHRcdFx0ZWwuYXBwZW5kQ2hpbGQoZml4ZWQpO1xuXG5cdFx0XHRcdGZpbGwuc3R5bGUuaGVpZ2h0ID0gaG9yaXpvbnRhbCA/ICcxMDAlJyA6IGAke3BhZ2VzICogZGlzdGFuY2UgKiAxMDB9JWA7XG5cdFx0XHRcdGZpbGwuc3R5bGUud2lkdGggPSBob3Jpem9udGFsID8gYCR7cGFnZXMgKiBkaXN0YW5jZSAqIDEwMH0lYCA6ICcxMDAlJztcblx0XHRcdFx0ZmlsbC5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuXHRcdFx0XHRlbC5hcHBlbmRDaGlsZChmaWxsKTtcblxuXHRcdFx0XHRpZiAocHJlcGVuZCkgcGFyZW50LnByZXBlbmQoZWwpO1xuXHRcdFx0XHRlbHNlIHBhcmVudC5hcHBlbmRDaGlsZChlbCk7XG5cblx0XHRcdFx0Ly8gSW5pdCBzY3JvbGwgb25lIHBpeGVsIGluIHRvIGFsbG93IHVwd2FyZC9sZWZ0d2FyZCBzY3JvbGxcblx0XHRcdFx0ZWxbaG9yaXpvbnRhbCA/ICdzY3JvbGxMZWZ0JyA6ICdzY3JvbGxUb3AnXSA9IDE7XG5cblx0XHRcdFx0Y29uc3Qgb2xkVGFyZ2V0ID0gKGV2ZW50cy5jb25uZWN0ZWQgfHwgZG9tRWxlbWVudCkgYXMgSFRNTEVsZW1lbnQ7XG5cdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBldmVudHMuY29ubmVjdD8uKGVsKSk7XG5cdFx0XHRcdGNvbnN0IG9sZENvbXB1dGUgPSBldmVudHMuY29tcHV0ZT8uYmluZChldmVudHMpO1xuXG5cdFx0XHRcdHRoaXMuc3RvcmUuc25hcHNob3Quc2V0RXZlbnRzKHtcblx0XHRcdFx0XHRjb21wdXRlKGV2ZW50LCBzdG9yZSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc3RhdGUgPSBzdG9yZS5zbmFwc2hvdDtcblx0XHRcdFx0XHRcdC8vIHdlIGFyZSB1c2luZyBib3VuZGluZ0NsaWVudFJlY3QgYmVjYXVzZSB3ZSBjb3VsZCBub3QgcmVseSBvbiB0YXJnZXQub2Zmc2V0VG9wIGFzIGNhbnZhcyBjb3VsZCBiZSBwb3NpdGlvbmVkIGFueXdoZXJlIGluIGRvbVxuXHRcdFx0XHRcdFx0Y29uc3QgeyBsZWZ0LCB0b3AgfSA9IHBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdFx0XHRcdGNvbnN0IG9mZnNldFggPSBldmVudC5jbGllbnRYIC0gbGVmdDtcblx0XHRcdFx0XHRcdGNvbnN0IG9mZnNldFkgPSBldmVudC5jbGllbnRZIC0gdG9wO1xuXHRcdFx0XHRcdFx0c3RhdGUucG9pbnRlci5zZXQoKG9mZnNldFggLyBzdGF0ZS5zaXplLndpZHRoKSAqIDIgLSAxLCAtKG9mZnNldFkgLyBzdGF0ZS5zaXplLmhlaWdodCkgKiAyICsgMSk7XG5cdFx0XHRcdFx0XHRzdGF0ZS5yYXljYXN0ZXIuc2V0RnJvbUNhbWVyYShzdGF0ZS5wb2ludGVyLCBzdGF0ZS5jYW1lcmEpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdFx0cGFyZW50LnJlbW92ZUNoaWxkKGVsKTtcblx0XHRcdFx0XHR0aGlzLnN0b3JlLnNuYXBzaG90LnNldEV2ZW50cyh7IGNvbXB1dGU6IG9sZENvbXB1dGUgfSk7XG5cdFx0XHRcdFx0ZXZlbnRzLmNvbm5lY3Q/LihvbGRUYXJnZXQpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cblx0XHRcdGF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBbZWwsIGV2ZW50cywgc2l6ZSwgaW5maW5pdGUsIGludmFsaWRhdGUsIGhvcml6b250YWwsIGVuYWJsZWRdID0gW1xuXHRcdFx0XHRcdHRoaXMuZWwsXG5cdFx0XHRcdFx0dGhpcy5ldmVudHMoKSxcblx0XHRcdFx0XHR0aGlzLnNpemUoKSxcblx0XHRcdFx0XHR0aGlzLmluZmluaXRlKCksXG5cdFx0XHRcdFx0dGhpcy5pbnZhbGlkYXRlKCksXG5cdFx0XHRcdFx0dGhpcy5ob3Jpem9udGFsKCksXG5cdFx0XHRcdFx0dGhpcy5lbmFibGVkKCksXG5cdFx0XHRcdF07XG5cblx0XHRcdFx0aWYgKGV2ZW50cy5jb25uZWN0ZWQgIT09IGVsKSByZXR1cm47XG5cblx0XHRcdFx0Y29uc3QgY29udGFpbmVyTGVuZ3RoID0gc2l6ZVtob3Jpem9udGFsID8gJ3dpZHRoJyA6ICdoZWlnaHQnXTtcblx0XHRcdFx0Y29uc3Qgc2Nyb2xsTGVuZ3RoID0gZWxbaG9yaXpvbnRhbCA/ICdzY3JvbGxXaWR0aCcgOiAnc2Nyb2xsSGVpZ2h0J107XG5cdFx0XHRcdGNvbnN0IHNjcm9sbFRocmVzaG9sZCA9IHNjcm9sbExlbmd0aCAtIGNvbnRhaW5lckxlbmd0aDtcblxuXHRcdFx0XHRsZXQgY3VycmVudCA9IDA7XG5cdFx0XHRcdGxldCBkaXNhYmxlU2Nyb2xsID0gdHJ1ZTtcblx0XHRcdFx0bGV0IGZpcnN0UnVuID0gdHJ1ZTtcblxuXHRcdFx0XHRjb25zdCBvblNjcm9sbCA9ICgpID0+IHtcblx0XHRcdFx0XHQvLyBQcmV2ZW50IGZpcnN0IHNjcm9sbCBiZWNhdXNlIGl0IGlzIGluZGlyZWN0bHkgY2F1c2VkIGJ5IHRoZSBvbmUgcGl4ZWwgb2Zmc2V0XG5cdFx0XHRcdFx0aWYgKCFlbmFibGVkIHx8IGZpcnN0UnVuKSByZXR1cm47XG5cdFx0XHRcdFx0aW52YWxpZGF0ZSgpO1xuXHRcdFx0XHRcdGN1cnJlbnQgPSBlbFtob3Jpem9udGFsID8gJ3Njcm9sbExlZnQnIDogJ3Njcm9sbFRvcCddO1xuXHRcdFx0XHRcdHRoaXMuc2Nyb2xsID0gY3VycmVudCAvIHNjcm9sbFRocmVzaG9sZDtcblxuXHRcdFx0XHRcdGlmIChpbmZpbml0ZSkge1xuXHRcdFx0XHRcdFx0aWYgKCFkaXNhYmxlU2Nyb2xsKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChjdXJyZW50ID49IHNjcm9sbFRocmVzaG9sZCkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGRhbXAgPSAxIC0gdGhpcy5vZmZzZXQ7XG5cdFx0XHRcdFx0XHRcdFx0ZWxbaG9yaXpvbnRhbCA/ICdzY3JvbGxMZWZ0JyA6ICdzY3JvbGxUb3AnXSA9IDE7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zY3JvbGwgPSB0aGlzLm9mZnNldCA9IC1kYW1wO1xuXHRcdFx0XHRcdFx0XHRcdGRpc2FibGVTY3JvbGwgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGN1cnJlbnQgPD0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGRhbXAgPSAxICsgdGhpcy5vZmZzZXQ7XG5cdFx0XHRcdFx0XHRcdFx0ZWxbaG9yaXpvbnRhbCA/ICdzY3JvbGxMZWZ0JyA6ICdzY3JvbGxUb3AnXSA9IHNjcm9sbExlbmd0aDtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNjcm9sbCA9IHRoaXMub2Zmc2V0ID0gZGFtcDtcblx0XHRcdFx0XHRcdFx0XHRkaXNhYmxlU2Nyb2xsID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGRpc2FibGVTY3JvbGwpIHNldFRpbWVvdXQoKCkgPT4gKGRpc2FibGVTY3JvbGwgPSBmYWxzZSksIDQwKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR1bnRyYWNrZWQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5wcm9ncmVzcy5zZXQodGhpcy5zY3JvbGwpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIG9uU2Nyb2xsLCB7IHBhc3NpdmU6IHRydWUgfSk7XG5cdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiAoZmlyc3RSdW4gPSBmYWxzZSkpO1xuXG5cdFx0XHRcdGNvbnN0IG9uV2hlZWwgPSAoZTogV2hlZWxFdmVudCkgPT4gKGVsW2hvcml6b250YWwgPyAnc2Nyb2xsTGVmdCcgOiAnc2Nyb2xsVG9wJ10gKz0gZS5kZWx0YVkgLyAyKTtcblx0XHRcdFx0aWYgKGhvcml6b250YWwpIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgb25XaGVlbCwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuXG5cdFx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdFx0ZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgb25TY3JvbGwpO1xuXHRcdFx0XHRcdGlmIChob3Jpem9udGFsKSBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCd3aGVlbCcsIG9uV2hlZWwpO1xuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRsZXQgbGFzdCA9IDA7XG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKCh7IGRlbHRhIH0pID0+IHtcblx0XHRcdGxhc3QgPSB0aGlzLm9mZnNldDtcblx0XHRcdGVhc2luZy5kYW1wKHRoaXMsICdvZmZzZXQnLCB0aGlzLnNjcm9sbCwgdGhpcy5kYW1waW5nKCksIGRlbHRhLCB0aGlzLm1heFNwZWVkKCksIHVuZGVmaW5lZCwgdGhpcy5lcHMoKSk7XG5cdFx0XHRlYXNpbmcuZGFtcChcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0J2RlbHRhJyxcblx0XHRcdFx0TWF0aC5hYnMobGFzdCAtIHRoaXMub2Zmc2V0KSxcblx0XHRcdFx0dGhpcy5kYW1waW5nKCksXG5cdFx0XHRcdGRlbHRhLFxuXHRcdFx0XHR0aGlzLm1heFNwZWVkKCksXG5cdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0dGhpcy5lcHMoKSxcblx0XHRcdCk7XG5cdFx0XHRpZiAodGhpcy5kZWx0YSA+IHRoaXMuZXBzKCkpIHRoaXMuaW52YWxpZGF0ZSgpKCk7XG5cdFx0fSk7XG5cdH1cblxuXHRnZXQgZWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2VsO1xuXHR9XG5cblx0Z2V0IGZpbGwoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2ZpbGw7XG5cdH1cblxuXHRnZXQgZml4ZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2ZpeGVkO1xuXHR9XG5cblx0cmFuZ2UoZnJvbTogbnVtYmVyLCBkaXN0YW5jZTogbnVtYmVyLCBtYXJnaW4gPSAwKTogbnVtYmVyIHtcblx0XHRjb25zdCBzdGFydCA9IGZyb20gLSBtYXJnaW47XG5cdFx0Y29uc3QgZW5kID0gc3RhcnQgKyBkaXN0YW5jZSArIG1hcmdpbiAqIDI7XG5cdFx0cmV0dXJuIHRoaXMub2Zmc2V0IDwgc3RhcnQgPyAwIDogdGhpcy5vZmZzZXQgPiBlbmQgPyAxIDogKHRoaXMub2Zmc2V0IC0gc3RhcnQpIC8gKGVuZCAtIHN0YXJ0KTtcblx0fVxuXG5cdGN1cnZlKGZyb206IG51bWJlciwgZGlzdGFuY2U6IG51bWJlciwgbWFyZ2luID0gMCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIE1hdGguc2luKHRoaXMucmFuZ2UoZnJvbSwgZGlzdGFuY2UsIG1hcmdpbikgKiBNYXRoLlBJKTtcblx0fVxuXG5cdHZpc2libGUoZnJvbTogbnVtYmVyLCBkaXN0YW5jZTogbnVtYmVyLCBtYXJnaW4gPSAwKTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgc3RhcnQgPSBmcm9tIC0gbWFyZ2luO1xuXHRcdGNvbnN0IGVuZCA9IHN0YXJ0ICsgZGlzdGFuY2UgKyBtYXJnaW4gKiAyO1xuXHRcdHJldHVybiB0aGlzLm9mZnNldCA+PSBzdGFydCAmJiB0aGlzLm9mZnNldCA8PSBlbmQ7XG5cdH1cbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnbmd0LWdyb3VwW25ndHNTY3JvbGxDYW52YXNdJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5ndHNTY3JvbGxDYW52YXMge1xuXHRwcml2YXRlIGhvc3QgPSBpbmplY3Q8RWxlbWVudFJlZjxHcm91cD4+KEVsZW1lbnRSZWYpO1xuXHRwcml2YXRlIHNjcm9sbENvbnRyb2xzID0gaW5qZWN0KE5ndHNTY3JvbGxDb250cm9scyk7XG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXHRwcml2YXRlIHZpZXdwb3J0ID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3ZpZXdwb3J0Jyk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKCgpID0+IHtcblx0XHRcdGNvbnN0IGdyb3VwID0gdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQ7XG5cblx0XHRcdGdyb3VwLnBvc2l0aW9uLnggPSB0aGlzLnNjcm9sbENvbnRyb2xzLmhvcml6b250YWwoKVxuXHRcdFx0XHQ/IC10aGlzLnZpZXdwb3J0KCkud2lkdGggKiAodGhpcy5zY3JvbGxDb250cm9scy5wYWdlcygpIC0gMSkgKiB0aGlzLnNjcm9sbENvbnRyb2xzLm9mZnNldFxuXHRcdFx0XHQ6IDA7XG5cdFx0XHRncm91cC5wb3NpdGlvbi55ID0gdGhpcy5zY3JvbGxDb250cm9scy5ob3Jpem9udGFsKClcblx0XHRcdFx0PyAwXG5cdFx0XHRcdDogdGhpcy52aWV3cG9ydCgpLmhlaWdodCAqICh0aGlzLnNjcm9sbENvbnRyb2xzLnBhZ2VzKCkgLSAxKSAqIHRoaXMuc2Nyb2xsQ29udHJvbHMub2Zmc2V0O1xuXHRcdH0pO1xuXHR9XG59XG5cbkBEaXJlY3RpdmUoe1xuXHRzZWxlY3RvcjogJ2RpdltuZ3RzU2Nyb2xsSFRNTF0nLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRob3N0OiB7IHN0eWxlOiAncG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGxlZnQ6IDA7IHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07JyB9LFxuXHRwcm92aWRlcnM6IFtwcm92aWRlSFRNTERvbUVsZW1lbnQoW05ndHNTY3JvbGxDb250cm9sc10sIChzY3JvbGxDb250cm9scykgPT4gc2Nyb2xsQ29udHJvbHMuZml4ZWQpXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c1Njcm9sbEh0bWwgZXh0ZW5kcyBOZ3RIVE1MIHtcblx0cHJpdmF0ZSBzY3JvbGxDb250cm9scyA9IGluamVjdChOZ3RzU2Nyb2xsQ29udHJvbHMpO1xuXHRwcml2YXRlIHNpemUgPSB0aGlzLnN0b3JlLnNlbGVjdCgnc2l6ZScpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKCgpID0+IHtcblx0XHRcdGlmICh0aGlzLnNjcm9sbENvbnRyb2xzLmRlbHRhID4gdGhpcy5zY3JvbGxDb250cm9scy5lcHMoKSkge1xuXHRcdFx0XHR0aGlzLmhvc3QubmF0aXZlRWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoJHtcblx0XHRcdFx0XHR0aGlzLnNjcm9sbENvbnRyb2xzLmhvcml6b250YWwoKVxuXHRcdFx0XHRcdFx0PyAtdGhpcy5zaXplKCkud2lkdGggKiAodGhpcy5zY3JvbGxDb250cm9scy5wYWdlcygpIC0gMSkgKiB0aGlzLnNjcm9sbENvbnRyb2xzLm9mZnNldFxuXHRcdFx0XHRcdFx0OiAwXG5cdFx0XHRcdH1weCwke3RoaXMuc2Nyb2xsQ29udHJvbHMuaG9yaXpvbnRhbCgpID8gMCA6IHRoaXMuc2l6ZSgpLmhlaWdodCAqICh0aGlzLnNjcm9sbENvbnRyb2xzLnBhZ2VzKCkgLSAxKSAqIC10aGlzLnNjcm9sbENvbnRyb2xzLm9mZnNldH1weCwwKWA7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
@@ -1,5 +1,6 @@
1
- export * from './gltf-loader/gltf-loader';
2
- export * from './loader/loader';
3
- export * from './progress/progress';
4
- export * from './texture-loader/texture-loader';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbG9hZGVycy9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxpQ0FBaUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZ2x0Zi1sb2FkZXIvZ2x0Zi1sb2FkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9sb2FkZXIvbG9hZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvZ3Jlc3MvcHJvZ3Jlc3MnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXh0dXJlLWxvYWRlci90ZXh0dXJlLWxvYWRlcic7XG4iXX0=
1
+ export * from './lib/font-loader';
2
+ export * from './lib/gltf-loader';
3
+ export * from './lib/loader';
4
+ export * from './lib/progress';
5
+ export * from './lib/texture-loader';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbG9hZGVycy9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2ZvbnQtbG9hZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2dsdGYtbG9hZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2xvYWRlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcm9ncmVzcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90ZXh0dXJlLWxvYWRlcic7XG4iXX0=
@@ -0,0 +1,49 @@
1
+ import { effect, signal, untracked } from '@angular/core';
2
+ import { assertInjector } from 'ngxtension/assert-injector';
3
+ import { FontLoader } from 'three-stdlib';
4
+ let fontLoader = null;
5
+ async function loadFontData(font) {
6
+ return typeof font === 'string' ? await (await fetch(font)).json() : font;
7
+ }
8
+ function parseFontData(fontData) {
9
+ if (!fontLoader) {
10
+ fontLoader = new FontLoader();
11
+ }
12
+ return fontLoader.parse(fontData);
13
+ }
14
+ const cache = new Map();
15
+ export function injectFont(input, { injector } = {}) {
16
+ return assertInjector(injectFont, injector, () => {
17
+ const font = signal(null);
18
+ effect(() => {
19
+ const fontInput = input();
20
+ if (cache.has(fontInput)) {
21
+ untracked(() => {
22
+ font.set(cache.get(fontInput));
23
+ });
24
+ return;
25
+ }
26
+ loadFontData(input()).then((data) => {
27
+ const parsed = parseFontData(data);
28
+ cache.set(fontInput, parsed);
29
+ font.set(parsed);
30
+ });
31
+ });
32
+ return font.asReadonly();
33
+ });
34
+ }
35
+ injectFont.preload = (input) => {
36
+ loadFontData(input()).then((data) => {
37
+ const parsed = parseFontData(data);
38
+ cache.set(input(), parsed);
39
+ });
40
+ };
41
+ injectFont.clear = (input) => {
42
+ if (input) {
43
+ cache.delete(input());
44
+ }
45
+ else {
46
+ cache.clear();
47
+ }
48
+ };
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9udC1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbG9hZGVycy9zcmMvbGliL2ZvbnQtbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQVksTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFRLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQXVCaEQsSUFBSSxVQUFVLEdBQXNCLElBQUksQ0FBQztBQUV6QyxLQUFLLFVBQVUsWUFBWSxDQUFDLElBQW1CO0lBQzlDLE9BQU8sT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzNFLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxRQUFrQjtJQUN4QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDakIsVUFBVSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7QUFFN0MsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUEwQixFQUFFLEVBQUUsUUFBUSxLQUE4QixFQUFFO0lBQ2hHLE9BQU8sY0FBYyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ2hELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBYyxJQUFJLENBQUMsQ0FBQztRQUV2QyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsTUFBTSxTQUFTLEdBQUcsS0FBSyxFQUFFLENBQUM7WUFFMUIsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBUyxDQUFDLENBQUM7Z0JBQ3hDLENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU87WUFDUixDQUFDO1lBRUQsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ25DLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbkMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzFCLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELFVBQVUsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUEwQixFQUFFLEVBQUU7SUFDbkQsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDbkMsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUM7QUFDRixVQUFVLENBQUMsS0FBSyxHQUFHLENBQUMsS0FBMkIsRUFBRSxFQUFFO0lBQ2xELElBQUksS0FBSyxFQUFFLENBQUM7UUFDWCxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDdkIsQ0FBQztTQUFNLENBQUM7UUFDUCxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0FBQ0YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZWZmZWN0LCBJbmplY3Rvciwgc2lnbmFsLCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0IHsgRm9udCwgRm9udExvYWRlciB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5cbmV4cG9ydCB0eXBlIEdseXBoID0ge1xuXHRfY2FjaGVkT3V0bGluZTogc3RyaW5nW107XG5cdGhhOiBudW1iZXI7XG5cdG86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEZvbnREYXRhID0ge1xuXHRib3VuZGluZ0JveDoge1xuXHRcdHlNYXg6IG51bWJlcjtcblx0XHR5TWluOiBudW1iZXI7XG5cdH07XG5cdGZhbWlseU5hbWU6IHN0cmluZztcblx0Z2x5cGhzOiB7XG5cdFx0W2s6IHN0cmluZ106IEdseXBoO1xuXHR9O1xuXHRyZXNvbHV0aW9uOiBudW1iZXI7XG5cdHVuZGVybGluZVRoaWNrbmVzczogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgTmd0c0ZvbnRJbnB1dCA9IHN0cmluZyB8IEZvbnREYXRhO1xuXG5sZXQgZm9udExvYWRlcjogRm9udExvYWRlciB8IG51bGwgPSBudWxsO1xuXG5hc3luYyBmdW5jdGlvbiBsb2FkRm9udERhdGEoZm9udDogTmd0c0ZvbnRJbnB1dCk6IFByb21pc2U8Rm9udERhdGE+IHtcblx0cmV0dXJuIHR5cGVvZiBmb250ID09PSAnc3RyaW5nJyA/IGF3YWl0IChhd2FpdCBmZXRjaChmb250KSkuanNvbigpIDogZm9udDtcbn1cblxuZnVuY3Rpb24gcGFyc2VGb250RGF0YShmb250RGF0YTogRm9udERhdGEpIHtcblx0aWYgKCFmb250TG9hZGVyKSB7XG5cdFx0Zm9udExvYWRlciA9IG5ldyBGb250TG9hZGVyKCk7XG5cdH1cblx0cmV0dXJuIGZvbnRMb2FkZXIucGFyc2UoZm9udERhdGEpO1xufVxuXG5jb25zdCBjYWNoZSA9IG5ldyBNYXA8Tmd0c0ZvbnRJbnB1dCwgRm9udD4oKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEZvbnQoaW5wdXQ6ICgpID0+IE5ndHNGb250SW5wdXQsIHsgaW5qZWN0b3IgfTogeyBpbmplY3Rvcj86IEluamVjdG9yIH0gPSB7fSkge1xuXHRyZXR1cm4gYXNzZXJ0SW5qZWN0b3IoaW5qZWN0Rm9udCwgaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCBmb250ID0gc2lnbmFsPEZvbnQgfCBudWxsPihudWxsKTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBmb250SW5wdXQgPSBpbnB1dCgpO1xuXG5cdFx0XHRpZiAoY2FjaGUuaGFzKGZvbnRJbnB1dCkpIHtcblx0XHRcdFx0dW50cmFja2VkKCgpID0+IHtcblx0XHRcdFx0XHRmb250LnNldChjYWNoZS5nZXQoZm9udElucHV0KSBhcyBGb250KTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0bG9hZEZvbnREYXRhKGlucHV0KCkpLnRoZW4oKGRhdGEpID0+IHtcblx0XHRcdFx0Y29uc3QgcGFyc2VkID0gcGFyc2VGb250RGF0YShkYXRhKTtcblx0XHRcdFx0Y2FjaGUuc2V0KGZvbnRJbnB1dCwgcGFyc2VkKTtcblx0XHRcdFx0Zm9udC5zZXQocGFyc2VkKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGZvbnQuYXNSZWFkb25seSgpO1xuXHR9KTtcbn1cblxuaW5qZWN0Rm9udC5wcmVsb2FkID0gKGlucHV0OiAoKSA9PiBOZ3RzRm9udElucHV0KSA9PiB7XG5cdGxvYWRGb250RGF0YShpbnB1dCgpKS50aGVuKChkYXRhKSA9PiB7XG5cdFx0Y29uc3QgcGFyc2VkID0gcGFyc2VGb250RGF0YShkYXRhKTtcblx0XHRjYWNoZS5zZXQoaW5wdXQoKSwgcGFyc2VkKTtcblx0fSk7XG59O1xuaW5qZWN0Rm9udC5jbGVhciA9IChpbnB1dD86ICgpID0+IE5ndHNGb250SW5wdXQpID0+IHtcblx0aWYgKGlucHV0KSB7XG5cdFx0Y2FjaGUuZGVsZXRlKGlucHV0KCkpO1xuXHR9IGVsc2Uge1xuXHRcdGNhY2hlLmNsZWFyKCk7XG5cdH1cbn07XG4iXX0=
@@ -0,0 +1,51 @@
1
+ import { computed } from '@angular/core';
2
+ import { injectLoader } from 'angular-three';
3
+ import { assertInjector } from 'ngxtension/assert-injector';
4
+ import { DRACOLoader, GLTFLoader, MeshoptDecoder } from 'three-stdlib';
5
+ let dracoLoader = null;
6
+ let decoderPath = 'https://www.gstatic.com/draco/versioned/decoders/1.5.5/';
7
+ function _extensions(useDraco, useMeshOpt, extensions) {
8
+ return (loader) => {
9
+ if (extensions) {
10
+ extensions(loader);
11
+ }
12
+ if (useDraco) {
13
+ if (!dracoLoader) {
14
+ dracoLoader = new DRACOLoader();
15
+ }
16
+ dracoLoader.setDecoderPath(typeof useDraco === 'string' ? useDraco : decoderPath);
17
+ loader.setDRACOLoader(dracoLoader);
18
+ }
19
+ if (useMeshOpt) {
20
+ loader.setMeshoptDecoder(typeof MeshoptDecoder === 'function' ? MeshoptDecoder() : MeshoptDecoder);
21
+ }
22
+ };
23
+ }
24
+ function _injectGLTF(path, { useDraco = true, useMeshOpt = true, injector, extensions, onLoad, } = {}) {
25
+ return assertInjector(_injectGLTF, injector, () => {
26
+ const result = injectLoader(() => GLTFLoader, path, {
27
+ extensions: _extensions(useDraco, useMeshOpt, extensions),
28
+ // @ts-expect-error - we know the type of the data
29
+ onLoad,
30
+ });
31
+ Object.defineProperty(result, 'scene', {
32
+ value: computed(() => {
33
+ const gltf = result();
34
+ if (!gltf)
35
+ return null;
36
+ return gltf.scene;
37
+ }),
38
+ });
39
+ return result;
40
+ });
41
+ }
42
+ _injectGLTF.preload = (path, { useDraco = true, useMeshOpt = true, extensions, onLoad, } = {}) => {
43
+ injectLoader.preload(() => GLTFLoader, path, _extensions(useDraco, useMeshOpt, extensions),
44
+ // @ts-expect-error - we know the type of the data
45
+ onLoad);
46
+ };
47
+ _injectGLTF.setDecoderPath = (path) => {
48
+ decoderPath = path;
49
+ };
50
+ export const injectGLTF = _injectGLTF;
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2x0Zi1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbG9hZGVycy9zcmMvbGliL2dsdGYtbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQWtDLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsV0FBVyxFQUFRLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFN0UsSUFBSSxXQUFXLEdBQXVCLElBQUksQ0FBQztBQUMzQyxJQUFJLFdBQVcsR0FBRyx5REFBeUQsQ0FBQztBQUU1RSxTQUFTLFdBQVcsQ0FBQyxRQUEwQixFQUFFLFVBQW1CLEVBQUUsVUFBeUM7SUFDOUcsT0FBTyxDQUFDLE1BQWMsRUFBRSxFQUFFO1FBQ3pCLElBQUksVUFBVSxFQUFFLENBQUM7WUFDaEIsVUFBVSxDQUFDLE1BQW9CLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBRUQsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbEIsV0FBVyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7WUFDakMsQ0FBQztZQUVELFdBQVcsQ0FBQyxjQUFjLENBQUMsT0FBTyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2pGLE1BQXFCLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFDRCxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsTUFBcUIsQ0FBQyxpQkFBaUIsQ0FDdkMsT0FBTyxjQUFjLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUN4RSxDQUFDO1FBQ0gsQ0FBQztJQUNGLENBQUMsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FDbkIsSUFBZ0IsRUFDaEIsRUFDQyxRQUFRLEdBQUcsSUFBSSxFQUNmLFVBQVUsR0FBRyxJQUFJLEVBQ2pCLFFBQVEsRUFDUixVQUFVLEVBQ1YsTUFBTSxNQU9ILEVBQUU7SUFFTixPQUFPLGNBQWMsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtRQUNqRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRTtZQUNuRCxVQUFVLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDO1lBQ3pELGtEQUFrRDtZQUNsRCxNQUFNO1NBQ04sQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFO1lBQ3RDLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFO2dCQUNwQixNQUFNLElBQUksR0FBRyxNQUFNLEVBQXFCLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxJQUFJO29CQUFFLE9BQU8sSUFBSSxDQUFDO2dCQUN2QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDbkIsQ0FBQyxDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLENBQUM7SUFDZixDQUFDLENBQXlHLENBQUM7QUFDNUcsQ0FBQztBQUVELFdBQVcsQ0FBQyxPQUFPLEdBQUcsQ0FDckIsSUFBZ0IsRUFDaEIsRUFDQyxRQUFRLEdBQUcsSUFBSSxFQUNmLFVBQVUsR0FBRyxJQUFJLEVBQ2pCLFVBQVUsRUFDVixNQUFNLE1BTUgsRUFBRSxFQUNMLEVBQUU7SUFDSCxZQUFZLENBQUMsT0FBTyxDQUNuQixHQUFHLEVBQUUsQ0FBQyxVQUFVLEVBQ2hCLElBQUksRUFDSixXQUFXLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQVE7SUFDcEQsa0RBQWtEO0lBQ2xELE1BQU0sQ0FDTixDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsV0FBVyxDQUFDLGNBQWMsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFO0lBQzdDLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDcEIsQ0FBQyxDQUFDO0FBR0YsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFtQixXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgSW5qZWN0b3IsIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0TG9hZGVyLCBOZ3RMb2FkZXJSZXN1bHRzLCBOZ3RPYmplY3RNYXAgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0IHsgTG9hZGVyIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgRFJBQ09Mb2FkZXIsIEdMVEYsIEdMVEZMb2FkZXIsIE1lc2hvcHREZWNvZGVyIH0gZnJvbSAndGhyZWUtc3RkbGliJztcblxubGV0IGRyYWNvTG9hZGVyOiBEUkFDT0xvYWRlciB8IG51bGwgPSBudWxsO1xubGV0IGRlY29kZXJQYXRoID0gJ2h0dHBzOi8vd3d3LmdzdGF0aWMuY29tL2RyYWNvL3ZlcnNpb25lZC9kZWNvZGVycy8xLjUuNS8nO1xuXG5mdW5jdGlvbiBfZXh0ZW5zaW9ucyh1c2VEcmFjbzogYm9vbGVhbiB8IHN0cmluZywgdXNlTWVzaE9wdDogYm9vbGVhbiwgZXh0ZW5zaW9ucz86IChsb2FkZXI6IEdMVEZMb2FkZXIpID0+IHZvaWQpIHtcblx0cmV0dXJuIChsb2FkZXI6IExvYWRlcikgPT4ge1xuXHRcdGlmIChleHRlbnNpb25zKSB7XG5cdFx0XHRleHRlbnNpb25zKGxvYWRlciBhcyBHTFRGTG9hZGVyKTtcblx0XHR9XG5cblx0XHRpZiAodXNlRHJhY28pIHtcblx0XHRcdGlmICghZHJhY29Mb2FkZXIpIHtcblx0XHRcdFx0ZHJhY29Mb2FkZXIgPSBuZXcgRFJBQ09Mb2FkZXIoKTtcblx0XHRcdH1cblxuXHRcdFx0ZHJhY29Mb2FkZXIuc2V0RGVjb2RlclBhdGgodHlwZW9mIHVzZURyYWNvID09PSAnc3RyaW5nJyA/IHVzZURyYWNvIDogZGVjb2RlclBhdGgpO1xuXHRcdFx0KGxvYWRlciBhcyBHTFRGTG9hZGVyKS5zZXREUkFDT0xvYWRlcihkcmFjb0xvYWRlcik7XG5cdFx0fVxuXHRcdGlmICh1c2VNZXNoT3B0KSB7XG5cdFx0XHQobG9hZGVyIGFzIEdMVEZMb2FkZXIpLnNldE1lc2hvcHREZWNvZGVyKFxuXHRcdFx0XHR0eXBlb2YgTWVzaG9wdERlY29kZXIgPT09ICdmdW5jdGlvbicgPyBNZXNob3B0RGVjb2RlcigpIDogTWVzaG9wdERlY29kZXIsXG5cdFx0XHQpO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gX2luamVjdEdMVEY8VFVybCBleHRlbmRzIHN0cmluZyB8IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4oXG5cdHBhdGg6ICgpID0+IFRVcmwsXG5cdHtcblx0XHR1c2VEcmFjbyA9IHRydWUsXG5cdFx0dXNlTWVzaE9wdCA9IHRydWUsXG5cdFx0aW5qZWN0b3IsXG5cdFx0ZXh0ZW5zaW9ucyxcblx0XHRvbkxvYWQsXG5cdH06IHtcblx0XHR1c2VEcmFjbz86IGJvb2xlYW4gfCBzdHJpbmc7XG5cdFx0dXNlTWVzaE9wdD86IGJvb2xlYW47XG5cdFx0aW5qZWN0b3I/OiBJbmplY3Rvcjtcblx0XHRleHRlbnNpb25zPzogKGxvYWRlcjogR0xURkxvYWRlcikgPT4gdm9pZDtcblx0XHRvbkxvYWQ/OiAoZGF0YTogTmd0TG9hZGVyUmVzdWx0czxUVXJsLCBHTFRGICYgTmd0T2JqZWN0TWFwPikgPT4gdm9pZDtcblx0fSA9IHt9LFxuKTogU2lnbmFsPE5ndExvYWRlclJlc3VsdHM8VFVybCwgR0xURiAmIE5ndE9iamVjdE1hcD4gfCBudWxsPiAmIHsgc2NlbmU6IFNpZ25hbDxHTFRGWydzY2VuZSddIHwgbnVsbD4gfSB7XG5cdHJldHVybiBhc3NlcnRJbmplY3RvcihfaW5qZWN0R0xURiwgaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCByZXN1bHQgPSBpbmplY3RMb2FkZXIoKCkgPT4gR0xURkxvYWRlciwgcGF0aCwge1xuXHRcdFx0ZXh0ZW5zaW9uczogX2V4dGVuc2lvbnModXNlRHJhY28sIHVzZU1lc2hPcHQsIGV4dGVuc2lvbnMpLFxuXHRcdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciAtIHdlIGtub3cgdGhlIHR5cGUgb2YgdGhlIGRhdGFcblx0XHRcdG9uTG9hZCxcblx0XHR9KTtcblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXN1bHQsICdzY2VuZScsIHtcblx0XHRcdHZhbHVlOiBjb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGdsdGYgPSByZXN1bHQoKSBhcyB1bmtub3duIGFzIEdMVEY7XG5cdFx0XHRcdGlmICghZ2x0ZikgcmV0dXJuIG51bGw7XG5cdFx0XHRcdHJldHVybiBnbHRmLnNjZW5lO1xuXHRcdFx0fSksXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9KSBhcyBTaWduYWw8Tmd0TG9hZGVyUmVzdWx0czxUVXJsLCBHTFRGICYgTmd0T2JqZWN0TWFwPiB8IG51bGw+ICYgeyBzY2VuZTogU2lnbmFsPEdMVEZbJ3NjZW5lJ10gfCBudWxsPiB9O1xufVxuXG5faW5qZWN0R0xURi5wcmVsb2FkID0gPFRVcmwgZXh0ZW5kcyBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KFxuXHRwYXRoOiAoKSA9PiBUVXJsLFxuXHR7XG5cdFx0dXNlRHJhY28gPSB0cnVlLFxuXHRcdHVzZU1lc2hPcHQgPSB0cnVlLFxuXHRcdGV4dGVuc2lvbnMsXG5cdFx0b25Mb2FkLFxuXHR9OiB7XG5cdFx0dXNlRHJhY28/OiBib29sZWFuIHwgc3RyaW5nO1xuXHRcdHVzZU1lc2hPcHQ/OiBib29sZWFuO1xuXHRcdGV4dGVuc2lvbnM/OiAobG9hZGVyOiBHTFRGTG9hZGVyKSA9PiB2b2lkO1xuXHRcdG9uTG9hZD86IChkYXRhOiBOZ3RMb2FkZXJSZXN1bHRzPFRVcmwsIEdMVEYgJiBOZ3RPYmplY3RNYXA+KSA9PiB2b2lkO1xuXHR9ID0ge30sXG4pID0+IHtcblx0aW5qZWN0TG9hZGVyLnByZWxvYWQoXG5cdFx0KCkgPT4gR0xURkxvYWRlcixcblx0XHRwYXRoLFxuXHRcdF9leHRlbnNpb25zKHVzZURyYWNvLCB1c2VNZXNoT3B0LCBleHRlbnNpb25zKSBhcyBhbnksXG5cdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciAtIHdlIGtub3cgdGhlIHR5cGUgb2YgdGhlIGRhdGFcblx0XHRvbkxvYWQsXG5cdCk7XG59O1xuXG5faW5qZWN0R0xURi5zZXREZWNvZGVyUGF0aCA9IChwYXRoOiBzdHJpbmcpID0+IHtcblx0ZGVjb2RlclBhdGggPSBwYXRoO1xufTtcblxuZXhwb3J0IHR5cGUgTmd0c0dMVEZMb2FkZXIgPSB0eXBlb2YgX2luamVjdEdMVEY7XG5leHBvcnQgY29uc3QgaW5qZWN0R0xURjogTmd0c0dMVEZMb2FkZXIgPSBfaW5qZWN0R0xURjtcbiJdfQ==
@@ -0,0 +1,109 @@
1
+ import { ChangeDetectionStrategy, Component, computed, effect, input, signal, untracked, viewChild, } from '@angular/core';
2
+ import { pick } from 'angular-three';
3
+ import { mergeInputs } from 'ngxtension/inject-inputs';
4
+ import { injectProgress } from './progress';
5
+ import * as i0 from "@angular/core";
6
+ const defaultDataInterpolation = (p) => `Loading ${p.toFixed(2)}%`;
7
+ const defaultOptions = {
8
+ containerClass: '',
9
+ innerClass: '',
10
+ barClass: '',
11
+ dataClass: '',
12
+ dataInterpolation: defaultDataInterpolation,
13
+ initialState: (value) => value,
14
+ };
15
+ export class NgtsLoader {
16
+ constructor() {
17
+ this.progressState = injectProgress();
18
+ this.active = computed(() => this.progressState().active);
19
+ this.progress = computed(() => this.progressState().progress);
20
+ this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
21
+ this.containerClass = pick(this.options, 'containerClass');
22
+ this.innerClass = pick(this.options, 'innerClass');
23
+ this.barClass = pick(this.options, 'barClass');
24
+ this.dataClass = pick(this.options, 'dataClass');
25
+ this.initialState = pick(this.options, 'initialState');
26
+ this.dataInterpolation = pick(this.options, 'dataInterpolation');
27
+ this.progressSpanRef = viewChild('progressSpanRef');
28
+ this.shown = signal(this.initialState()(this.active()));
29
+ this.setShown();
30
+ this.updateProgress();
31
+ }
32
+ setShown() {
33
+ effect((onCleanup) => {
34
+ const [active, lastShown] = [this.active(), untracked(this.shown)];
35
+ if (lastShown !== active) {
36
+ const timeoutId = setTimeout(() => {
37
+ this.shown.set(active);
38
+ }, 300);
39
+ onCleanup(() => clearTimeout(timeoutId));
40
+ }
41
+ });
42
+ }
43
+ updateProgress() {
44
+ let progressRef = 0;
45
+ let rafId;
46
+ effect((onCleanup) => {
47
+ const [dataInterpolation, progress] = [this.dataInterpolation(), this.progress()];
48
+ const updateProgress = () => {
49
+ const progressSpan = this.progressSpanRef()?.nativeElement;
50
+ if (!progressSpan)
51
+ return;
52
+ progressRef += (progress - progressRef) / 2;
53
+ if (progressRef > 0.95 * progress || progress === 100)
54
+ progressRef = progress;
55
+ progressSpan.innerText = dataInterpolation(progressRef);
56
+ if (progressRef < progress) {
57
+ rafId = requestAnimationFrame(updateProgress);
58
+ }
59
+ };
60
+ updateProgress();
61
+ onCleanup(() => cancelAnimationFrame(rafId));
62
+ });
63
+ }
64
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsLoader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
65
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: NgtsLoader, isStandalone: true, selector: "ngts-loader", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "progressSpanRef", first: true, predicate: ["progressSpanRef"], descendants: true, isSignal: true }], ngImport: i0, template: `
66
+ @if (shown()) {
67
+ <div
68
+ class="ngts-loader-container"
69
+ [class]="containerClass() || ''"
70
+ [style.--ngts-loader-container-opacity]="active() ? 1 : 0"
71
+ >
72
+ <div>
73
+ <div class="ngts-loader-inner" [class]="innerClass() || ''">
74
+ <div
75
+ class="ngts-loader-bar"
76
+ [class]="barClass() || ''"
77
+ [style.--ngts-loader-bar-scale]="progress() / 100"
78
+ ></div>
79
+ <span #progressSpanRef class="ngts-loader-data" [class]="dataClass() || ''"></span>
80
+ </div>
81
+ </div>
82
+ </div>
83
+ }
84
+ `, isInline: true, styles: [".ngts-loader-container{--ngts-loader-container-opacity: 0;position:absolute;top:0;left:0;width:100%;height:100%;background:#171717;display:flex;align-items:center;justify-content:center;transition:opacity .3s ease;z-index:1000;opacity:var(--ngts-loader-container-opacity)}.ngts-loader-inner{width:100px;height:3px;background:#272727;text-align:center}.ngts-loader-bar{--ngts-loader-bar-scale: 0;height:3px;width:100px;background:#fff;transition:transform .2s;transform-origin:left center;transform:scaleX(var(--ngts-loader-bar-scale))}.ngts-loader-data{display:inline-block;position:relative;font-variant-numeric:tabular-nums;margin-top:.8em;color:#f0f0f0;font-size:.6em;font-family:-apple-system,BlinkMacSystemFont,Inter,Segoe UI,Helvetica Neue,Helvetica,Arial,Roboto,Ubuntu,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;white-space:nowrap}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
85
+ }
86
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtsLoader, decorators: [{
87
+ type: Component,
88
+ args: [{ selector: 'ngts-loader', standalone: true, template: `
89
+ @if (shown()) {
90
+ <div
91
+ class="ngts-loader-container"
92
+ [class]="containerClass() || ''"
93
+ [style.--ngts-loader-container-opacity]="active() ? 1 : 0"
94
+ >
95
+ <div>
96
+ <div class="ngts-loader-inner" [class]="innerClass() || ''">
97
+ <div
98
+ class="ngts-loader-bar"
99
+ [class]="barClass() || ''"
100
+ [style.--ngts-loader-bar-scale]="progress() / 100"
101
+ ></div>
102
+ <span #progressSpanRef class="ngts-loader-data" [class]="dataClass() || ''"></span>
103
+ </div>
104
+ </div>
105
+ </div>
106
+ }
107
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".ngts-loader-container{--ngts-loader-container-opacity: 0;position:absolute;top:0;left:0;width:100%;height:100%;background:#171717;display:flex;align-items:center;justify-content:center;transition:opacity .3s ease;z-index:1000;opacity:var(--ngts-loader-container-opacity)}.ngts-loader-inner{width:100px;height:3px;background:#272727;text-align:center}.ngts-loader-bar{--ngts-loader-bar-scale: 0;height:3px;width:100px;background:#fff;transition:transform .2s;transform-origin:left center;transform:scaleX(var(--ngts-loader-bar-scale))}.ngts-loader-data{display:inline-block;position:relative;font-variant-numeric:tabular-nums;margin-top:.8em;color:#f0f0f0;font-size:.6em;font-family:-apple-system,BlinkMacSystemFont,Inter,Segoe UI,Helvetica Neue,Helvetica,Arial,Roboto,Ubuntu,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol;white-space:nowrap}\n"] }]
108
+ }], ctorParameters: () => [] });
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL2xvYWRlcnMvc3JjL2xpYi9sb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFFNUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFXM0UsTUFBTSxjQUFjLEdBQXNCO0lBQ3pDLGNBQWMsRUFBRSxFQUFFO0lBQ2xCLFVBQVUsRUFBRSxFQUFFO0lBQ2QsUUFBUSxFQUFFLEVBQUU7SUFDWixTQUFTLEVBQUUsRUFBRTtJQUNiLGlCQUFpQixFQUFFLHdCQUF3QjtJQUMzQyxZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUs7Q0FDOUIsQ0FBQztBQTRCRixNQUFNLE9BQU8sVUFBVTtJQW1CdEI7UUFsQlEsa0JBQWEsR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUV6QyxXQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRCxhQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV6RCxZQUFPLEdBQUcsS0FBSyxD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QUM7OEdBdkRXLFVBQVU7a0dBQVYsVUFBVSxxVkF2Qlo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFtQlQ7OzJGQUlXLFVBQVU7a0JBMUJ0QixTQUFTOytCQUNDLGFBQWEsY0FDWCxJQUFJLFlBQ047Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFtQlQsbUJBRWdCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRFbGVtZW50UmVmLFxuXHRjb21wdXRlZCxcblx0ZWZmZWN0LFxuXHRpbnB1dCxcblx0c2lnbmFsLFxuXHR1bnRyYWNrZWQsXG5cdHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBwaWNrIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBpbmplY3RQcm9ncmVzcyB9IGZyb20gJy4vcHJvZ3Jlc3MnO1xuXG5jb25zdCBkZWZhdWx0RGF0YUludGVycG9sYXRpb24gPSAocDogbnVtYmVyKSA9PiBgTG9hZGluZyAke3AudG9GaXhlZCgyKX0lYDtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzTG9hZGVyT3B0aW9ucyB7XG5cdGNvbnRhaW5lckNsYXNzPzogc3RyaW5nO1xuXHRpbm5lckNsYXNzPzogc3RyaW5nO1xuXHRiYXJDbGFzcz86IHN0cmluZztcblx0ZGF0YUNsYXNzPzogc3RyaW5nO1xuXHRkYXRhSW50ZXJwb2xhdGlvbjogKHZhbHVlOiBudW1iZXIpID0+IHN0cmluZztcblx0aW5pdGlhbFN0YXRlOiAodmFsdWU6IGJvb2xlYW4pID0+IGJvb2xlYW47XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOZ3RzTG9hZGVyT3B0aW9ucyA9IHtcblx0Y29udGFpbmVyQ2xhc3M6ICcnLFxuXHRpbm5lckNsYXNzOiAnJyxcblx0YmFyQ2xhc3M6ICcnLFxuXHRkYXRhQ2xhc3M6ICcnLFxuXHRkYXRhSW50ZXJwb2xhdGlvbjogZGVmYXVsdERhdGFJbnRlcnBvbGF0aW9uLFxuXHRpbml0aWFsU3RhdGU6ICh2YWx1ZSkgPT4gdmFsdWUsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLWxvYWRlcicsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0QGlmIChzaG93bigpKSB7XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzPVwibmd0cy1sb2FkZXItY29udGFpbmVyXCJcblx0XHRcdFx0W2NsYXNzXT1cImNvbnRhaW5lckNsYXNzKCkgfHwgJydcIlxuXHRcdFx0XHRbc3R5bGUuLS1uZ3RzLWxvYWRlci1jb250YWluZXItb3BhY2l0eV09XCJhY3RpdmUoKSA/IDEgOiAwXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibmd0cy1sb2FkZXItaW5uZXJcIiBbY2xhc3NdPVwiaW5uZXJDbGFzcygpIHx8ICcnXCI+XG5cdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdGNsYXNzPVwibmd0cy1sb2FkZXItYmFyXCJcblx0XHRcdFx0XHRcdFx0W2NsYXNzXT1cImJhckNsYXNzKCkgfHwgJydcIlxuXHRcdFx0XHRcdFx0XHRbc3R5bGUuLS1uZ3RzLWxvYWRlci1iYXItc2NhbGVdPVwicHJvZ3Jlc3MoKSAvIDEwMFwiXG5cdFx0XHRcdFx0XHQ+PC9kaXY+XG5cdFx0XHRcdFx0XHQ8c3BhbiAjcHJvZ3Jlc3NTcGFuUmVmIGNsYXNzPVwibmd0cy1sb2FkZXItZGF0YVwiIFtjbGFzc109XCJkYXRhQ2xhc3MoKSB8fCAnJ1wiPjwvc3Bhbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHR9XG5cdGAsXG5cdHN0eWxlVXJsczogWycuL2xvYWRlci5jc3MnXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNMb2FkZXIge1xuXHRwcml2YXRlIHByb2dyZXNzU3RhdGUgPSBpbmplY3RQcm9ncmVzcygpO1xuXG5cdGFjdGl2ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMucHJvZ3Jlc3NTdGF0ZSgpLmFjdGl2ZSk7XG5cdHByb2dyZXNzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wcm9ncmVzc1N0YXRlKCkucHJvZ3Jlc3MpO1xuXG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblxuXHRjb250YWluZXJDbGFzcyA9IHBpY2sodGhpcy5vcHRpb25zLCAnY29udGFpbmVyQ2xhc3MnKTtcblx0aW5uZXJDbGFzcyA9IHBpY2sodGhpcy5vcHRpb25zLCAnaW5uZXJDbGFzcycpO1xuXHRiYXJDbGFzcyA9IHBpY2sodGhpcy5vcHRpb25zLCAnYmFyQ2xhc3MnKTtcblx0ZGF0YUNsYXNzID0gcGljayh0aGlzLm9wdGlvbnMsICdkYXRhQ2xhc3MnKTtcblx0aW5pdGlhbFN0YXRlID0gcGljayh0aGlzLm9wdGlvbnMsICdpbml0aWFsU3RhdGUnKTtcblx0ZGF0YUludGVycG9sYXRpb24gPSBwaWNrKHRoaXMub3B0aW9ucywgJ2RhdGFJbnRlcnBvbGF0aW9uJyk7XG5cblx0cHJvZ3Jlc3NTcGFuUmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTFNwYW5FbGVtZW50Pj4oJ3Byb2dyZXNzU3BhblJlZicpO1xuXG5cdHNob3duID0gc2lnbmFsKHRoaXMuaW5pdGlhbFN0YXRlKCkodGhpcy5hY3RpdmUoKSkpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuc2V0U2hvd24oKTtcblx0XHR0aGlzLnVwZGF0ZVByb2dyZXNzKCk7XG5cdH1cblxuXHRwcml2YXRlIHNldFNob3duKCkge1xuXHRcdGVmZmVjdCgob25DbGVhbnVwKSA9PiB7XG5cdFx0XHRjb25zdCBbYWN0aXZlLCBsYXN0U2hvd25dID0gW3RoaXMuYWN0aXZlKCksIHVudHJhY2tlZCh0aGlzLnNob3duKV07XG5cdFx0XHRpZiAobGFzdFNob3duICE9PSBhY3RpdmUpIHtcblx0XHRcdFx0Y29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5zaG93bi5zZXQoYWN0aXZlKTtcblx0XHRcdFx0fSwgMzAwKTtcblx0XHRcdFx0b25DbGVhbnVwKCgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0SWQpKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlUHJvZ3Jlc3MoKSB7XG5cdFx0bGV0IHByb2dyZXNzUmVmID0gMDtcblx0XHRsZXQgcmFmSWQ6IFJldHVyblR5cGU8dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT47XG5cblx0XHRlZmZlY3QoKG9uQ2xlYW51cCkgPT4ge1xuXHRcdFx0Y29uc3QgW2RhdGFJbnRlcnBvbGF0aW9uLCBwcm9ncmVzc10gPSBbdGhpcy5kYXRhSW50ZXJwb2xhdGlvbigpLCB0aGlzLnByb2dyZXNzKCldO1xuXHRcdFx0Y29uc3QgdXBkYXRlUHJvZ3Jlc3MgPSAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHByb2dyZXNzU3BhbiA9IHRoaXMucHJvZ3Jlc3NTcGFuUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRcdGlmICghcHJvZ3Jlc3NTcGFuKSByZXR1cm47XG5cdFx0XHRcdHByb2dyZXNzUmVmICs9IChwcm9ncmVzcyAtIHByb2dyZXNzUmVmKSAvIDI7XG5cdFx0XHRcdGlmIChwcm9ncmVzc1JlZiA+IDAuOTUgKiBwcm9ncmVzcyB8fCBwcm9ncmVzcyA9PT0gMTAwKSBwcm9ncmVzc1JlZiA9IHByb2dyZXNzO1xuXHRcdFx0XHRwcm9ncmVzc1NwYW4uaW5uZXJUZXh0ID0gZGF0YUludGVycG9sYXRpb24ocHJvZ3Jlc3NSZWYpO1xuXHRcdFx0XHRpZiAocHJvZ3Jlc3NSZWYgPCBwcm9ncmVzcykge1xuXHRcdFx0XHRcdHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZVByb2dyZXNzKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdHVwZGF0ZVByb2dyZXNzKCk7XG5cdFx0XHRvbkNsZWFudXAoKCkgPT4gY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpKTtcblx0XHR9KTtcblx0fVxufVxuIl19