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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (397) hide show
  1. package/README.md +62 -4
  2. package/abstractions/README.md +278 -2
  3. package/abstractions/index.d.ts +11 -6
  4. package/abstractions/lib/catmull-rom-line.d.ts +648 -0
  5. package/abstractions/lib/cubic-bezier-line.d.ts +19 -0
  6. package/abstractions/lib/edges.d.ts +850 -0
  7. package/abstractions/lib/gradient-texture.d.ts +24 -0
  8. package/abstractions/lib/grid.d.ts +339 -0
  9. package/abstractions/lib/helper.d.ts +25 -0
  10. package/abstractions/lib/line.d.ts +41 -0
  11. package/abstractions/lib/prism-geometry.d.ts +30 -0
  12. package/abstractions/lib/quadratic-bezier-line.d.ts +21 -0
  13. package/abstractions/lib/text-3d.d.ts +338 -0
  14. package/abstractions/lib/text.d.ts +55 -0
  15. package/cameras/README.md +91 -2
  16. package/cameras/index.d.ts +4 -4
  17. package/cameras/lib/camera-content.d.ts +10 -0
  18. package/cameras/lib/cube-camera.d.ts +38 -0
  19. package/cameras/lib/orthographic-camera.d.ts +40 -0
  20. package/cameras/lib/perspective-camera.d.ts +36 -0
  21. package/controls/README.md +95 -2
  22. package/controls/index.d.ts +2 -1
  23. package/controls/lib/camera-controls.d.ts +31 -0
  24. package/controls/lib/orbit-controls.d.ts +38 -0
  25. package/esm2022/abstractions/index.mjs +12 -7
  26. package/esm2022/abstractions/lib/catmull-rom-line.mjs +76 -0
  27. package/esm2022/abstractions/lib/cubic-bezier-line.mjs +51 -0
  28. package/esm2022/abstractions/lib/edges.mjs +70 -0
  29. package/esm2022/abstractions/lib/gradient-texture.mjs +91 -0
  30. package/esm2022/abstractions/lib/grid.mjs +103 -0
  31. package/esm2022/abstractions/lib/helper.mjs +80 -0
  32. package/esm2022/abstractions/lib/line.mjs +123 -0
  33. package/esm2022/abstractions/lib/prism-geometry.mjs +55 -0
  34. package/esm2022/abstractions/lib/quadratic-bezier-line.mjs +73 -0
  35. package/esm2022/abstractions/lib/text-3d.mjs +98 -0
  36. package/esm2022/abstractions/lib/text.mjs +92 -0
  37. package/esm2022/cameras/index.mjs +5 -5
  38. package/esm2022/cameras/lib/camera-content.mjs +14 -0
  39. package/esm2022/cameras/lib/cube-camera.mjs +111 -0
  40. package/esm2022/cameras/lib/orthographic-camera.mjs +131 -0
  41. package/esm2022/cameras/lib/perspective-camera.mjs +104 -0
  42. package/esm2022/controls/index.mjs +3 -2
  43. package/esm2022/controls/lib/camera-controls.mjs +127 -0
  44. package/esm2022/controls/lib/orbit-controls.mjs +126 -0
  45. package/esm2022/loaders/index.mjs +6 -5
  46. package/esm2022/loaders/lib/font-loader.mjs +49 -0
  47. package/esm2022/loaders/lib/gltf-loader.mjs +33 -0
  48. package/esm2022/loaders/lib/loader.mjs +109 -0
  49. package/esm2022/loaders/lib/progress.mjs +51 -0
  50. package/esm2022/loaders/lib/texture-loader.mjs +32 -0
  51. package/esm2022/materials/index.mjs +7 -7
  52. package/esm2022/materials/lib/custom-shader-material.mjs +71 -0
  53. package/esm2022/materials/lib/mesh-distort-material.mjs +42 -0
  54. package/esm2022/materials/lib/mesh-reflector-material.mjs +278 -0
  55. package/esm2022/materials/lib/mesh-refraction-material.mjs +144 -0
  56. package/esm2022/materials/lib/mesh-transmission-material.mjs +188 -0
  57. package/esm2022/materials/lib/mesh-wobble-material.mjs +42 -0
  58. package/esm2022/misc/index.mjs +10 -14
  59. package/esm2022/misc/lib/animations.mjs +74 -0
  60. package/esm2022/misc/lib/bake-shadows.mjs +26 -0
  61. package/esm2022/misc/lib/computed-attribute.mjs +56 -0
  62. package/esm2022/misc/lib/constants.mjs +5 -0
  63. package/esm2022/misc/lib/decal.mjs +135 -0
  64. package/esm2022/misc/lib/deprecated.mjs +15 -0
  65. package/esm2022/misc/lib/depth-buffer.mjs +39 -0
  66. package/esm2022/misc/lib/fbo.mjs +89 -0
  67. package/esm2022/misc/lib/sampler.mjs +121 -0
  68. package/esm2022/shaders/index.mjs +3 -18
  69. package/esm2022/shaders/lib/grid-material.mjs +81 -0
  70. package/esm2022/shaders/lib/mesh-refraction-material.mjs +163 -0
  71. package/esm2022/staging/index.mjs +19 -22
  72. package/esm2022/staging/lib/accumulative-shadows.mjs +182 -0
  73. package/esm2022/staging/lib/backdrop.mjs +73 -0
  74. package/esm2022/staging/lib/bb-anchor.mjs +58 -0
  75. package/esm2022/staging/lib/bounds.mjs +286 -0
  76. package/esm2022/staging/lib/camera-shake.mjs +69 -0
  77. package/esm2022/staging/lib/caustics.mjs +188 -0
  78. package/esm2022/staging/lib/center.mjs +113 -0
  79. package/esm2022/staging/lib/contact-shadows.mjs +201 -0
  80. package/esm2022/staging/lib/environment.mjs +465 -0
  81. package/esm2022/staging/lib/float.mjs +60 -0
  82. package/esm2022/staging/lib/lightformer.mjs +107 -0
  83. package/esm2022/staging/lib/matcap-texture.mjs +81 -0
  84. package/esm2022/staging/lib/normal-texture.mjs +85 -0
  85. package/esm2022/staging/lib/randomized-lights.mjs +104 -0
  86. package/esm2022/staging/lib/render-texture.mjs +213 -0
  87. package/esm2022/staging/lib/sky.mjs +86 -0
  88. package/esm2022/staging/lib/spot-light.mjs +450 -0
  89. package/esm2022/staging/lib/stage.mjs +236 -0
  90. package/esm2022/vanilla-exports/angular-three-soba-vanilla-exports.mjs +5 -0
  91. package/esm2022/vanilla-exports/index.mjs +3 -0
  92. package/fesm2022/angular-three-soba-abstractions.mjs +739 -718
  93. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  94. package/fesm2022/angular-three-soba-cameras.mjs +260 -307
  95. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  96. package/fesm2022/angular-three-soba-controls.mjs +174 -110
  97. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  98. package/fesm2022/angular-three-soba-loaders.mjs +151 -129
  99. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  100. package/fesm2022/angular-three-soba-materials.mjs +511 -764
  101. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  102. package/fesm2022/angular-three-soba-misc.mjs +405 -2149
  103. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  104. package/fesm2022/angular-three-soba-shaders.mjs +33 -1373
  105. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  106. package/fesm2022/angular-three-soba-staging.mjs +2329 -3538
  107. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  108. package/fesm2022/angular-three-soba-vanilla-exports.mjs +6 -0
  109. package/fesm2022/angular-three-soba-vanilla-exports.mjs.map +1 -0
  110. package/loaders/README.md +130 -2
  111. package/loaders/index.d.ts +5 -4
  112. package/loaders/lib/font-loader.d.ts +27 -0
  113. package/loaders/lib/gltf-loader.d.ts +21 -0
  114. package/loaders/lib/loader.d.ts +29 -0
  115. package/loaders/lib/progress.d.ts +9 -0
  116. package/loaders/lib/texture-loader.d.ts +13 -0
  117. package/materials/README.md +160 -2
  118. package/materials/index.d.ts +6 -6
  119. package/materials/lib/custom-shader-material.d.ts +19 -0
  120. package/materials/lib/mesh-distort-material.d.ts +18 -0
  121. package/materials/lib/mesh-reflector-material.d.ts +50 -0
  122. package/materials/lib/mesh-refraction-material.d.ts +42 -0
  123. package/materials/lib/mesh-transmission-material.d.ts +77 -0
  124. package/materials/lib/mesh-wobble-material.d.ts +15 -0
  125. package/metadata.json +1 -1
  126. package/misc/README.md +217 -2
  127. package/misc/index.d.ts +9 -13
  128. package/misc/lib/animations.d.ts +14 -0
  129. package/misc/lib/computed-attribute.d.ts +69 -0
  130. package/misc/lib/constants.d.ts +1 -0
  131. package/misc/lib/decal.d.ts +27 -0
  132. package/misc/lib/deprecated.d.ts +14 -0
  133. package/misc/lib/depth-buffer.d.ts +8 -0
  134. package/misc/lib/fbo.d.ts +47 -0
  135. package/misc/lib/sampler.d.ts +73 -0
  136. package/package.json +60 -38
  137. package/shaders/index.d.ts +2 -17
  138. package/shaders/lib/grid-material.d.ts +69 -0
  139. package/shaders/lib/mesh-refraction-material.d.ts +11 -0
  140. package/staging/README.md +472 -2
  141. package/staging/index.d.ts +18 -21
  142. package/staging/lib/accumulative-shadows.d.ts +75 -0
  143. package/staging/lib/backdrop.d.ts +22 -0
  144. package/staging/lib/bb-anchor.d.ts +17 -0
  145. package/staging/lib/bounds.d.ts +47 -0
  146. package/staging/lib/camera-shake.d.ts +29 -0
  147. package/staging/lib/caustics.d.ts +53 -0
  148. package/staging/lib/center.d.ts +422 -0
  149. package/staging/lib/contact-shadows.d.ts +45 -0
  150. package/staging/lib/environment.d.ts +159 -0
  151. package/staging/lib/float.d.ts +19 -0
  152. package/staging/lib/lightformer.d.ts +334 -0
  153. package/staging/lib/matcap-texture.d.ts +32 -0
  154. package/staging/lib/normal-texture.d.ts +37 -0
  155. package/staging/lib/randomized-lights.d.ts +54 -0
  156. package/staging/lib/render-texture.d.ts +64 -0
  157. package/staging/lib/sky.d.ts +32 -0
  158. package/staging/lib/spot-light.d.ts +120 -0
  159. package/staging/lib/stage.d.ts +376 -0
  160. package/vanilla-exports/README.md +3 -0
  161. package/vanilla-exports/index.d.ts +27 -0
  162. package/web-types.json +1 -1
  163. package/abstractions/billboard/billboard.d.ts +0 -28
  164. package/abstractions/detailed/detailed.d.ts +0 -26
  165. package/abstractions/edges/edges.d.ts +0 -34
  166. package/abstractions/grid/grid.d.ts +0 -50
  167. package/abstractions/text/text.d.ts +0 -82
  168. package/abstractions/text-3d/text-3d.d.ts +0 -84
  169. package/assets/distort.vert.glsl +0 -1
  170. package/cameras/camera/camera-content.d.ts +0 -13
  171. package/cameras/camera/camera.d.ts +0 -26
  172. package/cameras/cube-camera/cube-camera.d.ts +0 -69
  173. package/cameras/orthographic-camera/orthographic-camera.d.ts +0 -37
  174. package/cameras/perspective-camera/perspective-camera.d.ts +0 -18
  175. package/controls/orbit-controls/orbit-controls.d.ts +0 -54
  176. package/esm2022/abstractions/billboard/billboard.mjs +0 -74
  177. package/esm2022/abstractions/detailed/detailed.mjs +0 -64
  178. package/esm2022/abstractions/edges/edges.mjs +0 -88
  179. package/esm2022/abstractions/grid/grid.mjs +0 -180
  180. package/esm2022/abstractions/text/text.mjs +0 -274
  181. package/esm2022/abstractions/text-3d/text-3d.mjs +0 -172
  182. package/esm2022/cameras/camera/camera-content.mjs +0 -21
  183. package/esm2022/cameras/camera/camera.mjs +0 -77
  184. package/esm2022/cameras/cube-camera/cube-camera.mjs +0 -161
  185. package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +0 -102
  186. package/esm2022/cameras/perspective-camera/perspective-camera.mjs +0 -46
  187. package/esm2022/controls/orbit-controls/orbit-controls.mjs +0 -185
  188. package/esm2022/gizmos/angular-three-soba-gizmos.mjs +0 -5
  189. package/esm2022/gizmos/gizmo-helper/gizmo-helper.mjs +0 -197
  190. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/constants.mjs +0 -31
  191. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -93
  192. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -150
  193. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.mjs +0 -66
  194. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +0 -71
  195. package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -195
  196. package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +0 -272
  197. package/esm2022/gizmos/index.mjs +0 -4
  198. package/esm2022/loaders/gltf-loader/gltf-loader.mjs +0 -30
  199. package/esm2022/loaders/loader/loader.mjs +0 -138
  200. package/esm2022/loaders/progress/progress.mjs +0 -52
  201. package/esm2022/loaders/texture-loader/texture-loader.mjs +0 -28
  202. package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +0 -82
  203. package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +0 -367
  204. package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +0 -171
  205. package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +0 -278
  206. package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +0 -68
  207. package/esm2022/materials/point-material/point-material.mjs +0 -50
  208. package/esm2022/misc/animations/animations.mjs +0 -59
  209. package/esm2022/misc/bake-shadows/bake-shadows.mjs +0 -24
  210. package/esm2022/misc/caustics/caustics.mjs +0 -387
  211. package/esm2022/misc/decal/decal.mjs +0 -187
  212. package/esm2022/misc/depth-buffer/depth-buffer.mjs +0 -44
  213. package/esm2022/misc/example/example.mjs +0 -160
  214. package/esm2022/misc/fbo/fbo.mjs +0 -47
  215. package/esm2022/misc/html/html-wrapper.mjs +0 -478
  216. package/esm2022/misc/html/html.mjs +0 -304
  217. package/esm2022/misc/sampler/sampler.mjs +0 -142
  218. package/esm2022/misc/shadow/shadow.mjs +0 -111
  219. package/esm2022/misc/stats-gl/stats-gl.mjs +0 -61
  220. package/esm2022/misc/trail/trail.mjs +0 -209
  221. package/esm2022/misc/trail-texture/inject-trail-texture.mjs +0 -17
  222. package/esm2022/misc/trail-texture/trail-texture.mjs +0 -106
  223. package/esm2022/modifiers/angular-three-soba-modifiers.mjs +0 -5
  224. package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +0 -64
  225. package/esm2022/modifiers/index.mjs +0 -2
  226. package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +0 -44
  227. package/esm2022/performances/adaptive-events/adaptive-events.mjs +0 -27
  228. package/esm2022/performances/angular-three-soba-performances.mjs +0 -5
  229. package/esm2022/performances/index.mjs +0 -8
  230. package/esm2022/performances/instances/instances.mjs +0 -220
  231. package/esm2022/performances/instances/position-mesh.mjs +0 -52
  232. package/esm2022/performances/points/points-input.mjs +0 -64
  233. package/esm2022/performances/points/points.mjs +0 -326
  234. package/esm2022/performances/points/position-point.mjs +0 -54
  235. package/esm2022/performances/segments/segment-object.mjs +0 -9
  236. package/esm2022/performances/segments/segments.mjs +0 -182
  237. package/esm2022/shaders/blur-pass/blur-pass.mjs +0 -61
  238. package/esm2022/shaders/caustics/caustics-material.mjs +0 -130
  239. package/esm2022/shaders/caustics/caustics-projection-material.mjs +0 -31
  240. package/esm2022/shaders/convolution-material/convolution-material.mjs +0 -94
  241. package/esm2022/shaders/discard-material/discard-material.mjs +0 -3
  242. package/esm2022/shaders/grid-material/grid-material.mjs +0 -77
  243. package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +0 -56
  244. package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +0 -223
  245. package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +0 -170
  246. package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +0 -268
  247. package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +0 -37
  248. package/esm2022/shaders/shader-material/shader-material.mjs +0 -34
  249. package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +0 -25
  250. package/esm2022/shaders/sparkles-material/sparkles-material.mjs +0 -33
  251. package/esm2022/shaders/spot-light-material/spot-light-material.mjs +0 -86
  252. package/esm2022/shaders/star-field-material/star-field-material.mjs +0 -33
  253. package/esm2022/shaders/wireframe-material/wireframe-material.mjs +0 -247
  254. package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +0 -267
  255. package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +0 -108
  256. package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +0 -206
  257. package/esm2022/staging/backdrop/backdrop.mjs +0 -77
  258. package/esm2022/staging/bb-anchor/bb-anchor.mjs +0 -69
  259. package/esm2022/staging/bounds/bounds.mjs +0 -308
  260. package/esm2022/staging/camera-shake/camera-shake.mjs +0 -123
  261. package/esm2022/staging/center/center.mjs +0 -165
  262. package/esm2022/staging/cloud/cloud.mjs +0 -158
  263. package/esm2022/staging/contact-shadows/contact-shadows.mjs +0 -246
  264. package/esm2022/staging/environment/assets.mjs +0 -13
  265. package/esm2022/staging/environment/environment-cube.mjs +0 -47
  266. package/esm2022/staging/environment/environment-ground.mjs +0 -41
  267. package/esm2022/staging/environment/environment-input.mjs +0 -119
  268. package/esm2022/staging/environment/environment-map.mjs +0 -53
  269. package/esm2022/staging/environment/environment-portal.mjs +0 -113
  270. package/esm2022/staging/environment/environment.mjs +0 -61
  271. package/esm2022/staging/environment/utils.mjs +0 -106
  272. package/esm2022/staging/float/float.mjs +0 -94
  273. package/esm2022/staging/matcap-texture/matcap-texture.mjs +0 -64
  274. package/esm2022/staging/normal-texture/normal-texture.mjs +0 -53
  275. package/esm2022/staging/sky/sky.mjs +0 -119
  276. package/esm2022/staging/sparkles/sparkles.mjs +0 -164
  277. package/esm2022/staging/spot-light/shadow-mesh-input.mjs +0 -63
  278. package/esm2022/staging/spot-light/shadow-mesh.mjs +0 -266
  279. package/esm2022/staging/spot-light/spot-light-input.mjs +0 -84
  280. package/esm2022/staging/spot-light/spot-light.mjs +0 -81
  281. package/esm2022/staging/spot-light/volumetric-mesh.mjs +0 -98
  282. package/esm2022/staging/stage/stage.mjs +0 -389
  283. package/esm2022/staging/stars/stars.mjs +0 -147
  284. package/esm2022/staging/wireframe/wireframe-input.mjs +0 -191
  285. package/esm2022/staging/wireframe/wireframe.mjs +0 -228
  286. package/esm2022/utils/angular-three-soba-utils.mjs +0 -5
  287. package/esm2022/utils/content/content.mjs +0 -15
  288. package/esm2022/utils/index.mjs +0 -2
  289. package/fesm2022/angular-three-soba-gizmos.mjs +0 -1043
  290. package/fesm2022/angular-three-soba-gizmos.mjs.map +0 -1
  291. package/fesm2022/angular-three-soba-modifiers.mjs +0 -71
  292. package/fesm2022/angular-three-soba-modifiers.mjs.map +0 -1
  293. package/fesm2022/angular-three-soba-performances.mjs +0 -956
  294. package/fesm2022/angular-three-soba-performances.mjs.map +0 -1
  295. package/fesm2022/angular-three-soba-utils.mjs +0 -22
  296. package/fesm2022/angular-three-soba-utils.mjs.map +0 -1
  297. package/gizmos/README.md +0 -3
  298. package/gizmos/gizmo-helper/gizmo-helper.d.ts +0 -69
  299. package/gizmos/gizmo-helper/gizmo-viewcube/constants.d.ts +0 -12
  300. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +0 -22
  301. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +0 -29
  302. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.d.ts +0 -33
  303. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +0 -10
  304. package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +0 -40
  305. package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +0 -30
  306. package/gizmos/index.d.ts +0 -3
  307. package/loaders/gltf-loader/gltf-loader.d.ts +0 -10
  308. package/loaders/loader/loader.d.ts +0 -33
  309. package/loaders/progress/progress.d.ts +0 -9
  310. package/loaders/texture-loader/texture-loader.d.ts +0 -7
  311. package/materials/mesh-distort-material/mesh-distort-material.d.ts +0 -40
  312. package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +0 -99
  313. package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +0 -62
  314. package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +0 -107
  315. package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +0 -29
  316. package/materials/point-material/point-material.d.ts +0 -24
  317. package/misc/animations/animations.d.ts +0 -15
  318. package/misc/caustics/caustics.d.ts +0 -87
  319. package/misc/decal/decal.d.ts +0 -49
  320. package/misc/depth-buffer/depth-buffer.d.ts +0 -9
  321. package/misc/example/example.d.ts +0 -81
  322. package/misc/fbo/fbo.d.ts +0 -17
  323. package/misc/html/html-wrapper.d.ts +0 -559
  324. package/misc/html/html.d.ts +0 -214
  325. package/misc/sampler/sampler.d.ts +0 -67
  326. package/misc/shadow/shadow.d.ts +0 -37
  327. package/misc/stats-gl/stats-gl.d.ts +0 -24
  328. package/misc/trail/trail.d.ts +0 -57
  329. package/misc/trail-texture/inject-trail-texture.d.ts +0 -9
  330. package/misc/trail-texture/trail-texture.d.ts +0 -50
  331. package/modifiers/README.md +0 -3
  332. package/modifiers/curve-modifier/curve-modifier.d.ts +0 -23
  333. package/modifiers/index.d.ts +0 -1
  334. package/performances/README.md +0 -3
  335. package/performances/adaptive-dpr/adaptive-dpr.d.ts +0 -14
  336. package/performances/adaptive-events/adaptive-events.d.ts +0 -9
  337. package/performances/index.d.ts +0 -7
  338. package/performances/instances/instances.d.ts +0 -79
  339. package/performances/instances/position-mesh.d.ts +0 -10
  340. package/performances/points/points-input.d.ts +0 -32
  341. package/performances/points/points.d.ts +0 -92
  342. package/performances/points/position-point.d.ts +0 -11
  343. package/performances/segments/segment-object.d.ts +0 -7
  344. package/performances/segments/segments.d.ts +0 -124
  345. package/shaders/blur-pass/blur-pass.d.ts +0 -23
  346. package/shaders/caustics/caustics-material.d.ts +0 -4
  347. package/shaders/caustics/caustics-projection-material.d.ts +0 -4
  348. package/shaders/convolution-material/convolution-material.d.ts +0 -7
  349. package/shaders/discard-material/discard-material.d.ts +0 -3
  350. package/shaders/grid-material/grid-material.d.ts +0 -37
  351. package/shaders/mesh-distort-material/mesh-distort-material.d.ts +0 -295
  352. package/shaders/mesh-reflector-material/mesh-reflector-material.d.ts +0 -50
  353. package/shaders/mesh-refraction-material/mesh-refraction-material.d.ts +0 -4
  354. package/shaders/mesh-transmission-material/mesh-transmission-material.d.ts +0 -25
  355. package/shaders/mesh-wobble-material/mesh-wobble-material.d.ts +0 -16
  356. package/shaders/shader-material/shader-material.d.ts +0 -6
  357. package/shaders/soft-shadow-material/soft-shadow-material.d.ts +0 -19
  358. package/shaders/sparkles-material/sparkles-material.d.ts +0 -17
  359. package/shaders/spot-light-material/spot-light-material.d.ts +0 -13
  360. package/shaders/star-field-material/star-field-material.d.ts +0 -13
  361. package/shaders/wireframe-material/wireframe-material.d.ts +0 -58
  362. package/staging/accumulative-shadows/accumulative-shadows.d.ts +0 -146
  363. package/staging/accumulative-shadows/progressive-light-map.d.ts +0 -34
  364. package/staging/accumulative-shadows/randomized-lights.d.ts +0 -90
  365. package/staging/backdrop/backdrop.d.ts +0 -30
  366. package/staging/bb-anchor/bb-anchor.d.ts +0 -27
  367. package/staging/bounds/bounds.d.ts +0 -134
  368. package/staging/camera-shake/camera-shake.d.ts +0 -43
  369. package/staging/center/center.d.ts +0 -70
  370. package/staging/cloud/cloud.d.ts +0 -51
  371. package/staging/contact-shadows/contact-shadows.d.ts +0 -70
  372. package/staging/environment/assets.d.ts +0 -13
  373. package/staging/environment/environment-cube.d.ts +0 -15
  374. package/staging/environment/environment-ground.d.ts +0 -13
  375. package/staging/environment/environment-input.d.ts +0 -68
  376. package/staging/environment/environment-map.d.ts +0 -16
  377. package/staging/environment/environment-portal.d.ts +0 -18
  378. package/staging/environment/environment.d.ts +0 -8
  379. package/staging/environment/utils.d.ts +0 -7
  380. package/staging/float/float.d.ts +0 -31
  381. package/staging/matcap-texture/matcap-texture.d.ts +0 -13
  382. package/staging/normal-texture/normal-texture.d.ts +0 -16
  383. package/staging/sky/sky.d.ts +0 -48
  384. package/staging/sparkles/sparkles.d.ts +0 -63
  385. package/staging/spot-light/shadow-mesh-input.d.ts +0 -29
  386. package/staging/spot-light/shadow-mesh.d.ts +0 -37
  387. package/staging/spot-light/spot-light-input.d.ts +0 -38
  388. package/staging/spot-light/spot-light.d.ts +0 -39
  389. package/staging/spot-light/volumetric-mesh.d.ts +0 -24
  390. package/staging/stage/stage.d.ts +0 -130
  391. package/staging/stars/stars.d.ts +0 -45
  392. package/staging/wireframe/wireframe-input.d.ts +0 -65
  393. package/staging/wireframe/wireframe.d.ts +0 -28
  394. package/utils/README.md +0 -3
  395. package/utils/content/content.d.ts +0 -8
  396. package/utils/index.d.ts +0 -1
  397. /package/misc/{bake-shadows → lib}/bake-shadows.d.ts +0 -0
@@ -1,478 +0,0 @@
1
- var _a;
2
- import { DOCUMENT, NgTemplateOutlet } from '@angular/common';
3
- import { Component, ElementRef, EmbeddedViewRef, TemplateRef, ViewChild, ViewContainerRef, computed, effect, inject, untracked, } from '@angular/core';
4
- import { HTML, injectBeforeRender, injectNgtStore, is, safeDetectChanges } from 'angular-three';
5
- import * as THREE from 'three';
6
- import { injectNgtsHtmlInputs } from './html';
7
- import * as i0 from "@angular/core";
8
- const v1 = new THREE.Vector3();
9
- const v2 = new THREE.Vector3();
10
- const v3 = new THREE.Vector3();
11
- export function defaultCalculatePosition(el, camera, size) {
12
- const objectPos = v1.setFromMatrixPosition(el.matrixWorld);
13
- objectPos.project(camera);
14
- const widthHalf = size.width / 2;
15
- const heightHalf = size.height / 2;
16
- return [objectPos.x * widthHalf + widthHalf, -(objectPos.y * heightHalf) + heightHalf];
17
- }
18
- function isObjectBehindCamera(el, camera) {
19
- const objectPos = v1.setFromMatrixPosition(el.matrixWorld);
20
- const cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);
21
- const deltaCamObj = objectPos.sub(cameraPos);
22
- const camDir = camera.getWorldDirection(v3);
23
- return deltaCamObj.angleTo(camDir) > Math.PI / 2;
24
- }
25
- function isObjectVisible(el, camera, raycaster, occlude) {
26
- const elPos = v1.setFromMatrixPosition(el.matrixWorld);
27
- const screenPos = elPos.clone();
28
- screenPos.project(camera);
29
- raycaster.setFromCamera(screenPos, camera);
30
- const intersects = raycaster.intersectObjects(occlude, true);
31
- if (intersects.length) {
32
- const intersectionDistance = intersects[0].distance;
33
- const pointDistance = elPos.distanceTo(raycaster.ray.origin);
34
- return pointDistance < intersectionDistance;
35
- }
36
- return true;
37
- }
38
- function objectScale(el, camera) {
39
- if (camera instanceof THREE.OrthographicCamera) {
40
- return camera.zoom;
41
- }
42
- else if (camera instanceof THREE.PerspectiveCamera) {
43
- const objectPos = v1.setFromMatrixPosition(el.matrixWorld);
44
- const cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);
45
- const vFOV = (camera.fov * Math.PI) / 180;
46
- const dist = objectPos.distanceTo(cameraPos);
47
- const scaleFOV = 2 * Math.tan(vFOV / 2) * dist;
48
- return 1 / scaleFOV;
49
- }
50
- else {
51
- return 1;
52
- }
53
- }
54
- function objectZIndex(el, camera, zIndexRange) {
55
- if (camera instanceof THREE.PerspectiveCamera || camera instanceof THREE.OrthographicCamera) {
56
- const objectPos = v1.setFromMatrixPosition(el.matrixWorld);
57
- const cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);
58
- const dist = objectPos.distanceTo(cameraPos);
59
- const A = (zIndexRange[1] - zIndexRange[0]) / (camera.far - camera.near);
60
- const B = zIndexRange[1] - A * camera.far;
61
- return Math.round(A * dist + B);
62
- }
63
- return undefined;
64
- }
65
- const epsilon = (value) => (Math.abs(value) < 1e-10 ? 0 : value);
66
- function getCSSMatrix(matrix, multipliers, prepend = '') {
67
- let matrix3d = 'matrix3d(';
68
- for (let i = 0; i !== 16; i++) {
69
- matrix3d += epsilon(multipliers[i] * matrix.elements[i]) + (i !== 15 ? ',' : ')');
70
- }
71
- return prepend + matrix3d;
72
- }
73
- const getCameraCSSMatrix = ((multipliers) => {
74
- return (matrix) => getCSSMatrix(matrix, multipliers);
75
- })([1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1]);
76
- const getObjectCSSMatrix = ((scaleMultipliers) => {
77
- return (matrix, factor) => getCSSMatrix(matrix, scaleMultipliers(factor), 'translate(-50%,-50%)');
78
- })((f) => [1 / f, 1 / f, 1 / f, 1, -1 / f, -1 / f, -1 / f, -1, 1 / f, 1 / f, 1 / f, 1, 1, 1, 1, 1]);
79
- export class NgtsHtmlWrapper {
80
- static { _a = HTML; }
81
- static { this[_a] = true; }
82
- constructor() {
83
- this.htmlInputs = injectNgtsHtmlInputs();
84
- this.store = injectNgtStore();
85
- this.gl = this.store.select('gl');
86
- this.connected = this.store.select('events', 'connected', { equal: Object.is });
87
- this.viewport = this.store.select('viewport');
88
- this.scene = this.store.select('scene');
89
- this.camera = this.store.select('camera');
90
- this.size = this.store.select('size');
91
- this.raycaster = this.store.select('raycaster');
92
- this.isMeshSizeSet = false;
93
- this.document = inject(DOCUMENT);
94
- this.vcr = inject(ViewContainerRef);
95
- this.portalElement = computed(() => {
96
- const portal = this.htmlInputs.portal();
97
- if (!portal)
98
- return null;
99
- return is.ref(portal) ? portal.nativeElement : portal;
100
- });
101
- this.element = computed(() => this.document.createElement(this.htmlInputs.as()));
102
- this.target = computed(() => {
103
- const portalElement = this.portalElement();
104
- if (portalElement)
105
- return portalElement;
106
- const connected = this.connected();
107
- if (connected)
108
- return connected;
109
- return this.gl().domElement.parentElement;
110
- });
111
- this.styles = computed(() => {
112
- const [style, center, transform, size, fullscreen] = [
113
- this.htmlInputs.style(),
114
- this.htmlInputs.center(),
115
- this.htmlInputs.transform(),
116
- this.size(),
117
- this.htmlInputs.fullscreen(),
118
- ];
119
- if (transform) {
120
- return {
121
- position: 'absolute',
122
- top: 0,
123
- left: 0,
124
- width: size.width,
125
- height: size.height,
126
- transformStyle: 'preserve-3d',
127
- pointerEvents: 'none',
128
- };
129
- }
130
- return {
131
- position: 'absolute',
132
- transform: center ? 'translate3d(-50%,-50%,0)' : 'none',
133
- ...(fullscreen && {
134
- top: -size.height / 2,
135
- left: -size.width / 2,
136
- width: size.width,
137
- height: size.height,
138
- }),
139
- ...(style || {}),
140
- };
141
- });
142
- this.transformInnerStyles = computed(() => ({ position: 'absolute', pointerEvents: this.htmlInputs.pointerEvents() }));
143
- this.setCanvasElementStyle();
144
- this.appendElement();
145
- this.setWrapperClass();
146
- this.render();
147
- this.beforeRender();
148
- }
149
- setCanvasElementStyle() {
150
- effect(() => {
151
- const el = untracked(this.gl).domElement;
152
- const occlude = this.htmlInputs.occlude();
153
- if (occlude && occlude === 'blending') {
154
- el.style.zIndex = `${Math.floor(untracked(this.htmlInputs.zIndexRange)[0] / 2)}`;
155
- el.style.position = 'absolute';
156
- el.style.pointerEvents = 'none';
157
- }
158
- else {
159
- el.style.zIndex = null;
160
- el.style.position = null;
161
- el.style.pointerEvents = null;
162
- }
163
- });
164
- }
165
- appendElement() {
166
- effect((onCleanup) => {
167
- const [group, element] = [this.htmlInputs.groupRef.nativeElement, this.element()];
168
- if (group && element) {
169
- const [target, transform, scene, camera, size, calculatePosition, prepend] = [
170
- this.target(),
171
- this.htmlInputs.transform(),
172
- untracked(this.scene),
173
- untracked(this.camera),
174
- untracked(this.size),
175
- untracked(this.htmlInputs.calculatePosition),
176
- untracked(this.htmlInputs.prepend),
177
- ];
178
- scene.updateMatrixWorld();
179
- if (transform) {
180
- element.style.cssText = `position:absolute;top:0;left:0;pointer-events:none;overflow:hidden;`;
181
- }
182
- else {
183
- const vec = calculatePosition(group, camera, size);
184
- element.style.cssText = `position:absolute;top:0;left:0;transform:translate3d(${vec[0]}px,${vec[1]}px,0);transform-origin:0 0;`;
185
- }
186
- if (target) {
187
- if (prepend)
188
- target.prepend(element);
189
- else
190
- target.appendChild(element);
191
- }
192
- onCleanup(() => {
193
- if (target)
194
- target.removeChild(element);
195
- this.vcr.clear();
196
- });
197
- }
198
- });
199
- }
200
- setWrapperClass() {
201
- effect(() => {
202
- const [element, wrapperClass] = [this.element(), this.htmlInputs.wrapperClass()];
203
- if (element && wrapperClass) {
204
- element.className = wrapperClass;
205
- }
206
- });
207
- }
208
- render() {
209
- effect((onCleanup) => {
210
- const [{ transform }, element, content] = [
211
- this.htmlInputs.state(),
212
- this.element(),
213
- this.htmlInputs.content(),
214
- ];
215
- if (element) {
216
- this.isMeshSizeSet = false;
217
- const params = transform
218
- ? [this.transformTemplate, {}]
219
- : [this.renderTemplate, { styles: this.styles }];
220
- const ref = this.vcr.createEmbeddedView(...params);
221
- if (ref.rootNodes?.[0]) {
222
- if (element.hasChildNodes()) {
223
- element.replaceChildren(...ref.rootNodes);
224
- }
225
- else {
226
- element.append(...ref.rootNodes);
227
- }
228
- }
229
- safeDetectChanges(ref);
230
- let contentRef;
231
- let contentParent;
232
- /**
233
- * NOTE: utilizing rAF here so that renderAnchor (ViewContainerRef) has a chance to be resolved
234
- * TODO: Another approach is to call render() in ngOnInit and pass in an injector to the effect
235
- */
236
- const rAF = requestAnimationFrame(() => {
237
- if (content && this.renderAnchor) {
238
- contentRef = this.renderAnchor.createEmbeddedView(content);
239
- contentParent = ref.rootNodes[0].lastElementChild || ref.rootNodes[0];
240
- while (contentParent && contentParent.lastElementChild) {
241
- contentParent = contentParent.lastElementChild;
242
- }
243
- if (contentRef.rootNodes?.[0]) {
244
- if (contentParent.hasChildNodes()) {
245
- contentParent.replaceChildren(...contentRef.rootNodes);
246
- }
247
- else {
248
- contentParent.append(...contentRef.rootNodes);
249
- }
250
- }
251
- safeDetectChanges(contentRef);
252
- }
253
- });
254
- onCleanup(() => {
255
- cancelAnimationFrame(rAF);
256
- if (contentRef && contentParent) {
257
- contentRef.rootNodes.forEach((node) => {
258
- if (contentParent.hasChildNodes()) {
259
- contentParent.removeChild(node);
260
- }
261
- node.remove();
262
- });
263
- contentRef.destroy();
264
- }
265
- ref.rootNodes.forEach((node) => {
266
- if (element.hasChildNodes()) {
267
- element.removeChild(node);
268
- }
269
- node.remove();
270
- });
271
- ref.destroy();
272
- this.renderAnchor?.clear();
273
- this.vcr.clear();
274
- });
275
- }
276
- });
277
- }
278
- beforeRender() {
279
- let oldPosition = [0, 0];
280
- let oldZoom = 0;
281
- let visible = true;
282
- injectBeforeRender((gl) => {
283
- const [group, camera, transform, calculatePosition, size, eps, isRayCastOcclusion, occlude, scene, raycaster, element, zIndexRange, sprite, distanceFactor, occlusionMeshRef, geometry, viewport, scale,] = [
284
- this.htmlInputs.groupRef.nativeElement,
285
- this.camera(),
286
- this.htmlInputs.transform(),
287
- this.htmlInputs.calculatePosition(),
288
- this.size(),
289
- this.htmlInputs.eps(),
290
- this.htmlInputs.isRayCastOcclusion(),
291
- this.htmlInputs.occlude(),
292
- this.scene(),
293
- this.raycaster(),
294
- this.element(),
295
- this.htmlInputs.zIndexRange(),
296
- this.htmlInputs.sprite(),
297
- this.htmlInputs.distanceFactor(),
298
- this.htmlInputs.occlusionMeshRef.nativeElement,
299
- this.htmlInputs.geometry(),
300
- this.viewport(),
301
- this.htmlInputs.scale(),
302
- ];
303
- if (group && element) {
304
- camera.updateMatrixWorld();
305
- group.updateWorldMatrix(true, false);
306
- const vec = transform ? oldPosition : calculatePosition(group, camera, size);
307
- if (transform ||
308
- Math.abs(oldZoom - camera.zoom) > eps ||
309
- Math.abs(oldPosition[0] - vec[0]) > eps ||
310
- Math.abs(oldPosition[1] - vec[1]) > eps) {
311
- const isBehindCamera = isObjectBehindCamera(group, camera);
312
- let raytraceTarget = false;
313
- if (isRayCastOcclusion) {
314
- if (Array.isArray(occlude)) {
315
- raytraceTarget = occlude.map((item) => (is.ref(item) ? item.nativeElement : item));
316
- }
317
- else if (occlude !== 'blending') {
318
- raytraceTarget = [scene];
319
- }
320
- }
321
- const previouslyVisible = visible;
322
- if (raytraceTarget) {
323
- const isVisible = isObjectVisible(group, camera, raycaster, raytraceTarget);
324
- visible = isVisible && !isBehindCamera;
325
- }
326
- else {
327
- visible = !isBehindCamera;
328
- }
329
- if (previouslyVisible !== visible) {
330
- if (this.htmlInputs.occluded.observed) {
331
- this.htmlInputs.occluded.emit(!visible);
332
- }
333
- else {
334
- element.style.display = visible ? 'block' : 'none';
335
- }
336
- }
337
- const halfRange = Math.floor(zIndexRange[0] / 2);
338
- const zRange = occlude
339
- ? isRayCastOcclusion //
340
- ? [zIndexRange[0], halfRange]
341
- : [halfRange - 1, 0]
342
- : zIndexRange;
343
- element.style.zIndex = `${objectZIndex(group, camera, zRange)}`;
344
- if (transform) {
345
- const [widthHalf, heightHalf] = [size.width / 2, size.height / 2];
346
- const fov = camera.projectionMatrix.elements[5] * heightHalf;
347
- const { isOrthographicCamera, top, left, bottom, right } = camera;
348
- const cameraMatrix = getCameraCSSMatrix(camera.matrixWorldInverse);
349
- const cameraTransform = isOrthographicCamera
350
- ? `scale(${fov})translate(${epsilon(-(right + left) / 2)}px,${epsilon((top + bottom) / 2)}px)`
351
- : `translateZ(${fov}px)`;
352
- let matrix = group.matrixWorld;
353
- if (sprite) {
354
- matrix = camera.matrixWorldInverse
355
- .clone()
356
- .transpose()
357
- .copyPosition(matrix)
358
- .scale(group.scale);
359
- matrix.elements[3] = matrix.elements[7] = matrix.elements[11] = 0;
360
- matrix.elements[15] = 1;
361
- }
362
- element.style.width = size.width + 'px';
363
- element.style.height = size.height + 'px';
364
- element.style.perspective = isOrthographicCamera ? '' : `${fov}px`;
365
- if (this.outerDiv?.nativeElement && this.innerDiv?.nativeElement) {
366
- this.outerDiv.nativeElement.style.width = size.width + 'px';
367
- this.outerDiv.nativeElement.style.height = size.height + 'px';
368
- this.outerDiv.nativeElement.style.transform = `${cameraTransform}${cameraMatrix}translate(${widthHalf}px,${heightHalf}px)`;
369
- this.innerDiv.nativeElement.style.transform = getObjectCSSMatrix(matrix, 1 / ((distanceFactor || 10) / 400));
370
- }
371
- }
372
- else {
373
- const scale = distanceFactor === undefined ? 1 : objectScale(group, camera) * distanceFactor;
374
- element.style.transform = `translate3d(${vec[0]}px,${vec[1]}px,0) scale(${scale})`;
375
- }
376
- oldPosition = vec;
377
- oldZoom = camera.zoom;
378
- }
379
- }
380
- if (!isRayCastOcclusion && occlusionMeshRef && !this.isMeshSizeSet) {
381
- if (transform) {
382
- if (this.outerDiv?.nativeElement) {
383
- const el = this.outerDiv.nativeElement.children[0];
384
- if (el?.clientWidth && el?.clientHeight) {
385
- const { isOrthographicCamera } = camera;
386
- if (isOrthographicCamera || geometry) {
387
- if (scale !== 1) {
388
- if (!Array.isArray(scale)) {
389
- occlusionMeshRef.scale.setScalar(1 / scale);
390
- }
391
- else if (scale instanceof THREE.Vector3) {
392
- occlusionMeshRef.scale.copy(scale.clone().divideScalar(1));
393
- }
394
- else {
395
- occlusionMeshRef.scale.set(1 / scale[0], 1 / scale[1], 1 / scale[2]);
396
- }
397
- }
398
- }
399
- else {
400
- const ratio = (distanceFactor || 10) / 400;
401
- const w = el.clientWidth * ratio;
402
- const h = el.clientHeight * ratio;
403
- occlusionMeshRef.scale.set(w, h, 1);
404
- }
405
- this.isMeshSizeSet = true;
406
- }
407
- }
408
- }
409
- else {
410
- const ele = element.children[0];
411
- if (ele?.clientWidth && ele?.clientHeight) {
412
- const ratio = 1 / viewport.factor;
413
- const w = ele.clientWidth * ratio;
414
- const h = ele.clientHeight * ratio;
415
- occlusionMeshRef.scale.set(w, h, 1);
416
- this.isMeshSizeSet = true;
417
- }
418
- occlusionMeshRef.lookAt(gl.camera.position);
419
- }
420
- }
421
- });
422
- }
423
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtsHtmlWrapper, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
424
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: NgtsHtmlWrapper, isStandalone: true, selector: "ngts-html-wrapper", viewQueries: [{ propertyName: "transformTemplate", first: true, predicate: ["transformTemplate"], descendants: true, static: true }, { propertyName: "renderTemplate", first: true, predicate: ["renderTemplate"], descendants: true, static: true }, { propertyName: "outerDiv", first: true, predicate: ["transformedOuterDiv"], descendants: true }, { propertyName: "innerDiv", first: true, predicate: ["transformedInnerDiv"], descendants: true }, { propertyName: "renderAnchor", first: true, predicate: ["renderAnchor"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: `
425
- <ng-template #transformTemplate>
426
- <div #transformedOuterDiv [style]="styles()">
427
- <div #transformedInnerDiv [style]="transformInnerStyles()">
428
- <ng-container *ngTemplateOutlet="renderTemplate; context: { styles: htmlInputs.style }" />
429
- </div>
430
- </div>
431
- </ng-template>
432
-
433
- <ng-template #renderTemplate let-renderedStyles="styles">
434
- <div #renderedDiv [class]="htmlInputs.renderedDivClass()" [style]="renderedStyles()">
435
- <ng-container #renderAnchor />
436
- </div>
437
- </ng-template>
438
- `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
439
- }
440
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtsHtmlWrapper, decorators: [{
441
- type: Component,
442
- args: [{
443
- selector: 'ngts-html-wrapper',
444
- standalone: true,
445
- template: `
446
- <ng-template #transformTemplate>
447
- <div #transformedOuterDiv [style]="styles()">
448
- <div #transformedInnerDiv [style]="transformInnerStyles()">
449
- <ng-container *ngTemplateOutlet="renderTemplate; context: { styles: htmlInputs.style }" />
450
- </div>
451
- </div>
452
- </ng-template>
453
-
454
- <ng-template #renderTemplate let-renderedStyles="styles">
455
- <div #renderedDiv [class]="htmlInputs.renderedDivClass()" [style]="renderedStyles()">
456
- <ng-container #renderAnchor />
457
- </div>
458
- </ng-template>
459
- `,
460
- imports: [NgTemplateOutlet],
461
- }]
462
- }], ctorParameters: function () { return []; }, propDecorators: { transformTemplate: [{
463
- type: ViewChild,
464
- args: ['transformTemplate', { static: true }]
465
- }], renderTemplate: [{
466
- type: ViewChild,
467
- args: ['renderTemplate', { static: true }]
468
- }], outerDiv: [{
469
- type: ViewChild,
470
- args: ['transformedOuterDiv']
471
- }], innerDiv: [{
472
- type: ViewChild,
473
- args: ['transformedInnerDiv']
474
- }], renderAnchor: [{
475
- type: ViewChild,
476
- args: ['renderAnchor', { read: ViewContainerRef }]
477
- }] } });
478
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC13cmFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL21pc2Mvc3JjL2h0bWwvaHRtbC13cmFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0QsT0FBTyxFQUNOLFNBQVMsRUFDVCxVQUFVLEVBQ1YsZUFBZSxFQUNmLFdBQVcsRUFDWCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEcsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sUUFBUSxDQUFDOztBQUU5QyxNQUFNLEVBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMvQixNQUFNLEVBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMvQixNQUFNLEVBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUUvQixNQUFNLFVBQVUsd0JBQXdCLENBQ3ZDLEVBQWtCLEVBQ2xCLE1BQW9CLEVBQ3BCLElBQXVDO0lBRXZDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDM0QsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNqQyxNQUFNLFVBQVUsR0FBRyxJQUFJ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LEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFWCxRQUFRO3NCQUF6QyxTQUFTO3VCQUFDLHFCQUFxQjtnQkFDRSxRQUFRO3NCQUF6QyxTQUFTO3VCQUFDLHFCQUFxQjtnQkFDdUIsWUFBWTtzQkFBbEUsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuXHRDb21wb25lbnQsXG5cdEVsZW1lbnRSZWYsXG5cdEVtYmVkZGVkVmlld1JlZixcblx0VGVtcGxhdGVSZWYsXG5cdFZpZXdDaGlsZCxcblx0Vmlld0NvbnRhaW5lclJlZixcblx0Y29tcHV0ZWQsXG5cdGVmZmVjdCxcblx0aW5qZWN0LFxuXHR1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSFRNTCwgaW5qZWN0QmVmb3JlUmVuZGVyLCBpbmplY3ROZ3RTdG9yZSwgaXMsIHNhZmVEZXRlY3RDaGFuZ2VzIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBpbmplY3ROZ3RzSHRtbElucHV0cyB9IGZyb20gJy4vaHRtbCc7XG5cbmNvbnN0IHYxID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcbmNvbnN0IHYyID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcbmNvbnN0IHYzID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRDYWxjdWxhdGVQb3NpdGlvbihcblx0ZWw6IFRIUkVFLk9iamVjdDNELFxuXHRjYW1lcmE6IFRIUkVFLkNhbWVyYSxcblx0c2l6ZTogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9LFxuKSB7XG5cdGNvbnN0IG9iamVjdFBvcyA9IHYxLnNldEZyb21NYXRyaXhQb3NpdGlvbihlbC5tYXRyaXhXb3JsZCk7XG5cdG9iamVjdFBvcy5wcm9qZWN0KGNhbWVyYSk7XG5cdGNvbnN0IHdpZHRoSGFsZiA9IHNpemUud2lkdGggLyAyO1xuXHRjb25zdCBoZWlnaHRIYWxmID0gc2l6ZS5oZWlnaHQgLyAyO1xuXHRyZXR1cm4gW29iamVjdFBvcy54ICogd2lkdGhIYWxmICsgd2lkdGhIYWxmLCAtKG9iamVjdFBvcy55ICogaGVpZ2h0SGFsZikgKyBoZWlnaHRIYWxmXTtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3RCZWhpbmRDYW1lcmEoZWw6IFRIUkVFLk9iamVjdDNELCBjYW1lcmE6IFRIUkVFLkNhbWVyYSkge1xuXHRjb25zdCBvYmplY3RQb3MgPSB2MS5zZXRGcm9tTWF0cml4UG9zaXRpb24oZWwubWF0cml4V29ybGQpO1xuXHRjb25zdCBjYW1lcmFQb3MgPSB2Mi5zZXRGcm9tTWF0cml4UG9zaXRpb24oY2FtZXJhLm1hdHJpeFdvcmxkKTtcblx0Y29uc3QgZGVsdGFDYW1PYmogPSBvYmplY3RQb3Muc3ViKGNhbWVyYVBvcyk7XG5cdGNvbnN0IGNhbURpciA9IGNhbWVyYS5nZXRXb3JsZERpcmVjdGlvbih2Myk7XG5cdHJldHVybiBkZWx0YUNhbU9iai5hbmdsZVRvKGNhbURpcikgPiBNYXRoLlBJIC8gMjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3RWaXNpYmxlKFxuXHRlbDogVEhSRUUuT2JqZWN0M0QsXG5cdGNhbWVyYTogVEhSRUUuQ2FtZXJhLFxuXHRyYXljYXN0ZXI6IFRIUkVFLlJheWNhc3Rlcixcblx0b2NjbHVkZTogVEhSRUUuT2JqZWN0M0RbXSxcbikge1xuXHRjb25zdCBlbFBvcyA9IHYxLnNldEZyb21NYXRyaXhQb3NpdGlvbihlbC5tYXRyaXhXb3JsZCk7XG5cdGNvbnN0IHNjcmVlblBvcyA9IGVsUG9zLmNsb25lKCk7XG5cdHNjcmVlblBvcy5wcm9qZWN0KGNhbWVyYSk7XG5cdHJheWNhc3Rlci5zZXRGcm9tQ2FtZXJhKHNjcmVlblBvcyBhcyBhbnksIGNhbWVyYSk7XG5cdGNvbnN0IGludGVyc2VjdHMgPSByYXljYXN0ZXIuaW50ZXJzZWN0T2JqZWN0cyhvY2NsdWRlLCB0cnVlKTtcblx0aWYgKGludGVyc2VjdHMubGVuZ3RoKSB7XG5cdFx0Y29uc3QgaW50ZXJzZWN0aW9uRGlzdGFuY2UgPSBpbnRlcnNlY3RzWzBdLmRpc3RhbmNlO1xuXHRcdGNvbnN0IHBvaW50RGlzdGFuY2UgPSBlbFBvcy5kaXN0YW5jZVRvKHJheWNhc3Rlci5yYXkub3JpZ2luKTtcblx0XHRyZXR1cm4gcG9pbnREaXN0YW5jZSA8IGludGVyc2VjdGlvbkRpc3RhbmNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBvYmplY3RTY2FsZShlbDogVEhSRUUuT2JqZWN0M0QsIGNhbWVyYTogVEhSRUUuQ2FtZXJhKSB7XG5cdGlmIChjYW1lcmEgaW5zdGFuY2VvZiBUSFJFRS5PcnRob2dyYXBoaWNDYW1lcmEpIHtcblx0XHRyZXR1cm4gY2FtZXJhLnpvb207XG5cdH0gZWxzZSBpZiAoY2FtZXJhIGluc3RhbmNlb2YgVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEpIHtcblx0XHRjb25zdCBvYmplY3RQb3MgPSB2MS5zZXRGcm9tTWF0cml4UG9zaXRpb24oZWwubWF0cml4V29ybGQpO1xuXHRcdGNvbnN0IGNhbWVyYVBvcyA9IHYyLnNldEZyb21NYXRyaXhQb3NpdGlvbihjYW1lcmEubWF0cml4V29ybGQpO1xuXHRcdGNvbnN0IHZGT1YgPSAoY2FtZXJhLmZvdiAqIE1hdGguUEkpIC8gMTgwO1xuXHRcdGNvbnN0IGRpc3QgPSBvYmplY3RQb3MuZGlzdGFuY2VUbyhjYW1lcmFQb3MpO1xuXHRcdGNvbnN0IHNjYWxlRk9WID0gMiAqIE1hdGgudGFuKHZGT1YgLyAyKSAqIGRpc3Q7XG5cdFx0cmV0dXJuIDEgLyBzY2FsZUZPVjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gMTtcblx0fVxufVxuXG5mdW5jdGlvbiBvYmplY3RaSW5kZXgoZWw6IFRIUkVFLk9iamVjdDNELCBjYW1lcmE6IFRIUkVFLkNhbWVyYSwgekluZGV4UmFuZ2U6IEFycmF5PG51bWJlcj4pIHtcblx0aWYgKGNhbWVyYSBpbnN0YW5jZW9mIFRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhIHx8IGNhbWVyYSBpbnN0YW5jZW9mIFRIUkVFLk9ydGhvZ3JhcGhpY0NhbWVyYSkge1xuXHRcdGNvbnN0IG9iamVjdFBvcyA9IHYxLnNldEZyb21NYXRyaXhQb3NpdGlvbihlbC5tYXRyaXhXb3JsZCk7XG5cdFx0Y29uc3QgY2FtZXJhUG9zID0gdjIuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGNhbWVyYS5tYXRyaXhXb3JsZCk7XG5cdFx0Y29uc3QgZGlzdCA9IG9iamVjdFBvcy5kaXN0YW5jZVRvKGNhbWVyYVBvcyk7XG5cdFx0Y29uc3QgQSA9ICh6SW5kZXhSYW5nZVsxXSAtIHpJbmRleFJhbmdlWzBdKSAvIChjYW1lcmEuZmFyIC0gY2FtZXJhLm5lYXIpO1xuXHRcdGNvbnN0IEIgPSB6SW5kZXhSYW5nZVsxXSAtIEEgKiBjYW1lcmEuZmFyO1xuXHRcdHJldHVybiBNYXRoLnJvdW5kKEEgKiBkaXN0ICsgQik7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuY29uc3QgZXBzaWxvbiA9ICh2YWx1ZTogbnVtYmVyKSA9PiAoTWF0aC5hYnModmFsdWUpIDwgMWUtMTAgPyAwIDogdmFsdWUpO1xuXG5mdW5jdGlvbiBnZXRDU1NNYXRyaXgobWF0cml4OiBUSFJFRS5NYXRyaXg0LCBtdWx0aXBsaWVyczogbnVtYmVyW10sIHByZXBlbmQgPSAnJykge1xuXHRsZXQgbWF0cml4M2QgPSAnbWF0cml4M2QoJztcblx0Zm9yIChsZXQgaSA9IDA7IGkgIT09IDE2OyBpKyspIHtcblx0XHRtYXRyaXgzZCArPSBlcHNpbG9uKG11bHRpcGxpZXJzW2ldICogbWF0cml4LmVsZW1lbnRzW2ldKSArIChpICE9PSAxNSA/ICcsJyA6ICcpJyk7XG5cdH1cblx0cmV0dXJuIHByZXBlbmQgKyBtYXRyaXgzZDtcbn1cblxuY29uc3QgZ2V0Q2FtZXJhQ1NTTWF0cml4ID0gKChtdWx0aXBsaWVyczogbnVtYmVyW10pID0+IHtcblx0cmV0dXJuIChtYXRyaXg6IFRIUkVFLk1hdHJpeDQpID0+IGdldENTU01hdHJpeChtYXRyaXgsIG11bHRpcGxpZXJzKTtcbn0pKFsxLCAtMSwgMSwgMSwgMSwgLTEsIDEsIDEsIDEsIC0xLCAxLCAxLCAxLCAtMSwgMSwgMV0pO1xuXG5jb25zdCBnZXRPYmplY3RDU1NNYXRyaXggPSAoKHNjYWxlTXVsdGlwbGllcnM6IChuOiBudW1iZXIpID0+IG51bWJlcltdKSA9PiB7XG5cdHJldHVybiAobWF0cml4OiBUSFJFRS5NYXRyaXg0LCBmYWN0b3I6IG51bWJlcikgPT5cblx0XHRnZXRDU1NNYXRyaXgobWF0cml4LCBzY2FsZU11bHRpcGxpZXJzKGZhY3RvciksICd0cmFuc2xhdGUoLTUwJSwtNTAlKScpO1xufSkoKGY6IG51bWJlcikgPT4gWzEgLyBmLCAxIC8gZiwgMSAvIGYsIDEsIC0xIC8gZiwgLTEgLyBmLCAtMSAvIGYsIC0xLCAxIC8gZiwgMSAvIGYsIDEgLyBmLCAxLCAxLCAxLCAxLCAxXSk7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtaHRtbC13cmFwcGVyJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmctdGVtcGxhdGUgI3RyYW5zZm9ybVRlbXBsYXRlPlxuXHRcdFx0PGRpdiAjdHJhbnNmb3JtZWRPdXRlckRpdiBbc3R5bGVdPVwic3R5bGVzKClcIj5cblx0XHRcdFx0PGRpdiAjdHJhbnNmb3JtZWRJbm5lckRpdiBbc3R5bGVdPVwidHJhbnNmb3JtSW5uZXJTdHlsZXMoKVwiPlxuXHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZW5kZXJUZW1wbGF0ZTsgY29udGV4dDogeyBzdHlsZXM6IGh0bWxJbnB1dHMuc3R5bGUgfVwiIC8+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9uZy10ZW1wbGF0ZT5cblxuXHRcdDxuZy10ZW1wbGF0ZSAjcmVuZGVyVGVtcGxhdGUgbGV0LXJlbmRlcmVkU3R5bGVzPVwic3R5bGVzXCI+XG5cdFx0XHQ8ZGl2ICNyZW5kZXJlZERpdiBbY2xhc3NdPVwiaHRtbElucHV0cy5yZW5kZXJlZERpdkNsYXNzKClcIiBbc3R5bGVdPVwicmVuZGVyZWRTdHlsZXMoKVwiPlxuXHRcdFx0XHQ8bmctY29udGFpbmVyICNyZW5kZXJBbmNob3IgLz5cblx0XHRcdDwvZGl2PlxuXHRcdDwvbmctdGVtcGxhdGU+XG5cdGAsXG5cdGltcG9ydHM6IFtOZ1RlbXBsYXRlT3V0bGV0XSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0h0bWxXcmFwcGVyIHtcblx0c3RhdGljIFtIVE1MXSA9IHRydWU7XG5cblx0aHRtbElucHV0cyA9IGluamVjdE5ndHNIdG1sSW5wdXRzKCk7XG5cblx0QFZpZXdDaGlsZCgndHJhbnNmb3JtVGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSB0cmFuc2Zvcm1UZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXHRAVmlld0NoaWxkKCdyZW5kZXJUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIHJlbmRlclRlbXBsYXRlITogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cblx0QFZpZXdDaGlsZCgndHJhbnNmb3JtZWRPdXRlckRpdicpIG91dGVyRGl2PzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cdEBWaWV3Q2hpbGQoJ3RyYW5zZm9ybWVkSW5uZXJEaXYnKSBpbm5lckRpdj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXHRAVmlld0NoaWxkKCdyZW5kZXJBbmNob3InLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgcmVuZGVyQW5jaG9yPzogVmlld0NvbnRhaW5lclJlZjtcblxuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0Tmd0U3RvcmUoKTtcblx0cHJpdmF0ZSBnbCA9IHRoaXMuc3RvcmUuc2VsZWN0KCdnbCcpO1xuXHRwcml2YXRlIGNvbm5lY3RlZCA9IHRoaXMuc3RvcmUuc2VsZWN0KCdldmVudHMnLCAnY29ubmVjdGVkJywgeyBlcXVhbDogT2JqZWN0LmlzIH0pO1xuXHRwcml2YXRlIHZpZXdwb3J0ID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3ZpZXdwb3J0Jyk7XG5cdHByaXZhdGUgc2NlbmUgPSB0aGlzLnN0b3JlLnNlbGVjdCgnc2NlbmUnKTtcblx0cHJpdmF0ZSBjYW1lcmEgPSB0aGlzLnN0b3JlLnNlbGVjdCgnY2FtZXJhJyk7XG5cdHByaXZhdGUgc2l6ZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdzaXplJyk7XG5cdHByaXZhdGUgcmF5Y2FzdGVyID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3JheWNhc3RlcicpO1xuXG5cdHByaXZhdGUgaXNNZXNoU2l6ZVNldCA9IGZhbHNlO1xuXG5cdHByaXZhdGUgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXHRwcml2YXRlIHZjciA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcblxuXHRwcml2YXRlIHBvcnRhbEVsZW1lbnQgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgcG9ydGFsID0gdGhpcy5odG1sSW5wdXRzLnBvcnRhbCgpO1xuXHRcdGlmICghcG9ydGFsKSByZXR1cm4gbnVsbDtcblx0XHRyZXR1cm4gaXMucmVmKHBvcnRhbCkgPyBwb3J0YWwubmF0aXZlRWxlbWVudCA6IHBvcnRhbDtcblx0fSk7XG5cblx0cHJpdmF0ZSBlbGVtZW50ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMuaHRtbElucHV0cy5hcygpKSBhcyBIVE1MRWxlbWVudCk7XG5cdHByaXZhdGUgdGFyZ2V0ID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IHBvcnRhbEVsZW1lbnQgPSB0aGlzLnBvcnRhbEVsZW1lbnQoKTtcblx0XHRpZiAocG9ydGFsRWxlbWVudCkgcmV0dXJuIHBvcnRhbEVsZW1lbnQ7XG5cdFx0Y29uc3QgY29ubmVjdGVkID0gdGhpcy5jb25uZWN0ZWQoKTtcblx0XHRpZiAoY29ubmVjdGVkKSByZXR1cm4gY29ubmVjdGVkIGFzIEhUTUxFbGVtZW50O1xuXHRcdHJldHVybiB0aGlzLmdsKCkuZG9tRWxlbWVudC5wYXJlbnRFbGVtZW50ITtcblx0fSk7XG5cblx0c3R5bGVzID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IFtzdHlsZSwgY2VudGVyLCB0cmFuc2Zvcm0sIHNpemUsIGZ1bGxzY3JlZW5dID0gW1xuXHRcdFx0dGhpcy5odG1sSW5wdXRzLnN0eWxlKCksXG5cdFx0XHR0aGlzLmh0bWxJbnB1dHMuY2VudGVyKCksXG5cdFx0XHR0aGlzLmh0bWxJbnB1dHMudHJhbnNmb3JtKCksXG5cdFx0XHR0aGlzLnNpemUoKSxcblx0XHRcdHRoaXMuaHRtbElucHV0cy5mdWxsc2NyZWVuKCksXG5cdFx0XTtcblxuXHRcdGlmICh0cmFuc2Zvcm0pIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuXHRcdFx0XHR0b3A6IDAsXG5cdFx0XHRcdGxlZnQ6IDAsXG5cdFx0XHRcdHdpZHRoOiBzaXplLndpZHRoLFxuXHRcdFx0XHRoZWlnaHQ6IHNpemUuaGVpZ2h0LFxuXHRcdFx0XHR0cmFuc2Zvcm1TdHlsZTogJ3ByZXNlcnZlLTNkJyxcblx0XHRcdFx0cG9pbnRlckV2ZW50czogJ25vbmUnLFxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0cG9zaXRpb246ICdhYnNvbHV0ZScsXG5cdFx0XHR0cmFuc2Zvcm06IGNlbnRlciA/ICd0cmFuc2xhdGUzZCgtNTAlLC01MCUsMCknIDogJ25vbmUnLFxuXHRcdFx0Li4uKGZ1bGxzY3JlZW4gJiYge1xuXHRcdFx0XHR0b3A6IC1zaXplLmhlaWdodCAvIDIsXG5cdFx0XHRcdGxlZnQ6IC1zaXplLndpZHRoIC8gMixcblx0XHRcdFx0d2lkdGg6IHNpemUud2lkdGgsXG5cdFx0XHRcdGhlaWdodDogc2l6ZS5oZWlnaHQsXG5cdFx0XHR9KSxcblx0XHRcdC4uLihzdHlsZSB8fCB7fSksXG5cdFx0fTtcblx0fSk7XG5cdHRyYW5zZm9ybUlubmVyU3R5bGVzID0gY29tcHV0ZWQoKCkgPT4gKHsgcG9zaXRpb246ICdhYnNvbHV0ZScsIHBvaW50ZXJFdmVudHM6IHRoaXMuaHRtbElucHV0cy5wb2ludGVyRXZlbnRzKCkgfSkpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuc2V0Q2FudmFzRWxlbWVudFN0eWxlKCk7XG5cdFx0dGhpcy5hcHBlbmRFbGVtZW50KCk7XG5cdFx0dGhpcy5zZXRXcmFwcGVyQ2xhc3MoKTtcblx0XHR0aGlzLnJlbmRlcigpO1xuXHRcdHRoaXMuYmVmb3JlUmVuZGVyKCk7XG5cdH1cblxuXHRwcml2YXRlIHNldENhbnZhc0VsZW1lbnRTdHlsZSgpIHtcblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZWwgPSB1bnRyYWNrZWQodGhpcy5nbCkuZG9tRWxlbWVudCE7XG5cdFx0XHRjb25zdCBvY2NsdWRlID0gdGhpcy5odG1sSW5wdXRzLm9jY2x1ZGUoKTtcblx0XHRcdGlmIChvY2NsdWRlICYmIG9jY2x1ZGUgPT09ICdibGVuZGluZycpIHtcblx0XHRcdFx0ZWwuc3R5bGUuekluZGV4ID0gYCR7TWF0aC5mbG9vcih1bnRyYWNrZWQodGhpcy5odG1sSW5wdXRzLnpJbmRleFJhbmdlKVswXSAvIDIpfWA7XG5cdFx0XHRcdGVsLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcblx0XHRcdFx0ZWwuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsLnN0eWxlLnpJbmRleCA9IG51bGwhO1xuXHRcdFx0XHRlbC5zdHlsZS5wb3NpdGlvbiA9IG51bGwhO1xuXHRcdFx0XHRlbC5zdHlsZS5wb2ludGVyRXZlbnRzID0gbnVsbCE7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGFwcGVuZEVsZW1lbnQoKSB7XG5cdFx0ZWZmZWN0KChvbkNsZWFudXApID0+IHtcblx0XHRcdGNvbnN0IFtncm91cCwgZWxlbWVudF0gPSBbdGhpcy5odG1sSW5wdXRzLmdyb3VwUmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMuZWxlbWVudCgpXTtcblx0XHRcdGlmIChncm91cCAmJiBlbGVtZW50KSB7XG5cdFx0XHRcdGNvbnN0IFt0YXJnZXQsIHRyYW5zZm9ybSwgc2NlbmUsIGNhbWVyYSwgc2l6ZSwgY2FsY3VsYXRlUG9zaXRpb24sIHByZXBlbmRdID0gW1xuXHRcdFx0XHRcdHRoaXMudGFyZ2V0KCksXG5cdFx0XHRcdFx0dGhpcy5odG1sSW5wdXRzLnRyYW5zZm9ybSgpLFxuXHRcdFx0XHRcdHVudHJhY2tlZCh0aGlzLnNjZW5lKSxcblx0XHRcdFx0XHR1bnRyYWNrZWQodGhpcy5jYW1lcmEpLFxuXHRcdFx0XHRcdHVudHJhY2tlZCh0aGlzLnNpemUpLFxuXHRcdFx0XHRcdHVudHJhY2tlZCh0aGlzLmh0bWxJbnB1dHMuY2FsY3VsYXRlUG9zaXRpb24pLFxuXHRcdFx0XHRcdHVudHJhY2tlZCh0aGlzLmh0bWxJbnB1dHMucHJlcGVuZCksXG5cdFx0XHRcdF07XG5cdFx0XHRcdHNjZW5lLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XG5cdFx0XHRcdGlmICh0cmFuc2Zvcm0pIHtcblx0XHRcdFx0XHRlbGVtZW50LnN0eWxlLmNzc1RleHQgPSBgcG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3BvaW50ZXItZXZlbnRzOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO2A7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgdmVjID0gY2FsY3VsYXRlUG9zaXRpb24oZ3JvdXAsIGNhbWVyYSwgc2l6ZSk7XG5cdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gYHBvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoJHt2ZWNbMF19cHgsJHt2ZWNbMV19cHgsMCk7dHJhbnNmb3JtLW9yaWdpbjowIDA7YDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0YXJnZXQpIHtcblx0XHRcdFx0XHRpZiAocHJlcGVuZCkgdGFyZ2V0LnByZXBlbmQoZWxlbWVudCk7XG5cdFx0XHRcdFx0ZWxzZSB0YXJnZXQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRvbkNsZWFudXAoKCkgPT4ge1xuXHRcdFx0XHRcdGlmICh0YXJnZXQpIHRhcmdldC5yZW1vdmVDaGlsZChlbGVtZW50KTtcblx0XHRcdFx0XHR0aGlzLnZjci5jbGVhcigpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgc2V0V3JhcHBlckNsYXNzKCkge1xuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBbZWxlbWVudCwgd3JhcHBlckNsYXNzXSA9IFt0aGlzLmVsZW1lbnQoKSwgdGhpcy5odG1sSW5wdXRzLndyYXBwZXJDbGFzcygpXTtcblx0XHRcdGlmIChlbGVtZW50ICYmIHdyYXBwZXJDbGFzcykge1xuXHRcdFx0XHRlbGVtZW50LmNsYXNzTmFtZSA9IHdyYXBwZXJDbGFzcztcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgcmVuZGVyKCkge1xuXHRcdGVmZmVjdCgob25DbGVhbnVwKSA9PiB7XG5cdFx0XHRjb25zdCBbeyB0cmFuc2Zvcm0gfSwgZWxlbWVudCwgY29udGVudF0gPSBbXG5cdFx0XHRcdHRoaXMuaHRtbElucHV0cy5zdGF0ZSgpLFxuXHRcdFx0XHR0aGlzLmVsZW1lbnQoKSxcblx0XHRcdFx0dGhpcy5odG1sSW5wdXRzLmNvbnRlbnQoKSxcblx0XHRcdF07XG5cblx0XHRcdGlmIChlbGVtZW50KSB7XG5cdFx0XHRcdHRoaXMuaXNNZXNoU2l6ZVNldCA9IGZhbHNlO1xuXHRcdFx0XHRjb25zdCBwYXJhbXM6IFBhcmFtZXRlcnM8Vmlld0NvbnRhaW5lclJlZlsnY3JlYXRlRW1iZWRkZWRWaWV3J10+ID0gdHJhbnNmb3JtXG5cdFx0XHRcdFx0PyBbdGhpcy50cmFuc2Zvcm1UZW1wbGF0ZSwge31dXG5cdFx0XHRcdFx0OiBbdGhpcy5yZW5kZXJUZW1wbGF0ZSwgeyBzdHlsZXM6IHRoaXMuc3R5bGVzIH1dO1xuXG5cdFx0XHRcdGNvbnN0IHJlZiA9IHRoaXMudmNyLmNyZWF0ZUVtYmVkZGVkVmlldyguLi5wYXJhbXMpO1xuXHRcdFx0XHRpZiAocmVmLnJvb3ROb2Rlcz8uWzBdKSB7XG5cdFx0XHRcdFx0aWYgKGVsZW1lbnQuaGFzQ2hpbGROb2RlcygpKSB7XG5cdFx0XHRcdFx0XHRlbGVtZW50LnJlcGxhY2VDaGlsZHJlbiguLi5yZWYucm9vdE5vZGVzKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5hcHBlbmQoLi4ucmVmLnJvb3ROb2Rlcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHNhZmVEZXRlY3RDaGFuZ2VzKHJlZik7XG5cblx0XHRcdFx0bGV0IGNvbnRlbnRSZWY6IEVtYmVkZGVkVmlld1JlZjx1bmtub3duPjtcblx0XHRcdFx0bGV0IGNvbnRlbnRQYXJlbnQ6IEhUTUxFbGVtZW50O1xuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogTk9URTogdXRpbGl6aW5nIHJBRiBoZXJlIHNvIHRoYXQgcmVuZGVyQW5jaG9yIChWaWV3Q29udGFpbmVyUmVmKSBoYXMgYSBjaGFuY2UgdG8gYmUgcmVzb2x2ZWRcblx0XHRcdFx0ICogVE9ETzogQW5vdGhlciBhcHByb2FjaCBpcyB0byBjYWxsIHJlbmRlcigpIGluIG5nT25Jbml0IGFuZCBwYXNzIGluIGFuIGluamVjdG9yIHRvIHRoZSBlZmZlY3Rcblx0XHRcdFx0ICovXG5cdFx0XHRcdGNvbnN0IHJBRiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGNvbnRlbnQgJiYgdGhpcy5yZW5kZXJBbmNob3IpIHtcblx0XHRcdFx0XHRcdGNvbnRlbnRSZWYgPSB0aGlzLnJlbmRlckFuY2hvci5jcmVhdGVFbWJlZGRlZFZpZXcoY29udGVudCk7XG5cdFx0XHRcdFx0XHRjb250ZW50UGFyZW50ID0gcmVmLnJvb3ROb2Rlc1swXS5sYXN0RWxlbWVudENoaWxkIHx8IHJlZi5yb290Tm9kZXNbMF07XG5cdFx0XHRcdFx0XHR3aGlsZSAoY29udGVudFBhcmVudCAmJiBjb250ZW50UGFyZW50Lmxhc3RFbGVtZW50Q2hpbGQpIHtcblx0XHRcdFx0XHRcdFx0Y29udGVudFBhcmVudCA9IGNvbnRlbnRQYXJlbnQubGFzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRWxlbWVudDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChjb250ZW50UmVmLnJvb3ROb2Rlcz8uWzBdKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChjb250ZW50UGFyZW50Lmhhc0NoaWxkTm9kZXMoKSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRlbnRQYXJlbnQucmVwbGFjZUNoaWxkcmVuKC4uLmNvbnRlbnRSZWYucm9vdE5vZGVzKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50UGFyZW50LmFwcGVuZCguLi5jb250ZW50UmVmLnJvb3ROb2Rlcyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHNhZmVEZXRlY3RDaGFuZ2VzKGNvbnRlbnRSZWYpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0b25DbGVhbnVwKCgpID0+IHtcblx0XHRcdFx0XHRjYW5jZWxBbmltYXRpb25GcmFtZShyQUYpO1xuXG5cdFx0XHRcdFx0aWYgKGNvbnRlbnRSZWYgJiYgY29udGVudFBhcmVudCkge1xuXHRcdFx0XHRcdFx0Y29udGVudFJlZi5yb290Tm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoY29udGVudFBhcmVudC5oYXNDaGlsZE5vZGVzKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50UGFyZW50LnJlbW92ZUNoaWxkKG5vZGUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdG5vZGUucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0Y29udGVudFJlZi5kZXN0cm95KCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmVmLnJvb3ROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoZWxlbWVudC5oYXNDaGlsZE5vZGVzKCkpIHtcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5yZW1vdmVDaGlsZChub2RlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG5vZGUucmVtb3ZlKCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmVmLmRlc3Ryb3koKTtcblx0XHRcdFx0XHR0aGlzLnJlbmRlckFuY2hvcj8uY2xlYXIoKTtcblx0XHRcdFx0XHR0aGlzLnZjci5jbGVhcigpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgYmVmb3JlUmVuZGVyKCkge1xuXHRcdGxldCBvbGRQb3NpdGlvbiA9IFswLCAwXTtcblx0XHRsZXQgb2xkWm9vbSA9IDA7XG5cdFx0bGV0IHZpc2libGUgPSB0cnVlO1xuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoZ2wpID0+IHtcblx0XHRcdGNvbnN0IFtcblx0XHRcdFx0Z3JvdXAsXG5cdFx0XHRcdGNhbWVyYSxcblx0XHRcdFx0dHJhbnNmb3JtLFxuXHRcdFx0XHRjYWxjdWxhdGVQb3NpdGlvbixcblx0XHRcdFx0c2l6ZSxcblx0XHRcdFx0ZXBzLFxuXHRcdFx0XHRpc1JheUNhc3RPY2NsdXNpb24sXG5cdFx0XHRcdG9jY2x1ZGUsXG5cdFx0XHRcdHNjZW5lLFxuXHRcdFx0XHRyYXljYXN0ZXIsXG5cdFx0XHRcdGVsZW1lbnQsXG5cdFx0XHRcdHpJbmRleFJhbmdlLFxuXHRcdFx0XHRzcHJpdGUsXG5cdFx0XHRcdGRpc3RhbmNlRmFjdG9yLFxuXHRcdFx0XHRvY2NsdXNpb25NZXNoUmVmLFxuXHRcdFx0XHRnZW9tZXRyeSxcblx0XHRcdFx0dmlld3BvcnQsXG5cdFx0XHRcdHNjYWxlLFxuXHRcdFx0XSA9IFtcblx0XHRcdFx0dGhpcy5odG1sSW5wdXRzLmdyb3VwUmVmLm5hdGl2ZUVsZW1lbnQsXG5cdFx0XHRcdHRoaXMuY2FtZXJhKCksXG5cdFx0XHRcdHRoaXMuaHRtbElucHV0cy50cmFuc2Zvcm0oKSxcblx0XHRcdFx0dGhpcy5odG1sSW5wdXRzLmNhbGN1bGF0ZVBvc2l0aW9uKCksXG5cdFx0XHRcdHRoaXMuc2l6ZSgpLFxuXHRcdFx0XHR0aGlzLmh0bWxJbnB1dHMuZXBzKCksXG5cdFx0XHRcdHRoaXMuaHRtbElucHV0cy5pc1JheUNhc3RPY2NsdXNpb24oKSxcblx0XHRcdFx0dGhpcy5odG1sSW5wdXRzLm9jY2x1ZGUoKSxcblx0XHRcdFx0dGhpcy5zY2VuZSgpLFxuXHRcdFx0XHR0aGlzLnJheWNhc3RlcigpLFxuXHRcdFx0XHR0aGlzLmVsZW1lbnQoKSxcblx0XHRcdFx0dGhpcy5odG1sSW5wdXRzLnpJbmRleFJhbmdlKCksXG5cdFx0XHRcdHRoaXMuaHRtbElucHV0cy5zcHJpdGUoKSxcblx0XHRcdFx0dGhpcy5odG1sSW5wdXRzLmRpc3RhbmNlRmFjdG9yKCksXG5cdFx0XHRcdHRoaXMuaHRtbElucHV0cy5vY2NsdXNpb25NZXNoUmVmLm5hdGl2ZUVsZW1lbnQsXG5cdFx0XHRcdHRoaXMuaHRtbElucHV0cy5nZW9tZXRyeSgpLFxuXHRcdFx0XHR0aGlzLnZpZXdwb3J0KCksXG5cdFx0XHRcdHRoaXMuaHRtbElucHV0cy5zY2FsZSgpLFxuXHRcdFx0XTtcblx0XHRcdGlmIChncm91cCAmJiBlbGVtZW50KSB7XG5cdFx0XHRcdGNhbWVyYS51cGRhdGVNYXRyaXhXb3JsZCgpO1xuXHRcdFx0XHRncm91cC51cGRhdGVXb3JsZE1hdHJpeCh0cnVlLCBmYWxzZSk7XG5cdFx0XHRcdGNvbnN0IHZlYyA9IHRyYW5zZm9ybSA/IG9sZFBvc2l0aW9uIDogY2FsY3VsYXRlUG9zaXRpb24oZ3JvdXAsIGNhbWVyYSwgc2l6ZSk7XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRyYW5zZm9ybSB8fFxuXHRcdFx0XHRcdE1hdGguYWJzKG9sZFpvb20gLSBjYW1lcmEuem9vbSkgPiBlcHMgfHxcblx0XHRcdFx0XHRNYXRoLmFicyhvbGRQb3NpdGlvblswXSAtIHZlY1swXSkgPiBlcHMgfHxcblx0XHRcdFx0XHRNYXRoLmFicyhvbGRQb3NpdGlvblsxXSAtIHZlY1sxXSkgPiBlcHNcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Y29uc3QgaXNCZWhpbmRDYW1lcmEgPSBpc09iamVjdEJlaGluZENhbWVyYShncm91cCwgY2FtZXJhKTtcblx0XHRcdFx0XHRsZXQgcmF5dHJhY2VUYXJnZXQ6IG51bGwgfCB1bmRlZmluZWQgfCBib29sZWFuIHwgVEhSRUUuT2JqZWN0M0RbXSA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0aWYgKGlzUmF5Q2FzdE9jY2x1c2lvbikge1xuXHRcdFx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkob2NjbHVkZSkpIHtcblx0XHRcdFx0XHRcdFx0cmF5dHJhY2VUYXJnZXQgPSBvY2NsdWRlLm1hcCgoaXRlbSkgPT4gKGlzLnJlZihpdGVtKSA/IGl0ZW0ubmF0aXZlRWxlbWVudCA6IGl0ZW0pKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAob2NjbHVkZSAhPT0gJ2JsZW5kaW5nJykge1xuXHRcdFx0XHRcdFx0XHRyYXl0cmFjZVRhcmdldCA9IFtzY2VuZV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgcHJldmlvdXNseVZpc2libGUgPSB2aXNpYmxlO1xuXHRcdFx0XHRcdGlmIChyYXl0cmFjZVRhcmdldCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgaXNWaXNpYmxlID0gaXNPYmplY3RWaXNpYmxlKGdyb3VwLCBjYW1lcmEsIHJheWNhc3RlciwgcmF5dHJhY2VUYXJnZXQpO1xuXHRcdFx0XHRcdFx0dmlzaWJsZSA9IGlzVmlzaWJsZSAmJiAhaXNCZWhpbmRDYW1lcmE7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHZpc2libGUgPSAhaXNCZWhpbmRDYW1lcmE7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKHByZXZpb3VzbHlWaXNpYmxlICE9PSB2aXNpYmxlKSB7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5odG1sSW5wdXRzLm9jY2x1ZGVkLm9ic2VydmVkKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuaHRtbElucHV0cy5vY2NsdWRlZC5lbWl0KCF2aXNpYmxlKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IHZpc2libGUgPyAnYmxvY2snIDogJ25vbmUnO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGhhbGZSYW5nZSA9IE1hdGguZmxvb3IoekluZGV4UmFuZ2VbMF0gLyAyKTtcblx0XHRcdFx0XHRjb25zdCB6UmFuZ2UgPSBvY2NsdWRlXG5cdFx0XHRcdFx0XHQ/IGlzUmF5Q2FzdE9jY2x1c2lvbiAvL1xuXHRcdFx0XHRcdFx0XHQ/IFt6SW5kZXhSYW5nZVswXSwgaGFsZlJhbmdlXVxuXHRcdFx0XHRcdFx0XHQ6IFtoYWxmUmFuZ2UgLSAxLCAwXVxuXHRcdFx0XHRcdFx0OiB6SW5kZXhSYW5nZTtcblxuXHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUuekluZGV4ID0gYCR7b2JqZWN0WkluZGV4KGdyb3VwLCBjYW1lcmEsIHpSYW5nZSl9YDtcblxuXHRcdFx0XHRcdGlmICh0cmFuc2Zvcm0pIHtcblx0XHRcdFx0XHRcdGNvbnN0IFt3aWR0aEhhbGYsIGhlaWdodEhhbGZdID0gW3NpemUud2lkdGggLyAyLCBzaXplLmhlaWdodCAvIDJdO1xuXHRcdFx0XHRcdFx0Y29uc3QgZm92ID0gY2FtZXJhLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbNV0gKiBoZWlnaHRIYWxmO1xuXHRcdFx0XHRcdFx0Y29uc3QgeyBpc09ydGhvZ3JhcGhpY0NhbWVyYSwgdG9wLCBsZWZ0LCBib3R0b20sIHJpZ2h0IH0gPSBjYW1lcmEgYXMgVEhSRUUuT3J0aG9ncmFwaGljQ2FtZXJhO1xuXHRcdFx0XHRcdFx0Y29uc3QgY2FtZXJhTWF0cml4ID0gZ2V0Q2FtZXJhQ1NTTWF0cml4KGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UpO1xuXHRcdFx0XHRcdFx0Y29uc3QgY2FtZXJhVHJhbnNmb3JtID0gaXNPcnRob2dyYXBoaWNDYW1lcmFcblx0XHRcdFx0XHRcdFx0PyBgc2NhbGUoJHtmb3Z9KXRyYW5zbGF0ZSgke2Vwc2lsb24oLShyaWdodCArIGxlZnQpIC8gMil9cHgsJHtlcHNpbG9uKFxuXHRcdFx0XHRcdFx0XHRcdFx0KHRvcCArIGJvdHRvbSkgLyAyLFxuXHRcdFx0XHRcdFx0XHQgICl9cHgpYFxuXHRcdFx0XHRcdFx0XHQ6IGB0cmFuc2xhdGVaKCR7Zm92fXB4KWA7XG5cdFx0XHRcdFx0XHRsZXQgbWF0cml4ID0gZ3JvdXAubWF0cml4V29ybGQ7XG5cdFx0XHRcdFx0XHRpZiAoc3ByaXRlKSB7XG5cdFx0XHRcdFx0XHRcdG1hdHJpeCA9IGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2Vcblx0XHRcdFx0XHRcdFx0XHQuY2xvbmUoKVxuXHRcdFx0XHRcdFx0XHRcdC50cmFuc3Bvc2UoKVxuXHRcdFx0XHRcdFx0XHRcdC5jb3B5UG9zaXRpb24obWF0cml4KVxuXHRcdFx0XHRcdFx0XHRcdC5zY2FsZShncm91cC5zY2FsZSk7XG5cdFx0XHRcdFx0XHRcdG1hdHJpeC5lbGVtZW50c1szXSA9IG1hdHJpeC5lbGVtZW50c1s3XSA9IG1hdHJpeC5lbGVtZW50c1sxMV0gPSAwO1xuXHRcdFx0XHRcdFx0XHRtYXRyaXguZWxlbWVudHNbMTVdID0gMTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUud2lkdGggPSBzaXplLndpZHRoICsgJ3B4Jztcblx0XHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gc2l6ZS5oZWlnaHQgKyAncHgnO1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5wZXJzcGVjdGl2ZSA9IGlzT3J0aG9ncmFwaGljQ2FtZXJhID8gJycgOiBgJHtmb3Z9cHhgO1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMub3V0ZXJEaXY/Lm5hdGl2ZUVsZW1lbnQgJiYgdGhpcy5pbm5lckRpdj8ubmF0aXZlRWxlbWVudCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLm91dGVyRGl2Lm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGggPSBzaXplLndpZHRoICsgJ3B4Jztcblx0XHRcdFx0XHRcdFx0dGhpcy5vdXRlckRpdi5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IHNpemUuaGVpZ2h0ICsgJ3B4Jztcblx0XHRcdFx0XHRcdFx0dGhpcy5vdXRlckRpdi5uYXRpdmVFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGAke2NhbWVyYVRyYW5zZm9ybX0ke2NhbWVyYU1hdHJpeH10cmFuc2xhdGUoJHt3aWR0aEhhbGZ9cHgsJHtoZWlnaHRIYWxmfXB4KWA7XG5cdFx0XHRcdFx0XHRcdHRoaXMuaW5uZXJEaXYubmF0aXZlRWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBnZXRPYmplY3RDU1NNYXRyaXgoXG5cdFx0XHRcdFx0XHRcdFx0bWF0cml4LFxuXHRcdFx0XHRcdFx0XHRcdDEgLyAoKGRpc3RhbmNlRmFjdG9yIHx8IDEwKSAvIDQwMCksXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNjYWxlID0gZGlzdGFuY2VGYWN0b3IgPT09IHVuZGVmaW5lZCA/IDEgOiBvYmplY3RTY2FsZShncm91cCwgY2FtZXJhKSAqIGRpc3RhbmNlRmFjdG9yO1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoJHt2ZWNbMF19cHgsJHt2ZWNbMV19cHgsMCkgc2NhbGUoJHtzY2FsZX0pYDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0b2xkUG9zaXRpb24gPSB2ZWM7XG5cdFx0XHRcdFx0b2xkWm9vbSA9IGNhbWVyYS56b29tO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICghaXNSYXlDYXN0T2NjbHVzaW9uICYmIG9jY2x1c2lvbk1lc2hSZWYgJiYgIXRoaXMuaXNNZXNoU2l6ZVNldCkge1xuXHRcdFx0XHRpZiAodHJhbnNmb3JtKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMub3V0ZXJEaXY/Lm5hdGl2ZUVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGVsID0gdGhpcy5vdXRlckRpdi5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdO1xuXG5cdFx0XHRcdFx0XHRpZiAoZWw/LmNsaWVudFdpZHRoICYmIGVsPy5jbGllbnRIZWlnaHQpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgeyBpc09ydGhvZ3JhcGhpY0NhbWVyYSB9ID0gY2FtZXJhIGFzIFRIUkVFLk9ydGhvZ3JhcGhpY0NhbWVyYTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoaXNPcnRob2dyYXBoaWNDYW1lcmEgfHwgZ2VvbWV0cnkpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoc2NhbGUgIT09IDEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICghQXJyYXkuaXNBcnJheShzY2FsZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0b2NjbHVzaW9uTWVzaFJlZi5zY2FsZS5zZXRTY2FsYXIoMSAvIChzY2FsZSBhcyBudW1iZXIpKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoc2NhbGUgaW5zdGFuY2VvZiBUSFJFRS5WZWN0b3IzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9jY2x1c2lvbk1lc2hSZWYuc2NhbGUuY29weShzY2FsZS5jbG9uZSgpLmRpdmlkZVNjYWxhcigxKSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRvY2NsdXNpb25NZXNoUmVmLnNjYWxlLnNldCgxIC8gc2NhbGVbMF0sIDEgLyBzY2FsZVsxXSwgMSAvIHNjYWxlWzJdKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgcmF0aW8gPSAoZGlzdGFuY2VGYWN0b3IgfHwgMTApIC8gNDAwO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHcgPSBlbC5jbGllbnRXaWR0aCAqIHJhdGlvO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGggPSBlbC5jbGllbnRIZWlnaHQgKiByYXRpbztcblxuXHRcdFx0XHRcdFx0XHRcdG9jY2x1c2lvbk1lc2hSZWYuc2NhbGUuc2V0KHcsIGgsIDEpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5pc01lc2hTaXplU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgZWxlID0gZWxlbWVudC5jaGlsZHJlblswXTtcblxuXHRcdFx0XHRcdGlmIChlbGU/LmNsaWVudFdpZHRoICYmIGVsZT8uY2xpZW50SGVpZ2h0KSB7XG5cdFx0XHRcdFx0XHRjb25zdCByYXRpbyA9IDEgLyB2aWV3cG9ydC5mYWN0b3I7XG5cdFx0XHRcdFx0XHRjb25zdCB3ID0gZWxlLmNsaWVudFdpZHRoICogcmF0aW87XG5cdFx0XHRcdFx0XHRjb25zdCBoID0gZWxlLmNsaWVudEhlaWdodCAqIHJhdGlvO1xuXG5cdFx0XHRcdFx0XHRvY2NsdXNpb25NZXNoUmVmLnNjYWxlLnNldCh3LCBoLCAxKTtcblxuXHRcdFx0XHRcdFx0dGhpcy5pc01lc2hTaXplU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRvY2NsdXNpb25NZXNoUmVmLmxvb2tBdChnbC5jYW1lcmEucG9zaXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==