@realsee/five-webgpu 1.0.0-alpha.10 → 1.0.0-alpha.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/_virtual/_rolldown/runtime.js +2 -2
  2. package/five/index.js +50 -50
  3. package/five/index.mjs +1149 -1186
  4. package/five/renderer/postprocessing/passes/pass.js +2 -2
  5. package/five/renderer/postprocessing/passes/pass.mjs +2 -2
  6. package/five/renderer/tools/full-screen-quad.js +2 -2
  7. package/five/renderer/tools/full-screen-quad.mjs +2 -2
  8. package/five/utils/calculateThreeMouse.js +2 -2
  9. package/five/utils/calculateThreeMouse.mjs +2 -2
  10. package/five/utils/distance.js +2 -2
  11. package/five/utils/distance.mjs +2 -2
  12. package/five/utils/isNil.js +2 -2
  13. package/five/utils/isNil.mjs +2 -2
  14. package/five/utils/uuid.js +2 -2
  15. package/five/utils/uuid.mjs +2 -2
  16. package/gltf-loader/index.js +3 -3
  17. package/gltf-loader/index.mjs +3 -3
  18. package/line/index.js +3 -3
  19. package/line/index.mjs +3 -3
  20. package/package.json +1 -1
  21. package/plugins/BackgroundPlugin/Controller.js +3 -3
  22. package/plugins/BackgroundPlugin/Controller.mjs +3 -3
  23. package/plugins/BackgroundPlugin/index.js +2 -2
  24. package/plugins/BackgroundPlugin/index.mjs +2 -2
  25. package/plugins/BasePlugin/index.js +2 -2
  26. package/plugins/BasePlugin/index.mjs +2 -2
  27. package/plugins/CSS2DPlugin/Controller.js +3 -3
  28. package/plugins/CSS2DPlugin/Controller.mjs +3 -3
  29. package/plugins/CSS2DPlugin/index.js +2 -2
  30. package/plugins/CSS2DPlugin/index.mjs +2 -2
  31. package/plugins/CSS2DPlugin/style.css_raw.js +2 -2
  32. package/plugins/CSS2DPlugin/style.css_raw.mjs +2 -2
  33. package/plugins/CSS3DPlugin/Controller.js +3 -3
  34. package/plugins/CSS3DPlugin/Controller.mjs +3 -3
  35. package/plugins/CSS3DPlugin/index.js +2 -2
  36. package/plugins/CSS3DPlugin/index.mjs +2 -2
  37. package/plugins/CSS3DPlugin/style.css_raw.js +2 -2
  38. package/plugins/CSS3DPlugin/style.css_raw.mjs +2 -2
  39. package/plugins/FloorplanPlugin/Controller.js +3 -3
  40. package/plugins/FloorplanPlugin/Controller.mjs +3 -3
  41. package/plugins/FloorplanPlugin/index.js +2 -2
  42. package/plugins/FloorplanPlugin/index.mjs +2 -2
  43. package/plugins/FloorplanPlugin/render/assets.js +2 -2
  44. package/plugins/FloorplanPlugin/render/assets.mjs +2 -2
  45. package/plugins/FloorplanPlugin/render/index.js +2 -2
  46. package/plugins/FloorplanPlugin/render/index.mjs +2 -2
  47. package/plugins/FloorplanPlugin/render/isPointInPolygon.js +2 -2
  48. package/plugins/FloorplanPlugin/render/isPointInPolygon.mjs +2 -2
  49. package/plugins/FloorplanPlugin/render/renderFloor.js +2 -2
  50. package/plugins/FloorplanPlugin/render/renderFloor.mjs +2 -2
  51. package/plugins/FloorplanPlugin/render/roomLabelVisibility.js +2 -2
  52. package/plugins/FloorplanPlugin/render/roomLabelVisibility.mjs +2 -2
  53. package/plugins/FloorplanPlugin/render/style.css_raw.js +2 -2
  54. package/plugins/FloorplanPlugin/render/style.css_raw.mjs +2 -2
  55. package/plugins/FloorplanPlugin/utils/changeMode.js +3 -3
  56. package/plugins/FloorplanPlugin/utils/changeMode.mjs +3 -3
  57. package/plugins/FloorplanPlugin/utils/changeModelCanvasOpacity.js +2 -2
  58. package/plugins/FloorplanPlugin/utils/changeModelCanvasOpacity.mjs +2 -2
  59. package/plugins/FloorplanPlugin/utils/correctFiveState.js +3 -3
  60. package/plugins/FloorplanPlugin/utils/correctFiveState.mjs +3 -3
  61. package/plugins/FloorplanPlugin/utils/equal.js +2 -2
  62. package/plugins/FloorplanPlugin/utils/equal.mjs +2 -2
  63. package/plugins/FloorplanPlugin/utils/filter.js +2 -2
  64. package/plugins/FloorplanPlugin/utils/filter.mjs +2 -2
  65. package/plugins/FloorplanPlugin/utils/fiveModelLoad.js +3 -3
  66. package/plugins/FloorplanPlugin/utils/fiveModelLoad.mjs +3 -3
  67. package/plugins/FloorplanPlugin/utils/formatData.js +3 -3
  68. package/plugins/FloorplanPlugin/utils/formatData.mjs +3 -3
  69. package/plugins/FloorplanPlugin/utils/formatFloorplanJson.js +2 -2
  70. package/plugins/FloorplanPlugin/utils/formatFloorplanJson.mjs +2 -2
  71. package/plugins/FloorplanPlugin/utils/formatPosition.js +2 -2
  72. package/plugins/FloorplanPlugin/utils/formatPosition.mjs +2 -2
  73. package/plugins/FloorplanPlugin/utils/getDistanceFromModel.js +2 -2
  74. package/plugins/FloorplanPlugin/utils/getDistanceFromModel.mjs +2 -2
  75. package/plugins/FloorplanPlugin/utils/getPxmm.js +2 -2
  76. package/plugins/FloorplanPlugin/utils/getPxmm.mjs +2 -2
  77. package/plugins/FloorplanPlugin/utils/isTruelyObject.js +2 -2
  78. package/plugins/FloorplanPlugin/utils/isTruelyObject.mjs +2 -2
  79. package/plugins/FloorplanPlugin/utils/nearlyEqual.js +2 -2
  80. package/plugins/FloorplanPlugin/utils/nearlyEqual.mjs +2 -2
  81. package/plugins/FloorplanPlugin/utils/polylabel.js +2 -2
  82. package/plugins/FloorplanPlugin/utils/polylabel.mjs +2 -2
  83. package/plugins/FloorplanPlugin/utils/to.js +3 -3
  84. package/plugins/FloorplanPlugin/utils/to.mjs +3 -3
  85. package/plugins/GaussianSplattingEntranceAnimationPlugin/Controller.js +3 -3
  86. package/plugins/GaussianSplattingEntranceAnimationPlugin/Controller.mjs +3 -3
  87. package/plugins/GaussianSplattingEntranceAnimationPlugin/index.js +2 -2
  88. package/plugins/GaussianSplattingEntranceAnimationPlugin/index.mjs +2 -2
  89. package/plugins/Object3DHelperPlugin/Controller.js +3 -3
  90. package/plugins/Object3DHelperPlugin/Controller.mjs +3 -3
  91. package/plugins/Object3DHelperPlugin/Controllers/BaseController.js +2 -2
  92. package/plugins/Object3DHelperPlugin/Controllers/BaseController.mjs +2 -2
  93. package/plugins/Object3DHelperPlugin/Controllers/BoundingBoxController.js +2 -2
  94. package/plugins/Object3DHelperPlugin/Controllers/BoundingBoxController.mjs +2 -2
  95. package/plugins/Object3DHelperPlugin/Controllers/MoveController.js +2 -2
  96. package/plugins/Object3DHelperPlugin/Controllers/MoveController.mjs +2 -2
  97. package/plugins/Object3DHelperPlugin/Controllers/RotateController.js +2 -2
  98. package/plugins/Object3DHelperPlugin/Controllers/RotateController.mjs +2 -2
  99. package/plugins/Object3DHelperPlugin/FiveControllerWrapper.js +2 -2
  100. package/plugins/Object3DHelperPlugin/FiveControllerWrapper.mjs +2 -2
  101. package/plugins/Object3DHelperPlugin/Helper/BaseHelper.js +2 -2
  102. package/plugins/Object3DHelperPlugin/Helper/BaseHelper.mjs +2 -2
  103. package/plugins/Object3DHelperPlugin/Helper/BoundingBoxHelper.js +2 -2
  104. package/plugins/Object3DHelperPlugin/Helper/BoundingBoxHelper.mjs +2 -2
  105. package/plugins/Object3DHelperPlugin/Helper/MoveHelper.js +2 -2
  106. package/plugins/Object3DHelperPlugin/Helper/MoveHelper.mjs +2 -2
  107. package/plugins/Object3DHelperPlugin/Helper/RotateHelper.js +2 -2
  108. package/plugins/Object3DHelperPlugin/Helper/RotateHelper.mjs +2 -2
  109. package/plugins/Object3DHelperPlugin/constant.js +2 -2
  110. package/plugins/Object3DHelperPlugin/constant.mjs +2 -2
  111. package/plugins/Object3DHelperPlugin/index.js +2 -2
  112. package/plugins/Object3DHelperPlugin/index.mjs +2 -2
  113. package/plugins/Object3DHelperPlugin/utils/ArrowGroup.js +2 -2
  114. package/plugins/Object3DHelperPlugin/utils/ArrowGroup.mjs +2 -2
  115. package/plugins/Object3DHelperPlugin/utils/CenterHandle.js +2 -2
  116. package/plugins/Object3DHelperPlugin/utils/CenterHandle.mjs +2 -2
  117. package/plugins/Object3DHelperPlugin/utils/PlaneHandle.js +2 -2
  118. package/plugins/Object3DHelperPlugin/utils/PlaneHandle.mjs +2 -2
  119. package/plugins/Object3DHelperPlugin/utils/calculateScaleByCamera.js +2 -2
  120. package/plugins/Object3DHelperPlugin/utils/calculateScaleByCamera.mjs +2 -2
  121. package/plugins/Object3DHelperPlugin/utils/cameraHooks.js +2 -2
  122. package/plugins/Object3DHelperPlugin/utils/cameraHooks.mjs +2 -2
  123. package/plugins/Object3DHelperPlugin/utils/direction.js +2 -2
  124. package/plugins/Object3DHelperPlugin/utils/direction.mjs +2 -2
  125. package/plugins/Object3DHelperPlugin/utils/getMouseRaycaster.js +2 -2
  126. package/plugins/Object3DHelperPlugin/utils/getMouseRaycaster.mjs +2 -2
  127. package/plugins/Object3DHelperPlugin/utils/getOrthographicCameraDirection.js +2 -2
  128. package/plugins/Object3DHelperPlugin/utils/getOrthographicCameraDirection.mjs +2 -2
  129. package/plugins/Object3DHelperPlugin/utils/setObjectQuaternion.js +2 -2
  130. package/plugins/Object3DHelperPlugin/utils/setObjectQuaternion.mjs +2 -2
  131. package/plugins/Object3DHelperPlugin/utils/solidGuide.js +2 -2
  132. package/plugins/Object3DHelperPlugin/utils/solidGuide.mjs +2 -2
  133. package/plugins/Object3DHelperPlugin/utils/tipsDom.js +2 -2
  134. package/plugins/Object3DHelperPlugin/utils/tipsDom.mjs +2 -2
  135. package/plugins/PanoAnimePlugin/Controller.js +3 -3
  136. package/plugins/PanoAnimePlugin/Controller.mjs +3 -3
  137. package/plugins/PanoAnimePlugin/index.js +2 -2
  138. package/plugins/PanoAnimePlugin/index.mjs +2 -2
  139. package/plugins/WordPassPlugin/Controller.js +3 -3
  140. package/plugins/WordPassPlugin/Controller.mjs +3 -3
  141. package/plugins/WordPassPlugin/hersheyFont.js +2 -2
  142. package/plugins/WordPassPlugin/hersheyFont.mjs +2 -2
  143. package/plugins/WordPassPlugin/index.js +2 -2
  144. package/plugins/WordPassPlugin/index.mjs +2 -2
  145. package/plugins/WordPassPlugin/textToStrokeOrderStrokes.js +3 -3
  146. package/plugins/WordPassPlugin/textToStrokeOrderStrokes.mjs +4 -4
  147. package/plugins/WordPassPlugin/word-pass.js +3 -3
  148. package/plugins/WordPassPlugin/word-pass.mjs +3 -3
  149. package/plugins/index.js +2 -2
  150. package/plugins/index.mjs +2 -2
  151. package/plugins/thirdParty/CSS2DRenderer.js +2 -2
  152. package/plugins/thirdParty/CSS2DRenderer.mjs +2 -2
  153. package/plugins/thirdParty/CSS3DRenderer.js +2 -2
  154. package/plugins/thirdParty/CSS3DRenderer.mjs +2 -2
  155. package/plugins/thirdParty/doctorstrange-model.js +2 -2
  156. package/plugins/thirdParty/doctorstrange-model.mjs +2 -2
  157. package/plugins/thirdParty/domevents.js +2 -2
  158. package/plugins/thirdParty/domevents.mjs +2 -2
  159. package/plugins/utils/absoluteUrl.js +2 -2
  160. package/plugins/utils/absoluteUrl.mjs +2 -2
  161. package/plugins/utils/calculatePath.js +2 -2
  162. package/plugins/utils/calculatePath.mjs +2 -2
  163. package/plugins/utils/clamp.js +2 -2
  164. package/plugins/utils/clamp.mjs +2 -2
  165. package/plugins/utils/uuid.js +2 -2
  166. package/plugins/utils/uuid.mjs +2 -2
  167. package/react/index.js +2 -2
  168. package/react/index.mjs +2 -2
  169. package/sticker/index.js +3 -3
  170. package/sticker/index.mjs +3 -3
  171. package/umd/five-gltf-loader.js +3 -3
  172. package/umd/five-line.js +3 -3
  173. package/umd/five-plugins.js +2 -2
  174. package/umd/five-react.js +2 -2
  175. package/umd/five-sticker.js +3 -3
  176. package/umd/five-vfx.js +2 -2
  177. package/umd/five.js +3 -3
  178. package/vfx/index.js +2 -2
  179. package/vfx/index.mjs +2 -2
  180. package/work-downloader/index.js +3 -3
  181. package/work-downloader/index.mjs +152 -180
package/umd/five.js CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @license
3
3
  * @realsee/five-webgpu
4
- * Generated: 10/26/2026
5
- * Version: 1.0.0-alpha.10
4
+ * Generated: 10/27/2026
5
+ * Version: 1.0.0-alpha.11
6
6
  * Terms:
7
7
  * Realsee SDK License Agreement
8
8
  * Update: July 28, 2021
@@ -1636,4 +1636,4 @@ Z
1636
1636
  </svg>
1637
1637
  </div>
1638
1638
  </div>
1639
- `;function Hre(e){let t=1,n=document.getElementsByTagName(`meta`);for(let e=0;e<n.length;e++){let r=n[e];if(r.getAttribute(`name`)===`viewport`){let e=(r.getAttribute(`content`)||``).match(/initial\-scale\=([\d|\.]+)/);e&&(t=Number(e[1])),isNaN(t)&&(t=1)}}let r=e=>Math.floor(e*t)+`px`;return Vre.replace(/\n/g,` `).replace(/\ +/g,` `).replace(/\$id/g,e).replace(/(\d+)px/g,(e,t)=>r(Number(t)))}function Ure(){let e=`five_vr_helper_`+JB(),t=Hre(e),n=document.createElement(`div`);return n.className=e,n.innerHTML=t,n}q();var S9=new Vu(.12,16),C9=T2(.5,.5),w9=X(.017);function Wre(e,t){let n=o2(C9.sub(e));return b2(t,t.add(w9),n)}function T9(e,t){let n=o2(C9.sub(e));return X(1).sub(b2(t.sub(w9),t,n))}function Gre(){let e={opacity:Z(0)},t=C2(),n=o2(C9.sub(t)),r=X(.01),i=X(.49),a=X(.29),o=X(1).sub(b2(i.sub(r),i,n)),s=b2(a,a.add(r),n),c=D2(.576,.635,1,.3),l=D2(1,1,1,J0(n.sub(i.add(a).div(2))).div(i.sub(a)).mul(1.5).add(.1).clamp(0,1)),u=u2(c,l,l.w),d=new eD;return d.fragmentNode=D2(u.xyz,u.w.mul(e.opacity).mul(o).mul(s)),d.blending=5,d.blendSrc=204,d.blendDst=205,d.blendSrcAlpha=201,d.blendDstAlpha=205,d.depthWrite=!1,d.transparent=!0,{material:d,u:e}}function Kre(){let e={circleScale:Z(1),circleFade:Z(0),circleOpacity:Z(.5),loadingAngle:Z(0),loadingOpacity:Z(0),opacity:Z(0),disable:Z(0)},t=C2();o2(C9.sub(t));let n=X(.98).add(J0(p2(T2(1,-1)).dot(t.sub(C9))).mul(2)).clamp(0,1),r=D2(u2(D2(.576,.635,1,1).xyz,D2(1,1,1,1).xyz,e.circleFade.mul(.5)),n.mul(e.circleOpacity).mul(T9(t,X(.3).mul(e.circleScale)))),i=d2(K0.sub(Y0(C9.x.sub(t.x),C9.y.sub(t.y))).add(e.loadingAngle),q0),a=D2(1,1,1,X(1).sub(b2(X(0),q0,i)).mul(.9).add(.1).mul(e.loadingOpacity).mul(Wre(t,X(.2).mul(e.circleScale))).mul(T9(t,X(.25).mul(e.circleScale)))),o=D2(1,1,1,X(.5).mul(T9(t,X(.32).mul(e.circleScale)))),s=D2(1,1,1,0);s=u2(s,r,r.w),s=u2(s,a,a.w),s=u2(s,o,e.disable);let c=D2(s.xyz,s.w.mul(e.opacity)),l=new eD;return l.fragmentNode=c,l.blending=5,l.blendSrc=204,l.blendDst=205,l.blendSrcAlpha=201,l.blendDstAlpha=205,l.depthWrite=!1,l.transparent=!0,{material:l,u:e}}var qre=class extends ps{constructor(){super(),this.progress=0,this.opacity=0,this.loading=!1,this.current=!1,this.disabled=!1,this.currentMotion=new qQ({ringScale:1.1,ringOpacity:0,circleFade:0,circleOpacity:.85,circleScale:1}),this.opacityMotion=new qQ({opacity:0}),this.loadingMotion=new qQ({opacity:0}),this.disableMotion=new qQ({opacity:0}),this.hitTestMesh=new pl(S9,new tl({blending:5,blendSrc:204,blendDst:205,blendSrcAlpha:201,blendDstAlpha:205,depthWrite:!1,transparent:!0,color:0,opacity:0})),this.hitTestMesh.scale.set(1.5,1.5,1.5);let{material:e,u:t}=Gre();this.ringMesh=new pl(S9,e),this.ringU=t;let{material:n,u:r}=Kre();this.panoMesh=new pl(S9,n),this.panoU=r,this.add(this.hitTestMesh),this.add(this.ringMesh),this.add(this.panoMesh),this.renderOrder=1e4,this.needsRender=!0}setProgress(e){this.progress=e,this.setLoading(e>0)}setOpacity(e){this.opacity!==e&&(this.opacity=e=J(e,0,1),this.opacityMotion.set({opacity:e},30).catch(Y))}setCurrent(e){if(this.current!==e){if(e)this.currentMotion.setKeyframes([{progress:0,value:{ringScale:2,ringOpacity:0,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.05,value:{ringScale:1,ringOpacity:1,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.15,value:{ringScale:1.2,ringOpacity:1,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.25,value:{ringScale:1.1,ringOpacity:1,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.8,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.85,circleScale:1}},{progress:.9,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.65,circleScale:.8}},{progress:.92,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.65,circleScale:.8}},{progress:1,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.85,circleScale:1.1}}],1500).catch(Y);else{let e=[{progress:0,value:Object.assign({},this.currentMotion.value)},{progress:1,value:{ringScale:1.1,ringOpacity:0,circleFade:0,circleOpacity:.85,circleScale:1}}];this.currentMotion.setKeyframes(e,200).catch(Y)}this.current=e}}setLoading(e){this.loading!==e&&(e?this.loadingMotion.setKeyframes([{progress:0,value:{opacity:0}},{progress:.3,value:{opacity:0}},{progress:1,value:{opacity:.8}}],500).catch(Y):this.loadingMotion.set({opacity:0},0).catch(Y),this.loading=e,this.disabled===!0&&this.setDisabled(!1),this.needsRender=!0)}setDisabled(e){this.disabled!==e&&(this.disabled=e,this.loading===!0&&this.setLoading(!1),this.disableMotion.set({opacity:+!!e},300).catch(Y),this.needsRender=!0)}tap(){return Promise.resolve()}updateTime(e,t){this.opacityMotion.update(e),this.currentMotion.update(e),this.loadingMotion.update(e);let n=this.opacityMotion.value.opacity;this.visible=n!==0;let{ringScale:r,ringOpacity:i,circleFade:a,circleOpacity:o,circleScale:s}=this.currentMotion.value;this.ringMesh.scale.set(r,1,r),this.ringU.opacity.value=i*n,this.panoU.opacity.value=n,this.panoU.circleOpacity.value=o,this.panoU.circleScale.value=s,this.panoU.circleFade.value=a,this.panoU.loadingOpacity.value=this.loadingMotion.value.opacity,this.panoU.disable.value=this.disableMotion.value.opacity,this.panoU.loadingAngle.value=e/120%(Math.PI*2),this.needsRender=!0}dispose(){this.hitTestMesh.material.dispose(),this.ringMesh.material.dispose(),this.panoMesh.material.dispose()}};q();var Jre=1500,Yre=Object.assign({},_q(n9,[`maxLatitude`,`minLatitude`])),Xre=class e extends r9{static parseArgs(t){if(t instanceof e)return t;let n=Object.assign(Object.assign({},t),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2});return super.parseArgs(n)}static initAnimationEndState(e){let t=this.parseArgs(e),n=super.initAnimationEndState(t);return Object.assign(Object.assign({},n),{mode:`VRPanorama`})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`VRPanorama`,this.cardboard=new Rre(this.renderer);let r=Ure();this.helperElement=r;let i=new f7(r);this.element.parentNode&&(this.element.parentNode.insertBefore(r,this.element),this.updateHelperElementSize(),i.on(`tap`,()=>this.emit(`vr.requestExit`,$(`vr.requestExit`,{})))),this.destroyHelper=()=>{i.destroy(),r.parentNode&&r.parentNode.removeChild(r),this.helperElement=void 0}}updateConfiguration(e){return super.updateConfiguration(Object.assign(Object.assign({},e),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2}))}destroy(){super.destroy(),this.cardboard.dispose(),this.destroyHelper()}isReady(){return!1}updateRenderSize(){this.needsRender=!0}updateCamera(e,t,n){return Promise.resolve()}updateCameraWithKeyframes(e,t,n){return Promise.resolve()}updateTime(e,t,...n){var r,i,a,o,s,c;if(this.destroyed)return;this.updateHelperElementSize(),this.userAction=!0,this.needsRender=!0;let l={},u={},d=this.locationMotion.keyframes[0],f=this.locationMotion.keyframes[this.locationMotion.keyframes.length-1],[p,m]=this.locationMotion.getKeyFrameSegment(e),h=this.panoResourceFromLocationMotionKeyframe(p),g=this.panoResourceFromLocationMotionKeyframe(m),_=this.panoResourceFromLocationMotionKeyframe(d),v=this.panoResourceFromLocationMotionKeyframe(f),y=!1;if(this.modelAlphaMotion.ended===!1&&(this.modelAlphaMotion.update(e),l.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.perspToOrthoMotion.ended===!1&&(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(J(this.perspToOrthoMotion.value.perspToOrtho,0,1))),this.locationMotion.ended===!1){this.locationMotion.update(e);let t=this.locationMotion.value.count-m.value.count+1,n=new j().copy(h.position),a=new j().copy(g.position);if(l.progress=t,t>=.01&&t<=.99&&(l.progress=J(g.effectEasing(t),.01,.99)),g.panoPicture&&(t<1?h.panoPicture&&(l.pano0=h.panoPicture):l.pano0=g.panoPicture,l.pano1=g.panoPicture),g.effect===`montage`?l.transition=`BLACK`:g.effect===`spread`?l.transition=`SPREAD`:l.transition=`FADE`,g.effect===`zoomin`||g.effect===`zoomout`?l.progress=Math.pow(t,3):g.effect===`model`&&this.camera.pose.distance<.01&&(l.modelAlpha=1-Math.pow(J(Math.abs(t-.5)*2,0,1),4)),t<1&&g.effect!==`fly`){if(l.pano0&&h.panoPicture){let e={panoId:l.pano0.panoId,map:l.pano0.map,mapHistogram:l.pano0.mapHistogram,mapSize:l.pano0.mapSize,zoom:l.pano0.zoom,matrix:h.panoPicture.matrix.clone().setPosition(g.position),gainmap:l.pano0.gainmap?{map:l.pano0.gainmap.map,cfg:Object.assign({},l.pano0.gainmap.cfg)}:void 0},t=this.panoPictureObserverMap.get(l.pano0);t&&this.panoPictureObserverMap.set(e,t),l.pano0=e}n.copy(a),y=!0}u.distance=this.locationMotion.value.distance,u.offset=new j(n.x+(a.x-n.x)*t,n.y+(a.y-n.y)*t,n.z+(a.z-n.z)*t);let o=[],s=[];for(let e of this.locationMotion.keyframes){let{key:t,progress:n}=e;t!==void 0&&(o.push(t),n>this.locationMotion.progress&&s.push(t))}for(let e of Object.keys(this.panoResources)){if(s.indexOf(e)>=0)continue;let t=this.panoResources[e];if(t.panoPicture){let e=t.panoPicture.map;if(e){if(e===((r=l.pano0)==null?void 0:r.map)||e===((i=l.pano1)==null?void 0:i.map))continue;e.dispose(),t.panoPicture=null}}o.indexOf(e)>=0||delete this.panoResources[e]}this.currentPano=k3(g.panoId),this.emit(`pano.moving`,$(`pano.moving`,{userAction:this.userAction,prevPano:k3(_.panoId),state:Object.assign(Object.assign(Object.assign(Object.assign({},k3(v.panoId)),{mode:this.mode}),$5(this.camera.pose)),u),options:{},progress:this.locationMotion.progress,error:null}))}n7(l)===!1&&this.modelScene.parameter.set(l),u.offset&&this.camera.position.copy(u.offset);let b=this.camera.pose.longitude,x=this.camera.pose.latitude;this.camera.quaternion.fromArray(this.cardboard.sensor.getOrientation()),this.camera.computePose(),(b!==this.camera.pose.longitude||x!==this.camera.pose.latitude)&&(this.cameraMotion.set(gq(this.camera.pose,[`longitude`,`latitude`]),0).catch(Y),this.emit(`camera.update`,$(`camera.update`,{userAction:!0,state:Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),$5(this.camera.pose))}))),this.works.getObserver(this.currentPano);let S=this.works.getObserver(h.panoId),C=this.works.getObserver(g.panoId),w=new Map;if(S)for(let e of S.accessibleNodes){let t=S.work.observers[e];if(t){let e=O3({panoIndex:t.panoIndex,workCode:t.work.workCode});w.set(e,t)}}if(C)for(let e of C.accessibleNodes){let t=C.work.observers[e];if(t){let e=O3({panoIndex:t.panoIndex,workCode:t.work.workCode});w.set(e,t)}}if(this.panoMeshes.forEach((e,t)=>{let n=w.get(t);n?(e.position.copy(n.position).applyMatrix4(n.work.transform),w.delete(t)):(this.helper.remove(e),e.dispose(),this.panoMeshes.delete(t))}),w.forEach((e,t)=>{let n=new qre;n.position.copy(e.position).applyMatrix4(e.work.transform),e.position.distanceTo(e.standingPosition)>this.aerialObserverMinHeight?n.scale.setScalar(15):n.scale.setScalar(1),this.panoMeshes.set(t,n),this.helper.add(n),w.delete(t)}),this.camera.pose.distance>.1||y?this.panoMeshes.forEach((n,r)=>{n.setOpacity(0),n.updateTime&&n.updateTime(e,t),n.visible=!1}):this.panoMeshes.forEach((e,t)=>{let n=k3(t),r=this.works.getObserver(n);if(!r)return;if(!r.loadable&&!r.active){e.setOpacity(0);return}let i=e.position.clone().setY(this.camera.position.y).distanceTo(this.camera.position);i<.05?e.setOpacity(0):e.setOpacity(J(1.5/i,0,1)),A3(this.currentPano,n)&&e.setOpacity(0),e.lookAt(this.camera.position)}),this.locationMotion.ended){let n=this.intersect(e);this.panoMeshes.forEach((r,i)=>{r.setCurrent(r===n),r.updateTime&&r.updateTime(e,t)})}{let e=(a=this.modelScene.parameter.progress)==null?1:a,t=Math.round(e),n=this.modelScene.parameter.pano0,r=this.modelScene.parameter.pano1,i=t===0?n:r,s;if(i&&(s=this.works.getObserver(i.panoId),s||(s=this.panoPictureObserverMap.get(i))),this.tiling.appearDuration=this.tileAppearDuration,this.tiling.maxRequest=e<(lJ()?.6:.99)?0:this.tileMaxRequest,this.tiling.imageOptions=this.imageOptions,!s||!i||this.tileLevelForFov===!1||this.camera.perspToOrtho.x>0){this.tiling.setObserver(null);let e={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:null,panoGainmap:void 0,panoMatrix:new M,panoZoom:1,minLevel:0,level:0};this.tiling.update(e),this.modelScene.parameter.set(`refinedScreen`,null)}else{let e=eJ(i.mapSize),a=e+1,c=new A().copy(this.camera.resolution).multiplyScalar(this.camera.pixelRatio),l=Math.floor(this.tileLevelForFov(this.camera.fov,c)),u=l>e?l:0;this.tiling.setObserver(s);let d={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:i.map,panoGainmap:i.gainmap,panoMatrix:i.matrix,panoZoom:i.zoom,minLevel:a,level:u,useHDR:this.modelScene.parameter.useHDR,maxDisplayBoost:this.modelScene.parameter.maxDisplayBoost},f=this.tiling.update(d),p={map:this.tiling.renderTarget.texture,matrixInverse:this.tiling.camera.matrixWorldInverse,projectionMatrix:this.tiling.camera.projectionMatrix,pano:t,opacity:(n==null?void 0:n.panoId)===(r==null?void 0:r.panoId)?1:XQ(Math.abs(((o=this.modelScene.parameter.progress)==null?0:o)-.5)*2)},m=this.modelScene.parameter.refinedScreen;(f||p.pano!==(m==null?void 0:m.pano)||p.opacity!==(m==null?void 0:m.opacity))&&this.modelScene.parameter.set(`refinedScreen`,p)}}this.panoVideo.object.position.copy(this.camera.position),this.panoVideo.updateTime(e);{let e=g.effect,{pano0:t,pano1:n}=this.modelScene.parameter;if(t&&n&&t!==n&&(e===`fly`||e===`model`)&&this.flyEffectUseDepthBuffer){if(((s=this.modelScene.parameter.pano0Depth)==null?void 0:s.panoId)!==t.panoId||((c=this.modelScene.parameter.pano1Depth)==null?void 0:c.panoId)!==n.panoId){this.pano0DepthCubeRenderTarget?this.pano0DepthCubeRenderTarget.width!==512&&this.pano0DepthCubeRenderTarget.setSize(512,512):this.pano0DepthCubeRenderTarget=new uD(512,{minFilter:ri,magFilter:ri,generateMipmaps:!1}),this.pano1DepthCubeRenderTarget?this.pano1DepthCubeRenderTarget.width!==512&&this.pano1DepthCubeRenderTarget.setSize(512,512):this.pano1DepthCubeRenderTarget=new uD(512,{minFilter:ri,magFilter:ri,generateMipmaps:!1});let e=new mp(this.camera.near,this.camera.far,this.pano0DepthCubeRenderTarget);e.matrix.copy(t.matrix),e.matrixWorld.copy(e.matrix),e.matrixAutoUpdate=!1,Z7(this.renderer,this.modelScene,e,500);let r=new mp(this.camera.near,this.camera.far,this.pano1DepthCubeRenderTarget);r.matrix.copy(n.matrix),r.matrixWorld.copy(r.matrix),r.matrixAutoUpdate=!1,Z7(this.renderer,this.modelScene,r,500),this.modelScene.parameter.set({pano0Depth:{panoId:t.panoId,map:this.pano0DepthCubeRenderTarget.texture,mapSize:this.pano0DepthCubeRenderTarget.width,maxDepth:500},pano1Depth:{panoId:n.panoId,map:this.pano1DepthCubeRenderTarget.texture,mapSize:this.pano1DepthCubeRenderTarget.width,maxDepth:500}})}}else this.modelScene.parameter.set({pano0Depth:null,pano1Depth:null}),this.flyEffectUseDepthBuffer||(this.pano0DepthCubeRenderTarget&&(this.pano0DepthCubeRenderTarget.dispose(),this.pano0DepthCubeRenderTarget=void 0),this.pano1DepthCubeRenderTarget&&(this.pano1DepthCubeRenderTarget.dispose(),this.pano1DepthCubeRenderTarget=void 0))}}render(){return this.renderer.setRenderTarget(null),this.renderer.setScissorTest(!1),this.cardboard.render(this.scene,this.camera),!0}setCamera(e={}){}destroyHelper(){}updateHelperElementSize(){if(!this.helperElement)return;let e=new A(this.element.offsetWidth,this.element.offsetHeight),t=e.x*this.viewport.left,n=e.y*(1-this.viewport.bottom-this.viewport.height),r=e.x*this.viewport.width,i=e.y*this.viewport.height;this.helperElement.style.marginLeft!==t+`px`&&(this.helperElement.style.marginLeft=t+`px`),this.helperElement.style.marginTop!==n+`px`&&(this.helperElement.style.marginTop=n+`px`),this.helperElement.style.width!==r+`px`&&(this.helperElement.style.width=r+`px`),this.helperElement.style.height!==i+`px`&&(this.helperElement.style.height=i+`px`)}intersect(e){var t,n;if(this.locationMotion.ended===!1){this.intersectMesh.visible=!1,this.activePanoMesh=void 0,this.activeTime=void 0;return}if(this.activePanoMesh&&this.activeTime&&e-this.activeTime>Jre){let e=this.activePanoMesh,t=null;return this.panoMeshes.forEach((n,r)=>{n===e&&(t=r)}),t!==null&&this.moveToPano(k3(t),{},!0),this.activePanoMesh=void 0,this.activeTime=void 0,e}let r=this.camera.getDirection(new j),i=new em(this.camera.position,r);i.params.Points={threshold:.1},i.firstHitOnly=!0,i.floorIndex=-1;let a,o=[],s=this.works.getObserver(this.currentPano),c=s?s.accessibleNodes.map(e=>O3({panoIndex:e,workCode:s.work.workCode})):[];for(let e of c){let r=this.panoMeshes.get(e);if(r){let[e]=i.intersectObject((t=r.hitTestMesh)==null?r:t,!0);if(e){let t=(n=s==null?void 0:s.floorIndex)==null?0:n;o.push({panoMesh:r,intersection:Object.assign({floorIndex:t,floor:t},e)})}}}let[l]=o.sort((e,t)=>e.intersection.distance-t.intersection.distance);l?(a=l.intersection,this.activePanoMesh!==l.panoMesh&&(this.activePanoMesh=l.panoMesh,this.activeTime=e),this.intersectMesh.position.copy(l.panoMesh.position),this.intersectMesh.lookAt(this.camera.position)):(this.activePanoMesh=void 0,this.activeTime=void 0),a||(a=this.modelScene.intersectRaycaster(i)[0]);let u=$(`intersect.update`,{raycaster:i,intersection:a==null?null:a,object:this.intersectMesh});if(this.emit(`intersect.update`,u),u.defaultPrevented){this.hideIntersectMesh();return}if(a&&a.face){let e=a.face.normal,t=new yo;t.setFromUnitVectors(new j(0,0,1),e),this.intersectMesh.quaternion.copy(t);let n=a.point.clone();this.intersectMesh.position.copy(n),l?this.intersectMesh.visible=!1:this.intersectMesh.visible=!0}else this.intersectMesh.visible=!1;return l==null?void 0:l.panoMesh}onPanGesture(){}onTapGesture(){}onPinchGesture(){}onMouseMove(){}onMouseOut(){}};q();var E9=.01,D9=`183`,O9={isXRRenderTarget:!0,_hasExternalTextures:!1,_autoAllocateDepthBuffer:!0,_isOpaqueFramebuffer:!0};function k9(e,t,n,r){let i=new Fo(t,n,{format:Oi,type:pi,colorSpace:e.outputColorSpace,stencilBuffer:e.stencil===!0,resolveDepthBuffer:r,resolveStencilBuffer:r});return Object.assign(i,O9),i}var Zre=class{constructor(e,t={}){var n;this.resources=null,this.warnedRevision=!1,this._outputBufferType=null,this.clearColorScratch=new N,this.viewportScratch=new Po,this.renderer=e,this.atlasSamples=(n=t.atlasSamples)==null?0:n}get outputBufferType(){return this._outputBufferType}verify(){let e=this.renderer,t=[],n=e.backend;n?(n.isWebGLBackend!==!0&&t.push(`backend.isWebGLBackend`),typeof n.setXRTarget!=`function`&&t.push(`backend.setXRTarget`)):t.push(`renderer.backend`),typeof e.setOutputRenderTarget!=`function`&&t.push(`renderer.setOutputRenderTarget`),typeof e.getOutputRenderTarget!=`function`&&t.push(`renderer.getOutputRenderTarget`);let r=k9(this.renderer,1,1,!0);try{let e=r;for(let[n,r]of Object.entries(O9))e[n]!==r&&t.push(`xrRT.${n}(期望 ${String(r)},实际 ${String(e[n])})`);for(let n of[`multiview`,`resolveDepthBuffer`])e[n]===void 0&&t.push(`xrRT.${n}`)}finally{r.dispose()}if(t.length>0)throw Error(`[RenderTargetBridge] three 内部 API 校验失败(THREE.REVISION=183),缺失或不符:${t.join(`、`)}`);D9!==`183`&&!this.warnedRevision&&(this.warnedRevision=!0,console.warn(`[RenderTargetBridge] THREE.REVISION=183,XR 标志位语义仅在 r${D9} 复核过,继续运行`))}verifyCameras(e){let t=this.renderer.coordinateSystem,n=e.map((e,n)=>e.coordinateSystem===t?null:n).filter(e=>e!==null);if(n.length>0)throw Error(`[RenderTargetBridge] Eye_Camera[${n.join(`,`)}] 的 coordinateSystem 与 renderer(${t})不一致,three 会改写其投影矩阵(THREE.REVISION=183)`)}init(e){var t,n,r;this.build(e),this._outputBufferType=(r=(n=(t=this.renderer).getOutputBufferType)==null?void 0:n.call(t))==null?null:r}renderFrame(e,t,n){let r=this.renderer,i=r,a=i.backend,o={autoClear:r.autoClear,autoClearColor:r.autoClearColor,autoClearDepth:r.autoClearDepth,autoClearStencil:r.autoClearStencil,viewport:r.getViewport(this.viewportScratch).clone(),scissorTest:r.getScissorTest(),clearAlpha:r.getClearAlpha(),output:i.getOutputRenderTarget(),rt:r.getRenderTarget(),clearColor:i.getClearColor(this.clearColorScratch).clone()};try{let{atlas:s,xrRT:c,quad:l,width:u,height:d}=this.syncResources(e);r.setScissorTest(!1),r.setRenderTarget(s);let f=t.background;r.setClearColor(f instanceof N?f:o.clearColor,1),r.clear(!0,!0,!1),r.autoClear=!1,r.autoClearColor=!1,r.autoClearDepth=!1,r.autoClearStencil=!1;for(let e of n){let n=e.viewport;s.viewport.set(n.x,d-n.height-n.y,n.width,n.height),r.render(t,e.camera)}r.setScissorTest(!1),a.setXRTarget(e.framebuffer),r.setRenderTarget(null),i.setOutputRenderTarget(c);let p=r.getPixelRatio();r.setViewport(0,0,(u+E9)/p,(d+E9)/p),l.render(r)}finally{i.setOutputRenderTarget(o.output),a.setXRTarget(null),r.setRenderTarget(o.rt),r.autoClear=o.autoClear,r.autoClearColor=o.autoClearColor,r.autoClearDepth=o.autoClearDepth,r.autoClearStencil=o.autoClearStencil,r.setScissorTest(o.scissorTest),r.setViewport(o.viewport),r.setClearColor(o.clearColor,o.clearAlpha)}}dispose(){var e,t,n;if(!this.resources)return;this.releaseResources();let r=this.renderer;(t=(e=r.backend)==null?void 0:e.setXRTarget)==null||t.call(e,null),(n=r.setOutputRenderTarget)==null||n.call(r,null),this._outputBufferType=null}syncResources(e){let t=this.resources;return t&&t.layer===e&&t.width===e.framebufferWidth&&t.height===e.framebufferHeight?t:this.build(e)}build(e){this.releaseResources();let t=e.framebufferWidth,n=e.framebufferHeight,r=new Fo(t,n,{format:Oi,type:this.supportsHalfFloat()?bi:pi,colorSpace:Ia,depthBuffer:!0,stencilBuffer:!1,samples:this.atlasSamples,generateMipmaps:!1,minFilter:ci,magFilter:ci}),i=k9(this.renderer,t,n,e.ignoreDepthValues===!1),a=new eD;a.fragmentNode=D2(S2(r.texture).rgb,1),a.depthTest=!1,a.depthWrite=!1;let o=new Jj(a);return this.resources={layer:e,width:t,height:n,atlas:r,xrRT:i,quad:o},this.resources}releaseResources(){let e=this.resources;e&&(this.resources=null,e.atlas.dispose(),e.xrRT.dispose(),e.quad.material.dispose())}supportsHalfFloat(){var e;let t=(e=this.renderer.backend)==null?void 0:e.gl;return t?!!t.getExtension(`EXT_color_buffer_float`)||!!t.getExtension(`EXT_color_buffer_half_float`):!1}};q();var Qre=class{constructor(){this.root=new ms,this._entries=new Map,this._dir=new j}add(e){for(let t of e){if(this._entries.has(t))continue;let e=new ps,n=new ps;e.visible=!1,n.visible=!1,this.root.add(e,n),this._entries.set(t,{source:t,targetRay:e,grip:n,rayFrame:-1})}}remove(e){let t=[];for(let n of e){let e=this._entries.get(n);e&&(this._entries.delete(n),this.root.remove(e.targetRay,e.grip),t.push(e))}return t}update(e,t,n,r){for(let i of this._entries.values()){let{source:a,targetRay:o,grip:s}=i,c=e.getPose(a.targetRaySpace,t),l=a.gripSpace?e.getPose(a.gripSpace,t):null;c?(this._applyPose(o,c,n),i.rayFrame=r):o.visible=!1,c&&l?this._applyPose(s,l,n):s.visible=!1}}hideAll(){for(let{targetRay:e,grip:t}of this._entries.values())e.visible=!1,t.visible=!1}fill(e,t,n){let r=this._entries.get(e);if(!r||r.rayFrame!==n||!r.targetRay.visible)return!1;let{matrixWorld:i}=r.targetRay;return t.ray.origin.setFromMatrixPosition(i),t.ray.direction.copy(this._dir.set(0,0,-1).transformDirection(i)),!0}clear(){for(let{targetRay:e,grip:t}of this._entries.values())this.root.remove(e,t);this._entries.clear()}entries(){return this._entries}_applyPose(e,t,n){let{position:r,orientation:i}=t.transform;e.position.set(n.x+r.x,n.y+r.y,n.z+r.z),e.quaternion.set(i.x,i.y,i.z,i.w),e.visible=!0,e.updateMatrixWorld(!0)}},$re=5e3;function eie(e){let t=[...new Set([e,`local`,`viewer`])];return t.slice(0,t.indexOf(`viewer`)+1)}function tie(){let e=Error(`会话在参考空间解析前已结束`);return e.aborted=!0,e}function A9(e){return e.map(e=>`${e.type}(${e.reason})`).join(`, `)}function nie(e,t){return HH(this,arguments,void 0,function*(e,t,n={}){var r,i,a;let o=(r=n.timeoutMs)==null?$re:r,s=n.isAborted,c=(i=n.schedule)==null?((e,t)=>setTimeout(e,t)):i,l=(a=n.clear)==null?(e=>clearTimeout(e)):a,u=eie(t),d=[];for(let n of u){let r=yield rie(e,n,o,c,l);if(s!=null&&s())throw tie();if(r.ok)return n!==t&&console.warn(`[XR] 参考空间降级:期望 ${t},实际采用 ${n};失败:${A9(d)}`),{space:r.space,type:n,failures:d};d.push({type:n,reason:r.reason})}let f=Error(`所有参考空间均不可用(期望 ${t}):${A9(d)}`);throw f.attempts=d,f})}function rie(e,t,n,r,i){return HH(this,void 0,void 0,function*(){let a,o=!1,s=new Promise(n=>{let r=e=>{o||n({ok:!0,space:e})},i=()=>{o||n({ok:!1,reason:`rejected`})};try{e.requestReferenceSpace(t).then(r,i)}catch(e){i()}}),c=new Promise(e=>{a=r(()=>e({ok:!1,reason:`timeout`}),n)});try{return yield Promise.race([s,c])}finally{o=!0,i(a)}})}q();var iie=5e3,j9=`会话在进入过程中已结束`,M9=class{static isBackendXRCapable(e){let t=e.backend;return(t==null?void 0:t.isWebGPUBackend)!==!0}static isBrowserXRCapable(){return typeof navigator<`u`&&`xr`in navigator}get isPresenting(){return this._isPresenting}get session(){return this._session}get frame(){return this._frame}get referenceSpaceType(){return this._referenceSpaceType}constructor(e,t,n){var r;this.inputs=new Qre,this._isPresenting=!1,this._session=null,this._frame=null,this._referenceSpaceType=null,this.refSpace=null,this.layer=null,this.entering=!1,this.entered=!1,this.endedDuringEnter=!1,this.snapshot=null,this.listeners=[],this.firstFrameArrived=!1,this.firstFrameWaiter=null,this.frameNo=0,this.submittedNear=NaN,this.submittedFar=NaN,this.offset=new j,this.info={time:0,hasPose:!1,headOrientation:new yo,headLocal:new j,views:[]},this.viewPool=[{eye:0,viewport:new Po},{eye:1,viewport:new Po}],this.frameViews=[],this.bridgeEyes=[],this.tmpViewport=new Po,this.tmpSize=new A,this.onSessionEndEvent=()=>{var e;if(this._session){if(!this.entered){this.endedDuringEnter=!0,(e=this.firstFrameWaiter)==null||e.reject(Error(j9));return}this.teardown()}},this.onInputSourcesChangeEvent=e=>{var t,n;if(!this._session)return;let{added:r,removed:i}=e;this.inputs.add(r),this.inputs.remove(i),(n=(t=this.callbacks).onInputSourcesChange)==null||n.call(t,r,i)},this.onSelectEvent=e=>{var t,n;(n=(t=this.callbacks).onSelect)==null||n.call(t,e.inputSource)},this.onReferenceSpaceReset=()=>{},this.renderer=e,this.options=t==null?{}:t,this.callbacks=n,this.bridge=new Zre(e,{atlasSamples:(r=this.options.atlasSamples)==null?0:r}),this.device=d5(),this.profile=h5(this.device,this.options.deviceProfile,e=>{console.warn(`[XR] Device_Profile 字段 ${e} 非法,已回落默认值`)});let i=()=>{let t=new Lf;return t.coordinateSystem=e.coordinateSystem,t};this.eyeCameras=[i(),i()],this.info.views=this.frameViews}enter(e){return HH(this,void 0,void 0,function*(){var t,n;if(!(this.entering||this.entered)){this.entering=!0,this.endedDuringEnter=!1,this.firstFrameArrived=!1,this._session=e;try{this.snapshot=this.captureRendererState(),this.bridge.verify(),this.bridge.verifyCameras(this.eyeCameras);let r=(t=this.renderer.backend)==null?void 0:t.gl;if(!r)throw Error(`[XRManager] 取不到 WebGL2 上下文(renderer.backend.gl),无法创建 XRWebGLLayer`);this.listen(e,`end`,this.onSessionEndEvent),this.listen(e,`inputsourceschange`,this.onInputSourcesChangeEvent),this.listen(e,`select`,this.onSelectEvent),yield r.makeXRCompatible(),this.throwIfEnded();let i=r.getContextAttributes(),a=new XRWebGLLayer(e,r,{alpha:!1,framebufferScaleFactor:1,antialias:i==null?void 0:i.antialias,depth:i==null?void 0:i.depth,stencil:i==null?void 0:i.stencil});this.layer=a;let o=this.options.foveation;o!==void 0&&`fixedFoveation`in a&&(a.fixedFoveation=J(o,0,1)),e.updateRenderState({baseLayer:a}),this.submittedNear=e.renderState.depthNear,this.submittedFar=e.renderState.depthFar,this.bridge.init(a);let s=yield nie(e,(n=this.options.referenceSpaceType)==null?`local-floor`:n,{isAborted:()=>this.endedDuringEnter});this.throwIfEnded(),this.refSpace=s.space,this._referenceSpaceType=s.type,this.listen(s.space,`reset`,this.onReferenceSpaceReset),aJ.shared.setContext(e),yield this.waitFirstFrame(),this.throwIfEnded(),this.syncExistingInputSources(e),this.entering=!1,this.entered=!0,this._isPresenting=!0;try{this.callbacks.onSessionStart(e,this.device)}catch(e){console.error(`[XR] onSessionStart 回调抛错`,e)}}catch(e){throw this.rollback(),this.endedDuringEnter?Error(j9):e}}})}exit(){return HH(this,void 0,void 0,function*(){let e=this._session;if(!(!this.entered||!e))try{yield e.end()}catch(t){this._session===e&&this.teardown()}})}dispose(){var e;let t=this._session;if(this.entering){this.endedDuringEnter=!0,(e=this.firstFrameWaiter)==null||e.reject(Error(j9)),t&&this.endQuietly(t);return}this.entered&&t&&(this.teardown(),this.endQuietly(t))}beginFrame(e,t,n,r,i){let a=this.info;a.time=t;let o=this._session,s=this.refSpace,c=this.layer;if(!o||!s||!c)return this.markNoPose(),a;this._frame=e,this.frameNo++,this.notifyFirstFrame();let l=e.getViewerPose(s),u=l==null?void 0:l.views,d=u?u.length:0;if(!l||!u||d!==1&&d!==2||!this.collectViews(c,u))return this.markNoPose(),this.inputs.hideAll(),a;let f=0,p=0,m=0;for(let e=0;e<d;e++){let t=u[e].transform.position;f+=t.x,p+=t.y,m+=t.z}a.headLocal.set(f/d,p/d,m/d);let h=l.transform.orientation;a.headOrientation.set(h.x,h.y,h.z,h.w),a.hasPose=!0,this.offset.copy(n).sub(a.headLocal);for(let e=0;e<d;e++){let t=u[e],a=this.eyeCameras[this.frameViews[e].eye];a.projectionMatrix.fromArray(t.projectionMatrix),a.projectionMatrixInverse.copy(a.projectionMatrix).invert();let o=t.transform.orientation;a.position.copy(n),a.quaternion.set(o.x,o.y,o.z,o.w),a.near=r,a.far=i,a.updateMatrixWorld(!0)}return this.syncDepthRange(o,r,i),this.inputs.update(e,s,this.offset,this.frameNo),a}renderEyes(e){var t;let n=this.layer;if(!n||!this._session||!this.info.hasPose)return!1;let r=this.bridgeEyes,i=this.frameViews;r.length=i.length;for(let e=0;e<i.length;e++){let n=(t=r[e])==null?r[e]={camera:this.eyeCameras[0],viewport:i[e].viewport}:t;n.camera=this.eyeCameras[i[e].eye],n.viewport=i[e].viewport}return this.bridge.renderFrame(n,e,r),!0}fillRaycaster(e,t){return this.inputs.fill(e,t,this.frameNo)}markNoPose(){this.info.hasPose=!1,this.frameViews.length=0}collectViews(e,t){let n=0;this.frameViews.length=0;for(let r=0;r<t.length;r++){let i=+(t[r].eye===`right`);n&1<<i&&(i=+(i===0)),n|=1<<i;let a=e.getViewport(t[r]);if(!a)return this.frameViews.length=0,!1;let o=this.viewPool[r];o.eye=i,o.viewport.set(a.x,a.y,a.width,a.height),this.frameViews.push(o)}return!0}syncDepthRange(e,t,n){t===this.submittedNear&&n===this.submittedFar||Number.isFinite(t)&&Number.isFinite(n)&&t>0&&n>t&&(e.updateRenderState({depthNear:t,depthFar:n}),this.submittedNear=t,this.submittedFar=n)}notifyFirstFrame(){var e;this.firstFrameArrived||(this.firstFrameArrived=!0,(e=this.firstFrameWaiter)==null||e.resolve())}throwIfEnded(){if(this.endedDuringEnter)throw Error(j9)}waitFirstFrame(){var e;if(this.firstFrameArrived)return Promise.resolve();let t=(e=this.options.firstFrameTimeoutMs)==null?iie:e;return new Promise((e,n)=>{let r=setTimeout(()=>{this.firstFrameWaiter=null,n(Error(`等待首帧超时(${t}ms 内未收到首个 XRFrame)`))},t);this.firstFrameWaiter={resolve:()=>{clearTimeout(r),this.firstFrameWaiter=null,e()},reject:e=>{clearTimeout(r),this.firstFrameWaiter=null,n(e)}}})}syncExistingInputSources(e){var t,n,r;let i=this.inputs.entries(),a=Array.from((t=e.inputSources)==null?[]:t).filter(e=>!i.has(e));a.length!==0&&(this.inputs.add(a),(r=(n=this.callbacks).onInputSourcesChange)==null||r.call(n,a,[]))}listen(e,t,n){e.addEventListener(t,n),this.listeners.push({target:e,type:t,handler:n})}removeListeners(){for(let{target:e,type:t,handler:n}of this.listeners)e.removeEventListener(t,n);this.listeners.length=0}captureRendererState(){let e=this.renderer;return{viewport:e.getViewport(new Po).clone(),autoClear:e.autoClear,autoClearColor:e.autoClearColor,autoClearDepth:e.autoClearDepth,autoClearStencil:e.autoClearStencil,pixelRatio:e.getPixelRatio(),size:e.getSize(new A).clone()}}restoreRendererState(){let e=this.snapshot;if(!e)return;this.snapshot=null;let t=this.renderer;t.autoClear=e.autoClear,t.autoClearColor=e.autoClearColor,t.autoClearDepth=e.autoClearDepth,t.autoClearStencil=e.autoClearStencil,t.getPixelRatio()!==e.pixelRatio&&t.setPixelRatio(e.pixelRatio),t.getSize(this.tmpSize).equals(e.size)||t.setSize(e.size.x,e.size.y),t.getViewport(this.tmpViewport).equals(e.viewport)||t.setViewport(e.viewport)}releaseFrameSource(e){let t=aJ.shared;e&&t.getContext()===e&&t.setContext(null)}clearReferences(){this._session=null,this._frame=null,this.refSpace=null,this._referenceSpaceType=null,this.layer=null,this.markNoPose(),this.frameNo=0,this.firstFrameArrived=!1,this.submittedNear=NaN,this.submittedFar=NaN}rollback(){var e;let t=this._session;(e=this.firstFrameWaiter)==null||e.reject(Error(j9)),this.removeListeners(),this.inputs.clear(),this.bridge.dispose(),this.releaseFrameSource(t),this.restoreRendererState(),this.clearReferences(),this._isPresenting=!1,this.entering=!1,this.entered=!1}teardown(){var e,t;let n=this._session;if(n){this._isPresenting=!1,this.entered=!1;try{(t=(e=this.callbacks).onSessionEnding)==null||t.call(e)}catch(e){console.error(`[XR] onSessionEnding 回调抛错`,e)}this.inputs.clear(),this.bridge.dispose(),this.removeListeners(),this.releaseFrameSource(n),this.restoreRendererState(),this.clearReferences(),this.callbacks.onSessionEnd(this.device)}}endQuietly(e){try{Promise.resolve(e.end()).catch(()=>{})}catch(e){}}};q();var N9={Handedness:Object.freeze({NONE:`none`,LEFT:`left`,RIGHT:`right`}),ComponentState:Object.freeze({DEFAULT:`default`,TOUCHED:`touched`,PRESSED:`pressed`}),ComponentProperty:Object.freeze({BUTTON:`button`,X_AXIS:`xAxis`,Y_AXIS:`yAxis`,STATE:`state`}),ComponentType:Object.freeze({TRIGGER:`trigger`,SQUEEZE:`squeeze`,TOUCHPAD:`touchpad`,THUMBSTICK:`thumbstick`,BUTTON:`button`}),ButtonTouchThreshold:.05,AxisTouchThreshold:.1,VisualResponseProperty:Object.freeze({TRANSFORM:`transform`,VISIBILITY:`visibility`})};function P9(e){return HH(this,void 0,void 0,function*(){let t=yield fetch(e);if(t.ok)return t.json();throw Error(t.statusText)})}function aie(e){return HH(this,void 0,void 0,function*(){if(!e)throw Error(`No basePath supplied`);return yield P9(`${e}/profilesList.json`)})}function oie(e,t){return HH(this,arguments,void 0,function*(e,t,n=null,r=!0){if(!e)throw Error(`No xrInputSource supplied`);if(!t)throw Error(`No basePath supplied`);let i=yield aie(t),a;if(e.profiles.some(e=>{let n=i[e];return n&&(a={profileId:e,profilePath:`${t}/${n.path}`,deprecated:!!n.deprecated}),!!a}),!a){if(!n)throw Error(`No matching profile name found`);let e=i[n];if(!e)throw Error(`No matching profile name found and default profile "${n}" missing.`);a={profileId:n,profilePath:`${t}/${e.path}`,deprecated:!!e.deprecated}}let o=yield P9(a.profilePath),s;if(r){let t;if(t=o.layouts[e.handedness],!t)throw Error(`No matching handedness, ${e.handedness}, in profile ${a.profileId}`);t.assetPath&&(s=a.profilePath.replace(`profile.json`,t.assetPath))}return{profile:o,assetPath:s}})}var sie={xAxis:0,yAxis:0,button:0,state:N9.ComponentState.DEFAULT};function cie(e=0,t=0){let n=e,r=t;if(Math.sqrt(e*e+t*t)>1){let i=Math.atan2(t,e);n=Math.cos(i),r=Math.sin(i)}return{normalizedXAxis:n*.5+.5,normalizedYAxis:r*.5+.5}}var lie=class{constructor(e){this.componentProperty=e.componentProperty,this.states=e.states,this.valueNodeName=e.valueNodeName,this.valueNodeProperty=e.valueNodeProperty,this.valueNodeProperty===N9.VisualResponseProperty.TRANSFORM&&(this.minNodeName=e.minNodeName,this.maxNodeName=e.maxNodeName),this.value=0,this.updateFromComponent(sie)}updateFromComponent({xAxis:e,yAxis:t,button:n,state:r}){let{normalizedXAxis:i,normalizedYAxis:a}=cie(e,t);switch(this.componentProperty){case N9.ComponentProperty.X_AXIS:this.value=this.states.includes(r)?i:.5;break;case N9.ComponentProperty.Y_AXIS:this.value=this.states.includes(r)?a:.5;break;case N9.ComponentProperty.BUTTON:this.value=this.states.includes(r)?n:0;break;case N9.ComponentProperty.STATE:this.valueNodeProperty===N9.VisualResponseProperty.VISIBILITY?this.value=this.states.includes(r):this.value=+!!this.states.includes(r);break;default:throw Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`)}}},uie=class{constructor(e,t){if(!e||!t||!t.visualResponses||!t.gamepadIndices||Object.keys(t.gamepadIndices).length===0)throw Error(`Invalid arguments supplied`);this.id=e,this.type=t.type,this.rootNodeName=t.rootNodeName,this.touchPointNodeName=t.touchPointNodeName,this.visualResponses={},Object.keys(t.visualResponses).forEach(e=>{let n=new lie(t.visualResponses[e]);this.visualResponses[e]=n}),this.gamepadIndices=Object.assign({},t.gamepadIndices),this.values={state:N9.ComponentState.DEFAULT,button:this.gamepadIndices.button===void 0?void 0:0,xAxis:this.gamepadIndices.xAxis===void 0?void 0:0,yAxis:this.gamepadIndices.yAxis===void 0?void 0:0}}get data(){return Object.assign({id:this.id},this.values)}updateFromGamepad(e){if(this.values.state=N9.ComponentState.DEFAULT,this.gamepadIndices.button!==void 0&&e.buttons.length>this.gamepadIndices.button){let t=e.buttons[this.gamepadIndices.button];this.values.button=t.value,this.values.button=this.values.button<0?0:this.values.button,this.values.button=this.values.button>1?1:this.values.button,t.pressed||this.values.button===1?this.values.state=N9.ComponentState.PRESSED:(t.touched||this.values.button>N9.ButtonTouchThreshold)&&(this.values.state=N9.ComponentState.TOUCHED)}this.gamepadIndices.xAxis!==void 0&&e.axes.length>this.gamepadIndices.xAxis&&(this.values.xAxis=e.axes[this.gamepadIndices.xAxis],this.values.xAxis=this.values.xAxis<-1?-1:this.values.xAxis,this.values.xAxis=this.values.xAxis>1?1:this.values.xAxis,this.values.state===N9.ComponentState.DEFAULT&&Math.abs(this.values.xAxis)>N9.AxisTouchThreshold&&(this.values.state=N9.ComponentState.TOUCHED)),this.gamepadIndices.yAxis!==void 0&&e.axes.length>this.gamepadIndices.yAxis&&(this.values.yAxis=e.axes[this.gamepadIndices.yAxis],this.values.yAxis=this.values.yAxis<-1?-1:this.values.yAxis,this.values.yAxis=this.values.yAxis>1?1:this.values.yAxis,this.values.state===N9.ComponentState.DEFAULT&&Math.abs(this.values.yAxis)>N9.AxisTouchThreshold&&(this.values.state=N9.ComponentState.TOUCHED)),Object.values(this.visualResponses).forEach(e=>{e.updateFromComponent(this.values)})}},die=class{constructor(e,t,n){if(!e)throw Error(`No xrInputSource supplied`);if(!t)throw Error(`No profile supplied`);this.xrInputSource=e,this.assetUrl=n,this.id=t.profileId,this.layoutDescription=t.layouts[e.handedness],this.components={},Object.keys(this.layoutDescription.components).forEach(e=>{let t=this.layoutDescription.components[e];this.components[e]=new uie(e,t)}),this.updateFromGamepad()}get gripSpace(){return this.xrInputSource.gripSpace}get targetRaySpace(){return this.xrInputSource.targetRaySpace}get data(){let e=[];return Object.values(this.components).forEach(t=>{e.push(t.data)}),e}updateFromGamepad(){Object.values(this.components).forEach(e=>{e.updateFromGamepad(this.xrInputSource.gamepad)})}},fie=`https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles`,pie=`generic-trigger`,mie=class extends ps{constructor(){super(),this.motionController=null,this.envMap=null}setEnvironmentMap(e){return this.envMap==e?this:(this.envMap=e,this.traverse(e=>{e instanceof pl&&e.isMesh&&(e.material.envMap=this.envMap,e.material.needsUpdate=!0)}),this)}updateMatrixWorld(e){super.updateMatrixWorld(e),this.motionController&&(this.motionController.updateFromGamepad(),Object.values(this.motionController.components).forEach(e=>{Object.values(e.visualResponses).forEach(e=>{let{valueNode:t,minNode:n,maxNode:r,value:i,valueNodeProperty:a}=e;t&&(a===N9.VisualResponseProperty.VISIBILITY?t.visible=i:a===N9.VisualResponseProperty.TRANSFORM&&(t.quaternion.copy(n.quaternion).slerp(r.quaternion,i),t.position.lerpVectors(n.position,r.position,i)))})}))}};function hie(e,t){Object.values(e.components).forEach(e=>{let{type:n,touchPointNodeName:r,visualResponses:i}=e;if(n===N9.ComponentType.TOUCHPAD)if(e.touchPointNode=t.getObjectByName(r),e.touchPointNode){let t=new pl(new Ed(.001),new tl({color:255}));e.touchPointNode.add(t)}else console.warn(`Could not find touch dot, ${e.touchPointNodeName}, in touchpad component ${e.id}`);Object.values(i).forEach(e=>{let{valueNodeName:n,minNodeName:r,maxNodeName:i,valueNodeProperty:a}=e;if(a===N9.VisualResponseProperty.TRANSFORM){if(e.minNode=t.getObjectByName(r),e.maxNode=t.getObjectByName(i),!e.minNode){console.warn(`Could not find ${r} in the model`);return}if(!e.maxNode){console.warn(`Could not find ${i} in the model`);return}}e.valueNode=t.getObjectByName(n),e.valueNode||console.warn(`Could not find ${n} in the model`)})})}function F9(e,t){hie(e.motionController,t),e.envMap&&t.traverse(t=>{t instanceof pl&&t.isMesh&&(t.material.envMap=e.envMap,t.material.needsUpdate=!0)}),e.add(t)}var gie=class{constructor(e=null){this.gltfLoader=e,this.path=fie,this._assetCache={}}createControllerModel(e){let t=new mie,n=null;return e.addEventListener(`connected`,e=>{let r=e.data;r.targetRayMode!==`tracked-pointer`||!r.gamepad||oie(r,this.path,pie).then(({profile:e,assetPath:i})=>{t.motionController=new die(r,e,i);let a=this._assetCache[t.motionController.assetUrl];if(a)n=a.scene.clone(),F9(t,n);else{if(!this.gltfLoader)throw Error(`GLTFLoader not set.`);this.gltfLoader.load(t.motionController.assetUrl,e=>{this._assetCache[t.motionController.assetUrl]=e,n=e.scene.clone(),F9(t,n)})}}).catch(e=>{console.warn(e)})}),e.addEventListener(`disconnected`,()=>{t.motionController=null,t.remove(n),n=null}),t}},_ie=class{constructor(){this.states=new Map}sample(e,t,n,r){let i=this.states.get(e),a=i==null?void 0:i.get(t);if(!a){if(!n)return[];let a=i;return a||(a=new Map,this.states.set(e,a)),a.set(t,{downAt:r,pressFired:!1}),[{type:`buttonDown`,name:t,source:e,time:r,duration:0}]}let o=r-a.downAt,s=o>=300;if(n)return s&&!a.pressFired?(a.pressFired=!0,[{type:`press`,name:t,source:e,time:r,duration:o}]):[];this.deleteState(e,t);let c=[];return a.pressFired?c.push({type:`buttonUp`,name:t,source:e,time:r,duration:o}):s?(c.push({type:`press`,name:t,source:e,time:r,duration:o}),c.push({type:`buttonUp`,name:t,source:e,time:r,duration:o})):(c.push({type:`buttonUp`,name:t,source:e,time:r,duration:o}),c.push({type:`tap`,name:t,source:e,time:r,duration:o})),c}removeSource(e,t){let n=this.states.get(e);if(!n)return[];let r=[];for(let[i,a]of n)r.push({type:`buttonUp`,name:i,source:e,time:t,duration:t-a.downAt});return this.states.delete(e),r}reset(e){let t=[];for(let[n,r]of this.states)for(let[i,a]of r)t.push({type:`buttonUp`,name:i,source:n,time:e,duration:e-a.downAt});return this.states.clear(),t}deleteState(e,t){let n=this.states.get(e);n&&(n.delete(t),n.size===0&&this.states.delete(e))}};q();var I9=Object.assign(Object.assign({},_q(n9,[`maxLatitude`,`minLatitude`])),{referenceSpaceType:`local-floor`,foveation:1,showControllerModel:!0,showPointerRay:!0,deviceProfile:{}}),L9=5,vie=1e-4,yie=1500;function bie(){return{load(e,t){hq.ajax(e,{responseType:`arraybuffer`}).then(t=>{var n;return OZ(t.body,{resourcePath:e.slice(0,e.lastIndexOf(`/`)+1),search:(n=e.split(`?`)[1])==null?``:n,fetcher:hq})}).then(e=>t(e)).catch(t=>{console.warn(`[XRPanorama] 手柄模型 glTF 加载失败,跳过模型挂载:`,e,t)})}}}var xie=class e extends r9{static parseArgs(t){if(t instanceof e)return t;let n=Object.assign(Object.assign({},t),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2});return super.parseArgs(n)}static initAnimationEndState(e){let t=this.parseArgs(e),n=super.initAnimationEndState(t);return Object.assign(Object.assign({},n),{mode:`XRPanorama`})}constructor(t){var n,r,i,a,o;let s=e.parseArgs(t);super(s),this.controllerRayFilled={left:!1,right:!1},this.controllerModelFactory=null,this.buttonStateMachine=new _ie,this.inputVisuals=new Map,this.inputsDirty=!1,this.walkedThisFrame=!1,this.lastFrameTime=0,this.walkSources={left:null,right:null},this.gazeRayPool=null,this.mode=`XRPanorama`;let c=I9,l=(n=t.referenceSpaceType)==null?c.referenceSpaceType:n,u=(r=t.foveation)==null?c.foveation:r;this.showControllerModel=(i=t.showControllerModel)==null?c.showControllerModel:i,this.showPointerRay=(a=t.showPointerRay)==null?c.showPointerRay:a,this.controllerRaycasters={left:this.createPickingRaycaster(),right:this.createPickingRaycaster()},this.gazeRaycaster=null,this.xrManager=new M9(this.renderer,{referenceSpaceType:l,foveation:u,deviceProfile:(o=t.deviceProfile)==null?c.deviceProfile:o},{onSessionStart:(e,t)=>{this.emit(`xr.session.start`,$(`xr.session.start`,{session:e,machineType:g5(t)}))},onSessionEnd:e=>{this.emit(`xr.session.end`,$(`xr.session.end`,{session:null,machineType:g5(e)}))},onSessionEnding:()=>{this.resetButtonStates(),this.clearInputVisuals()},onSelect:e=>this.onXRSelect(e),onInputSourcesChange:(e,t)=>{for(let e of t){this.removeInputVisual(e);for(let t of this.buttonStateMachine.removeSource(e,this.lastFrameTime))this.dispatchButtonEvent(t)}for(let t of e)this.syncInputVisual(t)}}),this.buttonMaps={left:this.createButtonMap(`left`),right:this.createButtonMap(`right`)},this.scene.add(this.xrManager.inputs.root);let d=aJ.shared.getContext();(d?this.xrManager.enter(d):Promise.reject(Error(`[XR] 缺少 XRSession:请经 Five.changeMode 进入 XRPanorama`))).catch(e=>{console.error(`[XR] 进入失败`,e),this.emit(`error`,e instanceof Error?e:Error(String(e)))})}updateConfiguration(e){let t=super.updateConfiguration(Object.assign(Object.assign({},e),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2}));return e.showControllerModel!==void 0&&e.showControllerModel!==this.showControllerModel&&(this.showControllerModel=e.showControllerModel,this.inputsDirty=!0),e.showPointerRay!==void 0&&e.showPointerRay!==this.showPointerRay&&(this.showPointerRay=e.showPointerRay,this.inputsDirty=!0),t}updateTime(e,t,...n){var r,i;if(this.destroyed)return;this.walkedThisFrame=!1,this.lastFrameTime=e;let a=n[1];if(this.userAction=!0,this.needsRender=!0,!a){this.controllerRayFilled.left=!1,this.controllerRayFilled.right=!1,this.gazeRaycaster=null,super.updateTime(e,t),this.intersect(e);return}super.updateTime(e,t);let o=this.xrManager.beginFrame(a,e,this.camera.position,this.camera.near,this.camera.far);if(o.hasPose&&this.syncCameraFromXR(o.headOrientation),this.inputsDirty){this.inputsDirty=!1;for(let e of this.xrManager.inputs.entries().keys())this.syncInputVisual(e)}this.updateControllerHelper((i=(r=this.xrManager.session)==null?void 0:r.inputSources)==null?[]:i,e,t),this.updateGazeRay(),this.intersect(e)}syncCameraFromXR(e){this.camera.quaternion.copy(e),this.camera.matrix.compose(this.camera.position,this.camera.quaternion,this.camera.scale),this.camera.computePose(this.camera.pose.distance)}render(){return this.xrManager.isPresenting?(this.xrManager.renderEyes(this.scene),!0):!1}updateCamera(e,t,n){return Promise.resolve()}updateCameraWithKeyframes(e,t,n){return Promise.resolve()}setCamera(e={}){e.offset&&this.camera.position.copy(e.offset),this.camera.matrix.compose(this.camera.position,this.camera.quaternion,this.camera.scale),this.camera.computePose(this.camera.pose.distance)}updateRenderSize(){this.needsRender=!0}isReady(){return!1}createPickingRaycaster(){let e=new em;return e.params.Points={threshold:.1},e.firstHitOnly=!0,e.floorIndex=-1,e}updateControllerHelper(e,t,n){var r,i,a;if(this.controllerRayFilled.left=!1,this.controllerRayFilled.right=!1,this.walkSources.left=null,this.walkSources.right=null,!e||e.length===0)return;let o={up:0,down:0,left:0,right:0},s={up:0,down:0,left:0,right:0},c={X:!1,Y:!1,LeftTrigger:!1,LeftPinch:!1,A:!1,B:!1,RightTrigger:!1,RightPinch:!1};for(let n=0;n<e.length;n++){let l=e[n];if(!l)continue;let u=l.handedness===`left`?`left`:`right`;this.xrManager.fillRaycaster(l,this.controllerRaycasters[u])&&(this.controllerRayFilled[u]=!0),this.readAxes(l.gamepad,u===`left`?o:s);let d=(r=l.gamepad)==null?void 0:r.buttons;for(let{name:e,index:n}of this.buttonMaps[u]){let r=(a=(i=d==null?void 0:d[n])==null?void 0:i.pressed)==null?!1:a;r&&(c[e]=!0);for(let n of this.buttonStateMachine.sample(l,e,r,t))this.dispatchButtonEvent(n)}}this.emit(`xr.controller.update`,$(`xr.controller.update`,{left:{axes:o,raycaster:this.controllerRaycasters.left,deltaTime:n},right:{axes:s,raycaster:this.controllerRaycasters.right,deltaTime:n},buttons:c})),this.walkByTap()}createButtonMap(e){let t=this.xrManager.profile.buttons,n=e===`left`,r=[[n?`LeftTrigger`:`RightTrigger`,t.trigger],[n?`X`:`A`,t.primary],[n?`Y`:`B`,t.secondary],[n?`LeftPinch`:`RightPinch`,t.pinch]],i=[];for(let[e,t]of r)t!==null&&i.push({name:e,index:t});return i}dispatchButtonEvent(e){let{type:t,name:n,source:r}=e,i=this.emitGesture(`xr.gesture.${t}`,n,t===`buttonDown`||t===`tap`,t===`buttonUp`||t===`tap`);t===`tap`&&!i.defaultPrevented&&(n===`RightTrigger`?this.walkSources.right=r:n===`LeftTrigger`&&(this.walkSources.left=r))}walkByTap(){this.tryWalk(this.walkSources.right,`right`),this.tryWalk(this.walkSources.left,`left`)}tryWalk(e,t){if(!e||this.walkedThisFrame)return;let n=this.controllerRaycasters[t];this.xrManager.fillRaycaster(e,n)&&(this.walkedThisFrame=!0,this.activePanoMesh=void 0,this.activeTime=void 0,this.checkSelectedPano(n))}resetButtonStates(){for(let e of this.buttonStateMachine.reset(this.lastFrameTime))this.dispatchButtonEvent(e)}readAxes(e,t){var n,r;if(!e)return;let{x:i,y:a}=this.xrManager.profile.axes,o=(n=i===null?0:e.axes[i])==null?0:n,s=(r=a===null?0:e.axes[a])==null?0:r;t.right=o>0?o:0,t.left=o<0?-o:0,t.down=s>0?s:0,t.up=s<0?-s:0}getControllerModelFactory(){if(!this.controllerModelFactory){let e=new gie;e.gltfLoader=bie(),this.controllerModelFactory=e}return this.controllerModelFactory}syncInputVisual(e){let t=this.xrManager.inputs.entries().get(e);if(!t)return;let n=this.inputVisuals.get(e);n||(n={},this.inputVisuals.set(e,n));let r=e.targetRayMode===`tracked-pointer`,i=r&&!!e.gamepad&&!!e.gripSpace&&this.showControllerModel&&this.xrManager.profile.model!==`none`;if(i&&!n.model){let r=new ps,i=this.getControllerModelFactory().createControllerModel(r);r.dispatchEvent({type:`connected`,data:e}),t.grip.add(i),n.model=i}else!i&&n.model&&(n.model.removeFromParent(),n.model=void 0);let a=r&&this.showPointerRay;if(a&&!n.ray){let e=new Cc;e.setAttribute(`position`,new dc([0,0,0,0,0,-5],3));let r=new lu({color:16777215,depthTest:!1,depthWrite:!1,transparent:!0}),i=new bu(e,r);i.renderOrder=999,i.frustumCulled=!1,t.targetRay.add(i),n.ray=i,n.rayLength=L9}else!a&&n.ray&&(this.disposeRay(n.ray),n.ray=void 0)}updatePointerRayLength(e,t){for(let[n,r]of this.inputVisuals){let i=r.ray;if(!i)continue;let a=n.handedness===`left`?`left`:`right`,o=L9;if(e&&t&&e===this.controllerRaycasters[a]&&(o=Math.min(e.ray.origin.distanceTo(t),L9)),r.rayLength!==void 0&&Math.abs(r.rayLength-o)<vie)continue;let s=i.geometry.getAttribute(`position`);s.setZ(1,-o),s.needsUpdate=!0,r.rayLength=o}}removeInputVisual(e){var t;let n=this.inputVisuals.get(e);n&&((t=n.model)==null||t.removeFromParent(),n.ray&&this.disposeRay(n.ray),this.inputVisuals.delete(e))}clearInputVisuals(){for(let e of Array.from(this.inputVisuals.keys()))this.removeInputVisual(e)}disposeRay(e){e.removeFromParent(),e.geometry.dispose(),e.material.dispose()}emitGesture(e,t,n,r){let i=$(e,{session:this.xrManager.session,buttons:t,machineType:g5(this.xrManager.device),isFirst:n,isFinal:r,controllers:{raycaster:{leftRay:this.controllerRaycasters.left,rightRay:this.controllerRaycasters.right}}});return this.emit(e,i),i}updateGazeRay(){var e,t;let n=(e=this.xrManager.session)==null?void 0:e.inputSources;if(!n||n.length===0){this.gazeRaycaster=null;return}let r=null;for(let e=0;e<n.length;e++){let t=n[e];if(!t)continue;let i=t.targetRayMode;if(i===`transient-pointer`||i===`gaze`||t.hand!=null){r=t;break}}if(!r){this.gazeRaycaster=null;return}let i=(t=this.gazeRayPool)==null?this.gazeRayPool=this.createPickingRaycaster():t;this.gazeRaycaster=this.xrManager.fillRaycaster(r,i)?i:null}onXRSelect(e){var t;if(e.targetRayMode!==`gaze`&&e.targetRayMode!==`transient-pointer`)return;let n=(t=this.gazeRayPool)==null?this.gazeRayPool=this.createPickingRaycaster():t;this.xrManager.fillRaycaster(e,n)&&this.checkSelectedPano(n)}pickPickingRaycaster(){return this.gazeRaycaster?this.gazeRaycaster:this.controllerRayFilled.right?this.controllerRaycasters.right:this.controllerRayFilled.left?this.controllerRaycasters.left:null}intersect(e){var t,n;if(this.locationMotion.ended===!1){this.intersectMesh.visible=!1,this.activePanoMesh=void 0,this.activeTime=void 0,this.updatePointerRayLength(null,null);return}if(this.activePanoMesh&&this.activeTime&&e-this.activeTime>yie){let e=this.activePanoMesh,t=null;return this.panoMeshes.forEach((n,r)=>{n===e&&(t=r)}),t!==null&&(this.moveToPano(k3(t),{},!0),this.walkedThisFrame=!0),this.activePanoMesh=void 0,this.activeTime=void 0,this.updatePointerRayLength(null,null),e}let r=this.pickPickingRaycaster();if(!r){this.intersectMesh.visible=!1,this.activePanoMesh=void 0,this.activeTime=void 0,this.updatePointerRayLength(null,null);return}let i,a=[],o=this.works.getObserver(this.currentPano),s=o?o.accessibleNodes.map(e=>O3({panoIndex:e,workCode:o.work.workCode})):[];for(let e of s){let i=this.panoMeshes.get(e);if(i){let[e]=r.intersectObject((t=i.hitTestMesh)==null?i:t,!0);if(e){let t=(n=o==null?void 0:o.floorIndex)==null?0:n;a.push({panoMesh:i,intersection:Object.assign({floorIndex:t,floor:t},e)})}}}let[c]=a.sort((e,t)=>e.intersection.distance-t.intersection.distance);c?(i=c.intersection,this.activePanoMesh!==c.panoMesh&&(this.activePanoMesh=c.panoMesh,this.activeTime=e),this.intersectMesh.position.copy(c.panoMesh.position),this.intersectMesh.lookAt(this.camera.position)):(this.activePanoMesh=void 0,this.activeTime=void 0),i||(i=this.modelScene.intersectRaycaster(r)[0]),this.updatePointerRayLength(r,i?i.point:null);let l=$(`intersect.update`,{raycaster:r,intersection:i==null?null:i,object:this.intersectMesh});if(this.emit(`intersect.update`,l),l.defaultPrevented){this.hideIntersectMesh();return}if(i&&i.face){let e=i.face.normal,t=new yo;t.setFromUnitVectors(new j(0,0,1),e),this.intersectMesh.quaternion.copy(t);let n=i.point.clone();this.intersectMesh.position.copy(n),c?this.intersectMesh.visible=!1:this.intersectMesh.visible=!0}else this.intersectMesh.visible=!1;return c==null?void 0:c.panoMesh}checkSelectedPano(e){var t;this.stopMomentumMovement();let n=this.works.getObserver(this.currentPano);if(!n)return;let r=n.work.observers,i=n.accessibleNodes.filter(e=>{if(e===this.currentPano.panoIndex&&n.work.workCode===this.currentPano.workCode)return!1;let t=r[e];return!t||t.position.clone().applyMatrix4(t.work.transform).distanceTo(this.camera.position)>this.maxAccessibleDistance?!1:t.loadable||t.active}),a=null,[o]=this.modelScene.intersectRaycaster(e);if(o){let[e,n]=rQ(i,e=>{let t=r[e];return t?t.standingPosition.clone().applyMatrix4(t.work.transform).distanceTo(o.point):1/0},!0);typeof e==`number`&&n<this.panoTapTriggerRadius&&(a=(t=r[e])==null?null:t)}if(a||(a=this.getForwardObserverOrNot(this.xrManager.eyeCameras[0],e)),a&&a.panoId===O3(this.currentPano)&&(a=null),a&&!this.locationMotion.ended){for(let e of this.locationMotion.keyframes)if(this.panoResourceFromLocationMotionKeyframe(e).panoId===a.panoId){a=null;break}}if(!a){this.locationMotion.ended===!0&&this.cameraBounce();return}let s={workCode:a.work.workCode,panoIndex:a.panoIndex,mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,distance:0,offset:a.position.clone()};if(this.emit(`pano.select`,$(`pano.select`,{prevPano:this.currentPano,state:s,userAction:!0,options:{},progress:0,error:null})),!a.active){let e=this.panoMeshes.get(a.panoId);e&&(e.setDisabled(!1),e.setLoading(!0));return}this.emit(`pano.request`,$(`pano.request`,{userAction:!0,prevPano:this.currentPano,state:s,options:{},progress:0,error:null}))}destroy(){super.destroy(),this.xrManager.dispose(),this.clearInputVisuals(),this.scene.remove(this.xrManager.inputs.root)}onPanGesture(){}onTapGesture(){}onPinchGesture(){}onMouseMove(){}onMouseOut(){}};q();var Sie=new j(0,1.6,0),R9=new Rs,z9=new j,Cie=Object.assign({},D7),wie=class e extends O7{static parseArgs(t){return t instanceof e?t:super.parseArgs(t)}static initAnimationEndState(e){var t,n,r,i,a,o;let s=this.parseArgs(e),c=s.works,{state:l,currentState:u}=e.initial,d=typeof l.panoIndex==`number`?{workCode:(r=(t=l.workCode)==null?(n=s.works[0])==null?void 0:n.workCode:t)==null?``:r,panoIndex:l.panoIndex}:{workCode:u.workCode,panoIndex:u.panoIndex},f=c.getObserver(d),p=J((i=l.fov)==null?!f||t7(u.mode)?u.fov:s.defaultFov:i,s.minFov,s.maxFov),m=(a=l.longitude)==null?u.longitude:a,h=J(typeof s.minLatitude==`function`?s.minLatitude(p):s.minLatitude,-Math.PI/2,Math.PI/2),g=J(typeof s.maxLatitude==`function`?s.maxLatitude(p):s.maxLatitude,-Math.PI/2,Math.PI/2),_=J((o=l.latitude)==null?!f||t7(u.mode)?u.latitude:s.defaultLatitude:o,h,g),v=new j;if(s.initial.state.offset)v.copy(s.initial.state.offset);else if(f)v.copy(f.position).applyMatrix4(f.work.transform);else{let e=ZU(u).setLength(u.distance);v.copy(s.initial.currentState.offset).sub(e)}return{workCode:d.workCode,panoIndex:d.panoIndex,mode:`Model`,longitude:m,latitude:_,fov:p,offset:v,distance:0}}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Model`,this.locationMotion=new qQ({x:this.camera.pose.offset.x,y:this.camera.pose.offset.y,z:this.camera.pose.offset.z,distance:this.camera.pose.distance}),this.modelAlphaMotion=new qQ({modelAlpha:this.modelScene.parameter.resolveValue().modelAlpha}),this.perspToOrthoMotion=new qQ({perspToOrtho:this.camera.perspToOrtho.x})}updateConfiguration(e){return super.updateConfiguration(e)}destroy(){super.destroy(),this.locationMotion.dispose()}isReady(){return this.locationMotion.ended===!1?!1:super.isReady()}updateWork(t,n,r,i){this.works=t;let a=e.initAnimationEndState(Object.assign(Object.assign({},this),{initial:{currentState:Object.assign(Object.assign({},this.currentPano),this.camera.pose),duration:r.duration,effect:r.effect,state:n,userAction:i}}));return(a.workCode!==this.currentPano.workCode||a.panoIndex!==this.currentPano.panoIndex||a.longitude!==this.cameraMotion.value.longitude||a.latitude!==this.cameraMotion.value.latitude||a.fov!==this.cameraMotion.value.fov)&&this.moveToPosition(a.offset,{duration:0,longitude:a.longitude,latitude:a.latitude,fov:a.fov},i),!0}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},i={};return r.distance=0,e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(i.longitude=e.longitude),e.latitude!==void 0&&(i.latitude=e.latitude),e.fov!==void 0&&(i.fov=e.fov),this.locationMotion.set(r,t).catch(Y),this.cameraMotion.set(i,t).catch(Y)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],i=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:0,x:t.value.offset.x,y:t.value.offset.x,z:t.value.offset.x}}),i.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(Y),this.cameraMotion.setKeyframes(e,t)})}updateTime(e,t,...n){if(this.destroyed)return;let r={},i={};if(this.modelAlphaMotion.ended||(this.modelAlphaMotion.update(e),r.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.modelScene.parameter.modelAlpha===0&&this.modelScene.parameter.progress!==1){let{pano0:e,pano1:t}=this.modelScene.parameter;e&&e.map!==(t==null?void 0:t.map)&&e.map.dispose(),r.progress=1,r.pano0=r.pano1=t}if(this.perspToOrthoMotion.ended||(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(J(this.perspToOrthoMotion.value.perspToOrtho,0,1))),!this.locationMotion.ended){this.locationMotion.update(e),i.distance=this.locationMotion.value.distance,i.offset=new j(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z);let t=new j(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),n=[];for(let e of this.works){let r=this.modelScene.models.find(t=>t.work===e);if(!(!r||r.visible===!1)&&!(e.observers.length<=0)&&(R9.copy(e.observerBox).expandByScalar(10).applyMatrix4(e.transform),R9.containsPoint(t)))for(let t of e.observers)n.push(t)}let r=rQ(n,e=>z9.copy(e.position).applyMatrix4(e.work.transform).distanceTo(t));this.currentPano=r?{workCode:r.work.workCode,panoIndex:r.panoIndex}:{workCode:``,panoIndex:0}}this.cameraMotion.ended||(this.cameraMotion.update(e),i.longitude=this.cameraMotion.value.longitude,i.latitude=this.cameraMotion.value.latitude,i.fov=this.cameraMotion.value.fov),n7(r)||this.modelScene.parameter.set(r),n7(i)||this.setCamera(i);let a=this.works.getObserver(this.currentPano);if(this.intersectMesh&&this.intersectMesh.parent&&a&&a.position.y-a.standingPosition.y>10){let e=J(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1)}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:i,userAction:a}=this.initial;this.userAction=a;let o=e.initAnimationEndState(this),s={modelAlpha:1},c={perspToOrtho:0},l={longitude:o.longitude,latitude:o.latitude,fov:o.fov,duration:i,moveStartCallback:e=>{this.perspToOrthoMotion.set(c,i).catch(Y),this.modelAlphaMotion.set(s,i).catch(Y),this.emit(`initAnimation.start`,$(`initAnimation.start`,{state:e,userAction:this.userAction}))},moveEndCallback:e=>{this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:e,userAction:this.userAction})),t()},moveCancelCallback:()=>{let e=this.currentPano,n=Object.assign(Object.assign({},e),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance});this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:n,userAction:this.userAction})),t()}};this.moveToPosition(o.offset,l,a)})}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(nW())[1],t=this.locationMotion.getKeyFrameSegment(nW())[1];return Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,offset:new j(t.value.x,t.value.y,t.value.z),distance:t.value.distance})}moveToPano(e,t={},n){let r=this.works.getObserver(e);if(r){let e=new j().copy(r.position).applyMatrix4(r.work.transform);this.moveToPosition(e,t,n)}}moveToPosition(e,t={},n){var r,i,a;this.userAction=n,this.stopMomentumMovement();let o=nW(),s=new j(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),c=s.distanceTo(e),l=this.locationMotion.getProgressVelocity(o),u=0;for(let e=1;e<this.locationMotion.keyframes.length;e++){let{x:t,y:n,z:r}=this.locationMotion.keyframes[e-1].value,{x:i,y:a,z:o}=this.locationMotion.keyframes[e].value;u+=Math.sqrt(Math.pow(i-t,2)+Math.pow(a-n,2)+Math.pow(o-r,2))}let d=c===0?0:l*u/c,f=this.calculateMovingDuration(t.duration,c),p={x:e.x,y:e.y,z:e.z,distance:0},m={longitude:t.longitude,latitude:t.latitude,fov:t.fov},h=[];for(let e of this.works){let t=this.modelScene.models.find(t=>t.work===e);if(!(!t||t.visible===!1)&&!(e.observers.length<=0)&&(R9.copy(e.observerBox).expandByScalar(10).applyMatrix4(e.transform),R9.containsPoint(s)))for(let t of e.observers)h.push(t)}let g=rQ(h,e=>z9.copy(e.position).applyMatrix4(e.work.transform).distanceTo(s)),_=g?{workCode:g.work.workCode,panoIndex:g.panoIndex}:{workCode:``,panoIndex:0},v=Object.assign(Object.assign({},_),{mode:this.mode,longitude:(r=m.longitude)==null?this.camera.pose.longitude:r,latitude:(i=m.latitude)==null?this.camera.pose.latitude:i,fov:(a=m.fov)==null?this.camera.pose.fov:a,offset:e.clone(),distance:0}),y=this.currentPano;this.emit(`pano.moveTo`,$(`pano.moveTo`,{options:t,prevPano:y,progress:0,state:v,userAction:this.userAction,error:null})),t.moveStartCallback&&t.moveStartCallback(v),this.cameraMotion.set(m,f).catch(Y),this.locationMotion.set(p,f,d).then(()=>{for(let e of this.modelScene.children)e instanceof Y4&&e.show();let e=Object.assign(Object.assign(Object.assign({},_),{mode:this.mode}),$5(this.camera.pose));this.emit(`pano.arrived`,$(`pano.arrived`,{options:t,prevPano:y,progress:0,state:e,userAction:this.userAction,error:null})),t.moveEndCallback&&t.moveEndCallback(e)},()=>{t.moveCancelCallback&&t.moveCancelCallback(),this.emit(`pano.cancel`,$(`pano.cancel`,{options:t,prevPano:y,progress:0,state:v,userAction:this.userAction,error:null}))})}onTapGesture(e){let t=e.center.raycaster;this.stopMomentumMovement();let[n]=this.modelScene.intersectRaycaster(t);if(n&&n.face){let e=n.face.normal,t=n.point;if(new j(0,1,0).angleTo(e)>Math.PI/3){let r=new em;r.firstHitOnly=!0;let i=e.clone().setLength(.3).add(t);r.set(i,new j(0,-1,0)),n=this.modelScene.intersectRaycaster(r)[0]}}if(n){let t=new j().copy(n.point).add(Sie),r=[];for(let e of this.works){let n=this.modelScene.models.find(t=>t.work===e);if(!(!n||n.visible===!1)&&!(e.observers.length<=0)&&(R9.copy(e.observerBox).expandByScalar(10).applyMatrix4(e.transform),R9.containsPoint(t)))for(let t of e.observers)r.push(t)}let[i,a]=rQ(r,e=>z9.copy(e.position).applyMatrix4(e.work.transform).distanceTo(t),!0);i&&a<5&&(t.y=z9.copy(i.position).applyMatrix4(i.work.transform).y),e.state.offset.copy(t),e.state.distance=0,this.emit(`gesture.tap`,e),e.defaultPrevented||this.moveToPosition(t,{},!0)}else this.emit(`gesture.tap`,e),e.defaultPrevented||this.cameraBounce()}};q();var B9=new Rs,Tie=new j,V9=.5,H9=Math.PI/7,U9={defaultLongitude:Math.PI/4,defaultLatitude:Math.PI/4,defaultDistance:150,maxLatitude:Math.PI/2,minLatitude:0,cameraType:`auto`,cameraFence:null,intersectMeshCreator:()=>new S7},W9={Floorplan:T7,Topview:Xne,Panorama:r9,VRPanorama:Xre,XRPanorama:xie,Model:wie,Mapview:class e extends m7{static parseArgs(t){var n,r,i,a,o,s,c,l;if(t instanceof e)return t;let u=super.parseArgs(t);return Object.assign(Object.assign({},u),{defaultLongitude:(n=t.defaultLongitude)==null?U9.defaultLongitude:n,defaultLatitude:(r=t.defaultLatitude)==null?U9.defaultLatitude:r,defaultDistance:(i=t.defaultDistance)==null?U9.defaultDistance:i,maxLatitude:(a=t.maxLatitude)==null?U9.maxLatitude:a,minLatitude:(o=t.minLatitude)==null?U9.minLatitude:o,cameraType:(s=t.cameraType)==null?U9.cameraType:s,cameraFence:(c=t.cameraFence)==null?U9.cameraFence:c,intersectMeshCreator:(l=t.intersectMeshCreator)==null?U9.intersectMeshCreator:l})}static distanceFromModel(e,t,n){let r=e.boundingBox,i=r.isEmpty()?10:Math.pow(Math.pow(r.max.x-r.min.x+1,2)+Math.pow(r.max.y-r.min.y+1,2)+Math.pow(r.max.z-r.min.z+1,2),1/2);i=isNaN(i)||!isFinite(i)?1:i;let a=i/2/Math.tan(Math.PI*t/360);return n<1&&(a/=n),isNaN(a)||!isFinite(a)?i:a}static initAnimationEndState(t){var n,r,i,a,o,s,c;let l=this.parseArgs(t),u=l.works,d=l.modelScene,{state:f,currentState:p}=t.initial,m=typeof f.panoIndex==`number`?{workCode:(i=(n=f.workCode)==null?(r=l.works[0])==null?void 0:r.workCode:n)==null?``:i,panoIndex:f.panoIndex}:{workCode:p.workCode,panoIndex:p.panoIndex},h=(a=f.fov)==null?60:a,g=J(typeof l.minLatitude==`function`?l.minLatitude(h):l.minLatitude,-Math.PI/2,Math.PI/2),_=J(typeof l.maxLatitude==`function`?l.maxLatitude(h):l.maxLatitude,-Math.PI/2,Math.PI/2),v=J((o=f.latitude)==null?e7(p.mode)?p.latitude:l.defaultLatitude:o,g,_),y=e.distanceFromModel(l.modelScene,h,l.camera.aspect),b=new j,x=(s=f.distance)==null?Math.min(l.defaultDistance,y):s,S=(c=f.longitude)==null?e7(p.mode)?p.longitude:l.defaultLongitude:c;if(f.offset)b.copy(f.offset);else{let e=u.getObserver(m);l.defaultDistance<y&&e?(b.copy(e.position).applyMatrix4(e.work.transform),f.longitude===void 0&&(S=p.longitude)):(d.boundingBox.getCenter(b),x=y)}return Object.assign(Object.assign({},m),{mode:`Mapview`,longitude:S,latitude:v,fov:h,offset:b,distance:x})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Mapview`,this.defaultLongitude=n.defaultLongitude,this.defaultLatitude=n.defaultLatitude,this.defaultDistance=n.defaultDistance,this.maxLatitude=n.maxLatitude,this.minLatitude=n.minLatitude,this.cameraType=n.cameraType,this.cameraFence=n.cameraFence,this.locationMotion=new qQ({x:this.camera.pose.offset.x,y:this.camera.pose.offset.y,z:this.camera.pose.offset.z,distance:this.camera.pose.distance}),this.modelAlphaMotion=new qQ({modelAlpha:this.modelScene.parameter.resolveValue().modelAlpha}),this.perspToOrthoMotion=new qQ({perspToOrtho:this.camera.perspToOrtho.x}),this.pendingTextureId=null,this.textureLoader=new _J,this.intersectMeshCreator=n.intersectMeshCreator,this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=`intersect`,this.intersectMesh.visible=!1,this.helper.add(this.intersectMesh)}updateConfiguration(e){if(super.updateConfiguration(e)===!1)return!1;if(e.defaultLongitude!==void 0&&this.defaultLongitude!==e.defaultLongitude&&(this.defaultLongitude=e.defaultLongitude),e.defaultLatitude!==void 0&&this.defaultLatitude!==e.defaultLatitude&&(this.defaultLatitude=e.defaultLatitude),e.defaultDistance!==void 0&&this.defaultDistance!==e.defaultDistance&&(this.defaultDistance=e.defaultDistance),e.maxLatitude!==void 0&&this.maxLatitude!==e.maxLatitude&&(this.maxLatitude=e.maxLatitude),e.minLatitude!==void 0&&this.minLatitude!==e.minLatitude&&(this.minLatitude=e.minLatitude),e.cameraType!==void 0&&this.cameraType!==e.cameraType&&(this.cameraType=e.cameraType),this.cameraFence instanceof Rs&&e.cameraFence instanceof Rs||this.cameraFence instanceof hc&&e.cameraFence instanceof hc?this.cameraFence.equals(e.cameraFence)||(this.cameraFence=e.cameraFence):e.cameraFence!==void 0&&(this.cameraFence=e.cameraFence),e.intersectMeshCreator!==void 0&&this.intersectMeshCreator!==e.intersectMeshCreator){this.intersectMeshCreator=e.intersectMeshCreator;let t=this.intersectMesh;this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=t.name,this.intersectMesh.visible=t.visible;let n=this.intersectMesh.parent;n&&n.add(this.intersectMesh),t.dispose()}return!0}destroy(){super.destroy(),this.pendingTextureId=null,this.locationMotion.dispose(),this.panState=void 0,this.intersectMesh.dispose(),this.helper.remove(this.intersectMesh)}isReady(){return this.locationMotion.ended===!1?!1:super.isReady()}updateWork(t,n,r,i){this.userAction=i,this.works=t;let a=e.initAnimationEndState(Object.assign(Object.assign({},this),{initial:{currentState:Object.assign(Object.assign({},this.currentPano),this.camera.pose),duration:r.duration,effect:r.effect,state:n,userAction:i}}));this.currentPano={workCode:a.workCode,panoIndex:a.panoIndex};let o={longitude:a.longitude,latitude:a.latitude,fov:a.fov},s={x:a.offset.x,y:a.offset.y,z:a.offset.z,distance:a.distance};return(o.longitude!==this.cameraMotion.value.longitude||o.latitude!==this.cameraMotion.value.latitude||o.fov!==this.cameraMotion.value.fov)&&this.cameraMotion.set(o,r.duration).catch(Y),(s.x!==this.locationMotion.value.x||s.y!==this.locationMotion.value.y||s.z!==this.locationMotion.value.z||s.distance!==this.locationMotion.value.distance)&&this.locationMotion.set(s,r.duration).catch(Y),!0}updateModel(e){super.updateModel(e),this.hideIntersectMesh()}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},i={};return e.distance!==void 0&&(r.distance=e.distance),e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(i.longitude=e.longitude),e.latitude!==void 0&&(i.latitude=e.latitude),e.fov!==void 0&&(i.fov=e.fov),this.locationMotion.set(r,t).catch(Y),this.cameraMotion.set(i,t).catch(Y)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],i=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:t.value.distance,x:t.value.offset.x,y:t.value.offset.x,z:t.value.offset.x}}),i.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(Y),this.cameraMotion.setKeyframes(e,t)})}updateTime(e,t){if(this.destroyed)return;let n={},r={};if(this.locationMotion.ended||(this.locationMotion.update(e),r.distance=this.locationMotion.value.distance,r.offset=new j(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z)),this.cameraMotion.ended||(this.cameraMotion.update(e),r.longitude=this.cameraMotion.value.longitude,r.latitude=this.cameraMotion.value.latitude,r.fov=this.cameraMotion.value.fov),this.modelAlphaMotion.ended||(this.modelAlphaMotion.update(e),n.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.modelScene.parameter.modelAlpha===0&&this.modelScene.parameter.progress!==1){let{pano0:e,pano1:t}=this.modelScene.parameter;e&&e.map!==(t==null?void 0:t.map)&&e.map.dispose(),n.progress=1,n.pano0=n.pano1=t}let i=0;if(this.cameraType===`auto`?i=+(Math.abs(Math.PI/2-this.cameraMotion.value.latitude)<.02||Math.abs(-Math.PI/2-this.cameraMotion.value.latitude)<.02):this.cameraType===`perspective`?i=0:this.cameraType===`orthographic`&&(i=1),this.perspToOrthoMotion.getTargetKeyframe().value.perspToOrtho!==i&&this.perspToOrthoMotion.set({perspToOrtho:i},500).catch(Y),this.perspToOrthoMotion.ended||(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(J(this.perspToOrthoMotion.value.perspToOrtho,0,1))),n7(n)||this.modelScene.parameter.set(n),n7(r)||this.setCamera(r),this.cameraFence&&!this.panState&&!this.pinchState&&!this.mouseWheelState&&!this.inMomentumMovement&&this.locationMotion.ended&&this.perspToOrthoMotion.ended&&this.cameraMotion.ended){let e=ZU(this.camera.pose,new j),t=new j().copy(this.camera.pose.offset).sub(e.clone().multiplyScalar(this.camera.pose.distance));if(this.cameraFence.distanceToPoint(t)>.01){let e=this.cameraFence.clampPoint(t,new j),n=this.camera.pose.offset.clone().add(e).sub(t),r=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:n,distance:this.camera.pose.distance});this.fixFinalState(r),this.locationMotion.set({x:r.offset.x,y:r.offset.y,z:r.offset.z,distance:r.distance},300).catch(Y)}}if(this.intersectMesh&&this.intersectMesh.parent){let e=J(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1)}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(nW())[1],t=this.locationMotion.getKeyFrameSegment(nW())[1];return Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,distance:t.value.distance,offset:new j(t.value.x,t.value.y,t.value.z)})}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:i,userAction:a}=this.initial;this.userAction=a;let o=e.initAnimationEndState(this),s={longitude:o.longitude,latitude:o.latitude,fov:o.fov},c={x:o.offset.x,y:o.offset.y,z:o.offset.z,distance:o.distance};this.emit(`initAnimation.start`,$(`initAnimation.start`,{state:o,userAction:this.userAction})),this.perspToOrthoMotion.set({perspToOrtho:0},i).catch(Y),this.modelAlphaMotion.set({modelAlpha:1},i/3).catch(Y),this.cameraMotion.set(s,i).catch(Y),this.locationMotion.set(c,i).then(()=>{this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:o,userAction:this.userAction}))},e=>{let t=Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),$5(this.camera.pose));this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:t,userAction:this.userAction}))}).then(()=>{t()})})}getForwardObserverOrNot(e){let[t]=this.modelScene.intersectRaycaster(e);if(!t)return null;let n=[];for(let t of this.works){let r=this.modelScene.models.find(e=>e.work===t);if(!(!r||r.visible===!1)&&!(t.observers.length<=0)&&(B9.copy(t.observerBox).expandByScalar(10).applyMatrix4(t.transform),B9.containsPoint(e.ray.origin)||e.ray.intersectsBox(B9)))for(let e of t.observers)n.push(e)}let[r,i]=rQ(n,e=>Tie.copy(e.standingPosition).applyMatrix4(e.work.transform).distanceTo(t.point),!0);return r&&i<Math.max(r.standingPosition.distanceTo(this.camera.position)/5,10)?r:null}coordinatesForOffset(e){let t=this.renderer.getSize(new A);return{longitude:-2*e.x/(t.x*this.viewport.width),latitude:2*e.y/(t.y*this.viewport.height)}}requestMomentumMovement(e,t,n,r){if(this.inMomentumMovement===null)return;r=Math.max(r,1);let i=Object.assign({},n),a={longitude:0,latitude:0,x:0,y:0,z:0};for(let e=0;e<r;e++)i.longitude*=.996,i.latitude*=.996*.998,i.x*=.99,i.y*=.99,i.z*=.99,a.longitude+=i.longitude,a.latitude+=i.latitude,a.x+=i.x,a.y+=i.y,a.z+=i.z;let o=this.cameraMotion.value.fov,s=XU(this.cameraMotion.value.longitude+a.longitude),c=J(typeof this.minLatitude==`function`?this.minLatitude(o):this.minLatitude,-Math.PI/2,Math.PI/2),l=J(typeof this.maxLatitude==`function`?this.maxLatitude(o):this.maxLatitude,-Math.PI/2,Math.PI/2),u=J(this.cameraMotion.value.latitude+a.latitude,c,l),d=new j(this.locationMotion.value.x+a.x,this.locationMotion.value.y+a.y,this.locationMotion.value.z+a.z),f=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:s,latitude:u,offset:d,fov:o,distance:this.locationMotion.value.distance}),p=e.state.offset.clone().sub(ZU(e.state).setLength(f.distance)),m=!(Math.abs(i.longitude)>1e-4||Math.abs(i.latitude)>1e-4||Math.abs(i.x)>1e-4||Math.abs(i.y)>1e-4||Math.abs(i.z)>1e-4);(this.cameraFence?this.cameraFence.containsPoint(p):!0)===!1&&(m=!0);let h=$(`gesture.momentum`,Object.assign(Object.assign({},e),{isFirst:t,isFinal:m,state:f}));if(this.emit(`gesture.fire`,h),this.inMomentumMovement.event=h,this.emit(`gesture.momentum`,h),e.defaultPrevented){this.inMomentumMovement=null;return}this.inMomentumMovement&&(this.cameraMotion.set({longitude:s,latitude:u},0).catch(Y),this.locationMotion.set({x:f.offset.x,y:f.offset.y,z:f.offset.z,distance:f.distance},0).catch(Y),m?this.inMomentumMovement=null:aJ.shared.add((t,n)=>{this.requestMomentumMovement(e,!1,i,n)},!0))}fixFinalState(e){if(this.perspToOrthoMotion.getTargetKeyframe().value.perspToOrtho===1)return;let t=ZU(e,new j),n=new j().copy(e.offset).sub(t.clone().setLength(e.distance)),r=new em(n,t);r.params.Points={threshold:.1},r.firstHitOnly=!0,r.hitFilter=e=>e.distance>V9+r.near,r.near=this.camera.near,r.far=this.camera.far;let i;if(i=this.modelScene.intersectRaycaster(r)[0],i&&i.distance<this.camera.near&&(i=void 0),!i){let e=new Vl(new j(0,1,0),-this.modelScene.boundingBox.min.y),t=r.ray.intersectPlane(e,new j);if(t){let e=t.distanceTo(r.ray.origin);e<1e3&&e>=r.near&&(i={distance:e,floorIndex:0,floor:0,point:t,object:this.scene,face:null})}}if(!i){let r=Math.max(e.distance,3);i={distance:r,floorIndex:0,floor:0,point:n.clone().add(t.clone().setLength(r)),object:this.scene,face:null}}i.distance>=this.camera.near&&K5(e.distance,i.distance)&&(e.distance=i.distance,e.offset=i.point)}onPanGesture(e){this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=e.pointers.length,n=this.panState,r=0,i=!1;e.pointerType===`mouse`&&(r=e.center.buttons,i=e.center.shiftKey),n&&r===0&&n.buttons!==0&&(r=n.buttons);let a=n==null?void 0:n.target;if(!a){let t=this.relativeClientPosition(e.center),n=this.createRaycasterFromCamera(t,this.camera);a=new j().copy(n.ray.direction).multiplyScalar(3).add(n.ray.origin);let[r]=this.modelScene.intersectRaycaster(n);if(!r&&n.ray.direction.y<-.3){let e=new Vl(new j(0,1,0),0),t=n.ray.intersectPlane(e,new j);if(t){let e=t.distanceTo(n.ray.origin);e<1e4&&e>=n.near&&(r={distance:e,floorIndex:0,floor:0,point:t,object:this.scene})}}if(r)a.copy(r.point);else{let e=new j().copy(this.camera.pose.offset).sub(this.camera.position).normalize(),t=new Vl().setFromNormalAndCoplanarPoint(e,this.camera.pose.offset);n.ray.intersectPlane(t,a)}}if(e.isFinal?this.panState=void 0:this.panState={target:a,buttons:r,pointerLength:t,x:e.center.x,y:e.center.y},!(n===void 0||n.pointerLength!==t))if(t>1||r===2||i){let t={x:e.center.x-n.x,y:e.center.y-n.y},r=new j(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),i=ZU(this.cameraMotion.value).setLength(this.locationMotion.value.distance).add(r),a=new j().copy(i).sub(n.target).length();a*=Math.tan(this.camera.pose.fov/2*Math.PI/180);let o=this.renderer.getSize(new A),s=2*t.x*a/o.y,c=2*t.y*a/o.y,l=new j;l.setFromMatrixColumn(this.camera.matrix,0),l.multiplyScalar(-s),r.add(l),this.camera.pose.latitude<H9?l.setFromMatrixColumn(this.camera.matrix,1):(l.setFromMatrixColumn(this.camera.matrix,0),l.crossVectors(this.camera.up,l)),l.multiplyScalar(c),r.add(l);let u=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:r,distance:this.camera.pose.distance});if(e.state=u,this.emit(`gesture.pan`,e),e.defaultPrevented)return;if(this.locationMotion.set({x:u.offset.x,y:u.offset.y,z:u.offset.z},0).catch(Y),e.isFinal&&(this.fixFinalState(u),Object.assign(e,{__fixFinalState:!0}),this.locationMotion.set({distance:u.distance,x:u.offset.x,y:u.offset.y,z:u.offset.z},0).catch(Y)),e.isFinal){let t=this.renderer.getSize(new A),n=2*e.velocityX*a/t.y,r=2*e.velocityY*a/t.y,i=new j,o=new j;i.setFromMatrixColumn(this.camera.matrix,0),i.multiplyScalar(-n),o.add(i),this.camera.pose.latitude<H9?i.setFromMatrixColumn(this.camera.matrix,1):(i.setFromMatrixColumn(this.camera.matrix,0),i.crossVectors(this.camera.up,i)),i.multiplyScalar(r),o.add(i),this.inMomentumMovement={uuid:JB()},this.requestMomentumMovement(e,!0,{longitude:0,latitude:0,x:o.x,y:o.y,z:o.z},0)}}else{let t={x:e.center.x-n.x,y:e.center.y-n.y},r=this.coordinatesForOffset(t),i=XU(this.cameraMotion.value.longitude+r.longitude),a=this.camera.pose.fov,o=J(typeof this.minLatitude==`function`?this.minLatitude(a):this.minLatitude,-Math.PI/2,Math.PI/2),s=J(typeof this.maxLatitude==`function`?this.maxLatitude(a):this.maxLatitude,-Math.PI/2,Math.PI/2),c=J(this.cameraMotion.value.latitude+r.latitude,o,s);this.camera.aspect<1&&Math.abs(e.overallVelocityX)>.2&&Math.atan2(Math.abs(e.overallVelocityY),Math.abs(e.overallVelocityX))<Math.PI/6.923&&(c=this.cameraMotion.value.latitude);let l=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:i,latitude:c,fov:a,offset:this.camera.pose.offset,distance:this.camera.pose.distance});if(e.isFinal&&Object.assign(e,{__fixFinalState:!0}),e.state=l,this.emit(`gesture.pan`,e),e.defaultPrevented)return;if(e.isFinal?this.locationMotion.set({distance:l.distance,x:l.offset.x,y:l.offset.y,z:l.offset.z},0).catch(Y):this.cameraMotion.set({longitude:l.longitude,latitude:l.latitude},0).catch(Y),e.isFinal){let t=e.velocityX,n=e.velocityY;this.inMomentumMovement={uuid:JB()},this.requestMomentumMovement(e,!0,Object.assign(Object.assign({},this.coordinatesForOffset({x:t,y:n})),{x:0,y:0,z:0}),0)}}}onPinchGesture(t){var n;if(!this.initAnimationIsReady)return;this.userAction=t.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let r=(n=this.pinchState)==null?void 0:n.distance;if(t.isFirst){this.pinchState={x:t.center.x,y:t.center.y,scale:1,distance:this.locationMotion.value.distance};return}if(r===void 0)return;let i=this.modelScene.boundingBox.getCenter(new j),a=e.distanceFromModel(this.modelScene,this.cameraMotion.value.fov,this.camera.aspect),o=J(r/t.scale,V9,1/0),s=t.state.offset.clone().sub(ZU(t.state).setLength(o)),c=this.modelScene.boundingBox.containsPoint(s),l;if(!c&&this.pinchState&&this.pinchState.scale>t.scale&&i.distanceTo(s)>a?l=t.state.distance:(l=o,this.pinchState&&(this.pinchState.scale=t.scale)),t.state.distance=l,this.emit(`gesture.pinch`,t),!t.defaultPrevented&&(this.locationMotion.set({distance:t.state.distance},0).catch(Y),t.pointerType!==`mouse`&&(t.type=`gesture.pan`,this.onPanGesture(t)),t.isFinal)){if(!(`__fixFinalState`in t)){let e=t.state;this.fixFinalState(t.state);let n={x:e.offset.x,y:e.offset.y,z:e.offset.z,distance:e.distance};this.locationMotion.set(n,0).catch(Y)}this.panState=void 0,this.pinchState=void 0}}onMouseMove(e){var t,n;if(!this.intersectMesh.parent||this.panState||this.pinchState||this.mouseWheelState||(this.emit(`gesture.mousemove`,e),e.defaultPrevented))return;let r=e.center.raycaster;if(e.isFinal&&this.intersectMesh.parent&&this.intersectMesh.visible===!0){this.hideIntersectMesh();return}let[i]=this.modelScene.intersectRaycaster(r),a=$(`intersect.update`,{raycaster:r,intersection:i==null?null:i,object:this.intersectMesh});if(this.emit(`intersect.update`,a),a.defaultPrevented){this.hideIntersectMesh();return}if(i){let e=(n=(t=i.face)==null?void 0:t.normal)==null?new j().copy(r.ray.direction).multiplyScalar(-1):n,a=e.clone(),o=i.point.clone();this.intersectMesh.position.copy(o);let s=o.clone().add(a);if(this.intersectMesh.lookAt(s),Math.abs(e.y)>.99){let e=this.camera.position.clone().sub(o);this.intersectMesh.rotation.z=-Math.atan2(e.z,e.x)}this.intersectMesh.visible=!0,this.needsRender=!0}else this.hideIntersectMesh()}onMouseWheel(t){if(this.initAnimationIsReady)if(this.userAction=t.userAction,this.stopMomentumMovement(),this.hideIntersectMesh(),t.isFinal){let e=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude,fov:this.cameraMotion.value.fov,offset:new j(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),distance:this.locationMotion.value.distance});if(this.fixFinalState(e),this.emit(`gesture.mousewheel`,t),t.defaultPrevented)return;let n={x:e.offset.x,y:e.offset.y,z:e.offset.z,distance:e.distance};this.locationMotion.set(n,0).catch(Y)}else{let n=e.distanceFromModel(this.modelScene,this.cameraMotion.value.fov,this.camera.aspect),r=new j(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),i=ZU(this.cameraMotion.value,new j).negate(),a=new el(r,i).intersectBox(this.modelScene.boundingBox,new j);a&&(n+=a.distanceTo(r));let o=Math.max(this.locationMotion.value.distance-this.camera.near,0),s=t.center.delta/10*Math.max(o/5,.1);if(o<=n||s>0)if(this.locationMotion.value.distance-s>=V9){let e=this.locationMotion.value.distance-s;t.state.distance=e}else{let e=ZU(this.cameraMotion.value);e.setLength(s),t.state.offset.add(e)}if(this.emit(`gesture.mousewheel`,t),t.defaultPrevented)return;this.locationMotion.set({distance:t.state.distance,x:t.state.offset.x,y:t.state.offset.y,z:t.state.offset.z},0).catch(Y)}}onTapGesture(e){var t;this.userAction=e.userAction,this.stopMomentumMovement();let n=e.center.raycaster,r=this.getForwardObserverOrNot(n);if(!r)this.emit(`gesture.tap`,e);else{let n={longitude:this.camera.pose.longitude,latitude:0},i=Object.assign(Object.assign({},e.state),{mode:`Panorama`,workCode:r.work.workCode,panoIndex:r.panoIndex,longitude:n.longitude,latitude:n.latitude,offset:r?r.position.clone():new j,distance:0});if(e.state=i,this.emit(`gesture.tap`,e),!e.defaultPrevented&&(this.emit(`pano.select`,$(`pano.select`,{prevPano:this.currentPano,state:i,userAction:e.userAction,options:n,progress:0,error:null})),r&&r.active)){let e=this.pendingTextureId=JB(),a=O3({panoIndex:r.panoIndex,workCode:r.work.workCode}),o=this.imageOptions.transform,s=Object.assign({key:`pano.${a}`},gq(this.imageOptions,[`format`,`size`,`quality`,`sharpen`,`forceUseExifOrientation`,`mappings`])),c={right:r.images.work.getURL(r.images.right),left:r.images.work.getURL(r.images.left),up:r.images.work.getURL(r.images.up),down:r.images.work.getURL(r.images.down),front:r.images.work.getURL(r.images.front),back:r.images.work.getURL(r.images.back)},l,u,d=this.enableHDR?r.images.gainmap:void 0;d&&(l={right:r.images.work.getURL(d.right),left:r.images.work.getURL(d.left),up:r.images.work.getURL(d.up),down:r.images.work.getURL(d.down),front:r.images.work.getURL(d.front),back:r.images.work.getURL(d.back)},u=r.images.work.getURL(d.cfg));let f=`pano:`+E3([c,l,s]),p=this.modelScene.parameter,m;if(p.pano0&&p.pano0.map.name===f?m=p.pano0:p.pano1&&p.pano1.map.name===f&&(m=p.pano1),m)p.pano0&&p.pano0.map!==m.map&&p.pano0.map.dispose(),p.pano1&&p.pano1.map!==m.map&&p.pano1.map!==((t=p.pano0)==null?void 0:t.map)&&p.pano1.map.dispose(),p.set({pano0:m,pano1:m}),this.emit(`pano.request`,$(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:i,options:n,error:null}));else{let t=this.textureLoader.loadCubeTexture(c,{imageURL:{transform:o,options:s},format:Oi,viaAjax:!0,fetcher:A4(this.fiveId,r.work)},void 0,void 0,void 0,this.renderer),d=u&&l?Promise.all([A4(this.fiveId,r.work).ajax(u,{responseType:`text`}).then(e=>tV(JSON.parse(e.body))),this.textureLoader.loadCubeTexture(l,{imageURL:{transform:o,options:s},format:Oi,colorSpace:``,viaAjax:!0,fetcher:A4(this.fiveId,r.work)},void 0,void 0,void 0,this.renderer)]).then(([e,t])=>({config:e,map:t.body})):Promise.resolve(void 0);Promise.all([t,d]).then(t=>HH(this,[t],void 0,function*([t,o]){var s,c;let{body:l}=t;if(this.destroyed||this.pendingTextureId!==e){l.dispose();return}this.pendingTextureId=null,l.name=f;let u=Array.isArray(l.image)?l.image[0]:l.image,d=(s=u==null?void 0:u.width)==null?2048:s,m=yield d7(this.renderer,l,!0,z6),h=new U6().formPixels(m.data),g={panoId:a,map:l,mapSize:d,mapHistogram:new Po().fromArray(h.toArray()),matrix:r.matrix.clone().premultiply(r.work.transform),zoom:1,gainmap:o?{map:o.map,cfg:o.config}:void 0};p.pano0&&p.pano0.map.dispose(),p.pano1&&p.pano1.map!==((c=p.pano0)==null?void 0:c.map)&&p.pano1.map.dispose(),p.set({pano0:g,pano1:g}),this.emit(`pano.request`,$(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:i,options:n,error:null}))})).catch(t=>{this.destroyed||this.pendingTextureId!==e||(this.pendingTextureId=null)})}}}}onDblTapGesture(e){if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=e.state,n=e.center.raycaster,r=n.ray.origin.clone().add(n.ray.direction.clone().setLength(3)),i=1,[a]=this.modelScene.intersectRaycaster(n);if(a&&(r=a.point.clone(),i=a.distance>4/2?1:3),e.state.distance=i,e.state.offset=r,this.emit(`gesture.dbltap`,e),e.defaultPrevented)return;let o={x:t.offset.x,y:t.offset.y,z:t.offset.z,distance:t.distance};this.locationMotion.set(o,360).catch(Y),this.hideIntersectMesh()}hideIntersectMesh(){this.intersectMesh.visible===!0&&(this.intersectMesh.visible=!1,this.needsRender=!0)}}},Eie={Floorplan:w7,Topview:E7,Panorama:n9,VRPanorama:Yre,XRPanorama:I9,Model:Cie,Mapview:U9},G9=`gesture.pan,gesture.tap,gesture.dbltap,gesture.press,gesture.pinch,gesture.mousewheel,gesture.mousemove,gesture.momentum,gesture.fire,initAnimation.start,initAnimation.end,camera.update,intersect.update,pano.select,pano.moveTo,pano.moving,pano.arrived,pano.cancel,pano.error,pano.prepare,pano.texture.load,pano.texture.progress,pano.texture.success,pano.texture.error,pano.texture.abort,xr.session.start,xr.session.end,xr.gesture.tap,xr.gesture.press,xr.gesture.buttonUp,xr.gesture.buttonDown,xr.controller.update`.split(`,`);function Die(e){e.on(`initAnimation.start`,t=>{e.emit(`initAnimationWillStart`,t.state.panoIndex,t.state,t.userAction)}),e.on(`initAnimation.end`,t=>{e.emit(`initAnimationEnded`,t.state.panoIndex,t.state,t.userAction)}),e.on(`gesture.pan`,t=>{let n=!1;n=e.emit(`wantsGesture`,`pan`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPanGesture`,t.state,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`pan`,t.pointers,t.isFinal),e.emit(`panGesture`,t.state,t.isFinal))}),e.on(`gesture.tap`,t=>{let n=!1;n=e.emit(`wantsGesture`,`tap`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsTapGesture`,t.center.raycaster,t.center.coords,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`tap`,t.pointers,t.isFinal),e.emit(`tapGesture`,t.center.raycaster,t.center.coords,t.isFinal))}),e.on(`gesture.dbltap`,t=>{let n=!1;n=e.emit(`wantsGesture`,`dbltap`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsDblTapGesture`,t.center.raycaster,t.center.coords,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`dbltap`,t.pointers,t.isFinal),e.emit(`dblTapGesture`,t.center.raycaster,t.center.coords,t.isFinal))}),e.on(`gesture.press`,t=>{let n=!1;n=e.emit(`wantsGesture`,`press`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPressGesture`,t.center.raycaster,t.center.coords,t.center.delta,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`press`,t.pointers,t.isFinal),e.emit(`pressGesture`,t.center.raycaster,t.center.coords,t.center.delta,t.isFinal))}),e.on(`gesture.pinch`,t=>{let n=!1;n=e.emit(`wantsGesture`,`pinch`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPinchGesture`,t.scale,t.state.fov,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`pinch`,t.pointers,t.isFinal),e.emit(`pinchGesture`,t.scale,t.state.fov,t.isFinal))}),e.on(`gesture.mousewheel`,t=>{let n=!1;n=e.emit(`wantsGesture`,`mouseWheel`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsMouseWheel`,t.center.delta,t.state.fov,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`mouseWheel`,t.pointers,t.isFinal),e.emit(`mouseWheel`,t.center.delta,t.state.fov,t.isFinal))}),e.on(`gesture.mousemove`,t=>{let n=!1;n=e.emit(`wantsGesture`,`mouseMove`,t.pointers,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`mouseMove`,t.pointers,t.isFinal),n=e.emit(`wantsChangeCameraFov`,t.state.fov),n&&t.preventDefault())}),e.on(`gesture.momentum`,t=>{let n=!1;n=e.emit(`wantsInteriaPan`,t.state),n&&t.preventDefault(),t.defaultPrevented||e.emit(`interiaPan`,t.state,t.isFinal)}),e.on(`camera.update`,t=>{e.emit(`cameraFovUpdate`,t.state.fov,t.userAction),e.emit(`cameraDirectionUpdate`,t.state,t.userAction);let n=ZU(t.state);n.setLength(t.state.distance);let r=t.state.offset.clone().sub(n);e.emit(`cameraPositionUpdate`,r,t.userAction),e.emit(`cameraUpdate`,t.state,t.userAction)}),e.on(`intersect.update`,t=>{if(t.intersection){let n=!1;n=e.emit(`wantsShowIntersectionOnModel`,t.raycaster),n&&t.preventDefault(),t.defaultPrevented||e.emit(`intersectionOnModelUpdate`,t.intersection,t.object)}else e.emit(`intersectionHidden`)}),e.on(`pano.request`,t=>{let n=e.emit(`wantsMoveToPano`,t.state.panoIndex,t.options,t.userAction);n||(n=e.emit(`wantsToMoveToPano`,t.state.panoIndex,t.options,t.userAction)),n&&t.preventDefault(),t.defaultPrevented||e.emit(`panoWillLoad`,t.state.panoIndex)}),e.on(`pano.select`,t=>{e.emit(`panoSelected`,t.state.panoIndex)}),e.on(`pano.moveTo`,t=>{e.emit(`panoLoaded`,t.state.panoIndex),e.emit(`moveToPano`,t.state.panoIndex,t.userAction),e.emit(`panoWillArrive`,t.state.panoIndex,t.state,t.userAction)}),e.on(`pano.moving`,t=>{e.emit(`movingToPano`,t.state.panoIndex,t.prevPano.panoIndex,t.progress)}),e.on(`pano.arrived`,t=>{e.emit(`panoArrived`,t.state.panoIndex,t.state,t.userAction)}),e.on(`pano.cancel`,t=>{e.emit(`moveToPanoCanceled`,t.state.panoIndex)}),e.on(`pano.error`,t=>{e.emit(`panoLoadError`,t.error,t.state.panoIndex)}),e.on(`pano.texture.load`,t=>{e.emit(`textureStartLoad`,t.pano.panoIndex)}),e.on(`pano.texture.success`,t=>{e.emit(`textureLoaded`,t.pano.panoIndex,t.meta)}),e.on(`pano.texture.error`,t=>{e.emit(`textureError`,t.error,t.pano.panoIndex)}),e.on(`pano.texture.abort`,t=>{e.emit(`textureAbort`,t.pano.panoIndex)}),e.on(`pano.texture.progress`,t=>{e.emit(`textureLoading`,t.progress,t.pano.panoIndex)}),e.on(`xr.session.start`,t=>{e.emit(`webXRSessionStart`)}),e.on(`xr.session.end`,t=>{e.emit(`webXRSessionEnd`)}),e.on(`xr.gesture.tap`,t=>{e.emit(`webXRControllerEvent`,`tap`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.press`,t=>{e.emit(`webXRControllerEvent`,`press`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.buttonUp`,t=>{e.emit(`webXRControllerEvent`,`buttonUp`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.buttonDown`,t=>{e.emit(`webXRControllerEvent`,`buttonDown`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.controller.update`,t=>{e.emit(`webXRControllerRayUpdate`,{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0}),t.left&&e.emit(`webXRAxesUpdate`,`left`,{raycaster:{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0},axesState:{up:t.left.axes.up,down:t.left.axes.down,left:t.left.axes.left,right:t.left.axes.right},deltaTime:t.left.deltaTime}),t.right&&e.emit(`webXRAxesUpdate`,`right`,{raycaster:{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0},axesState:{up:t.right.axes.up,down:t.right.axes.down,left:t.right.axes.left,right:t.right.axes.right},deltaTime:t.right.deltaTime})}),e.on(`works.request`,t=>{e.emit(`willLoad`,t.input,t.works[0],e.getCurrentState())}),e.on(`works.load`,t=>{e.emit(`load`,t.input,t.works[0],e.getCurrentState())}),e.on(`works.ready`,t=>{e.emit(`loaded`,t.input,t.works[0])}),e.on(`state.change`,t=>{e.emit(`stateChange`,t.state,t.userAction)}),e.on(`currentState.change`,t=>{e.emit(`currentStateChange`,t.state,t.userAction)}),e.on(`state.set`,t=>{e.emit(`setState`,t.state)}),e.on(`state.synced`,t=>{e.emit(`stateSynced`,t.state)}),e.on(`model.request`,t=>{e.emit(`modelWillLoad`,t.work.model)}),e.on(`model.error`,t=>{e.emit(`modelLoadError`,t.error,t.model)}),e.on(`model.load`,t=>{e.emit(`modelLoaded`,t.model)}),e.on(`model.changeShownFloor`,t=>{e.emit(`modelShownFloorChange`,t.model.shownFloor,t.model.floorLength)}),e.on(`render`,t=>{e.emit(`renderFrame`,t.needsRender)}),e.on(`mode.change.request`,t=>{e.emit(`wantsChangeMode`,t.mode,t.prevMode)}),e.on(`mode.change`,t=>{e.emit(`modeChange`,t.mode,t.prevMode,t.state.panoIndex,t.state,t.userAction)}),e.on(`helpers.visible`,t=>{e.emit(`helpersVisibleChange`,t.object.visible)}),e.on(`network.resource`,t=>{e.emit(`network`,t.source,t.requestType,t.requestState,t.detail)})}function Oie(){if(typeof window<`u`){let e=document.createElement(`video`);e.loop=!0,e.autoplay=!0,e.playsInline=!0,e.muted=!0,e.crossOrigin=``;let t=()=>{document.removeEventListener(`touchstart`,t,!1),document.removeEventListener(`mousedown`,t,!1),e.muted=!1};return document.addEventListener(`touchstart`,t,!1),document.addEventListener(`mousedown`,t,!1),e}else return{}}q();function kie(){let e=new ms;e.name=`internalLights`;{let t=new Wf(16777215,.1);t.name=`direction0`,t.position.copy(new j(0,1,0)),e.add(t)}{let t=new Wf(16777215,.1);t.name=`direction1`,t.position.copy(new j(-1,-1,-1)),e.add(t)}{let t=new Wf(16777215,.3);t.name=`direction2`,t.position.copy(new j(1,1,1)),e.add(t)}{let t=new Gf(16777215,.6);t.name=`ambient0`,e.add(t)}return e}function Aie(e){var t,n;let r={},i=e.split(/(\;|\,)/);for(let e of i){let i=e.split(`=`),a=(t=i[0])==null?void 0:t.trim(),o=(n=i[1])==null?void 0:n.trim();a&&o&&(r[a]=o)}return r}function K9(){var e;if(typeof document<`u`){let t=document.getElementsByTagName(`meta`);for(let n=0;n<t.length;n++){let r=t[n];if(r.getAttribute(`name`)===`viewport`){let t=Aie((e=r.getAttribute(`content`))==null?``:e),n=Number(t[`initial-scale`]);if(!isNaN(n))return n}}}return 1}function jie(){return typeof location>`u`||location.protocol!==`https:`?Promise.reject(Error(`Request DeviceOrientation Permission denied.`)):typeof DeviceOrientationEvent<`u`&&typeof DeviceOrientationEvent.requestPermission==`function`?DeviceOrientationEvent.requestPermission().then(e=>{if(e==`granted`)return Promise.resolve();{let e=Error(`Request DeviceOrientation Permission denied.`);return Promise.reject(e)}}):Promise.resolve()}function Mie(){if(`xr`in navigator)return navigator.xr.isSessionSupported(`immersive-vr`).then(e=>e?Promise.resolve():Promise.reject()).then(()=>navigator.xr.requestSession(`immersive-vr`,{optionalFeatures:[`local-floor`]}).then(e=>Promise.resolve(e)));{let e=Error(`Request XR Permission denied.`);return Promise.reject(e)}}q();var Nie=800,q9=90,Pie=e=>e.replace(`//vrlab-public.ljcdn.com/`,`//vr-public.realsee-cdn.cn/`).replace(`//vrlab-image4.ljcdn.com/`,`//vr-image-4.realsee-cdn.cn/`).replace(`//vrlab-image3.ljcdn.com/`,`//vr-image-3.realsee-cdn.cn/`).replace(`//vrlab-image2.ljcdn.com/`,`//vr-image-2.realsee-cdn.cn/`).replace(`//vrlab-image1.ljcdn.com/`,`//vr-image-1.realsee-cdn.cn/`),Fie=new hc,J9=new Rs,Iie=new Po,Lie=new Po,Y9=new N,Rie=new A,X9=new WeakMap,Z9=y6([g6(null)]),Q9={},$9=class e extends QB{static get version(){return`1.0.0-alpha.10`}static get dracoPath(){return TX.decoderPath}static set dracoPath(e){TX.setDecoderPath(e)}static get ktx2Path(){return NX.transcoderPath}static set ktx2Path(e){NX.setTranscoderPath(e)}static get useNativeImageBitmap(){return lJ()}static set useNativeImageBitmap(e){cJ(e)}constructor(e={}){var t,n,r,i,a,o,s,c,l,u,d,f;if(super(),this.pbmGaussianSplattingRenderMesh=null,this.fiveId=JB(),Q9[this.fiveId]=this,this.currentUpdateArgs={time:nW(),args:[]},this.currentMode=`Panorama`,this.pano={workCode:``,panoIndex:0},this.needsRender=!0,this.onlyRenderIfNeeds=(t=e.onlyRenderIfNeeds)==null?!0:t,this.imageOptions=Object.assign({},(n=e.imageOptions)==null?{}:n),this.textureOptions=Object.assign({},(r=e.textureOptions)==null?{}:r),this.poweredByRealsee=(i=e.poweredByRealsee)==null?!0:i,this.backgroundColor=new N((a=e.backgroundColor)==null?1579548:a),this.backgroundAlpha=(o=e.backgroundAlpha)==null?1:o,this.extraElements=[],this.controllerInits={Panorama:Object.assign({},e.panorama),Model:Object.assign({},e.model),Floorplan:Object.assign({},e.floorplan),Topview:Object.assign({},e.topview),Mapview:Object.assign({},e.mapview),VRPanorama:Object.assign({},e.vrPanorama),XRPanorama:Object.assign({},e.xrPanorama)},this.fps={testCount:0,testTime:nW()},this.modeChangeDuration=(s=e.modeChangeDuration)==null?Nie:s,this.enableWheel=(c=e.enableWheel)==null?!0:c,this._enableHDR=!!e.enableHDR&&r5&&!e.forceWebGL,typeof window<`u`)if(`renderer`in e)e.renderer instanceof b5&&this.throwError(Error(`cannot render a internal renderer`)),this.renderer=e.renderer;else try{this.renderer=new b5({outputType:this._enableHDR?bi:void 0,logarithmicDepthBuffer:e.logarithmicDepthBuffer,forceWebGL:(l=e.forceWebGL)==null?!1:l});let t=K9();this.renderer.setPixelRatio(t===1?window.devicePixelRatio:1),this.renderer.setSize(512,512),this.renderer.setClearColor(this.backgroundColor,this.backgroundAlpha)}catch(e){let t=e instanceof Error?e:Error(String(e));this.throwError(t)}this.getPixelsRenderTarget=new Fo(1,1,{colorSpace:(d=(u=this.renderer)==null?void 0:u.outputColorSpace)==null?Fa:d,generateMipmaps:!1}),this.renderer&&ZK(this.renderer),this.viewport=Object.assign({left:0,bottom:0,width:1,height:1},e.viewport),this.camera=new dW(q9),this.scene=new E5,this.scene.background=this.backgroundColor,this.xrCustomObjectsScene=new Cs,this.scene.add(this.xrCustomObjectsScene),this.scene.matrixAutoUpdate=!1,this.requestProxy=(f=e.requestProxy)==null?Pie:f,this.networkSubscribe=new lq,this.networkSubscribe.on(`network`,(e,t,n,r)=>{var i;this.emit(`network.resource`,$(`network.resource`,{source:e,requestType:t,requestState:n,detail:r})),(i=this.analysis)==null||i.network(this.works,e,t,n,r)}),this.readyCallbacks=[],this.syncingState=!1,this.helperGroup=new ms,this.helperGroup.name=`helper`,this.helperGroup.matrixAutoUpdate=!1,this.scene.add(this.helperGroup),X9.set(this,Z9),this.modelScene=new o3({fiveId:this.fiveId}),this.modelScene.addEventListener(`model.create`,e=>{this.bindModel(e.model)}),this.scene.add(this.modelScene);let[p]=this.modelScene.setModels(Z9,{forceReplaceImmediately:!0});Q(p,`loaded`,{get(){return!1},set(e){}}),this.videoTexture=new Ou(e.videoInstance||Oie());let m=kie();this.scene.add(m),this.state={mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance},this.stateSynced=!1,this.destroyed=!1,this.paused=!0,typeof window<`u`&&(e.play!==!1&&this.play(),this.stopAnimationLoop=aJ.shared.add((e,t,...n)=>{this.updateTime(e,t,...n)},!1,0,10));let h=()=>{typeof document<`u`&&document.fullscreenElement===null&&this.currentMode===`VRPanorama`&&this.controller.emit(`vr.requestExit`,$(`vr.requestExit`,{}))},g=()=>{this.needsRender=!0},_=()=>{this.renderer instanceof b5&&this.renderer.reconfigureContext(),this.needsRender=!0},v=()=>{typeof document<`u`&&document.visibilityState===`visible`&&_()},y=()=>{_()};if(this.renderer instanceof b5&&(this.renderer.onDeviceLostCallback=()=>{_()}),typeof document<`u`&&(document.addEventListener(`visibilitychange`,v,!1),document.addEventListener(`fullscreenchange`,h,!1)),typeof window<`u`&&window.addEventListener(`pageshow`,y,!1),this.renderer&&this.renderer.domElement.addEventListener(`webglcontextrestored`,g,!1),this.removeEventListeners=()=>{typeof document<`u`&&(document.removeEventListener(`visibilitychange`,v,!1),document.removeEventListener(`fullscreenchange`,h,!1)),typeof window<`u`&&window.removeEventListener(`pageshow`,y,!1),this.renderer instanceof b5&&(this.renderer.onDeviceLostCallback=void 0),this.renderer&&this.renderer.domElement.removeEventListener(`webglcontextrestored`,g,!1)},this.loadWorkTask=this.prepare(),this.plugins={},e.plugins&&e.plugins.length){for(let t of e.plugins)if(typeof t==`function`)t(this);else if(Array.isArray(t)){let[e,n,r]=t;if(typeof e==`function`){let t=e(this,r);typeof n==`string`&&(this.plugins[n]?this.throwError(Error(`plugin name ${n} is exists.`)):this.plugins[n]=t)}}}Die(this),this.fiveRenderer=new e5({outputType:this._enableHDR?bi:void 0}),this.adaptiveLuminancePass=new a8,this.adaptiveLuminancePass.enabled=!1,this.fiveRenderer.composer.addPass(this.adaptiveLuminancePass),this.eyeDomeLightingPass=new s8(this.camera),this.eyeDomeLightingPass.enabled=!1,this.fiveRenderer.composer.addPass(this.eyeDomeLightingPass),this.pbmGaussianSplattingRenderMesh=new fU,this.scene.add(this.pbmGaussianSplattingRenderMesh)}get ident(){return this.fiveId}get panoIndex(){return this.pano.panoIndex}prepare(){return Promise.all([jq().catch(Y)]).then(Y)}dispose(){var e;if(this.destroyed===!0)return;delete Q9[this.fiveId],this.emit(`dispose`),this.destroyed=!0,this.pause(),this.stopAnimationLoop&&(this.stopAnimationLoop(),this.stopAnimationLoop=void 0),this.off(),this.networkSubscribe.off(),this.controller&&(this.controller.destroy(),this.controller=void 0);let t=this.getElement();t&&t.parentNode&&t.parentNode.removeChild(t);let n=this.modelScene.parameter;n.pano0&&n.pano0.map.dispose(),n.pano1&&n.pano1.map!==((e=n.pano0)==null?void 0:e.map)&&n.pano1.map.dispose(),n.reset(`pano0`,`pano1`),this.modelScene.dispose(),X9.set(this,Z9),this.renderer&&(!(this.renderer instanceof b5)||this.renderer.isInitialized)&&this.renderer.render(new Cs,new Lf),this.fiveRenderer.dispose(),this.renderer instanceof b5&&this.renderer.dispose()}setViewport(e){Object.assign(this.viewport,e),this.needsRender=!0}get boundingMesh(){return this.modelScene.boundingMesh}get helperVisible(){return this.helperGroup.visible}set helperVisible(e){this.helperGroup.visible!==e&&(this.helperGroup.visible=e,this.emit(`helpers.visible`,$(`helpers.visible`,{object:this.helperGroup})),this.needsRender=!0)}updateConfiguration(e,t=!0){let n=!1,r=!1;e.panorama&&(Object.assign(this.controllerInits.Panorama,vq(e.panorama)),this.currentMode===`Panorama`&&(n=!0)),e.model&&(Object.assign(this.controllerInits.Model,vq(e.model)),this.currentMode===`Model`&&(n=!0)),e.floorplan&&(Object.assign(this.controllerInits.Floorplan,vq(e.floorplan)),this.currentMode===`Floorplan`&&(n=!0)),e.topview&&(Object.assign(this.controllerInits.Topview,vq(e.topview)),this.currentMode===`Topview`&&(n=!0)),e.mapview&&(Object.assign(this.controllerInits.Mapview,vq(e.mapview)),this.currentMode===`Mapview`&&(n=!0)),e.vrPanorama&&(Object.assign(this.controllerInits.VRPanorama,vq(e.vrPanorama)),this.currentMode===`VRPanorama`&&(n=!0)),e.xrPanorama&&(Object.assign(this.controllerInits.XRPanorama,vq(e.xrPanorama)),this.currentMode===`XRPanorama`&&(n=!0)),e.imageOptions&&(Object.assign(this.imageOptions,e.imageOptions),(this.currentMode===`Panorama`||this.currentMode===`VRPanorama`||this.currentMode===`XRPanorama`)&&(r=!0,n=!0)),e.textureOptions&&Object.assign(this.textureOptions,e.textureOptions),t&&n&&this.controller&&this.currentMode&&(!this.controller.updateConfiguration(this.controllerInits[this.currentMode])||r)&&this.changeMode(this.currentMode,this.getCurrentState(),0,!1,!0)}appendTo(e,t={}){if(!this.renderer)return;if(!(this.renderer instanceof b5)){this.throwError(Error(`cannot call appendTo method when render a external renderer`));return}let n=this.getElement();if(!n)return;e.appendChild(n),this.refresh(t);let r=window.getComputedStyle(e).position;r!==`relative`&&r!==`absolute`&&r!==`fixed`&&r!==`sticky`&&(e.style.position=`relative`)}refresh(e={},t){var n,r,i,a,o,s;if(!this.renderer)return;let c=this.renderer.domElement.parentNode,{width:l=(n=c==null?void 0:c.offsetWidth)==null?512:n,height:u=(r=c==null?void 0:c.offsetHeight)==null?512:r}=e;if(l=Math.max(1,l),u=Math.max(1,u),!t){let e=K9(),n=typeof window<`u`?window.devicePixelRatio:1;if(t=(i=e===1?n:1)==null?1:i,t>1){let e=Math.max(l,u)*t,n=Math.min((s=(o=(a=this.renderer.backend.device)==null?void 0:a.limits)==null?void 0:o.maxTextureDimension2D)==null?8192:s,4096);e>n&&(t=Math.max(t/e*n,1),t=Math.floor(t*100)/100)}}this.renderer.setPixelRatio(t),this.renderer.setSize(l,u),this.needsRender=!0;let d=nW(),f=d-this.currentUpdateArgs.time,p=this.currentUpdateArgs.args;this.updateTime(d,f,...p)}addExtraElement(e){return this.extraElements.indexOf(e)===-1&&(this.extraElements.push(e),this.controller&&this.controller.bindExtraElement(e)),()=>this.removeExtraElement(e)}removeExtraElement(e){let t=this.extraElements.indexOf(e);t!==-1&&(this.extraElements.splice(t,1),this.controller&&this.controller.unbindExtraElement(e))}getSize(e){if(!this.renderer)throw Error(`renderer is not initialized`);return this.renderer.getSize(e),e.x*=this.viewport.width,e.y*=this.viewport.height,e}getDrawingBufferSize(e){if(!this.renderer)throw Error(`renderer is not initialized`);return this.renderer.getDrawingBufferSize(e),e.x*=this.viewport.width,e.y*=this.viewport.height,e}updateCamera(e,t,n=!0){if(!this.controller)throw Error(`controller is not initialized.`);return this.controller.updateCamera(e,t,n)}updateCameraWithKeyframes(e,t,n=!0){if(!this.controller)throw Error(`controller is not initialized.`);return this.controller.updateCameraWithKeyframes(e,t,n)}get works(){return X9.get(this)||Z9}get work(){return this.works[0]}get observers(){return this.work.observers}get models(){return this.modelScene.models}get model(){return this.modelScene.models[0]}load(e,t,n,r=!0){if(!this.renderer)throw Error(`renderer is not initialized`);let i=this.loadWorkTask.then(()=>Nne(e)?e.then(e=>this.load_(e,t,n,r)):this.load_(e,t,n,r));return this.loadWorkTask=i.catch(e=>{this.throwError(e)}),i}load_(t,n,r,i=!0){var a,o,s,c,l,u,d,f,p,m;let h={};typeof r==`number`?h.duration=r:typeof r==`object`&&Object.assign(h,r),this.works===Z9&&(h.duration===void 0&&(h.duration=0),h.effect===void 0&&(h.effect=`instant`));let g={};Object.assign(g,h.model),!g[`3d-tiles`]&&h[`3d-tiles`]&&(g[`3d-tiles`]=h[`3d-tiles`]),!g.textureOptions&&h.textureOptions&&(g.textureOptions=h.textureOptions),!g.textureOptions&&this.textureOptions&&(g.textureOptions=this.textureOptions);let _=[];if(Array.isArray(t))for(let e of t)e instanceof h6?_.push(e):typeof e!=`string`&&`work`in e?_.push(g6(e.work,e)):_.push(g6(e));else t instanceof h6?_.push(t):_.push(g6(t));h.mode===`add`&&(_=[].concat(this.works,_));let v;try{v=y6(_)}catch(e){return this.throwError(e),Promise.reject(e)}for(let e of v)this.bindWorkFetcher(e);n===void 0&&(n=`inherit`),n===`inherit`&&this.works===Z9&&(n=`initial`);let y=this.currentMode,b=v.initial,x=b.work.observers[0],S=x?{workCode:x.work.workCode,panoIndex:x.panoIndex}:{workCode:b.work.workCode,panoIndex:0},C=(a=b.mode)==null?x?`Panorama`:`Mapview`:a,w={};if(n===`inherit`){let e=this.getCurrentState(),[t]=v.filter(t=>t.workCode===e.workCode);if(t)S={workCode:e.workCode,panoIndex:e.panoIndex},C=e.mode,w={longitude:e.latitude,latitude:e.latitude,fov:e.fov,distance:e.distance,offset:e.offset.clone()};else{n={mode:y};let e=(s=(o=v[0])==null?void 0:o.observers)==null?void 0:s[this.panoIndex];e?(n.workCode=e.work.workCode,n.panoIndex=e.panoIndex):typeof v.initial.panoIndex==`number`?(n.workCode=v.initial.work.workCode,n.panoIndex=v.initial.panoIndex):(n.mode===`Panorama`||n.mode===`VRPanorama`||n.mode===`XRPanorama`)&&(n.mode=`Mapview`),n.mode===y&&(n.longitude=this.camera.pose.longitude,n.latitude=this.camera.pose.latitude,n.fov=this.camera.pose.fov)}}if(n===`initial`&&(typeof b.panoIndex==`number`&&(S={workCode:b.work.workCode,panoIndex:b.panoIndex}),b.mode&&(C=b.mode),w={longitude:b.longitude,latitude:b.latitude,fov:b.fov,distance:b.distance,offset:(c=b.offset)==null?void 0:c.clone()}),typeof n==`object`){if(C=(l=n.mode)==null?y:l,typeof n.panoIndex==`number`){let e=v.getObserver({workCode:(d=(u=n.workCode)==null?b.work.workCode:u)==null?``:d,panoIndex:n.panoIndex});e&&(S={workCode:e.work.workCode,panoIndex:e.panoIndex})}w={longitude:n.longitude,latitude:n.latitude,fov:n.fov,distance:n.distance,offset:n.offset?new j().copy(n.offset):void 0}}let T=(f=h.duration)==null?this.modeChangeDuration:f;(C===`Floorplan`||C===`Topview`||C===`Mapview`)&&y===C&&(T=0);let E=`fly`;(C===`Panorama`||C===`VRPanorama`||C===`XRPanorama`)&&y===C&&(E=(p=h.effect)==null?`fade`:p),this.emit(`works.request`,$(`works.request`,{input:t,works:v,userAction:i}));let D=(e,t,r)=>{let a=this.getCurrentState(),o=Object.assign(Object.assign({mode:e},t),r);n===`inherit`&&(o=this.getCurrentState()),this.pano=t;let s=Object.assign(Object.assign({initial:{state:o,currentState:a,duration:T,effect:E,userAction:i}},this.commonParams()),this.controllerInits[e]),c=W9[o.mode].initAnimationEndState(s);if(this.controller&&y===e)this.controller.updateWork(v,c,{effect:E,duration:T},i)===!1&&(this.controller.destroy(),this.controller=this.applyController(e,s));else{if(this.controller)this.controller.destroy();else{let t=W9[e].initAnimationEndState(s);this.camera.setFromPose(t),this.emit(`camera.update`,$(`camera.update`,{state:this.getCurrentState(),userAction:i}))}this.controller=this.applyController(e,s);let t=$(`mode.change`,{prevMode:y,mode:e,state:c,userAction:i});try{this.emit(`mode.change`,t)}catch(e){console.error(e)}}this.state.workCode=this.pano.workCode,this.state.panoIndex=this.pano.panoIndex,this.updateTime(this.currentUpdateArgs.time,0,...this.currentUpdateArgs.args)};X9.set(this,v);let ee=Promise.resolve();if(C===e.Mode.Floorplan||C===e.Mode.Topview||C===e.Mode.Mapview||C===e.Mode.Model){this.modelScene.loaded===!1&&(this.camera.setFromPose(w),Fne(this.state,this.camera.pose));let e=this.modelScene.setModels(v,g);ee=Promise.all(e.map(e=>e.loadedReady)).then(()=>{this.needsRender=!0,D(C,S,w),this.emit(`camera.update`,$(`camera.update`,{state:this.getCurrentState(),userAction:i}))})}else{D(C,S,w);let e=this.controller,t=!1;this.modelScene.autoRefine=!1;let n=()=>{this.works===v&&t===!1&&(this.needsRender=!0,this.emit(`camera.update`,$(`camera.update`,{state:this.getCurrentState(),userAction:i})),t=!0,this.modelScene.autoRefine=!0),e.off(`pano.arrived`,n),e.off(`pano.cancel`,n)},r=this.modelScene.setModels(v,g);ee=Promise.all(r.map(e=>e.initReady)).then(Y),e.once(`pano.arrived`,n),e.once(`pano.cancel`,n),setTimeout(n,((m=h.duration)==null?this.modeChangeDuration:m)+1e3)}return this.emit(`works.load`,$(`works.load`,{input:t,userAction:i,works:v})),ee.then(()=>this.ready()).then(()=>{var e;this.emit(`works.ready`,$(`works.ready`,{input:t,userAction:i,works:v})),(e=this.analysis)==null||e.work(v)})}reset(){let e=this.loadWorkTask.then(()=>this.reset_());return this.loadWorkTask=e.catch(e=>{this.throwError(e)}),e}reset_(){return new Promise(e=>{var t;this.controller&&(this.controller.destroy(),this.controller=void 0);let n=this.modelScene.parameter;n.pano0&&n.pano0.map.dispose(),n.pano1&&n.pano1.map!==((t=n.pano0)==null?void 0:t.map)&&n.pano1.map.dispose(),n.set({pano0:null,pano1:null,modelAlpha:1}),X9.set(this,Z9),this.modelScene.setModels(Z9,{forceReplaceImmediately:!0}),this.renderer&&this.modelScene.update(this.renderer,this.camera),this.needsRender=!0,this.currentMode=`Panorama`,this.pano={workCode:``,panoIndex:0},this.camera.setFromPose({distance:0,fov:q9,longitude:0,latitude:0,offset:new j(0,0,0)}),this.state={mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance},this.camera.needsRender=!1,this.needsRender=!1,e()})}changeMode(t,n={},r,i=!0,a=!1){return new Promise((o,s)=>{var c,l,u,d;if(!this.renderer)throw Error(`renderer is not initialized.`);n=Object.assign({},n);let f=0;this.controller&&(f=typeof r==`number`?r:(c=r==null?void 0:r.duration)==null?this.modeChangeDuration:c);let p=`fly`;this.controller&&typeof r==`object`&&r.effect&&(p=r.effect);let m=typeof n.panoIndex==`number`?{workCode:(d=(l=n.workCode)==null?(u=this.work)==null?void 0:u.workCode:l)==null?``:d,panoIndex:n.panoIndex}:this.pano;if(!e.Mode.hasOwnProperty(t)){let e=Error(`mode "${t}" is not existed`);this.throwError(e),s(e);return}if((t===e.Mode.Panorama||t===e.Mode.VRPanorama||t===e.Mode.XRPanorama)&&!this.works.getObserver(m)){let e=Error(`PanoId ${O3(m)} not existed.`);this.throwError(e),s(e);return}(t===e.Mode.Floorplan||t===e.Mode.Topview||t===e.Mode.Mapview||t===e.Mode.Model)&&this.modelScene.empty&&(f=0);let h=this.controller,g=this.currentMode,_=()=>{if(this.controller&&this.controller.stopMomentumMovement(),this.controller&&a===!1&&g===t)t===e.Mode.Panorama||t===e.Mode.Model||t===e.Mode.VRPanorama||t===e.Mode.XRPanorama?!A3(this.pano,m)&&`moveToPano`in this.controller&&typeof this.controller.moveToPano==`function`?this.controller.moveToPano(m,Object.assign({duration:f},n),i):this.controller.updateCamera(n,f,i).catch(Y):(A3(this.pano,m)||(this.pano=m),this.controller.updateCamera(n,f,i).catch(Y));else{let e=Object.assign(Object.assign({},n),m),r=Object.assign(Object.assign({initial:{state:e,currentState:this.getCurrentState(),duration:f,effect:p,userAction:i}},this.commonParams()),this.controllerInits[t]),a=W9[t].initAnimationEndState(r),o=$(`mode.change.request`,{prevMode:this.currentMode,mode:t,state:a,userAction:i});if(this.emit(`mode.change.request`,o),!o.defaultPrevented){h&&h.destroy(),this.controller=this.applyController(t,r);let e=$(`mode.change`,{prevMode:this.currentMode,mode:t,state:a,userAction:i});this.emit(`mode.change`,e)}}o()},v=aJ.shared.getContext();if(v&&(typeof XRSession<`u`&&v instanceof XRSession&&v.end(),aJ.shared.setContext(null)),t===e.Mode.VRPanorama)this.requestFullscreen(),jie().then(()=>_()).catch(e=>{let t=e instanceof Error?e:Error(String(e));this.exitFullscreen(),this.throwError(t),s(t)});else if(t===e.Mode.XRPanorama){if(!M9.isBackendXRCapable(this.renderer)){let e=Error(`XRPanorama 需要 WebGL2 回落后端。请在 new Five() 时传入 { forceWebGL: true }。后端在运行时无法切换,设备检测必须发生在 new Five() 之前。`);this.throwError(e),s(e);return}if(!M9.isBrowserXRCapable()){let e=Error(`当前浏览器不支持 WebXR(navigator.xr 不存在)。`);this.throwError(e),s(e);return}Mie().then(e=>{aJ.shared.setContext(e),a=!0;try{_()}catch(t){console.error(`[XR] changeMode 建立 XRPanorama controller 失败,结束 session: ${t instanceof Error?t.message:String(t)}`),Promise.resolve(e.end()).catch(()=>{}),aJ.shared.setContext(null);let n=t instanceof Error?t:Error(String(t));this.throwError(n),s(n)}}).catch(e=>{let t=e instanceof Error?e:Error(String(e));this.throwError(t),s(t)})}else _()})}getPixels(e,t,n,r,i,a,o){return HH(this,void 0,void 0,function*(){if(!this.renderer)throw Error(`renderer is not initialized.`);let s=nW(),c=this.renderer.getPixelRatio(),l=this.renderer.getRenderTarget(),u=this.getSize(new A),d=0,f=0,p=1,m=1,h,g,_,v,y;typeof e==`number`?(d=e,typeof t==`number`&&(f=t),typeof n==`number`&&(p=n),typeof r==`number`&&(m=r),h=i,g=a,y=o):(d=e.x,f=e.y,p=e.width,m=e.height,h=e.pixelRatio,g=e.flipY,_=e.helperVisible,v=e.skipPanorama,y=e.buffer),d=Math.floor(d),f=Math.floor(f),p=Math.floor(p),m=Math.floor(m),h=Math.floor(h==null?c:h),g=g==null?!1:g;let b=this.helperVisible,x=this.modelScene.parameter.modelAlpha;this.helperVisible=_==null?this.helperVisible:_,v&&(this.controller instanceof W9.Panorama||this.controller instanceof W9.VRPanorama||this.controller instanceof W9.XRPanorama)&&v===!0&&this.modelScene.parameter.set(`modelAlpha`,1),this.modelScene.update(this.renderer,this.camera);let S=this.getPixelsRenderTarget;S.setSize(p*h,m*h),this.renderer.setRenderTarget(S),this.camera.pixelRatio=h,this.camera.resolution.set(p,m),this.camera.setViewOffset(u.width,u.height,d,u.height-f-m,p,m),this.camera.aspect=u.width/u.height,this.camera.updateTime(s),this.scene.update(this.renderer,this.camera);let C=this.renderer.autoClear,w=this.renderer.autoClearColor,T=this.renderer.autoClearDepth,E=this.renderer.autoClearStencil,D=this.renderer.getClearColor(Y9),ee=this.renderer.getClearAlpha(),te=this.renderer.getScissorTest();this.renderer.autoClear=!0,this.renderer.autoClearColor=!0,this.renderer.autoClearDepth=!0,this.renderer.autoClearStencil=!0,this.renderer.setScissorTest(!1);let ne=this.scene.background;this.scene.background=this.camera.isOrthographicCamera||this.backgroundAlpha<1?null:ne,this.renderer.render(this.scene,this.camera),this.scene.background=ne,this.renderer.autoClear=C,this.renderer.autoClearColor=w,this.renderer.autoClearDepth=T,this.renderer.autoClearStencil=E,this.renderer.setClearColor(D,ee),this.renderer.setScissorTest(te),this.helperVisible=b,x===void 0?this.modelScene.parameter.reset(`modelAlpha`):this.modelScene.parameter.set(`modelAlpha`,x),this.renderer.setRenderTarget(l),this.camera.clearViewOffset(),this.camera.pixelRatio=c,this.camera.resolution.copy(u),this.camera.aspect=this.camera.resolution.width/this.camera.resolution.height,this.camera.updateTime(s),this.modelScene.update(this.renderer,this.camera),this.scene.update(this.renderer,this.camera);let re=p*h,ie=m*h,ae=re*ie,oe=ae*4;if(y){if(y.length!==oe)throw Error(`buffer length is not equals pixels ${oe}`)}else y=new Uint8Array(oe);let se=yield this.renderer.readRenderTargetPixelsAsync(S,0,0,re,ie),ce=re*4;if(se.length===oe)y.set(se);else{let e=Math.ceil(ce/256)*256;for(let t=0;t<ie;t++){let n=t*e;y.set(se.subarray(n,n+ce),t*ce)}}if(!g){let e=ae/2;for(let t=0,n=0,r=0,i=0;n<e;n++)for(i=(ie-Math.floor(n/re)-1)*re+n%re,r=0;r<4;r++)t=y[n*4+r],y[n*4+r]=y[i*4+r],y[i*4+r]=t}return y})}getElement(){var e;return(e=this.renderer)==null?void 0:e.domElement}render(e){let t=this.renderer;if(!t)return;let n=t.getRenderTarget();t.setRenderTarget(null);let r=t.autoClear,i=t.autoClearColor,a=t.autoClearDepth,o=t.autoClearStencil,s=t.getClearColor(Y9),c=t.getClearAlpha(),l=t.getViewport(Iie),u=t.getScissor(Lie),d=t.getScissorTest();t.autoClear=!0,t.autoClearColor=!0,t.autoClearDepth=!0,t.autoClearStencil=!0;let f=t.getSize(Rie),p=Math.floor(f.x*this.viewport.left),m=Math.floor(f.y*this.viewport.bottom),h=Math.floor(f.x*this.viewport.width),g=Math.floor(f.y*this.viewport.height);t.setClearColor(this.backgroundColor,this.backgroundAlpha),t.setViewport(p,m,h,g),t.setScissor(p,m,h,g);let _=this.viewport.bottom!==0||this.viewport.left!==0||this.viewport.width!==1||this.viewport.height!==1;t.setScissorTest(_);let v=this.scene.background;this.scene.background=this.camera.isOrthographicCamera||this.backgroundAlpha<1?null:v;let y=!0;this.controller&&this.controller.render()&&(y=!1),y&&this.fiveRenderer.render(t,this.scene,this.modelScene,this.camera,this.needsRender),this.scene.background=v,t.autoClear=r,t.autoClearColor=i,t.autoClearDepth=a,t.autoClearStencil=o,t.setClearColor(s,c),t.setViewport(l),t.setScissor(u),t.setScissorTest(d),t.setRenderTarget(n),e&&aJ.shared.add(e,!0)}updateTime(e,t,...n){if(this.currentUpdateArgs={time:e,args:n},this.destroyed)return;if(this.renderer&&NX.detectSupport(this.renderer),this.syncingState=this.syncState(e,t),this.controller&&this.controller.updateTime(e,t,...n),this.renderer&&(this.camera.pixelRatio=this.renderer.getPixelRatio(),this.getSize(this.camera.resolution),this.camera.aspect=this.camera.resolution.width/this.camera.resolution.height),this.camera.controllerMode=this.currentMode,this.camera.updateTime(e),this.renderer){let e=this.modelScene.loaded,t=this.modelScene.refined;this.modelScene.update(this.renderer,this.camera),e===!1&&this.modelScene.loaded===!0&&(this.controller&&this.controller.updateModel(this.modelScene),aJ.shared.add(()=>{this.emit(`models.load`,$(`models.load`,{modelScene:this.modelScene}))},!0,0,10)),t===!1&&this.modelScene.refined===!0&&aJ.shared.add(()=>{this.emit(`models.refined`,$(`models.refined`,{modelScene:this.modelScene}))},!0,0,10)}if(this.camera.autoNearFar){J9.makeEmpty(),J9.expandByObject(this.modelScene.boundingMesh);let t=J9.getBoundingSphere(Fie),n=t.radius*2;t.containsPoint(this.camera.position)||(n=this.camera.position.distanceTo(t.center)+t.radius);let r=J(n/500,.001,.1),i=J(n,800);this.camera.near!==r&&(this.camera.near=r),this.camera.far!==i&&(this.camera.far=i),this.camera.updateTime(e)}if(this.renderer){let e=this.modelScene.visible;this.modelScene.visible=!1,this.scene.update(this.renderer,this.camera),this.modelScene.visible=e}if(this.syncingState=!1,this.controller&&this.controller.needsRender===!0&&(this.controller.needsRender=!1,this.needsRender=!0),this.camera.needsRender===!0&&(this.camera.needsRender=!1,this.needsRender=!0),this.modelScene.needsRender===!0&&(this.modelScene.needsRender=!1,this.needsRender=!0),this.scene.needsRender===!0&&(this.scene.needsRender=!1,this.needsRender=!0),this.pbmGaussianSplattingRenderMesh&&this.pbmGaussianSplattingRenderMesh.needsRender===!0&&(this.pbmGaussianSplattingRenderMesh.needsRender=!1,this.needsRender=!0),this.onlyRenderIfNeeds!==!0&&(this.needsRender=!0),this.paused===!0||this.renderer instanceof b5&&!this.renderer.isInitialized)return;let r=$(`render.prepare`,{needsRender:this.needsRender});this.emit(`render.prepare`,r),r.defaultPrevented&&(this.needsRender=!1);let i=this.needsRender;this.render(),this.needsRender=!1,this.emit(`render`,$(`render`,{needsRender:i})),this.hasListener(`fps`)&&(this.fps.testTime&&e-this.fps.testTime<1e3?this.fps.testCount++:(this.emit(`fps`,this.fps.testCount),this.fps.testTime=e,this.fps.testCount=0))}pause(){this.paused=!0,this.renderer&&this.renderer instanceof b5&&this.renderer.clear(!0,!0,!0)}play(){this.needsRender=!0,this.paused=!1}moveToPano(t,n={},r=!0){let{controller:i,renderer:a}=this;if(!i)return this.throwError(Error(`controller is not initialized.`)),Promise.resolve();if(!a)return this.throwError(Error(`renderer is not initialized.`)),Promise.resolve();typeof t==`number`&&this.pano.workCode&&(t={workCode:this.pano.workCode,panoIndex:t});let o=this.works.getObserver(t);if(!o)return this.throwError(Error(`pano ${JSON.stringify(t)} not existed.`)),Promise.resolve();let s={workCode:o.work.workCode,panoIndex:o.panoIndex};return`moveToPano`in i&&typeof i.moveToPano==`function`?i.moveToPano(s,n,r):o&&(this.pano=s,this.once(`initAnimation.start`,e=>{n.moveStartCallback&&n.moveStartCallback(e.state)}),this.once(`initAnimation.end`,e=>{n.moveEndCallback&&n.moveEndCallback(e.state)}),this.changeMode(e.Mode.Panorama,n,{effect:n.effect},r)),this.ready()}preloadPano(e,t=Y){let n=this.works.getObserver(e);if(!n)return Promise.reject(Error(`Pano ${JSON.stringify(e)} never found`));let r=[`right`,`left`,`up`,`down`,`front`,`back`],i=nW();return Promise.all(r.map(e=>{let t=O3({panoIndex:n.panoIndex,workCode:n.work.workCode}),r=Object.assign({key:`pano.${t}.${e}`},gq(this.imageOptions,[`size`,`format`,`quality`,`forceUseExifOrientation`,`mappings`])),i=n.work.getURL(n.images[e]),a=this.imageOptions.transform?this.imageOptions.transform(i,r):Jq(i,r);return A4(this.fiveId,n.work).preload(a)})).then(()=>{let e=nW()-i;return t(e),e})}project2d(e,t=!1){if(!this.renderer)return null;if(t){let t=this.camera.position,n=e.clone().sub(t),r=new em(t,n.clone().normalize());r.params.Points={threshold:.1};let[i]=this.modelScene.intersectRaycaster(r);if(i&&i.distance+.01<n.length())return null}let n=e.clone().project(this.camera);if(Math.abs(n.z)>1)return null;let r=this.renderer.getSize(new A),i=r.x*this.viewport.width,a=r.y*this.viewport.height,o=r.x*this.viewport.left+(n.x+1)/2*i,s=r.y*(1-this.viewport.bottom-this.viewport.height)+(-n.y+1)/2*a;return new A(o,s)}getCurrentState(){return Object.assign(Object.assign({},this.camera.copyPose()),{mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex})}setState(e,t=!1,n=!0){var r,i,a,o,s,c,l,u,d,f;e=gq(e,[`mode`,`workCode`,`panoIndex`,`longitude`,`latitude`,`fov`,`offset`,`distance`]),e.offset&&!(e instanceof j)&&(e.offset=new j(e.offset.x,e.offset.y,e.offset.z));let p;if(typeof e.panoIndex==`number`)if(e.workCode)p={workCode:e.workCode,panoIndex:e.panoIndex};else{let t=(i=(r=this.work)==null?void 0:r.workCode)==null?``:i,n=this.state.workCode;this.works.filter(e=>e.workCode===n).length>0&&(t=n),p={workCode:t,panoIndex:e.panoIndex}}let m=(a=e.mode)==null?this.state.mode:a,h,g,_,v,y;if(this.controller&&this.controller.stopMomentumMovement(),this.state.mode!==m){if(m===`VRPanorama`){this.changeMode(`VRPanorama`,void 0,void 0,!0);return}if(m===`XRPanorama`){this.changeMode(`XRPanorama`,void 0,void 0,!0);return}let t={workCode:p==null?void 0:p.workCode,panoIndex:p==null?void 0:p.panoIndex};typeof e.longitude==`number`&&(t.longitude=e.longitude),typeof e.latitude==`number`&&(t.latitude=e.latitude),typeof e.fov==`number`&&(t.fov=e.fov),typeof e.distance==`number`&&(t.distance=e.distance),e.offset instanceof j&&(t.offset=e.offset);let n=Object.assign(Object.assign({initial:{state:t,currentState:this.getCurrentState(),duration:this.modeChangeDuration,effect:`fly`,userAction:!1}},this.commonParams()),this.controllerInits[m]),r=W9[m].initAnimationEndState(n);h=r.longitude,g=r.latitude,_=r.fov,v=r.offset,y=r.distance}else h=(o=e.longitude)==null?this.state.longitude:o,g=(s=e.latitude)==null?this.state.latitude:s,_=(c=e.fov)==null?this.state.fov:c,v=(l=e.offset)==null?this.state.offset:l,y=(u=e.distance)==null?this.state.distance:u;let b={workCode:(p==null?this.pano:p).workCode,panoIndex:(p==null?this.pano:p).panoIndex,mode:m,longitude:h,latitude:g,fov:_,offset:v,distance:y};this.emit(`state.set`,$(`state.set`,{userAction:n,state:b})),Q5(this.state,b)||(this.controller&&b.mode===`VRPanorama`&&b.mode!==this.state.mode?(Z5(this.state,b),this.changeMode(`VRPanorama`)):this.controller&&b.mode===`XRPanorama`&&b.mode!==this.state.mode?(Z5(this.state,b),this.changeMode(`XRPanorama`)):(Z5(this.state,b),this.controller&&n&&(this.controller.userAction=!1),t&&this.state.mode===b.mode&&(this.syncingState=this.syncState(nW(),0,t),this.syncingState&&((d=this.controller)==null||d.updateTime(nW(),0),this.syncingState=!1)),this.emit(`state.change`,$(`state.change`,{userAction:n,state:this.state})),(f=this.analysis)==null||f.state(this.works,this.state)))}syncState(t,n,r=!1){let i=this.stateSynced;if(this.stateSynced=!1,!this.controller)return!1;if(this.state.mode!==this.currentMode){let e={mode:this.state.mode,workCode:this.state.workCode,panoIndex:this.state.panoIndex,longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset,distance:this.state.distance};return this.changeMode(this.state.mode,e,this.modeChangeDuration,this.controller.userAction),!0}if(!this.controller.isReady())return!1;if(this.controller instanceof W9.Model){if(J5(this.camera.pose.offset,this.state.offset)){let e={longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset};return this.controller.moveToPosition(this.state.offset,Object.assign(Object.assign({},e),{duration:r?0:void 0}),!1),!0}}else{let e={workCode:this.state.workCode,panoIndex:this.state.panoIndex};if(!A3(e,this.pano)&&`moveToPano`in this.controller&&typeof this.controller.moveToPano==`function`){let t={longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset,distance:this.state.distance};return this.controller.moveToPano(e,t,!1),!0}}if(this.controller instanceof W9.Floorplan||this.controller instanceof W9.Topview||this.controller instanceof W9.Mapview){let e=.2,t=Math.PI/45,n=r?this.state.fov:K6(this.camera.pose.fov,this.state.fov,1),i=Math.abs(this.camera.pose.distance-this.state.distance),a=i>e*15?i/15:.2,o=r?this.state.distance:K6(this.camera.pose.distance,this.state.distance,a),s=this.camera.pose.offset.distanceTo(this.state.offset),c=s>e*15?s/15:e,l=r?new j().copy(this.state.offset):q6(this.camera.pose.offset,this.state.offset,c),{longitude:u,latitude:d}=r?{longitude:this.state.longitude,latitude:this.state.latitude}:J6({longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude},{longitude:this.state.longitude,latitude:this.state.latitude},t);if(K5(n,this.camera.pose.fov)||J5(l,this.camera.pose.offset)||K5(o,this.camera.pose.distance)||K5(u,this.camera.pose.longitude,Math.PI*2)||K5(d,this.camera.pose.latitude)){let e={x:l.x,y:l.y,z:l.z},t={fov:n};return Object.assign(e,{distance:o}),Object.assign(t,{longitude:u,latitude:d}),this.controller.stopMomentumMovement(),this.controller.cameraMotion.set(t,0).catch(Y),this.controller.locationMotion.set(e,0).catch(Y),!0}}else{let e=Math.PI/45,t=r?this.state.fov:K6(this.camera.pose.fov,this.state.fov,1),{longitude:n,latitude:i}=r?{longitude:this.state.longitude,latitude:this.state.latitude}:J6({longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude},{longitude:this.state.longitude,latitude:this.state.latitude},e),a=this.state.distance,o=new j().copy(this.state.offset);if(K5(a,this.camera.pose.distance)&&(this.state.distance=this.camera.pose.distance),J5(o,this.camera.pose.offset)&&(this.state.offset=this.camera.pose.offset.clone()),K5(n,this.camera.pose.longitude,Math.PI*2)||K5(i,this.camera.pose.latitude)||K5(t,this.camera.pose.fov))return this.controller.stopMomentumMovement(),this.controller.cameraMotion.set({longitude:n,latitude:i,fov:t},0).catch(Y),!0}if(this.stateSynced=!0,i===!1&&this.emit(`state.synced`,$(`state.synced`,{userAction:!1,state:this.state})),this.readyCallbacks.length&&this.stateSynced){let t=this.currentMode;if(!(t===e.Mode.Floorplan||t===e.Mode.Topview||t===e.Mode.Mapview||t===e.Mode.Model)||this.modelScene.loaded){let e=this.readyCallbacks.slice();this.readyCallbacks.length=0;for(let t of e)this.controller instanceof W9.Panorama&&t.tile===!0?this.readyCallbacks.push(t):t()}}return!1}ready(e={}){return new Promise(t=>{var n;this.readyCallbacks.push(Object.assign(t,{tile:(n=e.tile)==null?!1:n}))}).then(()=>{var e;return Promise.all([this.model.initReady,(e=this.renderer)==null?void 0:e.ready])}).then(Y)}requestFullscreen(){var e;if(!i5)return;let t=(e=this.getElement())==null?void 0:e.parentNode;t&&`requestFullscreen`in t&&typeof document<`u`&&document.fullscreenElement===null&&t.requestFullscreen()}exitFullscreen(){typeof document<`u`&&document.fullscreenElement&&`exitFullscreen`in document&&document.exitFullscreen()}throwError(e){this.hasListener(`error`)?this.emit(`error`,e):console.error(e)}bindModel(e){let t=()=>{aJ.shared.add(()=>{this.emit(`model.load`,$(`model.load`,{work:e.work,model:e,error:null}))},!0)},n=t=>{let{error:n}=t;this.emit(`model.error`,$(`model.error`,{work:e.work,model:e,error:n})),this.throwError(n)},r=()=>{this.emit(`model.changeShownFloor`,$(`model.changeShownFloor`,{work:e.work,model:e,error:null}))},i=t=>{this.emit(`models.tileLoad`,$(`models.tileLoad`,{work:e.work,model:e,tile:t.tile}))},a=t=>{this.emit(`models.tileUnload`,$(`models.tileUnload`,{work:e.work,model:e,tile:t.tile}))},o=()=>{e.removeEventListener(`load`,t),e.removeEventListener(`error`,n),e.removeEventListener(`changeShownFloor`,r),e.removeEventListener(`tileLoad`,i),e.removeEventListener(`tileUnload`,a),e.removeEventListener(`dispose`,o)};e.addEventListener(`load`,t),e.addEventListener(`error`,n),e.addEventListener(`changeShownFloor`,r),e.addEventListener(`tileLoad`,i),e.addEventListener(`tileUnload`,a),e.addEventListener(`dispose`,o),this.emit(`model.request`,$(`model.request`,{work:e.work,model:e,error:null}))}bindWorkFetcher(e){let t=this,n=e.workCode,r=e.allowHosts,i=new mq({get networkSubscribe(){return t.networkSubscribe},requestProxy(e){return Promise.resolve(e).then(e=>t.requestProxy(e,n)).then(e=>{let t=$3(e,r);return t instanceof Error?Promise.reject(t):t})}});j4(this.fiveId,e,i)}commonParams(){return{fiveId:this.fiveId,scene:this.scene,xrCustomObjectsScene:this.xrCustomObjectsScene,helper:this.helperGroup,camera:this.camera,renderer:this.renderer,viewport:this.viewport,element:this.getElement(),works:this.works,imageOptions:this.imageOptions,enableWheel:this.enableWheel,enableHDR:this._enableHDR,extraElements:this.extraElements,videoTexture:this.videoTexture,modelScene:this.modelScene}}applyController(t,n){if(!this.renderer)throw Error(`renderer is not initialized.`);let r=W9[t];this.currentMode=t;let i=new r(n);for(let e of G9)i.on(e,(...t)=>{if(this.emit(e,...t))return!1});{let e=W9[t].initAnimationEndState(n),r=n.initial.userAction;Q5(this.state,e)||(Z5(this.state,e),this.emit(`state.change`,$(`state.change`,{userAction:r,state:this.state}))),this.emit(`currentState.change`,$(`currentState.change`,{userAction:r,state:this.getCurrentState()}))}return i.on(`camera.update`,e=>{var t;if(this.controller){let n=this.controller.getTargetState();e.userAction&&this.syncingState===!1&&this.state.mode===n.mode&&!Q5(this.state,n)&&(Z5(this.state,n),this.emit(`state.change`,$(`state.change`,{userAction:e.userAction,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}this.emit(`currentState.change`,$(`currentState.change`,{userAction:e.userAction,state:this.getCurrentState()}))}),i.on(`initAnimation.start`,e=>{var t;let{state:n,userAction:r}=e;r&&this.state.mode===n.mode&&!Q5(this.state,n)&&(Z5(this.state,n),this.emit(`state.change`,$(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),i.on(`initAnimation.end`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!Q5(this.state,n)&&(Z5(this.state,n),this.emit(`state.change`,$(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),i.on(`pano.moveTo`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!Q5(this.state,n)&&(Z5(this.state,n),this.emit(`state.change`,$(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),i.on(`pano.arrived`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!Q5(this.state,n)&&(Z5(this.state,n),this.emit(`state.change`,$(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),i.on(`pano.cancel`,e=>{var t;let{state:n,userAction:r}=e;r&&this.state.mode===n.mode&&!Q5(this.state,n)&&(Z5(this.state,n),this.emit(`state.change`,$(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),i.on(`pano.moveTo`,e=>{let{userAction:t}=e;this.emit(`currentState.change`,$(`currentState.change`,{userAction:t,state:this.getCurrentState()}))}),i.on(`pano.request`,e=>{this.emit(`pano.request`,e),e.defaultPrevented||this.moveToPano(e.state,e.options,e.userAction)}),i.on(`vr.requestExit`,()=>{this.currentMode===e.Mode.VRPanorama&&(this.exitFullscreen(),this.changeMode(e.Mode.Panorama))}),i.on(`error`,e=>this.throwError(e)),i}removeEventListeners(){}get internalLightsEnabled(){let e=this.scene.children.find(e=>e.name===`internalLights`);return e?e.visible:!1}set internalLightsEnabled(e){let t=this.scene.children.find(e=>e.name===`internalLights`);t&&(t.visible=e),t=this.modelScene.children.find(e=>e.name===`internalLights`),t&&(t.visible=e)}get scissor(){return this.viewport}setScissor(e){return this.setViewport(e)}getPose(){let{longitude:e,latitude:t,fov:n,offset:r,distance:i}=this.camera.copyPose();return{longitude:e,latitude:t,fov:n,offset:r.clone(),distance:i}}getLongitudeAndLatitude(){let{longitude:e,latitude:t}=this.getPose();return{longitude:e,latitude:t}}getOffset(){return this.getPose().offset}getCameraLocal(){if(this.pano.workCode&&this.controller&&this.works){let e=this.works.getObserver(this.pano);if(e){let t=new ps;t.matrix.copy(e.matrix).premultiply(e.work.transform),t.matrix.decompose(t.position,t.quaternion,t.scale),t.matrixAutoUpdate=!1;let n=new j(0,0,-1);n.applyQuaternion(this.camera.quaternion);let r=t.quaternion.clone().invert();return n.applyQuaternion(r),{theta:Math.atan2(n.x,-n.z),phi:-Math.asin(n.y),lookAtVector:n}}}return null}addPass(e){this.fiveRenderer.composer.addPass(e)}removePass(e){let t=this.fiveRenderer.composer.passes.indexOf(e);t!==-1&&this.fiveRenderer.composer.passes.splice(t,1)}insertPass(e,t){this.fiveRenderer.composer.insertPass(e,t)}get renderMode(){return this.fiveRenderer.renderMode}set renderMode(e){this.fiveRenderer.renderMode=e}get enableEDL(){return this.eyeDomeLightingPass.enabled}set enableEDL(e){this.eyeDomeLightingPass.enabled=e,this.needsRender=!0}get enableAdaptiveLuminance(){return this.adaptiveLuminancePass.enabled}set enableAdaptiveLuminance(e){this.adaptiveLuminancePass.enabled=e,this.needsRender=!0}get enableHDR(){return this._enableHDR}};$9.Mode={Panorama:`Panorama`,Model:`Model`,Floorplan:`Floorplan`,Topview:`Topview`,Mapview:`Mapview`,VRPanorama:`VRPanorama`,XRPanorama:`XRPanorama`},typeof window<`u`&&Object.assign(window,{__FIVE_DEBUG__:{THREE:Jm,constructor:$9,instances:Q9}});var zie=class{static createButton(e){let t=document.createElement(`button`),n=`ENTER VR`,r=`calc(50% - 50px)`,i=`100px`,a;function o(){t.style.display=``,t.style.cursor=`pointer`,t.style.left=r,t.style.width=i,t.textContent=n,t.onmouseenter=function(){t.style.opacity=`1.0`},t.onmouseleave=function(){t.style.opacity=`0.5`},t.onclick=function(){if(!e)return;let t;try{t=e()}catch(e){s(e);return}t&&typeof t.then==`function`&&t.then(void 0,s)}}function s(e){let o=e instanceof Error?e.message:String(e);/forceWebGL/.test(o)&&(a&&clearTimeout(a),t.textContent=`需降级到 WebGL2`,t.style.left=`calc(50% - 75px)`,t.style.width=`150px`,a=setTimeout(function(){a=void 0,t.textContent=n,t.style.left=r,t.style.width=i},3e3))}function c(){t.style.display=``,t.style.cursor=`auto`,t.style.left=`calc(50% - 75px)`,t.style.width=`150px`,t.onmouseenter=null,t.onmouseleave=null,t.onclick=null}function l(){c(),t.textContent=`VR NOT SUPPORTED`}function u(e){e.style.position=`absolute`,e.style.bottom=`20px`,e.style.padding=`12px 6px`,e.style.border=`1px solid #fff`,e.style.borderRadius=`4px`,e.style.background=`rgba(0,0,0,0.1)`,e.style.color=`#fff`,e.style.font=`normal 13px sans-serif`,e.style.textAlign=`center`,e.style.opacity=`0.5`,e.style.outline=`none`,e.style.zIndex=`999`}if(`xr`in navigator)return t.id=`VRButton`,t.style.display=`none`,u(t),navigator.xr.isSessionSupported(`immersive-vr`).then(function(e){e?o():l()}),t;{let e=document.createElement(`a`);return window.isSecureContext===!1?(e.href=document.location.href.replace(/^http:/,`https:`),e.innerHTML=`WEBXR NEEDS HTTPS`):(e.href=`https://immersiveweb.dev/`,e.innerHTML=`WEBXR NOT AVAILABLE`),e.style.left=`calc(50% - 90px)`,e.style.width=`180px`,e.style.textDecoration=`none`,u(e),e}}};e.AdaptiveLuminancePass=a8,e.AnimationFrameLoop=aJ,e.BoundingMesh=i3,e.Camera=dW,e.EffectComposer=x6,e.EyeDomeLightingPass=s8,e.Fetcher=mq,e.Five=$9,e.FivePass=C6,e.FiveRenderer=e5,e.FlowingFireworks3DPass=_8,e.FlowingLight2DPass=d8,e.FlowingLight3DPass=l8,e.FullScreenQuad=S6,e.GSPLAT_PIPELINE_AUTO=Wee,e.GSPLAT_PIPELINE_RASTER_CPU_SORT=Gee,e.GSPLAT_PIPELINE_RASTER_GPU_SORT=Kee,e.GaussianBlurPass=c8,e.Histogram=U6,e.InternalWebGPURenderer=b5,e.Model=Y4,e.ModelScene=o3,e.Motion=qQ,e.NetworkSubscribe=lq,e.PBMCustomNode=iV,e.PBMGSObject=GB,e.PBMGaussianSplattingObject=GB,e.PBMGaussianSplattingNodeMaterial=mH,e.PBMGaussianSplattingRenderMesh=fU,e.PBMGroup=IB,e.PBMMesh=VB,e.PBMMeshBasicMaterial=pU,e.PBMMeshBasicNodeMaterial=qK,e.PBMMeshPanoOnlyMaterial=mU,e.PBMMeshPanoOnlyNodeMaterial=XK,e.PBMMeshPhongMaterial=hU,e.PBMMeshPhongNodeMaterial=JK,e.PBMMeshPhysicalMaterial=gU,e.PBMMeshPhysicalNodeMaterial=YK,e.PBMPanoFilter=oV,e.PBMPointCloud=CV,e.PBMPointCloudMaterial=_V,e.PBMSkinnedMesh=HB,e.PBMUpdateable=rV,e.PBMVertexMarkFlag=nV,e.PROXY_CONTROLLER_EVENT_NAMES=G9,e.PanoCircleMesh=N5,e.PanoCircleMeshCustom=Mne,e.PanoCircleMeshSolid=z5,e.Parameter=h4,e.Scene=E5,e.Subscribe=QB,e.TextureLoader=_J,e.Tile=nQ,e.Tile3D=O4,e.Tile3DModel=O4,e.TileCache=c$,e.TileNode=e$,e.TileRequestScheduler=a$,e.Tileset=m$,e.Trajectory=t$,e.TrajectoryNode=n$,e.Work=h6,e.WorkResolvedObserver=v6,e.XRButton=zie,e.controllersDefaultInitArgs=Eie,e.coordinatesToVector=ZU,e.createDebugBoundingMesh=Kte,e.createWorks=y6,e.customNodesCacheKey=aV,e.defaultImageURLTransform=Jq,e.draco=TX,e.getViewportScale=K9,e.headingToLongitude=eW,e.imageSupport=jq,e.isBoundingVolume=XZ,e.isPanoId=j3,e.loadAt3d=SY,e.loadDome=DY,e.loadDomez=PY,e.loadGltf=kZ,e.loadPbm=eY,e.loadPly=RY,e.longitudeToHeading=$U,e.makeBoundingVolume=ZZ,e.panoEqual=A3,e.panoParse=k3,e.panoStringify=O3,e.parseWork=g6,e.registerPBMMaterials=ZK,e.vectorToCoordinates=QU,e.workToJson=d3});
1639
+ `;function Hre(e){let t=1,n=document.getElementsByTagName(`meta`);for(let e=0;e<n.length;e++){let r=n[e];if(r.getAttribute(`name`)===`viewport`){let e=(r.getAttribute(`content`)||``).match(/initial\-scale\=([\d|\.]+)/);e&&(t=Number(e[1])),isNaN(t)&&(t=1)}}let r=e=>Math.floor(e*t)+`px`;return Vre.replace(/\n/g,` `).replace(/\ +/g,` `).replace(/\$id/g,e).replace(/(\d+)px/g,(e,t)=>r(Number(t)))}function Ure(){let e=`five_vr_helper_`+JB(),t=Hre(e),n=document.createElement(`div`);return n.className=e,n.innerHTML=t,n}q();var S9=new Vu(.12,16),C9=T2(.5,.5),w9=X(.017);function Wre(e,t){let n=o2(C9.sub(e));return b2(t,t.add(w9),n)}function T9(e,t){let n=o2(C9.sub(e));return X(1).sub(b2(t.sub(w9),t,n))}function Gre(){let e={opacity:Z(0)},t=C2(),n=o2(C9.sub(t)),r=X(.01),i=X(.49),a=X(.29),o=X(1).sub(b2(i.sub(r),i,n)),s=b2(a,a.add(r),n),c=D2(.576,.635,1,.3),l=D2(1,1,1,J0(n.sub(i.add(a).div(2))).div(i.sub(a)).mul(1.5).add(.1).clamp(0,1)),u=u2(c,l,l.w),d=new eD;return d.fragmentNode=D2(u.xyz,u.w.mul(e.opacity).mul(o).mul(s)),d.blending=5,d.blendSrc=204,d.blendDst=205,d.blendSrcAlpha=201,d.blendDstAlpha=205,d.depthWrite=!1,d.transparent=!0,{material:d,u:e}}function Kre(){let e={circleScale:Z(1),circleFade:Z(0),circleOpacity:Z(.5),loadingAngle:Z(0),loadingOpacity:Z(0),opacity:Z(0),disable:Z(0)},t=C2();o2(C9.sub(t));let n=X(.98).add(J0(p2(T2(1,-1)).dot(t.sub(C9))).mul(2)).clamp(0,1),r=D2(u2(D2(.576,.635,1,1).xyz,D2(1,1,1,1).xyz,e.circleFade.mul(.5)),n.mul(e.circleOpacity).mul(T9(t,X(.3).mul(e.circleScale)))),i=d2(K0.sub(Y0(C9.x.sub(t.x),C9.y.sub(t.y))).add(e.loadingAngle),q0),a=D2(1,1,1,X(1).sub(b2(X(0),q0,i)).mul(.9).add(.1).mul(e.loadingOpacity).mul(Wre(t,X(.2).mul(e.circleScale))).mul(T9(t,X(.25).mul(e.circleScale)))),o=D2(1,1,1,X(.5).mul(T9(t,X(.32).mul(e.circleScale)))),s=D2(1,1,1,0);s=u2(s,r,r.w),s=u2(s,a,a.w),s=u2(s,o,e.disable);let c=D2(s.xyz,s.w.mul(e.opacity)),l=new eD;return l.fragmentNode=c,l.blending=5,l.blendSrc=204,l.blendDst=205,l.blendSrcAlpha=201,l.blendDstAlpha=205,l.depthWrite=!1,l.transparent=!0,{material:l,u:e}}var qre=class extends ps{constructor(){super(),this.progress=0,this.opacity=0,this.loading=!1,this.current=!1,this.disabled=!1,this.currentMotion=new qQ({ringScale:1.1,ringOpacity:0,circleFade:0,circleOpacity:.85,circleScale:1}),this.opacityMotion=new qQ({opacity:0}),this.loadingMotion=new qQ({opacity:0}),this.disableMotion=new qQ({opacity:0}),this.hitTestMesh=new pl(S9,new tl({blending:5,blendSrc:204,blendDst:205,blendSrcAlpha:201,blendDstAlpha:205,depthWrite:!1,transparent:!0,color:0,opacity:0})),this.hitTestMesh.scale.set(1.5,1.5,1.5);let{material:e,u:t}=Gre();this.ringMesh=new pl(S9,e),this.ringU=t;let{material:n,u:r}=Kre();this.panoMesh=new pl(S9,n),this.panoU=r,this.add(this.hitTestMesh),this.add(this.ringMesh),this.add(this.panoMesh),this.renderOrder=1e4,this.needsRender=!0}setProgress(e){this.progress=e,this.setLoading(e>0)}setOpacity(e){this.opacity!==e&&(this.opacity=e=J(e,0,1),this.opacityMotion.set({opacity:e},30).catch(Y))}setCurrent(e){if(this.current!==e){if(e)this.currentMotion.setKeyframes([{progress:0,value:{ringScale:2,ringOpacity:0,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.05,value:{ringScale:1,ringOpacity:1,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.15,value:{ringScale:1.2,ringOpacity:1,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.25,value:{ringScale:1.1,ringOpacity:1,circleFade:0,circleOpacity:.85,circleScale:1}},{progress:.8,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.85,circleScale:1}},{progress:.9,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.65,circleScale:.8}},{progress:.92,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.65,circleScale:.8}},{progress:1,value:{ringScale:1.1,ringOpacity:1,circleFade:1,circleOpacity:.85,circleScale:1.1}}],1500).catch(Y);else{let e=[{progress:0,value:Object.assign({},this.currentMotion.value)},{progress:1,value:{ringScale:1.1,ringOpacity:0,circleFade:0,circleOpacity:.85,circleScale:1}}];this.currentMotion.setKeyframes(e,200).catch(Y)}this.current=e}}setLoading(e){this.loading!==e&&(e?this.loadingMotion.setKeyframes([{progress:0,value:{opacity:0}},{progress:.3,value:{opacity:0}},{progress:1,value:{opacity:.8}}],500).catch(Y):this.loadingMotion.set({opacity:0},0).catch(Y),this.loading=e,this.disabled===!0&&this.setDisabled(!1),this.needsRender=!0)}setDisabled(e){this.disabled!==e&&(this.disabled=e,this.loading===!0&&this.setLoading(!1),this.disableMotion.set({opacity:+!!e},300).catch(Y),this.needsRender=!0)}tap(){return Promise.resolve()}updateTime(e,t){this.opacityMotion.update(e),this.currentMotion.update(e),this.loadingMotion.update(e);let n=this.opacityMotion.value.opacity;this.visible=n!==0;let{ringScale:r,ringOpacity:i,circleFade:a,circleOpacity:o,circleScale:s}=this.currentMotion.value;this.ringMesh.scale.set(r,1,r),this.ringU.opacity.value=i*n,this.panoU.opacity.value=n,this.panoU.circleOpacity.value=o,this.panoU.circleScale.value=s,this.panoU.circleFade.value=a,this.panoU.loadingOpacity.value=this.loadingMotion.value.opacity,this.panoU.disable.value=this.disableMotion.value.opacity,this.panoU.loadingAngle.value=e/120%(Math.PI*2),this.needsRender=!0}dispose(){this.hitTestMesh.material.dispose(),this.ringMesh.material.dispose(),this.panoMesh.material.dispose()}};q();var Jre=1500,Yre=Object.assign({},_q(n9,[`maxLatitude`,`minLatitude`])),Xre=class e extends r9{static parseArgs(t){if(t instanceof e)return t;let n=Object.assign(Object.assign({},t),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2});return super.parseArgs(n)}static initAnimationEndState(e){let t=this.parseArgs(e),n=super.initAnimationEndState(t);return Object.assign(Object.assign({},n),{mode:`VRPanorama`})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`VRPanorama`,this.cardboard=new Rre(this.renderer);let r=Ure();this.helperElement=r;let i=new f7(r);this.element.parentNode&&(this.element.parentNode.insertBefore(r,this.element),this.updateHelperElementSize(),i.on(`tap`,()=>this.emit(`vr.requestExit`,$(`vr.requestExit`,{})))),this.destroyHelper=()=>{i.destroy(),r.parentNode&&r.parentNode.removeChild(r),this.helperElement=void 0}}updateConfiguration(e){return super.updateConfiguration(Object.assign(Object.assign({},e),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2}))}destroy(){super.destroy(),this.cardboard.dispose(),this.destroyHelper()}isReady(){return!1}updateRenderSize(){this.needsRender=!0}updateCamera(e,t,n){return Promise.resolve()}updateCameraWithKeyframes(e,t,n){return Promise.resolve()}updateTime(e,t,...n){var r,i,a,o,s,c;if(this.destroyed)return;this.updateHelperElementSize(),this.userAction=!0,this.needsRender=!0;let l={},u={},d=this.locationMotion.keyframes[0],f=this.locationMotion.keyframes[this.locationMotion.keyframes.length-1],[p,m]=this.locationMotion.getKeyFrameSegment(e),h=this.panoResourceFromLocationMotionKeyframe(p),g=this.panoResourceFromLocationMotionKeyframe(m),_=this.panoResourceFromLocationMotionKeyframe(d),v=this.panoResourceFromLocationMotionKeyframe(f),y=!1;if(this.modelAlphaMotion.ended===!1&&(this.modelAlphaMotion.update(e),l.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.perspToOrthoMotion.ended===!1&&(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(J(this.perspToOrthoMotion.value.perspToOrtho,0,1))),this.locationMotion.ended===!1){this.locationMotion.update(e);let t=this.locationMotion.value.count-m.value.count+1,n=new j().copy(h.position),a=new j().copy(g.position);if(l.progress=t,t>=.01&&t<=.99&&(l.progress=J(g.effectEasing(t),.01,.99)),g.panoPicture&&(t<1?h.panoPicture&&(l.pano0=h.panoPicture):l.pano0=g.panoPicture,l.pano1=g.panoPicture),g.effect===`montage`?l.transition=`BLACK`:g.effect===`spread`?l.transition=`SPREAD`:l.transition=`FADE`,g.effect===`zoomin`||g.effect===`zoomout`?l.progress=Math.pow(t,3):g.effect===`model`&&this.camera.pose.distance<.01&&(l.modelAlpha=1-Math.pow(J(Math.abs(t-.5)*2,0,1),4)),t<1&&g.effect!==`fly`){if(l.pano0&&h.panoPicture){let e={panoId:l.pano0.panoId,map:l.pano0.map,mapHistogram:l.pano0.mapHistogram,mapSize:l.pano0.mapSize,zoom:l.pano0.zoom,matrix:h.panoPicture.matrix.clone().setPosition(g.position),gainmap:l.pano0.gainmap?{map:l.pano0.gainmap.map,cfg:Object.assign({},l.pano0.gainmap.cfg)}:void 0},t=this.panoPictureObserverMap.get(l.pano0);t&&this.panoPictureObserverMap.set(e,t),l.pano0=e}n.copy(a),y=!0}u.distance=this.locationMotion.value.distance,u.offset=new j(n.x+(a.x-n.x)*t,n.y+(a.y-n.y)*t,n.z+(a.z-n.z)*t);let o=[],s=[];for(let e of this.locationMotion.keyframes){let{key:t,progress:n}=e;t!==void 0&&(o.push(t),n>this.locationMotion.progress&&s.push(t))}for(let e of Object.keys(this.panoResources)){if(s.indexOf(e)>=0)continue;let t=this.panoResources[e];if(t.panoPicture){let e=t.panoPicture.map;if(e){if(e===((r=l.pano0)==null?void 0:r.map)||e===((i=l.pano1)==null?void 0:i.map))continue;e.dispose(),t.panoPicture=null}}o.indexOf(e)>=0||delete this.panoResources[e]}this.currentPano=k3(g.panoId),this.emit(`pano.moving`,$(`pano.moving`,{userAction:this.userAction,prevPano:k3(_.panoId),state:Object.assign(Object.assign(Object.assign(Object.assign({},k3(v.panoId)),{mode:this.mode}),$5(this.camera.pose)),u),options:{},progress:this.locationMotion.progress,error:null}))}n7(l)===!1&&this.modelScene.parameter.set(l),u.offset&&this.camera.position.copy(u.offset);let b=this.camera.pose.longitude,x=this.camera.pose.latitude;this.camera.quaternion.fromArray(this.cardboard.sensor.getOrientation()),this.camera.computePose(),(b!==this.camera.pose.longitude||x!==this.camera.pose.latitude)&&(this.cameraMotion.set(gq(this.camera.pose,[`longitude`,`latitude`]),0).catch(Y),this.emit(`camera.update`,$(`camera.update`,{userAction:!0,state:Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),$5(this.camera.pose))}))),this.works.getObserver(this.currentPano);let S=this.works.getObserver(h.panoId),C=this.works.getObserver(g.panoId),w=new Map;if(S)for(let e of S.accessibleNodes){let t=S.work.observers[e];if(t){let e=O3({panoIndex:t.panoIndex,workCode:t.work.workCode});w.set(e,t)}}if(C)for(let e of C.accessibleNodes){let t=C.work.observers[e];if(t){let e=O3({panoIndex:t.panoIndex,workCode:t.work.workCode});w.set(e,t)}}if(this.panoMeshes.forEach((e,t)=>{let n=w.get(t);n?(e.position.copy(n.position).applyMatrix4(n.work.transform),w.delete(t)):(this.helper.remove(e),e.dispose(),this.panoMeshes.delete(t))}),w.forEach((e,t)=>{let n=new qre;n.position.copy(e.position).applyMatrix4(e.work.transform),e.position.distanceTo(e.standingPosition)>this.aerialObserverMinHeight?n.scale.setScalar(15):n.scale.setScalar(1),this.panoMeshes.set(t,n),this.helper.add(n),w.delete(t)}),this.camera.pose.distance>.1||y?this.panoMeshes.forEach((n,r)=>{n.setOpacity(0),n.updateTime&&n.updateTime(e,t),n.visible=!1}):this.panoMeshes.forEach((e,t)=>{let n=k3(t),r=this.works.getObserver(n);if(!r)return;if(!r.loadable&&!r.active){e.setOpacity(0);return}let i=e.position.clone().setY(this.camera.position.y).distanceTo(this.camera.position);i<.05?e.setOpacity(0):e.setOpacity(J(1.5/i,0,1)),A3(this.currentPano,n)&&e.setOpacity(0),e.lookAt(this.camera.position)}),this.locationMotion.ended){let n=this.intersect(e);this.panoMeshes.forEach((r,i)=>{r.setCurrent(r===n),r.updateTime&&r.updateTime(e,t)})}{let e=(a=this.modelScene.parameter.progress)==null?1:a,t=Math.round(e),n=this.modelScene.parameter.pano0,r=this.modelScene.parameter.pano1,i=t===0?n:r,s;if(i&&(s=this.works.getObserver(i.panoId),s||(s=this.panoPictureObserverMap.get(i))),this.tiling.appearDuration=this.tileAppearDuration,this.tiling.maxRequest=e<(lJ()?.6:.99)?0:this.tileMaxRequest,this.tiling.imageOptions=this.imageOptions,!s||!i||this.tileLevelForFov===!1||this.camera.perspToOrtho.x>0){this.tiling.setObserver(null);let e={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:null,panoGainmap:void 0,panoMatrix:new M,panoZoom:1,minLevel:0,level:0};this.tiling.update(e),this.modelScene.parameter.set(`refinedScreen`,null)}else{let e=eJ(i.mapSize),a=e+1,c=new A().copy(this.camera.resolution).multiplyScalar(this.camera.pixelRatio),l=Math.floor(this.tileLevelForFov(this.camera.fov,c)),u=l>e?l:0;this.tiling.setObserver(s);let d={renderer:this.renderer,resolution:this.camera.resolution,pixelRatio:this.camera.pixelRatio,time:this.camera.time,cameraMatrix:this.camera.matrixWorld,cameraProjectionMatrix:this.camera.projectionMatrix,panoMap:i.map,panoGainmap:i.gainmap,panoMatrix:i.matrix,panoZoom:i.zoom,minLevel:a,level:u,useHDR:this.modelScene.parameter.useHDR,maxDisplayBoost:this.modelScene.parameter.maxDisplayBoost},f=this.tiling.update(d),p={map:this.tiling.renderTarget.texture,matrixInverse:this.tiling.camera.matrixWorldInverse,projectionMatrix:this.tiling.camera.projectionMatrix,pano:t,opacity:(n==null?void 0:n.panoId)===(r==null?void 0:r.panoId)?1:XQ(Math.abs(((o=this.modelScene.parameter.progress)==null?0:o)-.5)*2)},m=this.modelScene.parameter.refinedScreen;(f||p.pano!==(m==null?void 0:m.pano)||p.opacity!==(m==null?void 0:m.opacity))&&this.modelScene.parameter.set(`refinedScreen`,p)}}this.panoVideo.object.position.copy(this.camera.position),this.panoVideo.updateTime(e);{let e=g.effect,{pano0:t,pano1:n}=this.modelScene.parameter;if(t&&n&&t!==n&&(e===`fly`||e===`model`)&&this.flyEffectUseDepthBuffer){if(((s=this.modelScene.parameter.pano0Depth)==null?void 0:s.panoId)!==t.panoId||((c=this.modelScene.parameter.pano1Depth)==null?void 0:c.panoId)!==n.panoId){this.pano0DepthCubeRenderTarget?this.pano0DepthCubeRenderTarget.width!==512&&this.pano0DepthCubeRenderTarget.setSize(512,512):this.pano0DepthCubeRenderTarget=new uD(512,{minFilter:ri,magFilter:ri,generateMipmaps:!1}),this.pano1DepthCubeRenderTarget?this.pano1DepthCubeRenderTarget.width!==512&&this.pano1DepthCubeRenderTarget.setSize(512,512):this.pano1DepthCubeRenderTarget=new uD(512,{minFilter:ri,magFilter:ri,generateMipmaps:!1});let e=new mp(this.camera.near,this.camera.far,this.pano0DepthCubeRenderTarget);e.matrix.copy(t.matrix),e.matrixWorld.copy(e.matrix),e.matrixAutoUpdate=!1,Z7(this.renderer,this.modelScene,e,500);let r=new mp(this.camera.near,this.camera.far,this.pano1DepthCubeRenderTarget);r.matrix.copy(n.matrix),r.matrixWorld.copy(r.matrix),r.matrixAutoUpdate=!1,Z7(this.renderer,this.modelScene,r,500),this.modelScene.parameter.set({pano0Depth:{panoId:t.panoId,map:this.pano0DepthCubeRenderTarget.texture,mapSize:this.pano0DepthCubeRenderTarget.width,maxDepth:500},pano1Depth:{panoId:n.panoId,map:this.pano1DepthCubeRenderTarget.texture,mapSize:this.pano1DepthCubeRenderTarget.width,maxDepth:500}})}}else this.modelScene.parameter.set({pano0Depth:null,pano1Depth:null}),this.flyEffectUseDepthBuffer||(this.pano0DepthCubeRenderTarget&&(this.pano0DepthCubeRenderTarget.dispose(),this.pano0DepthCubeRenderTarget=void 0),this.pano1DepthCubeRenderTarget&&(this.pano1DepthCubeRenderTarget.dispose(),this.pano1DepthCubeRenderTarget=void 0))}}render(){return this.renderer.setRenderTarget(null),this.renderer.setScissorTest(!1),this.cardboard.render(this.scene,this.camera),!0}setCamera(e={}){}destroyHelper(){}updateHelperElementSize(){if(!this.helperElement)return;let e=new A(this.element.offsetWidth,this.element.offsetHeight),t=e.x*this.viewport.left,n=e.y*(1-this.viewport.bottom-this.viewport.height),r=e.x*this.viewport.width,i=e.y*this.viewport.height;this.helperElement.style.marginLeft!==t+`px`&&(this.helperElement.style.marginLeft=t+`px`),this.helperElement.style.marginTop!==n+`px`&&(this.helperElement.style.marginTop=n+`px`),this.helperElement.style.width!==r+`px`&&(this.helperElement.style.width=r+`px`),this.helperElement.style.height!==i+`px`&&(this.helperElement.style.height=i+`px`)}intersect(e){var t,n;if(this.locationMotion.ended===!1){this.intersectMesh.visible=!1,this.activePanoMesh=void 0,this.activeTime=void 0;return}if(this.activePanoMesh&&this.activeTime&&e-this.activeTime>Jre){let e=this.activePanoMesh,t=null;return this.panoMeshes.forEach((n,r)=>{n===e&&(t=r)}),t!==null&&this.moveToPano(k3(t),{},!0),this.activePanoMesh=void 0,this.activeTime=void 0,e}let r=this.camera.getDirection(new j),i=new em(this.camera.position,r);i.params.Points={threshold:.1},i.firstHitOnly=!0,i.floorIndex=-1;let a,o=[],s=this.works.getObserver(this.currentPano),c=s?s.accessibleNodes.map(e=>O3({panoIndex:e,workCode:s.work.workCode})):[];for(let e of c){let r=this.panoMeshes.get(e);if(r){let[e]=i.intersectObject((t=r.hitTestMesh)==null?r:t,!0);if(e){let t=(n=s==null?void 0:s.floorIndex)==null?0:n;o.push({panoMesh:r,intersection:Object.assign({floorIndex:t,floor:t},e)})}}}let[l]=o.sort((e,t)=>e.intersection.distance-t.intersection.distance);l?(a=l.intersection,this.activePanoMesh!==l.panoMesh&&(this.activePanoMesh=l.panoMesh,this.activeTime=e),this.intersectMesh.position.copy(l.panoMesh.position),this.intersectMesh.lookAt(this.camera.position)):(this.activePanoMesh=void 0,this.activeTime=void 0),a||(a=this.modelScene.intersectRaycaster(i)[0]);let u=$(`intersect.update`,{raycaster:i,intersection:a==null?null:a,object:this.intersectMesh});if(this.emit(`intersect.update`,u),u.defaultPrevented){this.hideIntersectMesh();return}if(a&&a.face){let e=a.face.normal,t=new yo;t.setFromUnitVectors(new j(0,0,1),e),this.intersectMesh.quaternion.copy(t);let n=a.point.clone();this.intersectMesh.position.copy(n),l?this.intersectMesh.visible=!1:this.intersectMesh.visible=!0}else this.intersectMesh.visible=!1;return l==null?void 0:l.panoMesh}onPanGesture(){}onTapGesture(){}onPinchGesture(){}onMouseMove(){}onMouseOut(){}};q();var E9=.01,D9=`183`,O9={isXRRenderTarget:!0,_hasExternalTextures:!1,_autoAllocateDepthBuffer:!0,_isOpaqueFramebuffer:!0};function k9(e,t,n,r){let i=new Fo(t,n,{format:Oi,type:pi,colorSpace:e.outputColorSpace,stencilBuffer:e.stencil===!0,resolveDepthBuffer:r,resolveStencilBuffer:r});return Object.assign(i,O9),i}var Zre=class{constructor(e,t={}){var n;this.resources=null,this.warnedRevision=!1,this._outputBufferType=null,this.clearColorScratch=new N,this.viewportScratch=new Po,this.renderer=e,this.atlasSamples=(n=t.atlasSamples)==null?0:n}get outputBufferType(){return this._outputBufferType}verify(){let e=this.renderer,t=[],n=e.backend;n?(n.isWebGLBackend!==!0&&t.push(`backend.isWebGLBackend`),typeof n.setXRTarget!=`function`&&t.push(`backend.setXRTarget`)):t.push(`renderer.backend`),typeof e.setOutputRenderTarget!=`function`&&t.push(`renderer.setOutputRenderTarget`),typeof e.getOutputRenderTarget!=`function`&&t.push(`renderer.getOutputRenderTarget`);let r=k9(this.renderer,1,1,!0);try{let e=r;for(let[n,r]of Object.entries(O9))e[n]!==r&&t.push(`xrRT.${n}(期望 ${String(r)},实际 ${String(e[n])})`);for(let n of[`multiview`,`resolveDepthBuffer`])e[n]===void 0&&t.push(`xrRT.${n}`)}finally{r.dispose()}if(t.length>0)throw Error(`[RenderTargetBridge] three 内部 API 校验失败(THREE.REVISION=183),缺失或不符:${t.join(`、`)}`);D9!==`183`&&!this.warnedRevision&&(this.warnedRevision=!0,console.warn(`[RenderTargetBridge] THREE.REVISION=183,XR 标志位语义仅在 r${D9} 复核过,继续运行`))}verifyCameras(e){let t=this.renderer.coordinateSystem,n=e.map((e,n)=>e.coordinateSystem===t?null:n).filter(e=>e!==null);if(n.length>0)throw Error(`[RenderTargetBridge] Eye_Camera[${n.join(`,`)}] 的 coordinateSystem 与 renderer(${t})不一致,three 会改写其投影矩阵(THREE.REVISION=183)`)}init(e){var t,n,r;this.build(e),this._outputBufferType=(r=(n=(t=this.renderer).getOutputBufferType)==null?void 0:n.call(t))==null?null:r}renderFrame(e,t,n){let r=this.renderer,i=r,a=i.backend,o={autoClear:r.autoClear,autoClearColor:r.autoClearColor,autoClearDepth:r.autoClearDepth,autoClearStencil:r.autoClearStencil,viewport:r.getViewport(this.viewportScratch).clone(),scissorTest:r.getScissorTest(),clearAlpha:r.getClearAlpha(),output:i.getOutputRenderTarget(),rt:r.getRenderTarget(),clearColor:i.getClearColor(this.clearColorScratch).clone()};try{let{atlas:s,xrRT:c,quad:l,width:u,height:d}=this.syncResources(e);r.setScissorTest(!1),r.setRenderTarget(s);let f=t.background;r.setClearColor(f instanceof N?f:o.clearColor,1),r.clear(!0,!0,!1),r.autoClear=!1,r.autoClearColor=!1,r.autoClearDepth=!1,r.autoClearStencil=!1;for(let e of n){let n=e.viewport;s.viewport.set(n.x,d-n.height-n.y,n.width,n.height),r.render(t,e.camera)}r.setScissorTest(!1),a.setXRTarget(e.framebuffer),r.setRenderTarget(null),i.setOutputRenderTarget(c);let p=r.getPixelRatio();r.setViewport(0,0,(u+E9)/p,(d+E9)/p),l.render(r)}finally{i.setOutputRenderTarget(o.output),a.setXRTarget(null),r.setRenderTarget(o.rt),r.autoClear=o.autoClear,r.autoClearColor=o.autoClearColor,r.autoClearDepth=o.autoClearDepth,r.autoClearStencil=o.autoClearStencil,r.setScissorTest(o.scissorTest),r.setViewport(o.viewport),r.setClearColor(o.clearColor,o.clearAlpha)}}dispose(){var e,t,n;if(!this.resources)return;this.releaseResources();let r=this.renderer;(t=(e=r.backend)==null?void 0:e.setXRTarget)==null||t.call(e,null),(n=r.setOutputRenderTarget)==null||n.call(r,null),this._outputBufferType=null}syncResources(e){let t=this.resources;return t&&t.layer===e&&t.width===e.framebufferWidth&&t.height===e.framebufferHeight?t:this.build(e)}build(e){this.releaseResources();let t=e.framebufferWidth,n=e.framebufferHeight,r=new Fo(t,n,{format:Oi,type:this.supportsHalfFloat()?bi:pi,colorSpace:Ia,depthBuffer:!0,stencilBuffer:!1,samples:this.atlasSamples,generateMipmaps:!1,minFilter:ci,magFilter:ci}),i=k9(this.renderer,t,n,e.ignoreDepthValues===!1),a=new eD;a.fragmentNode=D2(S2(r.texture).rgb,1),a.depthTest=!1,a.depthWrite=!1;let o=new Jj(a);return this.resources={layer:e,width:t,height:n,atlas:r,xrRT:i,quad:o},this.resources}releaseResources(){let e=this.resources;e&&(this.resources=null,e.atlas.dispose(),e.xrRT.dispose(),e.quad.material.dispose())}supportsHalfFloat(){var e;let t=(e=this.renderer.backend)==null?void 0:e.gl;return t?!!t.getExtension(`EXT_color_buffer_float`)||!!t.getExtension(`EXT_color_buffer_half_float`):!1}};q();var Qre=class{constructor(){this.root=new ms,this._entries=new Map,this._dir=new j}add(e){for(let t of e){if(this._entries.has(t))continue;let e=new ps,n=new ps;e.visible=!1,n.visible=!1,this.root.add(e,n),this._entries.set(t,{source:t,targetRay:e,grip:n,rayFrame:-1})}}remove(e){let t=[];for(let n of e){let e=this._entries.get(n);e&&(this._entries.delete(n),this.root.remove(e.targetRay,e.grip),t.push(e))}return t}update(e,t,n,r){for(let i of this._entries.values()){let{source:a,targetRay:o,grip:s}=i,c=e.getPose(a.targetRaySpace,t),l=a.gripSpace?e.getPose(a.gripSpace,t):null;c?(this._applyPose(o,c,n),i.rayFrame=r):o.visible=!1,c&&l?this._applyPose(s,l,n):s.visible=!1}}hideAll(){for(let{targetRay:e,grip:t}of this._entries.values())e.visible=!1,t.visible=!1}fill(e,t,n){let r=this._entries.get(e);if(!r||r.rayFrame!==n||!r.targetRay.visible)return!1;let{matrixWorld:i}=r.targetRay;return t.ray.origin.setFromMatrixPosition(i),t.ray.direction.copy(this._dir.set(0,0,-1).transformDirection(i)),!0}clear(){for(let{targetRay:e,grip:t}of this._entries.values())this.root.remove(e,t);this._entries.clear()}entries(){return this._entries}_applyPose(e,t,n){let{position:r,orientation:i}=t.transform;e.position.set(n.x+r.x,n.y+r.y,n.z+r.z),e.quaternion.set(i.x,i.y,i.z,i.w),e.visible=!0,e.updateMatrixWorld(!0)}},$re=5e3;function eie(e){let t=[...new Set([e,`local`,`viewer`])];return t.slice(0,t.indexOf(`viewer`)+1)}function tie(){let e=Error(`会话在参考空间解析前已结束`);return e.aborted=!0,e}function A9(e){return e.map(e=>`${e.type}(${e.reason})`).join(`, `)}function nie(e,t){return HH(this,arguments,void 0,function*(e,t,n={}){var r,i,a;let o=(r=n.timeoutMs)==null?$re:r,s=n.isAborted,c=(i=n.schedule)==null?((e,t)=>setTimeout(e,t)):i,l=(a=n.clear)==null?(e=>clearTimeout(e)):a,u=eie(t),d=[];for(let n of u){let r=yield rie(e,n,o,c,l);if(s!=null&&s())throw tie();if(r.ok)return n!==t&&console.warn(`[XR] 参考空间降级:期望 ${t},实际采用 ${n};失败:${A9(d)}`),{space:r.space,type:n,failures:d};d.push({type:n,reason:r.reason})}let f=Error(`所有参考空间均不可用(期望 ${t}):${A9(d)}`);throw f.attempts=d,f})}function rie(e,t,n,r,i){return HH(this,void 0,void 0,function*(){let a,o=!1,s=new Promise(n=>{let r=e=>{o||n({ok:!0,space:e})},i=()=>{o||n({ok:!1,reason:`rejected`})};try{e.requestReferenceSpace(t).then(r,i)}catch(e){i()}}),c=new Promise(e=>{a=r(()=>e({ok:!1,reason:`timeout`}),n)});try{return yield Promise.race([s,c])}finally{o=!0,i(a)}})}q();var iie=5e3,j9=`会话在进入过程中已结束`,M9=class{static isBackendXRCapable(e){let t=e.backend;return(t==null?void 0:t.isWebGPUBackend)!==!0}static isBrowserXRCapable(){return typeof navigator<`u`&&`xr`in navigator}get isPresenting(){return this._isPresenting}get session(){return this._session}get frame(){return this._frame}get referenceSpaceType(){return this._referenceSpaceType}constructor(e,t,n){var r;this.inputs=new Qre,this._isPresenting=!1,this._session=null,this._frame=null,this._referenceSpaceType=null,this.refSpace=null,this.layer=null,this.entering=!1,this.entered=!1,this.endedDuringEnter=!1,this.snapshot=null,this.listeners=[],this.firstFrameArrived=!1,this.firstFrameWaiter=null,this.frameNo=0,this.submittedNear=NaN,this.submittedFar=NaN,this.offset=new j,this.info={time:0,hasPose:!1,headOrientation:new yo,headLocal:new j,views:[]},this.viewPool=[{eye:0,viewport:new Po},{eye:1,viewport:new Po}],this.frameViews=[],this.bridgeEyes=[],this.tmpViewport=new Po,this.tmpSize=new A,this.onSessionEndEvent=()=>{var e;if(this._session){if(!this.entered){this.endedDuringEnter=!0,(e=this.firstFrameWaiter)==null||e.reject(Error(j9));return}this.teardown()}},this.onInputSourcesChangeEvent=e=>{var t,n;if(!this._session)return;let{added:r,removed:i}=e;this.inputs.add(r),this.inputs.remove(i),(n=(t=this.callbacks).onInputSourcesChange)==null||n.call(t,r,i)},this.onSelectEvent=e=>{var t,n;(n=(t=this.callbacks).onSelect)==null||n.call(t,e.inputSource)},this.onReferenceSpaceReset=()=>{},this.renderer=e,this.options=t==null?{}:t,this.callbacks=n,this.bridge=new Zre(e,{atlasSamples:(r=this.options.atlasSamples)==null?0:r}),this.device=d5(),this.profile=h5(this.device,this.options.deviceProfile,e=>{console.warn(`[XR] Device_Profile 字段 ${e} 非法,已回落默认值`)});let i=()=>{let t=new Lf;return t.coordinateSystem=e.coordinateSystem,t};this.eyeCameras=[i(),i()],this.info.views=this.frameViews}enter(e){return HH(this,void 0,void 0,function*(){var t,n;if(!(this.entering||this.entered)){this.entering=!0,this.endedDuringEnter=!1,this.firstFrameArrived=!1,this._session=e;try{this.snapshot=this.captureRendererState(),this.bridge.verify(),this.bridge.verifyCameras(this.eyeCameras);let r=(t=this.renderer.backend)==null?void 0:t.gl;if(!r)throw Error(`[XRManager] 取不到 WebGL2 上下文(renderer.backend.gl),无法创建 XRWebGLLayer`);this.listen(e,`end`,this.onSessionEndEvent),this.listen(e,`inputsourceschange`,this.onInputSourcesChangeEvent),this.listen(e,`select`,this.onSelectEvent),yield r.makeXRCompatible(),this.throwIfEnded();let i=r.getContextAttributes(),a=new XRWebGLLayer(e,r,{alpha:!1,framebufferScaleFactor:1,antialias:i==null?void 0:i.antialias,depth:i==null?void 0:i.depth,stencil:i==null?void 0:i.stencil});this.layer=a;let o=this.options.foveation;o!==void 0&&`fixedFoveation`in a&&(a.fixedFoveation=J(o,0,1)),e.updateRenderState({baseLayer:a}),this.submittedNear=e.renderState.depthNear,this.submittedFar=e.renderState.depthFar,this.bridge.init(a);let s=yield nie(e,(n=this.options.referenceSpaceType)==null?`local-floor`:n,{isAborted:()=>this.endedDuringEnter});this.throwIfEnded(),this.refSpace=s.space,this._referenceSpaceType=s.type,this.listen(s.space,`reset`,this.onReferenceSpaceReset),aJ.shared.setContext(e),yield this.waitFirstFrame(),this.throwIfEnded(),this.syncExistingInputSources(e),this.entering=!1,this.entered=!0,this._isPresenting=!0;try{this.callbacks.onSessionStart(e,this.device)}catch(e){console.error(`[XR] onSessionStart 回调抛错`,e)}}catch(e){throw this.rollback(),this.endedDuringEnter?Error(j9):e}}})}exit(){return HH(this,void 0,void 0,function*(){let e=this._session;if(!(!this.entered||!e))try{yield e.end()}catch(t){this._session===e&&this.teardown()}})}dispose(){var e;let t=this._session;if(this.entering){this.endedDuringEnter=!0,(e=this.firstFrameWaiter)==null||e.reject(Error(j9)),t&&this.endQuietly(t);return}this.entered&&t&&(this.teardown(),this.endQuietly(t))}beginFrame(e,t,n,r,i){let a=this.info;a.time=t;let o=this._session,s=this.refSpace,c=this.layer;if(!o||!s||!c)return this.markNoPose(),a;this._frame=e,this.frameNo++,this.notifyFirstFrame();let l=e.getViewerPose(s),u=l==null?void 0:l.views,d=u?u.length:0;if(!l||!u||d!==1&&d!==2||!this.collectViews(c,u))return this.markNoPose(),this.inputs.hideAll(),a;let f=0,p=0,m=0;for(let e=0;e<d;e++){let t=u[e].transform.position;f+=t.x,p+=t.y,m+=t.z}a.headLocal.set(f/d,p/d,m/d);let h=l.transform.orientation;a.headOrientation.set(h.x,h.y,h.z,h.w),a.hasPose=!0,this.offset.copy(n).sub(a.headLocal);for(let e=0;e<d;e++){let t=u[e],a=this.eyeCameras[this.frameViews[e].eye];a.projectionMatrix.fromArray(t.projectionMatrix),a.projectionMatrixInverse.copy(a.projectionMatrix).invert();let o=t.transform.orientation;a.position.copy(n),a.quaternion.set(o.x,o.y,o.z,o.w),a.near=r,a.far=i,a.updateMatrixWorld(!0)}return this.syncDepthRange(o,r,i),this.inputs.update(e,s,this.offset,this.frameNo),a}renderEyes(e){var t;let n=this.layer;if(!n||!this._session||!this.info.hasPose)return!1;let r=this.bridgeEyes,i=this.frameViews;r.length=i.length;for(let e=0;e<i.length;e++){let n=(t=r[e])==null?r[e]={camera:this.eyeCameras[0],viewport:i[e].viewport}:t;n.camera=this.eyeCameras[i[e].eye],n.viewport=i[e].viewport}return this.bridge.renderFrame(n,e,r),!0}fillRaycaster(e,t){return this.inputs.fill(e,t,this.frameNo)}markNoPose(){this.info.hasPose=!1,this.frameViews.length=0}collectViews(e,t){let n=0;this.frameViews.length=0;for(let r=0;r<t.length;r++){let i=+(t[r].eye===`right`);n&1<<i&&(i=+(i===0)),n|=1<<i;let a=e.getViewport(t[r]);if(!a)return this.frameViews.length=0,!1;let o=this.viewPool[r];o.eye=i,o.viewport.set(a.x,a.y,a.width,a.height),this.frameViews.push(o)}return!0}syncDepthRange(e,t,n){t===this.submittedNear&&n===this.submittedFar||Number.isFinite(t)&&Number.isFinite(n)&&t>0&&n>t&&(e.updateRenderState({depthNear:t,depthFar:n}),this.submittedNear=t,this.submittedFar=n)}notifyFirstFrame(){var e;this.firstFrameArrived||(this.firstFrameArrived=!0,(e=this.firstFrameWaiter)==null||e.resolve())}throwIfEnded(){if(this.endedDuringEnter)throw Error(j9)}waitFirstFrame(){var e;if(this.firstFrameArrived)return Promise.resolve();let t=(e=this.options.firstFrameTimeoutMs)==null?iie:e;return new Promise((e,n)=>{let r=setTimeout(()=>{this.firstFrameWaiter=null,n(Error(`等待首帧超时(${t}ms 内未收到首个 XRFrame)`))},t);this.firstFrameWaiter={resolve:()=>{clearTimeout(r),this.firstFrameWaiter=null,e()},reject:e=>{clearTimeout(r),this.firstFrameWaiter=null,n(e)}}})}syncExistingInputSources(e){var t,n,r;let i=this.inputs.entries(),a=Array.from((t=e.inputSources)==null?[]:t).filter(e=>!i.has(e));a.length!==0&&(this.inputs.add(a),(r=(n=this.callbacks).onInputSourcesChange)==null||r.call(n,a,[]))}listen(e,t,n){e.addEventListener(t,n),this.listeners.push({target:e,type:t,handler:n})}removeListeners(){for(let{target:e,type:t,handler:n}of this.listeners)e.removeEventListener(t,n);this.listeners.length=0}captureRendererState(){let e=this.renderer;return{viewport:e.getViewport(new Po).clone(),autoClear:e.autoClear,autoClearColor:e.autoClearColor,autoClearDepth:e.autoClearDepth,autoClearStencil:e.autoClearStencil,pixelRatio:e.getPixelRatio(),size:e.getSize(new A).clone()}}restoreRendererState(){let e=this.snapshot;if(!e)return;this.snapshot=null;let t=this.renderer;t.autoClear=e.autoClear,t.autoClearColor=e.autoClearColor,t.autoClearDepth=e.autoClearDepth,t.autoClearStencil=e.autoClearStencil,t.getPixelRatio()!==e.pixelRatio&&t.setPixelRatio(e.pixelRatio),t.getSize(this.tmpSize).equals(e.size)||t.setSize(e.size.x,e.size.y),t.getViewport(this.tmpViewport).equals(e.viewport)||t.setViewport(e.viewport)}releaseFrameSource(e){let t=aJ.shared;e&&t.getContext()===e&&t.setContext(null)}clearReferences(){this._session=null,this._frame=null,this.refSpace=null,this._referenceSpaceType=null,this.layer=null,this.markNoPose(),this.frameNo=0,this.firstFrameArrived=!1,this.submittedNear=NaN,this.submittedFar=NaN}rollback(){var e;let t=this._session;(e=this.firstFrameWaiter)==null||e.reject(Error(j9)),this.removeListeners(),this.inputs.clear(),this.bridge.dispose(),this.releaseFrameSource(t),this.restoreRendererState(),this.clearReferences(),this._isPresenting=!1,this.entering=!1,this.entered=!1}teardown(){var e,t;let n=this._session;if(n){this._isPresenting=!1,this.entered=!1;try{(t=(e=this.callbacks).onSessionEnding)==null||t.call(e)}catch(e){console.error(`[XR] onSessionEnding 回调抛错`,e)}this.inputs.clear(),this.bridge.dispose(),this.removeListeners(),this.releaseFrameSource(n),this.restoreRendererState(),this.clearReferences(),this.callbacks.onSessionEnd(this.device)}}endQuietly(e){try{Promise.resolve(e.end()).catch(()=>{})}catch(e){}}};q();var N9={Handedness:Object.freeze({NONE:`none`,LEFT:`left`,RIGHT:`right`}),ComponentState:Object.freeze({DEFAULT:`default`,TOUCHED:`touched`,PRESSED:`pressed`}),ComponentProperty:Object.freeze({BUTTON:`button`,X_AXIS:`xAxis`,Y_AXIS:`yAxis`,STATE:`state`}),ComponentType:Object.freeze({TRIGGER:`trigger`,SQUEEZE:`squeeze`,TOUCHPAD:`touchpad`,THUMBSTICK:`thumbstick`,BUTTON:`button`}),ButtonTouchThreshold:.05,AxisTouchThreshold:.1,VisualResponseProperty:Object.freeze({TRANSFORM:`transform`,VISIBILITY:`visibility`})};function P9(e){return HH(this,void 0,void 0,function*(){let t=yield fetch(e);if(t.ok)return t.json();throw Error(t.statusText)})}function aie(e){return HH(this,void 0,void 0,function*(){if(!e)throw Error(`No basePath supplied`);return yield P9(`${e}/profilesList.json`)})}function oie(e,t){return HH(this,arguments,void 0,function*(e,t,n=null,r=!0){if(!e)throw Error(`No xrInputSource supplied`);if(!t)throw Error(`No basePath supplied`);let i=yield aie(t),a;if(e.profiles.some(e=>{let n=i[e];return n&&(a={profileId:e,profilePath:`${t}/${n.path}`,deprecated:!!n.deprecated}),!!a}),!a){if(!n)throw Error(`No matching profile name found`);let e=i[n];if(!e)throw Error(`No matching profile name found and default profile "${n}" missing.`);a={profileId:n,profilePath:`${t}/${e.path}`,deprecated:!!e.deprecated}}let o=yield P9(a.profilePath),s;if(r){let t;if(t=o.layouts[e.handedness],!t)throw Error(`No matching handedness, ${e.handedness}, in profile ${a.profileId}`);t.assetPath&&(s=a.profilePath.replace(`profile.json`,t.assetPath))}return{profile:o,assetPath:s}})}var sie={xAxis:0,yAxis:0,button:0,state:N9.ComponentState.DEFAULT};function cie(e=0,t=0){let n=e,r=t;if(Math.sqrt(e*e+t*t)>1){let i=Math.atan2(t,e);n=Math.cos(i),r=Math.sin(i)}return{normalizedXAxis:n*.5+.5,normalizedYAxis:r*.5+.5}}var lie=class{constructor(e){this.componentProperty=e.componentProperty,this.states=e.states,this.valueNodeName=e.valueNodeName,this.valueNodeProperty=e.valueNodeProperty,this.valueNodeProperty===N9.VisualResponseProperty.TRANSFORM&&(this.minNodeName=e.minNodeName,this.maxNodeName=e.maxNodeName),this.value=0,this.updateFromComponent(sie)}updateFromComponent({xAxis:e,yAxis:t,button:n,state:r}){let{normalizedXAxis:i,normalizedYAxis:a}=cie(e,t);switch(this.componentProperty){case N9.ComponentProperty.X_AXIS:this.value=this.states.includes(r)?i:.5;break;case N9.ComponentProperty.Y_AXIS:this.value=this.states.includes(r)?a:.5;break;case N9.ComponentProperty.BUTTON:this.value=this.states.includes(r)?n:0;break;case N9.ComponentProperty.STATE:this.valueNodeProperty===N9.VisualResponseProperty.VISIBILITY?this.value=this.states.includes(r):this.value=+!!this.states.includes(r);break;default:throw Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`)}}},uie=class{constructor(e,t){if(!e||!t||!t.visualResponses||!t.gamepadIndices||Object.keys(t.gamepadIndices).length===0)throw Error(`Invalid arguments supplied`);this.id=e,this.type=t.type,this.rootNodeName=t.rootNodeName,this.touchPointNodeName=t.touchPointNodeName,this.visualResponses={},Object.keys(t.visualResponses).forEach(e=>{let n=new lie(t.visualResponses[e]);this.visualResponses[e]=n}),this.gamepadIndices=Object.assign({},t.gamepadIndices),this.values={state:N9.ComponentState.DEFAULT,button:this.gamepadIndices.button===void 0?void 0:0,xAxis:this.gamepadIndices.xAxis===void 0?void 0:0,yAxis:this.gamepadIndices.yAxis===void 0?void 0:0}}get data(){return Object.assign({id:this.id},this.values)}updateFromGamepad(e){if(this.values.state=N9.ComponentState.DEFAULT,this.gamepadIndices.button!==void 0&&e.buttons.length>this.gamepadIndices.button){let t=e.buttons[this.gamepadIndices.button];this.values.button=t.value,this.values.button=this.values.button<0?0:this.values.button,this.values.button=this.values.button>1?1:this.values.button,t.pressed||this.values.button===1?this.values.state=N9.ComponentState.PRESSED:(t.touched||this.values.button>N9.ButtonTouchThreshold)&&(this.values.state=N9.ComponentState.TOUCHED)}this.gamepadIndices.xAxis!==void 0&&e.axes.length>this.gamepadIndices.xAxis&&(this.values.xAxis=e.axes[this.gamepadIndices.xAxis],this.values.xAxis=this.values.xAxis<-1?-1:this.values.xAxis,this.values.xAxis=this.values.xAxis>1?1:this.values.xAxis,this.values.state===N9.ComponentState.DEFAULT&&Math.abs(this.values.xAxis)>N9.AxisTouchThreshold&&(this.values.state=N9.ComponentState.TOUCHED)),this.gamepadIndices.yAxis!==void 0&&e.axes.length>this.gamepadIndices.yAxis&&(this.values.yAxis=e.axes[this.gamepadIndices.yAxis],this.values.yAxis=this.values.yAxis<-1?-1:this.values.yAxis,this.values.yAxis=this.values.yAxis>1?1:this.values.yAxis,this.values.state===N9.ComponentState.DEFAULT&&Math.abs(this.values.yAxis)>N9.AxisTouchThreshold&&(this.values.state=N9.ComponentState.TOUCHED)),Object.values(this.visualResponses).forEach(e=>{e.updateFromComponent(this.values)})}},die=class{constructor(e,t,n){if(!e)throw Error(`No xrInputSource supplied`);if(!t)throw Error(`No profile supplied`);this.xrInputSource=e,this.assetUrl=n,this.id=t.profileId,this.layoutDescription=t.layouts[e.handedness],this.components={},Object.keys(this.layoutDescription.components).forEach(e=>{let t=this.layoutDescription.components[e];this.components[e]=new uie(e,t)}),this.updateFromGamepad()}get gripSpace(){return this.xrInputSource.gripSpace}get targetRaySpace(){return this.xrInputSource.targetRaySpace}get data(){let e=[];return Object.values(this.components).forEach(t=>{e.push(t.data)}),e}updateFromGamepad(){Object.values(this.components).forEach(e=>{e.updateFromGamepad(this.xrInputSource.gamepad)})}},fie=`https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles`,pie=`generic-trigger`,mie=class extends ps{constructor(){super(),this.motionController=null,this.envMap=null}setEnvironmentMap(e){return this.envMap==e?this:(this.envMap=e,this.traverse(e=>{e instanceof pl&&e.isMesh&&(e.material.envMap=this.envMap,e.material.needsUpdate=!0)}),this)}updateMatrixWorld(e){super.updateMatrixWorld(e),this.motionController&&(this.motionController.updateFromGamepad(),Object.values(this.motionController.components).forEach(e=>{Object.values(e.visualResponses).forEach(e=>{let{valueNode:t,minNode:n,maxNode:r,value:i,valueNodeProperty:a}=e;t&&(a===N9.VisualResponseProperty.VISIBILITY?t.visible=i:a===N9.VisualResponseProperty.TRANSFORM&&(t.quaternion.copy(n.quaternion).slerp(r.quaternion,i),t.position.lerpVectors(n.position,r.position,i)))})}))}};function hie(e,t){Object.values(e.components).forEach(e=>{let{type:n,touchPointNodeName:r,visualResponses:i}=e;if(n===N9.ComponentType.TOUCHPAD)if(e.touchPointNode=t.getObjectByName(r),e.touchPointNode){let t=new pl(new Ed(.001),new tl({color:255}));e.touchPointNode.add(t)}else console.warn(`Could not find touch dot, ${e.touchPointNodeName}, in touchpad component ${e.id}`);Object.values(i).forEach(e=>{let{valueNodeName:n,minNodeName:r,maxNodeName:i,valueNodeProperty:a}=e;if(a===N9.VisualResponseProperty.TRANSFORM){if(e.minNode=t.getObjectByName(r),e.maxNode=t.getObjectByName(i),!e.minNode){console.warn(`Could not find ${r} in the model`);return}if(!e.maxNode){console.warn(`Could not find ${i} in the model`);return}}e.valueNode=t.getObjectByName(n),e.valueNode||console.warn(`Could not find ${n} in the model`)})})}function F9(e,t){hie(e.motionController,t),e.envMap&&t.traverse(t=>{t instanceof pl&&t.isMesh&&(t.material.envMap=e.envMap,t.material.needsUpdate=!0)}),e.add(t)}var gie=class{constructor(e=null){this.gltfLoader=e,this.path=fie,this._assetCache={}}createControllerModel(e){let t=new mie,n=null;return e.addEventListener(`connected`,e=>{let r=e.data;r.targetRayMode!==`tracked-pointer`||!r.gamepad||oie(r,this.path,pie).then(({profile:e,assetPath:i})=>{t.motionController=new die(r,e,i);let a=this._assetCache[t.motionController.assetUrl];if(a)n=a.scene.clone(),F9(t,n);else{if(!this.gltfLoader)throw Error(`GLTFLoader not set.`);this.gltfLoader.load(t.motionController.assetUrl,e=>{this._assetCache[t.motionController.assetUrl]=e,n=e.scene.clone(),F9(t,n)})}}).catch(e=>{console.warn(e)})}),e.addEventListener(`disconnected`,()=>{t.motionController=null,t.remove(n),n=null}),t}},_ie=class{constructor(){this.states=new Map}sample(e,t,n,r){let i=this.states.get(e),a=i==null?void 0:i.get(t);if(!a){if(!n)return[];let a=i;return a||(a=new Map,this.states.set(e,a)),a.set(t,{downAt:r,pressFired:!1}),[{type:`buttonDown`,name:t,source:e,time:r,duration:0}]}let o=r-a.downAt,s=o>=300;if(n)return s&&!a.pressFired?(a.pressFired=!0,[{type:`press`,name:t,source:e,time:r,duration:o}]):[];this.deleteState(e,t);let c=[];return a.pressFired?c.push({type:`buttonUp`,name:t,source:e,time:r,duration:o}):s?(c.push({type:`press`,name:t,source:e,time:r,duration:o}),c.push({type:`buttonUp`,name:t,source:e,time:r,duration:o})):(c.push({type:`buttonUp`,name:t,source:e,time:r,duration:o}),c.push({type:`tap`,name:t,source:e,time:r,duration:o})),c}removeSource(e,t){let n=this.states.get(e);if(!n)return[];let r=[];for(let[i,a]of n)r.push({type:`buttonUp`,name:i,source:e,time:t,duration:t-a.downAt});return this.states.delete(e),r}reset(e){let t=[];for(let[n,r]of this.states)for(let[i,a]of r)t.push({type:`buttonUp`,name:i,source:n,time:e,duration:e-a.downAt});return this.states.clear(),t}deleteState(e,t){let n=this.states.get(e);n&&(n.delete(t),n.size===0&&this.states.delete(e))}};q();var I9=Object.assign(Object.assign({},_q(n9,[`maxLatitude`,`minLatitude`])),{referenceSpaceType:`local-floor`,foveation:1,showControllerModel:!0,showPointerRay:!0,deviceProfile:{}}),L9=5,vie=1e-4,yie=1500;function bie(){return{load(e,t){hq.ajax(e,{responseType:`arraybuffer`}).then(t=>{var n;return OZ(t.body,{resourcePath:e.slice(0,e.lastIndexOf(`/`)+1),search:(n=e.split(`?`)[1])==null?``:n,fetcher:hq})}).then(e=>t(e)).catch(t=>{console.warn(`[XRPanorama] 手柄模型 glTF 加载失败,跳过模型挂载:`,e,t)})}}}var xie=class e extends r9{static parseArgs(t){if(t instanceof e)return t;let n=Object.assign(Object.assign({},t),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2});return super.parseArgs(n)}static initAnimationEndState(e){let t=this.parseArgs(e),n=super.initAnimationEndState(t);return Object.assign(Object.assign({},n),{mode:`XRPanorama`})}constructor(t){var n,r,i,a,o;let s=e.parseArgs(t);super(s),this.controllerRayFilled={left:!1,right:!1},this.controllerModelFactory=null,this.buttonStateMachine=new _ie,this.inputVisuals=new Map,this.inputsDirty=!1,this.walkedThisFrame=!1,this.lastFrameTime=0,this.walkSources={left:null,right:null},this.gazeRayPool=null,this.mode=`XRPanorama`;let c=I9,l=(n=t.referenceSpaceType)==null?c.referenceSpaceType:n,u=(r=t.foveation)==null?c.foveation:r;this.showControllerModel=(i=t.showControllerModel)==null?c.showControllerModel:i,this.showPointerRay=(a=t.showPointerRay)==null?c.showPointerRay:a,this.controllerRaycasters={left:this.createPickingRaycaster(),right:this.createPickingRaycaster()},this.gazeRaycaster=null,this.xrManager=new M9(this.renderer,{referenceSpaceType:l,foveation:u,deviceProfile:(o=t.deviceProfile)==null?c.deviceProfile:o},{onSessionStart:(e,t)=>{this.emit(`xr.session.start`,$(`xr.session.start`,{session:e,machineType:g5(t)}))},onSessionEnd:e=>{this.emit(`xr.session.end`,$(`xr.session.end`,{session:null,machineType:g5(e)}))},onSessionEnding:()=>{this.resetButtonStates(),this.clearInputVisuals()},onSelect:e=>this.onXRSelect(e),onInputSourcesChange:(e,t)=>{for(let e of t){this.removeInputVisual(e);for(let t of this.buttonStateMachine.removeSource(e,this.lastFrameTime))this.dispatchButtonEvent(t)}for(let t of e)this.syncInputVisual(t)}}),this.buttonMaps={left:this.createButtonMap(`left`),right:this.createButtonMap(`right`)},this.scene.add(this.xrManager.inputs.root);let d=aJ.shared.getContext();(d?this.xrManager.enter(d):Promise.reject(Error(`[XR] 缺少 XRSession:请经 Five.changeMode 进入 XRPanorama`))).catch(e=>{console.error(`[XR] 进入失败`,e),this.emit(`error`,e instanceof Error?e:Error(String(e)))})}updateConfiguration(e){let t=super.updateConfiguration(Object.assign(Object.assign({},e),{maxLatitude:Math.PI/2,minLatitude:-Math.PI/2}));return e.showControllerModel!==void 0&&e.showControllerModel!==this.showControllerModel&&(this.showControllerModel=e.showControllerModel,this.inputsDirty=!0),e.showPointerRay!==void 0&&e.showPointerRay!==this.showPointerRay&&(this.showPointerRay=e.showPointerRay,this.inputsDirty=!0),t}updateTime(e,t,...n){var r,i;if(this.destroyed)return;this.walkedThisFrame=!1,this.lastFrameTime=e;let a=n[1];if(this.userAction=!0,this.needsRender=!0,!a){this.controllerRayFilled.left=!1,this.controllerRayFilled.right=!1,this.gazeRaycaster=null,super.updateTime(e,t),this.intersect(e);return}super.updateTime(e,t);let o=this.xrManager.beginFrame(a,e,this.camera.position,this.camera.near,this.camera.far);if(o.hasPose&&this.syncCameraFromXR(o.headOrientation),this.inputsDirty){this.inputsDirty=!1;for(let e of this.xrManager.inputs.entries().keys())this.syncInputVisual(e)}this.updateControllerHelper((i=(r=this.xrManager.session)==null?void 0:r.inputSources)==null?[]:i,e,t),this.updateGazeRay(),this.intersect(e)}syncCameraFromXR(e){this.camera.quaternion.copy(e),this.camera.matrix.compose(this.camera.position,this.camera.quaternion,this.camera.scale),this.camera.computePose(this.camera.pose.distance)}render(){return this.xrManager.isPresenting?(this.xrManager.renderEyes(this.scene),!0):!1}updateCamera(e,t,n){return Promise.resolve()}updateCameraWithKeyframes(e,t,n){return Promise.resolve()}setCamera(e={}){e.offset&&this.camera.position.copy(e.offset),this.camera.matrix.compose(this.camera.position,this.camera.quaternion,this.camera.scale),this.camera.computePose(this.camera.pose.distance)}updateRenderSize(){this.needsRender=!0}isReady(){return!1}createPickingRaycaster(){let e=new em;return e.params.Points={threshold:.1},e.firstHitOnly=!0,e.floorIndex=-1,e}updateControllerHelper(e,t,n){var r,i,a;if(this.controllerRayFilled.left=!1,this.controllerRayFilled.right=!1,this.walkSources.left=null,this.walkSources.right=null,!e||e.length===0)return;let o={up:0,down:0,left:0,right:0},s={up:0,down:0,left:0,right:0},c={X:!1,Y:!1,LeftTrigger:!1,LeftPinch:!1,A:!1,B:!1,RightTrigger:!1,RightPinch:!1};for(let n=0;n<e.length;n++){let l=e[n];if(!l)continue;let u=l.handedness===`left`?`left`:`right`;this.xrManager.fillRaycaster(l,this.controllerRaycasters[u])&&(this.controllerRayFilled[u]=!0),this.readAxes(l.gamepad,u===`left`?o:s);let d=(r=l.gamepad)==null?void 0:r.buttons;for(let{name:e,index:n}of this.buttonMaps[u]){let r=(a=(i=d==null?void 0:d[n])==null?void 0:i.pressed)==null?!1:a;r&&(c[e]=!0);for(let n of this.buttonStateMachine.sample(l,e,r,t))this.dispatchButtonEvent(n)}}this.emit(`xr.controller.update`,$(`xr.controller.update`,{left:{axes:o,raycaster:this.controllerRaycasters.left,deltaTime:n},right:{axes:s,raycaster:this.controllerRaycasters.right,deltaTime:n},buttons:c})),this.walkByTap()}createButtonMap(e){let t=this.xrManager.profile.buttons,n=e===`left`,r=[[n?`LeftTrigger`:`RightTrigger`,t.trigger],[n?`X`:`A`,t.primary],[n?`Y`:`B`,t.secondary],[n?`LeftPinch`:`RightPinch`,t.pinch]],i=[];for(let[e,t]of r)t!==null&&i.push({name:e,index:t});return i}dispatchButtonEvent(e){let{type:t,name:n,source:r}=e,i=this.emitGesture(`xr.gesture.${t}`,n,t===`buttonDown`||t===`tap`,t===`buttonUp`||t===`tap`);t===`tap`&&!i.defaultPrevented&&(n===`RightTrigger`?this.walkSources.right=r:n===`LeftTrigger`&&(this.walkSources.left=r))}walkByTap(){this.tryWalk(this.walkSources.right,`right`),this.tryWalk(this.walkSources.left,`left`)}tryWalk(e,t){if(!e||this.walkedThisFrame)return;let n=this.controllerRaycasters[t];this.xrManager.fillRaycaster(e,n)&&(this.walkedThisFrame=!0,this.activePanoMesh=void 0,this.activeTime=void 0,this.checkSelectedPano(n))}resetButtonStates(){for(let e of this.buttonStateMachine.reset(this.lastFrameTime))this.dispatchButtonEvent(e)}readAxes(e,t){var n,r;if(!e)return;let{x:i,y:a}=this.xrManager.profile.axes,o=(n=i===null?0:e.axes[i])==null?0:n,s=(r=a===null?0:e.axes[a])==null?0:r;t.right=o>0?o:0,t.left=o<0?-o:0,t.down=s>0?s:0,t.up=s<0?-s:0}getControllerModelFactory(){if(!this.controllerModelFactory){let e=new gie;e.gltfLoader=bie(),this.controllerModelFactory=e}return this.controllerModelFactory}syncInputVisual(e){let t=this.xrManager.inputs.entries().get(e);if(!t)return;let n=this.inputVisuals.get(e);n||(n={},this.inputVisuals.set(e,n));let r=e.targetRayMode===`tracked-pointer`,i=r&&!!e.gamepad&&!!e.gripSpace&&this.showControllerModel&&this.xrManager.profile.model!==`none`;if(i&&!n.model){let r=new ps,i=this.getControllerModelFactory().createControllerModel(r);r.dispatchEvent({type:`connected`,data:e}),t.grip.add(i),n.model=i}else!i&&n.model&&(n.model.removeFromParent(),n.model=void 0);let a=r&&this.showPointerRay;if(a&&!n.ray){let e=new Cc;e.setAttribute(`position`,new dc([0,0,0,0,0,-5],3));let r=new lu({color:16777215,depthTest:!1,depthWrite:!1,transparent:!0}),i=new bu(e,r);i.renderOrder=999,i.frustumCulled=!1,t.targetRay.add(i),n.ray=i,n.rayLength=L9}else!a&&n.ray&&(this.disposeRay(n.ray),n.ray=void 0)}updatePointerRayLength(e,t){for(let[n,r]of this.inputVisuals){let i=r.ray;if(!i)continue;let a=n.handedness===`left`?`left`:`right`,o=L9;if(e&&t&&e===this.controllerRaycasters[a]&&(o=Math.min(e.ray.origin.distanceTo(t),L9)),r.rayLength!==void 0&&Math.abs(r.rayLength-o)<vie)continue;let s=i.geometry.getAttribute(`position`);s.setZ(1,-o),s.needsUpdate=!0,r.rayLength=o}}removeInputVisual(e){var t;let n=this.inputVisuals.get(e);n&&((t=n.model)==null||t.removeFromParent(),n.ray&&this.disposeRay(n.ray),this.inputVisuals.delete(e))}clearInputVisuals(){for(let e of Array.from(this.inputVisuals.keys()))this.removeInputVisual(e)}disposeRay(e){e.removeFromParent(),e.geometry.dispose(),e.material.dispose()}emitGesture(e,t,n,r){let i=$(e,{session:this.xrManager.session,buttons:t,machineType:g5(this.xrManager.device),isFirst:n,isFinal:r,controllers:{raycaster:{leftRay:this.controllerRaycasters.left,rightRay:this.controllerRaycasters.right}}});return this.emit(e,i),i}updateGazeRay(){var e,t;let n=(e=this.xrManager.session)==null?void 0:e.inputSources;if(!n||n.length===0){this.gazeRaycaster=null;return}let r=null;for(let e=0;e<n.length;e++){let t=n[e];if(!t)continue;let i=t.targetRayMode;if(i===`transient-pointer`||i===`gaze`||t.hand!=null){r=t;break}}if(!r){this.gazeRaycaster=null;return}let i=(t=this.gazeRayPool)==null?this.gazeRayPool=this.createPickingRaycaster():t;this.gazeRaycaster=this.xrManager.fillRaycaster(r,i)?i:null}onXRSelect(e){var t;if(e.targetRayMode!==`gaze`&&e.targetRayMode!==`transient-pointer`)return;let n=(t=this.gazeRayPool)==null?this.gazeRayPool=this.createPickingRaycaster():t;this.xrManager.fillRaycaster(e,n)&&this.checkSelectedPano(n)}pickPickingRaycaster(){return this.gazeRaycaster?this.gazeRaycaster:this.controllerRayFilled.right?this.controllerRaycasters.right:this.controllerRayFilled.left?this.controllerRaycasters.left:null}intersect(e){var t,n;if(this.locationMotion.ended===!1){this.intersectMesh.visible=!1,this.activePanoMesh=void 0,this.activeTime=void 0,this.updatePointerRayLength(null,null);return}if(this.activePanoMesh&&this.activeTime&&e-this.activeTime>yie){let e=this.activePanoMesh,t=null;return this.panoMeshes.forEach((n,r)=>{n===e&&(t=r)}),t!==null&&(this.moveToPano(k3(t),{},!0),this.walkedThisFrame=!0),this.activePanoMesh=void 0,this.activeTime=void 0,this.updatePointerRayLength(null,null),e}let r=this.pickPickingRaycaster();if(!r){this.intersectMesh.visible=!1,this.activePanoMesh=void 0,this.activeTime=void 0,this.updatePointerRayLength(null,null);return}let i,a=[],o=this.works.getObserver(this.currentPano),s=o?o.accessibleNodes.map(e=>O3({panoIndex:e,workCode:o.work.workCode})):[];for(let e of s){let i=this.panoMeshes.get(e);if(i){let[e]=r.intersectObject((t=i.hitTestMesh)==null?i:t,!0);if(e){let t=(n=o==null?void 0:o.floorIndex)==null?0:n;a.push({panoMesh:i,intersection:Object.assign({floorIndex:t,floor:t},e)})}}}let[c]=a.sort((e,t)=>e.intersection.distance-t.intersection.distance);c?(i=c.intersection,this.activePanoMesh!==c.panoMesh&&(this.activePanoMesh=c.panoMesh,this.activeTime=e),this.intersectMesh.position.copy(c.panoMesh.position),this.intersectMesh.lookAt(this.camera.position)):(this.activePanoMesh=void 0,this.activeTime=void 0),i||(i=this.modelScene.intersectRaycaster(r)[0]),this.updatePointerRayLength(r,i?i.point:null);let l=$(`intersect.update`,{raycaster:r,intersection:i==null?null:i,object:this.intersectMesh});if(this.emit(`intersect.update`,l),l.defaultPrevented){this.hideIntersectMesh();return}if(i&&i.face){let e=i.face.normal,t=new yo;t.setFromUnitVectors(new j(0,0,1),e),this.intersectMesh.quaternion.copy(t);let n=i.point.clone();this.intersectMesh.position.copy(n),c?this.intersectMesh.visible=!1:this.intersectMesh.visible=!0}else this.intersectMesh.visible=!1;return c==null?void 0:c.panoMesh}checkSelectedPano(e){var t;this.stopMomentumMovement();let n=this.works.getObserver(this.currentPano);if(!n)return;let r=n.work.observers,i=n.accessibleNodes.filter(e=>{if(e===this.currentPano.panoIndex&&n.work.workCode===this.currentPano.workCode)return!1;let t=r[e];return!t||t.position.clone().applyMatrix4(t.work.transform).distanceTo(this.camera.position)>this.maxAccessibleDistance?!1:t.loadable||t.active}),a=null,[o]=this.modelScene.intersectRaycaster(e);if(o){let[e,n]=rQ(i,e=>{let t=r[e];return t?t.standingPosition.clone().applyMatrix4(t.work.transform).distanceTo(o.point):1/0},!0);typeof e==`number`&&n<this.panoTapTriggerRadius&&(a=(t=r[e])==null?null:t)}if(a||(a=this.getForwardObserverOrNot(this.xrManager.eyeCameras[0],e)),a&&a.panoId===O3(this.currentPano)&&(a=null),a&&!this.locationMotion.ended){for(let e of this.locationMotion.keyframes)if(this.panoResourceFromLocationMotionKeyframe(e).panoId===a.panoId){a=null;break}}if(!a){this.locationMotion.ended===!0&&this.cameraBounce();return}let s={workCode:a.work.workCode,panoIndex:a.panoIndex,mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,distance:0,offset:a.position.clone()};if(this.emit(`pano.select`,$(`pano.select`,{prevPano:this.currentPano,state:s,userAction:!0,options:{},progress:0,error:null})),!a.active){let e=this.panoMeshes.get(a.panoId);e&&(e.setDisabled(!1),e.setLoading(!0));return}this.emit(`pano.request`,$(`pano.request`,{userAction:!0,prevPano:this.currentPano,state:s,options:{},progress:0,error:null}))}destroy(){super.destroy(),this.xrManager.dispose(),this.clearInputVisuals(),this.scene.remove(this.xrManager.inputs.root)}onPanGesture(){}onTapGesture(){}onPinchGesture(){}onMouseMove(){}onMouseOut(){}};q();var Sie=new j(0,1.6,0),R9=new Rs,z9=new j,Cie=Object.assign({},D7),wie=class e extends O7{static parseArgs(t){return t instanceof e?t:super.parseArgs(t)}static initAnimationEndState(e){var t,n,r,i,a,o;let s=this.parseArgs(e),c=s.works,{state:l,currentState:u}=e.initial,d=typeof l.panoIndex==`number`?{workCode:(r=(t=l.workCode)==null?(n=s.works[0])==null?void 0:n.workCode:t)==null?``:r,panoIndex:l.panoIndex}:{workCode:u.workCode,panoIndex:u.panoIndex},f=c.getObserver(d),p=J((i=l.fov)==null?!f||t7(u.mode)?u.fov:s.defaultFov:i,s.minFov,s.maxFov),m=(a=l.longitude)==null?u.longitude:a,h=J(typeof s.minLatitude==`function`?s.minLatitude(p):s.minLatitude,-Math.PI/2,Math.PI/2),g=J(typeof s.maxLatitude==`function`?s.maxLatitude(p):s.maxLatitude,-Math.PI/2,Math.PI/2),_=J((o=l.latitude)==null?!f||t7(u.mode)?u.latitude:s.defaultLatitude:o,h,g),v=new j;if(s.initial.state.offset)v.copy(s.initial.state.offset);else if(f)v.copy(f.position).applyMatrix4(f.work.transform);else{let e=ZU(u).setLength(u.distance);v.copy(s.initial.currentState.offset).sub(e)}return{workCode:d.workCode,panoIndex:d.panoIndex,mode:`Model`,longitude:m,latitude:_,fov:p,offset:v,distance:0}}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Model`,this.locationMotion=new qQ({x:this.camera.pose.offset.x,y:this.camera.pose.offset.y,z:this.camera.pose.offset.z,distance:this.camera.pose.distance}),this.modelAlphaMotion=new qQ({modelAlpha:this.modelScene.parameter.resolveValue().modelAlpha}),this.perspToOrthoMotion=new qQ({perspToOrtho:this.camera.perspToOrtho.x})}updateConfiguration(e){return super.updateConfiguration(e)}destroy(){super.destroy(),this.locationMotion.dispose()}isReady(){return this.locationMotion.ended===!1?!1:super.isReady()}updateWork(t,n,r,i){this.works=t;let a=e.initAnimationEndState(Object.assign(Object.assign({},this),{initial:{currentState:Object.assign(Object.assign({},this.currentPano),this.camera.pose),duration:r.duration,effect:r.effect,state:n,userAction:i}}));return(a.workCode!==this.currentPano.workCode||a.panoIndex!==this.currentPano.panoIndex||a.longitude!==this.cameraMotion.value.longitude||a.latitude!==this.cameraMotion.value.latitude||a.fov!==this.cameraMotion.value.fov)&&this.moveToPosition(a.offset,{duration:0,longitude:a.longitude,latitude:a.latitude,fov:a.fov},i),!0}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},i={};return r.distance=0,e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(i.longitude=e.longitude),e.latitude!==void 0&&(i.latitude=e.latitude),e.fov!==void 0&&(i.fov=e.fov),this.locationMotion.set(r,t).catch(Y),this.cameraMotion.set(i,t).catch(Y)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],i=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:0,x:t.value.offset.x,y:t.value.offset.x,z:t.value.offset.x}}),i.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(Y),this.cameraMotion.setKeyframes(e,t)})}updateTime(e,t,...n){if(this.destroyed)return;let r={},i={};if(this.modelAlphaMotion.ended||(this.modelAlphaMotion.update(e),r.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.modelScene.parameter.modelAlpha===0&&this.modelScene.parameter.progress!==1){let{pano0:e,pano1:t}=this.modelScene.parameter;e&&e.map!==(t==null?void 0:t.map)&&e.map.dispose(),r.progress=1,r.pano0=r.pano1=t}if(this.perspToOrthoMotion.ended||(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(J(this.perspToOrthoMotion.value.perspToOrtho,0,1))),!this.locationMotion.ended){this.locationMotion.update(e),i.distance=this.locationMotion.value.distance,i.offset=new j(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z);let t=new j(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),n=[];for(let e of this.works){let r=this.modelScene.models.find(t=>t.work===e);if(!(!r||r.visible===!1)&&!(e.observers.length<=0)&&(R9.copy(e.observerBox).expandByScalar(10).applyMatrix4(e.transform),R9.containsPoint(t)))for(let t of e.observers)n.push(t)}let r=rQ(n,e=>z9.copy(e.position).applyMatrix4(e.work.transform).distanceTo(t));this.currentPano=r?{workCode:r.work.workCode,panoIndex:r.panoIndex}:{workCode:``,panoIndex:0}}this.cameraMotion.ended||(this.cameraMotion.update(e),i.longitude=this.cameraMotion.value.longitude,i.latitude=this.cameraMotion.value.latitude,i.fov=this.cameraMotion.value.fov),n7(r)||this.modelScene.parameter.set(r),n7(i)||this.setCamera(i);let a=this.works.getObserver(this.currentPano);if(this.intersectMesh&&this.intersectMesh.parent&&a&&a.position.y-a.standingPosition.y>10){let e=J(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1)}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:i,userAction:a}=this.initial;this.userAction=a;let o=e.initAnimationEndState(this),s={modelAlpha:1},c={perspToOrtho:0},l={longitude:o.longitude,latitude:o.latitude,fov:o.fov,duration:i,moveStartCallback:e=>{this.perspToOrthoMotion.set(c,i).catch(Y),this.modelAlphaMotion.set(s,i).catch(Y),this.emit(`initAnimation.start`,$(`initAnimation.start`,{state:e,userAction:this.userAction}))},moveEndCallback:e=>{this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:e,userAction:this.userAction})),t()},moveCancelCallback:()=>{let e=this.currentPano,n=Object.assign(Object.assign({},e),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance});this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:n,userAction:this.userAction})),t()}};this.moveToPosition(o.offset,l,a)})}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(nW())[1],t=this.locationMotion.getKeyFrameSegment(nW())[1];return Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,offset:new j(t.value.x,t.value.y,t.value.z),distance:t.value.distance})}moveToPano(e,t={},n){let r=this.works.getObserver(e);if(r){let e=new j().copy(r.position).applyMatrix4(r.work.transform);this.moveToPosition(e,t,n)}}moveToPosition(e,t={},n){var r,i,a;this.userAction=n,this.stopMomentumMovement();let o=nW(),s=new j(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),c=s.distanceTo(e),l=this.locationMotion.getProgressVelocity(o),u=0;for(let e=1;e<this.locationMotion.keyframes.length;e++){let{x:t,y:n,z:r}=this.locationMotion.keyframes[e-1].value,{x:i,y:a,z:o}=this.locationMotion.keyframes[e].value;u+=Math.sqrt(Math.pow(i-t,2)+Math.pow(a-n,2)+Math.pow(o-r,2))}let d=c===0?0:l*u/c,f=this.calculateMovingDuration(t.duration,c),p={x:e.x,y:e.y,z:e.z,distance:0},m={longitude:t.longitude,latitude:t.latitude,fov:t.fov},h=[];for(let e of this.works){let t=this.modelScene.models.find(t=>t.work===e);if(!(!t||t.visible===!1)&&!(e.observers.length<=0)&&(R9.copy(e.observerBox).expandByScalar(10).applyMatrix4(e.transform),R9.containsPoint(s)))for(let t of e.observers)h.push(t)}let g=rQ(h,e=>z9.copy(e.position).applyMatrix4(e.work.transform).distanceTo(s)),_=g?{workCode:g.work.workCode,panoIndex:g.panoIndex}:{workCode:``,panoIndex:0},v=Object.assign(Object.assign({},_),{mode:this.mode,longitude:(r=m.longitude)==null?this.camera.pose.longitude:r,latitude:(i=m.latitude)==null?this.camera.pose.latitude:i,fov:(a=m.fov)==null?this.camera.pose.fov:a,offset:e.clone(),distance:0}),y=this.currentPano;this.emit(`pano.moveTo`,$(`pano.moveTo`,{options:t,prevPano:y,progress:0,state:v,userAction:this.userAction,error:null})),t.moveStartCallback&&t.moveStartCallback(v),this.cameraMotion.set(m,f).catch(Y),this.locationMotion.set(p,f,d).then(()=>{for(let e of this.modelScene.children)e instanceof Y4&&e.show();let e=Object.assign(Object.assign(Object.assign({},_),{mode:this.mode}),$5(this.camera.pose));this.emit(`pano.arrived`,$(`pano.arrived`,{options:t,prevPano:y,progress:0,state:e,userAction:this.userAction,error:null})),t.moveEndCallback&&t.moveEndCallback(e)},()=>{t.moveCancelCallback&&t.moveCancelCallback(),this.emit(`pano.cancel`,$(`pano.cancel`,{options:t,prevPano:y,progress:0,state:v,userAction:this.userAction,error:null}))})}onTapGesture(e){let t=e.center.raycaster;this.stopMomentumMovement();let[n]=this.modelScene.intersectRaycaster(t);if(n&&n.face){let e=n.face.normal,t=n.point;if(new j(0,1,0).angleTo(e)>Math.PI/3){let r=new em;r.firstHitOnly=!0;let i=e.clone().setLength(.3).add(t);r.set(i,new j(0,-1,0)),n=this.modelScene.intersectRaycaster(r)[0]}}if(n){let t=new j().copy(n.point).add(Sie),r=[];for(let e of this.works){let n=this.modelScene.models.find(t=>t.work===e);if(!(!n||n.visible===!1)&&!(e.observers.length<=0)&&(R9.copy(e.observerBox).expandByScalar(10).applyMatrix4(e.transform),R9.containsPoint(t)))for(let t of e.observers)r.push(t)}let[i,a]=rQ(r,e=>z9.copy(e.position).applyMatrix4(e.work.transform).distanceTo(t),!0);i&&a<5&&(t.y=z9.copy(i.position).applyMatrix4(i.work.transform).y),e.state.offset.copy(t),e.state.distance=0,this.emit(`gesture.tap`,e),e.defaultPrevented||this.moveToPosition(t,{},!0)}else this.emit(`gesture.tap`,e),e.defaultPrevented||this.cameraBounce()}};q();var B9=new Rs,Tie=new j,V9=.5,H9=Math.PI/7,U9={defaultLongitude:Math.PI/4,defaultLatitude:Math.PI/4,defaultDistance:150,maxLatitude:Math.PI/2,minLatitude:0,cameraType:`auto`,cameraFence:null,intersectMeshCreator:()=>new S7},W9={Floorplan:T7,Topview:Xne,Panorama:r9,VRPanorama:Xre,XRPanorama:xie,Model:wie,Mapview:class e extends m7{static parseArgs(t){var n,r,i,a,o,s,c,l;if(t instanceof e)return t;let u=super.parseArgs(t);return Object.assign(Object.assign({},u),{defaultLongitude:(n=t.defaultLongitude)==null?U9.defaultLongitude:n,defaultLatitude:(r=t.defaultLatitude)==null?U9.defaultLatitude:r,defaultDistance:(i=t.defaultDistance)==null?U9.defaultDistance:i,maxLatitude:(a=t.maxLatitude)==null?U9.maxLatitude:a,minLatitude:(o=t.minLatitude)==null?U9.minLatitude:o,cameraType:(s=t.cameraType)==null?U9.cameraType:s,cameraFence:(c=t.cameraFence)==null?U9.cameraFence:c,intersectMeshCreator:(l=t.intersectMeshCreator)==null?U9.intersectMeshCreator:l})}static distanceFromModel(e,t,n){let r=e.boundingBox,i=r.isEmpty()?10:Math.pow(Math.pow(r.max.x-r.min.x+1,2)+Math.pow(r.max.y-r.min.y+1,2)+Math.pow(r.max.z-r.min.z+1,2),1/2);i=isNaN(i)||!isFinite(i)?1:i;let a=i/2/Math.tan(Math.PI*t/360);return n<1&&(a/=n),isNaN(a)||!isFinite(a)?i:a}static initAnimationEndState(t){var n,r,i,a,o,s,c;let l=this.parseArgs(t),u=l.works,d=l.modelScene,{state:f,currentState:p}=t.initial,m=typeof f.panoIndex==`number`?{workCode:(i=(n=f.workCode)==null?(r=l.works[0])==null?void 0:r.workCode:n)==null?``:i,panoIndex:f.panoIndex}:{workCode:p.workCode,panoIndex:p.panoIndex},h=(a=f.fov)==null?60:a,g=J(typeof l.minLatitude==`function`?l.minLatitude(h):l.minLatitude,-Math.PI/2,Math.PI/2),_=J(typeof l.maxLatitude==`function`?l.maxLatitude(h):l.maxLatitude,-Math.PI/2,Math.PI/2),v=J((o=f.latitude)==null?e7(p.mode)?p.latitude:l.defaultLatitude:o,g,_),y=e.distanceFromModel(l.modelScene,h,l.camera.aspect),b=new j,x=(s=f.distance)==null?Math.min(l.defaultDistance,y):s,S=(c=f.longitude)==null?e7(p.mode)?p.longitude:l.defaultLongitude:c;if(f.offset)b.copy(f.offset);else{let e=u.getObserver(m);l.defaultDistance<y&&e?(b.copy(e.position).applyMatrix4(e.work.transform),f.longitude===void 0&&(S=p.longitude)):(d.boundingBox.getCenter(b),x=y)}return Object.assign(Object.assign({},m),{mode:`Mapview`,longitude:S,latitude:v,fov:h,offset:b,distance:x})}constructor(t){let n=e.parseArgs(t);super(n),this.mode=`Mapview`,this.defaultLongitude=n.defaultLongitude,this.defaultLatitude=n.defaultLatitude,this.defaultDistance=n.defaultDistance,this.maxLatitude=n.maxLatitude,this.minLatitude=n.minLatitude,this.cameraType=n.cameraType,this.cameraFence=n.cameraFence,this.locationMotion=new qQ({x:this.camera.pose.offset.x,y:this.camera.pose.offset.y,z:this.camera.pose.offset.z,distance:this.camera.pose.distance}),this.modelAlphaMotion=new qQ({modelAlpha:this.modelScene.parameter.resolveValue().modelAlpha}),this.perspToOrthoMotion=new qQ({perspToOrtho:this.camera.perspToOrtho.x}),this.pendingTextureId=null,this.textureLoader=new _J,this.intersectMeshCreator=n.intersectMeshCreator,this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=`intersect`,this.intersectMesh.visible=!1,this.helper.add(this.intersectMesh)}updateConfiguration(e){if(super.updateConfiguration(e)===!1)return!1;if(e.defaultLongitude!==void 0&&this.defaultLongitude!==e.defaultLongitude&&(this.defaultLongitude=e.defaultLongitude),e.defaultLatitude!==void 0&&this.defaultLatitude!==e.defaultLatitude&&(this.defaultLatitude=e.defaultLatitude),e.defaultDistance!==void 0&&this.defaultDistance!==e.defaultDistance&&(this.defaultDistance=e.defaultDistance),e.maxLatitude!==void 0&&this.maxLatitude!==e.maxLatitude&&(this.maxLatitude=e.maxLatitude),e.minLatitude!==void 0&&this.minLatitude!==e.minLatitude&&(this.minLatitude=e.minLatitude),e.cameraType!==void 0&&this.cameraType!==e.cameraType&&(this.cameraType=e.cameraType),this.cameraFence instanceof Rs&&e.cameraFence instanceof Rs||this.cameraFence instanceof hc&&e.cameraFence instanceof hc?this.cameraFence.equals(e.cameraFence)||(this.cameraFence=e.cameraFence):e.cameraFence!==void 0&&(this.cameraFence=e.cameraFence),e.intersectMeshCreator!==void 0&&this.intersectMeshCreator!==e.intersectMeshCreator){this.intersectMeshCreator=e.intersectMeshCreator;let t=this.intersectMesh;this.intersectMesh=this.intersectMeshCreator(),this.intersectMesh.name=t.name,this.intersectMesh.visible=t.visible;let n=this.intersectMesh.parent;n&&n.add(this.intersectMesh),t.dispose()}return!0}destroy(){super.destroy(),this.pendingTextureId=null,this.locationMotion.dispose(),this.panState=void 0,this.intersectMesh.dispose(),this.helper.remove(this.intersectMesh)}isReady(){return this.locationMotion.ended===!1?!1:super.isReady()}updateWork(t,n,r,i){this.userAction=i,this.works=t;let a=e.initAnimationEndState(Object.assign(Object.assign({},this),{initial:{currentState:Object.assign(Object.assign({},this.currentPano),this.camera.pose),duration:r.duration,effect:r.effect,state:n,userAction:i}}));this.currentPano={workCode:a.workCode,panoIndex:a.panoIndex};let o={longitude:a.longitude,latitude:a.latitude,fov:a.fov},s={x:a.offset.x,y:a.offset.y,z:a.offset.z,distance:a.distance};return(o.longitude!==this.cameraMotion.value.longitude||o.latitude!==this.cameraMotion.value.latitude||o.fov!==this.cameraMotion.value.fov)&&this.cameraMotion.set(o,r.duration).catch(Y),(s.x!==this.locationMotion.value.x||s.y!==this.locationMotion.value.y||s.z!==this.locationMotion.value.z||s.distance!==this.locationMotion.value.distance)&&this.locationMotion.set(s,r.duration).catch(Y),!0}updateModel(e){super.updateModel(e),this.hideIntersectMesh()}updateCamera(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r={},i={};return e.distance!==void 0&&(r.distance=e.distance),e.offset!==void 0&&(r.x=e.offset.x,r.y=e.offset.y,r.z=e.offset.z),e.longitude!==void 0&&(i.longitude=e.longitude),e.latitude!==void 0&&(i.latitude=e.latitude),e.fov!==void 0&&(i.fov=e.fov),this.locationMotion.set(r,t).catch(Y),this.cameraMotion.set(i,t).catch(Y)})}updateCameraWithKeyframes(e,t,n){return this.initAnimationReady.then(()=>{this.userAction=n,this.stopMomentumMovement();let r=[],i=[];for(let t of e)r.push({key:t.key,progress:t.progress,value:{distance:t.value.distance,x:t.value.offset.x,y:t.value.offset.x,z:t.value.offset.x}}),i.push({key:t.key,progress:t.progress,value:{longitude:t.value.longitude,latitude:t.value.latitude,fov:t.value.fov}});return this.locationMotion.setKeyframes(r,t).catch(Y),this.cameraMotion.setKeyframes(e,t)})}updateTime(e,t){if(this.destroyed)return;let n={},r={};if(this.locationMotion.ended||(this.locationMotion.update(e),r.distance=this.locationMotion.value.distance,r.offset=new j(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z)),this.cameraMotion.ended||(this.cameraMotion.update(e),r.longitude=this.cameraMotion.value.longitude,r.latitude=this.cameraMotion.value.latitude,r.fov=this.cameraMotion.value.fov),this.modelAlphaMotion.ended||(this.modelAlphaMotion.update(e),n.modelAlpha=this.modelAlphaMotion.value.modelAlpha),this.modelScene.parameter.modelAlpha===0&&this.modelScene.parameter.progress!==1){let{pano0:e,pano1:t}=this.modelScene.parameter;e&&e.map!==(t==null?void 0:t.map)&&e.map.dispose(),n.progress=1,n.pano0=n.pano1=t}let i=0;if(this.cameraType===`auto`?i=+(Math.abs(Math.PI/2-this.cameraMotion.value.latitude)<.02||Math.abs(-Math.PI/2-this.cameraMotion.value.latitude)<.02):this.cameraType===`perspective`?i=0:this.cameraType===`orthographic`&&(i=1),this.perspToOrthoMotion.getTargetKeyframe().value.perspToOrtho!==i&&this.perspToOrthoMotion.set({perspToOrtho:i},500).catch(Y),this.perspToOrthoMotion.ended||(this.perspToOrthoMotion.update(e),this.camera.perspToOrtho.setScalar(J(this.perspToOrthoMotion.value.perspToOrtho,0,1))),n7(n)||this.modelScene.parameter.set(n),n7(r)||this.setCamera(r),this.cameraFence&&!this.panState&&!this.pinchState&&!this.mouseWheelState&&!this.inMomentumMovement&&this.locationMotion.ended&&this.perspToOrthoMotion.ended&&this.cameraMotion.ended){let e=ZU(this.camera.pose,new j),t=new j().copy(this.camera.pose.offset).sub(e.clone().multiplyScalar(this.camera.pose.distance));if(this.cameraFence.distanceToPoint(t)>.01){let e=this.cameraFence.clampPoint(t,new j),n=this.camera.pose.offset.clone().add(e).sub(t),r=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:n,distance:this.camera.pose.distance});this.fixFinalState(r),this.locationMotion.set({x:r.offset.x,y:r.offset.y,z:r.offset.z,distance:r.distance},300).catch(Y)}}if(this.intersectMesh&&this.intersectMesh.parent){let e=J(this.camera.position.distanceTo(this.intersectMesh.position)*(2*Math.tan(.5*this.camera.fov/180*Math.PI))/5,.5);this.intersectMesh.scale.setScalar(e)}else this.intersectMesh.scale.setScalar(1)}getTargetState(){let e=this.cameraMotion.getKeyFrameSegment(nW())[1],t=this.locationMotion.getKeyFrameSegment(nW())[1];return Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:e.value.longitude,latitude:e.value.latitude,fov:e.value.fov,distance:t.value.distance,offset:new j(t.value.x,t.value.y,t.value.z)})}initAnimation(){return this.destroyed?Promise.resolve():new Promise(t=>{let{state:n,currentState:r,duration:i,userAction:a}=this.initial;this.userAction=a;let o=e.initAnimationEndState(this),s={longitude:o.longitude,latitude:o.latitude,fov:o.fov},c={x:o.offset.x,y:o.offset.y,z:o.offset.z,distance:o.distance};this.emit(`initAnimation.start`,$(`initAnimation.start`,{state:o,userAction:this.userAction})),this.perspToOrthoMotion.set({perspToOrtho:0},i).catch(Y),this.modelAlphaMotion.set({modelAlpha:1},i/3).catch(Y),this.cameraMotion.set(s,i).catch(Y),this.locationMotion.set(c,i).then(()=>{this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:o,userAction:this.userAction}))},e=>{let t=Object.assign(Object.assign(Object.assign({},this.currentPano),{mode:this.mode}),$5(this.camera.pose));this.emit(`initAnimation.end`,$(`initAnimation.end`,{state:t,userAction:this.userAction}))}).then(()=>{t()})})}getForwardObserverOrNot(e){let[t]=this.modelScene.intersectRaycaster(e);if(!t)return null;let n=[];for(let t of this.works){let r=this.modelScene.models.find(e=>e.work===t);if(!(!r||r.visible===!1)&&!(t.observers.length<=0)&&(B9.copy(t.observerBox).expandByScalar(10).applyMatrix4(t.transform),B9.containsPoint(e.ray.origin)||e.ray.intersectsBox(B9)))for(let e of t.observers)n.push(e)}let[r,i]=rQ(n,e=>Tie.copy(e.standingPosition).applyMatrix4(e.work.transform).distanceTo(t.point),!0);return r&&i<Math.max(r.standingPosition.distanceTo(this.camera.position)/5,10)?r:null}coordinatesForOffset(e){let t=this.renderer.getSize(new A);return{longitude:-2*e.x/(t.x*this.viewport.width),latitude:2*e.y/(t.y*this.viewport.height)}}requestMomentumMovement(e,t,n,r){if(this.inMomentumMovement===null)return;r=Math.max(r,1);let i=Object.assign({},n),a={longitude:0,latitude:0,x:0,y:0,z:0};for(let e=0;e<r;e++)i.longitude*=.996,i.latitude*=.996*.998,i.x*=.99,i.y*=.99,i.z*=.99,a.longitude+=i.longitude,a.latitude+=i.latitude,a.x+=i.x,a.y+=i.y,a.z+=i.z;let o=this.cameraMotion.value.fov,s=XU(this.cameraMotion.value.longitude+a.longitude),c=J(typeof this.minLatitude==`function`?this.minLatitude(o):this.minLatitude,-Math.PI/2,Math.PI/2),l=J(typeof this.maxLatitude==`function`?this.maxLatitude(o):this.maxLatitude,-Math.PI/2,Math.PI/2),u=J(this.cameraMotion.value.latitude+a.latitude,c,l),d=new j(this.locationMotion.value.x+a.x,this.locationMotion.value.y+a.y,this.locationMotion.value.z+a.z),f=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:s,latitude:u,offset:d,fov:o,distance:this.locationMotion.value.distance}),p=e.state.offset.clone().sub(ZU(e.state).setLength(f.distance)),m=!(Math.abs(i.longitude)>1e-4||Math.abs(i.latitude)>1e-4||Math.abs(i.x)>1e-4||Math.abs(i.y)>1e-4||Math.abs(i.z)>1e-4);(this.cameraFence?this.cameraFence.containsPoint(p):!0)===!1&&(m=!0);let h=$(`gesture.momentum`,Object.assign(Object.assign({},e),{isFirst:t,isFinal:m,state:f}));if(this.emit(`gesture.fire`,h),this.inMomentumMovement.event=h,this.emit(`gesture.momentum`,h),e.defaultPrevented){this.inMomentumMovement=null;return}this.inMomentumMovement&&(this.cameraMotion.set({longitude:s,latitude:u},0).catch(Y),this.locationMotion.set({x:f.offset.x,y:f.offset.y,z:f.offset.z,distance:f.distance},0).catch(Y),m?this.inMomentumMovement=null:aJ.shared.add((t,n)=>{this.requestMomentumMovement(e,!1,i,n)},!0))}fixFinalState(e){if(this.perspToOrthoMotion.getTargetKeyframe().value.perspToOrtho===1)return;let t=ZU(e,new j),n=new j().copy(e.offset).sub(t.clone().setLength(e.distance)),r=new em(n,t);r.params.Points={threshold:.1},r.firstHitOnly=!0,r.hitFilter=e=>e.distance>V9+r.near,r.near=this.camera.near,r.far=this.camera.far;let i;if(i=this.modelScene.intersectRaycaster(r)[0],i&&i.distance<this.camera.near&&(i=void 0),!i){let e=new Vl(new j(0,1,0),-this.modelScene.boundingBox.min.y),t=r.ray.intersectPlane(e,new j);if(t){let e=t.distanceTo(r.ray.origin);e<1e3&&e>=r.near&&(i={distance:e,floorIndex:0,floor:0,point:t,object:this.scene,face:null})}}if(!i){let r=Math.max(e.distance,3);i={distance:r,floorIndex:0,floor:0,point:n.clone().add(t.clone().setLength(r)),object:this.scene,face:null}}i.distance>=this.camera.near&&K5(e.distance,i.distance)&&(e.distance=i.distance,e.offset=i.point)}onPanGesture(e){this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=e.pointers.length,n=this.panState,r=0,i=!1;e.pointerType===`mouse`&&(r=e.center.buttons,i=e.center.shiftKey),n&&r===0&&n.buttons!==0&&(r=n.buttons);let a=n==null?void 0:n.target;if(!a){let t=this.relativeClientPosition(e.center),n=this.createRaycasterFromCamera(t,this.camera);a=new j().copy(n.ray.direction).multiplyScalar(3).add(n.ray.origin);let[r]=this.modelScene.intersectRaycaster(n);if(!r&&n.ray.direction.y<-.3){let e=new Vl(new j(0,1,0),0),t=n.ray.intersectPlane(e,new j);if(t){let e=t.distanceTo(n.ray.origin);e<1e4&&e>=n.near&&(r={distance:e,floorIndex:0,floor:0,point:t,object:this.scene})}}if(r)a.copy(r.point);else{let e=new j().copy(this.camera.pose.offset).sub(this.camera.position).normalize(),t=new Vl().setFromNormalAndCoplanarPoint(e,this.camera.pose.offset);n.ray.intersectPlane(t,a)}}if(e.isFinal?this.panState=void 0:this.panState={target:a,buttons:r,pointerLength:t,x:e.center.x,y:e.center.y},!(n===void 0||n.pointerLength!==t))if(t>1||r===2||i){let t={x:e.center.x-n.x,y:e.center.y-n.y},r=new j(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),i=ZU(this.cameraMotion.value).setLength(this.locationMotion.value.distance).add(r),a=new j().copy(i).sub(n.target).length();a*=Math.tan(this.camera.pose.fov/2*Math.PI/180);let o=this.renderer.getSize(new A),s=2*t.x*a/o.y,c=2*t.y*a/o.y,l=new j;l.setFromMatrixColumn(this.camera.matrix,0),l.multiplyScalar(-s),r.add(l),this.camera.pose.latitude<H9?l.setFromMatrixColumn(this.camera.matrix,1):(l.setFromMatrixColumn(this.camera.matrix,0),l.crossVectors(this.camera.up,l)),l.multiplyScalar(c),r.add(l);let u=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:r,distance:this.camera.pose.distance});if(e.state=u,this.emit(`gesture.pan`,e),e.defaultPrevented)return;if(this.locationMotion.set({x:u.offset.x,y:u.offset.y,z:u.offset.z},0).catch(Y),e.isFinal&&(this.fixFinalState(u),Object.assign(e,{__fixFinalState:!0}),this.locationMotion.set({distance:u.distance,x:u.offset.x,y:u.offset.y,z:u.offset.z},0).catch(Y)),e.isFinal){let t=this.renderer.getSize(new A),n=2*e.velocityX*a/t.y,r=2*e.velocityY*a/t.y,i=new j,o=new j;i.setFromMatrixColumn(this.camera.matrix,0),i.multiplyScalar(-n),o.add(i),this.camera.pose.latitude<H9?i.setFromMatrixColumn(this.camera.matrix,1):(i.setFromMatrixColumn(this.camera.matrix,0),i.crossVectors(this.camera.up,i)),i.multiplyScalar(r),o.add(i),this.inMomentumMovement={uuid:JB()},this.requestMomentumMovement(e,!0,{longitude:0,latitude:0,x:o.x,y:o.y,z:o.z},0)}}else{let t={x:e.center.x-n.x,y:e.center.y-n.y},r=this.coordinatesForOffset(t),i=XU(this.cameraMotion.value.longitude+r.longitude),a=this.camera.pose.fov,o=J(typeof this.minLatitude==`function`?this.minLatitude(a):this.minLatitude,-Math.PI/2,Math.PI/2),s=J(typeof this.maxLatitude==`function`?this.maxLatitude(a):this.maxLatitude,-Math.PI/2,Math.PI/2),c=J(this.cameraMotion.value.latitude+r.latitude,o,s);this.camera.aspect<1&&Math.abs(e.overallVelocityX)>.2&&Math.atan2(Math.abs(e.overallVelocityY),Math.abs(e.overallVelocityX))<Math.PI/6.923&&(c=this.cameraMotion.value.latitude);let l=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:i,latitude:c,fov:a,offset:this.camera.pose.offset,distance:this.camera.pose.distance});if(e.isFinal&&Object.assign(e,{__fixFinalState:!0}),e.state=l,this.emit(`gesture.pan`,e),e.defaultPrevented)return;if(e.isFinal?this.locationMotion.set({distance:l.distance,x:l.offset.x,y:l.offset.y,z:l.offset.z},0).catch(Y):this.cameraMotion.set({longitude:l.longitude,latitude:l.latitude},0).catch(Y),e.isFinal){let t=e.velocityX,n=e.velocityY;this.inMomentumMovement={uuid:JB()},this.requestMomentumMovement(e,!0,Object.assign(Object.assign({},this.coordinatesForOffset({x:t,y:n})),{x:0,y:0,z:0}),0)}}}onPinchGesture(t){var n;if(!this.initAnimationIsReady)return;this.userAction=t.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let r=(n=this.pinchState)==null?void 0:n.distance;if(t.isFirst){this.pinchState={x:t.center.x,y:t.center.y,scale:1,distance:this.locationMotion.value.distance};return}if(r===void 0)return;let i=this.modelScene.boundingBox.getCenter(new j),a=e.distanceFromModel(this.modelScene,this.cameraMotion.value.fov,this.camera.aspect),o=J(r/t.scale,V9,1/0),s=t.state.offset.clone().sub(ZU(t.state).setLength(o)),c=this.modelScene.boundingBox.containsPoint(s),l;if(!c&&this.pinchState&&this.pinchState.scale>t.scale&&i.distanceTo(s)>a?l=t.state.distance:(l=o,this.pinchState&&(this.pinchState.scale=t.scale)),t.state.distance=l,this.emit(`gesture.pinch`,t),!t.defaultPrevented&&(this.locationMotion.set({distance:t.state.distance},0).catch(Y),t.pointerType!==`mouse`&&(t.type=`gesture.pan`,this.onPanGesture(t)),t.isFinal)){if(!(`__fixFinalState`in t)){let e=t.state;this.fixFinalState(t.state);let n={x:e.offset.x,y:e.offset.y,z:e.offset.z,distance:e.distance};this.locationMotion.set(n,0).catch(Y)}this.panState=void 0,this.pinchState=void 0}}onMouseMove(e){var t,n;if(!this.intersectMesh.parent||this.panState||this.pinchState||this.mouseWheelState||(this.emit(`gesture.mousemove`,e),e.defaultPrevented))return;let r=e.center.raycaster;if(e.isFinal&&this.intersectMesh.parent&&this.intersectMesh.visible===!0){this.hideIntersectMesh();return}let[i]=this.modelScene.intersectRaycaster(r),a=$(`intersect.update`,{raycaster:r,intersection:i==null?null:i,object:this.intersectMesh});if(this.emit(`intersect.update`,a),a.defaultPrevented){this.hideIntersectMesh();return}if(i){let e=(n=(t=i.face)==null?void 0:t.normal)==null?new j().copy(r.ray.direction).multiplyScalar(-1):n,a=e.clone(),o=i.point.clone();this.intersectMesh.position.copy(o);let s=o.clone().add(a);if(this.intersectMesh.lookAt(s),Math.abs(e.y)>.99){let e=this.camera.position.clone().sub(o);this.intersectMesh.rotation.z=-Math.atan2(e.z,e.x)}this.intersectMesh.visible=!0,this.needsRender=!0}else this.hideIntersectMesh()}onMouseWheel(t){if(this.initAnimationIsReady)if(this.userAction=t.userAction,this.stopMomentumMovement(),this.hideIntersectMesh(),t.isFinal){let e=Object.assign(Object.assign({},this.currentPano),{mode:this.mode,longitude:this.cameraMotion.value.longitude,latitude:this.cameraMotion.value.latitude,fov:this.cameraMotion.value.fov,offset:new j(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),distance:this.locationMotion.value.distance});if(this.fixFinalState(e),this.emit(`gesture.mousewheel`,t),t.defaultPrevented)return;let n={x:e.offset.x,y:e.offset.y,z:e.offset.z,distance:e.distance};this.locationMotion.set(n,0).catch(Y)}else{let n=e.distanceFromModel(this.modelScene,this.cameraMotion.value.fov,this.camera.aspect),r=new j(this.locationMotion.value.x,this.locationMotion.value.y,this.locationMotion.value.z),i=ZU(this.cameraMotion.value,new j).negate(),a=new el(r,i).intersectBox(this.modelScene.boundingBox,new j);a&&(n+=a.distanceTo(r));let o=Math.max(this.locationMotion.value.distance-this.camera.near,0),s=t.center.delta/10*Math.max(o/5,.1);if(o<=n||s>0)if(this.locationMotion.value.distance-s>=V9){let e=this.locationMotion.value.distance-s;t.state.distance=e}else{let e=ZU(this.cameraMotion.value);e.setLength(s),t.state.offset.add(e)}if(this.emit(`gesture.mousewheel`,t),t.defaultPrevented)return;this.locationMotion.set({distance:t.state.distance,x:t.state.offset.x,y:t.state.offset.y,z:t.state.offset.z},0).catch(Y)}}onTapGesture(e){var t;this.userAction=e.userAction,this.stopMomentumMovement();let n=e.center.raycaster,r=this.getForwardObserverOrNot(n);if(!r)this.emit(`gesture.tap`,e);else{let n={longitude:this.camera.pose.longitude,latitude:0},i=Object.assign(Object.assign({},e.state),{mode:`Panorama`,workCode:r.work.workCode,panoIndex:r.panoIndex,longitude:n.longitude,latitude:n.latitude,offset:r?r.position.clone():new j,distance:0});if(e.state=i,this.emit(`gesture.tap`,e),!e.defaultPrevented&&(this.emit(`pano.select`,$(`pano.select`,{prevPano:this.currentPano,state:i,userAction:e.userAction,options:n,progress:0,error:null})),r&&r.active)){let e=this.pendingTextureId=JB(),a=O3({panoIndex:r.panoIndex,workCode:r.work.workCode}),o=this.imageOptions.transform,s=Object.assign({key:`pano.${a}`},gq(this.imageOptions,[`format`,`size`,`quality`,`sharpen`,`forceUseExifOrientation`,`mappings`])),c={right:r.images.work.getURL(r.images.right),left:r.images.work.getURL(r.images.left),up:r.images.work.getURL(r.images.up),down:r.images.work.getURL(r.images.down),front:r.images.work.getURL(r.images.front),back:r.images.work.getURL(r.images.back)},l,u,d=this.enableHDR?r.images.gainmap:void 0;d&&(l={right:r.images.work.getURL(d.right),left:r.images.work.getURL(d.left),up:r.images.work.getURL(d.up),down:r.images.work.getURL(d.down),front:r.images.work.getURL(d.front),back:r.images.work.getURL(d.back)},u=r.images.work.getURL(d.cfg));let f=`pano:`+E3([c,l,s]),p=this.modelScene.parameter,m;if(p.pano0&&p.pano0.map.name===f?m=p.pano0:p.pano1&&p.pano1.map.name===f&&(m=p.pano1),m)p.pano0&&p.pano0.map!==m.map&&p.pano0.map.dispose(),p.pano1&&p.pano1.map!==m.map&&p.pano1.map!==((t=p.pano0)==null?void 0:t.map)&&p.pano1.map.dispose(),p.set({pano0:m,pano1:m}),this.emit(`pano.request`,$(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:i,options:n,error:null}));else{let t=this.textureLoader.loadCubeTexture(c,{imageURL:{transform:o,options:s},format:Oi,viaAjax:!0,fetcher:A4(this.fiveId,r.work)},void 0,void 0,void 0,this.renderer),d=u&&l?Promise.all([A4(this.fiveId,r.work).ajax(u,{responseType:`text`}).then(e=>tV(JSON.parse(e.body))),this.textureLoader.loadCubeTexture(l,{imageURL:{transform:o,options:s},format:Oi,colorSpace:``,viaAjax:!0,fetcher:A4(this.fiveId,r.work)},void 0,void 0,void 0,this.renderer)]).then(([e,t])=>({config:e,map:t.body})):Promise.resolve(void 0);Promise.all([t,d]).then(t=>HH(this,[t],void 0,function*([t,o]){var s,c;let{body:l}=t;if(this.destroyed||this.pendingTextureId!==e){l.dispose();return}this.pendingTextureId=null,l.name=f;let u=Array.isArray(l.image)?l.image[0]:l.image,d=(s=u==null?void 0:u.width)==null?2048:s,m=yield d7(this.renderer,l,!0,z6),h=new U6().formPixels(m.data),g={panoId:a,map:l,mapSize:d,mapHistogram:new Po().fromArray(h.toArray()),matrix:r.matrix.clone().premultiply(r.work.transform),zoom:1,gainmap:o?{map:o.map,cfg:o.config}:void 0};p.pano0&&p.pano0.map.dispose(),p.pano1&&p.pano1.map!==((c=p.pano0)==null?void 0:c.map)&&p.pano1.map.dispose(),p.set({pano0:g,pano1:g}),this.emit(`pano.request`,$(`pano.request`,{userAction:!0,prevPano:this.currentPano,progress:0,state:i,options:n,error:null}))})).catch(t=>{this.destroyed||this.pendingTextureId!==e||(this.pendingTextureId=null)})}}}}onDblTapGesture(e){if(!this.initAnimationIsReady)return;this.userAction=e.userAction,this.stopMomentumMovement(),this.hideIntersectMesh();let t=e.state,n=e.center.raycaster,r=n.ray.origin.clone().add(n.ray.direction.clone().setLength(3)),i=1,[a]=this.modelScene.intersectRaycaster(n);if(a&&(r=a.point.clone(),i=a.distance>4/2?1:3),e.state.distance=i,e.state.offset=r,this.emit(`gesture.dbltap`,e),e.defaultPrevented)return;let o={x:t.offset.x,y:t.offset.y,z:t.offset.z,distance:t.distance};this.locationMotion.set(o,360).catch(Y),this.hideIntersectMesh()}hideIntersectMesh(){this.intersectMesh.visible===!0&&(this.intersectMesh.visible=!1,this.needsRender=!0)}}},Eie={Floorplan:w7,Topview:E7,Panorama:n9,VRPanorama:Yre,XRPanorama:I9,Model:Cie,Mapview:U9},G9=`gesture.pan,gesture.tap,gesture.dbltap,gesture.press,gesture.pinch,gesture.mousewheel,gesture.mousemove,gesture.momentum,gesture.fire,initAnimation.start,initAnimation.end,camera.update,intersect.update,pano.select,pano.moveTo,pano.moving,pano.arrived,pano.cancel,pano.error,pano.prepare,pano.texture.load,pano.texture.progress,pano.texture.success,pano.texture.error,pano.texture.abort,xr.session.start,xr.session.end,xr.gesture.tap,xr.gesture.press,xr.gesture.buttonUp,xr.gesture.buttonDown,xr.controller.update`.split(`,`);function Die(e){e.on(`initAnimation.start`,t=>{e.emit(`initAnimationWillStart`,t.state.panoIndex,t.state,t.userAction)}),e.on(`initAnimation.end`,t=>{e.emit(`initAnimationEnded`,t.state.panoIndex,t.state,t.userAction)}),e.on(`gesture.pan`,t=>{let n=!1;n=e.emit(`wantsGesture`,`pan`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPanGesture`,t.state,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`pan`,t.pointers,t.isFinal),e.emit(`panGesture`,t.state,t.isFinal))}),e.on(`gesture.tap`,t=>{let n=!1;n=e.emit(`wantsGesture`,`tap`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsTapGesture`,t.center.raycaster,t.center.coords,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`tap`,t.pointers,t.isFinal),e.emit(`tapGesture`,t.center.raycaster,t.center.coords,t.isFinal))}),e.on(`gesture.dbltap`,t=>{let n=!1;n=e.emit(`wantsGesture`,`dbltap`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsDblTapGesture`,t.center.raycaster,t.center.coords,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`dbltap`,t.pointers,t.isFinal),e.emit(`dblTapGesture`,t.center.raycaster,t.center.coords,t.isFinal))}),e.on(`gesture.press`,t=>{let n=!1;n=e.emit(`wantsGesture`,`press`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPressGesture`,t.center.raycaster,t.center.coords,t.center.delta,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`press`,t.pointers,t.isFinal),e.emit(`pressGesture`,t.center.raycaster,t.center.coords,t.center.delta,t.isFinal))}),e.on(`gesture.pinch`,t=>{let n=!1;n=e.emit(`wantsGesture`,`pinch`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsPinchGesture`,t.scale,t.state.fov,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`pinch`,t.pointers,t.isFinal),e.emit(`pinchGesture`,t.scale,t.state.fov,t.isFinal))}),e.on(`gesture.mousewheel`,t=>{let n=!1;n=e.emit(`wantsGesture`,`mouseWheel`,t.pointers,t.isFinal),n&&t.preventDefault(),n=e.emit(`wantsMouseWheel`,t.center.delta,t.state.fov,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`mouseWheel`,t.pointers,t.isFinal),e.emit(`mouseWheel`,t.center.delta,t.state.fov,t.isFinal))}),e.on(`gesture.mousemove`,t=>{let n=!1;n=e.emit(`wantsGesture`,`mouseMove`,t.pointers,t.isFinal),n&&t.preventDefault(),t.defaultPrevented||(e.emit(`gesture`,`mouseMove`,t.pointers,t.isFinal),n=e.emit(`wantsChangeCameraFov`,t.state.fov),n&&t.preventDefault())}),e.on(`gesture.momentum`,t=>{let n=!1;n=e.emit(`wantsInteriaPan`,t.state),n&&t.preventDefault(),t.defaultPrevented||e.emit(`interiaPan`,t.state,t.isFinal)}),e.on(`camera.update`,t=>{e.emit(`cameraFovUpdate`,t.state.fov,t.userAction),e.emit(`cameraDirectionUpdate`,t.state,t.userAction);let n=ZU(t.state);n.setLength(t.state.distance);let r=t.state.offset.clone().sub(n);e.emit(`cameraPositionUpdate`,r,t.userAction),e.emit(`cameraUpdate`,t.state,t.userAction)}),e.on(`intersect.update`,t=>{if(t.intersection){let n=!1;n=e.emit(`wantsShowIntersectionOnModel`,t.raycaster),n&&t.preventDefault(),t.defaultPrevented||e.emit(`intersectionOnModelUpdate`,t.intersection,t.object)}else e.emit(`intersectionHidden`)}),e.on(`pano.request`,t=>{let n=e.emit(`wantsMoveToPano`,t.state.panoIndex,t.options,t.userAction);n||(n=e.emit(`wantsToMoveToPano`,t.state.panoIndex,t.options,t.userAction)),n&&t.preventDefault(),t.defaultPrevented||e.emit(`panoWillLoad`,t.state.panoIndex)}),e.on(`pano.select`,t=>{e.emit(`panoSelected`,t.state.panoIndex)}),e.on(`pano.moveTo`,t=>{e.emit(`panoLoaded`,t.state.panoIndex),e.emit(`moveToPano`,t.state.panoIndex,t.userAction),e.emit(`panoWillArrive`,t.state.panoIndex,t.state,t.userAction)}),e.on(`pano.moving`,t=>{e.emit(`movingToPano`,t.state.panoIndex,t.prevPano.panoIndex,t.progress)}),e.on(`pano.arrived`,t=>{e.emit(`panoArrived`,t.state.panoIndex,t.state,t.userAction)}),e.on(`pano.cancel`,t=>{e.emit(`moveToPanoCanceled`,t.state.panoIndex)}),e.on(`pano.error`,t=>{e.emit(`panoLoadError`,t.error,t.state.panoIndex)}),e.on(`pano.texture.load`,t=>{e.emit(`textureStartLoad`,t.pano.panoIndex)}),e.on(`pano.texture.success`,t=>{e.emit(`textureLoaded`,t.pano.panoIndex,t.meta)}),e.on(`pano.texture.error`,t=>{e.emit(`textureError`,t.error,t.pano.panoIndex)}),e.on(`pano.texture.abort`,t=>{e.emit(`textureAbort`,t.pano.panoIndex)}),e.on(`pano.texture.progress`,t=>{e.emit(`textureLoading`,t.progress,t.pano.panoIndex)}),e.on(`xr.session.start`,t=>{e.emit(`webXRSessionStart`)}),e.on(`xr.session.end`,t=>{e.emit(`webXRSessionEnd`)}),e.on(`xr.gesture.tap`,t=>{e.emit(`webXRControllerEvent`,`tap`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.press`,t=>{e.emit(`webXRControllerEvent`,`press`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.buttonUp`,t=>{e.emit(`webXRControllerEvent`,`buttonUp`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.gesture.buttonDown`,t=>{e.emit(`webXRControllerEvent`,`buttonDown`,t.buttons,{raycaster:t.controllers.raycaster})}),e.on(`xr.controller.update`,t=>{e.emit(`webXRControllerRayUpdate`,{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0}),t.left&&e.emit(`webXRAxesUpdate`,`left`,{raycaster:{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0},axesState:{up:t.left.axes.up,down:t.left.axes.down,left:t.left.axes.left,right:t.left.axes.right},deltaTime:t.left.deltaTime}),t.right&&e.emit(`webXRAxesUpdate`,`right`,{raycaster:{leftRay:t.left?t.left.raycaster:void 0,rightRay:t.right?t.right.raycaster:void 0},axesState:{up:t.right.axes.up,down:t.right.axes.down,left:t.right.axes.left,right:t.right.axes.right},deltaTime:t.right.deltaTime})}),e.on(`works.request`,t=>{e.emit(`willLoad`,t.input,t.works[0],e.getCurrentState())}),e.on(`works.load`,t=>{e.emit(`load`,t.input,t.works[0],e.getCurrentState())}),e.on(`works.ready`,t=>{e.emit(`loaded`,t.input,t.works[0])}),e.on(`state.change`,t=>{e.emit(`stateChange`,t.state,t.userAction)}),e.on(`currentState.change`,t=>{e.emit(`currentStateChange`,t.state,t.userAction)}),e.on(`state.set`,t=>{e.emit(`setState`,t.state)}),e.on(`state.synced`,t=>{e.emit(`stateSynced`,t.state)}),e.on(`model.request`,t=>{e.emit(`modelWillLoad`,t.work.model)}),e.on(`model.error`,t=>{e.emit(`modelLoadError`,t.error,t.model)}),e.on(`model.load`,t=>{e.emit(`modelLoaded`,t.model)}),e.on(`model.changeShownFloor`,t=>{e.emit(`modelShownFloorChange`,t.model.shownFloor,t.model.floorLength)}),e.on(`render`,t=>{e.emit(`renderFrame`,t.needsRender)}),e.on(`mode.change.request`,t=>{e.emit(`wantsChangeMode`,t.mode,t.prevMode)}),e.on(`mode.change`,t=>{e.emit(`modeChange`,t.mode,t.prevMode,t.state.panoIndex,t.state,t.userAction)}),e.on(`helpers.visible`,t=>{e.emit(`helpersVisibleChange`,t.object.visible)}),e.on(`network.resource`,t=>{e.emit(`network`,t.source,t.requestType,t.requestState,t.detail)})}function Oie(){if(typeof window<`u`){let e=document.createElement(`video`);e.loop=!0,e.autoplay=!0,e.playsInline=!0,e.muted=!0,e.crossOrigin=``;let t=()=>{document.removeEventListener(`touchstart`,t,!1),document.removeEventListener(`mousedown`,t,!1),e.muted=!1};return document.addEventListener(`touchstart`,t,!1),document.addEventListener(`mousedown`,t,!1),e}else return{}}q();function kie(){let e=new ms;e.name=`internalLights`;{let t=new Wf(16777215,.1);t.name=`direction0`,t.position.copy(new j(0,1,0)),e.add(t)}{let t=new Wf(16777215,.1);t.name=`direction1`,t.position.copy(new j(-1,-1,-1)),e.add(t)}{let t=new Wf(16777215,.3);t.name=`direction2`,t.position.copy(new j(1,1,1)),e.add(t)}{let t=new Gf(16777215,.6);t.name=`ambient0`,e.add(t)}return e}function Aie(e){var t,n;let r={},i=e.split(/(\;|\,)/);for(let e of i){let i=e.split(`=`),a=(t=i[0])==null?void 0:t.trim(),o=(n=i[1])==null?void 0:n.trim();a&&o&&(r[a]=o)}return r}function K9(){var e;if(typeof document<`u`){let t=document.getElementsByTagName(`meta`);for(let n=0;n<t.length;n++){let r=t[n];if(r.getAttribute(`name`)===`viewport`){let t=Aie((e=r.getAttribute(`content`))==null?``:e),n=Number(t[`initial-scale`]);if(!isNaN(n))return n}}}return 1}function jie(){return typeof location>`u`||location.protocol!==`https:`?Promise.reject(Error(`Request DeviceOrientation Permission denied.`)):typeof DeviceOrientationEvent<`u`&&typeof DeviceOrientationEvent.requestPermission==`function`?DeviceOrientationEvent.requestPermission().then(e=>{if(e==`granted`)return Promise.resolve();{let e=Error(`Request DeviceOrientation Permission denied.`);return Promise.reject(e)}}):Promise.resolve()}function Mie(){if(`xr`in navigator)return navigator.xr.isSessionSupported(`immersive-vr`).then(e=>e?Promise.resolve():Promise.reject()).then(()=>navigator.xr.requestSession(`immersive-vr`,{optionalFeatures:[`local-floor`]}).then(e=>Promise.resolve(e)));{let e=Error(`Request XR Permission denied.`);return Promise.reject(e)}}q();var Nie=800,q9=90,Pie=e=>e.replace(`//vrlab-public.ljcdn.com/`,`//vr-public.realsee-cdn.cn/`).replace(`//vrlab-image4.ljcdn.com/`,`//vr-image-4.realsee-cdn.cn/`).replace(`//vrlab-image3.ljcdn.com/`,`//vr-image-3.realsee-cdn.cn/`).replace(`//vrlab-image2.ljcdn.com/`,`//vr-image-2.realsee-cdn.cn/`).replace(`//vrlab-image1.ljcdn.com/`,`//vr-image-1.realsee-cdn.cn/`),Fie=new hc,J9=new Rs,Iie=new Po,Lie=new Po,Y9=new N,Rie=new A,X9=new WeakMap,Z9=y6([g6(null)]),Q9={},$9=class e extends QB{static get version(){return`1.0.0-alpha.11`}static get dracoPath(){return TX.decoderPath}static set dracoPath(e){TX.setDecoderPath(e)}static get ktx2Path(){return NX.transcoderPath}static set ktx2Path(e){NX.setTranscoderPath(e)}static get useNativeImageBitmap(){return lJ()}static set useNativeImageBitmap(e){cJ(e)}constructor(e={}){var t,n,r,i,a,o,s,c,l,u,d,f;if(super(),this.pbmGaussianSplattingRenderMesh=null,this.fiveId=JB(),Q9[this.fiveId]=this,this.currentUpdateArgs={time:nW(),args:[]},this.currentMode=`Panorama`,this.pano={workCode:``,panoIndex:0},this.needsRender=!0,this.onlyRenderIfNeeds=(t=e.onlyRenderIfNeeds)==null?!0:t,this.imageOptions=Object.assign({},(n=e.imageOptions)==null?{}:n),this.textureOptions=Object.assign({},(r=e.textureOptions)==null?{}:r),this.poweredByRealsee=(i=e.poweredByRealsee)==null?!0:i,this.backgroundColor=new N((a=e.backgroundColor)==null?1579548:a),this.backgroundAlpha=(o=e.backgroundAlpha)==null?1:o,this.extraElements=[],this.controllerInits={Panorama:Object.assign({},e.panorama),Model:Object.assign({},e.model),Floorplan:Object.assign({},e.floorplan),Topview:Object.assign({},e.topview),Mapview:Object.assign({},e.mapview),VRPanorama:Object.assign({},e.vrPanorama),XRPanorama:Object.assign({},e.xrPanorama)},this.fps={testCount:0,testTime:nW()},this.modeChangeDuration=(s=e.modeChangeDuration)==null?Nie:s,this.enableWheel=(c=e.enableWheel)==null?!0:c,this._enableHDR=!!e.enableHDR&&r5&&!e.forceWebGL,typeof window<`u`)if(`renderer`in e)e.renderer instanceof b5&&this.throwError(Error(`cannot render a internal renderer`)),this.renderer=e.renderer;else try{this.renderer=new b5({outputType:this._enableHDR?bi:void 0,logarithmicDepthBuffer:e.logarithmicDepthBuffer,forceWebGL:(l=e.forceWebGL)==null?!1:l});let t=K9();this.renderer.setPixelRatio(t===1?window.devicePixelRatio:1),this.renderer.setSize(512,512),this.renderer.setClearColor(this.backgroundColor,this.backgroundAlpha)}catch(e){let t=e instanceof Error?e:Error(String(e));this.throwError(t)}this.getPixelsRenderTarget=new Fo(1,1,{colorSpace:(d=(u=this.renderer)==null?void 0:u.outputColorSpace)==null?Fa:d,generateMipmaps:!1}),this.renderer&&ZK(this.renderer),this.viewport=Object.assign({left:0,bottom:0,width:1,height:1},e.viewport),this.camera=new dW(q9),this.scene=new E5,this.scene.background=this.backgroundColor,this.xrCustomObjectsScene=new Cs,this.scene.add(this.xrCustomObjectsScene),this.scene.matrixAutoUpdate=!1,this.requestProxy=(f=e.requestProxy)==null?Pie:f,this.networkSubscribe=new lq,this.networkSubscribe.on(`network`,(e,t,n,r)=>{var i;this.emit(`network.resource`,$(`network.resource`,{source:e,requestType:t,requestState:n,detail:r})),(i=this.analysis)==null||i.network(this.works,e,t,n,r)}),this.readyCallbacks=[],this.syncingState=!1,this.helperGroup=new ms,this.helperGroup.name=`helper`,this.helperGroup.matrixAutoUpdate=!1,this.scene.add(this.helperGroup),X9.set(this,Z9),this.modelScene=new o3({fiveId:this.fiveId}),this.modelScene.addEventListener(`model.create`,e=>{this.bindModel(e.model)}),this.scene.add(this.modelScene);let[p]=this.modelScene.setModels(Z9,{forceReplaceImmediately:!0});Q(p,`loaded`,{get(){return!1},set(e){}}),this.videoTexture=new Ou(e.videoInstance||Oie());let m=kie();this.scene.add(m),this.state={mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance},this.stateSynced=!1,this.destroyed=!1,this.paused=!0,typeof window<`u`&&(e.play!==!1&&this.play(),this.stopAnimationLoop=aJ.shared.add((e,t,...n)=>{this.updateTime(e,t,...n)},!1,0,10));let h=()=>{typeof document<`u`&&document.fullscreenElement===null&&this.currentMode===`VRPanorama`&&this.controller.emit(`vr.requestExit`,$(`vr.requestExit`,{}))},g=()=>{this.needsRender=!0},_=()=>{this.renderer instanceof b5&&this.renderer.reconfigureContext(),this.needsRender=!0},v=()=>{typeof document<`u`&&document.visibilityState===`visible`&&_()},y=()=>{_()};if(this.renderer instanceof b5&&(this.renderer.onDeviceLostCallback=()=>{_()}),typeof document<`u`&&(document.addEventListener(`visibilitychange`,v,!1),document.addEventListener(`fullscreenchange`,h,!1)),typeof window<`u`&&window.addEventListener(`pageshow`,y,!1),this.renderer&&this.renderer.domElement.addEventListener(`webglcontextrestored`,g,!1),this.removeEventListeners=()=>{typeof document<`u`&&(document.removeEventListener(`visibilitychange`,v,!1),document.removeEventListener(`fullscreenchange`,h,!1)),typeof window<`u`&&window.removeEventListener(`pageshow`,y,!1),this.renderer instanceof b5&&(this.renderer.onDeviceLostCallback=void 0),this.renderer&&this.renderer.domElement.removeEventListener(`webglcontextrestored`,g,!1)},this.loadWorkTask=this.prepare(),this.plugins={},e.plugins&&e.plugins.length){for(let t of e.plugins)if(typeof t==`function`)t(this);else if(Array.isArray(t)){let[e,n,r]=t;if(typeof e==`function`){let t=e(this,r);typeof n==`string`&&(this.plugins[n]?this.throwError(Error(`plugin name ${n} is exists.`)):this.plugins[n]=t)}}}Die(this),this.fiveRenderer=new e5({outputType:this._enableHDR?bi:void 0}),this.adaptiveLuminancePass=new a8,this.adaptiveLuminancePass.enabled=!1,this.fiveRenderer.composer.addPass(this.adaptiveLuminancePass),this.eyeDomeLightingPass=new s8(this.camera),this.eyeDomeLightingPass.enabled=!1,this.fiveRenderer.composer.addPass(this.eyeDomeLightingPass),this.pbmGaussianSplattingRenderMesh=new fU,this.scene.add(this.pbmGaussianSplattingRenderMesh)}get ident(){return this.fiveId}get panoIndex(){return this.pano.panoIndex}prepare(){return Promise.all([jq().catch(Y)]).then(Y)}dispose(){var e;if(this.destroyed===!0)return;delete Q9[this.fiveId],this.emit(`dispose`),this.destroyed=!0,this.pause(),this.stopAnimationLoop&&(this.stopAnimationLoop(),this.stopAnimationLoop=void 0),this.off(),this.networkSubscribe.off(),this.controller&&(this.controller.destroy(),this.controller=void 0);let t=this.getElement();t&&t.parentNode&&t.parentNode.removeChild(t);let n=this.modelScene.parameter;n.pano0&&n.pano0.map.dispose(),n.pano1&&n.pano1.map!==((e=n.pano0)==null?void 0:e.map)&&n.pano1.map.dispose(),n.reset(`pano0`,`pano1`),this.modelScene.dispose(),X9.set(this,Z9),this.renderer&&(!(this.renderer instanceof b5)||this.renderer.isInitialized)&&this.renderer.render(new Cs,new Lf),this.fiveRenderer.dispose(),this.renderer instanceof b5&&this.renderer.dispose()}setViewport(e){Object.assign(this.viewport,e),this.needsRender=!0}get boundingMesh(){return this.modelScene.boundingMesh}get helperVisible(){return this.helperGroup.visible}set helperVisible(e){this.helperGroup.visible!==e&&(this.helperGroup.visible=e,this.emit(`helpers.visible`,$(`helpers.visible`,{object:this.helperGroup})),this.needsRender=!0)}updateConfiguration(e,t=!0){let n=!1,r=!1;e.panorama&&(Object.assign(this.controllerInits.Panorama,vq(e.panorama)),this.currentMode===`Panorama`&&(n=!0)),e.model&&(Object.assign(this.controllerInits.Model,vq(e.model)),this.currentMode===`Model`&&(n=!0)),e.floorplan&&(Object.assign(this.controllerInits.Floorplan,vq(e.floorplan)),this.currentMode===`Floorplan`&&(n=!0)),e.topview&&(Object.assign(this.controllerInits.Topview,vq(e.topview)),this.currentMode===`Topview`&&(n=!0)),e.mapview&&(Object.assign(this.controllerInits.Mapview,vq(e.mapview)),this.currentMode===`Mapview`&&(n=!0)),e.vrPanorama&&(Object.assign(this.controllerInits.VRPanorama,vq(e.vrPanorama)),this.currentMode===`VRPanorama`&&(n=!0)),e.xrPanorama&&(Object.assign(this.controllerInits.XRPanorama,vq(e.xrPanorama)),this.currentMode===`XRPanorama`&&(n=!0)),e.imageOptions&&(Object.assign(this.imageOptions,e.imageOptions),(this.currentMode===`Panorama`||this.currentMode===`VRPanorama`||this.currentMode===`XRPanorama`)&&(r=!0,n=!0)),e.textureOptions&&Object.assign(this.textureOptions,e.textureOptions),t&&n&&this.controller&&this.currentMode&&(!this.controller.updateConfiguration(this.controllerInits[this.currentMode])||r)&&this.changeMode(this.currentMode,this.getCurrentState(),0,!1,!0)}appendTo(e,t={}){if(!this.renderer)return;if(!(this.renderer instanceof b5)){this.throwError(Error(`cannot call appendTo method when render a external renderer`));return}let n=this.getElement();if(!n)return;e.appendChild(n),this.refresh(t);let r=window.getComputedStyle(e).position;r!==`relative`&&r!==`absolute`&&r!==`fixed`&&r!==`sticky`&&(e.style.position=`relative`)}refresh(e={},t){var n,r,i,a,o,s;if(!this.renderer)return;let c=this.renderer.domElement.parentNode,{width:l=(n=c==null?void 0:c.offsetWidth)==null?512:n,height:u=(r=c==null?void 0:c.offsetHeight)==null?512:r}=e;if(l=Math.max(1,l),u=Math.max(1,u),!t){let e=K9(),n=typeof window<`u`?window.devicePixelRatio:1;if(t=(i=e===1?n:1)==null?1:i,t>1){let e=Math.max(l,u)*t,n=Math.min((s=(o=(a=this.renderer.backend.device)==null?void 0:a.limits)==null?void 0:o.maxTextureDimension2D)==null?8192:s,4096);e>n&&(t=Math.max(t/e*n,1),t=Math.floor(t*100)/100)}}this.renderer.setPixelRatio(t),this.renderer.setSize(l,u),this.needsRender=!0;let d=nW(),f=d-this.currentUpdateArgs.time,p=this.currentUpdateArgs.args;this.updateTime(d,f,...p)}addExtraElement(e){return this.extraElements.indexOf(e)===-1&&(this.extraElements.push(e),this.controller&&this.controller.bindExtraElement(e)),()=>this.removeExtraElement(e)}removeExtraElement(e){let t=this.extraElements.indexOf(e);t!==-1&&(this.extraElements.splice(t,1),this.controller&&this.controller.unbindExtraElement(e))}getSize(e){if(!this.renderer)throw Error(`renderer is not initialized`);return this.renderer.getSize(e),e.x*=this.viewport.width,e.y*=this.viewport.height,e}getDrawingBufferSize(e){if(!this.renderer)throw Error(`renderer is not initialized`);return this.renderer.getDrawingBufferSize(e),e.x*=this.viewport.width,e.y*=this.viewport.height,e}updateCamera(e,t,n=!0){if(!this.controller)throw Error(`controller is not initialized.`);return this.controller.updateCamera(e,t,n)}updateCameraWithKeyframes(e,t,n=!0){if(!this.controller)throw Error(`controller is not initialized.`);return this.controller.updateCameraWithKeyframes(e,t,n)}get works(){return X9.get(this)||Z9}get work(){return this.works[0]}get observers(){return this.work.observers}get models(){return this.modelScene.models}get model(){return this.modelScene.models[0]}load(e,t,n,r=!0){if(!this.renderer)throw Error(`renderer is not initialized`);let i=this.loadWorkTask.then(()=>Nne(e)?e.then(e=>this.load_(e,t,n,r)):this.load_(e,t,n,r));return this.loadWorkTask=i.catch(e=>{this.throwError(e)}),i}load_(t,n,r,i=!0){var a,o,s,c,l,u,d,f,p,m;let h={};typeof r==`number`?h.duration=r:typeof r==`object`&&Object.assign(h,r),this.works===Z9&&(h.duration===void 0&&(h.duration=0),h.effect===void 0&&(h.effect=`instant`));let g={};Object.assign(g,h.model),!g[`3d-tiles`]&&h[`3d-tiles`]&&(g[`3d-tiles`]=h[`3d-tiles`]),!g.textureOptions&&h.textureOptions&&(g.textureOptions=h.textureOptions),!g.textureOptions&&this.textureOptions&&(g.textureOptions=this.textureOptions);let _=[];if(Array.isArray(t))for(let e of t)e instanceof h6?_.push(e):typeof e!=`string`&&`work`in e?_.push(g6(e.work,e)):_.push(g6(e));else t instanceof h6?_.push(t):_.push(g6(t));h.mode===`add`&&(_=[].concat(this.works,_));let v;try{v=y6(_)}catch(e){return this.throwError(e),Promise.reject(e)}for(let e of v)this.bindWorkFetcher(e);n===void 0&&(n=`inherit`),n===`inherit`&&this.works===Z9&&(n=`initial`);let y=this.currentMode,b=v.initial,x=b.work.observers[0],S=x?{workCode:x.work.workCode,panoIndex:x.panoIndex}:{workCode:b.work.workCode,panoIndex:0},C=(a=b.mode)==null?x?`Panorama`:`Mapview`:a,w={};if(n===`inherit`){let e=this.getCurrentState(),[t]=v.filter(t=>t.workCode===e.workCode);if(t)S={workCode:e.workCode,panoIndex:e.panoIndex},C=e.mode,w={longitude:e.latitude,latitude:e.latitude,fov:e.fov,distance:e.distance,offset:e.offset.clone()};else{n={mode:y};let e=(s=(o=v[0])==null?void 0:o.observers)==null?void 0:s[this.panoIndex];e?(n.workCode=e.work.workCode,n.panoIndex=e.panoIndex):typeof v.initial.panoIndex==`number`?(n.workCode=v.initial.work.workCode,n.panoIndex=v.initial.panoIndex):(n.mode===`Panorama`||n.mode===`VRPanorama`||n.mode===`XRPanorama`)&&(n.mode=`Mapview`),n.mode===y&&(n.longitude=this.camera.pose.longitude,n.latitude=this.camera.pose.latitude,n.fov=this.camera.pose.fov)}}if(n===`initial`&&(typeof b.panoIndex==`number`&&(S={workCode:b.work.workCode,panoIndex:b.panoIndex}),b.mode&&(C=b.mode),w={longitude:b.longitude,latitude:b.latitude,fov:b.fov,distance:b.distance,offset:(c=b.offset)==null?void 0:c.clone()}),typeof n==`object`){if(C=(l=n.mode)==null?y:l,typeof n.panoIndex==`number`){let e=v.getObserver({workCode:(d=(u=n.workCode)==null?b.work.workCode:u)==null?``:d,panoIndex:n.panoIndex});e&&(S={workCode:e.work.workCode,panoIndex:e.panoIndex})}w={longitude:n.longitude,latitude:n.latitude,fov:n.fov,distance:n.distance,offset:n.offset?new j().copy(n.offset):void 0}}let T=(f=h.duration)==null?this.modeChangeDuration:f;(C===`Floorplan`||C===`Topview`||C===`Mapview`)&&y===C&&(T=0);let E=`fly`;(C===`Panorama`||C===`VRPanorama`||C===`XRPanorama`)&&y===C&&(E=(p=h.effect)==null?`fade`:p),this.emit(`works.request`,$(`works.request`,{input:t,works:v,userAction:i}));let D=(e,t,r)=>{let a=this.getCurrentState(),o=Object.assign(Object.assign({mode:e},t),r);n===`inherit`&&(o=this.getCurrentState()),this.pano=t;let s=Object.assign(Object.assign({initial:{state:o,currentState:a,duration:T,effect:E,userAction:i}},this.commonParams()),this.controllerInits[e]),c=W9[o.mode].initAnimationEndState(s);if(this.controller&&y===e)this.controller.updateWork(v,c,{effect:E,duration:T},i)===!1&&(this.controller.destroy(),this.controller=this.applyController(e,s));else{if(this.controller)this.controller.destroy();else{let t=W9[e].initAnimationEndState(s);this.camera.setFromPose(t),this.emit(`camera.update`,$(`camera.update`,{state:this.getCurrentState(),userAction:i}))}this.controller=this.applyController(e,s);let t=$(`mode.change`,{prevMode:y,mode:e,state:c,userAction:i});try{this.emit(`mode.change`,t)}catch(e){console.error(e)}}this.state.workCode=this.pano.workCode,this.state.panoIndex=this.pano.panoIndex,this.updateTime(this.currentUpdateArgs.time,0,...this.currentUpdateArgs.args)};X9.set(this,v);let ee=Promise.resolve();if(C===e.Mode.Floorplan||C===e.Mode.Topview||C===e.Mode.Mapview||C===e.Mode.Model){this.modelScene.loaded===!1&&(this.camera.setFromPose(w),Fne(this.state,this.camera.pose));let e=this.modelScene.setModels(v,g);ee=Promise.all(e.map(e=>e.loadedReady)).then(()=>{this.needsRender=!0,D(C,S,w),this.emit(`camera.update`,$(`camera.update`,{state:this.getCurrentState(),userAction:i}))})}else{D(C,S,w);let e=this.controller,t=!1;this.modelScene.autoRefine=!1;let n=()=>{this.works===v&&t===!1&&(this.needsRender=!0,this.emit(`camera.update`,$(`camera.update`,{state:this.getCurrentState(),userAction:i})),t=!0,this.modelScene.autoRefine=!0),e.off(`pano.arrived`,n),e.off(`pano.cancel`,n)},r=this.modelScene.setModels(v,g);ee=Promise.all(r.map(e=>e.initReady)).then(Y),e.once(`pano.arrived`,n),e.once(`pano.cancel`,n),setTimeout(n,((m=h.duration)==null?this.modeChangeDuration:m)+1e3)}return this.emit(`works.load`,$(`works.load`,{input:t,userAction:i,works:v})),ee.then(()=>this.ready()).then(()=>{var e;this.emit(`works.ready`,$(`works.ready`,{input:t,userAction:i,works:v})),(e=this.analysis)==null||e.work(v)})}reset(){let e=this.loadWorkTask.then(()=>this.reset_());return this.loadWorkTask=e.catch(e=>{this.throwError(e)}),e}reset_(){return new Promise(e=>{var t;this.controller&&(this.controller.destroy(),this.controller=void 0);let n=this.modelScene.parameter;n.pano0&&n.pano0.map.dispose(),n.pano1&&n.pano1.map!==((t=n.pano0)==null?void 0:t.map)&&n.pano1.map.dispose(),n.set({pano0:null,pano1:null,modelAlpha:1}),X9.set(this,Z9),this.modelScene.setModels(Z9,{forceReplaceImmediately:!0}),this.renderer&&this.modelScene.update(this.renderer,this.camera),this.needsRender=!0,this.currentMode=`Panorama`,this.pano={workCode:``,panoIndex:0},this.camera.setFromPose({distance:0,fov:q9,longitude:0,latitude:0,offset:new j(0,0,0)}),this.state={mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex,longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude,fov:this.camera.pose.fov,offset:this.camera.pose.offset.clone(),distance:this.camera.pose.distance},this.camera.needsRender=!1,this.needsRender=!1,e()})}changeMode(t,n={},r,i=!0,a=!1){return new Promise((o,s)=>{var c,l,u,d;if(!this.renderer)throw Error(`renderer is not initialized.`);n=Object.assign({},n);let f=0;this.controller&&(f=typeof r==`number`?r:(c=r==null?void 0:r.duration)==null?this.modeChangeDuration:c);let p=`fly`;this.controller&&typeof r==`object`&&r.effect&&(p=r.effect);let m=typeof n.panoIndex==`number`?{workCode:(d=(l=n.workCode)==null?(u=this.work)==null?void 0:u.workCode:l)==null?``:d,panoIndex:n.panoIndex}:this.pano;if(!e.Mode.hasOwnProperty(t)){let e=Error(`mode "${t}" is not existed`);this.throwError(e),s(e);return}if((t===e.Mode.Panorama||t===e.Mode.VRPanorama||t===e.Mode.XRPanorama)&&!this.works.getObserver(m)){let e=Error(`PanoId ${O3(m)} not existed.`);this.throwError(e),s(e);return}(t===e.Mode.Floorplan||t===e.Mode.Topview||t===e.Mode.Mapview||t===e.Mode.Model)&&this.modelScene.empty&&(f=0);let h=this.controller,g=this.currentMode,_=()=>{if(this.controller&&this.controller.stopMomentumMovement(),this.controller&&a===!1&&g===t)t===e.Mode.Panorama||t===e.Mode.Model||t===e.Mode.VRPanorama||t===e.Mode.XRPanorama?!A3(this.pano,m)&&`moveToPano`in this.controller&&typeof this.controller.moveToPano==`function`?this.controller.moveToPano(m,Object.assign({duration:f},n),i):this.controller.updateCamera(n,f,i).catch(Y):(A3(this.pano,m)||(this.pano=m),this.controller.updateCamera(n,f,i).catch(Y));else{let e=Object.assign(Object.assign({},n),m),r=Object.assign(Object.assign({initial:{state:e,currentState:this.getCurrentState(),duration:f,effect:p,userAction:i}},this.commonParams()),this.controllerInits[t]),a=W9[t].initAnimationEndState(r),o=$(`mode.change.request`,{prevMode:this.currentMode,mode:t,state:a,userAction:i});if(this.emit(`mode.change.request`,o),!o.defaultPrevented){h&&h.destroy(),this.controller=this.applyController(t,r);let e=$(`mode.change`,{prevMode:this.currentMode,mode:t,state:a,userAction:i});this.emit(`mode.change`,e)}}o()},v=aJ.shared.getContext();if(v&&(typeof XRSession<`u`&&v instanceof XRSession&&v.end(),aJ.shared.setContext(null)),t===e.Mode.VRPanorama)this.requestFullscreen(),jie().then(()=>_()).catch(e=>{let t=e instanceof Error?e:Error(String(e));this.exitFullscreen(),this.throwError(t),s(t)});else if(t===e.Mode.XRPanorama){if(!M9.isBackendXRCapable(this.renderer)){let e=Error(`XRPanorama 需要 WebGL2 回落后端。请在 new Five() 时传入 { forceWebGL: true }。后端在运行时无法切换,设备检测必须发生在 new Five() 之前。`);this.throwError(e),s(e);return}if(!M9.isBrowserXRCapable()){let e=Error(`当前浏览器不支持 WebXR(navigator.xr 不存在)。`);this.throwError(e),s(e);return}Mie().then(e=>{aJ.shared.setContext(e),a=!0;try{_()}catch(t){console.error(`[XR] changeMode 建立 XRPanorama controller 失败,结束 session: ${t instanceof Error?t.message:String(t)}`),Promise.resolve(e.end()).catch(()=>{}),aJ.shared.setContext(null);let n=t instanceof Error?t:Error(String(t));this.throwError(n),s(n)}}).catch(e=>{let t=e instanceof Error?e:Error(String(e));this.throwError(t),s(t)})}else _()})}getPixels(e,t,n,r,i,a,o){return HH(this,void 0,void 0,function*(){if(!this.renderer)throw Error(`renderer is not initialized.`);let s=nW(),c=this.renderer.getPixelRatio(),l=this.renderer.getRenderTarget(),u=this.getSize(new A),d=0,f=0,p=1,m=1,h,g,_,v,y;typeof e==`number`?(d=e,typeof t==`number`&&(f=t),typeof n==`number`&&(p=n),typeof r==`number`&&(m=r),h=i,g=a,y=o):(d=e.x,f=e.y,p=e.width,m=e.height,h=e.pixelRatio,g=e.flipY,_=e.helperVisible,v=e.skipPanorama,y=e.buffer),d=Math.floor(d),f=Math.floor(f),p=Math.floor(p),m=Math.floor(m),h=Math.floor(h==null?c:h),g=g==null?!1:g;let b=this.helperVisible,x=this.modelScene.parameter.modelAlpha;this.helperVisible=_==null?this.helperVisible:_,v&&(this.controller instanceof W9.Panorama||this.controller instanceof W9.VRPanorama||this.controller instanceof W9.XRPanorama)&&v===!0&&this.modelScene.parameter.set(`modelAlpha`,1),this.modelScene.update(this.renderer,this.camera);let S=this.getPixelsRenderTarget;S.setSize(p*h,m*h),this.renderer.setRenderTarget(S),this.camera.pixelRatio=h,this.camera.resolution.set(p,m),this.camera.setViewOffset(u.width,u.height,d,u.height-f-m,p,m),this.camera.aspect=u.width/u.height,this.camera.updateTime(s),this.scene.update(this.renderer,this.camera);let C=this.renderer.autoClear,w=this.renderer.autoClearColor,T=this.renderer.autoClearDepth,E=this.renderer.autoClearStencil,D=this.renderer.getClearColor(Y9),ee=this.renderer.getClearAlpha(),te=this.renderer.getScissorTest();this.renderer.autoClear=!0,this.renderer.autoClearColor=!0,this.renderer.autoClearDepth=!0,this.renderer.autoClearStencil=!0,this.renderer.setScissorTest(!1);let ne=this.scene.background;this.scene.background=this.camera.isOrthographicCamera||this.backgroundAlpha<1?null:ne,this.renderer.render(this.scene,this.camera),this.scene.background=ne,this.renderer.autoClear=C,this.renderer.autoClearColor=w,this.renderer.autoClearDepth=T,this.renderer.autoClearStencil=E,this.renderer.setClearColor(D,ee),this.renderer.setScissorTest(te),this.helperVisible=b,x===void 0?this.modelScene.parameter.reset(`modelAlpha`):this.modelScene.parameter.set(`modelAlpha`,x),this.renderer.setRenderTarget(l),this.camera.clearViewOffset(),this.camera.pixelRatio=c,this.camera.resolution.copy(u),this.camera.aspect=this.camera.resolution.width/this.camera.resolution.height,this.camera.updateTime(s),this.modelScene.update(this.renderer,this.camera),this.scene.update(this.renderer,this.camera);let re=p*h,ie=m*h,ae=re*ie,oe=ae*4;if(y){if(y.length!==oe)throw Error(`buffer length is not equals pixels ${oe}`)}else y=new Uint8Array(oe);let se=yield this.renderer.readRenderTargetPixelsAsync(S,0,0,re,ie),ce=re*4;if(se.length===oe)y.set(se);else{let e=Math.ceil(ce/256)*256;for(let t=0;t<ie;t++){let n=t*e;y.set(se.subarray(n,n+ce),t*ce)}}if(!g){let e=ae/2;for(let t=0,n=0,r=0,i=0;n<e;n++)for(i=(ie-Math.floor(n/re)-1)*re+n%re,r=0;r<4;r++)t=y[n*4+r],y[n*4+r]=y[i*4+r],y[i*4+r]=t}return y})}getElement(){var e;return(e=this.renderer)==null?void 0:e.domElement}render(e){let t=this.renderer;if(!t)return;let n=t.getRenderTarget();t.setRenderTarget(null);let r=t.autoClear,i=t.autoClearColor,a=t.autoClearDepth,o=t.autoClearStencil,s=t.getClearColor(Y9),c=t.getClearAlpha(),l=t.getViewport(Iie),u=t.getScissor(Lie),d=t.getScissorTest();t.autoClear=!0,t.autoClearColor=!0,t.autoClearDepth=!0,t.autoClearStencil=!0;let f=t.getSize(Rie),p=Math.floor(f.x*this.viewport.left),m=Math.floor(f.y*this.viewport.bottom),h=Math.floor(f.x*this.viewport.width),g=Math.floor(f.y*this.viewport.height);t.setClearColor(this.backgroundColor,this.backgroundAlpha),t.setViewport(p,m,h,g),t.setScissor(p,m,h,g);let _=this.viewport.bottom!==0||this.viewport.left!==0||this.viewport.width!==1||this.viewport.height!==1;t.setScissorTest(_);let v=this.scene.background;this.scene.background=this.camera.isOrthographicCamera||this.backgroundAlpha<1?null:v;let y=!0;this.controller&&this.controller.render()&&(y=!1),y&&this.fiveRenderer.render(t,this.scene,this.modelScene,this.camera,this.needsRender),this.scene.background=v,t.autoClear=r,t.autoClearColor=i,t.autoClearDepth=a,t.autoClearStencil=o,t.setClearColor(s,c),t.setViewport(l),t.setScissor(u),t.setScissorTest(d),t.setRenderTarget(n),e&&aJ.shared.add(e,!0)}updateTime(e,t,...n){if(this.currentUpdateArgs={time:e,args:n},this.destroyed)return;if(this.renderer&&NX.detectSupport(this.renderer),this.syncingState=this.syncState(e,t),this.controller&&this.controller.updateTime(e,t,...n),this.renderer&&(this.camera.pixelRatio=this.renderer.getPixelRatio(),this.getSize(this.camera.resolution),this.camera.aspect=this.camera.resolution.width/this.camera.resolution.height),this.camera.controllerMode=this.currentMode,this.camera.updateTime(e),this.renderer){let e=this.modelScene.loaded,t=this.modelScene.refined;this.modelScene.update(this.renderer,this.camera),e===!1&&this.modelScene.loaded===!0&&(this.controller&&this.controller.updateModel(this.modelScene),aJ.shared.add(()=>{this.emit(`models.load`,$(`models.load`,{modelScene:this.modelScene}))},!0,0,10)),t===!1&&this.modelScene.refined===!0&&aJ.shared.add(()=>{this.emit(`models.refined`,$(`models.refined`,{modelScene:this.modelScene}))},!0,0,10)}if(this.camera.autoNearFar){J9.makeEmpty(),J9.expandByObject(this.modelScene.boundingMesh);let t=J9.getBoundingSphere(Fie),n=t.radius*2;t.containsPoint(this.camera.position)||(n=this.camera.position.distanceTo(t.center)+t.radius);let r=J(n/500,.001,.1),i=J(n,800);this.camera.near!==r&&(this.camera.near=r),this.camera.far!==i&&(this.camera.far=i),this.camera.updateTime(e)}if(this.renderer){let e=this.modelScene.visible;this.modelScene.visible=!1,this.scene.update(this.renderer,this.camera),this.modelScene.visible=e}if(this.syncingState=!1,this.controller&&this.controller.needsRender===!0&&(this.controller.needsRender=!1,this.needsRender=!0),this.camera.needsRender===!0&&(this.camera.needsRender=!1,this.needsRender=!0),this.modelScene.needsRender===!0&&(this.modelScene.needsRender=!1,this.needsRender=!0),this.scene.needsRender===!0&&(this.scene.needsRender=!1,this.needsRender=!0),this.pbmGaussianSplattingRenderMesh&&this.pbmGaussianSplattingRenderMesh.needsRender===!0&&(this.pbmGaussianSplattingRenderMesh.needsRender=!1,this.needsRender=!0),this.onlyRenderIfNeeds!==!0&&(this.needsRender=!0),this.paused===!0||this.renderer instanceof b5&&!this.renderer.isInitialized)return;let r=$(`render.prepare`,{needsRender:this.needsRender});this.emit(`render.prepare`,r),r.defaultPrevented&&(this.needsRender=!1);let i=this.needsRender;this.render(),this.needsRender=!1,this.emit(`render`,$(`render`,{needsRender:i})),this.hasListener(`fps`)&&(this.fps.testTime&&e-this.fps.testTime<1e3?this.fps.testCount++:(this.emit(`fps`,this.fps.testCount),this.fps.testTime=e,this.fps.testCount=0))}pause(){this.paused=!0,this.renderer&&this.renderer instanceof b5&&this.renderer.clear(!0,!0,!0)}play(){this.needsRender=!0,this.paused=!1}moveToPano(t,n={},r=!0){let{controller:i,renderer:a}=this;if(!i)return this.throwError(Error(`controller is not initialized.`)),Promise.resolve();if(!a)return this.throwError(Error(`renderer is not initialized.`)),Promise.resolve();typeof t==`number`&&this.pano.workCode&&(t={workCode:this.pano.workCode,panoIndex:t});let o=this.works.getObserver(t);if(!o)return this.throwError(Error(`pano ${JSON.stringify(t)} not existed.`)),Promise.resolve();let s={workCode:o.work.workCode,panoIndex:o.panoIndex};return`moveToPano`in i&&typeof i.moveToPano==`function`?i.moveToPano(s,n,r):o&&(this.pano=s,this.once(`initAnimation.start`,e=>{n.moveStartCallback&&n.moveStartCallback(e.state)}),this.once(`initAnimation.end`,e=>{n.moveEndCallback&&n.moveEndCallback(e.state)}),this.changeMode(e.Mode.Panorama,n,{effect:n.effect},r)),this.ready()}preloadPano(e,t=Y){let n=this.works.getObserver(e);if(!n)return Promise.reject(Error(`Pano ${JSON.stringify(e)} never found`));let r=[`right`,`left`,`up`,`down`,`front`,`back`],i=nW();return Promise.all(r.map(e=>{let t=O3({panoIndex:n.panoIndex,workCode:n.work.workCode}),r=Object.assign({key:`pano.${t}.${e}`},gq(this.imageOptions,[`size`,`format`,`quality`,`forceUseExifOrientation`,`mappings`])),i=n.work.getURL(n.images[e]),a=this.imageOptions.transform?this.imageOptions.transform(i,r):Jq(i,r);return A4(this.fiveId,n.work).preload(a)})).then(()=>{let e=nW()-i;return t(e),e})}project2d(e,t=!1){if(!this.renderer)return null;if(t){let t=this.camera.position,n=e.clone().sub(t),r=new em(t,n.clone().normalize());r.params.Points={threshold:.1};let[i]=this.modelScene.intersectRaycaster(r);if(i&&i.distance+.01<n.length())return null}let n=e.clone().project(this.camera);if(Math.abs(n.z)>1)return null;let r=this.renderer.getSize(new A),i=r.x*this.viewport.width,a=r.y*this.viewport.height,o=r.x*this.viewport.left+(n.x+1)/2*i,s=r.y*(1-this.viewport.bottom-this.viewport.height)+(-n.y+1)/2*a;return new A(o,s)}getCurrentState(){return Object.assign(Object.assign({},this.camera.copyPose()),{mode:this.currentMode,workCode:this.pano.workCode,panoIndex:this.pano.panoIndex})}setState(e,t=!1,n=!0){var r,i,a,o,s,c,l,u,d,f;e=gq(e,[`mode`,`workCode`,`panoIndex`,`longitude`,`latitude`,`fov`,`offset`,`distance`]),e.offset&&!(e instanceof j)&&(e.offset=new j(e.offset.x,e.offset.y,e.offset.z));let p;if(typeof e.panoIndex==`number`)if(e.workCode)p={workCode:e.workCode,panoIndex:e.panoIndex};else{let t=(i=(r=this.work)==null?void 0:r.workCode)==null?``:i,n=this.state.workCode;this.works.filter(e=>e.workCode===n).length>0&&(t=n),p={workCode:t,panoIndex:e.panoIndex}}let m=(a=e.mode)==null?this.state.mode:a,h,g,_,v,y;if(this.controller&&this.controller.stopMomentumMovement(),this.state.mode!==m){if(m===`VRPanorama`){this.changeMode(`VRPanorama`,void 0,void 0,!0);return}if(m===`XRPanorama`){this.changeMode(`XRPanorama`,void 0,void 0,!0);return}let t={workCode:p==null?void 0:p.workCode,panoIndex:p==null?void 0:p.panoIndex};typeof e.longitude==`number`&&(t.longitude=e.longitude),typeof e.latitude==`number`&&(t.latitude=e.latitude),typeof e.fov==`number`&&(t.fov=e.fov),typeof e.distance==`number`&&(t.distance=e.distance),e.offset instanceof j&&(t.offset=e.offset);let n=Object.assign(Object.assign({initial:{state:t,currentState:this.getCurrentState(),duration:this.modeChangeDuration,effect:`fly`,userAction:!1}},this.commonParams()),this.controllerInits[m]),r=W9[m].initAnimationEndState(n);h=r.longitude,g=r.latitude,_=r.fov,v=r.offset,y=r.distance}else h=(o=e.longitude)==null?this.state.longitude:o,g=(s=e.latitude)==null?this.state.latitude:s,_=(c=e.fov)==null?this.state.fov:c,v=(l=e.offset)==null?this.state.offset:l,y=(u=e.distance)==null?this.state.distance:u;let b={workCode:(p==null?this.pano:p).workCode,panoIndex:(p==null?this.pano:p).panoIndex,mode:m,longitude:h,latitude:g,fov:_,offset:v,distance:y};this.emit(`state.set`,$(`state.set`,{userAction:n,state:b})),Q5(this.state,b)||(this.controller&&b.mode===`VRPanorama`&&b.mode!==this.state.mode?(Z5(this.state,b),this.changeMode(`VRPanorama`)):this.controller&&b.mode===`XRPanorama`&&b.mode!==this.state.mode?(Z5(this.state,b),this.changeMode(`XRPanorama`)):(Z5(this.state,b),this.controller&&n&&(this.controller.userAction=!1),t&&this.state.mode===b.mode&&(this.syncingState=this.syncState(nW(),0,t),this.syncingState&&((d=this.controller)==null||d.updateTime(nW(),0),this.syncingState=!1)),this.emit(`state.change`,$(`state.change`,{userAction:n,state:this.state})),(f=this.analysis)==null||f.state(this.works,this.state)))}syncState(t,n,r=!1){let i=this.stateSynced;if(this.stateSynced=!1,!this.controller)return!1;if(this.state.mode!==this.currentMode){let e={mode:this.state.mode,workCode:this.state.workCode,panoIndex:this.state.panoIndex,longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset,distance:this.state.distance};return this.changeMode(this.state.mode,e,this.modeChangeDuration,this.controller.userAction),!0}if(!this.controller.isReady())return!1;if(this.controller instanceof W9.Model){if(J5(this.camera.pose.offset,this.state.offset)){let e={longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset};return this.controller.moveToPosition(this.state.offset,Object.assign(Object.assign({},e),{duration:r?0:void 0}),!1),!0}}else{let e={workCode:this.state.workCode,panoIndex:this.state.panoIndex};if(!A3(e,this.pano)&&`moveToPano`in this.controller&&typeof this.controller.moveToPano==`function`){let t={longitude:this.state.longitude,latitude:this.state.latitude,fov:this.state.fov,offset:this.state.offset,distance:this.state.distance};return this.controller.moveToPano(e,t,!1),!0}}if(this.controller instanceof W9.Floorplan||this.controller instanceof W9.Topview||this.controller instanceof W9.Mapview){let e=.2,t=Math.PI/45,n=r?this.state.fov:K6(this.camera.pose.fov,this.state.fov,1),i=Math.abs(this.camera.pose.distance-this.state.distance),a=i>e*15?i/15:.2,o=r?this.state.distance:K6(this.camera.pose.distance,this.state.distance,a),s=this.camera.pose.offset.distanceTo(this.state.offset),c=s>e*15?s/15:e,l=r?new j().copy(this.state.offset):q6(this.camera.pose.offset,this.state.offset,c),{longitude:u,latitude:d}=r?{longitude:this.state.longitude,latitude:this.state.latitude}:J6({longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude},{longitude:this.state.longitude,latitude:this.state.latitude},t);if(K5(n,this.camera.pose.fov)||J5(l,this.camera.pose.offset)||K5(o,this.camera.pose.distance)||K5(u,this.camera.pose.longitude,Math.PI*2)||K5(d,this.camera.pose.latitude)){let e={x:l.x,y:l.y,z:l.z},t={fov:n};return Object.assign(e,{distance:o}),Object.assign(t,{longitude:u,latitude:d}),this.controller.stopMomentumMovement(),this.controller.cameraMotion.set(t,0).catch(Y),this.controller.locationMotion.set(e,0).catch(Y),!0}}else{let e=Math.PI/45,t=r?this.state.fov:K6(this.camera.pose.fov,this.state.fov,1),{longitude:n,latitude:i}=r?{longitude:this.state.longitude,latitude:this.state.latitude}:J6({longitude:this.camera.pose.longitude,latitude:this.camera.pose.latitude},{longitude:this.state.longitude,latitude:this.state.latitude},e),a=this.state.distance,o=new j().copy(this.state.offset);if(K5(a,this.camera.pose.distance)&&(this.state.distance=this.camera.pose.distance),J5(o,this.camera.pose.offset)&&(this.state.offset=this.camera.pose.offset.clone()),K5(n,this.camera.pose.longitude,Math.PI*2)||K5(i,this.camera.pose.latitude)||K5(t,this.camera.pose.fov))return this.controller.stopMomentumMovement(),this.controller.cameraMotion.set({longitude:n,latitude:i,fov:t},0).catch(Y),!0}if(this.stateSynced=!0,i===!1&&this.emit(`state.synced`,$(`state.synced`,{userAction:!1,state:this.state})),this.readyCallbacks.length&&this.stateSynced){let t=this.currentMode;if(!(t===e.Mode.Floorplan||t===e.Mode.Topview||t===e.Mode.Mapview||t===e.Mode.Model)||this.modelScene.loaded){let e=this.readyCallbacks.slice();this.readyCallbacks.length=0;for(let t of e)this.controller instanceof W9.Panorama&&t.tile===!0?this.readyCallbacks.push(t):t()}}return!1}ready(e={}){return new Promise(t=>{var n;this.readyCallbacks.push(Object.assign(t,{tile:(n=e.tile)==null?!1:n}))}).then(()=>{var e;return Promise.all([this.model.initReady,(e=this.renderer)==null?void 0:e.ready])}).then(Y)}requestFullscreen(){var e;if(!i5)return;let t=(e=this.getElement())==null?void 0:e.parentNode;t&&`requestFullscreen`in t&&typeof document<`u`&&document.fullscreenElement===null&&t.requestFullscreen()}exitFullscreen(){typeof document<`u`&&document.fullscreenElement&&`exitFullscreen`in document&&document.exitFullscreen()}throwError(e){this.hasListener(`error`)?this.emit(`error`,e):console.error(e)}bindModel(e){let t=()=>{aJ.shared.add(()=>{this.emit(`model.load`,$(`model.load`,{work:e.work,model:e,error:null}))},!0)},n=t=>{let{error:n}=t;this.emit(`model.error`,$(`model.error`,{work:e.work,model:e,error:n})),this.throwError(n)},r=()=>{this.emit(`model.changeShownFloor`,$(`model.changeShownFloor`,{work:e.work,model:e,error:null}))},i=t=>{this.emit(`models.tileLoad`,$(`models.tileLoad`,{work:e.work,model:e,tile:t.tile}))},a=t=>{this.emit(`models.tileUnload`,$(`models.tileUnload`,{work:e.work,model:e,tile:t.tile}))},o=()=>{e.removeEventListener(`load`,t),e.removeEventListener(`error`,n),e.removeEventListener(`changeShownFloor`,r),e.removeEventListener(`tileLoad`,i),e.removeEventListener(`tileUnload`,a),e.removeEventListener(`dispose`,o)};e.addEventListener(`load`,t),e.addEventListener(`error`,n),e.addEventListener(`changeShownFloor`,r),e.addEventListener(`tileLoad`,i),e.addEventListener(`tileUnload`,a),e.addEventListener(`dispose`,o),this.emit(`model.request`,$(`model.request`,{work:e.work,model:e,error:null}))}bindWorkFetcher(e){let t=this,n=e.workCode,r=e.allowHosts,i=new mq({get networkSubscribe(){return t.networkSubscribe},requestProxy(e){return Promise.resolve(e).then(e=>t.requestProxy(e,n)).then(e=>{let t=$3(e,r);return t instanceof Error?Promise.reject(t):t})}});j4(this.fiveId,e,i)}commonParams(){return{fiveId:this.fiveId,scene:this.scene,xrCustomObjectsScene:this.xrCustomObjectsScene,helper:this.helperGroup,camera:this.camera,renderer:this.renderer,viewport:this.viewport,element:this.getElement(),works:this.works,imageOptions:this.imageOptions,enableWheel:this.enableWheel,enableHDR:this._enableHDR,extraElements:this.extraElements,videoTexture:this.videoTexture,modelScene:this.modelScene}}applyController(t,n){if(!this.renderer)throw Error(`renderer is not initialized.`);let r=W9[t];this.currentMode=t;let i=new r(n);for(let e of G9)i.on(e,(...t)=>{if(this.emit(e,...t))return!1});{let e=W9[t].initAnimationEndState(n),r=n.initial.userAction;Q5(this.state,e)||(Z5(this.state,e),this.emit(`state.change`,$(`state.change`,{userAction:r,state:this.state}))),this.emit(`currentState.change`,$(`currentState.change`,{userAction:r,state:this.getCurrentState()}))}return i.on(`camera.update`,e=>{var t;if(this.controller){let n=this.controller.getTargetState();e.userAction&&this.syncingState===!1&&this.state.mode===n.mode&&!Q5(this.state,n)&&(Z5(this.state,n),this.emit(`state.change`,$(`state.change`,{userAction:e.userAction,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}this.emit(`currentState.change`,$(`currentState.change`,{userAction:e.userAction,state:this.getCurrentState()}))}),i.on(`initAnimation.start`,e=>{var t;let{state:n,userAction:r}=e;r&&this.state.mode===n.mode&&!Q5(this.state,n)&&(Z5(this.state,n),this.emit(`state.change`,$(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),i.on(`initAnimation.end`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!Q5(this.state,n)&&(Z5(this.state,n),this.emit(`state.change`,$(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),i.on(`pano.moveTo`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!Q5(this.state,n)&&(Z5(this.state,n),this.emit(`state.change`,$(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),i.on(`pano.arrived`,e=>{var t;let{state:n,userAction:r}=e;this.pano={workCode:n.workCode,panoIndex:n.panoIndex},r&&this.state.mode===n.mode&&!Q5(this.state,n)&&(Z5(this.state,n),this.emit(`state.change`,$(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),i.on(`pano.cancel`,e=>{var t;let{state:n,userAction:r}=e;r&&this.state.mode===n.mode&&!Q5(this.state,n)&&(Z5(this.state,n),this.emit(`state.change`,$(`state.change`,{userAction:r,state:this.state})),(t=this.analysis)==null||t.state(this.works,this.state))}),i.on(`pano.moveTo`,e=>{let{userAction:t}=e;this.emit(`currentState.change`,$(`currentState.change`,{userAction:t,state:this.getCurrentState()}))}),i.on(`pano.request`,e=>{this.emit(`pano.request`,e),e.defaultPrevented||this.moveToPano(e.state,e.options,e.userAction)}),i.on(`vr.requestExit`,()=>{this.currentMode===e.Mode.VRPanorama&&(this.exitFullscreen(),this.changeMode(e.Mode.Panorama))}),i.on(`error`,e=>this.throwError(e)),i}removeEventListeners(){}get internalLightsEnabled(){let e=this.scene.children.find(e=>e.name===`internalLights`);return e?e.visible:!1}set internalLightsEnabled(e){let t=this.scene.children.find(e=>e.name===`internalLights`);t&&(t.visible=e),t=this.modelScene.children.find(e=>e.name===`internalLights`),t&&(t.visible=e)}get scissor(){return this.viewport}setScissor(e){return this.setViewport(e)}getPose(){let{longitude:e,latitude:t,fov:n,offset:r,distance:i}=this.camera.copyPose();return{longitude:e,latitude:t,fov:n,offset:r.clone(),distance:i}}getLongitudeAndLatitude(){let{longitude:e,latitude:t}=this.getPose();return{longitude:e,latitude:t}}getOffset(){return this.getPose().offset}getCameraLocal(){if(this.pano.workCode&&this.controller&&this.works){let e=this.works.getObserver(this.pano);if(e){let t=new ps;t.matrix.copy(e.matrix).premultiply(e.work.transform),t.matrix.decompose(t.position,t.quaternion,t.scale),t.matrixAutoUpdate=!1;let n=new j(0,0,-1);n.applyQuaternion(this.camera.quaternion);let r=t.quaternion.clone().invert();return n.applyQuaternion(r),{theta:Math.atan2(n.x,-n.z),phi:-Math.asin(n.y),lookAtVector:n}}}return null}addPass(e){this.fiveRenderer.composer.addPass(e)}removePass(e){let t=this.fiveRenderer.composer.passes.indexOf(e);t!==-1&&this.fiveRenderer.composer.passes.splice(t,1)}insertPass(e,t){this.fiveRenderer.composer.insertPass(e,t)}get renderMode(){return this.fiveRenderer.renderMode}set renderMode(e){this.fiveRenderer.renderMode=e}get enableEDL(){return this.eyeDomeLightingPass.enabled}set enableEDL(e){this.eyeDomeLightingPass.enabled=e,this.needsRender=!0}get enableAdaptiveLuminance(){return this.adaptiveLuminancePass.enabled}set enableAdaptiveLuminance(e){this.adaptiveLuminancePass.enabled=e,this.needsRender=!0}get enableHDR(){return this._enableHDR}};$9.Mode={Panorama:`Panorama`,Model:`Model`,Floorplan:`Floorplan`,Topview:`Topview`,Mapview:`Mapview`,VRPanorama:`VRPanorama`,XRPanorama:`XRPanorama`},typeof window<`u`&&Object.assign(window,{__FIVE_DEBUG__:{THREE:Jm,constructor:$9,instances:Q9}});var zie=class{static createButton(e){let t=document.createElement(`button`),n=`ENTER VR`,r=`calc(50% - 50px)`,i=`100px`,a;function o(){t.style.display=``,t.style.cursor=`pointer`,t.style.left=r,t.style.width=i,t.textContent=n,t.onmouseenter=function(){t.style.opacity=`1.0`},t.onmouseleave=function(){t.style.opacity=`0.5`},t.onclick=function(){if(!e)return;let t;try{t=e()}catch(e){s(e);return}t&&typeof t.then==`function`&&t.then(void 0,s)}}function s(e){let o=e instanceof Error?e.message:String(e);/forceWebGL/.test(o)&&(a&&clearTimeout(a),t.textContent=`需降级到 WebGL2`,t.style.left=`calc(50% - 75px)`,t.style.width=`150px`,a=setTimeout(function(){a=void 0,t.textContent=n,t.style.left=r,t.style.width=i},3e3))}function c(){t.style.display=``,t.style.cursor=`auto`,t.style.left=`calc(50% - 75px)`,t.style.width=`150px`,t.onmouseenter=null,t.onmouseleave=null,t.onclick=null}function l(){c(),t.textContent=`VR NOT SUPPORTED`}function u(e){e.style.position=`absolute`,e.style.bottom=`20px`,e.style.padding=`12px 6px`,e.style.border=`1px solid #fff`,e.style.borderRadius=`4px`,e.style.background=`rgba(0,0,0,0.1)`,e.style.color=`#fff`,e.style.font=`normal 13px sans-serif`,e.style.textAlign=`center`,e.style.opacity=`0.5`,e.style.outline=`none`,e.style.zIndex=`999`}if(`xr`in navigator)return t.id=`VRButton`,t.style.display=`none`,u(t),navigator.xr.isSessionSupported(`immersive-vr`).then(function(e){e?o():l()}),t;{let e=document.createElement(`a`);return window.isSecureContext===!1?(e.href=document.location.href.replace(/^http:/,`https:`),e.innerHTML=`WEBXR NEEDS HTTPS`):(e.href=`https://immersiveweb.dev/`,e.innerHTML=`WEBXR NOT AVAILABLE`),e.style.left=`calc(50% - 90px)`,e.style.width=`180px`,e.style.textDecoration=`none`,u(e),e}}};e.AdaptiveLuminancePass=a8,e.AnimationFrameLoop=aJ,e.BoundingMesh=i3,e.Camera=dW,e.EffectComposer=x6,e.EyeDomeLightingPass=s8,e.Fetcher=mq,e.Five=$9,e.FivePass=C6,e.FiveRenderer=e5,e.FlowingFireworks3DPass=_8,e.FlowingLight2DPass=d8,e.FlowingLight3DPass=l8,e.FullScreenQuad=S6,e.GSPLAT_PIPELINE_AUTO=Wee,e.GSPLAT_PIPELINE_RASTER_CPU_SORT=Gee,e.GSPLAT_PIPELINE_RASTER_GPU_SORT=Kee,e.GaussianBlurPass=c8,e.Histogram=U6,e.InternalWebGPURenderer=b5,e.Model=Y4,e.ModelScene=o3,e.Motion=qQ,e.NetworkSubscribe=lq,e.PBMCustomNode=iV,e.PBMGSObject=GB,e.PBMGaussianSplattingObject=GB,e.PBMGaussianSplattingNodeMaterial=mH,e.PBMGaussianSplattingRenderMesh=fU,e.PBMGroup=IB,e.PBMMesh=VB,e.PBMMeshBasicMaterial=pU,e.PBMMeshBasicNodeMaterial=qK,e.PBMMeshPanoOnlyMaterial=mU,e.PBMMeshPanoOnlyNodeMaterial=XK,e.PBMMeshPhongMaterial=hU,e.PBMMeshPhongNodeMaterial=JK,e.PBMMeshPhysicalMaterial=gU,e.PBMMeshPhysicalNodeMaterial=YK,e.PBMPanoFilter=oV,e.PBMPointCloud=CV,e.PBMPointCloudMaterial=_V,e.PBMSkinnedMesh=HB,e.PBMUpdateable=rV,e.PBMVertexMarkFlag=nV,e.PROXY_CONTROLLER_EVENT_NAMES=G9,e.PanoCircleMesh=N5,e.PanoCircleMeshCustom=Mne,e.PanoCircleMeshSolid=z5,e.Parameter=h4,e.Scene=E5,e.Subscribe=QB,e.TextureLoader=_J,e.Tile=nQ,e.Tile3D=O4,e.Tile3DModel=O4,e.TileCache=c$,e.TileNode=e$,e.TileRequestScheduler=a$,e.Tileset=m$,e.Trajectory=t$,e.TrajectoryNode=n$,e.Work=h6,e.WorkResolvedObserver=v6,e.XRButton=zie,e.controllersDefaultInitArgs=Eie,e.coordinatesToVector=ZU,e.createDebugBoundingMesh=Kte,e.createWorks=y6,e.customNodesCacheKey=aV,e.defaultImageURLTransform=Jq,e.draco=TX,e.getViewportScale=K9,e.headingToLongitude=eW,e.imageSupport=jq,e.isBoundingVolume=XZ,e.isPanoId=j3,e.loadAt3d=SY,e.loadDome=DY,e.loadDomez=PY,e.loadGltf=kZ,e.loadPbm=eY,e.loadPly=RY,e.longitudeToHeading=$U,e.makeBoundingVolume=ZZ,e.panoEqual=A3,e.panoParse=k3,e.panoStringify=O3,e.parseWork=g6,e.registerPBMMaterials=ZK,e.vectorToCoordinates=QU,e.workToJson=d3});