diff options
Diffstat (limited to 'src/frontend/app')
| -rw-r--r-- | src/frontend/app/components/layout/AppShell.css | 10 | ||||
| -rw-r--r-- | src/frontend/app/components/layout/AppShell.tsx | 4 | ||||
| -rw-r--r-- | src/frontend/app/components/layout/NavBar.module.css | 46 | ||||
| -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.css | 36 | ||||
| -rw-r--r-- | src/frontend/app/routes/map.tsx | 2 |
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" |
