@panoramax/web-viewer 4.2.0-develop-b0825f64 → 4.2.0-develop-0dc2b58d

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.
package/build/index.js CHANGED
@@ -9,7 +9,7 @@
9
9
  * LICENSE file in the root directory of this source tree.
10
10
  *
11
11
  */
12
- !function(ae,ue){"object"===typeof exports&&"object"===typeof module?module.exports=ue():"function"===typeof define&&define.amd?define("Panoramax",[],ue):"object"===typeof exports?exports.Panoramax=ue():ae.Panoramax=ue()}(this,(()=>(()=>{var ae={9039:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>Basic});var ut=nt(4542),qt=nt(5254),Yt=nt(4964),Xt=nt(7208),ys=nt(5995),Ec=nt(7343),lu=nt(2614),uu=nt.n(lu),_u=nt(8330);nt(1865),nt(3638);class Basic extends ut.WF{constructor(){let ae=arguments.length>0&&void 0!==arguments[0]&&arguments[0];super(),this.users=["geovisio"],this["map-style"]=this.getAttribute("map-style")||(0,Xt.MapTiles)(),this.lang=this.getAttribute("lang")||null,this.endpoint=this.getAttribute("endpoint")||null,this.picture=this.getAttribute("picture")||null,this.sequence=this.getAttribute("sequence")||null,console.info(`\ud83d\udcf7 Panoramax ${this.getClassName()} - Version ${_u.rE} (b0825f6)\n\n\ud83c\udd98 Issues can be reported at ${_u.Jk.O}`),ae||(this._isInternetFast=null,(0,Ec.isInternetFast)().then((ae=>this._isInternetFast=ae)))}connectedCallback(){super.connectedCallback(),this._t=(0,Yt.getTranslations)(this.lang),this.loader=(0,ys.createWebComp)("pnx-loader",{_parent:this,"no-label":(0,Ec.isInIframe)()}),this._loadsAPI&&this.endpoint&&this._loadsAPI===this.endpoint||this.api&&this.api._endpoint===this.endpoint||!this.endpoint||((this._loadsAPI||this.api)&&(delete this.api,delete this._loadsAPI),this._setupAPI()),Object.entries({map:"map-options",psv:"psv-options",fetchOptions:"fetch-options",mapstyle:"map-style"}).forEach((ae=>{let[ue,nt]=ae;this.getAttribute(ue)&&console.error(`Component attribute "${ue}" has been renamed into "${nt}". Old attribute "${ue}" is ignored.`)}))}_setupAPI(){if(this.loader=this.loader||(0,ys.createWebComp)("pnx-loader",{_parent:this}),!this.endpoint)return void console.warn("No endpoint is defined");this._loadsAPI=this.endpoint;let ae=this.endpoint;try{this["map-style"]=JSON.parse(this["map-style"])}catch(nt){}try{this.api=new qt.A(this.endpoint,{users:this.users,fetch:this["fetch-options"],style:this["map-style"]}),this.api.onceReady().then((()=>{if(ae!=this._loadsAPI||!this.api)return;let ue=this.api.getUnavailableFeatures(),nt=this.api.getAvailableFeatures();nt=0===ue.length?"\u2705 All features available":"\u2705 Available features: "+nt.join(", "),ue=0===ue.length?"":"\ud83d\udeab Unavailable features: "+ue.join(", "),console.info(`\ud83c\udf10 Connected to API "${this.api._metadata.name}" (${this.api._endpoint})\n\u2139\ufe0f API runs STAC ${this.api._metadata.stac_version} ${this.api._metadata.geovisio_version?"& GeoVisio "+this.api._metadata.geovisio_version:""}\n ${nt}\n ${ue}\n`.trim())})).catch((ae=>this.loader.dismiss(ae,this._t.pnx.error_api))).finally((()=>delete this._loadsAPI))}catch(nt){var ue;delete this._loadsAPI,null!==(ue=this.loader)&&void 0!==ue&&ue.dismiss?this.loader.dismiss(nt,this._t.pnx.error_api):console.error(nt)}}onceReady(){throw new Error("You must override this method on sub-class")}onceAPIReady(){return this.api?this.api.onceReady():new Promise((ae=>setTimeout(ae,100))).then(this.onceAPIReady.bind(this))}createRenderRoot(){return this}attributeChangedCallback(ae,ue,nt){if(super.attributeChangedCallback(ae,ue,nt),"endpoint"===ae&&(this._loadsAPI&&nt&&this._loadsAPI===nt||this.api&&this.api._endpoint===nt||!nt||((this._loadsAPI||this.api)&&(delete this.api,delete this._loadsAPI),this._setupAPI())),["picture","sequence"].includes(ae)){let ut,qt,Yt,Xt;"picture"===ae?(ut=this.sequence,Yt=this.sequence,qt=nt,Xt=ue):(ut=nt,Yt=ue,qt=this.picture,Xt=this.picture),this.dispatchEvent(new CustomEvent("select",{bubbles:!0,composed:!0,detail:{seqId:ut,picId:qt,prevSeqId:Yt,prevPicId:Xt}}))}}getClassName(){return"Basic"}select(){let ae=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,ue=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;arguments.length>2&&void 0!==arguments[2]&&arguments[2]&&(this.picture=null,this.sequence=null),this.picture=ue,this.sequence=ae}isWidthSmall(){return(null===this||void 0===this?void 0:this.offsetWidth)<576}isHeightSmall(){return(null===this||void 0===this?void 0:this.offsetHeight)<400}render(){return ut.qy`<p>Should not be used directly, use Viewer/CoverageMap/Editor instead</p>`}getSubComponentsNames(){return["loader","api"]}addEventListener(ae,ue,nt){let ut=ae.split(":").shift();if(ut&&this.getSubComponentsNames().includes(ut)){var qt;const Yt=ae.substring(ut.length+1);null!==(qt=this[ut])&&void 0!==qt&&qt.addEventListener?this[ut].addEventListener(Yt,ue,nt):setTimeout((()=>this.addEventListener(ae,ue,nt)),50)}else super.addEventListener(ae,ue,nt)}static GetJSONConverter(){return{fromAttribute:ae=>null===ae||""===ae?null:"object"===typeof ae||Array.isArray(ae)?ae:uu().parse(ae),toAttribute:ae=>null===ae||""===ae?"":"string"===typeof ae?ae:uu().stringify(ae)}}}Basic.properties={picture:{type:String,reflect:!0},sequence:{type:String,reflect:!0},"fetch-options":{converter:Basic.GetJSONConverter()},users:{type:Array,reflect:!0},"map-style":{type:String},lang:{type:String},endpoint:{type:String}}},153:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>CoverageMap});var ut=nt(9039),qt=nt(5642),Yt=nt(8340),Xt=nt(927),ys=(nt(7776),nt(2118));class CoverageMap extends ut.A{constructor(){super(),this._mapContainer=document.createElement("div"),this.onceAPIReady().then((()=>{this.loader.setAttribute("value",30),this._initParams=new ys.Ay(ys.Ay.GetComponentProperties(CoverageMap,this)),this._initMap()}))}disconnectedCallback(){var ae;super.disconnectedCallback(),null===(ae=this.map)||void 0===ae||ae.destroy()}getClassName(){return"CoverageMap"}onceReady(){return this.map&&this.map.waitForEnoughMapLoaded?this.map.waitForEnoughMapLoaded():new Promise((ae=>setTimeout(ae,100))).then(this.onceReady.bind(this))}render(){return[this.loader,this._mapContainer]}getSubComponentsNames(){const ae=super.getSubComponentsNames();return ae.push("map"),ae}_initMap(){class MyMap extends qt.A{_getLayerStyleProperties(ae){return"pictures_symbols"===ae?{layout:{visibility:"none"}}:super._getLayerStyleProperties(ae)}}this.map=new MyMap(this,this._mapContainer,Object.assign({},this._initParams.getMapInit(),{hash:!0})),this.map.addControl(new Xt.NavigationControl({showCompass:!1})),this.loader.setAttribute("value",70),this.addEventListener("select",this._onSelect.bind(this)),this.map.on("picture-click",(ae=>this.select(ae.seqId,ae.picId))),this.map.on("sequence-click",(ae=>this.select(ae.seqId))),this.map.waitForEnoughMapLoaded().then((async()=>{await(0,ys.mK)(this.map,this._initParams.getMapPostInit()),this.map.reloadLayersStyles(),this.loader.dismiss()}))}_onSelect(ae){if(ae.detail.picId||ae.detail.seqId){const ue=ae.detail.picId?"pictures":"sequences",nt=this.map.queryRenderedFeatures({layers:[...this.map._userLayers].map((ae=>(0,Yt.getUserLayerId)(ae,ue))),filter:["==",["get","id"],ae.detail.picId||ae.detail.seqId]});nt.length>=0&&null!=nt[0]&&this.map._attachPreviewToPictures({features:nt},ue)}}}CoverageMap.properties={"map-options":{converter:ut.A.GetJSONConverter()},...ut.A.properties},customElements.define("pnx-coverage-map",CoverageMap)},1752:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>Editor});nt(7365);var ut=nt(9039),qt=nt(5642),Yt=nt(9048),Xt=nt(508),ys=nt(8340),Ec=nt(1545),lu=nt(5995);const uu="sequence-headings";class Editor extends ut.A{constructor(){super(),this.raster=null,this.background="streets",this.users=[],this._psvContainer=document.createElement("div"),this._psvContainer.setAttribute("slot","bg"),this._mapContainer=document.createElement("div"),this._mapContainer.setAttribute("slot","bg"),this.grid=(0,lu.createWebComp)("pnx-cornered-grid"),this.grid.appendChild(this._psvContainer),this.grid.appendChild(this._mapContainer),this.onceAPIReady().then((()=>{this.loader.setAttribute("value",30),this.sequence||this.loader.dismiss({},"No sequence is selected"),this.addEventListener("select",this._onSelect.bind(this)),this._initPSV(),this._initMap()}))}disconnectedCallback(){var ae,ue;super.disconnectedCallback(),null===(ae=this.map)||void 0===ae||ae.destroy(),null===(ue=this.psv)||void 0===ue||ue.destroy()}getClassName(){return"Editor"}onceReady(){var ae,ue;return this.map&&this.psv&&null!==(ae=(ue=this.map).loaded)&&void 0!==ae&&ae.call(ue)?Promise.resolve():new Promise((ae=>setTimeout(ae,100))).then(this.onceReady.bind(this))}connectedCallback(){Array.isArray(this.users)&&this.users.length>0&&(console.warn("Parameters users can't be changed in Editor, only selected sequence can be visible"),this.users=[]),super.connectedCallback(),this._moveChildToGrid(),window.addEventListener("DOMContentLoaded",(()=>{this._moveChildToGrid()}),{once:!0})}attributeChangedCallback(ae,ue,nt){"users"===ae&&Array.isArray(nt)&&nt.length>0?console.warn("Parameters users can't be changed in Editor, only selected sequence can be visible"):super.attributeChangedCallback(ae,ue,nt)}render(){return[this.loader,this.grid]}getSubComponentsNames(){return super.getSubComponentsNames().concat(["map","psv","grid"])}_initPSV(){try{this.psv=new Yt.Ay(this,this._psvContainer),this.psv._myVTour.datasource.nodeResolver=this._getNode.bind(this)}catch(ae){let ue=Ec.IJ.isWebGLSupported?this._t.pnx.error_psv:this._t.pnx.error_webgl;this.loader.dismiss(ae,ue)}}_initMap(){try{this.map=new qt.A(this,this._mapContainer,{raster:this.raster,background:this.background,supplementaryStyle:this._createMapStyle(),zoom:15,picMarkerDraggable:!0}),(0,ys.linkMapAndPhoto)(this),this.loader.setAttribute("value",50),this._loadSequence(),this.map.once("load",(()=>{this.map.hasTwoBackgrounds()&&this._addMapBackgroundWidget(),this._bindPicturesEvents()}));const ae=this.map._picMarker.setRotation.bind(this.map._picMarker);this.map._picMarker.setRotation=ue=>(ue=void 0===this._lastRelHeading?ue:ue+this._lastRelHeading-this.psv.getPictureRelativeHeading(),ae(ue))}catch(ae){this.loader.dismiss(ae,this._t.pnx.error_psv)}}_createMapStyle(){return{sources:{geovisio_editor_sequences:{type:"geojson",data:{type:"FeatureCollection",features:[]}}},layers:[{id:"geovisio_editor_sequences",type:"line",source:"geovisio_editor_sequences",layout:{...ys.VECTOR_STYLES.SEQUENCES.layout},paint:{...ys.VECTOR_STYLES.SEQUENCES.paint}},{id:"geovisio_editor_pictures",type:"circle",source:"geovisio_editor_sequences",layout:{...ys.VECTOR_STYLES.PICTURES.layout},paint:{...ys.VECTOR_STYLES.PICTURES.paint}}]}}_bindPicturesEvents(){this.map.on("mousemove","geovisio_editor_pictures",(()=>{this.map.getCanvas().style.cursor="pointer"})),this.map.on("mouseleave","geovisio_editor_pictures",(()=>{this.map.getCanvas().style.cursor=""})),this.map.on("click","geovisio_editor_pictures",this.map._onPictureClick.bind(this.map))}_loadSequence(){return this.loader.setAttribute("value",60),this.api.getSequenceItems(this.sequence).then((ae=>{if(this.loader.setAttribute("value",80),this.map.once("sourcedata",(()=>{this.map.setPaintProperty("geovisio_editor_sequences","line-color",this.map._getLayerColorStyle("sequences")),this.map.setPaintProperty("geovisio_editor_pictures","circle-color",this.map._getLayerColorStyle("pictures")),this.map.setLayoutProperty("geovisio_editor_sequences","visibility","visible"),this.map.setLayoutProperty("geovisio_editor_pictures","visibility","visible"),this.map.once("styledata",(()=>this.loader.dismiss()))})),this._sequenceData=ae.features,this.map.getSource("geovisio_editor_sequences").setData({type:"FeatureCollection",features:[{id:this.sequence,type:"Feature",properties:{id:this.sequence},geometry:{type:"LineString",coordinates:ae.features.map((ae=>ae.geometry.coordinates))}},...ae.features.map((ae=>(ae.properties.id=ae.id,ae.properties.sequences=[this.sequence],ae)))]}),this.picture){const ue=ae.features.find((ae=>ae.id===this.picture));ue?(this.select(this.sequence,this.picture,!0),this.map.jumpTo({center:ue.geometry.coordinates,zoom:18})):console.log("Picture with ID",ue,"was not found")}else{const ue=[...ae.features[0].geometry.coordinates,...ae.features[0].geometry.coordinates];for(let nt=1;nt<ae.features.length;nt++){const ut=ae.features[nt].geometry.coordinates;ut[0]<ue[0]&&(ue[0]=ut[0]),ut[1]<ue[1]&&(ue[1]=ut[1]),ut[0]>ue[2]&&(ue[2]=ut[0]),ut[1]>ue[3]&&(ue[3]=ut[1])}this.map.fitBounds(ue,{animate:!1})}})).catch((ae=>this.loader.dismiss(ae,this._t.pnx.error_api)))}_getNode(ae){const ue=this._sequenceData.find((ue=>ue.properties.id===ae)),nt=ue?(0,Xt.apiFeatureToPSVNode)(ue,this._t,this._isInternetFast,void 0,(ae=>this.api.cleanResourceURL(ae))):null;return nt&&delete nt.links,nt}_addMapBackgroundWidget(){const ae=(0,lu.createWebComp)("pnx-map-background",{_parent:this,size:"sm",slot:"bottom-left"});this.grid.appendChild(ae)}_moveChildToGrid(){Array.from(this.querySelectorAll("[slot]")).forEach((ae=>{var ue;null!==(ue=ae.tagName)&&void 0!==ue&&ue.toLowerCase().startsWith("pnx-")&&(ae._parent=this,ae._t=this._t),this.grid.appendChild(ae)}))}previewSequenceHeadingChange(ae){const ue=void 0!==this.map.getLayer(uu);if(this.map._picMarkerPreview.remove(),void 0===ae)return delete this._lastRelHeading,ue&&this.map.setLayoutProperty(uu,"visibility","none"),void(this.picture&&this.map._picMarker.setRotation(this.psv.getXY().x));this._lastRelHeading=ae,ue||this.map.addLayer({id:uu,type:"symbol",source:"geovisio_editor_sequences",layout:{"icon-image":"pnx-marker","icon-overlap":"always","icon-size":.8}});const nt=-this.psv.getPictureRelativeHeading();this.map.setLayoutProperty(uu,"visibility","visible"),this.map.setLayoutProperty(uu,"icon-rotate",["+",["get","view:azimuth"],nt,ae]);const ut=[["==",["geometry-type"],"Point"]];this.picture&&ut.push(["!=",["get","id"],this.picture]),this.map.setFilter(uu,["all",...ut]),this.picture&&this.map._picMarker.setRotation(this.psv.getXY().x)}_onSelect(){void 0!==this._lastRelHeading&&this.previewSequenceHeadingChange(this._lastRelHeading)}}Editor.properties={raster:{converter:ut.A.GetJSONConverter()},background:{type:String},...ut.A.properties},customElements.define("pnx-editor",Editor)},3407:(ae,ue,nt)=>{"use strict";nt.d(ue,{$p:()=>_u,Ay:()=>PhotoViewer,RD:()=>wu});nt(970);var ut=nt(1545),qt=nt(4451),Yt=nt(9039),Xt=nt(9048),ys=nt(5995),Ec=nt(7343),lu=nt(2118),uu=nt(4207);const _u=20,vu=Math.PI/6,wu=["pnx-mini","pnx-widget-player","pnx-widget-zoom"];class PhotoViewer extends Yt.A{constructor(){super(),this["psv-options"]={},this["url-parameters"]=this.getAttribute("url-parameters")||!0,this["keyboard-shortcuts"]=this.getAttribute("keyboard-shortcuts")||!0,this["skip-tags-menu-opening"]="true"!==(this.getAttribute("skip-tags-menu-opening")||"false"),this.widgets=this.getAttribute("widgets")||"true",this.grid=(0,ys.createWebComp)("pnx-cornered-grid"),this.psvContainer=document.createElement("div"),this.psvContainer.setAttribute("slot","bg"),this.grid.appendChild(this.psvContainer),this.popup=(0,ys.createWebComp)("pnx-popup",{_parent:this,onclose:this._onPopupClose.bind(this)}),this.tabindex=0,this._sequencesMetadata={}}_createInitParamsHandler(){var ae,ue;this._initParams=new lu.Ay(lu.Ay.GetComponentProperties(PhotoViewer,this),Object.assign({},null===(ae=this.urlHandler)||void 0===ae?void 0:ae.currentURLParams(),null===(ue=this.urlHandler)||void 0===ue?void 0:ue.currentURLParams(!0)),{disableAnnotations:localStorage.getItem(Ec.DISABLE_ANNOTATIONS_PARAM)})}_initWidgets(){"false"!==this._initParams.getParentPostInit().widgets&&((0,Ec.isInIframe)()||(this.grid.appendChild((0,ys.createWebComp)("pnx-widget-player",{slot:"top",_parent:this,class:"pnx-only-psv pnx-print-hidden",size:this.isHeightSmall()?"md":"xl"})),this.grid.appendChild((0,ys.createWebComp)("pnx-annotations-switch",{slot:"top",_parent:this,class:"pnx-only-psv pnx-print-hidden",size:this.isHeightSmall()?"md":"xl"}))),(0,Ec.isInIframe)()?(this.legend=(0,ys.createWebComp)("pnx-widget-legend",{slot:"bottom-right",light:!0,_parent:this,focus:this._initParams.getParentPostInit().focus,picture:this._initParams.getParentPostInit().picture}),this.grid.appendChild(this.legend)):this.isWidthSmall()?(this.legend=(0,ys.createWebComp)("pnx-picture-legend",{_parent:this}),this.bottomDrawer=(0,ys.createWebComp)("pnx-bottom-drawer",{slot:"bottom",_parent:this,class:this._initParams.getParentPostInit().willLoadPicture?void 0:"pnx-hidden"}),this.bottomDrawer.appendChild(this.legend),this.grid.appendChild(this.bottomDrawer),this.addEventListener("select",(ae=>{(0,Ec.isNullId)(ae.detail.picId)?this.bottomDrawer.classList.add("pnx-hidden"):this.bottomDrawer.classList.remove("pnx-hidden")}))):(this.legend=(0,ys.createWebComp)("pnx-widget-legend",{slot:this.isWidthSmall()?void 0:"top-left",_parent:this,focus:this._initParams.getParentPostInit().focus,picture:this._initParams.getParentPostInit().picture}),this.grid.appendChild((0,ys.createWebComp)("pnx-widget-zoom",{slot:"bottom-right",class:"pnx-print-hidden",_parent:this})),this.grid.appendChild(this.legend)))}connectedCallback(){super.connectedCallback(),this.presetsManager=new uu.A(this.lang),this["url-parameters"]&&"false"!==this["url-parameters"]&&(this.urlHandler=new qt.A(this),this.onceReady().then((()=>{this.urlHandler.listenToChanges(),this.urlHandler._onParentChange()}))),this.onceAPIReady().then(this._postAPIInit.bind(this)),this._moveChildToGrid(),window.addEventListener("DOMContentLoaded",(()=>{this._moveChildToGrid()}),{once:!0})}disconnectedCallback(){var ae,ue;super.disconnectedCallback(),null===(ae=this.urlHandler)||void 0===ae||ae.destroy(),null===(ue=this.psv)||void 0===ue||ue.destroy(),document.body.removeEventListener("click",this._toggleKeyboardBasedOnFocus),window.removeEventListener("keypress",this._toggleKeyboardBasedOnFocus)}getClassName(){return"PhotoViewer"}onceReady(){return this.oncePSVReady().then((()=>this._initParams.getParentPostInit().willLoadPicture&&!this.psv.getPictureMetadata()?this.onceFirstPicLoaded():Promise.resolve()))}render(){return[this.loader,this.grid,this.popup]}getSubComponentsNames(){return super.getSubComponentsNames().concat(["psv","grid","popup","urlHandler"])}oncePSVReady(){let ae;return new Promise((ue=>{ae=setInterval((()=>{this.psv&&"object"===typeof this.psv&&(this.psv.container?(clearInterval(ae),ue()):this.psv.addEventListener&&this.psv.addEventListener("ready",(()=>{clearInterval(ae),ue()}),{once:!0}))}),250)}))}onceFirstPicLoaded(){return this.oncePSVReady().then((()=>this.psv.getPictureMetadata()?Promise.resolve():new Promise((ae=>{this.psv.addEventListener("picture-loaded",ae,{once:!0})}))))}async _postAPIInit(){this.loader.setAttribute("value",30),this._createInitParamsHandler();const ae=this._initParams.getParentPostInit();this._initPSV(),this._initWidgets(),(0,lu.ai)(this,ae),ae.keyboardShortcuts&&this._handleKeyboardManagement(),ae.willLoadPicture?this.psv.getPictureMetadata()?this.loader.dismiss():this.psv.addEventListener("picture-loaded",(()=>this.loader.dismiss()),{once:!0}):this.loader.dismiss()}_initPSV(){try{this.psv=new Xt.Ay(this,this.psvContainer,{shouldGoFast:this._psvShouldGoFast.bind(this),keyboard:"always",keyboardActions:{...ut.zY.keyboardActions,8:"ROTATE_UP",2:"ROTATE_DOWN",4:"ROTATE_LEFT",6:"ROTATE_RIGHT",PageUp:()=>this.psv.goToNextPicture(),9:()=>this.psv.goToNextPicture(),PageDown:()=>this.psv.goToPrevPicture(),3:()=>this.psv.goToPrevPicture(),5:()=>this.moveCenter(),"*":()=>this.moveCenter(),Home:()=>{var ae;return null===(ae=this._toggleFocus)||void 0===ae?void 0:ae.call(this)},7:()=>{var ae;return null===(ae=this._toggleFocus)||void 0===ae?void 0:ae.call(this)},End:()=>this.mini.toggleAttribute("collapsed"),1:()=>this.mini.toggleAttribute("collapsed")," ":()=>this.psv.toggleSequencePlaying(),0:()=>this.psv.toggleSequencePlaying()},...this._initParams.getPSVInit()}),this.oncePSVReady().then((()=>{this.loader.setAttribute("value",50),(0,lu.Vy)(this.psv,this._initParams.getPSVPostInit())})),this.psv.addEventListener("sequence-playing",(()=>this.classList.add("pnx-playing"))),this.psv.addEventListener("sequence-stopped",(()=>this.classList.remove("pnx-playing")))}catch(ae){let ue=ut.IJ.isWebGLSupported?this._t.pnx.error_psv:this._t.pnx.error_webgl;this.loader.dismiss(ae,ue)}}_enableKeyboard(){this.psv.startKeyboardControl()}_disableKeyboard(){this.psv.stopKeyboardControl()}_toggleKeyboardBasedOnFocus(ae){const ue=(null===ae||void 0===ae?void 0:ae.target)||document.activeElement;if(this.contains(ue)){for(let ae of this.grid.childNodes)if("bg"!==ae.getAttribute("slot")&&!wu.includes(ae.tagName.toLowerCase())&&ae.contains(ue))return void this._disableKeyboard();this._enableKeyboard()}else this._disableKeyboard()}_handleKeyboardManagement(){window.addEventListener("click",(ae=>this._toggleKeyboardBasedOnFocus(ae))),window.addEventListener("keypress",this._toggleKeyboardBasedOnFocus.bind(this)),this.popup.addEventListener("open",this._disableKeyboard.bind(this)),this.popup.addEventListener("close",this._enableKeyboard.bind(this)),this.psv.addEventListener("click",this._enableKeyboard.bind(this));for(let ae of this.grid.childNodes)"bg"===ae.getAttribute("slot")||wu.includes(ae.tagName.toLowerCase())||(ae.addEventListener("focusin",this._disableKeyboard.bind(this)),ae.addEventListener("focusout",(()=>{null===this.popup.getAttribute("visible")&&this._enableKeyboard()})))}_psvShouldGoFast(){return this.psv._sequencePlaying&&this.psv.getTransitionDuration()<1e3}_moveChildToGrid(){Array.from(this.querySelectorAll("[slot]")).forEach((ae=>{var ue;null!==(ue=ae.tagName)&&void 0!==ue&&ue.toLowerCase().startsWith("pnx-")&&(ae._parent=this,ae._t=this._t),"editors"===ae.getAttribute("slot")?this.onceReady().then((()=>{var ue;return null===(ue=this.legend)||void 0===ue?void 0:ue.appendChild(ae)})):this.grid.appendChild(ae)}))}setPopup(ae){let ue=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;ae?this.popup.setAttribute("visible",""):this.popup.removeAttribute("visible"),this.popup.innerHTML="","string"===typeof ue?this.popup.innerHTML=ue:Array.isArray(ue)&&ue.forEach((ae=>this.popup.appendChild(ae)))}_onPopupClose(){this.dispatchEvent(new CustomEvent("focus-changed",{detail:{focus:this.map&&this.isMapWide()?"map":"pic"}}))}_showQualityScoreDoc(){this.setPopup(!0,[(0,ys.createWebComp)("pnx-quality-score-doc",{_t:this._t})])}_showReportForm(){if(!this.psv.getPictureMetadata())throw new Error("No picture currently selected");this.setPopup(!0,[(0,ys.createWebComp)("pnx-report-form",{_parent:this})])}_showShareOptions(){this.setPopup(!0,[(0,ys.createWebComp)("pnx-share-menu",{_parent:this})])}_showSemanticsDoc(){this.setPopup(!0,[(0,ys.createWebComp)("pnx-semantics-doc",{_t:this._t})])}_showSemanticsDownload(){this.setPopup(!0,[(0,ys.createWebComp)("pnx-semantics-download",{_t:this._t})])}moveCenter(){this.psv.getPictureMetadata()&&this._psvAnimate({speed:Xt.LM,yaw:0,pitch:0,zoom:Xt.cS})}moveLeft(){this._moveToDirection("left")}moveRight(){this._moveToDirection("right")}moveUp(){this._moveToDirection("up")}moveDown(){this._moveToDirection("down")}_moveToDirection(ae){let ue=this.psv.getPosition();switch(ae){case"up":ue.pitch+=vu;break;case"left":ue.yaw-=vu;break;case"down":ue.pitch-=vu;break;case"right":ue.yaw+=vu}this._psvAnimate({speed:Xt.LM,...ue})}_psvAnimate(ae){this._lastPsvAnim&&this._lastPsvAnim.cancel(),this._lastPsvAnim=this.psv.animate(ae)}addEventListener(ae,ue,nt){super.addEventListener(ae,ue,nt)}}PhotoViewer.properties={"psv-options":{converter:Yt.A.GetJSONConverter()},widgets:{type:String},"url-parameters":{type:String},"keyboard-shortcuts":{type:String},tabindex:{type:Number},"skip-tags-menu-opening":{type:String},...Yt.A.properties},customElements.define("pnx-photo-viewer",PhotoViewer)},8743:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>Viewer});nt(9616);var ut=nt(8340),qt=nt(3407),Yt=nt(2771),Xt=nt(7343),ys=nt(5995),Ec=nt(9683),lu=nt(2e3),uu=nt(9438),_u=nt(2118);const vu=100;class Viewer extends qt.Ay{constructor(){super(),this["map-options"]=!0,this.geocoder=this.getAttribute("geocoder")||"nominatim",this.mini=(0,ys.createWebComp)("pnx-mini",{slot:"bottom-left",_parent:this,onexpand:this._onMiniExpand.bind(this),collapsed:!!(0,Xt.isNullId)(this.picture)||void 0}),this.mini.addEventListener("expand",this._toggleFocus.bind(this)),this.grid.appendChild(this.mini),this.mapContainer=document.createElement("div"),this.tabindex=0}_createInitParamsHandler(){var ae,ue;this._initParams=new _u.Ay(_u.Ay.GetComponentProperties(Viewer,this),Object.assign({},null===(ae=this.urlHandler)||void 0===ae?void 0:ae.currentURLParams(),null===(ue=this.urlHandler)||void 0===ue?void 0:ue.currentURLParams(!0)),{map:(0,ut.getMapParamsFromLocalStorage)(),disableAnnotations:localStorage.getItem(Xt.DISABLE_ANNOTATIONS_PARAM)})}_initWidgets(){var ae,ue;"false"!==this._initParams.getParentPostInit().widgets&&(this.grid.appendChild((0,ys.createWebComp)("pnx-widget-zoom",{slot:this.isWidthSmall()?"top-left":"bottom-right",class:this.isWidthSmall()?"pnx-only-map pnx-print-hidden":"pnx-print-hidden",_parent:this})),(0,Xt.isInIframe)()?(this.legend=(0,ys.createWebComp)("pnx-widget-legend",{slot:"bottom-right",light:!0,_parent:this,focus:this._initParams.getParentPostInit().focus,picture:this._initParams.getParentPostInit().picture}),this.grid.appendChild(this.legend)):this.isWidthSmall()?(this.legend=(0,ys.createWebComp)("pnx-picture-legend",{_parent:this}),this.bottomDrawer=(0,ys.createWebComp)("pnx-bottom-drawer",{slot:"bottom",_parent:this,class:this._initParams.getParentPostInit().willLoadPicture?void 0:"pnx-hidden"}),this.bottomDrawer.appendChild(this.legend),this.grid.appendChild(this.bottomDrawer),this.addEventListener("select",(ae=>{(0,Xt.isNullId)(ae.detail.picId)?this.bottomDrawer.classList.add("pnx-hidden"):this.bottomDrawer.classList.remove("pnx-hidden")}))):(this.legend=(0,ys.createWebComp)("pnx-widget-legend",{slot:this.isWidthSmall()?"top":"top-left",_parent:this,focus:this._initParams.getParentPostInit().focus,picture:this._initParams.getParentPostInit().picture}),this._miniPicLegend=(0,ys.createWebComp)("pnx-mini-picture-legend",{_parent:this}),this.grid.appendChild(this.legend)),(0,Xt.isInIframe)()||(this.grid.appendChild((0,ys.createWebComp)("pnx-widget-player",{slot:"top",_parent:this,class:"pnx-only-psv pnx-print-hidden",size:this.isHeightSmall()?"md":"xl"})),this.grid.appendChild((0,ys.createWebComp)("pnx-annotations-switch",{slot:"top",_parent:this,class:"pnx-only-psv pnx-print-hidden",size:this.isHeightSmall()?"md":"xl"})),this.grid.appendChild((0,ys.createWebComp)("pnx-widget-geosearch",{slot:this.isWidthSmall()?"top-right":"top-left",_parent:this,class:"pnx-only-map pnx-print-hidden",geocoder:this._initParams.getParentPostInit().geocoder})),this.grid.appendChild((0,ys.createWebComp)("pnx-widget-mapfilters",{slot:this.isWidthSmall()?"top-right":"top-left",_parent:this,"user-search":null!==this.api._endpoints.user_search&&null!==this.api._endpoints.user_tiles,"quality-score":(null===(ae=this.map)||void 0===ae||null===(ue=ae._hasQualityScore)||void 0===ue?void 0:ue.call(ae))||!1,class:"pnx-only-map pnx-print-hidden"})),this.grid.appendChild((0,ys.createWebComp)("pnx-widget-semantics-filters",{slot:this.isWidthSmall()?"top-right":"top-left",_parent:this,class:"pnx-only-map pnx-print-hidden"})),this.grid.appendChild((0,ys.createWebComp)("pnx-widget-maplayers",{slot:"top-right",_parent:this,class:"pnx-only-map pnx-print-hidden"}))))}disconnectedCallback(){var ae;super.disconnectedCallback(),null===(ae=this.map)||void 0===ae||ae.destroy()}getClassName(){return"Viewer"}getSubComponentsNames(){return super.getSubComponentsNames().concat(["mini","map"])}onceReady(){return Promise.all([this.oncePSVReady(),this.onceMapReady()]).then((()=>this._initParams.getParentPostInit().willLoadPicture&&!this.psv.getPictureMetadata()?this.onceFirstPicLoaded():Promise.resolve()))}attributeChangedCallback(ae,ue,nt){var ut,qt;if(super.attributeChangedCallback(ae,ue,nt),"picture"===ae)if(null===(ut=this.legend)||void 0===ut||null===(qt=ut.setAttribute)||void 0===qt||qt.call(ut,"picture",nt),(0,Xt.isNullId)(ue)&&!(0,Xt.isNullId)(nt)&&this.mini.removeAttribute("collapsed"),(0,Xt.isNullId)(nt))this.map&&this.isMapWide()?this.mini.classList.add("pnx-hidden"):this.map&&!this.isMapWide()&&this._setFocus("map");else if((0,Xt.isNullId)(ue)&&this.sequence==this._initParams.getParentPostInit().sequence&&!this._initParams.getParentPostInit().picture){var Yt,ys;this.mini.classList.remove("pnx-hidden"),this.mini.removeAttribute("collapsed"),"closed"===(null===(Yt=this.bottomDrawer)||void 0===Yt||null===(ys=Yt.getAttribute)||void 0===ys?void 0:ys.call(Yt,"openness"))&&this.bottomDrawer.setAttribute("openness","half-opened")}else{var Ec,lu;if(this.mini.classList.remove("pnx-hidden"),(0,Xt.isNullId)(ue))this._setFocus("pic"),"closed"===(null===(Ec=this.bottomDrawer)||void 0===Ec||null===(lu=Ec.getAttribute)||void 0===lu?void 0:lu.call(Ec,"openness"))&&this.bottomDrawer.setAttribute("openness","half-opened")}"focus"===ae&&this._setFocus(nt)}onceMapReady(){if(!this["map-options"])return Promise.resolve();let ae;return new Promise((ue=>{ae=setInterval((()=>{var nt,ut,qt;"object"===typeof this.map&&(null!==(nt=this.map)&&void 0!==nt&&null!==(ut=nt.loaded)&&void 0!==ut&&ut.call(nt)?(clearInterval(ae),ue()):null!==(qt=this.map)&&void 0!==qt&&qt.once&&this.map.once("render",(()=>{clearInterval(ae),ue()})))}),250)}))}async _initMap(){await new Promise((ae=>{this.map=new Yt.A(this,this.mapContainer,this._initParams.getMapInit()),(0,ut.saveMapParamsToLocalStorage)(this.map),this.map.once("users-changed",(()=>{this.loader.setAttribute("value",75),ae()}))})),await(0,_u.mK)(this.map,this._initParams.getMapPostInit()),(0,ut.initMapKeyboardHandler)(this),(0,ut.linkMapAndPhoto)(this)}async _postAPIInit(){this.loader.setAttribute("value",30),this._createInitParamsHandler();const ae=this._initParams.getParentPostInit();this._initPSV(),await this._initMap(),this._initWidgets(),this._moveChildToGrid(),(0,_u.iz)(this,ae),ae.keyboardShortcuts&&this._handleKeyboardManagement(),ae.willLoadPicture?this.psv.addEventListener("picture-loaded",(ue=>{(0,_u.iz)(this,ae),this.loader.dismiss()}),{once:!0}):this.loader.dismiss()}_enableKeyboard(){this.map&&this.isMapWide()?this._enableKeyboardMap():this._enableKeyboardPSV()}_enableKeyboardMap(){this.psv.stopKeyboardControl(),this.map.keyboard.enable()}_enableKeyboardPSV(){this.psv.startKeyboardControl(),this.map.keyboard.disable()}_disableKeyboard(){this.psv.stopKeyboardControl(),this.map.keyboard.disable()}_toggleKeyboardBasedOnFocus(ae){const ue=(null===ae||void 0===ae?void 0:ae.target)||document.activeElement;if(this.contains(ue)){for(let ae of this.grid.childNodes)if("bg"!==ae.getAttribute("slot")&&!qt.RD.includes(ae.tagName.toLowerCase())&&ae.contains(ue))return void this._disableKeyboard();this._enableKeyboard()}else this._disableKeyboard()}_handleKeyboardManagement(){window.addEventListener("click",(ae=>this._toggleKeyboardBasedOnFocus(ae))),window.addEventListener("keypress",this._toggleKeyboardBasedOnFocus.bind(this)),this.addEventListener("focus-changed",(ae=>{this.popup.getAttribute("visible")?this._disableKeyboard():"map"===ae.detail.focus?this._enableKeyboardMap():this._enableKeyboardPSV()})),this.popup.addEventListener("open",this._disableKeyboard.bind(this)),this.popup.addEventListener("close",this._enableKeyboard.bind(this)),this.psv.addEventListener("click",this._enableKeyboardPSV.bind(this));for(let ae of this.grid.childNodes)"bg"===ae.getAttribute("slot")||qt.RD.includes(ae.tagName.toLowerCase())||(ae.addEventListener("focusin",this._disableKeyboard.bind(this)),ae.addEventListener("focusout",(()=>{null===this.popup.getAttribute("visible")&&this._enableKeyboard()})))}moveCenter(){const ae=this.psv.getPictureMetadata();ae&&(this.map&&this.isMapWide()?this.map.flyTo({center:ae.gps,zoom:20}):super.moveCenter())}_moveToDirection(ae){if(this.map&&this.isMapWide()){let ue;switch(ae){case"up":ue=[0,-100];break;case"left":ue=[-100,0];break;case"down":ue=[0,vu];break;case"right":ue=[vu,0]}this.map.panBy(ue)}else super._moveToDirection(ae)}isMapWide(){return this.mapContainer.parentNode==this.grid}_setFocus(ae){var ue,nt,ut,qt;let Yt=arguments.length>1&&void 0!==arguments[1]&&arguments[1],uu=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("map"===ae&&!this.map)throw new Error("Map is not enabled");if(!["map","pic"].includes(ae))throw new Error("Invalid focus value (should be pic or map)");if(this.focus=ae,(uu||("map"!==ae||!this.map||!this.isMapWide())&&("pic"!==ae||this.map&&this.isMapWide()))&&("map"===ae?(this.psvContainer.parentNode==this.grid&&(this.grid.removeChild(this.psvContainer),this.psvContainer.removeAttribute("slot")),this.mapContainer.parentNode==this.mini&&this.mini.removeChild(this.mapContainer),this.mapContainer.setAttribute("slot","bg"),this.grid.appendChild(this.mapContainer),this.mini.appendChild(this.psvContainer),this.mini.icon=(0,ys.fa)(Ec.pt),this._miniPicLegend&&this.mini.appendChild(this._miniPicLegend),(0,Xt.isNullId)(this.picture)?this.mini.classList.add("pnx-hidden"):this.mini.classList.remove("pnx-hidden"),this.map.getCanvas().focus()):(this.mapContainer.parentNode==this.grid&&(this.grid.removeChild(this.mapContainer),this.mapContainer.removeAttribute("slot")),this.psvContainer.parentNode==this.mini&&(this.mini.removeChild(this.psvContainer),this._miniPicLegend&&this.mini.removeChild(this._miniPicLegend)),this.psvContainer.setAttribute("slot","bg"),this.grid.appendChild(this.psvContainer),this.mini.classList.remove("pnx-hidden"),this.mini.appendChild(this.mapContainer),this.mini.icon=(0,ys.fa)(lu.e5),this.psvContainer.focus()),null===this||void 0===this||null===(ue=this.map)||void 0===ue||null===(nt=ue.resize)||void 0===nt||nt.call(ue),this.psv.autoSize(),this.psv.forceRefresh(),null===(ut=this.legend)||void 0===ut||null===(qt=ut.setAttribute)||void 0===qt||qt.call(ut,"focus",this.focus),!Yt)){const ue=new CustomEvent("focus-changed",{detail:{focus:ae}});this.dispatchEvent(ue)}}_toggleFocus(){this._setFocus(this.isMapWide()?"pic":"map")}_onMiniExpand(){this.map.resize(),this.psv.autoSize()}_onMapFiltersChange(){var ae;const ue=(0,uu.qi)("#pnx-map-filters-menu"),nt=(0,uu.qi)("#pnx-map-theme"),qt=(0,ut.mapFiltersFormValues)(ue,nt,null===(ae=this.map)||void 0===ae?void 0:ae._hasQualityScore());this.map.setFilters(qt)}}Viewer.properties={"map-options":{converter:qt.Ay.GetJSONConverter()},focus:{type:String,reflect:!0},geocoder:{type:String},tabindex:{type:Number},...qt.Ay.properties},customElements.define("pnx-viewer",Viewer)},3921:(ae,ue,nt)=>{"use strict";nt.r(ue),nt.d(ue,{Basic:()=>ut.A,CoverageMap:()=>qt.A,Editor:()=>Yt.A,PhotoViewer:()=>ys.Ay,Viewer:()=>Xt.A});var ut=nt(9039),qt=nt(153),Yt=nt(1752),Xt=nt(8743),ys=nt(3407)},9341:(ae,ue,nt)=>{"use strict";nt.r(ue),nt.d(ue,{core:()=>ut,layout:()=>qt,menus:()=>Yt,ui:()=>Xt});var ut=nt(3921),qt=nt(456),Yt=nt(8794),Xt=nt(7091)},6784:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>BottomDrawer});var ut=nt(4542),qt=nt(1198),Yt=nt(5995);const Xt={opened:0,"half-opened":.7,closed:1};class BottomDrawer extends ut.WF{constructor(){super(),this._isDragging=!1,this.openness="half-opened"}firstUpdated(){super.firstUpdated(),this._boundTouchMove=this._onTouchMove.bind(this),this._boundTouchEnd=this._onTouchEnd.bind(this),this._drawerHeight=window.innerHeight-30;const ae=this._getDrawer();ae&&(ae.style.height=`${this._drawerHeight}px`,ae.style.maxHeight=`${this._drawerHeight}px`,(0,Yt.onceParentAvailable)(this).then((()=>this._parent.onceReady())).then((()=>{var ae,ue;null===(ae=this._parent.map)||void 0===ae||ae.addEventListener("click",(()=>this.openness="closed")),null===(ue=this._parent.psv)||void 0===ue||ue.addEventListener("click",(()=>this.openness="closed"))})))}attributeChangedCallback(ae,ue,nt){if(super.attributeChangedCallback(ae,ue,nt),"openness"===ae){if("opened"!==nt){const ae=this.shadowRoot.querySelector(".content");ae&&(ae.scrollTop=0)}const ae=this._getDrawer();ae&&(ae.style.transform=null)}}disconnectedCallback(){super.disconnectedCallback(),this._cleanupTouchListeners()}_getDrawer(){var ae;return null===(ae=this.shadowRoot)||void 0===ae?void 0:ae.querySelector(".drawer")}_onHandleClick(){"opened"===this.openness?this.openness="closed":"half-opened"===this.openness?this.openness="opened":"closed"===this.openness&&(this.openness="half-opened")}_onTouchStart(ae){this._isDragging=!0,this._startFingerY=ae.touches[0].clientY,this._deltaFingerY=0,this._drawerY=this._drawerHeight*Xt[this.openness],window.addEventListener("touchmove",this._boundTouchMove,{passive:!0}),window.addEventListener("touchend",this._boundTouchEnd),window.addEventListener("touchcancel",this._boundTouchEnd)}_onTouchMove(ae){if(!this._isDragging)return;const ue=this.shadowRoot.querySelector(".content");ue.scrollHeight>ue.offsetHeight&&ue.scrollTop>0?this._updateDrawerTransform(0):(this._deltaFingerY=ae.touches[0].clientY-this._startFingerY,this._updateDrawerTransform(this._drawerY+this._deltaFingerY))}_onTouchEnd(ae){(this._isDragging&&!(Math.abs(this._deltaFingerY)<30)||ae.target.closest(".handle"))&&(ae.preventDefault(),this._isDragging=!1,0===this._deltaFingerY&&"closed"===this.openness?this.openness="half-opened":this._updateDrawerTransform(this._drawerY+this._deltaFingerY,!0),this._cleanupTouchListeners(),this._startFingerY=null,this._deltaFingerY=null)}_cleanupTouchListeners(){window.removeEventListener("touchmove",this._boundTouchMove),window.removeEventListener("touchend",this._boundTouchEnd),window.removeEventListener("touchcancel",this._boundTouchCancel)}_updateDrawerTransform(ae){let ue=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const nt=this._getDrawer();nt&&(ae=Math.max(0,Math.min(ae,this._drawerHeight-30)),ue&&(this._deltaFingerY<0?"closed"===this.openness?Math.abs(this._deltaFingerY)>this._drawerHeight*(1-Xt["half-opened"])?this.openness="opened":this.openness="half-opened":this.openness="opened":this.openness="closed",this._drawerY=null,ae=Math.max(0,Math.min(Xt[this.openness]*this._drawerHeight,this._drawerHeight-30))),nt.style.transform=`translateY(${ae}px)`)}render(){const ae={drawer:!0,[this.openness]:!0,dragging:this._isDragging};return ut.qy`
12
+ !function(ae,ue){"object"===typeof exports&&"object"===typeof module?module.exports=ue():"function"===typeof define&&define.amd?define("Panoramax",[],ue):"object"===typeof exports?exports.Panoramax=ue():ae.Panoramax=ue()}(this,(()=>(()=>{var ae={9039:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>Basic});var ut=nt(4542),qt=nt(5254),Yt=nt(4964),Xt=nt(7208),ys=nt(5995),Ec=nt(7343),lu=nt(2614),uu=nt.n(lu),_u=nt(8330);nt(1865),nt(3638);class Basic extends ut.WF{constructor(){let ae=arguments.length>0&&void 0!==arguments[0]&&arguments[0];super(),this.users=["geovisio"],this["map-style"]=this.getAttribute("map-style")||(0,Xt.MapTiles)(),this.lang=this.getAttribute("lang")||null,this.endpoint=this.getAttribute("endpoint")||null,this.picture=this.getAttribute("picture")||null,this.sequence=this.getAttribute("sequence")||null,console.info(`\ud83d\udcf7 Panoramax ${this.getClassName()} - Version ${_u.rE} (0dc2b58)\n\n\ud83c\udd98 Issues can be reported at ${_u.Jk.O}`),ae||(this._isInternetFast=null,(0,Ec.isInternetFast)().then((ae=>this._isInternetFast=ae)))}connectedCallback(){super.connectedCallback(),this._t=(0,Yt.getTranslations)(this.lang),this.loader=(0,ys.createWebComp)("pnx-loader",{_parent:this,"no-label":(0,Ec.isInIframe)()}),this._loadsAPI&&this.endpoint&&this._loadsAPI===this.endpoint||this.api&&this.api._endpoint===this.endpoint||!this.endpoint||((this._loadsAPI||this.api)&&(delete this.api,delete this._loadsAPI),this._setupAPI()),Object.entries({map:"map-options",psv:"psv-options",fetchOptions:"fetch-options",mapstyle:"map-style"}).forEach((ae=>{let[ue,nt]=ae;this.getAttribute(ue)&&console.error(`Component attribute "${ue}" has been renamed into "${nt}". Old attribute "${ue}" is ignored.`)}))}_setupAPI(){if(this.loader=this.loader||(0,ys.createWebComp)("pnx-loader",{_parent:this}),!this.endpoint)return void console.warn("No endpoint is defined");this._loadsAPI=this.endpoint;let ae=this.endpoint;try{this["map-style"]=JSON.parse(this["map-style"])}catch(nt){}try{this.api=new qt.A(this.endpoint,{users:this.users,fetch:this["fetch-options"],style:this["map-style"]}),this.api.onceReady().then((()=>{if(ae!=this._loadsAPI||!this.api)return;let ue=this.api.getUnavailableFeatures(),nt=this.api.getAvailableFeatures();nt=0===ue.length?"\u2705 All features available":"\u2705 Available features: "+nt.join(", "),ue=0===ue.length?"":"\ud83d\udeab Unavailable features: "+ue.join(", "),console.info(`\ud83c\udf10 Connected to API "${this.api._metadata.name}" (${this.api._endpoint})\n\u2139\ufe0f API runs STAC ${this.api._metadata.stac_version} ${this.api._metadata.geovisio_version?"& GeoVisio "+this.api._metadata.geovisio_version:""}\n ${nt}\n ${ue}\n`.trim())})).catch((ae=>this.loader.dismiss(ae,this._t.pnx.error_api))).finally((()=>delete this._loadsAPI))}catch(nt){var ue;delete this._loadsAPI,null!==(ue=this.loader)&&void 0!==ue&&ue.dismiss?this.loader.dismiss(nt,this._t.pnx.error_api):console.error(nt)}}onceReady(){throw new Error("You must override this method on sub-class")}onceAPIReady(){return this.api?this.api.onceReady():new Promise((ae=>setTimeout(ae,100))).then(this.onceAPIReady.bind(this))}createRenderRoot(){return this}attributeChangedCallback(ae,ue,nt){if(super.attributeChangedCallback(ae,ue,nt),"endpoint"===ae&&(this._loadsAPI&&nt&&this._loadsAPI===nt||this.api&&this.api._endpoint===nt||!nt||((this._loadsAPI||this.api)&&(delete this.api,delete this._loadsAPI),this._setupAPI())),["picture","sequence"].includes(ae)){let ut,qt,Yt,Xt;"picture"===ae?(ut=this.sequence,Yt=this.sequence,qt=nt,Xt=ue):(ut=nt,Yt=ue,qt=this.picture,Xt=this.picture),this.dispatchEvent(new CustomEvent("select",{bubbles:!0,composed:!0,detail:{seqId:ut,picId:qt,prevSeqId:Yt,prevPicId:Xt}}))}}getClassName(){return"Basic"}select(){let ae=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,ue=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;arguments.length>2&&void 0!==arguments[2]&&arguments[2]&&(this.picture=null,this.sequence=null),this.picture=ue,this.sequence=ae}isWidthSmall(){return(null===this||void 0===this?void 0:this.offsetWidth)<576}isHeightSmall(){return(null===this||void 0===this?void 0:this.offsetHeight)<400}render(){return ut.qy`<p>Should not be used directly, use Viewer/CoverageMap/Editor instead</p>`}getSubComponentsNames(){return["loader","api"]}addEventListener(ae,ue,nt){let ut=ae.split(":").shift();if(ut&&this.getSubComponentsNames().includes(ut)){var qt;const Yt=ae.substring(ut.length+1);null!==(qt=this[ut])&&void 0!==qt&&qt.addEventListener?this[ut].addEventListener(Yt,ue,nt):setTimeout((()=>this.addEventListener(ae,ue,nt)),50)}else super.addEventListener(ae,ue,nt)}static GetJSONConverter(){return{fromAttribute:ae=>null===ae||""===ae?null:"object"===typeof ae||Array.isArray(ae)?ae:uu().parse(ae),toAttribute:ae=>null===ae||""===ae?"":"string"===typeof ae?ae:uu().stringify(ae)}}}Basic.properties={picture:{type:String,reflect:!0},sequence:{type:String,reflect:!0},"fetch-options":{converter:Basic.GetJSONConverter()},users:{type:Array,reflect:!0},"map-style":{type:String},lang:{type:String},endpoint:{type:String}}},153:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>CoverageMap});var ut=nt(9039),qt=nt(5642),Yt=nt(8340),Xt=nt(927),ys=(nt(7776),nt(2118));class CoverageMap extends ut.A{constructor(){super(),this._mapContainer=document.createElement("div"),this.onceAPIReady().then((()=>{this.loader.setAttribute("value",30),this._initParams=new ys.Ay(ys.Ay.GetComponentProperties(CoverageMap,this)),this._initMap()}))}disconnectedCallback(){var ae;super.disconnectedCallback(),null===(ae=this.map)||void 0===ae||ae.destroy()}getClassName(){return"CoverageMap"}onceReady(){return this.map&&this.map.waitForEnoughMapLoaded?this.map.waitForEnoughMapLoaded():new Promise((ae=>setTimeout(ae,100))).then(this.onceReady.bind(this))}render(){return[this.loader,this._mapContainer]}getSubComponentsNames(){const ae=super.getSubComponentsNames();return ae.push("map"),ae}_initMap(){class MyMap extends qt.A{_getLayerStyleProperties(ae){return"pictures_symbols"===ae?{layout:{visibility:"none"}}:super._getLayerStyleProperties(ae)}}this.map=new MyMap(this,this._mapContainer,Object.assign({},this._initParams.getMapInit(),{hash:!0})),this.map.addControl(new Xt.NavigationControl({showCompass:!1})),this.loader.setAttribute("value",70),this.addEventListener("select",this._onSelect.bind(this)),this.map.on("picture-click",(ae=>this.select(ae.seqId,ae.picId))),this.map.on("sequence-click",(ae=>this.select(ae.seqId))),this.map.waitForEnoughMapLoaded().then((async()=>{await(0,ys.mK)(this.map,this._initParams.getMapPostInit()),this.map.reloadLayersStyles(),this.loader.dismiss()}))}_onSelect(ae){if(ae.detail.picId||ae.detail.seqId){const ue=ae.detail.picId?"pictures":"sequences",nt=this.map.queryRenderedFeatures({layers:[...this.map._userLayers].map((ae=>(0,Yt.getUserLayerId)(ae,ue))),filter:["==",["get","id"],ae.detail.picId||ae.detail.seqId]});nt.length>=0&&null!=nt[0]&&this.map._attachPreviewToPictures({features:nt},ue)}}}CoverageMap.properties={"map-options":{converter:ut.A.GetJSONConverter()},...ut.A.properties},customElements.define("pnx-coverage-map",CoverageMap)},1752:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>Editor});nt(7365);var ut=nt(9039),qt=nt(5642),Yt=nt(9048),Xt=nt(508),ys=nt(8340),Ec=nt(1545),lu=nt(5995);const uu="sequence-headings";class Editor extends ut.A{constructor(){super(),this.raster=null,this.background="streets",this.users=[],this._psvContainer=document.createElement("div"),this._psvContainer.setAttribute("slot","bg"),this._mapContainer=document.createElement("div"),this._mapContainer.setAttribute("slot","bg"),this.grid=(0,lu.createWebComp)("pnx-cornered-grid"),this.grid.appendChild(this._psvContainer),this.grid.appendChild(this._mapContainer),this.onceAPIReady().then((()=>{this.loader.setAttribute("value",30),this.sequence||this.loader.dismiss({},"No sequence is selected"),this.addEventListener("select",this._onSelect.bind(this)),this._initPSV(),this._initMap()}))}disconnectedCallback(){var ae,ue;super.disconnectedCallback(),null===(ae=this.map)||void 0===ae||ae.destroy(),null===(ue=this.psv)||void 0===ue||ue.destroy()}getClassName(){return"Editor"}onceReady(){var ae,ue;return this.map&&this.psv&&null!==(ae=(ue=this.map).loaded)&&void 0!==ae&&ae.call(ue)?Promise.resolve():new Promise((ae=>setTimeout(ae,100))).then(this.onceReady.bind(this))}connectedCallback(){Array.isArray(this.users)&&this.users.length>0&&(console.warn("Parameters users can't be changed in Editor, only selected sequence can be visible"),this.users=[]),super.connectedCallback(),this._moveChildToGrid(),window.addEventListener("DOMContentLoaded",(()=>{this._moveChildToGrid()}),{once:!0})}attributeChangedCallback(ae,ue,nt){"users"===ae&&Array.isArray(nt)&&nt.length>0?console.warn("Parameters users can't be changed in Editor, only selected sequence can be visible"):super.attributeChangedCallback(ae,ue,nt)}render(){return[this.loader,this.grid]}getSubComponentsNames(){return super.getSubComponentsNames().concat(["map","psv","grid"])}_initPSV(){try{this.psv=new Yt.Ay(this,this._psvContainer),this.psv._myVTour.datasource.nodeResolver=this._getNode.bind(this)}catch(ae){let ue=Ec.IJ.isWebGLSupported?this._t.pnx.error_psv:this._t.pnx.error_webgl;this.loader.dismiss(ae,ue)}}_initMap(){try{this.map=new qt.A(this,this._mapContainer,{raster:this.raster,background:this.background,supplementaryStyle:this._createMapStyle(),zoom:15,picMarkerDraggable:!0}),(0,ys.linkMapAndPhoto)(this),this.loader.setAttribute("value",50),this._loadSequence(),this.map.once("load",(()=>{this.map.hasTwoBackgrounds()&&this._addMapBackgroundWidget(),this._bindPicturesEvents()}));const ae=this.map._picMarker.setRotation.bind(this.map._picMarker);this.map._picMarker.setRotation=ue=>(ue=void 0===this._lastRelHeading?ue:ue+this._lastRelHeading-this.psv.getPictureRelativeHeading(),ae(ue))}catch(ae){this.loader.dismiss(ae,this._t.pnx.error_psv)}}_createMapStyle(){return{sources:{geovisio_editor_sequences:{type:"geojson",data:{type:"FeatureCollection",features:[]}}},layers:[{id:"geovisio_editor_sequences",type:"line",source:"geovisio_editor_sequences",layout:{...ys.VECTOR_STYLES.SEQUENCES.layout},paint:{...ys.VECTOR_STYLES.SEQUENCES.paint}},{id:"geovisio_editor_pictures",type:"circle",source:"geovisio_editor_sequences",layout:{...ys.VECTOR_STYLES.PICTURES.layout},paint:{...ys.VECTOR_STYLES.PICTURES.paint}}]}}_bindPicturesEvents(){this.map.on("mousemove","geovisio_editor_pictures",(()=>{this.map.getCanvas().style.cursor="pointer"})),this.map.on("mouseleave","geovisio_editor_pictures",(()=>{this.map.getCanvas().style.cursor=""})),this.map.on("click","geovisio_editor_pictures",this.map._onPictureClick.bind(this.map))}_loadSequence(){return this.loader.setAttribute("value",60),this.api.getSequenceItems(this.sequence).then((ae=>{if(this.loader.setAttribute("value",80),this.map.once("sourcedata",(()=>{this.map.setPaintProperty("geovisio_editor_sequences","line-color",this.map._getLayerColorStyle("sequences")),this.map.setPaintProperty("geovisio_editor_pictures","circle-color",this.map._getLayerColorStyle("pictures")),this.map.setLayoutProperty("geovisio_editor_sequences","visibility","visible"),this.map.setLayoutProperty("geovisio_editor_pictures","visibility","visible"),this.map.once("styledata",(()=>this.loader.dismiss()))})),this._sequenceData=ae.features,this.map.getSource("geovisio_editor_sequences").setData({type:"FeatureCollection",features:[{id:this.sequence,type:"Feature",properties:{id:this.sequence},geometry:{type:"LineString",coordinates:ae.features.map((ae=>ae.geometry.coordinates))}},...ae.features.map((ae=>(ae.properties.id=ae.id,ae.properties.sequences=[this.sequence],ae)))]}),this.picture){const ue=ae.features.find((ae=>ae.id===this.picture));ue?(this.select(this.sequence,this.picture,!0),this.map.jumpTo({center:ue.geometry.coordinates,zoom:18})):console.log("Picture with ID",ue,"was not found")}else{const ue=[...ae.features[0].geometry.coordinates,...ae.features[0].geometry.coordinates];for(let nt=1;nt<ae.features.length;nt++){const ut=ae.features[nt].geometry.coordinates;ut[0]<ue[0]&&(ue[0]=ut[0]),ut[1]<ue[1]&&(ue[1]=ut[1]),ut[0]>ue[2]&&(ue[2]=ut[0]),ut[1]>ue[3]&&(ue[3]=ut[1])}this.map.fitBounds(ue,{animate:!1})}})).catch((ae=>this.loader.dismiss(ae,this._t.pnx.error_api)))}_getNode(ae){const ue=this._sequenceData.find((ue=>ue.properties.id===ae)),nt=ue?(0,Xt.apiFeatureToPSVNode)(ue,this._t,this._isInternetFast,void 0,(ae=>this.api.cleanResourceURL(ae))):null;return nt&&delete nt.links,nt}_addMapBackgroundWidget(){const ae=(0,lu.createWebComp)("pnx-map-background",{_parent:this,size:"sm",slot:"bottom-left"});this.grid.appendChild(ae)}_moveChildToGrid(){Array.from(this.querySelectorAll("[slot]")).forEach((ae=>{var ue;null!==(ue=ae.tagName)&&void 0!==ue&&ue.toLowerCase().startsWith("pnx-")&&(ae._parent=this,ae._t=this._t),this.grid.appendChild(ae)}))}previewSequenceHeadingChange(ae){const ue=void 0!==this.map.getLayer(uu);if(this.map._picMarkerPreview.remove(),void 0===ae)return delete this._lastRelHeading,ue&&this.map.setLayoutProperty(uu,"visibility","none"),void(this.picture&&this.map._picMarker.setRotation(this.psv.getXY().x));this._lastRelHeading=ae,ue||this.map.addLayer({id:uu,type:"symbol",source:"geovisio_editor_sequences",layout:{"icon-image":"pnx-marker","icon-overlap":"always","icon-size":.8}});const nt=-this.psv.getPictureRelativeHeading();this.map.setLayoutProperty(uu,"visibility","visible"),this.map.setLayoutProperty(uu,"icon-rotate",["+",["get","view:azimuth"],nt,ae]);const ut=[["==",["geometry-type"],"Point"]];this.picture&&ut.push(["!=",["get","id"],this.picture]),this.map.setFilter(uu,["all",...ut]),this.picture&&this.map._picMarker.setRotation(this.psv.getXY().x)}_onSelect(){void 0!==this._lastRelHeading&&this.previewSequenceHeadingChange(this._lastRelHeading)}}Editor.properties={raster:{converter:ut.A.GetJSONConverter()},background:{type:String},...ut.A.properties},customElements.define("pnx-editor",Editor)},3407:(ae,ue,nt)=>{"use strict";nt.d(ue,{$p:()=>_u,Ay:()=>PhotoViewer,RD:()=>wu});nt(970);var ut=nt(1545),qt=nt(4451),Yt=nt(9039),Xt=nt(9048),ys=nt(5995),Ec=nt(7343),lu=nt(2118),uu=nt(4207);const _u=20,vu=Math.PI/6,wu=["pnx-mini","pnx-widget-player","pnx-widget-zoom"];class PhotoViewer extends Yt.A{constructor(){super(),this["psv-options"]={},this["url-parameters"]=this.getAttribute("url-parameters")||!0,this["keyboard-shortcuts"]=this.getAttribute("keyboard-shortcuts")||!0,this["skip-tags-menu-opening"]="true"!==(this.getAttribute("skip-tags-menu-opening")||"false"),this.widgets=this.getAttribute("widgets")||"true",this.grid=(0,ys.createWebComp)("pnx-cornered-grid"),this.psvContainer=document.createElement("div"),this.psvContainer.setAttribute("slot","bg"),this.grid.appendChild(this.psvContainer),this.popup=(0,ys.createWebComp)("pnx-popup",{_parent:this,onclose:this._onPopupClose.bind(this)}),this.tabindex=0,this._sequencesMetadata={}}_createInitParamsHandler(){var ae,ue;this._initParams=new lu.Ay(lu.Ay.GetComponentProperties(PhotoViewer,this),Object.assign({},null===(ae=this.urlHandler)||void 0===ae?void 0:ae.currentURLParams(),null===(ue=this.urlHandler)||void 0===ue?void 0:ue.currentURLParams(!0)),{disableAnnotations:localStorage.getItem(Ec.DISABLE_ANNOTATIONS_PARAM)})}_initWidgets(){"false"!==this._initParams.getParentPostInit().widgets&&((0,Ec.isInIframe)()||(this.grid.appendChild((0,ys.createWebComp)("pnx-widget-player",{slot:"top",_parent:this,class:"pnx-only-psv pnx-print-hidden",size:this.isHeightSmall()?"md":"xl"})),this.grid.appendChild((0,ys.createWebComp)("pnx-annotations-switch",{slot:"top",_parent:this,class:"pnx-only-psv pnx-print-hidden",size:this.isHeightSmall()?"md":"xl"}))),(0,Ec.isInIframe)()?(this.legend=(0,ys.createWebComp)("pnx-widget-legend",{slot:"bottom-right",light:!0,_parent:this,focus:this._initParams.getParentPostInit().focus,picture:this._initParams.getParentPostInit().picture}),this.grid.appendChild(this.legend)):this.isWidthSmall()?(this.legend=(0,ys.createWebComp)("pnx-picture-legend",{_parent:this}),this.bottomDrawer=(0,ys.createWebComp)("pnx-bottom-drawer",{slot:"bottom",_parent:this,class:this._initParams.getParentPostInit().willLoadPicture?void 0:"pnx-hidden"}),this.bottomDrawer.appendChild(this.legend),this.grid.appendChild(this.bottomDrawer),this.addEventListener("select",(ae=>{(0,Ec.isNullId)(ae.detail.picId)?this.bottomDrawer.classList.add("pnx-hidden"):this.bottomDrawer.classList.remove("pnx-hidden")}))):(this.legend=(0,ys.createWebComp)("pnx-widget-legend",{slot:this.isWidthSmall()?void 0:"top-left",_parent:this,focus:this._initParams.getParentPostInit().focus,picture:this._initParams.getParentPostInit().picture}),this.grid.appendChild((0,ys.createWebComp)("pnx-widget-zoom",{slot:"bottom-right",class:"pnx-print-hidden",_parent:this})),this.grid.appendChild(this.legend)))}connectedCallback(){super.connectedCallback(),this.presetsManager=new uu.A(this.lang),this["url-parameters"]&&"false"!==this["url-parameters"]&&(this.urlHandler=new qt.A(this),this.onceReady().then((()=>{this.urlHandler.listenToChanges(),this.urlHandler._onParentChange()}))),this.onceAPIReady().then(this._postAPIInit.bind(this)),this._moveChildToGrid(),window.addEventListener("DOMContentLoaded",(()=>{this._moveChildToGrid()}),{once:!0})}disconnectedCallback(){var ae,ue;super.disconnectedCallback(),null===(ae=this.urlHandler)||void 0===ae||ae.destroy(),null===(ue=this.psv)||void 0===ue||ue.destroy(),document.body.removeEventListener("click",this._toggleKeyboardBasedOnFocus),window.removeEventListener("keypress",this._toggleKeyboardBasedOnFocus)}getClassName(){return"PhotoViewer"}onceReady(){return this.oncePSVReady().then((()=>this._initParams.getParentPostInit().willLoadPicture&&!this.psv.getPictureMetadata()?this.onceFirstPicLoaded():Promise.resolve()))}render(){return[this.loader,this.grid,this.popup]}getSubComponentsNames(){return super.getSubComponentsNames().concat(["psv","grid","popup","urlHandler"])}oncePSVReady(){let ae;return new Promise((ue=>{ae=setInterval((()=>{this.psv&&"object"===typeof this.psv&&(this.psv.container?(clearInterval(ae),ue()):this.psv.addEventListener&&this.psv.addEventListener("ready",(()=>{clearInterval(ae),ue()}),{once:!0}))}),250)}))}onceFirstPicLoaded(){return this.oncePSVReady().then((()=>this.psv.getPictureMetadata()?Promise.resolve():new Promise((ae=>{this.psv.addEventListener("picture-loaded",ae,{once:!0})}))))}async _postAPIInit(){this.loader.setAttribute("value",30),this._createInitParamsHandler();const ae=this._initParams.getParentPostInit();this._initPSV(),this._initWidgets(),(0,lu.ai)(this,ae),ae.keyboardShortcuts&&this._handleKeyboardManagement(),ae.willLoadPicture?this.psv.getPictureMetadata()?this.loader.dismiss():this.psv.addEventListener("picture-loaded",(()=>this.loader.dismiss()),{once:!0}):this.loader.dismiss()}_initPSV(){try{this.psv=new Xt.Ay(this,this.psvContainer,{shouldGoFast:this._psvShouldGoFast.bind(this),keyboard:"always",keyboardActions:{...ut.zY.keyboardActions,8:"ROTATE_UP",2:"ROTATE_DOWN",4:"ROTATE_LEFT",6:"ROTATE_RIGHT",PageUp:()=>this.psv.goToNextPicture(),9:()=>this.psv.goToNextPicture(),PageDown:()=>this.psv.goToPrevPicture(),3:()=>this.psv.goToPrevPicture(),5:()=>this.moveCenter(),"*":()=>this.moveCenter(),Home:()=>{var ae;return null===(ae=this._toggleFocus)||void 0===ae?void 0:ae.call(this)},7:()=>{var ae;return null===(ae=this._toggleFocus)||void 0===ae?void 0:ae.call(this)},End:()=>this.mini.toggleAttribute("collapsed"),1:()=>this.mini.toggleAttribute("collapsed")," ":()=>this.psv.toggleSequencePlaying(),0:()=>this.psv.toggleSequencePlaying()},...this._initParams.getPSVInit()}),this.oncePSVReady().then((()=>{this.loader.setAttribute("value",50),(0,lu.Vy)(this.psv,this._initParams.getPSVPostInit())})),this.psv.addEventListener("sequence-playing",(()=>this.classList.add("pnx-playing"))),this.psv.addEventListener("sequence-stopped",(()=>this.classList.remove("pnx-playing")))}catch(ae){let ue=ut.IJ.isWebGLSupported?this._t.pnx.error_psv:this._t.pnx.error_webgl;this.loader.dismiss(ae,ue)}}_enableKeyboard(){this.psv.startKeyboardControl()}_disableKeyboard(){this.psv.stopKeyboardControl()}_toggleKeyboardBasedOnFocus(ae){const ue=(null===ae||void 0===ae?void 0:ae.target)||document.activeElement;if(this.contains(ue)){for(let ae of this.grid.childNodes)if("bg"!==ae.getAttribute("slot")&&!wu.includes(ae.tagName.toLowerCase())&&ae.contains(ue))return void this._disableKeyboard();this._enableKeyboard()}else this._disableKeyboard()}_handleKeyboardManagement(){window.addEventListener("click",(ae=>this._toggleKeyboardBasedOnFocus(ae))),window.addEventListener("keypress",this._toggleKeyboardBasedOnFocus.bind(this)),this.popup.addEventListener("open",this._disableKeyboard.bind(this)),this.popup.addEventListener("close",this._enableKeyboard.bind(this)),this.psv.addEventListener("click",this._enableKeyboard.bind(this));for(let ae of this.grid.childNodes)"bg"===ae.getAttribute("slot")||wu.includes(ae.tagName.toLowerCase())||(ae.addEventListener("focusin",this._disableKeyboard.bind(this)),ae.addEventListener("focusout",(()=>{null===this.popup.getAttribute("visible")&&this._enableKeyboard()})))}_psvShouldGoFast(){return this.psv._sequencePlaying&&this.psv.getTransitionDuration()<1e3}_moveChildToGrid(){Array.from(this.querySelectorAll("[slot]")).forEach((ae=>{var ue;null!==(ue=ae.tagName)&&void 0!==ue&&ue.toLowerCase().startsWith("pnx-")&&(ae._parent=this,ae._t=this._t),"editors"===ae.getAttribute("slot")?this.onceReady().then((()=>{var ue;return null===(ue=this.legend)||void 0===ue?void 0:ue.appendChild(ae)})):this.grid.appendChild(ae)}))}setPopup(ae){let ue=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;ae?this.popup.setAttribute("visible",""):this.popup.removeAttribute("visible"),this.popup.innerHTML="","string"===typeof ue?this.popup.innerHTML=ue:Array.isArray(ue)&&ue.forEach((ae=>this.popup.appendChild(ae)))}_onPopupClose(){this.dispatchEvent(new CustomEvent("focus-changed",{detail:{focus:this.map&&this.isMapWide()?"map":"pic"}}))}_showQualityScoreDoc(){this.setPopup(!0,[(0,ys.createWebComp)("pnx-quality-score-doc",{_t:this._t})])}_showReportForm(){if(!this.psv.getPictureMetadata())throw new Error("No picture currently selected");this.setPopup(!0,[(0,ys.createWebComp)("pnx-report-form",{_parent:this})])}_showShareOptions(){this.setPopup(!0,[(0,ys.createWebComp)("pnx-share-menu",{_parent:this})])}_showSemanticsDoc(){this.setPopup(!0,[(0,ys.createWebComp)("pnx-semantics-doc",{_t:this._t})])}_showSemanticsDownload(){this.setPopup(!0,[(0,ys.createWebComp)("pnx-semantics-download",{_t:this._t})])}moveCenter(){this.psv.getPictureMetadata()&&this._psvAnimate({speed:Xt.LM,yaw:0,pitch:0,zoom:Xt.cS})}moveLeft(){this._moveToDirection("left")}moveRight(){this._moveToDirection("right")}moveUp(){this._moveToDirection("up")}moveDown(){this._moveToDirection("down")}_moveToDirection(ae){let ue=this.psv.getPosition();switch(ae){case"up":ue.pitch+=vu;break;case"left":ue.yaw-=vu;break;case"down":ue.pitch-=vu;break;case"right":ue.yaw+=vu}this._psvAnimate({speed:Xt.LM,...ue})}_psvAnimate(ae){this._lastPsvAnim&&this._lastPsvAnim.cancel(),this._lastPsvAnim=this.psv.animate(ae)}addEventListener(ae,ue,nt){super.addEventListener(ae,ue,nt)}}PhotoViewer.properties={"psv-options":{converter:Yt.A.GetJSONConverter()},widgets:{type:String},"url-parameters":{type:String},"keyboard-shortcuts":{type:String},tabindex:{type:Number},"skip-tags-menu-opening":{type:String},...Yt.A.properties},customElements.define("pnx-photo-viewer",PhotoViewer)},8743:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>Viewer});nt(9616);var ut=nt(8340),qt=nt(3407),Yt=nt(2771),Xt=nt(7343),ys=nt(5995),Ec=nt(9683),lu=nt(2e3),uu=nt(9438),_u=nt(2118);const vu=100;class Viewer extends qt.Ay{constructor(){super(),this["map-options"]=!0,this.geocoder=this.getAttribute("geocoder")||"nominatim",this.mini=(0,ys.createWebComp)("pnx-mini",{slot:"bottom-left",_parent:this,onexpand:this._onMiniExpand.bind(this),collapsed:!!(0,Xt.isNullId)(this.picture)||void 0}),this.mini.addEventListener("expand",this._toggleFocus.bind(this)),this.grid.appendChild(this.mini),this.mapContainer=document.createElement("div"),this.tabindex=0}_createInitParamsHandler(){var ae,ue;this._initParams=new _u.Ay(_u.Ay.GetComponentProperties(Viewer,this),Object.assign({},null===(ae=this.urlHandler)||void 0===ae?void 0:ae.currentURLParams(),null===(ue=this.urlHandler)||void 0===ue?void 0:ue.currentURLParams(!0)),{map:(0,ut.getMapParamsFromLocalStorage)(),disableAnnotations:localStorage.getItem(Xt.DISABLE_ANNOTATIONS_PARAM)})}_initWidgets(){var ae,ue;"false"!==this._initParams.getParentPostInit().widgets&&(this.grid.appendChild((0,ys.createWebComp)("pnx-widget-zoom",{slot:this.isWidthSmall()?"top-left":"bottom-right",class:this.isWidthSmall()?"pnx-only-map pnx-print-hidden":"pnx-print-hidden",_parent:this})),(0,Xt.isInIframe)()?(this.legend=(0,ys.createWebComp)("pnx-widget-legend",{slot:"bottom-right",light:!0,_parent:this,focus:this._initParams.getParentPostInit().focus,picture:this._initParams.getParentPostInit().picture}),this.grid.appendChild(this.legend)):this.isWidthSmall()?(this.legend=(0,ys.createWebComp)("pnx-picture-legend",{_parent:this}),this.bottomDrawer=(0,ys.createWebComp)("pnx-bottom-drawer",{slot:"bottom",_parent:this,class:this._initParams.getParentPostInit().willLoadPicture?void 0:"pnx-hidden"}),this.bottomDrawer.appendChild(this.legend),this.grid.appendChild(this.bottomDrawer),this.addEventListener("select",(ae=>{(0,Xt.isNullId)(ae.detail.picId)?this.bottomDrawer.classList.add("pnx-hidden"):this.bottomDrawer.classList.remove("pnx-hidden")}))):(this.legend=(0,ys.createWebComp)("pnx-widget-legend",{slot:this.isWidthSmall()?"top":"top-left",_parent:this,focus:this._initParams.getParentPostInit().focus,picture:this._initParams.getParentPostInit().picture}),this._miniPicLegend=(0,ys.createWebComp)("pnx-mini-picture-legend",{_parent:this}),this.grid.appendChild(this.legend)),(0,Xt.isInIframe)()||(this.grid.appendChild((0,ys.createWebComp)("pnx-widget-player",{slot:"top",_parent:this,class:"pnx-only-psv pnx-print-hidden",size:this.isHeightSmall()?"md":"xl"})),this.grid.appendChild((0,ys.createWebComp)("pnx-annotations-switch",{slot:"top",_parent:this,class:"pnx-only-psv pnx-print-hidden",size:this.isHeightSmall()?"md":"xl"})),this.grid.appendChild((0,ys.createWebComp)("pnx-widget-geosearch",{slot:this.isWidthSmall()?"top-right":"top-left",_parent:this,class:"pnx-only-map pnx-print-hidden",geocoder:this._initParams.getParentPostInit().geocoder})),this.grid.appendChild((0,ys.createWebComp)("pnx-widget-mapfilters",{slot:this.isWidthSmall()?"top-right":"top-left",_parent:this,"user-search":null!==this.api._endpoints.user_search&&null!==this.api._endpoints.user_tiles,"quality-score":(null===(ae=this.map)||void 0===ae||null===(ue=ae._hasQualityScore)||void 0===ue?void 0:ue.call(ae))||!1,class:"pnx-only-map pnx-print-hidden"})),this.grid.appendChild((0,ys.createWebComp)("pnx-widget-semantics-filters",{slot:this.isWidthSmall()?"top-right":"top-left",_parent:this,class:"pnx-only-map pnx-print-hidden"})),this.grid.appendChild((0,ys.createWebComp)("pnx-widget-maplayers",{slot:"top-right",_parent:this,class:"pnx-only-map pnx-print-hidden"}))))}disconnectedCallback(){var ae;super.disconnectedCallback(),null===(ae=this.map)||void 0===ae||ae.destroy()}getClassName(){return"Viewer"}getSubComponentsNames(){return super.getSubComponentsNames().concat(["mini","map"])}onceReady(){return Promise.all([this.oncePSVReady(),this.onceMapReady()]).then((()=>this._initParams.getParentPostInit().willLoadPicture&&!this.psv.getPictureMetadata()?this.onceFirstPicLoaded():Promise.resolve()))}attributeChangedCallback(ae,ue,nt){var ut,qt;if(super.attributeChangedCallback(ae,ue,nt),"picture"===ae)if(null===(ut=this.legend)||void 0===ut||null===(qt=ut.setAttribute)||void 0===qt||qt.call(ut,"picture",nt),(0,Xt.isNullId)(ue)&&!(0,Xt.isNullId)(nt)&&this.mini.removeAttribute("collapsed"),(0,Xt.isNullId)(nt))this.map&&this.isMapWide()?this.mini.classList.add("pnx-hidden"):this.map&&!this.isMapWide()&&this._setFocus("map");else if((0,Xt.isNullId)(ue)&&this.sequence==this._initParams.getParentPostInit().sequence&&!this._initParams.getParentPostInit().picture){var Yt,ys;this.mini.classList.remove("pnx-hidden"),this.mini.removeAttribute("collapsed"),"closed"===(null===(Yt=this.bottomDrawer)||void 0===Yt||null===(ys=Yt.getAttribute)||void 0===ys?void 0:ys.call(Yt,"openness"))&&this.bottomDrawer.setAttribute("openness","half-opened")}else{var Ec,lu;if(this.mini.classList.remove("pnx-hidden"),(0,Xt.isNullId)(ue))this._setFocus("pic"),"closed"===(null===(Ec=this.bottomDrawer)||void 0===Ec||null===(lu=Ec.getAttribute)||void 0===lu?void 0:lu.call(Ec,"openness"))&&this.bottomDrawer.setAttribute("openness","half-opened")}"focus"===ae&&this._setFocus(nt)}onceMapReady(){if(!this["map-options"])return Promise.resolve();let ae;return new Promise((ue=>{ae=setInterval((()=>{var nt,ut,qt;"object"===typeof this.map&&(null!==(nt=this.map)&&void 0!==nt&&null!==(ut=nt.loaded)&&void 0!==ut&&ut.call(nt)?(clearInterval(ae),ue()):null!==(qt=this.map)&&void 0!==qt&&qt.once&&this.map.once("render",(()=>{clearInterval(ae),ue()})))}),250)}))}async _initMap(){await new Promise((ae=>{this.map=new Yt.A(this,this.mapContainer,this._initParams.getMapInit()),(0,ut.saveMapParamsToLocalStorage)(this.map),this.map.once("users-changed",(()=>{this.loader.setAttribute("value",75),ae()}))})),await(0,_u.mK)(this.map,this._initParams.getMapPostInit()),(0,ut.initMapKeyboardHandler)(this),(0,ut.linkMapAndPhoto)(this)}async _postAPIInit(){this.loader.setAttribute("value",30),this._createInitParamsHandler();const ae=this._initParams.getParentPostInit();this._initPSV(),await this._initMap(),this._initWidgets(),this._moveChildToGrid(),(0,_u.iz)(this,ae),ae.keyboardShortcuts&&this._handleKeyboardManagement(),ae.willLoadPicture?this.psv.addEventListener("picture-loaded",(ue=>{(0,_u.iz)(this,ae),this.loader.dismiss()}),{once:!0}):this.loader.dismiss()}_enableKeyboard(){this.map&&this.isMapWide()?this._enableKeyboardMap():this._enableKeyboardPSV()}_enableKeyboardMap(){this.psv.stopKeyboardControl(),this.map.keyboard.enable()}_enableKeyboardPSV(){this.psv.startKeyboardControl(),this.map.keyboard.disable()}_disableKeyboard(){this.psv.stopKeyboardControl(),this.map.keyboard.disable()}_toggleKeyboardBasedOnFocus(ae){const ue=(null===ae||void 0===ae?void 0:ae.target)||document.activeElement;if(this.contains(ue)){for(let ae of this.grid.childNodes)if("bg"!==ae.getAttribute("slot")&&!qt.RD.includes(ae.tagName.toLowerCase())&&ae.contains(ue))return void this._disableKeyboard();this._enableKeyboard()}else this._disableKeyboard()}_handleKeyboardManagement(){window.addEventListener("click",(ae=>this._toggleKeyboardBasedOnFocus(ae))),window.addEventListener("keypress",this._toggleKeyboardBasedOnFocus.bind(this)),this.addEventListener("focus-changed",(ae=>{this.popup.getAttribute("visible")?this._disableKeyboard():"map"===ae.detail.focus?this._enableKeyboardMap():this._enableKeyboardPSV()})),this.popup.addEventListener("open",this._disableKeyboard.bind(this)),this.popup.addEventListener("close",this._enableKeyboard.bind(this)),this.psv.addEventListener("click",this._enableKeyboardPSV.bind(this));for(let ae of this.grid.childNodes)"bg"===ae.getAttribute("slot")||qt.RD.includes(ae.tagName.toLowerCase())||(ae.addEventListener("focusin",this._disableKeyboard.bind(this)),ae.addEventListener("focusout",(()=>{null===this.popup.getAttribute("visible")&&this._enableKeyboard()})))}moveCenter(){const ae=this.psv.getPictureMetadata();ae&&(this.map&&this.isMapWide()?this.map.flyTo({center:ae.gps,zoom:20}):super.moveCenter())}_moveToDirection(ae){if(this.map&&this.isMapWide()){let ue;switch(ae){case"up":ue=[0,-100];break;case"left":ue=[-100,0];break;case"down":ue=[0,vu];break;case"right":ue=[vu,0]}this.map.panBy(ue)}else super._moveToDirection(ae)}isMapWide(){return this.mapContainer.parentNode==this.grid}_setFocus(ae){var ue,nt,ut,qt;let Yt=arguments.length>1&&void 0!==arguments[1]&&arguments[1],uu=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("map"===ae&&!this.map)throw new Error("Map is not enabled");if(!["map","pic"].includes(ae))throw new Error("Invalid focus value (should be pic or map)");if(this.focus=ae,(uu||("map"!==ae||!this.map||!this.isMapWide())&&("pic"!==ae||this.map&&this.isMapWide()))&&("map"===ae?(this.psvContainer.parentNode==this.grid&&(this.grid.removeChild(this.psvContainer),this.psvContainer.removeAttribute("slot")),this.mapContainer.parentNode==this.mini&&this.mini.removeChild(this.mapContainer),this.mapContainer.setAttribute("slot","bg"),this.grid.appendChild(this.mapContainer),this.mini.appendChild(this.psvContainer),this.mini.icon=(0,ys.fa)(Ec.pt),this._miniPicLegend&&this.mini.appendChild(this._miniPicLegend),(0,Xt.isNullId)(this.picture)?this.mini.classList.add("pnx-hidden"):this.mini.classList.remove("pnx-hidden"),this.map.getCanvas().focus()):(this.mapContainer.parentNode==this.grid&&(this.grid.removeChild(this.mapContainer),this.mapContainer.removeAttribute("slot")),this.psvContainer.parentNode==this.mini&&(this.mini.removeChild(this.psvContainer),this._miniPicLegend&&this.mini.removeChild(this._miniPicLegend)),this.psvContainer.setAttribute("slot","bg"),this.grid.appendChild(this.psvContainer),this.mini.classList.remove("pnx-hidden"),this.mini.appendChild(this.mapContainer),this.mini.icon=(0,ys.fa)(lu.e5),this.psvContainer.focus()),null===this||void 0===this||null===(ue=this.map)||void 0===ue||null===(nt=ue.resize)||void 0===nt||nt.call(ue),this.psv.autoSize(),this.psv.forceRefresh(),null===(ut=this.legend)||void 0===ut||null===(qt=ut.setAttribute)||void 0===qt||qt.call(ut,"focus",this.focus),!Yt)){const ue=new CustomEvent("focus-changed",{detail:{focus:ae}});this.dispatchEvent(ue)}}_toggleFocus(){this._setFocus(this.isMapWide()?"pic":"map")}_onMiniExpand(){this.map.resize(),this.psv.autoSize()}_onMapFiltersChange(){var ae;const ue=(0,uu.qi)("#pnx-map-filters-menu"),nt=(0,uu.qi)("#pnx-map-theme"),qt=(0,ut.mapFiltersFormValues)(ue,nt,null===(ae=this.map)||void 0===ae?void 0:ae._hasQualityScore());this.map.setFilters(qt)}}Viewer.properties={"map-options":{converter:qt.Ay.GetJSONConverter()},focus:{type:String,reflect:!0},geocoder:{type:String},tabindex:{type:Number},...qt.Ay.properties},customElements.define("pnx-viewer",Viewer)},3921:(ae,ue,nt)=>{"use strict";nt.r(ue),nt.d(ue,{Basic:()=>ut.A,CoverageMap:()=>qt.A,Editor:()=>Yt.A,PhotoViewer:()=>ys.Ay,Viewer:()=>Xt.A});var ut=nt(9039),qt=nt(153),Yt=nt(1752),Xt=nt(8743),ys=nt(3407)},9341:(ae,ue,nt)=>{"use strict";nt.r(ue),nt.d(ue,{core:()=>ut,layout:()=>qt,menus:()=>Yt,ui:()=>Xt});var ut=nt(3921),qt=nt(456),Yt=nt(8794),Xt=nt(7091)},6784:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>BottomDrawer});var ut=nt(4542),qt=nt(1198),Yt=nt(5995);const Xt={opened:0,"half-opened":.7,closed:1};class BottomDrawer extends ut.WF{constructor(){super(),this._isDragging=!1,this.openness="half-opened"}firstUpdated(){super.firstUpdated(),this._boundTouchMove=this._onTouchMove.bind(this),this._boundTouchEnd=this._onTouchEnd.bind(this),this._drawerHeight=window.innerHeight-30;const ae=this._getDrawer();ae&&(ae.style.height=`${this._drawerHeight}px`,ae.style.maxHeight=`${this._drawerHeight}px`,(0,Yt.onceParentAvailable)(this).then((()=>this._parent.onceReady())).then((()=>{var ae,ue;null===(ae=this._parent.map)||void 0===ae||ae.addEventListener("click",(()=>this.openness="closed")),null===(ue=this._parent.psv)||void 0===ue||ue.addEventListener("click",(()=>this.openness="closed"))})))}attributeChangedCallback(ae,ue,nt){if(super.attributeChangedCallback(ae,ue,nt),"openness"===ae){if("opened"!==nt){const ae=this.shadowRoot.querySelector(".content");ae&&(ae.scrollTop=0)}const ae=this._getDrawer();ae&&(ae.style.transform=null)}}disconnectedCallback(){super.disconnectedCallback(),this._cleanupTouchListeners()}_getDrawer(){var ae;return null===(ae=this.shadowRoot)||void 0===ae?void 0:ae.querySelector(".drawer")}_onHandleClick(){"opened"===this.openness?this.openness="closed":"half-opened"===this.openness?this.openness="opened":"closed"===this.openness&&(this.openness="half-opened")}_onTouchStart(ae){this._isDragging=!0,this._startFingerY=ae.touches[0].clientY,this._deltaFingerY=0,this._drawerY=this._drawerHeight*Xt[this.openness],window.addEventListener("touchmove",this._boundTouchMove,{passive:!0}),window.addEventListener("touchend",this._boundTouchEnd),window.addEventListener("touchcancel",this._boundTouchEnd)}_onTouchMove(ae){if(!this._isDragging)return;const ue=this.shadowRoot.querySelector(".content");ue.scrollHeight>ue.offsetHeight&&ue.scrollTop>0?this._updateDrawerTransform(0):(this._deltaFingerY=ae.touches[0].clientY-this._startFingerY,this._updateDrawerTransform(this._drawerY+this._deltaFingerY))}_onTouchEnd(ae){(this._isDragging&&!(Math.abs(this._deltaFingerY)<30)||ae.target.closest(".handle"))&&(ae.preventDefault(),this._isDragging=!1,0===this._deltaFingerY&&"closed"===this.openness?this.openness="half-opened":this._updateDrawerTransform(this._drawerY+this._deltaFingerY,!0),this._cleanupTouchListeners(),this._startFingerY=null,this._deltaFingerY=null)}_cleanupTouchListeners(){window.removeEventListener("touchmove",this._boundTouchMove),window.removeEventListener("touchend",this._boundTouchEnd),window.removeEventListener("touchcancel",this._boundTouchCancel)}_updateDrawerTransform(ae){let ue=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const nt=this._getDrawer();nt&&(ae=Math.max(0,Math.min(ae,this._drawerHeight-30)),ue&&(this._deltaFingerY<0?"closed"===this.openness?Math.abs(this._deltaFingerY)>this._drawerHeight*(1-Xt["half-opened"])?this.openness="opened":this.openness="half-opened":this.openness="opened":this.openness="closed",this._drawerY=null,ae=Math.max(0,Math.min(Xt[this.openness]*this._drawerHeight,this._drawerHeight-30))),nt.style.transform=`translateY(${ae}px)`)}render(){const ae={drawer:!0,[this.openness]:!0,dragging:this._isDragging};return ut.qy`
13
13
  <div
14
14
  class=${(0,qt.H)(ae)}
15
15
  @touchstart="${this._onTouchStart}"
@@ -2146,7 +2146,7 @@
2146
2146
  }
2147
2147
  /* Logo */
2148
2148
  img.logo-dead { width: 100px; }
2149
- `,Loader.properties={_mode:{state:!0},_label:{state:!0},_isLabelFun:{state:!0},visible:{type:Boolean,reflect:!0},"no-label":{type:Boolean},value:{type:Number}},customElements.define("pnx-loader",Loader)},5642:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>Map});nt(3041);var ut=nt(8340),qt=nt(7343),Yt=nt(6883),Xt=nt(270),ys=nt(6462),Ec=nt(9740),lu=nt(4005),uu=(nt(6795),nt(927)),_u=nt.n(uu),vu=nt(2968),wu=nt.n(vu),Hu=nt(748);_u().workerClass=wu(),_u().addProtocol("pmtiles",(new Hu.Zs).tile);class Map extends _u().Map{constructor(ae,ue){let nt=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};var qt;(super({container:ue,style:(0,ut.combineStyles)(ae,nt),center:[0,0],zoom:0,maxZoom:24,attributionControl:!1,dragRotate:!1,pitchWithRotate:!1,touchZoomRotate:!0,touchPitch:!1,doubleClickZoom:!1,canvasContextAttributes:{preserveDrawingBuffer:!ae.isWidthSmall()},transformRequest:ae.api._getMapRequestTransform(),locale:ae._t.maplibre,hash:!1,...nt}),_u().addProtocol("sem",new lu.A(ae.api).tile()),this._loadMarkerImages(),this._parent=ae,this._options=nt,this.getContainer().classList.add("pnx-map"),void 0===nt.touchZoomRotate)&&(null===this||void 0===this||null===(qt=this.touchZoomRotate)||void 0===qt||qt.disableRotation());this._options.raster&&(this._options.background=this._options.background||"streets"),this._attribution=new(_u().AttributionControl)({compact:!1,...nt.attributionControl}),this.addControl(this._attribution),this._initMapPosition(),this._picMarker=this._getPictureMarker(),this._picMarkerPreview=this._getPictureMarker(!1),this._picThumbUrl={},this._seqPictures={},this._userLayers=new Set,this._parent.addEventListener("select",this.reloadLayersStyles.bind(this)),setTimeout((()=>{var ae;!this.loaded()&&null!==(ae=this._parent)&&void 0!==ae&&ae.loader.isVisible()&&this._parent.loader.dismiss({},this._parent._t.map.slow_loading,(async()=>{await this._postLoad(),this._parent.loader.dismiss()}))}),15e3),this.waitForEnoughMapLoaded().then((async()=>await this._postLoad()))}async _postLoad(){this.resize(),await this.setVisibleUsers(this._parent.users),this.reloadLayersStyles(),this.fire("ready")}destroy(){this.remove(),delete this._parent,delete this._options,delete this._attribution,delete this._picMarker,delete this._picMarkerPreview,delete this._picThumbUrl,delete this._seqPictures,delete this._userLayers}waitForEnoughMapLoaded(){return new Promise((ae=>{let ue=0,nt=0,ut=0,qt=0;const onSourceDataLoading=ae=>{"source"===ae.dataType&&ae.tile&&(ae.sourceId.startsWith("geovisio")?nt++:ue++)},onSourceData=ae=>{"source"===ae.dataType&&ae.tile&&(ae.sourceId.startsWith("geovisio")?(qt++,ae.isSourceLoaded&&(qt=nt)):(ut++,ae.isSourceLoaded&&(ut=ue))),checkEnoughLoaded()},checkEnoughLoaded=()=>{ut/ue>=.75&&(0===nt||qt/nt>=.75)&&(this.off("sourcedata",onSourceData),this.off("sourcedataloading",onSourceDataLoading),ae())};this.on("sourcedataloading",onSourceDataLoading),this.on("sourcedata",onSourceData)}))}_initMapPosition(){!(0,ut.isNullCoordinates)(this._options.center)||this._options.zoom&&0!==this._options.zoom||this._options.hash||this._parent.onceAPIReady().then((()=>{var ae,ue;let nt=null===(ae=this._parent)||void 0===ae||null===(ue=ae.api)||void 0===ue?void 0:ue.getDataBbox();if(nt)try{nt=new(_u().LngLatBounds)(nt),this.loaded()?this.fitBounds(nt,{animate:!1}):this.waitForEnoughMapLoaded().then((()=>this.fitBounds(nt,{animate:!1})))}catch(ut){console.warn("Received invalid bbox: "+nt)}}))}_loadMarkerImages(){[{id:"pnx-marker",img:Yt},{id:"pnx-arrow-flat",img:ys},{id:"pnx-arrow-360",img:Ec}].forEach((ae=>{const ue=new Image(64,64);ue.onload=()=>this.addImage(ae.id,ue),ue.src=ae.img}))}_hasQualityScore(){var ae,ue,nt,ut;const qt=(null===(ae=this.getStyle())||void 0===ae||null===(ue=ae.metadata)||void 0===ue?void 0:ue["panoramax:fields"])||{};return(null===qt||void 0===qt||null===(nt=qt.pictures)||void 0===nt?void 0:nt.includes("gps_accuracy"))&&(null===qt||void 0===qt||null===(ut=qt.pictures)||void 0===ut?void 0:ut.includes("h_pixel_density"))}_hasGridStats(){var ae,ue,nt,ut,qt,Yt;const Xt=(null===(ae=this.getStyle())||void 0===ae||null===(ue=ae.metadata)||void 0===ue?void 0:ue["panoramax:fields"])||{};return(null===Xt||void 0===Xt||null===(nt=Xt.grid)||void 0===nt?void 0:nt.includes("nb_360_pictures"))&&(null===Xt||void 0===Xt||null===(ut=Xt.grid)||void 0===ut?void 0:ut.includes("nb_flat_pictures"))&&(null===Xt||void 0===Xt||null===(qt=Xt.grid)||void 0===qt?void 0:qt.includes("coef_360_pictures"))&&(null===Xt||void 0===Xt||null===(Yt=Xt.grid)||void 0===Yt?void 0:Yt.includes("coef_flat_pictures"))}reloadVectorTiles(){[...this._userLayers].forEach((ae=>{const ue=this.getSource((0,ut.getUserSourceId)(ae));ue.setTiles(ue.tiles)}))}hasTwoBackgrounds(){return void 0!==this.getLayer(ut.RASTER_LAYER_ID)}getBackground(){if(!this.getLayer(ut.RASTER_LAYER_ID))return"streets";return"visible"==this.getLayoutProperty(ut.RASTER_LAYER_ID,"visibility")?"aerial":"streets"}setBackground(ae){if(!this.getLayer(ut.RASTER_LAYER_ID)&&"aerial"===ae)throw new Error("No aerial imagery available");this.getLayer(ut.RASTER_LAYER_ID)&&(this.setLayoutProperty(ut.RASTER_LAYER_ID,"visibility","aerial"===ae?"visible":"none"),this.fire("background-changed",{background:ae||"streets"}))}getVisibleUsers(){return[...this._userLayers].filter((ae=>this.getLayer((0,ut.getUserLayerId)(ae,"pictures"))&&"visible"===this.getLayoutProperty((0,ut.getUserLayerId)(ae,"pictures"),"visibility")))}onceLayerReady(ae){return this.getLayer(ae)?Promise.resolve():new Promise((ae=>{setTimeout(ae,250)})).then((()=>this.onceLayerReady(ae)))}async setVisibleUsers(){let ae=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];"string"===typeof ae?ae=[ae]:null===ae&&(ae=[]),await Promise.all(ae.filter((ae=>""!=ae&&!this._userLayers.has(ae))).map((ae=>(this._createPicturesTilesLayer(ae),this.onceLayerReady((0,ut.getUserLayerId)(ae,"pictures"))))));const ue=["pictures","sequences","sequences_plus","grid","pictures_symbols"];[...this._userLayers].forEach((nt=>{ue.forEach((ue=>{const qt=(0,ut.getUserLayerId)(nt,ue);this.getLayer(qt)&&this.setLayoutProperty(qt,"visibility",ae.includes(nt)?"visible":"none")}))})),this.reloadLayersStyles(),this.fire("users-changed",{usersIds:ae})}filterUserLayersContent(ae,ue){[...this._userLayers].forEach((nt=>{this.getLayer((0,ut.getUserLayerId)(nt,ae))?(this.setFilter((0,ut.getUserLayerId)(nt,ae),ue),"sequences"===ae&&this.getLayer((0,ut.getUserLayerId)(nt,"sequences_plus"))&&this.setFilter((0,ut.getUserLayerId)(nt,"sequences_plus"),ue),"pictures"===ae&&this.getLayer((0,ut.getUserLayerId)(nt,"pictures_symbols"))&&this.setFilter((0,ut.getUserLayerId)(nt,"pictures_symbols"),ue)):console.warn("Layer",(0,ut.getUserLayerId)(nt,ae),"not ready")}))}displayPictureMarker(ae,ue,nt){let qt=arguments.length>3&&void 0!==arguments[3]&&arguments[3],Yt=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;this._picMarkerPreview.remove(),void 0!==ae&&void 0!==ue?(this._picMarker.setLngLat([ae,ue]).setRotation(nt).addTo(this),this._picMarker.picId=Yt):this._picMarker.remove(),this.reloadLayersStyles(),qt||void 0===ae||void 0===ue||this.jumpTo({center:[ae,ue],zoom:this.getZoom()<ut.TILES_PICTURES_ZOOM+2?ut.TILES_PICTURES_ZOOM+2:this.getZoom()})}reloadLayersStyles(){const updateStyle=(ae,ue)=>{[...this._userLayers].forEach((nt=>{const qt=(0,ut.getUserLayerId)(nt,ae);if(this.getLayer(qt)){for(let ae in ue.layout)this.setLayoutProperty(qt,ae,ue.layout[ae]);for(let ae in ue.paint)this.setPaintProperty(qt,ae,ue.paint[ae])}else console.warn("Layer",qt,"not ready")}))};["pictures","pictures_symbols","sequences"].forEach((ae=>{updateStyle(ae,this._getLayerStyleProperties(ae))}))}async _createPicturesTilesLayer(ae){this._userLayers.add(ae);const ue=this.getStyle().layers.find(ut.isLabelLayer);if("geovisio"!==ae&&!this.getSource(`geovisio_${ae}`)){const nt=await this._parent.api.getUserMapStyle(ae);Object.entries(nt.sources).forEach((ae=>{let[ue,nt]=ae;return this.addSource(ue,nt)})),nt.layers=nt.layers||[];nt.layers.concat((0,ut.getMissingLayerStyles)(nt.sources,nt.layers)).filter((ae=>Object.keys(ae).length>0)).forEach((ae=>this.addLayer(ae,null===ue||void 0===ue?void 0:ue.id)))}this._picPreviewTimer=null,this._picPopup=new(_u().Popup)({closeButton:!1,closeOnClick:!this._parent.isWidthSmall(),offset:3}),this._picPopup.on("close",(()=>{delete this._picPopup._picId}));const nt=(0,ut.getUserLayerId)(ae,"pictures");this.on("mousemove",nt,(ae=>{this.getCanvas().style.cursor="pointer";const ue=Object.assign({},ae);clearTimeout(this._picPreviewTimer),this._picPreviewTimer=setTimeout((()=>this._attachPreviewToPictures(ue,nt)),100)})),this.on("mouseleave",nt,(()=>{clearTimeout(this._picPreviewTimer),this.getCanvas().style.cursor="",this._picPopup._picId,this._picPopup.remove()})),this.on("click",nt,this._onPictureClick.bind(this));const qt=(0,ut.getUserLayerId)(ae,"sequences_plus");this.on("mousemove",qt,(ae=>{if(this._onSequenceHover(ae),this.getZoom()<=ut.TILES_PICTURES_ZOOM+1&&(this.getCanvas().style.cursor="pointer",ae.features[0].properties.id)){const ue=Object.assign({},ae);clearTimeout(this._picPreviewTimer),this._picPreviewTimer=setTimeout((()=>this._attachPreviewToPictures(ue,qt)),100)}})),this.on("mouseleave",qt,(()=>{clearTimeout(this._picPreviewTimer),this.getCanvas().style.cursor="",this._picPopup._picId,this._picPopup.remove()})),this.on("click",qt,(ae=>{ae.preventDefault(),this.getZoom()<=ut.TILES_PICTURES_ZOOM+1&&this._onSequenceClick(ae)})),"geovisio"===ae&&this.getLayer("geovisio_grid")&&(this.on("mousemove","geovisio_grid",(ae=>{if(this.getZoom()<=ut.TILES_PICTURES_ZOOM+1){this.getCanvas().style.cursor="pointer";const ue=Object.assign({},ae);clearTimeout(this._picPreviewTimer),this._picPreviewTimer=setTimeout((()=>this._attachPreviewToPictures(ue,"geovisio_grid")),100)}})),this.on("mouseleave","geovisio_grid",(()=>{clearTimeout(this._picPreviewTimer),this.getCanvas().style.cursor="",this._picPopup._picId,this._picPopup.remove()})),this.on("click","geovisio_grid",(ae=>{ae.preventDefault(),this.flyTo({center:ae.lngLat,zoom:ut.TILES_PICTURES_ZOOM-6})}))),this.on("click",(ae=>{!1===ae.defaultPrevented&&(clearTimeout(this._picPreviewTimer),this._picPopup.remove())}))}_getLayerStyleProperties(ae){if("pictures_symbols"===ae)return{paint:{},layout:{"icon-image":["case",["==",["get","id"],this._parent.picture],"",["==",["get","type"],"equirectangular"],"pnx-arrow-360","pnx-arrow-flat"],"symbol-sort-key":this._getLayerSortStyle(ae)}};{const ue={pictures:"circle",sequences:"line"};return{paint:Object.assign({[`${ue[ae]}-color`]:this._getLayerColorStyle(ae)},ut.VECTOR_STYLES[ae.toUpperCase()].paint),layout:Object.assign({[`${ue[ae]}-sort-key`]:this._getLayerSortStyle(ae)},ut.VECTOR_STYLES[ae.toUpperCase()].layout)}}}_getLayerColorStyle(ae){const ue=["case",["==",["get","hidden"],!0],qt.COLORS.HIDDEN,["==",["get","geovisio:status"],"hidden"],qt.COLORS.HIDDEN],nt=this._parent.sequence;return"sequences"==ae&&nt?ue.push(["==",["get","id"],nt],qt.COLORS.SELECTED):ae.startsWith("pictures")&&nt&&ue.push(["in",nt,["get","sequences"]],qt.COLORS.SELECTED),ue.push(qt.COLORS.BASE),ue}_getLayerSortStyle(ae){const ue=["case",["==",["get","hidden"],!0],90],nt=this._parent.sequence;return"sequences"==ae&&nt?ue.push(["==",["get","id"],nt],100):ae.startsWith("pictures")&&nt&&ue.push(["in",nt,["get","sequences"]],100),ue.push(10),ue}_attachPreviewToPictures(ae,ue){let nt=ae.features.pop();if(!nt||nt.properties.id==this._picPopup._picId)return;let qt=null;if(ue.endsWith("pictures")?qt=nt.geometry.coordinates.slice():ae.lngLat&&(qt=[ae.lngLat.lng,ae.lngLat.lat]),!qt){const ae="LineString"===nt.geometry.type?[nt.geometry.coordinates]:nt.geometry.coordinates;let ue=null;const ut=this.getBounds(),Yt=ut.getCenter();for(let nt=0;nt<ae.length;nt++)for(let Xt=0;Xt<ae[nt].length;Xt++)if(ut.contains(ae[nt][Xt])){let ut=Yt.distanceTo(new(_u().LngLat)(...ae[nt][Xt]));(null===ue||ut<ue)&&(qt=ae[nt][Xt],ue=ut)}if(!qt)return}this._picPopup.setLngLat(qt).addTo(this),this._picThumbUrl[nt.properties.id]||this._picPopup.setDOMContent((0,ut.getThumbGif)(this._parent._t)),this._picPopup._loading=nt.properties.id,this._picPopup._picId=nt.properties.id;const displayThumb=ae=>{if(this._picPopup._loading===nt.properties.id)if(delete this._picPopup._loading,ae){let ue=document.createElement("img");ue.classList.add("pnx-map-thumb"),ue.alt=this._parent._t.map.thumbnail;let ut=new Image;if(ut.src=ae,ut.addEventListener("load",(()=>{nt.properties.hidden?ue.children[0].src=ut.src:ue.src=ut.src,this._picPopup.setDOMContent(ue)})),nt.properties.hidden){const ae=document.createElement("div");ae.classList.add("pnx-map-thumb-legend"),ae.appendChild(document.createTextNode(this._parent._t.map.not_public));const nt=document.createElement("div");nt.appendChild(ue),nt.appendChild(ae),ue=nt}}else this._picPopup.remove()};ue.endsWith("pictures")?this._getPictureThumbURL(nt.properties.id).then(displayThumb):ue.endsWith("grid")?this._getThumbURL(qt).then(displayThumb):this._getSequenceThumbURL(nt.properties.id,new(_u().LngLat)(...qt)).then(displayThumb)}_getThumbURL(ae){return this._parent.api.getPicturesAroundCoordinates(ae[1],ae[0],.1,1).then((ae=>{var ue;const nt=null===ae||void 0===ae||null===(ue=ae.features)||void 0===ue?void 0:ue.pop();return nt?this._parent.api.findThumbnailInPictureFeature(nt):null}))}_getSequenceThumbURL(ae,ue){return ue?this._parent.api.getPicturesAroundCoordinates(ue.lat,ue.lng,1,1,ae).then((ue=>{var nt;return(null===ue||void 0===ue||null===(nt=ue.features)||void 0===nt?void 0:nt.length)>0?this._parent.api.findThumbnailInPictureFeature(ue.features[0]):this._parent.api.getPictureThumbnailURLForSequence(ae)})):this._parent.api.getPictureThumbnailURLForSequence(ae)}_getPictureThumbURL(ae,ue){let nt=null;return ae&&(void 0!==this._picThumbUrl[ae]?nt="string"===typeof this._picThumbUrl[ae]?Promise.resolve(this._picThumbUrl[ae]):this._picThumbUrl[ae]:(this._picThumbUrl[ae]=this._parent.api.getPictureThumbnailURL(ae,ue).then((ue=>ue?(this._picThumbUrl[ae]=ue,ue):(this._picThumbUrl[ae]=null,null))).catch((()=>{this._picThumbUrl[ae]=null})),nt=this._picThumbUrl[ae])),nt}_getPictureMarker(){let ae=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];const ue=document.createElement("img");return ue.src=ae?Xt:Yt,ue.alt="",new(_u().Marker)({element:ue,picId:null}).setDraggable(ae&&this._options.picMarkerDraggable)}_onSequenceHover(ae){var ue;ae.preventDefault(),ae.features.length>0&&null!==(ue=ae.features[0].properties)&&void 0!==ue&&ue.id&&this.fire("sequence-hover",{seqId:ae.features[0].properties.id})}_onSequenceClick(ae){var ue,nt;ae.preventDefault(),"pic"!==(null===(ue=this._parent.psv)||void 0===ue?void 0:ue.getPicturesNavigation())&&ae.features.length>0&&null!==(nt=ae.features[0].properties)&&void 0!==nt&&nt.id&&this.fire("sequence-click",{seqId:ae.features[0].properties.id,coordinates:ae.lngLat})}_onPictureClick(ae){var ue,nt,ut;if(ae.preventDefault(),"pic"===(null===(ue=this._parent.psv)||void 0===ue?void 0:ue.getPicturesNavigation()))return;const qt=this.queryRenderedFeatures(ae.point);if(qt.length>1&&qt.find((ae=>{var ue;return null===ae||void 0===ae||null===(ue=ae.source)||void 0===ue?void 0:ue.startsWith("sem-")})))return;const Yt=(null===ae||void 0===ae||null===(nt=ae.features)||void 0===nt?void 0:nt.length)>0?ae.features[0]:null;if(null!==Yt&&void 0!==Yt&&null!==(ut=Yt.properties)&&void 0!==ut&&ut.id){let ue=null;try{Yt.properties.sequences&&(Array.isArray(Yt.properties.sequences)||(Yt.properties.sequences=JSON.parse(Yt.properties.sequences)),ue=Yt.properties.sequences.pop())}catch(ae){console.log("Sequence ID is not available in vector tiles for picture "+Yt.properties.id)}this.fire("picture-click",{picId:Yt.properties.id,seqId:ue,feature:Yt})}}addEventListener(ae,ue){let nt=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};null!==nt&&void 0!==nt&&nt.once?this.once(ae,ue):this.on(ae,ue)}}},2771:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>MapMore,T:()=>Ec});var ut=nt(5642),qt=nt(7343),Yt=nt(8340),Xt=nt(2283),ys=nt(4005);const Ec=["minDate","maxDate","pic_type","camera","theme","qualityscore","gps"];class MapMore extends ut.A{constructor(ae,ue){super(ae,ue,arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}),this._mapFilters={},this._options.theme&&(this._mapFilters={theme:this._options.theme})}async _postLoad(){Xt.SEMANTICS_OVERLAYS.forEach((ae=>this.addSemanticOverlay(...ae))),await super._postLoad()}reloadLayersStyles(){if(super.reloadLayersStyles(),this._hasGridStats()){let ae="coef";this._mapFilters.pic_type&&(ae="flat"==this._mapFilters.pic_type?"coef_flat_pictures":"coef_360_pictures"),this.getStyle().layers.filter((ae=>ae.id.endsWith("_grid"))).forEach((ue=>{const nt=(0,Yt.switchCoefValue)(ue,ae);for(let ae in nt.layout)this.setLayoutProperty(ue.id,ae,nt.layout[ae]);for(let ae in nt.paint)this.setPaintProperty(ue.id,ae,nt.paint[ae])}))}}_getDatesForLayerColors(){const ae=864e5,ue=Date.now();return[ue-30*ae,ue-365*ae,ue-730*ae].map((ae=>new Date(ae).toISOString().split("T")[0]))}_getLayerColorStyle(ae){var ue,nt,ut,Xt,ys,Ec,lu,uu;const _u=["case",["==",["get","hidden"],!0],qt.COLORS.HIDDEN],vu=(null===(ue=this._parent.psv)||void 0===ue||null===(nt=ue._myVTour)||void 0===nt||null===(ut=nt.state)||void 0===ut?void 0:ut.loadingNode)||(null===(Xt=this._parent.psv)||void 0===Xt||null===(ys=Xt._myVTour)||void 0===ys||null===(Ec=ys.state)||void 0===Ec||null===(lu=Ec.currentNode)||void 0===lu?void 0:lu.id),wu=vu?null===(uu=this._parent.psv)||void 0===uu?void 0:uu._picturesSequences[vu]:null;if("sequences"==ae&&wu?_u.push(["==",["get","id"],wu],qt.COLORS.SELECTED):"pictures"==ae&&wu&&_u.push(["in",wu,["get","sequences"]],qt.COLORS.SELECTED),this._mapFilters.theme==Yt.MAP_THEMES.AGE){const ue="sequences"==ae?"date":"ts",nt=this._getDatesForLayerColors();_u.push(["!",["has",ue]],qt.COLORS.BASE,[">=",["get",ue],nt[0]],qt.COLORS.PALETTE_4,[">=",["get",ue],nt[1]],qt.COLORS.PALETTE_3,[">=",["get",ue],nt[2]],qt.COLORS.PALETTE_2,qt.COLORS.PALETTE_1)}else this._mapFilters.theme==Yt.MAP_THEMES.TYPE?_u.push(["!",["has","type"]],qt.COLORS.BASE,["==",["get","type"],"equirectangular"],qt.COLORS.QUALI_1,qt.COLORS.QUALI_2):this._mapFilters.theme==Yt.MAP_THEMES.SCORE?_u.push(["==",Yt.MAP_EXPR_QUALITYSCORE,5],qt.QUALITYSCORE_VALUES[0].color,["==",Yt.MAP_EXPR_QUALITYSCORE,4],qt.QUALITYSCORE_VALUES[1].color,["==",Yt.MAP_EXPR_QUALITYSCORE,3],qt.QUALITYSCORE_VALUES[2].color,["==",Yt.MAP_EXPR_QUALITYSCORE,2],qt.QUALITYSCORE_VALUES[3].color,qt.QUALITYSCORE_VALUES[4].color):this._mapFilters.theme==Yt.MAP_THEMES.GPS?_u.push(["==",Yt.MAP_EXPR_QUALITYSCORE_GPS,5],qt.GPS_VALUES[0].color,["==",Yt.MAP_EXPR_QUALITYSCORE_GPS,4],qt.GPS_VALUES[1].color,["==",Yt.MAP_EXPR_QUALITYSCORE_GPS,3],qt.GPS_VALUES[2].color,["==",Yt.MAP_EXPR_QUALITYSCORE_GPS,2],qt.GPS_VALUES[3].color,qt.GPS_VALUES[4].color):_u.push(qt.COLORS.BASE);return _u}_getLayerSortStyle(ae){var ue,nt,ut,qt,Xt,ys,Ec,lu;const uu=["case",["==",["get","hidden"],!0],90],_u=(null===(ue=this._parent.psv)||void 0===ue||null===(nt=ue._myVTour)||void 0===nt||null===(ut=nt.state)||void 0===ut?void 0:ut.loadingNode)||(null===(qt=this._parent.psv)||void 0===qt||null===(Xt=qt._myVTour)||void 0===Xt||null===(ys=Xt.state)||void 0===ys||null===(Ec=ys.currentNode)||void 0===Ec?void 0:Ec.id),vu=_u?null===(lu=this._parent.psv)||void 0===lu?void 0:lu._picturesSequences[_u]:null;if("sequences"==ae&&vu?uu.push(["==",["get","id"],vu],100):"pictures"==ae&&vu&&uu.push(["in",vu,["get","sequences"]],100),this._mapFilters.theme==Yt.MAP_THEMES.AGE){const ue="sequences"==ae?"date":"ts",nt=this._getDatesForLayerColors();uu.push(["!",["has",ue]],0,[">=",["get",ue],nt[0]],50,[">=",["get",ue],nt[1]],49,[">=",["get",ue],nt[2]],48)}else this._mapFilters.theme==Yt.MAP_THEMES.TYPE?uu.push(["!",["has","type"]],0,["==",["get","type"],"equirectangular"],50):this._mapFilters.theme==Yt.MAP_THEMES.SCORE?uu.push(["==",Yt.MAP_EXPR_QUALITYSCORE,5],80,["==",Yt.MAP_EXPR_QUALITYSCORE,4],65,["==",Yt.MAP_EXPR_QUALITYSCORE,3],50,["==",Yt.MAP_EXPR_QUALITYSCORE,2],35,["==",Yt.MAP_EXPR_QUALITYSCORE,1],20):this._mapFilters.theme==Yt.MAP_THEMES.GPS&&uu.push(["==",Yt.MAP_EXPR_QUALITYSCORE_GPS,5],80,["==",Yt.MAP_EXPR_QUALITYSCORE_GPS,4],65,["==",Yt.MAP_EXPR_QUALITYSCORE_GPS,3],50,["==",Yt.MAP_EXPR_QUALITYSCORE_GPS,2],35,["==",Yt.MAP_EXPR_QUALITYSCORE_GPS,1],20);return uu.push(10),uu}setFilters(ae){let ue=arguments.length>1&&void 0!==arguments[1]&&arguments[1],{mapFilters:nt,mapSeqFilters:ut,mapPicFilters:qt,reloadMapStyle:Xt}=(0,Yt.mapFiltersToLayersFilters)(ae,this._hasGridStats());this._mapFilters=nt,Xt&&this.reloadLayersStyles();const ys=this.getVisibleUsers().includes("geovisio");ut&&ys&&(ut=["step",["zoom"],!0,7,ut]),this.filterUserLayersContent("sequences",ut),this.filterUserLayersContent("pictures",qt),!ue&&(null!==ut||null!==qt||null!==this._mapFilters.theme&&this._mapFilters.theme!==Yt.MAP_THEMES.DEFAULT)&&ys&&this.getZoom()<7&&!this._hasGridStats()&&this.easeTo({zoom:7}),this.fire("filters-changed",Object.assign({},this._mapFilters))}async setVisibleUsers(){let ae=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];await super.setVisibleUsers(ae);let{mapSeqFilters:ue,mapPicFilters:nt,reloadMapStyle:ut}=(0,Yt.mapFiltersToLayersFilters)(this._mapFilters,this._hasGridStats());ut&&this.reloadLayersStyles();const qt=ae.includes("geovisio");ue&&qt&&(ue=["step",["zoom"],!0,7,ue]),this.filterUserLayersContent("sequences",ue),this.filterUserLayersContent("pictures",nt)}addSemanticOverlay(ae,ue,nt){let ut=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};Object.entries(ut||{}).forEach((ae=>{let[ue,nt]=ae;return this.addSprite(ue,nt)}));const qt="sem-"+ae;this.addSource(qt,{type:"vector",tiles:[`sem:///${ue}/{z}/{x}/{y}`],minzoom:ys.d,maxzoom:ys.d}),this.addLayer({id:ae,source:qt,"source-layer":"layer",...nt}),this.on("click",ae,(ae=>{var ue;if(ae.preventDefault(),(null===ae||void 0===ae||null===(ue=ae.features)||void 0===ue?void 0:ue.length)>0){const ue=ae.features[0];this._parent.select(ue.properties.seqid,ue.properties.picid),this._parent.psv.addEventListener("picture-loaded",(()=>{var ae,ue;const nt=this._parent.psv.getPictureMetadata();1===(null===(ae=nt.properties)||void 0===ae||null===(ue=ae.annotations)||void 0===ue?void 0:ue.length)&&this._parent.psv.focusOnAnnotation(nt.properties.annotations[0].id)}),{once:!0})}}))}getSemanticOverlays(){return this.getStyle().layers.filter((ae=>{var ue;return null===(ue=ae.source)||void 0===ue?void 0:ue.startsWith("sem-")}))}toggleAllSemanticOverlays(ae){this.getSemanticOverlays().forEach((ue=>this.setLayoutProperty(ue.id,"visibility",ae?"visible":"none")))}}},9048:(ae,ue,nt)=>{"use strict";nt.d(ue,{Ay:()=>Photo,LM:()=>Hu,Vf:()=>qu,cS:()=>wu});nt(5003);var ut=nt(5975),qt=nt(2305),Yt=nt(7343),Xt=nt(508),ys=(nt(3961),nt(1080),nt(2710),nt(1575),nt(1545)),Ec=nt(3348),lu=nt(4991),uu=nt(3727);const _u={baseUrl:ut,width:1280,cols:2,rows:1,tileUrl:()=>null},vu={id:Yt.BASE_PANORAMA_ID,caption:"",panorama:_u,links:[],gps:[0,0],sequence:{},sphereCorrection:{},horizontalFov:360,properties:{}},wu=30,Hu=250,qu=3e3,Ju="draw-annotation-1",_h="draw-annotation-2",ed="draw-annotation-r",td="rgb(224, 64, 251)",id="rgb(224, 64, 251, 0.5)",nd="rgb(123, 31, 162)",rd="rgba(123, 31, 162, 0.5)";ys.jM.useNewAnglesOrder=!0;class Photo extends ys.jM{constructor(ae,ue){var nt;let ut=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};super({container:ue,adapter:[uu.A,{showErrorTile:!1,baseBlur:!1,resolution:ae.isWidthSmall()?32:64,shouldGoFast:ut.shouldGoFast,useXmpData:!1}],withCredentials:ae.api._getPSVWithCredentials(),requestHeaders:null===ae||void 0===ae||null===(nt=ae["fetch-options"])||void 0===nt?void 0:nt.headers,panorama:_u,lang:ae._t.psv,minFov:5,loadingTxt:"&nbsp;",navbar:null,rendererParameters:{preserveDrawingBuffer:!ae.isWidthSmall()},plugins:[[Ec.$,{dataMode:"server",positionMode:"gps",renderMode:"3d",preload:!0,getNode:()=>{},transitionOptions:()=>{},arrowsPosition:{linkOverlapAngle:Math.PI/6}}],[lu.b,{}]],...ut}),this._parent=ae,this._options=ut,ue.classList.add("pnx-psv"),this._shouldGoFast=(null===ut||void 0===ut?void 0:ut.shouldGoFast)||(()=>!1),this._transitionDuration=(null===ut||void 0===ut?void 0:ut.transitionDuration)||Hu,this._myVTour=this.getPlugin(Ec.$),this._myVTour.datasource.nodeResolver=this._getNodeFromAPI.bind(this),this._myVTour.config.transitionOptions=this._psvNodeTransition.bind(this),this._clearArrows=this._myVTour.arrowsRenderer.clear.bind(this._myVTour.arrowsRenderer),this._myVTour.arrowsRenderer.clear=()=>{},this._myMarkers=this.getPlugin(lu.b),this._annotationsVisible=!0===this._options.displayAnnotations,this._drawingAnnotation=null,this._sequencePlaying=!1,this._picturesNavigation=this._options.picturesNavigation||"any",this._picturesSequences={},this._myVTour.addEventListener("enter-arrow",this._onEnterArrow.bind(this)),this._myVTour.addEventListener("leave-arrow",this._onLeaveArrow.bind(this)),this._myVTour.addEventListener("node-changed",this._onNodeChanged.bind(this)),this._myMarkers.addEventListener("select-marker",this._onSelectMarker.bind(this)),this.addEventListener("position-updated",this._onPositionUpdated.bind(this)),this.addEventListener("zoom-updated",this._onZoomUpdated.bind(this)),this.addEventListener("dblclick",this._onDoubleClick.bind(this)),this._parent.addEventListener("select",this._onSelect.bind(this)),this.loader.size=150,this.loader.color="rgba(61, 61, 61, 0.5)",this.loader.textColor="rgba(255, 255, 255, 0.7)",this.loader.border=5,this.loader.thickness=10,this.loader.canvas.setAttribute("viewBox","0 0 150 150"),this.loader.__updateContent(),this._options.position&&!this._parent.picture&&this.goToPosition(...this._options.position)}async _getNodeFromAPI(ae){var ue,nt;if((0,Yt.isNullId)(ae))return vu;const ut=await fetch(this._parent.api.getPictureMetadataUrl(ae,this._picturesSequences[ae]),this._parent.api._getFetchOptions());let qt=await ut.json();if(qt.features&&(qt=qt.features.pop()),!qt||0===Object.keys(qt).length||!ut.ok)throw this._parent.loader&&this._parent.loader.dismiss(!0,this._parent._t.pnx.error_pic),new Error("Picture with ID "+ae+" was not found");this._picturesSequences[ae]=qt.collection;const ys=(0,Xt.apiFeatureToPSVNode)(qt,this._parent._t,this._parent._isInternetFast,this._picturesNavFilter.bind(this),this._parent.api.cleanResourceURL.bind(this._parent.api));var Ec,lu;null!==ys&&void 0!==ys&&null!==(ue=ys.sequence)&&void 0!==ue&&ue.prevPic&&(this._picturesSequences[null===ys||void 0===ys||null===(Ec=ys.sequence)||void 0===Ec?void 0:Ec.prevPic]=qt.collection);null!==ys&&void 0!==ys&&null!==(nt=ys.sequence)&&void 0!==nt&&nt.nextPic&&(this._picturesSequences[null===ys||void 0===ys||null===(lu=ys.sequence)||void 0===lu?void 0:lu.nextPic]=qt.collection);return ys}_psvNodeTransition(ae,ue,nt){var ut,qt,Xt;let ys={};const Ec=this._shouldGoFast()?0:Math.min(Hu,this._transitionDuration),lu=Ec>100,uu=null!=(nt||(null===ue||void 0===ue?void 0:ue.links.find((ue=>ue.nodeId==ae.id)))),_u=ue&&ae.sequence.id===ue.sequence.id,vu=((null===ue||void 0===ue||null===(ut=ue.properties)||void 0===ut?void 0:ut["view:azimuth"])||0)*(Math.PI/180),qu=((null===ae||void 0===ae||null===(qt=ae.properties)||void 0===qt?void 0:qt["view:azimuth"])||0)*(Math.PI/180),Ju=(0,Yt.getRelativeHeading)(ae)*(Math.PI/180);this.setOption("maxFov",Math.min(3*ae.horizontalFov/4,90));const _h={showLoader:!1,effect:"none",speed:0,rotation:!1,rotateTo:{pitch:0,yaw:-Ju},zoomTo:wu};if(360==ae.horizontalFov)ys=ue?(0,Yt.getDistance)(ue.gps,ae.gps)>=.001?_h:{speed:Ec,effect:uu&&lu?"fade":"none",rotation:uu&&_u&&lu,rotateTo:this.getPosition()}:_h;else if(_u){const ae=this.getPosition().yaw,nt=ue.horizontalFov*(Math.PI/180)/2,ut=ae<=nt||ae>=2*Math.PI-nt,qt=Math.abs(vu-qu)<=Math.PI/4;ys={speed:Ec,effect:uu&&qt&&lu?"fade":"none",rotation:uu&&qt&&lu,rotateTo:ut?this.getPosition():{pitch:0,yaw:0},zoomTo:ut?this.getZoomLevel():wu}}else ys=Object.assign(_h,{rotateTo:{pitch:0,yaw:0}});"fade"===ys.effect&&ys.speed>=150?setTimeout(this._clearArrows,ys.speed-100):this._clearArrows();const ed=new CustomEvent("picture-loading",{detail:{...Object.assign({},this.getXYZ(),ys.rotateTo?{x:180*(qu+ys.rotateTo.yaw)/Math.PI}:null,ys.zoomTo?{z:ys.zoomTo}:null),picId:ae.id,lon:ae.gps[0],lat:ae.gps[1],first:(null===(Xt=this._parent._initParams)||void 0===Xt?void 0:Xt.getParentPostInit().picture)==ae.id}});return this.dispatchEvent(ed),ys}_onEnterArrow(ae){const ue=ae.link,nt=ae.node;let ut;nt&&(ut=360===nt.horizontalFov?(this.getPictureOriginalHeading()+180*this.getPosition().yaw/Math.PI)%360:this.getPictureOriginalHeading());const qt=new CustomEvent("picture-preview-started",{detail:{picId:ue.nodeId,coordinates:ue.gps,direction:ut}});this.dispatchEvent(qt)}_onLeaveArrow(ae){const ue=ae.link,nt=new CustomEvent("picture-preview-stopped",{detail:{picId:ue.nodeId}});this.dispatchEvent(nt)}_onPositionUpdated(ae){let{position:ue}=ae;const nt=(0,Yt.positionToXYZ)(ue,this.getZoomLevel());nt.x+=this.getPictureOriginalHeading(),nt.x=nt.x%360;const ut=new CustomEvent("view-rotated",{detail:nt});this.dispatchEvent(ut),this._onTilesStartLoading()}_onZoomUpdated(ae){let{zoomLevel:ue}=ae;const nt=new CustomEvent("view-rotated",{detail:{...this.getXY(),z:ue}});this.dispatchEvent(nt),this._onTilesStartLoading()}_onDoubleClick(){this.unfocusAnnotation(!1,!0)}_onNodeChanged(ae){for(let qt of document.getElementsByClassName("pnx-psv-tour-arrows"))qt.classList.remove("pnx-clicked");if(ae.node.id){var ue,nt,ut;const qt=(null===(ue=this._parent._initParams)||void 0===ue?void 0:ue.getParentPostInit().picture)==ae.node.id;this._parent.select(null===(nt=ae.node)||void 0===nt||null===(ut=nt.sequence)||void 0===ut?void 0:ut.id,ae.node.id);const Yt=this.getPictureMetadata();if(!Yt)return void this.dispatchEvent(new CustomEvent("picture-loaded",{detail:{}}));this._prevSequence=Yt.sequence.id;const Xt=new CustomEvent("picture-loaded",{detail:{...this.getXYZ(),picId:ae.node.id,lon:Yt.gps[0],lat:Yt.gps[1],first:qt}});this.dispatchEvent(Xt),Yt.panorama.hdUrl?(this.setOption("downloadUrl",Yt.panorama.hdUrl),this.setOption("downloadName",ae.node.id+".jpg")):this.setOption("downloadUrl",null),this._annotationsVisible&&this.toggleAllAnnotations(!0)}this._onTilesStartLoading()}_onSelectMarker(ae){var ue;if(ae.marker&&null!==(ue=ae.marker.id)&&void 0!==ue&&ue.startsWith("annotation-")){if(this.getSelectedAnnotations().find((ae=>{var ue,nt,ut;return null===(ue=this._myMarkers.markers["annotation-"+ae])||void 0===ue||null===(nt=ue.config)||void 0===nt||null===(ut=nt.data)||void 0===ut?void 0:ut.blockFocus})))return;this.focusOnAnnotation(ae.marker.data.id)}}_onTilesStartLoading(){this._tilesQueueTimer&&(clearInterval(this._tilesQueueTimer),delete this._tilesQueueTimer),this._tilesQueueTimer=setInterval((()=>{if(0===Object.keys(this.adapter.queue.tasks).length){if(this._myVTour.state.currentNode){const ae=new CustomEvent("picture-tiles-loaded",{detail:{picId:this._myVTour.state.currentNode.id}});this.dispatchEvent(ae)}clearInterval(this._tilesQueueTimer),delete this._tilesQueueTimer}}),100)}getPictureMetadata(){var ae,ue,nt;return(0,Yt.isNullId)(null===(ae=this._myVTour)||void 0===ae||null===(ue=ae.state)||void 0===ue||null===(nt=ue.currentNode)||void 0===nt?void 0:nt.id)?null:this._myVTour.state.currentNode?Object.assign({},this._myVTour.state.currentNode):null}getPictureId(){var ae,ue,nt,ut,qt;const Xt=(null===(ae=this._myVTour)||void 0===ae||null===(ue=ae.state)||void 0===ue?void 0:ue.loadingNode)||(null===(nt=this._myVTour)||void 0===nt||null===(ut=nt.state)||void 0===ut||null===(qt=ut.currentNode)||void 0===qt?void 0:qt.id);return(0,Yt.isNullId)(Xt)?null:Xt}_onSelect(ae){ae.detail.seqId&&(this._picturesSequences[ae.detail.picId]=ae.detail.seqId),ae.detail.seqId&&!ae.detail.picId?(this.loader.show(),this._parent.api.getSequenceItems(ae.detail.seqId,null,null,1).then((ue=>{var nt;if((null===ue||void 0===ue||null===(nt=ue.features)||void 0===nt?void 0:nt.length)>0){const nt=ue.features[0].id;this._picturesSequences[nt]=ae.detail.seqId,this._parent.select(ae.detail.seqId,nt)}})).catch((ae=>this.showErrorOverlay(ae,this._parent._t.pnx.error_pic,!0)))):ae.detail.picId?this.getPictureId()!==ae.detail.picId&&(this.loader.show(),this._myVTour.setCurrentNode(ae.detail.picId).catch((ae=>{this.showErrorOverlay(ae,this._parent._t.pnx.error_pic,!0)}))):(this._myVTour.setCurrentNode(null),this._myVTour.state.currentNode.id=null,this._myVTour.state.loadingNode=null)}goToNextPicture(){if(!this.getPictureMetadata())throw new Error("No picture currently selected");if("pic"==this._picturesNavigation)throw new Error("Pictures navigation is locked to current picture");const ae=this.getPictureMetadata().sequence.nextPic;if(!ae)throw new Error("No next picture available");this._parent.select(this.getPictureMetadata().sequence.id,ae)}goToPrevPicture(){if(!this.getPictureMetadata())throw new Error("No picture currently selected");if("pic"==this._picturesNavigation)throw new Error("Pictures navigation is locked to current picture");const ae=this.getPictureMetadata().sequence.prevPic;if(!ae)throw new Error("No previous picture available");this._parent.select(this.getPictureMetadata().sequence.id,ae)}async goToPosition(ae,ue){if("pic"==this._picturesNavigation)throw new Error("Pictures navigation is locked to current picture");return this._parent.api.getPicturesAroundCoordinates(ae,ue).then((ae=>{if(ae.features.length>0){const ue=ae.features.pop();return this._parent.select(null===ue||void 0===ue?void 0:ue.collection,ue.id),ue.id}return Promise.reject(new Error("No picture found nearby given coordinates"))}))}getXY(){const ae=(0,Yt.positionToXYZ)(this.getPosition());return ae.x=(ae.x+this.getPictureOriginalHeading())%360,ae}getXYZ(){const ae=this.getXY();return ae.z=this.getZoomLevel(),ae}getPictureOriginalHeading(){var ae,ue;return(null===(ae=this.getPictureMetadata())||void 0===ae||null===(ue=ae.properties)||void 0===ue?void 0:ue["view:azimuth"])||0}getPictureRelativeHeading(){return(0,Yt.getRelativeHeading)(this.getPictureMetadata())}clearPictureMetadataCache(){var ae,ue,nt,ut;const qt=null===(ae=this.getPictureMetadata())||void 0===ae?void 0:ae.id,Yt=null===(ue=this.getPictureMetadata())||void 0===ue||null===(nt=ue.sequence)||void 0===nt?void 0:nt.id;null===(ut=this._myVTour.state.currentTooltip)||void 0===ut||ut.hide(),this._myVTour.state.currentTooltip=null,this._myVTour.state.currentNode=null,this._myVTour.state.preload={},this._myVTour.datasource.nodes={},qt&&this._parent.select(Yt,qt)}setXYZ(ae,ue,nt){const ut=(0,Yt.xyzToPosition)(ae-this.getPictureOriginalHeading(),ue,nt);this.rotate({yaw:ut.yaw,pitch:ut.pitch}),this.zoom(ut.zoom)}setHigherContrast(ae){this.renderer.renderer.toneMapping=ae?3:0,this.renderer.renderer.toneMappingExposure=ae?2:1,this.needsUpdate()}getTransitionDuration(){return this._transitionDuration}setTransitionDuration(ae){if((ae=parseFloat(ae))<100||ae>qu)throw new Error("Invalid transition duration (should be between 100 and "+qu+")");this._transitionDuration=ae;const ue=new CustomEvent("transition-duration-changed",{detail:{value:ae}});this.dispatchEvent(ue)}setPanorama(ae,ue){if(ae.baseUrl.startsWith("data:"))return Promise.resolve();const onFailure=ae=>{var ue;return this.showErrorOverlay(ae,null===(ue=this._parent)||void 0===ue?void 0:ue._t.pnx.error_pic,!0)};try{return super.setPanorama(ae,ue).catch(onFailure)}catch(nt){onFailure(nt)}}showErrorOverlay(ae,ue,nt){var ut,Yt,Xt,ys;null!==(ut=this._parent)&&void 0!==ut&&ut.loader.isVisible()||!this.overlay.isVisible()?null===(Yt=this._parent)||void 0===Yt||Yt.loader.dismiss(ae,ue,nt?()=>{var ae;null===(ae=this._parent)||void 0===ae||ae.loader.dismiss(),this.overlay.hide()}:void 0):(console.error(ae),this.overlay.show({image:`<img style="width: 200px" src="${qt}" alt="" />`,title:null===(Xt=this._parent)||void 0===Xt?void 0:Xt._t.pnx.error,text:ue+"<br />"+(null===(ys=this._parent)||void 0===ys?void 0:ys._t.pnx.error_click),dissmisable:nt}))}playSequence(){this._sequencePlaying=!0,this.container.classList.add("pnx-psv-playing");const ae=new Event("sequence-playing",{bubbles:!0,composed:!0});this.dispatchEvent(ae);const nextPicturePlay=()=>{if(this._sequencePlaying){this.addEventListener("picture-loaded",(()=>{this._playTimer=setTimeout((()=>{nextPicturePlay()}),this.getTransitionDuration())}),{once:!0});try{this.goToNextPicture()}catch(ae){this.stopSequence()}}};this.addEventListener("click",(()=>this.stopSequence())),nextPicturePlay()}stopSequence(){this._sequencePlaying=!1,this.container.classList.remove("pnx-psv-playing"),this._playTimer&&(clearTimeout(this._playTimer),delete this._playTimer),this.forceRefresh();const ae=new Event("sequence-stopped",{bubbles:!0,composed:!0});this.dispatchEvent(ae)}isSequencePlaying(){return this._sequencePlaying}toggleSequencePlaying(){this.isSequencePlaying()?this.stopSequence():this.playSequence()}getPicturesNavigation(){return this._picturesNavigation}setPicturesNavigation(ae){"none"===ae&&(ae="pic"),this._picturesNavigation=ae;const ue=this.container.querySelector(".psv-virtual-tour-arrows");ue&&(ue.style.display="pic"==ae?"none":null);const nt=new CustomEvent("pictures-navigation-changed",{detail:{value:ae}});this.dispatchEvent(nt)}_picturesNavFilter(ae){switch(this._picturesNavigation){case"seq":return["next","prev"].includes(ae.rel);case"pic":case"none":return!1;default:return!0}}areAnnotationsVisible(){return this._annotationsVisible}getSelectedAnnotations(){return Object.keys(this._myMarkers.markers).filter((ae=>{var ue,nt,ut;return ae.startsWith("annotation-")&&(null===(ue=this._myMarkers.markers[ae])||void 0===ue||null===(nt=ue.config)||void 0===nt||null===(ut=nt.data)||void 0===ut?void 0:ut.selected)})).map((ae=>ae.replace("annotation-","")))}toggleAllAnnotations(ae){const ue=this.getPictureMetadata(),nt=this._annotationsVisible==ae;if(!ue)throw this._myMarkers.clearMarkers(),new Error("No picture currently selected");if(ae){var ut;let ae=ue.properties.annotations||[];0===(null===(ut=ae)||void 0===ut?void 0:ut.length)&&console.warn("No annotation available on picture",ue.id),ae=ae.map((ae=>{if(!ue.properties["pers:interior_orientation"].sensor_array_dimensions)return console.warn("Picture lacks pers:interior_orientation.sensor_array_dimensions property, can't compute marker"),null;const nt=ae.shape.coordinates.map((ae=>ae.map((ae=>{var nt;const ut=null===(nt=ue.panorama)||void 0===nt?void 0:nt.cropData,qt={textureX:ae[0]+((null===ut||void 0===ut?void 0:ut.croppedX)||0),textureY:ae[1]+((null===ut||void 0===ut?void 0:ut.croppedY)||0)};return this.dataHelper.textureCoordsToSphericalCoords(qt)}))));return{id:`annotation-${ae.id}`,polygon:nt,data:{id:ae.id},className:"pnx-psv-annotation",svgStyle:{stroke:"var(--orange)",strokeWidth:"3px",fill:"var(--orange-transparent)",cursor:"pointer"},tooltip:this._parent._t.pnx.semantics_annotation_tooltip}})),this._myMarkers.setMarkers(ae)}else this._myMarkers.clearMarkers();this._annotationsVisible=ae,nt||this.dispatchEvent(new CustomEvent("annotations-toggled",{detail:{visible:ae}}))}focusOnAnnotation(ae){let ue=arguments.length>1&&void 0!==arguments[1]&&arguments[1],nt=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const ut=this.getSelectedAnnotations();if(ae&&1===ut.length&&ut[0]===ae)return;this.areAnnotationsVisible()||this.toggleAllAnnotations(!0),this.unfocusAnnotation(!0);const qt=`annotation-${ae}`;if(this._myMarkers.markers[qt]){if(this._myMarkers.updateMarker({id:qt,svgStyle:{stroke:"var(--red)",strokeWidth:"3px",fill:"var(--red-transparent)"},data:{selected:!0,blockFocus:ue}}),this._myMarkers.gotoMarker(qt,0),this.zoom(65),!nt){const ue=new CustomEvent("annotation-focused",{detail:{annotationId:ae}});this.dispatchEvent(ue)}}else setTimeout((()=>this.focusOnAnnotation(ae,ue,nt)),100)}unfocusAnnotation(){let ae=arguments.length>0&&void 0!==arguments[0]&&arguments[0],ue=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const nt=this.getSelectedAnnotations();if(nt.length>0){let ut=0;nt.forEach((ae=>{var nt,qt,Yt;const Xt="annotation-"+ae;ue&&null!==(nt=this._myMarkers.markers[Xt])&&void 0!==nt&&null!==(qt=nt.config)&&void 0!==qt&&null!==(Yt=qt.data)&&void 0!==Yt&&Yt.blockFocus?ut++:this._myMarkers.updateMarker({id:Xt,svgStyle:{stroke:"var(--orange)",strokeWidth:"3px",fill:"var(--orange-transparent)"},data:{selected:!1,blockFocus:!1}})})),!ae&&ut<nt.length&&this.dispatchEvent(new Event("annotations-unfocused"))}}startDrawAnnotation(){this.toggleAllAnnotations(!1),this._drawingAnnotation=[],this._drawingMoves=0,this._myMarkers.addMarker({id:ed,polygon:[{yaw:0,pitch:0},{yaw:0,pitch:0},{yaw:0,pitch:0}],svgStyle:{fill:rd,stroke:nd,strokeWidth:"2px"},visible:!1}),this._myMarkers.addMarker({id:Ju,circle:5,position:{yaw:0,pitch:0},style:{cursor:"pointer"},svgStyle:{fill:id,stroke:td,strokeWidth:"3px"}}),this._myMarkers.addMarker({id:_h,circle:5,position:{yaw:0,pitch:0},style:{cursor:"pointer"},svgStyle:{fill:id,stroke:td,strokeWidth:"3px"},visible:!1});const firstMove=ae=>{const ue=this.getPositionFromEvent(ae);ue&&this._myMarkers.markers[Ju]&&(this._myMarkers.updateMarker({id:Ju,position:ue,style:{cursor:"grab"}}),2==this._drawingAnnotation.length&&this._myMarkers.markers[ed]&&this._myMarkers.updateMarker({id:ed,polygon:[ue,{yaw:ue.yaw,pitch:this._drawingAnnotation[1].pitch},this._drawingAnnotation[1],{yaw:this._drawingAnnotation[1].yaw,pitch:ue.pitch}]}))},secMove=ae=>{const ue=this.getPositionFromEvent(ae);ue&&this._myMarkers.markers[_h]&&(this._myMarkers.updateMarker({id:_h,position:ue,style:{cursor:"grab"}}),this._drawingAnnotation.length>=1&&this._myMarkers.markers[ed]&&this._myMarkers.updateMarker({id:ed,polygon:[this._drawingAnnotation[0],{yaw:this._drawingAnnotation[0].yaw,pitch:ue.pitch},ue,{yaw:ue.yaw,pitch:this._drawingAnnotation[0].pitch}]}))};this._drawListeners=[firstMove,secMove],this.parent.addEventListener("mousemove",firstMove),this._drawingMoves=1,this._drawListenerClick=ae=>{let ue=!1;if(2!==this._drawingMoves&&ae.marker.id===Ju?0==this._drawingAnnotation.length?(this._drawingAnnotation.push({yaw:ae.marker.config.position.yaw,pitch:ae.marker.config.position.pitch}),this.parent.removeEventListener("mousemove",firstMove),this._myMarkers.updateMarker({id:Ju,style:{cursor:"pointer"}}),this._myMarkers.updateMarker({id:_h,visible:!0,position:{yaw:ae.marker.config.position.yaw,pitch:ae.marker.config.position.pitch}}),this._myMarkers.updateMarker({id:ed,visible:!0}),this.parent.addEventListener("mousemove",secMove),this._drawingMoves=2):0===this._drawingMoves?(this.parent.addEventListener("mousemove",firstMove),this._drawingMoves=1):(this._drawingAnnotation[0]={yaw:ae.marker.config.position.yaw,pitch:ae.marker.config.position.pitch},this.parent.removeEventListener("mousemove",firstMove),this._myMarkers.updateMarker({id:Ju,style:{cursor:"pointer"}}),this._drawingMoves=0,ue=!0):1!==this._drawingMoves&&ae.marker.id===_h&&(1==this._drawingAnnotation.length?(this._drawingAnnotation.push({yaw:ae.marker.config.position.yaw,pitch:ae.marker.config.position.pitch}),this.parent.removeEventListener("mousemove",secMove),this._myMarkers.updateMarker({id:_h,style:{cursor:"pointer"}}),this._drawingMoves=0,ue=!0):2===this._drawingMoves?(this._drawingAnnotation[1]={yaw:ae.marker.config.position.yaw,pitch:ae.marker.config.position.pitch},this.parent.removeEventListener("mousemove",secMove),this._myMarkers.updateMarker({id:_h,style:{cursor:"pointer"}}),this._drawingMoves=0,ue=!0):(this.parent.addEventListener("mousemove",secMove),this._drawingMoves=2)),ue){var nt,ut;const ae=this.dataHelper.sphericalCoordsToTextureCoords(this._drawingAnnotation[0]),ue=this.dataHelper.sphericalCoordsToTextureCoords(this._drawingAnnotation[1]);let qt=[ae.textureX,ae.textureY,ue.textureX,ue.textureY];const Yt=null===(nt=this.getPictureMetadata())||void 0===nt||null===(ut=nt.panorama)||void 0===ut?void 0:ut.cropData;if(Yt&&(qt[0]-=Yt.croppedX,qt[1]-=Yt.croppedY,qt[2]-=Yt.croppedX,qt[3]-=Yt.croppedY,(qt[0]<0||qt[0]>Yt.croppedWidth||qt[1]<0||qt[1]>Yt.croppedHeight||qt[2]<0||qt[2]>Yt.croppedWidth||qt[3]<0||qt[3]>Yt.croppedHeight)&&(qt=null)),qt[0]>=qt[2]&&qt[1]>=qt[3]){let ae=qt[0],ue=qt[2],nt=qt[1];qt=[ue,qt[3],ae,nt]}const Xt=new CustomEvent("annotation-drawn",{detail:{shape:qt}});this.dispatchEvent(Xt)}},this._myMarkers.addEventListener("select-marker",this._drawListenerClick)}fixDrawAnnotation(){[Ju,_h].forEach((ae=>{try{this._myMarkers.removeMarker(ae)}catch(ue){}})),(this._drawListeners||[]).forEach((ae=>this.parent.removeEventListener("mousemove",ae))),this._myMarkers.removeEventListener("select-marker",this._drawListenerClick),this._myMarkers.updateMarker({id:ed,svgStyle:{stroke:"var(--red)",strokeWidth:"3px",fill:"var(--red-transparent)",cursor:"pointer"}}),this._drawingMoves=0}stopDrawAnnotation(){[Ju,_h,ed].forEach((ae=>{try{this._myMarkers.removeMarker(ae)}catch(ue){}})),(this._drawListeners||[]).forEach((ae=>this.parent.removeEventListener("mousemove",ae))),this._myMarkers.removeEventListener("select-marker",this._drawListenerClick),delete this._drawingMoves,this._drawingAnnotation=null}getPositionFromEvent(ae){const ue=this.container.getBoundingClientRect(),nt=ae.clientX-ue.left,ut=ae.clientY-ue.top,qt=this.renderer.getIntersections({x:nt,y:ut}).find((ae=>ae.object.userData[ys.aH.VIEWER_DATA]));if(qt)return this.dataHelper.vector3ToSphericalCoords(qt.point)}forceRefresh(){var ae;const ue=this._myVTour.getCurrentNode();if(ue&&ue.panorama.baseUrl!==(null===ue||void 0===ue||null===(ae=ue.panorama)||void 0===ae?void 0:ae.origBaseUrl)){const ae=this.getZoomLevel(),nt=this.getPosition();this._myVTour.state.currentNode=null,this._myVTour.setCurrentNode(ue.id,{zoomTo:ae,rotateTo:nt,fadeIn:!1,speed:0,rotation:!1})}ue&&ue.panorama.rows>1&&this.adapter.__refresh()}}},4374:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>Popup});var ut=nt(4542),qt=nt(5995),Yt=nt(8591),Xt=nt(6627);class Popup extends ut.WF{constructor(){super(),this.visible=!1}connectedCallback(){super.connectedCallback(),this.addEventListener("click",(ae=>{ae.target===this&&this.close()})),document.addEventListener("keyup",(ae=>{"Escape"===ae.key&&this.visible&&this.close()}))}attributeChangedCallback(ae,ue,nt){super.attributeChangedCallback(ae,ue,nt),"visible"==ae&&(""!==nt&&!0!==nt||this.dispatchEvent(new Event("open")))}close(){this.visible=!1,this.dispatchEvent(new Event("close"))}render(){return ut.qy`
2149
+ `,Loader.properties={_mode:{state:!0},_label:{state:!0},_isLabelFun:{state:!0},visible:{type:Boolean,reflect:!0},"no-label":{type:Boolean},value:{type:Number}},customElements.define("pnx-loader",Loader)},5642:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>Map});nt(3041);var ut=nt(8340),qt=nt(7343),Yt=nt(6883),Xt=nt(270),ys=nt(6462),Ec=nt(9740),lu=nt(4005),uu=(nt(6795),nt(927)),_u=nt.n(uu),vu=nt(2968),wu=nt.n(vu),Hu=nt(748);_u().workerClass=wu(),_u().addProtocol("pmtiles",(new Hu.Zs).tile);class Map extends _u().Map{constructor(ae,ue){let nt=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};var qt;(super({container:ue,style:(0,ut.combineStyles)(ae,nt),center:[0,0],zoom:0,maxZoom:24,attributionControl:!1,dragRotate:!1,pitchWithRotate:!1,touchZoomRotate:!0,touchPitch:!1,doubleClickZoom:!1,canvasContextAttributes:{preserveDrawingBuffer:!ae.isWidthSmall()},transformRequest:ae.api._getMapRequestTransform(),locale:ae._t.maplibre,hash:!1,...nt}),_u().addProtocol("sem",new lu.A(ae.api).tile()),this._loadMarkerImages(),this._parent=ae,this._options=nt,this.getContainer().classList.add("pnx-map"),void 0===nt.touchZoomRotate)&&(null===this||void 0===this||null===(qt=this.touchZoomRotate)||void 0===qt||qt.disableRotation());this._options.raster&&(this._options.background=this._options.background||"streets"),this._attribution=new(_u().AttributionControl)({compact:!1,...nt.attributionControl}),this.addControl(this._attribution),this._initMapPosition(),this._picMarker=this._getPictureMarker(),this._picMarkerPreview=this._getPictureMarker(!1),this._picThumbUrl={},this._seqPictures={},this._userLayers=new Set,this._parent.addEventListener("select",this.reloadLayersStyles.bind(this)),setTimeout((()=>{var ae;!this.loaded()&&null!==(ae=this._parent)&&void 0!==ae&&ae.loader.isVisible()&&this._parent.loader.dismiss({},this._parent._t.map.slow_loading,(async()=>{await this._postLoad(),this._parent.loader.dismiss()}))}),15e3),this.waitForEnoughMapLoaded().then((async()=>await this._postLoad()))}async _postLoad(){this.resize(),await this.setVisibleUsers(this._parent.users),this.reloadLayersStyles(),this.fire("ready")}destroy(){this.remove(),delete this._parent,delete this._options,delete this._attribution,delete this._picMarker,delete this._picMarkerPreview,delete this._picThumbUrl,delete this._seqPictures,delete this._userLayers}waitForEnoughMapLoaded(){return new Promise((ae=>{let ue=0,nt=0,ut=0,qt=0;const onSourceDataLoading=ae=>{"source"===ae.dataType&&ae.tile&&(ae.sourceId.startsWith("geovisio")?nt++:ue++)},onSourceData=ae=>{"source"===ae.dataType&&ae.tile&&(ae.sourceId.startsWith("geovisio")?(qt++,ae.isSourceLoaded&&(qt=nt)):(ut++,ae.isSourceLoaded&&(ut=ue))),checkEnoughLoaded()},checkEnoughLoaded=()=>{ut/ue>=.75&&(0===nt||qt/nt>=.75)&&(this.off("sourcedata",onSourceData),this.off("sourcedataloading",onSourceDataLoading),ae())};this.on("sourcedataloading",onSourceDataLoading),this.on("sourcedata",onSourceData)}))}_initMapPosition(){!(0,ut.isNullCoordinates)(this._options.center)||this._options.zoom&&0!==this._options.zoom||this._options.hash||this._parent.onceAPIReady().then((()=>{var ae,ue;let nt=null===(ae=this._parent)||void 0===ae||null===(ue=ae.api)||void 0===ue?void 0:ue.getDataBbox();if(nt)try{nt=new(_u().LngLatBounds)(nt),this.loaded()?this.fitBounds(nt,{animate:!1}):this.waitForEnoughMapLoaded().then((()=>this.fitBounds(nt,{animate:!1})))}catch(ut){console.warn("Received invalid bbox: "+nt)}}))}_loadMarkerImages(){[{id:"pnx-marker",img:Yt},{id:"pnx-arrow-flat",img:ys},{id:"pnx-arrow-360",img:Ec}].forEach((ae=>{const ue=new Image(64,64);ue.onload=()=>this.addImage(ae.id,ue),ue.src=ae.img}))}_hasQualityScore(){var ae,ue,nt,ut;const qt=(null===(ae=this.getStyle())||void 0===ae||null===(ue=ae.metadata)||void 0===ue?void 0:ue["panoramax:fields"])||{};return(null===qt||void 0===qt||null===(nt=qt.pictures)||void 0===nt?void 0:nt.includes("gps_accuracy"))&&(null===qt||void 0===qt||null===(ut=qt.pictures)||void 0===ut?void 0:ut.includes("h_pixel_density"))}_hasGridStats(){var ae,ue,nt,ut,qt,Yt;const Xt=(null===(ae=this.getStyle())||void 0===ae||null===(ue=ae.metadata)||void 0===ue?void 0:ue["panoramax:fields"])||{};return(null===Xt||void 0===Xt||null===(nt=Xt.grid)||void 0===nt?void 0:nt.includes("nb_360_pictures"))&&(null===Xt||void 0===Xt||null===(ut=Xt.grid)||void 0===ut?void 0:ut.includes("nb_flat_pictures"))&&(null===Xt||void 0===Xt||null===(qt=Xt.grid)||void 0===qt?void 0:qt.includes("coef_360_pictures"))&&(null===Xt||void 0===Xt||null===(Yt=Xt.grid)||void 0===Yt?void 0:Yt.includes("coef_flat_pictures"))}_hasLoggedGridStats(){var ae,ue,nt,ut,qt;const Yt=(null===(ae=this.getStyle())||void 0===ae||null===(ue=ae.metadata)||void 0===ue?void 0:ue["panoramax:fields"])||{};return(null===Yt||void 0===Yt||null===(nt=Yt.grid)||void 0===nt?void 0:nt.includes("logged_coef_360_pictures"))&&(null===Yt||void 0===Yt||null===(ut=Yt.grid)||void 0===ut?void 0:ut.includes("logged_coef_flat_pictures"))&&(null===Yt||void 0===Yt||null===(qt=Yt.grid)||void 0===qt?void 0:qt.includes("logged_coef"))}reloadVectorTiles(){[...this._userLayers].forEach((ae=>{const ue=this.getSource((0,ut.getUserSourceId)(ae));ue.setTiles(ue.tiles)}))}hasTwoBackgrounds(){return void 0!==this.getLayer(ut.RASTER_LAYER_ID)}getBackground(){if(!this.getLayer(ut.RASTER_LAYER_ID))return"streets";return"visible"==this.getLayoutProperty(ut.RASTER_LAYER_ID,"visibility")?"aerial":"streets"}setBackground(ae){if(!this.getLayer(ut.RASTER_LAYER_ID)&&"aerial"===ae)throw new Error("No aerial imagery available");this.getLayer(ut.RASTER_LAYER_ID)&&(this.setLayoutProperty(ut.RASTER_LAYER_ID,"visibility","aerial"===ae?"visible":"none"),this.fire("background-changed",{background:ae||"streets"}))}getVisibleUsers(){return[...this._userLayers].filter((ae=>this.getLayer((0,ut.getUserLayerId)(ae,"pictures"))&&"visible"===this.getLayoutProperty((0,ut.getUserLayerId)(ae,"pictures"),"visibility")))}onceLayerReady(ae){return this.getLayer(ae)?Promise.resolve():new Promise((ae=>{setTimeout(ae,250)})).then((()=>this.onceLayerReady(ae)))}async setVisibleUsers(){let ae=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];"string"===typeof ae?ae=[ae]:null===ae&&(ae=[]),await Promise.all(ae.filter((ae=>""!=ae&&!this._userLayers.has(ae))).map((ae=>(this._createPicturesTilesLayer(ae),this.onceLayerReady((0,ut.getUserLayerId)(ae,"pictures"))))));const ue=["pictures","sequences","sequences_plus","grid","pictures_symbols"];[...this._userLayers].forEach((nt=>{ue.forEach((ue=>{const qt=(0,ut.getUserLayerId)(nt,ue);this.getLayer(qt)&&this.setLayoutProperty(qt,"visibility",ae.includes(nt)?"visible":"none")}))})),this.reloadLayersStyles(),this.fire("users-changed",{usersIds:ae})}filterUserLayersContent(ae,ue){[...this._userLayers].forEach((nt=>{this.getLayer((0,ut.getUserLayerId)(nt,ae))?(this.setFilter((0,ut.getUserLayerId)(nt,ae),ue),"sequences"===ae&&this.getLayer((0,ut.getUserLayerId)(nt,"sequences_plus"))&&this.setFilter((0,ut.getUserLayerId)(nt,"sequences_plus"),ue),"pictures"===ae&&this.getLayer((0,ut.getUserLayerId)(nt,"pictures_symbols"))&&this.setFilter((0,ut.getUserLayerId)(nt,"pictures_symbols"),ue)):console.warn("Layer",(0,ut.getUserLayerId)(nt,ae),"not ready")}))}displayPictureMarker(ae,ue,nt){let qt=arguments.length>3&&void 0!==arguments[3]&&arguments[3],Yt=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;this._picMarkerPreview.remove(),void 0!==ae&&void 0!==ue?(this._picMarker.setLngLat([ae,ue]).setRotation(nt).addTo(this),this._picMarker.picId=Yt):this._picMarker.remove(),this.reloadLayersStyles(),qt||void 0===ae||void 0===ue||this.jumpTo({center:[ae,ue],zoom:this.getZoom()<ut.TILES_PICTURES_ZOOM+2?ut.TILES_PICTURES_ZOOM+2:this.getZoom()})}reloadLayersStyles(){const updateStyle=(ae,ue)=>{[...this._userLayers].forEach((nt=>{const qt=(0,ut.getUserLayerId)(nt,ae);if(this.getLayer(qt)){for(let ae in ue.layout)this.setLayoutProperty(qt,ae,ue.layout[ae]);for(let ae in ue.paint)this.setPaintProperty(qt,ae,ue.paint[ae])}else console.warn("Layer",qt,"not ready")}))};["pictures","pictures_symbols","sequences"].forEach((ae=>{updateStyle(ae,this._getLayerStyleProperties(ae))}))}async _createPicturesTilesLayer(ae){this._userLayers.add(ae);const ue=this.getStyle().layers.find(ut.isLabelLayer);if("geovisio"!==ae&&!this.getSource(`geovisio_${ae}`)){const nt=await this._parent.api.getUserMapStyle(ae);Object.entries(nt.sources).forEach((ae=>{let[ue,nt]=ae;return this.addSource(ue,nt)})),nt.layers=nt.layers||[];nt.layers.concat((0,ut.getMissingLayerStyles)(nt.sources,nt.layers)).filter((ae=>Object.keys(ae).length>0)).forEach((ae=>this.addLayer(ae,null===ue||void 0===ue?void 0:ue.id)))}this._picPreviewTimer=null,this._picPopup=new(_u().Popup)({closeButton:!1,closeOnClick:!this._parent.isWidthSmall(),offset:3}),this._picPopup.on("close",(()=>{delete this._picPopup._picId}));const nt=(0,ut.getUserLayerId)(ae,"pictures");this.on("mousemove",nt,(ae=>{this.getCanvas().style.cursor="pointer";const ue=Object.assign({},ae);clearTimeout(this._picPreviewTimer),this._picPreviewTimer=setTimeout((()=>this._attachPreviewToPictures(ue,nt)),100)})),this.on("mouseleave",nt,(()=>{clearTimeout(this._picPreviewTimer),this.getCanvas().style.cursor="",this._picPopup._picId,this._picPopup.remove()})),this.on("click",nt,this._onPictureClick.bind(this));const qt=(0,ut.getUserLayerId)(ae,"sequences_plus");this.on("mousemove",qt,(ae=>{if(this._onSequenceHover(ae),this.getZoom()<=ut.TILES_PICTURES_ZOOM+1&&(this.getCanvas().style.cursor="pointer",ae.features[0].properties.id)){const ue=Object.assign({},ae);clearTimeout(this._picPreviewTimer),this._picPreviewTimer=setTimeout((()=>this._attachPreviewToPictures(ue,qt)),100)}})),this.on("mouseleave",qt,(()=>{clearTimeout(this._picPreviewTimer),this.getCanvas().style.cursor="",this._picPopup._picId,this._picPopup.remove()})),this.on("click",qt,(ae=>{ae.preventDefault(),this.getZoom()<=ut.TILES_PICTURES_ZOOM+1&&this._onSequenceClick(ae)})),"geovisio"===ae&&this.getLayer("geovisio_grid")&&(this.on("mousemove","geovisio_grid",(ae=>{if(this.getZoom()<=ut.TILES_PICTURES_ZOOM+1){this.getCanvas().style.cursor="pointer";const ue=Object.assign({},ae);clearTimeout(this._picPreviewTimer),this._picPreviewTimer=setTimeout((()=>this._attachPreviewToPictures(ue,"geovisio_grid")),100)}})),this.on("mouseleave","geovisio_grid",(()=>{clearTimeout(this._picPreviewTimer),this.getCanvas().style.cursor="",this._picPopup._picId,this._picPopup.remove()})),this.on("click","geovisio_grid",(ae=>{ae.preventDefault(),this.flyTo({center:ae.lngLat,zoom:ut.TILES_PICTURES_ZOOM-6})}))),this.on("click",(ae=>{!1===ae.defaultPrevented&&(clearTimeout(this._picPreviewTimer),this._picPopup.remove())}))}_getLayerStyleProperties(ae){if("pictures_symbols"===ae)return{paint:{},layout:{"icon-image":["case",["==",["get","id"],this._parent.picture],"",["==",["get","type"],"equirectangular"],"pnx-arrow-360","pnx-arrow-flat"],"symbol-sort-key":this._getLayerSortStyle(ae)}};{const ue={pictures:"circle",sequences:"line"};return{paint:Object.assign({[`${ue[ae]}-color`]:this._getLayerColorStyle(ae)},ut.VECTOR_STYLES[ae.toUpperCase()].paint),layout:Object.assign({[`${ue[ae]}-sort-key`]:this._getLayerSortStyle(ae)},ut.VECTOR_STYLES[ae.toUpperCase()].layout)}}}_getLayerColorStyle(ae){const ue=["case",["==",["get","hidden"],!0],qt.COLORS.HIDDEN,["==",["get","geovisio:status"],"hidden"],qt.COLORS.HIDDEN],nt=this._parent.sequence;return"sequences"==ae&&nt?ue.push(["==",["get","id"],nt],qt.COLORS.SELECTED):ae.startsWith("pictures")&&nt&&ue.push(["in",nt,["get","sequences"]],qt.COLORS.SELECTED),ue.push(qt.COLORS.BASE),ue}_getLayerSortStyle(ae){const ue=["case",["==",["get","hidden"],!0],90],nt=this._parent.sequence;return"sequences"==ae&&nt?ue.push(["==",["get","id"],nt],100):ae.startsWith("pictures")&&nt&&ue.push(["in",nt,["get","sequences"]],100),ue.push(10),ue}_attachPreviewToPictures(ae,ue){let nt=ae.features.pop();if(!nt||nt.properties.id==this._picPopup._picId)return;let qt=null;if(ue.endsWith("pictures")?qt=nt.geometry.coordinates.slice():ae.lngLat&&(qt=[ae.lngLat.lng,ae.lngLat.lat]),!qt){const ae="LineString"===nt.geometry.type?[nt.geometry.coordinates]:nt.geometry.coordinates;let ue=null;const ut=this.getBounds(),Yt=ut.getCenter();for(let nt=0;nt<ae.length;nt++)for(let Xt=0;Xt<ae[nt].length;Xt++)if(ut.contains(ae[nt][Xt])){let ut=Yt.distanceTo(new(_u().LngLat)(...ae[nt][Xt]));(null===ue||ut<ue)&&(qt=ae[nt][Xt],ue=ut)}if(!qt)return}this._picPopup.setLngLat(qt).addTo(this),this._picThumbUrl[nt.properties.id]||this._picPopup.setDOMContent((0,ut.getThumbGif)(this._parent._t)),this._picPopup._loading=nt.properties.id,this._picPopup._picId=nt.properties.id;const displayThumb=ae=>{if(this._picPopup._loading===nt.properties.id)if(delete this._picPopup._loading,ae){let ue=document.createElement("img");ue.classList.add("pnx-map-thumb"),ue.alt=this._parent._t.map.thumbnail;let ut=new Image;if(ut.src=ae,ut.addEventListener("load",(()=>{nt.properties.hidden?ue.children[0].src=ut.src:ue.src=ut.src,this._picPopup.setDOMContent(ue)})),nt.properties.hidden){const ae=document.createElement("div");ae.classList.add("pnx-map-thumb-legend"),ae.appendChild(document.createTextNode(this._parent._t.map.not_public));const nt=document.createElement("div");nt.appendChild(ue),nt.appendChild(ae),ue=nt}}else this._picPopup.remove()};ue.endsWith("pictures")?this._getPictureThumbURL(nt.properties.id).then(displayThumb):ue.endsWith("grid")?this._getThumbURL(qt).then(displayThumb):this._getSequenceThumbURL(nt.properties.id,new(_u().LngLat)(...qt)).then(displayThumb)}_getThumbURL(ae){return this._parent.api.getPicturesAroundCoordinates(ae[1],ae[0],.1,1).then((ae=>{var ue;const nt=null===ae||void 0===ae||null===(ue=ae.features)||void 0===ue?void 0:ue.pop();return nt?this._parent.api.findThumbnailInPictureFeature(nt):null}))}_getSequenceThumbURL(ae,ue){return ue?this._parent.api.getPicturesAroundCoordinates(ue.lat,ue.lng,1,1,ae).then((ue=>{var nt;return(null===ue||void 0===ue||null===(nt=ue.features)||void 0===nt?void 0:nt.length)>0?this._parent.api.findThumbnailInPictureFeature(ue.features[0]):this._parent.api.getPictureThumbnailURLForSequence(ae)})):this._parent.api.getPictureThumbnailURLForSequence(ae)}_getPictureThumbURL(ae,ue){let nt=null;return ae&&(void 0!==this._picThumbUrl[ae]?nt="string"===typeof this._picThumbUrl[ae]?Promise.resolve(this._picThumbUrl[ae]):this._picThumbUrl[ae]:(this._picThumbUrl[ae]=this._parent.api.getPictureThumbnailURL(ae,ue).then((ue=>ue?(this._picThumbUrl[ae]=ue,ue):(this._picThumbUrl[ae]=null,null))).catch((()=>{this._picThumbUrl[ae]=null})),nt=this._picThumbUrl[ae])),nt}_getPictureMarker(){let ae=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];const ue=document.createElement("img");return ue.src=ae?Xt:Yt,ue.alt="",new(_u().Marker)({element:ue,picId:null}).setDraggable(ae&&this._options.picMarkerDraggable)}_onSequenceHover(ae){var ue;ae.preventDefault(),ae.features.length>0&&null!==(ue=ae.features[0].properties)&&void 0!==ue&&ue.id&&this.fire("sequence-hover",{seqId:ae.features[0].properties.id})}_onSequenceClick(ae){var ue,nt;ae.preventDefault(),"pic"!==(null===(ue=this._parent.psv)||void 0===ue?void 0:ue.getPicturesNavigation())&&ae.features.length>0&&null!==(nt=ae.features[0].properties)&&void 0!==nt&&nt.id&&this.fire("sequence-click",{seqId:ae.features[0].properties.id,coordinates:ae.lngLat})}_onPictureClick(ae){var ue,nt,ut;if(ae.preventDefault(),"pic"===(null===(ue=this._parent.psv)||void 0===ue?void 0:ue.getPicturesNavigation()))return;const qt=this.queryRenderedFeatures(ae.point);if(qt.length>1&&qt.find((ae=>{var ue;return null===ae||void 0===ae||null===(ue=ae.source)||void 0===ue?void 0:ue.startsWith("sem-")})))return;const Yt=(null===ae||void 0===ae||null===(nt=ae.features)||void 0===nt?void 0:nt.length)>0?ae.features[0]:null;if(null!==Yt&&void 0!==Yt&&null!==(ut=Yt.properties)&&void 0!==ut&&ut.id){let ue=null;try{Yt.properties.sequences&&(Array.isArray(Yt.properties.sequences)||(Yt.properties.sequences=JSON.parse(Yt.properties.sequences)),ue=Yt.properties.sequences.pop())}catch(ae){console.log("Sequence ID is not available in vector tiles for picture "+Yt.properties.id)}this.fire("picture-click",{picId:Yt.properties.id,seqId:ue,feature:Yt})}}addEventListener(ae,ue){let nt=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};null!==nt&&void 0!==nt&&nt.once?this.once(ae,ue):this.on(ae,ue)}}},2771:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>MapMore,T:()=>Ec});var ut=nt(5642),qt=nt(7343),Yt=nt(8340),Xt=nt(2283),ys=nt(4005);const Ec=["minDate","maxDate","pic_type","camera","theme","qualityscore","gps"];class MapMore extends ut.A{constructor(ae,ue){super(ae,ue,arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}),this._mapFilters={},this._options.theme&&(this._mapFilters={theme:this._options.theme})}async _postLoad(){Xt.SEMANTICS_OVERLAYS.forEach((ae=>this.addSemanticOverlay(...ae))),await super._postLoad()}reloadLayersStyles(){if(super.reloadLayersStyles(),this._hasGridStats()){let ae="coef";this._mapFilters.pic_type&&(ae="flat"==this._mapFilters.pic_type?"coef_flat_pictures":"coef_360_pictures",this._hasLoggedGridStats()&&(0,qt.getUserAccount)()&&(ae="logged_"+ae)),this.getStyle().layers.filter((ae=>ae.id.endsWith("_grid"))).forEach((ue=>{const nt=(0,Yt.switchCoefValue)(ue,ae);console.log(nt);for(let ae in nt.layout)this.setLayoutProperty(ue.id,ae,nt.layout[ae]);for(let ae in nt.paint)this.setPaintProperty(ue.id,ae,nt.paint[ae])}))}}_getDatesForLayerColors(){const ae=864e5,ue=Date.now();return[ue-30*ae,ue-365*ae,ue-730*ae].map((ae=>new Date(ae).toISOString().split("T")[0]))}_getLayerColorStyle(ae){var ue,nt,ut,Xt,ys,Ec,lu,uu;const _u=["case",["==",["get","hidden"],!0],qt.COLORS.HIDDEN],vu=(null===(ue=this._parent.psv)||void 0===ue||null===(nt=ue._myVTour)||void 0===nt||null===(ut=nt.state)||void 0===ut?void 0:ut.loadingNode)||(null===(Xt=this._parent.psv)||void 0===Xt||null===(ys=Xt._myVTour)||void 0===ys||null===(Ec=ys.state)||void 0===Ec||null===(lu=Ec.currentNode)||void 0===lu?void 0:lu.id),wu=vu?null===(uu=this._parent.psv)||void 0===uu?void 0:uu._picturesSequences[vu]:null;if("sequences"==ae&&wu?_u.push(["==",["get","id"],wu],qt.COLORS.SELECTED):"pictures"==ae&&wu&&_u.push(["in",wu,["get","sequences"]],qt.COLORS.SELECTED),this._mapFilters.theme==Yt.MAP_THEMES.AGE){const ue="sequences"==ae?"date":"ts",nt=this._getDatesForLayerColors();_u.push(["!",["has",ue]],qt.COLORS.BASE,[">=",["get",ue],nt[0]],qt.COLORS.PALETTE_4,[">=",["get",ue],nt[1]],qt.COLORS.PALETTE_3,[">=",["get",ue],nt[2]],qt.COLORS.PALETTE_2,qt.COLORS.PALETTE_1)}else this._mapFilters.theme==Yt.MAP_THEMES.TYPE?_u.push(["!",["has","type"]],qt.COLORS.BASE,["==",["get","type"],"equirectangular"],qt.COLORS.QUALI_1,qt.COLORS.QUALI_2):this._mapFilters.theme==Yt.MAP_THEMES.SCORE?_u.push(["==",Yt.MAP_EXPR_QUALITYSCORE,5],qt.QUALITYSCORE_VALUES[0].color,["==",Yt.MAP_EXPR_QUALITYSCORE,4],qt.QUALITYSCORE_VALUES[1].color,["==",Yt.MAP_EXPR_QUALITYSCORE,3],qt.QUALITYSCORE_VALUES[2].color,["==",Yt.MAP_EXPR_QUALITYSCORE,2],qt.QUALITYSCORE_VALUES[3].color,qt.QUALITYSCORE_VALUES[4].color):this._mapFilters.theme==Yt.MAP_THEMES.GPS?_u.push(["==",Yt.MAP_EXPR_QUALITYSCORE_GPS,5],qt.GPS_VALUES[0].color,["==",Yt.MAP_EXPR_QUALITYSCORE_GPS,4],qt.GPS_VALUES[1].color,["==",Yt.MAP_EXPR_QUALITYSCORE_GPS,3],qt.GPS_VALUES[2].color,["==",Yt.MAP_EXPR_QUALITYSCORE_GPS,2],qt.GPS_VALUES[3].color,qt.GPS_VALUES[4].color):_u.push(qt.COLORS.BASE);return _u}_getLayerSortStyle(ae){var ue,nt,ut,qt,Xt,ys,Ec,lu;const uu=["case",["==",["get","hidden"],!0],90],_u=(null===(ue=this._parent.psv)||void 0===ue||null===(nt=ue._myVTour)||void 0===nt||null===(ut=nt.state)||void 0===ut?void 0:ut.loadingNode)||(null===(qt=this._parent.psv)||void 0===qt||null===(Xt=qt._myVTour)||void 0===Xt||null===(ys=Xt.state)||void 0===ys||null===(Ec=ys.currentNode)||void 0===Ec?void 0:Ec.id),vu=_u?null===(lu=this._parent.psv)||void 0===lu?void 0:lu._picturesSequences[_u]:null;if("sequences"==ae&&vu?uu.push(["==",["get","id"],vu],100):"pictures"==ae&&vu&&uu.push(["in",vu,["get","sequences"]],100),this._mapFilters.theme==Yt.MAP_THEMES.AGE){const ue="sequences"==ae?"date":"ts",nt=this._getDatesForLayerColors();uu.push(["!",["has",ue]],0,[">=",["get",ue],nt[0]],50,[">=",["get",ue],nt[1]],49,[">=",["get",ue],nt[2]],48)}else this._mapFilters.theme==Yt.MAP_THEMES.TYPE?uu.push(["!",["has","type"]],0,["==",["get","type"],"equirectangular"],50):this._mapFilters.theme==Yt.MAP_THEMES.SCORE?uu.push(["==",Yt.MAP_EXPR_QUALITYSCORE,5],80,["==",Yt.MAP_EXPR_QUALITYSCORE,4],65,["==",Yt.MAP_EXPR_QUALITYSCORE,3],50,["==",Yt.MAP_EXPR_QUALITYSCORE,2],35,["==",Yt.MAP_EXPR_QUALITYSCORE,1],20):this._mapFilters.theme==Yt.MAP_THEMES.GPS&&uu.push(["==",Yt.MAP_EXPR_QUALITYSCORE_GPS,5],80,["==",Yt.MAP_EXPR_QUALITYSCORE_GPS,4],65,["==",Yt.MAP_EXPR_QUALITYSCORE_GPS,3],50,["==",Yt.MAP_EXPR_QUALITYSCORE_GPS,2],35,["==",Yt.MAP_EXPR_QUALITYSCORE_GPS,1],20);return uu.push(10),uu}setFilters(ae){let ue=arguments.length>1&&void 0!==arguments[1]&&arguments[1],{mapFilters:nt,mapSeqFilters:ut,mapPicFilters:qt,reloadMapStyle:Xt}=(0,Yt.mapFiltersToLayersFilters)(ae,this._hasGridStats());this._mapFilters=nt,Xt&&this.reloadLayersStyles();const ys=this.getVisibleUsers().includes("geovisio");ut&&ys&&(ut=["step",["zoom"],!0,7,ut]),this.filterUserLayersContent("sequences",ut),this.filterUserLayersContent("pictures",qt),!ue&&(null!==ut||null!==qt||null!==this._mapFilters.theme&&this._mapFilters.theme!==Yt.MAP_THEMES.DEFAULT)&&ys&&this.getZoom()<7&&!this._hasGridStats()&&this.easeTo({zoom:7}),this.fire("filters-changed",Object.assign({},this._mapFilters))}async setVisibleUsers(){let ae=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];await super.setVisibleUsers(ae);let{mapSeqFilters:ue,mapPicFilters:nt,reloadMapStyle:ut}=(0,Yt.mapFiltersToLayersFilters)(this._mapFilters,this._hasGridStats());ut&&this.reloadLayersStyles();const qt=ae.includes("geovisio");ue&&qt&&(ue=["step",["zoom"],!0,7,ue]),this.filterUserLayersContent("sequences",ue),this.filterUserLayersContent("pictures",nt)}addSemanticOverlay(ae,ue,nt){let ut=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};Object.entries(ut||{}).forEach((ae=>{let[ue,nt]=ae;return this.addSprite(ue,nt)}));const qt="sem-"+ae;this.addSource(qt,{type:"vector",tiles:[`sem:///${ue}/{z}/{x}/{y}`],minzoom:ys.d,maxzoom:ys.d}),this.addLayer({id:ae,source:qt,"source-layer":"layer",...nt}),this.on("click",ae,(ae=>{var ue;if(ae.preventDefault(),(null===ae||void 0===ae||null===(ue=ae.features)||void 0===ue?void 0:ue.length)>0){const ue=ae.features[0];this._parent.select(ue.properties.seqid,ue.properties.picid),this._parent.psv.addEventListener("picture-loaded",(()=>{var ae,ue;const nt=this._parent.psv.getPictureMetadata();1===(null===(ae=nt.properties)||void 0===ae||null===(ue=ae.annotations)||void 0===ue?void 0:ue.length)&&this._parent.psv.focusOnAnnotation(nt.properties.annotations[0].id)}),{once:!0})}}))}getSemanticOverlays(){return this.getStyle().layers.filter((ae=>{var ue;return null===(ue=ae.source)||void 0===ue?void 0:ue.startsWith("sem-")}))}toggleAllSemanticOverlays(ae){this.getSemanticOverlays().forEach((ue=>this.setLayoutProperty(ue.id,"visibility",ae?"visible":"none")))}}},9048:(ae,ue,nt)=>{"use strict";nt.d(ue,{Ay:()=>Photo,LM:()=>Hu,Vf:()=>qu,cS:()=>wu});nt(5003);var ut=nt(5975),qt=nt(2305),Yt=nt(7343),Xt=nt(508),ys=(nt(3961),nt(1080),nt(2710),nt(1575),nt(1545)),Ec=nt(3348),lu=nt(4991),uu=nt(3727);const _u={baseUrl:ut,width:1280,cols:2,rows:1,tileUrl:()=>null},vu={id:Yt.BASE_PANORAMA_ID,caption:"",panorama:_u,links:[],gps:[0,0],sequence:{},sphereCorrection:{},horizontalFov:360,properties:{}},wu=30,Hu=250,qu=3e3,Ju="draw-annotation-1",_h="draw-annotation-2",ed="draw-annotation-r",td="rgb(224, 64, 251)",id="rgb(224, 64, 251, 0.5)",nd="rgb(123, 31, 162)",rd="rgba(123, 31, 162, 0.5)";ys.jM.useNewAnglesOrder=!0;class Photo extends ys.jM{constructor(ae,ue){var nt;let ut=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};super({container:ue,adapter:[uu.A,{showErrorTile:!1,baseBlur:!1,resolution:ae.isWidthSmall()?32:64,shouldGoFast:ut.shouldGoFast,useXmpData:!1}],withCredentials:ae.api._getPSVWithCredentials(),requestHeaders:null===ae||void 0===ae||null===(nt=ae["fetch-options"])||void 0===nt?void 0:nt.headers,panorama:_u,lang:ae._t.psv,minFov:5,loadingTxt:"&nbsp;",navbar:null,rendererParameters:{preserveDrawingBuffer:!ae.isWidthSmall()},plugins:[[Ec.$,{dataMode:"server",positionMode:"gps",renderMode:"3d",preload:!0,getNode:()=>{},transitionOptions:()=>{},arrowsPosition:{linkOverlapAngle:Math.PI/6}}],[lu.b,{}]],...ut}),this._parent=ae,this._options=ut,ue.classList.add("pnx-psv"),this._shouldGoFast=(null===ut||void 0===ut?void 0:ut.shouldGoFast)||(()=>!1),this._transitionDuration=(null===ut||void 0===ut?void 0:ut.transitionDuration)||Hu,this._myVTour=this.getPlugin(Ec.$),this._myVTour.datasource.nodeResolver=this._getNodeFromAPI.bind(this),this._myVTour.config.transitionOptions=this._psvNodeTransition.bind(this),this._clearArrows=this._myVTour.arrowsRenderer.clear.bind(this._myVTour.arrowsRenderer),this._myVTour.arrowsRenderer.clear=()=>{},this._myMarkers=this.getPlugin(lu.b),this._annotationsVisible=!0===this._options.displayAnnotations,this._drawingAnnotation=null,this._sequencePlaying=!1,this._picturesNavigation=this._options.picturesNavigation||"any",this._picturesSequences={},this._myVTour.addEventListener("enter-arrow",this._onEnterArrow.bind(this)),this._myVTour.addEventListener("leave-arrow",this._onLeaveArrow.bind(this)),this._myVTour.addEventListener("node-changed",this._onNodeChanged.bind(this)),this._myMarkers.addEventListener("select-marker",this._onSelectMarker.bind(this)),this.addEventListener("position-updated",this._onPositionUpdated.bind(this)),this.addEventListener("zoom-updated",this._onZoomUpdated.bind(this)),this.addEventListener("dblclick",this._onDoubleClick.bind(this)),this._parent.addEventListener("select",this._onSelect.bind(this)),this.loader.size=150,this.loader.color="rgba(61, 61, 61, 0.5)",this.loader.textColor="rgba(255, 255, 255, 0.7)",this.loader.border=5,this.loader.thickness=10,this.loader.canvas.setAttribute("viewBox","0 0 150 150"),this.loader.__updateContent(),this._options.position&&!this._parent.picture&&this.goToPosition(...this._options.position)}async _getNodeFromAPI(ae){var ue,nt;if((0,Yt.isNullId)(ae))return vu;const ut=await fetch(this._parent.api.getPictureMetadataUrl(ae,this._picturesSequences[ae]),this._parent.api._getFetchOptions());let qt=await ut.json();if(qt.features&&(qt=qt.features.pop()),!qt||0===Object.keys(qt).length||!ut.ok)throw this._parent.loader&&this._parent.loader.dismiss(!0,this._parent._t.pnx.error_pic),new Error("Picture with ID "+ae+" was not found");this._picturesSequences[ae]=qt.collection;const ys=(0,Xt.apiFeatureToPSVNode)(qt,this._parent._t,this._parent._isInternetFast,this._picturesNavFilter.bind(this),this._parent.api.cleanResourceURL.bind(this._parent.api));var Ec,lu;null!==ys&&void 0!==ys&&null!==(ue=ys.sequence)&&void 0!==ue&&ue.prevPic&&(this._picturesSequences[null===ys||void 0===ys||null===(Ec=ys.sequence)||void 0===Ec?void 0:Ec.prevPic]=qt.collection);null!==ys&&void 0!==ys&&null!==(nt=ys.sequence)&&void 0!==nt&&nt.nextPic&&(this._picturesSequences[null===ys||void 0===ys||null===(lu=ys.sequence)||void 0===lu?void 0:lu.nextPic]=qt.collection);return ys}_psvNodeTransition(ae,ue,nt){var ut,qt,Xt;let ys={};const Ec=this._shouldGoFast()?0:Math.min(Hu,this._transitionDuration),lu=Ec>100,uu=null!=(nt||(null===ue||void 0===ue?void 0:ue.links.find((ue=>ue.nodeId==ae.id)))),_u=ue&&ae.sequence.id===ue.sequence.id,vu=((null===ue||void 0===ue||null===(ut=ue.properties)||void 0===ut?void 0:ut["view:azimuth"])||0)*(Math.PI/180),qu=((null===ae||void 0===ae||null===(qt=ae.properties)||void 0===qt?void 0:qt["view:azimuth"])||0)*(Math.PI/180),Ju=(0,Yt.getRelativeHeading)(ae)*(Math.PI/180);this.setOption("maxFov",Math.min(3*ae.horizontalFov/4,90));const _h={showLoader:!1,effect:"none",speed:0,rotation:!1,rotateTo:{pitch:0,yaw:-Ju},zoomTo:wu};if(360==ae.horizontalFov)ys=ue?(0,Yt.getDistance)(ue.gps,ae.gps)>=.001?_h:{speed:Ec,effect:uu&&lu?"fade":"none",rotation:uu&&_u&&lu,rotateTo:this.getPosition()}:_h;else if(_u){const ae=this.getPosition().yaw,nt=ue.horizontalFov*(Math.PI/180)/2,ut=ae<=nt||ae>=2*Math.PI-nt,qt=Math.abs(vu-qu)<=Math.PI/4;ys={speed:Ec,effect:uu&&qt&&lu?"fade":"none",rotation:uu&&qt&&lu,rotateTo:ut?this.getPosition():{pitch:0,yaw:0},zoomTo:ut?this.getZoomLevel():wu}}else ys=Object.assign(_h,{rotateTo:{pitch:0,yaw:0}});"fade"===ys.effect&&ys.speed>=150?setTimeout(this._clearArrows,ys.speed-100):this._clearArrows();const ed=new CustomEvent("picture-loading",{detail:{...Object.assign({},this.getXYZ(),ys.rotateTo?{x:180*(qu+ys.rotateTo.yaw)/Math.PI}:null,ys.zoomTo?{z:ys.zoomTo}:null),picId:ae.id,lon:ae.gps[0],lat:ae.gps[1],first:(null===(Xt=this._parent._initParams)||void 0===Xt?void 0:Xt.getParentPostInit().picture)==ae.id}});return this.dispatchEvent(ed),ys}_onEnterArrow(ae){const ue=ae.link,nt=ae.node;let ut;nt&&(ut=360===nt.horizontalFov?(this.getPictureOriginalHeading()+180*this.getPosition().yaw/Math.PI)%360:this.getPictureOriginalHeading());const qt=new CustomEvent("picture-preview-started",{detail:{picId:ue.nodeId,coordinates:ue.gps,direction:ut}});this.dispatchEvent(qt)}_onLeaveArrow(ae){const ue=ae.link,nt=new CustomEvent("picture-preview-stopped",{detail:{picId:ue.nodeId}});this.dispatchEvent(nt)}_onPositionUpdated(ae){let{position:ue}=ae;const nt=(0,Yt.positionToXYZ)(ue,this.getZoomLevel());nt.x+=this.getPictureOriginalHeading(),nt.x=nt.x%360;const ut=new CustomEvent("view-rotated",{detail:nt});this.dispatchEvent(ut),this._onTilesStartLoading()}_onZoomUpdated(ae){let{zoomLevel:ue}=ae;const nt=new CustomEvent("view-rotated",{detail:{...this.getXY(),z:ue}});this.dispatchEvent(nt),this._onTilesStartLoading()}_onDoubleClick(){this.unfocusAnnotation(!1,!0)}_onNodeChanged(ae){for(let qt of document.getElementsByClassName("pnx-psv-tour-arrows"))qt.classList.remove("pnx-clicked");if(ae.node.id){var ue,nt,ut;const qt=(null===(ue=this._parent._initParams)||void 0===ue?void 0:ue.getParentPostInit().picture)==ae.node.id;this._parent.select(null===(nt=ae.node)||void 0===nt||null===(ut=nt.sequence)||void 0===ut?void 0:ut.id,ae.node.id);const Yt=this.getPictureMetadata();if(!Yt)return void this.dispatchEvent(new CustomEvent("picture-loaded",{detail:{}}));this._prevSequence=Yt.sequence.id;const Xt=new CustomEvent("picture-loaded",{detail:{...this.getXYZ(),picId:ae.node.id,lon:Yt.gps[0],lat:Yt.gps[1],first:qt}});this.dispatchEvent(Xt),Yt.panorama.hdUrl?(this.setOption("downloadUrl",Yt.panorama.hdUrl),this.setOption("downloadName",ae.node.id+".jpg")):this.setOption("downloadUrl",null),this._annotationsVisible&&this.toggleAllAnnotations(!0)}this._onTilesStartLoading()}_onSelectMarker(ae){var ue;if(ae.marker&&null!==(ue=ae.marker.id)&&void 0!==ue&&ue.startsWith("annotation-")){if(this.getSelectedAnnotations().find((ae=>{var ue,nt,ut;return null===(ue=this._myMarkers.markers["annotation-"+ae])||void 0===ue||null===(nt=ue.config)||void 0===nt||null===(ut=nt.data)||void 0===ut?void 0:ut.blockFocus})))return;this.focusOnAnnotation(ae.marker.data.id)}}_onTilesStartLoading(){this._tilesQueueTimer&&(clearInterval(this._tilesQueueTimer),delete this._tilesQueueTimer),this._tilesQueueTimer=setInterval((()=>{if(0===Object.keys(this.adapter.queue.tasks).length){if(this._myVTour.state.currentNode){const ae=new CustomEvent("picture-tiles-loaded",{detail:{picId:this._myVTour.state.currentNode.id}});this.dispatchEvent(ae)}clearInterval(this._tilesQueueTimer),delete this._tilesQueueTimer}}),100)}getPictureMetadata(){var ae,ue,nt;return(0,Yt.isNullId)(null===(ae=this._myVTour)||void 0===ae||null===(ue=ae.state)||void 0===ue||null===(nt=ue.currentNode)||void 0===nt?void 0:nt.id)?null:this._myVTour.state.currentNode?Object.assign({},this._myVTour.state.currentNode):null}getPictureId(){var ae,ue,nt,ut,qt;const Xt=(null===(ae=this._myVTour)||void 0===ae||null===(ue=ae.state)||void 0===ue?void 0:ue.loadingNode)||(null===(nt=this._myVTour)||void 0===nt||null===(ut=nt.state)||void 0===ut||null===(qt=ut.currentNode)||void 0===qt?void 0:qt.id);return(0,Yt.isNullId)(Xt)?null:Xt}_onSelect(ae){ae.detail.seqId&&(this._picturesSequences[ae.detail.picId]=ae.detail.seqId),ae.detail.seqId&&!ae.detail.picId?(this.loader.show(),this._parent.api.getSequenceItems(ae.detail.seqId,null,null,1).then((ue=>{var nt;if((null===ue||void 0===ue||null===(nt=ue.features)||void 0===nt?void 0:nt.length)>0){const nt=ue.features[0].id;this._picturesSequences[nt]=ae.detail.seqId,this._parent.select(ae.detail.seqId,nt)}})).catch((ae=>this.showErrorOverlay(ae,this._parent._t.pnx.error_pic,!0)))):ae.detail.picId?this.getPictureId()!==ae.detail.picId&&(this.loader.show(),this._myVTour.setCurrentNode(ae.detail.picId).catch((ae=>{this.showErrorOverlay(ae,this._parent._t.pnx.error_pic,!0)}))):(this._myVTour.setCurrentNode(null),this._myVTour.state.currentNode.id=null,this._myVTour.state.loadingNode=null)}goToNextPicture(){if(!this.getPictureMetadata())throw new Error("No picture currently selected");if("pic"==this._picturesNavigation)throw new Error("Pictures navigation is locked to current picture");const ae=this.getPictureMetadata().sequence.nextPic;if(!ae)throw new Error("No next picture available");this._parent.select(this.getPictureMetadata().sequence.id,ae)}goToPrevPicture(){if(!this.getPictureMetadata())throw new Error("No picture currently selected");if("pic"==this._picturesNavigation)throw new Error("Pictures navigation is locked to current picture");const ae=this.getPictureMetadata().sequence.prevPic;if(!ae)throw new Error("No previous picture available");this._parent.select(this.getPictureMetadata().sequence.id,ae)}async goToPosition(ae,ue){if("pic"==this._picturesNavigation)throw new Error("Pictures navigation is locked to current picture");return this._parent.api.getPicturesAroundCoordinates(ae,ue).then((ae=>{if(ae.features.length>0){const ue=ae.features.pop();return this._parent.select(null===ue||void 0===ue?void 0:ue.collection,ue.id),ue.id}return Promise.reject(new Error("No picture found nearby given coordinates"))}))}getXY(){const ae=(0,Yt.positionToXYZ)(this.getPosition());return ae.x=(ae.x+this.getPictureOriginalHeading())%360,ae}getXYZ(){const ae=this.getXY();return ae.z=this.getZoomLevel(),ae}getPictureOriginalHeading(){var ae,ue;return(null===(ae=this.getPictureMetadata())||void 0===ae||null===(ue=ae.properties)||void 0===ue?void 0:ue["view:azimuth"])||0}getPictureRelativeHeading(){return(0,Yt.getRelativeHeading)(this.getPictureMetadata())}clearPictureMetadataCache(){var ae,ue,nt,ut;const qt=null===(ae=this.getPictureMetadata())||void 0===ae?void 0:ae.id,Yt=null===(ue=this.getPictureMetadata())||void 0===ue||null===(nt=ue.sequence)||void 0===nt?void 0:nt.id;null===(ut=this._myVTour.state.currentTooltip)||void 0===ut||ut.hide(),this._myVTour.state.currentTooltip=null,this._myVTour.state.currentNode=null,this._myVTour.state.preload={},this._myVTour.datasource.nodes={},qt&&this._parent.select(Yt,qt)}setXYZ(ae,ue,nt){const ut=(0,Yt.xyzToPosition)(ae-this.getPictureOriginalHeading(),ue,nt);this.rotate({yaw:ut.yaw,pitch:ut.pitch}),this.zoom(ut.zoom)}setHigherContrast(ae){this.renderer.renderer.toneMapping=ae?3:0,this.renderer.renderer.toneMappingExposure=ae?2:1,this.needsUpdate()}getTransitionDuration(){return this._transitionDuration}setTransitionDuration(ae){if((ae=parseFloat(ae))<100||ae>qu)throw new Error("Invalid transition duration (should be between 100 and "+qu+")");this._transitionDuration=ae;const ue=new CustomEvent("transition-duration-changed",{detail:{value:ae}});this.dispatchEvent(ue)}setPanorama(ae,ue){if(ae.baseUrl.startsWith("data:"))return Promise.resolve();const onFailure=ae=>{var ue;return this.showErrorOverlay(ae,null===(ue=this._parent)||void 0===ue?void 0:ue._t.pnx.error_pic,!0)};try{return super.setPanorama(ae,ue).catch(onFailure)}catch(nt){onFailure(nt)}}showErrorOverlay(ae,ue,nt){var ut,Yt,Xt,ys;null!==(ut=this._parent)&&void 0!==ut&&ut.loader.isVisible()||!this.overlay.isVisible()?null===(Yt=this._parent)||void 0===Yt||Yt.loader.dismiss(ae,ue,nt?()=>{var ae;null===(ae=this._parent)||void 0===ae||ae.loader.dismiss(),this.overlay.hide()}:void 0):(console.error(ae),this.overlay.show({image:`<img style="width: 200px" src="${qt}" alt="" />`,title:null===(Xt=this._parent)||void 0===Xt?void 0:Xt._t.pnx.error,text:ue+"<br />"+(null===(ys=this._parent)||void 0===ys?void 0:ys._t.pnx.error_click),dissmisable:nt}))}playSequence(){this._sequencePlaying=!0,this.container.classList.add("pnx-psv-playing");const ae=new Event("sequence-playing",{bubbles:!0,composed:!0});this.dispatchEvent(ae);const nextPicturePlay=()=>{if(this._sequencePlaying){this.addEventListener("picture-loaded",(()=>{this._playTimer=setTimeout((()=>{nextPicturePlay()}),this.getTransitionDuration())}),{once:!0});try{this.goToNextPicture()}catch(ae){this.stopSequence()}}};this.addEventListener("click",(()=>this.stopSequence())),nextPicturePlay()}stopSequence(){this._sequencePlaying=!1,this.container.classList.remove("pnx-psv-playing"),this._playTimer&&(clearTimeout(this._playTimer),delete this._playTimer),this.forceRefresh();const ae=new Event("sequence-stopped",{bubbles:!0,composed:!0});this.dispatchEvent(ae)}isSequencePlaying(){return this._sequencePlaying}toggleSequencePlaying(){this.isSequencePlaying()?this.stopSequence():this.playSequence()}getPicturesNavigation(){return this._picturesNavigation}setPicturesNavigation(ae){"none"===ae&&(ae="pic"),this._picturesNavigation=ae;const ue=this.container.querySelector(".psv-virtual-tour-arrows");ue&&(ue.style.display="pic"==ae?"none":null);const nt=new CustomEvent("pictures-navigation-changed",{detail:{value:ae}});this.dispatchEvent(nt)}_picturesNavFilter(ae){switch(this._picturesNavigation){case"seq":return["next","prev"].includes(ae.rel);case"pic":case"none":return!1;default:return!0}}areAnnotationsVisible(){return this._annotationsVisible}getSelectedAnnotations(){return Object.keys(this._myMarkers.markers).filter((ae=>{var ue,nt,ut;return ae.startsWith("annotation-")&&(null===(ue=this._myMarkers.markers[ae])||void 0===ue||null===(nt=ue.config)||void 0===nt||null===(ut=nt.data)||void 0===ut?void 0:ut.selected)})).map((ae=>ae.replace("annotation-","")))}toggleAllAnnotations(ae){const ue=this.getPictureMetadata(),nt=this._annotationsVisible==ae;if(!ue)throw this._myMarkers.clearMarkers(),new Error("No picture currently selected");if(ae){var ut;let ae=ue.properties.annotations||[];0===(null===(ut=ae)||void 0===ut?void 0:ut.length)&&console.warn("No annotation available on picture",ue.id),ae=ae.map((ae=>{if(!ue.properties["pers:interior_orientation"].sensor_array_dimensions)return console.warn("Picture lacks pers:interior_orientation.sensor_array_dimensions property, can't compute marker"),null;const nt=ae.shape.coordinates.map((ae=>ae.map((ae=>{var nt;const ut=null===(nt=ue.panorama)||void 0===nt?void 0:nt.cropData,qt={textureX:ae[0]+((null===ut||void 0===ut?void 0:ut.croppedX)||0),textureY:ae[1]+((null===ut||void 0===ut?void 0:ut.croppedY)||0)};return this.dataHelper.textureCoordsToSphericalCoords(qt)}))));return{id:`annotation-${ae.id}`,polygon:nt,data:{id:ae.id},className:"pnx-psv-annotation",svgStyle:{stroke:"var(--orange)",strokeWidth:"3px",fill:"var(--orange-transparent)",cursor:"pointer"},tooltip:this._parent._t.pnx.semantics_annotation_tooltip}})),this._myMarkers.setMarkers(ae)}else this._myMarkers.clearMarkers();this._annotationsVisible=ae,nt||this.dispatchEvent(new CustomEvent("annotations-toggled",{detail:{visible:ae}}))}focusOnAnnotation(ae){let ue=arguments.length>1&&void 0!==arguments[1]&&arguments[1],nt=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const ut=this.getSelectedAnnotations();if(ae&&1===ut.length&&ut[0]===ae)return;this.areAnnotationsVisible()||this.toggleAllAnnotations(!0),this.unfocusAnnotation(!0);const qt=`annotation-${ae}`;if(this._myMarkers.markers[qt]){if(this._myMarkers.updateMarker({id:qt,svgStyle:{stroke:"var(--red)",strokeWidth:"3px",fill:"var(--red-transparent)"},data:{selected:!0,blockFocus:ue}}),this._myMarkers.gotoMarker(qt,0),this.zoom(65),!nt){const ue=new CustomEvent("annotation-focused",{detail:{annotationId:ae}});this.dispatchEvent(ue)}}else setTimeout((()=>this.focusOnAnnotation(ae,ue,nt)),100)}unfocusAnnotation(){let ae=arguments.length>0&&void 0!==arguments[0]&&arguments[0],ue=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const nt=this.getSelectedAnnotations();if(nt.length>0){let ut=0;nt.forEach((ae=>{var nt,qt,Yt;const Xt="annotation-"+ae;ue&&null!==(nt=this._myMarkers.markers[Xt])&&void 0!==nt&&null!==(qt=nt.config)&&void 0!==qt&&null!==(Yt=qt.data)&&void 0!==Yt&&Yt.blockFocus?ut++:this._myMarkers.updateMarker({id:Xt,svgStyle:{stroke:"var(--orange)",strokeWidth:"3px",fill:"var(--orange-transparent)"},data:{selected:!1,blockFocus:!1}})})),!ae&&ut<nt.length&&this.dispatchEvent(new Event("annotations-unfocused"))}}startDrawAnnotation(){this.toggleAllAnnotations(!1),this._drawingAnnotation=[],this._drawingMoves=0,this._myMarkers.addMarker({id:ed,polygon:[{yaw:0,pitch:0},{yaw:0,pitch:0},{yaw:0,pitch:0}],svgStyle:{fill:rd,stroke:nd,strokeWidth:"2px"},visible:!1}),this._myMarkers.addMarker({id:Ju,circle:5,position:{yaw:0,pitch:0},style:{cursor:"pointer"},svgStyle:{fill:id,stroke:td,strokeWidth:"3px"}}),this._myMarkers.addMarker({id:_h,circle:5,position:{yaw:0,pitch:0},style:{cursor:"pointer"},svgStyle:{fill:id,stroke:td,strokeWidth:"3px"},visible:!1});const firstMove=ae=>{const ue=this.getPositionFromEvent(ae);ue&&this._myMarkers.markers[Ju]&&(this._myMarkers.updateMarker({id:Ju,position:ue,style:{cursor:"grab"}}),2==this._drawingAnnotation.length&&this._myMarkers.markers[ed]&&this._myMarkers.updateMarker({id:ed,polygon:[ue,{yaw:ue.yaw,pitch:this._drawingAnnotation[1].pitch},this._drawingAnnotation[1],{yaw:this._drawingAnnotation[1].yaw,pitch:ue.pitch}]}))},secMove=ae=>{const ue=this.getPositionFromEvent(ae);ue&&this._myMarkers.markers[_h]&&(this._myMarkers.updateMarker({id:_h,position:ue,style:{cursor:"grab"}}),this._drawingAnnotation.length>=1&&this._myMarkers.markers[ed]&&this._myMarkers.updateMarker({id:ed,polygon:[this._drawingAnnotation[0],{yaw:this._drawingAnnotation[0].yaw,pitch:ue.pitch},ue,{yaw:ue.yaw,pitch:this._drawingAnnotation[0].pitch}]}))};this._drawListeners=[firstMove,secMove],this.parent.addEventListener("mousemove",firstMove),this._drawingMoves=1,this._drawListenerClick=ae=>{let ue=!1;if(2!==this._drawingMoves&&ae.marker.id===Ju?0==this._drawingAnnotation.length?(this._drawingAnnotation.push({yaw:ae.marker.config.position.yaw,pitch:ae.marker.config.position.pitch}),this.parent.removeEventListener("mousemove",firstMove),this._myMarkers.updateMarker({id:Ju,style:{cursor:"pointer"}}),this._myMarkers.updateMarker({id:_h,visible:!0,position:{yaw:ae.marker.config.position.yaw,pitch:ae.marker.config.position.pitch}}),this._myMarkers.updateMarker({id:ed,visible:!0}),this.parent.addEventListener("mousemove",secMove),this._drawingMoves=2):0===this._drawingMoves?(this.parent.addEventListener("mousemove",firstMove),this._drawingMoves=1):(this._drawingAnnotation[0]={yaw:ae.marker.config.position.yaw,pitch:ae.marker.config.position.pitch},this.parent.removeEventListener("mousemove",firstMove),this._myMarkers.updateMarker({id:Ju,style:{cursor:"pointer"}}),this._drawingMoves=0,ue=!0):1!==this._drawingMoves&&ae.marker.id===_h&&(1==this._drawingAnnotation.length?(this._drawingAnnotation.push({yaw:ae.marker.config.position.yaw,pitch:ae.marker.config.position.pitch}),this.parent.removeEventListener("mousemove",secMove),this._myMarkers.updateMarker({id:_h,style:{cursor:"pointer"}}),this._drawingMoves=0,ue=!0):2===this._drawingMoves?(this._drawingAnnotation[1]={yaw:ae.marker.config.position.yaw,pitch:ae.marker.config.position.pitch},this.parent.removeEventListener("mousemove",secMove),this._myMarkers.updateMarker({id:_h,style:{cursor:"pointer"}}),this._drawingMoves=0,ue=!0):(this.parent.addEventListener("mousemove",secMove),this._drawingMoves=2)),ue){var nt,ut;const ae=this.dataHelper.sphericalCoordsToTextureCoords(this._drawingAnnotation[0]),ue=this.dataHelper.sphericalCoordsToTextureCoords(this._drawingAnnotation[1]);let qt=[ae.textureX,ae.textureY,ue.textureX,ue.textureY];const Yt=null===(nt=this.getPictureMetadata())||void 0===nt||null===(ut=nt.panorama)||void 0===ut?void 0:ut.cropData;if(Yt&&(qt[0]-=Yt.croppedX,qt[1]-=Yt.croppedY,qt[2]-=Yt.croppedX,qt[3]-=Yt.croppedY,(qt[0]<0||qt[0]>Yt.croppedWidth||qt[1]<0||qt[1]>Yt.croppedHeight||qt[2]<0||qt[2]>Yt.croppedWidth||qt[3]<0||qt[3]>Yt.croppedHeight)&&(qt=null)),qt[0]>=qt[2]&&qt[1]>=qt[3]){let ae=qt[0],ue=qt[2],nt=qt[1];qt=[ue,qt[3],ae,nt]}const Xt=new CustomEvent("annotation-drawn",{detail:{shape:qt}});this.dispatchEvent(Xt)}},this._myMarkers.addEventListener("select-marker",this._drawListenerClick)}fixDrawAnnotation(){[Ju,_h].forEach((ae=>{try{this._myMarkers.removeMarker(ae)}catch(ue){}})),(this._drawListeners||[]).forEach((ae=>this.parent.removeEventListener("mousemove",ae))),this._myMarkers.removeEventListener("select-marker",this._drawListenerClick),this._myMarkers.updateMarker({id:ed,svgStyle:{stroke:"var(--red)",strokeWidth:"3px",fill:"var(--red-transparent)",cursor:"pointer"}}),this._drawingMoves=0}stopDrawAnnotation(){[Ju,_h,ed].forEach((ae=>{try{this._myMarkers.removeMarker(ae)}catch(ue){}})),(this._drawListeners||[]).forEach((ae=>this.parent.removeEventListener("mousemove",ae))),this._myMarkers.removeEventListener("select-marker",this._drawListenerClick),delete this._drawingMoves,this._drawingAnnotation=null}getPositionFromEvent(ae){const ue=this.container.getBoundingClientRect(),nt=ae.clientX-ue.left,ut=ae.clientY-ue.top,qt=this.renderer.getIntersections({x:nt,y:ut}).find((ae=>ae.object.userData[ys.aH.VIEWER_DATA]));if(qt)return this.dataHelper.vector3ToSphericalCoords(qt.point)}forceRefresh(){var ae;const ue=this._myVTour.getCurrentNode();if(ue&&ue.panorama.baseUrl!==(null===ue||void 0===ue||null===(ae=ue.panorama)||void 0===ae?void 0:ae.origBaseUrl)){const ae=this.getZoomLevel(),nt=this.getPosition();this._myVTour.state.currentNode=null,this._myVTour.setCurrentNode(ue.id,{zoomTo:ae,rotateTo:nt,fadeIn:!1,speed:0,rotation:!1})}ue&&ue.panorama.rows>1&&this.adapter.__refresh()}}},4374:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>Popup});var ut=nt(4542),qt=nt(5995),Yt=nt(8591),Xt=nt(6627);class Popup extends ut.WF{constructor(){super(),this.visible=!1}connectedCallback(){super.connectedCallback(),this.addEventListener("click",(ae=>{ae.target===this&&this.close()})),document.addEventListener("keyup",(ae=>{"Escape"===ae.key&&this.visible&&this.close()}))}attributeChangedCallback(ae,ue,nt){super.attributeChangedCallback(ae,ue,nt),"visible"==ae&&(""!==nt&&!0!==nt||this.dispatchEvent(new Event("open")))}close(){this.visible=!1,this.dispatchEvent(new Event("close"))}render(){return ut.qy`
2150
2150
  <div class="pnx-panel pnx-padded">
2151
2151
  <pnx-button
2152
2152
  class="btn-close"
@@ -2972,7 +2972,7 @@
2972
2972
  @click=${ae=>this._onClick(ae,!1)}
2973
2973
  >${(0,Xt.fa)(Ec.EZ)}</pnx-button>
2974
2974
  </pnx-button-group>
2975
- `}}Zoom.properties={_lastWantedZoom:{state:!0}},customElements.define("pnx-widget-zoom",Zoom)},222:(ae,ue,nt)=>{"use strict";nt.r(ue),nt.d(ue,{CopyCoordinates:()=>ut.A,GeoSearch:()=>qt.A,Legend:()=>Yt.A,MapFiltersButton:()=>Xt.A,MapLayersButton:()=>ys.A,OSMEditors:()=>Ec.A,PictureLegendActions:()=>lu.A,Player:()=>uu.A,SemanticsFiltersButton:()=>_u.A,Zoom:()=>vu.A});var ut=nt(5114),qt=nt(2603),Yt=nt(4385),Xt=nt(4529),ys=nt(1614),Ec=nt(5789),lu=nt(8806),uu=nt(8305),_u=nt(6524),vu=nt(3023)},5254:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>API});var ut=nt(7343);class API extends EventTarget{constructor(ae){let ue=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(super(),null===ae||void 0===ae||"string"!==typeof ae){const ae=new Error("endpoint parameter is empty or not a valid string");throw this.dispatchEvent(new CustomEvent("broken",{detail:{error:ae}})),ae}if(ae.startsWith("/")&&(ae=window.location.href.split("/").slice(0,3).join("/")+ae),!API.isValidHttpUrl(ae)){const ue=new Error(`endpoint parameter is not a valid URL: ${ae}`);throw this.dispatchEvent(new CustomEvent("broken",{detail:{error:ue}})),ue}this._endpoint=ae,this._isReady=0,this._dataBbox=null,this._fetchOpts=(null===ue||void 0===ue?void 0:ue.fetch)||{},this._metadata={},this._configuration=null,ue.skipReadLanding||(this._readLanding=fetch(ae,this._getFetchOptions()).then((ae=>ae.json())).then((ae=>this._parseLanding(ae,ue))).catch((ae=>(this._isReady=-1,console.error(ae),this.dispatchEvent(new CustomEvent("broken",{detail:{error:ae}})),Promise.reject("Viewer failed to communicate with API")))).then((()=>this._loadMapStyles(ue.style,ue.users))).then((()=>(this._isReady=1,this.dispatchEvent(new Event("ready")),"API is ready"))))}onceReady(){return-1==this._isReady?Promise.reject("Viewer failed to communicate with API"):1==this._isReady?Promise.resolve("API is ready"):this._readLanding}isReady(){return 1==this._isReady}getAvailableFeatures(){return Object.entries(this._endpoints).filter((ae=>null!==ae[1])).map((ae=>ae[0]))}getUnavailableFeatures(){return Object.entries(this._endpoints).filter((ae=>null===ae[1])).map((ae=>ae[0]))}_parseLanding(ae,ue){var nt,ut;if(this._endpoints={collections:null,search:null,style:null,user_style:null,tiles:(null===ue||void 0===ue?void 0:ue.tiles)||null,user_tiles:null,user_search:null,collection_preview:null,item_preview:null,rss:null,report:null},!ae||!ae.links||!Array.isArray(ae.links))throw new Error("API Landing page doesn't contain 'links' list");if(!ae.stac_version.startsWith("1."))throw new Error(`API is not in a supported STAC version (Panoramax viewer supports only 1.x, API is ${ae.stac_version})`);this._metadata.name=ae.title||"Unnamed",this._metadata.stac_version=ae.stac_version,this._metadata.geovisio_version=ae.geovisio_version;const qt=[],Yt=[];if([{rel:"search",type:"application/geo+json",endpointId:"search",mandatory:!0,missingIssue:"No direct access to pictures metadata."},{rel:"data",type:"application/json",endpointId:"collections",mandatory:!0,missingIssue:"No way for viewer to access sequences."},{rel:"data",type:"application/rss+xml",endpointId:"rss"},{rel:"xyz",type:"application/vnd.mapbox-vector-tile",endpointId:"tiles"},{rel:"xyz-style",type:"application/json",endpointId:"style"},{rel:"user-xyz-style",type:"application/json",endpointId:"user_style"},{rel:"user-xyz",type:"application/vnd.mapbox-vector-tile",endpointId:"user_tiles"},{rel:"user-search",type:"application/json",endpointId:"user_search",missingIssue:"Filter map data by user name will not be available."},{rel:"collection-preview",type:"image/jpeg",endpointId:"collection_preview",missingIssue:"Display of thumbnail could be slower."},{rel:"item-preview",type:"image/jpeg",endpointId:"item_preview",missingIssue:"Display of thumbnail could be slower."},{rel:"report",type:"application/json",endpointId:"report"}].forEach((ue=>{const nt=ae.links.find((ae=>ae.rel==ue.rel&&ae.type==ue.type));if(nt){if(!API.isValidHttpUrl(nt.href))throw new Error(`API endpoint '${nt.rel}' (${nt.type}) is not a valid URL: ${nt.href}`);this._endpoints[ue.endpointId]||(this._endpoints[ue.endpointId]=nt.href)}else if(!this._endpoints[ue.endpointId]){let ae=`API doesn't offer a '${ue.rel}' (${ue.type}) endpoint in its links`;ue.missingIssue&&(ae+=`\n${ue.missingIssue}`),ue.mandatory?qt.push(ae):ue.missingIssue&&Yt.push(ae)}})),this._endpoints.style||this._endpoints.tiles||Yt.push("API doesn't offer 'xyz' or 'xyz-style' endpoints in its links.\nMap widget will not be available."),this._endpoints.user_style||this._endpoints.user_tiles||Yt.push("API doesn't offer 'user-xyz' or 'user-xyz-style' endpoints in its links.\nFilter map data by user ID will not be available."),Yt.forEach((ae=>console.warn(ae))),qt.length>0)throw new Error(qt.join("\n"));const Xt=null===ae||void 0===ae||null===(nt=ae.extent)||void 0===nt||null===(ut=nt.spatial)||void 0===ut?void 0:ut.bbox;this._dataBbox=Xt&&Array.isArray(Xt)&&Xt.length>0&&Array.isArray(Xt[0])&&4===Xt[0].length?[[Xt[0][0],Xt[0][1]],[Xt[0][2],Xt[0][3]]]:null}_loadMapStyles(ae,ue){const nt=new Set(ue||[]);this.mapStyle={version:8,sources:{},layers:[],metadata:{}};const ut=[this.getMapStyle()];if("string"===typeof ae){const ue=ae.startsWith(this._endpoint)?this._getFetchOptions():void 0;ut.push(fetch(ae,ue).then((ae=>ae.json())))}else"object"===typeof ae&&ut.push(Promise.resolve(ae));return[...nt].filter((ae=>"geovisio"!==ae)).forEach((ae=>{ut.push(this.getUserMapStyle(ae,!0))})),Promise.all(ut).then((ae=>{const ue=["bearing","center","glyphs","light","name","pitch","sky","sprite","terrain","transition","zoom"];ae.forEach((ae=>{ue.forEach((ue=>{ae[ue]&&(this.mapStyle[ue]=ae[ue]||this.mapStyle[ue])})),Object.assign(this.mapStyle.sources,(null===ae||void 0===ae?void 0:ae.sources)||{}),Object.assign(this.mapStyle.metadata,(null===ae||void 0===ae?void 0:ae.metadata)||{}),this.mapStyle.layers=this.mapStyle.layers.concat((null===ae||void 0===ae?void 0:ae.layers)||[])}))})).catch((ae=>console.error(ae)))}_getFetchOptions(){let ae=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return Object.assign({signal:ae?void 0:AbortSignal.timeout(15e3)},this._fetchOpts)}_getMapRequestTransform(){const ae=this._getFetchOptions();if(delete ae.signal,Object.keys(ae).length>0)return ue=>{if(ue.startsWith(this._endpoint))return{url:ue,...ae}}}_getPSVWithCredentials(){return"include"===this._getFetchOptions().credentials?ae=>ae.startsWith(this._endpoint):void 0}cleanResourceURL(ae){if(!ae)return;const ue=new URL(this._endpoint);return ae.startsWith("/")?ue.protocol+"//"+ue.host+ae:ae.startsWith("./")?this._endpoint+ae.substring(1):ae}async getSequenceItems(ae){let ue=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,nt=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,ut=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;if(!this.isReady())throw new Error("API is not ready to use");try{return API.isIdValid(ae),fetch(ue||`${this._endpoints.collections}/${ae}/items${ut?"?limit="+ut:""}`,this._getFetchOptions(!0)).then((ae=>ae.json())).then((ue=>{let qt=ue;nt&&(qt.features=nt.features.concat(qt.features));const Yt=ue.links.find((ae=>"next"===ae.rel));return!ut&&Yt?this.getSequenceItems(ae,Yt.href,qt):qt}))}catch(qt){return Promise.reject(qt)}}getPicturesAroundCoordinatesUrl(ae,ue){let nt=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5e-4,ut=arguments.length>3?arguments[3]:void 0,qt=arguments.length>4?arguments[4]:void 0;if(!this.isReady())throw new Error("API is not ready to use");if(isNaN(parseFloat(ae))||isNaN(parseFloat(ue)))throw new Error("lat and lon parameters should be valid numbers");const Yt=[ue-nt,ae-nt,ue+nt,ae+nt].map((ae=>ae.toFixed(4))).join(","),Xt=ut?`&limit=${ut}`:"",ys=qt?`&collections=${qt}`:"";return`${this._endpoints.search}?bbox=${Yt}${Xt}${ys}`}getPicturesAroundCoordinates(ae,ue,nt,ut,qt){return fetch(this.getPicturesAroundCoordinatesUrl(ae,ue,nt,ut,qt),this._getFetchOptions()).then((ae=>ae.json()))}getPictureMetadataUrl(ae,ue){if(!this.isReady())throw new Error("API is not ready to use");if(API.isIdValid(ae))return ue?`${this._endpoints.collections}/${ue}/items/${ae}`:`${this._endpoints.search}?ids=${ae}`}getMapStyle(){if(this.isReady())return this.mapStyle;let ae;return ae=this._endpoints.style?this._endpoints.style:this._endpoints.tiles?{version:8,sources:{geovisio:{type:"vector",tiles:[this._endpoints.tiles],minzoom:0,maxzoom:15}}}:fetch(`${this._endpoint}/map/14/0/0.mvt`,this._getFetchOptions()).then((()=>(this._endpoints.tiles=`${this._endpoint}/map/{z}/{x}/{y}.mvt`,console.log("Using fallback endpoint for vector tiles"),this.getMapStyle()))).catch((ae=>(console.error(ae),Promise.reject(new Error("API doesn't offer a vector tiles endpoint"))))),"string"===typeof ae?fetch(ae,this._getFetchOptions()).then((ae=>ae.json())):Promise.resolve(ae)}getUserMapStyle(ae){let ue;return arguments.length>1&&void 0!==arguments[1]&&arguments[1]||this.isReady()?ae?(this._endpoints.user_style?ue=this._endpoints.user_style.replace(/\{userId\}/g,ae):this._endpoints.user_tiles&&(ue={version:8,sources:{[`geovisio_${ae}`]:{type:"vector",tiles:[this._endpoints.user_tiles.replace(/\{userId\}/g,ae)],minzoom:0,maxzoom:15}}}),ue?"string"===typeof ue?fetch(ue,this._getFetchOptions()).then((ae=>ae.json())):Promise.resolve(ue):Promise.reject(new Error("API doesn't offer map style for specific user"))):Promise.reject(new Error("Parameter userId is empty")):Promise.reject(new Error("API is not ready to use"))}findThumbnailInPictureFeature(ae){if(!this.isReady())throw new Error("API is not ready to use");if(!ae||!ae.assets)return null;let ue=null;for(let nt of Object.values(ae.assets)){if(nt.roles.includes("thumbnail")&&"image/jpeg"==nt.type&&API.isValidHttpUrl(nt.href))return this.cleanResourceURL(nt.href);nt.roles.includes("visual")&&"image/jpeg"==nt.type&&API.isValidHttpUrl(nt.href)&&(ue=this.cleanResourceURL(nt.href))}return ue}getPictureThumbnailURLForSequence(ae,ue){if(!this.isReady())throw new Error("API is not ready to use");if(this._endpoints.collection_preview)return Promise.resolve(this._endpoints.collection_preview.replace("{id}",ae));if(ue&&Array.isArray(ue.links)&&ue.links.length>0){let ae=ue.links.find((ae=>"preview"===ae.rel&&"image/jpeg"===ae.type));if(ae&&API.isValidHttpUrl(ae.href))return Promise.resolve(ae.href)}const nt=`${this._endpoints.search}?limit=1&collections=${ae}`;return fetch(nt,this._getFetchOptions()).then((ae=>ae.json())).then((ae=>Array.isArray(ae.features)&&0!=ae.features.length?this.findThumbnailInPictureFeature(ae.features.pop()):null))}getPictureThumbnailURL(ae,ue){if(!this.isReady())throw new Error("API is not ready to use");return ae?this._endpoints.item_preview?Promise.resolve(this._endpoints.item_preview.replace("{id}",ae)):ae&&ue?fetch(`${this._endpoints.collections}/${ue}/items/${ae}`,this._getFetchOptions()).then((ae=>ae.json())).then((ae=>ae?this.findThumbnailInPictureFeature(ae):null)):fetch(`${this._endpoints.search}?ids=${ae}`,this._getFetchOptions()).then((ae=>ae.json())).then((ae=>ae&&Array.isArray(ae.features)&&0!=ae.features.length?this.findThumbnailInPictureFeature(ae.features.pop()):null)):Promise.resolve(null)}getRSSURL(ae){if(!this.isReady())throw new Error("API is not ready to use");if(this._endpoints.rss){let ue=this._endpoints.rss;return ae&&(ue+=ue.includes("?")?"&":"?",ue+="bbox="+[ae.getWest(),ae.getSouth(),ae.getEast(),ae.getNorth()].join(",")),ue}return null}getSequenceMetadataUrl(ae){if(!this.isReady())throw new Error("API is not ready to use");return`${this._endpoints.collections}/${ae}`}getSequenceMetadata(ae){if(!this.isReady())throw new Error("API is not ready to use");return fetch(this.getSequenceMetadataUrl(ae),this._getFetchOptions()).then((ae=>ae.json()))}getDataBbox(){if(!this.isReady())throw new Error("API is not ready to use");return this._dataBbox}searchUsers(ae){if(!this.isReady())throw new Error("API is not ready to use");if(!this._endpoints.user_search)throw new Error("User search is not available");return fetch(`${this._endpoints.user_search}?q=${ae}`,this._getFetchOptions()).then((ae=>ae.json())).then((ae=>(null===ae||void 0===ae?void 0:ae.features)||null))}getUserName(ae){if(!this.isReady())throw new Error("API is not ready to use");if(!this._endpoints.user_search)throw new Error("User search is not available");return fetch(this._endpoints.user_search.replace(/\/search$/,`/${ae}`),this._getFetchOptions()).then((ae=>ae.json())).then((ae=>(null===ae||void 0===ae?void 0:ae.label)||(null===ae||void 0===ae?void 0:ae.name)||null))}sendReport(ae){if(!this.isReady())throw new Error("API is not ready to use");if(!this._endpoints.report)throw new Error("Report sending is not available");const ue={...this._getFetchOptions(),method:"POST",body:JSON.stringify(ae),headers:{"Content-Type":"application/json"}};return fetch(this._endpoints.report,ue).then((async ae=>{if(ae.status>=400){let nt=await ae.text();try{nt=JSON.parse(nt).message}catch(ue){}return Promise.reject(nt)}return ae.json()}))}sendPictureSemantics(ae,ue){var nt;if(!this.isReady())throw new Error("API is not ready to use");if(null===ae||void 0===ae||null===(nt=ae.sequence)||void 0===nt||!nt.id||null===ae||void 0===ae||!ae.id)throw new Error("Missing IDs from picture");let ut=this.getPictureMetadataUrl(ae.id,ae.sequence.id);null!==ae&&void 0!==ae&&ae.origInstance&&(ut=`${ae.origInstance.href}/api/collections/${ae.sequence.id}/items/${ae.id}`);const qt={...this._getFetchOptions(),method:"PATCH",body:JSON.stringify({semantics:ue}),headers:{"Content-Type":"application/json"}};return fetch(ut,qt).then((async ae=>{if(ae.status>=400){let nt=await ae.text();try{nt=JSON.parse(nt).message}catch(ue){}return Promise.reject(nt)}return ae.json()}))}createPictureAnnotation(ae,ue,nt){var ut;if(!this.isReady())throw new Error("API is not ready to use");if(null===ae||void 0===ae||null===(ut=ae.sequence)||void 0===ut||!ut.id||null===ae||void 0===ae||!ae.id)throw new Error("Missing IDs from picture");let qt=this.getPictureMetadataUrl(ae.id,ae.sequence.id)+"/annotations";null!==ae&&void 0!==ae&&ae.origInstance&&(qt=`${ae.origInstance.href}/api/collections/${ae.sequence.id}/items/${ae.id}/annotations`);const Yt={...this._getFetchOptions(),method:"POST",body:JSON.stringify({semantics:nt,shape:ue}),headers:{"Content-Type":"application/json"}};return fetch(qt,Yt).then((async ae=>{if(ae.status>=400){let nt=await ae.text();try{nt=JSON.parse(nt).message}catch(ue){}return Promise.reject(nt)}return ae.json()}))}editPictureAnnotation(ae,ue){if(!this.isReady())throw new Error("API is not ready to use");let nt=`${this._endpoint}/annotations/${ae}`;const ut={...this._getFetchOptions(),method:"PATCH",body:JSON.stringify({semantics:ue}),headers:{"Content-Type":"application/json"}};return fetch(nt,ut).then((async ae=>{if(ae.status>=400){let nt=await ae.text();try{nt=JSON.parse(nt).message}catch(ue){}return Promise.reject(nt)}return ae.json()}))}deletePictureAnnotation(ae){if(!this.isReady())throw new Error("API is not ready to use");let ue=`${this._endpoint}/annotations/${ae}`;const nt={...this._getFetchOptions(),method:"DELETE"};return fetch(ue,nt).then((async ae=>{if(ae.status>=400){let nt=await ae.text();try{nt=JSON.parse(nt).message}catch(ue){}return Promise.reject(nt)}return!0}))}getAuthURL(){var ae,ue;return this._configuration?Promise.resolve(!(null===(ae=this._configuration)||void 0===ae||null===(ue=ae.auth)||void 0===ue||!ue.enabled)&&`${this._endpoint}/auth/login?next_url=<CBURL>`):null===this._configuration?fetch(this._endpoint+"/configuration",this._getFetchOptions()).then((ae=>ae.json())).then((ae=>(this._configuration=ae,this.getAuthURL()))).catch((()=>(this._configuration=!1,!1))):Promise.resolve(!1)}static isValidHttpUrl(ae){let ue;try{ue=new URL(ae)}catch(nt){return!1}return"http:"===ue.protocol||"https:"===ue.protocol}static isIdValid(ae){if((0,ut.isNullId)(ae))throw new Error("id should be a valid picture unique identifier");return!0}}},2118:(ae,ue,nt)=>{"use strict";nt.d(ue,{Ay:()=>InitParameters,Qm:()=>ut,Vy:()=>alterPSVState,ai:()=>alterPhotoViewerState,iz:()=>alterViewerState,mK:()=>alterMapState});const ut={minDate:"date_from",maxDate:"date_to",pic_type:"pic_type",camera:"camera",theme:"theme",qualityscore:"pic_score",gps:"gps"},qt=Object.fromEntries(Object.entries(ut).map((ae=>[ae[1],ae[0]]))),Yt=["none","null","false",!1],Xt=["antialias","bearing","bearingSnap","bounds","boxZoom","clickTolerance","collectResourceTiming","cooperativeGestures","crossSourceCollisions","doubleClickZoom","dragPan","dragRotate","fadeDuration","failIfMajorPerformanceCaveat","fitBoundsOptions","hash","interactive","localIdeographFontFamily","locale","logoPosition","maplibreLogo","maxBounds","maxCanvasSize","maxPitch","maxTileCacheSize","maxTileCacheZoomLevels","maxZoom","minPitch","minZoom","pitch","pitchWithRotate","pixelRatio","preserveDrawingBuffer","refreshExpiredTiles","renderWorldCopies","scrollZoom","touchPitch","touchZoomRotate","trackResize","transformCameraUpdate","transformRequest","validateStyle"];class InitParameters{constructor(){var ae,ue,nt,ut,qt,ys,Ec;let lu=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},uu=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},_u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};"false"===lu["url-parameters"]&&(uu={});let vu={};"object"===typeof(null===lu||void 0===lu?void 0:lu["psv-options"])&&(vu=lu["psv-options"]);let wu={};"object"===typeof(null===lu||void 0===lu?void 0:lu["map-options"])&&(wu=lu["map-options"]);let Hu={};"object"===typeof(null===_u||void 0===_u?void 0:_u.map)&&(Hu=_u.map);let qu=uu.map&&"none"!==uu.map?getMapPositionFromString(uu.map):null,Ju=!Yt.includes(uu.map)&&!Yt.includes(lu["map-options"]),_h=uu.focus||lu.focus,ed=uu.pic||lu.picture,td=uu.seq||lu.sequence,id=uu.users||lu.users,nd=uu.speed||(null===(ae=vu)||void 0===ae?void 0:ae.transitionDuration),rd=uu.nav||(null===(ue=vu)||void 0===ue?void 0:ue.picturesNavigation),ad=uu.theme||(null===(nt=Hu)||void 0===nt?void 0:nt.theme)||wu.theme,sd=uu.background||(null===(ut=Hu)||void 0===ut?void 0:ut.background)||wu.background,od=(null===qu||void 0===qu?void 0:qu.center)||!ed&&((null===(qt=Hu)||void 0===qt?void 0:qt.center)||wu.center)||[0,0],ld=(null===qu||void 0===qu?void 0:qu.zoom)||(null===(ys=Hu)||void 0===ys?void 0:ys.zoom)||wu.zoom,cd=(null===qu||void 0===qu?void 0:qu.pitch)||wu.pitch,ud=(null===qu||void 0===qu?void 0:qu.bearing)||wu.bearing,hd=lu.geocoder,dd=lu.widgets,pd=lu["fetch-options"],md=lu.style,gd=lu.lang,fd=lu.endpoint,Ad=wu.raster,yd=wu.attributionControl,_d=(vd=wu,Object.fromEntries(Object.entries(vd).filter((ae=>{let[ue]=ae;return Xt.includes(ue)}))));var vd;let xd=lu["keyboard-shortcuts"],bd=lu["skip-tags-menu-opening"],wd="false"===(null===_u||void 0===_u?void 0:_u.disableAnnotations)||(null===(Ec=vu)||void 0===Ec?void 0:Ec.displayAnnotations)||!1,Ed=uu.xyz,Md=uu.date_from,Sd=uu.date_to,Td=uu.pic_type,kd=uu.camera,Cd=uu.pic_score,Id=uu.gps,Dd=uu.overlay,Ld=uu.xywh,Pd=uu.annot;!Ju||ed||td?["map","pic"].includes(_h)?"map"!==_h||Ju||(console.warn("Parameter focus can't be 'map' as map is disabled"),_h="pic"):(console.warn("Invalid value for parameter focus:",_h),_h=!Ju||ed||td?"pic":"map"):_h="map","aerial"!=sd||Ad||(console.warn("Parameter background can't be 'aerial' as no aerial imagery is available"),sd="streets"),!wd&&Pd&&(wd=!0),this._parentInit={map:Ju,users:id,fetchOptions:pd,style:md,lang:gd,endpoint:fd},this._parentPostInit={focus:_h,picture:ed,sequence:td,geocoder:hd,widgets:dd,forceFocus:!0,keyboardShortcuts:!0,willLoadPicture:void 0!==(ed||td),skipTagsMenuOpening:"true"===bd},this._psvInit=Object.assign(Object.fromEntries(Object.entries(vu).filter((ae=>{let[ue]=ae;return!["transitionDuration","picturesNavigation","displayAnnotations"].includes(ue)}))),{displayAnnotations:wd}),this._psvAny={transitionDuration:nd,picturesNavigation:rd},this._psvPostInit={xyz:Ed,xywh:Ld,annotation:Pd},this._mapInit={raster:Ad,attributionControl:yd,..._d},this._mapAny={theme:ad,background:sd,center:od,zoom:ld,pitch:cd,bearing:ud,users:id},this._mapPostInit={date_from:Md,date_to:Sd,pic_type:Td,camera:kd,pic_score:Cd,gps:Id,overlay:Dd},"false"===xd&&(this._psvInit.keyboard=!1,this._psvInit.keyboardActions={},this._mapInit.keyboard=!1,this._parentPostInit.keyboardShortcuts=!1)}_sanitize(ae){return Object.fromEntries(Object.entries(ae).filter((ae=>{let[,ue]=ae;return void 0!==ue})))}getParentInit(){return this._sanitize(this._parentInit)}getParentPostInit(){return this._sanitize(this._parentPostInit)}getPSVInit(){return this._sanitize(Object.assign({},this._psvInit,this._psvAny))}getPSVPostInit(){return this._sanitize(Object.assign({},this._psvPostInit,this._psvAny))}getMapInit(){return this._sanitize(Object.assign({},this._mapInit,this._mapAny))}getMapPostInit(){return this._sanitize(Object.assign({},this._mapPostInit,this._mapAny))}static GetComponentProperties(ae,ue){const nt={};for(let ut in ae.properties){ae.properties[ut].state||null==ue[ut]||(nt[ut]=ue[ut])}return nt}}function getMapPositionFromString(ae,ue){const nt=(ae||"").split("/");if(nt.length>=3&&!nt.some((ae=>isNaN(ae)))){const ae={center:[+nt[2],+nt[1]],zoom:+nt[0],pitch:+(nt[4]||0)};return ue&&(ae.bearing=ue.dragRotate.isEnabled()&&ue.touchZoomRotate.isEnabled()?+(nt[3]||0):ue.getBearing()),ae}return null}function alterPSVState(ae,ue){ue.xyz&&ae.addEventListener("picture-loaded",(()=>{const nt=function(ae){const ue=(ae||"").split("/");return 3!==ue.length||ue.some((ae=>isNaN(ae)))?null:{x:+ue[0],y:+ue[1],z:+ue[2]}}(ue.xyz);ae.setXYZ(nt.x,nt.y,nt.z)}),{once:!0}),ue.xywh&&ae.addEventListener("picture-loaded",(()=>{const nt=function(ae,ue){let nt=(ae||"").split(",");if(4!==nt.length||nt.some((ae=>isNaN(ae))))return null;{var ut,qt,Yt,Xt;let[ae,lu,uu,_u]=nt.map((ae=>parseFloat(ae))),vu=ue.panorama.basePanoData;if("function"===typeof vu){var ys,Ec;const ae=null===ue||void 0===ue||null===(ys=ue.properties)||void 0===ys||null===(Ec=ys["pers:interior_orientation"])||void 0===Ec?void 0:Ec.sensor_array_dimensions;vu=ae&&2==ae.length?vu({width:ae[0],height:ae[1]}):null}if(null===(ut=vu)||void 0===ut||!ut.fullWidth||null===(qt=vu)||void 0===qt||!qt.fullHeight)return null;const wu=(null===(Yt=vu)||void 0===Yt?void 0:Yt.croppedX)||0,Hu=(null===(Xt=vu)||void 0===Xt?void 0:Xt.croppedY)||0,qu=wu+ae+uu/2-vu.fullWidth/2,Ju=-(Hu+lu+_u/2-vu.fullHeight/2),_h=qu/vu.fullWidth,ed=Ju/vu.fullHeight,td=(uu/vu.fullWidth+_u/vu.fullHeight)/2;return{yaw:2*_h*Math.PI,pitch:ed*Math.PI,z:100*(1-td)}}}(ue.xywh,ae.getPictureMetadata());ae.rotate(nt),ae.zoom(nt.z)}),{once:!0}),ue.annotation&&(ae.getPictureMetadata()?ae.focusOnAnnotation(ue.annotation):ae.addEventListener("picture-loaded",(()=>{ae.focusOnAnnotation(ue.annotation)}),{once:!0}));let nt=ue.transitionDuration||ue.speed;void 0!==nt&&ae.setTransitionDuration(nt);let ut=ue.picturesNavigation||ue.nav;["none","pic","any","seq"].includes(ut)&&ae.setPicturesNavigation(ut)}async function alterMapState(ae,ue){var nt;const ut=getMapPositionFromString(ue.map,ae);ut&&ae.jumpTo(ut);let Yt=Array.isArray(ue.users)?ue.users:(ue.users||"").split(",");(0===Yt.length||1===Yt.length&&""===Yt[0].trim())&&(Yt=["geovisio"]),await ae.setVisibleUsers(Yt),null===(nt=ae.setFilters)||void 0===nt||nt.call(ae,function(ae){const ue={};for(let nt in qt)ae[nt]&&(ue[qt[nt]]=ae[nt]);if(ue.qualityscore){let ae=ue.qualityscore.split("");const nt={A:5,B:4,C:3,D:2,E:1};ue.qualityscore=ae.map((ae=>nt[ae]))}return ue}(ue)),["aerial","streets"].includes(ue.background)&&ae.setBackground(ue.background),ue.overlay&&ue.overlay.split(",").forEach((ue=>ae.setLayoutProperty(ue,"visibility","visible")))}function alterPhotoViewerState(ae,ue){let nt=ue.picture||ue.pic,ut=ue.sequence||ue.seq||null;if(nt){const ue=nt.split(";");ue.length>1&&console.warn("Multiple picture IDs passed in URL, only first one kept"),ae.select(1===ue.length?ut:null,ue[0],!0)}else ut?ae.select(ut,null,!0):ae.select()}function alterViewerState(ae,ue){alterPhotoViewerState(ae,ue),"map"===ue.focus&&null!==ae&&void 0!==ae&&ae.map?(ae.setPopup(!1),ae._setFocus("map",null,ue.forceFocus)):"pic"===ue.focus&&null!==ae&&void 0!==ae&&ae.mini?(ae.setPopup(!1),ae._setFocus("pic",null,ue.forceFocus)):ue.focus&&"meta"===ue.focus&&null!==ae&&void 0!==ae&&ae.mini&&ae._setFocus("pic",null,ue.forceFocus)}},3727:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>PhotoAdapter});var ut=nt(3890);class PhotoAdapter extends ut.D{constructor(ae,ue){super(ae,ue),this._shouldGoFast=ue.shouldGoFast||(()=>!0)}loadTexture(ae,ue){return ae.origBaseUrl?ae.baseUrl=ae.origBaseUrl:ae.origBaseUrl=ae.baseUrl,this._shouldGoFast()&&ae.thumbUrl&&!ae.hdLoaded&&1==ae.rows&&(ae.baseUrl=ae.thumbUrl),super.loadTexture(ae,ue).then((ue=>(ae.baseUrl===ae.origBaseUrl&&(ae.hdLoaded=!0),ue))).catch((ae=>{console.error("Can't load texture",ae)}))}__loadTiles(ae){this._shouldGoFast()||super.__loadTiles(ae)}}},4207:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>PresetManager});var ut=nt(7208);const qt={fas:"fa7-solid"},Yt={};class PresetManager{constructor(){let ae=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,ue=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this._ready=!1,this._presets=null,this._translations={},ue||this._load(ae)}async _load(ae){var ue;ae=ae||(null===(ue=window.navigator.languages[0])||void 0===ue?void 0:ue.substring(0,2));try{var nt,Xt;const[ue,lu,uu]=await Promise.all([fetch(`${(0,ut.PanoramaxPresetsURL)()}/translations/en.min.json`),ae?fetch(`${(0,ut.PanoramaxPresetsURL)()}/translations/${ae}.min.json`):Promise.resolve({ok:!0}),fetch(`${(0,ut.PanoramaxPresetsURL)()}/presets.min.json`)]);if(!ue||!lu||!uu||!ue.ok||!lu.ok||!uu.ok)throw this._ready=-1,new Error("Presets service is not available");var ys,Ec;if(this._presets=await uu.json(),this._translations.en=null===(nt=await ue.json())||void 0===nt||null===(Xt=nt.en)||void 0===Xt?void 0:Xt.presets,ae)this._translations[ae]=null===(ys=await lu.json())||void 0===ys||null===(Ec=ys[ae])||void 0===Ec?void 0:Ec.presets;Object.entries(this._presets).forEach((ue=>{var nt,ut,Xt,ys,Ec,lu;let[uu,_u]=ue;if(null!==(nt=this._translations[ae])&&void 0!==nt&&null!==(ut=nt.presets)&&void 0!==ut&&null!==(Xt=ut[uu])&&void 0!==Xt&&Xt.name?_u.name=this._translations[ae].presets[uu].name:null!==(ys=this._translations.en)&&void 0!==ys&&null!==(Ec=ys.presets)&&void 0!==Ec&&null!==(lu=Ec[uu])&&void 0!==lu&&lu.name&&(_u.name=this._translations.en.presets[uu].name),_u.icon){const ae=_u.icon.split("-")[0],ue=qt[ae];_u.iconify=ue?_u.icon.replace(ae+"-",ue+":"):_u.icon.split("-")[0]+":"+_u.icon.split("-").slice(1).join("-"),Yt[_u.iconify]&&(_u.iconify=Yt[_u.iconify])}})),this._ready=!0}catch(lu){console.error("Presets service throws an error:",lu),this._ready=-1}}async onceReady(){return this._ready?-1===this._ready?Promise.reject():Promise.resolve():(await new Promise((ae=>setTimeout(ae,250))),this.onceReady())}async getPreset(ae){return this.getPresets(ae).then((ae=>ae.shift()))}async getPresets(ae){return this.onceReady().then((()=>{const ue=Object.values(this._presets).filter((ue=>{if(0===Object.keys(ue.tags).length)return!1;for(let nt in ue.tags){const ut=ue.tags[nt];if(!ae.semantics.find((ae=>"delete"!==ae.action&&ae.key===nt&&("*"===ut||ut===ae.value))))return!1}return!0}));return ue.sort(((ae,ue)=>{const nt=Object.keys(ae.tags).length,ut=Object.keys(ue.tags).length;if(nt>ut)return-1;if(nt===ut){const nt=Object.values(ae.tags).filter((ae=>"*"===ae)).length,ut=Object.values(ue.tags).filter((ae=>"*"===ae)).length;return nt<ut?-1:nt>ut?1:0}return 1})),ue}))}}},4005:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>SemanticsMapProtocol,d:()=>Yt});var ut=nt(2964),qt=nt(8552);const Yt=15;class SemanticsMapProtocol{constructor(ae){this.tiles=new Map,this.api=ae}_tileToBbox(ae,ue,nt){const ut=Math.pow(2,nt),qt=ae/ut*360-180,Yt=(ae+1)/ut*360-180,Xt=180*Math.atan(Math.sinh(Math.PI*(1-2*ue/ut)))/Math.PI;return[qt,180*Math.atan(Math.sinh(Math.PI*(1-2*(ue+1)/ut)))/Math.PI,Yt,Xt]}_semanticsToBasicProps(ae){var ue,nt,ut,qt;const Yt={},setOrAppend=ae=>{Yt[ae.key]?Yt[ae.key].add(ae.value):Yt[ae.key]=new Set([ae.value])};return((null===(ue=ae.properties)||void 0===ue||null===(nt=ue.collection)||void 0===nt?void 0:nt.semantics)||[]).forEach(setOrAppend),((null===(ut=ae.properties)||void 0===ut?void 0:ut.semantics)||[]).forEach(setOrAppend),((null===(qt=ae.properties)||void 0===qt?void 0:qt.annotations)||[]).forEach((ae=>ae.semantics.forEach(setOrAppend))),Object.keys(Yt).forEach((ae=>Yt[ae]=[...Yt[ae]].join(";"))),Yt.picid=ae.id,Yt.seqid=ae.collection,Yt}tile(){return async(ae,ue)=>{ue=ue||new AbortController;const nt=ae.url.match(/^sem:\/\/\/(.+)\/(\d+)\/(\d+)\/(\d+)/);if(!nt)throw new Error("Invalid URL");if(this.tiles.has(ae.url))return{data:this.tiles.get(ae.url).buffer.slice(0)};const[Xt,ys,Ec,lu,uu]=nt,_u=this._tileToBbox(parseInt(lu),parseInt(uu),parseInt(Ec)),vu=`${this.api._endpoint}/search?bbox=${_u.join(",")}&limit=1000&filter=${encodeURIComponent(ys)}`;return fetch(vu,{signal:ue.signal}).then((ae=>ae.json())).then((ue=>{if(ue.features){if(ue.type="FeatureCollection",0===ue.features.length){const ue=new Uint8Array;return this.tiles.set(ae.url,ue),{data:ue.buffer.slice(0)}}ue.features=ue.features.map((ae=>({type:ae.type,geometry:ae.geometry,id:ae.id,properties:this._semanticsToBasicProps(ae)})))}const nt=(0,ut.A)(ue,{maxZoom:Yt}).getTile(Ec,lu,uu);if(!nt)throw new Error("Can't create tile");const Xt=(0,qt.O7)({layer:nt},{version:2});return this.tiles.set(ae.url,Xt),{data:Xt.buffer.slice(0)}}))}}}},4451:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>URLHandler});var ut=nt(2118);const qt=["speed","nav","focus","pic","xyz","map","background","users","s","xywh","annot","seq","overlay"].concat(Object.values(ut.Qm)),Yt=["focus-changed","pictures-navigation-changed"],Xt=["position-updated","zoom-updated","view-rotated","picture-loaded","transition-duration-changed","annotation-focused","annotations-unfocused"],ys=["moveend","zoomend","boxzoomend","background-changed","users-changed","filters-changed","styledata"];class URLHandler extends EventTarget{constructor(ae){super(),this._parent=ae,this._delay=null}listenToChanges(){window.addEventListener("popstate",this._onURLChange.bind(this),!1),Yt.forEach((ae=>this._parent.addEventListener(ae,this._onParentChange.bind(this)))),Xt.forEach((ae=>this._parent.psv.addEventListener(ae,this._onParentChange.bind(this)))),this._parent.map&&ys.forEach((ae=>this._parent.map.on(ae,this._onParentChange.bind(this))))}destroy(){window.removeEventListener("popstate",this._onURLChange)}nextURLParams(){var ae;let ue={};"number"==typeof this._parent.psv.getTransitionDuration()&&(ue.speed=this._parent.psv.getTransitionDuration()),[null,"any"].includes(this._parent.psv.getPicturesNavigation())||(ue.nav=this._parent.psv.getPicturesNavigation()),this._parent.psv.getPictureId()&&(ue.pic=this._parent.psv.getPictureId());const nt=this._parent.psv.getPictureMetadata();var qt;nt&&(ue.xyz=this.currentPSVString(),null!==(qt=nt.sequence)&&void 0!==qt&&qt.id&&(ue.seq=nt.sequence.id));const Yt=this._parent.psv.getSelectedAnnotations();if((null===Yt||void 0===Yt?void 0:Yt.length)>0&&(ue.annot=Yt[0]),null!==(ae=this._parent.map)&&void 0!==ae&&ae.loaded){var Xt,ys,Ec,lu,uu;ue.map=this.currentMapString(),ue.focus="pic",this._parent.isMapWide()&&(ue.focus="map"),null!==(Xt=this._parent.map)&&void 0!==Xt&&null!==(ys=Xt.hasTwoBackgrounds)&&void 0!==ys&&ys.call(Xt)&&null!==(Ec=this._parent.map)&&void 0!==Ec&&null!==(lu=Ec.getBackground)&&void 0!==lu&&lu.call(Ec)&&(ue.background=this._parent.map.getBackground());const ae=this._parent.map.getVisibleUsers();if((ae.length>1||!ae.includes("geovisio"))&&(ue.users=ae.join(",")),this._parent.map._mapFilters){for(let ae in ut.Qm)this._parent.map._mapFilters[ae]&&(ue[ut.Qm[ae]]=this._parent.map._mapFilters[ae]);if(Array.isArray(ue.pic_score))if(5===ue.pic_score.length)delete ue.pic_score;else{const ae=[null,"E","D","C","B","A"];ue.pic_score=ue.pic_score.map((ue=>ae[ue])).join("")}Array.isArray(ue.gps)&&5===ue.gps.length&&delete ue.gps}if(null!==(uu=this._parent.map)&&void 0!==uu&&uu.getSemanticOverlays){const ae=this._parent.map.getSemanticOverlays().filter((ae=>{var ue;return"none"!==(null===(ue=ae.layout)||void 0===ue?void 0:ue.visibility)})).map((ae=>ae.id));ae.length>0&&(ue.overlay=ae.join(","))}}return ue}nextURLString(){let ae="";return Object.entries(this.nextURLParams()).sort(((ae,ue)=>ae[0].localeCompare(ue[0]))).forEach((ue=>{let[nt,ut]=ue,qt=!1;const Yt=ae.split("&").map((ae=>{const ue=ae.split("=")[0];return ue===nt?(qt=!0,`${ue}=${ut}`):ae})).filter((ae=>ae));qt||Yt.push(`${nt}=${ut}`),ae=`${Yt.join("&")}`})),`?${ae}`.replace(/^\?+/,"?")}currentURLParams(){const ae=(arguments.length>0&&void 0!==arguments[0]&&arguments[0]?window.location.hash:window.location.search).replace(/^[?#]/,"");let ue={};if(ae.split("&").map((ae=>ae.split("="))).filter((ae=>void 0!==ae[0]&&ae[0].length>0&&qt.includes(ae[0]))).forEach((ae=>{ue[ae[0]]=ae[1]})),ue.s){const ae=Object.fromEntries(decodeURIComponent(ue.s).split(";").map((ae=>[ae[0],ae.substring(1)])));ue={},"m"===ae.f?ue.focus="map":"p"===ae.f?ue.focus="pic":"t"===ae.f&&(ue.focus="meta"),""!==ae.s&&(ue.speed=100*parseFloat(ae.s)),"a"===ae.n?ue.nav="any":"s"===ae.n&&(ue.nav="seq"),["n","p"].includes(ae.n)&&(ue.nav="pic"),""!==ae.p&&(ue.pic=ae.p),""!==ae.a&&(ue.annot=ae.a),""!==ae.c&&(ue.xyz=ae.c),""!==ae.m&&(ue.map=ae.m),""!==ae.d&&(ue.date_from=ae.d),""!==ae.e&&(ue.date_to=ae.e),"f"===ae.t?ue.pic_type="flat":"e"===ae.t&&(ue.pic_type="equirectangular"),""!==ae.k&&(ue.camera=ae.k),"d"===ae.v?ue.theme="default":"a"===ae.v?ue.theme="age":"t"===ae.v?ue.theme="type":"s"===ae.v?ue.theme="score":"g"===ae.v&&(ue.theme="gps"),"s"===ae.b?ue.background="streets":"a"===ae.b&&(ue.background="aerial"),""!==ae.u&&(ue.users=ae.u),""!==ae.q&&(ue.pic_score=ae.q),""!==ae.g&&(ue.gps=ae.g),""!==ae.o&&(ue.overlay=ae.o)}return ue}currentMapString(){var ae;if(null===(ae=this._parent.map)||void 0===ae||!ae.loaded)return"";const ue=this._parent.map.getCenter(),nt=Math.round(100*this._parent.map.getZoom())/100,ut=Math.ceil((nt*Math.LN2+Math.log(512/360/.5))/Math.LN10),qt=Math.pow(10,ut),Yt=Math.round(ue.lng*qt)/qt,Xt=Math.round(ue.lat*qt)/qt,ys=this._parent.map.getBearing(),Ec=this._parent.map.getPitch();let lu=`${nt}/${Xt}/${Yt}`;return(ys||Ec)&&(lu+="/"+Math.round(10*ys)/10),Ec&&(lu+=`/${Math.round(Ec)}`),lu}currentPSVString(){const ae=this._parent.psv.getXYZ();return`${ae.x.toFixed(2)}/${ae.y.toFixed(2)}/${Math.round(ae.z||0)}`}_onURLChange(){let ae=this.currentURLParams();"Viewer"===this._parent.getClassName()?(0,ut.iz)(this._parent,ae):(0,ut.ai)(this._parent,ae),(0,ut.Vy)(this._parent.psv,ae),this._parent.map&&(0,ut.mK)(this._parent.map,ae)}nextShortLink(ae){const ue=new URL(ae),nt=this.nextURLParams(),ut={f:(nt.focus||"").substring(0,1),s:isNaN(parseInt(nt.speed))?void 0:Math.floor(parseInt(nt.speed)/100),n:(nt.nav||"").substring(0,1),p:nt.pic,c:nt.xyz,m:nt.map,d:nt.date_from,e:nt.date_to,t:(nt.pic_type||"").substring(0,1),k:nt.camera,v:(nt.theme||"").substring(0,1),b:(nt.background||"").substring(0,1),u:nt.users,q:nt.pic_score,a:nt.annot,g:nt.gps,o:nt.overlay},qt=Object.entries(ut).filter((ae=>{let[,ue]=ae;return void 0!=ue&&""!=ue})).map((ae=>{let[ue,nt]=ae;return`${ue}${nt}`})).join(";");return ue.search=`s=${qt}`,ue}getUnmanagedParameters(ae){return new URLSearchParams(Array.from(ae.searchParams).filter((ae=>{let[ue]=ae;return!qt.includes(ue)}))).toString()}_onParentChange(){this._delay&&(clearTimeout(this._delay),this._delay=null),this._delay=setTimeout((()=>{var ae,ue,nt;const ut=new URL(window.location.href),qt=new URL(window.location.href),Yt=this.getUnmanagedParameters(ut);if(qt.search=this._parent?this.nextURLString()+(Yt.length>0?"&"+Yt:""):"",Object.keys(this.currentURLParams(!0)).length>0&&(qt.hash=""),ut.search==qt.search)return;const Xt=this.currentURLParams().pic||"",ys=(null===(ae=this._parent)||void 0===ae||null===(ue=ae.psv)||void 0===ue||null===(nt=ue.getPictureId)||void 0===nt?void 0:nt.call(ue))||"";try{if(Xt!=ys?window.history.pushState(window.history.state,null,qt.href):window.history.replaceState(window.history.state,null,qt.href),this._parent){const ae=new CustomEvent("url-changed",{detail:{url:qt.href}});this.dispatchEvent(ae)}}catch(Ec){}}),500)}}},3606:(ae,ue,nt)=>{"use strict";nt.r(ue),nt.d(ue,{forwardGeocodingBAN:()=>forwardGeocodingBAN,forwardGeocodingNominatim:()=>forwardGeocodingNominatim,forwardGeocodingStandard:()=>forwardGeocodingStandard,reverseGeocodingNominatim:()=>reverseGeocodingNominatim});var ut=nt(7208);const qt={house:20,housenumber:20,street:18,locality:15,district:13,municipality:12,city:12,county:8,region:7,state:7,country:5};function geocoderParamsToURLString(ae){let ue={};return Object.entries(ae).filter((ae=>void 0!==ae[1]&&null!==ae[1])).forEach((ae=>ue[ae[0]]=ae[1])),new URLSearchParams(ue).toString()}function forwardGeocodingNominatim(ae){const ue={q:ae.query,countrycodes:ae.countries,limit:ae.limit,viewbox:ae.bbox};return fetch(`${(0,ut.NominatimBaseUrl)()}/search?${geocoderParamsToURLString(ue)}&format=geocodejson&addressdetails=1`).then((ae=>ae.json())).then((ae=>{const ue={features:[]},nt=[];return(ae.features||[]).forEach((ae=>{var ut,Yt,Xt;const ys=geocodeJsonToPlaceName(null===(ut=ae.properties)||void 0===ut?void 0:ut.geocoding)||(null===(Yt=ae.properties)||void 0===Yt||null===(Xt=Yt.geocoding)||void 0===Xt?void 0:Xt.label);var Ec,lu;nt.includes(ys)||(ue.features.push({place_type:["place"],place_name:ys,center:ae.geometry.coordinates,zoom:qt[null===(Ec=ae.properties)||void 0===Ec||null===(lu=Ec.geocoding)||void 0===lu?void 0:lu.type]}),nt.push(ys))})),ue}))}function reverseGeocodingNominatim(ae,ue){return fetch(`${(0,ut.NominatimBaseUrl)()}/reverse?lat=${ae}&lon=${ue}&zoom=18&format=geocodejson`).then((ae=>ae.json())).then((ae=>{var ue,nt,ut;return geocodeJsonToPlaceName(null===ae||void 0===ae||null===(ue=ae.features)||void 0===ue||null===(nt=ue.shift())||void 0===nt||null===(ut=nt.properties)||void 0===ut?void 0:ut.geocoding)}))}function forwardGeocodingBAN(ae){return forwardGeocodingStandard(ae,(0,ut.AdresseDataGouvBaseURL)())}function geocodeJsonToPlaceName(ae){if(!ae||"object"!=typeof ae)return"";let ue=ae.name,nt=[],ut=[];switch(ae.type){case"hamlet":case"croft":case"isolated_dwelling":case"neighbourhood":case"allotments":case"quarter":case"farm":case"farmyard":case"industrial":case"commercial":case"retail":case"city_block":case"residential":case"locality":case"district":ut.push(ae.city),ut.push(ae.county),ut.push(ae.state),ut.push(ae.country);break;case"city":case"region":ut.push(ae.county),ut.push(ae.state),ut.push(ae.country);break;case"country":break;case"house":case"housenumber":nt.push(ae.housenumber),nt.push(ae.street),nt.push(ae.locality),nt.push(ae.district),ut.push(ae.city),ut.push(ae.county),ut.push(ae.state),ut.push(ae.country);break;default:nt.push(ae.street),nt.push(ae.locality),nt.push(ae.district),ut.push(ae.city),ut.push(ae.county),ut.push(ae.state),ut.push(ae.country)}return nt=nt.filter((ae=>ae)),nt=nt.filter(((ae,ut)=>ae!=ue&&(0===ut||nt[ut-1]!==ae))),nt=nt.length>0?ae.housenumber?nt.slice(0,2).join(" "):nt.shift():null,nt===ue&&(nt=null),ut=ut.filter((ae=>ae)),ut=ut.filter(((ae,qt)=>ae!=ue&&(!nt||!nt.includes(ae))&&(0===qt||ut[qt-1]!==ae))),[ue,nt,ut.shift()].filter((ae=>ae)).join(", ")}function forwardGeocodingStandard(ae,ue){const nt={q:ae.query,limit:ae.limit};if("string"===typeof ae.proximity){const[ue,ut]=ae.proximity.split(",").map((ae=>parseFloat(ae.trim())));nt.lat=ue,nt.lon=ut}return fetch(`${ue}/?${geocoderParamsToURLString(nt)}`).then((ae=>ae.json())).then((ae=>{const ue={features:[]},nt=[];return(ae.features||[]).forEach((ae=>{const ut=geocodeJsonToPlaceName(ae.properties);nt.includes(ut)||"other"==ae.properties.type||(ue.features.push({place_type:["place"],place_name:ut,center:ae.geometry.coordinates,zoom:qt[ae.properties.type]}),nt.push(ut))})),ue}))}},4964:(ae,ue,nt)=>{"use strict";nt.r(ue),nt.d(ue,{autoDetectLocale:()=>autoDetectLocale,getTranslations:()=>getTranslations});var ut=nt(3087),qt=nt(4149),Yt=nt(369),Xt=nt(389),ys=nt(9946),Ec=nt(8302),lu=nt(5222),uu=nt(6909),_u=nt(4895),vu=nt(3979),wu=nt(6920),Hu=nt(9026),qu=nt(6611),Ju=nt(991),_h=nt(7304),ed=nt(8230),td=nt(6984);const id="en",nd={be:ut,da:qt,de:Yt,eo:ys,en:Xt,es:Ec,fr:lu,hu:uu,it:_u,ja:vu,nl:wu,pl:Hu,"pt-BR":qu,sv:Ju,tr:_h,uk:ed,"zh-Hant":td,zh:td};function autoDetectLocale(ae,ue){for(const nt of window.navigator.languages){let ue=nt;switch(ue){case"zh-TW":case"zh-HK":case"zh-MO":ue="zh-Hant";break;case"zh-CN":case"zh-SG":ue="zh-Hans";break;default:ue.length>2&&(ue=nt.substring(0,2))}const ut=ae.find((ae=>ae===ue));if(ut)return ut}return ue}function getTranslations(){let ae=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";const ue=JSON.parse(JSON.stringify(Xt));let nt;if(ae||(ae=autoDetectLocale(Object.keys(nd),id)),nd[ae]&&"en"!==ae&&(nt=nd[ae]),ae.length>2){const ue=ae.substring(0,2);nd[ue]&&(nt=nd[ue])}return nt&&Object.entries(nt).forEach((ae=>{let[nt,ut]=ae;Object.entries(ut).forEach((ae=>{let[ut,qt]=ae;Array.isArray(qt)&&(qt=qt.filter((ae=>null!=ae))),ue[nt][ut]=qt}))})),ue}},2030:(ae,ue,nt)=>{"use strict";nt.r(ue),nt.d(ue,{API:()=>_u.A,PhotoAdapter:()=>vu.A,PresetsManager:()=>wu.A,URLHandler:()=>Hu.A,geocoder:()=>ut,i18n:()=>qt,map:()=>Yt,picture:()=>Xt,semantics:()=>ys,services:()=>Ec,utils:()=>lu,widgets:()=>uu});var ut=nt(3606),qt=nt(4964),Yt=nt(8340),Xt=nt(508),ys=nt(2283),Ec=nt(7208),lu=nt(7343),uu=nt(5995),_u=nt(5254),vu=nt(3727),wu=nt(4207),Hu=nt(4451)},8340:(ae,ue,nt)=>{"use strict";nt.r(ue),nt.d(ue,{MAP_EXPR_QUALITYSCORE:()=>wu,MAP_EXPR_QUALITYSCORE_GPS:()=>vu,MAP_THEMES:()=>uu,RASTER_LAYER_ID:()=>Xt,TILES_PICTURES_SYMBOL_ZOOM:()=>Ec,TILES_PICTURES_ZOOM:()=>ys,VECTOR_STYLES:()=>lu,combineStyles:()=>combineStyles,getMapParamsFromLocalStorage:()=>getMapParamsFromLocalStorage,getMissingLayerStyles:()=>getMissingLayerStyles,getThumbGif:()=>getThumbGif,getUserLayerId:()=>getUserLayerId,getUserSourceId:()=>getUserSourceId,initMapKeyboardHandler:()=>initMapKeyboardHandler,isLabelLayer:()=>isLabelLayer,isNullCoordinates:()=>isNullCoordinates,linkMapAndPhoto:()=>linkMapAndPhoto,mapFiltersFormValues:()=>mapFiltersFormValues,mapFiltersToLayersFilters:()=>mapFiltersToLayersFilters,saveMapParamsToLocalStorage:()=>saveMapParamsToLocalStorage,switchCoefValue:()=>switchCoefValue});var ut=nt(6883),qt=nt(7343),Yt=nt(4964);const Xt="pnx-aerial",ys=15,Ec=18,lu={PICTURES:{paint:{"circle-radius":["interpolate",["linear"],["zoom"],ys,4.5,Ec,6,24,12],"circle-opacity":["interpolate",["linear"],["zoom"],ys,0,ys+1,1],"circle-stroke-color":"#ffffff","circle-stroke-width":["interpolate",["linear"],["zoom"],ys+1,0,ys+2,1,Ec,1.5,24,3]},layout:{}},PICTURES_SYMBOLS:{paint:{"icon-opacity":["interpolate",["linear"],["zoom"],Ec,0,Ec+1,1]},layout:{"icon-image":["case",["==",["get","type"],"equirectangular"],"pnx-arrow-360","pnx-arrow-flat"],"icon-size":["interpolate",["linear"],["zoom"],Ec,.5,24,1],"icon-rotate":["to-number",["get","heading"]],"icon-allow-overlap":!0}},SEQUENCES:{paint:{"line-width":["interpolate",["linear"],["zoom"],0,.5,10,2,14,4,16,5,22,3]},layout:{"line-cap":"square"}},SEQUENCES_PLUS:{paint:{"line-width":["interpolate",["linear"],["zoom"],0,15,ys+1,30,ys+2,0],"line-opacity":0,"line-color":"#ff0000"},layout:{"line-cap":"square"}}},uu={DEFAULT:"default",AGE:"age",TYPE:"type",SCORE:"score",GPS:"gps"},_u=["case",["==",["get","type"],"equirectangular"],["case",["has","h_pixel_density"],["step",["get","h_pixel_density"],...qt.QUALITYSCORE_RES_360_VALUES],1],["case",["has","h_pixel_density"],["step",["get","h_pixel_density"],...qt.QUALITYSCORE_RES_FLAT_VALUES],1]],vu=["case",["has","gps_accuracy"],["step",["get","gps_accuracy"],...qt.QUALITYSCORE_GPS_VALUES],1],wu=["round",["+",["*",_u,qt.QUALITYSCORE_POND_RES],["*",vu,qt.QUALITYSCORE_POND_GPS]]];function getThumbGif(ae){const ue=document.createElement("img");return ue.src=ut,ue.alt=ae.loading,ue.title=ae.loading,ue.classList.add("pnx-map-thumb","pnx-map-thumb-loader"),ue}function isNullCoordinates(ae){return null===ae||void 0===ae||Array.isArray(ae)&&(2===ae.length&&0===ae[0]&&0===ae[1]||ae.length<2)}function isLabelLayer(ae){var ue;return"symbol"===ae.type&&void 0!==(null===ae||void 0===ae||null===(ue=ae.layout)||void 0===ue?void 0:ue["text-field"])&&(void 0===ae.minzoom||ae.minzoom<15)}function combineStyles(ae,ue){var nt,ut,qt;const ys=ae.api.getMapStyle();if(ys.layers=ys.layers||[],ys.layers=ys.layers.concat(getMissingLayerStyles(ys.sources,ys.layers)),ys.metadata||(ys.metadata={}),ue.supplementaryStyle&&(Object.assign(ys.sources,ue.supplementaryStyle.sources||{}),Object.assign(ys.metadata,ue.supplementaryStyle.metadata||{}),ys.layers=ys.layers.concat(ue.supplementaryStyle.layers||[])),ys.layers=ys.layers.filter((ae=>ae.id)),ue.raster&&(ys.sources["pnx-aerial"]=ue.raster,ys.layers.push({id:Xt,type:"raster",source:"pnx-aerial",layout:{visibility:"aerial"===ue.background?"visible":"none"}})),null!==ae&&void 0!==ae&&null!==(nt=ae.users)&&void 0!==nt&&nt.includes("geovisio")||ys.layers.forEach((ae=>{"geovisio"===ae.source&&(ae.layout||(ae.layout={}),ae.layout.visibility="none")})),ys.layers.sort(((ae,ue)=>isLabelLayer(ae)&&!isLabelLayer(ue)?1:!isLabelLayer(ae)&&isLabelLayer(ue)?-1:ae.id.startsWith("geovisio")&&!ue.id.startsWith("geovisio")?1:!ae.id.startsWith("geovisio")&&ue.id.startsWith("geovisio")?-1:ae.id.endsWith("_pictures")&&!ue.id.endsWith("_pictures")?1:!ae.id.endsWith("_pictures")&&ue.id.endsWith("_pictures")?-1:0)),null!==(ut=ys.metadata)&&void 0!==ut&&ut["panoramax:locales"]||(ys.metadata["panoramax:locales"]=["fr","en","de","es","ru","pt","zh","hi","latin"]),ys.metadata["panoramax:locales"]){let ue=ae.lang||(0,Yt.autoDetectLocale)(ys.metadata["panoramax:locales"],"latin");ue.includes("-")&&(ue=ue.split("-")[0]),ue.includes("_")&&(ue=ue.split("_")[0]),ys.layers.forEach((ae=>{isLabelLayer(ae)&&ae.layout["text-field"].includes("name:latin")&&(ae.layout["text-field"]=["coalesce",["get",`name:${ue}`],["get","name:latin"],["get","name"]])}))}const Ec=ys.layers.find((ae=>"place_label_city"==ae.id));let lu=ys.layers.find((ae=>"place_label_capital"==ae.id));return Ec&&!lu&&(Ec.paint={"text-color":"hsl(0, 0%, 0%)","text-halo-blur":0,"text-halo-color":"hsla(0, 0%, 100%, 1)","text-halo-width":3},Ec.layout["text-letter-spacing"]=.1,lu=JSON.parse(JSON.stringify(Ec)),lu.id="place_label_capital",lu.filter.push(["<=","capital",2]),Ec.filter.push([">","capital",2]),ys.layers.push(lu)),null!==ys&&void 0!==ys&&null!==(qt=ys.sources)&&void 0!==qt&&qt.plan_ign&&(ys.sources.plan_ign.maxzoom=18),ys}function getMissingLayerStyles(){let ae=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},ue=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];const nt=[];return Object.keys(ae).filter((ae=>void 0===ue.find((ue=>(null===ue||void 0===ue?void 0:ue.source)===ae)))).forEach((ae=>{ae.startsWith("geovisio")&&(nt.push({id:`${ae}_sequences`,type:"line",source:ae,"source-layer":"sequences",layout:{...lu.SEQUENCES.layout},paint:{...lu.SEQUENCES.paint,"line-color":qt.COLORS.BASE}}),nt.push({id:`${ae}_sequences_plus`,type:"line",source:ae,"source-layer":"sequences",layout:{...lu.SEQUENCES_PLUS.layout},paint:{...lu.SEQUENCES_PLUS.paint}}),nt.push({id:`${ae}_pictures_symbols`,type:"symbol",source:ae,"source-layer":"pictures",...lu.PICTURES_SYMBOLS}),nt.push({id:`${ae}_pictures_symbols`,type:"symbol",source:ae,"source-layer":"pictures",...lu.PICTURES_SYMBOLS}),nt.push({id:`${ae}_pictures`,type:"circle",source:ae,"source-layer":"pictures",layout:{...lu.PICTURES.layout},paint:{...lu.PICTURES.paint,"circle-color":qt.COLORS.BASE}}))})),ue.filter((ae=>{var nt;return(null===ae||void 0===ae||null===(nt=ae.id)||void 0===nt?void 0:nt.endsWith("_sequences"))&&void 0===ue.find((ue=>(null===ue||void 0===ue?void 0:ue.id)===ae.id+"_plus"))})).forEach((ae=>{nt.push({id:`${ae.id}_plus`,type:"line",source:ae.source,"source-layer":ae["source-layer"],layout:{...lu.SEQUENCES_PLUS.layout},paint:{...lu.SEQUENCES_PLUS.paint}})})),ue.filter((ae=>{var nt;return(null===ae||void 0===ae||null===(nt=ae.id)||void 0===nt?void 0:nt.endsWith("_pictures"))&&void 0===ue.find((ue=>(null===ue||void 0===ue?void 0:ue.id)===ae.id+"_symbols"))})).forEach((ae=>{nt.unshift({id:`${ae.id}_symbols`,type:"symbol",source:ae.source,"source-layer":"pictures",...lu.PICTURES_SYMBOLS}),ae.paint=Object.assign(ae.paint||{},lu.PICTURES.paint),ae.layout=Object.assign(ae.layout||{},lu.PICTURES.layout)})),nt}function mapFiltersFormValues(ae,ue,nt){const ut=null===ae||void 0===ae?void 0:ae.shadowRoot.getElementById("pnx-filter-date-from"),qt=null===ae||void 0===ae?void 0:ae.shadowRoot.getElementById("pnx-filter-date-end"),Yt=null===ae||void 0===ae?void 0:ae.shadowRoot.querySelectorAll("input[name='pnx-filter-type']");let Xt="";for(let lu=0;lu<Yt.length;lu++){const ae=Yt[lu];if(ae.checked){Xt=ae.value;break}}let ys=[],Ec=[];if(nt){const ue=null===ae||void 0===ae?void 0:ae.shadowRoot.getElementById("pnx-filter-qualityscore");ys=((null===ue||void 0===ue?void 0:ue.grade)||"").split(",").map((ae=>parseInt(ae))).filter((ae=>!isNaN(ae)));const nt=null===ae||void 0===ae?void 0:ae.shadowRoot.getElementById("pnx-filter-gps");Ec=((null===nt||void 0===nt?void 0:nt.grade)||"").split(",").map((ae=>parseInt(ae))).filter((ae=>!isNaN(ae)))}return{minDate:null===ut||void 0===ut?void 0:ut.value,maxDate:null===qt||void 0===qt?void 0:qt.value,pic_type:Xt,theme:null===ue||void 0===ue?void 0:ue.value,qualityscore:ys,gps:Ec}}function mapFiltersToLayersFilters(ae){let ue=arguments.length>1&&void 0!==arguments[1]&&arguments[1],nt={},ut=[],qt=[],Yt=!1;if(ae.minDate&&""!==ae.minDate&&(nt.minDate=ae.minDate,ut.push([">=",["get","date"],ae.minDate]),qt.push([">=",["get","ts"],ae.minDate])),ae.maxDate&&""!==ae.maxDate){nt.maxDate=ae.maxDate,ut.push(["<=",["get","date"],ae.maxDate]);let ue=new Date(ae.maxDate);ue.setDate(ue.getDate()+1),ue=ue.toISOString().split("T")[0],qt.push(["<=",["get","ts"],ue])}if(ae.pic_type&&""!==ae.pic_type&&(nt.pic_type="flat"===ae.pic_type?"flat":"equirectangular",ut.push(["==",["get","type"],nt.pic_type]),qt.push(["==",["get","type"],nt.pic_type])),ue&&(Yt=!0),ae.camera&&""!==ae.camera){nt.camera=ae.camera;const ue=ae.camera.toLowerCase().trim()+" ",Yt=ae.camera.toLowerCase().trim()+"zzzzzzzzzzzzzzzzzzzz",Xt=["collator",{"case-sensitive":!1,"diacritic-sensitive":!1}];ut.push([">=",["get","model"],ue,Xt]),ut.push(["<=",["get","model"],Yt,Xt]),qt.push([">=",["get","model"],ue,Xt]),qt.push(["<=",["get","model"],Yt,Xt])}return ae.qualityscore&&ae.qualityscore.length>0&&(nt.qualityscore=ae.qualityscore,ut.push(["in",wu,["literal",nt.qualityscore]]),qt.push(["in",wu,["literal",nt.qualityscore]])),ae.gps&&ae.gps.length>0&&(nt.gps=ae.gps,ut.push(["in",vu,["literal",nt.gps]]),qt.push(["in",vu,["literal",nt.gps]])),ae.theme&&Object.values(uu).includes(ae.theme)&&(nt.theme=ae.theme,Yt=!0),0==ut.length?ut=null:ut.unshift("all"),0==qt.length?qt=null:(qt.unshift("all"),qt=["step",["zoom"],!0,ys,qt]),{mapFilters:nt,mapSeqFilters:ut,mapPicFilters:qt,reloadMapStyle:Yt}}function getUserLayerId(ae,ue){return`${getUserSourceId(ae)}_${ue}`}function getUserSourceId(ae){return"geovisio"===ae?"geovisio":"geovisio_"+ae}function switchCoefValue(ae,ue){if(Array.isArray(ae))return ae.map((ae=>switchCoefValue(ae,ue)));if("object"===typeof ae&&null!==ae){const nt={};for(const ut in ae)nt[ut]=switchCoefValue(ae[ut],ue);return nt}return"string"===typeof ae&&ae.startsWith("coef")?ue:ae}function linkMapAndPhoto(ae){const onPicLoad=ue=>{var nt,ut,Yt,Xt,ys,Ec;(0,qt.isNullId)(ue.detail.picId)?(ae.map.displayPictureMarker(),null!==ae&&void 0!==ae&&null!==(nt=ae.isMapWide)&&void 0!==nt&&nt.call(ae)&&(null===ae||void 0===ae||null===(ut=ae.mini)||void 0===ut||ut.setAttribute("collapsed",""))):(ae.map.displayPictureMarker(ue.detail.lon,ue.detail.lat,ae.psv.getXY().x,ue.detail.first&&!isNullCoordinates(null===(Yt=ae._initParams)||void 0===Yt||null===(Xt=Yt.getMapPostInit())||void 0===Xt?void 0:Xt.center),ue.detail.picId),null!==ae&&void 0!==ae&&null!==(ys=ae.isMapWide)&&void 0!==ys&&ys.call(ae)&&(null===ae||void 0===ae||null===(Ec=ae.mini)||void 0===Ec||Ec.removeAttribute("collapsed")))};ae.psv.addEventListener("picture-loading",onPicLoad),ae.psv.addEventListener("picture-loaded",onPicLoad),ae.psv.addEventListener("view-rotated",(()=>{let ue=ae.psv.getPosition().yaw*(180/Math.PI);ue+=ae.psv.getPictureOriginalHeading(),ae.map._picMarker.setRotation(ue)})),ae.psv.addEventListener("picture-preview-started",(ue=>{ae.map._picMarkerPreview.setLngLat(ue.detail.coordinates).setRotation(ue.detail.direction||0).addTo(ae.map)})),ae.psv.addEventListener("picture-preview-stopped",(()=>{ae.map._picMarkerPreview.remove()})),ae.psv.addEventListener("picture-loaded",(ue=>{ae.isWidthSmall()&&ae._picPopup&&ue.detail.picId==ae._picPopup._picId&&ae._picPopup.remove()})),ae.map.on("picture-click",(ue=>{ae.select(ue.seqId,ue.picId),!ae.psv._myVTour.state.currentNode&&null!==ae&&void 0!==ae&&ae._setFocus&&ae._setFocus("pic")})),ae.map.on("sequence-click",(ue=>{ae.api.getPicturesAroundCoordinates(ue.coordinates.lat,ue.coordinates.lng,1,1,ue.seqId).then((ue=>{var nt,ut;(null===ue||void 0===ue||null===(nt=ue.features)||void 0===nt?void 0:nt.length)>0&&(ae.select(null===(ut=ue.features[0])||void 0===ut?void 0:ut.collection,ue.features[0].id),!ae.psv.getPictureMetadata()&&null!==ae&&void 0!==ae&&ae._setFocus&&ae._setFocus("pic"))}))})),ae._setFocus&&(ae.psv.addEventListener("dblclick",(()=>{ae.isMapWide()&&ae._setFocus("pic")})),ae.map.on("dblclick",(()=>{ae.isMapWide()?"any"===ae.psv.getPicturesNavigation()&&ae.select():ae._setFocus("map")})))}function initMapKeyboardHandler(ae){ae.map.keyboard.keydown=function(ue){if(ue.altKey||ue.ctrlKey||ue.metaKey)return;switch(ue.key){case"*":case"5":return void ae.moveCenter();case"PageUp":case"9":return void ae.psv.goToNextPicture();case"PageDown":case"3":return void ae.psv.goToPrevPicture();case"Home":case"7":return ue.stopPropagation(),void ae._toggleFocus();case"End":case"1":return void ae.mini.toggleAttribute("collapsed");case" ":case"0":return void ae.psv.toggleSequencePlaying()}let nt=0,ut=0,qt=0,Yt=0,Xt=0;switch(ue.keyCode){case 61:case 107:case 171:case 187:nt=1;break;case 189:case 109:case 173:nt=-1;break;case 37:case 100:ue.shiftKey?ut=-1:(ue.preventDefault(),Yt=-1);break;case 39:case 102:ue.shiftKey?ut=1:(ue.preventDefault(),Yt=1);break;case 38:case 104:ue.shiftKey?qt=1:(ue.preventDefault(),Xt=-1);break;case 40:case 98:ue.shiftKey?qt=-1:(ue.preventDefault(),Xt=1);break;default:return}return this._rotationDisabled&&(ut=0,qt=0),{cameraAnimation:ae=>{const ys=this._tr;ae.easeTo({duration:300,easeId:"keyboardHandler",easing:ae=>ae*(2-ae),zoom:nt?Math.round(ys.zoom)+nt*(ue.shiftKey?2:1):ys.zoom,bearing:ys.bearing+ut*this._bearingStep,pitch:ys.pitch+qt*this._pitchStep,offset:[-Yt*this._panStep,-Xt*this._panStep],center:ys.center},{originalEvent:ue})}}}.bind(ae.map.keyboard)}const Hu="pnx-map-parameters";function getMapParamsFromLocalStorage(){const ae=localStorage.getItem(Hu);if(!ae)return{};try{return JSON.parse(ae)}catch(ue){return console.warn("Can't read map parameters stored in localStorage",ue),{}}}function saveMapParamsToLocalStorage(ae){const save=()=>localStorage.setItem(Hu,JSON.stringify({center:Object.fromEntries(Object.entries(ae.getCenter()).map((ae=>{let[ue,nt]=ae;return[ue,nt.toFixed(7)]}))),zoom:ae.getZoom().toFixed(1),background:ae.getBackground(),theme:ae._mapFilters.theme}));ae.on("background-changed",save),ae.on("filters-changed",save),ae.on("moveend",save),ae.on("zoomend",save),ae.on("dragend",save),ae.on("boxzoomend",save)}},508:(ae,ue,nt)=>{"use strict";nt.r(ue),nt.d(ue,{apiFeatureToPSVNode:()=>apiFeatureToPSVNode,filterRelatedPicsLinks:()=>filterRelatedPicsLinks,getCroppedPanoData:()=>getCroppedPanoData,getExifFloat:()=>getExifFloat,getGPSPrecision:()=>getGPSPrecision,getHashTags:()=>getHashTags,getNodeCaption:()=>getNodeCaption,getSphereCorrection:()=>getSphereCorrection,hasAnnotations:()=>hasAnnotations,sortPicturesInDirection:()=>sortPicturesInDirection});var ut=nt(8407),qt=nt(6830),Yt=nt(7343);const Xt=(0,Yt.svgToPSVLink)(ut,"white"),ys=(0,Yt.svgToPSVLink)(qt,Yt.COLORS.NEXT);function getExifFloat(ae){if(!([null,void 0,""].includes(ae)||"string"===typeof ae&&""===ae.trim())){if("number"===typeof ae)return ae;if("string"!==typeof ae);else{if(/^-?\d+(\.\d+)?\/-?\d+(\.\d+)?$/.test(ae)){const ue=ae.split("/").map((ae=>parseFloat(ae)));return ue[0]/ue[1]}try{return parseFloat(ae)}catch(ue){}}}}function getGPSPrecision(ae){var ue,nt,ut,qt,Yt;let Xt=null;const ys=(null===ae||void 0===ae||null===(ue=ae.properties)||void 0===ue?void 0:ue["quality:horizontal_accuracy"])||getExifFloat(null===ae||void 0===ae||null===(nt=ae.properties)||void 0===nt||null===(ut=nt.exif)||void 0===ut?void 0:ut["Exif.GPSInfo.GPSHPositioningError"]),Ec=getExifFloat(null===ae||void 0===ae||null===(qt=ae.properties)||void 0===qt||null===(Yt=qt.exif)||void 0===Yt?void 0:Yt["Exif.GPSInfo.GPSDOP"]);return void 0!==ys?Xt=`${ys} m`:void 0!==Ec&&(Xt=Ec<1?"ideal":Ec<2?"excellent":Ec<5?"good":Ec<10?"moderate":Ec<20?"fair":"poor"),Xt}function getSphereCorrection(ae){var ue,nt,ut,qt;let Yt=null===(ue=ae.properties)||void 0===ue?void 0:ue["view:azimuth"];if(void 0===Yt){var Xt,ys;const ue=getExifFloat(null===(Xt=ae.properties)||void 0===Xt||null===(ys=Xt.exif)||void 0===ys?void 0:ys["Exif.GPSInfo.GPSImgDirection"]);void 0!==ue&&(Yt=ue)}Yt=Yt||0;let Ec=null===(nt=ae.properties)||void 0===nt?void 0:nt["pers:yaw"],lu=["Xmp.GPano.PoseHeadingDegrees","Xmp.Camera.Yaw","Exif.MpfInfo.MPFYawAngle"];if(void 0===Ec)for(let ed of lu){var uu,_u;const ue=getExifFloat(null===(uu=ae.properties)||void 0===uu||null===(_u=uu.exif)||void 0===_u?void 0:_u[ed]);if(void 0!==ue){Ec=ue;break}}Ec=Ec||0,Math.round(Yt)===Math.round(Ec)&&Ec>0&&console.warn("Picture with UUID",ae.id,"has same GPS Image direction and Yaw, could cause rendering issues");let vu=null===(ut=ae.properties)||void 0===ut?void 0:ut["pers:pitch"];if(lu=["Xmp.GPano.PosePitchDegrees","Xmp.Camera.Pitch","Exif.MpfInfo.MPFPitchAngle"],void 0===vu)for(let ed of lu){var wu,Hu;const ue=getExifFloat(null===(wu=ae.properties)||void 0===wu||null===(Hu=wu.exif)||void 0===Hu?void 0:Hu[ed]);if(void 0!==ue){vu=ue;break}}vu=vu||0;let qu=null===(qt=ae.properties)||void 0===qt?void 0:qt["pers:roll"];if(lu=["Xmp.GPano.PoseRollDegrees","Xmp.Camera.Roll","Exif.MpfInfo.MPFRollAngle"],void 0===qu)for(let ed of lu){var Ju,_h;const ue=getExifFloat(null===(Ju=ae.properties)||void 0===Ju||null===(_h=Ju.exif)||void 0===_h?void 0:_h[ed]);if(void 0!==ue){qu=ue;break}}return qu=qu||0,0!==vu&&0!==qu?{pan:Ec*Math.PI/180,tilt:vu*Math.PI/180,roll:qu*Math.PI/180}:{}}function getCroppedPanoData(ae,ue){var nt,ut,qt;let Yt;var Xt,ys;if(null!==(nt=ae.properties)&&void 0!==nt&&nt["pers:interior_orientation"]&&(null!==(Xt=ae.properties["pers:interior_orientation"])&&void 0!==Xt&&Xt.visible_area&&null!==(ys=ae.properties["pers:interior_orientation"])&&void 0!==ys&&ys.sensor_array_dimensions)){const ue=ae.properties["pers:interior_orientation"].visible_area,nt=ae.properties["pers:interior_orientation"].sensor_array_dimensions;try{Yt={fullWidth:parseInt(nt[0]),fullHeight:parseInt(nt[1]),croppedX:parseInt(ue[0]),croppedY:parseInt(ue[1]),croppedWidth:parseInt(nt[0])-parseInt(ue[2])-parseInt(ue[0]),croppedHeight:parseInt(nt[1])-parseInt(ue[3])-parseInt(ue[1])}}catch(qu){console.warn("Invalid pers:interior_orientation values for cropped panorama "+ae.id)}}if(!Yt&&null!==(ut=ae.properties)&&void 0!==ut&&ut.exif)try{var Ec,lu,uu,_u,vu,wu;Yt={fullWidth:parseInt(null===(Ec=ae.properties.exif)||void 0===Ec?void 0:Ec["Xmp.GPano.FullPanoWidthPixels"]),fullHeight:parseInt(null===(lu=ae.properties.exif)||void 0===lu?void 0:lu["Xmp.GPano.FullPanoHeightPixels"]),croppedX:parseInt(null===(uu=ae.properties.exif)||void 0===uu?void 0:uu["Xmp.GPano.CroppedAreaLeftPixels"]),croppedY:parseInt(null===(_u=ae.properties.exif)||void 0===_u?void 0:_u["Xmp.GPano.CroppedAreaTopPixels"]),croppedWidth:parseInt(null===(vu=ae.properties.exif)||void 0===vu?void 0:vu["Xmp.GPano.CroppedAreaImageWidthPixels"]),croppedHeight:parseInt(null===(wu=ae.properties.exif)||void 0===wu?void 0:wu["Xmp.GPano.CroppedAreaImageHeightPixels"])},Yt.croppedWidth>Yt.fullWidth&&(Yt.fullWidth=Yt.croppedWidth),Yt.croppedHeight>Yt.fullHeight&&(Yt.fullHeight=Yt.croppedHeight)}catch(qu){console.warn("Invalid XMP.GPano values for cropped panorama "+ae.id)}if(Yt&&(Yt=Object.fromEntries(Object.entries(Yt||{}).filter((ae=>!isNaN(ae[1])))),(!Yt.fullWidth&&!Yt.croppedWidth&&Yt.fullHeight&&!Yt.croppedHeight||Yt.fullWidth&&!Yt.croppedWidth&&!Yt.fullHeight&&!Yt.croppedHeight||Yt.fullWidth&&!Yt.croppedWidth&&Yt.fullHeight&&!Yt.croppedHeight||Yt.fullWidth==Yt.croppedWidth&&Yt.fullHeight==Yt.croppedHeight)&&(Yt={})),null!==(qt=Yt)&&void 0!==qt&&qt.fullWidth&&null!==ue&&void 0!==ue&&ue.width){var Hu;let ae=ue.width/((null===(Hu=Yt)||void 0===Hu?void 0:Hu.croppedWidth)||Yt.fullWidth);Yt={fullWidth:void 0!==Yt.fullWidth?Math.floor(Yt.fullWidth*ae):void 0,fullHeight:void 0!==Yt.fullHeight?Math.floor(Yt.fullHeight*ae):void 0,croppedWidth:void 0!==Yt.croppedWidth?Math.floor(Yt.croppedWidth*ae):void 0,croppedHeight:void 0!==Yt.croppedHeight?Math.floor(Yt.croppedHeight*ae):void 0,croppedX:void 0!==Yt.croppedX?Math.floor(Yt.croppedX*ae):void 0,croppedY:void 0!==Yt.croppedY?Math.floor(Yt.croppedY*ae):void 0}}return Yt||{}}function sortPicturesInDirection(ae){return(ue,nt)=>"related"!=ue.rel&&"related"!=nt.rel?0:"related"!=ue.rel?-1:"related"!=nt.rel?1:ue.date==nt.date?(0,Yt.getDistance)(ae,ue.geometry.coordinates)-(0,Yt.getDistance)(ae,nt.geometry.coordinates):nt.date.localeCompare(ue.date)}function getNodeCaption(ae,ue){var nt,ut,qt;const Yt={};if(null!==ae&&void 0!==ae&&null!==(nt=ae.properties)&&void 0!==nt&&nt.datetimetz){Yt.date=new Date(ae.properties.datetimetz);const ue=ae.properties.datetimetz.match(/([+-]\d{2}):(\d{2})$|Z$/);ue&&("Z"===ue[0]?Yt.tz="UTC":Yt.tz=ue[0])}else null!==ae&&void 0!==ae&&null!==(ut=ae.properties)&&void 0!==ut&&ut.datetime&&(Yt.date=new Date(ae.properties.datetime));if(null!==ae&&void 0!==ae&&ae.providers){var Xt;const ue=null===ae||void 0===ae||null===(Xt=ae.providers)||void 0===Xt?void 0:Xt.filter((ae=>{var ue;return null===ae||void 0===ae||null===(ue=ae.roles)||void 0===ue?void 0:ue.includes("producer")}));if((null===ue||void 0===ue?void 0:ue.length)>=0){const ae={};ue.map((ae=>ae.name)).forEach((ue=>{const nt=ue.toLowerCase().replace(/\s/g,"");ae[nt]?ae[nt].push(ue):ae[nt]=[ue]})),Yt.producer=[],Object.values(ae).forEach((ae=>{const ue=ae[0],nt=ae.find((ae=>ae.toLowerCase()!=ae));Yt.producer.push(nt||ue)}))}}if(null!==ae&&void 0!==ae&&null!==(qt=ae.properties)&&void 0!==qt&&qt.license&&(Yt.license=ae.properties.license,null!==ae&&void 0!==ae&&ae.links)){const nt=ae.links.find((ae=>"license"===(null===ae||void 0===ae?void 0:ae.rel)));nt&&(Yt.license=`<a href="${nt.href}" title="${ue.pnx.metadata_general_license_link}" target="_blank">${Yt.license}</a>`)}return Yt}function apiFeatureToPSVNode(ae,ue){var nt,ut,qt,Yt,Xt,ys,Ec,lu,uu,_u,vu,wu,Hu,qu,Ju,_h;let ed=arguments.length>2&&void 0!==arguments[2]&&arguments[2],td=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,id=arguments.length>4&&void 0!==arguments[4]?arguments[4]:ae=>ae;const nd=null!=(null===(nt=ae.properties)||void 0===nt||null===(ut=nt["pers:interior_orientation"])||void 0===ut?void 0:ut.field_of_view);let rd=nd?parseInt(ae.properties["pers:interior_orientation"].field_of_view):70;const ad=360===rd,sd=id((Object.values(ae.assets).find((ae=>{var ue;return null===ae||void 0===ae||null===(ue=ae.roles)||void 0===ue?void 0:ue.includes("data")}))||{}).href),od=null===ae||void 0===ae||null===(qt=ae.properties)||void 0===qt||null===(Yt=qt["tiles:tile_matrix_sets"])||void 0===Yt?void 0:Yt.geovisio,ld=null===(Xt=ae.links)||void 0===Xt||null===(ys=Xt.find)||void 0===ys?void 0:ys.call(Xt,(ae=>"prev"===(null===ae||void 0===ae?void 0:ae.rel)&&"application/geo+json"===(null===ae||void 0===ae?void 0:ae.type))),cd=null===(Ec=ae.links)||void 0===Ec||null===(lu=Ec.find)||void 0===lu?void 0:lu.call(Ec,(ae=>"next"===(null===ae||void 0===ae?void 0:ae.rel)&&"application/geo+json"===(null===ae||void 0===ae?void 0:ae.type))),ud=Object.values(ae.assets).find((ae=>{var ue;return(null===(ue=ae.roles)||void 0===ue?void 0:ue.includes("visual"))&&"image/webp"===ae.type})),hd=Object.values(ae.assets).find((ae=>{var ue;return(null===(ue=ae.roles)||void 0===ue?void 0:ue.includes("visual"))&&"image/jpeg"===ae.type})),dd=id((ud||hd).href),pd=id(null===(uu=Object.values(ae.assets).find((ae=>{var ue;return(null===(ue=ae.roles)||void 0===ue?void 0:ue.includes("thumbnail"))&&"image/jpeg"===ae.type})))||void 0===uu?void 0:uu.href),md=(null===ae||void 0===ae||null===(_u=ae.asset_templates)||void 0===_u?void 0:_u.tiles_webp)||(null===ae||void 0===ae||null===(vu=ae.asset_templates)||void 0===vu?void 0:vu.tiles),gd=getCroppedPanoData(ae),fd=null===(wu=ae.links)||void 0===wu||null===(Hu=wu.find)||void 0===Hu?void 0:Hu.call(wu,(ae=>"via"===(null===ae||void 0===ae?void 0:ae.rel)&&"application/json"===(null===ae||void 0===ae?void 0:ae.type))),Ad=null===(qu=ae.properties)||void 0===qu||null===(Ju=qu["pers:interior_orientation"])||void 0===Ju?void 0:Ju.sensor_array_dimensions;let yd;if(Object.keys(gd).length>0)yd={baseUrl:ed?sd:dd,origBaseUrl:ed?sd:dd,hdUrl:sd,thumbUrl:pd,basePanoData:ed?gd:ue=>getCroppedPanoData(ae,ue),cropData:gd,width:gd.fullWidth,cols:2,rows:1,tileUrl:()=>null};else if(ad&&od)yd={baseUrl:dd,origBaseUrl:dd,basePanoData:ae=>({fullWidth:ae.width,fullHeight:ae.height}),hdUrl:sd,thumbUrl:pd,cols:od&&od.tileMatrix[0].matrixWidth,rows:od&&od.tileMatrix[0].matrixHeight,width:od&&od.tileMatrix[0].matrixWidth*od.tileMatrix[0].tileWidth,tileUrl:od&&((ae,ue)=>id(md.href.replace(/\{TileCol\}/g,ae).replace(/\{TileRow\}/g,ue)))};else{const getFlatCrop=ae=>{ae.width<ae.height&&!nd&&(rd=35);const ue=rd*ae.height/ae.width,nt=360*ae.width/rd,ut=180*ae.height/ue;return{fullWidth:Math.floor(nt),fullHeight:Math.floor(ut),croppedWidth:ae.width,croppedHeight:ae.height,croppedX:Math.floor((nt-ae.width)/2),croppedY:Math.floor((ut-ae.height)/2)}};let ae=Ad?getFlatCrop({width:Ad[0],height:Ad[1]}):null;yd={baseUrl:ed?sd:dd,origBaseUrl:ed?sd:dd,hdUrl:sd,thumbUrl:pd,basePanoData:getFlatCrop,cropData:ae,width:(null===ae||void 0===ae?void 0:ae.fullWidth)||2,cols:2,rows:1,tileUrl:()=>null}}null!==(_h=ae.properties)&&void 0!==_h&&_h.semantics&&(ae.properties.semantics=ae.properties.semantics.filter((ae=>Object.keys(ae).length>0)));return{id:ae.id,caption:getNodeCaption(ae,ue),panorama:yd,links:filterRelatedPicsLinks(ae,td),gps:ae.geometry.coordinates,sequence:{id:ae.collection,nextPic:cd?cd.id:void 0,prevPic:ld?ld.id:void 0},sphereCorrection:getSphereCorrection(ae),horizontalFov:rd,origInstance:fd,properties:ae.properties}}function filterRelatedPicsLinks(ae){var ue;let nt=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;const ut=ae.links.filter((ae=>["next","prev","related"].includes(null===ae||void 0===ae?void 0:ae.rel)&&"application/geo+json"===(null===ae||void 0===ae?void 0:ae.type))).filter((ae=>!nt||nt(ae))).map((ae=>(ae.datetime&&(ae.date=ae.datetime.split("T")[0]),ae))),qt=ae.geometry.coordinates,Ec=[],lu={N:[],ENE:[],ESE:[],S:[],WSW:[],WNW:[]};for(let Xt of ut){lu[(0,Yt.getSimplifiedAngle)(qt,Xt.geometry.coordinates)].push(Xt)}for(let Yt in lu){const ae=lu[Yt];0!=ae.length&&(ae.sort(sortPicturesInDirection(qt)),Ec.push(ae.shift()))}let arrowStyle=ae=>"related"===ae.rel?{element:(0,Yt.getArrow)(ys),size:{width:128/3,height:128}}:{element:(0,Yt.getArrow)(Xt),size:{width:75,height:75}};const uu=-((null===(ue=ae.properties)||void 0===ue?void 0:ue["view:azimuth"])||0)*(Math.PI/180);return Ec.map((ae=>({nodeId:ae.id,gps:ae.geometry.coordinates,arrowStyle:arrowStyle(ae),linkOffset:{yaw:uu}})))}function getHashTags(ae){var ue;if(null===ae||void 0===ae||null===(ue=ae.properties)||void 0===ue||!ue.semantics)return[];const nt=ae.properties.semantics.filter((ae=>"hashtags"===ae.key)),ut=[];return nt.forEach((ae=>ae.value.split(";").forEach((ae=>ut.push(ae.trim()))))),ut}function hasAnnotations(ae){var ue,nt;return(null===ae||void 0===ae||null===(ue=ae.properties)||void 0===ue||null===(nt=ue.annotations)||void 0===nt?void 0:nt.length)>0}},2283:(ae,ue,nt)=>{"use strict";nt.r(ue),nt.d(ue,{SEMANTICS_OVERLAYS:()=>lu,computeDiffTags:()=>computeDiffTags,decodeBasicTag:()=>decodeBasicTag,decodeKey:()=>decodeKey,groupByPrefix:()=>groupByPrefix,parseSemanticsString:()=>parseSemanticsString});var ut=nt(4542),qt=nt(5995),Yt=nt(7929),Xt=nt(1760),ys=nt(9472),Ec=nt(7208);const lu=[["features","semantics IS NOT NULL",{metadata:{name:"All features"},type:"circle",layout:{visibility:"none"},paint:{"circle-radius":4,"circle-color":"#00897B"}}],["tfsigns",'"semantics.osm|traffic_sign" IS NOT NULL',{metadata:{name:"Traffic signs"},type:"symbol",layout:{visibility:"none","icon-overlap":"never","icon-image":["case",["in",";",["get","osm|traffic_sign"]],"pnx-tfsigns-fr:0_many",["==",["slice",["get","osm|traffic_sign"],0,2],"FR"],["concat","pnx-tfsigns-fr:",["slice",["get","osm|traffic_sign"],3]],["==",["get","osm|traffic_sign"],"yes"],"pnx-tfsigns-fr:0_unknown",["has","osm|traffic_sign"],"pnx-tfsigns-fr:0_unknown",""]}},{"pnx-tfsigns-fr":`${(0,Ec.PanoramaxPresetsURL)()}/sprites/trafficsigns_fr`}]];function valToValLink(ae,ue,nt){return ut.qy`
2975
+ `}}Zoom.properties={_lastWantedZoom:{state:!0}},customElements.define("pnx-widget-zoom",Zoom)},222:(ae,ue,nt)=>{"use strict";nt.r(ue),nt.d(ue,{CopyCoordinates:()=>ut.A,GeoSearch:()=>qt.A,Legend:()=>Yt.A,MapFiltersButton:()=>Xt.A,MapLayersButton:()=>ys.A,OSMEditors:()=>Ec.A,PictureLegendActions:()=>lu.A,Player:()=>uu.A,SemanticsFiltersButton:()=>_u.A,Zoom:()=>vu.A});var ut=nt(5114),qt=nt(2603),Yt=nt(4385),Xt=nt(4529),ys=nt(1614),Ec=nt(5789),lu=nt(8806),uu=nt(8305),_u=nt(6524),vu=nt(3023)},5254:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>API});var ut=nt(7343);class API extends EventTarget{constructor(ae){let ue=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(super(),null===ae||void 0===ae||"string"!==typeof ae){const ae=new Error("endpoint parameter is empty or not a valid string");throw this.dispatchEvent(new CustomEvent("broken",{detail:{error:ae}})),ae}if(ae.startsWith("/")&&(ae=window.location.href.split("/").slice(0,3).join("/")+ae),!API.isValidHttpUrl(ae)){const ue=new Error(`endpoint parameter is not a valid URL: ${ae}`);throw this.dispatchEvent(new CustomEvent("broken",{detail:{error:ue}})),ue}this._endpoint=ae,this._isReady=0,this._dataBbox=null,this._fetchOpts=(null===ue||void 0===ue?void 0:ue.fetch)||{},this._metadata={},this._configuration=null,ue.skipReadLanding||(this._readLanding=fetch(ae,this._getFetchOptions()).then((ae=>ae.json())).then((ae=>this._parseLanding(ae,ue))).catch((ae=>(this._isReady=-1,console.error(ae),this.dispatchEvent(new CustomEvent("broken",{detail:{error:ae}})),Promise.reject("Viewer failed to communicate with API")))).then((()=>this._loadMapStyles(ue.style,ue.users))).then((()=>(this._isReady=1,this.dispatchEvent(new Event("ready")),"API is ready"))))}onceReady(){return-1==this._isReady?Promise.reject("Viewer failed to communicate with API"):1==this._isReady?Promise.resolve("API is ready"):this._readLanding}isReady(){return 1==this._isReady}getAvailableFeatures(){return Object.entries(this._endpoints).filter((ae=>null!==ae[1])).map((ae=>ae[0]))}getUnavailableFeatures(){return Object.entries(this._endpoints).filter((ae=>null===ae[1])).map((ae=>ae[0]))}_parseLanding(ae,ue){var nt,ut;if(this._endpoints={collections:null,search:null,style:null,user_style:null,tiles:(null===ue||void 0===ue?void 0:ue.tiles)||null,user_tiles:null,user_search:null,collection_preview:null,item_preview:null,rss:null,report:null},!ae||!ae.links||!Array.isArray(ae.links))throw new Error("API Landing page doesn't contain 'links' list");if(!ae.stac_version.startsWith("1."))throw new Error(`API is not in a supported STAC version (Panoramax viewer supports only 1.x, API is ${ae.stac_version})`);this._metadata.name=ae.title||"Unnamed",this._metadata.stac_version=ae.stac_version,this._metadata.geovisio_version=ae.geovisio_version;const qt=[],Yt=[];if([{rel:"search",type:"application/geo+json",endpointId:"search",mandatory:!0,missingIssue:"No direct access to pictures metadata."},{rel:"data",type:"application/json",endpointId:"collections",mandatory:!0,missingIssue:"No way for viewer to access sequences."},{rel:"data",type:"application/rss+xml",endpointId:"rss"},{rel:"xyz",type:"application/vnd.mapbox-vector-tile",endpointId:"tiles"},{rel:"xyz-style",type:"application/json",endpointId:"style"},{rel:"user-xyz-style",type:"application/json",endpointId:"user_style"},{rel:"user-xyz",type:"application/vnd.mapbox-vector-tile",endpointId:"user_tiles"},{rel:"user-search",type:"application/json",endpointId:"user_search",missingIssue:"Filter map data by user name will not be available."},{rel:"collection-preview",type:"image/jpeg",endpointId:"collection_preview",missingIssue:"Display of thumbnail could be slower."},{rel:"item-preview",type:"image/jpeg",endpointId:"item_preview",missingIssue:"Display of thumbnail could be slower."},{rel:"report",type:"application/json",endpointId:"report"}].forEach((ue=>{const nt=ae.links.find((ae=>ae.rel==ue.rel&&ae.type==ue.type));if(nt){if(!API.isValidHttpUrl(nt.href))throw new Error(`API endpoint '${nt.rel}' (${nt.type}) is not a valid URL: ${nt.href}`);this._endpoints[ue.endpointId]||(this._endpoints[ue.endpointId]=nt.href)}else if(!this._endpoints[ue.endpointId]){let ae=`API doesn't offer a '${ue.rel}' (${ue.type}) endpoint in its links`;ue.missingIssue&&(ae+=`\n${ue.missingIssue}`),ue.mandatory?qt.push(ae):ue.missingIssue&&Yt.push(ae)}})),this._endpoints.style||this._endpoints.tiles||Yt.push("API doesn't offer 'xyz' or 'xyz-style' endpoints in its links.\nMap widget will not be available."),this._endpoints.user_style||this._endpoints.user_tiles||Yt.push("API doesn't offer 'user-xyz' or 'user-xyz-style' endpoints in its links.\nFilter map data by user ID will not be available."),Yt.forEach((ae=>console.warn(ae))),qt.length>0)throw new Error(qt.join("\n"));const Xt=null===ae||void 0===ae||null===(nt=ae.extent)||void 0===nt||null===(ut=nt.spatial)||void 0===ut?void 0:ut.bbox;this._dataBbox=Xt&&Array.isArray(Xt)&&Xt.length>0&&Array.isArray(Xt[0])&&4===Xt[0].length?[[Xt[0][0],Xt[0][1]],[Xt[0][2],Xt[0][3]]]:null}_loadMapStyles(ae,ue){const nt=new Set(ue||[]);this.mapStyle={version:8,sources:{},layers:[],metadata:{}};const ut=[this.getMapStyle()];if("string"===typeof ae){const ue=ae.startsWith(this._endpoint)?this._getFetchOptions():void 0;ut.push(fetch(ae,ue).then((ae=>ae.json())))}else"object"===typeof ae&&ut.push(Promise.resolve(ae));return[...nt].filter((ae=>"geovisio"!==ae)).forEach((ae=>{ut.push(this.getUserMapStyle(ae,!0))})),Promise.all(ut).then((ae=>{const ue=["bearing","center","glyphs","light","name","pitch","sky","sprite","terrain","transition","zoom"];ae.forEach((ae=>{ue.forEach((ue=>{ae[ue]&&(this.mapStyle[ue]=ae[ue]||this.mapStyle[ue])})),Object.assign(this.mapStyle.sources,(null===ae||void 0===ae?void 0:ae.sources)||{}),Object.assign(this.mapStyle.metadata,(null===ae||void 0===ae?void 0:ae.metadata)||{}),this.mapStyle.layers=this.mapStyle.layers.concat((null===ae||void 0===ae?void 0:ae.layers)||[])}))})).catch((ae=>console.error(ae)))}_getFetchOptions(){let ae=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return Object.assign({signal:ae?void 0:AbortSignal.timeout(15e3)},this._fetchOpts)}_getMapRequestTransform(){const ae=this._getFetchOptions();if(delete ae.signal,Object.keys(ae).length>0)return ue=>{if(ue.startsWith(this._endpoint))return{url:ue,...ae}}}_getPSVWithCredentials(){return"include"===this._getFetchOptions().credentials?ae=>ae.startsWith(this._endpoint):void 0}cleanResourceURL(ae){if(!ae)return;const ue=new URL(this._endpoint);return ae.startsWith("/")?ue.protocol+"//"+ue.host+ae:ae.startsWith("./")?this._endpoint+ae.substring(1):ae}async getSequenceItems(ae){let ue=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,nt=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,ut=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;if(!this.isReady())throw new Error("API is not ready to use");try{return API.isIdValid(ae),fetch(ue||`${this._endpoints.collections}/${ae}/items${ut?"?limit="+ut:""}`,this._getFetchOptions(!0)).then((ae=>ae.json())).then((ue=>{let qt=ue;nt&&(qt.features=nt.features.concat(qt.features));const Yt=ue.links.find((ae=>"next"===ae.rel));return!ut&&Yt?this.getSequenceItems(ae,Yt.href,qt):qt}))}catch(qt){return Promise.reject(qt)}}getPicturesAroundCoordinatesUrl(ae,ue){let nt=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5e-4,ut=arguments.length>3?arguments[3]:void 0,qt=arguments.length>4?arguments[4]:void 0;if(!this.isReady())throw new Error("API is not ready to use");if(isNaN(parseFloat(ae))||isNaN(parseFloat(ue)))throw new Error("lat and lon parameters should be valid numbers");const Yt=[ue-nt,ae-nt,ue+nt,ae+nt].map((ae=>ae.toFixed(4))).join(","),Xt=ut?`&limit=${ut}`:"",ys=qt?`&collections=${qt}`:"";return`${this._endpoints.search}?bbox=${Yt}${Xt}${ys}`}getPicturesAroundCoordinates(ae,ue,nt,ut,qt){return fetch(this.getPicturesAroundCoordinatesUrl(ae,ue,nt,ut,qt),this._getFetchOptions()).then((ae=>ae.json()))}getPictureMetadataUrl(ae,ue){if(!this.isReady())throw new Error("API is not ready to use");if(API.isIdValid(ae))return ue?`${this._endpoints.collections}/${ue}/items/${ae}`:`${this._endpoints.search}?ids=${ae}`}getMapStyle(){if(this.isReady())return this.mapStyle;let ae;return ae=this._endpoints.style?this._endpoints.style:this._endpoints.tiles?{version:8,sources:{geovisio:{type:"vector",tiles:[this._endpoints.tiles],minzoom:0,maxzoom:15}}}:fetch(`${this._endpoint}/map/14/0/0.mvt`,this._getFetchOptions()).then((()=>(this._endpoints.tiles=`${this._endpoint}/map/{z}/{x}/{y}.mvt`,console.log("Using fallback endpoint for vector tiles"),this.getMapStyle()))).catch((ae=>(console.error(ae),Promise.reject(new Error("API doesn't offer a vector tiles endpoint"))))),"string"===typeof ae?fetch(ae,this._getFetchOptions()).then((ae=>ae.json())):Promise.resolve(ae)}getUserMapStyle(ae){let ue;return arguments.length>1&&void 0!==arguments[1]&&arguments[1]||this.isReady()?ae?(this._endpoints.user_style?ue=this._endpoints.user_style.replace(/\{userId\}/g,ae):this._endpoints.user_tiles&&(ue={version:8,sources:{[`geovisio_${ae}`]:{type:"vector",tiles:[this._endpoints.user_tiles.replace(/\{userId\}/g,ae)],minzoom:0,maxzoom:15}}}),ue?"string"===typeof ue?fetch(ue,this._getFetchOptions()).then((ae=>ae.json())):Promise.resolve(ue):Promise.reject(new Error("API doesn't offer map style for specific user"))):Promise.reject(new Error("Parameter userId is empty")):Promise.reject(new Error("API is not ready to use"))}findThumbnailInPictureFeature(ae){if(!this.isReady())throw new Error("API is not ready to use");if(!ae||!ae.assets)return null;let ue=null;for(let nt of Object.values(ae.assets)){if(nt.roles.includes("thumbnail")&&"image/jpeg"==nt.type&&API.isValidHttpUrl(nt.href))return this.cleanResourceURL(nt.href);nt.roles.includes("visual")&&"image/jpeg"==nt.type&&API.isValidHttpUrl(nt.href)&&(ue=this.cleanResourceURL(nt.href))}return ue}getPictureThumbnailURLForSequence(ae,ue){if(!this.isReady())throw new Error("API is not ready to use");if(this._endpoints.collection_preview)return Promise.resolve(this._endpoints.collection_preview.replace("{id}",ae));if(ue&&Array.isArray(ue.links)&&ue.links.length>0){let ae=ue.links.find((ae=>"preview"===ae.rel&&"image/jpeg"===ae.type));if(ae&&API.isValidHttpUrl(ae.href))return Promise.resolve(ae.href)}const nt=`${this._endpoints.search}?limit=1&collections=${ae}`;return fetch(nt,this._getFetchOptions()).then((ae=>ae.json())).then((ae=>Array.isArray(ae.features)&&0!=ae.features.length?this.findThumbnailInPictureFeature(ae.features.pop()):null))}getPictureThumbnailURL(ae,ue){if(!this.isReady())throw new Error("API is not ready to use");return ae?this._endpoints.item_preview?Promise.resolve(this._endpoints.item_preview.replace("{id}",ae)):ae&&ue?fetch(`${this._endpoints.collections}/${ue}/items/${ae}`,this._getFetchOptions()).then((ae=>ae.json())).then((ae=>ae?this.findThumbnailInPictureFeature(ae):null)):fetch(`${this._endpoints.search}?ids=${ae}`,this._getFetchOptions()).then((ae=>ae.json())).then((ae=>ae&&Array.isArray(ae.features)&&0!=ae.features.length?this.findThumbnailInPictureFeature(ae.features.pop()):null)):Promise.resolve(null)}getRSSURL(ae){if(!this.isReady())throw new Error("API is not ready to use");if(this._endpoints.rss){let ue=this._endpoints.rss;return ae&&(ue+=ue.includes("?")?"&":"?",ue+="bbox="+[ae.getWest(),ae.getSouth(),ae.getEast(),ae.getNorth()].join(",")),ue}return null}getSequenceMetadataUrl(ae){if(!this.isReady())throw new Error("API is not ready to use");return`${this._endpoints.collections}/${ae}`}getSequenceMetadata(ae){if(!this.isReady())throw new Error("API is not ready to use");return fetch(this.getSequenceMetadataUrl(ae),this._getFetchOptions()).then((ae=>ae.json()))}getDataBbox(){if(!this.isReady())throw new Error("API is not ready to use");return this._dataBbox}searchUsers(ae){if(!this.isReady())throw new Error("API is not ready to use");if(!this._endpoints.user_search)throw new Error("User search is not available");return fetch(`${this._endpoints.user_search}?q=${ae}`,this._getFetchOptions()).then((ae=>ae.json())).then((ae=>(null===ae||void 0===ae?void 0:ae.features)||null))}getUserName(ae){if(!this.isReady())throw new Error("API is not ready to use");if(!this._endpoints.user_search)throw new Error("User search is not available");return fetch(this._endpoints.user_search.replace(/\/search$/,`/${ae}`),this._getFetchOptions()).then((ae=>ae.json())).then((ae=>(null===ae||void 0===ae?void 0:ae.label)||(null===ae||void 0===ae?void 0:ae.name)||null))}sendReport(ae){if(!this.isReady())throw new Error("API is not ready to use");if(!this._endpoints.report)throw new Error("Report sending is not available");const ue={...this._getFetchOptions(),method:"POST",body:JSON.stringify(ae),headers:{"Content-Type":"application/json"}};return fetch(this._endpoints.report,ue).then((async ae=>{if(ae.status>=400){let nt=await ae.text();try{nt=JSON.parse(nt).message}catch(ue){}return Promise.reject(nt)}return ae.json()}))}sendPictureSemantics(ae,ue){var nt;if(!this.isReady())throw new Error("API is not ready to use");if(null===ae||void 0===ae||null===(nt=ae.sequence)||void 0===nt||!nt.id||null===ae||void 0===ae||!ae.id)throw new Error("Missing IDs from picture");let ut=this.getPictureMetadataUrl(ae.id,ae.sequence.id);null!==ae&&void 0!==ae&&ae.origInstance&&(ut=`${ae.origInstance.href}/api/collections/${ae.sequence.id}/items/${ae.id}`);const qt={...this._getFetchOptions(),method:"PATCH",body:JSON.stringify({semantics:ue}),headers:{"Content-Type":"application/json"}};return fetch(ut,qt).then((async ae=>{if(ae.status>=400){let nt=await ae.text();try{nt=JSON.parse(nt).message}catch(ue){}return Promise.reject(nt)}return ae.json()}))}createPictureAnnotation(ae,ue,nt){var ut;if(!this.isReady())throw new Error("API is not ready to use");if(null===ae||void 0===ae||null===(ut=ae.sequence)||void 0===ut||!ut.id||null===ae||void 0===ae||!ae.id)throw new Error("Missing IDs from picture");let qt=this.getPictureMetadataUrl(ae.id,ae.sequence.id)+"/annotations";null!==ae&&void 0!==ae&&ae.origInstance&&(qt=`${ae.origInstance.href}/api/collections/${ae.sequence.id}/items/${ae.id}/annotations`);const Yt={...this._getFetchOptions(),method:"POST",body:JSON.stringify({semantics:nt,shape:ue}),headers:{"Content-Type":"application/json"}};return fetch(qt,Yt).then((async ae=>{if(ae.status>=400){let nt=await ae.text();try{nt=JSON.parse(nt).message}catch(ue){}return Promise.reject(nt)}return ae.json()}))}editPictureAnnotation(ae,ue){if(!this.isReady())throw new Error("API is not ready to use");let nt=`${this._endpoint}/annotations/${ae}`;const ut={...this._getFetchOptions(),method:"PATCH",body:JSON.stringify({semantics:ue}),headers:{"Content-Type":"application/json"}};return fetch(nt,ut).then((async ae=>{if(ae.status>=400){let nt=await ae.text();try{nt=JSON.parse(nt).message}catch(ue){}return Promise.reject(nt)}return ae.json()}))}deletePictureAnnotation(ae){if(!this.isReady())throw new Error("API is not ready to use");let ue=`${this._endpoint}/annotations/${ae}`;const nt={...this._getFetchOptions(),method:"DELETE"};return fetch(ue,nt).then((async ae=>{if(ae.status>=400){let nt=await ae.text();try{nt=JSON.parse(nt).message}catch(ue){}return Promise.reject(nt)}return!0}))}getAuthURL(){var ae,ue;return this._configuration?Promise.resolve(!(null===(ae=this._configuration)||void 0===ae||null===(ue=ae.auth)||void 0===ue||!ue.enabled)&&`${this._endpoint}/auth/login?next_url=<CBURL>`):null===this._configuration?fetch(this._endpoint+"/configuration",this._getFetchOptions()).then((ae=>ae.json())).then((ae=>(this._configuration=ae,this.getAuthURL()))).catch((()=>(this._configuration=!1,!1))):Promise.resolve(!1)}static isValidHttpUrl(ae){let ue;try{ue=new URL(ae)}catch(nt){return!1}return"http:"===ue.protocol||"https:"===ue.protocol}static isIdValid(ae){if((0,ut.isNullId)(ae))throw new Error("id should be a valid picture unique identifier");return!0}}},2118:(ae,ue,nt)=>{"use strict";nt.d(ue,{Ay:()=>InitParameters,Qm:()=>ut,Vy:()=>alterPSVState,ai:()=>alterPhotoViewerState,iz:()=>alterViewerState,mK:()=>alterMapState});const ut={minDate:"date_from",maxDate:"date_to",pic_type:"pic_type",camera:"camera",theme:"theme",qualityscore:"pic_score",gps:"gps"},qt=Object.fromEntries(Object.entries(ut).map((ae=>[ae[1],ae[0]]))),Yt=["none","null","false",!1],Xt=["antialias","bearing","bearingSnap","bounds","boxZoom","clickTolerance","collectResourceTiming","cooperativeGestures","crossSourceCollisions","doubleClickZoom","dragPan","dragRotate","fadeDuration","failIfMajorPerformanceCaveat","fitBoundsOptions","hash","interactive","localIdeographFontFamily","locale","logoPosition","maplibreLogo","maxBounds","maxCanvasSize","maxPitch","maxTileCacheSize","maxTileCacheZoomLevels","maxZoom","minPitch","minZoom","pitch","pitchWithRotate","pixelRatio","preserveDrawingBuffer","refreshExpiredTiles","renderWorldCopies","scrollZoom","touchPitch","touchZoomRotate","trackResize","transformCameraUpdate","transformRequest","validateStyle"];class InitParameters{constructor(){var ae,ue,nt,ut,qt,ys,Ec;let lu=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},uu=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},_u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};"false"===lu["url-parameters"]&&(uu={});let vu={};"object"===typeof(null===lu||void 0===lu?void 0:lu["psv-options"])&&(vu=lu["psv-options"]);let wu={};"object"===typeof(null===lu||void 0===lu?void 0:lu["map-options"])&&(wu=lu["map-options"]);let Hu={};"object"===typeof(null===_u||void 0===_u?void 0:_u.map)&&(Hu=_u.map);let qu=uu.map&&"none"!==uu.map?getMapPositionFromString(uu.map):null,Ju=!Yt.includes(uu.map)&&!Yt.includes(lu["map-options"]),_h=uu.focus||lu.focus,ed=uu.pic||lu.picture,td=uu.seq||lu.sequence,id=uu.users||lu.users,nd=uu.speed||(null===(ae=vu)||void 0===ae?void 0:ae.transitionDuration),rd=uu.nav||(null===(ue=vu)||void 0===ue?void 0:ue.picturesNavigation),ad=uu.theme||(null===(nt=Hu)||void 0===nt?void 0:nt.theme)||wu.theme,sd=uu.background||(null===(ut=Hu)||void 0===ut?void 0:ut.background)||wu.background,od=(null===qu||void 0===qu?void 0:qu.center)||!ed&&((null===(qt=Hu)||void 0===qt?void 0:qt.center)||wu.center)||[0,0],ld=(null===qu||void 0===qu?void 0:qu.zoom)||(null===(ys=Hu)||void 0===ys?void 0:ys.zoom)||wu.zoom,cd=(null===qu||void 0===qu?void 0:qu.pitch)||wu.pitch,ud=(null===qu||void 0===qu?void 0:qu.bearing)||wu.bearing,hd=lu.geocoder,dd=lu.widgets,pd=lu["fetch-options"],md=lu.style,gd=lu.lang,fd=lu.endpoint,Ad=wu.raster,yd=wu.attributionControl,_d=(vd=wu,Object.fromEntries(Object.entries(vd).filter((ae=>{let[ue]=ae;return Xt.includes(ue)}))));var vd;let xd=lu["keyboard-shortcuts"],bd=lu["skip-tags-menu-opening"],wd="false"===(null===_u||void 0===_u?void 0:_u.disableAnnotations)||(null===(Ec=vu)||void 0===Ec?void 0:Ec.displayAnnotations)||!1,Ed=uu.xyz,Md=uu.date_from,Sd=uu.date_to,Td=uu.pic_type,kd=uu.camera,Cd=uu.pic_score,Id=uu.gps,Dd=uu.overlay,Ld=uu.xywh,Pd=uu.annot;!Ju||ed||td?["map","pic"].includes(_h)?"map"!==_h||Ju||(console.warn("Parameter focus can't be 'map' as map is disabled"),_h="pic"):(console.warn("Invalid value for parameter focus:",_h),_h=!Ju||ed||td?"pic":"map"):_h="map","aerial"!=sd||Ad||(console.warn("Parameter background can't be 'aerial' as no aerial imagery is available"),sd="streets"),!wd&&Pd&&(wd=!0),this._parentInit={map:Ju,users:id,fetchOptions:pd,style:md,lang:gd,endpoint:fd},this._parentPostInit={focus:_h,picture:ed,sequence:td,geocoder:hd,widgets:dd,forceFocus:!0,keyboardShortcuts:!0,willLoadPicture:void 0!==(ed||td),skipTagsMenuOpening:"true"===bd},this._psvInit=Object.assign(Object.fromEntries(Object.entries(vu).filter((ae=>{let[ue]=ae;return!["transitionDuration","picturesNavigation","displayAnnotations"].includes(ue)}))),{displayAnnotations:wd}),this._psvAny={transitionDuration:nd,picturesNavigation:rd},this._psvPostInit={xyz:Ed,xywh:Ld,annotation:Pd},this._mapInit={raster:Ad,attributionControl:yd,..._d},this._mapAny={theme:ad,background:sd,center:od,zoom:ld,pitch:cd,bearing:ud,users:id},this._mapPostInit={date_from:Md,date_to:Sd,pic_type:Td,camera:kd,pic_score:Cd,gps:Id,overlay:Dd},"false"===xd&&(this._psvInit.keyboard=!1,this._psvInit.keyboardActions={},this._mapInit.keyboard=!1,this._parentPostInit.keyboardShortcuts=!1)}_sanitize(ae){return Object.fromEntries(Object.entries(ae).filter((ae=>{let[,ue]=ae;return void 0!==ue})))}getParentInit(){return this._sanitize(this._parentInit)}getParentPostInit(){return this._sanitize(this._parentPostInit)}getPSVInit(){return this._sanitize(Object.assign({},this._psvInit,this._psvAny))}getPSVPostInit(){return this._sanitize(Object.assign({},this._psvPostInit,this._psvAny))}getMapInit(){return this._sanitize(Object.assign({},this._mapInit,this._mapAny))}getMapPostInit(){return this._sanitize(Object.assign({},this._mapPostInit,this._mapAny))}static GetComponentProperties(ae,ue){const nt={};for(let ut in ae.properties){ae.properties[ut].state||null==ue[ut]||(nt[ut]=ue[ut])}return nt}}function getMapPositionFromString(ae,ue){const nt=(ae||"").split("/");if(nt.length>=3&&!nt.some((ae=>isNaN(ae)))){const ae={center:[+nt[2],+nt[1]],zoom:+nt[0],pitch:+(nt[4]||0)};return ue&&(ae.bearing=ue.dragRotate.isEnabled()&&ue.touchZoomRotate.isEnabled()?+(nt[3]||0):ue.getBearing()),ae}return null}function alterPSVState(ae,ue){ue.xyz&&ae.addEventListener("picture-loaded",(()=>{const nt=function(ae){const ue=(ae||"").split("/");return 3!==ue.length||ue.some((ae=>isNaN(ae)))?null:{x:+ue[0],y:+ue[1],z:+ue[2]}}(ue.xyz);ae.setXYZ(nt.x,nt.y,nt.z)}),{once:!0}),ue.xywh&&ae.addEventListener("picture-loaded",(()=>{const nt=function(ae,ue){let nt=(ae||"").split(",");if(4!==nt.length||nt.some((ae=>isNaN(ae))))return null;{var ut,qt,Yt,Xt;let[ae,lu,uu,_u]=nt.map((ae=>parseFloat(ae))),vu=ue.panorama.basePanoData;if("function"===typeof vu){var ys,Ec;const ae=null===ue||void 0===ue||null===(ys=ue.properties)||void 0===ys||null===(Ec=ys["pers:interior_orientation"])||void 0===Ec?void 0:Ec.sensor_array_dimensions;vu=ae&&2==ae.length?vu({width:ae[0],height:ae[1]}):null}if(null===(ut=vu)||void 0===ut||!ut.fullWidth||null===(qt=vu)||void 0===qt||!qt.fullHeight)return null;const wu=(null===(Yt=vu)||void 0===Yt?void 0:Yt.croppedX)||0,Hu=(null===(Xt=vu)||void 0===Xt?void 0:Xt.croppedY)||0,qu=wu+ae+uu/2-vu.fullWidth/2,Ju=-(Hu+lu+_u/2-vu.fullHeight/2),_h=qu/vu.fullWidth,ed=Ju/vu.fullHeight,td=(uu/vu.fullWidth+_u/vu.fullHeight)/2;return{yaw:2*_h*Math.PI,pitch:ed*Math.PI,z:100*(1-td)}}}(ue.xywh,ae.getPictureMetadata());ae.rotate(nt),ae.zoom(nt.z)}),{once:!0}),ue.annotation&&(ae.getPictureMetadata()?ae.focusOnAnnotation(ue.annotation):ae.addEventListener("picture-loaded",(()=>{ae.focusOnAnnotation(ue.annotation)}),{once:!0}));let nt=ue.transitionDuration||ue.speed;void 0!==nt&&ae.setTransitionDuration(nt);let ut=ue.picturesNavigation||ue.nav;["none","pic","any","seq"].includes(ut)&&ae.setPicturesNavigation(ut)}async function alterMapState(ae,ue){var nt;const ut=getMapPositionFromString(ue.map,ae);ut&&ae.jumpTo(ut);let Yt=Array.isArray(ue.users)?ue.users:(ue.users||"").split(",");(0===Yt.length||1===Yt.length&&""===Yt[0].trim())&&(Yt=["geovisio"]),await ae.setVisibleUsers(Yt),null===(nt=ae.setFilters)||void 0===nt||nt.call(ae,function(ae){const ue={};for(let nt in qt)ae[nt]&&(ue[qt[nt]]=ae[nt]);if(ue.qualityscore){let ae=ue.qualityscore.split("");const nt={A:5,B:4,C:3,D:2,E:1};ue.qualityscore=ae.map((ae=>nt[ae]))}return ue}(ue)),["aerial","streets"].includes(ue.background)&&ae.setBackground(ue.background),ue.overlay&&ue.overlay.split(",").forEach((ue=>ae.setLayoutProperty(ue,"visibility","visible")))}function alterPhotoViewerState(ae,ue){let nt=ue.picture||ue.pic,ut=ue.sequence||ue.seq||null;if(nt){const ue=nt.split(";");ue.length>1&&console.warn("Multiple picture IDs passed in URL, only first one kept"),ae.select(1===ue.length?ut:null,ue[0],!0)}else ut?ae.select(ut,null,!0):ae.select()}function alterViewerState(ae,ue){alterPhotoViewerState(ae,ue),"map"===ue.focus&&null!==ae&&void 0!==ae&&ae.map?(ae.setPopup(!1),ae._setFocus("map",null,ue.forceFocus)):"pic"===ue.focus&&null!==ae&&void 0!==ae&&ae.mini?(ae.setPopup(!1),ae._setFocus("pic",null,ue.forceFocus)):ue.focus&&"meta"===ue.focus&&null!==ae&&void 0!==ae&&ae.mini&&ae._setFocus("pic",null,ue.forceFocus)}},3727:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>PhotoAdapter});var ut=nt(3890);class PhotoAdapter extends ut.D{constructor(ae,ue){super(ae,ue),this._shouldGoFast=ue.shouldGoFast||(()=>!0)}loadTexture(ae,ue){return ae.origBaseUrl?ae.baseUrl=ae.origBaseUrl:ae.origBaseUrl=ae.baseUrl,this._shouldGoFast()&&ae.thumbUrl&&!ae.hdLoaded&&1==ae.rows&&(ae.baseUrl=ae.thumbUrl),super.loadTexture(ae,ue).then((ue=>(ae.baseUrl===ae.origBaseUrl&&(ae.hdLoaded=!0),ue))).catch((ae=>{console.error("Can't load texture",ae)}))}__loadTiles(ae){this._shouldGoFast()||super.__loadTiles(ae)}}},4207:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>PresetManager});var ut=nt(7208);const qt={fas:"fa7-solid"},Yt={};class PresetManager{constructor(){let ae=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,ue=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this._ready=!1,this._presets=null,this._translations={},ue||this._load(ae)}async _load(ae){var ue;ae=ae||(null===(ue=window.navigator.languages[0])||void 0===ue?void 0:ue.substring(0,2));try{var nt,Xt;const[ue,lu,uu]=await Promise.all([fetch(`${(0,ut.PanoramaxPresetsURL)()}/translations/en.min.json`),ae?fetch(`${(0,ut.PanoramaxPresetsURL)()}/translations/${ae}.min.json`):Promise.resolve({ok:!0}),fetch(`${(0,ut.PanoramaxPresetsURL)()}/presets.min.json`)]);if(!ue||!lu||!uu||!ue.ok||!lu.ok||!uu.ok)throw this._ready=-1,new Error("Presets service is not available");var ys,Ec;if(this._presets=await uu.json(),this._translations.en=null===(nt=await ue.json())||void 0===nt||null===(Xt=nt.en)||void 0===Xt?void 0:Xt.presets,ae)this._translations[ae]=null===(ys=await lu.json())||void 0===ys||null===(Ec=ys[ae])||void 0===Ec?void 0:Ec.presets;Object.entries(this._presets).forEach((ue=>{var nt,ut,Xt,ys,Ec,lu;let[uu,_u]=ue;if(null!==(nt=this._translations[ae])&&void 0!==nt&&null!==(ut=nt.presets)&&void 0!==ut&&null!==(Xt=ut[uu])&&void 0!==Xt&&Xt.name?_u.name=this._translations[ae].presets[uu].name:null!==(ys=this._translations.en)&&void 0!==ys&&null!==(Ec=ys.presets)&&void 0!==Ec&&null!==(lu=Ec[uu])&&void 0!==lu&&lu.name&&(_u.name=this._translations.en.presets[uu].name),_u.icon){const ae=_u.icon.split("-")[0],ue=qt[ae];_u.iconify=ue?_u.icon.replace(ae+"-",ue+":"):_u.icon.split("-")[0]+":"+_u.icon.split("-").slice(1).join("-"),Yt[_u.iconify]&&(_u.iconify=Yt[_u.iconify])}})),this._ready=!0}catch(lu){console.error("Presets service throws an error:",lu),this._ready=-1}}async onceReady(){return this._ready?-1===this._ready?Promise.reject():Promise.resolve():(await new Promise((ae=>setTimeout(ae,250))),this.onceReady())}async getPreset(ae){return this.getPresets(ae).then((ae=>ae.shift()))}async getPresets(ae){return this.onceReady().then((()=>{const ue=Object.values(this._presets).filter((ue=>{if(0===Object.keys(ue.tags).length)return!1;for(let nt in ue.tags){const ut=ue.tags[nt];if(!ae.semantics.find((ae=>"delete"!==ae.action&&ae.key===nt&&("*"===ut||ut===ae.value))))return!1}return!0}));return ue.sort(((ae,ue)=>{const nt=Object.keys(ae.tags).length,ut=Object.keys(ue.tags).length;if(nt>ut)return-1;if(nt===ut){const nt=Object.values(ae.tags).filter((ae=>"*"===ae)).length,ut=Object.values(ue.tags).filter((ae=>"*"===ae)).length;return nt<ut?-1:nt>ut?1:0}return 1})),ue}))}}},4005:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>SemanticsMapProtocol,d:()=>Yt});var ut=nt(2964),qt=nt(8552);const Yt=15;class SemanticsMapProtocol{constructor(ae){this.tiles=new Map,this.api=ae}_tileToBbox(ae,ue,nt){const ut=Math.pow(2,nt),qt=ae/ut*360-180,Yt=(ae+1)/ut*360-180,Xt=180*Math.atan(Math.sinh(Math.PI*(1-2*ue/ut)))/Math.PI;return[qt,180*Math.atan(Math.sinh(Math.PI*(1-2*(ue+1)/ut)))/Math.PI,Yt,Xt]}_semanticsToBasicProps(ae){var ue,nt,ut,qt;const Yt={},setOrAppend=ae=>{Yt[ae.key]?Yt[ae.key].add(ae.value):Yt[ae.key]=new Set([ae.value])};return((null===(ue=ae.properties)||void 0===ue||null===(nt=ue.collection)||void 0===nt?void 0:nt.semantics)||[]).forEach(setOrAppend),((null===(ut=ae.properties)||void 0===ut?void 0:ut.semantics)||[]).forEach(setOrAppend),((null===(qt=ae.properties)||void 0===qt?void 0:qt.annotations)||[]).forEach((ae=>ae.semantics.forEach(setOrAppend))),Object.keys(Yt).forEach((ae=>Yt[ae]=[...Yt[ae]].join(";"))),Yt.picid=ae.id,Yt.seqid=ae.collection,Yt}tile(){return async(ae,ue)=>{ue=ue||new AbortController;const nt=ae.url.match(/^sem:\/\/\/(.+)\/(\d+)\/(\d+)\/(\d+)/);if(!nt)throw new Error("Invalid URL");if(this.tiles.has(ae.url))return{data:this.tiles.get(ae.url).buffer.slice(0)};const[Xt,ys,Ec,lu,uu]=nt,_u=this._tileToBbox(parseInt(lu),parseInt(uu),parseInt(Ec)),vu=`${this.api._endpoint}/search?bbox=${_u.join(",")}&limit=1000&filter=${encodeURIComponent(ys)}`;return fetch(vu,{signal:ue.signal}).then((ae=>ae.json())).then((ue=>{if(ue.features){if(ue.type="FeatureCollection",0===ue.features.length){const ue=new Uint8Array;return this.tiles.set(ae.url,ue),{data:ue.buffer.slice(0)}}ue.features=ue.features.map((ae=>({type:ae.type,geometry:ae.geometry,id:ae.id,properties:this._semanticsToBasicProps(ae)})))}const nt=(0,ut.A)(ue,{maxZoom:Yt}).getTile(Ec,lu,uu);if(!nt)throw new Error("Can't create tile");const Xt=(0,qt.O7)({layer:nt},{version:2});return this.tiles.set(ae.url,Xt),{data:Xt.buffer.slice(0)}}))}}}},4451:(ae,ue,nt)=>{"use strict";nt.d(ue,{A:()=>URLHandler});var ut=nt(2118);const qt=["speed","nav","focus","pic","xyz","map","background","users","s","xywh","annot","seq","overlay"].concat(Object.values(ut.Qm)),Yt=["focus-changed","pictures-navigation-changed"],Xt=["position-updated","zoom-updated","view-rotated","picture-loaded","transition-duration-changed","annotation-focused","annotations-unfocused"],ys=["moveend","zoomend","boxzoomend","background-changed","users-changed","filters-changed","styledata"];class URLHandler extends EventTarget{constructor(ae){super(),this._parent=ae,this._delay=null}listenToChanges(){window.addEventListener("popstate",this._onURLChange.bind(this),!1),Yt.forEach((ae=>this._parent.addEventListener(ae,this._onParentChange.bind(this)))),Xt.forEach((ae=>this._parent.psv.addEventListener(ae,this._onParentChange.bind(this)))),this._parent.map&&ys.forEach((ae=>this._parent.map.on(ae,this._onParentChange.bind(this))))}destroy(){window.removeEventListener("popstate",this._onURLChange)}nextURLParams(){var ae;let ue={};"number"==typeof this._parent.psv.getTransitionDuration()&&(ue.speed=this._parent.psv.getTransitionDuration()),[null,"any"].includes(this._parent.psv.getPicturesNavigation())||(ue.nav=this._parent.psv.getPicturesNavigation()),this._parent.psv.getPictureId()&&(ue.pic=this._parent.psv.getPictureId());const nt=this._parent.psv.getPictureMetadata();var qt;nt&&(ue.xyz=this.currentPSVString(),null!==(qt=nt.sequence)&&void 0!==qt&&qt.id&&(ue.seq=nt.sequence.id));const Yt=this._parent.psv.getSelectedAnnotations();if((null===Yt||void 0===Yt?void 0:Yt.length)>0&&(ue.annot=Yt[0]),null!==(ae=this._parent.map)&&void 0!==ae&&ae.loaded){var Xt,ys,Ec,lu,uu;ue.map=this.currentMapString(),ue.focus="pic",this._parent.isMapWide()&&(ue.focus="map"),null!==(Xt=this._parent.map)&&void 0!==Xt&&null!==(ys=Xt.hasTwoBackgrounds)&&void 0!==ys&&ys.call(Xt)&&null!==(Ec=this._parent.map)&&void 0!==Ec&&null!==(lu=Ec.getBackground)&&void 0!==lu&&lu.call(Ec)&&(ue.background=this._parent.map.getBackground());const ae=this._parent.map.getVisibleUsers();if((ae.length>1||!ae.includes("geovisio"))&&(ue.users=ae.join(",")),this._parent.map._mapFilters){for(let ae in ut.Qm)this._parent.map._mapFilters[ae]&&(ue[ut.Qm[ae]]=this._parent.map._mapFilters[ae]);if(Array.isArray(ue.pic_score))if(5===ue.pic_score.length)delete ue.pic_score;else{const ae=[null,"E","D","C","B","A"];ue.pic_score=ue.pic_score.map((ue=>ae[ue])).join("")}Array.isArray(ue.gps)&&5===ue.gps.length&&delete ue.gps}if(null!==(uu=this._parent.map)&&void 0!==uu&&uu.getSemanticOverlays){const ae=this._parent.map.getSemanticOverlays().filter((ae=>{var ue;return"none"!==(null===(ue=ae.layout)||void 0===ue?void 0:ue.visibility)})).map((ae=>ae.id));ae.length>0&&(ue.overlay=ae.join(","))}}return ue}nextURLString(){let ae="";return Object.entries(this.nextURLParams()).sort(((ae,ue)=>ae[0].localeCompare(ue[0]))).forEach((ue=>{let[nt,ut]=ue,qt=!1;const Yt=ae.split("&").map((ae=>{const ue=ae.split("=")[0];return ue===nt?(qt=!0,`${ue}=${ut}`):ae})).filter((ae=>ae));qt||Yt.push(`${nt}=${ut}`),ae=`${Yt.join("&")}`})),`?${ae}`.replace(/^\?+/,"?")}currentURLParams(){const ae=(arguments.length>0&&void 0!==arguments[0]&&arguments[0]?window.location.hash:window.location.search).replace(/^[?#]/,"");let ue={};if(ae.split("&").map((ae=>ae.split("="))).filter((ae=>void 0!==ae[0]&&ae[0].length>0&&qt.includes(ae[0]))).forEach((ae=>{ue[ae[0]]=ae[1]})),ue.s){const ae=Object.fromEntries(decodeURIComponent(ue.s).split(";").map((ae=>[ae[0],ae.substring(1)])));ue={},"m"===ae.f?ue.focus="map":"p"===ae.f?ue.focus="pic":"t"===ae.f&&(ue.focus="meta"),""!==ae.s&&(ue.speed=100*parseFloat(ae.s)),"a"===ae.n?ue.nav="any":"s"===ae.n&&(ue.nav="seq"),["n","p"].includes(ae.n)&&(ue.nav="pic"),""!==ae.p&&(ue.pic=ae.p),""!==ae.a&&(ue.annot=ae.a),""!==ae.c&&(ue.xyz=ae.c),""!==ae.m&&(ue.map=ae.m),""!==ae.d&&(ue.date_from=ae.d),""!==ae.e&&(ue.date_to=ae.e),"f"===ae.t?ue.pic_type="flat":"e"===ae.t&&(ue.pic_type="equirectangular"),""!==ae.k&&(ue.camera=ae.k),"d"===ae.v?ue.theme="default":"a"===ae.v?ue.theme="age":"t"===ae.v?ue.theme="type":"s"===ae.v?ue.theme="score":"g"===ae.v&&(ue.theme="gps"),"s"===ae.b?ue.background="streets":"a"===ae.b&&(ue.background="aerial"),""!==ae.u&&(ue.users=ae.u),""!==ae.q&&(ue.pic_score=ae.q),""!==ae.g&&(ue.gps=ae.g),""!==ae.o&&(ue.overlay=ae.o)}return ue}currentMapString(){var ae;if(null===(ae=this._parent.map)||void 0===ae||!ae.loaded)return"";const ue=this._parent.map.getCenter(),nt=Math.round(100*this._parent.map.getZoom())/100,ut=Math.ceil((nt*Math.LN2+Math.log(512/360/.5))/Math.LN10),qt=Math.pow(10,ut),Yt=Math.round(ue.lng*qt)/qt,Xt=Math.round(ue.lat*qt)/qt,ys=this._parent.map.getBearing(),Ec=this._parent.map.getPitch();let lu=`${nt}/${Xt}/${Yt}`;return(ys||Ec)&&(lu+="/"+Math.round(10*ys)/10),Ec&&(lu+=`/${Math.round(Ec)}`),lu}currentPSVString(){const ae=this._parent.psv.getXYZ();return`${ae.x.toFixed(2)}/${ae.y.toFixed(2)}/${Math.round(ae.z||0)}`}_onURLChange(){let ae=this.currentURLParams();"Viewer"===this._parent.getClassName()?(0,ut.iz)(this._parent,ae):(0,ut.ai)(this._parent,ae),(0,ut.Vy)(this._parent.psv,ae),this._parent.map&&(0,ut.mK)(this._parent.map,ae)}nextShortLink(ae){const ue=new URL(ae),nt=this.nextURLParams(),ut={f:(nt.focus||"").substring(0,1),s:isNaN(parseInt(nt.speed))?void 0:Math.floor(parseInt(nt.speed)/100),n:(nt.nav||"").substring(0,1),p:nt.pic,c:nt.xyz,m:nt.map,d:nt.date_from,e:nt.date_to,t:(nt.pic_type||"").substring(0,1),k:nt.camera,v:(nt.theme||"").substring(0,1),b:(nt.background||"").substring(0,1),u:nt.users,q:nt.pic_score,a:nt.annot,g:nt.gps,o:nt.overlay},qt=Object.entries(ut).filter((ae=>{let[,ue]=ae;return void 0!=ue&&""!=ue})).map((ae=>{let[ue,nt]=ae;return`${ue}${nt}`})).join(";");return ue.search=`s=${qt}`,ue}getUnmanagedParameters(ae){return new URLSearchParams(Array.from(ae.searchParams).filter((ae=>{let[ue]=ae;return!qt.includes(ue)}))).toString()}_onParentChange(){this._delay&&(clearTimeout(this._delay),this._delay=null),this._delay=setTimeout((()=>{var ae,ue,nt;const ut=new URL(window.location.href),qt=new URL(window.location.href),Yt=this.getUnmanagedParameters(ut);if(qt.search=this._parent?this.nextURLString()+(Yt.length>0?"&"+Yt:""):"",Object.keys(this.currentURLParams(!0)).length>0&&(qt.hash=""),ut.search==qt.search)return;const Xt=this.currentURLParams().pic||"",ys=(null===(ae=this._parent)||void 0===ae||null===(ue=ae.psv)||void 0===ue||null===(nt=ue.getPictureId)||void 0===nt?void 0:nt.call(ue))||"";try{if(Xt!=ys?window.history.pushState(window.history.state,null,qt.href):window.history.replaceState(window.history.state,null,qt.href),this._parent){const ae=new CustomEvent("url-changed",{detail:{url:qt.href}});this.dispatchEvent(ae)}}catch(Ec){}}),500)}}},3606:(ae,ue,nt)=>{"use strict";nt.r(ue),nt.d(ue,{forwardGeocodingBAN:()=>forwardGeocodingBAN,forwardGeocodingNominatim:()=>forwardGeocodingNominatim,forwardGeocodingStandard:()=>forwardGeocodingStandard,reverseGeocodingNominatim:()=>reverseGeocodingNominatim});var ut=nt(7208);const qt={house:20,housenumber:20,street:18,locality:15,district:13,municipality:12,city:12,county:8,region:7,state:7,country:5};function geocoderParamsToURLString(ae){let ue={};return Object.entries(ae).filter((ae=>void 0!==ae[1]&&null!==ae[1])).forEach((ae=>ue[ae[0]]=ae[1])),new URLSearchParams(ue).toString()}function forwardGeocodingNominatim(ae){const ue={q:ae.query,countrycodes:ae.countries,limit:ae.limit,viewbox:ae.bbox};return fetch(`${(0,ut.NominatimBaseUrl)()}/search?${geocoderParamsToURLString(ue)}&format=geocodejson&addressdetails=1`).then((ae=>ae.json())).then((ae=>{const ue={features:[]},nt=[];return(ae.features||[]).forEach((ae=>{var ut,Yt,Xt;const ys=geocodeJsonToPlaceName(null===(ut=ae.properties)||void 0===ut?void 0:ut.geocoding)||(null===(Yt=ae.properties)||void 0===Yt||null===(Xt=Yt.geocoding)||void 0===Xt?void 0:Xt.label);var Ec,lu;nt.includes(ys)||(ue.features.push({place_type:["place"],place_name:ys,center:ae.geometry.coordinates,zoom:qt[null===(Ec=ae.properties)||void 0===Ec||null===(lu=Ec.geocoding)||void 0===lu?void 0:lu.type]}),nt.push(ys))})),ue}))}function reverseGeocodingNominatim(ae,ue){return fetch(`${(0,ut.NominatimBaseUrl)()}/reverse?lat=${ae}&lon=${ue}&zoom=18&format=geocodejson`).then((ae=>ae.json())).then((ae=>{var ue,nt,ut;return geocodeJsonToPlaceName(null===ae||void 0===ae||null===(ue=ae.features)||void 0===ue||null===(nt=ue.shift())||void 0===nt||null===(ut=nt.properties)||void 0===ut?void 0:ut.geocoding)}))}function forwardGeocodingBAN(ae){return forwardGeocodingStandard(ae,(0,ut.AdresseDataGouvBaseURL)())}function geocodeJsonToPlaceName(ae){if(!ae||"object"!=typeof ae)return"";let ue=ae.name,nt=[],ut=[];switch(ae.type){case"hamlet":case"croft":case"isolated_dwelling":case"neighbourhood":case"allotments":case"quarter":case"farm":case"farmyard":case"industrial":case"commercial":case"retail":case"city_block":case"residential":case"locality":case"district":ut.push(ae.city),ut.push(ae.county),ut.push(ae.state),ut.push(ae.country);break;case"city":case"region":ut.push(ae.county),ut.push(ae.state),ut.push(ae.country);break;case"country":break;case"house":case"housenumber":nt.push(ae.housenumber),nt.push(ae.street),nt.push(ae.locality),nt.push(ae.district),ut.push(ae.city),ut.push(ae.county),ut.push(ae.state),ut.push(ae.country);break;default:nt.push(ae.street),nt.push(ae.locality),nt.push(ae.district),ut.push(ae.city),ut.push(ae.county),ut.push(ae.state),ut.push(ae.country)}return nt=nt.filter((ae=>ae)),nt=nt.filter(((ae,ut)=>ae!=ue&&(0===ut||nt[ut-1]!==ae))),nt=nt.length>0?ae.housenumber?nt.slice(0,2).join(" "):nt.shift():null,nt===ue&&(nt=null),ut=ut.filter((ae=>ae)),ut=ut.filter(((ae,qt)=>ae!=ue&&(!nt||!nt.includes(ae))&&(0===qt||ut[qt-1]!==ae))),[ue,nt,ut.shift()].filter((ae=>ae)).join(", ")}function forwardGeocodingStandard(ae,ue){const nt={q:ae.query,limit:ae.limit};if("string"===typeof ae.proximity){const[ue,ut]=ae.proximity.split(",").map((ae=>parseFloat(ae.trim())));nt.lat=ue,nt.lon=ut}return fetch(`${ue}/?${geocoderParamsToURLString(nt)}`).then((ae=>ae.json())).then((ae=>{const ue={features:[]},nt=[];return(ae.features||[]).forEach((ae=>{const ut=geocodeJsonToPlaceName(ae.properties);nt.includes(ut)||"other"==ae.properties.type||(ue.features.push({place_type:["place"],place_name:ut,center:ae.geometry.coordinates,zoom:qt[ae.properties.type]}),nt.push(ut))})),ue}))}},4964:(ae,ue,nt)=>{"use strict";nt.r(ue),nt.d(ue,{autoDetectLocale:()=>autoDetectLocale,getTranslations:()=>getTranslations});var ut=nt(3087),qt=nt(4149),Yt=nt(369),Xt=nt(389),ys=nt(9946),Ec=nt(8302),lu=nt(5222),uu=nt(6909),_u=nt(4895),vu=nt(3979),wu=nt(6920),Hu=nt(9026),qu=nt(6611),Ju=nt(991),_h=nt(7304),ed=nt(8230),td=nt(6984);const id="en",nd={be:ut,da:qt,de:Yt,eo:ys,en:Xt,es:Ec,fr:lu,hu:uu,it:_u,ja:vu,nl:wu,pl:Hu,"pt-BR":qu,sv:Ju,tr:_h,uk:ed,"zh-Hant":td,zh:td};function autoDetectLocale(ae,ue){for(const nt of window.navigator.languages){let ue=nt;switch(ue){case"zh-TW":case"zh-HK":case"zh-MO":ue="zh-Hant";break;case"zh-CN":case"zh-SG":ue="zh-Hans";break;default:ue.length>2&&(ue=nt.substring(0,2))}const ut=ae.find((ae=>ae===ue));if(ut)return ut}return ue}function getTranslations(){let ae=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";const ue=JSON.parse(JSON.stringify(Xt));let nt;if(ae||(ae=autoDetectLocale(Object.keys(nd),id)),nd[ae]&&"en"!==ae&&(nt=nd[ae]),ae.length>2){const ue=ae.substring(0,2);nd[ue]&&(nt=nd[ue])}return nt&&Object.entries(nt).forEach((ae=>{let[nt,ut]=ae;Object.entries(ut).forEach((ae=>{let[ut,qt]=ae;Array.isArray(qt)&&(qt=qt.filter((ae=>null!=ae))),ue[nt][ut]=qt}))})),ue}},2030:(ae,ue,nt)=>{"use strict";nt.r(ue),nt.d(ue,{API:()=>_u.A,PhotoAdapter:()=>vu.A,PresetsManager:()=>wu.A,URLHandler:()=>Hu.A,geocoder:()=>ut,i18n:()=>qt,map:()=>Yt,picture:()=>Xt,semantics:()=>ys,services:()=>Ec,utils:()=>lu,widgets:()=>uu});var ut=nt(3606),qt=nt(4964),Yt=nt(8340),Xt=nt(508),ys=nt(2283),Ec=nt(7208),lu=nt(7343),uu=nt(5995),_u=nt(5254),vu=nt(3727),wu=nt(4207),Hu=nt(4451)},8340:(ae,ue,nt)=>{"use strict";nt.r(ue),nt.d(ue,{MAP_EXPR_QUALITYSCORE:()=>wu,MAP_EXPR_QUALITYSCORE_GPS:()=>vu,MAP_THEMES:()=>uu,RASTER_LAYER_ID:()=>Xt,TILES_PICTURES_SYMBOL_ZOOM:()=>Ec,TILES_PICTURES_ZOOM:()=>ys,VECTOR_STYLES:()=>lu,combineStyles:()=>combineStyles,getMapParamsFromLocalStorage:()=>getMapParamsFromLocalStorage,getMissingLayerStyles:()=>getMissingLayerStyles,getThumbGif:()=>getThumbGif,getUserLayerId:()=>getUserLayerId,getUserSourceId:()=>getUserSourceId,initMapKeyboardHandler:()=>initMapKeyboardHandler,isLabelLayer:()=>isLabelLayer,isNullCoordinates:()=>isNullCoordinates,linkMapAndPhoto:()=>linkMapAndPhoto,mapFiltersFormValues:()=>mapFiltersFormValues,mapFiltersToLayersFilters:()=>mapFiltersToLayersFilters,saveMapParamsToLocalStorage:()=>saveMapParamsToLocalStorage,switchCoefValue:()=>switchCoefValue});var ut=nt(6883),qt=nt(7343),Yt=nt(4964);const Xt="pnx-aerial",ys=15,Ec=18,lu={PICTURES:{paint:{"circle-radius":["interpolate",["linear"],["zoom"],ys,4.5,Ec,6,24,12],"circle-opacity":["interpolate",["linear"],["zoom"],ys,0,ys+1,1],"circle-stroke-color":"#ffffff","circle-stroke-width":["interpolate",["linear"],["zoom"],ys+1,0,ys+2,1,Ec,1.5,24,3]},layout:{}},PICTURES_SYMBOLS:{paint:{"icon-opacity":["interpolate",["linear"],["zoom"],Ec,0,Ec+1,1]},layout:{"icon-image":["case",["==",["get","type"],"equirectangular"],"pnx-arrow-360","pnx-arrow-flat"],"icon-size":["interpolate",["linear"],["zoom"],Ec,.5,24,1],"icon-rotate":["to-number",["get","heading"]],"icon-allow-overlap":!0}},SEQUENCES:{paint:{"line-width":["interpolate",["linear"],["zoom"],0,.5,10,2,14,4,16,5,22,3]},layout:{"line-cap":"square"}},SEQUENCES_PLUS:{paint:{"line-width":["interpolate",["linear"],["zoom"],0,15,ys+1,30,ys+2,0],"line-opacity":0,"line-color":"#ff0000"},layout:{"line-cap":"square"}}},uu={DEFAULT:"default",AGE:"age",TYPE:"type",SCORE:"score",GPS:"gps"},_u=["case",["==",["get","type"],"equirectangular"],["case",["has","h_pixel_density"],["step",["get","h_pixel_density"],...qt.QUALITYSCORE_RES_360_VALUES],1],["case",["has","h_pixel_density"],["step",["get","h_pixel_density"],...qt.QUALITYSCORE_RES_FLAT_VALUES],1]],vu=["case",["has","gps_accuracy"],["step",["get","gps_accuracy"],...qt.QUALITYSCORE_GPS_VALUES],1],wu=["round",["+",["*",_u,qt.QUALITYSCORE_POND_RES],["*",vu,qt.QUALITYSCORE_POND_GPS]]];function getThumbGif(ae){const ue=document.createElement("img");return ue.src=ut,ue.alt=ae.loading,ue.title=ae.loading,ue.classList.add("pnx-map-thumb","pnx-map-thumb-loader"),ue}function isNullCoordinates(ae){return null===ae||void 0===ae||Array.isArray(ae)&&(2===ae.length&&0===ae[0]&&0===ae[1]||ae.length<2)}function isLabelLayer(ae){var ue;return"symbol"===ae.type&&void 0!==(null===ae||void 0===ae||null===(ue=ae.layout)||void 0===ue?void 0:ue["text-field"])&&(void 0===ae.minzoom||ae.minzoom<15)}function combineStyles(ae,ue){var nt,ut,qt;const ys=ae.api.getMapStyle();if(ys.layers=ys.layers||[],ys.layers=ys.layers.concat(getMissingLayerStyles(ys.sources,ys.layers)),ys.metadata||(ys.metadata={}),ue.supplementaryStyle&&(Object.assign(ys.sources,ue.supplementaryStyle.sources||{}),Object.assign(ys.metadata,ue.supplementaryStyle.metadata||{}),ys.layers=ys.layers.concat(ue.supplementaryStyle.layers||[])),ys.layers=ys.layers.filter((ae=>ae.id)),ue.raster&&(ys.sources["pnx-aerial"]=ue.raster,ys.layers.push({id:Xt,type:"raster",source:"pnx-aerial",layout:{visibility:"aerial"===ue.background?"visible":"none"}})),null!==ae&&void 0!==ae&&null!==(nt=ae.users)&&void 0!==nt&&nt.includes("geovisio")||ys.layers.forEach((ae=>{"geovisio"===ae.source&&(ae.layout||(ae.layout={}),ae.layout.visibility="none")})),ys.layers.sort(((ae,ue)=>isLabelLayer(ae)&&!isLabelLayer(ue)?1:!isLabelLayer(ae)&&isLabelLayer(ue)?-1:ae.id.startsWith("geovisio")&&!ue.id.startsWith("geovisio")?1:!ae.id.startsWith("geovisio")&&ue.id.startsWith("geovisio")?-1:ae.id.endsWith("_pictures")&&!ue.id.endsWith("_pictures")?1:!ae.id.endsWith("_pictures")&&ue.id.endsWith("_pictures")?-1:0)),null!==(ut=ys.metadata)&&void 0!==ut&&ut["panoramax:locales"]||(ys.metadata["panoramax:locales"]=["fr","en","de","es","ru","pt","zh","hi","latin"]),ys.metadata["panoramax:locales"]){let ue=ae.lang||(0,Yt.autoDetectLocale)(ys.metadata["panoramax:locales"],"latin");ue.includes("-")&&(ue=ue.split("-")[0]),ue.includes("_")&&(ue=ue.split("_")[0]),ys.layers.forEach((ae=>{isLabelLayer(ae)&&ae.layout["text-field"].includes("name:latin")&&(ae.layout["text-field"]=["coalesce",["get",`name:${ue}`],["get","name:latin"],["get","name"]])}))}const Ec=ys.layers.find((ae=>"place_label_city"==ae.id));let lu=ys.layers.find((ae=>"place_label_capital"==ae.id));return Ec&&!lu&&(Ec.paint={"text-color":"hsl(0, 0%, 0%)","text-halo-blur":0,"text-halo-color":"hsla(0, 0%, 100%, 1)","text-halo-width":3},Ec.layout["text-letter-spacing"]=.1,lu=JSON.parse(JSON.stringify(Ec)),lu.id="place_label_capital",lu.filter.push(["<=","capital",2]),Ec.filter.push([">","capital",2]),ys.layers.push(lu)),null!==ys&&void 0!==ys&&null!==(qt=ys.sources)&&void 0!==qt&&qt.plan_ign&&(ys.sources.plan_ign.maxzoom=18),ys}function getMissingLayerStyles(){let ae=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},ue=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];const nt=[];return Object.keys(ae).filter((ae=>void 0===ue.find((ue=>(null===ue||void 0===ue?void 0:ue.source)===ae)))).forEach((ae=>{ae.startsWith("geovisio")&&(nt.push({id:`${ae}_sequences`,type:"line",source:ae,"source-layer":"sequences",layout:{...lu.SEQUENCES.layout},paint:{...lu.SEQUENCES.paint,"line-color":qt.COLORS.BASE}}),nt.push({id:`${ae}_sequences_plus`,type:"line",source:ae,"source-layer":"sequences",layout:{...lu.SEQUENCES_PLUS.layout},paint:{...lu.SEQUENCES_PLUS.paint}}),nt.push({id:`${ae}_pictures_symbols`,type:"symbol",source:ae,"source-layer":"pictures",...lu.PICTURES_SYMBOLS}),nt.push({id:`${ae}_pictures_symbols`,type:"symbol",source:ae,"source-layer":"pictures",...lu.PICTURES_SYMBOLS}),nt.push({id:`${ae}_pictures`,type:"circle",source:ae,"source-layer":"pictures",layout:{...lu.PICTURES.layout},paint:{...lu.PICTURES.paint,"circle-color":qt.COLORS.BASE}}))})),ue.filter((ae=>{var nt;return(null===ae||void 0===ae||null===(nt=ae.id)||void 0===nt?void 0:nt.endsWith("_sequences"))&&void 0===ue.find((ue=>(null===ue||void 0===ue?void 0:ue.id)===ae.id+"_plus"))})).forEach((ae=>{nt.push({id:`${ae.id}_plus`,type:"line",source:ae.source,"source-layer":ae["source-layer"],layout:{...lu.SEQUENCES_PLUS.layout},paint:{...lu.SEQUENCES_PLUS.paint}})})),ue.filter((ae=>{var nt;return(null===ae||void 0===ae||null===(nt=ae.id)||void 0===nt?void 0:nt.endsWith("_pictures"))&&void 0===ue.find((ue=>(null===ue||void 0===ue?void 0:ue.id)===ae.id+"_symbols"))})).forEach((ae=>{nt.unshift({id:`${ae.id}_symbols`,type:"symbol",source:ae.source,"source-layer":"pictures",...lu.PICTURES_SYMBOLS}),ae.paint=Object.assign(ae.paint||{},lu.PICTURES.paint),ae.layout=Object.assign(ae.layout||{},lu.PICTURES.layout)})),nt}function mapFiltersFormValues(ae,ue,nt){const ut=null===ae||void 0===ae?void 0:ae.shadowRoot.getElementById("pnx-filter-date-from"),qt=null===ae||void 0===ae?void 0:ae.shadowRoot.getElementById("pnx-filter-date-end"),Yt=null===ae||void 0===ae?void 0:ae.shadowRoot.querySelectorAll("input[name='pnx-filter-type']");let Xt="";for(let lu=0;lu<Yt.length;lu++){const ae=Yt[lu];if(ae.checked){Xt=ae.value;break}}let ys=[],Ec=[];if(nt){const ue=null===ae||void 0===ae?void 0:ae.shadowRoot.getElementById("pnx-filter-qualityscore");ys=((null===ue||void 0===ue?void 0:ue.grade)||"").split(",").map((ae=>parseInt(ae))).filter((ae=>!isNaN(ae)));const nt=null===ae||void 0===ae?void 0:ae.shadowRoot.getElementById("pnx-filter-gps");Ec=((null===nt||void 0===nt?void 0:nt.grade)||"").split(",").map((ae=>parseInt(ae))).filter((ae=>!isNaN(ae)))}return{minDate:null===ut||void 0===ut?void 0:ut.value,maxDate:null===qt||void 0===qt?void 0:qt.value,pic_type:Xt,theme:null===ue||void 0===ue?void 0:ue.value,qualityscore:ys,gps:Ec}}function mapFiltersToLayersFilters(ae){let ue=arguments.length>1&&void 0!==arguments[1]&&arguments[1],nt={},ut=[],qt=[],Yt=!1;if(ae.minDate&&""!==ae.minDate&&(nt.minDate=ae.minDate,ut.push([">=",["get","date"],ae.minDate]),qt.push([">=",["get","ts"],ae.minDate])),ae.maxDate&&""!==ae.maxDate){nt.maxDate=ae.maxDate,ut.push(["<=",["get","date"],ae.maxDate]);let ue=new Date(ae.maxDate);ue.setDate(ue.getDate()+1),ue=ue.toISOString().split("T")[0],qt.push(["<=",["get","ts"],ue])}if(ae.pic_type&&""!==ae.pic_type&&(nt.pic_type="flat"===ae.pic_type?"flat":"equirectangular",ut.push(["==",["get","type"],nt.pic_type]),qt.push(["==",["get","type"],nt.pic_type])),ue&&(Yt=!0),ae.camera&&""!==ae.camera){nt.camera=ae.camera;const ue=ae.camera.toLowerCase().trim()+" ",Yt=ae.camera.toLowerCase().trim()+"zzzzzzzzzzzzzzzzzzzz",Xt=["collator",{"case-sensitive":!1,"diacritic-sensitive":!1}];ut.push([">=",["get","model"],ue,Xt]),ut.push(["<=",["get","model"],Yt,Xt]),qt.push([">=",["get","model"],ue,Xt]),qt.push(["<=",["get","model"],Yt,Xt])}return ae.qualityscore&&ae.qualityscore.length>0&&(nt.qualityscore=ae.qualityscore,ut.push(["in",wu,["literal",nt.qualityscore]]),qt.push(["in",wu,["literal",nt.qualityscore]])),ae.gps&&ae.gps.length>0&&(nt.gps=ae.gps,ut.push(["in",vu,["literal",nt.gps]]),qt.push(["in",vu,["literal",nt.gps]])),ae.theme&&Object.values(uu).includes(ae.theme)&&(nt.theme=ae.theme,Yt=!0),0==ut.length?ut=null:ut.unshift("all"),0==qt.length?qt=null:(qt.unshift("all"),qt=["step",["zoom"],!0,ys,qt]),{mapFilters:nt,mapSeqFilters:ut,mapPicFilters:qt,reloadMapStyle:Yt}}function getUserLayerId(ae,ue){return`${getUserSourceId(ae)}_${ue}`}function getUserSourceId(ae){return"geovisio"===ae?"geovisio":"geovisio_"+ae}function switchCoefValue(ae,ue){if(Array.isArray(ae))return ae.map((ae=>switchCoefValue(ae,ue)));if("object"===typeof ae&&null!==ae){const nt={};for(const ut in ae)nt[ut]=switchCoefValue(ae[ut],ue);return nt}return"string"===typeof ae&&(ae.startsWith("coef")||ae.startsWith("logged_coef"))?ue:ae}function linkMapAndPhoto(ae){const onPicLoad=ue=>{var nt,ut,Yt,Xt,ys,Ec;(0,qt.isNullId)(ue.detail.picId)?(ae.map.displayPictureMarker(),null!==ae&&void 0!==ae&&null!==(nt=ae.isMapWide)&&void 0!==nt&&nt.call(ae)&&(null===ae||void 0===ae||null===(ut=ae.mini)||void 0===ut||ut.setAttribute("collapsed",""))):(ae.map.displayPictureMarker(ue.detail.lon,ue.detail.lat,ae.psv.getXY().x,ue.detail.first&&!isNullCoordinates(null===(Yt=ae._initParams)||void 0===Yt||null===(Xt=Yt.getMapPostInit())||void 0===Xt?void 0:Xt.center),ue.detail.picId),null!==ae&&void 0!==ae&&null!==(ys=ae.isMapWide)&&void 0!==ys&&ys.call(ae)&&(null===ae||void 0===ae||null===(Ec=ae.mini)||void 0===Ec||Ec.removeAttribute("collapsed")))};ae.psv.addEventListener("picture-loading",onPicLoad),ae.psv.addEventListener("picture-loaded",onPicLoad),ae.psv.addEventListener("view-rotated",(()=>{let ue=ae.psv.getPosition().yaw*(180/Math.PI);ue+=ae.psv.getPictureOriginalHeading(),ae.map._picMarker.setRotation(ue)})),ae.psv.addEventListener("picture-preview-started",(ue=>{ae.map._picMarkerPreview.setLngLat(ue.detail.coordinates).setRotation(ue.detail.direction||0).addTo(ae.map)})),ae.psv.addEventListener("picture-preview-stopped",(()=>{ae.map._picMarkerPreview.remove()})),ae.psv.addEventListener("picture-loaded",(ue=>{ae.isWidthSmall()&&ae._picPopup&&ue.detail.picId==ae._picPopup._picId&&ae._picPopup.remove()})),ae.map.on("picture-click",(ue=>{ae.select(ue.seqId,ue.picId),!ae.psv._myVTour.state.currentNode&&null!==ae&&void 0!==ae&&ae._setFocus&&ae._setFocus("pic")})),ae.map.on("sequence-click",(ue=>{ae.api.getPicturesAroundCoordinates(ue.coordinates.lat,ue.coordinates.lng,1,1,ue.seqId).then((ue=>{var nt,ut;(null===ue||void 0===ue||null===(nt=ue.features)||void 0===nt?void 0:nt.length)>0&&(ae.select(null===(ut=ue.features[0])||void 0===ut?void 0:ut.collection,ue.features[0].id),!ae.psv.getPictureMetadata()&&null!==ae&&void 0!==ae&&ae._setFocus&&ae._setFocus("pic"))}))})),ae._setFocus&&(ae.psv.addEventListener("dblclick",(()=>{ae.isMapWide()&&ae._setFocus("pic")})),ae.map.on("dblclick",(()=>{ae.isMapWide()?"any"===ae.psv.getPicturesNavigation()&&ae.select():ae._setFocus("map")})))}function initMapKeyboardHandler(ae){ae.map.keyboard.keydown=function(ue){if(ue.altKey||ue.ctrlKey||ue.metaKey)return;switch(ue.key){case"*":case"5":return void ae.moveCenter();case"PageUp":case"9":return void ae.psv.goToNextPicture();case"PageDown":case"3":return void ae.psv.goToPrevPicture();case"Home":case"7":return ue.stopPropagation(),void ae._toggleFocus();case"End":case"1":return void ae.mini.toggleAttribute("collapsed");case" ":case"0":return void ae.psv.toggleSequencePlaying()}let nt=0,ut=0,qt=0,Yt=0,Xt=0;switch(ue.keyCode){case 61:case 107:case 171:case 187:nt=1;break;case 189:case 109:case 173:nt=-1;break;case 37:case 100:ue.shiftKey?ut=-1:(ue.preventDefault(),Yt=-1);break;case 39:case 102:ue.shiftKey?ut=1:(ue.preventDefault(),Yt=1);break;case 38:case 104:ue.shiftKey?qt=1:(ue.preventDefault(),Xt=-1);break;case 40:case 98:ue.shiftKey?qt=-1:(ue.preventDefault(),Xt=1);break;default:return}return this._rotationDisabled&&(ut=0,qt=0),{cameraAnimation:ae=>{const ys=this._tr;ae.easeTo({duration:300,easeId:"keyboardHandler",easing:ae=>ae*(2-ae),zoom:nt?Math.round(ys.zoom)+nt*(ue.shiftKey?2:1):ys.zoom,bearing:ys.bearing+ut*this._bearingStep,pitch:ys.pitch+qt*this._pitchStep,offset:[-Yt*this._panStep,-Xt*this._panStep],center:ys.center},{originalEvent:ue})}}}.bind(ae.map.keyboard)}const Hu="pnx-map-parameters";function getMapParamsFromLocalStorage(){const ae=localStorage.getItem(Hu);if(!ae)return{};try{return JSON.parse(ae)}catch(ue){return console.warn("Can't read map parameters stored in localStorage",ue),{}}}function saveMapParamsToLocalStorage(ae){const save=()=>localStorage.setItem(Hu,JSON.stringify({center:Object.fromEntries(Object.entries(ae.getCenter()).map((ae=>{let[ue,nt]=ae;return[ue,nt.toFixed(7)]}))),zoom:ae.getZoom().toFixed(1),background:ae.getBackground(),theme:ae._mapFilters.theme}));ae.on("background-changed",save),ae.on("filters-changed",save),ae.on("moveend",save),ae.on("zoomend",save),ae.on("dragend",save),ae.on("boxzoomend",save)}},508:(ae,ue,nt)=>{"use strict";nt.r(ue),nt.d(ue,{apiFeatureToPSVNode:()=>apiFeatureToPSVNode,filterRelatedPicsLinks:()=>filterRelatedPicsLinks,getCroppedPanoData:()=>getCroppedPanoData,getExifFloat:()=>getExifFloat,getGPSPrecision:()=>getGPSPrecision,getHashTags:()=>getHashTags,getNodeCaption:()=>getNodeCaption,getSphereCorrection:()=>getSphereCorrection,hasAnnotations:()=>hasAnnotations,sortPicturesInDirection:()=>sortPicturesInDirection});var ut=nt(8407),qt=nt(6830),Yt=nt(7343);const Xt=(0,Yt.svgToPSVLink)(ut,"white"),ys=(0,Yt.svgToPSVLink)(qt,Yt.COLORS.NEXT);function getExifFloat(ae){if(!([null,void 0,""].includes(ae)||"string"===typeof ae&&""===ae.trim())){if("number"===typeof ae)return ae;if("string"!==typeof ae);else{if(/^-?\d+(\.\d+)?\/-?\d+(\.\d+)?$/.test(ae)){const ue=ae.split("/").map((ae=>parseFloat(ae)));return ue[0]/ue[1]}try{return parseFloat(ae)}catch(ue){}}}}function getGPSPrecision(ae){var ue,nt,ut,qt,Yt;let Xt=null;const ys=(null===ae||void 0===ae||null===(ue=ae.properties)||void 0===ue?void 0:ue["quality:horizontal_accuracy"])||getExifFloat(null===ae||void 0===ae||null===(nt=ae.properties)||void 0===nt||null===(ut=nt.exif)||void 0===ut?void 0:ut["Exif.GPSInfo.GPSHPositioningError"]),Ec=getExifFloat(null===ae||void 0===ae||null===(qt=ae.properties)||void 0===qt||null===(Yt=qt.exif)||void 0===Yt?void 0:Yt["Exif.GPSInfo.GPSDOP"]);return void 0!==ys?Xt=`${ys} m`:void 0!==Ec&&(Xt=Ec<1?"ideal":Ec<2?"excellent":Ec<5?"good":Ec<10?"moderate":Ec<20?"fair":"poor"),Xt}function getSphereCorrection(ae){var ue,nt,ut,qt;let Yt=null===(ue=ae.properties)||void 0===ue?void 0:ue["view:azimuth"];if(void 0===Yt){var Xt,ys;const ue=getExifFloat(null===(Xt=ae.properties)||void 0===Xt||null===(ys=Xt.exif)||void 0===ys?void 0:ys["Exif.GPSInfo.GPSImgDirection"]);void 0!==ue&&(Yt=ue)}Yt=Yt||0;let Ec=null===(nt=ae.properties)||void 0===nt?void 0:nt["pers:yaw"],lu=["Xmp.GPano.PoseHeadingDegrees","Xmp.Camera.Yaw","Exif.MpfInfo.MPFYawAngle"];if(void 0===Ec)for(let ed of lu){var uu,_u;const ue=getExifFloat(null===(uu=ae.properties)||void 0===uu||null===(_u=uu.exif)||void 0===_u?void 0:_u[ed]);if(void 0!==ue){Ec=ue;break}}Ec=Ec||0,Math.round(Yt)===Math.round(Ec)&&Ec>0&&console.warn("Picture with UUID",ae.id,"has same GPS Image direction and Yaw, could cause rendering issues");let vu=null===(ut=ae.properties)||void 0===ut?void 0:ut["pers:pitch"];if(lu=["Xmp.GPano.PosePitchDegrees","Xmp.Camera.Pitch","Exif.MpfInfo.MPFPitchAngle"],void 0===vu)for(let ed of lu){var wu,Hu;const ue=getExifFloat(null===(wu=ae.properties)||void 0===wu||null===(Hu=wu.exif)||void 0===Hu?void 0:Hu[ed]);if(void 0!==ue){vu=ue;break}}vu=vu||0;let qu=null===(qt=ae.properties)||void 0===qt?void 0:qt["pers:roll"];if(lu=["Xmp.GPano.PoseRollDegrees","Xmp.Camera.Roll","Exif.MpfInfo.MPFRollAngle"],void 0===qu)for(let ed of lu){var Ju,_h;const ue=getExifFloat(null===(Ju=ae.properties)||void 0===Ju||null===(_h=Ju.exif)||void 0===_h?void 0:_h[ed]);if(void 0!==ue){qu=ue;break}}return qu=qu||0,0!==vu&&0!==qu?{pan:Ec*Math.PI/180,tilt:vu*Math.PI/180,roll:qu*Math.PI/180}:{}}function getCroppedPanoData(ae,ue){var nt,ut,qt;let Yt;var Xt,ys;if(null!==(nt=ae.properties)&&void 0!==nt&&nt["pers:interior_orientation"]&&(null!==(Xt=ae.properties["pers:interior_orientation"])&&void 0!==Xt&&Xt.visible_area&&null!==(ys=ae.properties["pers:interior_orientation"])&&void 0!==ys&&ys.sensor_array_dimensions)){const ue=ae.properties["pers:interior_orientation"].visible_area,nt=ae.properties["pers:interior_orientation"].sensor_array_dimensions;try{Yt={fullWidth:parseInt(nt[0]),fullHeight:parseInt(nt[1]),croppedX:parseInt(ue[0]),croppedY:parseInt(ue[1]),croppedWidth:parseInt(nt[0])-parseInt(ue[2])-parseInt(ue[0]),croppedHeight:parseInt(nt[1])-parseInt(ue[3])-parseInt(ue[1])}}catch(qu){console.warn("Invalid pers:interior_orientation values for cropped panorama "+ae.id)}}if(!Yt&&null!==(ut=ae.properties)&&void 0!==ut&&ut.exif)try{var Ec,lu,uu,_u,vu,wu;Yt={fullWidth:parseInt(null===(Ec=ae.properties.exif)||void 0===Ec?void 0:Ec["Xmp.GPano.FullPanoWidthPixels"]),fullHeight:parseInt(null===(lu=ae.properties.exif)||void 0===lu?void 0:lu["Xmp.GPano.FullPanoHeightPixels"]),croppedX:parseInt(null===(uu=ae.properties.exif)||void 0===uu?void 0:uu["Xmp.GPano.CroppedAreaLeftPixels"]),croppedY:parseInt(null===(_u=ae.properties.exif)||void 0===_u?void 0:_u["Xmp.GPano.CroppedAreaTopPixels"]),croppedWidth:parseInt(null===(vu=ae.properties.exif)||void 0===vu?void 0:vu["Xmp.GPano.CroppedAreaImageWidthPixels"]),croppedHeight:parseInt(null===(wu=ae.properties.exif)||void 0===wu?void 0:wu["Xmp.GPano.CroppedAreaImageHeightPixels"])},Yt.croppedWidth>Yt.fullWidth&&(Yt.fullWidth=Yt.croppedWidth),Yt.croppedHeight>Yt.fullHeight&&(Yt.fullHeight=Yt.croppedHeight)}catch(qu){console.warn("Invalid XMP.GPano values for cropped panorama "+ae.id)}if(Yt&&(Yt=Object.fromEntries(Object.entries(Yt||{}).filter((ae=>!isNaN(ae[1])))),(!Yt.fullWidth&&!Yt.croppedWidth&&Yt.fullHeight&&!Yt.croppedHeight||Yt.fullWidth&&!Yt.croppedWidth&&!Yt.fullHeight&&!Yt.croppedHeight||Yt.fullWidth&&!Yt.croppedWidth&&Yt.fullHeight&&!Yt.croppedHeight||Yt.fullWidth==Yt.croppedWidth&&Yt.fullHeight==Yt.croppedHeight)&&(Yt={})),null!==(qt=Yt)&&void 0!==qt&&qt.fullWidth&&null!==ue&&void 0!==ue&&ue.width){var Hu;let ae=ue.width/((null===(Hu=Yt)||void 0===Hu?void 0:Hu.croppedWidth)||Yt.fullWidth);Yt={fullWidth:void 0!==Yt.fullWidth?Math.floor(Yt.fullWidth*ae):void 0,fullHeight:void 0!==Yt.fullHeight?Math.floor(Yt.fullHeight*ae):void 0,croppedWidth:void 0!==Yt.croppedWidth?Math.floor(Yt.croppedWidth*ae):void 0,croppedHeight:void 0!==Yt.croppedHeight?Math.floor(Yt.croppedHeight*ae):void 0,croppedX:void 0!==Yt.croppedX?Math.floor(Yt.croppedX*ae):void 0,croppedY:void 0!==Yt.croppedY?Math.floor(Yt.croppedY*ae):void 0}}return Yt||{}}function sortPicturesInDirection(ae){return(ue,nt)=>"related"!=ue.rel&&"related"!=nt.rel?0:"related"!=ue.rel?-1:"related"!=nt.rel?1:ue.date==nt.date?(0,Yt.getDistance)(ae,ue.geometry.coordinates)-(0,Yt.getDistance)(ae,nt.geometry.coordinates):nt.date.localeCompare(ue.date)}function getNodeCaption(ae,ue){var nt,ut,qt;const Yt={};if(null!==ae&&void 0!==ae&&null!==(nt=ae.properties)&&void 0!==nt&&nt.datetimetz){Yt.date=new Date(ae.properties.datetimetz);const ue=ae.properties.datetimetz.match(/([+-]\d{2}):(\d{2})$|Z$/);ue&&("Z"===ue[0]?Yt.tz="UTC":Yt.tz=ue[0])}else null!==ae&&void 0!==ae&&null!==(ut=ae.properties)&&void 0!==ut&&ut.datetime&&(Yt.date=new Date(ae.properties.datetime));if(null!==ae&&void 0!==ae&&ae.providers){var Xt;const ue=null===ae||void 0===ae||null===(Xt=ae.providers)||void 0===Xt?void 0:Xt.filter((ae=>{var ue;return null===ae||void 0===ae||null===(ue=ae.roles)||void 0===ue?void 0:ue.includes("producer")}));if((null===ue||void 0===ue?void 0:ue.length)>=0){const ae={};ue.map((ae=>ae.name)).forEach((ue=>{const nt=ue.toLowerCase().replace(/\s/g,"");ae[nt]?ae[nt].push(ue):ae[nt]=[ue]})),Yt.producer=[],Object.values(ae).forEach((ae=>{const ue=ae[0],nt=ae.find((ae=>ae.toLowerCase()!=ae));Yt.producer.push(nt||ue)}))}}if(null!==ae&&void 0!==ae&&null!==(qt=ae.properties)&&void 0!==qt&&qt.license&&(Yt.license=ae.properties.license,null!==ae&&void 0!==ae&&ae.links)){const nt=ae.links.find((ae=>"license"===(null===ae||void 0===ae?void 0:ae.rel)));nt&&(Yt.license=`<a href="${nt.href}" title="${ue.pnx.metadata_general_license_link}" target="_blank">${Yt.license}</a>`)}return Yt}function apiFeatureToPSVNode(ae,ue){var nt,ut,qt,Yt,Xt,ys,Ec,lu,uu,_u,vu,wu,Hu,qu,Ju,_h;let ed=arguments.length>2&&void 0!==arguments[2]&&arguments[2],td=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,id=arguments.length>4&&void 0!==arguments[4]?arguments[4]:ae=>ae;const nd=null!=(null===(nt=ae.properties)||void 0===nt||null===(ut=nt["pers:interior_orientation"])||void 0===ut?void 0:ut.field_of_view);let rd=nd?parseInt(ae.properties["pers:interior_orientation"].field_of_view):70;const ad=360===rd,sd=id((Object.values(ae.assets).find((ae=>{var ue;return null===ae||void 0===ae||null===(ue=ae.roles)||void 0===ue?void 0:ue.includes("data")}))||{}).href),od=null===ae||void 0===ae||null===(qt=ae.properties)||void 0===qt||null===(Yt=qt["tiles:tile_matrix_sets"])||void 0===Yt?void 0:Yt.geovisio,ld=null===(Xt=ae.links)||void 0===Xt||null===(ys=Xt.find)||void 0===ys?void 0:ys.call(Xt,(ae=>"prev"===(null===ae||void 0===ae?void 0:ae.rel)&&"application/geo+json"===(null===ae||void 0===ae?void 0:ae.type))),cd=null===(Ec=ae.links)||void 0===Ec||null===(lu=Ec.find)||void 0===lu?void 0:lu.call(Ec,(ae=>"next"===(null===ae||void 0===ae?void 0:ae.rel)&&"application/geo+json"===(null===ae||void 0===ae?void 0:ae.type))),ud=Object.values(ae.assets).find((ae=>{var ue;return(null===(ue=ae.roles)||void 0===ue?void 0:ue.includes("visual"))&&"image/webp"===ae.type})),hd=Object.values(ae.assets).find((ae=>{var ue;return(null===(ue=ae.roles)||void 0===ue?void 0:ue.includes("visual"))&&"image/jpeg"===ae.type})),dd=id((ud||hd).href),pd=id(null===(uu=Object.values(ae.assets).find((ae=>{var ue;return(null===(ue=ae.roles)||void 0===ue?void 0:ue.includes("thumbnail"))&&"image/jpeg"===ae.type})))||void 0===uu?void 0:uu.href),md=(null===ae||void 0===ae||null===(_u=ae.asset_templates)||void 0===_u?void 0:_u.tiles_webp)||(null===ae||void 0===ae||null===(vu=ae.asset_templates)||void 0===vu?void 0:vu.tiles),gd=getCroppedPanoData(ae),fd=null===(wu=ae.links)||void 0===wu||null===(Hu=wu.find)||void 0===Hu?void 0:Hu.call(wu,(ae=>"via"===(null===ae||void 0===ae?void 0:ae.rel)&&"application/json"===(null===ae||void 0===ae?void 0:ae.type))),Ad=null===(qu=ae.properties)||void 0===qu||null===(Ju=qu["pers:interior_orientation"])||void 0===Ju?void 0:Ju.sensor_array_dimensions;let yd;if(Object.keys(gd).length>0)yd={baseUrl:ed?sd:dd,origBaseUrl:ed?sd:dd,hdUrl:sd,thumbUrl:pd,basePanoData:ed?gd:ue=>getCroppedPanoData(ae,ue),cropData:gd,width:gd.fullWidth,cols:2,rows:1,tileUrl:()=>null};else if(ad&&od)yd={baseUrl:dd,origBaseUrl:dd,basePanoData:ae=>({fullWidth:ae.width,fullHeight:ae.height}),hdUrl:sd,thumbUrl:pd,cols:od&&od.tileMatrix[0].matrixWidth,rows:od&&od.tileMatrix[0].matrixHeight,width:od&&od.tileMatrix[0].matrixWidth*od.tileMatrix[0].tileWidth,tileUrl:od&&((ae,ue)=>id(md.href.replace(/\{TileCol\}/g,ae).replace(/\{TileRow\}/g,ue)))};else{const getFlatCrop=ae=>{ae.width<ae.height&&!nd&&(rd=35);const ue=rd*ae.height/ae.width,nt=360*ae.width/rd,ut=180*ae.height/ue;return{fullWidth:Math.floor(nt),fullHeight:Math.floor(ut),croppedWidth:ae.width,croppedHeight:ae.height,croppedX:Math.floor((nt-ae.width)/2),croppedY:Math.floor((ut-ae.height)/2)}};let ae=Ad?getFlatCrop({width:Ad[0],height:Ad[1]}):null;yd={baseUrl:ed?sd:dd,origBaseUrl:ed?sd:dd,hdUrl:sd,thumbUrl:pd,basePanoData:getFlatCrop,cropData:ae,width:(null===ae||void 0===ae?void 0:ae.fullWidth)||2,cols:2,rows:1,tileUrl:()=>null}}null!==(_h=ae.properties)&&void 0!==_h&&_h.semantics&&(ae.properties.semantics=ae.properties.semantics.filter((ae=>Object.keys(ae).length>0)));return{id:ae.id,caption:getNodeCaption(ae,ue),panorama:yd,links:filterRelatedPicsLinks(ae,td),gps:ae.geometry.coordinates,sequence:{id:ae.collection,nextPic:cd?cd.id:void 0,prevPic:ld?ld.id:void 0},sphereCorrection:getSphereCorrection(ae),horizontalFov:rd,origInstance:fd,properties:ae.properties}}function filterRelatedPicsLinks(ae){var ue;let nt=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;const ut=ae.links.filter((ae=>["next","prev","related"].includes(null===ae||void 0===ae?void 0:ae.rel)&&"application/geo+json"===(null===ae||void 0===ae?void 0:ae.type))).filter((ae=>!nt||nt(ae))).map((ae=>(ae.datetime&&(ae.date=ae.datetime.split("T")[0]),ae))),qt=ae.geometry.coordinates,Ec=[],lu={N:[],ENE:[],ESE:[],S:[],WSW:[],WNW:[]};for(let Xt of ut){lu[(0,Yt.getSimplifiedAngle)(qt,Xt.geometry.coordinates)].push(Xt)}for(let Yt in lu){const ae=lu[Yt];0!=ae.length&&(ae.sort(sortPicturesInDirection(qt)),Ec.push(ae.shift()))}let arrowStyle=ae=>"related"===ae.rel?{element:(0,Yt.getArrow)(ys),size:{width:128/3,height:128}}:{element:(0,Yt.getArrow)(Xt),size:{width:75,height:75}};const uu=-((null===(ue=ae.properties)||void 0===ue?void 0:ue["view:azimuth"])||0)*(Math.PI/180);return Ec.map((ae=>({nodeId:ae.id,gps:ae.geometry.coordinates,arrowStyle:arrowStyle(ae),linkOffset:{yaw:uu}})))}function getHashTags(ae){var ue;if(null===ae||void 0===ae||null===(ue=ae.properties)||void 0===ue||!ue.semantics)return[];const nt=ae.properties.semantics.filter((ae=>"hashtags"===ae.key)),ut=[];return nt.forEach((ae=>ae.value.split(";").forEach((ae=>ut.push(ae.trim()))))),ut}function hasAnnotations(ae){var ue,nt;return(null===ae||void 0===ae||null===(ue=ae.properties)||void 0===ue||null===(nt=ue.annotations)||void 0===nt?void 0:nt.length)>0}},2283:(ae,ue,nt)=>{"use strict";nt.r(ue),nt.d(ue,{SEMANTICS_OVERLAYS:()=>lu,computeDiffTags:()=>computeDiffTags,decodeBasicTag:()=>decodeBasicTag,decodeKey:()=>decodeKey,groupByPrefix:()=>groupByPrefix,parseSemanticsString:()=>parseSemanticsString});var ut=nt(4542),qt=nt(5995),Yt=nt(7929),Xt=nt(1760),ys=nt(9472),Ec=nt(7208);const lu=[["features","semantics IS NOT NULL",{metadata:{name:"All features"},type:"circle",layout:{visibility:"none"},paint:{"circle-radius":4,"circle-color":"#00897B"}}],["tfsigns",'"semantics.osm|traffic_sign" IS NOT NULL',{metadata:{name:"Traffic signs"},type:"symbol",layout:{visibility:"none","icon-overlap":"never","icon-image":["case",["in",";",["get","osm|traffic_sign"]],"pnx-tfsigns-fr:0_many",["==",["slice",["get","osm|traffic_sign"],0,2],"FR"],["concat","pnx-tfsigns-fr:",["slice",["get","osm|traffic_sign"],3]],["==",["get","osm|traffic_sign"],"yes"],"pnx-tfsigns-fr:0_unknown",["has","osm|traffic_sign"],"pnx-tfsigns-fr:0_unknown",""]}},{"pnx-tfsigns-fr":`${(0,Ec.PanoramaxPresetsURL)()}/sprites/trafficsigns_fr`}]];function valToValLink(ae,ue,nt){return ut.qy`
2976
2976
  ${ae}
2977
2977
  <pnx-link-button
2978
2978
  kind="superinline"