@geops/rvf-mobility-web-component 0.1.126 → 0.1.127-beta.1

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/indexDoc.js ADDED
@@ -0,0 +1,37 @@
1
+ (()=>{function Ke(e,t,o){let r=Math.min.apply(null,e),i=Math.min.apply(null,t),n=Math.max.apply(null,e),a=Math.max.apply(null,t);return pe(r,i,n,a,o)}function pe(e,t,o,r,i){return i?(i[0]=e,i[1]=t,i[2]=o,i[3]=r,i):[e,t,o,r]}function je(e){return pe(1/0,1/0,-1/0,-1/0,e)}function Je(e){return e[2]<e[0]||e[3]<e[1]}function fe(e,t,o,r){if(Je(e))return je(o);let i=[];if(r>1){let s=e[2]-e[0],l=e[3]-e[1];for(let u=0;u<r;++u)i.push(e[0]+s*u/r,e[1],e[2],e[1]+l*u/r,e[2]-s*u/r,e[3],e[0],e[3]-l*u/r)}else i=[e[0],e[1],e[2],e[1],e[2],e[3],e[0],e[3]];t(i,i,2);let n=[],a=[];for(let s=0,l=i.length;s<l;s+=2)n.push(i[s]),a.push(i[s+1]);return Ke(n,a,o)}function H(e){return e*180/Math.PI}function I(e){return e*Math.PI/180}function de(e,t){let o=e%t;return o*t<0?o+t:o}function U(e,t,o){if(e>=t&&e<o)return e;let r=o-t;return((e-t)%r+r)%r+t}var he={radians:6370997/(2*Math.PI),degrees:2*Math.PI*6370997/360,ft:.3048,m:1,"us-ft":1200/3937};var K=class{constructor(t){this.code_=t.code,this.units_=t.units,this.extent_=t.extent!==void 0?t.extent:null,this.worldExtent_=t.worldExtent!==void 0?t.worldExtent:null,this.axisOrientation_=t.axisOrientation!==void 0?t.axisOrientation:"enu",this.global_=t.global!==void 0?t.global:!1,this.canWrapX_=!!(this.global_&&this.extent_),this.getPointResolutionFunc_=t.getPointResolution,this.defaultTileGrid_=null,this.metersPerUnit_=t.metersPerUnit}canWrapX(){return this.canWrapX_}getCode(){return this.code_}getExtent(){return this.extent_}getUnits(){return this.units_}getMetersPerUnit(){return this.metersPerUnit_||he[this.units_]}getWorldExtent(){return this.worldExtent_}getAxisOrientation(){return this.axisOrientation_}isGlobal(){return this.global_}setGlobal(t){this.global_=t,this.canWrapX_=!!(t&&this.extent_)}getDefaultTileGrid(){return this.defaultTileGrid_}setDefaultTileGrid(t){this.defaultTileGrid_=t}setExtent(t){this.extent_=t,this.canWrapX_=!!(this.global_&&t)}setWorldExtent(t){this.worldExtent_=t}setGetPointResolution(t){this.getPointResolutionFunc_=t}getPointResolutionFunc(){return this.getPointResolutionFunc_}},M=K;var v=6378137,w=Math.PI*v,Ze=[-w,-w,w,w],Qe=[-180,-85,180,85],G=v*Math.log(Math.tan(Math.PI/2)),y=class extends M{constructor(t){super({code:t,units:"m",extent:Ze,global:!0,worldExtent:Qe,getPointResolution:function(o,r){return o/Math.cosh(r[1]/v)}})}},j=[new y("EPSG:3857"),new y("EPSG:102100"),new y("EPSG:102113"),new y("EPSG:900913"),new y("http://www.opengis.net/def/crs/EPSG/0/3857"),new y("http://www.opengis.net/gml/srs/epsg.xml#3857")];function me(e,t,o,r){let i=e.length;o=o>1?o:2,r=r??o,t===void 0&&(o>2?t=e.slice():t=new Array(i));for(let n=0;n<i;n+=r){t[n]=w*e[n]/180;let a=v*Math.log(Math.tan(Math.PI*(+e[n+1]+90)/360));a>G?a=G:a<-G&&(a=-G),t[n+1]=a}return t}function be(e,t,o,r){let i=e.length;o=o>1?o:2,r=r??o,t===void 0&&(o>2?t=e.slice():t=new Array(i));for(let n=0;n<i;n+=r)t[n]=180*e[n]/w,t[n+1]=360*Math.atan(Math.exp(e[n+1]/v))/Math.PI-90;return t}var et=6378137,ge=[-180,-90,180,90],tt=Math.PI*et/180,b=class extends M{constructor(t,o){super({code:t,units:"degrees",extent:ge,axisOrientation:o,global:!0,metersPerUnit:tt,worldExtent:ge})}},J=[new b("CRS:84"),new b("EPSG:4326","neu"),new b("urn:ogc:def:crs:OGC:1.3:CRS84"),new b("urn:ogc:def:crs:OGC:2:84"),new b("http://www.opengis.net/def/crs/OGC/1.3/CRS84"),new b("http://www.opengis.net/gml/srs/epsg.xml#4326","neu"),new b("http://www.opengis.net/def/crs/EPSG/0/4326","neu")];var Z={};function Ee(e){return Z[e]||Z[e.replace(/urn:(x-)?ogc:def:crs:EPSG:(.*:)?(\w+)$/,"EPSG:$3")]||null}function ye(e,t){Z[e]=t}var A={};function S(e,t,o){let r=e.getCode(),i=t.getCode();r in A||(A[r]={}),A[r][i]=o}function D(e,t){return e in A&&t in A[e]?A[e][t]:null}var V=.9996,p=.00669438,W=p*p,Y=W*p,T=p/(1-p),_e=Math.sqrt(1-p),R=(1-_e)/(1+_e),Ae=R*R,Q=Ae*R,ee=Q*R,Se=ee*R,Re=1-p/4-3*W/64-5*Y/256,ot=3*p/8+3*W/32+45*Y/1024,rt=15*W/256+45*Y/1024,it=35*Y/3072,nt=3/2*R-27/32*Q+269/512*Se,at=21/16*Ae-55/32*ee,st=151/96*Q-417/128*Se,lt=1097/512*ee,X=6378137;function ct(e,t,o){let r=e-5e5,a=(o.north?t:t-1e7)/V/(X*Re),s=a+nt*Math.sin(2*a)+at*Math.sin(4*a)+st*Math.sin(6*a)+lt*Math.sin(8*a),l=Math.sin(s),u=l*l,g=Math.cos(s),P=l/g,f=P*P,E=f*f,d=1-p*u,L=Math.sqrt(1-p*u),k=X/L,F=(1-p)/d,h=T*g**2,x=h*h,m=r/(k*V),N=m*m,O=N*m,ce=O*m,ue=ce*m,qe=ue*m,He=s-P/F*(N/2-ce/24*(5+3*f+10*h-4*x-9*T))+qe/720*(61+90*f+298*h+45*E-252*T-3*x),q=(m-O/6*(1+2*f+h)+ue/120*(5-2*h+28*f-3*x+8*T+24*E))/g;return q=U(q+I(Pe(o.number)),-Math.PI,Math.PI),[H(q),H(He)]}var Te=-80,Me=84,ut=-180,pt=180;function ft(e,t,o){e=U(e,ut,pt),t<Te?t=Te:t>Me&&(t=Me);let r=I(t),i=Math.sin(r),n=Math.cos(r),a=i/n,s=a*a,l=s*s,u=I(e),g=Pe(o.number),P=I(g),f=X/Math.sqrt(1-p*i**2),E=T*n**2,d=n*U(u-P,-Math.PI,Math.PI),L=d*d,k=L*d,F=k*d,h=F*d,x=h*d,m=X*(Re*r-ot*Math.sin(2*r)+rt*Math.sin(4*r)-it*Math.sin(6*r)),N=V*f*(d+k/6*(1-s+E)+h/120*(5-18*s+l+72*E-58*T))+5e5,O=V*(m+f*a*(L/2+F/24*(5-s+9*E+4*E**2)+x/720*(61-58*s+l+600*E-330*T)));return o.north||(O+=1e7),[N,O]}function Pe(e){return(e-1)*6-180+3}var dt=[/^EPSG:(\d+)$/,/^urn:ogc:def:crs:EPSG::(\d+)$/,/^http:\/\/www\.opengis\.net\/def\/crs\/EPSG\/0\/(\d+)$/];function xe(e){let t=0;for(let i of dt){let n=e.match(i);if(n){t=parseInt(n[1]);break}}if(!t)return null;let o=0,r=!1;return t>32700&&t<32761?o=t-32700:t>32600&&t<32661&&(r=!0,o=t-32600),o?{number:o,north:r}:null}function we(e,t){return function(o,r,i,n){let a=o.length;i=i>1?i:2,n=n??i,r||(i>2?r=o.slice():r=new Array(a));for(let s=0;s<a;s+=n){let l=o[s],u=o[s+1],g=e(l,u,t);r[s]=g[0],r[s+1]=g[1]}return r}}function Oe(e){return xe(e)?new M({code:e,units:"m"}):null}function Ie(e){let t=xe(e.getCode());return t?{forward:we(ft,t),inverse:we(ct,t)}:null}var ht=[Ie],mt=[Oe];var bt=!0;function gt(e){bt=!(e===void 0?!0:e)}function Ce(e,t){if(t!==void 0){for(let o=0,r=e.length;o<r;++o)t[o]=e[o];t=t}else t=e.slice();return t}function oe(e){ye(e.getCode(),e),S(e,e,Ce)}function Et(e){e.forEach(oe)}function z(e){if(typeof e!="string")return e;let t=Ee(e);if(t)return t;for(let o of mt){let r=o(e);if(r)return r}return null}function ve(e){Et(e),e.forEach(function(t){e.forEach(function(o){t!==o&&S(t,o,Ce)})})}function yt(e,t,o,r){e.forEach(function(i){t.forEach(function(n){S(i,n,o),S(n,i,r)})})}function Le(e,t){return gt(),Ne(e,"EPSG:4326",t!==void 0?t:"EPSG:3857")}function ke(e,t){let o=Ne(e,t!==void 0?t:"EPSG:3857","EPSG:4326"),r=o[0];return(r<-180||r>180)&&(o[0]=de(r+180,360)-180),o}function _t(e,t){let o=e.getCode(),r=t.getCode(),i=D(o,r);if(i)return i;let n=null,a=null;for(let l of ht)n||(n=l(e)),a||(a=l(t));if(!n&&!a)return null;let s="EPSG:4326";if(a)if(n)i=te(n.inverse,a.forward);else{let l=D(o,s);l&&(i=te(l,a.forward))}else{let l=D(s,r);l&&(i=te(n.inverse,l))}return i&&(oe(e),oe(t),S(e,t,i)),i}function te(e,t){return function(o,r,i,n){return r=e(o,r,i,n),t(r,r,i,n)}}function Fe(e,t){let o=z(e),r=z(t);return _t(o,r)}function Ne(e,t,o){let r=Fe(t,o);if(!r){let i=z(t).getCode(),n=z(o).getCode();throw new Error(`No transform available between ${i} and ${n}`)}return r(e,void 0,e.length)}function Ue(e,t,o,r){let i=Fe(t,o);return fe(e,i,void 0,r)}function Tt(){ve(j),ve(J),yt(J,j,me,be)}Tt();var Ge="echtzeit",De="haltestellen",Ve="meldungen",Xe="liniennetz",We="mapset",Mt=[7.5,47.7,8.45,48.4],wt=Mt,re=Ue(wt,"EPSG:4326","EPSG:3857");window.fromLonLat=Le;window.toLonLat=ke;var c={bikeFrelo:"fahrradfrelo",bikeOthers:"fahrradandere",cargobikeFrelo:"cargobikefrelo",cargobikeOthers:"cargobikeandere",carGrf:"grueneflotte",carNatur:"naturenergie",carOthers:"autoandere",eroller:"e-roller",linesnetworkplan:Xe,mapset:We,mitfahrpunkte:"mitfahrpunkte",notifications:Ve,pois:"pois",realtime:Ge,sharedMobility:"sharedmobility",stations:De,tarifzonen:"tarifzonen",verkaufsstellen:"verkaufsstellen"},ao=Object.values(c),Ye=Object.values(c).filter(e=>![c.mapset,c.mitfahrpunkte,c.pois,c.stations,c.tarifzonen].includes(e)),so=[Ve,We,Ge,De,Xe,c.tarifzonen,c.verkaufsstellen,c.pois,c.sharedMobility],ze=Object.values(c).filter(e=>e!==c.tarifzonen&&e!==c.pois&&e!==c.realtime);var At='<a href="https://developer.geops.io/">geOps API key</a>',$e='<a href="https://developer.geops.io/apis/maps">geOps Maps API</a>',St='<a href="https://developer.geops.io/apis/stops">geOps Stops API</a>',ie='<a href="https://geops.com/en/solution/disruption-information">geOps MOCO API</a>',$='<a href="https://geops.com/en/solution/mapset">geOps Mapset API</a>',B='<a href="https://developer.geops.io/apis/realtime">geOps Realtime API</a>',Rt={apikey:{defaultValue:"5cc87b12d7c5370001c1d655cb6b0a94dc1a4b859313dc211675efd6",description:`Your ${At}`,public:!1},baselayer:{defaultValue:"de.rvf_moco",description:`The style's name from the ${$e}. <br/>Ex: base_dark_v2, base_bright_v2, ...`,public:!1},center:{description:"The center of the map in EPSG:3857 coordinates.<br/>Parameter required if extent is not set.",public:!0},details:{defaultValue:"true",description:"When a feature of a queryable layer is clicked, it displays informations about it.",public:!0,type:"boolean"},embed:{defaultValue:"false",description:"Toggle the embedded navigation mode.<br/>In this mode zooming with mouse wheel is deactivated and, on touch device, you can only navigate with two finger, a warning message is displayed to warn the user.",public:!0,type:"boolean"},extent:{defaultValue:re.join(","),description:"The map's extent in EPSG:3857 coordinates.<br/>Ex: 831634,5933959,940649,6173660 .<br/>Parameter required if center and zoom are not set.",public:!0},geolocation:{defaultValue:"true",description:"Toggle the display of the geolocation button or not.",public:!0,type:"boolean"},lang:{defaultValue:"de",description:"The language to use for the map. Supported languages are : de, en, fr, it.",public:!0},layers:{defaultValue:null,description:`A comma separated list of layers's name to make visible on load, others are hidden. If empty, all layers will be hidden except the baselayer.<br/>Layers available are ${Object.values(c).join(", ")}.`,public:!0},layersconfig:{description:`A JSON string to configure the layers and other components associated to it.<br/>
2
+ The layers available are : ${ze.toString()}.<br/>
3
+ Definition for a layer :
4
+ <pre style="font-size: 12px; overflow: auto;">{
5
+ "liniennetz": {
6
+ "link": {
7
+ "href": "https://www.rvf.de/fahrtinfo/netzplan",
8
+ "show": true,
9
+ "text": "Zu den Liniennetzpl\xE4nen"
10
+ },
11
+ "title": "Liniennetzpl\xE4ne"
12
+ }
13
+ "sharedmobility": {
14
+ "minZoom": 14
15
+ }
16
+ </pre>}
17
+ <br/>
18
+ where:
19
+ <ul style="list-style-type: disc; padding-left: 20px;">
20
+ <li><i>link</i> defined a external link displayed at the bottom of the detail view</li>
21
+ <ul style="list-style-type: disc; padding-left: 40px;">
22
+ <li><i>href</i> is the target of the link. The <i>href</i> can be template, for example for the meldungen layer you can use {{id}} to insert the id of the notification in the url.</li>
23
+ <li><i>text</i> is the text display as a link</li>
24
+ <li><i>show</i> show/hide the link in the details view</li>
25
+ </ul>
26
+ <li><i>featurelink</i> defined a external link used when you click on single feature in detail view</li>
27
+ <ul style="list-style-type: disc; padding-left: 40px;">
28
+ <li><i>href</i> is the target of the link. The <i>href</i> can be template, for example for the meldungen layer you can use {{id}} to insert the id of the notification in the url.</li>
29
+ </ul>
30
+ <li><i>title</i> is the title of the layer used in the details view header and in the layer tree, if not defined the layer name will be used.</li>
31
+ <li><i>minZoom</i> is the minimal zoom level at which the layer is visible (only <i>${c.sharedMobility}</i> layer).</li>
32
+ </ul>`,public:!0},layertree:{defaultValue:"true",description:"Show/hide the layers tree button in the toolbar.",public:!0,type:"boolean"},lineid:{description:"An id or a short/long name of a line to highlight. <br/>Ex: S1",public:!1},lnp:{defaultValue:"true",description:"Add the linesnetworkplans layer to the map. This layer will display lines network plans on the map.",public:!1,type:"boolean"},mainlink:{description:"A link displayed on bottom left of the map. The link can be a template, for example you can use {{x}} {{y}} {{z}} to insert the current position of the map in the url.<br/>Ex: http://mywebsite/mypage#map/{{x}}/{{y}}/{{z}}.",public:!0},mainlinktitle:{description:"A title for the mainlink, used as tooltip.",public:!0},mapset:{defaultValue:"false",description:"Add the mapset layer to the map. This layer will display mapset plans on the map. By default, it will load only the standard plans valid at the current time.",public:!0,type:"boolean"},mapsetplanid:{description:"An id of the mapset plan to display. Mostly for debugging purposes.",public:!1},mapsettags:{description:`The ${$} tags to get the plans from.`,public:!0},mapsettenants:{defaultValue:"rvf",description:`The ${$} tenant to get the plans from.`,public:!1},mapsettimestamp:{description:`The ${$} timestamp used to load valid standard plan. If not defined it will use the current time.`,public:!0},mapseturl:{defaultValue:"https://editor.mapset.io/api/v1/",description:`The ${$} url to use.`,public:!0},mapsurl:{defaultValue:"https://maps.geops.io",description:`The ${$e} url to use.`,public:!1},maxextent:{defaultValue:re.join(","),description:"The maximum extent of the map in EPSG:3857 coordinates.<br/>Ex: 831634,5933959,940649,6173660 .",public:!0},maxzoom:{defaultValue:"20",description:"The maximal zoom level of the map.",public:!0},minzoom:{description:"The minimal zoom level of the map.",public:!0},mots:{description:"Commas separated list of mots to display on the Realtime layer.<br/>Ex: rail,bus,coach,foot,tram,subway,gondola,funicular,ferry,car .",public:!1},notification:{defaultValue:"true",description:`Add the notification layer to the map. This layer will display informations about disruptions on the network. Data comes from
33
+ our ${ie} .`,public:!0,type:"boolean"},notificationat:{description:"An ISO date string used to display active notification at this date in the notification layer. If not defined the current date will be used.<br/>Ex: 2025-08-01T00:00:00Z .",public:!1},notificationid:{description:"An id of a notification to show details of.",public:!1},notificationlang:{defaultValue:"en,de,fr",description:"A comma separated list of languages supported by the notification, if a textual content is not available in the current lang it will try to display the content in one of these languages. Order is important. <br/>Supported languages are: en,de,fr,it",public:!0},notificationtenant:{defaultValue:"rvf",description:`The ${ie} tenant to get the notification from.`,public:!1},notificationurl:{defaultValue:"https://moco.geops.io/api/v2/",description:`The ${ie} url to use.`,public:!1},permalink:{defaultValue:"false",description:"if true, the current browser window url will be updated automatically with the parameters defined in the `permalinktemplate` attribute.",public:!0,type:"boolean"},permalinktemplate:{defaultValue:"#map/{{x}}/{{y}}/{{z}}",description:`A template string to read the current browser url. Hash (starting with #) and URL search parameters (starting with ?) are supported.<br/>
34
+ The template supports {{x}}, {{y}}, {{z}} and {{layers}} variables.<br/>
35
+ Ex: "?x={{x}}&y={{y}}&z={{z}}" or "#map/{{x}}/{{y}}/{{z}}" .`,public:!0},print:{defaultValue:"true",description:"Show/hide the print button in the toolbar.",public:!0,type:"boolean"},queryablelayers:{defaultValue:Ye.toString(),description:`A comma separated list of layers's name. The data of these layers will be queryable by click on the map (see selectedfeature event). If empty, all layers will not be queryable.<br/>
36
+ Layers available are ${Object.values(c).join(", ")}`,public:!0},realtime:{defaultValue:"true",description:`Add the realtime layer to the map. Data comes from the ${B} .`,public:!1,type:"boolean"},realtimebboxparameters:{defaultValue:"line_tags=RVF",description:"A space separated list of parameters to add to the realtime BBOX request to define custom behavior.<br/>Ex: graph=XXX line_tags=XXX.",public:!1},realtimeresturl:{defaultValue:"https://api.geops.io/tracker-http/v1/",description:`The ${B} REST API url to use for fetching infos about realtime data.`,public:!1},realtimetenant:{description:`The ${B} tenant to get the realtime data from.`,public:!1},realtimeurl:{defaultValue:"wss://api.geops.io/tracker-ws/v1/ws",description:`The ${B} url to use.`,public:!1},runs:{defaultValue:"false",description:"Shows the number of trips on a line in the sidebar, use only for debugging.",public:!0,type:"boolean"},search:{defaultValue:"false",description:"Toggle the search stops input.",public:!0,type:"boolean"},share:{defaultValue:"true",description:"Show/hide the share button in the toolbar.",public:!0,type:"boolean"},stationid:{description:"An id or a short/long name of a station to show details of.",public:!1},stopsurl:{defaultValue:"https://api.geops.io/stops/v1/",description:`The ${St} to use.`,public:!1},tenant:{description:"The tenant to use by default for all geOps APIs (Stops, Realtime, MOCO ...). Can be override for each API by other XXXXtenant parameters.",public:!1},toolbar:{defaultValue:"true",description:"Show/hide the toolbar on the top left.",public:!0,type:"boolean"},trainid:{description:"An id of a route to highlight on the map and to show details of.",public:!1},zoom:{description:"The zoom level of the map.",public:!0}},ne=Rt;var Pt={"mwc:attribute":{description:"Event fired when an web component's attribute is changed. The event data contains the list of all attributes and their values.",public:!1},"mwc:messageready":{description:"Only if the web-component is embedded in an iframe. Message event fired when the web component is ready to receive messages from parent window.",public:!1},"mwc:permalink":{description:"Event fired when the map's state changes. The event data contains the permalink URL search parameters as string.",public:!1},"mwc:selectedfeature":{description:"Event fired when a feature is selected on the map. The event data contains the selected feature in GeoJSON format.",public:!0},"mwc:singleclick":{description:"Event fired when the map is clicked. The event data contains the map coordinates in EPSG:3857 and the pixel coordinates.",public:!1},"mwc:stopssearchselect":{description:"Only when search attribute is 'true'. Event fired when a stop is selected in the stops search results. The event data contains the selected stop.",public:!1}},C=Pt;var xt='<a href="https://developer.geops.io/">geOps API key</a>',Be='<a href="https://geops.com/en/solution/disruption-information">geOps MOCO API</a>',Ot={apikey:{defaultValue:"5cc87b12d7c5370001c1d655cb6b0a94dc1a4b859313dc211675efd6",description:`Your ${xt}`,public:!1},lang:{defaultValue:"de",description:"The language to use for the notifications.",public:!0},notificationat:{description:"An ISO date string used to display active notification at this date in the notification layer. If not defined the current date will be used.<br/>Ex: 2025-08-01T00:00:00Z .",public:!1},notificationlang:{defaultValue:"en,de,fr",description:"A comma separated list of languages supported by the notification, if a textual content is not available in the current lang it will try to display the content in one of these languages. Order is important. <br/>Supported languages are: en,de,fr,it",public:!0},notificationtenant:{defaultValue:"rvf",description:`The ${Be} tenant to get the notification from.`,public:!1},notificationurl:{defaultValue:"https://moco.geops.io/api/v2/",description:`The ${Be} url to use.`,public:!1}},ae=Ot;var It='<a href="https://developer.geops.io/">geOps API key</a>',_='<a href="https://developer.geops.io/apis/stops">geOps Stops API</a>',vt={apikey:{description:`Your ${It}`,public:!0},bbox:{description:`The extent where to search the stops (minx,miny,maxx,maxy). See the ${_} documentation.`,public:!0},countrycode:{description:"The country code to filter the results (IT, DE, CH ...)",public:!0},event:{defaultValue:"mwc:stopssearchselect",description:"The event's name to listen to when a stop is selected.",public:!0},field:{description:`Which field to look up, default all of them, Possible values:id, name, coords. See the ${_} documentation.`,public:!0},lang:{defaultValue:"en",description:"The language to use for the search input texts. Supported languages are : de, en, fr, it.",public:!0},limit:{defaultValue:"5",description:`The number of suggestions to show. See the ${_} documentation.`,public:!0},mots:{description:`Commas separated list of mots used to filter the results (rail, bus, coach, foot, tram, subway, gondola, funicular, ferry, car). See the ${_} documentation.`,public:!0},onselect:{description:null,public:!1},params:{description:`JSON string with additional parameters to pass to the request to the API. Ex: {"{ 'key': 'value' }"}. See the ${_} documentation.`,public:!0},prefagencies:{description:`comma seperated list, order chooses which agency will be preferred as
37
+ ident_source (for id and code fields). Possible values: sbb, db. See the ${_} documentation.`,public:!0},reflocation:{description:`Coordinates in WGS84 (in lat,lon order) used to rank stops close to this position higher. See the ${_} documentation.`,public:!0},url:{defaultValue:"https://api.geops.io/stops/v1/",description:`The URL to the ${_}.`,public:!0}},se=vt;var Ct={"mwc:attribute":C["mwc:attribute"],"mwc:stopssearchselect":{description:"Event fired when a stop is selected in the stops search results. The event data contains the selected stop.",public:!0}},le=Ct;typeof window<"u"&&(window.MobilityMapAttributes=ne,window.MobilityMapEvents=C,window.MobilitySearchAttributes=se,window.MobilitySearchEvents=le,window.MobilityNotificationsAttributes=ae);var Mo={MobilityMapAttributes:ne,MobilityMapEvents:C,MobilityNotificationsAttributes:ae,MobilitySearchAttributes:se,MobilitySearchEvents:le};})();
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["node_modules/ol/extent.js", "node_modules/ol/math.js", "node_modules/ol/proj/Units.js", "node_modules/ol/proj/Projection.js", "node_modules/ol/proj/epsg3857.js", "node_modules/ol/proj/epsg4326.js", "node_modules/ol/proj/projections.js", "node_modules/ol/proj/transforms.js", "node_modules/ol/proj/utm.js", "node_modules/ol/proj.js", "src/utils/constants.ts", "src/MobilityMap/MobilityMapAttributes.ts", "src/MobilityMap/MobilityMapEvents.ts", "src/MobilityNotifications/MobilityNotificationsAttributes.ts", "src/MobilitySearch/MobilitySearchAttributes.ts", "src/MobilitySearch/MobilitySearchEvents.ts", "src/indexDoc.ts"],
4
+ "sourcesContent": ["/**\n * @module ol/extent\n */\nimport Relationship from './extent/Relationship.js';\n\n/**\n * An array of numbers representing an extent: `[minx, miny, maxx, maxy]`.\n * @typedef {Array<number>} Extent\n * @api\n */\n\n/**\n * Extent corner.\n * @typedef {'bottom-left' | 'bottom-right' | 'top-left' | 'top-right'} Corner\n */\n\n/**\n * Build an extent that includes all given coordinates.\n *\n * @param {Array<import(\"./coordinate.js\").Coordinate>} coordinates Coordinates.\n * @return {Extent} Bounding extent.\n * @api\n */\nexport function boundingExtent(coordinates) {\n const extent = createEmpty();\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n extendCoordinate(extent, coordinates[i]);\n }\n return extent;\n}\n\n/**\n * @param {Array<number>} xs Xs.\n * @param {Array<number>} ys Ys.\n * @param {Extent} [dest] Destination extent.\n * @private\n * @return {Extent} Extent.\n */\nfunction _boundingExtentXYs(xs, ys, dest) {\n const minX = Math.min.apply(null, xs);\n const minY = Math.min.apply(null, ys);\n const maxX = Math.max.apply(null, xs);\n const maxY = Math.max.apply(null, ys);\n return createOrUpdate(minX, minY, maxX, maxY, dest);\n}\n\n/**\n * Return extent increased by the provided value.\n * @param {Extent} extent Extent.\n * @param {number} value The amount by which the extent should be buffered.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n * @api\n */\nexport function buffer(extent, value, dest) {\n if (dest) {\n dest[0] = extent[0] - value;\n dest[1] = extent[1] - value;\n dest[2] = extent[2] + value;\n dest[3] = extent[3] + value;\n return dest;\n }\n return [\n extent[0] - value,\n extent[1] - value,\n extent[2] + value,\n extent[3] + value,\n ];\n}\n\n/**\n * Creates a clone of an extent.\n *\n * @param {Extent} extent Extent to clone.\n * @param {Extent} [dest] Extent.\n * @return {Extent} The clone.\n */\nexport function clone(extent, dest) {\n if (dest) {\n dest[0] = extent[0];\n dest[1] = extent[1];\n dest[2] = extent[2];\n dest[3] = extent[3];\n return dest;\n }\n return extent.slice();\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {number} Closest squared distance.\n */\nexport function closestSquaredDistanceXY(extent, x, y) {\n let dx, dy;\n if (x < extent[0]) {\n dx = extent[0] - x;\n } else if (extent[2] < x) {\n dx = x - extent[2];\n } else {\n dx = 0;\n }\n if (y < extent[1]) {\n dy = extent[1] - y;\n } else if (extent[3] < y) {\n dy = y - extent[3];\n } else {\n dy = 0;\n }\n return dx * dx + dy * dy;\n}\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} The coordinate is contained in the extent.\n * @api\n */\nexport function containsCoordinate(extent, coordinate) {\n return containsXY(extent, coordinate[0], coordinate[1]);\n}\n\n/**\n * Check if one extent contains another.\n *\n * An extent is deemed contained if it lies completely within the other extent,\n * including if they share one or more edges.\n *\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The second extent is contained by or on the edge of the\n * first.\n * @api\n */\nexport function containsExtent(extent1, extent2) {\n return (\n extent1[0] <= extent2[0] &&\n extent2[2] <= extent1[2] &&\n extent1[1] <= extent2[1] &&\n extent2[3] <= extent1[3]\n );\n}\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {number} x X coordinate.\n * @param {number} y Y coordinate.\n * @return {boolean} The x, y values are contained in the extent.\n * @api\n */\nexport function containsXY(extent, x, y) {\n return extent[0] <= x && x <= extent[2] && extent[1] <= y && y <= extent[3];\n}\n\n/**\n * Get the relationship between a coordinate and extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate The coordinate.\n * @return {import(\"./extent/Relationship.js\").default} The relationship (bitwise compare with\n * import(\"./extent/Relationship.js\").Relationship).\n */\nexport function coordinateRelationship(extent, coordinate) {\n const minX = extent[0];\n const minY = extent[1];\n const maxX = extent[2];\n const maxY = extent[3];\n const x = coordinate[0];\n const y = coordinate[1];\n let relationship = Relationship.UNKNOWN;\n if (x < minX) {\n relationship = relationship | Relationship.LEFT;\n } else if (x > maxX) {\n relationship = relationship | Relationship.RIGHT;\n }\n if (y < minY) {\n relationship = relationship | Relationship.BELOW;\n } else if (y > maxY) {\n relationship = relationship | Relationship.ABOVE;\n }\n if (relationship === Relationship.UNKNOWN) {\n relationship = Relationship.INTERSECTING;\n }\n return relationship;\n}\n\n/**\n * Create an empty extent.\n * @return {Extent} Empty extent.\n * @api\n */\nexport function createEmpty() {\n return [Infinity, Infinity, -Infinity, -Infinity];\n}\n\n/**\n * Create a new extent or update the provided extent.\n * @param {number} minX Minimum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxX Maximum X.\n * @param {number} maxY Maximum Y.\n * @param {Extent} [dest] Destination extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdate(minX, minY, maxX, maxY, dest) {\n if (dest) {\n dest[0] = minX;\n dest[1] = minY;\n dest[2] = maxX;\n dest[3] = maxY;\n return dest;\n }\n return [minX, minY, maxX, maxY];\n}\n\n/**\n * Create a new empty extent or make the provided one empty.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateEmpty(dest) {\n return createOrUpdate(Infinity, Infinity, -Infinity, -Infinity, dest);\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinate(coordinate, dest) {\n const x = coordinate[0];\n const y = coordinate[1];\n return createOrUpdate(x, y, x, y, dest);\n}\n\n/**\n * @param {Array<import(\"./coordinate.js\").Coordinate>} coordinates Coordinates.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinates(coordinates, dest) {\n const extent = createOrUpdateEmpty(dest);\n return extendCoordinates(extent, coordinates);\n}\n\n/**\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromFlatCoordinates(\n flatCoordinates,\n offset,\n end,\n stride,\n dest,\n) {\n const extent = createOrUpdateEmpty(dest);\n return extendFlatCoordinates(extent, flatCoordinates, offset, end, stride);\n}\n\n/**\n * @param {Array<Array<import(\"./coordinate.js\").Coordinate>>} rings Rings.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromRings(rings, dest) {\n const extent = createOrUpdateEmpty(dest);\n return extendRings(extent, rings);\n}\n\n/**\n * Determine if two extents are equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The two extents are equivalent.\n * @api\n */\nexport function equals(extent1, extent2) {\n return (\n extent1[0] == extent2[0] &&\n extent1[2] == extent2[2] &&\n extent1[1] == extent2[1] &&\n extent1[3] == extent2[3]\n );\n}\n\n/**\n * Determine if two extents are approximately equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {number} tolerance Tolerance in extent coordinate units.\n * @return {boolean} The two extents differ by less than the tolerance.\n */\nexport function approximatelyEquals(extent1, extent2, tolerance) {\n return (\n Math.abs(extent1[0] - extent2[0]) < tolerance &&\n Math.abs(extent1[2] - extent2[2]) < tolerance &&\n Math.abs(extent1[1] - extent2[1]) < tolerance &&\n Math.abs(extent1[3] - extent2[3]) < tolerance\n );\n}\n\n/**\n * Modify an extent to include another extent.\n * @param {Extent} extent1 The extent to be modified.\n * @param {Extent} extent2 The extent that will be included in the first.\n * @return {Extent} A reference to the first (extended) extent.\n * @api\n */\nexport function extend(extent1, extent2) {\n if (extent2[0] < extent1[0]) {\n extent1[0] = extent2[0];\n }\n if (extent2[2] > extent1[2]) {\n extent1[2] = extent2[2];\n }\n if (extent2[1] < extent1[1]) {\n extent1[1] = extent2[1];\n }\n if (extent2[3] > extent1[3]) {\n extent1[3] = extent2[3];\n }\n return extent1;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n */\nexport function extendCoordinate(extent, coordinate) {\n if (coordinate[0] < extent[0]) {\n extent[0] = coordinate[0];\n }\n if (coordinate[0] > extent[2]) {\n extent[2] = coordinate[0];\n }\n if (coordinate[1] < extent[1]) {\n extent[1] = coordinate[1];\n }\n if (coordinate[1] > extent[3]) {\n extent[3] = coordinate[1];\n }\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array<import(\"./coordinate.js\").Coordinate>} coordinates Coordinates.\n * @return {Extent} Extent.\n */\nexport function extendCoordinates(extent, coordinates) {\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n extendCoordinate(extent, coordinates[i]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array<number>} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {Extent} Extent.\n */\nexport function extendFlatCoordinates(\n extent,\n flatCoordinates,\n offset,\n end,\n stride,\n) {\n for (; offset < end; offset += stride) {\n extendXY(extent, flatCoordinates[offset], flatCoordinates[offset + 1]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array<Array<import(\"./coordinate.js\").Coordinate>>} rings Rings.\n * @return {Extent} Extent.\n */\nexport function extendRings(extent, rings) {\n for (let i = 0, ii = rings.length; i < ii; ++i) {\n extendCoordinates(extent, rings[i]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n */\nexport function extendXY(extent, x, y) {\n extent[0] = Math.min(extent[0], x);\n extent[1] = Math.min(extent[1], y);\n extent[2] = Math.max(extent[2], x);\n extent[3] = Math.max(extent[3], y);\n}\n\n/**\n * This function calls `callback` for each corner of the extent. If the\n * callback returns a truthy value the function returns that value\n * immediately. Otherwise the function returns `false`.\n * @param {Extent} extent Extent.\n * @param {function(import(\"./coordinate.js\").Coordinate): S} callback Callback.\n * @return {S|boolean} Value.\n * @template S\n */\nexport function forEachCorner(extent, callback) {\n let val;\n val = callback(getBottomLeft(extent));\n if (val) {\n return val;\n }\n val = callback(getBottomRight(extent));\n if (val) {\n return val;\n }\n val = callback(getTopRight(extent));\n if (val) {\n return val;\n }\n val = callback(getTopLeft(extent));\n if (val) {\n return val;\n }\n return false;\n}\n\n/**\n * Get the size of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Area.\n * @api\n */\nexport function getArea(extent) {\n let area = 0;\n if (!isEmpty(extent)) {\n area = getWidth(extent) * getHeight(extent);\n }\n return area;\n}\n\n/**\n * Get the bottom left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom left coordinate.\n * @api\n */\nexport function getBottomLeft(extent) {\n return [extent[0], extent[1]];\n}\n\n/**\n * Get the bottom right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom right coordinate.\n * @api\n */\nexport function getBottomRight(extent) {\n return [extent[2], extent[1]];\n}\n\n/**\n * Get the center coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Center.\n * @api\n */\nexport function getCenter(extent) {\n return [(extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2];\n}\n\n/**\n * Get a corner coordinate of an extent.\n * @param {Extent} extent Extent.\n * @param {Corner} corner Corner.\n * @return {import(\"./coordinate.js\").Coordinate} Corner coordinate.\n */\nexport function getCorner(extent, corner) {\n let coordinate;\n if (corner === 'bottom-left') {\n coordinate = getBottomLeft(extent);\n } else if (corner === 'bottom-right') {\n coordinate = getBottomRight(extent);\n } else if (corner === 'top-left') {\n coordinate = getTopLeft(extent);\n } else if (corner === 'top-right') {\n coordinate = getTopRight(extent);\n } else {\n throw new Error('Invalid corner');\n }\n return coordinate;\n}\n\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Enlarged area.\n */\nexport function getEnlargedArea(extent1, extent2) {\n const minX = Math.min(extent1[0], extent2[0]);\n const minY = Math.min(extent1[1], extent2[1]);\n const maxX = Math.max(extent1[2], extent2[2]);\n const maxY = Math.max(extent1[3], extent2[3]);\n return (maxX - minX) * (maxY - minY);\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @param {Extent} [dest] Destination extent.\n * @return {Extent} Extent.\n */\nexport function getForViewAndSize(center, resolution, rotation, size, dest) {\n const [x0, y0, x1, y1, x2, y2, x3, y3] = getRotatedViewport(\n center,\n resolution,\n rotation,\n size,\n );\n return createOrUpdate(\n Math.min(x0, x1, x2, x3),\n Math.min(y0, y1, y2, y3),\n Math.max(x0, x1, x2, x3),\n Math.max(y0, y1, y2, y3),\n dest,\n );\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @return {Array<number>} Linear ring representing the viewport.\n */\nexport function getRotatedViewport(center, resolution, rotation, size) {\n const dx = (resolution * size[0]) / 2;\n const dy = (resolution * size[1]) / 2;\n const cosRotation = Math.cos(rotation);\n const sinRotation = Math.sin(rotation);\n const xCos = dx * cosRotation;\n const xSin = dx * sinRotation;\n const yCos = dy * cosRotation;\n const ySin = dy * sinRotation;\n const x = center[0];\n const y = center[1];\n return [\n x - xCos + ySin,\n y - xSin - yCos,\n x - xCos - ySin,\n y - xSin + yCos,\n x + xCos - ySin,\n y + xSin + yCos,\n x + xCos + ySin,\n y + xSin - yCos,\n x - xCos + ySin,\n y - xSin - yCos,\n ];\n}\n\n/**\n * Get the height of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Height.\n * @api\n */\nexport function getHeight(extent) {\n return extent[3] - extent[1];\n}\n\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Intersection area.\n */\nexport function getIntersectionArea(extent1, extent2) {\n const intersection = getIntersection(extent1, extent2);\n return getArea(intersection);\n}\n\n/**\n * Get the intersection of two extents.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {Extent} [dest] Optional extent to populate with intersection.\n * @return {Extent} Intersecting extent.\n * @api\n */\nexport function getIntersection(extent1, extent2, dest) {\n const intersection = dest ? dest : createEmpty();\n if (intersects(extent1, extent2)) {\n if (extent1[0] > extent2[0]) {\n intersection[0] = extent1[0];\n } else {\n intersection[0] = extent2[0];\n }\n if (extent1[1] > extent2[1]) {\n intersection[1] = extent1[1];\n } else {\n intersection[1] = extent2[1];\n }\n if (extent1[2] < extent2[2]) {\n intersection[2] = extent1[2];\n } else {\n intersection[2] = extent2[2];\n }\n if (extent1[3] < extent2[3]) {\n intersection[3] = extent1[3];\n } else {\n intersection[3] = extent2[3];\n }\n } else {\n createOrUpdateEmpty(intersection);\n }\n return intersection;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @return {number} Margin.\n */\nexport function getMargin(extent) {\n return getWidth(extent) + getHeight(extent);\n}\n\n/**\n * Get the size (width, height) of an extent.\n * @param {Extent} extent The extent.\n * @return {import(\"./size.js\").Size} The extent size.\n * @api\n */\nexport function getSize(extent) {\n return [extent[2] - extent[0], extent[3] - extent[1]];\n}\n\n/**\n * Get the top left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top left coordinate.\n * @api\n */\nexport function getTopLeft(extent) {\n return [extent[0], extent[3]];\n}\n\n/**\n * Get the top right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top right coordinate.\n * @api\n */\nexport function getTopRight(extent) {\n return [extent[2], extent[3]];\n}\n\n/**\n * Get the width of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Width.\n * @api\n */\nexport function getWidth(extent) {\n return extent[2] - extent[0];\n}\n\n/**\n * Determine if one extent intersects another.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent.\n * @return {boolean} The two extents intersect.\n * @api\n */\nexport function intersects(extent1, extent2) {\n return (\n extent1[0] <= extent2[2] &&\n extent1[2] >= extent2[0] &&\n extent1[1] <= extent2[3] &&\n extent1[3] >= extent2[1]\n );\n}\n\n/**\n * Determine if an extent is empty.\n * @param {Extent} extent Extent.\n * @return {boolean} Is empty.\n * @api\n */\nexport function isEmpty(extent) {\n return extent[2] < extent[0] || extent[3] < extent[1];\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function returnOrUpdate(extent, dest) {\n if (dest) {\n dest[0] = extent[0];\n dest[1] = extent[1];\n dest[2] = extent[2];\n dest[3] = extent[3];\n return dest;\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} value Value.\n */\nexport function scaleFromCenter(extent, value) {\n const deltaX = ((extent[2] - extent[0]) / 2) * (value - 1);\n const deltaY = ((extent[3] - extent[1]) / 2) * (value - 1);\n extent[0] -= deltaX;\n extent[2] += deltaX;\n extent[1] -= deltaY;\n extent[3] += deltaY;\n}\n\n/**\n * Determine if the segment between two coordinates intersects (crosses,\n * touches, or is contained by) the provided extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} start Segment start coordinate.\n * @param {import(\"./coordinate.js\").Coordinate} end Segment end coordinate.\n * @return {boolean} The segment intersects the extent.\n */\nexport function intersectsSegment(extent, start, end) {\n let intersects = false;\n const startRel = coordinateRelationship(extent, start);\n const endRel = coordinateRelationship(extent, end);\n if (\n startRel === Relationship.INTERSECTING ||\n endRel === Relationship.INTERSECTING\n ) {\n intersects = true;\n } else {\n const minX = extent[0];\n const minY = extent[1];\n const maxX = extent[2];\n const maxY = extent[3];\n const startX = start[0];\n const startY = start[1];\n const endX = end[0];\n const endY = end[1];\n const slope = (endY - startY) / (endX - startX);\n let x, y;\n if (!!(endRel & Relationship.ABOVE) && !(startRel & Relationship.ABOVE)) {\n // potentially intersects top\n x = endX - (endY - maxY) / slope;\n intersects = x >= minX && x <= maxX;\n }\n if (\n !intersects &&\n !!(endRel & Relationship.RIGHT) &&\n !(startRel & Relationship.RIGHT)\n ) {\n // potentially intersects right\n y = endY - (endX - maxX) * slope;\n intersects = y >= minY && y <= maxY;\n }\n if (\n !intersects &&\n !!(endRel & Relationship.BELOW) &&\n !(startRel & Relationship.BELOW)\n ) {\n // potentially intersects bottom\n x = endX - (endY - minY) / slope;\n intersects = x >= minX && x <= maxX;\n }\n if (\n !intersects &&\n !!(endRel & Relationship.LEFT) &&\n !(startRel & Relationship.LEFT)\n ) {\n // potentially intersects left\n y = endY - (endX - minX) * slope;\n intersects = y >= minY && y <= maxY;\n }\n }\n return intersects;\n}\n\n/**\n * Apply a transform function to the extent.\n * @param {Extent} extent Extent.\n * @param {import(\"./proj.js\").TransformFunction} transformFn Transform function.\n * Called with `[minX, minY, maxX, maxY]` extent coordinates.\n * @param {Extent} [dest] Destination extent.\n * @param {number} [stops] Number of stops per side used for the transform.\n * By default only the corners are used.\n * @return {Extent} Extent.\n * @api\n */\nexport function applyTransform(extent, transformFn, dest, stops) {\n if (isEmpty(extent)) {\n return createOrUpdateEmpty(dest);\n }\n let coordinates = [];\n if (stops > 1) {\n const width = extent[2] - extent[0];\n const height = extent[3] - extent[1];\n for (let i = 0; i < stops; ++i) {\n coordinates.push(\n extent[0] + (width * i) / stops,\n extent[1],\n extent[2],\n extent[1] + (height * i) / stops,\n extent[2] - (width * i) / stops,\n extent[3],\n extent[0],\n extent[3] - (height * i) / stops,\n );\n }\n } else {\n coordinates = [\n extent[0],\n extent[1],\n extent[2],\n extent[1],\n extent[2],\n extent[3],\n extent[0],\n extent[3],\n ];\n }\n transformFn(coordinates, coordinates, 2);\n const xs = [];\n const ys = [];\n for (let i = 0, l = coordinates.length; i < l; i += 2) {\n xs.push(coordinates[i]);\n ys.push(coordinates[i + 1]);\n }\n return _boundingExtentXYs(xs, ys, dest);\n}\n\n/**\n * Modifies the provided extent in-place to be within the real world\n * extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./proj/Projection.js\").default} projection Projection\n * @return {Extent} The extent within the real world extent.\n */\nexport function wrapX(extent, projection) {\n const projectionExtent = projection.getExtent();\n const center = getCenter(extent);\n if (\n projection.canWrapX() &&\n (center[0] < projectionExtent[0] || center[0] >= projectionExtent[2])\n ) {\n const worldWidth = getWidth(projectionExtent);\n const worldsAway = Math.floor(\n (center[0] - projectionExtent[0]) / worldWidth,\n );\n const offset = worldsAway * worldWidth;\n extent[0] -= offset;\n extent[2] -= offset;\n }\n return extent;\n}\n\n/**\n * Fits the extent to the real world\n *\n * If the extent does not cross the anti meridian, this will return the extent in an array\n * If the extent crosses the anti meridian, the extent will be sliced, so each part fits within the\n * real world\n *\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./proj/Projection.js\").default} projection Projection\n * @param {boolean} [multiWorld] Return all worlds\n * @return {Array<Extent>} The extent within the real world extent.\n */\nexport function wrapAndSliceX(extent, projection, multiWorld) {\n if (projection.canWrapX()) {\n const projectionExtent = projection.getExtent();\n\n if (!isFinite(extent[0]) || !isFinite(extent[2])) {\n return [[projectionExtent[0], extent[1], projectionExtent[2], extent[3]]];\n }\n\n wrapX(extent, projection);\n const worldWidth = getWidth(projectionExtent);\n\n if (getWidth(extent) > worldWidth && !multiWorld) {\n // the extent wraps around on itself\n return [[projectionExtent[0], extent[1], projectionExtent[2], extent[3]]];\n }\n if (extent[0] < projectionExtent[0]) {\n // the extent crosses the anti meridian, so it needs to be sliced\n return [\n [extent[0] + worldWidth, extent[1], projectionExtent[2], extent[3]],\n [projectionExtent[0], extent[1], extent[2], extent[3]],\n ];\n }\n if (extent[2] > projectionExtent[2]) {\n // the extent crosses the anti meridian, so it needs to be sliced\n return [\n [extent[0], extent[1], projectionExtent[2], extent[3]],\n [projectionExtent[0], extent[1], extent[2] - worldWidth, extent[3]],\n ];\n }\n }\n\n return [extent];\n}\n", "/**\n * @module ol/math\n */\n\n/**\n * Takes a number and clamps it to within the provided bounds.\n * @param {number} value The input number.\n * @param {number} min The minimum value to return.\n * @param {number} max The maximum value to return.\n * @return {number} The input number if it is within bounds, or the nearest\n * number within the bounds.\n */\nexport function clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Returns the square of the closest distance between the point (x, y) and the\n * line segment (x1, y1) to (x2, y2).\n * @param {number} x X.\n * @param {number} y Y.\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredSegmentDistance(x, y, x1, y1, x2, y2) {\n const dx = x2 - x1;\n const dy = y2 - y1;\n if (dx !== 0 || dy !== 0) {\n const t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);\n if (t > 1) {\n x1 = x2;\n y1 = y2;\n } else if (t > 0) {\n x1 += dx * t;\n y1 += dy * t;\n }\n }\n return squaredDistance(x, y, x1, y1);\n}\n\n/**\n * Returns the square of the distance between the points (x1, y1) and (x2, y2).\n * @param {number} x1 X1.\n * @param {number} y1 Y1.\n * @param {number} x2 X2.\n * @param {number} y2 Y2.\n * @return {number} Squared distance.\n */\nexport function squaredDistance(x1, y1, x2, y2) {\n const dx = x2 - x1;\n const dy = y2 - y1;\n return dx * dx + dy * dy;\n}\n\n/**\n * Solves system of linear equations using Gaussian elimination method.\n *\n * @param {Array<Array<number>>} mat Augmented matrix (n x n + 1 column)\n * in row-major order.\n * @return {Array<number>|null} The resulting vector.\n */\nexport function solveLinearSystem(mat) {\n const n = mat.length;\n\n for (let i = 0; i < n; i++) {\n // Find max in the i-th column (ignoring i - 1 first rows)\n let maxRow = i;\n let maxEl = Math.abs(mat[i][i]);\n for (let r = i + 1; r < n; r++) {\n const absValue = Math.abs(mat[r][i]);\n if (absValue > maxEl) {\n maxEl = absValue;\n maxRow = r;\n }\n }\n\n if (maxEl === 0) {\n return null; // matrix is singular\n }\n\n // Swap max row with i-th (current) row\n const tmp = mat[maxRow];\n mat[maxRow] = mat[i];\n mat[i] = tmp;\n\n // Subtract the i-th row to make all the remaining rows 0 in the i-th column\n for (let j = i + 1; j < n; j++) {\n const coef = -mat[j][i] / mat[i][i];\n for (let k = i; k < n + 1; k++) {\n if (i == k) {\n mat[j][k] = 0;\n } else {\n mat[j][k] += coef * mat[i][k];\n }\n }\n }\n }\n\n // Solve Ax=b for upper triangular matrix A (mat)\n const x = new Array(n);\n for (let l = n - 1; l >= 0; l--) {\n x[l] = mat[l][n] / mat[l][l];\n for (let m = l - 1; m >= 0; m--) {\n mat[m][n] -= mat[m][l] * x[l];\n }\n }\n return x;\n}\n\n/**\n * Converts radians to to degrees.\n *\n * @param {number} angleInRadians Angle in radians.\n * @return {number} Angle in degrees.\n */\nexport function toDegrees(angleInRadians) {\n return (angleInRadians * 180) / Math.PI;\n}\n\n/**\n * Converts degrees to radians.\n *\n * @param {number} angleInDegrees Angle in degrees.\n * @return {number} Angle in radians.\n */\nexport function toRadians(angleInDegrees) {\n return (angleInDegrees * Math.PI) / 180;\n}\n\n/**\n * Returns the modulo of a / b, depending on the sign of b.\n *\n * @param {number} a Dividend.\n * @param {number} b Divisor.\n * @return {number} Modulo.\n */\nexport function modulo(a, b) {\n const r = a % b;\n return r * b < 0 ? r + b : r;\n}\n\n/**\n * Calculates the linearly interpolated value of x between a and b.\n *\n * @param {number} a Number\n * @param {number} b Number\n * @param {number} x Value to be interpolated.\n * @return {number} Interpolated value.\n */\nexport function lerp(a, b, x) {\n return a + x * (b - a);\n}\n\n/**\n * Returns a number with a limited number of decimal digits.\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The input number with a limited number of decimal digits.\n */\nexport function toFixed(n, decimals) {\n const factor = Math.pow(10, decimals);\n return Math.round(n * factor) / factor;\n}\n\n/**\n * Rounds a number to the nearest integer value considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The nearest integer.\n */\nexport function round(n, decimals) {\n return Math.round(toFixed(n, decimals));\n}\n\n/**\n * Rounds a number to the next smaller integer considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The next smaller integer.\n */\nexport function floor(n, decimals) {\n return Math.floor(toFixed(n, decimals));\n}\n\n/**\n * Rounds a number to the next bigger integer considering only the given number\n * of decimal digits (with rounding on the final digit).\n * @param {number} n The input number.\n * @param {number} decimals The maximum number of decimal digits.\n * @return {number} The next bigger integer.\n */\nexport function ceil(n, decimals) {\n return Math.ceil(toFixed(n, decimals));\n}\n\n/**\n * Wraps a number between some minimum and maximum values.\n * @param {number} n The number to wrap.\n * @param {number} min The minimum of the range (inclusive).\n * @param {number} max The maximum of the range (exclusive).\n * @return {number} The wrapped number.\n */\nexport function wrap(n, min, max) {\n if (n >= min && n < max) {\n return n;\n }\n const range = max - min;\n return ((((n - min) % range) + range) % range) + min;\n}\n", "/**\n * @module ol/proj/Units\n */\n\n/**\n * @typedef {'radians' | 'degrees' | 'ft' | 'm' | 'pixels' | 'tile-pixels' | 'us-ft'} Units\n * Projection units.\n */\n\n/**\n * See http://duff.ess.washington.edu/data/raster/drg/docs/geotiff.txt\n * @type {Object<number, Units>}\n */\nconst unitByCode = {\n '9001': 'm',\n '9002': 'ft',\n '9003': 'us-ft',\n '9101': 'radians',\n '9102': 'degrees',\n};\n\n/**\n * @param {number} code Unit code.\n * @return {Units} Units.\n */\nexport function fromCode(code) {\n return unitByCode[code];\n}\n\n/**\n * @typedef {Object} MetersPerUnitLookup\n * @property {number} radians Radians\n * @property {number} degrees Degrees\n * @property {number} ft Feet\n * @property {number} m Meters\n * @property {number} us-ft US feet\n */\n\n/**\n * Meters per unit lookup table.\n * @const\n * @type {MetersPerUnitLookup}\n * @api\n */\nexport const METERS_PER_UNIT = {\n // use the radius of the Normal sphere\n 'radians': 6370997 / (2 * Math.PI),\n 'degrees': (2 * Math.PI * 6370997) / 360,\n 'ft': 0.3048,\n 'm': 1,\n 'us-ft': 1200 / 3937,\n};\n", "/**\n * @module ol/proj/Projection\n */\nimport {METERS_PER_UNIT} from './Units.js';\n\n/**\n * The function is called with a `number` view resolution and a\n * {@link module:ol/coordinate~Coordinate} as arguments, and returns the `number` resolution\n * in projection units at the passed coordinate.\n * @typedef {function(number, import(\"../coordinate.js\").Coordinate):number} GetPointResolution\n * @api\n */\n\n/**\n * @typedef {Object} Options\n * @property {string} code The SRS identifier code, e.g. `EPSG:4326`.\n * @property {import(\"./Units.js\").Units} [units] Units. Required unless a\n * proj4 projection is defined for `code`.\n * @property {import(\"../extent.js\").Extent} [extent] The validity extent for the SRS.\n * @property {string} [axisOrientation='enu'] The axis orientation as specified in Proj4.\n * @property {boolean} [global=false] Whether the projection is valid for the whole globe.\n * @property {number} [metersPerUnit] The meters per unit for the SRS.\n * If not provided, the `units` are used to get the meters per unit from the {@link METERS_PER_UNIT}\n * lookup table.\n * @property {import(\"../extent.js\").Extent} [worldExtent] The world extent for the SRS.\n * @property {GetPointResolution} [getPointResolution]\n * Function to determine resolution at a point. The function is called with a\n * `number` view resolution and a {@link module:ol/coordinate~Coordinate} as arguments, and returns\n * the `number` resolution in projection units at the passed coordinate. If this is `undefined`,\n * the default {@link module:ol/proj.getPointResolution} function will be used.\n */\n\n/**\n * @classdesc\n * In most cases, you should not need to create instances of this class.\n * Instead, where projection information is required, you can use a string\n * projection code or identifier (e.g. `EPSG:4326`) instead of a projection\n * instance.\n *\n * The library includes support for transforming coordinates between the following\n * projections:\n *\n * WGS 84 / Geographic - Using codes `EPSG:4326`, `CRS:84`, `urn:ogc:def:crs:EPSG:6.6:4326`,\n * `urn:ogc:def:crs:OGC:1.3:CRS84`, `urn:ogc:def:crs:OGC:2:84`, `http://www.opengis.net/gml/srs/epsg.xml#4326`,\n * or `urn:x-ogc:def:crs:EPSG:4326`\n * WGS 84 / Spherical Mercator - Using codes `EPSG:3857`, `EPSG:102100`, `EPSG:102113`, `EPSG:900913`,\n * `urn:ogc:def:crs:EPSG:6.18:3:3857`, or `http://www.opengis.net/gml/srs/epsg.xml#3857`\n * WGS 84 / UTM zones - Using codes `EPSG:32601` through `EPSG:32660` for northern zones\n * and `EPSG:32701` through `EPSG:32760` for southern zones. Note that the built-in UTM transforms\n * are lower accuracy (with errors on the order of 0.1 m) than those that you might get in a\n * library like [proj4js](https://github.com/proj4js/proj4js).\n *\n * For additional projection support, or to use higher accuracy transforms than the built-in ones, you can use\n * the [proj4js](https://github.com/proj4js/proj4js) library. With `proj4js`, after adding any new projection\n * definitions, call the {@link module:ol/proj/proj4.register} function.\n *\n * You can use the {@link module:ol/proj.get} function to retrieve a projection instance\n * for one of the registered projections.\n *\n * @api\n */\nclass Projection {\n /**\n * @param {Options} options Projection options.\n */\n constructor(options) {\n /**\n * @private\n * @type {string}\n */\n this.code_ = options.code;\n\n /**\n * Units of projected coordinates. When set to `TILE_PIXELS`, a\n * `this.extent_` and `this.worldExtent_` must be configured properly for each\n * tile.\n * @private\n * @type {import(\"./Units.js\").Units}\n */\n this.units_ = /** @type {import(\"./Units.js\").Units} */ (options.units);\n\n /**\n * Validity extent of the projection in projected coordinates. For projections\n * with `TILE_PIXELS` units, this is the extent of the tile in\n * tile pixel space.\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.extent_ = options.extent !== undefined ? options.extent : null;\n\n /**\n * Extent of the world in EPSG:4326. For projections with\n * `TILE_PIXELS` units, this is the extent of the tile in\n * projected coordinate space.\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.worldExtent_ =\n options.worldExtent !== undefined ? options.worldExtent : null;\n\n /**\n * @private\n * @type {string}\n */\n this.axisOrientation_ =\n options.axisOrientation !== undefined ? options.axisOrientation : 'enu';\n\n /**\n * @private\n * @type {boolean}\n */\n this.global_ = options.global !== undefined ? options.global : false;\n\n /**\n * @private\n * @type {boolean}\n */\n this.canWrapX_ = !!(this.global_ && this.extent_);\n\n /**\n * @private\n * @type {GetPointResolution|undefined}\n */\n this.getPointResolutionFunc_ = options.getPointResolution;\n\n /**\n * @private\n * @type {import(\"../tilegrid/TileGrid.js\").default}\n */\n this.defaultTileGrid_ = null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.metersPerUnit_ = options.metersPerUnit;\n }\n\n /**\n * @return {boolean} The projection is suitable for wrapping the x-axis\n */\n canWrapX() {\n return this.canWrapX_;\n }\n\n /**\n * Get the code for this projection, e.g. 'EPSG:4326'.\n * @return {string} Code.\n * @api\n */\n getCode() {\n return this.code_;\n }\n\n /**\n * Get the validity extent for this projection.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n getExtent() {\n return this.extent_;\n }\n\n /**\n * Get the units of this projection.\n * @return {import(\"./Units.js\").Units} Units.\n * @api\n */\n getUnits() {\n return this.units_;\n }\n\n /**\n * Get the amount of meters per unit of this projection. If the projection is\n * not configured with `metersPerUnit` or a units identifier, the return is\n * `undefined`.\n * @return {number|undefined} Meters.\n * @api\n */\n getMetersPerUnit() {\n return this.metersPerUnit_ || METERS_PER_UNIT[this.units_];\n }\n\n /**\n * Get the world extent for this projection.\n * @return {import(\"../extent.js\").Extent} Extent.\n * @api\n */\n getWorldExtent() {\n return this.worldExtent_;\n }\n\n /**\n * Get the axis orientation of this projection.\n * Example values are:\n * enu - the default easting, northing, elevation.\n * neu - northing, easting, up - useful for \"lat/long\" geographic coordinates,\n * or south orientated transverse mercator.\n * wnu - westing, northing, up - some planetary coordinate systems have\n * \"west positive\" coordinate systems\n * @return {string} Axis orientation.\n * @api\n */\n getAxisOrientation() {\n return this.axisOrientation_;\n }\n\n /**\n * Is this projection a global projection which spans the whole world?\n * @return {boolean} Whether the projection is global.\n * @api\n */\n isGlobal() {\n return this.global_;\n }\n\n /**\n * Set if the projection is a global projection which spans the whole world\n * @param {boolean} global Whether the projection is global.\n * @api\n */\n setGlobal(global) {\n this.global_ = global;\n this.canWrapX_ = !!(global && this.extent_);\n }\n\n /**\n * @return {import(\"../tilegrid/TileGrid.js\").default} The default tile grid.\n */\n getDefaultTileGrid() {\n return this.defaultTileGrid_;\n }\n\n /**\n * @param {import(\"../tilegrid/TileGrid.js\").default} tileGrid The default tile grid.\n */\n setDefaultTileGrid(tileGrid) {\n this.defaultTileGrid_ = tileGrid;\n }\n\n /**\n * Set the validity extent for this projection.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @api\n */\n setExtent(extent) {\n this.extent_ = extent;\n this.canWrapX_ = !!(this.global_ && extent);\n }\n\n /**\n * Set the world extent for this projection.\n * @param {import(\"../extent.js\").Extent} worldExtent World extent\n * [minlon, minlat, maxlon, maxlat].\n * @api\n */\n setWorldExtent(worldExtent) {\n this.worldExtent_ = worldExtent;\n }\n\n /**\n * Set the getPointResolution function (see {@link module:ol/proj.getPointResolution}\n * for this projection.\n * @param {function(number, import(\"../coordinate.js\").Coordinate):number} func Function\n * @api\n */\n setGetPointResolution(func) {\n this.getPointResolutionFunc_ = func;\n }\n\n /**\n * Get the custom point resolution function for this projection (if set).\n * @return {GetPointResolution|undefined} The custom point\n * resolution function (if set).\n */\n getPointResolutionFunc() {\n return this.getPointResolutionFunc_;\n }\n}\n\nexport default Projection;\n", "/**\n * @module ol/proj/epsg3857\n */\nimport Projection from './Projection.js';\n\n/**\n * Radius of WGS84 sphere\n *\n * @const\n * @type {number}\n */\nexport const RADIUS = 6378137;\n\n/**\n * @const\n * @type {number}\n */\nexport const HALF_SIZE = Math.PI * RADIUS;\n\n/**\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport const EXTENT = [-HALF_SIZE, -HALF_SIZE, HALF_SIZE, HALF_SIZE];\n\n/**\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport const WORLD_EXTENT = [-180, -85, 180, 85];\n\n/**\n * Maximum safe value in y direction\n * @const\n * @type {number}\n */\nexport const MAX_SAFE_Y = RADIUS * Math.log(Math.tan(Math.PI / 2));\n\n/**\n * @classdesc\n * Projection object for web/spherical Mercator (EPSG:3857).\n */\nclass EPSG3857Projection extends Projection {\n /**\n * @param {string} code Code.\n */\n constructor(code) {\n super({\n code: code,\n units: 'm',\n extent: EXTENT,\n global: true,\n worldExtent: WORLD_EXTENT,\n getPointResolution: function (resolution, point) {\n return resolution / Math.cosh(point[1] / RADIUS);\n },\n });\n }\n}\n\n/**\n * Projections equal to EPSG:3857.\n *\n * @const\n * @type {Array<import(\"./Projection.js\").default>}\n */\nexport const PROJECTIONS = [\n new EPSG3857Projection('EPSG:3857'),\n new EPSG3857Projection('EPSG:102100'),\n new EPSG3857Projection('EPSG:102113'),\n new EPSG3857Projection('EPSG:900913'),\n new EPSG3857Projection('http://www.opengis.net/def/crs/EPSG/0/3857'),\n new EPSG3857Projection('http://www.opengis.net/gml/srs/epsg.xml#3857'),\n];\n\n/**\n * Transformation from EPSG:4326 to EPSG:3857.\n *\n * @param {Array<number>} input Input array of coordinate values.\n * @param {Array<number>} [output] Output array of coordinate values.\n * @param {number} [dimension] Dimension (default is `2`).\n * @param {number} [stride] Stride (default is `dimension`).\n * @return {Array<number>} Output array of coordinate values.\n */\nexport function fromEPSG4326(input, output, dimension, stride) {\n const length = input.length;\n dimension = dimension > 1 ? dimension : 2;\n stride = stride ?? dimension;\n if (output === undefined) {\n if (dimension > 2) {\n // preserve values beyond second dimension\n output = input.slice();\n } else {\n output = new Array(length);\n }\n }\n for (let i = 0; i < length; i += stride) {\n output[i] = (HALF_SIZE * input[i]) / 180;\n let y = RADIUS * Math.log(Math.tan((Math.PI * (+input[i + 1] + 90)) / 360));\n if (y > MAX_SAFE_Y) {\n y = MAX_SAFE_Y;\n } else if (y < -MAX_SAFE_Y) {\n y = -MAX_SAFE_Y;\n }\n output[i + 1] = y;\n }\n return output;\n}\n\n/**\n * Transformation from EPSG:3857 to EPSG:4326.\n *\n * @param {Array<number>} input Input array of coordinate values.\n * @param {Array<number>} [output] Output array of coordinate values.\n * @param {number} [dimension] Dimension (default is `2`).\n * @param {number} [stride] Stride (default is `dimension`).\n * @return {Array<number>} Output array of coordinate values.\n */\nexport function toEPSG4326(input, output, dimension, stride) {\n const length = input.length;\n dimension = dimension > 1 ? dimension : 2;\n stride = stride ?? dimension;\n if (output === undefined) {\n if (dimension > 2) {\n // preserve values beyond second dimension\n output = input.slice();\n } else {\n output = new Array(length);\n }\n }\n for (let i = 0; i < length; i += stride) {\n output[i] = (180 * input[i]) / HALF_SIZE;\n output[i + 1] =\n (360 * Math.atan(Math.exp(input[i + 1] / RADIUS))) / Math.PI - 90;\n }\n return output;\n}\n", "/**\n * @module ol/proj/epsg4326\n */\nimport Projection from './Projection.js';\n\n/**\n * Semi-major radius of the WGS84 ellipsoid.\n *\n * @const\n * @type {number}\n */\nexport const RADIUS = 6378137;\n\n/**\n * Extent of the EPSG:4326 projection which is the whole world.\n *\n * @const\n * @type {import(\"../extent.js\").Extent}\n */\nexport const EXTENT = [-180, -90, 180, 90];\n\n/**\n * @const\n * @type {number}\n */\nexport const METERS_PER_UNIT = (Math.PI * RADIUS) / 180;\n\n/**\n * @classdesc\n * Projection object for WGS84 geographic coordinates (EPSG:4326).\n *\n * Note that OpenLayers does not strictly comply with the EPSG definition.\n * The EPSG registry defines 4326 as a CRS for Latitude,Longitude (y,x).\n * OpenLayers treats EPSG:4326 as a pseudo-projection, with x,y coordinates.\n */\nclass EPSG4326Projection extends Projection {\n /**\n * @param {string} code Code.\n * @param {string} [axisOrientation] Axis orientation.\n */\n constructor(code, axisOrientation) {\n super({\n code: code,\n units: 'degrees',\n extent: EXTENT,\n axisOrientation: axisOrientation,\n global: true,\n metersPerUnit: METERS_PER_UNIT,\n worldExtent: EXTENT,\n });\n }\n}\n\n/**\n * Projections equal to EPSG:4326.\n *\n * @const\n * @type {Array<import(\"./Projection.js\").default>}\n */\nexport const PROJECTIONS = [\n new EPSG4326Projection('CRS:84'),\n new EPSG4326Projection('EPSG:4326', 'neu'),\n new EPSG4326Projection('urn:ogc:def:crs:OGC:1.3:CRS84'),\n new EPSG4326Projection('urn:ogc:def:crs:OGC:2:84'),\n new EPSG4326Projection('http://www.opengis.net/def/crs/OGC/1.3/CRS84'),\n new EPSG4326Projection('http://www.opengis.net/gml/srs/epsg.xml#4326', 'neu'),\n new EPSG4326Projection('http://www.opengis.net/def/crs/EPSG/0/4326', 'neu'),\n];\n", "/**\n * @module ol/proj/projections\n */\n\n/**\n * @type {Object<string, import(\"./Projection.js\").default>}\n */\nlet cache = {};\n\n/**\n * Clear the projections cache.\n */\nexport function clear() {\n cache = {};\n}\n\n/**\n * Get a cached projection by code.\n * @param {string} code The code for the projection.\n * @return {import(\"./Projection.js\").default|null} The projection (if cached).\n */\nexport function get(code) {\n return (\n cache[code] ||\n cache[code.replace(/urn:(x-)?ogc:def:crs:EPSG:(.*:)?(\\w+)$/, 'EPSG:$3')] ||\n null\n );\n}\n\n/**\n * Add a projection to the cache.\n * @param {string} code The projection code.\n * @param {import(\"./Projection.js\").default} projection The projection to cache.\n */\nexport function add(code, projection) {\n cache[code] = projection;\n}\n", "/**\n * @module ol/proj/transforms\n */\nimport {isEmpty} from '../obj.js';\n\n/**\n * @private\n * @type {!Object<string, Object<string, import(\"../proj.js\").TransformFunction>>}\n */\nlet transforms = {};\n\n/**\n * Clear the transform cache.\n */\nexport function clear() {\n transforms = {};\n}\n\n/**\n * Registers a conversion function to convert coordinates from the source\n * projection to the destination projection.\n *\n * @param {import(\"./Projection.js\").default} source Source.\n * @param {import(\"./Projection.js\").default} destination Destination.\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform.\n */\nexport function add(source, destination, transformFn) {\n const sourceCode = source.getCode();\n const destinationCode = destination.getCode();\n if (!(sourceCode in transforms)) {\n transforms[sourceCode] = {};\n }\n transforms[sourceCode][destinationCode] = transformFn;\n}\n\n/**\n * Unregisters the conversion function to convert coordinates from the source\n * projection to the destination projection. This method is used to clean up\n * cached transforms during testing.\n *\n * @param {import(\"./Projection.js\").default} source Source projection.\n * @param {import(\"./Projection.js\").default} destination Destination projection.\n * @return {import(\"../proj.js\").TransformFunction} transformFn The unregistered transform.\n */\nexport function remove(source, destination) {\n const sourceCode = source.getCode();\n const destinationCode = destination.getCode();\n const transform = transforms[sourceCode][destinationCode];\n delete transforms[sourceCode][destinationCode];\n if (isEmpty(transforms[sourceCode])) {\n delete transforms[sourceCode];\n }\n return transform;\n}\n\n/**\n * Get a transform given a source code and a destination code.\n * @param {string} sourceCode The code for the source projection.\n * @param {string} destinationCode The code for the destination projection.\n * @return {import(\"../proj.js\").TransformFunction|null} The transform function (if found).\n */\nexport function get(sourceCode, destinationCode) {\n if (sourceCode in transforms && destinationCode in transforms[sourceCode]) {\n return transforms[sourceCode][destinationCode];\n }\n return null;\n}\n", "/**\n * @module ol/proj/utm\n */\n\n/**\n * Adapted from https://github.com/Turbo87/utm\n * Copyright (c) 2012-2017 Tobias Bieniek\n *\n * The functions here provide approximate transforms to and from UTM.\n * They are not appropriate for use beyond the validity extend of a UTM\n * zone, and the accuracy of the transform decreases toward the zone\n * edges.\n */\n\nimport {toDegrees, toRadians, wrap} from '../math.js';\nimport Projection from './Projection.js';\n\n/**\n * @typedef {Object} UTMZone\n * @property {number} number The zone number (1 - 60).\n * @property {boolean} north The northern hemisphere.\n */\n\nconst K0 = 0.9996;\n\nconst E = 0.00669438;\nconst E2 = E * E;\nconst E3 = E2 * E;\nconst E_P2 = E / (1 - E);\n\nconst SQRT_E = Math.sqrt(1 - E);\nconst _E = (1 - SQRT_E) / (1 + SQRT_E);\nconst _E2 = _E * _E;\nconst _E3 = _E2 * _E;\nconst _E4 = _E3 * _E;\nconst _E5 = _E4 * _E;\n\nconst M1 = 1 - E / 4 - (3 * E2) / 64 - (5 * E3) / 256;\nconst M2 = (3 * E) / 8 + (3 * E2) / 32 + (45 * E3) / 1024;\nconst M3 = (15 * E2) / 256 + (45 * E3) / 1024;\nconst M4 = (35 * E3) / 3072;\n\nconst P2 = (3 / 2) * _E - (27 / 32) * _E3 + (269 / 512) * _E5;\nconst P3 = (21 / 16) * _E2 - (55 / 32) * _E4;\nconst P4 = (151 / 96) * _E3 - (417 / 128) * _E5;\nconst P5 = (1097 / 512) * _E4;\n\nconst R = 6378137;\n\n/**\n * @param {number} easting Easting value of coordinate.\n * @param {number} northing Northing value of coordinate.\n * @param {UTMZone} zone The UTM zone.\n * @return {import(\"../coordinate.js\").Coordinate} The transformed coordinate.\n */\nfunction toLonLat(easting, northing, zone) {\n const x = easting - 500000;\n const y = zone.north ? northing : northing - 10000000;\n\n const m = y / K0;\n const mu = m / (R * M1);\n\n const pRad =\n mu +\n P2 * Math.sin(2 * mu) +\n P3 * Math.sin(4 * mu) +\n P4 * Math.sin(6 * mu) +\n P5 * Math.sin(8 * mu);\n\n const pSin = Math.sin(pRad);\n const pSin2 = pSin * pSin;\n\n const pCos = Math.cos(pRad);\n\n const pTan = pSin / pCos;\n const pTan2 = pTan * pTan;\n const pTan4 = pTan2 * pTan2;\n\n const epSin = 1 - E * pSin2;\n const epSinSqrt = Math.sqrt(1 - E * pSin2);\n\n const n = R / epSinSqrt;\n const r = (1 - E) / epSin;\n\n const c = E_P2 * pCos ** 2;\n const c2 = c * c;\n\n const d = x / (n * K0);\n const d2 = d * d;\n const d3 = d2 * d;\n const d4 = d3 * d;\n const d5 = d4 * d;\n const d6 = d5 * d;\n\n const latitude =\n pRad -\n (pTan / r) *\n (d2 / 2 - (d4 / 24) * (5 + 3 * pTan2 + 10 * c - 4 * c2 - 9 * E_P2)) +\n (d6 / 720) * (61 + 90 * pTan2 + 298 * c + 45 * pTan4 - 252 * E_P2 - 3 * c2);\n\n let longitude =\n (d -\n (d3 / 6) * (1 + 2 * pTan2 + c) +\n (d5 / 120) * (5 - 2 * c + 28 * pTan2 - 3 * c2 + 8 * E_P2 + 24 * pTan4)) /\n pCos;\n\n longitude = wrap(\n longitude + toRadians(zoneToCentralLongitude(zone.number)),\n -Math.PI,\n Math.PI,\n );\n\n return [toDegrees(longitude), toDegrees(latitude)];\n}\n\nconst MIN_LATITUDE = -80;\nconst MAX_LATITUDE = 84;\nconst MIN_LONGITUDE = -180;\nconst MAX_LONGITUDE = 180;\n\n/**\n * @param {number} longitude The longitude.\n * @param {number} latitude The latitude.\n * @param {UTMZone} zone The UTM zone.\n * @return {import('../coordinate.js').Coordinate} The UTM coordinate.\n */\nfunction fromLonLat(longitude, latitude, zone) {\n longitude = wrap(longitude, MIN_LONGITUDE, MAX_LONGITUDE);\n\n if (latitude < MIN_LATITUDE) {\n latitude = MIN_LATITUDE;\n } else if (latitude > MAX_LATITUDE) {\n latitude = MAX_LATITUDE;\n }\n\n const latRad = toRadians(latitude);\n const latSin = Math.sin(latRad);\n const latCos = Math.cos(latRad);\n\n const latTan = latSin / latCos;\n const latTan2 = latTan * latTan;\n const latTan4 = latTan2 * latTan2;\n\n const lonRad = toRadians(longitude);\n const centralLon = zoneToCentralLongitude(zone.number);\n const centralLonRad = toRadians(centralLon);\n\n const n = R / Math.sqrt(1 - E * latSin ** 2);\n const c = E_P2 * latCos ** 2;\n\n const a = latCos * wrap(lonRad - centralLonRad, -Math.PI, Math.PI);\n const a2 = a * a;\n const a3 = a2 * a;\n const a4 = a3 * a;\n const a5 = a4 * a;\n const a6 = a5 * a;\n\n const m =\n R *\n (M1 * latRad -\n M2 * Math.sin(2 * latRad) +\n M3 * Math.sin(4 * latRad) -\n M4 * Math.sin(6 * latRad));\n\n const easting =\n K0 *\n n *\n (a +\n (a3 / 6) * (1 - latTan2 + c) +\n (a5 / 120) * (5 - 18 * latTan2 + latTan4 + 72 * c - 58 * E_P2)) +\n 500000;\n\n let northing =\n K0 *\n (m +\n n *\n latTan *\n (a2 / 2 +\n (a4 / 24) * (5 - latTan2 + 9 * c + 4 * c ** 2) +\n (a6 / 720) * (61 - 58 * latTan2 + latTan4 + 600 * c - 330 * E_P2)));\n\n if (!zone.north) {\n northing += 10000000;\n }\n\n return [easting, northing];\n}\n\n/**\n * @param {number} zone The zone number.\n * @return {number} The central longitude in degrees.\n */\nfunction zoneToCentralLongitude(zone) {\n return (zone - 1) * 6 - 180 + 3;\n}\n\n/**\n * @type {Array<RegExp>}\n */\nconst epsgRegExes = [\n /^EPSG:(\\d+)$/,\n /^urn:ogc:def:crs:EPSG::(\\d+)$/,\n /^http:\\/\\/www\\.opengis\\.net\\/def\\/crs\\/EPSG\\/0\\/(\\d+)$/,\n];\n\n/**\n * @param {string} code The projection code.\n * @return {UTMZone|null} The UTM zone info (or null if not UTM).\n */\nexport function zoneFromCode(code) {\n let epsgId = 0;\n for (const re of epsgRegExes) {\n const match = code.match(re);\n if (match) {\n epsgId = parseInt(match[1]);\n break;\n }\n }\n if (!epsgId) {\n return null;\n }\n\n let number = 0;\n let north = false;\n if (epsgId > 32700 && epsgId < 32761) {\n number = epsgId - 32700;\n } else if (epsgId > 32600 && epsgId < 32661) {\n north = true;\n number = epsgId - 32600;\n }\n if (!number) {\n return null;\n }\n\n return {number, north};\n}\n\n/**\n * @param {function(number, number, UTMZone): import('../coordinate.js').Coordinate} transformer The transformer.\n * @param {UTMZone} zone The UTM zone.\n * @return {import('../proj.js').TransformFunction} The transform function.\n */\nfunction makeTransformFunction(transformer, zone) {\n return function (input, output, dimension, stride) {\n const length = input.length;\n dimension = dimension > 1 ? dimension : 2;\n stride = stride ?? dimension;\n if (!output) {\n if (dimension > 2) {\n output = input.slice();\n } else {\n output = new Array(length);\n }\n }\n for (let i = 0; i < length; i += stride) {\n const x = input[i];\n const y = input[i + 1];\n const coord = transformer(x, y, zone);\n output[i] = coord[0];\n output[i + 1] = coord[1];\n }\n return output;\n };\n}\n\n/**\n * @param {string} code The projection code.\n * @return {import('./Projection.js').default|null} A projection or null if unable to create one.\n */\nexport function makeProjection(code) {\n const zone = zoneFromCode(code);\n if (!zone) {\n return null;\n }\n return new Projection({code, units: 'm'});\n}\n\n/**\n * @param {import('./Projection.js').default} projection The projection.\n * @return {import('../proj.js').Transforms|null} The transforms lookup or null if unable to handle projection.\n */\nexport function makeTransforms(projection) {\n const zone = zoneFromCode(projection.getCode());\n if (!zone) {\n return null;\n }\n\n return {\n forward: makeTransformFunction(fromLonLat, zone),\n inverse: makeTransformFunction(toLonLat, zone),\n };\n}\n", "/**\n * @module ol/proj\n */\n\n/**\n * The ol/proj module stores:\n * a list of {@link module:ol/proj/Projection~Projection}\n * objects, one for each projection supported by the application\n * a list of transform functions needed to convert coordinates in one projection\n * into another.\n *\n * The static functions are the methods used to maintain these.\n * Each transform function can handle not only simple coordinate pairs, but also\n * large arrays of coordinates such as vector geometries.\n *\n * When loaded, the library adds projection objects for EPSG:4326 (WGS84\n * geographic coordinates) and EPSG:3857 (Web or Spherical Mercator, as used\n * for example by Bing Maps or OpenStreetMap), together with the relevant\n * transform functions.\n *\n * Additional transforms may be added by using the http://proj4js.org/\n * library (version 2.2 or later). You can use the full build supplied by\n * Proj4js, or create a custom build to support those projections you need; see\n * the Proj4js website for how to do this. You also need the Proj4js definitions\n * for the required projections. These definitions can be obtained from\n * https://spatialreference.org/, and are a JS function, so can be loaded in a\n * script tag (as in the examples) or pasted into your application.\n *\n * After all required projection definitions are added to proj4's registry (by\n * using `proj4.defs()`), simply call `register(proj4)` from the `ol/proj/proj4`\n * package. Existing transforms are not changed by this function. See\n * examples/wms-image-custom-proj for an example of this.\n *\n * Additional projection definitions can be registered with `proj4.defs()` any\n * time. Just make sure to call `register(proj4)` again; for example, with user-supplied data where you don't\n * know in advance what projections are needed, you can initially load minimal\n * support and then load whichever are requested.\n *\n * Note that Proj4js does not support projection extents. If you want to add\n * one for creating default tile grids, you can add it after the Projection\n * object has been created with `setExtent`, for example,\n * `get('EPSG:1234').setExtent(extent)`.\n *\n * In addition to Proj4js support, any transform functions can be added with\n * {@link module:ol/proj.addCoordinateTransforms}. To use this, you must first create\n * a {@link module:ol/proj/Projection~Projection} object for the new projection and add it with\n * {@link module:ol/proj.addProjection}. You can then add the forward and inverse\n * functions with {@link module:ol/proj.addCoordinateTransforms}. See\n * examples/wms-custom-proj for an example of this.\n *\n * Note that if no transforms are needed and you only need to define the\n * projection, just add a {@link module:ol/proj/Projection~Projection} with\n * {@link module:ol/proj.addProjection}. See examples/wms-no-proj for an example of\n * this.\n */\nimport {warn} from './console.js';\nimport {equals, getWorldsAway} from './coordinate.js';\nimport {applyTransform, getWidth} from './extent.js';\nimport {clamp, modulo} from './math.js';\nimport Projection from './proj/Projection.js';\nimport {METERS_PER_UNIT} from './proj/Units.js';\nimport {\n PROJECTIONS as EPSG3857_PROJECTIONS,\n fromEPSG4326,\n toEPSG4326,\n} from './proj/epsg3857.js';\nimport {PROJECTIONS as EPSG4326_PROJECTIONS} from './proj/epsg4326.js';\nimport {\n add as addProj,\n clear as clearProj,\n get as getProj,\n} from './proj/projections.js';\nimport {\n add as addTransformFunc,\n clear as clearTransformFuncs,\n get as getTransformFunc,\n} from './proj/transforms.js';\nimport {\n makeProjection as makeUTMProjection,\n makeTransforms as makeUTMTransforms,\n} from './proj/utm.js';\nimport {getDistance} from './sphere.js';\n\n/**\n * A projection as {@link module:ol/proj/Projection~Projection}, SRS identifier\n * string or undefined.\n * @typedef {Projection|string|undefined} ProjectionLike\n * @api\n */\n\n/**\n * @typedef {Object} Transforms\n * @property {TransformFunction} forward The forward transform (from geographic).\n * @property {TransformFunction} inverse The inverse transform (to geographic).\n */\n\n/**\n * @type {Array<function(Projection): Transforms|null>}\n */\nconst transformFactories = [makeUTMTransforms];\n\n/**\n * @type {Array<function(string): Projection|null>}\n */\nconst projectionFactories = [makeUTMProjection];\n\n/**\n * A transform function accepts an array of input coordinate values, an optional\n * output array, and an optional dimension (default should be 2). The function\n * transforms the input coordinate values, populates the output array, and\n * returns the output array.\n *\n * @callback TransformFunction\n * @param {Array<number>} input\n * @param {Array<number>} [output]\n * @param {number} [dimension]\n * @param {number} [stride]\n * @return {Array<number>}\n *\n * @api\n */\n\nexport {METERS_PER_UNIT};\n\nexport {Projection};\n\nlet showCoordinateWarning = true;\n\n/**\n * @param {boolean} [disable] Disable console info about `useGeographic()`\n */\nexport function disableCoordinateWarning(disable) {\n const hide = disable === undefined ? true : disable;\n showCoordinateWarning = !hide;\n}\n\n/**\n * @param {Array<number>} input Input coordinate array.\n * @param {Array<number>} [output] Output array of coordinate values.\n * @return {Array<number>} Output coordinate array (new array, same coordinate\n * values).\n */\nexport function cloneTransform(input, output) {\n if (output !== undefined) {\n for (let i = 0, ii = input.length; i < ii; ++i) {\n output[i] = input[i];\n }\n output = output;\n } else {\n output = input.slice();\n }\n return output;\n}\n\n/**\n * @param {Array<number>} input Input coordinate array.\n * @param {Array<number>} [output] Output array of coordinate values.\n * @return {Array<number>} Input coordinate array (same array as input).\n */\nexport function identityTransform(input, output) {\n if (output !== undefined && input !== output) {\n for (let i = 0, ii = input.length; i < ii; ++i) {\n output[i] = input[i];\n }\n input = output;\n }\n return input;\n}\n\n/**\n * Add a Projection object to the list of supported projections that can be\n * looked up by their code.\n *\n * @param {Projection} projection Projection instance.\n * @api\n */\nexport function addProjection(projection) {\n addProj(projection.getCode(), projection);\n addTransformFunc(projection, projection, cloneTransform);\n}\n\n/**\n * @param {Array<Projection>} projections Projections.\n */\nexport function addProjections(projections) {\n projections.forEach(addProjection);\n}\n\n/**\n * Fetches a Projection object for the code specified.\n *\n * @param {ProjectionLike} projectionLike Either a code string which is\n * a combination of authority and identifier such as \"EPSG:4326\", or an\n * existing projection object, or undefined.\n * @return {Projection|null} Projection object, or null if not in list.\n * @api\n */\nexport function get(projectionLike) {\n if (!(typeof projectionLike === 'string')) {\n return projectionLike;\n }\n const projection = getProj(projectionLike);\n if (projection) {\n return projection;\n }\n for (const makeProjection of projectionFactories) {\n const projection = makeProjection(projectionLike);\n if (projection) {\n return projection;\n }\n }\n return null;\n}\n\n/**\n * Get the resolution of the point in degrees or distance units.\n * For projections with degrees as the unit this will simply return the\n * provided resolution. For other projections the point resolution is\n * by default estimated by transforming the `point` pixel to EPSG:4326,\n * measuring its width and height on the normal sphere,\n * and taking the average of the width and height.\n * A custom function can be provided for a specific projection, either\n * by setting the `getPointResolution` option in the\n * {@link module:ol/proj/Projection~Projection} constructor or by using\n * {@link module:ol/proj/Projection~Projection#setGetPointResolution} to change an existing\n * projection object.\n * @param {ProjectionLike} projection The projection.\n * @param {number} resolution Nominal resolution in projection units.\n * @param {import(\"./coordinate.js\").Coordinate} point Point to find adjusted resolution at.\n * @param {import(\"./proj/Units.js\").Units} [units] Units to get the point resolution in.\n * Default is the projection's units.\n * @return {number} Point resolution.\n * @api\n */\nexport function getPointResolution(projection, resolution, point, units) {\n projection = get(projection);\n let pointResolution;\n const getter = projection.getPointResolutionFunc();\n if (getter) {\n pointResolution = getter(resolution, point);\n if (units && units !== projection.getUnits()) {\n const metersPerUnit = projection.getMetersPerUnit();\n if (metersPerUnit) {\n pointResolution =\n (pointResolution * metersPerUnit) / METERS_PER_UNIT[units];\n }\n }\n } else {\n const projUnits = projection.getUnits();\n if ((projUnits == 'degrees' && !units) || units == 'degrees') {\n pointResolution = resolution;\n } else {\n // Estimate point resolution by transforming the center pixel to EPSG:4326,\n // measuring its width and height on the normal sphere, and taking the\n // average of the width and height.\n const toEPSG4326 = getTransformFromProjections(\n projection,\n get('EPSG:4326'),\n );\n if (!toEPSG4326 && projUnits !== 'degrees') {\n // no transform is available\n pointResolution = resolution * projection.getMetersPerUnit();\n } else {\n let vertices = [\n point[0] - resolution / 2,\n point[1],\n point[0] + resolution / 2,\n point[1],\n point[0],\n point[1] - resolution / 2,\n point[0],\n point[1] + resolution / 2,\n ];\n vertices = toEPSG4326(vertices, vertices, 2);\n const width = getDistance(vertices.slice(0, 2), vertices.slice(2, 4));\n const height = getDistance(vertices.slice(4, 6), vertices.slice(6, 8));\n pointResolution = (width + height) / 2;\n }\n const metersPerUnit = units\n ? METERS_PER_UNIT[units]\n : projection.getMetersPerUnit();\n if (metersPerUnit !== undefined) {\n pointResolution /= metersPerUnit;\n }\n }\n }\n return pointResolution;\n}\n\n/**\n * Registers transformation functions that don't alter coordinates. Those allow\n * to transform between projections with equal meaning.\n *\n * @param {Array<Projection>} projections Projections.\n * @api\n */\nexport function addEquivalentProjections(projections) {\n addProjections(projections);\n projections.forEach(function (source) {\n projections.forEach(function (destination) {\n if (source !== destination) {\n addTransformFunc(source, destination, cloneTransform);\n }\n });\n });\n}\n\n/**\n * Registers transformation functions to convert coordinates in any projection\n * in projection1 to any projection in projection2.\n *\n * @param {Array<Projection>} projections1 Projections with equal\n * meaning.\n * @param {Array<Projection>} projections2 Projections with equal\n * meaning.\n * @param {TransformFunction} forwardTransform Transformation from any\n * projection in projection1 to any projection in projection2.\n * @param {TransformFunction} inverseTransform Transform from any projection\n * in projection2 to any projection in projection1..\n */\nexport function addEquivalentTransforms(\n projections1,\n projections2,\n forwardTransform,\n inverseTransform,\n) {\n projections1.forEach(function (projection1) {\n projections2.forEach(function (projection2) {\n addTransformFunc(projection1, projection2, forwardTransform);\n addTransformFunc(projection2, projection1, inverseTransform);\n });\n });\n}\n\n/**\n * Clear all cached projections and transforms.\n */\nexport function clearAllProjections() {\n clearProj();\n clearTransformFuncs();\n}\n\n/**\n * @param {Projection|string|undefined} projection Projection.\n * @param {string} defaultCode Default code.\n * @return {Projection} Projection.\n */\nexport function createProjection(projection, defaultCode) {\n if (!projection) {\n return get(defaultCode);\n }\n if (typeof projection === 'string') {\n return get(projection);\n }\n return /** @type {Projection} */ (projection);\n}\n\n/**\n * Creates a {@link module:ol/proj~TransformFunction} from a simple 2D coordinate transform\n * function.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} coordTransform Coordinate\n * transform.\n * @return {TransformFunction} Transform function.\n */\nexport function createTransformFromCoordinateTransform(coordTransform) {\n return (\n /**\n * @param {Array<number>} input Input.\n * @param {Array<number>} [output] Output.\n * @param {number} [dimension] Dimensions that should be transformed.\n * @param {number} [stride] Stride.\n * @return {Array<number>} Output.\n */\n function (input, output, dimension, stride) {\n const length = input.length;\n dimension = dimension !== undefined ? dimension : 2;\n stride = stride ?? dimension;\n output = output !== undefined ? output : new Array(length);\n for (let i = 0; i < length; i += stride) {\n const point = coordTransform(input.slice(i, i + dimension));\n const pointLength = point.length;\n for (let j = 0, jj = stride; j < jj; ++j) {\n output[i + j] = j >= pointLength ? input[i + j] : point[j];\n }\n }\n return output;\n }\n );\n}\n\n/**\n * Registers coordinate transform functions to convert coordinates between the\n * source projection and the destination projection.\n * The forward and inverse functions convert coordinate pairs; this function\n * converts these into the functions used internally which also handle\n * extents and coordinate arrays.\n *\n * @param {ProjectionLike} source Source projection.\n * @param {ProjectionLike} destination Destination projection.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} forward The forward transform\n * function (that is, from the source projection to the destination\n * projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns\n * the transformed {@link module:ol/coordinate~Coordinate}.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} inverse The inverse transform\n * function (that is, from the destination projection to the source\n * projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns\n * the transformed {@link module:ol/coordinate~Coordinate}. If the transform function can only\n * transform less dimensions than the input coordinate, it is supposeed to return a coordinate\n * with only the length it can transform. The other dimensions will be taken unchanged from the\n * source.\n * @api\n */\nexport function addCoordinateTransforms(source, destination, forward, inverse) {\n const sourceProj = get(source);\n const destProj = get(destination);\n addTransformFunc(\n sourceProj,\n destProj,\n createTransformFromCoordinateTransform(forward),\n );\n addTransformFunc(\n destProj,\n sourceProj,\n createTransformFromCoordinateTransform(inverse),\n );\n}\n\n/**\n * Transforms a coordinate from longitude/latitude to a different projection.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate as longitude and latitude, i.e.\n * an array with longitude as 1st and latitude as 2nd element.\n * @param {ProjectionLike} [projection] Target projection. The\n * default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate projected to the target projection.\n * @api\n */\nexport function fromLonLat(coordinate, projection) {\n disableCoordinateWarning();\n return transform(\n coordinate,\n 'EPSG:4326',\n projection !== undefined ? projection : 'EPSG:3857',\n );\n}\n\n/**\n * Transforms a coordinate to longitude/latitude.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Projected coordinate.\n * @param {ProjectionLike} [projection] Projection of the coordinate.\n * The default is Web Mercator, i.e. 'EPSG:3857'.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate as longitude and latitude, i.e. an array\n * with longitude as 1st and latitude as 2nd element.\n * @api\n */\nexport function toLonLat(coordinate, projection) {\n const lonLat = transform(\n coordinate,\n projection !== undefined ? projection : 'EPSG:3857',\n 'EPSG:4326',\n );\n const lon = lonLat[0];\n if (lon < -180 || lon > 180) {\n lonLat[0] = modulo(lon + 180, 360) - 180;\n }\n return lonLat;\n}\n\n/**\n * Checks if two projections are the same, that is every coordinate in one\n * projection does represent the same geographic point as the same coordinate in\n * the other projection.\n *\n * @param {Projection} projection1 Projection 1.\n * @param {Projection} projection2 Projection 2.\n * @return {boolean} Equivalent.\n * @api\n */\nexport function equivalent(projection1, projection2) {\n if (projection1 === projection2) {\n return true;\n }\n const equalUnits = projection1.getUnits() === projection2.getUnits();\n if (projection1.getCode() === projection2.getCode()) {\n return equalUnits;\n }\n const transformFunc = getTransformFromProjections(projection1, projection2);\n return transformFunc === cloneTransform && equalUnits;\n}\n\n/**\n * Searches in the list of transform functions for the function for converting\n * coordinates from the source projection to the destination projection.\n *\n * @param {Projection} source Source Projection object.\n * @param {Projection} destination Destination Projection\n * object.\n * @return {TransformFunction|null} Transform function.\n */\nexport function getTransformFromProjections(source, destination) {\n const sourceCode = source.getCode();\n const destinationCode = destination.getCode();\n let transformFunc = getTransformFunc(sourceCode, destinationCode);\n if (transformFunc) {\n return transformFunc;\n }\n\n /**\n * @type {Transforms|null}\n */\n let sourceTransforms = null;\n\n /**\n * @type {Transforms|null}\n */\n let destinationTransforms = null;\n\n // lazily add projections if we have supported transforms\n for (const makeTransforms of transformFactories) {\n if (!sourceTransforms) {\n sourceTransforms = makeTransforms(source);\n }\n if (!destinationTransforms) {\n destinationTransforms = makeTransforms(destination);\n }\n }\n\n if (!sourceTransforms && !destinationTransforms) {\n return null;\n }\n\n const intermediateCode = 'EPSG:4326';\n if (!destinationTransforms) {\n const toDestination = getTransformFunc(intermediateCode, destinationCode);\n if (toDestination) {\n transformFunc = composeTransformFuncs(\n sourceTransforms.inverse,\n toDestination,\n );\n }\n } else if (!sourceTransforms) {\n const fromSource = getTransformFunc(sourceCode, intermediateCode);\n if (fromSource) {\n transformFunc = composeTransformFuncs(\n fromSource,\n destinationTransforms.forward,\n );\n }\n } else {\n transformFunc = composeTransformFuncs(\n sourceTransforms.inverse,\n destinationTransforms.forward,\n );\n }\n\n if (transformFunc) {\n addProjection(source);\n addProjection(destination);\n addTransformFunc(source, destination, transformFunc);\n }\n\n return transformFunc;\n}\n\n/**\n * @param {TransformFunction} t1 The first transform function.\n * @param {TransformFunction} t2 The second transform function.\n * @return {TransformFunction} The composed transform function.\n */\nfunction composeTransformFuncs(t1, t2) {\n return function (input, output, dimensions, stride) {\n output = t1(input, output, dimensions, stride);\n return t2(output, output, dimensions, stride);\n };\n}\n\n/**\n * Given the projection-like objects, searches for a transformation\n * function to convert a coordinates array from the source projection to the\n * destination projection.\n *\n * @param {ProjectionLike} source Source.\n * @param {ProjectionLike} destination Destination.\n * @return {TransformFunction} Transform function.\n * @api\n */\nexport function getTransform(source, destination) {\n const sourceProjection = get(source);\n const destinationProjection = get(destination);\n return getTransformFromProjections(sourceProjection, destinationProjection);\n}\n\n/**\n * Transforms a coordinate from source projection to destination projection.\n * This returns a new coordinate (and does not modify the original). If there\n * is no available transform between the two projection, the function will throw\n * an error.\n *\n * See {@link module:ol/proj.transformExtent} for extent transformation.\n * See the transform method of {@link module:ol/geom/Geometry~Geometry} and its\n * subclasses for geometry transforms.\n *\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {ProjectionLike} source Source projection-like.\n * @param {ProjectionLike} destination Destination projection-like.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n * @api\n */\nexport function transform(coordinate, source, destination) {\n const transformFunc = getTransform(source, destination);\n if (!transformFunc) {\n const sourceCode = get(source).getCode();\n const destinationCode = get(destination).getCode();\n throw new Error(\n `No transform available between ${sourceCode} and ${destinationCode}`,\n );\n }\n return transformFunc(coordinate, undefined, coordinate.length);\n}\n\n/**\n * Transforms an extent from source projection to destination projection. This\n * returns a new extent (and does not modify the original).\n *\n * @param {import(\"./extent.js\").Extent} extent The extent to transform.\n * @param {ProjectionLike} source Source projection-like.\n * @param {ProjectionLike} destination Destination projection-like.\n * @param {number} [stops] Number of stops per side used for the transform.\n * By default only the corners are used.\n * @return {import(\"./extent.js\").Extent} The transformed extent.\n * @api\n */\nexport function transformExtent(extent, source, destination, stops) {\n const transformFunc = getTransform(source, destination);\n return applyTransform(extent, transformFunc, undefined, stops);\n}\n\n/**\n * Transforms the given point to the destination projection.\n *\n * @param {import(\"./coordinate.js\").Coordinate} point Point.\n * @param {Projection} sourceProjection Source projection.\n * @param {Projection} destinationProjection Destination projection.\n * @return {import(\"./coordinate.js\").Coordinate} Point.\n */\nexport function transformWithProjections(\n point,\n sourceProjection,\n destinationProjection,\n) {\n const transformFunc = getTransformFromProjections(\n sourceProjection,\n destinationProjection,\n );\n return transformFunc(point);\n}\n\n/**\n * @type {Projection|null}\n */\nlet userProjection = null;\n\n/**\n * Set the projection for coordinates supplied from and returned by API methods.\n * This includes all API methods except for those interacting with tile grids,\n * plus {@link import(\"./Map.js\").FrameState} and {@link import(\"./View.js\").State}.\n * @param {ProjectionLike} projection The user projection.\n * @api\n */\nexport function setUserProjection(projection) {\n userProjection = get(projection);\n}\n\n/**\n * Clear the user projection if set.\n * @api\n */\nexport function clearUserProjection() {\n userProjection = null;\n}\n\n/**\n * Get the projection for coordinates supplied from and returned by API methods.\n * @return {Projection|null} The user projection (or null if not set).\n * @api\n */\nexport function getUserProjection() {\n return userProjection;\n}\n\n/**\n * Use geographic coordinates (WGS-84 datum) in API methods.\n * This includes all API methods except for those interacting with tile grids,\n * plus {@link import(\"./Map.js\").FrameState} and {@link import(\"./View.js\").State}.\n * @api\n */\nexport function useGeographic() {\n setUserProjection('EPSG:4326');\n}\n\n/**\n * Return a coordinate transformed into the user projection. If no user projection\n * is set, the original coordinate is returned.\n * @param {Array<number>} coordinate Input coordinate.\n * @param {ProjectionLike} sourceProjection The input coordinate projection.\n * @return {Array<number>} The input coordinate in the user projection.\n */\nexport function toUserCoordinate(coordinate, sourceProjection) {\n if (!userProjection) {\n return coordinate;\n }\n return transform(coordinate, sourceProjection, userProjection);\n}\n\n/**\n * Return a coordinate transformed from the user projection. If no user projection\n * is set, the original coordinate is returned.\n * @param {Array<number>} coordinate Input coordinate.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {Array<number>} The input coordinate transformed.\n */\nexport function fromUserCoordinate(coordinate, destProjection) {\n if (!userProjection) {\n if (\n showCoordinateWarning &&\n !equals(coordinate, [0, 0]) &&\n coordinate[0] >= -180 &&\n coordinate[0] <= 180 &&\n coordinate[1] >= -90 &&\n coordinate[1] <= 90\n ) {\n showCoordinateWarning = false;\n warn(\n 'Call useGeographic() from ol/proj once to work with [longitude, latitude] coordinates.',\n );\n }\n return coordinate;\n }\n return transform(coordinate, userProjection, destProjection);\n}\n\n/**\n * Return an extent transformed into the user projection. If no user projection\n * is set, the original extent is returned.\n * @param {import(\"./extent.js\").Extent} extent Input extent.\n * @param {ProjectionLike} sourceProjection The input extent projection.\n * @return {import(\"./extent.js\").Extent} The input extent in the user projection.\n */\nexport function toUserExtent(extent, sourceProjection) {\n if (!userProjection) {\n return extent;\n }\n return transformExtent(extent, sourceProjection, userProjection);\n}\n\n/**\n * Return an extent transformed from the user projection. If no user projection\n * is set, the original extent is returned.\n * @param {import(\"./extent.js\").Extent} extent Input extent.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {import(\"./extent.js\").Extent} The input extent transformed.\n */\nexport function fromUserExtent(extent, destProjection) {\n if (!userProjection) {\n return extent;\n }\n return transformExtent(extent, userProjection, destProjection);\n}\n\n/**\n * Return the resolution in user projection units per pixel. If no user projection\n * is set, or source or user projection are missing units, the original resolution\n * is returned.\n * @param {number} resolution Resolution in input projection units per pixel.\n * @param {ProjectionLike} sourceProjection The input projection.\n * @return {number} Resolution in user projection units per pixel.\n */\nexport function toUserResolution(resolution, sourceProjection) {\n if (!userProjection) {\n return resolution;\n }\n const sourceMetersPerUnit = get(sourceProjection).getMetersPerUnit();\n const userMetersPerUnit = userProjection.getMetersPerUnit();\n return sourceMetersPerUnit && userMetersPerUnit\n ? (resolution * sourceMetersPerUnit) / userMetersPerUnit\n : resolution;\n}\n\n/**\n * Return the resolution in user projection units per pixel. If no user projection\n * is set, or source or user projection are missing units, the original resolution\n * is returned.\n * @param {number} resolution Resolution in user projection units per pixel.\n * @param {ProjectionLike} destProjection The destination projection.\n * @return {number} Resolution in destination projection units per pixel.\n */\nexport function fromUserResolution(resolution, destProjection) {\n if (!userProjection) {\n return resolution;\n }\n const destMetersPerUnit = get(destProjection).getMetersPerUnit();\n const userMetersPerUnit = userProjection.getMetersPerUnit();\n return destMetersPerUnit && userMetersPerUnit\n ? (resolution * userMetersPerUnit) / destMetersPerUnit\n : resolution;\n}\n\n/**\n * Creates a safe coordinate transform function from a coordinate transform function.\n * \"Safe\" means that it can handle wrapping of x-coordinates for global projections,\n * and that coordinates exceeding the source projection validity extent's range will be\n * clamped to the validity range.\n * @param {Projection} sourceProj Source projection.\n * @param {Projection} destProj Destination projection.\n * @param {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} transform Transform function (source to destination).\n * @return {function(import(\"./coordinate.js\").Coordinate): import(\"./coordinate.js\").Coordinate} Safe transform function (source to destination).\n */\nexport function createSafeCoordinateTransform(sourceProj, destProj, transform) {\n return function (coord) {\n let transformed, worldsAway;\n if (sourceProj.canWrapX()) {\n const sourceExtent = sourceProj.getExtent();\n const sourceExtentWidth = getWidth(sourceExtent);\n coord = coord.slice(0);\n worldsAway = getWorldsAway(coord, sourceProj, sourceExtentWidth);\n if (worldsAway) {\n // Move x to the real world\n coord[0] = coord[0] - worldsAway * sourceExtentWidth;\n }\n coord[0] = clamp(coord[0], sourceExtent[0], sourceExtent[2]);\n coord[1] = clamp(coord[1], sourceExtent[1], sourceExtent[3]);\n transformed = transform(coord);\n } else {\n transformed = transform(coord);\n }\n if (worldsAway && destProj.canWrapX()) {\n // Move transformed coordinate back to the offset world\n transformed[0] += worldsAway * getWidth(destProj.getExtent());\n }\n return transformed;\n };\n}\n\n/**\n * Add transforms to and from EPSG:4326 and EPSG:3857. This function is called\n * by when this module is executed and should only need to be called again after\n * `clearAllProjections()` is called (e.g. in tests).\n */\nexport function addCommon() {\n // Add transformations that don't alter coordinates to convert within set of\n // projections with equal meaning.\n addEquivalentProjections(EPSG3857_PROJECTIONS);\n addEquivalentProjections(EPSG4326_PROJECTIONS);\n // Add transformations to convert EPSG:4326 like coordinates to EPSG:3857 like\n // coordinates and back.\n addEquivalentTransforms(\n EPSG4326_PROJECTIONS,\n EPSG3857_PROJECTIONS,\n fromEPSG4326,\n toEPSG4326,\n );\n}\n\naddCommon();\n", "import { fromLonLat, toLonLat, transformExtent } from \"ol/proj\";\n\nimport callBike from \"../logos/callabike_logo.png\";\nimport flinkster from \"../logos/flinkster_logo.png\";\nimport grueneFlotteLogo from \"../logos/gruene_flotte_logo.png\";\nimport lastenVeloLogo from \"../logos/lasten_velo_freiburg.png\";\nimport freloLogo from \"../logos/logo_frelo_web_rgb.png\";\nimport naturEnergieLogo from \"../logos/natur_energie_logo.png\";\nimport yoioLogo from \"../logos/yoio_logo.png\";\nimport zeusLogo from \"../logos/zeus_logo.png\";\n\nimport type { FeatureCollection } from \"geojson\";\n\nexport const LAYER_NAME_REALTIME = \"echtzeit\";\nexport const LAYER_NAME_STATIONS = \"haltestellen\";\nexport const LAYER_NAME_NOTIFICATIONS = \"meldungen\";\nexport const LAYER_NAME_LINESNETWORKPLAN = \"liniennetz\";\nexport const LAYER_NAME_MAPSET = \"mapset\";\n\nexport const RVF_EXTENT_4326 = [7.5, 47.7, 8.45, 48.4];\nexport const MAX_EXTENT_4326 = RVF_EXTENT_4326;\n\nexport const MAX_EXTENT = transformExtent(\n MAX_EXTENT_4326,\n \"EPSG:4326\",\n \"EPSG:3857\",\n);\n\nexport const RVF_EXTENT_3857 = MAX_EXTENT;\n\n// @ts-expect-error - testsdsd sd\nwindow.fromLonLat = fromLonLat;\n// @ts-expect-error - testsdsd sd\nwindow.toLonLat = toLonLat;\nexport const LAYER_PROP_IS_EXPORTING = \"isExporting\";\n\nexport const LAYERS_NAMES = {\n bikeFrelo: \"fahrradfrelo\",\n bikeOthers: \"fahrradandere\",\n cargobikeFrelo: \"cargobikefrelo\",\n cargobikeOthers: \"cargobikeandere\",\n carGrf: \"grueneflotte\",\n carNatur: \"naturenergie\",\n carOthers: \"autoandere\",\n eroller: \"e-roller\",\n linesnetworkplan: LAYER_NAME_LINESNETWORKPLAN,\n mapset: LAYER_NAME_MAPSET,\n mitfahrpunkte: \"mitfahrpunkte\",\n notifications: LAYER_NAME_NOTIFICATIONS,\n pois: \"pois\",\n realtime: LAYER_NAME_REALTIME,\n sharedMobility: \"sharedmobility\",\n stations: LAYER_NAME_STATIONS,\n tarifzonen: \"tarifzonen\",\n verkaufsstellen: \"verkaufsstellen\",\n};\n\nexport const DEFAULT_VISIBLE_LAYERS = Object.values(LAYERS_NAMES);\n\nexport const DEFAULT_QUERYABLE_LAYERS = Object.values(LAYERS_NAMES).filter(\n (name) => {\n return ![\n LAYERS_NAMES.mapset,\n LAYERS_NAMES.mitfahrpunkte,\n LAYERS_NAMES.pois,\n LAYERS_NAMES.stations,\n LAYERS_NAMES.tarifzonen,\n ].includes(name);\n },\n);\n\n// Order of the first level\nexport const LAYER_TREE_ORDER = [\n LAYER_NAME_NOTIFICATIONS,\n LAYER_NAME_MAPSET,\n LAYER_NAME_REALTIME,\n LAYER_NAME_STATIONS,\n LAYER_NAME_LINESNETWORKPLAN,\n LAYERS_NAMES.tarifzonen,\n LAYERS_NAMES.verkaufsstellen,\n LAYERS_NAMES.pois,\n LAYERS_NAMES.sharedMobility,\n];\n\nexport const LAYERS_WITH_LINK = Object.values(LAYERS_NAMES).filter((name) => {\n return (\n name !== LAYERS_NAMES.tarifzonen &&\n name !== LAYERS_NAMES.pois &&\n name !== LAYERS_NAMES.realtime\n );\n});\n\nexport const WFS_CARGO_BIKE_TYPE = \"sharing_stations_cargo_bicycle\";\nexport const WFS_CAR_TYPE = \"sharing_stations_car\";\nexport const WFS_BIKE_TYPE = \"sharing_stations_bicycle\";\nexport const WFS_STATIONS_TYPE = \"sharing_stations\";\n\nexport const WFS_FREE_FLOAT_TYPE = \"sharing_vehicles\";\n\nexport const SOURCE_SHARING_STATIONS = \"sharing_stations\";\n\nexport const SOURCE_FREE_FLOAT_BIKE = \"sharing_freefloat_bicycle\";\nexport const SOURCE_FREE_FLOAT_CARGO_BIKE = \"sharing_freefloat_cargo_bicycle\";\nexport const SOURCE_FREE_FLOAT_CAR = \"sharing_freefloat_car\";\nexport const SOURCE_FREE_FLOAT_SCOOTER = \"sharing_freefloat_scooter\";\nexport const SOURCE_SELECT = \"sharing_select\";\n\nexport const EMPTY_FEATURE_COLLECTION: FeatureCollection = {\n features: [],\n type: \"FeatureCollection\",\n};\n\nexport const API_REQUEST_FEATURE_TYPE = {\n freeFloat: {\n bike: \"sharing_vehicles\",\n car: \"sharing_vehicles\",\n cargoBike: \"sharing_vehicles\",\n scooter: \"sharing_vehicles\",\n },\n stations: {\n bike: \"sharing_stations\",\n car: \"sharing_stations\",\n cargoBike: \"sharing_stations\",\n scooter: \"sharing_stations\",\n },\n};\n\n// export const TITLE_BY_FEED_ID = {\n// callabike_ice: LAYERS_TITLES.fahrrad,\n// flinkster_carsharing: LAYERS_TITLES.auto,\n// \"gruene-flotte_freiburg\": LAYERS_TITLES.auto,\n// lastenvelo_fr: LAYERS_TITLES.cargobike,\n// naturenergie_sharing: LAYERS_TITLES.auto,\n// nextbike_df: LAYERS_TITLES.fahrrad,\n// yoio_freiburg: LAYERS_TITLES.eroller,\n// zeus_freiburg: LAYERS_TITLES.eroller,\n// };\n\n// export const TITLE_BY_CATEGORY = {\n// \"Bike Sharing\": LAYERS_TITLES.fahrrad,\n// \"Cargo Bike Sharing\": LAYERS_TITLES.cargobike,\n// \"Car Sharing\": LAYERS_TITLES.auto,\n// \"E-Scooter\": LAYERS_TITLES.eroller,\n// };\n\nexport const PROVIDER_BY_FEED_ID = {\n callabike_ice: \"Call a Bike\",\n flinkster_carsharing: \"Flinkster\",\n \"gruene-flotte_freiburg\": \"Die Gr\u00FCne\\nFlotte\",\n lastenvelo_fr: \"LastenVelo\",\n naturenergie_sharing: \"naturenergie\\nsharing\",\n nextbike_df: \"Frelo\",\n yoio_freiburg: \"Yoio\",\n zeus_freiburg: \"ZEUS\",\n // \"nextbike\",\n // \"EinfachMobil\",\n // \"Donkey Republic\"\n // \"PubliBike\",\n // \"Voi\",\n // \"Velospot\",\n // \"carvelo\",\n // \"CarSharing\"\n};\n\nexport const BIKE_FORM_FACTOR = \"bicycle\";\nexport const CAR_FORM_FACTOR = \"car\";\nexport const CARGOBIKE_FORM_FACTOR = \"cargo_bicycle\";\nexport const SCOOTER_FORM_FACTOR = \"scooter\";\n\n// Station system ids\n// \"pickebike_basel\",\n// \"dott_basel\",\n// \"gruene-flotte_freiburg\",\n// \"voi_ch\",\n// \"nextbike_df\",\n// \"carvelo2go_ch\",\n// \"naturenergie_sharing\",\n// \"lastenvelo_fr\",\n// \"donkey_neuchatel\",\n// \"flinkster_carsharing\"\nexport const GRUNFLOTTE_FEED_ID = \"gruene-flotte_freiburg\";\nexport const NATURENERGIE_FEED_ID = \"naturenergie_sharing\";\nexport const CAR_OTHERS_FEED_IDS = [\"flinkster_carsharing\"];\n\nexport const FRELO_FEED_ID = \"nextbike_df\";\nexport const BIKE_OTHERS_FEED_IDS = [\n \"callabike_ice\", // don't exist in graphql\n \"pickebike_basel\",\n \"donkey_neuchatel\",\n];\n\nexport const CARGOBIKE_FRELO_ID = \"nextbike_df\";\nexport const CARGOBIKE_OTHERS_FEED_IDS = [\"lastenvelo_fr\", \"carvelo2go_ch\"];\n\nexport const SCOOTER_OTHERS_FEED_IDS = [\"voi_ch\"];\n\nexport const PROVIDER_LOGOS_BY_FEED_ID = {\n callabike_ice: callBike,\n flinkster_carsharing: flinkster,\n \"gruene-flotte_freiburg\": grueneFlotteLogo,\n lastenvelo_fr: lastenVeloLogo,\n naturenergie_sharing: naturEnergieLogo,\n nextbike_df: freloLogo,\n yoio_freiburg: yoioLogo,\n zeus_freiburg: zeusLogo,\n};\n\nexport const LINE_COLOR_BY_NAME = {\n \"1\": \"#E8001B\",\n \"2\": \"#13A538\",\n \"3\": \"#F59E00\",\n \"4\": \"#EA5297\",\n \"5\": \"#008BC5\",\n};\n\nexport const EXPORT_PREFIX = \"rvf\";\n\n// Lines network plans\n\n// The property used as identifier for a line, this id is used as key in the geops.lnp.lines metadata of the network plan source.\n// See https://maps.test.geops.io/data/network_plans_trenord.json style for an example.\nexport const LNP_LINE_ID_PROP = \"original_line_id\";\n\n// LNP data source id in the style\nexport const LNP_SOURCE_ID = \"network_plans\";\n\n// LNP metadata key in the lnp data source\nexport const LNP_MD_LINES = \"geops.lnp.lines\";\nexport const LNP_MD_STOPS = \"geops.lnp.stops\";\n\n// LNP style metadata filter to use to show/hide highlight\nexport const LNP_GEOPS_FILTER_HIGHLIGHT = \"highlightnetzplan\";\n\n// LNP style layer id where the dynamic filtering will apply\nexport const LNP_LAYER_ID_HIGHLIGHT = \"netzplan_highlight_trip\";\n\n// Layer props used by layer and/or layerConfig\nexport const LAYER_TREE_HIDE_PROP = \"layerTreeHidden\";\nexport const LAYER_TREE_TITLE_FUNC_PROP = \"layerTreeTitleRenderFunc\";\n\n/** FIT ON FEATURES */\nexport const FIT_ON_FEATURES_MAX_ZOOM_POINT = 16;\n", "//type: \"checkbox\" | \"date\" | \"select\" | \"textfield\";\nimport {\n DEFAULT_QUERYABLE_LAYERS,\n LAYERS_NAMES,\n LAYERS_WITH_LINK,\n MAX_EXTENT,\n} from \"../utils/constants\";\n\n// import type { LayersConfig } from \"../utils/hooks/useLayerConfig\";\n\nconst geopsApiLink = `<a href=\"https://developer.geops.io/\">geOps API key</a>`;\nconst geopsMapsApiLink = `<a href=\"https://developer.geops.io/apis/maps\">geOps Maps API</a>`;\nconst geopsStopsApiLink = `<a href=\"https://developer.geops.io/apis/stops\">geOps Stops API</a>`;\nconst geopsMocoApiLink = `<a href=\"https://geops.com/en/solution/disruption-information\">geOps MOCO API</a>`;\nconst geopsMapsetApiLink = `<a href=\"https://geops.com/en/solution/mapset\">geOps Mapset API</a>`;\nconst geopsRealtimeApiLink = `<a href=\"https://developer.geops.io/apis/realtime\">geOps Realtime API</a>`;\n\nexport interface WebComponentAttributeDoc {\n defaultValue?: string;\n description: string;\n public?: boolean;\n type?: \"boolean\" | undefined;\n}\n\nexport type MobilityMapAttributeName =\n | \"apikey\"\n | \"baselayer\"\n | \"center\"\n | \"details\"\n | \"embed\"\n | \"extent\"\n | \"geolocation\"\n | \"lang\"\n | \"layers\"\n | \"layersconfig\"\n | \"layertree\"\n | \"lineid\"\n | \"lnp\"\n | \"mainlink\"\n | \"mainlinktitle\"\n | \"mapset\"\n | \"mapsetplanid\"\n | \"mapsettags\"\n | \"mapsettenants\"\n | \"mapsettimestamp\"\n | \"mapseturl\"\n | \"mapsurl\"\n | \"maxextent\"\n | \"maxzoom\"\n | \"minzoom\"\n | \"mots\"\n | \"notification\"\n | \"notificationat\"\n | \"notificationid\"\n | \"notificationlang\"\n | \"notificationtenant\"\n | \"notificationurl\"\n | \"permalink\"\n | \"permalinktemplate\"\n | \"print\"\n | \"queryablelayers\"\n | \"realtime\"\n | \"realtimebboxparameters\"\n | \"realtimeresturl\"\n | \"realtimetenant\"\n | \"realtimeurl\"\n | \"runs\"\n | \"search\"\n | \"share\"\n | \"stationid\"\n | \"stopsurl\"\n | \"tenant\"\n | \"toolbar\"\n | \"trainid\"\n | \"zoom\";\n\nexport type MobilityMapAttributes = Record<\n MobilityMapAttributeName,\n WebComponentAttributeDoc\n>;\n\nconst attrs: MobilityMapAttributes = {\n apikey: {\n defaultValue: \"5cc87b12d7c5370001c1d655cb6b0a94dc1a4b859313dc211675efd6\",\n description: `Your ${geopsApiLink}`,\n public: false,\n },\n baselayer: {\n defaultValue: \"de.rvf_moco\",\n description: `The style's name from the ${geopsMapsApiLink}. <br/>Ex: base_dark_v2, base_bright_v2, ...`,\n public: false,\n },\n center: {\n description:\n \"The center of the map in EPSG:3857 coordinates.<br/>Parameter required if extent is not set.\",\n public: true,\n },\n details: {\n defaultValue: \"true\",\n description:\n \"When a feature of a queryable layer is clicked, it displays informations about it.\",\n public: true,\n type: \"boolean\",\n },\n embed: {\n defaultValue: \"false\",\n description:\n \"Toggle the embedded navigation mode.<br/>In this mode zooming with mouse wheel is deactivated and, on touch device, you can only navigate with two finger, a warning message is displayed to warn the user.\",\n public: true,\n type: \"boolean\",\n },\n extent: {\n defaultValue: MAX_EXTENT.join(\",\"),\n description:\n \"The map's extent in EPSG:3857 coordinates.<br/>Ex: 831634,5933959,940649,6173660 .<br/>Parameter required if center and zoom are not set.\",\n public: true,\n },\n geolocation: {\n defaultValue: \"true\",\n description: \"Toggle the display of the geolocation button or not.\",\n public: true,\n type: \"boolean\",\n },\n lang: {\n defaultValue: \"de\",\n description:\n \"The language to use for the map. Supported languages are : de, en, fr, it.\",\n public: true,\n },\n layers: {\n defaultValue: null,\n description: `A comma separated list of layers's name to make visible on load, others are hidden. If empty, all layers will be hidden except the baselayer.<br/>Layers available are ${Object.values(LAYERS_NAMES).join(\", \")}.`,\n public: true,\n },\n layersconfig: {\n description: `A JSON string to configure the layers and other components associated to it.<br/>\n The layers available are : ${LAYERS_WITH_LINK.toString()}.<br/>\n Definition for a layer :\n<pre style=\"font-size: 12px; overflow: auto;\">{\n \"liniennetz\": {\n \"link\": {\n \"href\": \"https://www.rvf.de/fahrtinfo/netzplan\",\n \"show\": true,\n \"text\": \"Zu den Liniennetzpl\u00E4nen\"\n },\n \"title\": \"Liniennetzpl\u00E4ne\"\n }\n \"sharedmobility\": {\n \"minZoom\": 14\n }\n</pre>}\n<br/>\nwhere:\n<ul style=\"list-style-type: disc; padding-left: 20px;\">\n <li><i>link</i> defined a external link displayed at the bottom of the detail view</li>\n <ul style=\"list-style-type: disc; padding-left: 40px;\">\n <li><i>href</i> is the target of the link. The <i>href</i> can be template, for example for the meldungen layer you can use {{id}} to insert the id of the notification in the url.</li>\n <li><i>text</i> is the text display as a link</li>\n <li><i>show</i> show/hide the link in the details view</li>\n </ul>\n <li><i>featurelink</i> defined a external link used when you click on single feature in detail view</li>\n <ul style=\"list-style-type: disc; padding-left: 40px;\">\n <li><i>href</i> is the target of the link. The <i>href</i> can be template, for example for the meldungen layer you can use {{id}} to insert the id of the notification in the url.</li>\n </ul>\n <li><i>title</i> is the title of the layer used in the details view header and in the layer tree, if not defined the layer name will be used.</li>\n <li><i>minZoom</i> is the minimal zoom level at which the layer is visible (only <i>${LAYERS_NAMES.sharedMobility}</i> layer).</li>\n </ul>`,\n public: true,\n },\n layertree: {\n defaultValue: \"true\",\n description: \"Show/hide the layers tree button in the toolbar.\",\n public: true,\n type: \"boolean\",\n },\n lineid: {\n description: `An id or a short/long name of a line to highlight. <br/>Ex: S1`,\n public: false,\n },\n lnp: {\n defaultValue: \"true\",\n description: `Add the linesnetworkplans layer to the map. This layer will display lines network plans on the map.`,\n public: false,\n type: \"boolean\",\n },\n mainlink: {\n description:\n \"A link displayed on bottom left of the map. The link can be a template, for example you can use {{x}} {{y}} {{z}} to insert the current position of the map in the url.<br/>Ex: http://mywebsite/mypage#map/{{x}}/{{y}}/{{z}}.\",\n public: true,\n },\n mainlinktitle: {\n description: \"A title for the mainlink, used as tooltip.\",\n public: true,\n },\n mapset: {\n defaultValue: \"false\",\n description: `Add the mapset layer to the map. This layer will display mapset plans on the map. By default, it will load only the standard plans valid at the current time.`,\n public: true,\n type: \"boolean\",\n },\n mapsetplanid: {\n description:\n \"An id of the mapset plan to display. Mostly for debugging purposes.\",\n public: false,\n },\n mapsettags: {\n description: `The ${geopsMapsetApiLink} tags to get the plans from.`,\n public: true,\n },\n mapsettenants: {\n defaultValue: \"rvf\",\n description: `The ${geopsMapsetApiLink} tenant to get the plans from.`,\n public: false,\n },\n mapsettimestamp: {\n description: `The ${geopsMapsetApiLink} timestamp used to load valid standard plan. If not defined it will use the current time.`,\n public: true,\n },\n mapseturl: {\n defaultValue: \"https://editor.mapset.io/api/v1/\",\n description: `The ${geopsMapsetApiLink} url to use.`,\n public: true,\n },\n mapsurl: {\n defaultValue: \"https://maps.geops.io\",\n description: `The ${geopsMapsApiLink} url to use.`,\n public: false,\n },\n maxextent: {\n defaultValue: MAX_EXTENT.join(\",\"),\n description:\n \"The maximum extent of the map in EPSG:3857 coordinates.<br/>Ex: 831634,5933959,940649,6173660 .\",\n public: true,\n },\n maxzoom: {\n defaultValue: \"20\",\n description: \"The maximal zoom level of the map.\",\n public: true,\n },\n minzoom: {\n description: \"The minimal zoom level of the map.\",\n public: true,\n },\n mots: {\n description:\n \"Commas separated list of mots to display on the Realtime layer.<br/>Ex: rail,bus,coach,foot,tram,subway,gondola,funicular,ferry,car .\",\n public: false,\n },\n notification: {\n defaultValue: \"true\",\n description: `Add the notification layer to the map. This layer will display informations about disruptions on the network. Data comes from\n our ${geopsMocoApiLink} .`,\n public: true,\n type: \"boolean\",\n },\n notificationat: {\n description:\n \"An ISO date string used to display active notification at this date in the notification layer. If not defined the current date will be used.<br/>Ex: 2025-08-01T00:00:00Z .\",\n public: false,\n },\n notificationid: {\n description: `An id of a notification to show details of.`,\n public: false,\n },\n notificationlang: {\n defaultValue: \"en,de,fr\",\n description:\n \"A comma separated list of languages supported by the notification, if a textual content is not available in the current lang it will try to display the content in one of these languages. Order is important. <br/>Supported languages are: en,de,fr,it\",\n public: true,\n },\n notificationtenant: {\n defaultValue: \"rvf\",\n description: `The ${geopsMocoApiLink} tenant to get the notification from.`,\n public: false,\n },\n notificationurl: {\n defaultValue: \"https://moco.geops.io/api/v2/\",\n description: `The ${geopsMocoApiLink} url to use.`,\n public: false,\n },\n permalink: {\n defaultValue: \"false\",\n description:\n \"if true, the current browser window url will be updated automatically with the parameters defined in the `permalinktemplate` attribute.\",\n public: true,\n type: \"boolean\",\n },\n permalinktemplate: {\n defaultValue: \"#map/{{x}}/{{y}}/{{z}}\",\n description: `A template string to read the current browser url. Hash (starting with #) and URL search parameters (starting with ?) are supported.<br/>\n The template supports {{x}}, {{y}}, {{z}} and {{layers}} variables.<br/>\n Ex: \"?x={{x}}&y={{y}}&z={{z}}\" or \"#map/{{x}}/{{y}}/{{z}}\" .`,\n public: true,\n },\n print: {\n defaultValue: \"true\",\n description: \"Show/hide the print button in the toolbar.\",\n public: true,\n type: \"boolean\",\n },\n queryablelayers: {\n defaultValue: DEFAULT_QUERYABLE_LAYERS.toString(),\n description: `A comma separated list of layers's name. The data of these layers will be queryable by click on the map (see selectedfeature event). If empty, all layers will not be queryable.<br/>\n Layers available are ${Object.values(LAYERS_NAMES).join(\", \")}`,\n public: true,\n },\n realtime: {\n defaultValue: \"true\",\n description: `Add the realtime layer to the map. Data comes from the ${geopsRealtimeApiLink} .`,\n public: false,\n type: \"boolean\",\n },\n realtimebboxparameters: {\n defaultValue: \"line_tags=RVF\",\n description:\n \"A space separated list of parameters to add to the realtime BBOX request to define custom behavior.<br/>Ex: graph=XXX line_tags=XXX.\",\n public: false,\n },\n realtimeresturl: {\n defaultValue: \"https://api.geops.io/tracker-http/v1/\",\n description: `The ${geopsRealtimeApiLink} REST API url to use for fetching infos about realtime data.`,\n public: false,\n },\n realtimetenant: {\n description: `The ${geopsRealtimeApiLink} tenant to get the realtime data from.`,\n public: false,\n },\n realtimeurl: {\n defaultValue: \"wss://api.geops.io/tracker-ws/v1/ws\",\n description: `The ${geopsRealtimeApiLink} url to use.`,\n public: false,\n },\n runs: {\n defaultValue: \"false\",\n description:\n \"Shows the number of trips on a line in the sidebar, use only for debugging.\",\n public: true,\n type: \"boolean\",\n },\n search: {\n defaultValue: \"false\",\n description: \"Toggle the search stops input.\",\n public: true,\n type: \"boolean\",\n },\n share: {\n defaultValue: \"true\",\n description: \"Show/hide the share button in the toolbar.\",\n public: true,\n type: \"boolean\",\n },\n stationid: {\n description: `An id or a short/long name of a station to show details of.`,\n public: false,\n },\n stopsurl: {\n defaultValue: \"https://api.geops.io/stops/v1/\",\n description: `The ${geopsStopsApiLink} to use.`,\n public: false,\n },\n tenant: {\n description: `The tenant to use by default for all geOps APIs (Stops, Realtime, MOCO ...). Can be override for each API by other XXXXtenant parameters.`,\n public: false,\n },\n toolbar: {\n defaultValue: \"true\",\n description: \"Show/hide the toolbar on the top left.\",\n public: true,\n type: \"boolean\",\n },\n trainid: {\n description: `An id of a route to highlight on the map and to show details of.`,\n public: false,\n },\n zoom: {\n description: \"The zoom level of the map.\",\n public: true,\n },\n};\n\nexport default attrs;\n", "export interface WebComponentEventDoc {\n description: string;\n public?: boolean;\n}\n\nexport type MobilityMapEventName =\n | \"mwc:attribute\"\n | \"mwc:messageready\"\n | \"mwc:permalink\"\n | \"mwc:selectedfeature\"\n | \"mwc:singleclick\"\n | \"mwc:stopssearchselect\";\n\nexport type MobilityMapEvents = Record<\n MobilityMapEventName,\n WebComponentEventDoc\n>;\n\nconst attrs: MobilityMapEvents = {\n \"mwc:attribute\": {\n description:\n \"Event fired when an web component's attribute is changed. The event data contains the list of all attributes and their values.\",\n public: false,\n },\n \"mwc:messageready\": {\n description:\n \"Only if the web-component is embedded in an iframe. Message event fired when the web component is ready to receive messages from parent window.\",\n\n public: false,\n },\n \"mwc:permalink\": {\n description:\n \"Event fired when the map's state changes. The event data contains the permalink URL search parameters as string.\",\n public: false,\n },\n \"mwc:selectedfeature\": {\n description:\n \"Event fired when a feature is selected on the map. The event data contains the selected feature in GeoJSON format.\",\n public: true,\n },\n \"mwc:singleclick\": {\n description:\n \"Event fired when the map is clicked. The event data contains the map coordinates in EPSG:3857 and the pixel coordinates.\",\n public: false,\n },\n \"mwc:stopssearchselect\": {\n description:\n \"Only when search attribute is 'true'. Event fired when a stop is selected in the stops search results. The event data contains the selected stop.\",\n public: false,\n },\n};\n\nexport default attrs;\n", "import type { WebComponentAttributeDoc } from \"../MobilityMap/MobilityMapAttributes\";\n\nconst geopsApiLink = `<a href=\"https://developer.geops.io/\">geOps API key</a>`;\nconst geopsMocoApiLink = `<a href=\"https://geops.com/en/solution/disruption-information\">geOps MOCO API</a>`;\n\nexport type MobilityNotificationsAttributeName =\n | \"apikey\"\n | \"lang\"\n | \"notificationat\"\n | \"notificationlang\"\n | \"notificationtenant\"\n | \"notificationurl\";\n\nexport type MobilityNotificationsAttributes = Record<\n MobilityNotificationsAttributeName,\n WebComponentAttributeDoc\n>;\n\nconst attrs: MobilityNotificationsAttributes = {\n apikey: {\n defaultValue: \"5cc87b12d7c5370001c1d655cb6b0a94dc1a4b859313dc211675efd6\",\n description: `Your ${geopsApiLink}`,\n public: false,\n },\n lang: {\n defaultValue: \"de\",\n description: \"The language to use for the notifications.\",\n public: true,\n },\n notificationat: {\n description:\n \"An ISO date string used to display active notification at this date in the notification layer. If not defined the current date will be used.<br/>Ex: 2025-08-01T00:00:00Z .\",\n public: false,\n },\n notificationlang: {\n defaultValue: \"en,de,fr\",\n description:\n \"A comma separated list of languages supported by the notification, if a textual content is not available in the current lang it will try to display the content in one of these languages. Order is important. <br/>Supported languages are: en,de,fr,it\",\n public: true,\n },\n notificationtenant: {\n defaultValue: \"rvf\",\n description: `The ${geopsMocoApiLink} tenant to get the notification from.`,\n public: false,\n },\n notificationurl: {\n defaultValue: \"https://moco.geops.io/api/v2/\",\n description: `The ${geopsMocoApiLink} url to use.`,\n public: false,\n },\n};\n\nexport default attrs;\n", "import type { WebComponentAttributeDoc } from \"../MobilityMap/MobilityMapAttributes\";\n\nconst geopsApiLink = `<a href=\"https://developer.geops.io/\">geOps API key</a>`;\nconst geopsStopsApiLink = `<a href=\"https://developer.geops.io/apis/stops\">geOps Stops API</a>`;\n\nexport type MobilitySearchAttributeName =\n | \"apikey\"\n | \"bbox\"\n | \"countrycode\"\n | \"event\"\n | \"field\"\n | \"lang\"\n | \"limit\"\n | \"mots\"\n | \"onselect\"\n | \"params\"\n | \"prefagencies\"\n | \"reflocation\"\n | \"url\";\n\nexport type MobilitySearchAttributes = Record<\n MobilitySearchAttributeName,\n WebComponentAttributeDoc\n>;\n\nconst attrs: MobilitySearchAttributes = {\n apikey: {\n description: `Your ${geopsApiLink}`,\n public: true,\n },\n bbox: {\n description: `The extent where to search the stops (minx,miny,maxx,maxy). See the ${geopsStopsApiLink} documentation.`,\n public: true,\n },\n countrycode: {\n description: \"The country code to filter the results (IT, DE, CH ...)\",\n public: true,\n },\n event: {\n defaultValue: \"mwc:stopssearchselect\",\n description: \"The event's name to listen to when a stop is selected.\",\n public: true,\n },\n field: {\n description: `Which field to look up, default all of them, Possible values:id, name, coords. See the ${geopsStopsApiLink} documentation.`,\n public: true,\n },\n lang: {\n defaultValue: \"en\",\n description:\n \"The language to use for the search input texts. Supported languages are : de, en, fr, it.\",\n public: true,\n },\n limit: {\n defaultValue: \"5\",\n description: `The number of suggestions to show. See the ${geopsStopsApiLink} documentation.`,\n public: true,\n },\n mots: {\n description: `Commas separated list of mots used to filter the results (rail, bus, coach, foot, tram, subway, gondola, funicular, ferry, car). See the ${geopsStopsApiLink} documentation.`,\n public: true,\n },\n onselect: {\n description: null, //`Function called when a stop is selected. The function receives the selected stop as parameter.`,\n public: false,\n },\n params: {\n description: `JSON string with additional parameters to pass to the request to the API. Ex: {\"{ 'key': 'value' }\"}. See the ${geopsStopsApiLink} documentation.`,\n public: true,\n },\n prefagencies: {\n description: `comma seperated list, order chooses which agency will be preferred as\n ident_source (for id and code fields). Possible values: sbb, db. See the ${geopsStopsApiLink} documentation.`,\n public: true,\n },\n reflocation: {\n description: `Coordinates in WGS84 (in lat,lon order) used to rank stops close to this position higher. See the ${geopsStopsApiLink} documentation.`,\n public: true,\n },\n url: {\n defaultValue: \"https://api.geops.io/stops/v1/\",\n description: `The URL to the ${geopsStopsApiLink}.`,\n public: true,\n },\n};\n\nexport default attrs;\n", "import MobilityMapEvents from \"../MobilityMap/MobilityMapEvents\";\n\nimport type { WebComponentEventDoc } from \"../MobilityMap/MobilityMapEvents\";\n\nexport type MobilitySearchEventName = \"mwc:attribute\" | \"mwc:stopssearchselect\";\n\nexport type MobilitySearchAttributes = Record<\n MobilitySearchEventName,\n WebComponentEventDoc\n>;\n\nconst attrs: MobilitySearchAttributes = {\n \"mwc:attribute\": MobilityMapEvents[\"mwc:attribute\"],\n \"mwc:stopssearchselect\": {\n description:\n \"Event fired when a stop is selected in the stops search results. The event data contains the selected stop.\",\n public: true,\n },\n};\n\nexport default attrs;\n", "// This file contains what we need to build the documentation in the index.html file\n\nimport MobilityMapAttributes from \"./MobilityMap/MobilityMapAttributes\";\nimport MobilityMapEvents from \"./MobilityMap/MobilityMapEvents\";\nimport MobilityNotificationsAttributes from \"./MobilityNotifications/MobilityNotificationsAttributes\";\nimport MobilitySearchAttributes from \"./MobilitySearch/MobilitySearchAttributes\";\nimport MobilitySearchEvents from \"./MobilitySearch/MobilitySearchEvents\";\n\ndeclare global {\n interface Window {\n MobilityMapAttributes?: typeof MobilityMapAttributes;\n MobilityMapEvents?: typeof MobilityMapEvents;\n MobilityNotificationsAttributes?: typeof MobilityNotificationsAttributes;\n MobilitySearchAttributes?: typeof MobilitySearchAttributes;\n MobilitySearchEvents?: typeof MobilitySearchEvents;\n }\n}\n\nif (typeof window !== \"undefined\") {\n window.MobilityMapAttributes = MobilityMapAttributes;\n window.MobilityMapEvents = MobilityMapEvents;\n\n window.MobilitySearchAttributes = MobilitySearchAttributes;\n window.MobilitySearchEvents = MobilitySearchEvents;\n\n window.MobilityNotificationsAttributes = MobilityNotificationsAttributes;\n}\n\nexport default {\n MobilityMapAttributes,\n MobilityMapEvents,\n MobilityNotificationsAttributes,\n MobilitySearchAttributes,\n MobilitySearchEvents,\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["RADIUS", "EXTENT", "METERS_PER_UNIT", "PROJECTIONS", "add", "get", "add", "get", "makeProjection", "projection", "add", "fromLonLat", "toLonLat", "get", "makeTransforms", "add", "PROJECTIONS", "fromLonLat", "toLonLat", "attrs", "geopsApiLink", "geopsMocoApiLink", "attrs", "geopsApiLink", "geopsStopsApiLink", "attrs", "attrs"]
7
+ }
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@geops/rvf-mobility-web-component",
3
3
  "license": "UNLICENSED",
4
4
  "description": "Web components for rvf in the domains of mobility and logistics.",
5
- "version": "0.1.126",
5
+ "version": "0.1.127-beta.1",
6
6
  "homepage": "https://rvf-mobility-web-component.vercel.app/",
7
7
  "type": "module",
8
8
  "main": "dist/index.js",
@@ -60,7 +60,7 @@
60
60
  "typescript-eslint": "^8.56.1"
61
61
  },
62
62
  "scripts": {
63
- "analyze": "yarn build && esbuild-analyzer . --port 8888",
63
+ "analyze": "esbuild-analyzer . --port 8888",
64
64
  "build": "rm -rf dist/* && yarn build:css && yarn build:js && rm -rf doc/public/*.js* && cp dist/* doc/public/",
65
65
  "build:css": "yarn tailwind:component && yarn tailwind:website",
66
66
  "build:js": "node scripts/build.mjs",