From e7644f4b3a885d0b45ef1076ba2126086c8c30ee Mon Sep 17 00:00:00 2001 From: Boris Date: Wed, 18 Jun 2025 20:56:44 +0200 Subject: [PATCH] feat: migrate new UI to cognee (#966) ## Description ## DCO Affirmation I affirm that all code in every commit of this pull request conforms to the terms of the Topoteretes Developer Certificate of Origin. --------- Co-authored-by: Igor Ilic --- cognee-frontend/.prettierignore | 3 + cognee-frontend/Dockerfile | 6 +- cognee-frontend/eslint.config.mjs | 16 + cognee-frontend/package-lock.json | 4757 +++++++++++------ cognee-frontend/package.json | 18 +- .../public/images/cognee-logo-with-text.png | Bin 0 -> 12419 bytes cognee-frontend/public/images/crewai.png | Bin 0 -> 14642 bytes cognee-frontend/public/images/deepnote.svg | 53 + cognee-frontend/public/images/lancedb.svg | 3 + cognee-frontend/public/images/neo4j.png | Bin 0 -> 12733 bytes .../src/app/(graph)/ActivityLog.tsx | 54 + .../src/app/(graph)/CogneeAddWidget.tsx | 126 +- .../src/app/(graph)/CrewAITrigger.tsx | 106 +- .../src/app/(graph)/GraphControls.tsx | 258 +- .../src/app/(graph)/GraphLegend.tsx | 25 + cognee-frontend/src/app/(graph)/GraphView.tsx | 291 +- .../src/app/(graph)/GraphVisualization.tsx | 226 + .../src/app/(graph)/getColorForNodeType.ts | 22 + cognee-frontend/src/app/auth/AuthForm.tsx | 82 + cognee-frontend/src/app/auth/AuthPage.tsx | 52 +- cognee-frontend/src/app/auth/layout.tsx | 31 + .../src/app/auth/login/LoginPage.tsx | 40 + cognee-frontend/src/app/auth/login/page.tsx | 1 + cognee-frontend/src/app/auth/page.tsx | 2 +- .../src/app/auth/signup/SignUpPage.tsx | 31 + cognee-frontend/src/app/auth/signup/page.tsx | 1 + cognee-frontend/src/app/auth/token/route.ts | 17 + cognee-frontend/src/app/layout.tsx | 4 +- cognee-frontend/src/app/page copy.tsx | 130 - cognee-frontend/src/app/page.tsx | 2 + .../src/app/wizard/AddStep/AddStep.module.css | 8 - .../src/app/wizard/AddStep/AddStep.tsx | 97 - .../src/app/wizard/AddStep/index.ts | 1 - .../app/wizard/CognifyStep/CognifyStep.tsx | 51 - .../src/app/wizard/CognifyStep/index.ts | 1 - .../wizard/ConfigStep/ConfigStep.module.css | 0 .../src/app/wizard/ConfigStep/ConfigStep.tsx | 22 - .../src/app/wizard/ConfigStep/index.ts | 1 - .../app/wizard/ExploreStep/ExploreStep.tsx | 14 - .../src/app/wizard/ExploreStep/index.ts | 1 - .../src/app/wizard/WizardPage.module.css | 13 - cognee-frontend/src/app/wizard/WizardPage.tsx | 83 - cognee-frontend/src/app/wizard/page.tsx | 18 - cognee-frontend/src/middleware.ts | 29 + cognee-frontend/src/modules/auth/auth0.ts | 8 + .../src/modules/chat/{ => api}/getHistory.ts | 4 +- .../src/modules/chat/hooks/useChat.ts | 123 + .../src/modules/datasets/cognifyDataset.ts | 85 +- .../src/modules/datasets/createDataset.ts | 12 + .../exploration/getExplorationGraphUrl.ts | 2 +- .../ingestion/DataView/DataView.module.css | 24 - .../modules/ingestion/DataView/DataView.tsx | 143 - .../DataView/RawDataPreview.module.css | 8 - .../ingestion/DataView/RawDataPreview.tsx | 37 - .../src/modules/ingestion/DataView/index.ts | 1 - .../DatasetsView/DatasetsView.module.css | 16 - .../ingestion/DatasetsView/DatasetsView.tsx | 106 - .../modules/ingestion/DatasetsView/index.ts | 1 - .../src/modules/ingestion/addData.ts | 12 +- .../src/modules/ingestion/useDatasets.ts | 14 +- cognee-frontend/src/ui/Icons/AddIcon.tsx | 7 + cognee-frontend/src/ui/Icons/CaretIcon.tsx | 8 + cognee-frontend/src/ui/Icons/SearchIcon.tsx | 9 + cognee-frontend/src/ui/Icons/index.ts | 3 + .../ui/Partials/Explorer/Explorer.module.css | 21 - .../src/ui/Partials/Explorer/Explorer.tsx | 61 - .../src/ui/Partials/FeedbackForm.tsx | 15 +- .../Partials/SearchView/SearchView.module.css | 30 +- .../src/ui/Partials/SearchView/SearchView.tsx | 264 +- .../ui/Partials/SettingsModal/Settings.tsx | 368 +- .../Partials/SettingsModal/SettingsModal.tsx | 18 +- .../src/ui/Partials/SignInForm/SignInForm.tsx | 6 +- .../WizardContent/WizardContent.module.css | 24 - .../Wizard/WizardContent/WizardContent.tsx | 6 - .../src/ui/Partials/Wizard/WizardHeading.tsx | 11 - .../src/ui/Partials/Wizard/index.ts | 2 - cognee-frontend/src/ui/Partials/index.ts | 4 +- cognee-frontend/src/ui/elements/CTAButton.tsx | 2 +- .../src/ui/elements/GhostButton.tsx | 8 + cognee-frontend/src/ui/elements/Input.tsx | 2 +- cognee-frontend/src/ui/elements/Modal.tsx | 12 + .../src/ui/elements/NeutralButton.tsx | 2 +- cognee-frontend/src/ui/elements/Select.tsx | 20 +- cognee-frontend/src/ui/elements/TextArea.tsx | 104 +- cognee-frontend/src/ui/elements/index.ts | 2 + cognee-frontend/src/utils/fetch.ts | 51 +- .../src/utils/handleServerErrors.ts | 20 +- cognee-frontend/src/utils/useBoolean.ts | 6 +- cognee-frontend/types/d3-force-3d.d.ts | 41 + cognee/api/client.py | 2 +- cognee/api/v1/add/routers/get_add_router.py | 4 +- .../v1/cognify/routers/get_cognify_router.py | 104 +- .../datasets/routers/get_datasets_router.py | 112 +- cognee/api/v1/delete/exceptions.py | 12 + .../v1/delete/routers/get_delete_router.py | 2 +- .../v1/search/routers/get_search_router.py | 9 +- .../settings/routers/get_settings_router.py | 4 +- .../api/v1/users/routers/get_auth_router.py | 4 +- .../v1/users/routers/get_visualize_router.py | 2 +- .../databases/graph/kuzu/adapter.py | 9 +- cognee/modules/graph/methods/__init__.py | 1 + .../graph/methods/get_formatted_graph_data.py | 41 + cognee/modules/pipelines/methods/__init__.py | 1 + .../pipelines/methods/get_pipeline_run.py | 15 + .../modules/pipelines/operations/run_tasks.py | 2 +- cognee/modules/search/methods/search.py | 8 +- .../modules/search/operations/get_history.py | 5 +- .../authentication/api_bearer/__init__.py | 2 + .../api_bearer/api_bearer_transport.py | 7 + .../api_bearer/api_jwt_strategy.py | 5 + .../users/authentication/default/__init__.py | 2 + .../default/default_jwt_strategy.py | 23 + .../default/default_transport.py | 12 + .../authentication/get_api_auth_backend.py | 28 + .../users/authentication/get_auth_backend.py | 41 - .../authentication/get_client_auth_backend.py | 30 + cognee/modules/users/get_fastapi_users.py | 11 +- cognee/modules/users/get_user_manager.py | 51 +- cognee/modules/users/methods/__init__.py | 1 + .../users/methods/get_authenticated_user.py | 67 +- .../users/methods/get_user_by_email.py | 21 + cognee/modules/users/models/User.py | 8 +- .../documents/check_permissions_on_dataset.py | 1 + cognee/tasks/ingestion/ingest_data.py | 4 + entrypoint.sh | 2 +- notebooks/cognee_demo.ipynb | 542 +- notebooks/cognee_simple_demo.ipynb | 462 +- notebooks/node_scores.ipynb | 282 +- notebooks/ontology_demo.ipynb | 794 ++- 129 files changed, 7342 insertions(+), 3810 deletions(-) create mode 100644 cognee-frontend/.prettierignore create mode 100644 cognee-frontend/eslint.config.mjs create mode 100644 cognee-frontend/public/images/cognee-logo-with-text.png create mode 100644 cognee-frontend/public/images/crewai.png create mode 100644 cognee-frontend/public/images/deepnote.svg create mode 100644 cognee-frontend/public/images/lancedb.svg create mode 100644 cognee-frontend/public/images/neo4j.png create mode 100644 cognee-frontend/src/app/(graph)/ActivityLog.tsx create mode 100644 cognee-frontend/src/app/(graph)/GraphLegend.tsx create mode 100644 cognee-frontend/src/app/(graph)/GraphVisualization.tsx create mode 100644 cognee-frontend/src/app/(graph)/getColorForNodeType.ts create mode 100644 cognee-frontend/src/app/auth/AuthForm.tsx create mode 100644 cognee-frontend/src/app/auth/layout.tsx create mode 100644 cognee-frontend/src/app/auth/login/LoginPage.tsx create mode 100644 cognee-frontend/src/app/auth/login/page.tsx create mode 100644 cognee-frontend/src/app/auth/signup/SignUpPage.tsx create mode 100644 cognee-frontend/src/app/auth/signup/page.tsx create mode 100644 cognee-frontend/src/app/auth/token/route.ts delete mode 100644 cognee-frontend/src/app/page copy.tsx delete mode 100644 cognee-frontend/src/app/wizard/AddStep/AddStep.module.css delete mode 100644 cognee-frontend/src/app/wizard/AddStep/AddStep.tsx delete mode 100644 cognee-frontend/src/app/wizard/AddStep/index.ts delete mode 100644 cognee-frontend/src/app/wizard/CognifyStep/CognifyStep.tsx delete mode 100644 cognee-frontend/src/app/wizard/CognifyStep/index.ts delete mode 100644 cognee-frontend/src/app/wizard/ConfigStep/ConfigStep.module.css delete mode 100644 cognee-frontend/src/app/wizard/ConfigStep/ConfigStep.tsx delete mode 100644 cognee-frontend/src/app/wizard/ConfigStep/index.ts delete mode 100644 cognee-frontend/src/app/wizard/ExploreStep/ExploreStep.tsx delete mode 100644 cognee-frontend/src/app/wizard/ExploreStep/index.ts delete mode 100644 cognee-frontend/src/app/wizard/WizardPage.module.css delete mode 100644 cognee-frontend/src/app/wizard/WizardPage.tsx delete mode 100644 cognee-frontend/src/app/wizard/page.tsx create mode 100644 cognee-frontend/src/middleware.ts create mode 100644 cognee-frontend/src/modules/auth/auth0.ts rename cognee-frontend/src/modules/chat/{ => api}/getHistory.ts (67%) create mode 100644 cognee-frontend/src/modules/chat/hooks/useChat.ts create mode 100644 cognee-frontend/src/modules/datasets/createDataset.ts delete mode 100644 cognee-frontend/src/modules/ingestion/DataView/DataView.module.css delete mode 100644 cognee-frontend/src/modules/ingestion/DataView/DataView.tsx delete mode 100644 cognee-frontend/src/modules/ingestion/DataView/RawDataPreview.module.css delete mode 100644 cognee-frontend/src/modules/ingestion/DataView/RawDataPreview.tsx delete mode 100644 cognee-frontend/src/modules/ingestion/DataView/index.ts delete mode 100644 cognee-frontend/src/modules/ingestion/DatasetsView/DatasetsView.module.css delete mode 100644 cognee-frontend/src/modules/ingestion/DatasetsView/DatasetsView.tsx delete mode 100644 cognee-frontend/src/modules/ingestion/DatasetsView/index.ts create mode 100644 cognee-frontend/src/ui/Icons/AddIcon.tsx create mode 100644 cognee-frontend/src/ui/Icons/CaretIcon.tsx create mode 100644 cognee-frontend/src/ui/Icons/SearchIcon.tsx delete mode 100644 cognee-frontend/src/ui/Partials/Explorer/Explorer.module.css delete mode 100644 cognee-frontend/src/ui/Partials/Explorer/Explorer.tsx delete mode 100644 cognee-frontend/src/ui/Partials/Wizard/WizardContent/WizardContent.module.css delete mode 100644 cognee-frontend/src/ui/Partials/Wizard/WizardContent/WizardContent.tsx delete mode 100644 cognee-frontend/src/ui/Partials/Wizard/WizardHeading.tsx delete mode 100644 cognee-frontend/src/ui/Partials/Wizard/index.ts create mode 100644 cognee-frontend/src/ui/elements/GhostButton.tsx create mode 100644 cognee-frontend/src/ui/elements/Modal.tsx create mode 100644 cognee-frontend/types/d3-force-3d.d.ts create mode 100644 cognee/modules/graph/methods/__init__.py create mode 100644 cognee/modules/graph/methods/get_formatted_graph_data.py create mode 100644 cognee/modules/pipelines/methods/__init__.py create mode 100644 cognee/modules/pipelines/methods/get_pipeline_run.py create mode 100644 cognee/modules/users/authentication/api_bearer/__init__.py create mode 100644 cognee/modules/users/authentication/api_bearer/api_bearer_transport.py create mode 100644 cognee/modules/users/authentication/api_bearer/api_jwt_strategy.py create mode 100644 cognee/modules/users/authentication/default/__init__.py create mode 100644 cognee/modules/users/authentication/default/default_jwt_strategy.py create mode 100644 cognee/modules/users/authentication/default/default_transport.py create mode 100644 cognee/modules/users/authentication/get_api_auth_backend.py delete mode 100644 cognee/modules/users/authentication/get_auth_backend.py create mode 100644 cognee/modules/users/authentication/get_client_auth_backend.py create mode 100644 cognee/modules/users/methods/get_user_by_email.py diff --git a/cognee-frontend/.prettierignore b/cognee-frontend/.prettierignore new file mode 100644 index 000000000..0e75fe557 --- /dev/null +++ b/cognee-frontend/.prettierignore @@ -0,0 +1,3 @@ +node_modules +dist +coverage diff --git a/cognee-frontend/Dockerfile b/cognee-frontend/Dockerfile index 26f479f88..7c7b56bc5 100644 --- a/cognee-frontend/Dockerfile +++ b/cognee-frontend/Dockerfile @@ -1,5 +1,5 @@ # Use an official Node.js runtime as a parent image -FROM node:18-alpine +FROM node:22-alpine # Set the working directory to /app WORKDIR /app @@ -9,12 +9,14 @@ COPY package.json package-lock.json ./ # Install any needed packages specified in package.json RUN npm ci +# RUN npm rebuild lightningcss # Copy the rest of the application code to the working directory COPY src ./src COPY public ./public COPY next.config.mjs . +COPY postcss.config.mjs . COPY tsconfig.json . # Build the app and run it -CMD npm run dev +CMD ["npm", "run", "dev"] diff --git a/cognee-frontend/eslint.config.mjs b/cognee-frontend/eslint.config.mjs new file mode 100644 index 000000000..81740c057 --- /dev/null +++ b/cognee-frontend/eslint.config.mjs @@ -0,0 +1,16 @@ +import { dirname } from "path"; +import { fileURLToPath } from "url"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const compat = new FlatCompat({ + baseDirectory: __dirname, +}); + +const eslintConfig = [ + ...compat.extends("next/core-web-vitals", "next/typescript", "prettier"), +]; + +export default eslintConfig; diff --git a/cognee-frontend/package-lock.json b/cognee-frontend/package-lock.json index 4cc799733..ed804caae 100644 --- a/cognee-frontend/package-lock.json +++ b/cognee-frontend/package-lock.json @@ -8,24 +8,28 @@ "name": "cognee-frontend", "version": "1.0.0", "dependencies": { + "@auth0/nextjs-auth0": "^4.6.0", "classnames": "^2.5.1", + "culori": "^4.0.1", "d3-force-3d": "^3.0.6", - "next": "15.3.2", - "ohmy-ui": "^0.0.6", - "react": "^18", - "react-dom": "^18", + "next": "15.3.3", + "react": "^19.0.0", + "react-dom": "^19.0.0", "react-force-graph-2d": "^1.27.1", - "tailwindcss": "^4.1.7", "uuid": "^9.0.1" }, "devDependencies": { + "@eslint/eslintrc": "^3", "@tailwindcss/postcss": "^4.1.7", + "@types/culori": "^4.0.0", "@types/node": "^20", "@types/react": "^18", "@types/react-dom": "^18", "@types/uuid": "^9.0.8", - "eslint": "^8", - "eslint-config-next": "14.2.3", + "eslint": "^9", + "eslint-config-next": "^15.3.3", + "eslint-config-prettier": "^10.1.5", + "tailwindcss": "^4.1.7", "typescript": "^5" } }, @@ -54,52 +58,84 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/runtime": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", - "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", - "dev": true, + "node_modules/@auth0/nextjs-auth0": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@auth0/nextjs-auth0/-/nextjs-auth0-4.6.1.tgz", + "integrity": "sha512-eSYLCPBzROheJL0gdI0hHCbV468yqyz/sBcuag7cm3dx6LMhRzzFmComPs8p+Y7OCblzblGfk/Hju8A1BkjZxw==", + "dependencies": { + "@edge-runtime/cookies": "^5.0.1", + "@panva/hkdf": "^1.2.1", + "jose": "^5.9.6", + "oauth4webapi": "^3.1.2", + "swr": "^2.2.5" + }, + "peerDependencies": { + "next": "^14.2.25 || ^15.2.3", + "react": "^18.0.0 || ^19.0.0 || ^19.0.0-0", + "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-0" + } + }, + "node_modules/@edge-runtime/cookies": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@edge-runtime/cookies/-/cookies-5.0.2.tgz", + "integrity": "sha512-Sd8LcWpZk/SWEeKGE8LT6gMm5MGfX/wm+GPnh1eBEtCpya3vYqn37wYknwAHw92ONoyyREl1hJwxV/Qx2DWNOg==", "engines": { - "node": ">=6.9.0" + "node": ">=16" + } + }, + "node_modules/@emnapi/core": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.3.tgz", + "integrity": "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==", + "dev": true, + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.0.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", + "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz", + "integrity": "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^2.4.0" } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", "dev": true, - "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -107,31 +143,159 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/js": { - "version": "8.57.0", + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, - "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", + "node_modules/@eslint/config-array": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.1.tgz", + "integrity": "sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", + "@eslint/object-schema": "^2.1.6", "debug": "^4.3.1", - "minimatch": "^3.0.5" + "minimatch": "^3.1.2" }, "engines": { - "node": ">=10.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.3.tgz", + "integrity": "sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", + "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "9.29.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.29.0.tgz", + "integrity": "sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.2.tgz", + "integrity": "sha512-4SaFZCNfJqvk/kenHpI8xvN42DMaoycy4PzKc5otHxRswww1kAt82OlBuwRVLofCACCTZEcla2Ydxv8scMXaTg==", + "dev": true, + "dependencies": { + "@eslint/core": "^0.15.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.0.tgz", + "integrity": "sha512-b7ePw78tEWWkpgZCDYkbqDOP8dmM6qe+AOC6iuJqlq1R/0ahMAeH3qynpnqKFGkMltrp44ohV4ubGyvLX28tzw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -140,10 +304,18 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true, - "license": "BSD-3-Clause" + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@img/sharp-darwin-arm64": { "version": "0.34.2", @@ -166,6 +338,27 @@ "@img/sharp-libvips-darwin-arm64": "1.1.0" } }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.2.tgz", + "integrity": "sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==", + "cpu": [ + "x64" + ], + "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.1.0" + } + }, "node_modules/@img/sharp-libvips-darwin-arm64": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.1.0.tgz", @@ -181,45 +374,322 @@ "url": "https://opencollective.com/libvips" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.1.0.tgz", + "integrity": "sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.1.0.tgz", + "integrity": "sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://opencollective.com/libvips" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.1.0.tgz", + "integrity": "sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.1.0.tgz", + "integrity": "sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.1.0.tgz", + "integrity": "sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.1.0.tgz", + "integrity": "sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.1.0.tgz", + "integrity": "sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.1.0.tgz", + "integrity": "sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.2.tgz", + "integrity": "sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=12" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.1.0" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.2.tgz", + "integrity": "sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==", + "cpu": [ + "arm64" + ], + "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.1.0" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.2.tgz", + "integrity": "sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==", + "cpu": [ + "s390x" + ], + "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.1.0" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.2.tgz", + "integrity": "sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==", + "cpu": [ + "x64" + ], + "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-x64": "1.1.0" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.2.tgz", + "integrity": "sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==", + "cpu": [ + "arm64" + ], + "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.1.0" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.2.tgz", + "integrity": "sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==", + "cpu": [ + "x64" + ], + "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-x64": "1.1.0" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.2.tgz", + "integrity": "sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==", + "cpu": [ + "wasm32" + ], + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.4.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.2.tgz", + "integrity": "sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==", + "cpu": [ + "arm64" + ], + "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-ia32": { + "version": "0.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.2.tgz", + "integrity": "sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==", + "cpu": [ + "ia32" + ], + "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.34.2", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.2.tgz", + "integrity": "sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, "node_modules/@isaacs/fs-minipass": { @@ -282,20 +752,750 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@next/env": { - "version": "15.3.2", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.3.2.tgz", - "integrity": "sha512-xURk++7P7qR9JG1jJtLzPzf0qEvqCN0A/T3DXf8IPMKo9/6FfjxtEffRJIIew/bIL4T3C2jLLqBor8B/zVlx6g==" - }, - "node_modules/@next/eslint-plugin-next": { - "version": "14.2.3", + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.11.tgz", + "integrity": "sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==", "dev": true, - "license": "MIT", + "optional": true, "dependencies": { - "glob": "10.3.10" + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.9.0" } }, - "node_modules/@next/eslint-plugin-next/node_modules/brace-expansion": { + "node_modules/@next/env": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.3.3.tgz", + "integrity": "sha512-OdiMrzCl2Xi0VTjiQQUK0Xh7bJHnOuET2s+3V+Y40WJBAXrJeGA3f+I8MZJ/YQ3mVGi5XGR1L66oFlgqXhQ4Vw==" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.3.3.tgz", + "integrity": "sha512-VKZJEiEdpKkfBmcokGjHu0vGDG+8CehGs90tBEy/IDoDDKGngeyIStt2MmE5FYNyU9BhgR7tybNWTAJY/30u+Q==", + "dev": true, + "dependencies": { + "fast-glob": "3.3.1" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.3.3.tgz", + "integrity": "sha512-WRJERLuH+O3oYB4yZNVahSVFmtxRNjNF1I1c34tYMoJb0Pve+7/RaLAJJizyYiFhjYNGHRAE1Ri2Fd23zgDqhg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.3.3.tgz", + "integrity": "sha512-XHdzH/yBc55lu78k/XwtuFR/ZXUTcflpRXcsu0nKmF45U96jt1tsOZhVrn5YH+paw66zOANpOnFQ9i6/j+UYvw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.3.3.tgz", + "integrity": "sha512-VZ3sYL2LXB8znNGcjhocikEkag/8xiLgnvQts41tq6i+wql63SMS1Q6N8RVXHw5pEUjiof+II3HkDd7GFcgkzw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.3.3.tgz", + "integrity": "sha512-h6Y1fLU4RWAp1HPNJWDYBQ+e3G7sLckyBXhmH9ajn8l/RSMnhbuPBV/fXmy3muMcVwoJdHL+UtzRzs0nXOf9SA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.3.3.tgz", + "integrity": "sha512-jJ8HRiF3N8Zw6hGlytCj5BiHyG/K+fnTKVDEKvUCyiQ/0r5tgwO7OgaRiOjjRoIx2vwLR+Rz8hQoPrnmFbJdfw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.3.3.tgz", + "integrity": "sha512-HrUcTr4N+RgiiGn3jjeT6Oo208UT/7BuTr7K0mdKRBtTbT4v9zJqCDKO97DUqqoBK1qyzP1RwvrWTvU6EPh/Cw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.3.3.tgz", + "integrity": "sha512-SxorONgi6K7ZUysMtRF3mIeHC5aA3IQLmKFQzU0OuhuUYwpOBc1ypaLJLP5Bf3M9k53KUUUj4vTPwzGvl/NwlQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.3.3.tgz", + "integrity": "sha512-4QZG6F8enl9/S2+yIiOiju0iCTFd93d8VC1q9LZS4p/Xuk81W2QDjCFeoogmrWWkAD59z8ZxepBQap2dKS5ruw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@panva/hkdf": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.2.1.tgz", + "integrity": "sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.11.0.tgz", + "integrity": "sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==", + "dev": true + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "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==", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.10.tgz", + "integrity": "sha512-2ACf1znY5fpRBwRhMgj9ZXvb2XZW8qs+oTfotJ2C5xR0/WNL7UHZ7zXl6s+rUqedL1mNi+0O+WQr5awGowS3PQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "enhanced-resolve": "^5.18.1", + "jiti": "^2.4.2", + "lightningcss": "1.30.1", + "magic-string": "^0.30.17", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.10" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.10.tgz", + "integrity": "sha512-v0C43s7Pjw+B9w21htrQwuFObSkio2aV/qPx/mhrRldbqxbWJK6KizM+q7BF1/1CmuLqZqX3CeYF7s7P9fbA8Q==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "detect-libc": "^2.0.4", + "tar": "^7.4.3" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.10", + "@tailwindcss/oxide-darwin-arm64": "4.1.10", + "@tailwindcss/oxide-darwin-x64": "4.1.10", + "@tailwindcss/oxide-freebsd-x64": "4.1.10", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.10", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.10", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.10", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.10", + "@tailwindcss/oxide-linux-x64-musl": "4.1.10", + "@tailwindcss/oxide-wasm32-wasi": "4.1.10", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.10", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.10" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.10.tgz", + "integrity": "sha512-VGLazCoRQ7rtsCzThaI1UyDu/XRYVyH4/EWiaSX6tFglE+xZB5cvtC5Omt0OQ+FfiIVP98su16jDVHDEIuH4iQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.10.tgz", + "integrity": "sha512-ZIFqvR1irX2yNjWJzKCqTCcHZbgkSkSkZKbRM3BPzhDL/18idA8uWCoopYA2CSDdSGFlDAxYdU2yBHwAwx8euQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.10.tgz", + "integrity": "sha512-eCA4zbIhWUFDXoamNztmS0MjXHSEJYlvATzWnRiTqJkcUteSjO94PoRHJy1Xbwp9bptjeIxxBHh+zBWFhttbrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.10.tgz", + "integrity": "sha512-8/392Xu12R0cc93DpiJvNpJ4wYVSiciUlkiOHOSOQNH3adq9Gi/dtySK7dVQjXIOzlpSHjeCL89RUUI8/GTI6g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.10.tgz", + "integrity": "sha512-t9rhmLT6EqeuPT+MXhWhlRYIMSfh5LZ6kBrC4FS6/+M1yXwfCtp24UumgCWOAJVyjQwG+lYva6wWZxrfvB+NhQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.10.tgz", + "integrity": "sha512-3oWrlNlxLRxXejQ8zImzrVLuZ/9Z2SeKoLhtCu0hpo38hTO2iL86eFOu4sVR8cZc6n3z7eRXXqtHJECa6mFOvA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.10.tgz", + "integrity": "sha512-saScU0cmWvg/Ez4gUmQWr9pvY9Kssxt+Xenfx1LG7LmqjcrvBnw4r9VjkFcqmbBb7GCBwYNcZi9X3/oMda9sqQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.10.tgz", + "integrity": "sha512-/G3ao/ybV9YEEgAXeEg28dyH6gs1QG8tvdN9c2MNZdUXYBaIY/Gx0N6RlJzfLy/7Nkdok4kaxKPHKJUlAaoTdA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.10.tgz", + "integrity": "sha512-LNr7X8fTiKGRtQGOerSayc2pWJp/9ptRYAa4G+U+cjw9kJZvkopav1AQc5HHD+U364f71tZv6XamaHKgrIoVzA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.10.tgz", + "integrity": "sha512-d6ekQpopFQJAcIK2i7ZzWOYGZ+A6NzzvQ3ozBvWFdeyqfOZdYHU66g5yr+/HC4ipP1ZgWsqa80+ISNILk+ae/Q==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@emnapi/wasi-threads": "^1.0.2", + "@napi-rs/wasm-runtime": "^0.2.10", + "@tybys/wasm-util": "^0.9.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.10.tgz", + "integrity": "sha512-i1Iwg9gRbwNVOCYmnigWCCgow8nDWSFmeTUU5nbNx3rqbe4p0kRbEqLwLJbYZKmSSp23g4N6rCDmm7OuPBXhDA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.10.tgz", + "integrity": "sha512-sGiJTjcBSfGq2DVRtaSljq5ZgZS2SDHSIfhOylkBvHVjwOsodBhnb3HdmiKkVuUGKD0I7G63abMOVaskj1KpOA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.10.tgz", + "integrity": "sha512-B+7r7ABZbkXJwpvt2VMnS6ujcDoR2OOcFaqrLIo1xbcdxje4Vf+VgJdBzNNbrAjBj/rLZ66/tlQ1knIGNLKOBQ==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.1.10", + "@tailwindcss/oxide": "4.1.10", + "postcss": "^8.4.41", + "tailwindcss": "4.1.10" + } + }, + "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==" + }, + "node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", + "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/culori": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/culori/-/culori-4.0.0.tgz", + "integrity": "sha512-aFljQwjb++sl6TAyEXeHTiK/fk9epZOQ+nMmadjnAvzZFIvNoQ0x8XQYfcOaRTBwmDUPUlghhZCJ66MTcqQAsg==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.19.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.1.tgz", + "integrity": "sha512-jJD50LtlD2dodAEO653i3YF04NWak6jN3ky+Ri3Em3mGR39/glWiboM/IePaRbgwSfqM1TpGXfAg8ohn/4dTgA==", + "dev": true, + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.3.23", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.23.tgz", + "integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "dev": true, + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@types/uuid": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.34.1.tgz", + "integrity": "sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.34.1", + "@typescript-eslint/type-utils": "8.34.1", + "@typescript-eslint/utils": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.34.1", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.34.1.tgz", + "integrity": "sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.34.1", + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/typescript-estree": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.1.tgz", + "integrity": "sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==", + "dev": true, + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.34.1", + "@typescript-eslint/types": "^8.34.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.1.tgz", + "integrity": "sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.1.tgz", + "integrity": "sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.34.1.tgz", + "integrity": "sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "8.34.1", + "@typescript-eslint/utils": "8.34.1", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.1.tgz", + "integrity": "sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.1.tgz", + "integrity": "sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==", + "dev": true, + "dependencies": { + "@typescript-eslint/project-service": "8.34.1", + "@typescript-eslint/tsconfig-utils": "8.34.1", + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", @@ -304,28 +1504,35 @@ "balanced-match": "^1.0.0" } }, - "node_modules/@next/eslint-plugin-next/node_modules/glob": { - "version": "10.3.10", + "node_modules/@typescript-eslint/typescript-estree/node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, - "license": "ISC", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8.6.0" } }, - "node_modules/@next/eslint-plugin-next/node_modules/minimatch": { + "node_modules/@typescript-eslint/typescript-estree/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", @@ -340,348 +1547,295 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@next/swc-darwin-arm64": { - "version": "15.3.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.3.2.tgz", - "integrity": "sha512-2DR6kY/OGcokbnCsjHpNeQblqCZ85/1j6njYSkzRdpLn5At7OkSdmk7WyAmB9G0k25+VgqVZ/u356OSoQZ3z0g==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", + "node_modules/@typescript-eslint/utils": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.34.1.tgz", + "integrity": "sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==", "dev": true, - "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.34.1", + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/typescript-estree": "8.34.1" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.10.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@swc/counter": { - "version": "0.1.3", - "license": "Apache-2.0" - }, - "node_modules/@swc/helpers": { - "version": "0.5.15", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.8.0" - } - }, - "node_modules/@tailwindcss/node": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.8.tgz", - "integrity": "sha512-OWwBsbC9BFAJelmnNcrKuf+bka2ZxCE2A4Ft53Tkg4uoiE67r/PMEYwCsourC26E+kmxfwE0hVzMdxqeW+xu7Q==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.3.0", - "enhanced-resolve": "^5.18.1", - "jiti": "^2.4.2", - "lightningcss": "1.30.1", - "magic-string": "^0.30.17", - "source-map-js": "^1.2.1", - "tailwindcss": "4.1.8" - } - }, - "node_modules/@tailwindcss/oxide": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.8.tgz", - "integrity": "sha512-d7qvv9PsM5N3VNKhwVUhpK6r4h9wtLkJ6lz9ZY9aeZgrUWk1Z8VPyqyDT9MZlem7GTGseRQHkeB1j3tC7W1P+A==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "detect-libc": "^2.0.4", - "tar": "^7.4.3" - }, - "engines": { - "node": ">= 10" - }, - "optionalDependencies": { - "@tailwindcss/oxide-android-arm64": "4.1.8", - "@tailwindcss/oxide-darwin-arm64": "4.1.8", - "@tailwindcss/oxide-darwin-x64": "4.1.8", - "@tailwindcss/oxide-freebsd-x64": "4.1.8", - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.8", - "@tailwindcss/oxide-linux-arm64-gnu": "4.1.8", - "@tailwindcss/oxide-linux-arm64-musl": "4.1.8", - "@tailwindcss/oxide-linux-x64-gnu": "4.1.8", - "@tailwindcss/oxide-linux-x64-musl": "4.1.8", - "@tailwindcss/oxide-wasm32-wasi": "4.1.8", - "@tailwindcss/oxide-win32-arm64-msvc": "4.1.8", - "@tailwindcss/oxide-win32-x64-msvc": "4.1.8" - } - }, - "node_modules/@tailwindcss/oxide-darwin-arm64": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.8.tgz", - "integrity": "sha512-RdRvedGsT0vwVVDztvyXhKpsU2ark/BjgG0huo4+2BluxdXo8NDgzl77qh0T1nUxmM11eXwR8jA39ibvSTbi7A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tailwindcss/postcss": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.8.tgz", - "integrity": "sha512-vB/vlf7rIky+w94aWMw34bWW1ka6g6C3xIOdICKX2GC0VcLtL6fhlLiafF0DVIwa9V6EHz8kbWMkS2s2QvvNlw==", - "dev": true, - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "@tailwindcss/node": "4.1.8", - "@tailwindcss/oxide": "4.1.8", - "postcss": "^8.4.41", - "tailwindcss": "4.1.8" - } - }, - "node_modules/@tailwindcss/postcss/node_modules/postcss": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz", - "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "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==" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "20.12.11", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/prop-types": { - "version": "15.7.12", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "18.3.2", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/uuid": { - "version": "9.0.8", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/parser": { - "version": "7.2.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/typescript-estree": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.2.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.2.0", + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.1.tgz", + "integrity": "sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.2.0", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "8.34.1", + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.9.0.tgz", + "integrity": "sha512-h1T2c2Di49ekF2TE8ZCoJkb+jwETKUIPDJ/nO3tJBKlLFPu+fyd93f0rGP/BvArKx2k2HlRM4kqkNarj3dvZlg==", + "cpu": [ + "arm" + ], "dev": true, - "license": "ISC" + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.9.0.tgz", + "integrity": "sha512-sG1NHtgXtX8owEkJ11yn34vt0Xqzi3k9TJ8zppDmyG8GZV4kVWw44FHwKwHeEFl07uKPeC4ZoyuQaGh5ruJYPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.9.0.tgz", + "integrity": "sha512-nJ9z47kfFnCxN1z/oYZS7HSNsFh43y2asePzTEZpEvK7kGyuShSl3RRXnm/1QaqFL+iP+BjMwuB+DYUymOkA5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.9.0.tgz", + "integrity": "sha512-TK+UA1TTa0qS53rjWn7cVlEKVGz2B6JYe0C++TdQjvWYIyx83ruwh0wd4LRxYBM5HeuAzXcylA9BH2trARXJTw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.9.0.tgz", + "integrity": "sha512-6uZwzMRFcD7CcCd0vz3Hp+9qIL2jseE/bx3ZjaLwn8t714nYGwiE84WpaMCYjU+IQET8Vu/+BNAGtYD7BG/0yA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.9.0.tgz", + "integrity": "sha512-bPUBksQfrgcfv2+mm+AZinaKq8LCFvt5PThYqRotqSuuZK1TVKkhbVMS/jvSRfYl7jr3AoZLYbDkItxgqMKRkg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.9.0.tgz", + "integrity": "sha512-uT6E7UBIrTdCsFQ+y0tQd3g5oudmrS/hds5pbU3h4s2t/1vsGWbbSKhBSCD9mcqaqkBwoqlECpUrRJCmldl8PA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.9.0.tgz", + "integrity": "sha512-vdqBh911wc5awE2bX2zx3eflbyv8U9xbE/jVKAm425eRoOVv/VseGZsqi3A3SykckSpF4wSROkbQPvbQFn8EsA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.9.0.tgz", + "integrity": "sha512-/8JFZ/SnuDr1lLEVsxsuVwrsGquTvT51RZGvyDB/dOK3oYK2UqeXzgeyq6Otp8FZXQcEYqJwxb9v+gtdXn03eQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.9.0.tgz", + "integrity": "sha512-FkJjybtrl+rajTw4loI3L6YqSOpeZfDls4SstL/5lsP2bka9TiHUjgMBjygeZEis1oC8LfJTS8FSgpKPaQx2tQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.9.0.tgz", + "integrity": "sha512-w/NZfHNeDusbqSZ8r/hp8iL4S39h4+vQMc9/vvzuIKMWKppyUGKm3IST0Qv0aOZ1rzIbl9SrDeIqK86ZpUK37w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.9.0.tgz", + "integrity": "sha512-bEPBosut8/8KQbUixPry8zg/fOzVOWyvwzOfz0C0Rw6dp+wIBseyiHKjkcSyZKv/98edrbMknBaMNJfA/UEdqw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.9.0.tgz", + "integrity": "sha512-LDtMT7moE3gK753gG4pc31AAqGUC86j3AplaFusc717EUGF9ZFJ356sdQzzZzkBk1XzMdxFyZ4f/i35NKM/lFA==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.9.0.tgz", + "integrity": "sha512-WmFd5KINHIXj8o1mPaT8QRjA9HgSXhN1gl9Da4IZihARihEnOylu4co7i/yeaIpcfsI6sYs33cNZKyHYDh0lrA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.9.0.tgz", + "integrity": "sha512-CYuXbANW+WgzVRIl8/QvZmDaZxrqvOldOwlbUjIM4pQ46FJ0W5cinJ/Ghwa/Ng1ZPMJMk1VFdsD/XwmCGIXBWg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.9.0.tgz", + "integrity": "sha512-6Rp2WH0OoitMYR57Z6VE8Y6corX8C6QEMWLgOV6qXiJIeZ1F9WGXY/yQ8yDC4iTraotyLOeJ2Asea0urWj2fKQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.9.0.tgz", + "integrity": "sha512-rknkrTRuvujprrbPmGeHi8wYWxmNVlBoNW8+4XF2hXUnASOjmuC9FNF1tGbDiRQWn264q9U/oGtixyO3BT8adQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.9.0.tgz", + "integrity": "sha512-Ceymm+iBl+bgAICtgiHyMLz6hjxmLJKqBim8tDzpX61wpZOx2bPK6Gjuor7I2RiUynVjvvkoRIkrPyMwzBzF3A==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.9.0.tgz", + "integrity": "sha512-k59o9ZyeyS0hAlcaKFezYSH2agQeRFEB7KoQLXl3Nb3rgkqT1NY9Vwy+SqODiLmYnEjxWJVRE/yq2jFVqdIxZw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] }, "node_modules/accessor-fn": { "version": "1.5.3", @@ -692,9 +1846,10 @@ } }, "node_modules/acorn": { - "version": "8.11.3", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, - "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -704,16 +1859,18 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -725,18 +1882,11 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -749,24 +1899,27 @@ }, "node_modules/argparse": { "version": "2.0.1", - "dev": true, - "license": "Python-2.0" + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/aria-query": { - "version": "5.3.0", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "dequal": "^2.0.3" + "engines": { + "node": ">= 0.4" } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.1", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" }, "engines": { "node": ">= 0.4" @@ -776,16 +1929,19 @@ } }, "node_modules/array-includes": { - "version": "3.1.8", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -794,18 +1950,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-union": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/array.prototype.findlast": { "version": "1.2.5", + "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", @@ -822,16 +1971,18 @@ } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.5", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", + "es-abstract": "^1.23.9", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -841,14 +1992,15 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.3.2", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -858,14 +2010,15 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.2", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -874,42 +2027,35 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.toreversed": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - } - }, "node_modules/array.prototype.tosorted": { - "version": "1.1.3", + "version": "1.1.4", + "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.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.1.0", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", + "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" @@ -920,13 +2066,24 @@ }, "node_modules/ast-types-flow": { "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", "dev": true, - "license": "MIT" + "engines": { + "node": ">= 0.4" + } }, "node_modules/available-typed-arrays": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, - "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -938,25 +2095,28 @@ } }, "node_modules/axe-core": { - "version": "4.7.0", + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", + "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", "dev": true, - "license": "MPL-2.0", "engines": { "node": ">=4" } }, "node_modules/axobject-query": { - "version": "3.2.1", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "dequal": "^2.0.3" + "engines": { + "node": ">= 0.4" } }, "node_modules/balanced-match": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/bezier-js": { "version": "6.1.4", @@ -968,9 +2128,10 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -990,6 +2151,8 @@ }, "node_modules/busboy": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", "dependencies": { "streamsearch": "^1.1.0" }, @@ -998,15 +2161,44 @@ } }, "node_modules/call-bind": { - "version": "1.0.7", + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -1017,14 +2209,17 @@ }, "node_modules/callsites": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001620", + "version": "1.0.30001723", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001723.tgz", + "integrity": "sha512-1R/elMjtehrFejxwmexeXAtae5UO9iSyFn6G/I806CYC/BLyyBk1EPhrKBkWhy6wM6Xnm47dSJQec+tLJ39WHw==", "funding": [ { "type": "opencollective", @@ -1038,8 +2233,7 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ], - "license": "CC-BY-4.0" + ] }, "node_modules/canvas-color-tracker": { "version": "1.3.2", @@ -1054,8 +2248,9 @@ }, "node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1078,11 +2273,13 @@ }, "node_modules/classnames": { "version": "2.5.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" }, "node_modules/client-only": { "version": "0.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" }, "node_modules/color": { "version": "4.2.3", @@ -1099,8 +2296,9 @@ }, "node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "devOptional": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -1110,8 +2308,9 @@ }, "node_modules/color-name": { "version": "1.1.4", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "devOptional": true }, "node_modules/color-string": { "version": "1.9.1", @@ -1125,8 +2324,9 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/cross-spawn": { "version": "7.0.6", @@ -1144,8 +2344,17 @@ }, "node_modules/csstype": { "version": "3.1.3", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true + }, + "node_modules/culori": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/culori/-/culori-4.0.1.tgz", + "integrity": "sha512-LSnjA6HuIUOlkfKVbzi2OlToZE8OjFi667JWN9qNymXVXzGDmvuP60SSgC+e92sd7B7158f7Fy3Mb6rXS5EDPw==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } }, "node_modules/d3-array": { "version": "3.2.4", @@ -1346,17 +2555,19 @@ }, "node_modules/damerau-levenshtein": { "version": "1.0.8", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true }, "node_modules/data-view-buffer": { - "version": "1.0.1", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -1366,27 +2577,29 @@ } }, "node_modules/data-view-byte-length": { - "version": "1.0.1", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/inspect-js" } }, "node_modules/data-view-byte-offset": { - "version": "1.0.0", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" }, @@ -1398,11 +2611,12 @@ } }, "node_modules/debug": { - "version": "4.3.4", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, - "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -1415,13 +2629,15 @@ }, "node_modules/deep-is": { "version": "0.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true }, "node_modules/define-data-property": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, - "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -1436,8 +2652,9 @@ }, "node_modules/define-properties": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, - "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -1452,8 +2669,8 @@ }, "node_modules/dequal": { "version": "2.0.3", - "dev": true, - "license": "MIT", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "engines": { "node": ">=6" } @@ -1467,37 +2684,37 @@ "node": ">=8" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/doctrine": { - "version": "3.0.0", + "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": ">=6.0.0" + "node": ">=0.10.0" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dev": true, - "license": "MIT" + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } }, "node_modules/emoji-regex": { "version": "9.2.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true }, "node_modules/enhanced-resolve": { "version": "5.18.1", @@ -1513,56 +2730,65 @@ } }, "node_modules/es-abstract": { - "version": "1.23.3", + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", "dev": true, - "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "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", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "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", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "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", - "is-array-buffer": "^3.0.4", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", "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-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^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", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" }, "engines": { "node": ">= 0.4" @@ -1572,52 +2798,55 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", + "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" } }, "node_modules/es-errors": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/es-iterator-helpers": { - "version": "1.0.19", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", + "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", "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", - "safe-array-concat": "^1.1.2" + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-object-atoms": { - "version": "1.0.0", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "dev": true, - "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -1626,34 +2855,41 @@ } }, "node_modules/es-set-tostringtag": { - "version": "2.0.3", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { - "version": "1.0.2", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", "dev": true, - "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/es-to-primitive": { - "version": "1.2.1", + "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" @@ -1664,8 +2900,9 @@ }, "node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -1674,76 +2911,84 @@ } }, "node_modules/eslint": { - "version": "8.57.0", + "version": "9.29.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.29.0.tgz", + "integrity": "sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.20.1", + "@eslint/config-helpers": "^0.2.1", + "@eslint/core": "^0.14.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.29.0", + "@eslint/plugin-kit": "^0.3.1", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-config-next": { - "version": "14.2.3", + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.3.3.tgz", + "integrity": "sha512-QJLv/Ouk2vZnxL4b67njJwTLjTf7uZRltI0LL4GERYR4qMF5z08+gxkfODAeaK7TiC6o+cER91bDaEnwrTWV6Q==", "dev": true, - "license": "MIT", "dependencies": { - "@next/eslint-plugin-next": "14.2.3", - "@rushstack/eslint-patch": "^1.3.3", - "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0", + "@next/eslint-plugin-next": "15.3.3", + "@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", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.28.1", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-jsx-a11y": "^6.10.0", + "eslint-plugin-react": "^7.37.0", + "eslint-plugin-react-hooks": "^5.0.0" }, "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0", + "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", "typescript": ">=3.3.1" }, "peerDependenciesMeta": { @@ -1752,10 +2997,26 @@ } } }, + "node_modules/eslint-config-prettier": { + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.5.tgz", + "integrity": "sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", @@ -1764,40 +3025,52 @@ }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.1", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz", + "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==", "dev": true, - "license": "ISC", "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.12.0", - "eslint-module-utils": "^2.7.4", - "fast-glob": "^3.3.1", - "get-tsconfig": "^4.5.0", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3" + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.4.0", + "get-tsconfig": "^4.10.0", + "is-bun-module": "^2.0.0", + "stable-hash": "^0.0.5", + "tinyglobby": "^0.2.13", + "unrs-resolver": "^1.6.2" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + "url": "https://opencollective.com/eslint-import-resolver-typescript" }, "peerDependencies": { "eslint": "*", - "eslint-plugin-import": "*" + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } } }, "node_modules/eslint-module-utils": { - "version": "2.8.1", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^3.2.7" }, @@ -1812,155 +3085,142 @@ }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import": { - "version": "2.29.1", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, - "license": "MIT", "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "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", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.8.0", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.2", - "aria-query": "^5.3.0", - "array-includes": "^3.1.7", + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", "array.prototype.flatmap": "^1.3.2", "ast-types-flow": "^0.0.8", - "axe-core": "=4.7.0", - "axobject-query": "^3.2.1", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", - "es-iterator-helpers": "^1.0.15", - "hasown": "^2.0.0", + "hasown": "^2.0.2", "jsx-ast-utils": "^3.3.5", "language-tags": "^1.0.9", "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7" + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" }, "engines": { "node": ">=4.0" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, "node_modules/eslint-plugin-react": { - "version": "7.34.1", + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", "dev": true, - "license": "MIT", "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlast": "^1.2.4", - "array.prototype.flatmap": "^1.3.2", - "array.prototype.toreversed": "^1.1.2", - "array.prototype.tosorted": "^1.1.3", + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.17", + "es-iterator-helpers": "^1.2.1", "estraverse": "^5.3.0", + "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7", - "object.hasown": "^1.1.3", - "object.values": "^1.1.7", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.10" + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" + "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/resolve": { "version": "2.0.0-next.5", + "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", @@ -1975,58 +3235,63 @@ }, "node_modules/eslint-plugin-react/node_modules/semver": { "version": "6.3.1", + "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" } }, "node_modules/eslint-scope": { - "version": "7.2.2", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.3", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, - "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/espree": { - "version": "9.6.1", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/esquery": { - "version": "1.5.0", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -2036,8 +3301,9 @@ }, "node_modules/esrecurse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -2047,29 +3313,33 @@ }, "node_modules/estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/esutils": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "node_modules/fast-glob": { - "version": "3.3.2", + "version": "3.3.1", + "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", @@ -2083,8 +3353,9 @@ }, "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", + "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" }, @@ -2094,31 +3365,35 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true }, "node_modules/fastq": { - "version": "1.17.1", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dev": true, - "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/file-entry-cache": { - "version": "6.0.1", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, - "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/fill-range": { @@ -2135,8 +3410,9 @@ }, "node_modules/find-up": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -2149,22 +3425,23 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, - "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.3.1", - "dev": true, - "license": "ISC" + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true }, "node_modules/float-tooltip": { "version": "1.7.5", @@ -2180,11 +3457,18 @@ } }, "node_modules/for-each": { - "version": "0.3.3", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, - "license": "MIT", "dependencies": { - "is-callable": "^1.1.3" + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/force-graph": { @@ -2212,43 +3496,27 @@ "node": ">=12" } }, - "node_modules/foreground-child": { - "version": "3.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/function-bind": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/function.prototype.name": { - "version": "1.1.6", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "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", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -2259,22 +3527,29 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-intrinsic": { - "version": "1.2.4", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, - "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -2283,14 +3558,28 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-symbol-description": { - "version": "1.0.2", + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -2300,9 +3589,10 @@ } }, "node_modules/get-tsconfig": { - "version": "4.7.5", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", + "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", "dev": true, - "license": "MIT", "dependencies": { "resolve-pkg-maps": "^1.0.0" }, @@ -2310,29 +3600,11 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/glob": { - "version": "7.2.3", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -2341,14 +3613,12 @@ } }, "node_modules/globals": { - "version": "13.24.0", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -2356,8 +3626,9 @@ }, "node_modules/globalthis": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, - "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" @@ -2369,31 +3640,13 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { - "version": "11.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/gopd": { - "version": "1.0.1", + "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" @@ -2401,34 +3654,42 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true }, "node_modules/graphemer": { "version": "1.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true }, "node_modules/has-bigints": { - "version": "1.0.2", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, - "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/has-property-descriptors": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, - "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -2437,9 +3698,13 @@ } }, "node_modules/has-proto": { - "version": "1.0.3", + "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" }, @@ -2448,9 +3713,10 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", + "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" }, @@ -2460,8 +3726,9 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, - "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -2474,8 +3741,9 @@ }, "node_modules/hasown": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, - "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -2484,17 +3752,19 @@ } }, "node_modules/ignore": { - "version": "5.3.1", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/import-fresh": { - "version": "3.3.0", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, - "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -2508,8 +3778,9 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -2522,28 +3793,15 @@ "node": ">=12" } }, - "node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "license": "ISC" - }, "node_modules/internal-slot": { - "version": "1.0.7", + "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" @@ -2558,12 +3816,14 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.4", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -2579,11 +3839,16 @@ "optional": true }, "node_modules/is-async-function": { - "version": "2.0.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, - "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -2593,23 +3858,12 @@ } }, "node_modules/is-bigint": { - "version": "1.0.4", + "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" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "has-bigints": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -2618,10 +3872,36 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bun-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", + "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==", + "dev": true, + "dependencies": { + "semver": "^7.7.1" + } + }, "node_modules/is-callable": { "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -2630,21 +3910,28 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, - "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-data-view": { - "version": "1.0.1", + "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": { @@ -2655,11 +3942,13 @@ } }, "node_modules/is-date-object": { - "version": "1.0.5", + "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" @@ -2670,37 +3959,38 @@ }, "node_modules/is-extglob": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-finalizationregistry": { - "version": "1.0.2", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-generator-function": { - "version": "1.0.10", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", "dev": true, - "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -2711,8 +4001,9 @@ }, "node_modules/is-glob": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -2722,8 +4013,9 @@ }, "node_modules/is-map": { "version": "2.0.3", + "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" }, @@ -2733,8 +4025,9 @@ }, "node_modules/is-negative-zero": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -2752,11 +4045,13 @@ } }, "node_modules/is-number-object": { - "version": "1.0.7", + "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" @@ -2765,21 +4060,16 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-regex": { - "version": "1.1.4", + "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" @@ -2790,8 +4080,9 @@ }, "node_modules/is-set": { "version": "2.0.3", + "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" }, @@ -2800,11 +4091,12 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.3", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -2814,11 +4106,13 @@ } }, "node_modules/is-string": { - "version": "1.0.7", + "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" @@ -2828,11 +4122,14 @@ } }, "node_modules/is-symbol": { - "version": "1.0.4", + "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" @@ -2842,11 +4139,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.13", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, - "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -2857,8 +4155,9 @@ }, "node_modules/is-weakmap": { "version": "2.0.2", + "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" }, @@ -2867,23 +4166,28 @@ } }, "node_modules/is-weakref": { - "version": "1.0.2", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-weakset": { - "version": "2.0.3", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -2894,41 +4198,31 @@ }, "node_modules/isarray": { "version": "2.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true }, "node_modules/isexe": { "version": "2.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "node_modules/iterator.prototype": { - "version": "1.1.2", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", "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" - } - }, - "node_modules/jackspeak": { - "version": "2.3.6", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "node": ">= 0.4" } }, "node_modules/jerrypick": { @@ -2948,14 +4242,24 @@ "jiti": "lib/jiti-cli.mjs" } }, + "node_modules/jose": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/jose/-/jose-5.10.0.tgz", + "integrity": "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/js-tokens": { "version": "4.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -2965,23 +4269,27 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true }, "node_modules/json5": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, - "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -2991,8 +4299,9 @@ }, "node_modules/jsx-ast-utils": { "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, - "license": "MIT", "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", @@ -3016,21 +4325,24 @@ }, "node_modules/keyv": { "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, - "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } }, "node_modules/language-subtag-registry": { - "version": "0.3.22", - "dev": true, - "license": "CC0-1.0" + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "dev": true }, "node_modules/language-tags": { "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, - "license": "MIT", "dependencies": { "language-subtag-registry": "^0.3.20" }, @@ -3040,8 +4352,9 @@ }, "node_modules/levn": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -3098,10 +4411,191 @@ "url": "https://opencollective.com/parcel" } }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", + "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", + "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", + "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", + "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", + "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz", + "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz", + "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", + "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", + "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/locate-path": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -3119,12 +4613,14 @@ }, "node_modules/lodash.merge": { "version": "4.6.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, "node_modules/loose-envify": { "version": "1.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -3132,14 +4628,6 @@ "loose-envify": "cli.js" } }, - "node_modules/lru-cache": { - "version": "10.2.2", - "dev": true, - "license": "ISC", - "engines": { - "node": "14 || >=16.14" - } - }, "node_modules/magic-string": { "version": "0.30.17", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", @@ -3149,10 +4637,20 @@ "@jridgewell/sourcemap-codec": "^1.5.0" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/merge2": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } @@ -3172,8 +4670,9 @@ }, "node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3183,8 +4682,9 @@ }, "node_modules/minimist": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3226,9 +4726,10 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, "node_modules/nanoid": { "version": "3.3.11", @@ -3247,17 +4748,33 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/napi-postinstall": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.2.4.tgz", + "integrity": "sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg==", + "dev": true, + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, "node_modules/natural-compare": { "version": "1.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true }, "node_modules/next": { - "version": "15.3.2", - "resolved": "https://registry.npmjs.org/next/-/next-15.3.2.tgz", - "integrity": "sha512-CA3BatMyHkxZ48sgOCLdVHjFU36N7TF1HhqAHLFOkV6buwZnvMI84Cug8xD56B9mCuKrqXnLn94417GrZ/jjCQ==", + "version": "15.3.3", + "resolved": "https://registry.npmjs.org/next/-/next-15.3.3.tgz", + "integrity": "sha512-JqNj29hHNmCLtNvd090SyRbXJiivQ+58XjCcrC50Crb5g5u2zi7Y2YivbsEfzk6AtVI80akdOQbaMZwWB1Hthw==", "dependencies": { - "@next/env": "15.3.2", + "@next/env": "15.3.3", "@swc/counter": "0.1.3", "@swc/helpers": "0.5.15", "busboy": "1.6.0", @@ -3272,14 +4789,14 @@ "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "15.3.2", - "@next/swc-darwin-x64": "15.3.2", - "@next/swc-linux-arm64-gnu": "15.3.2", - "@next/swc-linux-arm64-musl": "15.3.2", - "@next/swc-linux-x64-gnu": "15.3.2", - "@next/swc-linux-x64-musl": "15.3.2", - "@next/swc-win32-arm64-msvc": "15.3.2", - "@next/swc-win32-x64-msvc": "15.3.2", + "@next/swc-darwin-arm64": "15.3.3", + "@next/swc-darwin-x64": "15.3.3", + "@next/swc-linux-arm64-gnu": "15.3.3", + "@next/swc-linux-arm64-musl": "15.3.3", + "@next/swc-linux-x64-gnu": "15.3.3", + "@next/swc-linux-x64-musl": "15.3.3", + "@next/swc-win32-arm64-msvc": "15.3.3", + "@next/swc-win32-x64-msvc": "15.3.3", "sharp": "^0.34.1" }, "peerDependencies": { @@ -3305,37 +4822,81 @@ } } }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/oauth4webapi": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-3.5.3.tgz", + "integrity": "sha512-2bnHosmBLAQpXNBLOvaJMyMkr4Yya5ohE5Q9jqyxiN+aa7GFCzvDN1RRRMrp0NkfqRR2MTaQNkcSUCCjILD9oQ==", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/object-assign": { "version": "4.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { - "version": "1.13.1", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, - "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-keys": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { - "version": "4.1.5", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -3346,13 +4907,15 @@ } }, "node_modules/object.entries": { - "version": "1.1.8", + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "es-object-atoms": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -3360,8 +4923,9 @@ }, "node_modules/object.fromentries": { "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -3377,8 +4941,9 @@ }, "node_modules/object.groupby": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -3388,28 +4953,14 @@ "node": ">= 0.4" } }, - "node_modules/object.hasown": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object.values": { - "version": "1.2.0", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, @@ -3420,35 +4971,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ohmy-ui": { - "version": "0.0.6", - "license": "MIT", - "dependencies": { - "classnames": "^2.3.2" - }, - "peerDependencies": { - "@types/react": "^18", - "react": "^18", - "react-dom": "^18" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/once": { - "version": "1.4.0", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, "node_modules/optionator": { "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, - "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -3461,10 +4988,28 @@ "node": ">= 0.8.0" } }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/p-limit": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -3477,8 +5022,9 @@ }, "node_modules/p-locate": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -3491,8 +5037,9 @@ }, "node_modules/parent-module": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -3502,55 +5049,27 @@ }, "node_modules/path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-key": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/picocolors": { "version": "1.1.1", @@ -3559,8 +5078,9 @@ }, "node_modules/picomatch": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.6" }, @@ -3569,15 +5089,19 @@ } }, "node_modules/possible-typed-array-names": { - "version": "1.0.0", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/postcss": { - "version": "8.4.31", + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, "funding": [ { "type": "opencollective", @@ -3592,20 +5116,19 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" } }, "node_modules/preact": { - "version": "10.26.8", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.26.8.tgz", - "integrity": "sha512-1nMfdFjucm5hKvq0IClqZwK4FJkGXhRrQstOQ3P4vp8HxKrJEMFcY6RdBRVTdfQS/UlnX6gfbPuTvaqx/bDoeQ==", + "version": "10.26.9", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.26.9.tgz", + "integrity": "sha512-SSjF9vcnF27mJK1XyFMNJzFd5u3pQiATFqoaDy03XuN00u4ziveVVEGt5RKJrDR8MHE/wJo9Nnad56RLzS2RMA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -3613,15 +5136,17 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/prop-types": { "version": "15.8.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -3630,14 +5155,17 @@ }, "node_modules/punycode": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/queue-microtask": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -3652,30 +5180,25 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "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==", - "dependencies": { - "loose-envify": "^1.1.0" - }, + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", + "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", + "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" + "scheduler": "^0.26.0" }, "peerDependencies": { - "react": "^18.3.1" + "react": "^19.1.0" } }, "node_modules/react-force-graph-2d": { @@ -3696,7 +5219,8 @@ }, "node_modules/react-is": { "version": "16.13.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-kapsule": { "version": "2.5.7", @@ -3713,17 +5237,19 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.6", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "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", + "es-abstract": "^1.23.9", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -3733,14 +5259,17 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.2", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -3750,62 +5279,57 @@ } }, "node_modules/resolve": { - "version": "1.22.8", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, - "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-from": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, "node_modules/reusify": { - "version": "1.0.4", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, - "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/run-parallel": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -3821,19 +5345,20 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/safe-array-concat": { - "version": "1.1.2", + "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": { @@ -3843,14 +5368,31 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safe-regex-test": { - "version": "1.0.3", + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "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, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -3860,17 +5402,15 @@ } }, "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "dependencies": { - "loose-envify": "^1.1.0" - } + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==" }, "node_modules/semver": { "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "devOptional": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -3880,8 +5420,9 @@ }, "node_modules/set-function-length": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, - "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -3896,8 +5437,9 @@ }, "node_modules/set-function-name": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, - "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -3908,6 +5450,20 @@ "node": ">= 0.4" } }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/sharp": { "version": "0.34.2", "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.2.tgz", @@ -3951,8 +5507,9 @@ }, "node_modules/shebang-command": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -3962,21 +5519,24 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/side-channel": { - "version": "1.0.6", + "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" @@ -3985,15 +5545,57 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/signal-exit": { - "version": "4.1.0", + "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, - "license": "ISC", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, "engines": { - "node": ">=14" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/simple-swizzle": { @@ -4005,14 +5607,6 @@ "is-arrayish": "^0.3.1" } }, - "node_modules/slash": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -4021,89 +5615,66 @@ "node": ">=0.10.0" } }, + "node_modules/stable-hash": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", + "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", + "dev": true + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/streamsearch": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", "engines": { "node": ">=10.0.0" } }, - "node_modules/string-width": { - "version": "5.1.2", + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.11", - "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -4112,15 +5683,29 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string.prototype.trim": { - "version": "1.2.9", + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "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": { - "call-bind": "^1.0.7", + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "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, + "dependencies": { + "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" @@ -4130,22 +5715,28 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.8", + "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" } }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -4158,41 +5749,20 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/strip-json-comments": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -4202,7 +5772,8 @@ }, "node_modules/styled-jsx": { "version": "5.1.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", + "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", "dependencies": { "client-only": "0.0.1" }, @@ -4223,8 +5794,9 @@ }, "node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -4234,8 +5806,9 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4243,15 +5816,29 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/swr": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.3.3.tgz", + "integrity": "sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A==", + "dependencies": { + "dequal": "^2.0.3", + "use-sync-external-store": "^1.4.0" + }, + "peerDependencies": { + "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/tailwindcss": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.8.tgz", - "integrity": "sha512-kjeW8gjdxasbmFKpVGrGd5T4i40mV5J2Rasw48QARfYeQ8YS9x02ON9SFWax3Qf616rt4Cp3nVNIj6Hd1mP3og==" + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.10.tgz", + "integrity": "sha512-P3nr6WkvKV/ONsTzj6Gb57sWPMX29EPNPopo7+FcpkQaNsrNpZ1pv8QmrYI2RqEKD7mlGqLnGovlcYnBK0IqUA==", + "dev": true }, "node_modules/tapable": { - "version": "2.2.1", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", + "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -4273,16 +5860,53 @@ "node": ">=18" } }, - "node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, "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==" }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -4296,20 +5920,22 @@ } }, "node_modules/ts-api-utils": { - "version": "1.3.0", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">=16" + "node": ">=18.12" }, "peerDependencies": { - "typescript": ">=4.2.0" + "typescript": ">=4.8.4" } }, "node_modules/tsconfig-paths": { "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, - "license": "MIT", "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -4319,12 +5945,14 @@ }, "node_modules/tslib": { "version": "2.8.1", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, "node_modules/type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -4332,40 +5960,31 @@ "node": ">= 0.8.0" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/typed-array-buffer": { - "version": "1.0.2", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.1", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -4375,16 +5994,18 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.2", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, - "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" }, "engines": { "node": ">= 0.4" @@ -4394,16 +6015,17 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.6", + "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" @@ -4413,9 +6035,10 @@ } }, "node_modules/typescript": { - "version": "5.4.5", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, - "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -4425,47 +6048,97 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.2", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/undici-types": { - "version": "5.26.5", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true + }, + "node_modules/unrs-resolver": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.9.0.tgz", + "integrity": "sha512-wqaRu4UnzBD2ABTC1kLfBjAqIDZ5YUTr/MLGa7By47JV1bJDSW7jq/ZSLigB7enLe7ubNaJhtnBXgrc/50cEhg==", "dev": true, - "license": "MIT" + "hasInstallScript": true, + "dependencies": { + "napi-postinstall": "^0.2.2" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-android-arm-eabi": "1.9.0", + "@unrs/resolver-binding-android-arm64": "1.9.0", + "@unrs/resolver-binding-darwin-arm64": "1.9.0", + "@unrs/resolver-binding-darwin-x64": "1.9.0", + "@unrs/resolver-binding-freebsd-x64": "1.9.0", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.9.0", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.9.0", + "@unrs/resolver-binding-linux-arm64-gnu": "1.9.0", + "@unrs/resolver-binding-linux-arm64-musl": "1.9.0", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.9.0", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.9.0", + "@unrs/resolver-binding-linux-riscv64-musl": "1.9.0", + "@unrs/resolver-binding-linux-s390x-gnu": "1.9.0", + "@unrs/resolver-binding-linux-x64-gnu": "1.9.0", + "@unrs/resolver-binding-linux-x64-musl": "1.9.0", + "@unrs/resolver-binding-wasm32-wasi": "1.9.0", + "@unrs/resolver-binding-win32-arm64-msvc": "1.9.0", + "@unrs/resolver-binding-win32-ia32-msvc": "1.9.0", + "@unrs/resolver-binding-win32-x64-msvc": "1.9.0" + } }, "node_modules/uri-js": { "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, + "node_modules/use-sync-external-store": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", + "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/uuid": { "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], - "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/which": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -4477,37 +6150,43 @@ } }, "node_modules/which-boxed-primitive": { - "version": "1.0.2", + "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.1.3", + "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": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", + "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-finalizationregistry": "^1.0.2", + "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-collection": "^1.0.1", - "which-typed-array": "^1.1.9" + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -4518,8 +6197,9 @@ }, "node_modules/which-collection": { "version": "1.0.2", + "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", @@ -4534,14 +6214,17 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.15", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "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", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" }, "engines": { @@ -4553,104 +6236,13 @@ }, "node_modules/word-wrap": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "license": "ISC" - }, "node_modules/yallist": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", @@ -4662,8 +6254,9 @@ }, "node_modules/yocto-queue": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, diff --git a/cognee-frontend/package.json b/cognee-frontend/package.json index a9bf808b2..68aef29eb 100644 --- a/cognee-frontend/package.json +++ b/cognee-frontend/package.json @@ -9,24 +9,28 @@ "lint": "next lint" }, "dependencies": { + "@auth0/nextjs-auth0": "^4.6.0", "classnames": "^2.5.1", + "culori": "^4.0.1", "d3-force-3d": "^3.0.6", - "next": "15.3.2", - "ohmy-ui": "^0.0.6", - "react": "^18", - "react-dom": "^18", + "next": "15.3.3", + "react": "^19.0.0", + "react-dom": "^19.0.0", "react-force-graph-2d": "^1.27.1", - "tailwindcss": "^4.1.7", "uuid": "^9.0.1" }, "devDependencies": { + "@eslint/eslintrc": "^3", "@tailwindcss/postcss": "^4.1.7", + "@types/culori": "^4.0.0", "@types/node": "^20", "@types/react": "^18", "@types/react-dom": "^18", "@types/uuid": "^9.0.8", - "eslint": "^8", - "eslint-config-next": "14.2.3", + "eslint": "^9", + "eslint-config-next": "^15.3.3", + "eslint-config-prettier": "^10.1.5", + "tailwindcss": "^4.1.7", "typescript": "^5" } } diff --git a/cognee-frontend/public/images/cognee-logo-with-text.png b/cognee-frontend/public/images/cognee-logo-with-text.png new file mode 100644 index 0000000000000000000000000000000000000000..3d78a48951dbf7df98b8984c7b907fbdb47028bb GIT binary patch literal 12419 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 BZl?eM literal 0 HcmV?d00001 diff --git a/cognee-frontend/public/images/deepnote.svg b/cognee-frontend/public/images/deepnote.svg new file mode 100644 index 000000000..b77585675 --- /dev/null +++ b/cognee-frontend/public/images/deepnote.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cognee-frontend/public/images/lancedb.svg b/cognee-frontend/public/images/lancedb.svg new file mode 100644 index 000000000..02275903c --- /dev/null +++ b/cognee-frontend/public/images/lancedb.svg @@ -0,0 +1,3 @@ + + + diff --git a/cognee-frontend/public/images/neo4j.png b/cognee-frontend/public/images/neo4j.png new file mode 100644 index 0000000000000000000000000000000000000000..d9e807671c6e7b14fc409b2d6b2c56657c465e22 GIT binary patch literal 12733 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 literal 0 HcmV?d00001 diff --git a/cognee-frontend/src/app/(graph)/ActivityLog.tsx b/cognee-frontend/src/app/(graph)/ActivityLog.tsx new file mode 100644 index 000000000..70247415d --- /dev/null +++ b/cognee-frontend/src/app/(graph)/ActivityLog.tsx @@ -0,0 +1,54 @@ +"use client"; + +import { useCallback, useImperativeHandle, useState } from "react"; + +type ActivityLog = { + id: string; + timestamp: number; + activity: string; +}; + +export interface ActivityLogAPI { + updateActivityLog: (activityLog: ActivityLog[]) => void; +} + +interface ActivityLogProps { + ref: React.RefObject; +} + +const formatter = new Intl.DateTimeFormat("en-GB", { dateStyle: "short", timeStyle: "medium" }); + +export default function ActivityLog({ ref }: ActivityLogProps) { + const [activityLog, updateActivityLog] = useState([]); + + const handleActivityLogUpdate = useCallback( + (newActivities: ActivityLog[]) => { + updateActivityLog([...activityLog, ...newActivities]); + + const activityLogContainer = document.getElementById("activityLogContainer"); + + if (activityLogContainer) { + activityLogContainer.scrollTo({ top: 0, behavior: "smooth" }); + } + }, + [activityLog], + ); + + useImperativeHandle(ref, () => ({ + updateActivityLog: handleActivityLogUpdate, + })); + + return ( +
+
+ {activityLog.map((activity) => ( +
+ {formatter.format(activity.timestamp)}: + {activity.activity} +
+ ))} + {!activityLog.length && No activity logged.} +
+
+ ); +} diff --git a/cognee-frontend/src/app/(graph)/CogneeAddWidget.tsx b/cognee-frontend/src/app/(graph)/CogneeAddWidget.tsx index 9d87895dd..434ceb0c6 100644 --- a/cognee-frontend/src/app/(graph)/CogneeAddWidget.tsx +++ b/cognee-frontend/src/app/(graph)/CogneeAddWidget.tsx @@ -1,27 +1,36 @@ "use client"; import { ChangeEvent, useEffect } from "react"; -import { CTAButton, StatusIndicator } from "@/ui/elements"; +import { SearchView } from "@/ui/Partials"; +import { LoadingIndicator } from "@/ui/App"; +import { AddIcon, SearchIcon } from "@/ui/Icons"; +import { CTAButton, GhostButton, Modal, NeutralButton, StatusIndicator } from "@/ui/elements"; + +import { useBoolean } from "@/utils"; import addData from "@/modules/ingestion/addData"; import cognifyDataset from "@/modules/datasets/cognifyDataset"; -import useDatasets from "@/modules/ingestion/useDatasets"; -import getDatasetGraph from '@/modules/datasets/getDatasetGraph'; +import createDataset from "@/modules/datasets/createDataset"; +import getDatasetGraph from "@/modules/datasets/getDatasetGraph"; +import useDatasets, { Dataset } from "@/modules/ingestion/useDatasets"; -export interface NodesAndEdges { +export interface NodesAndLinks { nodes: { id: string; label: string }[]; links: { source: string; target: string; label: string }[]; } +export interface NodesAndEdges { + nodes: { id: string; label: string }[]; + edges: { source: string; target: string; label: string }[]; +} + interface CogneeAddWidgetProps { - onData: (data: NodesAndEdges) => void; + onData: (data: NodesAndLinks) => void; } export default function CogneeAddWidget({ onData }: CogneeAddWidgetProps) { const { datasets, - addDataset, - removeDataset, refreshDatasets, } = useDatasets(); @@ -38,52 +47,113 @@ export default function CogneeAddWidget({ onData }: CogneeAddWidgetProps) { })); } }); - }, [refreshDatasets]); + }, [onData, refreshDatasets]); - const handleAddFiles = (dataset: { id?: string, name?: string }, event: ChangeEvent) => { + const { + value: isProcessingFiles, + setTrue: setProcessingFilesInProgress, + setFalse: setProcessingFilesDone, + } = useBoolean(false); + + const handleAddFiles = (dataset: Dataset, event: ChangeEvent) => { event.stopPropagation(); - if (!event.currentTarget.files) { - throw new Error("Error: No files added to the uploader input."); + if (isProcessingFiles) { + return; } - const files: File[] = Array.from(event.currentTarget.files); + setProcessingFilesInProgress(); + + if (!event.target.files) { + return; + } + + const files: File[] = Array.from(event.target.files); + + if (!files.length) { + return; + } return addData(dataset, files) .then(() => { - console.log("Data added successfully."); - - const onUpdate = (data: any) => { + const onUpdate = (data: NodesAndEdges) => { onData({ - nodes: data.payload.nodes, - links: data.payload.edges, + nodes: data.nodes, + links: data.edges, }); + setProcessingFilesDone(); }; return cognifyDataset(dataset, onUpdate) - .then((data) => console.log(data)); + .then(() => { + refreshDatasets(); + }); }); }; - + + const handleAddFilesNoDataset = (event: ChangeEvent) => { + event.stopPropagation(); + + if (isProcessingFiles) { + return; + } + + setProcessingFilesInProgress(); + + createDataset({ name: "main_dataset" }) + .then((newDataset: Dataset) => { + return handleAddFiles(newDataset, event); + }); + }; + + const { + value: isSearchModalOpen, + setTrue: openSearchModal, + setFalse: closeSearchModal, + } = useBoolean(false); + + const handleSearchClick = () => { + openSearchModal(); + }; + return ( -
+
{datasets.length ? datasets.map((dataset) => ( -
+
{dataset.name}
- - - + Add Data - +
+ + + + + {isProcessingFiles && } + + + + + +
)) : ( - - - + Add Data + + + + + Add Data + {isProcessingFiles && } + )} + +
+ + + + +
+
); } diff --git a/cognee-frontend/src/app/(graph)/CrewAITrigger.tsx b/cognee-frontend/src/app/(graph)/CrewAITrigger.tsx index b3f9b0171..942318821 100644 --- a/cognee-frontend/src/app/(graph)/CrewAITrigger.tsx +++ b/cognee-frontend/src/app/(graph)/CrewAITrigger.tsx @@ -1,4 +1,7 @@ +import { useState } from "react"; import { fetch } from "@/utils"; +import { v4 as uuid4 } from "uuid"; +import { LoadingIndicator } from "@/ui/App"; import { CTAButton, Input } from "@/ui/elements"; interface CrewAIFormPayload extends HTMLFormElement { @@ -6,21 +9,108 @@ interface CrewAIFormPayload extends HTMLFormElement { username2: HTMLInputElement; } -export default function CrewAITrigger() { +interface CrewAITriggerProps { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + onData: (data: any) => void; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + onActivity: (activities: any) => void; +} + +export default function CrewAITrigger({ onData, onActivity }: CrewAITriggerProps) { + const [isCrewAIRunning, setIsCrewAIRunning] = useState(false); + const handleRunCrewAI = (event: React.FormEvent) => { - fetch("/v1/crew-ai/run", { + event.preventDefault(); + const formElements = event.currentTarget; + + const crewAIConfig = { + username1: formElements.username1.value, + username2: formElements.username2.value, + }; + + const websocket = new WebSocket("ws://localhost:8000/api/v1/crewai/subscribe"); + + onActivity([{ id: uuid4(), timestamp: Date.now(), activity: "Dispatching hiring crew agents" }]); + + websocket.onmessage = (event) => { + const data = JSON.parse(event.data); + + if (data.status === "PipelineRunActivity") { + onActivity([data.payload]); + return; + } + + onData({ + nodes: data.payload.nodes, + links: data.payload.edges, + }); + + const nodes_type_map: { [key: string]: number } = {}; + + for (let i = 0; i < data.payload.nodes.length; i++) { + const node = data.payload.nodes[i]; + if (!nodes_type_map[node.type]) { + nodes_type_map[node.type] = 0; + } + nodes_type_map[node.type] += 1; + } + + const activityMessage = Object.entries(nodes_type_map).reduce((message, [type, count]) => { + return `${message}\n | ${type}: ${count}`; + }, "Graph updated:"); + + onActivity([{ + id: uuid4(), + timestamp: Date.now(), + activity: activityMessage, + }]); + + if (data.status === "PipelineRunCompleted") { + websocket.close(); + } + }; + + onData(null); + setIsCrewAIRunning(true); + + return fetch("/v1/crewai/run", { method: "POST", - body: new FormData(event.currentTarget), + body: JSON.stringify(crewAIConfig), + headers: { + "Content-Type": "application/json", + }, }) .then(response => response.json()) - .then((data) => console.log(data)); + .then(() => { + onActivity([{ id: uuid4(), timestamp: Date.now(), activity: "Hiring crew agents made a decision" }]); + }) + .catch(() => { + onActivity([{ id: uuid4(), timestamp: Date.now(), activity: "Hiring crew agents had problems while executing" }]); + }) + .finally(() => { + websocket.close(); + setIsCrewAIRunning(false); + }); }; return ( -
- - - Run CrewAI + +

Cognee Dev Mexican Standoff

+ Agents compare GitHub profiles, and make a decision who is a better developer +
+
+ + +
+
+ + +
+
+ + Start Mexican Standoff + {isCrewAIRunning && } +
); } diff --git a/cognee-frontend/src/app/(graph)/GraphControls.tsx b/cognee-frontend/src/app/(graph)/GraphControls.tsx index 3e2d6c5ac..24948bff7 100644 --- a/cognee-frontend/src/app/(graph)/GraphControls.tsx +++ b/cognee-frontend/src/app/(graph)/GraphControls.tsx @@ -1,15 +1,19 @@ "use client"; import { v4 as uuid4 } from "uuid"; -import classNames from "classnames"; -import { NodeObject } from "react-force-graph-2d"; -import { ChangeEvent, useImperativeHandle, useState } from "react"; +// import classNames from "classnames"; +import { NodeObject, LinkObject } from "react-force-graph-2d"; +import { ChangeEvent, useEffect, useImperativeHandle, useRef, useState } from "react"; import { DeleteIcon } from "@/ui/Icons"; -import { FeedbackForm } from "@/ui/Partials"; +// import { FeedbackForm } from "@/ui/Partials"; import { CTAButton, Input, NeutralButton, Select } from "@/ui/elements"; interface GraphControlsProps { + data?: { + nodes: NodeObject[]; + links: LinkObject[]; + }; isAddNodeFormOpen: boolean; ref: React.RefObject; onFitIntoView: () => void; @@ -21,29 +25,55 @@ export interface GraphControlsAPI { getSelectedNode: () => NodeObject | null; } -type ActivityLog = { - id: string; - timestamp: number; - activity: string; -}[]; +// type ActivityLog = { +// id: string; +// timestamp: number; +// activity: string; +// }; -type NodeProperties = { +type NodeProperty = { id: string; name: string; value: string; -}[]; +}; -export default function GraphControls({ isAddNodeFormOpen, onGraphShapeChange, onFitIntoView, ref }: GraphControlsProps) { +// const formatter = new Intl.DateTimeFormat("en-GB", { dateStyle: "short", timeStyle: "medium" }); + +const DEFAULT_GRAPH_SHAPE = "lr"; + +const GRAPH_SHAPES = [{ + value: "none", + label: "None", +}, { + value: "td", + label: "Top-down", +}, { + value: "bu", + label: "Bottom-up", +}, { + value: "lr", + label: "Left-right", +}, { + value: "rl", + label: "Right-left", +}, { + value: "radialin", + label: "Radial-in", +}, { + value: "radialout", + label: "Radial-out", +}]; + +export default function GraphControls({ data, isAddNodeFormOpen, onGraphShapeChange, onFitIntoView, ref }: GraphControlsProps) { const [selectedNode, setSelectedNode] = useState(null); - const [activityLog, setActivityLog] = useState([]); - const [nodeProperties, setNodeProperties] = useState([]); - const [newProperty, setNewProperty] = useState({ + const [nodeProperties, setNodeProperties] = useState([]); + const [newProperty, setNewProperty] = useState({ id: uuid4(), name: "", value: "", }); - const handlePropertyChange = (property: NodeProperties[0], property_key: string, event: ChangeEvent) => { + const handlePropertyChange = (property: NodeProperty, property_key: string, event: ChangeEvent) => { const value = event.target.value; setNodeProperties(nodeProperties.map((nodeProperty) => (nodeProperty.id === property.id ? {...nodeProperty, [property_key]: value } : nodeProperty))); @@ -58,11 +88,11 @@ export default function GraphControls({ isAddNodeFormOpen, onGraphShapeChange, o } }; - const handlePropertyDelete = (property: NodeProperties[0]) => { + const handlePropertyDelete = (property: NodeProperty) => { setNodeProperties(nodeProperties.filter((nodeProperty) => nodeProperty.id !== property.id)); }; - const handleNewPropertyChange = (property: NodeProperties[0], property_key: string, event: ChangeEvent) => { + const handleNewPropertyChange = (property: NodeProperty, property_key: string, event: ChangeEvent) => { const value = event.target.value; setNewProperty({...property, [property_key]: value }); @@ -73,111 +103,139 @@ export default function GraphControls({ isAddNodeFormOpen, onGraphShapeChange, o getSelectedNode: () => selectedNode, })); - const [selectedTab, setSelectedTab] = useState("nodeDetails"); + // const [selectedTab, setSelectedTab] = useState("nodeDetails"); const handleGraphShapeControl = (event: ChangeEvent) => { + setIsAuthShapeChangeEnabled(false); onGraphShapeChange(event.target.value); }; + const [isAuthShapeChangeEnabled, setIsAuthShapeChangeEnabled] = useState(true); + const shapeChangeTimeout = useRef(); + + useEffect(() => { + onGraphShapeChange(DEFAULT_GRAPH_SHAPE); + + const graphShapesNum = GRAPH_SHAPES.length; + + function switchShape(shapeIndex: number) { + if (!isAuthShapeChangeEnabled || !data) { + if (shapeChangeTimeout.current) { + clearTimeout(shapeChangeTimeout.current); + shapeChangeTimeout.current = null; + } + + return; + } + + shapeChangeTimeout.current = setTimeout(() => { + const newValue = GRAPH_SHAPES[shapeIndex].value; + onGraphShapeChange(newValue); + const graphShapeSelectElement = document.getElementById("graph-shape-select") as HTMLSelectElement; + graphShapeSelectElement.value = newValue; + + switchShape((shapeIndex + 1) % graphShapesNum); + }, 5000) as unknown as number; + }; + + switchShape(0); + + setTimeout(() => { + onFitIntoView(); + }, 500); + + return () => { + if (shapeChangeTimeout.current) { + clearTimeout(shapeChangeTimeout.current); + shapeChangeTimeout.current = null; + } + }; + }, [data, isAuthShapeChangeEnabled, onFitIntoView, onGraphShapeChange]); + return ( <> -
- - - */} + {/* + */}
- {selectedTab === "nodeDetails" && ( - <> -
- - -
+ {/* {selectedTab === "nodeDetails" && ( */} + <> +
+ + + Fit Graph into View +
- Fit Graph into View - {isAddNodeFormOpen ? ( -
{}}> -
- Source Node ID: - + {isAddNodeFormOpen ? ( + {}}> +
+ Source Node ID: + +
+
+ {nodeProperties.map((property) => ( +
+ + + +
+ ))} +
+ + + Add
-
- {nodeProperties.map((property) => ( -
- - - +
+ Add Node + + ) : ( + selectedNode ? ( +
+
+
+ ID: + {selectedNode.id} +
+
+ Label: + {selectedNode.label} +
+ + {Object.entries(selectedNode.properties).map(([key, value]) => ( +
+ {key.charAt(0).toUpperCase() + key.slice(1)}: + {typeof value === "object" ? JSON.stringify(value) : value as string}
))} -
- - - Add -
- Add Node - - ) : ( - selectedNode ? ( -
-
-
- ID: - {selectedNode.id} -
- {Object.entries(selectedNode.properties).map(([key, value]) => ( -
- {key}: - {typeof value === "object" ? JSON.stringify(value) : value as string} -
- ))} -
- - {}}>Edit Node -
- ) : ( - No node selected. - ) - )} - - )} - - {selectedTab === "activityLog" && ( -
- {activityLog.map((activity) => ( -
- {activity.timestamp} - {activity.activity} + {/* {}}>Edit Node */}
- ))} - {!activityLog.length && No activity logged.} -
- )} + ) : ( + No node selected. + ) + )} + + {/* )} */} - {selectedTab === "feedback" && ( + {/* {selectedTab === "feedback" && (
{}} />
- )} + )} */}
); diff --git a/cognee-frontend/src/app/(graph)/GraphLegend.tsx b/cognee-frontend/src/app/(graph)/GraphLegend.tsx new file mode 100644 index 000000000..2939b9240 --- /dev/null +++ b/cognee-frontend/src/app/(graph)/GraphLegend.tsx @@ -0,0 +1,25 @@ +import { NodeObject } from "react-force-graph-2d"; +import getColorForNodeType from './getColorForNodeType'; + +interface GraphLegendProps { + data?: NodeObject[]; +} + +export default function GraphLegend({ data }: GraphLegendProps) { + const legend: Set = new Set(); + + for (let i = 0; i < Math.min(data?.length || 0, 100); i++) { + legend.add(data![i].type); + } + + return ( +
+ {Array.from(legend).map((nodeType) => ( +
+ + {nodeType} +
+ ))} +
+ ); +} diff --git a/cognee-frontend/src/app/(graph)/GraphView.tsx b/cognee-frontend/src/app/(graph)/GraphView.tsx index b74260723..2435e055c 100644 --- a/cognee-frontend/src/app/(graph)/GraphView.tsx +++ b/cognee-frontend/src/app/(graph)/GraphView.tsx @@ -1,24 +1,24 @@ "use client"; -import { forceCollide, forceManyBody } from "d3-force-3d"; -import { useEffect, useRef, useState } from "react"; -import ForceGraph, { ForceGraphMethods, LinkObject, NodeObject } from "react-force-graph-2d"; +import { useCallback, useRef, useState, MutableRefObject } from "react"; +import Link from "next/link"; import { TextLogo } from "@/ui/App"; import { Divider } from "@/ui/Layout"; import { Footer } from "@/ui/Partials"; -import CrewAITrigger from "./CrewAITrigger"; -import CogneeAddWidget, { NodesAndEdges } from "./CogneeAddWidget"; +import GraphLegend from "./GraphLegend"; +import { DiscordIcon, GithubIcon } from "@/ui/Icons"; +import ActivityLog, { ActivityLogAPI } from "./ActivityLog"; import GraphControls, { GraphControlsAPI } from "./GraphControls"; +import CogneeAddWidget, { NodesAndLinks } from "./CogneeAddWidget"; +import GraphVisualization, { GraphVisualizationAPI } from "./GraphVisualization"; import { useBoolean } from "@/utils"; -// import exampleData from "./example_data.json"; - interface GraphNode { id: string | number; label: string; - properties?: {}; + properties?: object; } interface GraphData { @@ -29,246 +29,95 @@ interface GraphData { export default function GraphView() { const { value: isAddNodeFormOpen, - setTrue: enableAddNodeForm, - setFalse: disableAddNodeForm, } = useBoolean(false); - const [data, updateData] = useState(null); + const [data, updateData] = useState(); - const onDataChange = (newData: NodesAndEdges) => { - if (data === null) { - updateData({ - nodes: newData.nodes, - links: newData.links, - }); - } else { - updateData({ - nodes: [...data.nodes, ...newData.nodes], - links: [...data.links, ...newData.links], - }); - } - }; - - const graphRef = useRef(); - - const graphControls = useRef(null); - - const handleNodeClick = (node: NodeObject) => { - graphControls.current?.setSelectedNode(node); - graphRef.current?.d3ReheatSimulation(); - }; - - const textSize = 6; - const nodeSize = 15; - const addNodeDistanceFromSourceNode = 15; - - const handleBackgroundClick = (event: MouseEvent) => { - const graphBoundingBox = document.getElementById("graph-container")?.querySelector("canvas")?.getBoundingClientRect(); - const x = event.clientX - graphBoundingBox!.x; - const y = event.clientY - graphBoundingBox!.y; - - const graphClickCoords = graphRef.current!.screen2GraphCoords(x, y); - - const selectedNode = graphControls.current?.getSelectedNode(); - - if (!selectedNode) { + const onDataChange = useCallback((newData: NodesAndLinks) => { + if (newData === null) { + // Requests for resetting the data + updateData(undefined); return; } - const distanceFromAddNode = Math.sqrt( - Math.pow(graphClickCoords.x - (selectedNode!.x! + addNodeDistanceFromSourceNode), 2) - + Math.pow(graphClickCoords.y - (selectedNode!.y! + addNodeDistanceFromSourceNode), 2) - ); - - if (distanceFromAddNode <= 10) { - enableAddNodeForm(); - } else { - disableAddNodeForm(); - graphControls.current?.setSelectedNode(null); - } - }; - - function renderNode(node: NodeObject, ctx: CanvasRenderingContext2D, globalScale: number) { - const selectedNode = graphControls.current?.getSelectedNode(); - - ctx.save(); - - if (node.id === selectedNode?.id) { - ctx.fillStyle = "gray"; - - ctx.beginPath(); - ctx.arc(node.x! + addNodeDistanceFromSourceNode, node.y! + addNodeDistanceFromSourceNode, 10, 0, 2 * Math.PI); - ctx.fill(); - - ctx.beginPath(); - ctx.moveTo(node.x! + addNodeDistanceFromSourceNode - 5, node.y! + addNodeDistanceFromSourceNode) - ctx.lineTo(node.x! + addNodeDistanceFromSourceNode - 5 + 10, node.y! + addNodeDistanceFromSourceNode); - ctx.stroke(); - - ctx.beginPath(); - ctx.moveTo(node.x! + addNodeDistanceFromSourceNode, node.y! + addNodeDistanceFromSourceNode - 5) - ctx.lineTo(node.x! + addNodeDistanceFromSourceNode, node.y! + addNodeDistanceFromSourceNode - 5 + 10); - ctx.stroke(); + if (!newData.nodes.length && !newData.links.length) { + return; } - // ctx.beginPath(); - // ctx.arc(node.x, node.y, nodeSize, 0, 2 * Math.PI); - // ctx.fill(); + updateData(newData); + }, []); - // draw text label (with background rect) - const textPos = { - x: node.x!, - y: node.y!, - }; - - ctx.translate(textPos.x, textPos.y); - ctx.textAlign = "center"; - ctx.textBaseline = "middle"; - ctx.fillStyle = "#333333"; - ctx.font = `${textSize}px Sans-Serif`; - ctx.fillText(node.label, 0, 0); + const graphRef = useRef(); - ctx.restore(); - } + const graphControls = useRef(); - function renderLink(link: LinkObject, ctx: CanvasRenderingContext2D) { - const MAX_FONT_SIZE = 4; - const LABEL_NODE_MARGIN = nodeSize * 1.5; + const activityLog = useRef(); - const start = link.source; - const end = link.target; - - // ignore unbound links - if (typeof start !== "object" || typeof end !== "object") return; - - const textPos = { - x: start.x! + (end.x! - start.x!) / 2, - y: start.y! + (end.y! - start.y!) / 2, - }; - - const relLink = { x: end.x! - start.x!, y: end.y! - start.y! }; - - const maxTextLength = Math.sqrt(Math.pow(relLink.x, 2) + Math.pow(relLink.y, 2)) - LABEL_NODE_MARGIN * 2; - - let textAngle = Math.atan2(relLink.y, relLink.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); - - const label = link.label - - // estimate fontSize to fit in link length - ctx.font = "1px Sans-Serif"; - const fontSize = Math.min(MAX_FONT_SIZE, maxTextLength / ctx.measureText(label).width); - ctx.font = `${fontSize}px Sans-Serif`; - const textWidth = ctx.measureText(label).width; - const bckgDimensions = [textWidth, fontSize].map(n => n + fontSize * 0.2); // some padding - - // draw text label (with background rect) - ctx.save(); - ctx.translate(textPos.x, textPos.y); - ctx.rotate(textAngle); - - ctx.fillStyle = "rgba(255, 255, 255, 0.8)"; - ctx.fillRect(- bckgDimensions[0] / 2, - bckgDimensions[1] / 2, bckgDimensions[0], bckgDimensions[1]); - - ctx.textAlign = "center"; - ctx.textBaseline = "middle"; - ctx.fillStyle = "darkgrey"; - ctx.fillText(label, 0, 0); - ctx.restore(); - } - - function handleDagError(loopNodeIds: (string | number)[]) { - console.log(loopNodeIds); - } - - useEffect(() => { - // add collision force - graphRef.current!.d3Force("collision", forceCollide(nodeSize * 1.5)); - graphRef.current!.d3Force("charge", forceManyBody().strength(-1500).distanceMin(300).distanceMax(900)); - }, [data]); - - const [graphShape, setGraphShape] = useState(undefined); - return (
-
+
+ + + + Cognee Home + + + + + + + +
-
- {data ? ( - } + data={data} + graphControls={graphControls as MutableRefObject} + /> - nodeLabel="label" - nodeRelSize={nodeSize} - nodeCanvasObject={renderNode} - nodeCanvasObjectMode={() => "after"} - nodeAutoColorBy="group" +
+
+ +
+ {/*
+ activityLog.current?.updateActivityLog(activities)} /> +
*/} +
+

Activity Log

+ } /> +
+
- linkLabel="label" - linkCanvasObject={renderLink} - linkCanvasObjectMode={() => "after"} - linkDirectionalArrowLength={3.5} - linkDirectionalArrowRelPos={1} - - onNodeClick={handleNodeClick} - onBackgroundClick={handleBackgroundClick} - d3VelocityDecay={0.3} - /> - ) : ( - "after"} - nodeAutoColorBy="group" - - linkLabel="label" - linkCanvasObject={renderLink} - linkCanvasObjectMode={() => "after"} - linkDirectionalArrowLength={3.5} - linkDirectionalArrowRelPos={1} +
+
+ } + isAddNodeFormOpen={isAddNodeFormOpen} + onFitIntoView={() => graphRef.current!.zoomToFit(1000, 50)} + onGraphShapeChange={(shape) => graphRef.current!.setGraphShape(shape)} /> +
+ {data?.nodes.length && ( +
+ +
)}
- -
- - -
- -
- graphRef.current?.zoomToFit(1000, 50)} - onGraphShapeChange={setGraphShape} - /> -
-
- Nodes: {data?.nodes.length} - Edges: {data?.links.length} -
+ {(data?.nodes.length || data?.links.length) && ( +
+ Nodes: {data?.nodes.length || 0} + Edges: {data?.links.length || 0} +
+ )}
diff --git a/cognee-frontend/src/app/(graph)/GraphVisualization.tsx b/cognee-frontend/src/app/(graph)/GraphVisualization.tsx new file mode 100644 index 000000000..0255a27fa --- /dev/null +++ b/cognee-frontend/src/app/(graph)/GraphVisualization.tsx @@ -0,0 +1,226 @@ +"use client"; + +import { MutableRefObject, useEffect, useImperativeHandle, useRef, useState } from "react"; +import { forceCollide, forceManyBody } from "d3-force-3d"; +import ForceGraph, { ForceGraphMethods, GraphData, LinkObject, NodeObject } from "react-force-graph-2d"; +import { GraphControlsAPI } from "./GraphControls"; +import getColorForNodeType from "./getColorForNodeType"; + +interface GraphVisuzaliationProps { + ref: MutableRefObject; + data?: GraphData; + graphControls: MutableRefObject; +} + +export interface GraphVisualizationAPI { + zoomToFit: ForceGraphMethods["zoomToFit"]; + setGraphShape: (shape: string) => void; +} + +export default function GraphVisualization({ ref, data, graphControls }: GraphVisuzaliationProps) { + const textSize = 6; + const nodeSize = 15; + // const addNodeDistanceFromSourceNode = 15; + + const handleNodeClick = (node: NodeObject) => { + graphControls.current?.setSelectedNode(node); + // ref.current?.d3ReheatSimulation() + } + + const handleBackgroundClick = (/* event: MouseEvent */) => { + const selectedNode = graphControls.current?.getSelectedNode(); + + if (!selectedNode) { + return; + } + + graphControls.current?.setSelectedNode(null); + + // const graphBoundingBox = document.getElementById("graph-container")?.querySelector("canvas")?.getBoundingClientRect(); + // const x = event.clientX - graphBoundingBox!.x; + // const y = event.clientY - graphBoundingBox!.y; + + // const graphClickCoords = graphRef.current!.screen2GraphCoords(x, y); + + // const distanceFromAddNode = Math.sqrt( + // Math.pow(graphClickCoords.x - (selectedNode!.x! + addNodeDistanceFromSourceNode), 2) + // + Math.pow(graphClickCoords.y - (selectedNode!.y! + addNodeDistanceFromSourceNode), 2) + // ); + + // if (distanceFromAddNode <= 10) { + // enableAddNodeForm(); + // } else { + // disableAddNodeForm(); + // graphControls.current?.setSelectedNode(null); + // } + }; + + function renderNode(node: NodeObject, ctx: CanvasRenderingContext2D, globalScale: number, renderType: string = "replace") { + // const selectedNode = graphControls.current?.getSelectedNode(); + + ctx.save(); + + // if (node.id === selectedNode?.id) { + // ctx.fillStyle = "gray"; + + // ctx.beginPath(); + // ctx.arc(node.x! + addNodeDistanceFromSourceNode, node.y! + addNodeDistanceFromSourceNode, 10, 0, 2 * Math.PI); + // ctx.fill(); + + // ctx.beginPath(); + // ctx.moveTo(node.x! + addNodeDistanceFromSourceNode - 5, node.y! + addNodeDistanceFromSourceNode) + // ctx.lineTo(node.x! + addNodeDistanceFromSourceNode - 5 + 10, node.y! + addNodeDistanceFromSourceNode); + // ctx.stroke(); + + // ctx.beginPath(); + // ctx.moveTo(node.x! + addNodeDistanceFromSourceNode, node.y! + addNodeDistanceFromSourceNode - 5) + // ctx.lineTo(node.x! + addNodeDistanceFromSourceNode, node.y! + addNodeDistanceFromSourceNode - 5 + 10); + // ctx.stroke(); + // } + + if (renderType === "replace") { + ctx.beginPath(); + ctx.fillStyle = getColorForNodeType(node.type); + ctx.arc(node.x!, node.y!, nodeSize, 0, 2 * Math.PI); + ctx.fill(); + } + + // draw text label (with background rect) + const textPos = { + x: node.x!, + y: node.y!, + }; + + ctx.translate(textPos.x, textPos.y); + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + ctx.fillStyle = "#333333"; + ctx.font = `${textSize}px Sans-Serif`; + ctx.fillText(node.label, 0, 0); + + ctx.restore(); + } + + function renderLink(link: LinkObject, ctx: CanvasRenderingContext2D) { + const MAX_FONT_SIZE = 4; + const LABEL_NODE_MARGIN = nodeSize * 1.5; + + const start = link.source; + const end = link.target; + + // ignore unbound links + if (typeof start !== "object" || typeof end !== "object") return; + + const textPos = { + x: start.x! + (end.x! - start.x!) / 2, + y: start.y! + (end.y! - start.y!) / 2, + }; + + const relLink = { x: end.x! - start.x!, y: end.y! - start.y! }; + + const maxTextLength = Math.sqrt(Math.pow(relLink.x, 2) + Math.pow(relLink.y, 2)) - LABEL_NODE_MARGIN * 2; + + let textAngle = Math.atan2(relLink.y, relLink.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); + + const label = link.label + + // estimate fontSize to fit in link length + ctx.font = "1px Sans-Serif"; + const fontSize = Math.min(MAX_FONT_SIZE, maxTextLength / ctx.measureText(label).width); + ctx.font = `${fontSize}px Sans-Serif`; + const textWidth = ctx.measureText(label).width; + const bckgDimensions = [textWidth, fontSize].map(n => n + fontSize * 0.2); // some padding + + // draw text label (with background rect) + ctx.save(); + ctx.translate(textPos.x, textPos.y); + ctx.rotate(textAngle); + + ctx.fillStyle = "rgba(255, 255, 255, 0.8)"; + ctx.fillRect(- bckgDimensions[0] / 2, - bckgDimensions[1] / 2, bckgDimensions[0], bckgDimensions[1]); + + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + ctx.fillStyle = "darkgrey"; + ctx.fillText(label, 0, 0); + ctx.restore(); + } + + function renderInitialNode(node: NodeObject, ctx: CanvasRenderingContext2D, globalScale: number) { + renderNode(node, ctx, globalScale, "after"); + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + function handleDagError(loopNodeIds: (string | number)[]) {} + + const graphRef = useRef(); + + useEffect(() => { + if (typeof window !== "undefined" && data && graphRef.current) { + // add collision force + graphRef.current.d3Force("collision", forceCollide(nodeSize * 1.5)); + graphRef.current.d3Force("charge", forceManyBody().strength(-1500).distanceMin(300).distanceMax(900)); + } + }, [data, graphRef]); + + const [graphShape, setGraphShape] = useState(); + + useImperativeHandle(ref, () => ({ + zoomToFit: graphRef.current!.zoomToFit, + setGraphShape: setGraphShape, + })); + + return ( +
+ {(data && typeof window !== "undefined") ? ( + "replace"} + + linkLabel="label" + linkCanvasObject={renderLink} + linkCanvasObjectMode={() => "after"} + linkDirectionalArrowLength={3.5} + linkDirectionalArrowRelPos={1} + + onNodeClick={handleNodeClick} + onBackgroundClick={handleBackgroundClick} + d3VelocityDecay={0.3} + /> + ) : ( + "after"} + nodeAutoColorBy="type" + + linkLabel="label" + linkCanvasObject={renderLink} + linkCanvasObjectMode={() => "after"} + linkDirectionalArrowLength={3.5} + linkDirectionalArrowRelPos={1} + /> + )} +
+ ); +} diff --git a/cognee-frontend/src/app/(graph)/getColorForNodeType.ts b/cognee-frontend/src/app/(graph)/getColorForNodeType.ts new file mode 100644 index 000000000..4edaa334d --- /dev/null +++ b/cognee-frontend/src/app/(graph)/getColorForNodeType.ts @@ -0,0 +1,22 @@ +import colors from "tailwindcss/colors"; +import { formatHex } from "culori"; + +const NODE_COLORS = { + TextDocument: formatHex(colors.blue[500]), + DocumentChunk: formatHex(colors.green[500]), + TextSummary: formatHex(colors.orange[500]), + Entity: formatHex(colors.yellow[300]), + EntityType: formatHex(colors.purple[800]), + NodeSet: formatHex(colors.indigo[300]), + GitHubUser: formatHex(colors.gray[300]), + Comment: formatHex(colors.amber[500]), + Issue: formatHex(colors.red[500]), + Repository: formatHex(colors.stone[400]), + Commit: formatHex(colors.teal[500]), + File: formatHex(colors.emerald[500]), + FileChange: formatHex(colors.sky[500]), +}; + +export default function getColorForNodeType(type: string) { + return NODE_COLORS[type as keyof typeof NODE_COLORS] || colors.gray[500]; +} diff --git a/cognee-frontend/src/app/auth/AuthForm.tsx b/cognee-frontend/src/app/auth/AuthForm.tsx new file mode 100644 index 000000000..2b6228f50 --- /dev/null +++ b/cognee-frontend/src/app/auth/AuthForm.tsx @@ -0,0 +1,82 @@ +"use client"; + +import { useState } from "react"; +import { fetch, useBoolean } from "@/utils"; +import { CTAButton, Input } from "@/ui/elements"; +import { LoadingIndicator } from '@/ui/App'; + +interface AuthFormPayload extends HTMLFormElement { + email: HTMLInputElement; + password: HTMLInputElement; +} + +const errorsMap = { + LOGIN_BAD_CREDENTIALS: "Invalid username or password", + REGISTER_USER_ALREADY_EXISTS: "User already exists", +}; + +const defaultFormatPayload: (data: { email: string; password: string; }) => object = (data) => data; + +export default function AuthForm({ + submitButtonText = "Sign in", + authUrl = "/v1/auth/login", + formatPayload = defaultFormatPayload, + onSignInSuccess = () => window.location.href = "/", +}) { + const { + value: isSigningIn, + setTrue: disableSignIn, + setFalse: enableSignIn, + } = useBoolean(false); + + const [signInError, setSignInError] = useState(null); + + const signIn = (event: React.FormEvent) => { + event.preventDefault(); + const formElements = event.currentTarget; + + // Backend expects username and password fields + const authCredentials = { + email: formElements.email.value, + password: formElements.password.value, + }; + + setSignInError(null); + disableSignIn(); + + const formattedPayload = formatPayload(authCredentials); + + fetch(authUrl, { + method: "POST", + body: formattedPayload instanceof URLSearchParams ? formattedPayload.toString() : JSON.stringify(formattedPayload), + headers: { + "Content-Type": formattedPayload instanceof URLSearchParams ? "application/x-www-form-urlencoded" : "application/json", + }, + }) + .then(() => { + onSignInSuccess(); + }) + .catch(error => setSignInError(errorsMap[error.detail as keyof typeof errorsMap] || error.message)) + .finally(() => enableSignIn()); + }; + + return ( +
+ + + + {submitButtonText} + {isSigningIn && } + + {signInError && ( + {signInError} + )} +
+ ); +} diff --git a/cognee-frontend/src/app/auth/AuthPage.tsx b/cognee-frontend/src/app/auth/AuthPage.tsx index 9ec563028..b37c41eff 100644 --- a/cognee-frontend/src/app/auth/AuthPage.tsx +++ b/cognee-frontend/src/app/auth/AuthPage.tsx @@ -1,24 +1,40 @@ -import { TextLogo } from "@/ui/App"; -import { Divider } from "@/ui/Layout"; -import Footer from "@/ui/Partials/Footer/Footer"; -import SignInForm from "@/ui/Partials/SignInForm/SignInForm"; +import Link from "next/link"; + +import { auth0 } from "@/modules/auth/auth0"; + +import { CTAButton } from "@/ui/elements"; + + +export default async function AuthPage() { + const session = await auth0.getSession(); -export default function AuthPage() { return ( -
-
- +
+

Welcome to cognee

+ {session ? ( +
+ Hello, {session.user.name}! + + + Log out + +
- -
-
-

Sign in

- -
+ ) : ( +
+ + + Sign up + + + + + + Log in + +
-
-
-
-
+ )} +
) } diff --git a/cognee-frontend/src/app/auth/layout.tsx b/cognee-frontend/src/app/auth/layout.tsx new file mode 100644 index 000000000..66b32e86c --- /dev/null +++ b/cognee-frontend/src/app/auth/layout.tsx @@ -0,0 +1,31 @@ +import type { Metadata } from "next"; +import { TextLogo } from "@/ui/App"; +import { Divider } from "@/ui/Layout"; +import { Footer } from "@/ui/Partials"; + +export const metadata: Metadata = { + title: "Cognee", + description: "Cognee authentication", +}; + +export default function AuthLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( +
+
+ +
+ + + {children} + + +
+
+
+
+ ); +} diff --git a/cognee-frontend/src/app/auth/login/LoginPage.tsx b/cognee-frontend/src/app/auth/login/LoginPage.tsx new file mode 100644 index 000000000..76c00107f --- /dev/null +++ b/cognee-frontend/src/app/auth/login/LoginPage.tsx @@ -0,0 +1,40 @@ +"use client"; + +import Link from "next/link"; +import Image from "next/image"; + +import AuthForm from "../AuthForm"; + +export default function LoginPage() { + return ( +
+
+ Cognee logo + +

Welcome

+

Log in to continue with Cognee

+ + + +

+ + {"Or go to Sign up ->"} + +

+
+
+ ); +} + +function formatPayload(data: { email: string, password: string }) { + const payload = new URLSearchParams(); + + payload.append("username", data.email); + payload.append("password", data.password); + + return payload; +} diff --git a/cognee-frontend/src/app/auth/login/page.tsx b/cognee-frontend/src/app/auth/login/page.tsx new file mode 100644 index 000000000..f81523088 --- /dev/null +++ b/cognee-frontend/src/app/auth/login/page.tsx @@ -0,0 +1 @@ +export { default } from "./LoginPage"; diff --git a/cognee-frontend/src/app/auth/page.tsx b/cognee-frontend/src/app/auth/page.tsx index c1a940de9..c62393502 100644 --- a/cognee-frontend/src/app/auth/page.tsx +++ b/cognee-frontend/src/app/auth/page.tsx @@ -1 +1 @@ -export { default } from './AuthPage'; +export { default } from "./AuthPage"; diff --git a/cognee-frontend/src/app/auth/signup/SignUpPage.tsx b/cognee-frontend/src/app/auth/signup/SignUpPage.tsx new file mode 100644 index 000000000..7b52dc7b0 --- /dev/null +++ b/cognee-frontend/src/app/auth/signup/SignUpPage.tsx @@ -0,0 +1,31 @@ +"use client"; + +import Link from "next/link"; +import Image from "next/image"; + +import AuthForm from "../AuthForm"; + +export default function SignUpPage() { + return ( +
+
+ Cognee logo + +

Welcome

+

Sign up to start using Cognee

+ + window.location.href = "/auth/login"} + /> + +

+ + {"Or go to Login ->"} + +

+
+
+ ); +} diff --git a/cognee-frontend/src/app/auth/signup/page.tsx b/cognee-frontend/src/app/auth/signup/page.tsx new file mode 100644 index 000000000..a29e66c33 --- /dev/null +++ b/cognee-frontend/src/app/auth/signup/page.tsx @@ -0,0 +1 @@ +export { default } from "./SignUpPage"; diff --git a/cognee-frontend/src/app/auth/token/route.ts b/cognee-frontend/src/app/auth/token/route.ts new file mode 100644 index 000000000..780ba45c8 --- /dev/null +++ b/cognee-frontend/src/app/auth/token/route.ts @@ -0,0 +1,17 @@ +import { redirect } from "next/navigation"; +import { auth0 } from "@/modules/auth/auth0"; + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +export async function GET(request: Request) { + const accessToken = await auth0.getAccessToken(); + + if (accessToken) { + const response = new Response(); + + response.headers.set("Set-Cookie", `${process.env.AUTH_TOKEN_COOKIE_NAME}=${accessToken.token}; Expires=${new Date(accessToken.expiresAt * 1000).toUTCString()}; Path=/; SameSite=Lax; Domain=localhost; HttpOnly`); + + return response; + } else { + redirect("/auth"); + } +} diff --git a/cognee-frontend/src/app/layout.tsx b/cognee-frontend/src/app/layout.tsx index 3314e4780..efb82e537 100644 --- a/cognee-frontend/src/app/layout.tsx +++ b/cognee-frontend/src/app/layout.tsx @@ -5,8 +5,8 @@ import "./globals.css"; const inter = Inter({ subsets: ["latin"] }); export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", + title: "Cognee", + description: "Cognee Dev Mexican Standoff", }; export default function RootLayout({ diff --git a/cognee-frontend/src/app/page copy.tsx b/cognee-frontend/src/app/page copy.tsx deleted file mode 100644 index 21847fd75..000000000 --- a/cognee-frontend/src/app/page copy.tsx +++ /dev/null @@ -1,130 +0,0 @@ -'use client'; - -import { useCallback, useEffect, useState } from 'react'; -import styles from "./page.module.css"; -import { GhostButton, Notification, NotificationContainer, Spacer, Stack, Text, useBoolean, useNotifications } from 'ohmy-ui'; -import useDatasets from '@/modules/ingestion/useDatasets'; -import DataView, { Data } from '@/modules/ingestion/DataView'; -import DatasetsView from '@/modules/ingestion/DatasetsView'; -import classNames from 'classnames'; -import addData from '@/modules/ingestion/addData'; -import cognifyDataset from '@/modules/datasets/cognifyDataset'; -import getDatasetData from '@/modules/datasets/getDatasetData'; -import { Footer, SettingsModal } from '@/ui/Partials'; -import { TextLogo } from '@/ui/App'; -import { SettingsIcon } from '@/ui/Icons'; - -export default function Home() { - const { - datasets, - refreshDatasets, - } = useDatasets(); - - const [datasetData, setDatasetData] = useState([]); - const [selectedDataset, setSelectedDataset] = useState(null); - - useEffect(() => { - refreshDatasets(); - }, [refreshDatasets]); - - const openDatasetData = (dataset: { id: string }) => { - getDatasetData(dataset) - .then(setDatasetData) - .then(() => setSelectedDataset(dataset.id)); - }; - - const closeDatasetData = () => { - setDatasetData([]); - setSelectedDataset(null); - }; - - const { notifications, showNotification } = useNotifications(); - - const onDataAdd = useCallback((dataset: { id: string }, files: File[]) => { - return addData(dataset, files) - .then(() => { - showNotification("Data added successfully. Please run \"Cognify\" when ready.", 5000); - openDatasetData(dataset); - }); - }, [showNotification]) - - const onDatasetCognify = useCallback((dataset: { id: string, name: string }) => { - showNotification(`Cognification started for dataset "${dataset.name}".`, 5000); - - return cognifyDataset(dataset) - .then(() => { - showNotification(`Dataset "${dataset.name}" cognified.`, 5000); - }) - .catch(() => { - showNotification(`Dataset "${dataset.name}" cognification failed. Please try again.`, 5000); - }); - }, [showNotification]); - - const onCognify = useCallback(() => { - const dataset = datasets.find((dataset) => dataset.id === selectedDataset); - return onDatasetCognify({ - id: dataset!.id, - name: dataset!.name, - }); - }, [datasets, onDatasetCognify, selectedDataset]); - - const { - value: isSettingsModalOpen, - setTrue: openSettingsModal, - setFalse: closeSettingsModal, - } = useBoolean(false); - - return ( -
- - - - - - - - - - -
-
0, - })}> - -
- {datasetData.length > 0 && selectedDataset && ( -
- -
- )} -
-
- -
- - - {notifications.map((notification, index: number) => ( - - {notification.message} - - ))} - -
- ); -} diff --git a/cognee-frontend/src/app/page.tsx b/cognee-frontend/src/app/page.tsx index b6bae761a..523a90f6b 100644 --- a/cognee-frontend/src/app/page.tsx +++ b/cognee-frontend/src/app/page.tsx @@ -1 +1,3 @@ export { default } from "./(graph)/GraphView"; + +export const dynamic = "force-dynamic"; diff --git a/cognee-frontend/src/app/wizard/AddStep/AddStep.module.css b/cognee-frontend/src/app/wizard/AddStep/AddStep.module.css deleted file mode 100644 index 8147acc28..000000000 --- a/cognee-frontend/src/app/wizard/AddStep/AddStep.module.css +++ /dev/null @@ -1,8 +0,0 @@ -.files { - width: 100%; - padding: 4px; -} - -.fileSize { - display: block; -} diff --git a/cognee-frontend/src/app/wizard/AddStep/AddStep.tsx b/cognee-frontend/src/app/wizard/AddStep/AddStep.tsx deleted file mode 100644 index 6052ac52c..000000000 --- a/cognee-frontend/src/app/wizard/AddStep/AddStep.tsx +++ /dev/null @@ -1,97 +0,0 @@ -import { useCallback, useState } from 'react'; -import { CTAButton, GhostButton, Stack, Text, TrashIcon, UploadIcon, UploadInput, useBoolean } from 'ohmy-ui'; -import { Divider } from '@/ui/Layout'; -import addData from '@/modules/ingestion/addData'; -import { LoadingIndicator } from '@/ui/App'; -import styles from './AddStep.module.css'; -import { WizardHeading } from '@/ui/Partials/Wizard'; - -interface ConfigStepProps { - onNext: () => void; -} - -export default function AddStep({ onNext }: ConfigStepProps) { - const [files, setFiles] = useState([]); - - const { - value: isUploading, - setTrue: disableUploading, - setFalse: enableUploading, - } = useBoolean(false); - - const uploadFiles = useCallback(() => { - disableUploading() - addData({ name: 'main' }, files) - .then(() => { - onNext(); - }) - .finally(() => enableUploading()); - }, [disableUploading, enableUploading, files, onNext]); - - const addFiles = useCallback((files: File[]) => { - setFiles((existingFiles) => { - const newFiles = files.filter((file) => !existingFiles.some((existingFile) => existingFile.name === file.name)); - - return [...existingFiles, ...newFiles] - }); - }, []); - - const removeFile = useCallback((file: File) => { - setFiles((files) => files.filter((f) => f !== file)); - }, []); - - return ( - - Step 2/3 Add knowledge - - - Cognee lets you process your personal data, books, articles or company data. - Simply add datasets to get started. - - - - - - Upload your data - - - - {files.map((file, index) => ( - -
- {file.name} - - {getBiggestUnitSize(file.size)} - -
- removeFile(file)}> - - -
- ))} -
-
- - - - Next - {isUploading && ( - - )} - - - -
- ) -} - -function getBiggestUnitSize(sizeInBytes: number): string { - const units = ['B', 'KB', 'MB', 'GB']; - - let i = 0; - while (sizeInBytes >= 1024 && i < units.length - 1) { - sizeInBytes /= 1024; - i++; - } - return `${sizeInBytes.toFixed(2)} ${units[i]}`; -} diff --git a/cognee-frontend/src/app/wizard/AddStep/index.ts b/cognee-frontend/src/app/wizard/AddStep/index.ts deleted file mode 100644 index 79a6cbdf5..000000000 --- a/cognee-frontend/src/app/wizard/AddStep/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './AddStep'; diff --git a/cognee-frontend/src/app/wizard/CognifyStep/CognifyStep.tsx b/cognee-frontend/src/app/wizard/CognifyStep/CognifyStep.tsx deleted file mode 100644 index 7d6cdc0ae..000000000 --- a/cognee-frontend/src/app/wizard/CognifyStep/CognifyStep.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { useEffect, useRef } from 'react'; -import { CTAButton, Stack, Text, useBoolean } from 'ohmy-ui'; -import { Divider } from '@/ui/Layout'; -import { CognifyLoadingIndicator } from '@/ui/App'; -import { WizardHeading } from '@/ui/Partials/Wizard'; -import cognifyDataset from '@/modules/datasets/cognifyDataset'; - -interface ConfigStepProps { - onNext: () => void; - dataset: { name: string } -} - -export default function CognifyStep({ onNext, dataset }: ConfigStepProps) { - const { - value: isCognifyRunning, - setFalse: stopCognifyIndicator, - } = useBoolean(true); - const cognifyPromise = useRef>() - - useEffect(() => { - if (cognifyPromise.current) { - return; - } - - cognifyPromise.current = cognifyDataset(dataset) - .then(() => { - stopCognifyIndicator(); - }); - }, [stopCognifyIndicator, dataset]); - - return ( - - Step 3/3 Cognify - - - - - - - - Cognee decomposes your data into facts and connects them in relevant clusters, - so that you can navigate your knowledge better. - - - - Explore data - - - - ) -} diff --git a/cognee-frontend/src/app/wizard/CognifyStep/index.ts b/cognee-frontend/src/app/wizard/CognifyStep/index.ts deleted file mode 100644 index 7bf949986..000000000 --- a/cognee-frontend/src/app/wizard/CognifyStep/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './CognifyStep'; diff --git a/cognee-frontend/src/app/wizard/ConfigStep/ConfigStep.module.css b/cognee-frontend/src/app/wizard/ConfigStep/ConfigStep.module.css deleted file mode 100644 index e69de29bb..000000000 diff --git a/cognee-frontend/src/app/wizard/ConfigStep/ConfigStep.tsx b/cognee-frontend/src/app/wizard/ConfigStep/ConfigStep.tsx deleted file mode 100644 index 8b52b889a..000000000 --- a/cognee-frontend/src/app/wizard/ConfigStep/ConfigStep.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { Stack, Text } from 'ohmy-ui'; -import { Divider } from '@/ui/Layout'; -import Settings from '@/ui/Partials/SettingsModal/Settings'; -import { WizardContent, WizardHeading } from '@/ui/Partials/Wizard'; - -interface ConfigStepProps { - onNext: () => void; -} - -export default function ConfigStep({ onNext }: ConfigStepProps) { - return ( - - Step 1/3 Basic configuration - - - Cognee helps you process your data and create a mind-like structure you can explore. - To get started you need an OpenAI API key. - - - - ) -} diff --git a/cognee-frontend/src/app/wizard/ConfigStep/index.ts b/cognee-frontend/src/app/wizard/ConfigStep/index.ts deleted file mode 100644 index beb48cc3d..000000000 --- a/cognee-frontend/src/app/wizard/ConfigStep/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './ConfigStep'; diff --git a/cognee-frontend/src/app/wizard/ExploreStep/ExploreStep.tsx b/cognee-frontend/src/app/wizard/ExploreStep/ExploreStep.tsx deleted file mode 100644 index 8cc0e422a..000000000 --- a/cognee-frontend/src/app/wizard/ExploreStep/ExploreStep.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { Explorer } from '@/ui/Partials'; -import { Spacer } from 'ohmy-ui'; - -interface ExploreStepProps { - dataset: { name: string }; -} - -export default function ExploreStep({ dataset }: ExploreStepProps) { - return ( - - - - ) -} diff --git a/cognee-frontend/src/app/wizard/ExploreStep/index.ts b/cognee-frontend/src/app/wizard/ExploreStep/index.ts deleted file mode 100644 index f99c485ac..000000000 --- a/cognee-frontend/src/app/wizard/ExploreStep/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './ExploreStep'; diff --git a/cognee-frontend/src/app/wizard/WizardPage.module.css b/cognee-frontend/src/app/wizard/WizardPage.module.css deleted file mode 100644 index c84021655..000000000 --- a/cognee-frontend/src/app/wizard/WizardPage.module.css +++ /dev/null @@ -1,13 +0,0 @@ -.main { - display: flex; - flex-direction: row; - flex-direction: column; - padding: 0; - min-height: 100vh; -} - -.wizardContainer { - flex: 1; - display: flex; - padding: 24px 0; -} diff --git a/cognee-frontend/src/app/wizard/WizardPage.tsx b/cognee-frontend/src/app/wizard/WizardPage.tsx deleted file mode 100644 index b8d064f4e..000000000 --- a/cognee-frontend/src/app/wizard/WizardPage.tsx +++ /dev/null @@ -1,83 +0,0 @@ -import { useState } from 'react'; -import { CloseIcon, GhostButton, Spacer, Stack, useBoolean } from 'ohmy-ui'; -import { TextLogo } from '@/ui/App'; -import { SettingsIcon } from '@/ui/Icons'; -import { Footer, SettingsModal } from '@/ui/Partials'; -import ConfigStep from './ConfigStep'; -import AddStep from './AddStep'; -import CognifyStep from './CognifyStep'; -import ExploreStep from './ExploreStep'; -import { WizardContent } from '@/ui/Partials/Wizard'; - -import styles from './WizardPage.module.css'; -import { Divider } from '@/ui/Layout'; -import { useSearchParams } from 'next/navigation'; - -interface WizardPageProps { - onFinish: () => void; -} - -export default function WizardPage({ - onFinish, -}: WizardPageProps) { - const searchParams = useSearchParams() - const presetWizardStep = searchParams.get('step') as 'config'; - const [wizardStep, setWizardStep] = useState<'config' | 'add' | 'cognify' | 'explore'>(presetWizardStep || 'config'); - const { - value: isSettingsModalOpen, - setTrue: openSettingsModal, - setFalse: closeSettingsModal, - } = useBoolean(false); - - const dataset = { name: 'main' }; - - return ( -
- - - - {wizardStep === 'explore' && ( - - - - )} - {wizardStep === 'add' && ( - - - - )} - - - - -
- {wizardStep === 'config' && ( - - setWizardStep('add')} /> - - )} - - {wizardStep === 'add' && ( - - setWizardStep('cognify')} /> - - )} - - {wizardStep === 'cognify' && ( - - setWizardStep('explore')} /> - - )} - - {wizardStep === 'explore' && ( - - - - )} -
- -
- -
- ) -} diff --git a/cognee-frontend/src/app/wizard/page.tsx b/cognee-frontend/src/app/wizard/page.tsx deleted file mode 100644 index 7d6521e24..000000000 --- a/cognee-frontend/src/app/wizard/page.tsx +++ /dev/null @@ -1,18 +0,0 @@ -'use client'; - -import { Suspense, useCallback } from 'react'; -import WizardPage from './WizardPage'; - -export default function Page() { - const finishWizard = useCallback(() => { - window.location.href = '/'; - }, []); - - return ( - - - - ); -} diff --git a/cognee-frontend/src/middleware.ts b/cognee-frontend/src/middleware.ts new file mode 100644 index 000000000..f53d88367 --- /dev/null +++ b/cognee-frontend/src/middleware.ts @@ -0,0 +1,29 @@ +import { NextResponse, type NextRequest } from "next/server"; +// import { auth0 } from "./modules/auth/auth0"; + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +export async function middleware(request: NextRequest) { + // if (process.env.USE_AUTH0_AUTHORIZATION?.toLowerCase() === "true") { + // if (request.nextUrl.pathname === "/auth/token") { + // return NextResponse.next(); + // } + + // const response: NextResponse = await auth0.middleware(request); + + // return response; + // } + + return NextResponse.next(); +} + +export const config = { + matcher: [ + /* + * Match all request paths except for the ones starting with: + * - _next/static (static files) + * - _next/image (image optimization files) + * - favicon.ico, sitemap.xml, robots.txt (metadata files) + */ + "/((?!_next/static|_next/image|favicon.ico|sitemap.xml|robots.txt).*)", + ], +}; diff --git a/cognee-frontend/src/modules/auth/auth0.ts b/cognee-frontend/src/modules/auth/auth0.ts new file mode 100644 index 000000000..0be0b3f1c --- /dev/null +++ b/cognee-frontend/src/modules/auth/auth0.ts @@ -0,0 +1,8 @@ +import { Auth0Client } from "@auth0/nextjs-auth0/server"; + +export const auth0 = new Auth0Client({ + authorizationParameters: { + scope: "openid profile email", + audience: "cognee:api", + }, +}); diff --git a/cognee-frontend/src/modules/chat/getHistory.ts b/cognee-frontend/src/modules/chat/api/getHistory.ts similarity index 67% rename from cognee-frontend/src/modules/chat/getHistory.ts rename to cognee-frontend/src/modules/chat/api/getHistory.ts index dce914da7..9bab39cbb 100644 --- a/cognee-frontend/src/modules/chat/getHistory.ts +++ b/cognee-frontend/src/modules/chat/api/getHistory.ts @@ -1,8 +1,8 @@ -import { fetch } from '@/utils'; +import { fetch } from "@/utils"; export default function getHistory() { return fetch( - '/v1/search', + "/v1/search", ) .then((response) => response.json()); } diff --git a/cognee-frontend/src/modules/chat/hooks/useChat.ts b/cognee-frontend/src/modules/chat/hooks/useChat.ts new file mode 100644 index 000000000..15f79f296 --- /dev/null +++ b/cognee-frontend/src/modules/chat/hooks/useChat.ts @@ -0,0 +1,123 @@ +import { v4 } from "uuid"; +import { useCallback, useState } from "react"; +import { fetch, useBoolean } from "@/utils"; +import { Dataset } from "@/modules/ingestion/useDatasets"; + +interface ChatMessage { + id: string; + user: "user" | "system"; + text: string; +} + +const fetchMessages = () => { + return fetch("/v1/search/") + .then(response => response.json()); +}; + +const sendMessage = (message: string, searchType: string) => { + return fetch("/v1/search/", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + query: message, + searchType, + datasets: ["main_dataset"], + }), + }) + .then(response => response.json()); +}; + +// Will be used in the future. +// eslint-disable-next-line @typescript-eslint/no-unused-vars +export default function useChat(dataset: Dataset) { + const [messages, setMessages] = useState([]); + + const { + value: isSearchRunning, + setTrue: disableSearchRun, + setFalse: enableSearchRun, + } = useBoolean(false); + + const refreshChat = useCallback(async () => { + const data = await fetchMessages(); + return setMessages(data); + }, []); + + const handleMessageSending = useCallback((message: string, searchType: string) => { + const sentMessageId = v4(); + + setMessages((messages) => [ + ...messages, + { + id: sentMessageId, + user: "user", + text: message, + }, + ]); + + disableSearchRun(); + + return sendMessage(message, searchType) + .then(newMessages => { + setMessages((messages) => [ + ...messages, + ...newMessages.map((newMessage: string | []) => ({ + id: v4(), + user: "system", + text: convertToSearchTypeOutput(newMessage, searchType), + })), + ]); + }) + .catch(() => { + setMessages( + (messages) => messages.filter(message => message.id !== sentMessageId), + ); + throw new Error("Failed to send message. Please try again. If the issue persists, please contact support.") + }) + .finally(() => enableSearchRun()); + }, [disableSearchRun, enableSearchRun]); + + return { + messages, + refreshChat, + sendMessage: handleMessageSending, + isSearchRunning, + }; +} + + +interface Node { + name: string; +} + +interface Relationship { + relationship_name: string; +} + +type InsightMessage = [Node, Relationship, Node]; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function convertToSearchTypeOutput(systemMessage: any[] | any, searchType: string): string { + if (Array.isArray(systemMessage) && systemMessage.length === 1 && typeof(systemMessage[0]) === "string") { + return systemMessage[0]; + } + + switch (searchType) { + case "INSIGHTS": + return systemMessage.map((message: InsightMessage) => { + const [node1, relationship, node2] = message; + if (node1.name && node2.name) { + return `${node1.name} ${relationship.relationship_name} ${node2.name}.`; + } + return ""; + }).join("\n"); + case "SUMMARIES": + return systemMessage.map((message: { text: string }) => message.text).join("\n"); + case "CHUNKS": + return systemMessage.map((message: { text: string }) => message.text).join("\n"); + default: + return systemMessage; + } +} diff --git a/cognee-frontend/src/modules/datasets/cognifyDataset.ts b/cognee-frontend/src/modules/datasets/cognifyDataset.ts index 09d9b85dc..7842334af 100644 --- a/cognee-frontend/src/modules/datasets/cognifyDataset.ts +++ b/cognee-frontend/src/modules/datasets/cognifyDataset.ts @@ -1,43 +1,58 @@ -import { fetch } from '@/utils'; +import { fetch } from "@/utils"; +import getDatasetGraph from "./getDatasetGraph"; +import { Dataset } from "../ingestion/useDatasets"; -export default function cognifyDataset(dataset: { id?: string, name?: string }, onUpdate = (data: []) => {}) { - return fetch('/v1/cognify', { - method: 'POST', +interface GraphData { + nodes: { id: string; label: string; properties?: object }[]; + edges: { source: string; target: string; label: string }[]; +} + +export default async function cognifyDataset(dataset: Dataset, onUpdate: (data: GraphData) => void) { + // const data = await ( + return fetch("/v1/cognify", { + method: "POST", headers: { - 'Content-Type': 'application/json', + "Content-Type": "application/json", }, body: JSON.stringify({ - datasets: [dataset.id || dataset.name], + datasetIds: [dataset.id], + runInBackground: false, }), }) - .then((response) => response.json()) - .then((data) => { - const websocket = new WebSocket(`ws://localhost:8000/api/v1/cognify/subscribe/${data.pipeline_run_id}`); - - websocket.onopen = () => { - websocket.send(JSON.stringify({ - "Authorization": `Bearer ${localStorage.getItem("access_token")}`, - })); - }; - - let isCognifyDone = false; - - websocket.onmessage = (event) => { - const data = JSON.parse(event.data); - onUpdate(data); - - if (data.status === "PipelineRunCompleted") { - isCognifyDone = true; - websocket.close(); - } - }; - - return new Promise(async (resolve) => { - while (!isCognifyDone) { - await new Promise(resolve => setTimeout(resolve, 1000)); - } - - resolve(true); + .then((response) => response.json()) + .then(() => { + return getDatasetGraph(dataset) + .then((data) => { + onUpdate({ + nodes: data.nodes, + edges: data.edges, + }); }); - }); + }); + // ) + + // const websocket = new WebSocket(`ws://localhost:8000/api/v1/cognify/subscribe/${data.pipeline_run_id}`); + + // let isCognifyDone = false; + + // websocket.onmessage = (event) => { + // const data = JSON.parse(event.data); + // onUpdate?.({ + // nodes: data.payload.nodes, + // edges: data.payload.edges, + // }); + + // if (data.status === "PipelineRunCompleted") { + // isCognifyDone = true; + // websocket.close(); + // } + // }; + + // return new Promise(async (resolve) => { + // while (!isCognifyDone) { + // await new Promise(resolve => setTimeout(resolve, 1000)); + // } + + // resolve(true); + // }); } diff --git a/cognee-frontend/src/modules/datasets/createDataset.ts b/cognee-frontend/src/modules/datasets/createDataset.ts new file mode 100644 index 000000000..661240036 --- /dev/null +++ b/cognee-frontend/src/modules/datasets/createDataset.ts @@ -0,0 +1,12 @@ +import { fetch } from "@/utils"; + +export default function createDataset(dataset: { name: string }) { + return fetch(`/v1/datasets/`, { + method: "POST", + body: JSON.stringify(dataset), + headers: { + "Content-Type": "application/json", + } + }) + .then((response) => response.json()); +} diff --git a/cognee-frontend/src/modules/exploration/getExplorationGraphUrl.ts b/cognee-frontend/src/modules/exploration/getExplorationGraphUrl.ts index 2721e7b03..1483bf123 100644 --- a/cognee-frontend/src/modules/exploration/getExplorationGraphUrl.ts +++ b/cognee-frontend/src/modules/exploration/getExplorationGraphUrl.ts @@ -1,6 +1,6 @@ import { fetch } from '@/utils'; -export default function getExplorationGraphUrl(dataset: { name: string }) { +export default function getExplorationGraphUrl(/* dataset: { name: string } */) { return fetch('/v1/visualize') .then(async (response) => { if (response.status !== 200) { diff --git a/cognee-frontend/src/modules/ingestion/DataView/DataView.module.css b/cognee-frontend/src/modules/ingestion/DataView/DataView.module.css deleted file mode 100644 index e79e63c31..000000000 --- a/cognee-frontend/src/modules/ingestion/DataView/DataView.module.css +++ /dev/null @@ -1,24 +0,0 @@ - -.tableContainer { - overflow: auto; - padding-bottom: 32px; - min-height: 300px; -} - -.datasetMenu { - background-color: var(--global-background-default); - border-radius: var(--border-radius); - padding: 4px; -} - -.dataTable { - color: white; - border-collapse: collapse; -} -.dataTable td, .dataTable th { - vertical-align: top; - padding: 8px; - border: 1px solid white; - margin: 0; - white-space: nowrap; -} diff --git a/cognee-frontend/src/modules/ingestion/DataView/DataView.tsx b/cognee-frontend/src/modules/ingestion/DataView/DataView.tsx deleted file mode 100644 index b2cb06b44..000000000 --- a/cognee-frontend/src/modules/ingestion/DataView/DataView.tsx +++ /dev/null @@ -1,143 +0,0 @@ -import { useCallback, useState } from 'react'; -import { - DropdownMenu, - GhostButton, - Stack, - Text, - UploadInput, - CloseIcon, - CTAButton, - useBoolean, -} from "ohmy-ui"; -import { fetch } from '@/utils'; -import RawDataPreview from './RawDataPreview'; -import styles from "./DataView.module.css"; - -export interface Data { - id: string; - name: string; - mimeType: string; - extension: string; - rawDataLocation: string; -} - -interface DatasetLike { - id: string; -} - -interface DataViewProps { - data: Data[]; - datasetId: string; - onClose: () => void; - onDataAdd: (dataset: DatasetLike, files: File[]) => void; - onCognify: () => Promise; -} - -export default function DataView({ datasetId, data, onClose, onDataAdd, onCognify }: DataViewProps) { - // const handleDataDelete = () => {}; - const [rawData, setRawData] = useState(null); - const [selectedData, setSelectedData] = useState(null); - - const showRawData = useCallback((dataItem: Data) => { - setSelectedData(dataItem); - - fetch(`/v1/datasets/${datasetId}/data/${dataItem.id}/raw`) - .then((response) => response.arrayBuffer()) - .then(setRawData); - - document.body.click(); // Close the dropdown menu. - }, [datasetId]); - - const resetDataPreview = useCallback(() => { - setSelectedData(null); - setRawData(null); - }, []); - - const handleDataAdd = (files: File[]) => { - onDataAdd({ id: datasetId }, files); - }; - - const { - value: isCognifyButtonDisabled, - setTrue: disableCognifyButton, - setFalse: enableCognifyButton, - } = useBoolean(false); - - const handleCognify = () => { - disableCognifyButton(); - onCognify() - .finally(() => enableCognifyButton()); - }; - - return ( - - -
- - Add data - -
-
- - Cognify - -
- - - -
- {rawData && selectedData && ( - - )} -
- - - - - - - - - - - - {data.map((dataItem) => ( - - - - - - - - ))} - -
ActionsIDNameFile pathMIME type
- - - - showRawData(dataItem)}> - View raw data - - {/* - Delete - */} - - - - - {dataItem.id} - - {dataItem.name}.{dataItem.extension} - - {dataItem.rawDataLocation} - - {dataItem.mimeType} -
-
-
- ); -} diff --git a/cognee-frontend/src/modules/ingestion/DataView/RawDataPreview.module.css b/cognee-frontend/src/modules/ingestion/DataView/RawDataPreview.module.css deleted file mode 100644 index 4cb3e63dd..000000000 --- a/cognee-frontend/src/modules/ingestion/DataView/RawDataPreview.module.css +++ /dev/null @@ -1,8 +0,0 @@ - -.dataPreviewModal { - left: 5% !important; - padding: 0 !important; - max-width: 90% !important; - height: 80%; - top: 5% !important; -} diff --git a/cognee-frontend/src/modules/ingestion/DataView/RawDataPreview.tsx b/cognee-frontend/src/modules/ingestion/DataView/RawDataPreview.tsx deleted file mode 100644 index b9c2914ea..000000000 --- a/cognee-frontend/src/modules/ingestion/DataView/RawDataPreview.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { IFrameView } from '@/ui/Partials'; -import { CloseIcon, GhostButton, Modal, Spacer, Stack, Text } from 'ohmy-ui'; -import styles from './RawDataPreview.module.css'; - -interface RawDataPreviewProps { - fileName: string; - rawData: ArrayBuffer; - onClose: () => void; -} - -const file_header = ';headers=filename%3D'; - -export default function RawDataPreview({ fileName, rawData, onClose }: RawDataPreviewProps) { - const src = `data:application/pdf;base64,${arrayBufferToBase64(rawData)}`.replace(';', file_header + encodeURIComponent(fileName) + ';'); - - return ( - - - {fileName} - - - - ); -} - -function arrayBufferToBase64(buffer: ArrayBuffer): string { - let binary = ''; - const bytes = new Uint8Array(buffer); - const len = bytes.byteLength; - - for (var i = 0; i < len; i++) { - binary += String.fromCharCode( bytes[ i ] ); - } - - return window.btoa(binary); -} - diff --git a/cognee-frontend/src/modules/ingestion/DataView/index.ts b/cognee-frontend/src/modules/ingestion/DataView/index.ts deleted file mode 100644 index 5277720d5..000000000 --- a/cognee-frontend/src/modules/ingestion/DataView/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default, type Data } from './DataView'; diff --git a/cognee-frontend/src/modules/ingestion/DatasetsView/DatasetsView.module.css b/cognee-frontend/src/modules/ingestion/DatasetsView/DatasetsView.module.css deleted file mode 100644 index 6c982f2e6..000000000 --- a/cognee-frontend/src/modules/ingestion/DatasetsView/DatasetsView.module.css +++ /dev/null @@ -1,16 +0,0 @@ - -.datasetMenu { - background-color: var(--global-background-default); - border-radius: var(--border-radius); - padding: 4px; -} - -.explorerModal { - left: 5% !important; - padding: 0 !important; - max-width: 90% !important; - height: 80%; - top: 5% !important; - display: flex; - flex-direction: column; -} diff --git a/cognee-frontend/src/modules/ingestion/DatasetsView/DatasetsView.tsx b/cognee-frontend/src/modules/ingestion/DatasetsView/DatasetsView.tsx deleted file mode 100644 index 7cfb43876..000000000 --- a/cognee-frontend/src/modules/ingestion/DatasetsView/DatasetsView.tsx +++ /dev/null @@ -1,106 +0,0 @@ -import { useState } from 'react'; -import Link from 'next/link'; -import { Explorer } from '@/ui/Partials'; -import StatusIcon from '@/ui/elements/StatusIndicator'; -import { LoadingIndicator } from '@/ui/App'; -import { DropdownMenu, GhostButton, Stack, Text, CTAButton, useBoolean, Modal, Spacer } from "ohmy-ui"; -import styles from "./DatasetsView.module.css"; - -interface Dataset { - id: string; - name: string; - status: string; -} - -const DatasetItem = GhostButton.remix({ Component: 'div' }); - -interface DatasetsViewProps { - datasets: Dataset[]; - onDatasetClick: (dataset: Dataset) => void; - onDatasetCognify: (dataset: Dataset) => Promise; -} - -export default function DatasetsView({ - datasets, - onDatasetClick, - onDatasetCognify, -}: DatasetsViewProps) { - const { - value: isCognifyRunning, - setTrue: disableCognifyRun, - setFalse: enableCognifyRun, - } = useBoolean(false); - - const handleCognifyDataset = (event: React.MouseEvent, dataset: Dataset) => { - event.stopPropagation(); - - disableCognifyRun(); - - onDatasetCognify(dataset) - .finally(() => enableCognifyRun()); - } - - const [dataset, setExplorationDataset] = useState<{ id: string, name: string } | null>(null); - const { - value: isExplorationWindowShown, - setTrue: showExplorationWindow, - setFalse: hideExplorationWindow, - } = useBoolean(false); - - const handleExploreDataset = (event: React.MouseEvent, dataset: Dataset) => { - event.stopPropagation(); - - setExplorationDataset(dataset); - showExplorationWindow(); - } - - return ( - <> - - {datasets.map((dataset) => ( - onDatasetClick(dataset)}> - - {dataset.name} - - - - - {dataset.status === 'DATASET_PROCESSING_COMPLETED' ? ( - ) => handleExploreDataset(event, dataset)} - > - Explore - - ) : ( - ) => handleCognifyDataset(event, dataset)} - > - - Cognify - {isCognifyRunning && ( - - )} - - - )} - - - Add data - - - - - - - - ))} - - - - {dataset?.name} - - - - - ); -} diff --git a/cognee-frontend/src/modules/ingestion/DatasetsView/index.ts b/cognee-frontend/src/modules/ingestion/DatasetsView/index.ts deleted file mode 100644 index a7381ff15..000000000 --- a/cognee-frontend/src/modules/ingestion/DatasetsView/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './DatasetsView'; diff --git a/cognee-frontend/src/modules/ingestion/addData.ts b/cognee-frontend/src/modules/ingestion/addData.ts index 601c6f884..c4a1a84e1 100644 --- a/cognee-frontend/src/modules/ingestion/addData.ts +++ b/cognee-frontend/src/modules/ingestion/addData.ts @@ -1,19 +1,19 @@ -import { fetch } from '@/utils'; +import { fetch } from "@/utils"; export default function addData(dataset: { id?: string, name?: string }, files: File[]) { const formData = new FormData(); files.forEach((file) => { - formData.append('data', file, file.name); + formData.append("data", file, file.name); }) if (dataset.id) { - formData.append('datasetId', dataset.id); + formData.append("datasetId", dataset.id); } if (dataset.name) { - formData.append('datasetName', dataset.name); + formData.append("datasetName", dataset.name); } - return fetch('/v1/add', { - method: 'POST', + return fetch("/v1/add", { + method: "POST", body: formData, }).then((response) => response.json()); } diff --git a/cognee-frontend/src/modules/ingestion/useDatasets.ts b/cognee-frontend/src/modules/ingestion/useDatasets.ts index 441e3a0e3..165f4501c 100644 --- a/cognee-frontend/src/modules/ingestion/useDatasets.ts +++ b/cognee-frontend/src/modules/ingestion/useDatasets.ts @@ -12,16 +12,12 @@ export interface Dataset { function useDatasets() { const [datasets, setDatasets] = useState([]); + // eslint-disable-next-line @typescript-eslint/no-explicit-any const statusTimeout = useRef(null); const fetchDatasetStatuses = useCallback((datasets: Dataset[]) => { fetch( `/v1/datasets/status?dataset=${datasets.map(d => d.id).join('&dataset=')}`, - { - headers: { - Authorization: `Bearer ${localStorage.getItem('access_token')}`, - }, - }, ) .then((response) => response.json()) .then((statuses) => setDatasets( @@ -42,7 +38,7 @@ function useDatasets() { statusTimeout.current = setTimeout(() => { checkDatasetStatuses(datasets); - }, 5000); + }, 50000); }, [fetchDatasetStatuses]); useEffect(() => { @@ -73,11 +69,7 @@ function useDatasets() { }, []); const fetchDatasets = useCallback(() => { - return fetch('/v1/datasets', { - headers: { - Authorization: `Bearer ${localStorage.getItem('access_token')}`, - }, - }) + return fetch('/v1/datasets') .then((response) => response.json()) .then((datasets) => { setDatasets(datasets); diff --git a/cognee-frontend/src/ui/Icons/AddIcon.tsx b/cognee-frontend/src/ui/Icons/AddIcon.tsx new file mode 100644 index 000000000..b9092feec --- /dev/null +++ b/cognee-frontend/src/ui/Icons/AddIcon.tsx @@ -0,0 +1,7 @@ +export default function SearchIcon({ width = 24, height = 24, color = 'currentColor', className = '' }) { + return ( + + + + ); +} diff --git a/cognee-frontend/src/ui/Icons/CaretIcon.tsx b/cognee-frontend/src/ui/Icons/CaretIcon.tsx new file mode 100644 index 000000000..29a5eca62 --- /dev/null +++ b/cognee-frontend/src/ui/Icons/CaretIcon.tsx @@ -0,0 +1,8 @@ +export default function CaretIcon({ width = 50, height = 36, color = "currentColor", className = "" }) { + return ( + + + + + ); +} diff --git a/cognee-frontend/src/ui/Icons/SearchIcon.tsx b/cognee-frontend/src/ui/Icons/SearchIcon.tsx new file mode 100644 index 000000000..3a3baac33 --- /dev/null +++ b/cognee-frontend/src/ui/Icons/SearchIcon.tsx @@ -0,0 +1,9 @@ +export default function SearchIcon({ width = 24, height = 24, color = 'currentColor', className = '' }) { + return ( + + + + + + ); +} diff --git a/cognee-frontend/src/ui/Icons/index.ts b/cognee-frontend/src/ui/Icons/index.ts index 71d6307c2..0adaa8fd1 100644 --- a/cognee-frontend/src/ui/Icons/index.ts +++ b/cognee-frontend/src/ui/Icons/index.ts @@ -1,3 +1,6 @@ +export { default as AddIcon } from './AddIcon'; +export { default as CaretIcon } from './CaretIcon'; +export { default as SearchIcon } from './SearchIcon'; export { default as DeleteIcon } from './DeleteIcon'; export { default as GithubIcon } from './GitHubIcon'; export { default as DiscordIcon } from './DiscordIcon'; diff --git a/cognee-frontend/src/ui/Partials/Explorer/Explorer.module.css b/cognee-frontend/src/ui/Partials/Explorer/Explorer.module.css deleted file mode 100644 index 552e8eda3..000000000 --- a/cognee-frontend/src/ui/Partials/Explorer/Explorer.module.css +++ /dev/null @@ -1,21 +0,0 @@ - -.explorer { - flex: 1; - min-height: 100%; - flex-direction: column; -} - -.explorerContent { - flex: 1; -} - -.graphExplorer { - width: 65%; - overflow: hidden; - border-radius: var(--border-radius); -} - -.chat { - width: 35%; - display: flex; -} diff --git a/cognee-frontend/src/ui/Partials/Explorer/Explorer.tsx b/cognee-frontend/src/ui/Partials/Explorer/Explorer.tsx deleted file mode 100644 index cc9759ee6..000000000 --- a/cognee-frontend/src/ui/Partials/Explorer/Explorer.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import classNames from 'classnames'; -import { useCallback, useEffect, useState } from 'react'; -import { Spacer, Stack, Text } from 'ohmy-ui'; -import { LoadingIndicator } from '@/ui/App'; -import { IFrameView, SearchView } from '@/ui/Partials'; -import { getExplorationGraphUrl } from '@/modules/exploration'; -import styles from './Explorer.module.css'; - -interface ExplorerProps { - dataset: { name: string }; - className?: string; - style?: React.CSSProperties; -} - -export default function Explorer({ dataset, className, style }: ExplorerProps) { - const [error, setError] = useState(null); - const [graphHtml, setGraphHtml] = useState(null); - - const exploreData = useCallback(() => { - getExplorationGraphUrl(dataset) - .then((graphHtml) => { - setError(null); - setGraphHtml(graphHtml); - }) - .catch((error) => { - setError(error); - }); - }, [dataset]); - - useEffect(() => { - exploreData(); - }, [exploreData]); - - return ( - -
- {error ? ( - {error.message} - ) : ( - <> - {!graphHtml ? ( - - - - ) : ( - - )} - - )} -
-
- -
-
- ) -} diff --git a/cognee-frontend/src/ui/Partials/FeedbackForm.tsx b/cognee-frontend/src/ui/Partials/FeedbackForm.tsx index 76ecebf43..db5b6f325 100644 --- a/cognee-frontend/src/ui/Partials/FeedbackForm.tsx +++ b/cognee-frontend/src/ui/Partials/FeedbackForm.tsx @@ -26,19 +26,22 @@ export default function FeedbackForm({ onSuccess }: FeedbackFormProps) { event.preventDefault(); const formElements = event.currentTarget; - const authCredentials = new FormData(); - authCredentials.append("feedback", formElements.feedback.value); - setFeedbackError(null); disableFeedbackSubmit(); - fetch("/v1/feedback/reasoning", { + fetch("/v1/crewai/feedback", { method: "POST", - body: authCredentials, + body: JSON.stringify({ + feedback: formElements.feedback.value, + }), + headers: { + "Content-Type": "application/json", + }, }) .then(response => response.json()) .then(() => { onSuccess(); + formElements.feedback.value = ""; }) .catch(error => setFeedbackError(error.detail)) .finally(() => enableFeedbackSubmit()); @@ -48,7 +51,7 @@ export default function FeedbackForm({ onSuccess }: FeedbackFormProps) {
- +