diff --git a/assets/index-246ee887.js b/assets/index-9f8cd97f.js similarity index 99% rename from assets/index-246ee887.js rename to assets/index-9f8cd97f.js index c5b05896..1f53d18a 100644 --- a/assets/index-246ee887.js +++ b/assets/index-9f8cd97f.js @@ -178,7 +178,7 @@ Try polyfilling it using "@formatjs/intl-pluralrules" Try polyfilling it using "@formatjs/intl-relativetimeformat" `,fc.MISSING_INTL_API));try{return TV(e,t,A).format(n,r)}catch(s){e.onError(new Al("Error formatting relative time.",e.locale,s))}return String(n)}var NV=["style","currency","unit","unitDisplay","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","minimumSignificantDigits","maximumSignificantDigits","compactDisplay","currencyDisplay","currencySign","notation","signDisplay","unit","unitDisplay","numberingSystem","trailingZeroDisplay","roundingPriority","roundingIncrement","roundingMode"];function v6(e,t,n){var r=e.locale,A=e.formats,a=e.onError;n===void 0&&(n={});var s=n.format,c=s&&FM(A,"number",s,a)||{},i=j0(n,NV,c);return t(r,i)}function YV(e,t,n,r){r===void 0&&(r={});try{return v6(e,t,r).format(n)}catch(A){e.onError(new Al("Error formatting number.",e.locale,A))}return String(n)}function kV(e,t,n,r){r===void 0&&(r={});try{return v6(e,t,r).formatToParts(n)}catch(A){e.onError(new Al("Error formatting number.",e.locale,A))}return[]}function zV(e){var t=e?e[Object.keys(e)[0]]:void 0;return typeof t=="string"}function RV(e){e.onWarn&&e.defaultRichTextElements&&zV(e.messages||{})&&e.onWarn(`[@formatjs/intl] "defaultRichTextElements" was specified but "message" was not pre-compiled. Please consider using "@formatjs/cli" to pre-compile your messages for performance. -For more details see https://formatjs.io/docs/getting-started/message-distribution`)}function UV(e,t){var n=mV(t),r=nn(nn({},B6),e),A=r.locale,a=r.defaultLocale,s=r.onError;return A?!Intl.NumberFormat.supportedLocalesOf(A).length&&s?s(new LI('Missing locale data for locale: "'.concat(A,'" in Intl.NumberFormat. Using default locale: "').concat(a,'" as fallback. See https://formatjs.io/docs/react-intl#runtime-requirements for more details'))):!Intl.DateTimeFormat.supportedLocalesOf(A).length&&s&&s(new LI('Missing locale data for locale: "'.concat(A,'" in Intl.DateTimeFormat. Using default locale: "').concat(a,'" as fallback. See https://formatjs.io/docs/react-intl#runtime-requirements for more details'))):(s&&s(new dV('"locale" was not configured, using "'.concat(a,'" as fallback. See https://formatjs.io/docs/react-intl/api#intlshape for more details'))),r.locale=r.defaultLocale||"en"),RV(r),nn(nn({},r),{formatters:n,formatNumber:YV.bind(null,r,n.getNumberFormat),formatNumberToParts:kV.bind(null,r,n.getNumberFormat),formatRelativeTime:PV.bind(null,r,n.getRelativeTimeFormat),formatDate:wV.bind(null,r,n.getDateTimeFormat),formatDateToParts:yV.bind(null,r,n.getDateTimeFormat),formatTime:EV.bind(null,r,n.getDateTimeFormat),formatDateTimeRange:vV.bind(null,r,n.getDateTimeFormat),formatTimeToParts:CV.bind(null,r,n.getDateTimeFormat),formatPlural:bV.bind(null,r,n.getPluralRules),formatMessage:Vy.bind(null,r,n),$t:Vy.bind(null,r,n),formatList:IV.bind(null,r,n.getListFormat),formatListToParts:E6.bind(null,r,n.getListFormat),formatDisplayName:QV.bind(null,r,n.getDisplayNames)})}function y6(e){qP(e,"[React Intl] Could not find required `intl` object. needs to exist in the component ancestry.")}var C6=nn(nn({},B6),{textComponent:Le.Fragment});function LV(e){return function(t){return e(Le.Children.toArray(t))}}function Zy(e,t){if(e===t)return!0;if(!e||!t)return!1;var n=Object.keys(e),r=Object.keys(t),A=n.length;if(r.length!==A)return!1;for(var a=0;afetch(JV).then(e=>e.json()).catch(()=>[]),KV=60*1e3,JI=e=>e/1e6,Wm={lat:48468052,lng:10735999},Km={lat:47776715,lng:12240695},VV=e=>e.filter(t=>t.latitude<=Wm.lat&&t.latitude>=Km.lat&&t.longitude>=Wm.lng&&t.longitude<=Km.lng);let S6=0;const ZV=e=>{const[t,n]=Le.useState(0),[r,A]=Le.useState(0);Le.useEffect(()=>{$y&&setInterval(()=>{n(t+1)},KV/3)},[]),Le.useEffect(()=>{const a=e.current;!e||!a||(a.clearLayers(),WV().then(s=>{const c=VV(s);A(c.length),c.forEach(i=>{Rn.marker({lat:JI(i.latitude),lng:JI(i.longitude)},{icon:RH}).addTo(a)})}),Rn.rectangle([[Wm.lat/1e6,Wm.lng/1e6],[Km.lat/1e6,Km.lng/1e6]],{fill:!1}).addTo(a))},[t]),S6=r};let Kv,WI=0;const $y=window.location.search.includes("&live");function eC({bigThumb:e,showPlayButton:t,showTimes:n}){const r=eA(sM),A=eA(cP),a=on(),s=Mn(),[c,i]=Le.useState(!1);return WI=r,Le.useEffect(()=>{Kv&&clearInterval(Kv),c&&(Kv=setInterval(()=>a(as.setCurrentTime((WI+500)%Eh)),100))},[c]),Le.useEffect(()=>{$y&&(a(as.setCurrentRealTime()),setInterval(()=>{a(as.setCurrentRealTime())},20*1e3))},[]),$y?U.jsxs("div",{children:[U.jsx("h6",{children:`Eingeschaltete Apps: ${S6}`}),U.jsx("div",{children:A?s.formatDate(A,AI):s.formatMessage({id:"msg.time"})})]}):U.jsxs("div",{className:"d-flex",children:[U.jsx("div",{className:"flex-fill",children:U.jsxs(Qn.Group,{className:"mx-3",children:[n&&U.jsx("div",{children:A?s.formatDate(A,AI):s.formatMessage({id:"msg.time"})}),U.jsx("div",{className:`d-flex${e?" my-2":""}`,children:U.jsx(Qn.Range,{min:0,max:Eh,value:r,onChange:u=>a(as.setCurrentTime(Number(u.target.value))),height:"100px",className:e?"bigThumb":void 0})})]})}),t&&U.jsx("div",{className:"mt-3",children:U.jsx(yn,{size:"sm",variant:c?"danger":"success",className:"m-1",onClick:()=>i(!c),title:s.formatMessage({id:c?"msg.play.stop":"msg.play.normal"}),children:c?U.jsx("img",{src:b6,className:"m-1",alt:"open file"}):U.jsx("img",{src:F6,className:"m-1",alt:"open file"})})})]})}function XV(){const e=eA(UT),t=eA($g),n=eA(iE),r=eA(oE),A=on(),a=Mn(),s={};return Object.entries(t).forEach(([c,i])=>{if(!i)return;const u=[...i];s[c]=u==null?void 0:u.sort((f,l)=>f.filename.localeCompare(l.filename,void 0,{numeric:!0})).map(f=>({value:f.id,label:f.filename}))}),U.jsx(Qn.Group,{children:U.jsxs(Qn,{className:"d-flex",children:[Object.keys(t).sort().map(c=>{var i;return U.jsxs("div",{className:"mx-3",style:{width:`${100/(Object.keys(t).length+2)}vw`},children:[U.jsx(Qn.Check,{type:"checkbox",id:c,className:"m-3",label:U.jsxs("span",{children:[U.jsx("span",{style:{background:zx(c),color:zx(c),width:"100px"},className:"mx-3",children:"________"}),c]}),title:c,checked:n.includes(c),readOnly:!0,onClick:()=>A(Lc.selectVersion(c))}),U.jsx(pE,{name:"version",value:(i=s[c])==null?void 0:i.find(u=>{var f;return(f=r[c])==null?void 0:f.includes(u.value)}),placeholder:a.formatMessage({id:"msg.onlyDisplaySingle"},{versionName:c}),options:s[c]??[],className:"basic-multi-select",isClearable:!0,classNamePrefix:"select",onChange:u=>{console.log(u),A(Lc.setDisplayTracks({version:c,selectedTracks:u?[u.value]:[]}))}}),U.jsx("a",{href:nG(c),target:"_blank",children:U.jsx(Jt,{id:"msg.downloadVersionGpx",values:{versionName:c}})})]},c)}),U.jsxs("div",{className:"mx-3",style:{width:`${100/(Object.keys(t).length+2)}vw`},children:[U.jsx(Qn.Check,{type:"checkbox",id:"marker",className:"m-3",label:"Marker",title:a.formatMessage({id:e?"msg.hideMarker":"msg.showMarker"}),checked:e,readOnly:!0,onClick:()=>A(as.setShowMapMarker(!e))}),U.jsx(eC,{showTimes:!0})]})]})})}const qV=()=>U.jsx("nav",{className:"navbar navbar-expand-lg navbar-light bg-light justify-content-between",style:{height:"15vh"},children:U.jsx("div",{children:U.jsx(XV,{})})}),$V=oM({zipTracks:ZG,map:$G}),eZ=()=>TT({reducer:$V}),tZ=eZ();let T6="de";const rp=()=>T6,AZ=e=>{T6=e},nZ=()=>window.navigator.language.includes("de")?"de":"en",rZ="Not Deutsch",iZ={test:rZ,"msg.loading":"Loading","msg.showMarker":"Show marker","msg.hideMarker":"Hide marker","msg.time":"Time","msg.onlyDisplaySingle":"Display only single route of {versionName}","msg.downloadVersionGpx":"Download GPX for {versionName}","msg.downloadPlanning":"Download current plan","msg.dashboard":"Dashboard","msg.settings":"Settings","msg.segments":"Segments","msg.segment":"Segment","msg.tracks":"Tracks","msg.calculateTracks":"Calculate tracks","msg.triggerAll":"Trigger all","msg.externalInfo":"External info","msg.streets":"Streets","msg.streetNames":"Street names","msg.aggregation":"Aggregation","msg.postCodes":"Post codes","msg.clearPostCodes":"Clear all post codes","msg.documents":"Documents","msg.gps":"Planner","msg.appName":"Rally GPX Merger","msg.removeAllData":"Remove all data","msg.removeAllData.modalBody":"Do you really want to remove all data?","msg.removeAllData.modalTitle":"Removing all data","msg.removeAllData.hint":"Delete all GPX segments, track compositions and tracks","msg.confirm":"Confirm","msg.close":"Close","msg.importExport":"Import/Export","msg.help.hint":"A short explanation how to use this tool","msg.help":"Help","msg.filterSegments":"Filter segments, separate term by ','","msg.uploadGpx.title":"Upload Segments (GPX)","msg.createGpx.part1":"You can create GPX segments with ","msg.createGpx.part2":" or ","msg.file":"File","msg.actions":"Actions","msg.noFile":"No file uploaded","msg.uploadFile":"Please upload the GPX segments here","msg.downloadFile":"Download file","msg.downloadFile.hint":'Download file "{name}"',"msg.removeFile":"Remove file","msg.removeFile.hint":'Remove file "{name}" and all references',"msg.replaceFile":"Replace segment with other file(s)","msg.replaceFile.hint":'Change file for the segment "{name}"',"msg.removeSegment.modalTitle":"Removing Gpx Segment","msg.removeSegment.modalBody":'Do you really want to remove the file "{name}" and all its references?',"msg.replaceSegment.modalTitle":"Replace GPX Segment","msg.replaceSegment.modalBody":"Upload one or more new files","msg.tracks.title":"Create Tracks from GPX Segments","msg.mergeTracks":"Merge tracks","msg.mergeTracks.hint":"Merge GPX segments to tracks and adjust the times","msg.downloadTracks":"GPX Files","msg.downloadTracks.hint":"Download all GPX files for the tracks","msg.downloadSegments":"GPX Segment Files","msg.downloadSegments.hint":"Download all GPX files of segments","msg.calculationSettings.title":"Calculation settings","msg.trackName":"Track name","msg.people":"People","msg.trackSegments":"Track segments","msg.trackPeople":"People on Track","msg.selectTrackSegment":"Select next segment to add","msg.filterTracks":"Filter tracks, separate term by ','","msg.removeTrackSegment":'Remove segment "{segmentName}" from track',"msg.removeTrack":"Remove track","msg.removeTrack.hint":"`Remove track {name}","msg.pasteSegments":"Paste segmentIds from clipboard","msg.copySegments":"Copy segmentIds to clipboard","msg.customSpeed.title":"Custom speed on segments","msg.importFile":"Import JSON file","msg.importFile.hint":"All current data is lost when importing another file","msg.completeStatus":"Complete plan status","msg.downloadCsv":"Download all information for the tracks as a csv","msg.downloadPdf":"Download all information for the tracks as a PDFs","msg.downloads":"Downloads","msg.imports":"Imports","msg.marker":"Marker","msg.play.normal":"Play the rally simulation","msg.play.fast":"Play the rally simulation fast","msg.play.stop":"Stop the rally simulation","msg.constructions.title":"Construction sites to display","msg.uploadConstructionFile":"Please upload the GPX files for constructions here","msg.removeConstruction.modalTitle":"Removing construction file","msg.removeConstruction.modalBody":'Do you really want to remove the construction file "{name}"?',"msg.constructions":"Constructions","msg.globalSpeed":"Global speed in km/h","msg.customSpeed":"Custom speed in km/h","msg.customSpeed.placeholder":"Custom speed","msg.rallyParameters.title":"Rally parameters","msg.arrivalDate.title":"Arrival of tracks","msg.arrivalDate.hint":"Time when the first people should arrive at the end of the track:","msg.label.title":"Label of current plan","msg.label.hint":"This can be a version string that appears in the file names and the documents","msg.aLot":"A lot","msg.none":"None","msg.participantsDelay.title":"Expansion of participants","msg.participantsDelay":"Delay of one participant: ","msg.participantsLength":"Length of 100 people (based on {speed} km/h): ","msg.averageSpeed.title":"Average speed of the rally","msg.averageSpeed":"Average speed","msg.externalDataOverview":"Overview of calculated Data","msg.property":"Property","msg.value":"Value","msg.uniquePositions":"Unique Positions","msg.uniquePositions.unresolved":"Unique unresolved Positions","msg.requiredRequests.postCodes":"required Post code requests","msg.requiredRequests.streets":"required Street requests","msg.iAgree.part1":"with clicking, I agree to send data to","msg.iAgree.part2":"and","msg.iAgree.part3":" ","msg.ownApiKey":"Use own API keys","msg.trackStreetInfo":"Track Street Info","msg.allEntries":"Show all entries","msg.onlyUnknown":'Only show "Unknown"',"msg.unknown":"Unknown","msg.blockedStreets":"Blocked Streets","msg.postCode":"Post code","msg.district":"District","msg.street":"Street","msg.length":"Length","msg.duration":"Duration","msg.durationInMin":"Duration in min","msg.duration.hint":"Time required for a cyclist to pass this street","msg.arrivalOfFront":"Arrival of front","msg.arrivalOfBack":"Arrival of back","msg.passageOfFront":"Passage of front","msg.passageOfBack":"Passage of back","msg.noTrackSelected":"No track selected","msg.blockage":"Blockage","msg.blockage.hint":"Time between the first and last cyclist on this street","msg.distance":"Distance","msg.distanceInKm":"Distance in km","msg.start":"Start","msg.arrival":"Arrival","msg.end":"End","msg.lengthInKm":"Length in km","msg.blockageInMin":"Blockage in min","msg.blockedFrom":"Blocked from","msg.blockedUntil":"Blocked until","msg.blockedStreetsFileName":"Blocked-Streets","msg.streetListZip":"StreetList","msg.streetOverview":"Street overview","msg.nodePoints":"Node locations","msg.noNodePoints":"There are no node locations on this track","msg.breakPoints":"Break locations","msg.noBreakPoints":"There are no break locations on this track","msg.location":"Location","msg.breakStart":"Break start","msg.breakLength":"Break length","msg.pointInTime":"Time","msg.otherTracks":"Other tracks","msg.trackInfo":"Track information","msg.trackInfoShort":"Track info","msg.choose":"Choose your situation","msg.directToPlanner":"Go directly to the planner","msg.startPlan":"Start a new plan","msg.startPlan.hint":"Plan a moving demonstration with multiple branches","msg.loadPlan":"Load an existing plan via json file","msg.loadPlan.hint":"Load an existing plan","msg.loadSample":"Sample Plan","msg.loadSample.hint":"Load a sample plan to play around","msg.loadSample.ex1":"3 Gpx segments (A1, B1 and AB)","msg.loadSample.ex2":"2 Tracks (A and B)","msg.continue":"Continue","msg.wizardSegments.title":"Upload single segments here, which will be used to construct different tracks","msg.simple":"Simple","msg.complex":"Complex","msg.simple.hint":"Each Gps Segment should be a track","msg.complex.hint":"Gps segments are shared and a track consists of multiple segments","msg.complex.title":"Click the + button to create a new track","msg.versions":"Versions","msg.versions.hint":"A list of all available version overviews","msg.back":"Back","msg.versionName":"Version name","msg.variants":"Variants","msg.noCalculatedTracks":"No tracks yet calculated","msg.backToStart.modalBody":"With going to the start all data is discarded","msg.backToStart.dataHint":"Current plan is discarded","msg.backToStart.modalTitle":"Back to the start","msg.backToStart.question":"Do you really want to delete all data of the current plan and go back to the start?","msg.addNewTrack":"Add new track","msg.filename":"File name","msg.segmentNotUsed.hint":"This segment is not used","msg.segmentUsed.hint":`This segment is used in {counter} tracks: +For more details see https://formatjs.io/docs/getting-started/message-distribution`)}function UV(e,t){var n=mV(t),r=nn(nn({},B6),e),A=r.locale,a=r.defaultLocale,s=r.onError;return A?!Intl.NumberFormat.supportedLocalesOf(A).length&&s?s(new LI('Missing locale data for locale: "'.concat(A,'" in Intl.NumberFormat. Using default locale: "').concat(a,'" as fallback. See https://formatjs.io/docs/react-intl#runtime-requirements for more details'))):!Intl.DateTimeFormat.supportedLocalesOf(A).length&&s&&s(new LI('Missing locale data for locale: "'.concat(A,'" in Intl.DateTimeFormat. Using default locale: "').concat(a,'" as fallback. See https://formatjs.io/docs/react-intl#runtime-requirements for more details'))):(s&&s(new dV('"locale" was not configured, using "'.concat(a,'" as fallback. See https://formatjs.io/docs/react-intl/api#intlshape for more details'))),r.locale=r.defaultLocale||"en"),RV(r),nn(nn({},r),{formatters:n,formatNumber:YV.bind(null,r,n.getNumberFormat),formatNumberToParts:kV.bind(null,r,n.getNumberFormat),formatRelativeTime:PV.bind(null,r,n.getRelativeTimeFormat),formatDate:wV.bind(null,r,n.getDateTimeFormat),formatDateToParts:yV.bind(null,r,n.getDateTimeFormat),formatTime:EV.bind(null,r,n.getDateTimeFormat),formatDateTimeRange:vV.bind(null,r,n.getDateTimeFormat),formatTimeToParts:CV.bind(null,r,n.getDateTimeFormat),formatPlural:bV.bind(null,r,n.getPluralRules),formatMessage:Vy.bind(null,r,n),$t:Vy.bind(null,r,n),formatList:IV.bind(null,r,n.getListFormat),formatListToParts:E6.bind(null,r,n.getListFormat),formatDisplayName:QV.bind(null,r,n.getDisplayNames)})}function y6(e){qP(e,"[React Intl] Could not find required `intl` object. needs to exist in the component ancestry.")}var C6=nn(nn({},B6),{textComponent:Le.Fragment});function LV(e){return function(t){return e(Le.Children.toArray(t))}}function Zy(e,t){if(e===t)return!0;if(!e||!t)return!1;var n=Object.keys(e),r=Object.keys(t),A=n.length;if(r.length!==A)return!1;for(var a=0;afetch(JV,{cache:"no-cache"}).then(e=>e.json()).catch(()=>[]),KV=60*1e3,JI=e=>e/1e6,Wm={lat:48468052,lng:10735999},Km={lat:47776715,lng:12240695},VV=e=>e.filter(t=>t.latitude<=Wm.lat&&t.latitude>=Km.lat&&t.longitude>=Wm.lng&&t.longitude<=Km.lng);let S6=0;const ZV=e=>{const[t,n]=Le.useState(0),[r,A]=Le.useState(0);Le.useEffect(()=>{$y&&setInterval(()=>{n(Date.now)},KV/3)},[]),Le.useEffect(()=>{const a=e.current;!e||!a||(a.clearLayers(),WV().then(s=>{const c=VV(s);A(c.length),c.forEach(i=>{Rn.marker({lat:JI(i.latitude),lng:JI(i.longitude)},{icon:RH}).addTo(a)})}),Rn.rectangle([[Wm.lat/1e6,Wm.lng/1e6],[Km.lat/1e6,Km.lng/1e6]],{fill:!1}).addTo(a))},[t]),S6=r};let Kv,WI=0;const $y=window.location.search.includes("&live");function eC({bigThumb:e,showPlayButton:t,showTimes:n}){const r=eA(sM),A=eA(cP),a=on(),s=Mn(),[c,i]=Le.useState(!1);return WI=r,Le.useEffect(()=>{Kv&&clearInterval(Kv),c&&(Kv=setInterval(()=>a(as.setCurrentTime((WI+500)%Eh)),100))},[c]),Le.useEffect(()=>{$y&&(a(as.setCurrentRealTime()),setInterval(()=>{a(as.setCurrentRealTime())},20*1e3))},[]),$y?U.jsxs("div",{children:[U.jsx("h6",{children:`Eingeschaltete Apps: ${S6}`}),U.jsx("div",{children:A?s.formatDate(A,AI):s.formatMessage({id:"msg.time"})})]}):U.jsxs("div",{className:"d-flex",children:[U.jsx("div",{className:"flex-fill",children:U.jsxs(Qn.Group,{className:"mx-3",children:[n&&U.jsx("div",{children:A?s.formatDate(A,AI):s.formatMessage({id:"msg.time"})}),U.jsx("div",{className:`d-flex${e?" my-2":""}`,children:U.jsx(Qn.Range,{min:0,max:Eh,value:r,onChange:u=>a(as.setCurrentTime(Number(u.target.value))),height:"100px",className:e?"bigThumb":void 0})})]})}),t&&U.jsx("div",{className:"mt-3",children:U.jsx(yn,{size:"sm",variant:c?"danger":"success",className:"m-1",onClick:()=>i(!c),title:s.formatMessage({id:c?"msg.play.stop":"msg.play.normal"}),children:c?U.jsx("img",{src:b6,className:"m-1",alt:"open file"}):U.jsx("img",{src:F6,className:"m-1",alt:"open file"})})})]})}function XV(){const e=eA(UT),t=eA($g),n=eA(iE),r=eA(oE),A=on(),a=Mn(),s={};return Object.entries(t).forEach(([c,i])=>{if(!i)return;const u=[...i];s[c]=u==null?void 0:u.sort((f,l)=>f.filename.localeCompare(l.filename,void 0,{numeric:!0})).map(f=>({value:f.id,label:f.filename}))}),U.jsx(Qn.Group,{children:U.jsxs(Qn,{className:"d-flex",children:[Object.keys(t).sort().map(c=>{var i;return U.jsxs("div",{className:"mx-3",style:{width:`${100/(Object.keys(t).length+2)}vw`},children:[U.jsx(Qn.Check,{type:"checkbox",id:c,className:"m-3",label:U.jsxs("span",{children:[U.jsx("span",{style:{background:zx(c),color:zx(c),width:"100px"},className:"mx-3",children:"________"}),c]}),title:c,checked:n.includes(c),readOnly:!0,onClick:()=>A(Lc.selectVersion(c))}),U.jsx(pE,{name:"version",value:(i=s[c])==null?void 0:i.find(u=>{var f;return(f=r[c])==null?void 0:f.includes(u.value)}),placeholder:a.formatMessage({id:"msg.onlyDisplaySingle"},{versionName:c}),options:s[c]??[],className:"basic-multi-select",isClearable:!0,classNamePrefix:"select",onChange:u=>{console.log(u),A(Lc.setDisplayTracks({version:c,selectedTracks:u?[u.value]:[]}))}}),U.jsx("a",{href:nG(c),target:"_blank",children:U.jsx(Jt,{id:"msg.downloadVersionGpx",values:{versionName:c}})})]},c)}),U.jsxs("div",{className:"mx-3",style:{width:`${100/(Object.keys(t).length+2)}vw`},children:[U.jsx(Qn.Check,{type:"checkbox",id:"marker",className:"m-3",label:"Marker",title:a.formatMessage({id:e?"msg.hideMarker":"msg.showMarker"}),checked:e,readOnly:!0,onClick:()=>A(as.setShowMapMarker(!e))}),U.jsx(eC,{showTimes:!0})]})]})})}const qV=()=>U.jsx("nav",{className:"navbar navbar-expand-lg navbar-light bg-light justify-content-between",style:{height:"15vh"},children:U.jsx("div",{children:U.jsx(XV,{})})}),$V=oM({zipTracks:ZG,map:$G}),eZ=()=>TT({reducer:$V}),tZ=eZ();let T6="de";const rp=()=>T6,AZ=e=>{T6=e},nZ=()=>window.navigator.language.includes("de")?"de":"en",rZ="Not Deutsch",iZ={test:rZ,"msg.loading":"Loading","msg.showMarker":"Show marker","msg.hideMarker":"Hide marker","msg.time":"Time","msg.onlyDisplaySingle":"Display only single route of {versionName}","msg.downloadVersionGpx":"Download GPX for {versionName}","msg.downloadPlanning":"Download current plan","msg.dashboard":"Dashboard","msg.settings":"Settings","msg.segments":"Segments","msg.segment":"Segment","msg.tracks":"Tracks","msg.calculateTracks":"Calculate tracks","msg.triggerAll":"Trigger all","msg.externalInfo":"External info","msg.streets":"Streets","msg.streetNames":"Street names","msg.aggregation":"Aggregation","msg.postCodes":"Post codes","msg.clearPostCodes":"Clear all post codes","msg.documents":"Documents","msg.gps":"Planner","msg.appName":"Rally GPX Merger","msg.removeAllData":"Remove all data","msg.removeAllData.modalBody":"Do you really want to remove all data?","msg.removeAllData.modalTitle":"Removing all data","msg.removeAllData.hint":"Delete all GPX segments, track compositions and tracks","msg.confirm":"Confirm","msg.close":"Close","msg.importExport":"Import/Export","msg.help.hint":"A short explanation how to use this tool","msg.help":"Help","msg.filterSegments":"Filter segments, separate term by ','","msg.uploadGpx.title":"Upload Segments (GPX)","msg.createGpx.part1":"You can create GPX segments with ","msg.createGpx.part2":" or ","msg.file":"File","msg.actions":"Actions","msg.noFile":"No file uploaded","msg.uploadFile":"Please upload the GPX segments here","msg.downloadFile":"Download file","msg.downloadFile.hint":'Download file "{name}"',"msg.removeFile":"Remove file","msg.removeFile.hint":'Remove file "{name}" and all references',"msg.replaceFile":"Replace segment with other file(s)","msg.replaceFile.hint":'Change file for the segment "{name}"',"msg.removeSegment.modalTitle":"Removing Gpx Segment","msg.removeSegment.modalBody":'Do you really want to remove the file "{name}" and all its references?',"msg.replaceSegment.modalTitle":"Replace GPX Segment","msg.replaceSegment.modalBody":"Upload one or more new files","msg.tracks.title":"Create Tracks from GPX Segments","msg.mergeTracks":"Merge tracks","msg.mergeTracks.hint":"Merge GPX segments to tracks and adjust the times","msg.downloadTracks":"GPX Files","msg.downloadTracks.hint":"Download all GPX files for the tracks","msg.downloadSegments":"GPX Segment Files","msg.downloadSegments.hint":"Download all GPX files of segments","msg.calculationSettings.title":"Calculation settings","msg.trackName":"Track name","msg.people":"People","msg.trackSegments":"Track segments","msg.trackPeople":"People on Track","msg.selectTrackSegment":"Select next segment to add","msg.filterTracks":"Filter tracks, separate term by ','","msg.removeTrackSegment":'Remove segment "{segmentName}" from track',"msg.removeTrack":"Remove track","msg.removeTrack.hint":"`Remove track {name}","msg.pasteSegments":"Paste segmentIds from clipboard","msg.copySegments":"Copy segmentIds to clipboard","msg.customSpeed.title":"Custom speed on segments","msg.importFile":"Import JSON file","msg.importFile.hint":"All current data is lost when importing another file","msg.completeStatus":"Complete plan status","msg.downloadCsv":"Download all information for the tracks as a csv","msg.downloadPdf":"Download all information for the tracks as a PDFs","msg.downloads":"Downloads","msg.imports":"Imports","msg.marker":"Marker","msg.play.normal":"Play the rally simulation","msg.play.fast":"Play the rally simulation fast","msg.play.stop":"Stop the rally simulation","msg.constructions.title":"Construction sites to display","msg.uploadConstructionFile":"Please upload the GPX files for constructions here","msg.removeConstruction.modalTitle":"Removing construction file","msg.removeConstruction.modalBody":'Do you really want to remove the construction file "{name}"?',"msg.constructions":"Constructions","msg.globalSpeed":"Global speed in km/h","msg.customSpeed":"Custom speed in km/h","msg.customSpeed.placeholder":"Custom speed","msg.rallyParameters.title":"Rally parameters","msg.arrivalDate.title":"Arrival of tracks","msg.arrivalDate.hint":"Time when the first people should arrive at the end of the track:","msg.label.title":"Label of current plan","msg.label.hint":"This can be a version string that appears in the file names and the documents","msg.aLot":"A lot","msg.none":"None","msg.participantsDelay.title":"Expansion of participants","msg.participantsDelay":"Delay of one participant: ","msg.participantsLength":"Length of 100 people (based on {speed} km/h): ","msg.averageSpeed.title":"Average speed of the rally","msg.averageSpeed":"Average speed","msg.externalDataOverview":"Overview of calculated Data","msg.property":"Property","msg.value":"Value","msg.uniquePositions":"Unique Positions","msg.uniquePositions.unresolved":"Unique unresolved Positions","msg.requiredRequests.postCodes":"required Post code requests","msg.requiredRequests.streets":"required Street requests","msg.iAgree.part1":"with clicking, I agree to send data to","msg.iAgree.part2":"and","msg.iAgree.part3":" ","msg.ownApiKey":"Use own API keys","msg.trackStreetInfo":"Track Street Info","msg.allEntries":"Show all entries","msg.onlyUnknown":'Only show "Unknown"',"msg.unknown":"Unknown","msg.blockedStreets":"Blocked Streets","msg.postCode":"Post code","msg.district":"District","msg.street":"Street","msg.length":"Length","msg.duration":"Duration","msg.durationInMin":"Duration in min","msg.duration.hint":"Time required for a cyclist to pass this street","msg.arrivalOfFront":"Arrival of front","msg.arrivalOfBack":"Arrival of back","msg.passageOfFront":"Passage of front","msg.passageOfBack":"Passage of back","msg.noTrackSelected":"No track selected","msg.blockage":"Blockage","msg.blockage.hint":"Time between the first and last cyclist on this street","msg.distance":"Distance","msg.distanceInKm":"Distance in km","msg.start":"Start","msg.arrival":"Arrival","msg.end":"End","msg.lengthInKm":"Length in km","msg.blockageInMin":"Blockage in min","msg.blockedFrom":"Blocked from","msg.blockedUntil":"Blocked until","msg.blockedStreetsFileName":"Blocked-Streets","msg.streetListZip":"StreetList","msg.streetOverview":"Street overview","msg.nodePoints":"Node locations","msg.noNodePoints":"There are no node locations on this track","msg.breakPoints":"Break locations","msg.noBreakPoints":"There are no break locations on this track","msg.location":"Location","msg.breakStart":"Break start","msg.breakLength":"Break length","msg.pointInTime":"Time","msg.otherTracks":"Other tracks","msg.trackInfo":"Track information","msg.trackInfoShort":"Track info","msg.choose":"Choose your situation","msg.directToPlanner":"Go directly to the planner","msg.startPlan":"Start a new plan","msg.startPlan.hint":"Plan a moving demonstration with multiple branches","msg.loadPlan":"Load an existing plan via json file","msg.loadPlan.hint":"Load an existing plan","msg.loadSample":"Sample Plan","msg.loadSample.hint":"Load a sample plan to play around","msg.loadSample.ex1":"3 Gpx segments (A1, B1 and AB)","msg.loadSample.ex2":"2 Tracks (A and B)","msg.continue":"Continue","msg.wizardSegments.title":"Upload single segments here, which will be used to construct different tracks","msg.simple":"Simple","msg.complex":"Complex","msg.simple.hint":"Each Gps Segment should be a track","msg.complex.hint":"Gps segments are shared and a track consists of multiple segments","msg.complex.title":"Click the + button to create a new track","msg.versions":"Versions","msg.versions.hint":"A list of all available version overviews","msg.back":"Back","msg.versionName":"Version name","msg.variants":"Variants","msg.noCalculatedTracks":"No tracks yet calculated","msg.backToStart.modalBody":"With going to the start all data is discarded","msg.backToStart.dataHint":"Current plan is discarded","msg.backToStart.modalTitle":"Back to the start","msg.backToStart.question":"Do you really want to delete all data of the current plan and go back to the start?","msg.addNewTrack":"Add new track","msg.filename":"File name","msg.segmentNotUsed.hint":"This segment is not used","msg.segmentUsed.hint":`This segment is used in {counter} tracks: {tracks}`,"msg.menu":"Menu","msg.pointOfInterest":"Point of interest","msg.delete":"Delete","msg.save":"Save","msg.points":"Points","msg.gaps":"Gaps","msg.title":"Title","msg.description":"Description","msg.radius":"Radius in m","msg.type":"Type","msg.flipGpx":"Flip Gpx file","msg.unflipGpx":"Use normal direction","msg.flipGpx.hint":"Flip the Gpx of {name}, e.g. when going against the direction on a motorway","msg.track":"Track","msg.resetStreets.hint":"Reset resolved streets for segment {name} so that the next time you resolve the streets, this segment is resolved as well","msg.resetStreets":"Reset resolved streets","msg.streetsResolved":"Street information is resolved","msg.communicatedStart":"Published start times","msg.priority":"Prio","msg.priority.hint":"The higher the priority the more it is prioritized at a node","msg.speed":"Speed in km/h","msg.changeStreetName":"Change street name"},oZ="Deutsch",aZ={test:oZ,"msg.loading":"Lädt","msg.showMarker":"Marker anzeigen","msg.hideMarker":"Marker verstecken","msg.time":"Zeit","msg.onlyDisplaySingle":"Nur einzelne Routen der {versionName} anzeigen","msg.downloadVersionGpx":"GPX für {versionName} herunterladen","msg.downloadPlanning":"Aktuellen Stand herunterladen","msg.dashboard":"Übersicht","msg.settings":"Einstellungen","msg.segments":"Abschnitte","msg.segment":"Abschnitt","msg.tracks":"Routen","msg.calculateTracks":"Routen berechnen","msg.triggerAll":"Alle starten","msg.externalInfo":"Externe Informationen","msg.streets":"Straßen","msg.streetNames":"Straßennamen","msg.aggregation":"Gruppieren","msg.postCodes":"Postleitzahlen","msg.clearPostCodes":"Alle Postleitzahlen löschen","msg.clearStreetNames":"Alle Straßennamen löschen","msg.documents":"Dokumente","msg.gps":"Planung","msg.appName":"Sternfahrtplaner","msg.removeAllData":"Alle Daten entfernen","msg.removeAllData.modalBody":"Möchten Sie wirklich alle Daten entfernen?","msg.removeAllData.modalTitle":"Alle Daten entfernen","msg.removeAllData.hint":"Alle Abschnitte, Routen und sonstige Daten löschen","msg.confirm":"Bestätigen","msg.close":"Schließen","msg.importExport":"Import/Export","msg.help.hint":"Eine kurze Erklärung, wie man den Planer verwendet","msg.help":"Hilfe","msg.filterSegments":"Abschnitte filtern, Suchterme mit ',' trennen","msg.uploadGpx.title":"Abschnitte hochladen (GPX)","msg.createGpx.part1":"GPX Abschnitte erstellen mit ","msg.createGpx.part2":" oder ","msg.file":"Datei","msg.actions":"Aktionen","msg.noFile":"Keine Datei hochgeladen","msg.uploadFile":"Hier bitte die GPX Abschnitte hochladen","msg.downloadFile":"Datei herunterladen","msg.downloadFile.hint":'Datei "{name}" herunterladen',"msg.removeFile":"Datei entfernen","msg.removeFile.hint":'Datei "{name}" und alle Referenzen entfernen',"msg.replaceFile":"Abschnitt mit andere(n) Datei(en) ersetzen","msg.replaceFile.hint":'Dateien für den Abschnitt "{name}" austauschen',"msg.removeSegment.modalTitle":"GPX Abschnitt entfernen","msg.removeSegment.modalBody":'Möchten Sie wirklich den Abschnitt "{name}" und alle seine Referenzen löschen?',"msg.replaceSegment.modalTitle":"GPX Abschnitt ersetzen","msg.replaceSegment.modalBody":"Laden Sie ein oder mehrere Dateien hoch","msg.tracks.title":"Routen aus den Abschnitten zusammenbauen","msg.mergeTracks":"Routen bauen","msg.mergeTracks.hint":"Abschnitte zu Routen zusammenbauen und die Zeiten entsprechend anpassen","msg.downloadTracks":"GPX Dateien","msg.downloadTracks.hint":"Alle GPX Dateien für die Routen herunterladen","msg.downloadSegments":"GPX Abschnitte","msg.downloadSegments.hint":"Alle GPX Dateien für die Abschnitte herunterladen","msg.calculationSettings.title":"Einstellungen","msg.trackName":"Routenname","msg.people":"Leute","msg.trackPeople":"Leute auf der Route","msg.trackSegments":"Routensegmente","msg.selectTrackSegment":"Abschnitt zum Hinzufügen auswählen","msg.filterTracks":"Routen filtern, Suchterme mit ',' trennen","msg.removeTrackSegment":'Abschnitt "{segmentName}" von der Route entfernen',"msg.removeTrack":"Route entfernen","msg.removeTrack.hint":"Route {name} entfernen","msg.pasteSegments":"Abschnitt-Ids aus der Zwischenablage einfügen","msg.copySegments":"Abschnitt-Ids in die Zwischenablage kopieren","msg.customSpeed.title":"Angepasste Geschwindigkeit auf Abschnitten","msg.importFile":"JSON Datei importieren","msg.importFile.hint":"Alle aktuellen Daten werden überschrieben, wenn eine andere Datei importiert wird","msg.completeStatus":"Aktueller Planungsstand","msg.downloadCsv":"Alle Informationen über die Routen als csv herunterladen","msg.downloadPdf":"Alle Informationen über die Routen als PDFs herunterladen","msg.downloads":"Downloads","msg.imports":"Imports","msg.marker":"Marker","msg.play.normal":"Sternfahrtsimulation abspielen","msg.play.fast":"Sternfahrtsimulation schnell abspielen","msg.play.stop":"Sternfahrtsimulation stoppen","msg.constructions.title":"Baustellen für die Anzeige","msg.uploadConstructionFile":"Hier bitte die Baustellen als GPX Dateien hochladen","msg.removeConstruction.modalTitle":"Baustellendatei entfernen","msg.removeConstruction.modalBody":'Möchten Sie wirklich die Baustellendatei "{name}" entfernen?',"msg.constructions":"Baustellen","msg.globalSpeed":"Globale Geschwindigkeit in km/h","msg.customSpeed":"Angepasste Geschwindigkeit in km/h","msg.customSpeed.placeholder":"Angepasste Geschwindigkeit","msg.rallyParameters.title":"Sternfahrtparameter","msg.arrivalDate.title":"Ankunft der Routen","msg.arrivalDate.hint":"Wann die ersten Routen am Ziel ankommen sollen:","msg.label.title":"Bezeichnung der Planung","msg.label.hint":"Dieser Text kann als Versionsbezeichnung benutzt werden. Er taucht in den Dokumenten auf","msg.aLot":"Viel","msg.none":"Keine","msg.participantsDelay.title":"Ausdehnung der Teilnehmenden","msg.participantsDelay":"Verzögerung durch einen Teilnehmenden: ","msg.participantsLength":"Länge von 100 Leuten (basierend auf {speed} km/h): ","msg.averageSpeed.title":"Durchschnittsgeschwindigkeit der Sternfahrt","msg.averageSpeed":"Durchschnittsgeschwindigkeit","msg.externalDataOverview":"Übersicht der berechneten Daten","msg.property":"Eigenschaft","msg.value":"Wert","msg.uniquePositions":"Einmalige Positionen","msg.uniquePositions.unresolved":"Einmalige unaufgelöste Positionen","msg.requiredRequests.postCodes":"benötigte PLZ Anfragen","msg.requiredRequests.streets":"benötige Straßenanfragen","msg.iAgree.part1":"mit dem Klick stimme ich zu, Daten zu ","msg.iAgree.part2":"und","msg.iAgree.part3":" zu senden","msg.ownApiKey":"Eigene API Keys verwenden","msg.trackStreetInfo":"Streckenabschnitte","msg.allEntries":"Alle Einträge anzeigen","msg.onlyUnknown":'Nur "Unbekannte" anzeigen',"msg.unknown":"Unbekannt","msg.blockedStreets":"Blockierte Straßen","msg.postCode":"PLZ","msg.district":"Bezirk","msg.street":"Straße","msg.length":"Länge","msg.duration":"Dauer","msg.durationInMin":"Dauer in min","msg.duration.hint":"Zeit, die ein Fahrrad auf dieser Straße ist","msg.arrivalOfFront":"Ankunft des Anfangs","msg.arrivalOfBack":"Ankunft des Endes","msg.passageOfFront":"Durchgang des Anfangs","msg.passageOfBack":"Durchgang des Endes","msg.noTrackSelected":"Keine Route ausgewählt","msg.blockage":"Blockiert","msg.blockage.hint":"Zeit zwischen dem ersten und letzten Fahrrad auf der Straße","msg.distance":"Distanz","msg.distanceInKm":"Distanz in km","msg.start":"Start","msg.arrival":"Ankunft","msg.end":"Ende","msg.lengthInKm":"Länge in km","msg.blockageInMin":"Blockierte Dauer in min","msg.blockedFrom":"Blockiert von","msg.blockedUntil":"Blockiert bis","msg.blockedStreetsFileName":"Blockierte-Straßen","msg.streetListZip":"Straßenliste","msg.streetOverview":"Straßenübersicht","msg.nodePoints":"Knotenpunkte","msg.noNodePoints":"Auf dieser Route gibt es keine Knotenpunkte","msg.breakPoints":"Pausenplätze","msg.noBreakPoints":"Auf dieser Route gibt es keine Pausenplätze","msg.location":"Ort","msg.breakStart":"Pausenstart","msg.breakLength":"Pausenlänge","msg.pointInTime":"Zeitpunkt","msg.otherTracks":"Andere Routen","msg.trackInfo":"Routeninformationen","msg.trackInfoShort":"Routeninfos","msg.choose":"Situation auswählen","msg.directToPlanner":"Direkt zum Sternfahrtplaner","msg.startPlan":"Eine neue Planung starten","msg.startPlan.hint":"Eine sich bewegende Demonstration mit mehreren Routen planen","msg.loadPlan":"Existierende Planung laden","msg.loadPlan.hint":"Existierende Planung über eine json Datei laden","msg.loadSample":"Beispielplanung","msg.loadSample.hint":"Beispielplanung um den Planer auszuprobieren","msg.loadSample.ex1":"3 Gpx Abschnitte (A1, B1 und AB)","msg.loadSample.ex2":"2 Routen (A und B)","msg.continue":"Weiter","msg.wizardSegments.title":"Einzelne Streckenabschnitte hochladen, um aus ihnen die Routen zu bauen","msg.simple":"Einfach","msg.complex":"Komplex","msg.simple.hint":"Jeder Streckenabschnitt wird eine Route","msg.complex.hint":"Routen bestehen aus mehreren Abschnitten und teilen sich diese","msg.complex.title":"Den + Button anklicken um eine neue Route anzulegen","msg.versions":"Versionen","msg.versions.hint":"Eine Übersicht über alle verfügbaren Versionen","msg.back":"Zurück","msg.versionName":"Versionsname","msg.variants":"Varianten","msg.noCalculatedTracks":"Noch keine Routen gebaut","msg.backToStart.modalBody":"Beim zurück gehen werden alle Daten gelöscht","msg.backToStart.dataHint":"Aktuelle Planung wird verworfen","msg.backToStart.modalTitle":"Zurück zum Start","msg.backToStart.question":"Wollen Sie wirklich alle Daten dieser Planung löschen und zum Start zurück?","msg.addNewTrack":"Neue Route","msg.filename":"Dateiname","msg.segmentNotUsed.hint":"Dieser Abschnitt wird nicht verwendet","msg.segmentUsed.hint":`Dieser Abschnitt wird in {counter} Routen verwendet: {tracks}`,"msg.menu":"Menü","msg.pointOfInterest":"Wichtiger Punkt","msg.delete":"Löschen","msg.save":"Speichern","msg.points":"Punkte","msg.gaps":"Lücken","msg.title":"Titel","msg.description":"Beschreibung","msg.radius":"Radius in m","msg.type":"Typ","msg.flipGpx":"Gpx Datei umdrehen","msg.unflipGpx":"Normale Richtung verwenden","msg.flipGpx.hint":"Die Fahrtrichtung auf dem Abschnitt ändern, z.B. wenn die Autobahn gegen die Fahrtrichtung benutzt wird","msg.track":"Route","msg.resetStreets.hint":"Straßenauflösung für {name} zurücksetzen, so dass beim nächsten Mal Straßenauflösen auch dieser Abschnitt neu aufgelöst wird","msg.resetStreets":"Straßenauflösung zurücksetzen","msg.streetsResolved":"Straßenauflösung ist erfolgt","msg.communicatedStart":"Veröffentliche Startzeiten","msg.priority":"Prio","msg.priority.hint":"Umso höher die Priorität ist, desto priorisierter ist eine Route bei Knotenpunkten","msg.speed":"Geschwindigkeit in km/h","msg.changeStreetName":"Straßennamen ändern"};function P6(){switch(rp()){case"de":return aZ;case"en":return iZ}}let Qf;const sZ=()=>{const{tileUrlTemplate:e,startZoom:t,getOptions:n}=gM(),r=on();Le.useEffect(()=>{Qf||(Qf=Rn.map("mapid",{tap:!Rn.Browser.mobile,dragging:!Rn.Browser.mobile}).setView(pM,t),Rn.tileLayer(e,n()).addTo(Qf))},[]);const A=Le.useRef(null),a=Le.useRef(null),s=Le.useRef(null);return Le.useEffect(()=>{A.current=Rn.layerGroup().addTo(Qf),a.current=Rn.layerGroup().addTo(Qf),s.current=Rn.layerGroup().addTo(Qf)},[]),sP(A,!0),uP(a),ZV(s),U.jsx("div",{onMouseLeave:()=>r(as.setHighlightedTrack()),children:U.jsx("div",{id:"mapid",style:{height:"100vh",zIndex:0}})})},H0="/Sternfahrt2024/assets/file-down-ee009682.svg";var N6={exports:{}};(function(e,t){(function(n,r){r()})(is,function(){function n(u,f){return typeof f>"u"?f={autoBom:!1}:typeof f!="object"&&(console.warn("Deprecated: Expected third argument to be a object"),f={autoBom:!f}),f.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(u.type)?new Blob(["\uFEFF",u],{type:u.type}):u}function r(u,f,l){var h=new XMLHttpRequest;h.open("GET",u),h.responseType="blob",h.onload=function(){i(h.response,f,l)},h.onerror=function(){console.error("could not download file")},h.send()}function A(u){var f=new XMLHttpRequest;f.open("HEAD",u,!1);try{f.send()}catch{}return 200<=f.status&&299>=f.status}function a(u){try{u.dispatchEvent(new MouseEvent("click"))}catch{var f=document.createEvent("MouseEvents");f.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),u.dispatchEvent(f)}}var s=typeof window=="object"&&window.window===window?window:typeof self=="object"&&self.self===self?self:typeof is=="object"&&is.global===is?is:void 0,c=s.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),i=s.saveAs||(typeof window!="object"||window!==s?function(){}:"download"in HTMLAnchorElement.prototype&&!c?function(u,f,l){var h=s.URL||s.webkitURL,p=document.createElement("a");f=f||u.name||"download",p.download=f,p.rel="noopener",typeof u=="string"?(p.href=u,p.origin===location.origin?a(p):A(p.href)?r(u,f,l):a(p,p.target="_blank")):(p.href=h.createObjectURL(u),setTimeout(function(){h.revokeObjectURL(p.href)},4e4),setTimeout(function(){a(p)},0))}:"msSaveOrOpenBlob"in navigator?function(u,f,l){if(f=f||u.name||"download",typeof u!="string")navigator.msSaveOrOpenBlob(n(u,l),f);else if(A(u))r(u,f,l);else{var h=document.createElement("a");h.href=u,h.target="_blank",setTimeout(function(){a(h)})}}:function(u,f,l,h){if(h=h||open("","_blank"),h&&(h.document.title=h.document.body.innerText="downloading..."),typeof u=="string")return r(u,f,l);var p=u.type==="application/octet-stream",B=/constructor/i.test(s.HTMLElement)||s.safari,w=/CriOS\/[\d]+/.test(navigator.userAgent);if((w||p&&B||c)&&typeof FileReader<"u"){var E=new FileReader;E.onloadend=function(){var m=E.result;m=w?m:m.replace(/^data:[^;]*;/,"data:attachment/file;"),h?h.location.href=m:location=m,h=null},E.readAsDataURL(u)}else{var g=s.URL||s.webkitURL,d=g.createObjectURL(u);h?h.location=d:location.href=d,h=null,setTimeout(function(){g.revokeObjectURL(d)},4e4)}});s.saveAs=i.saveAs=i,e.exports=i})})(N6);var lZ=N6.exports;const ip=$s(lZ),cZ="/Sternfahrt2024/assets/file-downB-f092c7b0.svg",Y6=(e,t)=>{const n=new Blob([t],{type:e.includes(".gpx")?"gpx":"json"});ip.saveAs(n,e)},SM=({id:e,name:t,content:n,onlyIcon:r,label:A,size:a})=>{const s=Mn();return U.jsxs(yn,{onClick:()=>Y6(t,n),style:{backgroundColor:L0(e)},size:a,title:s.formatMessage({id:"msg.downloadFile.hint"},{name:t}),className:r?"m-1":void 0,children:[r?U.jsx("img",{src:H0,alt:"download file",color:"#ffffff",className:"m-1"}):t,!!A&&A]})},k6=({name:e,content:t})=>{const n=Mn();return U.jsxs(Uc.Item,{onClick:()=>Y6(e,t),title:n.formatMessage({id:"msg.downloadFile.hint"},{name:e}),children:[U.jsx("img",{src:cZ,alt:"download file",color:"#ffffff",className:"m-1"}),U.jsx("span",{children:U.jsx(Jt,{id:"msg.downloadFile"})})]})},KI={};function uZ(e,t){return e.streetName===t.streetName&&e.pointTo.lat===t.pointTo.lat&&e.pointTo.lon===t.pointTo.lon&&e.pointFrom.lat===t.pointFrom.lat&&e.pointFrom.lon===t.pointFrom.lon&&e.backArrival===t.backArrival}var B8;const z6=dc({name:"geoCoding",initialState:((B8=Nl.load())==null?void 0:B8.geoCoding)??KI,reducers:{setGeoApifyKey:(e,t)=>{e.geoApifyKey=t.payload},setBigDataCloudKey:(e,t)=>{e.bigDataCloudKey=t.payload},saveResolvedPositions:(e,t)=>{e.resolvedPositions||(e.resolvedPositions={});const n=e.resolvedPositions;Object.entries(t.payload).forEach(([r,A])=>{n[r]===null&&(n[r]=A),n[r]===void 0&&(n[r]=A)}),e.resolvedPositions=n},saveResolvedPostCodes:(e,t)=>{e.resolvedPostCodes||(e.resolvedPostCodes={});const n=e.resolvedPostCodes;Object.entries(t.payload).forEach(([r,A])=>{(n[r]===void 0||n[r]===-1)&&(n[r]=A)}),e.resolvedPostCodes=n},saveResolvedDistricts:(e,t)=>{e.resolvedDistricts||(e.resolvedDistricts={});const n=e.resolvedDistricts;Object.entries(t.payload).forEach(([r,A])=>{n[r]===void 0&&(n[r]=A)}),e.resolvedDistricts=n},clearPostCodesAndDistricts:e=>{e.resolvedPostCodes=void 0,e.resolvedDistricts=void 0},clearStreetNames:e=>{e.resolvedPositions=void 0},setTrackStreetInfos:(e,t)=>{e.trackStreetInfos=t.payload},changeTrackStreetInfoName:(e,t)=>{var a;const{previous:n,updated:r,trackInfoId:A}=t.payload;e.trackStreetInfos=(a=e.trackStreetInfos)==null?void 0:a.map(s=>s.id===A?{...s,wayPoints:s.wayPoints.map(c=>uZ(c,n)?r:c)}:s)},toggleOnlyShowUnknown:e=>{e.onlyShowUnknown=!e.onlyShowUnknown},clear:()=>KI}}),Zs=z6.actions,fZ=z6.reducer,_0=e=>e.geoCoding,R6=e=>_0(e).geoApifyKey,U6=e=>_0(e).bigDataCloudKey,TM=e=>_0(e).resolvedPositions??{},mE=e=>_0(e).resolvedPostCodes??{},hZ=e=>_0(e).resolvedDistricts??{},L6=e=>_0(e).trackStreetInfos??[],PM=e=>_0(e).onlyShowUnknown??!1;var Lo=(e=>(e.Track="TRACK",e.Break="BREAK",e.Node="NODE",e))(Lo||{});function dZ(e){const[t,n]=e.replace("lat:","").replace("lng:","").split("-");return{lat:Number(t),lon:Number(n)}}function wE({lat:e,lon:t}){return`lat:${e.toFixed(10)}-lng:${t.toFixed(10)}`}function O6(e){const t=(e.pointTo.lat+e.pointFrom.lat)/2,n=(e.pointTo.lon+e.pointFrom.lon)/2,r=wE({lat:t,lon:n});return{lat:t,lon:n,postCodeKey:r}}const nl=gs(L6,mE,hZ,(e,t,n)=>e.map(r=>({...r,wayPoints:r.wayPoints.map(A=>{const a=O6(A).postCodeKey;return{...A,postCode:t[a],district:n[a]}}).filter(A=>(A.distanceInKm??0)>.001&&A.type!==Lo.Break)})));function gZ(e,t){return e>=t?e:t}function pZ(e,t){return e<=t?e:t}function VI(e,t){return t.streetName===e.streetName&&t.postCode===e.postCode}const op=gs(nl,e=>{let t=[];return e.forEach(n=>{n.wayPoints.forEach(r=>{if(!t.find(A=>VI(r,A))){t.push({streetName:r.streetName,frontArrival:r.frontArrival,backPassage:r.backArrival,postCode:r.postCode,district:r.district,pointFrom:r.pointFrom,pointTo:r.pointTo});return}t=t.map(A=>VI(r,A)?{...A,backPassage:gZ(A.backPassage,r.backArrival),frontArrival:pZ(A.frontArrival,r.frontArrival)}:A)})}),t});var G6={},EE={};Object.defineProperty(EE,"__esModule",{value:!0});EE.geoDistance=void 0;function BZ(e,t,n="K"){const{lat:r=void 0,lng:A=void 0}=e,{lat:a=void 0,lng:s=void 0}=t;if(!r||!A||!a||!s)throw new Error("Points must have valid lat and lng attributes");if(typeof r!="number"||typeof A!="number")throw new Error("Point-1 must have valid lat and lng attributes");if(typeof a!="number"||typeof s!="number")throw new Error("Point-2 must have valid lat and lng attributes");if(r===a&&A===s)return 0;var c=Math.PI*r/180,i=Math.PI*a/180,u=A-s,f=Math.PI*u/180,l=Math.sin(c)*Math.sin(i)+Math.cos(c)*Math.cos(i)*Math.cos(f);return l>1&&(l=1),l=Math.acos(l),l=l*180/Math.PI,l=l*60*1.1515,n==="K"&&(l=l*1.609344),n==="N"&&(l=l*.8684),l}EE.geoDistance=BZ;Object.defineProperty(G6,"__esModule",{value:!0});const mZ=EE;var pc=G6.default=mZ.geoDistance;const xo=({lat:e,lon:t})=>({lat:e,lng:t});function ja(e,t=2){const n=rp();return Intl.NumberFormat(n,{maximumFractionDigits:t}).format(e)}const j6=e=>["msg.postCode","msg.district","msg.street","msg.lengthInKm","msg.blockageInMin","msg.blockedFrom","msg.blockedUntil"].map(n=>e.formatMessage({id:n})).join(";");function wZ(e,t){return j6(t)+` `+e.map(({postCode:n,district:r,streetName:A,frontArrival:a,backPassage:s,pointTo:c,pointFrom:i})=>`${n??""};${r??""};${A??t.formatMessage({id:"msg.unknown"})};${ja(pc(xo(i),xo(c)),2)};${ja(fo(s,a)/60,1)};${wr(a)};${wr(s)}`).join(` diff --git a/index.html b/index.html index 7080773e..814a9040 100644 --- a/index.html +++ b/index.html @@ -5,7 +5,7 @@ Sternfahrt MUC 2024 - +