diff --git a/ui/package-lock.json b/ui/package-lock.json index 542860f..ef66bb0 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -10,7 +10,7 @@ "dependencies": { "react": "^19.2.7", "react-dom": "^19.2.8", - "react-router-dom": "^7.18.1" + "react-router": "^8.3.0" }, "devDependencies": { "@testing-library/dom": "^10.4.1", @@ -1720,18 +1720,11 @@ "dev": true, "license": "MIT" }, - "node_modules/cookie": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", - "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } + "node_modules/cookie-es": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-3.1.1.tgz", + "integrity": "sha512-UaXxwISYJPTr9hwQxMFYZ7kNhSXboMXP+Z3TRX6f1/NyaGPfuNUZOWP1pUEb75B2HjfklIYLVRfWiFZJyC6Npg==", + "license": "MIT" }, "node_modules/cross-spawn": { "version": "7.0.6", @@ -3120,20 +3113,19 @@ "license": "MIT" }, "node_modules/react-router": { - "version": "7.18.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.18.1.tgz", - "integrity": "sha512-GDLgg3i3uM0aeJO3Fm+TCS+sDQ7gu12T6x0qdTEzcwqEfleci7JwugVNIF3U//0FWKnJT7ptG+20B2jfDqnZAg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-8.3.0.tgz", + "integrity": "sha512-qyPMvW83jGIct3yiieisxdk9M745anqhpIMKN5m1t6yBMfgVPpt77aHOqs5fUlEJRMCGffg9BaQLH9oPVOL7xQ==", "license": "MIT", "dependencies": { - "cookie": "^1.0.1", - "set-cookie-parser": "^2.6.0" + "cookie-es": "^3.1.1" }, "engines": { - "node": ">=20.0.0" + "node": ">=22.22.0" }, "peerDependencies": { - "react": ">=18", - "react-dom": ">=18" + "react": ">=19.2.7", + "react-dom": ">=19.2.7" }, "peerDependenciesMeta": { "react-dom": { @@ -3141,22 +3133,6 @@ } } }, - "node_modules/react-router-dom": { - "version": "7.18.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.18.1.tgz", - "integrity": "sha512-KaZh+X/6UtEp28x51AUYZDMg9NGoz2ja3dNHa+ta/tk40vCzKhQ/RypCWBMLbmDr6//E24Vv5uPsrqXFozdkAg==", - "license": "MIT", - "dependencies": { - "react-router": "7.18.1" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "react": ">=18", - "react-dom": ">=18" - } - }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -3247,12 +3223,6 @@ "node": ">=10" } }, - "node_modules/set-cookie-parser": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", - "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", - "license": "MIT" - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", diff --git a/ui/package.json b/ui/package.json index 68489b0..eb344d3 100644 --- a/ui/package.json +++ b/ui/package.json @@ -13,7 +13,7 @@ "dependencies": { "react": "^19.2.7", "react-dom": "^19.2.8", - "react-router-dom": "^7.18.1" + "react-router": "^8.3.0" }, "devDependencies": { "@testing-library/dom": "^10.4.1", diff --git a/ui/src/App.tsx b/ui/src/App.tsx index 2dd8287..7739975 100644 --- a/ui/src/App.tsx +++ b/ui/src/App.tsx @@ -7,7 +7,7 @@ import { useNavigate, useParams, useSearchParams, -} from "react-router-dom"; +} from "react-router"; import TraceList from "./components/TraceList"; import TraceWaterfall from "./components/TraceWaterfall"; import LogView from "./components/LogView"; diff --git a/ui/src/components/Alerts.tsx b/ui/src/components/Alerts.tsx index 5cfedb3..7edc7e4 100644 --- a/ui/src/components/Alerts.tsx +++ b/ui/src/components/Alerts.tsx @@ -1,5 +1,5 @@ import { useEffect, useMemo, useState } from "react"; -import { Link } from "react-router-dom"; +import { Link } from "react-router"; import { listAlerts, listAlertEvents, diff --git a/ui/src/components/LogView.tsx b/ui/src/components/LogView.tsx index 446d58e..5d4dd6a 100644 --- a/ui/src/components/LogView.tsx +++ b/ui/src/components/LogView.tsx @@ -1,5 +1,5 @@ import { Fragment, useEffect, useState } from "react"; -import { Link, useSearchParams } from "react-router-dom"; +import { Link, useSearchParams } from "react-router"; import { listLogs, type LogRow } from "../api"; import { firstRunHint } from "../empty"; import { traceHref } from "../links"; diff --git a/ui/src/components/MetricChart.tsx b/ui/src/components/MetricChart.tsx index 685f513..65d7dfc 100644 --- a/ui/src/components/MetricChart.tsx +++ b/ui/src/components/MetricChart.tsx @@ -1,5 +1,5 @@ import { useEffect, useMemo, useState } from "react"; -import { Link, useNavigate, useSearchParams } from "react-router-dom"; +import { Link, useNavigate, useSearchParams } from "react-router"; import { getMetricExemplars, getMetricFacet, diff --git a/ui/src/components/MetricList.tsx b/ui/src/components/MetricList.tsx index cc58794..3dae698 100644 --- a/ui/src/components/MetricList.tsx +++ b/ui/src/components/MetricList.tsx @@ -1,5 +1,5 @@ import { Fragment, useEffect, useState } from "react"; -import { Link } from "react-router-dom"; +import { Link } from "react-router"; import { getMetricFacet, getMetricHistFacet, diff --git a/ui/src/components/ServiceMap.tsx b/ui/src/components/ServiceMap.tsx index 5bff588..3855d1a 100644 --- a/ui/src/components/ServiceMap.tsx +++ b/ui/src/components/ServiceMap.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from "react"; -import { useNavigate } from "react-router-dom"; +import { useNavigate } from "react-router"; import { getServiceMap, type ServiceMapData } from "../api"; import { rowKeyActivate } from "../a11y"; import { firstRunHint } from "../empty"; diff --git a/ui/src/components/Services.tsx b/ui/src/components/Services.tsx index a55458b..594aa91 100644 --- a/ui/src/components/Services.tsx +++ b/ui/src/components/Services.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from "react"; -import { Link } from "react-router-dom"; +import { Link } from "react-router"; import { listServices, type ServiceRed } from "../api"; import { useControls, rangeParams } from "../timerange"; import { useSort } from "../sort"; diff --git a/ui/src/components/TraceList.tsx b/ui/src/components/TraceList.tsx index 5b8b0eb..7843c54 100644 --- a/ui/src/components/TraceList.tsx +++ b/ui/src/components/TraceList.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from "react"; -import { Link, useSearchParams } from "react-router-dom"; +import { Link, useSearchParams } from "react-router"; import { listTraces, type TraceSummary } from "../api"; import { useControls, rangeParams } from "../timerange"; import { useSort } from "../sort"; diff --git a/ui/src/components/TraceWaterfall.tsx b/ui/src/components/TraceWaterfall.tsx index ec41828..40cb652 100644 --- a/ui/src/components/TraceWaterfall.tsx +++ b/ui/src/components/TraceWaterfall.tsx @@ -1,5 +1,5 @@ import { useEffect, useRef, useState } from "react"; -import { Link, useSearchParams } from "react-router-dom"; +import { Link, useSearchParams } from "react-router"; import { getTrace, type SpanRow } from "../api"; import { rowKeyActivate } from "../a11y"; import { logsHref } from "../links"; diff --git a/ui/src/main.tsx b/ui/src/main.tsx index 2b1a7e2..cae67e2 100644 --- a/ui/src/main.tsx +++ b/ui/src/main.tsx @@ -1,6 +1,6 @@ import React from "react"; import ReactDOM from "react-dom/client"; -import { BrowserRouter } from "react-router-dom"; +import { BrowserRouter } from "react-router"; import App from "./App"; import { TimeRangeProvider } from "./timerange"; import "./styles.css"; diff --git a/ui/src/routes.a11y.test.tsx b/ui/src/routes.a11y.test.tsx index a6d7bae..7d243e9 100644 --- a/ui/src/routes.a11y.test.tsx +++ b/ui/src/routes.a11y.test.tsx @@ -20,7 +20,7 @@ // JEF-443's Alerts row rework). import { describe, expect, it, vi } from "vitest"; import { render, screen } from "@testing-library/react"; -import { MemoryRouter } from "react-router-dom"; +import { MemoryRouter } from "react-router"; import type { ReactElement } from "react"; import { axe } from "vitest-axe"; import App from "./App"; diff --git a/ui/src/timerange.tsx b/ui/src/timerange.tsx index b9aa59a..a011d91 100644 --- a/ui/src/timerange.tsx +++ b/ui/src/timerange.tsx @@ -1,5 +1,5 @@ import { createContext, useContext, useEffect, useState, type ReactNode } from "react"; -import { useSearchParams } from "react-router-dom"; +import { useSearchParams } from "react-router"; // Relative ranges. `ms: 0` means unbounded ("all"). export const RANGES: { key: string; label: string; ms: number }[] = [