angular-three-soba 1.14.1 → 2.0.0-beta.11

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 (426) hide show
  1. package/README.md +2 -2
  2. package/abstractions/billboard/billboard.d.ts +28 -0
  3. package/abstractions/detailed/detailed.d.ts +26 -0
  4. package/abstractions/edges/edges.d.ts +34 -0
  5. package/abstractions/grid/grid.d.ts +50 -0
  6. package/abstractions/index.d.ts +6 -11
  7. package/abstractions/text/text.d.ts +82 -0
  8. package/abstractions/text-3d/text-3d.d.ts +81 -0
  9. package/cameras/{lib/camera → camera}/camera-content.d.ts +2 -2
  10. package/cameras/camera/camera.d.ts +26 -0
  11. package/cameras/cube-camera/cube-camera.d.ts +69 -0
  12. package/cameras/index.d.ts +4 -4
  13. package/cameras/orthographic-camera/orthographic-camera.d.ts +37 -0
  14. package/cameras/{lib/perspective-camera → perspective-camera}/perspective-camera.d.ts +10 -1
  15. package/controls/index.d.ts +1 -1
  16. package/controls/orbit-controls/orbit-controls.d.ts +54 -0
  17. package/esm2022/abstractions/angular-three-soba-abstractions.mjs +1 -1
  18. package/esm2022/abstractions/billboard/billboard.mjs +74 -0
  19. package/esm2022/abstractions/detailed/detailed.mjs +64 -0
  20. package/esm2022/abstractions/edges/edges.mjs +88 -0
  21. package/esm2022/abstractions/grid/grid.mjs +180 -0
  22. package/esm2022/abstractions/index.mjs +7 -12
  23. package/esm2022/abstractions/text/text.mjs +274 -0
  24. package/esm2022/abstractions/text-3d/text-3d.mjs +165 -0
  25. package/esm2022/angular-three-soba.mjs +1 -1
  26. package/esm2022/cameras/angular-three-soba-cameras.mjs +1 -1
  27. package/esm2022/cameras/camera/camera-content.mjs +20 -0
  28. package/esm2022/cameras/camera/camera.mjs +77 -0
  29. package/esm2022/cameras/cube-camera/cube-camera.mjs +161 -0
  30. package/esm2022/cameras/index.mjs +5 -5
  31. package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +102 -0
  32. package/esm2022/cameras/perspective-camera/perspective-camera.mjs +46 -0
  33. package/esm2022/controls/angular-three-soba-controls.mjs +1 -1
  34. package/esm2022/controls/index.mjs +2 -2
  35. package/esm2022/controls/orbit-controls/orbit-controls.mjs +181 -0
  36. package/esm2022/index.mjs +1 -1
  37. package/esm2022/loaders/angular-three-soba-loaders.mjs +1 -1
  38. package/esm2022/loaders/gltf-loader/gltf-loader.mjs +30 -0
  39. package/esm2022/loaders/index.mjs +5 -6
  40. package/esm2022/loaders/loader/loader.mjs +138 -0
  41. package/esm2022/loaders/progress/progress.mjs +45 -0
  42. package/esm2022/loaders/texture-loader/texture-loader.mjs +28 -0
  43. package/esm2022/materials/angular-three-soba-materials.mjs +1 -1
  44. package/esm2022/materials/index.mjs +7 -6
  45. package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +82 -0
  46. package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +367 -0
  47. package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +171 -0
  48. package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +278 -0
  49. package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +68 -0
  50. package/esm2022/materials/point-material/point-material.mjs +46 -0
  51. package/esm2022/misc/angular-three-soba-misc.mjs +1 -1
  52. package/esm2022/misc/animations/animations.mjs +59 -0
  53. package/esm2022/misc/bake-shadows/bake-shadows.mjs +24 -0
  54. package/esm2022/misc/caustics/caustics.mjs +387 -0
  55. package/esm2022/misc/decal/decal.mjs +187 -0
  56. package/esm2022/misc/depth-buffer/depth-buffer.mjs +44 -0
  57. package/esm2022/misc/example/example.mjs +160 -0
  58. package/esm2022/misc/fbo/fbo.mjs +47 -0
  59. package/esm2022/misc/html/html-wrapper.mjs +478 -0
  60. package/esm2022/misc/html/html.mjs +304 -0
  61. package/esm2022/misc/index.mjs +14 -5
  62. package/esm2022/misc/sampler/sampler.mjs +142 -0
  63. package/esm2022/misc/shadow/shadow.mjs +111 -0
  64. package/esm2022/misc/stats-gl/stats-gl.mjs +61 -0
  65. package/esm2022/misc/trail/trail.mjs +209 -0
  66. package/esm2022/misc/trail-texture/inject-trail-texture.mjs +17 -0
  67. package/esm2022/misc/trail-texture/trail-texture.mjs +106 -0
  68. package/esm2022/modifiers/angular-three-soba-modifiers.mjs +5 -0
  69. package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +64 -0
  70. package/esm2022/modifiers/index.mjs +2 -0
  71. package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +44 -0
  72. package/esm2022/performances/adaptive-events/adaptive-events.mjs +27 -0
  73. package/esm2022/performances/angular-three-soba-performances.mjs +5 -0
  74. package/esm2022/performances/index.mjs +6 -0
  75. package/esm2022/performances/points/points-input.mjs +64 -0
  76. package/esm2022/performances/points/points.mjs +329 -0
  77. package/esm2022/performances/points/position-point.mjs +54 -0
  78. package/esm2022/performances/segments/segment-object.mjs +9 -0
  79. package/esm2022/performances/segments/segments.mjs +182 -0
  80. package/esm2022/shaders/angular-three-soba-shaders.mjs +1 -1
  81. package/esm2022/shaders/blur-pass/blur-pass.mjs +61 -0
  82. package/esm2022/shaders/caustics/caustics-material.mjs +130 -0
  83. package/esm2022/shaders/caustics/caustics-projection-material.mjs +31 -0
  84. package/esm2022/shaders/convolution-material/convolution-material.mjs +94 -0
  85. package/esm2022/shaders/discard-material/discard-material.mjs +3 -0
  86. package/esm2022/shaders/grid-material/grid-material.mjs +77 -0
  87. package/esm2022/shaders/index.mjs +18 -15
  88. package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +56 -0
  89. package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +223 -0
  90. package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +170 -0
  91. package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +268 -0
  92. package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +37 -0
  93. package/esm2022/shaders/shader-material/shader-material.mjs +34 -0
  94. package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +25 -0
  95. package/esm2022/shaders/sparkles-material/sparkles-material.mjs +33 -0
  96. package/esm2022/shaders/spot-light-material/spot-light-material.mjs +86 -0
  97. package/esm2022/shaders/star-field-material/star-field-material.mjs +33 -0
  98. package/esm2022/shaders/wireframe-material/wireframe-material.mjs +247 -0
  99. package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +267 -0
  100. package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +108 -0
  101. package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +206 -0
  102. package/esm2022/staging/angular-three-soba-staging.mjs +1 -1
  103. package/esm2022/staging/backdrop/backdrop.mjs +77 -0
  104. package/esm2022/staging/bb-anchor/bb-anchor.mjs +69 -0
  105. package/esm2022/staging/bounds/bounds.mjs +308 -0
  106. package/esm2022/staging/camera-shake/camera-shake.mjs +123 -0
  107. package/esm2022/staging/center/center.mjs +163 -0
  108. package/esm2022/staging/cloud/cloud.mjs +158 -0
  109. package/esm2022/staging/contact-shadows/contact-shadows.mjs +246 -0
  110. package/esm2022/staging/environment/assets.mjs +13 -0
  111. package/esm2022/staging/environment/environment-cube.mjs +47 -0
  112. package/esm2022/staging/environment/environment-ground.mjs +41 -0
  113. package/esm2022/staging/environment/environment-input.mjs +119 -0
  114. package/esm2022/staging/environment/environment-map.mjs +53 -0
  115. package/esm2022/staging/environment/environment-portal.mjs +113 -0
  116. package/esm2022/staging/environment/environment.mjs +61 -0
  117. package/esm2022/staging/environment/utils.mjs +105 -0
  118. package/esm2022/staging/float/float.mjs +94 -0
  119. package/esm2022/staging/index.mjs +22 -18
  120. package/esm2022/staging/matcap-texture/matcap-texture.mjs +64 -0
  121. package/esm2022/staging/normal-texture/normal-texture.mjs +53 -0
  122. package/esm2022/staging/sky/sky.mjs +119 -0
  123. package/esm2022/staging/sparkles/sparkles.mjs +164 -0
  124. package/esm2022/staging/spot-light/shadow-mesh-input.mjs +63 -0
  125. package/esm2022/staging/spot-light/shadow-mesh.mjs +266 -0
  126. package/esm2022/staging/spot-light/spot-light-input.mjs +84 -0
  127. package/esm2022/staging/spot-light/spot-light.mjs +81 -0
  128. package/esm2022/staging/spot-light/volumetric-mesh.mjs +98 -0
  129. package/esm2022/staging/stage/stage.mjs +388 -0
  130. package/esm2022/staging/stars/stars.mjs +147 -0
  131. package/esm2022/staging/wireframe/wireframe-input.mjs +191 -0
  132. package/esm2022/staging/wireframe/wireframe.mjs +224 -0
  133. package/esm2022/utils/angular-three-soba-utils.mjs +5 -0
  134. package/esm2022/utils/content/content.mjs +15 -0
  135. package/esm2022/utils/index.mjs +2 -0
  136. package/fesm2022/angular-three-soba-abstractions.mjs +668 -1882
  137. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  138. package/fesm2022/angular-three-soba-cameras.mjs +279 -232
  139. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  140. package/fesm2022/angular-three-soba-controls.mjs +104 -69
  141. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  142. package/fesm2022/angular-three-soba-loaders.mjs +177 -164
  143. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  144. package/fesm2022/angular-three-soba-materials.mjs +630 -482
  145. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  146. package/fesm2022/angular-three-soba-misc.mjs +2248 -122
  147. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  148. package/fesm2022/angular-three-soba-modifiers.mjs +71 -0
  149. package/fesm2022/angular-three-soba-modifiers.mjs.map +1 -0
  150. package/fesm2022/angular-three-soba-performances.mjs +697 -0
  151. package/fesm2022/angular-three-soba-performances.mjs.map +1 -0
  152. package/fesm2022/angular-three-soba-shaders.mjs +554 -209
  153. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  154. package/fesm2022/angular-three-soba-staging.mjs +3230 -2852
  155. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  156. package/fesm2022/angular-three-soba-utils.mjs +22 -0
  157. package/fesm2022/angular-three-soba-utils.mjs.map +1 -0
  158. package/fesm2022/angular-three-soba.mjs.map +1 -1
  159. package/loaders/gltf-loader/gltf-loader.d.ts +10 -0
  160. package/loaders/index.d.ts +4 -5
  161. package/loaders/loader/loader.d.ts +33 -0
  162. package/loaders/progress/progress.d.ts +9 -0
  163. package/loaders/texture-loader/texture-loader.d.ts +7 -0
  164. package/materials/index.d.ts +6 -5
  165. package/materials/mesh-distort-material/mesh-distort-material.d.ts +40 -0
  166. package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +99 -0
  167. package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +62 -0
  168. package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +107 -0
  169. package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +29 -0
  170. package/materials/point-material/point-material.d.ts +24 -0
  171. package/metadata.json +1 -0
  172. package/misc/animations/animations.d.ts +15 -0
  173. package/misc/{lib/bake-shadows → bake-shadows}/bake-shadows.d.ts +2 -5
  174. package/misc/caustics/caustics.d.ts +87 -0
  175. package/misc/decal/decal.d.ts +49 -0
  176. package/misc/depth-buffer/depth-buffer.d.ts +9 -0
  177. package/misc/example/example.d.ts +81 -0
  178. package/misc/{lib/fbo → fbo}/fbo.d.ts +4 -2
  179. package/misc/html/html-wrapper.d.ts +559 -0
  180. package/misc/html/html.d.ts +214 -0
  181. package/misc/index.d.ts +13 -4
  182. package/misc/sampler/sampler.d.ts +67 -0
  183. package/misc/shadow/shadow.d.ts +37 -0
  184. package/misc/stats-gl/stats-gl.d.ts +24 -0
  185. package/misc/trail/trail.d.ts +57 -0
  186. package/misc/trail-texture/inject-trail-texture.d.ts +9 -0
  187. package/misc/trail-texture/trail-texture.d.ts +50 -0
  188. package/modifiers/README.md +3 -0
  189. package/modifiers/curve-modifier/curve-modifier.d.ts +23 -0
  190. package/modifiers/index.d.ts +1 -0
  191. package/package.json +43 -32
  192. package/performances/README.md +3 -0
  193. package/performances/adaptive-dpr/adaptive-dpr.d.ts +14 -0
  194. package/{performance/lib/adaptive → performances/adaptive-events}/adaptive-events.d.ts +5 -6
  195. package/performances/index.d.ts +5 -0
  196. package/performances/points/points-input.d.ts +32 -0
  197. package/performances/points/points.d.ts +92 -0
  198. package/performances/points/position-point.d.ts +11 -0
  199. package/performances/segments/segment-object.d.ts +7 -0
  200. package/performances/segments/segments.d.ts +124 -0
  201. package/shaders/{lib/blur-pass → blur-pass}/blur-pass.d.ts +2 -2
  202. package/shaders/grid-material/grid-material.d.ts +37 -0
  203. package/shaders/index.d.ts +17 -14
  204. package/shaders/{lib/mesh-distort-material → mesh-distort-material}/mesh-distort-material.d.ts +147 -2
  205. package/shaders/{lib/mesh-transmission-material → mesh-transmission-material}/mesh-transmission-material.d.ts +1 -1
  206. package/shaders/{lib/mesh-wobble-material → mesh-wobble-material}/mesh-wobble-material.d.ts +1 -0
  207. package/shaders/{lib/shader-material → shader-material}/shader-material.d.ts +2 -2
  208. package/shaders/soft-shadow-material/soft-shadow-material.d.ts +19 -0
  209. package/shaders/sparkles-material/sparkles-material.d.ts +17 -0
  210. package/shaders/spot-light-material/spot-light-material.d.ts +13 -0
  211. package/shaders/star-field-material/star-field-material.d.ts +13 -0
  212. package/shaders/wireframe-material/wireframe-material.d.ts +58 -0
  213. package/staging/accumulative-shadows/accumulative-shadows.d.ts +146 -0
  214. package/staging/{lib/accumulative-shadows → accumulative-shadows}/progressive-light-map.d.ts +2 -2
  215. package/staging/accumulative-shadows/randomized-lights.d.ts +90 -0
  216. package/staging/backdrop/backdrop.d.ts +30 -0
  217. package/staging/bb-anchor/bb-anchor.d.ts +27 -0
  218. package/staging/bounds/bounds.d.ts +134 -0
  219. package/staging/camera-shake/camera-shake.d.ts +43 -0
  220. package/staging/center/center.d.ts +70 -0
  221. package/staging/cloud/cloud.d.ts +51 -0
  222. package/staging/contact-shadows/contact-shadows.d.ts +70 -0
  223. package/staging/{lib/environment → environment}/assets.d.ts +9 -9
  224. package/staging/environment/environment-cube.d.ts +15 -0
  225. package/staging/environment/environment-ground.d.ts +13 -0
  226. package/staging/environment/environment-input.d.ts +68 -0
  227. package/staging/environment/environment-map.d.ts +16 -0
  228. package/staging/environment/environment-portal.d.ts +18 -0
  229. package/staging/{lib/environment → environment}/environment.d.ts +2 -6
  230. package/staging/environment/utils.d.ts +7 -0
  231. package/staging/float/float.d.ts +31 -0
  232. package/staging/index.d.ts +21 -17
  233. package/staging/matcap-texture/matcap-texture.d.ts +13 -0
  234. package/staging/normal-texture/normal-texture.d.ts +16 -0
  235. package/staging/sky/sky.d.ts +48 -0
  236. package/staging/sparkles/sparkles.d.ts +63 -0
  237. package/staging/spot-light/shadow-mesh-input.d.ts +29 -0
  238. package/staging/spot-light/shadow-mesh.d.ts +37 -0
  239. package/staging/spot-light/spot-light-input.d.ts +38 -0
  240. package/staging/spot-light/spot-light.d.ts +39 -0
  241. package/staging/spot-light/volumetric-mesh.d.ts +24 -0
  242. package/staging/stage/stage.d.ts +130 -0
  243. package/staging/stars/stars.d.ts +45 -0
  244. package/staging/wireframe/wireframe-input.d.ts +65 -0
  245. package/staging/wireframe/wireframe.d.ts +28 -0
  246. package/utils/README.md +3 -0
  247. package/utils/content/content.d.ts +8 -0
  248. package/utils/index.d.ts +1 -0
  249. package/web-types.json +1 -0
  250. package/abstractions/lib/billboard/billboard.d.ts +0 -14
  251. package/abstractions/lib/catmull-rom-line/catmull-rom-line.d.ts +0 -15
  252. package/abstractions/lib/cubic-bezier-line/cubic-bezier-line.d.ts +0 -15
  253. package/abstractions/lib/edges/edges.d.ts +0 -18
  254. package/abstractions/lib/gizmo-helper/gizmo-helper.d.ts +0 -41
  255. package/abstractions/lib/gizmo-helper/gizmo-viewcube/constants.d.ts +0 -12
  256. package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +0 -16
  257. package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +0 -24
  258. package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +0 -14
  259. package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +0 -15
  260. package/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +0 -28
  261. package/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +0 -21
  262. package/abstractions/lib/line/line-input.d.ts +0 -19
  263. package/abstractions/lib/line/line.d.ts +0 -21
  264. package/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.d.ts +0 -19
  265. package/abstractions/lib/text/text.d.ts +0 -21
  266. package/abstractions/lib/text-3d/text-3d.d.ts +0 -39
  267. package/assets/default-spot-light-shadow.glsl +0 -10
  268. package/cameras/lib/camera/camera.d.ts +0 -19
  269. package/cameras/lib/cube-camera/cube-camera.d.ts +0 -27
  270. package/cameras/lib/orthographic-camera/orthographic-camera.d.ts +0 -17
  271. package/controls/lib/orbit-controls/orbit-controls.d.ts +0 -27
  272. package/esm2022/abstractions/lib/billboard/billboard.mjs +0 -74
  273. package/esm2022/abstractions/lib/catmull-rom-line/catmull-rom-line.mjs +0 -120
  274. package/esm2022/abstractions/lib/cubic-bezier-line/cubic-bezier-line.mjs +0 -99
  275. package/esm2022/abstractions/lib/edges/edges.mjs +0 -96
  276. package/esm2022/abstractions/lib/gizmo-helper/gizmo-helper.mjs +0 -213
  277. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/constants.mjs +0 -31
  278. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -92
  279. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -184
  280. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +0 -46
  281. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +0 -134
  282. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -195
  283. package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +0 -267
  284. package/esm2022/abstractions/lib/line/line-input.mjs +0 -76
  285. package/esm2022/abstractions/lib/line/line.mjs +0 -133
  286. package/esm2022/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.mjs +0 -128
  287. package/esm2022/abstractions/lib/text/text.mjs +0 -115
  288. package/esm2022/abstractions/lib/text-3d/text-3d.mjs +0 -145
  289. package/esm2022/cameras/lib/camera/camera-content.mjs +0 -21
  290. package/esm2022/cameras/lib/camera/camera.mjs +0 -75
  291. package/esm2022/cameras/lib/cube-camera/cube-camera.mjs +0 -131
  292. package/esm2022/cameras/lib/orthographic-camera/orthographic-camera.mjs +0 -93
  293. package/esm2022/cameras/lib/perspective-camera/perspective-camera.mjs +0 -47
  294. package/esm2022/controls/lib/orbit-controls/orbit-controls.mjs +0 -147
  295. package/esm2022/loaders/lib/cube-texture-loader/cube-texture-loader.mjs +0 -10
  296. package/esm2022/loaders/lib/gltf-loader/gltf-loader.mjs +0 -32
  297. package/esm2022/loaders/lib/loader/loader.mjs +0 -134
  298. package/esm2022/loaders/lib/progress/progress.mjs +0 -39
  299. package/esm2022/loaders/lib/texture-loader/texture-loader.mjs +0 -19
  300. package/esm2022/materials/lib/mesh-distort-material/mesh-distort-material.mjs +0 -75
  301. package/esm2022/materials/lib/mesh-reflector-material/mesh-reflector-material.mjs +0 -328
  302. package/esm2022/materials/lib/mesh-refraction-material/mesh-refraction-material.mjs +0 -158
  303. package/esm2022/materials/lib/mesh-transmission-material/mesh-transmission-material.mjs +0 -238
  304. package/esm2022/materials/lib/mesh-wobble-material/mesh-wobble-material.mjs +0 -68
  305. package/esm2022/misc/lib/animations/animations.mjs +0 -52
  306. package/esm2022/misc/lib/bake-shadows/bake-shadows.mjs +0 -26
  307. package/esm2022/misc/lib/depth-buffer/depth-buffer.mjs +0 -39
  308. package/esm2022/misc/lib/fbo/fbo.mjs +0 -39
  309. package/esm2022/performance/angular-three-soba-performance.mjs +0 -5
  310. package/esm2022/performance/index.mjs +0 -5
  311. package/esm2022/performance/lib/adaptive/adaptive-dpr.mjs +0 -47
  312. package/esm2022/performance/lib/adaptive/adaptive-events.mjs +0 -37
  313. package/esm2022/performance/lib/detailed/detailed.mjs +0 -54
  314. package/esm2022/performance/lib/stats/stats.mjs +0 -80
  315. package/esm2022/shaders/lib/blur-pass/blur-pass.mjs +0 -61
  316. package/esm2022/shaders/lib/caustics-material/caustics-material.mjs +0 -128
  317. package/esm2022/shaders/lib/caustics-projection-material/caustics-projection-material.mjs +0 -33
  318. package/esm2022/shaders/lib/convolution-material/convolution-material.mjs +0 -94
  319. package/esm2022/shaders/lib/discard-material/discard-material.mjs +0 -3
  320. package/esm2022/shaders/lib/mesh-distort-material/mesh-distort-material.mjs +0 -55
  321. package/esm2022/shaders/lib/mesh-reflector-material/mesh-reflector-material.mjs +0 -223
  322. package/esm2022/shaders/lib/mesh-refraction-material/mesh-refraction-material.mjs +0 -169
  323. package/esm2022/shaders/lib/mesh-transmission-material/mesh-transmission-material.mjs +0 -268
  324. package/esm2022/shaders/lib/mesh-wobble-material/mesh-wobble-material.mjs +0 -37
  325. package/esm2022/shaders/lib/shader-material/shader-material.mjs +0 -34
  326. package/esm2022/shaders/lib/soft-shadow-material/soft-shadow-material.mjs +0 -33
  327. package/esm2022/shaders/lib/spot-light-material/spot-light-material.mjs +0 -86
  328. package/esm2022/shaders/lib/star-field-material/star-field-material.mjs +0 -32
  329. package/esm2022/staging/lib/accumulative-shadows/accumulative-shadows.mjs +0 -249
  330. package/esm2022/staging/lib/accumulative-shadows/progressive-light-map.mjs +0 -108
  331. package/esm2022/staging/lib/accumulative-shadows/randomized-lights.mjs +0 -201
  332. package/esm2022/staging/lib/bounds/bounds.mjs +0 -284
  333. package/esm2022/staging/lib/camera-shake/camera-shake.mjs +0 -122
  334. package/esm2022/staging/lib/caustics/caustics.mjs +0 -364
  335. package/esm2022/staging/lib/center/center.mjs +0 -143
  336. package/esm2022/staging/lib/cloud/cloud.mjs +0 -160
  337. package/esm2022/staging/lib/contact-shadows/contact-shadows.mjs +0 -228
  338. package/esm2022/staging/lib/environment/assets.mjs +0 -13
  339. package/esm2022/staging/lib/environment/environment-cube.mjs +0 -41
  340. package/esm2022/staging/lib/environment/environment-ground.mjs +0 -67
  341. package/esm2022/staging/lib/environment/environment-inputs.mjs +0 -87
  342. package/esm2022/staging/lib/environment/environment-map.mjs +0 -39
  343. package/esm2022/staging/lib/environment/environment-portal.mjs +0 -111
  344. package/esm2022/staging/lib/environment/environment.mjs +0 -165
  345. package/esm2022/staging/lib/environment/utils.mjs +0 -70
  346. package/esm2022/staging/lib/float/float.mjs +0 -77
  347. package/esm2022/staging/lib/sky/sky.mjs +0 -109
  348. package/esm2022/staging/lib/sparkles/sparkles.mjs +0 -210
  349. package/esm2022/staging/lib/spot-light/common.mjs +0 -42
  350. package/esm2022/staging/lib/spot-light/shadow-mesh-input.mjs +0 -51
  351. package/esm2022/staging/lib/spot-light/spot-light-input.mjs +0 -62
  352. package/esm2022/staging/lib/spot-light/spot-light-shadow-no-shader.mjs +0 -74
  353. package/esm2022/staging/lib/spot-light/spot-light-shadow-shader.mjs +0 -126
  354. package/esm2022/staging/lib/spot-light/spot-light-shadow.mjs +0 -63
  355. package/esm2022/staging/lib/spot-light/spot-light.mjs +0 -117
  356. package/esm2022/staging/lib/spot-light/volumetric-mesh.mjs +0 -86
  357. package/esm2022/staging/lib/stage/stage.mjs +0 -368
  358. package/esm2022/staging/lib/stars/stars.mjs +0 -140
  359. package/fesm2022/angular-three-soba-performance.mjs +0 -210
  360. package/fesm2022/angular-three-soba-performance.mjs.map +0 -1
  361. package/loaders/lib/cube-texture-loader/cube-texture-loader.d.ts +0 -3
  362. package/loaders/lib/gltf-loader/gltf-loader.d.ts +0 -8
  363. package/loaders/lib/loader/loader.d.ts +0 -26
  364. package/loaders/lib/progress/progress.d.ts +0 -16
  365. package/loaders/lib/texture-loader/texture-loader.d.ts +0 -5
  366. package/materials/lib/mesh-distort-material/mesh-distort-material.d.ts +0 -24
  367. package/materials/lib/mesh-reflector-material/mesh-reflector-material.d.ts +0 -41
  368. package/materials/lib/mesh-refraction-material/mesh-refraction-material.d.ts +0 -28
  369. package/materials/lib/mesh-transmission-material/mesh-transmission-material.d.ts +0 -46
  370. package/materials/lib/mesh-wobble-material/mesh-wobble-material.d.ts +0 -14
  371. package/misc/lib/animations/animations.d.ts +0 -13
  372. package/misc/lib/depth-buffer/depth-buffer.d.ts +0 -7
  373. package/performance/README.md +0 -3
  374. package/performance/index.d.ts +0 -4
  375. package/performance/lib/adaptive/adaptive-dpr.d.ts +0 -11
  376. package/performance/lib/detailed/detailed.d.ts +0 -13
  377. package/performance/lib/stats/stats.d.ts +0 -15
  378. package/plugin/README.md +0 -11
  379. package/plugin/generators.json +0 -19
  380. package/plugin/package.json +0 -9
  381. package/plugin/src/generators/init/compat.d.ts +0 -2
  382. package/plugin/src/generators/init/compat.js +0 -6
  383. package/plugin/src/generators/init/compat.js.map +0 -1
  384. package/plugin/src/generators/init/init.d.ts +0 -4
  385. package/plugin/src/generators/init/init.js +0 -22
  386. package/plugin/src/generators/init/init.js.map +0 -1
  387. package/plugin/src/generators/init/schema.json +0 -6
  388. package/plugin/src/index.d.ts +0 -1
  389. package/plugin/src/index.js +0 -6
  390. package/plugin/src/index.js.map +0 -1
  391. package/shaders/lib/soft-shadow-material/soft-shadow-material.d.ts +0 -10
  392. package/shaders/lib/spot-light-material/spot-light-material.d.ts +0 -4
  393. package/shaders/lib/star-field-material/star-field-material.d.ts +0 -3
  394. package/staging/lib/accumulative-shadows/accumulative-shadows.d.ts +0 -58
  395. package/staging/lib/accumulative-shadows/randomized-lights.d.ts +0 -42
  396. package/staging/lib/bounds/bounds.d.ts +0 -48
  397. package/staging/lib/camera-shake/camera-shake.d.ts +0 -28
  398. package/staging/lib/caustics/caustics.d.ts +0 -47
  399. package/staging/lib/center/center.d.ts +0 -40
  400. package/staging/lib/cloud/cloud.d.ts +0 -23
  401. package/staging/lib/contact-shadows/contact-shadows.d.ts +0 -29
  402. package/staging/lib/environment/environment-cube.d.ts +0 -11
  403. package/staging/lib/environment/environment-ground.d.ts +0 -9
  404. package/staging/lib/environment/environment-inputs.d.ts +0 -28
  405. package/staging/lib/environment/environment-map.d.ts +0 -10
  406. package/staging/lib/environment/environment-portal.d.ts +0 -15
  407. package/staging/lib/environment/utils.d.ts +0 -8
  408. package/staging/lib/float/float.d.ts +0 -16
  409. package/staging/lib/sky/sky.d.ts +0 -20
  410. package/staging/lib/sparkles/sparkles.d.ts +0 -29
  411. package/staging/lib/spot-light/common.d.ts +0 -3
  412. package/staging/lib/spot-light/shadow-mesh-input.d.ts +0 -14
  413. package/staging/lib/spot-light/spot-light-input.d.ts +0 -16
  414. package/staging/lib/spot-light/spot-light-shadow-no-shader.d.ts +0 -14
  415. package/staging/lib/spot-light/spot-light-shadow-shader.d.ts +0 -25
  416. package/staging/lib/spot-light/spot-light-shadow.d.ts +0 -6
  417. package/staging/lib/spot-light/spot-light.d.ts +0 -17
  418. package/staging/lib/spot-light/volumetric-mesh.d.ts +0 -15
  419. package/staging/lib/stage/stage.d.ts +0 -87
  420. package/staging/lib/stars/stars.d.ts +0 -20
  421. /package/shaders/{lib/caustics-material → caustics}/caustics-material.d.ts +0 -0
  422. /package/shaders/{lib/caustics-projection-material → caustics}/caustics-projection-material.d.ts +0 -0
  423. /package/shaders/{lib/convolution-material → convolution-material}/convolution-material.d.ts +0 -0
  424. /package/shaders/{lib/discard-material → discard-material}/discard-material.d.ts +0 -0
  425. /package/shaders/{lib/mesh-reflector-material → mesh-reflector-material}/mesh-reflector-material.d.ts +0 -0
  426. /package/shaders/{lib/mesh-refraction-material → mesh-refraction-material}/mesh-refraction-material.d.ts +0 -0
@@ -0,0 +1,33 @@
1
+ import * as THREE from 'three';
2
+ import { shaderMaterial } from '../shader-material/shader-material';
3
+ export const SparklesMaterial = shaderMaterial({ time: 0, pixelRatio: 1 }, ` uniform float pixelRatio;
4
+ uniform float time;
5
+ attribute float size;
6
+ attribute float speed;
7
+ attribute float opacity;
8
+ attribute vec3 noise;
9
+ attribute vec3 color;
10
+ varying vec3 vColor;
11
+ varying float vOpacity;
12
+ void main() {
13
+ vec4 modelPosition = modelMatrix * vec4(position, 1.0);
14
+ modelPosition.y += sin(time * speed + modelPosition.x * noise.x * 100.0) * 0.2;
15
+ modelPosition.z += cos(time * speed + modelPosition.x * noise.y * 100.0) * 0.2;
16
+ modelPosition.x += cos(time * speed + modelPosition.x * noise.z * 100.0) * 0.2;
17
+ vec4 viewPosition = viewMatrix * modelPosition;
18
+ vec4 projectionPostion = projectionMatrix * viewPosition;
19
+ gl_Position = projectionPostion;
20
+ gl_PointSize = size * 25. * pixelRatio;
21
+ gl_PointSize *= (1.0 / - viewPosition.z);
22
+ vColor = color;
23
+ vOpacity = opacity;
24
+ }`, ` varying vec3 vColor;
25
+ varying float vOpacity;
26
+ void main() {
27
+ float distanceToCenter = distance(gl_PointCoord, vec2(0.5));
28
+ float strength = 0.05 / distanceToCenter - 0.1;
29
+ gl_FragColor = vec4(vColor, strength * vOpacity);
30
+ #include <tonemapping_fragment>
31
+ #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>
32
+ }`);
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcmtsZXMtbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc2hhZGVycy9zcmMvc3BhcmtsZXMtbWF0ZXJpYWwvc3BhcmtsZXMtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLGNBQWMsQ0FDN0MsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFDMUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQXFCSyxFQUNMOzs7Ozs7O2tCQU9pQixRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsb0JBQW9CO01BQzlHLENBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTmd0U2hhZGVyTWF0ZXJpYWwgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IHNoYWRlck1hdGVyaWFsIH0gZnJvbSAnLi4vc2hhZGVyLW1hdGVyaWFsL3NoYWRlci1tYXRlcmlhbCc7XG5cbmV4cG9ydCBjb25zdCBTcGFya2xlc01hdGVyaWFsID0gc2hhZGVyTWF0ZXJpYWwoXG5cdHsgdGltZTogMCwgcGl4ZWxSYXRpbzogMSB9LFxuXHRgIHVuaWZvcm0gZmxvYXQgcGl4ZWxSYXRpbztcbiAgICB1bmlmb3JtIGZsb2F0IHRpbWU7XG4gICAgYXR0cmlidXRlIGZsb2F0IHNpemU7XG4gICAgYXR0cmlidXRlIGZsb2F0IHNwZWVkO1xuICAgIGF0dHJpYnV0ZSBmbG9hdCBvcGFjaXR5O1xuICAgIGF0dHJpYnV0ZSB2ZWMzIG5vaXNlO1xuICAgIGF0dHJpYnV0ZSB2ZWMzIGNvbG9yO1xuICAgIHZhcnlpbmcgdmVjMyB2Q29sb3I7XG4gICAgdmFyeWluZyBmbG9hdCB2T3BhY2l0eTtcbiAgICB2b2lkIG1haW4oKSB7XG4gICAgICB2ZWM0IG1vZGVsUG9zaXRpb24gPSBtb2RlbE1hdHJpeCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gICAgICBtb2RlbFBvc2l0aW9uLnkgKz0gc2luKHRpbWUgKiBzcGVlZCArIG1vZGVsUG9zaXRpb24ueCAqIG5vaXNlLnggKiAxMDAuMCkgKiAwLjI7XG4gICAgICBtb2RlbFBvc2l0aW9uLnogKz0gY29zKHRpbWUgKiBzcGVlZCArIG1vZGVsUG9zaXRpb24ueCAqIG5vaXNlLnkgKiAxMDAuMCkgKiAwLjI7XG4gICAgICBtb2RlbFBvc2l0aW9uLnggKz0gY29zKHRpbWUgKiBzcGVlZCArIG1vZGVsUG9zaXRpb24ueCAqIG5vaXNlLnogKiAxMDAuMCkgKiAwLjI7XG4gICAgICB2ZWM0IHZpZXdQb3NpdGlvbiA9IHZpZXdNYXRyaXggKiBtb2RlbFBvc2l0aW9uO1xuICAgICAgdmVjNCBwcm9qZWN0aW9uUG9zdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiB2aWV3UG9zaXRpb247XG4gICAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25Qb3N0aW9uO1xuICAgICAgZ2xfUG9pbnRTaXplID0gc2l6ZSAqIDI1LiAqIHBpeGVsUmF0aW87XG4gICAgICBnbF9Qb2ludFNpemUgKj0gKDEuMCAvIC0gdmlld1Bvc2l0aW9uLnopO1xuICAgICAgdkNvbG9yID0gY29sb3I7XG4gICAgICB2T3BhY2l0eSA9IG9wYWNpdHk7XG4gICAgfWAsXG5cdGAgdmFyeWluZyB2ZWMzIHZDb2xvcjtcbiAgICB2YXJ5aW5nIGZsb2F0IHZPcGFjaXR5O1xuICAgIHZvaWQgbWFpbigpIHtcbiAgICAgIGZsb2F0IGRpc3RhbmNlVG9DZW50ZXIgPSBkaXN0YW5jZShnbF9Qb2ludENvb3JkLCB2ZWMyKDAuNSkpO1xuICAgICAgZmxvYXQgc3RyZW5ndGggPSAwLjA1IC8gZGlzdGFuY2VUb0NlbnRlciAtIDAuMTtcbiAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQodkNvbG9yLCBzdHJlbmd0aCAqIHZPcGFjaXR5KTtcbiAgICAgICNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cbiAgICAgICNpbmNsdWRlIDwke3BhcnNlSW50KFRIUkVFLlJFVklTSU9OLnJlcGxhY2UoL1xcRCsvZywgJycpKSA+PSAxNTQgPyAnY29sb3JzcGFjZV9mcmFnbWVudCcgOiAnZW5jb2RpbmdzX2ZyYWdtZW50J30+XG4gICAgfWAsXG4pO1xuXG5leHBvcnQgdHlwZSBOZ3RTcGFya2xlc01hdGVyaWFsU3RhdGUgPSB7XG5cdHRpbWU/OiBudW1iZXI7XG5cdHBpeGVsUmF0aW8/OiBudW1iZXI7XG59O1xuXG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuXHRcdC8qKlxuXHRcdCAqIEBleHRlbmRzIG5ndC1zaGFkZXItbWF0ZXJpYWxcblx0XHQgKi9cblx0XHQnbmd0LXNwYXJrbGVzLW1hdGVyaWFsJzogTmd0U3BhcmtsZXNNYXRlcmlhbFN0YXRlICYgTmd0U2hhZGVyTWF0ZXJpYWw7XG5cdH1cbn1cbiJdfQ==
@@ -0,0 +1,86 @@
1
+ import * as THREE from 'three';
2
+ export class SpotLightMaterial extends THREE.ShaderMaterial {
3
+ constructor() {
4
+ super({
5
+ uniforms: {
6
+ depth: { value: null },
7
+ opacity: { value: 1 },
8
+ attenuation: { value: 2.5 },
9
+ anglePower: { value: 12 },
10
+ spotPosition: { value: new THREE.Vector3(0, 0, 0) },
11
+ lightColor: { value: new THREE.Color('white') },
12
+ cameraNear: { value: 0 },
13
+ cameraFar: { value: 1 },
14
+ resolution: { value: new THREE.Vector2(0, 0) },
15
+ },
16
+ transparent: true,
17
+ depthWrite: false,
18
+ vertexShader: /* glsl */ `
19
+ varying vec3 vNormal;
20
+ varying vec3 vWorldPosition;
21
+ varying float vViewZ;
22
+ varying float vIntensity;
23
+ uniform vec3 spotPosition;
24
+ uniform float attenuation;
25
+
26
+ void main() {
27
+ // compute intensity
28
+ vNormal = normalize( normalMatrix * normal );
29
+ vec4 worldPosition = modelMatrix * vec4( position, 1.0 );
30
+ vWorldPosition = worldPosition.xyz;
31
+ vec4 viewPosition = viewMatrix * worldPosition;
32
+ vViewZ = viewPosition.z;
33
+ float intensity = distance(worldPosition.xyz, spotPosition) / attenuation;
34
+ intensity = 1.0 - clamp(intensity, 0.0, 1.0);
35
+ vIntensity = intensity;
36
+ // set gl_Position
37
+ gl_Position = projectionMatrix * viewPosition;
38
+
39
+ }`,
40
+ fragmentShader: /* glsl */ `
41
+ #include <packing>
42
+
43
+ varying vec3 vNormal;
44
+ varying vec3 vWorldPosition;
45
+ uniform vec3 lightColor;
46
+ uniform vec3 spotPosition;
47
+ uniform float attenuation;
48
+ uniform float anglePower;
49
+ uniform sampler2D depth;
50
+ uniform vec2 resolution;
51
+ uniform float cameraNear;
52
+ uniform float cameraFar;
53
+ varying float vViewZ;
54
+ varying float vIntensity;
55
+ uniform float opacity;
56
+
57
+ float readDepth( sampler2D depthSampler, vec2 coord ) {
58
+ float fragCoordZ = texture2D( depthSampler, coord ).x;
59
+ float viewZ = perspectiveDepthToViewZ(fragCoordZ, cameraNear, cameraFar);
60
+ return viewZ;
61
+ }
62
+
63
+ void main() {
64
+ float d = 1.0;
65
+ bool isSoft = resolution[0] > 0.0 && resolution[1] > 0.0;
66
+ if (isSoft) {
67
+ vec2 sUv = gl_FragCoord.xy / resolution;
68
+ d = readDepth(depth, sUv);
69
+ }
70
+ float intensity = vIntensity;
71
+ vec3 normal = vec3(vNormal.x, vNormal.y, abs(vNormal.z));
72
+ float angleIntensity = pow( dot(normal, vec3(0.0, 0.0, 1.0)), anglePower );
73
+ intensity *= angleIntensity;
74
+ // fades when z is close to sampled depth, meaning the cone is intersecting existing geometry
75
+ if (isSoft) {
76
+ intensity *= smoothstep(0., 1., vViewZ - d);
77
+ }
78
+ gl_FragColor = vec4(lightColor, intensity * opacity);
79
+
80
+ #include <tonemapping_fragment>
81
+ #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>
82
+ }`,
83
+ });
84
+ }
85
+ }
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdC1saWdodC1tYXRlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9zaGFkZXJzL3NyYy9zcG90LWxpZ2h0LW1hdGVyaWFsL3Nwb3QtbGlnaHQtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFL0IsTUFBTSxPQUFPLGlCQUFrQixTQUFRLEtBQUssQ0FBQyxjQUFjO0lBQzFEO1FBQ0MsS0FBSyxDQUFDO1lBQ0wsUUFBUSxFQUFFO2dCQUNULEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7Z0JBQ3RCLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7Z0JBQ3JCLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQzNCLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7Z0JBQ3pCLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtnQkFDbkQsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDL0MsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtnQkFDeEIsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtnQkFDdkIsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7YUFDOUM7WUFDRCxXQUFXLEVBQUUsSUFBSTtZQUNqQixVQUFVLEVBQUUsS0FBSztZQUNqQixZQUFZLEVBQUUsVUFBVSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFxQnBCO1lBQ0wsY0FBYyxFQUFFLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7bUJBeUNYLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxvQkFBb0I7UUFDN0c7U0FDTCxDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE5ndFNoYWRlck1hdGVyaWFsIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCBjbGFzcyBTcG90TGlnaHRNYXRlcmlhbCBleHRlbmRzIFRIUkVFLlNoYWRlck1hdGVyaWFsIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoe1xuXHRcdFx0dW5pZm9ybXM6IHtcblx0XHRcdFx0ZGVwdGg6IHsgdmFsdWU6IG51bGwgfSxcblx0XHRcdFx0b3BhY2l0eTogeyB2YWx1ZTogMSB9LFxuXHRcdFx0XHRhdHRlbnVhdGlvbjogeyB2YWx1ZTogMi41IH0sXG5cdFx0XHRcdGFuZ2xlUG93ZXI6IHsgdmFsdWU6IDEyIH0sXG5cdFx0XHRcdHNwb3RQb3NpdGlvbjogeyB2YWx1ZTogbmV3IFRIUkVFLlZlY3RvcjMoMCwgMCwgMCkgfSxcblx0XHRcdFx0bGlnaHRDb2xvcjogeyB2YWx1ZTogbmV3IFRIUkVFLkNvbG9yKCd3aGl0ZScpIH0sXG5cdFx0XHRcdGNhbWVyYU5lYXI6IHsgdmFsdWU6IDAgfSxcblx0XHRcdFx0Y2FtZXJhRmFyOiB7IHZhbHVlOiAxIH0sXG5cdFx0XHRcdHJlc29sdXRpb246IHsgdmFsdWU6IG5ldyBUSFJFRS5WZWN0b3IyKDAsIDApIH0sXG5cdFx0XHR9LFxuXHRcdFx0dHJhbnNwYXJlbnQ6IHRydWUsXG5cdFx0XHRkZXB0aFdyaXRlOiBmYWxzZSxcblx0XHRcdHZlcnRleFNoYWRlcjogLyogZ2xzbCAqLyBgXG4gICAgICB2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiAgICAgIHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiAgICAgIHZhcnlpbmcgZmxvYXQgdlZpZXdaO1xuICAgICAgdmFyeWluZyBmbG9hdCB2SW50ZW5zaXR5O1xuICAgICAgdW5pZm9ybSB2ZWMzIHNwb3RQb3NpdGlvbjtcbiAgICAgIHVuaWZvcm0gZmxvYXQgYXR0ZW51YXRpb247XG5cbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgLy8gY29tcHV0ZSBpbnRlbnNpdHlcbiAgICAgICAgdk5vcm1hbCA9IG5vcm1hbGl6ZSggbm9ybWFsTWF0cml4ICogbm9ybWFsICk7XG4gICAgICAgIHZlYzQgd29ybGRQb3NpdGlvblx0PSBtb2RlbE1hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcbiAgICAgICAgdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcbiAgICAgICAgdmVjNCB2aWV3UG9zaXRpb24gPSB2aWV3TWF0cml4ICogd29ybGRQb3NpdGlvbjtcbiAgICAgICAgdlZpZXdaID0gdmlld1Bvc2l0aW9uLno7XG4gICAgICAgIGZsb2F0IGludGVuc2l0eVx0PSBkaXN0YW5jZSh3b3JsZFBvc2l0aW9uLnh5eiwgc3BvdFBvc2l0aW9uKSAvIGF0dGVudWF0aW9uO1xuICAgICAgICBpbnRlbnNpdHlcdD0gMS4wIC0gY2xhbXAoaW50ZW5zaXR5LCAwLjAsIDEuMCk7XG4gICAgICAgIHZJbnRlbnNpdHkgPSBpbnRlbnNpdHk7XG4gICAgICAgIC8vIHNldCBnbF9Qb3NpdGlvblxuICAgICAgICBnbF9Qb3NpdGlvblx0PSBwcm9qZWN0aW9uTWF0cml4ICogdmlld1Bvc2l0aW9uO1xuXG4gICAgICB9YCxcblx0XHRcdGZyYWdtZW50U2hhZGVyOiAvKiBnbHNsICovIGBcbiAgICAgICNpbmNsdWRlIDxwYWNraW5nPlxuXG4gICAgICB2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiAgICAgIHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiAgICAgIHVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xuICAgICAgdW5pZm9ybSB2ZWMzIHNwb3RQb3NpdGlvbjtcbiAgICAgIHVuaWZvcm0gZmxvYXQgYXR0ZW51YXRpb247XG4gICAgICB1bmlmb3JtIGZsb2F0IGFuZ2xlUG93ZXI7XG4gICAgICB1bmlmb3JtIHNhbXBsZXIyRCBkZXB0aDtcbiAgICAgIHVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xuICAgICAgdW5pZm9ybSBmbG9hdCBjYW1lcmFOZWFyO1xuICAgICAgdW5pZm9ybSBmbG9hdCBjYW1lcmFGYXI7XG4gICAgICB2YXJ5aW5nIGZsb2F0IHZWaWV3WjtcbiAgICAgIHZhcnlpbmcgZmxvYXQgdkludGVuc2l0eTtcbiAgICAgIHVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcblxuICAgICAgZmxvYXQgcmVhZERlcHRoKCBzYW1wbGVyMkQgZGVwdGhTYW1wbGVyLCB2ZWMyIGNvb3JkICkge1xuICAgICAgICBmbG9hdCBmcmFnQ29vcmRaID0gdGV4dHVyZTJEKCBkZXB0aFNhbXBsZXIsIGNvb3JkICkueDtcbiAgICAgICAgZmxvYXQgdmlld1ogPSBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WihmcmFnQ29vcmRaLCBjYW1lcmFOZWFyLCBjYW1lcmFGYXIpO1xuICAgICAgICByZXR1cm4gdmlld1o7XG4gICAgICB9XG5cbiAgICAgIHZvaWQgbWFpbigpIHtcbiAgICAgICAgZmxvYXQgZCA9IDEuMDtcbiAgICAgICAgYm9vbCBpc1NvZnQgPSByZXNvbHV0aW9uWzBdID4gMC4wICYmIHJlc29sdXRpb25bMV0gPiAwLjA7XG4gICAgICAgIGlmIChpc1NvZnQpIHtcbiAgICAgICAgICB2ZWMyIHNVdiA9IGdsX0ZyYWdDb29yZC54eSAvIHJlc29sdXRpb247XG4gICAgICAgICAgZCA9IHJlYWREZXB0aChkZXB0aCwgc1V2KTtcbiAgICAgICAgfVxuICAgICAgICBmbG9hdCBpbnRlbnNpdHkgPSB2SW50ZW5zaXR5O1xuICAgICAgICB2ZWMzIG5vcm1hbFx0PSB2ZWMzKHZOb3JtYWwueCwgdk5vcm1hbC55LCBhYnModk5vcm1hbC56KSk7XG4gICAgICAgIGZsb2F0IGFuZ2xlSW50ZW5zaXR5XHQ9IHBvdyggZG90KG5vcm1hbCwgdmVjMygwLjAsIDAuMCwgMS4wKSksIGFuZ2xlUG93ZXIgKTtcbiAgICAgICAgaW50ZW5zaXR5XHQqPSBhbmdsZUludGVuc2l0eTtcbiAgICAgICAgLy8gZmFkZXMgd2hlbiB6IGlzIGNsb3NlIHRvIHNhbXBsZWQgZGVwdGgsIG1lYW5pbmcgdGhlIGNvbmUgaXMgaW50ZXJzZWN0aW5nIGV4aXN0aW5nIGdlb21ldHJ5XG4gICAgICAgIGlmIChpc1NvZnQpIHtcbiAgICAgICAgICBpbnRlbnNpdHlcdCo9IHNtb290aHN0ZXAoMC4sIDEuLCB2Vmlld1ogLSBkKTtcbiAgICAgICAgfVxuICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGxpZ2h0Q29sb3IsIGludGVuc2l0eSAqIG9wYWNpdHkpO1xuXG4gICAgICAgICNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0ICAgICAgI2luY2x1ZGUgPCR7cGFyc2VJbnQoVEhSRUUuUkVWSVNJT04ucmVwbGFjZSgvXFxEKy9nLCAnJykpID49IDE1NCA/ICdjb2xvcnNwYWNlX2ZyYWdtZW50JyA6ICdlbmNvZGluZ3NfZnJhZ21lbnQnfT5cbiAgICAgIH1gLFxuXHRcdH0pO1xuXHR9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG5cdFx0LyoqXG5cdFx0ICogQGV4dGVuZHMgbmd0LXNoYWRlci1tYXRlcmlhbFxuXHRcdCAqL1xuXHRcdCduZ3Qtc3BvdC1saWdodC1tYXRlcmlhbCc6IE5ndFNoYWRlck1hdGVyaWFsO1xuXHR9XG59XG4iXX0=
@@ -0,0 +1,33 @@
1
+ import * as THREE from 'three';
2
+ import { shaderMaterial } from '../shader-material/shader-material';
3
+ export const StarFieldMaterial = shaderMaterial({ time: 0.0, fade: 0.0 },
4
+ // language=GLSL
5
+ `
6
+ uniform float time;
7
+ attribute float size;
8
+ varying vec3 vColor;
9
+ void main() {
10
+ vColor = color;
11
+ vec4 mvPosition = modelViewMatrix * vec4(position, 0.5);
12
+ gl_PointSize = size * (30.0 / -mvPosition.z) * (3.0 + sin(time + 100.0));
13
+ gl_Position = projectionMatrix * mvPosition;
14
+ }
15
+ `,
16
+ // language=GLSL
17
+ `
18
+ uniform sampler2D pointTexture;
19
+ uniform float fade;
20
+ varying vec3 vColor;
21
+ void main() {
22
+ float opacity = 1.0;
23
+ if (fade == 1.0) {
24
+ float d = distance(gl_PointCoord, vec2(0.5, 0.5));
25
+ opacity = 1.0 / (1.0 + exp(16.0 * (d - 0.25)));
26
+ }
27
+ gl_FragColor = vec4(vColor, opacity);
28
+
29
+ #include <tonemapping_fragment>
30
+ #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>
31
+ }
32
+ `);
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rhci1maWVsZC1tYXRlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9zaGFkZXJzL3NyYy9zdGFyLWZpZWxkLW1hdGVyaWFsL3N0YXItZmllbGQtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLGNBQWMsQ0FDOUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7QUFDeEIsZ0JBQWdCO0FBQ2hCOzs7Ozs7Ozs7O0dBVUU7QUFDRixnQkFBZ0I7QUFDaEI7Ozs7Ozs7Ozs7Ozs7YUFhWSxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsb0JBQW9COztHQUU1RyxDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE5ndFNoYWRlck1hdGVyaWFsIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBzaGFkZXJNYXRlcmlhbCB9IGZyb20gJy4uL3NoYWRlci1tYXRlcmlhbC9zaGFkZXItbWF0ZXJpYWwnO1xuXG5leHBvcnQgY29uc3QgU3RhckZpZWxkTWF0ZXJpYWwgPSBzaGFkZXJNYXRlcmlhbChcblx0eyB0aW1lOiAwLjAsIGZhZGU6IDAuMCB9LFxuXHQvLyBsYW5ndWFnZT1HTFNMXG5cdGBcbnVuaWZvcm0gZmxvYXQgdGltZTtcbmF0dHJpYnV0ZSBmbG9hdCBzaXplO1xudmFyeWluZyB2ZWMzIHZDb2xvcjtcbnZvaWQgbWFpbigpIHtcbiAgdkNvbG9yID0gY29sb3I7XG4gIHZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQocG9zaXRpb24sIDAuNSk7XG4gIGdsX1BvaW50U2l6ZSA9IHNpemUgKiAoMzAuMCAvIC1tdlBvc2l0aW9uLnopICogKDMuMCArIHNpbih0aW1lICsgMTAwLjApKTtcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtcbn1cbiAgYCxcblx0Ly8gbGFuZ3VhZ2U9R0xTTFxuXHRgXG51bmlmb3JtIHNhbXBsZXIyRCBwb2ludFRleHR1cmU7XG51bmlmb3JtIGZsb2F0IGZhZGU7XG52YXJ5aW5nIHZlYzMgdkNvbG9yO1xudm9pZCBtYWluKCkge1xuICBmbG9hdCBvcGFjaXR5ID0gMS4wO1xuICBpZiAoZmFkZSA9PSAxLjApIHtcbiAgICBmbG9hdCBkID0gZGlzdGFuY2UoZ2xfUG9pbnRDb29yZCwgdmVjMigwLjUsIDAuNSkpO1xuICAgIG9wYWNpdHkgPSAxLjAgLyAoMS4wICsgZXhwKDE2LjAgKiAoZCAtIDAuMjUpKSk7XG4gIH1cbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh2Q29sb3IsIG9wYWNpdHkpO1xuXG4gICNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPCR7cGFyc2VJbnQoVEhSRUUuUkVWSVNJT04ucmVwbGFjZSgvXFxEKy9nLCAnJykpID49IDE1NCA/ICdjb2xvcnNwYWNlX2ZyYWdtZW50JyA6ICdlbmNvZGluZ3NfZnJhZ21lbnQnfT5cbn1cbiAgYCxcbik7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG5cdFx0LyoqXG5cdFx0ICogQGV4dGVuZHMgbmd0LXNoYWRlci1tYXRlcmlhbFxuXHRcdCAqL1xuXHRcdCduZ3Qtc3Rhci1maWVsZC1tYXRlcmlhbCc6IE5ndFNoYWRlck1hdGVyaWFsO1xuXHR9XG59XG4iXX0=
@@ -0,0 +1,247 @@
1
+ import { computed, effect, runInInjectionContext } from '@angular/core';
2
+ import { assertInjectionContext } from 'angular-three';
3
+ import * as THREE from 'three';
4
+ import { shaderMaterial } from '../shader-material/shader-material';
5
+ export const WireframeMaterialShaders = {
6
+ uniforms: {
7
+ strokeOpacity: 1,
8
+ fillOpacity: 0.25,
9
+ fillMix: 0,
10
+ thickness: 0.05,
11
+ colorBackfaces: false,
12
+ dashInvert: true,
13
+ dash: false,
14
+ dashRepeats: 4,
15
+ dashLength: 0.5,
16
+ squeeze: false,
17
+ squeezeMin: 0.2,
18
+ squeezeMax: 1,
19
+ stroke: new THREE.Color('#ff0000'),
20
+ backfaceStroke: new THREE.Color('#0000ff'),
21
+ fill: new THREE.Color('#00ff00'),
22
+ },
23
+ vertex: /* glsl */ `
24
+ attribute vec3 barycentric;
25
+
26
+ varying vec3 v_edges_Barycentric;
27
+ varying vec3 v_edges_Position;
28
+
29
+ void initWireframe() {
30
+ v_edges_Barycentric = barycentric;
31
+ v_edges_Position = position.xyz;
32
+ }
33
+ `,
34
+ fragment: /* glsl */ `
35
+ #ifndef PI
36
+ #define PI 3.1415926535897932384626433832795
37
+ #endif
38
+
39
+ varying vec3 v_edges_Barycentric;
40
+ varying vec3 v_edges_Position;
41
+
42
+ uniform float strokeOpacity;
43
+ uniform float fillOpacity;
44
+ uniform float fillMix;
45
+ uniform float thickness;
46
+ uniform bool colorBackfaces;
47
+
48
+ // Dash
49
+ uniform bool dashInvert;
50
+ uniform bool dash;
51
+ uniform bool dashOnly;
52
+ uniform float dashRepeats;
53
+ uniform float dashLength;
54
+
55
+ // Squeeze
56
+ uniform bool squeeze;
57
+ uniform float squeezeMin;
58
+ uniform float squeezeMax;
59
+
60
+ // Colors
61
+ uniform vec3 stroke;
62
+ uniform vec3 backfaceStroke;
63
+ uniform vec3 fill;
64
+
65
+ // This is like
66
+ float wireframe_aastep(float threshold, float dist) {
67
+ float afwidth = fwidth(dist) * 0.5;
68
+ return smoothstep(threshold - afwidth, threshold + afwidth, dist);
69
+ }
70
+
71
+ float wireframe_map(float value, float min1, float max1, float min2, float max2) {
72
+ return min2 + (value - min1) * (max2 - min2) / (max1 - min1);
73
+ }
74
+
75
+ float getWireframe() {
76
+ vec3 barycentric = v_edges_Barycentric;
77
+
78
+ // Distance from center of each triangle to its edges.
79
+ float d = min(min(barycentric.x, barycentric.y), barycentric.z);
80
+
81
+ // for dashed rendering, we can use this to get the 0 .. 1 value of the line length
82
+ float positionAlong = max(barycentric.x, barycentric.y);
83
+ if (barycentric.y < barycentric.x && barycentric.y < barycentric.z) {
84
+ positionAlong = 1.0 - positionAlong;
85
+ }
86
+
87
+ // the thickness of the stroke
88
+ float computedThickness = wireframe_map(thickness, 0.0, 1.0, 0.0, 0.34);
89
+
90
+ // if we want to shrink the thickness toward the center of the line segment
91
+ if (squeeze) {
92
+ computedThickness *= mix(squeezeMin, squeezeMax, (1.0 - sin(positionAlong * PI)));
93
+ }
94
+
95
+ // Create dash pattern
96
+ if (dash) {
97
+ // here we offset the stroke position depending on whether it
98
+ // should overlap or not
99
+ float offset = 1.0 / dashRepeats * dashLength / 2.0;
100
+ if (!dashInvert) {
101
+ offset += 1.0 / dashRepeats / 2.0;
102
+ }
103
+
104
+ // if we should animate the dash or not
105
+ // if (dashAnimate) {
106
+ // offset += time * 0.22;
107
+ // }
108
+
109
+ // create the repeating dash pattern
110
+ float pattern = fract((positionAlong + offset) * dashRepeats);
111
+ computedThickness *= 1.0 - wireframe_aastep(dashLength, pattern);
112
+ }
113
+
114
+ // compute the anti-aliased stroke edge
115
+ float edge = 1.0 - wireframe_aastep(computedThickness, d);
116
+
117
+ return edge;
118
+ }
119
+ `,
120
+ };
121
+ export const WireframeMaterial = shaderMaterial(WireframeMaterialShaders.uniforms, WireframeMaterialShaders.vertex +
122
+ /* glsl */ `
123
+ void main() {
124
+ initWireframe();
125
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
126
+ }
127
+ `, WireframeMaterialShaders.fragment +
128
+ /* glsl */ `
129
+ void main () {
130
+ // Compute color
131
+
132
+ float edge = getWireframe();
133
+ vec4 colorStroke = vec4(stroke, edge);
134
+
135
+ #ifdef FLIP_SIDED
136
+ colorStroke.rgb = backfaceStroke;
137
+ #endif
138
+
139
+ vec4 colorFill = vec4(fill, fillOpacity);
140
+ vec4 outColor = mix(colorFill, colorStroke, edge * strokeOpacity);
141
+
142
+ gl_FragColor = outColor;
143
+ }
144
+ `);
145
+ export function setWireframeOverride(material, uniforms) {
146
+ material.onBeforeCompile = (shader) => {
147
+ shader.uniforms = {
148
+ ...shader.uniforms,
149
+ ...uniforms,
150
+ };
151
+ shader.vertexShader = shader.vertexShader.replace('void main() {', `
152
+ ${WireframeMaterialShaders.vertex}
153
+ void main() {
154
+ initWireframe();
155
+ `);
156
+ shader.fragmentShader = shader.fragmentShader.replace('void main() {', `
157
+ ${WireframeMaterialShaders.fragment}
158
+ void main() {
159
+ `);
160
+ shader.fragmentShader = shader.fragmentShader.replace('#include <color_fragment>',
161
+ /* glsl */ `
162
+ #include <color_fragment>
163
+ float edge = getWireframe();
164
+ vec4 colorStroke = vec4(stroke, edge);
165
+ #ifdef FLIP_SIDED
166
+ colorStroke.rgb = backfaceStroke;
167
+ #endif
168
+ vec4 colorFill = vec4(mix(diffuseColor.rgb, fill, fillMix), mix(diffuseColor.a, fillOpacity, fillMix));
169
+ vec4 outColor = mix(colorFill, colorStroke, edge * strokeOpacity);
170
+
171
+ diffuseColor.rgb = outColor.rgb;
172
+ diffuseColor.a *= outColor.a;
173
+ `);
174
+ };
175
+ material.side = THREE.DoubleSide;
176
+ material.transparent = true;
177
+ }
178
+ export function injectNgtsWireframeUniforms(uniformsFactory, stateFactory, { injector } = {}) {
179
+ injector = assertInjectionContext(injectNgtsWireframeUniforms, injector);
180
+ return runInInjectionContext(injector, () => {
181
+ const uniforms = uniformsFactory();
182
+ const state = computed(() => stateFactory());
183
+ const fillOpacity = computed(() => state().fillOpacity);
184
+ const fillMix = computed(() => state().fillMix);
185
+ const strokeOpacity = computed(() => state().strokeOpacity);
186
+ const thickness = computed(() => state().thickness);
187
+ const colorBackfaces = computed(() => state().colorBackfaces);
188
+ const dash = computed(() => state().dash);
189
+ const dashInvert = computed(() => state().dashInvert);
190
+ const dashRepeats = computed(() => state().dashRepeats);
191
+ const dashLength = computed(() => state().dashLength);
192
+ const squeeze = computed(() => state().squeeze);
193
+ const squeezeMin = computed(() => state().squeezeMin);
194
+ const squeezeMax = computed(() => state().squeezeMax);
195
+ const stroke = computed(() => state().stroke);
196
+ const fill = computed(() => state().fill);
197
+ const backfaceStroke = computed(() => state().backfaceStroke);
198
+ effect(() => {
199
+ uniforms['fillOpacity'].value = fillOpacity() ?? uniforms['fillOpacity'].value;
200
+ });
201
+ effect(() => {
202
+ uniforms['fillMix'].value = fillMix() ?? uniforms['fillMix'].value;
203
+ });
204
+ effect(() => {
205
+ uniforms['strokeOpacity'].value = strokeOpacity() ?? uniforms['strokeOpacity'].value;
206
+ });
207
+ effect(() => {
208
+ uniforms['thickness'].value = thickness() ?? uniforms['thickness'].value;
209
+ });
210
+ effect(() => {
211
+ uniforms['colorBackfaces'].value = colorBackfaces() ?? uniforms['colorBackfaces'].value;
212
+ });
213
+ effect(() => {
214
+ uniforms['dash'].value = dash() ?? uniforms['dash'].value;
215
+ });
216
+ effect(() => {
217
+ uniforms['dashInvert'].value = dashInvert() ?? uniforms['dashInvert'].value;
218
+ });
219
+ effect(() => {
220
+ uniforms['dashRepeats'].value = dashRepeats() ?? uniforms['dashRepeats'].value;
221
+ });
222
+ effect(() => {
223
+ uniforms['dashLength'].value = dashLength() ?? uniforms['dashLength'].value;
224
+ });
225
+ effect(() => {
226
+ uniforms['squeeze'].value = squeeze() ?? uniforms['squeeze'].value;
227
+ });
228
+ effect(() => {
229
+ uniforms['squeezeMin'].value = squeezeMin() ?? uniforms['squeezeMin'].value;
230
+ });
231
+ effect(() => {
232
+ uniforms['squeezeMax'].value = squeezeMax() ?? uniforms['squeezeMax'].value;
233
+ });
234
+ effect(() => {
235
+ uniforms['stroke'].value = stroke() ? new THREE.Color(stroke()) : uniforms['stroke'].value;
236
+ });
237
+ effect(() => {
238
+ uniforms['fill'].value = fill() ? new THREE.Color(fill()) : uniforms['fill'].value;
239
+ });
240
+ effect(() => {
241
+ uniforms['backfaceStroke'].value = backfaceStroke()
242
+ ? new THREE.Color(backfaceStroke())
243
+ : uniforms['backfaceStroke'].value;
244
+ });
245
+ });
246
+ }
247
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lyZWZyYW1lLW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL3NoYWRlcnMvc3JjL3dpcmVmcmFtZS1tYXRlcmlhbC93aXJlZnJhbWUtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUscUJBQXFCLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxzQkFBc0IsRUFBMEIsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBb0JwRSxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRztJQUN2QyxRQUFRLEVBQUU7UUFDVCxhQUFhLEVBQUUsQ0FBQztRQUNoQixXQUFXLEVBQUUsSUFBSTtRQUNqQixPQUFPLEVBQUUsQ0FBQztRQUNWLFNBQVMsRUFBRSxJQUFJO1FBQ2YsY0FBYyxFQUFFLEtBQUs7UUFDckIsVUFBVSxFQUFFLElBQUk7UUFDaEIsSUFBSSxFQUFFLEtBQUs7UUFDWCxXQUFXLEVBQUUsQ0FBQztRQUNkLFVBQVUsRUFBRSxHQUFHO1FBQ2YsT0FBTyxFQUFFLEtBQUs7UUFDZCxVQUFVLEVBQUUsR0FBRztRQUNmLFVBQVUsRUFBRSxDQUFDO1FBQ2IsTUFBTSxFQUFFLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDbEMsY0FBYyxFQUFFLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDMUMsSUFBSSxFQUFFLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7S0FDaEM7SUFDRCxNQUFNLEVBQUUsVUFBVSxDQUFDOzs7Ozs7Ozs7O0lBVWhCO0lBQ0gsUUFBUSxFQUFFLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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LENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCBlZmZlY3QsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCwgdHlwZSBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0aW9uQ29udGV4dCwgdHlwZSBOZ3RTaGFkZXJNYXRlcmlhbCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgc2hhZGVyTWF0ZXJpYWwgfSBmcm9tICcuLi9zaGFkZXItbWF0ZXJpYWwvc2hhZGVyLW1hdGVyaWFsJztcblxuZXhwb3J0IHR5cGUgV2lyZWZyYW1lTWF0ZXJpYWxTdGF0ZSA9IHtcblx0ZmlsbE9wYWNpdHk/OiBudW1iZXI7XG5cdGZpbGxNaXg/OiBudW1iZXI7XG5cdHN0cm9rZU9wYWNpdHk/OiBudW1iZXI7XG5cdHRoaWNrbmVzcz86IG51bWJlcjtcblx0Y29sb3JCYWNrZmFjZXM/OiBib29sZWFuO1xuXHRkYXNoSW52ZXJ0PzogYm9vbGVhbjtcblx0ZGFzaD86IGJvb2xlYW47XG5cdGRhc2hSZXBlYXRzPzogbnVtYmVyO1xuXHRkYXNoTGVuZ3RoPzogbnVtYmVyO1xuXHRzcXVlZXplPzogYm9vbGVhbjtcblx0c3F1ZWV6ZU1pbj86IG51bWJlcjtcblx0c3F1ZWV6ZU1heD86IG51bWJlcjtcblx0c3Ryb2tlPzogVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbjtcblx0YmFja2ZhY2VTdHJva2U/OiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uO1xuXHRmaWxsPzogVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBXaXJlZnJhbWVNYXRlcmlhbFNoYWRlcnMgPSB7XG5cdHVuaWZvcm1zOiB7XG5cdFx0c3Ryb2tlT3BhY2l0eTogMSxcblx0XHRmaWxsT3BhY2l0eTogMC4yNSxcblx0XHRmaWxsTWl4OiAwLFxuXHRcdHRoaWNrbmVzczogMC4wNSxcblx0XHRjb2xvckJhY2tmYWNlczogZmFsc2UsXG5cdFx0ZGFzaEludmVydDogdHJ1ZSxcblx0XHRkYXNoOiBmYWxzZSxcblx0XHRkYXNoUmVwZWF0czogNCxcblx0XHRkYXNoTGVuZ3RoOiAwLjUsXG5cdFx0c3F1ZWV6ZTogZmFsc2UsXG5cdFx0c3F1ZWV6ZU1pbjogMC4yLFxuXHRcdHNxdWVlemVNYXg6IDEsXG5cdFx0c3Ryb2tlOiBuZXcgVEhSRUUuQ29sb3IoJyNmZjAwMDAnKSxcblx0XHRiYWNrZmFjZVN0cm9rZTogbmV3IFRIUkVFLkNvbG9yKCcjMDAwMGZmJyksXG5cdFx0ZmlsbDogbmV3IFRIUkVFLkNvbG9yKCcjMDBmZjAwJyksXG5cdH0sXG5cdHZlcnRleDogLyogZ2xzbCAqLyBgXG5cdCAgYXR0cmlidXRlIHZlYzMgYmFyeWNlbnRyaWM7XG5cblx0XHR2YXJ5aW5nIHZlYzMgdl9lZGdlc19CYXJ5Y2VudHJpYztcblx0XHR2YXJ5aW5nIHZlYzMgdl9lZGdlc19Qb3NpdGlvbjtcblxuXHRcdHZvaWQgaW5pdFdpcmVmcmFtZSgpIHtcblx0XHRcdHZfZWRnZXNfQmFyeWNlbnRyaWMgPSBiYXJ5Y2VudHJpYztcblx0XHRcdHZfZWRnZXNfUG9zaXRpb24gPSBwb3NpdGlvbi54eXo7XG5cdFx0fVxuXHQgIGAsXG5cdGZyYWdtZW50OiAvKiBnbHNsICovIGBcblx0XHQjaWZuZGVmIFBJXG5cdCAgXHQjZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NVxuXHRcdCNlbmRpZlxuXG5cdCAgdmFyeWluZyB2ZWMzIHZfZWRnZXNfQmFyeWNlbnRyaWM7XG5cdCAgdmFyeWluZyB2ZWMzIHZfZWRnZXNfUG9zaXRpb247XG5cblx0ICB1bmlmb3JtIGZsb2F0IHN0cm9rZU9wYWNpdHk7XG5cdCAgdW5pZm9ybSBmbG9hdCBmaWxsT3BhY2l0eTtcblx0ICB1bmlmb3JtIGZsb2F0IGZpbGxNaXg7XG5cdCAgdW5pZm9ybSBmbG9hdCB0aGlja25lc3M7XG5cdCAgdW5pZm9ybSBib29sIGNvbG9yQmFja2ZhY2VzO1xuXG5cdCAgLy8gRGFzaFxuXHQgIHVuaWZvcm0gYm9vbCBkYXNoSW52ZXJ0O1xuXHQgIHVuaWZvcm0gYm9vbCBkYXNoO1xuXHQgIHVuaWZvcm0gYm9vbCBkYXNoT25seTtcblx0ICB1bmlmb3JtIGZsb2F0IGRhc2hSZXBlYXRzO1xuXHQgIHVuaWZvcm0gZmxvYXQgZGFzaExlbmd0aDtcblxuXHQgIC8vIFNxdWVlemVcblx0ICB1bmlmb3JtIGJvb2wgc3F1ZWV6ZTtcblx0ICB1bmlmb3JtIGZsb2F0IHNxdWVlemVNaW47XG5cdCAgdW5pZm9ybSBmbG9hdCBzcXVlZXplTWF4O1xuXG5cdCAgLy8gQ29sb3JzXG5cdCAgdW5pZm9ybSB2ZWMzIHN0cm9rZTtcblx0ICB1bmlmb3JtIHZlYzMgYmFja2ZhY2VTdHJva2U7XG5cdCAgdW5pZm9ybSB2ZWMzIGZpbGw7XG5cblx0ICAvLyBUaGlzIGlzIGxpa2Vcblx0ICBmbG9hdCB3aXJlZnJhbWVfYWFzdGVwKGZsb2F0IHRocmVzaG9sZCwgZmxvYXQgZGlzdCkge1xuXHRcdCAgZmxvYXQgYWZ3aWR0aCA9IGZ3aWR0aChkaXN0KSAqIDAuNTtcblx0XHQgIHJldHVybiBzbW9vdGhzdGVwKHRocmVzaG9sZCAtIGFmd2lkdGgsIHRocmVzaG9sZCArIGFmd2lkdGgsIGRpc3QpO1xuXHQgIH1cblxuXHQgIGZsb2F0IHdpcmVmcmFtZV9tYXAoZmxvYXQgdmFsdWUsIGZsb2F0IG1pbjEsIGZsb2F0IG1heDEsIGZsb2F0IG1pbjIsIGZsb2F0IG1heDIpIHtcblx0XHQgIHJldHVybiBtaW4yICsgKHZhbHVlIC0gbWluMSkgKiAobWF4MiAtIG1pbjIpIC8gKG1heDEgLSBtaW4xKTtcblx0ICB9XG5cblx0ICBmbG9hdCBnZXRXaXJlZnJhbWUoKSB7XG5cdFx0XHR2ZWMzIGJhcnljZW50cmljID0gdl9lZGdlc19CYXJ5Y2VudHJpYztcblxuXHRcdFx0Ly8gRGlzdGFuY2UgZnJvbSBjZW50ZXIgb2YgZWFjaCB0cmlhbmdsZSB0byBpdHMgZWRnZXMuXG5cdFx0XHRmbG9hdCBkID0gbWluKG1pbihiYXJ5Y2VudHJpYy54LCBiYXJ5Y2VudHJpYy55KSwgYmFyeWNlbnRyaWMueik7XG5cblx0XHRcdC8vIGZvciBkYXNoZWQgcmVuZGVyaW5nLCB3ZSBjYW4gdXNlIHRoaXMgdG8gZ2V0IHRoZSAwIC4uIDEgdmFsdWUgb2YgdGhlIGxpbmUgbGVuZ3RoXG5cdFx0XHRmbG9hdCBwb3NpdGlvbkFsb25nID0gbWF4KGJhcnljZW50cmljLngsIGJhcnljZW50cmljLnkpO1xuXHRcdFx0aWYgKGJhcnljZW50cmljLnkgPCBiYXJ5Y2VudHJpYy54ICYmIGJhcnljZW50cmljLnkgPCBiYXJ5Y2VudHJpYy56KSB7XG5cdFx0XHRcdHBvc2l0aW9uQWxvbmcgPSAxLjAgLSBwb3NpdGlvbkFsb25nO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBzdHJva2Vcblx0XHRcdGZsb2F0IGNvbXB1dGVkVGhpY2tuZXNzID0gd2lyZWZyYW1lX21hcCh0aGlja25lc3MsIDAuMCwgMS4wLCAwLjAsIDAuMzQpO1xuXG5cdFx0XHQvLyBpZiB3ZSB3YW50IHRvIHNocmluayB0aGUgdGhpY2tuZXNzIHRvd2FyZCB0aGUgY2VudGVyIG9mIHRoZSBsaW5lIHNlZ21lbnRcblx0XHRcdGlmIChzcXVlZXplKSB7XG5cdFx0XHRcdGNvbXB1dGVkVGhpY2tuZXNzICo9IG1peChzcXVlZXplTWluLCBzcXVlZXplTWF4LCAoMS4wIC0gc2luKHBvc2l0aW9uQWxvbmcgKiBQSSkpKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ3JlYXRlIGRhc2ggcGF0dGVyblxuXHRcdFx0aWYgKGRhc2gpIHtcblx0XHRcdFx0Ly8gaGVyZSB3ZSBvZmZzZXQgdGhlIHN0cm9rZSBwb3NpdGlvbiBkZXBlbmRpbmcgb24gd2hldGhlciBpdFxuXHRcdFx0XHQvLyBzaG91bGQgb3ZlcmxhcCBvciBub3Rcblx0XHRcdFx0ZmxvYXQgb2Zmc2V0ID0gMS4wIC8gZGFzaFJlcGVhdHMgKiBkYXNoTGVuZ3RoIC8gMi4wO1xuXHRcdFx0XHRpZiAoIWRhc2hJbnZlcnQpIHtcblx0XHRcdFx0XHRvZmZzZXQgKz0gMS4wIC8gZGFzaFJlcGVhdHMgLyAyLjA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBpZiB3ZSBzaG91bGQgYW5pbWF0ZSB0aGUgZGFzaCBvciBub3Rcblx0XHRcdFx0Ly8gaWYgKGRhc2hBbmltYXRlKSB7XG5cdFx0XHRcdC8vIFx0b2Zmc2V0ICs9IHRpbWUgKiAwLjIyO1xuXHRcdFx0XHQvLyB9XG5cblx0XHRcdFx0Ly8gY3JlYXRlIHRoZSByZXBlYXRpbmcgZGFzaCBwYXR0ZXJuXG5cdFx0XHRcdGZsb2F0IHBhdHRlcm4gPSBmcmFjdCgocG9zaXRpb25BbG9uZyArIG9mZnNldCkgKiBkYXNoUmVwZWF0cyk7XG5cdFx0XHRcdGNvbXB1dGVkVGhpY2tuZXNzICo9IDEuMCAtIHdpcmVmcmFtZV9hYXN0ZXAoZGFzaExlbmd0aCwgcGF0dGVybik7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGNvbXB1dGUgdGhlIGFudGktYWxpYXNlZCBzdHJva2UgZWRnZVxuXHRcdFx0ZmxvYXQgZWRnZSA9IDEuMCAtIHdpcmVmcmFtZV9hYXN0ZXAoY29tcHV0ZWRUaGlja25lc3MsIGQpO1xuXG5cdFx0XHRyZXR1cm4gZWRnZTtcblx0ICB9XG5cdCAgYCxcbn07XG5cbmV4cG9ydCBjb25zdCBXaXJlZnJhbWVNYXRlcmlhbCA9IHNoYWRlck1hdGVyaWFsKFxuXHRXaXJlZnJhbWVNYXRlcmlhbFNoYWRlcnMudW5pZm9ybXMsXG5cdFdpcmVmcmFtZU1hdGVyaWFsU2hhZGVycy52ZXJ0ZXggK1xuXHRcdC8qIGdsc2wgKi8gYFxuICBcdHZvaWQgbWFpbigpIHtcblx0XHRpbml0V2lyZWZyYW1lKCk7XG5cdFx0Z2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbW9kZWxWaWV3TWF0cml4ICogdmVjNChwb3NpdGlvbiwgMS4wKTtcblx0fVxuICBgLFxuXHRXaXJlZnJhbWVNYXRlcmlhbFNoYWRlcnMuZnJhZ21lbnQgK1xuXHRcdC8qIGdsc2wgKi8gYFxuICB2b2lkIG1haW4gKCkge1xuXHRcdC8vIENvbXB1dGUgY29sb3JcblxuXHRcdGZsb2F0IGVkZ2UgPSBnZXRXaXJlZnJhbWUoKTtcblx0XHR2ZWM0IGNvbG9yU3Ryb2tlID0gdmVjNChzdHJva2UsIGVkZ2UpO1xuXG5cdFx0I2lmZGVmIEZMSVBfU0lERURcblx0XHRcdGNvbG9yU3Ryb2tlLnJnYiA9IGJhY2tmYWNlU3Ryb2tlO1xuXHRcdCNlbmRpZlxuXG5cdFx0dmVjNCBjb2xvckZpbGwgPSB2ZWM0KGZpbGwsIGZpbGxPcGFjaXR5KTtcblx0XHR2ZWM0IG91dENvbG9yID0gbWl4KGNvbG9yRmlsbCwgY29sb3JTdHJva2UsIGVkZ2UgKiBzdHJva2VPcGFjaXR5KTtcblxuXHRcdGdsX0ZyYWdDb2xvciA9IG91dENvbG9yO1xuXHR9XG4gIGAsXG4pO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuXHRcdC8qKlxuXHRcdCAqIEBleHRlbmRzIG5ndC1zaGFkZXItbWF0ZXJpYWxcblx0XHQgKi9cblx0XHQnbmd0LXdpcmVmcmFtZS1tYXRlcmlhbCc6IFdpcmVmcmFtZU1hdGVyaWFsU3RhdGUgJiBOZ3RTaGFkZXJNYXRlcmlhbDtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0V2lyZWZyYW1lT3ZlcnJpZGUoXG5cdG1hdGVyaWFsOiBUSFJFRS5NYXRlcmlhbCxcblx0dW5pZm9ybXM6IHtcblx0XHRba2V5OiBzdHJpbmddOiBUSFJFRS5JVW5pZm9ybTxhbnk+O1xuXHR9LFxuKSB7XG5cdG1hdGVyaWFsLm9uQmVmb3JlQ29tcGlsZSA9IChzaGFkZXIpID0+IHtcblx0XHRzaGFkZXIudW5pZm9ybXMgPSB7XG5cdFx0XHQuLi5zaGFkZXIudW5pZm9ybXMsXG5cdFx0XHQuLi51bmlmb3Jtcyxcblx0XHR9O1xuXG5cdFx0c2hhZGVyLnZlcnRleFNoYWRlciA9IHNoYWRlci52ZXJ0ZXhTaGFkZXIucmVwbGFjZShcblx0XHRcdCd2b2lkIG1haW4oKSB7Jyxcblx0XHRcdGBcblx0XHQgICR7V2lyZWZyYW1lTWF0ZXJpYWxTaGFkZXJzLnZlcnRleH1cblx0XHQgIHZvaWQgbWFpbigpIHtcblx0XHRcdGluaXRXaXJlZnJhbWUoKTtcblx0XHRgLFxuXHRcdCk7XG5cblx0XHRzaGFkZXIuZnJhZ21lbnRTaGFkZXIgPSBzaGFkZXIuZnJhZ21lbnRTaGFkZXIucmVwbGFjZShcblx0XHRcdCd2b2lkIG1haW4oKSB7Jyxcblx0XHRcdGBcblx0XHQgICR7V2lyZWZyYW1lTWF0ZXJpYWxTaGFkZXJzLmZyYWdtZW50fVxuXHRcdCAgdm9pZCBtYWluKCkge1xuXHRcdGAsXG5cdFx0KTtcblxuXHRcdHNoYWRlci5mcmFnbWVudFNoYWRlciA9IHNoYWRlci5mcmFnbWVudFNoYWRlci5yZXBsYWNlKFxuXHRcdFx0JyNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4nLFxuXHRcdFx0LyogZ2xzbCAqLyBgXG5cdFx0ICAjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdFx0XHQgIGZsb2F0IGVkZ2UgPSBnZXRXaXJlZnJhbWUoKTtcblx0XHQgIHZlYzQgY29sb3JTdHJva2UgPSB2ZWM0KHN0cm9rZSwgZWRnZSk7XG5cdFx0ICAjaWZkZWYgRkxJUF9TSURFRFxuXHRcdFx0ICBjb2xvclN0cm9rZS5yZ2IgPSBiYWNrZmFjZVN0cm9rZTtcblx0XHQgICNlbmRpZlxuXHRcdCAgdmVjNCBjb2xvckZpbGwgPSB2ZWM0KG1peChkaWZmdXNlQ29sb3IucmdiLCBmaWxsLCBmaWxsTWl4KSwgbWl4KGRpZmZ1c2VDb2xvci5hLCBmaWxsT3BhY2l0eSwgZmlsbE1peCkpO1xuXHRcdCAgdmVjNCBvdXRDb2xvciA9IG1peChjb2xvckZpbGwsIGNvbG9yU3Ryb2tlLCBlZGdlICogc3Ryb2tlT3BhY2l0eSk7XG5cblx0XHQgIGRpZmZ1c2VDb2xvci5yZ2IgPSBvdXRDb2xvci5yZ2I7XG5cdFx0ICBkaWZmdXNlQ29sb3IuYSAqPSBvdXRDb2xvci5hO1xuXHRcdGAsXG5cdFx0KTtcblx0fTtcblxuXHRtYXRlcmlhbC5zaWRlID0gVEhSRUUuRG91YmxlU2lkZTtcblx0bWF0ZXJpYWwudHJhbnNwYXJlbnQgPSB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Tmd0c1dpcmVmcmFtZVVuaWZvcm1zKFxuXHR1bmlmb3Jtc0ZhY3Rvcnk6ICgpID0+IFJlY29yZDxzdHJpbmcsIFRIUkVFLklVbmlmb3JtPGFueT4+LFxuXHRzdGF0ZUZhY3Rvcnk6ICgpID0+IFBhcnRpYWw8V2lyZWZyYW1lTWF0ZXJpYWxTdGF0ZT4sXG5cdHsgaW5qZWN0b3IgfTogeyBpbmplY3Rvcj86IEluamVjdG9yIH0gPSB7fSxcbikge1xuXHRpbmplY3RvciA9IGFzc2VydEluamVjdGlvbkNvbnRleHQoaW5qZWN0Tmd0c1dpcmVmcmFtZVVuaWZvcm1zLCBpbmplY3Rvcik7XG5cdHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCB1bmlmb3JtcyA9IHVuaWZvcm1zRmFjdG9yeSgpO1xuXHRcdGNvbnN0IHN0YXRlID0gY29tcHV0ZWQoKCkgPT4gc3RhdGVGYWN0b3J5KCkpO1xuXHRcdGNvbnN0IGZpbGxPcGFjaXR5ID0gY29tcHV0ZWQoKCkgPT4gc3RhdGUoKS5maWxsT3BhY2l0eSk7XG5cdFx0Y29uc3QgZmlsbE1peCA9IGNvbXB1dGVkKCgpID0+IHN0YXRlKCkuZmlsbE1peCk7XG5cdFx0Y29uc3Qgc3Ryb2tlT3BhY2l0eSA9IGNvbXB1dGVkKCgpID0+IHN0YXRlKCkuc3Ryb2tlT3BhY2l0eSk7XG5cdFx0Y29uc3QgdGhpY2tuZXNzID0gY29tcHV0ZWQoKCkgPT4gc3RhdGUoKS50aGlja25lc3MpO1xuXHRcdGNvbnN0IGNvbG9yQmFja2ZhY2VzID0gY29tcHV0ZWQoKCkgPT4gc3RhdGUoKS5jb2xvckJhY2tmYWNlcyk7XG5cdFx0Y29uc3QgZGFzaCA9IGNvbXB1dGVkKCgpID0+IHN0YXRlKCkuZGFzaCk7XG5cdFx0Y29uc3QgZGFzaEludmVydCA9IGNvbXB1dGVkKCgpID0+IHN0YXRlKCkuZGFzaEludmVydCk7XG5cdFx0Y29uc3QgZGFzaFJlcGVhdHMgPSBjb21wdXRlZCgoKSA9PiBzdGF0ZSgpLmRhc2hSZXBlYXRzKTtcblx0XHRjb25zdCBkYXNoTGVuZ3RoID0gY29tcHV0ZWQoKCkgPT4gc3RhdGUoKS5kYXNoTGVuZ3RoKTtcblx0XHRjb25zdCBzcXVlZXplID0gY29tcHV0ZWQoKCkgPT4gc3RhdGUoKS5zcXVlZXplKTtcblx0XHRjb25zdCBzcXVlZXplTWluID0gY29tcHV0ZWQoKCkgPT4gc3RhdGUoKS5zcXVlZXplTWluKTtcblx0XHRjb25zdCBzcXVlZXplTWF4ID0gY29tcHV0ZWQoKCkgPT4gc3RhdGUoKS5zcXVlZXplTWF4KTtcblx0XHRjb25zdCBzdHJva2UgPSBjb21wdXRlZCgoKSA9PiBzdGF0ZSgpLnN0cm9rZSk7XG5cdFx0Y29uc3QgZmlsbCA9IGNvbXB1dGVkKCgpID0+IHN0YXRlKCkuZmlsbCk7XG5cdFx0Y29uc3QgYmFja2ZhY2VTdHJva2UgPSBjb21wdXRlZCgoKSA9PiBzdGF0ZSgpLmJhY2tmYWNlU3Ryb2tlKTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR1bmlmb3Jtc1snZmlsbE9wYWNpdHknXS52YWx1ZSA9IGZpbGxPcGFjaXR5KCkgPz8gdW5pZm9ybXNbJ2ZpbGxPcGFjaXR5J10udmFsdWU7XG5cdFx0fSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0dW5pZm9ybXNbJ2ZpbGxNaXgnXS52YWx1ZSA9IGZpbGxNaXgoKSA/PyB1bmlmb3Jtc1snZmlsbE1peCddLnZhbHVlO1xuXHRcdH0pO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdHVuaWZvcm1zWydzdHJva2VPcGFjaXR5J10udmFsdWUgPSBzdHJva2VPcGFjaXR5KCkgPz8gdW5pZm9ybXNbJ3N0cm9rZU9wYWNpdHknXS52YWx1ZTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR1bmlmb3Jtc1sndGhpY2tuZXNzJ10udmFsdWUgPSB0aGlja25lc3MoKSA/PyB1bmlmb3Jtc1sndGhpY2tuZXNzJ10udmFsdWU7XG5cdFx0fSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0dW5pZm9ybXNbJ2NvbG9yQmFja2ZhY2VzJ10udmFsdWUgPSBjb2xvckJhY2tmYWNlcygpID8/IHVuaWZvcm1zWydjb2xvckJhY2tmYWNlcyddLnZhbHVlO1xuXHRcdH0pO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdHVuaWZvcm1zWydkYXNoJ10udmFsdWUgPSBkYXNoKCkgPz8gdW5pZm9ybXNbJ2Rhc2gnXS52YWx1ZTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR1bmlmb3Jtc1snZGFzaEludmVydCddLnZhbHVlID0gZGFzaEludmVydCgpID8/IHVuaWZvcm1zWydkYXNoSW52ZXJ0J10udmFsdWU7XG5cdFx0fSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0dW5pZm9ybXNbJ2Rhc2hSZXBlYXRzJ10udmFsdWUgPSBkYXNoUmVwZWF0cygpID8/IHVuaWZvcm1zWydkYXNoUmVwZWF0cyddLnZhbHVlO1xuXHRcdH0pO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdHVuaWZvcm1zWydkYXNoTGVuZ3RoJ10udmFsdWUgPSBkYXNoTGVuZ3RoKCkgPz8gdW5pZm9ybXNbJ2Rhc2hMZW5ndGgnXS52YWx1ZTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR1bmlmb3Jtc1snc3F1ZWV6ZSddLnZhbHVlID0gc3F1ZWV6ZSgpID8/IHVuaWZvcm1zWydzcXVlZXplJ10udmFsdWU7XG5cdFx0fSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0dW5pZm9ybXNbJ3NxdWVlemVNaW4nXS52YWx1ZSA9IHNxdWVlemVNaW4oKSA/PyB1bmlmb3Jtc1snc3F1ZWV6ZU1pbiddLnZhbHVlO1xuXHRcdH0pO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdHVuaWZvcm1zWydzcXVlZXplTWF4J10udmFsdWUgPSBzcXVlZXplTWF4KCkgPz8gdW5pZm9ybXNbJ3NxdWVlemVNYXgnXS52YWx1ZTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR1bmlmb3Jtc1snc3Ryb2tlJ10udmFsdWUgPSBzdHJva2UoKSA/IG5ldyBUSFJFRS5Db2xvcihzdHJva2UoKSkgOiB1bmlmb3Jtc1snc3Ryb2tlJ10udmFsdWU7XG5cdFx0fSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0dW5pZm9ybXNbJ2ZpbGwnXS52YWx1ZSA9IGZpbGwoKSA/IG5ldyBUSFJFRS5Db2xvcihmaWxsKCkpIDogdW5pZm9ybXNbJ2ZpbGwnXS52YWx1ZTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR1bmlmb3Jtc1snYmFja2ZhY2VTdHJva2UnXS52YWx1ZSA9IGJhY2tmYWNlU3Ryb2tlKClcblx0XHRcdFx0PyBuZXcgVEhSRUUuQ29sb3IoYmFja2ZhY2VTdHJva2UoKSlcblx0XHRcdFx0OiB1bmlmb3Jtc1snYmFja2ZhY2VTdHJva2UnXS52YWx1ZTtcblx0XHR9KTtcblx0fSk7XG59XG4iXX0=