feat: enable react router feature flags for v7

Signed-off-by: Paul Schultz <pschultz@pobox.com>
This commit is contained in:
Paul Schultz
2025-11-18 11:08:16 -06:00
parent 3581e7d2c9
commit a7e0d506a2
68 changed files with 831 additions and 253 deletions
+56
View File
@@ -0,0 +1,56 @@
---
'@backstage/frontend-dynamic-feature-loader': patch
'@backstage/plugin-api-docs-module-protoc-gen-doc': patch
'@backstage/plugin-techdocs-module-addons-contrib': patch
'@backstage/plugin-catalog-unprocessed-entities': patch
'@backstage/plugin-scaffolder-node-test-utils': patch
'@backstage/plugin-techdocs-addons-test-utils': patch
'@backstage/frontend-plugin-api': patch
'@backstage/frontend-test-utils': patch
'@backstage/frontend-defaults': patch
'@backstage/integration-react': patch
'@backstage/plugin-kubernetes-cluster': patch
'@backstage/frontend-app-api': patch
'@backstage/core-compat-api': patch
'@backstage/core-components': patch
'@backstage/core-plugin-api': patch
'@backstage/plugin-kubernetes-react': patch
'@backstage/plugin-permission-react': patch
'@backstage/plugin-scaffolder-react': patch
'@backstage/version-bridge': patch
'@backstage/plugin-app-visualizer': patch
'@backstage/plugin-catalog-import': patch
'@backstage/plugin-techdocs-react': patch
'@backstage/app-defaults': patch
'@backstage/core-app-api': patch
'@backstage/plugin-catalog-graph': patch
'@backstage/plugin-catalog-react': patch
'@backstage/plugin-config-schema': patch
'@backstage/plugin-notifications': patch
'@backstage/plugin-signals-react': patch
'@backstage/plugin-user-settings': patch
'@backstage/plugin-search-react': patch
'@backstage/repo-tools': patch
'@backstage/test-utils': patch
'@backstage/dev-utils': patch
'@backstage/plugin-auth-react': patch
'@backstage/plugin-home-react': patch
'@backstage/plugin-kubernetes': patch
'@backstage/plugin-mui-to-bui': patch
'@backstage/plugin-scaffolder': patch
'@backstage/plugin-org-react': patch
'@backstage/plugin-api-docs': patch
'@backstage/plugin-devtools': patch
'@backstage/plugin-techdocs': patch
'@backstage/plugin-catalog': patch
'@backstage/plugin-signals': patch
'@backstage/theme': patch
'@backstage/plugin-search': patch
'@backstage/plugin-auth': patch
'@backstage/plugin-home': patch
'@backstage/ui': patch
'@backstage/plugin-app': patch
'@backstage/plugin-org': patch
---
Prepare for React Router v7 migration by updating to v6.30.2 across all NFS packages and enabling v7 future flags. Convert routes from splat paths to parent/child structure with Outlet components.
+2 -2
View File
@@ -52,13 +52,13 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -52,13 +52,13 @@
"msw": "^1.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -84,8 +84,8 @@
"history": "^5.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router": "^6.3.0",
"react-router-dom": "^6.3.0",
"react-router": "^6.30.2",
"react-router-dom": "^6.30.2",
"react-use": "^17.2.4",
"zen-observable": "^0.10.0"
},
+2 -2
View File
@@ -79,8 +79,8 @@
"history": "^5.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router": "^6.3.0",
"react-router-dom": "^6.3.0",
"react-router": "^6.30.2",
"react-router-dom": "^6.30.2",
"react-use": "^17.2.4",
"zen-observable": "^0.10.0"
},
+2 -2
View File
@@ -73,7 +73,7 @@
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-beta": "npm:react-router@6.0.0-beta.0",
"react-router-dom": "^6.3.0",
"react-router-dom": "^6.30.2",
"react-router-dom-beta": "npm:react-router-dom@6.0.0-beta.0",
"react-router-dom-stable": "npm:react-router-dom@^6.3.0",
"react-router-stable": "npm:react-router@^6.3.0"
@@ -82,7 +82,7 @@
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -53,14 +53,14 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0",
"react-router-dom": "^6.30.2",
"zod": "^3.25.76"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -123,13 +123,13 @@
"msw": "^1.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -68,13 +68,13 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -59,14 +59,14 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0",
"react-router-dom": "^6.30.2",
"zen-observable": "^0.10.0"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -53,13 +53,13 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -49,13 +49,13 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -49,13 +49,13 @@
"msw": "^1.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -62,13 +62,13 @@
"history": "^5.3.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -47,14 +47,14 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@testing-library/react": "^16.0.0",
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -207,7 +207,13 @@ export function renderInTestApp<TApiPairs extends any[] = any[]>(
RouterBlueprint.make({
params: {
component: ({ children }) => (
<MemoryRouter initialEntries={options?.initialRouteEntries}>
<MemoryRouter
initialEntries={options?.initialRouteEntries}
future={{
v7_relativeSplatPath: true,
v7_startTransition: true,
}}
>
{children}
</MemoryRouter>
),
@@ -107,7 +107,13 @@ export function renderTestApp<TApiPairs extends any[] = any[]>(
RouterBlueprint.make({
params: {
component: ({ children }) => (
<MemoryRouter initialEntries={options.initialRouteEntries}>
<MemoryRouter
initialEntries={options.initialRouteEntries}
future={{
v7_relativeSplatPath: true,
v7_startTransition: true,
}}
>
{children}
</MemoryRouter>
),
+2 -2
View File
@@ -50,13 +50,13 @@
"msw": "^1.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -29,14 +29,14 @@ const desiredLocalVersionsOfDependencies = {
'@types/react': '^18.0.0',
react: '^18.0.2',
'react-dom': '^18.0.2',
'react-router-dom': '^6.3.0',
'react-router-dom': '^6.30.2',
};
const peerDependencies = {
'@types/react': '^17.0.0 || ^18.0.0',
react: '^17.0.0 || ^18.0.0',
'react-dom': '^17.0.0 || ^18.0.0',
'react-router-dom': '^6.3.0',
'react-router-dom': '^6.30.2',
};
const groupsOfPeerDependencies = [['@types/react', 'react', 'react-dom']];
@@ -51,7 +51,7 @@
"history": "^5.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0",
"react-router-dom": "^6.30.2",
"react-use": "^17.2.4"
},
"devDependencies": {
+2 -2
View File
@@ -70,14 +70,14 @@
"msw": "^1.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@testing-library/react": "^16.0.0",
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -48,14 +48,14 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@material-ui/core": "^4.12.2",
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -58,14 +58,14 @@
"mini-css-extract-plugin": "^2.9.2",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0",
"react-router-dom": "^6.30.2",
"storybook": "^10.3.0-alpha.1"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -42,13 +42,13 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -45,13 +45,13 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -86,13 +86,13 @@
"@types/swagger-ui-react": "^5.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -52,13 +52,13 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -47,13 +47,13 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -80,13 +80,13 @@
"msw": "^1.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+11 -1
View File
@@ -198,7 +198,17 @@ export interface AppRouterProps {
function DefaultRouter(props: PropsWithChildren<{}>) {
const configApi = useApi(configApiRef);
const basePath = getBasePath(configApi);
return <BrowserRouter basename={basePath}>{props.children}</BrowserRouter>;
return (
<BrowserRouter
basename={basePath}
future={{
v7_relativeSplatPath: true,
v7_startTransition: true,
}}
>
{props.children}
</BrowserRouter>
);
}
/**
@@ -0,0 +1,246 @@
/*
* Copyright 2025 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { screen, waitFor } from '@testing-library/react';
import { renderTestApp } from '@backstage/frontend-test-utils';
import { PageBlueprint } from '@backstage/frontend-plugin-api';
import { Link, useLocation, useParams } from 'react-router-dom';
describe('AppRoutes', () => {
it('should render the first route at root path', async () => {
const homePage = PageBlueprint.make({
name: 'home',
params: {
path: '/',
loader: async () => <div data-testid="home-page">Home Page</div>,
},
});
renderTestApp({
extensions: [homePage],
initialRouteEntries: ['/'],
});
await waitFor(() => {
expect(screen.getByTestId('home-page')).toBeInTheDocument();
expect(screen.getByText('Home Page')).toBeInTheDocument();
});
});
it('should render a route at non-root path', async () => {
const catalogPage = PageBlueprint.make({
name: 'catalog',
params: {
path: '/catalog',
loader: async () => <div data-testid="catalog-page">Catalog Page</div>,
},
});
renderTestApp({
extensions: [catalogPage],
initialRouteEntries: ['/catalog'],
});
await waitFor(() => {
expect(screen.getByTestId('catalog-page')).toBeInTheDocument();
expect(screen.getByText('Catalog Page')).toBeInTheDocument();
});
});
it('should handle nested paths under a route (splat path behavior)', async () => {
const NestedPathDisplay = () => {
const location = useLocation();
const params = useParams();
return (
<div data-testid="entity-page">
<div data-testid="pathname">{location.pathname}</div>
<div data-testid="splat-params">{params['*']}</div>
Entity Details
</div>
);
};
const catalogPage = PageBlueprint.make({
name: 'catalog',
params: {
path: '/catalog',
loader: async () => <NestedPathDisplay />,
},
});
renderTestApp({
extensions: [catalogPage],
initialRouteEntries: ['/catalog/default/component/my-entity'],
});
await waitFor(() => {
expect(screen.getByTestId('entity-page')).toBeInTheDocument();
expect(screen.getByTestId('pathname')).toHaveTextContent(
'/catalog/default/component/my-entity',
);
expect(screen.getByTestId('splat-params')).toHaveTextContent(
'default/component/my-entity',
);
});
});
it('should support relative links within routes', async () => {
const CatalogWithLinks = () => {
return (
<div data-testid="catalog-page">
<div>Catalog Page</div>
<Link to="./create" data-testid="create-link">
Create Entity
</Link>
<Link to="../settings" data-testid="settings-link">
Go to Settings
</Link>
</div>
);
};
const catalogPage = PageBlueprint.make({
name: 'catalog',
params: {
path: '/catalog',
loader: async () => <CatalogWithLinks />,
},
});
renderTestApp({
extensions: [catalogPage],
initialRouteEntries: ['/catalog'],
});
await waitFor(() => {
expect(screen.getByTestId('catalog-page')).toBeInTheDocument();
expect(screen.getByTestId('create-link')).toHaveAttribute(
'href',
'/catalog/create',
);
expect(screen.getByTestId('settings-link')).toHaveAttribute(
'href',
'/settings',
);
});
});
it('should handle multiple routes correctly', async () => {
const homePage = PageBlueprint.make({
name: 'home',
params: {
path: '/',
loader: async () => <div data-testid="home-page">Home Page</div>,
},
});
const catalogPage = PageBlueprint.make({
name: 'catalog',
params: {
path: '/catalog',
loader: async () => <div data-testid="catalog-page">Catalog Page</div>,
},
});
const settingsPage = PageBlueprint.make({
name: 'settings',
params: {
path: '/settings',
loader: async () => (
<div data-testid="settings-page">Settings Page</div>
),
},
});
const { unmount } = renderTestApp({
extensions: [homePage, catalogPage, settingsPage],
initialRouteEntries: ['/'],
});
await waitFor(() => {
expect(screen.getByTestId('home-page')).toBeInTheDocument();
});
unmount();
const { unmount: unmount2 } = renderTestApp({
extensions: [homePage, catalogPage, settingsPage],
initialRouteEntries: ['/catalog'],
});
await waitFor(() => {
expect(screen.getByTestId('catalog-page')).toBeInTheDocument();
});
unmount2();
renderTestApp({
extensions: [homePage, catalogPage, settingsPage],
initialRouteEntries: ['/settings'],
});
await waitFor(() => {
expect(screen.getByTestId('settings-page')).toBeInTheDocument();
});
});
it('should handle routes with trailing slashes', async () => {
const docsPage = PageBlueprint.make({
name: 'docs',
params: {
path: '/docs/',
loader: async () => <div data-testid="docs-page">Docs Page</div>,
},
});
renderTestApp({
extensions: [docsPage],
initialRouteEntries: ['/docs'],
});
await waitFor(() => {
expect(screen.getByTestId('docs-page')).toBeInTheDocument();
});
});
it('should show 404 for unknown paths when root route exists', async () => {
const homePage = PageBlueprint.make({
name: 'home',
params: {
path: '/',
loader: async () => <div data-testid="home-page">Home Page</div>,
},
});
const catalogPage = PageBlueprint.make({
name: 'catalog',
params: {
path: '/catalog',
loader: async () => <div data-testid="catalog-page">Catalog Page</div>,
},
});
renderTestApp({
extensions: [homePage, catalogPage],
initialRouteEntries: ['/unknown'],
});
await waitFor(() => {
expect(screen.queryByTestId('home-page')).not.toBeInTheDocument();
expect(screen.queryByTestId('catalog-page')).not.toBeInTheDocument();
});
});
});
+35 -7
View File
@@ -20,7 +20,7 @@ import {
createExtensionInput,
NotFoundErrorPage,
} from '@backstage/frontend-plugin-api';
import { useRoutes } from 'react-router-dom';
import { useRoutes, Outlet } from 'react-router-dom';
export const AppRoutes = createExtension({
name: 'routes',
@@ -38,14 +38,42 @@ export const AppRoutes = createExtension({
const element = useRoutes([
...inputs.routes.map(route => {
const routePath = route.get(coreExtensionData.routePath);
const routeElement = route.get(coreExtensionData.reactElement);
// For v7_relativeSplatPath: convert splat paths to parent/child structure
if (routePath === '/') {
// Root route: parent with index and splat children
return {
path: '/',
element: <Outlet />,
children: [
{
index: true,
element: routeElement,
},
{
path: '*',
element: routeElement,
},
],
};
}
// Non-root routes: parent route with splat child
const normalizedPath = routePath.replace(/\/$/, '');
return {
path:
routePath === '/'
? routePath
: `${routePath.replace(/\/$/, '')}/*`,
element: route.get(coreExtensionData.reactElement),
path: normalizedPath,
element: <Outlet />,
children: [
{
index: true,
element: routeElement,
},
{
path: '*',
element: routeElement,
},
],
};
}),
{
+2 -2
View File
@@ -55,13 +55,13 @@
"msw": "^1.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -68,13 +68,13 @@
"msw": "^1.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -78,13 +78,13 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -91,13 +91,13 @@
"msw": "^1.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -102,7 +102,7 @@
"@types/zen-observable": "^0.8.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0",
"react-router-dom": "^6.30.2",
"react-test-renderer": "^16.13.1",
"zod": "^3.25.76"
},
@@ -110,7 +110,7 @@
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -71,13 +71,13 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -105,14 +105,14 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0",
"react-router-dom": "^6.30.2",
"swr": "^2.2.5"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -0,0 +1,218 @@
/*
* Copyright 2025 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { screen } from '@testing-library/react';
import { useSelectedSubRoute } from './EntityTabs';
import { MemoryRouter, Route, Routes } from 'react-router-dom';
import { render } from '@testing-library/react';
function TestSubRouteHook(props: {
subRoutes: Array<{
group: string;
path: string;
title: string;
children: JSX.Element;
}>;
}) {
const { index, route, element } = useSelectedSubRoute(props.subRoutes);
return (
<div>
<div data-testid="selected-index">{index}</div>
<div data-testid="selected-route-title">{route?.title}</div>
<div data-testid="element-container">{element}</div>
</div>
);
}
describe('EntityTabs', () => {
const subRoutes = [
{
group: 'default',
path: '/overview',
title: 'Overview',
children: <div>Overview Content</div>,
},
{
group: 'default',
path: '/details',
title: 'Details',
children: <div>Details Content</div>,
},
{
group: 'docs',
path: '/docs',
title: 'Documentation',
children: <div>Documentation Content</div>,
},
];
describe('useSelectedSubRoute', () => {
it('should render the first route at root path', () => {
render(
<MemoryRouter initialEntries={['/']}>
<Routes>
<Route
path="/*"
element={<TestSubRouteHook subRoutes={subRoutes} />}
/>
</Routes>
</MemoryRouter>,
);
expect(screen.getByTestId('selected-index')).toHaveTextContent('0');
expect(screen.getByTestId('selected-route-title')).toHaveTextContent(
'Overview',
);
});
it('should render a route at non-root path', () => {
render(
<MemoryRouter initialEntries={['/details']}>
<Routes>
<Route
path="/*"
element={<TestSubRouteHook subRoutes={subRoutes} />}
/>
</Routes>
</MemoryRouter>,
);
expect(screen.getByTestId('selected-index')).toHaveTextContent('1');
expect(screen.getByTestId('selected-route-title')).toHaveTextContent(
'Details',
);
});
it('should handle nested paths under a route (splat path behavior)', () => {
render(
<MemoryRouter initialEntries={['/details/nested/path']}>
<Routes>
<Route
path="/*"
element={<TestSubRouteHook subRoutes={subRoutes} />}
/>
</Routes>
</MemoryRouter>,
);
expect(screen.getByTestId('selected-index')).toHaveTextContent('1');
expect(screen.getByTestId('selected-route-title')).toHaveTextContent(
'Details',
);
});
it('should render correct content for matched route', () => {
render(
<MemoryRouter initialEntries={['/docs']}>
<Routes>
<Route
path="/*"
element={<TestSubRouteHook subRoutes={subRoutes} />}
/>
</Routes>
</MemoryRouter>,
);
expect(screen.getByTestId('element-container')).toHaveTextContent(
'Documentation Content',
);
});
it('should support relative links within routes', () => {
const routesWithRelativeLinks = [
{
group: 'default',
path: '/entity',
title: 'Entity',
children: (
<div>
Entity Content
<a href="./child">Go to child</a>
</div>
),
},
];
render(
<MemoryRouter initialEntries={['/entity']}>
<Routes>
<Route
path="/*"
element={<TestSubRouteHook subRoutes={routesWithRelativeLinks} />}
/>
</Routes>
</MemoryRouter>,
);
expect(screen.getByText('Entity Content')).toBeInTheDocument();
expect(screen.getByText('Go to child')).toHaveAttribute(
'href',
'./child',
);
});
it('should handle routes with nested path segments', () => {
const nestedPathRoutes = [
{
group: 'default',
path: '/catalog/entities',
title: 'Entities',
children: <div>Entities Content</div>,
},
{
group: 'default',
path: '/catalog',
title: 'Catalog',
children: <div>Catalog Content</div>,
},
];
render(
<MemoryRouter initialEntries={['/catalog/entities/some-entity']}>
<Routes>
<Route
path="/*"
element={<TestSubRouteHook subRoutes={nestedPathRoutes} />}
/>
</Routes>
</MemoryRouter>,
);
expect(screen.getByTestId('selected-index')).toHaveTextContent('0');
expect(screen.getByTestId('selected-route-title')).toHaveTextContent(
'Entities',
);
});
it('should fall back to first route for unknown paths', () => {
render(
<MemoryRouter initialEntries={['/unknown-path']}>
<Routes>
<Route
path="/*"
element={<TestSubRouteHook subRoutes={subRoutes} />}
/>
</Routes>
</MemoryRouter>,
);
expect(screen.getByTestId('selected-index')).toHaveTextContent('0');
expect(screen.getByTestId('selected-route-title')).toHaveTextContent(
'Overview',
);
});
});
});
@@ -15,7 +15,7 @@
*/
import { useMemo } from 'react';
import { Helmet } from 'react-helmet';
import { matchRoutes, useParams, useRoutes } from 'react-router-dom';
import { matchRoutes, useParams, useRoutes, Outlet } from 'react-router-dom';
import { EntityTabsPanel } from './EntityTabsPanel';
import { EntityTabsList } from './EntityTabsList';
@@ -33,17 +33,25 @@ export function useSelectedSubRoute(subRoutes: SubRoute[]): {
} {
const params = useParams();
// For v7_relativeSplatPath: convert splat paths to parent/child structure
const routes = subRoutes.map(({ path, children }) => ({
caseSensitive: false,
path: `${path}/*`,
element: children,
path: path,
element: <Outlet />,
children: [
{
index: true,
element: children,
},
{
path: '*',
element: children,
},
],
}));
// TODO: remove once react-router updated
const sortedRoutes = routes.sort((a, b) =>
// remove "/*" symbols from path end before comparing
b.path.replace(/\/\*$/, '').localeCompare(a.path.replace(/\/\*$/, '')),
);
// Sort routes by path length (longest first) for proper matching
const sortedRoutes = routes.sort((a, b) => b.path.localeCompare(a.path));
const element = useRoutes(sortedRoutes) ?? subRoutes[0]?.children;
@@ -57,7 +65,7 @@ export function useSelectedSubRoute(subRoutes: SubRoute[]): {
const [matchedRoute] = matchRoutes(sortedRoutes, currentRoute) ?? [];
const foundIndex = matchedRoute
? subRoutes.findIndex(t => `${t.path}/*` === matchedRoute.route.path)
? subRoutes.findIndex(t => t.path === matchedRoute.route.path)
: 0;
return {
+2 -2
View File
@@ -57,13 +57,13 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -51,13 +51,13 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -76,13 +76,13 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -53,13 +53,13 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -68,13 +68,13 @@
"@types/react-grid-layout": "^1.3.2",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -92,13 +92,13 @@
"@types/react-grid-layout": "^1.3.2",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -76,13 +76,13 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -87,13 +87,13 @@
"msw": "^2.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -78,13 +78,13 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -51,13 +51,13 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -77,13 +77,13 @@
"msw": "^1.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -61,13 +61,13 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -83,13 +83,13 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -55,13 +55,13 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -52,13 +52,13 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -110,14 +110,14 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0",
"react-router-dom": "^6.30.2",
"swr": "^2.0.0"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -123,14 +123,14 @@
"@types/react-window": "^1.8.8",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0",
"react-router-dom": "^6.30.2",
"swr": "^2.0.0"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -84,13 +84,13 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -85,13 +85,13 @@
"history": "^5.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -51,13 +51,13 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -70,14 +70,14 @@
"jest-websocket-mock": "^2.5.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0",
"react-router-dom": "^6.30.2",
"wait-for-expect": "^3.0.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -58,14 +58,14 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@testing-library/react": "^16.0.0",
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -75,14 +75,14 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0",
"react-router-dom": "^6.30.2",
"shadow-dom-testing-library": "^1.13.1"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -81,13 +81,13 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -101,13 +101,13 @@
"@types/react": "^18.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+2 -2
View File
@@ -85,13 +85,13 @@
"msw": "^1.0.0",
"react": "^18.0.2",
"react-dom": "^18.0.2",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0",
"react": "^17.0.0 || ^18.0.0",
"react-dom": "^17.0.0 || ^18.0.0",
"react-router-dom": "^6.3.0"
"react-router-dom": "^6.30.2"
},
"peerDependenciesMeta": {
"@types/react": {
+117 -117
View File
@@ -2934,12 +2934,12 @@ __metadata:
"@types/react": "npm:^18.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -3544,7 +3544,7 @@ __metadata:
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-beta: "npm:react-router@6.0.0-beta.0"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
react-router-dom-beta: "npm:react-router-dom@6.0.0-beta.0"
react-router-dom-stable: "npm:react-router-dom@^6.3.0"
react-router-stable: "npm:react-router@^6.3.0"
@@ -3555,7 +3555,7 @@ __metadata:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -3584,13 +3584,13 @@ __metadata:
lodash: "npm:^4.17.21"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
zod: "npm:^3.25.76"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -3658,7 +3658,7 @@ __metadata:
react-hook-form: "npm:^7.12.2"
react-idle-timer: "npm:5.7.2"
react-markdown: "npm:^8.0.0"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
react-sparklines: "npm:^1.7.0"
react-syntax-highlighter: "npm:^15.4.5"
react-use: "npm:^17.3.2"
@@ -3673,7 +3673,7 @@ __metadata:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -3700,13 +3700,13 @@ __metadata:
history: "npm:^5.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
zod: "npm:^3.25.76"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -3763,14 +3763,14 @@ __metadata:
"@types/react": "npm:^18.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
react-use: "npm:^17.2.4"
zen-observable: "npm:^0.10.0"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -3838,13 +3838,13 @@ __metadata:
lodash: "npm:^4.17.21"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
zod: "npm:^3.25.76"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -3871,12 +3871,12 @@ __metadata:
"@types/react": "npm:^18.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -3901,13 +3901,13 @@ __metadata:
msw: "npm:^1.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
uri-template: "npm:^2.0.0"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -3932,14 +3932,14 @@ __metadata:
history: "npm:^5.3.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
zod: "npm:^3.25.76"
zod-to-json-schema: "npm:^3.25.1"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -3963,14 +3963,14 @@ __metadata:
"@types/react": "npm:^18.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
zod: "npm:^3.25.76"
peerDependencies:
"@testing-library/react": ^16.0.0
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -4015,12 +4015,12 @@ __metadata:
msw: "npm:^1.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -4057,12 +4057,12 @@ __metadata:
grpc-docs: "npm:^1.1.2"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -4103,13 +4103,13 @@ __metadata:
graphql-ws: "npm:^5.4.1"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
swagger-ui-react: "npm:^5.27.1"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -4174,12 +4174,12 @@ __metadata:
"@types/react": "npm:^18.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -4201,12 +4201,12 @@ __metadata:
react: "npm:^18.0.2"
react-aria-components: "npm:^1.14.0"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -4242,14 +4242,14 @@ __metadata:
msw: "npm:^1.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
react-use: "npm:^17.2.4"
zod: "npm:^3.25.76"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -4753,12 +4753,12 @@ __metadata:
msw: "npm:^1.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -4787,13 +4787,13 @@ __metadata:
msw: "npm:^1.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
react-use: "npm:^17.2.4"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -5295,13 +5295,13 @@ __metadata:
qs: "npm:^6.9.4"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
react-use: "npm:^17.2.4"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -5345,14 +5345,14 @@ __metadata:
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-hook-form: "npm:^7.12.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
react-use: "npm:^17.2.4"
yaml: "npm:^2.0.0"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -5418,7 +5418,7 @@ __metadata:
qs: "npm:^6.9.4"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
react-test-renderer: "npm:^16.13.1"
react-use: "npm:^17.2.4"
yaml: "npm:^2.0.0"
@@ -5428,7 +5428,7 @@ __metadata:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -5468,13 +5468,13 @@ __metadata:
luxon: "npm:^3.5.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
react-use: "npm:^17.2.4"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -5528,7 +5528,7 @@ __metadata:
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-helmet: "npm:6.1.0"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
react-use: "npm:^17.2.4"
swr: "npm:^2.2.5"
zen-observable: "npm:^0.10.0"
@@ -5536,7 +5536,7 @@ __metadata:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -5563,14 +5563,14 @@ __metadata:
jsonschema: "npm:^1.2.6"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
react-use: "npm:^17.2.4"
zen-observable: "npm:^0.10.0"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -5635,12 +5635,12 @@ __metadata:
"@types/react": "npm:^18.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -5671,13 +5671,13 @@ __metadata:
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-json-view: "npm:^1.21.3"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
react-use: "npm:^17.2.4"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -5904,12 +5904,12 @@ __metadata:
"@types/react-grid-layout": "npm:^1.3.2"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -5952,14 +5952,14 @@ __metadata:
react-dom: "npm:^18.0.2"
react-grid-layout: "npm:1.3.4"
react-resizable: "npm:^3.0.4"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
react-use: "npm:^17.2.4"
zod: "npm:^3.25.76"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -6032,13 +6032,13 @@ __metadata:
kubernetes-models: "npm:^4.1.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
react-use: "npm:^17.2.4"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -6116,13 +6116,13 @@ __metadata:
msw: "npm:^2.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
react-use: "npm:^17.4.0"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -6151,12 +6151,12 @@ __metadata:
"@types/react": "npm:^18.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -6202,12 +6202,12 @@ __metadata:
"@types/react": "npm:^18.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -6352,13 +6352,13 @@ __metadata:
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-relative-time: "npm:^0.0.9"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
react-use: "npm:^17.2.4"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -6387,13 +6387,13 @@ __metadata:
"@types/react": "npm:^18.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
react-use: "npm:^17.2.4"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -6433,13 +6433,13 @@ __metadata:
qs: "npm:^6.10.1"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
react-use: "npm:^17.2.4"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -6539,13 +6539,13 @@ __metadata:
"@types/react": "npm:^18.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
swr: "npm:^2.0.0"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -6976,14 +6976,14 @@ __metadata:
"@types/react": "npm:^18.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
winston: "npm:^3.2.1"
winston-transport: "npm:^4.7.0"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -7070,7 +7070,7 @@ __metadata:
qs: "npm:^6.9.4"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
react-use: "npm:^17.2.4"
swr: "npm:^2.0.0"
use-immer: "npm:^0.11.0"
@@ -7081,7 +7081,7 @@ __metadata:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -7150,7 +7150,7 @@ __metadata:
react-dom: "npm:^18.0.2"
react-resizable: "npm:^3.0.5"
react-resizable-panels: "npm:^3.0.4"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
react-use: "npm:^17.2.4"
react-window: "npm:^1.8.10"
swr: "npm:^2.0.0"
@@ -7161,7 +7161,7 @@ __metadata:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -7366,14 +7366,14 @@ __metadata:
qs: "npm:^6.9.4"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
react-use: "npm:^17.3.2"
uuid: "npm:^11.0.2"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -7408,13 +7408,13 @@ __metadata:
qs: "npm:^6.9.4"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
react-use: "npm:^17.2.4"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -7478,12 +7478,12 @@ __metadata:
"@types/react": "npm:^18.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -7510,14 +7510,14 @@ __metadata:
jest-websocket-mock: "npm:^2.5.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
uuid: "npm:^11.0.0"
wait-for-expect: "npm:^3.0.2"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -7543,14 +7543,14 @@ __metadata:
"@types/react": "npm:^18.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
shadow-dom-testing-library: "npm:^1.13.1"
peerDependencies:
"@testing-library/react": ^16.0.0
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -7618,13 +7618,13 @@ __metadata:
photoswipe: "npm:^5.3.7"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
shadow-dom-testing-library: "npm:^1.13.1"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -7700,13 +7700,13 @@ __metadata:
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-helmet: "npm:6.1.0"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
react-use: "npm:^17.2.4"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -7756,13 +7756,13 @@ __metadata:
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-helmet: "npm:6.1.0"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
react-use: "npm:^17.2.4"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -7829,14 +7829,14 @@ __metadata:
msw: "npm:^1.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
react-use: "npm:^17.2.4"
zen-observable: "npm:^0.10.0"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -7948,14 +7948,14 @@ __metadata:
msw: "npm:^1.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
zen-observable: "npm:^0.10.0"
peerDependencies:
"@testing-library/react": ^16.0.0
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -7976,13 +7976,13 @@ __metadata:
"@types/react": "npm:^18.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
peerDependencies:
"@material-ui/core": ^4.12.2
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -8020,13 +8020,13 @@ __metadata:
react: "npm:^18.0.2"
react-aria-components: "npm:^1.14.0"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
storybook: "npm:^10.3.0-alpha.1"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -8043,12 +8043,12 @@ __metadata:
"@types/react": "npm:^18.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -10000,13 +10000,13 @@ __metadata:
"@types/react": "npm:^18.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
react-use: "npm:^17.2.4"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -24641,12 +24641,12 @@ __metadata:
msw: "npm:^1.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
peerDependencies:
"@types/react": ^17.0.0 || ^18.0.0
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
react-router-dom: ^6.3.0
react-router-dom: ^6.30.2
peerDependenciesMeta:
"@types/react":
optional: true
@@ -30774,8 +30774,8 @@ __metadata:
history: "npm:^5.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router: "npm:^6.3.0"
react-router-dom: "npm:^6.3.0"
react-router: "npm:^6.30.2"
react-router-dom: "npm:^6.30.2"
react-use: "npm:^17.2.4"
zen-observable: "npm:^0.10.0"
languageName: unknown
@@ -30848,8 +30848,8 @@ __metadata:
msw: "npm:^1.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router: "npm:^6.3.0"
react-router-dom: "npm:^6.3.0"
react-router: "npm:^6.30.2"
react-router-dom: "npm:^6.30.2"
react-use: "npm:^17.2.4"
zen-observable: "npm:^0.10.0"
languageName: unknown
@@ -44232,7 +44232,7 @@ __metadata:
languageName: node
linkType: hard
"react-router-dom@npm:^6.3.0":
"react-router-dom@npm:^6.30.2":
version: 6.30.3
resolution: "react-router-dom@npm:6.30.3"
dependencies:
@@ -44256,7 +44256,7 @@ __metadata:
languageName: node
linkType: hard
"react-router@npm:6.30.3, react-router@npm:^6.3.0":
"react-router@npm:6.30.3, react-router@npm:^6.30.2":
version: 6.30.3
resolution: "react-router@npm:6.30.3"
dependencies:
@@ -48046,7 +48046,7 @@ __metadata:
history: "npm:^5.0.0"
react: "npm:^18.0.2"
react-dom: "npm:^18.0.2"
react-router-dom: "npm:^6.3.0"
react-router-dom: "npm:^6.30.2"
react-use: "npm:^17.2.4"
languageName: unknown
linkType: soft