diff options
| author | Ariel Costas Guerrero <ariel@costas.dev> | 2026-03-05 01:38:13 +0100 |
|---|---|---|
| committer | Ariel Costas Guerrero <ariel@costas.dev> | 2026-03-05 01:38:13 +0100 |
| commit | cde15534041499a0baf4153476805ee7f2db7f0d (patch) | |
| tree | 33617fa52bf17ff901a6982c8d784304cbe9e0cc | |
| parent | 6bc0b28d68f9b4d2779cea403e4af987d6e9dd0e (diff) | |
Support for Ourense!!
Squashed commit of the following:
commit 6c70396fe66ff8bc64655dd8e8c393001d2df8c3
Author: Ariel Costas Guerrero <ariel@costas.dev>
Date: Thu Mar 5 01:35:52 2026 +0100
feat: enhance stop sorting logic for bus and coach in map component
commit 380396c78a0b9dc8b0435a479236031e0910b57e
Author: Ariel Costas Guerrero <ariel@costas.dev>
Date: Thu Mar 5 01:30:46 2026 +0100
Update sprite and map colours
commit cc3662922d8cf7d8d87c52444bc582c8332160c1
Author: Ariel Costas Guerrero <ariel@costas.dev>
Date: Thu Mar 5 01:02:22 2026 +0100
update ourense colour codes and refactor route fetching logic
commit a2d8e8b0ecc57989dc79214947ed805d98ebddaa
Author: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Date: Wed Mar 4 23:42:49 2026 +0000
feat: add ourense urban bus feed (schedule-only, no real-time)
Co-authored-by: arielcostas <94913521+arielcostas@users.noreply.github.com>
commit 639a9cf75a71dabc07d1cdf2b39edfd264ccc220
Author: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Date: Wed Mar 4 23:35:44 2026 +0000
Initial plan
| -rw-r--r-- | src/Enmarcha.Backend/Controllers/TileController.cs | 18 | ||||
| -rw-r--r-- | src/Enmarcha.Backend/Controllers/TransitController.cs | 2 | ||||
| -rw-r--r-- | src/Enmarcha.Backend/Services/FeedService.cs | 3 | ||||
| -rw-r--r-- | src/frontend/app/routes/map.tsx | 22 | ||||
| -rw-r--r-- | src/frontend/app/routes/routes.tsx | 76 | ||||
| -rw-r--r-- | src/frontend/package-lock.json | 144 | ||||
| -rw-r--r-- | src/frontend/public/maps/spritesheet/sprite.json | 16 | ||||
| -rw-r--r-- | src/frontend/public/maps/spritesheet/sprite.png | bin | 6134 -> 6208 bytes | |||
| -rw-r--r-- | src/frontend/public/maps/spritesheet/sprite@2x.json | 16 | ||||
| -rw-r--r-- | src/frontend/public/maps/spritesheet/sprite@2x.png | bin | 13742 -> 14126 bytes |
10 files changed, 169 insertions, 128 deletions
diff --git a/src/Enmarcha.Backend/Controllers/TileController.cs b/src/Enmarcha.Backend/Controllers/TileController.cs index 856f2c6..ef71b67 100644 --- a/src/Enmarcha.Backend/Controllers/TileController.cs +++ b/src/Enmarcha.Backend/Controllers/TileController.cs @@ -97,6 +97,8 @@ public class TileController : ControllerBase VectorTile vt = new() { TileId = tileDef.Id }; var stopsLayer = new Layer { Name = "stops" }; + var features = new List<Feature>(); + responseBody.Data?.StopsByBbox?.ForEach(stop => { var idParts = stop.GtfsId.Split(':', 2); @@ -129,9 +131,20 @@ public class TileController : ControllerBase } }; - stopsLayer.Features.Add(feature); + features.Add(feature); }); + foreach (var feature in features.OrderBy(f => f.Attributes["transitKind"] as string switch + { + "bus" => 3, + "train" => 2, + "coach" => 1, + _ => 0 + })) + { + stopsLayer.Features.Add(feature); + } + vt.Layers.Add(stopsLayer); using var ms = new MemoryStream(); @@ -150,6 +163,7 @@ public class TileController : ControllerBase "vitrasa" => "stop-vitrasa", "tussa" => "stop-tussa", "tranvias" => "stop-tranvias", + "ourense" => "stop-ourense", "xunta" => "stop-xunta", "renfe" => "stop-renfe", "feve" => "stop-feve", @@ -161,7 +175,7 @@ public class TileController : ControllerBase { return feedId switch { - "vitrasa" or "tussa" or "tranvias" or "shuttle" => "bus", + "vitrasa" or "tussa" or "tranvias" or "shuttle" or "ourense" => "bus", "xunta" => "coach", "renfe" or "feve" => "train", _ => "unknown" diff --git a/src/Enmarcha.Backend/Controllers/TransitController.cs b/src/Enmarcha.Backend/Controllers/TransitController.cs index a70f46e..7876dbe 100644 --- a/src/Enmarcha.Backend/Controllers/TransitController.cs +++ b/src/Enmarcha.Backend/Controllers/TransitController.cs @@ -42,7 +42,7 @@ public class TransitController : ControllerBase using var activity = Telemetry.Source.StartActivity("GetRoutes"); if (feeds.Length == 0) { - feeds = ["tussa", "vitrasa", "tranvias", "feve", "shuttle"]; + feeds = ["tussa", "vitrasa", "tranvias", "ourense", "feve", "shuttle"]; } activity?.SetTag("feeds", string.Join(",", feeds)); diff --git a/src/Enmarcha.Backend/Services/FeedService.cs b/src/Enmarcha.Backend/Services/FeedService.cs index b7496ec..34bc522 100644 --- a/src/Enmarcha.Backend/Services/FeedService.cs +++ b/src/Enmarcha.Backend/Services/FeedService.cs @@ -40,6 +40,7 @@ public class FeedService "vitrasa" => ("#81D002", "#000000"), "tussa" => ("#508096", "#FFFFFF"), "tranvias" => ("#E61C29", "#FFFFFF"), + "ourense" => ("#ffb319", "#000000"), "xunta" => ("#007BC4", "#FFFFFF"), "renfe" => ("#870164", "#FFFFFF"), "feve" => ("#EE3D32", "#FFFFFF"), @@ -192,7 +193,7 @@ public class FeedService { if (nextStops.Count == 0) return null; - if (feedId is "vitrasa" or "tranvias" or "tussa") + if (feedId is "vitrasa" or "tranvias" or "tussa" or "ourense") { var streets = nextStops .Select(GetStreetName) diff --git a/src/frontend/app/routes/map.tsx b/src/frontend/app/routes/map.tsx index af94509..f54f6cf 100644 --- a/src/frontend/app/routes/map.tsx +++ b/src/frontend/app/routes/map.tsx @@ -320,9 +320,9 @@ export default function StopMap() { ["get", "transitKind"], "bus", 3, - "coach", - 2, "train", + 2, + "coach", 1, 0, ], @@ -342,15 +342,15 @@ export default function StopMap() { "text-offset": [0, 3], "text-anchor": "center", "text-justify": "center", - "text-size": ["interpolate", ["linear"], ["zoom"], 11, 8, 22, 16], + "text-size": ["interpolate", ["linear"], ["zoom"], 11, 10, 22, 17], "symbol-sort-key": [ "match", ["get", "transitKind"], - "coach", + "bus", 3, "train", 2, - "bus", + "coach", 1, 0, ], @@ -366,6 +366,8 @@ export default function StopMap() { "#508096", "tranvias", "#E61C29", + "ourense", + "#ffb319", "xunta", "#007BC4", "renfe", @@ -374,8 +376,14 @@ export default function StopMap() { "#EE3D32", "#27187D", ], - "text-halo-color": "#FFF", - "text-halo-width": 1, + "text-halo-color": [ + "match", + ["get", "feed"], + "ourense", + "#000000", + "#FFF", + ], + "text-halo-width": ["match", ["get", "feed"], "ourense", 1.5, 1], }} /> diff --git a/src/frontend/app/routes/routes.tsx b/src/frontend/app/routes/routes.tsx index 6d50186..1e85cfb 100644 --- a/src/frontend/app/routes/routes.tsx +++ b/src/frontend/app/routes/routes.tsx @@ -12,9 +12,18 @@ export default function RoutesPage() { usePageTitle(t("navbar.routes", "Rutas")); const [searchQuery, setSearchQuery] = useState(""); + const orderedAgencies = [ + "vitrasa", + "tranvias", + "tussa", + "ourense", + "feve", + "shuttle", + ]; + const { data: routes, isLoading } = useQuery({ queryKey: ["routes"], - queryFn: () => fetchRoutes(["vitrasa", "tranvias", "tussa", "feve", "shuttle"]), + queryFn: () => fetchRoutes(orderedAgencies), }); const filteredRoutes = routes?.filter( @@ -53,34 +62,45 @@ export default function RoutesPage() { <div className="space-y-8"> {routesByAgency && - Object.entries(routesByAgency).map(([agency, agencyRoutes]) => ( - <div key={agency}> - <h2 className="text-xl font-bold text-text mb-4 border-b border-border pb-2"> - {agency} - </h2> - <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"> - {agencyRoutes.map((route) => ( - <Link - key={route.id} - to={`/routes/${route.id}`} - className="flex items-center gap-3 p-4 bg-surface rounded-lg shadow hover:shadow-lg transition-shadow border border-border" - > - <LineIcon - line={route.shortName ?? "?"} - mode="pill" - colour={route.color ?? undefined} - textColour={route.textColor ?? undefined} - /> - <div className="flex-1 min-w-0"> - <p className="text-sm md:text-md font-semibold text-text"> - {route.longName} - </p> - </div> - </Link> - ))} + Object.entries(routesByAgency) + .sort(([a], [b]) => { + const indexA = orderedAgencies.indexOf(a.toLowerCase()); + const indexB = orderedAgencies.indexOf(b.toLowerCase()); + if (indexA === -1 && indexB === -1) { + return a.localeCompare(b); + } + if (indexA === -1) return 1; + if (indexB === -1) return -1; + return indexA - indexB; + }) + .map(([agency, agencyRoutes]) => ( + <div key={agency}> + <h2 className="text-xl font-bold text-text mb-4 border-b border-border pb-2"> + {agency} + </h2> + <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"> + {agencyRoutes.map((route) => ( + <Link + key={route.id} + to={`/routes/${route.id}`} + className="flex items-center gap-3 p-4 bg-surface rounded-lg shadow hover:shadow-lg transition-shadow border border-border" + > + <LineIcon + line={route.shortName ?? "?"} + mode="pill" + colour={route.color ?? undefined} + textColour={route.textColor ?? undefined} + /> + <div className="flex-1 min-w-0"> + <p className="text-sm md:text-md font-semibold text-text"> + {route.longName} + </p> + </div> + </Link> + ))} + </div> </div> - </div> - ))} + ))} </div> </div> ); diff --git a/src/frontend/package-lock.json b/src/frontend/package-lock.json index 0880829..2bdff9a 100644 --- a/src/frontend/package-lock.json +++ b/src/frontend/package-lock.json @@ -91,7 +91,6 @@ "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", @@ -540,6 +539,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -556,6 +556,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -572,6 +573,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -588,6 +590,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -604,6 +607,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -620,6 +624,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -636,6 +641,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -652,6 +658,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -668,6 +675,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -684,6 +692,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -700,6 +709,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -716,6 +726,7 @@ "cpu": [ "loong64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -732,6 +743,7 @@ "cpu": [ "mips64el" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -748,6 +760,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -764,6 +777,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -780,6 +794,7 @@ "cpu": [ "s390x" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -796,6 +811,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -812,6 +828,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -828,6 +845,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -844,6 +862,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -860,6 +879,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -876,6 +896,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -892,6 +913,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -908,6 +930,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -924,6 +947,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -940,6 +964,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1597,7 +1622,6 @@ "integrity": "sha512-qIT8hp1RJ0VAHyXpfuwoO31b9evrjPLRhUugqYJ7BZLpyAwhRsJIaQvvj60yZwWBMF2/3LdZu7M39rf0FhL6Iw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@mjackson/node-fetch-server": "^0.2.0", "@react-router/express": "7.9.6", @@ -1632,6 +1656,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1645,6 +1670,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1658,6 +1684,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1671,6 +1698,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1684,6 +1712,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1697,6 +1726,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1710,6 +1740,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1723,6 +1754,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1736,6 +1768,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1749,6 +1782,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1762,6 +1796,7 @@ "cpu": [ "loong64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1775,6 +1810,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1788,6 +1824,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1801,6 +1838,7 @@ "cpu": [ "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1814,6 +1852,7 @@ "cpu": [ "s390x" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1840,6 +1879,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1853,6 +1893,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1866,6 +1907,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1879,6 +1921,7 @@ "cpu": [ "ia32" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1892,6 +1935,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1905,6 +1949,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -2198,6 +2243,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, "license": "MIT" }, "node_modules/@types/geojson": { @@ -2238,9 +2284,8 @@ "version": "24.10.1", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", - "devOptional": true, + "dev": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -2251,7 +2296,6 @@ "integrity": "sha512-p/jUvulfgU7oKtj6Xpk8cA2Y1xKTtICGpJYeJXz2YVO2UcvjQgeRMLDGfDeqeRW2Ta+0QNFwcc8X3GH8SxZz6w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -2322,7 +2366,6 @@ "integrity": "sha512-lJi3PfxVmo0AkEY93ecfN+r8SofEqZNGByvHAI3GBLrvt1Cw6H5k1IM02nSzu0RfUafr2EvFSw0wAsZgubNplQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.47.0", "@typescript-eslint/types": "8.47.0", @@ -2629,7 +2672,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2901,7 +2943,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.9", "caniuse-lite": "^1.0.30001746", @@ -3414,6 +3455,7 @@ "version": "0.25.10", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.10.tgz", "integrity": "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==", + "dev": true, "hasInstallScript": true, "license": "MIT", "bin": { @@ -3487,7 +3529,6 @@ "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -3695,7 +3736,6 @@ "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -3832,6 +3872,7 @@ "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, "license": "MIT", "engines": { "node": ">=12.0.0" @@ -4020,6 +4061,7 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -4356,38 +4398,6 @@ "node": ">= 0.8" } }, - "node_modules/i18next": { - "version": "25.6.2", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.6.2.tgz", - "integrity": "sha512-0GawNyVUw0yvJoOEBq1VHMAsqdM23XrHkMtl2gKEjviJQSLVXsrPqsoYAxBEugW5AB96I2pZkwRxyl8WZVoWdw==", - "funding": [ - { - "type": "individual", - "url": "https://locize.com" - }, - { - "type": "individual", - "url": "https://locize.com/i18next.html" - }, - { - "type": "individual", - "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.27.6" - }, - "peerDependencies": { - "typescript": "^5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "node_modules/i18next-browser-languagedetector": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-8.2.0.tgz", @@ -4702,8 +4712,7 @@ "version": "1.9.4", "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==", - "license": "BSD-2-Clause", - "peer": true + "license": "BSD-2-Clause" }, "node_modules/leaflet.markercluster": { "version": "1.5.3", @@ -5041,7 +5050,6 @@ "integrity": "sha512-2B/H+DpjDO2NzsvNQYVIuKPyijhYJW/Hk3W+6BloAzXhm6nqXC3gVrntPPgP6hRH8f8j23nbNLOtM6OKplHwRQ==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "@mapbox/geojson-rewind": "^0.5.2", "@mapbox/jsonlint-lines-primitives": "^2.0.2", @@ -5284,33 +5292,6 @@ "node": ">= 0.8" } }, - "node_modules/motion": { - "version": "12.23.24", - "resolved": "https://registry.npmjs.org/motion/-/motion-12.23.24.tgz", - "integrity": "sha512-Rc5E7oe2YZ72N//S3QXGzbnXgqNrTESv8KKxABR20q2FLch9gHLo0JLyYo2hZ238bZ9Gx6cWhj9VO0IgwbMjCw==", - "license": "MIT", - "peer": true, - "dependencies": { - "framer-motion": "^12.23.24", - "tslib": "^2.4.0" - }, - "peerDependencies": { - "@emotion/is-prop-valid": "*", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@emotion/is-prop-valid": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, "node_modules/motion-dom": { "version": "12.23.23", "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.23.tgz", @@ -5344,6 +5325,7 @@ "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, "funding": [ { "type": "github", @@ -5657,14 +5639,15 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, "license": "ISC" }, "node_modules/picomatch": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -5686,6 +5669,7 @@ "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, "funding": [ { "type": "opencollective", @@ -5911,7 +5895,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -5921,7 +5904,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -6063,7 +6045,6 @@ "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.9.6.tgz", "integrity": "sha512-Y1tUp8clYRXpfPITyuifmSoE2vncSME18uVLgaqyxh9H35JWpIfzHo+9y3Fzh5odk/jxPW29IgLgzcdwxGqyNA==", "license": "MIT", - "peer": true, "dependencies": { "cookie": "^1.0.1", "set-cookie-parser": "^2.6.0" @@ -6164,6 +6145,7 @@ "version": "4.52.4", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.4.tgz", "integrity": "sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==", + "dev": true, "license": "MIT", "dependencies": { "@types/estree": "1.0.8" @@ -6208,6 +6190,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -6818,6 +6801,7 @@ "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.5.0", @@ -6931,9 +6915,8 @@ "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "devOptional": true, + "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6987,7 +6970,7 @@ "version": "7.16.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/union-value": { @@ -7126,8 +7109,8 @@ "version": "7.2.4", "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.4.tgz", "integrity": "sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==", + "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -7402,7 +7385,6 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-4.2.1.tgz", "integrity": "sha512-0wZ1IRqGGhMP76gLqz8EyfBXKk0J2qo2+H3fi4mcUP/KtTocoX08nmIAHl1Z2kJIZbZee8KOpBCSNPRgauucjw==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/src/frontend/public/maps/spritesheet/sprite.json b/src/frontend/public/maps/spritesheet/sprite.json index 3875080..48e7554 100644 --- a/src/frontend/public/maps/spritesheet/sprite.json +++ b/src/frontend/public/maps/spritesheet/sprite.json @@ -23,9 +23,17 @@ "height": 32, "pixelRatio": 1 }, + "stop-ourense": { + "id": "stop-ourense", + "x": 96, + "y": 0, + "width": 32, + "height": 32, + "pixelRatio": 1 + }, "stop-xunta": { "id": "stop-xunta", - "x": 96, + "x": 128, "y": 0, "width": 32, "height": 32, @@ -33,7 +41,7 @@ }, "stop-renfe": { "id": "stop-renfe", - "x": 128, + "x": 160, "y": 0, "width": 32, "height": 32, @@ -41,7 +49,7 @@ }, "stop-feve": { "id": "stop-feve", - "x": 160, + "x": 192, "y": 0, "width": 32, "height": 32, @@ -49,7 +57,7 @@ }, "stop-generic": { "id": "stop-generic", - "x": 192, + "x": 224, "y": 0, "width": 32, "height": 32, diff --git a/src/frontend/public/maps/spritesheet/sprite.png b/src/frontend/public/maps/spritesheet/sprite.png Binary files differindex 1878558..fd13c62 100644 --- a/src/frontend/public/maps/spritesheet/sprite.png +++ b/src/frontend/public/maps/spritesheet/sprite.png diff --git a/src/frontend/public/maps/spritesheet/sprite@2x.json b/src/frontend/public/maps/spritesheet/sprite@2x.json index ef3c53c..28dd220 100644 --- a/src/frontend/public/maps/spritesheet/sprite@2x.json +++ b/src/frontend/public/maps/spritesheet/sprite@2x.json @@ -23,9 +23,17 @@ "height": 64, "pixelRatio": 2 }, + "stop-ourense": { + "id": "stop-ourense", + "x": 192, + "y": 0, + "width": 64, + "height": 64, + "pixelRatio": 2 + }, "stop-xunta": { "id": "stop-xunta", - "x": 192, + "x": 256, "y": 0, "width": 64, "height": 64, @@ -33,7 +41,7 @@ }, "stop-renfe": { "id": "stop-renfe", - "x": 256, + "x": 320, "y": 0, "width": 64, "height": 64, @@ -41,7 +49,7 @@ }, "stop-feve": { "id": "stop-feve", - "x": 320, + "x": 384, "y": 0, "width": 64, "height": 64, @@ -49,7 +57,7 @@ }, "stop-generic": { "id": "stop-generic", - "x": 384, + "x": 448, "y": 0, "width": 64, "height": 64, diff --git a/src/frontend/public/maps/spritesheet/sprite@2x.png b/src/frontend/public/maps/spritesheet/sprite@2x.png Binary files differindex d676b56..f431b7f 100644 --- a/src/frontend/public/maps/spritesheet/sprite@2x.png +++ b/src/frontend/public/maps/spritesheet/sprite@2x.png |
