{"version":3,"file":"js/application-f7578d91c81119ad2f05.js","mappings":"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","sources":["webpack://app/./app/javascript/config/locales/en-GB.js","webpack://app/./app/javascript/config/locales/nb.js","webpack://app/./app/javascript/config/locales/zh-Hans.js","webpack://app/./app/javascript/config/locales/index.js","webpack://app/./app/javascript/config/locales/da.js","webpack://app/./app/javascript/config/locales/de.js","webpack://app/./app/javascript/config/locales/en.js","webpack://app/./app/javascript/config/locales/es.js","webpack://app/./app/javascript/config/locales/fr.js","webpack://app/./app/javascript/config/locales/it.js","webpack://app/./app/javascript/config/locales/ja.js","webpack://app/./app/javascript/config/locales/ko.js","webpack://app/./app/javascript/config/locales/nl.js","webpack://app/./app/javascript/config/locales/pt.js","webpack://app/./app/javascript/config/locales/zh-Hant.js","webpack://app/./app/javascript/config/datetime.js","webpack://app/./app/javascript/bundles/stations/current/Now.js","webpack://app/./app/javascript/bundles/stations/current/Week.js","webpack://app/./app/javascript/bundles/stations/current/Map.js","webpack://app/./app/javascript/bundles/home/Breadcrumbs.js","webpack://app/./app/javascript/bundles/home/MobileStoreButtons.js","webpack://app/./app/javascript/bundles/stations/current/index.js","webpack://app/./app/javascript/bundles/locations/TideStations.js","webpack://app/./app/javascript/bundles/locations/CurrentStations.js","webpack://app/./app/javascript/bundles/locations/Countries.js","webpack://app/./app/javascript/bundles/locations/States.js","webpack://app/./app/javascript/bundles/locations/Cities.js","webpack://app/./app/javascript/bundles/locations/index.js","webpack://app/./app/javascript/bundles/locations/Map.js","webpack://app/./app/javascript/bundles/home/Title.js","webpack://app/./app/javascript/bundles/home/index.js","webpack://app/./app/javascript/bundles/home/Privacy.js","webpack://app/./app/javascript/bundles/home/Support.js","webpack://app/./app/javascript/bundles/home/Terms.js","webpack://app/./app/javascript/bundles/stations/tide/Now.js","webpack://app/./app/javascript/bundles/stations/tide/Week.js","webpack://app/./app/javascript/bundles/stations/tide/Map.js","webpack://app/./app/javascript/bundles/stations/tide/index.js","webpack://app/./app/javascript/bundles/AppNavigation.jsx","webpack://app/./app/javascript/bundles/App.jsx","webpack://app/./app/javascript/packs/application.js","webpack://app/./node_modules/moment/locale/ sync ^\\.\\/.*$"],"sourcesContent":["export default {\n  translation: {\n    app_name: \"Tides Near Me\",\n    app_version: \"App Version\",\n    attribution_body:\n      \"Map data © OpenStreetMap contributors\\n\\nMap layer by Esri\",\n    attribution_title: \"Attribution\",\n    by_country: \"By Country\",\n    cities: \"Cities\",\n    clear_recent_currents: \"Clear Recent Current Stations\",\n    clear_recent_tides: \"Clear Recent Tide Stations\",\n    connection_error: \"Connection Error\",\n    contact_support: \"Contact Support\",\n    current_station: \"Current Station\",\n    current_stations: \"Current Stations\",\n    currents: \"Currents\",\n    distance: \"Distance\",\n    ebb: \"Ebb\",\n    favorite_currents: \"Favourite Currents\",\n    favorite_tides: \"Favourite Tides\",\n    flood: \"Flood\",\n    following_current: \"Following Current\",\n    hide: \"hide\",\n    high: \"High\",\n    home: \"Home\",\n    hour_ago: \"{{hour}} hour ago\",\n    hour_from_now: \"{{hour}} hour from now\",\n    hour_minute_ago: \"{{hour}} hour, {{minute}} minute ago\",\n    hour_minute_from_now: \"{{hour}} hour, {{minute}} minute from now\",\n    hour_minutes_ago: \"{{hour}} hour, {{minute}} minutes ago\",\n    hour_minutes_from_now: \"{{hour}} hour, {{minute}} minutes from now\",\n    hours_ago: \"{{hour}} hours ago\",\n    hours_from_now: \"{{hour}} hours from now\",\n    hours_minute_ago: \"{{hour}} hours, {{minute}} minute ago\",\n    hours_minute_from_now: \"{{hour}} hours, {{minute}} minute from now\",\n    hours_minutes_ago: \"{{hour}} hours, {{minute}} minutes ago\",\n    hours_minutes_from_now: \"{{hour}} hours, {{minute}} minutes from now\",\n    just_now: \"Just now\",\n    kms: \"kms\",\n    kms_away: \"{{distance}} kms away\",\n    knots: \"kts\",\n    last_current: \"Last Current\",\n    last_tide: \"Last Tide\",\n    loading: \"Loading...\",\n    low: \"Low\",\n    map: \"Map\",\n    meters: \"m\",\n    miles: \"miles\",\n    miles_away: \"{{distance}} miles away\",\n    minute_ago: \"{{minute}} minute ago\",\n    minute_from_now: \"{{minute}} minute from now\",\n    minutes_ago: \"{{minute}} minutes ago\",\n    minutes_from_now: \"{{minute}} minutes from now\",\n    moon: \"Moon\",\n    moonrise_now: \"Moonrise\",\n    moonrise_week: \"Rise\",\n    moonset_now: \"Moonset\",\n    moonset_week: \"Set\",\n    nearby_currents: \"Nearby Currents\",\n    nearby_tides: \"Nearby Tides\",\n    next_current: \"Next Current\",\n    next_tide: \"Next Tide\",\n    now: \"Now\",\n    recent_currents: \"Recent Currents\",\n    recent_tides: \"Recent Tides\",\n    recents: \"Recents\",\n    search: \"Search\",\n    search_placeholder: \"Search for tide stations\",\n    settings: \"Settings\",\n    show: \"show\",\n    slack: \"Slack\",\n    somethings_wrong: \"Something's Wrong\",\n    states: \"States\",\n    sun: \"Sun\",\n    sunrise_now: \"Sunrise\",\n    sunrise_week: \"Rise\",\n    sunset_now: \"Sunset\",\n    sunset_week: \"Set\",\n    this_station: \"This station\",\n    tide_station: \"Tide Station\",\n    tide_stations: \"Tide Stations\",\n    tides: \"Tides\",\n    today: \"Today\",\n    tomorrow: \"Tomorrow\",\n    try_again: \"Try Again\",\n    turn_off_ads: \"Turn off ads for three days\",\n    unit: \"Unit\",\n    watch_rewarded_video: \"Watch Rewarded Video\",\n    week: \"Week\"\n  }\n};\n","export default {\n  translation: {\n    app_name: \"Tidevann i nærheten\",\n    app_version: \"Appversjon\", // google translate\n    attribution_body:\n      \"Map data © OpenStreetMap contributors\\n\\nMap layer by Esri\",\n    attribution_title: \"Tillegg\",\n    by_country: \"Etter land\",\n    cities: \"Administrative grenser\",\n    clear_recent_currents: \"Fjern nylige havstrømsstasjoner\",\n    clear_recent_tides: \"Fjern nylige tidevannsstasjoner\",\n    connection_error: \"Tilkoblingsfeil\",\n    contact_support: \"Contact Support\",\n    current_station: \"Gjeldende stasjon\",\n    current_stations: \"Havstrømsstasjoner\",\n    currents: \"Havstrømmer\",\n    distance: \"Avstand\",\n    ebb: \"Fjære\",\n    favorite_currents: \"Havstrømmer i favoritter\",\n    favorite_tides: \"Tidevann i favoritter\",\n    flood: \"Flom\",\n    following_current: \"Kommende havstrøm\",\n    hide: \"gjemme seg\", // google translate\n    high: \"Høy\",\n    home: \"Hjem\",\n    hour_ago: \"{{hour}} time siden\",\n    hour_from_now: \"{{hour}} time fra nå\",\n    hour_minute_ago: \"{{hour}} time og {{minute}} minutt siden\",\n    hour_minute_from_now: \"{{hour}} time og {{minute}} minutt fra nå\",\n    hour_minutes_ago: \"{{hour}} time og {{minute}} minutter siden\",\n    hour_minutes_from_now: \"{{hour}} time og {{minute}} minutter fra nå\",\n    hours_ago: \"{{hour}} timer siden\",\n    hours_from_now: \"{{hour}} timer fra nå\",\n    hours_minute_ago: \"{{hour}} timer og {{minute}} minutt siden\",\n    hours_minute_from_now: \"{{hour}} timer og {{minute}} minutt fra nå\",\n    hours_minutes_ago: \"{{hour}} timer og {{minute}} minutter siden\",\n    hours_minutes_from_now: \"{{hour}} timer og {{minute}} minutter fra nå\",\n    just_now: \"Akkurat nå\",\n    kms: \"km\",\n    kms_away: \"{{distance}} kilometer unna\",\n    knots: \"knop\",\n    last_current: \"Forrige havstrøm\",\n    last_tide: \"Forrige tidevann\",\n    loading: \"Laster…\",\n    low: \"Lav\",\n    map: \"Kart\",\n    meters: \"m\",\n    miles: \"miles\",\n    miles_away: \"{{distance}} miles unna\",\n    minute_ago: \"{{minute}} minutt siden\",\n    minute_from_now: \"{{minute}} minutt fra nå\",\n    minutes_ago: \"{{minute}} minutt siden\",\n    minutes_from_now: \"{{minute}} minutter fra nå\",\n    moon: \"Måne\",\n    moonrise_now: \"Måneoppgang\",\n    moonrise_week: \"Oppgang\",\n    moonset_now: \"Månenedgang\",\n    moonset_week: \"Nedgang\",\n    nearby_currents: \"Havstrømmer i nærheten\",\n    nearby_tides: \"Tidevann i nærheten\",\n    next_current: \"Neste havstrøm\",\n    next_tide: \"Neste tidevann\",\n    now: \"Nå\",\n    recent_currents: \"Nylige havstrømmer\",\n    recent_tides: \"Nylige tidevann\",\n    recents: \"siste\", // google translate\n    search: \"Søk\",\n    search_placeholder: \"Søk etter tidevannsstasjoner\",\n    settings: \"Innstillinger\",\n    show: \"vise fram\", // google translate\n    slack: \"Stille vann\",\n    somethings_wrong: \"Noe er galt\",\n    states: \"Byer\",\n    sun: \"Sol\",\n    sunrise_now: \"Soloppgang\",\n    sunrise_week: \"Oppgang\",\n    sunset_now: \"Solnedgang\",\n    sunset_week: \"Nedgang\",\n    this_station: \"Denne stasjonen\",\n    tide_station: \"Tidevannstasjon\",\n    tide_stations: \"Tidevannsstasjoner\",\n    tides: \"Tidevann\",\n    today: \"I dag\",\n    tomorrow: \"I morgen\",\n    try_again: \"Prøv igjen\",\n    turn_off_ads: \"Slå av annonser i tre dager\", // google translate\n    unit: \"Måleenhet\",\n    watch_rewarded_video: \"Se belønnet video\", // google translate\n    week: \"Uke\"\n  }\n};\n","export default {\n  translation: {\n    app_name: \"潮汐在身边\",\n    app_version: \"应用版本\",\n    attribution_body:\n      \"Map data © OpenStreetMap contributors\\n\\nMap layer by Esri\",\n    attribution_title: \"属性\",\n    by_country: \"按国家/地区\",\n    cities: \"城市\",\n    clear_recent_currents: \"清空最近的潮流站\",\n    clear_recent_tides: \"清空最近的潮汐站\",\n    connection_error: \"连接错误\",\n    contact_support: \"联系支持部门\",\n    current_station: \"潮流站\",\n    current_stations: \"潮流站\",\n    currents: \"近的潮流\",\n    distance: \"距离\",\n    ebb: \"潮退\",\n    favorite_currents: \"喜爱的潮流\",\n    favorite_tides: \"喜爱的潮汐\",\n    flood: \"顺流\",\n    following_current: \"顺流\",\n    hide: \"隐藏\",\n    high: \"高位\",\n    home: \"主页\",\n    hour_ago: \"{{hour}} 小时前\",\n    hour_from_now: \"{{hour}} 小时后\",\n    hour_minute_ago: \"{{hour}} 小时 {{minute}} 分钟前\",\n    hour_minute_from_now: \"{{hour}} 小时 {{minute}} 分钟后\",\n    hour_minutes_ago: \"{{hour}} 小时 {{minute}} 分钟前\",\n    hour_minutes_from_now: \"{{hour}} 小时 {{minute}} 分钟后\",\n    hours_ago: \"{{hour}} 小时前\",\n    hours_from_now: \"{{hour}} 小时后\",\n    hours_minute_ago: \"{{hour}} 小时 {{minute}} 分钟前\",\n    hours_minute_from_now: \"{{hour}} 小时 {{minute}} 分钟后\",\n    hours_minutes_ago: \"{{hour}} 小时 {{minute}} 分钟前\",\n    hours_minutes_from_now: \"{{hour}} 小时 {{minute}} 分钟后\",\n    just_now: \"刚刚\",\n    kms: \"公里\",\n    kms_away: \"{{distance}} 公里远\",\n    knots: \"结\",\n    last_current: \"上次潮流\",\n    last_tide: \"上次潮汐\",\n    loading: \"正在加载\",\n    low: \"低位\",\n    map: \"地图\",\n    meters: \"米\",\n    miles: \"英里\",\n    miles_away: \"{{distance}} 英里远\",\n    minute_ago: \"{{minute}} 分钟前\",\n    minute_from_now: \"{{minute}} 分钟后\",\n    minutes_ago: \"{{minute}} 分钟前\",\n    minutes_from_now: \"{{minute}} 分钟后\",\n    moon: \"月亮\",\n    moonrise_now: \"月出\",\n    moonrise_week: \"月出\",\n    moonset_now: \"月落\",\n    moonset_week: \"月落\",\n    nearby_currents: \"附近的潮流\",\n    nearby_tides: \"附近的潮汐\",\n    next_current: \"下次潮流\",\n    next_tide: \"下次潮汐\",\n    now: \"现在\",\n    recent_currents: \"最近的潮流\",\n    recent_tides: \"最近的潮汐\",\n    recents: \"最近的\",\n    search: \"搜索\",\n    search_placeholder: \"搜索潮汐站\",\n    settings: \"设置\",\n    show: \"显示\",\n    slack: \"潮憩\",\n    somethings_wrong: \"发生错误\",\n    states: \"州/省\",\n    sun: \"太阳\",\n    sunrise_now: \"日出\",\n    sunrise_week: \"日出\",\n    sunset_now: \"日落\",\n    sunset_week: \"日落\",\n    this_station: \"此站\",\n    tide_station: \"潮汐站\",\n    tide_stations: \"潮汐站\",\n    tides: \"潮汐\",\n    today: \"今天\",\n    tomorrow: \"明天\",\n    try_again: \"再试一次\",\n    turn_off_ads: \"关闭广告三天\",\n    unit: \"单位\",\n    watch_rewarded_video: \"观看有奖视频\",\n    week: \"周\"\n  }\n};\n","import i18n from \"i18next\";\nimport { initReactI18next } from \"react-i18next\";\nimport Backend from \"i18next-http-backend\";\nimport LanguageDetector from \"i18next-browser-languagedetector\";\n\nimport da from \"./da\";\nimport de from \"./de\";\nimport en from \"./en\";\nimport enGB from \"./en-GB\";\nimport es from \"./es\";\nimport fr from \"./fr\";\nimport it from \"./it\";\nimport ja from \"./ja\";\nimport ko from \"./ko\";\nimport nl from \"./nl\";\nimport nb from \"./nb\";\nimport pt from \"./pt\";\nimport zhHans from \"./zh-Hans\";\nimport zhHant from \"./zh-Hant\";\n\ni18n\n  .use(Backend)\n  .use(LanguageDetector)\n  .use(initReactI18next)\n  .init({\n    fallbackLng: \"en\",\n    debug: true,\n    resources: {\n      da: da,\n      de: de,\n      en: en,\n      \"en-AU\": enGB,\n      \"en-CA\": enGB,\n      \"en-GB\": enGB,\n      \"en-IN\": enGB,\n      es: es,\n      fr: fr,\n      it: it,\n      ja: ja,\n      ko: ko,\n      nl: nl,\n      nb: nb,\n      nn: nb,\n      no: nb,\n      pt: pt,\n      zh: zhHans,\n      \"zh-Hans\": zhHans,\n      \"zh-Hant\": zhHant,\n    },\n    interpolation: {\n      escapeValue: false,\n    },\n    react: {\n      useSuspense: false,\n    },\n  });\n\nexport default i18n;\n","export default {\n  translation: {\n    app_name: \"Tidevand nær mig\",\n    app_version: \"App-version\",\n    attribution_body:\n      \"Map data © OpenStreetMap contributors\\n\\nMap layer by Esri\",\n    attribution_title: \"Bidrag\",\n    by_country: \"Efter land\",\n    cities: \"Byer\",\n    clear_recent_currents: \"Ryd nylige strømstationer\",\n    clear_recent_tides: \"Ryd nylige tidevandsstationer\",\n    connection_error: \"Forbindelsesfejl\",\n    contact_support: \"Kontakt support\",\n    current_station: \"Strømstation\",\n    current_stations: \"Strømstationer\",\n    currents: \"Strømme\",\n    distance: \"Afstand\",\n    ebb: \"Ebbe\",\n    favorite_currents: \"Favorit strømme\",\n    favorite_tides: \"Favorit tidevande\",\n    flood: \"Flod\",\n    following_current: \"Følgende strøm\",\n    hide: \"skjul\",\n    high: \"Højvande\",\n    home: \"Startside\",\n    hour_ago: \"{{hour}} time siden\",\n    hour_from_now: \"{{hour}} time fra nu\",\n    hour_minute_ago: \"{{hour}} time, {{minute}} minut siden\",\n    hour_minute_from_now: \"{{hour}} time, {{minute}} minut fra nu\",\n    hour_minutes_ago: \"{{hour}} time, {{minute}} minutter siden\",\n    hour_minutes_from_now: \"{{hour}} time, {{minute}} minutter fra nu\",\n    hours_ago: \"{{hour}} timer siden\",\n    hours_from_now: \"{{hour}} timer fra nu\",\n    hours_minute_ago: \"{{hour}} timer, {{minute}} minut siden\",\n    hours_minute_from_now: \"{{hour}} timer, {{minute}} minut fra nu\",\n    hours_minutes_ago: \"{{hour}} timer, {{minute}} minutter siden\",\n    hours_minutes_from_now: \"{{hour}} timer, {{minute}} minutter fra nu\",\n    just_now: \"Lige nu\",\n    kms: \"km\",\n    kms_away: \"{{distance}} km væk\",\n    knots: \"kn\",\n    last_current: \"Forrige strøm\",\n    last_tide: \"Sidste lavvande\",\n    loading: \"Indlæser...\",\n    low: \"Lavvande\",\n    map: \"Kort\",\n    meters: \"m\",\n    miles: \"mil\",\n    miles_away: \"{{distance}} mil væk\",\n    minute_ago: \"{{minute}} minut siden\",\n    minute_from_now: \"{{minute}} minut fra nu\",\n    minutes_ago: \"{{minute}} minutter siden\",\n    minutes_from_now: \"{{minute}} minutter fra nu\",\n    moon: \"Måne\",\n    moonrise_now: \"Månen står op\",\n    moonrise_week: \"Opgang\",\n    moonset_now: \"Månen går ned\",\n    moonset_week: \"Nedgang\",\n    nearby_currents: \"Kommende strømme\",\n    nearby_tides: \"Kommende tidevand\",\n    next_current: \"Næste strøm\",\n    next_tide: \"Næste tidevand\",\n    now: \"Nu\",\n    recent_currents: \"Nylige strømme\",\n    recent_tides: \"Nylige tidevand\",\n    recents: \"Nylige\",\n    search: \"Søg\",\n    search_placeholder: \"Søg efter tidevandsstationer\",\n    settings: \"Indstillinger\",\n    show: \"vis\",\n    slack: \"Stillestående vand\",\n    somethings_wrong: \"Der opstod en fejl\",\n    states: \"Stater\",\n    sun: \"Sol\",\n    sunrise_now: \"Solopgang\",\n    sunrise_week: \"Opgang\",\n    sunset_now: \"Solnedgang\",\n    sunset_week: \"Nedgang\",\n    this_station: \"Denne station\",\n    tide_station: \"Tidevandsstation\",\n    tide_stations: \"Tidevandsstationer\",\n    tides: \"Tidevand\",\n    today: \"I dag\",\n    tomorrow: \"I morgen\",\n    try_again: \"Forsøg igen\",\n    turn_off_ads: \"Slå reklamer fra i tre dage\",\n    unit: \"Enhed\",\n    watch_rewarded_video: \"Se belønnet video\",\n    week: \"Uge\"\n  }\n};\n","export default {\n  translation: {\n    app_name: \"Gezeiten in meiner Nähe\",\n    app_version: \"App-Version\",\n    attribution_body:\n      \"Map data © OpenStreetMap contributors\\n\\nMap layer by Esri\",\n    attribution_title: \"Attribute\",\n    by_country: \"Nach Land\",\n    cities: \"Bundesländer\",\n    clear_recent_currents: \"Neuste Strömungsstationen löschen\",\n    clear_recent_tides: \"Neuste Gezeitenstationen löschen\",\n    connection_error: \"Verbindungsfehler\",\n    contact_support: \"Support kontaktieren\",\n    current_station: \"Strömungsstation\",\n    current_stations: \"Strömungsstationen\",\n    currents: \"Meeresströmungen\",\n    distance: \"Entfernung\",\n    ebb: \"Ebbe\",\n    favorite_currents: \"Lieblingsströme\",\n    favorite_tides: \"Lieblingsgezeiten\",\n    flood: \"Flut\",\n    following_current: \"Darauf folgende Meeresströmung\",\n    hide: \"verbergen\",\n    high: \"Hoch\",\n    home: \"Startseite\",\n    hour_ago: \"vor {{hour}} Stunde\",\n    hour_from_now: \"in {{hour}} Stunde ab jetzt\",\n    hour_minute_ago: \"vor {{hour}} Stunde und {{minute}} Minute\",\n    hour_minute_from_now: \"in {{hour}} Stunde und {{minute}} Minute ab jetzt\",\n    hour_minutes_ago: \"vor {{hour}} Stunde und {{minute}} Minuten\",\n    hour_minutes_from_now: \"in {{hour}} Stunde und {{minute}} Minuten ab jetzt\",\n    hours_ago: \"vor {{hour}} Stunden\",\n    hours_from_now: \"in {{hour}} Stunden ab jetzt\",\n    hours_minute_ago: \"vor {{hour}} Stunden und {{minute}} Minute\",\n    hours_minute_from_now: \"in {{hour}} Stunden und {{minute}} Minute ab jetzt\",\n    hours_minutes_ago: \"vor {{hour}} Stunden und {{minute}} Minuten\",\n    hours_minutes_from_now:\n      \"in {{hour}} Stunden und {{minute}} Minuten ab jetzt\",\n    just_now: \"Gerade eben\",\n    kms: \"km\",\n    kms_away: \"{{distance}} km entfernt\",\n    knots: \"Knoten\",\n    last_current: \"Vorhergehende Meeresströmung\",\n    last_tide: \"Vorhergehende Gezeiten\",\n    loading: \"Wird geladen...\",\n    low: \"Niedrig\",\n    map: \"Karte\",\n    meters: \"m\",\n    miles: \"Meilen\",\n    miles_away: \"{{distance}} Meilen entfernt\",\n    minute_ago: \"vor {{minute}} Minute\",\n    minute_from_now: \"in {{minute}} Minute ab jetzt\",\n    minutes_ago: \"vor {{minute}} Minuten\",\n    minutes_from_now: \"in {{minute}} Minuten ab jetzt\",\n    moon: \"Mond\",\n    moonrise_now: \"Mondaufgang\",\n    moonrise_week: \"Aufgang\",\n    moonset_now: \"Monduntergang\",\n    moonset_week: \"Untergang\",\n    nearby_currents: \"Meeresströmungen in der Nähe\",\n    nearby_tides: \"Gezeiten in der Nähe\",\n    next_current: \"Nächste Meeresströmung\",\n    next_tide: \"Nächste Gezeiten\",\n    now: \"Jetzt\",\n    recent_currents: \"Neuste Meeresströmungen\",\n    recent_tides: \"Neuste Gezeiten\",\n    recents: \"Neuste\",\n    search: \"Suchen\",\n    search_placeholder: \"Suche nach Gezeitenstationen\",\n    settings: \"Einstellungen\",\n    show: \"anzeigen\",\n    slack: \"Stauwasser\",\n    somethings_wrong: \"Es ist ein Fehler aufgetreten\",\n    states: \"Städte\",\n    sun: \"Sonne\",\n    sunrise_now: \"Sonnenaufgang\",\n    sunrise_week: \"Aufgang\",\n    sunset_now: \"Sonnenuntergang\",\n    sunset_week: \"Untergang\",\n    this_station: \"Diese Station\",\n    tide_station: \"Gezeitenstation\",\n    tide_stations: \"Gezeitenstationen\",\n    tides: \"Gezeiten\",\n    today: \"Heute\",\n    tomorrow: \"Morgen\",\n    try_again: \"Erneut versuchen\",\n    turn_off_ads: \"Werbung für drei Tage entfernen\",\n    unit: \"Einheit\",\n    watch_rewarded_video: \"Belohnungsvideo anschauen\",\n    week: \"Woche\"\n  }\n};\n","export default {\n  translation: {\n    app_name: \"Tides Near Me\",\n    app_version: \"App Version\",\n    attribution_body:\n      \"Map data © OpenStreetMap contributors\\n\\nMap layer by Esri\",\n    attribution_title: \"Attribution\",\n    by_country: \"By Country\",\n    cities: \"Cities\",\n    clear_recent_currents: \"Clear Recent Current Stations\",\n    clear_recent_tides: \"Clear Recent Tide Stations\",\n    connection_error: \"Connection Error\",\n    contact_support: \"Contact Support\",\n    contact_support: \"Contact Support\",\n    current_station: \"Current Station\",\n    current_stations: \"Current Stations\",\n    currents: \"Currents\",\n    distance: \"Distance\",\n    ebb: \"Ebb\",\n    favorite_currents: \"Favorite Currents\",\n    favorite_tides: \"Favorite Tides\",\n    flood: \"Flood\",\n    following_current: \"Following Current\",\n    hide: \"hide\",\n    hide: \"hide\",\n    high: \"High\",\n    home: \"Home\",\n    hour_ago: \"{{hour}} hour ago\",\n    hour_from_now: \"{{hour}} hour from now\",\n    hour_minute_ago: \"{{hour}} hour, {{minute}} minute ago\",\n    hour_minute_from_now: \"{{hour}} hour, {{minute}} minute from now\",\n    hour_minutes_ago: \"{{hour}} hour, {{minute}} minutes ago\",\n    hour_minutes_from_now: \"{{hour}} hour, {{minute}} minutes from now\",\n    hours_ago: \"{{hour}} hours ago\",\n    hours_from_now: \"{{hour}} hours from now\",\n    hours_minute_ago: \"{{hour}} hours, {{minute}} minute ago\",\n    hours_minute_from_now: \"{{hour}} hours, {{minute}} minute from now\",\n    hours_minutes_ago: \"{{hour}} hours, {{minute}} minutes ago\",\n    hours_minutes_from_now: \"{{hour}} hours, {{minute}} minutes from now\",\n    just_now: \"Just now\",\n    kms: \"kms\",\n    kms_away: \"{{distance}} kms away\",\n    knots: \"kts\",\n    last_current: \"Last Current\",\n    last_tide: \"Last Tide\",\n    loading: \"Loading...\",\n    low: \"Low\",\n    map: \"Map\",\n    meters: \"m\",\n    miles: \"miles\",\n    miles_away: \"{{distance}} miles away\",\n    minute_ago: \"{{minute}} minute ago\",\n    minute_from_now: \"{{minute}} minute from now\",\n    minutes_ago: \"{{minute}} minutes ago\",\n    minutes_from_now: \"{{minute}} minutes from now\",\n    moon: \"Moon\",\n    moonrise_now: \"Moonrise\",\n    moonrise_week: \"Rise\",\n    moonset_now: \"Moonset\",\n    moonset_week: \"Set\",\n    nearby_currents: \"Nearby Currents\",\n    nearby_tides: \"Nearby Tides\",\n    next_current: \"Next Current\",\n    next_tide: \"Next Tide\",\n    now: \"Now\",\n    recent_currents: \"Recent Currents\",\n    recent_tides: \"Recent Tides\",\n    recents: \"Recents\",\n    recents: \"Recents\",\n    search: \"Search\",\n    search_placeholder: \"Search for tide stations\",\n    settings: \"Settings\",\n    show: \"show\",\n    show: \"show\",\n    slack: \"Slack\",\n    somethings_wrong: \"Something's Wrong\",\n    states: \"States\",\n    subtitle: \"Find Nearby Tides and Currents\",\n    sun: \"Sun\",\n    sunrise_now: \"Sunrise\",\n    sunrise_week: \"Rise\",\n    sunset_now: \"Sunset\",\n    sunset_week: \"Set\",\n    this_station: \"This station\",\n    tide_station: \"Tide Station\",\n    tide_stations: \"Tide Stations\",\n    tides: \"Tides\",\n    today: \"Today\",\n    tomorrow: \"Tomorrow\",\n    try_again: \"Try Again\",\n    turn_off_ads: \"Turn off ads for three days\",\n    unit: \"Unit\",\n    watch_rewarded_video: \"Watch Rewarded Video\",\n    week: \"Week\",\n  },\n};\n","export default {\n  translation: {\n    app_name: \"Mareas cercanas\",\n    app_version: \"Versión de la aplicación\",\n    attribution_body:\n      \"Map data © OpenStreetMap contributors\\n\\nMap layer by Esri\",\n    attribution_title: \"Attribution\",\n    by_country: \"Por país\",\n    cities: \"Estados\",\n    clear_recent_currents: \"Borrar estaciones de corrientes recientes\",\n    clear_recent_tides: \"Borrar estaciones de mareas recientes\",\n    connection_error: \"Error de conexión\",\n    contact_support: \"Contactar con la asistencia\",\n    current_station: \"Estación de corrientes\",\n    current_stations: \"Estaciones de corrientes\",\n    currents: \"Corrientes\",\n    distance: \"Distancia\",\n    ebb: \"Reflujo\",\n    favorite_currents: \"Corrientes favoritas\",\n    favorite_tides: \"Mareas favoritas\",\n    flood: \"Flujo\",\n    following_current: \"Siguiente corriente\",\n    hide: \"ocultar\",\n    high: \"Alta\",\n    home: \"Home\",\n    hour_ago: \"Hace {{hour}} hora\",\n    hour_from_now: \"Dentro de {{hour}} hora\",\n    hour_minute_ago: \"Hace {{hour}} hora y {{minute}} minuto\",\n    hour_minute_from_now: \"Dentro de {{hour}} hora y {{minute}} minuto\",\n    hour_minutes_ago: \"Hace {{hour}} hora y {{minute}} minutos\",\n    hour_minutes_from_now: \"Dentro de {{hour}} hora y {{minute}} minutos\",\n    hours_ago: \"Hace {{hour}} horas\",\n    hours_from_now: \"Dentro de {{hour}} horas\",\n    hours_minute_ago: \"Hace {{hour}} horas y {{minute}} minuto\",\n    hours_minute_from_now: \"Dentro de {{hour}} horas y {{minute}} minuto\",\n    hours_minutes_ago: \"Hace {{hour}} horas y {{minute}} minutos\",\n    hours_minutes_from_now: \"Dentro de {{hour}} horas y {{minute}} minutos\",\n    just_now: \"Ahora mismo\",\n    kms: \"km\",\n    kms_away: \"A {{distance}} km\",\n    knots: \"kts\",\n    last_current: \"Última corriente\",\n    last_tide: \"Última marea\",\n    loading: \"Cargando...\",\n    low: \"Baja\",\n    map: \"Mapa\",\n    meters: \"m\",\n    miles: \"millas\",\n    miles_away: \"A {{distance}} millas\",\n    minute_ago: \"Hace {{minute}} minuto\",\n    minute_from_now: \"Dentro de {{minute}} minuto\",\n    minutes_ago: \"Hace {{minute}} minutos\",\n    minutes_from_now: \"Dentro de {{minute}} minutos\",\n    moon: \"Luna\",\n    moonrise_now: \"Salida de la luna\",\n    moonrise_week: \"Salida\",\n    moonset_now: \"Puesta de la luna\",\n    moonset_week: \"Puesta\",\n    nearby_currents: \"Corrientes cercanas\",\n    nearby_tides: \"Mareas cercanas\",\n    next_current: \"Próxima corriente\",\n    next_tide: \"Próxima marea\",\n    now: \"Ahora\",\n    recent_currents: \"Corrientes recientes\",\n    recent_tides: \"Mareas recientes\",\n    recents: \"Recientes\",\n    search: \"Search\",\n    search_placeholder: \"Buscar estaciones de mareas\",\n    settings: \"Ajustes\",\n    show: \"mostrar\",\n    slack: \"Estoa\",\n    somethings_wrong: \"Se ha producido un error\",\n    states: \"Ciudades\",\n    sun: \"Sol\",\n    sunrise_now: \"Amanecer\",\n    sunrise_week: \"Salida\",\n    sunset_now: \"Puesta de sol\",\n    sunset_week: \"Puesta\",\n    this_station: \"Esta estación\",\n    tide_station: \"Estación de mareas\",\n    tide_stations: \"Estaciones de marea\",\n    tides: \"Mareas\",\n    today: \"Hoy\",\n    tomorrow: \"Mañana\",\n    try_again: \"Inténtelo de nuevo\",\n    turn_off_ads: \"Desactivar publicidad durante tres días\",\n    unit: \"Unidad\",\n    watch_rewarded_video: \"Ver vídeo concedido\",\n    week: \"Semana\"\n  }\n};\n","export default {\n  translation: {\n    app_name: \"Marées proches de moi\",\n    app_version: \"Version de l'appli\",\n    attribution_body:\n      \"Map data © OpenStreetMap contributors\\n\\nMap layer by Esri\",\n    attribution_title: \"Attribution\",\n    by_country: \"Par pays\",\n    cities: \"États\",\n    clear_recent_currents: \"Effacer les ports récents (Courant)\",\n    clear_recent_tides: \"Effacer les ports récents (Marée)\",\n    connection_error: \"Erreur de connexion\",\n    contact_support: \"Contacter l'assistance\",\n    current_station: \"Port (Courant)\",\n    current_stations: \"Les ports courant\",\n    currents: \"Courants\",\n    distance: \"Unités de mesure\",\n    ebb: \"Jusant\",\n    favorite_currents: \"Courants préférés\",\n    favorite_tides: \"Marées préférées\",\n    flood: \"Flot\",\n    following_current: \"Courant suivant\",\n    hide: \"masquer\",\n    high: \"Haute\",\n    home: \"Accueil\",\n    hour_ago: \"Il y a {{hour}} heure\",\n    hour_from_now: \"Dans {{hour}} heure\",\n    hour_minute_ago: \"Il y a {{hour}} heure et {{minute}} minute\",\n    hour_minute_from_now: \"Dans {{hour}} heure et {{minute}} minute\",\n    hour_minutes_ago: \"Il y a {{hour}} heure et {{minute}} minutes\",\n    hour_minutes_from_now: \"Dans {{hour}} heure et {{minute}} minutes\",\n    hours_ago: \"Il y a {{hour}} heures\",\n    hours_from_now: \"Dans {{hour}} heures\",\n    hours_minute_ago: \"Il y a {{hour}} heures et {{minute}} minute\",\n    hours_minute_from_now: \"Dans {{hour}} heures et {{minute}} minute\",\n    hours_minutes_ago: \"Il y a {{hour}} heures et {{minute}} minutes\",\n    hours_minutes_from_now: \"Dans {{hour}} heures et {{minute}} minutes\",\n    just_now: \"À l'instant\",\n    kms: \"km\",\n    kms_away: \"À {{distance}} km\",\n    knots: \"nds\",\n    last_current: \"Dernier courant\",\n    last_tide: \"Dernière marée\",\n    loading: \"Chargement...\",\n    low: \"Basse\",\n    map: \"Carte\",\n    meters: \"m\",\n    miles: \"miles\",\n    miles_away: \"À {{distance}} miles\",\n    minute_ago: \"Il y a {{minute}} minute\",\n    minute_from_now: \"Dans {{minute}} minute\",\n    minutes_ago: \"Il y a {{minute}} minutes\",\n    minutes_from_now: \"Dans {{minute}} minutes\",\n    moon: \"Lune\",\n    moonrise_now: \"Lever de lune\",\n    moonrise_week: \"Lever\",\n    moonset_now: \"Coucher de lune\",\n    moonset_week: \"Coucher\",\n    nearby_currents: \"Courants à proximité\",\n    nearby_tides: \"Marées à proximité\",\n    next_current: \"Prochain courant\",\n    next_tide: \"Prochaine marée\",\n    now: \"Maintenant\",\n    recent_currents: \"Courants récents\",\n    recent_tides: \"Marées récentes\",\n    recents: \"Récentes\",\n    search: \"Rechercher\",\n    search_placeholder: \"Rechercher des ports marée\",\n    settings: \"Réglages\",\n    show: \"afficher\",\n    slack: \"Étale\",\n    somethings_wrong: \"Une erreur s'est produite\",\n    states: \"Villes\",\n    sun: \"Soleil\",\n    sunrise_now: \"Lever du soleil\",\n    sunrise_week: \"Lever\",\n    sunset_now: \"Coucher du soleil\",\n    sunset_week: \"Coucher\",\n    this_station: \"Ce port\",\n    tide_station: \"Port (Marée)\",\n    tide_stations: \"Les ports marée\",\n    tides: \"Marées\",\n    today: \"Aujourd'hui\",\n    tomorrow: \"Demain\",\n    try_again: \"Réessayez\",\n    turn_off_ads: \"Désactiver les pubs pendant trois jours\",\n    unit: \"Unité\",\n    watch_rewarded_video: \"Regarder une vidéo avec récompense\",\n    week: \"Semaine\"\n  }\n};\n","export default {\n  translation: {\n    app_name: \"Maree nei dintorni\",\n    app_version: \"Versione app\",\n    attribution_body:\n      \"Map data © OpenStreetMap contributors\\n\\nMap layer by Esri\",\n    attribution_title: \"Attribuzione\",\n    by_country: \"Per paese\",\n    cities: \"Stati\",\n    clear_recent_currents: \"Cancella stazioni di corrente recenti\",\n    clear_recent_tides: \"Cancella stazioni mareografiche recenti\",\n    connection_error: \"Errore di connessione\",\n    contact_support: \"Contatta l'assistenza\",\n    current_station: \"Stazione di corrente\",\n    current_stations: \"Stazioni di corrente\",\n    currents: \"Correnti\",\n    distance: \"Distanza\",\n    ebb: \"Bassa marea\",\n    favorite_currents: \"Correnti preferite\",\n    favorite_tides: \"Maree preferite\",\n    flood: \"Flusso\",\n    following_current: \"Corrente successiva\",\n    hide: \"nascondi\",\n    high: \"Alta\",\n    home: \"Home\",\n    hour_ago: \"{{minute}} ora fa\",\n    hour_from_now: \"{{hour}} ora da adesso\",\n    hour_minute_ago: \"{{hour}} ora, {{minute}} minuto fa\",\n    hour_minute_from_now: \"{{hour}} ora, {{minute}} minuto da adesso\",\n    hour_minutes_ago: \"{{hour}} ora, {{minute}} minuti fa\",\n    hour_minutes_from_now: \"{{hour}} ora, {{minute}} minuti da adesso\",\n    hours_ago: \"{{minute}} ore fa\",\n    hours_from_now: \"{{hour}} ore da adesso\",\n    hours_minute_ago: \"{{hour}} ore, {{minute}} minuto fa\",\n    hours_minute_from_now: \"{{hour}} ore, {{minute}} minuto da adesso\",\n    hours_minutes_ago: \"{{hour}} ore, {{minute}} minuti fa\",\n    hours_minutes_from_now: \"{{hour}} ore, {{minute}} minuti da adesso\",\n    just_now: \"Adesso\",\n    kms: \"Km\",\n    kms_away: \"A {{distance}} Km\",\n    knots: \"kn\",\n    last_current: \"Corrente precedente\",\n    last_tide: \"Marea precedente\",\n    loading: \"Caricamento...\",\n    low: \"Bassa\",\n    map: \"Mappa\",\n    meters: \"m\",\n    miles: \"miglia\",\n    miles_away: \"A {{distance}} miglia\",\n    minute_ago: \"{{minute}} minuto fa\",\n    minute_from_now: \"{{minute}} minuto da adesso\",\n    minutes_ago: \"{{minute}} minuti fa\",\n    minutes_from_now: \"{{minute}} minuti da adesso\",\n    moon: \"Luna\",\n    moonrise_now: \"Sorgere della luna\",\n    moonrise_week: \"Sorgere\",\n    moonset_now: \"Tramonto della luna\",\n    moonset_week: \"Tramonto\",\n    nearby_currents: \"Correnti nei dintorni\",\n    nearby_tides: \"Maree nei dintorni\",\n    next_current: \"Prossima corrente\",\n    next_tide: \"Prossima marea\",\n    now: \"Adesso\",\n    recent_currents: \"Correnti recenti\",\n    recent_tides: \"Maree recenti\",\n    recents: \"Recenti\",\n    search: \"Cerca\",\n    search_placeholder: \"Cerca stazioni mareografiche\",\n    settings: \"Impostazioni\",\n    show: \"mostra\",\n    slack: \"Stanca\",\n    somethings_wrong: \"Si è verificato un errore\",\n    states: \"Città\",\n    sun: \"Sole\",\n    sunrise_now: \"Alba\",\n    sunrise_week: \"Sorgere\",\n    sunset_now: \"Tramonto\",\n    sunset_week: \"Tramonto\",\n    this_station: \"Questa stazione\",\n    tide_station: \"Stazione mareografica\",\n    tide_stations: \"Stazioni mareografiche\",\n    tides: \"Maree\",\n    today: \"Oggi\",\n    tomorrow: \"Domani\",\n    try_again: \"Riprova\",\n    turn_off_ads: \"Disattiva pubblicità per tre giorni\",\n    unit: \"Unità\",\n    watch_rewarded_video: \"Guarda video di ricompensa\",\n    week: \"Settimana\"\n  }\n};\n","export default {\n  translation: {\n    app_name: \"近隣の潮汐\",\n    app_version: \"アプリのバージョン\",\n    attribution_body:\n      \"Map data © OpenStreetMap contributors\\n\\nMap layer by Esri\",\n    attribution_title: \"属性\",\n    by_country: \"国別\",\n    cities: \"都道府県\",\n    clear_recent_currents: \"最近の検潮所(潮汐流)をクリア\",\n    clear_recent_tides: \"最近の検潮所(潮汐)をクリア\",\n    connection_error: \"接続エラー\",\n    contact_support: \"サポートに連絡\",\n    current_station: \"検潮所(潮汐流)\",\n    current_stations: \"検潮所(潮汐流)\",\n    currents: \"潮汐流\",\n    distance: \"距離\",\n    ebb: \"干潮\",\n    favorite_currents: \"お気に入りの潮汐流\",\n    favorite_tides: \"お気に入りの潮汐\",\n    flood: \"満潮\",\n    following_current: \"さらに次の潮汐流\",\n    hide: \"隠す\t\",\n    high: \"高\",\n    home: \"ホーム\",\n    hour_ago: \"{{hour}}時間前\",\n    hour_from_now: \"今から{{hour}}時間後\",\n    hour_minute_ago: \"{{hour}}時間{{minute}}分前\",\n    hour_minute_from_now: \"今から{{hour}}時間{{minute}}分後\",\n    hour_minutes_ago: \"{{hour}}時間{{minute}}分前\",\n    hour_minutes_from_now: \"今から{{hour}}時間{{minute}}分後\",\n    hours_ago: \"{{hour}}時間前\",\n    hours_from_now: \"今から{{hour}}時間後\",\n    hours_minute_ago: \"{{hour}}時間{{minute}}分前\",\n    hours_minute_from_now: \"今から{{hour}}時間{{minute}}分後\",\n    hours_minutes_ago: \"{{hour}}時間{{minute}}分前\",\n    hours_minutes_from_now: \"今から{{hour}}時間{{minute}}分後\",\n    just_now: \"今現在\",\n    kms: \"km\",\n    kms_away: \"{{distance}} km 遠方\",\n    knots: \"ノット\",\n    last_current: \"前回の潮汐流\",\n    last_tide: \"前回の潮汐\",\n    loading: \"ロード中...\",\n    low: \"低\",\n    map: \"マップ\",\n    meters: \"m\",\n    miles: \"マイル\",\n    miles_away: \"{{distance}} マイル遠方\",\n    minute_ago: \"{{minute}}分前\",\n    minute_from_now: \"今から{{minute}}時間後\",\n    minutes_ago: \"{{minute}}分前\",\n    minutes_from_now: \"今から{{minute}}時間後\",\n    moon: \"月\",\n    moonrise_now: \"月の出\",\n    moonrise_week: \"月の出\",\n    moonset_now: \"月の入り\",\n    moonset_week: \"月の入り\",\n    nearby_currents: \"近くの潮汐流\",\n    nearby_tides: \"近くの潮汐\",\n    next_current: \"次の潮汐流\",\n    next_tide: \"次の潮汐\",\n    now: \"今すぐ\",\n    recent_currents: \"最近の潮汐流\",\n    recent_tides: \"最近の潮汐\",\n    recents: \"最近\",\n    search: \"検索\",\n    search_placeholder: \"検潮所を検索\",\n    settings: \"設定\",\n    show: \"表示\",\n    slack: \"停潮\",\n    somethings_wrong: \"エラーが発生しました\",\n    states: \"市町村\",\n    sun: \"日\",\n    sunrise_now: \"日の出\",\n    sunrise_week: \"日の出\",\n    sunset_now: \"日の入り\",\n    sunset_week: \"日の入り\",\n    this_station: \"この検潮所\",\n    tide_station: \"検潮所\",\n    tide_stations: \"検潮所\",\n    tides: \"潮汐\",\n    today: \"今日\",\n    tomorrow: \"明日\",\n    try_again: \"再度お試しください\",\n    turn_off_ads: \"広告を 3 日間停止\",\n    unit: \"単位\",\n    watch_rewarded_video: \"報酬ビデオを視聴\",\n    week: \"週\"\n  }\n};\n","export default {\n  translation: {\n    app_name: \"타이드: 조수 및 해류 정보\",\n    app_version: \"앱 버전\",\n    attribution_body:\n      \"Map data © OpenStreetMap contributors\\n\\nMap layer by Esri\",\n    attribution_title: \"특성\",\n    by_country: \"국가별\",\n    cities: \"도\",\n    clear_recent_currents: \"최근 해류 관측소 삭제\",\n    clear_recent_tides: \"최근 조류 관측소 삭제\",\n    connection_error: \"연결 오류\",\n    contact_support: \"지원 문의\",\n    current_station: \"현재 관측소\",\n    current_stations: \"현재 관측소\",\n    currents: \"해류\",\n    distance: \"거리\",\n    ebb: \"썰물\",\n    favorite_currents: \"즐겨찾는 해류\",\n    favorite_tides: \"즐겨찾는 조수\",\n    flood: \"밀물\",\n    following_current: \"이어지는 해류\",\n    hide: \"숨김\",\n    high: \"높음\",\n    home: \"홈\",\n    hour_ago: \"{{hour}}시간 전\",\n    hour_from_now: \"앞으로 {{hour}}시간 후\",\n    hour_minute_ago: \"{{hour}}시간 {{minute}}분 전\",\n    hour_minute_from_now: \"앞으로 {{hour}}시간 {{minute}}분 후\",\n    hour_minutes_ago: \"{{hour}}시간 {{minute}}분 전\",\n    hour_minutes_from_now: \"앞으로 {{hour}}시간 {{minute}}분 후\",\n    hours_ago: \"{{hour}}시간 전\",\n    hours_from_now: \"앞으로 {{hour}}시간 후\",\n    hours_minute_ago: \"{{hour}}시간 {{minute}}분 전\",\n    hours_minute_from_now: \"앞으로 {{hour}}시간 {{minute}}분 후\",\n    hours_minutes_ago: \"{{hour}}시간 {{minute}}분 전\",\n    hours_minutes_from_now: \"앞으로 {{hour}}시간 {{minute}}분 후\",\n    just_now: \"방금\",\n    kms: \"km\",\n    kms_away: \"{{distance}} km 인근\",\n    knots: \"노트\",\n    last_current: \"지난 해류\",\n    last_tide: \"지난 조수\",\n    low: \"낮음\",\n    map: \"지도\",\n    meters: \"미터\",\n    miles: \"mi\",\n    miles_away: \"{{distance}} mi 인근\",\n    minute_ago: \"{{minute}}분 전\",\n    minute_from_now: \"앞으로 {{minute}}분 후\",\n    minutes_ago: \"{{minute}}분 전\",\n    minutes_from_now: \"앞으로 {{minute}}분 후\",\n    moon: \"달\",\n    moonrise_now: \"월출\",\n    moonrise_week: \"월출\",\n    moonset_now: \"월몰\",\n    moonset_week: \"월몰\",\n    nearby_currents: \"근처 해류\",\n    nearby_tides: \"근처 조수\",\n    next_current: \"다음 해류\",\n    next_tide: \"다음 조수\",\n    now: \"지금\",\n    recent_currents: \"최근 해류\",\n    recent_tides: \"최근 조수\",\n    recents: \"최근\",\n    search: \"검색\",\n    search_placeholder: \"조수 관측소 검색\",\n    settings: \"설정\",\n    show: \"표시\",\n    slack: \"정조\",\n    somethings_wrong: \"오류가 발생했습니다\",\n    states: \"도시\",\n    sun: \"해\",\n    sunrise_now: \"일출\",\n    sunrise_week: \"월출\",\n    sunset_now: \"일몰\",\n    sunset_week: \"월몰\",\n    this_station: \"이 관측소\",\n    tide_station: \"조수 관측소\",\n    tide_stations: \"조수 관측소\",\n    tides: \"조수\",\n    today: \"오늘\",\n    tomorrow: \"내일\",\n    try_again: \"다시 시도\",\n    turn_off_ads: \"3일간 광고 끄기\",\n    unit: \"단위\",\n    watch_rewarded_video: \"리워드 비디오 보기\",\n    week: \"주\"\n  }\n};\n","export default {\n  translation: {\n    app_name: \"Getijden in de buurt\",\n    app_version: \"Appversie\",\n    attribution_body:\n      \"Map data © OpenStreetMap contributors\\n\\nMap layer by Esri\",\n    attribution_title: \"Bijdrage\",\n    by_country: \"Op land\",\n    cities: \"Provincies\",\n    clear_recent_currents: \"Recente stromingstations wissen\",\n    clear_recent_tides: \"Recente getijdenstations wissen\",\n    connection_error: \"Verbindingsfout\",\n    contact_support: \"Contact opnemen\",\n    current_station: \"Stromingstation\",\n    current_stations: \"Stromingstations\",\n    currents: \"Stromingen\",\n    distance: \"Afstand\",\n    ebb: \"Eb\",\n    favorite_currents: \"Favoriete stromingen\",\n    favorite_tides: \"Favoriete getijden\",\n    flood: \"Vloed\",\n    following_current: \"Komende stroming\",\n    hide: \"verbergen\",\n    high: \"Hoogtij\",\n    home: \"Home\",\n    hour_ago: \"{{hour}} uur geleden\",\n    hour_from_now: \"Over {{hour}} uur\",\n    hour_minute_ago: \"{{hour}} uur en {{minute}} minuut geleden\",\n    hour_minute_from_now: \"Over {{hour}} uur en {{minute}} minuut\",\n    hour_minutes_ago: \"{{hour}} uur en {{minute}} minuten geleden\",\n    hour_minutes_from_now: \"Over {{hour}} uur en {{minute}} minuten\",\n    hours_ago: \"{{hour}} uur geleden\",\n    hours_from_now: \"Over {{hour}} uur\",\n    hours_minute_ago: \"{{hour}} uur en {{minute}} minuut geleden\",\n    hours_minute_from_now: \"Over {{hour}} uur en {{minute}} minuut\",\n    hours_minutes_ago: \"{{hour}} uur en {{minute}} minuten geleden\",\n    hours_minutes_from_now: \"Over {{hour}} uur en {{minute}} minuten\",\n    just_now: \"Zojuist\",\n    kms: \"km\",\n    kms_away: \"Op {{distance}} km afstand\",\n    knots: \"knp\",\n    last_current: \"Vorige stroming\",\n    last_tide: \"Vorige getijde\",\n    loading: \"Laden...\",\n    low: \"Laagtij\",\n    map: \"Kaart\",\n    meters: \"m\",\n    miles: \"mijl\",\n    miles_away: \"Op {{distance}} mijl afstand\",\n    minute_ago: \"{{minute}} minuut geleden\",\n    minute_from_now: \"Over {{minute}} minuut\",\n    minutes_ago: \"{{minute}} minuten geleden\",\n    minutes_from_now: \"Over {{minute}} minuten\",\n    moon: \"Maan\",\n    moonrise_now: \"Maansopgang\",\n    moonrise_week: \"Opgang\",\n    moonset_now: \"Maansondergang\",\n    moonset_week: \"Ondergang\",\n    nearby_currents: \"Stroming in de buurt\",\n    nearby_tides: \"Getijden in de buurt\",\n    next_current: \"Volgende stroming\",\n    next_tide: \"Volgende getijde\",\n    now: \"Nu\",\n    recent_currents: \"Recente stromingen\",\n    recent_tides: \"Recente getijden\",\n    recents: \"Recent\",\n    search: \"Zoeken\",\n    search_placeholder: \"Zoek naar getijdenstations\",\n    settings: \"Instellingen\",\n    show: \"tonen\",\n    slack: \"Stil water\",\n    somethings_wrong: \"Er is een fout opgetreden\",\n    states: \"Steden\",\n    sun: \"Zon\",\n    sunrise_now: \"Zonsopgang\",\n    sunrise_week: \"Opgang\",\n    sunset_now: \"Zonsondergang\",\n    sunset_week: \"Ondergang\",\n    this_station: \"Dit station\",\n    tide_station: \"Getijdenstation\",\n    tide_stations: \"Getijdenstations\",\n    tides: \"Getijden\",\n    today: \"Vandaag\",\n    tomorrow: \"Morgen\",\n    try_again: \"Opnieuw\",\n    turn_off_ads: \"Advertenties drie dagen uitschakelen\",\n    unit: \"Eenheid\",\n    update1:\n      \"Favorieten toevoegen, verbeterde kaartfunctionaliteit, metriek/imperiaal stelsel.\",\n    update2: \"Abonnement om advertenties te verwijderen.\",\n    update3: \"Verholpen bugs en prestatieverbeteringen.\",\n    watch_rewarded_video: \"Bekijk beloningsvideo\",\n    week: \"Week\"\n  }\n};\n","export default {\n  translation: {\n    app_name: \"Marés próximas a mim\",\n    app_version: \"Versão do aplicativo\",\n    attribution_body:\n      \"Map data © OpenStreetMap contributors\\n\\nMap layer by Esri\",\n    attribution_title: \"Atribuição\",\n    by_country: \"Por país\",\n    cities: \"Estados\",\n    clear_recent_currents: \"Limpar estações de correntes recentes\",\n    clear_recent_tides: \"Limpar estações de marés recentes\",\n    connection_error: \"Erro de conexão\",\n    contact_support: \"Fale com o suporte\",\n    current_station: \"Estação de correntes\",\n    current_stations: \"Estações de correntes\",\n    currents: \"Correntes\",\n    distance: \"Distância\",\n    ebb: \"Vazante\",\n    favorite_currents: \"Correntes favoritas\",\n    favorite_tides: \"Marés favoritas\",\n    flood: \"Enchente\",\n    following_current: \"Corrente seguinte\",\n    hide: \"ocultar\",\n    high: \"Alta\",\n    home: \"Início\",\n    hour_ago: \"{{hour}} hora atrás\",\n    hour_from_now: \"Daqui {{hour}} hora\",\n    hour_minute_ago: \"{{hour}} hora e {{minute}} minuto atrás\",\n    hour_minute_from_now: \"Daqui {{hour}} hora e {{minute}} minuto\",\n    hour_minutes_ago: \"{{hour}} hora e {{minute}} minutos atrás\",\n    hour_minutes_from_now: \"Daqui {{hour}} hora e {{minute}} minutos\",\n    hours_ago: \"{{hour}} horas atrás\",\n    hours_from_now: \"Daqui {{hour}} horas\",\n    hours_minute_ago: \"{{hour}} horas e {{minute}} minuto atrás\",\n    hours_minute_from_now: \"Daqui {{hour}} horas e {{minute}} minuto\",\n    hours_minutes_ago: \"{{hour}} horas e {{minute}} minutos atrás\",\n    hours_minutes_from_now: \"Daqui {{hour}} horas e {{minute}} minutos\",\n    just_now: \"Agora\",\n    kms: \"km\",\n    kms_away: \"A {{distance}} km de distância\",\n    knots: \"nós\",\n    last_current: \"Última corrente\",\n    last_tide: \"Última maré\",\n    loading: \"Carregando...\",\n    low: \"Baixa\",\n    map: \"Mapa\",\n    meters: \"m\",\n    miles: \"milhas\",\n    miles_away: \"A {{distance}} milhas de distância\",\n    minute_ago: \"{{minute}} minuto atrás\",\n    minute_from_now: \"Daqui {{minute}} minuto\",\n    minutes_ago: \"{{minute}} minutos atrás\",\n    minutes_from_now: \"Daqui {{minute}} minutos\",\n    moon: \"Lua\",\n    moonrise_now: \"Nascer da lua\",\n    moonrise_week: \"Nascer\",\n    moonset_now: \"Pôr da lua\",\n    moonset_week: \"Pôr\",\n    nearby_currents: \"Correntes nas proximidades\",\n    nearby_tides: \"Marés nas proximidades\",\n    next_current: \"Próxima corrente\",\n    next_tide: \"Próxima maré\",\n    now: \"Agora\",\n    recent_currents: \"Correntes recentes\",\n    recent_tides: \"Marés recentes\",\n    recents: \"Recentes\",\n    search: \"Pesquisa\",\n    search_placeholder: \"Pesquisar estações de marés\",\n    settings: \"Configurações\",\n    show: \"exibir\",\n    slack: \"Estofo\",\n    somethings_wrong: \"Houve um erro.\",\n    states: \"Cidades\",\n    sun: \"Sol\",\n    sunrise_now: \"Nascer do sol\",\n    sunrise_week: \"Nascer\",\n    sunset_now: \"Pôr do sol\",\n    sunset_week: \"Pôr\",\n    this_station: \"Esta estação\",\n    tide_station: \"Estação de marés\",\n    tide_stations: \"Estações de marés\",\n    tides: \"Marés\",\n    today: \"Hoje\",\n    tomorrow: \"Amanhã\",\n    try_again: \"Tente novamente\",\n    turn_off_ads: \"Desativar anúncios por três dias\",\n    unit: \"Unidade\",\n    watch_rewarded_video: \"Assistir vídeo de recompensa\",\n    week: \"Semana\"\n  }\n};\n","export default {\n  translation: {\n    app_name: \"潮汐在身邊\",\n    app_version: \"App 版本\",\n    attribution_body:\n      \"Map data © OpenStreetMap contributors\\n\\nMap layer by Esri\",\n    attribution_title: \"屬性\",\n    by_country: \"依國家/地區\",\n    cities: \"城市\",\n    clear_recent_currents: \"清除最近的潮位站\",\n    clear_recent_tides: \"清除最近的驗潮站\",\n    connection_error: \"連接錯誤\",\n    contact_support: \"聯絡客服\",\n    current_station: \"潮位站\",\n    current_stations: \"潮位站\",\n    currents: \"近海流\",\n    distance: \"距離\",\n    ebb: \"退潮\",\n    favorite_currents: \"喜愛海流\",\n    favorite_tides: \"喜愛潮汐\",\n    flood: \"漲潮\",\n    following_current: \"下下次海流\",\n    hide: \"隱藏\",\n    high: \"滿\",\n    home: \"首頁\",\n    hour_ago: \"{{hour}} 小時前\",\n    hour_from_now: \"{{hour}} 小時後\",\n    hour_minute_ago: \"{{hour}} 小時 {{minute}} 分鐘前\",\n    hour_minute_from_now: \"{{hour}} 小時 {{minute}} 分鐘後\",\n    hour_minutes_ago: \"{{hour}} 小時 {{minute}} 分鐘前\",\n    hour_minutes_from_now: \"{{hour}} 小時 {{minute}} 分鐘後\",\n    hours_ago: \"{{hour}} 小時前\",\n    hours_from_now: \"{{hour}} 小時後\",\n    hours_minute_ago: \"{{hour}} 小時 {{minute}} 分鐘前\",\n    hours_minute_from_now: \"{{hour}} 小時 {{minute}} 分鐘後\",\n    hours_minutes_ago: \"{{hour}} 小時 {{minute}} 分鐘前\",\n    hours_minutes_from_now: \"{{hour}} 小時 {{minute}} 分鐘後\",\n    just_now: \"剛剛\",\n    kms: \"公里\",\n    kms_away: \"距離 {{distance}} 公里\",\n    knots: \"結\",\n    last_current: \"上次海流\",\n    last_tide: \"上次潮汐\",\n    loading: \"載入中\",\n    low: \"乾\",\n    map: \"地圖\",\n    meters: \"米\",\n    miles: \"哩\",\n    miles_away: \"距離 {{distance}} 哩\",\n    minute_ago: \"{{minute}} 分鐘前\",\n    minute_from_now: \"{{minute}} 分鐘後\",\n    minutes_ago: \"{{minute}} 分鐘前\",\n    minutes_from_now: \"{{minute}} 分鐘後\",\n    moon: \"月亮\",\n    moonrise_now: \"月出\",\n    moonrise_week: \"月出\",\n    moonset_now: \"月落\",\n    moonset_week: \"月落\",\n    nearby_currents: \"附近海流\",\n    nearby_tides: \"附近潮汐\",\n    next_current: \"下次海流\",\n    next_tide: \"下次潮汐\",\n    now: \"現在\",\n    recent_currents: \"最近海流\",\n    recent_tides: \"最近潮汐\",\n    recents: \"最近記錄\",\n    search: \"搜尋\",\n    search_placeholder: \"搜索潮汐站\",\n    settings: \"設定\",\n    show: \"顯示\",\n    slack: \"憩流\",\n    somethings_wrong: \"發生錯誤\",\n    states: \"州\",\n    sun: \"太陽\",\n    sunrise_now: \"日出\",\n    sunrise_week: \"日出\",\n    sunset_now: \"日落\",\n    sunset_week: \"日落\",\n    this_station: \"這個測站\",\n    tide_station: \"驗潮站\",\n    tide_stations: \"驗潮站\",\n    tides: \"潮汐\",\n    today: \"今天\",\n    tomorrow: \"明天\",\n    try_again: \"再試一次\",\n    turn_off_ads: \"停止顯示廣告三天\",\n    unit: \"單位\",\n    watch_rewarded_video: \"觀賞有獎影片\",\n    week: \"週\"\n  }\n};\n","import I18n from \"./locales\";\nimport moment from \"moment\";\nimport momentTimezone from \"moment-timezone\";\nconst languageCode =\n  (navigator.languages && navigator.languages[0]) ||\n  navigator.language ||\n  navigator.userLanguage ||\n  \"en-US\";\nmoment.locale(languageCode);\nconst deviceTimezone = momentTimezone.tz.guess(true);\n\nexport function timezoneIfDifferent(\n  stationTimezone,\n  preStr = \"\",\n  postStr = \"\"\n) {\n  if (stationTimezone != deviceTimezone) {\n    return (\n      preStr +\n      momentTimezone()\n        .tz(deviceTimezone)\n        .format(\"z\") +\n      postStr\n    );\n  } else {\n    return \"\";\n  }\n}\n\nexport function timeDisplay(timestamp) {\n  return moment(timestamp).format(\"LT\");\n}\n\nexport function dateDisplay(date) {\n  var momentDate = moment(date);\n  var momentNow = moment().startOf(\"day\");\n  var oneDay = 1000 * 60 * 60 * 24;\n  if (momentDate - momentNow < oneDay) {\n    return I18n.t(\"today\");\n  } else if (momentDate - momentNow < oneDay * 2) {\n    return I18n.t(\"tomorrow\");\n  } else {\n    return moment(date).format(\"dddd - ll\");\n  }\n}\n\nexport function microformatTime(timestamp, timezone) {\n  return momentTimezone(timestamp)\n    .tz(timezone)\n    .format(\"YYYY-MM-DD HH:mmZZ\");\n}\n\nexport function relativeTimeFromNow(toTime) {\n  var tideTime = new Date(toTime);\n  var now = new Date();\n  if (isNaN(tideTime) || isNaN(now)) {\n    return \"\";\n  }\n  var secondsDiff = (tideTime.getTime() - now.getTime()) / 1000;\n  var minutesDiff = secondsDiff / 60;\n  var hoursDiff = minutesDiff / 60;\n  var numberHours = Math.floor(Math.abs(hoursDiff));\n  var numberMinutes = Math.floor(Math.abs(minutesDiff)) - numberHours * 60;\n  var hoursSingular = hoursDiff == 1 || hoursDiff == -1;\n  var minutesSingular = numberMinutes == 1 || numberMinutes == -1;\n  var hoursOnly = numberHours >= 1 && numberMinutes <= 0;\n  var minutesOnly = numberMinutes >= 1 && numberHours <= 0;\n  if (Math.abs(secondsDiff) > 86400) {\n    return I18n.t(\"somethings_wrong\");\n  } else if (Math.abs(secondsDiff) < 60) {\n    return I18n.t(\"just_now\");\n  }\n  // ago / from now\n  else {\n    // ago\n    if (secondsDiff < 0) {\n      if (minutesOnly) {\n        if (minutesSingular) {\n          return I18n.t(\"minute_ago\", { minute: numberMinutes });\n        } else {\n          return I18n.t(\"minutes_ago\", { minute: numberMinutes });\n        }\n      } else if (hoursOnly) {\n        if (hoursSingular) {\n          return I18n.t(\"hour_ago\", { hour: numberHours });\n        } else {\n          return I18n.t(\"hours_ago\", { hour: numberHours });\n        }\n      } else {\n        if (hoursSingular && minutesSingular) {\n          return I18n.t(\"hour_minute_ago\", {\n            hour: numberHours,\n            minute: numberMinutes\n          });\n        } else if (hoursSingular && !minutesSingular) {\n          return I18n.t(\"hour_minutes_ago\", {\n            hour: numberHours,\n            minute: numberMinutes\n          });\n        } else if (!hoursSingular && minutesSingular) {\n          return I18n.t(\"hours_minute_ago\", {\n            hour: numberHours,\n            minute: numberMinutes\n          });\n        } else {\n          return I18n.t(\"hours_minutes_ago\", {\n            hour: numberHours,\n            minute: numberMinutes\n          });\n        }\n      }\n    }\n    // from now\n    else {\n      if (minutesOnly) {\n        if (minutesSingular) {\n          return I18n.t(\"minute_from_now\", { minute: numberMinutes });\n        } else {\n          return I18n.t(\"minutes_from_now\", { minute: numberMinutes });\n        }\n      } else if (hoursOnly) {\n        if (hoursSingular) {\n          return I18n.t(\"hour_from_now\", { hour: numberHours });\n        } else {\n          return I18n.t(\"hours_from_now\", { hour: numberHours });\n        }\n      } else {\n        if (hoursSingular && minutesSingular) {\n          return I18n.t(\"hour_minute_from_now\", {\n            hour: numberHours,\n            minute: numberMinutes\n          });\n        } else if (hoursSingular && !minutesSingular) {\n          return I18n.t(\"hour_minutes_from_now\", {\n            hour: numberHours,\n            minute: numberMinutes\n          });\n        } else if (!hoursSingular && minutesSingular) {\n          return I18n.t(\"hours_minute_from_now\", {\n            hour: numberHours,\n            minute: numberMinutes\n          });\n        } else {\n          return I18n.t(\"hours_minutes_from_now\", {\n            hour: numberHours,\n            minute: numberMinutes\n          });\n        }\n      }\n    }\n  }\n}\n","import React, { Component } from \"react\";\nimport I18n from \"../../../config/locales\";\nimport {\n  relativeTimeFromNow,\n  timeDisplay,\n  timezoneIfDifferent\n} from \"../../../config/datetime\";\nimport Flood from \"images/currents/flood.png\";\nimport Slack from \"images/currents/slack.png\";\n\nclass Now extends Component {\n  currentHeadline(current, type) {\n    if (current.max_velocity === null) {\n      return (\n        <div>\n          {I18n.t(type) + \" - \" + I18n.t(\"slack\")}\n          <img className=\"ml-2 mb-2\" src={Slack} />\n        </div>\n      );\n    } else if (current.max_velocity < 0) {\n      return (\n        <div>\n          {I18n.t(type) + \" - \" + I18n.t(\"ebb\")}\n          <img className=\"ml-2 mb-2\" src={Flood} />\n        </div>\n      );\n    } else {\n      return (\n        <div>\n          {I18n.t(type) + \" - \" + I18n.t(\"flood\")}\n          <img className=\"ml-2 mb-2\" src={Flood} />\n        </div>\n      );\n    }\n    return str;\n  }\n\n  render() {\n    const { currentStation } = this.props;\n    return (\n      <div>\n        <div className=\"card text-center bg-tides1 mb-1 py-0\">\n          <div className=\"card-body text-white\">\n            <div className=\"h4 my-0\">\n              {this.currentHeadline(\n                currentStation.last_current,\n                \"last_current\"\n              )}\n            </div>\n            <div className=\"my-0\">\n              <time className=\"h1\">\n                {timeDisplay(currentStation.last_current.timestamp)}\n                {timezoneIfDifferent(currentStation.timezone, \" \")}\n              </time>\n            </div>\n            <div className=\"h6 mb-0 mt-1\">\n              {relativeTimeFromNow(currentStation.last_current.timestamp)}\n            </div>\n          </div>\n        </div>\n        <div className=\"card text-center bg-tides2 mb-1 py-0\">\n          <div className=\"card-body text-white\">\n            <div className=\"h4 my-0\">\n              {this.currentHeadline(\n                currentStation.next_current,\n                \"next_current\"\n              )}\n            </div>\n            <div className=\"my-0\">\n              <time className=\"h1\">\n                {timeDisplay(currentStation.next_current.timestamp)}\n                {timezoneIfDifferent(currentStation.timezone, \" \")}\n              </time>\n            </div>\n            <div className=\"h6 mb-0 mt-1\">\n              {relativeTimeFromNow(currentStation.next_current.timestamp)}\n            </div>\n          </div>\n        </div>\n        <div className=\"card text-center bg-tides4 mb-1 py-0\">\n          <div className=\"card-body text-white\">\n            <div className=\"h4 my-0\">\n              {this.currentHeadline(\n                currentStation.following_current,\n                \"following_current\"\n              )}\n            </div>\n            <div className=\"my-0\">\n              <time className=\"h1\">\n                {timeDisplay(currentStation.following_current.timestamp)}\n                {timezoneIfDifferent(currentStation.timezone, \" \")}\n              </time>\n            </div>\n            <div className=\"h6 mb-0 mt-1\">\n              {relativeTimeFromNow(currentStation.following_current.timestamp)}\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  }\n}\n\nexport default Now;\n","import React, { Component } from \"react\";\nimport I18n from \"../../../config/locales\";\nimport {\n  dateDisplay,\n  microformatTime,\n  timeDisplay,\n  timezoneIfDifferent,\n} from \"../../../config/datetime\";\nimport Flood from \"images/currents/flood.png\";\nimport Slack from \"images/currents/slack.png\";\n\nclass Week extends Component {\n  currentType(currentEvent) {\n    if (currentEvent.max_velocity === null) {\n      return I18n.t(\"slack\");\n    } else if (currentEvent.max_velocity < 0) {\n      return I18n.t(\"ebb\");\n    } else {\n      return I18n.t(\"flood\");\n    }\n  }\n\n  currentSpeed(currentEvent) {\n    if (currentEvent.max_velocity === null) {\n      return <img className=\"mr-3\" src={Slack} />;\n    } else {\n      return currentEvent.max_velocity + \" \" + I18n.t(\"knots\");\n    }\n  }\n\n  currentEvent(currentEvent, last = false) {\n    const { currentStation } = this.props;\n    return (\n      <tr\n        key={currentEvent.date_time}\n        itemScope=\"itemScope\"\n        itemType=\"http://schema.org/Event\"\n      >\n        <td\n          className=\"border-tides5 text-left\"\n          style={{ width: \"33.33%\" }}\n          itemProp=\"name\"\n        >\n          {this.currentType(currentEvent)}\n        </td>\n        <td className=\"border-tides5 text-center\" style={{ width: \"33.33%\" }}>\n          <time\n            itemProp=\"startDate\"\n            dateTime={microformatTime(\n              currentEvent.date_time,\n              currentStation.timezone\n            )}\n          >\n            {timeDisplay(currentEvent.date_time)}\n          </time>\n          <div\n            itemProp=\"location\"\n            itemScope=\"itemScope\"\n            itemType=\"http://schema.org/Place\"\n          >\n            <meta itemProp=\"name\" content={currentEvent.name} />\n            <div\n              itemProp=\"geo\"\n              itemScope=\"itemScope\"\n              itemType=\"http://schema.org/GeoCoordinates\"\n            >\n              <meta itemProp=\"latitude\" content={currentEvent.lat} />\n              <meta itemProp=\"longitude\" content={currentEvent.lng} />\n            </div>\n          </div>\n        </td>\n        <td\n          className=\"border-tides5 text-right\"\n          style={{ width: \"33.33%\" }}\n          itemProp=\"description\"\n        >\n          {this.currentSpeed(currentEvent)}\n        </td>\n      </tr>\n    );\n  }\n\n  currentEvents(date) {\n    const { currentStation } = this.props;\n    return (\n      <div className=\"bg-tides1 px-3 pt-1\">\n        <table className=\"table table-dark bg-tides1 table-sm mb-0\">\n          <thead className=\"table-borderless\">\n            <tr>\n              <td colSpan=\"3\" className=\"text-center\">\n                {I18n.t(\"currents\").toUpperCase()}\n                {timezoneIfDifferent(currentStation.timezone, \" (\", \")\")}\n              </td>\n            </tr>\n          </thead>\n          <tbody>\n            {currentStation.next_seven_days[\n              date\n            ].currents.map((currentEvent, index) =>\n              index + 1 != currentStation.next_seven_days[date].currents.length\n                ? this.currentEvent(currentEvent)\n                : this.currentEvent(currentEvent, true)\n            )}\n          </tbody>\n        </table>\n      </div>\n    );\n  }\n\n  dayForecast(date) {\n    return (\n      <div className=\"card bg-tides3 my-2\" key={date}>\n        <div className=\"card-body text-center text-white\">\n          <div className=\"mb-2\">\n            <time className=\"card-title h5\">{dateDisplay(date)}</time>\n          </div>\n          {this.currentEvents(date)}\n        </div>\n      </div>\n    );\n  }\n\n  weekForecast() {\n    const { currentStation } = this.props;\n    var dateKeyArray = [];\n    for (var date in currentStation.next_seven_days) {\n      dateKeyArray.push(date);\n    }\n    return dateKeyArray.map((date) => this.dayForecast(date));\n  }\n\n  render() {\n    const { currentStation } = this.props;\n    return (\n      <div>\n        <h2 className=\"text-center mt-3\">{I18n.t(\"week\")}</h2>\n        {this.weekForecast()}\n      </div>\n    );\n  }\n}\n\nexport default Week;\n","import React, { useEffect, useState } from \"react\";\nimport { Map as Maplibre, AttributionControl, Layer, Popup, Source } from \"react-map-gl/maplibre\";\nimport I18n from \"../../../config/locales\";\n\nconst styleURL = \"https://d1nezfegjr0s5p.cloudfront.net/tiles/esri-style.json.gz\";\nconst stationsURL = \"https://d1nezfegjr0s5p.cloudfront.net/tiles/source.json.gz\";\n\nexport default function Map({ currentStation }) {\n  const [viewport, setViewport] = useState({\n    latitude: currentStation.lat,\n    longitude: currentStation.lng,\n    zoom: 12\n  });\n  const [showPopup, setShowPopup] = useState(false);\n  const [popupStation, setPopupStation] = useState(null);\n\n  useEffect(() => {\n    if (popupStation) {\n      setShowPopup(true);\n    }\n  }, [popupStation]);\n\n  const currentLayerStyle = {\n    id: \"currentStationsInactiveLayer\",\n    type: \"symbol\",\n    \"source-layer\": \"stations\",\n    filter: [\n      \"all\",\n      [\"==\", \"station_type\", \"current\"],\n      [\"!=\", \"id\", currentStation.id],\n    ],\n    layout: {\n      \"icon-image\": \"currentStationInactive\",\n      \"icon-size\": 0.75,\n    },\n    minzoom: 3,\n    maxzoom: 20,\n    beforeId: \"currentStationsActiveLayer\",\n  };\n\n  const tideLayerStyle = {\n    id: \"tideStationsInactiveLayer\",\n    type: \"symbol\",\n    \"source-layer\": \"stations\",\n    filter: [\"==\", \"station_type\", \"tide\"],\n    layout: {\n      \"icon-image\": \"tideStationInactive\",\n      \"icon-size\": 0.75,\n    },\n    minzoom: 3,\n    maxzoom: 20,\n    beforeId: \"currentStationsInactiveLayer\",\n  };\n\n  const activeCurrentLayerStyle = {\n    id: \"currentStationsActiveLayer\",\n    type: \"symbol\",\n    \"source-layer\": \"stations\",\n    filter: [\n      \"all\",\n      [\"==\", \"station_type\", \"current\"],\n      [\"==\", \"id\", currentStation.id],\n    ],\n    layout: {\n      \"icon-image\": \"currentStationActive\",\n      \"icon-size\": 0.75,\n    },\n    minzoom: 3,\n    maxzoom: 20,\n  };\n\n  return (\n    <Maplibre\n      {...viewport}\n      onMove={event => setViewport(event.viewState)}\n      style={{\n        borderStyle: \"solid\",\n        borderWidth: \"1px\",\n        borderColor: \"#0a405a\",\n        width: '100%',\n        height: '60vh'\n      }}\n      mapStyle={styleURL}\n      attributionControl={false}\n      onClick={(e) => {\n        if (e.features.length > 0 && e.features[0].source == \"stations\") {\n          let station = e.features[0].properties;\n          station.lat = e.lngLat.lat;\n          station.lng = e.lngLat.lng;\n          setPopupStation(station);\n        }\n      }}\n      interactiveLayerIds={[\n        \"currentStationsActiveLayer\",\n        \"tideStationsInactiveLayer\",\n        \"currentStationsInactiveLayer\"\n      ]}\n    >\n      <Source\n        id=\"stations\"\n        url={stationsURL}\n        type=\"vector\"\n        minzoom={0}\n        maxzoom={10}\n      >\n        <Layer {...activeCurrentLayerStyle} />\n        <Layer {...tideLayerStyle} />\n        <Layer {...currentLayerStyle} />\n      </Source>\n      {showPopup && (\n        <Popup\n          longitude={popupStation.lng}\n          latitude={popupStation.lat}\n          className=\"stationPopup\"\n          onClose={() => setShowPopup(false)}>\n            <div>\n              <p>\n                <strong>{popupStation.name}</strong>\n                <br />\n                <a href={`/${popupStation.station_type}_stations/${popupStation.id}`}>\n                  Visit {popupStation.station_type} station\n                </a>\n              </p>\n            </div>\n        </Popup>\n      )}\n      <AttributionControl\n        customAttribution={I18n.t(\"attribution_body\")}\n        compact={false}\n      />\n    </Maplibre>\n  );\n}","import React, { Component } from \"react\";\n\nclass Breadcrumbs extends Component {\n  countryBreadcrumb(linked = false) {\n    const { results } = this.props;\n    if (linked) {\n      return (\n        <li className=\"breadcrumb-item\">\n          <a href={\"/countries/\" + results.country_id}>\n            {results.country_name}\n          </a>\n        </li>\n      );\n    } else {\n      return <li className=\"breadcrumb-item active\">{results.name}</li>;\n    }\n  }\n\n  stateBreadcrumb(linked = false) {\n    const { results } = this.props;\n    if (linked) {\n      return (\n        <li className=\"breadcrumb-item\">\n          <a href={\"/states/\" + results.state_id}>{results.state_name}</a>\n        </li>\n      );\n    } else {\n      return <li className=\"breadcrumb-item active\">{results.name}</li>;\n    }\n  }\n\n  cityBreadcrumb(linked = false) {\n    const { results } = this.props;\n    if (linked) {\n      return (\n        <li className=\"breadcrumb-item\">\n          <a href={\"/cities/\" + results.city_id}>{results.city_name}</a>\n        </li>\n      );\n    } else {\n      return <li className=\"breadcrumb-item active\">{results.name}</li>;\n    }\n  }\n\n  stationBreadcrumb() {\n    const { results } = this.props;\n    return <li className=\"breadcrumb-item active\">{results.name}</li>;\n  }\n\n  getBreadcrumbs() {\n    const { results } = this.props;\n    if (results.country_code !== undefined) {\n      // it's a country\n      return (\n        <div className=\"row\">\n          <div className=\"col-md\">\n            <nav aria-label=\"breadcrumb\">\n              <ol className=\"breadcrumb\">{this.countryBreadcrumb(false)}</ol>\n            </nav>\n          </div>\n        </div>\n      );\n    } else if (results.abbr !== undefined) {\n      // it's a state\n      return (\n        <div className=\"row\">\n          <div className=\"col-md\">\n            <nav aria-label=\"breadcrumb\">\n              <ol className=\"breadcrumb\">\n                {this.countryBreadcrumb(true)}\n                {this.stateBreadcrumb()}\n              </ol>\n            </nav>\n          </div>\n        </div>\n      );\n    } else if (\n      (results.last_tide !== undefined || results.last_current !== undefined) &&\n      results.city_id === null &&\n      results.state_id === null\n    ) {\n      // it's a stattion with a country but no state or city\n      return (\n        <div className=\"row\">\n          <div className=\"col-md\">\n            <nav aria-label=\"breadcrumb\">\n              <ol className=\"breadcrumb\">\n                {this.countryBreadcrumb(true)}\n                {this.stationBreadcrumb()}\n              </ol>\n            </nav>\n          </div>\n        </div>\n      );\n    } else if (\n      (results.last_tide !== undefined || results.last_current !== undefined) &&\n      results.city_id === null\n    ) {\n      // it's a station with a state and country but no city\n      return (\n        <div className=\"row\">\n          <div className=\"col-md\">\n            <nav aria-label=\"breadcrumb\">\n              <ol className=\"breadcrumb\">\n                {this.countryBreadcrumb(true)}\n                {this.stateBreadcrumb(true)}\n                {this.stationBreadcrumb()}\n              </ol>\n            </nav>\n          </div>\n        </div>\n      );\n    } else if (\n      results.last_tide !== undefined ||\n      results.last_current !== undefined\n    ) {\n      // it's a station with a city, state, and country\n      return (\n        <div className=\"row\">\n          <div className=\"col-md\">\n            <nav aria-label=\"breadcrumb\">\n              <ol className=\"breadcrumb\">\n                {this.countryBreadcrumb(true)}\n                {this.stateBreadcrumb(true)}\n                {this.cityBreadcrumb(true)}\n                {this.stationBreadcrumb()}\n              </ol>\n            </nav>\n          </div>\n        </div>\n      );\n    } else if (\n      results.country_id !== undefined &&\n      results.state_id !== undefined\n    ) {\n      // it's a city\n      return (\n        <div className=\"row\">\n          <div className=\"col-md\">\n            <nav aria-label=\"breadcrumb\">\n              <ol className=\"breadcrumb\">\n                {this.countryBreadcrumb(true)}\n                {this.stateBreadcrumb(true)}\n                {this.cityBreadcrumb()}\n              </ol>\n            </nav>\n          </div>\n        </div>\n      );\n    } else return null;\n  }\n\n  render() {\n    const { results } = this.props;\n    if (\n      results === null ||\n      window.location.pathname == \"/\" ||\n      window.location.pathname == \"/countries\"\n    ) {\n      return null;\n    } else {\n      return this.getBreadcrumbs();\n    }\n  }\n}\n\nexport default Breadcrumbs;\n","import React, { Component } from \"react\";\n\nimport ItunesStore from \"images/home/itunes-store.svg\";\nimport GooglePlay from \"images/home/google-play.svg\";\n\nclass MobileStoreButtons extends Component {\n  render() {\n    return (\n      <div className=\"container-fluid my-3\">\n        <div className=\"row\">\n          <div className=\"col\">\n            <a href=\"https://apps.apple.com/us/app/tides-near-me/id585223877\">\n              <img\n                src={ItunesStore}\n                style={{ marginLeft: \"6%\", marginRight: \"6%\", width: \"88%\" }}\n              />\n            </a>\n          </div>\n          <div className=\"col\">\n            <a href=\"https://play.google.com/store/apps/details?id=me.tidesnear.free\">\n              <img src={GooglePlay} style={{ width: \"100%\" }} />\n            </a>\n          </div>\n        </div>\n      </div>\n    );\n  }\n}\n\nexport default MobileStoreButtons;\n","import React, { useEffect, useState } from \"react\";\nimport I18n from \"../../../config/locales\";\nimport { Helmet } from \"react-helmet\";\nimport { useParams } from \"react-router-dom\";\nimport Now from \"./Now\";\nimport Week from \"./Week\";\nimport Map from \"./Map\";\nimport Breadcrumbs from \"../../home/Breadcrumbs\";\nimport MobileStoreButtons from \"../../home/MobileStoreButtons\";\n\nexport default function CurrentStation() {\n  const language_code = window.navigator.userLanguage || window.navigator.language || \"en\";\n  let { id } = useParams();\n  let apiUrl = window.location.origin + \"/api/v2\" + \"/stations/current/\" + id + \"?language=\" + language_code;\n  const [currentStation, loading, hasError] = useFetch(apiUrl);\n  return (\n    <>\n      {\n        currentStation == null ? <div/> : <div>{renderCurrentStation(currentStation)}</div>\n      }\n    </>);\n}\n\nfunction renderCurrentStation(currentStation) {\n  const title = currentStation.name + \" \" + I18n.t(\"currents\");\n  return (\n    <div className=\"container\">\n      <Helmet>\n        <title>\n          {title} - {I18n.t(\"app_name\")}\n        </title>\n        <link\n          rel=\"canonical\"\n          href={window.location.origin + window.location.pathname}\n        />\n      </Helmet>\n      <div className=\"row\">\n        <div className=\"col-md d-flex justify-content-center my-3\">\n          <h1>{title}</h1>\n        </div>\n      </div>\n      <Breadcrumbs results={currentStation} />\n      <div className=\"row mb-2\">\n        <div className=\"col-md\">\n          <Now currentStation={currentStation} />\n          <Week currentStation={currentStation} />\n        </div>\n        <div className=\"col-md\">\n          <Map currentStation={currentStation} />\n          <MobileStoreButtons />\n        </div>\n      </div>\n    </div>\n  );\n}\n\nfunction useFetch(url, opts) {\n  const [currentStation, setResponse] = useState(null);\n  const [loading, setLoading] = useState(false);\n  const [hasError, setHasError] = useState(false);\n  useEffect(() => {\n    setLoading(true)\n    fetch(url, opts)\n      .then((res) => res.json())\n      .then((data) => {\n        setResponse(data)\n        setLoading(false)\n      })\n      .catch(() => {\n        setHasError(true)\n        setLoading(false)\n      })\n    }, [ url ]);\n  return [ currentStation, loading, hasError ];\n}","import React, { Component } from \"react\";\nimport I18n from \"../../config/locales\";\n\nclass TideStations extends Component {\n  distanceAway(tideStation) {\n    if (tideStation.metric) {\n      if (\n        tideStation.distance_km !== undefined &&\n        tideStation.distance_km !== null\n      ) {\n        return (\n          <div className=\"text-muted\">\n            {I18n.t(\"kms_away\", { distance: tideStation.distance_km })}\n          </div>\n        );\n      }\n    } else {\n      if (\n        tideStation.distance_mi !== undefined &&\n        tideStation.distance_mi !== null\n      ) {\n        return (\n          <div className=\"text-muted\">\n            {I18n.t(\"miles_away\", { distance: tideStation.distance_mi })}\n          </div>\n        );\n      }\n    }\n  }\n\n  render() {\n    const { tideStations, nearby } = this.props;\n    if (tideStations === null || tideStations.length == 0) {\n      return <div />;\n    } else {\n      const title = nearby ? I18n.t(\"nearby_tides\") : I18n.t(\"tide_stations\");\n      return (\n        <div className=\"card bg-tides3 mb-2\">\n          <div className=\"card-body text-white\">\n            <h2 className=\"pl-3\">{title}</h2>\n            <div className=\"list-group list-group-flush\">\n              {tideStations.map((tideStation) => (\n                <a\n                  href={\"/tide_stations/\" + tideStation.id}\n                  className=\"list-group-item list-group-item-action bg-tides2 text-white\"\n                  key={tideStation.id}\n                >\n                  <div>{tideStation.name}</div>\n                  {this.distanceAway(tideStation)}\n                </a>\n              ))}\n            </div>\n          </div>\n        </div>\n      );\n    }\n  }\n}\n\nexport default TideStations;\n","import React, { Component } from \"react\";\nimport I18n from \"../../config/locales\";\n\nclass CurrentStations extends Component {\n  distanceAway(currentStation) {\n    if (\n      currentStation.distance_mi !== undefined &&\n      currentStation.distance_mi !== null\n    ) {\n      return (\n        <div className=\"text-muted\">\n          {currentStation.distance_mi} miles away\n        </div>\n      );\n    }\n  }\n\n  render() {\n    const { currentStations, nearby } = this.props;\n    if (currentStations.length == 0) {\n      return <div />;\n    } else {\n      const title = nearby\n        ? I18n.t(\"nearby_currents\")\n        : I18n.t(\"current_stations\");\n      return (\n        <div className=\"card bg-tides3 mb-2\">\n          <div className=\"card-body text-white\">\n            <h2 className=\"pl-3\">{title}</h2>\n            <div className=\"list-group list-group-flush\">\n              {currentStations.map(currentStation => (\n                <a\n                  href={\"/current_stations/\" + currentStation.id}\n                  className=\"list-group-item list-group-item-action bg-tides2 text-white\"\n                  key={currentStation.id}\n                >\n                  <div>{currentStation.name}</div>\n                  {this.distanceAway(currentStation)}\n                </a>\n              ))}\n            </div>\n          </div>\n        </div>\n      );\n    }\n  }\n}\n\nexport default CurrentStations;\n","import React from \"react\";\nimport I18n from \"../../config/locales\";\n\nconst Countries = ({ countries }) => {\n  if (countries === undefined || countries.length == 0) {\n    return <div />;\n  } else {\n    const userLocale = window.navigator.language;\n    const countryCode = userLocale.substr(userLocale.indexOf(\"-\") + 1);\n    var orderedCountries = [];\n    for (var i = 0; i < countries.length; i++) {\n      if (countries[i].country_code == countryCode) {\n        orderedCountries.unshift(countries[i]);\n      } else {\n        orderedCountries.push(countries[i]);\n      }\n    }\n    return (\n      <div className=\"card bg-tides3 mb-2\">\n        <div className=\"card-body text-white\">\n          <h2 className=\"pl-3\">{I18n.t(\"by_country\")}</h2>\n          <ul className=\"list-group list-group-flush\">\n            {orderedCountries.map(country => (\n              <a\n                href={\"/countries/\" + country.id}\n                className=\"list-group-item list-group-item-action bg-tides2 text-white\"\n                key={country.id}\n              >\n                {country.name}\n              </a>\n            ))}\n          </ul>\n        </div>\n      </div>\n    );\n  }\n};\n\nexport default Countries;\n","import React from \"react\";\nimport I18n from \"../../config/locales\";\n\nconst States = ({ states, stateTerm }) => {\n  if (states === undefined || states.length == 0) {\n    return <div />;\n  } else {\n    return (\n      <div className=\"card bg-tides3 mb-2\">\n        <div className=\"card-body text-white\">\n          <h2 className=\"pl-3\" style={{ textTransform: \"capitalize\" }}>\n            {stateTerm}\n          </h2>\n          <ul className=\"list-group list-group-flush\">\n            {states.map(state => (\n              <a\n                href={\"/states/\" + state.id}\n                className=\"list-group-item list-group-item-action bg-tides2 text-white\"\n                key={state.id}\n              >\n                {state.name}\n              </a>\n            ))}\n          </ul>\n        </div>\n      </div>\n    );\n  }\n};\n\nexport default States;\n","import React from \"react\";\nimport I18n from \"../../config/locales\";\n\nconst Cities = ({ cities }) => {\n  if (cities === undefined || cities.length == 0) {\n    return <div />;\n  } else {\n    return (\n      <div className=\"card bg-tides3 mb-2\">\n        <div className=\"card-body text-white\">\n          <h2 className=\"pl-3\">{I18n.t(\"cities\")}</h2>\n          <ul className=\"list-group list-group-flush\">\n            {cities.map(city => (\n              <a\n                href={\"/cities/\" + city.id}\n                className=\"list-group-item list-group-item-action bg-tides2 text-white\"\n                key={city.id}\n              >\n                {city.name}\n              </a>\n            ))}\n          </ul>\n        </div>\n      </div>\n    );\n  }\n};\n\nexport default Cities;\n","import React from \"react\";\nimport TideStations from \"./TideStations\";\nimport CurrentStations from \"./CurrentStations\";\nimport Countries from \"./Countries\";\nimport States from \"./States\";\nimport Cities from \"./Cities\";\nimport Button from \"react-bootstrap/Button\";\n\nconst LocationList = ({ results }) => {\n  if (results === null) {\n    return <div />;\n  } else {\n    const tideStations = results.tide_stations;\n    const currentStations = results.current_stations;\n    const countries = results.countries;\n    const states = results.states;\n    const stateTerm = results.state_term;\n    const cities = results.cities;\n    const nearby = states === undefined && cities === undefined;\n    return (\n      <div>\n        <States states={states} stateTerm={stateTerm} />\n        <Cities cities={cities} />\n        <TideStations tideStations={tideStations} nearby={nearby} />\n        <CurrentStations currentStations={currentStations} nearby={nearby} />\n        <Countries countries={countries} />\n      </div>\n    );\n  }\n};\n\nexport default LocationList;\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { Map as Maplibre, AttributionControl, Layer, Popup, Source } from \"react-map-gl/maplibre\";\nimport { WebMercatorViewport } from '@math.gl/web-mercator';\nimport I18n from \"../../config/locales\";\n\nconst styleURL = \"https://d1nezfegjr0s5p.cloudfront.net/tiles/esri-style.json.gz\";\nconst stationsURL = \"https://d1nezfegjr0s5p.cloudfront.net/tiles/source.json.gz\";\n\nexport default function Map({ results }) {\n  const [viewport, setViewport] = useState({\n    // bug: map won't update to user location if zoom 0, zoom 1 works\n    // so default lat/lng is in the middle of the atlantic ocean\n    latitude: 30,\n    longitude: -40,\n    zoom: 1\n  });\n  const [showPopup, setShowPopup] = useState(false);\n  const [popupStation, setPopupStation] = useState(null);\n  const mapContainerRef = useRef(null);\n\n  useEffect(() => {\n    // show popup only when loaded\n    if (popupStation) {\n      setShowPopup(true);\n    }\n\n    // bounds indicate country, state, or city\n    if ('max_x' in results && 'max_y' in results && 'min_x' in results && 'min_y' in results) {\n      const width = mapContainerRef.current.offsetWidth;\n      const height = mapContainerRef.current.offsetHeight;\n      const { longitude, latitude, zoom } = new WebMercatorViewport({\n        width,\n        height\n      })\n      .fitBounds(\n        [\n          [parseFloat(results.min_x), parseFloat(results.min_y)],\n          [parseFloat(results.max_x), parseFloat(results.max_y)]\n        ],\n        { padding: 30 }\n      );\n      setViewport({\n        longitude,\n        latitude,\n        zoom,\n        width,\n        height\n      });\n    }\n    // or center on user location\n    else if ('userLat' in results && 'userLng' in results) {\n      setViewport({\n        longitude: results.userLng,\n        latitude: results.userLat,\n        zoom: 11,\n      });\n    }\n  }, [popupStation, results]);\n\n  const currentLayerStyle = {\n    id: \"currentStationsInactiveLayer\",\n    type: \"symbol\",\n    \"source-layer\": \"stations\",\n    filter: [\"==\", \"station_type\", \"current\"],\n    layout: {\n      \"icon-image\": \"currentStationInactive\",\n      \"icon-size\": 0.75,\n    },\n    minzoom: 3,\n    maxzoom: 20\n  };\n\n  const tideLayerStyle = {\n    id: \"tideStationsInactiveLayer\",\n    type: \"symbol\",\n    \"source-layer\": \"stations\",\n    filter: [\"==\", \"station_type\", \"tide\"],\n    layout: {\n      \"icon-image\": \"tideStationInactive\",\n      \"icon-size\": 0.75,\n    },\n    minzoom: 3,\n    maxzoom: 20\n  };\n\n  return (\n    <div ref={mapContainerRef}>\n      <Maplibre\n        {...viewport}\n        onMove={event => setViewport(event.viewState)}\n        style={{\n          borderStyle: \"solid\",\n          borderWidth: \"1px\",\n          borderColor: \"#0a405a\",\n          width: '100%',\n          height: '60vh'\n        }}\n        mapStyle={styleURL}\n        attributionControl={false}\n        onClick={(e) => {\n          if (e.features.length > 0 && e.features[0].source == \"stations\") {\n            let station = e.features[0].properties;\n            station.lat = e.lngLat.lat;\n            station.lng = e.lngLat.lng;\n            setPopupStation(station);\n          }\n        }}\n        interactiveLayerIds={[\n          \"tideStationsInactiveLayer\",\n          \"currentStationsInactiveLayer\"\n        ]}\n      >\n        <Source\n          id=\"stations\"\n          url={stationsURL}\n          type=\"vector\"\n          minzoom={0}\n          maxzoom={10}\n        >\n          <Layer {...tideLayerStyle} />\n          <Layer {...currentLayerStyle} />\n        </Source>\n        {showPopup && (\n          <Popup\n            longitude={popupStation.lng}\n            latitude={popupStation.lat}\n            className=\"stationPopup\"\n            onClose={() => setShowPopup(false)}>\n              <div>\n                <p>\n                  <strong>{popupStation.name}</strong>\n                  <br />\n                  <a href={`/${popupStation.station_type}_stations/${popupStation.id}`}>\n                    Visit {popupStation.station_type} station\n                  </a>\n                </p>\n              </div>\n          </Popup>\n        )}\n        <AttributionControl\n          customAttribution={I18n.t(\"attribution_body\")}\n          compact={false}\n        />\n      </Maplibre>\n    </div>\n  );\n}","import React, { Component } from \"react\";\nimport I18n from \"../../config/locales\";\nimport { Helmet } from \"react-helmet\";\n\nconst defaultTitle = I18n.t(\"subtitle\");\n\nclass Title extends Component {\n  getTitle() {\n    if (this.props.results !== null && this.props.results.name !== undefined) {\n      return this.props.results.name + \" \" + I18n.t(\"tides\");\n    } else if (\n      window.location.pathname == \"/\" ||\n      window.location.pathname == \"/countries\"\n    ) {\n      return defaultTitle;\n    }\n    return null;\n  }\n\n  getTitleTag(title) {\n    if (title === null || title === defaultTitle) {\n      return I18n.t(\"app_name\");\n    } else {\n      return title + \" - \" + I18n.t(\"app_name\");\n    }\n  }\n\n  render() {\n    const title = this.getTitle();\n    return (\n      <div>\n        <Helmet>\n          <title>{this.getTitleTag(title)}</title>\n        </Helmet>\n        <h1>{title}</h1>\n      </div>\n    );\n  }\n}\n\nexport default Title;\n","import React, { useEffect, useState } from \"react\";\nimport LocationList from \"../locations\";\nimport { useParams } from \"react-router-dom\";\nimport Map from \"../locations/Map\";\nimport Breadcrumbs from \"./Breadcrumbs\";\nimport Title from \"./Title\";\nimport MobileStoreButtons from \"./MobileStoreButtons\";\n\nexport default function Home({endpoint}) {\n  let apiUrl = buildApiUrl(endpoint);\n  const [lookupResults, loading, hasError] = useFetch(apiUrl);\n  return (\n    <>\n      {\n        lookupResults == null ? <div/> : <div>{renderLookupResults(lookupResults)}</div>\n      }\n    </>\n  );\n}\n\nfunction buildApiUrl(endpoint) {\n  let apiUrl = window.location.origin + \"/api/v2/locations/\" + endpoint;\n  let { id } = useParams();\n  if (id != null) {\n    apiUrl += \"/\" + id;\n  }\n  let language_code = window.navigator.userLanguage || window.navigator.language || \"en\";\n  apiUrl += \"?language=\" + language_code;\n  return apiUrl;\n}\n\nfunction renderLookupResults(lookupResults) {\n  return (\n    <div className=\"container\">\n      <div className=\"row\">\n        <div className=\"col-md d-flex justify-content-center my-3\">\n          <Title results={lookupResults} />\n        </div>\n      </div>\n      <Breadcrumbs results={lookupResults} />\n      <div className=\"row\">\n        <div className=\"col-md\">\n          <LocationList results={lookupResults} />\n        </div>\n        <div className=\"col-md\">\n          <Map results={lookupResults} />\n          <MobileStoreButtons />\n        </div>\n      </div>\n    </div>\n  );\n}\n\nfunction useFetch(url, opts) {\n  const [lookupResults, setlookupResults] = useState(null);\n  const [loading, setLoading] = useState(false);\n  const [hasError, setHasError] = useState(false);\n  useEffect(() => {\n    setLoading(true)\n    // get country results first\n    fetch(url, opts)\n      .then((res) => res.json())\n      .then((data) => {\n        setlookupResults(data)\n        setLoading(false)\n      })\n      .catch(() => {\n        setHasError(true)\n        setLoading(false)\n      });\n    // then try for location-based results\n    if (url.includes(\"locations/lookup\")) {\n      getPosition()\n        .then((position) => {\n          let lat = position.coords.latitude;\n          let lng = position.coords.longitude;\n          fetch(url + `&lat=${lat}&lng=${lng}`, opts)\n            .then((res) => res.json())\n            .then((data) => {\n              data.userLat = lat;\n              data.userLng = lng;\n              setlookupResults(data)\n              setLoading(false)\n            })\n            .catch((err) => {\n              fetch(url, opts)\n                .then((res) => res.json())\n                .then((data) => {\n                  setlookupResults(data)\n                  setLoading(false)\n                })\n            })\n        });\n    }\n  }, [ url ]);\n  return [ lookupResults, loading, hasError ];\n}\n\nfunction getPosition() {\n  return new Promise(function (resolve, reject) {\n    navigator.geolocation.getCurrentPosition(resolve, reject, {\n      enableHighAccuracy: false,\n      timeout: 10000,\n      maximumAge: Infinity,\n    });\n  }).catch(console.log);\n};","import React from \"react\";\n\nconst Privacy = () => {\n  return (\n    <div>\n      <div className=\"d-flex justify-content-center my-3\">\n        <h1>Privacy Policy</h1>\n      </div>\n      <p>\n        <b>Last updated:</b> February 22, 2020\n      </p>\n      <p>\n        Shelter Island Mapping Company, LLC (\"us\", \"we\", or \"our\") operates the\n        Tides Near Me mobile application (the \"Service\").\n      </p>\n      <p>\n        This page informs you of our policies regarding the collection, use and\n        disclosure of Personal Information when you use our Service.\n      </p>\n      <p>\n        We will not use or share your information with anyone except as\n        described in this Privacy Policy.\n      </p>\n      <p>\n        We use your Personal Information for providing and improving the\n        Service. By using the Service, you agree to the collection and use of\n        information in accordance with this policy. Unless otherwise defined in\n        this Privacy Policy, terms used in this Privacy Policy have the same\n        meanings as in our Terms and Conditions.\n      </p>\n      <h2>Information Collection And Use</h2>\n      <p>\n        While using our Service, we may ask you to provide us with certain\n        personally identifiable information that can be used to contact or\n        identify you. We collect this information for the purpose of providing\n        the Service, identifying and communicating with you, responding to your\n        requests/inquiries, servicing your purchase orders, and improving our\n        services.\n      </p>\n      <h2>Log Data</h2>\n      <p>\n        When you access the Service by or through a mobile device, we may\n        collect certain information automatically, including, but not limited\n        to, the type of mobile device you use, your mobile device unique ID, the\n        IP address of your mobile device, your mobile operating system, the type\n        of mobile Internet browser you use and other statistics (\"Log Data\").\n      </p>\n      <p>\n        In addition, we may use third party services such as Google Analytics\n        that collect, monitor and analyze this type of information in order to\n        increase our Service's functionality. These third party service\n        providers have their own privacy policies addressing how they use such\n        information.\n      </p>\n      <p>\n        Please see the section regarding Location Information below regarding\n        the use of your location information and your options.\n      </p>\n      <h2>Location Information</h2>\n      <p>\n        We may use and store information about your location depending on the\n        permissions you have set on your device. We use this information to\n        provide features of our Service, to improve and customize our Service.\n        You can enable or disable location services when you use our Service at\n        anytime, through your mobile device settings.\n      </p>\n      <h2>Cookies</h2>\n      <p>\n        Cookies are files with a small amount of data, which may include an\n        anonymous unique identifier. Cookies are sent to your browser from a web\n        site and transferred to your device. We use cookies to collect\n        information in order to improve our services for you.\n      </p>\n      <p>\n        You can instruct your browser to refuse all cookies or to indicate when\n        a cookie is being sent. The Help feature on most browsers provide\n        information on how to accept cookies, disable cookies or to notify you\n        when receiving a new cookie.\n      </p>\n      <p>\n        If you do not accept cookies, you may not be able to use some features\n        of our Service and we recommend that you leave them turned on.\n      </p>\n      <h2>Behavioral Remarketing</h2>\n      <p>\n        Shelter Island Mapping Company, LLC uses remarketing services to\n        advertise on third party web sites to you after you visited our Service.\n        We, and our third party vendors, use cookies to inform, optimize and\n        serve ads based on your past visits to our Service.\n      </p>\n      <h3>Google</h3>\n      <p>Google AdWords remarketing service is provided by Google Inc.</p>\n      <p>\n        You can opt-out of Google Analytics for Display Advertising and\n        customize the Google Display Network ads by visiting the Google Ads\n        Settings page: http://www.google.com/settings/ads\n      </p>\n      <p>\n        Google also recommends installing the Google Analytics Opt-out Browser\n        Add-on - https://tools.google.com/dlpage/gaoptout - for your web\n        browser. Google Analytics Opt-out Browser Add-on provides visitors with\n        the ability to prevent their data from being collected and used by\n        Google Analytics.\n      </p>\n      <p>\n        For more information on the privacy practices of Google, please visit\n        the Google Privacy & Terms web page:\n        http://www.google.com/intl/en/policies/privacy/\n      </p>\n      <h3>Twitter</h3>\n      <p>Twitter remarketing service is provided by Twitter Inc.</p>\n      <p>\n        You can opt-out from Twitter's interest-based ads by following their\n        instructions: https://support.twitter.com/articles/20170405\n      </p>\n      <p>\n        You can learn more about the privacy practices and policies of Twitter\n        by visiting their Privacy Policy page: https://twitter.com/privacy\n      </p>\n      <h3>Facebook</h3>\n      <p>Facebook remarketing service is provided by Facebook Inc.</p>\n      <p>\n        You can learn more about interest-based advertising from Facebook by\n        visiting this page: https://www.facebook.com/help/164968693837950\n      </p>\n      <p>\n        To opt-out from Facebook's interest-based ads follow these instructions\n        from Facebook: https://www.facebook.com/about/ads/#568137493302217\n      </p>\n      <p>\n        Facebook adheres the Self-Regulatory Principles for Online Behavioral\n        Advertising established by the Digital Advertising Alliance. You can\n        also opt-out from Facebook and other participating companies through the\n        Digital Advertising Alliance in the USA\n        http://www.aboutads.info/choices/, the Digital Advertising Alliance of\n        Canada in Canada http://youradchoices.ca/ or the European Interactive\n        Digital Advertising Alliance in Europe http://www.youronlinechoices.eu/,\n        or opt-out using your mobile device settings.\n      </p>\n      <p>\n        For more information on the privacy practices of Facebook, please visit\n        Facebook's Data Policy: https://www.facebook.com/privacy/explanation\n      </p>\n      <h2>Service Providers</h2>\n      <p>\n        We may employ third party companies and individuals to facilitate our\n        Service, to provide the Service on our behalf, to perform\n        Service-related services and/or to assist us in analyzing how our\n        Service is used.\n      </p>\n      <p>\n        These third parties have access to your Personal Information only to\n        perform specific tasks on our behalf and are obligated not to disclose\n        or use your information for any other purpose.\n      </p>\n      <h2>Business Transaction</h2>\n      <p>\n        If Shelter Island Mapping Company, LLC is involved in a merger,\n        acquisition or asset sale, your Personal Information may be transferred\n        as a business asset. In such cases, we will provide notice before your\n        Personal Information is transferred and/or becomes subject to a\n        different Privacy Policy.\n      </p>\n      <h2>Security</h2>\n      <p>\n        The security of your Personal Information is important to us, and we\n        strive to implement and maintain reasonable, commercially acceptable\n        security procedures and practices appropriate to the nature of the\n        information we store, in order to protect it from unauthorized access,\n        destruction, use, modification, or disclosure.\n      </p>\n      <p>\n        However, please be aware that no method of transmission over the\n        internet, or method of electronic storage is 100% secure and we are\n        unable to guarantee the absolute security of the Personal Information we\n        have collected from you.\n      </p>\n      <h2>International Transfer</h2>\n      <p>\n        Your information, including Personal Information, may be transferred to\n        — and maintained on — computers located outside of your state, province,\n        country or other governmental jurisdiction where the data protection\n        laws may differ than those from your jurisdiction.\n      </p>\n      <p>\n        If you are located outside United States and choose to provide\n        information to us, please note that we transfer the information,\n        including Personal Information, to United States and process it there.\n      </p>\n      <p>\n        Your consent to this Privacy Policy followed by your submission of such\n        information represents your agreement to that transfer.\n      </p>\n      <h2>Links To Other Sites</h2>\n      <p>\n        Our Service may contain links to other sites that are not operated by\n        us. If you click on a third party link, you will be directed to that\n        third party's site. We strongly advise you to review the Privacy Policy\n        of every site you visit.\n      </p>\n      <p>\n        We have no control over, and assume no responsibility for the content,\n        privacy policies or practices of any third party sites or services.\n      </p>\n      <h2>Children's Privacy</h2>\n      <p>\n        Only persons age 18 or older have permission to access our Service. Our\n        Service does not address anyone under the age of 13 (\"Children\").\n      </p>\n      <p>\n        We do not knowingly collect personally identifiable information from\n        children under 13. If you are a parent or guardian and youlearn that\n        your Children have provided us with Personal Information, please contact\n        us. If we become aware that we have collected Personal Information from\n        a children under age 13 without verification of parental consent, we\n        take steps to remove that information from our servers.\n      </p>\n      <h2>Changes To This Privacy Policy</h2>\n      <p>\n        This Privacy Policy is effective as of February 22, 2020 and will remain\n        in effect except with respect to any changes in its provisions in the\n        future, which will be in effect immediately after being posted on this\n        page.\n      </p>\n      <p>\n        We reserve the right to update or change our Privacy Policy at any time\n        and you should check this Privacy Policy periodically. Your continued\n        use of the Service after we post any modifications to the Privacy Policy\n        on this page will constitute your acknowledgment of the modifications\n        and your consent to abide and be bound by the modified Privacy Policy.\n      </p>\n      <p>\n        If we make any material changes to this Privacy Policy, we will notify\n        you either through the email address you have provided us, or by placing\n        a prominent notice on our website.\n      </p>\n      <h2>Contact Us</h2>\n      <p>\n        If you have any questions about this Privacy Policy, please contact us:\n        <a href=\"mailto:support@tidesnear.me\">support@tidesnear.me</a>\n      </p>\n    </div>\n  );\n};\n\nexport default Privacy;\n","import React from \"react\";\n\nconst Support = () => {\n  return (\n    <div>\n      <div className=\"d-flex justify-content-center my-3\">\n        <h1>Support</h1>\n      </div>\n      <p>\n        Email <a href=\"mailto:support@tidesnear.me\">support@tidesnear.me</a> for\n        support!\n      </p>\n    </div>\n  );\n};\n\nexport default Support;\n","import React from \"react\";\n\nconst Terms = () => {\n  return (\n    <div>\n      <div className=\"d-flex justify-content-center my-3\">\n        <h1>Terms and Conditions</h1>\n      </div>\n      <p>\n        <b>Last updated:</b> February 22, 2020\n      </p>\n      <p>\n        Please read these Terms and Conditions (\"Terms\", \"Terms and Conditions\")\n        carefully before using the Tides Near Me mobile application (the\n        \"Service\") operated by Shelter Island Mapping Company, LLC (\"us\", \"we\",\n        or \"our\").\n      </p>\n      <p>\n        Your access to and use of the Service is conditioned upon your\n        acceptance of and compliance with these Terms. These Terms apply to all\n        visitors, users and others who wish to access or use the Service.\n      </p>\n      <p>\n        By accessing or using the Service you agree to be bound by these Terms.\n        If you disagree with any part of the terms then you do not have\n        permission to access the Service.\n      </p>\n      <h2>Intellectual Property</h2>\n      <p>\n        The Service and its original content, features and functionality are and\n        will remain the exclusive property of Shelter Island Mapping Company,\n        LLC and its licensors. The Service is protected by copyright, trademark,\n        and other laws of both the United States and foreign countries. Our\n        trademarks and trade dress may not be used in connection with any\n        product or service without the prior written consent of Shelter Island\n        Mapping Company, LLC.\n      </p>\n      <h2>Links To Other Web Sites</h2>\n      <p>\n        Our Service may contain links to third party web sites or services that\n        are not owned or controlled by Shelter Island Mapping Company, LLC.\n      </p>\n      <p>\n        Shelter Island Mapping Company, LLC has no control over, and assumes no\n        responsibility for the content, privacy policies, or practices of any\n        third party web sites or services. We do not warrant the offerings of\n        any of these entities/individuals or their websites.\n      </p>\n      <p>\n        You acknowledge and agree that Shelter Island Mapping Company, LLC shall\n        not be responsible or liable, directly or indirectly, for any damage or\n        loss caused or alleged to be caused by or in connection with use of or\n        reliance on any such content, goods or services available on or through\n        any such third party web sites or services.\n      </p>\n      <p>\n        We strongly advise you to read the terms and conditions and privacy\n        policies of any third party web sites or services that you visit.\n      </p>\n      <h2>Indemnification</h2>\n      <p>\n        You agree to defend, indemnify and hold harmless Shelter Island Mapping\n        Company, LLC and its licensee and licensors, and their employees,\n        contractors, agents, officers and directors, from and against any and\n        all claims, damages, obligations, losses, liabilities, costs or debt,\n        and expenses (including but not limited to attorney's fees), resulting\n        from or arising out of a) your use and access of the Service, or b) a\n        breach of these Terms.\n      </p>\n      <h2>Limitation Of Liability</h2>\n      <p>\n        In no event shall Shelter Island Mapping Company, LLC, nor its\n        directors, employees, partners, agents, suppliers, or affiliates, be\n        liable for any indirect, incidental, special, consequential or punitive\n        damages, including without limitation, loss of profits, data, use,\n        goodwill, or other intangible losses, resulting from (i) your access to\n        or use of or inability to access or use the Service; (ii) any conduct or\n        content of any third party on the Service; (iii) any content obtained\n        from the Service; and (iv) unauthorized access, use or alteration of\n        your transmissions or content, whether based on warranty, contract, tort\n        (including negligence) or any other legal theory, whether or not we have\n        been informed of the possibility of such damage, and even if a remedy\n        set forth herein is found to have failed of its essential purpose.\n      </p>\n      <h2>Disclaimer</h2>\n      <p>\n        Your use of the Service is at your sole risk. The Service is provided on\n        an \"AS IS\" and \"AS AVAILABLE\" basis. The Service is provided without\n        warranties of any kind, whether express or implied, including, but not\n        limited to, implied warranties of merchantability, fitness for a\n        particular purpose, non-infringement or course of performance.\n      </p>\n      <p>\n        Shelter Island Mapping Company, LLC, its subsidiaries, affiliates, and\n        its licensors do not warrant that a) the Service will function\n        uninterrupted, secure or available at any particular time or location;\n        b) any errors or defects will be corrected; c) the Service is free of\n        viruses or other harmful components; or d) the results of using the\n        Service will meet your requirements.\n      </p>\n      <h2>Exclusions</h2>\n      <p>\n        Some jurisdictions do not allow the exclusion of certain warranties or\n        the exclusion or limitation of liability for consequential or incidental\n        damages, so the limitations above may not apply to you.\n      </p>\n      <h2>Governing Law</h2>\n      <p>\n        These Terms shall be governed and construed in accordance with the laws\n        of New York, United States, without regard to its conflict of law\n        provisions.\n      </p>\n      <p>\n        Our failure to enforce any right or provision of these Terms will not be\n        considered a waiver of those rights. If any provision of these Terms is\n        held to be invalid or unenforceable by a court, the remaining provisions\n        of these Terms will remain in effect. These Terms constitute the entire\n        agreement between us regarding our Service, and supersede and replace\n        any prior agreements we might have had between us regarding the Service.\n      </p>\n      <h2>Changes</h2>\n      <p>\n        We reserve the right, at our sole discretion, to modify or replace these\n        Terms at any time. If a revision is material we will provide at least 30\n        days notice prior to any new terms taking effect. What constitutes a\n        material change will be determined at our sole discretion.\n      </p>\n      <p>\n        By continuing to access or use our Service after any revisions become\n        effective, you agree to be bound by the revised terms. If you do not\n        agree to the new terms, you are no longer authorized to use the Service.\n      </p>\n      <h2>Contact Us</h2>\n      <p>\n        If you have any questions about these Terms, please contact us:\n        <a href=\"mailto:support@tidesnear.me\">support@tidesnear.me</a>\n      </p>\n    </div>\n  );\n};\n\nexport default Terms;\n","import React, { Component } from \"react\";\nimport I18n from \"../../../config/locales\";\nimport {\n  relativeTimeFromNow,\n  timeDisplay,\n  timezoneIfDifferent\n} from \"../../../config/datetime\";\nimport UpArrow from \"images/tides/up.png\";\nimport DownArrow from \"images/tides/down.png\";\nimport Sun from \"images/tides/sun.png\";\nimport Moon from \"images/tides/moon.png\";\n\nclass Now extends Component {\n  tideHeadline(tide, type) {\n    if (tide.high) {\n      return (\n        <div>\n          {I18n.t(type) + \" - \" + I18n.t(\"high\")}\n          <img className=\"ml-2 mb-2\" src={UpArrow} />\n        </div>\n      );\n    } else {\n      return (\n        <div>\n          {I18n.t(type) + \" - \" + I18n.t(\"low\")}\n          <img className=\"ml-2 mb-2\" src={DownArrow} />\n        </div>\n      );\n    }\n  }\n\n  solarHeadline(solar) {\n    var str;\n    if (solar.rise) {\n      str = I18n.t(\"sunrise_now\");\n    } else {\n      str = I18n.t(\"sunset_now\");\n    }\n    return (\n      <div>\n        <img className=\"mr-2 mb-2\" src={Sun} />\n        {str}\n      </div>\n    );\n  }\n\n  lunarHeadline(lunar) {\n    var str;\n    if (lunar.rise) {\n      str = I18n.t(\"moonrise_now\");\n    } else {\n      str = I18n.t(\"moonset_now\");\n    }\n    return (\n      <div>\n        <img className=\"mr-2 mb-2\" src={Moon} />\n        {str}\n      </div>\n    );\n  }\n\n  render() {\n    const { tideStation } = this.props;\n    return (\n      <div>\n        <div className=\"card text-center bg-tides1 mb-1 py-0\">\n          <div className=\"card-body text-white\">\n            <div className=\"h4 my-0\">\n              {this.tideHeadline(tideStation.last_tide, \"last_tide\")}\n            </div>\n            <div className=\"my-0\">\n              <time className=\"h1\">\n                {timeDisplay(tideStation.last_tide.timestamp)}\n                {timezoneIfDifferent(tideStation.timezone, \" \")}\n              </time>\n            </div>\n            <div className=\"h6 mb-0 mt-1\">\n              {relativeTimeFromNow(tideStation.last_tide.timestamp)}\n            </div>\n          </div>\n        </div>\n        <div className=\"card text-center bg-tides2 mb-1 py-0\">\n          <div className=\"card-body text-white\">\n            <div className=\"h4 my-0\">\n              {this.tideHeadline(tideStation.next_tide, \"next_tide\")}\n            </div>\n            <div className=\"my-0\">\n              <time className=\"h1\">\n                {timeDisplay(tideStation.next_tide.timestamp)}\n                {timezoneIfDifferent(tideStation.timezone, \" \")}\n              </time>\n            </div>\n            <div className=\"h6 mb-0 mt-1\">\n              {relativeTimeFromNow(tideStation.next_tide.timestamp)}\n            </div>\n          </div>\n        </div>\n        <div className=\"card text-center bg-tides4 mb-1 py-0\">\n          <div className=\"card-body text-white\">\n            <div className=\"h4 my-0\">\n              {this.solarHeadline(tideStation.next_solar)}\n            </div>\n            <div className=\"my-0\">\n              <time className=\"h1\">\n                {timeDisplay(tideStation.next_solar.timestamp)}\n                {timezoneIfDifferent(tideStation.timezone, \" \")}\n              </time>\n            </div>\n            <div className=\"h6 mb-0 mt-1\">\n              {relativeTimeFromNow(tideStation.next_solar.timestamp)}\n            </div>\n          </div>\n        </div>\n        <div className=\"card text-center bg-tides6 py-0\">\n          <div className=\"card-body text-white\">\n            <div className=\"h4 my-0\">\n              {this.lunarHeadline(tideStation.next_lunar)}\n            </div>\n            <div className=\"my-0\">\n              <time className=\"h1\">\n                {timeDisplay(tideStation.next_lunar.timestamp)}\n                {timezoneIfDifferent(tideStation.timezone, \" \")}\n              </time>\n            </div>\n            <div className=\"h6 mb-0 mt-1\">\n              {relativeTimeFromNow(tideStation.next_lunar.timestamp)}\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  }\n}\n\nexport default Now;\n","import React, { Component } from \"react\";\nimport I18n from \"../../../config/locales\";\nimport {\n  dateDisplay,\n  microformatTime,\n  timeDisplay,\n  timezoneIfDifferent,\n} from \"../../../config/datetime\";\nimport UpArrow from \"images/tides/up.png\";\nimport DownArrow from \"images/tides/down.png\";\nimport Tides from \"images/tides/tide.png\";\nimport Sun from \"images/tides/sun.png\";\nimport Moon from \"images/tides/moon.png\";\n\nclass Week extends Component {\n  tidalEvent(tidalEvent, last = false) {\n    const { tideStation } = this.props;\n    const metric = tideStation.country_id !== 1;\n    return (\n      <tr\n        key={tidalEvent.timestamp}\n        itemScope=\"itemScope\"\n        itemType=\"http://schema.org/Event\"\n      >\n        <td\n          className=\"border-tides5 text-left\"\n          style={{ width: \"33.33%\" }}\n          itemProp=\"name\"\n        >\n          {tidalEvent.high ? (\n            <img className=\"mr-2 mb-1\" src={UpArrow} />\n          ) : (\n            <img className=\"mr-2 mb-1\" src={DownArrow} />\n          )}\n          {tidalEvent.high ? I18n.t(\"high\") : I18n.t(\"low\")}\n        </td>\n        <td className=\"border-tides5 text-center\" style={{ width: \"33.33%\" }}>\n          <time\n            itemProp=\"startDate\"\n            dateTime={microformatTime(\n              tidalEvent.timestamp,\n              tideStation.timezone\n            )}\n          >\n            {timeDisplay(tidalEvent.timestamp)}\n          </time>\n          <div\n            itemProp=\"location\"\n            itemScope=\"itemScope\"\n            itemType=\"http://schema.org/Place\"\n          >\n            <meta itemProp=\"name\" content={tideStation.name} />\n            <div\n              itemProp=\"geo\"\n              itemScope=\"itemScope\"\n              itemType=\"http://schema.org/GeoCoordinates\"\n            >\n              <meta itemProp=\"latitude\" content={tideStation.lat} />\n              <meta itemProp=\"longitude\" content={tideStation.lng} />\n            </div>\n          </div>\n        </td>\n        <td\n          className=\"border-tides5 text-right\"\n          style={{ width: \"33.33%\" }}\n          itemProp=\"description\"\n        >\n          {metric\n            ? (tidalEvent.height_cm / 100).toFixed(2) + I18n.t(\"meters\")\n            : tidalEvent.height_ft.toFixed(1) + \"'\"}\n        </td>\n      </tr>\n    );\n  }\n\n  tidalEvents(date) {\n    try {\n      const { tideStation } = this.props;\n      return (\n        <div className=\"bg-tides1 px-3 pt-1\">\n          <table className=\"table table-dark bg-tides1 table-sm mb-0\">\n            <thead className=\"table-borderless\">\n              <tr>\n                <td colSpan=\"3\" className=\"text-center\">\n                  <img className=\"mr-2 mb-1\" src={Tides} />\n                  {I18n.t(\"tides\").toUpperCase()}\n                  {timezoneIfDifferent(tideStation.timezone, \" (\", \")\")}\n                </td>\n              </tr>\n            </thead>\n            <tbody>\n              {tideStation.next_seven_days[\n                date\n              ].tidal_events.map((tidalEvent, index) =>\n                index + 1 !=\n                tideStation.next_seven_days[date].tidal_events.length\n                  ? this.tidalEvent(tidalEvent)\n                  : this.tidalEvent(tidalEvent, true)\n              )}\n            </tbody>\n          </table>\n        </div>\n      );\n    } catch (err) {\n      // some UKHO stations have celestial with no tides\n      return <div />;\n    }\n  }\n\n  solarEvent(solarEvent, last = false) {\n    const { tideStation } = this.props;\n    return (\n      <tr\n        key={solarEvent.timestamp}\n        itemScope=\"itemScope\"\n        itemType=\"http://schema.org/Event\"\n      >\n        <td\n          className=\"border-tides5 text-left\"\n          style={{ width: \"33.33%\" }}\n          itemProp=\"name\"\n        >\n          {solarEvent.rise ? (\n            <img className=\"mr-2 mb-1\" src={UpArrow} />\n          ) : (\n            <img className=\"mr-2 mb-1\" src={DownArrow} />\n          )}\n          {solarEvent.rise ? I18n.t(\"sunrise_week\") : I18n.t(\"sunset_week\")}\n        </td>\n        <td className=\"border-tides5 text-center\" style={{ width: \"33.33%\" }}>\n          <time\n            itemProp=\"startDate\"\n            dateTime={microformatTime(\n              solarEvent.timestamp,\n              tideStation.timezone\n            )}\n          >\n            {timeDisplay(solarEvent.timestamp)}\n          </time>\n          <div\n            itemProp=\"location\"\n            itemScope=\"itemScope\"\n            itemType=\"http://schema.org/Place\"\n          >\n            <meta itemProp=\"name\" content={tideStation.name} />\n            <div\n              itemProp=\"geo\"\n              itemScope=\"itemScope\"\n              itemType=\"http://schema.org/GeoCoordinates\"\n            >\n              <meta itemProp=\"latitude\" content={tideStation.lat} />\n              <meta itemProp=\"longitude\" content={tideStation.lng} />\n            </div>\n          </div>\n        </td>\n        <td className=\"border-tides5 text-right\" style={{ width: \"33.33%\" }}>\n          &nbsp;\n        </td>\n      </tr>\n    );\n  }\n\n  solarEvents(date) {\n    const { tideStation } = this.props;\n    return (\n      <div className=\"bg-tides2 px-3\">\n        <table className=\"table table-dark bg-tides2 my-0 py-1 table-sm\">\n          <thead className=\"table-borderless\">\n            <tr>\n              <td colSpan=\"3\" className=\"text-center pt-2\">\n                <img className=\"mr-2 mb-1\" src={Sun} />\n                {I18n.t(\"sun\").toUpperCase()}\n                {timezoneIfDifferent(tideStation.timezone, \" (\", \")\")}\n              </td>\n            </tr>\n          </thead>\n          <tbody>\n            {tideStation.next_seven_days[\n              date\n            ].solar_events.map((solarEvent, index) =>\n              index + 1 != tideStation.next_seven_days[date].solar_events.length\n                ? this.solarEvent(solarEvent)\n                : this.solarEvent(solarEvent, true)\n            )}\n          </tbody>\n        </table>\n      </div>\n    );\n  }\n\n  lunarEvent(lunarEvent, last = false) {\n    const { tideStation } = this.props;\n    return (\n      <tr\n        key={lunarEvent.timestamp}\n        itemScope=\"itemScope\"\n        itemType=\"http://schema.org/Event\"\n      >\n        <td\n          className=\"border-tides5 text-left\"\n          style={{ width: \"33.33%\" }}\n          itemProp=\"name\"\n        >\n          {lunarEvent.rise ? (\n            <img className=\"mr-2 mb-1\" src={UpArrow} />\n          ) : (\n            <img className=\"mr-2 mb-1\" src={DownArrow} />\n          )}\n          {lunarEvent.rise ? I18n.t(\"moonrise_week\") : I18n.t(\"moonset_week\")}\n        </td>\n        <td className=\"border-tides5 text-center\" style={{ width: \"33.33%\" }}>\n          <time\n            itemProp=\"startDate\"\n            dateTime={microformatTime(\n              lunarEvent.timestamp,\n              tideStation.timezone\n            )}\n          >\n            {timeDisplay(lunarEvent.timestamp)}\n          </time>\n          <div\n            itemProp=\"location\"\n            itemScope=\"itemScope\"\n            itemType=\"http://schema.org/Place\"\n          >\n            <meta itemProp=\"name\" content={tideStation.name} />\n            <div\n              itemProp=\"geo\"\n              itemScope=\"itemScope\"\n              itemType=\"http://schema.org/GeoCoordinates\"\n            >\n              <meta itemProp=\"latitude\" content={tideStation.lat} />\n              <meta itemProp=\"longitude\" content={tideStation.lng} />\n            </div>\n          </div>\n        </td>\n        <td\n          className=\"border-tides5 text-right\"\n          style={{ width: \"33.33%\" }}\n          itemProp=\"description\"\n        >\n          {(lunarEvent.percentage * 100).toFixed(0)}%\n        </td>\n      </tr>\n    );\n  }\n\n  lunarEvents(date) {\n    const { tideStation } = this.props;\n    return (\n      <div className=\"bg-tides4 px-3\">\n        <table className=\"table table-dark bg-tides4 mt-0 py-1 table-sm\">\n          <thead className=\"table-borderless\">\n            <tr>\n              <td colSpan=\"3\" className=\"text-center pt-2\">\n                <img className=\"mr-2 mb-1\" src={Moon} />\n                {I18n.t(\"moon\").toUpperCase()}\n                {timezoneIfDifferent(tideStation.timezone, \" (\", \")\")}\n              </td>\n            </tr>\n          </thead>\n          <tbody>\n            {tideStation.next_seven_days[\n              date\n            ].lunar_events.map((lunarEvent, index) =>\n              index + 1 != tideStation.next_seven_days[date].lunar_events.length\n                ? this.lunarEvent(lunarEvent)\n                : this.lunarEvent(lunarEvent, true)\n            )}\n          </tbody>\n        </table>\n      </div>\n    );\n  }\n\n  dayForecast(date) {\n    return (\n      <div className=\"card bg-tides3 my-2\" key={date}>\n        <div className=\"card-body text-center text-white\">\n          <div className=\"mb-2\">\n            <time className=\"card-title h5\">{dateDisplay(date)}</time>\n          </div>\n          {this.tidalEvents(date)}\n          {this.solarEvents(date)}\n          {this.lunarEvents(date)}\n        </div>\n      </div>\n    );\n  }\n\n  weekForecast() {\n    const { tideStation } = this.props;\n    var dateKeyArray = [];\n    for (var date in tideStation.next_seven_days) {\n      dateKeyArray.push(date);\n    }\n    return dateKeyArray.map((date) => this.dayForecast(date));\n  }\n\n  render() {\n    const { tideStation } = this.props;\n    return (\n      <div>\n        <h2 className=\"text-center mt-3\">{I18n.t(\"week\")}</h2>\n        {this.weekForecast()}\n      </div>\n    );\n  }\n}\n\nexport default Week;\n","import React, { useEffect, useState } from \"react\";\nimport { Map as Maplibre, AttributionControl, Layer, Popup, Source } from \"react-map-gl/maplibre\";\nimport I18n from \"../../../config/locales\";\n\nconst styleURL = \"https://d1nezfegjr0s5p.cloudfront.net/tiles/esri-style.json.gz\";\nconst stationsURL = \"https://d1nezfegjr0s5p.cloudfront.net/tiles/source.json.gz\";\n\nexport default function Map({ tideStation }) {\n  const [viewport, setViewport] = useState({\n    latitude: tideStation.lat,\n    longitude: tideStation.lng,\n    zoom: 12\n  });\n  const [showPopup, setShowPopup] = useState(false);\n  const [popupStation, setPopupStation] = useState(null);\n\n  useEffect(() => {\n    if (popupStation) {\n      setShowPopup(true);\n    }\n  }, [popupStation]);\n\n  const currentLayerStyle = {\n    id: \"currentStationsInactiveLayer\",\n    type: \"symbol\",\n    \"source-layer\": \"stations\",\n    filter: [\"==\", \"station_type\", \"current\"],\n    layout: {\n      \"icon-image\": \"currentStationInactive\",\n      \"icon-size\": 0.75,\n    },\n    minzoom: 3,\n    maxzoom: 20,\n    beforeId: \"tideStationsInactiveLayer\",\n  };\n\n  const tideLayerStyle = {\n    id: \"tideStationsInactiveLayer\",\n    type: \"symbol\",\n    \"source-layer\": \"stations\",\n    filter: [\n      \"all\",\n      [\"==\", \"station_type\", \"tide\"],\n      [\"!=\", \"id\", tideStation.id],\n    ],\n    layout: {\n      \"icon-image\": \"tideStationInactive\",\n      \"icon-size\": 0.75,\n    },\n    minzoom: 3,\n    maxzoom: 20,\n    beforeId: \"tideStationsActiveLayer\",\n  };\n\n  const activeTideLayerStyle = {\n    id: \"tideStationsActiveLayer\",\n    type: \"symbol\",\n    \"source-layer\": \"stations\",\n    filter: [\n      \"all\",\n      [\"==\", \"station_type\", \"tide\"],\n      [\"==\", \"id\", tideStation.id],\n    ],\n    layout: {\n      \"icon-image\": \"tideStationActive\",\n      \"icon-size\": 0.75,\n    },\n    minzoom: 3,\n    maxzoom: 20,\n  };\n\n  return (\n    <Maplibre\n      {...viewport}\n      onMove={event => setViewport(event.viewState)}\n      style={{\n        borderStyle: \"solid\",\n        borderWidth: \"1px\",\n        borderColor: \"#0a405a\",\n        width: '100%',\n        height: '60vh'\n      }}\n      mapStyle={styleURL}\n      attributionControl={false}\n      onClick={(e) => {\n        if (e.features.length > 0 && e.features[0].source == \"stations\") {\n          let station = e.features[0].properties;\n          station.lat = e.lngLat.lat;\n          station.lng = e.lngLat.lng;\n          setPopupStation(station);\n        }\n      }}\n      interactiveLayerIds={[\n        \"tideStationsActiveLayer\",\n        \"tideStationsInactiveLayer\",\n        \"currentStationsInactiveLayer\"\n      ]}\n    >\n      <Source\n        id=\"stations\"\n        url={stationsURL}\n        type=\"vector\"\n        minzoom={0}\n        maxzoom={10}\n      >\n        <Layer {...activeTideLayerStyle} />\n        <Layer {...tideLayerStyle} />\n        <Layer {...currentLayerStyle} />\n      </Source>\n      {showPopup && (\n        <Popup\n          longitude={popupStation.lng}\n          latitude={popupStation.lat}\n          className=\"stationPopup\"\n          onClose={() => setShowPopup(false)}>\n            <div>\n              <p>\n                <strong>{popupStation.name}</strong>\n                <br />\n                <a href={`/${popupStation.station_type}_stations/${popupStation.id}`}>\n                  Visit {popupStation.station_type} station\n                </a>\n              </p>\n            </div>\n        </Popup>\n      )}\n      <AttributionControl\n        customAttribution={I18n.t(\"attribution_body\")}\n        compact={false}\n      />\n    </Maplibre>\n  );\n}","import React, { useEffect, useState } from \"react\";\nimport I18n from \"../../../config/locales\";\nimport { Helmet } from \"react-helmet\";\nimport { useParams } from \"react-router-dom\";\nimport Now from \"./Now\";\nimport Week from \"./Week\";\nimport Map from \"./Map\";\nimport Breadcrumbs from \"../../home/Breadcrumbs\";\nimport MobileStoreButtons from \"../../home/MobileStoreButtons\";\n\nexport default function TideStation() {\n  const language_code = window.navigator.userLanguage || window.navigator.language || \"en\";\n  let { id } = useParams();\n  let apiUrl = window.location.origin + \"/api/v2\" + \"/stations/tide/\" + id + \"?language=\" + language_code;\n  const [tideStation, loading, hasError] = useFetch(apiUrl);\n  return (\n    <>\n      {\n        tideStation == null ? <div/> : <div>{renderTideStation(tideStation)}</div>\n      }\n    </>\n  );\n}\n\nfunction renderTideStation(tideStation) {\n  const title = tideStation.name + \" \" + I18n.t(\"tides\");\n  return (\n    <div className=\"container\">\n      <Helmet>\n        <title>\n          {title} - {I18n.t(\"app_name\")}\n        </title>\n        <link\n          rel=\"canonical\"\n          href={window.location.origin + window.location.pathname}\n        />\n      </Helmet>\n      <div className=\"row\">\n        <div className=\"col-md d-flex justify-content-center my-3\">\n          <h1>{title}</h1>\n        </div>\n      </div>\n      <Breadcrumbs results={tideStation} />\n      <div className=\"row\">\n        <div className=\"col-md\">\n          <Now tideStation={tideStation} />\n          <Week tideStation={tideStation} />\n        </div>\n        <div className=\"col-md\">\n          <Map tideStation={tideStation} />\n          <MobileStoreButtons />\n        </div>\n      </div>\n      {attribution(tideStation.attribution)}\n    </div>\n  );\n}\n\nfunction attribution(str) {\n  if (str !== null) {\n    return (\n      <div className=\"row\">\n      <div className=\"col\" />\n      <div className=\"col-6 text-center mb-2\">\n      <small>{str}</small>\n      </div>\n      <div className=\"col\" />\n      </div>\n      );\n  } else {\n    return <div />;\n  }\n}\n\nfunction useFetch(url, opts) {\n  const [tideStation, setResponse] = useState(null);\n  const [loading, setLoading] = useState(false);\n  const [hasError, setHasError] = useState(false);\n  useEffect(() => {\n    setLoading(true)\n    fetch(url, opts)\n      .then((res) => res.json())\n      .then((data) => {\n        setResponse(data)\n        setLoading(false)\n      })\n      .catch(() => {\n        setHasError(true)\n        setLoading(false)\n      })\n    }, [ url ]);\n  return [ tideStation, loading, hasError ];\n}\n","import React, { Component } from \"react\";\nimport { BrowserRouter, Routes, Route } from \"react-router-dom\";\nimport CurrentStation from \"./stations/current\";\nimport Home from \"./home\";\nimport Privacy from \"./home/Privacy\";\nimport Support from \"./home/Support\";\nimport Terms from \"./home/Terms\";\nimport TideStation from \"./stations/tide\";\n\nclass AppNavigation extends Component {\n  render() {\n    return (\n      <BrowserRouter>\n        <Routes>\n          <Route path=\"/cities/:id\" element={<Home endpoint=\"city\"/>}/>\n          <Route path=\"/countries\" element={<Home endpoint=\"countries\"/>}/>\n          <Route path=\"/countries/:id\" element={<Home endpoint=\"country\"/>}/>\n          <Route path=\"/current_stations/:id\" element={<CurrentStation/>} />\n          <Route path=\"/privacy\" element={<Privacy/>} />\n          <Route path=\"/states/:id\" element={<Home endpoint=\"state\"/>}/>\n          <Route path=\"/support\" element={<Support/>} />\n          <Route path=\"/terms\" element={<Terms/>} />\n          <Route path=\"/tide_stations/:id\" element={<TideStation/>} />\n          <Route path=\"/\" element={<Home endpoint=\"lookup\"/>}/>\n        </Routes>\n      </BrowserRouter>\n    );\n  }\n}\n\nexport default AppNavigation;\n","import React, { Component } from \"react\";\nimport AppNavigation from \"./AppNavigation\";\n\nclass App extends Component {\n  render() {\n    return <AppNavigation />;\n  }\n}\n\nexport default App;\n","/* eslint no-console:0 */\n// This file is automatically compiled by Webpack, along with any other files\n// present in this directory. You're encouraged to place your actual application logic in\n// a relevant structure within app/javascript and only use these pack files to reference\n// that code so it'll be compiled.\n//\n// To reference this file, add <%= javascript_pack_tag 'application' %> to the appropriate\n// layout file, like app/views/layouts/application.html.erb\n\n// Uncomment to copy all static images under ./images to the output folder and reference\n// them with the image_pack_tag helper in views (e.g <%= image_pack_tag 'rails.png' %>)\n// or the `imagePath` JavaScript helper below.\n//\n// const images = require.context('./images', true)\n// const imagePath = (name) => images(name, true)\n\nimport ReactOnRails from 'react-on-rails';\n\nimport App from '../bundles/App'\n\n// This is how react_on_rails can see the HelloWorld in the browser.\nReactOnRails.register({\n  App\n});\n","var map = {\n\t\"./af\": 5177,\n\t\"./af.js\": 5177,\n\t\"./ar\": 1509,\n\t\"./ar-dz\": 1488,\n\t\"./ar-dz.js\": 1488,\n\t\"./ar-kw\": 8676,\n\t\"./ar-kw.js\": 8676,\n\t\"./ar-ly\": 2353,\n\t\"./ar-ly.js\": 2353,\n\t\"./ar-ma\": 4496,\n\t\"./ar-ma.js\": 4496,\n\t\"./ar-ps\": 6947,\n\t\"./ar-ps.js\": 6947,\n\t\"./ar-sa\": 2682,\n\t\"./ar-sa.js\": 2682,\n\t\"./ar-tn\": 9756,\n\t\"./ar-tn.js\": 9756,\n\t\"./ar.js\": 1509,\n\t\"./az\": 5533,\n\t\"./az.js\": 5533,\n\t\"./be\": 8959,\n\t\"./be.js\": 8959,\n\t\"./bg\": 7777,\n\t\"./bg.js\": 7777,\n\t\"./bm\": 4903,\n\t\"./bm.js\": 4903,\n\t\"./bn\": 1290,\n\t\"./bn-bd\": 7357,\n\t\"./bn-bd.js\": 7357,\n\t\"./bn.js\": 1290,\n\t\"./bo\": 1545,\n\t\"./bo.js\": 1545,\n\t\"./br\": 1470,\n\t\"./br.js\": 1470,\n\t\"./bs\": 4429,\n\t\"./bs.js\": 4429,\n\t\"./ca\": 7306,\n\t\"./ca.js\": 7306,\n\t\"./cs\": 6464,\n\t\"./cs.js\": 6464,\n\t\"./cv\": 3635,\n\t\"./cv.js\": 3635,\n\t\"./cy\": 4226,\n\t\"./cy.js\": 4226,\n\t\"./da\": 3601,\n\t\"./da.js\": 3601,\n\t\"./de\": 7853,\n\t\"./de-at\": 6111,\n\t\"./de-at.js\": 6111,\n\t\"./de-ch\": 4697,\n\t\"./de-ch.js\": 4697,\n\t\"./de.js\": 7853,\n\t\"./dv\": 708,\n\t\"./dv.js\": 708,\n\t\"./el\": 4691,\n\t\"./el.js\": 4691,\n\t\"./en-au\": 3872,\n\t\"./en-au.js\": 3872,\n\t\"./en-ca\": 8298,\n\t\"./en-ca.js\": 8298,\n\t\"./en-gb\": 6195,\n\t\"./en-gb.js\": 6195,\n\t\"./en-ie\": 6584,\n\t\"./en-ie.js\": 6584,\n\t\"./en-il\": 5543,\n\t\"./en-il.js\": 5543,\n\t\"./en-in\": 9033,\n\t\"./en-in.js\": 9033,\n\t\"./en-nz\": 9402,\n\t\"./en-nz.js\": 9402,\n\t\"./en-sg\": 3004,\n\t\"./en-sg.js\": 3004,\n\t\"./eo\": 2934,\n\t\"./eo.js\": 2934,\n\t\"./es\": 7650,\n\t\"./es-do\": 838,\n\t\"./es-do.js\": 838,\n\t\"./es-mx\": 7730,\n\t\"./es-mx.js\": 7730,\n\t\"./es-us\": 6575,\n\t\"./es-us.js\": 6575,\n\t\"./es.js\": 7650,\n\t\"./et\": 3035,\n\t\"./et.js\": 3035,\n\t\"./eu\": 3508,\n\t\"./eu.js\": 3508,\n\t\"./fa\": 119,\n\t\"./fa.js\": 119,\n\t\"./fi\": 527,\n\t\"./fi.js\": 527,\n\t\"./fil\": 5995,\n\t\"./fil.js\": 5995,\n\t\"./fo\": 2477,\n\t\"./fo.js\": 2477,\n\t\"./fr\": 5498,\n\t\"./fr-ca\": 6435,\n\t\"./fr-ca.js\": 6435,\n\t\"./fr-ch\": 7892,\n\t\"./fr-ch.js\": 7892,\n\t\"./fr.js\": 5498,\n\t\"./fy\": 7071,\n\t\"./fy.js\": 7071,\n\t\"./ga\": 1734,\n\t\"./ga.js\": 1734,\n\t\"./gd\": 217,\n\t\"./gd.js\": 217,\n\t\"./gl\": 7329,\n\t\"./gl.js\": 7329,\n\t\"./gom-deva\": 2124,\n\t\"./gom-deva.js\": 2124,\n\t\"./gom-latn\": 3383,\n\t\"./gom-latn.js\": 3383,\n\t\"./gu\": 5050,\n\t\"./gu.js\": 5050,\n\t\"./he\": 1713,\n\t\"./he.js\": 1713,\n\t\"./hi\": 3861,\n\t\"./hi.js\": 3861,\n\t\"./hr\": 6308,\n\t\"./hr.js\": 6308,\n\t\"./hu\": 609,\n\t\"./hu.js\": 609,\n\t\"./hy-am\": 7160,\n\t\"./hy-am.js\": 7160,\n\t\"./id\": 4063,\n\t\"./id.js\": 4063,\n\t\"./is\": 9374,\n\t\"./is.js\": 9374,\n\t\"./it\": 8383,\n\t\"./it-ch\": 1827,\n\t\"./it-ch.js\": 1827,\n\t\"./it.js\": 8383,\n\t\"./ja\": 3827,\n\t\"./ja.js\": 3827,\n\t\"./jv\": 9722,\n\t\"./jv.js\": 9722,\n\t\"./ka\": 1794,\n\t\"./ka.js\": 1794,\n\t\"./kk\": 7088,\n\t\"./kk.js\": 7088,\n\t\"./km\": 6870,\n\t\"./km.js\": 6870,\n\t\"./kn\": 4451,\n\t\"./kn.js\": 4451,\n\t\"./ko\": 3164,\n\t\"./ko.js\": 3164,\n\t\"./ku\": 8174,\n\t\"./ku-kmr\": 6181,\n\t\"./ku-kmr.js\": 6181,\n\t\"./ku.js\": 8174,\n\t\"./ky\": 8474,\n\t\"./ky.js\": 8474,\n\t\"./lb\": 9680,\n\t\"./lb.js\": 9680,\n\t\"./lo\": 5867,\n\t\"./lo.js\": 5867,\n\t\"./lt\": 5766,\n\t\"./lt.js\": 5766,\n\t\"./lv\": 9532,\n\t\"./lv.js\": 9532,\n\t\"./me\": 8076,\n\t\"./me.js\": 8076,\n\t\"./mi\": 1848,\n\t\"./mi.js\": 1848,\n\t\"./mk\": 306,\n\t\"./mk.js\": 306,\n\t\"./ml\": 3739,\n\t\"./ml.js\": 3739,\n\t\"./mn\": 9053,\n\t\"./mn.js\": 9053,\n\t\"./mr\": 6169,\n\t\"./mr.js\": 6169,\n\t\"./ms\": 3386,\n\t\"./ms-my\": 2297,\n\t\"./ms-my.js\": 2297,\n\t\"./ms.js\": 3386,\n\t\"./mt\": 7075,\n\t\"./mt.js\": 7075,\n\t\"./my\": 2264,\n\t\"./my.js\": 2264,\n\t\"./nb\": 2274,\n\t\"./nb.js\": 2274,\n\t\"./ne\": 8235,\n\t\"./ne.js\": 8235,\n\t\"./nl\": 2572,\n\t\"./nl-be\": 3784,\n\t\"./nl-be.js\": 3784,\n\t\"./nl.js\": 2572,\n\t\"./nn\": 4566,\n\t\"./nn.js\": 4566,\n\t\"./oc-lnc\": 9330,\n\t\"./oc-lnc.js\": 9330,\n\t\"./pa-in\": 9849,\n\t\"./pa-in.js\": 9849,\n\t\"./pl\": 4418,\n\t\"./pl.js\": 4418,\n\t\"./pt\": 9834,\n\t\"./pt-br\": 8303,\n\t\"./pt-br.js\": 8303,\n\t\"./pt.js\": 9834,\n\t\"./ro\": 4457,\n\t\"./ro.js\": 4457,\n\t\"./ru\": 2271,\n\t\"./ru.js\": 2271,\n\t\"./sd\": 1221,\n\t\"./sd.js\": 1221,\n\t\"./se\": 3478,\n\t\"./se.js\": 3478,\n\t\"./si\": 7538,\n\t\"./si.js\": 7538,\n\t\"./sk\": 5784,\n\t\"./sk.js\": 5784,\n\t\"./sl\": 6637,\n\t\"./sl.js\": 6637,\n\t\"./sq\": 6794,\n\t\"./sq.js\": 6794,\n\t\"./sr\": 5719,\n\t\"./sr-cyrl\": 3322,\n\t\"./sr-cyrl.js\": 3322,\n\t\"./sr.js\": 5719,\n\t\"./ss\": 6000,\n\t\"./ss.js\": 6000,\n\t\"./sv\": 1011,\n\t\"./sv.js\": 1011,\n\t\"./sw\": 748,\n\t\"./sw.js\": 748,\n\t\"./ta\": 1025,\n\t\"./ta.js\": 1025,\n\t\"./te\": 1885,\n\t\"./te.js\": 1885,\n\t\"./tet\": 8861,\n\t\"./tet.js\": 8861,\n\t\"./tg\": 6571,\n\t\"./tg.js\": 6571,\n\t\"./th\": 5802,\n\t\"./th.js\": 5802,\n\t\"./tk\": 9527,\n\t\"./tk.js\": 9527,\n\t\"./tl-ph\": 9231,\n\t\"./tl-ph.js\": 9231,\n\t\"./tlh\": 1052,\n\t\"./tlh.js\": 1052,\n\t\"./tr\": 5096,\n\t\"./tr.js\": 5096,\n\t\"./tzl\": 9846,\n\t\"./tzl.js\": 9846,\n\t\"./tzm\": 1765,\n\t\"./tzm-latn\": 7711,\n\t\"./tzm-latn.js\": 7711,\n\t\"./tzm.js\": 1765,\n\t\"./ug-cn\": 8414,\n\t\"./ug-cn.js\": 8414,\n\t\"./uk\": 6618,\n\t\"./uk.js\": 6618,\n\t\"./ur\": 158,\n\t\"./ur.js\": 158,\n\t\"./uz\": 7609,\n\t\"./uz-latn\": 2475,\n\t\"./uz-latn.js\": 2475,\n\t\"./uz.js\": 7609,\n\t\"./vi\": 1135,\n\t\"./vi.js\": 1135,\n\t\"./x-pseudo\": 4051,\n\t\"./x-pseudo.js\": 4051,\n\t\"./yo\": 2218,\n\t\"./yo.js\": 2218,\n\t\"./zh-cn\": 2648,\n\t\"./zh-cn.js\": 2648,\n\t\"./zh-hk\": 1632,\n\t\"./zh-hk.js\": 1632,\n\t\"./zh-mo\": 1541,\n\t\"./zh-mo.js\": 1541,\n\t\"./zh-tw\": 304,\n\t\"./zh-tw.js\": 304\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 5358;"],"names":["translation","app_name","app_version","attribution_body","attribution_title","by_country","cities","clear_recent_currents","clear_recent_tides","connection_error","contact_support","current_station","current_stations","currents","distance","ebb","favorite_currents","favorite_tides","flood","following_current","hide","high","home","hour_ago","hour_from_now","hour_minute_ago","hour_minute_from_now","hour_minutes_ago","hour_minutes_from_now","hours_ago","hours_from_now","hours_minute_ago","hours_minute_from_now","hours_minutes_ago","hours_minutes_from_now","just_now","kms","kms_away","knots","last_current","last_tide","loading","low","map","meters","miles","miles_away","minute_ago","minute_from_now","minutes_ago","minutes_from_now","moon","moonrise_now","moonrise_week","moonset_now","moonset_week","nearby_currents","nearby_tides","next_current","next_tide","now","recent_currents","recent_tides","recents","search","search_placeholder","settings","show","slack","somethings_wrong","states","sun","sunrise_now","sunrise_week","sunset_now","sunset_week","this_station","tide_station","tide_stations","tides","today","tomorrow","try_again","turn_off_ads","unit","watch_rewarded_video","week","i18n","Backend","use","LanguageDetector","initReactI18next","init","fallbackLng","debug","resources","da","de","en","subtitle","enGB","es","fr","it","ja","ko","nl","update1","update2","update3","nb","nn","no","pt","zh","zhHans","interpolation","escapeValue","react","useSuspense","languageCode","navigator","languages","language","userLanguage","moment","deviceTimezone","momentTimezone","guess","timezoneIfDifferent","stationTimezone","preStr","postStr","tz","format","timeDisplay","timestamp","dateDisplay","date","momentDate","momentNow","startOf","oneDay","I18n","t","microformatTime","timezone","relativeTimeFromNow","toTime","tideTime","Date","isNaN","secondsDiff","getTime","minutesDiff","hoursDiff","numberHours","Math","floor","abs","numberMinutes","hoursSingular","minutesSingular","hoursOnly","minutesOnly","minute","hour","Now","Component","currentHeadline","current","type","max_velocity","React","className","src","Slack","Flood","render","currentStation","this","props","Week","currentType","currentEvent","currentSpeed","last","key","date_time","itemScope","itemType","style","width","itemProp","dateTime","content","name","lat","lng","currentEvents","colSpan","toUpperCase","next_seven_days","index","length","dayForecast","weekForecast","dateKeyArray","push","Map","viewport","setViewport","useState","latitude","longitude","zoom","showPopup","setShowPopup","popupStation","setPopupStation","useEffect","currentLayerStyle","id","filter","layout","minzoom","maxzoom","beforeId","tideLayerStyle","activeCurrentLayerStyle","Maplibre","Object","assign","onMove","event","viewState","borderStyle","borderWidth","borderColor","height","mapStyle","attributionControl","onClick","e","features","source","station","properties","lngLat","interactiveLayerIds","Source","url","Layer","Popup","onClose","href","station_type","AttributionControl","customAttribution","compact","Breadcrumbs","countryBreadcrumb","linked","results","country_id","country_name","stateBreadcrumb","state_id","state_name","cityBreadcrumb","city_id","city_name","stationBreadcrumb","getBreadcrumbs","undefined","country_code","abbr","window","location","pathname","MobileStoreButtons","ItunesStore","marginLeft","marginRight","GooglePlay","CurrentStation","language_code","useParams","apiUrl","origin","hasError","opts","setResponse","setLoading","setHasError","fetch","then","res","json","data","catch","useFetch","title","Helmet","rel","renderCurrentStation","TideStations","distanceAway","tideStation","metric","distance_km","distance_mi","tideStations","nearby","CurrentStations","currentStations","Countries","countries","userLocale","countryCode","substr","indexOf","orderedCountries","i","unshift","country","States","stateTerm","textTransform","state","Cities","city","LocationList","state_term","mapContainerRef","useRef","offsetWidth","offsetHeight","WebMercatorViewport","fitBounds","parseFloat","min_x","min_y","max_x","max_y","padding","userLng","userLat","ref","defaultTitle","Title","getTitle","getTitleTag","Home","endpoint","buildApiUrl","lookupResults","setlookupResults","includes","Promise","resolve","reject","geolocation","getCurrentPosition","enableHighAccuracy","timeout","maximumAge","Infinity","console","log","position","coords","err","renderLookupResults","Privacy","Support","Terms","tideHeadline","tide","UpArrow","DownArrow","solarHeadline","solar","str","rise","Sun","lunarHeadline","lunar","Moon","next_solar","next_lunar","tidalEvent","height_cm","toFixed","height_ft","tidalEvents","Tides","tidal_events","solarEvent","solarEvents","solar_events","lunarEvent","percentage","lunarEvents","lunar_events","activeTideLayerStyle","TideStation","attribution","renderTideStation","AppNavigation","BrowserRouter","Routes","Route","path","element","App","ReactOnRails","webpackContext","req","webpackContextResolve","__webpack_require__","o","Error","code","keys","module","exports"],"sourceRoot":""}