diff --git a/web/package.json b/web/package.json index 598a3a4..a81636c 100644 --- a/web/package.json +++ b/web/package.json @@ -11,7 +11,8 @@ }, "dependencies": { "react": "^19.1.1", - "react-dom": "^19.1.1" + "react-dom": "^19.1.1", + "wouter": "^3.7.1" }, "devDependencies": { "@eslint/js": "^9.36.0", diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml index 0c9750c..27c386c 100644 --- a/web/pnpm-lock.yaml +++ b/web/pnpm-lock.yaml @@ -17,6 +17,9 @@ importers: react-dom: specifier: ^19.1.1 version: 19.1.1(react@19.1.1) + wouter: + specifier: ^3.7.1 + version: 3.7.1(react@19.1.1) devDependencies: '@eslint/js': specifier: ^9.36.0 @@ -807,6 +810,9 @@ packages: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -884,6 +890,10 @@ packages: resolution: {integrity: sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==} engines: {node: '>=0.10.0'} + regexparam@3.0.0: + resolution: {integrity: sha512-RSYAtP31mvYLkAHrOlh25pCNQ5hWnT106VukGaaFfuJrZFkGRX5GhUAdPqpSDXxOhA2c4akmRuplv1mRqnBn6Q==} + engines: {node: '>=8'} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -1014,6 +1024,11 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + use-sync-external-store@1.5.0: + resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -1023,6 +1038,11 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + wouter@3.7.1: + resolution: {integrity: sha512-od5LGmndSUzntZkE2R5CHhoiJ7YMuTIbiXsa0Anytc2RATekgv4sfWRAxLEULBrp7ADzinWQw8g470lkT8+fOw==} + peerDependencies: + react: '>=16.8.0' + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -1789,6 +1809,8 @@ snapshots: dependencies: brace-expansion: 2.0.2 + mitt@3.0.1: {} + ms@2.1.3: {} nanoid@3.3.11: {} @@ -1849,6 +1871,8 @@ snapshots: react@19.1.1: {} + regexparam@3.0.0: {} + resolve-from@4.0.0: {} reusify@1.1.0: {} @@ -1953,12 +1977,23 @@ snapshots: dependencies: punycode: 2.3.1 + use-sync-external-store@1.5.0(react@19.1.1): + dependencies: + react: 19.1.1 + which@2.0.2: dependencies: isexe: 2.0.0 word-wrap@1.2.5: {} + wouter@3.7.1(react@19.1.1): + dependencies: + mitt: 3.0.1 + react: 19.1.1 + regexparam: 3.0.0 + use-sync-external-store: 1.5.0(react@19.1.1) + yallist@3.1.1: {} yocto-queue@0.1.0: {} diff --git a/web/src/routes/NotFound.tsx b/web/src/routes/NotFound.tsx new file mode 100644 index 0000000..fe7dfe4 --- /dev/null +++ b/web/src/routes/NotFound.tsx @@ -0,0 +1,2 @@ +const NotFound = () => <>NotFound; +export default NotFound; diff --git a/web/src/routes/Root.tsx b/web/src/routes/Root.tsx deleted file mode 100644 index 70bee42..0000000 --- a/web/src/routes/Root.tsx +++ /dev/null @@ -1,2 +0,0 @@ -const Root = () => <>Root; -export default Root; diff --git a/web/src/routes/RootRouter.tsx b/web/src/routes/RootRouter.tsx new file mode 100644 index 0000000..158a531 --- /dev/null +++ b/web/src/routes/RootRouter.tsx @@ -0,0 +1,17 @@ +/* Wouter */ +import { Router, Switch, Route } from "wouter"; +import { useHashLocation } from "wouter/use-hash-location"; + +/* Routes */ +import NotFound from "./NotFound"; + +const RootRouter = () => ( + + + {/* Fallback (eg. 'Not Found / 404') */} + + + +); + +export default RootRouter; diff --git a/web/src/vite-root.tsx b/web/src/vite-root.tsx index 4c3fd94..41c74fc 100644 --- a/web/src/vite-root.tsx +++ b/web/src/vite-root.tsx @@ -3,10 +3,10 @@ import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; /* Route-related */ -import Root from "./routes/Root"; +import RootRouter from "./routes/RootRouter"; createRoot(document.getElementById("root")!).render( - + , );