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 (
-
-
-
-
-
-
-
-
-
-
-
- );
-}
\ 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'
}}>
- :
- }
- onClick={handleUploadClick}
- >
- {
- if (e.currentTarget) {
- e.currentTarget.value = ''
- }
- }}
- />
- Добавить
-
+
+ {(props) => : } {...props}>Добавить}
+
{filesToUpload.length > 0 &&
<>
}
+ variant='filled'
+ leftSection={isUploading ? : }
onClick={uploadFiles}
>
Загрузить все
}
+ variant='outline'
+ leftSection={}
onClick={() => {
setFilesToUpload([])
}}
@@ -283,62 +250,69 @@ export default function FolderViewer() {
{filesToUpload.length > 0 &&
-
+
{filesToUpload.map((file, index) => (
-
-
-
- {file.name}
-
+
+
+
+ {file.name}
+
- {
+ {
setFilesToUpload(prev => {
return prev.filter((_, i) => i != index)
})
- }}>
-
-
-
+ }} ml='auto' variant='subtle'>
+
+
+
))}
-
+
}
}
-
- {currentFolder ? (
- documents?.map((doc: IDocument, index: number) => (
-
-
- {index < documents.length - 1 &&
}
-
- ))
- ) : (
- folders?.map((folder: IDocumentFolder, index: number) => (
-
-
- {index < folders.length - 1 &&
}
-
- ))
- )}
-
+ bg={dragOver ? 'rgba(0, 0, 0, 0.1)' : 'inherit'}
+ highlightOnHover>
+
+
+
+
+
+
+
+ {currentFolder ? (
+ documents?.map((doc: IDocument, index: number) => (
+
+
+
+
+
+ ))
+ ) : (
+ folders?.map((folder: IDocumentFolder, index: number) => (
+
+
+
+
+
+ ))
+ )}
+
+
)
}
\ No newline at end of file
diff --git a/client/src/components/FormFields.tsx b/client/src/components/FormFields.tsx
index 9f9e565..fe4388b 100644
--- a/client/src/components/FormFields.tsx
+++ b/client/src/components/FormFields.tsx
@@ -1,7 +1,7 @@
import { SubmitHandler, useForm } from 'react-hook-form'
import { CreateField } from '../interfaces/create'
-import { Box, Button, CircularProgress, Stack, SxProps, TextField, Typography } from '@mui/material';
import { AxiosResponse } from 'axios';
+import { Button, Loader, Stack, Text, TextInput } from '@mantine/core';
interface Props {
title?: string;
@@ -11,7 +11,6 @@ interface Props {
mutateHandler?: any;
defaultValues?: {};
watchValues?: string[];
- sx?: SxProps | null;
}
function FormFields({
@@ -20,8 +19,7 @@ function FormFields({
fields,
submitButtonText = 'Сохранить',
mutateHandler,
- defaultValues,
- sx
+ defaultValues
}: Props) {
const getDefaultValues = (fields: CreateField[]) => {
let result: { [key: string]: string | boolean } = {}
@@ -53,20 +51,20 @@ function FormFields({
return (
)
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() {
}
+
+
{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() {
}
+
+
{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()}
>
-
-
-
-
-
+
+
-
- }
- 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(true)}>
+
+
Добавить роль
- 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 (
-
- {value === index && {children}}
-
- );
- }
+ 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(true)}>
+
+
Добавить пользователя
- 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 (
+
+
+
+ )
+ }
+ else return (
+ {user[column.field]}
+ )
+ })}
+
+ ))}
+
+
+ }
+
+
+
+ {/* {
}}
- />
-
+ /> */}
+
)
}
\ 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 (
-
-
-
+
+
+
Восстановление пароля
-
+
-
-
+
+
)
}
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"