mirror of
http://100.103.83.12:3003/fegger/time_to_leave.git
synced 2026-09-17 09:42:44 +00:00
1 line
35 KiB
JavaScript
1 line
35 KiB
JavaScript
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,29803,77241,81092,45110,85890,1851,20264,e=>{"use strict";var t,n=e.i(71645),r=e.i(47167);r.default.env.HAFAS_URL,parseInt(r.default.env.HAFAS_TIMEOUT_MS??"10000",10),r.default.env.NOMINATIM_URL,r.default.env.NOMINATIM_USER_AGENT,r.default.env.OSRM_URL,r.default.env.WIENER_LINIEN_API_URL;let a="Wiener Hauptbahnhof",i="wik9000001";r.default.env.APP_VERSION,e.s(["useOriginStation",0,function(){let[e,t]=(0,n.useState)(null),[r,o]=(0,n.useState)(!1),[s,l]=(0,n.useState)(null),{location:u,state:d}=function(){let e=function(){if("u">typeof navigator&&navigator.geolocation)return navigator.geolocation}(),[t,r]=(0,n.useState)(null),[a,i]=(0,n.useState)(null),[o,s]=(0,n.useState)(void 0===e?"denied":"pending"),l=(0,n.useCallback)(e=>{r(e),s("granted"),i(null)},[]),u=(0,n.useCallback)(e=>{i(e),s("denied"),r(null)},[]);return(0,n.useEffect)(()=>{if(!e)return;let t=e.watchPosition(l,u,{enableHighAccuracy:!0,timeout:1e4,maximumAge:6e4});return()=>{e.clearWatch(t)}},[e,l,u]),{location:t,error:a,state:o}}();return(0,n.useEffect)(()=>{let e=!0;return(async()=>{if(!u||"granted"!==d){e&&t({name:a,extId:i});return}o(!0),l(null);try{let{latitude:n,longitude:r}=u.coords,s={svcReqL:[{meth:"LocMatch",req:{input:{loc:{lat:n,lon:r,type:"S"},maxLoc:5}}}]},l=await fetch("/api/hafas",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});if(!l.ok)throw Error(`HAFAS request failed with status ${l.status}`);let d=await l.json(),c=(d?.svcResL?.[0]?.res?.match?.locL??[]).filter(e=>"S"===e.type).map(e=>({name:e.name,extId:e.extId,lat:e.lat,lng:e.lon}));if(!e)return;c.length>0?t(c[0]):t({name:a,extId:i}),o(!1)}catch(n){e&&(l(n instanceof Error?n.message:"Failed to find nearest station"),t({name:a,extId:i}),o(!1))}})(),()=>{e=!1}},[u,d]),{station:e,loading:r,error:s}}],29803);var o=e.i(43476);let s={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}};function l(e){return (t={})=>{let n=t.width?String(t.width):e.defaultWidth;return e.formats[n]||e.formats[e.defaultWidth]}}let u={date:l({formats:{full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},defaultWidth:"full"}),time:l({formats:{full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},defaultWidth:"full"}),dateTime:l({formats:{full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},defaultWidth:"full"})},d={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"};function c(e){return(t,n)=>{let r;if("formatting"===(n?.context?String(n.context):"standalone")&&e.formattingValues){let t=e.defaultFormattingWidth||e.defaultWidth,a=n?.width?String(n.width):t;r=e.formattingValues[a]||e.formattingValues[t]}else{let t=e.defaultWidth,a=n?.width?String(n.width):e.defaultWidth;r=e.values[a]||e.values[t]}return r[e.argumentCallback?e.argumentCallback(t):t]}}function m(e){return(t,n={})=>{let r,a=n.width,i=a&&e.matchPatterns[a]||e.matchPatterns[e.defaultMatchWidth],o=t.match(i);if(!o)return null;let s=o[0],l=a&&e.parsePatterns[a]||e.parsePatterns[e.defaultParseWidth],u=Array.isArray(l)?function(e,t){for(let n=0;n<e.length;n++)if(t(e[n]))return n}(l,e=>e.test(s)):function(e,t){for(let n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&t(e[n]))return n}(l,e=>e.test(s));return r=e.valueCallback?e.valueCallback(u):u,{value:r=n.valueCallback?n.valueCallback(r):r,rest:t.slice(s.length)}}}let h={code:"en-US",formatDistance:(e,t,n)=>{let r,a=s[e];if(r="string"==typeof a?a:1===t?a.one:a.other.replace("{{count}}",t.toString()),n?.addSuffix)if(n.comparison&&n.comparison>0)return"in "+r;else return r+" ago";return r},formatLong:u,formatRelative:(e,t,n,r)=>d[e],localize:{ordinalNumber:(e,t)=>{let n=Number(e),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},era:c({values:{narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},defaultWidth:"wide"}),quarter:c({values:{narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},defaultWidth:"wide",argumentCallback:e=>e-1}),month:c({values:{narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},defaultWidth:"wide"}),day:c({values:{narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},defaultWidth:"wide"}),dayPeriod:c({values:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},defaultWidth:"wide",formattingValues:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},defaultFormattingWidth:"wide"})},match:{ordinalNumber:(t={matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:e=>parseInt(e,10)},(e,n={})=>{let r=e.match(t.matchPattern);if(!r)return null;let a=r[0],i=e.match(t.parsePattern);if(!i)return null;let o=t.valueCallback?t.valueCallback(i[0]):i[0];return{value:o=n.valueCallback?n.valueCallback(o):o,rest:e.slice(a.length)}}),era:m({matchPatterns:{narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^b/i,/^(a|c)/i]},defaultParseWidth:"any"}),quarter:m({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},defaultMatchWidth:"wide",parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:"any",valueCallback:e=>e+1}),month:m({matchPatterns:{narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},defaultParseWidth:"any"}),day:m({matchPatterns:{narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},defaultParseWidth:"any"}),dayPeriod:m({matchPatterns:{narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},defaultMatchWidth:"any",parsePatterns:{any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},defaultParseWidth:"any"})},options:{weekStartsOn:0,firstWeekContainsDate:1}},f={},g=Symbol.for("constructDateFrom");function w(e,t){return"function"==typeof e?e(t):e&&"object"==typeof e&&g in e?e[g](t):e instanceof Date?new e.constructor(t):new Date(t)}function x(e,t){return w(t||e,e)}function y(e){let t=x(e),n=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()));return n.setUTCFullYear(t.getFullYear()),e-n}function b(e,...t){let n=w.bind(null,e||t.find(e=>"object"==typeof e));return t.map(n)}function p(e,t){let n=x(e,t?.in);return n.setHours(0,0,0,0),n}function v(e,t){let n=t?.weekStartsOn??t?.locale?.options?.weekStartsOn??f.weekStartsOn??f.locale?.options?.weekStartsOn??0,r=x(e,t?.in),a=r.getDay();return r.setDate(r.getDate()-(7*(a<n)+a-n)),r.setHours(0,0,0,0),r}function j(e,t){return v(e,{...t,weekStartsOn:1})}function S(e,t){let n=x(e,t?.in),r=n.getFullYear(),a=w(n,0);a.setFullYear(r+1,0,4),a.setHours(0,0,0,0);let i=j(a),o=w(n,0);o.setFullYear(r,0,4),o.setHours(0,0,0,0);let s=j(o);return n.getTime()>=i.getTime()?r+1:n.getTime()>=s.getTime()?r:r-1}function k(e,t){let n=x(e,t?.in),r=n.getFullYear(),a=t?.firstWeekContainsDate??t?.locale?.options?.firstWeekContainsDate??f.firstWeekContainsDate??f.locale?.options?.firstWeekContainsDate??1,i=w(t?.in||e,0);i.setFullYear(r+1,0,a),i.setHours(0,0,0,0);let o=v(i,t),s=w(t?.in||e,0);s.setFullYear(r,0,a),s.setHours(0,0,0,0);let l=v(s,t);return+n>=+o?r+1:+n>=+l?r:r-1}function N(e,t){let n=Math.abs(e).toString().padStart(t,"0");return(e<0?"-":"")+n}e.s(["constructFrom",0,w],77241),e.s(["toDate",0,x],81092),e.s(["normalizeDates",0,b],45110),e.s(["startOfDay",0,p],85890);let M={y(e,t){let n=e.getFullYear(),r=n>0?n:1-n;return N("yy"===t?r%100:r,t.length)},M(e,t){let n=e.getMonth();return"M"===t?String(n+1):N(n+1,2)},d:(e,t)=>N(e.getDate(),t.length),a(e,t){let n=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.toUpperCase();case"aaa":return n;case"aaaaa":return n[0];default:return"am"===n?"a.m.":"p.m."}},h:(e,t)=>N(e.getHours()%12||12,t.length),H:(e,t)=>N(e.getHours(),t.length),m:(e,t)=>N(e.getMinutes(),t.length),s:(e,t)=>N(e.getSeconds(),t.length),S(e,t){let n=t.length;return N(Math.trunc(e.getMilliseconds()*Math.pow(10,n-3)),t.length)}},T={G:function(e,t,n){let r=+(e.getFullYear()>0);switch(t){case"G":case"GG":case"GGG":return n.era(r,{width:"abbreviated"});case"GGGGG":return n.era(r,{width:"narrow"});default:return n.era(r,{width:"wide"})}},y:function(e,t,n){if("yo"===t){let t=e.getFullYear();return n.ordinalNumber(t>0?t:1-t,{unit:"year"})}return M.y(e,t)},Y:function(e,t,n,r){let a=k(e,r),i=a>0?a:1-a;return"YY"===t?N(i%100,2):"Yo"===t?n.ordinalNumber(i,{unit:"year"}):N(i,t.length)},R:function(e,t){return N(S(e),t.length)},u:function(e,t){return N(e.getFullYear(),t.length)},Q:function(e,t,n){let r=Math.ceil((e.getMonth()+1)/3);switch(t){case"Q":return String(r);case"QQ":return N(r,2);case"Qo":return n.ordinalNumber(r,{unit:"quarter"});case"QQQ":return n.quarter(r,{width:"abbreviated",context:"formatting"});case"QQQQQ":return n.quarter(r,{width:"narrow",context:"formatting"});default:return n.quarter(r,{width:"wide",context:"formatting"})}},q:function(e,t,n){let r=Math.ceil((e.getMonth()+1)/3);switch(t){case"q":return String(r);case"qq":return N(r,2);case"qo":return n.ordinalNumber(r,{unit:"quarter"});case"qqq":return n.quarter(r,{width:"abbreviated",context:"standalone"});case"qqqqq":return n.quarter(r,{width:"narrow",context:"standalone"});default:return n.quarter(r,{width:"wide",context:"standalone"})}},M:function(e,t,n){let r=e.getMonth();switch(t){case"M":case"MM":return M.M(e,t);case"Mo":return n.ordinalNumber(r+1,{unit:"month"});case"MMM":return n.month(r,{width:"abbreviated",context:"formatting"});case"MMMMM":return n.month(r,{width:"narrow",context:"formatting"});default:return n.month(r,{width:"wide",context:"formatting"})}},L:function(e,t,n){let r=e.getMonth();switch(t){case"L":return String(r+1);case"LL":return N(r+1,2);case"Lo":return n.ordinalNumber(r+1,{unit:"month"});case"LLL":return n.month(r,{width:"abbreviated",context:"standalone"});case"LLLLL":return n.month(r,{width:"narrow",context:"standalone"});default:return n.month(r,{width:"wide",context:"standalone"})}},w:function(e,t,n,r){let a,i,o,s,l=Math.round((v(a=x(e,r?.in),r)-(i=r?.firstWeekContainsDate??r?.locale?.options?.firstWeekContainsDate??f.firstWeekContainsDate??f.locale?.options?.firstWeekContainsDate??1,o=k(a,r),(s=w(r?.in||a,0)).setFullYear(o,0,i),s.setHours(0,0,0,0),v(s,r)))/6048e5)+1;return"wo"===t?n.ordinalNumber(l,{unit:"week"}):N(l,t.length)},I:function(e,t,n){let r,a,i,o=Math.round((j(r=x(e,void 0))-(a=S(r,void 0),(i=w(r,0)).setFullYear(a,0,4),i.setHours(0,0,0,0),j(i)))/6048e5)+1;return"Io"===t?n.ordinalNumber(o,{unit:"week"}):N(o,t.length)},d:function(e,t,n){return"do"===t?n.ordinalNumber(e.getDate(),{unit:"date"}):M.d(e,t)},D:function(e,t,n){let r,a,i=function(e,t){let[n,r]=b(void 0,e,t),a=p(n),i=p(r);return Math.round((a-y(a)-(i-y(i)))/864e5)}(a=x(e,void 0),((r=x(a,void 0)).setFullYear(r.getFullYear(),0,1),r.setHours(0,0,0,0),r))+1;return"Do"===t?n.ordinalNumber(i,{unit:"dayOfYear"}):N(i,t.length)},E:function(e,t,n){let r=e.getDay();switch(t){case"E":case"EE":case"EEE":return n.day(r,{width:"abbreviated",context:"formatting"});case"EEEEE":return n.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(r,{width:"short",context:"formatting"});default:return n.day(r,{width:"wide",context:"formatting"})}},e:function(e,t,n,r){let a=e.getDay(),i=(a-r.weekStartsOn+8)%7||7;switch(t){case"e":return String(i);case"ee":return N(i,2);case"eo":return n.ordinalNumber(i,{unit:"day"});case"eee":return n.day(a,{width:"abbreviated",context:"formatting"});case"eeeee":return n.day(a,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(a,{width:"short",context:"formatting"});default:return n.day(a,{width:"wide",context:"formatting"})}},c:function(e,t,n,r){let a=e.getDay(),i=(a-r.weekStartsOn+8)%7||7;switch(t){case"c":return String(i);case"cc":return N(i,t.length);case"co":return n.ordinalNumber(i,{unit:"day"});case"ccc":return n.day(a,{width:"abbreviated",context:"standalone"});case"ccccc":return n.day(a,{width:"narrow",context:"standalone"});case"cccccc":return n.day(a,{width:"short",context:"standalone"});default:return n.day(a,{width:"wide",context:"standalone"})}},i:function(e,t,n){let r=e.getDay(),a=0===r?7:r;switch(t){case"i":return String(a);case"ii":return N(a,t.length);case"io":return n.ordinalNumber(a,{unit:"day"});case"iii":return n.day(r,{width:"abbreviated",context:"formatting"});case"iiiii":return n.day(r,{width:"narrow",context:"formatting"});case"iiiiii":return n.day(r,{width:"short",context:"formatting"});default:return n.day(r,{width:"wide",context:"formatting"})}},a:function(e,t,n){let r=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"aaa":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return n.dayPeriod(r,{width:"narrow",context:"formatting"});default:return n.dayPeriod(r,{width:"wide",context:"formatting"})}},b:function(e,t,n){let r,a=e.getHours();switch(r=12===a?"noon":0===a?"midnight":a/12>=1?"pm":"am",t){case"b":case"bb":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"bbb":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return n.dayPeriod(r,{width:"narrow",context:"formatting"});default:return n.dayPeriod(r,{width:"wide",context:"formatting"})}},B:function(e,t,n){let r,a=e.getHours();switch(r=a>=17?"evening":a>=12?"afternoon":a>=4?"morning":"night",t){case"B":case"BB":case"BBB":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"BBBBB":return n.dayPeriod(r,{width:"narrow",context:"formatting"});default:return n.dayPeriod(r,{width:"wide",context:"formatting"})}},h:function(e,t,n){if("ho"===t){let t=e.getHours()%12;return 0===t&&(t=12),n.ordinalNumber(t,{unit:"hour"})}return M.h(e,t)},H:function(e,t,n){return"Ho"===t?n.ordinalNumber(e.getHours(),{unit:"hour"}):M.H(e,t)},K:function(e,t,n){let r=e.getHours()%12;return"Ko"===t?n.ordinalNumber(r,{unit:"hour"}):N(r,t.length)},k:function(e,t,n){let r=e.getHours();return(0===r&&(r=24),"ko"===t)?n.ordinalNumber(r,{unit:"hour"}):N(r,t.length)},m:function(e,t,n){return"mo"===t?n.ordinalNumber(e.getMinutes(),{unit:"minute"}):M.m(e,t)},s:function(e,t,n){return"so"===t?n.ordinalNumber(e.getSeconds(),{unit:"second"}):M.s(e,t)},S:function(e,t){return M.S(e,t)},X:function(e,t,n){let r=e.getTimezoneOffset();if(0===r)return"Z";switch(t){case"X":return D(r);case"XXXX":case"XX":return E(r);default:return E(r,":")}},x:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"x":return D(r);case"xxxx":case"xx":return E(r);default:return E(r,":")}},O:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+P(r,":");default:return"GMT"+E(r,":")}},z:function(e,t,n){let r=e.getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+P(r,":");default:return"GMT"+E(r,":")}},t:function(e,t,n){return N(Math.trunc(e/1e3),t.length)},T:function(e,t,n){return N(+e,t.length)}};function P(e,t=""){let n=e>0?"-":"+",r=Math.abs(e),a=Math.trunc(r/60),i=r%60;return 0===i?n+String(a):n+String(a)+t+N(i,2)}function D(e,t){return e%60==0?(e>0?"-":"+")+N(Math.abs(e)/60,2):E(e,t)}function E(e,t=""){let n=Math.abs(e);return(e>0?"-":"+")+N(Math.trunc(n/60),2)+t+N(n%60,2)}let C=(e,t)=>{switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});default:return t.date({width:"full"})}},L=(e,t)=>{switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});default:return t.time({width:"full"})}},W={p:L,P:(e,t)=>{let n,r=e.match(/(P+)(p+)?/)||[],a=r[1],i=r[2];if(!i)return C(e,t);switch(a){case"P":n=t.dateTime({width:"short"});break;case"PP":n=t.dateTime({width:"medium"});break;case"PPP":n=t.dateTime({width:"long"});break;default:n=t.dateTime({width:"full"})}return n.replace("{{date}}",C(a,t)).replace("{{time}}",L(i,t))}},O=/^D+$/,A=/^Y+$/,I=["D","DD","YY","YYYY"],$=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,F=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,q=/^'([^]*?)'?$/,Y=/''/g,R=/[a-zA-Z]/;function H(e,t,n){let r=n?.locale??f.locale??h,a=n?.firstWeekContainsDate??n?.locale?.options?.firstWeekContainsDate??f.firstWeekContainsDate??f.locale?.options?.firstWeekContainsDate??1,i=n?.weekStartsOn??n?.locale?.options?.weekStartsOn??f.weekStartsOn??f.locale?.options?.weekStartsOn??0,o=x(e,n?.in);if(!(o instanceof Date||"object"==typeof o&&"[object Date]"===Object.prototype.toString.call(o))&&"number"!=typeof o||isNaN(+x(o)))throw RangeError("Invalid time value");let s=t.match(F).map(e=>{let t=e[0];return"p"===t||"P"===t?(0,W[t])(e,r.formatLong):e}).join("").match($).map(e=>{if("''"===e)return{isToken:!1,value:"'"};let t=e[0];if("'"===t){var n;let t;return{isToken:!1,value:(t=(n=e).match(q))?t[1].replace(Y,"'"):n}}if(T[t])return{isToken:!0,value:e};if(t.match(R))throw RangeError("Format string contains an unescaped latin alphabet character `"+t+"`");return{isToken:!1,value:e}});r.localize.preprocessor&&(s=r.localize.preprocessor(o,s));let l={firstWeekContainsDate:a,weekStartsOn:i,locale:r};return s.map(a=>{if(!a.isToken)return a.value;let i=a.value;return(!n?.useAdditionalWeekYearTokens&&A.test(i)||!n?.useAdditionalDayOfYearTokens&&O.test(i))&&function(e,t,n){var r,a,i;let o,s=(r=e,a=t,i=n,o="Y"===r[0]?"years":"days of the month",`Use \`${r.toLowerCase()}\` instead of \`${r}\` (in \`${a}\`) for formatting ${o} to the input \`${i}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`);if(console.warn(s),I.includes(e))throw RangeError(s)}(i,t,String(e)),(0,T[i[0]])(o,i,r.localize,l)}).join("")}function z(e,t){let n=parseInt(e.slice(0,4),10),r=parseInt(e.slice(4,6),10)-1,a=parseInt(e.slice(6,8),10),i=parseInt(t.slice(0,2),10),o=parseInt(t.slice(2,4),10),s=parseInt(t.slice(4,6),10);for(let e of[60,120]){let t=Date.UTC(n,r,a,i,o,s,0)-6e4*e;if(function(e,t){let n=t=>parseInt(new Intl.DateTimeFormat("en-US",{timeZone:t,hour:"2-digit",hour12:!1}).formatToParts(e).find(e=>"hour"===e.type).value,10),r=n("UTC"),a=n(t)-r;return a<-12&&(a+=24),a>12&&(a-=24),60*a}(new Date(t),"Europe/Vienna")===e)return new Date(t)}return new Date(Date.UTC(n,r,a,i,o,s,0)-36e5)}e.s(["format",0,H],1851);var B=e.i(63261);let U=new B.ApiClient,G=new B.ApiClient;function Q(e){let t=new Date,n=Math.floor((e.getTime()-t.getTime())/6e4);if(n<=0)return{label:"Now",color:"red",urgent:!0};if(n<=10)return{label:`${n}min`,color:"orange",urgent:!0};if(n<=30)return{label:`${n}min`,color:"yellow",urgent:!1};if(n<=60)return{label:`${n}min`,color:"green",urgent:!1};let r=Math.floor(n/60);return{label:`${r}h ${n%60}min`,color:"blue",urgent:!1}}function X(e){let t=Math.max(0,Math.round((e.departureTime-Date.now())/6e4));return{stopId:e.stopId,lineName:e.line.name,direction:e.direction,minutes:t}}let J=({children:e,className:t=""})=>(0,o.jsx)("span",{className:`inline-flex items-center px-2 py-1 rounded-full text-xs font-medium bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-200 ${t}`,children:e}),_={red:"text-red-600",orange:"text-orange-600",yellow:"text-yellow-600",green:"text-green-600",blue:"text-blue-600"},V=({countdown:e,className:t=""})=>(0,o.jsx)(J,{className:`${t} ${_[e.color]||""} ${e.urgent?"animate-pulse":""}`,children:e.label}),K=({journeys:e,eventTime:t,className:n=""})=>0===e.length?(0,o.jsx)("div",{className:`text-center py-8 text-gray-500 ${n}`,children:"No journeys found"}):(0,o.jsx)("ul",{className:`space-y-3 ${n}`,children:e.map(e=>(0,o.jsxs)("li",{className:"border-b border-gray-200 pb-3 last:border-b-0 last:pb-0",children:[(0,o.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,o.jsxs)("div",{className:"flex-1",children:[(0,o.jsx)("span",{className:"font-medium",children:e.sD.toLocaleTimeString("de-AT",{hour:"2-digit",minute:"2-digit"})}),(0,o.jsx)("span",{className:"ml-2 text-sm text-gray-500",children:e.platform}),e.delay>0&&(0,o.jsx)("span",{className:"ml-2 text-sm font-medium text-orange-600",children:`+${e.delay}'`})]}),(0,o.jsx)("div",{className:"flex-1 text-right",children:(0,o.jsx)("span",{className:`font-medium ${e.cancelled?"text-red-600":"text-gray-800"}`,children:e.cancelled?"Cancelled":e.trains.join(" → ")})}),(0,o.jsx)("div",{className:"flex-1 text-right",children:(0,o.jsx)(V,{countdown:Q(t)})})]}),(0,o.jsx)("div",{className:"text-sm text-gray-600",children:e.changes>0?(0,o.jsxs)("span",{children:["Change(s): ",e.changes]}):(0,o.jsx)("span",{children:"Direct"})})]},e.id))}),Z=({size:e="md",className:t=""})=>(0,o.jsx)("div",{className:`inline-block animate-spin rounded-full border-4 border-solid border-blue-500 border-t-transparent ${{sm:"w-4 h-4",md:"w-8 h-8",lg:"w-12 h-12"}[e]} ${t}`,children:(0,o.jsx)("span",{className:"sr-only",children:"Loading..."})});var ee=e.i(8639);let et=({journeys:e,eventTime:t,destName:n,loading:r,error:a,onRefresh:i,className:s=""})=>(0,o.jsxs)("div",{className:`bg-white dark:bg-gray-800 rounded-lg shadow-sm overflow-hidden ${s}`,children:[(0,o.jsx)("div",{className:"p-4 border-b border-gray-200 dark:border-gray-700",children:(0,o.jsxs)("div",{className:"flex items-center justify-between",children:[(0,o.jsxs)("div",{children:[(0,o.jsx)("h3",{className:"text-lg font-semibold text-gray-900 dark:text-white",children:"Trains"}),(0,o.jsxs)("p",{className:"text-sm text-gray-600 dark:text-gray-300",children:["To ",n," ",(0,o.jsx)("span",{className:"font-mono",children:t.toLocaleString("de-AT",{day:"numeric",month:"long",year:"numeric",hour:"2-digit",minute:"2-digit"})})]})]}),i&&(0,o.jsx)(ee.default,{variant:"secondary",size:"sm",onClick:i,children:"Refresh"})]})}),(0,o.jsx)("div",{className:"p-0",children:r?(0,o.jsx)("div",{className:"p-8 text-center",children:(0,o.jsx)(Z,{size:"lg"})}):a?(0,o.jsx)("div",{className:"p-8 text-center text-red-600 dark:text-red-400 text-sm",children:a}):(0,o.jsx)(K,{journeys:e,eventTime:t})})]}),en=({bikeRoute:e,bikeLoading:t,bikeError:n,onRefresh:r,className:a=""})=>e||t||n?(0,o.jsxs)("div",{className:`bg-white dark:bg-gray-800 rounded-lg shadow-sm overflow-hidden mt-4 ${a}`,children:[(0,o.jsx)("div",{className:"p-4 border-b border-gray-200 dark:border-gray-700",children:(0,o.jsxs)("div",{className:"flex items-center justify-between",children:[(0,o.jsx)("div",{children:(0,o.jsx)("h3",{className:"text-lg font-semibold text-gray-900 dark:text-white",children:"Bicycle Route"})}),r&&(0,o.jsx)(ee.default,{variant:"secondary",size:"sm",onClick:r,children:"Refresh"})]})}),(0,o.jsx)("div",{className:"p-4",children:t?(0,o.jsx)("div",{className:"text-center py-4",children:(0,o.jsx)(Z,{size:"md"})}):n?(0,o.jsxs)("div",{className:"text-center py-4 text-red-600",children:["Error: ",n]}):e?(0,o.jsxs)("div",{className:"space-y-2",children:[(0,o.jsxs)("div",{className:"flex justify-between",children:[(0,o.jsx)("span",{className:"text-gray-600 dark:text-gray-300",children:"Distance"}),(0,o.jsxs)("span",{className:"font-medium",children:[Math.round(e.distance/1e3)," km (",Math.round(e.distance)," m)"]})]}),(0,o.jsxs)("div",{className:"flex justify-between",children:[(0,o.jsx)("span",{className:"text-gray-600 dark:text-gray-300",children:"Duration"}),(0,o.jsxs)("span",{className:"font-medium",children:[Math.floor(e.duration/60)," min ",e.duration%60," s"]})]}),e.steps&&e.steps.length>0&&(0,o.jsxs)("div",{className:"mt-4",children:[(0,o.jsx)("h4",{className:"font-medium text-gray-800 dark:text-white mb-2",children:"Steps"}),(0,o.jsx)("ul",{className:"space-y-2",children:e.steps.map((e,t)=>(0,o.jsxs)("li",{className:"text-sm",children:[(0,o.jsx)("span",{className:"font-medium text-blue-600 dark:text-blue-400",children:e.name}),(0,o.jsx)("span",{className:"ml-2 text-gray-600 dark:text-gray-300",children:e.instruction})]},t))})]})]}):null})]}):null;function er({stops:e,departures:t,loading:n,error:r,className:a=""}){if(n)return(0,o.jsxs)("div",{className:a,children:[(0,o.jsx)(Z,{}),(0,o.jsx)("p",{className:"mt-2 text-sm text-gray-500 dark:text-gray-400",children:"Loading nearby stops..."})]});if(r)return(0,o.jsx)("div",{className:a,children:(0,o.jsx)("p",{className:"text-sm text-red-600 dark:text-red-400",children:r})});if(0===e.length)return(0,o.jsx)("div",{className:a,children:(0,o.jsx)("p",{className:"text-sm text-gray-500 dark:text-gray-400",children:"No nearby stops found."})});let i=new Map;for(let e of t){let t=e.stopId,n=i.get(t)??[];n.push(e),i.set(t,n)}return(0,o.jsx)("div",{className:a,children:e.map(e=>{let t=i.get(e.id)??[];return(0,o.jsxs)("div",{className:"mb-4 last:mb-0",children:[(0,o.jsx)("h3",{className:"text-sm font-medium text-gray-900 dark:text-gray-100",children:e.name}),0===t.length?(0,o.jsx)("p",{className:"mt-1 text-xs text-gray-400 dark:text-gray-500",children:"No departures available"}):(0,o.jsx)("ul",{className:"mt-1 space-y-1",children:t.map((e,t)=>(0,o.jsxs)("li",{className:"flex items-center gap-2",children:[(0,o.jsx)(J,{children:e.lineName}),(0,o.jsx)("span",{className:"text-sm text-gray-600 dark:text-gray-300",children:e.direction}),(0,o.jsxs)("span",{className:"text-sm font-medium text-gray-900 dark:text-gray-100",children:[e.minutes," min"]})]},`${e.lineName}-${e.direction}-${t}`))})]},e.id)})})}let ea={red:"text-red-600 bg-red-50 dark:bg-red-900/30",orange:"text-orange-600 bg-orange-50 dark:bg-orange-900/30",yellow:"text-yellow-600 bg-yellow-50 dark:bg-yellow-900/30",green:"text-green-600 bg-green-50 dark:bg-green-900/30",blue:"text-blue-600 bg-blue-50 dark:bg-blue-900/30"},ei=({countdown:e,status:t,className:n=""})=>{let r=ea[e.color]||ea.blue,a=e.urgent||"now"===t;return(0,o.jsx)(J,{className:`${n} ${r} ${a?"animate-pulse":""}`,children:e.label})};e.s(["default",0,function({event:e,originStation:t}){let r=function(e){let[t,r]=(0,n.useState)(null),[a,i]=(0,n.useState)(!1),[o,s]=(0,n.useState)(null);return(0,n.useEffect)(()=>{if(!e.trim())return;let t=!0,n=null,a=setTimeout(async()=>{i(!0),s(null),n=new AbortController;try{let a={svcReqL:[{meth:"LocMatch",req:{input:{loc:{name:e,type:"S"},maxLoc:1}}}]},o=await fetch("/api/hafas",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a),signal:n.signal});if(!o.ok){let e=await o.json().catch(()=>({}));throw Error(e.error??`Station lookup failed with status ${o.status}`)}let s=await o.json(),l=(s?.svcResL?.[0]?.res?.match?.locL??[]).filter(e=>"S"===e.type).map(e=>({name:e.name,extId:e.extId}));if(!t)return;r(l[0]??null),i(!1)}catch(e){if(e instanceof DOMException&&"AbortError"===e.name)return;t&&(s(e instanceof Error?e.message:"Station lookup failed"),i(!1))}},400);return()=>{t=!1,clearTimeout(a),n?.abort()}},[e]),{station:t,loading:a,error:o}}(e.destination),{journeys:a,loading:i,error:s}=function(e,t,r,a=0){let[i,o]=(0,n.useState)([]),[s,l]=(0,n.useState)(!1),[u,d]=(0,n.useState)(null);return(0,n.useEffect)(()=>{let n=!0;return(async()=>{if(e&&t&&r){l(!0),d(null);try{var a;let i,s,u,d,{date:c,time:m}=(i=e=>String(e).padStart(2,"0"),s=new Intl.DateTimeFormat("en-US",{timeZone:"Europe/Vienna",year:"numeric",month:"numeric",day:"numeric",hour:"2-digit",minute:"numeric",second:"numeric",hour12:!1}).formatToParts(r),d={year:(u=e=>parseInt(s.find(t=>t.type===e).value,10))("year"),month:u("month"),day:u("day"),hour:u("hour"),minute:u("minute"),second:u("second")},{date:`${d.year}${i(d.month)}${i(d.day)}`,time:`${i(d.hour)}${i(d.minute)}${i(d.second)}000`}),h={svcReqL:[{meth:"TripSearch",req:{depLocL:[{type:"S",extId:e}],arrLocL:[{type:"S",extId:t}],outDate:c,outTime:m,numF:5}}]},f=await fetch("/api/hafas",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(h)});if(!f.ok){let e=await f.json().catch(()=>({}));throw Error(e.error??`HAFAS request failed with status ${f.status}`)}let g=(a=await f.json(),(a?.svcResL?.[0]?.res?.outConL??[]).map((e,t)=>{let n=e.secL?.[0],a=e.secL?.[e.secL.length-1],i=n?.dep,o=a?.arr,s=i?.dTimeS?z(c,i.dTimeS):r,l=i?.dTimeR?z(c,i.dTimeR):s,u=o?.aTimeS?z(c,o.aTimeS):s,d=o?.aTimeR?z(c,o.aTimeR):u,m=Math.max(0,Math.round((l.getTime()-s.getTime())/6e4)),h=(e.secL??[]).filter(e=>e.jny).map(e=>e.jny?.stopL?.[0]?.name??"").filter(Boolean),f=(e.secL??[]).some(e=>e.jny?.isCncl===!0),g=Math.max(0,(e.secL??[]).filter(e=>e.jny).length-1),w=n?.dep?.dPlatfS??"";return{id:e.ctxRecon??`journey-${t}`,sD:s,rD:l,sA:u,rA:d,delay:m,platform:w,changes:g,trains:h,cancelled:f}}));n&&(o(g),l(!1))}catch(e){n&&(d(e instanceof Error?e.message:"Failed to fetch journeys"),l(!1))}}})(),()=>{n=!1}},[e,t,r,a]),{journeys:i,loading:s,error:u}}(t?.extId??null,r.station?.extId??null,e.eventTime,0),l=function(e){let[t,r]=(0,n.useState)(null),[a,i]=(0,n.useState)(!1),[o,s]=(0,n.useState)(null);return(0,n.useEffect)(()=>{if(!e.trim())return;let t=!0,n=null,a=setTimeout(async()=>{i(!0),s(null),n=new AbortController;try{let n=await G.geocode(e,"at");t&&(r({lat:n[0]?.lat??0,lng:n[0]?.lng??0}),i(!1))}catch(e){if(e instanceof DOMException&&"AbortError"===e.name)return;t&&(s(e instanceof Error?e.message:"Geocoding failed"),i(!1))}},400);return()=>{t=!1,clearTimeout(a),n?.abort()}},[e]),{coords:t,loading:a,error:o}}(e.destination),{bikeRoute:u,loading:d,error:c}=function(e,t,r,a){let[i,o]=(0,n.useState)(null),[s,l]=(0,n.useState)(!1),[u,d]=(0,n.useState)(null);return(0,n.useEffect)(()=>{let n=!0;return(async()=>{if(null!=e&&null!=t&&null!=r&&null!=a){l(!0),d(null);try{let i=await U.getBikeRoute(e,t,r,a);n&&(o(i),l(!1))}catch(e){n&&(d(e instanceof Error?e.message:"Failed to fetch bike route"),l(!1))}}})(),()=>{n=!1}},[e,t,r,a]),{bikeRoute:i,loading:s,error:u}}(t?.lat,t?.lng,l.coords?.lat,l.coords?.lng),{stops:m,departures:h,loading:f,error:g}=function(e,t){let[r,a]=(0,n.useState)([]),[i,o]=(0,n.useState)([]),[s,l]=(0,n.useState)(!1),[u,d]=(0,n.useState)(null),c=(0,n.useRef)([]),m=(0,n.useRef)(null),h=(0,n.useRef)(!1),f=(0,n.useCallback)(async(e,t)=>{if(0===e.length)return[];let n=new URLSearchParams;for(let t of e)n.append("stopIds",t);let r=await fetch(`/api/wienerlinien/monitor?${n.toString()}`,{signal:t});if(!r.ok)throw Error((await r.json().catch(()=>({}))).error??"Failed to fetch departures");return(await r.json()).departures??[]},[]);return(0,n.useEffect)(()=>{if(h.current=!1,void 0===e||void 0===t)return void(a([]),o([]),d(null),l(!1));let n=setTimeout(async()=>{if(h.current)return;m.current?.abort();let n=new AbortController;m.current=n;let r=n.signal;l(!0),d(null);try{let n=new URLSearchParams({lat:String(e),lng:String(t)}),i=await fetch(`/api/wienerlinien/stops?${n.toString()}`,{signal:r});if(!i.ok){let e=await i.json().catch(()=>({}));throw Error(e.error??"Failed to fetch nearby stops")}let s=(await i.json()).stops??[];h.current||(a(s),l(!1));let u=s.map(e=>e.id);c.current=u;try{let e=await f(u,r);h.current||o(e.map(X))}catch(e){if(e instanceof DOMException&&"AbortError"===e.name)return;h.current||d(e instanceof Error?e.message:"Failed to fetch departures")}}catch(e){if(e instanceof DOMException&&"AbortError"===e.name)return;h.current||(d(e instanceof Error?e.message:"An unexpected error occurred"),l(!1))}},400);return()=>{h.current=!0,clearTimeout(n),m.current?.abort(),m.current=null}},[e,t,void 0,f]),(0,n.useEffect)(()=>{if(0===r.length)return;let e=setInterval(async()=>{let e=c.current;if(0===e.length)return;let t=new AbortController;try{let n=await f(e,t.signal);h.current||o(n.map(X))}catch{}},6e4);return()=>clearInterval(e)},[r.length,f]),{stops:r,departures:i,loading:s,error:u}}(l.coords?.lat,l.coords?.lng),{countdown:w,status:x}=function(e){let[t,r]=(0,n.useState)(new Date);return(0,n.useEffect)(()=>{let e=setInterval(()=>{r(new Date)},1e4);return()=>clearInterval(e)},[]),(0,n.useMemo)(()=>{let n=Q(e),r=e.getTime()-t.getTime();return{countdown:n,status:r<=0||r<=6e5?"now":"upcoming"}},[e,t])}(e.eventTime);return(0,o.jsxs)("div",{className:"rounded-lg border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-700 dark:bg-gray-800",children:[(0,o.jsxs)("div",{className:"mb-3 flex items-center justify-between",children:[(0,o.jsx)("h3",{className:"text-lg font-semibold text-gray-900 dark:text-white",children:e.title}),(0,o.jsx)(ei,{countdown:w,status:x})]}),(0,o.jsxs)("div",{className:"mb-2 text-sm text-gray-600 dark:text-gray-300",children:[(0,o.jsx)("span",{className:"font-medium",children:"Destination:"})," ",e.destination]}),(0,o.jsxs)("div",{className:"mb-4 text-sm text-gray-600 dark:text-gray-300",children:[(0,o.jsx)("span",{className:"font-medium",children:"Time:"})," ",H(e.eventTime,"EEE dd MMM yyyy HH:mm")]}),(0,o.jsxs)("div",{className:"space-y-4",children:[(0,o.jsx)(et,{journeys:a,eventTime:e.eventTime,destName:e.destination,loading:i,error:s}),(0,o.jsx)(en,{bikeRoute:u,bikeLoading:d,bikeError:c}),m.length>0&&(0,o.jsx)(er,{stops:m,departures:h,loading:f,error:g})]})]})}],20264)}]); |