@roomle/web-sdk 2.64.0-alpha.2 → 2.64.0-alpha.4

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 (226) hide show
  1. package/lib/{TextGeometry-d7dcb1a8.js → TextGeometry-0723b75a.js} +2 -2
  2. package/lib/{TextGeometry-d7dcb1a8.js.map → TextGeometry-0723b75a.js.map} +1 -1
  3. package/lib/{TextGeometry-df6eed60.nomodule.js → TextGeometry-cf797717.nomodule.js} +2 -2
  4. package/lib/{TextGeometry-df6eed60.nomodule.js.map → TextGeometry-cf797717.nomodule.js.map} +1 -1
  5. package/lib/{banana-for-scale-7f5c39aa.js → banana-for-scale-4713be6a.js} +2 -2
  6. package/lib/{banana-for-scale-7f5c39aa.js.map → banana-for-scale-4713be6a.js.map} +1 -1
  7. package/lib/{banana-for-scale-798cb7bc.nomodule.js → banana-for-scale-7fe5ee15.nomodule.js} +2 -2
  8. package/lib/{banana-for-scale-798cb7bc.nomodule.js.map → banana-for-scale-7fe5ee15.nomodule.js.map} +1 -1
  9. package/lib/{budgeteer-measure-41916468.js → budgeteer-measure-47e0875a.js} +2 -2
  10. package/lib/{budgeteer-measure-41916468.js.map → budgeteer-measure-47e0875a.js.map} +1 -1
  11. package/lib/budgeteer-measure.nomodule.js +1 -1
  12. package/lib/{component-dimensioning-5f9c24c0.nomodule.js → component-dimensioning-4fc166f8.nomodule.js} +2 -2
  13. package/lib/component-dimensioning-4fc166f8.nomodule.js.map +1 -0
  14. package/lib/{component-dimensioning-b445c3a2.js → component-dimensioning-cc5f04fd.js} +2 -2
  15. package/lib/component-dimensioning-cc5f04fd.js.map +1 -0
  16. package/lib/{component-raycast-helper-a07c3163.nomodule.js → component-raycast-helper-5939164a.nomodule.js} +2 -2
  17. package/lib/component-raycast-helper-5939164a.nomodule.js.map +1 -0
  18. package/lib/{component-raycast-helper-9b61f847.js → component-raycast-helper-8b860af4.js} +2 -2
  19. package/lib/component-raycast-helper-8b860af4.js.map +1 -0
  20. package/lib/{configurator-a6916d59.nomodule.js → configurator-83c3e5c1.nomodule.js} +2 -2
  21. package/lib/configurator-83c3e5c1.nomodule.js.map +1 -0
  22. package/lib/{configurator-cc82ac3e.js → configurator-97377143.js} +2 -2
  23. package/lib/configurator-97377143.js.map +1 -0
  24. package/lib/configurator-main-3d6d327a.js +2 -0
  25. package/lib/configurator-main-3d6d327a.js.map +1 -0
  26. package/lib/configurator-main.nomodule.js +1 -1
  27. package/lib/{continuous-drawing-helper-5c30f67b.js → continuous-drawing-helper-70906037.js} +2 -2
  28. package/lib/continuous-drawing-helper-70906037.js.map +1 -0
  29. package/lib/{continuous-drawing-helper-4c702242.nomodule.js → continuous-drawing-helper-b50b236e.nomodule.js} +2 -2
  30. package/lib/continuous-drawing-helper-b50b236e.nomodule.js.map +1 -0
  31. package/lib/{default-light-setting-dcf3b6db.js → default-light-setting-35b97c15.js} +2 -2
  32. package/lib/default-light-setting-35b97c15.js.map +1 -0
  33. package/lib/{default-light-setting-972b2d4b.nomodule.js → default-light-setting-e8fa6ab5.nomodule.js} +2 -2
  34. package/lib/default-light-setting-e8fa6ab5.nomodule.js.map +1 -0
  35. package/lib/definitions/common-core/src/static-files/environment-maps.d.ts +1 -0
  36. package/lib/definitions/common-core/src/utils/init-data.d.ts +1 -0
  37. package/lib/definitions/common-core/src/utils/shims.d.ts +4 -0
  38. package/lib/definitions/common-core/src/utils/threejs-utils.d.ts +46 -1
  39. package/lib/definitions/common-core/src/view-model/plan-element-view-model.d.ts +8 -6
  40. package/lib/definitions/common-core/src/webgl/baked-shadow-plane.d.ts +3 -3
  41. package/lib/definitions/common-core/src/webgl/mesh-generator.d.ts +1 -1
  42. package/lib/definitions/common-core/src/webgl/renderer/environment-definition.d.ts +10 -3
  43. package/lib/definitions/common-core/src/webgl/renderer/environment-scene.d.ts +27 -0
  44. package/lib/definitions/common-core/src/webgl/renderer/pass/hbao-pass.d.ts +36 -0
  45. package/lib/definitions/common-core/src/webgl/renderer/pass/pass-utility.d.ts +9 -0
  46. package/lib/definitions/common-core/src/webgl/renderer/pass/poisson-denoise-pass.d.ts +39 -0
  47. package/lib/definitions/common-core/src/webgl/renderer/render-utility.d.ts +2 -0
  48. package/lib/definitions/common-core/src/webgl/renderer/shadow-and-ao-pass.d.ts +9 -12
  49. package/lib/definitions/common-core/src/webgl/roomle-component-factory.d.ts +6 -5
  50. package/lib/definitions/common-core/src/webgl/scene-manager.d.ts +1 -0
  51. package/lib/definitions/common-core/src/webgl/static-item-loader.d.ts +2 -2
  52. package/lib/definitions/configurator-core/src/utils/raycast-helper.d.ts +3 -2
  53. package/lib/definitions/configurator-core/src/webgl/configurator-scene-event-handler.d.ts +2 -1
  54. package/lib/definitions/planner-core/src/roomle-planner.d.ts +7 -0
  55. package/lib/definitions/planner-core/src/view-model/construction-plan-object-view-model.d.ts +4 -3
  56. package/lib/definitions/planner-core/src/view-model/node-plan-element-view-model.d.ts +2 -1
  57. package/lib/definitions/planner-core/src/webgl/paper-background.d.ts +4 -0
  58. package/lib/definitions/planner-core/src/webgl/planner-mesh-generator.d.ts +1 -1
  59. package/lib/definitions/planner-core/src/webgl/planner-scene-event-handler.d.ts +3 -2
  60. package/lib/definitions/planner-core/src/webgl/planner-scene-manager.d.ts +3 -0
  61. package/lib/definitions/typings/kernel.d.ts +3 -1
  62. package/lib/definitions/typings/rapi-types.d.ts +3 -1
  63. package/lib/{dimensioning-helper-6a634d30.nomodule.js → dimensioning-helper-24397a7b.nomodule.js} +2 -2
  64. package/lib/{dimensioning-helper-6a634d30.nomodule.js.map → dimensioning-helper-24397a7b.nomodule.js.map} +1 -1
  65. package/lib/{dimensioning-helper-f22aaa82.js → dimensioning-helper-8ee329c7.js} +2 -2
  66. package/lib/{dimensioning-helper-f22aaa82.js.map → dimensioning-helper-8ee329c7.js.map} +1 -1
  67. package/lib/{glb-viewer-0cd9339f.js → glb-viewer-360397fd.js} +2 -2
  68. package/lib/{glb-viewer-0cd9339f.js.map → glb-viewer-360397fd.js.map} +1 -1
  69. package/lib/{glb-viewer-9755d715.nomodule.js → glb-viewer-973fbbc8.nomodule.js} +2 -2
  70. package/lib/{glb-viewer-9755d715.nomodule.js.map → glb-viewer-973fbbc8.nomodule.js.map} +1 -1
  71. package/lib/glb-viewer-main-6331c416.js +2 -0
  72. package/lib/glb-viewer-main-6331c416.js.map +1 -0
  73. package/lib/glb-viewer-main.nomodule.js +1 -1
  74. package/lib/legacy/TextGeometry-4c1be6d3.legacy.js +2 -0
  75. package/lib/legacy/{TextGeometry-f37411bb.legacy.js.map → TextGeometry-4c1be6d3.legacy.js.map} +1 -1
  76. package/lib/legacy/{banana-for-scale-9f80ea1f.legacy.js → banana-for-scale-ed2d6874.legacy.js} +2 -2
  77. package/lib/legacy/{banana-for-scale-9f80ea1f.legacy.js.map → banana-for-scale-ed2d6874.legacy.js.map} +1 -1
  78. package/lib/legacy/budgeteer-measure.legacy.js +1 -1
  79. package/lib/legacy/{component-dimensioning-917a62e2.legacy.js → component-dimensioning-8606afcb.legacy.js} +2 -2
  80. package/lib/legacy/component-dimensioning-8606afcb.legacy.js.map +1 -0
  81. package/lib/legacy/{component-raycast-helper-15b8bfce.legacy.js → component-raycast-helper-3bb556c0.legacy.js} +2 -2
  82. package/lib/legacy/component-raycast-helper-3bb556c0.legacy.js.map +1 -0
  83. package/lib/legacy/{configurator-4c8b183c.legacy.js → configurator-9e271fe7.legacy.js} +2 -2
  84. package/lib/legacy/configurator-9e271fe7.legacy.js.map +1 -0
  85. package/lib/legacy/configurator-main.legacy.js +1 -1
  86. package/lib/legacy/{continuous-drawing-helper-9a2b9de9.legacy.js → continuous-drawing-helper-513474bd.legacy.js} +2 -2
  87. package/lib/legacy/continuous-drawing-helper-513474bd.legacy.js.map +1 -0
  88. package/lib/legacy/{default-light-setting-ea87ed14.legacy.js → default-light-setting-b7ac1e0e.legacy.js} +2 -2
  89. package/lib/legacy/default-light-setting-b7ac1e0e.legacy.js.map +1 -0
  90. package/lib/legacy/{dimensioning-helper-9f46925a.legacy.js → dimensioning-helper-9456dd8b.legacy.js} +2 -2
  91. package/lib/legacy/{dimensioning-helper-9f46925a.legacy.js.map → dimensioning-helper-9456dd8b.legacy.js.map} +1 -1
  92. package/lib/legacy/{glb-viewer-d79e6a18.legacy.js → glb-viewer-8eaecb71.legacy.js} +2 -2
  93. package/lib/legacy/{glb-viewer-d79e6a18.legacy.js.map → glb-viewer-8eaecb71.legacy.js.map} +1 -1
  94. package/lib/legacy/glb-viewer-main.legacy.js +1 -1
  95. package/lib/legacy/main-thread-to-worker-25d07f0a.legacy.js +7 -0
  96. package/lib/legacy/main-thread-to-worker-25d07f0a.legacy.js.map +1 -0
  97. package/lib/legacy/{material-viewer-bf7e480e.legacy.js → material-viewer-daac36b8.legacy.js} +2 -2
  98. package/lib/legacy/material-viewer-daac36b8.legacy.js.map +1 -0
  99. package/lib/legacy/material-viewer-main.legacy.js +1 -1
  100. package/lib/legacy/planner-597ee89f.legacy.js +2 -0
  101. package/lib/legacy/planner-597ee89f.legacy.js.map +1 -0
  102. package/lib/legacy/planner-main.legacy.js +1 -1
  103. package/lib/legacy/roomle-configurator-bcff4cea.legacy.js +2 -0
  104. package/lib/legacy/roomle-configurator-bcff4cea.legacy.js.map +1 -0
  105. package/lib/legacy/roomle-dependency-injection-1461f4ab.legacy.js +9 -0
  106. package/lib/legacy/roomle-dependency-injection-1461f4ab.legacy.js.map +1 -0
  107. package/lib/legacy/roomle-sdk.legacy.js +1 -1
  108. package/lib/legacy/scene-manager-082e0803.legacy.js +2 -0
  109. package/lib/legacy/{scene-manager-0470b149.legacy.js.map → scene-manager-082e0803.legacy.js.map} +1 -1
  110. package/lib/legacy/{script-loader-019d22aa.legacy.js → script-loader-da5df12d.legacy.js} +2 -2
  111. package/lib/legacy/script-loader-da5df12d.legacy.js.map +1 -0
  112. package/lib/legacy/{stats-helper-848e992e.legacy.js → stats-helper-ea3673be.legacy.js} +2 -2
  113. package/lib/legacy/stats-helper-ea3673be.legacy.js.map +1 -0
  114. package/lib/legacy/{tools-core-297681ea.legacy.js → tools-core-f2b3313b.legacy.js} +2 -2
  115. package/lib/legacy/tools-core-f2b3313b.legacy.js.map +1 -0
  116. package/lib/main-thread-to-worker-ebfd32ff.js +7 -0
  117. package/lib/main-thread-to-worker-ebfd32ff.js.map +1 -0
  118. package/lib/main-thread-to-worker-f0c51758.nomodule.js +8 -0
  119. package/lib/main-thread-to-worker-f0c51758.nomodule.js.map +1 -0
  120. package/lib/{material-viewer-e1af7bd0.nomodule.js → material-viewer-5059c479.nomodule.js} +2 -2
  121. package/lib/material-viewer-5059c479.nomodule.js.map +1 -0
  122. package/lib/{material-viewer-9a9b2e05.js → material-viewer-a931f9ee.js} +2 -2
  123. package/lib/material-viewer-a931f9ee.js.map +1 -0
  124. package/lib/material-viewer-main-f3d0cb9e.js +2 -0
  125. package/lib/material-viewer-main-f3d0cb9e.js.map +1 -0
  126. package/lib/material-viewer-main.nomodule.js +1 -1
  127. package/lib/planner-012a915f.js +2 -0
  128. package/lib/planner-012a915f.js.map +1 -0
  129. package/lib/planner-01cde962.nomodule.js +2 -0
  130. package/lib/planner-01cde962.nomodule.js.map +1 -0
  131. package/lib/planner-main-0be99d38.js +2 -0
  132. package/lib/planner-main-0be99d38.js.map +1 -0
  133. package/lib/planner-main.nomodule.js +1 -1
  134. package/lib/roomle-configurator-5b1cd55f.nomodule.js +2 -0
  135. package/lib/roomle-configurator-5b1cd55f.nomodule.js.map +1 -0
  136. package/lib/roomle-configurator-f22897b3.js +2 -0
  137. package/lib/roomle-configurator-f22897b3.js.map +1 -0
  138. package/lib/roomle-dependency-injection-1c6df4a7.nomodule.js +9 -0
  139. package/lib/roomle-dependency-injection-1c6df4a7.nomodule.js.map +1 -0
  140. package/lib/roomle-dependency-injection-3dbe6eb1.js +9 -0
  141. package/lib/roomle-dependency-injection-3dbe6eb1.js.map +1 -0
  142. package/lib/{roomle-sdk-697ee290.js → roomle-sdk-ef00581d.js} +2 -2
  143. package/lib/roomle-sdk-ef00581d.js.map +1 -0
  144. package/lib/roomle-sdk.nomodule.js +1 -1
  145. package/lib/scene-manager-8c8a4192.nomodule.js +2 -0
  146. package/lib/{scene-manager-2ccd581b.nomodule.js.map → scene-manager-8c8a4192.nomodule.js.map} +1 -1
  147. package/lib/scene-manager-b30fc5e1.js +2 -0
  148. package/lib/{scene-manager-7874fcff.js.map → scene-manager-b30fc5e1.js.map} +1 -1
  149. package/lib/{script-loader-0defab9a.js → script-loader-54933300.js} +2 -2
  150. package/lib/script-loader-54933300.js.map +1 -0
  151. package/lib/{script-loader-d001e99b.nomodule.js → script-loader-c7b7f4d1.nomodule.js} +2 -2
  152. package/lib/script-loader-c7b7f4d1.nomodule.js.map +1 -0
  153. package/lib/{stats-helper-4fa59ebb.js → stats-helper-64422ea3.js} +2 -2
  154. package/lib/stats-helper-64422ea3.js.map +1 -0
  155. package/lib/{stats-helper-8e88d26f.nomodule.js → stats-helper-d9ee8e8b.nomodule.js} +2 -2
  156. package/lib/stats-helper-d9ee8e8b.nomodule.js.map +1 -0
  157. package/lib/{tools-core-8d93f0f3.js → tools-core-60a270c3.js} +2 -2
  158. package/lib/tools-core-60a270c3.js.map +1 -0
  159. package/lib/{tools-core-8e07b332.nomodule.js → tools-core-666908d7.nomodule.js} +2 -2
  160. package/lib/tools-core-666908d7.nomodule.js.map +1 -0
  161. package/package.json +3 -3
  162. package/lib/component-dimensioning-5f9c24c0.nomodule.js.map +0 -1
  163. package/lib/component-dimensioning-b445c3a2.js.map +0 -1
  164. package/lib/component-raycast-helper-9b61f847.js.map +0 -1
  165. package/lib/component-raycast-helper-a07c3163.nomodule.js.map +0 -1
  166. package/lib/configurator-a6916d59.nomodule.js.map +0 -1
  167. package/lib/configurator-cc82ac3e.js.map +0 -1
  168. package/lib/configurator-main-6c77663b.js +0 -2
  169. package/lib/configurator-main-6c77663b.js.map +0 -1
  170. package/lib/continuous-drawing-helper-4c702242.nomodule.js.map +0 -1
  171. package/lib/continuous-drawing-helper-5c30f67b.js.map +0 -1
  172. package/lib/default-light-setting-972b2d4b.nomodule.js.map +0 -1
  173. package/lib/default-light-setting-dcf3b6db.js.map +0 -1
  174. package/lib/definitions/common-core/src/webgl/renderer/effect-pass.d.ts +0 -108
  175. package/lib/glb-viewer-main-a5b415ed.js +0 -2
  176. package/lib/glb-viewer-main-a5b415ed.js.map +0 -1
  177. package/lib/legacy/TextGeometry-f37411bb.legacy.js +0 -2
  178. package/lib/legacy/component-dimensioning-917a62e2.legacy.js.map +0 -1
  179. package/lib/legacy/component-raycast-helper-15b8bfce.legacy.js.map +0 -1
  180. package/lib/legacy/configurator-4c8b183c.legacy.js.map +0 -1
  181. package/lib/legacy/continuous-drawing-helper-9a2b9de9.legacy.js.map +0 -1
  182. package/lib/legacy/default-light-setting-ea87ed14.legacy.js.map +0 -1
  183. package/lib/legacy/main-thread-to-worker-88746ef2.legacy.js +0 -7
  184. package/lib/legacy/main-thread-to-worker-88746ef2.legacy.js.map +0 -1
  185. package/lib/legacy/material-viewer-bf7e480e.legacy.js.map +0 -1
  186. package/lib/legacy/planner-c69ac748.legacy.js +0 -2
  187. package/lib/legacy/planner-c69ac748.legacy.js.map +0 -1
  188. package/lib/legacy/roomle-configurator-8b283526.legacy.js +0 -2
  189. package/lib/legacy/roomle-configurator-8b283526.legacy.js.map +0 -1
  190. package/lib/legacy/roomle-dependency-injection-8f12ce96.legacy.js +0 -9
  191. package/lib/legacy/roomle-dependency-injection-8f12ce96.legacy.js.map +0 -1
  192. package/lib/legacy/scene-manager-0470b149.legacy.js +0 -2
  193. package/lib/legacy/script-loader-019d22aa.legacy.js.map +0 -1
  194. package/lib/legacy/stats-helper-848e992e.legacy.js.map +0 -1
  195. package/lib/legacy/tools-core-297681ea.legacy.js.map +0 -1
  196. package/lib/main-thread-to-worker-a765ee2b.js +0 -7
  197. package/lib/main-thread-to-worker-a765ee2b.js.map +0 -1
  198. package/lib/main-thread-to-worker-e5396037.nomodule.js +0 -8
  199. package/lib/main-thread-to-worker-e5396037.nomodule.js.map +0 -1
  200. package/lib/material-viewer-9a9b2e05.js.map +0 -1
  201. package/lib/material-viewer-e1af7bd0.nomodule.js.map +0 -1
  202. package/lib/material-viewer-main-1a227bce.js +0 -2
  203. package/lib/material-viewer-main-1a227bce.js.map +0 -1
  204. package/lib/planner-58c843e3.js +0 -2
  205. package/lib/planner-58c843e3.js.map +0 -1
  206. package/lib/planner-ce4adb71.nomodule.js +0 -2
  207. package/lib/planner-ce4adb71.nomodule.js.map +0 -1
  208. package/lib/planner-main-2ce8f10b.js +0 -2
  209. package/lib/planner-main-2ce8f10b.js.map +0 -1
  210. package/lib/roomle-configurator-23c6c571.js +0 -2
  211. package/lib/roomle-configurator-23c6c571.js.map +0 -1
  212. package/lib/roomle-configurator-b86f1c0b.nomodule.js +0 -2
  213. package/lib/roomle-configurator-b86f1c0b.nomodule.js.map +0 -1
  214. package/lib/roomle-dependency-injection-b5c387cf.js +0 -9
  215. package/lib/roomle-dependency-injection-b5c387cf.js.map +0 -1
  216. package/lib/roomle-dependency-injection-e9a66336.nomodule.js +0 -9
  217. package/lib/roomle-dependency-injection-e9a66336.nomodule.js.map +0 -1
  218. package/lib/roomle-sdk-697ee290.js.map +0 -1
  219. package/lib/scene-manager-2ccd581b.nomodule.js +0 -2
  220. package/lib/scene-manager-7874fcff.js +0 -2
  221. package/lib/script-loader-0defab9a.js.map +0 -1
  222. package/lib/script-loader-d001e99b.nomodule.js.map +0 -1
  223. package/lib/stats-helper-4fa59ebb.js.map +0 -1
  224. package/lib/stats-helper-8e88d26f.nomodule.js.map +0 -1
  225. package/lib/tools-core-8d93f0f3.js.map +0 -1
  226. package/lib/tools-core-8e07b332.nomodule.js.map +0 -1
@@ -0,0 +1,9 @@
1
+ import{g as getAssetPath,A as AmbientLight,D as DirectionalLight,V as Vector2,a as Vector3,R as RectAreaLight,S as SpotLight,C as Color$1,M as MainThreadToWorker,B as BufferGeometry,b as BufferAttribute,T as TrianglesDrawMode,c as TriangleFanDrawMode,d as TriangleStripDrawMode,L as Loader,e as LoaderUtils,F as FileLoader,f as LinearSRGBColorSpace,P as PointLight,h as MeshBasicMaterial,i as SRGBColorSpace,j as MeshPhysicalMaterial,k as Matrix4,Q as Quaternion,I as InstancedMesh,l as InstancedBufferAttribute,O as Object3D,m as TextureLoader,n as ImageBitmapLoader,o as InterleavedBuffer,p as LinearFilter,q as LinearMipmapLinearFilter,r as RepeatWrapping,s as PointsMaterial,t as Material,u as LineBasicMaterial,v as MeshStandardMaterial,w as DoubleSide,x as PropertyBinding,y as SkinnedMesh,z as Mesh,E as LineSegments,G as Line,H as LineLoop,J as Points,K as Group,N as PerspectiveCamera,U as MathUtils,W as OrthographicCamera,X as Skeleton,Y as AnimationClip,Z as Bone,_ as InterpolateLinear,$ as ColorManagement,a0 as NearestFilter,a1 as NearestMipmapNearestFilter,a2 as LinearMipmapNearestFilter,a3 as NearestMipmapLinearFilter,a4 as ClampToEdgeWrapping,a5 as MirroredRepeatWrapping,a6 as InterpolateDiscrete,a7 as FrontSide,a8 as InterleavedBufferAttribute,a9 as Texture,aa as VectorKeyframeTrack,ab as NumberKeyframeTrack,ac as QuaternionKeyframeTrack,ad as Box3,ae as Sphere,af as Interpolant,ag as Euler,ah as CubeTexture,ai as RGBAFormat,aj as DataTexture,ak as getValue,al as Scene,am as ROOMLE_COLORS,an as ROOMLE_HIGHLIGHTNG,ao as deepMerge,ap as setWriteable,aq as setDescriptor,ar as Uint32BufferAttribute,as as Float32BufferAttribute,at as createBenchmarkMaterial,au as createBenchmarkTexture,av as ShapePath,aw as removeItem,ax as BoxGeometry,ay as getGlbUrl,az as transformRange,aA as wait,aB as objectArrayToMap,aC as roundWithPrecision,aD as uuid,aE as handleJsonResponse,aF as setCursor,aG as EdgesGeometry,aH as LineDashedMaterial,aI as ArrowHelper,aJ as CylinderGeometry,aK as Line3,aL as SphereGeometry,aM as RingGeometry,aN as isString,aO as DataTextureLoader,aP as HalfFloatType,aQ as FloatType,aR as RedFormat,aS as NoColorSpace,aT as DataUtils,aU as EquirectangularReflectionMapping,aV as Vector4,aW as Matrix3,aX as ShaderMaterial,aY as DstColorFactor,aZ as ZeroFactor,a_ as AddEquation,a$ as DstAlphaFactor,b0 as UniformsUtils,b1 as NoBlending,b2 as MeshNormalMaterial,b3 as WebGLRenderTarget,b4 as DepthTexture,b5 as DepthStencilFormat,b6 as UnsignedInt248Type,b7 as PlaneGeometry,b8 as CameraHelper,b9 as MeshDepthMaterial,ba as RGBADepthPacking,bb as AdditiveBlending,bc as BackSide,bd as PCFShadowMap,be as BasicShadowMap,bf as PCFSoftShadowMap,bg as VSMShadowMap,bh as ShadowMaterial,bi as MeshPhongMaterial,bj as MeshLambertMaterial,bk as UnsignedByteType,bl as CustomBlending,bm as MinEquation,bn as OneFactor,bo as RGFormat,bp as NoToneMapping,bq as LinearToneMapping,br as ReinhardToneMapping,bs as CineonToneMapping,bt as ACESFilmicToneMapping,bu as Layers,bv as WebGLRenderer}from"./main-thread-to-worker-ebfd32ff.js";class Container{constructor(){this._context=new Map,this._lookups=new Map,this._singletons=new Map}getContext(e){if(this._context.has(e)){const t=this._context.get(e);return this._context.set(e,t+1),e+t}return this._context.set(e,1),e+0}addDependencyInjectionAssignments(e){e.forEach(e=>{this._lookups.set(e.className,e)})}lookup(e,t){if(!this._lookups.has(e))return null;const n=this._lookups.get(e);if(1===n.type&&void 0===t){const t="Dependency "+e+" has definition context but no context was defined!";return console.trace(t),console.error(t),null}let r=t&&1===n.type?t:"global";if(r+="_"+e,2===n.type)return new n.classDefinition;if(this._singletons.has(r))return this._singletons.get(r);const a=new n.classDefinition(t);return this._singletons.set(r,a),a}cleanUp(e){if(e){let t=[];this._singletons.forEach((n,r)=>{r.startsWith(e)&&t.push(r)}),t.forEach(e=>{this._singletons.delete(e)})}else this._singletons.clear(),this._singletons=new Map}}class DependencyInjectionAssignment{constructor(e,t,n){this.className=e,this.classDefinition=t,this.type=void 0===n?0:n}}const IMAGE_FORMATS={JPG:".jpg",JPEG:".jpeg",PNG:".png",GIF:".gif"};class FormDataUtil{_base64toBlob(e,t){t=t||"";const n=atob(e),r=n.length,a=Math.ceil(r/1024),i=new Array(a);for(let e=0;e<a;++e){let t=1024*e,a=Math.min(t+1024,r);const o=new Array(a-t);for(let e=t,r=0;e<a;++r,++e)o[r]=n[e].charCodeAt(0);i[e]=new Uint8Array(o)}return new Blob(i,{type:t})}_createFormData(e,t,n,r){const a=new FormData;-1!==e.indexOf(",")&&(e=e.substr(e.indexOf(",")+1));const i=-1===Object.keys(IMAGE_FORMATS).map(e=>IMAGE_FORMATS[e]).indexOf(n)?"application":"image",o=this._base64toBlob(e,i+"/"+n.substr(1));return a.append(r,o,t+n),a}create(e,t,n,r){return this._createFormData(e,t,n,r)}}const PREDEFINED_LIGHTSETTING={SOFA:"sofa",SHELF:"shelf",SHELF_FRONT:"shelf_front",BAKED:"baked",CAMERA:"camera",EQUAL:"equal"};class DynamicLightSettingLoader{static createDynamicLightSettingSource(e,t){let n={};if(e)n.url=e;else if(t)switch(t){case PREDEFINED_LIGHTSETTING.SHELF:n.url=getAssetPath()+"static/shelf-2975dd3f2fa9c763.json";break;case PREDEFINED_LIGHTSETTING.SHELF_FRONT:n.url=getAssetPath()+"static/shelf_front-8c9566a4512f0de8.json";break;case PREDEFINED_LIGHTSETTING.SOFA:n.url=getAssetPath()+"static/sofa-997b116bc5f2e92e.json";break;case PREDEFINED_LIGHTSETTING.BAKED:n.url=getAssetPath()+"static/baked-6485a2b1daeb69e8.json";break;case PREDEFINED_LIGHTSETTING.CAMERA:n.url=getAssetPath()+"static/camera-05824b47cdb951e4.json";break;case PREDEFINED_LIGHTSETTING.EQUAL:n.url=getAssetPath()+"static/equal-319f6b83c827913f.json";break;default:n.url=getAssetPath()+"static/camera-05824b47cdb951e4.json"}else n=null;return n}parse(e){let t=JSON.parse(e);return t.lights?this.load(t):[]}load(e){let t=[];return e.lights?(e.lights.forEach(e=>{let n;switch(e.type){case"ambient":n=this._parseAmbientLight(e);break;case"rectarea":n=this._parseRectAreaLight(e);break;case"spot":n=this._parseSpotLight(e);break;case"directional":n=this._parseDirectionalLight(e)}n&&t.push(n)}),t):[]}_parseAmbientLight(e){let t=new AmbientLight;return this._parseCommon(t,e),t}_parseRectAreaLight(e){let{intensity:t,castShadow:n,target:r,width:a,height:i}=e,o=null;if(n&&DynamicLightSettingLoader.rectAreaLightReplacement){const n=new DirectionalLight;this._parseCommon(n,e),o=n,n.castShadow=!0,n.shadow.camera.near=.1,n.shadow.camera.far=100,n.shadow.mapSize=new Vector2(1024,1024),n.shadow.bias=-5e-5,n.shadow.normalBias=.01,n.intensity=t?t/100:1,n.lookAt(r?new Vector3(r.x,r.y,r.z):new Vector3(0,0,0))}else{const n=new RectAreaLight;this._parseCommon(n,e),o=n,n.width=a||.8,n.height=i||.8,n.castShadow=!1,n.matrixAutoUpdate=!0,n.intensity=(t||240)/((a||.8)*(i||.8)),n.lookAt(r?new Vector3(r.x,r.y,r.z):new Vector3(0,0,0)),DynamicLightSettingLoader.rectAreaLightLoadingListener&&DynamicLightSettingLoader.rectAreaLightLoadingListener(n)}return o}_parseSpotLight(e){let t=new SpotLight;this._parseCommon(t,e);let{angle:n,penumbra:r,target:a,castShadow:i}=e;return t.angle=(n||100)*Math.PI/180,t.penumbra=r||.5,t.lookAt(a?new Vector3(a.x,a.y,a.z):new Vector3(0,0,0)),t.shadow.camera.near=.1,t.shadow.camera.far=10,t.shadow.mapSize=new Vector2(1024,1024),t.castShadow=i||!1,t}_parseDirectionalLight(e){let t=new DirectionalLight;this._parseCommon(t,e);let{target:n,castShadow:r}=e;return t.castShadow=r||!1,t.shadow.camera.near=.1,t.shadow.camera.far=100,t.shadow.mapSize=new Vector2(1024,1024),t.shadow.bias=-5e-5,t.lookAt(n?new Vector3(n.x,n.y,n.z):new Vector3(0,0,0)),t}_parseCommon(e,t){let{name:n,intensity:r,color:a,position:i,movesWithCamera:o}=t;e.name=n||"",e.intensity=r||1,e.color=new Color$1(a||"#ffffff"),e.position.copy(i?new Vector3(i.x,i.y,i.z):new Vector3(0,0,0)),e.visible=!0,e.layers.set(1),e.userData.movesWithCamera=o}}DynamicLightSettingLoader.rectAreaLightReplacement=!0;const NAMES_FOR_LOCALHOST=["127.0.0.1","localhost","0.0.0.0"],isIdItemId=function(e){return!(!e||"string"!=typeof e||e.split(":").length>2)},getCatalogIdFromItemOrConfigurationId=e=>{if(!e||"string"!=typeof e)return null;const t=e.split(":");return t.length<2?null:t[0]},kernelPartToPriceId=({articleNr:e,componentId:t})=>e&&""!==e?t.split(":")[0]+":"+e:null,wasRequestSuccess=(e,t)=>null!=e?"string"==typeof e?"true"===e:!0===e:("string"==typeof t&&(t=parseInt(t,10)),t>=200&&t<300);class NetworkLayer{constructor(){this._queue=[],this._pendingRequests=0}_nextSlot(){if(this._pendingRequests-=1,!this._queue.length)return;const{request:e,resolve:t,reject:n}=this._queue.shift();this._fetch(e).then(t,n)}_fetch(e,t={},n={}){return this._pendingRequests+=1,new Promise((r,a)=>{self.fetch(e,t).then(async function(e){this._nextSlot();const t=!n.checkResponse||!1!==await n.checkResponse(e);if(wasRequestSuccess(e.ok,e.status)&&t)r(...arguments);else{const t=(null==e?void 0:e.url)||"URL unknown";a(new Error(e.statusText||'Http error "'+(e&&e.status?e.status:"unknown")+'", for "'+t+'"'))}}.bind(this),e=>{this._nextSlot(),a(e)})})}fetch(e,t={},n={}){return this._pendingRequests>=40?new Promise((t,n)=>this._queue.push({request:e,resolve:t,reject:n})):this._fetch(e,t,n)}}function __decorate(e,t,n,r){var a,i=arguments.length,o=i<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(a=e[s])&&(o=(i<3?a(o):i>3?a(t,n,o):a(t,n))||o);return i>3&&o&&Object.defineProperty(t,n,o),o}"function"==typeof SuppressedError&&SuppressedError;const dashCase=function(e){return e.startsWith("_")&&(e=e.substr(1)),e.replace(/[A-Z](?:(?=[^A-Z])|[A-Z]*(?=[A-Z][^A-Z]|$))/g,(function(e,t){return(t>0?"-":"")+e.toLowerCase()}))};function inject(e,t){const n=Symbol("property-cache");Object.defineProperty(e,t,{get(){if(!this[n]){const e=window.__RML__DI__.lookup(dashCase(t),this._creator_);e?this[n]=e:console.error("Dependency "+dashCase(t)+" not found! Add dependency to /utils/injectables.ts")}return this[n]}})}class Logger{info(...e){console}log(...e){console}warn(...e){console.warn.apply(console,e)}error(...e){console.warn.apply(console,e)}}class KernelIo extends Logger{constructor(e){super(),this._creator_=e}setMeta(e){this._meta=e}get meta(){return this._meta?this._meta:{}}throw(e){const t="[Kernel Exception]: "+e;this._globalCallback.onKernelMsg("exception",e,this.meta),this.error(t)}error(e){this._globalCallback.onKernelMsg("error",e,this.meta),super.error(e)}warn(e){this._globalCallback.onKernelMsg("warning",e,this.meta),super.warn(e)}}__decorate([inject],KernelIo.prototype,"_globalCallback",void 0);const ASSET_CACHE=new Map,SYNCED_CATALOGS=new Map,SYNCED_FLOORS_TAGS=new Map,SYNCED_TYPE_CHANGE_TAGS=new Map;class DataSyncer{constructor(e){this._bootCallbacks=[],this._isStarted=!1,this._isStarting=!1,this._alwaysUseCache=!1,this._creator_=e}start(e){return this._configuratorUiCallbacks.onSyncStarted(),this._startWorker().then(()=>this._handleCatalog(e)).then(()=>{const{typeChangeTag:e,floorMaterialsTag:t}=this._initData;Promise.all([this._syncFloorTag(t),this._syncTypeChangeTag(e)]).then(()=>{SYNCED_TYPE_CHANGE_TAGS.set(e,!0),this._configuratorUiCallbacks.onSyncDone()})})}syncCatalog(e){return this._startWorker().then(()=>this._handleCatalog(e))}syncFloorTag(e){return this._startWorker().then(()=>this._syncFloorTag(e))}syncTypeChangeTag(e){return this._startWorker().then(()=>this._syncTypeChangeTag(e))}_syncFloorTag(e){const t=[];return e&&!SYNCED_FLOORS_TAGS.get(e)?(t.push(this._handleTags([e])),this._rapiAccess.getTag(e).then(e=>{t.push(this._handleMaterialsAndTextures(e))}),this._singlePromiseFactory.create(1,e,n=>{Promise.all(t).then(()=>{SYNCED_FLOORS_TAGS.set(e,!0),n()},e=>this._softReject(n,'_syncFloorTag error: "'+e+'"'))})):Promise.resolve()}_syncTypeChangeTag(e){const t=[];return e&&!SYNCED_TYPE_CHANGE_TAGS.get(e)?(t.push(this._handleTags([e])),this._rapiAccess.getTag(e).then(e=>{this._rapiAccess.getItems(e.items).then(e=>{e.forEach(e=>{this.getIsCatalogSynced(e.catalog)&&t.push(this._handleCatalog(e.catalog))})})}),this._singlePromiseFactory.create(2,e,n=>{Promise.all(t).then(()=>{SYNCED_FLOORS_TAGS.set(e,!0),n()},e=>this._softReject(n,'_syncTypeChangeTag error: "'+e+'"'))})):Promise.resolve()}getIsCatalogSynced(e){return!!SYNCED_CATALOGS.get(e)}_startWorker(){return new Promise((e,t)=>{if(this._isStarted)return e();this._bootCallbacks.push({resolve:e,reject:t}),this._isStarting||(this._worker=new Worker(getAssetPath()+"static/asset-loader.worker-1735a5fb1e401244.js"),this._mainThreadToWorker=new MainThreadToWorker(this,this._worker),this._isStarting=!0,this._mainThreadToWorker.sendToWorker(1))})}onCommand(e,t,n){switch(e){case 4:this._isStarted=!0,this._bootCallbacks.forEach(({resolve:e})=>e());break;case 3:this._mainThreadToWorker.resolvePromises(t,n)}}_handleCatalog(e){return this._singlePromiseFactory.create(0,e,t=>this.getIsCatalogSynced(e)?t():this._rapiAccess.getCatalog(e).then(e=>Promise.all([this._handleContentWithAssets(this._rapiAccess.getComponentsOf(e),["perspectiveImage"]),this._handleItemsAndAdditionalContents(e),this._handleMaterialsAndTextures(e),this._handleExternalMeshes(e),this._handleTags(e.tags)])).then(()=>{SYNCED_CATALOGS.set(e,!0),t()},e=>this._softReject(t,'Catalog sync error: "'+e+'"')))}_handleTags(e){return this._handleContentWithAssets(this._rapiAccess.getTags(e),["pngIcon","svgIcon"])}_handleExternalMeshes(e){return new Promise(t=>{this._rapiAccess.getMeshesOfCatalog(e.id).then(e=>{const n=[];e.forEach(e=>{n.push(this._handleContentWithAssets(Promise.all([this._rapiAccess.getMesh(e.id)]),["url"]))}),Promise.all(n).then(t,e=>this._softReject(t,'Sync crt files error: "'+e+'"'))},e=>this._softReject(t,'getMeshesOfCatalog error: "'+e+'"'))})}_handleItemsAndAdditionalContents(e){return new Promise(t=>{this._rapiAccess.getItemsOf(e).then(e=>{const n=[];n.push(this._handleContentWithAssets(Promise.resolve(e),["perspectiveImage"])),this._rapiAccess.getAdditionalContentsOfItems(e).then(e=>{const t=e.filter(e=>-1!==[5,6,4].indexOf(e.type));n.push(this._handleContentWithAssets(Promise.resolve(t),["content"]))},e=>this._softReject(t,'getAdditionalContentsOfItems error: "'+e+'"')),Promise.all(n).then(t,e=>this._softReject(t,'AdditionalContent image sync error:"'+e+'"'))})})}_handleMaterialsAndTextures(e){return new Promise(t=>{this._rapiAccess.getMaterialsOf(e).then(e=>{const n=[];n.push(this._handleContentWithAssets(Promise.resolve(e),["thumbnail"])),e.forEach(e=>{n.push(this._handleContentWithAssets(this._rapiAccess.getTexturesOf(e),["image"]))}),Promise.all(n).then(t,e=>this._softReject(t,'getTexturesOf error: "'+e+'"'))},e=>this._softReject(t,'getMaterialsOf error: "'+e+'"'))})}_handleContentWithAssets(e,t){return new Promise(n=>e.then(e=>this._fetchAssets(e,t).then(n,e=>this._softReject(n,'_handleContentWithAssets error: "'+e+'"')),e=>this._softReject(n,'_handleContentWithAssets promise error: "'+e+'"')))}_fetchAssets(e,t){const n=[];e||(e=[]);for(let r=0,a=e.length;r<a;r++){const a=e[r];t.forEach(e=>{const t=a[e];t&&n.push(this._preCacheAsset(t))})}return Promise.all(n)}_preCacheAsset(e){return new Promise(t=>{if(ASSET_CACHE.get(e))return t();this._assetUrlToBase64(e).then(n=>{ASSET_CACHE.set(e,n),t()},e=>this._softReject(t,'_preCacheAsset error: "'+e+'"'))})}_assetUrlToBase64(e){return new Promise(t=>{this._mainThreadToWorker.sendToWorker(5,e,t,e=>this._softReject(t,'_assetUrlToBase64 error: "'+e+'"'))})}_softReject(e,t){this._errorHandler.softReject(e,t,2)}requestAsset(e,t=!1){return navigator.onLine&&!this._alwaysUseCache?e:ASSET_CACHE.get(e)||(t?e:null)}setAlwaysUseCache(e){this._alwaysUseCache=e}preFillAssetCache(e,t){ASSET_CACHE.set(e,t)}}__decorate([inject],DataSyncer.prototype,"_rapiAccess",void 0),__decorate([inject],DataSyncer.prototype,"_singlePromiseFactory",void 0),__decorate([inject],DataSyncer.prototype,"_errorHandler",void 0),__decorate([inject],DataSyncer.prototype,"_configuratorUiCallbacks",void 0),__decorate([inject],DataSyncer.prototype,"_initData",void 0);class AsyncGuard{constructor(e){this.info=e,this._init()}_init(){this._promise=new Promise((e,t)=>{this._resolve=e,this._reject=t})}resolve(e){e&&this._resolve(e),this._resolve()}reject(e){this._reject(e)}wait(){return this._promise}reset(){this._init()}}function mergeAttributes(e){let t,n,r,a=-1,i=0;for(let o=0;o<e.length;++o){const s=e[o];if(s.isInterleavedBufferAttribute)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. InterleavedBufferAttributes are not supported."),null;if(void 0===t&&(t=s.array.constructor),t!==s.array.constructor)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes."),null;if(void 0===n&&(n=s.itemSize),n!==s.itemSize)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes."),null;if(void 0===r&&(r=s.normalized),r!==s.normalized)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes."),null;if(-1===a&&(a=s.gpuType),a!==s.gpuType)return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes."),null;i+=s.array.length}const o=new t(i);let s=0;for(let t=0;t<e.length;++t)o.set(e[t].array,s),s+=e[t].array.length;const l=new BufferAttribute(o,n,r);return void 0!==a&&(l.gpuType=a),l}function toTrianglesDrawMode(e,t){if(t===TrianglesDrawMode)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),e;if(t===TriangleFanDrawMode||t===TriangleStripDrawMode){let n=e.getIndex();if(null===n){const t=[],r=e.getAttribute("position");if(void 0===r)return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),e;for(let e=0;e<r.count;e++)t.push(e);e.setIndex(t),n=e.getIndex()}const r=n.count-2,a=[];if(t===TriangleFanDrawMode)for(let e=1;e<=r;e++)a.push(n.getX(0)),a.push(n.getX(e)),a.push(n.getX(e+1));else for(let e=0;e<r;e++)e%2==0?(a.push(n.getX(e)),a.push(n.getX(e+1)),a.push(n.getX(e+2))):(a.push(n.getX(e+2)),a.push(n.getX(e+1)),a.push(n.getX(e)));a.length/3!==r&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const i=e.clone();return i.setIndex(a),i.clearGroups(),i}return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",t),e}class GLTFLoader extends Loader{constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register((function(e){return new GLTFMaterialsClearcoatExtension(e)})),this.register((function(e){return new GLTFTextureBasisUExtension(e)})),this.register((function(e){return new GLTFTextureWebPExtension(e)})),this.register((function(e){return new GLTFTextureAVIFExtension(e)})),this.register((function(e){return new GLTFMaterialsSheenExtension(e)})),this.register((function(e){return new GLTFMaterialsTransmissionExtension(e)})),this.register((function(e){return new GLTFMaterialsVolumeExtension(e)})),this.register((function(e){return new GLTFMaterialsIorExtension(e)})),this.register((function(e){return new GLTFMaterialsEmissiveStrengthExtension(e)})),this.register((function(e){return new GLTFMaterialsSpecularExtension(e)})),this.register((function(e){return new GLTFMaterialsIridescenceExtension(e)})),this.register((function(e){return new GLTFMaterialsAnisotropyExtension(e)})),this.register((function(e){return new GLTFLightsExtension(e)})),this.register((function(e){return new GLTFMeshoptCompression(e)})),this.register((function(e){return new GLTFMeshGpuInstancing(e)}))}load(e,t,n,r){const a=this;let i;i=""!==this.resourcePath?this.resourcePath:""!==this.path?this.path:LoaderUtils.extractUrlBase(e),this.manager.itemStart(e);const o=function(t){r?r(t):console.error(t),a.manager.itemError(e),a.manager.itemEnd(e)},s=new FileLoader(this.manager);s.setPath(this.path),s.setResponseType("arraybuffer"),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(e,(function(n){try{a.parse(n,i,(function(n){t(n),a.manager.itemEnd(e)}),o)}catch(e){o(e)}}),n,o)}setDRACOLoader(e){return this.dracoLoader=e,this}setDDSLoader(){throw new Error('THREE.GLTFLoader: "MSFT_texture_dds" no longer supported. Please update to "KHR_texture_basisu".')}setKTX2Loader(e){return this.ktx2Loader=e,this}setMeshoptDecoder(e){return this.meshoptDecoder=e,this}register(e){return-1===this.pluginCallbacks.indexOf(e)&&this.pluginCallbacks.push(e),this}unregister(e){return-1!==this.pluginCallbacks.indexOf(e)&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e),1),this}parse(e,t,n,r){let a;const i={},o={},s=new TextDecoder;if("string"==typeof e)a=JSON.parse(e);else if(e instanceof ArrayBuffer)if(s.decode(new Uint8Array(e,0,4))===BINARY_EXTENSION_HEADER_MAGIC){try{i[EXTENSIONS.KHR_BINARY_GLTF]=new GLTFBinaryExtension(e)}catch(e){return void(r&&r(e))}a=JSON.parse(i[EXTENSIONS.KHR_BINARY_GLTF].content)}else a=JSON.parse(s.decode(e));else a=e;if(void 0===a.asset||a.asset.version[0]<2)return void(r&&r(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.")));const l=new GLTFParser(a,{path:t||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});l.fileLoader.setRequestHeader(this.requestHeader);for(let e=0;e<this.pluginCallbacks.length;e++){const t=this.pluginCallbacks[e](l);t.name||console.error("THREE.GLTFLoader: Invalid plugin found: missing name"),o[t.name]=t,i[t.name]=!0}if(a.extensionsUsed)for(let e=0;e<a.extensionsUsed.length;++e){const t=a.extensionsUsed[e],n=a.extensionsRequired||[];switch(t){case EXTENSIONS.KHR_MATERIALS_UNLIT:i[t]=new GLTFMaterialsUnlitExtension;break;case EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:i[t]=new GLTFDracoMeshCompressionExtension(a,this.dracoLoader);break;case EXTENSIONS.KHR_TEXTURE_TRANSFORM:i[t]=new GLTFTextureTransformExtension;break;case EXTENSIONS.KHR_MESH_QUANTIZATION:i[t]=new GLTFMeshQuantizationExtension;break;default:n.indexOf(t)>=0&&void 0===o[t]&&console.warn('THREE.GLTFLoader: Unknown extension "'+t+'".')}}l.setExtensions(i),l.setPlugins(o),l.parse(n,r)}parseAsync(e,t){const n=this;return new Promise((function(r,a){n.parse(e,t,r,a)}))}}function GLTFRegistry(){let e={};return{get:function(t){return e[t]},add:function(t,n){e[t]=n},remove:function(t){delete e[t]},removeAll:function(){e={}}}}const EXTENSIONS={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};class GLTFLightsExtension{constructor(e){this.parser=e,this.name=EXTENSIONS.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const e=this.parser,t=this.parser.json.nodes||[];for(let n=0,r=t.length;n<r;n++){const r=t[n];r.extensions&&r.extensions[this.name]&&void 0!==r.extensions[this.name].light&&e._addNodeRef(this.cache,r.extensions[this.name].light)}}_loadLight(e){const t=this.parser,n="light:"+e;let r=t.cache.get(n);if(r)return r;const a=t.json,i=((a.extensions&&a.extensions[this.name]||{}).lights||[])[e];let o;const s=new Color$1(16777215);void 0!==i.color&&s.setRGB(i.color[0],i.color[1],i.color[2],LinearSRGBColorSpace);const l=void 0!==i.range?i.range:0;switch(i.type){case"directional":o=new DirectionalLight(s),o.target.position.set(0,0,-1),o.add(o.target);break;case"point":o=new PointLight(s),o.distance=l;break;case"spot":o=new SpotLight(s),o.distance=l,i.spot=i.spot||{},i.spot.innerConeAngle=void 0!==i.spot.innerConeAngle?i.spot.innerConeAngle:0,i.spot.outerConeAngle=void 0!==i.spot.outerConeAngle?i.spot.outerConeAngle:Math.PI/4,o.angle=i.spot.outerConeAngle,o.penumbra=1-i.spot.innerConeAngle/i.spot.outerConeAngle,o.target.position.set(0,0,-1),o.add(o.target);break;default:throw new Error("THREE.GLTFLoader: Unexpected light type: "+i.type)}return o.position.set(0,0,0),o.decay=2,assignExtrasToUserData(o,i),void 0!==i.intensity&&(o.intensity=i.intensity),o.name=t.createUniqueName(i.name||"light_"+e),r=Promise.resolve(o),t.cache.add(n,r),r}getDependency(e,t){if("light"===e)return this._loadLight(t)}createNodeAttachment(e){const t=this,n=this.parser,r=n.json.nodes[e],a=(r.extensions&&r.extensions[this.name]||{}).light;return void 0===a?null:this._loadLight(a).then((function(e){return n._getNodeRef(t.cache,a,e)}))}}class GLTFMaterialsUnlitExtension{constructor(){this.name=EXTENSIONS.KHR_MATERIALS_UNLIT}getMaterialType(){return MeshBasicMaterial}extendParams(e,t,n){const r=[];e.color=new Color$1(1,1,1),e.opacity=1;const a=t.pbrMetallicRoughness;if(a){if(Array.isArray(a.baseColorFactor)){const t=a.baseColorFactor;e.color.setRGB(t[0],t[1],t[2],LinearSRGBColorSpace),e.opacity=t[3]}void 0!==a.baseColorTexture&&r.push(n.assignTexture(e,"map",a.baseColorTexture,SRGBColorSpace))}return Promise.all(r)}}class GLTFMaterialsEmissiveStrengthExtension{constructor(e){this.parser=e,this.name=EXTENSIONS.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(e,t){const n=this.parser.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const r=n.extensions[this.name].emissiveStrength;return void 0!==r&&(t.emissiveIntensity=r),Promise.resolve()}}class GLTFMaterialsClearcoatExtension{constructor(e){this.parser=e,this.name=EXTENSIONS.KHR_MATERIALS_CLEARCOAT}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?MeshPhysicalMaterial:null}extendMaterialParams(e,t){const n=this.parser,r=n.json.materials[e];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const a=[],i=r.extensions[this.name];if(void 0!==i.clearcoatFactor&&(t.clearcoat=i.clearcoatFactor),void 0!==i.clearcoatTexture&&a.push(n.assignTexture(t,"clearcoatMap",i.clearcoatTexture)),void 0!==i.clearcoatRoughnessFactor&&(t.clearcoatRoughness=i.clearcoatRoughnessFactor),void 0!==i.clearcoatRoughnessTexture&&a.push(n.assignTexture(t,"clearcoatRoughnessMap",i.clearcoatRoughnessTexture)),void 0!==i.clearcoatNormalTexture&&(a.push(n.assignTexture(t,"clearcoatNormalMap",i.clearcoatNormalTexture)),void 0!==i.clearcoatNormalTexture.scale)){const e=i.clearcoatNormalTexture.scale;t.clearcoatNormalScale=new Vector2(e,e)}return Promise.all(a)}}class GLTFMaterialsIridescenceExtension{constructor(e){this.parser=e,this.name=EXTENSIONS.KHR_MATERIALS_IRIDESCENCE}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?MeshPhysicalMaterial:null}extendMaterialParams(e,t){const n=this.parser,r=n.json.materials[e];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const a=[],i=r.extensions[this.name];return void 0!==i.iridescenceFactor&&(t.iridescence=i.iridescenceFactor),void 0!==i.iridescenceTexture&&a.push(n.assignTexture(t,"iridescenceMap",i.iridescenceTexture)),void 0!==i.iridescenceIor&&(t.iridescenceIOR=i.iridescenceIor),void 0===t.iridescenceThicknessRange&&(t.iridescenceThicknessRange=[100,400]),void 0!==i.iridescenceThicknessMinimum&&(t.iridescenceThicknessRange[0]=i.iridescenceThicknessMinimum),void 0!==i.iridescenceThicknessMaximum&&(t.iridescenceThicknessRange[1]=i.iridescenceThicknessMaximum),void 0!==i.iridescenceThicknessTexture&&a.push(n.assignTexture(t,"iridescenceThicknessMap",i.iridescenceThicknessTexture)),Promise.all(a)}}class GLTFMaterialsSheenExtension{constructor(e){this.parser=e,this.name=EXTENSIONS.KHR_MATERIALS_SHEEN}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?MeshPhysicalMaterial:null}extendMaterialParams(e,t){const n=this.parser,r=n.json.materials[e];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const a=[];t.sheenColor=new Color$1(0,0,0),t.sheenRoughness=0,t.sheen=1;const i=r.extensions[this.name];if(void 0!==i.sheenColorFactor){const e=i.sheenColorFactor;t.sheenColor.setRGB(e[0],e[1],e[2],LinearSRGBColorSpace)}return void 0!==i.sheenRoughnessFactor&&(t.sheenRoughness=i.sheenRoughnessFactor),void 0!==i.sheenColorTexture&&a.push(n.assignTexture(t,"sheenColorMap",i.sheenColorTexture,SRGBColorSpace)),void 0!==i.sheenRoughnessTexture&&a.push(n.assignTexture(t,"sheenRoughnessMap",i.sheenRoughnessTexture)),Promise.all(a)}}class GLTFMaterialsTransmissionExtension{constructor(e){this.parser=e,this.name=EXTENSIONS.KHR_MATERIALS_TRANSMISSION}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?MeshPhysicalMaterial:null}extendMaterialParams(e,t){const n=this.parser,r=n.json.materials[e];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const a=[],i=r.extensions[this.name];return void 0!==i.transmissionFactor&&(t.transmission=i.transmissionFactor),void 0!==i.transmissionTexture&&a.push(n.assignTexture(t,"transmissionMap",i.transmissionTexture)),Promise.all(a)}}class GLTFMaterialsVolumeExtension{constructor(e){this.parser=e,this.name=EXTENSIONS.KHR_MATERIALS_VOLUME}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?MeshPhysicalMaterial:null}extendMaterialParams(e,t){const n=this.parser,r=n.json.materials[e];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const a=[],i=r.extensions[this.name];t.thickness=void 0!==i.thicknessFactor?i.thicknessFactor:0,void 0!==i.thicknessTexture&&a.push(n.assignTexture(t,"thicknessMap",i.thicknessTexture)),t.attenuationDistance=i.attenuationDistance||1/0;const o=i.attenuationColor||[1,1,1];return t.attenuationColor=(new Color$1).setRGB(o[0],o[1],o[2],LinearSRGBColorSpace),Promise.all(a)}}class GLTFMaterialsIorExtension{constructor(e){this.parser=e,this.name=EXTENSIONS.KHR_MATERIALS_IOR}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?MeshPhysicalMaterial:null}extendMaterialParams(e,t){const n=this.parser.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const r=n.extensions[this.name];return t.ior=void 0!==r.ior?r.ior:1.5,Promise.resolve()}}class GLTFMaterialsSpecularExtension{constructor(e){this.parser=e,this.name=EXTENSIONS.KHR_MATERIALS_SPECULAR}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?MeshPhysicalMaterial:null}extendMaterialParams(e,t){const n=this.parser,r=n.json.materials[e];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const a=[],i=r.extensions[this.name];t.specularIntensity=void 0!==i.specularFactor?i.specularFactor:1,void 0!==i.specularTexture&&a.push(n.assignTexture(t,"specularIntensityMap",i.specularTexture));const o=i.specularColorFactor||[1,1,1];return t.specularColor=(new Color$1).setRGB(o[0],o[1],o[2],LinearSRGBColorSpace),void 0!==i.specularColorTexture&&a.push(n.assignTexture(t,"specularColorMap",i.specularColorTexture,SRGBColorSpace)),Promise.all(a)}}class GLTFMaterialsAnisotropyExtension{constructor(e){this.parser=e,this.name=EXTENSIONS.KHR_MATERIALS_ANISOTROPY}getMaterialType(e){const t=this.parser.json.materials[e];return t.extensions&&t.extensions[this.name]?MeshPhysicalMaterial:null}extendMaterialParams(e,t){const n=this.parser,r=n.json.materials[e];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const a=[],i=r.extensions[this.name];return void 0!==i.anisotropyStrength&&(t.anisotropy=i.anisotropyStrength),void 0!==i.anisotropyRotation&&(t.anisotropyRotation=i.anisotropyRotation),void 0!==i.anisotropyTexture&&a.push(n.assignTexture(t,"anisotropyMap",i.anisotropyTexture)),Promise.all(a)}}class GLTFTextureBasisUExtension{constructor(e){this.parser=e,this.name=EXTENSIONS.KHR_TEXTURE_BASISU}loadTexture(e){const t=this.parser,n=t.json,r=n.textures[e];if(!r.extensions||!r.extensions[this.name])return null;const a=r.extensions[this.name],i=t.options.ktx2Loader;if(!i){if(n.extensionsRequired&&n.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return t.loadTextureImage(e,a.source,i)}}class GLTFTextureWebPExtension{constructor(e){this.parser=e,this.name=EXTENSIONS.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(e){const t=this.name,n=this.parser,r=n.json,a=r.textures[e];if(!a.extensions||!a.extensions[t])return null;const i=a.extensions[t],o=r.images[i.source];let s=n.textureLoader;if(o.uri){const e=n.options.manager.getHandler(o.uri);null!==e&&(s=e)}return this.detectSupport().then((function(a){if(a)return n.loadTextureImage(e,i.source,s);if(r.extensionsRequired&&r.extensionsRequired.indexOf(t)>=0)throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return n.loadTexture(e)}))}detectSupport(){return this.isSupported||(this.isSupported=new Promise((function(e){const t=new Image;t.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",t.onload=t.onerror=function(){e(1===t.height)}}))),this.isSupported}}class GLTFTextureAVIFExtension{constructor(e){this.parser=e,this.name=EXTENSIONS.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(e){const t=this.name,n=this.parser,r=n.json,a=r.textures[e];if(!a.extensions||!a.extensions[t])return null;const i=a.extensions[t],o=r.images[i.source];let s=n.textureLoader;if(o.uri){const e=n.options.manager.getHandler(o.uri);null!==e&&(s=e)}return this.detectSupport().then((function(a){if(a)return n.loadTextureImage(e,i.source,s);if(r.extensionsRequired&&r.extensionsRequired.indexOf(t)>=0)throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");return n.loadTexture(e)}))}detectSupport(){return this.isSupported||(this.isSupported=new Promise((function(e){const t=new Image;t.src="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=",t.onload=t.onerror=function(){e(1===t.height)}}))),this.isSupported}}class GLTFMeshoptCompression{constructor(e){this.name=EXTENSIONS.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){const t=this.parser.json,n=t.bufferViews[e];if(n.extensions&&n.extensions[this.name]){const e=n.extensions[this.name],r=this.parser.getDependency("buffer",e.buffer),a=this.parser.options.meshoptDecoder;if(!a||!a.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return r.then((function(t){const n=e.byteOffset||0,r=e.byteLength||0,i=e.count,o=e.byteStride,s=new Uint8Array(t,n,r);return a.decodeGltfBufferAsync?a.decodeGltfBufferAsync(i,o,s,e.mode,e.filter).then((function(e){return e.buffer})):a.ready.then((function(){const t=new ArrayBuffer(i*o);return a.decodeGltfBuffer(new Uint8Array(t),i,o,s,e.mode,e.filter),t}))}))}return null}}class GLTFMeshGpuInstancing{constructor(e){this.name=EXTENSIONS.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){const t=this.parser.json,n=t.nodes[e];if(!n.extensions||!n.extensions[this.name]||void 0===n.mesh)return null;const r=t.meshes[n.mesh];for(const e of r.primitives)if(e.mode!==WEBGL_CONSTANTS.TRIANGLES&&e.mode!==WEBGL_CONSTANTS.TRIANGLE_STRIP&&e.mode!==WEBGL_CONSTANTS.TRIANGLE_FAN&&void 0!==e.mode)return null;const a=n.extensions[this.name].attributes,i=[],o={};for(const e in a)i.push(this.parser.getDependency("accessor",a[e]).then(t=>(o[e]=t,o[e])));return i.length<1?null:(i.push(this.parser.createNodeMesh(e)),Promise.all(i).then(e=>{const t=e.pop(),n=t.isGroup?t.children:[t],r=e[0].count,a=[];for(const e of n){const t=new Matrix4,n=new Vector3,i=new Quaternion,s=new Vector3(1,1,1),l=new InstancedMesh(e.geometry,e.material,r);for(let e=0;e<r;e++)o.TRANSLATION&&n.fromBufferAttribute(o.TRANSLATION,e),o.ROTATION&&i.fromBufferAttribute(o.ROTATION,e),o.SCALE&&s.fromBufferAttribute(o.SCALE,e),l.setMatrixAt(e,t.compose(n,i,s));for(const t in o)if("_COLOR_0"===t){const e=o[t];l.instanceColor=new InstancedBufferAttribute(e.array,e.itemSize,e.normalized)}else"TRANSLATION"!==t&&"ROTATION"!==t&&"SCALE"!==t&&e.geometry.setAttribute(t,o[t]);Object3D.prototype.copy.call(l,e),this.parser.assignFinalMaterial(l),a.push(l)}return t.isGroup?(t.clear(),t.add(...a),t):a[0]}))}}const BINARY_EXTENSION_HEADER_MAGIC="glTF";class GLTFBinaryExtension{constructor(e){this.name=EXTENSIONS.KHR_BINARY_GLTF,this.content=null,this.body=null;const t=new DataView(e,0,12),n=new TextDecoder;if(this.header={magic:n.decode(new Uint8Array(e.slice(0,4))),version:t.getUint32(4,!0),length:t.getUint32(8,!0)},this.header.magic!==BINARY_EXTENSION_HEADER_MAGIC)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");const r=this.header.length-12,a=new DataView(e,12);let i=0;for(;i<r;){const t=a.getUint32(i,!0);i+=4;const r=a.getUint32(i,!0);if(i+=4,1313821514===r){const r=new Uint8Array(e,12+i,t);this.content=n.decode(r)}else if(5130562===r){const n=12+i;this.body=e.slice(n,n+t)}i+=t}if(null===this.content)throw new Error("THREE.GLTFLoader: JSON content not found.")}}class GLTFDracoMeshCompressionExtension{constructor(e,t){if(!t)throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");this.name=EXTENSIONS.KHR_DRACO_MESH_COMPRESSION,this.json=e,this.dracoLoader=t,this.dracoLoader.preload()}decodePrimitive(e,t){const n=this.json,r=this.dracoLoader,a=e.extensions[this.name].bufferView,i=e.extensions[this.name].attributes,o={},s={},l={};for(const e in i){const t=ATTRIBUTES[e]||e.toLowerCase();o[t]=i[e]}for(const t in e.attributes){const r=ATTRIBUTES[t]||t.toLowerCase();if(void 0!==i[t]){const a=n.accessors[e.attributes[t]],i=WEBGL_COMPONENT_TYPES[a.componentType];l[r]=i.name,s[r]=!0===a.normalized}}return t.getDependency("bufferView",a).then((function(e){return new Promise((function(t){r.decodeDracoFile(e,(function(e){for(const t in e.attributes){const n=e.attributes[t],r=s[t];void 0!==r&&(n.normalized=r)}t(e)}),o,l)}))}))}}class GLTFTextureTransformExtension{constructor(){this.name=EXTENSIONS.KHR_TEXTURE_TRANSFORM}extendTexture(e,t){return void 0!==t.texCoord&&t.texCoord!==e.channel||void 0!==t.offset||void 0!==t.rotation||void 0!==t.scale?(e=e.clone(),void 0!==t.texCoord&&(e.channel=t.texCoord),void 0!==t.offset&&e.offset.fromArray(t.offset),void 0!==t.rotation&&(e.rotation=t.rotation),void 0!==t.scale&&e.repeat.fromArray(t.scale),e.needsUpdate=!0,e):e}}class GLTFMeshQuantizationExtension{constructor(){this.name=EXTENSIONS.KHR_MESH_QUANTIZATION}}class GLTFCubicSplineInterpolant extends Interpolant{constructor(e,t,n,r){super(e,t,n,r)}copySampleValue_(e){const t=this.resultBuffer,n=this.sampleValues,r=this.valueSize,a=e*r*3+r;for(let e=0;e!==r;e++)t[e]=n[a+e];return t}interpolate_(e,t,n,r){const a=this.resultBuffer,i=this.sampleValues,o=this.valueSize,s=2*o,l=3*o,h=r-t,d=(n-t)/h,c=d*d,u=c*d,p=e*l,m=p-l,g=-2*u+3*c,_=u-c,f=1-g,v=_-c+d;for(let e=0;e!==o;e++){const t=i[m+e+o],n=i[m+e+s]*h,r=i[p+e+o],l=i[p+e]*h;a[e]=f*t+v*n+g*r+_*l}return a}}const _q=new Quaternion;class GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant{interpolate_(e,t,n,r){const a=super.interpolate_(e,t,n,r);return _q.fromArray(a).normalize().toArray(a),a}}const WEBGL_CONSTANTS={FLOAT:5126,FLOAT_MAT3:35675,FLOAT_MAT4:35676,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,LINEAR:9729,REPEAT:10497,SAMPLER_2D:35678,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,UNSIGNED_BYTE:5121,UNSIGNED_SHORT:5123},WEBGL_COMPONENT_TYPES={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},WEBGL_FILTERS={9728:NearestFilter,9729:LinearFilter,9984:NearestMipmapNearestFilter,9985:LinearMipmapNearestFilter,9986:NearestMipmapLinearFilter,9987:LinearMipmapLinearFilter},WEBGL_WRAPPINGS={33071:ClampToEdgeWrapping,33648:MirroredRepeatWrapping,10497:RepeatWrapping},WEBGL_TYPE_SIZES={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},ATTRIBUTES={POSITION:"position",NORMAL:"normal",TANGENT:"tangent",TEXCOORD_0:"uv",TEXCOORD_1:"uv1",TEXCOORD_2:"uv2",TEXCOORD_3:"uv3",COLOR_0:"color",WEIGHTS_0:"skinWeight",JOINTS_0:"skinIndex"},PATH_PROPERTIES={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},INTERPOLATION={CUBICSPLINE:void 0,LINEAR:InterpolateLinear,STEP:InterpolateDiscrete};function addUnknownExtensionsToUserData(e,t,n){for(const r in n.extensions)void 0===e[r]&&(t.userData.gltfExtensions=t.userData.gltfExtensions||{},t.userData.gltfExtensions[r]=n.extensions[r])}function assignExtrasToUserData(e,t){void 0!==t.extras&&("object"==typeof t.extras?Object.assign(e.userData,t.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+t.extras))}function updateMorphTargets(e,t){if(e.updateMorphTargets(),void 0!==t.weights)for(let n=0,r=t.weights.length;n<r;n++)e.morphTargetInfluences[n]=t.weights[n];if(t.extras&&Array.isArray(t.extras.targetNames)){const n=t.extras.targetNames;if(e.morphTargetInfluences.length===n.length){e.morphTargetDictionary={};for(let t=0,r=n.length;t<r;t++)e.morphTargetDictionary[n[t]]=t}else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")}}function createPrimitiveKey(e){let t;const n=e.extensions&&e.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION];if(t=n?"draco:"+n.bufferView+":"+n.indices+":"+createAttributesKey(n.attributes):e.indices+":"+createAttributesKey(e.attributes)+":"+e.mode,void 0!==e.targets)for(let n=0,r=e.targets.length;n<r;n++)t+=":"+createAttributesKey(e.targets[n]);return t}function createAttributesKey(e){let t="";const n=Object.keys(e).sort();for(let r=0,a=n.length;r<a;r++)t+=n[r]+":"+e[n[r]]+";";return t}function getNormalizedComponentScale(e){switch(e){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.")}}const _identityMatrix=new Matrix4;class GLTFParser{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new GLTFRegistry,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let n=!1,r=!1,a=-1;"undefined"!=typeof navigator&&(n=!0===/^((?!chrome|android).)*safari/i.test(navigator.userAgent),r=navigator.userAgent.indexOf("Firefox")>-1,a=r?navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1]:-1),"undefined"==typeof createImageBitmap||n||r&&a<98?this.textureLoader=new TextureLoader(this.options.manager):this.textureLoader=new ImageBitmapLoader(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new FileLoader(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),"use-credentials"===this.options.crossOrigin&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){const n=this,r=this.json,a=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll((function(e){return e._markDefs&&e._markDefs()})),Promise.all(this._invokeAll((function(e){return e.beforeRoot&&e.beforeRoot()}))).then((function(){return Promise.all([n.getDependencies("scene"),n.getDependencies("animation"),n.getDependencies("camera")])})).then((function(t){const i={scene:t[0][r.scene||0],scenes:t[0],animations:t[1],cameras:t[2],asset:r.asset,parser:n,userData:{}};return addUnknownExtensionsToUserData(a,i,r),assignExtrasToUserData(i,r),Promise.all(n._invokeAll((function(e){return e.afterRoot&&e.afterRoot(i)}))).then((function(){e(i)}))})).catch(t)}_markDefs(){const e=this.json.nodes||[],t=this.json.skins||[],n=this.json.meshes||[];for(let n=0,r=t.length;n<r;n++){const r=t[n].joints;for(let t=0,n=r.length;t<n;t++)e[r[t]].isBone=!0}for(let t=0,r=e.length;t<r;t++){const r=e[t];void 0!==r.mesh&&(this._addNodeRef(this.meshCache,r.mesh),void 0!==r.skin&&(n[r.mesh].isSkinnedMesh=!0)),void 0!==r.camera&&this._addNodeRef(this.cameraCache,r.camera)}}_addNodeRef(e,t){void 0!==t&&(void 0===e.refs[t]&&(e.refs[t]=e.uses[t]=0),e.refs[t]++)}_getNodeRef(e,t,n){if(e.refs[t]<=1)return n;const r=n.clone(),a=(e,t)=>{const n=this.associations.get(e);null!=n&&this.associations.set(t,n);for(const[n,r]of e.children.entries())a(r,t.children[n])};return a(n,r),r.name+="_instance_"+e.uses[t]++,r}_invokeOne(e){const t=Object.values(this.plugins);t.push(this);for(let n=0;n<t.length;n++){const r=e(t[n]);if(r)return r}return null}_invokeAll(e){const t=Object.values(this.plugins);t.unshift(this);const n=[];for(let r=0;r<t.length;r++){const a=e(t[r]);a&&n.push(a)}return n}getDependency(e,t){const n=e+":"+t;let r=this.cache.get(n);if(!r){switch(e){case"scene":r=this.loadScene(t);break;case"node":r=this._invokeOne((function(e){return e.loadNode&&e.loadNode(t)}));break;case"mesh":r=this._invokeOne((function(e){return e.loadMesh&&e.loadMesh(t)}));break;case"accessor":r=this.loadAccessor(t);break;case"bufferView":r=this._invokeOne((function(e){return e.loadBufferView&&e.loadBufferView(t)}));break;case"buffer":r=this.loadBuffer(t);break;case"material":r=this._invokeOne((function(e){return e.loadMaterial&&e.loadMaterial(t)}));break;case"texture":r=this._invokeOne((function(e){return e.loadTexture&&e.loadTexture(t)}));break;case"skin":r=this.loadSkin(t);break;case"animation":r=this._invokeOne((function(e){return e.loadAnimation&&e.loadAnimation(t)}));break;case"camera":r=this.loadCamera(t);break;default:if(r=this._invokeOne((function(n){return n!=this&&n.getDependency&&n.getDependency(e,t)})),!r)throw new Error("Unknown type: "+e)}this.cache.add(n,r)}return r}getDependencies(e){let t=this.cache.get(e);if(!t){const n=this,r=this.json[e+("mesh"===e?"es":"s")]||[];t=Promise.all(r.map((function(t,r){return n.getDependency(e,r)}))),this.cache.add(e,t)}return t}loadBuffer(e){const t=this.json.buffers[e],n=this.fileLoader;if(t.type&&"arraybuffer"!==t.type)throw new Error("THREE.GLTFLoader: "+t.type+" buffer type is not supported.");if(void 0===t.uri&&0===e)return Promise.resolve(this.extensions[EXTENSIONS.KHR_BINARY_GLTF].body);const r=this.options;return new Promise((function(e,a){n.load(LoaderUtils.resolveURL(t.uri,r.path),e,void 0,(function(){a(new Error('THREE.GLTFLoader: Failed to load buffer "'+t.uri+'".'))}))}))}loadBufferView(e){const t=this.json.bufferViews[e];return this.getDependency("buffer",t.buffer).then((function(e){const n=t.byteLength||0,r=t.byteOffset||0;return e.slice(r,r+n)}))}loadAccessor(e){const t=this,n=this.json,r=this.json.accessors[e];if(void 0===r.bufferView&&void 0===r.sparse){const e=WEBGL_TYPE_SIZES[r.type],t=WEBGL_COMPONENT_TYPES[r.componentType],n=!0===r.normalized,a=new t(r.count*e);return Promise.resolve(new BufferAttribute(a,e,n))}const a=[];return void 0!==r.bufferView?a.push(this.getDependency("bufferView",r.bufferView)):a.push(null),void 0!==r.sparse&&(a.push(this.getDependency("bufferView",r.sparse.indices.bufferView)),a.push(this.getDependency("bufferView",r.sparse.values.bufferView))),Promise.all(a).then((function(e){const a=e[0],i=WEBGL_TYPE_SIZES[r.type],o=WEBGL_COMPONENT_TYPES[r.componentType],s=o.BYTES_PER_ELEMENT,l=s*i,h=r.byteOffset||0,d=void 0!==r.bufferView?n.bufferViews[r.bufferView].byteStride:void 0,c=!0===r.normalized;let u,p;if(d&&d!==l){const e=Math.floor(h/d),n="InterleavedBuffer:"+r.bufferView+":"+r.componentType+":"+e+":"+r.count;let l=t.cache.get(n);l||(u=new o(a,e*d,r.count*d/s),l=new InterleavedBuffer(u,d/s),t.cache.add(n,l)),p=new InterleavedBufferAttribute(l,i,h%d/s,c)}else u=null===a?new o(r.count*i):new o(a,h,r.count*i),p=new BufferAttribute(u,i,c);if(void 0!==r.sparse){const t=WEBGL_TYPE_SIZES.SCALAR,n=WEBGL_COMPONENT_TYPES[r.sparse.indices.componentType],s=r.sparse.indices.byteOffset||0,l=r.sparse.values.byteOffset||0,h=new n(e[1],s,r.sparse.count*t),d=new o(e[2],l,r.sparse.count*i);null!==a&&(p=new BufferAttribute(p.array.slice(),p.itemSize,p.normalized));for(let e=0,t=h.length;e<t;e++){const t=h[e];if(p.setX(t,d[e*i]),i>=2&&p.setY(t,d[e*i+1]),i>=3&&p.setZ(t,d[e*i+2]),i>=4&&p.setW(t,d[e*i+3]),i>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}}return p}))}loadTexture(e){const t=this.json,n=this.options,r=t.textures[e].source,a=t.images[r];let i=this.textureLoader;if(a.uri){const e=n.manager.getHandler(a.uri);null!==e&&(i=e)}return this.loadTextureImage(e,r,i)}loadTextureImage(e,t,n){const r=this,a=this.json,i=a.textures[e],o=a.images[t],s=(o.uri||o.bufferView)+":"+i.sampler;if(this.textureCache[s])return this.textureCache[s];const l=this.loadImageSource(t,n).then((function(t){t.flipY=!1,t.name=i.name||o.name||"",""===t.name&&"string"==typeof o.uri&&!1===o.uri.startsWith("data:image/")&&(t.name=o.uri);const n=(a.samplers||{})[i.sampler]||{};return t.magFilter=WEBGL_FILTERS[n.magFilter]||LinearFilter,t.minFilter=WEBGL_FILTERS[n.minFilter]||LinearMipmapLinearFilter,t.wrapS=WEBGL_WRAPPINGS[n.wrapS]||RepeatWrapping,t.wrapT=WEBGL_WRAPPINGS[n.wrapT]||RepeatWrapping,r.associations.set(t,{textures:e}),t})).catch((function(){return null}));return this.textureCache[s]=l,l}loadImageSource(e,t){const n=this.json,r=this.options;if(void 0!==this.sourceCache[e])return this.sourceCache[e].then(e=>e.clone());const a=n.images[e],i=self.URL||self.webkitURL;let o=a.uri||"",s=!1;if(void 0!==a.bufferView)o=this.getDependency("bufferView",a.bufferView).then((function(e){s=!0;const t=new Blob([e],{type:a.mimeType});return o=i.createObjectURL(t),o}));else if(void 0===a.uri)throw new Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");const l=Promise.resolve(o).then((function(e){return new Promise((function(n,a){let i=n;!0===t.isImageBitmapLoader&&(i=function(e){const t=new Texture(e);t.needsUpdate=!0,n(t)}),t.load(LoaderUtils.resolveURL(e,r.path),i,void 0,a)}))})).then((function(e){var t;return!0===s&&i.revokeObjectURL(o),e.userData.mimeType=a.mimeType||((t=a.uri).search(/\.jpe?g($|\?)/i)>0||0===t.search(/^data\:image\/jpeg/)?"image/jpeg":t.search(/\.webp($|\?)/i)>0||0===t.search(/^data\:image\/webp/)?"image/webp":"image/png"),e})).catch((function(e){throw console.error("THREE.GLTFLoader: Couldn't load texture",o),e}));return this.sourceCache[e]=l,l}assignTexture(e,t,n,r){const a=this;return this.getDependency("texture",n.index).then((function(i){if(!i)return null;if(void 0!==n.texCoord&&n.texCoord>0&&((i=i.clone()).channel=n.texCoord),a.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM]){const e=void 0!==n.extensions?n.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM]:void 0;if(e){const t=a.associations.get(i);i=a.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM].extendTexture(i,e),a.associations.set(i,t)}}return void 0!==r&&(i.colorSpace=r),e[t]=i,i}))}assignFinalMaterial(e){const t=e.geometry;let n=e.material;const r=void 0===t.attributes.tangent,a=void 0!==t.attributes.color,i=void 0===t.attributes.normal;if(e.isPoints){const e="PointsMaterial:"+n.uuid;let t=this.cache.get(e);t||(t=new PointsMaterial,Material.prototype.copy.call(t,n),t.color.copy(n.color),t.map=n.map,t.sizeAttenuation=!1,this.cache.add(e,t)),n=t}else if(e.isLine){const e="LineBasicMaterial:"+n.uuid;let t=this.cache.get(e);t||(t=new LineBasicMaterial,Material.prototype.copy.call(t,n),t.color.copy(n.color),t.map=n.map,this.cache.add(e,t)),n=t}if(r||a||i){let e="ClonedMaterial:"+n.uuid+":";r&&(e+="derivative-tangents:"),a&&(e+="vertex-colors:"),i&&(e+="flat-shading:");let t=this.cache.get(e);t||(t=n.clone(),a&&(t.vertexColors=!0),i&&(t.flatShading=!0),r&&(t.normalScale&&(t.normalScale.y*=-1),t.clearcoatNormalScale&&(t.clearcoatNormalScale.y*=-1)),this.cache.add(e,t),this.associations.set(t,this.associations.get(n))),n=t}e.material=n}getMaterialType(){return MeshStandardMaterial}loadMaterial(e){const t=this,n=this.json,r=this.extensions,a=n.materials[e];let i;const o={},s=[];if((a.extensions||{})[EXTENSIONS.KHR_MATERIALS_UNLIT]){const e=r[EXTENSIONS.KHR_MATERIALS_UNLIT];i=e.getMaterialType(),s.push(e.extendParams(o,a,t))}else{const n=a.pbrMetallicRoughness||{};if(o.color=new Color$1(1,1,1),o.opacity=1,Array.isArray(n.baseColorFactor)){const e=n.baseColorFactor;o.color.setRGB(e[0],e[1],e[2],LinearSRGBColorSpace),o.opacity=e[3]}void 0!==n.baseColorTexture&&s.push(t.assignTexture(o,"map",n.baseColorTexture,SRGBColorSpace)),o.metalness=void 0!==n.metallicFactor?n.metallicFactor:1,o.roughness=void 0!==n.roughnessFactor?n.roughnessFactor:1,void 0!==n.metallicRoughnessTexture&&(s.push(t.assignTexture(o,"metalnessMap",n.metallicRoughnessTexture)),s.push(t.assignTexture(o,"roughnessMap",n.metallicRoughnessTexture))),i=this._invokeOne((function(t){return t.getMaterialType&&t.getMaterialType(e)})),s.push(Promise.all(this._invokeAll((function(t){return t.extendMaterialParams&&t.extendMaterialParams(e,o)}))))}!0===a.doubleSided&&(o.side=DoubleSide);const l=a.alphaMode||"OPAQUE";if("BLEND"===l?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,"MASK"===l&&(o.alphaTest=void 0!==a.alphaCutoff?a.alphaCutoff:.5)),void 0!==a.normalTexture&&i!==MeshBasicMaterial&&(s.push(t.assignTexture(o,"normalMap",a.normalTexture)),o.normalScale=new Vector2(1,1),void 0!==a.normalTexture.scale)){const e=a.normalTexture.scale;o.normalScale.set(e,e)}if(void 0!==a.occlusionTexture&&i!==MeshBasicMaterial&&(s.push(t.assignTexture(o,"aoMap",a.occlusionTexture)),void 0!==a.occlusionTexture.strength&&(o.aoMapIntensity=a.occlusionTexture.strength)),void 0!==a.emissiveFactor&&i!==MeshBasicMaterial){const e=a.emissiveFactor;o.emissive=(new Color$1).setRGB(e[0],e[1],e[2],LinearSRGBColorSpace)}return void 0!==a.emissiveTexture&&i!==MeshBasicMaterial&&s.push(t.assignTexture(o,"emissiveMap",a.emissiveTexture,SRGBColorSpace)),Promise.all(s).then((function(){const n=new i(o);return a.name&&(n.name=a.name),assignExtrasToUserData(n,a),t.associations.set(n,{materials:e}),a.extensions&&addUnknownExtensionsToUserData(r,n,a),n}))}createUniqueName(e){const t=PropertyBinding.sanitizeNodeName(e||"");return t in this.nodeNamesUsed?t+"_"+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){const t=this,n=this.extensions,r=this.primitiveCache;function a(e){return n[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(e,t).then((function(n){return addPrimitiveAttributes(n,e,t)}))}const i=[];for(let n=0,o=e.length;n<o;n++){const o=e[n],s=createPrimitiveKey(o),l=r[s];if(l)i.push(l.promise);else{let e;e=o.extensions&&o.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION]?a(o):addPrimitiveAttributes(new BufferGeometry,o,t),r[s]={primitive:o,promise:e},i.push(e)}}return Promise.all(i)}loadMesh(e){const t=this,n=this.json,r=this.extensions,a=n.meshes[e],i=a.primitives,o=[];for(let e=0,t=i.length;e<t;e++){const t=void 0===i[e].material?(void 0===(s=this.cache).DefaultMaterial&&(s.DefaultMaterial=new MeshStandardMaterial({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:FrontSide})),s.DefaultMaterial):this.getDependency("material",i[e].material);o.push(t)}var s;return o.push(t.loadGeometries(i)),Promise.all(o).then((function(n){const o=n.slice(0,n.length-1),s=n[n.length-1],l=[];for(let n=0,h=s.length;n<h;n++){const h=s[n],d=i[n];let c;const u=o[n];if(d.mode===WEBGL_CONSTANTS.TRIANGLES||d.mode===WEBGL_CONSTANTS.TRIANGLE_STRIP||d.mode===WEBGL_CONSTANTS.TRIANGLE_FAN||void 0===d.mode)c=!0===a.isSkinnedMesh?new SkinnedMesh(h,u):new Mesh(h,u),!0===c.isSkinnedMesh&&c.normalizeSkinWeights(),d.mode===WEBGL_CONSTANTS.TRIANGLE_STRIP?c.geometry=toTrianglesDrawMode(c.geometry,TriangleStripDrawMode):d.mode===WEBGL_CONSTANTS.TRIANGLE_FAN&&(c.geometry=toTrianglesDrawMode(c.geometry,TriangleFanDrawMode));else if(d.mode===WEBGL_CONSTANTS.LINES)c=new LineSegments(h,u);else if(d.mode===WEBGL_CONSTANTS.LINE_STRIP)c=new Line(h,u);else if(d.mode===WEBGL_CONSTANTS.LINE_LOOP)c=new LineLoop(h,u);else{if(d.mode!==WEBGL_CONSTANTS.POINTS)throw new Error("THREE.GLTFLoader: Primitive mode unsupported: "+d.mode);c=new Points(h,u)}Object.keys(c.geometry.morphAttributes).length>0&&updateMorphTargets(c,a),c.name=t.createUniqueName(a.name||"mesh_"+e),assignExtrasToUserData(c,a),d.extensions&&addUnknownExtensionsToUserData(r,c,d),t.assignFinalMaterial(c),l.push(c)}for(let n=0,r=l.length;n<r;n++)t.associations.set(l[n],{meshes:e,primitives:n});if(1===l.length)return a.extensions&&addUnknownExtensionsToUserData(r,l[0],a),l[0];const h=new Group;a.extensions&&addUnknownExtensionsToUserData(r,h,a),t.associations.set(h,{meshes:e});for(let e=0,t=l.length;e<t;e++)h.add(l[e]);return h}))}loadCamera(e){let t;const n=this.json.cameras[e],r=n[n.type];if(r)return"perspective"===n.type?t=new PerspectiveCamera(MathUtils.radToDeg(r.yfov),r.aspectRatio||1,r.znear||1,r.zfar||2e6):"orthographic"===n.type&&(t=new OrthographicCamera(-r.xmag,r.xmag,r.ymag,-r.ymag,r.znear,r.zfar)),n.name&&(t.name=this.createUniqueName(n.name)),assignExtrasToUserData(t,n),Promise.resolve(t);console.warn("THREE.GLTFLoader: Missing camera parameters.")}loadSkin(e){const t=this.json.skins[e],n=[];for(let e=0,r=t.joints.length;e<r;e++)n.push(this._loadNodeShallow(t.joints[e]));return void 0!==t.inverseBindMatrices?n.push(this.getDependency("accessor",t.inverseBindMatrices)):n.push(null),Promise.all(n).then((function(e){const n=e.pop(),r=e,a=[],i=[];for(let e=0,o=r.length;e<o;e++){const o=r[e];if(o){a.push(o);const t=new Matrix4;null!==n&&t.fromArray(n.array,16*e),i.push(t)}else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.',t.joints[e])}return new Skeleton(a,i)}))}loadAnimation(e){const t=this.json,n=this,r=t.animations[e],a=r.name?r.name:"animation_"+e,i=[],o=[],s=[],l=[],h=[];for(let e=0,t=r.channels.length;e<t;e++){const t=r.channels[e],n=r.samplers[t.sampler],a=t.target,d=a.node,c=void 0!==r.parameters?r.parameters[n.input]:n.input,u=void 0!==r.parameters?r.parameters[n.output]:n.output;void 0!==a.node&&(i.push(this.getDependency("node",d)),o.push(this.getDependency("accessor",c)),s.push(this.getDependency("accessor",u)),l.push(n),h.push(a))}return Promise.all([Promise.all(i),Promise.all(o),Promise.all(s),Promise.all(l),Promise.all(h)]).then((function(e){const t=e[0],r=e[1],i=e[2],o=e[3],s=e[4],l=[];for(let e=0,a=t.length;e<a;e++){const a=t[e],h=r[e],d=i[e],c=o[e],u=s[e];if(void 0===a)continue;a.updateMatrix&&a.updateMatrix();const p=n._createAnimationTracks(a,h,d,c,u);if(p)for(let e=0;e<p.length;e++)l.push(p[e])}return new AnimationClip(a,void 0,l)}))}createNodeMesh(e){const t=this.json,n=this,r=t.nodes[e];return void 0===r.mesh?null:n.getDependency("mesh",r.mesh).then((function(e){const t=n._getNodeRef(n.meshCache,r.mesh,e);return void 0!==r.weights&&t.traverse((function(e){if(e.isMesh)for(let t=0,n=r.weights.length;t<n;t++)e.morphTargetInfluences[t]=r.weights[t]})),t}))}loadNode(e){const t=this,n=this.json.nodes[e],r=t._loadNodeShallow(e),a=[],i=n.children||[];for(let e=0,n=i.length;e<n;e++)a.push(t.getDependency("node",i[e]));const o=void 0===n.skin?Promise.resolve(null):t.getDependency("skin",n.skin);return Promise.all([r,Promise.all(a),o]).then((function(e){const t=e[0],n=e[1],r=e[2];null!==r&&t.traverse((function(e){e.isSkinnedMesh&&e.bind(r,_identityMatrix)}));for(let e=0,r=n.length;e<r;e++)t.add(n[e]);return t}))}_loadNodeShallow(e){const t=this.json,n=this.extensions,r=this;if(void 0!==this.nodeCache[e])return this.nodeCache[e];const a=t.nodes[e],i=a.name?r.createUniqueName(a.name):"",o=[],s=r._invokeOne((function(t){return t.createNodeMesh&&t.createNodeMesh(e)}));return s&&o.push(s),void 0!==a.camera&&o.push(r.getDependency("camera",a.camera).then((function(e){return r._getNodeRef(r.cameraCache,a.camera,e)}))),r._invokeAll((function(t){return t.createNodeAttachment&&t.createNodeAttachment(e)})).forEach((function(e){o.push(e)})),this.nodeCache[e]=Promise.all(o).then((function(t){let o;if(o=!0===a.isBone?new Bone:t.length>1?new Group:1===t.length?t[0]:new Object3D,o!==t[0])for(let e=0,n=t.length;e<n;e++)o.add(t[e]);if(a.name&&(o.userData.name=a.name,o.name=i),assignExtrasToUserData(o,a),a.extensions&&addUnknownExtensionsToUserData(n,o,a),void 0!==a.matrix){const e=new Matrix4;e.fromArray(a.matrix),o.applyMatrix4(e)}else void 0!==a.translation&&o.position.fromArray(a.translation),void 0!==a.rotation&&o.quaternion.fromArray(a.rotation),void 0!==a.scale&&o.scale.fromArray(a.scale);return r.associations.has(o)||r.associations.set(o,{}),r.associations.get(o).nodes=e,o})),this.nodeCache[e]}loadScene(e){const t=this.extensions,n=this.json.scenes[e],r=this,a=new Group;n.name&&(a.name=r.createUniqueName(n.name)),assignExtrasToUserData(a,n),n.extensions&&addUnknownExtensionsToUserData(t,a,n);const i=n.nodes||[],o=[];for(let e=0,t=i.length;e<t;e++)o.push(r.getDependency("node",i[e]));return Promise.all(o).then((function(e){for(let t=0,n=e.length;t<n;t++)a.add(e[t]);return r.associations=(e=>{const t=new Map;for(const[e,n]of r.associations)(e instanceof Material||e instanceof Texture)&&t.set(e,n);return e.traverse(e=>{const n=r.associations.get(e);null!=n&&t.set(e,n)}),t})(a),a}))}_createAnimationTracks(e,t,n,r,a){const i=[],o=e.name?e.name:e.uuid,s=[];let l;switch(PATH_PROPERTIES[a.path]===PATH_PROPERTIES.weights?e.traverse((function(e){e.morphTargetInfluences&&s.push(e.name?e.name:e.uuid)})):s.push(o),PATH_PROPERTIES[a.path]){case PATH_PROPERTIES.weights:l=NumberKeyframeTrack;break;case PATH_PROPERTIES.rotation:l=QuaternionKeyframeTrack;break;case PATH_PROPERTIES.position:case PATH_PROPERTIES.scale:l=VectorKeyframeTrack;break;default:switch(n.itemSize){case 1:l=NumberKeyframeTrack;break;case 2:case 3:default:l=VectorKeyframeTrack}}const h=void 0!==r.interpolation?INTERPOLATION[r.interpolation]:InterpolateLinear,d=this._getArrayFromAccessor(n);for(let e=0,n=s.length;e<n;e++){const n=new l(s[e]+"."+PATH_PROPERTIES[a.path],t.array,d,h);"CUBICSPLINE"===r.interpolation&&this._createCubicSplineTrackInterpolant(n),i.push(n)}return i}_getArrayFromAccessor(e){let t=e.array;if(e.normalized){const e=getNormalizedComponentScale(t.constructor),n=new Float32Array(t.length);for(let r=0,a=t.length;r<a;r++)n[r]=t[r]*e;t=n}return t}_createCubicSplineTrackInterpolant(e){e.createInterpolant=function(e){return new(this instanceof QuaternionKeyframeTrack?GLTFCubicSplineQuaternionInterpolant:GLTFCubicSplineInterpolant)(this.times,this.values,this.getValueSize()/3,e)},e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}}function addPrimitiveAttributes(e,t,n){const r=t.attributes,a=[];function i(t,r){return n.getDependency("accessor",t).then((function(t){e.setAttribute(r,t)}))}for(const t in r){const n=ATTRIBUTES[t]||t.toLowerCase();n in e.attributes||a.push(i(r[t],n))}if(void 0!==t.indices&&!e.index){const r=n.getDependency("accessor",t.indices).then((function(t){e.setIndex(t)}));a.push(r)}return ColorManagement.workingColorSpace!==LinearSRGBColorSpace&&"COLOR_0"in r&&console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${ColorManagement.workingColorSpace}" not supported.`),assignExtrasToUserData(e,t),function(e,t,n){const r=t.attributes,a=new Box3;if(void 0===r.POSITION)return;{const e=n.json.accessors[r.POSITION],t=e.min,i=e.max;if(void 0===t||void 0===i)return void console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");if(a.set(new Vector3(t[0],t[1],t[2]),new Vector3(i[0],i[1],i[2])),e.normalized){const t=getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[e.componentType]);a.min.multiplyScalar(t),a.max.multiplyScalar(t)}}const i=t.targets;if(void 0!==i){const e=new Vector3,t=new Vector3;for(let r=0,a=i.length;r<a;r++){const a=i[r];if(void 0!==a.POSITION){const r=n.json.accessors[a.POSITION],i=r.min,o=r.max;if(void 0!==i&&void 0!==o){if(t.setX(Math.max(Math.abs(i[0]),Math.abs(o[0]))),t.setY(Math.max(Math.abs(i[1]),Math.abs(o[1]))),t.setZ(Math.max(Math.abs(i[2]),Math.abs(o[2]))),r.normalized){const e=getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[r.componentType]);t.multiplyScalar(e)}e.max(t)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}a.expandByVector(e)}e.boundingBox=a;const o=new Sphere;a.getCenter(o.center),o.radius=a.min.distanceTo(a.max)/2,e.boundingSphere=o}(e,t,n),Promise.all(a).then((function(){return void 0!==t.targets?function(e,t,n){let r=!1,a=!1,i=!1;for(let e=0,n=t.length;e<n;e++){const n=t[e];if(void 0!==n.POSITION&&(r=!0),void 0!==n.NORMAL&&(a=!0),void 0!==n.COLOR_0&&(i=!0),r&&a&&i)break}if(!r&&!a&&!i)return Promise.resolve(e);const o=[],s=[],l=[];for(let h=0,d=t.length;h<d;h++){const d=t[h];if(r){const t=void 0!==d.POSITION?n.getDependency("accessor",d.POSITION):e.attributes.position;o.push(t)}if(a){const t=void 0!==d.NORMAL?n.getDependency("accessor",d.NORMAL):e.attributes.normal;s.push(t)}if(i){const t=void 0!==d.COLOR_0?n.getDependency("accessor",d.COLOR_0):e.attributes.color;l.push(t)}}return Promise.all([Promise.all(o),Promise.all(s),Promise.all(l)]).then((function(t){const n=t[0],o=t[1],s=t[2];return r&&(e.morphAttributes.position=n),a&&(e.morphAttributes.normal=o),i&&(e.morphAttributes.color=s),e.morphTargetsRelative=!0,e}))}(e,t.targets,n):e}))}const _taskCache=new WeakMap;class DRACOLoader extends Loader{constructor(e){super(e),this.decoderPath="",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.defaultAttributeIDs={position:"POSITION",normal:"NORMAL",color:"COLOR",uv:"TEX_COORD"},this.defaultAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Float32Array",uv:"Float32Array"}}setDecoderPath(e){return this.decoderPath=e,this}setDecoderConfig(e){return this.decoderConfig=e,this}setWorkerLimit(e){return this.workerLimit=e,this}load(e,t,n,r){const a=new FileLoader(this.manager);a.setPath(this.path),a.setResponseType("arraybuffer"),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,e=>{this.parse(e,t,r)},n,r)}parse(e,t,n){this.decodeDracoFile(e,t,null,null,SRGBColorSpace).catch(n)}decodeDracoFile(e,t,n,r,a=LinearSRGBColorSpace){const i={attributeIDs:n||this.defaultAttributeIDs,attributeTypes:r||this.defaultAttributeTypes,useUniqueIDs:!!n,vertexColorSpace:a};return this.decodeGeometry(e,i).then(t)}decodeGeometry(e,t){const n=JSON.stringify(t);if(_taskCache.has(e)){const t=_taskCache.get(e);if(t.key===n)return t.promise;if(0===e.byteLength)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let r;const a=this.workerNextTaskID++,i=e.byteLength,o=this._getWorker(a,i).then(n=>(r=n,new Promise((n,i)=>{r._callbacks[a]={resolve:n,reject:i},r.postMessage({type:"decode",id:a,taskConfig:t,buffer:e},[e])}))).then(e=>this._createGeometry(e.geometry));return o.catch(()=>!0).then(()=>{r&&a&&this._releaseTask(r,a)}),_taskCache.set(e,{key:n,promise:o}),o}_createGeometry(e){const t=new BufferGeometry;e.index&&t.setIndex(new BufferAttribute(e.index.array,1));for(let n=0;n<e.attributes.length;n++){const r=e.attributes[n],a=r.name,i=r.array,o=r.itemSize,s=new BufferAttribute(i,o);"color"===a&&(this._assignVertexColorSpace(s,r.vertexColorSpace),s.normalized=i instanceof Float32Array==0),t.setAttribute(a,s)}return t}_assignVertexColorSpace(e,t){if(t!==SRGBColorSpace)return;const n=new Color$1;for(let t=0,r=e.count;t<r;t++)n.fromBufferAttribute(e,t).convertSRGBToLinear(),e.setXYZ(t,n.r,n.g,n.b)}_loadLibrary(e,t){const n=new FileLoader(this.manager);return n.setPath(this.decoderPath),n.setResponseType(t),n.setWithCredentials(this.withCredentials),new Promise((t,r)=>{n.load(e,t,void 0,r)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;const e="object"!=typeof WebAssembly||"js"===this.decoderConfig.type,t=[];return e?t.push(this._loadLibrary("draco_decoder.js","text")):(t.push(this._loadLibrary("draco_wasm_wrapper.js","text")),t.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(t).then(t=>{const n=t[0];e||(this.decoderConfig.wasmBinary=t[1]);const r=DRACOWorker.toString(),a=["/* draco decoder */",n,"","/* worker */",r.substring(r.indexOf("{")+1,r.lastIndexOf("}"))].join("\n");this.workerSourceURL=URL.createObjectURL(new Blob([a]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.length<this.workerLimit){const e=new Worker(this.workerSourceURL);e._callbacks={},e._taskCosts={},e._taskLoad=0,e.postMessage({type:"init",decoderConfig:this.decoderConfig}),e.onmessage=function(t){const n=t.data;switch(n.type){case"decode":e._callbacks[n.id].resolve(n);break;case"error":e._callbacks[n.id].reject(n);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+n.type+'"')}},this.workerPool.push(e)}else this.workerPool.sort((function(e,t){return e._taskLoad>t._taskLoad?-1:1}));const n=this.workerPool[this.workerPool.length-1];return n._taskCosts[e]=t,n._taskLoad+=t,n})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){this.workerPool.map(e=>e._taskLoad)}dispose(){for(let e=0;e<this.workerPool.length;++e)this.workerPool[e].terminate();return this.workerPool.length=0,""!==this.workerSourceURL&&URL.revokeObjectURL(this.workerSourceURL),this}}function DRACOWorker(){let e,t;function n(e,t,n,r,a,i){const o=i.num_components(),s=n.num_points()*o,l=s*a.BYTES_PER_ELEMENT,h=function(e,t){switch(t){case Float32Array:return e.DT_FLOAT32;case Int8Array:return e.DT_INT8;case Int16Array:return e.DT_INT16;case Int32Array:return e.DT_INT32;case Uint8Array:return e.DT_UINT8;case Uint16Array:return e.DT_UINT16;case Uint32Array:return e.DT_UINT32}}(e,a),d=e._malloc(l);t.GetAttributeDataArrayForAllPoints(n,i,h,l,d);const c=new a(e.HEAPF32.buffer,d,s).slice();return e._free(d),{name:r,array:c,itemSize:o}}onmessage=function(r){const a=r.data;switch(a.type){case"init":e=a.decoderConfig,t=new Promise((function(t){e.onModuleLoaded=function(e){t({draco:e})},DracoDecoderModule(e)}));break;case"decode":const r=a.buffer,i=a.taskConfig;t.then(e=>{const t=e.draco,o=new t.Decoder;try{const e=function(e,t,r,a){const i=a.attributeIDs,o=a.attributeTypes;let s,l;const h=t.GetEncodedGeometryType(r);if(h===e.TRIANGULAR_MESH)s=new e.Mesh,l=t.DecodeArrayToMesh(r,r.byteLength,s);else{if(h!==e.POINT_CLOUD)throw new Error("THREE.DRACOLoader: Unexpected geometry type.");s=new e.PointCloud,l=t.DecodeArrayToPointCloud(r,r.byteLength,s)}if(!l.ok()||0===s.ptr)throw new Error("THREE.DRACOLoader: Decoding failed: "+l.error_msg());const d={index:null,attributes:[]};for(const r in i){const l=self[o[r]];let h,c;if(a.useUniqueIDs)c=i[r],h=t.GetAttributeByUniqueId(s,c);else{if(c=t.GetAttributeId(s,e[i[r]]),-1===c)continue;h=t.GetAttribute(s,c)}const u=n(e,t,s,r,l,h);"color"===r&&(u.vertexColorSpace=a.vertexColorSpace),d.attributes.push(u)}return h===e.TRIANGULAR_MESH&&(d.index=function(e,t,n){const r=3*n.num_faces(),a=4*r,i=e._malloc(a);t.GetTrianglesUInt32Array(n,a,i);const o=new Uint32Array(e.HEAPF32.buffer,i,r).slice();return e._free(i),{array:o,itemSize:1}}(e,t,s)),e.destroy(s),d}(t,o,new Int8Array(r),i),s=e.attributes.map(e=>e.array.buffer);e.index&&s.push(e.index.array.buffer),self.postMessage({type:"decode",id:a.id,geometry:e},s)}catch(e){console.error(e),self.postMessage({type:"error",id:a.id,error:e.message})}finally{t.destroy(o)}})}}}const DRACO_LIB_FILES={"draco_wasm_wrapper.js":"static/draco_wasm_wrapper-6263f3a4b71cdf3b.js","draco_decoder.wasm":"static/draco_decoder-b048235474cbf09e.wasm","draco_decoder.js":"static/draco_decoder-dc7f397e2a2ebac4.js"};class LocalStorageHelper{constructor(e){this._context_=e}getStore(e="rml_default"){return this._localStorage.getItem(e)||{entries:[]}}saveStore(e,t){this._localStorage.setItem(e,t)}addItem(e,t,n="rml_default",r=5){const a=this.getStore(n),i=a.entries.find(t=>t.id===e);if(i?(i.payload=t,i.date=Date.now()):a.entries.push({id:e,date:Date.now(),payload:t}),a.entries.length>r)for(a.entries.sort((e,t)=>t.date-e.date);a.entries.length>r;)a.entries.pop();this.saveStore(n,a)}getItem(e,t="rml_default"){const n=this.getStore(t).entries.find(t=>t.id===e);return n?n.payload:null}}__decorate([inject],LocalStorageHelper.prototype,"_localStorage",void 0);const toRadiant=function(e){return e*(Math.PI/180)},toDegrees=function(e){return e*(180/Math.PI)},getIdealDistance=function(e,t,n,r,a,i){e=Math.sqrt(e*e+n*n);const o=a/i,s=2*Math.atan(Math.tan(r*Math.PI/180/2)*o)*180/Math.PI,l=toRadiant(r),h=t/2/Math.tan(l/2),d=e/(2*Math.atan(Math.PI*s/360));return Math.max(h,d)},round=function(e){return Math.round(1e3*e)/1e3},getDelta=function(e,t){return Math.abs(e.y-t.y)+Math.abs(e.x-t.x)},convertToTHREE=e=>new Vector3(e.x/1e3,e.z/1e3,e.y/-1e3),convertToThreeDimensions=e=>new Vector3(e.x/1e3,e.z/1e3,e.y/1e3),convertToKernel=e=>({x:Math.round(1e3*e.x),y:Math.round(-1e3*e.z),z:Math.round(1e3*e.y)}),utilityStringToUTF16=e=>decodeURIComponent(encodeURIComponent(e)),convertCObject=e=>{if(!e){const t=typeof e;return"number"===t||"boolean"===t?e:null}if(!e.hasOwnProperty("size")&&e.size&&"function"==typeof e.size){let t=utilityToArray(e);for(let e=0;e<t.length;e++)t[e]=convertCObject(t[e]);return"string"==typeof t?utilityStringToUTF16(t):t}if("object"==typeof e)for(let t in e)e.hasOwnProperty(t)&&(e[t]=convertCObject(e[t]));return"string"==typeof e?utilityStringToUTF16(e):e},utilityToArray=e=>{let t=[];if(e){let n=e.size();for(let r=0;r<n;r++)t.push(e.get(r))}return t},convertToThreeMatrix=e=>{let t=new Matrix4,n=convertCObject(e);return t.fromArray(n),t.transpose(),(e=>{let t=new Matrix4;t.set(1,0,0,0,0,0,1,0,0,-1,0,0,0,0,0,1),t.scale(new Vector3(.001,.001,.001));let n=new Matrix4;return n.set(1,0,0,0,0,0,-1,0,0,1,0,0,0,0,0,1),n.scale(new Vector3(1e3,1e3,1e3)),t.multiply(e).multiply(n)})(t)};function colorToString(e,t){var n=e.__state.conversionName.toString(),r=Math.round(e.r),a=Math.round(e.g),i=Math.round(e.b),o=e.a,s=Math.round(e.h),l=e.s.toFixed(1),h=e.v.toFixed(1);if(t||"THREE_CHAR_HEX"===n||"SIX_CHAR_HEX"===n){for(var d=e.hex.toString(16);d.length<6;)d="0"+d;return"#"+d}return"CSS_RGB"===n?"rgb("+r+","+a+","+i+")":"CSS_RGBA"===n?"rgba("+r+","+a+","+i+","+o+")":"HEX"===n?"0x"+e.hex.toString(16):"RGB_ARRAY"===n?"["+r+","+a+","+i+"]":"RGBA_ARRAY"===n?"["+r+","+a+","+i+","+o+"]":"RGB_OBJ"===n?"{r:"+r+",g:"+a+",b:"+i+"}":"RGBA_OBJ"===n?"{r:"+r+",g:"+a+",b:"+i+",a:"+o+"}":"HSV_OBJ"===n?"{h:"+s+",s:"+l+",v:"+h+"}":"HSVA_OBJ"===n?"{h:"+s+",s:"+l+",v:"+h+",a:"+o+"}":"unknown format"}var ARR_EACH=Array.prototype.forEach,ARR_SLICE=Array.prototype.slice,Common={BREAK:{},extend:function(e){return this.each(ARR_SLICE.call(arguments,1),(function(t){(this.isObject(t)?Object.keys(t):[]).forEach(function(n){this.isUndefined(t[n])||(e[n]=t[n])}.bind(this))}),this),e},defaults:function(e){return this.each(ARR_SLICE.call(arguments,1),(function(t){(this.isObject(t)?Object.keys(t):[]).forEach(function(n){this.isUndefined(e[n])&&(e[n]=t[n])}.bind(this))}),this),e},compose:function(){var e=ARR_SLICE.call(arguments);return function(){for(var t=ARR_SLICE.call(arguments),n=e.length-1;n>=0;n--)t=[e[n].apply(this,t)];return t[0]}},each:function(e,t,n){if(e)if(ARR_EACH&&e.forEach&&e.forEach===ARR_EACH)e.forEach(t,n);else if(e.length===e.length+0){var r,a=void 0;for(a=0,r=e.length;a<r;a++)if(a in e&&t.call(n,e[a],a)===this.BREAK)return}else for(var i in e)if(t.call(n,e[i],i)===this.BREAK)return},defer:function(e){setTimeout(e,0)},debounce:function(e,t,n){var r=void 0;return function(){var a=this,i=arguments;function o(){r=null,n||e.apply(a,i)}var s=n||!r;clearTimeout(r),r=setTimeout(o,t),s&&e.apply(a,i)}},toArray:function(e){return e.toArray?e.toArray():ARR_SLICE.call(e)},isUndefined:function(e){return void 0===e},isNull:function(e){return null===e},isNaN:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){return isNaN(e)})),isArray:Array.isArray||function(e){return e.constructor===Array},isObject:function(e){return e===Object(e)},isNumber:function(e){return e===e+0},isString:function(e){return e===e+""},isBoolean:function(e){return!1===e||!0===e},isFunction:function(e){return e instanceof Function}},INTERPRETATIONS=[{litmus:Common.isString,conversions:{THREE_CHAR_HEX:{read:function(e){var t=e.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);return null!==t&&{space:"HEX",hex:parseInt("0x"+t[1].toString()+t[1].toString()+t[2].toString()+t[2].toString()+t[3].toString()+t[3].toString(),0)}},write:colorToString},SIX_CHAR_HEX:{read:function(e){var t=e.match(/^#([A-F0-9]{6})$/i);return null!==t&&{space:"HEX",hex:parseInt("0x"+t[1].toString(),0)}},write:colorToString},CSS_RGB:{read:function(e){var t=e.match(/^rgb\(\s*(\S+)\s*,\s*(\S+)\s*,\s*(\S+)\s*\)/);return null!==t&&{space:"RGB",r:parseFloat(t[1]),g:parseFloat(t[2]),b:parseFloat(t[3])}},write:colorToString},CSS_RGBA:{read:function(e){var t=e.match(/^rgba\(\s*(\S+)\s*,\s*(\S+)\s*,\s*(\S+)\s*,\s*(\S+)\s*\)/);return null!==t&&{space:"RGB",r:parseFloat(t[1]),g:parseFloat(t[2]),b:parseFloat(t[3]),a:parseFloat(t[4])}},write:colorToString}}},{litmus:Common.isNumber,conversions:{HEX:{read:function(e){return{space:"HEX",hex:e,conversionName:"HEX"}},write:function(e){return e.hex}}}},{litmus:Common.isArray,conversions:{RGB_ARRAY:{read:function(e){return 3===e.length&&{space:"RGB",r:e[0],g:e[1],b:e[2]}},write:function(e){return[e.r,e.g,e.b]}},RGBA_ARRAY:{read:function(e){return 4===e.length&&{space:"RGB",r:e[0],g:e[1],b:e[2],a:e[3]}},write:function(e){return[e.r,e.g,e.b,e.a]}}}},{litmus:Common.isObject,conversions:{RGBA_OBJ:{read:function(e){return!!(Common.isNumber(e.r)&&Common.isNumber(e.g)&&Common.isNumber(e.b)&&Common.isNumber(e.a))&&{space:"RGB",r:e.r,g:e.g,b:e.b,a:e.a}},write:function(e){return{r:e.r,g:e.g,b:e.b,a:e.a}}},RGB_OBJ:{read:function(e){return!!(Common.isNumber(e.r)&&Common.isNumber(e.g)&&Common.isNumber(e.b))&&{space:"RGB",r:e.r,g:e.g,b:e.b}},write:function(e){return{r:e.r,g:e.g,b:e.b}}},HSVA_OBJ:{read:function(e){return!!(Common.isNumber(e.h)&&Common.isNumber(e.s)&&Common.isNumber(e.v)&&Common.isNumber(e.a))&&{space:"HSV",h:e.h,s:e.s,v:e.v,a:e.a}},write:function(e){return{h:e.h,s:e.s,v:e.v,a:e.a}}},HSV_OBJ:{read:function(e){return!!(Common.isNumber(e.h)&&Common.isNumber(e.s)&&Common.isNumber(e.v))&&{space:"HSV",h:e.h,s:e.s,v:e.v}},write:function(e){return{h:e.h,s:e.s,v:e.v}}}}}],result=void 0,toReturn=void 0,interpret=function(){toReturn=!1;var e=arguments.length>1?Common.toArray(arguments):arguments[0];return Common.each(INTERPRETATIONS,(function(t){if(t.litmus(e))return Common.each(t.conversions,(function(t,n){if(result=t.read(e),!1===toReturn&&!1!==result)return toReturn=result,result.conversionName=n,result.conversion=t,Common.BREAK})),Common.BREAK})),toReturn},tmpComponent=void 0,ColorMath={hsv_to_rgb:function(e,t,n){var r=Math.floor(e/60)%6,a=e/60-Math.floor(e/60),i=n*(1-t),o=n*(1-a*t),s=n*(1-(1-a)*t),l=[[n,s,i],[o,n,i],[i,n,s],[i,o,n],[s,i,n],[n,i,o]][r];return{r:255*l[0],g:255*l[1],b:255*l[2]}},rgb_to_hsv:function(e,t,n){var r=Math.min(e,t,n),a=Math.max(e,t,n),i=a-r,o=void 0;return 0===a?{h:NaN,s:0,v:0}:(o=e===a?(t-n)/i:t===a?2+(n-e)/i:4+(e-t)/i,(o/=6)<0&&(o+=1),{h:360*o,s:i/a,v:a/255})},rgb_to_hex:function(e,t,n){var r=this.hex_with_component(0,2,e);return r=this.hex_with_component(r,1,t),this.hex_with_component(r,0,n)},component_from_hex:function(e,t){return e>>8*t&255},hex_with_component:function(e,t,n){return n<<(tmpComponent=8*t)|e&~(255<<tmpComponent)}},_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},classCallCheck=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),get=function e(t,n,r){null===t&&(t=Function.prototype);var a=Object.getOwnPropertyDescriptor(t,n);if(void 0===a){var i=Object.getPrototypeOf(t);return null===i?void 0:e(i,n,r)}if("value"in a)return a.value;var o=a.get;return void 0!==o?o.call(r):void 0},inherits=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)},possibleConstructorReturn=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},Color=function(){function e(){if(classCallCheck(this,e),this.__state=interpret.apply(this,arguments),!1===this.__state)throw new Error("Failed to interpret color arguments");this.__state.a=this.__state.a||1}return createClass(e,[{key:"toString",value:function(){return colorToString(this)}},{key:"toHexString",value:function(){return colorToString(this,!0)}},{key:"toOriginal",value:function(){return this.__state.conversion.write(this)}}]),e}();function defineRGBComponent(e,t,n){Object.defineProperty(e,t,{get:function(){return"RGB"===this.__state.space||Color.recalculateRGB(this,t,n),this.__state[t]},set:function(e){"RGB"!==this.__state.space&&(Color.recalculateRGB(this,t,n),this.__state.space="RGB"),this.__state[t]=e}})}function defineHSVComponent(e,t){Object.defineProperty(e,t,{get:function(){return"HSV"===this.__state.space||Color.recalculateHSV(this),this.__state[t]},set:function(e){"HSV"!==this.__state.space&&(Color.recalculateHSV(this),this.__state.space="HSV"),this.__state[t]=e}})}Color.recalculateRGB=function(e,t,n){if("HEX"===e.__state.space)e.__state[t]=ColorMath.component_from_hex(e.__state.hex,n);else{if("HSV"!==e.__state.space)throw new Error("Corrupted color state");Common.extend(e.__state,ColorMath.hsv_to_rgb(e.__state.h,e.__state.s,e.__state.v))}},Color.recalculateHSV=function(e){var t=ColorMath.rgb_to_hsv(e.r,e.g,e.b);Common.extend(e.__state,{s:t.s,v:t.v}),Common.isNaN(t.h)?Common.isUndefined(e.__state.h)&&(e.__state.h=0):e.__state.h=t.h},Color.COMPONENTS=["r","g","b","h","s","v","hex","a"],defineRGBComponent(Color.prototype,"r",2),defineRGBComponent(Color.prototype,"g",1),defineRGBComponent(Color.prototype,"b",0),defineHSVComponent(Color.prototype,"h"),defineHSVComponent(Color.prototype,"s"),defineHSVComponent(Color.prototype,"v"),Object.defineProperty(Color.prototype,"a",{get:function(){return this.__state.a},set:function(e){this.__state.a=e}}),Object.defineProperty(Color.prototype,"hex",{get:function(){return"HEX"!==this.__state.space&&(this.__state.hex=ColorMath.rgb_to_hex(this.r,this.g,this.b),this.__state.space="HEX"),this.__state.hex},set:function(e){this.__state.space="HEX",this.__state.hex=e}});var Controller=function(){function e(t,n){classCallCheck(this,e),this.initialValue=t[n],this.domElement=document.createElement("div"),this.object=t,this.property=n,this.__onChange=void 0,this.__onFinishChange=void 0}return createClass(e,[{key:"onChange",value:function(e){return this.__onChange=e,this}},{key:"onFinishChange",value:function(e){return this.__onFinishChange=e,this}},{key:"setValue",value:function(e){return this.object[this.property]=e,this.__onChange&&this.__onChange.call(this,e),this.updateDisplay(),this}},{key:"getValue",value:function(){return this.object[this.property]}},{key:"updateDisplay",value:function(){return this}},{key:"isModified",value:function(){return this.initialValue!==this.getValue()}}]),e}(),EVENT_MAP_INV={};Common.each({HTMLEvents:["change"],MouseEvents:["click","mousemove","mousedown","mouseup","mouseover"],KeyboardEvents:["keydown"]},(function(e,t){Common.each(e,(function(e){EVENT_MAP_INV[e]=t}))}));var CSS_VALUE_PIXELS=/(\d+(\.\d+)?)px/;function cssValueToPixels(e){if("0"===e||Common.isUndefined(e))return 0;var t=e.match(CSS_VALUE_PIXELS);return Common.isNull(t)?0:parseFloat(t[1])}var dom={makeSelectable:function(e,t){void 0!==e&&void 0!==e.style&&(e.onselectstart=t?function(){return!1}:function(){},e.style.MozUserSelect=t?"auto":"none",e.style.KhtmlUserSelect=t?"auto":"none",e.unselectable=t?"on":"off")},makeFullscreen:function(e,t,n){var r=n,a=t;Common.isUndefined(a)&&(a=!0),Common.isUndefined(r)&&(r=!0),e.style.position="absolute",a&&(e.style.left=0,e.style.right=0),r&&(e.style.top=0,e.style.bottom=0)},fakeEvent:function(e,t,n,r){var a=n||{},i=EVENT_MAP_INV[t];if(!i)throw new Error("Event type "+t+" not supported.");var o=document.createEvent(i);switch(i){case"MouseEvents":var s=a.x||a.clientX||0,l=a.y||a.clientY||0;o.initMouseEvent(t,a.bubbles||!1,a.cancelable||!0,window,a.clickCount||1,0,0,s,l,!1,!1,!1,!1,0,null);break;case"KeyboardEvents":var h=o.initKeyboardEvent||o.initKeyEvent;Common.defaults(a,{cancelable:!0,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,keyCode:void 0,charCode:void 0}),h(t,a.bubbles||!1,a.cancelable,window,a.ctrlKey,a.altKey,a.shiftKey,a.metaKey,a.keyCode,a.charCode);break;default:o.initEvent(t,a.bubbles||!1,a.cancelable||!0)}Common.defaults(o,r),e.dispatchEvent(o)},bind:function(e,t,n,r){var a=r||!1;return e.addEventListener?e.addEventListener(t,n,a):e.attachEvent&&e.attachEvent("on"+t,n),dom},unbind:function(e,t,n,r){var a=r||!1;return e.removeEventListener?e.removeEventListener(t,n,a):e.detachEvent&&e.detachEvent("on"+t,n),dom},addClass:function(e,t){if(void 0===e.className)e.className=t;else if(e.className!==t){var n=e.className.split(/ +/);-1===n.indexOf(t)&&(n.push(t),e.className=n.join(" ").replace(/^\s+/,"").replace(/\s+$/,""))}return dom},removeClass:function(e,t){if(t)if(e.className===t)e.removeAttribute("class");else{var n=e.className.split(/ +/),r=n.indexOf(t);-1!==r&&(n.splice(r,1),e.className=n.join(" "))}else e.className=void 0;return dom},hasClass:function(e,t){return new RegExp("(?:^|\\s+)"+t+"(?:\\s+|$)").test(e.className)||!1},getWidth:function(e){var t=getComputedStyle(e);return cssValueToPixels(t["border-left-width"])+cssValueToPixels(t["border-right-width"])+cssValueToPixels(t["padding-left"])+cssValueToPixels(t["padding-right"])+cssValueToPixels(t.width)},getHeight:function(e){var t=getComputedStyle(e);return cssValueToPixels(t["border-top-width"])+cssValueToPixels(t["border-bottom-width"])+cssValueToPixels(t["padding-top"])+cssValueToPixels(t["padding-bottom"])+cssValueToPixels(t.height)},getOffset:function(e){var t=e,n={left:0,top:0};if(t.offsetParent)do{n.left+=t.offsetLeft,n.top+=t.offsetTop,t=t.offsetParent}while(t);return n},isActive:function(e){return e===document.activeElement&&(e.type||e.href)}},BooleanController=function(e){function t(e,n){classCallCheck(this,t);var r=possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n)),a=r;return r.__prev=r.getValue(),r.__checkbox=document.createElement("input"),r.__checkbox.setAttribute("type","checkbox"),dom.bind(r.__checkbox,"change",(function(){a.setValue(!a.__prev)}),!1),r.domElement.appendChild(r.__checkbox),r.updateDisplay(),r}return inherits(t,Controller),createClass(t,[{key:"setValue",value:function(e){var n=get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"setValue",this).call(this,e);return this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue()),this.__prev=this.getValue(),n}},{key:"updateDisplay",value:function(){return!0===this.getValue()?(this.__checkbox.setAttribute("checked","checked"),this.__checkbox.checked=!0,this.__prev=!0):(this.__checkbox.checked=!1,this.__prev=!1),get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"updateDisplay",this).call(this)}}]),t}(),OptionController=function(e){function t(e,n,r){classCallCheck(this,t);var a=possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n)),i=r,o=a;if(a.__select=document.createElement("select"),Common.isArray(i)){var s={};Common.each(i,(function(e){s[e]=e})),i=s}return Common.each(i,(function(e,t){var n=document.createElement("option");n.innerHTML=t,n.setAttribute("value",e),o.__select.appendChild(n)})),a.updateDisplay(),dom.bind(a.__select,"change",(function(){var e=this.options[this.selectedIndex].value;o.setValue(e)})),a.domElement.appendChild(a.__select),a}return inherits(t,Controller),createClass(t,[{key:"setValue",value:function(e){var n=get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"setValue",this).call(this,e);return this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue()),n}},{key:"updateDisplay",value:function(){return dom.isActive(this.__select)?this:(this.__select.value=this.getValue(),get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"updateDisplay",this).call(this))}}]),t}(),StringController=function(e){function t(e,n){classCallCheck(this,t);var r=possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n)),a=r;function i(){a.setValue(a.__input.value)}return r.__input=document.createElement("input"),r.__input.setAttribute("type","text"),dom.bind(r.__input,"keyup",i),dom.bind(r.__input,"change",i),dom.bind(r.__input,"blur",(function(){a.__onFinishChange&&a.__onFinishChange.call(a,a.getValue())})),dom.bind(r.__input,"keydown",(function(e){13===e.keyCode&&this.blur()})),r.updateDisplay(),r.domElement.appendChild(r.__input),r}return inherits(t,Controller),createClass(t,[{key:"updateDisplay",value:function(){return dom.isActive(this.__input)||(this.__input.value=this.getValue()),get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"updateDisplay",this).call(this)}}]),t}();function numDecimals(e){var t=e.toString();return t.indexOf(".")>-1?t.length-t.indexOf(".")-1:0}var NumberController=function(e){function t(e,n,r){classCallCheck(this,t);var a=possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n)),i=r||{};return a.__min=i.min,a.__max=i.max,a.__step=i.step,Common.isUndefined(a.__step)?0===a.initialValue?a.__impliedStep=1:a.__impliedStep=Math.pow(10,Math.floor(Math.log(Math.abs(a.initialValue))/Math.LN10))/10:a.__impliedStep=a.__step,a.__precision=numDecimals(a.__impliedStep),a}return inherits(t,Controller),createClass(t,[{key:"setValue",value:function(e){var n=e;return void 0!==this.__min&&n<this.__min?n=this.__min:void 0!==this.__max&&n>this.__max&&(n=this.__max),void 0!==this.__step&&n%this.__step!=0&&(n=Math.round(n/this.__step)*this.__step),get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"setValue",this).call(this,n)}},{key:"min",value:function(e){return this.__min=e,this}},{key:"max",value:function(e){return this.__max=e,this}},{key:"step",value:function(e){return this.__step=e,this.__impliedStep=e,this.__precision=numDecimals(e),this}}]),t}(),NumberControllerBox=function(e){function t(e,n,r){classCallCheck(this,t);var a=possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n,r));a.__truncationSuspended=!1;var i=a,o=void 0;function s(){i.__onFinishChange&&i.__onFinishChange.call(i,i.getValue())}function l(e){var t=o-e.clientY;i.setValue(i.getValue()+t*i.__impliedStep),o=e.clientY}function h(){dom.unbind(window,"mousemove",l),dom.unbind(window,"mouseup",h),s()}return a.__input=document.createElement("input"),a.__input.setAttribute("type","text"),dom.bind(a.__input,"change",(function(){var e=parseFloat(i.__input.value);Common.isNaN(e)||i.setValue(e)})),dom.bind(a.__input,"blur",(function(){s()})),dom.bind(a.__input,"mousedown",(function(e){dom.bind(window,"mousemove",l),dom.bind(window,"mouseup",h),o=e.clientY})),dom.bind(a.__input,"keydown",(function(e){13===e.keyCode&&(i.__truncationSuspended=!0,this.blur(),i.__truncationSuspended=!1,s())})),a.updateDisplay(),a.domElement.appendChild(a.__input),a}return inherits(t,NumberController),createClass(t,[{key:"updateDisplay",value:function(){var e,n,r;return this.__input.value=this.__truncationSuspended?this.getValue():(e=this.getValue(),n=this.__precision,r=Math.pow(10,n),Math.round(e*r)/r),get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"updateDisplay",this).call(this)}}]),t}();function map(e,t,n,r,a){return r+(e-t)/(n-t)*(a-r)}var NumberControllerSlider=function(e){function t(e,n,r,a,i){classCallCheck(this,t);var o=possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n,{min:r,max:a,step:i})),s=o;function l(e){e.preventDefault();var t=s.__background.getBoundingClientRect();return s.setValue(map(e.clientX,t.left,t.right,s.__min,s.__max)),!1}function h(){dom.unbind(window,"mousemove",l),dom.unbind(window,"mouseup",h),s.__onFinishChange&&s.__onFinishChange.call(s,s.getValue())}function d(e){var t=e.touches[0].clientX,n=s.__background.getBoundingClientRect();s.setValue(map(t,n.left,n.right,s.__min,s.__max))}function c(){dom.unbind(window,"touchmove",d),dom.unbind(window,"touchend",c),s.__onFinishChange&&s.__onFinishChange.call(s,s.getValue())}return o.__background=document.createElement("div"),o.__foreground=document.createElement("div"),dom.bind(o.__background,"mousedown",(function(e){document.activeElement.blur(),dom.bind(window,"mousemove",l),dom.bind(window,"mouseup",h),l(e)})),dom.bind(o.__background,"touchstart",(function(e){1===e.touches.length&&(dom.bind(window,"touchmove",d),dom.bind(window,"touchend",c),d(e))})),dom.addClass(o.__background,"slider"),dom.addClass(o.__foreground,"slider-fg"),o.updateDisplay(),o.__background.appendChild(o.__foreground),o.domElement.appendChild(o.__background),o}return inherits(t,NumberController),createClass(t,[{key:"updateDisplay",value:function(){var e=(this.getValue()-this.__min)/(this.__max-this.__min);return this.__foreground.style.width=100*e+"%",get(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"updateDisplay",this).call(this)}}]),t}(),FunctionController=function(e){function t(e,n,r){classCallCheck(this,t);var a=possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n)),i=a;return a.__button=document.createElement("div"),a.__button.innerHTML=void 0===r?"Fire":r,dom.bind(a.__button,"click",(function(e){return e.preventDefault(),i.fire(),!1})),dom.addClass(a.__button,"button"),a.domElement.appendChild(a.__button),a}return inherits(t,Controller),createClass(t,[{key:"fire",value:function(){this.__onChange&&this.__onChange.call(this),this.getValue().call(this.object),this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue())}}]),t}(),ColorController=function(e){function t(e,n){classCallCheck(this,t);var r=possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));r.__color=new Color(r.getValue()),r.__temp=new Color(0);var a=r;r.domElement=document.createElement("div"),dom.makeSelectable(r.domElement,!1),r.__selector=document.createElement("div"),r.__selector.className="selector",r.__saturation_field=document.createElement("div"),r.__saturation_field.className="saturation-field",r.__field_knob=document.createElement("div"),r.__field_knob.className="field-knob",r.__field_knob_border="2px solid ",r.__hue_knob=document.createElement("div"),r.__hue_knob.className="hue-knob",r.__hue_field=document.createElement("div"),r.__hue_field.className="hue-field",r.__input=document.createElement("input"),r.__input.type="text",r.__input_textShadow="0 1px 1px ",dom.bind(r.__input,"keydown",(function(e){13===e.keyCode&&c.call(this)})),dom.bind(r.__input,"blur",c),dom.bind(r.__selector,"mousedown",(function(){dom.addClass(this,"drag").bind(window,"mouseup",(function(){dom.removeClass(a.__selector,"drag")}))})),dom.bind(r.__selector,"touchstart",(function(){dom.addClass(this,"drag").bind(window,"touchend",(function(){dom.removeClass(a.__selector,"drag")}))}));var i,o=document.createElement("div");function s(e){p(e),dom.bind(window,"mousemove",p),dom.bind(window,"touchmove",p),dom.bind(window,"mouseup",h),dom.bind(window,"touchend",h)}function l(e){m(e),dom.bind(window,"mousemove",m),dom.bind(window,"touchmove",m),dom.bind(window,"mouseup",d),dom.bind(window,"touchend",d)}function h(){dom.unbind(window,"mousemove",p),dom.unbind(window,"touchmove",p),dom.unbind(window,"mouseup",h),dom.unbind(window,"touchend",h),u()}function d(){dom.unbind(window,"mousemove",m),dom.unbind(window,"touchmove",m),dom.unbind(window,"mouseup",d),dom.unbind(window,"touchend",d),u()}function c(){var e=interpret(this.value);!1!==e?(a.__color.__state=e,a.setValue(a.__color.toOriginal())):this.value=a.__color.toString()}function u(){a.__onFinishChange&&a.__onFinishChange.call(a,a.__color.toOriginal())}function p(e){-1===e.type.indexOf("touch")&&e.preventDefault();var t=a.__saturation_field.getBoundingClientRect(),n=e.touches&&e.touches[0]||e,r=n.clientX,i=n.clientY,o=(r-t.left)/(t.right-t.left),s=1-(i-t.top)/(t.bottom-t.top);return s>1?s=1:s<0&&(s=0),o>1?o=1:o<0&&(o=0),a.__color.v=s,a.__color.s=o,a.setValue(a.__color.toOriginal()),!1}function m(e){-1===e.type.indexOf("touch")&&e.preventDefault();var t=a.__hue_field.getBoundingClientRect(),n=1-((e.touches&&e.touches[0]||e).clientY-t.top)/(t.bottom-t.top);return n>1?n=1:n<0&&(n=0),a.__color.h=360*n,a.setValue(a.__color.toOriginal()),!1}return Common.extend(r.__selector.style,{width:"122px",height:"102px",padding:"3px",backgroundColor:"#222",boxShadow:"0px 1px 3px rgba(0,0,0,0.3)"}),Common.extend(r.__field_knob.style,{position:"absolute",width:"12px",height:"12px",border:r.__field_knob_border+(r.__color.v<.5?"#fff":"#000"),boxShadow:"0px 1px 3px rgba(0,0,0,0.5)",borderRadius:"12px",zIndex:1}),Common.extend(r.__hue_knob.style,{position:"absolute",width:"15px",height:"2px",borderRight:"4px solid #fff",zIndex:1}),Common.extend(r.__saturation_field.style,{width:"100px",height:"100px",border:"1px solid #555",marginRight:"3px",display:"inline-block",cursor:"pointer"}),Common.extend(o.style,{width:"100%",height:"100%",background:"none"}),linearGradient(o,"top","rgba(0,0,0,0)","#000"),Common.extend(r.__hue_field.style,{width:"15px",height:"100px",border:"1px solid #555",cursor:"ns-resize",position:"absolute",top:"3px",right:"3px"}),(i=r.__hue_field).style.background="",i.style.cssText+="background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);",i.style.cssText+="background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",i.style.cssText+="background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",i.style.cssText+="background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",i.style.cssText+="background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",Common.extend(r.__input.style,{outline:"none",textAlign:"center",color:"#fff",border:0,fontWeight:"bold",textShadow:r.__input_textShadow+"rgba(0,0,0,0.7)"}),dom.bind(r.__saturation_field,"mousedown",s),dom.bind(r.__saturation_field,"touchstart",s),dom.bind(r.__field_knob,"mousedown",s),dom.bind(r.__field_knob,"touchstart",s),dom.bind(r.__hue_field,"mousedown",l),dom.bind(r.__hue_field,"touchstart",l),r.__saturation_field.appendChild(o),r.__selector.appendChild(r.__field_knob),r.__selector.appendChild(r.__saturation_field),r.__selector.appendChild(r.__hue_field),r.__hue_field.appendChild(r.__hue_knob),r.domElement.appendChild(r.__input),r.domElement.appendChild(r.__selector),r.updateDisplay(),r}return inherits(t,Controller),createClass(t,[{key:"updateDisplay",value:function(){var e=interpret(this.getValue());if(!1!==e){var t=!1;Common.each(Color.COMPONENTS,(function(n){if(!Common.isUndefined(e[n])&&!Common.isUndefined(this.__color.__state[n])&&e[n]!==this.__color.__state[n])return t=!0,{}}),this),t&&Common.extend(this.__color.__state,e)}Common.extend(this.__temp.__state,this.__color.__state),this.__temp.a=1;var n=this.__color.v<.5||this.__color.s>.5?255:0,r=255-n;Common.extend(this.__field_knob.style,{marginLeft:100*this.__color.s-7+"px",marginTop:100*(1-this.__color.v)-7+"px",backgroundColor:this.__temp.toHexString(),border:this.__field_knob_border+"rgb("+n+","+n+","+n+")"}),this.__hue_knob.style.marginTop=100*(1-this.__color.h/360)+"px",this.__temp.s=1,this.__temp.v=1,linearGradient(this.__saturation_field,"left","#fff",this.__temp.toHexString()),this.__input.value=this.__color.toString(),Common.extend(this.__input.style,{backgroundColor:this.__color.toHexString(),color:"rgb("+n+","+n+","+n+")",textShadow:this.__input_textShadow+"rgba("+r+","+r+","+r+",.7)"})}}]),t}(),vendors=["-moz-","-o-","-webkit-","-ms-",""];function linearGradient(e,t,n,r){e.style.background="",Common.each(vendors,(function(a){e.style.cssText+="background: "+a+"linear-gradient("+t+", "+n+" 0%, "+r+" 100%); "}))}var saveDialogContents='<div id="dg-save" class="dg dialogue">\n\n Here\'s the new load parameter for your <code>GUI</code>\'s constructor:\n\n <textarea id="dg-new-constructor"></textarea>\n\n <div id="dg-save-locally">\n\n <input id="dg-local-storage" type="checkbox"/> Automatically save\n values to <code>localStorage</code> on exit.\n\n <div id="dg-local-explain">The values saved to <code>localStorage</code> will\n override those passed to <code>dat.GUI</code>\'s constructor. This makes it\n easier to work incrementally, but <code>localStorage</code> is fragile,\n and your friends may not see the same values you do.\n\n </div>\n\n </div>\n\n</div>',ControllerFactory=function(e,t){var n=e[t];return Common.isArray(arguments[2])||Common.isObject(arguments[2])?new OptionController(e,t,arguments[2]):Common.isNumber(n)?Common.isNumber(arguments[2])&&Common.isNumber(arguments[3])?Common.isNumber(arguments[4])?new NumberControllerSlider(e,t,arguments[2],arguments[3],arguments[4]):new NumberControllerSlider(e,t,arguments[2],arguments[3]):Common.isNumber(arguments[4])?new NumberControllerBox(e,t,{min:arguments[2],max:arguments[3],step:arguments[4]}):new NumberControllerBox(e,t,{min:arguments[2],max:arguments[3]}):Common.isString(n)?new StringController(e,t):Common.isFunction(n)?new FunctionController(e,t,""):Common.isBoolean(n)?new BooleanController(e,t):null},requestAnimationFrame$1=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(e){setTimeout(e,1e3/60)},CenteredDiv=function(){function e(){classCallCheck(this,e),this.backgroundElement=document.createElement("div"),Common.extend(this.backgroundElement.style,{backgroundColor:"rgba(0,0,0,0.8)",top:0,left:0,display:"none",zIndex:"1000",opacity:0,WebkitTransition:"opacity 0.2s linear",transition:"opacity 0.2s linear"}),dom.makeFullscreen(this.backgroundElement),this.backgroundElement.style.position="fixed",this.domElement=document.createElement("div"),Common.extend(this.domElement.style,{position:"fixed",display:"none",zIndex:"1001",opacity:0,WebkitTransition:"-webkit-transform 0.2s ease-out, opacity 0.2s linear",transition:"transform 0.2s ease-out, opacity 0.2s linear"}),document.body.appendChild(this.backgroundElement),document.body.appendChild(this.domElement);var t=this;dom.bind(this.backgroundElement,"click",(function(){t.hide()}))}return createClass(e,[{key:"show",value:function(){var e=this;this.backgroundElement.style.display="block",this.domElement.style.display="block",this.domElement.style.opacity=0,this.domElement.style.webkitTransform="scale(1.1)",this.layout(),Common.defer((function(){e.backgroundElement.style.opacity=1,e.domElement.style.opacity=1,e.domElement.style.webkitTransform="scale(1)"}))}},{key:"hide",value:function(){var e=this,t=function t(){e.domElement.style.display="none",e.backgroundElement.style.display="none",dom.unbind(e.domElement,"webkitTransitionEnd",t),dom.unbind(e.domElement,"transitionend",t),dom.unbind(e.domElement,"oTransitionEnd",t)};dom.bind(this.domElement,"webkitTransitionEnd",t),dom.bind(this.domElement,"transitionend",t),dom.bind(this.domElement,"oTransitionEnd",t),this.backgroundElement.style.opacity=0,this.domElement.style.opacity=0,this.domElement.style.webkitTransform="scale(1.1)"}},{key:"layout",value:function(){this.domElement.style.left=window.innerWidth/2-dom.getWidth(this.domElement)/2+"px",this.domElement.style.top=window.innerHeight/2-dom.getHeight(this.domElement)/2+"px"}}]),e}();!function(e,t){var n=document,r=document.createElement("style");r.type="text/css",r.innerHTML=e;var a=n.getElementsByTagName("head")[0];try{a.appendChild(r)}catch(e){}}(function(e){if("undefined"!=typeof window){var t=document.createElement("style");return t.setAttribute("type","text/css"),t.innerHTML=e,document.head.appendChild(t),e}}(".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .cr.function .property-name{width:100%}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\n"));var SUPPORTS_LOCAL_STORAGE=function(){try{return!!window.localStorage}catch(e){return!1}}(),SAVE_DIALOGUE=void 0,autoPlaceVirgin=!0,autoPlaceContainer=void 0,hide=!1,hideableGuis=[],GUI=function e(t){var n=this,r=t||{};this.domElement=document.createElement("div"),this.__ul=document.createElement("ul"),this.domElement.appendChild(this.__ul),dom.addClass(this.domElement,"dg"),this.__folders={},this.__controllers=[],this.__rememberedObjects=[],this.__rememberedObjectIndecesToControllers=[],this.__listening=[],r=Common.defaults(r,{closeOnTop:!1,autoPlace:!0,width:e.DEFAULT_WIDTH}),r=Common.defaults(r,{resizable:r.autoPlace,hideable:r.autoPlace}),Common.isUndefined(r.load)?r.load={preset:"Default"}:r.preset&&(r.load.preset=r.preset),Common.isUndefined(r.parent)&&r.hideable&&hideableGuis.push(this),r.resizable=Common.isUndefined(r.parent)&&r.resizable,r.autoPlace&&Common.isUndefined(r.scrollable)&&(r.scrollable=!0);var a,i=SUPPORTS_LOCAL_STORAGE&&"true"===localStorage.getItem(getLocalStorageHash(0,"isLocal")),o=void 0,s=void 0;if(Object.defineProperties(this,{parent:{get:function(){return r.parent}},scrollable:{get:function(){return r.scrollable}},autoPlace:{get:function(){return r.autoPlace}},closeOnTop:{get:function(){return r.closeOnTop}},preset:{get:function(){return n.parent?n.getRoot().preset:r.load.preset},set:function(e){n.parent?n.getRoot().preset=e:r.load.preset=e,function(e){for(var t=0;t<e.__preset_select.length;t++)e.__preset_select[t].value===e.preset&&(e.__preset_select.selectedIndex=t)}(this),n.revert()}},width:{get:function(){return r.width},set:function(e){r.width=e,setWidth(n,e)}},name:{get:function(){return r.name},set:function(e){r.name=e,s&&(s.innerHTML=r.name)}},closed:{get:function(){return r.closed},set:function(t){r.closed=t,r.closed?dom.addClass(n.__ul,e.CLASS_CLOSED):dom.removeClass(n.__ul,e.CLASS_CLOSED),this.onResize(),n.__closeButton&&(n.__closeButton.innerHTML=t?e.TEXT_OPEN:e.TEXT_CLOSED)}},load:{get:function(){return r.load}},useLocalStorage:{get:function(){return i},set:function(e){SUPPORTS_LOCAL_STORAGE&&(i=e,e?dom.bind(window,"unload",o):dom.unbind(window,"unload",o),localStorage.setItem(getLocalStorageHash(0,"isLocal"),e))}}}),Common.isUndefined(r.parent)){if(this.closed=r.closed||!1,dom.addClass(this.domElement,e.CLASS_MAIN),dom.makeSelectable(this.domElement,!1),SUPPORTS_LOCAL_STORAGE&&i){n.useLocalStorage=!0;var l=localStorage.getItem(getLocalStorageHash(0,"gui"));l&&(r.load=JSON.parse(l))}this.__closeButton=document.createElement("div"),this.__closeButton.innerHTML=e.TEXT_CLOSED,dom.addClass(this.__closeButton,e.CLASS_CLOSE_BUTTON),r.closeOnTop?(dom.addClass(this.__closeButton,e.CLASS_CLOSE_TOP),this.domElement.insertBefore(this.__closeButton,this.domElement.childNodes[0])):(dom.addClass(this.__closeButton,e.CLASS_CLOSE_BOTTOM),this.domElement.appendChild(this.__closeButton)),dom.bind(this.__closeButton,"click",(function(){n.closed=!n.closed}))}else{void 0===r.closed&&(r.closed=!0);var h=document.createTextNode(r.name);dom.addClass(h,"controller-name"),s=addRow(n,h),dom.addClass(this.__ul,e.CLASS_CLOSED),dom.addClass(s,"title"),dom.bind(s,"click",(function(e){return e.preventDefault(),n.closed=!n.closed,!1})),r.closed||(this.closed=!1)}r.autoPlace&&(Common.isUndefined(r.parent)&&(autoPlaceVirgin&&(autoPlaceContainer=document.createElement("div"),dom.addClass(autoPlaceContainer,"dg"),dom.addClass(autoPlaceContainer,e.CLASS_AUTO_PLACE_CONTAINER),document.body.appendChild(autoPlaceContainer),autoPlaceVirgin=!1),autoPlaceContainer.appendChild(this.domElement),dom.addClass(this.domElement,e.CLASS_AUTO_PLACE)),this.parent||setWidth(n,r.width)),this.__resizeHandler=function(){n.onResizeDebounced()},dom.bind(window,"resize",this.__resizeHandler),dom.bind(this.__ul,"webkitTransitionEnd",this.__resizeHandler),dom.bind(this.__ul,"transitionend",this.__resizeHandler),dom.bind(this.__ul,"oTransitionEnd",this.__resizeHandler),this.onResize(),r.resizable&&addResizeHandle(this),o=function(){SUPPORTS_LOCAL_STORAGE&&"true"===localStorage.getItem(getLocalStorageHash(0,"isLocal"))&&localStorage.setItem(getLocalStorageHash(0,"gui"),JSON.stringify(n.getSaveObject()))},this.saveToLocalStorageIfPossible=o,r.parent||((a=n.getRoot()).width+=1,Common.defer((function(){a.width-=1})))};function addRow(e,t,n){var r=document.createElement("li");return t&&r.appendChild(t),n?e.__ul.insertBefore(r,n):e.__ul.appendChild(r),e.onResize(),r}function removeListeners(e){dom.unbind(window,"resize",e.__resizeHandler),e.saveToLocalStorageIfPossible&&dom.unbind(window,"unload",e.saveToLocalStorageIfPossible)}function markPresetModified(e,t){var n=e.__preset_select[e.__preset_select.selectedIndex];n.innerHTML=t?n.value+"*":n.value}function recallSavedValue(e,t){var n=e.getRoot(),r=n.__rememberedObjects.indexOf(t.object);if(-1!==r){var a=n.__rememberedObjectIndecesToControllers[r];if(void 0===a&&(a={},n.__rememberedObjectIndecesToControllers[r]=a),a[t.property]=t,n.load&&n.load.remembered){var i=n.load.remembered,o=void 0;if(i[e.preset])o=i[e.preset];else{if(!i.Default)return;o=i.Default}if(o[r]&&void 0!==o[r][t.property]){var s=o[r][t.property];t.initialValue=s,t.setValue(s)}}}}function _add(e,t,n,r){if(void 0===t[n])throw new Error('Object "'+t+'" has no property "'+n+'"');var a=void 0;if(r.color)a=new ColorController(t,n);else{var i=[t,n].concat(r.factoryArgs);a=ControllerFactory.apply(e,i)}r.before instanceof Controller&&(r.before=r.before.__li),recallSavedValue(e,a),dom.addClass(a.domElement,"c");var o=document.createElement("span");dom.addClass(o,"property-name"),o.innerHTML=a.property;var s=document.createElement("div");s.appendChild(o),s.appendChild(a.domElement);var l=addRow(e,s,r.before);return dom.addClass(l,GUI.CLASS_CONTROLLER_ROW),a instanceof ColorController?dom.addClass(l,"color"):dom.addClass(l,_typeof(a.getValue())),function(e,t,n){if(n.__li=t,n.__gui=e,Common.extend(n,{options:function(t){if(arguments.length>1){var r=n.__li.nextElementSibling;return n.remove(),_add(e,n.object,n.property,{before:r,factoryArgs:[Common.toArray(arguments)]})}if(Common.isArray(t)||Common.isObject(t)){var a=n.__li.nextElementSibling;return n.remove(),_add(e,n.object,n.property,{before:a,factoryArgs:[t]})}},name:function(e){return n.__li.firstElementChild.firstElementChild.innerHTML=e,n},listen:function(){return n.__gui.listen(n),n},remove:function(){return n.__gui.remove(n),n}}),n instanceof NumberControllerSlider){var r=new NumberControllerBox(n.object,n.property,{min:n.__min,max:n.__max,step:n.__step});Common.each(["updateDisplay","onChange","onFinishChange","step","min","max"],(function(e){var t=n[e],a=r[e];n[e]=r[e]=function(){var e=Array.prototype.slice.call(arguments);return a.apply(r,e),t.apply(n,e)}})),dom.addClass(t,"has-slider"),n.domElement.insertBefore(r.domElement,n.domElement.firstElementChild)}else if(n instanceof NumberControllerBox){var a=function(t){if(Common.isNumber(n.__min)&&Common.isNumber(n.__max)){var r=n.__li.firstElementChild.firstElementChild.innerHTML,a=n.__gui.__listening.indexOf(n)>-1;n.remove();var i=_add(e,n.object,n.property,{before:n.__li.nextElementSibling,factoryArgs:[n.__min,n.__max,n.__step]});return i.name(r),a&&i.listen(),i}return t};n.min=Common.compose(a,n.min),n.max=Common.compose(a,n.max)}else n instanceof BooleanController?(dom.bind(t,"click",(function(){dom.fakeEvent(n.__checkbox,"click")})),dom.bind(n.__checkbox,"click",(function(e){e.stopPropagation()}))):n instanceof FunctionController?(dom.bind(t,"click",(function(){dom.fakeEvent(n.__button,"click")})),dom.bind(t,"mouseover",(function(){dom.addClass(n.__button,"hover")})),dom.bind(t,"mouseout",(function(){dom.removeClass(n.__button,"hover")}))):n instanceof ColorController&&(dom.addClass(t,"color"),n.updateDisplay=Common.compose((function(e){return t.style.borderLeftColor=n.__color.toString(),e}),n.updateDisplay),n.updateDisplay());n.setValue=Common.compose((function(t){return e.getRoot().__preset_select&&n.isModified()&&markPresetModified(e.getRoot(),!0),t}),n.setValue)}(e,l,a),e.__controllers.push(a),a}function getLocalStorageHash(e,t){return document.location.href+"."+t}function addPresetOption(e,t,n){var r=document.createElement("option");r.innerHTML=t,r.value=t,e.__preset_select.appendChild(r),n&&(e.__preset_select.selectedIndex=e.__preset_select.length-1)}function showHideExplain(e,t){t.style.display=e.useLocalStorage?"block":"none"}function addSaveMenu(e){var t=e.__save_row=document.createElement("li");dom.addClass(e.domElement,"has-save"),e.__ul.insertBefore(t,e.__ul.firstChild),dom.addClass(t,"save-row");var n=document.createElement("span");n.innerHTML="&nbsp;",dom.addClass(n,"button gears");var r=document.createElement("span");r.innerHTML="Save",dom.addClass(r,"button"),dom.addClass(r,"save");var a=document.createElement("span");a.innerHTML="New",dom.addClass(a,"button"),dom.addClass(a,"save-as");var i=document.createElement("span");i.innerHTML="Revert",dom.addClass(i,"button"),dom.addClass(i,"revert");var o=e.__preset_select=document.createElement("select");if(e.load&&e.load.remembered?Common.each(e.load.remembered,(function(t,n){addPresetOption(e,n,n===e.preset)})):addPresetOption(e,"Default",!1),dom.bind(o,"change",(function(){for(var t=0;t<e.__preset_select.length;t++)e.__preset_select[t].innerHTML=e.__preset_select[t].value;e.preset=this.value})),t.appendChild(o),t.appendChild(n),t.appendChild(r),t.appendChild(a),t.appendChild(i),SUPPORTS_LOCAL_STORAGE){var s=document.getElementById("dg-local-explain"),l=document.getElementById("dg-local-storage");document.getElementById("dg-save-locally").style.display="block","true"===localStorage.getItem(getLocalStorageHash(0,"isLocal"))&&l.setAttribute("checked","checked"),showHideExplain(e,s),dom.bind(l,"change",(function(){e.useLocalStorage=!e.useLocalStorage,showHideExplain(e,s)}))}var h=document.getElementById("dg-new-constructor");dom.bind(h,"keydown",(function(e){!e.metaKey||67!==e.which&&67!==e.keyCode||SAVE_DIALOGUE.hide()})),dom.bind(n,"click",(function(){h.innerHTML=JSON.stringify(e.getSaveObject(),void 0,2),SAVE_DIALOGUE.show(),h.focus(),h.select()})),dom.bind(r,"click",(function(){e.save()})),dom.bind(a,"click",(function(){var t=prompt("Enter a new preset name.");t&&e.saveAs(t)})),dom.bind(i,"click",(function(){e.revert()}))}function addResizeHandle(e){var t=void 0;function n(n){return n.preventDefault(),e.width+=t-n.clientX,e.onResize(),t=n.clientX,!1}function r(){dom.removeClass(e.__closeButton,GUI.CLASS_DRAG),dom.unbind(window,"mousemove",n),dom.unbind(window,"mouseup",r)}function a(a){return a.preventDefault(),t=a.clientX,dom.addClass(e.__closeButton,GUI.CLASS_DRAG),dom.bind(window,"mousemove",n),dom.bind(window,"mouseup",r),!1}e.__resize_handle=document.createElement("div"),Common.extend(e.__resize_handle.style,{width:"6px",marginLeft:"-3px",height:"200px",cursor:"ew-resize",position:"absolute"}),dom.bind(e.__resize_handle,"mousedown",a),dom.bind(e.__closeButton,"mousedown",a),e.domElement.insertBefore(e.__resize_handle,e.domElement.firstElementChild)}function setWidth(e,t){e.domElement.style.width=t+"px",e.__save_row&&e.autoPlace&&(e.__save_row.style.width=t+"px"),e.__closeButton&&(e.__closeButton.style.width=t+"px")}function getCurrentPreset(e,t){var n={};return Common.each(e.__rememberedObjects,(function(r,a){var i={},o=e.__rememberedObjectIndecesToControllers[a];Common.each(o,(function(e,n){i[n]=t?e.initialValue:e.getValue()})),n[a]=i})),n}GUI.toggleHide=function(){hide=!hide,Common.each(hideableGuis,(function(e){e.domElement.style.display=hide?"none":""}))},GUI.CLASS_AUTO_PLACE="a",GUI.CLASS_AUTO_PLACE_CONTAINER="ac",GUI.CLASS_MAIN="main",GUI.CLASS_CONTROLLER_ROW="cr",GUI.CLASS_TOO_TALL="taller-than-window",GUI.CLASS_CLOSED="closed",GUI.CLASS_CLOSE_BUTTON="close-button",GUI.CLASS_CLOSE_TOP="close-top",GUI.CLASS_CLOSE_BOTTOM="close-bottom",GUI.CLASS_DRAG="drag",GUI.DEFAULT_WIDTH=245,GUI.TEXT_CLOSED="Close Controls",GUI.TEXT_OPEN="Open Controls",GUI._keydownHandler=function(e){"text"===document.activeElement.type||72!==e.which&&72!==e.keyCode||GUI.toggleHide()},dom.bind(window,"keydown",GUI._keydownHandler,!1),Common.extend(GUI.prototype,{add:function(e,t){return _add(this,e,t,{factoryArgs:Array.prototype.slice.call(arguments,2)})},addColor:function(e,t){return _add(this,e,t,{color:!0})},remove:function(e){this.__ul.removeChild(e.__li),this.__controllers.splice(this.__controllers.indexOf(e),1);var t=this;Common.defer((function(){t.onResize()}))},destroy:function(){if(this.parent)throw new Error("Only the root GUI should be removed with .destroy(). For subfolders, use gui.removeFolder(folder) instead.");this.autoPlace&&autoPlaceContainer.removeChild(this.domElement);var e=this;Common.each(this.__folders,(function(t){e.removeFolder(t)})),dom.unbind(window,"keydown",GUI._keydownHandler,!1),removeListeners(this)},addFolder:function(e){if(void 0!==this.__folders[e])throw new Error('You already have a folder in this GUI by the name "'+e+'"');var t={name:e,parent:this};t.autoPlace=this.autoPlace,this.load&&this.load.folders&&this.load.folders[e]&&(t.closed=this.load.folders[e].closed,t.load=this.load.folders[e]);var n=new GUI(t);this.__folders[e]=n;var r=addRow(this,n.domElement);return dom.addClass(r,"folder"),n},removeFolder:function(e){this.__ul.removeChild(e.domElement.parentElement),delete this.__folders[e.name],this.load&&this.load.folders&&this.load.folders[e.name]&&delete this.load.folders[e.name],removeListeners(e);var t=this;Common.each(e.__folders,(function(t){e.removeFolder(t)})),Common.defer((function(){t.onResize()}))},open:function(){this.closed=!1},close:function(){this.closed=!0},hide:function(){this.domElement.style.display="none"},show:function(){this.domElement.style.display=""},onResize:function(){var e=this.getRoot();if(e.scrollable){var t=dom.getOffset(e.__ul).top,n=0;Common.each(e.__ul.childNodes,(function(t){e.autoPlace&&t===e.__save_row||(n+=dom.getHeight(t))})),window.innerHeight-t-20<n?(dom.addClass(e.domElement,GUI.CLASS_TOO_TALL),e.__ul.style.height=window.innerHeight-t-20+"px"):(dom.removeClass(e.domElement,GUI.CLASS_TOO_TALL),e.__ul.style.height="auto")}e.__resize_handle&&Common.defer((function(){e.__resize_handle.style.height=e.__ul.offsetHeight+"px"})),e.__closeButton&&(e.__closeButton.style.width=e.width+"px")},onResizeDebounced:Common.debounce((function(){this.onResize()}),50),remember:function(){if(Common.isUndefined(SAVE_DIALOGUE)&&((SAVE_DIALOGUE=new CenteredDiv).domElement.innerHTML=saveDialogContents),this.parent)throw new Error("You can only call remember on a top level GUI.");var e=this;Common.each(Array.prototype.slice.call(arguments),(function(t){0===e.__rememberedObjects.length&&addSaveMenu(e),-1===e.__rememberedObjects.indexOf(t)&&e.__rememberedObjects.push(t)})),this.autoPlace&&setWidth(this,this.width)},getRoot:function(){for(var e=this;e.parent;)e=e.parent;return e},getSaveObject:function(){var e=this.load;return e.closed=this.closed,this.__rememberedObjects.length>0&&(e.preset=this.preset,e.remembered||(e.remembered={}),e.remembered[this.preset]=getCurrentPreset(this)),e.folders={},Common.each(this.__folders,(function(t,n){e.folders[n]=t.getSaveObject()})),e},save:function(){this.load.remembered||(this.load.remembered={}),this.load.remembered[this.preset]=getCurrentPreset(this),markPresetModified(this,!1),this.saveToLocalStorageIfPossible()},saveAs:function(e){this.load.remembered||(this.load.remembered={},this.load.remembered.Default=getCurrentPreset(this,!0)),this.load.remembered[e]=getCurrentPreset(this),this.preset=e,addPresetOption(this,e,!0),this.saveToLocalStorageIfPossible()},revert:function(e){Common.each(this.__controllers,(function(t){this.getRoot().load.remembered?recallSavedValue(e||this.getRoot(),t):t.setValue(t.initialValue),t.__onFinishChange&&t.__onFinishChange.call(t,t.getValue())}),this),Common.each(this.__folders,(function(e){e.revert(e)})),e||markPresetModified(this.getRoot(),!1)},listen:function(e){var t=0===this.__listening.length;this.__listening.push(e),t&&function e(t){0!==t.length&&requestAnimationFrame$1.call(window,(function(){e(t)})),Common.each(t,(function(e){e.updateDisplay()}))}(this.__listening)},updateDisplay:function(){Common.each(this.__controllers,(function(e){e.updateDisplay()})),Common.each(this.__folders,(function(e){e.updateDisplay()}))}});var GUI$1=GUI;class MaterialCreator{static createMeshPhysicalMaterial(e){return new MeshPhysicalMaterial(e)}static createMeshStandardMaterial(e){return new MeshStandardMaterial(e)}}const getScreenXY=(e,t,n,r)=>{if(!e||!t||0===n||0===r)return new Vector3;let a=e.clone(),i=n/2,o=r/2;return a.project(t),a.x=Math.floor(a.x*i+i),a.y=Math.floor(-a.y*o+o),a.z=e.distanceTo(t.position),a},kernelBoxToThreeBox=(e,t)=>{t||(t=new Vector3(0,0,0));let n=new Vector3(e.size.x/1e3,e.size.z/1e3,e.size.y/1e3),r=new Vector3(e.origin.x/1e3,e.origin.z/1e3,e.origin.y/-1e3),a=new Vector3(0,0,-n.z).add(r).sub(t),i=new Vector3(n.x,n.y,0).add(r).add(t);return new Box3(a,i)},position3VectorsAreEqual=(e,t)=>{let n=round(e.x),r=round(e.y),a=round(e.z),i=round(t.x),o=round(t.y),s=round(t.z);return n===i&&r===o&&a===s},rotationQuaternionsAreEqual=(e,t)=>{let n=round(e.w),r=round(e.x),a=round(e.y),i=round(e.z),o=round(t.w),s=round(t.x),l=round(t.y),h=round(t.z);return n===o&&r===s&&a===l&&i===h},position2VectorsAreEqual=(e,t)=>{let n=round(e.x),r=round(e.y),a=round(t.x),i=round(t.y);return n===a&&r===i};let whiteTexture=null;const getWhiteTexture=()=>{if(whiteTexture)return whiteTexture;const e=new Uint8Array(4);for(let t=0;t<1;t++){const n=4*t;e[n]=255,e[n+1]=255,e[n+2]=255,e[n+3]=255}const t=new DataTexture(e,1,1,RGBAFormat);return t.needsUpdate=!0,t},createColorTexture=(e,t,n,r)=>{const a=new Uint8Array(4),i=Math.floor(255*e),o=Math.floor(255*t),s=Math.floor(255*n),l=Math.floor(255*r);for(let e=0;e<4;e++){const t=4*e;a[t]=i,a[t+1]=o,a[t+2]=s,a[t+3]=l}const h=new DataTexture(a,1,1,RGBAFormat);return h.needsUpdate=!0,h},createMaterial=e=>setMaterial(null,e),setMaterial=(e,t)=>{e||(e=createMeshPhysicalMaterial()),e.name=t.id?t.id.toString():"",void 0!==t.shading.metallic&&(e.metalness=1===t.shading.metallic?1:.5,e.reflectivity=getValue(t.shading.metallic,.5));let n=!1;if(t.shading.transmission&&t.shading.transmission>0?(e.opacity=1-t.shading.transmission,e.transparent=!0,e.depthWrite=!1,e.metalness=0,n=!0):void 0!==t.shading.alpha&&t.shading.alpha<1&&(e.transparent=t.shading.alpha<1,e.opacity=t.shading.alpha,e.depthWrite=t.shading.alpha>=1,e.metalness=.5*Math.max(0,t.shading.alpha),n=!0),e.aoMapIntensity=getValue(t.shading.occlusion,1),e.roughness=getValue(t.shading.roughness,.5),e.alphaTest=getValue(t.shading.alphaCutoff,0),void 0!==t.shading.basecolor){const n=new Color$1(t.shading.basecolor.r,t.shading.basecolor.g,t.shading.basecolor.b);e.color.copy(n.convertSRGBToLinear())}return n||t.shading.doubleSided?e.side=DoubleSide:e.side=FrontSide,e.map||(whiteTexture||(whiteTexture=getWhiteTexture()),e.map=whiteTexture),e},createMeshPhysicalMaterial=()=>MaterialCreator.createMeshPhysicalMaterial({}),getMaterialShading=e=>{let t=e.color.clone().convertLinearToSRGB(),n={alpha:e.opacity,metallic:e.reflectivity,basecolor:{r:t.r,g:t.g,b:t.b},roughness:e.roughness,doubleSided:e.side===DoubleSide,alphaCutoff:e.alphaTest,transmission:e.transmission};return 1===e.metalness?n.metallic=1:n.metallic=e.reflectivity,n};let textureLoader=null;const addTexture=(e,t,n,r,a,i,o=16)=>(textureLoader||(textureLoader=new TextureLoader,textureLoader.crossOrigin=""),new Promise((s,l)=>{if(!e)return console.warn("trying to add a texture without image",t),void s();textureLoader.load(e,e=>{addExistingTexture(e,t,n,r,a,i,o),s()},l)})),addExistingTexture=(e,t,n,r,a,i,o=16)=>{e.anisotropy=r,e.wrapS=RepeatWrapping,e.wrapT=RepeatWrapping,"ORM"===t.mapping&&o<=8?console.warn("ORM maps are not supported on devices with only "+o+" texture units"):(e.repeat.set(a,i),"XYZ"===t.mapping?(n.normalMap=e,n.map===getWhiteTexture()&&(n.map=null)):"ORM"===t.mapping?(n.aoMap=e,n.roughnessMap=e,n.metalnessMap=e):(e.colorSpace=SRGBColorSpace,n.map=e),"RGBA"===t.mapping&&(n.transparent=!0,n.name.includes("glow")&&(n.emissiveIntensity=.5,n.emissive=new Color$1(16777215),n.emissiveMap=n.map)),n.needsUpdate=!0)},getGUI=(e=!0)=>(window.__RML_GUI__||(window.__RML_GUI__=new GUI$1({autoPlace:e})),window.__RML_GUI__),hideWallsBasedOnCamera=(e,t)=>{let n=!1;for(const r of t){const t=r.getKernelObject();let a;if(2===t.wallType.value&&(a=convertToTHREE(t.rightNormal)),1===t.wallType.value&&(a=convertToTHREE(t.leftNormal)),!a)continue;let i=convertToTHREE(r.getPlanElement().getCenter());i=i.applyMatrix4(e.matrixWorldInverse),a=a.transformDirection(e.matrixWorldInverse);const o=i.dot(a)>=0;o!==r.getContainer().visible&&(n=!0),o?r.show():r.isSelected||r.hide()}return n},setWallTransparency=(e,t,n=!0)=>{if(!e.userData.tween)if(t)if(e.transparent=!0,n){let t={opacity:1};e.userData.tween=!0,new TWEEN.Tween(t).to({opacity:.2},400).easing(TWEEN.Easing.Sinusoidal.In).onUpdate(()=>{e.opacity=t.opacity}).onComplete(()=>{e.userData.tween=!1}).start()}else e.opacity=.2;else if(n){let t={opacity:.2};e.userData.tween=!0,new TWEEN.Tween(t).to({opacity:1},400).easing(TWEEN.Easing.Sinusoidal.In).onUpdate(()=>{e.opacity=t.opacity}).onComplete(()=>{e.transparent=!1,e.userData.tween=!1}).start()}else e.opacity=1,e.transparent=!1},transitionTransparencyOfMaterial=(e,t)=>{e.traverse(e=>{if(e instanceof Mesh&&TWEEN){const n=e.material;e.userData.tween&&e.userData.tween.stop();const r={opacity:n.opacity};t.transparent&&(n.transparent=t.transparent),e.userData.tween=new TWEEN.Tween(r).to(t,250).easing(TWEEN.Easing.Linear.None).onUpdate(()=>{n.opacity=r.opacity}).onStop(()=>{t.transparent||(n.transparent=t.transparent),n.opacity=t.opacity,n.needsUpdate=!0,e.userData.tween=void 0}).onComplete(()=>{t.transparent||(n.transparent=t.transparent),n.needsUpdate=!0,e.userData.tween=void 0}).start()}})},fadeIn=e=>{e.traverse(e=>{if(e instanceof Mesh&&TWEEN){let t=e.material;if(0===t.opacity)return;let n={opacity:0,transparent:!0},r={opacity:t.opacity,transparent:t.transparent};t.transparent=n.transparent,t.opacity=n.opacity,new TWEEN.Tween(n).to(r,500).easing(TWEEN.Easing.Linear.None).onUpdate(()=>{t.opacity=n.opacity}).onComplete(()=>{t.transparent=r.transparent}).start()}})},dispose=e=>{"Mesh"===e.type?disposeMesh(e):disposeObject(e)},disposeObject=e=>{e&&e.children&&0!==e.children.length&&e.children.forEach(e=>{disposeMesh(e)})},disposeMesh=e=>{e&&(e.material&&disposeMaterial(e.material),e.geometry&&disposeGeometry(e.geometry),e.children&&e.children.length>0&&disposeObject(e))},disposeGeometry=e=>{e&&e.dispose()},disposeMaterial=e=>{e&&(e.map&&e.map.dispose(),e.normalMap&&e.normalMap.dispose(),e.dispose())};let boundingBoxMaterial;const vectorIsZero=e=>0===e.x&&0===e.y&&0===e.z,getMaterialId=(e,t)=>{let n="";return e||""===e?(e.materialId&&""!==e.materialId?n=e.materialId:e.catalogItemId&&""!==e.catalogItemId?n=e.catalogItemId:e.rgbValue>0?n="rgb"+JSON.stringify(e.rgbValue):e.length>0?n=e:t&&1===t.value?n="default_wall_material_"+e.getSourceType().value:t&&7===t.value&&(n="default_ceiling_material_"+e.getSourceType().value),n):null},getYRotationOfObject=e=>{let t=e.getWorldDirection(new Vector3).clone();t.y=0,t.lengthSq()<.01&&(t=new Vector3(0,1,0),t.applyQuaternion(e.quaternion),t.y=0),t.normalize();let n=Math.asin(t.x);return t.z<0&&(n=Math.PI-n),n<0&&(n+=2*Math.PI),n},compareBox3Size=(e,t)=>{if(!e||!t)return 0;const n=e.clone().expandByScalar(.001).containsBox(t),r=t.clone().expandByScalar(.001).containsBox(e);return r&&n||!r&&!n?0:!0===n?1:-1},getDrawingMinBounds=(e,t,n,r=1)=>{const a=t>n,i=a?15:0,o=a?0:10,s=e.getSize(new Vector3),l=e.getCenter(new Vector3);let h=s.x>2*i?s.x/2:i,d=s.z>2*o?s.z/2:o;return h*=r,d*=r,new Box3(new Vector3(l.x-h,l.y,l.z-d),new Vector3(l.x+h,l.y,l.z+d))},threeVectorToTransferableXY=e=>{const{x:t,y:n}=e;return{x:t,y:n}},threeVectorToTransferableXYZ=e=>{const{x:t,y:n,z:r}=e;return{x:t,y:n,z:r}},viewSpacePositionFromUV=(e,t,n)=>(new Vector3).setFromSphericalCoords(e,Math.PI*(1-n),2*Math.PI*(1-t)),createEmptySceneFromCurrent=e=>{const t=new Scene;return t.environment=e.environment.clone(),t.userData.environmentDefinition=e.userData.environmentDefinition.clone(),t.userData.shadowFromEnvironment=e.userData.shadowFromEnvironment,t},CAMERA_TYPE={CAMERA_2D:"2D",CAMERA_3D:"3D",CAMERA_FP:"FP"},sanitizedCameraMode=e=>{if(!e)return CAMERA_TYPE.CAMERA_3D;let t=e.toUpperCase();return-1===Object.values(CAMERA_TYPE).indexOf(t)&&(t=CAMERA_TYPE.CAMERA_3D),t};var ENV_HDR_256_FILE_NAME="static/default_256-f1c66a2764f88cc0.exr";class InitData{constructor(e){this.autoQuality=!1,this.colors=ROOMLE_COLORS,this.unit=null,this.unitStringType=null,this.meshSelection=!0,this.stats=!1,this._measureTraffic=!1,this.disableDebugGUI=!1,this.disableEnvMap=!1,this.envMapUrl="static/default_256-f1c66a2764f88cc0.exr",this.envMapIntensity=1.5,this.envMapRotation=0,this.maxLightSources=-1,this.legacyLight=!1,this.sceneLight=!1,this.restrictionLevel=0,this.e2e=!1,this.highlighting=ROOMLE_HIGHLIGHTNG.SMART,this.dls=null,this.ls=null,this.cameraSpacing=0,this.transparentHighlighting=!0,this.featureFlags={pulsePreview:!1,reDock:!1},this.mode=CAMERA_TYPE.CAMERA_3D,this.edit=!1,this.moc=!1,this.callbacksOnlyIfGeometryIsReady=!0,this._creator_=e}setOverrides(e){deepMerge(this,e)}}const BROWSER_LANGUAGE_PROPERTY_KEYS_KNOWN=["language","browserLanguage","userLanguage","systemLanguage"],isSafari=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);class GlobalInitData{constructor(e){this.locale=((e=null)=>{const t=window.navigator;if(e)return e.substr(0,2);if(Array.isArray(t.languages)&&t.languages.length>0)return t.languages[0].substr(0,2);for(let e=0,n=BROWSER_LANGUAGE_PROPERTY_KEYS_KNOWN.length;e<n;e++){const n=t[BROWSER_LANGUAGE_PROPERTY_KEYS_KNOWN[e]];if(n)return n.substr(0,2)}return"en"})()||"en",this.overrideCountry=null,this._creator_=e}setOverrides(e){deepMerge(this,e)}}class UiCallback{_setMute(e){setWriteable(this,"_isMute",!0),this._isMute=e,setWriteable(this,"_isMute",!1)}mute(){this._setMute(!0)}unmute(){this._setMute(!1)}constructor(e){return this._isMute=!1,this.cameraStartsMoving=()=>{},this._creator_=e,setDescriptor(this,"_isMute",{enumerable:!1,writable:!1}),setDescriptor(UiCallback.prototype,"_setMute",{enumerable:!1,writable:!1}),setDescriptor(UiCallback.prototype,"mute",{enumerable:!1,writable:!1}),setDescriptor(UiCallback.prototype,"unmute",{enumerable:!1,writable:!1}),new Proxy(this,this)}get(e,t){return this._isMute&&"function"==typeof this[t]&&"on"===t.substr(0,2)?()=>{}:this[t]}}class GlobalCallback extends UiCallback{constructor(){super(...arguments),this.onNetworkRequest=(e,t,n)=>{},this.onKernelMsg=(e,t,n={})=>{},this.onCheckExternalCache=async(e,t)=>Promise.resolve(null),this.onValidateNetworkResponse=(e,t)=>Promise.resolve(!0)}}const CANVAS_ID={HSC:"rml-configurator",HSP:"rml-hsp",GLB:"rml-glb",RMV:"rml-mv"};class DomHelper{get element(){return this._container}constructor(e){this._creator_=e,this._lifeCycleManager.addEventListener(this)}setDomElement(e){if(!this._container){this._container=document.createElement("div"),this._container.classList.add("rml-threejs-canvas-container"),this._container.setAttribute("ondragover","return false"),this._container.style.position="relative",this._container.style.width="100%",this._container.style.height="100%";const t=document.createElement("style");t.innerText=".rml-threejs-canvas-container canvas{position:absolute;top:0;left:0;right:0;bottom:0;z-index:100; opacity:1;}",this._container.appendChild(t),e.appendChild(this._container)}this._element=e}getClientDimensions(){return new Vector2(this._element.clientWidth,this._element.clientHeight)}_removeDomElement(e){if(!e)return;const t=e.parentElement;t&&t.removeChild(e)}reset(){this._element=null,this._removeDomElement(this._container),this._container=null}pause(){this.reset()}resume(){}destroy(){}}__decorate([inject],DomHelper.prototype,"_lifeCycleManager",void 0);class ScenePluginDefaultImplementation{constructor(e){this._creator_=e}setScene(e){}setUiScene(e){}updateBounds(e){}clearScene(e,t){}moveCameraEnd(e){}moveCameraStart(e){}needsUiScene(){return!1}}class PluginSystem{constructor(e){this._plugins=[],this._creator_=e}async init(e,t,n){this._scene=e,this._uiScene=t,this._cameraPosition=n;const{bananaForScale:r}=this._initData;r&&await import("./banana-for-scale-4713be6a.js").then(({default:e})=>this._plugins.push(new e(this._creator_))),this._plugins.forEach(e=>e.setScene(this._scene)),this._plugins.forEach(e=>e.setUiScene(this._uiScene)),this._plugins.forEach(e=>e.updateBounds(this._bounds)),this._plugins.forEach(e=>e.moveCameraEnd(this._cameraPosition))}addPlugin(e){this._plugins.push(e),e.setScene(this._scene),e.setUiScene(this._uiScene),e.updateBounds(this._bounds),e.moveCameraEnd(this._cameraPosition)}updateBounds(e){this._bounds=e,this._plugins.forEach(t=>t.updateBounds(e))}clearScene(e,t){this._plugins.forEach(n=>n.clearScene(e,t))}getActivePlugins(){return this._plugins}getPlugin(e){for(let t of this._plugins)if(t instanceof e)return t;return null}moveCameraEnd(e){this._cameraPosition=e,this._plugins.forEach(t=>t.moveCameraEnd(e))}moveCameraStart(e){this._cameraPosition=e,this._plugins.forEach(t=>t.moveCameraStart(e))}needsUiScene(){return this._plugins.map(e=>e.needsUiScene()).reduce((e,t)=>e||t,!1)}}__decorate([inject],PluginSystem.prototype,"_initData",void 0);class PromiseQueue{constructor(e,t){this._waitingPromises=[],this._finishPromiseExecutor=[],this._errorCallback=()=>{},Promise.allSettled=Promise.allSettled||(e=>Promise.all(e.map(e=>e.then(e=>({status:"fulfilled",value:e})).catch(e=>({status:"rejected",reason:e}))))),e&&this.registerCallback(e),t&&(this._errorCallback=t)}push(e){this._waitingPromises.push(e),Promise.all(this._waitingPromises).then(e=>{e.length===this._waitingPromises.length&&(this._callback&&this._callback(e),this._waitingPromises=[])},this._errorCallback)}finished(e=!1){return new Promise((t,n)=>{this._finishPromiseExecutor.push({resolve:t,reject:n});const r=e?"allSettled":"all";Promise[r](this._waitingPromises).then(e=>{if("allSettled"===r){const t=[];e.forEach(({value:e,status:n})=>{"fulfilled"===n&&t.push(e)}),this._resolveAllExecutors(t)}else this._resolveAllExecutors(e)},e=>{this._rejectAllExecutors(e)})})}registerCallback(e){this._callback=e}unregisterCallback(){this._callback=null}_resolveAllExecutors(e){this._finishPromiseExecutor.forEach(({resolve:t})=>t(e)),this._finishPromiseExecutor=[]}_rejectAllExecutors(e){this._finishPromiseExecutor.forEach(({reject:t})=>t(e)),this._finishPromiseExecutor=[]}clear(){const e=this._waitingPromises.length>0;this._waitingPromises=[],e?this._rejectAllExecutors(new Error("Promise queue has been cleared")):this._resolveAllExecutors([])}get length(){return this._waitingPromises.length}}class MeshGenerator{constructor(e){this.materialQueue=new PromiseQueue,this._geometryComponentMaterialCache=new Map,this._maxAnisotropy=1,this._maxTextures=16,this._textureLoader=new TextureLoader,this._configuratorPreviewMaterial=MaterialCreator.createMeshStandardMaterial({color:"#DDDDDD",transparent:!0,opacity:1,roughness:1,envMap:null,polygonOffset:!0,polygonOffsetFactor:-1}),this._creator_=e,this._previewMaterial=MaterialCreator.createMeshStandardMaterial({color:"#DDDDDD",roughness:1,metalness:0})}getGeometry(e){return e&&this._cacheHolder.geometryCache.has(e)?this._cacheHolder.geometryCache.get(e):null}_generateGeometry(e,t,n,r,a){let i;return e&&this._cacheHolder.geometryCache.has(e)?i=this._cacheHolder.geometryCache.get(e):(i=new BufferGeometry,i.setIndex(new Uint32BufferAttribute(n,1)),i.setAttribute("position",new Float32BufferAttribute(t,3)),i.setAttribute("normal",new Float32BufferAttribute(a,3)),i.setAttribute("uv",new Float32BufferAttribute(r,2)),i.scale(.001,.001,.001),i.rotateX(-Math.PI/2),e&&this._cacheHolder.geometryCache.set(e,i)),i}changeMaterialOfMesh(e,t,n){e&&t?(e.material=t,e.material.transparent||0===e.material.opacity||e.material.transmission>0?(e.castShadow=!1,e.receiveShadow=!1):(e.castShadow=!0,e.receiveShadow=!0),e.material.needsUpdate=!0,this._materialLoaded&&this._materialLoaded(t),this._updateMaterialProperties(e,n)):console.warn("could not assign material to mesh",{mesh:e},{material:t})}_updateMaterialProperties(e,t){var n;if(t&&Object.keys(t).length>0&&e.material instanceof MeshStandardMaterial){const r=e.material.clone();r.userData.materialAttributes=t,t.color&&(r.color=new Color$1(t.color)),t.alpha&&(r.opacity=parseFloat(t.alpha)),t.roughness&&(r.roughness=parseFloat(t.roughness)),t.metallic&&(r.metalness=parseFloat(t.metallic)),r instanceof MeshPhysicalMaterial&&t.transmission&&(r.transmission=parseFloat(t.transmission)),r.transparent=r.opacity<1;const a=e.material;e.material=r,(null===(n=a.userData)||void 0===n?void 0:n.materialAttributes)&&a.dispose()}}_createMaterial(e,t,n,r,a){if(this._cacheHolder.materialCache.has(e))t();else if(e.startsWith("benchmarkMaterial")){let i=createBenchmarkMaterial(e),o=createMaterial(i);this._loadBenchmarkTextures(i,o,r,a).then(t,n)}else this._rapiAccess.getMaterial(e).then(e=>{let i=createMaterial(e);this._loadTextures(e,i,r,a).then(t,n)},n)}_loadBenchmarkTextures(e,t,n=1,r=1){return new Promise((a,i)=>{const o=createBenchmarkTexture(e.id);addTexture(this._dataSyncer.requestAsset(o.image,!0),o,t,this._maxAnisotropy,n/(0===o.mmWidth?1:o.mmWidth),r/(0===o.mmHeight?1:o.mmHeight),this._maxTextures).then(()=>{this._cacheHolder.materialCache.set(e.id,t),a()},i)})}_loadTextures(e,t,n=1,r=1){return new Promise((a,i)=>{if(!e.textures||e.textures&&0===e.textures.length)return this._cacheHolder.materialCache.set(e.id,t),a();this._rapiAccess.getTexturesOf(e).then(o=>{let s=[];o.forEach(e=>{s.push(addTexture(this._dataSyncer.requestAsset(e.image,!0),e,t,this._maxAnisotropy,n/(0===e.mmWidth?1:e.mmWidth),r/(0===e.mmHeight?1:e.mmHeight),this._maxTextures))}),Promise.all(s).then(()=>{this._cacheHolder.materialCache.set(e.id,t),a()},i)})})}_loadMaterial(e,t,n){return new Promise((r,a)=>{this._singlePromiseFactory.create(6,e,(r,a)=>this._createMaterial(e,r,a,t,n)).then(()=>{setTimeout(()=>r(this._cacheHolder.materialCache.get(e)),0)},a)})}_assignMaterial(e,t,n){return this._cacheHolder.materialCache.has(t)?(this.changeMaterialOfMesh(e,this._cacheHolder.materialCache.get(t),n),Promise.resolve()):new Promise((r,a)=>{this._loadMaterial(t).then(a=>{e.userData.materialId===t&&this.changeMaterialOfMesh(e,a,n),r()},a)})}get maxAnisotropy(){return this._maxAnisotropy}set maxAnisotropy(e){this._maxAnisotropy=e}get maxTextures(){return this._maxTextures}set maxTextures(e){this._maxTextures=e}clear(){this._cacheHolder.clear()}_assignRGB(e,t){return new Promise(n=>{let r,a="rgb"+JSON.stringify(t);this._cacheHolder.materialCache.has(a)?r=this._cacheHolder.materialCache.get(a):(r=MaterialCreator.createMeshPhysicalMaterial({color:t}),this._cacheHolder.materialCache.set(a,r)),this.changeMaterialOfMesh(e,r),setTimeout(()=>n(),0)})}_assignItem(e,t){return new Promise((n,r)=>{if(this._cacheHolder.materialCache.has(t))return this.changeMaterialOfMesh(e,this._cacheHolder.materialCache.get(t)),void n();this._rapiAccess.getItem(t).then(a=>{if(a.topImage)this._textureLoader.load(a.topImage,r=>{r.anisotropy=this._maxAnisotropy,r.wrapS=RepeatWrapping,r.wrapT=RepeatWrapping;let i=new Vector2(1,1);a.width>0&&(i.x=1/a.width),a.depth>0&&(i.y=1/a.depth),r.repeat.set(i.x,i.y);const o=MaterialCreator.createMeshPhysicalMaterial({map:r,roughness:.5,metalness:.1});this._cacheHolder.materialCache.set(t,o),this.changeMaterialOfMesh(e,o),setTimeout(()=>n(),0)});else{const e="can not set material, catalog item top image is not set";console.warn(e),r(e)}},r)})}setMaterialLoadedListener(e){this._materialLoaded=e}removeMaterialLoadedListener(){this._materialLoaded=void 0}_createMesh(e,t,n){if(e&&t){const r=this._getComponentMeshId(e,t);if(this._geometryComponentMaterialCache.has(r)){const e=this._geometryComponentMaterialCache.get(r);if(this._cacheHolder.materialCache.has(e)){const t=this._cacheHolder.materialCache.get(e);return new Mesh(n,t)}}}return new Mesh(n,this._configuratorPreviewMaterial.clone())}_getComponentMeshId(e,t){return e+"_"+t}}__decorate([inject],MeshGenerator.prototype,"_initData",void 0),__decorate([inject],MeshGenerator.prototype,"_rapiAccess",void 0),__decorate([inject],MeshGenerator.prototype,"_dataSyncer",void 0),__decorate([inject],MeshGenerator.prototype,"_singlePromiseFactory",void 0),__decorate([inject],MeshGenerator.prototype,"_cacheHolder",void 0),__decorate([inject],MeshGenerator.prototype,"_plannerMeshGenerator",void 0);class ConfiguratorMeshGenerator extends MeshGenerator{constructor(e){super(e)}generateMesh(e=0,t=null,n,r,a,i,o,s=!1,l){let h;h=s?this._generateGeometry(t,r,a,i,o).clone():this._generateGeometry(t,r,a,i,o);const d=this._createMesh(e,t,h);return d.userData.materialId=n,d.layers.set(4),n&&this.materialQueue.push(this._assignMaterial(d,n,l).then(()=>{e&&t&&this._geometryComponentMaterialCache.set(this._getComponentMeshId(e,t),n)})),d}setMaterial(e,t,n,r){return this._assignMaterial(e,t,r)}loadMaterial(e,t,n){return super._loadMaterial(e,t,n)}loadTextures(e,t,n,r){return super._loadTextures(e,t,n,r)}}class EventDispatcher{constructor(){this._listeners={},this._disabled=!1}_addEventListener(e,t,n){this._listeners[e]||(this._listeners[e]=[]),this._listeners[e].push({callback:t,scope:n})}addEventListener(e,t,n){this._addEventListener(e,t,n)}dispatchEvent(e,t){if(!this._listeners[e]||this._disabled)return;const n=this._listeners[e];let r=n.length;for(let e=0;e<r;e++){const r=n[e];t?r.callback.apply(r.scope,[t]):r.callback.call(r.scope)}}removeEventListener(e,t){const n=this._listeners[e];if(n)for(let e=0,r=n.length;e<r;e++)if(n[e].callback===t)return void n.splice(e,1)}enableEvents(){this._disabled=!1}disableEvents(){this._disabled=!0}}const BROWSER_EVENTS={SCROLL:"scroll",MOUSE_MOVE:"mousemove",MOUSE_DOWN:"mousedown",MOUSE_UP:"mouseup",MOUSE_LEAVE:"mouseleave",MOUSE_ENTER:"mouseenter",MOUSE_WHEEL:"wheel",TOUCH_MOVE:"touchmove",TOUCH_START:"touchstart",TOUCH_END:"touchend",CONTEXT_MENU:"contextmenu",DOUBLE_CLICK:"dblclick"},INPUT_DELAY_TYPE={DRAG:50};class InputEvent{constructor(e,t,n,r,a){this.position=e,this.positionRelative=t,this.type=n,this.rotation=r,this.event=a}}const MIN_MOVE_DISTANCE=5*window.devicePixelRatio,MIN_DOLLY_DISTANCE=3*window.devicePixelRatio;class InputManager extends EventDispatcher{constructor(e){super(),this._elementHit=!1,this._delta=-1,this._state=0,this._pinchDistance=-1,this._rotationAngle=-1,this._lastMouseWheelEvent=null,this._lastTouchEvent=null,this._events=Object.keys(BROWSER_EVENTS).map(e=>BROWSER_EVENTS[e]),this._boundingClientRectInvalid=!0,this._creator_=e,this._downPosition={x:0,y:0},this._downPositionRelative={x:0,y:0},this._boundingClientRect=this._getBoundingClientRect()}enableDragIn(e){this._setState(1),this._dragEnabled=!0,e&&(this._dragMV=this._dragM.bind(this),this._dragEV=this._dragE.bind(this),this._dragTarget=e.currentTarget||e.target,this._delta=-1,this._dragMVName="drag",this._dragEVName="dragend",window.TouchEvent&&e instanceof TouchEvent?(this._dragMVName="touchmove",this._dragEVName="touchend"):e.dataTransfer&&e.dataTransfer.setData&&e.dataTransfer.setData("text/plain"," "),this._firefoxDragPosition={x:0,y:0},document.ondragover=e=>{e=e||window.event,this._firefoxDragPosition.x=e.pageX,this._firefoxDragPosition.y=e.pageY},this._dragTarget.addEventListener(this._dragMVName,this._dragMV,!1),this._dragTarget.addEventListener(this._dragEVName,this._dragEV,!1))}isMouseUp(){return 0===this._state}_dragM(e){let t=e,n=null,r=null;window.TouchEvent&&e instanceof TouchEvent?(n=this._getTouchPosition(t),r=this._getTouchPositionRelative(t)):(n=this._getMousePosition(t),r=this._getMousePositionRelative(t)),n.x>0&&n.y>0&&this._move(n,r)}_dragE(e){let t=e;document.ondragover=null,this._firefoxDragPosition=null,this._dragTarget.removeEventListener(this._dragMVName,this._dragMV),this._dragTarget.removeEventListener(this._dragEVName,this._dragEV),window.TouchEvent&&e instanceof TouchEvent?this._onUp(this._getTouchPosition(t),this._getTouchPositionRelative(t),2):this._onUp(this._getMousePosition(t),this._getMousePositionRelative(t),1)}addEvents(e){this._events.forEach(t=>e.addEventListener(t,this,!1)),null===window||void 0===window||window.addEventListener("scroll",this,!1)}removeEvents(e){this._events.forEach(t=>e.removeEventListener(t,this)),null===window||void 0===window||window.removeEventListener("scroll",this)}_move2(e){if(this._lastTouchEvent&&e.timeStamp-this._lastTouchEvent.timeStamp<16)return;const t=e.touches[0],n=e.touches[1],r=t.pageX-n.pageX,a=t.pageY-n.pageY,i=Math.abs(r)+Math.abs(a);this._pinchDistance>-1&&(i>this._pinchDistance+MIN_DOLLY_DISTANCE?(this._setState(3),this.dispatchEvent(7,new InputEvent(this._getTouchPosition(e),this._getTouchPositionRelative(e)))):i<this._pinchDistance-MIN_DOLLY_DISTANCE?(this._setState(3),this.dispatchEvent(8,new InputEvent(this._getTouchPosition(e),this._getTouchPositionRelative(e)))):i<=this._pinchDistance+MIN_DOLLY_DISTANCE&&i>=this._pinchDistance-MIN_DOLLY_DISTANCE&&(this._setState(5),this.dispatchEvent(11,new InputEvent(this._getTouchPosition(e),this._getTouchPositionRelative(e))))),this._pinchDistance=i,this._lastTouchEvent=e}_setState(e){this._state=e}_move(e,t,n,r){void 0===n&&(n=0),void 0===this._dragEnabled&&(this._dragEnabled=!1),1===this._state&&this._canDrag(n)&&(this._delta=this._getDelta(e),(this._delta>MIN_MOVE_DISTANCE||this._elementHit)&&(this._setState(2),this._longClickTimer&&clearTimeout(this._longClickTimer),this.dispatchEvent(0,new InputEvent(this._downPosition,this._downPositionRelative)))),2===this._state&&this.dispatchEvent(1,new InputEvent(e,t)),this.dispatchEvent(6,new InputEvent(e,t,n,null,r))}_longClick(e){2!==e&&(this._setState(2),this._longClickTimer&&clearTimeout(this._longClickTimer),this.dispatchEvent(0,new InputEvent(this._downPosition,this._downPositionRelative)),this.dispatchEvent(1,new InputEvent(this._downPosition,this._downPositionRelative))),this.dispatchEvent(14,new InputEvent(this._downPosition,this._downPositionRelative,2))}_onUp(e,t,n){this.dispatchEvent(4,new InputEvent(e,t,n)),this._getDelta(e)<=MIN_MOVE_DISTANCE&&this.dispatchEvent(5,new InputEvent(e,t)),2===this._state&&this.dispatchEvent(2,new InputEvent(e,t)),4===this._state&&(this.dispatchEvent(10,new InputEvent(e,t)),this._rotationAngle=-1),3===this._state&&(this._pinchDistance=-1),this._lastTouchEvent=null,this._setState(0),this._dragTarget=null,this._elementHit=!1,this._longClickTimer&&clearTimeout(this._longClickTimer)}_getTouchPosition(e){if(e.touches.length){let{clientX:t,clientY:n}=e.touches[0];if(e.touches.length>1){const r=e.touches[1],a=r.clientX,i=r.clientY;t=(t+a)/2,n=(n+i)/2}return{x:t,y:n}}const t=e.changedTouches[0];return{x:t.clientX,y:t.clientY}}_getTouchPositionRelative(e){const t=this._getBoundingClientRect(),{clientWidth:n,clientHeight:r}=this._domHelper.element;if(e.touches.length){const{clientX:a,clientY:i}=e.touches[0];return{x:(a-t.left)/n*2-1,y:-(i-t.top)/r*2+1}}const a=e.changedTouches[0];return{x:(a.clientX-t.left)/n*2-1,y:-(a.clientY-t.top)/r*2+1}}_getMousePosition(e){if(0!==e.clientX&&0!==e.clientY)return{x:e.clientX,y:e.clientY};{let{x:t,y:n}=this._getFireFoxMousePosition(e);return{x:t,y:n}}}_getFireFoxMousePosition(e){let{x:t,y:n}=this._domHelper.getClientDimensions();return{x:t-(t+e.offsetX),y:n-(n+e.offsetY)}}_getMousePositionRelative(e){const t=this._getBoundingClientRect();return 0!==e.clientX&&0!==e.clientY?{x:(e.clientX-t.left)/this._domHelper.element.clientWidth*2-1,y:-(e.clientY-t.top)/this._domHelper.element.clientHeight*2+1}:this._firefoxDragPosition&&0!==this._firefoxDragPosition.x&&0!==this._firefoxDragPosition.y?{x:(this._firefoxDragPosition.x-t.left)/this._domHelper.element.clientWidth*2-1,y:-(this._firefoxDragPosition.y-t.top)/this._domHelper.element.clientHeight*2+1}:{x:0,y:0}}_getDelta(e){return Math.abs(this._downPosition.y-e.y)+Math.abs(this._downPosition.x-e.x)}setDragEnabled(e){this._dragEnabled=e}handleEvent(e){switch(e.type){case BROWSER_EVENTS.SCROLL:this._boundingClientRectInvalid=!0;break;case BROWSER_EVENTS.MOUSE_MOVE:this._onMouseMove(e);break;case BROWSER_EVENTS.DOUBLE_CLICK:this._onDoubleClick(e);break;case BROWSER_EVENTS.MOUSE_DOWN:this._onMouseDown(e);break;case BROWSER_EVENTS.MOUSE_UP:this._onMouseUp(e);break;case BROWSER_EVENTS.MOUSE_LEAVE:this._onMouseLeave(e);break;case BROWSER_EVENTS.MOUSE_ENTER:this._onMouseEnter(e);break;case BROWSER_EVENTS.MOUSE_WHEEL:this._onMouseWheel(e);break;case BROWSER_EVENTS.TOUCH_MOVE:this._onTouchMove(e);break;case BROWSER_EVENTS.TOUCH_START:this._onTouchStart(e);break;case BROWSER_EVENTS.TOUCH_END:this._onTouchEnd(e);break;case BROWSER_EVENTS.CONTEXT_MENU:this._onContextMenu(e)}}_onMouseDown(e){if(e.preventDefault(),2===e.detail)return;let{x:t,y:n}=this._getMousePosition(e);this._downPosition={x:t,y:n},this._downPositionRelative=this._getMousePositionRelative(e),this.dispatchEvent(3,new InputEvent({x:t,y:n},this._downPositionRelative,1)),this._setState(1)}_onMouseUp(e){e.preventDefault(),2!==e.detail&&this._onUp(this._getMousePosition(e),this._getMousePositionRelative(e),1)}_onMouseMove(e){e.preventDefault(),this._move(this._getMousePosition(e),this._getMousePositionRelative(e),1,e)}_onDoubleClick(e){e.preventDefault(),this.dispatchEvent(12,new InputEvent(this._getMousePosition(e),this._getMousePositionRelative(e),1))}_onMouseLeave(e){var t;this._delta=-1,(null===(t=e.relatedTarget)||void 0===t?void 0:t.closest('[data-rml-sdk="ignore-mouse-leave"]'))||this._onMouseUp(e)}_onMouseEnter(e){e.preventDefault()}_onMouseWheel(e){if(this._lastMouseWheelEvent&&e.timeStamp-this._lastMouseWheelEvent.timeStamp<40)return e.preventDefault(),void e.stopPropagation();e.deltaY<0?this.dispatchEvent(7,new InputEvent(this._getMousePosition(e),this._getMousePositionRelative(e),1,0,e)):this.dispatchEvent(8,new InputEvent(this._getMousePosition(e),this._getMousePositionRelative(e),1,0,e)),this._lastMouseWheelEvent=e}_onTouchMove(e){if(e.preventDefault(),!this._dragTarget)if(1===e.touches.length)this._move(this._getTouchPosition(e),this._getTouchPositionRelative(e),2);else if(2===e.touches.length)if(this._elementHit||4===this._state){const r=e.touches[0],a=e.touches[1],i=function(e){let t=toDegrees(e);return t<0&&(t=180+(180+t)),t}((t={x:r.pageX,y:r.pageY},n={x:a.pageX,y:a.pageY},Math.atan2(n.y-t.y,n.x-t.x)));this._rotationAngle<0&&(this._rotationAngle=i);const o=i-this._rotationAngle;this._rotationAngle=i,this.dispatchEvent(9,new InputEvent(this._getTouchPosition(e),this._getTouchPositionRelative(e),2,toRadiant(o))),this._setState(4)}else this._move2(e);var t,n}_onTouchStart(e){if(e.preventDefault(),1===e.touches.length){let{x:t,y:n}=this._getTouchPosition(e);this._downPosition={x:t,y:n},this._downPositionRelative=this._getTouchPositionRelative(e),this.dispatchEvent(3,new InputEvent({x:t,y:n},this._downPositionRelative,2)),this._setState(1),this._longClickTimer=window.setTimeout(this._longClick.bind(this,2),350)}else 2===e.touches.length&&(1!==this._state&&2!==this._state||this._onUp(this._getTouchPosition(e),this._getTouchPositionRelative(e),2),this._setState(3))}_onTouchEnd(e){e.preventDefault(),e.touches.length>1&&5===this._state||3===this._state||(this.dispatchEvent(13,new InputEvent(this._getTouchPosition(e),this._getTouchPositionRelative(e),2)),this._onUp(this._getTouchPosition(e),this._getTouchPositionRelative(e),2))}_onContextMenu(e){e.preventDefault()}_canDrag(e){return this._dragEnabled}onElementHit(){this._elementHit=!0}_getBoundingClientRect(){return this._boundingClientRectInvalid&&(this._boundingClientRect=this._domHelper.element.getBoundingClientRect(),this._boundingClientRectInvalid=!1),this._boundingClientRect}updateSize(){this._boundingClientRectInvalid=!0}}__decorate([inject],InputManager.prototype,"_domHelper",void 0);class SelectionHandlerEvent{constructor(e){const{component:t,resetCamera:n,consecutive:r}=e;this.component=t,this.resetCamera=void 0===n||n,this.consecutive=void 0===r||r}}class FontLoader extends Loader{constructor(e){super(e)}load(e,t,n,r){const a=this,i=new FileLoader(this.manager);i.setPath(this.path),i.setRequestHeader(this.requestHeader),i.setWithCredentials(this.withCredentials),i.load(e,(function(e){const n=a.parse(JSON.parse(e));t&&t(n)}),n,r)}parse(e){return new Font(e)}}class Font{constructor(e){this.isFont=!0,this.type="Font",this.data=e}generateShapes(e,t=100){const n=[],r=function(e,t,n){const r=Array.from(e),a=t/n.resolution,i=(n.boundingBox.yMax-n.boundingBox.yMin+n.underlineThickness)*a,o=[];let s=0,l=0;for(let e=0;e<r.length;e++){const t=r[e];if("\n"===t)s=0,l-=i;else{const e=createPath(t,a,s,l,n);s+=e.offsetX,o.push(e.path)}}return o}(e,t,this.data);for(let e=0,t=r.length;e<t;e++)n.push(...r[e].toShapes());return n}}function createPath(e,t,n,r,a){const i=a.glyphs[e]||a.glyphs["?"];if(!i)return void console.error('THREE.Font: character "'+e+'" does not exists in font family '+a.familyName+".");const o=new ShapePath;let s,l,h,d,c,u,p,m;if(i.o){const e=i._cachedOutline||(i._cachedOutline=i.o.split(" "));for(let a=0,i=e.length;a<i;)switch(e[a++]){case"m":s=e[a++]*t+n,l=e[a++]*t+r,o.moveTo(s,l);break;case"l":s=e[a++]*t+n,l=e[a++]*t+r,o.lineTo(s,l);break;case"q":h=e[a++]*t+n,d=e[a++]*t+r,c=e[a++]*t+n,u=e[a++]*t+r,o.quadraticCurveTo(c,u,h,d);break;case"b":h=e[a++]*t+n,d=e[a++]*t+r,c=e[a++]*t+n,u=e[a++]*t+r,p=e[a++]*t+n,m=e[a++]*t+r,o.bezierCurveTo(c,u,p,m,h,d)}}return{offsetX:i.ha*t,path:o}}const PROMISE_CALLBACKS=new Map,RESOURCES=new Map;class AsyncDependencyLoader{static loadFont(e){if(RESOURCES.has(e))return new Promise(t=>{t(RESOURCES.get(e))});if(PROMISE_CALLBACKS.has(e))return new Promise((t,n)=>{PROMISE_CALLBACKS.get(e).push({resolve:t,reject:n})});let t=new FontLoader;return new Promise((n,r)=>{PROMISE_CALLBACKS.set(e,[{resolve:n,reject:r}]),t.load(getAssetPath()+e,t=>{RESOURCES.set(e,t),AsyncDependencyLoader._resolveAll(e,t)})})}static _resolveAll(e,t){PROMISE_CALLBACKS.has(e)&&PROMISE_CALLBACKS.get(e).forEach(e=>e.resolve(t)),PROMISE_CALLBACKS.delete(e)}}class ComponentDimensioningHelper{constructor(e){this._activeComponents=[],this._componentDimensioningsExist=new Map,this._creator_=e}setCamera(e){this._camera=e}add(e){if(this._componentDimensioningsExist.has(e.runtimeId)&&!this._componentDimensioningsExist.get(e.runtimeId))return!1;const t=this._plannerKernelAccess.kernelInstance.getComponent(e.runtimeId),n=t.dimensionings;if(this._componentDimensioningsExist.set(e.runtimeId,n.length>0),!n||0===n.length||this._camera.position.z<0)return!1;const r=kernelBoxToThreeBox(t.boxForMeasurement),a={x:this._camera.position.x,y:this._camera.position.z};return import("./component-dimensioning-cc5f04fd.js").then(t=>{AsyncDependencyLoader.loadFont("static/rubik_regular-bc008a7de2daee79.json").then(i=>{n.forEach(n=>{var o;e.add(new t.default(((o=n).from=o.from/1e3,o.to=o.to/1e3,1===o.type.value?(o.type={value:2},o.from*=-1,o.to*=-1):2===o.type.value&&(o.type={value:1}),o),r,i,a))})})}),this._activeComponents.push(e),!0}remove(e,t=!0){return new Promise(n=>{import("./component-dimensioning-cc5f04fd.js").then(r=>{let a=[];e.children.forEach(e=>{e instanceof r.default&&a.push(e)}),a.forEach(t=>{e.remove(t),dispose(t)}),t&&removeItem(this._activeComponents,e),n()})})}hasComponentDimensions(){return this._activeComponents.length>0}async reset(){for(const e of this._activeComponents)await this.remove(e);this._activeComponents=[]}invalidateDimensioningsCache(e){e?this._componentDimensioningsExist.delete(e):this._componentDimensioningsExist.clear()}}__decorate([inject],ComponentDimensioningHelper.prototype,"_plannerKernelAccess",void 0);class Waiter{constructor(){this._promiseExecutors=[]}create(){return new Promise((e,t)=>{this._promiseExecutors.push({resolve:e,reject:t})})}resolve(e){return new Promise(t=>{this._promiseExecutors.forEach(t=>t.resolve(e)),this._promiseExecutors=[],t(e)})}reject(e){return new Promise((t,n)=>{this._promiseExecutors.forEach(t=>t.reject(e)),this._promiseExecutors=[],n(e)})}}class PlanElementViewModel extends class{constructor(e){this._coreReference=e.clone()}clearReference(){this._coreReference.delete(),this._coreReference=null}getKernelObject(){return this._coreReference}}{constructor(e){super(e),this._objectWaiter=new Waiter,this._topView=!1;const t=convertToTHREE(e.getCenter());this._container=new Object3D,this._container.position.copy(t),this._boundingBox=this._generateBoundingBox(),fadeIn(this._boundingBox),this._container.add(this._boundingBox),2!==this.getPlanElement().getType().value&&(this._object=new Object3D,this._container.add(this._object))}getSize(){return this._object?(new Box3).setFromObject(this._object).getSize(new Vector3):new Vector3}update(){this._container.position.copy(convertToTHREE(this.getPlanElement().getMeshCenter())),this._boundingBox&&this._updateBoundingBox()}_updateBoundingBox(){const e=this.getSize();this._boundingBox.geometry=new BoxGeometry(e.x,e.y,e.z),this._boundingBox.position.y=e.y/2}getPosition(){return this._container.position}getRotation(){return this._container.rotation.y}getBounds(){let e;return this.getPlanElement().boxForMeasurement?(e=kernelBoxToThreeBox(this.getPlanElement().boxForMeasurement),e.applyMatrix4(this.getContainer().matrix)):(e=new Box3,e.setFromObject(this._container)),e}getBoundingBox(){return this._boundingBox}getPlanElement(){return this._coreReference}setObject(e){this._object=e,this._objectWaiter.resolve(e)}getObject(){return this._object}async getObjectAsync(){return this._object?Promise.resolve(this._object):this._objectWaiter.create()}addMesh(e){this._object.add(e),this.hidePreviewBox()}getMesh(e){if(!this._object||0===this._object.children.length)return null;const t=getMaterialId(e,this.getPlanElement().getType());return this._object.children.find(e=>e.userData.material===t)}getContainer(){return this._container}getId(){return this.getPlanElement().getId()}clear(){dispose(this._container),this._selectionMesh&&dispose(this._selectionMesh)}remove(){var e;null===(e=this._container.parent)||void 0===e||e.remove(this._container),this.clear()}hidePreviewBox(){this._container&&this._boundingBox&&(this._boundingBox.material=(boundingBoxMaterial||(boundingBoxMaterial=new MeshBasicMaterial,boundingBoxMaterial.visible=!1),boundingBoxMaterial))}_generateBoundingBox(){const e=this.getSize(),t=new BoxGeometry(e.x,e.y,e.z);let n=new Color$1("#DDDDDD");const r=this.getPlanElement().customColor;r>0&&(n=(e=>{let t=new Color$1;return t.setRGB((e>>16)/255,(e>>8&255)/255,(e>>0&255)/255),t})(r));let a=MaterialCreator.createMeshStandardMaterial({color:n,opacity:1,transparent:!0}),i=new Mesh(t,a);return i.name="bounding box",i.position.y=e.y/2,i.castShadow=!1,i.receiveShadow=!1,i.layers.set(6),i}select(){this._isSelected=!0,this._selectionMesh&&this._container.add(this._selectionMesh)}deselect(){this._isSelected=!1,this._selectionMesh&&this._container.remove(this._selectionMesh)}hoverOn(){}hoverOff(){}setTopView(e){this._topView=e}}class PlanObjectViewModel extends PlanElementViewModel{constructor(e){super(e),this._initDone=!1,this._initFailed=null,this._initWaiter=new Waiter,this._container.rotation.y=e.rotation}finishInit(){return this._initDone=!0,this._initFailed=null,this._initWaiter.resolve()}failInit(e){return this._initFailed=e,this._initDone=!1,this._initWaiter.reject(this._initFailed)}isInitDone(){return this._initDone?Promise.resolve():this._initFailed?Promise.reject(this._initFailed):this._initWaiter.create()}getPlanObject(){return this.getPlanElement()}getSize(){return convertToThreeDimensions(this.getPlanObject().size)}update(){super.update(),this._container.rotation.y=this.getPlanObject().rotation}}class ConfiguratorPlanObjectViewModel extends PlanObjectViewModel{constructor(e){super(e),this._container.name="Configurable "+this._container.name}addRootComponent(e){this.setObject(e),this._rootComponentId=e.id,this._rootComponentRuntimeId=e.runtimeId,this._container.add(this.getObject())}getConfigurationRuntimeId(){return this.getPlanObject().getConfigurationRuntimeId()}getRootComponentId(){return this._rootComponentId}getRootComponentRuntimeId(){return this._rootComponentRuntimeId}finishConstruction(){return this.finishInit()}failConstruction(){return this.failInit(new Error("Construction of configuration failed"))}}let settings=JSON.parse(JSON.stringify({isProduction:!0,isUnitTesting:!1,environment:"production",detailEnvironment:"development",features:{},APP:{RAPI:{server:"/api/v2",localReverseProxy:"https://www.roomle.com/api/v2",liveServer:"https://www.roomle.com/api/v2",testServer:"https://www.test.roomle.com/api/v2",headers:{apiKey:"roomle_portal_v2",currentTenant:9,locale:"en",language:"en",device:1,token:"anonymous",platform:"web"},itemHeaders:{assetRevision:"glb",assetFileFormat:"glb"}},SHORTENER_URL:"http://rml.co/"},environments:{PRODUCTION:"production",DEVELOPMENT:"development",TEST:"test",TEST_SERVER:"test_server",ALPHA:"alpha"}}));settings.isUnitTesting=!1,"undefined"!=typeof module&&module.exports||(window.IS_DEBUG=!0);var Env=(function(e=!1){if(e){let e=JSON.parse(JSON.stringify(settings));e.APP,e.features}}(),JSON.parse(JSON.stringify(settings)));class StaticPlanObjectViewModel extends PlanObjectViewModel{constructor(e){super(e),this._originalSize=new Vector3,this._container.name="Static "+this._container.name}setRapiItem(e){return this._rapiItem?Promise.resolve():this._addStaticItem(e)}async _addStaticItem(e){this._rapiItem=e;let t=this.getPlanObject();if(this._glbUrl=getGlbUrl(e),!this._glbUrl)return Promise.reject("No glb url found");let n=e.scaleable?convertToThreeDimensions(t.size):void 0,r=new Vector3(1,1,1);t.flipX&&(r.x*=-1),t.flipY&&(r.z*=-1);try{const a=await this._staticItemLoader.loadGLB(this._glbUrl,void 0,void 0,n,r,t.customColor,e.colorable);this._originalSize.copy(a.boundingBox.getSize(new Vector3)),a.scene.name=e.label,this.setObject(a.scene),((e,t)=>{let n=(new Box3).setFromObject(e),r=n.getSize(new Vector3),a=Math.min(r.x,r.y,r.z),i=!0;a>5&&(console.warn("GLB seems to be too big ("+a+")",t),i=!1),n.min.y<-.01&&(console.warn("GLB seems to be under the floor ("+n.min.y+"): ",t),i=!1)})(a.scene,this._glbUrl),fadeIn(a.scene),this._container.add(this.getObject()),this.hidePreviewBox(),await this.finishInit()}catch(e){await this.failInit(e)}}getRapiItem(){return this._rapiItem}needsRapiItem(){return!this._glbUrl}getGLBUrl(){return this._glbUrl}update(){const e=convertToThreeDimensions(this.getPlanElement().size),t=this.getObject();if(!t)return;if(e){const{x:n,y:r,z:a}=this._originalSize;let i=new Vector3(e.x/n,e.y/r,e.z/a);t.scale.copy(i)}this.getPlanElement().flipX&&(t.scale.x*=-1),this.getPlanElement().flipY&&(t.scale.z*=-1);const n=this.getPlanElement().customColor;t.traverse(e=>{if(e instanceof Mesh&&e.material instanceof MeshStandardMaterial){const t=e.material;if(this._rapiItem.colorable&&n&&n>0){let e=new Color$1(n);t.color=e.copySRGBToLinear(e)}t.needsUpdate=!0}}),super.update()}}__decorate([inject],StaticPlanObjectViewModel.prototype,"_staticItemLoader",void 0);const wallDimensionToTransferable=e=>{const{id:t,textRotation:n,length:r,lengthFormatted:a}=e;return{id:t,fromWithoutPadding:threeVectorToTransferableXYZ(e.fromWithoutPadding),toWithoutPadding:threeVectorToTransferableXYZ(e.toWithoutPadding),fromPosition3d:threeVectorToTransferableXYZ(e.fromPosition3d),toPosition3d:threeVectorToTransferableXYZ(e.toPosition3d),textPosition3d:threeVectorToTransferableXYZ(e.textPosition3d),fromPosition2d:threeVectorToTransferableXY(e.fromPosition2d),toPosition2d:threeVectorToTransferableXY(e.toPosition2d),textPosition2d:threeVectorToTransferableXY(e.textPosition2d),textDirection:threeVectorToTransferableXYZ(e.textDirection),textRotation:n,length:r,lengthFormatted:a}};let WALL_TOP_VIEW_MATERIAL;const getTopViewMaterial=()=>(WALL_TOP_VIEW_MATERIAL||(WALL_TOP_VIEW_MATERIAL=MaterialCreator.createMeshPhysicalMaterial({color:0})),WALL_TOP_VIEW_MATERIAL);class WallPlanElementViewModel extends PlanElementViewModel{constructor(e){super(e),this._container.name="Wall Plan Element"}get isSelected(){return this._isSelected}getWallDimension(e){const t=this.getPlanElement(),n=convertToTHREE(t.getCenter()),r=t.getPreferredSide();let a,i;0===r.value?(a=convertToTHREE(t.getCornerFromLeft()),i=convertToTHREE(t.getCornerToLeft())):1===r.value&&(a=convertToTHREE(t.getCornerFromRight()),i=convertToTHREE(t.getCornerToRight()));const o=a.clone().add(i).divideScalar(2),s=a.clone().sub(i),l=s.clone().cross(new Vector3(0,1,0)).normalize();l.clone().dot(o.clone().sub(n))<0&&l.multiplyScalar(-1);const h={maxZoomedIn:Math.max(.7,e),maxZoomedOut:.01,minPadding:.05,maxPadding:.25},d=transformRange(e,h.maxZoomedIn,h.maxZoomedOut,h.minPadding,h.maxPadding),c=l.clone().multiplyScalar(d/2),u=a.clone().add(c),p=i.clone().add(c),m=l.multiplyScalar(d),g=a.add(m),_=i.add(m),f=s.clone();s.dot(new Vector3(1,0,0))<0&&f.multiplyScalar(-1);const v=Math.atan2(f.z,f.x),w=g.clone().add(_).divideScalar(2);return{id:t.getId(),fromPosition3d:g,toPosition3d:_,textPosition3d:w,textDirection:f,textRotation:v,length:t.getLength(r.value),fromWithoutPadding:u,toWithoutPadding:p}}addMesh(e){e.traverse(e=>{this._setMaterial(e)}),e.layers.set(9),super.addMesh(e);const t=(new Box3).setFromObject(this.getObject()).getSize(new Vector3);this._boundingBox.geometry=new BoxGeometry(t.x,t.y,t.z),this._boundingBox.position.y=t.y/2}show(){var e,t;this.getContainer().visible=!0,null===(e=this.getObject())||void 0===e||e.traverse(e=>{e.layers.set(9)}),null===(t=this.getBoundingBox())||void 0===t||t.layers.set(6)}hide(){var e,t;this.getContainer().visible=!1,null===(e=this.getObject())||void 0===e||e.traverse(e=>{e.layers.disableAll()}),null===(t=this.getBoundingBox())||void 0===t||t.layers.disableAll()}_enableTopView(){this._container.traverse(e=>{this._setTopMaterial(e)})}_setTopMaterial(e){e instanceof Mesh&&!e.userData.originalMaterial&&e.material&&e!==this._boundingBox&&(e.userData.originalMaterial=e.material,e.material=getTopViewMaterial())}_disableTopView(){this._container.traverse(e=>{e instanceof Mesh&&e.userData.originalMaterial&&(e.material=e.userData.originalMaterial,delete e.userData.originalMaterial)})}setTopView(e){super.setTopView(e),e?this._enableTopView():this._disableTopView()}getKernelObject(){return super.getKernelObject()}_setMaterial(e){e instanceof Mesh&&e.material&&e!==this._boundingBox&&(e.userData.originalMaterial||(e.userData.originalMaterial=e.material),this._topView&&this._isSelected?e.material=new MeshBasicMaterial({color:10526880,side:DoubleSide}):this._topView&&!this._isSelected?e.material=getTopViewMaterial():(e.material=e.userData.originalMaterial,delete e.userData.originalMaterial))}select(){super.select(),this._container.traverse(e=>{this._setMaterial(e)})}deselect(){super.deselect(),this._container.traverse(e=>{this._setMaterial(e)})}}class FloorPlanElementViewModel extends PlanElementViewModel{constructor(e){super(e),this._container.name="Floor Plan Element"}addMesh(e){this.getObject().clear(),super.addMesh(e),e.layers.set(9),e.castShadow=!1,e.position.y=-.001}}class CeilingPlanElementViewModel extends PlanElementViewModel{constructor(e){super(e),this._container.name="Ceiling Plan Element"}addMesh(e){super.addMesh(e),e.castShadow=!1;const t=(new Box3).setFromObject(this.getObject()).getSize(new Vector3);this._boundingBox.geometry=new BoxGeometry(t.x,.01,t.z)}}const META_INFO=new Map;class Benchmark{static start(e){if(!window.performance||!window.performance.getEntriesByName)return"";let t=window.performance.getEntriesByName(e).length++,n="";t<100&&(n="0"),t<10&&(n="0"+n);const r=t>0?e+"_"+n+t:e,a=r+"_start";return window.performance.mark(a),r}static addMeta(e,t){const n=Benchmark.getMeta(e);META_INFO.set(e,Object.assign(n,t))}static getMeta(e){return META_INFO.get(e)||{}}static end(e){}static getMeasure(e){return[]}static showBenchmarks(e){const t=window.performance.getEntriesByType("measure");t.sort((function(e,t){return e.startTime-t.startTime}));const n=[];for(let r=0,a=t.length;r<a;r++){const a=t[r];e&&-1===a.name.indexOf(e)||n.push({Start:parseFloat(a.startTime.toFixed(2)),Name:a.name,Duration:parseFloat(a.duration.toFixed(2))})}console.table(n)}}class AppContext{static init(e={}){const{kernelInstance:t,kernelContainer:n,planObjectId:r}=e;AppContext.kernelInstance=t,AppContext.kernelContainer=n,AppContext.planObjectId=r}static cleanUp(){AppContext.useHDGeometry=!1,AppContext.kernelInstance=null,AppContext.kernelContainer=null,AppContext.planObjectId=null}}AppContext.useHDGeometry=!1,AppContext.kernelInstance=null,AppContext.kernelContainer=null,AppContext.planObjectId=null;const WAITERS=new Map,_endOperation=function(e,t,n){let r=WAITERS.get(e);if(r){const a=n?[n]:void 0;r.forEach(({resolve:e,reject:n})=>t?e.apply(e,a):n.apply(n,a)),WAITERS.delete(e)}};class AsyncHelper{static finishOperation(e,t){_endOperation(e,!0,t)}static failOperation(e,t){_endOperation(e,!1,t)}static waitFor(e,t){return new Promise((n,r)=>{let a=WAITERS.get(e);a||(WAITERS.set(e,[]),a=WAITERS.get(e)),a.push({resolve:n,reject:r}),"function"==typeof t&&t.apply(t)})}}const isRange=function(e){return e.validRange&&"string"==typeof e.validRange.type},isOptions=function(e){return e.validValues&&e.validValues.length>0},isMaterial=function(e){return"Material"===e.type};let MEM_URL,WASM_URL,WASM_LOADER,ASM_LOADER,CACHE_COMPILATION;const KERNEL_PATHS={WASM:{CONFIGURATOR:{URL:"static/ConfiguratorKernel-cbe3b3ae4a5ca48c.wasm",LOADER:"static/ConfiguratorKernel-ea213aa201ba840d.js"},PLANNER:{URL:"static/RoomleCore-18093ce58ffb1161.wasm",LOADER:"static/RoomleCore-d31ce9bf62e9202f.js"}},WASM_MODERN:{CONFIGURATOR:{URL:"static/ConfiguratorKernel-26b6a0b244865b63.wasm",LOADER:"static/ConfiguratorKernel-5c4fcff0d630e61b.js"},PLANNER:{URL:"static/RoomleCore-e348c577cd9e6e8d.wasm",LOADER:"static/RoomleCore-c9e8fbc848d32a0e.js"}},ASM:{CONFIGURATOR:{MEM_URL:"static/ConfiguratorKernelJs-82227115ef67c364.mem",LOADER:"static/ConfiguratorKernelJs-c8333c449884dd71.js"},PLANNER:{MEM_URL:"static/RoomleCoreJs-c12564f55ee13eab.mem",LOADER:"static/RoomleCoreJs-c14b4994d4efd3d9.js"}}},USE_WASM=!!window.WebAssembly;class CommonKernelAccess{_utilityToLongArray(e){const t=new this._kernelContainer.LongArray;return e.forEach(e=>t.push_back(e)),t}constructor(e){this._requestedItemIds=[],this._requestedMaterialIds=[],this._configuratorKernelCallbackListener=new Set,this._cachedGroupIds=[],this._waitingForGroups=!1,this._subComponentsWaiters=new Map,this._shouldWait=!0,this._creator_=e,window.KernelCallback={isReady:this.isReady.bind(this)},this._lifeCycleManager.addEventListener(this)}init(e){this._kernelType=e,this._setupKernelPaths(e),this._setupEmsModule(e),this._useWASM=USE_WASM,this._kernelPath=USE_WASM?WASM_LOADER:ASM_LOADER}_initKernel(){const{restrictionLevel:e}=this._initData,t=!1!==this._initData.callbacksOnlyIfGeometryIsReady;this._kernelInstance.setUpdateCallbacksOnlyIfGeometryIsReady(t),this._kernelInstance.setLevel(e),this._unitFormatter.init(this._kernelContainer),this._kernelInstance.setEnvironmentVariable("unit",this._unitFormatter._actualUnitString||"cm"),this._kernelInstance.setEnvironmentVariable("unitString","short"),this._kernelInstance.useEnvironmentGeometry(1===this._kernelType);const{overrideCountry:n,locale:r}=this._globalInitData;n&&(this._kernelInstance.resetPriceListIds(),this._kernelInstance.addPriceList(n)),this._kernelInstance.setEnvironmentVariable("language",r)}get kernelContainer(){return this._kernelContainer}get kernelInstance(){return this._kernelInstance}get configurationExporter(){return this._configurationExporter||(this._configurationExporter=this._kernelContainer.newConfigurationExporter()),this._configurationExporter}_setupKernelPaths(e){const t=0===e?"PLANNER":"CONFIGURATOR";MEM_URL=KERNEL_PATHS.ASM[t].MEM_URL,ASM_LOADER=KERNEL_PATHS.ASM[t].LOADER,WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,8,1,6,0,6,64,25,11,11]))?(WASM_URL=KERNEL_PATHS.WASM_MODERN[t].URL,WASM_LOADER=KERNEL_PATHS.WASM_MODERN[t].LOADER):(WASM_URL=KERNEL_PATHS.WASM[t].URL,WASM_LOADER=KERNEL_PATHS.WASM[t].LOADER),CACHE_COMPILATION=!0}_setupEmsModule(e){const t=this;this._kernelContainer={locateFile(t){const n=0===e?/RoomleCoreJs[\-a-z0-9]*\.js\.mem/:/ConfiguratorKernelJs[\-a-z0-9]*\.js\.mem/;return t.match(n)?getAssetPath()+MEM_URL:t},wasmBinaryFile:getAssetPath()+WASM_URL,preRun:[],postRun:[],setStatus:null,print(e){t._kernelIo.log(e)},printErr(e){t._kernelIo.error(e)},quit(e){0!==e&&t._kernelIo.throw(e&&e.toString?e.toString():"Unknown error while C/C++ main executes")}},CACHE_COMPILATION&&USE_WASM&&(this._kernelContainer.instantiateWasm=function(e,t){return((e,t,n)=>{const r="function"==typeof WebAssembly.instantiateStreaming;Benchmark.addMeta("kernel_is_ready",{cachedInIndexedDB:!1});let a=null;r?(Benchmark.start("kernel_stream_compile"),a=WebAssembly.instantiateStreaming(fetch(getAssetPath()+e),t)):(Benchmark.start("kernel_legacy_compile"),a=fetch(getAssetPath()+e).then(e=>e.arrayBuffer()).then(e=>WebAssembly.instantiate(e,t))),Benchmark.addMeta("kernel_is_ready",{instantiateStreaming:r}),a.then(e=>{n(e.instance)},e=>console.error(e))})(WASM_URL,e,t),{}})}_passSubComponentsToKernel(e,t){const n=e.id,r=t.get(n);if(r)for(let t=0,a=r.length;t<a;t++){const{parentId:a,partId:i}=r[t];this._kernelIo.setMeta({componentId:n}),this._kernelInstance.loadedSubComponent(a,i,n,e.configuration)}}_fetchSubComponents(e){let t=[...e.keys()];t.length&&this._rapiAccess.getComponents(t).then(t=>{for(let n=0,r=t.length;n<r;n++)this._passSubComponentsToKernel(t[n],e);this._flushSubComponentsWaiters()})}_flushSubComponentsWaiters(){this._fetchSubComponents(this._subComponentsWaiters),this._subComponentsWaiters=new Map,this._shouldWait=!1}isReady(){this._kernelContainer.setExternalHelpers(this._kernelIo,{convertCObject}),Env.isProduction||Env.isUnitTesting||this.addDebugInfo(),window.KernelCallback&&(window.KernelCallback=null,delete window.KernelCallback)}addDebugInfo(){const e=function(t,n=[]){const r=Object.getPrototypeOf(t),a=r?Object.getOwnPropertyNames(r):[],i=t?Object.getOwnPropertyNames(t):[];return r?e(r,[...n,...i,...a]):[...i,...a,...n]},t=e(this),n=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toString","valueOf"];[...new Set(t)].forEach(e=>{if(!e.startsWith("_")&&"function"==typeof this[e]&&-1===n.indexOf(e))try{const t=this[e].bind(this);this[e]=function(...n){return this._kernelIo.log("[ KernelCommunication ]: "+e),t(...n)}}catch(e){}})}getConfigurationData(e){return new Promise(t=>{var n;const r=this.kernelInstance.getPlanObject(e),a=(new Date).toISOString(),i=this.kernelInstance.getComponentId(e),o=getCatalogIdFromItemOrConfigurationId(i),s=(null===(n=r.boxForMeasurement)||void 0===n?void 0:n.size)||r.bounds;t({created:a,lastAccess:a,configuration:this.kernelInstance.getSerializedConfiguration(e),configurationHash:this.kernelInstance.getHashOfConfiguration(e),parts:JSON.stringify(this.kernelInstance.getPartList(e)),rootComponentId:i,width:s.x,height:s.z,depth:s.y,catalog:o,orderable:!1,requestable:!1})})}loadComponent(e,t,n){this._rapiAccess.getComponent(t.componentId).then(r=>{var a;let i=r.configuration;i||(i="error",null===(a=this._configuratorUiCallbacks)||void 0===a||a.onContentProblem({rapiPath:"components",ids:[t.componentId],message:t.componentId+" has no configuration"})),this._kernelIo.setMeta({componentId:t.componentId}),this._kernelInstance.loadComponent(e,i,t,n),this._flushSubComponentsWaiters()},r=>{var a;this._kernelInstance.loadComponent(e,"error",t,n),this.onLoadComponentError(r,t.componentId),null===(a=this._configuratorUiCallbacks)||void 0===a||a.onError(new Error(`Component with id "${t.componentId}" can not be loaded. "${r}"`)),this._flushSubComponentsWaiters()})}loadSubComponent(e,t,n){if(this._shouldWait){let r=this._subComponentsWaiters.get(n);r||this._subComponentsWaiters.set(n,[]),r=this._subComponentsWaiters.get(n),r.push({parentId:e,partId:t}),this._subComponentsWaiters.set(n,r)}else this._rapiAccess.getComponent(n).then(r=>{var a;let i=r.configuration;i||(i="error",null===(a=this._configuratorUiCallbacks)||void 0===a||a.onContentProblem({rapiPath:"components",ids:[n],message:"SubComponent "+n+" has no configuration"})),this._kernelIo.setMeta({componentId:n,parentId:e}),this._kernelInstance.loadedSubComponent(e,t,n,i)})}async loadItemConfigurations(e,t){let n=Array.isArray(t)?t:[t];if(this._requestedItemIds.push(...n),await wait(0),!this._requestedItemIds.length)return;const r=[...this._requestedItemIds];this._requestedItemIds=[],(await this._rapiAccess.getItems(r)).forEach(t=>{this._kernelInstance.loadedItemConfiguration(e,t.id,t.configuration)})}requestDeleteComponent(e){var t,n;e&&((null===(n=null===(t=this._initData)||void 0===t?void 0:t.featureFlags)||void 0===n?void 0:n.reDock)?this._kernelInstance.deletePlanComponent(e):this._kernelInstance.deleteComponent(e))}dockComponentWithPosition(e,t,n,r,a){var i;this._kernelInstance.dockComponentWithPosition(n,r,e,t,a);const o=this._kernelInstance.getComponentId(n),s=this._kernelInstance.getComponentId(e);null===(i=this._configuratorUiCallbacks)||void 0===i||i.onUserInitiatedDockDone(o,r,s,t,a)}Editor3dAddBakedMesh(e,t,n,r,a,i,o,s){this._configuratorKernelCallbackListener.forEach(l=>l.Editor3dAddBakedMesh(e,t,n,r,a,i,o,s))}Editor3dAddNamedMesh(e,t,n,r,a,i,o,s,l,h,d,c){this._configuratorKernelCallbackListener.forEach(u=>u.Editor3dAddNamedMesh(e,t,n,r,a,i,o,s,l,h,d,c))}Editor3ChangedNamedMesh(e,t,n,r,a,i,o){this._configuratorKernelCallbackListener.forEach(s=>s.Editor3ChangedNamedMesh(e,t,n,r,a,i,o))}Editor3dRemoveNamedMesh(e,t){this._configuratorKernelCallbackListener.forEach(n=>n.Editor3dRemoveNamedMesh(e,t))}Editor3dBeginConstruction(e,t){this._configuratorKernelCallbackListener.forEach(n=>n.Editor3dBeginConstruction(e,t))}Editor3dEndConstruction(e){this._configuratorKernelCallbackListener.forEach(t=>t.Editor3dEndConstruction(e))}Editor3dComponentCreated(e,t,n,r){this._configuratorKernelCallbackListener.forEach(a=>a.Editor3dComponentCreated(e,t,n,r,!1))}Editor3dComponentDocked(e,t,n,r){this._configuratorKernelCallbackListener.forEach(a=>a.Editor3dComponentDocked(e,t,n,r))}Editor3dGeometryReady(e){this._configuratorKernelCallbackListener.forEach(t=>t.Editor3dGeometryReady(e)),this.requestPlanComponentConstruction(e),this._configuratorUiCallbacks.onGeometryReady(e)}Editor3dGeometryNotReady(e){this._configuratorKernelCallbackListener.forEach(t=>t.Editor3dGeometryNotReady(e)),this._configuratorUiCallbacks.onGeometryNotReady(e)}componentDeleted(e){this._configuratorKernelCallbackListener.forEach(t=>t.componentDeleted(e))}componentMetaUpdated(e){let t=this._kernelInstance.getComponent(e);this._configuratorKernelCallbackListener.forEach(e=>e.componentMetaUpdated(t))}sceneCleared(){this._configuratorKernelCallbackListener.forEach(e=>e.sceneCleared())}requestMaterialsInGroup(e){(Array.isArray(e)?e:[e]).forEach(e=>{-1===this._cachedGroupIds.indexOf(e)&&this._cachedGroupIds.push(e)}),this._waitingForGroups||(this._waitingForGroups=!0,AsyncHelper.waitFor(4).then(()=>{this._rapiAccess.getMaterialsByGroup(this._cachedGroupIds).then(e=>{let t=[];e.forEach(e=>{const n=[];e.materials.forEach(e=>n.push(e.id));const r=e.legacyId||e.id;e.legacyId||console.warn("Material group has no legacy id, please check content why this is the case"),t.push({group:r,materials:n})}),t.length&&this._kernelInstance.setMaterialsInGroup(t),this._cachedGroupIds=[]},e=>{var t;console.error(e),null===(t=this._configuratorUiCallbacks)||void 0===t||t.onError(new Error(`Material group with ids "${this._cachedGroupIds.join(",")}" can not be loaded. "${e}"`)),this._cachedGroupIds=[]})}))}requestPlanComponentConstruction(e,t=!0){t?this._kernelInstance.requestDeltaPlanComponentConstruction(e):this._kernelInstance.requestPlanComponentConstruction(e)}addConfiguratorListener(e){this._configuratorKernelCallbackListener.add(e)}removeConfiguratorListener(e){this._configuratorKernelCallbackListener.delete(e)}cleanUpCallbacks(){"function"==typeof this._kernelContainer.unregisterConfiguratorCallback&&this._kernelContainer.unregisterConfiguratorCallback(this)}async requestMaterialProperties(e){let t=Array.isArray(e)?e:[e];if(this._requestedMaterialIds.push(...t),await wait(0),!this._requestedMaterialIds.length)return;const n=[...this._requestedMaterialIds];this._requestedMaterialIds=[];const r=await this._rapiAccess.getMaterials(n);let a=[];r.forEach(e=>{const t=new this._kernelContainer.StringStringMap,n=e.properties||{};for(let e in n)n.hasOwnProperty(e)&&t.set(e,n[e]);t.size()&&a.push({id:e.id,properties:t})}),a.length&&this._kernelInstance.setMaterialProperties(a)}registerCallbacks(){this._kernelContainer.registerConfiguratorCallback(this)}pause(){this.cleanUpCallbacks()}resume(){this.cleanUpCallbacks(),this.registerCallbacks()}destroy(){}_handleCortoMesh(e,t,n){var r;try{this._kernelInstance.addMeshCorto(t,n,new Uint8Array(e))}catch(e){console.error(e),null===(r=this._configuratorUiCallbacks)||void 0===r||r.onMemoryCorruption()}}_handleInvalidMesh(e){try{this._kernelInstance.setExternalMeshInvalid(e)}catch(e){console.error(e)}}calcPartsPriceSum(e){return this._calcPrice(e)}_calcPrice(e){const t=new Map;e||(e=this._kernelInstance.getFullPartList());const n=!!e&&!!e.fullList&&!!e.fullList.length;if(this._initData.useRoomlePrice&&n){const n=e.fullList[0].currencySymbol,r=e.fullList.reduce((e,t)=>e+(t.count?t.count:0)*(t.price?t.price:0),0),a=roundWithPrecision(r,2);return this._configuratorUiCallbacks.onUpdatePrice(n,a),Promise.resolve({totalSum:a,partMap:t})}if(this._initData.usePriceService&&n){const n=e.fullList.reduce((e,n)=>{const r=kernelPartToPriceId(n);return r&&(t.set(r,n),e.push(r)),e},[]);return new Promise((r,a)=>{this._rapiAccess.getPrices(n).then(n=>{if(!n.length)return a(new Error("prices are empty"));let i=0;const o=objectArrayToMap(n,"priceId");for(const t of e.fullList){const e=kernelPartToPriceId(t);if(!o.has(e)){console.warn("PriceId: "+e+" has no corresponding kernel-part");continue}const{price:n,currencySymbol:r}=o.get(e);t.price=n,t.currencySymbol=r,i+=n*t.count}return i=roundWithPrecision(i,2),this._configuratorUiCallbacks.onUpdatePrice(n[0].currencySymbol,i),r({totalSum:i,partMap:t})},e=>{console.error(e),a(e)})})}return Promise.resolve({totalSum:0,partMap:t})}async addUiDataAndPriceToPartList(e,t){const{fullList:n,originPart:r}=e,a=e.perMainComponent;let i;this.addUiDataToPartList(n,t);try{const t=await this._calcPrice(e);i=t.partMap}catch(e){console.error(e),i=new Map}const o=this._initData.usePriceService||this._initData.useRoomlePrice,s=e=>{o||(e.price=null,e.currencySymbol=null);const t=kernelPartToPriceId(e);if(!t)return;if(!i.has(t))return;const{price:n,currencySymbol:r}=i.get(t);"number"==typeof n&&(e.price=n,e.currencySymbol=r)};return n.forEach(s),a.forEach(({fullList:e,perMainComponent:n})=>{n.length>0&&console.error("Not implemented! perMainComponent is deeper than one level"),this.addUiDataToPartList(e,t),e.forEach(s)}),{fullList:n,perMainComponent:a,originPart:r}}addUiDataToPartList(e,t){const n=[];return e.forEach(e=>{const t=this._rapiAccess.peekComponent(e.componentId);!t||e.labelIsCalculated&&e.label||(e.label=t.label),e.parameters.forEach(e=>{if(this._unitFormatter.formatPartListParameter(e),isMaterial(e)){const t=this._rapiAccess.peekMaterial(e.value);t?e.valueLabel=t.label||t.name||e.value:-1===n.indexOf(e.value)&&n.push(e.value)}})}),n.length&&this._rapiAccess.getMaterials(n).then(e=>{const n=this._lastPartListHash!==t;Array.isArray(e)&&e.length&&n&&(this._lastPartListHash=t,this.requestPartListAndUpdatePricesOfParts())}),e}async requestPartListAndUpdatePricesOfParts(e,t){let n=this._kernelInstance.getFullPartList();e||(e=this._kernelInstance.getHashOfConfiguration(this._configuratorContext.planObjectId));const r=await this.addUiDataAndPriceToPartList(n,e);this._configuratorUiCallbacks.onPartListUpdate(r,btoa(e))}}__decorate([inject],CommonKernelAccess.prototype,"_rapiAccess",void 0),__decorate([inject],CommonKernelAccess.prototype,"_scriptLoader",void 0),__decorate([inject],CommonKernelAccess.prototype,"_kernelIo",void 0),__decorate([inject],CommonKernelAccess.prototype,"_dataSyncer",void 0),__decorate([inject],CommonKernelAccess.prototype,"_lifeCycleManager",void 0),__decorate([inject],CommonKernelAccess.prototype,"_configuratorUiCallbacks",void 0),__decorate([inject],CommonKernelAccess.prototype,"_globalCallback",void 0),__decorate([inject],CommonKernelAccess.prototype,"_initData",void 0),__decorate([inject],CommonKernelAccess.prototype,"_unitFormatter",void 0),__decorate([inject],CommonKernelAccess.prototype,"_configuratorContext",void 0),__decorate([inject],CommonKernelAccess.prototype,"_globalInitData",void 0);const{APP}=Env,{RAPI}=APP,headers=RAPI.headers,itemHeaders=RAPI.itemHeaders,TOKEN_IDENTIFIER=headers.token,isPlanSnapshotId=e=>e.startsWith("ps_"),LEGACY_GROUP_INDICATOR=uuid();let RAPI_MATERIAL_GROUP_CACHE=new Map,ITEM_ADDITIONAL_CONTENT_CACHE=new Map,RAPI_RELATIONS_CACHE=new Map,RAPI_CACHE=new Map,MESHES_TO_CATALOG_CACHE=new Map,RAPI_PACKAGE_CACHE=new Map,RAPI_PRELOAD_CACHE=new Map,WAITERS_FOR_URL=new Map,RAPI_ERROR_CACHE=new Map;const getCachedMaterialGroup=e=>RAPI_MATERIAL_GROUP_CACHE.get(e)||RAPI_MATERIAL_GROUP_CACHE.get(LEGACY_GROUP_INDICATOR+e),hasMaterialTags=e=>e&&e.tags&&e.tags.length,materialHasNoTagsButGroup=e=>!hasMaterialTags(e)&&e.group;class RapiAccess{constructor(e){this._itemLoaded=!1,this._currentToken=null,this._creator_=e,window.addEventListener("online",this._flushOfflineQueue.bind(this))}getPreloadForItem(e){return this._getPreload(e,!0)}getPreloadForConfiguration(e){return this._getPreload(e,!1)}_getPreload(e,t){return new Promise((n,r)=>{if(!navigator.onLine)return n();if(this._dataSyncer.getIsCatalogSynced(getCatalogIdFromItemOrConfigurationId(e)))return n();if(RAPI_PRELOAD_CACHE.get(e))return n();const a=t?"?itemId=":"?configurationId=";this._get("/preloads/components/"+a+e,"preloads/components").then(t=>{if(RAPI_PRELOAD_CACHE.get(e))return n();t.forEach(e=>{this._prepareData(e,"components")}),RAPI_PRELOAD_CACHE.set(e,!0),n()},r)})}changeUseOfHDGeometry(){const e=RAPI_CACHE.get("components");RAPI_PRELOAD_CACHE.clear(),RAPI_PACKAGE_CACHE.clear(),e&&RAPI_CACHE.delete("components")}getHSCPackage(e){return new Promise((t,n)=>{if(RAPI_PACKAGE_CACHE.get(e))return t();this._get("/catalogs/"+e+"/package","package").then(n=>{if(RAPI_PACKAGE_CACHE.get(e))return t(n);n.components.forEach(e=>{this._prepareData(e,"components")}),n.materials.forEach(e=>{this._prepareData(e,"materials"),this._prepareGroups(e)}),n.textures.forEach(e=>{this._prepareData(e,"textures")}),RAPI_PACKAGE_CACHE.set(e,!0),t(n)},n)})}getComponent(e){return this._getById(e,"components")}getConfiguration(e){return this._getById(e,"configurations")}getConfigurations(e){return this._getByIds(e,"configurations")}getItem(e){return this._getById(e,"items",{additionalHeaders:itemHeaders})}getComponents(e){return this._getByIds(e,"components")}getItems(e){return this._getByIds(e,"items",{additionalHeaders:itemHeaders})}getTag(e){return this._getById(e,"tags")}getTags(e){return this._getByIds(e,"tags")}getTexture(e){return this._getById(e,"textures")}getCatalog(e){return this._getById(e,"catalogs")}getMesh(e,t="crt",n=50){return this._getById(e,"meshes",{pathSuffix:"/data?format="+t+"&targetQuality="+n.toString()})}getMeshesOfCatalog(e){return new Promise((t,n)=>{const r=MESHES_TO_CATALOG_CACHE.get(e);r?t(r):this._get("/meshes?catalog="+e,"catalogMeshes").then(n=>{MESHES_TO_CATALOG_CACHE.set(e,n),t(n)},n)})}getTexturesOf(e){return this._getRelationData(e,{rapiPath:"textures"})}getItemsOf(e){return this._getRelationData(e,{rapiPath:"items"})}async getMaterialsOf(e){return(await this._getRelationData(e,{rapiPath:"materials"},{embed:["textures"]})).filter(e=>e.active)}getComponentsOf(e){return this._getRelationData(e,{rapiPath:"components"})}getAdditionalContentsOfItems(e){const t=[],n=[];return e.forEach(e=>{const r=ITEM_ADDITIONAL_CONTENT_CACHE.get(e.id.toString());r?n.push(...r):t.push(e.id.toString())}),new Promise((e,r)=>{0!==t.length?this._getByIdsPackets(t,"itemAdditionalContents",{filterKey:"itemIds"}).then(t=>{t.forEach(e=>{let t=ITEM_ADDITIONAL_CONTENT_CACHE.get(e.itemId);t||(t=[]);for(let n=0,r=t.length;n<r;n++)if(t[n].id===e.id)return;t.push(e),ITEM_ADDITIONAL_CONTENT_CACHE.set(e.itemId,t)}),e([...t,...n])},r):e(n)})}getMaterial(e){return this._getById(e,"materials",{embed:["textures"]})}peekMaterial(e){return this._peekData(e,"materials")}peekComponent(e){return this._peekData(e,"components")}peekItem(e){return this._peekData(e,"items")}peekConfiguration(e){return this._peekData(e,"configurations")}async getMaterials(e){return(await this._getByIds(e,"materials",{embed:["textures"]})).filter(e=>e.active)}getPlan(e){return this._getById(e,"plans")}getPlanSnapshot(e){return this._getById(e,"planSnapshots")}static clearCaches(){RAPI_MATERIAL_GROUP_CACHE=new Map,RAPI_RELATIONS_CACHE=new Map,RAPI_CACHE=new Map,RAPI_PACKAGE_CACHE=new Map,RAPI_PRELOAD_CACHE=new Map,WAITERS_FOR_URL=new Map,ITEM_ADDITIONAL_CONTENT_CACHE=new Map}cleanUp(){RapiAccess.clearCaches()}getMaterialsByGroup(e){const t=e.slice(),n=[];let r=t.length;for(let e=0;e<r;e++){const a=getCachedMaterialGroup(t[e]);if(a){const i=a.length;for(let e=0;e<i;e++){const t=this._getCache("materials").get(a[e]);n.push(t)}t.splice(e,1),r--,e--}}return new Promise((e,r)=>{0!==t.length&&navigator.onLine?this._getByIdsPackets(t,"materials",{filterKey:"groups",embed:["textures"]}).then(t=>{e(this.combineMaterialsToGroups([...t,...n]))},r):e(this.combineMaterialsToGroups(n))})}_flushOfflineQueue(){return new Promise((e,t)=>{const n=this._localStorage.getItem("hsc_configurations_offline_queue_v1"),r=[];for(let e in n)if(n.hasOwnProperty(e)){const t=n[e];r.push(new Promise((e,n)=>{this.saveConfiguration(t.data).then(r=>{const a=[];t.perspectiveImage&&!r.perspectiveImage&&a.push(this.savePerspectiveImage(r,t.perspectiveImage)),t.topImage&&!r.topImage&&a.push(this.savePerspectiveImage(r,t.topImage)),Promise.all(a).then(e,n)},n)}))}Promise.all(r).then(()=>{this._localStorage.setItem("hsc_configurations_offline_queue_v1",{}),e()},t)})}_setQueuedConfiguration(e,t={}){const n=e.configurationHash,{perspectiveImage:r,topImage:a}=t;let i=this._localStorage.getItem("hsc_configurations_offline_queue_v1")||{},o=i[n]||{};o.data=e,o.perspectiveImage=r,o.topImage=a,i[n]=o,this._localStorage.setItem("hsc_configurations_offline_queue_v1",i)}async saveConfiguration(e){return navigator.onLine?await this._save("/configurations",{configuration:e},"configurations",{accept:"application/json",contentType:"application/json; charset=UTF-8"}):(e.perspectiveImage=null,e.topImage=null,this._setQueuedConfiguration(e),this._markConfigurationAsLocally(e),Promise.resolve(e))}saveTopImage(e,t){return this._saveConfigurationImage(e,t,"topImage")}savePerspectiveImage(e,t){return this._saveConfigurationImage(e,t,"perspectiveImage")}savePlanSnapshotTopImage(e,t){return this._savePlanSnapshotImage(e,t,"topImage")}savePlanSnapshotPerspectiveImage(e,t){return this._savePlanSnapshotImage(e,t,"perspectiveImage")}getShortUrl(e,t){return new Promise((n,r)=>this._fetchJson("/shortIds","shortIds",{method:"POST",resolve:n,reject:r,data:JSON.stringify({shortId:{type:t,referencedId:e}}),accept:"application/json",contentType:"application/json; charset=UTF-8"}))}_peekData(e,t){const n=RAPI_CACHE.get(t);return n&&n.get(e)||null}_saveConfigurationImage(e,t,n){if(!navigator.onLine){const r={};return r[n]=t,this._setQueuedConfiguration(e,r),this._markConfigurationAsLocally(e),e[n]=t.image,Promise.resolve(e)}const r=this._formDataUtil.create(t.image,e.configurationHash,IMAGE_FORMATS.PNG,n);return this._save("/configurations/"+e.id+"/"+n,r,"configurations",{accept:"application/json"})}_savePlanSnapshotImage(e,t,n){const r=this._formDataUtil.create(t.image,e.id,IMAGE_FORMATS.PNG,"file");return r.append("type",n),this._save("/planSnapshots/"+e.id,r,"planSnapshots",{accept:"application/json",method:"PUT"})}_markConfigurationAsLocally(e){e.isLocally=!0,e.id=e.configurationHash}_save(e,t,n,r={}){const a=t instanceof FormData?t:JSON.stringify(t);return new Promise((t,i)=>{const o={method:r.method||"POST",data:a,resolve:t,reject:i};r.contentType&&(o.contentType=r.contentType),r.accept&&(o.accept=r.accept),this._fetchJson(e,n,o)})}combineMaterialsToGroups(e){return new Promise((t,n)=>{const r=new Map,a={id:null,label:null,materials:[]},i=[];for(let t=0,n=e.length;t<n;t++){const n=e[t],o=n.tags&&n.tags.length?n.tags.map(e=>({isTag:!0,id:e})):[];n.group&&o.push({isTag:!1,id:LEGACY_GROUP_INDICATOR+n.group,legacyId:n.group}),o.length||o.push({isTag:!1,id:null}),n.tags&&n.tags.length&&n.tags.forEach(e=>-1===i.indexOf(e)?i.push(e):null),o.forEach(({isTag:e,id:t,legacyId:i})=>{const o=n.id;let s=t?getCachedMaterialGroup(t):[];s||(RAPI_MATERIAL_GROUP_CACHE.set(t,[]),s=getCachedMaterialGroup(t)),-1===s.indexOf(o.toString())&&s.push(o.toString());const l=hasMaterialTags(n),h=l&&e,d=materialHasNoTagsButGroup(n);if(h||d&&!e||!l&&!d&&!t){let e=t?r.get(t):a;e||(r.set(t,{id:t,label:n.groupLabel,legacyId:i,materials:[]}),e=r.get(t)),e.materials.push(n)}})}const o=a.materials.length?[a]:[];this.getTags(i).then(e=>{const n=e.reduce((e,t)=>(e[t.id]=t,e),{});return r.forEach((e,t)=>{o.push({id:t,label:n[t]?n[t].label:e.label,materials:e.materials,legacyId:e.legacyId,sort:n[t]?n[t].sort:void 0})}),t(o)},n)})}_getByIds(e,t,n={}){const r=this._getCache(t),a=this._getErrorCache(t),i=[],o=[...new Set(e)];let s=o.length;if(r&&r.size){const e=(new Date).getTime();for(let t=0;t<s;t++){const n=o[t],l=r.get(n),h=a.get(n);let d=!1;null!=l?(i.push(l),d=!0):d=void 0!==h&&(e-h.timestamp<6e4||!1===navigator.onLine),d&&(o.splice(t,1),s--,t--)}}return new Promise((e,r)=>{0!==o.length&&navigator.onLine?this._getByIdsPackets(o,t,n).then(t=>{e([...t,...i])},r):e(i)})}_getByIdsPackets(e,t,n={}){const r=n.filterKey||"ids";let a,i="/"+t+"/",o="?",s=[];const l=e.length;if(!l)return new Promise(e=>e([]));let h=!0,d=[];for(a=0;a<l;a++){h=!1;const n=e[a],l=o+r+"[]="+n,c=l.length+i.length;d.push(n),o="&",c<=1500?i+=l:(c>1500&&(d.pop(),a--),s.push({url:i,ids:d}),h=!0,i="/"+t+"/",o="?",d=[])}h||s.push({url:i,ids:d});const c=[];return s.forEach(e=>c.push(this._getByIdsSingle(e.ids,e.url,t,n))),new Promise((e,t)=>{Promise.all(c).then(t=>{const n=[];t.length&&t.forEach(e=>n.push(...e)),e(n)},t)})}_getByIdsSingle(e,t,n,r={}){return new Promise((a,i)=>{this._get(t,n,r).then(t=>{for(let n=0,a=t.length;n<a;n++){const a=r&&r.cacheKey?t[n][r.cacheKey]:t[n].id,i=e.indexOf(a.toString());-1!==i&&e.splice(i,1)}const i=e.length;if(i){const t=this._getCache(n),r=this._getErrorCache(n),a=(new Date).getTime();for(let n=0;n<i;n++)r.set(e[n],{code:0,timestamp:a}),t.delete(e[n]);this._errorHandler.dispatch(2,[n,e.map(e=>'"'+e+'"').join(",")])}a(t)},i)})}_getById(e,t,n={}){if(!e||""===e||"string"!=typeof e)return console.error("no id passed to _getById"),Promise.reject(new Error("no id passed to _getById"));const r=this._getCache(t).get(e);if(r)return new Promise(e=>e(r));if(!navigator.onLine)return Promise.reject("Nothing cached but tried to fetch in offline mode");const a={...n,id:e},i=n.pathSuffix||"";return this._get("/"+t+"/"+e+i,t,a)}_get(e,t,n={}){const r=AppContext.useHDGeometry?"includeGeometryHD=true":"";let a=-1===e.indexOf("?")?"?":"&";return""!==r&&(e+=a+r),n.embed&&Array.isArray(n.embed)&&n.embed.forEach(t=>{e+=a+"embed"+(t[0].toUpperCase()+t.substr(1))+"=true",a="&"}),new Promise((r,a)=>{const i=WAITERS_FOR_URL.get(e);Array.isArray(i)&&i.length>0?i.push({resolve:r,reject:a}):(WAITERS_FOR_URL.set(e,[{resolve:r,reject:a}]),this._fetchJson(e,t,n))})}_fetchJson(e,t,n={}){this._fetch(e,n).then(handleJsonResponse.bind(this)).then(this._handleJson(e,t,n).bind(this)).catch(this._handleError(e,n).bind(this))}async _fetch(e,t){const n={method:t.method?t.method:"GET",headers:this._createHeaders(t),mode:"cors",cache:"default"};t.data&&(n.body=t.data);let r=RAPI.server;const a=this._globalInitData.overrideRapi;a&&(r="live"===a?RAPI.liveServer:RAPI.testServer),(this._globalInitData.customApiUrl||""===this._globalInitData.customApiUrl)&&(r=this._globalInitData.customApiUrl);const i=new Request(r+e,n);this._globalCallback.onNetworkRequest(e,n,t);const o=await this._globalCallback.onCheckExternalCache(e,n);return o?{headers:{get:()=>"application/json"},json:()=>Promise.resolve(o)}:this._networkLayer.fetch(i,{},{checkResponse:e=>this._globalCallback.onValidateNetworkResponse("rapi-access",e)})}_createHeaders(e={}){const t={...headers};this._globalInitData.overrideTenant&&(t.currentTenant=this._globalInitData.overrideTenant),this._globalInitData.overrideCountry&&(t.country=this._globalInitData.overrideCountry);const n=this._globalInitData.locale||"en";t.language=n,t.locale=n;const{contentType:r,accept:a,additionalHeaders:i,data:o}=e;if(r&&(t["content-type"]=e.contentType),a&&(t.accept=e.accept),i)for(let e in i)i.hasOwnProperty(e)&&(t[e]=i[e]);this._globalInitData.configuratorId&&(t.configurator=this._globalInitData.configuratorId);const s=this._currentToken||TOKEN_IDENTIFIER;t.token="03-"+window.btoa((new Date).toISOString()+";"+s+";"+headers.apiKey);const l=new Headers(t);return o instanceof FormData&&l.delete("content-type"),l}_handleJson(e,t,n={}){return r=>{let a=null,i=null;"number"==typeof r&&(a=r);for(let e in r)"meta"!==e&&r.hasOwnProperty(e)&&(a=r[e],i=e);if("error"===i)return this._handleError(e,n)(new Error(JSON.stringify(a)));if(!a)throw new TypeError("RAPI returned empty JSON");if(Array.isArray(a))for(let e=0,r=a.length;e<r;e++)this._prepareData(a[e],t,n),this._prepareEmbeddedData(a[e],t,n);else this._prepareData(a,t,n),this._prepareEmbeddedData(a,t,n);n.resolve?n.resolve(a):this._notifyWaiters(e,null,a)}}_prepareEmbeddedData(e,t,n={}){n.embed&&Array.isArray(n.embed)&&n.embed.forEach(r=>{const a=e[r.slice(0,-1)+"Objects"];if(Array.isArray(a)){for(let e=0,t=a.length;e<t;e++)this._prepareData(a[e],r,n);this._prepareRelationalData(t,r,e.id,a)}else a&&(this._prepareData(a,r,n),this._prepareRelationalData(t,r,e.id,[a]))})}_getCache(e){return this._getCacheFrom(e,RAPI_CACHE)}_getErrorCache(e){return this._getCacheFrom(e,RAPI_ERROR_CACHE)}_getCacheFrom(e,t){let n=t.get(e);return n||(t.set(e,new Map),n=t.get(e)),n}_setCache(e,t,n){n.set(e.toString(),t)}_prepareData(e,t,n=null){let r=this._getCache(t);const a=n&&n.cacheKey?e[n.cacheKey]:e.id;if(a||n&&n.id||"tenants/me"===t)if("tenants/me"!==t){{const t=a||n.id;this._setCache(t,e,r)}e.__rapi_path__=t}else this._setCache("0",e,r);else"shortIds"!==t&&console.error("Can not cache because there is no ID!")}_getRelationsCacheFor(e,t,n){let r=RAPI_RELATIONS_CACHE.get(t);if(!r){const a=new Map,i=new Map;i.set(n,void 0),a.set(e,i),RAPI_RELATIONS_CACHE.set(t,a),r=RAPI_RELATIONS_CACHE.get(t)}let a=r.get(e);if(!a){const t=new Map;t.set(n,void 0),r.set(e,t),a=r.get(e)}return a.get(n)}_prepareGroups(e){const t=e.group,n=e.id;let r=getCachedMaterialGroup(t);r||(RAPI_MATERIAL_GROUP_CACHE.set(t,[]),r=getCachedMaterialGroup(t)),-1===r.indexOf(n.toString())&&r.push(n.toString())}_handleError(e,t={}){return n=>{navigator.onLine?(n.rmlErrorCode=1,n.message='Failed to load "'+e+'" because of "'+n.message+'"',this._errorHandler.dispatch(1,[n])):(n.rmlErrorCode=0,n.message='Failed to load "'+e+'" because of "'+n.message+'"',this._errorHandler.dispatch(0,[n])),t.reject?t.reject(n):this._notifyWaiters(e,n,null)}}_getRelationData(e,t,n={}){const r=e.id;if(!r)return Promise.resolve([]);const a=e.__rapi_path__,i=t.rapiPath;let o=this._getCache(i),s=this._getRelationsCacheFor(r.toString(),a,i),l=[];return s?(s.forEach(e=>l.push(o.get(e))),new Promise(e=>e(l))):navigator.onLine?new Promise((e,t)=>{this._get("/"+a+"/"+r+"/"+i,i,n).then(t=>{this._prepareRelationalData(a,i,r,t),e(t)},t)}):Promise.resolve([])}_prepareRelationalData(e,t,n,r){RAPI_RELATIONS_CACHE.has(e)||RAPI_RELATIONS_CACHE.set(e,new Map);let a=RAPI_RELATIONS_CACHE.get(e);const i=n.toString();a.has(i)||a.set(i,new Map);let o=a.get(i),s=this._getCache(t),l=[];for(let e=0,t=r.length;e<t;e++){const t=r[e],n=t.id.toString();l.push(n),s.set(n,t)}o.set(t,l)}_notifyWaiters(e,t,n){const r=WAITERS_FOR_URL.get(e);if(r&&r.length){for(let e=0,a=r.length;e<a;e++)t?r[e].reject(t):r[e].resolve(n);WAITERS_FOR_URL.delete(e)}}_tenantMe(){return new Promise((e,t)=>{const n=this._getCache("tenants/me"),r=this._globalInitData.overrideTenant?this._globalInitData.overrideTenant:n.get("0");if(r)return e(r);this._fetchJson("/tenants/me","tenants/me",{resolve:t=>e(t),reject:t})})}async getTenant(e){return e||(e=await this._tenantMe()),this._getById(e.toString(),"tenants")}getCurrentSkin(){return this._tenantMe().then(e=>this._getById(e.toString(),"tenants").then(e=>this._getById(e.skin.toString(),"skins")))}getPrices(e){return this._getByIds(e,"prices",{filterKey:"priceIds",cacheKey:"priceId"})}async getConfiguratorSettings(e){const t=await this._getById(e,"configurators");return t.allowedHosts||(t.allowedHosts=[]),t.allowedHosts&&!Array.isArray(t.allowedHosts)&&(t.allowedHosts=t.allowedHosts.split(" ")),t}sendUserAction(e){return this._save("/userActions",{userAction:e},"userActions",{accept:"application/json",contentType:"application/json; charset=UTF-8"})}_share(e,t,n,r){const a="/"+r+"/"+e+"/shares",i=new FormData;return i.append("email",t),i.append("type",n.toString()),new Promise((e,t)=>{const n={method:"POST",data:i,resolve:e,reject:t,accept:"application/json",contentType:"application/json; charset=UTF-8"};this._fetch(a,n).then(n.resolve,n.reject)})}shareConfiguration(e,t,n){return this._share(e,t,n,"configurations")}sharePlanSnapshot(e,t,n){return this._share(e,t,n,"planSnapshots")}export3D(e,t,n,r={}){const a="/"+(isPlanSnapshotId(e)?"planSnapshots":"configurations")+"/"+e+"/3d-exports",i={formats:[{file_format:n,pack_external_data:!0,...r}]},o=JSON.stringify(i),s=new FormData;return s.append("email",t),s.append("settings",o),new Promise((e,t)=>{const n={method:"POST",data:s,resolve:e,reject:t};this._fetch(a,n).then(n.resolve,n.reject)})}async trackView(e){if(this._itemLoaded||(t=(()=>{var e;const t=(()=>{if(window.__RML__ENV__&&window.__RML__ENV__.skipIframeCheck)return!1;try{return window.self!==window.top}catch(e){return!0}})();let n=null===(e=null===window||void 0===window?void 0:window.location)||void 0===e?void 0:e.href;if(!n)return null;if(t){if(!document.referrer)return null;n=document.referrer}const{hostname:r}=new URL(n);return r})())&&(NAMES_FOR_LOCALHOST.includes(t)||t.endsWith("gitlab.io")||t.endsWith("gitlab.com")||t.endsWith("codesandbox.io")||t.endsWith("stackblitz.com")||/^(admin.*.roomle.com)$/.test(t)))return;var t;const{configuratorId:n}=this._globalInitData,r={module:3,action:1,actionId:e,actionLabel:n};await this.sendUserAction(r),this._itemLoaded=!0}signinUser(e,t){return new Promise((n,r)=>{const a={method:"POST",accept:"application/json",contentType:"application/json; charset=UTF-8",data:JSON.stringify({identification:e,passwordMD5:t}),cacheKey:"token",resolve:n,reject:r};this._fetchJson("/auth/signin","auth",a)})}async signoutUser(e){const t=this._currentToken;t!==e&&this.setCurrentToken(e),await this._fetch("/auth/signout",{}),t&&t!==e?this.setCurrentToken(t):this.removeCurrentToken()}async savePlan(e){const t=e.id?"/plans/"+e.id:"/plans";return this._save(t,{plan:e},"plans",{method:e.id?"PUT":"POST",accept:"application/json",contentType:"application/json; charset=UTF-8"})}async savePlanSnapshot(e){return this._save("/planSnapshots",{planSnapshot:e},"planSnapshots",{accept:"application/json",contentType:"application/json; charset=UTF-8"})}setCurrentToken(e){this._currentToken=e}removeCurrentToken(){this._currentToken=null}createNewPlan(){return{name:"",description:"",changeDate:(new Date).toISOString(),created:(new Date).toISOString(),draftId:null,thumbnail:"data:image/png;base64,missing",planObjects:null,active:!0,open:0,planDirectory:0,changed:0,version:2,floorLevel:0,visibility:9,user:null,tenant:null,assets:[],parent:null,setting:null}}}__decorate([inject],RapiAccess.prototype,"_formDataUtil",void 0),__decorate([inject],RapiAccess.prototype,"_errorHandler",void 0),__decorate([inject],RapiAccess.prototype,"_dataSyncer",void 0),__decorate([inject],RapiAccess.prototype,"_networkLayer",void 0),__decorate([inject],RapiAccess.prototype,"_localStorage",void 0),__decorate([inject],RapiAccess.prototype,"_globalInitData",void 0),__decorate([inject],RapiAccess.prototype,"_globalCallback",void 0);const PULSE_DURATION=1500,PULSE_LOOPS=5;function RoomleComponentFactoryInitializer(){class e extends Object3D{static _generateOutline(e,t){let n=new LineSegments(new EdgesGeometry(e),new LineDashedMaterial({color:"#000000",dashSize:.03,gapSize:.01,linewidth:1}));return n.translateOnAxis(t,1),n.userData.ignoreComponentRaycast=!0,n}static cloneDockLine(e,t){let n=new LineSegments(e.geometry,e.material);return n.translateOnAxis(t.getCenter(new Vector3),1),n.name="dockline",n.layers.set(5),n.userData.ignoreComponentRaycast=!0,n}_setValues(e,t,n,r){e&&(this.runtimeId=e,this.name=e.toString()),t&&(this.roomlePosition=Object.assign({},t)),n&&(this.roomleRotation=Object.assign({},n)),r&&(this.parentObjectId=r)}constructor(e,t,n,r){super(),this._selected=!1,this.geometryChanged=!0,this.meshes=[],this.castShadow=!1,this.receiveShadow=!0,this._setValues(e,t,n,r)}get loadingMesh(){return this._loadingMesh}get boundingBoxMesh(){return this._boundingBoxMesh}get boundingBox(){return this._boundingBox}set roomlePosition(e){this._roomlePosition=e,e&&this.position.set(e.x/1e3,e.z/1e3,e.y/-1e3)}get roomlePosition(){return this._roomlePosition}set roomleRotation(e){this._roomleRotation=e,e&&this.rotation.set(e.x,e.z,-e.y)}get roomleRotation(){return this._roomleRotation}replaceMeshes(e){this.removeAllMeshes(),e.forEach(e=>{this.addMesh(new Mesh(e.geometry,e.material))})}addMesh(e,t){e.renderOrder=2,e.userData.meshType=0,t&&e.applyMatrix4(convertToThreeMatrix(t)),this.add(e),this.meshes.push(e)}getMeshById(e){return this.meshes.find(t=>t.userData.meshId===e)}removeMeshById(e){const t=this.getMeshById(e);t?this.removeMesh(t):console.warn("Could not remove mesh with id "+e,this.runtimeId,this.meshes)}removeMesh(e){const t=this.meshes.indexOf(e);this.remove(e),disposeMesh(e),t<0||this.meshes.splice(t,1)}removeAllMeshes(e=!0){this.meshes.forEach(t=>{this.remove(t),e&&disposeMesh(t)}),this.meshes=[],this._removeLoadingMesh(),this.remove(this._boundingBoxMesh),disposeMesh(this._boundingBoxMesh),this._boundingBoxMesh=null}_hideAllMeshes(){this.meshes.forEach(e=>e.visible=!1)}_showAllMeshes(){this.meshes.forEach(e=>e.visible=!0)}select(){this._selected=!0}loading(){if(!this._kernelBoundingBox)return void console.warn("Bounding box (box for measurements) for component "+this.runtimeId+" not set, can not show external mesh loading box!");this._removeLoadingMesh(),this._hideAllMeshes();const{x:e,y:t,z:n}=this._kernelBoundingBox.getSize(new Vector3);let r=new BoxGeometry(e,t,n);this._loadingMesh=new Mesh(r,MaterialCreator.createMeshStandardMaterial({transparent:!0,opacity:1,color:new Color$1("#DDDDDD")})),this._loadingMesh.name="loading mesh",this._loadingMesh.receiveShadow=!1,this._loadingMesh.castShadow=!1,this._loadingMesh.layers.set(5),this._loadingMesh.translateOnAxis(this._kernelBoundingBox.getCenter(new Vector3),1),this._loadingMesh.renderOrder=3,this.add(this._loadingMesh)}_removeLoadingMesh(){this._loadingMesh&&(this.remove(this._loadingMesh),disposeMesh(this._loadingMesh),this._loadingMesh=null)}loadingFinished(){this._removeLoadingMesh(),this._showAllMeshes()}deselect(){this._selected=!1}hoverOn(){setCursor("pointer")}hoverOff(){setCursor("default")}removeFromParent(){return this.parent&&(this.parent.remove(this),this.removeAllMeshes()),this}computeBoundingBox(t,n=!1){if(this._boundingBoxMesh&&this.remove(this._boundingBoxMesh),!n&&t&&0===t.size.x&&0===t.size.y&&0===t.size.z)return;let r;if(!t||n){this._boundingBox=new Box3;let e=new Vector3;this.meshes.forEach(t=>{if(t.geometry instanceof BufferGeometry){let n=t.geometry.attributes.position;if(void 0!==n)for(let r=0,a=n.count;r<a;r++)e.fromBufferAttribute(n,r).applyMatrix4(t.matrix),this._boundingBox.expandByPoint(e)}}),this._kernelBoundingBox=this._boundingBox.clone();let t=this._boundingBox.max.x-this._boundingBox.min.x,n=this._boundingBox.max.y-this._boundingBox.min.y,a=this._boundingBox.max.z-this._boundingBox.min.z;r=new BoxGeometry(t,n,a)}else{this._kernelBoundingBox=kernelBoxToThreeBox(t),this._boundingBox=this._kernelBoundingBox.clone();let{x:e,y:n,z:a}=this._boundingBox.getSize(new Vector3);r=new BoxGeometry(e,n,a)}this._boundingBoxMesh=new Mesh(r,MaterialCreator.createMeshStandardMaterial({color:"#FFFFFF",transparent:!0,opacity:0,polygonOffset:!0,polygonOffsetFactor:-1,visible:!1})),this._boundingBoxMesh.name="bounding box mesh";let a=this._boundingBox.getCenter(new Vector3);this._boundingBoxMesh.position.add(a),this._boundingBoxMesh.layers.set(5),this._boundingBoxMesh.renderOrder=3,this._boundingBoxMesh.castShadow=!1,this._boundingBoxMesh.receiveShadow=!1,this.add(this._boundingBoxMesh),this._dockline=e._generateOutline(r,a),this._dockline.name="bounding box outline",this._dockline.layers.set(5),this._selected&&this.add(this._dockline)}recursiveMeshes(){let t=this.meshes.slice();return this.children.forEach(n=>{n instanceof e&&t.push(...n.recursiveMeshes())}),t}isChild(t){let n=!1;return this.children.forEach(r=>{r instanceof e&&!n&&(n=r.runtimeId===t||r.isChild(t))}),n}getKernelPosition(e){let t=this.parent.localToWorld(this.position);return convertToKernel(e.worldToLocal(t))}}class t extends e{constructor(e,t){super(e,null,null,null),this.glbUrl=t}}class n extends e{constructor(e,t,n,r,a){super(t,n,r,a),this._stringId=null,this.receivedPointAssociation=!1,this.castShadow=!1,this.receiveShadow=!1,this._creator_=e}get stringId(){return this._stringId?this._stringId:this.runtimeId.toString()}addMesh(e,t){super.addMesh(e,t),e.material instanceof MeshStandardMaterial&&(e.material.opacity=.8,e.material.roughness=1,e.material.metalness=0,e.material.color=new Color$1(this._initData.colors.PREVIEW_DOCKING_COLOR)),e.renderOrder=1,e.castShadow=!1,e.receiveShadow=!1}startPulsating(){var e,t;if(null===(t=null===(e=this._initData)||void 0===e?void 0:e.featureFlags)||void 0===t?void 0:t.pulsePreview)for(const e of this.meshes){const t={opacity:.8},n={opacity:.3};new TWEEN.Tween(t).to(n,1500).easing(TWEEN.Easing.Sinusoidal.In).onUpdate(()=>{e.material.opacity=t.opacity}).yoyo(!0).repeat(5).start()}}hoverOn(){this.remove(this._dockline),this.meshes.forEach(({material:e})=>{e.opacity=.9,e.roughness=1,e.metalness=0,e.color=new Color$1(this._initData.colors.PREVIEW_DOCKING_COLOR)}),setCursor("pointer")}hoverOff(){this.add(this._dockline),this.meshes.forEach(({material:e})=>{e.opacity=.8,e.roughness=1,e.metalness=0,e.color=new Color$1(this._initData.colors.PREVIEW_DOCKING_COLOR)}),setCursor("default")}clonePreview(t){const r=new n(this._creator_,this.runtimeId,this.roomlePosition,this.roomleRotation,this.parentObjectId);return r._stringId=this.runtimeId+"_"+t,this.children.forEach(e=>{e instanceof Mesh&&0===e.userData.meshType&&r.meshes.push(e.clone(!0))}),r.meshes.forEach(e=>{e.material=e.material.clone(),e.geometry=e.geometry.clone(),r.add(e)}),this._dockline&&(r._dockline=e.cloneDockLine(this._dockline,this._boundingBox)),this._boundingBoxMesh&&(r._boundingBoxMesh=this._boundingBoxMesh.clone(!0)),this._boundingBox&&(r._boundingBox=this._boundingBox.clone()),r}preparePreview(){this.add(this._dockline),this.add(this._boundingBoxMesh)}}__decorate([inject],n.prototype,"_initData",void 0);class r extends n{constructor(e,t,n,r,a,i){super(e,t,n,r,a),i&&(this._stringId=this.runtimeId+"_has_additional_dock_point_copy")}set roomleLineFrom(e){this._roomleLineFrom=e,this.lineFrom=convertToTHREE(e)}get roomleLineFrom(){return this._roomleLineFrom}set roomleLineTo(e){this._roomleLineTo=e;let t=convertToTHREE(e);t.equals(this.lineFrom)&&(console.warn("lineFrom and lineTo are equal!"),t.add(new Vector3(0,.01,0))),this.lineTo=t}get roomleLineTo(){return this._roomleLineTo}set roomlePositionFrom(e){this._roomlePositionFrom=e,this.positionFrom=convertToTHREE(e)}get roomlePositionFrom(){return this._roomlePositionFrom}set roomlePositionTo(e){this._roomlePositionTo=e;let t=convertToTHREE(e);t.equals(this.positionFrom)&&(console.warn("positionFrom and positionTo are equal!"),t.add(new Vector3(0,.01,0))),this.positionTo=t}get roomlePositionTo(){return this._roomlePositionTo}addMesh(e,t){super.addMesh(e,t),e.visible=!1,e.renderOrder=3}hoverOn(){this._dockline.visible=!0,setCursor("pointer")}hoverOff(){this._dockline.visible=!1,setCursor("default")}preparePreview(){super.preparePreview(),this._dockline.visible=!1;let e=this.lineTo.clone(),t=this.lineFrom.clone();const n=(new Vector3).subVectors(e,t);let r=n.length(),a=n.normalize(),i=new ArrowHelper(a,t),o=new CylinderGeometry(.01,.01,r,16,1);this.lineMesh=new Mesh(o,MaterialCreator.createMeshStandardMaterial({color:"#DDDDDD",transparent:!0,opacity:.4})),this.lineMesh.name="line mesh";const s=(new Quaternion).setFromEuler(i.rotation);this.lineMesh.quaternion.multiply(s),this.lineMesh.renderOrder=1;let l=(new Vector3).addVectors(e,t).multiplyScalar(.5);this.lineMesh.position.copy((new Vector3).subVectors(l,this.position.clone())),this.add(this.lineMesh);let h=this._boundingBox.getCenter(new Vector3).applyEuler(this.docklineRotation),d=null,c=0,u=Math.abs(a.x),p=Math.abs(a.y),m=Math.abs(a.z);u>=p&&u>=m?(d=new Vector3(h.x,0,0),c=Math.sqrt(h.y*h.y+h.z*h.z)):p>=u&&p>=m?(d=new Vector3(0,h.y,0),c=Math.sqrt(h.x*h.x+h.z*h.z)):m>=p&&m>=u&&(d=new Vector3(0,0,h.z),c=Math.sqrt(h.y*h.y+h.x*h.x)),c=c>0?c:.01;let g=(new Vector3).subVectors(this.positionTo.clone(),this.positionFrom.clone()).length()+d.length(),_=new CylinderGeometry(1.1*c,1.1*c,g,32,1);this.boundingLineMesh=new Mesh(_,MaterialCreator.createMeshStandardMaterial({color:"#ffffff",transparent:!0,opacity:0})),this.boundingLineMesh.name="bounding line mesh",this.boundingLineMesh.userData.ignoreComponentRaycast=!0,this.boundingLineMesh.layers.set(5);let f=this.positionTo.clone(),v=this.positionFrom.clone(),w=(new Vector3).subVectors(f,v).normalize(),b=new ArrowHelper(w,v);const S=(new Quaternion).setFromEuler(b.rotation);this.boundingLineMesh.quaternion.multiply(S),this.boundingLineMesh.renderOrder=3;let C=(new Vector3).addVectors(this.positionTo.clone(),this.positionFrom.clone()).multiplyScalar(.5).add(h);this.boundingLineMesh.position.copy((new Vector3).subVectors(C,this.position.clone())),this.add(this.boundingLineMesh)}clonePreviewLine(t){let n=new r(this._creator_,this.runtimeId,this.roomlePosition,this.roomleRotation,this.parentObjectId,this.receivedPointAssociation);return n._stringId=this.runtimeId+"_"+t,this.children.forEach(e=>{e instanceof Mesh&&0===e.userData.meshType&&n.meshes.push(e.clone(!0))}),n.meshes.forEach(e=>{e.material=e.material.clone(),e.geometry=e.geometry.clone(),n.add(e)}),this._dockline&&(n._dockline=e.cloneDockLine(this._dockline,this._boundingBox)),this._boundingBoxMesh&&(n._boundingBoxMesh=this._boundingBoxMesh.clone(!0)),this._boundingBox&&(n._boundingBox=this._boundingBox.clone()),n}getPositionForIntersectionPoint(e){let t=this._boundingBox.getCenter(new Vector3).applyEuler(this.docklineRotation),n=this.positionTo.clone().add(t),r=this.positionFrom.clone().add(t),a=new Line3(r,n).closestPointToPoint(e,!0,new Vector3);return(isNaN(a.x)||isNaN(a.y)||isNaN(a.z))&&a.copy(e),a.sub(t)}updatePreviewPosition(e){let t=this.getPositionForIntersectionPoint(e),n=this.parent.localToWorld(t);this._newPosition=this.worldToLocal(n);let r=this._boundingBox.getCenter(new Vector3).applyEuler(this.docklineRotation);this._dockline.position.copy((new Vector3).addVectors(this._newPosition,r)),this._dockline.rotation.copy(this.docklineRotation)}hideSelectionLine(){this._dockline.visible=!1}getKernelPosition(e){if(this._newPosition){let t=this.localToWorld(this._newPosition);return convertToKernel(e.worldToLocal(t))}return super.getKernelPosition(e)}}class a extends OrthographicCamera{constructor(e,t,n,r,a,i,o){super(e,t,n,r,a,i),o||(o={left:0,top:1,right:1,bottom:0}),this.offset=o}set offset(e){this._offset=e,this.updateProjectionMatrix()}get offset(){return this._offset}resetOffset(){this._offset={left:0,top:1,right:1,bottom:0}}updateProjectionMatrix(){this._offset?(this.projectionMatrix=this._calculateProjectionMatrix(),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()):super.updateProjectionMatrix()}_calculateProjectionMatrix(){const e=this._calculate2DPlanes();if(this._offset.left>=this._offset.right||this._offset.bottom>this._offset.top)return(new Matrix4).makeOrthographic(e.left,e.right,e.top,e.bottom,this.near,this.far);const t=this._scaleRange(e.left,e.right,this._offset.left,this._offset.right);let n=t.from,r=t.to;const a=this._scaleRange(e.bottom,e.top,this._offset.bottom,this._offset.top);let i=a.from,o=a.to;const s=(e.right-e.left)/(e.top-e.bottom),l=(r-n)/(o-i);if(l>s){const e=(i+o)/2,t=(o-i)*l/s;i=e-t/2,o=e+t/2}else{const e=(n+r)/2,t=(r-n)*s/l;n=e-t/2,r=e+t/2}return(new Matrix4).makeOrthographic(n,r,o,i,this.near,this.far)}_scaleRange(e,t,n,r){const a=(t-e)/(r-n);return{from:e-a*n,to:t+a*(1-r)}}_calculate2DPlanes(){const e=(this.right-this.left)/(2*this.zoom),t=(this.top-this.bottom)/(2*this.zoom),n=(this.right+this.left)/2,r=(this.top+this.bottom)/2;let a=n-e,i=n+e,o=r+t,s=r-t;if(null!==this.view&&this.view.enabled){const e=(this.right-this.left)/this.view.fullWidth/this.zoom,t=(this.top-this.bottom)/this.view.fullHeight/this.zoom;a+=e*this.view.offsetX,i=a+e*this.view.width,o-=t*this.view.offsetY,s=o-t*this.view.height}return{left:a,right:i,top:o,bottom:s}}}class i extends PerspectiveCamera{constructor(e,t,n,r,a){super(e,t,n,r),a||(a={left:0,top:1,right:1,bottom:0}),this.offset=a}copy(e,t){return super.copy(e,t),this._offset=e._offset,this}set offset(e){this._offset=e,this.updateProjectionMatrix()}get offset(){return this._offset}resetOffset(){this._offset={left:0,top:1,right:1,bottom:0}}_calculateProjectionMatrix(){let e,t,n,r,a=this.fov*(2*Math.PI/360)/2;n=Math.tan(a),r=-n;let i=Math.atan(this.aspect*Math.tan(a));t=Math.tan(i),e=-t;let o=this._offset.left,s=this._offset.right,l=this._offset.top,h=this._offset.bottom,d=new Vector2(s-o,l-h),c=new Vector2(o+d.x/2,h+d.y/2);if(d.x<d.y){let a=(1-c.x)/(d.x/2),i=c.x/(d.x/2);t*=a,e*=i;let o=(a+i)/2;n*=o,r*=o}else{let a=(1-c.y)/(d.y/2),i=c.y/(d.y/2);n*=a,r*=i;let o=(i+a)/2;e*=o,t*=o}e*=this.near,t*=this.near,n*=this.near,r*=this.near;let u=this.near*Math.tan(Math.PI/180*.5*this.fov)/this.zoom*2,p=this.aspect*u;return this.view&&this.view.enabled&&(e+=this.view.offsetX*p/this.view.fullWidth,n-=this.view.offsetY*u/this.view.fullHeight,t+=this.view.offsetX*p/this.view.fullWidth,r-=this.view.offsetY*u/this.view.fullHeight),(new Matrix4).makePerspective(e,t,n,r,this.near,this.far)}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){this._offset?(this.projectionMatrix=this._calculateProjectionMatrix(),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()):super.updateProjectionMatrix()}}return{create:function(t,n,r,a){return new e(t,n,r,a)},createPreview:function(e,t,r){return new n(r,e,{x:0,y:0,z:0},{x:0,y:0,z:0},t)},createStatic:function(e,n){return new t(e,n)},createPreviewLine:function(e,t){let n=new r(t,e.id,e.roomlePosition,e.roomleRotation,e.parentObjectId,e.receivedPointAssociation);return e.meshes.forEach(e=>{let t=e.clone();t.material=e.material.clone(),t.geometry=e.geometry.clone(),n.addMesh(t)}),n.computeBoundingBox(),n},isPreview:function(e){return e instanceof n},isPreviewLine:function(e){return e instanceof r},createPerspectiveCamera:function(e,t,n,r,a){return new i(e,t,n,r,a)},createOrthographicCamera:function(e,t,n,r,i,o,s){return new a(e,t,n,r,i,o,s)}}}const DEFAULT_CONVERSATION_ID=9;class ConfiguratorViewModel{constructor(e){this._mergeThreshold=3,this._componentsToMerge=new OccurrenceMap,this._mergeInProgress=!1,this._components=new Map,this._previews=new Map,this._componentNumberOfPossibleChildren=new Map,this._creator_=e,this._getKernelAccess().addConfiguratorListener(this),this._componentFactory=RoomleComponentFactoryInitializer()}get materialQueue(){return this.getMeshGenerator().materialQueue}_getKernelAccess(){return RoomleDependencyInjection.lookup("planner-kernel-access",this._creator_)}_applyMeshTransform(e,t,n,r,a){if(n){const r=e.userData.transform=convertToThreeMatrix(n);t&&(e.userData.transform=r),e.applyMatrix4(r)}this._applyMeshUVTransform(e,t,r,a)}_applyMeshUVTransform(e,t,n,r){if(6!==(null==n?void 0:n.length)||(e=>1===e[0]&&0===e[1]&&0===e[2]&&1===e[3]&&0===e[4]&&0===e[5])(n))t&&(t.uvTransform=void 0),r&&(e.geometry=r);else{const a=(e=>{const t=new Matrix4;return t.set(e[0],e[2],0,e[4],e[1],e[3],0,e[5],0,0,1,0,0,0,0,1),t})(n);t&&(t.uvTransform=a);const i=null!=r?r:e.geometry;if(i&&i.attributes.uv){const t=i.clone();t.attributes.uv.applyMatrix4(a),e.geometry=t}}}_addMeshToSubPart(e,t,n,r,a,i,o,s,l,h){const d=this._generateMesh(e,t,n,i,o,s,l,void 0,void 0,h);this._applyMeshTransform(d,null,r,a),this._subPartObject.add(d)}_addMeshToComponent(e,t,n,r,a,i,o,s,l,h,d,c){if(this._subPartGuard&&this._subPartGuard.info===e)return void this._addMeshToSubPart(e,null,r,null,null,o,s,l,h,c);const u=this.getComponent(e);if(!u)return;const p=this._componentFactory.isPreview(u),m=this._generateMesh(e,n,p?null:r,o,s,l,h,void 0,void 0,c);m.userData.meshId=t,m.userData.geometryId=n,m.userData.materialId=r,this._applyMeshTransform(m,m.userData,a,i),p&&m.layers.set(5),u&&u.addMesh(m),u.meshes.length>this._mergeThreshold&&this._componentsToMerge.set(e,u.meshes.length)}_changeMeshOfComponent(e,t,n,r,a,i,o){const s=this.getComponent(e);if(!s)return;const l=s.getMeshById(t);if(l){l.userData.geometryId!==n&&console.warn("Geometry of mesh has changed!"),l.userData.materialId=r,l.userData.materialAttributes=o;const e=l.material.clone();this._configuratorMeshGenerator.setMaterial(l,r,void 0,o).then(()=>{this._requestRenderSceneUpdateCallback&&this._requestRenderSceneUpdateCallback()}),e.opacity!==l.material.opacity&&this._requestRenderCallback&&this._requestRenderCallback(),a&&(l.position.set(0,0,0),l.scale.set(1,1,1),l.rotation.set(0,0,0));const t=this._configuratorMeshGenerator.getGeometry(n);this._applyMeshTransform(l,l.userData,a,i,t)}}_removeMeshFromComponent(e,t){const n=this.getComponent(e);n&&n.removeMeshById(t)}getComponent(e){let t=this._components.get(e);return t||(t=this._previews.get(e.toString()),t)?t:(console.warn("component not found!",e),null)}getNumberOfPossibleChildrenForComponent(e){if(this._componentNumberOfPossibleChildren.has(e))return this._componentNumberOfPossibleChildren.get(e);const t=this._getKernelAccess().kernelInstance.getPlanComponentPossibleChildren(e).length;return this._componentNumberOfPossibleChildren.set(e,t),t}tryToMergeComponents(){this._initData.moc||this._mergeInProgress||(this._mergeInProgress=!0,this._componentsToMerge.size,this._requestMergeComponents())}_requestMergeComponents(){window.requestIdleCallback(this._mergeNextComponent.bind(this))}_mergeNextComponent(){if(this._componentsToMerge.size>0){const e=this._componentsToMerge.largestValue();this._componentsToMerge.delete(e),this._mergeComponent(e),this._requestMergeComponents()}else this._mergeInProgress=!1,this._geometriesMerged&&this._geometriesMerged(),this._components.forEach(e=>{e.loadingMesh&&console.warn("component still has loading mesh: ",e.hash)})}_mergeComponent(e){const t=this._components.get(e);if(t&&!(t.meshes.length<=this._mergeThreshold))if(this._cacheHolder.componentCache.has(t.hash)){const e=this._cacheHolder.componentCache.get(t.hash).meshes;t.replaceMeshes(e)}else{const e=new Map,n=[],r=[];t.meshes.forEach(t=>{const a=t.userData.materialId;if(!a)return void console.warn("mesh has no material id set");if(!e.has(a)){const r=new Mesh(new BufferGeometry,t.material);r.userData.materialId=a,r.receiveShadow=!0,r.castShadow=!0,r.layers.set(3),this._setMaterial(r,a),n.push(r),e.set(a,r)}const i=e.get(a),o=i.geometry;t.userData.transform&&t.geometry.applyMatrix4(t.userData.transform),i.geometry=function(e,t=!1){const n=null!==e[0].index,r=new Set(Object.keys(e[0].attributes)),a=new Set(Object.keys(e[0].morphAttributes)),i={},o={},s=e[0].morphTargetsRelative,l=new BufferGeometry;let h=0;for(let d=0;d<e.length;++d){const c=e[d];let u=0;if(n!==(null!==c.index))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+d+". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."),null;for(const e in c.attributes){if(!r.has(e))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+d+'. All geometries must have compatible attributes; make sure "'+e+'" attribute exists among all geometries, or in none of them.'),null;void 0===i[e]&&(i[e]=[]),i[e].push(c.attributes[e]),u++}if(u!==r.size)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+d+". Make sure all geometries have the same number of attributes."),null;if(s!==c.morphTargetsRelative)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+d+". .morphTargetsRelative must be consistent throughout all geometries."),null;for(const e in c.morphAttributes){if(!a.has(e))return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+d+". .morphAttributes must be consistent throughout all geometries."),null;void 0===o[e]&&(o[e]=[]),o[e].push(c.morphAttributes[e])}if(t){let e;if(n)e=c.index.count;else{if(void 0===c.attributes.position)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index "+d+". The geometry must have either an index or a position attribute"),null;e=c.attributes.position.count}l.addGroup(h,e,d),h+=e}}if(n){let t=0;const n=[];for(let r=0;r<e.length;++r){const a=e[r].index;for(let e=0;e<a.count;++e)n.push(a.getX(e)+t);t+=e[r].attributes.position.count}l.setIndex(n)}for(const e in i){const t=mergeAttributes(i[e]);if(!t)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+e+" attribute."),null;l.setAttribute(e,t)}for(const e in o){const t=o[e][0].length;if(0===t)break;l.morphAttributes=l.morphAttributes||{},l.morphAttributes[e]=[];for(let n=0;n<t;++n){const t=[];for(let r=0;r<o[e].length;++r)t.push(o[e][r][n]);const r=mergeAttributes(t);if(!r)return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the "+e+" morphAttribute."),null;l.morphAttributes[e].push(r)}}return l}([o,t.geometry]),r.push(t)}),n.forEach(e=>t.addMesh(e)),r.forEach(e=>t.removeMesh(e)),this._cacheHolder.componentCache.set(t.hash,t)}}_addRootComponent(e){this._listener&&this._listener.display(e)}removeDockingComponent(){this._getKernelAccess().requestDeleteComponent(this._configuratorContext.dockingRootComponentId),this._configuratorContext.dockingRootComponentId=null}dockComponent(e,t,n,r){let a=this._components.get(t),i=this._components.get(e);i&&(i.roomlePosition=n,i.roomleRotation=r,a&&a.add(i))}dockComponentWithPosition(e,t){let n,r=this._components.get(e.parentId);n=t?t.getKernelPosition(r):e.getKernelPosition(r),Benchmark.start("dock_component_with_position_"+e.childId),this._getKernelAccess().dockComponentWithPosition(e.parentId,e.parentDockId,e.childId,e.childDockId,n),this._configuratorContext.dockingRootComponentId=null}removePreviews(){this._previews.size>0&&(this._previews.forEach(e=>{e.removeFromParent(),e.removeAllMeshes()}),this._previews.clear())}_updatePlanObject(e){const t=this._components.get(e.rootPlanComponentId);let n=!0;t&&(n=t.geometryChanged),this._listener&&this._listener.planObjectUpdated(e,n)}Editor3dAddBakedMesh(e,t,n,r,a,i,o,s){this._addMeshToComponent(e,null,null,t,null,null,n,r,a,i,o,s)}Editor3dAddDockPreview(e,t){const n=this._componentFactory.createPreview(t,e,this._creator_);this._previews.set(t.toString(),n)}Editor3dAddNamedMesh(e,t,n,r,a,i,o,s,l,h,d,c){this._addMeshToComponent(e,t,n,r,a,d,i,o,s,l,h,c)}Editor3ChangedNamedMesh(e,t,n,r,a,i,o){this._changeMeshOfComponent(e,t,n,r,a,i,o)}Editor3dRemoveNamedMesh(e,t){this._removeMeshFromComponent(e,t)}Editor3dBeginConstruction(e,t){if(!t){const t=this._components.get(e);t&&t.removeAllMeshes()}this._subPartGuard&&e===this._subPartGuard.info&&(this._subPartObject=new Object3D)}Editor3dComponentCreated(e,t,n,r,a){a&&(this._configuratorContext.rootComponentId=e);let i=null;this._components.has(e)?(i=this._components.get(e),i.removeAllMeshes()):(i=this._componentFactory.create(e,t,n,r),i.layers.set(3)),this._components.set(e,i),a&&this._addRootComponent(i)}Editor3dComponentDocked(e,t,n,r){this.dockComponent(e,t,n,r)}Editor3dEndConstruction(e){if(this._subPartGuard&&this._subPartGuard.info===e)return void this._subPartGuard.resolve(this._subPartObject);const t=this._getKernelAccess().kernelInstance.getComponent(e),n=this._components.get(e);n&&(n.computeBoundingBox(t.boxForMeasurement),n.boundingBoxMesh&&this._listener&&this._listener.addComponentHandlers(n));let r=this._previews.get(e.toString());r&&r.computeBoundingBox(t.boxForMeasurement,!0)}Editor3dGeometryReady(e){const t=this._components.get(e);t&&t.loadingFinished()}Editor3dGeometryNotReady(e){const t=this._components.get(e);t&&t.loading()}Editor3dPlanObjectConstructionDone(e){const t=this._getKernelAccess().kernelInstance.getPlanObject(e),n=[t,this._getKernelAccess().kernelInstance.getFullPartList(),this._getKernelAccess().kernelInstance.getHashOfConfiguration(e),this._getKernelAccess().kernelInstance.getComponentId(t.rootPlanComponentId)];AsyncHelper.finishOperation(2,n),this._updatePlanObject(t),this._listener&&this._listener.planObjectConstructionDone(t)}Editor3dPreviewConstructionDone(e,t){let n=!1;this._previews.forEach(e=>{null!==e.parent&&(this._listener&&(this._componentFactory.isPreviewLine(e)?this._listener.addPreviewLineHandlers(e):this._listener.addPreviewHandlers(e)),n=!0)}),this._listener&&this._listener.previewConstructionDone(this._components.get(e),n)}Editor3dSetPreviewLineAssociations(e,t){let n=this._previews.get(t.toString());if(n.clear(),!n)return;let r=this._componentFactory.createPreviewLine(n,this._creator_),a=this._components.get(this._configuratorContext.rootComponentId);for(let t=0;t<e.length;t++){let n;n=0===t?r:r.clonePreviewLine(t),n.name="Preview Line",n.parentDockId=e[t].parentDockId,n.parentId=e[t].parentId,n.childDockId=e[t].childDockId,n.childId=e[t].childId,n.docklineRotation=(i=e[t].rotation,new Euler(i.x,i.z,-i.y)),n.roomlePosition=e[t].position,e[t].lineFrom.x>e[t].lineTo.x||e[t].lineFrom.y>e[t].lineTo.y||e[t].lineFrom.z>e[t].lineTo.z?(n.roomleLineFrom=e[t].lineTo,n.roomleLineTo=e[t].lineFrom):(n.roomleLineFrom=e[t].lineFrom,n.roomleLineTo=e[t].lineTo),e[t].positionFrom.x>e[t].positionTo.x||e[t].positionFrom.y>e[t].positionTo.y||e[t].positionFrom.z>e[t].positionTo.z?(n.roomlePositionFrom=e[t].positionTo,n.roomlePositionTo=e[t].positionFrom):(n.roomlePositionFrom=e[t].positionFrom,n.roomlePositionTo=e[t].positionTo),a.add(n),n.preparePreview(),this._previews.set(n.stringId,n)}var i}Editor3dSetPreviewPointAssociations(e,t){let n=this._previews.get(t.toString());if(!n)return;let r=this._components.get(this._configuratorContext.rootComponentId);for(let t=0;t<e.length;t++){let a;0===t?a=n:(a=n.clonePreview(t),this._previews.set(a.stringId,a)),a.name="Preview Point",a.parentDockId=e[t].parentDockId,a.parentId=e[t].parentId,a.childDockId=e[t].childDockId,a.childId=e[t].childId,a.preparePreview(),a.receivedPointAssociation=!0,a.userData.ignoreComponentRaycast=!0,r.add(a),a.roomlePosition=e[t].position,a.roomleRotation=e[t].rotation,a.startPulsating()}}componentDeleted(e){const t=this._components.get(e);t&&(this._listener&&this._listener.componentDeleted(t),t.removeFromParent(),t.removeAllMeshes(),this._components.delete(e))}componentMetaUpdated(e){const t=this._getRuntimeComponent(e.id);t&&(t.hash=e.hash,t.roomlePosition=e.position,t.roomleRotation=e.rotation,e.boxForMeasurement&&t.computeBoundingBox(e.boxForMeasurement),this._listener&&this._listener.componentUpdated(t,e))}componentConfigurationUpdated(e,t){const n=this._getRuntimeComponent(e);n&&(n.geometryChanged=t)}_getRuntimeComponent(e){let t=this._components.get(e);return t||(t=this._previews.get(e.toString()),t)?t:null}configurationLoaded(e,t,n,r,a){10===e&&(this._configuratorContext.dockingRootComponentId=n);let i=0===t;i?this._getKernelAccess().kernelInstance.requestPlanComponentConstructionRecursive(n):this._getKernelAccess().kernelInstance.requestPlanObjectConstruction(t);let o=this._getKernelAccess().kernelInstance.getComponent(n),s=this._components.get(n);s&&(s.computeBoundingBox(o.boxForMeasurement),s.hash=o.hash),this._listener&&this._listener.configurationLoaded(s,i&&void 0!==s.boundingBoxMesh)}finishParameterChange(e,t){this.materialQueue.registerCallback(e)}planObjectConfigurationUpdated(e,t,n){let r=this._getKernelAccess().kernelInstance.getPlanObject(e);this._updatePlanObject(r)}planObjectCreated(e,t){this._configuratorContext.planObjectId=t,this._listener&&this._listener.clearScene()}planObjectUpdated(e){this._updatePlanObject(e)}sceneCleared(){this._components.forEach((function(e){e.removeFromParent(),e.removeAllMeshes()})),this._components.clear(),this._componentNumberOfPossibleChildren.clear(),this._previews.forEach(e=>{e.removeFromParent(),e.removeAllMeshes()}),this._previews.clear()}setListener(e){this._listener=e}getBoundingBox(){if(this._configuratorContext.planObjectId){const e=this._getKernelAccess().kernelInstance.getPlanObject(this._configuratorContext.planObjectId);if(e&&e.boxForMeasurement)return kernelBoxToThreeBox(e.boxForMeasurement)}else if(this._configuratorContext.rootComponentId){const e=this._components.get(this._configuratorContext.rootComponentId);return(new Box3).setFromObject(e)}return null}getBoundingBoxWithPreviews(){const e=this._components.get(this._configuratorContext.rootComponentId);return e?(new Box3).setFromObject(e):null}hasPreviews(){return this._previews.size>0}clearRootComponent(){var e;null===(e=this._components.get(this._configuratorContext.rootComponentId))||void 0===e||e.hoverOff()}debugSceneGraph(e){e?this._components.has(e)?this._components.get(e):this._previews.has(e.toString())&&this._previews.get(e.toString()):this._configuratorContext}getComponentsForIds(e){let t=[];return e.forEach(e=>{const n=this._components.get(e);n&&t.push(n)}),t}getComponents(){return Array.from(this._components.values())}getPreviews(){return Array.from(this._previews.values())}hasPreviewLines(){for(const e of this._previews.values())if(this._componentFactory.isPreviewLine(e))return!0;return!1}isPreviewLine(e){return this._componentFactory.isPreviewLine(e)}isPreview(e){return this._componentFactory.isPreview(e)}setGeometriesMergedListener(e){this._geometriesMerged=e}removeGeometriesMergedListener(){this._geometriesMerged=void 0}setMergeThreshold(e){this._mergeThreshold=e}_generateMesh(e=0,t=null,n,r,a,i,o,s,l,h){return this._configuratorMeshGenerator.generateMesh(e,t,n,r,a,i,o,!1,h)}_setMaterial(e,t,n){this._configuratorMeshGenerator.setMaterial(e,t)}constructComponents(e){this._getKernelAccess().kernelInstance.requestPlanObjectConstruction(e)}requestSubPartConstruction(e){return this._subPartGuard=new AsyncGuard(e),this._getKernelAccess().requestPlanComponentConstruction(e,!1),this._subPartGuard.wait()}getMeshGenerator(){return this._configuratorMeshGenerator}setRequestRenderCallback(e){this._requestRenderCallback=e}setRequestRenderSceneUpdateCallback(e){this._requestRenderSceneUpdateCallback=e}}__decorate([inject],ConfiguratorViewModel.prototype,"_configuratorMeshGenerator",void 0),__decorate([inject],ConfiguratorViewModel.prototype,"_configuratorContext",void 0),__decorate([inject],ConfiguratorViewModel.prototype,"_cacheHolder",void 0),__decorate([inject],ConfiguratorViewModel.prototype,"_initData",void 0);class OccurrenceMap extends Map{largestValue(){let e=this.entries().next().value[0],t=0;return this.forEach((n,r)=>{n>t&&(e=r,t=n)}),e}}const ASYNC_PARAMTER_CHANGES=["material"];class ConfiguratorKernelAccess extends CommonKernelAccess{constructor(e){super(e),this.externalMeshQueue=new PromiseQueue,this.muteKernelCallbacks=!1,this.listOfVariants=(e,t)=>{}}init(e){super.init(e),Benchmark.addMeta("kernel_is_ready",{isWasm:this._useWASM}),AppContext.kernelInstance?(this._kernelContainer=AppContext.kernelContainer,setTimeout(()=>this._loadSuccess(),0)):this._scriptLoader.fetch(this._kernelPath,{id:"kernel"}).then(this._loadSuccess.bind(this),this._loadError.bind(this))}_loadSuccess(){Benchmark.start("kernel_is_ready"),window.ConfiguratorKernel&&(AppContext.kernelInstance?setTimeout(()=>this.isReady(),0):(window.ConfiguratorKernel(this._kernelContainer),window.ConfiguratorKernel=null))}_loadError(){this._configuratorKernelAccessCallback.loadError()}selectedComponent(e){this._updateComponentDependencies(e)}uiRequestConfiguration(e){const t=this._kernelInstance.getSerializedConfiguration(e);AsyncHelper.finishOperation(1,t)}_updateComponentParameters(e){let t=this._kernelInstance.getComponentParameters(e);const n=this._kernelInstance.getComponent(e);this._configuratorKernelAccessCallback.updateParameters(t,n.parameterGroups,e,1)}selectionChange(e,t){let n=!1,r=[];if(e){let t=this._kernelInstance.getComponent(e);t.componentId=this._kernelInstance.getComponentId(e),t&&t.childIds&&t.childIds.length>0&&(n=!0),r.push(t)}this._configuratorUiCallbacks.onSelectionChange("standard",t,n,r)}multiSelectionChange(e,t){this._updateCommonComponentDependencies(e);let n=!1,r=!1,a=[];e&&e.forEach(e=>{let i=this._kernelInstance.getComponent(e);i.componentId=this._kernelInstance.getComponentId(e),i&&i.childIds&&i.childIds.length>0&&(n=!0),i.id===t&&(r=!0),a.push(i)}),this._configuratorUiCallbacks.onSelectionChange("multiselect",r,n,a)}_updateCommonComponentDependencies(e){const{parameters:t,parameterGroups:n}=this._kernelInstance.getCommonPlanComponentParameters(this._utilityToLongArray(e));this._configuratorKernelAccessCallback.updateParameters(t,n,e,2)}_updateComponentChildren(e){const t=this._kernelInstance.getPlanComponentPossibleChildren(e);this._configuratorKernelAccessCallback.updatePossibleChildren(e,t,1)}_updateComponentDependencies(e){this._updateComponentParameters(e),this._updateComponentChildren(e)}_updatePlanObjectParameters(e){let t,n=this._kernelInstance.getPlanObjectParameters(e);if(0===n.length){let r=this._kernelInstance.getRootPlanComponentIdFromObjectId(e);n=this._kernelInstance.getComponentParameters(r),this._enableRootComponentParametersAsGlobal(),t=this._kernelInstance.getComponent(r)}else this._configuratorContext.rootComponentParametersAsGlobal=!1,t=this._kernelInstance.getPlanObject(e);this._configuratorKernelAccessCallback.updateParameters(n,t.parameterGroups,e,0)}_enableRootComponentParametersAsGlobal(){this._configuratorContext.selectedRuntimeComponentId||(this._configuratorContext.rootComponentParametersAsGlobal=!0)}_updatePlanObjectChildren(e){const t=this._kernelInstance.getPlanObjectPossibleChildren(e);this._configuratorKernelAccessCallback.updatePossibleChildren(e,t,0)}updatePlanObjectDependencies(e){this._updatePlanObjectParameters(e),this._updatePlanObjectChildren(e)}_updateConfigurationHasChildren(e,t=null){t||(t=this._kernelInstance.getComponent(this._kernelInstance.getRootPlanComponentIdFromObjectId(e)));const n=t.childIds.size?t.childIds.size():t.childIds.length;this._configuratorUiCallbacks.onConfigurationHasChildren(n>0)}dockComponent(e,t,n,r){const a=this._kernelInstance.getComponentId(n),i=this._kernelInstance.getComponentId(e);this._kernelInstance.dockComponent(n,r,e,t),this._configuratorUiCallbacks.onUserInitiatedDockDone(a,r,i,t,null)}changeUseOfHDGeometry(e,t){this._rapiAccess.changeUseOfHDGeometry();const n=e.planObjectId,r=e.lastLoadedRapiId?e.lastLoadedRapiId:this._kernelInstance.getComponentId(n),a=this._kernelInstance.getSerializedConfiguration(n);this._kernelInstance.clearAll(),this._kernelInstance.useHDGeometry(t),AsyncHelper.finishOperation(3,[a,r])}webGlPreviewDockings(e,t){AsyncHelper.waitFor(4).then(({componentId:n})=>{t&&this.requestPlanComponentConstruction(n),this._kernelInstance.requestPreviewGeometry(n,e.planObjectId)}),e.lastPossibleChild&&e.lastPossibleChild.isComponent&&(this._kernelIo.setMeta({componentId:e.lastPossibleChild.id}),this._kernelInstance.loadPlainComponent(10,e.lastPossibleChild.id,e.lastPossibleChild.configuration)),e.lastPossibleChild&&e.lastPossibleChild.isItem&&this._kernelInstance.loadFreeFlyingConfiguration(10,e.lastPossibleChild.configuration)}previewDockingsWithDrag(e,t){this._kernelInstance.requestPreviewGeometry(e,t)}loadConfiguration(e){this._initData.id?this._memoryManager.loadingConfiguration(this._initData.id):this._memoryManager.loadingConfigurationString(),this._memoryManager.shouldHardReset()?this._kernelInstance.clearAll():this._kernelInstance.clearScene(),this._kernelInstance.loadConfiguration(9,e,{x:0,y:0,z:0})}changeCommonComponentParameter(e,t,n,r,a,i){"string"==typeof r?this._kernelInstance.setPlanComponentParameters(this._utilityToLongArray(e),t,r):console.warn("tried to set a parameter to a none string value!",r,t,n),this._finishParameterChange(n,a,i),this._updateCommonComponentDependencies(e)}changeComponentParameter(e,t,n,r,a,i){"string"==typeof r?this._kernelInstance.setComponentParameter(e,t,r):console.warn("tried to set a parameter to a none string value!",r,t,n),this._finishParameterChange(n,a,i),this._updateComponentDependencies(e)}changePlanObjectParameter(e,t,n,r,a,i){"string"==typeof r?this._kernelInstance.setPlanObjectParameter(e,t,r):console.warn("tried to set a parameter to a none string value!",r,t,n),this._finishParameterChange(n,a,i)}_finishParameterChange(e,t,n){-1===ASYNC_PARAMTER_CHANGES.indexOf(e)?setTimeout(()=>t(),0):this._configuratorKernelCallbackListener.forEach(e=>e.finishParameterChange(t,n))}requestDeleteComponents(e){e&&this._kernelInstance.deletePlanComponents(this._utilityToLongArray(e))}requestDeletePlanComponent(e){var t,n;e&&(null===(n=null===(t=this._initData)||void 0===t?void 0:t.featureFlags)||void 0===n?void 0:n.reDock)&&this._kernelInstance.deletePlanComponent(e)}loadComponentIntoKernel(e,t){this._kernelIo.setMeta({componentId:t}),this._kernelInstance.loadComponentDefinition(10,e)}async requestPartListAndUpdatePricesOfParts(e,t){let n=this._kernelInstance.getFullPartList();e||(e=this._kernelInstance.getHashOfConfiguration(this._configuratorContext.planObjectId));const r=await this.addUiDataAndPriceToPartList(n,e);this._configuratorUiCallbacks.onPartListUpdate(r,btoa(e))}requestSync(e,t){this.planObjectCreated(e,t),this._kernelInstance.syncPlanObjectToView(e,t)}getGlobalParameters(e,t){return new Promise(n=>{let r=this._kernelInstance.getPlanObjectParameters,a=e;t&&(r=this._kernelInstance.getComponentParameters,a=this._kernelInstance.getRootPlanComponentIdFromObjectId(e)),n(r.apply(this._kernelInstance,[a]))})}getPartList(){return new Promise(e=>{e(this._kernelInstance.getFullPartList())})}getConfigurationHash(e){return new Promise(t=>t(this._kernelInstance.getHashOfConfiguration(e.planObjectId)))}requestPlanObjectConstruction(e){this._kernelInstance.requestPlanObjectConstruction(e)}isReady(){super.isReady(),this._setupKernel(),Env.isProduction||(window.__RML__DEBUG__.Kernel=this._kernelInstance,window.__RML__DEBUG__.KernelContainer=this._kernelContainer,window.__RML__DEBUG__.Helper={convertCObject}),this._configuratorKernelAccessCallback.isReady(),this._configuratorUiCallbacks.onConfiguratorKernelIsReady(this._kernelContainer,this._kernelInstance),AppContext.planObjectId&&this.planObjectCreated(-1,AppContext.planObjectId)}_setupKernel(){1===this._kernelType&&(Benchmark.start("kernel_create_instance"),AppContext.kernelInstance?this._kernelInstance=AppContext.kernelInstance:this._kernelInstance=new this._kernelContainer.Kernel),this._initKernel()}onLoadComponentError(e,t){this._configuratorUiCallbacks.onComponentLoadError(e,t)}configurationLoaded(e,t,n,r,a,i){AsyncHelper.finishOperation(4,{conversationId:e,objectId:t,componentId:n,hash:r,errors:convertCObject(a)}),this._configuratorKernelCallbackListener.forEach(i=>i.configurationLoaded(e,t,n,r,a))}componentDefinitionLoaded(e,t){AsyncHelper.finishOperation(0,t)}componentDefinitionLoadingError(e,t){this._kernelIo.error(t),AsyncHelper.failOperation(0,new Error(t))}configurationLoadingError(e,t){let n="Configuration loading error";if(t){const e=convertCObject(t);Array.isArray(e)&&(n=e.join("\n"),e.forEach(e=>this._kernelIo.error(e)))}AsyncHelper.failOperation(4,new Error(n)),AsyncHelper.failOperation(2,new Error(n))}componentConfigurationUpdated(e,t){this._configuratorKernelCallbackListener.forEach(n=>n.componentConfigurationUpdated(e,t)),this._kernelInstance.requestDeltaPlanComponentConstruction(e)}setActiveGroupInView(e){this._kernelInstance.setActiveGroupInView(e)}setActiveGroupInViewForPlanObject(e,t){this._kernelInstance.setActiveGroupInViewForPlanObject(e,t||this._configuratorContext.planObjectId)}componentParameters(){}requestComponentDimensions(){}planObjectCreated(e,t){this._configuratorKernelCallbackListener.forEach(n=>n.planObjectCreated(e,t))}planObjectUpdated(e){const t=this._kernelInstance.getPlanObject(e);this._onBoundsUpdate(t),this._configuratorKernelCallbackListener.forEach(e=>e.planObjectUpdated(t))}planObjectConfigurationUpdated(e,t,n,r,a){this.updatePlanObjectDependencies(e);let i=this._kernelInstance.getComponent(this._kernelInstance.getRootPlanComponentIdFromObjectId(e));this._configuratorKernelCallbackListener.forEach(r=>r.planObjectConfigurationUpdated(e,t,n));const o=this._kernelInstance.getPlanObject(e);return this._onBoundsUpdate(o),this._configuratorHistory.push(t),this._updateConfigurationHasChildren(e,i),this.requestPartListAndUpdatePricesOfParts(n)}_onBoundsUpdate(e){if(!e.boxForMeasurement)return;const t={width:this._unitFormatter.formatMMValueToUnitString(e.boxForMeasurement.size.x),height:this._unitFormatter.formatMMValueToUnitString(e.boxForMeasurement.size.z),depth:this._unitFormatter.formatMMValueToUnitString(e.boxForMeasurement.size.y),kernelBounds:e.boxForMeasurement};this._configuratorUiCallbacks.onBoundsUpdate(t)}planObjectDeleted(){}requestPlanObjectDimensions(){}async requestExternalMesh(e,t){let n=()=>{};const r=new Promise((e,t)=>{n=e});let a;this.externalMeshQueue.push(r),this._configuratorUiCallbacks.onRequestExternalMesh(e,t);try{a=await this._rapiAccess.getMesh(e,"crt",t)}catch(t){return this._handleInvalidMesh(e),this._configuratorUiCallbacks.onError(new Error(`Mesh with id "${e}" can not be loaded. "${t}"`)),void console.error(t)}try{const r=await fetch(new Request(this._dataSyncer.requestAsset(a.url,!0))),i=await r.arrayBuffer();this._handleCortoMesh(i,e,t),n()}catch(t){return this._handleInvalidMesh(e),this._configuratorUiCallbacks.onError(new Error(`Mesh with id "${e}" breaks. "${t}"`)),void console.error(t)}}Editor3dComponentCreated(e,t,n,r){this._configuratorKernelCallbackListener.forEach(a=>a.Editor3dComponentCreated(e,t,n,r,!1)),r&&r>0&&this._configuratorKernelCallbackListener.forEach(a=>a.Editor3dComponentDocked(e,r,t,n))}Editor3dRootComponentCreated(e,t,n,r){this._configuratorKernelCallbackListener.forEach(a=>a.Editor3dComponentCreated(e,t,n,r,!0))}Editor3dPlanObjectConstructionDone(e){this._configuratorKernelCallbackListener.forEach(t=>t.Editor3dPlanObjectConstructionDone(e)),this.updatePlanObjectDependencies(e),this._updateConfigurationHasChildren(e),this._initData.moc||this._calcPrice()}Editor3dBeginGroup(){}Editor3dEndGroup(){}Editor3dSetMaterial(){}Editor3dLoadMaterial(){}Editor3dAddDockPreview(e,t){this._configuratorKernelCallbackListener.forEach(n=>n.Editor3dAddDockPreview(e,t))}Editor3dSetPreviewPointAssociations(e,t){this._configuratorKernelCallbackListener.forEach(n=>n.Editor3dSetPreviewPointAssociations(e,t))}Editor3dSetPreviewLineAssociations(e,t){this._configuratorKernelCallbackListener.forEach(n=>n.Editor3dSetPreviewLineAssociations(e,t))}Editor3dPreviewConstructionDone(e,t){this._configuratorKernelCallbackListener.forEach(n=>n.Editor3dPreviewConstructionDone(e,t))}Editor3dTranslateBy(){}Editor3dRotateBy(){}Editor3dRotateAround(){}Editor3dAddCube(){}Editor3dAddCubeUVMod(){}Editor3dAddSphere(){}Editor3dAddSphereUVMod(){}Editor3dAddRectangle(){}Editor3dAddRectangleUVMod(){}Editor3dAddMesh(){}Editor3dAddMeshUVMod(){}Editor3dAddMeshUVCoord(){}Editor3dAddCylinder(){}Editor3dAddCylinderUVMod(){}Editor3dAddPrism(){}Editor3dAddPrismUVMod(){}Editor3dAddFittingPoint(){}Editor3dAddFittingLine(){}Editor3dSelectObject(){}Editor3dCopy(){}Editor3dUpdatePlanObjectPosition(){}Editor3dUpdatePlanObjectRotation(){}Editor3dUpdatePlanObjectTransform(){}Editor3dUpdatePlanComponentPosition(){}Editor3dUpdatePlanComponentRotation(){}Editor3dUpdatePlanComponentTransform(){}getRuntimeComponentIdOfRootComponent(e){return this._kernelInstance?this._kernelInstance.getRootPlanComponentIdFromObjectId(e):(console.warn("this._kernelInstance not ready now"),0)}getRuntimeComponentId(e){return this._kernelInstance.getComponentId(e)}getParameterGroups(){if(!this._configuratorContext.planObjectId)return[];const e=this._kernelInstance.getRootPlanComponentIdFromObjectId(this._configuratorContext.planObjectId);return this._kernelInstance.getComponent(e).parameterGroups}resume(){this.muteKernelCallbacks||super.resume()}getSerializedConfiguration(e){return this._kernelInstance.getSerializedConfiguration(e)}createNewSerializedConfiguration(e){return this._kernelInstance.createNewSerializedConfiguration(e)}getCurrentConfigurationHash(e){return this._kernelInstance.getHashOfConfiguration(e)}listOfVariantsError(e,t){this._kernelIo.setMeta({rapiId:e}),this._kernelIo.error(t)}}__decorate([inject],ConfiguratorKernelAccess.prototype,"_memoryManager",void 0),__decorate([inject],ConfiguratorKernelAccess.prototype,"_configuratorKernelAccessCallback",void 0),__decorate([inject],ConfiguratorKernelAccess.prototype,"_initData",void 0),__decorate([inject],ConfiguratorKernelAccess.prototype,"_configuratorHistory",void 0);class NodePlanElementViewModel extends PlanElementViewModel{constructor(e){super(e);const t=this.getPlanElement().getMaxWallHeight();this._container.position.y=(t<0?2800:t)/1e3+.01,this._container.name="Node Plan Element",this.addMesh(this._nodeUiMesh)}update(){super.update(),this._container.position.y=this.getPlanElement().getMaxWallHeight()/1e3+.01}_initNodeMesh(){if(this._nodeUiMesh)return;const e=new SphereGeometry(.05,32),t=new MeshBasicMaterial({color:16777215});this._sphere=new Mesh(e,t);const n=new RingGeometry(.05,.07,32),r=new MeshBasicMaterial({color:0,side:DoubleSide});this._innerRingMesh=new Mesh(n,r),this._innerRingMesh.rotation.set(Math.PI/2,0,0);const a=new RingGeometry(.07,.08,32),i=new MeshBasicMaterial({color:16777215,side:DoubleSide});this._outerRingMesh=new Mesh(a,i),this._outerRingMesh.rotation.set(Math.PI/2,0,0),this._nodeUiMesh=new Mesh,this._nodeUiMesh.add(this._sphere),this._nodeUiMesh.add(this._innerRingMesh),this._nodeUiMesh.add(this._outerRingMesh)}setTopView(e){super.setTopView(e),e||(this._nodeUiMesh.visible=!1)}getSize(){return this._initNodeMesh(),(new Box3).setFromObject(this._nodeUiMesh).getSize(new Vector3)}show(){this._nodeUiMesh.visible=this._topView}hide(){this._nodeUiMesh.visible=!1}select(){this._innerRingMesh.material=new MeshBasicMaterial({color:10526880,side:DoubleSide}),super.select()}deselect(){this._innerRingMesh.material=new MeshBasicMaterial({color:0,side:DoubleSide}),super.deselect()}hoverOn(){this._sphere.geometry=new SphereGeometry(.07,32),this._innerRingMesh.geometry=new RingGeometry(.07,.07+.02,32),this._outerRingMesh.geometry=new RingGeometry(.07+.02,.1,32),super.hoverOn()}hoverOff(){this._sphere.geometry=new SphereGeometry(.05,32),this._innerRingMesh.geometry=new RingGeometry(.05,.07,32),this._outerRingMesh.geometry=new RingGeometry(.07,.08,32),super.hoverOff()}_generateBoundingBox(){const e=super._generateBoundingBox();return e.layers.set(9),e}addMesh(e){super.addMesh(e)}}class ConstructionPlanObjectViewModel extends StaticPlanObjectViewModel{constructor(e){super(e),this._container.name="Construction "+this._container.name}setTopView(e){super.setTopView(e),e?this._enableTopView():this._disableTopView(),this._updateBoundingBox()}_enableTopView(){if(!this._topViewContainer){this._topViewContainer=new Group;const e=this.getPlanElement(),{x:t,z:n}=convertToThreeDimensions(e.size),r=new BoxGeometry(t,.01,n);if(this._topGreyMesh=new Mesh(r,MaterialCreator.createMeshStandardMaterial({transparent:!0,opacity:1,color:11645361})),this._topViewContainer.add(this._topGreyMesh),"window"===e.getObjectType()){const e=new BoxGeometry(t,.02,.05);this._topBlackMesh=new Mesh(e,MaterialCreator.createMeshStandardMaterial({transparent:!0,opacity:1,color:0})),this._topViewContainer.add(this._topBlackMesh)}this._topViewContainer.position.y=5,this._container.add(this._topViewContainer)}this._topViewContainer.visible=!0}_disableTopView(){this._topViewContainer&&(this._topViewContainer.visible=!1)}getPlanElement(){return super.getPlanElement()}_generateBoundingBox(){const e=super._generateBoundingBox(),t=this.getSize();return e.geometry=new BoxGeometry(t.x,this._topView?5:t.y,t.z),e}_updateBoundingBox(){super._updateBoundingBox();const e=this.getSize();this._boundingBox.geometry=new BoxGeometry(e.x,this._topView?5:e.y,e.z)}getTopViewContainer(){return this._topViewContainer}update(){if(super.update(),!this._topGreyMesh)return;const{x:e,z:t}=convertToThreeDimensions(this.getPlanElement().size);this._topGreyMesh.geometry=new BoxGeometry(e,.01,t),this._topBlackMesh&&(this._topBlackMesh.geometry=new BoxGeometry(e,.02,.05))}}class PlannerKernelAccess extends ConfiguratorKernelAccess{get kernelContainer(){return this._kernelContainer}constructor(e){super(e),this._plannerKernelCallbackListener=new Set}_loadSuccess(){super._loadSuccess(),window.RoomleCore&&window.RoomleCore(this._kernelContainer)}_loadError(){super._loadError(),console.error("kernel load error")}_createPlanInteractionHandler(){this._planInteractionHandler=new this._kernelContainer.PlanInteractionHandler,this._planInteractionHandler.init(this._planInteractionHandler,1,50,!!this._initData.snappingEnabled,!0,this._kernelContainer.DrawingType.CLICK_PER_CLICK),this._roomlePlannerUiCallback.onPlanInteractionHandlerCreated(this._planInteractionHandler)}addPlannerListener(e){this._plannerKernelCallbackListener.add(e)}removePlannerListener(e){this._plannerKernelCallbackListener.delete(e)}isReady(){super.isReady(),this.registerCallbacks(),this._roomlePlannerUiCallback.onPlannerKernelIsReady(this._kernelContainer),this._roomlePlannerUiCallback.onConfiguratorKernelIsReady(this._kernelContainer,this._kernelInstance),Env.isProduction||(window.__RML__DEBUG__.ConfiguratorKernel=this._kernelInstance,window.__RML__DEBUG__.PlannerKernelContainer=this._kernelContainer),this._kernelAccessCallback.isReady()}_setupKernel(){0===this._kernelType&&(this._createPlanInteractionHandler(),AppContext.kernelInstance?this._kernelInstance=AppContext.kernelInstance:this._kernelInstance=this._planInteractionHandler.getConfiguratorKernel()),super._setupKernel()}get callbacks(){return this._roomlePlannerUiCallback}get planInteractionHandler(){return this._planInteractionHandler}get planModelViewHelper(){return this._kernelContainer.PlanModelViewHelper}catalogItemLoaded(e){const t=this._rapiItemToKernelItem(e);this._kernelContainer.catalogItemLoaded(t)}async insertItems(e){this.planInteractionHandler.startInteraction();let t=new this._kernelContainer.CatalogItemPtrList;e.forEach(e=>{let n=e.count||1;for(let r=0;r<n;r++)e.count||(e.count=0),t.push_back(this._rapiItemToKernelItem(e))});const n=this.planInteractionHandler.getPlan().extRef.jsObject,r=n.getPlanObjectViewModelsFromRapiId().reduce((e,t)=>(e[t.getId()]=!0,e),{});this.planInteractionHandler.addPlanObjects(t,!0),await Promise.allSettled([Promise.allSettled(n.getStaticPlanObjectViewModels().map(async e=>{if(e.needsRapiItem()){const t=await this._rapiAccess.getItem(e.getPlanObject().getCatalogItemId());e.setRapiItem(t)}})),Promise.allSettled(n.getConfigurablePlanObjectViewModels().map(e=>e.isInitDone()))]);const a=n.getPlanObjectViewModelsFromRapiId().map(e=>e.getId()).filter(e=>!r[e]);return this.planInteractionHandler.endInteraction(),a}duplicateItems(e){const t=new this.kernelContainer.PlanObjectPtrList;return e.forEach(e=>{t.push_back(e)}),this.planInteractionHandler.duplicatePlanObjects(t,1,!0)}_rapiItemToKernelItem(e){let t=new this._kernelContainer.CatalogItem(e.id),n=t.size;return n.x=e.width||0,n.y=e.depth||0,n.z=e.height||0,t.size=n,t.flipable=e.flipable,e.layer&&(t.layer=e.layer),t.orderable=e.orderable,t.scaleable=e.scaleable,t.type=e.type||"other",t.detailType=e.detailType||t.type||"other",t.configuration=e.configuration||"",t}planObjectDeleted(){}requestPlanObjectDimensions(){}cleanUpCallbacks(){var e;super.cleanUpCallbacks(),(null===(e=this._kernelContainer)||void 0===e?void 0:e.unregisterPlannerCallback)&&this._kernelContainer.unregisterPlannerCallback(this)}registerCallbacks(){var e;super.registerCallbacks(),(null===(e=this._kernelContainer)||void 0===e?void 0:e.registerPlannerCallback)&&this._kernelContainer.registerPlannerCallback(this)}planElementRemoved(e){this._plannerKernelCallbackListener.forEach(t=>t.planElementRemoved(e)),this._plannerKernelCallbackListener.forEach(t=>t.removePlanObjectFromScene(e.extRef.jsObject)),this._decoupleReferences(e)}handlerSwitchedPlans(e,t){this._decoupleReferences(e),t&&this._plannerKernelCallbackListener.forEach(n=>n.handlerSwitchedPlans(e,t))}planBoundsChanged(){this._plannerKernelCallbackListener.forEach(e=>e.planBoundsChanged())}planCleared(){this._plannerKernelCallbackListener.forEach(e=>e.planCleared())}planCompletelyLoaded(e){this._plannerKernelCallbackListener.forEach(t=>t.planCompletelyLoaded(e))}planElement3dMeshChanged(e,t){if(t.extRef){const e=t.extRef.jsObject;for(let t=e.getObject().children.length-1;t>=0;t--)e.getObject().remove(e.getObject().children[t])}this.planModelViewHelper.requestMesh3d(t)}async _onStaticItemAdded(e,t){let n;n=this.isConstructionPlanElement(t)?new ConstructionPlanObjectViewModel(t):new StaticPlanObjectViewModel(t),this.coupleReferences(n,t),e.extRef.jsObject.addPlanElementViewModel(n);const r=t.getCatalogItemId();if(r){const e=await this._rapiAccess.getItem(r);n.setRapiItem(e),this._plannerKernelCallbackListener.forEach(e=>e.addPlanObjectToScene(n))}}_onConfigurableItemAdded(e,t){const n=new ConfiguratorPlanObjectViewModel(t);this.coupleReferences(n,t),e.extRef.jsObject.addPlanElementViewModel(n),this._plannerKernelCallbackListener.forEach(e=>e.addPlanObjectToScene(n))}async planElementAdded(e,t){if(e&&e.extRef)if(t.getType()===this._kernelContainer.PlanElementType.OBJECT)t.hasConfiguration()?this._onConfigurableItemAdded(e,t):await this._onStaticItemAdded(e,t);else{const n=t;let r;if(t.getType()===this._kernelContainer.PlanElementType.WALL?r=new WallPlanElementViewModel(n):t.getType()===this._kernelContainer.PlanElementType.FLOOR?r=new FloorPlanElementViewModel(n):t.getType()===this._kernelContainer.PlanElementType.CEILING?r=new CeilingPlanElementViewModel(n):t.getType()===this._kernelContainer.PlanElementType.NODE&&(r=new NodePlanElementViewModel(n)),!r)return;this.coupleReferences(r,n),e.extRef.jsObject.addPlanElementViewModel(r),this.planModelViewHelper.requestMesh3d(t),this._plannerKernelCallbackListener.forEach(e=>e.addPlanObjectToScene(null))}}planElementChanged(e,t){if(t.extRef){let n=t.extRef.jsObject;n.update(),this._plannerKernelCallbackListener.forEach(t=>t.planElementChanged(e,n))}}planHistoryStateChanged(){this.planInteractionHandler&&(this._plannerKernelCallbackListener.forEach(e=>e.planHistoryStateChanged()),this._roomlePlannerUiCallback.onHistoryChange(this.planInteractionHandler.isUndoPossible(),this.planInteractionHandler.isRedoPossible()))}planObjectConfigurationCreated(e,t){}planObjectConfigurationLoaded(e,t,n){e&&e.extRef&&t&&t.extRef&&t.extRef.jsObject.getPlanObject().getConfigurationRuntimeId()>0&&this._plannerKernelCallbackListener.forEach(r=>r.planObjectConfigurationLoaded(e,t,n))}requestCatalogItem(e){}startedDrawing(){this._plannerKernelCallbackListener.forEach(e=>e.startedDrawing())}stoppedDrawing(){this._plannerKernelCallbackListener.forEach(e=>e.stoppedDrawing())}updateMesh2d(){}beginConstruction(){}addMesh(e,t,n,r,a,i){this._plannerKernelCallbackListener.forEach(o=>o.addMesh(e,t,n,r,a,i))}endConstruction(){}beginPlanConstruction(e){this._plannerKernelCallbackListener.forEach(t=>t.beginPlanConstruction(e))}addPlanMesh(e,t,n,r,a,i,o){this._plannerKernelCallbackListener.forEach(s=>s.addPlanMesh(e,t,n,r,a,i,o))}endPlanConstruction(e){this._plannerKernelCallbackListener.forEach(t=>t.endPlanConstruction(e))}async addPlanObjectFromItem(e,t,n){if(!t&&!n){const t=await this.insertItems([e]);if(1!==t.length)throw new Error("It was expected that 1 element is added but"+t.length+"were added");return t[0]}n=n||0===n?n:0,t=t||{x:0,y:0,z:0};const r=this._planInteractionHandler.addPlanObjectFromItem(this._rapiItemToKernelItem(e),t,n,!1),a=this._planInteractionHandler.getPlan().extRef.jsObject;let i;return r.hasConfiguration()?(i=a.getConfigurablePlanObjectForId(r.getId()),i||console.warn("Could not find configuration")):(i=a.getStaticPlanObjectViewModelForId(r.getId()),i?await i.setRapiItem(e):console.warn("Could not find static item")),await i.isInitDone(),i.getId()}coupleReferences(e,t){let n=new this._kernelContainer.EMSReference;n.jsObject=e,t.extRef=n}_decoupleReferences(e){e&&e.extRef&&(e.extRef.jsObject.clearReference(),e.extRef.jsObject=null,e.extRef.delete(),e.extRef=null)}isConstructionPlanElement(e){return e instanceof this.kernelContainer.ConstructionObject}}__decorate([inject],PlannerKernelAccess.prototype,"_kernelAccessCallback",void 0),__decorate([inject],PlannerKernelAccess.prototype,"_roomlePlannerUiCallback",void 0);class PlannerMeshGenerator extends MeshGenerator{constructor(e){super(e),this._wallMeshes=[],this._defaultMaterial=MaterialCreator.createMeshPhysicalMaterial({color:"#ffffff",side:DoubleSide})}generateGeometry(e=null,t,n,r,a,i=!1){let o;return o=i?this._generateGeometry(e,t,n,r,a).clone():this._generateGeometry(e,t,n,r,a),o}generateMesh(e=0,t=null,n,r,a,i,o,s,l=!1,h){let d;d=l?this._generateGeometry(t,r,a,i,o).clone():this._generateGeometry(t,r,a,i,o);const c=this._createMesh(e,t,d);return c.userData.materialId=n,c.layers.set(4),n&&this.setMaterial(c,n,s,h).then(()=>{e&&t&&n&&this._geometryComponentMaterialCache.set(this._getComponentMeshId(e,t),n);const r=s&&3===s.value,a=s&&1===s.value;c.castShadow=!r&&!a}),this._checkWallMaterial(c,s),c}async setMaterial(e,t,n,r){if(e.userData.materialId=getMaterialId(t,n),isString(t))t?await this._assignMaterial(e,t,r):(console.warn("Used default material because material is empty"),this.changeMaterialOfMesh(e,this._getDefaultMaterial(n)));else{if(!t)return void this.changeMaterialOfMesh(e,this._configuratorPreviewMaterial);2===(t=t).getSourceType().value?await this._assignMaterial(e,t.materialId,r):1===t.getSourceType().value?await this._assignItem(e,t.catalogItemId):3===t.getSourceType().value?await this._assignRGB(e,t.rgbValue):0===t.getSourceType().value?this.changeMaterialOfMesh(e,this._getDefaultMaterial(n)):(this.changeMaterialOfMesh(e,this._getDefaultMaterial(n)),1!==n.value&&7!==n.value&&3!==n.value&&console.warn("Used default material because material is not supported",t))}}_getDefaultMaterial(e){return 3===(null==e?void 0:e.value)?this._defaultMaterialFloor:this._defaultMaterial}set maxAnisotropy(e){this._maxAnisotropy=e}_checkWallMaterial(e,t){t&&1===t.value&&(e.renderOrder=5,this._wallMeshes.push(e))}clear(){super.clear(),this.clearWallMeshes()}clearWallMeshes(){this._wallMeshes.forEach(e=>{disposeMesh(e)}),this._wallMeshes=[]}get wallMeshes(){return this._wallMeshes}}let KERNEL_UNIT={InchFeet:null,Feet:null,MM:null,CM:null,Inch:null},KERNEL_UNIT_STRING_TYPE={NoUnitString:null,LongUnitString:null,ShortUnitString:null};const METRIC_UNIT_TYPES=["mm","cm","feet"],IMPERIAL_UNIT_TYPES=["inch","inchfeet"];class UnitFormatter{constructor(e){this._formatter=null,this._precision=0,this._creator_=e}init(e){const t=new e.UnitMeasureFormatter;KERNEL_UNIT=e.Unit,KERNEL_UNIT_STRING_TYPE=e.UnitStringType,this._initActualUnit(),this._initMeasurementSystemType(),this._initActualUnitStringType();const{precisionCm:n,precisionInch:r}=this._initData;this._actualUnit===KERNEL_UNIT.InchFeet?this._precision=void 0!==r?parseInt(r,10):2:this._actualUnit===KERNEL_UNIT.CM&&(this._precision=void 0!==n?parseInt(n,10):1),t.init("mm","cm","'","ft",'"',"inch","m²","sqft",!0,this._precision,!0),this._formatter=t}_initMeasurementSystemType(){let{measurementSystem:e,unit:t}=this._initData;if(this._actualMeasurementString=e,e||!t){if("metric"===e){t||(t="cm");const e=METRIC_UNIT_TYPES.find(e=>e===t);e?(this._actualUnit=this._getKernelUnitEnum(t),this._actualUnitString=e):(console.warn("Unit is not a metric unit, using CM"),this._actualUnit=KERNEL_UNIT.CM,this._actualUnitString="cm")}if("imperial"===e){t||(t="inch");const e=IMPERIAL_UNIT_TYPES.find(e=>e===t);e?(this._actualUnit=this._getKernelUnitEnum(t),this._actualUnitString=e):(console.warn("Unit is not an imperial unit, using Inches"),this._actualUnit=KERNEL_UNIT.Inch,this._actualUnitString="inch")}}else{this._actualUnitString=t;const e=METRIC_UNIT_TYPES.find(e=>e===t);this._actualMeasurementString=e?"metric":"imperial"}}_initActualUnit(){const{unit:e}=this._initData;this._actualUnit=this._getKernelUnitEnum(e)}_getKernelUnitEnum(e){switch(e){case"cm":return KERNEL_UNIT.CM;case"mm":return KERNEL_UNIT.MM;case"inchfeet":return KERNEL_UNIT.InchFeet;case"feet":return KERNEL_UNIT.Feet;case"inch":return KERNEL_UNIT.Inch;default:return KERNEL_UNIT.CM}}_initActualUnitStringType(){const{unitStringType:e}=this._initData;e&&"short"!==e&&console.warn("Only short unit strings is supported at the moment"),this._actualUnitStringType=KERNEL_UNIT_STRING_TYPE.ShortUnitString}_isFormatterReady(){return!!this._formatter||(console.warn("Formatter is not ready..."),!1)}formatAngleValueToUnitString(e,t){const n="Integer"===t.type?0:2;return e.toFixed(n)+"°"}parseAngleValueFromUnitString(e){return e.replace("°","").replace(/\s/g,"")}parseValue(e,t){return null===t.unitType||"unknown"===t.unitType||"count"===t.unitType?e:"length"===t.unitType?this.parseMMValueFromUnitString(e,t.unitType):"angle"===t.unitType||"area"===t.unitType?this.parseAngleValueFromUnitString(e):e}formatValueToUnitString(e,t){return null===t.unitType||"unknown"===t.unitType||"count"===t.unitType?"Integer"===t.type?e.toString():parseFloat(e.toString()).toFixed(2):"length"===t.unitType?this.formatMMValueToUnitString(e,t.unitType):"angle"===t.unitType?this.formatAngleValueToUnitString(e,t):"area"===t.unitType?this.formatSquareMMValueToUnitString(e):e}isParseableNumber(e){return this._isFormatterReady()?this._formatter.isParseableNumber(e):null}isParseableUnitString(e,t){return this._isFormatterReady()?"angle"===t.unitType?this._formatter.isParseableUnitString(this.parseAngleValueFromUnitString(e),this._actualUnit):this._formatter.isParseableUnitString(e,this._actualUnit):null}parseMMValueFromUnitString(e,t){return this._isFormatterReady()?"count"===t?parseFloat(e):this._formatter.parseMMValueFromUnitString(e,this._actualUnit):null}parseNumber(e){return this._isFormatterReady()?this._formatter.parseNumber(e):null}formatNumber(e,t=0){return this._isFormatterReady()?this._formatter.formatNumber(e,t):null}formatSquareMMValueToUnitString(e){return this._isFormatterReady()?this._formatter.formatSquareMMValueToUnitString(e,this._actualUnit):null}formatMMValueToUnitString(e,t){return this._isFormatterReady()?"count"===t?e.toString():this._formatter.formatMMValueToUnitString(e,this._actualUnit,this._actualUnitStringType):null}formatMMValueWithReqMaxLength(e,t){return this._isFormatterReady()?this._formatter.formatMMValueWithReqMaxLength(e,this._actualUnit,t):null}_formatParameterValue(e,t){return"length"===t?this.formatMMValueToUnitString(parseFloat(e)):"area"===t?this.formatSquareMMValueToUnitString(parseFloat(e)):e}formatPartListParameter(e){(function(e){return"length"===e.unitType||"area"===e.unitType})(e)&&(e.valueLabel=this._formatParameterValue(e.value,e.unitType))}formatParameter(e){if(e.valueLabel=this._formatParameterValue(e.value,e.unitType),isMaterial(e))e.uiType="Material";else if(function(e){return"Boolean"===e.type}(e))e.uiType="Boolean";else if(isRange(e)){e.uiType="Range";const t=null!==e.validRange.valueFrom?e.validRange.valueFrom:Number.MIN_SAFE_INTEGER,n=null!==e.validRange.valueTo?e.validRange.valueTo:Number.MAX_SAFE_INTEGER;e.validRangeLabels={valueFrom:this._formatParameterValue(t.toString(),e.unitType),valueTo:this._formatParameterValue(n.toString(),e.unitType),type:e.validRange.type}}else isOptions(e)?(e.uiType="Options",function(e){return!!isOptions(e)&&Array.isArray(e.validValues)&&e.validValues.length>0&&"string"==typeof e.validValues[0].thumbnail}(e)&&(e.uiType="Thumbnails")):(console.error("Could not detect uiType of param"),e.uiType=null)}isInch(){return this._actualUnit===KERNEL_UNIT.InchFeet}getActualUnitString(){return this._actualUnitString}getActualMeasurementString(){return this._actualMeasurementString}getUnitStringType(){return this._initData.unitStringType}getPrecision(){return this._precision}getAllowedDelta(){const e=1/Math.pow(10,this._precision);return this.isInch()?25.4*e:e}setUnitInitData(e,t=""){this._initData.unit=e,this._initData.measurementSystem=t,this._initActualUnit(),this._initMeasurementSystemType(),this._initActualUnitStringType(),this._plannerKernelAccess.kernelInstance.setEnvironmentVariable("unit",this._actualUnitString)}}__decorate([inject],UnitFormatter.prototype,"_initData",void 0),__decorate([inject],UnitFormatter.prototype,"_plannerKernelAccess",void 0);class ConfiguratorHistory{constructor(e){this._history=[],this._index=0,this._creator_=e}undo(){if(!this.canUndo())return null;this._index++;const[e]=this._history.slice(this._index);return this._index===this._history.length-1?this._configuratorUiCallbacks.onHistoryChange(!1,!0):this._configuratorUiCallbacks.onHistoryChange(!0,!0),e}redo(){if(!this.canRedo())return null;this._index--;const[e]=this._history.slice(this._index);return 0===this._index?this._configuratorUiCallbacks.onHistoryChange(!0,!1):this._configuratorUiCallbacks.onHistoryChange(!0,!0),e}push(e){const[t]=this._history.slice(this._index);t!==e&&(this._history=this._history.slice(this._index),this._history.unshift(e),this._index=0,1===this._history.length?this._configuratorUiCallbacks.onHistoryChange(!1,!1):this._configuratorUiCallbacks.onHistoryChange(!0,!1))}canUndo(){return this._index!==this._history.length-1}canRedo(){return 0!==this._index}getHistory(){return this._history}clearHistory(){this._history=[],this._index=0}}__decorate([inject],ConfiguratorHistory.prototype,"_configuratorUiCallbacks",void 0);const PLAN_ELEMENT_CHANGE_TYPES={ADDED:"added",CHANGED:"changed",REMOVED:"removed"};class RoomleToolsCore{constructor(e){this._kernelCallbacks={isReady:()=>{},throw:e=>console.error("Kernel exception",e),log:e=>{},error:(e,t,n,r)=>{},message:e=>{this._analyzeComponentCallback&&this._analyzeComponentCallback(e)}},this._creator_=e}async init(){if(this._toolsCoreInstance)return Promise.resolve();const e=this,t={locateFile:e=>"RoomleToolsCore.wasm"===e?getAssetPath()+"static/RoomleToolsCore-5505b90290ecd5f3.wasm":e,wasmBinaryFile:getAssetPath()+"static/RoomleToolsCore-5505b90290ecd5f3.wasm",preRun:[],postRun:[],setStatus:null,print(t){e._kernelIo.log(t)},printErr(t){e._kernelIo.error(t)},quit(t){0!==t&&e._kernelIo.throw(t&&t.toString?t.toString():"Unknown error while C/C++ main executes")}};await this._scriptLoader.fetch("static/RoomleToolsCore-09b8f5cc8e93df5f.js",{id:"core-tool"});const n=await window.RoomleToolsCore(t);n.setContext(this._kernelCallbacks),this._toolsCoreInstance=new n.ToolsCore}analyzeComponent(e,t){const n=[];return this._analyzeComponentCallback=e=>{n.push(e)},this._toolsCoreInstance.analyzeComponent(e,t),this._analyzeComponentCallback=null,Promise.resolve(n)}}__decorate([inject],RoomleToolsCore.prototype,"_scriptLoader",void 0),__decorate([inject],RoomleToolsCore.prototype,"_kernelIo",void 0);
2
+ /*!
3
+ fflate - fast JavaScript compression/decompression
4
+ <https://101arrowz.github.io/fflate>
5
+ Licensed under MIT. https://github.com/101arrowz/fflate/blob/master/LICENSE
6
+ version 0.6.9
7
+ */
8
+ var durl=function(e){return URL.createObjectURL(new Blob([e],{type:"text/javascript"}))};try{URL.revokeObjectURL(durl(""))}catch(e){durl=function(e){return"data:application/javascript;charset=UTF-8,"+encodeURI(e)}}var u8=Uint8Array,u16=Uint16Array,u32=Uint32Array,fleb=new u8([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),fdeb=new u8([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),clim=new u8([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),freb=function(e,t){for(var n=new u16(31),r=0;r<31;++r)n[r]=t+=1<<e[r-1];var a=new u32(n[30]);for(r=1;r<30;++r)for(var i=n[r];i<n[r+1];++i)a[i]=i-n[r]<<5|r;return[n,a]},_a=freb(fleb,2),fl=_a[0],revfl=_a[1];fl[28]=258,revfl[258]=28;for(var fd=freb(fdeb,0)[0],rev=new u16(32768),i=0;i<32768;++i){var x=(43690&i)>>>1|(21845&i)<<1;x=(61680&(x=(52428&x)>>>2|(13107&x)<<2))>>>4|(3855&x)<<4,rev[i]=((65280&x)>>>8|(255&x)<<8)>>>1}var hMap=function(e,t,n){for(var r=e.length,a=0,i=new u16(t);a<r;++a)++i[e[a]-1];var o,s=new u16(t);for(a=0;a<t;++a)s[a]=s[a-1]+i[a-1]<<1;if(n){o=new u16(1<<t);var l=15-t;for(a=0;a<r;++a)if(e[a])for(var h=a<<4|e[a],d=t-e[a],c=s[e[a]-1]++<<d,u=c|(1<<d)-1;c<=u;++c)o[rev[c]>>>l]=h}else for(o=new u16(r),a=0;a<r;++a)e[a]&&(o[a]=rev[s[e[a]-1]++]>>>15-e[a]);return o},flt=new u8(288);for(i=0;i<144;++i)flt[i]=8;for(i=144;i<256;++i)flt[i]=9;for(i=256;i<280;++i)flt[i]=7;for(i=280;i<288;++i)flt[i]=8;var fdt=new u8(32);for(i=0;i<32;++i)fdt[i]=5;var flrm=hMap(flt,9,1),fdrm=hMap(fdt,5,1),max=function(e){for(var t=e[0],n=1;n<e.length;++n)e[n]>t&&(t=e[n]);return t},bits=function(e,t,n){var r=t/8|0;return(e[r]|e[r+1]<<8)>>(7&t)&n},bits16=function(e,t){var n=t/8|0;return(e[n]|e[n+1]<<8|e[n+2]<<16)>>(7&t)},et=new u8(0);function unzlibSync(e,t){return function(e,t,n){var r=e.length;if(!r||n&&!n.l&&r<5)return t||new u8(0);var a=!t||n,i=!n||n.i;n||(n={}),t||(t=new u8(3*r));var o,s=function(e){var n=t.length;if(e>n){var r=new u8(Math.max(2*n,e));r.set(t),t=r}},l=n.f||0,h=n.p||0,d=n.b||0,c=n.l,u=n.d,p=n.m,m=n.n,g=8*r;do{if(!c){n.f=l=bits(e,h,1);var _=bits(e,h+1,3);if(h+=3,!_){var f=e[(E=((o=h)/8|0)+(7&o&&1)+4)-4]|e[E-3]<<8,v=E+f;if(v>r){if(i)throw"unexpected EOF";break}a&&s(d+f),t.set(e.subarray(E,v),d),n.b=d+=f,n.p=h=8*v;continue}if(1==_)c=flrm,u=fdrm,p=9,m=5;else{if(2!=_)throw"invalid block type";var w=bits(e,h,31)+257,b=bits(e,h+10,15)+4,S=w+bits(e,h+5,31)+1;h+=14;for(var C=new u8(S),y=new u8(19),T=0;T<b;++T)y[clim[T]]=bits(e,h+3*T,7);h+=3*b;var M=max(y),A=(1<<M)-1,x=hMap(y,M,1);for(T=0;T<S;){var E,P=x[bits(e,h,A)];if(h+=15&P,(E=P>>>4)<16)C[T++]=E;else{var R=0,I=0;for(16==E?(I=3+bits(e,h,3),h+=2,R=C[T-1]):17==E?(I=3+bits(e,h,7),h+=3):18==E&&(I=11+bits(e,h,127),h+=7);I--;)C[T++]=R}}var L=C.subarray(0,w),D=C.subarray(w);p=max(L),m=max(D),c=hMap(L,p,1),u=hMap(D,m,1)}if(h>g){if(i)throw"unexpected EOF";break}}a&&s(d+131072);for(var O=(1<<p)-1,k=(1<<m)-1,N=h;;N=h){var B=(R=c[bits16(e,h)&O])>>>4;if((h+=15&R)>g){if(i)throw"unexpected EOF";break}if(!R)throw"invalid length/literal";if(B<256)t[d++]=B;else{if(256==B){N=h,c=null;break}var U=B-254;if(B>264){var F=fleb[T=B-257];U=bits(e,h,(1<<F)-1)+fl[T],h+=F}var G=u[bits16(e,h)&k],V=G>>>4;if(!G)throw"invalid distance";if(h+=15&G,D=fd[V],V>3&&(F=fdeb[V],D+=bits16(e,h)&(1<<F)-1,h+=F),h>g){if(i)throw"unexpected EOF";break}a&&s(d+131072);for(var H=d+U;d<H;d+=4)t[d]=t[d-D],t[d+1]=t[d+1-D],t[d+2]=t[d+2-D],t[d+3]=t[d+3-D];d=H}}n.l=c,n.p=N,n.b=d,c&&(l=1,n.m=p,n.d=u,n.n=m)}while(!l);return d==t.length?t:function(e,t,n){(null==t||t<0)&&(t=0),(null==n||n>e.length)&&(n=e.length);var r=new(e instanceof u16?u16:e instanceof u32?u32:u8)(n-t);return r.set(e.subarray(t,n)),r}(t,0,d)}((function(e){if(8!=(15&e[0])||e[0]>>>4>7||(e[0]<<8|e[1])%31)throw"invalid zlib data";if(32&e[1])throw"invalid zlib data: preset dictionaries not supported"}(e),e.subarray(2,-4)),t)}var td="undefined"!=typeof TextDecoder&&new TextDecoder;try{td.decode(et,{stream:!0})}catch(e){}class EXRLoader extends DataTextureLoader{constructor(e){super(e),this.type=HalfFloatType}parse(e){const t=Math.pow(2.7182818,2.2),n={l:0,c:0,lc:0};function r(e,t,r,a,i){for(;r<e;)t=t<<8|O(a,i),r+=8;r-=e,n.l=t>>r&(1<<e)-1,n.c=t,n.lc=r}const a=new Array(59);function i(e){return 63&e}function o(e){return e>>6}const s={c:0,lc:0};function l(e,t,n,r){e=e<<8|O(n,r),t+=8,s.c=e,s.lc=t}const h={c:0,lc:0};function d(e,t,n,r,a,i,o,d,c){if(e==t){r<8&&(l(n,r,a,i),n=s.c,r=s.lc);let e=n>>(r-=8);if(e=new Uint8Array([e])[0],d.value+e>c)return!1;const t=o[d.value-1];for(;e-- >0;)o[d.value++]=t}else{if(!(d.value<c))return!1;o[d.value++]=e}h.c=n,h.lc=r}function c(e){return 65535&e}function u(e){const t=c(e);return t>32767?t-65536:t}const p={a:0,b:0};function m(e,t){const n=u(e),r=u(t),a=n+(1&r)+(r>>1),i=a,o=a-r;p.a=i,p.b=o}function g(e,t){const n=c(e),r=c(t),a=n-(r>>1)&65535,i=r+a-32768&65535;p.a=i,p.b=a}function _(e,t,n,r,a,i,o){const s=o<16384,l=n>a?a:n;let h,d,c=1;for(;c<=l;)c<<=1;for(c>>=1,h=c,c>>=1;c>=1;){d=0;const o=d+i*(a-h),l=i*c,u=i*h,_=r*c,f=r*h;let v,w,b,S;for(;d<=o;d+=u){let a=d;const i=d+r*(n-h);for(;a<=i;a+=f){const n=a+_,r=a+l,i=r+_;s?(m(e[a+t],e[r+t]),v=p.a,b=p.b,m(e[n+t],e[i+t]),w=p.a,S=p.b,m(v,w),e[a+t]=p.a,e[n+t]=p.b,m(b,S),e[r+t]=p.a,e[i+t]=p.b):(g(e[a+t],e[r+t]),v=p.a,b=p.b,g(e[n+t],e[i+t]),w=p.a,S=p.b,g(v,w),e[a+t]=p.a,e[n+t]=p.b,g(b,S),e[r+t]=p.a,e[i+t]=p.b)}if(n&c){const n=a+l;s?m(e[a+t],e[n+t]):g(e[a+t],e[n+t]),v=p.a,e[n+t]=p.b,e[a+t]=v}}if(a&c){let a=d;const i=d+r*(n-h);for(;a<=i;a+=f){const n=a+_;s?m(e[a+t],e[n+t]):g(e[a+t],e[n+t]),v=p.a,e[n+t]=p.b,e[a+t]=v}}h=c,c>>=1}return d}function f(e,t,c,u,p,m){const g=c.value,_=D(t,c),f=D(t,c);c.value+=4;const v=D(t,c);if(c.value+=4,_<0||_>=65537||f<0||f>=65537)throw new Error("Something wrong with HUF_ENCSIZE");const w=new Array(65537),b=new Array(16384);if(function(e){for(let t=0;t<16384;t++)e[t]={},e[t].len=0,e[t].lit=0,e[t].p=null}(b),function(e,t,i,o,s,l){const h=t;let d=0,c=0;for(;o<=s;o++){if(h.value-t.value>i)return!1;r(6,d,c,e,h);const a=n.l;if(d=n.c,c=n.lc,l[o]=a,63==a){if(h.value-t.value>i)throw new Error("Something wrong with hufUnpackEncTable");r(8,d,c,e,h);let a=n.l+6;if(d=n.c,c=n.lc,o+a>s+1)throw new Error("Something wrong with hufUnpackEncTable");for(;a--;)l[o++]=0;o--}else if(a>=59){let e=a-59+2;if(o+e>s+1)throw new Error("Something wrong with hufUnpackEncTable");for(;e--;)l[o++]=0;o--}}!function(e){for(let e=0;e<=58;++e)a[e]=0;for(let t=0;t<65537;++t)a[e[t]]+=1;let t=0;for(let e=58;e>0;--e){const n=t+a[e]>>1;a[e]=t,t=n}for(let t=0;t<65537;++t){const n=e[t];n>0&&(e[t]=n|a[n]++<<6)}}(l)}(e,c,u-(c.value-g),_,f,w),v>8*(u-(c.value-g)))throw new Error("Something wrong with hufUncompress");!function(e,t,n,r){for(;t<=n;t++){const n=o(e[t]),a=i(e[t]);if(n>>a)throw new Error("Invalid table entry");if(a>14){const e=r[n>>a-14];if(e.len)throw new Error("Invalid table entry");if(e.lit++,e.p){const t=e.p;e.p=new Array(e.lit);for(let n=0;n<e.lit-1;++n)e.p[n]=t[n]}else e.p=new Array(1);e.p[e.lit-1]=t}else if(a){let e=0;for(let i=1<<14-a;i>0;i--){const i=r[(n<<14-a)+e];if(i.len||i.p)throw new Error("Invalid table entry");i.len=a,i.lit=t,e++}}}}(w,_,f,b),function(e,t,n,r,a,c,u,p,m){let g=0,_=0;const f=u,v=Math.trunc(r.value+(a+7)/8);for(;r.value<v;)for(l(g,_,n,r),g=s.c,_=s.lc;_>=14;){const a=t[g>>_-14&16383];if(a.len)_-=a.len,d(a.lit,c,g,_,n,r,p,m,f),g=h.c,_=h.lc;else{if(!a.p)throw new Error("hufDecode issues");let t;for(t=0;t<a.lit;t++){const u=i(e[a.p[t]]);for(;_<u&&r.value<v;)l(g,_,n,r),g=s.c,_=s.lc;if(_>=u&&o(e[a.p[t]])==(g>>_-u&(1<<u)-1)){_-=u,d(a.p[t],c,g,_,n,r,p,m,f),g=h.c,_=h.lc;break}}if(t==a.lit)throw new Error("hufDecode issues")}}const w=8-a&7;for(g>>=w,_-=w;_>0;){const e=t[g<<14-_&16383];if(!e.len)throw new Error("hufDecode issues");_-=e.len,d(e.lit,c,g,_,n,r,p,m,f),g=h.c,_=h.lc}}(w,b,e,c,v,f,m,p,{value:0})}function v(e){for(let t=1;t<e.length;t++){const n=e[t-1]+e[t]-128;e[t]=n}}function w(e,t){let n=0,r=Math.floor((e.length+1)/2),a=0;const i=e.length-1;for(;!(a>i||(t[a++]=e[n++],a>i));)t[a++]=e[r++]}function b(e){let t=e.byteLength;const n=new Array;let r=0;const a=new DataView(e);for(;t>0;){const e=a.getInt8(r++);if(e<0){const i=-e;t-=i+1;for(let e=0;e<i;e++)n.push(a.getUint8(r++))}else{const i=e;t-=2;const o=a.getUint8(r++);for(let e=0;e<i+1;e++)n.push(o)}}return n}function S(e,t,n){let r,a=1;for(;a<64;)r=t[e.value],65280==r?a=64:r>>8==255?a+=255&r:(n[a]=r,a++),e.value++}function C(e){const t=.5*Math.cos(.7853975),n=.5*Math.cos(3.14159/16),r=.5*Math.cos(3.14159/8),a=.5*Math.cos(3*3.14159/16),i=.5*Math.cos(.981746875),o=.5*Math.cos(3*3.14159/8),s=.5*Math.cos(1.374445625),l=new Array(4),h=new Array(4),d=new Array(4),c=new Array(4);for(let u=0;u<8;++u){const p=8*u;l[0]=r*e[p+2],l[1]=o*e[p+2],l[2]=r*e[p+6],l[3]=o*e[p+6],h[0]=n*e[p+1]+a*e[p+3]+i*e[p+5]+s*e[p+7],h[1]=a*e[p+1]-s*e[p+3]-n*e[p+5]-i*e[p+7],h[2]=i*e[p+1]-n*e[p+3]+s*e[p+5]+a*e[p+7],h[3]=s*e[p+1]-i*e[p+3]+a*e[p+5]-n*e[p+7],d[0]=t*(e[p+0]+e[p+4]),d[3]=t*(e[p+0]-e[p+4]),d[1]=l[0]+l[3],d[2]=l[1]-l[2],c[0]=d[0]+d[1],c[1]=d[3]+d[2],c[2]=d[3]-d[2],c[3]=d[0]-d[1],e[p+0]=c[0]+h[0],e[p+1]=c[1]+h[1],e[p+2]=c[2]+h[2],e[p+3]=c[3]+h[3],e[p+4]=c[3]-h[3],e[p+5]=c[2]-h[2],e[p+6]=c[1]-h[1],e[p+7]=c[0]-h[0]}for(let u=0;u<8;++u)l[0]=r*e[16+u],l[1]=o*e[16+u],l[2]=r*e[48+u],l[3]=o*e[48+u],h[0]=n*e[8+u]+a*e[24+u]+i*e[40+u]+s*e[56+u],h[1]=a*e[8+u]-s*e[24+u]-n*e[40+u]-i*e[56+u],h[2]=i*e[8+u]-n*e[24+u]+s*e[40+u]+a*e[56+u],h[3]=s*e[8+u]-i*e[24+u]+a*e[40+u]-n*e[56+u],d[0]=t*(e[u]+e[32+u]),d[3]=t*(e[u]-e[32+u]),d[1]=l[0]+l[3],d[2]=l[1]-l[2],c[0]=d[0]+d[1],c[1]=d[3]+d[2],c[2]=d[3]-d[2],c[3]=d[0]-d[1],e[0+u]=c[0]+h[0],e[8+u]=c[1]+h[1],e[16+u]=c[2]+h[2],e[24+u]=c[3]+h[3],e[32+u]=c[3]-h[3],e[40+u]=c[2]-h[2],e[48+u]=c[1]-h[1],e[56+u]=c[0]-h[0]}function y(e){for(let t=0;t<64;++t){const n=e[0][t],r=e[1][t],a=e[2][t];e[0][t]=n+1.5747*a,e[1][t]=n-.1873*r-.4682*a,e[2][t]=n+1.8556*r}}function T(e,n,r){for(let i=0;i<64;++i)n[r+i]=DataUtils.toHalfFloat((a=e[i])<=1?Math.sign(a)*Math.pow(Math.abs(a),2.2):Math.sign(a)*Math.pow(t,Math.abs(a)-1));var a}function M(e){return new DataView(e.array.buffer,e.offset.value,e.size)}function A(e){const t=e.viewer.buffer.slice(e.offset.value,e.offset.value+e.size),n=new Uint8Array(b(t)),r=new Uint8Array(n.length);return v(n),w(n,r),new DataView(r.buffer)}function x(e){const t=unzlibSync(e.array.slice(e.offset.value,e.offset.value+e.size)),n=new Uint8Array(t.length);return v(t),w(t,n),new DataView(n.buffer)}function E(e){const t=e.viewer,n={value:e.offset.value},r=new Uint16Array(e.width*e.scanlineBlockSize*(e.channels*e.type)),a=new Uint8Array(8192);let i=0;const o=new Array(e.channels);for(let t=0;t<e.channels;t++)o[t]={},o[t].start=i,o[t].end=o[t].start,o[t].nx=e.width,o[t].ny=e.lines,o[t].size=e.type,i+=o[t].nx*o[t].ny*o[t].size;const s=G(t,n),l=G(t,n);if(l>=8192)throw new Error("Something is wrong with PIZ_COMPRESSION BITMAP_SIZE");if(s<=l)for(let e=0;e<l-s+1;e++)a[e+s]=k(t,n);const h=new Uint16Array(65536),d=function(e,t){let n=0;for(let r=0;r<65536;++r)(0==r||e[r>>3]&1<<(7&r))&&(t[n++]=r);const r=n-1;for(;n<65536;)t[n++]=0;return r}(a,h),c=D(t,n);f(e.array,t,n,c,r,i);for(let t=0;t<e.channels;++t){const e=o[t];for(let n=0;n<o[t].size;++n)_(r,e.start+n,e.nx,e.size,e.ny,e.nx*e.size,d)}!function(e,t,n){for(let r=0;r<n;++r)t[r]=e[t[r]]}(h,r,i);let u=0;const p=new Uint8Array(r.buffer.byteLength);for(let t=0;t<e.lines;t++)for(let t=0;t<e.channels;t++){const e=o[t],n=e.nx*e.size,a=new Uint8Array(r.buffer,2*e.end,2*n);p.set(a,u),u+=2*n,e.end+=n}return new DataView(p.buffer)}function P(e){const t=unzlibSync(e.array.slice(e.offset.value,e.offset.value+e.size)),n=e.lines*e.channels*e.width,r=1==e.type?new Uint16Array(n):new Uint32Array(n);let a=0,i=0;const o=new Array(4);for(let n=0;n<e.lines;n++)for(let n=0;n<e.channels;n++){let n=0;switch(e.type){case 1:o[0]=a,o[1]=o[0]+e.width,a=o[1]+e.width;for(let a=0;a<e.width;++a)n+=t[o[0]++]<<8|t[o[1]++],r[i]=n,i++;break;case 2:o[0]=a,o[1]=o[0]+e.width,o[2]=o[1]+e.width,a=o[2]+e.width;for(let a=0;a<e.width;++a)n+=t[o[0]++]<<24|t[o[1]++]<<16|t[o[2]++]<<8,r[i]=n,i++}}return new DataView(r.buffer)}function R(e){const t=e.viewer,n={value:e.offset.value},r=new Uint8Array(e.width*e.lines*(e.channels*e.type*2)),a={version:N(t,n),unknownUncompressedSize:N(t,n),unknownCompressedSize:N(t,n),acCompressedSize:N(t,n),dcCompressedSize:N(t,n),rleCompressedSize:N(t,n),rleUncompressedSize:N(t,n),rleRawSize:N(t,n),totalAcUncompressedCount:N(t,n),totalDcUncompressedCount:N(t,n),acCompression:N(t,n)};if(a.version<2)throw new Error("EXRLoader.parse: "+K.compression+" version "+a.version+" is unsupported");const i=new Array;let o=G(t,n)-2;for(;o>0;){const e=I(t.buffer,n),r=k(t,n),a=r>>2&3,s=new Int8Array([(r>>4)-1])[0],l=k(t,n);i.push({name:e,index:s,type:l,compression:a}),o-=e.length+3}const s=K.channels,l=new Array(e.channels);for(let t=0;t<e.channels;++t){const n=l[t]={},r=s[t];n.name=r.name,n.compression=0,n.decoded=!1,n.type=r.pixelType,n.pLinear=r.pLinear,n.width=e.width,n.height=e.lines}const h={idx:new Array(3)};for(let t=0;t<e.channels;++t){const e=l[t];for(let n=0;n<i.length;++n){const r=i[n];e.name==r.name&&(e.compression=r.compression,r.index>=0&&(h.idx[r.index]=t),e.offset=t)}}let d,c,u;if(a.acCompressedSize>0)switch(a.acCompression){case 0:d=new Uint16Array(a.totalAcUncompressedCount),f(e.array,t,n,a.acCompressedSize,d,a.totalAcUncompressedCount);break;case 1:const r=unzlibSync(e.array.slice(n.value,n.value+a.totalAcUncompressedCount));d=new Uint16Array(r.buffer),n.value+=a.totalAcUncompressedCount}if(a.dcCompressedSize>0){const t={array:e.array,offset:n,size:a.dcCompressedSize};c=new Uint16Array(x(t).buffer),n.value+=a.dcCompressedSize}a.rleRawSize>0&&(u=b(unzlibSync(e.array.slice(n.value,n.value+a.rleCompressedSize)).buffer),n.value+=a.rleCompressedSize);let p=0;const m=new Array(l.length);for(let e=0;e<m.length;++e)m[e]=new Array;for(let t=0;t<e.lines;++t)for(let t=0;t<l.length;++t)m[t].push(p),p+=l[t].width*e.type*2;!function(e,t,n,r,a,i){let o=new DataView(i.buffer);const s=n[e.idx[0]].width,l=n[e.idx[0]].height,h=Math.floor(s/8),d=Math.ceil(s/8),c=Math.ceil(l/8),u=s-8*(d-1),p=l-8*(c-1),m={value:0},g=new Array(3),_=new Array(3),f=new Array(3),v=new Array(3),w=new Array(3);for(let n=0;n<3;++n)w[n]=t[e.idx[n]],g[n]=n<1?0:g[n-1]+d*c,_[n]=new Float32Array(64),f[n]=new Uint16Array(64),v[n]=new Uint16Array(64*d);for(let t=0;t<c;++t){let i=8;t==c-1&&(i=p);let s=8;for(let e=0;e<d;++e){e==d-1&&(s=u);for(let e=0;e<3;++e)f[e].fill(0),f[e][0]=a[g[e]++],S(m,r,f[e]),b=f[e],(M=_[e])[0]=F(b[0]),M[1]=F(b[1]),M[2]=F(b[5]),M[3]=F(b[6]),M[4]=F(b[14]),M[5]=F(b[15]),M[6]=F(b[27]),M[7]=F(b[28]),M[8]=F(b[2]),M[9]=F(b[4]),M[10]=F(b[7]),M[11]=F(b[13]),M[12]=F(b[16]),M[13]=F(b[26]),M[14]=F(b[29]),M[15]=F(b[42]),M[16]=F(b[3]),M[17]=F(b[8]),M[18]=F(b[12]),M[19]=F(b[17]),M[20]=F(b[25]),M[21]=F(b[30]),M[22]=F(b[41]),M[23]=F(b[43]),M[24]=F(b[9]),M[25]=F(b[11]),M[26]=F(b[18]),M[27]=F(b[24]),M[28]=F(b[31]),M[29]=F(b[40]),M[30]=F(b[44]),M[31]=F(b[53]),M[32]=F(b[10]),M[33]=F(b[19]),M[34]=F(b[23]),M[35]=F(b[32]),M[36]=F(b[39]),M[37]=F(b[45]),M[38]=F(b[52]),M[39]=F(b[54]),M[40]=F(b[20]),M[41]=F(b[22]),M[42]=F(b[33]),M[43]=F(b[38]),M[44]=F(b[46]),M[45]=F(b[51]),M[46]=F(b[55]),M[47]=F(b[60]),M[48]=F(b[21]),M[49]=F(b[34]),M[50]=F(b[37]),M[51]=F(b[47]),M[52]=F(b[50]),M[53]=F(b[56]),M[54]=F(b[59]),M[55]=F(b[61]),M[56]=F(b[35]),M[57]=F(b[36]),M[58]=F(b[48]),M[59]=F(b[49]),M[60]=F(b[57]),M[61]=F(b[58]),M[62]=F(b[62]),M[63]=F(b[63]),C(_[e]);y(_);for(let t=0;t<3;++t)T(_[t],v[t],64*e)}let l=0;for(let r=0;r<3;++r){const a=n[e.idx[r]].type;for(let e=8*t;e<8*t+i;++e){l=w[r][e];for(let t=0;t<h;++t){const n=64*t+8*(7&e);o.setUint16(l+0*a,v[r][n+0],!0),o.setUint16(l+2*a,v[r][n+1],!0),o.setUint16(l+4*a,v[r][n+2],!0),o.setUint16(l+6*a,v[r][n+3],!0),o.setUint16(l+8*a,v[r][n+4],!0),o.setUint16(l+10*a,v[r][n+5],!0),o.setUint16(l+12*a,v[r][n+6],!0),o.setUint16(l+14*a,v[r][n+7],!0),l+=16*a}}if(h!=d)for(let e=8*t;e<8*t+i;++e){const t=w[r][e]+8*h*2*a,n=64*h+8*(7&e);for(let e=0;e<s;++e)o.setUint16(t+2*e*a,v[r][n+e],!0)}}}var b,M;const A=new Uint16Array(s);o=new DataView(i.buffer);for(let t=0;t<3;++t){n[e.idx[t]].decoded=!0;const r=n[e.idx[t]].type;if(2==n[t].type)for(let e=0;e<l;++e){const n=w[t][e];for(let e=0;e<s;++e)A[e]=o.getUint16(n+2*e*r,!0);for(let e=0;e<s;++e)o.setFloat32(n+2*e*r,F(A[e]),!0)}}}(h,m,l,d,c,r);for(let t=0;t<l.length;++t){const n=l[t];if(!n.decoded)switch(n.compression){case 2:let a=0,i=0;for(let o=0;o<e.lines;++o){let e=m[t][a];for(let t=0;t<n.width;++t){for(let t=0;t<2*n.type;++t)r[e++]=u[i+t*n.width*n.height];i++}a++}break;case 1:default:throw new Error("EXRLoader.parse: unsupported channel compression")}}return new DataView(r.buffer)}function I(e,t){const n=new Uint8Array(e);let r=0;for(;0!=n[t.value+r];)r+=1;const a=(new TextDecoder).decode(n.slice(t.value,t.value+r));return t.value=t.value+r+1,a}function L(e,t){const n=e.getInt32(t.value,!0);return t.value=t.value+4,n}function D(e,t){const n=e.getUint32(t.value,!0);return t.value=t.value+4,n}function O(e,t){const n=e[t.value];return t.value=t.value+1,n}function k(e,t){const n=e.getUint8(t.value);return t.value=t.value+1,n}const N=function(e,t){let n;return n="getBigInt64"in DataView.prototype?Number(e.getBigInt64(t.value,!0)):e.getUint32(t.value+4,!0)+Number(e.getUint32(t.value,!0)<<32),t.value+=8,n};function B(e,t){const n=e.getFloat32(t.value,!0);return t.value+=4,n}function U(e,t){return DataUtils.toHalfFloat(B(e,t))}function F(e){const t=(31744&e)>>10,n=1023&e;return(e>>15?-1:1)*(t?31===t?n?NaN:1/0:Math.pow(2,t-15)*(1+n/1024):n/1024*6103515625e-14)}function G(e,t){const n=e.getUint16(t.value,!0);return t.value+=2,n}function V(e,t){return F(G(e,t))}function H(e,t,n,r,a){return"string"===r||"stringvector"===r||"iccProfile"===r?function(e,t,n){const r=(new TextDecoder).decode(new Uint8Array(e).slice(t.value,t.value+n));return t.value=t.value+n,r}(t,n,a):"chlist"===r?function(e,t,n,r){const a=n.value,i=[];for(;n.value<a+r-1;){const r=I(t,n),a=L(e,n),o=k(e,n);n.value+=3;const s=L(e,n),l=L(e,n);i.push({name:r,pixelType:a,pLinear:o,xSampling:s,ySampling:l})}return n.value+=1,i}(e,t,n,a):"chromaticities"===r?function(e,t){return{redX:B(e,t),redY:B(e,t),greenX:B(e,t),greenY:B(e,t),blueX:B(e,t),blueY:B(e,t),whiteX:B(e,t),whiteY:B(e,t)}}(e,n):"compression"===r?function(e,t){return["NO_COMPRESSION","RLE_COMPRESSION","ZIPS_COMPRESSION","ZIP_COMPRESSION","PIZ_COMPRESSION","PXR24_COMPRESSION","B44_COMPRESSION","B44A_COMPRESSION","DWAA_COMPRESSION","DWAB_COMPRESSION"][k(e,t)]}(e,n):"box2i"===r?function(e,t){return{xMin:D(e,t),yMin:D(e,t),xMax:D(e,t),yMax:D(e,t)}}(e,n):"lineOrder"===r?function(e,t){return["INCREASING_Y"][k(e,t)]}(e,n):"float"===r?B(e,n):"v2f"===r?function(e,t){return[B(e,t),B(e,t)]}(e,n):"v3f"===r?function(e,t){return[B(e,t),B(e,t),B(e,t)]}(e,n):"int"===r?L(e,n):"rational"===r?function(e,t){return[L(e,t),D(e,t)]}(e,n):"timecode"===r?function(e,t){return[D(e,t),D(e,t)]}(e,n):"preview"===r?(n.value+=a,"skipped"):void(n.value+=a)}const j=new DataView(e),z=new Uint8Array(e),W={value:0},K=function(e,t,n){const r={};if(20000630!=e.getUint32(0,!0))throw new Error("THREE.EXRLoader: Provided file doesn't appear to be in OpenEXR format.");r.version=e.getUint8(4);const a=e.getUint8(5);r.spec={singleTile:!!(2&a),longName:!!(4&a),deepFormat:!!(8&a),multiPart:!!(16&a)},n.value=8;let i=!0;for(;i;){const a=I(t,n);if(0==a)i=!1;else{const i=I(t,n),o=H(e,t,n,i,D(e,n));void 0===o?console.warn(`THREE.EXRLoader: Skipped unknown header attribute type '${i}'.`):r[a]=o}}if(0!=(-5&a))throw console.error("THREE.EXRHeader:",r),new Error("THREE.EXRLoader: Provided file is currently unsupported.");return r}(j,e,W),q=function(e,t,n,r,a){const i={size:0,viewer:t,array:n,offset:r,width:e.dataWindow.xMax-e.dataWindow.xMin+1,height:e.dataWindow.yMax-e.dataWindow.yMin+1,channels:e.channels.length,bytesPerLine:null,lines:null,inputSize:null,type:e.channels[0].pixelType,uncompress:null,getter:null,format:null,colorSpace:LinearSRGBColorSpace};switch(e.compression){case"NO_COMPRESSION":i.lines=1,i.uncompress=M;break;case"RLE_COMPRESSION":i.lines=1,i.uncompress=A;break;case"ZIPS_COMPRESSION":i.lines=1,i.uncompress=x;break;case"ZIP_COMPRESSION":i.lines=16,i.uncompress=x;break;case"PIZ_COMPRESSION":i.lines=32,i.uncompress=E;break;case"PXR24_COMPRESSION":i.lines=16,i.uncompress=P;break;case"DWAA_COMPRESSION":i.lines=32,i.uncompress=R;break;case"DWAB_COMPRESSION":i.lines=256,i.uncompress=R;break;default:throw new Error("EXRLoader.parse: "+e.compression+" is unsupported")}if(i.scanlineBlockSize=i.lines,1==i.type)switch(a){case FloatType:i.getter=V,i.inputSize=2;break;case HalfFloatType:i.getter=G,i.inputSize=2}else{if(2!=i.type)throw new Error("EXRLoader.parse: unsupported pixelType "+i.type+" for "+e.compression+".");switch(a){case FloatType:i.getter=B,i.inputSize=4;break;case HalfFloatType:i.getter=U,i.inputSize=4}}i.blockCount=(e.dataWindow.yMax+1)/i.scanlineBlockSize;for(let e=0;e<i.blockCount;e++)N(t,r);i.outputChannels=3==i.channels?4:i.channels;const o=i.width*i.height*i.outputChannels;switch(a){case FloatType:i.byteArray=new Float32Array(o),i.channels<i.outputChannels&&i.byteArray.fill(1,0,o);break;case HalfFloatType:i.byteArray=new Uint16Array(o),i.channels<i.outputChannels&&i.byteArray.fill(15360,0,o);break;default:console.error("THREE.EXRLoader: unsupported type: ",a)}return i.bytesPerLine=i.width*i.inputSize*i.channels,4==i.outputChannels?(i.format=RGBAFormat,i.colorSpace=LinearSRGBColorSpace):(i.format=RedFormat,i.colorSpace=NoColorSpace),i}(K,j,z,W,this.type),X={value:0},Y={R:0,G:1,B:2,A:3,Y:0};for(let e=0;e<q.height/q.scanlineBlockSize;e++){const t=D(j,W);q.size=D(j,W),q.lines=t+q.scanlineBlockSize>q.height?q.height-t:q.scanlineBlockSize;const n=q.size<q.lines*q.bytesPerLine?q.uncompress(q):M(q);W.value+=q.size;for(let t=0;t<q.scanlineBlockSize;t++){const r=t+e*q.scanlineBlockSize;if(r>=q.height)break;for(let e=0;e<q.channels;e++){const a=Y[K.channels[e].name];for(let i=0;i<q.width;i++){X.value=(t*(q.channels*q.width)+e*q.width+i)*q.inputSize;const o=(q.height-1-r)*(q.width*q.outputChannels)+i*q.outputChannels+a;q.byteArray[o]=q.getter(n,X)}}}}return{header:K,width:q.width,height:q.height,data:q.byteArray,format:q.format,colorSpace:q.colorSpace,type:this.type}}setDataType(e){return this.type=e,this}load(e,t,n,r){return super.load(e,(function(e,n){e.colorSpace=n.colorSpace,e.minFilter=LinearFilter,e.magFilter=LinearFilter,e.generateMipmaps=!1,e.flipY=!1,t&&t(e,n)}),n,r)}}class RGBELoader extends DataTextureLoader{constructor(e){super(e),this.type=HalfFloatType}parse(e){const t=function(e,t){switch(e){case 1:throw new Error("THREE.RGBELoader: Read Error: "+(t||""));case 2:throw new Error("THREE.RGBELoader: Write Error: "+(t||""));case 3:throw new Error("THREE.RGBELoader: Bad File Format: "+(t||""));default:case 4:throw new Error("THREE.RGBELoader: Memory Error: "+(t||""))}},n=function(e,t,n){t=t||1024;let r=e.pos,a=-1,i=0,o="",s=String.fromCharCode.apply(null,new Uint16Array(e.subarray(r,r+128)));for(;0>(a=s.indexOf("\n"))&&i<t&&r<e.byteLength;)o+=s,i+=s.length,r+=128,s+=String.fromCharCode.apply(null,new Uint16Array(e.subarray(r,r+128)));return-1<a&&(!1!==n&&(e.pos+=i+a+1),o+s.slice(0,a))},r=function(e,t,n,r){const a=e[t+3],i=Math.pow(2,a-128)/255;n[r+0]=e[t+0]*i,n[r+1]=e[t+1]*i,n[r+2]=e[t+2]*i,n[r+3]=1},a=function(e,t,n,r){const a=e[t+3],i=Math.pow(2,a-128)/255;n[r+0]=DataUtils.toHalfFloat(Math.min(e[t+0]*i,65504)),n[r+1]=DataUtils.toHalfFloat(Math.min(e[t+1]*i,65504)),n[r+2]=DataUtils.toHalfFloat(Math.min(e[t+2]*i,65504)),n[r+3]=DataUtils.toHalfFloat(1)},i=new Uint8Array(e);i.pos=0;const o=function(e){const r=/^\s*GAMMA\s*=\s*(\d+(\.\d+)?)\s*$/,a=/^\s*EXPOSURE\s*=\s*(\d+(\.\d+)?)\s*$/,i=/^\s*FORMAT=(\S+)\s*$/,o=/^\s*\-Y\s+(\d+)\s+\+X\s+(\d+)\s*$/,s={valid:0,string:"",comments:"",programtype:"RGBE",format:"",gamma:1,exposure:1,width:0,height:0};let l,h;for((e.pos>=e.byteLength||!(l=n(e)))&&t(1,"no header found"),(h=l.match(/^#\?(\S+)/))||t(3,"bad initial token"),s.valid|=1,s.programtype=h[1],s.string+=l+"\n";l=n(e),!1!==l;)if(s.string+=l+"\n","#"!==l.charAt(0)){if((h=l.match(r))&&(s.gamma=parseFloat(h[1])),(h=l.match(a))&&(s.exposure=parseFloat(h[1])),(h=l.match(i))&&(s.valid|=2,s.format=h[1]),(h=l.match(o))&&(s.valid|=4,s.height=parseInt(h[1],10),s.width=parseInt(h[2],10)),2&s.valid&&4&s.valid)break}else s.comments+=l+"\n";return 2&s.valid||t(3,"missing format specifier"),4&s.valid||t(3,"missing image size specifier"),s}(i),s=o.width,l=o.height,h=function(e,n,r){const a=n;if(a<8||a>32767||2!==e[0]||2!==e[1]||128&e[2])return new Uint8Array(e);a!==(e[2]<<8|e[3])&&t(3,"wrong scanline width");const i=new Uint8Array(4*n*r);i.length||t(4,"unable to allocate buffer space");let o=0,s=0;const l=4*a,h=new Uint8Array(4),d=new Uint8Array(l);let c=r;for(;c>0&&s<e.byteLength;){s+4>e.byteLength&&t(1),h[0]=e[s++],h[1]=e[s++],h[2]=e[s++],h[3]=e[s++],2==h[0]&&2==h[1]&&(h[2]<<8|h[3])==a||t(3,"bad rgbe scanline format");let n,r=0;for(;r<l&&s<e.byteLength;){n=e[s++];const a=n>128;if(a&&(n-=128),(0===n||r+n>l)&&t(3,"bad scanline data"),a){const t=e[s++];for(let e=0;e<n;e++)d[r++]=t}else d.set(e.subarray(s,s+n),r),r+=n,s+=n}const u=a;for(let e=0;e<u;e++){let t=0;i[o]=d[e+t],t+=a,i[o+1]=d[e+t],t+=a,i[o+2]=d[e+t],t+=a,i[o+3]=d[e+t],o+=4}c--}return i}(i.subarray(i.pos),s,l);let d,c,u;switch(this.type){case FloatType:u=h.length/4;const e=new Float32Array(4*u);for(let t=0;t<u;t++)r(h,4*t,e,4*t);d=e,c=FloatType;break;case HalfFloatType:u=h.length/4;const t=new Uint16Array(4*u);for(let e=0;e<u;e++)a(h,4*e,t,4*e);d=t,c=HalfFloatType;break;default:throw new Error("THREE.RGBELoader: Unsupported type: "+this.type)}return{width:s,height:l,data:d,header:o.string,gamma:o.gamma,exposure:o.exposure,type:c}}setDataType(e){return this.type=e,this}load(e,t,n,r){return super.load(e,(function(e,n){switch(e.type){case FloatType:case HalfFloatType:e.colorSpace=LinearSRGBColorSpace,e.minFilter=LinearFilter,e.magFilter=LinearFilter,e.generateMipmaps=!1,e.flipY=!0}t&&t(e,n)}),n,r)}}const CopyTransformShader={uniforms:{tDiffuse:{value:null},colorTransform:{value:new Matrix4},colorBase:{value:new Vector4(0,0,0,0)},multiplyChannels:{value:0},uvTransform:{value:new Matrix3}},vertexShader:"\n varying vec2 vUv;\n uniform mat3 uvTransform;\n \n void main() {\n vUv = (uvTransform * vec3(uv, 1.0)).xy;\n gl_Position = (projectionMatrix * modelViewMatrix * vec4(position, 1.0)).xyww;\n }",fragmentShader:"\n uniform sampler2D tDiffuse;\n uniform mat4 colorTransform;\n uniform vec4 colorBase;\n uniform float multiplyChannels;\n varying vec2 vUv;\n \n void main() {\n vec4 color = colorTransform * texture2D(tDiffuse, vUv) + colorBase;\n color.rgb = mix(color.rgb, vec3(color.r * color.g * color.b), multiplyChannels);\n gl_FragColor = color;\n }"},DEFAULT_TRANSFORM=new Matrix4,RGB_TRANSFORM=(new Matrix4).set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0),ALPHA_TRANSFORM=(new Matrix4).set(0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0),RED_TRANSFORM=(new Matrix4).set(1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1),GRAYSCALE_TRANSFORM=(new Matrix4).set(1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1),ZERO_RGBA=new Vector4(0,0,0,0),ALPHA_RGBA=new Vector4(0,0,0,1),DEFAULT_UV_TRANSFORM=new Matrix3,FLIP_Y_UV_TRANSFORM=(new Matrix3).set(1,0,0,0,-1,1,0,0,1),interpolationMatrix=(e,t,n,r)=>(new Matrix4).set(e,0,0,1-e,0,t,0,1-t,0,0,n,1-n,0,0,0,r);var CopyMaterialBlendMode;!function(e){e[e.DEFAULT=0]="DEFAULT",e[e.ADDITIVE=1]="ADDITIVE"}(CopyMaterialBlendMode||(CopyMaterialBlendMode={}));class CopyTransformMaterial extends ShaderMaterial{constructor(e,t=CopyMaterialBlendMode.ADDITIVE){const n=t===CopyMaterialBlendMode.ADDITIVE?{blendSrc:DstColorFactor,blendDst:ZeroFactor,blendEquation:AddEquation,blendSrcAlpha:DstAlphaFactor,blendDstAlpha:ZeroFactor,blendEquationAlpha:AddEquation}:{};super({uniforms:UniformsUtils.clone(CopyTransformShader.uniforms),vertexShader:CopyTransformShader.vertexShader,fragmentShader:CopyTransformShader.fragmentShader,transparent:!0,depthTest:!1,depthWrite:!1,...n}),this.update(e)}update(e){return void 0!==(null==e?void 0:e.texture)&&(this.uniforms.tDiffuse.value=null==e?void 0:e.texture),void 0!==(null==e?void 0:e.colorTransform)&&(this.uniforms.colorTransform.value=null==e?void 0:e.colorTransform),void 0!==(null==e?void 0:e.colorBase)&&(this.uniforms.colorBase.value=null==e?void 0:e.colorBase),void 0!==(null==e?void 0:e.multiplyChannels)&&(this.uniforms.multiplyChannels.value=null==e?void 0:e.multiplyChannels),void 0!==(null==e?void 0:e.uvTransform)&&(this.uniforms.uvTransform.value=null==e?void 0:e.uvTransform),void 0!==(null==e?void 0:e.blending)&&(this.blending=null==e?void 0:e.blending),void 0!==(null==e?void 0:e.blendSrc)&&(this.blendSrc=null==e?void 0:e.blendSrc),void 0!==(null==e?void 0:e.blendDst)&&(this.blendDst=null==e?void 0:e.blendDst),void 0!==(null==e?void 0:e.blendEquation)&&(this.blendEquation=null==e?void 0:e.blendEquation),void 0!==(null==e?void 0:e.blendSrcAlpha)&&(this.blendSrcAlpha=null==e?void 0:e.blendSrcAlpha),void 0!==(null==e?void 0:e.blendDstAlpha)&&(this.blendDstAlpha=null==e?void 0:e.blendDstAlpha),void 0!==(null==e?void 0:e.blendEquationAlpha)&&(this.blendEquationAlpha=null==e?void 0:e.blendEquationAlpha),this}}const BlurShader={uniforms:{tDiffuse:{value:null},rangeMin:{value:new Vector2(1/512,1/512)},rangeMax:{value:new Vector2(1/512,1/512)}},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }",fragmentShader:"\n uniform sampler2D tDiffuse;\n uniform vec2 rangeMin;\n uniform vec2 rangeMax;\n varying vec2 vUv;\n \n void main() {\n vec4 baseColor = texture2D(tDiffuse, vUv);\n vec2 blur = mix(rangeMax, rangeMin, baseColor.a);\n vec4 sum = vec4( 0.0 );\n sum += texture2D(tDiffuse, vUv - 1.0 * blur) * 0.051;\n sum += texture2D(tDiffuse, vUv - 0.75 * blur) * 0.0918;\n sum += texture2D(tDiffuse, vUv - 0.5 * blur) * 0.12245;\n sum += texture2D(tDiffuse, vUv - 0.25 * blur) * 0.1531;\n sum += baseColor * 0.1633;\n sum += texture2D(tDiffuse, vUv + 0.25 * blur) * 0.1531;\n sum += texture2D(tDiffuse, vUv + 0.5 * blur) * 0.12245;\n sum += texture2D(tDiffuse, vUv + 0.75 * blur) * 0.0918;\n sum += texture2D(tDiffuse, vUv + 1.0 * blur) * 0.051;\n gl_FragColor = sum;\n }"};new Vector2(.1,.9),new Vector2(.1,.9);class LinearDepthRenderMaterial extends ShaderMaterial{constructor(e){super({defines:Object.assign({},LinearDepthRenderMaterial._linearDepthShader.defines),uniforms:UniformsUtils.clone(LinearDepthRenderMaterial._linearDepthShader.uniforms),vertexShader:LinearDepthRenderMaterial._linearDepthShader.vertexShader,fragmentShader:LinearDepthRenderMaterial._linearDepthShader.fragmentShader,blending:NoBlending}),this.update(e)}update(e){if(void 0!==(null==e?void 0:e.depthTexture)&&(this.uniforms.tDepth.value=null==e?void 0:e.depthTexture),void 0!==(null==e?void 0:e.camera)){const t=(null==e?void 0:e.camera)||(null==e?void 0:e.camera);this.uniforms.cameraNear.value=t.near,this.uniforms.cameraFar.value=t.far}return void 0!==(null==e?void 0:e.depthFilter)&&(this.uniforms.depthFilter.value=null==e?void 0:e.depthFilter),this}}LinearDepthRenderMaterial._linearDepthShader={uniforms:{tDepth:{value:null},depthFilter:{value:new Vector4(1,0,0,0)},cameraNear:{value:.1},cameraFar:{value:1}},defines:{PERSPECTIVE_CAMERA:1,ALPHA_DEPTH:0},vertexShader:"varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }",fragmentShader:"uniform sampler2D tDepth;\n uniform vec4 depthFilter;\n uniform float cameraNear;\n uniform float cameraFar;\n varying vec2 vUv;\n \n #include <packing>\n \n float getLinearDepth(const in vec2 screenPosition) {\n float fragCoordZ = dot(texture2D(tDepth, screenPosition), depthFilter);\n #if PERSPECTIVE_CAMERA == 1\n float viewZ = perspectiveDepthToViewZ(fragCoordZ, cameraNear, cameraFar);\n return viewZToOrthographicDepth(viewZ, cameraNear, cameraFar);\n #else\n return fragCoordZ;\n #endif\n }\n \n void main() {\n float depth = getLinearDepth(vUv);\n gl_FragColor = vec4(vec3(1.0 - depth), 1.0);\n }"};class NormalAndDepthRenderMaterial extends ShaderMaterial{constructor(e){var t;super({defines:Object.assign({...NormalAndDepthRenderMaterial._normalAndDepthShader.defines,FLOAT_BUFFER:(null==e?void 0:e.floatBufferType)?1:0,LINEAR_DEPTH:(null==e?void 0:e.linearDepth)?1:0}),uniforms:UniformsUtils.clone(NormalAndDepthRenderMaterial._normalAndDepthShader.uniforms),vertexShader:NormalAndDepthRenderMaterial._normalAndDepthShader.vertexShader,fragmentShader:NormalAndDepthRenderMaterial._normalAndDepthShader.fragmentShader,blending:null!==(t=null==e?void 0:e.blending)&&void 0!==t?t:NoBlending}),this.update(e)}update(e){if(void 0!==(null==e?void 0:e.camera)){const t=(null==e?void 0:e.camera)||(null==e?void 0:e.camera);this.uniforms.cameraNear.value=t.near,this.uniforms.cameraFar.value=t.far}return this}}NormalAndDepthRenderMaterial._normalAndDepthShader={uniforms:{cameraNear:{value:.1},cameraFar:{value:1}},defines:{FLOAT_BUFFER:0,LINEAR_DEPTH:0},vertexShader:"varying vec3 vNormal;\n#if LINEAR_DEPTH == 1\n varying float vZ; \n#endif\n\n void main() {\n vNormal = normalMatrix * normal;\n vec4 viewPosition = modelViewMatrix * vec4(position, 1.0);\n #if LINEAR_DEPTH == 1\n vZ = viewPosition.z; \n #endif\n gl_Position = projectionMatrix * viewPosition;\n }",fragmentShader:"varying vec3 vNormal;\n#if LINEAR_DEPTH == 1\n varying float vZ; \n uniform float cameraNear;\n uniform float cameraFar;\n#endif\n\n void main() {\n #if FLOAT_BUFFER == 1\n vec3 normal = normalize(vNormal);\n #else\n vec3 normal = normalize(vNormal) * 0.5 + 0.5;\n #endif\n #if LINEAR_DEPTH == 1\n float depth = (-vZ - cameraNear) / (cameraFar - cameraNear);\n #else\n float depth = gl_FragCoord.z;\n #endif\n gl_FragColor = vec4(normal, depth);\n }"};const _camera=new OrthographicCamera(-1,1,1,-1,0,1),_geometry=new class extends BufferGeometry{constructor(){super(),this.setAttribute("position",new Float32BufferAttribute([-1,3,0,-1,-1,0,3,-1,0],3)),this.setAttribute("uv",new Float32BufferAttribute([0,2,0,0,2,0],2))}};class FullScreenQuad{constructor(e){this._mesh=new Mesh(_geometry,e)}dispose(){this._mesh.geometry.dispose()}render(e){e.render(this._mesh,_camera)}get material(){return this._mesh.material}set material(e){this._mesh.material=e}}new TextureLoader;class SceneVolume{constructor(){this.bounds=new Box3(new Vector3(-1,-1,-1),new Vector3(1,1,1)),this.size=new Vector3(2,2,2),this.center=new Vector3(0,0,0),this.maxSceneDistanceFromCenter=Math.sqrt(3),this.maxSceneDistanceFrom0=Math.sqrt(3)}copyFrom(e){this.bounds.copy(e.bounds),this.size.copy(e.size),this.center.copy(e.center),this.maxSceneDistanceFromCenter=e.maxSceneDistanceFromCenter,this.maxSceneDistanceFrom0=e.maxSceneDistanceFrom0}updateFromObject(e){e.updateMatrixWorld(),this.bounds.setFromObject(e),this.updateFromBox(this.bounds)}updateFromBox(e){this.bounds!==e&&this.bounds.copy(e),this.bounds.getSize(this.size),this.bounds.getCenter(this.center),this.maxSceneDistanceFromCenter=this.size.length()/2,this.maxSceneDistanceFrom0=new Vector3(Math.max(Math.abs(this.bounds.min.x),Math.abs(this.bounds.max.x)),Math.max(Math.abs(this.bounds.min.y),Math.abs(this.bounds.max.y)),Math.max(Math.abs(this.bounds.min.z),Math.abs(this.bounds.max.z))).length()}updateCameraViewVolumeFromBounds(e){e.updateMatrixWorld();const t=this.bounds.clone().applyMatrix4(e.matrixWorldInverse);e instanceof OrthographicCamera?((e,t)=>{e.left=t.min.x,e.right=t.max.x,e.bottom=t.min.y,e.top=t.max.y,e.near=Math.min(-t.min.z,-t.max.z),e.far=Math.max(-t.min.z,-t.max.z),e.updateProjectionMatrix()})(e,t):e instanceof PerspectiveCamera&&((e,t)=>{const n=Math.min(-t.min.z,-t.max.z),r=Math.max(-t.min.z,-t.max.z);if(n<.001)return;const a=Math.max(Math.abs(t.min.x),Math.abs(t.max.x)),i=Math.max(Math.abs(t.min.y),Math.abs(t.max.y));e.aspect=a/i,e.fov=MathUtils.radToDeg(2*Math.atan2(i,n)),e.near=n,e.far=r,e.updateProjectionMatrix()})(e,t)}getNearAndFarForPerspectiveCamera(e,t=1){const n=e.clone().sub(this.center).length();return[Math.max(.01,n-this.maxSceneDistanceFromCenter-.01),n+this.maxSceneDistanceFromCenter*t+.01]}}class CameraUpdate{changed(e){var t,n;const r=!(null===(t=this._lastCameraProjection)||void 0===t?void 0:t.equals(e.projectionMatrix))||!(null===(n=this._lastCameraWorld)||void 0===n?void 0:n.equals(e.matrixWorld));return this._lastCameraProjection=e.projectionMatrix.clone(),this._lastCameraWorld=e.matrixWorld.clone(),r}}class RenderPass{constructor(){this._originalClearColor=new Color$1,this._originalClearAlpha=0,this._originalAutoClear=!1,this._originalRenderTarget=null,this._screenSpaceQuad=new FullScreenQuad(void 0),this._emptyScene=new Scene,this._defaultCamera=new PerspectiveCamera}renderWithOverrideMaterial(e,t,n,r,a,i,o){this._backup(e),this._prepareRenderer(e,a,i,o);const s=t.overrideMaterial;t.overrideMaterial=r,e.render(t,n),t.overrideMaterial=s,this._restore(e)}clear(e,t,n,r){this._backup(e),this._prepareRenderer(e,t,n,r),e.render(this._emptyScene,this._defaultCamera),this._restore(e)}render(e,t,n,r,a,i){this._backup(e),this._prepareRenderer(e,r,a,i),e.render(t,n),this._restore(e)}renderScreenSpace(e,t,n,r,a){this._backup(e),this._prepareRenderer(e,n,r,a),this._screenSpaceQuad.material=t,this._screenSpaceQuad.render(e),this._restore(e)}_prepareRenderer(e,t,n,r){e.setRenderTarget(t),e.autoClear=!1,null!=n&&(e.setClearColor(n),e.setClearAlpha(r||0),e.clear())}_backup(e){e.getClearColor(this._originalClearColor),this._originalClearAlpha=e.getClearAlpha(),this._originalAutoClear=e.autoClear,this._originalRenderTarget=e.getRenderTarget()}_restore(e){e.setClearColor(this._originalClearColor),e.setClearAlpha(this._originalClearAlpha),e.setRenderTarget(this._originalRenderTarget),e.autoClear=this._originalAutoClear}}class BlurPass{constructor(e,t){var n;this._renderPass=null!==(n=null==t?void 0:t._renderPass)&&void 0!==n?n:new RenderPass,this._blurMaterial=new ShaderMaterial(null!=e?e:BlurShader),this._blurMaterial.depthTest=!1}dispose(){this._blurMaterial.dispose()}render(e,t,n,r){this._blurMaterial.uniforms.tDiffuse.value=t[0].texture,this._blurMaterial.uniforms.rangeMin.value.x=n[0],this._blurMaterial.uniforms.rangeMin.value.y=0,this._blurMaterial.uniforms.rangeMax.value.x=r[0],this._blurMaterial.uniforms.rangeMax.value.y=0,this._renderPass.renderScreenSpace(e,this._blurMaterial,t[1]),this._blurMaterial.uniforms.tDiffuse.value=t[1].texture,this._blurMaterial.uniforms.rangeMin.value.x=0,this._blurMaterial.uniforms.rangeMin.value.y=n[1],this._blurMaterial.uniforms.rangeMax.value.x=0,this._blurMaterial.uniforms.rangeMax.value.y=r[1],this._renderPass.renderScreenSpace(e,this._blurMaterial,t[2])}}class RenderCacheMapItem{constructor(e){this.needsUpdate=!0,this._cache=null,this._cache=e}dispose(){var e;null===(e=this._cache)||void 0===e||e.dispose()}clear(){var e;null===(e=this._cache)||void 0===e||e.clear(),this.needsUpdate=!0}update(e){this.needsUpdate&&this._cache&&(e.traverse(e=>{var t,n,r;e.isLine||e.isPoints?null===(t=this._cache)||void 0===t||t.addLineOrPoint(e):e.isMesh?null===(n=this._cache)||void 0===n||n.addMesh(e):null===(r=this._cache)||void 0===r||r.addObject(e)}),this.needsUpdate=!1)}onBeforeRender(){var e;null===(e=this._cache)||void 0===e||e.onBeforeRender()}onAfterRender(){var e;null===(e=this._cache)||void 0===e||e.onAfterRender()}}class RenderCacheManager{constructor(){this._cacheMap=new Map}dispose(){this._cacheMap.forEach(e=>{e.dispose()})}registerCache(e,t){this._cacheMap.set(e,new RenderCacheMapItem(t))}clearCache(){this._cacheMap.forEach(e=>{e.clear()})}clearObjectCache(e){const t=this._cacheMap.get(e);t&&t.clear()}onBeforeRender(e,t){const n=this._cacheMap.get(e);n&&(n.update(t),n.onBeforeRender())}onAfterRender(e){const t=this._cacheMap.get(e);t&&t.onAfterRender()}render(e,t,n){const r=this._cacheMap.get(e);r&&(r.update(t),r.onBeforeRender()),n(),r&&r.onAfterRender()}}class VisibilityRenderCache{constructor(e){this._visibilityCache=new Map,this._isObjectInvisible=e}dispose(){this._visibilityCache.clear()}clear(){this._visibilityCache.clear()}addLineOrPoint(e){this._visibilityCache.set(e,e.visible)}addMesh(e){this._isObjectInvisible&&this._isObjectInvisible(e)&&this._visibilityCache.set(e,e.visible)}addObject(e){this._isObjectInvisible&&this._isObjectInvisible(e)&&this._visibilityCache.set(e,e.visible)}onBeforeRender(){this._visibilityCache.forEach((e,t)=>{t.visible=!1})}onAfterRender(){this._visibilityCache.forEach((e,t)=>{t.visible=e})}}class DepthWriteRenderCache{constructor(e){this._depthWriteCache=new Set,this._doNotWriteDepth=e}dispose(){this._depthWriteCache.clear()}clear(){this._depthWriteCache.clear()}addLineOrPoint(e){}addObject(e){}addMesh(e){this._doNotWriteDepth&&this._doNotWriteDepth(e)&&e.material instanceof MeshStandardMaterial&&e.material.depthWrite&&this._depthWriteCache.add(e.material)}onBeforeRender(){this._depthWriteCache.forEach(e=>{e.depthWrite=!1})}onAfterRender(){this._depthWriteCache.forEach(e=>{e.depthWrite=!0})}}class GBufferRenderTargets{get isFloatGBufferWithRgbNormalAlphaDepth(){return this.floatGBufferRgbNormalAlphaDepth}get gBufferTexture(){return this.depthNormalRenderTarget.texture}get depthBufferTexture(){return this.copyToSeparateDepthBuffer&&this.floatGBufferRgbNormalAlphaDepth?this.separateDeptRenderTarget.texture:this.depthNormalRenderTarget.depthTexture}get textureWithDepthValue(){return this.floatGBufferRgbNormalAlphaDepth?this.depthNormalRenderTarget.texture:this.depthNormalRenderTarget.depthTexture}get normalRenderMaterial(){var e;return this._normalRenderMaterial=null!==(e=this._normalRenderMaterial)&&void 0!==e?e:this.floatGBufferRgbNormalAlphaDepth?new NormalAndDepthRenderMaterial({blending:NoBlending,floatBufferType:!0,linearDepth:!1}):new MeshNormalMaterial({blending:NoBlending}),this._normalRenderMaterial}get depthNormalRenderTarget(){if(!this._depthNormalRenderTarget)if(this.floatGBufferRgbNormalAlphaDepth)this._depthNormalRenderTarget=new WebGLRenderTarget(this._width*this.parameters.depthNormalScale,this._height*this.parameters.depthNormalScale,{minFilter:this._targetMinificationTextureFilter,magFilter:this._targetMagnificationTextureFilter,type:FloatType,samples:this._samples});else{const e=new DepthTexture(this._width*this.parameters.depthNormalScale,this._height*this.parameters.depthNormalScale);e.format=DepthStencilFormat,e.type=UnsignedInt248Type,this._depthNormalRenderTarget=new WebGLRenderTarget(this._width*this.parameters.depthNormalScale,this._height*this.parameters.depthNormalScale,{minFilter:this._targetMinificationTextureFilter,magFilter:this._targetMagnificationTextureFilter,depthTexture:e})}return this._depthNormalRenderTarget}get separateDeptRenderTarget(){return this._separateDeptRenderTarget||(this._separateDeptRenderTarget=new WebGLRenderTarget(this._width*this.parameters.depthNormalScale,this._height*this.parameters.depthNormalScale,{minFilter:this._targetMinificationTextureFilter,magFilter:this._targetMagnificationTextureFilter,type:FloatType,samples:0})),this._separateDeptRenderTarget}constructor(e,t){var n,r,a,i,o,s,l,h,d,c;this.floatGBufferRgbNormalAlphaDepth=!1,this.copyToSeparateDepthBuffer=!1,this.needsUpdate=!0,this.floatGBufferRgbNormalAlphaDepth=null!==(r=null===(n=null==t?void 0:t.capabilities)||void 0===n?void 0:n.isWebGL2)&&void 0!==r&&r,this._renderCacheManager=e,this._renderCacheManager&&this._renderCacheManager.registerCache(this,new VisibilityRenderCache(e=>{if(e.isMesh&&e.material){if(e.material.transparent&&e.material.opacity<.7||e.material.alphaTest>0)return!0;if(e.material instanceof MeshPhysicalMaterial)return e.material.transmission>0}return!1})),this.parameters={depthNormalScale:null!==(a=null==t?void 0:t.depthNormalScale)&&void 0!==a?a:1},this._targetMinificationTextureFilter=null!==(i=null==t?void 0:t.textureMinificationFilter)&&void 0!==i?i:NearestFilter,this._targetMagnificationTextureFilter=null!==(o=null==t?void 0:t.textureMagnificationFilter)&&void 0!==o?o:NearestFilter,this._width=null!==(s=null==t?void 0:t.width)&&void 0!==s?s:1024,this._height=null!==(l=null==t?void 0:t.height)&&void 0!==l?l:1024,this._samples=null!==(h=null==t?void 0:t.samples)&&void 0!==h?h:0,this._shared=null!==(d=null==t?void 0:t.shared)&&void 0!==d&&d,this._renderPass=null!==(c=null==t?void 0:t.renderPass)&&void 0!==c?c:new RenderPass}dispose(){var e,t;null===(e=this._normalRenderMaterial)||void 0===e||e.dispose(),null===(t=this._depthNormalRenderTarget)||void 0===t||t.dispose()}setSize(e,t){var n;this._width=e,this._height=t,null===(n=this._depthNormalRenderTarget)||void 0===n||n.setSize(this._width*this.parameters.depthNormalScale,this._height*this.parameters.depthNormalScale)}render(e,t,n){if(this._shared&&!this.needsUpdate)return;this.needsUpdate=!1;const r=this.normalRenderMaterial;r instanceof NormalAndDepthRenderMaterial&&r.update({camera:n}),this._renderCacheManager?this._renderCacheManager.render(this,t,()=>{this._renderGBuffer(e,t,n)}):this._renderGBuffer(e,t,n),this.floatGBufferRgbNormalAlphaDepth&&this.copyToSeparateDepthBuffer&&this._copyDepthToSeparateDepthTexture(e,this.depthNormalRenderTarget)}_renderGBuffer(e,t,n){this._renderPass.renderWithOverrideMaterial(e,t,n,this.normalRenderMaterial,this.depthNormalRenderTarget,7829503,1)}getCopyMaterial(e){var t;return null!==(t=this._copyMaterial)&&void 0!==t||(this._copyMaterial=new CopyTransformMaterial),this._copyMaterial.update(e)}_copyDepthToSeparateDepthTexture(e,t){this._renderPass.renderScreenSpace(e,this.getCopyMaterial({texture:t.texture,blending:NoBlending,colorTransform:ALPHA_TRANSFORM,colorBase:ALPHA_RGBA,multiplyChannels:0,uvTransform:DEFAULT_UV_TRANSFORM}),this.separateDeptRenderTarget)}}class BakedGroundContactShadow{constructor(e,t,n){var r;this.needsUpdate=!0,this.noNeedOfUpdateCount=0,this._blurScale=1,this._shadowScale=1,this._groundGroup=t,this.shadowMapSize=null!==(r=n.shadowMapSize)&&void 0!==r?r:2048,this.parameters=this._getDefaultParameters(n),this._groundShadowFar=this.parameters.cameraFar,this._renderer=e,this._renderCacheManager=null==n?void 0:n._renderCacheManager,this._renderCacheManager&&this._renderCacheManager.registerCache(this,new VisibilityRenderCache(e=>e.isMesh&&!(e=>{var t;if(!e.isMesh)return!1;if(!e.castShadow&&!(null===(t=e.userData)||void 0===t?void 0:t.meshId))return!1;const n=e.material;return!n.transparent||n.opacity>.5})(e)||void 0!==e.name&&["Ground","Floor"].includes(e.name))),this.renderTarget=new WebGLRenderTarget(this.shadowMapSize,this.shadowMapSize),this.renderTarget.texture.generateMipmaps=!1,this._renderTargetBlur=new WebGLRenderTarget(this.shadowMapSize,this.shadowMapSize),this._renderTargetBlur.texture.generateMipmaps=!1,this.shadowGroundPlane=new ShadowGroundPlane(this.renderTarget.texture,this.parameters),this._groundGroup.add(this.shadowGroundPlane),this._groundContactCamera=new GroundContactCamera,this._groundGroup.add(this._groundContactCamera),this._depthMaterial=new MeshDepthMaterial,this._depthMaterial.userData.fadeoutBias={value:this.parameters.fadeoutBias},this._depthMaterial.userData.fadeoutFalloff={value:this.parameters.fadeoutFalloff},this._depthMaterial.onBeforeCompile=e=>{e.uniforms.fadeoutBias=this._depthMaterial.userData.fadeoutBias,e.uniforms.fadeoutFalloff=this._depthMaterial.userData.fadeoutFalloff,e.fragmentShader=`\n uniform float fadeoutBias;\n uniform float fadeoutFalloff;\n ${e.fragmentShader.replace("gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );",ShadowGroundPlane.alphaMap?"gl_FragColor = vec4(clamp(pow(1.0 + fadeoutBias - fragCoordZ, 1.0/(1.0-fadeoutFalloff)), 0.0, 1.0));":"gl_FragColor = vec4(vec3(0.0), clamp(pow(1.0 + fadeoutBias - fragCoordZ, 1.0/(1.0-fadeoutFalloff)), 0.0, 1.0));")}\n `},this._depthMaterial.side=DoubleSide,this._depthMaterial.depthTest=!0,this._depthMaterial.depthWrite=!0,this._blurPass=new BlurPass(BlurShader,n),this.updatePlaneAndShadowCamera()}_getDefaultParameters(e){return{enabled:!0,cameraHelper:!1,alwaysUpdate:!1,fadeIn:!1,blurMin:.001,blurMax:.1,fadeoutFalloff:.9,fadeoutBias:.03,opacity:.5,maximumPlaneSize:20,planeSize:10,cameraFar:3,hardLayers:null,softLayers:null,polygonOffset:2,excludeGroundObjects:!0,...e}}dispose(){this.renderTarget.dispose(),this._renderTargetBlur.dispose(),this._blurPass.dispose(),this._depthMaterial.dispose()}updateParameters(e){for(let t in e)this.parameters.hasOwnProperty(t)&&(this.parameters[t]=e[t]);void 0!==e.cameraFar&&(this._groundShadowFar=this.parameters.cameraFar)}applyParameters(){this.shadowGroundPlane.updateMaterial(this.parameters),this._groundContactCamera.updateCameraHelper(this.parameters.cameraHelper),this._groundContactCamera.far!==this.parameters.cameraFar&&this.updatePlaneAndShadowCamera();const e=this.parameters.fadeoutFalloff;this._depthMaterial.userData.fadeoutFalloff.value!==e&&(this._depthMaterial.userData.fadeoutFalloff.value=this.parameters.fadeoutFalloff);const t=this.parameters.fadeoutBias/this._groundContactCamera.far;this._depthMaterial.userData.fadeoutBias.value!==t&&(this._depthMaterial.userData.fadeoutBias.value=t),this.needsUpdate=!0}setScale(e,t){this._blurScale=e,this._shadowScale=null!=t?t:e,this.needsUpdate=!0}updateBounds(e,t){var n;this._groundShadowFar=this.parameters.cameraFar,this._groundShadowFar<e.size.z&&(this._groundShadowFar=1.01*e.size.z);const r=Math.max(e.size.x,e.size.z);this.parameters.planeSize=r+2*Math.max(this._blurScale,null!==(n=this._shadowScale)&&void 0!==n?n:1,1),this.parameters.planeSize>this.parameters.maximumPlaneSize?(this.parameters.planeSize=this.parameters.maximumPlaneSize,this._groundGroup.position.set(0,null!=t?t:0,0)):this._groundGroup.position.set(e.center.x,null!=t?t:0,e.center.z),this._groundGroup.updateMatrixWorld(),this.updatePlaneAndShadowCamera()}updatePlaneAndShadowCamera(){const e=this.parameters.planeSize;this.shadowGroundPlane.scale.x=e,this.shadowGroundPlane.scale.y=e,this._groundContactCamera.updateCameraFormPlaneSize(e,this._groundShadowFar),this.needsUpdate=!0}setGroundVisibility(e,t){this.shadowGroundPlane.updateVisibility(e)}render(e){if(this._groundContactCamera.updateCameraHelper(this.parameters.cameraHelper,e),this.shadowGroundPlane.visible=this.parameters.enabled,this.parameters.alwaysUpdate||this.needsUpdate)this.noNeedOfUpdateCount=0;else if(this.noNeedOfUpdateCount++,this.noNeedOfUpdateCount>=10)return;this.needsUpdate=!1,this.shadowGroundPlane.material.opacity=this.parameters.alwaysUpdate||!this.parameters.fadeIn?this.parameters.opacity:this.parameters.opacity*(this.noNeedOfUpdateCount+2)/12;const t=this._renderer.getClearAlpha();this._renderer.setClearAlpha(0),this._groundGroup.visible=!1,this.shadowGroundPlane.visible=!1,this._groundContactCamera.setCameraHelperVisibility(!1),0===this.noNeedOfUpdateCount?(this._renderGroundContact(e),this._renderBlur()):1===this.noNeedOfUpdateCount&&this._renderBlur(),this._renderReduceBandingBlur(),this._renderer.setRenderTarget(null),this._renderer.setClearAlpha(t),this._groundGroup.visible=!0,this.shadowGroundPlane.visible=this.parameters.enabled,this._groundContactCamera.setCameraHelperVisibility(this.parameters.cameraHelper)}_renderGroundContact(e){const t=e.background;e.background=null,e.overrideMaterial=this._depthMaterial,this._renderer.setRenderTarget(this.renderTarget),this._renderer.clear();const n=this._renderer.autoClear;this._renderer.autoClear=!1,this.parameters.hardLayers&&(this._groundContactCamera.layers.mask=this.parameters.hardLayers.mask,this._groundContactCamera.updateCameraFarPlane(10),this._depthMaterial.userData.fadeoutBias.value=.99,this._renderer.render(e,this._groundContactCamera),this._groundContactCamera.updateCameraFarPlane(this._groundShadowFar),this._depthMaterial.userData.fadeoutBias.value=this.parameters.fadeoutBias/this._groundShadowFar),this._groundContactCamera.layers.enableAll(),this.parameters.softLayers&&(this._groundContactCamera.layers.mask=this.parameters.softLayers.mask),this._renderCacheManager?this._renderCacheManager.render(this,e,()=>{this._renderer.render(e,this._groundContactCamera)}):this._renderer.render(e,this._groundContactCamera),this._renderer.autoClear=n,e.overrideMaterial=null,e.background=t}_renderBlur(){this._renderBlurPass(this._blurScale*this.parameters.blurMin/this.parameters.planeSize,this._blurScale*this.parameters.blurMax/this.parameters.planeSize)}_renderReduceBandingBlur(){const e=.01*this._blurScale/this.parameters.planeSize;this._renderBlurPass(e,e)}_renderBlurPass(e,t){this._blurPass.render(this._renderer,[this.renderTarget,this._renderTargetBlur,this.renderTarget],[e,e],[t,t])}}BakedGroundContactShadow.addTestMesh=!1;class ShadowGroundPlane extends Mesh{constructor(e,t){const n=new MeshBasicMaterial({transparent:!0,depthWrite:!1});ShadowGroundPlane.alphaMap&&n.color.set(0),n.polygonOffset=!0,super(new PlaneGeometry(1,1,10,10),n),this.name="GroundContactShadowPlane",this.userData.isFloor=!0,this.renderOrder=1,this.receiveShadow=!1,this.layers.disableAll(),t&&this.updateMaterial(t),this.setShadowMap(e)}setVisibility(e){this.visible=e,this.visible?this.layers.enableAll():this.layers.disableAll()}setDepthWrite(e){const t=this.material;t.depthWrite=e,t.transparent=!e,t.needsUpdate=!0,this.setVisibility(e)}setReceiveShadow(e){this.receiveShadow=e,this.setVisibility(e)}setShadowMap(e){const t=this.material;t.map=e,ShadowGroundPlane.alphaMap&&(t.alphaMap=e),t.needsUpdate=!0}updateMaterial(e){const t=this.material;t.opacity!==e.opacity&&(t.opacity=e.opacity),t.polygonOffsetFactor!==e.polygonOffset&&(t.polygonOffset=!0,t.polygonOffsetFactor=e.polygonOffset,t.polygonOffsetUnits=e.polygonOffset)}updateVisibility(e){e?this.layers.enableAll():this.layers.disableAll()}}ShadowGroundPlane.alphaMap=!1;class GroundContactCamera extends OrthographicCamera{constructor(){super(-1,1,-1,1,-1,1),this.rotation.x=Math.PI}updateCameraFormPlaneSize(e,t){var n;this.left=-e/2,this.right=e/2,this.top=-e/2,this.bottom=e/2,this.near=0,this.far=t,this.updateProjectionMatrix(),null===(n=this.cameraHelper)||void 0===n||n.update()}updateCameraFarPlane(e){var t;this.far=e,this.updateProjectionMatrix(),null===(t=this.cameraHelper)||void 0===t||t.update()}updateCameraHelper(e,t){var n,r,a;e?(this.cameraHelper=null!==(n=this.cameraHelper)&&void 0!==n?n:new CameraHelper(this),this.cameraHelper.visible=!0,null==t||t.add(this.cameraHelper)):(null===(r=this.cameraHelper)||void 0===r?void 0:r.parent)&&(null===(a=this.cameraHelper)||void 0===a||a.removeFromParent())}setCameraHelperVisibility(e){this.cameraHelper&&(this.cameraHelper.visible=e)}}const CopyShader={name:"CopyShader",uniforms:{tDiffuse:{value:null},opacity:{value:1}},vertexShader:"\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}",fragmentShader:"\n\n\t\tuniform float opacity;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\t\t\tgl_FragColor = opacity * texel;\n\n\n\t\t}"},FXAAShader={name:"FXAAShader",uniforms:{tDiffuse:{value:null},resolution:{value:new Vector2(1/1024,1/512)}},vertexShader:"\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}",fragmentShader:"\n\tprecision highp float;\n\n\tuniform sampler2D tDiffuse;\n\n\tuniform vec2 resolution;\n\n\tvarying vec2 vUv;\n\n\t// FXAA 3.11 implementation by NVIDIA, ported to WebGL by Agost Biro (biro@archilogic.com)\n\n\t//----------------------------------------------------------------------------------\n\t// File: es3-keplerFXAAassetsshaders/FXAA_DefaultES.frag\n\t// SDK Version: v3.00\n\t// Email: gameworks@nvidia.com\n\t// Site: http://developer.nvidia.com/\n\t//\n\t// Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.\n\t//\n\t// Redistribution and use in source and binary forms, with or without\n\t// modification, are permitted provided that the following conditions\n\t// are met:\n\t// * Redistributions of source code must retain the above copyright\n\t// notice, this list of conditions and the following disclaimer.\n\t// * Redistributions in binary form must reproduce the above copyright\n\t// notice, this list of conditions and the following disclaimer in the\n\t// documentation and/or other materials provided with the distribution.\n\t// * Neither the name of NVIDIA CORPORATION nor the names of its\n\t// contributors may be used to endorse or promote products derived\n\t// from this software without specific prior written permission.\n\t//\n\t// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY\n\t// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n\t// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n\t// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n\t// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n\t// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n\t// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n\t// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n\t// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\t// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t//\n\t//----------------------------------------------------------------------------------\n\n\t#ifndef FXAA_DISCARD\n\t\t\t//\n\t\t\t// Only valid for PC OpenGL currently.\n\t\t\t// Probably will not work when FXAA_GREEN_AS_LUMA = 1.\n\t\t\t//\n\t\t\t// 1 = Use discard on pixels which don't need AA.\n\t\t\t// For APIs which enable concurrent TEX+ROP from same surface.\n\t\t\t// 0 = Return unchanged color on pixels which don't need AA.\n\t\t\t//\n\t\t\t#define FXAA_DISCARD 0\n\t#endif\n\n\t/*--------------------------------------------------------------------------*/\n\t#define FxaaTexTop(t, p) texture2D(t, p, -100.0)\n\t#define FxaaTexOff(t, p, o, r) texture2D(t, p + (o * r), -100.0)\n\t/*--------------------------------------------------------------------------*/\n\n\t#define NUM_SAMPLES 5\n\n\t// assumes colors have premultipliedAlpha, so that the calculated color contrast is scaled by alpha\n\tfloat contrast( vec4 a, vec4 b ) {\n\t\t\tvec4 diff = abs( a - b );\n\t\t\treturn max( max( max( diff.r, diff.g ), diff.b ), diff.a );\n\t}\n\n\t/*============================================================================\n\n\t\t\t\t\t\t\t\t\tFXAA3 QUALITY - PC\n\n\t============================================================================*/\n\n\t/*--------------------------------------------------------------------------*/\n\tvec4 FxaaPixelShader(\n\t\t\tvec2 posM,\n\t\t\tsampler2D tex,\n\t\t\tvec2 fxaaQualityRcpFrame,\n\t\t\tfloat fxaaQualityEdgeThreshold,\n\t\t\tfloat fxaaQualityinvEdgeThreshold\n\t) {\n\t\t\tvec4 rgbaM = FxaaTexTop(tex, posM);\n\t\t\tvec4 rgbaS = FxaaTexOff(tex, posM, vec2( 0.0, 1.0), fxaaQualityRcpFrame.xy);\n\t\t\tvec4 rgbaE = FxaaTexOff(tex, posM, vec2( 1.0, 0.0), fxaaQualityRcpFrame.xy);\n\t\t\tvec4 rgbaN = FxaaTexOff(tex, posM, vec2( 0.0,-1.0), fxaaQualityRcpFrame.xy);\n\t\t\tvec4 rgbaW = FxaaTexOff(tex, posM, vec2(-1.0, 0.0), fxaaQualityRcpFrame.xy);\n\t\t\t// . S .\n\t\t\t// W M E\n\t\t\t// . N .\n\n\t\t\tbool earlyExit = max( max( max(\n\t\t\t\t\tcontrast( rgbaM, rgbaN ),\n\t\t\t\t\tcontrast( rgbaM, rgbaS ) ),\n\t\t\t\t\tcontrast( rgbaM, rgbaE ) ),\n\t\t\t\t\tcontrast( rgbaM, rgbaW ) )\n\t\t\t\t\t< fxaaQualityEdgeThreshold;\n\t\t\t// . 0 .\n\t\t\t// 0 0 0\n\t\t\t// . 0 .\n\n\t\t\t#if (FXAA_DISCARD == 1)\n\t\t\t\t\tif(earlyExit) FxaaDiscard;\n\t\t\t#else\n\t\t\t\t\tif(earlyExit) return rgbaM;\n\t\t\t#endif\n\n\t\t\tfloat contrastN = contrast( rgbaM, rgbaN );\n\t\t\tfloat contrastS = contrast( rgbaM, rgbaS );\n\t\t\tfloat contrastE = contrast( rgbaM, rgbaE );\n\t\t\tfloat contrastW = contrast( rgbaM, rgbaW );\n\n\t\t\tfloat relativeVContrast = ( contrastN + contrastS ) - ( contrastE + contrastW );\n\t\t\trelativeVContrast *= fxaaQualityinvEdgeThreshold;\n\n\t\t\tbool horzSpan = relativeVContrast > 0.;\n\t\t\t// . 1 .\n\t\t\t// 0 0 0\n\t\t\t// . 1 .\n\n\t\t\t// 45 deg edge detection and corners of objects, aka V/H contrast is too similar\n\t\t\tif( abs( relativeVContrast ) < .3 ) {\n\t\t\t\t\t// locate the edge\n\t\t\t\t\tvec2 dirToEdge;\n\t\t\t\t\tdirToEdge.x = contrastE > contrastW ? 1. : -1.;\n\t\t\t\t\tdirToEdge.y = contrastS > contrastN ? 1. : -1.;\n\t\t\t\t\t// . 2 . . 1 .\n\t\t\t\t\t// 1 0 2 ~= 0 0 1\n\t\t\t\t\t// . 1 . . 0 .\n\n\t\t\t\t\t// tap 2 pixels and see which ones are \"outside\" the edge, to\n\t\t\t\t\t// determine if the edge is vertical or horizontal\n\n\t\t\t\t\tvec4 rgbaAlongH = FxaaTexOff(tex, posM, vec2( dirToEdge.x, -dirToEdge.y ), fxaaQualityRcpFrame.xy);\n\t\t\t\t\tfloat matchAlongH = contrast( rgbaM, rgbaAlongH );\n\t\t\t\t\t// . 1 .\n\t\t\t\t\t// 0 0 1\n\t\t\t\t\t// . 0 H\n\n\t\t\t\t\tvec4 rgbaAlongV = FxaaTexOff(tex, posM, vec2( -dirToEdge.x, dirToEdge.y ), fxaaQualityRcpFrame.xy);\n\t\t\t\t\tfloat matchAlongV = contrast( rgbaM, rgbaAlongV );\n\t\t\t\t\t// V 1 .\n\t\t\t\t\t// 0 0 1\n\t\t\t\t\t// . 0 .\n\n\t\t\t\t\trelativeVContrast = matchAlongV - matchAlongH;\n\t\t\t\t\trelativeVContrast *= fxaaQualityinvEdgeThreshold;\n\n\t\t\t\t\tif( abs( relativeVContrast ) < .3 ) { // 45 deg edge\n\t\t\t\t\t\t\t// 1 1 .\n\t\t\t\t\t\t\t// 0 0 1\n\t\t\t\t\t\t\t// . 0 1\n\n\t\t\t\t\t\t\t// do a simple blur\n\t\t\t\t\t\t\treturn mix(\n\t\t\t\t\t\t\t\t\trgbaM,\n\t\t\t\t\t\t\t\t\t(rgbaN + rgbaS + rgbaE + rgbaW) * .25,\n\t\t\t\t\t\t\t\t\t.4\n\t\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\thorzSpan = relativeVContrast > 0.;\n\t\t\t}\n\n\t\t\tif(!horzSpan) rgbaN = rgbaW;\n\t\t\tif(!horzSpan) rgbaS = rgbaE;\n\t\t\t// . 0 . 1\n\t\t\t// 1 0 1 -> 0\n\t\t\t// . 0 . 1\n\n\t\t\tbool pairN = contrast( rgbaM, rgbaN ) > contrast( rgbaM, rgbaS );\n\t\t\tif(!pairN) rgbaN = rgbaS;\n\n\t\t\tvec2 offNP;\n\t\t\toffNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x;\n\t\t\toffNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y;\n\n\t\t\tbool doneN = false;\n\t\t\tbool doneP = false;\n\n\t\t\tfloat nDist = 0.;\n\t\t\tfloat pDist = 0.;\n\n\t\t\tvec2 posN = posM;\n\t\t\tvec2 posP = posM;\n\n\t\t\tint iterationsUsed = 0;\n\t\t\tint iterationsUsedN = 0;\n\t\t\tint iterationsUsedP = 0;\n\t\t\tfor( int i = 0; i < NUM_SAMPLES; i++ ) {\n\t\t\t\t\titerationsUsed = i;\n\n\t\t\t\t\tfloat increment = float(i + 1);\n\n\t\t\t\t\tif(!doneN) {\n\t\t\t\t\t\t\tnDist += increment;\n\t\t\t\t\t\t\tposN = posM + offNP * nDist;\n\t\t\t\t\t\t\tvec4 rgbaEndN = FxaaTexTop(tex, posN.xy);\n\t\t\t\t\t\t\tdoneN = contrast( rgbaEndN, rgbaM ) > contrast( rgbaEndN, rgbaN );\n\t\t\t\t\t\t\titerationsUsedN = i;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(!doneP) {\n\t\t\t\t\t\t\tpDist += increment;\n\t\t\t\t\t\t\tposP = posM - offNP * pDist;\n\t\t\t\t\t\t\tvec4 rgbaEndP = FxaaTexTop(tex, posP.xy);\n\t\t\t\t\t\t\tdoneP = contrast( rgbaEndP, rgbaM ) > contrast( rgbaEndP, rgbaN );\n\t\t\t\t\t\t\titerationsUsedP = i;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(doneN || doneP) break;\n\t\t\t}\n\n\n\t\t\tif ( !doneP && !doneN ) return rgbaM; // failed to find end of edge\n\n\t\t\tfloat dist = min(\n\t\t\t\t\tdoneN ? float( iterationsUsedN ) / float( NUM_SAMPLES - 1 ) : 1.,\n\t\t\t\t\tdoneP ? float( iterationsUsedP ) / float( NUM_SAMPLES - 1 ) : 1.\n\t\t\t);\n\n\t\t\t// hacky way of reduces blurriness of mostly diagonal edges\n\t\t\t// but reduces AA quality\n\t\t\tdist = pow(dist, .5);\n\n\t\t\tdist = 1. - dist;\n\n\t\t\treturn mix(\n\t\t\t\t\trgbaM,\n\t\t\t\t\trgbaN,\n\t\t\t\t\tdist * .5\n\t\t\t);\n\t}\n\n\tvoid main() {\n\t\t\tconst float edgeDetectionQuality = .2;\n\t\t\tconst float invEdgeDetectionQuality = 1. / edgeDetectionQuality;\n\n\t\t\tgl_FragColor = FxaaPixelShader(\n\t\t\t\t\tvUv,\n\t\t\t\t\ttDiffuse,\n\t\t\t\t\tresolution,\n\t\t\t\t\tedgeDetectionQuality, // [0,1] contrast needed, otherwise early discard\n\t\t\t\t\tinvEdgeDetectionQuality\n\t\t\t);\n\n\t}\n\t"};class OutlinePass extends class{constructor(){this.isPass=!0,this.enabled=!0,this.needsSwap=!0,this.clear=!1,this.renderToScreen=!1}setSize(){}render(){console.error("THREE.Pass: .render() must be implemented in derived pass.")}dispose(){}}{constructor(e,t,n,r,a){var i;super(),this.patternTexture=null,this._gBufferRenderTarget=null==a?void 0:a._gBufferRenderTarget,this.renderScene=t,this.renderCamera=n,this.selectedObjects=void 0!==r?r:[],this.visibleEdgeColor=new Color$1(1,1,1),this.hiddenEdgeColor=new Color$1(.1,.04,.02),this.edgeGlow=0,this.usePatternTexture=!1,this.edgeThickness=1,this.edgeStrength=3,this.downSampleRatio=(null==a?void 0:a.downSampleRatio)||2,this.pulsePeriod=0,this.edgeDetectionFxaa=(null==a?void 0:a.edgeDetectionFxaa)||!1,this._visibilityCache=new Map,this.resolution=void 0!==e?new Vector2(e.x,e.y):new Vector2(256,256);const o=Math.round(this.resolution.x/this.downSampleRatio),s=Math.round(this.resolution.y/this.downSampleRatio);this.renderTargetMaskBuffer=new WebGLRenderTarget(this.resolution.x,this.resolution.y),this.renderTargetMaskBuffer.texture.name="OutlinePass.mask",this.renderTargetMaskBuffer.texture.generateMipmaps=!1,this._gBufferRenderTarget||(this.depthMaterial=new MeshDepthMaterial,this.depthMaterial.side=DoubleSide,this.depthMaterial.depthPacking=RGBADepthPacking,this.depthMaterial.blending=NoBlending),this.prepareMaskMaterial=this._getPrepareMaskMaterial(null===(i=this._gBufferRenderTarget)||void 0===i?void 0:i.isFloatGBufferWithRgbNormalAlphaDepth),this.prepareMaskMaterial.side=DoubleSide,this.prepareMaskMaterial.fragmentShader=function(e,t){const n=t.isPerspectiveCamera?"perspective":"orthographic";return e.replace(/DEPTH_TO_VIEW_Z/g,n+"DepthToViewZ")}(this.prepareMaskMaterial.fragmentShader,this.renderCamera),this._gBufferRenderTarget||(this.renderTargetDepthBuffer=new WebGLRenderTarget(this.resolution.x,this.resolution.y),this.renderTargetDepthBuffer.texture.name="OutlinePass.depth",this.renderTargetDepthBuffer.texture.generateMipmaps=!1),this.edgeDetectionFxaa&&(this.fxaaRenderMaterial=new ShaderMaterial(FXAAShader),this.fxaaRenderMaterial.uniforms.tDiffuse.value=this.renderTargetMaskBuffer.texture,this.fxaaRenderMaterial.uniforms.resolution.value.set(1/this.resolution.x,1/this.resolution.y),this.renderTargetFxaaBuffer=new WebGLRenderTarget(this.resolution.x,this.resolution.y),this.renderTargetFxaaBuffer.texture.name="OutlinePass.fxaa",this.renderTargetFxaaBuffer.texture.generateMipmaps=!1),this.renderTargetMaskDownSampleBuffer=new WebGLRenderTarget(o,s),this.renderTargetMaskDownSampleBuffer.texture.name="OutlinePass.depthDownSample",this.renderTargetMaskDownSampleBuffer.texture.generateMipmaps=!1,this.renderTargetBlurBuffer1=new WebGLRenderTarget(o,s),this.renderTargetBlurBuffer1.texture.name="OutlinePass.blur1",this.renderTargetBlurBuffer1.texture.generateMipmaps=!1,this.renderTargetBlurBuffer2=new WebGLRenderTarget(Math.round(o/2),Math.round(s/2)),this.renderTargetBlurBuffer2.texture.name="OutlinePass.blur2",this.renderTargetBlurBuffer2.texture.generateMipmaps=!1,this.edgeDetectionMaterial=this._getEdgeDetectionMaterial(),this.renderTargetEdgeBuffer1=new WebGLRenderTarget(o,s),this.renderTargetEdgeBuffer1.texture.name="OutlinePass.edge1",this.renderTargetEdgeBuffer1.texture.generateMipmaps=!1,this.renderTargetEdgeBuffer2=new WebGLRenderTarget(Math.round(o/2),Math.round(s/2)),this.renderTargetEdgeBuffer2.texture.name="OutlinePass.edge2",this.renderTargetEdgeBuffer2.texture.generateMipmaps=!1,this.separableBlurMaterial1=this._getSeperableBlurMaterial(4),this.separableBlurMaterial1.uniforms.texSize.value.set(o,s),this.separableBlurMaterial1.uniforms.kernelRadius.value=1,this.separableBlurMaterial2=this._getSeperableBlurMaterial(4),this.separableBlurMaterial2.uniforms.texSize.value.set(Math.round(o/2),Math.round(s/2)),this.separableBlurMaterial2.uniforms.kernelRadius.value=4,this.overlayMaterial=this._getOverlayMaterial();const l=CopyShader;this.copyUniforms=UniformsUtils.clone(l.uniforms),this.copyUniforms.opacity.value=1,this.materialCopy=new ShaderMaterial({uniforms:this.copyUniforms,vertexShader:l.vertexShader,fragmentShader:l.fragmentShader,blending:NoBlending,depthTest:!1,depthWrite:!1,transparent:!0}),this.enabled=!0,this.needsSwap=!1,this._oldClearColor=new Color$1,this.oldClearAlpha=1,this.fsQuad=new FullScreenQuad(void 0),this.tempPulseColor1=new Color$1,this.tempPulseColor2=new Color$1,this.textureMatrix=new Matrix4}dispose(){var e,t,n,r;this.renderTargetMaskBuffer.dispose(),null===(e=this.renderTargetFxaaBuffer)||void 0===e||e.dispose(),null===(t=this.renderTargetDepthBuffer)||void 0===t||t.dispose(),this.renderTargetMaskDownSampleBuffer.dispose(),this.renderTargetBlurBuffer1.dispose(),this.renderTargetBlurBuffer2.dispose(),this.renderTargetEdgeBuffer1.dispose(),this.renderTargetEdgeBuffer2.dispose(),null===(n=this.depthMaterial)||void 0===n||n.dispose(),this.prepareMaskMaterial.dispose(),null===(r=this.fxaaRenderMaterial)||void 0===r||r.dispose(),this.edgeDetectionMaterial.dispose(),this.separableBlurMaterial1.dispose(),this.separableBlurMaterial2.dispose(),this.overlayMaterial.dispose(),this.materialCopy.dispose(),this.fsQuad.dispose()}setSize(e,t){var n,r,a;this.renderTargetMaskBuffer.setSize(e,t),null===(n=this.renderTargetDepthBuffer)||void 0===n||n.setSize(e,t);let i=Math.round(e/this.downSampleRatio),o=Math.round(t/this.downSampleRatio);this.renderTargetMaskDownSampleBuffer.setSize(i,o),this.renderTargetBlurBuffer1.setSize(i,o),this.renderTargetEdgeBuffer1.setSize(i,o),this.separableBlurMaterial1.uniforms.texSize.value.set(i,o),i=Math.round(i/2),o=Math.round(o/2),this.renderTargetBlurBuffer2.setSize(i,o),this.renderTargetEdgeBuffer2.setSize(i,o),this.separableBlurMaterial2.uniforms.texSize.value.set(i,o),null===(r=this.fxaaRenderMaterial)||void 0===r||r.uniforms.resolution.value.set(1/this.resolution.x,1/this.resolution.y),null===(a=this.renderTargetFxaaBuffer)||void 0===a||a.setSize(e,t)}_changeVisibilityOfSelectedObjects(e){const t=this._visibilityCache;function n(n){n.isMesh&&(!0===e?n.visible=t.get(n):(t.set(n,n.visible),n.visible=e))}this.selectedObjects.forEach(e=>e.traverse(n))}_changeVisibilityOfNonSelectedObjects(e){const t=this._visibilityCache,n=[];function r(e){e.isMesh&&n.push(e)}this.selectedObjects.forEach(e=>e.traverse(r)),this.renderScene.traverse((function(r){if(r.isMesh||r.isSprite){if(!1===n.some(e=>e.id===r.id)){const n=r.visible;!1!==e&&!0!==t.get(r)||(r.visible=e),t.set(r,n)}}else(r.isPoints||r.isLine)&&(!0===e?r.visible=t.get(r):(t.set(r,r.visible),r.visible=e))}))}_updateTextureMatrix(){this.textureMatrix.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),this.textureMatrix.multiply(this.renderCamera.projectionMatrix),this.textureMatrix.multiply(this.renderCamera.matrixWorldInverse)}render(e,t,n,r,a){var i,o;if(this.selectedObjects.length>0){null===(i=this._gBufferRenderTarget)||void 0===i||i.render(e,this.renderScene,this.renderCamera),e.getClearColor(this._oldClearColor),this.oldClearAlpha=e.getClearAlpha();const t=e.autoClear;e.autoClear=!1,a&&e.state.buffers.stencil.setTest(!1),e.setClearColor(16777215,1),this._changeVisibilityOfSelectedObjects(!1);const r=this.renderScene.background;this.renderScene.background=null,this.renderTargetDepthBuffer&&this.depthMaterial&&(this.renderScene.overrideMaterial=this.depthMaterial,e.setRenderTarget(this.renderTargetDepthBuffer),e.clear(),e.render(this.renderScene,this.renderCamera)),this._changeVisibilityOfSelectedObjects(!0),this._visibilityCache.clear(),this._updateTextureMatrix(),this._changeVisibilityOfNonSelectedObjects(!1),this.renderScene.overrideMaterial=this.prepareMaskMaterial,this.prepareMaskMaterial.uniforms.cameraNearFar.value.set(this.renderCamera.near,this.renderCamera.far),this._gBufferRenderTarget?this.prepareMaskMaterial.uniforms.depthTexture.value=this._gBufferRenderTarget.textureWithDepthValue:this.prepareMaskMaterial.uniforms.depthTexture.value=null===(o=this.renderTargetDepthBuffer)||void 0===o?void 0:o.texture,this.prepareMaskMaterial.uniforms.textureMatrix.value=this.textureMatrix,e.setRenderTarget(this.renderTargetMaskBuffer),e.clear(),e.render(this.renderScene,this.renderCamera),this.renderScene.overrideMaterial=null,this._changeVisibilityOfNonSelectedObjects(!0),this._visibilityCache.clear(),this.renderScene.background=r;let s=this.renderTargetMaskBuffer;if(this.edgeDetectionFxaa&&this.fxaaRenderMaterial&&this.renderTargetFxaaBuffer&&(this.fxaaRenderMaterial.uniforms.tDiffuse.value=this.renderTargetMaskBuffer.texture,this.fsQuad.material=this.fxaaRenderMaterial,e.setRenderTarget(this.renderTargetFxaaBuffer),e.clear(),this.fsQuad.render(e),s=this.renderTargetFxaaBuffer),this.fsQuad.material=this.materialCopy,this.copyUniforms.tDiffuse.value=s.texture,e.setRenderTarget(this.renderTargetMaskDownSampleBuffer),e.clear(),this.fsQuad.render(e),this.tempPulseColor1.copy(this.visibleEdgeColor),this.tempPulseColor2.copy(this.hiddenEdgeColor),this.pulsePeriod>0){const e=.625+.75*Math.cos(.01*performance.now()/this.pulsePeriod)/2;this.tempPulseColor1.multiplyScalar(e),this.tempPulseColor2.multiplyScalar(e)}this.fsQuad.material=this.edgeDetectionMaterial,this.edgeDetectionMaterial.uniforms.maskTexture.value=this.renderTargetMaskDownSampleBuffer.texture,this.edgeDetectionMaterial.uniforms.texSize.value.set(this.renderTargetMaskDownSampleBuffer.width,this.renderTargetMaskDownSampleBuffer.height),this.edgeDetectionMaterial.uniforms.visibleEdgeColor.value=this.tempPulseColor1,this.edgeDetectionMaterial.uniforms.hiddenEdgeColor.value=this.tempPulseColor2,e.setRenderTarget(this.renderTargetEdgeBuffer1),e.clear(),this.fsQuad.render(e),this.fsQuad.material=this.separableBlurMaterial1,this.separableBlurMaterial1.uniforms.colorTexture.value=this.renderTargetEdgeBuffer1.texture,this.separableBlurMaterial1.uniforms.direction.value=OutlinePass.BlurDirectionX,this.separableBlurMaterial1.uniforms.kernelRadius.value=this.edgeThickness,e.setRenderTarget(this.renderTargetBlurBuffer1),e.clear(),this.fsQuad.render(e),this.separableBlurMaterial1.uniforms.colorTexture.value=this.renderTargetBlurBuffer1.texture,this.separableBlurMaterial1.uniforms.direction.value=OutlinePass.BlurDirectionY,e.setRenderTarget(this.renderTargetEdgeBuffer1),e.clear(),this.fsQuad.render(e),this.fsQuad.material=this.separableBlurMaterial2,this.separableBlurMaterial2.uniforms.colorTexture.value=this.renderTargetEdgeBuffer1.texture,this.separableBlurMaterial2.uniforms.direction.value=OutlinePass.BlurDirectionX,e.setRenderTarget(this.renderTargetBlurBuffer2),e.clear(),this.fsQuad.render(e),this.separableBlurMaterial2.uniforms.colorTexture.value=this.renderTargetBlurBuffer2.texture,this.separableBlurMaterial2.uniforms.direction.value=OutlinePass.BlurDirectionY,e.setRenderTarget(this.renderTargetEdgeBuffer2),e.clear(),this.fsQuad.render(e),this.fsQuad.material=this.overlayMaterial,this.overlayMaterial.uniforms.maskTexture.value=s.texture,this.overlayMaterial.uniforms.edgeTexture1.value=this.renderTargetEdgeBuffer1.texture,this.overlayMaterial.uniforms.edgeTexture2.value=this.renderTargetEdgeBuffer2.texture,this.overlayMaterial.uniforms.patternTexture.value=this.patternTexture,this.overlayMaterial.uniforms.edgeStrength.value=this.edgeStrength,this.overlayMaterial.uniforms.edgeGlow.value=this.edgeGlow,this.overlayMaterial.uniforms.usePatternTexture.value=this.usePatternTexture,a&&e.state.buffers.stencil.setTest(!0),e.setRenderTarget(n),this.fsQuad.render(e),e.setClearColor(this._oldClearColor,this.oldClearAlpha),e.autoClear=t}this.renderToScreen&&n&&(this.fsQuad.material=this.materialCopy,this.copyUniforms.tDiffuse.value=n.texture,e.setRenderTarget(null),this.fsQuad.render(e))}_getPrepareMaskMaterial(e){return new ShaderMaterial({uniforms:{depthTexture:{value:null},cameraNearFar:{value:new Vector2(.5,.5)},textureMatrix:{value:null}},defines:{FLOAT_ALPHA_DEPTH:e?1:0},vertexShader:"#include <morphtarget_pars_vertex>\n\t\t\t\t#include <skinning_pars_vertex>\n\n\t\t\t\tvarying vec4 projTexCoord;\n\t\t\t\tvarying vec4 vPosition;\n\t\t\t\tuniform mat4 textureMatrix;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\t#include <skinbase_vertex>\n\t\t\t\t\t#include <begin_vertex>\n\t\t\t\t\t#include <morphtarget_vertex>\n\t\t\t\t\t#include <skinning_vertex>\n\t\t\t\t\t#include <project_vertex>\n\n\t\t\t\t\tvPosition = mvPosition;\n\n\t\t\t\t\tvec4 worldPosition = vec4( transformed, 1.0 );\n\n\t\t\t\t\t#ifdef USE_INSTANCING\n\n\t\t\t\t\t\tworldPosition = instanceMatrix * worldPosition;\n\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\tworldPosition = modelMatrix * worldPosition;\n\n\t\t\t\t\tprojTexCoord = textureMatrix * worldPosition;\n\n\t\t\t\t}",fragmentShader:"#include <packing>\n\t\t\t\tvarying vec4 vPosition;\n\t\t\t\tvarying vec4 projTexCoord;\n\t\t\t\tuniform sampler2D depthTexture;\n\t\t\t\tuniform vec2 cameraNearFar;\n\n\t\t\t\tvoid main() {\n\n #if FLOAT_ALPHA_DEPTH == 1\n\t\t\t\t\t float depth = texture2DProj( depthTexture, projTexCoord ).w;\n #else\n float depth = unpackRGBAToDepth(texture2DProj( depthTexture, projTexCoord ));\n #endif\n\t\t\t\t\tfloat viewZ = - DEPTH_TO_VIEW_Z( depth, cameraNearFar.x, cameraNearFar.y );\n\t\t\t\t\tfloat depthTest = (-vPosition.z > viewZ) ? 1.0 : 0.0;\n\t\t\t\t\tgl_FragColor = vec4(0.0, depthTest, 1.0, 1.0);\n\n\t\t\t\t}"})}_getEdgeDetectionMaterial(){return new ShaderMaterial({uniforms:{maskTexture:{value:null},texSize:{value:new Vector2(.5,.5)},visibleEdgeColor:{value:new Vector3(1,1,1)},hiddenEdgeColor:{value:new Vector3(1,1,1)}},vertexShader:"varying vec2 vUv;\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}",fragmentShader:"varying vec2 vUv;\n\n\t\t\t\tuniform sampler2D maskTexture;\n\t\t\t\tuniform vec2 texSize;\n\t\t\t\tuniform vec3 visibleEdgeColor;\n\t\t\t\tuniform vec3 hiddenEdgeColor;\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvec2 invSize = 1.0 / texSize;\n\t\t\t\t\tvec4 uvOffset = vec4(1.0, 0.0, 0.0, 1.0) * vec4(invSize, invSize);\n\t\t\t\t\tvec4 c1 = texture2D( maskTexture, vUv + uvOffset.xy);\n\t\t\t\t\tvec4 c2 = texture2D( maskTexture, vUv - uvOffset.xy);\n\t\t\t\t\tvec4 c3 = texture2D( maskTexture, vUv + uvOffset.yw);\n\t\t\t\t\tvec4 c4 = texture2D( maskTexture, vUv - uvOffset.yw);\n\t\t\t\t\tfloat diff1 = (c1.r - c2.r)*0.5;\n\t\t\t\t\tfloat diff2 = (c3.r - c4.r)*0.5;\n\t\t\t\t\tfloat d = length( vec2(diff1, diff2) );\n\t\t\t\t\tfloat a1 = min(c1.g, c2.g);\n\t\t\t\t\tfloat a2 = min(c3.g, c4.g);\n\t\t\t\t\tfloat visibilityFactor = min(a1, a2);\n\t\t\t\t\tvec3 edgeColor = 1.0 - visibilityFactor > 0.001 ? visibleEdgeColor : hiddenEdgeColor;\n\t\t\t\t\tgl_FragColor = vec4(edgeColor, 1.0) * vec4(d);\n\t\t\t\t}"})}_getSeperableBlurMaterial(e){return new ShaderMaterial({defines:{MAX_RADIUS:e},uniforms:{colorTexture:{value:null},texSize:{value:new Vector2(.5,.5)},direction:{value:new Vector2(.5,.5)},kernelRadius:{value:1}},vertexShader:"varying vec2 vUv;\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}",fragmentShader:"#include <common>\n\t\t\t\tvarying vec2 vUv;\n\t\t\t\tuniform sampler2D colorTexture;\n\t\t\t\tuniform vec2 texSize;\n\t\t\t\tuniform vec2 direction;\n\t\t\t\tuniform float kernelRadius;\n\n\t\t\t\tfloat gaussianPdf(in float x, in float sigma) {\n\t\t\t\t\treturn 0.39894 * exp( -0.5 * x * x/( sigma * sigma))/sigma;\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvec2 invSize = 1.0 / texSize;\n\t\t\t\t\tfloat sigma = kernelRadius/2.0;\n\t\t\t\t\tfloat weightSum = gaussianPdf(0.0, sigma);\n\t\t\t\t\tvec4 diffuseSum = texture2D( colorTexture, vUv) * weightSum;\n\t\t\t\t\tvec2 delta = direction * invSize * kernelRadius/float(MAX_RADIUS);\n\t\t\t\t\tvec2 uvOffset = delta;\n\t\t\t\t\tfor( int i = 1; i <= MAX_RADIUS; i ++ ) {\n\t\t\t\t\t\tfloat x = kernelRadius * float(i) / float(MAX_RADIUS);\n\t\t\t\t\t\tfloat w = gaussianPdf(x, sigma);\n\t\t\t\t\t\tvec4 sample1 = texture2D( colorTexture, vUv + uvOffset);\n\t\t\t\t\t\tvec4 sample2 = texture2D( colorTexture, vUv - uvOffset);\n\t\t\t\t\t\tdiffuseSum += ((sample1 + sample2) * w);\n\t\t\t\t\t\tweightSum += (2.0 * w);\n\t\t\t\t\t\tuvOffset += delta;\n\t\t\t\t\t}\n\t\t\t\t\tgl_FragColor = diffuseSum/weightSum;\n\t\t\t\t}"})}_getOverlayMaterial(){return new ShaderMaterial({uniforms:{maskTexture:{value:null},edgeTexture1:{value:null},edgeTexture2:{value:null},patternTexture:{value:null},edgeStrength:{value:1},edgeGlow:{value:1},usePatternTexture:{value:0}},vertexShader:"varying vec2 vUv;\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}",fragmentShader:"varying vec2 vUv;\n\n\t\t\t\tuniform sampler2D maskTexture;\n\t\t\t\tuniform sampler2D edgeTexture1;\n\t\t\t\tuniform sampler2D edgeTexture2;\n\t\t\t\tuniform sampler2D patternTexture;\n\t\t\t\tuniform float edgeStrength;\n\t\t\t\tuniform float edgeGlow;\n\t\t\t\tuniform bool usePatternTexture;\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvec4 edgeValue1 = texture2D(edgeTexture1, vUv);\n\t\t\t\t\tvec4 edgeValue2 = texture2D(edgeTexture2, vUv);\n\t\t\t\t\tvec4 maskColor = texture2D(maskTexture, vUv);\n\t\t\t\t\tvec4 patternColor = texture2D(patternTexture, 6.0 * vUv);\n\t\t\t\t\tfloat visibilityFactor = 1.0 - maskColor.g > 0.0 ? 1.0 : 0.5;\n\t\t\t\t\tvec4 edgeValue = edgeValue1 + edgeValue2 * edgeGlow;\n\t\t\t\t\tvec4 finalColor = edgeStrength * maskColor.r * edgeValue;\n\t\t\t\t\tif(usePatternTexture)\n\t\t\t\t\t\tfinalColor += + visibilityFactor * (1.0 - maskColor.r) * (1.0 - patternColor.r);\n\t\t\t\t\tgl_FragColor = finalColor;\n }",blending:AdditiveBlending,depthTest:!1,depthWrite:!1,transparent:!0})}}OutlinePass.BlurDirectionX=new Vector2(1,0),OutlinePass.BlurDirectionY=new Vector2(0,1);class OutLineRenderer{get isOutlinePassActivated(){return this.outlinePassActivated}constructor(e,t,n,r){this._width=0,this._height=0,this._effectComposer=null,this.outlinePass=null,this.outlinePassActivated=!1,this._effectComposer=e,this._gBufferRenderTarget=null==r?void 0:r._gBufferRenderTarget,this._width=t,this._height=n,this.parameters={enabled:!0,edgeStrength:2,edgeGlow:1,edgeThickness:2,pulsePeriod:0,usePatternTexture:!1,visibleEdgeColor:16777215,hiddenEdgeColor:16777215,...r}}dispose(){var e;null===(e=this.outlinePass)||void 0===e||e.dispose()}setSize(e,t){var n;this._width=e,this._height=t,null===(n=this.outlinePass)||void 0===n||n.setSize(e,t)}updateParameters(e){for(let t in e)this.parameters.hasOwnProperty(t)&&(this.parameters[t]=e[t])}applyParameters(){this.outlinePass&&(this.outlinePass.edgeStrength=this.parameters.edgeStrength,this.outlinePass.edgeGlow=this.parameters.edgeGlow,this.outlinePass.edgeThickness=this.parameters.edgeThickness,this.outlinePass.pulsePeriod=this.parameters.pulsePeriod,this.outlinePass.usePatternTexture=this.parameters.usePatternTexture,this.outlinePass.visibleEdgeColor.set(this.parameters.visibleEdgeColor),this.outlinePass.hiddenEdgeColor.set(this.parameters.hiddenEdgeColor))}activateOutline(e,t){var n;if(!this.parameters.enabled)return void this.deactivateOutline();const r=(null===(n=this.outlinePass)||void 0===n?void 0:n.renderCamera)&&t.isPerspectiveCamera!==this.outlinePass.renderCamera.isPerspectiveCamera;this.outlinePass&&(this.outlinePass.renderScene=e,this.outlinePass.renderCamera=t),!r&&this.outlinePassActivated||(!r&&this.outlinePass||(this.outlinePass=new OutlinePass(new Vector2(this._width,this._height),e,t,[],{downSampleRatio:2,edgeDetectionFxaa:!0,_gBufferRenderTarget:this._gBufferRenderTarget})),this.applyParameters(),this._effectComposer&&this._effectComposer.addPass(this.outlinePass),this.outlinePassActivated=!0)}deactivateOutline(){this.outlinePassActivated&&(this.outlinePass&&this._effectComposer&&this._effectComposer.removePass(this.outlinePass),this.outlinePassActivated=!1)}updateOutline(e,t,n){n.length>0?(this.activateOutline(e,t),this.outlinePass&&(this.outlinePass.selectedObjects=n)):this.deactivateOutline()}}class RectAreaLightHelper extends Line{constructor(e,t){const n=new BufferGeometry;n.setAttribute("position",new Float32BufferAttribute([1,1,0,-1,1,0,-1,-1,0,1,-1,0,1,1,0],3)),n.computeBoundingSphere(),super(n,new LineBasicMaterial({fog:!1})),this.light=e,this.color=t,this.type="RectAreaLightHelper";const r=new BufferGeometry;r.setAttribute("position",new Float32BufferAttribute([1,1,0,-1,1,0,-1,-1,0,1,1,0,-1,-1,0,1,-1,0],3)),r.computeBoundingSphere(),this.add(new Mesh(r,new MeshBasicMaterial({side:BackSide,fog:!1})))}updateMatrixWorld(){if(this.scale.set(.5*this.light.width,.5*this.light.height,1),void 0!==this.color)this.material.color.set(this.color),this.children[0].material.color.set(this.color);else{this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);const e=this.material.color,t=Math.max(e.r,e.g,e.b);t>1&&e.multiplyScalar(1/t),this.children[0].material.color.copy(this.material.color)}this.matrixWorld.extractRotation(this.light.matrixWorld).scale(this.scale).copyPosition(this.light.matrixWorld),this.children[0].matrixWorld.copy(this.matrixWorld)}dispose(){this.geometry.dispose(),this.material.dispose(),this.children[0].geometry.dispose(),this.children[0].material.dispose()}}var ShadowLightSourceType;!function(e){e[e.DirectionalLightShadow=0]="DirectionalLightShadow",e[e.SpotLightShadow=1]="SpotLightShadow"}(ShadowLightSourceType||(ShadowLightSourceType={}));const defaultScreenSpaceShadowMapParameters={alwaysUpdate:!1,enableShadowMap:!0,layers:null,shadowLightSourceType:ShadowLightSourceType.DirectionalLightShadow,maximumNumberOfLightSources:-1,directionalDependency:1,directionalExponent:1,groundContainment:1,fadeOutDistance:.1,fadeOutBlur:20};class ScreenSpaceShadowMap{get shadowTexture(){return this._shadowRenderTarget.texture}constructor(e,t,n){var r,a;this.needsUpdate=!1,this.shadowTypeNeedsUpdate=!0,this.shadowConfiguration=new ShadowTypeConfiguration,this._shadowLightSources=[],this._shadowScale=1,this._renderPass=new RenderPass,this._cameraUpdate=new CameraUpdate,this._renderCacheManager=e,this._viewportSize=new Vector2(t.x,t.y),this._samples=null!==(r=null==n?void 0:n.samples)&&void 0!==r?r:0,this._shadowMapSize=null!==(a=null==n?void 0:n.shadowMapSize)&&void 0!==a?a:1024,this.parameters=this._getScreenSpaceShadowMapParameters(n),this.castShadow=this.parameters.enableShadowMap,this._shadowMapPassOverrideMaterialCache=new ShadowMapPassOverrideMaterialCache(this.parameters),this._renderCacheManager.registerCache(this,this._shadowMapPassOverrideMaterialCache);const i=this._samples;this._shadowRenderTarget=new WebGLRenderTarget(this._viewportSize.x,this._viewportSize.y,{samples:i,format:RedFormat})}_getScreenSpaceShadowMapParameters(e){return{...defaultScreenSpaceShadowMapParameters,...e}}dispose(){this._shadowLightSources.forEach(e=>e.dispose()),this._shadowRenderTarget.dispose(),this._shadowMapPassOverrideMaterialCache.dispose()}updateParameters(e){for(let t in e)this.parameters.hasOwnProperty(t)&&(this.parameters[t]=e[t])}updateBounds(e,t){const n=this._shadowScale;this._shadowScale=t,Math.abs(n-this._shadowScale)>1e-5&&(this.shadowTypeNeedsUpdate=!0),this._shadowLightSources.forEach(t=>t.updateBounds(e)),this._shadowMapPassOverrideMaterialCache.setBoundingBox(e.bounds)}forceShadowUpdate(){this._shadowLightSources.forEach(e=>e.forceShadowUpdate()),this.needsUpdate=!0}getShadowLightSources(){return this._shadowLightSources.map(e=>e.getShadowLight())}findShadowLightSource(e){var t;return null===(t=this._shadowLightSources.find(t=>t.getOriginalLight()===e))||void 0===t?void 0:t.getShadowLight()}addRectAreaLight(e,t){const n=new RectAreaShadowLightSource(e,{shadowMapSize:this._shadowMapSize,shadowLightSourceType:this.parameters.shadowLightSourceType});this._shadowLightSources.push(n),n.addTo(t),n.updatePositionAndTarget(),this.needsUpdate=!0}updateRectAreaLights(e,t){this._shadowLightSources=this._shadowLightSources.filter(n=>{if(n instanceof RectAreaShadowLightSource){const t=n.getRectAreaLight();if(e.includes(t))return n.updatePositionAndTarget(),!0}return n.removeFrom(t),n.dispose(),!1}),e.forEach(e=>{this._shadowLightSources.find(t=>t instanceof RectAreaShadowLightSource&&t.getRectAreaLight()===e)||this.addRectAreaLight(e,t)}),this.needsUpdate=!0,this.shadowTypeNeedsUpdate=!0}createShadowFromLightSources(e,t){this._shadowLightSources=this._shadowLightSources.filter(t=>{t.removeFrom(e),t.dispose()});const n=1/(t.length>0?Math.max(...t.map(e=>e.maxIntensity)):1);this._addShadowFromLightSources(t,n),this._shadowLightSources.forEach(t=>{t.addTo(e),t.updatePositionAndTarget()}),this.needsUpdate=!0,this.shadowTypeNeedsUpdate=!0}_addShadowFromLightSources(e,t){e.forEach(e=>{const n=e.maxIntensity*t;if(n>=.1&&e.position.z>=0){const t=new Vector3(e.position.x,e.position.z,e.position.y).multiplyScalar(7),r=new EnvironmentShadowLightSource(t,n,{shadowMapSize:this._shadowMapSize,shadowLightSourceType:this.parameters.shadowLightSourceType});this._shadowLightSources.push(r)}})}setSize(e,t){this._viewportSize=new Vector2(e,t),this._shadowRenderTarget.setSize(this._viewportSize.x,this._viewportSize.y)}updatePositionAndTarget(){this._shadowLightSources.forEach(e=>e.updatePositionAndTarget())}renderShadowMap(e,t,n){if(!(this.needsUpdate||this.parameters.alwaysUpdate||this._cameraUpdate.changed(n)))return;this.needsUpdate=!1,this.shadowTypeNeedsUpdate&&(this.shadowTypeNeedsUpdate=!1,this.needsUpdate=!0,this._updateShadowType(e));const r=t.background,a=t.environment,i=n.layers.mask;t.environment=null,t.background=null,this.parameters.layers&&(n.layers.mask=this.parameters.layers.mask),this._renderSimpleShadowMapFromShadowLightSources(e,t,n),n.layers.mask=i,t.environment=a,t.background=r}_renderSimpleShadowMapFromShadowLightSources(e,t,n){this._shadowMapPassOverrideMaterialCache.setShadowParameters(this.parameters.directionalDependency,this.parameters.directionalExponent,this.parameters.groundContainment,this.parameters.fadeOutDistance*this._shadowScale,this.parameters.fadeOutBlur);const r=this._getSortedShadowLightSources();0===r.length?this._renderPass.clear(e,this._shadowRenderTarget,16777215,1):(this._setShadowLightSourcesIntensity(r),this._renderCacheManager.render(this,t,()=>{this._renderPass.render(e,t,n,this._shadowRenderTarget,16777215,1)}),this._shadowLightSources.forEach(e=>e.finishRenderShadow()))}_getSortedShadowLightSources(){let e=[];return this._shadowLightSources.forEach(t=>e.push(...t.prepareRenderShadow())),e.sort((e,t)=>e.light.castShadow&&!t.light.castShadow?-1:!e.light.castShadow&&t.light.castShadow?1:t.intensity-e.intensity),e}_setShadowLightSourcesIntensity(e){var t;let n=0;for(let t=0;t<e.length;t++){const r=e[t];(this.parameters.maximumNumberOfLightSources<0||t<this.parameters.maximumNumberOfLightSources)&&(n+=r.intensity)}for(let r=0;r<e.length;r++){const a=e[r];this.parameters.maximumNumberOfLightSources<0||r<this.parameters.maximumNumberOfLightSources?(a.light.visible=!0,a.light.intensity=a.intensity/n,(t=a.light).castShadow&&(t.castShadow=this.castShadow)):(a.light.visible=!1,a.light.intensity=0,a.light.castShadow=!1)}}_updateShadowType(e){e.shadowMap.type=this.shadowConfiguration.currentConfiguration.type;const t=this.parameters.enableShadowMap&&this.shadowConfiguration.currentConfiguration.castShadow;e.shadowMap.enabled=t,e.shadowMap.needsUpdate=!0,this.castShadow=t&&this.shadowConfiguration.currentConfiguration.castShadow,this._shadowLightSources.forEach(e=>e._updateShadowType(this.shadowConfiguration.currentConfiguration,this._shadowScale))}switchType(e){return!!this.shadowConfiguration.switchType(e)&&(this.needsUpdate=!0,this.shadowTypeNeedsUpdate=!0,!0)}}var ShadowMaterialType,NormalVectorSourceType,DepthValueSourceType;!function(e){e[e.Default=0]="Default",e[e.Unlit=1]="Unlit",e[e.Emissive=2]="Emissive",e[e.Shadow=3]="Shadow"}(ShadowMaterialType||(ShadowMaterialType={}));class ShadowMapPassOverrideMaterialCache{constructor(e){var t,n;this._sceneBoxMin=new Vector3(-1,-1,-1),this._sceneBoxMax=new Vector3(1,1,1),this._distributionProperties=new Vector4(1,1,1,0),this._objectCache=new Map,this._shadowFadeOut=new Vector2(null!==(t=null==e?void 0:e.fadeOutTo)&&void 0!==t?t:.5,null!==(n=null==e?void 0:e.fadeOutBlur)&&void 0!==n?n:60),this._shadowObjectMaterial=this._createShadowMaterial(ShadowMaterialType.Default),this._unlitMaterial=this._createShadowMaterial(ShadowMaterialType.Unlit),this._emissiveMaterial=this._createShadowMaterial(ShadowMaterialType.Emissive),this._receiveShadowMaterial=this._createShadowMaterial(ShadowMaterialType.Shadow)}dispose(){this._shadowObjectMaterial.dispose(),this._unlitMaterial.dispose(),this._emissiveMaterial.dispose(),this._receiveShadowMaterial.dispose()}setShadowParameters(e,t,n,r,a){this._distributionProperties.set(e,t,n,0),this._shadowFadeOut.set(r,a)}setBoundingBox(e){this._sceneBoxMin.copy(e.min),this._sceneBoxMax.copy(e.max)}_createShadowMaterial(e){let t;return t=e===ShadowMaterialType.Emissive||e===ShadowMaterialType.Unlit?new MeshBasicMaterial({color:16777215,side:DoubleSide}):e===ShadowMaterialType.Shadow?new ShadowMaterial({side:DoubleSide}):ShadowMapPassOverrideMaterialCache.useModifiedMaterial?this._createCustomerShadowMaterial():new MeshPhongMaterial({color:16777215,shininess:0,polygonOffsetFactor:0,polygonOffsetUnits:0,side:DoubleSide}),t}_createCustomerShadowMaterial(){const e=new MeshLambertMaterial({side:DoubleSide});return e.onBeforeCompile=e=>{e.vertexShader="\n#define LAMBERT\n\nvarying vec3 vViewPosition;\nvarying vec3 vWorldPosition;\n\n#include <common>\n#include <displacementmap_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\n\nvoid main() {\n #include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\n\tvViewPosition = - mvPosition.xyz;\n\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\n vWorldPosition = worldPosition.xyz;\n}\n",e.fragmentShader="\n#define LAMBERT\n\nuniform vec3 diffuse;\nuniform float opacity;\n\nvarying vec3 vViewPosition;\nvarying vec3 vWorldPosition;\n\n#ifdef DYNAMIC_SHADOW_RADIUS\n uniform vec2 shadowFadeOut;\n uniform vec3 sceneBoxMin;\n uniform vec3 sceneBoxMax;\n#endif\nuniform vec4 distributionProperties;\n\n#include <common>\n#include <packing>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\n\nvec2 getShadowDynamicScale() {\n\n vec2 dynamicScale = vec2(0.0, 1.0);\n\n#ifdef DYNAMIC_SHADOW_RADIUS\n if (shadowFadeOut.x > 0.0) {\n vec3 boxDistanceVec = max(vec3(0.0), max(sceneBoxMin - vWorldPosition, vWorldPosition - sceneBoxMax));\n float boxDistance = length(boxDistanceVec);\n \n // linear interpolation gives better result than smooth Hermite interpolation\n // float shadowBase = smoothstep(0.0, shadowFadeOut.x, boxDistance);\n float shadowBase = boxDistance / shadowFadeOut.x;\n\n shadowBase = clamp(shadowBase, 0.0, 1.0);\n dynamicScale = vec2(shadowBase, 1.0 - shadowBase);\n }\n#endif\n\n return dynamicScale;\n}\n\nfloat getShadowDynamicRadius(sampler2D shadowMap, float shadowBias, float shadowRadius, vec4 shadowCoord, vec2 shadowScale) {\n\n float dynamicRadius = shadowRadius;\n\n#ifdef DYNAMIC_SHADOW_RADIUS\n shadowCoord.xyz /= shadowCoord.w;\n shadowCoord.z += shadowBias;\n\n bool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n bool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n if (frustumTest && shadowFadeOut.x > 0.0) {\n float shadowDepth = unpackRGBAToDepth(texture2D(shadowMap, shadowCoord.xy));\n float delta = shadowDepth - shadowCoord.z;\n float fadeOutScale = max(shadowScale.x, smoothstep(max(shadowDepth, 0.5), shadowFadeOut.x * 0.5 + 0.5, shadowCoord.z));\n dynamicRadius = shadowRadius + shadowFadeOut.y * max(0.0, fadeOutScale);\n }\n#endif\n\n return dynamicRadius;\n}\n\nvoid main() {\n\n\t#include <clipping_planes_fragment>\n\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t\n\t#include <logdepthbuf_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\n\t// accumulation\n\n\tvec3 geometryPosition = - vViewPosition;\n vec3 geometryNormal = normal;\n vec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n\n IncidentLight directLight;\n\n vec3 accumulatedShadowLight = vec3(0.0);\n vec3 directionDependentShadowLight = vec3(1.0);\n float groundDistance = clamp((vWorldPosition.y - sceneBoxMin.y) * 100.0, 0.0, 1.0);\n float groundContainment = mix(1.0, groundDistance, distributionProperties.z);\n vec2 dynamicScale = getShadowDynamicScale();\n #if ( NUM_DIR_LIGHTS > 0 )\n\n DirectionalLight directionalLight;\n #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n DirectionalLightShadow directionalLightShadow;\n #endif\n\n float dynamicRadius;\n vec3 incidentLightSum = vec3(0.0);\n vec3 incidentShadowLight = vec3(0.0);\n float shadowFactor;\n float dotNL;\n float incidentLightFactor;\n\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n directionalLight = directionalLights[ i ];\n getDirectionalLightInfo( directionalLight, directLight );\n dotNL = dot(dot(geometryNormal, geometryPosition) >= 0.0 ? -geometryNormal : geometryNormal, directLight.direction);\n incidentLightFactor = clamp(dotNL, 0.0, 1.0);\n\n dynamicRadius = 0.0;\n shadowFactor = 1.0;\n #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n directionalLightShadow = directionalLightShadows[ i ];\n dynamicRadius = getShadowDynamicRadius(directionalShadowMap[i], directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[i], dynamicScale);\n shadowFactor = ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, dynamicRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n #endif\n\n accumulatedShadowLight += directLight.color * shadowFactor * saturate(min(dotNL * 10.0 + 0.9, 1.0));\n incidentLightFactor = mix(\n mix(pow(incidentLightFactor, 4.0), 1.0, step(0.99, shadowFactor)),\n pow(incidentLightFactor, distributionProperties.y),\n groundContainment);\n incidentLightSum += directLight.color * mix(incidentLightFactor, 1.0, groundContainment);\n incidentShadowLight += directLight.color * mix(\n shadowFactor * incidentLightFactor, \n mix(1.0, shadowFactor, incidentLightFactor), \n groundContainment);\n }\n #pragma unroll_loop_end\n\n if (dot(incidentLightSum, vec3(1.0)) > 0.01) {\n directionDependentShadowLight = incidentShadowLight / incidentLightSum;\n }\n #else\n accumulatedShadowLight = vec3(1.0);\n #endif \n\n\t// modulation\n\n\tvec3 outgoingLight = mix(accumulatedShadowLight, directionDependentShadowLight, max(distributionProperties.x, 1.0 - groundDistance));\n outgoingLight = dynamicScale.x + directionDependentShadowLight.y * outgoingLight;\n\n\t#include <opaque_fragment>\n\t#include <premultiplied_alpha_fragment>\n}\n",e.defines=Object.assign({...e.defines,DYNAMIC_SHADOW_RADIUS:""});const t=e.uniforms;t&&(t.distributionProperties={value:this._distributionProperties},t.shadowFadeOut={value:this._shadowFadeOut},t.sceneBoxMin={value:this._sceneBoxMin},t.sceneBoxMax={value:this._sceneBoxMax})},e}clear(){this._objectCache.clear()}addLineOrPoint(e){this._addCacheEntry(e,!1,!1)}addMesh(e){e.visible&&this._setMeshMaterialAndVisibility(e)}addObject(e){e.isLight&&!e.userData.shadowLightSource&&this._addCacheEntry(e,!1,!1)}_addCacheEntry(e,t,n,r){this._objectCache.set(e,{originalObject:{visible:e.visible,castShadow:e.castShadow,material:e.material},shadowObject:{visible:t,castShadow:n,material:r}})}onBeforeRender(){this._objectCache.forEach((e,t)=>{t.visible=e.shadowObject.visible,t.castShadow=e.shadowObject.castShadow,t instanceof Mesh&&e.shadowObject.material&&(t.material=e.shadowObject.material)})}onAfterRender(){this._objectCache.forEach((e,t)=>{t.visible=e.originalObject.visible,t.castShadow=e.originalObject.castShadow,e.originalObject.material&&(t.material=e.originalObject.material)})}_setMeshMaterialAndVisibility(e){!e.material||!e.receiveShadow||Array.isArray(e.material)||!0===e.material.transparent&&e.material.opacity<.9?e.userData.isFloor?this._addCacheEntry(e,e.visible,e.castShadow,this._shadowObjectMaterial):e.material&&e.material.transparent&&e.material.opacity<.9?this._addCacheEntry(e,!1,e.castShadow,this._shadowObjectMaterial):e.receiveShadow?this._addCacheEntry(e,e.visible,!1,this._receiveShadowMaterial):this._addCacheEntry(e,!1,e.castShadow,e.material):this._setShadowMaterialForOpaqueObject(e)}_setShadowMaterialForOpaqueObject(e){const t=e.material;t instanceof LineBasicMaterial||t instanceof MeshBasicMaterial?this._addCacheEntry(e,e.visible,e.castShadow,this._unlitMaterial):t instanceof MeshStandardMaterial?this._setMeshShadowStandardMaterial(e,t):this._addCacheEntry(e,e.visible,e.castShadow,e.receiveShadow?this._shadowObjectMaterial:this._unlitMaterial)}_setMeshShadowStandardMaterial(e,t){const n=t.emissiveIntensity>0&&(t.emissive.r>0||t.emissive.g>0||t.emissive.b>0);this._addCacheEntry(e,e.visible,!n&&e.castShadow,n?this._emissiveMaterial:e.receiveShadow?this._shadowObjectMaterial:this._unlitMaterial)}}ShadowMapPassOverrideMaterialCache.useModifiedMaterial=!0;class ShadowTypeConfiguration{constructor(){var e;this.types=new Map([["off",ShadowTypeConfiguration._noShadow],["BasicShadowMap",ShadowTypeConfiguration._basicShadow],["PCFShadowMap",ShadowTypeConfiguration._pcfShadow],["PCFSoftShadowMap",ShadowTypeConfiguration._pcfSoftShadow],["VSMShadowMap",ShadowTypeConfiguration._vcmShadow]]),this.shadowType="PCFShadowMap",this.currentConfiguration=null!==(e=this.types.get(this.shadowType))&&void 0!==e?e:ShadowTypeConfiguration._defaultType}switchType(e){var t;return!!this.types.has(e)&&(this.currentConfiguration=null!==(t=this.types.get(e))&&void 0!==t?t:ShadowTypeConfiguration._defaultType,!0)}}ShadowTypeConfiguration._noShadow={castShadow:!1,type:PCFShadowMap,bias:0,normalBias:0,radius:0},ShadowTypeConfiguration._basicShadow={castShadow:!0,type:BasicShadowMap,bias:-5e-5,normalBias:.005,radius:0},ShadowTypeConfiguration._pcfShadow={castShadow:!0,type:PCFShadowMap,bias:-5e-5,normalBias:.01,radius:4},ShadowTypeConfiguration._pcfSoftShadow={castShadow:!0,type:PCFSoftShadowMap,bias:-5e-5,normalBias:.01,radius:1},ShadowTypeConfiguration._vcmShadow={castShadow:!0,type:VSMShadowMap,bias:1e-4,normalBias:0,radius:15},ShadowTypeConfiguration._defaultType=ShadowTypeConfiguration._pcfShadow;class BaseShadowLightSource{constructor(e,t){var n,r;this._isVisibleBackup=!0,this._castShadowBackup=!0,this._shadowMapSize=null!==(n=null==t?void 0:t.shadowMapSize)&&void 0!==n?n:1024,this._blurSamples=null!==(r=null==t?void 0:t._blurSamples)&&void 0!==r?r:8,this._shadowLightSource=e,this._shadowLightSource.visible=!1,this._shadowLightSource.castShadow=!0,this._shadowLightSource.shadow&&(this._shadowLightSource.shadow.mapSize=new Vector2(this._shadowMapSize,this._shadowMapSize),this._shadowLightSource.shadow.blurSamples=this._blurSamples,this._shadowLightSource.shadow.autoUpdate=!1),this._shadowLightSource.userData.shadowLightSource=this}getPosition(){return this._shadowLightSource.position}getShadowLight(){return this._shadowLightSource}getOriginalLight(){return null}dispose(){this._shadowLightSource.dispose()}addTo(e){e.add(this._shadowLightSource)}removeFrom(e){e.remove(this._shadowLightSource)}updatePositionAndTarget(){this._updateShadowPositionAndTarget(this.getPosition(),new Vector3(0,0,0))}updateBounds(e){if(this._shadowLightSource instanceof SpotLight){const t=this._shadowLightSource.shadow.camera,n=e.bounds.clone().applyMatrix4(t.matrixWorldInverse),r=Math.max(.001,Math.min(-n.min.z,-n.max.z)),a=Math.max(-n.min.z,-n.max.z),i=Math.max(Math.abs(n.min.x),Math.abs(n.max.x)),o=Math.max(Math.abs(n.min.y),Math.abs(n.max.y)),s=Math.atan2(1.05*Math.hypot(o,i),r);t.aspect=1,t.near=r,t.far=a,this._shadowLightSource.angle=s}else if(this._shadowLightSource.shadow){const t=this._shadowLightSource.shadow.camera;e.updateCameraViewVolumeFromBounds(t);const n=t;n.far+=n.far-n.near,n.updateProjectionMatrix()}this._shadowLightSource.shadow&&(this._shadowLightSource.shadow.needsUpdate=!0)}forceShadowUpdate(){this._shadowLightSource.shadow&&(this._shadowLightSource.shadow.needsUpdate=!0)}_updateShadowPositionAndTarget(e,t){var n,r,a;if(this._shadowLightSource instanceof SpotLight){const n=t.clone().sub(e),r=n.length();n.normalize();const a=t.clone().sub(n.clone().multiplyScalar(4*r));this._shadowLightSource.shadow.camera.position.copy(a),this._shadowLightSource.shadow.camera.position.copy(a),this._shadowLightSource.shadow.camera.lookAt(t),this._shadowLightSource.position.copy(a),this._shadowLightSource.lookAt(t)}else this._shadowLightSource.position.copy(e),this._shadowLightSource.lookAt(t),null===(n=this._shadowLightSource.shadow)||void 0===n||n.camera.position.copy(e),null===(r=this._shadowLightSource.shadow)||void 0===r||r.camera.lookAt(t);null===(a=this._shadowLightSource.shadow)||void 0===a||a.camera.updateMatrixWorld(),this._shadowLightSource.updateMatrixWorld()}_updateShadowType(e,t){const n=this._shadowLightSource.shadow;n&&(n.bias=e.bias,n.normalBias=e.normalBias*t,n.radius=e.radius,n.needsUpdate=!0)}prepareRenderShadow(){return[]}finishRenderShadow(){}}class RectAreaShadowLightSource extends BaseShadowLightSource{constructor(e,t){let n;switch(null==t?void 0:t.shadowLightSourceType){default:case ShadowLightSourceType.DirectionalLightShadow:n=new DirectionalLight(16777215,1);break;case ShadowLightSourceType.SpotLightShadow:n=new SpotLight(16777215,1,0,Math.PI/4,0)}n.position.copy(e.position),n.lookAt(0,0,0),super(n,t),this._rectAreaLight=e,this._rectAreaLight.userData.shadowLightSource=this,(null==t?void 0:t.addHelper)&&(this._rectLightHelper=new RectAreaLightHelper(this._rectAreaLight),this._rectLightHelper.material.depthWrite=!1,this._rectAreaLight.add(this._rectLightHelper))}getPosition(){return this._rectAreaLight.position}getRectAreaLight(){return this._rectAreaLight}getOriginalLight(){return this._rectAreaLight}prepareRenderShadow(){return this._isVisibleBackup=this._rectAreaLight.visible,this._castShadowBackup=this._shadowLightSource.castShadow,this._shadowLightSource.visible=this._rectAreaLight.visible,this._rectAreaLight.visible=!1,this._shadowLightSource.visible?[{light:this._shadowLightSource,intensity:this._rectAreaLight.intensity}]:[]}finishRenderShadow(){this._shadowLightSource.visible=!1,this._shadowLightSource.castShadow=this._castShadowBackup,this._rectAreaLight.visible=this._isVisibleBackup}}class EnvironmentShadowLightSource extends BaseShadowLightSource{constructor(e,t,n){const r=new DirectionalLight(16777215,t);r.position.copy(e),r.lookAt(0,0,0),r.updateMatrix(),r.castShadow=!0,super(r,n),this._position=e.clone(),this._intensity=t}getPosition(){return this._position}prepareRenderShadow(){return this._castShadowBackup=this._shadowLightSource.castShadow,this._shadowLightSource.visible=!0,[{light:this._shadowLightSource,intensity:this._intensity}]}finishRenderShadow(){this._shadowLightSource.castShadow=this._castShadowBackup,this._shadowLightSource.visible=!1}}!function(e){e[e.INPUT_RGB_NORMAL=0]="INPUT_RGB_NORMAL",e[e.FLOAT_BUFFER_NORMAL=1]="FLOAT_BUFFER_NORMAL",e[e.CONSTANT_Z=2]="CONSTANT_Z"}(NormalVectorSourceType||(NormalVectorSourceType={})),function(e){e[e.SEPARATE_BUFFER=0]="SEPARATE_BUFFER",e[e.NORMAL_VECTOR_ALPHA=1]="NORMAL_VECTOR_ALPHA"}(DepthValueSourceType||(DepthValueSourceType={}));class SimplexNoise{constructor(e=Math){this.grad3=[[1,1,0],[-1,1,0],[1,-1,0],[-1,-1,0],[1,0,1],[-1,0,1],[1,0,-1],[-1,0,-1],[0,1,1],[0,-1,1],[0,1,-1],[0,-1,-1]],this.grad4=[[0,1,1,1],[0,1,1,-1],[0,1,-1,1],[0,1,-1,-1],[0,-1,1,1],[0,-1,1,-1],[0,-1,-1,1],[0,-1,-1,-1],[1,0,1,1],[1,0,1,-1],[1,0,-1,1],[1,0,-1,-1],[-1,0,1,1],[-1,0,1,-1],[-1,0,-1,1],[-1,0,-1,-1],[1,1,0,1],[1,1,0,-1],[1,-1,0,1],[1,-1,0,-1],[-1,1,0,1],[-1,1,0,-1],[-1,-1,0,1],[-1,-1,0,-1],[1,1,1,0],[1,1,-1,0],[1,-1,1,0],[1,-1,-1,0],[-1,1,1,0],[-1,1,-1,0],[-1,-1,1,0],[-1,-1,-1,0]],this.p=[];for(let t=0;t<256;t++)this.p[t]=Math.floor(256*e.random());this.perm=[];for(let e=0;e<512;e++)this.perm[e]=this.p[255&e];this.simplex=[[0,1,2,3],[0,1,3,2],[0,0,0,0],[0,2,3,1],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,2,3,0],[0,2,1,3],[0,0,0,0],[0,3,1,2],[0,3,2,1],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,3,2,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,2,0,3],[0,0,0,0],[1,3,0,2],[0,0,0,0],[0,0,0,0],[0,0,0,0],[2,3,0,1],[2,3,1,0],[1,0,2,3],[1,0,3,2],[0,0,0,0],[0,0,0,0],[0,0,0,0],[2,0,3,1],[0,0,0,0],[2,1,3,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[2,0,1,3],[0,0,0,0],[0,0,0,0],[0,0,0,0],[3,0,1,2],[3,0,2,1],[0,0,0,0],[3,1,2,0],[2,1,0,3],[0,0,0,0],[0,0,0,0],[0,0,0,0],[3,1,0,2],[0,0,0,0],[3,2,0,1],[3,2,1,0]]}dot(e,t,n){return e[0]*t+e[1]*n}dot3(e,t,n,r){return e[0]*t+e[1]*n+e[2]*r}dot4(e,t,n,r,a){return e[0]*t+e[1]*n+e[2]*r+e[3]*a}noise(e,t){let n,r,a;const i=(e+t)*(.5*(Math.sqrt(3)-1)),o=Math.floor(e+i),s=Math.floor(t+i),l=(3-Math.sqrt(3))/6,h=(o+s)*l,d=e-(o-h),c=t-(s-h);let u,p;d>c?(u=1,p=0):(u=0,p=1);const m=d-u+l,g=c-p+l,_=d-1+2*l,f=c-1+2*l,v=255&o,w=255&s,b=this.perm[v+this.perm[w]]%12,S=this.perm[v+u+this.perm[w+p]]%12,C=this.perm[v+1+this.perm[w+1]]%12;let y=.5-d*d-c*c;y<0?n=0:(y*=y,n=y*y*this.dot(this.grad3[b],d,c));let T=.5-m*m-g*g;T<0?r=0:(T*=T,r=T*T*this.dot(this.grad3[S],m,g));let M=.5-_*_-f*f;return M<0?a=0:(M*=M,a=M*M*this.dot(this.grad3[C],_,f)),70*(n+r+a)}noise3d(e,t,n){let r,a,i,o;const s=(e+t+n)*(1/3),l=Math.floor(e+s),h=Math.floor(t+s),d=Math.floor(n+s),c=(l+h+d)*(1/6),u=e-(l-c),p=t-(h-c),m=n-(d-c);let g,_,f,v,w,b;u>=p?p>=m?(g=1,_=0,f=0,v=1,w=1,b=0):u>=m?(g=1,_=0,f=0,v=1,w=0,b=1):(g=0,_=0,f=1,v=1,w=0,b=1):p<m?(g=0,_=0,f=1,v=0,w=1,b=1):u<m?(g=0,_=1,f=0,v=0,w=1,b=1):(g=0,_=1,f=0,v=1,w=1,b=0);const S=u-g+1/6,C=p-_+1/6,y=m-f+1/6,T=u-v+1/6*2,M=p-w+1/6*2,A=m-b+1/6*2,x=u-1+.5,E=p-1+.5,P=m-1+.5,R=255&l,I=255&h,L=255&d,D=this.perm[R+this.perm[I+this.perm[L]]]%12,O=this.perm[R+g+this.perm[I+_+this.perm[L+f]]]%12,k=this.perm[R+v+this.perm[I+w+this.perm[L+b]]]%12,N=this.perm[R+1+this.perm[I+1+this.perm[L+1]]]%12;let B=.6-u*u-p*p-m*m;B<0?r=0:(B*=B,r=B*B*this.dot3(this.grad3[D],u,p,m));let U=.6-S*S-C*C-y*y;U<0?a=0:(U*=U,a=U*U*this.dot3(this.grad3[O],S,C,y));let F=.6-T*T-M*M-A*A;F<0?i=0:(F*=F,i=F*F*this.dot3(this.grad3[k],T,M,A));let G=.6-x*x-E*E-P*P;return G<0?o=0:(G*=G,o=G*G*this.dot3(this.grad3[N],x,E,P)),32*(r+a+i+o)}noise4d(e,t,n,r){const a=this.grad4,i=this.simplex,o=this.perm,s=(Math.sqrt(5)-1)/4,l=(5-Math.sqrt(5))/20;let h,d,c,u,p;const m=(e+t+n+r)*s,g=Math.floor(e+m),_=Math.floor(t+m),f=Math.floor(n+m),v=Math.floor(r+m),w=(g+_+f+v)*l,b=e-(g-w),S=t-(_-w),C=n-(f-w),y=r-(v-w),T=(b>S?32:0)+(b>C?16:0)+(S>C?8:0)+(b>y?4:0)+(S>y?2:0)+(C>y?1:0),M=i[T][0]>=3?1:0,A=i[T][1]>=3?1:0,x=i[T][2]>=3?1:0,E=i[T][3]>=3?1:0,P=i[T][0]>=2?1:0,R=i[T][1]>=2?1:0,I=i[T][2]>=2?1:0,L=i[T][3]>=2?1:0,D=i[T][0]>=1?1:0,O=i[T][1]>=1?1:0,k=i[T][2]>=1?1:0,N=i[T][3]>=1?1:0,B=b-M+l,U=S-A+l,F=C-x+l,G=y-E+l,V=b-P+2*l,H=S-R+2*l,j=C-I+2*l,z=y-L+2*l,W=b-D+3*l,K=S-O+3*l,q=C-k+3*l,X=y-N+3*l,Y=b-1+4*l,Q=S-1+4*l,Z=C-1+4*l,J=y-1+4*l,$=255&g,ee=255&_,te=255&f,ne=255&v,re=o[$+o[ee+o[te+o[ne]]]]%32,ae=o[$+M+o[ee+A+o[te+x+o[ne+E]]]]%32,ie=o[$+P+o[ee+R+o[te+I+o[ne+L]]]]%32,oe=o[$+D+o[ee+O+o[te+k+o[ne+N]]]]%32,se=o[$+1+o[ee+1+o[te+1+o[ne+1]]]]%32;let le=.6-b*b-S*S-C*C-y*y;le<0?h=0:(le*=le,h=le*le*this.dot4(a[re],b,S,C,y));let he=.6-B*B-U*U-F*F-G*G;he<0?d=0:(he*=he,d=he*he*this.dot4(a[ae],B,U,F,G));let de=.6-V*V-H*H-j*j-z*z;de<0?c=0:(de*=de,c=de*de*this.dot4(a[ie],V,H,j,z));let ce=.6-W*W-K*K-q*q-X*X;ce<0?u=0:(ce*=ce,u=ce*ce*this.dot4(a[oe],W,K,q,X));let ue=.6-Y*Y-Q*Q-Z*Z-J*J;return ue<0?p=0:(ue*=ue,p=ue*ue*this.dot4(a[se],Y,Q,Z,J)),27*(h+d+c+u+p)}}const HBAOShader={name:"HBAOShader",defines:{PERSPECTIVE_CAMERA:1,SAMPLES:16,SAMPLE_VECTORS:generateHaboSampleKernelInitializer(16),NORMAL_VECTOR_TYPE:1,DEPTH_VALUE_SOURCE:0,COSINE_SAMPLE_HEMISPHERE:0},uniforms:{tNormal:{value:null},tDepth:{value:null},tNoise:{value:null},resolution:{value:new Vector2},cameraNear:{value:null},cameraFar:{value:null},cameraProjectionMatrix:{value:new Matrix4},cameraProjectionMatrixInverse:{value:new Matrix4},radius:{value:2},distanceExponent:{value:1},bias:{value:.01}},vertexShader:"\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}",fragmentShader:"\n\n\t\tvarying vec2 vUv;\n\n\t\tuniform sampler2D tNormal;\n\t\tuniform sampler2D tDepth;\n\t\tuniform sampler2D tNoise;\n\t\tuniform vec2 resolution;\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\t\tuniform mat4 cameraProjectionMatrix;\n\t\tuniform mat4 cameraProjectionMatrixInverse;\t\t\n\t\tuniform float radius;\n\t\tuniform float distanceExponent;\n\t\tuniform float bias;\n\t\t\n\t\t#include <common>\n\t\t#include <packing>\n\n\t\t#ifndef FRAGMENT_OUTPUT\n\t\t#define FRAGMENT_OUTPUT vec4(vec3(ao), 1.)\n\t\t#endif\n\n\t\tconst vec4 sampleKernel[SAMPLES] = SAMPLE_VECTORS;\n\n\t\tvec3 getViewPosition(const in vec2 screenPosition, const in float depth) {\n\t\t\tvec4 clipSpacePosition = vec4(vec3(screenPosition, depth) * 2.0 - 1.0, 1.0);\n\t\t\tvec4 viewSpacePosition = cameraProjectionMatrixInverse * clipSpacePosition;\n\t\t\treturn viewSpacePosition.xyz / viewSpacePosition.w;\n\t\t}\n\n\t\tfloat getDepth(const vec2 uv) {\n\t\t#if DEPTH_VALUE_SOURCE == 1 \n\t\t\treturn textureLod(tDepth, uv.xy, 0.0).a;\n\t\t#else\n\t\t\treturn textureLod(tDepth, uv.xy, 0.0).r;\n\t\t#endif\n\t\t}\n\n\t\tfloat fetchDepth(const ivec2 uv) {\n\t\t\t#if DEPTH_VALUE_SOURCE == 1 \n\t\t\t\treturn texelFetch(tDepth, uv.xy, 0).a;\n\t\t\t#else\n\t\t\t\treturn texelFetch(tDepth, uv.xy, 0).r;\n\t\t\t#endif\n\t\t}\n\n\t\tfloat getViewZ(const in float depth) {\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\t\t\t\treturn perspectiveDepthToViewZ(depth, cameraNear, cameraFar);\n\t\t\t#else\n\t\t\t\treturn orthographicDepthToViewZ(depth, cameraNear, cameraFar);\n\t\t\t#endif\n\t\t}\n\n\t\tvec3 computeNormalFromDepth(const vec2 uv) {\n vec2 size = vec2(textureSize(tDepth, 0));\n ivec2 p = ivec2(uv * size);\n float c0 = fetchDepth(p);\n float l2 = fetchDepth(p - ivec2(2, 0));\n float l1 = fetchDepth(p - ivec2(1, 0));\n float r1 = fetchDepth(p + ivec2(1, 0));\n float r2 = fetchDepth(p + ivec2(2, 0));\n float b2 = fetchDepth(p - ivec2(0, 2));\n float b1 = fetchDepth(p - ivec2(0, 1));\n float t1 = fetchDepth(p + ivec2(0, 1));\n float t2 = fetchDepth(p + ivec2(0, 2));\n float dl = abs((2.0 * l1 - l2) - c0);\n float dr = abs((2.0 * r1 - r2) - c0);\n float db = abs((2.0 * b1 - b2) - c0);\n float dt = abs((2.0 * t1 - t2) - c0);\n vec3 ce = getViewPosition(uv, c0).xyz;\n vec3 dpdx = (dl < dr) ? ce - getViewPosition((uv - vec2(1.0 / size.x, 0.0)), l1).xyz\n : -ce + getViewPosition((uv + vec2(1.0 / size.x, 0.0)), r1).xyz;\n vec3 dpdy = (db < dt) ? ce - getViewPosition((uv - vec2(0.0, 1.0 / size.y)), b1).xyz\n : -ce + getViewPosition((uv + vec2(0.0, 1.0 / size.y)), t1).xyz;\n return normalize(cross(dpdx, dpdy));\n\t\t}\n\n\t\tvec3 getViewNormal(const vec2 uv) {\n\t\t#if NORMAL_VECTOR_TYPE == 2\n\t\t\treturn normalize(textureLod(tNormal, uv, 0.).rgb);\n\t\t#elif NORMAL_VECTOR_TYPE == 1\n\t\t\treturn unpackRGBToNormal(textureLod(tNormal, uv, 0.).rgb);\n\t\t#else\n\t\t\treturn computeNormalFromDepth(uv);\n\t\t#endif\n\t\t}\n\n\t\t// source: https://www.shadertoy.com/view/cll3R4\n\t\tvec3 cosineSampleHemisphere(const vec3 n, const vec2 u) {\n\t\t\tfloat r = sqrt(u.x);\n\t\t\tfloat theta = 2.0 * PI * u.y;\n\t\t\tvec3 b = normalize(cross(n, vec3(0.0, 1.0, 1.0)));\n\t\t\tvec3 t = cross(b, n);\n\t\t\treturn normalize(r * sin(theta) * b + sqrt(1.0 - u.x) * n + r * cos(theta) * t);\n\t\t}\n\t\t\n\t\tfloat getOcclusion(const vec2 uv, const vec3 viewPos, const vec3 viewNormal, const float depth, const vec4 sampleViewDir, inout float totalWeight) {\n\t\t\t\n\t\t\tvec3 sampleViewPos = viewPos + sampleViewDir.xyz * radius * pow(sampleViewDir.w, distanceExponent);\n\t\t\tvec4 sampleClipPos = cameraProjectionMatrix * vec4(sampleViewPos, 1.);\n\t\t\tvec2 sampleUv = sampleClipPos.xy / sampleClipPos.w * 0.5 + 0.5;\n\t\t\tfloat sampleDepth = getDepth(sampleUv);\n\t\t\tfloat distSample = abs(getViewZ(sampleDepth));\n\t\t\tfloat distWorld = abs(sampleViewPos.z);\n\t\t\tfloat distanceFalloffToUse = radius;\n\t\t\tfloat rangeCheck = smoothstep(0.0, 1.0, distanceFalloffToUse / (abs(distSample - distWorld)));\n\t\t\tfloat weight = dot(viewNormal, sampleViewDir.xyz);\n\t\t\tvec2 diff = (uv - sampleUv) * resolution;\n\t\t\tvec2 clipRangeCheck = step(0., sampleUv) * step(sampleUv, vec2(1.));\n\t\t\tfloat occlusion = rangeCheck * weight * step(distSample + bias, distWorld) * step(0.707, dot(diff, diff)) * clipRangeCheck.x * clipRangeCheck.y;\n\t\t\ttotalWeight += weight;\n\n\t\t\treturn occlusion;\n\t\t}\n\t\t\n\t\tvoid main() {\n\t\t\tfloat depth = getDepth(vUv.xy);\n\t\t\tif (depth == 1.0) {\n\t\t\t\tdiscard;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvec3 viewPos = getViewPosition(vUv, depth);\n\t\t\tvec3 viewNormal = getViewNormal(vUv);\n\n\t\t\tvec2 noiseResolution = vec2(textureSize(tNoise, 0));\n\t\t\tvec2 noiseUv = vUv * resolution / noiseResolution;\n\t\t\tvec4 noiseTexel = textureLod(tNoise, noiseUv, 0.0);\n\t\t\tvec3 randomVec = noiseTexel.xyz * 2.0 - 1.0;\n \t\t\tvec3 tangent = normalize(randomVec - viewNormal * dot(randomVec, viewNormal));\n \t\tvec3 bitangent = cross(viewNormal, tangent);\n \t\tmat3 kernelMatrix = mat3(tangent, bitangent, viewNormal);\n\n\t\t\tfloat ao = 0.0, totalWeight = 0.0;\n\t\t\tfor (int i = 0; i < SAMPLES; i++) {\t\t\n\t\t\t\t#if COSINE_SAMPLE_HEMISPHERE == 1\n\t\t\t\t\tvec4 sampleNoise = noiseTexel;\n\t\t\t\t\tif (i != 0) {\n\t\t\t\t\t\tconst vec4 hn = vec4(0.618033988749895, 0.3247179572447458, 0.2207440846057596, 0.1673039782614187);\n\t\t\t\t\t\tsampleNoise = fract(sampleNoise + hn * float(i));\n\t\t\t\t\t\tsampleNoise = mix(sampleNoise, 1.0 - sampleNoise, step(0.5, sampleNoise)) * 2.0;\n\t\t\t\t\t}\n\t\t\t\t\tvec3 hemisphereDir = cosineSampleHemisphere( viewNormal, sampleNoise.rg );\n\t\t\t\t\tvec4 sampleViewDir = vec4(hemisphereDir, sampleNoise.b );\n\t\t\t\t#else\n\t\t\t\t\tvec4 sampleViewDir = sampleKernel[i];\n\t\t\t\t\tsampleViewDir.xyz = normalize(kernelMatrix * sampleViewDir.xyz);\n\t\t\t\t#endif\n\t\t\t\tfloat occlusion = getOcclusion(vUv, viewPos, viewNormal, depth, sampleViewDir, totalWeight);\n\t\t\t\tao += occlusion;\n\t\t\t}\t\t\n\t\t\tif (totalWeight > 0.) { \n\t\t\t\tao /= totalWeight;\n\t\t\t}\n\t\t\tao = clamp(1. - ao, 0., 1.);\n\t\t\tgl_FragColor = FRAGMENT_OUTPUT;\n\t\t}"};function generateHaboSampleKernelInitializer(e){const t=function(e){const t=[];for(let n=0;n<e;n++){const r=n*Math.PI*(3-Math.sqrt(5)),a=.99-n/(e-1)*.9,i=Math.sqrt(1-a*a),o=Math.cos(r)*i,s=Math.sin(r)*i,l=8,h=Math.floor(e/l);let d=1-(Math.floor(n/l)+n%l*h)/e;d=.1+.9*d,t.push(new Vector4(o,s,a,d))}return t}(e);let n="vec4[SAMPLES](";for(let r=0;r<e;r++){const a=t[r];n+=`vec4(${a.x}, ${a.y}, ${a.z}, ${a.w})`,r<e-1&&(n+=",")}return n+=")",n}const defaultHBAORenderPassParameters={resolutionScale:1,samples:16,radius:.5,distanceExponent:1,bias:.01};class HBAORenderPass{get texture(){var e;return this._renderTarget?null===(e=this._renderTarget)||void 0===e?void 0:e.texture:null}constructor(e,t,n){this.needsUpdate=!0,this.parameters={...defaultHBAORenderPassParameters},this._width=0,this._height=0,this._loaded=!1,this._normalVectorSourceType=NormalVectorSourceType.FLOAT_BUFFER_NORMAL,this._depthValueSourceType=DepthValueSourceType.NORMAL_VECTOR_ALPHA,this._modulateRedChannel=!1,this.depthTexture=null,this.normalTexture=null,this._noiseTexture=null,this._renderTarget=null,this._renderPass=new RenderPass,this._width=e,this._height=t,this._normalVectorSourceType=(null==n?void 0:n.normalVectorSourceType)||NormalVectorSourceType.FLOAT_BUFFER_NORMAL,this._depthValueSourceType=(null==n?void 0:n.depthValueSourceType)||DepthValueSourceType.NORMAL_VECTOR_ALPHA,this._modulateRedChannel=(null==n?void 0:n.modulateRedChannel)||!1,(null==n?void 0:n.hbaoParameters)&&(this.parameters=n.hbaoParameters),n&&this.updateParameters(n)}_getNoiseTexture(e=64){if(!this._noiseTexture){const t=new SimplexNoise,n=new Uint8Array(e*e*4);for(let r=0;r<e;r++)for(let a=0;a<e;a++){const i=r,o=a;n[4*(r*e+a)]=127.5*(t.noise(i,o)+1),n[4*(r*e+a)+1]=127.5*(t.noise(i+e,o)+1),n[4*(r*e+a)+2]=127.5*(t.noise(i,o+e)+1),n[4*(r*e+a)+3]=127.5*(t.noise(i+e,o+e)+1)}this._noiseTexture=new DataTexture(n,e,e,RGBAFormat,UnsignedByteType),this._noiseTexture.wrapS=RepeatWrapping,this._noiseTexture.wrapT=RepeatWrapping,this._noiseTexture.needsUpdate=!0}return this._noiseTexture}_getMaterial(e,t){let n=t;this._hbaoMaterial||(this._hbaoMaterial=new ShaderMaterial({defines:Object.assign({},HBAOShader.defines),uniforms:UniformsUtils.clone(HBAOShader.uniforms),vertexShader:HBAOShader.vertexShader,fragmentShader:HBAOShader.fragmentShader,depthTest:!1,depthWrite:!1}),this._modulateRedChannel&&(this._hbaoMaterial.blending=CustomBlending,this._hbaoMaterial.blendEquation=MinEquation,this._hbaoMaterial.blendEquationAlpha=null,this._hbaoMaterial.blendSrc=OneFactor,this._hbaoMaterial.blendSrcAlpha=null,this._hbaoMaterial.blendDst=OneFactor,this._hbaoMaterial.blendDstAlpha=null),this._hbaoMaterial.defines.FRAGMENT_OUTPUT=this._modulateRedChannel?"vec4(ao, 1., 1., 1.)":void 0,this._hbaoMaterial.uniforms.tNoise.value=this._getNoiseTexture(),n=!0),n&&(this._hbaoMaterial.defines.PERSPECTIVE_CAMERA=e.isPerspectiveCamera?1:0,this._hbaoMaterial.defines.SAMPLES=this.parameters.samples,this._hbaoMaterial.defines.SAMPLE_VECTORS=generateHaboSampleKernelInitializer(this.parameters.samples),this._hbaoMaterial.defines.NORMAL_VECTOR_TYPE=this._normalVectorSourceType===NormalVectorSourceType.FLOAT_BUFFER_NORMAL?2:1,this._hbaoMaterial.defines.DEPTH_VALUE_SOURCE=this._depthValueSourceType===DepthValueSourceType.NORMAL_VECTOR_ALPHA?1:0,this._hbaoMaterial.needsUpdate=!0);const r=this._depthValueSourceType===DepthValueSourceType.NORMAL_VECTOR_ALPHA?this.normalTexture:this.depthTexture;this._hbaoMaterial.uniforms.tNormal.value=this.normalTexture,this._hbaoMaterial.uniforms.tDepth.value=r,this._hbaoMaterial.uniforms.resolution.value.set(this._width,this._height),this._hbaoMaterial.uniforms.cameraProjectionMatrix.value.copy(e.projectionMatrix),this._hbaoMaterial.uniforms.cameraProjectionMatrixInverse.value.copy(e.projectionMatrixInverse);const a=e;return this._hbaoMaterial.uniforms.cameraNear.value=a.near,this._hbaoMaterial.uniforms.cameraFar.value=a.far,this._hbaoMaterial.uniforms.radius.value=this.parameters.radius,this._hbaoMaterial.uniforms.distanceExponent.value=this.parameters.distanceExponent,this._hbaoMaterial.uniforms.bias.value=this.parameters.bias,this._hbaoMaterial}_getRenderTargets(){return this._renderTarget||(this._renderTarget=new WebGLRenderTarget(this._width,this._height,{magFilter:LinearFilter,minFilter:LinearFilter})),this._renderTarget}dispose(){var e,t,n;null===(e=this._noiseTexture)||void 0===e||e.dispose(),null===(t=this._hbaoMaterial)||void 0===t||t.dispose(),null===(n=this._renderTarget)||void 0===n||n.dispose()}setSize(e,t){var n;this._width=e,this._height=t,null===(n=this._renderTarget)||void 0===n||n.setSize(e,t),this.needsUpdate=!0}updateParameters(e){for(let t in e)this.parameters.hasOwnProperty(t)&&(this.parameters[t]=e[t],this.needsUpdate=!0);e.depthTexture&&(this.depthTexture=e.depthTexture,this.needsUpdate=!0),e.normalTexture&&(this.normalTexture=e.normalTexture,this.needsUpdate=!0)}render(e,t,n,r){const a=this._getMaterial(t,this.needsUpdate);this.needsUpdate=!1,this._renderPass.renderScreenSpace(e,a,r||this._getRenderTargets())}}const PoissonDenoiseShader={name:"PoissonDenoiseShader",defines:{SAMPLES:16,SAMPLE_VECTORS:generatePdSamplePointInitializer(16,4),NORMAL_VECTOR_TYPE:1,DEPTH_VALUE_SOURCE:0},uniforms:{tDiffuse:{value:null},tNormal:{value:null},tDepth:{value:null},tNoise:{value:null},resolution:{value:new Vector2},cameraProjectionMatrixInverse:{value:new Matrix4},lumaPhi:{value:5},depthPhi:{value:5},normalPhi:{value:5},radius:{value:10},index:{value:0}},vertexShader:"\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}",fragmentShader:"\n\n\t\tvarying vec2 vUv;\n\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform sampler2D tNormal;\n\t\tuniform sampler2D tDepth;\n\t\tuniform sampler2D tNoise;\n\t\tuniform vec2 resolution;\n\t\tuniform mat4 cameraProjectionMatrixInverse;\n\t\tuniform float lumaPhi;\n\t\tuniform float depthPhi;\n\t\tuniform float normalPhi;\n\t\tuniform float radius;\n\t\tuniform int index;\n\t\t\n\t\t#include <common>\n\t\t#include <packing>\n\n\t\t#ifndef SAMPLE_LUMINANCE\n\t\t#define SAMPLE_LUMINANCE dot(vec3(0.2125, 0.7154, 0.0721), a)\n\t\t#endif\n\n\t\t#ifndef FRAGMENT_OUTPUT\n\t\t#define FRAGMENT_OUTPUT vec4(denoised, 1.)\n\t\t#endif\n\n\t\tfloat getLuminance(const in vec3 a) {\n\t\t\treturn SAMPLE_LUMINANCE;\n\t\t}\n\n\t\tconst vec2 poissonDisk[SAMPLES] = SAMPLE_VECTORS;\n\n\t\tvec3 getViewPosition(const in vec2 screenPosition, const in float depth) {\n\t\t\tvec4 clipSpacePosition = vec4(vec3(screenPosition, depth) * 2.0 - 1.0, 1.0);\n\t\t\tvec4 viewSpacePosition = cameraProjectionMatrixInverse * clipSpacePosition;\n\t\t\treturn viewSpacePosition.xyz / viewSpacePosition.w;\n\t\t}\n\t\t\n\t\tfloat getDepth(const vec2 uv) {\n\t\t#if DEPTH_VALUE_SOURCE == 1 \n\t\t\treturn textureLod(tDepth, uv.xy, 0.0).a;\n\t\t#else\n\t\t\treturn textureLod(tDepth, uv.xy, 0.0).r;\n\t\t#endif\n\t\t}\n\n\t\tfloat fetchDepth(const ivec2 uv) {\n\t\t\t#if DEPTH_VALUE_SOURCE == 1 \n\t\t\t\treturn texelFetch(tDepth, uv.xy, 0).a;\n\t\t\t#else\n\t\t\t\treturn texelFetch(tDepth, uv.xy, 0).r;\n\t\t\t#endif\n\t\t}\n\n\t\tvec3 computeNormalFromDepth(const vec2 uv) {\n\t\t\tvec2 size = vec2(textureSize(tDepth, 0));\n\t\t\tivec2 p = ivec2(uv * size);\n\t\t\tfloat c0 = fetchDepth(p);\n\t\t\tfloat l2 = fetchDepth(p - ivec2(2, 0));\n\t\t\tfloat l1 = fetchDepth(p - ivec2(1, 0));\n\t\t\tfloat r1 = fetchDepth(p + ivec2(1, 0));\n\t\t\tfloat r2 = fetchDepth(p + ivec2(2, 0));\n\t\t\tfloat b2 = fetchDepth(p - ivec2(0, 2));\n\t\t\tfloat b1 = fetchDepth(p - ivec2(0, 1));\n\t\t\tfloat t1 = fetchDepth(p + ivec2(0, 1));\n\t\t\tfloat t2 = fetchDepth(p + ivec2(0, 2));\n\t\t\tfloat dl = abs((2.0 * l1 - l2) - c0);\n\t\t\tfloat dr = abs((2.0 * r1 - r2) - c0);\n\t\t\tfloat db = abs((2.0 * b1 - b2) - c0);\n\t\t\tfloat dt = abs((2.0 * t1 - t2) - c0);\n\t\t\tvec3 ce = getViewPosition(uv, c0).xyz;\n\t\t\tvec3 dpdx = (dl < dr) ? ce - getViewPosition((uv - vec2(1.0 / size.x, 0.0)), l1).xyz\n\t\t\t\t\t\t\t\t\t: -ce + getViewPosition((uv + vec2(1.0 / size.x, 0.0)), r1).xyz;\n\t\t\tvec3 dpdy = (db < dt) ? ce - getViewPosition((uv - vec2(0.0, 1.0 / size.y)), b1).xyz\n\t\t\t\t\t\t\t\t\t: -ce + getViewPosition((uv + vec2(0.0, 1.0 / size.y)), t1).xyz;\n\t\t\treturn normalize(cross(dpdx, dpdy));\n\t\t}\n\n\t\tvec3 getViewNormal(const vec2 uv) {\n\t\t#if NORMAL_VECTOR_TYPE == 2\n\t\t\treturn normalize(textureLod(tNormal, uv, 0.).rgb);\n\t\t#elif NORMAL_VECTOR_TYPE == 1\n\t\t\treturn unpackRGBToNormal(textureLod(tNormal, uv, 0.).rgb);\n\t\t#else\n\t\t\treturn computeNormalFromDepth(uv);\n\t\t#endif\n\t\t}\n\t\t\n\t\tfloat distToPlane(const vec3 viewPos, const vec3 neighborViewPos, const vec3 viewNormal) {\n\t\t\treturn abs(dot(viewPos - neighborViewPos, viewNormal));\n\t\t}\n\t\t\n\t\tvoid main() {\n\t\t\tfloat depth = getDepth(vUv.xy);\t\n\t\t\tvec3 viewNormal = getViewNormal(vUv);\t\n\t\t\tif (depth == 1. || dot(viewNormal, viewNormal) == 0.) {\n\t\t\t\tdiscard;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvec4 texel = textureLod(tDiffuse, vUv, 0.0);\n\t\t\tvec3 denoised = texel.rgb;\n\t\t\tvec3 center = texel.rgb;\n\t\t\tvec3 viewPos = getViewPosition(vUv, depth);\n\n\t\t\tvec2 noiseResolution = vec2(textureSize(tNoise, 0));\n\t\t\tvec2 noiseUv = vUv * resolution / noiseResolution;\n\t\t\tvec4 noiseTexel = textureLod(tNoise, noiseUv, 0.0);\n \t\t//vec2 noiseVec = normalize((index % 2 == 0 ? noiseTexel.xy : noiseTexel.yz) * 2.0 - 1.0);\n\t\t\tvec2 noiseVec = vec2(sin(noiseTexel[index % 4] * 2. * PI), cos(noiseTexel[index % 4] * 2. * PI));\n \t\tmat2 rotationMatrix = mat2(noiseVec.x, -noiseVec.y, noiseVec.x, noiseVec.y);\n\t\t\n\t\t\tfloat totalWeight = 1.0;\n\t\t\tfor (int i = 0; i < SAMPLES; i++) {\n\t\t\t\tvec2 offset = rotationMatrix * (poissonDisk[i] * radius / resolution);\n\t\t\t\tvec2 sampleUv = vUv + offset;\n\t\t\t\tvec4 sampleTexel = textureLod(tDiffuse, sampleUv, 0.0);\n\t\t\t\tfloat sampleDepth = getDepth(sampleUv);\n\t\t\t\tvec3 sampleNormal = getViewNormal(sampleUv);\n\t\t\t\tvec3 neighborColor = sampleTexel.rgb;\n\t\t\n\t\t\t\tvec3 viewPosSample = getViewPosition(sampleUv, sampleDepth);\n\t\t\t\t\n\t\t\t\tfloat normalDiff = dot(viewNormal, sampleNormal);\n\t\t\t\tfloat normalSimilarity = pow(max(normalDiff, 0.), normalPhi);\n\t\t\n\t\t\t\tfloat lumaDiff = abs(getLuminance(neighborColor) - getLuminance(center));\n\t\t\t\tfloat lumaSimilarity = max(1.0 - lumaDiff / lumaPhi, 0.0);\n\t\t\n\t\t\t\tfloat depthDiff = 1. - distToPlane(viewPos, viewPosSample, viewNormal);\n\t\t\t\tfloat depthSimilarity = max(depthDiff / depthPhi, 0.);\n\t\t\n\t\t\t\tfloat w = lumaSimilarity * depthSimilarity * normalSimilarity;\n\t\t\n\t\t\t\tdenoised += w * neighborColor;\n\t\t\t\ttotalWeight += w;\n\t\t\t}\n\t\t\n\t\t\tif (totalWeight > 0.) { \n\t\t\t\tdenoised /= totalWeight;\n\t\t\t}\n\t\t\tgl_FragColor = FRAGMENT_OUTPUT;\n\t\t}"};function generatePdSamplePointInitializer(e,t){const n=function(e,t){const n=2*Math.PI*t/e,r=1/e,a=r,i=[];let o=r,s=0;for(let t=0;t<e;t++){const e=new Vector2(Math.cos(s),Math.sin(s)).multiplyScalar(Math.pow(o,.75));i.push(e),o+=a,s+=n}return i}(e,t);let r="vec2[SAMPLES](";for(let t=0;t<e;t++){const a=n[t];r+=`vec2(${a.x}, ${a.y})`,t<e-1&&(r+=",")}return r+=")",r}const defaultPoissonDenoisePassParameters={iterations:1,radius:10,rings:4,lumaPhi:10,depthPhi:12,normalPhi:3.25,samples:16};class PoissonDenoiseRenderPass{get texture(){return this.parameters.iterations>0&&this._renderTargets.length>0?this._renderTargets[this._renderTargets.length-1].texture:this._inputTexture}set inputTexture(e){this._inputTexture=e}constructor(e,t,n){this.needsUpdate=!0,this.parameters={...defaultPoissonDenoisePassParameters},this._width=0,this._height=0,this._normalVectorSourceType=NormalVectorSourceType.FLOAT_BUFFER_NORMAL,this._depthValueSourceType=DepthValueSourceType.NORMAL_VECTOR_ALPHA,this._rgInputTexture=!0,this._inputTexture=null,this.depthTexture=null,this.normalTexture=null,this._noiseTexture=null,this._renderTargets=[],this._renderPass=new RenderPass,this._width=e,this._height=t,this._normalVectorSourceType=(null==n?void 0:n.normalVectorSourceType)||NormalVectorSourceType.FLOAT_BUFFER_NORMAL,this._depthValueSourceType=(null==n?void 0:n.depthValueSourceType)||DepthValueSourceType.NORMAL_VECTOR_ALPHA,this._rgInputTexture=(null==n?void 0:n.rgInputTexture)||!0,this._inputTexture=(null==n?void 0:n.inputTexture)||null,this.depthTexture=(null==n?void 0:n.depthTexture)||null,this.normalTexture=(null==n?void 0:n.normalTexture)||null,n.poissonDenoisePassParameters?this.parameters=n.poissonDenoisePassParameters:n&&this.updateParameters(n)}_getNoiseTexture(e=64){if(!this._noiseTexture){const t=new SimplexNoise,n=new Uint8Array(e*e*4);for(let r=0;r<e;r++)for(let a=0;a<e;a++){const i=r,o=a;n[4*(r*e+a)]=127.5*(t.noise(i,o)+1),n[4*(r*e+a)+1]=127.5*(t.noise(i+e,o)+1),n[4*(r*e+a)+2]=127.5*(t.noise(i,o+e)+1),n[4*(r*e+a)+3]=127.5*(t.noise(i+e,o+e)+1)}this._noiseTexture=new DataTexture(n,e,e,RGBAFormat,UnsignedByteType),this._noiseTexture.wrapS=RepeatWrapping,this._noiseTexture.wrapT=RepeatWrapping,this._noiseTexture.needsUpdate=!0}return this._noiseTexture}_getMaterial(e,t){let n=t;this._pdMaterial||(this._pdMaterial=new ShaderMaterial({defines:Object.assign({},PoissonDenoiseShader.defines),uniforms:UniformsUtils.clone(PoissonDenoiseShader.uniforms),vertexShader:PoissonDenoiseShader.vertexShader,fragmentShader:PoissonDenoiseShader.fragmentShader,depthTest:!1,depthWrite:!1}),this._pdMaterial.defines.SAMPLE_LUMINANCE="(a.r * a.g)",this._pdMaterial.uniforms.tNoise.value=this._getNoiseTexture(),n=!0),n&&(this._pdMaterial.defines.SAMPLES=this.parameters.samples,this._pdMaterial.defines.SAMPLE_VECTORS=generatePdSamplePointInitializer(this.parameters.samples,this.parameters.rings),this._pdMaterial.defines.NORMAL_VECTOR_TYPE=this._normalVectorSourceType===NormalVectorSourceType.FLOAT_BUFFER_NORMAL?2:1,this._pdMaterial.defines.DEPTH_VALUE_SOURCE=this._depthValueSourceType===DepthValueSourceType.NORMAL_VECTOR_ALPHA?1:0,this._pdMaterial.needsUpdate=!0);const r=this._depthValueSourceType===DepthValueSourceType.NORMAL_VECTOR_ALPHA?this.normalTexture:this.depthTexture;return this._pdMaterial.uniforms.tDiffuse.value=this._inputTexture,this._pdMaterial.uniforms.tNormal.value=this.normalTexture,this._pdMaterial.uniforms.tDepth.value=r,this._pdMaterial.uniforms.resolution.value.set(this._width,this._height),this._pdMaterial.uniforms.cameraProjectionMatrixInverse.value.copy(e.projectionMatrixInverse),this._pdMaterial.uniforms.lumaPhi.value=this.parameters.lumaPhi,this._pdMaterial.uniforms.depthPhi.value=this.parameters.depthPhi,this._pdMaterial.uniforms.normalPhi.value=this.parameters.normalPhi,this._pdMaterial.uniforms.radius.value=this.parameters.radius,this._pdMaterial}_getRenderTargets(){return this._renderTargets.length<2&&(this._renderTargets=[new WebGLRenderTarget(this._width,this._height,{magFilter:LinearFilter,minFilter:LinearFilter}),new WebGLRenderTarget(this._width,this._height,{magFilter:LinearFilter,minFilter:LinearFilter})]),this._renderTargets}dispose(){var e,t;null===(e=this._noiseTexture)||void 0===e||e.dispose(),null===(t=this._pdMaterial)||void 0===t||t.dispose(),this._renderTargets.forEach(e=>e.dispose())}setSize(e,t){this._width=e,this._height=t,this._renderTargets.forEach(n=>n.setSize(e,t)),this.needsUpdate=!0}updateParameters(e){for(let t in e)this.parameters.hasOwnProperty(t)&&(this.parameters[t]=e[t],this.needsUpdate=!0);e.inputTexture&&(this._inputTexture=e.inputTexture,this.needsUpdate=!0),e.depthTexture&&(this.depthTexture=e.depthTexture,this.needsUpdate=!0),e.normalTexture&&(this.normalTexture=e.normalTexture,this.needsUpdate=!0)}render(e,t){const n=this._getMaterial(t,this.needsUpdate);this.needsUpdate=!1;const r=this._getRenderTargets();for(let t=0;t<2*this.parameters.iterations;t++){const a=r[(t+1)%2],i=r[t%2];n.uniforms.tDiffuse.value=0===t?this._inputTexture:a.texture,n.uniforms.index.value=t,this._renderPass.renderScreenSpace(e,n,i,16777215,1)}}}var ShadowBlurType,AmbientOcclusionType;!function(e){e[e.OFF=0]="OFF",e[e.HARD=1]="HARD",e[e.POISSON=2]="POISSON",e[e.FULL=3]="FULL"}(ShadowBlurType||(ShadowBlurType={})),function(e){e[e.NONE=0]="NONE",e[e.SSAO=1]="SSAO",e[e.HBAO=2]="HBAO"}(AmbientOcclusionType||(AmbientOcclusionType={}));const defaultShadowAndAoParameters={aoKernelRadius:.25,aoDepthBias:1e-4,aoMaxDistance:.5,aoMaxDepth:.99,aoFadeout:.5,shadowRadius:.05},defaultPassParameters={enabled:!0,aoType:AmbientOcclusionType.SSAO,aoIntensity:.5,shadowIntensity:.35,aoOnGround:!0,shadowOnGround:!1,alwaysUpdate:!1};class ShadowAndAoPass{get gBufferRenderTarget(){var e;return this._sharedGBufferRenderTarget?this._sharedGBufferRenderTarget:(this._gBufferRenderTarget=null!==(e=this._gBufferRenderTarget)&&void 0!==e?e:new GBufferRenderTargets(void 0,{_width:this._width,_height:this._height,_samples:this._samples,_renderPass:this._renderPass,textureFilter:NearestFilter}),this._gBufferRenderTarget)}get hbaoRenderPass(){return this._hbaoPass||(this._hbaoPass=new HBAORenderPass(this._width,this._height,{normalVectorSourceType:this.gBufferRenderTarget.isFloatGBufferWithRgbNormalAlphaDepth?NormalVectorSourceType.FLOAT_BUFFER_NORMAL:NormalVectorSourceType.INPUT_RGB_NORMAL,depthValueSourceType:this.gBufferRenderTarget.isFloatGBufferWithRgbNormalAlphaDepth?DepthValueSourceType.NORMAL_VECTOR_ALPHA:DepthValueSourceType.SEPARATE_BUFFER,modulateRedChannel:!0,hbaoParameters:this.parameters.hbao})),this._hbaoPass}get fadeRenderTarget(){var e;return this._fadeRenderTarget=null!==(e=this._fadeRenderTarget)&&void 0!==e?e:new WebGLRenderTarget(this._width,this._height,{format:RGFormat,magFilter:LinearFilter,minFilter:LinearFilter}),this._fadeRenderTarget}get denoisePass(){return this._poissonDenoisePass||(this._poissonDenoisePass=new PoissonDenoiseRenderPass(this._width,this._height,{inputTexture:this.shadowAndAoRenderTargets.passRenderTarget.texture,depthTexture:this.gBufferRenderTarget.depthBufferTexture,normalTexture:this.gBufferRenderTarget.gBufferTexture,normalVectorSourceType:this.gBufferRenderTarget.isFloatGBufferWithRgbNormalAlphaDepth?NormalVectorSourceType.FLOAT_BUFFER_NORMAL:NormalVectorSourceType.INPUT_RGB_NORMAL,depthValueSourceType:this.gBufferRenderTarget.isFloatGBufferWithRgbNormalAlphaDepth?DepthValueSourceType.NORMAL_VECTOR_ALPHA:DepthValueSourceType.SEPARATE_BUFFER,rgInputTexture:!0,poissonDenoisePassParameters:this.parameters.poissonDenoise})),this._poissonDenoisePass}get denoiseRenderTargetTexture(){return this.denoisePass?this.denoisePass.texture:null}constructor(e,t,n,r){var a,i,o,s,l,h,d,c;this.needsUpdate=!0,this._renderPass=new RenderPass,this._cameraUpdate=new CameraUpdate,(null==r?void 0:r.gBufferRenderTarget)&&(this._sharedGBufferRenderTarget=null==r?void 0:r.gBufferRenderTarget),this._width=e,this._height=t,this._samples=n,this._renderPass=null!==(a=null==r?void 0:r.enderPass)&&void 0!==a?a:new RenderPass,this.shadowAndAoRenderTargets=new ShadowAndAoRenderTargets(this.gBufferRenderTarget,{...r,width:e,height:t,samples:n,renderPass:this._renderPass}),this.parameters={enabled:null!==(i=null==r?void 0:r.enabled)&&void 0!==i?i:defaultPassParameters.enabled,aoType:null!==(o=null==r?void 0:r.aoType)&&void 0!==o?o:defaultPassParameters.aoType,aoIntensity:null!==(s=null==r?void 0:r.aoIntensity)&&void 0!==s?s:defaultPassParameters.aoIntensity,shadowIntensity:null!==(l=null==r?void 0:r.shadowIntensity)&&void 0!==l?l:defaultPassParameters.shadowIntensity,aoOnGround:null!==(h=null==r?void 0:r.aoOnGround)&&void 0!==h?h:defaultPassParameters.aoOnGround,shadowOnGround:null!==(d=null==r?void 0:r.shadowOnGround)&&void 0!==d?d:defaultPassParameters.shadowOnGround,alwaysUpdate:null!==(c=null==r?void 0:r.alwaysUpdate)&&void 0!==c?c:defaultPassParameters.alwaysUpdate,shAndAo:this.shadowAndAoRenderTargets.shadowAndAoParameters,hbao:{...defaultHBAORenderPassParameters},poissonDenoise:{...defaultPoissonDenoisePassParameters}},this._copyMaterial=new CopyTransformMaterial,this._blendMaterial=new CopyTransformMaterial({},CopyMaterialBlendMode.DEFAULT)}dispose(){var e,t,n,r,a,i;null===(e=this._gBufferRenderTarget)||void 0===e||e.dispose(),this.shadowAndAoRenderTargets.dispose(),null===(t=this._hbaoPass)||void 0===t||t.dispose(),null===(n=this._fadeRenderTarget)||void 0===n||n.dispose(),null===(r=this._poissonDenoisePass)||void 0===r||r.dispose(),null===(a=this._copyMaterial)||void 0===a||a.dispose(),null===(i=this._blendMaterial)||void 0===i||i.dispose()}setSize(e,t){var n,r,a,i;this._width=e,this._height=t,null===(n=this._gBufferRenderTarget)||void 0===n||n.setSize(e,t),this.shadowAndAoRenderTargets.setSize(e,t),null===(r=this._hbaoPass)||void 0===r||r.setSize(e,t),null===(a=this._fadeRenderTarget)||void 0===a||a.setSize(e,t),null===(i=this._poissonDenoisePass)||void 0===i||i.setSize(this._width,this._height),this.needsUpdate=!0}updateParameters(e){void 0!==e.enabled&&(this.parameters.enabled=e.enabled),void 0!==e.aoType&&(this.parameters.aoType=e.aoType),void 0!==e.aoIntensity&&(this.parameters.aoIntensity=e.aoIntensity),void 0!==e.shadowIntensity&&(this.parameters.shadowIntensity=e.shadowIntensity),void 0!==e.aoOnGround&&(this.parameters.aoOnGround=e.aoOnGround),void 0!==e.shadowOnGround&&(this.parameters.shadowOnGround=e.shadowOnGround),void 0!==e.alwaysUpdate&&(this.parameters.alwaysUpdate=e.alwaysUpdate),this._updatePassParameters(e)}_updatePassParameters(e){var t,n;if(null==e?void 0:e.shAndAo)for(let t in e.shAndAo)this.parameters.shAndAo.hasOwnProperty(t)&&(this.parameters.shAndAo[t]=e.shAndAo[t],this.shadowAndAoRenderTargets.parametersNeedsUpdate=!0);if(null==e?void 0:e.hbao)if(this._hbaoPass)null===(t=this._hbaoPass)||void 0===t||t.updateParameters(null==e?void 0:e.hbao);else for(let t in e.hbao)this.parameters.hbao.hasOwnProperty(t)&&(this.parameters.hbao[t]=e.hbao[t]);if(null==e?void 0:e.poissonDenoise)if(this._poissonDenoisePass)null===(n=this._poissonDenoisePass)||void 0===n||n.updateParameters(null==e?void 0:e.poissonDenoise);else for(let t in e.poissonDenoise)this.parameters.poissonDenoise.hasOwnProperty(t)&&(this.parameters.poissonDenoise[t]=e.poissonDenoise[t])}updateBounds(e,t){this.shadowAndAoRenderTargets.updateBounds(e,t)}render(e,t,n,r,a=ShadowBlurType.FULL,i=ShadowBlurType.FULL,o=0){if(!this._setRenderState())return;let s=!1;const l=i===ShadowBlurType.POISSON&&o>.001,h=i===ShadowBlurType.HARD&&o>.001&&o<.999,d=i===ShadowBlurType.HARD&&!h;!d&&a===ShadowBlurType.FULL&&this._evaluateIfUpdateIsNeeded(n)&&(this._renderShadowAndAo(e,t,n,r),s=!0);let c=d?r:this.denoiseRenderTargetTexture;l&&(c=this._renderDynamicShadow(e,this.shadowAndAoRenderTargets.passRenderTarget.texture,r,o),s=!0),s&&(c=this._renderDenoise(e,n,l)),h&&(c=this._renderDynamicShadow(e,this.denoiseRenderTargetTexture,r,o)),this._renderToTarget(e,c,d)}_setRenderState(){return this.shadowAndAoRenderTargets.aoEnabled=this.parameters.aoType===AmbientOcclusionType.SSAO,this.shadowAndAoRenderTargets.shadowEnabled=this.parameters.shadowIntensity>.01,!(!this.parameters.enabled||this.parameters.aoType===AmbientOcclusionType.NONE&&!this.shadowAndAoRenderTargets.shadowEnabled||(this.needsUpdate&&(this._hbaoPass&&(this._hbaoPass.needsUpdate=!0),this._poissonDenoisePass&&(this._poissonDenoisePass.needsUpdate=!0)),0))}_evaluateIfUpdateIsNeeded(e){e.updateProjectionMatrix();const t=this.parameters.alwaysUpdate||this.needsUpdate||null!=e&&this._cameraUpdate.changed(e);return this.needsUpdate=!1,t}_renderShadowAndAo(e,t,n,r){this.gBufferRenderTarget.render(e,t,n),this.shadowAndAoRenderTargets.render(e,n,r),this._renderAoEffect(e,t,n)}_renderAoEffect(e,t,n){if(this.parameters.aoType!==AmbientOcclusionType.HBAO)return;const r=this.gBufferRenderTarget.depthBufferTexture,a=this.gBufferRenderTarget.gBufferTexture,i=this.shadowAndAoRenderTargets.passRenderTarget,o=e.autoClear;e.autoClear=!1;const s=this.hbaoRenderPass;s.depthTexture=r,s.normalTexture=a,s.render(e,n,t,i),e.autoClear=o}_renderDynamicShadow(e,t,n,r=1){const a=r<.999;return a&&(this._copyMaterial.update({texture:t,blending:NoBlending,colorTransform:DEFAULT_TRANSFORM,multiplyChannels:0}),this._renderPass.renderScreenSpace(e,this._copyMaterial,this.fadeRenderTarget)),r>.001&&(this._blendMaterial.update({texture:n,blending:a?CustomBlending:NoBlending,colorTransform:(new Matrix4).set(0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,a?r:1),multiplyChannels:0}),this._renderPass.renderScreenSpace(e,this._blendMaterial,this.fadeRenderTarget)),this.fadeRenderTarget.texture}_renderDenoise(e,t,n){return this.denoisePass.inputTexture=n?this.fadeRenderTarget.texture:this.shadowAndAoRenderTargets.passRenderTarget.texture,this.denoisePass.render(e,t),this.denoisePass.texture}_renderToTarget(e,t,n){const r=n?this.parameters.shadowIntensity:this.parameters.aoIntensity,a=n?0:this.parameters.shadowIntensity;this._renderPass.renderScreenSpace(e,this._copyMaterial.update({texture:t,blending:CustomBlending,colorTransform:interpolationMatrix(r,a,0,1),multiplyChannels:1}),e.getRenderTarget())}}ShadowAndAoPass.shadowTransform=(new Matrix4).set(0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1);class ShadowAndAoRenderTargets{get passRenderTarget(){var e;return this._passRenderTarget=null!==(e=this._passRenderTarget)&&void 0!==e?e:new WebGLRenderTarget(this._width,this._height,{samples:this._aoTargetSamples,format:RGFormat,magFilter:LinearFilter,minFilter:LinearFilter}),this._passRenderTarget}get passRenderMaterial(){var e;return this._passRenderMaterial=null!==(e=this._passRenderMaterial)&&void 0!==e?e:new ShadowAndAoRenderMaterial({normalTexture:this._depthAndNormalTextures.gBufferTexture,depthTexture:this._depthAndNormalTextures.depthBufferTexture,noiseTexture:this.noiseTexture,sampleKernel:this.sampleKernel,floatGBufferRgbNormalAlphaDepth:this._depthAndNormalTextures.isFloatGBufferWithRgbNormalAlphaDepth}),this._passRenderMaterial}get noiseTexture(){var e;return this._noiseTexture=null!==(e=this._noiseTexture)&&void 0!==e?e:(e=>{const t=Math.floor(5)%2==0?Math.floor(5)+1:Math.floor(5),n=(e=>{const t=Math.floor(e)%2==0?Math.floor(e)+1:Math.floor(e),n=t*t,r=Array(n).fill(0);let a=Math.floor(t/2),i=t-1;for(let e=1;e<=n;)-1===a&&i===t?(i=t-2,a=0):(i===t&&(i=0),a<0&&(a=t-1)),0===r[a*t+i]?(r[a*t+i]=e++,i++,a--):(i-=2,a++);return r})(t),r=n.length,a=new Uint8Array(4*r);for(let e=0;e<r;++e){const t=n[e],i=2*Math.PI*t/r,o=new Vector3(Math.cos(i),Math.sin(i),0).normalize();a[4*e]=255*(.5*o.x+.5),a[4*e+1]=255*(.5*o.y+.5),a[4*e+2]=127,a[4*e+3]=0}const i=new DataTexture(a,t,t);return i.wrapS=RepeatWrapping,i.wrapT=RepeatWrapping,i.needsUpdate=!0,i})(),this._noiseTexture}get sampleKernel(){return this._sampleKernel.length||(this._sampleKernel=(e=>{const t=[];for(let n=0;n<e;n++){const r=n*Math.PI*(3-Math.sqrt(5)),a=.99-n/(e-1)*.8,i=Math.sqrt(1-a*a),o=Math.cos(r)*i,s=Math.sin(r)*i,l=8,h=Math.floor(e/l);let d=1-(Math.floor(n/l)+n%l*h)/e;d=MathUtils.lerp(.1,1,d*d),t.push(new Vector3(o*d,s*d,a*d))}return t})(ShadowAndAoRenderMaterial.kernelSize)),this._sampleKernel}constructor(e,t){var n,r,a,i;this.parametersNeedsUpdate=!0,this.aoEnabled=!0,this.shadowEnabled=!0,this._sceneBoxMin=new Vector3(-1,-1,-1),this._sceneBoxMax=new Vector3(1,1,1),this._shadowAndAoScale=1,this._aoTargetSamples=0,this._sampleKernel=[],this.shadowAndAoParameters=this._getShadowAndAoParameters(t),this._width=null!==(n=null==t?void 0:t._width)&&void 0!==n?n:1024,this._height=null!==(r=null==t?void 0:t._height)&&void 0!==r?r:1024,this._samples=null!==(a=null==t?void 0:t._samples)&&void 0!==a?a:0,this._depthAndNormalTextures=e,this._renderPass=null!==(i=null==t?void 0:t._renderPass)&&void 0!==i?i:new RenderPass}_getShadowAndAoParameters(e){return{...defaultShadowAndAoParameters,...e}}dispose(){var e,t,n;null===(e=this._noiseTexture)||void 0===e||e.dispose(),null===(t=this._passRenderMaterial)||void 0===t||t.dispose(),null===(n=this._passRenderTarget)||void 0===n||n.dispose()}setSize(e,t){var n;this._width=e,this._height=t,null===(n=this._passRenderMaterial)||void 0===n||n.update({_width:this._width,_height:this._height})}updateBounds(e,t){this._sceneBoxMin.copy(e.bounds.min),this._sceneBoxMax.copy(e.bounds.max),this._shadowAndAoScale=t,this.parametersNeedsUpdate=!0}render(e,t,n){this._renderPass.renderScreenSpace(e,this.updateSSAOMaterial(t,n),this.passRenderTarget),this.parametersNeedsUpdate=!1}updateSSAOMaterial(e,t){const n=this.passRenderMaterial;return n.updateDependencies({_width:this._width,_height:this._height,camera:e,shadowTexture:t,sceneBoxMin:this._sceneBoxMin,sceneBoxMax:this._sceneBoxMax}),this.parametersNeedsUpdate&&n.updateSettings({...this.shadowAndAoParameters,aoKernelRadius:this.shadowAndAoParameters.aoKernelRadius*this._shadowAndAoScale,aoMaxDistance:this.shadowAndAoParameters.aoMaxDistance*this._shadowAndAoScale,shadowRadius:this.shadowAndAoParameters.shadowRadius*this._shadowAndAoScale,aoIntensity:this.aoEnabled?1:0,shadowIntensity:this.shadowEnabled?1:0}),n}}class ShadowAndAoRenderMaterial extends ShaderMaterial{constructor(e){var t,n;super({defines:Object.assign({...ShadowAndAoRenderMaterial._shader.defines,KERNEL_SIZE:null!==(n=null===(t=null==e?void 0:e.sampleKernel)||void 0===t?void 0:t.length)&&void 0!==n?n:ShadowAndAoRenderMaterial.kernelSize,FLOAT_GBUFFER_RGB_NORMAL_ALPHA_DEPTH:(null==e?void 0:e.floatGBufferRgbNormalAlphaDepth)?1:0}),uniforms:UniformsUtils.clone(ShadowAndAoRenderMaterial._shader.uniforms),vertexShader:ShadowAndAoRenderMaterial._shader.vertexShader,fragmentShader:ShadowAndAoRenderMaterial._shader.fragmentShader,blending:NoBlending}),this.update(e)}update(e){return this.updateDependencies(e),this.updateSettings(e),this}updateDependencies(e){var t,n;if(void 0!==(null==e?void 0:e.shadowTexture)&&(this.uniforms.tShadow.value=null==e?void 0:e.shadowTexture),void 0!==(null==e?void 0:e.normalTexture)&&(this.uniforms.tNormal.value=null==e?void 0:e.normalTexture),void 0!==(null==e?void 0:e.depthTexture)&&(this.uniforms.tDepth.value=null==e?void 0:e.depthTexture),void 0!==(null==e?void 0:e.noiseTexture)&&(this.uniforms.tNoise.value=null==e?void 0:e.noiseTexture),(null==e?void 0:e._width)||(null==e?void 0:e._height)){const r=null!==(t=null==e?void 0:e._width)&&void 0!==t?t:this.uniforms.resolution.value.x,a=null!==(n=null==e?void 0:e._height)&&void 0!==n?n:this.uniforms.resolution.value.y;this.uniforms.resolution.value.set(r,a)}void 0!==(null==e?void 0:e.sampleKernel)&&(this.uniforms.sampleKernel.value=null==e?void 0:e.sampleKernel),void 0!==(null==e?void 0:e.sceneBoxMin)&&(this.uniforms.sceneBoxMin.value=null==e?void 0:e.sceneBoxMin),void 0!==(null==e?void 0:e.sceneBoxMax)&&(this.uniforms.sceneBoxMax.value=null==e?void 0:e.sceneBoxMax),this._updateCameraDependentUniforms(e)}_updateCameraDependentUniforms(e){if(void 0!==(null==e?void 0:e.camera)){const t=(null==e?void 0:e.camera)||(null==e?void 0:e.camera);this.uniforms.cameraNear.value=t.near,this.uniforms.cameraFar.value=t.far,this.uniforms.cameraProjectionMatrix.value.copy(t.projectionMatrix),this.uniforms.cameraInverseProjectionMatrix.value.copy(t.projectionMatrixInverse),this.uniforms.cameraWorldMatrix.value.copy(t.matrixWorld)}}updateSettings(e){void 0!==(null==e?void 0:e.aoKernelRadius)&&(this.uniforms.aoKernelRadius.value=null==e?void 0:e.aoKernelRadius),void 0!==(null==e?void 0:e.aoDepthBias)&&(this.uniforms.aoDepthBias.value=null==e?void 0:e.aoDepthBias),void 0!==(null==e?void 0:e.aoMaxDistance)&&(this.uniforms.aoMaxDistance.value=null==e?void 0:e.aoMaxDistance),void 0!==(null==e?void 0:e.aoMaxDepth)&&(this.uniforms.aoMaxDepth.value=null==e?void 0:e.aoMaxDepth),void 0!==(null==e?void 0:e.aoIntensity)&&(this.uniforms.aoIntensity.value=null==e?void 0:e.aoIntensity),void 0!==(null==e?void 0:e.aoFadeout)&&(this.uniforms.aoFadeout.value=null==e?void 0:e.aoFadeout),void 0!==(null==e?void 0:e.shadowRadius)&&(this.uniforms.shKernelRadius.value=null==e?void 0:e.shadowRadius),void 0!==(null==e?void 0:e.shadowIntensity)&&(this.uniforms.shIntensity.value=null==e?void 0:e.shadowIntensity)}}ShadowAndAoRenderMaterial.kernelSize=32,ShadowAndAoRenderMaterial._shader={uniforms:{tShadow:{value:null},tNormal:{value:null},tDepth:{value:null},tNoise:{value:null},sampleKernel:{value:null},cameraNear:{value:.1},cameraFar:{value:1},resolution:{value:new Vector2},cameraProjectionMatrix:{value:new Matrix4},cameraInverseProjectionMatrix:{value:new Matrix4},cameraWorldMatrix:{value:new Matrix4},aoKernelRadius:{value:.1},aoDepthBias:{value:.001},aoMaxDistance:{value:.05},aoMaxDepth:{value:.99},aoIntensity:{value:1},aoFadeout:{value:0},shKernelRadius:{value:.15},shIntensity:{value:1},sceneBoxMin:{value:new Vector3(-1,-1,-1)},sceneBoxMax:{value:new Vector3(1,1,1)}},defines:{PERSPECTIVE_CAMERA:1,KERNEL_SIZE:ShadowAndAoRenderMaterial.kernelSize,FLOAT_GBUFFER_RGB_NORMAL_ALPHA_DEPTH:0,NORMAL_VECTOR_ANTIALIAS:2,DEPTH_BUFFER_ANTIALIAS:1},vertexShader:"varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }",fragmentShader:"uniform sampler2D tShadow;\n uniform sampler2D tNormal;\n#if FLOAT_GBUFFER_RGB_NORMAL_ALPHA_DEPTH != 1 \n uniform sampler2D tDepth;\n#endif \n uniform sampler2D tNoise;\n uniform vec3 sampleKernel[KERNEL_SIZE];\n uniform vec2 resolution;\n uniform float cameraNear;\n uniform float cameraFar;\n uniform mat4 cameraProjectionMatrix;\n uniform mat4 cameraInverseProjectionMatrix;\n uniform mat4 cameraWorldMatrix;\n uniform float aoKernelRadius;\n uniform float aoDepthBias; // avoid artifacts caused by neighbour fragments with minimal depth difference\n uniform float aoMaxDistance; // avoid the influence of fragments which are too far away\n uniform float aoMaxDepth;\n uniform float aoIntensity;\n uniform float aoFadeout;\n uniform float shKernelRadius;\n uniform float shIntensity;\n uniform vec3 sceneBoxMin;\n uniform vec3 sceneBoxMax;\n \n varying vec2 vUv;\n \n #include <packing>\n \n float getDepth(const in vec2 screenPosition) {\n #if FLOAT_GBUFFER_RGB_NORMAL_ALPHA_DEPTH == 1\n #if DEPTH_BUFFER_ANTIALIAS == 1\n vec2 size = vec2(textureSize(tNormal, 0));\n ivec2 p = ivec2(screenPosition * size);\n float d0 = texelFetch(tNormal, p, 0).w;\n vec2 depth = vec2(d0, 1.0);\n float d1 = texelFetch(tNormal, p + ivec2(1, 0), 0).w;\n depth += vec2(d1, 1.0) * step(abs(d1 - d0), 0.1);\n float d2 = texelFetch(tNormal, p - ivec2(1, 0), 0).w;\n depth += vec2(d2, 1.0) * step(abs(d2 - d0), 0.1);\n float d3 = texelFetch(tNormal, p + ivec2(0, 1), 0).w;\n depth += vec2(d3, 1.0) * step(abs(d3 - d0), 0.1);\n float d4 = texelFetch(tNormal, p - ivec2(0, 1), 0).w;\n depth += vec2(d4, 1.0) * step(abs(d4 - d0), 0.1);\n return depth.x / depth.y;\n #else\n return texture2D(tNormal, screenPosition).w;\n #endif\n #else \n return texture2D(tDepth, screenPosition).x;\n #endif\n }\n \n float getViewZ(const in float depth) {\n #if PERSPECTIVE_CAMERA == 1\n return perspectiveDepthToViewZ(depth, cameraNear, cameraFar);\n #else\n return orthographicDepthToViewZ(depth, cameraNear, cameraFar);\n #endif\n }\n \n vec3 getViewPosition(const in vec2 screenPosition, const in float depth) {\n vec4 clipSpacePosition = vec4(vec3(screenPosition, depth) * 2.0 - 1.0, 1.0);\n vec4 viewSpacePosition = cameraInverseProjectionMatrix * clipSpacePosition;\n return viewSpacePosition.xyz / viewSpacePosition.w;\n }\n\n vec3 getAntiAliasedViewNormal(const in vec2 screenPosition) {\n #if FLOAT_GBUFFER_RGB_NORMAL_ALPHA_DEPTH == 1\n #if NORMAL_VECTOR_ANTIALIAS == 1\n vec2 uv = screenPosition;\n vec2 size = vec2(textureSize(tNormal, 0));\n ivec2 p = ivec2(screenPosition * size);\n float c0 = texelFetch(tNormal, p, 0).a;\n float l2 = texelFetch(tNormal, p - ivec2(2, 0), 0).a;\n float l1 = texelFetch(tNormal, p - ivec2(1, 0), 0).a;\n float r1 = texelFetch(tNormal, p + ivec2(1, 0), 0).a;\n float r2 = texelFetch(tNormal, p + ivec2(2, 0), 0).a;\n float b2 = texelFetch(tNormal, p - ivec2(0, 2), 0).a;\n float b1 = texelFetch(tNormal, p - ivec2(0, 1), 0).a;\n float t1 = texelFetch(tNormal, p + ivec2(0, 1), 0).a;\n float t2 = texelFetch(tNormal, p + ivec2(0, 2), 0).a;\n float dl = abs((2.0 * l1 - l2) - c0);\n float dr = abs((2.0 * r1 - r2) - c0);\n float db = abs((2.0 * b1 - b2) - c0);\n float dt = abs((2.0 * t1 - t2) - c0);\n vec3 ce = getViewPosition(uv, c0).xyz;\n vec3 dpdx = (dl < dr) ? ce - getViewPosition((uv - vec2(1.0 / size.x, 0.0)), l1).xyz\n : -ce + getViewPosition((uv + vec2(1.0 / size.x, 0.0)), r1).xyz;\n vec3 dpdy = (db < dt) ? ce - getViewPosition((uv - vec2(0.0, 1.0 / size.y)), b1).xyz\n : -ce + getViewPosition((uv + vec2(0.0, 1.0 / size.y)), t1).xyz;\n return normalize(cross(dpdx, dpdy));\n #elif NORMAL_VECTOR_ANTIALIAS == 2\n vec2 size = vec2(textureSize(tNormal, 0));\n ivec2 p = ivec2(screenPosition * size);\n vec3 normalVector = texelFetch(tNormal, p, 0).xyz;\n normalVector += texelFetch(tNormal, p + ivec2(1, 0), 0).xyz;\n normalVector += texelFetch(tNormal, p - ivec2(1, 0), 0).xyz;\n normalVector += texelFetch(tNormal, p + ivec2(0, 1), 0).xyz;\n normalVector += texelFetch(tNormal, p - ivec2(0, 1), 0).xyz;\n return normalize(normalVector);\n #else\n return texture2D(tNormal, screenPosition).xyz;\n #endif\n #else\n return unpackRGBToNormal(texture2D(tNormal, screenPosition).xyz);\n #endif\n }\n\n vec3 getViewNormal(const in vec2 screenPosition) {\n #if FLOAT_GBUFFER_RGB_NORMAL_ALPHA_DEPTH == 1\n return texture2D(tNormal, screenPosition).xyz;\n #else\n return unpackRGBToNormal(texture2D(tNormal, screenPosition).xyz);\n #endif\n }\n \n void main() {\n \n float depth = getDepth(vUv);\n float viewZ = getViewZ(depth);\n \n vec3 viewPosition = getViewPosition(vUv, depth);\n vec3 viewNormal = getAntiAliasedViewNormal(vUv);\n vec3 worldPosition = (cameraWorldMatrix * vec4(viewPosition, 1.0)).xyz;\n float boxDistance = length(max(vec3(0.0), max(sceneBoxMin - worldPosition, worldPosition - sceneBoxMax)));\n \n vec2 noiseScale = resolution.xy / vec2(textureSize(tNoise, 0));\n vec3 random = texture2D(tNoise, vUv * noiseScale).xyz * 2.0 - 1.0;\n \n // compute matrix used to reorient a kernel vector\n vec3 tangent = normalize(random - viewNormal * dot(random, viewNormal));\n vec3 bitangent = cross(viewNormal, tangent);\n mat3 kernelMatrix = mat3(tangent, bitangent, viewNormal);\n \n float aoOcclusion = 0.0;\n float shOcclusion = texture2D(tShadow, vUv).r;\n float shSamples = 0.0;\n if (aoIntensity >= 0.01 && boxDistance < aoMaxDistance && length(viewNormal) > 0.01) {\n for (int i = 0; i < KERNEL_SIZE; i ++) {\n vec3 aoSampleVector = kernelMatrix * sampleKernel[i]; \n vec3 aoSamplePoint = viewPosition + aoSampleVector * aoKernelRadius; \n vec4 aoSamplePointNDC = cameraProjectionMatrix * vec4(aoSamplePoint, 1.0); \n aoSamplePointNDC /= aoSamplePointNDC.w;\n vec2 aoSamplePointUv = aoSamplePointNDC.xy * 0.5 + 0.5;\n float aoRealSampleDepth = getDepth(aoSamplePointUv);\n float aoSampleDeltaZ = getViewZ(aoRealSampleDepth) - aoSamplePoint.z;\n float aoRealDeltaZ = viewZ - aoSamplePoint.z;\n float w_long = clamp((aoMaxDistance - max(aoRealDeltaZ, aoSampleDeltaZ)) / aoMaxDistance, 0.0, 1.0);\n float w_lat = clamp(1.0 - length(aoSampleVector.xy), 0.0, 1.0);\n aoOcclusion +=\n step(aoRealSampleDepth, aoMaxDepth) * \n step(aoDepthBias, aoSampleDeltaZ / (cameraFar - cameraNear)) * \n step(aoSampleDeltaZ, aoMaxDistance) * mix(1.0, w_long * w_lat, aoFadeout);\n }\n }\n if (shIntensity >= 0.01 && length(viewNormal) > 0.01) {\n for (int i = 0; i < KERNEL_SIZE; i ++) {\n vec3 shSampleVector = kernelMatrix * sampleKernel[i]; // reorient sample vector in view space\n vec3 shSamplePoint = viewPosition + shSampleVector * shKernelRadius; // calculate sample point\n vec4 shSamplePointNDC = cameraProjectionMatrix * vec4(shSamplePoint, 1.0); // project point and calculate NDC\n shSamplePointNDC /= shSamplePointNDC.w;\n vec2 shSamplePointUv = shSamplePointNDC.xy * 0.5 + 0.5; // compute uv coordinates\n vec3 shSampleNormal = getViewNormal(shSamplePointUv);\n float shDeltaZ = getViewZ(getDepth(shSamplePointUv)) - shSamplePoint.z;\n float w = step(abs(shDeltaZ), shKernelRadius) * max(0.0, dot(shSampleNormal, viewNormal));\n shSamples += w;\n shOcclusion += texture2D(tShadow, shSamplePointUv).r * w;\n }\n }\n \n aoOcclusion = clamp(aoOcclusion / float(KERNEL_SIZE) * (1.0 + aoFadeout), 0.0, 1.0);\n aoOcclusion = 1.0 - aoOcclusion * clamp(1.0 - boxDistance / aoMaxDistance, 0.0, 1.0);\n shOcclusion = clamp(shOcclusion / (shSamples + 1.0), 0.0, 1.0);\n gl_FragColor = vec4(aoOcclusion, shOcclusion, 0.0, 1.0);\n }"};class GroundReflectionPass{get reflectionRenderTarget(){var e;return this._reflectionRenderTarget=null!==(e=this._reflectionRenderTarget)&&void 0!==e?e:this._newRenderTarget(!0),this._reflectionRenderTarget}get intensityRenderTarget(){var e;return this._intensityRenderTarget=null!==(e=this._intensityRenderTarget)&&void 0!==e?e:this._newRenderTarget(!1),this._intensityRenderTarget}get blurRenderTarget(){var e;return this._blurRenderTarget=null!==(e=this._blurRenderTarget)&&void 0!==e?e:this._newRenderTarget(!1),this._blurRenderTarget}constructor(e,t,n){var r;this._width=e,this._height=t,this.parameters={enabled:!1,intensity:.25,fadeOutDistance:1,fadeOutExponent:4,brightness:1,blurHorizontal:3,blurVertical:6,blurAscent:0,groundLevel:0,groundReflectionScale:1,renderTargetDownScale:4,...n},this._copyMaterial=new CopyTransformMaterial({}),this._updateCopyMaterial(null),this._reflectionIntensityMaterial=new GroundReflectionIntensityMaterial({_width:this._width/this.parameters.renderTargetDownScale,_height:this._height/this.parameters.renderTargetDownScale}),this._blurPass=new BlurPass(BlurShader,n),this._renderPass=null!==(r=null==n?void 0:n._renderPass)&&void 0!==r?r:new RenderPass}_newRenderTarget(e){const t=this._width/this.parameters.renderTargetDownScale,n=this._height/this.parameters.renderTargetDownScale;let r={};if(e){const e=new DepthTexture(t,n);e.format=DepthStencilFormat,e.type=UnsignedInt248Type,r.minFilter=NearestFilter,r.magFilter=NearestFilter,r.depthTexture=e}else r.samples=1;return new WebGLRenderTarget(t,n,{format:RGBAFormat,...r})}dispose(){var e,t,n;null===(e=this._reflectionRenderTarget)||void 0===e||e.dispose(),null===(t=this._intensityRenderTarget)||void 0===t||t.dispose(),null===(n=this._blurRenderTarget)||void 0===n||n.dispose(),this._copyMaterial.dispose()}setSize(e,t){var n,r,a,i;this._width=e,this._height=t,null===(n=this._reflectionRenderTarget)||void 0===n||n.setSize(this._width/this.parameters.renderTargetDownScale,this._height/this.parameters.renderTargetDownScale),null===(r=this._intensityRenderTarget)||void 0===r||r.setSize(this._width/this.parameters.renderTargetDownScale,this._height/this.parameters.renderTargetDownScale),null===(a=this._blurRenderTarget)||void 0===a||a.setSize(this._width/this.parameters.renderTargetDownScale,this._height/this.parameters.renderTargetDownScale),null===(i=this._reflectionIntensityMaterial)||void 0===i||i.update({_width:this._width/this.parameters.renderTargetDownScale,_height:this._height/this.parameters.renderTargetDownScale})}updateParameters(e){for(let t in e)this.parameters.hasOwnProperty(t)&&(this.parameters[t]=e[t])}updateBounds(e,t){this.parameters.groundLevel=e,this.parameters.groundReflectionScale=t}_updateCopyMaterial(e,t=1){var n;const r=this.parameters.intensity*t,a=this.parameters.brightness;this._copyMaterial.update({texture:null!==(n=null==e?void 0:e.texture)&&void 0!==n?n:void 0,colorTransform:(new Matrix4).set(a,0,0,0,0,a,0,0,0,0,a,0,0,0,0,r),multiplyChannels:0,uvTransform:FLIP_Y_UV_TRANSFORM}),this._copyMaterial.depthTest=!0,this._copyMaterial.depthWrite=!1}render(e,t,n,r=1){if(!(this.parameters.enabled&&n instanceof PerspectiveCamera))return;const a=this._createGroundReflectionCamera(n);this._renderGroundReflection(e,t,a,this.reflectionRenderTarget),this._renderGroundReflectionIntensity(e,a,this.intensityRenderTarget),(this.parameters.blurHorizontal>0||this.parameters.blurVertical>0)&&this.blurReflection(e,n,[this.intensityRenderTarget,this.blurRenderTarget,this.intensityRenderTarget]),this._updateCopyMaterial(this.intensityRenderTarget,r),this._renderPass.renderScreenSpace(e,this._copyMaterial,e.getRenderTarget())}_renderGroundReflection(e,t,n,r){const a=e.getRenderTarget();r&&e.setRenderTarget(r),e.render(t,n),r&&e.setRenderTarget(a)}_renderGroundReflectionIntensity(e,t,n){const r=e.getRenderTarget();e.setRenderTarget(n),this._renderPass.renderScreenSpace(e,this._reflectionIntensityMaterial.update({texture:this.reflectionRenderTarget.texture,depthTexture:this.reflectionRenderTarget.depthTexture,camera:t,groundLevel:this.parameters.groundLevel,fadeOutDistance:this.parameters.fadeOutDistance*this.parameters.groundReflectionScale,fadeOutExponent:this.parameters.fadeOutExponent}),e.getRenderTarget()),e.setRenderTarget(r)}blurReflection(e,t,n){const r=new Vector3(t.matrixWorld.elements[4],t.matrixWorld.elements[5],t.matrixWorld.elements[6]),a=this.parameters.blurHorizontal/this._width,i=this.parameters.blurVertical/this._height*Math.abs(r.dot(new Vector3(0,0,1)));this._blurPass.render(e,n,[4*a,4*i],[4*a*(1+this.parameters.blurAscent),4*i*(1+this.parameters.blurAscent)])}_createGroundReflectionCamera(e){const t=e.clone(),n=t;return n._offset&&(n._offset={left:n._offset.left,top:1-n._offset.bottom,right:n._offset.right,bottom:1-n._offset.top}),t.position.set(e.position.x,-e.position.y+2*this.parameters.groundLevel,e.position.z),t.rotation.set(-e.rotation.x,e.rotation.y,-e.rotation.z),t.updateMatrixWorld(),t.updateProjectionMatrix(),t}}class GroundReflectionIntensityMaterial extends ShaderMaterial{constructor(e){super({defines:Object.assign({},GroundReflectionIntensityMaterial.shader.defines),uniforms:UniformsUtils.clone(GroundReflectionIntensityMaterial.shader.uniforms),vertexShader:GroundReflectionIntensityMaterial.shader.vertexShader,fragmentShader:GroundReflectionIntensityMaterial.shader.fragmentShader,blending:NoBlending}),this.update(e)}update(e){var t,n;if(void 0!==(null==e?void 0:e.texture)&&(this.uniforms.tDiffuse.value=null==e?void 0:e.texture),void 0!==(null==e?void 0:e.depthTexture)&&(this.uniforms.tDepth.value=null==e?void 0:e.depthTexture),(null==e?void 0:e._width)||(null==e?void 0:e._height)){const r=null!==(t=null==e?void 0:e._width)&&void 0!==t?t:this.uniforms.resolution.value.x,a=null!==(n=null==e?void 0:e._height)&&void 0!==n?n:this.uniforms.resolution.value.y;this.uniforms.resolution.value.set(r,a)}if(void 0!==(null==e?void 0:e.camera)){const t=(null==e?void 0:e.camera)||(null==e?void 0:e.camera);this.uniforms.cameraNear.value=t.near,this.uniforms.cameraFar.value=t.far,this.uniforms.cameraProjectionMatrix.value.copy(t.projectionMatrix),this.uniforms.cameraInverseProjectionMatrix.value.copy(t.projectionMatrixInverse),this.uniforms.inverseViewMatrix.value.copy(t.matrixWorld)}return void 0!==(null==e?void 0:e.groundLevel)&&(this.uniforms.groundLevel.value=null==e?void 0:e.groundLevel),void 0!==(null==e?void 0:e.fadeOutDistance)&&(this.uniforms.fadeOutDistance.value=null==e?void 0:e.fadeOutDistance),void 0!==(null==e?void 0:e.fadeOutExponent)&&(this.uniforms.fadeOutExponent.value=null==e?void 0:e.fadeOutExponent),this}}GroundReflectionIntensityMaterial.shader={uniforms:{tDiffuse:{value:null},tDepth:{value:null},resolution:{value:new Vector2},cameraNear:{value:.1},cameraFar:{value:1},cameraProjectionMatrix:{value:new Matrix4},cameraInverseProjectionMatrix:{value:new Matrix4},inverseViewMatrix:{value:new Matrix4},groundLevel:{value:0},fadeOutDistance:{value:1},fadeOutExponent:{value:1}},defines:{PERSPECTIVE_CAMERA:1,LINEAR_TO_SRGB:1},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }",fragmentShader:"\n uniform sampler2D tDiffuse;\n uniform sampler2D tDepth;\n uniform vec2 resolution;\n uniform float cameraNear;\n uniform float cameraFar;\n uniform mat4 cameraProjectionMatrix;\n uniform mat4 cameraInverseProjectionMatrix;\n uniform mat4 inverseViewMatrix;\n uniform float groundLevel;\n uniform float fadeOutDistance;\n uniform float fadeOutExponent;\n varying vec2 vUv;\n\n #include <packing>\n\n float getDepth(const in vec2 screenPosition) {\n return texture2D(tDepth, screenPosition).x;\n }\n\n float getLinearDepth(const in vec2 screenPosition) {\n #if PERSPECTIVE_CAMERA == 1\n float fragCoordZ = texture2D(tDepth, screenPosition).x;\n float viewZ = perspectiveDepthToViewZ(fragCoordZ, cameraNear, cameraFar);\n return viewZToOrthographicDepth(viewZ, cameraNear, cameraFar);\n #else\n return texture2D(tDepth, screenPosition).x;\n #endif\n }\n\n float getViewZ(const in float depth) {\n #if PERSPECTIVE_CAMERA == 1\n return perspectiveDepthToViewZ(depth, cameraNear, cameraFar);\n #else\n return 0.0;//orthographicDepthToViewZ(depth, cameraNear, cameraFar);\n #endif\n }\n\n vec3 getViewPosition(const in vec2 screenPosition, const in float depth, const in float viewZ ) {\n float clipW = cameraProjectionMatrix[2][3] * viewZ + cameraProjectionMatrix[3][3];\n vec4 clipPosition = vec4((vec3(screenPosition, depth) - 0.5) * 2.0, 1.0);\n clipPosition *= clipW;\n return (cameraInverseProjectionMatrix * clipPosition).xyz;\n }\n\n void main() {\n float verticalBias = 1.5 / resolution.y;\n vec2 uv = vUv.xy + vec2(0.0, verticalBias);\n float depth = getDepth(uv);\n float viewZ = getViewZ(depth);\n vec4 worldPosition = inverseViewMatrix * vec4(getViewPosition(uv, depth, viewZ), 1.0);\n float distance = worldPosition.y - groundLevel;\n vec4 fragColor = texture2D(tDiffuse, uv).rgba;\n #if LINEAR_TO_SRGB == 1\n fragColor.rgb = mix(fragColor.rgb * 12.92, 1.055 * pow(fragColor.rgb, vec3(0.41666)) - 0.055, step(0.0031308, fragColor.rgb));\n #endif\n float fadeOutAlpha = pow(clamp(1.0 - distance / fadeOutDistance, 0.0, 1.0), fadeOutExponent);\n fragColor.a *= fadeOutAlpha;\n gl_FragColor = fragColor * step(depth, 0.9999);\n }"};const sphereToEquirectangular=e=>{const t=Math.atan2(e.y,e.x)/(2*Math.PI)+.5,n=Math.asin(e.z)/Math.PI+.5;return new Vector2(t,n)};class TextureConverter{get colorRenderTarget(){var e;return this._colorRenderTarget=null!==(e=this._colorRenderTarget)&&void 0!==e?e:new WebGLRenderTarget,this._colorRenderTarget}get environmentMapDecodeTarget(){var e;return this._environmentMapDecodeTarget=null!==(e=this._environmentMapDecodeTarget)&&void 0!==e?e:new WebGLRenderTarget,this._environmentMapDecodeTarget}environmentMapDecodeMaterial(e){var t,n;return e?(this._equirectangularDecodeMaterial=null!==(t=this._equirectangularDecodeMaterial)&&void 0!==t?t:new EnvironmentMapDecodeMaterial(!0,!1),this._equirectangularDecodeMaterial):(this._pmremDecodeMaterial=null!==(n=this._pmremDecodeMaterial)&&void 0!==n?n:new EnvironmentMapDecodeMaterial(!1,!1),this._pmremDecodeMaterial)}get camera(){var e;return this._camera=null!==(e=this._camera)&&void 0!==e?e:new OrthographicCamera(-1,1,1,-1,-1,1),this._camera}scaleTexture(e,t,n,r){var a;this.colorRenderTarget.setSize(n,r),this._planeMesh=null!==(a=this._planeMesh)&&void 0!==a?a:new Mesh(new PlaneGeometry(2,2),new MeshBasicMaterial({map:t}));const i=e.getRenderTarget();e.setRenderTarget(this.colorRenderTarget),e.render(this._planeMesh,this.camera),e.setRenderTarget(i);const o=this.environmentMapDecodeTarget.texture,s=new Uint8Array(n*r*4);return e.readRenderTargetPixels(this.colorRenderTarget,0,0,n,r,s),{texture:o,pixels:s}}newGrayscaleTexture(e,t,n,r){var a;const i=this.environmentMapDecodeMaterial("PMREM.cubeUv"===t.name);this.environmentMapDecodeTarget.setSize(n,r),i.setSourceTexture(t),this._planeMesh=null!==(a=this._planeMesh)&&void 0!==a?a:new Mesh(new PlaneGeometry(2,2),i);const o=e.getRenderTarget();e.setRenderTarget(this.environmentMapDecodeTarget),e.render(this._planeMesh,this.camera),e.setRenderTarget(o);const s=this.environmentMapDecodeTarget.texture,l=new Uint8Array(n*r*4);return e.readRenderTargetPixels(this.environmentMapDecodeTarget,0,0,n,r,l),{texture:s,pixels:l}}}const EnvironmentMapDecodeShader_uniforms={tDiffuse:{value:null}};class EnvironmentMapDecodeMaterial extends ShaderMaterial{constructor(e,t){super({uniforms:UniformsUtils.clone(EnvironmentMapDecodeShader_uniforms),vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = (projectionMatrix * modelViewMatrix * vec4(position, 1.0)).xyww;\n }",fragmentShader:"\n uniform sampler2D tDiffuse;\n varying vec2 vUv;\n \n float getFace( vec3 direction ) {\n vec3 absDirection = abs( direction );\n float face = - 1.0;\n if ( absDirection.x > absDirection.z ) {\n if ( absDirection.x > absDirection.y )\n face = direction.x > 0.0 ? 0.0 : 3.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n } else {\n if ( absDirection.z > absDirection.y )\n face = direction.z > 0.0 ? 2.0 : 5.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n }\n return face;\n }\n\n vec2 getUV( vec3 direction, float face ) {\n vec2 uv;\n if ( face == 0.0 ) {\n uv = vec2( direction.z, direction.y ) / abs( direction.x ); // pos x\n } else if ( face == 1.0 ) {\n uv = vec2( - direction.x, - direction.z ) / abs( direction.y ); // pos y\n } else if ( face == 2.0 ) {\n uv = vec2( - direction.x, direction.y ) / abs( direction.z ); // pos z\n } else if ( face == 3.0 ) {\n uv = vec2( - direction.z, direction.y ) / abs( direction.x ); // neg x\n } else if ( face == 4.0 ) {\n uv = vec2( - direction.x, direction.z ) / abs( direction.y ); // neg y\n } else {\n uv = vec2( direction.x, direction.y ) / abs( direction.z ); // neg z\n }\n return 0.5 * ( uv + 1.0 );\n }\n\n void main() {\n #if PMREM_DECODE == 1\n float altitude = (vUv.y - 0.5) * 3.141593;\n float azimuth = vUv.x * 2.0 * 3.141593;\n vec3 direction = vec3(\n cos(altitude) * cos(azimuth) * -1.0, \n sin(altitude), \n cos(altitude) * sin(azimuth) * -1.0\n );\n float face = getFace(direction);\n vec2 uv = getUV(direction, face) / vec2(3.0, 4.0);\n if (face > 2.5) {\n uv.y += 0.25;\n face -= 3.0;\n }\n uv.x += face / 3.0;\n vec4 color = texture2D(tDiffuse, uv);\n #else\n vec4 color = texture2D(tDiffuse, vUv);\n #endif \n #if GRAYSCALE_CONVERT == 1\n float grayscale = dot(color.rgb, vec3(0.2126, 0.7152, 0.0722));\n //float grayscale = dot(color.rgb, vec3(1.0/3.0));\n gl_FragColor = vec4(vec3(grayscale), 1.0);\n #else\n gl_FragColor = vec4(color.rgb, 1.0);\n #endif\n }",defines:{PMREM_DECODE:e?1:0,GRAYSCALE_CONVERT:t?1:0}})}setSourceTexture(e){this.uniforms.tDiffuse.value=e}}class LightSourceDetector{constructor(e){var t,n,r,a;this.samplePoints=[],this.sampleUVs=[],this.grayscaleTexture={texture:new Texture,pixels:new Uint8Array(0)},this.detectorTexture=new Texture,this.detectorArray=new Float32Array(0),this.lightSamples=[],this.lightGraph=new LightGraph(0),this.lightSources=[],this._createEquirectangularSamplePoints=e=>{const t=[];for(let n=0;n<e;n++){const r=n*Math.PI*(3-Math.sqrt(5)),a=1-n/(e-1)*2,i=Math.sqrt(1-a*a),o=Math.cos(r)*i,s=Math.sin(r)*i;t.push(new Vector3(o,s,a))}return t},this._numberOfSamples=null!==(t=null==e?void 0:e._numberOfSamples)&&void 0!==t?t:1e3,this._width=null!==(n=null==e?void 0:e._width)&&void 0!==n?n:1024,this._height=null!==(r=null==e?void 0:e._height)&&void 0!==r?r:512,this._sampleThreshold=null!==(a=null==e?void 0:e._sampleThreshold)&&void 0!==a?a:.707,this.pointDistance=Math.sqrt(4*Math.PI)/Math.sqrt(this._numberOfSamples),this.pixelDistance=Math.sqrt(2)*Math.PI*2/this._width,this.samplePoints=this._createEquirectangularSamplePoints(this._numberOfSamples),this.sampleUVs=this.samplePoints.map(e=>sphereToEquirectangular(e))}detectLightSources(e,t,n){var r;this.textureData=n,this._textureConverter=null!==(r=this._textureConverter)&&void 0!==r?r:new TextureConverter,this.grayscaleTexture=this._textureConverter.newGrayscaleTexture(e,t,this._width,this._height),this.detectorArray=this._redFromRgbaToNormalizedFloatArray(this.grayscaleTexture.pixels),this.detectorTexture=this._grayscaleTextureFromFloatArray(this.detectorArray,this._width,this._height),this.lightSamples=this._filterLightSamples(this._sampleThreshold),this.lightGraph=this._findClusterSegments(this.lightSamples,this._sampleThreshold),this.lightGraph.findConnectedComponents(),this.lightSources=this.createLightSourcesFromLightGraph(this.lightSamples,this.lightGraph),this.lightSources.sort((e,t)=>t.maxIntensity-e.maxIntensity)}_redFromRgbaToNormalizedFloatArray(e,t){const n=new Float32Array(e.length/4);let r=1,a=0;for(let t=0;t<e.length/4;++t){const i=e[4*t]/255;r=Math.min(r,i),a=Math.max(a,i),n[t]=i}if(t)for(let e=0;e<n.length;++e){const i=(n[e]-r)/(a-r);n[e]=Math.pow(i,t)}else for(let e=0;e<n.length;++e)n[e]=(n[e]-r)/(a-r);return n}_grayscaleTextureFromFloatArray(e,t,n){const r=t*n,a=new Uint8Array(4*r);for(let t=0;t<r;t++){const n=255*e[t];a[4*t+0]=n,a[4*t+1]=n,a[4*t+2]=n,a[4*t+3]=255}const i=new DataTexture(a,t,n);return i.needsUpdate=!0,i}_filterLightSamples(e){const t=[];for(let n=0;n<this.sampleUVs.length;n++){const r=this.sampleUVs[n];this._detectorTextureLuminanceValueFromUV(r)>e&&t.push(new LightSample(this.samplePoints[n],r))}return t}_detectorTextureLuminanceValueFromUV(e){const t=Math.floor(e.x*this._width),n=Math.floor(e.y*this._height)*this._width+t;return this.detectorArray[n]}_originalLuminanceValueFromUV(e){if(!(this.textureData&&this.textureData.data&&this.textureData._width&&this.textureData._height))return 256*this._detectorTextureLuminanceValueFromUV(e);const t=Math.floor(e.x*this.textureData._width),n=Math.floor(e.y*this.textureData._height);let r=0;for(let e=Math.max(0,t-2);e<Math.max(0,t+2);++e)for(let t=Math.max(0,n-2);t<Math.max(0,n+2);++t){const n=t*this.textureData._width+e,a=(this.textureData.data[4*n]+this.textureData.data[4*n+1]+this.textureData.data[4*n+2])/3;r=Math.max(r,a)}return r}_findClusterSegments(e,t){const n=2*this.pixelDistance,r=1.5*this.pointDistance,a=new LightGraph(e.length);for(let i=0;i<e.length;i++)for(let o=i+1;o<e.length;o++)if(e[i].position.angleTo(e[o].position)<r){const r=e[o].position.clone().sub(e[i].position),s=Math.floor(r.length()/n);let l=!0,h=0;for(let n=1;n<s;n++){const a=r.clone().multiplyScalar(n/s),o=sphereToEquirectangular(e[i].position.clone().add(a).normalize());if(this._detectorTextureLuminanceValueFromUV(o)<t){if(h++,h>1){l=!1;break}}else h=0}l&&(a.adjacent[i].push(o),a.adjacent[o].push(i),a.edges.push([i,o]))}return a}createLightSourcesFromLightGraph(e,t){const n=t.components.filter(e=>e.length>1).map(t=>new LightSource(t.map(t=>e[t])));return n.forEach(e=>e.calculateLightSourceProperties(e=>this._originalLuminanceValueFromUV(e))),n}}class LightSample{constructor(e,t){this.position=e,this.uv=t}}class LightGraph{constructor(e){this.edges=[],this.adjacent=[],this.components=[],this.noOfNodes=e;for(let t=0;t<e;t++)this.adjacent.push([])}findConnectedComponents(){const e=new Array(this.noOfNodes).fill(!1);this.components=[];for(let t=0;t<this.noOfNodes;t++)if(!e[t]){const n=[];this._dfs(t,e,n),this.components.push(n)}this.components.sort((e,t)=>t.length-e.length)}_dfs(e,t,n){t[e]=!0,n.push(e);for(const r of this.adjacent[e])t[r]||this._dfs(r,t,n)}}class LightSource{constructor(e){this.position=new Vector3,this.uv=new Vector2,this.averageIntensity=0,this.maxIntensity=0,this.size=0,this.lightSamples=e}calculateLightSourceProperties(e){this.position=new Vector3,this.averageIntensity=0,this.maxIntensity=0;for(const t of this.lightSamples){this.position.add(t.position);const n=e(t.uv);this.averageIntensity+=n,this.maxIntensity=Math.max(this.maxIntensity,n)}this.averageIntensity/=this.lightSamples.length,this.position.normalize(),this.uv=sphereToEquirectangular(this.position);let t=0;for(const e of this.lightSamples)t+=e.position.distanceTo(this.position);t/=this.lightSamples.length,this.size=t/Math.PI}}class DebugPass{constructor(e){this.grayMaterial=MaterialCreator.createMeshStandardMaterial({color:12632256,side:DoubleSide,envMapIntensity:.4}),this._renderPass=new RenderPass,this._sceneRenderer=e,this._environmentMapDecodeMaterial=new EnvironmentMapDecodeMaterial(!0,!1),this._environmentMapDecodeMaterial.blending=NoBlending,this._environmentMapDecodeMaterial.depthTest=!1}get _gBufferRenderTarget(){return this._sceneRenderer.gBufferRenderTarget}get _screenSpaceShadow(){return this._sceneRenderer.screenSpaceShadow}get _shadowAndAoPass(){return this._sceneRenderer.shadowAndAoPass}get _groundReflectionPass(){return this._sceneRenderer.groundReflectionPass}get _bakedGroundContactShadow(){return this._sceneRenderer.bakedGroundContactShadow}dispose(){var e,t;null===(e=this._depthRenderMaterial)||void 0===e||e.dispose(),null===(t=this._copyMaterial)||void 0===t||t.dispose(),this.grayMaterial.dispose()}getCopyMaterial(e){var t;return this._copyMaterial=null!==(t=this._copyMaterial)&&void 0!==t?t:new CopyTransformMaterial,this._copyMaterial.update(e)}_getDepthRenderMaterial(e){var t;return this._depthRenderMaterial=null!==(t=this._depthRenderMaterial)&&void 0!==t?t:new LinearDepthRenderMaterial({depthTexture:this._gBufferRenderTarget.textureWithDepthValue,depthFilter:this._gBufferRenderTarget.isFloatGBufferWithRgbNormalAlphaDepth?new Vector4(0,0,0,1):new Vector4(1,0,0,0)}),this._depthRenderMaterial.update({camera:e})}render(e,t,n,r,a,i,o){e(r,a,i),"color"!==o?("grayscale"===o?this._sceneRenderer.renderCacheManager.render("debug",a,()=>{this._renderPass.renderWithOverrideMaterial(r,a,i,this.grayMaterial,null,0,1)}):t(r,a,i),n(r,a,i),this._renderDebugPass(r,a,i,o)):r.render(a,i)}_renderDebugPass(e,t,n,r){var a,i,o,s,l,h;switch(r){default:break;case"lineardepth":this._renderPass.renderScreenSpace(e,this._getDepthRenderMaterial(n),null);break;case"g-normal":this._gBufferRenderTarget.isFloatGBufferWithRgbNormalAlphaDepth?this._renderPass.renderScreenSpace(e,this.getCopyMaterial({texture:null===(a=this._gBufferRenderTarget)||void 0===a?void 0:a.gBufferTexture,blending:NoBlending,colorTransform:(new Matrix4).set(.5,0,0,0,0,.5,0,0,0,0,.5,0,0,0,0,0),colorBase:new Vector4(.5,.5,.5,1),multiplyChannels:0,uvTransform:DEFAULT_UV_TRANSFORM}),null):this._renderPass.renderScreenSpace(e,this.getCopyMaterial({texture:null===(i=this._gBufferRenderTarget)||void 0===i?void 0:i.gBufferTexture,blending:NoBlending,colorTransform:RGB_TRANSFORM,colorBase:ALPHA_RGBA,multiplyChannels:0,uvTransform:DEFAULT_UV_TRANSFORM}),null);break;case"g-depth":this._gBufferRenderTarget.isFloatGBufferWithRgbNormalAlphaDepth?this._renderPass.renderScreenSpace(e,this.getCopyMaterial({texture:null===(o=this._gBufferRenderTarget)||void 0===o?void 0:o.gBufferTexture,blending:NoBlending,colorTransform:ALPHA_TRANSFORM,colorBase:ALPHA_RGBA,multiplyChannels:0,uvTransform:DEFAULT_UV_TRANSFORM}),null):this._renderPass.renderScreenSpace(e,this.getCopyMaterial({texture:null===(s=this._gBufferRenderTarget)||void 0===s?void 0:s.depthBufferTexture,blending:NoBlending,colorTransform:RED_TRANSFORM,colorBase:ALPHA_RGBA,multiplyChannels:0,uvTransform:DEFAULT_UV_TRANSFORM}),null);break;case"ssao":this._renderPass.renderScreenSpace(e,this.getCopyMaterial({texture:this._shadowAndAoPass.shadowAndAoRenderTargets.passRenderTarget.texture,blending:NoBlending,colorTransform:GRAYSCALE_TRANSFORM,colorBase:ZERO_RGBA,multiplyChannels:0,uvTransform:DEFAULT_UV_TRANSFORM}),null);break;case"ssaodenoise":this._renderPass.renderScreenSpace(e,this.getCopyMaterial({texture:this._shadowAndAoPass.denoiseRenderTargetTexture,blending:NoBlending,colorTransform:GRAYSCALE_TRANSFORM,colorBase:ZERO_RGBA,multiplyChannels:0,uvTransform:DEFAULT_UV_TRANSFORM}),null);break;case"shadowmap":this._renderPass.renderScreenSpace(e,this.getCopyMaterial({texture:this._screenSpaceShadow.shadowTexture,blending:NoBlending,colorTransform:GRAYSCALE_TRANSFORM,colorBase:ZERO_RGBA,multiplyChannels:0,uvTransform:DEFAULT_UV_TRANSFORM}),null);break;case"shadow":this._renderPass.renderScreenSpace(e,this.getCopyMaterial({texture:this._shadowAndAoPass.shadowAndAoRenderTargets.passRenderTarget.texture,blending:NoBlending,colorTransform:ShadowAndAoPass.shadowTransform,colorBase:ZERO_RGBA,multiplyChannels:0,uvTransform:DEFAULT_UV_TRANSFORM}),null);break;case"shadowblur":this._renderPass.renderScreenSpace(e,this.getCopyMaterial({texture:this._shadowAndAoPass.denoiseRenderTargetTexture,blending:NoBlending,colorTransform:ShadowAndAoPass.shadowTransform,colorBase:ZERO_RGBA,multiplyChannels:0,uvTransform:DEFAULT_UV_TRANSFORM}),null);break;case"shadowfadein":this._renderPass.renderScreenSpace(e,this.getCopyMaterial({texture:this._shadowAndAoPass.fadeRenderTarget.texture,blending:NoBlending,colorTransform:ShadowAndAoPass.shadowTransform,colorBase:ZERO_RGBA,multiplyChannels:0,uvTransform:DEFAULT_UV_TRANSFORM}),null);break;case"shadowandao":this._renderPass.renderScreenSpace(e,this.getCopyMaterial({texture:this._shadowAndAoPass.denoiseRenderTargetTexture,blending:NoBlending,colorTransform:interpolationMatrix(this._shadowAndAoPass.parameters.aoIntensity,this._shadowAndAoPass.parameters.shadowIntensity,0,1),colorBase:ZERO_RGBA,multiplyChannels:1,uvTransform:DEFAULT_UV_TRANSFORM}),null);break;case"groundreflection":this._renderPass.renderScreenSpace(e,this.getCopyMaterial({texture:this._groundReflectionPass.reflectionRenderTarget.texture,blending:NoBlending,colorTransform:DEFAULT_TRANSFORM,colorBase:ZERO_RGBA,multiplyChannels:0,uvTransform:FLIP_Y_UV_TRANSFORM}),null);break;case"bakedgroundshadow":this._renderPass.renderScreenSpace(e,this.getCopyMaterial({texture:this._bakedGroundContactShadow.renderTarget.texture,blending:NoBlending,colorTransform:DEFAULT_TRANSFORM,colorBase:ZERO_RGBA,multiplyChannels:0,uvTransform:DEFAULT_UV_TRANSFORM}),null);break;case"environmentmap":this._environmentMapDecodeMaterial.setSourceTexture(t.environment),this._renderPass.renderScreenSpace(e,this._environmentMapDecodeMaterial,null);break;case"lightsourcedetection":if(null===(l=t.userData)||void 0===l?void 0:l.environmentDefinition){const n=this._sceneRenderer.width/this._sceneRenderer.height,r=new OrthographicCamera(-1,1,1/n,-1/n,-1,1),a=null===(h=t.userData)||void 0===h?void 0:h.environmentDefinition.createDebugScene(e,t);a.background=new Color$1(16777215),e.render(a,r)}}}}var QualityLevel;!function(e){e[e.HIGHEST=0]="HIGHEST",e[e.HIGH=1]="HIGH",e[e.MEDIUM=2]="MEDIUM",e[e.LOW=3]="LOW"}(QualityLevel||(QualityLevel={}));class SceneRenderer{constructor(e,t,n){this.debugOutput="off",this._prevDebugOutput="off",this.outputColorSpace="",this.toneMapping="",this.environmentLights=!1,this.movingCamera=!1,this.groundLevel=0,this.uiInteractionMode=!1,this._noUpdateNeededCount=0,this._cameraUpdate=new CameraUpdate,this.width=0,this.height=0,this._maxSamples=1,this._cameraChanged=!0,this.boundingVolume=new SceneVolume,this._boundingVolumeSet=!1,this.renderCacheManager=new RenderCacheManager,this._renderPass=new RenderPass,this.selectedObjects=[],this.groundGroup=new Group,this._qualityLevel=QualityLevel.HIGHEST,this._qualityMap=new Map,this.width=t,this.height=n,this._maxSamples=e.capabilities.maxSamples,this.renderer=e,this.renderCacheManager.registerCache("inivisibleGround",new VisibilityRenderCache(e=>e===this.groundGroup)),this.renderCacheManager.registerCache("debug",new VisibilityRenderCache),this.renderCacheManager.registerCache("floorDepthWrite",new DepthWriteRenderCache(e=>{var t;return null===(t=e.userData)||void 0===t?void 0:t.isFloor})),this.gBufferRenderTarget=new GBufferRenderTargets(this.renderCacheManager,{shared:!0,capabilities:e.capabilities,width:this.width,height:this.height,samples:1,_renderPass:this._renderPass,textureFilter:NearestFilter}),this.shadowAndAoPass=new ShadowAndAoPass(this.width,this.height,1,{gBufferRenderTarget:this.gBufferRenderTarget}),this.screenSpaceShadow=new ScreenSpaceShadowMap(this.renderCacheManager,new Vector2(this.width,this.height),{samples:this._maxSamples,alwaysUpdate:!1}),this.groundReflectionPass=new GroundReflectionPass(this.width,this.height,{_renderPass:this._renderPass}),this.bakedGroundContactShadow=new BakedGroundContactShadow(this.renderer,this.groundGroup,{_renderPass:this._renderPass,renderCacheManager:this.renderCacheManager}),this.groundGroup.rotateX(-Math.PI/2),this.outlineRenderer=new OutLineRenderer(null,this.width,this.height,{gBufferRenderTarget:this.gBufferRenderTarget}),this.parameters={gBufferRenderTargetParameters:this.gBufferRenderTarget.parameters,bakedGroundContactShadowParameters:this.bakedGroundContactShadow.parameters,screenSpaceShadowMapParameters:this.screenSpaceShadow.parameters,shAndAoPassParameters:this.shadowAndAoPass.parameters,groundReflectionParameters:this.groundReflectionPass.parameters,outlineParameters:this.outlineRenderer.parameters,effectSuspendFrames:0,effectFadeInFrames:0,suspendGroundReflection:!1,shadowOnCameraChange:ShadowBlurType.OFF},this._addEventListeners(this.renderer)}_addEventListeners(e){e.domElement.addEventListener("webglcontextlost",()=>{}),e.domElement.addEventListener("webglcontextrestored",()=>{this._forceEnvironmentMapUpdate(this.renderer)})}dispose(){var e,t;null===(e=this._debugPass)||void 0===e||e.dispose(),null===(t=this._copyMaterial)||void 0===t||t.dispose(),this.gBufferRenderTarget.dispose(),this.screenSpaceShadow.dispose(),this.shadowAndAoPass.dispose(),this.outlineRenderer.dispose(),this.renderer.dispose()}setSize(e,t){this.width=e,this.height=t,this.gBufferRenderTarget.setSize(e,t),this.screenSpaceShadow.setSize(e,t),this.shadowAndAoPass.setSize(e,t),this.outlineRenderer.setSize(e,t),this.groundReflectionPass.setSize(e,t),this.renderer.setSize(e,t)}getQualityLevel(){return this._qualityLevel}setQualityLevel(e){this._qualityLevel!==e&&(this._qualityMap.has(this._qualityLevel)&&(this._qualityLevel=e),this.applyCurrentParameters())}setQualityMap(e){this._qualityMap=e,this.applyCurrentParameters()}applyCurrentParameters(){this._qualityMap.has(this._qualityLevel)&&(this.updateParameters(this._qualityMap.get(this._qualityLevel)),this.bakedGroundContactShadow.applyParameters()),this.uiInteractionMode&&this.updateParameters({groundReflectionParameters:{enabled:!1}})}clearCache(){this.renderCacheManager.clearCache()}forceShadowUpdates(e){this.clearCache(),this.gBufferRenderTarget.needsUpdate=!0,this.screenSpaceShadow.forceShadowUpdate(),this.shadowAndAoPass.needsUpdate=!0,e&&(this.bakedGroundContactShadow.needsUpdate=!0)}updateParameters(e){void 0!==e.shAndAoPassParameters&&this.shadowAndAoPass.updateParameters(e.shAndAoPassParameters),void 0!==e.effectParameters&&this.shadowAndAoPass.updateParameters({effectParameters:e.effectParameters}),void 0!==e.bakedGroundContactShadowParameters&&this.bakedGroundContactShadow.updateParameters(e.bakedGroundContactShadowParameters),void 0!==e.screenSpaceShadowMapParameters&&this.screenSpaceShadow.updateParameters(e.screenSpaceShadowMapParameters),void 0!==e.groundReflectionParameters&&this.groundReflectionPass.updateParameters(e.groundReflectionParameters),void 0!==e.outlineParameters&&this.outlineRenderer.updateParameters(e.outlineParameters),void 0!==e.effectSuspendFrames&&(this.parameters.effectSuspendFrames=e.effectSuspendFrames),void 0!==e.effectFadeInFrames&&(this.parameters.effectFadeInFrames=e.effectFadeInFrames),void 0!==e.suspendGroundReflection&&(this.parameters.suspendGroundReflection=e.suspendGroundReflection),void 0!==e.shadowOnCameraChange&&(this.parameters.shadowOnCameraChange=e.shadowOnCameraChange)}addRectAreaLight(e,t){this.environmentLights=!1,this.screenSpaceShadow.addRectAreaLight(e,t),this.shadowAndAoPass.needsUpdate=!0}updateRectAreaLights(e,t){e.length>0&&(this.environmentLights=!1),this.screenSpaceShadow.updateRectAreaLights(e,t),this.shadowAndAoPass.needsUpdate=!0}createShadowFromLightSources(e,t){this.environmentLights=!0,this.screenSpaceShadow.createShadowFromLightSources(e,t),this.shadowAndAoPass.needsUpdate=!0}selectObjects(e){this.selectedObjects=e}updateBounds(e,t){this.renderCacheManager.clearCache(),this._boundingVolumeSet=!0,this.boundingVolume.updateFromBox(e);const n=this.boundingVolume.size,r=(n.x+n.y+n.z)/3,a=Math.min(n.x,n.y,n.z),i=Math.max(n.x,n.y,n.z),o=a<.5?a/.5:n.z>5?n.z/5:1;this.bakedGroundContactShadow.setScale(t?r:o,r),this.groundReflectionPass.updateBounds(this.groundLevel,Math.min(1,i)),this.screenSpaceShadow.updateBounds(this.boundingVolume,r),this.shadowAndAoPass.updateBounds(this.boundingVolume,t?r:Math.min(1,2*i))}updateNearAndFarPlaneOfPerspectiveCamera(e,t){const n=this.boundingVolume.getNearAndFarForPerspectiveCamera(e.position,3);e.near=Math.max(1e-5,.9*n[0]),e.far=Math.max(null!=t?t:e.near,n[1]),e.updateProjectionMatrix()}_setRenderState(e,t){var n;const r=this.debugOutput!==this._prevDebugOutput;this._prevDebugOutput=this.debugOutput,this.screenSpaceShadow.parameters.alwaysUpdate=this.shadowAndAoPass.parameters.alwaysUpdate,this._cameraChanged=this._cameraUpdate.changed(t),(n=this.gBufferRenderTarget).needsUpdate||(n.needsUpdate=this._cameraChanged||r)}_forceEnvironmentMapUpdate(e){const t=e.userData;if(null==t?void 0:t.environmentTexture){const e=t.environmentTexture;t.environmentTexture=void 0,e.dispose()}}_updateEnvironment(e,t){var n,r;if(!(null===(n=t.userData)||void 0===n?void 0:n.environmentDefinition))return;e.userData||(e.userData={});const a=e.userData;if(a&&((null===(r=t.userData)||void 0===r?void 0:r.environmentDefinition.needsUpdate)||!a.environmentTexture||a.environmentDefinition!==t.userData.environmentDefinition)){const n=t.userData.environmentDefinition;if(a.environmentDefinition=n,a.environmentTexture=n.createNewEnvironment(e),t.userData.shadowFromEnvironment){const e=n.maxNoOfLightSources;void 0!==e&&(this.screenSpaceShadow.parameters.maximumNumberOfLightSources=e),this.createShadowFromLightSources(t,n.lightSources)}}t.environment=null==a?void 0:a.environmentTexture,t.userData.showEnvironmentBackground?t.background=t.environment:t.background===t.environment&&(t.background=null)}render(e,t){e.add(this.groundGroup),this._setRenderState(e,t),this._updateEnvironment(this.renderer,e),this.outlineRenderer.updateOutline(e,t,this.movingCamera?[]:this.selectedObjects),this.renderer.setRenderTarget(null),this.debugOutput&&""!==this.debugOutput&&"off"!==this.debugOutput?this._renderDebug(this.renderer,e,t):(this.renderPreRenderPasses(this.renderer,e,t),this._renderScene(this.renderer,e,t),this.renderPostProcessingEffects(this.renderer,e,t)),e.remove(this.groundGroup)}_renderDebug(e,t,n){var r;this._debugPass=null!==(r=this._debugPass)&&void 0!==r?r:new DebugPass(this),this._debugPass.render((e,t,n)=>this.renderPreRenderPasses(e,t,n),(e,t,n)=>this._renderScene(e,t,n),(e,t,n)=>this.renderPostProcessingEffects(e,t,n),e,t,n,this.debugOutput)}renderPreRenderPasses(e,t,n){this._renderGroundContactShadow(t)}_renderScene(e,t,n){this.renderCacheManager.onBeforeRender("floorDepthWrite",t),this.bakedGroundContactShadow.setGroundVisibility(!0,n),e.render(t,n),this.bakedGroundContactShadow.setGroundVisibility(!1,n),this.renderCacheManager.onAfterRender("floorDepthWrite")}renderPostProcessingEffects(e,t,n){this.renderShadowAndAo(e,t,n),this._renderOutline()}_renderGroundContactShadow(e){this.bakedGroundContactShadow.needsUpdate&&this.bakedGroundContactShadow.updateBounds(this.boundingVolume,this.groundLevel),this.bakedGroundContactShadow.render(e)}renderShadowAndAo(e,t,n){const r=this._evaluateIfShadowAndAoUpdateIsNeeded(n);if(r.needsUpdate||r.shadowOnCameraChange!==ShadowBlurType.OFF){if(!this.parameters.suspendGroundReflection||r.needsUpdate){const a=this.parameters.suspendGroundReflection?r.intensityScale:1;this._renderGroundReflection(e,t,n,a)}this.gBufferRenderTarget.needsUpdate=r.needsUpdate||r.shadowOnCameraChange===ShadowBlurType.POISSON,this._renderEffectsWithGround(e,t,n),this._renderEffectsWithoutGround(e,t,n),this.shadowAndAoPass.render(e,t,n,this.screenSpaceShadow.shadowTexture,r.needsUpdate?ShadowBlurType.FULL:r.shadowOnCameraChange,r.shadowOnCameraChange,1-r.intensityScale)}}_evaluateIfShadowAndAoUpdateIsNeeded(e){const t=this.shadowAndAoPass.parameters.alwaysUpdate||this.screenSpaceShadow.needsUpdate||this.screenSpaceShadow.shadowTypeNeedsUpdate;let n=(this.shadowAndAoPass.parameters.enabled||this.groundReflectionPass.parameters.enabled)&&(0===this.parameters.effectSuspendFrames||this._cameraChanged);n&&(this._noUpdateNeededCount=0);let r=1;return!t&&this.parameters.effectSuspendFrames>0&&(this._noUpdateNeededCount++,n=this._noUpdateNeededCount>=this.parameters.effectSuspendFrames,r=Math.max(0,Math.min(1,(this._noUpdateNeededCount-this.parameters.effectSuspendFrames)/this.parameters.effectFadeInFrames))),n=t||n,{needsUpdate:n,shadowOnCameraChange:!n||r<.99?this.parameters.shadowOnCameraChange:ShadowBlurType.OFF,intensityScale:r}}_renderGroundReflection(e,t,n,r=1){this.groundReflectionPass.parameters.enabled&&this.renderCacheManager.render("inivisibleGround",t,()=>{this.groundReflectionPass.render(e,t,n,r)})}_renderEffectsWithGround(e,t,n){const r=this._boundingVolumeSet&&this.shadowAndAoPass.parameters.aoOnGround,a=this.shadowAndAoPass.parameters.shadowIntensity>0&&this._boundingVolumeSet&&this.shadowAndAoPass.parameters.shadowOnGround,i=this.bakedGroundContactShadow.shadowGroundPlane;if(r){const r=null===this.bakedGroundContactShadow.parameters.hardLayers;r&&i.setDepthWrite(!0),this.gBufferRenderTarget.render(e,t,n),r&&i.setDepthWrite(!1)}a&&(i.setReceiveShadow(!0),this.screenSpaceShadow.renderShadowMap(e,t,n),i.setReceiveShadow(!1))}_renderEffectsWithoutGround(e,t,n){const r=!this._boundingVolumeSet||!this.shadowAndAoPass.parameters.aoOnGround,a=this.shadowAndAoPass.parameters.shadowIntensity>0&&(!this._boundingVolumeSet||!this.shadowAndAoPass.parameters.shadowOnGround);(r||a)&&this.renderCacheManager.render("inivisibleGround",t,()=>{r&&this.gBufferRenderTarget.render(e,t,n),a&&this.screenSpaceShadow.renderShadowMap(e,t,n)})}_renderOutline(){if(this.outlineRenderer.outlinePassActivated&&this.outlineRenderer.outlinePass){const e=this.renderer.getClearColor(new Color$1),t=this.renderer.getClearAlpha();"outline"===this.debugOutput&&(this.renderer.setClearColor(0,255),this.renderer.clear(!0,!1,!1)),this.outlineRenderer.outlinePass.renderToScreen=!1,this.outlineRenderer.outlinePass.render(this.renderer,null,null,0,!1),"outline"===this.debugOutput&&this.renderer.setClearColor(e,t)}}}class SceneRendererGUI{constructor(e){this._qualityLevel="",this._ambientOcclusionType="",this._sceneRenderer=e}addGUI(e,t){this._addRepresentationalGUI(e,t),this._addDebugGUI(e,t);const n=e.addFolder("Shadow type");this._addShadowTypeGUI(n,t);const r=e.addFolder("Shadow and Ambient Occlusion");this._addShadowAndAoGUI(r,t);const a=e.addFolder("Ground Reflection");this._addGroundReflectionGUI(a,t);const i=e.addFolder("Baked Ground Contact Shadow");this._addBakedGroundContactShadowGUI(i,t);const o=e.addFolder("Outline");this._addOutlineGUI(o,t)}_addRepresentationalGUI(e,t){const n=new Map([["LinearSRGBColorSpace",LinearSRGBColorSpace],["SRGBColorSpace",SRGBColorSpace]]),r=[];n.forEach((e,t)=>{r.push(t),this._sceneRenderer.renderer.outputColorSpace===e&&(this._sceneRenderer.outputColorSpace=t)}),e.add(this._sceneRenderer,"outputColorSpace",r).onChange(e=>{var r;n.has(e)&&(this._sceneRenderer.renderer.outputColorSpace=null!==(r=n.get(e))&&void 0!==r?r:SRGBColorSpace,t())});const a=new Map([["NoToneMapping",NoToneMapping],["LinearToneMapping",LinearToneMapping],["ReinhardToneMapping",ReinhardToneMapping],["CineonToneMapping",CineonToneMapping],["ACESFilmicToneMapping",ACESFilmicToneMapping]]),i=[];a.forEach((e,t)=>{i.push(t),this._sceneRenderer.renderer.toneMapping===e&&(this._sceneRenderer.toneMapping=t)}),e.add(this._sceneRenderer,"toneMapping",i).onChange(e=>{var n;a.has(e)&&(this._sceneRenderer.renderer.toneMapping=null!==(n=a.get(e))&&void 0!==n?n:NoToneMapping,t())})}_addDebugGUI(e,t){const n=new Map([["HIGHEST",QualityLevel.HIGHEST],["HIGH",QualityLevel.HIGH],["MEDIUM",QualityLevel.MEDIUM],["LOW",QualityLevel.LOW]]),r=[];n.forEach((e,t)=>r.push(t)),e.add(this,"_qualityLevel",r).onChange(e=>{var t;n.has(e)&&this._sceneRenderer.setQualityLevel(null!==(t=n.get(e))&&void 0!==t?t:QualityLevel.HIGHEST)}),e.add(this._sceneRenderer,"debugOutput",{"off ":"off","grayscale (no textures)":"grayscale","color buffer":"color","linear depth":"lineardepth","g-buffer normal vector":"g-normal","g-buffer depth":"g-depth","AO pure":"ssao","AO denoised":"ssaodenoise","shadow map":"shadowmap","shadow Monte Carlo":"shadow","shadow blur":"shadowblur","shadow fade in":"shadowfadein","shadow and AO":"shadowandao","ground reflection":"groundreflection","baked ground shadow":"bakedgroundshadow","selection outline":"outline","environment map":"environmentmap","light source detection":"lightsourcedetection"}).onChange(()=>t())}_addShadowTypeGUI(e,t){const n=this._sceneRenderer.screenSpaceShadow.shadowConfiguration,r=[];n.types.forEach((e,t)=>{r.push(t)});const a=()=>{this._sceneRenderer.screenSpaceShadow.needsUpdate=!0,this._sceneRenderer.screenSpaceShadow.shadowTypeNeedsUpdate=!0,this._sceneRenderer.shadowAndAoPass.needsUpdate=!0,t()};e.add(n,"shadowType",r).onChange(e=>{this._sceneRenderer.screenSpaceShadow.switchType(e)&&(i.object=n.currentConfiguration,o.object=n.currentConfiguration,s.object=n.currentConfiguration,i.updateDisplay(),o.updateDisplay(),s.updateDisplay(),a())});const i=e.add(n.currentConfiguration,"bias",-.001,.001,1e-5).onChange(()=>a()),o=e.add(n.currentConfiguration,"normalBias",-.05,.05).onChange(()=>a()),s=e.add(n.currentConfiguration,"radius",0,100).onChange(()=>a())}_addShadowAndAoGUI(e,t){const n=()=>{this._sceneRenderer.gBufferRenderTarget.needsUpdate=!0,this._sceneRenderer.screenSpaceShadow.needsUpdate=!0,this._sceneRenderer.shadowAndAoPass.needsUpdate=!0,this._sceneRenderer.shadowAndAoPass.shadowAndAoRenderTargets.parametersNeedsUpdate=!0,t()},r=this._sceneRenderer.shadowAndAoPass.parameters,a=r.shAndAo,i=this._sceneRenderer.screenSpaceShadow.parameters,o=r.hbao,s=r.poissonDenoise;e.add(r,"enabled").onChange(()=>n());const l=new Map([["none",AmbientOcclusionType.NONE],["SSAO",AmbientOcclusionType.SSAO],["HBAO",AmbientOcclusionType.HBAO]]),h=Array.from(l.keys());l.forEach((e,t)=>{e===r.aoType&&(this._ambientOcclusionType=t)}),e.add(this,"_ambientOcclusionType",h).onChange(e=>{var t;l.has(e)&&(r.aoType=null!==(t=l.get(e))&&void 0!==t?t:AmbientOcclusionType.SSAO,n())}),e.add(r,"aoIntensity",0,1).onChange(()=>{n()}),e.add(r,"aoOnGround").onChange(()=>{n()}),e.add(r,"shadowOnGround").onChange(()=>{n()}),e.add(r,"shadowIntensity",0,1).onChange(()=>n()),e.add(r,"alwaysUpdate").onChange(()=>n());const d=e.addFolder("Shadow and Monte Carlo integration");d.add(i,"maximumNumberOfLightSources").onChange(()=>n()),d.add(i,"directionalDependency",0,1,.01).onChange(()=>n()),d.add(i,"directionalExponent",0,2,.01).onChange(()=>n()),d.add(i,"groundContainment",0,1,.01).onChange(()=>n()),d.add(i,"fadeOutDistance",0,5,.01).onChange(()=>n()),d.add(i,"fadeOutBlur",0,100).onChange(()=>n()),d.add(a,"shadowRadius",.001,.5).onChange(()=>n());const c=e.addFolder("SSAO");c.add(a,"aoFadeout",0,1).onChange(()=>n()),c.add(a,"aoKernelRadius",.001,1).onChange(()=>n()),c.add(a,"aoDepthBias",1e-4,.01).onChange(()=>n()),c.add(a,"aoMaxDistance",.01,1).onChange(()=>n()),c.add(a,"aoMaxDepth",.9,1).onChange(()=>n());const u=e.addFolder("HBAO");u.add(o,"samples",1,64,1).onChange(()=>n()),u.add(o,"radius",.1,10,.01).onChange(()=>n()),u.add(o,"distanceExponent",.1,5,.1).onChange(()=>n()),u.add(o,"bias",.001,.1,.001).onChange(()=>n());const p=e.addFolder("Possion Denoise");p.add(s,"iterations",0,3,1).onChange(()=>n()),p.add(s,"radius",0,32,1).onChange(()=>n()),p.add(s,"rings",0,16,.125).onChange(()=>n()),p.add(s,"samples",0,32,1).onChange(()=>n()),p.add(s,"lumaPhi",0,20,.001).onChange(()=>n()),p.add(s,"depthPhi",0,20,.001).onChange(()=>n()),p.add(s,"normalPhi",0,20,.001).onChange(()=>n())}_addGroundReflectionGUI(e,t){const n=this._sceneRenderer.parameters.groundReflectionParameters;e.add(n,"enabled"),e.add(n,"intensity",0,1).onChange(()=>t()),e.add(n,"fadeOutDistance",0,4).onChange(()=>t()),e.add(n,"fadeOutExponent",.1,10).onChange(()=>t()),e.add(n,"brightness",0,2).onChange(()=>t()),e.add(n,"blurHorizontal",0,10).onChange(()=>t()),e.add(n,"blurVertical",0,10).onChange(()=>t())}_addBakedGroundContactShadowGUI(e,t){const n=()=>{this._sceneRenderer.bakedGroundContactShadow.applyParameters(),t()},r=this._sceneRenderer.parameters.bakedGroundContactShadowParameters;e.add(r,"enabled"),e.add(r,"cameraHelper").onChange(()=>n()),e.add(r,"alwaysUpdate"),e.add(r,"fadeIn"),e.add(r,"blurMin",0,.2,.001).onChange(()=>n()),e.add(r,"blurMax",0,.5,.01).onChange(()=>n()),e.add(r,"fadeoutFalloff",0,1,.01).onChange(()=>n()),e.add(r,"fadeoutBias",0,.5).onChange(()=>n()),e.add(r,"opacity",0,1,.01).onChange(()=>n()),e.add(r,"maximumPlaneSize",0,50,1).onChange(()=>n()),e.add(r,"cameraFar",.1,10,.1).onChange(()=>n())}_addOutlineGUI(e,t){const n=()=>{this._sceneRenderer.outlineRenderer.applyParameters(),t()},r=this._sceneRenderer.outlineRenderer.parameters;e.add(r,"enabled"),e.add(r,"edgeStrength",.5,20).onChange(()=>n()),e.add(r,"edgeGlow",0,20).onChange(()=>n()),e.add(r,"edgeThickness",.5,20).onChange(()=>n()),e.add(r,"pulsePeriod",0,5).onChange(()=>n()),e.addColor(r,"visibleEdgeColor").onChange(()=>n()),e.addColor(r,"hiddenEdgeColor").onChange(()=>n())}}const noEffectsSuspension={effectSuspendFrames:0,effectFadeInFrames:0,suspendGroundReflection:!1,shadowOnCameraChange:ShadowBlurType.FULL},partialEffectsSuspension={effectSuspendFrames:5,effectFadeInFrames:5,suspendGroundReflection:!1,shadowOnCameraChange:ShadowBlurType.POISSON},fullEffectsSuspension={effectSuspendFrames:5,effectFadeInFrames:5,suspendGroundReflection:!0,shadowOnCameraChange:ShadowBlurType.HARD},ssaoDenoiseParameters={iterations:1,radius:10,rings:4,lumaPhi:10,depthPhi:12,normalPhi:3.25,samples:16},standaloneConfiguratorQualityLevels=new Map([[QualityLevel.HIGHEST,{...noEffectsSuspension,shAndAoPassParameters:{enabled:!0,aoOnGround:!0,shadowOnGround:!0,poissonDenoise:ssaoDenoiseParameters},groundReflectionParameters:{enabled:!0},bakedGroundContactShadowParameters:{enabled:!1}}],[QualityLevel.HIGH,{...partialEffectsSuspension,shAndAoPassParameters:{enabled:!0,aoOnGround:!0,shadowOnGround:!0,poissonDenoise:ssaoDenoiseParameters},groundReflectionParameters:{enabled:!0},bakedGroundContactShadowParameters:{enabled:!1}}],[QualityLevel.MEDIUM,{...fullEffectsSuspension,shAndAoPassParameters:{enabled:!0,aoOnGround:!0,shadowOnGround:!0,poissonDenoise:ssaoDenoiseParameters},groundReflectionParameters:{enabled:!1},bakedGroundContactShadowParameters:{enabled:!1}}],[QualityLevel.LOW,{shAndAoPassParameters:{enabled:!1,aoOnGround:!1,shadowOnGround:!1},groundReflectionParameters:{enabled:!1},bakedGroundContactShadowParameters:{enabled:!0}}]]),screenSpaceShadowLayers=new Layers;screenSpaceShadowLayers.enable(3);const bakedGroundShadowHardLayers=new Layers;bakedGroundShadowHardLayers.disableAll(),bakedGroundShadowHardLayers.enable(9);const aoConfiguratorParameters={enabled:!0,aoType:AmbientOcclusionType.SSAO,aoIntensity:.5,shadowIntensity:0,aoOnGround:!0,shadowOnGround:!1,poissonDenoise:ssaoDenoiseParameters},aoPlan3dParameters={enabled:!0,aoType:AmbientOcclusionType.HBAO,aoIntensity:.5,shadowIntensity:0,aoOnGround:!0,shadowOnGround:!1,hbao:{samples:16,radius:.5,distanceExponent:2,bias:.01},poissonDenoise:{iterations:1,radius:10,rings:4,lumaPhi:10,depthPhi:2,normalPhi:3.25,samples:16}},aoPlan2dParameters=aoPlan3dParameters,bakedGroundContactConfiguratorParameters={enabled:!0,fadeoutFalloff:.9,blurMax:.1,opacity:.5,hardLayers:null,softLayers:null,polygonOffset:2},bakedGroundContactPlan3dParameters={enabled:!0,fadeoutFalloff:.8,blurMax:.15,opacity:.5,hardLayers:bakedGroundShadowHardLayers,softLayers:null,polygonOffset:-1},bakedGroundContactPlan2dParameters={enabled:!1},plannerConfiguratorQualityLevels=new Map([[QualityLevel.HIGHEST,{...noEffectsSuspension,shAndAoPassParameters:aoConfiguratorParameters,screenSpaceShadowMapParameters:{layers:screenSpaceShadowLayers},groundReflectionParameters:{enabled:!0},bakedGroundContactShadowParameters:bakedGroundContactConfiguratorParameters}],[QualityLevel.HIGH,{...partialEffectsSuspension,shAndAoPassParameters:aoConfiguratorParameters,screenSpaceShadowMapParameters:{layers:screenSpaceShadowLayers},groundReflectionParameters:{enabled:!0},bakedGroundContactShadowParameters:bakedGroundContactConfiguratorParameters}],[QualityLevel.MEDIUM,{...fullEffectsSuspension,shAndAoPassParameters:aoConfiguratorParameters,screenSpaceShadowMapParameters:{layers:screenSpaceShadowLayers},groundReflectionParameters:{enabled:!0},bakedGroundContactShadowParameters:bakedGroundContactConfiguratorParameters}],[QualityLevel.LOW,{shAndAoPassParameters:{enabled:!1,aoOnGround:!1,shadowOnGround:!1},groundReflectionParameters:{enabled:!1},bakedGroundContactShadowParameters:bakedGroundContactConfiguratorParameters}]]),planner3dQualityLevels=new Map([[QualityLevel.HIGHEST,{...noEffectsSuspension,shAndAoPassParameters:aoPlan3dParameters,screenSpaceShadowMapParameters:{layers:screenSpaceShadowLayers},groundReflectionParameters:{enabled:!1},bakedGroundContactShadowParameters:bakedGroundContactPlan3dParameters}],[QualityLevel.HIGH,{...partialEffectsSuspension,shAndAoPassParameters:aoPlan3dParameters,screenSpaceShadowMapParameters:{layers:screenSpaceShadowLayers},groundReflectionParameters:{enabled:!1},bakedGroundContactShadowParameters:bakedGroundContactPlan3dParameters}],[QualityLevel.MEDIUM,{...fullEffectsSuspension,shAndAoPassParameters:aoPlan3dParameters,screenSpaceShadowMapParameters:{layers:screenSpaceShadowLayers},groundReflectionParameters:{enabled:!1},bakedGroundContactShadowParameters:bakedGroundContactPlan3dParameters}],[QualityLevel.LOW,{shAndAoPassParameters:{enabled:!1,aoOnGround:!1,shadowOnGround:!1},groundReflectionParameters:{enabled:!1},bakedGroundContactShadowParameters:bakedGroundContactPlan3dParameters}]]),planner2dQualityLevels=new Map([[QualityLevel.HIGHEST,{...noEffectsSuspension,shAndAoPassParameters:aoPlan2dParameters,screenSpaceShadowMapParameters:{layers:screenSpaceShadowLayers},groundReflectionParameters:{enabled:!1},bakedGroundContactShadowParameters:bakedGroundContactPlan2dParameters}],[QualityLevel.HIGH,{...partialEffectsSuspension,shAndAoPassParameters:aoPlan2dParameters,screenSpaceShadowMapParameters:{layers:screenSpaceShadowLayers},groundReflectionParameters:{enabled:!1},bakedGroundContactShadowParameters:bakedGroundContactPlan2dParameters}],[QualityLevel.MEDIUM,{...fullEffectsSuspension,shAndAoPassParameters:aoPlan2dParameters,screenSpaceShadowMapParameters:{layers:screenSpaceShadowLayers},groundReflectionParameters:{enabled:!1},bakedGroundContactShadowParameters:bakedGroundContactPlan2dParameters}],[QualityLevel.LOW,{shAndAoPassParameters:{enabled:!1,aoOnGround:!1,shadowOnGround:!1},groundReflectionParameters:{enabled:!1},bakedGroundContactShadowParameters:bakedGroundContactPlan2dParameters}]]);class FpsCounter{constructor(){this._index=0,this._prevTime=0,this._frames=0,this._fps=-1,this._fpsList=Array(2).fill(0),this._prevTime=(performance||Date).now(),this.reset()}update(){this._frames++;const e=(performance||Date).now();e>=this._prevTime+1e3&&(this._fpsList[this._index%2]=1e3*this._frames/(e-this._prevTime),this._index>=2&&(this._fps=this._fpsList.reduce((e,t)=>e+t)/this._fpsList.length),this._prevTime=e,this._frames=0,this._index++)}start(){this._prevTime=(performance||Date).now(),this._frames=0}reset(){this._fps=-1,this._fpsList=Array(2).fill(0),this._index=0}getFps(){return this._fps}}var RenderMode;!function(e){e[e.Mode3D=0]="Mode3D",e[e.Mode2D=1]="Mode2D"}(RenderMode||(RenderMode={}));class RoomleWebGLRenderer{get renderer(){return this._renderer}get screenSpaceShadowParameters(){return this.sceneRenderer.screenSpaceShadow.parameters}get shadowAndAoPassParameters(){return this.sceneRenderer.shadowAndAoPass.parameters}get bakedGroundContactShadowParameters(){return this.sceneRenderer.bakedGroundContactShadow.parameters}get groundReflectionParameters(){return this.sceneRenderer.groundReflectionPass.parameters}get outlineParameters(){return this.sceneRenderer.outlineRenderer.parameters}constructor(e,t,n){this.configuratorMode=!0,this.uiInteractionMode=!0,this._renderer=e,this.sceneRenderer=new SceneRenderer(this._renderer,t,n),this.outlineParameters.enabled=!0,this.outlineParameters.edgeStrength=2,this.outlineParameters.edgeGlow=1,this.outlineParameters.edgeThickness=2,this.outlineParameters.pulsePeriod=0,this.outlineParameters.usePatternTexture=!1,this.outlineParameters.visibleEdgeColor=16777215,this.outlineParameters.hiddenEdgeColor=16777215,RoomleWebGLRenderer.enableRectAreaLightShadow&&(DynamicLightSettingLoader.rectAreaLightReplacement=!1,DynamicLightSettingLoader.rectAreaLightLoadingListener=this.loadRectAreLight),this.sceneRenderer.setQualityLevel(QualityLevel.HIGHEST),this.SceneRendererGUI=new SceneRendererGUI(this.sceneRenderer)}dispose(){this.sceneRenderer.dispose()}setSize(e,t){this.sceneRenderer.setSize(e,t)}setAutoQuality(e){!this._fpsCounter&&e?this._fpsCounter=new FpsCounter:this._fpsCounter&&!e&&(this._fpsCounter=null)}setQualityLevel(e){this.sceneRenderer.setQualityLevel(e)}setQualityMap(e){this.sceneRenderer.setQualityMap(e)}enableUiInteractionMode(){this.sceneRenderer.uiInteractionMode=!0,this.sceneRenderer.applyCurrentParameters()}disableUiInteractionMode(){this.sceneRenderer.uiInteractionMode=!1,this.sceneRenderer.applyCurrentParameters()}loadRectAreLight(e){RoomleWebGLRenderer.rectAreaLightsNeedsUpdate=!0}updateRectAreaLight(e){let t=[];e.traverse(e=>{e instanceof RectAreaLight&&t.push(e)}),this.sceneRenderer.updateRectAreaLights(t,e),RoomleWebGLRenderer.rectAreaLightsNeedsUpdate=!1}clearCache(){this.sceneRenderer.clearCache()}forceShadowUpdates(e){this.sceneRenderer.forceShadowUpdates(e)}switchToConfigurator(){this.configuratorMode=!0,this.sceneRenderer.setQualityMap(plannerConfiguratorQualityLevels)}switchToPlanner(e){RenderMode.Mode3D,this.configuratorMode=!1,e===RenderMode.Mode3D?this.sceneRenderer.setQualityMap(planner3dQualityLevels):this.sceneRenderer.setQualityMap(planner2dQualityLevels)}updateBounds(e){this.sceneRenderer.updateBounds(e,!1)}updateEnvironment(e,t=!1){e&&this.updateBounds(e)}movingCameraStarts(){var e;this.sceneRenderer.movingCamera=!0,null===(e=this._fpsCounter)||void 0===e||e.start()}movingCameraStops(){this.sceneRenderer.movingCamera=!1}highlightObjects(e){this.sceneRenderer.selectObjects(e)}render(e,t){var n;RoomleWebGLRenderer.rectAreaLightsNeedsUpdate&&this.updateRectAreaLight(e),t.updateMatrixWorld(),(t instanceof PerspectiveCamera||t instanceof OrthographicCamera)&&t.updateProjectionMatrix();const r=RoomleWebGLRenderer.updateNearAndFarPlaneOfPerspectiveCamera?this.createRenderCamera(t):t;if(this.sceneRenderer.render(e,r),this.sceneRenderer.movingCamera&&this._fpsCounter){null===(n=this._fpsCounter)||void 0===n||n.update();const e=this.sceneRenderer.getQualityLevel(),t=this._fpsCounter.getFps();t>0&&t<30&&e<3&&(this.sceneRenderer.setQualityLevel(e+1),this._fpsCounter.reset())}}createRenderCamera(e){const t=e.clone();return this.configuratorMode&&t instanceof PerspectiveCamera&&(this.sceneRenderer.updateNearAndFarPlaneOfPerspectiveCamera(t,120),t.updateProjectionMatrix()),t}showGUI(e){const t=getGUI();this.SceneRendererGUI.addGUI(t,e)}clear(){this.renderer.clear()}}RoomleWebGLRenderer.enableRectAreaLightShadow=!0,RoomleWebGLRenderer.rectAreaLightsNeedsUpdate=!1,RoomleWebGLRenderer.updateNearAndFarPlaneOfPerspectiveCamera=!1;class ImageRenderer{_getRoomleRenderer(e=!1){if(!this._roomleRenderer){const t=new WebGLRenderer({antialias:!e,alpha:!0});t.outputColorSpace=SRGBColorSpace,t.autoClear=!0,t.setSize(1024,1024),t.outputColorSpace=SRGBColorSpace,t.autoClear=!1,t.shadowMap.enabled=!0,t.shadowMap.type=PCFSoftShadowMap,this._roomleRenderer=new RoomleWebGLRenderer(t,1024,1024),this._roomleRenderer.setQualityMap(standaloneConfiguratorQualityLevels),this._roomleRenderer.setSize(1024,1024)}return this._roomleRenderer}switchToPlannerSettings(){this._getRoomleRenderer().switchToPlanner(RenderMode.Mode3D)}switchToConfiguratorSettings(){this._getRoomleRenderer().switchToConfigurator()}static getCameraTargetForBBox(e,t=0){if(!e){const e=new Vector3;return{center:e,bounds:e,diagonal:0}}const n=e.getSize(new Vector3);return n.addScalar(t),{center:e.getCenter(new Vector3),bounds:n,diagonal:Math.sqrt(Math.pow(n.x,2)+Math.pow(n.y,2)+Math.pow(n.z,2))}}preparePerspectiveImage(e,t,n,r,a={},i=0,o=!1){return new Promise(s=>{const{size:l=1024,showDimensions:h}=a,d=this._getRoomleRenderer(o);d.setSize(l,l);const c=e.fog?e.fog.clone():null,u=e.background?e.background.clone():null;e.background=null,e.fog=null,n.layers.disable(2),n.layers.disable(6),n.layers.disable(5),h?n.layers.enable(8):n.layers.disable(8);const p=-30+toDegrees(i);ImageRenderer.placeCameraForPerspectiveImage(n,r,-20,p);const m=this._render(d,e,t,n,o);n.layers.enable(2),n.layers.enable(6),n.layers.enable(5),e.background=u,e.fog=c,s({image:m,width:l,height:l,blob:null})})}renderPerspectiveImage(e,t,n,r){return new Promise(a=>{r||(r=1024);const i=this._getRoomleRenderer();i.setSize(r,r);const o=e.fog?e.fog.clone():null,s=e.background?e.background.clone():null;e.background=null,e.fog=null,t.layers.disable(2),t.layers.disable(6),t.layers.disable(5),n?ImageRenderer.placeCameraForPerspectiveImage(t,n,-20,-30):(t.aspect=1,t.updateProjectionMatrix());const l=this._render(i,e,null,t);t.layers.enable(2),t.layers.enable(6),t.layers.enable(5),e.background=s,e.fog=o,a({image:l,width:r,height:r,blob:null})})}static placeCameraForPerspectiveImage(e,t,n,r){e.far=1e3,e.fov=15,e.aspect=1,e.position.copy(t.center),e.rotation.set(0,0,0),e.rotateY(toRadiant(r)),e.rotateX(toRadiant(n)),e.translateZ(3.8*t.diagonal),e.updateProjectionMatrix()}prepareTopImage(e,t,n,r={}){const{showDimensions:a=!1}=r;return new Promise(r=>{const i=this._getRoomleRenderer();let o=new OrthographicCamera(-n.bounds.x/2,n.bounds.x/2,n.bounds.z/2,-n.bounds.z/2,.5);o.position.copy(n.center),o.rotateX(toRadiant(-90)),o.translateZ(n.bounds.y+1),o.far=o.position.y+.5,o.layers.mask=65535;let s=200*n.bounds.x,l=200*n.bounds.z;if(s>4096||l>4096){let e=0;s>4096?e=s/4096:l>4096&&(e=l/4096),s/=e,l/=e}i.setSize(s,l);let h=e.fog?e.fog.clone():null,d=e.background?e.background.clone():null;e.background=null,e.fog=null,o.layers.disable(2),o.layers.disable(6),o.layers.disable(5),a?o.layers.enable(8):o.layers.disable(8);const c=this._render(i,e,t,o);o.layers.enable(2),o.layers.enable(6),o.layers.enable(5),e.background=d,e.fog=h,r({image:c,width:s,height:l,blob:null})})}_render(e,t,n,r,a=!1){a?e.renderer.render(t,r):(e.forceShadowUpdates(!0),e.render(t,r),e.render(t,r)),n&&(e.renderer.autoClear=!1,e.renderer.clearDepth(),e.renderer.render(n,r),e.renderer.autoClear=!0);const i=e.renderer.domElement.toDataURL();return e.clear(),i}}const INJECTABLES=[new DependencyInjectionAssignment("error-handler",class{constructor(){this._listeners={}}_subscribe(e,t){this._listeners[e]||(this._listeners[e]=[]),this._listeners[e].push(t)}subscribe(e,t){this._subscribe(e,t)}dispatch(e,t){if(!this._listeners[e])return;const n=this._listeners[e];let r=n.length;for(let e=0;e<r;e++){const r=n[e];r.apply(r,t)}}unsubscribe(e,t){if(!this._listeners[e])return;const n=this._listeners[e];let r=n.length;for(let e=0;e<r;e++)if(n[e]===t)return n.splice(e,1),r--,void e--}softReject(e,t,n){return this.dispatch(n,[t]),e()}}),new DependencyInjectionAssignment("form-data-util",FormDataUtil),new DependencyInjectionAssignment("hdr-environment-loader",class{constructor(e){this._creator_=e;const t=new Color$1("#DDDDDD");this._environmentMap=((e,t,n,r)=>{const a=new CubeTexture;a.format=RGBAFormat,a.generateMipmaps=!1;for(let r=0;r<6;++r){const i=createColorTexture(e,t,n,1);i.format=a.format,i.type=a.type,i.minFilter=a.minFilter,i.magFilter=a.magFilter,i.generateMipmaps=a.generateMipmaps,i.needsUpdate=!0,a.images[r]=i}return a.needsUpdate=!0,a})(t.r,t.g,t.b)}async loadUrl(e,t){const n=t.toLowerCase();this._environmentMap=n.endsWith(".exr")?await this._loadExr(t):await this._loadRgbe(t),this._environmentMap.mapping=EquirectangularReflectionMapping;const r={url:t,environmentMap:this._environmentMap};return this._envChangedCallback(r),r}_loadExr(e){var t;return this._exrLoader=null!==(t=this._exrLoader)&&void 0!==t?t:new EXRLoader,this._exrLoader.setPath(e.startsWith("http")?"":getAssetPath()),this._exrLoader.loadAsync(e)}_loadRgbe(e){var t;return this._rgbeLoader=null!==(t=this._rgbeLoader)&&void 0!==t?t:new RGBELoader,this._rgbeLoader.setPath(e.startsWith("http")?"":getAssetPath()),this._rgbeLoader.loadAsync(e)}registerEnvironmentChangedCallback(e){this._envChangedCallback=e}}),new DependencyInjectionAssignment("static-item-loader",class{constructor(e){this._gltfLoaderGuard=new AsyncGuard,this._creator_=e,this._initLoaders()}_initLoaders(){this._gltfLoader=new GLTFLoader;const e=new DRACOLoader,t=e._loadLibrary.bind(e._loadLibrary);e._loadLibrary=(e,n)=>{const r=DRACO_LIB_FILES[e];if(!r)throw new Error('Can not load draco dependency "'+e+'" did three.js update DracoLoader lib? Available files'+JSON.stringify(DRACO_LIB_FILES));return t(getAssetPath()+r,n)},e.setDecoderConfig({type:"wasm"}),this._gltfLoader.setDRACOLoader(e),this._gltfLoaderGuard.resolve(this._gltfLoader)}async loadGLB(e,t,n,r,a,i,o,s){return await this._gltfLoaderGuard.wait(),new Promise((l,h)=>{this._gltfLoader.load(e,e=>{l(this._handleGLTFScene("GLB",e,t,n,r,a,i,o))},e=>{s&&s(e.loaded/e.total)},e=>{h(e)})})}async loadGLTF(e,t,n,r,a,i,o,s){return await this._gltfLoaderGuard.wait(),new Promise((l,h)=>{this._gltfLoader.parse(e,null,e=>{l(this._handleGLTFScene("GLTF",e,t,n,r,a,i,o))},e=>{s&&s(e.loaded/e.total)},e=>{h(e)})})}_handleGLTFScene(e,t,n,r,a,i,o,s){if(!t||!t.scene||!t.scene.children||0===t.scene.children.length)return null;n&&t.scene.position.copy(n),r&&(t.scene.rotation.y=r);const l=new Box3;if(l.setFromObject(t.scene),a){const{x:e,y:n,z:r}=l.getSize(new Vector3);let i=new Vector3(a.x/e,a.y/n,a.z/r);t.scene.scale.copy(i)}return i&&t.scene.scale.multiply(i),t.scene.type=e,t.scene.traverse(e=>{if(e instanceof Mesh){if(e.layers.set(3),e.material instanceof MeshStandardMaterial){const t=e.material;if(s&&o&&o>0){let e=new Color$1(o);t.color=e.copySRGBToLinear(e),t.roughness=.5,t.metalness=.1}t.needsUpdate=!0}e.castShadow=!0,e.receiveShadow=!0}}),{boundingBox:l,scene:t.scene}}},0),new DependencyInjectionAssignment("form-data-util",FormDataUtil),new DependencyInjectionAssignment("single-promise-factory",class{constructor(e){this._promises=new Map,this._creator_=e}create(e,t,n){return new Promise((r,a)=>{let i=this._promises.get(e),o=!0;if(!i){const t=new Map;this._promises.set(e,t),i=this._promises.get(e),o=!1}i.get(t)||(i.set(t,[]),o=!1);const s=i.get(t);s.push({resolve:r,reject:a}),i.set(t,s);const l=()=>{i.delete(t),0===i.size&&this._promises.delete(e)};o||new Promise(n).then(e=>{i.get(t).forEach(({resolve:t})=>t(e)),l()},e=>{i.get(t).forEach(({reject:t})=>t(e)),l()})})}},1),new DependencyInjectionAssignment("dynamic-light-setting-loader",DynamicLightSettingLoader),new DependencyInjectionAssignment("network-layer",NetworkLayer),new DependencyInjectionAssignment("local-storage",class{constructor(e){this._context_=e}get _localStorage(){let e=null;try{e=window.localStorage}catch(e){console.error(e)}return e}getItem(e){if(!this._localStorage)return null;const t=this._localStorage.getItem(e);try{return JSON.parse(t)}catch(e){return t}}setItem(e,t){if(this._localStorage)try{const n=JSON.stringify(t);this._localStorage.setItem(e,n)}catch(e){console.error(e)}}}),new DependencyInjectionAssignment("network-layer",NetworkLayer),new DependencyInjectionAssignment("kernel-io",KernelIo,0),new DependencyInjectionAssignment("data-syncer",DataSyncer),new DependencyInjectionAssignment("memory-manager",class{constructor(){this._configurationStringSet=new Set,this._singleLoadCounter=0}loadingConfigurationString(){this._singleLoadCounter+=1}loadingConfiguration(e){this._configurationStringSet.add(e),this._singleLoadCounter+=1}shouldHardReset(){return this._configurationStringSet.size>=15||this._singleLoadCounter>=30}executedHardReset(){this._configurationStringSet.clear(),this._singleLoadCounter=0}}),new DependencyInjectionAssignment("life-cycle-manager",class{constructor(){this._listeners=[]}addEventListener(e){this._listeners.push(e)}removeEventListener(e){const t=this._listeners;let n=t.length;if(n)for(let r=0;r<n;r++)t[r]===e&&(t.splice(r,1),r--,n--)}pause(){this._listeners.forEach(e=>e.pause())}resume(){this._listeners.forEach(e=>e.resume())}destroy(){this._listeners.forEach(e=>e.destroy())}},1),new DependencyInjectionAssignment("local-storage-helper",LocalStorageHelper),new DependencyInjectionAssignment("cache-holder",class{constructor(){this._componentCache=new Map,this._geometryCache=new Map,this._materialCache=new Map}get componentCache(){return this._componentCache}get geometryCache(){return this._geometryCache}get materialCache(){return this._materialCache}clear(){for(const e of this._componentCache.values())disposeObject(e);for(const e of this._materialCache.values())disposeMaterial(e);for(const e of this._geometryCache.values())disposeGeometry(e);this._componentCache.clear(),this._geometryCache.clear(),this._materialCache.clear()}},0),new DependencyInjectionAssignment("kernel-access-callback",class{constructor(e){this._callbackListener=new Set,this._creator_=e}addListener(e){this._callbackListener.add(e)}removeListener(e){this._callbackListener.delete(e)}isReady(){this._callbackListener.forEach(e=>e.isReady())}loadError(e){this._callbackListener.forEach(t=>t.loadError(e))}},1),new DependencyInjectionAssignment("configurator-kernel-access-callback",class{constructor(e){this._callbackListener=new Set,this._creator_=e}addListener(e){this._callbackListener.add(e)}removeListener(e){this._callbackListener.delete(e)}isReady(){this._callbackListener.forEach(e=>e.isReady())}updatePossibleChildren(e,t,n){this._callbackListener.forEach(r=>r.updatePossibleChildren(e,t,n))}updateParameters(e,t,n,r){this._callbackListener.forEach(a=>a.updateParameters(e,t,n,r))}loadError(e){this._callbackListener.forEach(t=>t.loadError(e))}},1),new DependencyInjectionAssignment("configurator-context",class{constructor(){this.planObjectId=0,this.planElementId=0,this.rootComponentId=0,this.dockingRootComponentId=0,this.baseContext=null,this.rootComponentParametersAsGlobal=!1,this.lastLoadedRapiId=null,this.selectedRuntimeComponentIds=[],this.selectionMode="standard"}get selectedRuntimeComponentId(){return this.selectedRuntimeComponentIds.length>0?this.selectedRuntimeComponentIds[0]:null}},1),new DependencyInjectionAssignment("init-data",InitData,1),new DependencyInjectionAssignment("global-init-data",GlobalInitData,0),new DependencyInjectionAssignment("global-callback",GlobalCallback,0),new DependencyInjectionAssignment("dom-helper",DomHelper,1),new DependencyInjectionAssignment("unit-formatter",UnitFormatter,0),new DependencyInjectionAssignment("plugin-system",PluginSystem,1),new DependencyInjectionAssignment("configurator-mesh-generator",ConfiguratorMeshGenerator),new DependencyInjectionAssignment("configurator-input-manager",class extends InputManager{},1),new DependencyInjectionAssignment("selection-handler",class extends EventDispatcher{constructor(){super(...arguments),this._selectionMode="standard",this._selectedComponents=new Map}check(e){"standard"===this._selectionMode&&this._checkStandard(e),"multiselect"===this._selectionMode&&this._checkMulti(e)}cancelSelection(){0!==this._selectedComponents.size&&this._selectedComponents.forEach((e,t)=>{e.deselect(),this._selectedComponents.delete(t),this.dispatchEvent(1,new SelectionHandlerEvent({component:e}))})}_checkStandard(e){this._selectedComponents.has(e.runtimeId)?this.dispatchEvent(0,new SelectionHandlerEvent({component:e,consecutive:!0})):(this._selectedComponents.size>0&&this._selectedComponents.forEach((e,t)=>{this._selectedComponents.delete(t),this.dispatchEvent(1,new SelectionHandlerEvent({component:e,resetCamera:!1}))}),this._selectedComponents.set(e.runtimeId,e),this.dispatchEvent(0,new SelectionHandlerEvent({component:e,consecutive:!1})))}_checkMulti(e){if(this._selectedComponents.has(e.runtimeId))return this._selectedComponents.delete(e.runtimeId),void this.dispatchEvent(1,new SelectionHandlerEvent({component:e,resetCamera:0===this._selectedComponents.size}));this._selectedComponents.set(e.runtimeId,e),this.dispatchEvent(0,new SelectionHandlerEvent({component:e}))}setSelectionMode(e){this._selectionMode=e}getSelectionMode(){return this._selectionMode}hasSelection(){return this._selectedComponents.size>0}getSelectedRuntimeComponentIds(){let e=[];return this._selectedComponents.forEach(t=>e.push(t.runtimeId)),e}isSelected(e){return this._selectedComponents.has(e.runtimeId)}},1),new DependencyInjectionAssignment("component-dimensioning-helper",ComponentDimensioningHelper,1),new DependencyInjectionAssignment("component-dimensioning-helper",ComponentDimensioningHelper,1),new DependencyInjectionAssignment("planner-kernel-access",PlannerKernelAccess),new DependencyInjectionAssignment("planner-mesh-generator",PlannerMeshGenerator,1),new DependencyInjectionAssignment("unit-formatter",UnitFormatter),new DependencyInjectionAssignment("configurator-history",ConfiguratorHistory,1),new DependencyInjectionAssignment("roomle-planner-ui-callback",class extends UiCallback{constructor(e){super(e),this.onItemsLoaded=()=>{},this.onCameraChanged=e=>{},this.onCameraIdle=()=>{},this.onTotalFloorAreaChanged=e=>{},this.onPlanInteractionHandlerCreated=e=>{},this.onPlannerKernelIsReady=e=>{},this.onConfiguratorKernelIsReady=(e,t)=>{},this.onSelectionChange=(e,t,n,r,a)=>{},this.onSelectionCancel=e=>{},this.onPlanChanged=()=>{},this.onPlanElementChanged=(e,t)=>{},this.onCompletelyLoaded=()=>{},this.onRotationCancel=()=>{},this.onHistoryChange=(e,t)=>{},this.onUpdateWallDimensions=e=>{},this.disableWallDimensions=()=>{},this.onUpdatePlanObjectPositions=e=>{},this.onDrawCancel=()=>{},this.onHandlerSwitchedPlans=()=>{},this.onDragElementStart=()=>{},this.onDragElementEnd=()=>{},this.onClickElement=e=>{},this.onMultiSelectionChange=e=>{}}}),new DependencyInjectionAssignment("configurator-ui-callbacks",class extends UiCallback{constructor(e){super(e),this.onKernelIsReady=null,this.onComponentPositionsUpdated=null,this.onUpdateParameters=e=>{},this.onUpdatePossibleChildren=(e,t)=>{},this.onUpdatePrice=(e,t)=>{},this.onSelectionChange=(e,t,n,r)=>{},this.onSelectionCancel=()=>{},this.onPartListUpdate=(e,t)=>{},this.onBoundsUpdate=e=>{},this.onLoadConfiguration=()=>{},this.onConfigurationReady=(e,t,n)=>{},this.onOpenTag=e=>{},this.onOpenAddOns=()=>{},this.onClickOutside=()=>{},this.onNoDockingsAvailable=()=>{},this.onUiIntersectionChange=e=>{},this.onZoomChange=(e,t)=>{},this.onZoomToComponent=()=>{},this.onDimensionsVisibilityChange=e=>{},this.onErrorDueToOffline=e=>{},this.onError=e=>{},this.onDockingsPreviewRemoved=()=>{},this.onConfigurationHasChildren=e=>{},this.onTrackTiming=(e,t,n,r)=>{},this.onUserInitiatedDockDone=(e,t,n,r,a)=>{},this.onAddonPlusHover=()=>{},this.onAddonPlusHoverOff=()=>{},this.onAddonPlusShown=()=>{},this.onAddonPlusHidden=()=>{},this.onContentProblem=e=>{},this.onSyncStarted=()=>{},this.onSyncDone=()=>{},this.onOpenFloorMaterials=()=>{},this.onOpenPartList=()=>{},this.onComponentLoadError=(e,t)=>{},this.onConfigurationLoadError=()=>{},this.onChangeTypeChangeTag=e=>{},this.onRemoveTypeChangeTag=e=>{},this.onConfigurationLabelChange=(e,t,n)=>{},this.onMemoryCorruption=()=>{},this.onConfiguratorKernelIsReady=(e,t)=>{},this.onConfigurationSaved=e=>{},this.onCameraPositionChanges=()=>{},this.onHistoryChange=(e,t)=>{},this.onClickComponent=e=>{},this.onRequestExternalMesh=(e,t)=>{},this.onGeometryReady=e=>{},this.onGeometryNotReady=e=>{}}},1),new DependencyInjectionAssignment("roomle-tools-core",RoomleToolsCore,0),new DependencyInjectionAssignment("image-renderer",ImageRenderer,0)];class RoomleDependencyInjection{static _ensureContainer(){window.__RML__DI__||(window.__RML__DI__=new Container,window.__RML__DI__.addDependencyInjectionAssignments(INJECTABLES))}static setup(e){RoomleDependencyInjection.addToContainer(e)}static lookup(e,t){return window.__RML__DI__?window.__RML__DI__.lookup(e,t):null}static getContext(e){return RoomleDependencyInjection._ensureContainer(),window.__RML__DI__.getContext(e)}static cleanUp(e){return window.__RML__DI__?window.__RML__DI__.cleanUp(e):null}static addToContainer(e){RoomleDependencyInjection._ensureContainer(),window.__RML__DI__.addDependencyInjectionAssignments(e)}}export{getGUI as $,AppContext as A,Benchmark as B,ConfiguratorViewModel as C,DependencyInjectionAssignment as D,EventDispatcher as E,FloorPlanElementViewModel as F,DEFAULT_CONVERSATION_ID as G,getCatalogIdFromItemOrConfigurationId as H,INJECTABLES as I,isIdItemId as J,AsyncHelper as K,Logger as L,isRange as M,NodePlanElementViewModel as N,isMaterial as O,PlannerKernelAccess as P,convertCObject as Q,RapiAccess as R,StaticPlanObjectViewModel as S,position3VectorsAreEqual as T,position2VectorsAreEqual as U,compareBox3Size as V,WallPlanElementViewModel as W,MaterialCreator as X,createMaterial as Y,addTexture as Z,__decorate as _,DataSyncer as a,rotationQuaternionsAreEqual as a0,getDelta as a1,MIN_MOVE_DISTANCE as a2,LightSourceDetector as a3,EnvironmentMapDecodeMaterial as a4,sanitizedCameraMode as a5,RoomleWebGLRenderer as a6,standaloneConfiguratorQualityLevels as a7,ENV_HDR_256_FILE_NAME as a8,transitionTransparencyOfMaterial as a9,isSafari as aa,convertToTHREE as ab,INPUT_DELAY_TYPE as ac,threeVectorToTransferableXY as ad,AsyncGuard as ae,RenderMode as af,PLAN_ELEMENT_CHANGE_TYPES as ag,hideWallsBasedOnCamera as ah,fadeIn as ai,viewSpacePositionFromUV as aj,setWallTransparency as ak,getDrawingMinBounds as al,wallDimensionToTransferable as am,isPlanSnapshotId as an,InputManager as ao,PlannerMeshGenerator as ap,setMaterial as aq,getMaterialShading as ar,addExistingTexture as as,UiCallback as at,ConfiguratorMeshGenerator as au,GlobalCallback as av,GlobalInitData as aw,InitData as ax,AsyncDependencyLoader as ay,ScenePluginDefaultImplementation as az,RoomleDependencyInjection as b,ConfiguratorPlanObjectViewModel as c,ConstructionPlanObjectViewModel as d,CAMERA_TYPE as e,CeilingPlanElementViewModel as f,disposeMesh as g,convertToKernel as h,inject as i,getScreenXY as j,kernelBoxToThreeBox as k,CANVAS_ID as l,Env as m,PULSE_LOOPS as n,PULSE_DURATION as o,DynamicLightSettingLoader as p,PREDEFINED_LIGHTSETTING as q,ImageRenderer as r,createEmptySceneFromCurrent as s,toRadiant as t,dispose as u,vectorIsZero as v,getYRotationOfObject as w,getIdealDistance as x,RoomleComponentFactoryInitializer as y,toDegrees as z};
9
+ //# sourceMappingURL=roomle-dependency-injection-3dbe6eb1.js.map