diff --git a/.ncurc.js b/.ncurc.js new file mode 100644 index 0000000..626e3ad --- /dev/null +++ b/.ncurc.js @@ -0,0 +1,6 @@ +// Keep @types/node on the 24.x line to match the deployment target. Its +// "latest" dist-tag points at the 22.x line, so the default target would +// report no updates at all instead of offering 24.x patches. +export default { + target: (name) => (name === '@types/node' ? 'minor' : 'latest'), +}; diff --git a/README.md b/README.md index 17de650..56740f9 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ The application provides dataset search, dataset detail pages, downloadable data | Build tool | Vite 8 with `@vitejs/plugin-react` | | Language | TypeScript 7 | | UI | React 19, CSS Modules | -| Routing | React Router 7 (`react-router-dom`) | +| Routing | React Router 8 | | State management | Redux Toolkit, React Redux | | HTTP client | ky | | 3D rendering | three.js | diff --git a/biome.json b/biome.json index 509e7b7..b1cf099 100644 --- a/biome.json +++ b/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/2.5.12/schema.json", + "$schema": "https://biomejs.dev/schemas/2.5.13/schema.json", "vcs": { "enabled": true, "clientKind": "git", diff --git a/package.json b/package.json index 982b7be..1b96cb5 100644 --- a/package.json +++ b/package.json @@ -17,24 +17,24 @@ "@dr.pogodin/react-helmet": "^3.2.3", "@reduxjs/toolkit": "^2.12.0", "ky": "^2.1.0", - "react": "^19.2.8", - "react-dom": "^19.2.8", + "react": "^19.3.0", + "react-dom": "^19.3.0", "react-ga4": "^3.0.1", "react-redux": "^9.3.0", - "react-router-dom": "^7.18.3", + "react-router": "^8.3.1", "redux": "^5.0.1", "three": "^0.186.0" }, "devDependencies": { - "@biomejs/biome": "^2.5.12", - "@types/node": "^24.13.3", - "@types/react": "^19.2.18", - "@types/react-dom": "^19.2.7", + "@biomejs/biome": "^2.5.13", + "@types/node": "^24.13.4", + "@types/react": "^19.3.0", + "@types/react-dom": "^19.3.0", "@types/react-redux": "^7.1.34", - "@types/three": "^0.185.4", + "@types/three": "^0.186.0", "@vitejs/plugin-react": "^6.1.1", - "cspell": "^10.3.0", + "cspell": "^10.3.1", "typescript": "~7.0.2", - "vite": "^8.2.2" + "vite": "^8.3.0" } } diff --git a/src/App.tsx b/src/App.tsx index 7c6c44f..225f3ef 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,6 +1,6 @@ import React from 'react'; import ReactGA from 'react-ga4'; -import { BrowserRouter, NavLink, Route, Routes, useLocation } from 'react-router-dom'; +import { BrowserRouter, NavLink, Route, Routes, useLocation } from 'react-router'; import styles from './App.module.css'; import CompatRedirect from './features/compat-redirect/CompatRedirect'; import Contact from './features/contact/Contact'; diff --git a/src/features/compat-redirect/CompatRedirect.tsx b/src/features/compat-redirect/CompatRedirect.tsx index 13975ef..b266c2a 100644 --- a/src/features/compat-redirect/CompatRedirect.tsx +++ b/src/features/compat-redirect/CompatRedirect.tsx @@ -1,5 +1,5 @@ import type React from 'react'; -import { Navigate, useLocation } from 'react-router-dom'; +import { Navigate, useLocation } from 'react-router'; import NotFound from '../not-found/NotFound'; const CompatRedirect: React.FC = () => { diff --git a/src/features/data-detail/DataDetail.tsx b/src/features/data-detail/DataDetail.tsx index b5d1c58..fd35bdd 100644 --- a/src/features/data-detail/DataDetail.tsx +++ b/src/features/data-detail/DataDetail.tsx @@ -1,6 +1,6 @@ import ky from 'ky'; import { useEffect, useState } from 'react'; -import { Link } from 'react-router-dom'; +import { Link } from 'react-router'; import { useAppDispatch } from '../../app/hooks'; import DataUtils from '../data/DataUtils'; import Loading from '../loading/Loading'; diff --git a/src/features/data-viewer/DataViewer.tsx b/src/features/data-viewer/DataViewer.tsx index 79b4a43..2256622 100644 --- a/src/features/data-viewer/DataViewer.tsx +++ b/src/features/data-viewer/DataViewer.tsx @@ -1,7 +1,7 @@ import ky from 'ky'; import type React from 'react'; import { useEffect, useRef, useState } from 'react'; -import { Link } from 'react-router-dom'; +import { Link } from 'react-router'; import * as THREE from 'three'; import { TrackballControls } from 'three/examples/jsm/controls/TrackballControls'; import { useAppDispatch } from '../../app/hooks'; diff --git a/src/features/data/Data.tsx b/src/features/data/Data.tsx index a116b79..3b12422 100644 --- a/src/features/data/Data.tsx +++ b/src/features/data/Data.tsx @@ -1,5 +1,5 @@ import type React from 'react'; -import { Route, Routes, useParams } from 'react-router-dom'; +import { Route, Routes, useParams } from 'react-router'; import DataDetail from '../data-detail/DataDetail'; import DataViewer from '../data-viewer/DataViewer'; import NotFound from '../not-found/NotFound'; diff --git a/src/features/help/Help.tsx b/src/features/help/Help.tsx index acd840f..3d4451a 100644 --- a/src/features/help/Help.tsx +++ b/src/features/help/Help.tsx @@ -1,6 +1,6 @@ import type React from 'react'; import { useEffect } from 'react'; -import { Link, Route, Routes } from 'react-router-dom'; +import { Link, Route, Routes } from 'react-router'; import { useAppDispatch } from '../../app/hooks'; import NotFound from '../not-found/NotFound'; import { setTitle } from '../page-title/pageTitleSlice'; diff --git a/src/features/search-form/SearchForm.tsx b/src/features/search-form/SearchForm.tsx index 31283bc..44021b8 100644 --- a/src/features/search-form/SearchForm.tsx +++ b/src/features/search-form/SearchForm.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from 'react'; -import { useNavigate } from 'react-router-dom'; +import { useNavigate } from 'react-router'; import { useAppDispatch } from '../../app/hooks'; import DataUtils, { type SearchResults } from '../data/DataUtils'; import { setTitle } from '../page-title/pageTitleSlice'; diff --git a/src/features/search-results/SearchResults.tsx b/src/features/search-results/SearchResults.tsx index 5486a5d..48ddce6 100644 --- a/src/features/search-results/SearchResults.tsx +++ b/src/features/search-results/SearchResults.tsx @@ -1,6 +1,6 @@ import type React from 'react'; import { useEffect } from 'react'; -import { Link } from 'react-router-dom'; +import { Link } from 'react-router'; import { useAppDispatch, useAppSelector } from '../../app/hooks'; import { setTitle } from '../page-title/pageTitleSlice'; import styles from './SearchResults.module.css'; diff --git a/src/features/search/Search.tsx b/src/features/search/Search.tsx index 277f00c..d917d77 100644 --- a/src/features/search/Search.tsx +++ b/src/features/search/Search.tsx @@ -1,5 +1,5 @@ import type React from 'react'; -import { Route, Routes } from 'react-router-dom'; +import { Route, Routes } from 'react-router'; import NotFound from '../not-found/NotFound'; import SearchForm from '../search-form/SearchForm'; import SearchResults from '../search-results/SearchResults';