From 974fc12b348bc8ff60017fd65bb6c83572d367b4 Mon Sep 17 00:00:00 2001 From: cracklesparkle Date: Wed, 9 Oct 2024 16:51:37 +0900 Subject: [PATCH] mantine --- client/package-lock.json | 1440 ++++++++++++++++- client/package.json | 25 +- client/postcss.config.js | 12 +- client/src/App.tsx | 57 +- client/src/components/AccountMenu.tsx | 156 -- client/src/components/FolderViewer.tsx | 182 +-- client/src/components/FormFields.tsx | 42 +- client/src/components/ServerData.tsx | 42 +- client/src/components/ServerHardware.tsx | 139 +- client/src/components/ServerIpsView.tsx | 138 +- client/src/components/ServersView.tsx | 122 +- client/src/components/map/MapComponent.tsx | 233 ++- .../navigation/Drawer/ResponsiveDrawer.tsx | 171 -- client/src/components/navigation/NavTabs.tsx | 30 - client/src/hooks/swrHooks.ts | 2 +- client/src/layouts/DashboardLayout.tsx | 296 ++-- .../src/layouts/DashboardLayoutResponsive.tsx | 252 --- client/src/layouts/MainLayout.tsx | 27 +- client/src/main.tsx | 95 +- client/src/pages/Boilers.tsx | 66 +- client/src/pages/Main.tsx | 55 +- client/src/pages/NotFound.tsx | 19 +- client/src/pages/Reports.tsx | 124 +- client/src/pages/Roles.tsx | 63 +- client/src/pages/Servers.tsx | 84 +- client/src/pages/Settings.tsx | 52 +- client/src/pages/TableTest.module.scss | 10 + client/src/pages/TableTest.tsx | 32 + client/src/pages/Users.tsx | 125 +- client/src/pages/auth/PasswordReset.tsx | 58 +- client/src/pages/auth/SignIn.tsx | 58 +- client/yarn.lock | 920 ++++++++++- 32 files changed, 3456 insertions(+), 1671 deletions(-) delete mode 100644 client/src/components/AccountMenu.tsx delete mode 100644 client/src/components/navigation/Drawer/ResponsiveDrawer.tsx delete mode 100644 client/src/components/navigation/NavTabs.tsx delete mode 100644 client/src/layouts/DashboardLayoutResponsive.tsx create mode 100644 client/src/pages/TableTest.module.scss create mode 100644 client/src/pages/TableTest.tsx diff --git a/client/package-lock.json b/client/package-lock.json index a5644b0..53a5479 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -16,24 +16,44 @@ "@js-preview/docx": "^1.6.2", "@js-preview/excel": "^1.7.8", "@js-preview/pdf": "^2.0.2", + "@mantine/carousel": "^7.13.0", + "@mantine/charts": "^7.13.0", + "@mantine/code-highlight": "^7.13.0", + "@mantine/core": "^7.13.0", + "@mantine/dates": "^7.13.0", + "@mantine/dropzone": "^7.13.0", + "@mantine/form": "^7.13.0", + "@mantine/hooks": "^7.13.0", + "@mantine/modals": "^7.13.0", + "@mantine/notifications": "^7.13.0", + "@mantine/nprogress": "^7.13.0", + "@mantine/spotlight": "^7.13.0", + "@mantine/tiptap": "^7.13.0", "@mui/icons-material": "^5.15.20", "@mui/material": "^5.15.20", "@mui/x-charts": "^7.8.0", "@mui/x-data-grid": "^7.7.1", + "@tabler/icons-react": "^3.17.0", + "@tiptap/extension-link": "^2.7.3", + "@tiptap/react": "^2.7.3", + "@tiptap/starter-kit": "^2.7.3", "@types/ol-ext": "npm:@siedlerchr/types-ol-ext@^3.5.0", "@uidotdev/usehooks": "^2.4.1", "autoprefixer": "^10.4.19", "axios": "^1.7.2", "buffer": "^6.0.3", + "dayjs": "^1.11.13", + "embla-carousel-react": "^8.3.0", "file-type": "^19.0.0", + "ka-table": "^11.3.0", "ol": "^10.0.0", "ol-ext": "^4.0.23", - "postcss": "^8.4.38", "proj4": "^2.12.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-hook-form": "^7.52.0", "react-router-dom": "^6.23.1", + "recharts": "^2.12.7", "swr": "^2.2.5", "zustand": "^4.5.2" }, @@ -47,6 +67,9 @@ "eslint": "^8.57.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.6", + "postcss": "^8.4.47", + "postcss-preset-mantine": "^1.17.0", + "postcss-simple-vars": "^7.0.1", "serve": "^14.2.3", "tailwindcss": "^3.4.4", "typescript": "^5.2.2", @@ -2486,10 +2509,24 @@ "@floating-ui/utils": "^0.2.0" } }, + "node_modules/@floating-ui/react": { + "version": "0.26.24", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.24.tgz", + "integrity": "sha512-2ly0pCkZIGEQUq5H8bBK0XJmc1xIK/RM3tvVzY3GBER7IOD1UgmC2Y2tjj4AuS+TC+vTE1KJv2053290jua0Sw==", + "dependencies": { + "@floating-ui/react-dom": "^2.1.2", + "@floating-ui/utils": "^0.2.8", + "tabbable": "^6.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, "node_modules/@floating-ui/react-dom": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.0.tgz", - "integrity": "sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", + "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", "dependencies": { "@floating-ui/dom": "^1.0.0" }, @@ -2499,9 +2536,9 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz", - "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==" + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", + "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==" }, "node_modules/@fontsource/inter": { "version": "5.0.19", @@ -2682,6 +2719,198 @@ "resolved": "https://registry.npmjs.org/@js-preview/pdf/-/pdf-2.0.2.tgz", "integrity": "sha512-g7RsK4k97y+/XvsjZfltEotty+QpfeQGDBAbr9UB0npjVP+2gxRnIhNEPpYFr44XQ6ZNjAIs5nKFppGjJVFJMQ==" }, + "node_modules/@mantine/carousel": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@mantine/carousel/-/carousel-7.13.0.tgz", + "integrity": "sha512-SmBsBwi8WRzAnnGPorhmfJ8enxTn8VQ74dAjO3XG9Z85VFho2uBeDCqmFv1AQDiYKAsCDO46EykPkBcgZJ1nfg==", + "peerDependencies": { + "@mantine/core": "7.13.0", + "@mantine/hooks": "7.13.0", + "embla-carousel-react": ">=7.0.0", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, + "node_modules/@mantine/charts": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@mantine/charts/-/charts-7.13.0.tgz", + "integrity": "sha512-x5aH3EI6Vbum8yOIC0IADrPXxFCWCoBSeIQr/oEWDnnRkARZL6P3Q3ltFp7oQS3nrK176ztUDks79Kxxo5FkLg==", + "peerDependencies": { + "@mantine/core": "7.13.0", + "@mantine/hooks": "7.13.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "recharts": "^2.10.3" + } + }, + "node_modules/@mantine/code-highlight": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@mantine/code-highlight/-/code-highlight-7.13.0.tgz", + "integrity": "sha512-0EVIX2/L2STdzlKNdHc4aslFObWOP+GQt3/cr8lxwNvwquUFCPG3WxZixa8HfllKSgD5MlXVuCagyvZ35e94jg==", + "dependencies": { + "clsx": "^2.1.1", + "highlight.js": "^11.9.0" + }, + "peerDependencies": { + "@mantine/core": "7.13.0", + "@mantine/hooks": "7.13.0", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, + "node_modules/@mantine/core": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@mantine/core/-/core-7.13.0.tgz", + "integrity": "sha512-aQpx3Q69ATDhVopBNkWS0sql93ZaPqeA5jTgqU7GxZvJdkpG87vbKYgp4cDV/gqr7BYu4kel0smeHYuPemiZ8Q==", + "dependencies": { + "@floating-ui/react": "^0.26.9", + "clsx": "^2.1.1", + "react-number-format": "^5.3.1", + "react-remove-scroll": "^2.5.7", + "react-textarea-autosize": "8.5.3", + "type-fest": "^4.12.0" + }, + "peerDependencies": { + "@mantine/hooks": "7.13.0", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, + "node_modules/@mantine/core/node_modules/type-fest": { + "version": "4.26.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.26.1.tgz", + "integrity": "sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@mantine/dates": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@mantine/dates/-/dates-7.13.0.tgz", + "integrity": "sha512-fCNS7JPCqnTtFJeGxdl2yFaMxyCP44BP2tYVZYC5KejvhfeA9u8AmtD5FsOnrdjMEnVc1DpLJobrwfmp98Ektg==", + "dependencies": { + "clsx": "^2.1.1" + }, + "peerDependencies": { + "@mantine/core": "7.13.0", + "@mantine/hooks": "7.13.0", + "dayjs": ">=1.0.0", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, + "node_modules/@mantine/dropzone": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@mantine/dropzone/-/dropzone-7.13.0.tgz", + "integrity": "sha512-NDpSJ6rEN8dJwI5/qImG+6lNH/bLmf3cz4cErMR/DXNMUZGGGVx8V81oJfKoXlQi3P+yy0d6UOPiqAz1wkdC8Q==", + "dependencies": { + "react-dropzone-esm": "15.0.1" + }, + "peerDependencies": { + "@mantine/core": "7.13.0", + "@mantine/hooks": "7.13.0", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, + "node_modules/@mantine/form": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@mantine/form/-/form-7.13.0.tgz", + "integrity": "sha512-CeQbE08D7JNA+YyaGKAdFj40rp0JDFobcobIgNZzIyzXX8QNxIrtGhX3QqKIiwiFcjJi4WCxUSzDrd6vOKaEmA==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "klona": "^2.0.6" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/@mantine/hooks": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.13.0.tgz", + "integrity": "sha512-oQpwSi0gajH3UR1DFa9MQ+zeYy75xbc8Im9jIIepLbiJXtIcPK+yll1BMxNwPQLYU1pYI6ZgUazI2PoykVNmsg==", + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/@mantine/modals": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@mantine/modals/-/modals-7.13.0.tgz", + "integrity": "sha512-0Yl8zhbeS4ExpqbPmH6qarS3XpmrkRzB2EATC0p509bviHlNa0MTGhR+lbW9zAdw7UXjqZmKUe3yXO23ONVgpw==", + "peerDependencies": { + "@mantine/core": "7.13.0", + "@mantine/hooks": "7.13.0", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, + "node_modules/@mantine/notifications": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@mantine/notifications/-/notifications-7.13.0.tgz", + "integrity": "sha512-EEgKFxUK/4s2FKTYb6hKFbcsLwnccSe/8GsJ18DWGiLRxFq9DsgWCzfPAe+PVcGTITYfK7nbKxEF5l+KLdPOtQ==", + "dependencies": { + "@mantine/store": "7.13.0", + "react-transition-group": "4.4.5" + }, + "peerDependencies": { + "@mantine/core": "7.13.0", + "@mantine/hooks": "7.13.0", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, + "node_modules/@mantine/nprogress": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@mantine/nprogress/-/nprogress-7.13.0.tgz", + "integrity": "sha512-k9KE30vQtqy8xbpnKKdIRL2YBCJYGWZdNZ9B02hWRxJPvJyFoUtVGP5qukLKHpO82t1+XGwJd15Y26HYsqE5ww==", + "dependencies": { + "@mantine/store": "7.13.0" + }, + "peerDependencies": { + "@mantine/core": "7.13.0", + "@mantine/hooks": "7.13.0", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, + "node_modules/@mantine/spotlight": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@mantine/spotlight/-/spotlight-7.13.0.tgz", + "integrity": "sha512-zQ99lm0eOllXhT2bAr9YVaO3DFYlJVFxEMbXxLO5bG0AtAb7DLrhINXbNyH96OiUt+VkahSVHxbqLv5J8z2WvQ==", + "dependencies": { + "@mantine/store": "7.13.0" + }, + "peerDependencies": { + "@mantine/core": "7.13.0", + "@mantine/hooks": "7.13.0", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, + "node_modules/@mantine/store": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@mantine/store/-/store-7.13.0.tgz", + "integrity": "sha512-ldYJGMcmqTxffQMCQZZWNtXKlG649S3BGM8ukeZ6FLZckVXLQAR2o+G5EkETNihh0sJKR7DVsYHltL5hyxYLkg==", + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/@mantine/tiptap": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@mantine/tiptap/-/tiptap-7.13.0.tgz", + "integrity": "sha512-WoquUeyX6s6CVFkm4qwJWSt9e10JjX9p/LdGPpdKLn0lrJ4vGJy+L2zFDcoDxwXwgUKIw32rTmIoSsxUBziVIQ==", + "peerDependencies": { + "@mantine/core": "7.13.0", + "@mantine/hooks": "7.13.0", + "@tiptap/extension-link": ">=2.1.12", + "@tiptap/react": ">=2.1.12", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, "node_modules/@mui/base": { "version": "5.0.0-beta.40", "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.40.tgz", @@ -3114,6 +3343,11 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/@remirror/core-constants": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@remirror/core-constants/-/core-constants-3.0.0.tgz", + "integrity": "sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==" + }, "node_modules/@remix-run/router": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.16.1.tgz", @@ -3655,11 +3889,460 @@ "@swc/counter": "^0.1.3" } }, + "node_modules/@tabler/icons": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-3.17.0.tgz", + "integrity": "sha512-sCSfAQ0w93KSnSL7tS08n73CdIKpuHP8foeLMWgDKiZaCs8ZE//N3ytazCk651ZtruTtByI3b+ZDj7nRf+hHvA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/codecalm" + } + }, + "node_modules/@tabler/icons-react": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/@tabler/icons-react/-/icons-react-3.17.0.tgz", + "integrity": "sha512-Ndm9Htv7KpIU1PYYrzs5EMhyA3aZGcgaxUp9Q1XOxcRZ+I0X+Ub2WS5f4bkRyDdL1s0++k2T9XRgmg2pG113sw==", + "dependencies": { + "@tabler/icons": "3.17.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/codecalm" + }, + "peerDependencies": { + "react": ">= 16" + } + }, + "node_modules/@tiptap/core": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.7.3.tgz", + "integrity": "sha512-6b62isitaWRX6cR6V5x4O9+1lgCpoTNRrSegWwBrE1OGDHcGwdTZuzdNIbjLZ9k3qs4tXl49WKXHIXK44RDOIw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/pm": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-blockquote": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-2.7.3.tgz", + "integrity": "sha512-onUThBo5XoNB7bFPI41WYNVbhX51TQDdymqEEJ0yS+0kqYMLOGxK5rylj1p+8SfpV+AIsrl5BSccijy1N7afKA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-bold": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.7.3.tgz", + "integrity": "sha512-jc38r/1YSix20s47qXwOAzVYmxVwySS5oTsNr9T5pFp0NWSFSwYsAn2L1Ko4BcI9nJ8VDgnGGg/JjkurGM3SCw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-bubble-menu": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.7.3.tgz", + "integrity": "sha512-gzhiNFwbR7oWxw1DTF6MTa6bd6toLY5mFSFLn4IdrqkkY5enxJXEak/uYvJ/q2gNvtZbrgBZVZn2UABPl2e9dg==", + "dependencies": { + "tippy.js": "^6.3.7" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0", + "@tiptap/pm": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-bullet-list": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.7.3.tgz", + "integrity": "sha512-ctcuqyWavLSgzQzRFAzubCdTbmE8p2jZWAe2nDNCfSsNDGKlqMnQVswj+qTQhlFEvJZh0AXs1N3eKA2ezNI+Yw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-code": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-2.7.3.tgz", + "integrity": "sha512-3QsUk7ke1GDntVKRu3BJeZhdjg1bONuJlfcsNLqjK+Y8LYjn8Y7MPCX4X3+DB5HuMUPT6Mu1xUNp1LMZq86LZg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-code-block": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-2.7.3.tgz", + "integrity": "sha512-WrF3X6lD8IXIWC7E5tMWL+hCMzVop3PQxFFaYi8Ovk6q3Jd8pnOtKugQp1lWcW72rek8v20LEnl1u7BkWal2TQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0", + "@tiptap/pm": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-document": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.7.3.tgz", + "integrity": "sha512-gL+NhS3r5T5B3DAnENis8VliFooOcpnp5diqmpiNPeQaO04GRQZCsFGmk/b/xRyEI8j80m+YtGYbpJodlvsTPw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-dropcursor": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-2.7.3.tgz", + "integrity": "sha512-LmS31dwrdjg30g61aU6735bfWZyfdwOO+GTdXPkoDeL3b3SNAMg39Gdb0UyI7CpmJhTWgZvst7AOQXht0DQcfw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0", + "@tiptap/pm": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-floating-menu": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.7.3.tgz", + "integrity": "sha512-ch8kiFJJAuF5gTddM5VNLvOzvuquYELeM4SmUQcQ5O9X7dn1L1sTwrJgpj+oLOp5K+MF2YLCYC8dAEIWIj2rlg==", + "dependencies": { + "tippy.js": "^6.3.7" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0", + "@tiptap/pm": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-gapcursor": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-2.7.3.tgz", + "integrity": "sha512-dtrh2ulAu9F9CsytNwhaovx79XUZzhJxgweSWlZapzR77tridSMAq7OgRL+bMVBy2JDvjyUNPdm2DkNELBofcQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0", + "@tiptap/pm": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-hard-break": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.7.3.tgz", + "integrity": "sha512-HtnjmQfbjTDsrPzfRDmzH4fZvm5xZ0qmYQyRkfV4tFrD1vx6Wb2hmpfcuiBYuNVEP6OmOzG9pQV98zhfSHEcjg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-heading": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.7.3.tgz", + "integrity": "sha512-Wq1pqUCTgFk3MddlsCZuNq9ROMctGlXGagyRcGpPtb5BJ3Ane5Njyg0lZjgGbr6CW1F3W4gy1xRKNVHXFjZ51w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-history": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.7.3.tgz", + "integrity": "sha512-sXU1R6jvd16h0IPRroBhAzeXAMFNSldJ4vhX7dxlhWTKQHeAh1Mvuye+o9oX3oNnCm6bN++j2n/CxuZoJWOSbQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0", + "@tiptap/pm": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-horizontal-rule": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.7.3.tgz", + "integrity": "sha512-0nXP1mrZ9VQLwtzHVbyzNz2ICnwEdM6l7oDbPlP8atH/kIRpINq/SiBr2wiMnU4nHnT2SacOfuk8MUEU1DBikA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0", + "@tiptap/pm": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-italic": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.7.3.tgz", + "integrity": "sha512-qMX5LjMTdPpSDp4VIpSOY0d6bB6m4CJepGlMVrQEfUEj9uMPZZxD0cME+63r/J4yIrmMCR+GJyjOu5erdYp3JA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-link": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-2.7.3.tgz", + "integrity": "sha512-fAAt/50Adh4VlFk4yLc75p3kAYP0qCcYx1vrUd7MNZXJGvBixddsFfNNBB9GNy+SyE7TZRhX4Eg4n8pApoiPQA==", + "dependencies": { + "linkifyjs": "^4.1.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0", + "@tiptap/pm": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-list-item": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.7.3.tgz", + "integrity": "sha512-xCb4WjeBn3IekWyofhc9WnxYROv9oq7KM8tMqVaMNfSfSzd6wfoijzFBeL2da1B5Pwl1tJM6MqcH70zmytMJZw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-ordered-list": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.7.3.tgz", + "integrity": "sha512-J7PbM1tQSNpAGQ9Ft9Qm2oKQDE4J6uZv711ZwQgWBVne7CEu1zfD/ezlRe4yiw5XjeD0B91CP4KNRRKefePAjA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-paragraph": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.7.3.tgz", + "integrity": "sha512-jcvcsN1JEYxPYQ3IgeJ7sUr3gDlIoVm9GXIV83fiF8KWw30M1jWfYJ6zgef8e5wB7d/NLhc3yhVrRk4R6P4ApQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-strike": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.7.3.tgz", + "integrity": "sha512-X6ybvtt/F8usRoq9MjJcTAnr0pboi3FjqZtMZOKrX1oS0bt89FcxmbymP/5VMGDLxxxzEfrRqttvZ4s/z+HOow==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/extension-text": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.7.3.tgz", + "integrity": "sha512-p1ic3rxbY8Z+1W2e/W4qXxT9zh0x2DjY2bUq+bNTvAbjOw2D9XhE4B03vhRVvNOgQdVXqJX638fK8P34ndrV1A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0" + } + }, + "node_modules/@tiptap/pm": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.7.3.tgz", + "integrity": "sha512-qMUMypHjxq7n37u4iBTbAfoWf38eDi5I13l2U3a3UKt/mJBABusf2aYq4NfkY5vQQn48HbZ3Hj+TygrdPklQwQ==", + "dependencies": { + "prosemirror-changeset": "^2.2.1", + "prosemirror-collab": "^1.3.1", + "prosemirror-commands": "^1.6.0", + "prosemirror-dropcursor": "^1.8.1", + "prosemirror-gapcursor": "^1.3.2", + "prosemirror-history": "^1.4.1", + "prosemirror-inputrules": "^1.4.0", + "prosemirror-keymap": "^1.2.2", + "prosemirror-markdown": "^1.13.0", + "prosemirror-menu": "^1.2.4", + "prosemirror-model": "^1.22.3", + "prosemirror-schema-basic": "^1.2.3", + "prosemirror-schema-list": "^1.4.1", + "prosemirror-state": "^1.4.3", + "prosemirror-tables": "^1.4.0", + "prosemirror-trailing-node": "^3.0.0", + "prosemirror-transform": "^1.10.0", + "prosemirror-view": "^1.33.10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + } + }, + "node_modules/@tiptap/react": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/react/-/react-2.7.3.tgz", + "integrity": "sha512-zPOWRG+4ApEXhUWE6h61ykqHjw7xcOKUjQGrXnD+Bji/sdr1ezgMnsewsRY8eHzxgXnCZoCydSsVwNqjZw+KZw==", + "dependencies": { + "@tiptap/extension-bubble-menu": "^2.7.3", + "@tiptap/extension-floating-menu": "^2.7.3", + "@types/use-sync-external-store": "^0.0.6", + "fast-deep-equal": "^3", + "use-sync-external-store": "^1.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.7.0", + "@tiptap/pm": "^2.7.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + } + }, + "node_modules/@tiptap/react/node_modules/use-sync-external-store": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz", + "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@tiptap/starter-kit": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-2.7.3.tgz", + "integrity": "sha512-GZd/zzdGZV8QtbIGurnS8K9WVxsOH9sdioMVQOOt8jMuETYqrEVoranN13WStbD/XsgokDE2KkvCtztqM+IKDA==", + "dependencies": { + "@tiptap/core": "^2.7.3", + "@tiptap/extension-blockquote": "^2.7.3", + "@tiptap/extension-bold": "^2.7.3", + "@tiptap/extension-bullet-list": "^2.7.3", + "@tiptap/extension-code": "^2.7.3", + "@tiptap/extension-code-block": "^2.7.3", + "@tiptap/extension-document": "^2.7.3", + "@tiptap/extension-dropcursor": "^2.7.3", + "@tiptap/extension-gapcursor": "^2.7.3", + "@tiptap/extension-hard-break": "^2.7.3", + "@tiptap/extension-heading": "^2.7.3", + "@tiptap/extension-history": "^2.7.3", + "@tiptap/extension-horizontal-rule": "^2.7.3", + "@tiptap/extension-italic": "^2.7.3", + "@tiptap/extension-list-item": "^2.7.3", + "@tiptap/extension-ordered-list": "^2.7.3", + "@tiptap/extension-paragraph": "^2.7.3", + "@tiptap/extension-strike": "^2.7.3", + "@tiptap/extension-text": "^2.7.3", + "@tiptap/pm": "^2.7.3" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + } + }, "node_modules/@tokenizer/token": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" }, + "node_modules/@types/d3-array": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", + "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz", + "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-shape": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz", + "integrity": "sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz", + "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==" + }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -3747,6 +4430,11 @@ "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", "dev": true }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz", + "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==" + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "7.13.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.0.tgz", @@ -4119,8 +4807,7 @@ "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/array-buffer-byte-length": { "version": "1.0.1", @@ -5189,6 +5876,11 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, + "node_modules/crelt": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", + "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==" + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -5291,6 +5983,14 @@ "node": ">=12" } }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "engines": { + "node": ">=12" + } + }, "node_modules/d3-format": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", @@ -5366,6 +6066,14 @@ "node": ">=12" } }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "engines": { + "node": ">=12" + } + }, "node_modules/data-view-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", @@ -5417,6 +6125,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" + }, "node_modules/debug": { "version": "4.3.5", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", @@ -5433,6 +6146,11 @@ } } }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" + }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -5517,6 +6235,11 @@ "minimalistic-assert": "^1.0.0" } }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" + }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -5650,12 +6373,48 @@ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, + "node_modules/embla-carousel": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.3.0.tgz", + "integrity": "sha512-Ve8dhI4w28qBqR8J+aMtv7rLK89r1ZA5HocwFz6uMB/i5EiC7bGI7y+AM80yAVUJw3qqaZYK7clmZMUR8kM3UA==" + }, + "node_modules/embla-carousel-react": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/embla-carousel-react/-/embla-carousel-react-8.3.0.tgz", + "integrity": "sha512-P1FlinFDcIvggcErRjNuVqnUR8anyo8vLMIH8Rthgofw7Nj8qTguCa2QjFAbzxAUTQTPNNjNL7yt0BGGinVdFw==", + "dependencies": { + "embla-carousel": "8.3.0", + "embla-carousel-reactive-utils": "8.3.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.1 || ^18.0.0" + } + }, + "node_modules/embla-carousel-reactive-utils": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.3.0.tgz", + "integrity": "sha512-EYdhhJ302SC4Lmkx8GRsp0sjUhEN4WyFXPOk0kGu9OXZSRMmcBlRgTvHcq8eKJE1bXWBsOi1T83B+BSSVZSmwQ==", + "peerDependencies": { + "embla-carousel": "8.3.0" + } + }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -6036,6 +6795,11 @@ "node": ">=0.10.0" } }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -6087,8 +6851,15 @@ "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-equals": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz", + "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==", + "engines": { + "node": ">=6.0.0" + } }, "node_modules/fast-glob": { "version": "3.3.2", @@ -6452,6 +7223,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "engines": { + "node": ">=6" + } + }, "node_modules/get-own-enumerable-property-symbols": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", @@ -6720,6 +7499,14 @@ "node": ">= 0.4" } }, + "node_modules/highlight.js": { + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.10.0.tgz", + "integrity": "sha512-SYVnVFswQER+zu1laSya563s+F8VDGt7o35d4utbamowvUNLLMovFqwCLSocpZTz3MgaSRA1IbqRWZv97dtErQ==", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -6875,6 +7662,14 @@ "node": ">=12" } }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -7485,6 +8280,14 @@ "html2canvas": "^1.0.0-rc.5" } }, + "node_modules/ka-table": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/ka-table/-/ka-table-11.3.0.tgz", + "integrity": "sha512-kXBxpPqK05MHWgBMNL07v1jmLxFdkSOlNO7iCyF3YVVPuA9SqyiE1EarzyMrazFgrvhOR0OPOpMpYmL6mVrI5g==", + "peerDependencies": { + "react": "^16.8.3 || ^17.0.0-0 || ^18.0.0-0" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -7494,6 +8297,14 @@ "json-buffer": "3.0.1" } }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "engines": { + "node": ">= 8" + } + }, "node_modules/lerc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lerc/-/lerc-3.0.0.tgz", @@ -7535,6 +8346,19 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/linkifyjs": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.1.3.tgz", + "integrity": "sha512-auMesunaJ8yfkHvK4gfg1K0SaKX/6Wn9g2Aac/NwX+l5VdmFZzo/hdPGxEOETj+ryRa4/fiOPjeeKURSAJx1sg==" + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -7553,8 +8377,7 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.debounce": { "version": "4.0.8", @@ -7603,6 +8426,22 @@ "sourcemap-codec": "^1.4.8" } }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, "node_modules/md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -7614,6 +8453,11 @@ "safe-buffer": "^5.1.2" } }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -8033,6 +8877,11 @@ "node": ">= 0.8.0" } }, + "node_modules/orderedmap": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.1.tgz", + "integrity": "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==" + }, "node_modules/os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", @@ -8246,9 +9095,9 @@ "peer": true }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -8302,9 +9151,9 @@ } }, "node_modules/postcss": { - "version": "8.4.41", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", - "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", "funding": [ { "type": "opencollective", @@ -8321,8 +9170,8 @@ ], "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.1", - "source-map-js": "^1.2.0" + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -8411,6 +9260,28 @@ "url": "https://github.com/sponsors/antonk52" } }, + "node_modules/postcss-mixins": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/postcss-mixins/-/postcss-mixins-9.0.4.tgz", + "integrity": "sha512-XVq5jwQJDRu5M1XGkdpgASqLk37OqkH4JCFDXl/Dn7janOJjCTEKL+36cnRVy7bMtoBzALfO7bV7nTIsFnUWLA==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.11", + "postcss-js": "^4.0.0", + "postcss-simple-vars": "^7.0.0", + "sugarss": "^4.0.1" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, "node_modules/postcss-nested": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", @@ -8430,6 +9301,19 @@ "postcss": "^8.2.14" } }, + "node_modules/postcss-preset-mantine": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/postcss-preset-mantine/-/postcss-preset-mantine-1.17.0.tgz", + "integrity": "sha512-ji1PMDBUf2Vsx/HE5faMSs1+ff6qE6YRulTr4Ja+6HD3gop8rSMTCYdpN7KrdsEg079kfBKkO/PaKhG9uR0zwQ==", + "dev": true, + "dependencies": { + "postcss-mixins": "^9.0.4", + "postcss-nested": "^6.0.1" + }, + "peerDependencies": { + "postcss": ">=8.0.0" + } + }, "node_modules/postcss-selector-parser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", @@ -8443,6 +9327,22 @@ "node": ">=4" } }, + "node_modules/postcss-simple-vars": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-simple-vars/-/postcss-simple-vars-7.0.1.tgz", + "integrity": "sha512-5GLLXaS8qmzHMOjVxqkk1TZPf1jMqesiI7qLhnlyERalG0sMbHIbJqrcnrpmZdKCLglHnRHoEBB61RtGTsj++A==", + "dev": true, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.1" + } + }, "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", @@ -8508,6 +9408,182 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/prosemirror-changeset": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.2.1.tgz", + "integrity": "sha512-J7msc6wbxB4ekDFj+n9gTW/jav/p53kdlivvuppHsrZXCaQdVgRghoZbSS3kwrRyAstRVQ4/+u5k7YfLgkkQvQ==", + "dependencies": { + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-collab": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz", + "integrity": "sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==", + "dependencies": { + "prosemirror-state": "^1.0.0" + } + }, + "node_modules/prosemirror-commands": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.6.0.tgz", + "integrity": "sha512-xn1U/g36OqXn2tn5nGmvnnimAj/g1pUx2ypJJIe8WkVX83WyJVC5LTARaxZa2AtQRwntu9Jc5zXs9gL9svp/mg==", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-dropcursor": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.1.tgz", + "integrity": "sha512-M30WJdJZLyXHi3N8vxN6Zh5O8ZBbQCz0gURTfPmTIBNQ5pxrdU7A58QkNqfa98YEjSAL1HUyyU34f6Pm5xBSGw==", + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0", + "prosemirror-view": "^1.1.0" + } + }, + "node_modules/prosemirror-gapcursor": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.3.2.tgz", + "integrity": "sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==", + "dependencies": { + "prosemirror-keymap": "^1.0.0", + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-view": "^1.0.0" + } + }, + "node_modules/prosemirror-history": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.4.1.tgz", + "integrity": "sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ==", + "dependencies": { + "prosemirror-state": "^1.2.2", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.31.0", + "rope-sequence": "^1.3.0" + } + }, + "node_modules/prosemirror-inputrules": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.4.0.tgz", + "integrity": "sha512-6ygpPRuTJ2lcOXs9JkefieMst63wVJBgHZGl5QOytN7oSZs3Co/BYbc3Yx9zm9H37Bxw8kVzCnDsihsVsL4yEg==", + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-keymap": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.2.tgz", + "integrity": "sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==", + "dependencies": { + "prosemirror-state": "^1.0.0", + "w3c-keyname": "^2.2.0" + } + }, + "node_modules/prosemirror-markdown": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/prosemirror-markdown/-/prosemirror-markdown-1.13.0.tgz", + "integrity": "sha512-UziddX3ZYSYibgx8042hfGKmukq5Aljp2qoBiJRejD/8MH70siQNz5RB1TrdTPheqLMy4aCe4GYNF10/3lQS5g==", + "dependencies": { + "markdown-it": "^14.0.0", + "prosemirror-model": "^1.20.0" + } + }, + "node_modules/prosemirror-menu": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/prosemirror-menu/-/prosemirror-menu-1.2.4.tgz", + "integrity": "sha512-S/bXlc0ODQup6aiBbWVsX/eM+xJgCTAfMq/nLqaO5ID/am4wS0tTCIkzwytmao7ypEtjj39i7YbJjAgO20mIqA==", + "dependencies": { + "crelt": "^1.0.0", + "prosemirror-commands": "^1.0.0", + "prosemirror-history": "^1.0.0", + "prosemirror-state": "^1.0.0" + } + }, + "node_modules/prosemirror-model": { + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.22.3.tgz", + "integrity": "sha512-V4XCysitErI+i0rKFILGt/xClnFJaohe/wrrlT2NSZ+zk8ggQfDH4x2wNK7Gm0Hp4CIoWizvXFP7L9KMaCuI0Q==", + "dependencies": { + "orderedmap": "^2.0.0" + } + }, + "node_modules/prosemirror-schema-basic": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.3.tgz", + "integrity": "sha512-h+H0OQwZVqMon1PNn0AG9cTfx513zgIG2DY00eJ00Yvgb3UD+GQ/VlWW5rcaxacpCGT1Yx8nuhwXk4+QbXUfJA==", + "dependencies": { + "prosemirror-model": "^1.19.0" + } + }, + "node_modules/prosemirror-schema-list": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.4.1.tgz", + "integrity": "sha512-jbDyaP/6AFfDfu70VzySsD75Om2t3sXTOdl5+31Wlxlg62td1haUpty/ybajSfJ1pkGadlOfwQq9kgW5IMo1Rg==", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.7.3" + } + }, + "node_modules/prosemirror-state": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.3.tgz", + "integrity": "sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.27.0" + } + }, + "node_modules/prosemirror-tables": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.5.0.tgz", + "integrity": "sha512-VMx4zlYWm7aBlZ5xtfJHpqa3Xgu3b7srV54fXYnXgsAcIGRqKSrhiK3f89omzzgaAgAtDOV4ImXnLKhVfheVNQ==", + "dependencies": { + "prosemirror-keymap": "^1.1.2", + "prosemirror-model": "^1.8.1", + "prosemirror-state": "^1.3.1", + "prosemirror-transform": "^1.2.1", + "prosemirror-view": "^1.13.3" + } + }, + "node_modules/prosemirror-trailing-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/prosemirror-trailing-node/-/prosemirror-trailing-node-3.0.0.tgz", + "integrity": "sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==", + "dependencies": { + "@remirror/core-constants": "3.0.0", + "escape-string-regexp": "^4.0.0" + }, + "peerDependencies": { + "prosemirror-model": "^1.22.1", + "prosemirror-state": "^1.4.2", + "prosemirror-view": "^1.33.8" + } + }, + "node_modules/prosemirror-transform": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.10.0.tgz", + "integrity": "sha512-9UOgFSgN6Gj2ekQH5CTDJ8Rp/fnKR2IkYfGdzzp5zQMFsS4zDllLVx/+jGcX86YlACpG7UR5fwAXiWzxqWtBTg==", + "dependencies": { + "prosemirror-model": "^1.21.0" + } + }, + "node_modules/prosemirror-view": { + "version": "1.34.3", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.34.3.tgz", + "integrity": "sha512-mKZ54PrX19sSaQye+sef+YjBbNu2voNwLS1ivb6aD2IRmxRGW64HU9B644+7OfJStGLyxvOreKqEgfvXa91WIA==", + "dependencies": { + "prosemirror-model": "^1.20.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0" + } + }, "node_modules/protocol-buffers-schema": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", @@ -8547,6 +9623,14 @@ "node": ">=6" } }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "engines": { + "node": ">=6" + } + }, "node_modules/qs": { "version": "6.12.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.2.tgz", @@ -8700,6 +9784,20 @@ "react": "^18.3.1" } }, + "node_modules/react-dropzone-esm": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/react-dropzone-esm/-/react-dropzone-esm-15.0.1.tgz", + "integrity": "sha512-RdeGpqwHnoV/IlDFpQji7t7pTtlC2O1i/Br0LWkRZ9hYtLyce814S71h5NolnCZXsIN5wrZId6+8eQj2EBnEzg==", + "dependencies": { + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "react": ">= 16.8 || 18.0.0" + } + }, "node_modules/react-hook-form": { "version": "7.52.0", "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.52.0.tgz", @@ -8720,6 +9818,60 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" }, + "node_modules/react-number-format": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/react-number-format/-/react-number-format-5.4.2.tgz", + "integrity": "sha512-cg//jVdS49PYDgmcYoBnMMHl4XNTMuV723ZnHD2aXYtWWWqbVF3hjQ8iB+UZEuXapLbeA8P8H+1o6ZB1lcw3vg==", + "peerDependencies": { + "react": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", + "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/react-router": { "version": "6.23.1", "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.23.1.tgz", @@ -8750,6 +9902,58 @@ "react-dom": ">=16.8" } }, + "node_modules/react-smooth": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.1.tgz", + "integrity": "sha512-OE4hm7XqR0jNOq3Qmk9mFLyd6p2+j6bvbPJ7qlB7+oo0eNcL2l7WQzG6MBnT3EXY6xzkLMUBec3AfewJdA0J8w==", + "dependencies": { + "fast-equals": "^5.0.1", + "prop-types": "^15.8.1", + "react-transition-group": "^4.4.5" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-textarea-autosize": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz", + "integrity": "sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==", + "dependencies": { + "@babel/runtime": "^7.20.13", + "use-composed-ref": "^1.3.0", + "use-latest": "^1.2.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", @@ -8814,6 +10018,41 @@ "node": ">=8.10.0" } }, + "node_modules/recharts": { + "version": "2.12.7", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.12.7.tgz", + "integrity": "sha512-hlLJMhPQfv4/3NBSAyq3gzGg4h2v69RJh6KU7b3pXYNNAELs9kEoXOjbkxdXpALqKBoVmVptGfLpxdaVYqjmXQ==", + "dependencies": { + "clsx": "^2.0.0", + "eventemitter3": "^4.0.1", + "lodash": "^4.17.21", + "react-is": "^16.10.2", + "react-smooth": "^4.0.0", + "recharts-scale": "^0.4.4", + "tiny-invariant": "^1.3.1", + "victory-vendor": "^36.6.8" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/recharts-scale": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", + "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", + "dependencies": { + "decimal.js-light": "^2.4.1" + } + }, + "node_modules/recharts/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -9056,6 +10295,11 @@ "fsevents": "~2.3.2" } }, + "node_modules/rope-sequence": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz", + "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==" + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -9406,9 +10650,9 @@ } }, "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "engines": { "node": ">=0.10.0" } @@ -9753,6 +10997,22 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/sugarss": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-4.0.1.tgz", + "integrity": "sha512-WCjS5NfuVJjkQzK10s8WOBY+hhDxxNt/N6ZaGwxFZ+wN3/lKKFSaaKUNecULcTTvE4urLcKaZFQD8vO0mOZujw==", + "dev": true, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -9798,6 +11058,11 @@ "react": "^16.11.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" + }, "node_modules/tailwindcss": { "version": "3.4.4", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.4.tgz", @@ -9947,6 +11212,19 @@ "node": ">=0.6.0" } }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" + }, + "node_modules/tippy.js": { + "version": "6.3.7", + "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.7.tgz", + "integrity": "sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==", + "dependencies": { + "@popperjs/core": "^2.9.0" + } + }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -10010,6 +11288,11 @@ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", "dev": true }, + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" + }, "node_modules/tty-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", @@ -10126,6 +11409,11 @@ "node": ">=14.17" } }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -10284,6 +11572,84 @@ "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", "dev": true }, + "node_modules/use-callback-ref": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", + "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-composed-ref": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", + "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-latest": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", + "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", + "dependencies": { + "use-isomorphic-layout-effect": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/use-sync-external-store": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", @@ -10329,6 +11695,27 @@ "node": ">= 0.8" } }, + "node_modules/victory-vendor": { + "version": "36.9.2", + "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz", + "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==", + "dependencies": { + "@types/d3-array": "^3.0.3", + "@types/d3-ease": "^3.0.0", + "@types/d3-interpolate": "^3.0.1", + "@types/d3-scale": "^4.0.2", + "@types/d3-shape": "^3.1.0", + "@types/d3-time": "^3.0.0", + "@types/d3-timer": "^3.0.0", + "d3-array": "^3.1.6", + "d3-ease": "^3.0.1", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.1.0", + "d3-time": "^3.0.0", + "d3-timer": "^3.0.1" + } + }, "node_modules/vite": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.1.tgz", @@ -10440,6 +11827,11 @@ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, + "node_modules/w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==" + }, "node_modules/web-worker": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.3.0.tgz", diff --git a/client/package.json b/client/package.json index 7f5923e..0a5646f 100644 --- a/client/package.json +++ b/client/package.json @@ -19,24 +19,44 @@ "@js-preview/docx": "^1.6.2", "@js-preview/excel": "^1.7.8", "@js-preview/pdf": "^2.0.2", + "@mantine/carousel": "^7.13.0", + "@mantine/charts": "^7.13.0", + "@mantine/code-highlight": "^7.13.0", + "@mantine/core": "^7.13.0", + "@mantine/dates": "^7.13.0", + "@mantine/dropzone": "^7.13.0", + "@mantine/form": "^7.13.0", + "@mantine/hooks": "^7.13.0", + "@mantine/modals": "^7.13.0", + "@mantine/notifications": "^7.13.0", + "@mantine/nprogress": "^7.13.0", + "@mantine/spotlight": "^7.13.0", + "@mantine/tiptap": "^7.13.0", "@mui/icons-material": "^5.15.20", "@mui/material": "^5.15.20", "@mui/x-charts": "^7.8.0", "@mui/x-data-grid": "^7.7.1", + "@tabler/icons-react": "^3.17.0", + "@tiptap/extension-link": "^2.7.3", + "@tiptap/react": "^2.7.3", + "@tiptap/starter-kit": "^2.7.3", "@types/ol-ext": "npm:@siedlerchr/types-ol-ext@^3.5.0", "@uidotdev/usehooks": "^2.4.1", "autoprefixer": "^10.4.19", "axios": "^1.7.2", "buffer": "^6.0.3", + "dayjs": "^1.11.13", + "embla-carousel-react": "^8.3.0", "file-type": "^19.0.0", + "ka-table": "^11.3.0", "ol": "^10.0.0", "ol-ext": "^4.0.23", - "postcss": "^8.4.38", "proj4": "^2.12.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-hook-form": "^7.52.0", "react-router-dom": "^6.23.1", + "recharts": "^2.12.7", "swr": "^2.2.5", "zustand": "^4.5.2" }, @@ -50,6 +70,9 @@ "eslint": "^8.57.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.6", + "postcss": "^8.4.47", + "postcss-preset-mantine": "^1.17.0", + "postcss-simple-vars": "^7.0.1", "serve": "^14.2.3", "tailwindcss": "^3.4.4", "typescript": "^5.2.2", diff --git a/client/postcss.config.js b/client/postcss.config.js index 2e7af2b..5ada75c 100644 --- a/client/postcss.config.js +++ b/client/postcss.config.js @@ -1,6 +1,14 @@ export default { plugins: { - tailwindcss: {}, - autoprefixer: {}, + 'postcss-preset-mantine': {}, + 'postcss-simple-vars': { + variables: { + 'mantine-breakpoint-xs': '36em', + 'mantine-breakpoint-sm': '48em', + 'mantine-breakpoint-md': '62em', + 'mantine-breakpoint-lg': '75em', + 'mantine-breakpoint-xl': '88em', + }, + }, }, } diff --git a/client/src/App.tsx b/client/src/App.tsx index 4960334..2c41ef5 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -3,31 +3,32 @@ import Main from "./pages/Main" import Users from "./pages/Users" import Roles from "./pages/Roles" import NotFound from "./pages/NotFound" -import DashboardLayout from "./layouts/DashboardLayout" import MainLayout from "./layouts/MainLayout" import SignIn from "./pages/auth/SignIn" import ApiTest from "./pages/ApiTest" import SignUp from "./pages/auth/SignUp" import { initAuth, useAuthStore } from "./store/auth" import { useEffect, useState } from "react" -import { Box, CircularProgress } from "@mui/material" import Documents from "./pages/Documents" import Reports from "./pages/Reports" import Boilers from "./pages/Boilers" import Servers from "./pages/Servers" -import { Api, Assignment, Cloud, Factory, Home, Login, Map, MonitorHeart, Password, People, Settings as SettingsIcon, Shield, Storage, Warning } from "@mui/icons-material" import Settings from "./pages/Settings" import PasswordReset from "./pages/auth/PasswordReset" import MapTest from "./pages/MapTest" import MonitorPage from "./pages/MonitorPage" import ChunkedUpload from "./components/map/ChunkedUpload" +import DashboardLayout from "./layouts/DashboardLayout" +import { IconApi, IconBuildingFactory2, IconDeviceDesktopAnalytics, IconFiles, IconFlag2, IconHome, IconLogin, IconLogin2, IconMap, IconPassword, IconReport, IconServer, IconSettings, IconShield, IconTable, IconUsers } from "@tabler/icons-react" +import { Box, Loader } from "@mantine/core" +import TableTest from "./pages/TableTest" // Определение страниц с путями и компонентом для рендера export const pages = [ { label: "", path: "/auth/signin", - icon: , + icon: , component: , drawer: false, dashboard: false, @@ -36,7 +37,7 @@ export const pages = [ { label: "", path: "/auth/signup", - icon: , + icon: , component: , drawer: false, dashboard: false, @@ -45,7 +46,7 @@ export const pages = [ { label: "", path: "/auth/password-reset", - icon: , + icon: , component: , drawer: false, dashboard: false, @@ -54,7 +55,7 @@ export const pages = [ { label: "Настройки", path: "/settings", - icon: , + icon: , component: , drawer: false, dashboard: true, @@ -63,7 +64,7 @@ export const pages = [ { label: "Главная", path: "/", - icon: , + icon: , component:
, drawer: true, dashboard: true, @@ -72,7 +73,7 @@ export const pages = [ { label: "Пользователи", path: "/user", - icon: , + icon: , component: , drawer: true, dashboard: true, @@ -81,7 +82,7 @@ export const pages = [ { label: "Роли", path: "/role", - icon: , + icon: , component: , drawer: true, dashboard: true, @@ -90,7 +91,7 @@ export const pages = [ { label: "Документы", path: "/documents", - icon: , + icon: , component: , drawer: true, dashboard: true, @@ -99,7 +100,7 @@ export const pages = [ { label: "Отчеты", path: "/reports", - icon: , + icon: , component: , drawer: true, dashboard: true, @@ -108,7 +109,7 @@ export const pages = [ { label: "Серверы", path: "/servers", - icon: , + icon: , component: , drawer: true, dashboard: true, @@ -117,7 +118,7 @@ export const pages = [ { label: "Котельные", path: "/boilers", - icon: , + icon: , component: , drawer: true, dashboard: true, @@ -126,7 +127,7 @@ export const pages = [ { label: "API Test", path: "/api-test", - icon: , + icon: , component: , drawer: true, dashboard: true, @@ -135,16 +136,16 @@ export const pages = [ { label: "ИКС", path: "/map-test", - icon: , + icon: , component: , drawer: true, dashboard: true, - enabled: false, + enabled: true, }, { label: "Chunk test", path: "/chunk-test", - icon: , + icon: , component: , drawer: true, dashboard: true, @@ -153,12 +154,21 @@ export const pages = [ { label: "Монитор", path: "/monitor", - icon: , + icon: , component: , drawer: true, dashboard: true, enabled: false, }, + { + label: "Table test", + path: "/table-test", + icon: , + component: , + drawer: true, + dashboard: true, + enabled: true, + }, ] function App() { @@ -178,14 +188,11 @@ function App() { if (isLoading) { return ( - + ) } else { return ( - + }> @@ -194,7 +201,7 @@ function App() { ))} - : }> + : }> {pages.filter((page) => page.dashboard).filter((page) => page.enabled).map((page, index) => ( ))} diff --git a/client/src/components/AccountMenu.tsx b/client/src/components/AccountMenu.tsx deleted file mode 100644 index a8eb86c..0000000 --- a/client/src/components/AccountMenu.tsx +++ /dev/null @@ -1,156 +0,0 @@ -import * as React from 'react'; -import Box from '@mui/material/Box'; -import Avatar from '@mui/material/Avatar'; -import Menu from '@mui/material/Menu'; -import MenuItem from '@mui/material/MenuItem'; -import ListItemIcon from '@mui/material/ListItemIcon'; -import IconButton from '@mui/material/IconButton'; -import Tooltip from '@mui/material/Tooltip'; -import Settings from '@mui/icons-material/Settings'; -import Logout from '@mui/icons-material/Logout'; -import { useNavigate } from 'react-router-dom'; -import { logout } from '../store/auth'; -import { ListItemText, Switch, styled } from '@mui/material'; -import { setDarkMode, usePrefStore } from '../store/preferences'; - -const Android12Switch = styled(Switch)(({ theme }) => ({ - padding: 8, - '& .MuiSwitch-track': { - borderRadius: 22 / 2, - '&::before, &::after': { - content: '""', - position: 'absolute', - top: '50%', - transform: 'translateY(-50%)', - width: 16, - height: 16, - }, - '&::before': { - backgroundImage: `url('data:image/svg+xml;utf8,')`, - left: 12, - }, - '&::after': { - backgroundImage: `url('data:image/svg+xml;utf8,')`, - right: 12, - }, - }, - '& .MuiSwitch-thumb': { - boxShadow: 'none', - width: 16, - height: 16, - margin: 2, - }, -})); - -export default function AccountMenu() { - const navigate = useNavigate() - - const [anchorEl, setAnchorEl] = React.useState(null); - - const open = Boolean(anchorEl); - - const handleClick = (event: React.MouseEvent) => { - setAnchorEl(event.currentTarget); - }; - const handleClose = () => { - setAnchorEl(null); - }; - - const prefStore = usePrefStore() - - return ( - - - - - - - - - - - { - }}> - - { - setDarkMode(e.target.checked) - }} /> - - - Тема: {prefStore.darkMode ? "темная" : "светлая"} - - - - - { - navigate('/settings') - }}> - - - - Настройки - - - { - logout() - navigate("/auth/signin") - }} - > - - - - Выход - - - - ); -} \ No newline at end of file diff --git a/client/src/components/FolderViewer.tsx b/client/src/components/FolderViewer.tsx index 45853a7..2ef136b 100644 --- a/client/src/components/FolderViewer.tsx +++ b/client/src/components/FolderViewer.tsx @@ -1,11 +1,13 @@ import { useDocuments, useDownload, useFolders } from '../hooks/swrHooks' import { IDocument, IDocumentFolder } from '../interfaces/documents' -import { Box, Breadcrumbs, Button, CircularProgress, Divider, IconButton, Link, List, ListItemButton, SxProps } from '@mui/material' -import { Cancel, Close, Download, Folder, InsertDriveFile, Upload, UploadFile } from '@mui/icons-material' -import React, { useEffect, useRef, useState } from 'react' +import { Box, CircularProgress, Divider, SxProps } from '@mui/material' +import { Folder, InsertDriveFile } from '@mui/icons-material' +import React, { useEffect, useState } from 'react' import DocumentService from '../services/DocumentService' import { mutate } from 'swr' import FileViewer from './modals/FileViewer' +import { ActionIcon, Anchor, Breadcrumbs, Button, FileButton, Flex, Loader, RingProgress, Table, Text } from '@mantine/core' +import { IconCancel, IconDownload, IconFile, IconFilePlus, IconFileUpload, IconX } from '@tabler/icons-react' interface FolderProps { folder: IDocumentFolder; @@ -31,7 +33,7 @@ const FileItemStyle: SxProps = { function ItemFolder({ folder, handleFolderClick, ...props }: FolderProps) { return ( - handleFolderClick(folder)} > {folder.name} - + ) } @@ -69,7 +71,7 @@ function ItemDocument({ doc, index, handleDocumentClick, ...props }: DocumentPro }, [shouldFetch, file]) return ( - + handleDocumentClick(index)} @@ -79,22 +81,21 @@ function ItemDocument({ doc, index, handleDocumentClick, ...props }: DocumentPro {doc.name} - { if (!isLoading) { setShouldFetch(true) } }} - sx={{ ml: 'auto' }} - > + variant='subtle'> {isLoading ? - + : - + } - + - + ) } @@ -105,7 +106,6 @@ export default function FolderViewer() { const { documents, isLoading: documentsLoading } = useDocuments(currentFolder?.id) const [uploadProgress, setUploadProgress] = useState(0) const [isUploading, setIsUploading] = useState(false) - const fileInputRef = useRef(null) const [fileViewerModal, setFileViewerModal] = useState(false) const [currentFileNo, setCurrentFileNo] = useState(-1) @@ -128,12 +128,6 @@ export default function FolderViewer() { setCurrentFolder(newBreadcrumbs[newBreadcrumbs.length - 1]) } - const handleUploadClick = () => { - if (fileInputRef.current) { - fileInputRef.current.click() - } - } - const handleDragOver = (e: React.DragEvent) => { e.preventDefault() setDragOver(true) @@ -150,9 +144,10 @@ export default function FolderViewer() { setFilesToUpload((prevFiles) => [...prevFiles, ...files]) } - const handleFileInput = (e: React.ChangeEvent) => { - const files = Array.from(e.target.files || []) - setFilesToUpload((prevFiles) => [...prevFiles, ...files]) + const handleFileInput = (files: File[] | null) => { + if (files !== null) { + setFilesToUpload((prevFiles) => [...prevFiles, ...files]) + } } const uploadFiles = async () => { @@ -196,28 +191,21 @@ export default function FolderViewer() { /> - { setCurrentFolder(null) setBreadcrumbs([]) }} - sx={{ cursor: 'pointer' }} > Главная - - + {breadcrumbs.map((breadcrumb, index) => ( - handleBreadcrumbClick(index)} - sx={{ cursor: 'pointer' }} > {breadcrumb.name} - + ))} @@ -232,44 +220,23 @@ export default function FolderViewer() { p: '16px' }}> - + + {(props) => } + {filesToUpload.length > 0 && <> - + ) diff --git a/client/src/components/ServerData.tsx b/client/src/components/ServerData.tsx index 3d5b1fa..6708776 100644 --- a/client/src/components/ServerData.tsx +++ b/client/src/components/ServerData.tsx @@ -1,8 +1,8 @@ import { Box } from '@mui/material' import { IServer } from '../interfaces/servers' import { useServerIps } from '../hooks/swrHooks' -import FullFeaturedCrudGrid from './TableEditable' import { GridColDef } from '@mui/x-data-grid' +import { Table } from '@mantine/core' function ServerData({ id }: IServer) { const { serverIps } = useServerIps(id, 0, 10) @@ -19,18 +19,34 @@ function ServerData({ id }: IServer) { return ( {serverIps && - { - //setCurrentServerData(params.row) - //setServerDataOpen(true) - }} - onSave={undefined} - onDelete={undefined} - loading={false} - /> + // { + // //setCurrentServerData(params.row) + // //setServerDataOpen(true) + // }} + // onSave={undefined} + // onDelete={undefined} + // loading={false} + // /> + + + + {serverIpsColumns.map(column => ( + {column.headerName} + ))} + + + + + {serverIpsColumns.map(column => ( + {serverIps ? serverIps[column.field] : ''} + ))} + + +
}
) diff --git a/client/src/components/ServerHardware.tsx b/client/src/components/ServerHardware.tsx index 720fcea..db7e898 100644 --- a/client/src/components/ServerHardware.tsx +++ b/client/src/components/ServerHardware.tsx @@ -1,16 +1,17 @@ -import { AppBar, Autocomplete, CircularProgress, Dialog, IconButton, TextField, Toolbar } from '@mui/material' +import { AppBar, CircularProgress, Dialog, IconButton, Toolbar } from '@mui/material' import { Fragment, useState } from 'react' import { IRegion } from '../interfaces/fuel' import { useHardwares, useServers } from '../hooks/swrHooks' -import FullFeaturedCrudGrid from './TableEditable' import ServerService from '../services/ServersService' import { GridColDef } from '@mui/x-data-grid' import { Close } from '@mui/icons-material' import ServerData from './ServerData' +import { Autocomplete, CloseButton, Table } from '@mantine/core' +import { IServer } from '../interfaces/servers' export default function ServerHardware() { const [open, setOpen] = useState(false) - const [selectedOption, setSelectedOption] = useState(null) + const [selectedOption, setSelectedOption] = useState(null) const { servers, isLoading } = useServers() const [serverDataOpen, setServerDataOpen] = useState(false) @@ -71,54 +72,96 @@ export default function ServerHardware() { } +
+ ({ label: item.name, value: item.id.toString() })) : []} + onSelect={(e) => console.log(e.currentTarget.value)} + //onChange={(value) => setSearch(value)} + onOptionSubmit={(value) => setSelectedOption(Number(value))} + rightSection={ + //search !== '' && + ( + event.preventDefault()} + onClick={() => { + //setSearch('') + setSelectedOption(null) + }} + aria-label="Clear value" + /> + ) + } + //value={search} + /> + + {serversLoading ? : - { - setOpen(true) - }} - onClose={() => { - setOpen(false) - }} - onInputChange={(_, value) => handleInputChange(value)} - onChange={(_, value) => handleOptionChange(value)} - filterOptions={(x) => x} - isOptionEqualToValue={(option: IRegion, value: IRegion) => option.name === value.name} - getOptionLabel={(option: IRegion) => option.name ? option.name : ""} - options={servers || []} - loading={isLoading} - value={selectedOption} - renderInput={(params) => ( - - {isLoading ? : null} - {params.InputProps.endAdornment} - - ) - }} /> - )} />} - onSave={() => { - }} - onDelete={ServerService.removeServer} - initialRows={hardwares || []} - columns={hardwareColumns} - actions - onRowClick={(params) => { - setCurrentServerData(params.row) - setServerDataOpen(true) - }} - loading={false} - /> + // { + // setOpen(true) + // }} + // onClose={() => { + // setOpen(false) + // }} + // onInputChange={(_, value) => handleInputChange(value)} + // onChange={(_, value) => handleOptionChange(value)} + // filterOptions={(x) => x} + // isOptionEqualToValue={(option: IRegion, value: IRegion) => option.name === value.name} + // getOptionLabel={(option: IRegion) => option.name ? option.name : ""} + // options={servers || []} + // loading={isLoading} + // value={selectedOption} + // renderInput={(params) => ( + // + // {isLoading ? : null} + // {params.InputProps.endAdornment} + // + // ) + // }} /> + // )} />} + // onSave={() => { + // }} + // onDelete={ServerService.removeServer} + // initialRows={hardwares || []} + // columns={hardwareColumns} + // actions + // onRowClick={(params) => { + // setCurrentServerData(params.row) + // setServerDataOpen(true) + // }} + // loading={false} + // /> + + + + {hardwareColumns.map(column => ( + {column.headerName} + ))} + + + + + {hardwareColumns.map(column => ( + {hardwares ? hardwares[column.field] : ''} + ))} + + +
} ) diff --git a/client/src/components/ServerIpsView.tsx b/client/src/components/ServerIpsView.tsx index 6d1ccd4..b4994e6 100644 --- a/client/src/components/ServerIpsView.tsx +++ b/client/src/components/ServerIpsView.tsx @@ -1,16 +1,17 @@ -import { AppBar, Autocomplete, CircularProgress, Dialog, IconButton, TextField, Toolbar } from '@mui/material' +import { AppBar, CircularProgress, Dialog, IconButton, TextField, Toolbar } from '@mui/material' import { Fragment, useState } from 'react' import { IRegion } from '../interfaces/fuel' import { useServerIps, useServers } from '../hooks/swrHooks' -import FullFeaturedCrudGrid from './TableEditable' import ServerService from '../services/ServersService' import { GridColDef } from '@mui/x-data-grid' import { Close } from '@mui/icons-material' import ServerData from './ServerData' +import { Autocomplete, CloseButton, Table } from '@mantine/core' +import { IServer } from '../interfaces/servers' export default function ServerIpsView() { const [open, setOpen] = useState(false) - const [selectedOption, setSelectedOption] = useState(null) + const [selectedOption, setSelectedOption] = useState(null) const { servers, isLoading } = useServers() const [serverDataOpen, setServerDataOpen] = useState(false) @@ -69,52 +70,97 @@ export default function ServerIpsView() { } +
+ ({ label: item.name, value: item.id.toString() })) : []} + onSelect={(e) => console.log(e.currentTarget.value)} + //onChange={(value) => setSearch(value)} + onOptionSubmit={(value) => setSelectedOption(Number(value))} + rightSection={ + //search !== '' && + ( + event.preventDefault()} + onClick={() => { + //setSearch('') + setSelectedOption(null) + }} + aria-label="Clear value" + /> + ) + } + //value={search} + /> + + {serversLoading ? : - { - setOpen(true) - }} - onClose={() => { - setOpen(false) - }} - onInputChange={(_, value) => handleInputChange(value)} - onChange={(_, value) => handleOptionChange(value)} - filterOptions={(x) => x} - isOptionEqualToValue={(option: IRegion, value: IRegion) => option.name === value.name} - getOptionLabel={(option: IRegion) => option.name ? option.name : ""} - options={servers || []} - loading={isLoading} - value={selectedOption} - renderInput={(params) => ( - - {isLoading ? : null} - {params.InputProps.endAdornment} - - ) - }} /> - )} />} - onSave={() => { - }} - onDelete={ServerService.removeServer} - initialRows={serverIps || []} - columns={serverIpsColumns} - actions - onRowClick={(params) => { - setCurrentServerData(params.row) - setServerDataOpen(true) - }} loading={false} /> + // { + // setOpen(true) + // }} + // onClose={() => { + // setOpen(false) + // }} + // onInputChange={(_, value) => handleInputChange(value)} + // onChange={(_, value) => handleOptionChange(value)} + // filterOptions={(x) => x} + // isOptionEqualToValue={(option: IRegion, value: IRegion) => option.name === value.name} + // getOptionLabel={(option: IRegion) => option.name ? option.name : ""} + // options={servers || []} + // loading={isLoading} + // value={selectedOption} + // renderInput={(params) => ( + // + // {isLoading ? : null} + // {params.InputProps.endAdornment} + // + // ) + // }} /> + // )} />} + // onSave={() => { + // }} + // onDelete={ServerService.removeServer} + // initialRows={serverIps || []} + // columns={serverIpsColumns} + // actions + // onRowClick={(params) => { + // setCurrentServerData(params.row) + // setServerDataOpen(true) + // }} loading={false} + // /> + + + + {serverIpsColumns.map(column => ( + {column.headerName} + ))} + + + + + {serverIpsColumns.map(column => ( + {servers ? servers[column.field] : ''} + ))} + + +
} ) diff --git a/client/src/components/ServersView.tsx b/client/src/components/ServersView.tsx index 68b9465..e806a70 100644 --- a/client/src/components/ServersView.tsx +++ b/client/src/components/ServersView.tsx @@ -1,8 +1,7 @@ -import { AppBar, Autocomplete, Box, CircularProgress, Dialog, Grid, IconButton, TextField, Toolbar } from '@mui/material' +import { AppBar, Box, CircularProgress, Dialog, Grid, IconButton, TextField, Toolbar } from '@mui/material' import { Fragment, useState } from 'react' import { IRegion } from '../interfaces/fuel' import { useRegions, useServers, useServersInfo } from '../hooks/swrHooks' -import FullFeaturedCrudGrid from './TableEditable' import ServerService from '../services/ServersService' import { GridColDef, GridRenderCellParams } from '@mui/x-data-grid' import { Close, Cloud, CloudOff } from '@mui/icons-material' @@ -12,22 +11,23 @@ import CardInfo from './CardInfo/CardInfo' import CardInfoLabel from './CardInfo/CardInfoLabel' import CardInfoChip from './CardInfo/CardInfoChip' import { useDebounce } from '@uidotdev/usehooks' +import { Autocomplete, CloseButton, Table } from '@mantine/core' export default function ServersView() { - const [search, setSearch] = useState("") + const [search, setSearch] = useState("") const debouncedSearch = useDebounce(search, 500) - const [selectedOption, setSelectedOption] = useState(null) + const [selectedOption, setSelectedOption] = useState(null) const { regions, isLoading } = useRegions(10, 1, debouncedSearch) - const { serversInfo } = useServersInfo(selectedOption?.id) + const { serversInfo } = useServersInfo(selectedOption) const [serverDataOpen, setServerDataOpen] = useState(false) const [currentServerData, setCurrentServerData] = useState(null) - const { servers, isLoading: serversLoading } = useServers(selectedOption?.id, 0, 10) + const { servers, isLoading: serversLoading } = useServers(selectedOption, 0, 10) const serversColumns: GridColDef[] = [ //{ field: 'id', headerName: 'ID', type: "number" }, @@ -37,42 +37,43 @@ export default function ServersView() { { field: 'region_id', editable: true, + headerName: 'region_id', renderCell: (params) => (
{params.value}
), - renderEditCell: (params: GridRenderCellParams) => ( - setSearch(value)} - onChange={(_, value) => { - params.value = value - }} - isOptionEqualToValue={(option: IRegion, value: IRegion) => option.name === value.name} - getOptionLabel={(option: IRegion) => option.name ? option.name : ""} - options={regions || []} - loading={isLoading} - value={params.value} - renderInput={(params) => ( - - {isLoading ? : null} - {params.InputProps.endAdornment} - - ) - }} - /> - )} - /> - ), + // renderEditCell: (params: GridRenderCellParams) => ( + // setSearch(value)} + // onChange={(_, value) => { + // params.value = value + // }} + // isOptionEqualToValue={(option: IRegion, value: IRegion) => option.name === value.name} + // getOptionLabel={(option: IRegion) => option.name ? option.name : ""} + // options={regions || []} + // loading={isLoading} + // value={params.value} + // renderInput={(params) => ( + // + // {isLoading ? : null} + // {params.InputProps.endAdornment} + // + // ) + // }} + // /> + // )} + // /> + // ), flex: 1 } ] @@ -132,7 +133,50 @@ export default function ServersView() {
} - + ({ label: item.name, value: item.id.toString() })) : []} + onSelect={(e) => console.log(e.currentTarget.value)} + onChange={(value) => setSearch(value)} + onOptionSubmit={(value) => setSelectedOption(Number(value))} + rightSection={ + search !== '' && ( + event.preventDefault()} + onClick={() => { + setSearch('') + setSelectedOption(null) + }} + aria-label="Clear value" + /> + ) + } + value={search} + /> + + + + + + + {serversColumns.map(column => ( + {column.headerName} + ))} + + + + + {serversColumns.map(column => ( + {servers ? servers[column.field] : ''} + ))} + + +
+ + {/* + /> */} ) } \ No newline at end of file diff --git a/client/src/components/map/MapComponent.tsx b/client/src/components/map/MapComponent.tsx index 02f7a9c..231c7ce 100644 --- a/client/src/components/map/MapComponent.tsx +++ b/client/src/components/map/MapComponent.tsx @@ -6,8 +6,7 @@ import View from 'ol/View' import { Draw, Modify, Select, Snap, Translate } from 'ol/interaction' import { ImageStatic, OSM, Vector as VectorSource, XYZ } from 'ol/source' import { Tile as TileLayer, Vector as VectorLayer } from 'ol/layer' -import { Divider, IconButton, Slider, Stack, Select as MUISelect, MenuItem, Box, Typography, Accordion, AccordionSummary, AccordionDetails, SxProps, Theme } from '@mui/material' -import { Add, Adjust, Api, CircleOutlined, ExpandMore, OpenWith, RectangleOutlined, Straighten, Timeline, Undo, Upload, Warning } from '@mui/icons-material' +import { Stack, Typography } from '@mui/material' import { Type } from 'ol/geom/Geometry' import { click, never, noModifierKeys, platformModifierKeyOnly, primaryAction, shiftKeyOnly } from 'ol/events/condition' import Feature from 'ol/Feature' @@ -30,6 +29,8 @@ import { useCities } from '../../hooks/swrHooks' import useSWR from 'swr' import { fetcher } from '../../http/axiosInstance' import { BASE_URL } from '../../constants' +import { Accordion, ActionIcon, Box, Flex, Select as MantineSelect, MantineStyleProp, rem, Slider, useMantineColorScheme } from '@mantine/core' +import { IconApi, IconArrowBackUp, IconArrowsMove, IconCircle, IconExclamationCircle, IconLine, IconPlus, IconPoint, IconPolygon, IconRuler, IconTable, IconUpload } from '@tabler/icons-react' const MapComponent = () => { const { cities } = useCities(100, 1) @@ -775,14 +776,17 @@ const MapComponent = () => { } } - const mapControlsStyle: SxProps = { + const { colorScheme } = useMantineColorScheme(); + + const mapControlsStyle: MantineStyleProp = { borderRadius: '4px', position: 'absolute', zIndex: '1', - backgroundColor: (theme) => - theme.palette.mode === 'light' - ? '#FFFFFFAA' - : '#000000AA', + // backgroundColor: (theme) => + // theme.palette.mode === 'light' + // ? '#FFFFFFAA' + // : '#000000AA', + backgroundColor: colorScheme === 'light' ? '#FFFFFFAA' : '#000000AA', backdropFilter: 'blur(8px)' } @@ -808,134 +812,118 @@ const MapComponent = () => { }, [nodes]) return ( - - }> - { + + + { fetch(`${import.meta.env.VITE_API_EMS_URL}/hello`, { method: 'GET' }).then(res => console.log(res)) }}> - - + + - { + { saveFeatures() }}> - - + + - { + draw.current?.removeLastPoint() + }}> + + + + { - draw.current?.removeLastPoint() + handleToolSelect('Point') }}> - - + + - handleToolSelect('Point')}> - - + { + handleToolSelect('LineString') + }}> + + - handleToolSelect('LineString')}> - - + { + handleToolSelect('Polygon') + }}> + + - handleToolSelect('Polygon')}> - - + { + handleToolSelect('Circle') + }}> + + - handleToolSelect('Circle')}> - - - - map?.current?.addInteraction(new Translate())} > - - + + - - - - + + + + - } - > - - submitOverlay()}> - - - - - - - - - - - setSatelliteOpacity(Array.isArray(value) ? value[0] : value)} /> - - setSatMapsProvider(e.target.value as SatelliteMapsProvider)} + + + submitOverlay()} > - Google - Яндекс - Custom - - + + - - } - aria-controls="panel1-content" - id="panel1-header" + - Объекты - - - - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse - malesuada lacus ex, sit amet blandit leo lobortis eget. - - + + + + + + setSatelliteOpacity(Array.isArray(value) ? value[0] : value)} /> + + setSatMapsProvider(value as SatelliteMapsProvider)} /> + + + + + }>{'Объекты'} + {'ASd'} + + - - - } - > + x: {currentCoordinate?.[0]} @@ -950,20 +938,11 @@ const MapComponent = () => { X={currentX} Y={currentY} - + - }> - - {statusText} - - + + {statusText} +
{ - setIsClosing(true); - setMobileOpen(false); - }; - - const handleDrawerTransitionEnd = () => { - setIsClosing(false); - }; - - const handleDrawerToggle = () => { - if (!isClosing) { - setMobileOpen(!mobileOpen); - } - }; - - const drawer = ( -
- - - - - - {['Inbox', 'Starred', 'Send email', 'Drafts'].map((text, index) => ( - - - - {index % 2 === 0 ? : } - - - - - ))} - - - - - - {['All mail', 'Trash', 'Spam'].map((text, index) => ( - - - - {index % 2 === 0 ? : } - - - - - ))} - -
- ); - - return ( - - - - - - - - - Dashboard - - - - - - {/* The implementation can be swapped with js to avoid SEO duplication of links. */} - - {drawer} - - - {drawer} - - - - - - - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod - tempor incididunt ut labore et dolore magna aliqua. Rhoncus dolor purus non - enim praesent elementum facilisis leo vel. Risus at ultrices mi tempus - imperdiet. Semper risus in hendrerit gravida rutrum quisque non tellus. - Convallis convallis tellus id interdum velit laoreet id donec ultrices. - Odio morbi quis commodo odio aenean sed adipiscing. Amet nisl suscipit - adipiscing bibendum est ultricies integer quis. Cursus euismod quis viverra - nibh cras. Metus vulputate eu scelerisque felis imperdiet proin fermentum - leo. Mauris commodo quis imperdiet massa tincidunt. Cras tincidunt lobortis - feugiat vivamus at augue. At augue eget arcu dictum varius duis at - consectetur lorem. Velit sed ullamcorper morbi tincidunt. Lorem donec massa - sapien faucibus et molestie ac. - - - Consequat mauris nunc congue nisi vitae suscipit. Fringilla est ullamcorper - eget nulla facilisi etiam dignissim diam. Pulvinar elementum integer enim - neque volutpat ac tincidunt. Ornare suspendisse sed nisi lacus sed viverra - tellus. Purus sit amet volutpat consequat mauris. Elementum eu facilisis - sed odio morbi. Euismod lacinia at quis risus sed vulputate odio. Morbi - tincidunt ornare massa eget egestas purus viverra accumsan in. In hendrerit - gravida rutrum quisque non tellus orci ac. Pellentesque nec nam aliquam sem - et tortor. Habitant morbi tristique senectus et. Adipiscing elit duis - tristique sollicitudin nibh sit. Ornare aenean euismod elementum nisi quis - eleifend. Commodo viverra maecenas accumsan lacus vel facilisis. Nulla - posuere sollicitudin aliquam ultrices sagittis orci a. - - - - ); -} \ No newline at end of file diff --git a/client/src/components/navigation/NavTabs.tsx b/client/src/components/navigation/NavTabs.tsx deleted file mode 100644 index d71378b..0000000 --- a/client/src/components/navigation/NavTabs.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { Tab, Tabs } from "@mui/material" -import { Link, matchPath, useLocation } from "react-router-dom" - -function useRouteMatch(patterns: readonly string[]) { - const { pathname } = useLocation() - - for (let i = 0; i < patterns.length; i += 1) { - const pattern = patterns[i] - const possibleMatch = matchPath(pattern, pathname) - if (possibleMatch !== null) { - return possibleMatch - } - } - - return null -} - -export default function NavTabs() { - const routeMatch = useRouteMatch(['/', '/user', '/role']); - const currentTab = routeMatch?.pattern?.path; - - return ( - - - - - - ); - -} \ No newline at end of file diff --git a/client/src/hooks/swrHooks.ts b/client/src/hooks/swrHooks.ts index b6f577a..9430c82 100644 --- a/client/src/hooks/swrHooks.ts +++ b/client/src/hooks/swrHooks.ts @@ -198,7 +198,7 @@ export function useServers(region_id?: number | null, offset?: number, limit?: n } } -export function useServersInfo(region_id?: number, offset?: number, limit?: number) { +export function useServersInfo(region_id?: number | null, offset?: number, limit?: number) { const { data, error, isLoading } = useSWR( region_id ? `/api/servers_info?region_id=${region_id}&offset=${offset || 0}&limit=${limit || 10}` : `/api/servers_info?offset=${offset || 0}&limit=${limit || 10}`, (url: string) => fetcher(url, BASE_URL.servers), diff --git a/client/src/layouts/DashboardLayout.tsx b/client/src/layouts/DashboardLayout.tsx index c8154c3..46f080d 100644 --- a/client/src/layouts/DashboardLayout.tsx +++ b/client/src/layouts/DashboardLayout.tsx @@ -1,96 +1,28 @@ -import * as React from 'react'; -import { styled, createTheme, ThemeProvider } from '@mui/material/styles'; -import CssBaseline from '@mui/material/CssBaseline'; -import MuiDrawer from '@mui/material/Drawer'; -import Box from '@mui/material/Box'; -import MuiAppBar, { AppBarProps as MuiAppBarProps } from '@mui/material/AppBar'; -import Toolbar from '@mui/material/Toolbar'; -import List from '@mui/material/List'; -import Typography from '@mui/material/Typography'; -import Divider from '@mui/material/Divider'; -import IconButton from '@mui/material/IconButton'; -import MenuIcon from '@mui/icons-material/Menu'; -import { colors, ListItem, ListItemButton, ListItemIcon, ListItemText, } from '@mui/material'; +import { AppShell, Avatar, Burger, Button, Flex, Group, Menu, NavLink, rem, Text, useMantineColorScheme } from '@mantine/core'; +import { useDisclosure } from '@mantine/hooks'; import { Outlet, useNavigate } from 'react-router-dom'; -import { UserData } from '../interfaces/auth'; -import { getUserData, useAuthStore } from '../store/auth'; -import { useTheme } from '@emotion/react'; -import AccountMenu from '../components/AccountMenu'; import { pages } from '../App'; +import { IconChevronDown, IconLogout, IconSettings, IconMoon, IconSun } from '@tabler/icons-react'; +import { getUserData, logout, useAuthStore } from '../store/auth'; +import { useEffect, useState } from 'react'; +import { UserData } from '../interfaces/auth'; -const drawerWidth: number = 240; - -interface AppBarProps extends MuiAppBarProps { - open?: boolean; -} - -const AppBar = styled(MuiAppBar, { - shouldForwardProp: (prop) => prop !== 'open', -})(({ theme, open }) => ({ - zIndex: theme.zIndex.drawer + 1, - transition: theme.transitions.create(['width', 'margin'], { - easing: theme.transitions.easing.sharp, - duration: theme.transitions.duration.leavingScreen, - }), - ...(open && { - marginLeft: drawerWidth, - width: `calc(100% - ${drawerWidth}px)`, - transition: theme.transitions.create(['width', 'margin'], { - easing: theme.transitions.easing.sharp, - duration: theme.transitions.duration.enteringScreen, - }), - }), -})); - -const Drawer = styled(MuiDrawer, { shouldForwardProp: (prop) => prop !== 'open' })( - ({ theme, open }) => ({ - '& .MuiDrawer-paper': { - position: 'relative', - whiteSpace: 'nowrap', - width: drawerWidth, - transition: theme.transitions.create('width', { - easing: theme.transitions.easing.sharp, - duration: theme.transitions.duration.enteringScreen, - }), - boxSizing: 'border-box', - ...(!open && { - overflowX: 'hidden', - transition: theme.transitions.create('width', { - easing: theme.transitions.easing.sharp, - duration: theme.transitions.duration.leavingScreen, - }), - width: theme.spacing(7), - [theme.breakpoints.up('sm')]: { - //width: theme.spacing(9), - }, - }), - }, - }), -); - -export default function DashboardLayout() { - const theme = useTheme() - const innerTheme = createTheme(theme) - - const [open, setOpen] = React.useState(true); - const toggleDrawer = () => { - setOpen(!open); - }; - - const authStore = useAuthStore(); - +function DashboardLayout() { + const [mobileOpened, { toggle: toggleMobile }] = useDisclosure() + const [desktopOpened, { toggle: toggleDesktop }] = useDisclosure(true) const navigate = useNavigate() const getPageTitle = () => { - const currentPath = location.pathname; - const allPages = [...pages]; - const currentPage = allPages.find(page => page.path === currentPath); - return currentPage ? currentPage.label : "Dashboard"; - }; + const currentPath = location.pathname + const allPages = [...pages] + const currentPage = allPages.find(page => page.path === currentPath) + return currentPage ? currentPage.label : "Панель управления" + } - const [userData, setUserData] = React.useState(); + const authStore = useAuthStore() + const [userData, setUserData] = useState() - React.useEffect(() => { + useEffect(() => { if (authStore) { const stored = getUserData() if (stored) { @@ -99,113 +31,95 @@ export default function DashboardLayout() { } }, [authStore]) + const { colorScheme, setColorScheme } = useMantineColorScheme(); + return ( - - - - - - + + + + + + + + + {getPageTitle()} + + + + - - - - - {getPageTitle()} - - - - - {userData?.name} {userData?.surname} - - {userData?.login} - - - - - - - - - - - - - - - - - - - {pages.filter((page) => page.drawer).filter((page) => page.enabled).map((item, index) => ( - - { - navigate(item.path) - }} - style={{ background: location.pathname === item.path ? innerTheme.palette.action.selected : "transparent" }} - selected={location.pathname === item.path} + + + + + {userData?.login} + : + } + onClick={() => colorScheme === 'dark' ? setColorScheme('light') : setColorScheme('dark')} > - - {item.icon} - - - - - ))} - - + Тема: {colorScheme === 'dark' ? 'тёмная' : 'светлая'} + + + } + onClick={() => navigate('/settings')} + > + Настройки профиля + + { + logout() + navigate("/auth/signin") + }} + leftSection={} + > + Выход + + + + + + + + {pages.filter((page) => page.drawer).filter((page) => page.enabled).map((item) => ( + navigate(item.path)} + label={item.label} + leftSection={item.icon} + active={location.pathname === item.path} + style={{textWrap: 'nowrap'}} + /> + ))} + + + + + + ) +} - - theme.palette.mode === 'light' - ? theme.palette.grey[100] - : theme.palette.grey[900], - flexGrow: 1, - maxHeight: "100vh", - overflow: 'auto', - }} - > - - - - - - ); -} \ No newline at end of file +export default DashboardLayout \ No newline at end of file diff --git a/client/src/layouts/DashboardLayoutResponsive.tsx b/client/src/layouts/DashboardLayoutResponsive.tsx deleted file mode 100644 index b99f8e4..0000000 --- a/client/src/layouts/DashboardLayoutResponsive.tsx +++ /dev/null @@ -1,252 +0,0 @@ -// Layout for dashboard with responsive drawer - -import { Outlet, useLocation, useNavigate } from "react-router-dom" -import * as React from 'react'; -import AppBar from '@mui/material/AppBar'; -import Box from '@mui/material/Box'; -import CssBaseline from '@mui/material/CssBaseline'; -import Divider from '@mui/material/Divider'; -import Drawer from '@mui/material/Drawer'; -import IconButton from '@mui/material/IconButton'; -import List from '@mui/material/List'; -import ListItem from '@mui/material/ListItem'; -import ListItemButton from '@mui/material/ListItemButton'; -import ListItemIcon from '@mui/material/ListItemIcon'; -import ListItemText from '@mui/material/ListItemText'; -import MenuIcon from '@mui/icons-material/Menu'; -import Toolbar from '@mui/material/Toolbar'; -import Typography from '@mui/material/Typography'; -import { Api, ExitToApp, Home, People, Settings, Shield } from "@mui/icons-material"; -import { getUserData, useAuthStore } from "../store/auth"; -import { UserData } from "../interfaces/auth"; - -const drawerWidth = 240; - -export default function DashboardLayoutResponsive() { - const [open, setOpen] = React.useState(true); - - const authStore = useAuthStore(); - const [userData, setUserData] = React.useState(); - - const location = useLocation() - - const navigate = useNavigate() - - //const { window } = props; - const [mobileOpen, setMobileOpen] = React.useState(false); - const [isClosing, setIsClosing] = React.useState(false); - - const handleDrawerClose = () => { - setIsClosing(true); - setMobileOpen(false); - }; - - const handleDrawerTransitionEnd = () => { - setIsClosing(false); - }; - - const handleDrawerToggle = () => { - if (!isClosing) { - setMobileOpen(!mobileOpen); - } - }; - - const pages = [ - { - label: "Главная", - path: "/", - icon: - }, - { - label: "Пользователи", - path: "/user", - icon: - }, - { - label: "Роли", - path: "/role", - icon: - }, - { - label: "API Test", - path: "/api-test", - icon: - }, - ] - - const misc = [ - { - label: "Настройки", - path: "/settings", - icon: - }, - { - label: "Выход", - path: "/signOut", - icon: - } - ] - - const getPageTitle = () => { - const currentPath = location.pathname; - const allPages = [...pages, ...misc]; - const currentPage = allPages.find(page => page.path === currentPath); - return currentPage ? currentPage.label : "Dashboard"; - }; - - const toggleDrawer = () => { - setOpen(!open); - }; - - const drawer = ( -
- - - - {userData?.name} {userData?.surname} - - {userData?.login} - - - - - - - - - - - - {pages.map((item, index) => ( - - { - navigate(item.path) - }} - selected={location.pathname === item.path} - > - - {item.icon} - - - - - ))} - - - - - - {misc.map((item, index) => ( - - { - navigate(item.path) - }} - selected={location.pathname === item.path} - > - - {item.icon} - - - - - ))} - -
- ); - - React.useEffect(() => { - if (authStore) { - const stored = getUserData() - if (stored) { - setUserData(stored) - } - } - }, [authStore]) - - return ( - - - - - - - - - {getPageTitle()} - - - - - - {/* The implementation can be swapped with js to avoid SEO duplication of links. */} - - {drawer} - - - {drawer} - - - - - - - - - ); -} \ No newline at end of file diff --git a/client/src/layouts/MainLayout.tsx b/client/src/layouts/MainLayout.tsx index e0711cc..45a838c 100644 --- a/client/src/layouts/MainLayout.tsx +++ b/client/src/layouts/MainLayout.tsx @@ -1,31 +1,12 @@ // Layout for fullscreen pages -import { Box, createTheme, ThemeProvider, useTheme } from "@mui/material"; +import { Flex } from "@mantine/core"; import { Outlet } from "react-router-dom"; export default function MainLayout() { - const theme = useTheme() - const innerTheme = createTheme(theme) - return ( - - theme.palette.mode === 'light' - ? theme.palette.grey[900] - : theme.palette.grey[100], - backgroundColor: (theme) => - theme.palette.mode === 'light' - ? theme.palette.grey[100] - : theme.palette.grey[900], - flexGrow: 1, - maxHeight: "100vh", - height: '100%', - overflow: 'auto', - }} - > - - - + + + ) } \ No newline at end of file diff --git a/client/src/main.tsx b/client/src/main.tsx index 319487d..65dbc81 100644 --- a/client/src/main.tsx +++ b/client/src/main.tsx @@ -1,98 +1,15 @@ import "@fontsource/inter"; -import React, { useEffect } from 'react' +import '@mantine/core/styles.css'; +import React from 'react' import ReactDOM from 'react-dom/client' import App from './App.tsx' import './index.css' -import { ThemeProvider } from '@emotion/react' -import { createTheme } from '@mui/material' -import { ruRU } from '@mui/material/locale' -import { getDarkMode, usePrefStore } from "./store/preferences.ts"; - -const mainTheme = createTheme( - { - typography: { - fontFamily: [ - 'Inter' - ].join(',') - }, - components: { - MuiAppBar: { - // styleOverrides: { - // colorPrimary: { - // backgroundColor: 'gray' - // } - // } - }, - MuiListItemButton: { - defaultProps: { - //disableRipple: true - } - }, - MuiButton: { - defaultProps: { - //disableRipple: true - } - }, - MuiButtonBase: { - defaultProps: { - //disableRipple: true, - } - }, - MuiButtonGroup: { - defaultProps: { - //disableRipple: true, - } - }, - MuiIconButton: { - defaultProps: { - - } - }, - MuiIcon: { - defaultProps: { - } - } - }, - }, - ruRU -) - -const darkTheme = createTheme( - { - ...mainTheme, - palette: { - mode: "dark", - primary: { main: '#1976d2' }, - }, - }, -); - -const lightTheme = createTheme( - { - ...mainTheme, - palette: { - mode: "light", - primary: { main: '#1976d2' }, - }, - }, -); - -function ThemedApp() { - const prefStore = usePrefStore() - - useEffect(() => { - getDarkMode() - }, []) - - return ( - - - - ) -} +import { MantineProvider } from '@mantine/core'; ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( - + + + , ) diff --git a/client/src/pages/Boilers.tsx b/client/src/pages/Boilers.tsx index fc9ee0b..b9c27e6 100644 --- a/client/src/pages/Boilers.tsx +++ b/client/src/pages/Boilers.tsx @@ -1,8 +1,7 @@ -import { Box, Typography } from '@mui/material' -import { DataGrid, GridColDef } from '@mui/x-data-grid' +import { GridColDef } from '@mui/x-data-grid' import { useEffect, useState } from 'react' -import { IBoiler } from '../interfaces/fuel' import { useBoilers } from '../hooks/swrHooks' +import { Badge, Flex, Table, Text } from '@mantine/core' function Boilers() { const [boilersPage, setBoilersPage] = useState(1) @@ -26,7 +25,7 @@ function Boilers() { }, []) const boilersColumns: GridColDef[] = [ - { field: 'id', headerName: 'ID', type: "number" }, + { field: 'id_object', headerName: 'ID', type: "number" }, { field: 'boiler_name', headerName: 'Название', type: "string", flex: 1 }, { field: 'boiler_code', headerName: 'Код', type: "string", flex: 1 }, { field: 'id_city', headerName: 'Город', type: "string", flex: 1 }, @@ -34,23 +33,52 @@ function Boilers() { ] return ( - - - - Котельные - + + + Котельные + - {boilers && - { - return { ...boiler, id: boiler.id_object } - })} - columns={boilersColumns} - /> - } + {boilers && + + + + {boilersColumns.map(column => ( + {column.headerName} + ))} + + + + {boilers.map((boiler: any) => ( + + {boilersColumns.map(column => { + if (column.field === 'activity') { + return ( + boiler.activity ? ( + + + Активен + + - - + ) : ( + + + Отключен + + + ) + ) + } + else return ( + {boiler[column.field]} + ) + })} + + ))} + +
+ } +
) } diff --git a/client/src/pages/Main.tsx b/client/src/pages/Main.tsx index 1cd128f..4f3e3e0 100644 --- a/client/src/pages/Main.tsx +++ b/client/src/pages/Main.tsx @@ -1,15 +1,54 @@ -import { Box, Card, Typography } from "@mui/material"; +import { Card, Flex, SimpleGrid, Text } from "@mantine/core"; +import { IconBuildingFactory2, IconFiles, IconMap, IconReport, IconServer, IconShield, IconUsers } from "@tabler/icons-react"; +import { ReactNode } from "react"; +import { useNavigate } from "react-router-dom"; export default function Main() { - return ( - - - Последние файлы - + const navigate = useNavigate() - + interface CustomCardProps { + link: string; + icon: ReactNode; + label: string; + } + const CustomCard = ({ + link, + icon, + label + }: CustomCardProps) => { + return ( + navigate(link)} + withBorder + style={{ cursor: 'pointer', userSelect: 'none' }} + > + + {icon} + + + {label} + - + ) + } + + return ( + + + Главная + + + + } label="Пользователи" /> + } label="Роли" /> + } label="Документы" /> + } label="Отчеты" /> + } label="Серверы" /> + } label="Котельные" /> + } label="ИКС" /> + + + ) } \ No newline at end of file diff --git a/client/src/pages/NotFound.tsx b/client/src/pages/NotFound.tsx index 0a7c6bf..59dea02 100644 --- a/client/src/pages/NotFound.tsx +++ b/client/src/pages/NotFound.tsx @@ -1,13 +1,16 @@ -import { Error } from "@mui/icons-material"; -import { Box, Typography } from "@mui/material"; +import { Flex, Text } from "@mantine/core"; +import { IconError404 } from "@tabler/icons-react"; export default function NotFound() { return ( - <> - - - Запрашиваемая страница не найдена. - - + + + + + Запрашиваемая страница не найдена. + + + + ) } \ No newline at end of file diff --git a/client/src/pages/Reports.tsx b/client/src/pages/Reports.tsx index 1ca710c..b9bbc35 100644 --- a/client/src/pages/Reports.tsx +++ b/client/src/pages/Reports.tsx @@ -1,26 +1,25 @@ -import { Fragment, useEffect, useState } from "react" -import { Autocomplete, Box, Button, CircularProgress, IconButton, TextField } from "@mui/material" -import { DataGrid } from "@mui/x-data-grid" +import { useEffect, useState } from "react" import { useCities, useReport, useReportExport } from "../hooks/swrHooks" import { useDebounce } from "@uidotdev/usehooks" import { ICity } from "../interfaces/fuel" -import { Update } from "@mui/icons-material" import { mutate } from "swr" +import { ActionIcon, Autocomplete, Badge, Button, CloseButton, Flex, Table } from "@mantine/core" +import { IconRefresh } from "@tabler/icons-react" export default function Reports() { const [download, setDownload] = useState(false) - const [search, setSearch] = useState("") + const [search, setSearch] = useState("") const debouncedSearch = useDebounce(search, 500) - const [selectedOption, setSelectedOption] = useState(null) - const { cities, isLoading } = useCities(10, 1, debouncedSearch) + const [selectedOption, setSelectedOption] = useState(null) + const { cities } = useCities(10, 1, debouncedSearch) - const { report, isLoading: reportLoading } = useReport(selectedOption?.id) + const { report } = useReport(selectedOption) - const { reportExported } = useReportExport(selectedOption?.id, download) + const { reportExported } = useReportExport(selectedOption, download) const refreshReport = async () => { - mutate(`/info/reports/${selectedOption?.id}?to_export=false`) + mutate(`/info/reports/${selectedOption}?to_export=false`) } useEffect(() => { @@ -41,9 +40,32 @@ export default function Reports() { } return ( - - + + + {/* */} ({ label: item.name, value: item.id.toString() })) : []} + onSelect={(e) => console.log(e.currentTarget.value)} + onChange={(value) => setSearch(value)} + onOptionSubmit={(value) => setSelectedOption(Number(value))} + rightSection={ + search !== '' && ( + event.preventDefault()} + onClick={() => { + setSearch('') + setSelectedOption(null) + }} + aria-label="Clear value" + /> + ) + } + value={search} + /> + {/* setSearch(value)} onChange={(_, value) => setSelectedOption(value)} @@ -68,18 +90,78 @@ export default function Reports() { }} /> )} - /> + /> */} - refreshReport()}> - - + refreshReport()}> + + - - + - + + + {[ + { field: 'id', headerName: '№', width: 70 }, + ...Object.keys(report).map(key => ({ + field: key, + headerName: key.charAt(0).toUpperCase() + key.slice(1), + width: 150 + })) + ].map(column => ( + {column.headerName} + ))} + + + + {[...new Set(Object.keys(report).flatMap(key => Object.keys(report[key])))].map(id => { + const row: any = { id: Number(id) }; + Object.keys(report).forEach(key => { + row[key] = report[key][id]; + }); + return ( + {[ + { field: 'id', headerName: '№', width: 70 }, + ...Object.keys(report).map(key => ({ + field: key, + headerName: key.charAt(0).toUpperCase() + key.slice(1), + width: 150 + })) + ].map(column => { + if (column.field === 'Активность') { + return ( + row['Активность'] ? ( + + + Активен + + + + ) : ( + + + Отключен + + + ) + ) + } + return ( + {row[column.field]} + ) + })} + ) + })} + + + } + + + {/* { }} - /> - + /> */} + ) } \ No newline at end of file diff --git a/client/src/pages/Roles.tsx b/client/src/pages/Roles.tsx index 1afacab..e14e892 100644 --- a/client/src/pages/Roles.tsx +++ b/client/src/pages/Roles.tsx @@ -1,15 +1,15 @@ -import { useState } from 'react' -import { Box, Button, CircularProgress, Modal } from '@mui/material' -import { DataGrid, GridColDef } from '@mui/x-data-grid' +import { GridColDef } from '@mui/x-data-grid' import { useRoles } from '../hooks/swrHooks' import { CreateField } from '../interfaces/create' import RoleService from '../services/RoleService' import FormFields from '../components/FormFields' +import { Button, Flex, Loader, Modal, Table } from '@mantine/core' +import { useDisclosure } from '@mantine/hooks' export default function Roles() { const { roles, isError, isLoading } = useRoles() - const [open, setOpen] = useState(false) + const [opened, { open, close }] = useDisclosure(false); const createFields: CreateField[] = [ { key: 'name', headerName: 'Название', type: 'string', required: true, defaultValue: '' }, @@ -23,43 +23,42 @@ export default function Roles() { ]; if (isError) return
Произошла ошибка при получении данных.
- if (isLoading) return + if (isLoading) return return ( - - - setOpen(false)} - > + - + + + {columns.map(column => ( + {column.headerName} + ))} + + + {roles.map((role: any) => ( + + {columns.map(column => ( + {role[column.field]} + ))} + + ))} + + + {/* { }} - /> - + /> */} + ) } \ No newline at end of file diff --git a/client/src/pages/Servers.tsx b/client/src/pages/Servers.tsx index f941816..e1b46f5 100644 --- a/client/src/pages/Servers.tsx +++ b/client/src/pages/Servers.tsx @@ -1,67 +1,41 @@ -import { Box, Tab, Tabs } from "@mui/material" import { useState } from "react" import ServersView from "../components/ServersView" import ServerIpsView from "../components/ServerIpsView" import ServerHardware from "../components/ServerHardware" import ServerStorage from "../components/ServerStorages" +import { Flex, Tabs } from "@mantine/core" export default function Servers() { - const [currentTab, setCurrentTab] = useState(0) - - const handleTabChange = (newValue: number) => { - setCurrentTab(newValue); - } - - interface TabPanelProps { - children?: React.ReactNode; - index: number; - value: number; - } - - function CustomTabPanel(props: TabPanelProps) { - const { children, value, index, ...other } = props; - - return ( - - ); - } + const [currentTab, setCurrentTab] = useState('0') return ( - - - - handleTabChange(value) - } aria-label="basic tabs example"> - - - - + + + + + Серверы + IP-адреса + Hardware + Storages + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + {/* */} - + ) } \ No newline at end of file diff --git a/client/src/pages/Settings.tsx b/client/src/pages/Settings.tsx index 0275a7a..95a647c 100644 --- a/client/src/pages/Settings.tsx +++ b/client/src/pages/Settings.tsx @@ -1,4 +1,3 @@ -import { Box, Stack } from "@mui/material" import UserService from "../services/UserService" import { setUserData, useAuthStore } from "../store/auth" import { useEffect, useState } from "react" @@ -6,6 +5,7 @@ import { CreateField } from "../interfaces/create" import { IUser } from "../interfaces/user" import FormFields from "../components/FormFields" import AuthService from "../services/AuthService" +import { Flex } from "@mantine/core" export default function Settings() { const { token } = useAuthStore() @@ -39,37 +39,31 @@ export default function Settings() { ] return ( - {currentUser && - - - { - setUserData(data) - }} - submitHandler={(data) => UserService.updateUser({ id: currentUser.id, ...data })} - title="Пользователь" - /> - + + { + setUserData(data) + }} + submitHandler={(data) => UserService.updateUser({ id: currentUser.id, ...data })} + title="Пользователь" + /> - - AuthService.updatePassword({ id: currentUser.id, ...data })} - title="Смена пароля" - /> - - + AuthService.updatePassword({ id: currentUser.id, ...data })} + title="Смена пароля" + /> + } - + ) } \ No newline at end of file diff --git a/client/src/pages/TableTest.module.scss b/client/src/pages/TableTest.module.scss new file mode 100644 index 0000000..2c058a3 --- /dev/null +++ b/client/src/pages/TableTest.module.scss @@ -0,0 +1,10 @@ +$ka-background-color: #2c2c2c; +$ka-border-color: #4d4d4d; +$ka-cell-hover-background-color: transparentize(#fff, 0.8); +$ka-color-base: #fefefe; +$ka-input-background-color: $ka-background-color; +$ka-input-border-color: $ka-border-color; +$ka-input-color: $ka-color-base; +$ka-row-hover-background-color: transparentize(#fff, 0.9); +$ka-thead-background-color: #1b1b1b; +$ka-thead-color: #c5c5c5; \ No newline at end of file diff --git a/client/src/pages/TableTest.tsx b/client/src/pages/TableTest.tsx new file mode 100644 index 0000000..d164e88 --- /dev/null +++ b/client/src/pages/TableTest.tsx @@ -0,0 +1,32 @@ +import React from 'react' +import { Table, DataType } from 'ka-table' +import 'ka-table/style.css'; +import { Flex } from '@mantine/core'; +import styles from './TableTest.module.scss' + +function TableTest() { + return ( + + ({ + column1: `column:1 row:${index}`, + column2: `column:2 row:${index}`, + column3: `column:3 row:${index}`, + column4: `column:4 row:${index}`, + id: index, + }), + )} + rowKeyField={'id'} + /> + + ) +} + +export default TableTest \ No newline at end of file diff --git a/client/src/pages/Users.tsx b/client/src/pages/Users.tsx index 7123567..c318c65 100644 --- a/client/src/pages/Users.tsx +++ b/client/src/pages/Users.tsx @@ -1,18 +1,27 @@ -import { Box, Button, CircularProgress, Modal } from "@mui/material" -import { DataGrid, GridColDef } from "@mui/x-data-grid" +import { GridColDef } from "@mui/x-data-grid" import { useRoles, useUsers } from "../hooks/swrHooks" import { IRole } from "../interfaces/role" -import { useState } from "react" +import { useEffect, useState } from "react" import { CreateField } from "../interfaces/create" import UserService from "../services/UserService" import FormFields from "../components/FormFields" +import { Badge, Button, Flex, Loader, Modal, Pagination, Select, Table } from "@mantine/core" +import { useDisclosure } from "@mantine/hooks" export default function Users() { const { users, isError, isLoading } = useUsers() const { roles } = useRoles() - const [open, setOpen] = useState(false) + const [roleOptions, setRoleOptions] = useState() + + useEffect(() => { + if (Array.isArray(roles)) { + setRoleOptions(roles.map((role: IRole) => ({ label: role.name, value: role.id.toString() }))) + } + }, [roles]) + + const [opened, { open, close }] = useDisclosure(false); const createFields: CreateField[] = [ { key: 'email', headerName: 'E-mail', type: 'string', required: true, defaultValue: '' }, @@ -30,7 +39,7 @@ export default function Users() { { field: 'phone', headerName: 'Телефон', flex: 1, editable: true }, { field: 'name', headerName: 'Имя', flex: 1, editable: true }, { field: 'surname', headerName: 'Фамилия', flex: 1, editable: true }, - { field: 'is_active', headerName: 'Активен', type: "boolean", flex: 1, editable: true }, + { field: 'is_active', headerName: 'Статус', type: "boolean", flex: 1, editable: true }, { field: 'role_id', headerName: 'Роль', @@ -41,44 +50,92 @@ export default function Users() { }, ]; - if (isError) return
Произошла ошибка при получении данных.
- if (isLoading) return + if (isError) return ( +
+ Произошла ошибка при получении данных. +
+ ) + + if (isLoading) { + return ( + + + + ) + } return ( - - - setOpen(false)} - > + - + + + {columns.map(column => ( + {column.headerName} + ))} + + + + {users.map((user: any) => ( + + {columns.map(column => { + if (column.field === 'is_active') { + return ( + user.is_active ? ( + + + Активен + + + + ) : ( + + + Отключен + + + ) + ) + } + else if (column.field === 'role_id') { + return ( + +
+ } + + + + {/* { }} - /> -
+ /> */} + ) } \ No newline at end of file diff --git a/client/src/pages/auth/PasswordReset.tsx b/client/src/pages/auth/PasswordReset.tsx index b57a175..b78e7aa 100644 --- a/client/src/pages/auth/PasswordReset.tsx +++ b/client/src/pages/auth/PasswordReset.tsx @@ -1,8 +1,9 @@ -import { Box, Button, CircularProgress, Container, Fade, Grow, Stack, TextField, Typography } from '@mui/material' +import { CircularProgress, Fade, Grow } from '@mui/material' import { useState } from 'react' import { SubmitHandler, useForm } from 'react-hook-form'; import AuthService from '../../services/AuthService'; import { CheckCircle } from '@mui/icons-material'; +import { Button, Flex, Paper, Text, TextInput } from '@mantine/core'; interface PasswordResetProps { email: string; @@ -31,61 +32,58 @@ function PasswordReset() { } return ( - - - + + + Восстановление пароля - +
{!success && - - + + Введите адрес электронной почты, на который будут отправлены новые данные для авторизации: - + - - - - - + - + } {success && - - + + - + На указанный адрес было отправлено письмо с новыми данными для авторизации. - - - - - - + + }
-
-
+ + ) } diff --git a/client/src/pages/auth/SignIn.tsx b/client/src/pages/auth/SignIn.tsx index 2c3b815..dc5ae0b 100644 --- a/client/src/pages/auth/SignIn.tsx +++ b/client/src/pages/auth/SignIn.tsx @@ -1,14 +1,14 @@ import { useForm, SubmitHandler } from 'react-hook-form'; -import { TextField, Button, Container, Typography, Box, Stack, Link, CircularProgress } from '@mui/material'; import { AxiosResponse } from 'axios'; import { ApiResponse, LoginFormData } from '../../interfaces/auth'; import { login, setUserData } from '../../store/auth'; import { useNavigate } from 'react-router-dom'; import AuthService from '../../services/AuthService'; import UserService from '../../services/UserService'; +import { Button, Flex, Loader, Paper, Text, TextInput } from '@mantine/core'; const SignIn = () => { - const { register, handleSubmit, setError, formState: { errors, isSubmitting } } = useForm({ + const { register, handleSubmit, setError, formState: { errors, isSubmitting, isValid } } = useForm({ defaultValues: { username: '', password: '', @@ -47,54 +47,48 @@ const SignIn = () => { }; return ( - - - + + + Вход - +
- - + - - - + + + - - - {/* */} - - + +
-
-
+ + ); }; diff --git a/client/yarn.lock b/client/yarn.lock index d79b1a6..fc8cb13 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -936,7 +936,7 @@ resolved "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.23.9", "@babel/runtime@^7.24.7", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": +"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.13", "@babel/runtime@^7.23.9", "@babel/runtime@^7.24.7", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": version "7.24.7" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz" integrity sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw== @@ -1136,17 +1136,26 @@ "@floating-ui/core" "^1.0.0" "@floating-ui/utils" "^0.2.0" -"@floating-ui/react-dom@^2.0.8": - version "2.1.0" - resolved "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.0.tgz" - integrity sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA== +"@floating-ui/react-dom@^2.0.8", "@floating-ui/react-dom@^2.1.2": + version "2.1.2" + resolved "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz" + integrity sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A== dependencies: "@floating-ui/dom" "^1.0.0" -"@floating-ui/utils@^0.2.0": - version "0.2.2" - resolved "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz" - integrity sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw== +"@floating-ui/react@^0.26.9": + version "0.26.24" + resolved "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.24.tgz" + integrity sha512-2ly0pCkZIGEQUq5H8bBK0XJmc1xIK/RM3tvVzY3GBER7IOD1UgmC2Y2tjj4AuS+TC+vTE1KJv2053290jua0Sw== + dependencies: + "@floating-ui/react-dom" "^2.1.2" + "@floating-ui/utils" "^0.2.8" + tabbable "^6.0.0" + +"@floating-ui/utils@^0.2.0", "@floating-ui/utils@^0.2.8": + version "0.2.8" + resolved "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz" + integrity sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig== "@fontsource/inter@^5.0.19": version "5.0.19" @@ -1244,6 +1253,100 @@ resolved "https://registry.npmjs.org/@js-preview/pdf/-/pdf-2.0.2.tgz" integrity sha512-g7RsK4k97y+/XvsjZfltEotty+QpfeQGDBAbr9UB0npjVP+2gxRnIhNEPpYFr44XQ6ZNjAIs5nKFppGjJVFJMQ== +"@mantine/carousel@^7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@mantine/carousel/-/carousel-7.13.0.tgz" + integrity sha512-SmBsBwi8WRzAnnGPorhmfJ8enxTn8VQ74dAjO3XG9Z85VFho2uBeDCqmFv1AQDiYKAsCDO46EykPkBcgZJ1nfg== + +"@mantine/charts@^7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@mantine/charts/-/charts-7.13.0.tgz" + integrity sha512-x5aH3EI6Vbum8yOIC0IADrPXxFCWCoBSeIQr/oEWDnnRkARZL6P3Q3ltFp7oQS3nrK176ztUDks79Kxxo5FkLg== + +"@mantine/code-highlight@^7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@mantine/code-highlight/-/code-highlight-7.13.0.tgz" + integrity sha512-0EVIX2/L2STdzlKNdHc4aslFObWOP+GQt3/cr8lxwNvwquUFCPG3WxZixa8HfllKSgD5MlXVuCagyvZ35e94jg== + dependencies: + clsx "^2.1.1" + highlight.js "^11.9.0" + +"@mantine/core@^7.13.0", "@mantine/core@7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@mantine/core/-/core-7.13.0.tgz" + integrity sha512-aQpx3Q69ATDhVopBNkWS0sql93ZaPqeA5jTgqU7GxZvJdkpG87vbKYgp4cDV/gqr7BYu4kel0smeHYuPemiZ8Q== + dependencies: + "@floating-ui/react" "^0.26.9" + clsx "^2.1.1" + react-number-format "^5.3.1" + react-remove-scroll "^2.5.7" + react-textarea-autosize "8.5.3" + type-fest "^4.12.0" + +"@mantine/dates@^7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@mantine/dates/-/dates-7.13.0.tgz" + integrity sha512-fCNS7JPCqnTtFJeGxdl2yFaMxyCP44BP2tYVZYC5KejvhfeA9u8AmtD5FsOnrdjMEnVc1DpLJobrwfmp98Ektg== + dependencies: + clsx "^2.1.1" + +"@mantine/dropzone@^7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@mantine/dropzone/-/dropzone-7.13.0.tgz" + integrity sha512-NDpSJ6rEN8dJwI5/qImG+6lNH/bLmf3cz4cErMR/DXNMUZGGGVx8V81oJfKoXlQi3P+yy0d6UOPiqAz1wkdC8Q== + dependencies: + react-dropzone-esm "15.0.1" + +"@mantine/form@^7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@mantine/form/-/form-7.13.0.tgz" + integrity sha512-CeQbE08D7JNA+YyaGKAdFj40rp0JDFobcobIgNZzIyzXX8QNxIrtGhX3QqKIiwiFcjJi4WCxUSzDrd6vOKaEmA== + dependencies: + fast-deep-equal "^3.1.3" + klona "^2.0.6" + +"@mantine/hooks@^7.13.0", "@mantine/hooks@7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.13.0.tgz" + integrity sha512-oQpwSi0gajH3UR1DFa9MQ+zeYy75xbc8Im9jIIepLbiJXtIcPK+yll1BMxNwPQLYU1pYI6ZgUazI2PoykVNmsg== + +"@mantine/modals@^7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@mantine/modals/-/modals-7.13.0.tgz" + integrity sha512-0Yl8zhbeS4ExpqbPmH6qarS3XpmrkRzB2EATC0p509bviHlNa0MTGhR+lbW9zAdw7UXjqZmKUe3yXO23ONVgpw== + +"@mantine/notifications@^7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@mantine/notifications/-/notifications-7.13.0.tgz" + integrity sha512-EEgKFxUK/4s2FKTYb6hKFbcsLwnccSe/8GsJ18DWGiLRxFq9DsgWCzfPAe+PVcGTITYfK7nbKxEF5l+KLdPOtQ== + dependencies: + "@mantine/store" "7.13.0" + react-transition-group "4.4.5" + +"@mantine/nprogress@^7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@mantine/nprogress/-/nprogress-7.13.0.tgz" + integrity sha512-k9KE30vQtqy8xbpnKKdIRL2YBCJYGWZdNZ9B02hWRxJPvJyFoUtVGP5qukLKHpO82t1+XGwJd15Y26HYsqE5ww== + dependencies: + "@mantine/store" "7.13.0" + +"@mantine/spotlight@^7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@mantine/spotlight/-/spotlight-7.13.0.tgz" + integrity sha512-zQ99lm0eOllXhT2bAr9YVaO3DFYlJVFxEMbXxLO5bG0AtAb7DLrhINXbNyH96OiUt+VkahSVHxbqLv5J8z2WvQ== + dependencies: + "@mantine/store" "7.13.0" + +"@mantine/store@7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@mantine/store/-/store-7.13.0.tgz" + integrity sha512-ldYJGMcmqTxffQMCQZZWNtXKlG649S3BGM8ukeZ6FLZckVXLQAR2o+G5EkETNihh0sJKR7DVsYHltL5hyxYLkg== + +"@mantine/tiptap@^7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@mantine/tiptap/-/tiptap-7.13.0.tgz" + integrity sha512-WoquUeyX6s6CVFkm4qwJWSt9e10JjX9p/LdGPpdKLn0lrJ4vGJy+L2zFDcoDxwXwgUKIw32rTmIoSsxUBziVIQ== + "@mui/base@^5.0.0-beta.40", "@mui/base@5.0.0-beta.40": version "5.0.0-beta.40" resolved "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.40.tgz" @@ -1397,7 +1500,7 @@ resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@popperjs/core@^2.11.8": +"@popperjs/core@^2.11.8", "@popperjs/core@^2.9.0": version "2.11.8" resolved "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz" integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== @@ -1446,6 +1549,11 @@ "@react-spring/shared" "~9.7.3" "@react-spring/types" "~9.7.3" +"@remirror/core-constants@3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@remirror/core-constants/-/core-constants-3.0.0.tgz" + integrity sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg== + "@remix-run/router@1.16.1": version "1.16.1" resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.16.1.tgz" @@ -1566,11 +1674,251 @@ dependencies: "@swc/counter" "^0.1.3" +"@tabler/icons-react@^3.17.0": + version "3.17.0" + resolved "https://registry.npmjs.org/@tabler/icons-react/-/icons-react-3.17.0.tgz" + integrity sha512-Ndm9Htv7KpIU1PYYrzs5EMhyA3aZGcgaxUp9Q1XOxcRZ+I0X+Ub2WS5f4bkRyDdL1s0++k2T9XRgmg2pG113sw== + dependencies: + "@tabler/icons" "3.17.0" + +"@tabler/icons@3.17.0": + version "3.17.0" + resolved "https://registry.npmjs.org/@tabler/icons/-/icons-3.17.0.tgz" + integrity sha512-sCSfAQ0w93KSnSL7tS08n73CdIKpuHP8foeLMWgDKiZaCs8ZE//N3ytazCk651ZtruTtByI3b+ZDj7nRf+hHvA== + +"@tiptap/core@^2.7.0", "@tiptap/core@^2.7.3": + version "2.7.3" + resolved "https://registry.npmjs.org/@tiptap/core/-/core-2.7.3.tgz" + integrity sha512-6b62isitaWRX6cR6V5x4O9+1lgCpoTNRrSegWwBrE1OGDHcGwdTZuzdNIbjLZ9k3qs4tXl49WKXHIXK44RDOIw== + +"@tiptap/extension-blockquote@^2.7.3": + version "2.7.3" + resolved "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-2.7.3.tgz" + integrity sha512-onUThBo5XoNB7bFPI41WYNVbhX51TQDdymqEEJ0yS+0kqYMLOGxK5rylj1p+8SfpV+AIsrl5BSccijy1N7afKA== + +"@tiptap/extension-bold@^2.7.3": + version "2.7.3" + resolved "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.7.3.tgz" + integrity sha512-jc38r/1YSix20s47qXwOAzVYmxVwySS5oTsNr9T5pFp0NWSFSwYsAn2L1Ko4BcI9nJ8VDgnGGg/JjkurGM3SCw== + +"@tiptap/extension-bubble-menu@^2.7.3": + version "2.7.3" + resolved "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.7.3.tgz" + integrity sha512-gzhiNFwbR7oWxw1DTF6MTa6bd6toLY5mFSFLn4IdrqkkY5enxJXEak/uYvJ/q2gNvtZbrgBZVZn2UABPl2e9dg== + dependencies: + tippy.js "^6.3.7" + +"@tiptap/extension-bullet-list@^2.7.3": + version "2.7.3" + resolved "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.7.3.tgz" + integrity sha512-ctcuqyWavLSgzQzRFAzubCdTbmE8p2jZWAe2nDNCfSsNDGKlqMnQVswj+qTQhlFEvJZh0AXs1N3eKA2ezNI+Yw== + +"@tiptap/extension-code-block@^2.7.3": + version "2.7.3" + resolved "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-2.7.3.tgz" + integrity sha512-WrF3X6lD8IXIWC7E5tMWL+hCMzVop3PQxFFaYi8Ovk6q3Jd8pnOtKugQp1lWcW72rek8v20LEnl1u7BkWal2TQ== + +"@tiptap/extension-code@^2.7.3": + version "2.7.3" + resolved "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-2.7.3.tgz" + integrity sha512-3QsUk7ke1GDntVKRu3BJeZhdjg1bONuJlfcsNLqjK+Y8LYjn8Y7MPCX4X3+DB5HuMUPT6Mu1xUNp1LMZq86LZg== + +"@tiptap/extension-document@^2.7.3": + version "2.7.3" + resolved "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.7.3.tgz" + integrity sha512-gL+NhS3r5T5B3DAnENis8VliFooOcpnp5diqmpiNPeQaO04GRQZCsFGmk/b/xRyEI8j80m+YtGYbpJodlvsTPw== + +"@tiptap/extension-dropcursor@^2.7.3": + version "2.7.3" + resolved "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-2.7.3.tgz" + integrity sha512-LmS31dwrdjg30g61aU6735bfWZyfdwOO+GTdXPkoDeL3b3SNAMg39Gdb0UyI7CpmJhTWgZvst7AOQXht0DQcfw== + +"@tiptap/extension-floating-menu@^2.7.3": + version "2.7.3" + resolved "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.7.3.tgz" + integrity sha512-ch8kiFJJAuF5gTddM5VNLvOzvuquYELeM4SmUQcQ5O9X7dn1L1sTwrJgpj+oLOp5K+MF2YLCYC8dAEIWIj2rlg== + dependencies: + tippy.js "^6.3.7" + +"@tiptap/extension-gapcursor@^2.7.3": + version "2.7.3" + resolved "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-2.7.3.tgz" + integrity sha512-dtrh2ulAu9F9CsytNwhaovx79XUZzhJxgweSWlZapzR77tridSMAq7OgRL+bMVBy2JDvjyUNPdm2DkNELBofcQ== + +"@tiptap/extension-hard-break@^2.7.3": + version "2.7.3" + resolved "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.7.3.tgz" + integrity sha512-HtnjmQfbjTDsrPzfRDmzH4fZvm5xZ0qmYQyRkfV4tFrD1vx6Wb2hmpfcuiBYuNVEP6OmOzG9pQV98zhfSHEcjg== + +"@tiptap/extension-heading@^2.7.3": + version "2.7.3" + resolved "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.7.3.tgz" + integrity sha512-Wq1pqUCTgFk3MddlsCZuNq9ROMctGlXGagyRcGpPtb5BJ3Ane5Njyg0lZjgGbr6CW1F3W4gy1xRKNVHXFjZ51w== + +"@tiptap/extension-history@^2.7.3": + version "2.7.3" + resolved "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.7.3.tgz" + integrity sha512-sXU1R6jvd16h0IPRroBhAzeXAMFNSldJ4vhX7dxlhWTKQHeAh1Mvuye+o9oX3oNnCm6bN++j2n/CxuZoJWOSbQ== + +"@tiptap/extension-horizontal-rule@^2.7.3": + version "2.7.3" + resolved "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.7.3.tgz" + integrity sha512-0nXP1mrZ9VQLwtzHVbyzNz2ICnwEdM6l7oDbPlP8atH/kIRpINq/SiBr2wiMnU4nHnT2SacOfuk8MUEU1DBikA== + +"@tiptap/extension-italic@^2.7.3": + version "2.7.3" + resolved "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.7.3.tgz" + integrity sha512-qMX5LjMTdPpSDp4VIpSOY0d6bB6m4CJepGlMVrQEfUEj9uMPZZxD0cME+63r/J4yIrmMCR+GJyjOu5erdYp3JA== + +"@tiptap/extension-link@^2.7.3", "@tiptap/extension-link@>=2.1.12": + version "2.7.3" + resolved "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-2.7.3.tgz" + integrity sha512-fAAt/50Adh4VlFk4yLc75p3kAYP0qCcYx1vrUd7MNZXJGvBixddsFfNNBB9GNy+SyE7TZRhX4Eg4n8pApoiPQA== + dependencies: + linkifyjs "^4.1.0" + +"@tiptap/extension-list-item@^2.7.3": + version "2.7.3" + resolved "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.7.3.tgz" + integrity sha512-xCb4WjeBn3IekWyofhc9WnxYROv9oq7KM8tMqVaMNfSfSzd6wfoijzFBeL2da1B5Pwl1tJM6MqcH70zmytMJZw== + +"@tiptap/extension-ordered-list@^2.7.3": + version "2.7.3" + resolved "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.7.3.tgz" + integrity sha512-J7PbM1tQSNpAGQ9Ft9Qm2oKQDE4J6uZv711ZwQgWBVne7CEu1zfD/ezlRe4yiw5XjeD0B91CP4KNRRKefePAjA== + +"@tiptap/extension-paragraph@^2.7.3": + version "2.7.3" + resolved "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.7.3.tgz" + integrity sha512-jcvcsN1JEYxPYQ3IgeJ7sUr3gDlIoVm9GXIV83fiF8KWw30M1jWfYJ6zgef8e5wB7d/NLhc3yhVrRk4R6P4ApQ== + +"@tiptap/extension-strike@^2.7.3": + version "2.7.3" + resolved "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.7.3.tgz" + integrity sha512-X6ybvtt/F8usRoq9MjJcTAnr0pboi3FjqZtMZOKrX1oS0bt89FcxmbymP/5VMGDLxxxzEfrRqttvZ4s/z+HOow== + +"@tiptap/extension-text@^2.7.3": + version "2.7.3" + resolved "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.7.3.tgz" + integrity sha512-p1ic3rxbY8Z+1W2e/W4qXxT9zh0x2DjY2bUq+bNTvAbjOw2D9XhE4B03vhRVvNOgQdVXqJX638fK8P34ndrV1A== + +"@tiptap/pm@^2.7.0", "@tiptap/pm@^2.7.3": + version "2.7.3" + resolved "https://registry.npmjs.org/@tiptap/pm/-/pm-2.7.3.tgz" + integrity sha512-qMUMypHjxq7n37u4iBTbAfoWf38eDi5I13l2U3a3UKt/mJBABusf2aYq4NfkY5vQQn48HbZ3Hj+TygrdPklQwQ== + dependencies: + prosemirror-changeset "^2.2.1" + prosemirror-collab "^1.3.1" + prosemirror-commands "^1.6.0" + prosemirror-dropcursor "^1.8.1" + prosemirror-gapcursor "^1.3.2" + prosemirror-history "^1.4.1" + prosemirror-inputrules "^1.4.0" + prosemirror-keymap "^1.2.2" + prosemirror-markdown "^1.13.0" + prosemirror-menu "^1.2.4" + prosemirror-model "^1.22.3" + prosemirror-schema-basic "^1.2.3" + prosemirror-schema-list "^1.4.1" + prosemirror-state "^1.4.3" + prosemirror-tables "^1.4.0" + prosemirror-trailing-node "^3.0.0" + prosemirror-transform "^1.10.0" + prosemirror-view "^1.33.10" + +"@tiptap/react@^2.7.3", "@tiptap/react@>=2.1.12": + version "2.7.3" + resolved "https://registry.npmjs.org/@tiptap/react/-/react-2.7.3.tgz" + integrity sha512-zPOWRG+4ApEXhUWE6h61ykqHjw7xcOKUjQGrXnD+Bji/sdr1ezgMnsewsRY8eHzxgXnCZoCydSsVwNqjZw+KZw== + dependencies: + "@tiptap/extension-bubble-menu" "^2.7.3" + "@tiptap/extension-floating-menu" "^2.7.3" + "@types/use-sync-external-store" "^0.0.6" + fast-deep-equal "^3" + use-sync-external-store "^1.2.2" + +"@tiptap/starter-kit@^2.7.3": + version "2.7.3" + resolved "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-2.7.3.tgz" + integrity sha512-GZd/zzdGZV8QtbIGurnS8K9WVxsOH9sdioMVQOOt8jMuETYqrEVoranN13WStbD/XsgokDE2KkvCtztqM+IKDA== + dependencies: + "@tiptap/core" "^2.7.3" + "@tiptap/extension-blockquote" "^2.7.3" + "@tiptap/extension-bold" "^2.7.3" + "@tiptap/extension-bullet-list" "^2.7.3" + "@tiptap/extension-code" "^2.7.3" + "@tiptap/extension-code-block" "^2.7.3" + "@tiptap/extension-document" "^2.7.3" + "@tiptap/extension-dropcursor" "^2.7.3" + "@tiptap/extension-gapcursor" "^2.7.3" + "@tiptap/extension-hard-break" "^2.7.3" + "@tiptap/extension-heading" "^2.7.3" + "@tiptap/extension-history" "^2.7.3" + "@tiptap/extension-horizontal-rule" "^2.7.3" + "@tiptap/extension-italic" "^2.7.3" + "@tiptap/extension-list-item" "^2.7.3" + "@tiptap/extension-ordered-list" "^2.7.3" + "@tiptap/extension-paragraph" "^2.7.3" + "@tiptap/extension-strike" "^2.7.3" + "@tiptap/extension-text" "^2.7.3" + "@tiptap/pm" "^2.7.3" + "@tokenizer/token@^0.3.0": version "0.3.0" resolved "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz" integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== +"@types/d3-array@^3.0.3": + version "3.2.1" + resolved "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz" + integrity sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg== + +"@types/d3-color@*": + version "3.1.3" + resolved "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz" + integrity sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A== + +"@types/d3-ease@^3.0.0": + version "3.0.2" + resolved "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz" + integrity sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA== + +"@types/d3-interpolate@^3.0.1": + version "3.0.4" + resolved "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz" + integrity sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA== + dependencies: + "@types/d3-color" "*" + +"@types/d3-path@*": + version "3.1.0" + resolved "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.0.tgz" + integrity sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ== + +"@types/d3-scale@^4.0.2": + version "4.0.8" + resolved "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz" + integrity sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ== + dependencies: + "@types/d3-time" "*" + +"@types/d3-shape@^3.1.0": + version "3.1.6" + resolved "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz" + integrity sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA== + dependencies: + "@types/d3-path" "*" + +"@types/d3-time@*", "@types/d3-time@^3.0.0": + version "3.0.3" + resolved "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz" + integrity sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw== + +"@types/d3-timer@^3.0.0": + version "3.0.2" + resolved "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz" + integrity sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw== + "@types/estree@^1.0.0", "@types/estree@1.0.5": version "1.0.5" resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz" @@ -1627,7 +1975,7 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^17.0.0 || ^18.0.0", "@types/react@^18.2.66", "@types/react@>=16.8": +"@types/react@*", "@types/react@^16.8.0 || ^17.0.0 || ^18.0.0", "@types/react@^16.9.0 || ^17.0.0 || ^18.0.0", "@types/react@^17.0.0 || ^18.0.0", "@types/react@^18.2.66", "@types/react@>=16.8": version "18.3.3" resolved "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz" integrity sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw== @@ -1645,6 +1993,11 @@ resolved "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz" integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== +"@types/use-sync-external-store@^0.0.6": + version "0.0.6" + resolved "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz" + integrity sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg== + "@typescript-eslint/eslint-plugin@^7.2.0": version "7.13.0" resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.0.tgz" @@ -2315,7 +2668,7 @@ clipboardy@3.0.0: execa "^5.1.1" is-wsl "^2.2.0" -clsx@^2.1.0, clsx@^2.1.1: +clsx@^2.0.0, clsx@^2.1.0, clsx@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz" integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== @@ -2505,6 +2858,11 @@ create-require@^1.1.1: resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== +crelt@^1.0.0: + version "1.0.6" + resolved "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz" + integrity sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g== + cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" @@ -2553,7 +2911,7 @@ csstype@^3.0.2, csstype@^3.1.3: resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== -"d3-array@2 - 3", "d3-array@2.10.0 - 3": +d3-array@^3.1.6, "d3-array@2 - 3", "d3-array@2.10.0 - 3": version "3.2.4" resolved "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz" integrity sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg== @@ -2572,6 +2930,11 @@ d3-delaunay@^6.0.4: dependencies: delaunator "5" +d3-ease@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz" + integrity sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w== + "d3-format@1 - 3": version "3.1.0" resolved "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz" @@ -2600,7 +2963,7 @@ d3-scale@^4.0.2: d3-time "2.1.1 - 3" d3-time-format "2 - 4" -d3-shape@^3.2.0: +d3-shape@^3.1.0, d3-shape@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz" integrity sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA== @@ -2614,13 +2977,18 @@ d3-shape@^3.2.0: dependencies: d3-time "1 - 3" -"d3-time@1 - 3", "d3-time@2.1.1 - 3": +d3-time@^3.0.0, "d3-time@1 - 3", "d3-time@2.1.1 - 3": version "3.1.0" resolved "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz" integrity sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q== dependencies: d3-array "2 - 3" +d3-timer@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz" + integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA== + data-view-buffer@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz" @@ -2648,6 +3016,11 @@ data-view-byte-offset@^1.0.0: es-errors "^1.3.0" is-data-view "^1.0.1" +dayjs@^1.11.13, dayjs@>=1.0.0: + version "1.11.13" + resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz" + integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== + debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.5" resolved "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz" @@ -2662,6 +3035,11 @@ debug@2.6.9: dependencies: ms "2.0.0" +decimal.js-light@^2.4.1: + version "2.5.1" + resolved "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz" + integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" @@ -2715,6 +3093,11 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" +detect-node-es@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz" + integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== + didyoumean@^1.2.2: version "1.2.2" resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz" @@ -2801,6 +3184,24 @@ elliptic@^6.5.3, elliptic@^6.5.5: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" +embla-carousel-react@^8.3.0, embla-carousel-react@>=7.0.0: + version "8.3.0" + resolved "https://registry.npmjs.org/embla-carousel-react/-/embla-carousel-react-8.3.0.tgz" + integrity sha512-P1FlinFDcIvggcErRjNuVqnUR8anyo8vLMIH8Rthgofw7Nj8qTguCa2QjFAbzxAUTQTPNNjNL7yt0BGGinVdFw== + dependencies: + embla-carousel "8.3.0" + embla-carousel-reactive-utils "8.3.0" + +embla-carousel-reactive-utils@8.3.0: + version "8.3.0" + resolved "https://registry.npmjs.org/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.3.0.tgz" + integrity sha512-EYdhhJ302SC4Lmkx8GRsp0sjUhEN4WyFXPOk0kGu9OXZSRMmcBlRgTvHcq8eKJE1bXWBsOi1T83B+BSSVZSmwQ== + +embla-carousel@8.3.0: + version "8.3.0" + resolved "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.3.0.tgz" + integrity sha512-Ve8dhI4w28qBqR8J+aMtv7rLK89r1ZA5HocwFz6uMB/i5EiC7bGI7y+AM80yAVUJw3qqaZYK7clmZMUR8kM3UA== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" @@ -2811,6 +3212,11 @@ emoji-regex@^9.2.2: resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== +entities@^4.4.0: + version "4.5.0" + resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" @@ -3061,6 +3467,11 @@ esutils@^2.0.2: resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +eventemitter3@^4.0.1: + version "4.0.7" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + events@^3.0.0: version "3.3.0" resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" @@ -3089,12 +3500,17 @@ execa@^5.1.1: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: +fast-deep-equal@^3, fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.2: +fast-equals@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz" + integrity sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ== + +fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.2: version "3.3.2" resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -3290,6 +3706,11 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@ has-symbols "^1.0.3" hasown "^2.0.0" +get-nonce@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz" + integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== + get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" resolved "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz" @@ -3464,6 +3885,11 @@ hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: dependencies: function-bind "^1.1.2" +highlight.js@^11.9.0: + version "11.10.0" + resolved "https://registry.npmjs.org/highlight.js/-/highlight.js-11.10.0.tgz" + integrity sha512-SYVnVFswQER+zu1laSya563s+F8VDGt7o35d4utbamowvUNLLMovFqwCLSocpZTz3MgaSRA1IbqRWZv97dtErQ== + hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" @@ -3558,6 +3984,13 @@ internal-slot@^1.0.7: resolved "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz" integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg== +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + is-arguments@^1.0.4: version "1.1.1" resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" @@ -3898,6 +4331,11 @@ jspdf@^2.5.1: dompurify "^2.2.0" html2canvas "^1.0.0-rc.5" +ka-table@^11.3.0: + version "11.3.0" + resolved "https://registry.npmjs.org/ka-table/-/ka-table-11.3.0.tgz" + integrity sha512-kXBxpPqK05MHWgBMNL07v1jmLxFdkSOlNO7iCyF3YVVPuA9SqyiE1EarzyMrazFgrvhOR0OPOpMpYmL6mVrI5g== + keyv@^4.5.3: version "4.5.4" resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" @@ -3905,6 +4343,11 @@ keyv@^4.5.3: dependencies: json-buffer "3.0.1" +klona@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz" + integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== + lerc@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/lerc/-/lerc-3.0.0.tgz" @@ -3938,6 +4381,18 @@ lines-and-columns@^1.1.6: resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +linkify-it@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz" + integrity sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ== + dependencies: + uc.micro "^2.0.0" + +linkifyjs@^4.1.0: + version "4.1.3" + resolved "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.1.3.tgz" + integrity sha512-auMesunaJ8yfkHvK4gfg1K0SaKX/6Wn9g2Aac/NwX+l5VdmFZzo/hdPGxEOETj+ryRa4/fiOPjeeKURSAJx1sg== + locate-path@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" @@ -3960,12 +4415,12 @@ lodash.sortby@^4.7.0: resolved "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz" integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== -lodash@^4.17.20: +lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -loose-envify@^1.1.0, loose-envify@^1.4.0: +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -3998,6 +4453,18 @@ magic-string@^0.30.3: dependencies: "@jridgewell/sourcemap-codec" "^1.4.15" +markdown-it@^14.0.0: + version "14.1.0" + resolved "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz" + integrity sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg== + dependencies: + argparse "^2.0.1" + entities "^4.4.0" + linkify-it "^5.0.0" + mdurl "^2.0.0" + punycode.js "^2.3.1" + uc.micro "^2.1.0" + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz" @@ -4007,6 +4474,11 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" +mdurl@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz" + integrity sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w== + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" @@ -4304,6 +4776,11 @@ optionator@^0.9.3: type-check "^0.4.0" word-wrap "^1.2.5" +orderedmap@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.1.tgz" + integrity sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g== + os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz" @@ -4443,10 +4920,10 @@ performance-now@^2.1.0: resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== -picocolors@^1.0.0, picocolors@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz" - integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== +picocolors@^1.0.0, picocolors@^1.0.1, picocolors@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz" + integrity sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: version "2.3.1" @@ -4484,7 +4961,7 @@ postcss-import@^15.1.0: read-cache "^1.0.0" resolve "^1.1.7" -postcss-js@^4.0.1: +postcss-js@^4.0.0, postcss-js@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz" integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== @@ -4499,6 +4976,16 @@ postcss-load-config@^4.0.1: lilconfig "^3.0.0" yaml "^2.3.4" +postcss-mixins@^9.0.4: + version "9.0.4" + resolved "https://registry.npmjs.org/postcss-mixins/-/postcss-mixins-9.0.4.tgz" + integrity sha512-XVq5jwQJDRu5M1XGkdpgASqLk37OqkH4JCFDXl/Dn7janOJjCTEKL+36cnRVy7bMtoBzALfO7bV7nTIsFnUWLA== + dependencies: + fast-glob "^3.2.11" + postcss-js "^4.0.0" + postcss-simple-vars "^7.0.0" + sugarss "^4.0.1" + postcss-nested@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz" @@ -4506,6 +4993,14 @@ postcss-nested@^6.0.1: dependencies: postcss-selector-parser "^6.0.11" +postcss-preset-mantine@^1.17.0: + version "1.17.0" + resolved "https://registry.npmjs.org/postcss-preset-mantine/-/postcss-preset-mantine-1.17.0.tgz" + integrity sha512-ji1PMDBUf2Vsx/HE5faMSs1+ff6qE6YRulTr4Ja+6HD3gop8rSMTCYdpN7KrdsEg079kfBKkO/PaKhG9uR0zwQ== + dependencies: + postcss-mixins "^9.0.4" + postcss-nested "^6.0.1" + postcss-selector-parser@^6.0.11: version "6.1.0" resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz" @@ -4514,19 +5009,24 @@ postcss-selector-parser@^6.0.11: cssesc "^3.0.0" util-deprecate "^1.0.2" +postcss-simple-vars@^7.0.0, postcss-simple-vars@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/postcss-simple-vars/-/postcss-simple-vars-7.0.1.tgz" + integrity sha512-5GLLXaS8qmzHMOjVxqkk1TZPf1jMqesiI7qLhnlyERalG0sMbHIbJqrcnrpmZdKCLglHnRHoEBB61RtGTsj++A== + postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.0.0, postcss@^8.1.0, postcss@^8.2.14, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.38, postcss@^8.4.41, postcss@>=8.0.9: - version "8.4.41" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz" - integrity sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ== +postcss@^8.0.0, postcss@^8.1.0, postcss@^8.2.1, postcss@^8.2.14, postcss@^8.3.3, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.41, postcss@^8.4.47, postcss@>=8.0.0, postcss@>=8.0.9: + version "8.4.47" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz" + integrity sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ== dependencies: nanoid "^3.3.7" - picocolors "^1.0.1" - source-map-js "^1.2.0" + picocolors "^1.1.0" + source-map-js "^1.2.1" prelude-ls@^1.2.1: version "1.2.1" @@ -4570,6 +5070,159 @@ prop-types@^15.6.2, prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" +prosemirror-changeset@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.2.1.tgz" + integrity sha512-J7msc6wbxB4ekDFj+n9gTW/jav/p53kdlivvuppHsrZXCaQdVgRghoZbSS3kwrRyAstRVQ4/+u5k7YfLgkkQvQ== + dependencies: + prosemirror-transform "^1.0.0" + +prosemirror-collab@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz" + integrity sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ== + dependencies: + prosemirror-state "^1.0.0" + +prosemirror-commands@^1.0.0, prosemirror-commands@^1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.6.0.tgz" + integrity sha512-xn1U/g36OqXn2tn5nGmvnnimAj/g1pUx2ypJJIe8WkVX83WyJVC5LTARaxZa2AtQRwntu9Jc5zXs9gL9svp/mg== + dependencies: + prosemirror-model "^1.0.0" + prosemirror-state "^1.0.0" + prosemirror-transform "^1.0.0" + +prosemirror-dropcursor@^1.8.1: + version "1.8.1" + resolved "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.1.tgz" + integrity sha512-M30WJdJZLyXHi3N8vxN6Zh5O8ZBbQCz0gURTfPmTIBNQ5pxrdU7A58QkNqfa98YEjSAL1HUyyU34f6Pm5xBSGw== + dependencies: + prosemirror-state "^1.0.0" + prosemirror-transform "^1.1.0" + prosemirror-view "^1.1.0" + +prosemirror-gapcursor@^1.3.2: + version "1.3.2" + resolved "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.3.2.tgz" + integrity sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ== + dependencies: + prosemirror-keymap "^1.0.0" + prosemirror-model "^1.0.0" + prosemirror-state "^1.0.0" + prosemirror-view "^1.0.0" + +prosemirror-history@^1.0.0, prosemirror-history@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.4.1.tgz" + integrity sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ== + dependencies: + prosemirror-state "^1.2.2" + prosemirror-transform "^1.0.0" + prosemirror-view "^1.31.0" + rope-sequence "^1.3.0" + +prosemirror-inputrules@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.4.0.tgz" + integrity sha512-6ygpPRuTJ2lcOXs9JkefieMst63wVJBgHZGl5QOytN7oSZs3Co/BYbc3Yx9zm9H37Bxw8kVzCnDsihsVsL4yEg== + dependencies: + prosemirror-state "^1.0.0" + prosemirror-transform "^1.0.0" + +prosemirror-keymap@^1.0.0, prosemirror-keymap@^1.1.2, prosemirror-keymap@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.2.tgz" + integrity sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ== + dependencies: + prosemirror-state "^1.0.0" + w3c-keyname "^2.2.0" + +prosemirror-markdown@^1.13.0: + version "1.13.0" + resolved "https://registry.npmjs.org/prosemirror-markdown/-/prosemirror-markdown-1.13.0.tgz" + integrity sha512-UziddX3ZYSYibgx8042hfGKmukq5Aljp2qoBiJRejD/8MH70siQNz5RB1TrdTPheqLMy4aCe4GYNF10/3lQS5g== + dependencies: + markdown-it "^14.0.0" + prosemirror-model "^1.20.0" + +prosemirror-menu@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/prosemirror-menu/-/prosemirror-menu-1.2.4.tgz" + integrity sha512-S/bXlc0ODQup6aiBbWVsX/eM+xJgCTAfMq/nLqaO5ID/am4wS0tTCIkzwytmao7ypEtjj39i7YbJjAgO20mIqA== + dependencies: + crelt "^1.0.0" + prosemirror-commands "^1.0.0" + prosemirror-history "^1.0.0" + prosemirror-state "^1.0.0" + +prosemirror-model@^1.0.0, prosemirror-model@^1.19.0, prosemirror-model@^1.20.0, prosemirror-model@^1.21.0, prosemirror-model@^1.22.1, prosemirror-model@^1.22.3, prosemirror-model@^1.8.1: + version "1.22.3" + resolved "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.22.3.tgz" + integrity sha512-V4XCysitErI+i0rKFILGt/xClnFJaohe/wrrlT2NSZ+zk8ggQfDH4x2wNK7Gm0Hp4CIoWizvXFP7L9KMaCuI0Q== + dependencies: + orderedmap "^2.0.0" + +prosemirror-schema-basic@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.3.tgz" + integrity sha512-h+H0OQwZVqMon1PNn0AG9cTfx513zgIG2DY00eJ00Yvgb3UD+GQ/VlWW5rcaxacpCGT1Yx8nuhwXk4+QbXUfJA== + dependencies: + prosemirror-model "^1.19.0" + +prosemirror-schema-list@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.4.1.tgz" + integrity sha512-jbDyaP/6AFfDfu70VzySsD75Om2t3sXTOdl5+31Wlxlg62td1haUpty/ybajSfJ1pkGadlOfwQq9kgW5IMo1Rg== + dependencies: + prosemirror-model "^1.0.0" + prosemirror-state "^1.0.0" + prosemirror-transform "^1.7.3" + +prosemirror-state@^1.0.0, prosemirror-state@^1.2.2, prosemirror-state@^1.3.1, prosemirror-state@^1.4.2, prosemirror-state@^1.4.3: + version "1.4.3" + resolved "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.3.tgz" + integrity sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q== + dependencies: + prosemirror-model "^1.0.0" + prosemirror-transform "^1.0.0" + prosemirror-view "^1.27.0" + +prosemirror-tables@^1.4.0: + version "1.5.0" + resolved "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.5.0.tgz" + integrity sha512-VMx4zlYWm7aBlZ5xtfJHpqa3Xgu3b7srV54fXYnXgsAcIGRqKSrhiK3f89omzzgaAgAtDOV4ImXnLKhVfheVNQ== + dependencies: + prosemirror-keymap "^1.1.2" + prosemirror-model "^1.8.1" + prosemirror-state "^1.3.1" + prosemirror-transform "^1.2.1" + prosemirror-view "^1.13.3" + +prosemirror-trailing-node@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/prosemirror-trailing-node/-/prosemirror-trailing-node-3.0.0.tgz" + integrity sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ== + dependencies: + "@remirror/core-constants" "3.0.0" + escape-string-regexp "^4.0.0" + +prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transform@^1.10.0, prosemirror-transform@^1.2.1, prosemirror-transform@^1.7.3: + version "1.10.0" + resolved "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.10.0.tgz" + integrity sha512-9UOgFSgN6Gj2ekQH5CTDJ8Rp/fnKR2IkYfGdzzp5zQMFsS4zDllLVx/+jGcX86YlACpG7UR5fwAXiWzxqWtBTg== + dependencies: + prosemirror-model "^1.21.0" + +prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.13.3, prosemirror-view@^1.27.0, prosemirror-view@^1.31.0, prosemirror-view@^1.33.10, prosemirror-view@^1.33.8: + version "1.34.3" + resolved "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.34.3.tgz" + integrity sha512-mKZ54PrX19sSaQye+sef+YjBbNu2voNwLS1ivb6aD2IRmxRGW64HU9B644+7OfJStGLyxvOreKqEgfvXa91WIA== + dependencies: + prosemirror-model "^1.20.0" + prosemirror-state "^1.0.0" + prosemirror-transform "^1.1.0" + protocol-buffers-schema@^3.3.1: version "3.6.0" resolved "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz" @@ -4592,6 +5245,11 @@ public-encrypt@^4.0.0: randombytes "^2.0.1" safe-buffer "^5.1.2" +punycode.js@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz" + integrity sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA== + punycode@^1.3.2: version "1.4.1" resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" @@ -4678,7 +5336,7 @@ rc@^1.0.1, rc@^1.1.6: minimist "^1.2.0" strip-json-comments "~2.0.1" -"react-dom@^16.8.0 || ^17.0.0 || ^18.0.0", "react-dom@^17.0.0 || ^18.0.0", react-dom@^18.2.0, react-dom@>=16.6.0, react-dom@>=16.8, react-dom@>=16.8.0, react-dom@>=18.0.0: +"react-dom@^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react-dom@^16.0.0 || ^17.0.0 || ^18.0.0", "react-dom@^16.8.0 || ^17.0.0 || ^18.0.0", "react-dom@^17.0.0 || ^18.0.0", react-dom@^18.2.0, react-dom@>=16.6.0, react-dom@>=16.8, react-dom@>=16.8.0, react-dom@>=18.0.0: version "18.3.1" resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz" integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== @@ -4686,11 +5344,23 @@ rc@^1.0.1, rc@^1.1.6: loose-envify "^1.1.0" scheduler "^0.23.2" +react-dropzone-esm@15.0.1: + version "15.0.1" + resolved "https://registry.npmjs.org/react-dropzone-esm/-/react-dropzone-esm-15.0.1.tgz" + integrity sha512-RdeGpqwHnoV/IlDFpQji7t7pTtlC2O1i/Br0LWkRZ9hYtLyce814S71h5NolnCZXsIN5wrZId6+8eQj2EBnEzg== + dependencies: + prop-types "^15.8.1" + react-hook-form@^7.52.0: version "7.52.0" resolved "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.52.0.tgz" integrity sha512-mJX506Xc6mirzLsmXUJyqlAI3Kj9Ph2RhplYhUVffeOQSnubK2uVqBFOBJmvKikvbFV91pxVXmDiR+QMF19x6A== +react-is@^16.10.2: + version "16.13.1" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + react-is@^16.13.1: version "16.13.1" resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" @@ -4706,6 +5376,30 @@ react-is@^18.2.0: resolved "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz" integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== +react-number-format@^5.3.1: + version "5.4.2" + resolved "https://registry.npmjs.org/react-number-format/-/react-number-format-5.4.2.tgz" + integrity sha512-cg//jVdS49PYDgmcYoBnMMHl4XNTMuV723ZnHD2aXYtWWWqbVF3hjQ8iB+UZEuXapLbeA8P8H+1o6ZB1lcw3vg== + +react-remove-scroll-bar@^2.3.6: + version "2.3.6" + resolved "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz" + integrity sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g== + dependencies: + react-style-singleton "^2.2.1" + tslib "^2.0.0" + +react-remove-scroll@^2.5.7: + version "2.6.0" + resolved "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz" + integrity sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ== + dependencies: + react-remove-scroll-bar "^2.3.6" + react-style-singleton "^2.2.1" + tslib "^2.1.0" + use-callback-ref "^1.3.0" + use-sidecar "^1.1.2" + react-router-dom@^6.23.1: version "6.23.1" resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.23.1.tgz" @@ -4721,7 +5415,34 @@ react-router@6.23.1: dependencies: "@remix-run/router" "1.16.1" -react-transition-group@^4.4.5: +react-smooth@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.1.tgz" + integrity sha512-OE4hm7XqR0jNOq3Qmk9mFLyd6p2+j6bvbPJ7qlB7+oo0eNcL2l7WQzG6MBnT3EXY6xzkLMUBec3AfewJdA0J8w== + dependencies: + fast-equals "^5.0.1" + prop-types "^15.8.1" + react-transition-group "^4.4.5" + +react-style-singleton@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz" + integrity sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g== + dependencies: + get-nonce "^1.0.0" + invariant "^2.2.4" + tslib "^2.0.0" + +react-textarea-autosize@8.5.3: + version "8.5.3" + resolved "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz" + integrity sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ== + dependencies: + "@babel/runtime" "^7.20.13" + use-composed-ref "^1.3.0" + use-latest "^1.2.1" + +react-transition-group@^4.4.5, react-transition-group@4.4.5: version "4.4.5" resolved "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz" integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== @@ -4731,7 +5452,7 @@ react-transition-group@^4.4.5: loose-envify "^1.4.0" prop-types "^15.6.2" -"react@^16.11.0 || ^17.0.0 || ^18.0.0", "react@^16.8.0 || ^17 || ^18 || ^19", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^17.0.0 || ^18.0.0", react@^18.2.0, react@^18.3.1, react@>=16.6.0, react@>=16.8, react@>=16.8.0, react@>=18.0.0: +"react@^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react@^16.0.0 || ^17.0.0 || ^18.0.0", "react@^16.11.0 || ^17.0.0 || ^18.0.0", "react@^16.8.0 || ^17 || ^18 || ^19", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^16.8.0 || ^17.0.1 || ^18.0.0", "react@^16.8.3 || ^17.0.0-0 || ^18.0.0-0", "react@^17.0.0 || ^18.0.0", react@^18.2.0, react@^18.3.1, "react@>= 16", "react@>= 16.8 || 18.0.0", react@>=16.6.0, react@>=16.8, react@>=16.8.0, react@>=18.0.0: 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== @@ -4781,6 +5502,27 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +recharts-scale@^0.4.4: + version "0.4.5" + resolved "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz" + integrity sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w== + dependencies: + decimal.js-light "^2.4.1" + +recharts@^2.10.3, recharts@^2.12.7: + version "2.12.7" + resolved "https://registry.npmjs.org/recharts/-/recharts-2.12.7.tgz" + integrity sha512-hlLJMhPQfv4/3NBSAyq3gzGg4h2v69RJh6KU7b3pXYNNAELs9kEoXOjbkxdXpALqKBoVmVptGfLpxdaVYqjmXQ== + dependencies: + clsx "^2.0.0" + eventemitter3 "^4.0.1" + lodash "^4.17.21" + react-is "^16.10.2" + react-smooth "^4.0.0" + recharts-scale "^0.4.4" + tiny-invariant "^1.3.1" + victory-vendor "^36.6.8" + regenerate-unicode-properties@^10.1.0: version "10.1.1" resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz" @@ -4947,6 +5689,11 @@ rollup@^1.20.0||^2.0.0||^3.0.0||^4.0.0, rollup@^2.0.0||^3.0.0||^4.0.0, rollup@^2 "@rollup/rollup-win32-x64-msvc" "4.18.0" fsevents "~2.3.2" +rope-sequence@^1.3.0: + version "1.3.4" + resolved "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz" + integrity sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ== + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" @@ -5125,10 +5872,10 @@ smob@^1.0.0: resolved "https://registry.npmjs.org/smob/-/smob-1.5.0.tgz" integrity sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig== -source-map-js@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz" - integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== +source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== source-map-support@~0.5.20: version "0.5.21" @@ -5346,6 +6093,11 @@ sucrase@^3.32.0: pirates "^4.0.1" ts-interface-checker "^0.1.9" +sugarss@*, sugarss@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/sugarss/-/sugarss-4.0.1.tgz" + integrity sha512-WCjS5NfuVJjkQzK10s8WOBY+hhDxxNt/N6ZaGwxFZ+wN3/lKKFSaaKUNecULcTTvE4urLcKaZFQD8vO0mOZujw== + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" @@ -5378,6 +6130,11 @@ swr@^2.2.5: client-only "^0.0.1" use-sync-external-store "^1.2.0" +tabbable@^6.0.0: + version "6.2.0" + resolved "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz" + integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew== + tailwindcss@^3.4.4: version "3.4.4" resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.4.tgz" @@ -5464,6 +6221,18 @@ timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" +tiny-invariant@^1.3.1: + version "1.3.3" + resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz" + integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== + +tippy.js@^6.3.7: + version "6.3.7" + resolved "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.7.tgz" + integrity sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ== + dependencies: + "@popperjs/core" "^2.9.0" + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" @@ -5501,6 +6270,11 @@ ts-interface-checker@^0.1.9: resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== +tslib@^2.0.0, tslib@^2.1.0: + version "2.7.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== + tty-browserify@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz" @@ -5528,6 +6302,11 @@ type-fest@^2.13.0: resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz" integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== +type-fest@^4.12.0: + version "4.26.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-4.26.1.tgz" + integrity sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg== + typed-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz" @@ -5577,6 +6356,11 @@ typescript@^5.2.2, typescript@>=4.2.0: resolved "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz" integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== +uc.micro@^2.0.0, uc.micro@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz" + integrity sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A== + unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" @@ -5663,11 +6447,48 @@ url@^0.11.0: punycode "^1.4.1" qs "^6.11.2" +use-callback-ref@^1.3.0: + version "1.3.2" + resolved "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz" + integrity sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA== + dependencies: + tslib "^2.0.0" + +use-composed-ref@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz" + integrity sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ== + +use-isomorphic-layout-effect@^1.1.1: + version "1.1.2" + resolved "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz" + integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== + +use-latest@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz" + integrity sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw== + dependencies: + use-isomorphic-layout-effect "^1.1.1" + +use-sidecar@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz" + integrity sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw== + dependencies: + detect-node-es "^1.1.0" + tslib "^2.0.0" + use-sync-external-store@^1.2.0, use-sync-external-store@1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz" integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== +use-sync-external-store@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz" + integrity sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw== + util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" @@ -5696,6 +6517,26 @@ vary@~1.1.2: resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== +victory-vendor@^36.6.8: + version "36.9.2" + resolved "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz" + integrity sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ== + dependencies: + "@types/d3-array" "^3.0.3" + "@types/d3-ease" "^3.0.0" + "@types/d3-interpolate" "^3.0.1" + "@types/d3-scale" "^4.0.2" + "@types/d3-shape" "^3.1.0" + "@types/d3-time" "^3.0.0" + "@types/d3-timer" "^3.0.0" + d3-array "^3.1.6" + d3-ease "^3.0.1" + d3-interpolate "^3.0.1" + d3-scale "^4.0.2" + d3-shape "^3.1.0" + d3-time "^3.0.0" + d3-timer "^3.0.1" + vite-plugin-node-polyfills@^0.22.0: version "0.22.0" resolved "https://registry.npmjs.org/vite-plugin-node-polyfills/-/vite-plugin-node-polyfills-0.22.0.tgz" @@ -5731,6 +6572,11 @@ vm-browserify@^1.0.1: resolved "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== +w3c-keyname@^2.2.0: + version "2.2.8" + resolved "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz" + integrity sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ== + web-worker@^1.2.0: version "1.3.0" resolved "https://registry.npmjs.org/web-worker/-/web-worker-1.3.0.tgz"