From a84ff5758e6c98739b14b975bb4db937c51e7fba Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Tue, 19 Nov 2024 13:53:27 +0200 Subject: [PATCH 01/60] change the padding based on the canvas width --- app/components/Input.tsx | 1 - app/components/code-graph.tsx | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/app/components/Input.tsx b/app/components/Input.tsx index d314fe8e..52619894 100644 --- a/app/components/Input.tsx +++ b/app/components/Input.tsx @@ -163,7 +163,6 @@ export default function Input({ value, onValueChange, handelSubmit, graph, icon, onMouseEnter={() => setSelectedOption(index)} onMouseLeave={() => setSelectedOption(-1)} onClick={() => { - debugger onValueChange({ name: option.properties.name, id: option.id }) handelSubmit && handelSubmit(option) setOpen(false) diff --git a/app/components/code-graph.tsx b/app/components/code-graph.tsx index c70e9b18..f2379687 100644 --- a/app/components/code-graph.tsx +++ b/app/components/code-graph.tsx @@ -336,7 +336,7 @@ export function CodeGraph({ } chartNode.select() - const layout = { ...LAYOUT, padding: 250 } + const layout = { ...LAYOUT, padding: chart.width() / 5 } chartNode.layout(layout).run() setSearchNode(n) } From 3f2fe4fe7126cbde0fbc4c83bca5341a8b9aa4a0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Dec 2024 02:29:35 +0000 Subject: [PATCH 02/60] Bump @radix-ui/react-tooltip from 1.1.2 to 1.1.4 Bumps [@radix-ui/react-tooltip](https://github.com/radix-ui/primitives) from 1.1.2 to 1.1.4. - [Changelog](https://github.com/radix-ui/primitives/blob/main/release-process.md) - [Commits](https://github.com/radix-ui/primitives/commits) --- updated-dependencies: - dependency-name: "@radix-ui/react-tooltip" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 401 ++++------------------------------------------ package.json | 2 +- 2 files changed, 29 insertions(+), 374 deletions(-) diff --git a/package-lock.json b/package-lock.json index fc79f9b7..ed52c15a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "@radix-ui/react-select": "^2.1.2", "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-toast": "^1.2.2", - "@radix-ui/react-tooltip": "^1.0.7", + "@radix-ui/react-tooltip": "^1.1.4", "autoprefixer": "^10.4.20", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", @@ -1055,29 +1055,6 @@ } } }, - "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-presence": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", - "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-use-layout-effect": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-collection": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz", @@ -1183,78 +1160,6 @@ } } }, - "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", - "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", - "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-escape-keydown": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-portal": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", - "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", - "dependencies": { - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-layout-effect": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-presence": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", - "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-use-layout-effect": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-direction": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", @@ -1271,9 +1176,9 @@ } }, "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.0.tgz", - "integrity": "sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", + "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.0", @@ -1422,78 +1327,6 @@ } } }, - "node_modules/@radix-ui/react-hover-card/node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", - "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", - "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-escape-keydown": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-hover-card/node_modules/@radix-ui/react-portal": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", - "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", - "dependencies": { - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-layout-effect": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-hover-card/node_modules/@radix-ui/react-presence": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", - "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-use-layout-effect": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-id": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", @@ -1565,78 +1398,6 @@ } } }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", - "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", - "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-escape-keydown": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-portal": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", - "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", - "dependencies": { - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-layout-effect": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-presence": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", - "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-use-layout-effect": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-popper": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", @@ -1670,9 +1431,9 @@ } }, "node_modules/@radix-ui/react-portal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.1.tgz", - "integrity": "sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", + "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0", @@ -1694,9 +1455,9 @@ } }, "node_modules/@radix-ui/react-presence": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.0.tgz", - "integrity": "sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", + "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", @@ -1849,55 +1610,6 @@ } } }, - "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", - "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", - "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-escape-keydown": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-portal": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", - "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", - "dependencies": { - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-layout-effect": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", @@ -1963,39 +1675,24 @@ } } }, - "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", - "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", + "node_modules/@radix-ui/react-tooltip": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.1.4.tgz", + "integrity": "sha512-QpObUH/ZlpaO4YgHSaYzrLO2VuO+ZBFFgGzjMUPwtiYnAzzNNDPJeEGRrT7qNOrWm/Jr08M1vlp+vTHtnSQ0Uw==", + "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-popper": "1.2.0", + "@radix-ui/react-portal": "1.1.2", + "@radix-ui/react-presence": "1.1.1", "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-escape-keydown": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-portal": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", - "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", - "dependencies": { - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-layout-effect": "1.1.0" + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-visually-hidden": "1.1.0" }, "peerDependencies": { "@types/react": "*", @@ -2012,60 +1709,18 @@ } } }, - "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-presence": { + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-context": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", - "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-use-layout-effect": "1.1.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-tooltip": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.1.2.tgz", - "integrity": "sha512-9XRsLwe6Yb9B/tlnYCPVUd/TFS4J7HuOZW345DCeC6vKIxQGMZdx21RK4VoZauPD5frgkXTYVS5y90L+3YBn4w==", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", - "@radix-ui/react-dismissable-layer": "1.1.0", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-popper": "1.2.0", - "@radix-ui/react-portal": "1.1.1", - "@radix-ui/react-presence": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-slot": "1.1.0", - "@radix-ui/react-use-controllable-state": "1.1.0", - "@radix-ui/react-visually-hidden": "1.1.0" - }, "peerDependencies": { "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true - }, - "@types/react-dom": { - "optional": true } } }, diff --git a/package.json b/package.json index a3f9d530..b34330c1 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "@radix-ui/react-select": "^2.1.2", "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-toast": "^1.2.2", - "@radix-ui/react-tooltip": "^1.0.7", + "@radix-ui/react-tooltip": "^1.1.4", "autoprefixer": "^10.4.20", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", From 17d0b192a92e3d5b4146f75cce3afca582b526a6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Dec 2024 02:29:52 +0000 Subject: [PATCH 03/60] Bump tailwind-merge from 2.5.0 to 2.5.5 Bumps [tailwind-merge](https://github.com/dcastil/tailwind-merge) from 2.5.0 to 2.5.5. - [Release notes](https://github.com/dcastil/tailwind-merge/releases) - [Commits](https://github.com/dcastil/tailwind-merge/compare/v2.5.0...v2.5.5) --- updated-dependencies: - dependency-name: tailwind-merge dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index fc79f9b7..fadd2a15 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,7 +30,7 @@ "react-resizable-panels": "^2.0.20", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", - "tailwind-merge": "^2.2.0", + "tailwind-merge": "^2.5.5", "tailwindcss-animate": "^1.0.7", "web-tree-sitter": "^0.22.6" }, @@ -6970,9 +6970,9 @@ } }, "node_modules/tailwind-merge": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.0.tgz", - "integrity": "sha512-a6Q/isR5XAo9IR7Hjh80BQDkn8PG9ONJpSO/U3vGzdKyKG125lPHNXdiPfeQ5X0EOG0qKlS/0qnxdBYkLlD6tA==", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.5.tgz", + "integrity": "sha512-0LXunzzAZzo0tEPxV3I297ffKZPlKDrjj7NXphC8V5ak9yHC5zRmxnOe2m/Rd/7ivsOMJe3JZ2JVocoDdQTRBA==", "license": "MIT", "funding": { "type": "github", diff --git a/package.json b/package.json index a3f9d530..ec4ce2b9 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "react-resizable-panels": "^2.0.20", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", - "tailwind-merge": "^2.2.0", + "tailwind-merge": "^2.5.5", "tailwindcss-animate": "^1.0.7", "web-tree-sitter": "^0.22.6" }, From 33de17782128026c672814bfbcd290d327592d51 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Dec 2024 02:29:58 +0000 Subject: [PATCH 04/60] Bump eslint from 9.15.0 to 9.16.0 Bumps [eslint](https://github.com/eslint/eslint) from 9.15.0 to 9.16.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v9.15.0...v9.16.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index fc79f9b7..3aefe48c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -157,9 +157,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.15.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.15.0.tgz", - "integrity": "sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==", + "version": "9.16.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.16.0.tgz", + "integrity": "sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==", "dev": true, "license": "MIT", "engines": { @@ -3664,9 +3664,9 @@ } }, "node_modules/eslint": { - "version": "9.15.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.15.0.tgz", - "integrity": "sha512-7CrWySmIibCgT1Os28lUU6upBshZ+GxybLOrmRzi08kS8MBuO8QA7pXEgYgY5W8vK3e74xv0lpjo9DbaGU9Rkw==", + "version": "9.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.16.0.tgz", + "integrity": "sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA==", "dev": true, "license": "MIT", "dependencies": { @@ -3675,7 +3675,7 @@ "@eslint/config-array": "^0.19.0", "@eslint/core": "^0.9.0", "@eslint/eslintrc": "^3.2.0", - "@eslint/js": "9.15.0", + "@eslint/js": "9.16.0", "@eslint/plugin-kit": "^0.2.3", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", From 7f1b02a0c7f24678e07b9e06d917ba8c03601b13 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Dec 2024 02:30:08 +0000 Subject: [PATCH 05/60] Bump class-variance-authority from 0.7.0 to 0.7.1 Bumps [class-variance-authority](https://github.com/joe-bell/cva) from 0.7.0 to 0.7.1. - [Release notes](https://github.com/joe-bell/cva/releases) - [Commits](https://github.com/joe-bell/cva/compare/v0.7.0...v0.7.1) --- updated-dependencies: - dependency-name: class-variance-authority dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 21 ++++++--------------- package.json | 2 +- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index fc79f9b7..cdd3bd0f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@radix-ui/react-toast": "^1.2.2", "@radix-ui/react-tooltip": "^1.0.7", "autoprefixer": "^10.4.20", - "class-variance-authority": "^0.7.0", + "class-variance-authority": "^0.7.1", "clsx": "^2.1.0", "cytoscape": "^3.30.4", "cytoscape-fcose": "^2.2.0", @@ -3130,24 +3130,15 @@ } }, "node_modules/class-variance-authority": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.0.tgz", - "integrity": "sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", "license": "Apache-2.0", "dependencies": { - "clsx": "2.0.0" + "clsx": "^2.1.1" }, "funding": { - "url": "https://joebell.co.uk" - } - }, - "node_modules/class-variance-authority/node_modules/clsx": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", - "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", - "license": "MIT", - "engines": { - "node": ">=6" + "url": "https://polar.sh/cva" } }, "node_modules/client-only": { diff --git a/package.json b/package.json index a3f9d530..79bddefa 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "@radix-ui/react-toast": "^1.2.2", "@radix-ui/react-tooltip": "^1.0.7", "autoprefixer": "^10.4.20", - "class-variance-authority": "^0.7.0", + "class-variance-authority": "^0.7.1", "clsx": "^2.1.0", "cytoscape": "^3.30.4", "cytoscape-fcose": "^2.2.0", From 52d9cedbc230f718e1d65542ee47849a91d96593 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Dec 2024 02:30:19 +0000 Subject: [PATCH 06/60] Bump @playwright/test from 1.48.2 to 1.49.0 Bumps [@playwright/test](https://github.com/microsoft/playwright) from 1.48.2 to 1.49.0. - [Release notes](https://github.com/microsoft/playwright/releases) - [Commits](https://github.com/microsoft/playwright/compare/v1.48.2...v1.49.0) --- updated-dependencies: - dependency-name: "@playwright/test" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 28 ++++++++++++++++------------ package.json | 2 +- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index fc79f9b7..cb76a6ef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,7 +35,7 @@ "web-tree-sitter": "^0.22.6" }, "devDependencies": { - "@playwright/test": "^1.48.2", + "@playwright/test": "^1.49.0", "@types/cytoscape-fcose": "^2.2.4", "@types/node": "^22", "@types/react": "^18", @@ -963,12 +963,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.48.2", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.48.2.tgz", - "integrity": "sha512-54w1xCWfXuax7dz4W2M9uw0gDyh+ti/0K/MxcCUxChFh37kkdxPdfZDw5QBbuPUJHr1CiHJ1hXgSs+GgeQc5Zw==", + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.49.0.tgz", + "integrity": "sha512-DMulbwQURa8rNIQrf94+jPJQ4FmOVdpE5ZppRNvWVjvhC+6sOeo28r8MgIpQRYouXRtt/FCCXU7zn20jnHR4Qw==", "devOptional": true, + "license": "Apache-2.0", "dependencies": { - "playwright": "1.48.2" + "playwright": "1.49.0" }, "bin": { "playwright": "cli.js" @@ -5869,12 +5870,13 @@ } }, "node_modules/playwright": { - "version": "1.48.2", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.48.2.tgz", - "integrity": "sha512-NjYvYgp4BPmiwfe31j4gHLa3J7bD2WiBz8Lk2RoSsmX38SVIARZ18VYjxLjAcDsAhA+F4iSEXTSGgjua0rrlgQ==", + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.49.0.tgz", + "integrity": "sha512-eKpmys0UFDnfNb3vfsf8Vx2LEOtflgRebl0Im2eQQnYMA4Aqd+Zw8bEOB+7ZKvN76901mRnqdsiOGKxzVTbi7A==", "devOptional": true, + "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.48.2" + "playwright-core": "1.49.0" }, "bin": { "playwright": "cli.js" @@ -5887,10 +5889,11 @@ } }, "node_modules/playwright-core": { - "version": "1.48.2", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.48.2.tgz", - "integrity": "sha512-sjjw+qrLFlriJo64du+EK0kJgZzoQPsabGF4lBvsid+3CNIZIYLgnMj9V6JY5VhM2Peh20DJWIVpVljLLnlawA==", + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.49.0.tgz", + "integrity": "sha512-R+3KKTQF3npy5GTiKH/T+kdhoJfJojjHESR1YEWhYuEKRVfVaxH3+4+GvXE5xyCngCxhxnykk0Vlah9v8fs3jA==", "devOptional": true, + "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, @@ -5904,6 +5907,7 @@ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" diff --git a/package.json b/package.json index a3f9d530..f52f03bd 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "web-tree-sitter": "^0.22.6" }, "devDependencies": { - "@playwright/test": "^1.48.2", + "@playwright/test": "^1.49.0", "@types/cytoscape-fcose": "^2.2.4", "@types/node": "^22", "@types/react": "^18", From 2e7e11c1ef0d207134f6e232d77895d9f97d8590 Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Mon, 2 Dec 2024 11:57:44 +0200 Subject: [PATCH 07/60] fetch options when select opens after 30 sec that he was close expat for the first time --- app/components/code-graph.tsx | 3 +++ app/components/combobox.tsx | 45 +++++++++++++++++++++++++++++++++-- app/page.tsx | 23 +----------------- 3 files changed, 47 insertions(+), 24 deletions(-) diff --git a/app/components/code-graph.tsx b/app/components/code-graph.tsx index 7034a6a7..7f4b8376 100644 --- a/app/components/code-graph.tsx +++ b/app/components/code-graph.tsx @@ -21,6 +21,7 @@ interface Props { onFetchGraph: (graphName: string) => void, onFetchNode: (nodeIds: string[]) => Promise, options: string[] + setOptions: Dispatch> isShowPath: boolean setPath: Dispatch> chartRef: MutableRefObject @@ -119,6 +120,7 @@ export function CodeGraph({ onFetchGraph, onFetchNode, options, + setOptions, isShowPath, setPath, chartRef, @@ -397,6 +399,7 @@ export function CodeGraph({
diff --git a/app/components/combobox.tsx b/app/components/combobox.tsx index 59020d6c..354fee3f 100644 --- a/app/components/combobox.tsx +++ b/app/components/combobox.tsx @@ -1,15 +1,56 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; +import { toast } from "@/components/ui/use-toast"; +import { useEffect, useState } from "react"; interface Props { options: string[] + setOptions: (options: string[]) => void selectedValue: string onSelectedValue: (value: string) => void } -export default function Combobox({ options, selectedValue, onSelectedValue }: Props) { +export default function Combobox({ options, setOptions, selectedValue, onSelectedValue }: Props) { + + const [open, setOpen] = useState(false) + const [lastOpened, setLastOpened] = useState(); + + const fetchOptions = async () => { + const result = await fetch(`/api/repo`, { + method: 'GET', + }) + + if (!result.ok) { + toast({ + variant: "destructive", + title: "Uh oh! Something went wrong.", + description: await result.text(), + }) + return + } + + const json = await result.json() + setOptions(json.result) + } + + useEffect(() => { + fetchOptions() + }, []) + + useEffect(() => { + if (!open) return + + const now = Date.now(); + + if (lastOpened && now - lastOpened < 30000) return; + + setLastOpened(now); + + fetchOptions() + }, [open]) + return ( - diff --git a/app/page.tsx b/app/page.tsx index 4cf6fc23..9b8393d1 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -65,28 +65,6 @@ export default function Home() { const [isSubmit, setIsSubmit] = useState(false); const chartRef = useRef(null) - useEffect(() => { - const run = async () => { - const result = await fetch(`/api/repo`, { - method: 'GET', - }) - - if (!result.ok) { - toast({ - variant: "destructive", - title: "Uh oh! Something went wrong.", - description: await result.text(), - }) - return - } - - const json = await result.json() - setOptions(json.result) - } - - run() - }, []) - async function onCreateRepo(e: React.FormEvent) { e.preventDefault() @@ -279,6 +257,7 @@ export default function Home() { Date: Mon, 2 Dec 2024 14:01:03 +0200 Subject: [PATCH 08/60] commit --- app/components/chat.tsx | 183 +---- app/components/code-graph.tsx | 456 +++-------- app/components/commitList.tsx | 288 +++---- app/components/dataPanel.tsx | 13 +- app/components/elementMenu.tsx | 32 +- app/components/elementTooltip.tsx | 30 - app/components/graphView.tsx | 194 +++++ app/components/model.ts | 115 ++- app/components/toolbar.tsx | 20 +- app/page.tsx | 17 +- package-lock.json | 1213 ++++++++++++++++++++++++++++- package.json | 2 + 12 files changed, 1824 insertions(+), 739 deletions(-) delete mode 100644 app/components/elementTooltip.tsx create mode 100644 app/components/graphView.tsx diff --git a/app/components/chat.tsx b/app/components/chat.tsx index f3a92248..d27098c4 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -1,12 +1,11 @@ import { toast } from "@/components/ui/use-toast"; -import { Dispatch, FormEvent, MutableRefObject, SetStateAction, useEffect, useRef, useState } from "react"; +import { Dispatch, FormEvent, SetStateAction, useEffect, useRef, useState } from "react"; import Image from "next/image"; import { AlignLeft, ArrowRight, ChevronDown, Lightbulb, Undo2 } from "lucide-react"; import { Path } from "../page"; import Input from "./Input"; -import { Graph } from "./model"; +import { Graph, GraphData, Link } from "./model"; import { cn } from "@/lib/utils"; -import { LAYOUT } from "./code-graph"; import { TypeAnimation } from "react-type-animation"; enum MessageTypes { @@ -29,10 +28,10 @@ interface Props { path: Path | undefined setPath: Dispatch> graph: Graph - chartRef: MutableRefObject selectedPathId: string | undefined - isPath: boolean - setIsPath: (isPathResponse: boolean) => void + isPathResponse: boolean | undefined + setIsPathResponse: (isPathResponse: boolean | undefined) => void + setData: Dispatch> } const RemoveLastPath = (messages: Message[]) => { @@ -46,7 +45,7 @@ const RemoveLastPath = (messages: Message[]) => { return messages } -export function Chat({ repo, path, setPath, graph, chartRef, selectedPathId, isPath, setIsPath }: Props) { +export function Chat({ repo, path, setPath, graph, selectedPathId, isPathResponse, setIsPathResponse, setData }: Props) { // Holds the messages in the chat const [messages, setMessages] = useState([]); @@ -59,8 +58,6 @@ export function Chat({ repo, path, setPath, graph, chartRef, selectedPathId, isP // Holds the user input while typing const [query, setQuery] = useState(''); - const [isPathResponse, setIsPathResponse] = useState(false); - const [tipOpen, setTipOpen] = useState(false); // A reference to the chat container to allow scrolling to the bottom @@ -89,58 +86,29 @@ export function Chat({ repo, path, setPath, graph, chartRef, selectedPathId, isP }, [path]) useEffect(() => { - if (isPath) return + if (isPathResponse || isPathResponse === undefined) return setIsPathResponse(false) setSelectedPath(undefined) setPaths([]) - }, [isPath]) - - useEffect(() => { - setIsPath(isPathResponse) }, [isPathResponse]) const handelSetSelectedPath = (p: { nodes: any[], edges: any[] }) => { - const chart = chartRef.current - - if (!chart) return - setSelectedPath(prev => { if (prev) { if (isPathResponse && paths.some((path) => [...path.nodes, ...path.edges].every((e: any) => [...prev.nodes, ...prev.edges].some((el: any) => el.id === e.id)))) { - chart.edges().forEach(e => { - const id = e.id() - - if (prev.edges.some(el => el.id == id) && !p.edges.some(el => el.id == id)) { - e.style({ - width: 0.5, - "line-style": "dashed", - "line-color": "#FF66B3", - "arrow-scale": 0.3, - "target-arrow-color": "#FF66B3", - }) + graph.getElements().forEach(edge => { + const id = Number(edge.id) + + if (prev.edges.some(el => el.id === id) && !p.edges.some(el => el.id === id)) { + edge.isPathSelected = false } }) } else { - const elements = chart.elements().filter(e => [...prev.edges, ...prev.nodes].some(el => el.id == e.id() && ![...p.nodes, ...p.edges].some(ele => ele.id == e.id()))).removeStyle() - if (isPathResponse) { + const elements = graph.getElements().filter(e => [...prev.edges, ...prev.nodes].some(el => el.id === Number(e.id) && ![...p.nodes, ...p.edges].some(ele => ele.id === Number(e.id)))) + if (isPathResponse || isPathResponse === undefined) { elements.forEach(e => { - if (e.isNode()) { - e.style({ - "border-width": 0.5, - "color": "gray", - "border-color": "black", - "background-color": "gray", - "opacity": 0.5 - }); - } - - if (e.isEdge()) { - e.style({ - "line-color": "gray", - "target-arrow-color": "gray", - "opacity": 0.5, - }); - } + e.isPath = false + e.isPathSelected = false }) } } @@ -149,46 +117,21 @@ export function Chat({ repo, path, setPath, graph, chartRef, selectedPathId, isP }) if (isPathResponse && paths.some((path) => [...path.nodes, ...path.edges].every((e: any) => [...p.nodes, ...p.edges].some((el: any) => el.id === e.id)))) { - chart.edges().forEach(e => { - const id = e.id() - - if (p.edges.some(el => el.id == id)) { - e.style({ - width: 1, - "line-style": "solid", - "line-color": "#FF66B3", - "arrow-scale": 0.6, - "target-arrow-color": "#FF66B3", - }) + graph.Elements.links.forEach(e => { + if (p.edges.some(el => el.id === e.id)) { + e.isPathSelected = true } }) - chart.elements().filter(el => [...p.nodes, ...p.edges].some(e => e.id == el.id())).layout(LAYOUT).run(); } else { - chart.elements().filter(el => [...p.nodes, ...p.edges].some(e => e.id == el.id())).forEach(el => { - if (el.id() == p.nodes[0].id || el.id() == p.nodes[p.nodes.length - 1].id) { - el.removeStyle().style({ - "border-width": 1, - "border-color": "#FF66B3", - "border-opacity": 1, - }); - } else if (el.isNode()) { - el.removeStyle().style({ - "border-width": 0.5, - "border-color": "#FF66B3", - "border-opacity": 1, - }); - } - if (el.isEdge()) { - el.removeStyle().style({ - width: 1, - "line-style": "solid", - "line-color": "#FF66B3", - "arrow-scale": 0.6, - "target-arrow-color": "#FF66B3", - }) + graph.getElements().filter(el => [...p.nodes, ...p.edges].some(e => e.id === Number(el.id))).forEach(el => { + if ((Number(el.id) === p.nodes[0].id || Number(el.id) === p.nodes[p.nodes.length - 1].id) || "source" in el) { + el.isPathSelected = true + } else { + el.isPath = true } - }).layout(LAYOUT).run(); + }); } + setData({ ...graph.Elements }) } // A function that handles the change event of the url input box @@ -252,9 +195,7 @@ export function Chat({ repo, path, setPath, graph, chartRef, selectedPathId, isP const handelSubmit = async () => { setSelectedPath(undefined) - const chart = chartRef?.current - - if (!chart || !path?.start?.id || !path.end?.id) return + if (!path?.start?.id || !path.end?.id) return const result = await fetch(`/api/repo/${repo}/${path.start.id}/?targetId=${path.end.id}`, { method: 'POST' @@ -280,62 +221,13 @@ export function Chat({ repo, path, setPath, graph, chartRef, selectedPathId, isP } const formattedPaths: { nodes: any[], edges: any[] }[] = json.result.paths.map((p: any) => ({ nodes: p.filter((node: any, i: number) => i % 2 === 0), edges: p.filter((edge: any, i: number) => i % 2 !== 0) })) - chart.add(formattedPaths.flatMap((p: any) => graph.extend(p, false, path))) - formattedPaths.forEach(p => p.edges.forEach(e => e.id = `_${e.id}`)) - graph.Elements.forEach((element: any) => { - const { id } = element.data - const e = chart.elements().filter(el => el.id() == id) - if (id == path.start?.id || id == path.end?.id) { - e.style({ - 'border-width': 1, - 'border-color': '#FF66B3', - 'border-opacity': 1, - }); - } else if (formattedPaths.some((p: any) => [...p.nodes, ...p.edges].some((el: any) => el.id == id))) { - if (e.isNode()) { - e.style({ - 'border-width': 0.5, - 'border-color': '#FF66B3', - 'border-opacity': 1, - }); - } - - if (e.isEdge()) { - e.style({ - "line-style": "dashed", - "line-color": "#FF66B3", - "target-arrow-color": "#FF66B3", - "opacity": 1 - }); - } - } else { - if (e.isNode()) { - e.style({ - "border-width": 0.5, - "color": "gray", - "border-color": "black", - "background-color": "gray", - "opacity": 0.5 - }); - } + formattedPaths.forEach((p: any) => graph.extend(p, false, path)) - if (e.isEdge()) { - e.style({ - "line-color": "gray", - "target-arrow-color": "gray", - "opacity": 0.5, - }); - } - } - }) - const elements = chart.elements().filter((element) => { - return formattedPaths.some(p => [...p.nodes, ...p.edges].some((node) => node.id == element.id())) - }); - elements.layout(LAYOUT).run() setPaths(formattedPaths) - setMessages(prev => [...prev.slice(0, -2), { type: MessageTypes.PathResponse, paths: formattedPaths }]) + setMessages(prev => [...RemoveLastPath(prev), { type: MessageTypes.PathResponse, paths: formattedPaths }]) setPath(undefined) setIsPathResponse(true) + setData({ ...graph.Elements }) } const getTip = () => @@ -344,14 +236,13 @@ export function Chat({ repo, path, setPath, graph, chartRef, selectedPathId, isP className="Tip" onClick={() => { setTipOpen(false) - setPath({}) setMessages(prev => [ ...RemoveLastPath(prev), { type: MessageTypes.Query, text: "Create a path" }, ]) if (isPathResponse) { - chartRef.current?.elements().removeStyle().layout(LAYOUT).run() + // chartRef.current?.elements().removeStyle().layout(LAYOUT).run() setIsPathResponse(false) } @@ -359,7 +250,10 @@ export function Chat({ repo, path, setPath, graph, chartRef, selectedPathId, isP type: MessageTypes.Response, text: "Please select a starting point and the end point. Select or press relevant item on the graph" }]), 300) - setTimeout(() => setMessages(prev => [...prev, { type: MessageTypes.Path }]), 4000) + setTimeout(() => { + setMessages(prev => [...prev, { type: MessageTypes.Path }]) + setPath({}) + }, 4000) }} > @@ -436,9 +330,12 @@ export function Chat({ repo, path, setPath, graph, chartRef, selectedPathId, isP key={i} className={cn("flex text-wrap border p-2 gap-2 rounded-md", p.nodes.length === selectedPath?.nodes.length && selectedPath?.nodes.every(node => p?.nodes.some((n) => n.id === node.id)) && "border-[#FF66B3] bg-[#FFF0F7]")} onClick={() => { - if (selectedPath?.nodes.every(node => p?.nodes.some((n) => n.id === node.id))) return + debugger + if (selectedPath?.nodes.every(node => p?.nodes.some((n) => n.id === node.id)) && selectedPath.nodes.length === p.nodes.length) return + if (!isPathResponse) { + setIsPathResponse(undefined) + } handelSetSelectedPath(p) - setIsPath(true) }} >

#{i}

diff --git a/app/components/code-graph.tsx b/app/components/code-graph.tsx index 40408e51..f6f8194c 100644 --- a/app/components/code-graph.tsx +++ b/app/components/code-graph.tsx @@ -1,120 +1,40 @@ -import CytoscapeComponent from 'react-cytoscapejs' -import { Dispatch, MutableRefObject, SetStateAction, useContext, useEffect, useRef, useState } from "react"; -import { Node } from "./model"; +import { Dispatch, RefObject, SetStateAction, useContext, useEffect, useRef, useState } from "react"; +import { GraphData, Node } from "./model"; import { GraphContext } from "./provider"; -import cytoscape, { ElementDefinition, EventObject, Position } from 'cytoscape'; -import fcose from 'cytoscape-fcose'; import { Toolbar } from "./toolbar"; import { Labels } from "./labels"; import { GitFork, Search, X } from "lucide-react"; import ElementMenu from "./elementMenu"; -import ElementTooltip from "./elementTooltip"; import Combobox from "./combobox"; import { toast } from '@/components/ui/use-toast'; import { Path, PathNode } from '../page'; import Input from './Input'; -import CommitList from './commitList'; +// import CommitList from './commitList'; import { Checkbox } from '@/components/ui/checkbox'; +import dynamic from 'next/dynamic'; +import { Position } from "./graphView"; + +const GraphView = dynamic(() => import('./graphView')); interface Props { + data: GraphData, + setData: Dispatch>, onFetchGraph: (graphName: string) => void, - onFetchNode: (nodeIds: string[]) => Promise, + onFetchNode: (nodeIds: string[]) => Promise, options: string[] isShowPath: boolean setPath: Dispatch> - chartRef: MutableRefObject + chartRef: RefObject selectedValue: string selectedPathId: string | undefined setSelectedPathId: (selectedPathId: string) => void - isPathResponse: boolean - setIsPathResponse: Dispatch> -} - -// The stylesheet for the graph -const STYLESHEET: cytoscape.Stylesheet[] = [ - { - selector: "core", - style: { - 'active-bg-size': 0, // hide gray circle when panning - // All of the following styles are meaningless and are specified - // to satisfy the linter... - 'active-bg-color': 'blue', - 'active-bg-opacity': 0.3, - "selection-box-border-color": 'gray', - "selection-box-border-width": 3, - "selection-box-opacity": 0.5, - "selection-box-color": 'gray', - "outside-texture-bg-color": 'blue', - "outside-texture-bg-opacity": 1, - }, - }, - { - selector: "node", - style: { - label: "data(name)", - "color": "black", - "text-valign": "center", - "text-wrap": "ellipsis", - "text-max-width": "10rem", - shape: "ellipse", - height: "15rem", - width: "15rem", - "border-width": 0.3, - "border-color": "black", - "border-opacity": 0.5, - "background-color": "data(color)", - "font-size": "3rem", - "overlay-padding": "1rem", - }, - }, - { - selector: "node:active", - style: { - "overlay-opacity": 0, // hide gray box around active node - }, - }, - { - selector: "node:selected", - style: { - 'border-width': 0.5, - 'border-color': 'black', - 'border-opacity': 1, - }, - }, - { - selector: "edge", - style: { - width: 0.5, - "line-color": "#ccc", - "arrow-scale": 0.3, - "target-arrow-shape": "triangle", - "target-arrow-color": "#ccc", - label: "data(label)", - 'curve-style': 'straight', - "text-background-color": "#ffffff", - "text-background-opacity": 1, - "font-size": "3", - "overlay-padding": "2px", - }, - }, - { - selector: "edge:active", - style: { - "overlay-opacity": 0, // hide gray box around active node - }, - } -] - -cytoscape.use(fcose); - -export const LAYOUT = { - name: "fcose", - fit: true, - padding: 80, - avoidOverlap: true, + isPathResponse: boolean | undefined + setIsPathResponse: Dispatch> } export function CodeGraph({ + data, + setData, onFetchGraph, onFetchNode, options, @@ -130,13 +50,11 @@ export function CodeGraph({ let graph = useContext(GraphContext) + const [url, setURL] = useState(""); const [selectedObj, setSelectedObj] = useState(); const [selectedObjects, setSelectedObjects] = useState([]); - const [isSelectedObj, setIsSelectedObj] = useState(""); - const [tooltipLabel, setTooltipLabel] = useState(); const [position, setPosition] = useState(); - const [tooltipPosition, setTooltipPosition] = useState(); const [graphName, setGraphName] = useState(""); const [searchNode, setSearchNode] = useState({}); const [commits, setCommits] = useState([]); @@ -148,15 +66,25 @@ export function CodeGraph({ const containerRef = useRef(null); useEffect(() => { - setContainerWidth(containerRef.current?.clientWidth || 0) - }, [containerRef.current?.clientWidth]) + if (containerRef.current) { + setContainerWidth(containerRef.current.clientWidth); + } + }, [containerRef.current]); useEffect(() => { - const handleKeyDown = (event: KeyboardEvent) => { - if (!isSelectedObj && selectedObj && selectedObjects.length === 0) return + setData({ ...graph.Elements }) + }, [graph]) + + useEffect(() => { + if (!selectedValue) return + handelSelectedValue(selectedValue) + }, [selectedValue]) + useEffect(() => { + const handleKeyDown = (event: KeyboardEvent) => { if (event.key === 'Delete') { - handelRemove(selectedObjects.length > 0 ? selectedObjects.map(obj => Number(obj.id)) : [Number(isSelectedObj || selectedObj?.id)]); + if (selectedObj && selectedObjects.length === 0) return + handelRemove([...selectedObjects.map(obj => obj.id), selectedObj?.id || ""]); } }; @@ -165,7 +93,7 @@ export function CodeGraph({ return () => { document.removeEventListener('keydown', handleKeyDown); }; - }, [selectedObjects, selectedObj, isSelectedObj]); + }, [selectedObjects, selectedObj]); async function fetchCount() { const result = await fetch(`/api/repo/${graphName}`, { @@ -188,10 +116,6 @@ export function CodeGraph({ setURL(json.result.info.repo_url) } - useEffect(() => { - if (!selectedValue) return - handelSelectedValue(selectedValue) - }, [selectedValue]) useEffect(() => { if (!graphName) return @@ -230,108 +154,50 @@ export function CodeGraph({ } function onCategoryClick(name: string, show: boolean) { - let chart = chartRef.current - if (chart) { - let elements = chart.elements(`node[category = "${name}"]`) - - graph.Categories.forEach((category) => { - if (category.name === name) { - category.show = show - } - }) - - if (show) { - elements.style({ display: 'element' }) - } else { - elements.style({ display: 'none' }) - } - chart.elements().layout(LAYOUT).run(); - } - } - - const deleteNeighbors = (nodes: Node[], chart: cytoscape.Core) => { - const neighbors = chart.elements(nodes.map(node => `#${node.id}`).join(',')).outgoers() - neighbors.forEach((n) => { - const id = n.id() - const index = graph.Elements.findIndex(e => e.data.id === id); - const element = graph.Elements[index] + const elements: Node[] = [] - if (index === -1 || !element.data.collapsed) return + graph.Categories.find(c => c.name === name)!.show = show - const type = "category" in element.data - - if (element.data.expand) { - deleteNeighbors([element.data], chart) - } - - graph.Elements.splice(index, 1); - - if (type) { - graph.NodesMap.delete(Number(id)) - } else { - graph.EdgesMap.delete(Number(id.split('_')[1])) + graph.Elements.nodes.forEach(node => { + if (node.category === name) { + node.visibility = show + elements.push(node) } - - chart.remove(`#${id}`) }) - } - - const handleDoubleTap = async (evt?: EventObject) => { - - const chart = chartRef.current - - if (!chart) return - - let node: Node - if (evt) { - const { target } = evt - target.unselect() - node = target.json().data - } else { - node = selectedObj! - } + graph.visibleLinks() - const graphNode = graph.Elements.find(e => e.data.id === node.id) + setData({ ...graph.Elements }) + } - if (!graphNode) return + const deleteNeighbors = (nodes: Node[]) => { + if (nodes.length === 0) return; - const expand = !graphNode.data.expand + graph.Elements = { + nodes: graph.Elements.nodes.map(node => { + const isTarget = graph.Elements.links.some(link => link.target.id === node.id && nodes.some(n => n.id === link.source.id)); - if (expand) { - const elements = await onFetchNode([node.id]) + if (!isTarget || !node.collapsed) return node - if (elements.length === 0) { - toast({ - title: `No neighbors found`, - description: `No neighbors found`, - }) - return - } + if (node.expand) { + node.expand = false + deleteNeighbors([node]) + } - chart.add(elements); - } else { - deleteNeighbors([node], chart); + graph.NodesMap.delete(Number(node.id)) + }).filter(node => node !== undefined), + links: graph.Elements.links } - const element = chart.elements(`#${node.id}`) - element.data('expand', expand) - graphNode.data.expand = expand - - setSelectedObj(undefined) - chart.elements().layout(LAYOUT).run(); + graph.removeLinks() } const handleExpand = async (nodes: Node[], expand: boolean) => { - const chart = chartRef.current - - if (!chart) return - if (expand) { const elements = await onFetchNode(nodes.map(n => n.id)) - if (elements.length === 0) { + if (elements.nodes.length === 0) { toast({ title: `No neighbors found`, description: `No neighbors found`, @@ -339,56 +205,59 @@ export function CodeGraph({ return } - chart.add(elements); - chart.elements().layout(LAYOUT).run(); + graph.Elements = { + nodes: [...graph.Elements.nodes, ...elements.nodes], + links: [...graph.Elements.links, ...elements.links] + } } else { - const deleteNodes = nodes.filter(n => n.expand === true) + const deleteNodes = nodes.filter(n => n.expand) if (deleteNodes.length > 0) { - deleteNeighbors(deleteNodes, chart); - chart.elements().layout(LAYOUT).run(); + deleteNeighbors(deleteNodes); } } nodes.forEach((node) => { - const graphNode = graph.Elements.find(e => e.data.id === node.id) - const element = chart.elements(`#${node.id}`) - - if (!graphNode) return - - element.data("expand", expand) - graphNode.data.expand = expand + node.expand = expand }) setSelectedObj(undefined) + + setData({ ...graph.Elements }) } const handelSearchSubmit = (node: any) => { - const chart = chartRef.current - - if (!chart) return - const n = { name: node.properties.name, id: node.id } - let chartNode = chart.elements(`node[id = "${n.id}"]`) + let chartNode = graph.Elements.nodes.find(n => n.id == node.id) - if (chartNode.length === 0) { - const [newNode] = graph.extend({ nodes: [node], edges: [] }) - chartNode = chart.add(newNode) + if (!chartNode?.visible) { + if (!chartNode) { + chartNode = graph.extend({ nodes: [node], edges: [] }).nodes[0] + } else { + chartNode.visibility = true + } + graph.visibleLinks([chartNode.id], true) } - chartNode.select() - chartNode.style({ display: "element" }) - setIsSelectedObj(String(n.id)) - const layout = { ...LAYOUT, padding: 250 } - chartNode.layout(layout).run() setSearchNode(n) + setData({ ...graph.Elements }) + + const chart = chartRef.current + + if (chart) { + chart.centerAt(chartNode.x, chartNode.y, 1000); + } } - const handelRemove = (ids: number[]) => { - chartRef.current?.elements(`#${ids.join(',#')}`).style({ display: 'none' }) - if (ids.some(id => Number(selectedObj?.id) === id)) { - setSelectedObj(undefined) + const handelRemove = (ids: string[]) => { + graph.Elements = { + nodes: graph.Elements.nodes.map(node => ids.includes(node.id) ? { ...node, visibility: false } : node), + links: graph.Elements.links } + + graph.visibleLinks(ids, false) + + setData({ ...graph.Elements }) } return ( @@ -418,11 +287,14 @@ export function CodeGraph({ { - isPathResponse && + (isPathResponse || isPathResponse === undefined) && -
    - { - commits.slice(commitIndex - COMMIT_LIMIT, commitIndex).map((commit: any) => { - const date = new Date(commit.date * 1000) - const month = `${date.getDate()} ${date.toLocaleString('default', { month: 'short' })}` - const hour = `${date.getHours()}:${date.getMinutes().toString().padStart(2, '0')}` - return ( - - -
  • - -
  • -
    - -

    {commit.author}

    -

    {commit.message}

    -

    {commit.hash}

    -
    -
    - ) - }) - } -
- - - ) -} \ No newline at end of file +// import { HoverCard, HoverCardContent, HoverCardTrigger } from "@/components/ui/hover-card" +// import { toast } from "@/components/ui/use-toast" +// import { cn } from "@/lib/utils" +// import cytoscape from "cytoscape" +// import { ChevronLeft, ChevronRight } from "lucide-react" +// import { Dispatch, MutableRefObject, SetStateAction, useState } from "react" +// import { Graph } from "./model" +// import { LAYOUT } from "./code-graph" + +// interface Props { +// commits: any[] +// currentCommit: number +// setCurrentCommit: Dispatch> +// commitIndex: number +// setCommitIndex: Dispatch> +// graph: Graph, +// chartRef: MutableRefObject +// } + +// const COMMIT_LIMIT = 7 + +// export default function CommitList({ commitIndex, commits, currentCommit, setCommitIndex, setCurrentCommit, graph, chartRef }: Props) { + +// const [commitChanges, setCommitChanges] = useState() + +// const handelCommitChange = async (commit: any) => { +// const chart = chartRef.current + +// if (!chart) return + +// const result = await fetch(`api/repo/${graph.Id}/?type=switchCommit`, { +// method: 'POST', +// }) + +// if (!result.ok) { +// toast({ +// title: "Uh oh! Something went wrong", +// description: (await result.text()), +// }) +// return +// } + +// const json = await result.json() + +// json.result.deletions.nodes.forEach((e: any) => { +// chart.remove(`#${e.id}`) +// graph.NodesMap.delete(e.id) +// graph.Elements.splice(graph.Elements.findIndex((el) => el.data.id === e.id), 1) +// }) + +// json.result.deletions.edges.forEach((e: any) => { +// chart.remove(`#_${e.id}`) +// graph.EdgesMap.delete(e.id) +// graph.Elements.splice(graph.Elements.findIndex((el) => el.data.id === e.id), 1) +// }) + +// const additionsIds = chart.add(graph.extend(json.result.additions)) +// .filter((e) => e.isNode()).style({ "border-color": "pink", "border-width": 2, "border-opacity": 1 }) +// .map((e) => e.id())! + +// const g = Graph.empty() +// g.extend(json.result.modifications) + +// const modifiedIds = g.Elements.map((e) => { +// const graphElement = graph.Elements.find((el) => el.data.id === e.data.id) +// graphElement.data = e.data + +// if ("category" in e.data) { +// chart.$(`#${e.data.id}`).data(e.data).style({ "border-color": "blue", "border-width": 2, "border-opacity": 1 }) +// } + +// return e.data.id +// }) + +// chart.layout(LAYOUT).run() + +// setCommitChanges({ additionsIds, modifiedIds }) +// setCurrentCommit(commit.hash) +// } + +// return ( +//
+// +//
    +// { +// commits.slice(commitIndex - COMMIT_LIMIT, commitIndex).map((commit: any) => { +// const date = new Date(commit.date * 1000) +// const month = `${date.getDate()} ${date.toLocaleString('default', { month: 'short' })}` +// const hour = `${date.getHours()}:${date.getMinutes().toString().padStart(2, '0')}` +// return ( +// +// +//
  • +// +//
  • +//
    +// +//

    {commit.author}

    +//

    {commit.message}

    +//

    {commit.hash}

    +//
    +//
    +// ) +// }) +// } +//
+// +//
+// ) +// } \ No newline at end of file diff --git a/app/components/dataPanel.tsx b/app/components/dataPanel.tsx index eae6f1b6..385593f5 100644 --- a/app/components/dataPanel.tsx +++ b/app/components/dataPanel.tsx @@ -16,7 +16,16 @@ const excludedProperties = [ "expand", "collapsed", "isPath", - "isPathStartEnd" + "isPathStartEnd", + "visibility", + "index", + "__indexColor", + "x", + "y", + "vx", + "vy", + "fx", + "fy", ] export default function DataPanel({ obj, setObj, url }: Props) { @@ -36,7 +45,7 @@ export default function DataPanel({ obj, setObj, url }: Props) { const object = Object.entries(obj).filter(([k]) => !excludedProperties.includes(k)) return ( -
+

{label.toUpperCase()}

@@ -90,7 +90,7 @@ export default function ElementMenu({ obj, objects, setPath, handelRemove, posit @@ -114,13 +114,15 @@ export default function ElementMenu({ obj, objects, setPath, handelRemove, posit + } diff --git a/app/components/elementTooltip.tsx b/app/components/elementTooltip.tsx deleted file mode 100644 index d10cb928..00000000 --- a/app/components/elementTooltip.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { Position } from "cytoscape"; -import { useState } from "react"; - -interface Props { - label: string | undefined; - position: Position | undefined; - parentWidth: number; -} - -export default function ElementTooltip({ label, position, parentWidth }: Props) { - const [containerWidth, setContainerWidth] = useState(0); - - if (!label || !position) return null - - return ( -
{ - if (!ref) return - setContainerWidth(ref.clientWidth) - }} - className="absolute z-20 bg-white rounded-lg shadow-lg p-3" - style={{ - left: Math.max(-34, Math.min(position.x - containerWidth / 2, parentWidth + 34 - containerWidth)), - top: position.y - }} - > - {label} -
- ) -} \ No newline at end of file diff --git a/app/components/graphView.tsx b/app/components/graphView.tsx new file mode 100644 index 00000000..eee67e53 --- /dev/null +++ b/app/components/graphView.tsx @@ -0,0 +1,194 @@ + +import ForceGraph2D from 'react-force-graph-2d'; +import { Graph, GraphData, Link, Node } from './model'; +import { Dispatch, Ref, RefObject, SetStateAction, useCallback } from 'react'; +import { toast } from '@/components/ui/use-toast'; +import { Path } from '../page'; + +export interface Position { + x: number, + y: number, +} + +interface Props { + data: GraphData + setData: Dispatch> + graph: Graph + chartRef: RefObject + selectedObj: Node | undefined + setSelectedObj: Dispatch> + setPosition: Dispatch> + onFetchNode: (nodeIds: string[]) => Promise + deleteNeighbors: (nodes: Node[]) => void + parentRef: RefObject + isShowPath: boolean + setPath: Dispatch> + isPathResponse: boolean | undefined + selectedPathId: string | undefined + setSelectedPathId: (selectedPathId: string) => void +} + +const NODE_SIZE = 6; + +export default function GraphView({ + data, + setData, + graph, + chartRef, + selectedObj, + setSelectedObj, + setPosition, + onFetchNode, + deleteNeighbors, + parentRef, + isShowPath, + setPath, + isPathResponse, + selectedPathId, + setSelectedPathId +}: Props) { + const unsetSelectedObj = () => { + setSelectedObj(undefined) + } + + const handelNodeClick = (node: Node, evt: MouseEvent) => { + if (isShowPath) { + setPath(prev => { + if (!prev?.start?.name || (prev.end?.name && prev.end?.name !== "")) { + return ({ start: { id: Number(node.id), name: node.name } }) + } else { + return ({ end: { id: Number(node.id), name: node.name }, start: prev.start }) + } + }) + return + } + setSelectedObj(node) + setPosition({ x: evt.clientX, y: evt.clientY }) + } + + const handelLinkClick = (link: Link) => { + if (!isPathResponse || link.id === selectedPathId) return + setSelectedPathId(link.id) + } + + const handelNodeRightClick = async (node: Node) => { + const expand = !node.expand + if (expand) { + const elements = await onFetchNode([node.id]) + + if (elements.nodes.length === 0) { + toast({ + title: `No neighbors found`, + description: `No neighbors found`, + }) + return + } + + graph.Elements = { + nodes: [...graph.Elements.nodes, ...elements.nodes], + links: [...graph.Elements.links, ...elements.links] + } + } else { + deleteNeighbors([node]); + } + + node.expand = expand + + setSelectedObj(undefined) + setData({ ...graph.Elements }) + } + + return ( +
+ 'replace'} + linkCanvasObjectMode={() => 'replace'} + nodeCanvasObject={(node, ctx) => { + if (!node.x || !node.y) return + + if (isPathResponse) { + if (node.isPathSelected) { + ctx.fillStyle = node.color; + ctx.strokeStyle = '#FF66B3'; + ctx.lineWidth = 1 + } else if (node.isPath) { + ctx.fillStyle = node.color; + ctx.strokeStyle = '#FF66B3'; + ctx.lineWidth = 0.5 + } else { + ctx.fillStyle = '#E5E5E5'; + ctx.strokeStyle = 'black'; + ctx.lineWidth = 0.5 + } + } else if (isPathResponse === undefined) { + if (node.isPathSelected) { + ctx.fillStyle = node.color; + ctx.strokeStyle = '#FF66B3'; + ctx.lineWidth = 1 + } else if (node.isPath) { + ctx.fillStyle = node.color; + ctx.strokeStyle = '#FF66B3'; + ctx.lineWidth = 0.5 + } else { + ctx.fillStyle = node.color; + ctx.strokeStyle = 'black'; + ctx.lineWidth = selectedObj?.id === node.id ? 1 : 0.5 + } + } else { + ctx.fillStyle = node.color; + ctx.strokeStyle = 'black'; + ctx.lineWidth = selectedObj?.id === node.id ? 1 : 0.5 + } + + ctx.beginPath(); + ctx.arc(node.x, node.y, NODE_SIZE, 0, 2 * Math.PI, false); + ctx.stroke(); + ctx.fill(); + }} + linkCanvasObject={(link, ctx) => { + if (!link.source.x || !link.source.y || !link.target.x || !link.target.y) return + + if (isPathResponse || isPathResponse === undefined) { + if (link.isPathSelected) { + ctx.strokeStyle = '#FF66B3'; + ctx.lineWidth = 1 + ctx.setLineDash([]); + } else if (link.isPath) { + ctx.strokeStyle = '#FF66B3'; + ctx.lineWidth = 0.5 + ctx.setLineDash([5, 5]); + } else { + ctx.strokeStyle = 'gray'; + ctx.lineWidth = 0.5 + ctx.setLineDash([]); + } + } else { + ctx.strokeStyle = 'gray'; + ctx.lineWidth = 0.5 + ctx.setLineDash([]); + } + ctx.beginPath(); + ctx.moveTo(link.source.x, link.source.y); + ctx.lineTo(link.target.x, link.target.y); + ctx.stroke(); + ctx.fill(); + }} + onNodeClick={handelNodeClick} + onNodeDrag={unsetSelectedObj} + onNodeRightClick={handelNodeRightClick} + onLinkClick={handelLinkClick} + onBackgroundRightClick={unsetSelectedObj} + onBackgroundClick={unsetSelectedObj} + onZoom={unsetSelectedObj} + /> +
+ ) +} \ No newline at end of file diff --git a/app/components/model.ts b/app/components/model.ts index a2f713a5..d8824b7e 100644 --- a/app/components/model.ts +++ b/app/components/model.ts @@ -1,24 +1,39 @@ -import twcolors from 'tailwindcss/colors' import { Path } from '../page' +export interface GraphData { + nodes: Node[], + links: Link[], +} export interface Category { name: string, index: number, show: boolean, } -export interface Node { +export type Node = { id: string, name: string, category: string, color: string, + collapsed: boolean, + expand: boolean, + visibility: boolean, + isPathSelected: boolean, + isPath: boolean, [key: string]: any, } -export interface Edge { - source: number, - target: number, +export type Link = { + id: string, + source: Node, + target: Node, label: string, + visibility: boolean, + expand: boolean, + collapsed: boolean, + isPathSelected: boolean, + isPath: boolean, + [key: string]: any, } @@ -46,20 +61,20 @@ export class Graph { private id: string; private categories: Category[]; - private elements: any[]; + private elements: GraphData; private categoriesMap: Map; private nodesMap: Map; - private edgesMap: Map; + private linksMap: Map; - private constructor(id: string, categories: Category[], elements: any[], - categoriesMap: Map, nodesMap: Map, edgesMap: Map) { + private constructor(id: string, categories: Category[], elements: GraphData, + categoriesMap: Map, nodesMap: Map, edgesMap: Map) { this.id = id; this.categories = categories; this.elements = elements; this.categoriesMap = categoriesMap; this.nodesMap = nodesMap; - this.edgesMap = edgesMap; + this.linksMap = edgesMap; } get Id(): string { @@ -74,20 +89,28 @@ export class Graph { return this.categoriesMap; } - get Elements(): any[] { + get Elements(): GraphData { return this.elements; } - get EdgesMap(): Map { - return this.edgesMap; + set Elements(elements: GraphData) { + this.elements = elements; + } + + get EdgesMap(): Map { + return this.linksMap; } get NodesMap(): Map { return this.nodesMap; } + public getElements(): (Node | Link)[] { + return [...this.elements.nodes, ...this.elements.links] + } + public static empty(): Graph { - return new Graph("", [], [], new Map(), new Map(), new Map()) + return new Graph("", [], { nodes: [], links: [] }, new Map(), new Map(), new Map()) } public static create(results: any, graphName: string): Graph { @@ -97,8 +120,8 @@ export class Graph { return graph } - public extend(results: any, collapsed = false, path?: Path): any[] { - let newElements: any[] = [] + public extend(results: any, collapsed = false, path?: Path): GraphData { + let newElements: GraphData = { nodes: [], links: [] } results.nodes.forEach((nodeData: any) => { let label = nodeData.labels[0]; @@ -114,10 +137,9 @@ export class Graph { let node = this.nodesMap.get(nodeData.id) if (node) { node.isPath = !!path - if (path?.start?.id == nodeData.id || path?.end?.id == nodeData.id) { - node.isPathStartEnd = true + if (path?.start?.id === nodeData.id || path?.end?.id === nodeData.id) { + node.isPathSelected = true } - node.isPath = !!path return } @@ -127,44 +149,73 @@ export class Graph { color: getCategoryColorValue(category.index), category: category.name, expand: false, + visibility: true, collapsed, isPath: !!path, - } - if (path?.start?.id == nodeData.id || path?.end?.id == nodeData.id) { - node.isPathStartEnd = true + isPathSelected: path?.start?.id === nodeData.id || path?.end?.id === nodeData.id } Object.entries(nodeData.properties).forEach(([key, value]) => { node[key] = value }) this.nodesMap.set(nodeData.id, node) - this.elements.push({ data: node }) - newElements.push({ data: node }) + this.elements.nodes.push(node) + newElements.nodes.push(node) }) results.edges.forEach((edgeData: any) => { - let edge = this.edgesMap.get(edgeData.id) - if (edge) { - edge.isPath = !!path + let link = this.linksMap.get(edgeData.id) + if (link) { + link.isPath = !!path return } let sourceId = edgeData.src_node.toString(); let destinationId = edgeData.dest_node.toString() - edge = { - id: `_${edgeData.id}`, + link = { + id: edgeData.id, source: sourceId, target: destinationId, label: edgeData.relation, + visibility: true, expand: false, collapsed, + isPathSelected: false, isPath: !!path, } - this.edgesMap.set(edgeData.id, edge) - this.elements.push({ data: edge }) - newElements.push({ data: edge }) + this.linksMap.set(edgeData.id, link) + this.elements.links.push(link) + newElements.links.push(link) }) return newElements } + + public removeLinks() { + this.elements = { + nodes: this.elements.nodes, + links: this.elements.links.map(link => { + if (this.elements.nodes.map(n => n.id).includes(link.source.id) && this.elements.nodes.map(n => n.id).includes(link.target.id)) { + return link + } + this.linksMap.delete(Number(link.id)) + }).filter(link => link !== undefined) + } + } + + public visibleLinks(ids?: string[], visibility?: boolean) { + this.elements.links.forEach(link => { + if (ids && visibility !== undefined) { + if (ids.includes(link.source.id) || ids.includes(link.target.id)) { + link.visibility = visibility + } + } else { + if (this.categories.find(category => category.name === link.source.category)?.show && this.categories.find(category => category.name === link.target.category)?.show) { + link.visibility = true + } else { + link.visibility = false + } + } + }) + } } \ No newline at end of file diff --git a/app/components/toolbar.tsx b/app/components/toolbar.tsx index 00264fb8..0ddd351b 100644 --- a/app/components/toolbar.tsx +++ b/app/components/toolbar.tsx @@ -1,31 +1,19 @@ import { CircleDot, Minus, Plus } from "lucide-react"; import { cn } from "@/lib/utils" -import { Dispatch, RefObject, SetStateAction } from "react"; -import { Node } from "./model"; +import { RefObject } from "react"; interface Props { - chartRef: RefObject - setSelectedObj: Dispatch> + chartRef: RefObject className?: string } -export function Toolbar({ chartRef, setSelectedObj, className }: Props) { +export function Toolbar({ chartRef, className }: Props) { function handleZoomClick(changefactor: number) { let chart = chartRef.current if (chart) { chart.zoom(chart.zoom() * changefactor) } - setSelectedObj(undefined) - } - - function handleCenterClick() { - let chart = chartRef.current - if (chart) { - chart.fit(undefined, 80) - chart.center() - } - setSelectedObj(undefined) } return ( @@ -39,7 +27,7 @@ export function Toolbar({ chartRef, setSelectedObj, className }: Props) { )) From b1e633ce2415a0acaf418807eb789cf6402c801a Mon Sep 17 00:00:00 2001 From: Naseem Ali <34807727+Naseem77@users.noreply.github.com> Date: Mon, 2 Dec 2024 17:13:32 +0200 Subject: [PATCH 11/60] canvas tests (#258, #262) --- e2e/logic/POM/codeGraph.ts | 22 ++++++++++++++++++---- e2e/tests/codeGraph.spec.ts | 28 +++++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/e2e/logic/POM/codeGraph.ts b/e2e/logic/POM/codeGraph.ts index 3f8e3d60..e8479711 100644 --- a/e2e/logic/POM/codeGraph.ts +++ b/e2e/logic/POM/codeGraph.ts @@ -136,7 +136,15 @@ export default class CodeGraph extends BasePage { private get removeNodeViaElementMenu(): Locator { return this.page.locator("//button[@title='Remove']"); } - + + private get codeGraphCheckbox(): (checkbox: string) => Locator { + return (checkbox: string) => this.page.locator(`(//button[@role='checkbox'])[${checkbox}]`); + } + + private get clearGraphBtn(): Locator { + return this.page.locator("//button[p[text()='Clear Graph']]"); + } + /* NavBar functionality */ async clickOnFalkorDbLogo(): Promise { await this.page.waitForLoadState('networkidle'); @@ -266,7 +274,6 @@ export default class CodeGraph extends BasePage { return await this.searchBarInput.inputValue(); } - async scrollToBottomInSearchBarList(): Promise { await this.searchBarList.evaluate((element) => { element.scrollTop = element.scrollHeight; @@ -279,7 +286,7 @@ export default class CodeGraph extends BasePage { } /* Canvas functionality */ - + async getCanvasAnalysis(): Promise { await delay(2000); return await analyzeCanvasWithLocator(this.canvasElement); @@ -307,5 +314,12 @@ export default class CodeGraph extends BasePage { const adjustedY = boundingBox.y + Math.round(y); await this.page.mouse.click(adjustedX, adjustedY, { button: 'right' }); } - + + async selectCodeGraphCheckbox(checkbox: string): Promise { + await this.codeGraphCheckbox(checkbox).click(); + } + + async clickOnClearGraphBtn(): Promise { + await this.clearGraphBtn.click(); + } } diff --git a/e2e/tests/codeGraph.spec.ts b/e2e/tests/codeGraph.spec.ts index f2eaa60f..de29cb9f 100644 --- a/e2e/tests/codeGraph.spec.ts +++ b/e2e/tests/codeGraph.spec.ts @@ -2,7 +2,7 @@ import { test, expect } from "@playwright/test"; import BrowserWrapper from "../infra/ui/browserWrapper"; import CodeGraph from "../logic/POM/codeGraph"; import urls from "../config/urls.json"; -import { GRAPH_ID } from "../config/constants"; +import { GRAPH_ID, Node_Add_Edge, Node_Import_Data } from "../config/constants"; import { delay } from "../logic/utils"; import { searchData, specialCharacters } from "../config/testData"; import { CanvasAnalysisResult } from "../logic/canvasAnalysis"; @@ -126,4 +126,30 @@ test.describe("Code graph tests", () => { expect(initialNodeAnalysis.red.length).toBeGreaterThan(updatedNodeAnalysis.red.length); }); + colors.forEach((color, index) => { + const checkboxIndex = index + 1; + test(`Verify that unchecking the ${color} checkbox hides ${color} nodes on the canvas`, async () => { + const codeGraph = await browser.createNewPage(CodeGraph, urls.baseUrl); + await codeGraph.selectGraph(GRAPH_ID); + await codeGraph.selectCodeGraphCheckbox(checkboxIndex.toString()); + const result = await codeGraph.getCanvasAnalysis(); + expect(result[color].length).toBe(0); + }); + }) + + test(`Verify "Clear graph" button resets canvas view`, async () => { + const codeGraph = await browser.createNewPage(CodeGraph, urls.baseUrl); + await codeGraph.selectGraph(GRAPH_ID); + const initialAnalysis = await codeGraph.getCanvasAnalysis(); + const initialNodeCount = initialAnalysis.green.length + initialAnalysis.yellow.length + initialAnalysis.red.length; + await codeGraph.clickOnshowPathBtn(); + await codeGraph.insertInputForShowPath("1", Node_Import_Data); + await codeGraph.insertInputForShowPath("2", Node_Add_Edge); + await codeGraph.clickOnClearGraphBtn(); + const finalAnalysis = await codeGraph.getCanvasAnalysis(); + const finalNodeCount = finalAnalysis.green.length + finalAnalysis.yellow.length + finalAnalysis.red.length; + expect(initialNodeCount).toBe(finalNodeCount); + + }); + }); From e4c588155be5d06515cd609eb496439f847393bf Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Tue, 3 Dec 2024 13:24:31 +0200 Subject: [PATCH 12/60] commit --- app/components/chat.tsx | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/app/components/chat.tsx b/app/components/chat.tsx index c8aea339..341ca30a 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -457,19 +457,12 @@ export function Chat({ repo, path, setPath, graph, chartRef, selectedPathId, isP className={cn( "flex text-wrap border p-2 gap-2 rounded-md", p.nodes.length === selectedPath?.nodes.length && - selectedPath?.nodes.every(node => p?.nodes.some((n) => n.id === node.id)) && "border-[#FF66B3] bg-[#FFF0F7]", + selectedPath?.nodes.every(node => p?.nodes.some((n) => n.id === node.id)) && selectedPath.nodes.length === p.nodes.length && "border-[#FF66B3] bg-[#FFF0F7]", message.graphName !== graph.Id && "opacity-50 bg-gray-200" )} title={message.graphName !== graph.Id ? `Move to graph ${message.graphName} to use this path` : undefined} disabled={message.graphName !== graph.Id} onClick={() => { - if (message.graphName !== graph.Id) { - toast({ - title: "Path Disabled", - description: "The path is disabled because it is not from this graph.", - }); - return; - } if (p.nodes.length === selectedPath?.nodes.length && selectedPath?.nodes.every(node => p?.nodes.some((n) => n.id === node.id))) return; handleSetSelectedPath(p); @@ -478,11 +471,13 @@ export function Chat({ repo, path, setPath, graph, chartRef, selectedPathId, isP >

#{i + 1}

- {p.nodes.map((node: any, j: number) => ( - - {` - ${node.properties.name}`} - - ))} + { + p.nodes.map((node: any, j: number) => ( + + {` - ${node.properties.name}`} + + )) + }
)) From 874dfdab824a49981ca2206bef3065a598e2c4b0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Dec 2024 13:46:38 +0000 Subject: [PATCH 13/60] Bump react-resizable-panels from 2.0.23 to 2.1.7 Bumps [react-resizable-panels](https://github.com/bvaughn/react-resizable-panels) from 2.0.23 to 2.1.7. - [Release notes](https://github.com/bvaughn/react-resizable-panels/releases) - [Commits](https://github.com/bvaughn/react-resizable-panels/compare/2.0.23...2.1.7) --- updated-dependencies: - dependency-name: react-resizable-panels dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 12 ++++++------ package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7ca860a4..32a60524 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,7 +27,7 @@ "react": "^18", "react-cytoscapejs": "^2.0.0", "react-dom": "^18", - "react-resizable-panels": "^2.0.20", + "react-resizable-panels": "^2.1.7", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", "tailwind-merge": "^2.5.5", @@ -6232,13 +6232,13 @@ } }, "node_modules/react-resizable-panels": { - "version": "2.0.23", - "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-2.0.23.tgz", - "integrity": "sha512-8ZKTwTU11t/FYwiwhMdtZYYyFxic5U5ysRu2YwfkAgDbUJXFvnWSJqhnzkSlW+mnDoNAzDCrJhdOSXBPA76wug==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-2.1.7.tgz", + "integrity": "sha512-JtT6gI+nURzhMYQYsx8DKkx6bSoOGFp7A3CwMrOb8y5jFHFyqwo9m68UhmXRw57fRVJksFn1TSlm3ywEQ9vMgA==", "license": "MIT", "peerDependencies": { - "react": "^16.14.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0" + "react": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "node_modules/react-style-singleton": { diff --git a/package.json b/package.json index 232434a8..c052c56a 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "react": "^18", "react-cytoscapejs": "^2.0.0", "react-dom": "^18", - "react-resizable-panels": "^2.0.20", + "react-resizable-panels": "^2.1.7", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", "tailwind-merge": "^2.5.5", From a4f60a9af1b0a3b1888830f8594ff744607b511a Mon Sep 17 00:00:00 2001 From: Naseem Ali <34807727+Naseem77@users.noreply.github.com> Date: Tue, 3 Dec 2024 17:40:09 +0200 Subject: [PATCH 14/60] tests (#265, #287, #288, #289) --- app/components/chat.tsx | 2 +- e2e/logic/POM/codeGraph.ts | 72 +++++++++++++++++++++++++++++++++++++ e2e/tests/chat.spec.ts | 16 +++++++-- e2e/tests/codeGraph.spec.ts | 24 ++++++++++++- e2e/tests/navBar.spec.ts | 8 +++++ 5 files changed, 118 insertions(+), 4 deletions(-) diff --git a/app/components/chat.tsx b/app/components/chat.tsx index 80d55fb3..572feae1 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -498,7 +498,7 @@ export function Chat({ repo, path, setPath, graph, chartRef, selectedPathId, isP
- diff --git a/e2e/logic/POM/codeGraph.ts b/e2e/logic/POM/codeGraph.ts index e8479711..3db304da 100644 --- a/e2e/logic/POM/codeGraph.ts +++ b/e2e/logic/POM/codeGraph.ts @@ -21,6 +21,18 @@ export default class CodeGraph extends BasePage { return this.page.locator("//div[@role='dialog']") } + private get tipBtn(): Locator { + return this.page.locator("//button[@title='Tip']") + } + + private get genericMenu(): Locator { + return this.page.locator("//div[contains(@role, 'menu')]") + } + + private get tipMenuCloseBtn(): Locator { + return this.page.locator("//div[@role='menu']//button[@title='Close']") + } + /* CodeGraph Locators*/ private get comboBoxbtn(): Locator { return this.page.locator("//button[@role='combobox']") @@ -115,6 +127,22 @@ export default class CodeGraph extends BasePage { return this.page.locator("//div[@role='region']//ol//li"); } + private get notificationErrorCloseBtn(): Locator { + return this.page.locator("//div[@role='region']//ol//li/button"); + } + + private get questionOptionsMenu(): Locator { + return this.page.locator("//button[@data-name='questionOptionsMenu']"); + } + + private get selectQuestionInMenu(): (questionNumber: string) => Locator { + return (questionNumber: string) => this.page.locator(`//div[contains(@role, 'menu')]/button[${questionNumber}]`); + } + + private get lastQuestionInChat(): Locator { + return this.page.locator("//main[@data-name='main-chat']/*[last()-1]/p"); + } + /* Canvas Locators*/ private get canvasElement(): Locator { @@ -172,6 +200,18 @@ export default class CodeGraph extends BasePage { return await this.createNewProjectDialog.isVisible(); } + async clickonTipBtn(): Promise { + await this.tipBtn.click(); + } + + async isTipMenuVisible(): Promise { + return await this.genericMenu.isVisible(); + } + + async clickonTipMenuCloseBtn(): Promise { + await this.tipMenuCloseBtn.click(); + } + /* Chat functionality */ async clickOnshowPathBtn(): Promise { await this.showPathBtn.click(); @@ -232,9 +272,27 @@ export default class CodeGraph extends BasePage { } async isNotificationError(): Promise { + await delay(500); return await this.notificationError.isVisible(); } + async clickOnNotificationErrorCloseBtn(): Promise { + await this.notificationErrorCloseBtn.click(); + } + + async clickOnQuestionOptionsMenu(): Promise { + await this.questionOptionsMenu.click(); + } + + async selectAndGetQuestionInOptionsMenu(questionNumber: string): Promise { + await this.selectQuestionInMenu(questionNumber).click(); + return await this.selectQuestionInMenu(questionNumber).innerHTML(); + } + + async getLastQuestionInChat(): Promise { + return await this.lastQuestionInChat.innerText(); + } + /* CodeGraph functionality */ async selectGraph(graph: string): Promise { await this.comboBoxbtn.click(); @@ -322,4 +380,18 @@ export default class CodeGraph extends BasePage { async clickOnClearGraphBtn(): Promise { await this.clearGraphBtn.click(); } + + async changeNodePosition(x: number, y: number): Promise { + const box = (await this.canvasElement.boundingBox())!; + const targetX = x + 100; + const targetY = y + 50; + const absStartX = box.x + x; + const absStartY = box.y + y; + const absEndX = box.x + targetX; + const absEndY = box.y + targetY; + await this.page.mouse.move(absStartX, absStartY); + await this.page.mouse.down(); + await this.page.mouse.move(absEndX, absEndY); + await this.page.mouse.up(); + } } diff --git a/e2e/tests/chat.spec.ts b/e2e/tests/chat.spec.ts index 02e20253..81f47046 100644 --- a/e2e/tests/chat.spec.ts +++ b/e2e/tests/chat.spec.ts @@ -76,12 +76,24 @@ test.describe("Chat tests", () => { expect(await chat.isNotificationError()).toBe(true); }); - test("Validate error notification when sending an empty question in chat", async () => { + test("Validate error notification and its closure when sending an empty question in chat", async () => { const chat = await browser.createNewPage(CodeGraph, urls.baseUrl); await chat.selectGraph(GRAPH_ID); await chat.clickAskquestionBtn(); - await delay(500); expect(await chat.isNotificationError()).toBe(true); + await chat.clickOnNotificationErrorCloseBtn(); + expect(await chat.isNotificationError()).toBe(false); }); + + for (let index = 0; index < 5; index++) { + const questionNumber = index + 1; + test(`Validate displaying question ${index} in chat after selection from options menu`, async () => { + const chat = await browser.createNewPage(CodeGraph, urls.baseUrl); + await chat.selectGraph(GRAPH_ID); + await chat.clickOnQuestionOptionsMenu(); + const selectedQuestion = await chat.selectAndGetQuestionInOptionsMenu(questionNumber.toString()); + expect(selectedQuestion).toEqual(await chat.getLastQuestionInChat()) + }); + } }); diff --git a/e2e/tests/codeGraph.spec.ts b/e2e/tests/codeGraph.spec.ts index de29cb9f..4d6b0d6c 100644 --- a/e2e/tests/codeGraph.spec.ts +++ b/e2e/tests/codeGraph.spec.ts @@ -149,7 +149,29 @@ test.describe("Code graph tests", () => { const finalAnalysis = await codeGraph.getCanvasAnalysis(); const finalNodeCount = finalAnalysis.green.length + finalAnalysis.yellow.length + finalAnalysis.red.length; expect(initialNodeCount).toBe(finalNodeCount); - }); + for (let index = 0; index < 3; index++) { + const checkboxIndex = index + 1; + test(`Verify selecting different graphs displays nodes in canvas - Iteration ${index + 1}`, async () => { + const codeGraph = await browser.createNewPage(CodeGraph, urls.baseUrl); + await codeGraph.selectGraph(checkboxIndex.toString()); + const result = await codeGraph.getCanvasAnalysis(); + const nodesLength = result.green.length + result.yellow.length + result.red.length; + expect(nodesLength).toBeGreaterThan(1); + }); + } + + colors.forEach((color) => { + test(`Validate canvas node dragging for color: ${color}`, async () => { + const codeGraph = await browser.createNewPage(CodeGraph, urls.baseUrl); + await codeGraph.selectGraph(GRAPH_ID); + const initialAnalysis = await codeGraph.getCanvasAnalysis(); + await codeGraph.changeNodePosition(initialAnalysis[color][0].x, initialAnalysis[color][0].y); + const finalAnalysis = await codeGraph.getCanvasAnalysis(); + expect(finalAnalysis[color][0].x).not.toBe(initialAnalysis.green[0].x); + expect(finalAnalysis[color][0].y).not.toBe(initialAnalysis.green[0].y); + }); + }) + }); diff --git a/e2e/tests/navBar.spec.ts b/e2e/tests/navBar.spec.ts index b6706cbf..9f294a75 100644 --- a/e2e/tests/navBar.spec.ts +++ b/e2e/tests/navBar.spec.ts @@ -38,4 +38,12 @@ test.describe(' Navbar tests', () => { await navBar.clickCreateNewProjectBtn(); expect(await navBar.isCreateNewProjectDialog()).toBe(true) }) + + test("Validate Tip popup visibility and closure functionality", async () => { + const navBar = await browser.createNewPage(CodeGraph, urls.baseUrl); + await navBar.clickonTipBtn(); + expect(await navBar.isTipMenuVisible()).toBe(true); + await navBar.clickonTipMenuCloseBtn(); + expect(await navBar.isTipMenuVisible()).toBe(false); + }); }); From 8f8d8ee46982f0d1a48276c7af82d68d1dd817b8 Mon Sep 17 00:00:00 2001 From: Naseem Ali <34807727+Naseem77@users.noreply.github.com> Date: Tue, 3 Dec 2024 18:11:26 +0200 Subject: [PATCH 15/60] test update & workers - adding delay for tip popup dismissal - update node drag test for correct validation - increase playwright workers number --- e2e/logic/POM/codeGraph.ts | 1 + e2e/tests/codeGraph.spec.ts | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/e2e/logic/POM/codeGraph.ts b/e2e/logic/POM/codeGraph.ts index 3db304da..47d39827 100644 --- a/e2e/logic/POM/codeGraph.ts +++ b/e2e/logic/POM/codeGraph.ts @@ -205,6 +205,7 @@ export default class CodeGraph extends BasePage { } async isTipMenuVisible(): Promise { + await delay(500); return await this.genericMenu.isVisible(); } diff --git a/e2e/tests/codeGraph.spec.ts b/e2e/tests/codeGraph.spec.ts index 4d6b0d6c..b4583819 100644 --- a/e2e/tests/codeGraph.spec.ts +++ b/e2e/tests/codeGraph.spec.ts @@ -169,8 +169,8 @@ test.describe("Code graph tests", () => { const initialAnalysis = await codeGraph.getCanvasAnalysis(); await codeGraph.changeNodePosition(initialAnalysis[color][0].x, initialAnalysis[color][0].y); const finalAnalysis = await codeGraph.getCanvasAnalysis(); - expect(finalAnalysis[color][0].x).not.toBe(initialAnalysis.green[0].x); - expect(finalAnalysis[color][0].y).not.toBe(initialAnalysis.green[0].y); + expect(finalAnalysis[color][0].x).not.toBe(initialAnalysis[color][0].x); + expect(finalAnalysis[color][0].y).not.toBe(initialAnalysis[color][0].y); }); }) From d29b919fbcf5fce0c660b32cb1d92b5cd1360539 Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Wed, 4 Dec 2024 12:20:28 +0200 Subject: [PATCH 16/60] commit --- app/components/chat.tsx | 50 ++++++++++++++++++++-------------- app/components/code-graph.tsx | 10 +++---- app/components/elementMenu.tsx | 2 +- app/components/graphView.tsx | 6 ++-- app/components/model.ts | 18 +++++++----- app/page.tsx | 4 +-- 6 files changed, 51 insertions(+), 39 deletions(-) diff --git a/app/components/chat.tsx b/app/components/chat.tsx index d27098c4..77bfa8cf 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -8,6 +8,11 @@ import { Graph, GraphData, Link } from "./model"; import { cn } from "@/lib/utils"; import { TypeAnimation } from "react-type-animation"; +type PathData = { + nodes: any[] + links: any[] +} + enum MessageTypes { Query, Response, @@ -20,7 +25,7 @@ enum MessageTypes { interface Message { type: MessageTypes; text?: string; - paths?: { nodes: any[], edges: any[] }[]; + paths?: PathData[]; } interface Props { @@ -28,7 +33,7 @@ interface Props { path: Path | undefined setPath: Dispatch> graph: Graph - selectedPathId: string | undefined + selectedPathId: number | undefined isPathResponse: boolean | undefined setIsPathResponse: (isPathResponse: boolean | undefined) => void setData: Dispatch> @@ -51,9 +56,9 @@ export function Chat({ repo, path, setPath, graph, selectedPathId, isPathRespons const [messages, setMessages] = useState([]); // Holds the messages in the chat - const [paths, setPaths] = useState<{ nodes: any[], edges: any[] }[]>([]); + const [paths, setPaths] = useState([]); - const [selectedPath, setSelectedPath] = useState<{ nodes: any[], edges: any[] }>(); + const [selectedPath, setSelectedPath] = useState(); // Holds the user input while typing const [query, setQuery] = useState(''); @@ -74,7 +79,7 @@ export function Chat({ repo, path, setPath, graph, selectedPathId, isPathRespons }, [tipOpen]) useEffect(() => { - const p = paths.find((path) => [...path.edges, ...path.nodes].some((e: any) => e.id === selectedPathId)) + const p = paths.find((path) => [...path.links, ...path.nodes].some((e: any) => e.id === selectedPathId)) if (!p) return @@ -92,19 +97,19 @@ export function Chat({ repo, path, setPath, graph, selectedPathId, isPathRespons setPaths([]) }, [isPathResponse]) - const handelSetSelectedPath = (p: { nodes: any[], edges: any[] }) => { + const handelSetSelectedPath = (p: PathData) => { setSelectedPath(prev => { if (prev) { - if (isPathResponse && paths.some((path) => [...path.nodes, ...path.edges].every((e: any) => [...prev.nodes, ...prev.edges].some((el: any) => el.id === e.id)))) { - graph.getElements().forEach(edge => { - const id = Number(edge.id) + if (isPathResponse && paths.some((path) => [...path.nodes, ...path.links].every((e: any) => [...prev.nodes, ...prev.links].some((e: any) => e.id === e.id)))) { + graph.getElements().forEach(link => { + const { id } = link - if (prev.edges.some(el => el.id === id) && !p.edges.some(el => el.id === id)) { - edge.isPathSelected = false + if (prev.links.some(e => e.id === id) && !p.links.some(e => e.id === id)) { + link.isPathSelected = false } }) } else { - const elements = graph.getElements().filter(e => [...prev.edges, ...prev.nodes].some(el => el.id === Number(e.id) && ![...p.nodes, ...p.edges].some(ele => ele.id === Number(e.id)))) + const elements = graph.getElements().filter(e => [...prev.links, ...prev.nodes].some(el => el.id === e.id && ![...p.nodes, ...p.links].some(ele => ele.id === el.id))) if (isPathResponse || isPathResponse === undefined) { elements.forEach(e => { e.isPath = false @@ -115,19 +120,23 @@ export function Chat({ repo, path, setPath, graph, selectedPathId, isPathRespons } return p }) - - if (isPathResponse && paths.some((path) => [...path.nodes, ...path.edges].every((e: any) => [...p.nodes, ...p.edges].some((el: any) => el.id === e.id)))) { + debugger + if (isPathResponse && paths.length > 0 && paths.some((path) => [...path.nodes, ...path.links].every((e: any) => [...p.nodes, ...p.links].some((el: any) => el.id === e.id)))) { graph.Elements.links.forEach(e => { - if (p.edges.some(el => el.id === e.id)) { + if (p.links.some(el => el.id === e.id)) { e.isPathSelected = true } }) } else { - graph.getElements().filter(el => [...p.nodes, ...p.edges].some(e => e.id === Number(el.id))).forEach(el => { - if ((Number(el.id) === p.nodes[0].id || Number(el.id) === p.nodes[p.nodes.length - 1].id) || "source" in el) { - el.isPathSelected = true + console.log(p.nodes[p.nodes.length - 1].id, p.nodes[0].id); + console.log(graph.Elements.nodes.map(e => e.id)); + console.log(p.links.map(l => l.id)); + console.log(graph.Elements.links.map(e => e.id)); + graph.getElements().filter(e => "source" in e ? p.links.some(l => l.id === e.id) : p.nodes.some(n => n.id === e.id)).forEach(e => { + if ((e.id === p.nodes[0].id || e.id === p.nodes[p.nodes.length - 1].id) || "source" in e) { + e.isPathSelected = true } else { - el.isPath = true + e.isPath = true } }); } @@ -220,7 +229,7 @@ export function Chat({ repo, path, setPath, graph, selectedPathId, isPathRespons return } - const formattedPaths: { nodes: any[], edges: any[] }[] = json.result.paths.map((p: any) => ({ nodes: p.filter((node: any, i: number) => i % 2 === 0), edges: p.filter((edge: any, i: number) => i % 2 !== 0) })) + const formattedPaths: PathData[] = json.result.paths.map((p: any) => ({ nodes: p.filter((node: any, i: number) => i % 2 === 0), links: p.filter((edge: any, i: number) => i % 2 !== 0) })) formattedPaths.forEach((p: any) => graph.extend(p, false, path)) setPaths(formattedPaths) @@ -330,7 +339,6 @@ export function Chat({ repo, path, setPath, graph, selectedPathId, isPathRespons key={i} className={cn("flex text-wrap border p-2 gap-2 rounded-md", p.nodes.length === selectedPath?.nodes.length && selectedPath?.nodes.every(node => p?.nodes.some((n) => n.id === node.id)) && "border-[#FF66B3] bg-[#FFF0F7]")} onClick={() => { - debugger if (selectedPath?.nodes.every(node => p?.nodes.some((n) => n.id === node.id)) && selectedPath.nodes.length === p.nodes.length) return if (!isPathResponse) { setIsPathResponse(undefined) diff --git a/app/components/code-graph.tsx b/app/components/code-graph.tsx index f6f8194c..6480fce1 100644 --- a/app/components/code-graph.tsx +++ b/app/components/code-graph.tsx @@ -20,14 +20,14 @@ interface Props { data: GraphData, setData: Dispatch>, onFetchGraph: (graphName: string) => void, - onFetchNode: (nodeIds: string[]) => Promise, + onFetchNode: (nodeIds: number[]) => Promise, options: string[] isShowPath: boolean setPath: Dispatch> chartRef: RefObject selectedValue: string - selectedPathId: string | undefined - setSelectedPathId: (selectedPathId: string) => void + selectedPathId: number | undefined + setSelectedPathId: (selectedPathId: number) => void isPathResponse: boolean | undefined setIsPathResponse: Dispatch> } @@ -84,7 +84,7 @@ export function CodeGraph({ const handleKeyDown = (event: KeyboardEvent) => { if (event.key === 'Delete') { if (selectedObj && selectedObjects.length === 0) return - handelRemove([...selectedObjects.map(obj => obj.id), selectedObj?.id || ""]); + handelRemove([...selectedObjects.map(obj => obj.id), selectedObj?.id].filter(id => id !== undefined)); } }; @@ -249,7 +249,7 @@ export function CodeGraph({ } } - const handelRemove = (ids: string[]) => { + const handelRemove = (ids: number[]) => { graph.Elements = { nodes: graph.Elements.nodes.map(node => ids.includes(node.id) ? { ...node, visibility: false } : node), links: graph.Elements.links diff --git a/app/components/elementMenu.tsx b/app/components/elementMenu.tsx index f7fa0175..c1fb6024 100644 --- a/app/components/elementMenu.tsx +++ b/app/components/elementMenu.tsx @@ -11,7 +11,7 @@ interface Props { obj: Node | undefined; objects: Node[]; setPath: Dispatch>; - handelRemove: (nodes: string[]) => void; + handelRemove: (nodes: number[]) => void; position: Position | undefined; url: string; handelExpand: (nodes: Node[], expand: boolean) => void; diff --git a/app/components/graphView.tsx b/app/components/graphView.tsx index eee67e53..15812a18 100644 --- a/app/components/graphView.tsx +++ b/app/components/graphView.tsx @@ -18,14 +18,14 @@ interface Props { selectedObj: Node | undefined setSelectedObj: Dispatch> setPosition: Dispatch> - onFetchNode: (nodeIds: string[]) => Promise + onFetchNode: (nodeIds: number[]) => Promise deleteNeighbors: (nodes: Node[]) => void parentRef: RefObject isShowPath: boolean setPath: Dispatch> isPathResponse: boolean | undefined - selectedPathId: string | undefined - setSelectedPathId: (selectedPathId: string) => void + selectedPathId: number | undefined + setSelectedPathId: (selectedPathId: number) => void } const NODE_SIZE = 6; diff --git a/app/components/model.ts b/app/components/model.ts index d8824b7e..6235b255 100644 --- a/app/components/model.ts +++ b/app/components/model.ts @@ -11,7 +11,7 @@ export interface Category { } export type Node = { - id: string, + id: number, name: string, category: string, color: string, @@ -24,7 +24,7 @@ export type Node = { } export type Link = { - id: string, + id: number, source: Node, target: Node, label: string, @@ -144,7 +144,7 @@ export class Graph { } node = { - id: nodeData.id.toString(), + id: nodeData.id, name: nodeData.name, color: getCategoryColorValue(category.index), category: category.name, @@ -162,6 +162,10 @@ export class Graph { newElements.nodes.push(node) }) + if (!results.edges) { + results.edges = results.links + } + results.edges.forEach((edgeData: any) => { let link = this.linksMap.get(edgeData.id) if (link) { @@ -169,8 +173,8 @@ export class Graph { return } - let sourceId = edgeData.src_node.toString(); - let destinationId = edgeData.dest_node.toString() + let sourceId = edgeData.src_node; + let destinationId = edgeData.dest_node link = { id: edgeData.id, @@ -198,12 +202,12 @@ export class Graph { if (this.elements.nodes.map(n => n.id).includes(link.source.id) && this.elements.nodes.map(n => n.id).includes(link.target.id)) { return link } - this.linksMap.delete(Number(link.id)) + this.linksMap.delete(link.id) }).filter(link => link !== undefined) } } - public visibleLinks(ids?: string[], visibility?: boolean) { + public visibleLinks(ids?: number[], visibility?: boolean) { this.elements.links.forEach(link => { if (ids && visibility !== undefined) { if (ids.includes(link.source.id) || ids.includes(link.target.id)) { diff --git a/app/page.tsx b/app/page.tsx index 5dbf444b..2088ce46 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -55,7 +55,7 @@ export default function Home() { const [data, setData] = useState({ nodes: [], links: [] }); const [graph, setGraph] = useState(Graph.empty()); const [selectedValue, setSelectedValue] = useState(""); - const [selectedPathId, setSelectedPathId] = useState(); + const [selectedPathId, setSelectedPathId] = useState(); const [isPathResponse, setIsPathResponse] = useState(false); const [createURL, setCreateURL] = useState("") const [createOpen, setCreateOpen] = useState(false) @@ -150,7 +150,7 @@ export default function Home() { } // Send the user query to the server to expand a node - async function onFetchNode(nodeIds: string[]) { + async function onFetchNode(nodeIds: number[]) { const result = await fetch(`/api/repo/${graph.Id}/neighbors`, { method: 'POST', From 56b7b917de433b7a6b0d7b7d1d91638bc5475755 Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Wed, 4 Dec 2024 15:54:50 +0200 Subject: [PATCH 17/60] remove justify center so the view of the data always be visible (in small screens) --- app/components/dataPanel.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/dataPanel.tsx b/app/components/dataPanel.tsx index b38d40a5..ecd8c773 100644 --- a/app/components/dataPanel.tsx +++ b/app/components/dataPanel.tsx @@ -43,7 +43,7 @@ export default function DataPanel({ obj, setObj, url }: Props) {
-
+
{ object.map(([key, value]) => (
From 1fe9f19b44600e9669c93d0b3822d26dcff360a5 Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Wed, 4 Dec 2024 16:10:51 +0200 Subject: [PATCH 18/60] disable paths that from other graphs in chat and get new data for auto compleat in search input --- app/components/Input.tsx | 4 +- app/components/chat.tsx | 103 ++++++++++++++++++++++++++------------- 2 files changed, 72 insertions(+), 35 deletions(-) diff --git a/app/components/Input.tsx b/app/components/Input.tsx index 11f9fdaa..83ed01be 100644 --- a/app/components/Input.tsx +++ b/app/components/Input.tsx @@ -33,6 +33,8 @@ export default function Input({ value, onValueChange, handleSubmit, graph, icon, }, [open]) useEffect(() => { + if (!graph.Id) return + let isLastRequest = true const timeout = setTimeout(async () => { @@ -75,7 +77,7 @@ export default function Input({ value, onValueChange, handleSubmit, graph, icon, clearTimeout(timeout) isLastRequest = false } - }, [value]) + }, [value, graph.Id]) const handleKeyDown = (e: React.KeyboardEvent) => { const container = containerRef.current diff --git a/app/components/chat.tsx b/app/components/chat.tsx index 80d55fb3..cfea6789 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -69,6 +69,7 @@ interface Message { type: MessageTypes; text?: string; paths?: { nodes: any[], edges: any[] }[]; + graphName?: string; } interface Props { @@ -92,47 +93,52 @@ const SUGGESTIONS = [ const RemoveLastPath = (messages: Message[]) => { const index = messages.findIndex((m) => m.type === MessageTypes.Path) - + if (index !== -1) { messages = [...messages.slice(0, index - 2), ...messages.slice(index + 1)]; messages = RemoveLastPath(messages) } - + return messages } export function Chat({ repo, path, setPath, graph, chartRef, selectedPathId, isPath, setIsPath }: Props) { - + // Holds the messages in the chat const [messages, setMessages] = useState([]); - + // Holds the messages in the chat const [paths, setPaths] = useState<{ nodes: any[], edges: any[] }[]>([]); - + const [selectedPath, setSelectedPath] = useState<{ nodes: any[], edges: any[] }>(); - + // Holds the user input while typing const [query, setQuery] = useState(''); - + const [isPathResponse, setIsPathResponse] = useState(false); - + const [tipOpen, setTipOpen] = useState(false); - + const [sugOpen, setSugOpen] = useState(false); - + // A reference to the chat container to allow scrolling to the bottom const containerRef: React.RefObject = useRef(null); - + const isSendMessage = messages.some(m => m.type === MessageTypes.Pending) || (messages.some(m => m.text === "Please select a starting point and the end point. Select or press relevant item on the graph") && !messages.some(m => m.type === MessageTypes.Path)) - + + useEffect(() => { + setSelectedPath(undefined) + setIsPathResponse(false) + }, [graph.Id]) + useEffect(() => { const p = paths.find((path) => [...path.edges, ...path.nodes].some((e: any) => e.id === selectedPathId)) - + if (!p) return - + handleSetSelectedPath(p) }, [selectedPathId]) - + // Scroll to the bottom of the chat on new message useEffect(() => { setTimeout(() => { @@ -202,14 +208,30 @@ export function Chat({ repo, path, setPath, graph, chartRef, selectedPathId, isP }) chart.elements().filter(el => [...p.nodes, ...p.edges].some(e => e.id == el.id())).layout(LAYOUT).run(); } else { - chart.elements().filter(el => [...p.nodes, ...p.edges].some(e => e.id == el.id())).forEach(el => { - if (el.id() == p.nodes[0].id || el.id() == p.nodes[p.nodes.length - 1].id) { - el.removeStyle().style(SELECTED_PATH_NODE_STYLE); - } else if (el.isNode()) { - el.removeStyle().style(PATH_NODE_STYLE); + const elements: any = { nodes: [], edges: [] }; + [...p.nodes, ...p.edges].forEach(e => { + let element = chart.elements(`#${e.id}`) + if (element.length === 0) { + const type = e.id.startsWith("_") + e = type ? { ...e, id: e.id.slice(1) } : e + type + ? elements.edges.push(e) + : elements.nodes.push(e) + } + }) + console.log(chart.add(graph.extend(elements)).map((e) => e.id())); + + chart.elements().filter((e) => { + console.log(e.id()); + return [...p.nodes, ...p.edges].some((el) => el.id == e.id()) + }).forEach((e) => { + if (e.id() == p.nodes[0].id || e.id() == p.nodes[p.nodes.length - 1].id) { + e.removeStyle().style(SELECTED_PATH_NODE_STYLE); + } else if (e.isNode()) { + e.removeStyle().style(PATH_NODE_STYLE); } - if (el.isEdge()) { - el.removeStyle().style(SELECTED_PATH_EDGE_STYLE); + if (e.isEdge()) { + e.removeStyle().style(SELECTED_PATH_EDGE_STYLE); } }).layout(LAYOUT).run(); } @@ -329,7 +351,7 @@ export function Chat({ repo, path, setPath, graph, chartRef, selectedPathId, isP }); elements.layout(LAYOUT).run() setPaths(formattedPaths) - setMessages((prev) => [...RemoveLastPath(prev), { type: MessageTypes.PathResponse, paths: formattedPaths }]); + setMessages((prev) => [...RemoveLastPath(prev), { type: MessageTypes.PathResponse, paths: formattedPaths, graphName: graph.Id }]); setPath(undefined) setIsPathResponse(true) } @@ -431,22 +453,35 @@ export function Chat({ repo, path, setPath, graph, chartRef, selectedPathId, isP message.paths.map((p, i: number) => ( )) From e3167684d45767d6875fce8355f972957435e673 Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Wed, 4 Dec 2024 16:19:37 +0200 Subject: [PATCH 19/60] copy nothing if undefined --- app/components/dataPanel.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/dataPanel.tsx b/app/components/dataPanel.tsx index b38d40a5..0bbfff24 100644 --- a/app/components/dataPanel.tsx +++ b/app/components/dataPanel.tsx @@ -74,7 +74,7 @@ export default function DataPanel({ obj, setObj, url }: Props) { }
-
-
+
+

{nodesCount} Nodes

{edgesCount} Edges

diff --git a/app/components/dataPanel.tsx b/app/components/dataPanel.tsx index b38d40a5..e8c0da38 100644 --- a/app/components/dataPanel.tsx +++ b/app/components/dataPanel.tsx @@ -36,7 +36,7 @@ export default function DataPanel({ obj, setObj, url }: Props) { const object = Object.entries(obj).filter(([k]) => !excludedProperties.includes(k)) return ( -
+

{label.toUpperCase()}

From 62c69a1af788185771a25000e5b01ae8082cfaab Mon Sep 17 00:00:00 2001 From: Naseem Ali <34807727+Naseem77@users.noreply.github.com> Date: Tue, 10 Dec 2024 11:41:53 +0200 Subject: [PATCH 28/60] test #306 --- e2e/logic/POM/codeGraph.ts | 10 ++++++++++ e2e/tests/codeGraph.spec.ts | 34 ++++++++++++++++++++++++++++------ 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/e2e/logic/POM/codeGraph.ts b/e2e/logic/POM/codeGraph.ts index d978bff8..c6d3846b 100644 --- a/e2e/logic/POM/codeGraph.ts +++ b/e2e/logic/POM/codeGraph.ts @@ -192,6 +192,10 @@ export default class CodeGraph extends BasePage { return this.page.locator("//div[@data-name='node-details-panel']/main/div[1]/p[2]"); } + private get nodedetailsPanelElements(): Locator { + return this.page.locator("//div[@data-name='node-details-panel']/main/div/p[1]"); + } + /* NavBar functionality */ async clickOnFalkorDbLogo(): Promise { await this.page.waitForLoadState('networkidle'); @@ -451,4 +455,10 @@ export default class CodeGraph extends BasePage { return await this.nodedetailsPanelID.innerHTML(); } + async getNodeDetailsPanelElements(): Promise { + await this.elementMenuButton("View Node").click(); + await delay(500) + const elements = await this.nodedetailsPanelElements.all(); + return Promise.all(elements.map(element => element.innerHTML())); + } } diff --git a/e2e/tests/codeGraph.spec.ts b/e2e/tests/codeGraph.spec.ts index 18f70df1..d1014b33 100644 --- a/e2e/tests/codeGraph.spec.ts +++ b/e2e/tests/codeGraph.spec.ts @@ -252,9 +252,7 @@ test.describe("Code graph tests", () => { await codeGraph.clickOnshowPathBtn(); await codeGraph.insertInputForShowPath("1", firstNode); await codeGraph.insertInputForShowPath("2", secondNode); - const result = await codeGraph.getCanvasAnalysis(); - console.log(result); - + const result = await codeGraph.getCanvasAnalysis(); const res = []; for (const node of result.green) { await codeGraph.rightClickOnNode(node.x, node.y); @@ -262,7 +260,6 @@ test.describe("Code graph tests", () => { await codeGraph.clickOnNodeDetailsCloseBtn(); res.push(details); } - console.log(res); expect(res.some((item) => item.includes(firstNode.toUpperCase()))).toBe(true); expect(res.some((item) => item.includes(secondNode.toUpperCase()))).toBe(true); @@ -302,5 +299,30 @@ test.describe("Code graph tests", () => { ); expect(containsDetails).toBe(true); }); - -}); + + test(`Validate view node panel keys for required and optional fields`, async () => { + const codeGraph = await browser.createNewPage(CodeGraph, urls.baseUrl); + await codeGraph.selectGraph(GRAPH_ID); + const analysis = await codeGraph.getCanvasAnalysis(); + const requiredKeys: string[] = ['id', 'name', 'args', 'path', 'src_end', 'src_start']; + const optionalKeys: string[] = ['src']; + await Promise.all( + analysis.green.slice(0, 2).map(async (node) => { + await codeGraph.rightClickOnNode(node.x, node.y); + const elements = await codeGraph.getNodeDetailsPanelElements(); + + requiredKeys.forEach((key) => { + const isKeyPresent = elements.some((element) => element.includes(key)); + expect(isKeyPresent).toBe(true); + }); + optionalKeys.forEach((key) => { + const isKeyPresent = elements.some((element) => element.includes(key)); + if (isKeyPresent) { + expect(isKeyPresent).toBe(true); + } + }); + }) + ); + }); + + }); From c718e9095e91875fde21dd410a7bdda94878f058 Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Tue, 10 Dec 2024 14:28:51 +0200 Subject: [PATCH 29/60] commit --- app/components/chat.tsx | 28 +++++----- app/components/code-graph.tsx | 17 ++++++- app/components/elementMenu.tsx | 4 +- app/components/graphView.tsx | 93 ++++++++++++++++++++++++++++++---- 4 files changed, 114 insertions(+), 28 deletions(-) diff --git a/app/components/chat.tsx b/app/components/chat.tsx index 228cd78f..3c935bcb 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -4,7 +4,7 @@ import Image from "next/image"; import { AlignLeft, ArrowDown, ArrowRight, ChevronDown, Lightbulb, Undo2 } from "lucide-react"; import { Path } from "../page"; import Input from "./Input"; -import { Graph, GraphData, Link } from "./model"; +import { Graph, GraphData } from "./model"; import { cn } from "@/lib/utils"; import { TypeAnimation } from "react-type-animation"; import { DropdownMenu, DropdownMenuContent, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"; @@ -80,8 +80,8 @@ interface Props { setPath: Dispatch> graph: Graph selectedPathId: number | undefined - isPathResponse: boolean | undefined - setIsPathResponse: (isPathResponse: boolean | undefined) => void + isPathResponse: boolean + setIsPathResponse: (isPathResponse: boolean) => void setData: Dispatch> } @@ -95,12 +95,12 @@ const SUGGESTIONS = [ const RemoveLastPath = (messages: Message[]) => { const index = messages.findIndex((m) => m.type === MessageTypes.Path) - + if (index !== -1) { messages = [...messages.slice(0, index - 2), ...messages.slice(index + 1)]; messages = RemoveLastPath(messages) } - + return messages } @@ -108,7 +108,7 @@ export function Chat({ repo, path, setPath, graph, selectedPathId, isPathRespons // Holds the messages in the chat const [messages, setMessages] = useState([]); - + // Holds the messages in the chat const [paths, setPaths] = useState([]); @@ -118,22 +118,22 @@ export function Chat({ repo, path, setPath, graph, selectedPathId, isPathRespons const [query, setQuery] = useState(''); const [tipOpen, setTipOpen] = useState(false); - + const [sugOpen, setSugOpen] = useState(false); - + // A reference to the chat container to allow scrolling to the bottom const containerRef: React.RefObject = useRef(null); - + const isSendMessage = messages.some(m => m.type === MessageTypes.Pending) || (messages.some(m => m.text === "Please select a starting point and the end point. Select or press relevant item on the graph") && !messages.some(m => m.type === MessageTypes.Path)) - + useEffect(() => { const p = paths.find((path) => [...path.links, ...path.nodes].some((e: any) => e.id === selectedPathId)) if (!p) return - + handelSetSelectedPath(p) }, [selectedPathId]) - + // Scroll to the bottom of the chat on new message useEffect(() => { setTimeout(() => { @@ -279,7 +279,7 @@ export function Chat({ repo, path, setPath, graph, selectedPathId, isPathRespons return } - const formattedPaths: PathData[] = json.result.paths.map((p: any) => ({ nodes: p.filter((n: any, i: number) => i % 2 === 0), links: p.filter((l: any , i: number) => i % 2 !== 0) })) + const formattedPaths: PathData[] = json.result.paths.map((p: any) => ({ nodes: p.filter((n: any, i: number) => i % 2 === 0), links: p.filter((l: any, i: number) => i % 2 !== 0) })) formattedPaths.forEach((p: any) => graph.extend(p, false, path)) setPaths(formattedPaths) @@ -392,7 +392,7 @@ export function Chat({ repo, path, setPath, graph, selectedPathId, isPathRespons onClick={() => { if (selectedPath?.nodes.every(node => p?.nodes.some((n) => n.id === node.id)) && selectedPath.nodes.length === p.nodes.length) return if (!isPathResponse) { - setIsPathResponse(undefined) + setIsPathResponse(true) } handelSetSelectedPath(p) }} diff --git a/app/components/code-graph.tsx b/app/components/code-graph.tsx index 4c72731c..c7e2295f 100644 --- a/app/components/code-graph.tsx +++ b/app/components/code-graph.tsx @@ -51,7 +51,6 @@ export function CodeGraph({ let graph = useContext(GraphContext) - const [url, setURL] = useState(""); const [selectedObj, setSelectedObj] = useState(); const [selectedObjects, setSelectedObjects] = useState([]); @@ -64,6 +63,8 @@ export function CodeGraph({ const [commitIndex, setCommitIndex] = useState(0); const [currentCommit, setCurrentCommit] = useState(0); const [containerWidth, setContainerWidth] = useState(0); + const [cooldownTicks, setCooldownTicks] = useState() + const [cooldownTime, setCooldownTime] = useState(2000) const containerRef = useRef(null); useEffect(() => { @@ -169,6 +170,9 @@ export function CodeGraph({ graph.visibleLinks() + setCooldownTicks(undefined) + setCooldownTime(1000) + setData({ ...graph.Elements }) } @@ -237,6 +241,8 @@ export function CodeGraph({ chartNode = graph.extend({ nodes: [node], edges: [] }).nodes[0] } else { chartNode.visibility = true + setCooldownTicks(undefined) + setCooldownTime(1000) } graph.visibleLinks([chartNode.id], true) } @@ -259,6 +265,9 @@ export function CodeGraph({ graph.visibleLinks(ids, false) + setCooldownTicks(undefined) + setCooldownTime(1000) + setData({ ...graph.Elements }) } @@ -355,7 +364,9 @@ export function CodeGraph({ graph={graph} chartRef={chartRef} selectedObj={selectedObj} + selectedObjects={selectedObjects} setSelectedObj={setSelectedObj} + setSelectedObjects={setSelectedObjects} setPosition={setPosition} onFetchNode={onFetchNode} deleteNeighbors={deleteNeighbors} @@ -365,6 +376,10 @@ export function CodeGraph({ isPathResponse={isPathResponse} selectedPathId={selectedPathId} setSelectedPathId={setSelectedPathId} + cooldownTicks={cooldownTicks} + setCooldownTicks={setCooldownTicks} + cooldownTime={cooldownTime} + setCooldownTime={setCooldownTime} />
:
diff --git a/app/components/elementMenu.tsx b/app/components/elementMenu.tsx index facc7c96..100f42f5 100644 --- a/app/components/elementMenu.tsx +++ b/app/components/elementMenu.tsx @@ -2,9 +2,9 @@ import { Dispatch, RefObject, SetStateAction, useEffect, useState } from "react"; import { Node } from "./model"; -import { ChevronLeft, ChevronRight, ChevronsLeftRight, Copy, EyeOff, Globe, Maximize2, Minimize2, Waypoints } from "lucide-react"; +import { ChevronsLeftRight, Copy, EyeOff, Globe, Maximize2, Minimize2, Waypoints } from "lucide-react"; import DataPanel from "./dataPanel"; -import { EventObject, Position } from "cytoscape"; +import { Position } from "cytoscape"; import { Path } from "../page"; interface Props { diff --git a/app/components/graphView.tsx b/app/components/graphView.tsx index 15812a18..c65b185e 100644 --- a/app/components/graphView.tsx +++ b/app/components/graphView.tsx @@ -1,7 +1,7 @@ import ForceGraph2D from 'react-force-graph-2d'; import { Graph, GraphData, Link, Node } from './model'; -import { Dispatch, Ref, RefObject, SetStateAction, useCallback } from 'react'; +import { Dispatch, Ref, RefObject, SetStateAction, useCallback, useEffect, useState } from 'react'; import { toast } from '@/components/ui/use-toast'; import { Path } from '../page'; @@ -17,6 +17,8 @@ interface Props { chartRef: RefObject selectedObj: Node | undefined setSelectedObj: Dispatch> + selectedObjects: Node[] + setSelectedObjects: Dispatch> setPosition: Dispatch> onFetchNode: (nodeIds: number[]) => Promise deleteNeighbors: (nodes: Node[]) => void @@ -26,9 +28,14 @@ interface Props { isPathResponse: boolean | undefined selectedPathId: number | undefined setSelectedPathId: (selectedPathId: number) => void + cooldownTicks: number | undefined + setCooldownTicks: Dispatch> + cooldownTime: number | undefined + setCooldownTime: Dispatch> } const NODE_SIZE = 6; +const PADDING = 2; export default function GraphView({ data, @@ -37,6 +44,8 @@ export default function GraphView({ chartRef, selectedObj, setSelectedObj, + selectedObjects, + setSelectedObjects, setPosition, onFetchNode, deleteNeighbors, @@ -45,10 +54,26 @@ export default function GraphView({ setPath, isPathResponse, selectedPathId, - setSelectedPathId + setSelectedPathId, + cooldownTicks, + cooldownTime, + setCooldownTicks, + setCooldownTime }: Props) { - const unsetSelectedObj = () => { + + useEffect(() => { + setCooldownTicks(undefined) + setCooldownTime(2000) + }, [graph.Id]) + + useEffect(() => { + setCooldownTicks(undefined) + setCooldownTime(1000) + }, [graph.getElements().length]) + + const unsetSelectedObjects = () => { setSelectedObj(undefined) + setSelectedObjects([]) } const handelNodeClick = (node: Node, evt: MouseEvent) => { @@ -62,11 +87,23 @@ export default function GraphView({ }) return } + + if (evt.ctrlKey) { + if (selectedObjects.some(obj => obj.id === node.id)) { + setSelectedObjects(selectedObjects.filter(obj => obj.id !== node.id)) + } else { + setSelectedObjects([...selectedObjects, node]) + } + } else { + setSelectedObjects([]) + } + setSelectedObj(node) setPosition({ x: evt.clientX, y: evt.clientY }) } const handelLinkClick = (link: Link) => { + unsetSelectedObjects() if (!isPathResponse || link.id === selectedPathId) return setSelectedPathId(link.id) } @@ -125,7 +162,7 @@ export default function GraphView({ ctx.lineWidth = 0.5 } else { ctx.fillStyle = '#E5E5E5'; - ctx.strokeStyle = 'black'; + ctx.strokeStyle = 'gray'; ctx.lineWidth = 0.5 } } else if (isPathResponse === undefined) { @@ -140,18 +177,38 @@ export default function GraphView({ } else { ctx.fillStyle = node.color; ctx.strokeStyle = 'black'; - ctx.lineWidth = selectedObj?.id === node.id ? 1 : 0.5 + ctx.lineWidth = selectedObjects.some(obj => obj.id === node.id) || selectedObj?.id === node.id ? 1 : 0.5 } } else { ctx.fillStyle = node.color; ctx.strokeStyle = 'black'; - ctx.lineWidth = selectedObj?.id === node.id ? 1 : 0.5 + ctx.lineWidth = selectedObjects.some(obj => obj.id === node.id) || selectedObj?.id === node.id ? 1 : 0.5 + } + + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + ctx.font = '4px Arial'; + const textWidth = ctx.measureText(node.name).width; + const ellipsis = '...'; + const ellipsisWidth = ctx.measureText(ellipsis).width; + const nodeSize = NODE_SIZE * 2 - PADDING; + + let { name } = { ...node } + + if (textWidth > nodeSize) { + name = node.name; + while (name.length > 0 && ctx.measureText(name).width + ellipsisWidth > nodeSize) { + name = name.slice(0, -1); + } + name += ellipsis; } ctx.beginPath(); ctx.arc(node.x, node.y, NODE_SIZE, 0, 2 * Math.PI, false); ctx.stroke(); ctx.fill(); + ctx.fillStyle = 'black'; + ctx.fillText(name, node.x, node.y); }} linkCanvasObject={(link, ctx) => { if (!link.source.x || !link.source.y || !link.target.x || !link.target.y) return @@ -175,19 +232,33 @@ export default function GraphView({ ctx.lineWidth = 0.5 ctx.setLineDash([]); } + ctx.beginPath(); ctx.moveTo(link.source.x, link.source.y); ctx.lineTo(link.target.x, link.target.y); ctx.stroke(); - ctx.fill(); + const midX = (link.source.x + link.target.x) / 2; + const midY = (link.source.y + link.target.y) / 2; + ctx.fillStyle = 'white'; + const labelWidth = ctx.measureText(link.label).width + ctx.fillRect(midX - (labelWidth + 1) / 2, midY - 2.184, labelWidth + 1, 3.833); + ctx.fillStyle = 'black'; + ctx.font = '4px Arial'; + ctx.fillText(link.label, midX, midY); }} onNodeClick={handelNodeClick} - onNodeDrag={unsetSelectedObj} + onNodeDrag={unsetSelectedObjects} onNodeRightClick={handelNodeRightClick} onLinkClick={handelLinkClick} - onBackgroundRightClick={unsetSelectedObj} - onBackgroundClick={unsetSelectedObj} - onZoom={unsetSelectedObj} + onBackgroundRightClick={unsetSelectedObjects} + onBackgroundClick={unsetSelectedObjects} + onZoom={unsetSelectedObjects} + onEngineStop={() => { + setCooldownTicks(0) + setCooldownTime(500) + }} + cooldownTicks={cooldownTicks} + cooldownTime={cooldownTime} />
) From 9d3cc34fe93ae63148a9b3771a0fb76ff385cbd8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Dec 2024 02:31:14 +0000 Subject: [PATCH 30/60] Bump eslint-config-next from 15.0.3 to 15.1.0 Bumps [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) from 15.0.3 to 15.1.0. - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/commits/v15.1.0/packages/eslint-config-next) --- updated-dependencies: - dependency-name: eslint-config-next dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 202 ++++++++++++++++++++++++++-------------------- package.json | 2 +- 2 files changed, 116 insertions(+), 88 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7f9ee2b1..9daa3060 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43,7 +43,7 @@ "@types/react-dom": "^18", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", - "eslint-config-next": "15.0.3", + "eslint-config-next": "15.1.0", "tailwindcss": "^3.4.3", "typescript": "^5" } @@ -753,10 +753,11 @@ "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.0.3.tgz", - "integrity": "sha512-3Ln/nHq2V+v8uIaxCR6YfYo7ceRgZNXfTd3yW1ukTaFbO+/I8jNakrjYWODvG9BuR2v5kgVtH/C8r0i11quOgw==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.0.tgz", + "integrity": "sha512-+jPT0h+nelBT6HC9ZCHGc7DgGVy04cv4shYdAe6tKlEbjQUtwU3LzQhzbDHQyY2m6g39m6B0kOFVuLGBrxxbGg==", "dev": true, + "license": "MIT", "dependencies": { "fast-glob": "3.3.1" } @@ -766,6 +767,7 @@ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -782,6 +784,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -2648,17 +2651,16 @@ } }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" }, "engines": { "node": ">= 0.4" @@ -2667,6 +2669,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -3092,6 +3108,34 @@ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", "license": "MIT" }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.0.tgz", + "integrity": "sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -3124,9 +3168,9 @@ } }, "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "version": "1.23.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", + "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3145,7 +3189,7 @@ "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", + "globalthis": "^1.0.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", @@ -3161,10 +3205,10 @@ "is-string": "^1.0.7", "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "object-inspect": "^1.13.3", "object-keys": "^1.1.1", "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", + "regexp.prototype.flags": "^1.5.3", "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", "string.prototype.trim": "^1.2.9", @@ -3208,9 +3252,9 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", - "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz", + "integrity": "sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==", "dev": true, "license": "MIT", "dependencies": { @@ -3221,12 +3265,13 @@ "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", + "globalthis": "^1.0.4", + "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", "has-symbols": "^1.0.3", "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.2", + "iterator.prototype": "^1.1.3", "safe-array-concat": "^1.1.2" }, "engines": { @@ -3371,12 +3416,13 @@ } }, "node_modules/eslint-config-next": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.0.3.tgz", - "integrity": "sha512-IGP2DdQQrgjcr4mwFPve4DrCqo7CVVez1WoYY47XwKSrYO4hC0Dlb+iJA60i0YfICOzgNADIb8r28BpQ5Zs0wg==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.1.0.tgz", + "integrity": "sha512-gADO+nKVseGso3DtOrYX9H7TxB/MuX7AUYhMlvQMqLYvUWu4HrOQuU7cC1HW74tHIqkAvXdwgAz3TCbczzSEXw==", "dev": true, + "license": "MIT", "dependencies": { - "@next/eslint-plugin-next": "15.0.3", + "@next/eslint-plugin-next": "15.1.0", "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", @@ -3384,7 +3430,7 @@ "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jsx-a11y": "^6.10.0", - "eslint-plugin-react": "^7.35.0", + "eslint-plugin-react": "^7.37.0", "eslint-plugin-react-hooks": "^5.0.0" }, "peerDependencies": { @@ -3515,19 +3561,6 @@ "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -3568,9 +3601,9 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.35.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.0.tgz", - "integrity": "sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==", + "version": "7.37.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", + "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", "dev": true, "license": "MIT", "dependencies": { @@ -3579,7 +3612,7 @@ "array.prototype.flatmap": "^1.3.2", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.19", + "es-iterator-helpers": "^1.1.0", "estraverse": "^5.3.0", "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", @@ -3612,19 +3645,6 @@ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint-plugin-react/node_modules/resolve": { "version": "2.0.0-next.5", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", @@ -4153,13 +4173,13 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4547,13 +4567,16 @@ } }, "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz", + "integrity": "sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4807,9 +4830,9 @@ "license": "ISC" }, "node_modules/iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", + "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4818,6 +4841,9 @@ "has-symbols": "^1.0.3", "reflect.getprototypeof": "^1.0.4", "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/jackspeak": { @@ -5260,9 +5286,9 @@ } }, "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "dev": true, "license": "MIT", "engines": { @@ -5976,19 +6002,20 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", - "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.8.tgz", + "integrity": "sha512-B5dj6usc5dkk8uFliwjwDHM8To5/QwdKz9JcBZ8Ic4G1f0YmeeJTtE/ZTdgRFPAfxZFiUaPhZ1Jcs4qeagItGQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.23.1", + "dunder-proto": "^1.0.0", + "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" + "gopd": "^1.2.0", + "which-builtin-type": "^1.2.0" }, "engines": { "node": ">= 0.4" @@ -6025,16 +6052,16 @@ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -7009,17 +7036,18 @@ } }, "node_modules/which-builtin-type": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", - "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.0.tgz", + "integrity": "sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==", "dev": true, "license": "MIT", "dependencies": { + "call-bind": "^1.0.7", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", + "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", "is-regex": "^1.1.4", "is-weakref": "^1.0.2", diff --git a/package.json b/package.json index c16840ce..59ee8bfc 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "@types/react-dom": "^18", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", - "eslint-config-next": "15.0.3", + "eslint-config-next": "15.1.0", "tailwindcss": "^3.4.3", "typescript": "^5" } From 76e57e10d10129815c16a2173e339dfa5e16a6f8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Dec 2024 02:31:28 +0000 Subject: [PATCH 31/60] Bump next from 15.0.3 to 15.1.0 Bumps [next](https://github.com/vercel/next.js) from 15.0.3 to 15.1.0. - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/compare/v15.0.3...v15.1.0) --- updated-dependencies: - dependency-name: next dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 100 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 51 insertions(+), 51 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7f9ee2b1..afe71ea8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "cytoscape": "^3.30.4", "cytoscape-fcose": "^2.2.0", "lucide-react": "^0.441.0", - "next": "15.0.3", + "next": "15.1.0", "react": "^18", "react-cytoscapejs": "^2.0.0", "react-dom": "^18", @@ -747,9 +747,9 @@ } }, "node_modules/@next/env": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.0.3.tgz", - "integrity": "sha512-t9Xy32pjNOvVn2AS+Utt6VmyrshbpfUMhIjFO60gI58deSo/KgLOp31XZ4O+kY/Is8WAGYwA5gR7kOb1eORDBA==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.1.0.tgz", + "integrity": "sha512-UcCO481cROsqJuszPPXJnb7GGuLq617ve4xuAyyNG4VSSocJNtMU5Fsx+Lp6mlN8c7W58aZLc5y6D/2xNmaK+w==", "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { @@ -790,9 +790,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.0.3.tgz", - "integrity": "sha512-s3Q/NOorCsLYdCKvQlWU+a+GeAd3C8Rb3L1YnetsgwXzhc3UTWrtQpB/3eCjFOdGUj5QmXfRak12uocd1ZiiQw==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.1.0.tgz", + "integrity": "sha512-ZU8d7xxpX14uIaFC3nsr4L++5ZS/AkWDm1PzPO6gD9xWhFkOj2hzSbSIxoncsnlJXB1CbLOfGVN4Zk9tg83PUw==", "cpu": [ "arm64" ], @@ -806,9 +806,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.0.3.tgz", - "integrity": "sha512-Zxl/TwyXVZPCFSf0u2BNj5sE0F2uR6iSKxWpq4Wlk/Sv9Ob6YCKByQTkV2y6BCic+fkabp9190hyrDdPA/dNrw==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.1.0.tgz", + "integrity": "sha512-DQ3RiUoW2XC9FcSM4ffpfndq1EsLV0fj0/UY33i7eklW5akPUCo6OX2qkcLXZ3jyPdo4sf2flwAED3AAq3Om2Q==", "cpu": [ "x64" ], @@ -822,9 +822,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.0.3.tgz", - "integrity": "sha512-T5+gg2EwpsY3OoaLxUIofmMb7ohAUlcNZW0fPQ6YAutaWJaxt1Z1h+8zdl4FRIOr5ABAAhXtBcpkZNwUcKI2fw==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.1.0.tgz", + "integrity": "sha512-M+vhTovRS2F//LMx9KtxbkWk627l5Q7AqXWWWrfIzNIaUFiz2/NkOFkxCFyNyGACi5YbA8aekzCLtbDyfF/v5Q==", "cpu": [ "arm64" ], @@ -838,9 +838,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.0.3.tgz", - "integrity": "sha512-WkAk6R60mwDjH4lG/JBpb2xHl2/0Vj0ZRu1TIzWuOYfQ9tt9NFsIinI1Epma77JVgy81F32X/AeD+B2cBu/YQA==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.1.0.tgz", + "integrity": "sha512-Qn6vOuwaTCx3pNwygpSGtdIu0TfS1KiaYLYXLH5zq1scoTXdwYfdZtwvJTpB1WrLgiQE2Ne2kt8MZok3HlFqmg==", "cpu": [ "arm64" ], @@ -854,9 +854,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.0.3.tgz", - "integrity": "sha512-gWL/Cta1aPVqIGgDb6nxkqy06DkwJ9gAnKORdHWX1QBbSZZB+biFYPFti8aKIQL7otCE1pjyPaXpFzGeG2OS2w==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.1.0.tgz", + "integrity": "sha512-yeNh9ofMqzOZ5yTOk+2rwncBzucc6a1lyqtg8xZv0rH5znyjxHOWsoUtSq4cUTeeBIiXXX51QOOe+VoCjdXJRw==", "cpu": [ "x64" ], @@ -870,9 +870,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.0.3.tgz", - "integrity": "sha512-QQEMwFd8r7C0GxQS62Zcdy6GKx999I/rTO2ubdXEe+MlZk9ZiinsrjwoiBL5/57tfyjikgh6GOU2WRQVUej3UA==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.1.0.tgz", + "integrity": "sha512-t9IfNkHQs/uKgPoyEtU912MG6a1j7Had37cSUyLTKx9MnUpjj+ZDKw9OyqTI9OwIIv0wmkr1pkZy+3T5pxhJPg==", "cpu": [ "x64" ], @@ -886,9 +886,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.0.3.tgz", - "integrity": "sha512-9TEp47AAd/ms9fPNgtgnT7F3M1Hf7koIYYWCMQ9neOwjbVWJsHZxrFbI3iEDJ8rf1TDGpmHbKxXf2IFpAvheIQ==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.1.0.tgz", + "integrity": "sha512-WEAoHyG14t5sTavZa1c6BnOIEukll9iqFRTavqRVPfYmfegOAd5MaZfXgOGG6kGo1RduyGdTHD4+YZQSdsNZXg==", "cpu": [ "arm64" ], @@ -902,9 +902,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.0.3.tgz", - "integrity": "sha512-VNAz+HN4OGgvZs6MOoVfnn41kBzT+M+tB+OK4cww6DNyWS6wKaDpaAm/qLeOUbnMh0oVx1+mg0uoYARF69dJyA==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.1.0.tgz", + "integrity": "sha512-J1YdKuJv9xcixzXR24Dv+4SaDKc2jj31IVUEMdO5xJivMTXuE6MAdIi4qPjSymHuFG8O5wbfWKnhJUcHHpj5CA==", "cpu": [ "x64" ], @@ -1891,12 +1891,12 @@ "license": "Apache-2.0" }, "node_modules/@swc/helpers": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz", - "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==", + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", "license": "Apache-2.0", "dependencies": { - "tslib": "^2.4.0" + "tslib": "^2.8.0" } }, "node_modules/@types/cytoscape": { @@ -5138,14 +5138,14 @@ "license": "MIT" }, "node_modules/next": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/next/-/next-15.0.3.tgz", - "integrity": "sha512-ontCbCRKJUIoivAdGB34yCaOcPgYXr9AAkV/IwqFfWWTXEPUgLYkSkqBhIk9KK7gGmgjc64B+RdoeIDM13Irnw==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/next/-/next-15.1.0.tgz", + "integrity": "sha512-QKhzt6Y8rgLNlj30izdMbxAwjHMFANnLwDwZ+WQh5sMhyt4lEBqDK9QpvWHtIM4rINKPoJ8aiRZKg5ULSybVHw==", "license": "MIT", "dependencies": { - "@next/env": "15.0.3", + "@next/env": "15.1.0", "@swc/counter": "0.1.3", - "@swc/helpers": "0.5.13", + "@swc/helpers": "0.5.15", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", @@ -5158,22 +5158,22 @@ "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "15.0.3", - "@next/swc-darwin-x64": "15.0.3", - "@next/swc-linux-arm64-gnu": "15.0.3", - "@next/swc-linux-arm64-musl": "15.0.3", - "@next/swc-linux-x64-gnu": "15.0.3", - "@next/swc-linux-x64-musl": "15.0.3", - "@next/swc-win32-arm64-msvc": "15.0.3", - "@next/swc-win32-x64-msvc": "15.0.3", + "@next/swc-darwin-arm64": "15.1.0", + "@next/swc-darwin-x64": "15.1.0", + "@next/swc-linux-arm64-gnu": "15.1.0", + "@next/swc-linux-arm64-musl": "15.1.0", + "@next/swc-linux-x64-gnu": "15.1.0", + "@next/swc-linux-x64-musl": "15.1.0", + "@next/swc-win32-arm64-msvc": "15.1.0", + "@next/swc-win32-x64-msvc": "15.1.0", "sharp": "^0.33.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.41.2", "babel-plugin-react-compiler": "*", - "react": "^18.2.0 || 19.0.0-rc-66855b96-20241106", - "react-dom": "^18.2.0 || 19.0.0-rc-66855b96-20241106", + "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "peerDependenciesMeta": { @@ -6750,9 +6750,9 @@ } }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, "node_modules/type-check": { diff --git a/package.json b/package.json index c16840ce..149c23e4 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "cytoscape": "^3.30.4", "cytoscape-fcose": "^2.2.0", "lucide-react": "^0.441.0", - "next": "15.0.3", + "next": "15.1.0", "react": "^18", "react-cytoscapejs": "^2.0.0", "react-dom": "^18", From faacbe89a9960b0b1971ad32cffdaf4676257b21 Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Thu, 12 Dec 2024 14:46:11 +0200 Subject: [PATCH 32/60] commit --- app/components/chat.tsx | 40 ++++++++--------- app/components/code-graph.tsx | 81 ++++++++++++++++++----------------- app/components/graphView.tsx | 66 +++++++++++++++++++++------- app/components/labels.tsx | 4 +- app/components/toolbar.tsx | 13 ++++-- app/page.tsx | 8 ++-- 6 files changed, 129 insertions(+), 83 deletions(-) diff --git a/app/components/chat.tsx b/app/components/chat.tsx index 9c5f112d..5f18f30e 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -81,8 +81,8 @@ interface Props { setPath: Dispatch> graph: Graph selectedPathId: number | undefined - isPathResponse: boolean - setIsPathResponse: (isPathResponse: boolean) => void + isPathResponse: boolean | undefined + setIsPathResponse: (isPathResponse: boolean | undefined) => void setData: Dispatch> } @@ -176,7 +176,6 @@ export function Chat({ repo, path, setPath, graph, selectedPathId, isPathRespons } return p }) - debugger if (isPathResponse && paths.length > 0 && paths.some((path) => [...path.nodes, ...path.links].every((e: any) => [...p.nodes, ...p.links].some((el: any) => el.id === e.id)))) { graph.Elements.links.forEach(e => { if (p.links.some(el => el.id === e.id)) { @@ -184,21 +183,20 @@ export function Chat({ repo, path, setPath, graph, selectedPathId, isPathRespons } }) } else { - console.log(p.nodes[p.nodes.length - 1].id, p.nodes[0].id); - console.log(graph.Elements.nodes.map(e => e.id)); - console.log(p.links.map(l => l.id)); - console.log(graph.Elements.links.map(e => e.id)); - const elements: any = { nodes: [], edges: [] }; - [...p.nodes, ...p.links].forEach(e => { - let element = graph.getElements().find(el => el.id === e.id) + const elements: PathData = { nodes: [], links: [] }; + p.nodes.forEach(node => { + let element = graph.Elements.nodes.find(n => n.id === node.id) if (!element) { - const type = "src_node" in e - e = type ? { ...e, id: e.id } : e - type - ? elements.edges.push(e) - : elements.nodes.push(e) + elements.nodes.push(node) } }) + p.links.forEach(link => { + let element = graph.Elements.links.find(l => l.id === link.id) + if (!element) { + elements.links.push(link) + } + }) + graph.extend(elements, true, { start: p.nodes[0], end: p.nodes[p.nodes.length - 1] }) graph.getElements().filter(e => "source" in e ? p.links.some(l => l.id === e.id) : p.nodes.some(n => n.id === e.id)).forEach(e => { if ((e.id === p.nodes[0].id || e.id === p.nodes[p.nodes.length - 1].id) || "source" in e) { e.isPathSelected = true @@ -402,9 +400,9 @@ export function Chat({ repo, path, setPath, graph, selectedPathId, isPathRespons key={i} className={cn( "flex text-wrap border p-2 gap-2 rounded-md", - p.nodes.length === selectedPath?.nodes.length - && selectedPath?.nodes.every(node => p?.nodes.some((n) => n.id === node.id)) - && "border-[#FF66B3] bg-[#FFF0F7]", + p.nodes.length === selectedPath?.nodes.length && + selectedPath?.nodes.every(node => p?.nodes.some((n) => n.id === node.id)) && + "border-[#FF66B3] bg-[#FFF0F7]", message.graphName !== graph.Id && "opacity-50 bg-gray-200" )} title={message.graphName !== graph.Id ? `Move to graph ${message.graphName} to use this path` : undefined} @@ -417,10 +415,12 @@ export function Chat({ repo, path, setPath, graph, selectedPathId, isPathRespons }); return; } - + if (selectedPath?.nodes.every(node => p?.nodes.some((n) => n.id === node.id)) && selectedPath.nodes.length === p.nodes.length) return + if (!isPathResponse) { - setIsPathResponse(true) + setIsPathResponse(undefined) + } handelSetSelectedPath(p) }} diff --git a/app/components/code-graph.tsx b/app/components/code-graph.tsx index bfac5df8..379d8204 100644 --- a/app/components/code-graph.tsx +++ b/app/components/code-graph.tsx @@ -64,17 +64,10 @@ export function CodeGraph({ const [edgesCount, setEdgesCount] = useState(0); const [commitIndex, setCommitIndex] = useState(0); const [currentCommit, setCurrentCommit] = useState(0); - const [containerWidth, setContainerWidth] = useState(0); const [cooldownTicks, setCooldownTicks] = useState() const [cooldownTime, setCooldownTime] = useState(2000) const containerRef = useRef(null); - useEffect(() => { - if (containerRef.current) { - setContainerWidth(containerRef.current.clientWidth); - } - }, [containerRef.current]); - useEffect(() => { setData({ ...graph.Elements }) }, [graph]) @@ -159,22 +152,15 @@ export function CodeGraph({ } function onCategoryClick(name: string, show: boolean) { - const elements: Node[] = [] - graph.Categories.find(c => c.name === name)!.show = show graph.Elements.nodes.forEach(node => { - if (node.category === name) { - node.visibility = show - elements.push(node) - } + if (!(node.category === name)) return + node.visibility = show }) graph.visibleLinks() - setCooldownTicks(undefined) - setCooldownTime(1000) - setData({ ...graph.Elements }) } @@ -260,16 +246,13 @@ export function CodeGraph({ } const handelRemove = (ids: number[]) => { - graph.Elements = { - nodes: graph.Elements.nodes.map(node => ids.includes(node.id) ? { ...node, visibility: false } : node), - links: graph.Elements.links - } + graph.Elements.nodes.forEach(node => { + if (!ids.includes(node.id)) return + node.visibility = false + }) graph.visibleLinks(ids, false) - setCooldownTicks(undefined) - setCooldownTime(1000) - setData({ ...graph.Elements }) } @@ -300,22 +283,42 @@ export function CodeGraph({ />
- { - (isPathResponse || isPathResponse === undefined) && - - } +
+ { + (isPathResponse || isPathResponse === undefined) && + + } + { + (graph.Elements.nodes.some(e => !e.visibility)) && + + } +
diff --git a/app/components/graphView.tsx b/app/components/graphView.tsx index c65b185e..1c0c698c 100644 --- a/app/components/graphView.tsx +++ b/app/components/graphView.tsx @@ -71,7 +71,8 @@ export default function GraphView({ setCooldownTime(1000) }, [graph.getElements().length]) - const unsetSelectedObjects = () => { + const unsetSelectedObjects = (evt?: MouseEvent) => { + if (evt?.ctrlKey) return setSelectedObj(undefined) setSelectedObjects([]) } @@ -91,19 +92,20 @@ export default function GraphView({ if (evt.ctrlKey) { if (selectedObjects.some(obj => obj.id === node.id)) { setSelectedObjects(selectedObjects.filter(obj => obj.id !== node.id)) + return } else { setSelectedObjects([...selectedObjects, node]) } - } else { + } else { setSelectedObjects([]) } - + setSelectedObj(node) setPosition({ x: evt.clientX, y: evt.clientY }) } - const handelLinkClick = (link: Link) => { - unsetSelectedObjects() + const handelLinkClick = (link: Link, evt: MouseEvent) => { + unsetSelectedObjects(evt) if (!isPathResponse || link.id === selectedPathId) return setSelectedPathId(link.id) } @@ -185,6 +187,12 @@ export default function GraphView({ ctx.lineWidth = selectedObjects.some(obj => obj.id === node.id) || selectedObj?.id === node.id ? 1 : 0.5 } + ctx.beginPath(); + ctx.arc(node.x, node.y, NODE_SIZE, 0, 2 * Math.PI, false); + ctx.stroke(); + ctx.fill(); + + ctx.fillStyle = 'black'; ctx.textAlign = 'center'; ctx.textBaseline = 'middle'; ctx.font = '4px Arial'; @@ -192,9 +200,9 @@ export default function GraphView({ const ellipsis = '...'; const ellipsisWidth = ctx.measureText(ellipsis).width; const nodeSize = NODE_SIZE * 2 - PADDING; - let { name } = { ...node } + // truncate text if it's too long if (textWidth > nodeSize) { name = node.name; while (name.length > 0 && ctx.measureText(name).width + ellipsisWidth > nodeSize) { @@ -203,16 +211,13 @@ export default function GraphView({ name += ellipsis; } - ctx.beginPath(); - ctx.arc(node.x, node.y, NODE_SIZE, 0, 2 * Math.PI, false); - ctx.stroke(); - ctx.fill(); - ctx.fillStyle = 'black'; + // add label ctx.fillText(name, node.x, node.y); }} linkCanvasObject={(link, ctx) => { if (!link.source.x || !link.source.y || !link.target.x || !link.target.y) return + //give path links a different color if (isPathResponse || isPathResponse === undefined) { if (link.isPathSelected) { ctx.strokeStyle = '#FF66B3'; @@ -234,28 +239,57 @@ export default function GraphView({ } ctx.beginPath(); - ctx.moveTo(link.source.x, link.source.y); - ctx.lineTo(link.target.x, link.target.y); + + if (link.source.id === link.target.id) { + // handel self closing link + ctx.lineWidth = ctx.lineWidth * 2 + ctx.moveTo(link.source.x, link.source.y); + ctx.arcTo(link.target.x + 20, link.target.y + 35, link.target.x - 20, link.target.y + 20, 10); + ctx.arcTo(link.target.x - 20, link.target.y + 20, link.target.x, link.target.y, 10); + ctx.closePath(); + } else { + if (link.source.id === 4) { + console.log(link.source.x, link.source.y); + } + + // handel multiple links between same nodes + const sameNodeLinks = data.links.filter(l => + (l.source.id === link.source.id && l.target.id === link.target.id) || + (l.source.id === link.target.id && l.target.id === link.source.id) + ); + + const linkIndex = sameNodeLinks.findIndex(l => l.id === link.id); + const offset = (linkIndex - (sameNodeLinks.length - 1) / 2) * 5; + + // add link + ctx.moveTo(link.source.x, link.source.y); + ctx.lineTo(link.target.x + offset, link.target.y + offset); + } ctx.stroke(); + + // add label box const midX = (link.source.x + link.target.x) / 2; const midY = (link.source.y + link.target.y) / 2; ctx.fillStyle = 'white'; + ctx.fill(); const labelWidth = ctx.measureText(link.label).width ctx.fillRect(midX - (labelWidth + 1) / 2, midY - 2.184, labelWidth + 1, 3.833); + + // add label ctx.fillStyle = 'black'; ctx.font = '4px Arial'; ctx.fillText(link.label, midX, midY); }} onNodeClick={handelNodeClick} - onNodeDrag={unsetSelectedObjects} + onNodeDrag={() => unsetSelectedObjects()} onNodeRightClick={handelNodeRightClick} onLinkClick={handelLinkClick} onBackgroundRightClick={unsetSelectedObjects} onBackgroundClick={unsetSelectedObjects} - onZoom={unsetSelectedObjects} + onZoom={() => unsetSelectedObjects()} onEngineStop={() => { setCooldownTicks(0) - setCooldownTime(500) + setCooldownTime(0) }} cooldownTicks={cooldownTicks} cooldownTime={cooldownTime} diff --git a/app/components/labels.tsx b/app/components/labels.tsx index 5defa8ab..923ee3f1 100644 --- a/app/components/labels.tsx +++ b/app/components/labels.tsx @@ -8,9 +8,9 @@ export function Labels(params: { categories: Category[], className?: string, onC const [reload, setReload] = useState(false) return ( -
+
{params.categories.map((category) => -
+
{ diff --git a/app/components/toolbar.tsx b/app/components/toolbar.tsx index 0ddd351b..f718d741 100644 --- a/app/components/toolbar.tsx +++ b/app/components/toolbar.tsx @@ -9,13 +9,20 @@ interface Props { export function Toolbar({ chartRef, className }: Props) { - function handleZoomClick(changefactor: number) { - let chart = chartRef.current + const handleZoomClick = (changefactor: number) => { + const chart = chartRef.current if (chart) { chart.zoom(chart.zoom() * changefactor) } } + const handleCenterClick = () => { + const chart = chartRef.current + if (chart) { + chart.zoomToFit(1000, 40) + } + } + return (
) diff --git a/app/components/model.ts b/app/components/model.ts index 27b4f25f..99cd8d05 100644 --- a/app/components/model.ts +++ b/app/components/model.ts @@ -33,20 +33,21 @@ export type Link = { collapsed: boolean, isPathSelected: boolean, isPath: boolean, - [key: string]: any, } const COLORS_ORDER_NAME = [ - "pink", - "yellow", "blue", + "pink", + "orange", + "turquoise", ] const COLORS_ORDER = [ - "#F43F5F", - "#E9B306", - "#15B8A6", + "#7466FF", + "#FF66B3", + "#FF804D", + "#80E6E6", ] export function getCategoryColorValue(index: number): string { @@ -163,7 +164,7 @@ export class Graph { }) if (!("edges" in results)) { - results.edges = results.links + results.edges = results.links } results.edges.forEach((edgeData: any) => { diff --git a/tailwind.config.js b/tailwind.config.js index f0c4cb6f..7c016e9d 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -23,9 +23,10 @@ module.exports = { }, extend: { colors: { - pink: "#F43F5F", - yellow: "#E9B306", - blue: "#15B8A6", + blue: "#7466FF", + turquoise: "#80E6E6", + orange: "#FF804D", + pink: "#FF66B3", border: "hsl(var(--border))", input: "hsl(var(--input))", ring: "hsl(var(--ring))", From 5ed5aa315ecefe7256ebc15be6e64ef91ce35791 Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Sun, 15 Dec 2024 16:43:04 +0200 Subject: [PATCH 34/60] commit --- app/parsers/tree-sitter-java.wasm | Bin 445456 -> 0 bytes app/parsers/tree-sitter-python.wasm | Bin 477112 -> 0 bytes app/parsers/tree-sitter-rust.wasm | Bin 1024625 -> 0 bytes app/parsers/tree-sitter-typescript.wasm | Bin 1398300 -> 0 bytes app/parsers/tree-sitter.wasm | Bin 187665 -> 0 bytes lib/languages/language.ts | 54 --- lib/languages/python.ts | 21 - package-lock.json | 516 ++++-------------------- package.json | 18 +- 9 files changed, 88 insertions(+), 521 deletions(-) delete mode 100644 app/parsers/tree-sitter-java.wasm delete mode 100755 app/parsers/tree-sitter-python.wasm delete mode 100644 app/parsers/tree-sitter-rust.wasm delete mode 100644 app/parsers/tree-sitter-typescript.wasm delete mode 100755 app/parsers/tree-sitter.wasm delete mode 100644 lib/languages/language.ts delete mode 100644 lib/languages/python.ts diff --git a/app/parsers/tree-sitter-java.wasm b/app/parsers/tree-sitter-java.wasm deleted file mode 100644 index 71ffc4a7d6d5a68b9730626947574bd1e8eccd5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 445456 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 VuEp2McLmuz`+V)!B>nkx{(sbe%uxUU diff --git a/app/parsers/tree-sitter-python.wasm b/app/parsers/tree-sitter-python.wasm deleted file mode 100755 index 69b540b10091209e0769222002589725808723ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 477112 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

8R!ej?ylL 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

8R!eKB8R; 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 Dq+~(y diff --git a/app/parsers/tree-sitter-typescript.wasm b/app/parsers/tree-sitter-typescript.wasm deleted file mode 100644 index e46182bfce4f22d2c4378ad3f711a591da928c2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1398300 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 x#jcf54~WJc*Y^?ia9t3EX}E_*e)hZT>}Uh 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 CLpr4ax3vUt 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 Ifyfp3A5QQVX#fBK diff --git a/lib/languages/language.ts b/lib/languages/language.ts deleted file mode 100644 index b2163444..00000000 --- a/lib/languages/language.ts +++ /dev/null @@ -1,54 +0,0 @@ -import path from 'path'; -import Parser from 'web-tree-sitter'; - -// Initialize Tree-Sitter parser -await Parser.init({ - locateFile(scriptName: string, scriptDirectory: string) { - return path.join(process.cwd(), 'app/parsers', scriptName); - }, -}); - -//----------------------------------------------------------------------------- -// Tree-Sitter queries -//----------------------------------------------------------------------------- -export default class Language { - - public language: Parser.Language; - - // class definition tree-sitter query - // responsible for matching class definition, in addition to extracting the class name - public class_definition_query: Parser.Query; - - // function definition tree-sitter query - // responsible for matching function definition, in addition to extracting the function name - public function_definition_query: Parser.Query; - - // function call tree-sitter query - // responsible for matching function calls, in addition to extracting the callee function name - public function_call_query: Parser.Query; - - // function call tree-sitter query - // responsible for matching function calls of type self.f() - // in addition to extracting the callee function name - public function_attr_call_query: Parser.Query; - - // identifier tree-sitter query - // responsible for matching Identifier nodes - public identifier_query: Parser.Query; - - constructor(language: Parser.Language, - class_definition_query: Parser.Query, - function_definition_query: Parser.Query, - function_call_query: Parser.Query, - function_attr_call_query: Parser.Query, - identifier_query: Parser.Query) { - - this.language = language; - this.class_definition_query = class_definition_query; - this.function_definition_query = function_definition_query; - this.function_call_query = function_call_query; - this.function_attr_call_query = function_attr_call_query; - this.identifier_query = identifier_query; - } - -} diff --git a/lib/languages/python.ts b/lib/languages/python.ts deleted file mode 100644 index 1053d4a6..00000000 --- a/lib/languages/python.ts +++ /dev/null @@ -1,21 +0,0 @@ -import path from 'path'; -import Parser from 'web-tree-sitter'; -import Language from './language'; - -const PYTHON_LANG = await Parser.Language.load(path.join(process.cwd(), 'app/parsers/tree-sitter-python.wasm')); - -//----------------------------------------------------------------------------- -// Tree-Sitter queries -//----------------------------------------------------------------------------- -export default class Python extends Language { - - constructor() { - super( - PYTHON_LANG, - PYTHON_LANG.query(`(class_definition name: (identifier) @class-name) @class-definition`), - PYTHON_LANG.query(`((function_definition name: (identifier) @function-name parameters: (parameters) @parameters) @function-definition)`), - PYTHON_LANG.query(`((call function: (identifier) @function-name) @function-call)`), - PYTHON_LANG.query(`((call function: (attribute object: (identifier) attribute: (identifier) @function-name )) @function-call)`), - PYTHON_LANG.query(`((identifier) @identifier)`)) - } -} diff --git a/package-lock.json b/package-lock.json index 3dc09555..ca3b7b78 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,24 +22,24 @@ "clsx": "^2.1.0", "cytoscape": "^3.30.4", "cytoscape-fcose": "^2.2.0", - "lucide-react": "^0.468.0", - "next": "15.1.0", + "lucide-react": "^0.441.0", + "next": "15.0.3", + "playwright": "^1.49.1", + "playwright-core": "^1.49.1", "react": "^18", "react-cytoscapejs": "^2.0.0", "react-dom": "^18", - "react-resizable-panels": "^2.1.7", + "react-resizable-panels": "^2.0.20", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", "tailwind-merge": "^2.5.5", - "tailwindcss-animate": "^1.0.7", - "web-tree-sitter": "^0.22.6" + "tailwindcss-animate": "^1.0.7" }, "devDependencies": { - "@playwright/test": "^1.49.0", - "@types/cytoscape-fcose": "^2.2.4", - "@types/node": "^22", + "@playwright/test": "^1.49.1", + "@types/cytoscape": "^3.21.8", + "@types/node": "^22.10.2", "@types/react": "^18", - "@types/react-cytoscapejs": "^1.2.5", "@types/react-dom": "^18", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", @@ -71,16 +71,6 @@ "node": ">=6.9.0" } }, - "node_modules/@emnapi/runtime": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", - "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -293,130 +283,6 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@img/sharp-darwin-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", - "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.0.4" - } - }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", - "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.0.4" - } - }, - "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", - "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", - "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", - "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", - "cpu": [ - "arm" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", - "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", - "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", - "cpu": [ - "s390x" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, "node_modules/@img/sharp-libvips-linux-x64": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", @@ -433,22 +299,6 @@ "url": "https://opencollective.com/libvips" } }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", - "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, "node_modules/@img/sharp-libvips-linuxmusl-x64": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", @@ -465,72 +315,6 @@ "url": "https://opencollective.com/libvips" } }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", - "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", - "cpu": [ - "arm" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.0.5" - } - }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", - "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.0.4" - } - }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", - "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", - "cpu": [ - "s390x" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.0.4" - } - }, "node_modules/@img/sharp-linux-x64": { "version": "0.33.5", "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", @@ -553,28 +337,6 @@ "@img/sharp-libvips-linux-x64": "1.0.4" } }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", - "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" - } - }, "node_modules/@img/sharp-linuxmusl-x64": { "version": "0.33.5", "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", @@ -597,63 +359,6 @@ "@img/sharp-libvips-linuxmusl-x64": "1.0.4" } }, - "node_modules/@img/sharp-wasm32": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", - "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", - "cpu": [ - "wasm32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", - "optional": true, - "dependencies": { - "@emnapi/runtime": "^1.2.0" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", - "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", - "cpu": [ - "ia32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", - "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -747,10 +452,9 @@ } }, "node_modules/@next/env": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.1.0.tgz", - "integrity": "sha512-UcCO481cROsqJuszPPXJnb7GGuLq617ve4xuAyyNG4VSSocJNtMU5Fsx+Lp6mlN8c7W58aZLc5y6D/2xNmaK+w==", - "license": "MIT" + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.0.3.tgz", + "integrity": "sha512-t9Xy32pjNOvVn2AS+Utt6VmyrshbpfUMhIjFO60gI58deSo/KgLOp31XZ4O+kY/Is8WAGYwA5gR7kOb1eORDBA==" }, "node_modules/@next/eslint-plugin-next": { "version": "15.1.0", @@ -793,13 +497,12 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.1.0.tgz", - "integrity": "sha512-ZU8d7xxpX14uIaFC3nsr4L++5ZS/AkWDm1PzPO6gD9xWhFkOj2hzSbSIxoncsnlJXB1CbLOfGVN4Zk9tg83PUw==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.0.3.tgz", + "integrity": "sha512-s3Q/NOorCsLYdCKvQlWU+a+GeAd3C8Rb3L1YnetsgwXzhc3UTWrtQpB/3eCjFOdGUj5QmXfRak12uocd1ZiiQw==", "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "darwin" @@ -809,13 +512,12 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.1.0.tgz", - "integrity": "sha512-DQ3RiUoW2XC9FcSM4ffpfndq1EsLV0fj0/UY33i7eklW5akPUCo6OX2qkcLXZ3jyPdo4sf2flwAED3AAq3Om2Q==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.0.3.tgz", + "integrity": "sha512-Zxl/TwyXVZPCFSf0u2BNj5sE0F2uR6iSKxWpq4Wlk/Sv9Ob6YCKByQTkV2y6BCic+fkabp9190hyrDdPA/dNrw==", "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "darwin" @@ -825,13 +527,12 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.1.0.tgz", - "integrity": "sha512-M+vhTovRS2F//LMx9KtxbkWk627l5Q7AqXWWWrfIzNIaUFiz2/NkOFkxCFyNyGACi5YbA8aekzCLtbDyfF/v5Q==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.0.3.tgz", + "integrity": "sha512-T5+gg2EwpsY3OoaLxUIofmMb7ohAUlcNZW0fPQ6YAutaWJaxt1Z1h+8zdl4FRIOr5ABAAhXtBcpkZNwUcKI2fw==", "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -841,13 +542,12 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.1.0.tgz", - "integrity": "sha512-Qn6vOuwaTCx3pNwygpSGtdIu0TfS1KiaYLYXLH5zq1scoTXdwYfdZtwvJTpB1WrLgiQE2Ne2kt8MZok3HlFqmg==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.0.3.tgz", + "integrity": "sha512-WkAk6R60mwDjH4lG/JBpb2xHl2/0Vj0ZRu1TIzWuOYfQ9tt9NFsIinI1Epma77JVgy81F32X/AeD+B2cBu/YQA==", "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -857,13 +557,12 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.1.0.tgz", - "integrity": "sha512-yeNh9ofMqzOZ5yTOk+2rwncBzucc6a1lyqtg8xZv0rH5znyjxHOWsoUtSq4cUTeeBIiXXX51QOOe+VoCjdXJRw==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.0.3.tgz", + "integrity": "sha512-gWL/Cta1aPVqIGgDb6nxkqy06DkwJ9gAnKORdHWX1QBbSZZB+biFYPFti8aKIQL7otCE1pjyPaXpFzGeG2OS2w==", "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -873,13 +572,12 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.1.0.tgz", - "integrity": "sha512-t9IfNkHQs/uKgPoyEtU912MG6a1j7Had37cSUyLTKx9MnUpjj+ZDKw9OyqTI9OwIIv0wmkr1pkZy+3T5pxhJPg==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.0.3.tgz", + "integrity": "sha512-QQEMwFd8r7C0GxQS62Zcdy6GKx999I/rTO2ubdXEe+MlZk9ZiinsrjwoiBL5/57tfyjikgh6GOU2WRQVUej3UA==", "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -889,13 +587,12 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.1.0.tgz", - "integrity": "sha512-WEAoHyG14t5sTavZa1c6BnOIEukll9iqFRTavqRVPfYmfegOAd5MaZfXgOGG6kGo1RduyGdTHD4+YZQSdsNZXg==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.0.3.tgz", + "integrity": "sha512-9TEp47AAd/ms9fPNgtgnT7F3M1Hf7koIYYWCMQ9neOwjbVWJsHZxrFbI3iEDJ8rf1TDGpmHbKxXf2IFpAvheIQ==", "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "win32" @@ -905,13 +602,12 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.1.0.tgz", - "integrity": "sha512-J1YdKuJv9xcixzXR24Dv+4SaDKc2jj31IVUEMdO5xJivMTXuE6MAdIi4qPjSymHuFG8O5wbfWKnhJUcHHpj5CA==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.0.3.tgz", + "integrity": "sha512-VNAz+HN4OGgvZs6MOoVfnn41kBzT+M+tB+OK4cww6DNyWS6wKaDpaAm/qLeOUbnMh0oVx1+mg0uoYARF69dJyA==", "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "win32" @@ -966,13 +662,12 @@ } }, "node_modules/@playwright/test": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.49.0.tgz", - "integrity": "sha512-DMulbwQURa8rNIQrf94+jPJQ4FmOVdpE5ZppRNvWVjvhC+6sOeo28r8MgIpQRYouXRtt/FCCXU7zn20jnHR4Qw==", + "version": "1.49.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.49.1.tgz", + "integrity": "sha512-Ky+BVzPz8pL6PQxHqNRW1k3mIyv933LML7HktS8uik0bUXNCdPhoS/kLihiO1tMf/egaJb4IutXd7UywvXEW+g==", "devOptional": true, - "license": "Apache-2.0", "dependencies": { - "playwright": "1.49.0" + "playwright": "1.49.1" }, "bin": { "playwright": "cli.js" @@ -1894,30 +1589,18 @@ "license": "Apache-2.0" }, "node_modules/@swc/helpers": { - "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", - "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", - "license": "Apache-2.0", + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz", + "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==", "dependencies": { - "tslib": "^2.8.0" + "tslib": "^2.4.0" } }, "node_modules/@types/cytoscape": { - "version": "3.21.5", - "resolved": "https://registry.npmjs.org/@types/cytoscape/-/cytoscape-3.21.5.tgz", - "integrity": "sha512-fzYT3vqY5J4gxVXDOsCgDpm0ZdU8bQq+wCv0ucS0MSTtvQdjs3lcb2VetJiUSAd4WBgouqizI+JT1f8Yc6eY7Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/cytoscape-fcose": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@types/cytoscape-fcose/-/cytoscape-fcose-2.2.4.tgz", - "integrity": "sha512-QwWtnT8HI9h+DHhG5krGc1ZY0Ex+cn85MvX96ZNAjSxuXiZDnjIZW/ypVkvvubTjIY4rSdkJY1D/Nsn8NDpmAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/cytoscape": "*" - } + "version": "3.21.8", + "resolved": "https://registry.npmjs.org/@types/cytoscape/-/cytoscape-3.21.8.tgz", + "integrity": "sha512-6Bo9ZDrv0vfwe8Sg/ERc5VL0yU0gYvP4dgZi0fAXYkKHfyHaNqWRMcwYm3mu4sLsXbB8ZuXE75sR7qnaOL5JgQ==", + "dev": true }, "node_modules/@types/estree": { "version": "1.0.6", @@ -1949,11 +1632,10 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz", - "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==", + "version": "22.10.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", + "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==", "dev": true, - "license": "MIT", "dependencies": { "undici-types": "~6.20.0" } @@ -1976,17 +1658,6 @@ "csstype": "^3.0.2" } }, - "node_modules/@types/react-cytoscapejs": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/react-cytoscapejs/-/react-cytoscapejs-1.2.5.tgz", - "integrity": "sha512-G9VcGQOlER3njklOu5D0FDGHYfkQJ3yEL95kGbgI/MR08N5dQ7IbLSZI8WqaB4fG0zOURIg0BUtOCrbE5HRZEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/cytoscape": "*", - "@types/react": "*" - } - }, "node_modules/@types/react-dom": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", @@ -3973,11 +3644,10 @@ } }, "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "hasInstallScript": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -5060,10 +4730,9 @@ "license": "ISC" }, "node_modules/lucide-react": { - "version": "0.468.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.468.0.tgz", - "integrity": "sha512-6koYRhnM2N0GGZIdXzSeiNwguv1gt/FAjZOiPl76roBi3xKEXa4WmfpxgQwTTL4KipXjefrnf3oV4IsYhi4JFA==", - "license": "ISC", + "version": "0.441.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.441.0.tgz", + "integrity": "sha512-0vfExYtvSDhkC2lqg0zYVW1Uu9GsI4knuV9GP9by5z0Xhc4Zi5RejTxfz9LsjRmCyWVzHCJvxGKZWcRyvQCWVg==", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc" } @@ -5165,14 +4834,13 @@ "license": "MIT" }, "node_modules/next": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/next/-/next-15.1.0.tgz", - "integrity": "sha512-QKhzt6Y8rgLNlj30izdMbxAwjHMFANnLwDwZ+WQh5sMhyt4lEBqDK9QpvWHtIM4rINKPoJ8aiRZKg5ULSybVHw==", - "license": "MIT", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/next/-/next-15.0.3.tgz", + "integrity": "sha512-ontCbCRKJUIoivAdGB34yCaOcPgYXr9AAkV/IwqFfWWTXEPUgLYkSkqBhIk9KK7gGmgjc64B+RdoeIDM13Irnw==", "dependencies": { - "@next/env": "15.1.0", + "@next/env": "15.0.3", "@swc/counter": "0.1.3", - "@swc/helpers": "0.5.15", + "@swc/helpers": "0.5.13", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", @@ -5185,22 +4853,22 @@ "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "15.1.0", - "@next/swc-darwin-x64": "15.1.0", - "@next/swc-linux-arm64-gnu": "15.1.0", - "@next/swc-linux-arm64-musl": "15.1.0", - "@next/swc-linux-x64-gnu": "15.1.0", - "@next/swc-linux-x64-musl": "15.1.0", - "@next/swc-win32-arm64-msvc": "15.1.0", - "@next/swc-win32-x64-msvc": "15.1.0", + "@next/swc-darwin-arm64": "15.0.3", + "@next/swc-darwin-x64": "15.0.3", + "@next/swc-linux-arm64-gnu": "15.0.3", + "@next/swc-linux-arm64-musl": "15.0.3", + "@next/swc-linux-x64-gnu": "15.0.3", + "@next/swc-linux-x64-musl": "15.0.3", + "@next/swc-win32-arm64-msvc": "15.0.3", + "@next/swc-win32-x64-msvc": "15.0.3", "sharp": "^0.33.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.41.2", "babel-plugin-react-compiler": "*", - "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", - "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react": "^18.2.0 || 19.0.0-rc-66855b96-20241106", + "react-dom": "^18.2.0 || 19.0.0-rc-66855b96-20241106", "sass": "^1.3.0" }, "peerDependenciesMeta": { @@ -5543,13 +5211,11 @@ } }, "node_modules/playwright": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.49.0.tgz", - "integrity": "sha512-eKpmys0UFDnfNb3vfsf8Vx2LEOtflgRebl0Im2eQQnYMA4Aqd+Zw8bEOB+7ZKvN76901mRnqdsiOGKxzVTbi7A==", - "devOptional": true, - "license": "Apache-2.0", + "version": "1.49.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.49.1.tgz", + "integrity": "sha512-VYL8zLoNTBxVOrJBbDuRgDWa3i+mfQgDTrL8Ah9QXZ7ax4Dsj0MSq5bYgytRnDVVe+njoKnfsYkH3HzqVj5UZA==", "dependencies": { - "playwright-core": "1.49.0" + "playwright-core": "1.49.1" }, "bin": { "playwright": "cli.js" @@ -5562,11 +5228,9 @@ } }, "node_modules/playwright-core": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.49.0.tgz", - "integrity": "sha512-R+3KKTQF3npy5GTiKH/T+kdhoJfJojjHESR1YEWhYuEKRVfVaxH3+4+GvXE5xyCngCxhxnykk0Vlah9v8fs3jA==", - "devOptional": true, - "license": "Apache-2.0", + "version": "1.49.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.49.1.tgz", + "integrity": "sha512-BzmpVcs4kE2CH15rWfzpjzVGhWERJfmnXmniSyKeRZUs9Ws65m+RGIi7mjJK/euCegfn3i7jvqWeWyHe9y3Vgg==", "bin": { "playwright-core": "cli.js" }, @@ -5574,21 +5238,6 @@ "node": ">=18" } }, - "node_modules/playwright/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/possible-typed-array-names": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", @@ -5839,7 +5488,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/react-cytoscapejs/-/react-cytoscapejs-2.0.0.tgz", "integrity": "sha512-t3SSl1DQy7+JQjN+8QHi1anEJlM3i3aAeydHTsJwmjo/isyKK7Rs7oCvU6kZsB9NwZidzZQR21Vm2PcBLG/Tjg==", - "license": "MIT", "dependencies": { "prop-types": "^15.8.1" }, @@ -6998,12 +6646,6 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, - "node_modules/web-tree-sitter": { - "version": "0.22.6", - "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.22.6.tgz", - "integrity": "sha512-hS87TH71Zd6mGAmYCvlgxeGDjqd9GTeqXNqTT+u0Gs51uIozNIaaq/kUAbV/Zf56jb2ZOyG8BxZs2GG9wbLi6Q==", - "license": "MIT" - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index e9ec5475..cf256fb9 100644 --- a/package.json +++ b/package.json @@ -23,24 +23,24 @@ "clsx": "^2.1.0", "cytoscape": "^3.30.4", "cytoscape-fcose": "^2.2.0", - "lucide-react": "^0.468.0", - "next": "15.1.0", + "lucide-react": "^0.441.0", + "next": "15.0.3", + "playwright": "^1.49.1", + "playwright-core": "^1.49.1", "react": "^18", "react-cytoscapejs": "^2.0.0", "react-dom": "^18", - "react-resizable-panels": "^2.1.7", + "react-resizable-panels": "^2.0.20", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", "tailwind-merge": "^2.5.5", - "tailwindcss-animate": "^1.0.7", - "web-tree-sitter": "^0.22.6" + "tailwindcss-animate": "^1.0.7" }, "devDependencies": { - "@playwright/test": "^1.49.0", - "@types/cytoscape-fcose": "^2.2.4", - "@types/node": "^22", + "@playwright/test": "^1.49.1", + "@types/cytoscape": "^3.21.8", + "@types/node": "^22.10.2", "@types/react": "^18", - "@types/react-cytoscapejs": "^1.2.5", "@types/react-dom": "^18", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", From 6e40e955ce14115b3054e67a570dcdf2063e7c39 Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Sun, 15 Dec 2024 16:44:28 +0200 Subject: [PATCH 35/60] commit --- package-lock.json | 127 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 3 ++ 2 files changed, 130 insertions(+) diff --git a/package-lock.json b/package-lock.json index ca3b7b78..3a5e58ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,6 +27,7 @@ "playwright": "^1.49.1", "playwright-core": "^1.49.1", "react": "^18", + "react-cytoscape": "^1.0.6", "react-cytoscapejs": "^2.0.0", "react-dom": "^18", "react-resizable-panels": "^2.0.20", @@ -38,8 +39,10 @@ "devDependencies": { "@playwright/test": "^1.49.1", "@types/cytoscape": "^3.21.8", + "@types/cytoscape-fcose": "^2.2.4", "@types/node": "^22.10.2", "@types/react": "^18", + "@types/react-cytoscapejs": "^1.2.5", "@types/react-dom": "^18", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", @@ -1602,6 +1605,15 @@ "integrity": "sha512-6Bo9ZDrv0vfwe8Sg/ERc5VL0yU0gYvP4dgZi0fAXYkKHfyHaNqWRMcwYm3mu4sLsXbB8ZuXE75sR7qnaOL5JgQ==", "dev": true }, + "node_modules/@types/cytoscape-fcose": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@types/cytoscape-fcose/-/cytoscape-fcose-2.2.4.tgz", + "integrity": "sha512-QwWtnT8HI9h+DHhG5krGc1ZY0Ex+cn85MvX96ZNAjSxuXiZDnjIZW/ypVkvvubTjIY4rSdkJY1D/Nsn8NDpmAw==", + "dev": true, + "dependencies": { + "@types/cytoscape": "*" + } + }, "node_modules/@types/estree": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", @@ -1658,6 +1670,16 @@ "csstype": "^3.0.2" } }, + "node_modules/@types/react-cytoscapejs": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/react-cytoscapejs/-/react-cytoscapejs-1.2.5.tgz", + "integrity": "sha512-G9VcGQOlER3njklOu5D0FDGHYfkQJ3yEL95kGbgI/MR08N5dQ7IbLSZI8WqaB4fG0zOURIg0BUtOCrbE5HRZEQ==", + "dev": true, + "dependencies": { + "@types/cytoscape": "*", + "@types/react": "*" + } + }, "node_modules/@types/react-dom": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", @@ -2618,6 +2640,28 @@ "node": ">=0.10" } }, + "node_modules/cytoscape-cola": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/cytoscape-cola/-/cytoscape-cola-2.5.1.tgz", + "integrity": "sha512-4/2S9bW1LvdsEPmxXN1OEAPFPbk7DvCx2c9d+TblkQAAvptGaSgtPWCByTEGgT8UxCxcVqes2aFPO5pzwo7R2w==", + "dependencies": { + "webcola": "^3.4.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-dagre": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/cytoscape-dagre/-/cytoscape-dagre-2.5.0.tgz", + "integrity": "sha512-VG2Knemmshop4kh5fpLO27rYcyUaaDkRw+6PiX4bstpB+QFt0p2oauMrsjVbUamGWQ6YNavh7x2em2uZlzV44g==", + "dependencies": { + "dagre": "^0.8.5" + }, + "peerDependencies": { + "cytoscape": "^3.2.22" + } + }, "node_modules/cytoscape-fcose": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", @@ -2630,6 +2674,52 @@ "cytoscape": "^3.2.0" } }, + "node_modules/d3-dispatch": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", + "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==" + }, + "node_modules/d3-drag": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz", + "integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==", + "dependencies": { + "d3-dispatch": "1", + "d3-selection": "1" + } + }, + "node_modules/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" + }, + "node_modules/d3-selection": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", + "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==" + }, + "node_modules/d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-timer": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" + }, + "node_modules/dagre": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz", + "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==", + "dependencies": { + "graphlib": "^2.1.8", + "lodash": "^4.17.15" + } + }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -3869,6 +3959,14 @@ "dev": true, "license": "MIT" }, + "node_modules/graphlib": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", + "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", + "dependencies": { + "lodash": "^4.17.15" + } + }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -4691,6 +4789,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -5484,6 +5587,19 @@ "node": ">=0.10.0" } }, + "node_modules/react-cytoscape": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/react-cytoscape/-/react-cytoscape-1.0.6.tgz", + "integrity": "sha512-bCBLyctKVDuxe9W2b/TaBGwk+Q1/AX33k+ocD94r0Pq4KQGAJNS91m3Z/czSOkDHcK1VmbImxnH2Q75J5lxeiQ==", + "dependencies": { + "cytoscape": "^3.2.5", + "cytoscape-cola": "^2.0.0", + "cytoscape-dagre": "^2.1.0" + }, + "optionalDependencies": { + "fsevents": "*" + } + }, "node_modules/react-cytoscapejs": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/react-cytoscapejs/-/react-cytoscapejs-2.0.0.tgz", @@ -6646,6 +6762,17 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, + "node_modules/webcola": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/webcola/-/webcola-3.4.0.tgz", + "integrity": "sha512-4BiLXjXw3SJHo3Xd+rF+7fyClT6n7I+AR6TkBqyQ4kTsePSAMDLRCXY1f3B/kXJeP9tYn4G1TblxTO+jAt0gaw==", + "dependencies": { + "d3-dispatch": "^1.0.3", + "d3-drag": "^1.0.4", + "d3-shape": "^1.3.5", + "d3-timer": "^1.0.5" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index cf256fb9..364999ec 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "playwright": "^1.49.1", "playwright-core": "^1.49.1", "react": "^18", + "react-cytoscape": "^1.0.6", "react-cytoscapejs": "^2.0.0", "react-dom": "^18", "react-resizable-panels": "^2.0.20", @@ -39,8 +40,10 @@ "devDependencies": { "@playwright/test": "^1.49.1", "@types/cytoscape": "^3.21.8", + "@types/cytoscape-fcose": "^2.2.4", "@types/node": "^22.10.2", "@types/react": "^18", + "@types/react-cytoscapejs": "^1.2.5", "@types/react-dom": "^18", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", From 3b4cadf7eb1c82cea0d5b5a36351190059182135 Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Mon, 16 Dec 2024 11:42:52 +0200 Subject: [PATCH 36/60] conflict --- package-lock.json | 1851 +++++++++++++++++++++++++++++++-------------- 1 file changed, 1286 insertions(+), 565 deletions(-) diff --git a/package-lock.json b/package-lock.json index b1884fe1..58fd81bf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,8 +44,8 @@ "@types/react-dom": "^18", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", - "react-force-graph-2d": "^1.25.8", "eslint-config-next": "15.1.0", + "react-force-graph-2d": "^1.25.8", "tailwindcss": "^3.4.3", "typescript": "^5" } @@ -77,7 +77,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", - "license": "MIT", "optional": true, "dependencies": { "tslib": "^2.4.0" @@ -159,9 +158,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.16.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.16.0.tgz", - "integrity": "sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==", + "version": "9.15.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.15.0.tgz", + "integrity": "sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==", "dev": true, "license": "MIT", "engines": { @@ -302,7 +301,6 @@ "cpu": [ "arm64" ], - "license": "Apache-2.0", "optional": true, "os": [ "darwin" @@ -324,7 +322,6 @@ "cpu": [ "x64" ], - "license": "Apache-2.0", "optional": true, "os": [ "darwin" @@ -346,7 +343,6 @@ "cpu": [ "arm64" ], - "license": "LGPL-3.0-or-later", "optional": true, "os": [ "darwin" @@ -362,7 +358,6 @@ "cpu": [ "x64" ], - "license": "LGPL-3.0-or-later", "optional": true, "os": [ "darwin" @@ -378,7 +373,6 @@ "cpu": [ "arm" ], - "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" @@ -394,7 +388,6 @@ "cpu": [ "arm64" ], - "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" @@ -410,7 +403,6 @@ "cpu": [ "s390x" ], - "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" @@ -426,7 +418,6 @@ "cpu": [ "x64" ], - "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" @@ -442,7 +433,6 @@ "cpu": [ "arm64" ], - "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" @@ -458,7 +448,6 @@ "cpu": [ "x64" ], - "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" @@ -474,7 +463,6 @@ "cpu": [ "arm" ], - "license": "Apache-2.0", "optional": true, "os": [ "linux" @@ -496,7 +484,6 @@ "cpu": [ "arm64" ], - "license": "Apache-2.0", "optional": true, "os": [ "linux" @@ -518,7 +505,6 @@ "cpu": [ "s390x" ], - "license": "Apache-2.0", "optional": true, "os": [ "linux" @@ -540,7 +526,6 @@ "cpu": [ "x64" ], - "license": "Apache-2.0", "optional": true, "os": [ "linux" @@ -562,7 +547,6 @@ "cpu": [ "arm64" ], - "license": "Apache-2.0", "optional": true, "os": [ "linux" @@ -584,7 +568,6 @@ "cpu": [ "x64" ], - "license": "Apache-2.0", "optional": true, "os": [ "linux" @@ -606,7 +589,6 @@ "cpu": [ "wasm32" ], - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", "optional": true, "dependencies": { "@emnapi/runtime": "^1.2.0" @@ -625,7 +607,6 @@ "cpu": [ "ia32" ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ "win32" @@ -644,7 +625,6 @@ "cpu": [ "x64" ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ "win32" @@ -751,15 +731,13 @@ "node_modules/@next/env": { "version": "15.1.0", "resolved": "https://registry.npmjs.org/@next/env/-/env-15.1.0.tgz", - "integrity": "sha512-UcCO481cROsqJuszPPXJnb7GGuLq617ve4xuAyyNG4VSSocJNtMU5Fsx+Lp6mlN8c7W58aZLc5y6D/2xNmaK+w==", - "license": "MIT" + "integrity": "sha512-UcCO481cROsqJuszPPXJnb7GGuLq617ve4xuAyyNG4VSSocJNtMU5Fsx+Lp6mlN8c7W58aZLc5y6D/2xNmaK+w==" }, "node_modules/@next/eslint-plugin-next": { "version": "15.1.0", "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.0.tgz", "integrity": "sha512-+jPT0h+nelBT6HC9ZCHGc7DgGVy04cv4shYdAe6tKlEbjQUtwU3LzQhzbDHQyY2m6g39m6B0kOFVuLGBrxxbGg==", "dev": true, - "license": "MIT", "dependencies": { "fast-glob": "3.3.1" } @@ -769,7 +747,6 @@ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -786,7 +763,6 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -801,7 +777,6 @@ "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "darwin" @@ -817,7 +792,6 @@ "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "darwin" @@ -833,7 +807,6 @@ "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -849,7 +822,6 @@ "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -865,7 +837,6 @@ "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -881,7 +852,6 @@ "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -897,7 +867,6 @@ "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "win32" @@ -913,7 +882,6 @@ "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "win32" @@ -968,13 +936,12 @@ } }, "node_modules/@playwright/test": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.49.0.tgz", - "integrity": "sha512-DMulbwQURa8rNIQrf94+jPJQ4FmOVdpE5ZppRNvWVjvhC+6sOeo28r8MgIpQRYouXRtt/FCCXU7zn20jnHR4Qw==", + "version": "1.49.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.49.1.tgz", + "integrity": "sha512-Ky+BVzPz8pL6PQxHqNRW1k3mIyv933LML7HktS8uik0bUXNCdPhoS/kLihiO1tMf/egaJb4IutXd7UywvXEW+g==", "devOptional": true, - "license": "Apache-2.0", "dependencies": { - "playwright": "1.49.0" + "playwright": "1.49.1" }, "bin": { "playwright": "cli.js" @@ -1061,6 +1028,29 @@ } } }, + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-presence": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", + "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-collection": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz", @@ -1166,6 +1156,78 @@ } } }, + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", + "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-escape-keydown": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-portal": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", + "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", + "dependencies": { + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-presence": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", + "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-direction": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", @@ -1182,14 +1244,13 @@ } }, "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", - "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", - "license": "MIT", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.2.tgz", + "integrity": "sha512-kEHnlhv7wUggvhuJPkyw4qspXLJOdYoAP4dO2c8ngGuXTq1w/HZp1YeVB+NQ2KbH1iEG+pvOCGYSqh9HZOz6hg==", "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-primitive": "2.0.1", "@radix-ui/react-use-callback-ref": "1.1.0", "@radix-ui/react-use-escape-keydown": "1.1.0" }, @@ -1208,6 +1269,64 @@ } } }, + "node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.1.tgz", + "integrity": "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==" + }, + "node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz", + "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-primitive": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.1.tgz", + "integrity": "sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==", + "dependencies": { + "@radix-ui/react-slot": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-slot": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.1.tgz", + "integrity": "sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-dropdown-menu": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.2.tgz", @@ -1333,6 +1452,78 @@ } } }, + "node_modules/@radix-ui/react-hover-card/node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", + "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-escape-keydown": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-hover-card/node_modules/@radix-ui/react-portal": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", + "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", + "dependencies": { + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-hover-card/node_modules/@radix-ui/react-presence": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", + "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-id": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", @@ -1404,22 +1595,16 @@ } } }, - "node_modules/@radix-ui/react-popper": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", - "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==", - "license": "MIT", + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", + "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", "dependencies": { - "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.1.0", + "@radix-ui/primitive": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-layout-effect": "1.1.0", - "@radix-ui/react-use-rect": "1.1.0", - "@radix-ui/react-use-size": "1.1.0", - "@radix-ui/rect": "1.1.0" + "@radix-ui/react-use-escape-keydown": "1.1.0" }, "peerDependencies": { "@types/react": "*", @@ -1436,11 +1621,10 @@ } } }, - "node_modules/@radix-ui/react-portal": { + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-portal": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", - "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-use-layout-effect": "1.1.0" @@ -1460,13 +1644,67 @@ } } }, - "node_modules/@radix-ui/react-presence": { + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-presence": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", + "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==", "license": "MIT", "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-use-rect": "1.1.0", + "@radix-ui/react-use-size": "1.1.0", + "@radix-ui/rect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.3.tgz", + "integrity": "sha512-NciRqhXnGojhT93RPyDaMPfLH3ZSl4jjIFbZQ1b/vxvZEdHsBZ49wP9w8L3HzUQwep01LcWtkUvm0OVB5JAHTw==", + "dependencies": { + "@radix-ui/react-primitive": "2.0.1", "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { @@ -1484,6 +1722,96 @@ } } }, + "node_modules/@radix-ui/react-portal/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz", + "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal/node_modules/@radix-ui/react-primitive": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.1.tgz", + "integrity": "sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==", + "dependencies": { + "@radix-ui/react-slot": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal/node_modules/@radix-ui/react-slot": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.1.tgz", + "integrity": "sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.2.tgz", + "integrity": "sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz", + "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-primitive": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", @@ -1535,15 +1863,412 @@ "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz", "integrity": "sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==", "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-collection": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", - "@radix-ui/react-direction": "1.1.0", + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.1.3.tgz", + "integrity": "sha512-tlLwaewTfrKetiex8iW9wwME/qrYlzlH0qcgYmos7xS54MO00SiPHasLoAykg/yVrjf41GQptPPi4oXzrP+sgg==", + "dependencies": { + "@radix-ui/number": "1.1.0", + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-collection": "1.1.1", + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.2", + "@radix-ui/react-focus-guards": "1.1.1", + "@radix-ui/react-focus-scope": "1.1.1", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-popper": "1.2.1", + "@radix-ui/react-portal": "1.1.3", + "@radix-ui/react-primitive": "2.0.1", + "@radix-ui/react-slot": "1.1.1", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-use-previous": "1.1.0", + "@radix-ui/react-visually-hidden": "1.1.1", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.6.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.1.tgz", + "integrity": "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==" + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-arrow": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.1.tgz", + "integrity": "sha512-NaVpZfmv8SKeZbn4ijN2V3jlHA9ngBG16VnIIm22nUR0Yk8KUALyBxT3KYEUnNuch9sTE8UTsS3whzBgKOL30w==", + "dependencies": { + "@radix-ui/react-primitive": "2.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-collection": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.1.tgz", + "integrity": "sha512-LwT3pSho9Dljg+wY2KN2mrrh6y3qELfftINERIzBUO9e0N+t0oMTyn3k9iv+ZqgrwGkRnLpNJrsMv9BZlt2yuA==", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-primitive": "2.0.1", + "@radix-ui/react-slot": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz", + "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.1.tgz", + "integrity": "sha512-01omzJAYRxXdG2/he/+xy+c8a8gCydoQ1yOxnWNcRhrrBW5W+RQJ22EK1SaO8tb3WoUsuEw7mJjBozPzihDFjA==", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-primitive": "2.0.1", + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-popper": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.1.tgz", + "integrity": "sha512-3kn5Me69L+jv82EKRuQCXdYyf1DqHwD2U/sxoNgBGCB7K9TRc3bQamQ+5EPM9EvyPdli0W41sROd+ZU1dTCztw==", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.1", + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-primitive": "2.0.1", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-use-rect": "1.1.0", + "@radix-ui/react-use-size": "1.1.0", + "@radix-ui/rect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-primitive": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.1.tgz", + "integrity": "sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==", + "dependencies": { + "@radix-ui/react-slot": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.1.tgz", + "integrity": "sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", + "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.3.tgz", + "integrity": "sha512-oB8irs7CGAml6zWbum7MNySTH/sR7PM1ZQyLV8reO946u73sU83yZUKijrMLNbm4hTOrJY4tE8Oa/XUKrOr2Wg==", + "dependencies": { + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-collection": "1.1.1", + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.2", + "@radix-ui/react-portal": "1.1.3", + "@radix-ui/react-presence": "1.1.2", + "@radix-ui/react-primitive": "2.0.1", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-visually-hidden": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.1.tgz", + "integrity": "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==" + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-collection": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.1.tgz", + "integrity": "sha512-LwT3pSho9Dljg+wY2KN2mrrh6y3qELfftINERIzBUO9e0N+t0oMTyn3k9iv+ZqgrwGkRnLpNJrsMv9BZlt2yuA==", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-primitive": "2.0.1", + "@radix-ui/react-slot": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz", + "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-primitive": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.1.tgz", + "integrity": "sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==", + "dependencies": { + "@radix-ui/react-slot": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-slot": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.1.tgz", + "integrity": "sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.1.5.tgz", + "integrity": "sha512-IucoQPcK5nwUuztaxBQvudvYwH58wtRcJlv1qvaMSyIbL9dEBfFN0vRf/D8xDbu6HmAJLlNGty4z8Na+vIqe9Q==", + "dependencies": { + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.2", "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-controllable-state": "1.1.0" + "@radix-ui/react-popper": "1.2.1", + "@radix-ui/react-portal": "1.1.3", + "@radix-ui/react-presence": "1.1.2", + "@radix-ui/react-primitive": "2.0.1", + "@radix-ui/react-slot": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-visually-hidden": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -1560,32 +2285,17 @@ } } }, - "node_modules/@radix-ui/react-select": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.1.2.tgz", - "integrity": "sha512-rZJtWmorC7dFRi0owDmoijm6nSJH1tVw64QGiNIZ9PNLyBDtG+iAq+XGsya052At4BfarzY/Dhv9wrrUr6IMZA==", + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.1.tgz", + "integrity": "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==" + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-arrow": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.1.tgz", + "integrity": "sha512-NaVpZfmv8SKeZbn4ijN2V3jlHA9ngBG16VnIIm22nUR0Yk8KUALyBxT3KYEUnNuch9sTE8UTsS3whzBgKOL30w==", "dependencies": { - "@radix-ui/number": "1.1.0", - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-collection": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-dismissable-layer": "1.1.1", - "@radix-ui/react-focus-guards": "1.1.1", - "@radix-ui/react-focus-scope": "1.1.0", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-popper": "1.2.0", - "@radix-ui/react-portal": "1.1.2", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-slot": "1.1.0", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-controllable-state": "1.1.0", - "@radix-ui/react-use-layout-effect": "1.1.0", - "@radix-ui/react-use-previous": "1.1.0", - "@radix-ui/react-visually-hidden": "1.1.0", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.6.0" + "@radix-ui/react-primitive": "2.0.1" }, "peerDependencies": { "@types/react": "*", @@ -1602,10 +2312,10 @@ } } }, - "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-context": { + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-compose-refs": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", - "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz", + "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==", "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -1616,14 +2326,10 @@ } } }, - "node_modules/@radix-ui/react-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", - "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0" - }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -1634,23 +2340,21 @@ } } }, - "node_modules/@radix-ui/react-toast": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.2.tgz", - "integrity": "sha512-Z6pqSzmAP/bFJoqMAston4eSNa+ud44NSZTiZUmUen+IOZ5nBY8kzuU5WDBVyFXPtcW6yUalOHsxM/BP6Sv8ww==", + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-popper": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.1.tgz", + "integrity": "sha512-3kn5Me69L+jv82EKRuQCXdYyf1DqHwD2U/sxoNgBGCB7K9TRc3bQamQ+5EPM9EvyPdli0W41sROd+ZU1dTCztw==", "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-collection": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.1", + "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.1", - "@radix-ui/react-portal": "1.1.2", - "@radix-ui/react-presence": "1.1.1", - "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-primitive": "2.0.1", "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-controllable-state": "1.1.0", "@radix-ui/react-use-layout-effect": "1.1.0", - "@radix-ui/react-visually-hidden": "1.1.0" + "@radix-ui/react-use-rect": "1.1.0", + "@radix-ui/react-use-size": "1.1.0", + "@radix-ui/rect": "1.1.0" }, "peerDependencies": { "@types/react": "*", @@ -1667,38 +2371,12 @@ } } }, - "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-context": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", - "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-tooltip": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.1.4.tgz", - "integrity": "sha512-QpObUH/ZlpaO4YgHSaYzrLO2VuO+ZBFFgGzjMUPwtiYnAzzNNDPJeEGRrT7qNOrWm/Jr08M1vlp+vTHtnSQ0Uw==", - "license": "MIT", + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-primitive": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.1.tgz", + "integrity": "sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==", "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.1", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-popper": "1.2.0", - "@radix-ui/react-portal": "1.1.2", - "@radix-ui/react-presence": "1.1.1", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-slot": "1.1.0", - "@radix-ui/react-use-controllable-state": "1.1.0", - "@radix-ui/react-visually-hidden": "1.1.0" + "@radix-ui/react-slot": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -1715,11 +2393,13 @@ } } }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-context": { + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", - "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.1.tgz", + "integrity": "sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1" + }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -1848,12 +2528,47 @@ } }, "node_modules/@radix-ui/react-visually-hidden": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz", - "integrity": "sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==", - "license": "MIT", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.1.tgz", + "integrity": "sha512-vVfA2IZ9q/J+gEamvj761Oq1FpWgCDaNOOIfbPVp2MVPLEomUr5+Vf7kJGwQ24YxZSlQVar7Bes8kyTo5Dshpg==", "dependencies": { - "@radix-ui/react-primitive": "2.0.0" + "@radix-ui/react-primitive": "2.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz", + "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-primitive": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.1.tgz", + "integrity": "sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==", + "dependencies": { + "@radix-ui/react-slot": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -1870,6 +2585,23 @@ } } }, + "node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-slot": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.1.tgz", + "integrity": "sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/rect": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", @@ -1900,14 +2632,12 @@ "node_modules/@swc/counter": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "license": "Apache-2.0" + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==" }, "node_modules/@swc/helpers": { "version": "0.5.15", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", - "license": "Apache-2.0", "dependencies": { "tslib": "^2.8.0" } @@ -1975,15 +2705,20 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz", - "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==", + "version": "22.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz", + "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==", "dev": true, - "license": "MIT", "dependencies": { - "undici-types": "~6.20.0" + "undici-types": "~6.19.8" } }, + "node_modules/@types/node/node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true + }, "node_modules/@types/prop-types": { "version": "15.7.12", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", @@ -1992,9 +2727,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.12", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", - "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", + "version": "18.3.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", + "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -2230,55 +2965,45 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.13.0.tgz", "integrity": "sha512-7N/+lztJqH4Mrf0lb10R/CbI1EaAMMGyF5y0oJvFoAhafwgiRA7TXyd8TFn8FC8k5y2dTsYogg238qavRGNnlw==", "dev": true, - "dependencies": { - "@typescript-eslint/types": "8.13.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } + "license": "ISC" }, "node_modules/3d-force-graph": { - "version": "1.73.6", - "resolved": "https://registry.npmjs.org/3d-force-graph/-/3d-force-graph-1.73.6.tgz", - "integrity": "sha512-9p/HmnD8dvGano/ybFIeFRb+HOSzVUcvJVeEeGhsTAtnerc7xD6eK3XgRMRka+tHrjBL2F5EcS9d0NQ5OjxRBQ==", + "version": "1.74.4", + "resolved": "https://registry.npmjs.org/3d-force-graph/-/3d-force-graph-1.74.4.tgz", + "integrity": "sha512-7cLlCMO5XZZBJgJ5FxW9hzWYPx5EexaQOpZCj5IgXn1XldDBNZWTz1SPxDDk43x5+elxltkFET1JyDv4g9pixA==", "dependencies": { "accessor-fn": "1", - "kapsule": "1", + "kapsule": "^1.16", "three": ">=0.118 <1", "three-forcegraph": "1", - "three-render-objects": "^1.29" + "three-render-objects": "^1.32" }, "engines": { "node": ">=12" } }, "node_modules/3d-force-graph-ar": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/3d-force-graph-ar/-/3d-force-graph-ar-1.8.6.tgz", - "integrity": "sha512-gXOCdY2pj0fXd9t8BZEOBVnjp7WCzAlQRP1Uo8u8kZyF+HNiswSGTCr3iw6/FYGoi2MuulFEvJL/184op0OM7g==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/3d-force-graph-ar/-/3d-force-graph-ar-1.9.3.tgz", + "integrity": "sha512-KHcwKVF8394ioKhc4h3y5H9jPBvw+lUmD1BJd1AEV/SO+FM324CXVYTvbGg2IuW0nOPR/ChXvlWhvIZaOtyeTg==", "dependencies": { "aframe-forcegraph-component": "3", - "kapsule": "1" + "kapsule": "^1.16" }, "engines": { "node": ">=12" } }, "node_modules/3d-force-graph-vr": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/3d-force-graph-vr/-/3d-force-graph-vr-2.3.1.tgz", - "integrity": "sha512-4HyyDccw2k0lTsS2+EWswM0VIBNVFoPmYY8zkaxEP4O+vwzgIgHqx5gz3FdaBfftK/H+dom+pjOuNx4DmNSKHw==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/3d-force-graph-vr/-/3d-force-graph-vr-2.4.3.tgz", + "integrity": "sha512-os/IPpkWUqNnqWFQISaa5Snts1uUFf485SMPpPi2BIJLHbW9Jxt+1PQWc2rqT3tDFTh9J72BnxyuqegyMrqxdQ==", "dependencies": { "accessor-fn": "1", "aframe": "^1.5", "aframe-extras": "^7.2", "aframe-forcegraph-component": "3", - "kapsule": "1", + "kapsule": "^1.16", "polished": "4" }, "engines": { @@ -2469,7 +3194,6 @@ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" @@ -2515,7 +3239,6 @@ "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -2595,7 +3318,6 @@ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -2608,20 +3330,18 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, - "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" @@ -2910,7 +3630,6 @@ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, - "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", @@ -2929,7 +3648,6 @@ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", "dev": true, - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" @@ -2938,6 +3656,22 @@ "node": ">= 0.4" } }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -3089,7 +3823,6 @@ "version": "0.7.1", "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", - "license": "Apache-2.0", "dependencies": { "clsx": "^2.1.1" }, @@ -3100,8 +3833,7 @@ "node_modules/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", - "license": "MIT" + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" }, "node_modules/clone-response": { "version": "1.0.3", @@ -3127,7 +3859,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "license": "MIT", "optional": true, "dependencies": { "color-convert": "^2.0.1", @@ -3159,7 +3890,6 @@ "version": "1.9.1", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "license": "MIT", "optional": true, "dependencies": { "color-name": "^1.0.0", @@ -3237,7 +3967,6 @@ "version": "3.30.4", "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.30.4.tgz", "integrity": "sha512-OxtlZwQl1WbwMmLiyPSEBuzeTIQnwZhJYYWFzZ2PhEHVFwpeaqNIkUzSiso00D98qk60l8Gwon2RP304d3BJ1A==", - "license": "MIT", "engines": { "node": ">=0.10" } @@ -3457,12 +4186,12 @@ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true }, - "node_modules/data-joint": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/data-joint/-/data-joint-1.3.1.tgz", - "integrity": "sha512-tMK0m4OVGqiA3zkn8JmO6YAqD8UwJqIAx4AAwFl1SKTtKAqcXePuT+n2aayiX9uITtlN3DFtKKTOxJRUc2+HvQ==", + "node_modules/data-bind-mapper": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-bind-mapper/-/data-bind-mapper-1.0.0.tgz", + "integrity": "sha512-FCR4YwhbDbknc9t8P3ebGUENQioe/qmAOioiDSxBYUfIp9ysbWUMLNtuym5LbhbfjsQe9N7lJGM2LMw1ZjcPdQ==", "dependencies": { - "index-array-by": "^1.4.0" + "accessor-fn": "1" }, "engines": { "node": ">=12" @@ -3613,7 +4342,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "license": "Apache-2.0", "optional": true, "engines": { "node": ">=8" @@ -3637,6 +4365,18 @@ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", "license": "MIT" }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/dom-walk": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", @@ -3650,29 +4390,11 @@ "node": ">= 0.8.0" } }, - "node_modules/duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" - "node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/dunder-proto": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.0.tgz", "integrity": "sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==", "dev": true, - "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-errors": "^1.3.0", @@ -3682,6 +4404,11 @@ "node": ">= 0.4" } }, + "node_modules/duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -3730,58 +4457,59 @@ } }, "node_modules/es-abstract": { - "version": "1.23.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", - "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", + "version": "1.23.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.6.tgz", + "integrity": "sha512-Ifco6n3yj2tMZDWNLyloZrytt9lqqlwvS83P3HtaETR0NUOYnIULGGHpktqYGObGy+8wc1okO25p8TjemhImvA==", "dev": true, - "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", + "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "data-view-buffer": "^1.0.1", "data-view-byte-length": "^1.0.1", "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.7", + "get-intrinsic": "^1.2.6", "get-symbol-description": "^1.0.2", "globalthis": "^1.0.4", - "gopd": "^1.0.1", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", "hasown": "^2.0.2", - "internal-slot": "^1.0.7", + "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", + "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", + "is-regex": "^1.2.1", "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", + "is-string": "^1.1.1", "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.0.0", "object-inspect": "^1.13.3", "object-keys": "^1.1.1", "object.assign": "^4.1.5", "regexp.prototype.flags": "^1.5.3", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", + "safe-array-concat": "^1.1.3", + "safe-regex-test": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.2", "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", + "typed-array-byte-offset": "^1.0.3", + "typed-array-length": "^1.0.7", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -3791,14 +4519,10 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, "engines": { "node": ">= 0.4" } @@ -3818,7 +4542,6 @@ "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz", "integrity": "sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -3879,15 +4602,14 @@ } }, "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, - "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -3918,9 +4640,9 @@ } }, "node_modules/eslint": { - "version": "9.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.16.0.tgz", - "integrity": "sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA==", + "version": "9.15.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.15.0.tgz", + "integrity": "sha512-7CrWySmIibCgT1Os28lUU6upBshZ+GxybLOrmRzi08kS8MBuO8QA7pXEgYgY5W8vK3e74xv0lpjo9DbaGU9Rkw==", "dev": true, "license": "MIT", "dependencies": { @@ -3929,7 +4651,7 @@ "@eslint/config-array": "^0.19.0", "@eslint/core": "^0.9.0", "@eslint/eslintrc": "^3.2.0", - "@eslint/js": "9.16.0", + "@eslint/js": "9.15.0", "@eslint/plugin-kit": "^0.2.3", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -3982,7 +4704,6 @@ "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.1.0.tgz", "integrity": "sha512-gADO+nKVseGso3DtOrYX9H7TxB/MuX7AUYhMlvQMqLYvUWu4HrOQuU7cC1HW74tHIqkAvXdwgAz3TCbczzSEXw==", "dev": true, - "license": "MIT", "dependencies": { "@next/eslint-plugin-next": "15.1.0", "@rushstack/eslint-patch": "^1.10.3", @@ -4167,7 +4888,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", "dev": true, - "license": "MIT", "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", @@ -4212,7 +4932,6 @@ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, - "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -4230,7 +4949,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -4518,9 +5236,9 @@ } }, "node_modules/force-graph": { - "version": "1.46.0", - "resolved": "https://registry.npmjs.org/force-graph/-/force-graph-1.46.0.tgz", - "integrity": "sha512-RR4XIsMgKMquEmN6me2MoDeqMr85Cv1cpXDFha6gwEczaaC3RWDH4YmXQXnI8/egRiIKFMq4HKjBjWXZwyy/9Q==", + "version": "1.47.1", + "resolved": "https://registry.npmjs.org/force-graph/-/force-graph-1.47.1.tgz", + "integrity": "sha512-NF0prpR8tNGq7oCE/aFImT/6/3wSk585bcp39UAj6SNSPjvKbX6ktCH6cZnjfsnPNx/DYj1rn+cvvjH814HCFA==", "dependencies": { "@tweenjs/tween.js": "18 - 25", "accessor-fn": "1", @@ -4534,7 +5252,7 @@ "d3-selection": "2 - 3", "d3-zoom": "2 - 3", "index-array-by": "1", - "kapsule": "^1.14", + "kapsule": "^1.16", "lodash-es": "4" }, "engines": { @@ -4577,31 +5295,11 @@ "url": "https://github.com/sponsors/rawify" } }, - "node_modules/fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "hasInstallScript": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -4620,16 +5318,16 @@ } }, "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.7.tgz", + "integrity": "sha512-2g4x+HqTJKM9zcJqBSpjoRmdcPFtJM60J3xJisTQSXBWka5XqyBN/2tNUgma1mztTXyDuUsEtYe5qcs7xYzYQA==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -4649,17 +5347,21 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", + "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", "dev": true, - "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -4826,9 +5528,8 @@ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4850,8 +5551,6 @@ "p-cancelable": "^1.0.0", "to-readable-stream": "^1.0.0", "url-parse-lax": "^3.0.0" - "engines": { - "node": ">= 0.4" }, "engines": { "node": ">=8.6" @@ -4905,11 +5604,13 @@ } }, "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, - "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -4918,11 +5619,10 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -5066,15 +5766,14 @@ } }, "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -5124,7 +5823,6 @@ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" @@ -5140,7 +5838,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "license": "MIT", "optional": true }, "node_modules/is-async-function": { @@ -5148,7 +5845,6 @@ "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -5160,13 +5856,15 @@ } }, "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, - "license": "MIT", "dependencies": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5185,14 +5883,13 @@ } }, "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", + "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -5234,12 +5931,13 @@ } }, "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, - "license": "MIT", "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" }, "engines": { @@ -5250,13 +5948,13 @@ } }, "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, - "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -5288,7 +5986,6 @@ "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz", "integrity": "sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7" }, @@ -5318,7 +6015,6 @@ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -5355,7 +6051,6 @@ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -5386,13 +6081,13 @@ } }, "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, - "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -5410,14 +6105,15 @@ } }, "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -5431,7 +6127,6 @@ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -5444,7 +6139,6 @@ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7" }, @@ -5456,13 +6150,13 @@ } }, "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, - "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -5472,13 +6166,14 @@ } }, "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, - "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -5508,7 +6203,6 @@ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -5517,13 +6211,15 @@ } }, "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", + "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5534,7 +6230,6 @@ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4" @@ -5560,17 +6255,17 @@ "license": "ISC" }, "node_modules/iterator.prototype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", - "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.4.tgz", + "integrity": "sha512-x4WH0BWmrMmg4oHHl+duwubhrvczGlyuGAZu3nvrf0UXOfPu8IhZObFEr7DE/iv01YgVZrsOiRcqw2srkKEDIA==", "dev": true, - "license": "MIT", "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "reflect.getprototypeof": "^1.0.8", + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -5681,9 +6376,9 @@ } }, "node_modules/kapsule": { - "version": "1.14.6", - "resolved": "https://registry.npmjs.org/kapsule/-/kapsule-1.14.6.tgz", - "integrity": "sha512-wSi6tHNOfXrIK2Pvv6BhZ9ukzhbp+XZlOOPWSVGUbqfFsnnli4Eq8FN6TaWJv2e17sY5+fKYVxa4DP2oPGlKhg==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/kapsule/-/kapsule-1.16.0.tgz", + "integrity": "sha512-4f/z/Luu0cEXmagCwaFyzvfZai2HKgB4CQLwmsMUA+jlUbW94HfFSX+TWZxzWoMSO6b6aR+FD2Xd5z88VYZJTw==", "dependencies": { "lodash-es": "4" }, @@ -5850,7 +6545,6 @@ "version": "0.468.0", "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.468.0.tgz", "integrity": "sha512-6koYRhnM2N0GGZIdXzSeiNwguv1gt/FAjZOiPl76roBi3xKEXa4WmfpxgQwTTL4KipXjefrnf3oV4IsYhi4JFA==", - "license": "ISC", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc" } @@ -5863,6 +6557,15 @@ "once": "~1.3.0" } }, + "node_modules/math-intrinsics": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.0.0.tgz", + "integrity": "sha512-4MqMiKP90ybymYvsut0CH2g4XWbfLtmlCkXmtmdcDCxNB+mQcu1w/1+L/VD7vi/PSv7X2JYV7SCcR+jiPXnQtA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -5993,7 +6696,6 @@ "version": "15.1.0", "resolved": "https://registry.npmjs.org/next/-/next-15.1.0.tgz", "integrity": "sha512-QKhzt6Y8rgLNlj30izdMbxAwjHMFANnLwDwZ+WQh5sMhyt4lEBqDK9QpvWHtIM4rINKPoJ8aiRZKg5ULSybVHw==", - "license": "MIT", "dependencies": { "@next/env": "15.1.0", "@swc/counter": "0.1.3", @@ -6181,7 +6883,6 @@ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -6223,7 +6924,6 @@ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -6484,13 +7184,12 @@ } }, "node_modules/playwright": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.49.0.tgz", - "integrity": "sha512-eKpmys0UFDnfNb3vfsf8Vx2LEOtflgRebl0Im2eQQnYMA4Aqd+Zw8bEOB+7ZKvN76901mRnqdsiOGKxzVTbi7A==", + "version": "1.49.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.49.1.tgz", + "integrity": "sha512-VYL8zLoNTBxVOrJBbDuRgDWa3i+mfQgDTrL8Ah9QXZ7ax4Dsj0MSq5bYgytRnDVVe+njoKnfsYkH3HzqVj5UZA==", "devOptional": true, - "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.49.0" + "playwright-core": "1.49.1" }, "bin": { "playwright": "cli.js" @@ -6503,11 +7202,10 @@ } }, "node_modules/playwright-core": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.49.0.tgz", - "integrity": "sha512-R+3KKTQF3npy5GTiKH/T+kdhoJfJojjHESR1YEWhYuEKRVfVaxH3+4+GvXE5xyCngCxhxnykk0Vlah9v8fs3jA==", + "version": "1.49.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.49.1.tgz", + "integrity": "sha512-BzmpVcs4kE2CH15rWfzpjzVGhWERJfmnXmniSyKeRZUs9Ws65m+RGIi7mjJK/euCegfn3i7jvqWeWyHe9y3Vgg==", "devOptional": true, - "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, @@ -6515,21 +7213,6 @@ "node": ">=18" } }, - "node_modules/playwright/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/polished": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz", @@ -6849,14 +7532,14 @@ } }, "node_modules/react-force-graph": { - "version": "1.44.7", - "resolved": "https://registry.npmjs.org/react-force-graph/-/react-force-graph-1.44.7.tgz", - "integrity": "sha512-hYlZsNdh7DzmMq86Z6RalIx3BMVV0g6VBilh6AFk8lyM4JmlhMzOKVlzylMEpQ/QNa66KgKhpFro4+X9fyDh0A==", - "dependencies": { - "3d-force-graph": "1", - "3d-force-graph-ar": "1", - "3d-force-graph-vr": "2", - "force-graph": "1", + "version": "1.45.4", + "resolved": "https://registry.npmjs.org/react-force-graph/-/react-force-graph-1.45.4.tgz", + "integrity": "sha512-Mppx8pU2TjJm+NToLDpcBR/8zk/aXbhFvP2r8Mw1pdQXnScpVVVb/7rfvZObSvnE9R2RoEjBpr4Ily4thO/Pfw==", + "dependencies": { + "3d-force-graph": "^1.74", + "3d-force-graph-ar": "^1.9", + "3d-force-graph-vr": "^2.4", + "force-graph": "^1.47", "prop-types": "15", "react-kapsule": "^2.5" }, @@ -6868,12 +7551,12 @@ } }, "node_modules/react-force-graph-2d": { - "version": "1.25.8", - "resolved": "https://registry.npmjs.org/react-force-graph-2d/-/react-force-graph-2d-1.25.8.tgz", - "integrity": "sha512-Z1mxbEDRsmFHCDU7ZcFryFzzOin1kYpKOyqQ1SWiyLCUmR6l/dFt/GhOknxQt976E6kK4V84cD1J6F2OlsViYQ==", + "version": "1.26.1", + "resolved": "https://registry.npmjs.org/react-force-graph-2d/-/react-force-graph-2d-1.26.1.tgz", + "integrity": "sha512-7dRD0zNjMpeNghc6dwqzKrdWz45kM1/RNQ7OfR/Y4t9cK02NvHjtmA5JeKePAmzZajqmQQFCbTtwxEfhKgcsww==", "dev": true, "dependencies": { - "force-graph": "1", + "force-graph": "^1.47", "prop-types": "15", "react-kapsule": "^2.5" }, @@ -6891,11 +7574,10 @@ "license": "MIT" }, "node_modules/react-kapsule": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/react-kapsule/-/react-kapsule-2.5.0.tgz", - "integrity": "sha512-bJm1K4dyfZ3xKaulvVgiLkoGqlxjmfoajlOErC2y9j1hJpzbc7cLwhoBWqRnZ/2IqgIMWpP2uIn8VMN2sgAsFA==", + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/react-kapsule/-/react-kapsule-2.5.6.tgz", + "integrity": "sha512-aE4Nq7dDG8R/LdNmvOL6Azjr97I2E7ycFDJRkoHJSp9OQgTJDT3MHTJtJDrOTwzCl6sllYSqrtcndaCzizyAjQ==", "dependencies": { - "fromentries": "^1.3.2", "jerrypick": "^1.1.1" }, "engines": { @@ -6952,13 +7634,13 @@ } }, "node_modules/react-resizable-panels": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-2.1.7.tgz", - "integrity": "sha512-JtT6gI+nURzhMYQYsx8DKkx6bSoOGFp7A3CwMrOb8y5jFHFyqwo9m68UhmXRw57fRVJksFn1TSlm3ywEQ9vMgA==", + "version": "2.0.23", + "resolved": "https://registry.npmjs.org/react-resizable-panels/-/react-resizable-panels-2.0.23.tgz", + "integrity": "sha512-8ZKTwTU11t/FYwiwhMdtZYYyFxic5U5ysRu2YwfkAgDbUJXFvnWSJqhnzkSlW+mnDoNAzDCrJhdOSXBPA76wug==", "license": "MIT", "peerDependencies": { - "react": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + "react": "^16.14.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.14.0 || ^17.0.0 || ^18.0.0" } }, "node_modules/react-style-singleton": { @@ -7045,7 +7727,6 @@ "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.8.tgz", "integrity": "sha512-B5dj6usc5dkk8uFliwjwDHM8To5/QwdKz9JcBZ8Ic4G1f0YmeeJTtE/ZTdgRFPAfxZFiUaPhZ1Jcs4qeagItGQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", @@ -7095,7 +7776,6 @@ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -7188,15 +7868,15 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, "engines": { @@ -7207,15 +7887,14 @@ } }, "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "is-regex": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -7289,7 +7968,6 @@ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", "hasInstallScript": true, - "license": "Apache-2.0", "optional": true, "dependencies": { "color": "^4.2.3", @@ -7346,16 +8024,69 @@ } }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -7380,7 +8111,6 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "license": "MIT", "optional": true, "dependencies": { "is-arrayish": "^0.3.1" @@ -7495,7 +8225,6 @@ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -7522,23 +8251,24 @@ "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", "dev": true, - "license": "MIT", "dependencies": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" } }, "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7548,16 +8278,19 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7632,7 +8365,6 @@ "version": "5.1.6", "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", - "license": "MIT", "dependencies": { "client-only": "0.0.1" }, @@ -7707,7 +8439,6 @@ "version": "2.5.5", "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.5.tgz", "integrity": "sha512-0LXunzzAZzo0tEPxV3I297ffKZPlKDrjj7NXphC8V5ak9yHC5zRmxnOe2m/Rd/7ivsOMJe3JZ2JVocoDdQTRBA==", - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/dcastil" @@ -7790,9 +8521,9 @@ } }, "node_modules/three": { - "version": "0.170.0", - "resolved": "https://registry.npmjs.org/three/-/three-0.170.0.tgz", - "integrity": "sha512-FQK+LEpYc0fBD+J8g6oSEyyNzjp+Q7Ks1C568WWaoMRLW+TkNNWmenWeGgJjV105Gd+p/2ql1ZcjYvNiPZBhuQ==" + "version": "0.171.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.171.0.tgz", + "integrity": "sha512-Y/lAXPaKZPcEdkKjh0JOAHVv8OOnv/NDJqm0wjfCzyQmfKxV7zvkwsnBgPBKTzJHToSOhRGQAGbPJObT59B/PQ==" }, "node_modules/three-bmfont-text": { "version": "3.0.0", @@ -7807,17 +8538,17 @@ } }, "node_modules/three-forcegraph": { - "version": "1.42.3", - "resolved": "https://registry.npmjs.org/three-forcegraph/-/three-forcegraph-1.42.3.tgz", - "integrity": "sha512-65aDCP6qFY41OEX+ZxSfaCfXDgHsjEixNk+hiSnpvdnTGzovx1OJhDetmCw2sh5JJMDAbOkMnhdbZuiJiuRDFA==", + "version": "1.42.9", + "resolved": "https://registry.npmjs.org/three-forcegraph/-/three-forcegraph-1.42.9.tgz", + "integrity": "sha512-sujFeXGbdeFHnMiuroImEp3dQl6aDsWr51qm1XLYA9ax+gUuKdRvLBZ9L3VY5saqngBLSyhkWHHMKlzK7xQ0vA==", "dependencies": { "accessor-fn": "1", "d3-array": "1 - 3", "d3-force-3d": "2 - 3", "d3-scale": "1 - 4", "d3-scale-chromatic": "1 - 3", - "data-joint": "1", - "kapsule": "1", + "data-bind-mapper": "1", + "kapsule": "^1.16", "ngraph.forcelayout": "3", "ngraph.graph": "20", "tinycolor2": "1" @@ -7838,13 +8569,13 @@ } }, "node_modules/three-render-objects": { - "version": "1.31.0", - "resolved": "https://registry.npmjs.org/three-render-objects/-/three-render-objects-1.31.0.tgz", - "integrity": "sha512-of54HTCHatV9OwhrBAKF6A2xtWxBQ47+u5WITTaTbGW6Px9mqLxw7L61dYDHqeQVuvlWMG8VQwyXmkeVsWx4Wg==", + "version": "1.32.1", + "resolved": "https://registry.npmjs.org/three-render-objects/-/three-render-objects-1.32.1.tgz", + "integrity": "sha512-HcbVhMFwPxtxrrQYe+pD8HFZmx22lYuYZeHXcZlDdxqWyr5wAZgjD+vX23oALrmP3i1LW8udheXxbntwYmA9sw==", "dependencies": { "@tweenjs/tween.js": "18 - 25", "accessor-fn": "1", - "kapsule": "1", + "kapsule": "^1.16", "polished": "4" }, "engines": { @@ -7914,8 +8645,7 @@ "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, "node_modules/type-check": { "version": "0.4.0", @@ -7966,18 +8696,18 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz", + "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==", "dev": true, - "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.13", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -7987,18 +8717,17 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -8008,9 +8737,9 @@ } }, "node_modules/typescript": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", - "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "dev": true, "license": "Apache-2.0", "bin": { @@ -8037,13 +8766,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", - "dev": true, - "license": "MIT" - }, "node_modules/update-browserslist-db": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", @@ -8178,42 +8900,43 @@ } }, "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, - "license": "MIT", "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-builtin-type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.0.tgz", - "integrity": "sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", + "is-date-object": "^1.1.0", "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", + "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", + "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", - "which-typed-array": "^1.1.15" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -8227,7 +8950,6 @@ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, - "license": "MIT", "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", @@ -8242,11 +8964,10 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.16.tgz", + "integrity": "sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==", "dev": true, - "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", From 88dad2e01a36569ec793fed9c748a65be610fde7 Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Mon, 16 Dec 2024 12:05:40 +0200 Subject: [PATCH 37/60] fix build --- app/components/chat.tsx | 5 +++- package-lock.json | 60 +++++++++++++++-------------------------- package.json | 3 ++- 3 files changed, 28 insertions(+), 40 deletions(-) diff --git a/app/components/chat.tsx b/app/components/chat.tsx index 5f18f30e..402a27c2 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -312,8 +312,11 @@ export function Chat({ repo, path, setPath, graph, selectedPathId, isPathRespons ]) if (isPathResponse) { - // chartRef.current?.elements().removeStyle().layout(LAYOUT).run() setIsPathResponse(false) + graph.getElements().forEach(e => { + e.isPath = false + e.isPathSelected = false + }) } setTimeout(() => setMessages(prev => [...prev, { diff --git a/package-lock.json b/package-lock.json index d3841742..03fc85e2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,6 +25,7 @@ "playwright": "^1.49.1", "react": "^18", "react-dom": "^18", + "react-force-graph-2d": "^1.25.8", "react-resizable-panels": "^2.0.20", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", @@ -33,12 +34,12 @@ }, "devDependencies": { "@playwright/test": "^1.49.1", + "@types/node": "^22.10.2", "@types/react": "^18", "@types/react-dom": "^18", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", "eslint-config-next": "15.1.0", - "react-force-graph-2d": "^1.25.8", "tailwindcss": "^3.4.3", "typescript": "^5" } @@ -2630,8 +2631,7 @@ "node_modules/@tweenjs/tween.js": { "version": "25.0.0", "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-25.0.0.tgz", - "integrity": "sha512-XKLA6syeBUaPzx4j3qwMqzzq+V4uo72BnlbOjmuljLrRqdsd3qnzvZZoxvMHZ23ndsRS4aufU6JOZYpCbU6T1A==", - "dev": true + "integrity": "sha512-XKLA6syeBUaPzx4j3qwMqzzq+V4uo72BnlbOjmuljLrRqdsd3qnzvZZoxvMHZ23ndsRS4aufU6JOZYpCbU6T1A==" }, "node_modules/@types/estree": { "version": "1.0.6", @@ -2662,6 +2662,15 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/node": { + "version": "22.10.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", + "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==", + "dev": true, + "dependencies": { + "undici-types": "~6.20.0" + } + }, "node_modules/@types/prop-types": { "version": "15.7.12", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", @@ -2903,7 +2912,6 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/accessor-fn/-/accessor-fn-1.5.1.tgz", "integrity": "sha512-zZpFYBqIL1Aqg+f2qmYHJ8+yIZF7/tP6PUGx2/QM0uGPSO5UegpinmkNwDohxWtOj586BpMPVRUjce2HI6xB3A==", - "dev": true, "engines": { "node": ">=12" } @@ -3264,7 +3272,6 @@ "version": "6.1.4", "resolved": "https://registry.npmjs.org/bezier-js/-/bezier-js-6.1.4.tgz", "integrity": "sha512-PA0FW9ZpcHbojUCMu28z9Vg/fNkwTj5YhusSAjHHDfHDGLxJ6YUKrAN2vk1fP2MMOxVw4Oko16FMlRGVBGqLKg==", - "dev": true, "funding": { "type": "individual", "url": "https://github.com/Pomax/bezierjs/blob/master/FUNDING.md" @@ -3436,7 +3443,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/canvas-color-tracker/-/canvas-color-tracker-1.3.1.tgz", "integrity": "sha512-eNycxGS7oQ3IS/9QQY41f/aQjiO9Y/MtedhCgSdsbLSxC9EyUD8L3ehl/Q3Kfmvt8um79S45PBV+5Rxm5ztdSw==", - "dev": true, "dependencies": { "tinycolor2": "^1.6.0" }, @@ -3652,7 +3658,6 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", - "dev": true, "dependencies": { "internmap": "1 - 2" }, @@ -3663,14 +3668,12 @@ "node_modules/d3-binarytree": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/d3-binarytree/-/d3-binarytree-1.0.2.tgz", - "integrity": "sha512-cElUNH+sHu95L04m92pG73t2MEJXKu+GeKUN1TJkFsu93E5W8E9Sc3kHEGJKgenGvj19m6upSn2EunvMgMD2Yw==", - "dev": true + "integrity": "sha512-cElUNH+sHu95L04m92pG73t2MEJXKu+GeKUN1TJkFsu93E5W8E9Sc3kHEGJKgenGvj19m6upSn2EunvMgMD2Yw==" }, "node_modules/d3-color": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", - "dev": true, "engines": { "node": ">=12" } @@ -3679,7 +3682,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", - "dev": true, "engines": { "node": ">=12" } @@ -3688,7 +3690,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "dev": true, "dependencies": { "d3-dispatch": "1 - 3", "d3-selection": "3" @@ -3701,7 +3702,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", - "dev": true, "engines": { "node": ">=12" } @@ -3710,7 +3710,6 @@ "version": "3.0.5", "resolved": "https://registry.npmjs.org/d3-force-3d/-/d3-force-3d-3.0.5.tgz", "integrity": "sha512-tdwhAhoTYZY/a6eo9nR7HP3xSW/C6XvJTbeRpR92nlPzH6OiE+4MliN9feuSFd0tPtEUo+191qOhCTWx3NYifg==", - "dev": true, "dependencies": { "d3-binarytree": "1", "d3-dispatch": "1 - 3", @@ -3726,7 +3725,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", - "dev": true, "engines": { "node": ">=12" } @@ -3735,7 +3733,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "dev": true, "dependencies": { "d3-color": "1 - 3" }, @@ -3746,14 +3743,12 @@ "node_modules/d3-octree": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/d3-octree/-/d3-octree-1.0.2.tgz", - "integrity": "sha512-Qxg4oirJrNXauiuC94uKMbgxwnhdda9xRLl9ihq45srlJ4Ga3CSgqGcAL8iW7N5CIv4Oz8x3E734ulxyvHPvwA==", - "dev": true + "integrity": "sha512-Qxg4oirJrNXauiuC94uKMbgxwnhdda9xRLl9ihq45srlJ4Ga3CSgqGcAL8iW7N5CIv4Oz8x3E734ulxyvHPvwA==" }, "node_modules/d3-quadtree": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", - "dev": true, "engines": { "node": ">=12" } @@ -3762,7 +3757,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", - "dev": true, "dependencies": { "d3-array": "2.10.0 - 3", "d3-format": "1 - 3", @@ -3778,7 +3772,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", - "dev": true, "dependencies": { "d3-color": "1 - 3", "d3-interpolate": "1 - 3" @@ -3791,7 +3784,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", - "dev": true, "engines": { "node": ">=12" } @@ -3800,7 +3792,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", - "dev": true, "dependencies": { "d3-array": "2 - 3" }, @@ -3812,7 +3803,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "dev": true, "dependencies": { "d3-time": "1 - 3" }, @@ -3824,7 +3814,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", - "dev": true, "engines": { "node": ">=12" } @@ -3833,7 +3822,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "dev": true, "dependencies": { "d3-color": "1 - 3", "d3-dispatch": "1 - 3", @@ -3852,7 +3840,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", - "dev": true, "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", @@ -4833,7 +4820,6 @@ "version": "1.47.1", "resolved": "https://registry.npmjs.org/force-graph/-/force-graph-1.47.1.tgz", "integrity": "sha512-NF0prpR8tNGq7oCE/aFImT/6/3wSk585bcp39UAj6SNSPjvKbX6ktCH6cZnjfsnPNx/DYj1rn+cvvjH814HCFA==", - "dev": true, "dependencies": { "@tweenjs/tween.js": "18 - 25", "accessor-fn": "1", @@ -5286,7 +5272,6 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/index-array-by/-/index-array-by-1.4.2.tgz", "integrity": "sha512-SP23P27OUKzXWEC/TOyWlwLviofQkCSCKONnc62eItjp69yCZZPqDQtr3Pw5gJDnPeUMqExmKydNZaJO0FU9pw==", - "dev": true, "engines": { "node": ">=12" } @@ -5309,7 +5294,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", - "dev": true, "engines": { "node": ">=12" } @@ -5802,7 +5786,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/jerrypick/-/jerrypick-1.1.1.tgz", "integrity": "sha512-XTtedPYEyVp4t6hJrXuRKr/jHj8SC4z+4K0b396PMkov6muL+i8IIamJIvZWe3jUspgIJak0P+BaWKawMYNBLg==", - "dev": true, "engines": { "node": ">=12" } @@ -5889,7 +5872,6 @@ "version": "1.16.0", "resolved": "https://registry.npmjs.org/kapsule/-/kapsule-1.16.0.tgz", "integrity": "sha512-4f/z/Luu0cEXmagCwaFyzvfZai2HKgB4CQLwmsMUA+jlUbW94HfFSX+TWZxzWoMSO6b6aR+FD2Xd5z88VYZJTw==", - "dev": true, "dependencies": { "lodash-es": "4" }, @@ -5973,8 +5955,7 @@ "node_modules/lodash-es": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", - "dev": true + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, "node_modules/lodash.merge": { "version": "4.6.2", @@ -6792,7 +6773,6 @@ "version": "1.26.1", "resolved": "https://registry.npmjs.org/react-force-graph-2d/-/react-force-graph-2d-1.26.1.tgz", "integrity": "sha512-7dRD0zNjMpeNghc6dwqzKrdWz45kM1/RNQ7OfR/Y4t9cK02NvHjtmA5JeKePAmzZajqmQQFCbTtwxEfhKgcsww==", - "dev": true, "dependencies": { "force-graph": "^1.47", "prop-types": "15", @@ -6815,7 +6795,6 @@ "version": "2.5.6", "resolved": "https://registry.npmjs.org/react-kapsule/-/react-kapsule-2.5.6.tgz", "integrity": "sha512-aE4Nq7dDG8R/LdNmvOL6Azjr97I2E7ycFDJRkoHJSp9OQgTJDT3MHTJtJDrOTwzCl6sllYSqrtcndaCzizyAjQ==", - "dev": true, "dependencies": { "jerrypick": "^1.1.1" }, @@ -7744,8 +7723,7 @@ "node_modules/tinycolor2": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", - "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", - "dev": true + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==" }, "node_modules/to-regex-range": { "version": "5.0.1", @@ -7915,6 +7893,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true + }, "node_modules/update-browserslist-db": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", diff --git a/package.json b/package.json index 297b0b6a..c8fb94f8 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "playwright": "^1.49.1", "react": "^18", "react-dom": "^18", + "react-force-graph-2d": "^1.25.8", "react-resizable-panels": "^2.0.20", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", @@ -34,11 +35,11 @@ }, "devDependencies": { "@playwright/test": "^1.49.1", + "@types/node": "^22.10.2", "@types/react": "^18", "@types/react-dom": "^18", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", - "react-force-graph-2d": "^1.25.8", "eslint-config-next": "15.1.0", "tailwindcss": "^3.4.3", "typescript": "^5" From 91f582c2127d8697e0b8db2b88ac510e572064f6 Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Tue, 17 Dec 2024 12:54:00 +0200 Subject: [PATCH 38/60] fix force graph --- app/components/code-graph.tsx | 9 +------- app/components/graphView.tsx | 39 +++++++++++++++-------------------- app/components/model.ts | 9 ++++---- 3 files changed, 23 insertions(+), 34 deletions(-) diff --git a/app/components/code-graph.tsx b/app/components/code-graph.tsx index a288e12d..9ee5fae6 100644 --- a/app/components/code-graph.tsx +++ b/app/components/code-graph.tsx @@ -198,11 +198,6 @@ export function CodeGraph({ }) return } - - graph.Elements = { - nodes: [...graph.Elements.nodes, ...elements.nodes], - links: [...graph.Elements.links, ...elements.links] - } } else { const deleteNodes = nodes.filter(n => n.expand) if (deleteNodes.length > 0) { @@ -213,9 +208,8 @@ export function CodeGraph({ nodes.forEach((node) => { node.expand = expand }) - + setSelectedObj(undefined) - setData({ ...graph.Elements }) } @@ -376,7 +370,6 @@ export function CodeGraph({ setPosition={setPosition} onFetchNode={onFetchNode} deleteNeighbors={deleteNeighbors} - parentRef={containerRef} isShowPath={isShowPath} setPath={setPath} isPathResponse={isPathResponse} diff --git a/app/components/graphView.tsx b/app/components/graphView.tsx index 15363d3b..b2fac70e 100644 --- a/app/components/graphView.tsx +++ b/app/components/graphView.tsx @@ -1,7 +1,7 @@ import ForceGraph2D from 'react-force-graph-2d'; import { Graph, GraphData, Link, Node } from './model'; -import { Dispatch, Ref, RefObject, SetStateAction, useCallback, useEffect, useState } from 'react'; +import { Dispatch, RefObject, SetStateAction, useEffect, useRef } from 'react'; import { toast } from '@/components/ui/use-toast'; import { Path } from '../page'; @@ -22,7 +22,6 @@ interface Props { setPosition: Dispatch> onFetchNode: (nodeIds: number[]) => Promise deleteNeighbors: (nodes: Node[]) => void - parentRef: RefObject isShowPath: boolean setPath: Dispatch> isPathResponse: boolean | undefined @@ -49,7 +48,6 @@ export default function GraphView({ setPosition, onFetchNode, deleteNeighbors, - parentRef, isShowPath, setPath, isPathResponse, @@ -61,18 +59,21 @@ export default function GraphView({ setCooldownTime }: Props) { + const parentRef = useRef(null) + useEffect(() => { - setCooldownTicks(undefined) setCooldownTime(4000) + setCooldownTicks(undefined) }, [graph.Id]) useEffect(() => { - setCooldownTicks(undefined) setCooldownTime(1000) + setCooldownTicks(undefined) }, [graph.getElements().length]) const unsetSelectedObjects = (evt?: MouseEvent) => { - if (evt?.ctrlKey) return + debugger + if (evt?.ctrlKey || (!selectedObj && selectedObjects.length === 0)) return setSelectedObj(undefined) setSelectedObjects([]) } @@ -122,11 +123,6 @@ export default function GraphView({ }) return } - - graph.Elements = { - nodes: [...graph.Elements.nodes, ...elements.nodes], - links: [...graph.Elements.links, ...elements.links] - } } else { deleteNeighbors([node]); } @@ -138,7 +134,7 @@ export default function GraphView({ } return ( -

+
- (l.source.id === link.source.id && l.target.id === link.target.id) || - (l.source.id === link.target.id && l.target.id === link.source.id) + ((l.source.id === link.source.id && l.target.id === link.target.id) || + (l.source.id === link.target.id && l.target.id === link.source.id)) + && l.id !== link.id ); const linkIndex = sameNodeLinks.findIndex(l => l.id === link.id); - const offset = (linkIndex - (sameNodeLinks.length - 1) / 2) * 5; + const offset = linkIndex === -1 ? 0 : (linkIndex) * 5; // add link ctx.moveTo(link.source.x, link.source.y); @@ -280,7 +273,9 @@ export default function GraphView({ ctx.fillText(link.label, midX, midY); }} onNodeClick={handelNodeClick} - onNodeDrag={() => unsetSelectedObjects()} + onNodeDragEnd={(n, translate) => setPosition(prev => { + return prev && { x: prev.x + translate.x * chartRef.current.zoom(), y: prev.y + translate.y * chartRef.current.zoom() } + })} onNodeRightClick={handelNodeRightClick} onLinkClick={handelLinkClick} onBackgroundRightClick={unsetSelectedObjects} @@ -290,8 +285,8 @@ export default function GraphView({ setCooldownTicks(0) setCooldownTime(0) }} - cooldownTicks={undefined} - cooldownTime={undefined} + cooldownTicks={cooldownTicks} + cooldownTime={cooldownTime} />
) diff --git a/app/components/model.ts b/app/components/model.ts index 99cd8d05..a56ea89d 100644 --- a/app/components/model.ts +++ b/app/components/model.ts @@ -1,3 +1,4 @@ +import { LinkObject, NodeObject } from 'react-force-graph-2d' import { Path } from '../page' export interface GraphData { @@ -10,7 +11,7 @@ export interface Category { show: boolean, } -export type Node = { +export type Node = NodeObject<{ id: number, name: string, category: string, @@ -21,9 +22,9 @@ export type Node = { isPathSelected: boolean, isPath: boolean, [key: string]: any, -} +}> -export type Link = { +export type Link = LinkObject const COLORS_ORDER_NAME = [ "blue", From cebd476d8396b9be302ad439988b262d8e3a05c5 Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Tue, 17 Dec 2024 13:12:20 +0200 Subject: [PATCH 39/60] fix --- app/components/code-graph.tsx | 2 +- app/components/graphView.tsx | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/app/components/code-graph.tsx b/app/components/code-graph.tsx index 9ee5fae6..21879295 100644 --- a/app/components/code-graph.tsx +++ b/app/components/code-graph.tsx @@ -70,7 +70,7 @@ export function CodeGraph({ useEffect(() => { setData({ ...graph.Elements }) - }, [graph]) + }, [graph.Id]) useEffect(() => { if (!selectedValue) return diff --git a/app/components/graphView.tsx b/app/components/graphView.tsx index b2fac70e..e2ed0a3c 100644 --- a/app/components/graphView.tsx +++ b/app/components/graphView.tsx @@ -72,7 +72,6 @@ export default function GraphView({ }, [graph.getElements().length]) const unsetSelectedObjects = (evt?: MouseEvent) => { - debugger if (evt?.ctrlKey || (!selectedObj && selectedObjects.length === 0)) return setSelectedObj(undefined) setSelectedObjects([]) From 003164c23dde290f2ba2a4818ce06fe37c2ff38e Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Thu, 19 Dec 2024 14:16:57 +0200 Subject: [PATCH 40/60] fix force graph --- app/components/code-graph.tsx | 8 ++++---- app/components/model.ts | 24 ++++++++++++------------ 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/app/components/code-graph.tsx b/app/components/code-graph.tsx index 21879295..2031a872 100644 --- a/app/components/code-graph.tsx +++ b/app/components/code-graph.tsx @@ -159,7 +159,7 @@ export function CodeGraph({ node.visibility = show }) - graph.visibleLinks() + graph.visibleLinks(show) setData({ ...graph.Elements }) } @@ -226,7 +226,7 @@ export function CodeGraph({ setCooldownTicks(undefined) setCooldownTime(1000) } - graph.visibleLinks([chartNode.id], true) + graph.visibleLinks(true, [chartNode.id]) } setSearchNode(n) @@ -245,7 +245,7 @@ export function CodeGraph({ node.visibility = false }) - graph.visibleLinks(ids, false) + graph.visibleLinks(false, ids) setData({ ...graph.Elements }) } @@ -303,7 +303,7 @@ export function CodeGraph({ graph.Elements.nodes.forEach((element) => { element.visibility = true }) - graph.visibleLinks() + graph.visibleLinks(true) setData({ ...graph.Elements }) }} diff --git a/app/components/model.ts b/app/components/model.ts index a56ea89d..403eeccb 100644 --- a/app/components/model.ts +++ b/app/components/model.ts @@ -209,18 +209,18 @@ export class Graph { } } - public visibleLinks(ids?: number[], visibility?: boolean) { - this.elements.links.forEach(link => { - if (ids && visibility !== undefined) { - if (ids.includes(link.source.id) || ids.includes(link.target.id)) { - link.visibility = visibility - } - } else { - if (this.categories.find(category => category.name === link.source.category)?.show && this.categories.find(category => category.name === link.target.category)?.show) { - link.visibility = true - } else { - link.visibility = false - } + public visibleLinks(visible: boolean, ids?: number[]) { + const elements = ids ? this.elements.links.filter(link => ids.includes(link.source.id) || ids.includes(link.target.id)) : this.elements.links + + elements.forEach(link => { + if (visible && this.elements.nodes.map(n => n.id).includes(link.source.id) && link.source.visible && this.elements.nodes.map(n => n.id).includes(link.target.id) && link.target.visible) { + // eslint-disable-next-line no-param-reassign + link.visible = true + } + + if (!visible && ((this.elements.nodes.map(n => n.id).includes(link.source.id) && !link.source.visible) || (this.elements.nodes.map(n => n.id).includes(link.target.id) && !link.target.visible))) { + // eslint-disable-next-line no-param-reassign + link.visible = false } }) } From 95cb9a3a44832a2b27639c206cc8c9c812dc320f Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Thu, 19 Dec 2024 16:37:50 +0200 Subject: [PATCH 41/60] remove italic --- app/page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/page.tsx b/app/page.tsx index 9b8393d1..ada921fe 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -160,7 +160,7 @@ export default function Home() { FalkorDB -

+

CODE GRAPH

From f9976b656d4ec320c9096a93aab65e2c6635c868 Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Sun, 22 Dec 2024 13:19:36 +0200 Subject: [PATCH 42/60] change tpe colors to brand colors --- app/components/model.ts | 12 +++++++----- tailwind.config.js | 7 ++++--- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/app/components/model.ts b/app/components/model.ts index 18ea3f56..78741ad3 100644 --- a/app/components/model.ts +++ b/app/components/model.ts @@ -27,15 +27,17 @@ export interface Edge { } const COLORS_ORDER_NAME = [ - "pink", - "yellow", "blue", + "pink", + "orange", + "turquoise", ] const COLORS_ORDER = [ - "#F43F5F", - "#E9B306", - "#15B8A6", + "#7466FF", + "#FF66B3", + "#FF804D", + "#80E6E6", ] export function getCategoryColorValue(index: number): string { diff --git a/tailwind.config.js b/tailwind.config.js index f0c4cb6f..14d51792 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -23,9 +23,10 @@ module.exports = { }, extend: { colors: { - pink: "#F43F5F", - yellow: "#E9B306", - blue: "#15B8A6", + blue: "#7466FF", + pink: "#FF66B3", + orange: "#FF804D", + turquoise: "#80E6E6", border: "hsl(var(--border))", input: "hsl(var(--input))", ring: "hsl(var(--ring))", From ca6effff89470023d3489eda51ec1d8b6ebd4830 Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Sun, 22 Dec 2024 13:39:46 +0200 Subject: [PATCH 43/60] commit --- app/components/chat.tsx | 2 +- app/components/toolbar.tsx | 2 +- package-lock.json | 381 ++++++++++++++++++------------------- package.json | 18 +- 4 files changed, 200 insertions(+), 203 deletions(-) diff --git a/app/components/chat.tsx b/app/components/chat.tsx index 8a779f95..0aa18330 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -122,7 +122,7 @@ export function Chat({ repo, path, setPath, graph, chartRef, selectedPathId, isP const [sugOpen, setSugOpen] = useState(false); // A reference to the chat container to allow scrolling to the bottom - const containerRef: React.RefObject = useRef(null); + const containerRef: React.RefObject = useRef(null); const isSendMessage = messages.some(m => m.type === MessageTypes.Pending) || (messages.some(m => m.text === "Please select a starting point and the end point. Select or press relevant item on the graph") && !messages.some(m => m.type === MessageTypes.Path)) diff --git a/app/components/toolbar.tsx b/app/components/toolbar.tsx index 00264fb8..f57e26f8 100644 --- a/app/components/toolbar.tsx +++ b/app/components/toolbar.tsx @@ -4,7 +4,7 @@ import { Dispatch, RefObject, SetStateAction } from "react"; import { Node } from "./model"; interface Props { - chartRef: RefObject + chartRef: RefObject setSelectedObj: Dispatch> className?: string } diff --git a/package-lock.json b/package-lock.json index 3a5e58ce..5efd9c3c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,13 +23,13 @@ "cytoscape": "^3.30.4", "cytoscape-fcose": "^2.2.0", "lucide-react": "^0.441.0", - "next": "15.0.3", + "next": "15.1.2", "playwright": "^1.49.1", "playwright-core": "^1.49.1", - "react": "^18", + "react": "19.0.0", "react-cytoscape": "^1.0.6", "react-cytoscapejs": "^2.0.0", - "react-dom": "^18", + "react-dom": "19.0.0", "react-resizable-panels": "^2.0.20", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", @@ -41,12 +41,12 @@ "@types/cytoscape": "^3.21.8", "@types/cytoscape-fcose": "^2.2.4", "@types/node": "^22.10.2", - "@types/react": "^18", + "@types/react": "19.0.2", "@types/react-cytoscapejs": "^1.2.5", - "@types/react-dom": "^18", + "@types/react-dom": "19.0.2", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", - "eslint-config-next": "15.1.0", + "eslint-config-next": "15.1.2", "tailwindcss": "^3.4.3", "typescript": "^5" } @@ -183,29 +183,26 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.7.tgz", - "integrity": "sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==", - "license": "MIT", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", + "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", "dependencies": { - "@floating-ui/utils": "^0.2.7" + "@floating-ui/utils": "^0.2.8" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.10", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.10.tgz", - "integrity": "sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==", - "license": "MIT", + "version": "1.6.12", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz", + "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==", "dependencies": { "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.7" + "@floating-ui/utils": "^0.2.8" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz", - "integrity": "sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==", - "license": "MIT", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", + "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", "dependencies": { "@floating-ui/dom": "^1.0.0" }, @@ -215,10 +212,9 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.7.tgz", - "integrity": "sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==", - "license": "MIT" + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", + "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==" }, "node_modules/@humanfs/core": { "version": "0.19.1", @@ -455,16 +451,15 @@ } }, "node_modules/@next/env": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.0.3.tgz", - "integrity": "sha512-t9Xy32pjNOvVn2AS+Utt6VmyrshbpfUMhIjFO60gI58deSo/KgLOp31XZ4O+kY/Is8WAGYwA5gR7kOb1eORDBA==" + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.1.2.tgz", + "integrity": "sha512-Hm3jIGsoUl6RLB1vzY+dZeqb+/kWPZ+h34yiWxW0dV87l8Im/eMOwpOA+a0L78U0HM04syEjXuRlCozqpwuojQ==" }, "node_modules/@next/eslint-plugin-next": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.0.tgz", - "integrity": "sha512-+jPT0h+nelBT6HC9ZCHGc7DgGVy04cv4shYdAe6tKlEbjQUtwU3LzQhzbDHQyY2m6g39m6B0kOFVuLGBrxxbGg==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.2.tgz", + "integrity": "sha512-sgfw3+WdaYOGPKCvM1L+UucBmRfh8V2Ygefp7ELON0+0vY7uohQwXXnVWg3rY7mXDKharQR3o7uedpfvnU2hlQ==", "dev": true, - "license": "MIT", "dependencies": { "fast-glob": "3.3.1" } @@ -474,7 +469,6 @@ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -491,7 +485,6 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -500,9 +493,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.0.3.tgz", - "integrity": "sha512-s3Q/NOorCsLYdCKvQlWU+a+GeAd3C8Rb3L1YnetsgwXzhc3UTWrtQpB/3eCjFOdGUj5QmXfRak12uocd1ZiiQw==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.1.2.tgz", + "integrity": "sha512-b9TN7q+j5/7+rGLhFAVZiKJGIASuo8tWvInGfAd8wsULjB1uNGRCj1z1WZwwPWzVQbIKWFYqc+9L7W09qwt52w==", "cpu": [ "arm64" ], @@ -515,9 +508,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.0.3.tgz", - "integrity": "sha512-Zxl/TwyXVZPCFSf0u2BNj5sE0F2uR6iSKxWpq4Wlk/Sv9Ob6YCKByQTkV2y6BCic+fkabp9190hyrDdPA/dNrw==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.1.2.tgz", + "integrity": "sha512-caR62jNDUCU+qobStO6YJ05p9E+LR0EoXh1EEmyU69cYydsAy7drMcOlUlRtQihM6K6QfvNwJuLhsHcCzNpqtA==", "cpu": [ "x64" ], @@ -530,9 +523,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.0.3.tgz", - "integrity": "sha512-T5+gg2EwpsY3OoaLxUIofmMb7ohAUlcNZW0fPQ6YAutaWJaxt1Z1h+8zdl4FRIOr5ABAAhXtBcpkZNwUcKI2fw==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.1.2.tgz", + "integrity": "sha512-fHHXBusURjBmN6VBUtu6/5s7cCeEkuGAb/ZZiGHBLVBXMBy4D5QpM8P33Or8JD1nlOjm/ZT9sEE5HouQ0F+hUA==", "cpu": [ "arm64" ], @@ -545,9 +538,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.0.3.tgz", - "integrity": "sha512-WkAk6R60mwDjH4lG/JBpb2xHl2/0Vj0ZRu1TIzWuOYfQ9tt9NFsIinI1Epma77JVgy81F32X/AeD+B2cBu/YQA==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.1.2.tgz", + "integrity": "sha512-9CF1Pnivij7+M3G74lxr+e9h6o2YNIe7QtExWq1KUK4hsOLTBv6FJikEwCaC3NeYTflzrm69E5UfwEAbV2U9/g==", "cpu": [ "arm64" ], @@ -560,9 +553,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.0.3.tgz", - "integrity": "sha512-gWL/Cta1aPVqIGgDb6nxkqy06DkwJ9gAnKORdHWX1QBbSZZB+biFYPFti8aKIQL7otCE1pjyPaXpFzGeG2OS2w==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.1.2.tgz", + "integrity": "sha512-tINV7WmcTUf4oM/eN3Yuu/f8jQ5C6AkueZPKeALs/qfdfX57eNv4Ij7rt0SA6iZ8+fMobVfcFVv664Op0caCCg==", "cpu": [ "x64" ], @@ -575,9 +568,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.0.3.tgz", - "integrity": "sha512-QQEMwFd8r7C0GxQS62Zcdy6GKx999I/rTO2ubdXEe+MlZk9ZiinsrjwoiBL5/57tfyjikgh6GOU2WRQVUej3UA==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.1.2.tgz", + "integrity": "sha512-jf2IseC4WRsGkzeUw/cK3wci9pxR53GlLAt30+y+B+2qAQxMw6WAC3QrANIKxkcoPU3JFh/10uFfmoMDF9JXKg==", "cpu": [ "x64" ], @@ -590,9 +583,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.0.3.tgz", - "integrity": "sha512-9TEp47AAd/ms9fPNgtgnT7F3M1Hf7koIYYWCMQ9neOwjbVWJsHZxrFbI3iEDJ8rf1TDGpmHbKxXf2IFpAvheIQ==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.1.2.tgz", + "integrity": "sha512-wvg7MlfnaociP7k8lxLX4s2iBJm4BrNiNFhVUY+Yur5yhAJHfkS8qPPeDEUH8rQiY0PX3u/P7Q/wcg6Mv6GSAA==", "cpu": [ "arm64" ], @@ -605,9 +598,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.0.3.tgz", - "integrity": "sha512-VNAz+HN4OGgvZs6MOoVfnn41kBzT+M+tB+OK4cww6DNyWS6wKaDpaAm/qLeOUbnMh0oVx1+mg0uoYARF69dJyA==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.1.2.tgz", + "integrity": "sha512-D3cNA8NoT3aWISWmo7HF5Eyko/0OdOO+VagkoJuiTk7pyX3P/b+n8XA/MYvyR+xSVcbKn68B1rY9fgqjNISqzQ==", "cpu": [ "x64" ], @@ -695,7 +688,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz", "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==", - "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0" }, @@ -761,7 +753,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz", "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==", - "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-context": "1.1.0", @@ -862,6 +853,30 @@ } } }, + "node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-direction": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", @@ -881,7 +896,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", - "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", @@ -964,7 +978,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz", "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==", - "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-primitive": "2.0.0", @@ -1100,11 +1113,34 @@ } } }, + "node_modules/@radix-ui/react-menu/node_modules/react-remove-scroll": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-popper": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==", - "license": "MIT", "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.0", @@ -1136,7 +1172,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", - "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-use-layout-effect": "1.1.0" @@ -1160,7 +1195,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", - "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-use-layout-effect": "1.1.0" @@ -1184,7 +1218,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", - "license": "MIT", "dependencies": { "@radix-ui/react-slot": "1.1.0" }, @@ -1312,6 +1345,30 @@ } } }, + "node_modules/@radix-ui/react-select/node_modules/react-remove-scroll": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", @@ -1463,7 +1520,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", - "license": "MIT", "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.0" }, @@ -1511,7 +1567,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz", "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==", - "license": "MIT", "dependencies": { "@radix-ui/rect": "1.1.0" }, @@ -1547,7 +1602,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz", "integrity": "sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==", - "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0" }, @@ -1569,8 +1623,7 @@ "node_modules/@radix-ui/rect": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", - "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==", - "license": "MIT" + "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==" }, "node_modules/@rtsao/scc": { "version": "1.1.0", @@ -1592,11 +1645,11 @@ "license": "Apache-2.0" }, "node_modules/@swc/helpers": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz", - "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==", + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", "dependencies": { - "tslib": "^2.4.0" + "tslib": "^2.8.0" } }, "node_modules/@types/cytoscape": { @@ -1652,21 +1705,12 @@ "undici-types": "~6.20.0" } }, - "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "devOptional": true, - "license": "MIT" - }, "node_modules/@types/react": { - "version": "18.3.12", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", - "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.2.tgz", + "integrity": "sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg==", "devOptional": true, - "license": "MIT", "dependencies": { - "@types/prop-types": "*", "csstype": "^3.0.2" } }, @@ -1681,12 +1725,12 @@ } }, "node_modules/@types/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.2.tgz", + "integrity": "sha512-c1s+7TKFaDRRxr1TxccIX2u7sfCnc3RxkVyBIUA2lCpyqCF+QoAwQ/CBg7bsMdVwP120HEH143VQezKtef5nCg==", "devOptional": true, - "dependencies": { - "@types/react": "*" + "peerDependencies": { + "@types/react": "^19.0.0" } }, "node_modules/@types/react-syntax-highlighter": { @@ -2854,8 +2898,7 @@ "node_modules/detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", - "license": "MIT" + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" }, "node_modules/didyoumean": { "version": "1.2.2", @@ -3177,13 +3220,12 @@ } }, "node_modules/eslint-config-next": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.1.0.tgz", - "integrity": "sha512-gADO+nKVseGso3DtOrYX9H7TxB/MuX7AUYhMlvQMqLYvUWu4HrOQuU7cC1HW74tHIqkAvXdwgAz3TCbczzSEXw==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.1.2.tgz", + "integrity": "sha512-PrMm1/4zWSJ689wd/ypWIR5ZF1uvmp3EkgpgBV1Yu6PhEobBjXMGgT8bVNelwl17LXojO8D5ePFRiI4qXjsPRA==", "dev": true, - "license": "MIT", "dependencies": { - "@next/eslint-plugin-next": "15.1.0", + "@next/eslint-plugin-next": "15.1.2", "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", @@ -3808,7 +3850,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", - "license": "MIT", "engines": { "node": ">=6" } @@ -4144,15 +4185,6 @@ "node": ">= 0.4" } }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, "node_modules/is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", @@ -4937,13 +4969,13 @@ "license": "MIT" }, "node_modules/next": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/next/-/next-15.0.3.tgz", - "integrity": "sha512-ontCbCRKJUIoivAdGB34yCaOcPgYXr9AAkV/IwqFfWWTXEPUgLYkSkqBhIk9KK7gGmgjc64B+RdoeIDM13Irnw==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/next/-/next-15.1.2.tgz", + "integrity": "sha512-nLJDV7peNy+0oHlmY2JZjzMfJ8Aj0/dd3jCwSZS8ZiO5nkQfcZRqDrRN3U5rJtqVTQneIOGZzb6LCNrk7trMCQ==", "dependencies": { - "@next/env": "15.0.3", + "@next/env": "15.1.2", "@swc/counter": "0.1.3", - "@swc/helpers": "0.5.13", + "@swc/helpers": "0.5.15", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", @@ -4956,22 +4988,22 @@ "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "15.0.3", - "@next/swc-darwin-x64": "15.0.3", - "@next/swc-linux-arm64-gnu": "15.0.3", - "@next/swc-linux-arm64-musl": "15.0.3", - "@next/swc-linux-x64-gnu": "15.0.3", - "@next/swc-linux-x64-musl": "15.0.3", - "@next/swc-win32-arm64-msvc": "15.0.3", - "@next/swc-win32-x64-msvc": "15.0.3", + "@next/swc-darwin-arm64": "15.1.2", + "@next/swc-darwin-x64": "15.1.2", + "@next/swc-linux-arm64-gnu": "15.1.2", + "@next/swc-linux-arm64-musl": "15.1.2", + "@next/swc-linux-x64-gnu": "15.1.2", + "@next/swc-linux-x64-musl": "15.1.2", + "@next/swc-win32-arm64-msvc": "15.1.2", + "@next/swc-win32-x64-msvc": "15.1.2", "sharp": "^0.33.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.41.2", "babel-plugin-react-compiler": "*", - "react": "^18.2.0 || 19.0.0-rc-66855b96-20241106", - "react-dom": "^18.2.0 || 19.0.0-rc-66855b96-20241106", + "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "peerDependenciesMeta": { @@ -5576,13 +5608,9 @@ "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==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", + "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", "engines": { "node": ">=0.10.0" } @@ -5613,16 +5641,14 @@ } }, "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==", - "license": "MIT", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz", + "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==", "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" + "scheduler": "^0.25.0" }, "peerDependencies": { - "react": "^18.3.1" + "react": "^19.0.0" } }, "node_modules/react-is": { @@ -5631,45 +5657,20 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "license": "MIT" }, - "node_modules/react-remove-scroll": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", - "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", - "dependencies": { - "react-remove-scroll-bar": "^2.3.6", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/react-remove-scroll-bar": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", - "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", - "license": "MIT", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", "dependencies": { - "react-style-singleton": "^2.2.1", + "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -5688,21 +5689,19 @@ } }, "node_modules/react-style-singleton": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", - "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", - "license": "MIT", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", "dependencies": { "get-nonce": "^1.0.0", - "invariant": "^2.2.4", "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -5943,13 +5942,9 @@ } }, "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.25.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", + "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==" }, "node_modules/semver": { "version": "7.6.3", @@ -6714,10 +6709,9 @@ } }, "node_modules/use-callback-ref": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", - "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", - "license": "MIT", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", "dependencies": { "tslib": "^2.0.0" }, @@ -6725,8 +6719,8 @@ "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -6735,10 +6729,9 @@ } }, "node_modules/use-sidecar": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", - "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", - "license": "MIT", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" @@ -6747,8 +6740,8 @@ "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { diff --git a/package.json b/package.json index 364999ec..b081fd9c 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next dev", + "dev": "next dev --turbopack", "build": "next build", "start": "next start", "lint": "next lint" @@ -24,13 +24,13 @@ "cytoscape": "^3.30.4", "cytoscape-fcose": "^2.2.0", "lucide-react": "^0.441.0", - "next": "15.0.3", + "next": "15.1.2", "playwright": "^1.49.1", "playwright-core": "^1.49.1", - "react": "^18", + "react": "19.0.0", "react-cytoscape": "^1.0.6", "react-cytoscapejs": "^2.0.0", - "react-dom": "^18", + "react-dom": "19.0.0", "react-resizable-panels": "^2.0.20", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", @@ -42,13 +42,17 @@ "@types/cytoscape": "^3.21.8", "@types/cytoscape-fcose": "^2.2.4", "@types/node": "^22.10.2", - "@types/react": "^18", + "@types/react": "19.0.2", "@types/react-cytoscapejs": "^1.2.5", - "@types/react-dom": "^18", + "@types/react-dom": "19.0.2", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", - "eslint-config-next": "15.1.0", + "eslint-config-next": "15.1.2", "tailwindcss": "^3.4.3", "typescript": "^5" + }, + "overrides": { + "@types/react": "19.0.2", + "@types/react-dom": "19.0.2" } } From c310e8646b8b5b5bfb4e8aa482ae0068175321b1 Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Sun, 22 Dec 2024 13:40:31 +0200 Subject: [PATCH 44/60] Revert "commit" This reverts commit ca6effff89470023d3489eda51ec1d8b6ebd4830. --- app/components/chat.tsx | 2 +- app/components/toolbar.tsx | 2 +- package-lock.json | 381 +++++++++++++++++++------------------ package.json | 18 +- 4 files changed, 203 insertions(+), 200 deletions(-) diff --git a/app/components/chat.tsx b/app/components/chat.tsx index 0aa18330..8a779f95 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -122,7 +122,7 @@ export function Chat({ repo, path, setPath, graph, chartRef, selectedPathId, isP const [sugOpen, setSugOpen] = useState(false); // A reference to the chat container to allow scrolling to the bottom - const containerRef: React.RefObject = useRef(null); + const containerRef: React.RefObject = useRef(null); const isSendMessage = messages.some(m => m.type === MessageTypes.Pending) || (messages.some(m => m.text === "Please select a starting point and the end point. Select or press relevant item on the graph") && !messages.some(m => m.type === MessageTypes.Path)) diff --git a/app/components/toolbar.tsx b/app/components/toolbar.tsx index f57e26f8..00264fb8 100644 --- a/app/components/toolbar.tsx +++ b/app/components/toolbar.tsx @@ -4,7 +4,7 @@ import { Dispatch, RefObject, SetStateAction } from "react"; import { Node } from "./model"; interface Props { - chartRef: RefObject + chartRef: RefObject setSelectedObj: Dispatch> className?: string } diff --git a/package-lock.json b/package-lock.json index 5efd9c3c..3a5e58ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,13 +23,13 @@ "cytoscape": "^3.30.4", "cytoscape-fcose": "^2.2.0", "lucide-react": "^0.441.0", - "next": "15.1.2", + "next": "15.0.3", "playwright": "^1.49.1", "playwright-core": "^1.49.1", - "react": "19.0.0", + "react": "^18", "react-cytoscape": "^1.0.6", "react-cytoscapejs": "^2.0.0", - "react-dom": "19.0.0", + "react-dom": "^18", "react-resizable-panels": "^2.0.20", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", @@ -41,12 +41,12 @@ "@types/cytoscape": "^3.21.8", "@types/cytoscape-fcose": "^2.2.4", "@types/node": "^22.10.2", - "@types/react": "19.0.2", + "@types/react": "^18", "@types/react-cytoscapejs": "^1.2.5", - "@types/react-dom": "19.0.2", + "@types/react-dom": "^18", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", - "eslint-config-next": "15.1.2", + "eslint-config-next": "15.1.0", "tailwindcss": "^3.4.3", "typescript": "^5" } @@ -183,26 +183,29 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", - "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.7.tgz", + "integrity": "sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==", + "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.8" + "@floating-ui/utils": "^0.2.7" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.12", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz", - "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==", + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.10.tgz", + "integrity": "sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==", + "license": "MIT", "dependencies": { "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.8" + "@floating-ui/utils": "^0.2.7" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", - "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz", + "integrity": "sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==", + "license": "MIT", "dependencies": { "@floating-ui/dom": "^1.0.0" }, @@ -212,9 +215,10 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", - "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==" + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.7.tgz", + "integrity": "sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==", + "license": "MIT" }, "node_modules/@humanfs/core": { "version": "0.19.1", @@ -451,15 +455,16 @@ } }, "node_modules/@next/env": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.1.2.tgz", - "integrity": "sha512-Hm3jIGsoUl6RLB1vzY+dZeqb+/kWPZ+h34yiWxW0dV87l8Im/eMOwpOA+a0L78U0HM04syEjXuRlCozqpwuojQ==" + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.0.3.tgz", + "integrity": "sha512-t9Xy32pjNOvVn2AS+Utt6VmyrshbpfUMhIjFO60gI58deSo/KgLOp31XZ4O+kY/Is8WAGYwA5gR7kOb1eORDBA==" }, "node_modules/@next/eslint-plugin-next": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.2.tgz", - "integrity": "sha512-sgfw3+WdaYOGPKCvM1L+UucBmRfh8V2Ygefp7ELON0+0vY7uohQwXXnVWg3rY7mXDKharQR3o7uedpfvnU2hlQ==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.0.tgz", + "integrity": "sha512-+jPT0h+nelBT6HC9ZCHGc7DgGVy04cv4shYdAe6tKlEbjQUtwU3LzQhzbDHQyY2m6g39m6B0kOFVuLGBrxxbGg==", "dev": true, + "license": "MIT", "dependencies": { "fast-glob": "3.3.1" } @@ -469,6 +474,7 @@ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -485,6 +491,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -493,9 +500,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.1.2.tgz", - "integrity": "sha512-b9TN7q+j5/7+rGLhFAVZiKJGIASuo8tWvInGfAd8wsULjB1uNGRCj1z1WZwwPWzVQbIKWFYqc+9L7W09qwt52w==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.0.3.tgz", + "integrity": "sha512-s3Q/NOorCsLYdCKvQlWU+a+GeAd3C8Rb3L1YnetsgwXzhc3UTWrtQpB/3eCjFOdGUj5QmXfRak12uocd1ZiiQw==", "cpu": [ "arm64" ], @@ -508,9 +515,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.1.2.tgz", - "integrity": "sha512-caR62jNDUCU+qobStO6YJ05p9E+LR0EoXh1EEmyU69cYydsAy7drMcOlUlRtQihM6K6QfvNwJuLhsHcCzNpqtA==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.0.3.tgz", + "integrity": "sha512-Zxl/TwyXVZPCFSf0u2BNj5sE0F2uR6iSKxWpq4Wlk/Sv9Ob6YCKByQTkV2y6BCic+fkabp9190hyrDdPA/dNrw==", "cpu": [ "x64" ], @@ -523,9 +530,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.1.2.tgz", - "integrity": "sha512-fHHXBusURjBmN6VBUtu6/5s7cCeEkuGAb/ZZiGHBLVBXMBy4D5QpM8P33Or8JD1nlOjm/ZT9sEE5HouQ0F+hUA==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.0.3.tgz", + "integrity": "sha512-T5+gg2EwpsY3OoaLxUIofmMb7ohAUlcNZW0fPQ6YAutaWJaxt1Z1h+8zdl4FRIOr5ABAAhXtBcpkZNwUcKI2fw==", "cpu": [ "arm64" ], @@ -538,9 +545,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.1.2.tgz", - "integrity": "sha512-9CF1Pnivij7+M3G74lxr+e9h6o2YNIe7QtExWq1KUK4hsOLTBv6FJikEwCaC3NeYTflzrm69E5UfwEAbV2U9/g==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.0.3.tgz", + "integrity": "sha512-WkAk6R60mwDjH4lG/JBpb2xHl2/0Vj0ZRu1TIzWuOYfQ9tt9NFsIinI1Epma77JVgy81F32X/AeD+B2cBu/YQA==", "cpu": [ "arm64" ], @@ -553,9 +560,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.1.2.tgz", - "integrity": "sha512-tINV7WmcTUf4oM/eN3Yuu/f8jQ5C6AkueZPKeALs/qfdfX57eNv4Ij7rt0SA6iZ8+fMobVfcFVv664Op0caCCg==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.0.3.tgz", + "integrity": "sha512-gWL/Cta1aPVqIGgDb6nxkqy06DkwJ9gAnKORdHWX1QBbSZZB+biFYPFti8aKIQL7otCE1pjyPaXpFzGeG2OS2w==", "cpu": [ "x64" ], @@ -568,9 +575,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.1.2.tgz", - "integrity": "sha512-jf2IseC4WRsGkzeUw/cK3wci9pxR53GlLAt30+y+B+2qAQxMw6WAC3QrANIKxkcoPU3JFh/10uFfmoMDF9JXKg==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.0.3.tgz", + "integrity": "sha512-QQEMwFd8r7C0GxQS62Zcdy6GKx999I/rTO2ubdXEe+MlZk9ZiinsrjwoiBL5/57tfyjikgh6GOU2WRQVUej3UA==", "cpu": [ "x64" ], @@ -583,9 +590,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.1.2.tgz", - "integrity": "sha512-wvg7MlfnaociP7k8lxLX4s2iBJm4BrNiNFhVUY+Yur5yhAJHfkS8qPPeDEUH8rQiY0PX3u/P7Q/wcg6Mv6GSAA==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.0.3.tgz", + "integrity": "sha512-9TEp47AAd/ms9fPNgtgnT7F3M1Hf7koIYYWCMQ9neOwjbVWJsHZxrFbI3iEDJ8rf1TDGpmHbKxXf2IFpAvheIQ==", "cpu": [ "arm64" ], @@ -598,9 +605,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.1.2.tgz", - "integrity": "sha512-D3cNA8NoT3aWISWmo7HF5Eyko/0OdOO+VagkoJuiTk7pyX3P/b+n8XA/MYvyR+xSVcbKn68B1rY9fgqjNISqzQ==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.0.3.tgz", + "integrity": "sha512-VNAz+HN4OGgvZs6MOoVfnn41kBzT+M+tB+OK4cww6DNyWS6wKaDpaAm/qLeOUbnMh0oVx1+mg0uoYARF69dJyA==", "cpu": [ "x64" ], @@ -688,6 +695,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz", "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==", + "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0" }, @@ -753,6 +761,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz", "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==", + "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-context": "1.1.0", @@ -853,30 +862,6 @@ } } }, - "node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", - "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", - "dependencies": { - "react-remove-scroll-bar": "^2.3.6", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-direction": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", @@ -896,6 +881,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", + "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", @@ -978,6 +964,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz", "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==", + "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-primitive": "2.0.0", @@ -1113,34 +1100,11 @@ } } }, - "node_modules/@radix-ui/react-menu/node_modules/react-remove-scroll": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", - "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", - "dependencies": { - "react-remove-scroll-bar": "^2.3.6", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-popper": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==", + "license": "MIT", "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.0", @@ -1172,6 +1136,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", + "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-use-layout-effect": "1.1.0" @@ -1195,6 +1160,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", + "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-use-layout-effect": "1.1.0" @@ -1218,6 +1184,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", + "license": "MIT", "dependencies": { "@radix-ui/react-slot": "1.1.0" }, @@ -1345,30 +1312,6 @@ } } }, - "node_modules/@radix-ui/react-select/node_modules/react-remove-scroll": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", - "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", - "dependencies": { - "react-remove-scroll-bar": "^2.3.6", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", @@ -1520,6 +1463,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", + "license": "MIT", "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.0" }, @@ -1567,6 +1511,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz", "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==", + "license": "MIT", "dependencies": { "@radix-ui/rect": "1.1.0" }, @@ -1602,6 +1547,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz", "integrity": "sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==", + "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0" }, @@ -1623,7 +1569,8 @@ "node_modules/@radix-ui/rect": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", - "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==" + "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==", + "license": "MIT" }, "node_modules/@rtsao/scc": { "version": "1.1.0", @@ -1645,11 +1592,11 @@ "license": "Apache-2.0" }, "node_modules/@swc/helpers": { - "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", - "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz", + "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==", "dependencies": { - "tslib": "^2.8.0" + "tslib": "^2.4.0" } }, "node_modules/@types/cytoscape": { @@ -1705,12 +1652,21 @@ "undici-types": "~6.20.0" } }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "devOptional": true, + "license": "MIT" + }, "node_modules/@types/react": { - "version": "19.0.2", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.2.tgz", - "integrity": "sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg==", + "version": "18.3.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", + "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", "devOptional": true, + "license": "MIT", "dependencies": { + "@types/prop-types": "*", "csstype": "^3.0.2" } }, @@ -1725,12 +1681,12 @@ } }, "node_modules/@types/react-dom": { - "version": "19.0.2", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.2.tgz", - "integrity": "sha512-c1s+7TKFaDRRxr1TxccIX2u7sfCnc3RxkVyBIUA2lCpyqCF+QoAwQ/CBg7bsMdVwP120HEH143VQezKtef5nCg==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", "devOptional": true, - "peerDependencies": { - "@types/react": "^19.0.0" + "dependencies": { + "@types/react": "*" } }, "node_modules/@types/react-syntax-highlighter": { @@ -2898,7 +2854,8 @@ "node_modules/detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" }, "node_modules/didyoumean": { "version": "1.2.2", @@ -3220,12 +3177,13 @@ } }, "node_modules/eslint-config-next": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.1.2.tgz", - "integrity": "sha512-PrMm1/4zWSJ689wd/ypWIR5ZF1uvmp3EkgpgBV1Yu6PhEobBjXMGgT8bVNelwl17LXojO8D5ePFRiI4qXjsPRA==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.1.0.tgz", + "integrity": "sha512-gADO+nKVseGso3DtOrYX9H7TxB/MuX7AUYhMlvQMqLYvUWu4HrOQuU7cC1HW74tHIqkAvXdwgAz3TCbczzSEXw==", "dev": true, + "license": "MIT", "dependencies": { - "@next/eslint-plugin-next": "15.1.2", + "@next/eslint-plugin-next": "15.1.0", "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", @@ -3850,6 +3808,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", "engines": { "node": ">=6" } @@ -4185,6 +4144,15 @@ "node": ">= 0.4" } }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", @@ -4969,13 +4937,13 @@ "license": "MIT" }, "node_modules/next": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/next/-/next-15.1.2.tgz", - "integrity": "sha512-nLJDV7peNy+0oHlmY2JZjzMfJ8Aj0/dd3jCwSZS8ZiO5nkQfcZRqDrRN3U5rJtqVTQneIOGZzb6LCNrk7trMCQ==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/next/-/next-15.0.3.tgz", + "integrity": "sha512-ontCbCRKJUIoivAdGB34yCaOcPgYXr9AAkV/IwqFfWWTXEPUgLYkSkqBhIk9KK7gGmgjc64B+RdoeIDM13Irnw==", "dependencies": { - "@next/env": "15.1.2", + "@next/env": "15.0.3", "@swc/counter": "0.1.3", - "@swc/helpers": "0.5.15", + "@swc/helpers": "0.5.13", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", @@ -4988,22 +4956,22 @@ "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "15.1.2", - "@next/swc-darwin-x64": "15.1.2", - "@next/swc-linux-arm64-gnu": "15.1.2", - "@next/swc-linux-arm64-musl": "15.1.2", - "@next/swc-linux-x64-gnu": "15.1.2", - "@next/swc-linux-x64-musl": "15.1.2", - "@next/swc-win32-arm64-msvc": "15.1.2", - "@next/swc-win32-x64-msvc": "15.1.2", + "@next/swc-darwin-arm64": "15.0.3", + "@next/swc-darwin-x64": "15.0.3", + "@next/swc-linux-arm64-gnu": "15.0.3", + "@next/swc-linux-arm64-musl": "15.0.3", + "@next/swc-linux-x64-gnu": "15.0.3", + "@next/swc-linux-x64-musl": "15.0.3", + "@next/swc-win32-arm64-msvc": "15.0.3", + "@next/swc-win32-x64-msvc": "15.0.3", "sharp": "^0.33.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.41.2", "babel-plugin-react-compiler": "*", - "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", - "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react": "^18.2.0 || 19.0.0-rc-66855b96-20241106", + "react-dom": "^18.2.0 || 19.0.0-rc-66855b96-20241106", "sass": "^1.3.0" }, "peerDependenciesMeta": { @@ -5608,9 +5576,13 @@ "license": "MIT" }, "node_modules/react": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", - "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", + "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==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, "engines": { "node": ">=0.10.0" } @@ -5641,14 +5613,16 @@ } }, "node_modules/react-dom": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz", - "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", "dependencies": { - "scheduler": "^0.25.0" + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" }, "peerDependencies": { - "react": "^19.0.0" + "react": "^18.3.1" } }, "node_modules/react-is": { @@ -5657,20 +5631,45 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "license": "MIT" }, + "node_modules/react-remove-scroll": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/react-remove-scroll-bar": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", - "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", + "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", + "license": "MIT", "dependencies": { - "react-style-singleton": "^2.2.2", + "react-style-singleton": "^2.2.1", "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -5689,19 +5688,21 @@ } }, "node_modules/react-style-singleton": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", - "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "license": "MIT", "dependencies": { "get-nonce": "^1.0.0", + "invariant": "^2.2.4", "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -5942,9 +5943,13 @@ } }, "node_modules/scheduler": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", - "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==" + "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" + } }, "node_modules/semver": { "version": "7.6.3", @@ -6709,9 +6714,10 @@ } }, "node_modules/use-callback-ref": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", - "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", + "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", + "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, @@ -6719,8 +6725,8 @@ "node": ">=10" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -6729,9 +6735,10 @@ } }, "node_modules/use-sidecar": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", - "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "license": "MIT", "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" @@ -6740,8 +6747,8 @@ "node": ">=10" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { diff --git a/package.json b/package.json index b081fd9c..364999ec 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next dev --turbopack", + "dev": "next dev", "build": "next build", "start": "next start", "lint": "next lint" @@ -24,13 +24,13 @@ "cytoscape": "^3.30.4", "cytoscape-fcose": "^2.2.0", "lucide-react": "^0.441.0", - "next": "15.1.2", + "next": "15.0.3", "playwright": "^1.49.1", "playwright-core": "^1.49.1", - "react": "19.0.0", + "react": "^18", "react-cytoscape": "^1.0.6", "react-cytoscapejs": "^2.0.0", - "react-dom": "19.0.0", + "react-dom": "^18", "react-resizable-panels": "^2.0.20", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", @@ -42,17 +42,13 @@ "@types/cytoscape": "^3.21.8", "@types/cytoscape-fcose": "^2.2.4", "@types/node": "^22.10.2", - "@types/react": "19.0.2", + "@types/react": "^18", "@types/react-cytoscapejs": "^1.2.5", - "@types/react-dom": "19.0.2", + "@types/react-dom": "^18", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", - "eslint-config-next": "15.1.2", + "eslint-config-next": "15.1.0", "tailwindcss": "^3.4.3", "typescript": "^5" - }, - "overrides": { - "@types/react": "19.0.2", - "@types/react-dom": "19.0.2" } } From be92c096ae45102057877e4b8f2f5ec0ca3f3265 Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Sun, 22 Dec 2024 13:39:46 +0200 Subject: [PATCH 45/60] commit --- app/components/chat.tsx | 2 +- app/components/toolbar.tsx | 2 +- package-lock.json | 381 ++++++++++++++++++------------------- package.json | 18 +- 4 files changed, 200 insertions(+), 203 deletions(-) diff --git a/app/components/chat.tsx b/app/components/chat.tsx index 8a779f95..0aa18330 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -122,7 +122,7 @@ export function Chat({ repo, path, setPath, graph, chartRef, selectedPathId, isP const [sugOpen, setSugOpen] = useState(false); // A reference to the chat container to allow scrolling to the bottom - const containerRef: React.RefObject = useRef(null); + const containerRef: React.RefObject = useRef(null); const isSendMessage = messages.some(m => m.type === MessageTypes.Pending) || (messages.some(m => m.text === "Please select a starting point and the end point. Select or press relevant item on the graph") && !messages.some(m => m.type === MessageTypes.Path)) diff --git a/app/components/toolbar.tsx b/app/components/toolbar.tsx index 00264fb8..f57e26f8 100644 --- a/app/components/toolbar.tsx +++ b/app/components/toolbar.tsx @@ -4,7 +4,7 @@ import { Dispatch, RefObject, SetStateAction } from "react"; import { Node } from "./model"; interface Props { - chartRef: RefObject + chartRef: RefObject setSelectedObj: Dispatch> className?: string } diff --git a/package-lock.json b/package-lock.json index 3a5e58ce..5efd9c3c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,13 +23,13 @@ "cytoscape": "^3.30.4", "cytoscape-fcose": "^2.2.0", "lucide-react": "^0.441.0", - "next": "15.0.3", + "next": "15.1.2", "playwright": "^1.49.1", "playwright-core": "^1.49.1", - "react": "^18", + "react": "19.0.0", "react-cytoscape": "^1.0.6", "react-cytoscapejs": "^2.0.0", - "react-dom": "^18", + "react-dom": "19.0.0", "react-resizable-panels": "^2.0.20", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", @@ -41,12 +41,12 @@ "@types/cytoscape": "^3.21.8", "@types/cytoscape-fcose": "^2.2.4", "@types/node": "^22.10.2", - "@types/react": "^18", + "@types/react": "19.0.2", "@types/react-cytoscapejs": "^1.2.5", - "@types/react-dom": "^18", + "@types/react-dom": "19.0.2", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", - "eslint-config-next": "15.1.0", + "eslint-config-next": "15.1.2", "tailwindcss": "^3.4.3", "typescript": "^5" } @@ -183,29 +183,26 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.7.tgz", - "integrity": "sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==", - "license": "MIT", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", + "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", "dependencies": { - "@floating-ui/utils": "^0.2.7" + "@floating-ui/utils": "^0.2.8" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.10", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.10.tgz", - "integrity": "sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==", - "license": "MIT", + "version": "1.6.12", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz", + "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==", "dependencies": { "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.7" + "@floating-ui/utils": "^0.2.8" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz", - "integrity": "sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==", - "license": "MIT", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", + "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", "dependencies": { "@floating-ui/dom": "^1.0.0" }, @@ -215,10 +212,9 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.7.tgz", - "integrity": "sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==", - "license": "MIT" + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", + "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==" }, "node_modules/@humanfs/core": { "version": "0.19.1", @@ -455,16 +451,15 @@ } }, "node_modules/@next/env": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.0.3.tgz", - "integrity": "sha512-t9Xy32pjNOvVn2AS+Utt6VmyrshbpfUMhIjFO60gI58deSo/KgLOp31XZ4O+kY/Is8WAGYwA5gR7kOb1eORDBA==" + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.1.2.tgz", + "integrity": "sha512-Hm3jIGsoUl6RLB1vzY+dZeqb+/kWPZ+h34yiWxW0dV87l8Im/eMOwpOA+a0L78U0HM04syEjXuRlCozqpwuojQ==" }, "node_modules/@next/eslint-plugin-next": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.0.tgz", - "integrity": "sha512-+jPT0h+nelBT6HC9ZCHGc7DgGVy04cv4shYdAe6tKlEbjQUtwU3LzQhzbDHQyY2m6g39m6B0kOFVuLGBrxxbGg==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.2.tgz", + "integrity": "sha512-sgfw3+WdaYOGPKCvM1L+UucBmRfh8V2Ygefp7ELON0+0vY7uohQwXXnVWg3rY7mXDKharQR3o7uedpfvnU2hlQ==", "dev": true, - "license": "MIT", "dependencies": { "fast-glob": "3.3.1" } @@ -474,7 +469,6 @@ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -491,7 +485,6 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -500,9 +493,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.0.3.tgz", - "integrity": "sha512-s3Q/NOorCsLYdCKvQlWU+a+GeAd3C8Rb3L1YnetsgwXzhc3UTWrtQpB/3eCjFOdGUj5QmXfRak12uocd1ZiiQw==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.1.2.tgz", + "integrity": "sha512-b9TN7q+j5/7+rGLhFAVZiKJGIASuo8tWvInGfAd8wsULjB1uNGRCj1z1WZwwPWzVQbIKWFYqc+9L7W09qwt52w==", "cpu": [ "arm64" ], @@ -515,9 +508,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.0.3.tgz", - "integrity": "sha512-Zxl/TwyXVZPCFSf0u2BNj5sE0F2uR6iSKxWpq4Wlk/Sv9Ob6YCKByQTkV2y6BCic+fkabp9190hyrDdPA/dNrw==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.1.2.tgz", + "integrity": "sha512-caR62jNDUCU+qobStO6YJ05p9E+LR0EoXh1EEmyU69cYydsAy7drMcOlUlRtQihM6K6QfvNwJuLhsHcCzNpqtA==", "cpu": [ "x64" ], @@ -530,9 +523,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.0.3.tgz", - "integrity": "sha512-T5+gg2EwpsY3OoaLxUIofmMb7ohAUlcNZW0fPQ6YAutaWJaxt1Z1h+8zdl4FRIOr5ABAAhXtBcpkZNwUcKI2fw==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.1.2.tgz", + "integrity": "sha512-fHHXBusURjBmN6VBUtu6/5s7cCeEkuGAb/ZZiGHBLVBXMBy4D5QpM8P33Or8JD1nlOjm/ZT9sEE5HouQ0F+hUA==", "cpu": [ "arm64" ], @@ -545,9 +538,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.0.3.tgz", - "integrity": "sha512-WkAk6R60mwDjH4lG/JBpb2xHl2/0Vj0ZRu1TIzWuOYfQ9tt9NFsIinI1Epma77JVgy81F32X/AeD+B2cBu/YQA==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.1.2.tgz", + "integrity": "sha512-9CF1Pnivij7+M3G74lxr+e9h6o2YNIe7QtExWq1KUK4hsOLTBv6FJikEwCaC3NeYTflzrm69E5UfwEAbV2U9/g==", "cpu": [ "arm64" ], @@ -560,9 +553,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.0.3.tgz", - "integrity": "sha512-gWL/Cta1aPVqIGgDb6nxkqy06DkwJ9gAnKORdHWX1QBbSZZB+biFYPFti8aKIQL7otCE1pjyPaXpFzGeG2OS2w==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.1.2.tgz", + "integrity": "sha512-tINV7WmcTUf4oM/eN3Yuu/f8jQ5C6AkueZPKeALs/qfdfX57eNv4Ij7rt0SA6iZ8+fMobVfcFVv664Op0caCCg==", "cpu": [ "x64" ], @@ -575,9 +568,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.0.3.tgz", - "integrity": "sha512-QQEMwFd8r7C0GxQS62Zcdy6GKx999I/rTO2ubdXEe+MlZk9ZiinsrjwoiBL5/57tfyjikgh6GOU2WRQVUej3UA==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.1.2.tgz", + "integrity": "sha512-jf2IseC4WRsGkzeUw/cK3wci9pxR53GlLAt30+y+B+2qAQxMw6WAC3QrANIKxkcoPU3JFh/10uFfmoMDF9JXKg==", "cpu": [ "x64" ], @@ -590,9 +583,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.0.3.tgz", - "integrity": "sha512-9TEp47AAd/ms9fPNgtgnT7F3M1Hf7koIYYWCMQ9neOwjbVWJsHZxrFbI3iEDJ8rf1TDGpmHbKxXf2IFpAvheIQ==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.1.2.tgz", + "integrity": "sha512-wvg7MlfnaociP7k8lxLX4s2iBJm4BrNiNFhVUY+Yur5yhAJHfkS8qPPeDEUH8rQiY0PX3u/P7Q/wcg6Mv6GSAA==", "cpu": [ "arm64" ], @@ -605,9 +598,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.0.3.tgz", - "integrity": "sha512-VNAz+HN4OGgvZs6MOoVfnn41kBzT+M+tB+OK4cww6DNyWS6wKaDpaAm/qLeOUbnMh0oVx1+mg0uoYARF69dJyA==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.1.2.tgz", + "integrity": "sha512-D3cNA8NoT3aWISWmo7HF5Eyko/0OdOO+VagkoJuiTk7pyX3P/b+n8XA/MYvyR+xSVcbKn68B1rY9fgqjNISqzQ==", "cpu": [ "x64" ], @@ -695,7 +688,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz", "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==", - "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0" }, @@ -761,7 +753,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz", "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==", - "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-context": "1.1.0", @@ -862,6 +853,30 @@ } } }, + "node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-direction": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", @@ -881,7 +896,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", - "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", @@ -964,7 +978,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz", "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==", - "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-primitive": "2.0.0", @@ -1100,11 +1113,34 @@ } } }, + "node_modules/@radix-ui/react-menu/node_modules/react-remove-scroll": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-popper": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==", - "license": "MIT", "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.0", @@ -1136,7 +1172,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", - "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-use-layout-effect": "1.1.0" @@ -1160,7 +1195,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", - "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-use-layout-effect": "1.1.0" @@ -1184,7 +1218,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", - "license": "MIT", "dependencies": { "@radix-ui/react-slot": "1.1.0" }, @@ -1312,6 +1345,30 @@ } } }, + "node_modules/@radix-ui/react-select/node_modules/react-remove-scroll": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", @@ -1463,7 +1520,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", - "license": "MIT", "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.0" }, @@ -1511,7 +1567,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz", "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==", - "license": "MIT", "dependencies": { "@radix-ui/rect": "1.1.0" }, @@ -1547,7 +1602,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz", "integrity": "sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==", - "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0" }, @@ -1569,8 +1623,7 @@ "node_modules/@radix-ui/rect": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", - "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==", - "license": "MIT" + "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==" }, "node_modules/@rtsao/scc": { "version": "1.1.0", @@ -1592,11 +1645,11 @@ "license": "Apache-2.0" }, "node_modules/@swc/helpers": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz", - "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==", + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", "dependencies": { - "tslib": "^2.4.0" + "tslib": "^2.8.0" } }, "node_modules/@types/cytoscape": { @@ -1652,21 +1705,12 @@ "undici-types": "~6.20.0" } }, - "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "devOptional": true, - "license": "MIT" - }, "node_modules/@types/react": { - "version": "18.3.12", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", - "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.2.tgz", + "integrity": "sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg==", "devOptional": true, - "license": "MIT", "dependencies": { - "@types/prop-types": "*", "csstype": "^3.0.2" } }, @@ -1681,12 +1725,12 @@ } }, "node_modules/@types/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.2.tgz", + "integrity": "sha512-c1s+7TKFaDRRxr1TxccIX2u7sfCnc3RxkVyBIUA2lCpyqCF+QoAwQ/CBg7bsMdVwP120HEH143VQezKtef5nCg==", "devOptional": true, - "dependencies": { - "@types/react": "*" + "peerDependencies": { + "@types/react": "^19.0.0" } }, "node_modules/@types/react-syntax-highlighter": { @@ -2854,8 +2898,7 @@ "node_modules/detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", - "license": "MIT" + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" }, "node_modules/didyoumean": { "version": "1.2.2", @@ -3177,13 +3220,12 @@ } }, "node_modules/eslint-config-next": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.1.0.tgz", - "integrity": "sha512-gADO+nKVseGso3DtOrYX9H7TxB/MuX7AUYhMlvQMqLYvUWu4HrOQuU7cC1HW74tHIqkAvXdwgAz3TCbczzSEXw==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.1.2.tgz", + "integrity": "sha512-PrMm1/4zWSJ689wd/ypWIR5ZF1uvmp3EkgpgBV1Yu6PhEobBjXMGgT8bVNelwl17LXojO8D5ePFRiI4qXjsPRA==", "dev": true, - "license": "MIT", "dependencies": { - "@next/eslint-plugin-next": "15.1.0", + "@next/eslint-plugin-next": "15.1.2", "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", @@ -3808,7 +3850,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", - "license": "MIT", "engines": { "node": ">=6" } @@ -4144,15 +4185,6 @@ "node": ">= 0.4" } }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, "node_modules/is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", @@ -4937,13 +4969,13 @@ "license": "MIT" }, "node_modules/next": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/next/-/next-15.0.3.tgz", - "integrity": "sha512-ontCbCRKJUIoivAdGB34yCaOcPgYXr9AAkV/IwqFfWWTXEPUgLYkSkqBhIk9KK7gGmgjc64B+RdoeIDM13Irnw==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/next/-/next-15.1.2.tgz", + "integrity": "sha512-nLJDV7peNy+0oHlmY2JZjzMfJ8Aj0/dd3jCwSZS8ZiO5nkQfcZRqDrRN3U5rJtqVTQneIOGZzb6LCNrk7trMCQ==", "dependencies": { - "@next/env": "15.0.3", + "@next/env": "15.1.2", "@swc/counter": "0.1.3", - "@swc/helpers": "0.5.13", + "@swc/helpers": "0.5.15", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", @@ -4956,22 +4988,22 @@ "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "15.0.3", - "@next/swc-darwin-x64": "15.0.3", - "@next/swc-linux-arm64-gnu": "15.0.3", - "@next/swc-linux-arm64-musl": "15.0.3", - "@next/swc-linux-x64-gnu": "15.0.3", - "@next/swc-linux-x64-musl": "15.0.3", - "@next/swc-win32-arm64-msvc": "15.0.3", - "@next/swc-win32-x64-msvc": "15.0.3", + "@next/swc-darwin-arm64": "15.1.2", + "@next/swc-darwin-x64": "15.1.2", + "@next/swc-linux-arm64-gnu": "15.1.2", + "@next/swc-linux-arm64-musl": "15.1.2", + "@next/swc-linux-x64-gnu": "15.1.2", + "@next/swc-linux-x64-musl": "15.1.2", + "@next/swc-win32-arm64-msvc": "15.1.2", + "@next/swc-win32-x64-msvc": "15.1.2", "sharp": "^0.33.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.41.2", "babel-plugin-react-compiler": "*", - "react": "^18.2.0 || 19.0.0-rc-66855b96-20241106", - "react-dom": "^18.2.0 || 19.0.0-rc-66855b96-20241106", + "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "peerDependenciesMeta": { @@ -5576,13 +5608,9 @@ "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==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", + "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", "engines": { "node": ">=0.10.0" } @@ -5613,16 +5641,14 @@ } }, "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==", - "license": "MIT", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz", + "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==", "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" + "scheduler": "^0.25.0" }, "peerDependencies": { - "react": "^18.3.1" + "react": "^19.0.0" } }, "node_modules/react-is": { @@ -5631,45 +5657,20 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "license": "MIT" }, - "node_modules/react-remove-scroll": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", - "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", - "dependencies": { - "react-remove-scroll-bar": "^2.3.6", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/react-remove-scroll-bar": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", - "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", - "license": "MIT", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", "dependencies": { - "react-style-singleton": "^2.2.1", + "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -5688,21 +5689,19 @@ } }, "node_modules/react-style-singleton": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", - "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", - "license": "MIT", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", "dependencies": { "get-nonce": "^1.0.0", - "invariant": "^2.2.4", "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -5943,13 +5942,9 @@ } }, "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.25.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", + "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==" }, "node_modules/semver": { "version": "7.6.3", @@ -6714,10 +6709,9 @@ } }, "node_modules/use-callback-ref": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", - "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", - "license": "MIT", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", "dependencies": { "tslib": "^2.0.0" }, @@ -6725,8 +6719,8 @@ "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -6735,10 +6729,9 @@ } }, "node_modules/use-sidecar": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", - "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", - "license": "MIT", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" @@ -6747,8 +6740,8 @@ "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { diff --git a/package.json b/package.json index 364999ec..b081fd9c 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next dev", + "dev": "next dev --turbopack", "build": "next build", "start": "next start", "lint": "next lint" @@ -24,13 +24,13 @@ "cytoscape": "^3.30.4", "cytoscape-fcose": "^2.2.0", "lucide-react": "^0.441.0", - "next": "15.0.3", + "next": "15.1.2", "playwright": "^1.49.1", "playwright-core": "^1.49.1", - "react": "^18", + "react": "19.0.0", "react-cytoscape": "^1.0.6", "react-cytoscapejs": "^2.0.0", - "react-dom": "^18", + "react-dom": "19.0.0", "react-resizable-panels": "^2.0.20", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", @@ -42,13 +42,17 @@ "@types/cytoscape": "^3.21.8", "@types/cytoscape-fcose": "^2.2.4", "@types/node": "^22.10.2", - "@types/react": "^18", + "@types/react": "19.0.2", "@types/react-cytoscapejs": "^1.2.5", - "@types/react-dom": "^18", + "@types/react-dom": "19.0.2", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", - "eslint-config-next": "15.1.0", + "eslint-config-next": "15.1.2", "tailwindcss": "^3.4.3", "typescript": "^5" + }, + "overrides": { + "@types/react": "19.0.2", + "@types/react-dom": "19.0.2" } } From 3aa2e12ecc4e40fcb7d6c7d9ab52e9e858e7ff5a Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Sun, 22 Dec 2024 13:39:46 +0200 Subject: [PATCH 46/60] Revert "commit" This reverts commit be92c096ae45102057877e4b8f2f5ec0ca3f3265. --- app/components/chat.tsx | 2 +- app/components/toolbar.tsx | 2 +- package-lock.json | 381 +++++++++++++++++++------------------ package.json | 18 +- 4 files changed, 203 insertions(+), 200 deletions(-) diff --git a/app/components/chat.tsx b/app/components/chat.tsx index 0aa18330..8a779f95 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -122,7 +122,7 @@ export function Chat({ repo, path, setPath, graph, chartRef, selectedPathId, isP const [sugOpen, setSugOpen] = useState(false); // A reference to the chat container to allow scrolling to the bottom - const containerRef: React.RefObject = useRef(null); + const containerRef: React.RefObject = useRef(null); const isSendMessage = messages.some(m => m.type === MessageTypes.Pending) || (messages.some(m => m.text === "Please select a starting point and the end point. Select or press relevant item on the graph") && !messages.some(m => m.type === MessageTypes.Path)) diff --git a/app/components/toolbar.tsx b/app/components/toolbar.tsx index f57e26f8..00264fb8 100644 --- a/app/components/toolbar.tsx +++ b/app/components/toolbar.tsx @@ -4,7 +4,7 @@ import { Dispatch, RefObject, SetStateAction } from "react"; import { Node } from "./model"; interface Props { - chartRef: RefObject + chartRef: RefObject setSelectedObj: Dispatch> className?: string } diff --git a/package-lock.json b/package-lock.json index 5efd9c3c..3a5e58ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,13 +23,13 @@ "cytoscape": "^3.30.4", "cytoscape-fcose": "^2.2.0", "lucide-react": "^0.441.0", - "next": "15.1.2", + "next": "15.0.3", "playwright": "^1.49.1", "playwright-core": "^1.49.1", - "react": "19.0.0", + "react": "^18", "react-cytoscape": "^1.0.6", "react-cytoscapejs": "^2.0.0", - "react-dom": "19.0.0", + "react-dom": "^18", "react-resizable-panels": "^2.0.20", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", @@ -41,12 +41,12 @@ "@types/cytoscape": "^3.21.8", "@types/cytoscape-fcose": "^2.2.4", "@types/node": "^22.10.2", - "@types/react": "19.0.2", + "@types/react": "^18", "@types/react-cytoscapejs": "^1.2.5", - "@types/react-dom": "19.0.2", + "@types/react-dom": "^18", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", - "eslint-config-next": "15.1.2", + "eslint-config-next": "15.1.0", "tailwindcss": "^3.4.3", "typescript": "^5" } @@ -183,26 +183,29 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", - "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.7.tgz", + "integrity": "sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==", + "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.8" + "@floating-ui/utils": "^0.2.7" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.12", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz", - "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==", + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.10.tgz", + "integrity": "sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==", + "license": "MIT", "dependencies": { "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.8" + "@floating-ui/utils": "^0.2.7" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", - "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz", + "integrity": "sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==", + "license": "MIT", "dependencies": { "@floating-ui/dom": "^1.0.0" }, @@ -212,9 +215,10 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", - "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==" + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.7.tgz", + "integrity": "sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==", + "license": "MIT" }, "node_modules/@humanfs/core": { "version": "0.19.1", @@ -451,15 +455,16 @@ } }, "node_modules/@next/env": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.1.2.tgz", - "integrity": "sha512-Hm3jIGsoUl6RLB1vzY+dZeqb+/kWPZ+h34yiWxW0dV87l8Im/eMOwpOA+a0L78U0HM04syEjXuRlCozqpwuojQ==" + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.0.3.tgz", + "integrity": "sha512-t9Xy32pjNOvVn2AS+Utt6VmyrshbpfUMhIjFO60gI58deSo/KgLOp31XZ4O+kY/Is8WAGYwA5gR7kOb1eORDBA==" }, "node_modules/@next/eslint-plugin-next": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.2.tgz", - "integrity": "sha512-sgfw3+WdaYOGPKCvM1L+UucBmRfh8V2Ygefp7ELON0+0vY7uohQwXXnVWg3rY7mXDKharQR3o7uedpfvnU2hlQ==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.0.tgz", + "integrity": "sha512-+jPT0h+nelBT6HC9ZCHGc7DgGVy04cv4shYdAe6tKlEbjQUtwU3LzQhzbDHQyY2m6g39m6B0kOFVuLGBrxxbGg==", "dev": true, + "license": "MIT", "dependencies": { "fast-glob": "3.3.1" } @@ -469,6 +474,7 @@ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -485,6 +491,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -493,9 +500,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.1.2.tgz", - "integrity": "sha512-b9TN7q+j5/7+rGLhFAVZiKJGIASuo8tWvInGfAd8wsULjB1uNGRCj1z1WZwwPWzVQbIKWFYqc+9L7W09qwt52w==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.0.3.tgz", + "integrity": "sha512-s3Q/NOorCsLYdCKvQlWU+a+GeAd3C8Rb3L1YnetsgwXzhc3UTWrtQpB/3eCjFOdGUj5QmXfRak12uocd1ZiiQw==", "cpu": [ "arm64" ], @@ -508,9 +515,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.1.2.tgz", - "integrity": "sha512-caR62jNDUCU+qobStO6YJ05p9E+LR0EoXh1EEmyU69cYydsAy7drMcOlUlRtQihM6K6QfvNwJuLhsHcCzNpqtA==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.0.3.tgz", + "integrity": "sha512-Zxl/TwyXVZPCFSf0u2BNj5sE0F2uR6iSKxWpq4Wlk/Sv9Ob6YCKByQTkV2y6BCic+fkabp9190hyrDdPA/dNrw==", "cpu": [ "x64" ], @@ -523,9 +530,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.1.2.tgz", - "integrity": "sha512-fHHXBusURjBmN6VBUtu6/5s7cCeEkuGAb/ZZiGHBLVBXMBy4D5QpM8P33Or8JD1nlOjm/ZT9sEE5HouQ0F+hUA==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.0.3.tgz", + "integrity": "sha512-T5+gg2EwpsY3OoaLxUIofmMb7ohAUlcNZW0fPQ6YAutaWJaxt1Z1h+8zdl4FRIOr5ABAAhXtBcpkZNwUcKI2fw==", "cpu": [ "arm64" ], @@ -538,9 +545,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.1.2.tgz", - "integrity": "sha512-9CF1Pnivij7+M3G74lxr+e9h6o2YNIe7QtExWq1KUK4hsOLTBv6FJikEwCaC3NeYTflzrm69E5UfwEAbV2U9/g==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.0.3.tgz", + "integrity": "sha512-WkAk6R60mwDjH4lG/JBpb2xHl2/0Vj0ZRu1TIzWuOYfQ9tt9NFsIinI1Epma77JVgy81F32X/AeD+B2cBu/YQA==", "cpu": [ "arm64" ], @@ -553,9 +560,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.1.2.tgz", - "integrity": "sha512-tINV7WmcTUf4oM/eN3Yuu/f8jQ5C6AkueZPKeALs/qfdfX57eNv4Ij7rt0SA6iZ8+fMobVfcFVv664Op0caCCg==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.0.3.tgz", + "integrity": "sha512-gWL/Cta1aPVqIGgDb6nxkqy06DkwJ9gAnKORdHWX1QBbSZZB+biFYPFti8aKIQL7otCE1pjyPaXpFzGeG2OS2w==", "cpu": [ "x64" ], @@ -568,9 +575,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.1.2.tgz", - "integrity": "sha512-jf2IseC4WRsGkzeUw/cK3wci9pxR53GlLAt30+y+B+2qAQxMw6WAC3QrANIKxkcoPU3JFh/10uFfmoMDF9JXKg==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.0.3.tgz", + "integrity": "sha512-QQEMwFd8r7C0GxQS62Zcdy6GKx999I/rTO2ubdXEe+MlZk9ZiinsrjwoiBL5/57tfyjikgh6GOU2WRQVUej3UA==", "cpu": [ "x64" ], @@ -583,9 +590,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.1.2.tgz", - "integrity": "sha512-wvg7MlfnaociP7k8lxLX4s2iBJm4BrNiNFhVUY+Yur5yhAJHfkS8qPPeDEUH8rQiY0PX3u/P7Q/wcg6Mv6GSAA==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.0.3.tgz", + "integrity": "sha512-9TEp47AAd/ms9fPNgtgnT7F3M1Hf7koIYYWCMQ9neOwjbVWJsHZxrFbI3iEDJ8rf1TDGpmHbKxXf2IFpAvheIQ==", "cpu": [ "arm64" ], @@ -598,9 +605,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.1.2.tgz", - "integrity": "sha512-D3cNA8NoT3aWISWmo7HF5Eyko/0OdOO+VagkoJuiTk7pyX3P/b+n8XA/MYvyR+xSVcbKn68B1rY9fgqjNISqzQ==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.0.3.tgz", + "integrity": "sha512-VNAz+HN4OGgvZs6MOoVfnn41kBzT+M+tB+OK4cww6DNyWS6wKaDpaAm/qLeOUbnMh0oVx1+mg0uoYARF69dJyA==", "cpu": [ "x64" ], @@ -688,6 +695,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz", "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==", + "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0" }, @@ -753,6 +761,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz", "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==", + "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-context": "1.1.0", @@ -853,30 +862,6 @@ } } }, - "node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", - "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", - "dependencies": { - "react-remove-scroll-bar": "^2.3.6", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-direction": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", @@ -896,6 +881,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", + "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", @@ -978,6 +964,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz", "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==", + "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-primitive": "2.0.0", @@ -1113,34 +1100,11 @@ } } }, - "node_modules/@radix-ui/react-menu/node_modules/react-remove-scroll": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", - "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", - "dependencies": { - "react-remove-scroll-bar": "^2.3.6", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-popper": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==", + "license": "MIT", "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.0", @@ -1172,6 +1136,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", + "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-use-layout-effect": "1.1.0" @@ -1195,6 +1160,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", + "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-use-layout-effect": "1.1.0" @@ -1218,6 +1184,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", + "license": "MIT", "dependencies": { "@radix-ui/react-slot": "1.1.0" }, @@ -1345,30 +1312,6 @@ } } }, - "node_modules/@radix-ui/react-select/node_modules/react-remove-scroll": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", - "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", - "dependencies": { - "react-remove-scroll-bar": "^2.3.6", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", @@ -1520,6 +1463,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", + "license": "MIT", "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.0" }, @@ -1567,6 +1511,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz", "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==", + "license": "MIT", "dependencies": { "@radix-ui/rect": "1.1.0" }, @@ -1602,6 +1547,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz", "integrity": "sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==", + "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0" }, @@ -1623,7 +1569,8 @@ "node_modules/@radix-ui/rect": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", - "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==" + "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==", + "license": "MIT" }, "node_modules/@rtsao/scc": { "version": "1.1.0", @@ -1645,11 +1592,11 @@ "license": "Apache-2.0" }, "node_modules/@swc/helpers": { - "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", - "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz", + "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==", "dependencies": { - "tslib": "^2.8.0" + "tslib": "^2.4.0" } }, "node_modules/@types/cytoscape": { @@ -1705,12 +1652,21 @@ "undici-types": "~6.20.0" } }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "devOptional": true, + "license": "MIT" + }, "node_modules/@types/react": { - "version": "19.0.2", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.2.tgz", - "integrity": "sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg==", + "version": "18.3.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", + "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", "devOptional": true, + "license": "MIT", "dependencies": { + "@types/prop-types": "*", "csstype": "^3.0.2" } }, @@ -1725,12 +1681,12 @@ } }, "node_modules/@types/react-dom": { - "version": "19.0.2", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.2.tgz", - "integrity": "sha512-c1s+7TKFaDRRxr1TxccIX2u7sfCnc3RxkVyBIUA2lCpyqCF+QoAwQ/CBg7bsMdVwP120HEH143VQezKtef5nCg==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", "devOptional": true, - "peerDependencies": { - "@types/react": "^19.0.0" + "dependencies": { + "@types/react": "*" } }, "node_modules/@types/react-syntax-highlighter": { @@ -2898,7 +2854,8 @@ "node_modules/detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" }, "node_modules/didyoumean": { "version": "1.2.2", @@ -3220,12 +3177,13 @@ } }, "node_modules/eslint-config-next": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.1.2.tgz", - "integrity": "sha512-PrMm1/4zWSJ689wd/ypWIR5ZF1uvmp3EkgpgBV1Yu6PhEobBjXMGgT8bVNelwl17LXojO8D5ePFRiI4qXjsPRA==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.1.0.tgz", + "integrity": "sha512-gADO+nKVseGso3DtOrYX9H7TxB/MuX7AUYhMlvQMqLYvUWu4HrOQuU7cC1HW74tHIqkAvXdwgAz3TCbczzSEXw==", "dev": true, + "license": "MIT", "dependencies": { - "@next/eslint-plugin-next": "15.1.2", + "@next/eslint-plugin-next": "15.1.0", "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", @@ -3850,6 +3808,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", "engines": { "node": ">=6" } @@ -4185,6 +4144,15 @@ "node": ">= 0.4" } }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", @@ -4969,13 +4937,13 @@ "license": "MIT" }, "node_modules/next": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/next/-/next-15.1.2.tgz", - "integrity": "sha512-nLJDV7peNy+0oHlmY2JZjzMfJ8Aj0/dd3jCwSZS8ZiO5nkQfcZRqDrRN3U5rJtqVTQneIOGZzb6LCNrk7trMCQ==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/next/-/next-15.0.3.tgz", + "integrity": "sha512-ontCbCRKJUIoivAdGB34yCaOcPgYXr9AAkV/IwqFfWWTXEPUgLYkSkqBhIk9KK7gGmgjc64B+RdoeIDM13Irnw==", "dependencies": { - "@next/env": "15.1.2", + "@next/env": "15.0.3", "@swc/counter": "0.1.3", - "@swc/helpers": "0.5.15", + "@swc/helpers": "0.5.13", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", @@ -4988,22 +4956,22 @@ "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "15.1.2", - "@next/swc-darwin-x64": "15.1.2", - "@next/swc-linux-arm64-gnu": "15.1.2", - "@next/swc-linux-arm64-musl": "15.1.2", - "@next/swc-linux-x64-gnu": "15.1.2", - "@next/swc-linux-x64-musl": "15.1.2", - "@next/swc-win32-arm64-msvc": "15.1.2", - "@next/swc-win32-x64-msvc": "15.1.2", + "@next/swc-darwin-arm64": "15.0.3", + "@next/swc-darwin-x64": "15.0.3", + "@next/swc-linux-arm64-gnu": "15.0.3", + "@next/swc-linux-arm64-musl": "15.0.3", + "@next/swc-linux-x64-gnu": "15.0.3", + "@next/swc-linux-x64-musl": "15.0.3", + "@next/swc-win32-arm64-msvc": "15.0.3", + "@next/swc-win32-x64-msvc": "15.0.3", "sharp": "^0.33.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.41.2", "babel-plugin-react-compiler": "*", - "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", - "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react": "^18.2.0 || 19.0.0-rc-66855b96-20241106", + "react-dom": "^18.2.0 || 19.0.0-rc-66855b96-20241106", "sass": "^1.3.0" }, "peerDependenciesMeta": { @@ -5608,9 +5576,13 @@ "license": "MIT" }, "node_modules/react": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", - "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", + "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==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, "engines": { "node": ">=0.10.0" } @@ -5641,14 +5613,16 @@ } }, "node_modules/react-dom": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz", - "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", "dependencies": { - "scheduler": "^0.25.0" + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" }, "peerDependencies": { - "react": "^19.0.0" + "react": "^18.3.1" } }, "node_modules/react-is": { @@ -5657,20 +5631,45 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "license": "MIT" }, + "node_modules/react-remove-scroll": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/react-remove-scroll-bar": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", - "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", + "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", + "license": "MIT", "dependencies": { - "react-style-singleton": "^2.2.2", + "react-style-singleton": "^2.2.1", "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -5689,19 +5688,21 @@ } }, "node_modules/react-style-singleton": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", - "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "license": "MIT", "dependencies": { "get-nonce": "^1.0.0", + "invariant": "^2.2.4", "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -5942,9 +5943,13 @@ } }, "node_modules/scheduler": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", - "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==" + "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" + } }, "node_modules/semver": { "version": "7.6.3", @@ -6709,9 +6714,10 @@ } }, "node_modules/use-callback-ref": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", - "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", + "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", + "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, @@ -6719,8 +6725,8 @@ "node": ">=10" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -6729,9 +6735,10 @@ } }, "node_modules/use-sidecar": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", - "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "license": "MIT", "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" @@ -6740,8 +6747,8 @@ "node": ">=10" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { diff --git a/package.json b/package.json index b081fd9c..364999ec 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next dev --turbopack", + "dev": "next dev", "build": "next build", "start": "next start", "lint": "next lint" @@ -24,13 +24,13 @@ "cytoscape": "^3.30.4", "cytoscape-fcose": "^2.2.0", "lucide-react": "^0.441.0", - "next": "15.1.2", + "next": "15.0.3", "playwright": "^1.49.1", "playwright-core": "^1.49.1", - "react": "19.0.0", + "react": "^18", "react-cytoscape": "^1.0.6", "react-cytoscapejs": "^2.0.0", - "react-dom": "19.0.0", + "react-dom": "^18", "react-resizable-panels": "^2.0.20", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", @@ -42,17 +42,13 @@ "@types/cytoscape": "^3.21.8", "@types/cytoscape-fcose": "^2.2.4", "@types/node": "^22.10.2", - "@types/react": "19.0.2", + "@types/react": "^18", "@types/react-cytoscapejs": "^1.2.5", - "@types/react-dom": "19.0.2", + "@types/react-dom": "^18", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", - "eslint-config-next": "15.1.2", + "eslint-config-next": "15.1.0", "tailwindcss": "^3.4.3", "typescript": "^5" - }, - "overrides": { - "@types/react": "19.0.2", - "@types/react-dom": "19.0.2" } } From 87b5d21f27c5c20791d7ee07ea0d5cddcf480e4d Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Sun, 22 Dec 2024 13:39:46 +0200 Subject: [PATCH 47/60] commit --- app/components/chat.tsx | 2 +- app/components/toolbar.tsx | 2 +- package-lock.json | 381 ++++++++++++++++++------------------- package.json | 18 +- 4 files changed, 200 insertions(+), 203 deletions(-) diff --git a/app/components/chat.tsx b/app/components/chat.tsx index 8a779f95..0aa18330 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -122,7 +122,7 @@ export function Chat({ repo, path, setPath, graph, chartRef, selectedPathId, isP const [sugOpen, setSugOpen] = useState(false); // A reference to the chat container to allow scrolling to the bottom - const containerRef: React.RefObject = useRef(null); + const containerRef: React.RefObject = useRef(null); const isSendMessage = messages.some(m => m.type === MessageTypes.Pending) || (messages.some(m => m.text === "Please select a starting point and the end point. Select or press relevant item on the graph") && !messages.some(m => m.type === MessageTypes.Path)) diff --git a/app/components/toolbar.tsx b/app/components/toolbar.tsx index 00264fb8..f57e26f8 100644 --- a/app/components/toolbar.tsx +++ b/app/components/toolbar.tsx @@ -4,7 +4,7 @@ import { Dispatch, RefObject, SetStateAction } from "react"; import { Node } from "./model"; interface Props { - chartRef: RefObject + chartRef: RefObject setSelectedObj: Dispatch> className?: string } diff --git a/package-lock.json b/package-lock.json index 3a5e58ce..5efd9c3c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,13 +23,13 @@ "cytoscape": "^3.30.4", "cytoscape-fcose": "^2.2.0", "lucide-react": "^0.441.0", - "next": "15.0.3", + "next": "15.1.2", "playwright": "^1.49.1", "playwright-core": "^1.49.1", - "react": "^18", + "react": "19.0.0", "react-cytoscape": "^1.0.6", "react-cytoscapejs": "^2.0.0", - "react-dom": "^18", + "react-dom": "19.0.0", "react-resizable-panels": "^2.0.20", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", @@ -41,12 +41,12 @@ "@types/cytoscape": "^3.21.8", "@types/cytoscape-fcose": "^2.2.4", "@types/node": "^22.10.2", - "@types/react": "^18", + "@types/react": "19.0.2", "@types/react-cytoscapejs": "^1.2.5", - "@types/react-dom": "^18", + "@types/react-dom": "19.0.2", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", - "eslint-config-next": "15.1.0", + "eslint-config-next": "15.1.2", "tailwindcss": "^3.4.3", "typescript": "^5" } @@ -183,29 +183,26 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.7.tgz", - "integrity": "sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==", - "license": "MIT", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", + "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", "dependencies": { - "@floating-ui/utils": "^0.2.7" + "@floating-ui/utils": "^0.2.8" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.10", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.10.tgz", - "integrity": "sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==", - "license": "MIT", + "version": "1.6.12", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz", + "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==", "dependencies": { "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.7" + "@floating-ui/utils": "^0.2.8" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz", - "integrity": "sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==", - "license": "MIT", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", + "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", "dependencies": { "@floating-ui/dom": "^1.0.0" }, @@ -215,10 +212,9 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.7.tgz", - "integrity": "sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==", - "license": "MIT" + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", + "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==" }, "node_modules/@humanfs/core": { "version": "0.19.1", @@ -455,16 +451,15 @@ } }, "node_modules/@next/env": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.0.3.tgz", - "integrity": "sha512-t9Xy32pjNOvVn2AS+Utt6VmyrshbpfUMhIjFO60gI58deSo/KgLOp31XZ4O+kY/Is8WAGYwA5gR7kOb1eORDBA==" + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.1.2.tgz", + "integrity": "sha512-Hm3jIGsoUl6RLB1vzY+dZeqb+/kWPZ+h34yiWxW0dV87l8Im/eMOwpOA+a0L78U0HM04syEjXuRlCozqpwuojQ==" }, "node_modules/@next/eslint-plugin-next": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.0.tgz", - "integrity": "sha512-+jPT0h+nelBT6HC9ZCHGc7DgGVy04cv4shYdAe6tKlEbjQUtwU3LzQhzbDHQyY2m6g39m6B0kOFVuLGBrxxbGg==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.2.tgz", + "integrity": "sha512-sgfw3+WdaYOGPKCvM1L+UucBmRfh8V2Ygefp7ELON0+0vY7uohQwXXnVWg3rY7mXDKharQR3o7uedpfvnU2hlQ==", "dev": true, - "license": "MIT", "dependencies": { "fast-glob": "3.3.1" } @@ -474,7 +469,6 @@ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -491,7 +485,6 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -500,9 +493,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.0.3.tgz", - "integrity": "sha512-s3Q/NOorCsLYdCKvQlWU+a+GeAd3C8Rb3L1YnetsgwXzhc3UTWrtQpB/3eCjFOdGUj5QmXfRak12uocd1ZiiQw==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.1.2.tgz", + "integrity": "sha512-b9TN7q+j5/7+rGLhFAVZiKJGIASuo8tWvInGfAd8wsULjB1uNGRCj1z1WZwwPWzVQbIKWFYqc+9L7W09qwt52w==", "cpu": [ "arm64" ], @@ -515,9 +508,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.0.3.tgz", - "integrity": "sha512-Zxl/TwyXVZPCFSf0u2BNj5sE0F2uR6iSKxWpq4Wlk/Sv9Ob6YCKByQTkV2y6BCic+fkabp9190hyrDdPA/dNrw==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.1.2.tgz", + "integrity": "sha512-caR62jNDUCU+qobStO6YJ05p9E+LR0EoXh1EEmyU69cYydsAy7drMcOlUlRtQihM6K6QfvNwJuLhsHcCzNpqtA==", "cpu": [ "x64" ], @@ -530,9 +523,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.0.3.tgz", - "integrity": "sha512-T5+gg2EwpsY3OoaLxUIofmMb7ohAUlcNZW0fPQ6YAutaWJaxt1Z1h+8zdl4FRIOr5ABAAhXtBcpkZNwUcKI2fw==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.1.2.tgz", + "integrity": "sha512-fHHXBusURjBmN6VBUtu6/5s7cCeEkuGAb/ZZiGHBLVBXMBy4D5QpM8P33Or8JD1nlOjm/ZT9sEE5HouQ0F+hUA==", "cpu": [ "arm64" ], @@ -545,9 +538,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.0.3.tgz", - "integrity": "sha512-WkAk6R60mwDjH4lG/JBpb2xHl2/0Vj0ZRu1TIzWuOYfQ9tt9NFsIinI1Epma77JVgy81F32X/AeD+B2cBu/YQA==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.1.2.tgz", + "integrity": "sha512-9CF1Pnivij7+M3G74lxr+e9h6o2YNIe7QtExWq1KUK4hsOLTBv6FJikEwCaC3NeYTflzrm69E5UfwEAbV2U9/g==", "cpu": [ "arm64" ], @@ -560,9 +553,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.0.3.tgz", - "integrity": "sha512-gWL/Cta1aPVqIGgDb6nxkqy06DkwJ9gAnKORdHWX1QBbSZZB+biFYPFti8aKIQL7otCE1pjyPaXpFzGeG2OS2w==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.1.2.tgz", + "integrity": "sha512-tINV7WmcTUf4oM/eN3Yuu/f8jQ5C6AkueZPKeALs/qfdfX57eNv4Ij7rt0SA6iZ8+fMobVfcFVv664Op0caCCg==", "cpu": [ "x64" ], @@ -575,9 +568,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.0.3.tgz", - "integrity": "sha512-QQEMwFd8r7C0GxQS62Zcdy6GKx999I/rTO2ubdXEe+MlZk9ZiinsrjwoiBL5/57tfyjikgh6GOU2WRQVUej3UA==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.1.2.tgz", + "integrity": "sha512-jf2IseC4WRsGkzeUw/cK3wci9pxR53GlLAt30+y+B+2qAQxMw6WAC3QrANIKxkcoPU3JFh/10uFfmoMDF9JXKg==", "cpu": [ "x64" ], @@ -590,9 +583,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.0.3.tgz", - "integrity": "sha512-9TEp47AAd/ms9fPNgtgnT7F3M1Hf7koIYYWCMQ9neOwjbVWJsHZxrFbI3iEDJ8rf1TDGpmHbKxXf2IFpAvheIQ==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.1.2.tgz", + "integrity": "sha512-wvg7MlfnaociP7k8lxLX4s2iBJm4BrNiNFhVUY+Yur5yhAJHfkS8qPPeDEUH8rQiY0PX3u/P7Q/wcg6Mv6GSAA==", "cpu": [ "arm64" ], @@ -605,9 +598,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.0.3.tgz", - "integrity": "sha512-VNAz+HN4OGgvZs6MOoVfnn41kBzT+M+tB+OK4cww6DNyWS6wKaDpaAm/qLeOUbnMh0oVx1+mg0uoYARF69dJyA==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.1.2.tgz", + "integrity": "sha512-D3cNA8NoT3aWISWmo7HF5Eyko/0OdOO+VagkoJuiTk7pyX3P/b+n8XA/MYvyR+xSVcbKn68B1rY9fgqjNISqzQ==", "cpu": [ "x64" ], @@ -695,7 +688,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz", "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==", - "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0" }, @@ -761,7 +753,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz", "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==", - "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-context": "1.1.0", @@ -862,6 +853,30 @@ } } }, + "node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-direction": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", @@ -881,7 +896,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", - "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", @@ -964,7 +978,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz", "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==", - "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-primitive": "2.0.0", @@ -1100,11 +1113,34 @@ } } }, + "node_modules/@radix-ui/react-menu/node_modules/react-remove-scroll": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-popper": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==", - "license": "MIT", "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.0", @@ -1136,7 +1172,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", - "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-use-layout-effect": "1.1.0" @@ -1160,7 +1195,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", - "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-use-layout-effect": "1.1.0" @@ -1184,7 +1218,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", - "license": "MIT", "dependencies": { "@radix-ui/react-slot": "1.1.0" }, @@ -1312,6 +1345,30 @@ } } }, + "node_modules/@radix-ui/react-select/node_modules/react-remove-scroll": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", @@ -1463,7 +1520,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", - "license": "MIT", "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.0" }, @@ -1511,7 +1567,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz", "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==", - "license": "MIT", "dependencies": { "@radix-ui/rect": "1.1.0" }, @@ -1547,7 +1602,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz", "integrity": "sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==", - "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0" }, @@ -1569,8 +1623,7 @@ "node_modules/@radix-ui/rect": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", - "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==", - "license": "MIT" + "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==" }, "node_modules/@rtsao/scc": { "version": "1.1.0", @@ -1592,11 +1645,11 @@ "license": "Apache-2.0" }, "node_modules/@swc/helpers": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz", - "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==", + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", "dependencies": { - "tslib": "^2.4.0" + "tslib": "^2.8.0" } }, "node_modules/@types/cytoscape": { @@ -1652,21 +1705,12 @@ "undici-types": "~6.20.0" } }, - "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "devOptional": true, - "license": "MIT" - }, "node_modules/@types/react": { - "version": "18.3.12", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", - "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.2.tgz", + "integrity": "sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg==", "devOptional": true, - "license": "MIT", "dependencies": { - "@types/prop-types": "*", "csstype": "^3.0.2" } }, @@ -1681,12 +1725,12 @@ } }, "node_modules/@types/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.2.tgz", + "integrity": "sha512-c1s+7TKFaDRRxr1TxccIX2u7sfCnc3RxkVyBIUA2lCpyqCF+QoAwQ/CBg7bsMdVwP120HEH143VQezKtef5nCg==", "devOptional": true, - "dependencies": { - "@types/react": "*" + "peerDependencies": { + "@types/react": "^19.0.0" } }, "node_modules/@types/react-syntax-highlighter": { @@ -2854,8 +2898,7 @@ "node_modules/detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", - "license": "MIT" + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" }, "node_modules/didyoumean": { "version": "1.2.2", @@ -3177,13 +3220,12 @@ } }, "node_modules/eslint-config-next": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.1.0.tgz", - "integrity": "sha512-gADO+nKVseGso3DtOrYX9H7TxB/MuX7AUYhMlvQMqLYvUWu4HrOQuU7cC1HW74tHIqkAvXdwgAz3TCbczzSEXw==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.1.2.tgz", + "integrity": "sha512-PrMm1/4zWSJ689wd/ypWIR5ZF1uvmp3EkgpgBV1Yu6PhEobBjXMGgT8bVNelwl17LXojO8D5ePFRiI4qXjsPRA==", "dev": true, - "license": "MIT", "dependencies": { - "@next/eslint-plugin-next": "15.1.0", + "@next/eslint-plugin-next": "15.1.2", "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", @@ -3808,7 +3850,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", - "license": "MIT", "engines": { "node": ">=6" } @@ -4144,15 +4185,6 @@ "node": ">= 0.4" } }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, "node_modules/is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", @@ -4937,13 +4969,13 @@ "license": "MIT" }, "node_modules/next": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/next/-/next-15.0.3.tgz", - "integrity": "sha512-ontCbCRKJUIoivAdGB34yCaOcPgYXr9AAkV/IwqFfWWTXEPUgLYkSkqBhIk9KK7gGmgjc64B+RdoeIDM13Irnw==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/next/-/next-15.1.2.tgz", + "integrity": "sha512-nLJDV7peNy+0oHlmY2JZjzMfJ8Aj0/dd3jCwSZS8ZiO5nkQfcZRqDrRN3U5rJtqVTQneIOGZzb6LCNrk7trMCQ==", "dependencies": { - "@next/env": "15.0.3", + "@next/env": "15.1.2", "@swc/counter": "0.1.3", - "@swc/helpers": "0.5.13", + "@swc/helpers": "0.5.15", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", @@ -4956,22 +4988,22 @@ "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "15.0.3", - "@next/swc-darwin-x64": "15.0.3", - "@next/swc-linux-arm64-gnu": "15.0.3", - "@next/swc-linux-arm64-musl": "15.0.3", - "@next/swc-linux-x64-gnu": "15.0.3", - "@next/swc-linux-x64-musl": "15.0.3", - "@next/swc-win32-arm64-msvc": "15.0.3", - "@next/swc-win32-x64-msvc": "15.0.3", + "@next/swc-darwin-arm64": "15.1.2", + "@next/swc-darwin-x64": "15.1.2", + "@next/swc-linux-arm64-gnu": "15.1.2", + "@next/swc-linux-arm64-musl": "15.1.2", + "@next/swc-linux-x64-gnu": "15.1.2", + "@next/swc-linux-x64-musl": "15.1.2", + "@next/swc-win32-arm64-msvc": "15.1.2", + "@next/swc-win32-x64-msvc": "15.1.2", "sharp": "^0.33.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.41.2", "babel-plugin-react-compiler": "*", - "react": "^18.2.0 || 19.0.0-rc-66855b96-20241106", - "react-dom": "^18.2.0 || 19.0.0-rc-66855b96-20241106", + "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "peerDependenciesMeta": { @@ -5576,13 +5608,9 @@ "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==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", + "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", "engines": { "node": ">=0.10.0" } @@ -5613,16 +5641,14 @@ } }, "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==", - "license": "MIT", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz", + "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==", "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" + "scheduler": "^0.25.0" }, "peerDependencies": { - "react": "^18.3.1" + "react": "^19.0.0" } }, "node_modules/react-is": { @@ -5631,45 +5657,20 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "license": "MIT" }, - "node_modules/react-remove-scroll": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", - "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", - "dependencies": { - "react-remove-scroll-bar": "^2.3.6", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/react-remove-scroll-bar": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", - "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", - "license": "MIT", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", "dependencies": { - "react-style-singleton": "^2.2.1", + "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -5688,21 +5689,19 @@ } }, "node_modules/react-style-singleton": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", - "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", - "license": "MIT", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", "dependencies": { "get-nonce": "^1.0.0", - "invariant": "^2.2.4", "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -5943,13 +5942,9 @@ } }, "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.25.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", + "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==" }, "node_modules/semver": { "version": "7.6.3", @@ -6714,10 +6709,9 @@ } }, "node_modules/use-callback-ref": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", - "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", - "license": "MIT", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", "dependencies": { "tslib": "^2.0.0" }, @@ -6725,8 +6719,8 @@ "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -6735,10 +6729,9 @@ } }, "node_modules/use-sidecar": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", - "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", - "license": "MIT", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" @@ -6747,8 +6740,8 @@ "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { diff --git a/package.json b/package.json index 364999ec..b081fd9c 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next dev", + "dev": "next dev --turbopack", "build": "next build", "start": "next start", "lint": "next lint" @@ -24,13 +24,13 @@ "cytoscape": "^3.30.4", "cytoscape-fcose": "^2.2.0", "lucide-react": "^0.441.0", - "next": "15.0.3", + "next": "15.1.2", "playwright": "^1.49.1", "playwright-core": "^1.49.1", - "react": "^18", + "react": "19.0.0", "react-cytoscape": "^1.0.6", "react-cytoscapejs": "^2.0.0", - "react-dom": "^18", + "react-dom": "19.0.0", "react-resizable-panels": "^2.0.20", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", @@ -42,13 +42,17 @@ "@types/cytoscape": "^3.21.8", "@types/cytoscape-fcose": "^2.2.4", "@types/node": "^22.10.2", - "@types/react": "^18", + "@types/react": "19.0.2", "@types/react-cytoscapejs": "^1.2.5", - "@types/react-dom": "^18", + "@types/react-dom": "19.0.2", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", - "eslint-config-next": "15.1.0", + "eslint-config-next": "15.1.2", "tailwindcss": "^3.4.3", "typescript": "^5" + }, + "overrides": { + "@types/react": "19.0.2", + "@types/react-dom": "19.0.2" } } From 020f4bb2a2e193a78f446d27796cab7236a6a9b5 Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Sun, 22 Dec 2024 13:48:34 +0200 Subject: [PATCH 48/60] commit --- app/components/chat.tsx | 2 +- app/components/toolbar.tsx | 2 +- package-lock.json | 381 +++++++++++++++++++------------------ package.json | 18 +- 4 files changed, 203 insertions(+), 200 deletions(-) diff --git a/app/components/chat.tsx b/app/components/chat.tsx index 0aa18330..8a779f95 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -122,7 +122,7 @@ export function Chat({ repo, path, setPath, graph, chartRef, selectedPathId, isP const [sugOpen, setSugOpen] = useState(false); // A reference to the chat container to allow scrolling to the bottom - const containerRef: React.RefObject = useRef(null); + const containerRef: React.RefObject = useRef(null); const isSendMessage = messages.some(m => m.type === MessageTypes.Pending) || (messages.some(m => m.text === "Please select a starting point and the end point. Select or press relevant item on the graph") && !messages.some(m => m.type === MessageTypes.Path)) diff --git a/app/components/toolbar.tsx b/app/components/toolbar.tsx index f57e26f8..00264fb8 100644 --- a/app/components/toolbar.tsx +++ b/app/components/toolbar.tsx @@ -4,7 +4,7 @@ import { Dispatch, RefObject, SetStateAction } from "react"; import { Node } from "./model"; interface Props { - chartRef: RefObject + chartRef: RefObject setSelectedObj: Dispatch> className?: string } diff --git a/package-lock.json b/package-lock.json index 5efd9c3c..3a5e58ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,13 +23,13 @@ "cytoscape": "^3.30.4", "cytoscape-fcose": "^2.2.0", "lucide-react": "^0.441.0", - "next": "15.1.2", + "next": "15.0.3", "playwright": "^1.49.1", "playwright-core": "^1.49.1", - "react": "19.0.0", + "react": "^18", "react-cytoscape": "^1.0.6", "react-cytoscapejs": "^2.0.0", - "react-dom": "19.0.0", + "react-dom": "^18", "react-resizable-panels": "^2.0.20", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", @@ -41,12 +41,12 @@ "@types/cytoscape": "^3.21.8", "@types/cytoscape-fcose": "^2.2.4", "@types/node": "^22.10.2", - "@types/react": "19.0.2", + "@types/react": "^18", "@types/react-cytoscapejs": "^1.2.5", - "@types/react-dom": "19.0.2", + "@types/react-dom": "^18", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", - "eslint-config-next": "15.1.2", + "eslint-config-next": "15.1.0", "tailwindcss": "^3.4.3", "typescript": "^5" } @@ -183,26 +183,29 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", - "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.7.tgz", + "integrity": "sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==", + "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.8" + "@floating-ui/utils": "^0.2.7" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.12", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz", - "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==", + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.10.tgz", + "integrity": "sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==", + "license": "MIT", "dependencies": { "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.8" + "@floating-ui/utils": "^0.2.7" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", - "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz", + "integrity": "sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==", + "license": "MIT", "dependencies": { "@floating-ui/dom": "^1.0.0" }, @@ -212,9 +215,10 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", - "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==" + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.7.tgz", + "integrity": "sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==", + "license": "MIT" }, "node_modules/@humanfs/core": { "version": "0.19.1", @@ -451,15 +455,16 @@ } }, "node_modules/@next/env": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.1.2.tgz", - "integrity": "sha512-Hm3jIGsoUl6RLB1vzY+dZeqb+/kWPZ+h34yiWxW0dV87l8Im/eMOwpOA+a0L78U0HM04syEjXuRlCozqpwuojQ==" + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.0.3.tgz", + "integrity": "sha512-t9Xy32pjNOvVn2AS+Utt6VmyrshbpfUMhIjFO60gI58deSo/KgLOp31XZ4O+kY/Is8WAGYwA5gR7kOb1eORDBA==" }, "node_modules/@next/eslint-plugin-next": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.2.tgz", - "integrity": "sha512-sgfw3+WdaYOGPKCvM1L+UucBmRfh8V2Ygefp7ELON0+0vY7uohQwXXnVWg3rY7mXDKharQR3o7uedpfvnU2hlQ==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.0.tgz", + "integrity": "sha512-+jPT0h+nelBT6HC9ZCHGc7DgGVy04cv4shYdAe6tKlEbjQUtwU3LzQhzbDHQyY2m6g39m6B0kOFVuLGBrxxbGg==", "dev": true, + "license": "MIT", "dependencies": { "fast-glob": "3.3.1" } @@ -469,6 +474,7 @@ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -485,6 +491,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -493,9 +500,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.1.2.tgz", - "integrity": "sha512-b9TN7q+j5/7+rGLhFAVZiKJGIASuo8tWvInGfAd8wsULjB1uNGRCj1z1WZwwPWzVQbIKWFYqc+9L7W09qwt52w==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.0.3.tgz", + "integrity": "sha512-s3Q/NOorCsLYdCKvQlWU+a+GeAd3C8Rb3L1YnetsgwXzhc3UTWrtQpB/3eCjFOdGUj5QmXfRak12uocd1ZiiQw==", "cpu": [ "arm64" ], @@ -508,9 +515,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.1.2.tgz", - "integrity": "sha512-caR62jNDUCU+qobStO6YJ05p9E+LR0EoXh1EEmyU69cYydsAy7drMcOlUlRtQihM6K6QfvNwJuLhsHcCzNpqtA==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.0.3.tgz", + "integrity": "sha512-Zxl/TwyXVZPCFSf0u2BNj5sE0F2uR6iSKxWpq4Wlk/Sv9Ob6YCKByQTkV2y6BCic+fkabp9190hyrDdPA/dNrw==", "cpu": [ "x64" ], @@ -523,9 +530,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.1.2.tgz", - "integrity": "sha512-fHHXBusURjBmN6VBUtu6/5s7cCeEkuGAb/ZZiGHBLVBXMBy4D5QpM8P33Or8JD1nlOjm/ZT9sEE5HouQ0F+hUA==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.0.3.tgz", + "integrity": "sha512-T5+gg2EwpsY3OoaLxUIofmMb7ohAUlcNZW0fPQ6YAutaWJaxt1Z1h+8zdl4FRIOr5ABAAhXtBcpkZNwUcKI2fw==", "cpu": [ "arm64" ], @@ -538,9 +545,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.1.2.tgz", - "integrity": "sha512-9CF1Pnivij7+M3G74lxr+e9h6o2YNIe7QtExWq1KUK4hsOLTBv6FJikEwCaC3NeYTflzrm69E5UfwEAbV2U9/g==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.0.3.tgz", + "integrity": "sha512-WkAk6R60mwDjH4lG/JBpb2xHl2/0Vj0ZRu1TIzWuOYfQ9tt9NFsIinI1Epma77JVgy81F32X/AeD+B2cBu/YQA==", "cpu": [ "arm64" ], @@ -553,9 +560,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.1.2.tgz", - "integrity": "sha512-tINV7WmcTUf4oM/eN3Yuu/f8jQ5C6AkueZPKeALs/qfdfX57eNv4Ij7rt0SA6iZ8+fMobVfcFVv664Op0caCCg==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.0.3.tgz", + "integrity": "sha512-gWL/Cta1aPVqIGgDb6nxkqy06DkwJ9gAnKORdHWX1QBbSZZB+biFYPFti8aKIQL7otCE1pjyPaXpFzGeG2OS2w==", "cpu": [ "x64" ], @@ -568,9 +575,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.1.2.tgz", - "integrity": "sha512-jf2IseC4WRsGkzeUw/cK3wci9pxR53GlLAt30+y+B+2qAQxMw6WAC3QrANIKxkcoPU3JFh/10uFfmoMDF9JXKg==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.0.3.tgz", + "integrity": "sha512-QQEMwFd8r7C0GxQS62Zcdy6GKx999I/rTO2ubdXEe+MlZk9ZiinsrjwoiBL5/57tfyjikgh6GOU2WRQVUej3UA==", "cpu": [ "x64" ], @@ -583,9 +590,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.1.2.tgz", - "integrity": "sha512-wvg7MlfnaociP7k8lxLX4s2iBJm4BrNiNFhVUY+Yur5yhAJHfkS8qPPeDEUH8rQiY0PX3u/P7Q/wcg6Mv6GSAA==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.0.3.tgz", + "integrity": "sha512-9TEp47AAd/ms9fPNgtgnT7F3M1Hf7koIYYWCMQ9neOwjbVWJsHZxrFbI3iEDJ8rf1TDGpmHbKxXf2IFpAvheIQ==", "cpu": [ "arm64" ], @@ -598,9 +605,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.1.2.tgz", - "integrity": "sha512-D3cNA8NoT3aWISWmo7HF5Eyko/0OdOO+VagkoJuiTk7pyX3P/b+n8XA/MYvyR+xSVcbKn68B1rY9fgqjNISqzQ==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.0.3.tgz", + "integrity": "sha512-VNAz+HN4OGgvZs6MOoVfnn41kBzT+M+tB+OK4cww6DNyWS6wKaDpaAm/qLeOUbnMh0oVx1+mg0uoYARF69dJyA==", "cpu": [ "x64" ], @@ -688,6 +695,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz", "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==", + "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0" }, @@ -753,6 +761,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz", "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==", + "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-context": "1.1.0", @@ -853,30 +862,6 @@ } } }, - "node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", - "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", - "dependencies": { - "react-remove-scroll-bar": "^2.3.6", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-direction": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", @@ -896,6 +881,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", + "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", @@ -978,6 +964,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz", "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==", + "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-primitive": "2.0.0", @@ -1113,34 +1100,11 @@ } } }, - "node_modules/@radix-ui/react-menu/node_modules/react-remove-scroll": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", - "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", - "dependencies": { - "react-remove-scroll-bar": "^2.3.6", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-popper": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==", + "license": "MIT", "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.0", @@ -1172,6 +1136,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", + "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-use-layout-effect": "1.1.0" @@ -1195,6 +1160,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", + "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-use-layout-effect": "1.1.0" @@ -1218,6 +1184,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", + "license": "MIT", "dependencies": { "@radix-ui/react-slot": "1.1.0" }, @@ -1345,30 +1312,6 @@ } } }, - "node_modules/@radix-ui/react-select/node_modules/react-remove-scroll": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", - "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", - "dependencies": { - "react-remove-scroll-bar": "^2.3.6", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", @@ -1520,6 +1463,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", + "license": "MIT", "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.0" }, @@ -1567,6 +1511,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz", "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==", + "license": "MIT", "dependencies": { "@radix-ui/rect": "1.1.0" }, @@ -1602,6 +1547,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz", "integrity": "sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==", + "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0" }, @@ -1623,7 +1569,8 @@ "node_modules/@radix-ui/rect": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", - "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==" + "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==", + "license": "MIT" }, "node_modules/@rtsao/scc": { "version": "1.1.0", @@ -1645,11 +1592,11 @@ "license": "Apache-2.0" }, "node_modules/@swc/helpers": { - "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", - "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz", + "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==", "dependencies": { - "tslib": "^2.8.0" + "tslib": "^2.4.0" } }, "node_modules/@types/cytoscape": { @@ -1705,12 +1652,21 @@ "undici-types": "~6.20.0" } }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "devOptional": true, + "license": "MIT" + }, "node_modules/@types/react": { - "version": "19.0.2", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.2.tgz", - "integrity": "sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg==", + "version": "18.3.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", + "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", "devOptional": true, + "license": "MIT", "dependencies": { + "@types/prop-types": "*", "csstype": "^3.0.2" } }, @@ -1725,12 +1681,12 @@ } }, "node_modules/@types/react-dom": { - "version": "19.0.2", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.2.tgz", - "integrity": "sha512-c1s+7TKFaDRRxr1TxccIX2u7sfCnc3RxkVyBIUA2lCpyqCF+QoAwQ/CBg7bsMdVwP120HEH143VQezKtef5nCg==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", "devOptional": true, - "peerDependencies": { - "@types/react": "^19.0.0" + "dependencies": { + "@types/react": "*" } }, "node_modules/@types/react-syntax-highlighter": { @@ -2898,7 +2854,8 @@ "node_modules/detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" }, "node_modules/didyoumean": { "version": "1.2.2", @@ -3220,12 +3177,13 @@ } }, "node_modules/eslint-config-next": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.1.2.tgz", - "integrity": "sha512-PrMm1/4zWSJ689wd/ypWIR5ZF1uvmp3EkgpgBV1Yu6PhEobBjXMGgT8bVNelwl17LXojO8D5ePFRiI4qXjsPRA==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.1.0.tgz", + "integrity": "sha512-gADO+nKVseGso3DtOrYX9H7TxB/MuX7AUYhMlvQMqLYvUWu4HrOQuU7cC1HW74tHIqkAvXdwgAz3TCbczzSEXw==", "dev": true, + "license": "MIT", "dependencies": { - "@next/eslint-plugin-next": "15.1.2", + "@next/eslint-plugin-next": "15.1.0", "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", @@ -3850,6 +3808,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", "engines": { "node": ">=6" } @@ -4185,6 +4144,15 @@ "node": ">= 0.4" } }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", @@ -4969,13 +4937,13 @@ "license": "MIT" }, "node_modules/next": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/next/-/next-15.1.2.tgz", - "integrity": "sha512-nLJDV7peNy+0oHlmY2JZjzMfJ8Aj0/dd3jCwSZS8ZiO5nkQfcZRqDrRN3U5rJtqVTQneIOGZzb6LCNrk7trMCQ==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/next/-/next-15.0.3.tgz", + "integrity": "sha512-ontCbCRKJUIoivAdGB34yCaOcPgYXr9AAkV/IwqFfWWTXEPUgLYkSkqBhIk9KK7gGmgjc64B+RdoeIDM13Irnw==", "dependencies": { - "@next/env": "15.1.2", + "@next/env": "15.0.3", "@swc/counter": "0.1.3", - "@swc/helpers": "0.5.15", + "@swc/helpers": "0.5.13", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", @@ -4988,22 +4956,22 @@ "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "15.1.2", - "@next/swc-darwin-x64": "15.1.2", - "@next/swc-linux-arm64-gnu": "15.1.2", - "@next/swc-linux-arm64-musl": "15.1.2", - "@next/swc-linux-x64-gnu": "15.1.2", - "@next/swc-linux-x64-musl": "15.1.2", - "@next/swc-win32-arm64-msvc": "15.1.2", - "@next/swc-win32-x64-msvc": "15.1.2", + "@next/swc-darwin-arm64": "15.0.3", + "@next/swc-darwin-x64": "15.0.3", + "@next/swc-linux-arm64-gnu": "15.0.3", + "@next/swc-linux-arm64-musl": "15.0.3", + "@next/swc-linux-x64-gnu": "15.0.3", + "@next/swc-linux-x64-musl": "15.0.3", + "@next/swc-win32-arm64-msvc": "15.0.3", + "@next/swc-win32-x64-msvc": "15.0.3", "sharp": "^0.33.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.41.2", "babel-plugin-react-compiler": "*", - "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", - "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react": "^18.2.0 || 19.0.0-rc-66855b96-20241106", + "react-dom": "^18.2.0 || 19.0.0-rc-66855b96-20241106", "sass": "^1.3.0" }, "peerDependenciesMeta": { @@ -5608,9 +5576,13 @@ "license": "MIT" }, "node_modules/react": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", - "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", + "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==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, "engines": { "node": ">=0.10.0" } @@ -5641,14 +5613,16 @@ } }, "node_modules/react-dom": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz", - "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", "dependencies": { - "scheduler": "^0.25.0" + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" }, "peerDependencies": { - "react": "^19.0.0" + "react": "^18.3.1" } }, "node_modules/react-is": { @@ -5657,20 +5631,45 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "license": "MIT" }, + "node_modules/react-remove-scroll": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/react-remove-scroll-bar": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", - "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", + "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", + "license": "MIT", "dependencies": { - "react-style-singleton": "^2.2.2", + "react-style-singleton": "^2.2.1", "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -5689,19 +5688,21 @@ } }, "node_modules/react-style-singleton": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", - "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "license": "MIT", "dependencies": { "get-nonce": "^1.0.0", + "invariant": "^2.2.4", "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -5942,9 +5943,13 @@ } }, "node_modules/scheduler": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", - "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==" + "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" + } }, "node_modules/semver": { "version": "7.6.3", @@ -6709,9 +6714,10 @@ } }, "node_modules/use-callback-ref": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", - "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", + "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", + "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, @@ -6719,8 +6725,8 @@ "node": ">=10" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -6729,9 +6735,10 @@ } }, "node_modules/use-sidecar": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", - "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "license": "MIT", "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" @@ -6740,8 +6747,8 @@ "node": ">=10" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { diff --git a/package.json b/package.json index b081fd9c..364999ec 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next dev --turbopack", + "dev": "next dev", "build": "next build", "start": "next start", "lint": "next lint" @@ -24,13 +24,13 @@ "cytoscape": "^3.30.4", "cytoscape-fcose": "^2.2.0", "lucide-react": "^0.441.0", - "next": "15.1.2", + "next": "15.0.3", "playwright": "^1.49.1", "playwright-core": "^1.49.1", - "react": "19.0.0", + "react": "^18", "react-cytoscape": "^1.0.6", "react-cytoscapejs": "^2.0.0", - "react-dom": "19.0.0", + "react-dom": "^18", "react-resizable-panels": "^2.0.20", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", @@ -42,17 +42,13 @@ "@types/cytoscape": "^3.21.8", "@types/cytoscape-fcose": "^2.2.4", "@types/node": "^22.10.2", - "@types/react": "19.0.2", + "@types/react": "^18", "@types/react-cytoscapejs": "^1.2.5", - "@types/react-dom": "19.0.2", + "@types/react-dom": "^18", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", - "eslint-config-next": "15.1.2", + "eslint-config-next": "15.1.0", "tailwindcss": "^3.4.3", "typescript": "^5" - }, - "overrides": { - "@types/react": "19.0.2", - "@types/react-dom": "19.0.2" } } From d0ab70a1ebcf095ba3e3bac339e64a3287fc96f1 Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Sun, 22 Dec 2024 13:48:55 +0200 Subject: [PATCH 49/60] commit --- app/components/chat.tsx | 2 +- app/components/toolbar.tsx | 2 +- package-lock.json | 381 +++++++++++++++++++------------------ package.json | 18 +- 4 files changed, 203 insertions(+), 200 deletions(-) diff --git a/app/components/chat.tsx b/app/components/chat.tsx index 0aa18330..8a779f95 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -122,7 +122,7 @@ export function Chat({ repo, path, setPath, graph, chartRef, selectedPathId, isP const [sugOpen, setSugOpen] = useState(false); // A reference to the chat container to allow scrolling to the bottom - const containerRef: React.RefObject = useRef(null); + const containerRef: React.RefObject = useRef(null); const isSendMessage = messages.some(m => m.type === MessageTypes.Pending) || (messages.some(m => m.text === "Please select a starting point and the end point. Select or press relevant item on the graph") && !messages.some(m => m.type === MessageTypes.Path)) diff --git a/app/components/toolbar.tsx b/app/components/toolbar.tsx index f57e26f8..00264fb8 100644 --- a/app/components/toolbar.tsx +++ b/app/components/toolbar.tsx @@ -4,7 +4,7 @@ import { Dispatch, RefObject, SetStateAction } from "react"; import { Node } from "./model"; interface Props { - chartRef: RefObject + chartRef: RefObject setSelectedObj: Dispatch> className?: string } diff --git a/package-lock.json b/package-lock.json index 5efd9c3c..3a5e58ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,13 +23,13 @@ "cytoscape": "^3.30.4", "cytoscape-fcose": "^2.2.0", "lucide-react": "^0.441.0", - "next": "15.1.2", + "next": "15.0.3", "playwright": "^1.49.1", "playwright-core": "^1.49.1", - "react": "19.0.0", + "react": "^18", "react-cytoscape": "^1.0.6", "react-cytoscapejs": "^2.0.0", - "react-dom": "19.0.0", + "react-dom": "^18", "react-resizable-panels": "^2.0.20", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", @@ -41,12 +41,12 @@ "@types/cytoscape": "^3.21.8", "@types/cytoscape-fcose": "^2.2.4", "@types/node": "^22.10.2", - "@types/react": "19.0.2", + "@types/react": "^18", "@types/react-cytoscapejs": "^1.2.5", - "@types/react-dom": "19.0.2", + "@types/react-dom": "^18", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", - "eslint-config-next": "15.1.2", + "eslint-config-next": "15.1.0", "tailwindcss": "^3.4.3", "typescript": "^5" } @@ -183,26 +183,29 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", - "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.7.tgz", + "integrity": "sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==", + "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.8" + "@floating-ui/utils": "^0.2.7" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.12", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz", - "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==", + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.10.tgz", + "integrity": "sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==", + "license": "MIT", "dependencies": { "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.8" + "@floating-ui/utils": "^0.2.7" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", - "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz", + "integrity": "sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==", + "license": "MIT", "dependencies": { "@floating-ui/dom": "^1.0.0" }, @@ -212,9 +215,10 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", - "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==" + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.7.tgz", + "integrity": "sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==", + "license": "MIT" }, "node_modules/@humanfs/core": { "version": "0.19.1", @@ -451,15 +455,16 @@ } }, "node_modules/@next/env": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.1.2.tgz", - "integrity": "sha512-Hm3jIGsoUl6RLB1vzY+dZeqb+/kWPZ+h34yiWxW0dV87l8Im/eMOwpOA+a0L78U0HM04syEjXuRlCozqpwuojQ==" + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.0.3.tgz", + "integrity": "sha512-t9Xy32pjNOvVn2AS+Utt6VmyrshbpfUMhIjFO60gI58deSo/KgLOp31XZ4O+kY/Is8WAGYwA5gR7kOb1eORDBA==" }, "node_modules/@next/eslint-plugin-next": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.2.tgz", - "integrity": "sha512-sgfw3+WdaYOGPKCvM1L+UucBmRfh8V2Ygefp7ELON0+0vY7uohQwXXnVWg3rY7mXDKharQR3o7uedpfvnU2hlQ==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.0.tgz", + "integrity": "sha512-+jPT0h+nelBT6HC9ZCHGc7DgGVy04cv4shYdAe6tKlEbjQUtwU3LzQhzbDHQyY2m6g39m6B0kOFVuLGBrxxbGg==", "dev": true, + "license": "MIT", "dependencies": { "fast-glob": "3.3.1" } @@ -469,6 +474,7 @@ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -485,6 +491,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -493,9 +500,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.1.2.tgz", - "integrity": "sha512-b9TN7q+j5/7+rGLhFAVZiKJGIASuo8tWvInGfAd8wsULjB1uNGRCj1z1WZwwPWzVQbIKWFYqc+9L7W09qwt52w==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.0.3.tgz", + "integrity": "sha512-s3Q/NOorCsLYdCKvQlWU+a+GeAd3C8Rb3L1YnetsgwXzhc3UTWrtQpB/3eCjFOdGUj5QmXfRak12uocd1ZiiQw==", "cpu": [ "arm64" ], @@ -508,9 +515,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.1.2.tgz", - "integrity": "sha512-caR62jNDUCU+qobStO6YJ05p9E+LR0EoXh1EEmyU69cYydsAy7drMcOlUlRtQihM6K6QfvNwJuLhsHcCzNpqtA==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.0.3.tgz", + "integrity": "sha512-Zxl/TwyXVZPCFSf0u2BNj5sE0F2uR6iSKxWpq4Wlk/Sv9Ob6YCKByQTkV2y6BCic+fkabp9190hyrDdPA/dNrw==", "cpu": [ "x64" ], @@ -523,9 +530,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.1.2.tgz", - "integrity": "sha512-fHHXBusURjBmN6VBUtu6/5s7cCeEkuGAb/ZZiGHBLVBXMBy4D5QpM8P33Or8JD1nlOjm/ZT9sEE5HouQ0F+hUA==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.0.3.tgz", + "integrity": "sha512-T5+gg2EwpsY3OoaLxUIofmMb7ohAUlcNZW0fPQ6YAutaWJaxt1Z1h+8zdl4FRIOr5ABAAhXtBcpkZNwUcKI2fw==", "cpu": [ "arm64" ], @@ -538,9 +545,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.1.2.tgz", - "integrity": "sha512-9CF1Pnivij7+M3G74lxr+e9h6o2YNIe7QtExWq1KUK4hsOLTBv6FJikEwCaC3NeYTflzrm69E5UfwEAbV2U9/g==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.0.3.tgz", + "integrity": "sha512-WkAk6R60mwDjH4lG/JBpb2xHl2/0Vj0ZRu1TIzWuOYfQ9tt9NFsIinI1Epma77JVgy81F32X/AeD+B2cBu/YQA==", "cpu": [ "arm64" ], @@ -553,9 +560,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.1.2.tgz", - "integrity": "sha512-tINV7WmcTUf4oM/eN3Yuu/f8jQ5C6AkueZPKeALs/qfdfX57eNv4Ij7rt0SA6iZ8+fMobVfcFVv664Op0caCCg==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.0.3.tgz", + "integrity": "sha512-gWL/Cta1aPVqIGgDb6nxkqy06DkwJ9gAnKORdHWX1QBbSZZB+biFYPFti8aKIQL7otCE1pjyPaXpFzGeG2OS2w==", "cpu": [ "x64" ], @@ -568,9 +575,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.1.2.tgz", - "integrity": "sha512-jf2IseC4WRsGkzeUw/cK3wci9pxR53GlLAt30+y+B+2qAQxMw6WAC3QrANIKxkcoPU3JFh/10uFfmoMDF9JXKg==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.0.3.tgz", + "integrity": "sha512-QQEMwFd8r7C0GxQS62Zcdy6GKx999I/rTO2ubdXEe+MlZk9ZiinsrjwoiBL5/57tfyjikgh6GOU2WRQVUej3UA==", "cpu": [ "x64" ], @@ -583,9 +590,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.1.2.tgz", - "integrity": "sha512-wvg7MlfnaociP7k8lxLX4s2iBJm4BrNiNFhVUY+Yur5yhAJHfkS8qPPeDEUH8rQiY0PX3u/P7Q/wcg6Mv6GSAA==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.0.3.tgz", + "integrity": "sha512-9TEp47AAd/ms9fPNgtgnT7F3M1Hf7koIYYWCMQ9neOwjbVWJsHZxrFbI3iEDJ8rf1TDGpmHbKxXf2IFpAvheIQ==", "cpu": [ "arm64" ], @@ -598,9 +605,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.1.2.tgz", - "integrity": "sha512-D3cNA8NoT3aWISWmo7HF5Eyko/0OdOO+VagkoJuiTk7pyX3P/b+n8XA/MYvyR+xSVcbKn68B1rY9fgqjNISqzQ==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.0.3.tgz", + "integrity": "sha512-VNAz+HN4OGgvZs6MOoVfnn41kBzT+M+tB+OK4cww6DNyWS6wKaDpaAm/qLeOUbnMh0oVx1+mg0uoYARF69dJyA==", "cpu": [ "x64" ], @@ -688,6 +695,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz", "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==", + "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0" }, @@ -753,6 +761,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz", "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==", + "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-context": "1.1.0", @@ -853,30 +862,6 @@ } } }, - "node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", - "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", - "dependencies": { - "react-remove-scroll-bar": "^2.3.6", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-direction": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", @@ -896,6 +881,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", + "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", @@ -978,6 +964,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz", "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==", + "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-primitive": "2.0.0", @@ -1113,34 +1100,11 @@ } } }, - "node_modules/@radix-ui/react-menu/node_modules/react-remove-scroll": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", - "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", - "dependencies": { - "react-remove-scroll-bar": "^2.3.6", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-popper": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==", + "license": "MIT", "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.0", @@ -1172,6 +1136,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", + "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-use-layout-effect": "1.1.0" @@ -1195,6 +1160,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", + "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-use-layout-effect": "1.1.0" @@ -1218,6 +1184,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", + "license": "MIT", "dependencies": { "@radix-ui/react-slot": "1.1.0" }, @@ -1345,30 +1312,6 @@ } } }, - "node_modules/@radix-ui/react-select/node_modules/react-remove-scroll": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", - "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", - "dependencies": { - "react-remove-scroll-bar": "^2.3.6", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", @@ -1520,6 +1463,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", + "license": "MIT", "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.0" }, @@ -1567,6 +1511,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz", "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==", + "license": "MIT", "dependencies": { "@radix-ui/rect": "1.1.0" }, @@ -1602,6 +1547,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz", "integrity": "sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==", + "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0" }, @@ -1623,7 +1569,8 @@ "node_modules/@radix-ui/rect": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", - "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==" + "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==", + "license": "MIT" }, "node_modules/@rtsao/scc": { "version": "1.1.0", @@ -1645,11 +1592,11 @@ "license": "Apache-2.0" }, "node_modules/@swc/helpers": { - "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", - "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz", + "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==", "dependencies": { - "tslib": "^2.8.0" + "tslib": "^2.4.0" } }, "node_modules/@types/cytoscape": { @@ -1705,12 +1652,21 @@ "undici-types": "~6.20.0" } }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "devOptional": true, + "license": "MIT" + }, "node_modules/@types/react": { - "version": "19.0.2", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.2.tgz", - "integrity": "sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg==", + "version": "18.3.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", + "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", "devOptional": true, + "license": "MIT", "dependencies": { + "@types/prop-types": "*", "csstype": "^3.0.2" } }, @@ -1725,12 +1681,12 @@ } }, "node_modules/@types/react-dom": { - "version": "19.0.2", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.2.tgz", - "integrity": "sha512-c1s+7TKFaDRRxr1TxccIX2u7sfCnc3RxkVyBIUA2lCpyqCF+QoAwQ/CBg7bsMdVwP120HEH143VQezKtef5nCg==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", "devOptional": true, - "peerDependencies": { - "@types/react": "^19.0.0" + "dependencies": { + "@types/react": "*" } }, "node_modules/@types/react-syntax-highlighter": { @@ -2898,7 +2854,8 @@ "node_modules/detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" }, "node_modules/didyoumean": { "version": "1.2.2", @@ -3220,12 +3177,13 @@ } }, "node_modules/eslint-config-next": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.1.2.tgz", - "integrity": "sha512-PrMm1/4zWSJ689wd/ypWIR5ZF1uvmp3EkgpgBV1Yu6PhEobBjXMGgT8bVNelwl17LXojO8D5ePFRiI4qXjsPRA==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.1.0.tgz", + "integrity": "sha512-gADO+nKVseGso3DtOrYX9H7TxB/MuX7AUYhMlvQMqLYvUWu4HrOQuU7cC1HW74tHIqkAvXdwgAz3TCbczzSEXw==", "dev": true, + "license": "MIT", "dependencies": { - "@next/eslint-plugin-next": "15.1.2", + "@next/eslint-plugin-next": "15.1.0", "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", @@ -3850,6 +3808,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", "engines": { "node": ">=6" } @@ -4185,6 +4144,15 @@ "node": ">= 0.4" } }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", @@ -4969,13 +4937,13 @@ "license": "MIT" }, "node_modules/next": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/next/-/next-15.1.2.tgz", - "integrity": "sha512-nLJDV7peNy+0oHlmY2JZjzMfJ8Aj0/dd3jCwSZS8ZiO5nkQfcZRqDrRN3U5rJtqVTQneIOGZzb6LCNrk7trMCQ==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/next/-/next-15.0.3.tgz", + "integrity": "sha512-ontCbCRKJUIoivAdGB34yCaOcPgYXr9AAkV/IwqFfWWTXEPUgLYkSkqBhIk9KK7gGmgjc64B+RdoeIDM13Irnw==", "dependencies": { - "@next/env": "15.1.2", + "@next/env": "15.0.3", "@swc/counter": "0.1.3", - "@swc/helpers": "0.5.15", + "@swc/helpers": "0.5.13", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", @@ -4988,22 +4956,22 @@ "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "15.1.2", - "@next/swc-darwin-x64": "15.1.2", - "@next/swc-linux-arm64-gnu": "15.1.2", - "@next/swc-linux-arm64-musl": "15.1.2", - "@next/swc-linux-x64-gnu": "15.1.2", - "@next/swc-linux-x64-musl": "15.1.2", - "@next/swc-win32-arm64-msvc": "15.1.2", - "@next/swc-win32-x64-msvc": "15.1.2", + "@next/swc-darwin-arm64": "15.0.3", + "@next/swc-darwin-x64": "15.0.3", + "@next/swc-linux-arm64-gnu": "15.0.3", + "@next/swc-linux-arm64-musl": "15.0.3", + "@next/swc-linux-x64-gnu": "15.0.3", + "@next/swc-linux-x64-musl": "15.0.3", + "@next/swc-win32-arm64-msvc": "15.0.3", + "@next/swc-win32-x64-msvc": "15.0.3", "sharp": "^0.33.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.41.2", "babel-plugin-react-compiler": "*", - "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", - "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react": "^18.2.0 || 19.0.0-rc-66855b96-20241106", + "react-dom": "^18.2.0 || 19.0.0-rc-66855b96-20241106", "sass": "^1.3.0" }, "peerDependenciesMeta": { @@ -5608,9 +5576,13 @@ "license": "MIT" }, "node_modules/react": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", - "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", + "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==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, "engines": { "node": ">=0.10.0" } @@ -5641,14 +5613,16 @@ } }, "node_modules/react-dom": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz", - "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", "dependencies": { - "scheduler": "^0.25.0" + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" }, "peerDependencies": { - "react": "^19.0.0" + "react": "^18.3.1" } }, "node_modules/react-is": { @@ -5657,20 +5631,45 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "license": "MIT" }, + "node_modules/react-remove-scroll": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/react-remove-scroll-bar": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", - "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", + "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", + "license": "MIT", "dependencies": { - "react-style-singleton": "^2.2.2", + "react-style-singleton": "^2.2.1", "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -5689,19 +5688,21 @@ } }, "node_modules/react-style-singleton": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", - "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "license": "MIT", "dependencies": { "get-nonce": "^1.0.0", + "invariant": "^2.2.4", "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -5942,9 +5943,13 @@ } }, "node_modules/scheduler": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", - "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==" + "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" + } }, "node_modules/semver": { "version": "7.6.3", @@ -6709,9 +6714,10 @@ } }, "node_modules/use-callback-ref": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", - "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", + "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", + "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, @@ -6719,8 +6725,8 @@ "node": ">=10" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -6729,9 +6735,10 @@ } }, "node_modules/use-sidecar": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", - "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "license": "MIT", "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" @@ -6740,8 +6747,8 @@ "node": ">=10" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { diff --git a/package.json b/package.json index b081fd9c..364999ec 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next dev --turbopack", + "dev": "next dev", "build": "next build", "start": "next start", "lint": "next lint" @@ -24,13 +24,13 @@ "cytoscape": "^3.30.4", "cytoscape-fcose": "^2.2.0", "lucide-react": "^0.441.0", - "next": "15.1.2", + "next": "15.0.3", "playwright": "^1.49.1", "playwright-core": "^1.49.1", - "react": "19.0.0", + "react": "^18", "react-cytoscape": "^1.0.6", "react-cytoscapejs": "^2.0.0", - "react-dom": "19.0.0", + "react-dom": "^18", "react-resizable-panels": "^2.0.20", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", @@ -42,17 +42,13 @@ "@types/cytoscape": "^3.21.8", "@types/cytoscape-fcose": "^2.2.4", "@types/node": "^22.10.2", - "@types/react": "19.0.2", + "@types/react": "^18", "@types/react-cytoscapejs": "^1.2.5", - "@types/react-dom": "19.0.2", + "@types/react-dom": "^18", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", - "eslint-config-next": "15.1.2", + "eslint-config-next": "15.1.0", "tailwindcss": "^3.4.3", "typescript": "^5" - }, - "overrides": { - "@types/react": "19.0.2", - "@types/react-dom": "19.0.2" } } From 94bd8a1c898a40b2222995df2ad4f702ae02b48d Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Sun, 22 Dec 2024 13:50:05 +0200 Subject: [PATCH 50/60] commit --- app/components/chat.tsx | 2 +- app/components/toolbar.tsx | 2 +- package-lock.json | 381 ++++++++++++++++++------------------- package.json | 18 +- 4 files changed, 200 insertions(+), 203 deletions(-) diff --git a/app/components/chat.tsx b/app/components/chat.tsx index 8a779f95..0aa18330 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -122,7 +122,7 @@ export function Chat({ repo, path, setPath, graph, chartRef, selectedPathId, isP const [sugOpen, setSugOpen] = useState(false); // A reference to the chat container to allow scrolling to the bottom - const containerRef: React.RefObject = useRef(null); + const containerRef: React.RefObject = useRef(null); const isSendMessage = messages.some(m => m.type === MessageTypes.Pending) || (messages.some(m => m.text === "Please select a starting point and the end point. Select or press relevant item on the graph") && !messages.some(m => m.type === MessageTypes.Path)) diff --git a/app/components/toolbar.tsx b/app/components/toolbar.tsx index 00264fb8..f57e26f8 100644 --- a/app/components/toolbar.tsx +++ b/app/components/toolbar.tsx @@ -4,7 +4,7 @@ import { Dispatch, RefObject, SetStateAction } from "react"; import { Node } from "./model"; interface Props { - chartRef: RefObject + chartRef: RefObject setSelectedObj: Dispatch> className?: string } diff --git a/package-lock.json b/package-lock.json index 3a5e58ce..5efd9c3c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,13 +23,13 @@ "cytoscape": "^3.30.4", "cytoscape-fcose": "^2.2.0", "lucide-react": "^0.441.0", - "next": "15.0.3", + "next": "15.1.2", "playwright": "^1.49.1", "playwright-core": "^1.49.1", - "react": "^18", + "react": "19.0.0", "react-cytoscape": "^1.0.6", "react-cytoscapejs": "^2.0.0", - "react-dom": "^18", + "react-dom": "19.0.0", "react-resizable-panels": "^2.0.20", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", @@ -41,12 +41,12 @@ "@types/cytoscape": "^3.21.8", "@types/cytoscape-fcose": "^2.2.4", "@types/node": "^22.10.2", - "@types/react": "^18", + "@types/react": "19.0.2", "@types/react-cytoscapejs": "^1.2.5", - "@types/react-dom": "^18", + "@types/react-dom": "19.0.2", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", - "eslint-config-next": "15.1.0", + "eslint-config-next": "15.1.2", "tailwindcss": "^3.4.3", "typescript": "^5" } @@ -183,29 +183,26 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.7.tgz", - "integrity": "sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==", - "license": "MIT", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", + "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", "dependencies": { - "@floating-ui/utils": "^0.2.7" + "@floating-ui/utils": "^0.2.8" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.10", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.10.tgz", - "integrity": "sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==", - "license": "MIT", + "version": "1.6.12", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz", + "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==", "dependencies": { "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.7" + "@floating-ui/utils": "^0.2.8" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz", - "integrity": "sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==", - "license": "MIT", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", + "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", "dependencies": { "@floating-ui/dom": "^1.0.0" }, @@ -215,10 +212,9 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.7.tgz", - "integrity": "sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==", - "license": "MIT" + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", + "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==" }, "node_modules/@humanfs/core": { "version": "0.19.1", @@ -455,16 +451,15 @@ } }, "node_modules/@next/env": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.0.3.tgz", - "integrity": "sha512-t9Xy32pjNOvVn2AS+Utt6VmyrshbpfUMhIjFO60gI58deSo/KgLOp31XZ4O+kY/Is8WAGYwA5gR7kOb1eORDBA==" + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.1.2.tgz", + "integrity": "sha512-Hm3jIGsoUl6RLB1vzY+dZeqb+/kWPZ+h34yiWxW0dV87l8Im/eMOwpOA+a0L78U0HM04syEjXuRlCozqpwuojQ==" }, "node_modules/@next/eslint-plugin-next": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.0.tgz", - "integrity": "sha512-+jPT0h+nelBT6HC9ZCHGc7DgGVy04cv4shYdAe6tKlEbjQUtwU3LzQhzbDHQyY2m6g39m6B0kOFVuLGBrxxbGg==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.2.tgz", + "integrity": "sha512-sgfw3+WdaYOGPKCvM1L+UucBmRfh8V2Ygefp7ELON0+0vY7uohQwXXnVWg3rY7mXDKharQR3o7uedpfvnU2hlQ==", "dev": true, - "license": "MIT", "dependencies": { "fast-glob": "3.3.1" } @@ -474,7 +469,6 @@ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -491,7 +485,6 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -500,9 +493,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.0.3.tgz", - "integrity": "sha512-s3Q/NOorCsLYdCKvQlWU+a+GeAd3C8Rb3L1YnetsgwXzhc3UTWrtQpB/3eCjFOdGUj5QmXfRak12uocd1ZiiQw==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.1.2.tgz", + "integrity": "sha512-b9TN7q+j5/7+rGLhFAVZiKJGIASuo8tWvInGfAd8wsULjB1uNGRCj1z1WZwwPWzVQbIKWFYqc+9L7W09qwt52w==", "cpu": [ "arm64" ], @@ -515,9 +508,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.0.3.tgz", - "integrity": "sha512-Zxl/TwyXVZPCFSf0u2BNj5sE0F2uR6iSKxWpq4Wlk/Sv9Ob6YCKByQTkV2y6BCic+fkabp9190hyrDdPA/dNrw==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.1.2.tgz", + "integrity": "sha512-caR62jNDUCU+qobStO6YJ05p9E+LR0EoXh1EEmyU69cYydsAy7drMcOlUlRtQihM6K6QfvNwJuLhsHcCzNpqtA==", "cpu": [ "x64" ], @@ -530,9 +523,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.0.3.tgz", - "integrity": "sha512-T5+gg2EwpsY3OoaLxUIofmMb7ohAUlcNZW0fPQ6YAutaWJaxt1Z1h+8zdl4FRIOr5ABAAhXtBcpkZNwUcKI2fw==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.1.2.tgz", + "integrity": "sha512-fHHXBusURjBmN6VBUtu6/5s7cCeEkuGAb/ZZiGHBLVBXMBy4D5QpM8P33Or8JD1nlOjm/ZT9sEE5HouQ0F+hUA==", "cpu": [ "arm64" ], @@ -545,9 +538,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.0.3.tgz", - "integrity": "sha512-WkAk6R60mwDjH4lG/JBpb2xHl2/0Vj0ZRu1TIzWuOYfQ9tt9NFsIinI1Epma77JVgy81F32X/AeD+B2cBu/YQA==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.1.2.tgz", + "integrity": "sha512-9CF1Pnivij7+M3G74lxr+e9h6o2YNIe7QtExWq1KUK4hsOLTBv6FJikEwCaC3NeYTflzrm69E5UfwEAbV2U9/g==", "cpu": [ "arm64" ], @@ -560,9 +553,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.0.3.tgz", - "integrity": "sha512-gWL/Cta1aPVqIGgDb6nxkqy06DkwJ9gAnKORdHWX1QBbSZZB+biFYPFti8aKIQL7otCE1pjyPaXpFzGeG2OS2w==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.1.2.tgz", + "integrity": "sha512-tINV7WmcTUf4oM/eN3Yuu/f8jQ5C6AkueZPKeALs/qfdfX57eNv4Ij7rt0SA6iZ8+fMobVfcFVv664Op0caCCg==", "cpu": [ "x64" ], @@ -575,9 +568,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.0.3.tgz", - "integrity": "sha512-QQEMwFd8r7C0GxQS62Zcdy6GKx999I/rTO2ubdXEe+MlZk9ZiinsrjwoiBL5/57tfyjikgh6GOU2WRQVUej3UA==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.1.2.tgz", + "integrity": "sha512-jf2IseC4WRsGkzeUw/cK3wci9pxR53GlLAt30+y+B+2qAQxMw6WAC3QrANIKxkcoPU3JFh/10uFfmoMDF9JXKg==", "cpu": [ "x64" ], @@ -590,9 +583,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.0.3.tgz", - "integrity": "sha512-9TEp47AAd/ms9fPNgtgnT7F3M1Hf7koIYYWCMQ9neOwjbVWJsHZxrFbI3iEDJ8rf1TDGpmHbKxXf2IFpAvheIQ==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.1.2.tgz", + "integrity": "sha512-wvg7MlfnaociP7k8lxLX4s2iBJm4BrNiNFhVUY+Yur5yhAJHfkS8qPPeDEUH8rQiY0PX3u/P7Q/wcg6Mv6GSAA==", "cpu": [ "arm64" ], @@ -605,9 +598,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.0.3.tgz", - "integrity": "sha512-VNAz+HN4OGgvZs6MOoVfnn41kBzT+M+tB+OK4cww6DNyWS6wKaDpaAm/qLeOUbnMh0oVx1+mg0uoYARF69dJyA==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.1.2.tgz", + "integrity": "sha512-D3cNA8NoT3aWISWmo7HF5Eyko/0OdOO+VagkoJuiTk7pyX3P/b+n8XA/MYvyR+xSVcbKn68B1rY9fgqjNISqzQ==", "cpu": [ "x64" ], @@ -695,7 +688,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz", "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==", - "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0" }, @@ -761,7 +753,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz", "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==", - "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-context": "1.1.0", @@ -862,6 +853,30 @@ } } }, + "node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-direction": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", @@ -881,7 +896,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", - "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", @@ -964,7 +978,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz", "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==", - "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-primitive": "2.0.0", @@ -1100,11 +1113,34 @@ } } }, + "node_modules/@radix-ui/react-menu/node_modules/react-remove-scroll": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-popper": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==", - "license": "MIT", "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.0", @@ -1136,7 +1172,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", - "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-use-layout-effect": "1.1.0" @@ -1160,7 +1195,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", - "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-use-layout-effect": "1.1.0" @@ -1184,7 +1218,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", - "license": "MIT", "dependencies": { "@radix-ui/react-slot": "1.1.0" }, @@ -1312,6 +1345,30 @@ } } }, + "node_modules/@radix-ui/react-select/node_modules/react-remove-scroll": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", @@ -1463,7 +1520,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", - "license": "MIT", "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.0" }, @@ -1511,7 +1567,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz", "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==", - "license": "MIT", "dependencies": { "@radix-ui/rect": "1.1.0" }, @@ -1547,7 +1602,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz", "integrity": "sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==", - "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0" }, @@ -1569,8 +1623,7 @@ "node_modules/@radix-ui/rect": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", - "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==", - "license": "MIT" + "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==" }, "node_modules/@rtsao/scc": { "version": "1.1.0", @@ -1592,11 +1645,11 @@ "license": "Apache-2.0" }, "node_modules/@swc/helpers": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz", - "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==", + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", "dependencies": { - "tslib": "^2.4.0" + "tslib": "^2.8.0" } }, "node_modules/@types/cytoscape": { @@ -1652,21 +1705,12 @@ "undici-types": "~6.20.0" } }, - "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "devOptional": true, - "license": "MIT" - }, "node_modules/@types/react": { - "version": "18.3.12", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", - "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.2.tgz", + "integrity": "sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg==", "devOptional": true, - "license": "MIT", "dependencies": { - "@types/prop-types": "*", "csstype": "^3.0.2" } }, @@ -1681,12 +1725,12 @@ } }, "node_modules/@types/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.2.tgz", + "integrity": "sha512-c1s+7TKFaDRRxr1TxccIX2u7sfCnc3RxkVyBIUA2lCpyqCF+QoAwQ/CBg7bsMdVwP120HEH143VQezKtef5nCg==", "devOptional": true, - "dependencies": { - "@types/react": "*" + "peerDependencies": { + "@types/react": "^19.0.0" } }, "node_modules/@types/react-syntax-highlighter": { @@ -2854,8 +2898,7 @@ "node_modules/detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", - "license": "MIT" + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" }, "node_modules/didyoumean": { "version": "1.2.2", @@ -3177,13 +3220,12 @@ } }, "node_modules/eslint-config-next": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.1.0.tgz", - "integrity": "sha512-gADO+nKVseGso3DtOrYX9H7TxB/MuX7AUYhMlvQMqLYvUWu4HrOQuU7cC1HW74tHIqkAvXdwgAz3TCbczzSEXw==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.1.2.tgz", + "integrity": "sha512-PrMm1/4zWSJ689wd/ypWIR5ZF1uvmp3EkgpgBV1Yu6PhEobBjXMGgT8bVNelwl17LXojO8D5ePFRiI4qXjsPRA==", "dev": true, - "license": "MIT", "dependencies": { - "@next/eslint-plugin-next": "15.1.0", + "@next/eslint-plugin-next": "15.1.2", "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", @@ -3808,7 +3850,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", - "license": "MIT", "engines": { "node": ">=6" } @@ -4144,15 +4185,6 @@ "node": ">= 0.4" } }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, "node_modules/is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", @@ -4937,13 +4969,13 @@ "license": "MIT" }, "node_modules/next": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/next/-/next-15.0.3.tgz", - "integrity": "sha512-ontCbCRKJUIoivAdGB34yCaOcPgYXr9AAkV/IwqFfWWTXEPUgLYkSkqBhIk9KK7gGmgjc64B+RdoeIDM13Irnw==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/next/-/next-15.1.2.tgz", + "integrity": "sha512-nLJDV7peNy+0oHlmY2JZjzMfJ8Aj0/dd3jCwSZS8ZiO5nkQfcZRqDrRN3U5rJtqVTQneIOGZzb6LCNrk7trMCQ==", "dependencies": { - "@next/env": "15.0.3", + "@next/env": "15.1.2", "@swc/counter": "0.1.3", - "@swc/helpers": "0.5.13", + "@swc/helpers": "0.5.15", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", @@ -4956,22 +4988,22 @@ "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "15.0.3", - "@next/swc-darwin-x64": "15.0.3", - "@next/swc-linux-arm64-gnu": "15.0.3", - "@next/swc-linux-arm64-musl": "15.0.3", - "@next/swc-linux-x64-gnu": "15.0.3", - "@next/swc-linux-x64-musl": "15.0.3", - "@next/swc-win32-arm64-msvc": "15.0.3", - "@next/swc-win32-x64-msvc": "15.0.3", + "@next/swc-darwin-arm64": "15.1.2", + "@next/swc-darwin-x64": "15.1.2", + "@next/swc-linux-arm64-gnu": "15.1.2", + "@next/swc-linux-arm64-musl": "15.1.2", + "@next/swc-linux-x64-gnu": "15.1.2", + "@next/swc-linux-x64-musl": "15.1.2", + "@next/swc-win32-arm64-msvc": "15.1.2", + "@next/swc-win32-x64-msvc": "15.1.2", "sharp": "^0.33.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.41.2", "babel-plugin-react-compiler": "*", - "react": "^18.2.0 || 19.0.0-rc-66855b96-20241106", - "react-dom": "^18.2.0 || 19.0.0-rc-66855b96-20241106", + "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "peerDependenciesMeta": { @@ -5576,13 +5608,9 @@ "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==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", + "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", "engines": { "node": ">=0.10.0" } @@ -5613,16 +5641,14 @@ } }, "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==", - "license": "MIT", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz", + "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==", "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" + "scheduler": "^0.25.0" }, "peerDependencies": { - "react": "^18.3.1" + "react": "^19.0.0" } }, "node_modules/react-is": { @@ -5631,45 +5657,20 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "license": "MIT" }, - "node_modules/react-remove-scroll": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", - "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", - "dependencies": { - "react-remove-scroll-bar": "^2.3.6", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/react-remove-scroll-bar": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", - "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", - "license": "MIT", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", "dependencies": { - "react-style-singleton": "^2.2.1", + "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -5688,21 +5689,19 @@ } }, "node_modules/react-style-singleton": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", - "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", - "license": "MIT", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", "dependencies": { "get-nonce": "^1.0.0", - "invariant": "^2.2.4", "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -5943,13 +5942,9 @@ } }, "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.25.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", + "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==" }, "node_modules/semver": { "version": "7.6.3", @@ -6714,10 +6709,9 @@ } }, "node_modules/use-callback-ref": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", - "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", - "license": "MIT", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", "dependencies": { "tslib": "^2.0.0" }, @@ -6725,8 +6719,8 @@ "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -6735,10 +6729,9 @@ } }, "node_modules/use-sidecar": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", - "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", - "license": "MIT", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" @@ -6747,8 +6740,8 @@ "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { diff --git a/package.json b/package.json index 364999ec..b081fd9c 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next dev", + "dev": "next dev --turbopack", "build": "next build", "start": "next start", "lint": "next lint" @@ -24,13 +24,13 @@ "cytoscape": "^3.30.4", "cytoscape-fcose": "^2.2.0", "lucide-react": "^0.441.0", - "next": "15.0.3", + "next": "15.1.2", "playwright": "^1.49.1", "playwright-core": "^1.49.1", - "react": "^18", + "react": "19.0.0", "react-cytoscape": "^1.0.6", "react-cytoscapejs": "^2.0.0", - "react-dom": "^18", + "react-dom": "19.0.0", "react-resizable-panels": "^2.0.20", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", @@ -42,13 +42,17 @@ "@types/cytoscape": "^3.21.8", "@types/cytoscape-fcose": "^2.2.4", "@types/node": "^22.10.2", - "@types/react": "^18", + "@types/react": "19.0.2", "@types/react-cytoscapejs": "^1.2.5", - "@types/react-dom": "^18", + "@types/react-dom": "19.0.2", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", - "eslint-config-next": "15.1.0", + "eslint-config-next": "15.1.2", "tailwindcss": "^3.4.3", "typescript": "^5" + }, + "overrides": { + "@types/react": "19.0.2", + "@types/react-dom": "19.0.2" } } From 87c6b17c584ea3491b06126764e5d255865292e4 Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Sun, 22 Dec 2024 13:50:40 +0200 Subject: [PATCH 51/60] Revert "commit" This reverts commit 020f4bb2a2e193a78f446d27796cab7236a6a9b5. --- app/components/chat.tsx | 2 +- app/components/toolbar.tsx | 2 +- package-lock.json | 381 ++++++++++++++++++------------------- package.json | 18 +- 4 files changed, 200 insertions(+), 203 deletions(-) diff --git a/app/components/chat.tsx b/app/components/chat.tsx index 8a779f95..0aa18330 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -122,7 +122,7 @@ export function Chat({ repo, path, setPath, graph, chartRef, selectedPathId, isP const [sugOpen, setSugOpen] = useState(false); // A reference to the chat container to allow scrolling to the bottom - const containerRef: React.RefObject = useRef(null); + const containerRef: React.RefObject = useRef(null); const isSendMessage = messages.some(m => m.type === MessageTypes.Pending) || (messages.some(m => m.text === "Please select a starting point and the end point. Select or press relevant item on the graph") && !messages.some(m => m.type === MessageTypes.Path)) diff --git a/app/components/toolbar.tsx b/app/components/toolbar.tsx index 00264fb8..f57e26f8 100644 --- a/app/components/toolbar.tsx +++ b/app/components/toolbar.tsx @@ -4,7 +4,7 @@ import { Dispatch, RefObject, SetStateAction } from "react"; import { Node } from "./model"; interface Props { - chartRef: RefObject + chartRef: RefObject setSelectedObj: Dispatch> className?: string } diff --git a/package-lock.json b/package-lock.json index 3a5e58ce..5efd9c3c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,13 +23,13 @@ "cytoscape": "^3.30.4", "cytoscape-fcose": "^2.2.0", "lucide-react": "^0.441.0", - "next": "15.0.3", + "next": "15.1.2", "playwright": "^1.49.1", "playwright-core": "^1.49.1", - "react": "^18", + "react": "19.0.0", "react-cytoscape": "^1.0.6", "react-cytoscapejs": "^2.0.0", - "react-dom": "^18", + "react-dom": "19.0.0", "react-resizable-panels": "^2.0.20", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", @@ -41,12 +41,12 @@ "@types/cytoscape": "^3.21.8", "@types/cytoscape-fcose": "^2.2.4", "@types/node": "^22.10.2", - "@types/react": "^18", + "@types/react": "19.0.2", "@types/react-cytoscapejs": "^1.2.5", - "@types/react-dom": "^18", + "@types/react-dom": "19.0.2", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", - "eslint-config-next": "15.1.0", + "eslint-config-next": "15.1.2", "tailwindcss": "^3.4.3", "typescript": "^5" } @@ -183,29 +183,26 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.7.tgz", - "integrity": "sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==", - "license": "MIT", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", + "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", "dependencies": { - "@floating-ui/utils": "^0.2.7" + "@floating-ui/utils": "^0.2.8" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.10", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.10.tgz", - "integrity": "sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==", - "license": "MIT", + "version": "1.6.12", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz", + "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==", "dependencies": { "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.7" + "@floating-ui/utils": "^0.2.8" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz", - "integrity": "sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==", - "license": "MIT", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", + "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", "dependencies": { "@floating-ui/dom": "^1.0.0" }, @@ -215,10 +212,9 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.7.tgz", - "integrity": "sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==", - "license": "MIT" + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", + "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==" }, "node_modules/@humanfs/core": { "version": "0.19.1", @@ -455,16 +451,15 @@ } }, "node_modules/@next/env": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.0.3.tgz", - "integrity": "sha512-t9Xy32pjNOvVn2AS+Utt6VmyrshbpfUMhIjFO60gI58deSo/KgLOp31XZ4O+kY/Is8WAGYwA5gR7kOb1eORDBA==" + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.1.2.tgz", + "integrity": "sha512-Hm3jIGsoUl6RLB1vzY+dZeqb+/kWPZ+h34yiWxW0dV87l8Im/eMOwpOA+a0L78U0HM04syEjXuRlCozqpwuojQ==" }, "node_modules/@next/eslint-plugin-next": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.0.tgz", - "integrity": "sha512-+jPT0h+nelBT6HC9ZCHGc7DgGVy04cv4shYdAe6tKlEbjQUtwU3LzQhzbDHQyY2m6g39m6B0kOFVuLGBrxxbGg==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.2.tgz", + "integrity": "sha512-sgfw3+WdaYOGPKCvM1L+UucBmRfh8V2Ygefp7ELON0+0vY7uohQwXXnVWg3rY7mXDKharQR3o7uedpfvnU2hlQ==", "dev": true, - "license": "MIT", "dependencies": { "fast-glob": "3.3.1" } @@ -474,7 +469,6 @@ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -491,7 +485,6 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -500,9 +493,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.0.3.tgz", - "integrity": "sha512-s3Q/NOorCsLYdCKvQlWU+a+GeAd3C8Rb3L1YnetsgwXzhc3UTWrtQpB/3eCjFOdGUj5QmXfRak12uocd1ZiiQw==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.1.2.tgz", + "integrity": "sha512-b9TN7q+j5/7+rGLhFAVZiKJGIASuo8tWvInGfAd8wsULjB1uNGRCj1z1WZwwPWzVQbIKWFYqc+9L7W09qwt52w==", "cpu": [ "arm64" ], @@ -515,9 +508,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.0.3.tgz", - "integrity": "sha512-Zxl/TwyXVZPCFSf0u2BNj5sE0F2uR6iSKxWpq4Wlk/Sv9Ob6YCKByQTkV2y6BCic+fkabp9190hyrDdPA/dNrw==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.1.2.tgz", + "integrity": "sha512-caR62jNDUCU+qobStO6YJ05p9E+LR0EoXh1EEmyU69cYydsAy7drMcOlUlRtQihM6K6QfvNwJuLhsHcCzNpqtA==", "cpu": [ "x64" ], @@ -530,9 +523,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.0.3.tgz", - "integrity": "sha512-T5+gg2EwpsY3OoaLxUIofmMb7ohAUlcNZW0fPQ6YAutaWJaxt1Z1h+8zdl4FRIOr5ABAAhXtBcpkZNwUcKI2fw==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.1.2.tgz", + "integrity": "sha512-fHHXBusURjBmN6VBUtu6/5s7cCeEkuGAb/ZZiGHBLVBXMBy4D5QpM8P33Or8JD1nlOjm/ZT9sEE5HouQ0F+hUA==", "cpu": [ "arm64" ], @@ -545,9 +538,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.0.3.tgz", - "integrity": "sha512-WkAk6R60mwDjH4lG/JBpb2xHl2/0Vj0ZRu1TIzWuOYfQ9tt9NFsIinI1Epma77JVgy81F32X/AeD+B2cBu/YQA==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.1.2.tgz", + "integrity": "sha512-9CF1Pnivij7+M3G74lxr+e9h6o2YNIe7QtExWq1KUK4hsOLTBv6FJikEwCaC3NeYTflzrm69E5UfwEAbV2U9/g==", "cpu": [ "arm64" ], @@ -560,9 +553,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.0.3.tgz", - "integrity": "sha512-gWL/Cta1aPVqIGgDb6nxkqy06DkwJ9gAnKORdHWX1QBbSZZB+biFYPFti8aKIQL7otCE1pjyPaXpFzGeG2OS2w==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.1.2.tgz", + "integrity": "sha512-tINV7WmcTUf4oM/eN3Yuu/f8jQ5C6AkueZPKeALs/qfdfX57eNv4Ij7rt0SA6iZ8+fMobVfcFVv664Op0caCCg==", "cpu": [ "x64" ], @@ -575,9 +568,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.0.3.tgz", - "integrity": "sha512-QQEMwFd8r7C0GxQS62Zcdy6GKx999I/rTO2ubdXEe+MlZk9ZiinsrjwoiBL5/57tfyjikgh6GOU2WRQVUej3UA==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.1.2.tgz", + "integrity": "sha512-jf2IseC4WRsGkzeUw/cK3wci9pxR53GlLAt30+y+B+2qAQxMw6WAC3QrANIKxkcoPU3JFh/10uFfmoMDF9JXKg==", "cpu": [ "x64" ], @@ -590,9 +583,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.0.3.tgz", - "integrity": "sha512-9TEp47AAd/ms9fPNgtgnT7F3M1Hf7koIYYWCMQ9neOwjbVWJsHZxrFbI3iEDJ8rf1TDGpmHbKxXf2IFpAvheIQ==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.1.2.tgz", + "integrity": "sha512-wvg7MlfnaociP7k8lxLX4s2iBJm4BrNiNFhVUY+Yur5yhAJHfkS8qPPeDEUH8rQiY0PX3u/P7Q/wcg6Mv6GSAA==", "cpu": [ "arm64" ], @@ -605,9 +598,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.0.3.tgz", - "integrity": "sha512-VNAz+HN4OGgvZs6MOoVfnn41kBzT+M+tB+OK4cww6DNyWS6wKaDpaAm/qLeOUbnMh0oVx1+mg0uoYARF69dJyA==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.1.2.tgz", + "integrity": "sha512-D3cNA8NoT3aWISWmo7HF5Eyko/0OdOO+VagkoJuiTk7pyX3P/b+n8XA/MYvyR+xSVcbKn68B1rY9fgqjNISqzQ==", "cpu": [ "x64" ], @@ -695,7 +688,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz", "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==", - "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0" }, @@ -761,7 +753,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz", "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==", - "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-context": "1.1.0", @@ -862,6 +853,30 @@ } } }, + "node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-direction": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", @@ -881,7 +896,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", - "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", @@ -964,7 +978,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz", "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==", - "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-primitive": "2.0.0", @@ -1100,11 +1113,34 @@ } } }, + "node_modules/@radix-ui/react-menu/node_modules/react-remove-scroll": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-popper": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==", - "license": "MIT", "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.0", @@ -1136,7 +1172,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", - "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-use-layout-effect": "1.1.0" @@ -1160,7 +1195,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", - "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-use-layout-effect": "1.1.0" @@ -1184,7 +1218,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", - "license": "MIT", "dependencies": { "@radix-ui/react-slot": "1.1.0" }, @@ -1312,6 +1345,30 @@ } } }, + "node_modules/@radix-ui/react-select/node_modules/react-remove-scroll": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", @@ -1463,7 +1520,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", - "license": "MIT", "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.0" }, @@ -1511,7 +1567,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz", "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==", - "license": "MIT", "dependencies": { "@radix-ui/rect": "1.1.0" }, @@ -1547,7 +1602,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz", "integrity": "sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==", - "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0" }, @@ -1569,8 +1623,7 @@ "node_modules/@radix-ui/rect": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", - "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==", - "license": "MIT" + "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==" }, "node_modules/@rtsao/scc": { "version": "1.1.0", @@ -1592,11 +1645,11 @@ "license": "Apache-2.0" }, "node_modules/@swc/helpers": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz", - "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==", + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", "dependencies": { - "tslib": "^2.4.0" + "tslib": "^2.8.0" } }, "node_modules/@types/cytoscape": { @@ -1652,21 +1705,12 @@ "undici-types": "~6.20.0" } }, - "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "devOptional": true, - "license": "MIT" - }, "node_modules/@types/react": { - "version": "18.3.12", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", - "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.2.tgz", + "integrity": "sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg==", "devOptional": true, - "license": "MIT", "dependencies": { - "@types/prop-types": "*", "csstype": "^3.0.2" } }, @@ -1681,12 +1725,12 @@ } }, "node_modules/@types/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.2.tgz", + "integrity": "sha512-c1s+7TKFaDRRxr1TxccIX2u7sfCnc3RxkVyBIUA2lCpyqCF+QoAwQ/CBg7bsMdVwP120HEH143VQezKtef5nCg==", "devOptional": true, - "dependencies": { - "@types/react": "*" + "peerDependencies": { + "@types/react": "^19.0.0" } }, "node_modules/@types/react-syntax-highlighter": { @@ -2854,8 +2898,7 @@ "node_modules/detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", - "license": "MIT" + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" }, "node_modules/didyoumean": { "version": "1.2.2", @@ -3177,13 +3220,12 @@ } }, "node_modules/eslint-config-next": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.1.0.tgz", - "integrity": "sha512-gADO+nKVseGso3DtOrYX9H7TxB/MuX7AUYhMlvQMqLYvUWu4HrOQuU7cC1HW74tHIqkAvXdwgAz3TCbczzSEXw==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.1.2.tgz", + "integrity": "sha512-PrMm1/4zWSJ689wd/ypWIR5ZF1uvmp3EkgpgBV1Yu6PhEobBjXMGgT8bVNelwl17LXojO8D5ePFRiI4qXjsPRA==", "dev": true, - "license": "MIT", "dependencies": { - "@next/eslint-plugin-next": "15.1.0", + "@next/eslint-plugin-next": "15.1.2", "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", @@ -3808,7 +3850,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", - "license": "MIT", "engines": { "node": ">=6" } @@ -4144,15 +4185,6 @@ "node": ">= 0.4" } }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, "node_modules/is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", @@ -4937,13 +4969,13 @@ "license": "MIT" }, "node_modules/next": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/next/-/next-15.0.3.tgz", - "integrity": "sha512-ontCbCRKJUIoivAdGB34yCaOcPgYXr9AAkV/IwqFfWWTXEPUgLYkSkqBhIk9KK7gGmgjc64B+RdoeIDM13Irnw==", + "version": "15.1.2", + "resolved": "https://registry.npmjs.org/next/-/next-15.1.2.tgz", + "integrity": "sha512-nLJDV7peNy+0oHlmY2JZjzMfJ8Aj0/dd3jCwSZS8ZiO5nkQfcZRqDrRN3U5rJtqVTQneIOGZzb6LCNrk7trMCQ==", "dependencies": { - "@next/env": "15.0.3", + "@next/env": "15.1.2", "@swc/counter": "0.1.3", - "@swc/helpers": "0.5.13", + "@swc/helpers": "0.5.15", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", @@ -4956,22 +4988,22 @@ "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "15.0.3", - "@next/swc-darwin-x64": "15.0.3", - "@next/swc-linux-arm64-gnu": "15.0.3", - "@next/swc-linux-arm64-musl": "15.0.3", - "@next/swc-linux-x64-gnu": "15.0.3", - "@next/swc-linux-x64-musl": "15.0.3", - "@next/swc-win32-arm64-msvc": "15.0.3", - "@next/swc-win32-x64-msvc": "15.0.3", + "@next/swc-darwin-arm64": "15.1.2", + "@next/swc-darwin-x64": "15.1.2", + "@next/swc-linux-arm64-gnu": "15.1.2", + "@next/swc-linux-arm64-musl": "15.1.2", + "@next/swc-linux-x64-gnu": "15.1.2", + "@next/swc-linux-x64-musl": "15.1.2", + "@next/swc-win32-arm64-msvc": "15.1.2", + "@next/swc-win32-x64-msvc": "15.1.2", "sharp": "^0.33.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.41.2", "babel-plugin-react-compiler": "*", - "react": "^18.2.0 || 19.0.0-rc-66855b96-20241106", - "react-dom": "^18.2.0 || 19.0.0-rc-66855b96-20241106", + "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "peerDependenciesMeta": { @@ -5576,13 +5608,9 @@ "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==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", + "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", "engines": { "node": ">=0.10.0" } @@ -5613,16 +5641,14 @@ } }, "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==", - "license": "MIT", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz", + "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==", "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" + "scheduler": "^0.25.0" }, "peerDependencies": { - "react": "^18.3.1" + "react": "^19.0.0" } }, "node_modules/react-is": { @@ -5631,45 +5657,20 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "license": "MIT" }, - "node_modules/react-remove-scroll": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", - "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", - "dependencies": { - "react-remove-scroll-bar": "^2.3.6", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/react-remove-scroll-bar": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", - "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", - "license": "MIT", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", "dependencies": { - "react-style-singleton": "^2.2.1", + "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -5688,21 +5689,19 @@ } }, "node_modules/react-style-singleton": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", - "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", - "license": "MIT", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", "dependencies": { "get-nonce": "^1.0.0", - "invariant": "^2.2.4", "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -5943,13 +5942,9 @@ } }, "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.25.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", + "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==" }, "node_modules/semver": { "version": "7.6.3", @@ -6714,10 +6709,9 @@ } }, "node_modules/use-callback-ref": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", - "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", - "license": "MIT", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", "dependencies": { "tslib": "^2.0.0" }, @@ -6725,8 +6719,8 @@ "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -6735,10 +6729,9 @@ } }, "node_modules/use-sidecar": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", - "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", - "license": "MIT", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" @@ -6747,8 +6740,8 @@ "node": ">=10" }, "peerDependencies": { - "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { diff --git a/package.json b/package.json index 364999ec..b081fd9c 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next dev", + "dev": "next dev --turbopack", "build": "next build", "start": "next start", "lint": "next lint" @@ -24,13 +24,13 @@ "cytoscape": "^3.30.4", "cytoscape-fcose": "^2.2.0", "lucide-react": "^0.441.0", - "next": "15.0.3", + "next": "15.1.2", "playwright": "^1.49.1", "playwright-core": "^1.49.1", - "react": "^18", + "react": "19.0.0", "react-cytoscape": "^1.0.6", "react-cytoscapejs": "^2.0.0", - "react-dom": "^18", + "react-dom": "19.0.0", "react-resizable-panels": "^2.0.20", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", @@ -42,13 +42,17 @@ "@types/cytoscape": "^3.21.8", "@types/cytoscape-fcose": "^2.2.4", "@types/node": "^22.10.2", - "@types/react": "^18", + "@types/react": "19.0.2", "@types/react-cytoscapejs": "^1.2.5", - "@types/react-dom": "^18", + "@types/react-dom": "19.0.2", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", - "eslint-config-next": "15.1.0", + "eslint-config-next": "15.1.2", "tailwindcss": "^3.4.3", "typescript": "^5" + }, + "overrides": { + "@types/react": "19.0.2", + "@types/react-dom": "19.0.2" } } From 028b0dbb535f5fb44cc96268b6b253c45a11e2e8 Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Sun, 22 Dec 2024 13:53:53 +0200 Subject: [PATCH 52/60] Reapply "commit" This reverts commit 87c6b17c584ea3491b06126764e5d255865292e4. --- app/components/chat.tsx | 2 +- app/components/toolbar.tsx | 2 +- package-lock.json | 381 +++++++++++++++++++------------------ package.json | 18 +- 4 files changed, 203 insertions(+), 200 deletions(-) diff --git a/app/components/chat.tsx b/app/components/chat.tsx index 0aa18330..8a779f95 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -122,7 +122,7 @@ export function Chat({ repo, path, setPath, graph, chartRef, selectedPathId, isP const [sugOpen, setSugOpen] = useState(false); // A reference to the chat container to allow scrolling to the bottom - const containerRef: React.RefObject = useRef(null); + const containerRef: React.RefObject = useRef(null); const isSendMessage = messages.some(m => m.type === MessageTypes.Pending) || (messages.some(m => m.text === "Please select a starting point and the end point. Select or press relevant item on the graph") && !messages.some(m => m.type === MessageTypes.Path)) diff --git a/app/components/toolbar.tsx b/app/components/toolbar.tsx index f57e26f8..00264fb8 100644 --- a/app/components/toolbar.tsx +++ b/app/components/toolbar.tsx @@ -4,7 +4,7 @@ import { Dispatch, RefObject, SetStateAction } from "react"; import { Node } from "./model"; interface Props { - chartRef: RefObject + chartRef: RefObject setSelectedObj: Dispatch> className?: string } diff --git a/package-lock.json b/package-lock.json index 5efd9c3c..3a5e58ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,13 +23,13 @@ "cytoscape": "^3.30.4", "cytoscape-fcose": "^2.2.0", "lucide-react": "^0.441.0", - "next": "15.1.2", + "next": "15.0.3", "playwright": "^1.49.1", "playwright-core": "^1.49.1", - "react": "19.0.0", + "react": "^18", "react-cytoscape": "^1.0.6", "react-cytoscapejs": "^2.0.0", - "react-dom": "19.0.0", + "react-dom": "^18", "react-resizable-panels": "^2.0.20", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", @@ -41,12 +41,12 @@ "@types/cytoscape": "^3.21.8", "@types/cytoscape-fcose": "^2.2.4", "@types/node": "^22.10.2", - "@types/react": "19.0.2", + "@types/react": "^18", "@types/react-cytoscapejs": "^1.2.5", - "@types/react-dom": "19.0.2", + "@types/react-dom": "^18", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", - "eslint-config-next": "15.1.2", + "eslint-config-next": "15.1.0", "tailwindcss": "^3.4.3", "typescript": "^5" } @@ -183,26 +183,29 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", - "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.7.tgz", + "integrity": "sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==", + "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.8" + "@floating-ui/utils": "^0.2.7" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.12", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz", - "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==", + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.10.tgz", + "integrity": "sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==", + "license": "MIT", "dependencies": { "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.8" + "@floating-ui/utils": "^0.2.7" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", - "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz", + "integrity": "sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==", + "license": "MIT", "dependencies": { "@floating-ui/dom": "^1.0.0" }, @@ -212,9 +215,10 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", - "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==" + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.7.tgz", + "integrity": "sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==", + "license": "MIT" }, "node_modules/@humanfs/core": { "version": "0.19.1", @@ -451,15 +455,16 @@ } }, "node_modules/@next/env": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.1.2.tgz", - "integrity": "sha512-Hm3jIGsoUl6RLB1vzY+dZeqb+/kWPZ+h34yiWxW0dV87l8Im/eMOwpOA+a0L78U0HM04syEjXuRlCozqpwuojQ==" + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.0.3.tgz", + "integrity": "sha512-t9Xy32pjNOvVn2AS+Utt6VmyrshbpfUMhIjFO60gI58deSo/KgLOp31XZ4O+kY/Is8WAGYwA5gR7kOb1eORDBA==" }, "node_modules/@next/eslint-plugin-next": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.2.tgz", - "integrity": "sha512-sgfw3+WdaYOGPKCvM1L+UucBmRfh8V2Ygefp7ELON0+0vY7uohQwXXnVWg3rY7mXDKharQR3o7uedpfvnU2hlQ==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.1.0.tgz", + "integrity": "sha512-+jPT0h+nelBT6HC9ZCHGc7DgGVy04cv4shYdAe6tKlEbjQUtwU3LzQhzbDHQyY2m6g39m6B0kOFVuLGBrxxbGg==", "dev": true, + "license": "MIT", "dependencies": { "fast-glob": "3.3.1" } @@ -469,6 +474,7 @@ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -485,6 +491,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -493,9 +500,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.1.2.tgz", - "integrity": "sha512-b9TN7q+j5/7+rGLhFAVZiKJGIASuo8tWvInGfAd8wsULjB1uNGRCj1z1WZwwPWzVQbIKWFYqc+9L7W09qwt52w==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.0.3.tgz", + "integrity": "sha512-s3Q/NOorCsLYdCKvQlWU+a+GeAd3C8Rb3L1YnetsgwXzhc3UTWrtQpB/3eCjFOdGUj5QmXfRak12uocd1ZiiQw==", "cpu": [ "arm64" ], @@ -508,9 +515,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.1.2.tgz", - "integrity": "sha512-caR62jNDUCU+qobStO6YJ05p9E+LR0EoXh1EEmyU69cYydsAy7drMcOlUlRtQihM6K6QfvNwJuLhsHcCzNpqtA==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.0.3.tgz", + "integrity": "sha512-Zxl/TwyXVZPCFSf0u2BNj5sE0F2uR6iSKxWpq4Wlk/Sv9Ob6YCKByQTkV2y6BCic+fkabp9190hyrDdPA/dNrw==", "cpu": [ "x64" ], @@ -523,9 +530,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.1.2.tgz", - "integrity": "sha512-fHHXBusURjBmN6VBUtu6/5s7cCeEkuGAb/ZZiGHBLVBXMBy4D5QpM8P33Or8JD1nlOjm/ZT9sEE5HouQ0F+hUA==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.0.3.tgz", + "integrity": "sha512-T5+gg2EwpsY3OoaLxUIofmMb7ohAUlcNZW0fPQ6YAutaWJaxt1Z1h+8zdl4FRIOr5ABAAhXtBcpkZNwUcKI2fw==", "cpu": [ "arm64" ], @@ -538,9 +545,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.1.2.tgz", - "integrity": "sha512-9CF1Pnivij7+M3G74lxr+e9h6o2YNIe7QtExWq1KUK4hsOLTBv6FJikEwCaC3NeYTflzrm69E5UfwEAbV2U9/g==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.0.3.tgz", + "integrity": "sha512-WkAk6R60mwDjH4lG/JBpb2xHl2/0Vj0ZRu1TIzWuOYfQ9tt9NFsIinI1Epma77JVgy81F32X/AeD+B2cBu/YQA==", "cpu": [ "arm64" ], @@ -553,9 +560,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.1.2.tgz", - "integrity": "sha512-tINV7WmcTUf4oM/eN3Yuu/f8jQ5C6AkueZPKeALs/qfdfX57eNv4Ij7rt0SA6iZ8+fMobVfcFVv664Op0caCCg==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.0.3.tgz", + "integrity": "sha512-gWL/Cta1aPVqIGgDb6nxkqy06DkwJ9gAnKORdHWX1QBbSZZB+biFYPFti8aKIQL7otCE1pjyPaXpFzGeG2OS2w==", "cpu": [ "x64" ], @@ -568,9 +575,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.1.2.tgz", - "integrity": "sha512-jf2IseC4WRsGkzeUw/cK3wci9pxR53GlLAt30+y+B+2qAQxMw6WAC3QrANIKxkcoPU3JFh/10uFfmoMDF9JXKg==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.0.3.tgz", + "integrity": "sha512-QQEMwFd8r7C0GxQS62Zcdy6GKx999I/rTO2ubdXEe+MlZk9ZiinsrjwoiBL5/57tfyjikgh6GOU2WRQVUej3UA==", "cpu": [ "x64" ], @@ -583,9 +590,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.1.2.tgz", - "integrity": "sha512-wvg7MlfnaociP7k8lxLX4s2iBJm4BrNiNFhVUY+Yur5yhAJHfkS8qPPeDEUH8rQiY0PX3u/P7Q/wcg6Mv6GSAA==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.0.3.tgz", + "integrity": "sha512-9TEp47AAd/ms9fPNgtgnT7F3M1Hf7koIYYWCMQ9neOwjbVWJsHZxrFbI3iEDJ8rf1TDGpmHbKxXf2IFpAvheIQ==", "cpu": [ "arm64" ], @@ -598,9 +605,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.1.2.tgz", - "integrity": "sha512-D3cNA8NoT3aWISWmo7HF5Eyko/0OdOO+VagkoJuiTk7pyX3P/b+n8XA/MYvyR+xSVcbKn68B1rY9fgqjNISqzQ==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.0.3.tgz", + "integrity": "sha512-VNAz+HN4OGgvZs6MOoVfnn41kBzT+M+tB+OK4cww6DNyWS6wKaDpaAm/qLeOUbnMh0oVx1+mg0uoYARF69dJyA==", "cpu": [ "x64" ], @@ -688,6 +695,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz", "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==", + "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0" }, @@ -753,6 +761,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz", "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==", + "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-context": "1.1.0", @@ -853,30 +862,6 @@ } } }, - "node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", - "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", - "dependencies": { - "react-remove-scroll-bar": "^2.3.6", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-direction": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", @@ -896,6 +881,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", + "license": "MIT", "dependencies": { "@radix-ui/primitive": "1.1.0", "@radix-ui/react-compose-refs": "1.1.0", @@ -978,6 +964,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz", "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==", + "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-primitive": "2.0.0", @@ -1113,34 +1100,11 @@ } } }, - "node_modules/@radix-ui/react-menu/node_modules/react-remove-scroll": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", - "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", - "dependencies": { - "react-remove-scroll-bar": "^2.3.6", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-popper": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==", + "license": "MIT", "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.0", @@ -1172,6 +1136,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", + "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-use-layout-effect": "1.1.0" @@ -1195,6 +1160,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", + "license": "MIT", "dependencies": { "@radix-ui/react-compose-refs": "1.1.0", "@radix-ui/react-use-layout-effect": "1.1.0" @@ -1218,6 +1184,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", + "license": "MIT", "dependencies": { "@radix-ui/react-slot": "1.1.0" }, @@ -1345,30 +1312,6 @@ } } }, - "node_modules/@radix-ui/react-select/node_modules/react-remove-scroll": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", - "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", - "dependencies": { - "react-remove-scroll-bar": "^2.3.6", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", @@ -1520,6 +1463,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", + "license": "MIT", "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.0" }, @@ -1567,6 +1511,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz", "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==", + "license": "MIT", "dependencies": { "@radix-ui/rect": "1.1.0" }, @@ -1602,6 +1547,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz", "integrity": "sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==", + "license": "MIT", "dependencies": { "@radix-ui/react-primitive": "2.0.0" }, @@ -1623,7 +1569,8 @@ "node_modules/@radix-ui/rect": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", - "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==" + "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==", + "license": "MIT" }, "node_modules/@rtsao/scc": { "version": "1.1.0", @@ -1645,11 +1592,11 @@ "license": "Apache-2.0" }, "node_modules/@swc/helpers": { - "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", - "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz", + "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==", "dependencies": { - "tslib": "^2.8.0" + "tslib": "^2.4.0" } }, "node_modules/@types/cytoscape": { @@ -1705,12 +1652,21 @@ "undici-types": "~6.20.0" } }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "devOptional": true, + "license": "MIT" + }, "node_modules/@types/react": { - "version": "19.0.2", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.0.2.tgz", - "integrity": "sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg==", + "version": "18.3.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", + "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", "devOptional": true, + "license": "MIT", "dependencies": { + "@types/prop-types": "*", "csstype": "^3.0.2" } }, @@ -1725,12 +1681,12 @@ } }, "node_modules/@types/react-dom": { - "version": "19.0.2", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.2.tgz", - "integrity": "sha512-c1s+7TKFaDRRxr1TxccIX2u7sfCnc3RxkVyBIUA2lCpyqCF+QoAwQ/CBg7bsMdVwP120HEH143VQezKtef5nCg==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", "devOptional": true, - "peerDependencies": { - "@types/react": "^19.0.0" + "dependencies": { + "@types/react": "*" } }, "node_modules/@types/react-syntax-highlighter": { @@ -2898,7 +2854,8 @@ "node_modules/detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" }, "node_modules/didyoumean": { "version": "1.2.2", @@ -3220,12 +3177,13 @@ } }, "node_modules/eslint-config-next": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.1.2.tgz", - "integrity": "sha512-PrMm1/4zWSJ689wd/ypWIR5ZF1uvmp3EkgpgBV1Yu6PhEobBjXMGgT8bVNelwl17LXojO8D5ePFRiI4qXjsPRA==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.1.0.tgz", + "integrity": "sha512-gADO+nKVseGso3DtOrYX9H7TxB/MuX7AUYhMlvQMqLYvUWu4HrOQuU7cC1HW74tHIqkAvXdwgAz3TCbczzSEXw==", "dev": true, + "license": "MIT", "dependencies": { - "@next/eslint-plugin-next": "15.1.2", + "@next/eslint-plugin-next": "15.1.0", "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", @@ -3850,6 +3808,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", "engines": { "node": ">=6" } @@ -4185,6 +4144,15 @@ "node": ">= 0.4" } }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", @@ -4969,13 +4937,13 @@ "license": "MIT" }, "node_modules/next": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/next/-/next-15.1.2.tgz", - "integrity": "sha512-nLJDV7peNy+0oHlmY2JZjzMfJ8Aj0/dd3jCwSZS8ZiO5nkQfcZRqDrRN3U5rJtqVTQneIOGZzb6LCNrk7trMCQ==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/next/-/next-15.0.3.tgz", + "integrity": "sha512-ontCbCRKJUIoivAdGB34yCaOcPgYXr9AAkV/IwqFfWWTXEPUgLYkSkqBhIk9KK7gGmgjc64B+RdoeIDM13Irnw==", "dependencies": { - "@next/env": "15.1.2", + "@next/env": "15.0.3", "@swc/counter": "0.1.3", - "@swc/helpers": "0.5.15", + "@swc/helpers": "0.5.13", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", @@ -4988,22 +4956,22 @@ "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "15.1.2", - "@next/swc-darwin-x64": "15.1.2", - "@next/swc-linux-arm64-gnu": "15.1.2", - "@next/swc-linux-arm64-musl": "15.1.2", - "@next/swc-linux-x64-gnu": "15.1.2", - "@next/swc-linux-x64-musl": "15.1.2", - "@next/swc-win32-arm64-msvc": "15.1.2", - "@next/swc-win32-x64-msvc": "15.1.2", + "@next/swc-darwin-arm64": "15.0.3", + "@next/swc-darwin-x64": "15.0.3", + "@next/swc-linux-arm64-gnu": "15.0.3", + "@next/swc-linux-arm64-musl": "15.0.3", + "@next/swc-linux-x64-gnu": "15.0.3", + "@next/swc-linux-x64-musl": "15.0.3", + "@next/swc-win32-arm64-msvc": "15.0.3", + "@next/swc-win32-x64-msvc": "15.0.3", "sharp": "^0.33.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.41.2", "babel-plugin-react-compiler": "*", - "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", - "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react": "^18.2.0 || 19.0.0-rc-66855b96-20241106", + "react-dom": "^18.2.0 || 19.0.0-rc-66855b96-20241106", "sass": "^1.3.0" }, "peerDependenciesMeta": { @@ -5608,9 +5576,13 @@ "license": "MIT" }, "node_modules/react": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", - "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", + "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==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, "engines": { "node": ">=0.10.0" } @@ -5641,14 +5613,16 @@ } }, "node_modules/react-dom": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz", - "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", "dependencies": { - "scheduler": "^0.25.0" + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" }, "peerDependencies": { - "react": "^19.0.0" + "react": "^18.3.1" } }, "node_modules/react-is": { @@ -5657,20 +5631,45 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "license": "MIT" }, + "node_modules/react-remove-scroll": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/react-remove-scroll-bar": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", - "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", + "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", + "license": "MIT", "dependencies": { - "react-style-singleton": "^2.2.2", + "react-style-singleton": "^2.2.1", "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -5689,19 +5688,21 @@ } }, "node_modules/react-style-singleton": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", - "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "license": "MIT", "dependencies": { "get-nonce": "^1.0.0", + "invariant": "^2.2.4", "tslib": "^2.0.0" }, "engines": { "node": ">=10" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -5942,9 +5943,13 @@ } }, "node_modules/scheduler": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", - "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==" + "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" + } }, "node_modules/semver": { "version": "7.6.3", @@ -6709,9 +6714,10 @@ } }, "node_modules/use-callback-ref": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", - "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", + "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", + "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, @@ -6719,8 +6725,8 @@ "node": ">=10" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -6729,9 +6735,10 @@ } }, "node_modules/use-sidecar": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", - "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "license": "MIT", "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" @@ -6740,8 +6747,8 @@ "node": ">=10" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { diff --git a/package.json b/package.json index b081fd9c..364999ec 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next dev --turbopack", + "dev": "next dev", "build": "next build", "start": "next start", "lint": "next lint" @@ -24,13 +24,13 @@ "cytoscape": "^3.30.4", "cytoscape-fcose": "^2.2.0", "lucide-react": "^0.441.0", - "next": "15.1.2", + "next": "15.0.3", "playwright": "^1.49.1", "playwright-core": "^1.49.1", - "react": "19.0.0", + "react": "^18", "react-cytoscape": "^1.0.6", "react-cytoscapejs": "^2.0.0", - "react-dom": "19.0.0", + "react-dom": "^18", "react-resizable-panels": "^2.0.20", "react-syntax-highlighter": "^15.6.1", "react-type-animation": "^3.2.0", @@ -42,17 +42,13 @@ "@types/cytoscape": "^3.21.8", "@types/cytoscape-fcose": "^2.2.4", "@types/node": "^22.10.2", - "@types/react": "19.0.2", + "@types/react": "^18", "@types/react-cytoscapejs": "^1.2.5", - "@types/react-dom": "19.0.2", + "@types/react-dom": "^18", "@types/react-syntax-highlighter": "^15.5.13", "eslint": "^9", - "eslint-config-next": "15.1.2", + "eslint-config-next": "15.1.0", "tailwindcss": "^3.4.3", "typescript": "^5" - }, - "overrides": { - "@types/react": "19.0.2", - "@types/react-dom": "19.0.2" } } From dc1aba81b47e016bffec824fd024c0424dea7d32 Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Sun, 22 Dec 2024 14:11:16 +0200 Subject: [PATCH 53/60] improve link visual --- app/components/graphView.tsx | 112 +++++++++++++++++------------------ app/components/model.ts | 2 + 2 files changed, 58 insertions(+), 56 deletions(-) diff --git a/app/components/graphView.tsx b/app/components/graphView.tsx index e2ed0a3c..fedb218c 100644 --- a/app/components/graphView.tsx +++ b/app/components/graphView.tsx @@ -139,12 +139,15 @@ export default function GraphView({ height={parentRef.current?.clientHeight || 0} width={parentRef.current?.clientWidth || 0} graphData={data} - nodeVisibility={"visibility"} - linkVisibility={"visibility"} - linkLabel={"label"} + nodeVisibility="visibility" + linkVisibility="visibility" + linkCurvature="curve" nodeRelSize={NODE_SIZE} - nodeCanvasObjectMode={() => 'replace'} - linkCanvasObjectMode={() => 'replace'} + linkLineDash={(link) => (link.isPath && !link.isPathSelected) ? [5, 5] : []} + linkColor={(link) => (link.isPath || link.isPathSelected) ? "#FF66B3" : link.color} + linkWidth={(link) => (link.id === selectedObj?.id || link.isPathSelected) ? 1 : 0.5} + nodeCanvasObjectMode={() => 'after'} + linkCanvasObjectMode={() => 'after'} nodeCanvasObject={(node, ctx) => { if (!node.x || !node.y) return @@ -209,67 +212,64 @@ export default function GraphView({ ctx.fillText(name, node.x, node.y); }} linkCanvasObject={(link, ctx) => { - if (!link.source.x || !link.source.y || !link.target.x || !link.target.y) return + const start = link.source; + const end = link.target; - //give path links a different color - if (isPathResponse || isPathResponse === undefined) { - if (link.isPathSelected) { - ctx.strokeStyle = '#FF66B3'; - ctx.lineWidth = 1 - ctx.setLineDash([]); - } else if (link.isPath) { - ctx.strokeStyle = '#FF66B3'; - ctx.lineWidth = 0.5 - ctx.setLineDash([5, 5]); + if (!start.x || !start.y || !end.x || !end.y) return + + const sameNodesLinks = graph.Elements.links.filter(l => (l.source.id === start.id && l.target.id === end.id) || (l.target.id === start.id && l.source.id === end.id)) + const index = sameNodesLinks.findIndex(l => l.id === link.id) || 0 + const even = index % 2 === 0 + let curve + + if (start.id === end.id) { + if (even) { + curve = Math.floor(-(index / 2)) - 3 } else { - ctx.strokeStyle = 'gray'; - ctx.lineWidth = 0.5 - ctx.setLineDash([]); + curve = Math.floor((index + 1) / 2) + 2 } - } else { - ctx.strokeStyle = 'gray'; - ctx.lineWidth = 0.5 - ctx.setLineDash([]); - } - ctx.beginPath(); + link.curve = curve * 0.1 + + const radius = NODE_SIZE * link.curve * 6.2; + const angleOffset = -Math.PI / 4; // 45 degrees offset for text alignment + const textX = start.x + radius * Math.cos(angleOffset); + const textY = start.y + radius * Math.sin(angleOffset); - if (link.source.id === link.target.id) { - // handel self closing link - ctx.lineWidth = ctx.lineWidth * 2 - ctx.moveTo(link.source.x, link.source.y); - ctx.arcTo(link.target.x + 20, link.target.y + 35, link.target.x - 20, link.target.y + 20, 10); - ctx.arcTo(link.target.x - 20, link.target.y + 20, link.target.x, link.target.y, 10); - ctx.closePath(); + ctx.save(); + ctx.translate(textX, textY); + ctx.rotate(-angleOffset); } else { - // handel multiple links between same nodes - const sameNodeLinks = data.links.filter(l => - ((l.source.id === link.source.id && l.target.id === link.target.id) || - (l.source.id === link.target.id && l.target.id === link.source.id)) - && l.id !== link.id - ); - - const linkIndex = sameNodeLinks.findIndex(l => l.id === link.id); - const offset = linkIndex === -1 ? 0 : (linkIndex) * 5; - - // add link - ctx.moveTo(link.source.x, link.source.y); - ctx.lineTo(link.target.x + offset, link.target.y + offset); - } - ctx.stroke(); + if (even) { + curve = Math.floor(-(index / 2)) + } else { + curve = Math.floor((index + 1) / 2) + } - // add label box - const midX = (link.source.x + link.target.x) / 2; - const midY = (link.source.y + link.target.y) / 2; - ctx.fillStyle = 'white'; - ctx.fill(); - const labelWidth = ctx.measureText(link.label).width - ctx.fillRect(midX - (labelWidth + 1) / 2, midY - 2.184, labelWidth + 1, 3.833); + link.curve = curve * 0.1 + + const midX = (start.x + end.x) / 2 + (end.y - start.y) * (link.curve / 2); + const midY = (start.y + end.y) / 2 + (start.x - end.x) * (link.curve / 2); + + let textAngle = Math.atan2(end.y - start.y, end.x - start.x) + + // maintain label vertical orientation for legibility + if (textAngle > Math.PI / 2) textAngle = -(Math.PI - textAngle); + if (textAngle < -Math.PI / 2) textAngle = -(-Math.PI - textAngle); + + ctx.save(); + ctx.translate(midX, midY); + ctx.rotate(textAngle); + } // add label + ctx.globalAlpha = 1; ctx.fillStyle = 'black'; - ctx.font = '4px Arial'; - ctx.fillText(link.label, midX, midY); + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + ctx.font = '2px Arial'; + ctx.fillText(link.label, 0, 0); + ctx.restore() }} onNodeClick={handelNodeClick} onNodeDragEnd={(n, translate) => setPosition(prev => { diff --git a/app/components/model.ts b/app/components/model.ts index 403eeccb..3758f0b4 100644 --- a/app/components/model.ts +++ b/app/components/model.ts @@ -34,6 +34,7 @@ export type Link = LinkObject @@ -188,6 +189,7 @@ export class Graph { collapsed, isPathSelected: false, isPath: !!path, + curve: 0 } this.linksMap.set(edgeData.id, link) this.elements.links.push(link) From ca995ff01c2dc0d41a231dd77bbe24c08e956a75 Mon Sep 17 00:00:00 2001 From: Anchel135 Date: Sun, 22 Dec 2024 14:19:05 +0200 Subject: [PATCH 54/60] update force graph --- app/components/code-graph.tsx | 10 +++++----- app/components/dataPanel.tsx | 2 +- app/components/graphView.tsx | 4 ++-- app/components/model.ts | 8 ++++---- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app/components/code-graph.tsx b/app/components/code-graph.tsx index 2031a872..83d27c88 100644 --- a/app/components/code-graph.tsx +++ b/app/components/code-graph.tsx @@ -156,7 +156,7 @@ export function CodeGraph({ graph.Elements.nodes.forEach(node => { if (!(node.category === name)) return - node.visibility = show + node.visible = show }) graph.visibleLinks(show) @@ -222,7 +222,7 @@ export function CodeGraph({ if (!chartNode) { chartNode = graph.extend({ nodes: [node], edges: [] }).nodes[0] } else { - chartNode.visibility = true + chartNode.visible = true setCooldownTicks(undefined) setCooldownTime(1000) } @@ -242,7 +242,7 @@ export function CodeGraph({ const handelRemove = (ids: number[]) => { graph.Elements.nodes.forEach(node => { if (!ids.includes(node.id)) return - node.visibility = false + node.visible = false }) graph.visibleLinks(false, ids) @@ -295,13 +295,13 @@ export function CodeGraph({ } { - (graph.Elements.nodes.some(e => !e.visibility)) && + (graph.Elements.nodes.some(e => !e.visible)) &&

9+1kSImt7)vpj|BWdLpP`h5#E%q& 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≺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�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�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