From 70679b6fbb404993ce39eeceb6d3d5b938bb37fa Mon Sep 17 00:00:00 2001 From: MengMengCode <227010654+MengMengCode@users.noreply.github.com> Date: Sun, 26 Jul 2026 04:38:56 +0800 Subject: [PATCH] feat: upgrade Node.js version and update dependencies for frontend and docs --- .github/workflows/build.yml | 2 +- .github/workflows/pages.yml | 2 +- docs/package-lock.json | 14 +- docs/package.json | 3 +- frontend/package-lock.json | 150 ++++++------------ frontend/package.json | 12 +- frontend/src/App.tsx | 2 +- frontend/src/components/AutoTranslate.tsx | 2 +- frontend/src/components/ContainerCard.tsx | 2 +- .../src/components/CreateContainerModal.tsx | 2 +- frontend/src/components/Layout.tsx | 2 +- frontend/src/components/Sidebar.tsx | 2 +- frontend/src/contexts/AuthContext.tsx | 2 +- frontend/src/main.tsx | 2 +- frontend/src/pages/ContainerDetail.tsx | 2 +- frontend/src/pages/Containers.tsx | 2 +- frontend/src/pages/Dashboard.tsx | 4 +- frontend/src/pages/ImageManagement.tsx | 2 +- frontend/src/pages/Routing.tsx | 2 +- frontend/src/pages/Snapshots.tsx | 2 +- 20 files changed, 79 insertions(+), 134 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0ee231f..6f61c78 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -31,7 +31,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: 20 + node-version: "22.22.0" cache: npm cache-dependency-path: | frontend/package-lock.json diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index f595d77..da03730 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -30,7 +30,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: "20" + node-version: "22.22.0" cache: npm cache-dependency-path: docs/package-lock.json diff --git a/docs/package-lock.json b/docs/package-lock.json index 20b676c..04c482e 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -2065,9 +2065,9 @@ "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.12", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", - "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "version": "3.3.16", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", + "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", "dev": true, "funding": [ { @@ -2123,9 +2123,9 @@ } }, "node_modules/postcss": { - "version": "8.5.15", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", - "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "version": "8.5.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.23.tgz", + "integrity": "sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==", "dev": true, "funding": [ { @@ -2143,7 +2143,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.12", + "nanoid": "^3.3.16", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, diff --git a/docs/package.json b/docs/package.json index 725a8e9..376b482 100644 --- a/docs/package.json +++ b/docs/package.json @@ -12,6 +12,7 @@ }, "overrides": { "vite": "6.4.3", - "esbuild": "0.28.1" + "esbuild": "0.28.1", + "postcss": "8.5.23" } } diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 6f12ac8..bd088f7 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,28 +1,28 @@ { "name": "clicd-frontend", - "version": "1.1.27", + "version": "1.1.28", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "clicd-frontend", - "version": "1.1.27", + "version": "1.1.28", "dependencies": { "@novnc/novnc": "1.5.0", "@xterm/addon-fit": "^0.11.0", "@xterm/xterm": "^6.0.0", "axios": "^1.18.0", "lucide-react": "^0.454.0", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-router-dom": "^7.18.1" + "react": "19.2.8", + "react-dom": "19.2.8", + "react-router": "8.3.0" }, "devDependencies": { - "@types/react": "^18.3.12", - "@types/react-dom": "^18.3.1", + "@types/react": "^19.2.17", + "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^5.2.0", "autoprefixer": "^10.4.20", - "postcss": "^8.4.49", + "postcss": "^8.5.23", "tailwindcss": "^3.4.15", "typescript": "^5.6.3", "vite": "^8.0.16" @@ -800,32 +800,24 @@ "@babel/types": "^7.28.2" } }, - "node_modules/@types/prop-types": { - "version": "15.7.15", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", - "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/react": { - "version": "18.3.30", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.30.tgz", - "integrity": "sha512-3ek6mwJL5/VBewBcY4S66cqlCtK3qi4WIq37Z0m/NHw1hjhI7274Mx1qz/+ggSzyBCOEf7eHjBN6INjPAWYfYw==", + "version": "19.2.17", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.17.tgz", + "integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==", "dev": true, "license": "MIT", "dependencies": { - "@types/prop-types": "*", "csstype": "^3.2.2" } }, "node_modules/@types/react-dom": { - "version": "18.3.7", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", - "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "dev": true, "license": "MIT", "peerDependencies": { - "@types/react": "^18.0.0" + "@types/react": "^19.2.0" } }, "node_modules/@vitejs/plugin-react": { @@ -1143,18 +1135,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/cssesc": { "version": "3.0.0", @@ -1629,6 +1614,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, "license": "MIT" }, "node_modules/jsesc": { @@ -1938,18 +1924,6 @@ "dev": true, "license": "MIT" }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -2042,9 +2016,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.12", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", - "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "version": "3.3.16", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", + "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", "dev": true, "funding": [ { @@ -2148,9 +2122,9 @@ } }, "node_modules/postcss": { - "version": "8.5.15", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", - "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "version": "8.5.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.23.tgz", + "integrity": "sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==", "dev": true, "funding": [ { @@ -2168,7 +2142,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.12", + "nanoid": "^3.3.16", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -2341,28 +2315,24 @@ "license": "MIT" }, "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.8.tgz", + "integrity": "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==", "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.8.tgz", + "integrity": "sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==", "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" + "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^18.3.1" + "react": "^19.2.8" } }, "node_modules/react-refresh": { @@ -2376,20 +2346,19 @@ } }, "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": { @@ -2397,22 +2366,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/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -2535,13 +2488,10 @@ } }, "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" }, "node_modules/semver": { "version": "6.3.1", @@ -2553,12 +2503,6 @@ "semver": "bin/semver.js" } }, - "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/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", diff --git a/frontend/package.json b/frontend/package.json index 87edd41..bc803ac 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -14,16 +14,16 @@ "@xterm/xterm": "^6.0.0", "axios": "^1.18.0", "lucide-react": "^0.454.0", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-router-dom": "^7.18.1" + "react": "19.2.8", + "react-dom": "19.2.8", + "react-router": "8.3.0" }, "devDependencies": { - "@types/react": "^18.3.12", - "@types/react-dom": "^18.3.1", + "@types/react": "^19.2.17", + "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^5.2.0", "autoprefixer": "^10.4.20", - "postcss": "^8.4.49", + "postcss": "^8.5.23", "tailwindcss": "^3.4.15", "typescript": "^5.6.3", "vite": "^8.0.16" diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 3239830..8b185de 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,4 +1,4 @@ -import { Routes, Route, Navigate } from 'react-router-dom' +import { Routes, Route, Navigate } from 'react-router' import { useAuth } from './contexts/AuthContext' import Login from './pages/Login' import Dashboard from './pages/Dashboard' diff --git a/frontend/src/components/AutoTranslate.tsx b/frontend/src/components/AutoTranslate.tsx index 5ae46ef..4146a44 100644 --- a/frontend/src/components/AutoTranslate.tsx +++ b/frontend/src/components/AutoTranslate.tsx @@ -1,5 +1,5 @@ import { useEffect } from 'react' -import { useLocation } from 'react-router-dom' +import { useLocation } from 'react-router' import { useLanguage } from '../contexts/LanguageContext' import { shouldTranslateText, translateText } from '../utils/i18n' diff --git a/frontend/src/components/ContainerCard.tsx b/frontend/src/components/ContainerCard.tsx index 7085448..d11a0e8 100644 --- a/frontend/src/components/ContainerCard.tsx +++ b/frontend/src/components/ContainerCard.tsx @@ -1,4 +1,4 @@ -import { useNavigate } from 'react-router-dom' +import { useNavigate } from 'react-router' import { Server, Cpu, diff --git a/frontend/src/components/CreateContainerModal.tsx b/frontend/src/components/CreateContainerModal.tsx index ad5ef3b..57034d6 100644 --- a/frontend/src/components/CreateContainerModal.tsx +++ b/frontend/src/components/CreateContainerModal.tsx @@ -1,6 +1,6 @@ import { useEffect, useMemo, useState, type ReactNode } from 'react' import { ArrowLeft, ArrowRight, CalendarClock, Check, Plus, RefreshCw, Trash2, X } from 'lucide-react' -import { useNavigate } from 'react-router-dom' +import { useNavigate } from 'react-router' import { batchCreate, getIPv6Status, getEnabledImages, getHostInfo, getHostReport, getRoutingInfo, getStorageInfo, CreateContainerRequest, HostInfo, HostProbeReport, IPv6Status, PortMapping, RoutingInfo, StorageInfo, Template } from '../services/api' import { useDialog } from './Dialog' import { useLanguage, type Language } from '../contexts/LanguageContext' diff --git a/frontend/src/components/Layout.tsx b/frontend/src/components/Layout.tsx index a3f9efe..5ca99af 100644 --- a/frontend/src/components/Layout.tsx +++ b/frontend/src/components/Layout.tsx @@ -1,4 +1,4 @@ -import { Outlet } from 'react-router-dom' +import { Outlet } from 'react-router' import Sidebar from './Sidebar' import { useState } from 'react' import AutoTranslate from './AutoTranslate' diff --git a/frontend/src/components/Sidebar.tsx b/frontend/src/components/Sidebar.tsx index 50c4916..cc99dcd 100644 --- a/frontend/src/components/Sidebar.tsx +++ b/frontend/src/components/Sidebar.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from 'react' -import { useLocation, useNavigate } from 'react-router-dom' +import { useLocation, useNavigate } from 'react-router' import { ChevronLeft, ChevronRight, diff --git a/frontend/src/contexts/AuthContext.tsx b/frontend/src/contexts/AuthContext.tsx index ef736b9..9faee71 100644 --- a/frontend/src/contexts/AuthContext.tsx +++ b/frontend/src/contexts/AuthContext.tsx @@ -1,5 +1,5 @@ import React, { createContext, useContext, useState, useEffect, ReactNode } from 'react' -import { useNavigate } from 'react-router-dom' +import { useNavigate } from 'react-router' import api, { login as apiLogin, checkAuth, LoginResponse } from '../services/api' interface AuthContextType { diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx index a896230..f6905fe 100644 --- a/frontend/src/main.tsx +++ b/frontend/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 { AuthProvider } from './contexts/AuthContext' import { ThemeProvider } from './contexts/ThemeContext' diff --git a/frontend/src/pages/ContainerDetail.tsx b/frontend/src/pages/ContainerDetail.tsx index 366e0e9..b57ab1e 100644 --- a/frontend/src/pages/ContainerDetail.tsx +++ b/frontend/src/pages/ContainerDetail.tsx @@ -1,5 +1,5 @@ import { useState, useEffect, useCallback, useRef, type ReactNode } from 'react' -import { useParams, useNavigate } from 'react-router-dom' +import { useParams, useNavigate } from 'react-router' import { ArrowLeft, AlertTriangle, diff --git a/frontend/src/pages/Containers.tsx b/frontend/src/pages/Containers.tsx index 1bde97d..a44b7d0 100644 --- a/frontend/src/pages/Containers.tsx +++ b/frontend/src/pages/Containers.tsx @@ -1,5 +1,5 @@ import { useCallback, useEffect, useMemo, useState, type ReactNode } from 'react' -import { useNavigate } from 'react-router-dom' +import { useNavigate } from 'react-router' import { ArrowDown, ArrowUp, diff --git a/frontend/src/pages/Dashboard.tsx b/frontend/src/pages/Dashboard.tsx index 2287355..577cd77 100644 --- a/frontend/src/pages/Dashboard.tsx +++ b/frontend/src/pages/Dashboard.tsx @@ -1,4 +1,4 @@ -import { useCallback, useEffect, useState } from 'react' +import { useCallback, useEffect, useState, type ReactNode } from 'react' import { Cpu, HardDrive, MemoryStick, Network, Server } from 'lucide-react' import RingStats from '../components/RingStats' import ResourceStatsPanel, { @@ -171,7 +171,7 @@ function SummaryCard({ value, muted = false, }: { - icon?: JSX.Element + icon?: ReactNode dot?: string title: string value: number diff --git a/frontend/src/pages/ImageManagement.tsx b/frontend/src/pages/ImageManagement.tsx index 10bad26..3fe528e 100644 --- a/frontend/src/pages/ImageManagement.tsx +++ b/frontend/src/pages/ImageManagement.tsx @@ -1,5 +1,5 @@ import { useCallback, useEffect, useState, type ReactNode } from 'react' -import { useNavigate } from 'react-router-dom' +import { useNavigate } from 'react-router' import { Download, Trash2, diff --git a/frontend/src/pages/Routing.tsx b/frontend/src/pages/Routing.tsx index 2c070ea..584cf3a 100644 --- a/frontend/src/pages/Routing.tsx +++ b/frontend/src/pages/Routing.tsx @@ -1,6 +1,6 @@ import { useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from 'react' import { Globe2, Network, Pencil, Plus, RefreshCw, Router, Save, Search, Server, Trash2, X } from 'lucide-react' -import { useNavigate } from 'react-router-dom' +import { useNavigate } from 'react-router' import { useLanguage, type Language } from '../contexts/LanguageContext' import { getRoutingInfo, diff --git a/frontend/src/pages/Snapshots.tsx b/frontend/src/pages/Snapshots.tsx index d61aec4..7034c1c 100644 --- a/frontend/src/pages/Snapshots.tsx +++ b/frontend/src/pages/Snapshots.tsx @@ -1,6 +1,6 @@ import { useCallback, useEffect, useState } from 'react' import { Camera, RefreshCw, Server, Trash2 } from 'lucide-react' -import { useNavigate } from 'react-router-dom' +import { useNavigate } from 'react-router' import { deleteContainerSnapshot, getSnapshots, Snapshot } from '../services/api' import { useDialog } from '../components/Dialog'