@realsee/dnalogel 2.0.5--alpha.1 → 2.0.5-alpha.2

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 (95) hide show
  1. package/dist/index.cjs.js +2 -2
  2. package/dist/index.es.js +2 -2
  3. package/dist/index.js +2 -2
  4. package/dist/index.umd.js +2 -2
  5. package/docs/classes/CruisePluginController.html +14 -14
  6. package/docs/classes/Magnifier.html +4 -4
  7. package/docs/classes/ModelRoomLabelController.html +4 -4
  8. package/docs/classes/PaintBrush.html +3 -3
  9. package/docs/enums/CameraMovementEffect.html +2 -2
  10. package/docs/enums/DIRECTION.html +1 -1
  11. package/docs/enums/DISPLAY_STRATEGY_TYPE.html +1 -1
  12. package/docs/enums/FLOOR_PLAN_ATTACHED_TO.html +1 -1
  13. package/docs/enums/ITEM_LABEL_PLUGIN_DISPLAY_STRATEGY_TYPE.html +1 -1
  14. package/docs/enums/PaintBrushTypeEnum.html +1 -1
  15. package/docs/enums/Rotation.html +2 -2
  16. package/docs/index.html +1 -1
  17. package/docs/interfaces/CSS3DRenderPluginEventMap.html +2 -2
  18. package/docs/interfaces/CSS3DRenderPluginState.html +2 -2
  19. package/docs/interfaces/CameraMovementPluginExportType.html +2 -2
  20. package/docs/interfaces/FloorplanBounding.html +4 -4
  21. package/docs/interfaces/FloorplanData.html +2 -2
  22. package/docs/interfaces/FloorplanEntrance.html +7 -7
  23. package/docs/interfaces/FloorplanExtraObject.html +3 -3
  24. package/docs/interfaces/FloorplanExtraObject3D.html +2 -2
  25. package/docs/interfaces/FloorplanFloorData.html +2 -2
  26. package/docs/interfaces/FloorplanImagePosition.html +2 -2
  27. package/docs/interfaces/FloorplanObserver.html +2 -2
  28. package/docs/interfaces/FloorplanOutlineItem.html +2 -2
  29. package/docs/interfaces/FloorplanPosition.html +2 -2
  30. package/docs/interfaces/FloorplanRoomItem.html +6 -6
  31. package/docs/interfaces/FloorplanRoomLabelItem.html +3 -3
  32. package/docs/interfaces/FloorplanServerBounding.html +4 -4
  33. package/docs/interfaces/FloorplanServerComputedData.html +1 -1
  34. package/docs/interfaces/FloorplanServerData.html +2 -2
  35. package/docs/interfaces/FloorplanServerDoorItem.html +1 -1
  36. package/docs/interfaces/FloorplanServerDoorPosition.html +1 -1
  37. package/docs/interfaces/FloorplanServerEntrance.html +7 -7
  38. package/docs/interfaces/FloorplanServerFloorData.html +2 -2
  39. package/docs/interfaces/FloorplanServerImagePosition.html +2 -2
  40. package/docs/interfaces/FloorplanServerObserver.html +2 -2
  41. package/docs/interfaces/FloorplanServerOutlineItem.html +2 -2
  42. package/docs/interfaces/FloorplanServerPosition.html +2 -2
  43. package/docs/interfaces/FloorplanServerRoomItem.html +7 -7
  44. package/docs/interfaces/FloorplanServerRoomLabelItem.html +3 -3
  45. package/docs/interfaces/ItemLabelPluginData.html +1 -1
  46. package/docs/interfaces/ItemLabelPluginExportReturnsType.html +1 -1
  47. package/docs/interfaces/ItemLabelPluginParametersType.html +1 -1
  48. package/docs/interfaces/LineJson.html +1 -1
  49. package/docs/interfaces/ModelChassisCompassPluginData.html +1 -1
  50. package/docs/interfaces/ModelChassisCompassPluginExportType.html +1 -1
  51. package/docs/interfaces/ModelChassisCompassPluginParameterType.html +1 -1
  52. package/docs/interfaces/ModelEntryDoorGuidePluginData.html +1 -1
  53. package/docs/interfaces/ModelEntryDoorGuidePluginExportType.html +1 -1
  54. package/docs/interfaces/ModelItemLabelPluginData.html +1 -1
  55. package/docs/interfaces/ModelItemLabelPluginExportReturnsType.html +1 -1
  56. package/docs/interfaces/ModelItemLabelPluginParametersType.html +1 -1
  57. package/docs/interfaces/ModelRoomLabelPluginData.html +1 -1
  58. package/docs/interfaces/ModelTVVideoPluginData.html +1 -1
  59. package/docs/interfaces/ModelTVVideoPluginExportType.html +1 -1
  60. package/docs/interfaces/ModelTVVideoPluginParameterType.html +1 -1
  61. package/docs/interfaces/ModelViewPluginExportType.html +1 -1
  62. package/docs/interfaces/OpenParameter.html +2 -2
  63. package/docs/interfaces/PaintBrushAction.html +7 -7
  64. package/docs/interfaces/PaintBrushConfigs.html +1 -1
  65. package/docs/interfaces/PaintBrushState.html +1 -1
  66. package/docs/interfaces/PanoCursorRaycasterPluginExportType.html +6 -6
  67. package/docs/interfaces/PanoCursorRaycasterPluginParameterType.html +1 -1
  68. package/docs/interfaces/PanoMeasureParameterType.html +2 -2
  69. package/docs/interfaces/PanoRulerPluginExportType.html +1 -1
  70. package/docs/interfaces/PanoRulerPluginOptions.html +1 -1
  71. package/docs/interfaces/PanoRulerPluginParameterType.html +1 -1
  72. package/docs/interfaces/PanoRulerProPluginExportType.html +1 -1
  73. package/docs/interfaces/PanoRulerProPluginOptions.html +1 -1
  74. package/docs/interfaces/PanoRulerProPluginParameterType.html +1 -1
  75. package/docs/interfaces/PanoRulerProPluginState.html +1 -1
  76. package/docs/interfaces/PanoSpatialTagPluginContentEvent.html +1 -1
  77. package/docs/interfaces/PanoSpatialTagPluginContentReplacement.html +1 -1
  78. package/docs/interfaces/PanoSpatialTagPluginData.html +1 -1
  79. package/docs/interfaces/PanoSpatialTagPluginDataElement.html +1 -1
  80. package/docs/interfaces/PanoSpatialTagPluginExportType.html +1 -1
  81. package/docs/interfaces/PanoSpatialTagPluginOriginElement.html +1 -1
  82. package/docs/interfaces/PanoSpatialTagPluginParameterType.html +1 -1
  83. package/docs/interfaces/PanoSpatialTagPluginPointElement.html +1 -1
  84. package/docs/interfaces/PanoSpatialTagPluginTagElement.html +1 -1
  85. package/docs/interfaces/Point.html +1 -1
  86. package/docs/interfaces/PointJson.html +1 -1
  87. package/docs/interfaces/Room.html +1 -1
  88. package/docs/interfaces/RoomInfo.html +1 -1
  89. package/docs/interfaces/RoomLabel.html +7 -7
  90. package/docs/interfaces/RoomRules.html +1 -1
  91. package/docs/interfaces/Rooms.html +1 -1
  92. package/docs/modules.html +17 -17
  93. package/libs/CruisePlugin/Controller.js +1 -1
  94. package/libs/ModelTVVideoPlugin/Plugin.js +51 -51
  95. package/package.json +1 -1
package/dist/index.cjs.js CHANGED
@@ -526,7 +526,7 @@ void main() {
526
526
  width: 100%;
527
527
  height: 100%;
528
528
  z-index: 5;
529
- `,e.container.style.pointerEvents="none";const n=v=>(e.wrapper=v,v.appendChild(e.container),l(),!0),o=v=>{e.itemLabels=ud(v),l()},s=()=>(e.enabled||(e.enabled=!0,l()),!0),r=()=>(e.enabled&&(e.enabled=!1,l()),!0),a=()=>{h(),e.container.remove()},l=()=>{var v;if(!!e.wrapper){if(!e.enabled||!e.fiveModeEnabled){(v=e.app)==null||v.$destroy(),e.app=void 0;return}e.app?e.app.$set({five:i,itemLabels:e.itemLabels}):e.app=new hd({target:e.container,props:{five:i,modelOcclusionEnable:e.modelOcclusionEnable,itemLabels:e.itemLabels,wrapper:e.wrapper,hooks:e.hooks,displayStrategyType:e.displayStrategyType}})}},c=()=>{i.on("modeChange",f),i.once("dispose",a)},h=()=>{i.off("modeChange",f)},f=v=>{if(!!e.enabled){if(v!==ye.Five.Mode.Floorplan){e.fiveModeEnabled=!1,l();return}i.once("initAnimationEnded",()=>{e.fiveModeEnabled=i.currentMode===ye.Five.Mode.Floorplan,l()})}};return c(),{appendTo:n,load:o,enable:s,disable:r,dispose:a,hooks:e.hooks}},fd={name:"ModelItemLabelPlugin",version:0};var jt=(i=>(i.TOP_LEFT="topLeft",i.TOP_RIGHT="topRight",i.BOTTOM_LEFT="bottomLeft",i.BOTTOM_RIGHT="bottomRight",i))(jt||{});function md(i){if(i.length===0)return[];if(Array.isArray(i[0]))return i;let t=[];return i.forEach(e=>{const n=[e[jt.TOP_LEFT],e[jt.BOTTOM_LEFT],e[jt.BOTTOM_RIGHT],e[jt.TOP_RIGHT]];t.push(n)}),t}const pd=(i,{videoElement:t})=>{const e={videoMeshes:[],videoTextureEnabled:!1,videoSource:"",rectPoints:[],enabled:!1,videoElement:t},n=Xn(i),o=new Map,s=g=>{e.videoTexture&&(e.videoTexture.image.muted=g)},r=()=>e.videoTexture?e.videoTexture.image.muted:!0,a=()=>{if(e.enabled||!e.videoTexture)return;e.enabled=!0,e.videoMeshes=c(),e.videoMeshes.forEach(w=>i.scene.add(w));const g=()=>{if(!e.videoTexture)return;const w=()=>{var E;!e.videoTexture||((E=e.videoTexture)==null||E.image.removeEventListener("timeupdate",w),e.videoTextureEnabled=!0,e.videoMeshes.forEach(k=>{k.material.map!==e.videoTexture&&(k.material.map=e.videoTexture)}),i.needsRender=!0)};e.videoTexture.image.addEventListener("timeupdate",w),e.videoTexture&&e.videoMeshes.length&&(e.videoTexture.image.play(),e.videoTexture.image.onplay=()=>{n.hide()},e.videoTexture.image.onpause=()=>{n.show()},e.videoTexture.image.onclick=()=>{e.videoTexture.image.muted=!1,e.videoTexture.image.play()})};if(i.model.loaded)g();else return i.once("modelLoaded",()=>g())},l=()=>{!e.enabled||(e.enabled=!1,e.videoMeshes.forEach(g=>{g.geometry.dispose(),g.material.dispose(),i.scene.remove(g),e.videoTexture&&e.videoTexture.image.pause()}),e.videoMeshes=[],i.needsRender=!0)},c=()=>e.rectPoints.map((g,w)=>{const E=new O.BufferGeometry,k=128,z=[];z.push(...g[0].toArray());for(let T=1;T<k;T++)z.push(g[0].x+(g[1].x-g[0].x)*T/k,g[0].y+(g[1].y-g[0].y)*T/k,g[0].z+(g[1].z-g[0].z)*T/k);z.push(...g[1].toArray()),z.push(...g[2].toArray());for(let T=1;T<k;T++)z.push(g[2].x+(g[3].x-g[2].x)*T/k,g[2].y+(g[3].y-g[2].y)*T/k,g[2].z+(g[3].z-g[2].z)*T/k);z.push(...g[3].toArray());const I=[];I.push(0,1);for(let T=1;T<k;T++)I.push(0,1-T/k);I.push(0,0),I.push(1,0);for(let T=1;T<k;T++)I.push(1,T/k);I.push(1,1);const D=[];for(let T=0;T<k;T++)D.push(T,T+1,k*2-T,T,k*2-T,k*2+1-T);E.setAttribute("position",new O.BufferAttribute(new Float32Array(z),3)),E.setAttribute("uv",new O.BufferAttribute(new Float32Array(I),2)),E.setIndex(new O.BufferAttribute(new Uint32Array(D),1));const L=new O.AxesHelper(10);i.scene.add(L);const S=new O.MeshBasicMaterial({map:e.videoTextureEnabled?e.videoTexture:e.imageTexture,side:O.DoubleSide}),N=new O.Mesh(E,S);N.renderOrder=1,N.name=`ModelTVVideoPlugin-${w}-${performance.now()}`;const H=[g[1],g[2],g[3],g[0]],_=n.create3DDomContainer(H);if(_!=null&&_.container){const T=document.createElement("div");T.classList.add("play-icon"),T.style.width="100%",T.style.height="100%",T.style.display="flex",T.style.justifyContent="center",T.style.alignItems="center",T.style.pointerEvents="none",_.container.appendChild(T);const J=document.createElement("img");J.src="//vrlab-static.ljcdn.com/release/web/play.2ada5b6f.png",J.style.width="200px",J.style.pointerEvents="auto",J.onclick=()=>{e.videoTexture.image.muted=!1,e.videoTexture.image.play()},T.appendChild(J),o.set(N,_)}return N}),h=g=>{const w=new O.TextureLoader().load(g);return w.minFilter=O.LinearFilter,w.magFilter=O.LinearFilter,w.format=O.RGBFormat,w},f=(g,w)=>new Promise((E,k)=>{const z=new XMLHttpRequest;z.onreadystatechange=()=>{if(z.readyState==4)if(z.status==200){const I=window.URL||window.webkitURL;w=w||document.createElement("video"),w.crossOrigin="anonymous",w.muted=!0,w.loop=!0,w.playsInline=!0,w.src=I.createObjectURL(z.response);const D=new O.VideoTexture(w);D.minFilter=O.LinearFilter,D.magFilter=O.LinearFilter,D.format=O.RGBFormat,E(Object.assign(D,{videoSource:g}))}else k(new Error("Video download Error: "+z.status))},z.onerror=I=>k(I),z.open("GET",g),z.responseType="blob",z.send()}),u=async(g,w)=>{const{video_src:E,video_poster_src:k,points:z}=g;e.videoSource=E,e.rectPoints=md(z).map(I=>I.map(({x:D,y:L,z:S})=>new O.Vector3(D,L,S))),e.imageTexture=h(k),w&&(e.videoElement=w),e.videoTexture=await f(e.videoSource,e.videoElement),e.enabled=!!g.enable,e.enabled&&a()},m=g=>{if(!e.enabled)return;const w=e.videoMeshes;if(!(!w||g.intersectObjects(w).length===0))return e.videoTexture&&(e.videoTexture.image.paused||e.videoTexture.image.pause()),!1},v=g=>{g==="Floorplan"?n.hide():n.show()},b=()=>{if(!e.enabled)return;const g=i.camera.position;if(o.forEach((w,E)=>{const k=w.css3DObject.position.clone(),z=k.clone().sub(g).normalize(),I=new O.Raycaster(g,z),D=i.model.intersectRaycaster(I)[0],L=k.distanceTo(g),S=.01;D&&D.distance+S<L?w.hide():w.show()}),!r()){const w=e.rectPoints.find(E=>{const k=E[0].clone().add(E[1]).add(E[2]).add(E[3]).divideScalar(4);return E.map(z=>z.clone().add(k).divideScalar(2)).filter(z=>{const I=z.distanceTo(g),D=new O.Raycaster(g,z.clone().sub(g).normalize()),L=i.model.intersectRaycaster(D)[0],S=.01;return!(L&&L.distance+S<I)}).length>=2});(!w||w.length===0)&&s(!0)}},A=()=>{l(),e.videoTexture=void 0,i.off("modeChange",v),i.off("wantsTapGesture",m),i.off("panoArrived",b),i.off("renderFrame",()=>{e.videoMeshes.forEach(g=>{g&&(g.needsRender=!0)})})};return i.on("modeChange",v),i.on("wantsTapGesture",m),i.on("panoArrived",b),i.on("renderFrame",()=>{e.videoMeshes.forEach(g=>{g&&(g.needsRender=!0)})}),{enable:a,disable:l,load:u,dispose:A,state:e,css3DRenderPlugin:n}};function gd(i){ge(i,"svelte-1q3t254",`.item-label-item.svelte-1q3t254.svelte-1q3t254{position:absolute;z-index:0;transform:none;cursor:pointer;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;animation:svelte-1q3t254-fadeIn .3s ease-in}.item-label-item.fold.svelte-1q3t254>.item-label-item__text-wrap.svelte-1q3t254{visibility:hidden}.item-label-item.fold.svelte-1q3t254>.item-label-item__bar.anchor.svelte-1q3t254{visibility:hidden}.item-label-item.fold.svelte-1q3t254>.item-label-item__bar.anchor.svelte-1q3t254:after{visibility:visible}.item-label-item__text-wrap.svelte-1q3t254.svelte-1q3t254{height:-moz-fit-content;height:fit-content;padding:0.625rem 1.04167rem 0.625rem 0.625rem;position:absolute;width:-moz-max-content;width:max-content;max-width:24.63542rem;min-height:4.79167rem;background-image:linear-gradient(269deg, rgba(0, 0, 0, 0.50) 0%, rgba(0, 0, 0, 0.60) 49%, rgba(31, 38, 46, 0.70) 100%);border:1.5px solid rgba(255, 255, 255, .65);border-radius:0.15625rem;color:white;transform:translate(-50%, 0);display:flex;justify-content:flex-start;align-items:center;box-sizing:border-box;overflow:hidden;pointer-events:all}.item-label-item__custom.svelte-1q3t254.svelte-1q3t254{padding:0;max-width:unset;min-height:unset;background-image:unset;border:0;border-radius:0}.icon-wrap.svelte-1q3t254.svelte-1q3t254{width:3.54167rem;height:100%;display:flex;justify-content:center;align-content:center}.icon.svelte-1q3t254.svelte-1q3t254{width:3.54167rem;height:3.54167rem;background-repeat:no-repeat;background-size:contain;background-position:center}.item-label-text.svelte-1q3t254.svelte-1q3t254{margin-left:0.625rem;padding-left:0.625rem;min-height:3.54167rem;height:auto;display:flex;flex-flow:column;justify-content:space-around;align-content:flex-start;border-left:solid rgba(255, 255, 255, .2) 1px;border-top:solid rgba(255, 255, 255, .2) 0;border-right:solid rgba(255, 255, 255, .2) 0;border-bottom:solid rgba(255, 255, 255, .2) 0;pointer-events:auto}.item-model.svelte-1q3t254.svelte-1q3t254{white-space:nowrap;font-size:1.14583rem;font-weight:bold;line-height:1.5625rem}.item-name.svelte-1q3t254.svelte-1q3t254{height:auto;word-wrap:break-word;word-break:break-all;font-size:1.04167rem;line-height:1.45833rem}.item-label-item__bar.svelte-1q3t254.svelte-1q3t254{position:absolute;bottom:0;width:0.15625rem;background-image:linear-gradient(to bottom, white, rgba(255, 255, 255, 0));box-shadow:0 2px 0.41667rem 0 rgba(0, 0, 0, 0.20);pointer-events:none}.item-label-item__bar.anchor.svelte-1q3t254.svelte-1q3t254:after{content:'';position:absolute;bottom:0;width:1.25rem;height:1.25rem;background-image:url("//vrlab-public.ljcdn.com/common/file/web/67e7a198-28c9-47dc-879b-507bd3ae600c.png ");background-position:center;background-size:contain;transform:translate(-0.54688rem, 50%)}@keyframes svelte-1q3t254-fadeIn{from{opacity:0
529
+ `,e.container.style.pointerEvents="none";const n=v=>(e.wrapper=v,v.appendChild(e.container),l(),!0),o=v=>{e.itemLabels=ud(v),l()},s=()=>(e.enabled||(e.enabled=!0,l()),!0),r=()=>(e.enabled&&(e.enabled=!1,l()),!0),a=()=>{h(),e.container.remove()},l=()=>{var v;if(!!e.wrapper){if(!e.enabled||!e.fiveModeEnabled){(v=e.app)==null||v.$destroy(),e.app=void 0;return}e.app?e.app.$set({five:i,itemLabels:e.itemLabels}):e.app=new hd({target:e.container,props:{five:i,modelOcclusionEnable:e.modelOcclusionEnable,itemLabels:e.itemLabels,wrapper:e.wrapper,hooks:e.hooks,displayStrategyType:e.displayStrategyType}})}},c=()=>{i.on("modeChange",f),i.once("dispose",a)},h=()=>{i.off("modeChange",f)},f=v=>{if(!!e.enabled){if(v!==ye.Five.Mode.Floorplan){e.fiveModeEnabled=!1,l();return}i.once("initAnimationEnded",()=>{e.fiveModeEnabled=i.currentMode===ye.Five.Mode.Floorplan,l()})}};return c(),{appendTo:n,load:o,enable:s,disable:r,dispose:a,hooks:e.hooks}},fd={name:"ModelItemLabelPlugin",version:0};var jt=(i=>(i.TOP_LEFT="topLeft",i.TOP_RIGHT="topRight",i.BOTTOM_LEFT="bottomLeft",i.BOTTOM_RIGHT="bottomRight",i))(jt||{});function md(i){if(i.length===0)return[];if(Array.isArray(i[0]))return i;let t=[];return i.forEach(e=>{const n=[e[jt.TOP_LEFT],e[jt.BOTTOM_LEFT],e[jt.BOTTOM_RIGHT],e[jt.TOP_RIGHT]];t.push(n)}),t}const pd=(i,{videoElement:t})=>{const e={videoMeshes:[],videoTextureEnabled:!1,videoSource:"",rectPoints:[],enabled:!1,videoElement:t},n=Xn(i),o=new Map,s=g=>{e.videoTexture&&(e.videoTexture.image.muted=g)},r=()=>e.videoTexture?e.videoTexture.image.muted:!0,a=()=>{if(e.enabled||!e.videoTexture)return;e.enabled=!0,e.videoMeshes=c(),e.videoMeshes.forEach(w=>i.scene.add(w));const g=()=>{if(!e.videoTexture)return;const w=()=>{var E;!e.videoTexture||((E=e.videoTexture)==null||E.image.removeEventListener("timeupdate",w),e.videoTextureEnabled=!0,e.videoMeshes.forEach(k=>{k.material.map!==e.videoTexture&&(k.material.map=e.videoTexture)}),i.needsRender=!0)};e.videoTexture.image.addEventListener("timeupdate",w),e.videoTexture&&e.videoMeshes.length&&(e.videoTexture.image.play(),e.videoTexture.image.onplay=()=>{n.hide()},e.videoTexture.image.onpause=()=>{n.show()},e.videoTexture.image.onclick=()=>{e.videoTexture.image.muted=!1,e.videoTexture.image.play()})};if(i.model.loaded)g();else return i.once("modelLoaded",()=>g())},l=()=>{!e.enabled||(e.enabled=!1,e.videoMeshes.forEach(g=>{g.geometry.dispose(),g.material.dispose(),i.scene.remove(g),e.videoTexture&&e.videoTexture.image.pause()}),e.videoMeshes=[],i.needsRender=!0)},c=()=>e.rectPoints.map((g,w)=>{const E=new O.BufferGeometry,k=128,z=[];z.push(...g[0].toArray());for(let T=1;T<k;T++)z.push(g[0].x+(g[1].x-g[0].x)*T/k,g[0].y+(g[1].y-g[0].y)*T/k,g[0].z+(g[1].z-g[0].z)*T/k);z.push(...g[1].toArray()),z.push(...g[2].toArray());for(let T=1;T<k;T++)z.push(g[2].x+(g[3].x-g[2].x)*T/k,g[2].y+(g[3].y-g[2].y)*T/k,g[2].z+(g[3].z-g[2].z)*T/k);z.push(...g[3].toArray());const I=[];I.push(0,1);for(let T=1;T<k;T++)I.push(0,1-T/k);I.push(0,0),I.push(1,0);for(let T=1;T<k;T++)I.push(1,T/k);I.push(1,1);const D=[];for(let T=0;T<k;T++)D.push(T,T+1,k*2-T,T,k*2-T,k*2+1-T);E.setAttribute("position",new O.BufferAttribute(new Float32Array(z),3)),E.setAttribute("uv",new O.BufferAttribute(new Float32Array(I),2)),E.setIndex(new O.BufferAttribute(new Uint32Array(D),1));const L=new O.AxesHelper(10);i.scene.add(L);const S=new O.MeshBasicMaterial({map:e.videoTextureEnabled?e.videoTexture:e.imageTexture,side:O.DoubleSide}),N=new O.Mesh(E,S);N.renderOrder=1,N.name=`ModelTVVideoPlugin-${w}-${performance.now()}`;const H=[g[1],g[2],g[3],g[0]],_=n.create3DDomContainer(H);if(_!=null&&_.container){const T=document.createElement("div");T.classList.add("play-icon"),T.style.width="100%",T.style.height="100%",T.style.display="flex",T.style.justifyContent="center",T.style.alignItems="center",T.style.pointerEvents="none",_.container.appendChild(T);const J=document.createElement("img");J.src="//vrlab-static.ljcdn.com/release/web/play.2ada5b6f.png",J.style.width="200px",J.style.pointerEvents="auto",J.onclick=()=>{e.videoTexture.image.muted=!1,e.videoTexture.image.play()},T.appendChild(J),o.set(N,_)}return N}),h=g=>{const w=new O.TextureLoader().load(g);return w.minFilter=O.LinearFilter,w.magFilter=O.LinearFilter,w.format=O.RGBFormat,w},f=(g,w)=>new Promise((E,k)=>{const z=new XMLHttpRequest;z.onreadystatechange=()=>{if(z.readyState==4)if(z.status==200){const I=window.URL||window.webkitURL;w=w||document.createElement("video"),w.crossOrigin="anonymous",w.muted=!0,w.loop=!0,w.playsInline=!0,w.src=I.createObjectURL(z.response);const D=new O.VideoTexture(w);D.minFilter=O.LinearFilter,D.magFilter=O.LinearFilter,D.format=O.RGBFormat,E(Object.assign(D,{videoSource:g}))}else k(new Error("Video download Error: "+z.status))},z.onerror=I=>k(I),z.open("GET",g),z.responseType="blob",z.send()}),u=async(g,w)=>{const{video_src:E,video_poster_src:k,points:z}=g;e.videoSource=E,e.rectPoints=md(z).map(I=>I.map(({x:D,y:L,z:S})=>new O.Vector3(D,L,S))),e.imageTexture=h(k),w&&(e.videoElement=w),e.videoTexture=await f(e.videoSource,e.videoElement),e.enabled=!!g.enable,e.enabled&&a()},m=g=>{if(!e.enabled)return;const w=e.videoMeshes;if(!(!w||g.intersectObjects(w).length===0))return e.videoTexture&&(e.videoTexture.image.paused||e.videoTexture.image.pause()),!1},v=g=>{g==="Floorplan"||e.videoTexture.image.played?n.hide():n.show()},b=()=>{if(!e.enabled)return;const g=i.camera.position;if(o.forEach((w,E)=>{const k=w.css3DObject.position.clone(),z=k.clone().sub(g).normalize(),I=new O.Raycaster(g,z),D=i.model.intersectRaycaster(I)[0],L=k.distanceTo(g),S=.01;D&&D.distance+S<L?w.hide():w.show()}),!r()){const w=e.rectPoints.find(E=>{const k=E[0].clone().add(E[1]).add(E[2]).add(E[3]).divideScalar(4);return E.map(z=>z.clone().add(k).divideScalar(2)).filter(z=>{const I=z.distanceTo(g),D=new O.Raycaster(g,z.clone().sub(g).normalize()),L=i.model.intersectRaycaster(D)[0],S=.01;return!(L&&L.distance+S<I)}).length>=2});(!w||w.length===0)&&s(!0)}},A=()=>{l(),e.videoTexture=void 0,i.off("modeChange",v),i.off("wantsTapGesture",m),i.off("panoArrived",b),i.off("renderFrame",()=>{e.videoMeshes.forEach(g=>{g&&(g.needsRender=!0)})})};return i.on("modeChange",v),i.on("wantsTapGesture",m),i.on("panoArrived",b),i.on("renderFrame",()=>{e.videoMeshes.forEach(g=>{g&&(g.needsRender=!0)})}),{enable:a,disable:l,load:u,dispose:A,state:e,css3DRenderPlugin:n}};function gd(i){ge(i,"svelte-1q3t254",`.item-label-item.svelte-1q3t254.svelte-1q3t254{position:absolute;z-index:0;transform:none;cursor:pointer;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;animation:svelte-1q3t254-fadeIn .3s ease-in}.item-label-item.fold.svelte-1q3t254>.item-label-item__text-wrap.svelte-1q3t254{visibility:hidden}.item-label-item.fold.svelte-1q3t254>.item-label-item__bar.anchor.svelte-1q3t254{visibility:hidden}.item-label-item.fold.svelte-1q3t254>.item-label-item__bar.anchor.svelte-1q3t254:after{visibility:visible}.item-label-item__text-wrap.svelte-1q3t254.svelte-1q3t254{height:-moz-fit-content;height:fit-content;padding:0.625rem 1.04167rem 0.625rem 0.625rem;position:absolute;width:-moz-max-content;width:max-content;max-width:24.63542rem;min-height:4.79167rem;background-image:linear-gradient(269deg, rgba(0, 0, 0, 0.50) 0%, rgba(0, 0, 0, 0.60) 49%, rgba(31, 38, 46, 0.70) 100%);border:1.5px solid rgba(255, 255, 255, .65);border-radius:0.15625rem;color:white;transform:translate(-50%, 0);display:flex;justify-content:flex-start;align-items:center;box-sizing:border-box;overflow:hidden;pointer-events:all}.item-label-item__custom.svelte-1q3t254.svelte-1q3t254{padding:0;max-width:unset;min-height:unset;background-image:unset;border:0;border-radius:0}.icon-wrap.svelte-1q3t254.svelte-1q3t254{width:3.54167rem;height:100%;display:flex;justify-content:center;align-content:center}.icon.svelte-1q3t254.svelte-1q3t254{width:3.54167rem;height:3.54167rem;background-repeat:no-repeat;background-size:contain;background-position:center}.item-label-text.svelte-1q3t254.svelte-1q3t254{margin-left:0.625rem;padding-left:0.625rem;min-height:3.54167rem;height:auto;display:flex;flex-flow:column;justify-content:space-around;align-content:flex-start;border-left:solid rgba(255, 255, 255, .2) 1px;border-top:solid rgba(255, 255, 255, .2) 0;border-right:solid rgba(255, 255, 255, .2) 0;border-bottom:solid rgba(255, 255, 255, .2) 0;pointer-events:auto}.item-model.svelte-1q3t254.svelte-1q3t254{white-space:nowrap;font-size:1.14583rem;font-weight:bold;line-height:1.5625rem}.item-name.svelte-1q3t254.svelte-1q3t254{height:auto;word-wrap:break-word;word-break:break-all;font-size:1.04167rem;line-height:1.45833rem}.item-label-item__bar.svelte-1q3t254.svelte-1q3t254{position:absolute;bottom:0;width:0.15625rem;background-image:linear-gradient(to bottom, white, rgba(255, 255, 255, 0));box-shadow:0 2px 0.41667rem 0 rgba(0, 0, 0, 0.20);pointer-events:none}.item-label-item__bar.anchor.svelte-1q3t254.svelte-1q3t254:after{content:'';position:absolute;bottom:0;width:1.25rem;height:1.25rem;background-image:url("//vrlab-public.ljcdn.com/common/file/web/67e7a198-28c9-47dc-879b-507bd3ae600c.png ");background-position:center;background-size:contain;transform:translate(-0.54688rem, 50%)}@keyframes svelte-1q3t254-fadeIn{from{opacity:0
530
530
  }to{opacity:1
531
531
  }}`)}function vd(i){let t,e,n,o=(i[0].code||i[0].id)+"",s,r,a,l=i[0].name+"",c,h=i[0].icon&&ds(i);return{c(){h&&h.c(),t=fe(),e=G("div"),n=G("span"),s=Ue(o),r=fe(),a=G("span"),c=Ue(l),x(n,"class","item-model svelte-1q3t254"),x(a,"class","item-name svelte-1q3t254"),x(e,"class","item-label-text svelte-1q3t254")},m(f,u){h&&h.m(f,u),Y(f,t,u),Y(f,e,u),X(e,n),X(n,s),X(e,r),X(e,a),X(a,c)},p(f,u){f[0].icon?h?h.p(f,u):(h=ds(f),h.c(),h.m(t.parentNode,t)):h&&(h.d(1),h=null),u&1&&o!==(o=(f[0].code||f[0].id)+"")&&dt(s,o),u&1&&l!==(l=f[0].name+"")&&dt(c,l)},d(f){h&&h.d(f),f&&Q(t),f&&Q(e)}}}function bd(i){let t;return{c(){t=G("div")},m(e,n){Y(e,t,n),i[6](t)},p:ne,d(e){e&&Q(t),i[6](null)}}}function ds(i){let t,e,n,o,s;return{c(){t=G("div"),e=G("div"),x(e,"class","icon svelte-1q3t254"),x(e,"style",n=`background-image: url(${i[0].icon})`),x(t,"class","icon-wrap svelte-1q3t254")},m(r,a){Y(r,t,a),X(t,e),o||(s=qe(t,"click",i[7]),o=!0)},p(r,a){a&1&&n!==(n=`background-image: url(${r[0].icon})`)&&x(e,"style",n)},d(r){r&&Q(t),o=!1,s()}}}function Ad(i){let t,e,n,o,s,r,a,l,c,h;function f(v,b){return b&1&&(n=null),n==null&&(n=!!Boolean(typeof v[0].render=="function")),n?bd:vd}let u=f(i,-1),m=u(i);return{c(){t=G("div"),e=G("div"),m.c(),s=fe(),r=G("div"),x(e,"class",o=je(tt("item-label-item__text-wrap",{"item-label-item__custom":Boolean(typeof i[0].render=="function")}))+" svelte-1q3t254"),j(e,"bottom",`${i[0].strokeLength}px`),x(r,"class",a=je(tt("item-label-item__bar",{anchor:i[1]}))+" svelte-1q3t254"),j(r,"height",`${i[0].strokeLength}px`),x(t,"class",l=je(tt("item-label-item",{fold:i[0].isFold}))+" svelte-1q3t254"),j(t,"z-index",i[0].zIndex),j(t,"transform",i[0].transform)},m(v,b){Y(v,t,b),X(t,e),m.m(e,null),X(t,s),X(t,r),c||(h=qe(e,"click",i[4]),c=!0)},p(v,[b]){u===(u=f(v,b))&&m?m.p(v,b):(m.d(1),m=u(v),m&&(m.c(),m.m(e,null))),b&1&&o!==(o=je(tt("item-label-item__text-wrap",{"item-label-item__custom":Boolean(typeof v[0].render=="function")}))+" svelte-1q3t254")&&x(e,"class",o),b&1&&j(e,"bottom",`${v[0].strokeLength}px`),b&2&&a!==(a=je(tt("item-label-item__bar",{anchor:v[1]}))+" svelte-1q3t254")&&x(r,"class",a),b&1&&j(r,"height",`${v[0].strokeLength}px`),b&1&&l!==(l=je(tt("item-label-item",{fold:v[0].isFold}))+" svelte-1q3t254")&&x(t,"class",l),b&1&&j(t,"z-index",v[0].zIndex),b&1&&j(t,"transform",v[0].transform)},i:ne,o:ne,d(v){v&&Q(t),m.d(),c=!1,h()}}}function yd(i,t,e){let{itemLabel:n}=t,{hooks:o}=t,{anchorEnabled:s}=t,{onIconClick:r}=t;function a(){o.emit("onLabelClick",n)}let l;function c(f){Rt[f?"unshift":"push"](()=>{l=f,e(3,l)})}const h=f=>r(n);return i.$$set=f=>{"itemLabel"in f&&e(0,n=f.itemLabel),"hooks"in f&&e(5,o=f.hooks),"anchorEnabled"in f&&e(1,s=f.anchorEnabled),"onIconClick"in f&&e(2,r=f.onIconClick)},i.$$.update=()=>{if(i.$$.dirty&9&&typeof n.render=="function"&&l&&l.children.length===0){const f=n.render(n);f&&l.appendChild(f)}},[n,s,r,l,a,o,c,h]}class Pd extends de{constructor(t){super(),ue(this,t,yd,Ad,he,{itemLabel:0,hooks:5,anchorEnabled:1,onIconClick:2},gd)}}const{Raycaster:wd,Vector3:Ef}=O,fs=(i,t,e,n)=>{const o=t.clone().sub(e).normalize(),s=new wd;s.set(e,o);const[r]=i.model.intersectRaycaster(s);return r&&r.distance+.01<n};var It=(i=>(i.SMALL="small",i.MIDLLE="middle",i.LARGE="large",i.EXTRA_LARGE="x-large",i))(It||{});const Ed=(i,t)=>{switch(t){case It.SMALL:return Math.ceil(-27.78*i+85);case It.MIDLLE:return Math.ceil(-38.9*i+130);case It.LARGE:return Math.ceil(-44.44*i+140);case It.EXTRA_LARGE:return Math.ceil(-92.59*i+300)}},Id=i=>`translate(${i[0]}px, ${i[1]}px)`;function ms(i){return i.map(t=>({observerIndex:void 0,visible:!1,isFold:!1,...t}))}function xd(i){ge(i,"svelte-gk8s47",".item-labels-container.svelte-gk8s47{width:100%;height:100%;position:relative}")}function ps(i,t,e){const n=i.slice();return n[30]=t[e],n}function gs(i){let t,e;return t=new Pd({props:{itemLabel:i[30],hooks:i[0],anchorEnabled:i[2],onIconClick:i[6]}}),{c(){Pe(t.$$.fragment)},m(n,o){ve(t,n,o),e=!0},p(n,o){const s={};o[0]&2&&(s.itemLabel=n[30]),o[0]&1&&(s.hooks=n[0]),o[0]&4&&(s.anchorEnabled=n[2]),t.$set(s)},i(n){e||(F(t.$$.fragment,n),e=!0)},o(n){K(t.$$.fragment,n),e=!1},d(n){be(t,n)}}}function vs(i,t){let e,n,o,s=t[30].visible&&gs(t);return{key:i,first:null,c(){e=Ge(),s&&s.c(),n=Ge(),this.first=e},m(r,a){Y(r,e,a),s&&s.m(r,a),Y(r,n,a),o=!0},p(r,a){t=r,t[30].visible?s?(s.p(t,a),a[0]&2&&F(s,1)):(s=gs(t),s.c(),F(s,1),s.m(n.parentNode,n)):s&&(Ie(),K(s,1,1,()=>{s=null}),xe())},i(r){o||(F(s),o=!0)},o(r){K(s),o=!1},d(r){r&&Q(e),s&&s.d(r),r&&Q(n)}}}function Cd(i){let t,e=[],n=new Map,o,s,r=i[1];const a=l=>l[30].id;for(let l=0;l<r.length;l+=1){let c=ps(i,r,l),h=a(c);n.set(h,e[l]=vs(h,c))}return{c(){t=G("div");for(let l=0;l<e.length;l+=1)e[l].c();x(t,"class","item-labels-container svelte-gk8s47"),Ke(()=>i[12].call(t)),j(t,"opacity",i[5]?1:0)},m(l,c){Y(l,t,c);for(let h=0;h<e.length;h+=1)e[h].m(t,null);o=Ft(t,i[12].bind(t)),s=!0},p(l,c){c[0]&71&&(r=l[1],Ie(),e=At(e,c,a,1,l,r,n,t,Gt,vs,null,ps),xe()),c[0]&32&&j(t,"opacity",l[5]?1:0)},i(l){if(!s){for(let c=0;c<r.length;c+=1)F(e[c]);s=!0}},o(l){for(let c=0;c<e.length;c+=1)K(e[c]);s=!1},d(l){l&&Q(t);for(let c=0;c<e.length;c+=1)e[c].d();o()}}}let Ld=11;function kd(i,t,e){const{Raycaster:n,Vector3:o}=O;let{five:s}=t,{modelOcclusionEnable:r}=t,{itemLabels:a}=t,{hooks:l}=t,{displayStrategyType:c}=t,{maxVisibleDistance:h}=t,f=null,u=null,m=(s==null?void 0:s.currentMode)===ye.Five.Mode.Panorama,v,b,A=[],g=!0;const w=(B,$)=>{const U=B.camera.position.clone(),te=new o($.modelPosition[0],$.modelPosition[1],$.modelPosition[2]),W=te.distanceTo(U);return h!==void 0&&B.state.mode===ye.Five.Mode.Panorama&&W>h?!1:fs(B,te.clone().sub(U).normalize(),U,W)},E=B=>{const{camera:$,model:U}=s,{x:te,y:W,z:ee}=B.clone().project($),se=(te+1)/2,ie=(2-(W+1))/2,Ce=Math.abs(ee)<1&&[se,ie].every(Me=>Me<1&&Me>=0);return Boolean(Ce)},k=(B,$)=>{const U=new o($.modelPosition[0],$.modelPosition[1],$.modelPosition[2]),te=B.project2d(U),W=te==null?void 0:te.x,ee=te==null?void 0:te.y;return[W,ee]},z=(B,$)=>{const U=$.map(W=>{if(B.state.panoIndex!==W.panoIndex)return Object.assign(Object.assign({},W),{visible:!1});const ee=k(B,W);W.name.length*Ld;const se=Ed(W.modelPosition[1],c),ie=B.currentMode===ye.Five.Mode.Panorama?E(new o(W.position[0],W.position[1],W.position[2])):!0,ce=r?w(B,W):!1,Ae=ie&&!ce;if(!Ae)return Object.assign(Object.assign({},W),{visible:Ae});A.push(ee);const Ce=Id(ee);return Object.assign(Object.assign({},W),{visible:Ae,transform:Ce,strokeLength:se})}),te=U.filter(({visible:W})=>W).map(W=>({itemLabelItem:W,distance:new o(W.modelPosition[0],W.modelPosition[1],W.modelPosition[2]).clone().distanceTo(B.camera.position)})).sort((W,ee)=>W.distance-ee.distance);return U.map(W=>{const ee=te.findIndex(se=>se.itemLabelItem.id===W.id);return ee!==void 0?Object.assign(Object.assign({},W),{zIndex:ee*10}):W})},I=()=>{A=[],e(1,u=z(s,u))},D=()=>{e(5,g=!1),L()},L=hr(()=>{e(5,g=!0),I()},300),S=()=>{s.once("renderFrame",I)},N=()=>{window.addEventListener("resize",S,!1)},H=()=>{f!==a&&(e(1,u=ms(a)),f=a,I())},_=(B,$)=>{let U=[];for(let W=0;W<$.length;W++){const{position:ee,panoIndex:se}=$[W],ie=B.distanceTo(ee);(h===void 0||ie<=h||s.state.mode!==ye.Five.Mode.Panorama)&&U.push({panoIndex:se,obVector:ee,distance:ie})}U=U.sort((W,ee)=>W.distance-ee.distance);let te;for(let W=0;W<U.length;W++){const{obVector:ee,distance:se,panoIndex:ie}=U[W];if(!fs(s,B,ee,se)){te=ie;break}}return typeof te=="number"?$[te]:void 0},T=B=>{if(s.state.mode===ye.Five.Mode.Panorama)return;const $=s.work.observers,U=new o().fromArray(B.position),te=_(U,$);if(te&&(B.observerIndex=te.panoIndex),typeof B.observerIndex=="number"){const W=$[B.observerIndex],ee=U.clone().sub(W.position).normalize(),se={longitude:Math.PI+Math.atan2(ee.x,ee.z),latitude:Math.acos(ee.y/ee.length())-Math.PI/2};s.setState(Object.assign(Object.assign({},se),{mode:ye.Five.Mode.Panorama,panoIndex:B.observerIndex})),s.once("initAnimationEnded",()=>{e(1,u=u.map(ie=>Object.assign(Object.assign({},ie),{isFold:ie.id!==B.id}))),s.once("cameraUpdate",()=>{e(1,u=u.map(ie=>Object.assign(Object.assign({},ie),{isFold:!1})))})})}};Rs(()=>{H()}),Ct(()=>{e(1,u=ms(a)),f=a,I(),N(),s.on("cameraUpdate",D)}),nn(()=>{s.off("cameraUpdate",D),window.removeEventListener("resize",S,!1)});function J(){v=this.clientWidth,b=this.clientHeight,e(3,v),e(4,b)}return i.$$set=B=>{"five"in B&&e(7,s=B.five),"modelOcclusionEnable"in B&&e(8,r=B.modelOcclusionEnable),"itemLabels"in B&&e(9,a=B.itemLabels),"hooks"in B&&e(0,l=B.hooks),"displayStrategyType"in B&&e(10,c=B.displayStrategyType),"maxVisibleDistance"in B&&e(11,h=B.maxVisibleDistance)},[l,u,m,v,b,g,T,s,r,a,c,h,J]}class Td extends de{constructor(t){super(),ue(this,t,kd,Cd,he,{five:7,modelOcclusionEnable:8,itemLabels:9,hooks:0,displayStrategyType:10,maxVisibleDistance:11},xd,[-1,-1])}}function Dd(i){return i.item_labels.map(t=>({...t,modelPosition:[t.position[0],t.position[1],t.position[2]],observerIndex:void 0}))}const zd=void 0,Md=(i,t)=>{var u,m,v,b;const e={container:document.createElement("div"),data:null,enabled:!0,fiveModeEnabled:!0,itemLabels:[],wrapper:null,app:void 0,hooks:new ye.Subscribe,modelOcclusionEnable:(u=t==null?void 0:t.modelOcclusionEnable)!=null?u:!0,onlyVisibleInPanorama:(m=t==null?void 0:t.onlyVisibleInPanorama)!=null?m:!0,displayStrategyType:(v=t==null?void 0:t.displayStrategyType)!=null?v:It.SMALL,maxVisibleDistance:(b=t==null?void 0:t.maxVisibleDistance)!=null?b:zd};e.container.setAttribute("class","item-label-plugin-container"),e.container.style.cssText=`
532
532
  position: absolute;
@@ -535,4 +535,4 @@ void main() {
535
535
  width: 100%;
536
536
  height: 100%;
537
537
  z-index: 5;
538
- `,e.container.style.pointerEvents="none";const n=A=>(e.wrapper=A,A.appendChild(e.container),l(),!0),o=A=>{e.itemLabels=Dd(A),l()},s=()=>(e.enabled||(e.enabled=!0,l()),!0),r=()=>(e.enabled&&(e.enabled=!1,l()),!0),a=()=>{h(),e.container.remove()},l=()=>{var A;if(!!e.wrapper){if(!e.enabled||!e.fiveModeEnabled){(A=e.app)==null||A.$destroy(),e.app=void 0;return}e.app?e.app.$set({five:i,itemLabels:e.itemLabels}):e.app=new Td({target:e.container,props:{five:i,modelOcclusionEnable:e.modelOcclusionEnable,onlyVisibleInPanorama:e.onlyVisibleInPanorama,itemLabels:e.itemLabels,wrapper:e.wrapper,hooks:e.hooks,displayStrategyType:e.displayStrategyType,maxVisibleDistance:e.maxVisibleDistance}})}},c=()=>{i.on("modeChange",f),i.once("dispose",a)},h=()=>{i.off("modeChange",f)},f=A=>{if(A!==ye.Five.Mode.Panorama){e.fiveModeEnabled=!1,r();return}i.once("initAnimationEnded",()=>{e.fiveModeEnabled=!0,s()})};return c(),{appendTo:n,load:o,enable:s,disable:r,dispose:a,hooks:e.hooks}},Sd={name:"ItemLabelPlugin",version:0};class jd extends Qs{constructor(e){super(e);d(this,"state");d(this,"container");d(this,"enabled");this.five=e,this.five.once("dispose",this.dispose),this.enabled=!0,this.state=this.initState()}enable(e){this.enabled=!0,this.updateState({...e,userAction:!0})}disable(e){this.enabled=!1,this.updateState({...e,userAction:!0})}show(e){if(!!this.state.enabled)return this.setState({...this.state,visible:!0},e),Promise.resolve()}hide(e){if(!!this.state.enabled)return this.setState({...this.state,visible:!1},e),Promise.resolve()}dispose(){this.container.remove()}setState(e,n){if(!this.enabled)return;const o={...this.state};this.state={...this.state,...e,...n},this.stateChangedCallback(o,n)}get visible(){return this.five.state.mode===ye.Five.Mode.Panorama}appendTo(e){!this.enabled||(this.container=e,this.render())}updateState(e){this.setState({...this.state,enabled:this.enabled,visible:this.visible},e)}}function Od(i){ge(i,"svelte-16kdbw2",'.plugin-DoorLabelPlugin-item.svelte-16kdbw2.svelte-16kdbw2{position:absolute;left:0;top:0;width:0;height:0;pointer-events:none;transition:opacity 0.3s ease}.plugin-DoorLabelPlugin-cnt.svelte-16kdbw2.svelte-16kdbw2{position:absolute;top:50%;left:50%;border-radius:2px;background:rgba(0, 0, 0, 0.35);line-height:0.625rem;padding:0.3125rem;white-space:nowrap;font-size:0.625rem;font-style:normal;color:white;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:transform ease 1s, background ease 0.3s, color ease 0.3s}.plugin-DoorLabelPlugin-cnt.svelte-16kdbw2.svelte-16kdbw2::after{content:"";display:block;position:absolute;top:-1px;left:-1px;bottom:-1px;right:-1px;border-radius:2px;border:1px solid rgba(0, 0, 0, 0);-o-border-image:url("//vrlab-image4.ljcdn.com/release/web/highlightCarouseal-border-image.14b51834.png") 4;border-image:url("//vrlab-image4.ljcdn.com/release/web/highlightCarouseal-border-image.14b51834.png") 4;transition:opacity ease 0.3s}.plugin-DoorLabelPlugin-cnt.svelte-16kdbw2.svelte-16kdbw2:active,.plugin-DoorLabelPlugin-cnt.svelte-16kdbw2.svelte-16kdbw2:focus{background:rgba(0, 0, 0, 0.5);color:rgba(255, 255, 255, 0.5)}.plugin-DoorLabelPlugin-icon.svelte-16kdbw2.svelte-16kdbw2{background:url("//vrlab-image4.ljcdn.com/release/web/DoorLabel-icon.de1304ae.svg") no-repeat;background-size:100%;display:inline-block;width:0.52083rem;height:0.52083rem;margin-left:0.20833rem;transform-origin:center}.plugin-DoorLabelPlugin-cnt[data-camera-toward=forward].left.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(90deg)}.plugin-DoorLabelPlugin-cnt[data-camera-toward=forward].right.svelte-16kdbw2 .plugin-DoorLabelPlugin-txt.svelte-16kdbw2{order:1}.plugin-DoorLabelPlugin-cnt[data-camera-toward=forward].right.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(-90deg);margin-left:0;margin-right:0.20833rem;order:0}.plugin-DoorLabelPlugin-cnt[data-camera-toward=right].forward.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(90deg)}.plugin-DoorLabelPlugin-cnt[data-camera-toward=right].back.svelte-16kdbw2 .plugin-DoorLabelPlugin-txt.svelte-16kdbw2{order:1}.plugin-DoorLabelPlugin-cnt[data-camera-toward=right].back.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(-90deg);margin-left:0;margin-right:0.20833rem;order:0}.plugin-DoorLabelPlugin-cnt[data-camera-toward=left].back.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(90deg)}.plugin-DoorLabelPlugin-cnt[data-camera-toward=left].forward.svelte-16kdbw2 .plugin-DoorLabelPlugin-txt.svelte-16kdbw2{order:1}.plugin-DoorLabelPlugin-cnt[data-camera-toward=left].forward.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(-90deg);margin-left:0;margin-right:0.20833rem;order:0}.plugin-DoorLabelPlugin-cnt[data-camera-toward=back].right.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(90deg)}.plugin-DoorLabelPlugin-cnt[data-camera-toward=back].left.svelte-16kdbw2 .plugin-DoorLabelPlugin-txt.svelte-16kdbw2{order:1}.plugin-DoorLabelPlugin-cnt[data-camera-toward=back].left.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(-90deg);margin-left:0;margin-right:0.20833rem;order:0}.plugin-DoorLabelPlugin-cnt--customBrand.svelte-16kdbw2.svelte-16kdbw2{color:#f9eac1}.plugin-DoorLabelPlugin-cnt--customBrand.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{background:url("//vrlab-image4.ljcdn.com/release/web/arrow.6e8ec00e.svg") no-repeat}.plugin-DoorLabelPlugin-cnt--customBrand.svelte-16kdbw2.svelte-16kdbw2:active,.plugin-DoorLabelPlugin-cnt--customBrand.svelte-16kdbw2.svelte-16kdbw2:focus{background:rgba(0, 0, 0, 0.5);color:rgba(249, 234, 193, 0.5)}')}function Rd(i){let t,e,n,o,s,r,a,l;return{c(){t=G("div"),e=G("div"),n=G("span"),n.textContent=`${i[8]}`,o=fe(),s=G("i"),x(n,"class","plugin-DoorLabelPlugin-txt svelte-16kdbw2"),x(s,"class","plugin-DoorLabelPlugin-icon svelte-16kdbw2"),x(e,"class",r=je(tt("plugin-DoorLabelPlugin-cnt",i[0].toward))+" svelte-16kdbw2"),x(e,"style",`transform: ${i[6]||"initial"};pointer-events: ${i[5]?"auto":"none"};opacity: ${i[5]?1:0}`),x(e,"data-camera-toward",i[7]),x(t,"style",`left: ${i[3]||0}%;top: ${i[4]||0}%;opacity: ${i[5]?1:0}`),x(t,"class","plugin-DoorLabelPlugin-item svelte-16kdbw2")},m(c,h){Y(c,t,h),X(t,e),X(e,n),X(e,o),X(e,s),i[10](t),a||(l=qe(e,"click",i[9]),a=!0)},p(c,[h]){h&1&&r!==(r=je(tt("plugin-DoorLabelPlugin-cnt",c[0].toward))+" svelte-16kdbw2")&&x(e,"class",r)},i:ne,o:ne,d(c){c&&Q(t),i[10](null),a=!1,l()}}}function Nd(i,t,e){let{props:n}=t,{onClick:o}=t,s,{left:r,top:a,inSight:l,transform:c,panoIndex:h,cameraToward:f,name:u}=n,m=0;const v=()=>{if(!r||!a||!l||!s)return;const g=s.current.clientWidth/window.innerWidth*100,w=s.current.clientHeight/window.innerHeight*100;if(r<=g/2||r>=100-g/2||a<=w/2||a>=100-w/2)return;h!==m&&(console.log("panoDoorLabelPlugin",h,"\u89E6\u53D1\u57CB\u70B9"),m=h)},b=g=>{o&&o()};function A(g){Rt[g?"unshift":"push"](()=>{s=g,e(2,s)})}return i.$$set=g=>{"props"in g&&e(0,n=g.props),"onClick"in g&&e(1,o=g.onClick)},v(),[n,o,s,r,a,l,c,f,u,b,A]}class Bd extends de{constructor(t){super(),ue(this,t,Nd,Rd,he,{props:0,onClick:1},Od)}}function Hd(i,t){const e=Math.abs(i.top+i.height/2-t.top-t.height/2),n=Math.abs(i.left+i.width/2-t.left-t.width/2),o=(i.height+t.height)/2,s=(i.width+t.width)/2;return!(e>o&&n>s)}function Fd(i){const{camera:t}=i,e=t.getWorldDirection(new M.Vector3);let n=Math.atan(e.z/e.x)*180/Math.PI,o="";return e.x<0&&(n+=180),n<0&&(n+=360),n>315||n<=45?o="right":n>45&&n<=135?o="back":n>135&&n<=225?o="left":n>225&&n<=315&&(o="forward"),o}function Gd(i,t){return Math.sqrt(Math.pow(i.z-t.z,2)+Math.pow(i.x-t.x,2))}function Xd(i){const t=Math.PI/4;return i>-t&&i<=t?"left":i>t*3||i<=-t*3?"right":i>-t*3&&i<=-t?"forward":i>t&&i<=t*3?"back":""}const Qd={userAction:!0};class Wd extends jd{constructor(e){super(e);d(this,"MinVisibledistance",1.8);d(this,"MaxVisibledistance",5);d(this,"OffsetHeight",-1.3);d(this,"rooms");d(this,"floorplanServerData");d(this,"doorLabelItems");d(this,"visibleLabelMap",new Map);d(this,"labelItems",[]);d(this,"doorLabels");d(this,"roomObservers");d(this,"loadData",(e,n)=>{n&&(this.MaxVisibledistance=n.MaxVisibledistance,this.MinVisibledistance=n.MinVisibledistance,this.OffsetHeight=n.OffsetHeight),this.doorLabelItems&&this.doorLabelItems.length>0&&this.doorLabelItems.forEach(o=>{o.$destroy()}),this.labelItems=[],this.doorLabels=[],this.doorLabelItems=[],this.floorplanServerData=e,this.five.once("panoArrived",()=>{console.log("doorplugin","panoArrived"),this.initData()})});d(this,"initRoomObservers",()=>{var s,r;const e=this.floorplanServerData.computed_data.floor_datas||[],o=(((r=(s=this.five)==null?void 0:s.work)==null?void 0:r.observers)||[]).map(a=>{const l=a.panoIndex,c=a.floorIndex,h=e==null?void 0:e.find(f=>f.floor_index===c);if(h){const f=h.rooms.find(u=>u.observer_indexs.includes(l));if(f)return{panoIndex:l,floorIndex:c,name:f.name}}}).filter(Boolean);this.roomObservers=o});d(this,"hideAllLabels",()=>{this.labelItems.forEach(e=>{e.visible=!1,e.inSight=!1}),this.render()});d(this,"fixDoorVisibleAndPosition",()=>{this.initRoomObservers();const{panoIndex:e}=this.five;if(!this.visible||this.five.model.empty||e===null||!this.roomObservers.find(a=>a.panoIndex===e))return;const n=this.roomObservers.find(a=>a.panoIndex===e),s=this.five.work.observers.find(a=>a.panoIndex===e).position.clone(),r=(()=>{if(this.visibleLabelMap.has(e))return this.visibleLabelMap.get(e);{const a=[];return this.doorLabels.forEach((l,c)=>{if(l.roomName===n.name)return;const h=l.position.clone(),f=h.distanceTo(s);if(f<this.MinVisibledistance||f>this.MaxVisibledistance)return;const u=new M.Raycaster,m=h.clone().sub(s).normalize();u.set(s,m);const[v]=this.five.model.intersectRaycaster(u);v&&v.distance+.1<f||a.push(c)}),this.visibleLabelMap.set(e,a),a}})();this.labelItems.forEach((a,l)=>{a.visible=r.includes(l)}),this.fixDoorPosition()});d(this,"fixDoorPosition",()=>{const{panoIndex:e,camera:n}=this.five;if(e===null)return;if(this.five.currentMode!=="Panorama")return this.hideAllLabels();const o=this.five.getElement(),s=o.clientWidth,r=o.clientHeight,a=n.getWorldDirection(new M.Vector3),l=[],c=[...this.labelItems];if(c.forEach((h,f)=>{if(h.visible){const u=n.position.distanceTo(h.position),m=h.position.clone().add(new M.Vector3(0,this.OffsetHeight,0)),b=m.clone().sub(n.position).normalize().angleTo(a),A=m.clone().project(n),g=(A.x+1)/2.2*100,w=(-A.y+1)/2.2*100,E=g>=0&&g<=100&&w>=0&&w<=100&&u>this.MinVisibledistance&&u<=this.MaxVisibledistance;h.left=g,h.top=w,h.inSight=E&&b<Math.PI/2,h.cameraToward=Fd(this.five),E?l.push({disFromCameraToLabel:u,left:g,top:w,index:f}):h.transform="translate(-50%, -50%)"}else h.inSight=!1}),l.length>1){let h=0;l.sort((f,u)=>u.disFromCameraToLabel-f.disFromCameraToLabel);for(let f=1;f<l.length;f++){const{index:u,left:m,top:v}=l[f-1],{index:b,left:A,top:g}=l[f],w=this.container.children[u],E=this.container.children[b];if(!w||!E)return;const k={left:s*m/100,top:r*v/100,width:w.children[0].clientWidth,height:w.children[0].clientHeight},z={left:s*A/100,top:r*g/100,width:E.children[0].clientWidth,height:E.children[0].clientHeight};Hd(k,z)&&(h++,c[u].transform=`translate(-50%, ${(h-1)*100-50}%)`,c[b].transform=`translate(-50%, ${h*100-50}%)`)}}this.labelItems=c,this.render()});d(this,"onClick",(e,n)=>{if(!this.roomObservers)return;const{work:o}=this.five;let s,r,a=1/0;for(let l=0;l<o.observers.length;l++){if(this.roomObservers[l].name!==e)continue;const h=o.observers[l].standingPosition,f=n.distanceTo(h);f<a&&(s=l,r=h.clone().sub(n).normalize(),a=f)}if(r!==null&&s!==null){const l={};if(a>0){const h=new M.Vector3(0,0,-1),f=r.clone(),u=new M.Quaternion;u.setFromUnitVectors(h,f);const m=new M.Euler;m.setFromQuaternion(u,"YXZ"),l.longitude=m.y}this.five.emit("wantsToMoveToPano",s,{},!0)||this.five.moveToPano(s,{longitude:l.longitude})}});d(this,"initData",()=>{var s;this.doorLabels=[];const e=this.five.panoIndex,n=this.floorplanServerData.computed_data.observers[e].floor_index,o=n!==void 0&&((s=this.floorplanServerData.computed_data.floor_datas[n])==null?void 0:s.rooms);this.rooms=o,this.rooms&&this.rooms.length>0&&this.rooms.forEach(r=>{var c;const a=(c=this.floorplanServerData.computed_data.doors)==null?void 0:c.filter(h=>!!(h&&h.name===r.name)),l=this.five.work.observers.filter((h,f)=>!!r.observer_indexs.find(u=>u===f));a&&a.forEach(h=>{const f=h.position;let u=1/0,m;l.forEach(b=>{const A=b.standingPosition,g={x:A.x,y:A.y,z:A.z},w=Gd(f,g);w<u&&(u=w,m=g)}),m&&(f.y=m.y+.01);const v=new M.Vector3(f.x,f.y,f.z);v.add(new M.Vector3(-.2,1.8,0).applyEuler(new M.Euler(0,h.rad,0))),this.doorLabels.push({roomName:r.name,name:h.name,position:v,toward:Xd(h.rad)})})}),this.labelItems=this.doorLabels.map(r=>({...r,left:0,top:0,visible:!1,inSight:!1,transform:"",cameraToward:""})),console.log("doorplugin","labelItems",this.labelItems),this.five.on("wantsToMoveToPano",this.hideAllLabels),this.five.on("modelLoaded",this.fixDoorVisibleAndPosition),this.five.on("panoArrived",this.fixDoorVisibleAndPosition),this.five.on("initAnimationEnded",this.fixDoorPosition),this.five.on("cameraUpdate",this.fixDoorPosition),this.five.on("mouseWheel",this.fixDoorPosition),this.five.on("pinchGesture",this.fixDoorPosition),this.fixDoorVisibleAndPosition()})}stateChangedCallback(e,n){if(this.hooks.hasListener("stateChange")){const o={state:this.state,prevState:e,userAction:n?n.userAction:Qd.userAction};this.hooks.emit("stateChange",o)}}render(){if(!this.enabled){this.doorLabelItems&&this.doorLabelItems.length>0&&this.doorLabelItems.forEach(e=>{e==null||e.$destroy()}),this.doorLabels=void 0;return}this.doorLabelItems&&this.doorLabelItems.forEach(e=>{e.$destroy()}),this.doorLabelItems=[],this.labelItems.forEach(e=>{this.doorLabelItems.push(new Bd({target:this.container,props:{props:e,onClick:()=>{this.onClick(e.name,e.position)}}}))})}initState(){return{enabled:!0,visible:!0}}dispose(){this.five&&(this.five.off("wantsToMoveToPano",this.hideAllLabels),this.five.off("modelLoaded",this.fixDoorVisibleAndPosition),this.five.off("panoArrived",this.fixDoorVisibleAndPosition),this.five.off("initAnimationEnded",this.fixDoorPosition),this.five.off("cameraUpdate",this.fixDoorPosition),this.five.off("mouseWheel",this.fixDoorPosition),this.five.off("pinchGesture",this.fixDoorPosition),super.dispose())}}const Yd=i=>new Wd(i);var Un={},Vd=Zd;function Zd(i,t,e){return i[0]=t[0]+e[0],i[1]=t[1]+e[1],i}var Jd=Ud;function Ud(i,t,e){return i[0]=t,i[1]=e,i}var qd=Kd;function Kd(i,t){var e=t[0],n=t[1],o=e*e+n*n;return o>0&&(o=1/Math.sqrt(o),i[0]=t[0]*o,i[1]=t[1]*o),i}var _d=$d;function $d(i,t,e){return i[0]=t[0]-e[0],i[1]=t[1]-e[1],i}var ef=tf;function tf(i,t){return i[0]*t[0]+i[1]*t[1]}var nf=Vd,xi=Jd,ur=qd,of=_d,sf=ef,bs=[0,0];Un.computeMiter=function(t,e,n,o,s){return nf(t,n,o),ur(t,t),xi(e,-t[1],t[0]),xi(bs,-n[1],n[0]),s/sf(e,bs)};Un.normal=function(t,e){return xi(t,-e[1],e[0]),t};Un.direction=function(t,e,n){return of(t,e,n),ur(t,t),t};var ct=Un,Pt=[0,0],Ln=[0,0],As=[0,0],Ut=[0,0],rf=function(i,t){var e=null,n=[];t&&(i=i.slice(),i.push(i[0]));for(var o=i.length,s=1;s<o;s++){var r=i[s-1],a=i[s],l=s<i.length-1?i[s+1]:null;if(ct.direction(Pt,a,r),e||(e=[0,0],ct.normal(e,Pt)),s===1&&gi(n,e,1),!l)ct.normal(e,Pt),gi(n,e,1);else{ct.direction(Ln,l,a);var c=ct.computeMiter(As,Ut,Pt,Ln,1);gi(n,Ut,c)}}if(i.length>2&&t){var h=i[o-2],f=i[0],u=i[1];ct.direction(Pt,f,h),ct.direction(Ln,u,f),ct.normal(e,Pt);var m=ct.computeMiter(As,Ut,Pt,Ln,1);n[0][0]=Ut.slice(),n[o-1][0]=Ut.slice(),n[0][1]=m,n[o-1][1]=m,n.pop()}return n};function gi(i,t,e){i.push([[t[0],t[1]],e])}const af=2,lf=3,cf=3,hf=2;function uf(i,t){var r,a,l;if(i.length<2)return console.warn("positionList length must be greater than 1"),[];const e=(r=t==null?void 0:t.unitWidth)!=null?r:.5,n=(a=t==null?void 0:t.unitHeight)!=null?a:.5,o=(l=t==null?void 0:t.skipPosition)!=null?l:!1,s=new O.CatmullRomCurve3(i,!1,"catmullrom",1);if(o){const c=Math.ceil(s.getLength()/n*1.5),h=s.getPoints(c),f=[];let u=0;const m=i;return m.forEach((v,b)=>{let A=0,g=99999999;h.forEach((I,D)=>{const L=I.distanceTo(v);L<g&&(A=D,g=L)});const w=h[A+1],E=w==null?void 0:w.distanceTo(v),k=h[A-1],z=k==null?void 0:k.distanceTo(v);if(A>u&&A-u>1){let I=A;k!==void 0&&z>.8&&(I=A+1),k!==void 0&&z>.2&&z<.3?I=A:g>.2&&g<.3&&(I=A+1);let D=u;if(w!==void 0&&E>.2&&E<.3?D=u+1:g>.2&&g<.3&&(D=u),h[D]&&h[D+1]){const N=m[b-1];if(N)if(N.equals(h[D]))D+=1;else{const H=new M.Vector3().subVectors(h[D+1],h[D]),_=new M.Vector3().subVectors(N,h[D]);H.angleTo(_)<Math.PI/2&&(D+=1)}}if(I<D||I-D<=1)return;const L=h.slice(D,I),S=ys(L,e,n);f.push(S),u=A}}),f}else{const c=Math.ceil(s.getLength()),h=s.getPoints(c);return[ys(h,e,n)]}}function ys(i,t,e){const n=t/2,o=e/t,s=i.length,r=rf(i.map(g=>[g.x,g.z])),l=(i.length-1)*af*lf,c=2*s,h=c*cf,f=c*hf,u=new Uint32Array(l),m=new Float32Array(h),v=new Float32Array(f);i.forEach((g,w)=>{});let b=0;for(let g=0;g<i.length;g++){const[w,E]=r[g][0],k=i[g],{x:z,y:I,z:D}=k,L=new M.Vector3(z+w*n,I+.05,D+E*n);m[g*6+0]=L.x,m[g*6+1]=L.y,m[g*6+2]=L.z;const S=new M.Vector3(z-w*n,I+.05,D-E*n);m[g*6+3]=S.x,m[g*6+4]=S.y,m[g*6+5]=S.z,b+=g>0?i[g-1].clone().sub(i[g]).length():0;const N=b/t/o;v[g*4+0]=0,v[g*4+1]=N,v[g*4+2]=1,v[g*4+3]=N,g!==i.length-1&&(u[g*6+0]=g*2+0,u[g*6+1]=g*2+2,u[g*6+2]=g*2+1,u[g*6+3]=g*2+2,u[g*6+4]=g*2+3,u[g*6+5]=g*2+1)}const A=new O.BufferGeometry;return A.setAttribute("position",new O.BufferAttribute(m,3)),A.setAttribute("uv",new O.BufferAttribute(v,2)),A.setIndex(new O.BufferAttribute(u,1)),A}function df(i){var n;const t=new O.TextureLoader().load((n=i==null?void 0:i.textureUrl)!=null?n:"//vrlab-static.ljcdn.com/release/web/arrow6.b6ce0c62.png");return t.wrapS=t.wrapT=O.RepeatWrapping,t.encoding=O.sRGBEncoding,new O.MeshBasicMaterial({color:16777215,map:t,transparent:!0,opacity:.8})}function Ps(i){return i!=null}const dr="v1.0.1",fr="GuideLinePlugin",Ci=`${fr}@${dr}`,ws=i=>`${Ci}--${i}`;class mr extends Lt{constructor(e){super(e);d(this,"state",{visible:!1,enabled:!0,disposed:!1});d(this,"data");d(this,"linesGroup");d(this,"disposedErrorLog",()=>{console.error(`${Ci} is disposed`)});d(this,"actionWhenEnabled",e=>{if(this.state.enabled)return e()});Object.assign(window,{[`__${fr}_DEBUG__`]:this})}async load(e,n,o=!0){const s=this.data?JSON.parse(JSON.stringify(this.data)):void 0,r=await this.formatData(e);this.hooks.emit("dataChange",r,s),this.data=r,this.linesGroup&&this.five.scene.remove(this.linesGroup);const a=this.getLinesGroup(r.routes);!a||(this.linesGroup=a,this.five.scene.add(a),this.handleVisible(this.state.visible),this.handleEnable(this.state.enabled),n&&this.setState(n),this.five.needsRender=!0,this.hooks.emit("dataLoaded",r),console.log(`${Ci} loaded`,r))}async formatData(e){return typeof e=="object"&&e!==null&&e.version&&e.data?e.data:e}async show(e){this.setState({visible:!0},e)}async hide(e){this.setState({visible:!1},e)}enable(e){this.setState({enabled:!0},e)}disable(e){this.setState({enabled:!1},e)}dispose(){this.setState({disposed:!0})}setState(e,n){var s;if(this.state.disposed)return this.disposedErrorLog();const o={...this.state};this.state={...this.state,...e},e.disposed!==void 0&&e.disposed!==o.disposed&&e.disposed&&this.handleDispose(),e.visible!==void 0&&e.visible!==o.visible&&this.handleVisible(e.visible,n==null?void 0:n.userAction),e.enabled!==void 0&&e.enabled!==o.enabled&&this.handleEnable(e.enabled,n==null?void 0:n.userAction),nt(o,this.state,{deep:!0})||(this.hooks.emit("stateChange",{state:this.state,prevState:o,userAction:(s=n==null?void 0:n.userAction)!=null?s:!0}),this.five.needsRender=!0)}handleEnable(e,n=!0){this.linesGroup&&(e?(this.five.scene.add(this.linesGroup),this.actionWhenEnabled(()=>this.hooks.emit("enable",{userAction:n}))):(this.five.scene.remove(this.linesGroup),this.hooks.emit("disable",{userAction:n})))}handleVisible(e,n=!0){this.linesGroup&&(e?(this.linesGroup.visible=!0,this.actionWhenEnabled(()=>this.hooks.emit("show",{userAction:n}))):(this.linesGroup.visible=!1,this.actionWhenEnabled(()=>this.hooks.emit("hide",{userAction:n}))))}handleDispose(){this.linesGroup&&this.five.scene.add(this.linesGroup)}getLinesGroup(e){const n=e.map(this.getLine.bind(this)).filter(Ps),o=new O.Group;if(o.name=ws("route-group"),n.length!==0)return o.add(...n),o}getLine(e){const n=new O.Group,o=e.panoIndexList.map(a=>{var l;return(l=this.five.work.observers[a])==null?void 0:l.standingPosition}).filter(Ps),s=uf(o,{skipPosition:!0,unitWidth:.6,unitHeight:.4});if(!s)return;const r=df({textureUrl:e.arrowTextureUrl});return s.forEach(a=>{const l=new O.Mesh(a,r);l.name=ws("route-line-mesh"),n.add(l)}),n}}d(mr,"lasestVersion",dr);const pr=i=>new mr(i);function Es(i){const t=Math.abs(Math.cos(i.latitude));return new O.Vector3(-Math.sin(i.longitude)*t,-Math.sin(i.latitude),-Math.cos(i.longitude)*t)}function ff(i,t){const e=Es(i),n=Es(t);return e.angleTo(n)}const mf=async i=>{try{i().then(()=>{},()=>{}).catch(()=>{})}catch{}},kn=Math.PI*2;function pf(i){return i>=0&&i<kn?i:(i%kn+kn)%kn}function gf(i){return{longitude:pf(-Math.atan2(i.x,-i.z)),latitude:-Math.asin(i.y/1)}}function vf(i,t,e,n){const o=-i/e,s=i;return o*n+s}function bf(i){return new Promise(t=>{setTimeout(()=>{t()},i)})}const gr="v1.0.6",vr="CruisePlugin",qn=`${vr}@${gr}`,Is=()=>{console.error(`${qn} is disposed`)},Af=()=>{console.warn(`${qn} is disabled`)},yf=()=>{console.error(`${qn} is disabled`)},vi=new Map;class Xi extends Lt{constructor(e){super(e);d(this,"state",{visible:!0,enabled:!0,disposed:!1,playing:!1,speed:1,config:{speedConfig:{rotateSpeed:.001,rotateSpeedUnit:"rad/ms",moveSpeed:.002,moveSpeedUnit:"m/ms"}}});d(this,"data");d(this,"privateState",{playing:!1,currentPlayQueue:[],currentPlayKeyframe:null,broke:!1,disposers:[]});d(this,"GuideLine");Object.assign(window,{[`__${vr}_DEBUG__`]:this});const n=this.setFiveLinearUpdateCamera.bind(this),o=this.setFiveOriginUpdateCamera.bind(this);this.hooks.on("play",n),this.hooks.on("broke",o),this.hooks.on("end",o),this.hooks.on("pause",o),this.privateState.disposers.push(()=>{this.hooks.off("play",n),this.hooks.off("broke",o),this.hooks.off("end",o),this.hooks.off("pause",o)})}async load(e,n,o){var h,f,u,m,v;if(this.state.disposed)return Is();this.privateState.fiveOriginGetProgress||(f=(h=this.five.controller)==null?void 0:h.cameraMotion)!=null&&f.getProgress||(await this.waitFiveLoaded(),this.privateState.fiveOriginGetProgress=(m=(u=this.five.controller)==null?void 0:u.cameraMotion)==null?void 0:m.getProgress),this.clear();const s=this.data?JSON.parse(JSON.stringify(this.data)):void 0,r=await this.formatData(e);this.data=r,this.hooks.emit("dataChange",r,s);let a=[],l;const c=this.data.keyframes.filter(b=>b.data.panoIndex!==void 0);c.filter((b,A)=>{var g;return b.data.panoIndex!==((g=c[A-1])==null?void 0:g.data.panoIndex)}).map(b=>b.data.panoIndex).forEach(b=>{var g,w;const A=(g=this.five.work.observers[b])==null?void 0:g.floorIndex;if(A!==void 0)if(l===A){const E=a.length-1;a[E]=[...(w=a[E])!=null?w:[],b]}else{l=A;const E=a.length;a[E]=[b]}}),this.GuideLine||(this.GuideLine=pr(this.five)),(v=this.GuideLine)==null||v.load({routes:a.map(b=>({panoIndexList:b}))}),this.setState({playing:!1}),this.handleVisible(this.state.visible),this.handleEnable(this.state.enabled),this.changePlayState(this.state.playing),this.changeSpeed(this.state.speed),n&&this.setState(n,{userAction:o}),console.log(`${qn} loaded`,r),this.hooks.emit("dataLoaded",r)}play(e){this.setState({playing:!0},e)}playFrom(e){const{index:n,id:o,userAction:s}=e;this.state.playing&&this.setState({playing:!1},{userAction:s}),this.setState({playing:!0},{userAction:s,playFromIndex:n,playFromId:o})}playFromStart(e){return this.playFrom({...e,index:0})}pause(e){this.setState({playing:!1},e)}async show(e){this.setState({visible:!0},e)}async hide(e){this.setState({visible:!1},e)}enable(e){this.setState({enabled:!0},e)}disable(e){this.setState({enabled:!1},e)}dispose(){this.setState({disposed:!0})}setState(e,n){var s;if(this.state.disposed)return Is();if(!this.state.enabled&&e.enabled!==!0&&e.disposed!==!0)return yf();const o={...this.state};this.state={...this.state,...e},e.disposed!==void 0&&e.disposed!==o.disposed&&e.disposed&&this.handleDispose(),e.visible!==void 0&&e.visible!==o.visible&&this.handleVisible(e.visible,n==null?void 0:n.userAction),e.enabled!==void 0&&e.enabled!==o.enabled&&this.handleEnable(e.enabled,n==null?void 0:n.userAction),e.playing!==void 0&&e.playing!==o.playing&&this.changePlayState(e.playing,n),e.speed!==void 0&&e.speed!==o.speed&&this.changeSpeed(e.speed,n==null?void 0:n.userAction),nt(o,this.state,{deep:!0})||this.hooks.emit("stateChange",{state:this.state,prevState:o,userAction:(s=n==null?void 0:n.userAction)!=null?s:!0})}async formatData(e){this.five.work||await this.waitFiveLoaded();const n=this.five.work.observers,o=(()=>{const s=e;return typeof s=="object"&&s!==null&&s.version&&s.data?s.data:s})();if(o.keyframes)return{keyframesId:ut(),keyframes:o.keyframes.map((s,r)=>{var c;const a=o.keyframes[r+1],l=(()=>!a||a.start===void 0||s.end===void 0?0:a.start-s.end)();return{id:(c=s.uuid)!=null?c:ut(),moveIndex:r,stay:l,index:r,...s}})};if(o.panoIndexList){let s=[];const{moveEffect:r,moveToFirstPanoEffect:a}=o;return this.privateState.moveToFirstPanoEffect=a,o.panoIndexList.filter((l,c)=>l!==o.panoIndexList[c-1]).forEach((l,c)=>{const h=(()=>{var b,A,g,w;const f=o.panoIndexList[c+1];if(f===void 0)return;const u=(b=n[l])==null?void 0:b.position,m=(A=n[f])==null?void 0:A.position;if(!m||!u||((g=n[l])==null?void 0:g.floorIndex)!==((w=n[f])==null?void 0:w.floorIndex))return;const v=new O.Vector3().subVectors(m,u);return gf(v)})();o.moveType===void 0||o.moveType==="justMove"?s.push({moveIndex:c,stay:o.stay,data:{effect:"Move",panoIndex:l,moveEffect:r,...h!=null?h:{}}}):o.moveType==="moveAndRotate"&&(s.push({moveIndex:c,stay:o.stay,data:{effect:"Move",panoIndex:l,moveEffect:r}}),h&&s.push({moveIndex:c,stay:o.stay,data:{effect:"Rotate",panoIndex:l,...h}}))}),{keyframesId:ut(),keyframes:s.map((l,c)=>({id:ut(),index:c,...l}))}}else throw new Error("format error: data no keyframes or no panoIndexList")}handleEnable(e,n=!0){var o,s;e?((o=this.GuideLine)==null||o.enable(),this.hooks.emit("enable",{userAction:n})):((s=this.GuideLine)==null||s.disable(),this.changePlayState(!1,{userAction:n}),this.hooks.emit("disable",{userAction:n})),this.state.enabled=e}handleVisible(e,n=!0){var o,s;e?((o=this.GuideLine)==null||o.show(),this.actionIfStateIsEnabled(()=>this.hooks.emit("show",{userAction:n}))):((s=this.GuideLine)==null||s.hide(),this.actionIfStateIsEnabled(()=>this.hooks.emit("hide",{userAction:n}))),this.state.visible=e}changePlayState(e,n){this.actionIfStateIsEnabled(()=>{var o;return this.hooks.emit("playStateChange",e?"playing":"pause",{userAction:(o=n==null?void 0:n.userAction)!=null?o:!0})}),e?this.handlePlay(n):this.handlePause(n),this.state.playing=e}async handlePlay(e){var m;const{data:n,state:o,privateState:s,hooks:r}=this;if(s.playing||!(n!=null&&n.keyframes)||(n==null?void 0:n.keyframes.length)===0)return;const a=ut();s.playId=a,s.playing=!0,s.broke=!1;const l=n.keyframes,c=this.getPauseData();(e==null?void 0:e.notEmitEvent)!==!0&&r.emit("play",{userAction:(m=e==null?void 0:e.userAction)!=null?m:!0});let h=!1;const u=await(async()=>{var v,b;if((e==null?void 0:e.playFromIndex)!==void 0)return e.playFromIndex;if((e==null?void 0:e.playFromId)!==void 0)return(v=this.data)==null?void 0:v.keyframes.findIndex(A=>A.id===e.playFromId);if(c!=null&&c.keyframeId){const A=(b=this.data)==null?void 0:b.keyframes.find(g=>g.id===c.keyframeId);if(c!=null&&c.fiveState&&await this.move(c.fiveState,{moveEffect:s.moveToFirstPanoEffect}),A){if(A.data.effect==="Move")return A.index;if(A.data.effect==="Rotate"){const g=c.duration!==void 0?c.duration*(1-c.playedProgress):void 0;return await this.playKeyframe(A,{duration:g}),h=!0,A.index+1}}}})();this.clearPauseData();for(const v of l){if(s.broke||!o.playing||!s.playing||a!==s.playId)return;if(!(u!==void 0&&v.index<u))try{r.emit("playIndexChange",v.index,v),await this.playKeyframe(v,{moveEffect:h===!1?s.moveToFirstPanoEffect:void 0,duration:800}),v.stay&&await bf(v.stay),h===!1&&(h=!0)}catch{return Promise.resolve("broke")}}o.playing&&a===s.playId&&(this.setState({playing:!1},{userAction:!1}),r.emit("end"),this.clearPauseData())}handlePause(e){var r;const{state:n,privateState:o,hooks:s}=this;n.playing=!1,o.playing!==!1&&(o.playing=!1,this.setPauseData(),o.broke||this.forceInteruptUpdateCamera(),(e==null?void 0:e.notEmitEvent)!==!0&&s.emit("pause",{userAction:(r=e==null?void 0:e.userAction)!=null?r:!0}))}async playKeyframe(e,n){var s;const{privateState:o}=this;return((s=this.privateState.currentPlayKeyframe)==null?void 0:s.keyframe.id)!==e.id&&(this.privateState.currentPlayKeyframe={keyframe:e}),o.currentPlayQueue.push(this.getPlayPromise(e,n)),this.actionPromiseQueue()}addInterruptListener(e){return this.five.once("gesture",e),this.five.once("modeChange",e),()=>{this.five.off("gesture",e),this.five.once("modeChange",e)}}async getPlayPromise(e,n){var s;const o=e.data;if((s=n==null?void 0:n.duration)!=null||e.start!==void 0&&e.end!==void 0&&e.end-e.start,!!o)return new Promise((r,a)=>{let l=!1;this.addInterruptListener(()=>{if(!l)return this.hooks.emit("broke"),this.privateState.broke=!0,this.setState({playing:!1}),l=!0,a(new Error("play is interupted"))});try{if(l)return;const c=()=>{r(),l=!0};switch(o.effect){case"Move":this.move(o,n).then(c);break;case"Rotate":this.rotate(o,n).then(c);break;default:this.rotate(o,n).then(c)}}catch{}})}async actionPromiseQueue(){const{privateState:e}=this;return new Promise((n,o)=>{if(e.currentPlayQueue.length===0){n();return}const s=e.currentPlayQueue.shift();if(!s){n();return}s.then(n,o)}).then(()=>e.currentPlayQueue.length===0?Promise.resolve():this.actionPromiseQueue())}async move(e,n){if(e.mode&&e.mode!==this.five.currentMode)await this.changeMode(e);else if(e.panoIndex!==this.five.panoIndex)await this.changePano(e,n);else return Promise.resolve()}async rotate(e,n){if(e.mode&&e.mode!==this.five.currentMode)await this.changeMode({mode:e.mode,panoIndex:e.panoIndex});else if(e.panoIndex&&e.panoIndex!==this.five.panoIndex)return await this.changePano(e,n);await this.updateCamera(e,n==null?void 0:n.duration)}async updateCamera(e,n=800){const{five:o,privateState:s,state:r}=this;let a=n;const l=(()=>{var u,m;const h=(u=r.config)==null?void 0:u.speedConfig,f=(m=e.rotateSpeed)!=null?m:h==null?void 0:h.rotateSpeed;if((h==null?void 0:h.rotateSpeedUnit)===void 0)return f;if(f!==void 0)return h.rotateSpeedUnit==="rad/ms"?f:f/1e3})();if(l){const h=this.five.getCurrentState();a=ff(h,e)/l}s.currentPlayKeyframe&&(s.currentPlayKeyframe.originDuration=a);const c=this.getSpeededDuration(a);return new Promise(h=>{mf(()=>o.updateCamera(e,c)),setTimeout(()=>h(),c)})}async changePano(e,n){var h;const{five:o,privateState:s,state:r}=this;if(typeof e.panoIndex!="number"||e.panoIndex===o.panoIndex)return;let a=(h=n==null?void 0:n.duration)!=null?h:800;const l=(()=>{var m,v;const f=(m=r.config)==null?void 0:m.speedConfig,u=(v=e.moveSpeed)!=null?v:f==null?void 0:f.moveSpeed;if((f==null?void 0:f.moveSpeedUnit)===void 0)return u;if(u!==void 0)return f.moveSpeedUnit==="m/ms"?u:u/1e3})();if(l&&typeof o.panoIndex=="number"&&typeof e.panoIndex=="number"){const f=o.work.observers[o.panoIndex].position,u=o.work.observers[e.panoIndex].position;a=f.distanceTo(u)/l}s.currentPlayKeyframe&&(s.currentPlayKeyframe.originDuration=a);const c=this.getSpeededDuration(a);return new Promise(f=>{var u,m,v;o.moveToPano(e.panoIndex,{latitude:e.latitude,longitude:e.longitude,fov:e.fov,duration:c,effect:(v=(m=n==null?void 0:n.moveEffect)!=null?m:(u=this.state.config)==null?void 0:u.moveEffect)!=null?v:e.moveEffect,moveCancelCallback:()=>f(),moveEndCallback:()=>f()})})}changeSpeed(e,n=!0){const{state:o,privateState:s,hooks:r}=this,{currentPlayKeyframe:a}=s;if(r.emit("speedChange",e,{userAction:n}),o.playing&&a)try{const l=a.originDuration!==void 0?a.originDuration*(1-this.getProgress()):void 0,c=this.playKeyframe(a.keyframe,{duration:l});s.currentPlayQueue.push(c)}catch{}}getSpeededDuration(e){return e/this.state.speed}getProgress(){return this.five.controller.cameraMotion.progress}async changeMode(e,n){e.mode&&e.mode!==this.five.currentMode&&await this.five.changeMode(e.mode,e,n)}forceInteruptUpdateCamera(){this.five.updateCamera({},0)}getPauseData(){var e,n;if((e=this.data)!=null&&e.keyframesId)return vi.get((n=this.data)==null?void 0:n.keyframesId)}setPauseData(){var e,n,o,s;if((e=this.data)!=null&&e.keyframesId)return vi.set((n=this.data)==null?void 0:n.keyframesId,{keyframeId:(o=this.privateState.currentPlayKeyframe)==null?void 0:o.keyframe.id,fiveState:this.five.getCurrentState(),duration:(s=this.privateState.currentPlayKeyframe)==null?void 0:s.originDuration,playedProgress:this.getProgress()})}clearPauseData(){var e,n;if((e=this.data)!=null&&e.keyframesId)return vi.delete((n=this.data)==null?void 0:n.keyframesId)}clear(){this.clearPauseData(),this.privateState.currentPlayKeyframe=null}handleDispose(){var e,n;this.setState({playing:!1}),this.clearPauseData(),this.clear(),(e=this.GuideLine)==null||e.dispose(),this.GuideLine=void 0,(n=this.privateState.disposers)==null||n.forEach(o=>o==null?void 0:o())}actionIfStateIsEnabled(e,n){if(this.state.enabled)return e();n!=null&&n.warnLog&&Af()}async waitFiveLoaded(){return new Promise(e=>{if(this.five.work){e();return}this.five.once("loaded",()=>{e()})})}setFiveLinearUpdateCamera(){!this.privateState.fiveOriginGetProgress||(this.five.controller.cameraMotion.getProgress=e=>{const n=this.five.controller.cameraMotion,o=e-n.startTime;return o<0?0:o>=n.duration?1:1-vf(1,n.startVelocity,n.duration,o)})}setFiveOriginUpdateCamera(){!this.privateState.fiveOriginGetProgress||(this.five.controller.cameraMotion.getProgress=this.privateState.fiveOriginGetProgress)}}d(Xi,"PluginVersion",gr);const Pf=i=>new Xi(i);exports.CSS3DRenderPlugin=Xn;exports.CameraMovementEffect=Js;exports.CameraMovementPlugin=yh;exports.CruisePlugin=Pf;exports.CruisePluginController=Xi;exports.DIRECTION=jt;exports.DISPLAY_STRATEGY_TYPE=Et;exports.FLOOR_PLAN_ATTACHED_TO=gt;exports.FLOOR_TYPE_MAP=ch;exports.GuideLinePlugin=pr;exports.ITEM_LABEL_PLUGIN_DISPLAY_STRATEGY_TYPE=It;exports.ItemLabelPlugin=Md;exports.Magnifier=$s;exports.MapviewFloorplanPlugin=Gc;exports.ModelChassisCompassPlugin=dh;exports.ModelEntryDoorGuidePlugin=ph;exports.ModelFloorplanPlugin=Nc;exports.ModelItemLabelPlugin=dd;exports.ModelRoomLabelPlugin=Ja;exports.ModelTVVideoPlugin=pd;exports.ModelViewPlugin=$r;exports.PaintBrush=_r;exports.PaintBrushTypeEnum=ht;exports.PanoCompassPlugin=Qh;exports.PanoCursorRaycasterPlugin=pa;exports.PanoDoorLabelPlugin=Yd;exports.PanoFloorplanRadarPlugin=ah;exports.PanoMeasurePlugin=Fu;exports.PanoRulerPlugin=xh;exports.PanoRulerProPlugin=Rh;exports.PanoSpatialTagPlugin=td;exports.ROOM_FETILE_TYPE_MAP=lh;exports.ROOM_TYPE_MAP=hh;exports.Rotation=et;exports.TopviewFloorplanPlugin=Qc;exports.itemLabelPluginServerParams=Sd;exports.modelItemLabelPluginServerParams=fd;exports.modelRoomLabelPluginServerParams=Ua;
538
+ `,e.container.style.pointerEvents="none";const n=A=>(e.wrapper=A,A.appendChild(e.container),l(),!0),o=A=>{e.itemLabels=Dd(A),l()},s=()=>(e.enabled||(e.enabled=!0,l()),!0),r=()=>(e.enabled&&(e.enabled=!1,l()),!0),a=()=>{h(),e.container.remove()},l=()=>{var A;if(!!e.wrapper){if(!e.enabled||!e.fiveModeEnabled){(A=e.app)==null||A.$destroy(),e.app=void 0;return}e.app?e.app.$set({five:i,itemLabels:e.itemLabels}):e.app=new Td({target:e.container,props:{five:i,modelOcclusionEnable:e.modelOcclusionEnable,onlyVisibleInPanorama:e.onlyVisibleInPanorama,itemLabels:e.itemLabels,wrapper:e.wrapper,hooks:e.hooks,displayStrategyType:e.displayStrategyType,maxVisibleDistance:e.maxVisibleDistance}})}},c=()=>{i.on("modeChange",f),i.once("dispose",a)},h=()=>{i.off("modeChange",f)},f=A=>{if(A!==ye.Five.Mode.Panorama){e.fiveModeEnabled=!1,r();return}i.once("initAnimationEnded",()=>{e.fiveModeEnabled=!0,s()})};return c(),{appendTo:n,load:o,enable:s,disable:r,dispose:a,hooks:e.hooks}},Sd={name:"ItemLabelPlugin",version:0};class jd extends Qs{constructor(e){super(e);d(this,"state");d(this,"container");d(this,"enabled");this.five=e,this.five.once("dispose",this.dispose),this.enabled=!0,this.state=this.initState()}enable(e){this.enabled=!0,this.updateState({...e,userAction:!0})}disable(e){this.enabled=!1,this.updateState({...e,userAction:!0})}show(e){if(!!this.state.enabled)return this.setState({...this.state,visible:!0},e),Promise.resolve()}hide(e){if(!!this.state.enabled)return this.setState({...this.state,visible:!1},e),Promise.resolve()}dispose(){this.container.remove()}setState(e,n){if(!this.enabled)return;const o={...this.state};this.state={...this.state,...e,...n},this.stateChangedCallback(o,n)}get visible(){return this.five.state.mode===ye.Five.Mode.Panorama}appendTo(e){!this.enabled||(this.container=e,this.render())}updateState(e){this.setState({...this.state,enabled:this.enabled,visible:this.visible},e)}}function Od(i){ge(i,"svelte-16kdbw2",'.plugin-DoorLabelPlugin-item.svelte-16kdbw2.svelte-16kdbw2{position:absolute;left:0;top:0;width:0;height:0;pointer-events:none;transition:opacity 0.3s ease}.plugin-DoorLabelPlugin-cnt.svelte-16kdbw2.svelte-16kdbw2{position:absolute;top:50%;left:50%;border-radius:2px;background:rgba(0, 0, 0, 0.35);line-height:0.625rem;padding:0.3125rem;white-space:nowrap;font-size:0.625rem;font-style:normal;color:white;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:transform ease 1s, background ease 0.3s, color ease 0.3s}.plugin-DoorLabelPlugin-cnt.svelte-16kdbw2.svelte-16kdbw2::after{content:"";display:block;position:absolute;top:-1px;left:-1px;bottom:-1px;right:-1px;border-radius:2px;border:1px solid rgba(0, 0, 0, 0);-o-border-image:url("//vrlab-image4.ljcdn.com/release/web/highlightCarouseal-border-image.14b51834.png") 4;border-image:url("//vrlab-image4.ljcdn.com/release/web/highlightCarouseal-border-image.14b51834.png") 4;transition:opacity ease 0.3s}.plugin-DoorLabelPlugin-cnt.svelte-16kdbw2.svelte-16kdbw2:active,.plugin-DoorLabelPlugin-cnt.svelte-16kdbw2.svelte-16kdbw2:focus{background:rgba(0, 0, 0, 0.5);color:rgba(255, 255, 255, 0.5)}.plugin-DoorLabelPlugin-icon.svelte-16kdbw2.svelte-16kdbw2{background:url("//vrlab-image4.ljcdn.com/release/web/DoorLabel-icon.de1304ae.svg") no-repeat;background-size:100%;display:inline-block;width:0.52083rem;height:0.52083rem;margin-left:0.20833rem;transform-origin:center}.plugin-DoorLabelPlugin-cnt[data-camera-toward=forward].left.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(90deg)}.plugin-DoorLabelPlugin-cnt[data-camera-toward=forward].right.svelte-16kdbw2 .plugin-DoorLabelPlugin-txt.svelte-16kdbw2{order:1}.plugin-DoorLabelPlugin-cnt[data-camera-toward=forward].right.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(-90deg);margin-left:0;margin-right:0.20833rem;order:0}.plugin-DoorLabelPlugin-cnt[data-camera-toward=right].forward.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(90deg)}.plugin-DoorLabelPlugin-cnt[data-camera-toward=right].back.svelte-16kdbw2 .plugin-DoorLabelPlugin-txt.svelte-16kdbw2{order:1}.plugin-DoorLabelPlugin-cnt[data-camera-toward=right].back.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(-90deg);margin-left:0;margin-right:0.20833rem;order:0}.plugin-DoorLabelPlugin-cnt[data-camera-toward=left].back.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(90deg)}.plugin-DoorLabelPlugin-cnt[data-camera-toward=left].forward.svelte-16kdbw2 .plugin-DoorLabelPlugin-txt.svelte-16kdbw2{order:1}.plugin-DoorLabelPlugin-cnt[data-camera-toward=left].forward.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(-90deg);margin-left:0;margin-right:0.20833rem;order:0}.plugin-DoorLabelPlugin-cnt[data-camera-toward=back].right.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(90deg)}.plugin-DoorLabelPlugin-cnt[data-camera-toward=back].left.svelte-16kdbw2 .plugin-DoorLabelPlugin-txt.svelte-16kdbw2{order:1}.plugin-DoorLabelPlugin-cnt[data-camera-toward=back].left.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(-90deg);margin-left:0;margin-right:0.20833rem;order:0}.plugin-DoorLabelPlugin-cnt--customBrand.svelte-16kdbw2.svelte-16kdbw2{color:#f9eac1}.plugin-DoorLabelPlugin-cnt--customBrand.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{background:url("//vrlab-image4.ljcdn.com/release/web/arrow.6e8ec00e.svg") no-repeat}.plugin-DoorLabelPlugin-cnt--customBrand.svelte-16kdbw2.svelte-16kdbw2:active,.plugin-DoorLabelPlugin-cnt--customBrand.svelte-16kdbw2.svelte-16kdbw2:focus{background:rgba(0, 0, 0, 0.5);color:rgba(249, 234, 193, 0.5)}')}function Rd(i){let t,e,n,o,s,r,a,l;return{c(){t=G("div"),e=G("div"),n=G("span"),n.textContent=`${i[8]}`,o=fe(),s=G("i"),x(n,"class","plugin-DoorLabelPlugin-txt svelte-16kdbw2"),x(s,"class","plugin-DoorLabelPlugin-icon svelte-16kdbw2"),x(e,"class",r=je(tt("plugin-DoorLabelPlugin-cnt",i[0].toward))+" svelte-16kdbw2"),x(e,"style",`transform: ${i[6]||"initial"};pointer-events: ${i[5]?"auto":"none"};opacity: ${i[5]?1:0}`),x(e,"data-camera-toward",i[7]),x(t,"style",`left: ${i[3]||0}%;top: ${i[4]||0}%;opacity: ${i[5]?1:0}`),x(t,"class","plugin-DoorLabelPlugin-item svelte-16kdbw2")},m(c,h){Y(c,t,h),X(t,e),X(e,n),X(e,o),X(e,s),i[10](t),a||(l=qe(e,"click",i[9]),a=!0)},p(c,[h]){h&1&&r!==(r=je(tt("plugin-DoorLabelPlugin-cnt",c[0].toward))+" svelte-16kdbw2")&&x(e,"class",r)},i:ne,o:ne,d(c){c&&Q(t),i[10](null),a=!1,l()}}}function Nd(i,t,e){let{props:n}=t,{onClick:o}=t,s,{left:r,top:a,inSight:l,transform:c,panoIndex:h,cameraToward:f,name:u}=n,m=0;const v=()=>{if(!r||!a||!l||!s)return;const g=s.current.clientWidth/window.innerWidth*100,w=s.current.clientHeight/window.innerHeight*100;if(r<=g/2||r>=100-g/2||a<=w/2||a>=100-w/2)return;h!==m&&(console.log("panoDoorLabelPlugin",h,"\u89E6\u53D1\u57CB\u70B9"),m=h)},b=g=>{o&&o()};function A(g){Rt[g?"unshift":"push"](()=>{s=g,e(2,s)})}return i.$$set=g=>{"props"in g&&e(0,n=g.props),"onClick"in g&&e(1,o=g.onClick)},v(),[n,o,s,r,a,l,c,f,u,b,A]}class Bd extends de{constructor(t){super(),ue(this,t,Nd,Rd,he,{props:0,onClick:1},Od)}}function Hd(i,t){const e=Math.abs(i.top+i.height/2-t.top-t.height/2),n=Math.abs(i.left+i.width/2-t.left-t.width/2),o=(i.height+t.height)/2,s=(i.width+t.width)/2;return!(e>o&&n>s)}function Fd(i){const{camera:t}=i,e=t.getWorldDirection(new M.Vector3);let n=Math.atan(e.z/e.x)*180/Math.PI,o="";return e.x<0&&(n+=180),n<0&&(n+=360),n>315||n<=45?o="right":n>45&&n<=135?o="back":n>135&&n<=225?o="left":n>225&&n<=315&&(o="forward"),o}function Gd(i,t){return Math.sqrt(Math.pow(i.z-t.z,2)+Math.pow(i.x-t.x,2))}function Xd(i){const t=Math.PI/4;return i>-t&&i<=t?"left":i>t*3||i<=-t*3?"right":i>-t*3&&i<=-t?"forward":i>t&&i<=t*3?"back":""}const Qd={userAction:!0};class Wd extends jd{constructor(e){super(e);d(this,"MinVisibledistance",1.8);d(this,"MaxVisibledistance",5);d(this,"OffsetHeight",-1.3);d(this,"rooms");d(this,"floorplanServerData");d(this,"doorLabelItems");d(this,"visibleLabelMap",new Map);d(this,"labelItems",[]);d(this,"doorLabels");d(this,"roomObservers");d(this,"loadData",(e,n)=>{n&&(this.MaxVisibledistance=n.MaxVisibledistance,this.MinVisibledistance=n.MinVisibledistance,this.OffsetHeight=n.OffsetHeight),this.doorLabelItems&&this.doorLabelItems.length>0&&this.doorLabelItems.forEach(o=>{o.$destroy()}),this.labelItems=[],this.doorLabels=[],this.doorLabelItems=[],this.floorplanServerData=e,this.five.once("panoArrived",()=>{console.log("doorplugin","panoArrived"),this.initData()})});d(this,"initRoomObservers",()=>{var s,r;const e=this.floorplanServerData.computed_data.floor_datas||[],o=(((r=(s=this.five)==null?void 0:s.work)==null?void 0:r.observers)||[]).map(a=>{const l=a.panoIndex,c=a.floorIndex,h=e==null?void 0:e.find(f=>f.floor_index===c);if(h){const f=h.rooms.find(u=>u.observer_indexs.includes(l));if(f)return{panoIndex:l,floorIndex:c,name:f.name}}}).filter(Boolean);this.roomObservers=o});d(this,"hideAllLabels",()=>{this.labelItems.forEach(e=>{e.visible=!1,e.inSight=!1}),this.render()});d(this,"fixDoorVisibleAndPosition",()=>{this.initRoomObservers();const{panoIndex:e}=this.five;if(!this.visible||this.five.model.empty||e===null||!this.roomObservers.find(a=>a.panoIndex===e))return;const n=this.roomObservers.find(a=>a.panoIndex===e),s=this.five.work.observers.find(a=>a.panoIndex===e).position.clone(),r=(()=>{if(this.visibleLabelMap.has(e))return this.visibleLabelMap.get(e);{const a=[];return this.doorLabels.forEach((l,c)=>{if(l.roomName===n.name)return;const h=l.position.clone(),f=h.distanceTo(s);if(f<this.MinVisibledistance||f>this.MaxVisibledistance)return;const u=new M.Raycaster,m=h.clone().sub(s).normalize();u.set(s,m);const[v]=this.five.model.intersectRaycaster(u);v&&v.distance+.1<f||a.push(c)}),this.visibleLabelMap.set(e,a),a}})();this.labelItems.forEach((a,l)=>{a.visible=r.includes(l)}),this.fixDoorPosition()});d(this,"fixDoorPosition",()=>{const{panoIndex:e,camera:n}=this.five;if(e===null)return;if(this.five.currentMode!=="Panorama")return this.hideAllLabels();const o=this.five.getElement(),s=o.clientWidth,r=o.clientHeight,a=n.getWorldDirection(new M.Vector3),l=[],c=[...this.labelItems];if(c.forEach((h,f)=>{if(h.visible){const u=n.position.distanceTo(h.position),m=h.position.clone().add(new M.Vector3(0,this.OffsetHeight,0)),b=m.clone().sub(n.position).normalize().angleTo(a),A=m.clone().project(n),g=(A.x+1)/2.2*100,w=(-A.y+1)/2.2*100,E=g>=0&&g<=100&&w>=0&&w<=100&&u>this.MinVisibledistance&&u<=this.MaxVisibledistance;h.left=g,h.top=w,h.inSight=E&&b<Math.PI/2,h.cameraToward=Fd(this.five),E?l.push({disFromCameraToLabel:u,left:g,top:w,index:f}):h.transform="translate(-50%, -50%)"}else h.inSight=!1}),l.length>1){let h=0;l.sort((f,u)=>u.disFromCameraToLabel-f.disFromCameraToLabel);for(let f=1;f<l.length;f++){const{index:u,left:m,top:v}=l[f-1],{index:b,left:A,top:g}=l[f],w=this.container.children[u],E=this.container.children[b];if(!w||!E)return;const k={left:s*m/100,top:r*v/100,width:w.children[0].clientWidth,height:w.children[0].clientHeight},z={left:s*A/100,top:r*g/100,width:E.children[0].clientWidth,height:E.children[0].clientHeight};Hd(k,z)&&(h++,c[u].transform=`translate(-50%, ${(h-1)*100-50}%)`,c[b].transform=`translate(-50%, ${h*100-50}%)`)}}this.labelItems=c,this.render()});d(this,"onClick",(e,n)=>{if(!this.roomObservers)return;const{work:o}=this.five;let s,r,a=1/0;for(let l=0;l<o.observers.length;l++){if(this.roomObservers[l].name!==e)continue;const h=o.observers[l].standingPosition,f=n.distanceTo(h);f<a&&(s=l,r=h.clone().sub(n).normalize(),a=f)}if(r!==null&&s!==null){const l={};if(a>0){const h=new M.Vector3(0,0,-1),f=r.clone(),u=new M.Quaternion;u.setFromUnitVectors(h,f);const m=new M.Euler;m.setFromQuaternion(u,"YXZ"),l.longitude=m.y}this.five.emit("wantsToMoveToPano",s,{},!0)||this.five.moveToPano(s,{longitude:l.longitude})}});d(this,"initData",()=>{var s;this.doorLabels=[];const e=this.five.panoIndex,n=this.floorplanServerData.computed_data.observers[e].floor_index,o=n!==void 0&&((s=this.floorplanServerData.computed_data.floor_datas[n])==null?void 0:s.rooms);this.rooms=o,this.rooms&&this.rooms.length>0&&this.rooms.forEach(r=>{var c;const a=(c=this.floorplanServerData.computed_data.doors)==null?void 0:c.filter(h=>!!(h&&h.name===r.name)),l=this.five.work.observers.filter((h,f)=>!!r.observer_indexs.find(u=>u===f));a&&a.forEach(h=>{const f=h.position;let u=1/0,m;l.forEach(b=>{const A=b.standingPosition,g={x:A.x,y:A.y,z:A.z},w=Gd(f,g);w<u&&(u=w,m=g)}),m&&(f.y=m.y+.01);const v=new M.Vector3(f.x,f.y,f.z);v.add(new M.Vector3(-.2,1.8,0).applyEuler(new M.Euler(0,h.rad,0))),this.doorLabels.push({roomName:r.name,name:h.name,position:v,toward:Xd(h.rad)})})}),this.labelItems=this.doorLabels.map(r=>({...r,left:0,top:0,visible:!1,inSight:!1,transform:"",cameraToward:""})),console.log("doorplugin","labelItems",this.labelItems),this.five.on("wantsToMoveToPano",this.hideAllLabels),this.five.on("modelLoaded",this.fixDoorVisibleAndPosition),this.five.on("panoArrived",this.fixDoorVisibleAndPosition),this.five.on("initAnimationEnded",this.fixDoorPosition),this.five.on("cameraUpdate",this.fixDoorPosition),this.five.on("mouseWheel",this.fixDoorPosition),this.five.on("pinchGesture",this.fixDoorPosition),this.fixDoorVisibleAndPosition()})}stateChangedCallback(e,n){if(this.hooks.hasListener("stateChange")){const o={state:this.state,prevState:e,userAction:n?n.userAction:Qd.userAction};this.hooks.emit("stateChange",o)}}render(){if(!this.enabled){this.doorLabelItems&&this.doorLabelItems.length>0&&this.doorLabelItems.forEach(e=>{e==null||e.$destroy()}),this.doorLabels=void 0;return}this.doorLabelItems&&this.doorLabelItems.forEach(e=>{e.$destroy()}),this.doorLabelItems=[],this.labelItems.forEach(e=>{this.doorLabelItems.push(new Bd({target:this.container,props:{props:e,onClick:()=>{this.onClick(e.name,e.position)}}}))})}initState(){return{enabled:!0,visible:!0}}dispose(){this.five&&(this.five.off("wantsToMoveToPano",this.hideAllLabels),this.five.off("modelLoaded",this.fixDoorVisibleAndPosition),this.five.off("panoArrived",this.fixDoorVisibleAndPosition),this.five.off("initAnimationEnded",this.fixDoorPosition),this.five.off("cameraUpdate",this.fixDoorPosition),this.five.off("mouseWheel",this.fixDoorPosition),this.five.off("pinchGesture",this.fixDoorPosition),super.dispose())}}const Yd=i=>new Wd(i);var Un={},Vd=Zd;function Zd(i,t,e){return i[0]=t[0]+e[0],i[1]=t[1]+e[1],i}var Jd=Ud;function Ud(i,t,e){return i[0]=t,i[1]=e,i}var qd=Kd;function Kd(i,t){var e=t[0],n=t[1],o=e*e+n*n;return o>0&&(o=1/Math.sqrt(o),i[0]=t[0]*o,i[1]=t[1]*o),i}var _d=$d;function $d(i,t,e){return i[0]=t[0]-e[0],i[1]=t[1]-e[1],i}var ef=tf;function tf(i,t){return i[0]*t[0]+i[1]*t[1]}var nf=Vd,xi=Jd,ur=qd,of=_d,sf=ef,bs=[0,0];Un.computeMiter=function(t,e,n,o,s){return nf(t,n,o),ur(t,t),xi(e,-t[1],t[0]),xi(bs,-n[1],n[0]),s/sf(e,bs)};Un.normal=function(t,e){return xi(t,-e[1],e[0]),t};Un.direction=function(t,e,n){return of(t,e,n),ur(t,t),t};var ct=Un,Pt=[0,0],Ln=[0,0],As=[0,0],Ut=[0,0],rf=function(i,t){var e=null,n=[];t&&(i=i.slice(),i.push(i[0]));for(var o=i.length,s=1;s<o;s++){var r=i[s-1],a=i[s],l=s<i.length-1?i[s+1]:null;if(ct.direction(Pt,a,r),e||(e=[0,0],ct.normal(e,Pt)),s===1&&gi(n,e,1),!l)ct.normal(e,Pt),gi(n,e,1);else{ct.direction(Ln,l,a);var c=ct.computeMiter(As,Ut,Pt,Ln,1);gi(n,Ut,c)}}if(i.length>2&&t){var h=i[o-2],f=i[0],u=i[1];ct.direction(Pt,f,h),ct.direction(Ln,u,f),ct.normal(e,Pt);var m=ct.computeMiter(As,Ut,Pt,Ln,1);n[0][0]=Ut.slice(),n[o-1][0]=Ut.slice(),n[0][1]=m,n[o-1][1]=m,n.pop()}return n};function gi(i,t,e){i.push([[t[0],t[1]],e])}const af=2,lf=3,cf=3,hf=2;function uf(i,t){var r,a,l;if(i.length<2)return console.warn("positionList length must be greater than 1"),[];const e=(r=t==null?void 0:t.unitWidth)!=null?r:.5,n=(a=t==null?void 0:t.unitHeight)!=null?a:.5,o=(l=t==null?void 0:t.skipPosition)!=null?l:!1,s=new O.CatmullRomCurve3(i,!1,"catmullrom",1);if(o){const c=Math.ceil(s.getLength()/n*1.5),h=s.getPoints(c),f=[];let u=0;const m=i;return m.forEach((v,b)=>{let A=0,g=99999999;h.forEach((I,D)=>{const L=I.distanceTo(v);L<g&&(A=D,g=L)});const w=h[A+1],E=w==null?void 0:w.distanceTo(v),k=h[A-1],z=k==null?void 0:k.distanceTo(v);if(A>u&&A-u>1){let I=A;k!==void 0&&z>.8&&(I=A+1),k!==void 0&&z>.2&&z<.3?I=A:g>.2&&g<.3&&(I=A+1);let D=u;if(w!==void 0&&E>.2&&E<.3?D=u+1:g>.2&&g<.3&&(D=u),h[D]&&h[D+1]){const N=m[b-1];if(N)if(N.equals(h[D]))D+=1;else{const H=new M.Vector3().subVectors(h[D+1],h[D]),_=new M.Vector3().subVectors(N,h[D]);H.angleTo(_)<Math.PI/2&&(D+=1)}}if(I<D||I-D<=1)return;const L=h.slice(D,I),S=ys(L,e,n);f.push(S),u=A}}),f}else{const c=Math.ceil(s.getLength()),h=s.getPoints(c);return[ys(h,e,n)]}}function ys(i,t,e){const n=t/2,o=e/t,s=i.length,r=rf(i.map(g=>[g.x,g.z])),l=(i.length-1)*af*lf,c=2*s,h=c*cf,f=c*hf,u=new Uint32Array(l),m=new Float32Array(h),v=new Float32Array(f);i.forEach((g,w)=>{});let b=0;for(let g=0;g<i.length;g++){const[w,E]=r[g][0],k=i[g],{x:z,y:I,z:D}=k,L=new M.Vector3(z+w*n,I+.05,D+E*n);m[g*6+0]=L.x,m[g*6+1]=L.y,m[g*6+2]=L.z;const S=new M.Vector3(z-w*n,I+.05,D-E*n);m[g*6+3]=S.x,m[g*6+4]=S.y,m[g*6+5]=S.z,b+=g>0?i[g-1].clone().sub(i[g]).length():0;const N=b/t/o;v[g*4+0]=0,v[g*4+1]=N,v[g*4+2]=1,v[g*4+3]=N,g!==i.length-1&&(u[g*6+0]=g*2+0,u[g*6+1]=g*2+2,u[g*6+2]=g*2+1,u[g*6+3]=g*2+2,u[g*6+4]=g*2+3,u[g*6+5]=g*2+1)}const A=new O.BufferGeometry;return A.setAttribute("position",new O.BufferAttribute(m,3)),A.setAttribute("uv",new O.BufferAttribute(v,2)),A.setIndex(new O.BufferAttribute(u,1)),A}function df(i){var n;const t=new O.TextureLoader().load((n=i==null?void 0:i.textureUrl)!=null?n:"//vrlab-static.ljcdn.com/release/web/arrow6.b6ce0c62.png");return t.wrapS=t.wrapT=O.RepeatWrapping,t.encoding=O.sRGBEncoding,new O.MeshBasicMaterial({color:16777215,map:t,transparent:!0,opacity:.8})}function Ps(i){return i!=null}const dr="v1.0.1",fr="GuideLinePlugin",Ci=`${fr}@${dr}`,ws=i=>`${Ci}--${i}`;class mr extends Lt{constructor(e){super(e);d(this,"state",{visible:!1,enabled:!0,disposed:!1});d(this,"data");d(this,"linesGroup");d(this,"disposedErrorLog",()=>{console.error(`${Ci} is disposed`)});d(this,"actionWhenEnabled",e=>{if(this.state.enabled)return e()});Object.assign(window,{[`__${fr}_DEBUG__`]:this})}async load(e,n,o=!0){const s=this.data?JSON.parse(JSON.stringify(this.data)):void 0,r=await this.formatData(e);this.hooks.emit("dataChange",r,s),this.data=r,this.linesGroup&&this.five.scene.remove(this.linesGroup);const a=this.getLinesGroup(r.routes);!a||(this.linesGroup=a,this.five.scene.add(a),this.handleVisible(this.state.visible),this.handleEnable(this.state.enabled),n&&this.setState(n),this.five.needsRender=!0,this.hooks.emit("dataLoaded",r),console.log(`${Ci} loaded`,r))}async formatData(e){return typeof e=="object"&&e!==null&&e.version&&e.data?e.data:e}async show(e){this.setState({visible:!0},e)}async hide(e){this.setState({visible:!1},e)}enable(e){this.setState({enabled:!0},e)}disable(e){this.setState({enabled:!1},e)}dispose(){this.setState({disposed:!0})}setState(e,n){var s;if(this.state.disposed)return this.disposedErrorLog();const o={...this.state};this.state={...this.state,...e},e.disposed!==void 0&&e.disposed!==o.disposed&&e.disposed&&this.handleDispose(),e.visible!==void 0&&e.visible!==o.visible&&this.handleVisible(e.visible,n==null?void 0:n.userAction),e.enabled!==void 0&&e.enabled!==o.enabled&&this.handleEnable(e.enabled,n==null?void 0:n.userAction),nt(o,this.state,{deep:!0})||(this.hooks.emit("stateChange",{state:this.state,prevState:o,userAction:(s=n==null?void 0:n.userAction)!=null?s:!0}),this.five.needsRender=!0)}handleEnable(e,n=!0){this.linesGroup&&(e?(this.five.scene.add(this.linesGroup),this.actionWhenEnabled(()=>this.hooks.emit("enable",{userAction:n}))):(this.five.scene.remove(this.linesGroup),this.hooks.emit("disable",{userAction:n})))}handleVisible(e,n=!0){this.linesGroup&&(e?(this.linesGroup.visible=!0,this.actionWhenEnabled(()=>this.hooks.emit("show",{userAction:n}))):(this.linesGroup.visible=!1,this.actionWhenEnabled(()=>this.hooks.emit("hide",{userAction:n}))))}handleDispose(){this.linesGroup&&this.five.scene.add(this.linesGroup)}getLinesGroup(e){const n=e.map(this.getLine.bind(this)).filter(Ps),o=new O.Group;if(o.name=ws("route-group"),n.length!==0)return o.add(...n),o}getLine(e){const n=new O.Group,o=e.panoIndexList.map(a=>{var l;return(l=this.five.work.observers[a])==null?void 0:l.standingPosition}).filter(Ps),s=uf(o,{skipPosition:!0,unitWidth:.6,unitHeight:.4});if(!s)return;const r=df({textureUrl:e.arrowTextureUrl});return s.forEach(a=>{const l=new O.Mesh(a,r);l.name=ws("route-line-mesh"),n.add(l)}),n}}d(mr,"lasestVersion",dr);const pr=i=>new mr(i);function Es(i){const t=Math.abs(Math.cos(i.latitude));return new O.Vector3(-Math.sin(i.longitude)*t,-Math.sin(i.latitude),-Math.cos(i.longitude)*t)}function ff(i,t){const e=Es(i),n=Es(t);return e.angleTo(n)}const mf=async i=>{try{i().then(()=>{},()=>{}).catch(()=>{})}catch{}},kn=Math.PI*2;function pf(i){return i>=0&&i<kn?i:(i%kn+kn)%kn}function gf(i){return{longitude:pf(-Math.atan2(i.x,-i.z)),latitude:-Math.asin(i.y/1)}}function vf(i,t,e,n){const o=-i/e,s=i;return o*n+s}function bf(i){return new Promise(t=>{setTimeout(()=>{t()},i)})}const gr="v1.0.6",vr="CruisePlugin",qn=`${vr}@${gr}`,Is=()=>{console.error(`${qn} is disposed`)},Af=()=>{console.warn(`${qn} is disabled`)},yf=()=>{console.error(`${qn} is disabled`)},vi=new Map;class Xi extends Lt{constructor(e){super(e);d(this,"state",{visible:!0,enabled:!0,disposed:!1,playing:!1,speed:1,config:{speedConfig:{rotateSpeed:.001,rotateSpeedUnit:"rad/ms",moveSpeed:.002,moveSpeedUnit:"m/ms"}}});d(this,"data");d(this,"privateState",{playing:!1,currentPlayQueue:[],currentPlayKeyframe:null,broke:!1,disposers:[]});d(this,"GuideLine");Object.assign(window,{[`__${vr}_DEBUG__`]:this});const n=this.setFiveLinearUpdateCamera.bind(this),o=this.setFiveOriginUpdateCamera.bind(this);this.hooks.on("play",n),this.hooks.on("broke",o),this.hooks.on("end",o),this.hooks.on("pause",o),this.privateState.disposers.push(()=>{this.hooks.off("play",n),this.hooks.off("broke",o),this.hooks.off("end",o),this.hooks.off("pause",o)})}async load(e,n,o){var h,f,u,m,v;if(this.state.disposed)return Is();this.privateState.fiveOriginGetProgress||(f=(h=this.five.controller)==null?void 0:h.cameraMotion)!=null&&f.getProgress||(await this.waitFiveLoaded(),this.privateState.fiveOriginGetProgress=(m=(u=this.five.controller)==null?void 0:u.cameraMotion)==null?void 0:m.getProgress),this.clear();const s=this.data?JSON.parse(JSON.stringify(this.data)):void 0,r=await this.formatData(e);this.data=r,this.hooks.emit("dataChange",r,s);let a=[],l;const c=this.data.keyframes.filter(b=>b.data.panoIndex!==void 0);c.filter((b,A)=>{var g;return b.data.panoIndex!==((g=c[A-1])==null?void 0:g.data.panoIndex)}).map(b=>b.data.panoIndex).forEach(b=>{var g,w;const A=(g=this.five.work.observers[b])==null?void 0:g.floorIndex;if(A!==void 0)if(l===A){const E=a.length-1;a[E]=[...(w=a[E])!=null?w:[],b]}else{l=A;const E=a.length;a[E]=[b]}}),this.GuideLine||(this.GuideLine=pr(this.five)),(v=this.GuideLine)==null||v.load({routes:a.map(b=>({panoIndexList:b}))}),this.setState({playing:!1}),this.handleVisible(this.state.visible),this.handleEnable(this.state.enabled),this.changePlayState(this.state.playing),this.changeSpeed(this.state.speed),n&&this.setState(n,{userAction:o}),console.log(`${qn} loaded`,r),this.hooks.emit("dataLoaded",r)}play(e){this.setState({playing:!0},e)}playFrom(e){const{index:n,id:o,userAction:s}=e;this.state.playing&&this.setState({playing:!1},{userAction:s}),this.setState({playing:!0},{userAction:s,playFromIndex:n,playFromId:o})}playFromStart(e){return this.playFrom({...e,index:0})}pause(e){this.setState({playing:!1},e)}async show(e){this.setState({visible:!0},e)}async hide(e){this.setState({visible:!1},e)}enable(e){this.setState({enabled:!0},e)}disable(e){this.setState({enabled:!1},e)}dispose(){this.setState({disposed:!0})}setState(e,n){var s;if(this.state.disposed)return Is();if(!this.state.enabled&&e.enabled!==!0&&e.disposed!==!0)return yf();const o={...this.state};this.state={...this.state,...e},e.disposed!==void 0&&e.disposed!==o.disposed&&e.disposed&&this.handleDispose(),e.visible!==void 0&&e.visible!==o.visible&&this.handleVisible(e.visible,n==null?void 0:n.userAction),e.enabled!==void 0&&e.enabled!==o.enabled&&this.handleEnable(e.enabled,n==null?void 0:n.userAction),e.playing!==void 0&&e.playing!==o.playing&&this.changePlayState(e.playing,n),e.speed!==void 0&&e.speed!==o.speed&&this.changeSpeed(e.speed,n==null?void 0:n.userAction),nt(o,this.state,{deep:!0})||this.hooks.emit("stateChange",{state:this.state,prevState:o,userAction:(s=n==null?void 0:n.userAction)!=null?s:!0})}async formatData(e){this.five.work||await this.waitFiveLoaded();const n=this.five.work.observers,o=(()=>{const s=e;return typeof s=="object"&&s!==null&&s.version&&s.data?s.data:s})();if(o.keyframes)return{keyframesId:ut(),keyframes:o.keyframes.map((s,r)=>{var c;const a=o.keyframes[r+1],l=(()=>!a||a.start===void 0||s.end===void 0?0:a.start-s.end)();return{id:(c=s.uuid)!=null?c:ut(),moveIndex:r,stay:l,index:r,...s}})};if(o.panoIndexList){let s=[];const{moveEffect:r,moveToFirstPanoEffect:a}=o;return this.privateState.moveToFirstPanoEffect=a,o.panoIndexList.filter((l,c)=>l!==o.panoIndexList[c-1]).forEach((l,c)=>{const h=(()=>{var b,A,g,w;const f=o.panoIndexList[c+1];if(f===void 0)return;const u=(b=n[l])==null?void 0:b.position,m=(A=n[f])==null?void 0:A.position;if(!m||!u||((g=n[l])==null?void 0:g.floorIndex)!==((w=n[f])==null?void 0:w.floorIndex))return;const v=new O.Vector3().subVectors(m,u);return gf(v)})();o.moveType===void 0||o.moveType==="justMove"?s.push({moveIndex:c,stay:o.stay,data:{effect:"Move",panoIndex:l,moveEffect:r,...h!=null?h:{}}}):o.moveType==="moveAndRotate"&&(s.push({moveIndex:c,stay:o.stay,data:{effect:"Move",panoIndex:l,moveEffect:r}}),h&&s.push({moveIndex:c,stay:o.stay,data:{effect:"Rotate",panoIndex:l,...h}}))}),{keyframesId:ut(),keyframes:s.map((l,c)=>({id:ut(),index:c,...l}))}}else throw new Error("format error: data no keyframes or no panoIndexList")}handleEnable(e,n=!0){var o,s;e?((o=this.GuideLine)==null||o.enable(),this.hooks.emit("enable",{userAction:n})):((s=this.GuideLine)==null||s.disable(),this.changePlayState(!1,{userAction:n}),this.hooks.emit("disable",{userAction:n})),this.state.enabled=e}handleVisible(e,n=!0){var o,s;e?((o=this.GuideLine)==null||o.show(),this.actionIfStateIsEnabled(()=>this.hooks.emit("show",{userAction:n}))):((s=this.GuideLine)==null||s.hide(),this.actionIfStateIsEnabled(()=>this.hooks.emit("hide",{userAction:n}))),this.state.visible=e}changePlayState(e,n){this.actionIfStateIsEnabled(()=>{var o;return this.hooks.emit("playStateChange",e?"playing":"pause",{userAction:(o=n==null?void 0:n.userAction)!=null?o:!0})}),e?this.handlePlay(n):this.handlePause(n),this.state.playing=e}async handlePlay(e){var m;const{data:n,state:o,privateState:s,hooks:r}=this;if(s.playing||!(n!=null&&n.keyframes)||(n==null?void 0:n.keyframes.length)===0)return;const a=ut();s.playId=a,s.playing=!0,s.broke=!1;const l=n.keyframes,c=this.getPauseData();(e==null?void 0:e.notEmitEvent)!==!0&&r.emit("play",{userAction:(m=e==null?void 0:e.userAction)!=null?m:!0});let h=!1;const u=await(async()=>{var v,b;if((e==null?void 0:e.playFromIndex)!==void 0)return e.playFromIndex;if((e==null?void 0:e.playFromId)!==void 0)return(v=this.data)==null?void 0:v.keyframes.findIndex(A=>A.id===e.playFromId);if(c!=null&&c.keyframeId){const A=(b=this.data)==null?void 0:b.keyframes.find(g=>g.id===c.keyframeId);if(c!=null&&c.fiveState&&await this.move(c.fiveState,{moveEffect:s.moveToFirstPanoEffect}),A){if(A.data.effect==="Move")return A.index;if(A.data.effect==="Rotate"){const g=c.duration!==void 0?c.duration*(1-c.playedProgress):void 0;return await this.playKeyframe(A,{duration:g}),h=!0,A.index+1}}}})();this.clearPauseData();for(const v of l){if(s.broke||!o.playing||!s.playing||a!==s.playId)return;if(!(u!==void 0&&v.index<u))try{r.emit("playIndexChange",v.index,v),await this.playKeyframe(v,{moveEffect:h===!1?s.moveToFirstPanoEffect:void 0,duration:800}),v.stay&&await bf(v.stay),h===!1&&(h=!0)}catch{return Promise.resolve("broke")}}o.playing&&a===s.playId&&(this.setState({playing:!1},{userAction:!1}),r.emit("end"),this.clearPauseData())}handlePause(e){var r;const{state:n,privateState:o,hooks:s}=this;n.playing=!1,o.playing!==!1&&(o.playing=!1,this.setPauseData(),o.broke||this.forceInteruptUpdateCamera(),(e==null?void 0:e.notEmitEvent)!==!0&&s.emit("pause",{userAction:(r=e==null?void 0:e.userAction)!=null?r:!0}))}async playKeyframe(e,n){var s;const{privateState:o}=this;return((s=this.privateState.currentPlayKeyframe)==null?void 0:s.keyframe.id)!==e.id&&(this.privateState.currentPlayKeyframe={keyframe:e}),o.currentPlayQueue.push(this.getPlayPromise(e,n)),this.actionPromiseQueue()}addInterruptListener(e){return this.five.once("gesture",e),this.five.once("modeChange",e),()=>{this.five.off("gesture",e),this.five.once("modeChange",e)}}async getPlayPromise(e,n){var s;const o=e.data;if(n.duration=(s=n==null?void 0:n.duration)!=null?s:e.start!==void 0&&e.end!==void 0?e.end-e.start:void 0,!!o)return new Promise((r,a)=>{let l=!1;this.addInterruptListener(()=>{if(!l)return this.hooks.emit("broke"),this.privateState.broke=!0,this.setState({playing:!1}),l=!0,a(new Error("play is interupted"))});try{if(l)return;const c=()=>{r(),l=!0};switch(o.effect){case"Move":this.move(o,n).then(c);break;case"Rotate":this.rotate(o,n).then(c);break;default:this.rotate(o,n).then(c)}}catch{}})}async actionPromiseQueue(){const{privateState:e}=this;return new Promise((n,o)=>{if(e.currentPlayQueue.length===0){n();return}const s=e.currentPlayQueue.shift();if(!s){n();return}s.then(n,o)}).then(()=>e.currentPlayQueue.length===0?Promise.resolve():this.actionPromiseQueue())}async move(e,n){if(e.mode&&e.mode!==this.five.currentMode)await this.changeMode(e);else if(e.panoIndex!==this.five.panoIndex)await this.changePano(e,n);else return Promise.resolve()}async rotate(e,n){if(e.mode&&e.mode!==this.five.currentMode)await this.changeMode({mode:e.mode,panoIndex:e.panoIndex});else if(e.panoIndex&&e.panoIndex!==this.five.panoIndex)return await this.changePano(e,n);await this.updateCamera(e,n==null?void 0:n.duration)}async updateCamera(e,n=800){const{five:o,privateState:s,state:r}=this;let a=n;const l=(()=>{var u,m;const h=(u=r.config)==null?void 0:u.speedConfig,f=(m=e.rotateSpeed)!=null?m:h==null?void 0:h.rotateSpeed;if((h==null?void 0:h.rotateSpeedUnit)===void 0)return f;if(f!==void 0)return h.rotateSpeedUnit==="rad/ms"?f:f/1e3})();if(l){const h=this.five.getCurrentState();a=ff(h,e)/l}s.currentPlayKeyframe&&(s.currentPlayKeyframe.originDuration=a);const c=this.getSpeededDuration(a);return new Promise(h=>{mf(()=>o.updateCamera(e,c)),setTimeout(()=>h(),c)})}async changePano(e,n){var h;const{five:o,privateState:s,state:r}=this;if(typeof e.panoIndex!="number"||e.panoIndex===o.panoIndex)return;let a=(h=n==null?void 0:n.duration)!=null?h:800;const l=(()=>{var m,v;const f=(m=r.config)==null?void 0:m.speedConfig,u=(v=e.moveSpeed)!=null?v:f==null?void 0:f.moveSpeed;if((f==null?void 0:f.moveSpeedUnit)===void 0)return u;if(u!==void 0)return f.moveSpeedUnit==="m/ms"?u:u/1e3})();if(l&&typeof o.panoIndex=="number"&&typeof e.panoIndex=="number"){const f=o.work.observers[o.panoIndex].position,u=o.work.observers[e.panoIndex].position;a=f.distanceTo(u)/l}s.currentPlayKeyframe&&(s.currentPlayKeyframe.originDuration=a);const c=this.getSpeededDuration(a);return new Promise(f=>{var u,m,v;o.moveToPano(e.panoIndex,{latitude:e.latitude,longitude:e.longitude,fov:e.fov,duration:c,effect:(v=(m=n==null?void 0:n.moveEffect)!=null?m:(u=this.state.config)==null?void 0:u.moveEffect)!=null?v:e.moveEffect,moveCancelCallback:()=>f(),moveEndCallback:()=>f()})})}changeSpeed(e,n=!0){const{state:o,privateState:s,hooks:r}=this,{currentPlayKeyframe:a}=s;if(r.emit("speedChange",e,{userAction:n}),o.playing&&a)try{const l=a.originDuration!==void 0?a.originDuration*(1-this.getProgress()):void 0,c=this.playKeyframe(a.keyframe,{duration:l});s.currentPlayQueue.push(c)}catch{}}getSpeededDuration(e){return e/this.state.speed}getProgress(){return this.five.controller.cameraMotion.progress}async changeMode(e,n){e.mode&&e.mode!==this.five.currentMode&&await this.five.changeMode(e.mode,e,n)}forceInteruptUpdateCamera(){this.five.updateCamera({},0)}getPauseData(){var e,n;if((e=this.data)!=null&&e.keyframesId)return vi.get((n=this.data)==null?void 0:n.keyframesId)}setPauseData(){var e,n,o,s;if((e=this.data)!=null&&e.keyframesId)return vi.set((n=this.data)==null?void 0:n.keyframesId,{keyframeId:(o=this.privateState.currentPlayKeyframe)==null?void 0:o.keyframe.id,fiveState:this.five.getCurrentState(),duration:(s=this.privateState.currentPlayKeyframe)==null?void 0:s.originDuration,playedProgress:this.getProgress()})}clearPauseData(){var e,n;if((e=this.data)!=null&&e.keyframesId)return vi.delete((n=this.data)==null?void 0:n.keyframesId)}clear(){this.clearPauseData(),this.privateState.currentPlayKeyframe=null}handleDispose(){var e,n;this.setState({playing:!1}),this.clearPauseData(),this.clear(),(e=this.GuideLine)==null||e.dispose(),this.GuideLine=void 0,(n=this.privateState.disposers)==null||n.forEach(o=>o==null?void 0:o())}actionIfStateIsEnabled(e,n){if(this.state.enabled)return e();n!=null&&n.warnLog&&Af()}async waitFiveLoaded(){return new Promise(e=>{if(this.five.work){e();return}this.five.once("loaded",()=>{e()})})}setFiveLinearUpdateCamera(){!this.privateState.fiveOriginGetProgress||(this.five.controller.cameraMotion.getProgress=e=>{const n=this.five.controller.cameraMotion,o=e-n.startTime;return o<0?0:o>=n.duration?1:1-vf(1,n.startVelocity,n.duration,o)})}setFiveOriginUpdateCamera(){!this.privateState.fiveOriginGetProgress||(this.five.controller.cameraMotion.getProgress=this.privateState.fiveOriginGetProgress)}}d(Xi,"PluginVersion",gr);const Pf=i=>new Xi(i);exports.CSS3DRenderPlugin=Xn;exports.CameraMovementEffect=Js;exports.CameraMovementPlugin=yh;exports.CruisePlugin=Pf;exports.CruisePluginController=Xi;exports.DIRECTION=jt;exports.DISPLAY_STRATEGY_TYPE=Et;exports.FLOOR_PLAN_ATTACHED_TO=gt;exports.FLOOR_TYPE_MAP=ch;exports.GuideLinePlugin=pr;exports.ITEM_LABEL_PLUGIN_DISPLAY_STRATEGY_TYPE=It;exports.ItemLabelPlugin=Md;exports.Magnifier=$s;exports.MapviewFloorplanPlugin=Gc;exports.ModelChassisCompassPlugin=dh;exports.ModelEntryDoorGuidePlugin=ph;exports.ModelFloorplanPlugin=Nc;exports.ModelItemLabelPlugin=dd;exports.ModelRoomLabelPlugin=Ja;exports.ModelTVVideoPlugin=pd;exports.ModelViewPlugin=$r;exports.PaintBrush=_r;exports.PaintBrushTypeEnum=ht;exports.PanoCompassPlugin=Qh;exports.PanoCursorRaycasterPlugin=pa;exports.PanoDoorLabelPlugin=Yd;exports.PanoFloorplanRadarPlugin=ah;exports.PanoMeasurePlugin=Fu;exports.PanoRulerPlugin=xh;exports.PanoRulerProPlugin=Rh;exports.PanoSpatialTagPlugin=td;exports.ROOM_FETILE_TYPE_MAP=lh;exports.ROOM_TYPE_MAP=hh;exports.Rotation=et;exports.TopviewFloorplanPlugin=Qc;exports.itemLabelPluginServerParams=Sd;exports.modelItemLabelPluginServerParams=fd;exports.modelRoomLabelPluginServerParams=Ua;
package/dist/index.es.js CHANGED
@@ -10162,7 +10162,7 @@ const Wf = (i, { videoElement: t }) => {
10162
10162
  if (!(!w || g.intersectObjects(w).length === 0))
10163
10163
  return e.videoTexture && (e.videoTexture.image.paused || e.videoTexture.image.pause()), !1;
10164
10164
  }, v = (g) => {
10165
- g === "Floorplan" ? n.hide() : n.show();
10165
+ g === "Floorplan" || e.videoTexture.image.played ? n.hide() : n.show();
10166
10166
  }, b = () => {
10167
10167
  if (!e.enabled)
10168
10168
  return;
@@ -11459,7 +11459,7 @@ class wr extends kt {
11459
11459
  async getPlayPromise(e, n) {
11460
11460
  var s;
11461
11461
  const o = e.data;
11462
- if ((s = n == null ? void 0 : n.duration) != null || e.start !== void 0 && e.end !== void 0 && e.end - e.start, !!o)
11462
+ if (n.duration = (s = n == null ? void 0 : n.duration) != null ? s : e.start !== void 0 && e.end !== void 0 ? e.end - e.start : void 0, !!o)
11463
11463
  return new Promise((r, a) => {
11464
11464
  let l = !1;
11465
11465
  this.addInterruptListener(() => {
package/dist/index.js CHANGED
@@ -10162,7 +10162,7 @@ const Wf = (i, { videoElement: t }) => {
10162
10162
  if (!(!w || g.intersectObjects(w).length === 0))
10163
10163
  return e.videoTexture && (e.videoTexture.image.paused || e.videoTexture.image.pause()), !1;
10164
10164
  }, v = (g) => {
10165
- g === "Floorplan" ? n.hide() : n.show();
10165
+ g === "Floorplan" || e.videoTexture.image.played ? n.hide() : n.show();
10166
10166
  }, b = () => {
10167
10167
  if (!e.enabled)
10168
10168
  return;
@@ -11459,7 +11459,7 @@ class wr extends kt {
11459
11459
  async getPlayPromise(e, n) {
11460
11460
  var s;
11461
11461
  const o = e.data;
11462
- if ((s = n == null ? void 0 : n.duration) != null || e.start !== void 0 && e.end !== void 0 && e.end - e.start, !!o)
11462
+ if (n.duration = (s = n == null ? void 0 : n.duration) != null ? s : e.start !== void 0 && e.end !== void 0 ? e.end - e.start : void 0, !!o)
11463
11463
  return new Promise((r, a) => {
11464
11464
  let l = !1;
11465
11465
  this.addInterruptListener(() => {
package/dist/index.umd.js CHANGED
@@ -526,7 +526,7 @@ void main() {
526
526
  width: 100%;
527
527
  height: 100%;
528
528
  z-index: 5;
529
- `,e.container.style.pointerEvents="none";const n=v=>(e.wrapper=v,v.appendChild(e.container),l(),!0),o=v=>{e.itemLabels=Nu(v),l()},s=()=>(e.enabled||(e.enabled=!0,l()),!0),r=()=>(e.enabled&&(e.enabled=!1,l()),!0),a=()=>{h(),e.container.remove()},l=()=>{var v;if(!!e.wrapper){if(!e.enabled||!e.fiveModeEnabled){(v=e.app)==null||v.$destroy(),e.app=void 0;return}e.app?e.app.$set({five:i,itemLabels:e.itemLabels}):e.app=new Ou({target:e.container,props:{five:i,modelOcclusionEnable:e.modelOcclusionEnable,itemLabels:e.itemLabels,wrapper:e.wrapper,hooks:e.hooks,displayStrategyType:e.displayStrategyType}})}},c=()=>{i.on("modeChange",f),i.once("dispose",a)},h=()=>{i.off("modeChange",f)},f=v=>{if(!!e.enabled){if(v!==me.Five.Mode.Floorplan){e.fiveModeEnabled=!1,l();return}i.once("initAnimationEnded",()=>{e.fiveModeEnabled=i.currentMode===me.Five.Mode.Floorplan,l()})}};return c(),{appendTo:n,load:o,enable:s,disable:r,dispose:a,hooks:e.hooks}},Fu={name:"ModelItemLabelPlugin",version:0};var Xt=(i=>(i.TOP_LEFT="topLeft",i.TOP_RIGHT="topRight",i.BOTTOM_LEFT="bottomLeft",i.BOTTOM_RIGHT="bottomRight",i))(Xt||{});function Gu(i){if(i.length===0)return[];if(Array.isArray(i[0]))return i;let t=[];return i.forEach(e=>{const n=[e[Xt.TOP_LEFT],e[Xt.BOTTOM_LEFT],e[Xt.BOTTOM_RIGHT],e[Xt.TOP_RIGHT]];t.push(n)}),t}const Ru=(i,{videoElement:t})=>{const e={videoMeshes:[],videoTextureEnabled:!1,videoSource:"",rectPoints:[],enabled:!1,videoElement:t},n=fn(i),o=new Map,s=g=>{e.videoTexture&&(e.videoTexture.image.muted=g)},r=()=>e.videoTexture?e.videoTexture.image.muted:!0,a=()=>{if(e.enabled||!e.videoTexture)return;e.enabled=!0,e.videoMeshes=c(),e.videoMeshes.forEach(w=>i.scene.add(w));const g=()=>{if(!e.videoTexture)return;const w=()=>{var I;!e.videoTexture||((I=e.videoTexture)==null||I.image.removeEventListener("timeupdate",w),e.videoTextureEnabled=!0,e.videoMeshes.forEach(k=>{k.material.map!==e.videoTexture&&(k.material.map=e.videoTexture)}),i.needsRender=!0)};e.videoTexture.image.addEventListener("timeupdate",w),e.videoTexture&&e.videoMeshes.length&&(e.videoTexture.image.play(),e.videoTexture.image.onplay=()=>{n.hide()},e.videoTexture.image.onpause=()=>{n.show()},e.videoTexture.image.onclick=()=>{e.videoTexture.image.muted=!1,e.videoTexture.image.play()})};if(i.model.loaded)g();else return i.once("modelLoaded",()=>g())},l=()=>{!e.enabled||(e.enabled=!1,e.videoMeshes.forEach(g=>{g.geometry.dispose(),g.material.dispose(),i.scene.remove(g),e.videoTexture&&e.videoTexture.image.pause()}),e.videoMeshes=[],i.needsRender=!0)},c=()=>e.rectPoints.map((g,w)=>{const I=new O.BufferGeometry,k=128,z=[];z.push(...g[0].toArray());for(let D=1;D<k;D++)z.push(g[0].x+(g[1].x-g[0].x)*D/k,g[0].y+(g[1].y-g[0].y)*D/k,g[0].z+(g[1].z-g[0].z)*D/k);z.push(...g[1].toArray()),z.push(...g[2].toArray());for(let D=1;D<k;D++)z.push(g[2].x+(g[3].x-g[2].x)*D/k,g[2].y+(g[3].y-g[2].y)*D/k,g[2].z+(g[3].z-g[2].z)*D/k);z.push(...g[3].toArray());const x=[];x.push(0,1);for(let D=1;D<k;D++)x.push(0,1-D/k);x.push(0,0),x.push(1,0);for(let D=1;D<k;D++)x.push(1,D/k);x.push(1,1);const T=[];for(let D=0;D<k;D++)T.push(D,D+1,k*2-D,D,k*2-D,k*2+1-D);I.setAttribute("position",new O.BufferAttribute(new Float32Array(z),3)),I.setAttribute("uv",new O.BufferAttribute(new Float32Array(x),2)),I.setIndex(new O.BufferAttribute(new Uint32Array(T),1));const L=new O.AxesHelper(10);i.scene.add(L);const S=new O.MeshBasicMaterial({map:e.videoTextureEnabled?e.videoTexture:e.imageTexture,side:O.DoubleSide}),B=new O.Mesh(I,S);B.renderOrder=1,B.name=`ModelTVVideoPlugin-${w}-${performance.now()}`;const G=[g[1],g[2],g[3],g[0]],_=n.create3DDomContainer(G);if(_!=null&&_.container){const D=document.createElement("div");D.classList.add("play-icon"),D.style.width="100%",D.style.height="100%",D.style.display="flex",D.style.justifyContent="center",D.style.alignItems="center",D.style.pointerEvents="none",_.container.appendChild(D);const J=document.createElement("img");J.src="//vrlab-static.ljcdn.com/release/web/play.2ada5b6f.png",J.style.width="200px",J.style.pointerEvents="auto",J.onclick=()=>{e.videoTexture.image.muted=!1,e.videoTexture.image.play()},D.appendChild(J),o.set(B,_)}return B}),h=g=>{const w=new O.TextureLoader().load(g);return w.minFilter=O.LinearFilter,w.magFilter=O.LinearFilter,w.format=O.RGBFormat,w},f=(g,w)=>new Promise((I,k)=>{const z=new XMLHttpRequest;z.onreadystatechange=()=>{if(z.readyState==4)if(z.status==200){const x=window.URL||window.webkitURL;w=w||document.createElement("video"),w.crossOrigin="anonymous",w.muted=!0,w.loop=!0,w.playsInline=!0,w.src=x.createObjectURL(z.response);const T=new O.VideoTexture(w);T.minFilter=O.LinearFilter,T.magFilter=O.LinearFilter,T.format=O.RGBFormat,I(Object.assign(T,{videoSource:g}))}else k(new Error("Video download Error: "+z.status))},z.onerror=x=>k(x),z.open("GET",g),z.responseType="blob",z.send()}),u=async(g,w)=>{const{video_src:I,video_poster_src:k,points:z}=g;e.videoSource=I,e.rectPoints=Gu(z).map(x=>x.map(({x:T,y:L,z:S})=>new O.Vector3(T,L,S))),e.imageTexture=h(k),w&&(e.videoElement=w),e.videoTexture=await f(e.videoSource,e.videoElement),e.enabled=!!g.enable,e.enabled&&a()},m=g=>{if(!e.enabled)return;const w=e.videoMeshes;if(!(!w||g.intersectObjects(w).length===0))return e.videoTexture&&(e.videoTexture.image.paused||e.videoTexture.image.pause()),!1},v=g=>{g==="Floorplan"?n.hide():n.show()},b=()=>{if(!e.enabled)return;const g=i.camera.position;if(o.forEach((w,I)=>{const k=w.css3DObject.position.clone(),z=k.clone().sub(g).normalize(),x=new O.Raycaster(g,z),T=i.model.intersectRaycaster(x)[0],L=k.distanceTo(g),S=.01;T&&T.distance+S<L?w.hide():w.show()}),!r()){const w=e.rectPoints.find(I=>{const k=I[0].clone().add(I[1]).add(I[2]).add(I[3]).divideScalar(4);return I.map(z=>z.clone().add(k).divideScalar(2)).filter(z=>{const x=z.distanceTo(g),T=new O.Raycaster(g,z.clone().sub(g).normalize()),L=i.model.intersectRaycaster(T)[0],S=.01;return!(L&&L.distance+S<x)}).length>=2});(!w||w.length===0)&&s(!0)}},A=()=>{l(),e.videoTexture=void 0,i.off("modeChange",v),i.off("wantsTapGesture",m),i.off("panoArrived",b),i.off("renderFrame",()=>{e.videoMeshes.forEach(g=>{g&&(g.needsRender=!0)})})};return i.on("modeChange",v),i.on("wantsTapGesture",m),i.on("panoArrived",b),i.on("renderFrame",()=>{e.videoMeshes.forEach(g=>{g&&(g.needsRender=!0)})}),{enable:a,disable:l,load:u,dispose:A,state:e,css3DRenderPlugin:n}};function Xu(i){be(i,"svelte-1q3t254",`.item-label-item.svelte-1q3t254.svelte-1q3t254{position:absolute;z-index:0;transform:none;cursor:pointer;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;animation:svelte-1q3t254-fadeIn .3s ease-in}.item-label-item.fold.svelte-1q3t254>.item-label-item__text-wrap.svelte-1q3t254{visibility:hidden}.item-label-item.fold.svelte-1q3t254>.item-label-item__bar.anchor.svelte-1q3t254{visibility:hidden}.item-label-item.fold.svelte-1q3t254>.item-label-item__bar.anchor.svelte-1q3t254:after{visibility:visible}.item-label-item__text-wrap.svelte-1q3t254.svelte-1q3t254{height:-moz-fit-content;height:fit-content;padding:0.625rem 1.04167rem 0.625rem 0.625rem;position:absolute;width:-moz-max-content;width:max-content;max-width:24.63542rem;min-height:4.79167rem;background-image:linear-gradient(269deg, rgba(0, 0, 0, 0.50) 0%, rgba(0, 0, 0, 0.60) 49%, rgba(31, 38, 46, 0.70) 100%);border:1.5px solid rgba(255, 255, 255, .65);border-radius:0.15625rem;color:white;transform:translate(-50%, 0);display:flex;justify-content:flex-start;align-items:center;box-sizing:border-box;overflow:hidden;pointer-events:all}.item-label-item__custom.svelte-1q3t254.svelte-1q3t254{padding:0;max-width:unset;min-height:unset;background-image:unset;border:0;border-radius:0}.icon-wrap.svelte-1q3t254.svelte-1q3t254{width:3.54167rem;height:100%;display:flex;justify-content:center;align-content:center}.icon.svelte-1q3t254.svelte-1q3t254{width:3.54167rem;height:3.54167rem;background-repeat:no-repeat;background-size:contain;background-position:center}.item-label-text.svelte-1q3t254.svelte-1q3t254{margin-left:0.625rem;padding-left:0.625rem;min-height:3.54167rem;height:auto;display:flex;flex-flow:column;justify-content:space-around;align-content:flex-start;border-left:solid rgba(255, 255, 255, .2) 1px;border-top:solid rgba(255, 255, 255, .2) 0;border-right:solid rgba(255, 255, 255, .2) 0;border-bottom:solid rgba(255, 255, 255, .2) 0;pointer-events:auto}.item-model.svelte-1q3t254.svelte-1q3t254{white-space:nowrap;font-size:1.14583rem;font-weight:bold;line-height:1.5625rem}.item-name.svelte-1q3t254.svelte-1q3t254{height:auto;word-wrap:break-word;word-break:break-all;font-size:1.04167rem;line-height:1.45833rem}.item-label-item__bar.svelte-1q3t254.svelte-1q3t254{position:absolute;bottom:0;width:0.15625rem;background-image:linear-gradient(to bottom, white, rgba(255, 255, 255, 0));box-shadow:0 2px 0.41667rem 0 rgba(0, 0, 0, 0.20);pointer-events:none}.item-label-item__bar.anchor.svelte-1q3t254.svelte-1q3t254:after{content:'';position:absolute;bottom:0;width:1.25rem;height:1.25rem;background-image:url("//vrlab-public.ljcdn.com/common/file/web/67e7a198-28c9-47dc-879b-507bd3ae600c.png ");background-position:center;background-size:contain;transform:translate(-0.54688rem, 50%)}@keyframes svelte-1q3t254-fadeIn{from{opacity:0
529
+ `,e.container.style.pointerEvents="none";const n=v=>(e.wrapper=v,v.appendChild(e.container),l(),!0),o=v=>{e.itemLabels=Nu(v),l()},s=()=>(e.enabled||(e.enabled=!0,l()),!0),r=()=>(e.enabled&&(e.enabled=!1,l()),!0),a=()=>{h(),e.container.remove()},l=()=>{var v;if(!!e.wrapper){if(!e.enabled||!e.fiveModeEnabled){(v=e.app)==null||v.$destroy(),e.app=void 0;return}e.app?e.app.$set({five:i,itemLabels:e.itemLabels}):e.app=new Ou({target:e.container,props:{five:i,modelOcclusionEnable:e.modelOcclusionEnable,itemLabels:e.itemLabels,wrapper:e.wrapper,hooks:e.hooks,displayStrategyType:e.displayStrategyType}})}},c=()=>{i.on("modeChange",f),i.once("dispose",a)},h=()=>{i.off("modeChange",f)},f=v=>{if(!!e.enabled){if(v!==me.Five.Mode.Floorplan){e.fiveModeEnabled=!1,l();return}i.once("initAnimationEnded",()=>{e.fiveModeEnabled=i.currentMode===me.Five.Mode.Floorplan,l()})}};return c(),{appendTo:n,load:o,enable:s,disable:r,dispose:a,hooks:e.hooks}},Fu={name:"ModelItemLabelPlugin",version:0};var Xt=(i=>(i.TOP_LEFT="topLeft",i.TOP_RIGHT="topRight",i.BOTTOM_LEFT="bottomLeft",i.BOTTOM_RIGHT="bottomRight",i))(Xt||{});function Gu(i){if(i.length===0)return[];if(Array.isArray(i[0]))return i;let t=[];return i.forEach(e=>{const n=[e[Xt.TOP_LEFT],e[Xt.BOTTOM_LEFT],e[Xt.BOTTOM_RIGHT],e[Xt.TOP_RIGHT]];t.push(n)}),t}const Ru=(i,{videoElement:t})=>{const e={videoMeshes:[],videoTextureEnabled:!1,videoSource:"",rectPoints:[],enabled:!1,videoElement:t},n=fn(i),o=new Map,s=g=>{e.videoTexture&&(e.videoTexture.image.muted=g)},r=()=>e.videoTexture?e.videoTexture.image.muted:!0,a=()=>{if(e.enabled||!e.videoTexture)return;e.enabled=!0,e.videoMeshes=c(),e.videoMeshes.forEach(w=>i.scene.add(w));const g=()=>{if(!e.videoTexture)return;const w=()=>{var I;!e.videoTexture||((I=e.videoTexture)==null||I.image.removeEventListener("timeupdate",w),e.videoTextureEnabled=!0,e.videoMeshes.forEach(k=>{k.material.map!==e.videoTexture&&(k.material.map=e.videoTexture)}),i.needsRender=!0)};e.videoTexture.image.addEventListener("timeupdate",w),e.videoTexture&&e.videoMeshes.length&&(e.videoTexture.image.play(),e.videoTexture.image.onplay=()=>{n.hide()},e.videoTexture.image.onpause=()=>{n.show()},e.videoTexture.image.onclick=()=>{e.videoTexture.image.muted=!1,e.videoTexture.image.play()})};if(i.model.loaded)g();else return i.once("modelLoaded",()=>g())},l=()=>{!e.enabled||(e.enabled=!1,e.videoMeshes.forEach(g=>{g.geometry.dispose(),g.material.dispose(),i.scene.remove(g),e.videoTexture&&e.videoTexture.image.pause()}),e.videoMeshes=[],i.needsRender=!0)},c=()=>e.rectPoints.map((g,w)=>{const I=new O.BufferGeometry,k=128,z=[];z.push(...g[0].toArray());for(let D=1;D<k;D++)z.push(g[0].x+(g[1].x-g[0].x)*D/k,g[0].y+(g[1].y-g[0].y)*D/k,g[0].z+(g[1].z-g[0].z)*D/k);z.push(...g[1].toArray()),z.push(...g[2].toArray());for(let D=1;D<k;D++)z.push(g[2].x+(g[3].x-g[2].x)*D/k,g[2].y+(g[3].y-g[2].y)*D/k,g[2].z+(g[3].z-g[2].z)*D/k);z.push(...g[3].toArray());const x=[];x.push(0,1);for(let D=1;D<k;D++)x.push(0,1-D/k);x.push(0,0),x.push(1,0);for(let D=1;D<k;D++)x.push(1,D/k);x.push(1,1);const T=[];for(let D=0;D<k;D++)T.push(D,D+1,k*2-D,D,k*2-D,k*2+1-D);I.setAttribute("position",new O.BufferAttribute(new Float32Array(z),3)),I.setAttribute("uv",new O.BufferAttribute(new Float32Array(x),2)),I.setIndex(new O.BufferAttribute(new Uint32Array(T),1));const L=new O.AxesHelper(10);i.scene.add(L);const S=new O.MeshBasicMaterial({map:e.videoTextureEnabled?e.videoTexture:e.imageTexture,side:O.DoubleSide}),B=new O.Mesh(I,S);B.renderOrder=1,B.name=`ModelTVVideoPlugin-${w}-${performance.now()}`;const G=[g[1],g[2],g[3],g[0]],_=n.create3DDomContainer(G);if(_!=null&&_.container){const D=document.createElement("div");D.classList.add("play-icon"),D.style.width="100%",D.style.height="100%",D.style.display="flex",D.style.justifyContent="center",D.style.alignItems="center",D.style.pointerEvents="none",_.container.appendChild(D);const J=document.createElement("img");J.src="//vrlab-static.ljcdn.com/release/web/play.2ada5b6f.png",J.style.width="200px",J.style.pointerEvents="auto",J.onclick=()=>{e.videoTexture.image.muted=!1,e.videoTexture.image.play()},D.appendChild(J),o.set(B,_)}return B}),h=g=>{const w=new O.TextureLoader().load(g);return w.minFilter=O.LinearFilter,w.magFilter=O.LinearFilter,w.format=O.RGBFormat,w},f=(g,w)=>new Promise((I,k)=>{const z=new XMLHttpRequest;z.onreadystatechange=()=>{if(z.readyState==4)if(z.status==200){const x=window.URL||window.webkitURL;w=w||document.createElement("video"),w.crossOrigin="anonymous",w.muted=!0,w.loop=!0,w.playsInline=!0,w.src=x.createObjectURL(z.response);const T=new O.VideoTexture(w);T.minFilter=O.LinearFilter,T.magFilter=O.LinearFilter,T.format=O.RGBFormat,I(Object.assign(T,{videoSource:g}))}else k(new Error("Video download Error: "+z.status))},z.onerror=x=>k(x),z.open("GET",g),z.responseType="blob",z.send()}),u=async(g,w)=>{const{video_src:I,video_poster_src:k,points:z}=g;e.videoSource=I,e.rectPoints=Gu(z).map(x=>x.map(({x:T,y:L,z:S})=>new O.Vector3(T,L,S))),e.imageTexture=h(k),w&&(e.videoElement=w),e.videoTexture=await f(e.videoSource,e.videoElement),e.enabled=!!g.enable,e.enabled&&a()},m=g=>{if(!e.enabled)return;const w=e.videoMeshes;if(!(!w||g.intersectObjects(w).length===0))return e.videoTexture&&(e.videoTexture.image.paused||e.videoTexture.image.pause()),!1},v=g=>{g==="Floorplan"||e.videoTexture.image.played?n.hide():n.show()},b=()=>{if(!e.enabled)return;const g=i.camera.position;if(o.forEach((w,I)=>{const k=w.css3DObject.position.clone(),z=k.clone().sub(g).normalize(),x=new O.Raycaster(g,z),T=i.model.intersectRaycaster(x)[0],L=k.distanceTo(g),S=.01;T&&T.distance+S<L?w.hide():w.show()}),!r()){const w=e.rectPoints.find(I=>{const k=I[0].clone().add(I[1]).add(I[2]).add(I[3]).divideScalar(4);return I.map(z=>z.clone().add(k).divideScalar(2)).filter(z=>{const x=z.distanceTo(g),T=new O.Raycaster(g,z.clone().sub(g).normalize()),L=i.model.intersectRaycaster(T)[0],S=.01;return!(L&&L.distance+S<x)}).length>=2});(!w||w.length===0)&&s(!0)}},A=()=>{l(),e.videoTexture=void 0,i.off("modeChange",v),i.off("wantsTapGesture",m),i.off("panoArrived",b),i.off("renderFrame",()=>{e.videoMeshes.forEach(g=>{g&&(g.needsRender=!0)})})};return i.on("modeChange",v),i.on("wantsTapGesture",m),i.on("panoArrived",b),i.on("renderFrame",()=>{e.videoMeshes.forEach(g=>{g&&(g.needsRender=!0)})}),{enable:a,disable:l,load:u,dispose:A,state:e,css3DRenderPlugin:n}};function Xu(i){be(i,"svelte-1q3t254",`.item-label-item.svelte-1q3t254.svelte-1q3t254{position:absolute;z-index:0;transform:none;cursor:pointer;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;animation:svelte-1q3t254-fadeIn .3s ease-in}.item-label-item.fold.svelte-1q3t254>.item-label-item__text-wrap.svelte-1q3t254{visibility:hidden}.item-label-item.fold.svelte-1q3t254>.item-label-item__bar.anchor.svelte-1q3t254{visibility:hidden}.item-label-item.fold.svelte-1q3t254>.item-label-item__bar.anchor.svelte-1q3t254:after{visibility:visible}.item-label-item__text-wrap.svelte-1q3t254.svelte-1q3t254{height:-moz-fit-content;height:fit-content;padding:0.625rem 1.04167rem 0.625rem 0.625rem;position:absolute;width:-moz-max-content;width:max-content;max-width:24.63542rem;min-height:4.79167rem;background-image:linear-gradient(269deg, rgba(0, 0, 0, 0.50) 0%, rgba(0, 0, 0, 0.60) 49%, rgba(31, 38, 46, 0.70) 100%);border:1.5px solid rgba(255, 255, 255, .65);border-radius:0.15625rem;color:white;transform:translate(-50%, 0);display:flex;justify-content:flex-start;align-items:center;box-sizing:border-box;overflow:hidden;pointer-events:all}.item-label-item__custom.svelte-1q3t254.svelte-1q3t254{padding:0;max-width:unset;min-height:unset;background-image:unset;border:0;border-radius:0}.icon-wrap.svelte-1q3t254.svelte-1q3t254{width:3.54167rem;height:100%;display:flex;justify-content:center;align-content:center}.icon.svelte-1q3t254.svelte-1q3t254{width:3.54167rem;height:3.54167rem;background-repeat:no-repeat;background-size:contain;background-position:center}.item-label-text.svelte-1q3t254.svelte-1q3t254{margin-left:0.625rem;padding-left:0.625rem;min-height:3.54167rem;height:auto;display:flex;flex-flow:column;justify-content:space-around;align-content:flex-start;border-left:solid rgba(255, 255, 255, .2) 1px;border-top:solid rgba(255, 255, 255, .2) 0;border-right:solid rgba(255, 255, 255, .2) 0;border-bottom:solid rgba(255, 255, 255, .2) 0;pointer-events:auto}.item-model.svelte-1q3t254.svelte-1q3t254{white-space:nowrap;font-size:1.14583rem;font-weight:bold;line-height:1.5625rem}.item-name.svelte-1q3t254.svelte-1q3t254{height:auto;word-wrap:break-word;word-break:break-all;font-size:1.04167rem;line-height:1.45833rem}.item-label-item__bar.svelte-1q3t254.svelte-1q3t254{position:absolute;bottom:0;width:0.15625rem;background-image:linear-gradient(to bottom, white, rgba(255, 255, 255, 0));box-shadow:0 2px 0.41667rem 0 rgba(0, 0, 0, 0.20);pointer-events:none}.item-label-item__bar.anchor.svelte-1q3t254.svelte-1q3t254:after{content:'';position:absolute;bottom:0;width:1.25rem;height:1.25rem;background-image:url("//vrlab-public.ljcdn.com/common/file/web/67e7a198-28c9-47dc-879b-507bd3ae600c.png ");background-position:center;background-size:contain;transform:translate(-0.54688rem, 50%)}@keyframes svelte-1q3t254-fadeIn{from{opacity:0
530
530
  }to{opacity:1
531
531
  }}`)}function Qu(i){let t,e,n,o=(i[0].code||i[0].id)+"",s,r,a,l=i[0].name+"",c,h=i[0].icon&&Rs(i);return{c(){h&&h.c(),t=pe(),e=X("div"),n=X("span"),s=Ue(o),r=pe(),a=X("span"),c=Ue(l),C(n,"class","item-model svelte-1q3t254"),C(a,"class","item-name svelte-1q3t254"),C(e,"class","item-label-text svelte-1q3t254")},m(f,u){h&&h.m(f,u),Y(f,t,u),Y(f,e,u),Q(e,n),Q(n,s),Q(e,r),Q(e,a),Q(a,c)},p(f,u){f[0].icon?h?h.p(f,u):(h=Rs(f),h.c(),h.m(t.parentNode,t)):h&&(h.d(1),h=null),u&1&&o!==(o=(f[0].code||f[0].id)+"")&&ct(s,o),u&1&&l!==(l=f[0].name+"")&&ct(c,l)},d(f){h&&h.d(f),f&&H(t),f&&H(e)}}}function Hu(i){let t;return{c(){t=X("div")},m(e,n){Y(e,t,n),i[6](t)},p:ne,d(e){e&&H(t),i[6](null)}}}function Rs(i){let t,e,n,o,s;return{c(){t=X("div"),e=X("div"),C(e,"class","icon svelte-1q3t254"),C(e,"style",n=`background-image: url(${i[0].icon})`),C(t,"class","icon-wrap svelte-1q3t254")},m(r,a){Y(r,t,a),Q(t,e),o||(s=qe(t,"click",i[7]),o=!0)},p(r,a){a&1&&n!==(n=`background-image: url(${r[0].icon})`)&&C(e,"style",n)},d(r){r&&H(t),o=!1,s()}}}function Wu(i){let t,e,n,o,s,r,a,l,c,h;function f(v,b){return b&1&&(n=null),n==null&&(n=!!Boolean(typeof v[0].render=="function")),n?Hu:Qu}let u=f(i,-1),m=u(i);return{c(){t=X("div"),e=X("div"),m.c(),s=pe(),r=X("div"),C(e,"class",o=Se(ot("item-label-item__text-wrap",{"item-label-item__custom":Boolean(typeof i[0].render=="function")}))+" svelte-1q3t254"),j(e,"bottom",`${i[0].strokeLength}px`),C(r,"class",a=Se(ot("item-label-item__bar",{anchor:i[1]}))+" svelte-1q3t254"),j(r,"height",`${i[0].strokeLength}px`),C(t,"class",l=Se(ot("item-label-item",{fold:i[0].isFold}))+" svelte-1q3t254"),j(t,"z-index",i[0].zIndex),j(t,"transform",i[0].transform)},m(v,b){Y(v,t,b),Q(t,e),m.m(e,null),Q(t,s),Q(t,r),c||(h=qe(e,"click",i[4]),c=!0)},p(v,[b]){u===(u=f(v,b))&&m?m.p(v,b):(m.d(1),m=u(v),m&&(m.c(),m.m(e,null))),b&1&&o!==(o=Se(ot("item-label-item__text-wrap",{"item-label-item__custom":Boolean(typeof v[0].render=="function")}))+" svelte-1q3t254")&&C(e,"class",o),b&1&&j(e,"bottom",`${v[0].strokeLength}px`),b&2&&a!==(a=Se(ot("item-label-item__bar",{anchor:v[1]}))+" svelte-1q3t254")&&C(r,"class",a),b&1&&j(r,"height",`${v[0].strokeLength}px`),b&1&&l!==(l=Se(ot("item-label-item",{fold:v[0].isFold}))+" svelte-1q3t254")&&C(t,"class",l),b&1&&j(t,"z-index",v[0].zIndex),b&1&&j(t,"transform",v[0].transform)},i:ne,o:ne,d(v){v&&H(t),m.d(),c=!1,h()}}}function Yu(i,t,e){let{itemLabel:n}=t,{hooks:o}=t,{anchorEnabled:s}=t,{onIconClick:r}=t;function a(){o.emit("onLabelClick",n)}let l;function c(f){jt[f?"unshift":"push"](()=>{l=f,e(3,l)})}const h=f=>r(n);return i.$$set=f=>{"itemLabel"in f&&e(0,n=f.itemLabel),"hooks"in f&&e(5,o=f.hooks),"anchorEnabled"in f&&e(1,s=f.anchorEnabled),"onIconClick"in f&&e(2,r=f.onIconClick)},i.$$.update=()=>{if(i.$$.dirty&9&&typeof n.render=="function"&&l&&l.children.length===0){const f=n.render(n);f&&l.appendChild(f)}},[n,s,r,l,a,o,c,h]}class Vu extends fe{constructor(t){super(),de(this,t,Yu,Wu,ue,{itemLabel:0,hooks:5,anchorEnabled:1,onIconClick:2},Xu)}}const{Raycaster:Zu,Vector3:If}=O,Xs=(i,t,e,n)=>{const o=t.clone().sub(e).normalize(),s=new Zu;s.set(e,o);const[r]=i.model.intersectRaycaster(s);return r&&r.distance+.01<n};var Lt=(i=>(i.SMALL="small",i.MIDLLE="middle",i.LARGE="large",i.EXTRA_LARGE="x-large",i))(Lt||{});const Ju=(i,t)=>{switch(t){case Lt.SMALL:return Math.ceil(-27.78*i+85);case Lt.MIDLLE:return Math.ceil(-38.9*i+130);case Lt.LARGE:return Math.ceil(-44.44*i+140);case Lt.EXTRA_LARGE:return Math.ceil(-92.59*i+300)}},Uu=i=>`translate(${i[0]}px, ${i[1]}px)`;function Qs(i){return i.map(t=>({observerIndex:void 0,visible:!1,isFold:!1,...t}))}function qu(i){be(i,"svelte-gk8s47",".item-labels-container.svelte-gk8s47{width:100%;height:100%;position:relative}")}function Hs(i,t,e){const n=i.slice();return n[30]=t[e],n}function Ws(i){let t,e;return t=new Vu({props:{itemLabel:i[30],hooks:i[0],anchorEnabled:i[2],onIconClick:i[6]}}),{c(){Pe(t.$$.fragment)},m(n,o){Ae(t,n,o),e=!0},p(n,o){const s={};o[0]&2&&(s.itemLabel=n[30]),o[0]&1&&(s.hooks=n[0]),o[0]&4&&(s.anchorEnabled=n[2]),t.$set(s)},i(n){e||(R(t.$$.fragment,n),e=!0)},o(n){K(t.$$.fragment,n),e=!1},d(n){ye(t,n)}}}function Ys(i,t){let e,n,o,s=t[30].visible&&Ws(t);return{key:i,first:null,c(){e=Re(),s&&s.c(),n=Re(),this.first=e},m(r,a){Y(r,e,a),s&&s.m(r,a),Y(r,n,a),o=!0},p(r,a){t=r,t[30].visible?s?(s.p(t,a),a[0]&2&&R(s,1)):(s=Ws(t),s.c(),R(s,1),s.m(n.parentNode,n)):s&&(Ce(),K(s,1,1,()=>{s=null}),Ee())},i(r){o||(R(s),o=!0)},o(r){K(s),o=!1},d(r){r&&H(e),s&&s.d(r),r&&H(n)}}}function Ku(i){let t,e=[],n=new Map,o,s,r=i[1];const a=l=>l[30].id;for(let l=0;l<r.length;l+=1){let c=Hs(i,r,l),h=a(c);n.set(h,e[l]=Ys(h,c))}return{c(){t=X("div");for(let l=0;l<e.length;l+=1)e[l].c();C(t,"class","item-labels-container svelte-gk8s47"),Ke(()=>i[12].call(t)),j(t,"opacity",i[5]?1:0)},m(l,c){Y(l,t,c);for(let h=0;h<e.length;h+=1)e[h].m(t,null);o=St(t,i[12].bind(t)),s=!0},p(l,c){c[0]&71&&(r=l[1],Ce(),e=gt(e,c,a,1,l,r,n,t,Ot,Ys,null,Hs),Ee()),c[0]&32&&j(t,"opacity",l[5]?1:0)},i(l){if(!s){for(let c=0;c<r.length;c+=1)R(e[c]);s=!0}},o(l){for(let c=0;c<e.length;c+=1)K(e[c]);s=!1},d(l){l&&H(t);for(let c=0;c<e.length;c+=1)e[c].d();o()}}}let _u=11;function $u(i,t,e){const{Raycaster:n,Vector3:o}=O;let{five:s}=t,{modelOcclusionEnable:r}=t,{itemLabels:a}=t,{hooks:l}=t,{displayStrategyType:c}=t,{maxVisibleDistance:h}=t,f=null,u=null,m=(s==null?void 0:s.currentMode)===me.Five.Mode.Panorama,v,b,A=[],g=!0;const w=(F,$)=>{const U=F.camera.position.clone(),ie=new o($.modelPosition[0],$.modelPosition[1],$.modelPosition[2]),W=ie.distanceTo(U);return h!==void 0&&F.state.mode===me.Five.Mode.Panorama&&W>h?!1:Xs(F,ie.clone().sub(U).normalize(),U,W)},I=F=>{const{camera:$,model:U}=s,{x:ie,y:W,z:te}=F.clone().project($),re=(ie+1)/2,oe=(2-(W+1))/2,Le=Math.abs(te)<1&&[re,oe].every(Oe=>Oe<1&&Oe>=0);return Boolean(Le)},k=(F,$)=>{const U=new o($.modelPosition[0],$.modelPosition[1],$.modelPosition[2]),ie=F.project2d(U),W=ie==null?void 0:ie.x,te=ie==null?void 0:ie.y;return[W,te]},z=(F,$)=>{const U=$.map(W=>{if(F.state.panoIndex!==W.panoIndex)return Object.assign(Object.assign({},W),{visible:!1});const te=k(F,W);W.name.length*_u;const re=Ju(W.modelPosition[1],c),oe=F.currentMode===me.Five.Mode.Panorama?I(new o(W.position[0],W.position[1],W.position[2])):!0,he=r?w(F,W):!1,we=oe&&!he;if(!we)return Object.assign(Object.assign({},W),{visible:we});A.push(te);const Le=Uu(te);return Object.assign(Object.assign({},W),{visible:we,transform:Le,strokeLength:re})}),ie=U.filter(({visible:W})=>W).map(W=>({itemLabelItem:W,distance:new o(W.modelPosition[0],W.modelPosition[1],W.modelPosition[2]).clone().distanceTo(F.camera.position)})).sort((W,te)=>W.distance-te.distance);return U.map(W=>{const te=ie.findIndex(re=>re.itemLabelItem.id===W.id);return te!==void 0?Object.assign(Object.assign({},W),{zIndex:te*10}):W})},x=()=>{A=[],e(1,u=z(s,u))},T=()=>{e(5,g=!1),L()},L=Ns(()=>{e(5,g=!0),x()},300),S=()=>{s.once("renderFrame",x)},B=()=>{window.addEventListener("resize",S,!1)},G=()=>{f!==a&&(e(1,u=Qs(a)),f=a,x())},_=(F,$)=>{let U=[];for(let W=0;W<$.length;W++){const{position:te,panoIndex:re}=$[W],oe=F.distanceTo(te);(h===void 0||oe<=h||s.state.mode!==me.Five.Mode.Panorama)&&U.push({panoIndex:re,obVector:te,distance:oe})}U=U.sort((W,te)=>W.distance-te.distance);let ie;for(let W=0;W<U.length;W++){const{obVector:te,distance:re,panoIndex:oe}=U[W];if(!Xs(s,F,te,re)){ie=oe;break}}return typeof ie=="number"?$[ie]:void 0},D=F=>{if(s.state.mode===me.Five.Mode.Panorama)return;const $=s.work.observers,U=new o().fromArray(F.position),ie=_(U,$);if(ie&&(F.observerIndex=ie.panoIndex),typeof F.observerIndex=="number"){const W=$[F.observerIndex],te=U.clone().sub(W.position).normalize(),re={longitude:Math.PI+Math.atan2(te.x,te.z),latitude:Math.acos(te.y/te.length())-Math.PI/2};s.setState(Object.assign(Object.assign({},re),{mode:me.Five.Mode.Panorama,panoIndex:F.observerIndex})),s.once("initAnimationEnded",()=>{e(1,u=u.map(oe=>Object.assign(Object.assign({},oe),{isFold:oe.id!==F.id}))),s.once("cameraUpdate",()=>{e(1,u=u.map(oe=>Object.assign(Object.assign({},oe),{isFold:!1})))})})}};co(()=>{G()}),It(()=>{e(1,u=Qs(a)),f=a,x(),B(),s.on("cameraUpdate",T)}),Ut(()=>{s.off("cameraUpdate",T),window.removeEventListener("resize",S,!1)});function J(){v=this.clientWidth,b=this.clientHeight,e(3,v),e(4,b)}return i.$$set=F=>{"five"in F&&e(7,s=F.five),"modelOcclusionEnable"in F&&e(8,r=F.modelOcclusionEnable),"itemLabels"in F&&e(9,a=F.itemLabels),"hooks"in F&&e(0,l=F.hooks),"displayStrategyType"in F&&e(10,c=F.displayStrategyType),"maxVisibleDistance"in F&&e(11,h=F.maxVisibleDistance)},[l,u,m,v,b,g,D,s,r,a,c,h,J]}class ed extends fe{constructor(t){super(),de(this,t,$u,Ku,ue,{five:7,modelOcclusionEnable:8,itemLabels:9,hooks:0,displayStrategyType:10,maxVisibleDistance:11},qu,[-1,-1])}}function td(i){return i.item_labels.map(t=>({...t,modelPosition:[t.position[0],t.position[1],t.position[2]],observerIndex:void 0}))}const nd=void 0,id=(i,t)=>{var u,m,v,b;const e={container:document.createElement("div"),data:null,enabled:!0,fiveModeEnabled:!0,itemLabels:[],wrapper:null,app:void 0,hooks:new me.Subscribe,modelOcclusionEnable:(u=t==null?void 0:t.modelOcclusionEnable)!=null?u:!0,onlyVisibleInPanorama:(m=t==null?void 0:t.onlyVisibleInPanorama)!=null?m:!0,displayStrategyType:(v=t==null?void 0:t.displayStrategyType)!=null?v:Lt.SMALL,maxVisibleDistance:(b=t==null?void 0:t.maxVisibleDistance)!=null?b:nd};e.container.setAttribute("class","item-label-plugin-container"),e.container.style.cssText=`
532
532
  position: absolute;
@@ -535,4 +535,4 @@ void main() {
535
535
  width: 100%;
536
536
  height: 100%;
537
537
  z-index: 5;
538
- `,e.container.style.pointerEvents="none";const n=A=>(e.wrapper=A,A.appendChild(e.container),l(),!0),o=A=>{e.itemLabels=td(A),l()},s=()=>(e.enabled||(e.enabled=!0,l()),!0),r=()=>(e.enabled&&(e.enabled=!1,l()),!0),a=()=>{h(),e.container.remove()},l=()=>{var A;if(!!e.wrapper){if(!e.enabled||!e.fiveModeEnabled){(A=e.app)==null||A.$destroy(),e.app=void 0;return}e.app?e.app.$set({five:i,itemLabels:e.itemLabels}):e.app=new ed({target:e.container,props:{five:i,modelOcclusionEnable:e.modelOcclusionEnable,onlyVisibleInPanorama:e.onlyVisibleInPanorama,itemLabels:e.itemLabels,wrapper:e.wrapper,hooks:e.hooks,displayStrategyType:e.displayStrategyType,maxVisibleDistance:e.maxVisibleDistance}})}},c=()=>{i.on("modeChange",f),i.once("dispose",a)},h=()=>{i.off("modeChange",f)},f=A=>{if(A!==me.Five.Mode.Panorama){e.fiveModeEnabled=!1,r();return}i.once("initAnimationEnded",()=>{e.fiveModeEnabled=!0,s()})};return c(),{appendTo:n,load:o,enable:s,disable:r,dispose:a,hooks:e.hooks}},od={name:"ItemLabelPlugin",version:0};class sd extends Wo{constructor(e){super(e);d(this,"state");d(this,"container");d(this,"enabled");this.five=e,this.five.once("dispose",this.dispose),this.enabled=!0,this.state=this.initState()}enable(e){this.enabled=!0,this.updateState({...e,userAction:!0})}disable(e){this.enabled=!1,this.updateState({...e,userAction:!0})}show(e){if(!!this.state.enabled)return this.setState({...this.state,visible:!0},e),Promise.resolve()}hide(e){if(!!this.state.enabled)return this.setState({...this.state,visible:!1},e),Promise.resolve()}dispose(){this.container.remove()}setState(e,n){if(!this.enabled)return;const o={...this.state};this.state={...this.state,...e,...n},this.stateChangedCallback(o,n)}get visible(){return this.five.state.mode===me.Five.Mode.Panorama}appendTo(e){!this.enabled||(this.container=e,this.render())}updateState(e){this.setState({...this.state,enabled:this.enabled,visible:this.visible},e)}}function rd(i){be(i,"svelte-16kdbw2",'.plugin-DoorLabelPlugin-item.svelte-16kdbw2.svelte-16kdbw2{position:absolute;left:0;top:0;width:0;height:0;pointer-events:none;transition:opacity 0.3s ease}.plugin-DoorLabelPlugin-cnt.svelte-16kdbw2.svelte-16kdbw2{position:absolute;top:50%;left:50%;border-radius:2px;background:rgba(0, 0, 0, 0.35);line-height:0.625rem;padding:0.3125rem;white-space:nowrap;font-size:0.625rem;font-style:normal;color:white;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:transform ease 1s, background ease 0.3s, color ease 0.3s}.plugin-DoorLabelPlugin-cnt.svelte-16kdbw2.svelte-16kdbw2::after{content:"";display:block;position:absolute;top:-1px;left:-1px;bottom:-1px;right:-1px;border-radius:2px;border:1px solid rgba(0, 0, 0, 0);-o-border-image:url("//vrlab-image4.ljcdn.com/release/web/highlightCarouseal-border-image.14b51834.png") 4;border-image:url("//vrlab-image4.ljcdn.com/release/web/highlightCarouseal-border-image.14b51834.png") 4;transition:opacity ease 0.3s}.plugin-DoorLabelPlugin-cnt.svelte-16kdbw2.svelte-16kdbw2:active,.plugin-DoorLabelPlugin-cnt.svelte-16kdbw2.svelte-16kdbw2:focus{background:rgba(0, 0, 0, 0.5);color:rgba(255, 255, 255, 0.5)}.plugin-DoorLabelPlugin-icon.svelte-16kdbw2.svelte-16kdbw2{background:url("//vrlab-image4.ljcdn.com/release/web/DoorLabel-icon.de1304ae.svg") no-repeat;background-size:100%;display:inline-block;width:0.52083rem;height:0.52083rem;margin-left:0.20833rem;transform-origin:center}.plugin-DoorLabelPlugin-cnt[data-camera-toward=forward].left.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(90deg)}.plugin-DoorLabelPlugin-cnt[data-camera-toward=forward].right.svelte-16kdbw2 .plugin-DoorLabelPlugin-txt.svelte-16kdbw2{order:1}.plugin-DoorLabelPlugin-cnt[data-camera-toward=forward].right.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(-90deg);margin-left:0;margin-right:0.20833rem;order:0}.plugin-DoorLabelPlugin-cnt[data-camera-toward=right].forward.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(90deg)}.plugin-DoorLabelPlugin-cnt[data-camera-toward=right].back.svelte-16kdbw2 .plugin-DoorLabelPlugin-txt.svelte-16kdbw2{order:1}.plugin-DoorLabelPlugin-cnt[data-camera-toward=right].back.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(-90deg);margin-left:0;margin-right:0.20833rem;order:0}.plugin-DoorLabelPlugin-cnt[data-camera-toward=left].back.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(90deg)}.plugin-DoorLabelPlugin-cnt[data-camera-toward=left].forward.svelte-16kdbw2 .plugin-DoorLabelPlugin-txt.svelte-16kdbw2{order:1}.plugin-DoorLabelPlugin-cnt[data-camera-toward=left].forward.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(-90deg);margin-left:0;margin-right:0.20833rem;order:0}.plugin-DoorLabelPlugin-cnt[data-camera-toward=back].right.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(90deg)}.plugin-DoorLabelPlugin-cnt[data-camera-toward=back].left.svelte-16kdbw2 .plugin-DoorLabelPlugin-txt.svelte-16kdbw2{order:1}.plugin-DoorLabelPlugin-cnt[data-camera-toward=back].left.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(-90deg);margin-left:0;margin-right:0.20833rem;order:0}.plugin-DoorLabelPlugin-cnt--customBrand.svelte-16kdbw2.svelte-16kdbw2{color:#f9eac1}.plugin-DoorLabelPlugin-cnt--customBrand.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{background:url("//vrlab-image4.ljcdn.com/release/web/arrow.6e8ec00e.svg") no-repeat}.plugin-DoorLabelPlugin-cnt--customBrand.svelte-16kdbw2.svelte-16kdbw2:active,.plugin-DoorLabelPlugin-cnt--customBrand.svelte-16kdbw2.svelte-16kdbw2:focus{background:rgba(0, 0, 0, 0.5);color:rgba(249, 234, 193, 0.5)}')}function ad(i){let t,e,n,o,s,r,a,l;return{c(){t=X("div"),e=X("div"),n=X("span"),n.textContent=`${i[8]}`,o=pe(),s=X("i"),C(n,"class","plugin-DoorLabelPlugin-txt svelte-16kdbw2"),C(s,"class","plugin-DoorLabelPlugin-icon svelte-16kdbw2"),C(e,"class",r=Se(ot("plugin-DoorLabelPlugin-cnt",i[0].toward))+" svelte-16kdbw2"),C(e,"style",`transform: ${i[6]||"initial"};pointer-events: ${i[5]?"auto":"none"};opacity: ${i[5]?1:0}`),C(e,"data-camera-toward",i[7]),C(t,"style",`left: ${i[3]||0}%;top: ${i[4]||0}%;opacity: ${i[5]?1:0}`),C(t,"class","plugin-DoorLabelPlugin-item svelte-16kdbw2")},m(c,h){Y(c,t,h),Q(t,e),Q(e,n),Q(e,o),Q(e,s),i[10](t),a||(l=qe(e,"click",i[9]),a=!0)},p(c,[h]){h&1&&r!==(r=Se(ot("plugin-DoorLabelPlugin-cnt",c[0].toward))+" svelte-16kdbw2")&&C(e,"class",r)},i:ne,o:ne,d(c){c&&H(t),i[10](null),a=!1,l()}}}function ld(i,t,e){let{props:n}=t,{onClick:o}=t,s,{left:r,top:a,inSight:l,transform:c,panoIndex:h,cameraToward:f,name:u}=n,m=0;const v=()=>{if(!r||!a||!l||!s)return;const g=s.current.clientWidth/window.innerWidth*100,w=s.current.clientHeight/window.innerHeight*100;if(r<=g/2||r>=100-g/2||a<=w/2||a>=100-w/2)return;h!==m&&(console.log("panoDoorLabelPlugin",h,"\u89E6\u53D1\u57CB\u70B9"),m=h)},b=g=>{o&&o()};function A(g){jt[g?"unshift":"push"](()=>{s=g,e(2,s)})}return i.$$set=g=>{"props"in g&&e(0,n=g.props),"onClick"in g&&e(1,o=g.onClick)},v(),[n,o,s,r,a,l,c,f,u,b,A]}class cd extends fe{constructor(t){super(),de(this,t,ld,ad,ue,{props:0,onClick:1},rd)}}function hd(i,t){const e=Math.abs(i.top+i.height/2-t.top-t.height/2),n=Math.abs(i.left+i.width/2-t.left-t.width/2),o=(i.height+t.height)/2,s=(i.width+t.width)/2;return!(e>o&&n>s)}function ud(i){const{camera:t}=i,e=t.getWorldDirection(new M.Vector3);let n=Math.atan(e.z/e.x)*180/Math.PI,o="";return e.x<0&&(n+=180),n<0&&(n+=360),n>315||n<=45?o="right":n>45&&n<=135?o="back":n>135&&n<=225?o="left":n>225&&n<=315&&(o="forward"),o}function dd(i,t){return Math.sqrt(Math.pow(i.z-t.z,2)+Math.pow(i.x-t.x,2))}function fd(i){const t=Math.PI/4;return i>-t&&i<=t?"left":i>t*3||i<=-t*3?"right":i>-t*3&&i<=-t?"forward":i>t&&i<=t*3?"back":""}const md={userAction:!0};class pd extends sd{constructor(e){super(e);d(this,"MinVisibledistance",1.8);d(this,"MaxVisibledistance",5);d(this,"OffsetHeight",-1.3);d(this,"rooms");d(this,"floorplanServerData");d(this,"doorLabelItems");d(this,"visibleLabelMap",new Map);d(this,"labelItems",[]);d(this,"doorLabels");d(this,"roomObservers");d(this,"loadData",(e,n)=>{n&&(this.MaxVisibledistance=n.MaxVisibledistance,this.MinVisibledistance=n.MinVisibledistance,this.OffsetHeight=n.OffsetHeight),this.doorLabelItems&&this.doorLabelItems.length>0&&this.doorLabelItems.forEach(o=>{o.$destroy()}),this.labelItems=[],this.doorLabels=[],this.doorLabelItems=[],this.floorplanServerData=e,this.five.once("panoArrived",()=>{console.log("doorplugin","panoArrived"),this.initData()})});d(this,"initRoomObservers",()=>{var s,r;const e=this.floorplanServerData.computed_data.floor_datas||[],o=(((r=(s=this.five)==null?void 0:s.work)==null?void 0:r.observers)||[]).map(a=>{const l=a.panoIndex,c=a.floorIndex,h=e==null?void 0:e.find(f=>f.floor_index===c);if(h){const f=h.rooms.find(u=>u.observer_indexs.includes(l));if(f)return{panoIndex:l,floorIndex:c,name:f.name}}}).filter(Boolean);this.roomObservers=o});d(this,"hideAllLabels",()=>{this.labelItems.forEach(e=>{e.visible=!1,e.inSight=!1}),this.render()});d(this,"fixDoorVisibleAndPosition",()=>{this.initRoomObservers();const{panoIndex:e}=this.five;if(!this.visible||this.five.model.empty||e===null||!this.roomObservers.find(a=>a.panoIndex===e))return;const n=this.roomObservers.find(a=>a.panoIndex===e),s=this.five.work.observers.find(a=>a.panoIndex===e).position.clone(),r=(()=>{if(this.visibleLabelMap.has(e))return this.visibleLabelMap.get(e);{const a=[];return this.doorLabels.forEach((l,c)=>{if(l.roomName===n.name)return;const h=l.position.clone(),f=h.distanceTo(s);if(f<this.MinVisibledistance||f>this.MaxVisibledistance)return;const u=new M.Raycaster,m=h.clone().sub(s).normalize();u.set(s,m);const[v]=this.five.model.intersectRaycaster(u);v&&v.distance+.1<f||a.push(c)}),this.visibleLabelMap.set(e,a),a}})();this.labelItems.forEach((a,l)=>{a.visible=r.includes(l)}),this.fixDoorPosition()});d(this,"fixDoorPosition",()=>{const{panoIndex:e,camera:n}=this.five;if(e===null)return;if(this.five.currentMode!=="Panorama")return this.hideAllLabels();const o=this.five.getElement(),s=o.clientWidth,r=o.clientHeight,a=n.getWorldDirection(new M.Vector3),l=[],c=[...this.labelItems];if(c.forEach((h,f)=>{if(h.visible){const u=n.position.distanceTo(h.position),m=h.position.clone().add(new M.Vector3(0,this.OffsetHeight,0)),b=m.clone().sub(n.position).normalize().angleTo(a),A=m.clone().project(n),g=(A.x+1)/2.2*100,w=(-A.y+1)/2.2*100,I=g>=0&&g<=100&&w>=0&&w<=100&&u>this.MinVisibledistance&&u<=this.MaxVisibledistance;h.left=g,h.top=w,h.inSight=I&&b<Math.PI/2,h.cameraToward=ud(this.five),I?l.push({disFromCameraToLabel:u,left:g,top:w,index:f}):h.transform="translate(-50%, -50%)"}else h.inSight=!1}),l.length>1){let h=0;l.sort((f,u)=>u.disFromCameraToLabel-f.disFromCameraToLabel);for(let f=1;f<l.length;f++){const{index:u,left:m,top:v}=l[f-1],{index:b,left:A,top:g}=l[f],w=this.container.children[u],I=this.container.children[b];if(!w||!I)return;const k={left:s*m/100,top:r*v/100,width:w.children[0].clientWidth,height:w.children[0].clientHeight},z={left:s*A/100,top:r*g/100,width:I.children[0].clientWidth,height:I.children[0].clientHeight};hd(k,z)&&(h++,c[u].transform=`translate(-50%, ${(h-1)*100-50}%)`,c[b].transform=`translate(-50%, ${h*100-50}%)`)}}this.labelItems=c,this.render()});d(this,"onClick",(e,n)=>{if(!this.roomObservers)return;const{work:o}=this.five;let s,r,a=1/0;for(let l=0;l<o.observers.length;l++){if(this.roomObservers[l].name!==e)continue;const h=o.observers[l].standingPosition,f=n.distanceTo(h);f<a&&(s=l,r=h.clone().sub(n).normalize(),a=f)}if(r!==null&&s!==null){const l={};if(a>0){const h=new M.Vector3(0,0,-1),f=r.clone(),u=new M.Quaternion;u.setFromUnitVectors(h,f);const m=new M.Euler;m.setFromQuaternion(u,"YXZ"),l.longitude=m.y}this.five.emit("wantsToMoveToPano",s,{},!0)||this.five.moveToPano(s,{longitude:l.longitude})}});d(this,"initData",()=>{var s;this.doorLabels=[];const e=this.five.panoIndex,n=this.floorplanServerData.computed_data.observers[e].floor_index,o=n!==void 0&&((s=this.floorplanServerData.computed_data.floor_datas[n])==null?void 0:s.rooms);this.rooms=o,this.rooms&&this.rooms.length>0&&this.rooms.forEach(r=>{var c;const a=(c=this.floorplanServerData.computed_data.doors)==null?void 0:c.filter(h=>!!(h&&h.name===r.name)),l=this.five.work.observers.filter((h,f)=>!!r.observer_indexs.find(u=>u===f));a&&a.forEach(h=>{const f=h.position;let u=1/0,m;l.forEach(b=>{const A=b.standingPosition,g={x:A.x,y:A.y,z:A.z},w=dd(f,g);w<u&&(u=w,m=g)}),m&&(f.y=m.y+.01);const v=new M.Vector3(f.x,f.y,f.z);v.add(new M.Vector3(-.2,1.8,0).applyEuler(new M.Euler(0,h.rad,0))),this.doorLabels.push({roomName:r.name,name:h.name,position:v,toward:fd(h.rad)})})}),this.labelItems=this.doorLabels.map(r=>({...r,left:0,top:0,visible:!1,inSight:!1,transform:"",cameraToward:""})),console.log("doorplugin","labelItems",this.labelItems),this.five.on("wantsToMoveToPano",this.hideAllLabels),this.five.on("modelLoaded",this.fixDoorVisibleAndPosition),this.five.on("panoArrived",this.fixDoorVisibleAndPosition),this.five.on("initAnimationEnded",this.fixDoorPosition),this.five.on("cameraUpdate",this.fixDoorPosition),this.five.on("mouseWheel",this.fixDoorPosition),this.five.on("pinchGesture",this.fixDoorPosition),this.fixDoorVisibleAndPosition()})}stateChangedCallback(e,n){if(this.hooks.hasListener("stateChange")){const o={state:this.state,prevState:e,userAction:n?n.userAction:md.userAction};this.hooks.emit("stateChange",o)}}render(){if(!this.enabled){this.doorLabelItems&&this.doorLabelItems.length>0&&this.doorLabelItems.forEach(e=>{e==null||e.$destroy()}),this.doorLabels=void 0;return}this.doorLabelItems&&this.doorLabelItems.forEach(e=>{e.$destroy()}),this.doorLabelItems=[],this.labelItems.forEach(e=>{this.doorLabelItems.push(new cd({target:this.container,props:{props:e,onClick:()=>{this.onClick(e.name,e.position)}}}))})}initState(){return{enabled:!0,visible:!0}}dispose(){this.five&&(this.five.off("wantsToMoveToPano",this.hideAllLabels),this.five.off("modelLoaded",this.fixDoorVisibleAndPosition),this.five.off("panoArrived",this.fixDoorVisibleAndPosition),this.five.off("initAnimationEnded",this.fixDoorPosition),this.five.off("cameraUpdate",this.fixDoorPosition),this.five.off("mouseWheel",this.fixDoorPosition),this.five.off("pinchGesture",this.fixDoorPosition),super.dispose())}}const gd=i=>new pd(i);var Gn={},vd=bd;function bd(i,t,e){return i[0]=t[0]+e[0],i[1]=t[1]+e[1],i}var Ad=yd;function yd(i,t,e){return i[0]=t,i[1]=e,i}var Pd=wd;function wd(i,t){var e=t[0],n=t[1],o=e*e+n*n;return o>0&&(o=1/Math.sqrt(o),i[0]=t[0]*o,i[1]=t[1]*o),i}var Id=xd;function xd(i,t,e){return i[0]=t[0]-e[0],i[1]=t[1]-e[1],i}var Cd=Ed;function Ed(i,t){return i[0]*t[0]+i[1]*t[1]}var Ld=vd,Ti=Ad,Vs=Pd,kd=Id,Dd=Cd,Zs=[0,0];Gn.computeMiter=function(t,e,n,o,s){return Ld(t,n,o),Vs(t,t),Ti(e,-t[1],t[0]),Ti(Zs,-n[1],n[0]),s/Dd(e,Zs)},Gn.normal=function(t,e){return Ti(t,-e[1],e[0]),t},Gn.direction=function(t,e,n){return kd(t,e,n),Vs(t,t),t};var ht=Gn,kt=[0,0],Rn=[0,0],Js=[0,0],$t=[0,0],Td=function(i,t){var e=null,n=[];t&&(i=i.slice(),i.push(i[0]));for(var o=i.length,s=1;s<o;s++){var r=i[s-1],a=i[s],l=s<i.length-1?i[s+1]:null;if(ht.direction(kt,a,r),e||(e=[0,0],ht.normal(e,kt)),s===1&&zi(n,e,1),!l)ht.normal(e,kt),zi(n,e,1);else{ht.direction(Rn,l,a);var c=ht.computeMiter(Js,$t,kt,Rn,1);zi(n,$t,c)}}if(i.length>2&&t){var h=i[o-2],f=i[0],u=i[1];ht.direction(kt,f,h),ht.direction(Rn,u,f),ht.normal(e,kt);var m=ht.computeMiter(Js,$t,kt,Rn,1);n[0][0]=$t.slice(),n[o-1][0]=$t.slice(),n[0][1]=m,n[o-1][1]=m,n.pop()}return n};function zi(i,t,e){i.push([[t[0],t[1]],e])}const zd=2,Md=3,Sd=3,jd=2;function Od(i,t){var r,a,l;if(i.length<2)return console.warn("positionList length must be greater than 1"),[];const e=(r=t==null?void 0:t.unitWidth)!=null?r:.5,n=(a=t==null?void 0:t.unitHeight)!=null?a:.5,o=(l=t==null?void 0:t.skipPosition)!=null?l:!1,s=new O.CatmullRomCurve3(i,!1,"catmullrom",1);if(o){const c=Math.ceil(s.getLength()/n*1.5),h=s.getPoints(c),f=[];let u=0;const m=i;return m.forEach((v,b)=>{let A=0,g=99999999;h.forEach((x,T)=>{const L=x.distanceTo(v);L<g&&(A=T,g=L)});const w=h[A+1],I=w==null?void 0:w.distanceTo(v),k=h[A-1],z=k==null?void 0:k.distanceTo(v);if(A>u&&A-u>1){let x=A;k!==void 0&&z>.8&&(x=A+1),k!==void 0&&z>.2&&z<.3?x=A:g>.2&&g<.3&&(x=A+1);let T=u;if(w!==void 0&&I>.2&&I<.3?T=u+1:g>.2&&g<.3&&(T=u),h[T]&&h[T+1]){const B=m[b-1];if(B)if(B.equals(h[T]))T+=1;else{const G=new M.Vector3().subVectors(h[T+1],h[T]),_=new M.Vector3().subVectors(B,h[T]);G.angleTo(_)<Math.PI/2&&(T+=1)}}if(x<T||x-T<=1)return;const L=h.slice(T,x),S=Us(L,e,n);f.push(S),u=A}}),f}else{const c=Math.ceil(s.getLength()),h=s.getPoints(c);return[Us(h,e,n)]}}function Us(i,t,e){const n=t/2,o=e/t,s=i.length,r=Td(i.map(g=>[g.x,g.z])),l=(i.length-1)*zd*Md,c=2*s,h=c*Sd,f=c*jd,u=new Uint32Array(l),m=new Float32Array(h),v=new Float32Array(f);i.forEach((g,w)=>{});let b=0;for(let g=0;g<i.length;g++){const[w,I]=r[g][0],k=i[g],{x:z,y:x,z:T}=k,L=new M.Vector3(z+w*n,x+.05,T+I*n);m[g*6+0]=L.x,m[g*6+1]=L.y,m[g*6+2]=L.z;const S=new M.Vector3(z-w*n,x+.05,T-I*n);m[g*6+3]=S.x,m[g*6+4]=S.y,m[g*6+5]=S.z,b+=g>0?i[g-1].clone().sub(i[g]).length():0;const B=b/t/o;v[g*4+0]=0,v[g*4+1]=B,v[g*4+2]=1,v[g*4+3]=B,g!==i.length-1&&(u[g*6+0]=g*2+0,u[g*6+1]=g*2+2,u[g*6+2]=g*2+1,u[g*6+3]=g*2+2,u[g*6+4]=g*2+3,u[g*6+5]=g*2+1)}const A=new O.BufferGeometry;return A.setAttribute("position",new O.BufferAttribute(m,3)),A.setAttribute("uv",new O.BufferAttribute(v,2)),A.setIndex(new O.BufferAttribute(u,1)),A}function Nd(i){var n;const t=new O.TextureLoader().load((n=i==null?void 0:i.textureUrl)!=null?n:"//vrlab-static.ljcdn.com/release/web/arrow6.b6ce0c62.png");return t.wrapS=t.wrapT=O.RepeatWrapping,t.encoding=O.sRGBEncoding,new O.MeshBasicMaterial({color:16777215,map:t,transparent:!0,opacity:.8})}function qs(i){return i!=null}const Ks="v1.0.1",_s="GuideLinePlugin",Mi=`${_s}@${Ks}`,$s=i=>`${Mi}--${i}`;class er extends Ct{constructor(e){super(e);d(this,"state",{visible:!1,enabled:!0,disposed:!1});d(this,"data");d(this,"linesGroup");d(this,"disposedErrorLog",()=>{console.error(`${Mi} is disposed`)});d(this,"actionWhenEnabled",e=>{if(this.state.enabled)return e()});Object.assign(window,{[`__${_s}_DEBUG__`]:this})}async load(e,n,o=!0){const s=this.data?JSON.parse(JSON.stringify(this.data)):void 0,r=await this.formatData(e);this.hooks.emit("dataChange",r,s),this.data=r,this.linesGroup&&this.five.scene.remove(this.linesGroup);const a=this.getLinesGroup(r.routes);!a||(this.linesGroup=a,this.five.scene.add(a),this.handleVisible(this.state.visible),this.handleEnable(this.state.enabled),n&&this.setState(n),this.five.needsRender=!0,this.hooks.emit("dataLoaded",r),console.log(`${Mi} loaded`,r))}async formatData(e){return typeof e=="object"&&e!==null&&e.version&&e.data?e.data:e}async show(e){this.setState({visible:!0},e)}async hide(e){this.setState({visible:!1},e)}enable(e){this.setState({enabled:!0},e)}disable(e){this.setState({enabled:!1},e)}dispose(){this.setState({disposed:!0})}setState(e,n){var s;if(this.state.disposed)return this.disposedErrorLog();const o={...this.state};this.state={...this.state,...e},e.disposed!==void 0&&e.disposed!==o.disposed&&e.disposed&&this.handleDispose(),e.visible!==void 0&&e.visible!==o.visible&&this.handleVisible(e.visible,n==null?void 0:n.userAction),e.enabled!==void 0&&e.enabled!==o.enabled&&this.handleEnable(e.enabled,n==null?void 0:n.userAction),et(o,this.state,{deep:!0})||(this.hooks.emit("stateChange",{state:this.state,prevState:o,userAction:(s=n==null?void 0:n.userAction)!=null?s:!0}),this.five.needsRender=!0)}handleEnable(e,n=!0){this.linesGroup&&(e?(this.five.scene.add(this.linesGroup),this.actionWhenEnabled(()=>this.hooks.emit("enable",{userAction:n}))):(this.five.scene.remove(this.linesGroup),this.hooks.emit("disable",{userAction:n})))}handleVisible(e,n=!0){this.linesGroup&&(e?(this.linesGroup.visible=!0,this.actionWhenEnabled(()=>this.hooks.emit("show",{userAction:n}))):(this.linesGroup.visible=!1,this.actionWhenEnabled(()=>this.hooks.emit("hide",{userAction:n}))))}handleDispose(){this.linesGroup&&this.five.scene.add(this.linesGroup)}getLinesGroup(e){const n=e.map(this.getLine.bind(this)).filter(qs),o=new O.Group;if(o.name=$s("route-group"),n.length!==0)return o.add(...n),o}getLine(e){const n=new O.Group,o=e.panoIndexList.map(a=>{var l;return(l=this.five.work.observers[a])==null?void 0:l.standingPosition}).filter(qs),s=Od(o,{skipPosition:!0,unitWidth:.6,unitHeight:.4});if(!s)return;const r=Nd({textureUrl:e.arrowTextureUrl});return s.forEach(a=>{const l=new O.Mesh(a,r);l.name=$s("route-line-mesh"),n.add(l)}),n}}d(er,"lasestVersion",Ks);const tr=i=>new er(i);function nr(i){const t=Math.abs(Math.cos(i.latitude));return new O.Vector3(-Math.sin(i.longitude)*t,-Math.sin(i.latitude),-Math.cos(i.longitude)*t)}function Bd(i,t){const e=nr(i),n=nr(t);return e.angleTo(n)}const Fd=async i=>{try{i().then(()=>{},()=>{}).catch(()=>{})}catch{}},Xn=Math.PI*2;function Gd(i){return i>=0&&i<Xn?i:(i%Xn+Xn)%Xn}function Rd(i){return{longitude:Gd(-Math.atan2(i.x,-i.z)),latitude:-Math.asin(i.y/1)}}function Xd(i,t,e,n){const o=-i/e,s=i;return o*n+s}function Qd(i){return new Promise(t=>{setTimeout(()=>{t()},i)})}const ir="v1.0.6",or="CruisePlugin",Qn=`${or}@${ir}`,sr=()=>{console.error(`${Qn} is disposed`)},Hd=()=>{console.warn(`${Qn} is disabled`)},Wd=()=>{console.error(`${Qn} is disabled`)},Si=new Map;class ji extends Ct{constructor(e){super(e);d(this,"state",{visible:!0,enabled:!0,disposed:!1,playing:!1,speed:1,config:{speedConfig:{rotateSpeed:.001,rotateSpeedUnit:"rad/ms",moveSpeed:.002,moveSpeedUnit:"m/ms"}}});d(this,"data");d(this,"privateState",{playing:!1,currentPlayQueue:[],currentPlayKeyframe:null,broke:!1,disposers:[]});d(this,"GuideLine");Object.assign(window,{[`__${or}_DEBUG__`]:this});const n=this.setFiveLinearUpdateCamera.bind(this),o=this.setFiveOriginUpdateCamera.bind(this);this.hooks.on("play",n),this.hooks.on("broke",o),this.hooks.on("end",o),this.hooks.on("pause",o),this.privateState.disposers.push(()=>{this.hooks.off("play",n),this.hooks.off("broke",o),this.hooks.off("end",o),this.hooks.off("pause",o)})}async load(e,n,o){var h,f,u,m,v;if(this.state.disposed)return sr();this.privateState.fiveOriginGetProgress||(f=(h=this.five.controller)==null?void 0:h.cameraMotion)!=null&&f.getProgress||(await this.waitFiveLoaded(),this.privateState.fiveOriginGetProgress=(m=(u=this.five.controller)==null?void 0:u.cameraMotion)==null?void 0:m.getProgress),this.clear();const s=this.data?JSON.parse(JSON.stringify(this.data)):void 0,r=await this.formatData(e);this.data=r,this.hooks.emit("dataChange",r,s);let a=[],l;const c=this.data.keyframes.filter(b=>b.data.panoIndex!==void 0);c.filter((b,A)=>{var g;return b.data.panoIndex!==((g=c[A-1])==null?void 0:g.data.panoIndex)}).map(b=>b.data.panoIndex).forEach(b=>{var g,w;const A=(g=this.five.work.observers[b])==null?void 0:g.floorIndex;if(A!==void 0)if(l===A){const I=a.length-1;a[I]=[...(w=a[I])!=null?w:[],b]}else{l=A;const I=a.length;a[I]=[b]}}),this.GuideLine||(this.GuideLine=tr(this.five)),(v=this.GuideLine)==null||v.load({routes:a.map(b=>({panoIndexList:b}))}),this.setState({playing:!1}),this.handleVisible(this.state.visible),this.handleEnable(this.state.enabled),this.changePlayState(this.state.playing),this.changeSpeed(this.state.speed),n&&this.setState(n,{userAction:o}),console.log(`${Qn} loaded`,r),this.hooks.emit("dataLoaded",r)}play(e){this.setState({playing:!0},e)}playFrom(e){const{index:n,id:o,userAction:s}=e;this.state.playing&&this.setState({playing:!1},{userAction:s}),this.setState({playing:!0},{userAction:s,playFromIndex:n,playFromId:o})}playFromStart(e){return this.playFrom({...e,index:0})}pause(e){this.setState({playing:!1},e)}async show(e){this.setState({visible:!0},e)}async hide(e){this.setState({visible:!1},e)}enable(e){this.setState({enabled:!0},e)}disable(e){this.setState({enabled:!1},e)}dispose(){this.setState({disposed:!0})}setState(e,n){var s;if(this.state.disposed)return sr();if(!this.state.enabled&&e.enabled!==!0&&e.disposed!==!0)return Wd();const o={...this.state};this.state={...this.state,...e},e.disposed!==void 0&&e.disposed!==o.disposed&&e.disposed&&this.handleDispose(),e.visible!==void 0&&e.visible!==o.visible&&this.handleVisible(e.visible,n==null?void 0:n.userAction),e.enabled!==void 0&&e.enabled!==o.enabled&&this.handleEnable(e.enabled,n==null?void 0:n.userAction),e.playing!==void 0&&e.playing!==o.playing&&this.changePlayState(e.playing,n),e.speed!==void 0&&e.speed!==o.speed&&this.changeSpeed(e.speed,n==null?void 0:n.userAction),et(o,this.state,{deep:!0})||this.hooks.emit("stateChange",{state:this.state,prevState:o,userAction:(s=n==null?void 0:n.userAction)!=null?s:!0})}async formatData(e){this.five.work||await this.waitFiveLoaded();const n=this.five.work.observers,o=(()=>{const s=e;return typeof s=="object"&&s!==null&&s.version&&s.data?s.data:s})();if(o.keyframes)return{keyframesId:lt(),keyframes:o.keyframes.map((s,r)=>{var c;const a=o.keyframes[r+1],l=(()=>!a||a.start===void 0||s.end===void 0?0:a.start-s.end)();return{id:(c=s.uuid)!=null?c:lt(),moveIndex:r,stay:l,index:r,...s}})};if(o.panoIndexList){let s=[];const{moveEffect:r,moveToFirstPanoEffect:a}=o;return this.privateState.moveToFirstPanoEffect=a,o.panoIndexList.filter((l,c)=>l!==o.panoIndexList[c-1]).forEach((l,c)=>{const h=(()=>{var b,A,g,w;const f=o.panoIndexList[c+1];if(f===void 0)return;const u=(b=n[l])==null?void 0:b.position,m=(A=n[f])==null?void 0:A.position;if(!m||!u||((g=n[l])==null?void 0:g.floorIndex)!==((w=n[f])==null?void 0:w.floorIndex))return;const v=new O.Vector3().subVectors(m,u);return Rd(v)})();o.moveType===void 0||o.moveType==="justMove"?s.push({moveIndex:c,stay:o.stay,data:{effect:"Move",panoIndex:l,moveEffect:r,...h!=null?h:{}}}):o.moveType==="moveAndRotate"&&(s.push({moveIndex:c,stay:o.stay,data:{effect:"Move",panoIndex:l,moveEffect:r}}),h&&s.push({moveIndex:c,stay:o.stay,data:{effect:"Rotate",panoIndex:l,...h}}))}),{keyframesId:lt(),keyframes:s.map((l,c)=>({id:lt(),index:c,...l}))}}else throw new Error("format error: data no keyframes or no panoIndexList")}handleEnable(e,n=!0){var o,s;e?((o=this.GuideLine)==null||o.enable(),this.hooks.emit("enable",{userAction:n})):((s=this.GuideLine)==null||s.disable(),this.changePlayState(!1,{userAction:n}),this.hooks.emit("disable",{userAction:n})),this.state.enabled=e}handleVisible(e,n=!0){var o,s;e?((o=this.GuideLine)==null||o.show(),this.actionIfStateIsEnabled(()=>this.hooks.emit("show",{userAction:n}))):((s=this.GuideLine)==null||s.hide(),this.actionIfStateIsEnabled(()=>this.hooks.emit("hide",{userAction:n}))),this.state.visible=e}changePlayState(e,n){this.actionIfStateIsEnabled(()=>{var o;return this.hooks.emit("playStateChange",e?"playing":"pause",{userAction:(o=n==null?void 0:n.userAction)!=null?o:!0})}),e?this.handlePlay(n):this.handlePause(n),this.state.playing=e}async handlePlay(e){var m;const{data:n,state:o,privateState:s,hooks:r}=this;if(s.playing||!(n!=null&&n.keyframes)||(n==null?void 0:n.keyframes.length)===0)return;const a=lt();s.playId=a,s.playing=!0,s.broke=!1;const l=n.keyframes,c=this.getPauseData();(e==null?void 0:e.notEmitEvent)!==!0&&r.emit("play",{userAction:(m=e==null?void 0:e.userAction)!=null?m:!0});let h=!1;const u=await(async()=>{var v,b;if((e==null?void 0:e.playFromIndex)!==void 0)return e.playFromIndex;if((e==null?void 0:e.playFromId)!==void 0)return(v=this.data)==null?void 0:v.keyframes.findIndex(A=>A.id===e.playFromId);if(c!=null&&c.keyframeId){const A=(b=this.data)==null?void 0:b.keyframes.find(g=>g.id===c.keyframeId);if(c!=null&&c.fiveState&&await this.move(c.fiveState,{moveEffect:s.moveToFirstPanoEffect}),A){if(A.data.effect==="Move")return A.index;if(A.data.effect==="Rotate"){const g=c.duration!==void 0?c.duration*(1-c.playedProgress):void 0;return await this.playKeyframe(A,{duration:g}),h=!0,A.index+1}}}})();this.clearPauseData();for(const v of l){if(s.broke||!o.playing||!s.playing||a!==s.playId)return;if(!(u!==void 0&&v.index<u))try{r.emit("playIndexChange",v.index,v),await this.playKeyframe(v,{moveEffect:h===!1?s.moveToFirstPanoEffect:void 0,duration:800}),v.stay&&await Qd(v.stay),h===!1&&(h=!0)}catch{return Promise.resolve("broke")}}o.playing&&a===s.playId&&(this.setState({playing:!1},{userAction:!1}),r.emit("end"),this.clearPauseData())}handlePause(e){var r;const{state:n,privateState:o,hooks:s}=this;n.playing=!1,o.playing!==!1&&(o.playing=!1,this.setPauseData(),o.broke||this.forceInteruptUpdateCamera(),(e==null?void 0:e.notEmitEvent)!==!0&&s.emit("pause",{userAction:(r=e==null?void 0:e.userAction)!=null?r:!0}))}async playKeyframe(e,n){var s;const{privateState:o}=this;return((s=this.privateState.currentPlayKeyframe)==null?void 0:s.keyframe.id)!==e.id&&(this.privateState.currentPlayKeyframe={keyframe:e}),o.currentPlayQueue.push(this.getPlayPromise(e,n)),this.actionPromiseQueue()}addInterruptListener(e){return this.five.once("gesture",e),this.five.once("modeChange",e),()=>{this.five.off("gesture",e),this.five.once("modeChange",e)}}async getPlayPromise(e,n){var s;const o=e.data;if((s=n==null?void 0:n.duration)!=null||e.start!==void 0&&e.end!==void 0&&e.end-e.start,!!o)return new Promise((r,a)=>{let l=!1;this.addInterruptListener(()=>{if(!l)return this.hooks.emit("broke"),this.privateState.broke=!0,this.setState({playing:!1}),l=!0,a(new Error("play is interupted"))});try{if(l)return;const c=()=>{r(),l=!0};switch(o.effect){case"Move":this.move(o,n).then(c);break;case"Rotate":this.rotate(o,n).then(c);break;default:this.rotate(o,n).then(c)}}catch{}})}async actionPromiseQueue(){const{privateState:e}=this;return new Promise((n,o)=>{if(e.currentPlayQueue.length===0){n();return}const s=e.currentPlayQueue.shift();if(!s){n();return}s.then(n,o)}).then(()=>e.currentPlayQueue.length===0?Promise.resolve():this.actionPromiseQueue())}async move(e,n){if(e.mode&&e.mode!==this.five.currentMode)await this.changeMode(e);else if(e.panoIndex!==this.five.panoIndex)await this.changePano(e,n);else return Promise.resolve()}async rotate(e,n){if(e.mode&&e.mode!==this.five.currentMode)await this.changeMode({mode:e.mode,panoIndex:e.panoIndex});else if(e.panoIndex&&e.panoIndex!==this.five.panoIndex)return await this.changePano(e,n);await this.updateCamera(e,n==null?void 0:n.duration)}async updateCamera(e,n=800){const{five:o,privateState:s,state:r}=this;let a=n;const l=(()=>{var u,m;const h=(u=r.config)==null?void 0:u.speedConfig,f=(m=e.rotateSpeed)!=null?m:h==null?void 0:h.rotateSpeed;if((h==null?void 0:h.rotateSpeedUnit)===void 0)return f;if(f!==void 0)return h.rotateSpeedUnit==="rad/ms"?f:f/1e3})();if(l){const h=this.five.getCurrentState();a=Bd(h,e)/l}s.currentPlayKeyframe&&(s.currentPlayKeyframe.originDuration=a);const c=this.getSpeededDuration(a);return new Promise(h=>{Fd(()=>o.updateCamera(e,c)),setTimeout(()=>h(),c)})}async changePano(e,n){var h;const{five:o,privateState:s,state:r}=this;if(typeof e.panoIndex!="number"||e.panoIndex===o.panoIndex)return;let a=(h=n==null?void 0:n.duration)!=null?h:800;const l=(()=>{var m,v;const f=(m=r.config)==null?void 0:m.speedConfig,u=(v=e.moveSpeed)!=null?v:f==null?void 0:f.moveSpeed;if((f==null?void 0:f.moveSpeedUnit)===void 0)return u;if(u!==void 0)return f.moveSpeedUnit==="m/ms"?u:u/1e3})();if(l&&typeof o.panoIndex=="number"&&typeof e.panoIndex=="number"){const f=o.work.observers[o.panoIndex].position,u=o.work.observers[e.panoIndex].position;a=f.distanceTo(u)/l}s.currentPlayKeyframe&&(s.currentPlayKeyframe.originDuration=a);const c=this.getSpeededDuration(a);return new Promise(f=>{var u,m,v;o.moveToPano(e.panoIndex,{latitude:e.latitude,longitude:e.longitude,fov:e.fov,duration:c,effect:(v=(m=n==null?void 0:n.moveEffect)!=null?m:(u=this.state.config)==null?void 0:u.moveEffect)!=null?v:e.moveEffect,moveCancelCallback:()=>f(),moveEndCallback:()=>f()})})}changeSpeed(e,n=!0){const{state:o,privateState:s,hooks:r}=this,{currentPlayKeyframe:a}=s;if(r.emit("speedChange",e,{userAction:n}),o.playing&&a)try{const l=a.originDuration!==void 0?a.originDuration*(1-this.getProgress()):void 0,c=this.playKeyframe(a.keyframe,{duration:l});s.currentPlayQueue.push(c)}catch{}}getSpeededDuration(e){return e/this.state.speed}getProgress(){return this.five.controller.cameraMotion.progress}async changeMode(e,n){e.mode&&e.mode!==this.five.currentMode&&await this.five.changeMode(e.mode,e,n)}forceInteruptUpdateCamera(){this.five.updateCamera({},0)}getPauseData(){var e,n;if((e=this.data)!=null&&e.keyframesId)return Si.get((n=this.data)==null?void 0:n.keyframesId)}setPauseData(){var e,n,o,s;if((e=this.data)!=null&&e.keyframesId)return Si.set((n=this.data)==null?void 0:n.keyframesId,{keyframeId:(o=this.privateState.currentPlayKeyframe)==null?void 0:o.keyframe.id,fiveState:this.five.getCurrentState(),duration:(s=this.privateState.currentPlayKeyframe)==null?void 0:s.originDuration,playedProgress:this.getProgress()})}clearPauseData(){var e,n;if((e=this.data)!=null&&e.keyframesId)return Si.delete((n=this.data)==null?void 0:n.keyframesId)}clear(){this.clearPauseData(),this.privateState.currentPlayKeyframe=null}handleDispose(){var e,n;this.setState({playing:!1}),this.clearPauseData(),this.clear(),(e=this.GuideLine)==null||e.dispose(),this.GuideLine=void 0,(n=this.privateState.disposers)==null||n.forEach(o=>o==null?void 0:o())}actionIfStateIsEnabled(e,n){if(this.state.enabled)return e();n!=null&&n.warnLog&&Hd()}async waitFiveLoaded(){return new Promise(e=>{if(this.five.work){e();return}this.five.once("loaded",()=>{e()})})}setFiveLinearUpdateCamera(){!this.privateState.fiveOriginGetProgress||(this.five.controller.cameraMotion.getProgress=e=>{const n=this.five.controller.cameraMotion,o=e-n.startTime;return o<0?0:o>=n.duration?1:1-Xd(1,n.startVelocity,n.duration,o)})}setFiveOriginUpdateCamera(){!this.privateState.fiveOriginGetProgress||(this.five.controller.cameraMotion.getProgress=this.privateState.fiveOriginGetProgress)}}d(ji,"PluginVersion",ir);const Yd=i=>new ji(i);ee.CSS3DRenderPlugin=fn,ee.CameraMovementEffect=es,ee.CameraMovementPlugin=qc,ee.CruisePlugin=Yd,ee.CruisePluginController=ji,ee.DIRECTION=Xt,ee.DISPLAY_STRATEGY_TYPE=Et,ee.FLOOR_PLAN_ATTACHED_TO=vt,ee.FLOOR_TYPE_MAP=Gc,ee.GuideLinePlugin=tr,ee.ITEM_LABEL_PLUGIN_DISPLAY_STRATEGY_TYPE=Lt,ee.ItemLabelPlugin=id,ee.Magnifier=fs,ee.MapviewFloorplanPlugin=vc,ee.ModelChassisCompassPlugin=Qc,ee.ModelEntryDoorGuidePlugin=Yc,ee.ModelFloorplanPlugin=fc,ee.ModelItemLabelPlugin=Bu,ee.ModelRoomLabelPlugin=xa,ee.ModelTVVideoPlugin=Ru,ee.ModelViewPlugin=Tr,ee.PaintBrush=Dr,ee.PaintBrushTypeEnum=at,ee.PanoCompassPlugin=Ah,ee.PanoCursorRaycasterPlugin=Yr,ee.PanoDoorLabelPlugin=gd,ee.PanoFloorplanRadarPlugin=Bc,ee.PanoMeasurePlugin=uu,ee.PanoRulerPlugin=th,ee.PanoRulerProPlugin=dh,ee.PanoSpatialTagPlugin=Eu,ee.ROOM_FETILE_TYPE_MAP=Fc,ee.ROOM_TYPE_MAP=Rc,ee.Rotation=tt,ee.TopviewFloorplanPlugin=Ac,ee.itemLabelPluginServerParams=od,ee.modelItemLabelPluginServerParams=Fu,ee.modelRoomLabelPluginServerParams=Ca,Object.defineProperties(ee,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
538
+ `,e.container.style.pointerEvents="none";const n=A=>(e.wrapper=A,A.appendChild(e.container),l(),!0),o=A=>{e.itemLabels=td(A),l()},s=()=>(e.enabled||(e.enabled=!0,l()),!0),r=()=>(e.enabled&&(e.enabled=!1,l()),!0),a=()=>{h(),e.container.remove()},l=()=>{var A;if(!!e.wrapper){if(!e.enabled||!e.fiveModeEnabled){(A=e.app)==null||A.$destroy(),e.app=void 0;return}e.app?e.app.$set({five:i,itemLabels:e.itemLabels}):e.app=new ed({target:e.container,props:{five:i,modelOcclusionEnable:e.modelOcclusionEnable,onlyVisibleInPanorama:e.onlyVisibleInPanorama,itemLabels:e.itemLabels,wrapper:e.wrapper,hooks:e.hooks,displayStrategyType:e.displayStrategyType,maxVisibleDistance:e.maxVisibleDistance}})}},c=()=>{i.on("modeChange",f),i.once("dispose",a)},h=()=>{i.off("modeChange",f)},f=A=>{if(A!==me.Five.Mode.Panorama){e.fiveModeEnabled=!1,r();return}i.once("initAnimationEnded",()=>{e.fiveModeEnabled=!0,s()})};return c(),{appendTo:n,load:o,enable:s,disable:r,dispose:a,hooks:e.hooks}},od={name:"ItemLabelPlugin",version:0};class sd extends Wo{constructor(e){super(e);d(this,"state");d(this,"container");d(this,"enabled");this.five=e,this.five.once("dispose",this.dispose),this.enabled=!0,this.state=this.initState()}enable(e){this.enabled=!0,this.updateState({...e,userAction:!0})}disable(e){this.enabled=!1,this.updateState({...e,userAction:!0})}show(e){if(!!this.state.enabled)return this.setState({...this.state,visible:!0},e),Promise.resolve()}hide(e){if(!!this.state.enabled)return this.setState({...this.state,visible:!1},e),Promise.resolve()}dispose(){this.container.remove()}setState(e,n){if(!this.enabled)return;const o={...this.state};this.state={...this.state,...e,...n},this.stateChangedCallback(o,n)}get visible(){return this.five.state.mode===me.Five.Mode.Panorama}appendTo(e){!this.enabled||(this.container=e,this.render())}updateState(e){this.setState({...this.state,enabled:this.enabled,visible:this.visible},e)}}function rd(i){be(i,"svelte-16kdbw2",'.plugin-DoorLabelPlugin-item.svelte-16kdbw2.svelte-16kdbw2{position:absolute;left:0;top:0;width:0;height:0;pointer-events:none;transition:opacity 0.3s ease}.plugin-DoorLabelPlugin-cnt.svelte-16kdbw2.svelte-16kdbw2{position:absolute;top:50%;left:50%;border-radius:2px;background:rgba(0, 0, 0, 0.35);line-height:0.625rem;padding:0.3125rem;white-space:nowrap;font-size:0.625rem;font-style:normal;color:white;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:transform ease 1s, background ease 0.3s, color ease 0.3s}.plugin-DoorLabelPlugin-cnt.svelte-16kdbw2.svelte-16kdbw2::after{content:"";display:block;position:absolute;top:-1px;left:-1px;bottom:-1px;right:-1px;border-radius:2px;border:1px solid rgba(0, 0, 0, 0);-o-border-image:url("//vrlab-image4.ljcdn.com/release/web/highlightCarouseal-border-image.14b51834.png") 4;border-image:url("//vrlab-image4.ljcdn.com/release/web/highlightCarouseal-border-image.14b51834.png") 4;transition:opacity ease 0.3s}.plugin-DoorLabelPlugin-cnt.svelte-16kdbw2.svelte-16kdbw2:active,.plugin-DoorLabelPlugin-cnt.svelte-16kdbw2.svelte-16kdbw2:focus{background:rgba(0, 0, 0, 0.5);color:rgba(255, 255, 255, 0.5)}.plugin-DoorLabelPlugin-icon.svelte-16kdbw2.svelte-16kdbw2{background:url("//vrlab-image4.ljcdn.com/release/web/DoorLabel-icon.de1304ae.svg") no-repeat;background-size:100%;display:inline-block;width:0.52083rem;height:0.52083rem;margin-left:0.20833rem;transform-origin:center}.plugin-DoorLabelPlugin-cnt[data-camera-toward=forward].left.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(90deg)}.plugin-DoorLabelPlugin-cnt[data-camera-toward=forward].right.svelte-16kdbw2 .plugin-DoorLabelPlugin-txt.svelte-16kdbw2{order:1}.plugin-DoorLabelPlugin-cnt[data-camera-toward=forward].right.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(-90deg);margin-left:0;margin-right:0.20833rem;order:0}.plugin-DoorLabelPlugin-cnt[data-camera-toward=right].forward.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(90deg)}.plugin-DoorLabelPlugin-cnt[data-camera-toward=right].back.svelte-16kdbw2 .plugin-DoorLabelPlugin-txt.svelte-16kdbw2{order:1}.plugin-DoorLabelPlugin-cnt[data-camera-toward=right].back.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(-90deg);margin-left:0;margin-right:0.20833rem;order:0}.plugin-DoorLabelPlugin-cnt[data-camera-toward=left].back.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(90deg)}.plugin-DoorLabelPlugin-cnt[data-camera-toward=left].forward.svelte-16kdbw2 .plugin-DoorLabelPlugin-txt.svelte-16kdbw2{order:1}.plugin-DoorLabelPlugin-cnt[data-camera-toward=left].forward.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(-90deg);margin-left:0;margin-right:0.20833rem;order:0}.plugin-DoorLabelPlugin-cnt[data-camera-toward=back].right.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(90deg)}.plugin-DoorLabelPlugin-cnt[data-camera-toward=back].left.svelte-16kdbw2 .plugin-DoorLabelPlugin-txt.svelte-16kdbw2{order:1}.plugin-DoorLabelPlugin-cnt[data-camera-toward=back].left.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{transform:rotate(-90deg);margin-left:0;margin-right:0.20833rem;order:0}.plugin-DoorLabelPlugin-cnt--customBrand.svelte-16kdbw2.svelte-16kdbw2{color:#f9eac1}.plugin-DoorLabelPlugin-cnt--customBrand.svelte-16kdbw2 .plugin-DoorLabelPlugin-icon.svelte-16kdbw2{background:url("//vrlab-image4.ljcdn.com/release/web/arrow.6e8ec00e.svg") no-repeat}.plugin-DoorLabelPlugin-cnt--customBrand.svelte-16kdbw2.svelte-16kdbw2:active,.plugin-DoorLabelPlugin-cnt--customBrand.svelte-16kdbw2.svelte-16kdbw2:focus{background:rgba(0, 0, 0, 0.5);color:rgba(249, 234, 193, 0.5)}')}function ad(i){let t,e,n,o,s,r,a,l;return{c(){t=X("div"),e=X("div"),n=X("span"),n.textContent=`${i[8]}`,o=pe(),s=X("i"),C(n,"class","plugin-DoorLabelPlugin-txt svelte-16kdbw2"),C(s,"class","plugin-DoorLabelPlugin-icon svelte-16kdbw2"),C(e,"class",r=Se(ot("plugin-DoorLabelPlugin-cnt",i[0].toward))+" svelte-16kdbw2"),C(e,"style",`transform: ${i[6]||"initial"};pointer-events: ${i[5]?"auto":"none"};opacity: ${i[5]?1:0}`),C(e,"data-camera-toward",i[7]),C(t,"style",`left: ${i[3]||0}%;top: ${i[4]||0}%;opacity: ${i[5]?1:0}`),C(t,"class","plugin-DoorLabelPlugin-item svelte-16kdbw2")},m(c,h){Y(c,t,h),Q(t,e),Q(e,n),Q(e,o),Q(e,s),i[10](t),a||(l=qe(e,"click",i[9]),a=!0)},p(c,[h]){h&1&&r!==(r=Se(ot("plugin-DoorLabelPlugin-cnt",c[0].toward))+" svelte-16kdbw2")&&C(e,"class",r)},i:ne,o:ne,d(c){c&&H(t),i[10](null),a=!1,l()}}}function ld(i,t,e){let{props:n}=t,{onClick:o}=t,s,{left:r,top:a,inSight:l,transform:c,panoIndex:h,cameraToward:f,name:u}=n,m=0;const v=()=>{if(!r||!a||!l||!s)return;const g=s.current.clientWidth/window.innerWidth*100,w=s.current.clientHeight/window.innerHeight*100;if(r<=g/2||r>=100-g/2||a<=w/2||a>=100-w/2)return;h!==m&&(console.log("panoDoorLabelPlugin",h,"\u89E6\u53D1\u57CB\u70B9"),m=h)},b=g=>{o&&o()};function A(g){jt[g?"unshift":"push"](()=>{s=g,e(2,s)})}return i.$$set=g=>{"props"in g&&e(0,n=g.props),"onClick"in g&&e(1,o=g.onClick)},v(),[n,o,s,r,a,l,c,f,u,b,A]}class cd extends fe{constructor(t){super(),de(this,t,ld,ad,ue,{props:0,onClick:1},rd)}}function hd(i,t){const e=Math.abs(i.top+i.height/2-t.top-t.height/2),n=Math.abs(i.left+i.width/2-t.left-t.width/2),o=(i.height+t.height)/2,s=(i.width+t.width)/2;return!(e>o&&n>s)}function ud(i){const{camera:t}=i,e=t.getWorldDirection(new M.Vector3);let n=Math.atan(e.z/e.x)*180/Math.PI,o="";return e.x<0&&(n+=180),n<0&&(n+=360),n>315||n<=45?o="right":n>45&&n<=135?o="back":n>135&&n<=225?o="left":n>225&&n<=315&&(o="forward"),o}function dd(i,t){return Math.sqrt(Math.pow(i.z-t.z,2)+Math.pow(i.x-t.x,2))}function fd(i){const t=Math.PI/4;return i>-t&&i<=t?"left":i>t*3||i<=-t*3?"right":i>-t*3&&i<=-t?"forward":i>t&&i<=t*3?"back":""}const md={userAction:!0};class pd extends sd{constructor(e){super(e);d(this,"MinVisibledistance",1.8);d(this,"MaxVisibledistance",5);d(this,"OffsetHeight",-1.3);d(this,"rooms");d(this,"floorplanServerData");d(this,"doorLabelItems");d(this,"visibleLabelMap",new Map);d(this,"labelItems",[]);d(this,"doorLabels");d(this,"roomObservers");d(this,"loadData",(e,n)=>{n&&(this.MaxVisibledistance=n.MaxVisibledistance,this.MinVisibledistance=n.MinVisibledistance,this.OffsetHeight=n.OffsetHeight),this.doorLabelItems&&this.doorLabelItems.length>0&&this.doorLabelItems.forEach(o=>{o.$destroy()}),this.labelItems=[],this.doorLabels=[],this.doorLabelItems=[],this.floorplanServerData=e,this.five.once("panoArrived",()=>{console.log("doorplugin","panoArrived"),this.initData()})});d(this,"initRoomObservers",()=>{var s,r;const e=this.floorplanServerData.computed_data.floor_datas||[],o=(((r=(s=this.five)==null?void 0:s.work)==null?void 0:r.observers)||[]).map(a=>{const l=a.panoIndex,c=a.floorIndex,h=e==null?void 0:e.find(f=>f.floor_index===c);if(h){const f=h.rooms.find(u=>u.observer_indexs.includes(l));if(f)return{panoIndex:l,floorIndex:c,name:f.name}}}).filter(Boolean);this.roomObservers=o});d(this,"hideAllLabels",()=>{this.labelItems.forEach(e=>{e.visible=!1,e.inSight=!1}),this.render()});d(this,"fixDoorVisibleAndPosition",()=>{this.initRoomObservers();const{panoIndex:e}=this.five;if(!this.visible||this.five.model.empty||e===null||!this.roomObservers.find(a=>a.panoIndex===e))return;const n=this.roomObservers.find(a=>a.panoIndex===e),s=this.five.work.observers.find(a=>a.panoIndex===e).position.clone(),r=(()=>{if(this.visibleLabelMap.has(e))return this.visibleLabelMap.get(e);{const a=[];return this.doorLabels.forEach((l,c)=>{if(l.roomName===n.name)return;const h=l.position.clone(),f=h.distanceTo(s);if(f<this.MinVisibledistance||f>this.MaxVisibledistance)return;const u=new M.Raycaster,m=h.clone().sub(s).normalize();u.set(s,m);const[v]=this.five.model.intersectRaycaster(u);v&&v.distance+.1<f||a.push(c)}),this.visibleLabelMap.set(e,a),a}})();this.labelItems.forEach((a,l)=>{a.visible=r.includes(l)}),this.fixDoorPosition()});d(this,"fixDoorPosition",()=>{const{panoIndex:e,camera:n}=this.five;if(e===null)return;if(this.five.currentMode!=="Panorama")return this.hideAllLabels();const o=this.five.getElement(),s=o.clientWidth,r=o.clientHeight,a=n.getWorldDirection(new M.Vector3),l=[],c=[...this.labelItems];if(c.forEach((h,f)=>{if(h.visible){const u=n.position.distanceTo(h.position),m=h.position.clone().add(new M.Vector3(0,this.OffsetHeight,0)),b=m.clone().sub(n.position).normalize().angleTo(a),A=m.clone().project(n),g=(A.x+1)/2.2*100,w=(-A.y+1)/2.2*100,I=g>=0&&g<=100&&w>=0&&w<=100&&u>this.MinVisibledistance&&u<=this.MaxVisibledistance;h.left=g,h.top=w,h.inSight=I&&b<Math.PI/2,h.cameraToward=ud(this.five),I?l.push({disFromCameraToLabel:u,left:g,top:w,index:f}):h.transform="translate(-50%, -50%)"}else h.inSight=!1}),l.length>1){let h=0;l.sort((f,u)=>u.disFromCameraToLabel-f.disFromCameraToLabel);for(let f=1;f<l.length;f++){const{index:u,left:m,top:v}=l[f-1],{index:b,left:A,top:g}=l[f],w=this.container.children[u],I=this.container.children[b];if(!w||!I)return;const k={left:s*m/100,top:r*v/100,width:w.children[0].clientWidth,height:w.children[0].clientHeight},z={left:s*A/100,top:r*g/100,width:I.children[0].clientWidth,height:I.children[0].clientHeight};hd(k,z)&&(h++,c[u].transform=`translate(-50%, ${(h-1)*100-50}%)`,c[b].transform=`translate(-50%, ${h*100-50}%)`)}}this.labelItems=c,this.render()});d(this,"onClick",(e,n)=>{if(!this.roomObservers)return;const{work:o}=this.five;let s,r,a=1/0;for(let l=0;l<o.observers.length;l++){if(this.roomObservers[l].name!==e)continue;const h=o.observers[l].standingPosition,f=n.distanceTo(h);f<a&&(s=l,r=h.clone().sub(n).normalize(),a=f)}if(r!==null&&s!==null){const l={};if(a>0){const h=new M.Vector3(0,0,-1),f=r.clone(),u=new M.Quaternion;u.setFromUnitVectors(h,f);const m=new M.Euler;m.setFromQuaternion(u,"YXZ"),l.longitude=m.y}this.five.emit("wantsToMoveToPano",s,{},!0)||this.five.moveToPano(s,{longitude:l.longitude})}});d(this,"initData",()=>{var s;this.doorLabels=[];const e=this.five.panoIndex,n=this.floorplanServerData.computed_data.observers[e].floor_index,o=n!==void 0&&((s=this.floorplanServerData.computed_data.floor_datas[n])==null?void 0:s.rooms);this.rooms=o,this.rooms&&this.rooms.length>0&&this.rooms.forEach(r=>{var c;const a=(c=this.floorplanServerData.computed_data.doors)==null?void 0:c.filter(h=>!!(h&&h.name===r.name)),l=this.five.work.observers.filter((h,f)=>!!r.observer_indexs.find(u=>u===f));a&&a.forEach(h=>{const f=h.position;let u=1/0,m;l.forEach(b=>{const A=b.standingPosition,g={x:A.x,y:A.y,z:A.z},w=dd(f,g);w<u&&(u=w,m=g)}),m&&(f.y=m.y+.01);const v=new M.Vector3(f.x,f.y,f.z);v.add(new M.Vector3(-.2,1.8,0).applyEuler(new M.Euler(0,h.rad,0))),this.doorLabels.push({roomName:r.name,name:h.name,position:v,toward:fd(h.rad)})})}),this.labelItems=this.doorLabels.map(r=>({...r,left:0,top:0,visible:!1,inSight:!1,transform:"",cameraToward:""})),console.log("doorplugin","labelItems",this.labelItems),this.five.on("wantsToMoveToPano",this.hideAllLabels),this.five.on("modelLoaded",this.fixDoorVisibleAndPosition),this.five.on("panoArrived",this.fixDoorVisibleAndPosition),this.five.on("initAnimationEnded",this.fixDoorPosition),this.five.on("cameraUpdate",this.fixDoorPosition),this.five.on("mouseWheel",this.fixDoorPosition),this.five.on("pinchGesture",this.fixDoorPosition),this.fixDoorVisibleAndPosition()})}stateChangedCallback(e,n){if(this.hooks.hasListener("stateChange")){const o={state:this.state,prevState:e,userAction:n?n.userAction:md.userAction};this.hooks.emit("stateChange",o)}}render(){if(!this.enabled){this.doorLabelItems&&this.doorLabelItems.length>0&&this.doorLabelItems.forEach(e=>{e==null||e.$destroy()}),this.doorLabels=void 0;return}this.doorLabelItems&&this.doorLabelItems.forEach(e=>{e.$destroy()}),this.doorLabelItems=[],this.labelItems.forEach(e=>{this.doorLabelItems.push(new cd({target:this.container,props:{props:e,onClick:()=>{this.onClick(e.name,e.position)}}}))})}initState(){return{enabled:!0,visible:!0}}dispose(){this.five&&(this.five.off("wantsToMoveToPano",this.hideAllLabels),this.five.off("modelLoaded",this.fixDoorVisibleAndPosition),this.five.off("panoArrived",this.fixDoorVisibleAndPosition),this.five.off("initAnimationEnded",this.fixDoorPosition),this.five.off("cameraUpdate",this.fixDoorPosition),this.five.off("mouseWheel",this.fixDoorPosition),this.five.off("pinchGesture",this.fixDoorPosition),super.dispose())}}const gd=i=>new pd(i);var Gn={},vd=bd;function bd(i,t,e){return i[0]=t[0]+e[0],i[1]=t[1]+e[1],i}var Ad=yd;function yd(i,t,e){return i[0]=t,i[1]=e,i}var Pd=wd;function wd(i,t){var e=t[0],n=t[1],o=e*e+n*n;return o>0&&(o=1/Math.sqrt(o),i[0]=t[0]*o,i[1]=t[1]*o),i}var Id=xd;function xd(i,t,e){return i[0]=t[0]-e[0],i[1]=t[1]-e[1],i}var Cd=Ed;function Ed(i,t){return i[0]*t[0]+i[1]*t[1]}var Ld=vd,Ti=Ad,Vs=Pd,kd=Id,Dd=Cd,Zs=[0,0];Gn.computeMiter=function(t,e,n,o,s){return Ld(t,n,o),Vs(t,t),Ti(e,-t[1],t[0]),Ti(Zs,-n[1],n[0]),s/Dd(e,Zs)},Gn.normal=function(t,e){return Ti(t,-e[1],e[0]),t},Gn.direction=function(t,e,n){return kd(t,e,n),Vs(t,t),t};var ht=Gn,kt=[0,0],Rn=[0,0],Js=[0,0],$t=[0,0],Td=function(i,t){var e=null,n=[];t&&(i=i.slice(),i.push(i[0]));for(var o=i.length,s=1;s<o;s++){var r=i[s-1],a=i[s],l=s<i.length-1?i[s+1]:null;if(ht.direction(kt,a,r),e||(e=[0,0],ht.normal(e,kt)),s===1&&zi(n,e,1),!l)ht.normal(e,kt),zi(n,e,1);else{ht.direction(Rn,l,a);var c=ht.computeMiter(Js,$t,kt,Rn,1);zi(n,$t,c)}}if(i.length>2&&t){var h=i[o-2],f=i[0],u=i[1];ht.direction(kt,f,h),ht.direction(Rn,u,f),ht.normal(e,kt);var m=ht.computeMiter(Js,$t,kt,Rn,1);n[0][0]=$t.slice(),n[o-1][0]=$t.slice(),n[0][1]=m,n[o-1][1]=m,n.pop()}return n};function zi(i,t,e){i.push([[t[0],t[1]],e])}const zd=2,Md=3,Sd=3,jd=2;function Od(i,t){var r,a,l;if(i.length<2)return console.warn("positionList length must be greater than 1"),[];const e=(r=t==null?void 0:t.unitWidth)!=null?r:.5,n=(a=t==null?void 0:t.unitHeight)!=null?a:.5,o=(l=t==null?void 0:t.skipPosition)!=null?l:!1,s=new O.CatmullRomCurve3(i,!1,"catmullrom",1);if(o){const c=Math.ceil(s.getLength()/n*1.5),h=s.getPoints(c),f=[];let u=0;const m=i;return m.forEach((v,b)=>{let A=0,g=99999999;h.forEach((x,T)=>{const L=x.distanceTo(v);L<g&&(A=T,g=L)});const w=h[A+1],I=w==null?void 0:w.distanceTo(v),k=h[A-1],z=k==null?void 0:k.distanceTo(v);if(A>u&&A-u>1){let x=A;k!==void 0&&z>.8&&(x=A+1),k!==void 0&&z>.2&&z<.3?x=A:g>.2&&g<.3&&(x=A+1);let T=u;if(w!==void 0&&I>.2&&I<.3?T=u+1:g>.2&&g<.3&&(T=u),h[T]&&h[T+1]){const B=m[b-1];if(B)if(B.equals(h[T]))T+=1;else{const G=new M.Vector3().subVectors(h[T+1],h[T]),_=new M.Vector3().subVectors(B,h[T]);G.angleTo(_)<Math.PI/2&&(T+=1)}}if(x<T||x-T<=1)return;const L=h.slice(T,x),S=Us(L,e,n);f.push(S),u=A}}),f}else{const c=Math.ceil(s.getLength()),h=s.getPoints(c);return[Us(h,e,n)]}}function Us(i,t,e){const n=t/2,o=e/t,s=i.length,r=Td(i.map(g=>[g.x,g.z])),l=(i.length-1)*zd*Md,c=2*s,h=c*Sd,f=c*jd,u=new Uint32Array(l),m=new Float32Array(h),v=new Float32Array(f);i.forEach((g,w)=>{});let b=0;for(let g=0;g<i.length;g++){const[w,I]=r[g][0],k=i[g],{x:z,y:x,z:T}=k,L=new M.Vector3(z+w*n,x+.05,T+I*n);m[g*6+0]=L.x,m[g*6+1]=L.y,m[g*6+2]=L.z;const S=new M.Vector3(z-w*n,x+.05,T-I*n);m[g*6+3]=S.x,m[g*6+4]=S.y,m[g*6+5]=S.z,b+=g>0?i[g-1].clone().sub(i[g]).length():0;const B=b/t/o;v[g*4+0]=0,v[g*4+1]=B,v[g*4+2]=1,v[g*4+3]=B,g!==i.length-1&&(u[g*6+0]=g*2+0,u[g*6+1]=g*2+2,u[g*6+2]=g*2+1,u[g*6+3]=g*2+2,u[g*6+4]=g*2+3,u[g*6+5]=g*2+1)}const A=new O.BufferGeometry;return A.setAttribute("position",new O.BufferAttribute(m,3)),A.setAttribute("uv",new O.BufferAttribute(v,2)),A.setIndex(new O.BufferAttribute(u,1)),A}function Nd(i){var n;const t=new O.TextureLoader().load((n=i==null?void 0:i.textureUrl)!=null?n:"//vrlab-static.ljcdn.com/release/web/arrow6.b6ce0c62.png");return t.wrapS=t.wrapT=O.RepeatWrapping,t.encoding=O.sRGBEncoding,new O.MeshBasicMaterial({color:16777215,map:t,transparent:!0,opacity:.8})}function qs(i){return i!=null}const Ks="v1.0.1",_s="GuideLinePlugin",Mi=`${_s}@${Ks}`,$s=i=>`${Mi}--${i}`;class er extends Ct{constructor(e){super(e);d(this,"state",{visible:!1,enabled:!0,disposed:!1});d(this,"data");d(this,"linesGroup");d(this,"disposedErrorLog",()=>{console.error(`${Mi} is disposed`)});d(this,"actionWhenEnabled",e=>{if(this.state.enabled)return e()});Object.assign(window,{[`__${_s}_DEBUG__`]:this})}async load(e,n,o=!0){const s=this.data?JSON.parse(JSON.stringify(this.data)):void 0,r=await this.formatData(e);this.hooks.emit("dataChange",r,s),this.data=r,this.linesGroup&&this.five.scene.remove(this.linesGroup);const a=this.getLinesGroup(r.routes);!a||(this.linesGroup=a,this.five.scene.add(a),this.handleVisible(this.state.visible),this.handleEnable(this.state.enabled),n&&this.setState(n),this.five.needsRender=!0,this.hooks.emit("dataLoaded",r),console.log(`${Mi} loaded`,r))}async formatData(e){return typeof e=="object"&&e!==null&&e.version&&e.data?e.data:e}async show(e){this.setState({visible:!0},e)}async hide(e){this.setState({visible:!1},e)}enable(e){this.setState({enabled:!0},e)}disable(e){this.setState({enabled:!1},e)}dispose(){this.setState({disposed:!0})}setState(e,n){var s;if(this.state.disposed)return this.disposedErrorLog();const o={...this.state};this.state={...this.state,...e},e.disposed!==void 0&&e.disposed!==o.disposed&&e.disposed&&this.handleDispose(),e.visible!==void 0&&e.visible!==o.visible&&this.handleVisible(e.visible,n==null?void 0:n.userAction),e.enabled!==void 0&&e.enabled!==o.enabled&&this.handleEnable(e.enabled,n==null?void 0:n.userAction),et(o,this.state,{deep:!0})||(this.hooks.emit("stateChange",{state:this.state,prevState:o,userAction:(s=n==null?void 0:n.userAction)!=null?s:!0}),this.five.needsRender=!0)}handleEnable(e,n=!0){this.linesGroup&&(e?(this.five.scene.add(this.linesGroup),this.actionWhenEnabled(()=>this.hooks.emit("enable",{userAction:n}))):(this.five.scene.remove(this.linesGroup),this.hooks.emit("disable",{userAction:n})))}handleVisible(e,n=!0){this.linesGroup&&(e?(this.linesGroup.visible=!0,this.actionWhenEnabled(()=>this.hooks.emit("show",{userAction:n}))):(this.linesGroup.visible=!1,this.actionWhenEnabled(()=>this.hooks.emit("hide",{userAction:n}))))}handleDispose(){this.linesGroup&&this.five.scene.add(this.linesGroup)}getLinesGroup(e){const n=e.map(this.getLine.bind(this)).filter(qs),o=new O.Group;if(o.name=$s("route-group"),n.length!==0)return o.add(...n),o}getLine(e){const n=new O.Group,o=e.panoIndexList.map(a=>{var l;return(l=this.five.work.observers[a])==null?void 0:l.standingPosition}).filter(qs),s=Od(o,{skipPosition:!0,unitWidth:.6,unitHeight:.4});if(!s)return;const r=Nd({textureUrl:e.arrowTextureUrl});return s.forEach(a=>{const l=new O.Mesh(a,r);l.name=$s("route-line-mesh"),n.add(l)}),n}}d(er,"lasestVersion",Ks);const tr=i=>new er(i);function nr(i){const t=Math.abs(Math.cos(i.latitude));return new O.Vector3(-Math.sin(i.longitude)*t,-Math.sin(i.latitude),-Math.cos(i.longitude)*t)}function Bd(i,t){const e=nr(i),n=nr(t);return e.angleTo(n)}const Fd=async i=>{try{i().then(()=>{},()=>{}).catch(()=>{})}catch{}},Xn=Math.PI*2;function Gd(i){return i>=0&&i<Xn?i:(i%Xn+Xn)%Xn}function Rd(i){return{longitude:Gd(-Math.atan2(i.x,-i.z)),latitude:-Math.asin(i.y/1)}}function Xd(i,t,e,n){const o=-i/e,s=i;return o*n+s}function Qd(i){return new Promise(t=>{setTimeout(()=>{t()},i)})}const ir="v1.0.6",or="CruisePlugin",Qn=`${or}@${ir}`,sr=()=>{console.error(`${Qn} is disposed`)},Hd=()=>{console.warn(`${Qn} is disabled`)},Wd=()=>{console.error(`${Qn} is disabled`)},Si=new Map;class ji extends Ct{constructor(e){super(e);d(this,"state",{visible:!0,enabled:!0,disposed:!1,playing:!1,speed:1,config:{speedConfig:{rotateSpeed:.001,rotateSpeedUnit:"rad/ms",moveSpeed:.002,moveSpeedUnit:"m/ms"}}});d(this,"data");d(this,"privateState",{playing:!1,currentPlayQueue:[],currentPlayKeyframe:null,broke:!1,disposers:[]});d(this,"GuideLine");Object.assign(window,{[`__${or}_DEBUG__`]:this});const n=this.setFiveLinearUpdateCamera.bind(this),o=this.setFiveOriginUpdateCamera.bind(this);this.hooks.on("play",n),this.hooks.on("broke",o),this.hooks.on("end",o),this.hooks.on("pause",o),this.privateState.disposers.push(()=>{this.hooks.off("play",n),this.hooks.off("broke",o),this.hooks.off("end",o),this.hooks.off("pause",o)})}async load(e,n,o){var h,f,u,m,v;if(this.state.disposed)return sr();this.privateState.fiveOriginGetProgress||(f=(h=this.five.controller)==null?void 0:h.cameraMotion)!=null&&f.getProgress||(await this.waitFiveLoaded(),this.privateState.fiveOriginGetProgress=(m=(u=this.five.controller)==null?void 0:u.cameraMotion)==null?void 0:m.getProgress),this.clear();const s=this.data?JSON.parse(JSON.stringify(this.data)):void 0,r=await this.formatData(e);this.data=r,this.hooks.emit("dataChange",r,s);let a=[],l;const c=this.data.keyframes.filter(b=>b.data.panoIndex!==void 0);c.filter((b,A)=>{var g;return b.data.panoIndex!==((g=c[A-1])==null?void 0:g.data.panoIndex)}).map(b=>b.data.panoIndex).forEach(b=>{var g,w;const A=(g=this.five.work.observers[b])==null?void 0:g.floorIndex;if(A!==void 0)if(l===A){const I=a.length-1;a[I]=[...(w=a[I])!=null?w:[],b]}else{l=A;const I=a.length;a[I]=[b]}}),this.GuideLine||(this.GuideLine=tr(this.five)),(v=this.GuideLine)==null||v.load({routes:a.map(b=>({panoIndexList:b}))}),this.setState({playing:!1}),this.handleVisible(this.state.visible),this.handleEnable(this.state.enabled),this.changePlayState(this.state.playing),this.changeSpeed(this.state.speed),n&&this.setState(n,{userAction:o}),console.log(`${Qn} loaded`,r),this.hooks.emit("dataLoaded",r)}play(e){this.setState({playing:!0},e)}playFrom(e){const{index:n,id:o,userAction:s}=e;this.state.playing&&this.setState({playing:!1},{userAction:s}),this.setState({playing:!0},{userAction:s,playFromIndex:n,playFromId:o})}playFromStart(e){return this.playFrom({...e,index:0})}pause(e){this.setState({playing:!1},e)}async show(e){this.setState({visible:!0},e)}async hide(e){this.setState({visible:!1},e)}enable(e){this.setState({enabled:!0},e)}disable(e){this.setState({enabled:!1},e)}dispose(){this.setState({disposed:!0})}setState(e,n){var s;if(this.state.disposed)return sr();if(!this.state.enabled&&e.enabled!==!0&&e.disposed!==!0)return Wd();const o={...this.state};this.state={...this.state,...e},e.disposed!==void 0&&e.disposed!==o.disposed&&e.disposed&&this.handleDispose(),e.visible!==void 0&&e.visible!==o.visible&&this.handleVisible(e.visible,n==null?void 0:n.userAction),e.enabled!==void 0&&e.enabled!==o.enabled&&this.handleEnable(e.enabled,n==null?void 0:n.userAction),e.playing!==void 0&&e.playing!==o.playing&&this.changePlayState(e.playing,n),e.speed!==void 0&&e.speed!==o.speed&&this.changeSpeed(e.speed,n==null?void 0:n.userAction),et(o,this.state,{deep:!0})||this.hooks.emit("stateChange",{state:this.state,prevState:o,userAction:(s=n==null?void 0:n.userAction)!=null?s:!0})}async formatData(e){this.five.work||await this.waitFiveLoaded();const n=this.five.work.observers,o=(()=>{const s=e;return typeof s=="object"&&s!==null&&s.version&&s.data?s.data:s})();if(o.keyframes)return{keyframesId:lt(),keyframes:o.keyframes.map((s,r)=>{var c;const a=o.keyframes[r+1],l=(()=>!a||a.start===void 0||s.end===void 0?0:a.start-s.end)();return{id:(c=s.uuid)!=null?c:lt(),moveIndex:r,stay:l,index:r,...s}})};if(o.panoIndexList){let s=[];const{moveEffect:r,moveToFirstPanoEffect:a}=o;return this.privateState.moveToFirstPanoEffect=a,o.panoIndexList.filter((l,c)=>l!==o.panoIndexList[c-1]).forEach((l,c)=>{const h=(()=>{var b,A,g,w;const f=o.panoIndexList[c+1];if(f===void 0)return;const u=(b=n[l])==null?void 0:b.position,m=(A=n[f])==null?void 0:A.position;if(!m||!u||((g=n[l])==null?void 0:g.floorIndex)!==((w=n[f])==null?void 0:w.floorIndex))return;const v=new O.Vector3().subVectors(m,u);return Rd(v)})();o.moveType===void 0||o.moveType==="justMove"?s.push({moveIndex:c,stay:o.stay,data:{effect:"Move",panoIndex:l,moveEffect:r,...h!=null?h:{}}}):o.moveType==="moveAndRotate"&&(s.push({moveIndex:c,stay:o.stay,data:{effect:"Move",panoIndex:l,moveEffect:r}}),h&&s.push({moveIndex:c,stay:o.stay,data:{effect:"Rotate",panoIndex:l,...h}}))}),{keyframesId:lt(),keyframes:s.map((l,c)=>({id:lt(),index:c,...l}))}}else throw new Error("format error: data no keyframes or no panoIndexList")}handleEnable(e,n=!0){var o,s;e?((o=this.GuideLine)==null||o.enable(),this.hooks.emit("enable",{userAction:n})):((s=this.GuideLine)==null||s.disable(),this.changePlayState(!1,{userAction:n}),this.hooks.emit("disable",{userAction:n})),this.state.enabled=e}handleVisible(e,n=!0){var o,s;e?((o=this.GuideLine)==null||o.show(),this.actionIfStateIsEnabled(()=>this.hooks.emit("show",{userAction:n}))):((s=this.GuideLine)==null||s.hide(),this.actionIfStateIsEnabled(()=>this.hooks.emit("hide",{userAction:n}))),this.state.visible=e}changePlayState(e,n){this.actionIfStateIsEnabled(()=>{var o;return this.hooks.emit("playStateChange",e?"playing":"pause",{userAction:(o=n==null?void 0:n.userAction)!=null?o:!0})}),e?this.handlePlay(n):this.handlePause(n),this.state.playing=e}async handlePlay(e){var m;const{data:n,state:o,privateState:s,hooks:r}=this;if(s.playing||!(n!=null&&n.keyframes)||(n==null?void 0:n.keyframes.length)===0)return;const a=lt();s.playId=a,s.playing=!0,s.broke=!1;const l=n.keyframes,c=this.getPauseData();(e==null?void 0:e.notEmitEvent)!==!0&&r.emit("play",{userAction:(m=e==null?void 0:e.userAction)!=null?m:!0});let h=!1;const u=await(async()=>{var v,b;if((e==null?void 0:e.playFromIndex)!==void 0)return e.playFromIndex;if((e==null?void 0:e.playFromId)!==void 0)return(v=this.data)==null?void 0:v.keyframes.findIndex(A=>A.id===e.playFromId);if(c!=null&&c.keyframeId){const A=(b=this.data)==null?void 0:b.keyframes.find(g=>g.id===c.keyframeId);if(c!=null&&c.fiveState&&await this.move(c.fiveState,{moveEffect:s.moveToFirstPanoEffect}),A){if(A.data.effect==="Move")return A.index;if(A.data.effect==="Rotate"){const g=c.duration!==void 0?c.duration*(1-c.playedProgress):void 0;return await this.playKeyframe(A,{duration:g}),h=!0,A.index+1}}}})();this.clearPauseData();for(const v of l){if(s.broke||!o.playing||!s.playing||a!==s.playId)return;if(!(u!==void 0&&v.index<u))try{r.emit("playIndexChange",v.index,v),await this.playKeyframe(v,{moveEffect:h===!1?s.moveToFirstPanoEffect:void 0,duration:800}),v.stay&&await Qd(v.stay),h===!1&&(h=!0)}catch{return Promise.resolve("broke")}}o.playing&&a===s.playId&&(this.setState({playing:!1},{userAction:!1}),r.emit("end"),this.clearPauseData())}handlePause(e){var r;const{state:n,privateState:o,hooks:s}=this;n.playing=!1,o.playing!==!1&&(o.playing=!1,this.setPauseData(),o.broke||this.forceInteruptUpdateCamera(),(e==null?void 0:e.notEmitEvent)!==!0&&s.emit("pause",{userAction:(r=e==null?void 0:e.userAction)!=null?r:!0}))}async playKeyframe(e,n){var s;const{privateState:o}=this;return((s=this.privateState.currentPlayKeyframe)==null?void 0:s.keyframe.id)!==e.id&&(this.privateState.currentPlayKeyframe={keyframe:e}),o.currentPlayQueue.push(this.getPlayPromise(e,n)),this.actionPromiseQueue()}addInterruptListener(e){return this.five.once("gesture",e),this.five.once("modeChange",e),()=>{this.five.off("gesture",e),this.five.once("modeChange",e)}}async getPlayPromise(e,n){var s;const o=e.data;if(n.duration=(s=n==null?void 0:n.duration)!=null?s:e.start!==void 0&&e.end!==void 0?e.end-e.start:void 0,!!o)return new Promise((r,a)=>{let l=!1;this.addInterruptListener(()=>{if(!l)return this.hooks.emit("broke"),this.privateState.broke=!0,this.setState({playing:!1}),l=!0,a(new Error("play is interupted"))});try{if(l)return;const c=()=>{r(),l=!0};switch(o.effect){case"Move":this.move(o,n).then(c);break;case"Rotate":this.rotate(o,n).then(c);break;default:this.rotate(o,n).then(c)}}catch{}})}async actionPromiseQueue(){const{privateState:e}=this;return new Promise((n,o)=>{if(e.currentPlayQueue.length===0){n();return}const s=e.currentPlayQueue.shift();if(!s){n();return}s.then(n,o)}).then(()=>e.currentPlayQueue.length===0?Promise.resolve():this.actionPromiseQueue())}async move(e,n){if(e.mode&&e.mode!==this.five.currentMode)await this.changeMode(e);else if(e.panoIndex!==this.five.panoIndex)await this.changePano(e,n);else return Promise.resolve()}async rotate(e,n){if(e.mode&&e.mode!==this.five.currentMode)await this.changeMode({mode:e.mode,panoIndex:e.panoIndex});else if(e.panoIndex&&e.panoIndex!==this.five.panoIndex)return await this.changePano(e,n);await this.updateCamera(e,n==null?void 0:n.duration)}async updateCamera(e,n=800){const{five:o,privateState:s,state:r}=this;let a=n;const l=(()=>{var u,m;const h=(u=r.config)==null?void 0:u.speedConfig,f=(m=e.rotateSpeed)!=null?m:h==null?void 0:h.rotateSpeed;if((h==null?void 0:h.rotateSpeedUnit)===void 0)return f;if(f!==void 0)return h.rotateSpeedUnit==="rad/ms"?f:f/1e3})();if(l){const h=this.five.getCurrentState();a=Bd(h,e)/l}s.currentPlayKeyframe&&(s.currentPlayKeyframe.originDuration=a);const c=this.getSpeededDuration(a);return new Promise(h=>{Fd(()=>o.updateCamera(e,c)),setTimeout(()=>h(),c)})}async changePano(e,n){var h;const{five:o,privateState:s,state:r}=this;if(typeof e.panoIndex!="number"||e.panoIndex===o.panoIndex)return;let a=(h=n==null?void 0:n.duration)!=null?h:800;const l=(()=>{var m,v;const f=(m=r.config)==null?void 0:m.speedConfig,u=(v=e.moveSpeed)!=null?v:f==null?void 0:f.moveSpeed;if((f==null?void 0:f.moveSpeedUnit)===void 0)return u;if(u!==void 0)return f.moveSpeedUnit==="m/ms"?u:u/1e3})();if(l&&typeof o.panoIndex=="number"&&typeof e.panoIndex=="number"){const f=o.work.observers[o.panoIndex].position,u=o.work.observers[e.panoIndex].position;a=f.distanceTo(u)/l}s.currentPlayKeyframe&&(s.currentPlayKeyframe.originDuration=a);const c=this.getSpeededDuration(a);return new Promise(f=>{var u,m,v;o.moveToPano(e.panoIndex,{latitude:e.latitude,longitude:e.longitude,fov:e.fov,duration:c,effect:(v=(m=n==null?void 0:n.moveEffect)!=null?m:(u=this.state.config)==null?void 0:u.moveEffect)!=null?v:e.moveEffect,moveCancelCallback:()=>f(),moveEndCallback:()=>f()})})}changeSpeed(e,n=!0){const{state:o,privateState:s,hooks:r}=this,{currentPlayKeyframe:a}=s;if(r.emit("speedChange",e,{userAction:n}),o.playing&&a)try{const l=a.originDuration!==void 0?a.originDuration*(1-this.getProgress()):void 0,c=this.playKeyframe(a.keyframe,{duration:l});s.currentPlayQueue.push(c)}catch{}}getSpeededDuration(e){return e/this.state.speed}getProgress(){return this.five.controller.cameraMotion.progress}async changeMode(e,n){e.mode&&e.mode!==this.five.currentMode&&await this.five.changeMode(e.mode,e,n)}forceInteruptUpdateCamera(){this.five.updateCamera({},0)}getPauseData(){var e,n;if((e=this.data)!=null&&e.keyframesId)return Si.get((n=this.data)==null?void 0:n.keyframesId)}setPauseData(){var e,n,o,s;if((e=this.data)!=null&&e.keyframesId)return Si.set((n=this.data)==null?void 0:n.keyframesId,{keyframeId:(o=this.privateState.currentPlayKeyframe)==null?void 0:o.keyframe.id,fiveState:this.five.getCurrentState(),duration:(s=this.privateState.currentPlayKeyframe)==null?void 0:s.originDuration,playedProgress:this.getProgress()})}clearPauseData(){var e,n;if((e=this.data)!=null&&e.keyframesId)return Si.delete((n=this.data)==null?void 0:n.keyframesId)}clear(){this.clearPauseData(),this.privateState.currentPlayKeyframe=null}handleDispose(){var e,n;this.setState({playing:!1}),this.clearPauseData(),this.clear(),(e=this.GuideLine)==null||e.dispose(),this.GuideLine=void 0,(n=this.privateState.disposers)==null||n.forEach(o=>o==null?void 0:o())}actionIfStateIsEnabled(e,n){if(this.state.enabled)return e();n!=null&&n.warnLog&&Hd()}async waitFiveLoaded(){return new Promise(e=>{if(this.five.work){e();return}this.five.once("loaded",()=>{e()})})}setFiveLinearUpdateCamera(){!this.privateState.fiveOriginGetProgress||(this.five.controller.cameraMotion.getProgress=e=>{const n=this.five.controller.cameraMotion,o=e-n.startTime;return o<0?0:o>=n.duration?1:1-Xd(1,n.startVelocity,n.duration,o)})}setFiveOriginUpdateCamera(){!this.privateState.fiveOriginGetProgress||(this.five.controller.cameraMotion.getProgress=this.privateState.fiveOriginGetProgress)}}d(ji,"PluginVersion",ir);const Yd=i=>new ji(i);ee.CSS3DRenderPlugin=fn,ee.CameraMovementEffect=es,ee.CameraMovementPlugin=qc,ee.CruisePlugin=Yd,ee.CruisePluginController=ji,ee.DIRECTION=Xt,ee.DISPLAY_STRATEGY_TYPE=Et,ee.FLOOR_PLAN_ATTACHED_TO=vt,ee.FLOOR_TYPE_MAP=Gc,ee.GuideLinePlugin=tr,ee.ITEM_LABEL_PLUGIN_DISPLAY_STRATEGY_TYPE=Lt,ee.ItemLabelPlugin=id,ee.Magnifier=fs,ee.MapviewFloorplanPlugin=vc,ee.ModelChassisCompassPlugin=Qc,ee.ModelEntryDoorGuidePlugin=Yc,ee.ModelFloorplanPlugin=fc,ee.ModelItemLabelPlugin=Bu,ee.ModelRoomLabelPlugin=xa,ee.ModelTVVideoPlugin=Ru,ee.ModelViewPlugin=Tr,ee.PaintBrush=Dr,ee.PaintBrushTypeEnum=at,ee.PanoCompassPlugin=Ah,ee.PanoCursorRaycasterPlugin=Yr,ee.PanoDoorLabelPlugin=gd,ee.PanoFloorplanRadarPlugin=Bc,ee.PanoMeasurePlugin=uu,ee.PanoRulerPlugin=th,ee.PanoRulerProPlugin=dh,ee.PanoSpatialTagPlugin=Eu,ee.ROOM_FETILE_TYPE_MAP=Fc,ee.ROOM_TYPE_MAP=Rc,ee.Rotation=tt,ee.TopviewFloorplanPlugin=Ac,ee.itemLabelPluginServerParams=od,ee.modelItemLabelPluginServerParams=Fu,ee.modelRoomLabelPluginServerParams=Ca,Object.defineProperties(ee,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});