aboutsummaryrefslogtreecommitdiff
path: root/src/frontend
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontend')
-rw-r--r--src/frontend/app/components/layout/AppShell.css10
-rw-r--r--src/frontend/app/components/layout/AppShell.tsx4
-rw-r--r--src/frontend/app/components/layout/NavBar.module.css46
-rw-r--r--src/frontend/app/components/layout/NavBar.tsx (renamed from src/frontend/app/components/NavBar.tsx)20
-rw-r--r--src/frontend/app/root.css36
-rw-r--r--src/frontend/app/routes/map.tsx2
6 files changed, 64 insertions, 54 deletions
diff --git a/src/frontend/app/components/layout/AppShell.css b/src/frontend/app/components/layout/AppShell.css
index 89a4d1f..eee678c 100644
--- a/src/frontend/app/components/layout/AppShell.css
+++ b/src/frontend/app/components/layout/AppShell.css
@@ -50,14 +50,4 @@
.app-shell__bottom-nav {
display: none;
}
-
- /* Override NavBar styles for sidebar */
- .app-shell__sidebar .navigation-bar {
- flex-direction: column;
- height: 100%;
- justify-content: flex-start;
- padding-top: 1rem;
- gap: 1rem;
- border-top: none;
- }
}
diff --git a/src/frontend/app/components/layout/AppShell.tsx b/src/frontend/app/components/layout/AppShell.tsx
index e0559ac..91f6c0d 100644
--- a/src/frontend/app/components/layout/AppShell.tsx
+++ b/src/frontend/app/components/layout/AppShell.tsx
@@ -1,11 +1,11 @@
import React, { useState } from "react";
import { Outlet } from "react-router";
import { PageTitleProvider, usePageTitleContext } from "~/contexts/PageTitleContext";
-import NavBar from "../NavBar";
import { ThemeColorManager } from "../ThemeColorManager";
import "./AppShell.css";
import { Drawer } from "./Drawer";
import { Header } from "./Header";
+import NavBar from "./NavBar";
const AppShellContent: React.FC = () => {
const { title } = usePageTitleContext();
@@ -22,7 +22,7 @@ const AppShellContent: React.FC = () => {
<Drawer isOpen={isDrawerOpen} onClose={() => setIsDrawerOpen(false)} />
<div className="app-shell__body">
<aside className="app-shell__sidebar">
- <NavBar />
+ <NavBar orientation="vertical" />
</aside>
<main className="app-shell__main">
<Outlet />
diff --git a/src/frontend/app/components/layout/NavBar.module.css b/src/frontend/app/components/layout/NavBar.module.css
new file mode 100644
index 0000000..504b93b
--- /dev/null
+++ b/src/frontend/app/components/layout/NavBar.module.css
@@ -0,0 +1,46 @@
+.navBar {
+ display: flex;
+ justify-content: space-around;
+ align-items: center;
+ padding: 0.5rem 0;
+
+ background-color: var(--background-color);
+ border-top: 1px solid var(--border-color);
+}
+
+.vertical {
+ flex-direction: column;
+ height: 100%;
+ justify-content: flex-start;
+ padding-top: 1rem;
+ gap: 1rem;
+ border-top: none;
+}
+
+.link {
+ flex: 1 0;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ text-decoration: none;
+ color: var(--text-color);
+ padding: 0.25rem 0;
+ border-radius: 0.5rem;
+}
+
+.link svg {
+ width: 1.375rem;
+ height: 1.375rem;
+ fill: none;
+ stroke-width: 2;
+}
+
+.link span {
+ font-size: 13px;
+ line-height: 1;
+ font-family: system-ui;
+}
+
+.active {
+ color: var(--button-background-color);
+}
diff --git a/src/frontend/app/components/NavBar.tsx b/src/frontend/app/components/layout/NavBar.tsx
index b8c6ad6..91c8810 100644
--- a/src/frontend/app/components/NavBar.tsx
+++ b/src/frontend/app/components/layout/NavBar.tsx
@@ -1,8 +1,9 @@
-import { Link } from "react-router";
import { Map, MapPin, Settings } from "lucide-react";
-import { useApp } from "../AppContext";
import type { LngLatLike } from "maplibre-gl";
import { useTranslation } from "react-i18next";
+import { Link, useLocation } from "react-router";
+import { useApp } from "../../AppContext";
+import styles from "./NavBar.module.css";
// Helper: check if coordinates are within Vigo bounds
function isWithinVigo(lngLat: LngLatLike): boolean {
@@ -19,9 +20,14 @@ function isWithinVigo(lngLat: LngLatLike): boolean {
return lat >= 42.18 && lat <= 42.3 && lng >= -8.78 && lng <= -8.65;
}
-export default function NavBar() {
+interface NavBarProps {
+ orientation?: "horizontal" | "vertical";
+}
+
+export default function NavBar({ orientation = "horizontal" }: NavBarProps) {
const { t } = useTranslation();
const { mapState, updateMapState, mapPositionMode } = useApp();
+ const location = useLocation();
const navItems = [
{
@@ -63,7 +69,11 @@ export default function NavBar() {
];
return (
- <nav className="navigation-bar">
+ <nav
+ className={`${styles.navBar} ${
+ orientation === "vertical" ? styles.vertical : ""
+ }`}
+ >
{navItems.map((item) => {
const Icon = item.icon;
const isActive = item.exact
@@ -74,7 +84,7 @@ export default function NavBar() {
<Link
key={item.name}
to={item.path}
- className={`navigation-bar__link ${isActive ? "active" : ""}`}
+ className={`${styles.link} ${isActive ? styles.active : ""}`}
onClick={item.callback ? item.callback : undefined}
title={item.name}
aria-label={item.name}
diff --git a/src/frontend/app/root.css b/src/frontend/app/root.css
index f87fdc3..d718d92 100644
--- a/src/frontend/app/root.css
+++ b/src/frontend/app/root.css
@@ -122,43 +122,7 @@ body {
overflow-x: hidden;
}
-.navigation-bar {
- display: flex;
- justify-content: space-around;
- align-items: center;
- padding: 0.5rem 0;
-
- background-color: var(--background-color);
- border-top: 1px solid var(--border-color);
-}
-.navigation-bar__link {
- flex: 1 0;
- display: flex;
- flex-direction: column;
- align-items: center;
- text-decoration: none;
- color: var(--text-color);
- padding: 0.25rem 0;
- border-radius: 0.5rem;
-}
-
-.navigation-bar__link svg {
- width: 1.375rem;
- height: 1.375rem;
- fill: none;
- stroke-width: 2;
-}
-
-.navigation-bar__link span {
- font-size: 13px;
- line-height: 1;
- font-family: system-ui;
-}
-
-.navigation-bar__link.active {
- color: var(--button-background-color);
-}
.theme-toggle {
background: none;
diff --git a/src/frontend/app/routes/map.tsx b/src/frontend/app/routes/map.tsx
index 57fb04e..a711a64 100644
--- a/src/frontend/app/routes/map.tsx
+++ b/src/frontend/app/routes/map.tsx
@@ -170,7 +170,7 @@ export default function StopMap() {
}
>
<NavigationControl position="top-right" />
- <GeolocateControl position="top-right" trackUserLocation={true} />
+ <GeolocateControl position="top-right" trackUserLocation={true} positionOptions={{enableHighAccuracy: false}} />
<Source
id="stops-source"