PageSourceSearch

https://saca360ai-onboard.up.railway.app/_next/static/chunks/108.a6090a9d9f194cc7.js

js saca360ai-onboard.up.railway.app collected 2026-10-03 12:14:18 UTC 43,249 bytes, 13 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[108],{108:(e,t,i)=>{i.r(t),i.d(t,{MarkersPlugin:()=>ev,events:()=>o});var s=i(2690),r=i(5339),n=Object.defineProperty,o={};((e,t)=>{for(var i in t)n(e,i,{get:t[i],enumerable:!0})})(o,{EnterMarkerEvent:()=>u,GotoMarkerDoneEvent:()=>p,HideMarkersEvent:()=>M,LeaveMarkerEvent:()=>v,MarkerVisibilityEvent:()=>h,MarkersPluginEvent:()=>a,RenderMarkersListEvent:()=>_,SelectMarkerEvent:()=>f,SelectMarkerListEvent:()=>w,SetMarkersEvent:()=>x,ShowMarkersEvent:()=>P,UnselectMarkerEvent:()=>E});var a=class extends s.TypedEvent{},l=class e extends a{constructor(t,i){super(e.type),this.marker=t,this.visible=i}};l.type="marker-visibility";var h=l,c=class e extends a{constructor(t){super(e.type),this.marker=t}};c.type="goto-marker-done";var p=c,d=class e extends a{constructor(t){super(e.type),this.marker=t}};d.type="leave-marker";var v=d,g=class e extends a{constructor(t){super(e.type),this.marker=t}};g.type="enter-marker";var u=g,m=class e extends a{constructor(t,i,s){super(e.type),this.marker=t,this.doubleClick=i,this.rightClick=s}};m.type="select-marker";var f=m,y=class e extends a{constructor(t){super(e.type),this.marker=t}};y.type="select-marker-list";var w=y,k=class e extends a{constructor(t){super(e.type),this.marker=t}};k.type="unselect-marker";var E=k,b=class e extends a{constructor(){super(e.type)}};b.type="hide-markers";var M=b,S=class e extends a{constructor(t){super(e.type),this.markers=t}};S.type="set-markers";var x=S,C=class e extends a{constructor(){super(e.type)}};C.type="show-markers";var P=C,L=class e extends a{constructor(t){super(e.type),this.markers=t}};L.type="render-markers-list";var _=L,T=class extends s.AbstractButton{constructor(e){super(e,{className:"psv-markers-button",icon:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="10 9 81 81"><path fill="currentColor" d="M50.5 90S22.9 51.9 22.9 36.6 35.2 9 50.5 9s27.6 12.4 27.6 27.6S50.5 90 50.5 90zm0-66.3c-6.1 0-11 4.9-11 11s4.9 11 11 11 11-4.9 11-11-4.9-11-11-11z"/>\x3c!--Created by Rohith M S from the Noun Project--\x3e</svg>\n',hoverScale:!0,collapsable:!0,tabbable:!0}),this.plugin=this.viewer.getPlugin("markers"),this.plugin&&(this.plugin.addEventListener(P.type,this),this.plugin.addEventListener(M.type,this),this.toggleActive(!0))}destroy(){this.plugin&&(this.plugin.removeEventListener(P.type,this),this.plugin.removeEventListener(M.type,this)),super.destroy()}isSupported(){return!!this.plugin}handleEvent(e){e instanceof P?this.toggleActive(!0):e instanceof M&&this.toggleActive(!1)}onClick(){this.plugin.toggleAllMarkers()}};T.id="markers";var A='<svg xmlns="http://www.w3.org/2000/svg" viewBox="9 9 81 81"><path fill="currentColor" d="M37.5 90S9.9 51.9 9.9 36.6 22.2 9 37.5 9s27.6 12.4 27.6 27.6S37.5 90 37.5 90zm0-66.3c-6.1 0-11 4.9-11 11s4.9 11 11 11 11-4.9 11-11-4.9-11-11-11zM86.7 55H70c-1.8 0-3.3-1.5-3.3-3.3s1.5-3.3 3.3-3.3h16.7c1.8 0 3.3 1.5 3.3 3.3S88.5 55 86.7 55zm0-25h-15a3.3 3.3 0 0 1-3.3-3.3c0-1.8 1.5-3.3 3.3-3.3h15c1.8 0 3.3 1.5 3.3 3.3 0 1.8-1.5 3.3-3.3 3.3zM56.5 73h30c1.8 0 3.3 1.5 3.3 3.3 0 1.8-1.5 3.3-3.3 3.3h-30a3.3 3.3 0 0 1-3.3-3.3 3.2 3.2 0 0 1 3.3-3.3z"/>\x3c!--Created by Rohith M S from the Noun Project--\x3e</svg>\n',z="http://www.w3.org/2000/svg",j="psvMarker",O=s.utils.dasherize(j),D="marker",N="markersList",V={amount:2,duration:100,easing:"linear"},H=class extends s.AbstractButton{constructor(e){super(e,{className:" psv-markers-list-button",icon:A,hoverScale:!0,collapsable:!0,tabbable:!0}),this.plugin=this.viewer.getPlugin("markers"),this.plugin&&(this.viewer.addEventListener(s.events.ShowPanelEvent.type,this),this.viewer.addEventListener(s.events.HidePanelEvent.type,this))}destroy(){this.viewer.removeEventListener(s.events.ShowPanelEvent.type,this),this.viewer.removeEventListener(s.events.HidePanelEvent.type,this),super.destroy()}isSupported(){return!!this.plugin}handleEvent(e){e instanceof s.events.ShowPanelEvent?this.toggleActive(e.panelId===N):e instanceof s.events.HidePanelEvent&&this.toggleActive(!1)}onClick(){this.plugin.toggleMarkersList()}};H.id="markersList";var $=new r.Pq0,R=new r.PTz,U=new r.Pq0,I=class extends r.B69{constructor(e=document.createElement("div")){super(),this.isCSS3DObject=!0,this.element=e,this.element.style.position="absolute",this.element.style.pointerEvents="auto",this.element.style.userSelect="none",this.element.setAttribute("draggable",!1),this.addEventListener("removed",function(){this.traverse(function(e){e.element instanceof e.element.ownerDocument.defaultView.Element&&null!==e.element.parentNode&&e.element.remove()})})}copy(e,t){return super.copy(e,t),this.element=e.element.cloneNode(!0),this}},W=new r.kn4,q=new r.kn4,B=class{constructor(e={}){let t,i,s,r,n=this,o={camera:{style:""},objects:new WeakMap},a=void 0!==e.element?e.element:document.createElement("div");a.style.overflow="hidden",this.domElement=a;
1let l=document.createElement("div");l.style.transformOrigin="0 0",l.style.pointerEvents="none",a.appendChild(l);let h=document.createElement("div");function c(e){return 1e-10>Math.abs(e)?0:e}function p(e){let t=e.elements;return"matrix3d("+c(t[0])+","+c(-t[1])+","+c(t[2])+","+c(t[3])+","+c(t[4])+","+c(-t[5])+","+c(t[6])+","+c(t[7])+","+c(t[8])+","+c(-t[9])+","+c(t[10])+","+c(t[11])+","+c(t[12])+","+c(-t[13])+","+c(t[14])+","+c(t[15])+")"}function d(e){let t=e.elements;return"translate(-50%,-50%)"+("matrix3d("+c(t[0])+","+c(t[1])+","+c(t[2])+","+c(t[3])+","+c(-t[4])+","+c(-t[5])+","+c(-t[6])+","+c(-t[7])+","+c(t[8])+","+c(t[9])+","+c(t[10])+","+c(t[11])+","+c(t[12])+","+c(t[13])+","+c(t[14])+","+c(t[15]))+")"}h.style.transformStyle="preserve-3d",l.appendChild(h),this.getSize=function(){return{width:t,height:i}},this.render=function(e,a){let v,g,u=a.projectionMatrix.elements[5]*r;a.view&&a.view.enabled?(l.style.transform=`translate( ${-a.view.offsetX*(t/a.view.width)}px, ${-a.view.offsetY*(i/a.view.height)}px )`,l.style.transform+=`scale( ${a.view.fullWidth/a.view.width}, ${a.view.fullHeight/a.view.height} )`):l.style.transform="",!0===e.matrixWorldAutoUpdate&&e.updateMatrixWorld(),null===a.parent&&!0===a.matrixWorldAutoUpdate&&a.updateMatrixWorld(),a.isOrthographicCamera&&(v=-(a.right+a.left)/2,g=(a.top+a.bottom)/2);let m=a.view&&a.view.enabled?a.view.height/a.view.fullHeight:1,f=a.isOrthographicCamera?`scale( ${m} )scale(`+u+")translate("+c(v)+"px,"+c(g)+"px)"+p(a.matrixWorldInverse):`scale( ${m} )translateZ(`+u+"px)"+p(a.matrixWorldInverse),y=(a.isPerspectiveCamera?"perspective("+u+"px) ":"")+f+"translate("+s+"px,"+r+"px)";o.camera.style!==y&&(h.style.transform=y,o.camera.style=y),function e(t,i,s,r){if(!1===t.visible)return void function e(t){t.isCSS3DObject&&(t.element.style.display="none");for(let i=0,s=t.children.length;i<s;i++)e(t.children[i])}(t);if(t.isCSS3DObject){let e=!0===t.layers.test(s.layers),r=t.element;if(r.style.display=!0===e?"":"none",!0===e){let e;t.onBeforeRender(n,i,s),t.isCSS3DSprite?(W.copy(s.matrixWorldInverse),W.transpose(),0!==t.rotation2D&&W.multiply(q.makeRotationZ(t.rotation2D)),t.matrixWorld.decompose($,R,U),W.setPosition($),W.scale(U),W.elements[3]=0,W.elements[7]=0,W.elements[11]=0,W.elements[15]=1,e=d(W)):e=d(t.matrixWorld);let a=o.objects.get(t);if(void 0===a||a.style!==e){r.style.transform=e;let i={style:e};o.objects.set(t,i)}r.parentNode!==h&&h.appendChild(r),t.onAfterRender(n,i,s)}}for(let n=0,o=t.children.length;n<o;n++)e(t.children[n],i,s,r)}(e,e,a,f)},this.setSize=function(e,n){t=e,i=n,s=t/2,r=i/2,a.style.width=e+"px",a.style.height=n+"px",l.style.width=e+"px",l.style.height=n+"px",h.style.width=e+"px",h.style.height=n+"px"}}},Y=class{constructor(e){this.viewer=e,this.element=document.createElement("div"),this.element.className="psv-markers-css3d-container",this.renderer=new B({element:this.element}),this.scene=new r.Z58,this.intersectionObserver=new IntersectionObserver(e=>{e.forEach(e=>{let t=e.target[j];t.config.visible&&(t.viewportIntersection=e.isIntersecting)})},{root:this.element}),e.addEventListener(s.events.ReadyEvent.type,this,{once:!0}),e.addEventListener(s.events.SizeUpdatedEvent.type,this),e.addEventListener(s.events.RenderEvent.type,this)}handleEvent(e){switch(e.type){case s.events.ReadyEvent.type:case s.events.SizeUpdatedEvent.type:this.updateSize();break;case s.events.RenderEvent.type:this.render()}}destroy(){this.viewer.removeEventListener(s.events.ReadyEvent.type,this),this.viewer.removeEventListener(s.events.SizeUpdatedEvent.type,this),this.viewer.removeEventListener(s.events.RenderEvent.type,this),this.intersectionObserver.disconnect()}updateSize(){let e=this.viewer.getSize();this.renderer.setSize(e.width,e.height)}render(){this.renderer.render(this.scene,this.viewer.renderer.camera)}addObject(e){this.scene.add(e.threeElement),this.intersectionObserver.observe(e.domElement)}removeObject(e){this.scene.remove(e.threeElement),this.intersectionObserver.unobserve(e.domElement)}},F=(e=>(e.image="image",e.html="html",e.element="element",e.imageLayer="imageLayer",e.videoLayer="videoLayer",e.elementLayer="elementLayer",e.polygon="polygon",e.polygonPixels="polygonPixels",e.polyline="polyline",e.polylinePixels="polylinePixels",e.square="square",e.re
1ct="rect",e.circle="circle",e.ellipse="ellipse",e.path="path",e))(F||{});function X(e,t=!1){let i=[];if(Object.keys(F).forEach(t=>{e[t]&&i.push(t)}),0!==i.length||t){if(i.length>1)throw new s.PSVError(`multiple marker content, either ${Object.keys(F).join(", ")}`)}else throw new s.PSVError(`missing marker content, either ${Object.keys(F).join(", ")}`);return i[0]}var Z=class{constructor(e,t,i){if(this.viewer=e,this.plugin=t,this.state={anchor:null,visible:!1,staticTooltip:!1,position:null,position2D:null,positions3D:null,size:null},!i.id)throw new s.PSVError("missing marker id");this.type=X(i),this.createElement(),this.update(i)}get id(){return this.config.id}get data(){return this.config.data}get domElement(){return null}get threeElement(){return null}get video(){return null}destroy(){delete this.viewer,delete this.plugin,delete this.element,this.hideTooltip()}is3d(){return!1}isNormal(){return!1}isPoly(){return!1}isSvg(){return!1}isCss3d(){return!1}update(e){let t=X(e,!0);if(void 0!==t&&t!==this.type)throw new s.PSVError(`cannot change marker ${e.id} type`);if(this.config=s.utils.deepmerge(this.config,e),"string"==typeof this.config.tooltip&&(this.config.tooltip={content:this.config.tooltip}),this.config.tooltip&&!this.config.tooltip.trigger&&(this.config.tooltip.trigger="hover"),s.utils.isNil(this.config.visible)&&(this.config.visible=!0),s.utils.isNil(this.config.zIndex)&&(this.config.zIndex=1),s.utils.isNil(this.config.opacity)&&(this.config.opacity=1),this.config.rotation){let e=this.config.rotation;"object"==typeof e?this.config.rotation={yaw:e.yaw?s.utils.parseAngle(e.yaw,!0,!1):0,pitch:e.pitch?s.utils.parseAngle(e.pitch,!0,!1):0,roll:e.roll?s.utils.parseAngle(e.roll,!0,!1):0}:this.config.rotation={yaw:0,pitch:0,roll:s.utils.parseAngle(e,!0,!1)}}else this.config.rotation={yaw:0,pitch:0,roll:0};this.state.anchor=s.utils.parsePoint(this.config.anchor)}getListContent(){return this.config.listContent?this.config.listContent:this.config.tooltip?.content?this.config.tooltip.content:this.config.html?this.config.html:this.id}showTooltip(e,t,i=!1){if(this.state.visible&&this.config.tooltip?.content&&this.state.position2D){let r={...this.config.tooltip,style:{pointerEvents:this.state.staticTooltip?"auto":"none"},data:this,top:0,left:0};if(this.isPoly()||this.is3d()||this.isCss3d())if(e||t){let i=s.utils.getPosition(this.viewer.container);r.top=t-i.y+10,r.left=e-i.x,r.box={width:20,height:20}}else r.top=this.state.position2D.y,r.left=this.state.position2D.x;else{let e=this.viewer.dataHelper.vector3ToViewerCoords(this.state.positions3D[0]),t=this.state.size.width,i=this.state.size.height;this.config.hoverScale&&!this.state.staticTooltip&&(t*=this.config.hoverScale.amount,i*=this.config.hoverScale.amount),r.top=e.y-i*this.state.anchor.y+i/2,r.left=e.x-t*this.state.anchor.x+t/2,r.box={width:t,height:i}}this.tooltip?i?this.tooltip.update(this.config.tooltip.content,r):this.tooltip.move(r):this.tooltip=this.viewer.createTooltip(r)}}hideTooltip(){this.tooltip&&(this.tooltip.hide(),this.tooltip=null)}},K=class extends Z{get domElement(){return this.element}constructor(e,t,i){super(e,t,i)}afterCreateElement(){this.element[j]=this}destroy(){delete this.element[j],super.destroy()}update(e){super.update(e);let t=this.domElement;t.id=`psv-marker-${this.config.id}`,t.setAttribute("class","psv-marker"),this.state.visible&&t.classList.add("psv-marker--visible"),this.config.tooltip&&t.classList.add("psv-marker--has-tooltip"),this.config.content&&t.classList.add("psv-marker--has-content"),this.config.className&&s.utils.addClasses(t,this.config.className),t.style.opacity=`${this.config.opacity}`,t.style.zIndex=`${30+this.config.zIndex}`,this.config.style&&Object.assign(t.style,this.config.style)}},G=class extends K{constructor(e,t,i){super(e,t,i)}afterCreateElement(){super.afterCreateElement(),this.domElement.addEventListener("transitionend",()=>{this.domElement.style.transition=""})}render({viewerPosition:e,zoomLevel:t,hoveringMarker:i}){this.__updateSize();let s=this.viewer.dataHelper.vector3ToViewerCoords(this.state.positions3D[0]);return(s.x-=this.state.size.width*this.state.anchor.x,s.y-=this.state.size.height*this.state.anchor.y,this.state.positions3D[0].dot(this.viewer.state.direction)>0&&s.x+this.state.size.width>=0&&s.x-this.state.size.width<=this.viewer.state.size.width&&s.y+this.state.size.height>=0&&s.y-this.state.size.height<=this.viewer.state.size.height)?(this.domElement.style.translate=`${s.x}px ${s.y}px 0px`,this.applyScale({zoomLevel:t,viewerPosition:e,mouseover:this===i}),s):null}update(e){if(super.update(e),!s.utils.isExtendedPosition(this.config.position))throw new s.PSVError(`missing marker ${this.id} position`);try{this.state.position=this.viewer.dataHelper.cleanPosition(this.config.position)}catch(e){throw new s.PSVError(`invalid marker ${this.id} position`,e)}this.state.positions3D=[this.viewer.dataHelper.sphericalCoordsToVector3(this.state.position)];let t=this.domElement;t.classList.add("psv-marker--normal"),this.config.scale&&Array.isArray(this.config.scale)&&(this.config.scale={zoom:this.config.scale}),"boolean"==typeof this.config.hoverScale?this.config.hoverScale=this.config.hoverScale?this.plugin.config.defaultHoverScale||V:null:"number"==typeof this.config.hoverScale?this.config.hoverScale={amount:this.config.hoverScale}:this.config.hoverScale||(this.config.hoverScale=this.plugin.config.defaultHoverScale),this.config.hoverScale&&(this.config.hoverScale={...this.plugin.config.defaultHoverScale,...this.config.hoverScale}),t.style.rotate=0!==this.config.rotation.roll?r.cj9.radToDeg(this.config.rotation.roll)+"deg":null,t.style.transformOrigin=`${100*this.state.anchor.x}% ${100*this.state.anchor.y}%`}__updateSize(){if(!this.needsUpdateSize)return;let e=this.domElement,t=!this.state.visible||!this.state.size;
1if(t&&e.classList.add("psv-marker--transparent"),this.isSvg()){let t=e.firstElementChild.getBoundingClientRect();this.state.size={width:t.width,height:t.height}}else this.state.size={width:e.offsetWidth,height:e.offsetHeight};t&&e.classList.remove("psv-marker--transparent"),this.isSvg()&&(e.style.width=this.state.size.width+"px",e.style.height=this.state.size.height+"px"),"element"!==this.type&&(this.needsUpdateSize=!1)}applyScale({zoomLevel:e,viewerPosition:t,mouseover:i}){null!==i&&this.config.hoverScale&&(this.domElement.style.transition=`scale ${this.config.hoverScale.duration}ms ${this.config.hoverScale.easing}`);let n=1;if("function"==typeof this.config.scale)n=this.config.scale(e,t);else if(this.config.scale){if(Array.isArray(this.config.scale.zoom)){let[t,i]=this.config.scale.zoom;n*=t+(i-t)*s.CONSTANTS.EASINGS.inQuad(e/100)}if(Array.isArray(this.config.scale.yaw)){let[e,i]=this.config.scale.yaw,o=r.cj9.degToRad(this.viewer.state.hFov)/2,a=Math.abs(s.utils.getShortestArc(this.state.position.yaw,t.yaw));n*=i+(e-i)*s.CONSTANTS.EASINGS.outQuad(Math.max(0,(o-a)/o))}}i&&this.config.hoverScale&&(n*=this.config.hoverScale.amount),this.domElement.style.scale=`${n}`}},Q=class extends r.BKk{get map(){return this.uniforms.map.value}set map(e){this.uniforms.map.value=e}set alpha(e){this.uniforms.alpha.value=e}get offset(){return this.uniforms.offset.value}get repeat(){return this.uniforms.repeat.value}set chromaKey(e){this.uniforms.keying.value=e?.enabled===!0,e?.enabled&&("object"==typeof e.color&&"r"in e.color?this.uniforms.color.value.set(e.color.r/255,e.color.g/255,e.color.b/255):this.uniforms.color.value.set(e.color??65280),this.uniforms.similarity.value=e.similarity??.2,this.uniforms.smoothness.value=e.smoothness??.2)}constructor(e){super({transparent:!0,depthTest:!1,depthWrite:!1,uniforms:{map:{value:e?.map},repeat:{value:new r.I9Y(1,1)},offset:{value:new r.I9Y(0,0)},alpha:{value:e?.alpha??1},keying:{value:!1},color:{value:new r.Q1f(65280)},similarity:{value:.2},smoothness:{value:.2},spill:{value:.1}},vertexShader:"varying vec2 vUv;\nuniform vec2 repeat;\nuniform vec2 offset;\n\nvoid main() {\n    vUv = uv * repeat + offset;\n    gl_Position = projectionMatrix *  modelViewMatrix * vec4( position, 1.0 );\n}\n",fragmentShader:"// https://www.8thwall.com/playground/chromakey-threejs\n\nuniform sampler2D map;\nuniform float alpha;\nuniform bool keying;\nuniform vec3 color;\nuniform float similarity;\nuniform float smoothness;\nuniform float spill;\n\nvarying vec2 vUv;\n\nvec2 RGBtoUV(vec3 rgb) {\n    return vec2(\n        rgb.r * -0.169 + rgb.g * -0.331 + rgb.b *  0.5    + 0.5,\n        rgb.r *  0.5   + rgb.g * -0.419 + rgb.b * -0.081  + 0.5\n    );\n}\n\nvoid main(void) {\n    gl_FragColor = texture2D(map, vUv);\n\n    if (keying) {\n        float chromaDist = distance(RGBtoUV(gl_FragColor.rgb), RGBtoUV(color));\n\n        float baseMask = chromaDist - similarity;\n        float fullMask = pow(clamp(baseMask / smoothness, 0., 1.), 1.5);\n        gl_FragColor.a *= fullMask * alpha;\n\n        float spillVal = pow(clamp(baseMask / spill, 0., 1.), 1.5);\n        float desat = clamp(gl_FragColor.r * 0.2126 + gl_FragColor.g * 0.7152 + gl_FragColor.b * 0.0722, 0., 1.);\n        gl_FragColor.rgb = mix(vec3(desat, desat, desat), gl_FragColor.rgb, spillVal);\n    } else {\n        gl_FragColor.a *= alpha;\n    }\n}\n"}),this.chromaKey=e?.chromaKey}};function J(e){return e.reduce((e,t)=>e.add(t),new r.Pq0).normalize()}var ee=new r.Pq0,et=new r.Pq0,ei=new r.Pq0,es=new r.Pq0,er=new r.Pq0,en=new r.Pq0,eo=class extends Z{get threeElement(){return this.element}get threeMesh(){return this.threeElement.children[0]}get video(){return"videoLayer"===this.type?this.threeMesh.material.map.image:null}constructor(e,t,i){super(e,t,i)}is3d(){return!0}createElement(){let e=new Q({alpha:0}),t=new r.bdM(1,1),i=new r.eaF(t,e);i.userData={[j]:this},Object.defineProperty(i,"visible",{enumerable:!0,get:function(){return this.userData[j].config.visible},set:function(e){this.userData[j].config.visible=e}}),this.element=new r.YJl().add(i),"videoLayer"===this.type&&this.viewer.needsContinuousUpdate(!0)}destroy(){delete this.threeMesh.userData[j],"videoLayer"===this.type&&(this.video.pause(),this.viewer.needsContinuousUpdate(!1)),super.destroy()}render(){return this.viewer.renderer.isObjectVisible(this.threeMesh)?this.viewer.dataHelper.sphericalCoordsToViewerCoords(this.state.position):null}update(e){super.update(e);let t=this.threeMesh,i=t.parent,n=t.material;if(s.utils.isExtendedPosition(this.config.position)){try{this.state.position=this.viewer.dataHelper.cleanPosition(this.config.position)}catch(e){throw new s.PSVError(`invalid marker ${this.id} position`,e)}if(!this.config.size)throw new s.PSVError(`missing marker ${this.id} size`);this.state.size=this.config.size,t.scale.set(this.config.size.width/100,this.config.size.height/100,1),t.position.set(t.scale.x*(.5-this.state.anchor.x),t.scale.y*(this.state.anchor.y-.5),0),t.rotation.set(0,0,0),this.viewer.dataHelper.sphericalCoordsToVector3(this.state.position,i.position),i.lookAt(0,i.position.y,0),t.rotateY(-this.config.rotation.yaw),t.rotateX(-this.config.rotation.pitch),t.rotateZ(-this.config.rotation.roll);let e=t.geometry.getAttribute("position");this.state.positions3D=[0,1,3,2].map(i=>{let s=new r.Pq0;return s.fromBufferAttribute(e,i),t.localToWorld(s)})}else{let e;if(this.config.position?.length!==4)throw new s.PSVError(`missing marker ${this.id} position`);try{e=this.config.position.map(e=>this.viewer.dataHelper.cleanPosition(e))}catch(e){throw new s.PSVError(`invalid marker ${this.id} position`,e)}let i=e.map(e=>this.viewer.dataHelper.sphericalCoordsToVector3(e)),r=J(i);this.state.position=this.viewer.dataHelper.vector3ToSphericalCoords(r),this.state.positions3D=i;let o=t.geometry.getAttribute("position");
1[i[0],i[1],i[3],i[2]].forEach((e,t)=>{o.setX(t,e.x),o.setY(t,e.y),o.setZ(t,e.z)}),o.needsUpdate=!0,this.__setTextureWrap(n)}switch(this.type){case"videoLayer":if(this.definition!==this.config.videoLayer){n.map?.dispose();let e=function({src:e,withCredentials:t,muted:i,autoplay:s}){let r=document.createElement("video");return r.crossOrigin=t?"use-credentials":"anonymous",r.loop=!0,r.playsInline=!0,r.autoplay=s,r.muted=i,r.preload="metadata",e instanceof MediaStream?r.srcObject=e:r.src=e,r}({src:this.config.videoLayer,withCredentials:this.viewer.config.withCredentials(this.config.videoLayer),muted:!0,autoplay:this.config.autoplay??!0});n.map=new r.Nv2(e),n.alpha=0,e.addEventListener("loadedmetadata",()=>{this.viewer&&(n.alpha=this.config.opacity,s.utils.isExtendedPosition(this.config.position)||(t.material.userData[j]={width:e.videoWidth,height:e.videoHeight},this.__setTextureWrap(n)))},{once:!0}),e.autoplay&&e.play(),this.definition=this.config.videoLayer}else n.alpha=this.config.opacity;break;case"imageLayer":if(this.definition!==this.config.imageLayer){n.map?.dis
1pose();let e=new r.gPd;n.map=e,n.alpha=0,this.viewer.textureLoader.loadImage(this.config.imageLayer).then(i=>{this.viewer&&(s.utils.isExtendedPosition(this.config.position)||(t.material.userData[j]={width:i.width,height:i.height},this.__setTextureWrap(n)),e.image=i,e.anisotropy=4,e.needsUpdate=!0,n.alpha=this.config.opacity,this.viewer.needsUpdate())}),this.definition=this.config.imageLayer}else n.alpha=this.config.opacity}n.chromaKey=this.config.chromaKey,t.renderOrder=1e3+this.config.zIndex,t.geometry.boundingBox=null}__setTextureWrap(e){let t=e.userData[j];if(!t||!t.height||!t.width){e.repeat.set(1,1),e.offset.set(0,0);return}let i=this.config.position.map(e=>this.viewer.dataHelper.cleanPosition(e)),r=s.utils.greatArcDistance([i[0].yaw,i[0].pitch],[i[1].yaw,i[1].pitch]),n=s.utils.greatArcDistance([i[3].yaw,i[3].pitch],[i[2].yaw,i[2].pitch]),o=(r+n)/(s.utils.greatArcDistance([i[1].yaw,i[1].pitch],[i[2].yaw,i[2].pitch])+s.utils.greatArcDistance([i[0].yaw,i[0].pitch],[i[3].yaw,i[3].pitch])),a=t.width/t.height,l=0,h=0;o<a?l=a-o:h=1/a-1/o,e.repeat.set(1-l,1-h),e.offset.set(l/2,h/2)}},ea=class extends K{constructor(e,t,i){super(e,t,i),this.viewportIntersection=!1}get threeElement(){return this.object}isCss3d(){return!0}createElement(){this.element=document.createElement("div"),this.object=new I(this.element),this.object.userData={[j]:this},Object.defineProperty(this.object,"visible",{enumerable:!0,get:function(){return this.userData[j].config.visible},set:function(e){this.userData[j].config.visible=e}}),this.afterCreateElement()}destroy(){delete this.object.userData[j],delete this.object,super.destroy()}render({viewerPosition:e,zoomLevel:t}){let i=this.domElement;if(this.state.size={width:i.offsetWidth,height:i.offsetHeight},!(this.state.positions3D[0].dot(this.viewer.state.direction)>0&&this.viewportIntersection))return null;{let i=this.viewer.dataHelper.sphericalCoordsToViewerCoords(this.state.position);return this.config.elementLayer.updateMarker?.({marker:this,position:i,viewerPosition:e,zoomLevel:t,viewerSize:this.viewer.state.size}),i}}update(e){if(super.update(e),!s.utils.isExtendedPosition(this.config.position))throw new s.PSVError(`missing marker ${this.id} position`);try{this.state.position=this.viewer.dataHelper.cleanPosition(this.config.position)}catch(e){throw new s.PSVError(`invalid marker ${this.id} position`,e)}this.state.positions3D=[this.viewer.dataHelper.sphericalCoordsToVector3(this.state.position)];let t=this.threeElement,i=this.domElement;i.classList.add("psv-marker--css3d"),i.childNodes.forEach(e=>e.remove()),i.appendChild(this.config.elementLayer),this.config.elementLayer.style.display="block",t.position.copy(this.state.positions3D[0]).multiplyScalar(100),t.lookAt(0,100*this.state.positions3D[0].y,0),t.rotateY(-this.config.rotation.yaw),t.rotateX(-this.config.rotation.pitch),t.rotateZ(-this.config.rotation.roll)}},el=class extends G{constructor(e,t,i){super(e,t,i)}isNormal(){return!0}createElement(){this.element=document.createElement("div"),this.afterCreateElement()}render(e){let t=super.render(e);return t&&"element"===this.type&&this.config.element.updateMarker?.({marker:this,position:t,viewerPosition:e.viewerPosition,zoomLevel:e.zoomLevel,viewerSize:this.viewer.state.size}),t}update(e){super.update(e);let t=this.domElement;if(this.config.image&&!this.config.size)throw new s.PSVError(`missing marker ${this.id} size`);switch(this.config.size?(this.needsUpdateSize=!1,this.state.size=this.config.size,t.style.width=this.config.size.width+"px",t.style.height=this.config.size.height+"px"):this.needsUpdateSize=!0,this.type){case"image":this.definition=this.config.image,t.style.backgroundImage=`url("${this.config.image}")`;break;case"html":this.definition=this.config.html,t.innerHTML=this.config.html;break;case"element":this.definition!==this.config.element&&(this.definition=this.config.element,t.childNodes.forEach(e=>e.remove()),t.appendChild(this.config.element),this.config.element.style.display="block")}}},eh=class extends K{constructor(e,t,i){super(e,t,i)}createElement(){this.element=document.createElementNS(z,"path"),this.element[j]=this}isPoly(){return!0}get isPixels(){return"polygonPixels"===this.type||"polylinePixels"===this.type}get isPolygon(){return"polygon"===this.type||"polygonPixels"===this.type}get isPolyline(){return"polyline"===this.type||"polylinePixels"===this.type}get coords(){return this.definition}render(){let e=this.__getAllPolyPositions();if(!(e[0].length>(this.isPolygon?2:1)))return null;{let t=this.viewer.dataHelper.sphericalCoordsToViewerCoords(this.state.position),i=e.filter(e=>e.length>0).map(e=>{let i="M";return i+=e.map(e=>`${e.x-t.x},${e.y-t.y}`).join("L"),this.isPolygon&&(i+="Z"),i}).join(" ");return this.domElement.setAttributeNS(null,"d",i),this.domElement.setAttributeNS(null,"transform",`translate(${t.x} ${t.y})`),t}}update(e){super.update(e);let t=this.domElement;t.classList.add("psv-marker--poly"),this.config.svgStyle?(Object.entries(this.config.svgStyle).forEach(([e,i])=>
1{t.setAttributeNS(null,s.utils.dasherize(e),i)}),this.isPolyline&&!this.config.svgStyle.fill&&t.setAttributeNS(null,"fill","none")):this.isPolygon?t.setAttributeNS(null,"fill","rgba(0,0,0,0.5)"):this.isPolyline&&(t.setAttributeNS(null,"fill","none"),t.setAttributeNS(null,"stroke","rgb(0,0,0)"));try{let e=this.config[this.type];if(!Array.isArray(e[0])&&"object"!=typeof e[0])for(let t=0;t<e.length;t++)e.splice(t,2,[e[t],e[t+1]]);if(Array.isArray(e[0][0])||"object"==typeof e[0][0]||(e=[e]),this.isPolyline&&e.length>1)throw new s.PSVError("polylines cannot have holes");this.isPixels?this.definition=e.map(e=>e.map(e=>{let t;return[(t=s.utils.isExtendedPosition(e)?this.viewer.dataHelper.cleanPosition(e):this.viewer.dataHelper.textureCoordsToSphericalCoords({textureX:e[0],textureY:e[1]})).yaw,t.pitch]})):this.definition=e.map(e=>e.map(e=>{let t;return[(t=s.utils.isExtendedPosition(e)?this.viewer.dataHelper.cleanPosition(e):this.viewer.dataHelper.cleanPosition({yaw:e[0],pitch:e[1]})).yaw,t.pitch]}))}catch(e){throw new s.PSVError(`invalid marker ${this.id} position`,e)}if(this.positions3D=this.coords.map(e=>e.map(e=>this.viewer.dataHelper.sphericalCoordsToVector3({yaw:e[0],pitch:e[1]}))),this.isPolygon){let e=J(this.positions3D[0]);this.state.position=this.viewer.dataHelper.vector3ToSphericalCoords(e)}else{let e=function(e){let t=function(e){let t=[e[0]],i=0;for(let s=1;s<e.length;s++){let r=e[s-1][0]-e[s][0];r>Math.PI?i+=1:r<-Math.PI&&(i-=1),t.push([e[s][0]+2*i*Math.PI,e[s][1]])}return t}(e),i=0,r=[];for(let e=0;e<t.length-1;e++){let n=s.utils.greatArcDistance(t[e],t[e+1])*s.CONSTANTS.SPHERE_RADIUS;r.push(n),i+=n}let n=0;for(let e=0;e<t.length-1;e++){if(n+r[e]>i/2){let o=(i/2-n)/r[e];return function(e,t,i){let[r,n]=e,[o,a]=t,l=s.utils.greatArcDistance(e,t),h=Math.sin((1-i)*l)/Math.sin(l),c=Math.sin(i*l)/Math.sin(l),p=h*Math.cos(n)*Math.cos(r)+c*Math.cos(a)*Math.cos(o),d=h*Math.cos(n)*Math.sin(r)+c*Math.cos(a)*Math.sin(o);return[Math.atan2(d,p),Math.atan2(h*Math.sin(n)+c*Math.sin(a),Math.sqrt(p*p+d*d))]}(t[e],t[e+1],o)}n+=r[e]}return t[Math.round(t.length/2)]}(this.coords[0]);this.state.position={yaw:e[0],pitch:e[1]}}this.state.positions3D=this.positions3D[0]}__getAllPolyPositions(){return this.positions3D.map(e=>this.__getPolyPositions(e))}__getPolyPositions(e){let t=e.length,i=e.map(e=>({vector:e,visible:e.dot(this.viewer.state.direction)>0})),n=[];return i.forEach((e,s)=>{e.visible||[0===s?i[t-1]:i[s-1],s===t-1?i[0]:i[s+1]].forEach(t=>{t.visible&&n.push({visible:t.vector,invisible:e.vector,index:s})})}),n.reverse().forEach(e=>{i.splice(e.index,0,{vector:function(e,t,i){ee.copy(i).normalize(),et.crossVectors(e,t).normalize(),ei.crossVectors(et,e).normalize(),es.copy(e).multiplyScalar(-ee.dot(ei)),er.copy(ei).multiplyScalar(ee.dot(e));let n=new r.Pq0().addVectors(es,er).normalize();return en.crossVectors(n,ee),n.applyAxisAngle(en,.01).multiplyScalar(s.CONSTANTS.SPHERE_RADIUS)}(e.visible,e.invisible,this.viewer.state.direction),visible:!0})}),i.filter(e=>e.visible).map(e=>this.viewer.dataHelper.vector3ToViewerCoords(e.vector))}},ec=class extends G{get svgElement(){return this.domElement.firstElementChild}constructor(e,t,i){super(e,t,i)}isSvg(){return!0}createElement(){let e="square"===this.type?"rect":this.type,t=document.createElementNS(z,e);this.element=document.createElementNS(z,"svg"),this.element.appendChild(t),this.afterCreateElement()}update(e){super.update(e);let t=this.svgElement;switch(this.needsUpdateSize=!0,this.type){case"square":this.definition={x:0,y:0,width:this.config.square,height:this.config.square};break;case"rect":Array.isArray(this.config.rect)?this.definition={x:0,y:0,width:this.config.rect[0],height:this.config.rect[1]}:this.definition={x:0,y:0,width:this.config.rect.width,height:this.config.rect.height};break;case"circle":this.definition={cx:this.config.circle,cy:this.config.circle,r:this.config.circle};break;case"ellipse":Array.isArray(this.config.ellipse)?this.definition={cx:this.config.ellipse[0],cy:this.config.ellipse[1],rx:this.config.ellipse[0],ry:this.config.ellipse[1]}:this.definition={cx:this.config.ellipse.rx,cy:this.config.ellipse.ry,rx:this.config.ellipse.rx,ry:this.config.ellipse.ry};break;case"path":this.definition={d:this.config.path}}
1Object.entries(this.definition).forEach(([e,i])=>{t.setAttributeNS(null,e,i)}),this.config.svgStyle?Object.entries(this.config.svgStyle).forEach(([e,i])=>{t.setAttributeNS(null,s.utils.dasherize(e),i)}):t.setAttributeNS(null,"fill","rgba(0,0,0,0.5)")}},ep=s.utils.getConfigParser({clickEventOnMarker:!1,gotoMarkerSpeed:"8rpm",markers:null,defaultHoverScale:null},{defaultHoverScale:e=>e?(!0===e&&(e=V),"number"==typeof e&&(e={amount:e}),{...V,...e}):null}),ed=class e extends s.AbstractConfigurablePlugin{constructor(e,t){super(e,t),this.markers={},this.state={allVisible:!0,showAllTooltips:!1,currentMarker:null,hoveringMarker:null,needsReRender:!1,lastClientX:null,lastClientY:null},this.container=document.createElement("div"),this.container.className="psv-markers",this.viewer.container.appendChild(this.container),this.container.addEventListener("contextmenu",e=>e.preventDefault()),this.svgContainer=document.createElementNS(z,"svg"),this.svgContainer.setAttribute("class","psv-markers-svg-container"),this.container.appendChild(this.svgContainer),this.css3DContainer=new Y(e),this.container.appendChild(this.css3DContainer.element),this.container.addEventListener("mouseenter",this,!0),this.container.addEventListener("mouseleave",this,!0),this.container.addEventListener("mousemove",this,!0)}static withConfig(t){return[e,t]}init(){super.init(),s.utils.checkStylesheet(this.viewer.container,"markers-plugin"),this.viewer.addEventListener(s.events.ClickEvent.type,this),this.viewer.addEventListener(s.events.DoubleClickEvent.type,this),this.viewer.addEventListener(s.events.RenderEvent.type,this),this.viewer.addEventListener(s.events.ConfigChangedEvent.type,this),this.viewer.addEventListener(s.events.ObjectEnterEvent.type,this),this.viewer.addEventListener(s.events.ObjectHoverEvent.type,this),this.viewer.addEventListener(s.events.ObjectLeaveEvent.type,this),this.viewer.addEventListener(s.events.ReadyEvent.type,this,{once:!0})}destroy(){this.clearMarkers(!1),this.viewer.unobserveObjects(j),this.viewer.removeEventListener(s.events.ClickEvent.type,this),this.viewer.removeEventListener(s.events.DoubleClickEvent.type,this),this.viewer.removeEventListener(s.events.RenderEvent.type,this),this.viewer.removeEventListener(s.events.ObjectEnterEvent.type,this),this.viewer.removeEventListener(s.events.ObjectHoverEvent.type,this),this.viewer.removeEventListener(s.events.ObjectLeaveEvent.type,this),this.viewer.removeEventListener(s.events.ReadyEvent.type,this),this.css3DContainer.destroy(),this.viewer.container.removeChild(this.container),super.destroy()}handleEvent(e){switch(e.type){case s.events.ReadyEvent.type:this.config.markers&&(this.setMarkers(this.config.markers),delete this.config.markers);break;case s.events.RenderEvent.type:this.renderMarkers();break;case s.events.ClickEvent.type:this.__onClick(e,!1);break;case s.events.DoubleClickEvent.type:this.__onClick(e,!0);break;case s.events.ObjectEnterEvent.type:case s.events.ObjectLeaveEvent.type:case s.events.ObjectHoverEvent.type:if(e.userDataKey===j){let t=e.originalEvent,i=e.object.userData[j];switch(e.type){case s.events.ObjectEnterEvent.type:i.config.style?.cursor?this.viewer.setCursor(i.config.style.cursor):(i.config.tooltip||i.config.content)&&this.viewer.setCursor("pointer"),this.__onEnterMarker(t,i);break;case s.events.ObjectLeaveEvent.type:this.viewer.setCursor(null),this.__onLeaveMarker(i);break;case s.events.ObjectHoverEvent.type:this.__onHoverMarker(t,i)}}break;case"mouseenter":{let t=this.__getTargetMarker(s.utils.getEventTarget(e));this.__onEnterMarker(e,t);break}case"mouseleave":{let t=this.__getTargetMarker(s.utils.getEventTarget(e));this.__onLeaveMarker(t);break}case"mousemove":{let t=this.__getTargetMarker(s.utils.getEventTarget(e),!0);this.__onHoverMarker(e,t)}}}toggleAllMarkers(){this.state.allVisible?this.hideAllMarkers():this.showAllMarkers()}showAllMarkers(){this.state.allVisible=!0,Object.values(this.markers).forEach(e=>{e.config.visible=!0}),this.renderMarkers(),this.dispatchEvent(new P)}hideAllMarkers(){this.state.allVisible=!1,Object.values(this.markers).forEach(e=>{e.config.visible=!1}),this.renderMarkers(),this.dispatchEvent(new M)}toggleAllTooltips(){this.state.showAllTooltips?this.hideAllTooltips():this.showAllTooltips()}showAllTooltips(){this.state.showAllTooltips=!0,Object.values(this.markers).forEac
1h(e=>{e.state.staticTooltip=!0,e.showTooltip()})}hideAllTooltips(){this.state.showAllTooltips=!1,Object.values(this.markers).forEach(e=>{e.state.staticTooltip=!1,e.hideTooltip()})}getNbMarkers(){return Object.keys(this.markers).length}getMarkers(){return Object.values(this.markers)}addMarker(e,t=!0){if(this.markers[e.id])throw new s.PSVError(`marker "${e.id}" already exists`);let i=new(function(e){switch(X(e,!1)){case"image":case"html":case"element":return el;case"imageLayer":case"videoLayer":return eo;case"elementLayer":return ea;case"polygon":case"polyline":case"polygonPixels":case"polylinePixels":return eh;case"square":case"rect":case"circle":case"ellipse":case"path":return ec;default:throw new s.PSVError("invalid marker type")}}(e))(this.viewer,this,e);i.isPoly()?this.svgContainer.appendChild(i.domElement):i.isCss3d()?this.css3DContainer.addObject(i):i.is3d()?this.viewer.renderer.addObject(i.threeElement):this.container.appendChild(i.domElement),this.markers[i.id]=i,this.state.showAllTooltips&&(i.state.staticTooltip=!0),t&&this.__afterChangeMarkers()}getMarker(e){let t="object"==typeof e?e.id:e;if(!this.markers[t])throw new s.PSVError(`cannot find marker "${t}"`);return this.markers[t]}getCurrentMarker(){return this.state.currentMarker}updateMarker(e,t=!0){let i=this.getMarker(e.id);i.update(e),t&&(this.__afterChangeMarkers(),(i===this.state.hoveringMarker&&i.config.tooltip?.trigger==="hover"||i.state.staticTooltip)&&i.showTooltip(this.state.lastClientX,this.state.lastClientY,!0))}removeMarker(e,t=!0){let i=this.getMarker(e);i.isPoly()?this.svgContainer.removeChild(i.domElement):i.isCss3d()?this.css3DContainer.removeObject(i):i.is3d()?this.viewer.renderer.removeObject(i.threeElement):this.container.removeChild(i.domElement),this.state.hoveringMarker===i&&(this.state.hoveringMarker=null),this.state.currentMarker===i&&(this.state.currentMarker=null),i.destroy(),delete this.markers[i.id],t&&this.__afterChangeMarkers()}removeMarkers(e,t=!0){e.forEach(e=>this.removeMarker(e,!1)),t&&this.__afterChangeMarkers()}setMarkers(e,t=!0){this.clearMarkers(!1),e?.forEach(e=>{this.addMarker(e,!1)}),t&&this.__afterChangeMarkers()}clearMarkers(e=!0){Object.keys(this.markers).forEach(e=>{this.removeMarker(e,!1)}),e&&this.__afterChangeMarkers()}gotoMarker(e,t=this.config.gotoMarkerSpeed){let i=this.getMarker(e);return t?this.viewer.animate({...i.state.position,zoom:i.config.zoomLvl,speed:t}).then(()=>{this.dispatchEvent(new p(i))}):(this.viewer.rotate(i.state.position),s.utils.isNil(i.config.zoomLvl)||this.viewer.zoom(i.config.zoomLvl),this.dispatchEvent(new p(i)),Promise.resolve())}hideMarker(e){this.toggleMarker(e,!1)}showMarker(e){this.toggleMarker(e,!0)}showMarkerTooltip(e){let t=this.getMarker(e);t.state.staticTooltip=!0,t.showTooltip()}hideMarkerTooltip(e){let t=this.getMarker(e);t.state.staticTooltip=!1,t.hideTooltip()}toggleMarker(e,t){let i=this.getMarker(e);i.config.visible=s.utils.isNil(t)?!i.config.visible:t,this.renderMarkers()}showMarkerPanel(e){let t=this.getMarker(e);t.config.content?this.viewer.panel.show({id:D,content:t.config.content}):this.hideMarkerPanel()}hideMarkerPanel(){this.viewer.panel.hide(D)}toggleMarkersList(){this.viewer.panel.isVisible(N)?this.hideMarkersList():this.showMarkersList()}showMarkersList(){let e,t,i=[];Object.values(this.markers).forEach(e=>{e.config.visible&&!e.config.hideList&&i.push(e)});let r=new _(i);this.dispatchEvent(r),i=r.markers,this.viewer.panel.show({id:N,content:(e=i,t=this.viewer.config.lang[T.id],`
2<div class="psv-panel-menu psv-panel-menu--stripped">
3    <h1 class="psv-panel-menu-title">${A} ${t}</h1>
4    <ul class="psv-panel-menu-list">
5    ${e.map(e=>`
6        <li data-${O}="${e.id}" class="psv-panel-menu-item" tabindex="0">
7          ${"image"===e.type?`<span class="psv-panel-menu-item-icon"><img src="${e.definition}"/></span>`:""}
8          <span class="psv-panel-menu-item-label">${e.getListContent()}</span>
9        </li>
10    `).join("")}
11    </ul>
12</div>
13`),noMargin:!0,clickHandler:e=>{let t=s.utils.getClosest(e,".psv-panel-menu-item"),i=t?t.dataset[j]:void 0;if(i){let e=this.getMarker(i);this.dispatchEvent(new w(e)),this.gotoMarker(e.id),this.hideMarkersList()}}})}hideMarkersList(){this.viewer.panel.hide(N)}renderMarkers(){if(this.state.needsReRender){this.state.needsReRender=!1;return}let e=this.viewer.getZoomLevel(),t=this.viewer.getPosition(),i=this.state.hoveringMarker;
13Object.values(this.markers).forEach(r=>{let n=r.config.visible,o=!1,a=null;n&&(n=!!(a=r.render({viewerPosition:t,zoomLevel:e,hoveringMarker:i}))),o=r.state.visible!==n,r.state.visible=n,r.state.position2D=a,r.domElement&&s.utils.toggleClass(r.domElement,"psv-marker--visible",n),n?r.state.staticTooltip?r.showTooltip():r!==this.state.hoveringMarker&&r.hideTooltip():r.hideTooltip(),o&&(this.dispatchEvent(new h(r,n)),(r.is3d()||r.isCss3d())&&(this.state.needsReRender=!0))}),this.state.needsReRender&&this.viewer.needsUpdate()}__getTargetMarker(e,t=!1){if(e instanceof Node){let i=t?s.utils.getClosest(e,".psv-marker"):e;return i?i[j]:void 0}return Array.isArray(e)?e.map(e=>e.userData[j]).filter(e=>!!e).sort((e,t)=>t.config.zIndex-e.config.zIndex)[0]:null}__onEnterMarker(e,t){t&&(this.state.hoveringMarker=t,this.state.lastClientX=e.clientX,this.state.lastClientY=e.clientY,this.dispatchEvent(new u(t)),t instanceof G&&t.applyScale({zoomLevel:this.viewer.getZoomLevel(),viewerPosition:this.viewer.getPosition(),mouseover:!0}),t.state.staticTooltip||t.config.tooltip?.trigger!=="hover"||t.showTooltip(e.clientX,e.clientY))}__onLeaveMarker(e){e&&(this.dispatchEvent(new v(e)),e instanceof G&&e.applyScale({zoomLevel:this.viewer.getZoomLevel(),viewerPosition:this.viewer.getPosition(),mouseover:!1}),this.state.hoveringMarker=null,e.state.staticTooltip||e.config.tooltip?.trigger!=="hover"?e.state.staticTooltip&&e.showTooltip():e.hideTooltip())}__onHoverMarker(e,t){t&&(this.state.lastClientX=e.clientX,this.state.lastClientY=e.clientY,(t.isPoly()||t.is3d()||t.isCss3d())&&t.config.tooltip?.trigger==="hover"&&t.showTooltip(e.clientX,e.clientY))}__onClick(e,t){let i=this.__getTargetMarker(e.data.objects),s=this.__getTargetMarker(e.data.target,!0)||i;this.state.currentMarker&&this.state.currentMarker!==s&&(this.dispatchEvent(new E(this.state.currentMarker)),this.viewer.panel.hide(D),this.state.showAllTooltips||this.state.currentMarker.config.tooltip?.trigger!=="click"||this.hideMarkerTooltip(this.state.currentMarker.id),this.state.currentMarker=null),s&&(this.state.currentMarker=s,this.dispatchEvent(new f(s,t,e.data.rightclick)),this.config.clickEventOnMarker?e.data.marker=s:e.stopImmediatePropagation(),this.markers[s.id]&&!e.data.rightclick&&(s.config.tooltip?.trigger==="click"?s.tooltip?this.hideMarkerTooltip(s.id):this.showMarkerTooltip(s.id):this.showMarkerPanel(s.id)))}__afterChangeMarkers(){this.__refreshUi(),this.__checkObjectsObserver(),this.viewer.needsUpdate(),this.dispatchEvent(new x(this.getMarkers()))}__refreshUi(){let e=Object.values(this.markers).filter(e=>!e.config.hideList).length;0===e?(this.viewer.panel.hide(D),this.viewer.panel.hide(N)):this.viewer.panel.isVisible(N)?this.showMarkersList():this.viewer.panel.isVisible(D)&&(this.state.currentMarker?this.showMarkerPanel(this.state.currentMarker.id):this.viewer.panel.hide()),this.viewer.navbar.getButton(T.id,!1)?.toggle(e>0),this.viewer.navbar.getButton(H.id,!1)?.toggle(e>0)}__checkObjectsObserver(){Object.values(this.markers).some(e=>e.is3d())?this.viewer.observeObjects(j):this.viewer.unobserveObjects(j)}};ed.id="markers",ed.VERSION="5.14.1",ed.configParser=ep,ed.readonlyOptions=["markers"];var ev=ed;s.DEFAULTS.lang[T.id]="Markers",s.DEFAULTS.lang[H.id]="Markers list",(0,s.registerButton)(T,"caption:left"),(0,s.registerButton)(H,"caption:left")}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.