diff --git a/package-lock.json b/package-lock.json index 4ba5857..72bfc62 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,15 +12,17 @@ "@emotion/styled": "^11.10.6", "@mui/icons-material": "^5.11.11", "@mui/lab": "^5.0.0-alpha.163", - "@mui/material": "^5.11.13", + "@mui/material": "^5.16.0", + "@mui/styled-engine-sc": "^6.0.0-alpha.18", "@reduxjs/toolkit": "^1.9.3", + "base64-to-file": "^1.1.0", "compressorjs": "^1.2.1", "dompurify": "^3.0.6", "localforage": "^1.10.0", "moment": "^2.29.4", "quill-image-resize-module-react": "^3.0.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", "react-dropzone": "^14.2.3", "react-intersection-observer": "^9.4.3", "react-quill": "^2.0.0", @@ -30,9 +32,11 @@ "react-toastify": "^9.1.2", "redux-persist": "^6.0.0", "short-unique-id": "^4.4.4", + "styled-components": "^6.1.11", "ts-key-enum": "^2.0.12" }, "devDependencies": { + "@types/node": "^20.14.12", "@types/react": "^18.0.28", "@types/react-dom": "^18.0.11", "@typescript-eslint/eslint-plugin": "^5.57.1", @@ -451,9 +455,10 @@ "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" }, "node_modules/@emotion/is-prop-valid": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", - "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", + "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", + "license": "MIT", "dependencies": { "@emotion/memoize": "^0.8.1" } @@ -1142,9 +1147,10 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.15.7", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.7.tgz", - "integrity": "sha512-AuF+Wo2Mp/edaO6vJnWjg+gj4tzEz5ChMZnAQpc22DXpSvM8ddgGcZvM7D7F99pIBoSv8ub+Iz0viL+yuGVmhg==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.0.tgz", + "integrity": "sha512-8SLffXYPRVpcZx5QzxNE8fytTqzp+IuU3deZbQWg/vSaTlDpR5YVrQ4qQtXTi5cRdhOufV5INylmwlKK+//nPw==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui-org" @@ -1224,19 +1230,20 @@ } }, "node_modules/@mui/material": { - "version": "5.15.7", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.7.tgz", - "integrity": "sha512-l6+AiKZH3iOJmZCnlpel8ghYQe9Lq0BEuKP8fGj3g5xz4arO9GydqYAtLPMvuHKtArj8lJGNuT2yHYxmejincA==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.16.0.tgz", + "integrity": "sha512-DbR1NckTLpjt9Zut9EGQ70th86HfN0BYQgyYro6aXQrNfjzSwe3BJS1AyBQ5mJ7TdL6YVRqohfukxj9JlqZZUg==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.9", - "@mui/base": "5.0.0-beta.34", - "@mui/core-downloads-tracker": "^5.15.7", - "@mui/system": "^5.15.7", - "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.7", + "@mui/base": "5.0.0-beta.40", + "@mui/core-downloads-tracker": "^5.16.0", + "@mui/system": "^5.16.0", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.16.0", "@types/react-transition-group": "^4.4.10", "clsx": "^2.1.0", - "csstype": "^3.1.2", + "csstype": "^3.1.3", "prop-types": "^15.8.1", "react-is": "^18.2.0", "react-transition-group": "^4.4.5" @@ -1267,6 +1274,38 @@ } } }, + "node_modules/@mui/material/node_modules/@mui/base": { + "version": "5.0.0-beta.40", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.40.tgz", + "integrity": "sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@floating-ui/react-dom": "^2.0.8", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.15.14", + "@popperjs/core": "^2.11.8", + "clsx": "^2.1.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@mui/material/node_modules/clsx": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", @@ -1276,12 +1315,13 @@ } }, "node_modules/@mui/private-theming": { - "version": "5.15.7", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.7.tgz", - "integrity": "sha512-bcEeeXm7GyQCQvN9dwo8htGv8/6tP05p0i02Z7GXm5EoDPlBcqTNGugsjNLoGq6B0SsdyanjJGw0Jw00o1yAOA==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.16.0.tgz", + "integrity": "sha512-sYpubkO1MZOnxNyVOClrPNOTs0MfuRVVnAvCeMaOaXt6GimgQbnUcshYv2pSr6PFj+Mqzdff/FYOBceK8u5QgA==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.9", - "@mui/utils": "^5.15.7", + "@mui/utils": "^5.16.0", "prop-types": "^15.8.1" }, "engines": { @@ -1302,13 +1342,14 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.15.7", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.7.tgz", - "integrity": "sha512-ixSdslOjK1kzdGcxqj7O3d14By/LPQ7EWknsViQ8RaeT863EAQemS+zvUJDTcOpkfJh6q6gPnYMIb2TJCs9eWA==", + "version": "5.15.14", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.14.tgz", + "integrity": "sha512-RILkuVD8gY6PvjZjqnWhz8fu68dVkqhM5+jYWfB5yhlSQKg+2rHkmEwm75XIeAqI3qwOndK6zELK5H6Zxn4NHw==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.9", "@emotion/cache": "^11.11.0", - "csstype": "^3.1.2", + "csstype": "^3.1.3", "prop-types": "^15.8.1" }, "engines": { @@ -1332,18 +1373,41 @@ } } }, + "node_modules/@mui/styled-engine-sc": { + "version": "6.0.0-alpha.18", + "resolved": "https://registry.npmjs.org/@mui/styled-engine-sc/-/styled-engine-sc-6.0.0-alpha.18.tgz", + "integrity": "sha512-W3mqR1K01rPL0BVNTgGpIYxdbQ/nTAlwYaohRdmX7FZvbm1yKw9F90OIGxM503dfRMVBi6a/neYPgIUebcGsHw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.9", + "csstype": "^3.1.3", + "hoist-non-react-statics": "^3.3.2", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "styled-components": "^6.0.0" + } + }, "node_modules/@mui/system": { - "version": "5.15.7", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.7.tgz", - "integrity": "sha512-9alZ4/dLxsTwUOdqakgzxiL5YW6ntqj0CfzWImgWnBMTZhgGcPsbYpBLniNkkk7/jptma4/bykWXHwju/ls/pg==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.16.0.tgz", + "integrity": "sha512-9YbkC2m3+pNumAvubYv+ijLtog6puJ0fJ6rYfzfLCM47pWrw3m+30nXNM8zMgDaKL6vpfWJcCXm+LPaWBpy7sw==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.9", - "@mui/private-theming": "^5.15.7", - "@mui/styled-engine": "^5.15.7", - "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.7", + "@mui/private-theming": "^5.16.0", + "@mui/styled-engine": "^5.15.14", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.16.0", "clsx": "^2.1.0", - "csstype": "^3.1.2", + "csstype": "^3.1.3", "prop-types": "^15.8.1" }, "engines": { @@ -1380,9 +1444,10 @@ } }, "node_modules/@mui/types": { - "version": "7.2.13", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.13.tgz", - "integrity": "sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g==", + "version": "7.2.14", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.14.tgz", + "integrity": "sha512-MZsBZ4q4HfzBsywtXgM1Ksj6HDThtiwmOKUXH1pKYISI9gAVXCNHNpo7TlGoGrBaYWZTdNoirIN7JsQcQUjmQQ==", + "license": "MIT", "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0" }, @@ -1393,9 +1458,10 @@ } }, "node_modules/@mui/utils": { - "version": "5.15.7", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.7.tgz", - "integrity": "sha512-8qhsxQRNV6aEOjjSk6YQIYJxkF5klhj8oG1FEEU4z6HV78TjNqRxMP08QGcdsibEbez+nihAaz6vu83b4XqbAg==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.16.0.tgz", + "integrity": "sha512-kLLi5J1xY+mwtUlMb8Ubdxf4qFAA1+U7WPBvjM/qQ4CIwLCohNb0sHo1oYPufjSIH/Z9+dhVxD7dJlfGjd1AVA==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.9", "@types/prop-types": "^15.7.11", @@ -1725,6 +1791,16 @@ "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", "dev": true }, + "node_modules/@types/node": { + "version": "20.14.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.12.tgz", + "integrity": "sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", @@ -1781,6 +1857,12 @@ "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", "dev": true }, + "node_modules/@types/stylis": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz", + "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==", + "license": "MIT" + }, "node_modules/@types/use-sync-external-store": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", @@ -2093,6 +2175,12 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/base64-to-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/base64-to-file/-/base64-to-file-1.1.0.tgz", + "integrity": "sha512-GVjKoPkrHJYZKnlOatl5fCYDzsxm/Fh0bomJ/3C67N8+SBpeoqaDCJZaohRtB3syxC8X3VojbirDVEgcXx+IWw==", + "license": "MIT" + }, "node_modules/blueimp-canvas-to-blob": { "version": "3.29.0", "resolved": "https://registry.npmjs.org/blueimp-canvas-to-blob/-/blueimp-canvas-to-blob-3.29.0.tgz", @@ -2173,6 +2261,15 @@ "node": ">=6" } }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001578", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001578.tgz", @@ -2292,10 +2389,31 @@ "node": ">= 8" } }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "license": "MIT", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" }, "node_modules/debug": { "version": "4.3.4", @@ -3519,7 +3637,6 @@ "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true, "funding": [ { "type": "github", @@ -3714,8 +3831,7 @@ "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -3730,10 +3846,9 @@ } }, "node_modules/postcss": { - "version": "8.4.33", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", - "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", - "dev": true, + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "funding": [ { "type": "opencollective", @@ -3748,15 +3863,22 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -3879,9 +4001,10 @@ } }, "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" }, @@ -3890,15 +4013,16 @@ } }, "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" + "scheduler": "^0.23.2" }, "peerDependencies": { - "react": "^18.2.0" + "react": "^18.3.1" } }, "node_modules/react-draggable": { @@ -4239,9 +4363,10 @@ } }, "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" } @@ -4306,6 +4431,12 @@ "node": ">= 0.4" } }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", + "license": "MIT" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -4354,10 +4485,10 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -4386,6 +4517,40 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/styled-components": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.11.tgz", + "integrity": "sha512-Ui0jXPzbp1phYij90h12ksljKGqF8ncGx+pjrNPsSPhbUUjWT2tD1FwGo2LF6USCnbrsIhNngDfodhxbegfEOA==", + "license": "MIT", + "dependencies": { + "@emotion/is-prop-valid": "1.2.2", + "@emotion/unitless": "0.8.1", + "@types/stylis": "4.2.5", + "css-to-react-native": "3.2.0", + "csstype": "3.1.3", + "postcss": "8.4.38", + "shallowequal": "1.1.0", + "stylis": "4.3.2", + "tslib": "2.6.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0" + } + }, + "node_modules/styled-components/node_modules/stylis": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz", + "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==", + "license": "MIT" + }, "node_modules/stylis": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", @@ -4445,9 +4610,10 @@ "integrity": "sha512-Ety4IvKMaeG34AyXMp5r11XiVZNDRL+XWxXbVVJjLvq2vxKRttEANBE7Za1bxCAZRdH2/sZT6jFyyTWxXz28hw==" }, "node_modules/tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "license": "0BSD" }, "node_modules/tsutils": { "version": "3.21.0", @@ -4507,6 +4673,13 @@ "node": ">=14.17" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true, + "license": "MIT" + }, "node_modules/update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", @@ -4976,9 +5149,9 @@ "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" }, "@emotion/is-prop-valid": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", - "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", + "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", "requires": { "@emotion/memoize": "^0.8.1" } @@ -5378,9 +5551,9 @@ } }, "@mui/core-downloads-tracker": { - "version": "5.15.7", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.7.tgz", - "integrity": "sha512-AuF+Wo2Mp/edaO6vJnWjg+gj4tzEz5ChMZnAQpc22DXpSvM8ddgGcZvM7D7F99pIBoSv8ub+Iz0viL+yuGVmhg==" + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.0.tgz", + "integrity": "sha512-8SLffXYPRVpcZx5QzxNE8fytTqzp+IuU3deZbQWg/vSaTlDpR5YVrQ4qQtXTi5cRdhOufV5INylmwlKK+//nPw==" }, "@mui/icons-material": { "version": "5.11.16", @@ -5412,24 +5585,38 @@ } }, "@mui/material": { - "version": "5.15.7", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.7.tgz", - "integrity": "sha512-l6+AiKZH3iOJmZCnlpel8ghYQe9Lq0BEuKP8fGj3g5xz4arO9GydqYAtLPMvuHKtArj8lJGNuT2yHYxmejincA==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.16.0.tgz", + "integrity": "sha512-DbR1NckTLpjt9Zut9EGQ70th86HfN0BYQgyYro6aXQrNfjzSwe3BJS1AyBQ5mJ7TdL6YVRqohfukxj9JlqZZUg==", "requires": { "@babel/runtime": "^7.23.9", - "@mui/base": "5.0.0-beta.34", - "@mui/core-downloads-tracker": "^5.15.7", - "@mui/system": "^5.15.7", - "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.7", + "@mui/base": "5.0.0-beta.40", + "@mui/core-downloads-tracker": "^5.16.0", + "@mui/system": "^5.16.0", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.16.0", "@types/react-transition-group": "^4.4.10", "clsx": "^2.1.0", - "csstype": "^3.1.2", + "csstype": "^3.1.3", "prop-types": "^15.8.1", "react-is": "^18.2.0", "react-transition-group": "^4.4.5" }, "dependencies": { + "@mui/base": { + "version": "5.0.0-beta.40", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.40.tgz", + "integrity": "sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ==", + "requires": { + "@babel/runtime": "^7.23.9", + "@floating-ui/react-dom": "^2.0.8", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.15.14", + "@popperjs/core": "^2.11.8", + "clsx": "^2.1.0", + "prop-types": "^15.8.1" + } + }, "clsx": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", @@ -5438,38 +5625,49 @@ } }, "@mui/private-theming": { - "version": "5.15.7", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.7.tgz", - "integrity": "sha512-bcEeeXm7GyQCQvN9dwo8htGv8/6tP05p0i02Z7GXm5EoDPlBcqTNGugsjNLoGq6B0SsdyanjJGw0Jw00o1yAOA==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.16.0.tgz", + "integrity": "sha512-sYpubkO1MZOnxNyVOClrPNOTs0MfuRVVnAvCeMaOaXt6GimgQbnUcshYv2pSr6PFj+Mqzdff/FYOBceK8u5QgA==", "requires": { "@babel/runtime": "^7.23.9", - "@mui/utils": "^5.15.7", + "@mui/utils": "^5.16.0", "prop-types": "^15.8.1" } }, "@mui/styled-engine": { - "version": "5.15.7", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.7.tgz", - "integrity": "sha512-ixSdslOjK1kzdGcxqj7O3d14By/LPQ7EWknsViQ8RaeT863EAQemS+zvUJDTcOpkfJh6q6gPnYMIb2TJCs9eWA==", + "version": "5.15.14", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.14.tgz", + "integrity": "sha512-RILkuVD8gY6PvjZjqnWhz8fu68dVkqhM5+jYWfB5yhlSQKg+2rHkmEwm75XIeAqI3qwOndK6zELK5H6Zxn4NHw==", "requires": { "@babel/runtime": "^7.23.9", "@emotion/cache": "^11.11.0", - "csstype": "^3.1.2", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + } + }, + "@mui/styled-engine-sc": { + "version": "6.0.0-alpha.18", + "resolved": "https://registry.npmjs.org/@mui/styled-engine-sc/-/styled-engine-sc-6.0.0-alpha.18.tgz", + "integrity": "sha512-W3mqR1K01rPL0BVNTgGpIYxdbQ/nTAlwYaohRdmX7FZvbm1yKw9F90OIGxM503dfRMVBi6a/neYPgIUebcGsHw==", + "requires": { + "@babel/runtime": "^7.23.9", + "csstype": "^3.1.3", + "hoist-non-react-statics": "^3.3.2", "prop-types": "^15.8.1" } }, "@mui/system": { - "version": "5.15.7", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.7.tgz", - "integrity": "sha512-9alZ4/dLxsTwUOdqakgzxiL5YW6ntqj0CfzWImgWnBMTZhgGcPsbYpBLniNkkk7/jptma4/bykWXHwju/ls/pg==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.16.0.tgz", + "integrity": "sha512-9YbkC2m3+pNumAvubYv+ijLtog6puJ0fJ6rYfzfLCM47pWrw3m+30nXNM8zMgDaKL6vpfWJcCXm+LPaWBpy7sw==", "requires": { "@babel/runtime": "^7.23.9", - "@mui/private-theming": "^5.15.7", - "@mui/styled-engine": "^5.15.7", - "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.7", + "@mui/private-theming": "^5.16.0", + "@mui/styled-engine": "^5.15.14", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.16.0", "clsx": "^2.1.0", - "csstype": "^3.1.2", + "csstype": "^3.1.3", "prop-types": "^15.8.1" }, "dependencies": { @@ -5481,15 +5679,15 @@ } }, "@mui/types": { - "version": "7.2.13", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.13.tgz", - "integrity": "sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g==", + "version": "7.2.14", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.14.tgz", + "integrity": "sha512-MZsBZ4q4HfzBsywtXgM1Ksj6HDThtiwmOKUXH1pKYISI9gAVXCNHNpo7TlGoGrBaYWZTdNoirIN7JsQcQUjmQQ==", "requires": {} }, "@mui/utils": { - "version": "5.15.7", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.7.tgz", - "integrity": "sha512-8qhsxQRNV6aEOjjSk6YQIYJxkF5klhj8oG1FEEU4z6HV78TjNqRxMP08QGcdsibEbez+nihAaz6vu83b4XqbAg==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.16.0.tgz", + "integrity": "sha512-kLLi5J1xY+mwtUlMb8Ubdxf4qFAA1+U7WPBvjM/qQ4CIwLCohNb0sHo1oYPufjSIH/Z9+dhVxD7dJlfGjd1AVA==", "requires": { "@babel/runtime": "^7.23.9", "@types/prop-types": "^15.7.11", @@ -5697,6 +5895,15 @@ "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", "dev": true }, + "@types/node": { + "version": "20.14.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.12.tgz", + "integrity": "sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ==", + "dev": true, + "requires": { + "undici-types": "~5.26.4" + } + }, "@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", @@ -5753,6 +5960,11 @@ "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", "dev": true }, + "@types/stylis": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz", + "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==" + }, "@types/use-sync-external-store": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", @@ -5942,6 +6154,11 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "base64-to-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/base64-to-file/-/base64-to-file-1.1.0.tgz", + "integrity": "sha512-GVjKoPkrHJYZKnlOatl5fCYDzsxm/Fh0bomJ/3C67N8+SBpeoqaDCJZaohRtB3syxC8X3VojbirDVEgcXx+IWw==" + }, "blueimp-canvas-to-blob": { "version": "3.29.0", "resolved": "https://registry.npmjs.org/blueimp-canvas-to-blob/-/blueimp-canvas-to-blob-3.29.0.tgz", @@ -5993,6 +6210,11 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, + "camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==" + }, "caniuse-lite": { "version": "1.0.30001578", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001578.tgz", @@ -6082,10 +6304,25 @@ "which": "^2.0.1" } }, + "css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==" + }, + "css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "requires": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, "csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "debug": { "version": "4.3.4", @@ -7000,8 +7237,7 @@ "nanoid": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" }, "natural-compare": { "version": "1.4.0", @@ -7136,8 +7372,7 @@ "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "picomatch": { "version": "2.3.1", @@ -7146,16 +7381,20 @@ "dev": true }, "postcss": { - "version": "8.4.33", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", - "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", - "dev": true, + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "requires": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" } }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -7244,20 +7483,20 @@ } }, "react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "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==", "requires": { "loose-envify": "^1.1.0" } }, "react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "requires": { "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" + "scheduler": "^0.23.2" } }, "react-draggable": { @@ -7475,9 +7714,9 @@ } }, "scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "requires": { "loose-envify": "^1.1.0" } @@ -7529,6 +7768,11 @@ "has-property-descriptors": "^1.0.0" } }, + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -7561,10 +7805,9 @@ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" }, "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==" }, "strip-ansi": { "version": "6.0.1", @@ -7581,6 +7824,29 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "styled-components": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.11.tgz", + "integrity": "sha512-Ui0jXPzbp1phYij90h12ksljKGqF8ncGx+pjrNPsSPhbUUjWT2tD1FwGo2LF6USCnbrsIhNngDfodhxbegfEOA==", + "requires": { + "@emotion/is-prop-valid": "1.2.2", + "@emotion/unitless": "0.8.1", + "@types/stylis": "4.2.5", + "css-to-react-native": "3.2.0", + "csstype": "3.1.3", + "postcss": "8.4.38", + "shallowequal": "1.1.0", + "stylis": "4.3.2", + "tslib": "2.6.2" + }, + "dependencies": { + "stylis": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz", + "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==" + } + } + }, "stylis": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", @@ -7625,9 +7891,9 @@ "integrity": "sha512-Ety4IvKMaeG34AyXMp5r11XiVZNDRL+XWxXbVVJjLvq2vxKRttEANBE7Za1bxCAZRdH2/sZT6jFyyTWxXz28hw==" }, "tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "tsutils": { "version": "3.21.0", @@ -7667,6 +7933,12 @@ "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", "dev": true }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, "update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", diff --git a/package.json b/package.json index b753d69..460d656 100644 --- a/package.json +++ b/package.json @@ -14,15 +14,17 @@ "@emotion/styled": "^11.10.6", "@mui/icons-material": "^5.11.11", "@mui/lab": "^5.0.0-alpha.163", - "@mui/material": "^5.11.13", + "@mui/material": "^5.16.0", + "@mui/styled-engine-sc": "^6.0.0-alpha.18", "@reduxjs/toolkit": "^1.9.3", + "base64-to-file": "^1.1.0", "compressorjs": "^1.2.1", "dompurify": "^3.0.6", "localforage": "^1.10.0", "moment": "^2.29.4", "quill-image-resize-module-react": "^3.0.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", "react-dropzone": "^14.2.3", "react-intersection-observer": "^9.4.3", "react-quill": "^2.0.0", @@ -32,9 +34,11 @@ "react-toastify": "^9.1.2", "redux-persist": "^6.0.0", "short-unique-id": "^4.4.4", + "styled-components": "^6.1.11", "ts-key-enum": "^2.0.12" }, "devDependencies": { + "@types/node": "^20.14.12", "@types/react": "^18.0.28", "@types/react-dom": "^18.0.11", "@typescript-eslint/eslint-plugin": "^5.57.1", diff --git a/src/components/Publish/PublishVideo/PublishVideo.tsx b/src/components/Publish/PublishVideo/PublishVideo.tsx index 2f55863..3c422c7 100644 --- a/src/components/Publish/PublishVideo/PublishVideo.tsx +++ b/src/components/Publish/PublishVideo/PublishVideo.tsx @@ -1,5 +1,8 @@ import React, { useEffect, useState } from "react"; import Compressor from "compressorjs"; +import VideoCallIcon from '@mui/icons-material/VideoCall'; +import { ReactNode } from 'react'; + import { AddCoverImageButton, AddLogoIcon, @@ -16,7 +19,7 @@ import { TimesIcon, } from "./PublishVideo-styles.tsx"; import { CircularProgress } from "@mui/material"; - +import { Buffer } from 'buffer'; import { Box, Button, @@ -30,6 +33,7 @@ import { SelectChangeEvent, Typography, useTheme, + } from "@mui/material"; import ShortUniqueId from "short-unique-id"; import { useDispatch, useSelector } from "react-redux"; @@ -37,6 +41,7 @@ import AddBoxIcon from "@mui/icons-material/AddBox"; import { useDropzone } from "react-dropzone"; import AddIcon from "@mui/icons-material/Add"; + import { setNotification } from "../../../state/features/notificationsSlice.ts"; import { objectToBase64, objectToFile, uint8ArrayToBase64 } from "../../../utils/PublishFormatter.ts"; import { RootState } from "../../../state/store.ts"; @@ -44,6 +49,7 @@ import { upsertVideosBeginning, addToHashMap, upsertVideos, + setFilterValue, } from "../../../state/features/videoSlice.ts"; import ImageUploader from "../../common/ImageUploader.tsx"; import { categories, subCategories } from "../../../constants/Categories.ts"; @@ -67,6 +73,11 @@ import { } from "../../../constants/Identifiers.ts"; import { maxSize, titleFormatter, videoMaxSize } from "../../../constants/Misc.ts"; import { getFileName } from "../../../utils/stringFunctions.ts"; +import TextField from '@mui/material/TextField'; +import Autocomplete from '@mui/material/Autocomplete'; +import { useFetchVideos } from "../../../hooks/useFetchVideos.tsx"; +import Stack from '@mui/material/Stack'; +import { fetchAndEvaluateVideos } from "../../../utils/fetchVideos.ts"; export const toBase64 = (file: File): Promise => new Promise((resolve, reject) => { @@ -78,9 +89,158 @@ export const toBase64 = (file: File): Promise => }; }); + const uid = new ShortUniqueId(); const shortuid = new ShortUniqueId({ length: 5 }); +let linkFinal : any; +let userFinal : any; +var ident : any; +let videoInfo : any; +let helpFetch : any; +let finalTitle : any; +let finalCateg : any; +let finalCatName : any; +let finalDesc : any; + + +let isOkay = false; +let doesExist = false; +const array = []; + + +//autocomplete is where the existing identifiers are stored +const autocomplete = array; + +//structure for user inputed link should look like: /arbitrary/VIDEO/userame/identifier +//handles user input and grabs relevant parts to plug into qortal requests +// + const handleClick = e => { + console.log(e.target.value); + setFilterValue(e.target.value); + linkFinal = e.target.value; + userFinal = linkFinal.substring(linkFinal.indexOf('O/')+2, linkFinal.lastIndexOf('/')); + ident = linkFinal.substring(linkFinal.lastIndexOf('/')+1, linkFinal.lastIndexOf('')); + console.log('test:' + ident); + //helpMeta(); + }; + // main request function +async function helpGrab(){ + + helpPull(); + const fetchResp = await fetch(linkFinal, { + method: "GET", + headers: { + "Content-Type": "application/json", + "Accept": "application/json" + }, + }); + //console.log(linkFinal); + //const fetchArr = JSON.stringify(fetchVideos); + if (fetchResp.ok) { + isOkay = true; + } + //console.log(fetchVideos); + //if fetchArr contains our desired identifier then the identifier is stored to an autocomplete component + + if (isOkay === true) { + doesExist = true; + array[0] = String(ident); + console.log(fetchResp); + + + } + helpMeta(); +} + // function that handles fetching the video +async function helpPull() { + const fetchVideos = await qortalRequest({ + action: "FETCH_QDN_RESOURCE", + name: userFinal, + service: "VIDEO", + identifier: ident, + //encoding: "base64" + }); + + videoInfo = await fetchVideos; + //console.log(videoInfo); + //callback(videoInfo); + } + + //function that handles components from Q-blog + async function helpMeta(){ + + + const response = await qortalRequest({ + action: "SEARCH_QDN_RESOURCES", + service: "BLOG_POST", + //name: userFinal, + includeMetadata: true, + query: userFinal, + mode: "ALL", + title: "my first test video", + }); + + //finalTitle = await response.map(person => person.metadata.title); + //finalCateg = response.map(person => person.metadata.category); + //finalCatName = response.map(person => person.metadata.categoryName); + //const arrayList = []; + + // Assign the response data to the ArrayList + //rrayList.push(response); + + // Check if the ArrayList contains the string "ident" + //const jsonString = JSON.stringify(response); + +//if (jsonString.includes("test1")) { + ///console.log(`Response contains the string "ident"`); +//} else { + //console.log(`Response does not contain the string "ident"`); +//} + console.log(response); + finalTitle = await response.map(person => person.metadata.title); + finalCateg = await response.map(person => person.metadata.category); + finalCatName = await response.map(person => person.metadata.categoryName); + finalDesc = await response.map(person => person.metadata.description); + //finalTitle = 'my first test video'; + console.log(finalTitle); + console.log(finalCateg); + console.log(finalCatName); + console.log(finalDesc); + } + + + // user interface textfield and autocomplte + function MyAutocomplete() { + + return ( + } + + /> + ); + + }; + + + + + + + + + + + + + + + + interface NewCrowdfundProps { editId?: string; editContent?: null | { @@ -90,6 +250,7 @@ interface NewCrowdfundProps { }; } + interface VideoFile { file: File; title: string; @@ -104,13 +265,13 @@ export const PublishVideo = ({ editId, editContent }: NewCrowdfundProps) => { const userAddress = useSelector( (state: RootState) => state.auth?.user?.address ); - const [files, setFiles] = useState([]); + const [isOpen, setIsOpen] = useState(false); const [title, setTitle] = useState(""); const [description, setDescription] = useState(""); const [coverImageForAll, setCoverImageForAll] = useState(""); - + let [files, setFiles] = useState([]); const [step, setStep] = useState("videos"); const [playlistCoverImage, setPlaylistCoverImage] = useState( null @@ -137,8 +298,10 @@ export const PublishVideo = ({ editId, editContent }: NewCrowdfundProps) => { const [isCheckDescriptionIsTitle, setIsCheckDescriptionIsTitle] = useState(false); const [imageExtracts, setImageExtracts] = useState({}); + - + + const { getRootProps, getInputProps } = useDropzone({ accept: { "video/*": [], @@ -160,7 +323,7 @@ export const PublishVideo = ({ editId, editContent }: NewCrowdfundProps) => { }; }); - setFiles(prev => [...prev, ...formatArray]); + //setFiles(prev => [...prev, ...formatArray]); let errorString = null; rejectedFiles.forEach(({ file, errors }) => { @@ -181,6 +344,64 @@ export const PublishVideo = ({ editId, editContent }: NewCrowdfundProps) => { } }, }); + + + // test cases for grabbing category and description from Q-blog (only finalTitle is necessary) + console.log(finalTitle + "lastline"); + console.log(finalCateg + "lastline"); + console.log(finalCatName + "lastline"); + console.log(finalDesc + "lastline"); + //console.log(videoInfo); + /** + const handleBase64 = (base64: string) => { + const file = new File([base64], 'video.mp4', { + type: 'video/mp4', }); + const newVideoFile: VideoFile = { + file, + title: finalTitle, + description: "", + coverImage: "", + }; + setFiles(prev => [...prev, newVideoFile]); + console.dir(files); + //console.log(base64); + + + }; + */ + +// changes File upload button and drag drop if ident is found in QDN + function changeDisplay(){ + + if (doesExist === false){ + return ( + + + + + + + Drag and drop a video files here or click to select files + + + ) + } else { + + return ( ); + } + + } + // useEffect(() => { // if (editContent) { @@ -204,6 +425,8 @@ export const PublishVideo = ({ editId, editContent }: NewCrowdfundProps) => { }; async function publishQDNResource() { + + try { if (playlistSetting === "new") { if (!playlistTitle) throw new Error("Please enter a title"); @@ -211,7 +434,7 @@ export const PublishVideo = ({ editId, editContent }: NewCrowdfundProps) => { if (!playlistCoverImage) throw new Error("Please select cover image"); if (!selectedCategory) throw new Error("Please select a category"); } - if (files?.length === 0) + if (files?.length === 0 && !doesExist) throw new Error("Please select at least one file"); if (isCheckSameCoverImage && !coverImageForAll) throw new Error("Please select cover image"); @@ -241,13 +464,16 @@ export const PublishVideo = ({ editId, editContent }: NewCrowdfundProps) => { } const listOfPublishes = []; - + + if (files.length > 0 ) { + console.log('why are we here'); + try { for (let i = 0; i < files.length; i++) { const publish = files[i]; - const title = publish.title; + const title = finalTitle; const description = isCheckDescriptionIsTitle - ? publish.title - : publish.description; + ? finalTitle + : finalDesc; const category = selectedCategoryVideos.id; const subcategory = selectedSubCategoryVideos?.id || ""; const coverImage = isCheckSameCoverImage @@ -290,8 +516,8 @@ export const PublishVideo = ({ editId, editContent }: NewCrowdfundProps) => { const videoObject: any = { title, version: 1, - fullDescription, - htmlDescription: description, + fullDescription: "", + htmlDescription: "", videoImage: coverImage, videoReference: { name, @@ -306,7 +532,7 @@ export const PublishVideo = ({ editId, editContent }: NewCrowdfundProps) => { videoType: file?.type || "video/mp4", filename: `${alphanumericString.trim()}.${fileExtension}`, }; - + const metadescription = `**category:${category};subcategory:${subcategory};code:${code}**` + fullDescription.slice(0, 150); @@ -323,6 +549,8 @@ export const PublishVideo = ({ editId, editContent }: NewCrowdfundProps) => { tag1: QTUBE_VIDEO_BASE, filename: `video_metadata.json`, code, + //link: linkFinal, + }; const requestBodyVideo: any = { action: "PUBLISH_QDN_RESOURCE", @@ -338,7 +566,110 @@ export const PublishVideo = ({ editId, editContent }: NewCrowdfundProps) => { listOfPublishes.push(requestBodyJson); listOfPublishes.push(requestBodyVideo); } + } catch (Error){ + + } //doesExist signifies a link to a video on QDN that exists + } else if (files.length === 0 && doesExist) { + console.log('we have an existing link'); + const publish = videoInfo; + const title = finalTitle; + const description = isCheckDescriptionIsTitle + ? finalTitle + : finalDesc; + const category = selectedCategoryVideos.id; + const subcategory = selectedSubCategoryVideos?.id || ""; + const coverImage = isCheckSameCoverImage + ? coverImageForAll + : publish.coverImage; + //const file = videoInfo; + + + const id = uid(); + + const identifier = editId + ? editId + : `${QTUBE_VIDEO_BASE}${title}_${id}`; + + //const fullDescription = extractTextFromHTML(description); + const code = shortuid(); + //const fullDescription = extractTextFromHTML(description); + + let fileExtension = "mp4"; + const fileExtensionSplit = finalTitle; + if (fileExtensionSplit?.length > 1) { + fileExtension = fileExtensionSplit?.pop() || "mp4"; + } + + //const filename = title.slice(0, 15); + // Step 1: Replace all white spaces with underscores + // Replace all forms of whitespace (including non-standard ones) with underscores + //const stringWithUnderscores = filename.replace(/[\s\uFEFF\xA0]+/g, "_"); + + // Remove all non-alphanumeric characters (except underscores) + //const alphanumericString = stringWithUnderscores.replace( + ///[^a-zA-Z0-9_]/g, + //"" + //); + const videoObject: any = { + title: finalTitle, + version: 1, + fullDescription: "", + htmlDescription: "", + videoImage: coverImage, + videoReference: { + name: name, + identifier: identifier, + service: "VIDEO", + }, + extracts: imageExtracts[0], + commentsId: `${QTUBE_VIDEO_BASE}_cm_${id}`, + category, + subcategory, + code, + videoType: "video/mp4", + filename: `${fileExtension}`, + link: linkFinal, + }; + + // const metadescription = + // `**category:${category};subcategory:${subcategory};code:${code}**` + + // fullDescription.slice(0, 150); + + // Description is obtained from raw data + const requestBodyJson: any = { + action: "PUBLISH_QDN_RESOURCE", + name:name, + service: "DOCUMENT", + //base64: objectToBase64(videoObject), + //data64: await objectToBase64(videoObject), + file: objectToFile(videoObject), + title: finalTitle, + description: finalDesc, + identifier: identifier + "_metadata", + tag1: QTUBE_VIDEO_BASE, + filename: `video_metadata.json`, + code, + link: linkFinal, + + }; + const requestBodyVideo: any = { + action: "PUBLISH_QDN_RESOURCE", + name: name, + service: "VIDEO", + //base64: videoInfo, + file: objectToFile(videoInfo), + //data64: videoInfo, + title: finalTitle, + description: finalDesc, + identifier, + filename: `${fileExtension}`, + tag1: QTUBE_VIDEO_BASE, + //link: linkFinal, + }; + listOfPublishes.push(requestBodyJson); + listOfPublishes.push(requestBodyVideo); + } const isNewPlaylist = playlistSetting === "new"; if (isNewPlaylist) { @@ -348,18 +679,11 @@ export const PublishVideo = ({ editId, editContent }: NewCrowdfundProps) => { const category = selectedCategory.id; const subcategory = selectedSubCategory?.id || ""; const coverImage = playlistCoverImage; - const sanitizeTitle = title - .replace(/[^a-zA-Z0-9\s-]/g, "") - .replace(/\s+/g, "-") - .replace(/-+/g, "-") - .trim() - .toLowerCase(); + const id = uid(); - const identifier = editId - ? editId - : `${QTUBE_PLAYLIST_BASE}${sanitizeTitle.slice(0, 30)}_${id}`; + const videos = listOfPublishes .filter( @@ -405,7 +729,7 @@ export const PublishVideo = ({ editId, editContent }: NewCrowdfundProps) => { file: objectToFile(playlistObject), title: title.slice(0, 50), description: metadescription, - identifier: identifier + "_metadata", + identifier: selectExistingPlaylist.identifier, tag1: QTUBE_VIDEO_BASE, }; @@ -414,6 +738,9 @@ export const PublishVideo = ({ editId, editContent }: NewCrowdfundProps) => { if (!selectExistingPlaylist) { throw new Error("select a playlist"); } + + + // get raw data for playlist const responseData = await qortalRequest({ @@ -422,6 +749,9 @@ export const PublishVideo = ({ editId, editContent }: NewCrowdfundProps) => { service: selectExistingPlaylist.service, identifier: selectExistingPlaylist.identifier, }); + // fetch videos functionality for textfield autocomplete + + if (responseData && !responseData.error) { const videos = listOfPublishes .filter( @@ -469,7 +799,7 @@ export const PublishVideo = ({ editId, editContent }: NewCrowdfundProps) => { throw new Error("cannot get playlist data"); } } - + const multiplePublish = { action: "PUBLISH_MULTIPLE_QDN_RESOURCES", resources: [...listOfPublishes], @@ -500,7 +830,7 @@ export const PublishVideo = ({ editId, editContent }: NewCrowdfundProps) => { throw new Error("Failed to publish video"); } } - + const handleOnchange = (index: number, type: string, value: string) => { setFiles(prev => { let formattedValue = value; @@ -549,19 +879,19 @@ export const PublishVideo = ({ editId, editContent }: NewCrowdfundProps) => { ); setSelectedSubCategoryVideos(selectedOption || null); }; - + const next = () => { try { if (isCheckSameCoverImage && !coverImageForAll) throw new Error("Please select cover image"); - if (files?.length === 0) + if (files?.length === 0 && !doesExist) //might revert throw new Error("Please select at least one file"); if (!selectedCategoryVideos) throw new Error("Please select a category"); files.forEach(file => { - if (!file.title) throw new Error("Please enter a title"); - if (!isCheckTitleByFile && !file.description) + if (!file.title && finalTitle === null) throw new Error("Please enter a title"); + if (!isCheckTitleByFile && !file.description && !finalDesc) throw new Error("Please enter a description"); - if (!isCheckSameCoverImage && !file.coverImage) + if (!isCheckSameCoverImage && !file.coverImage && !doesExist) throw new Error("Please select cover image"); }); @@ -575,7 +905,9 @@ export const PublishVideo = ({ editId, editContent }: NewCrowdfundProps) => { ); } }; - + + + const onFramesExtracted = async (imgs, index) => { try { const imagesExtracts = []; @@ -617,6 +949,7 @@ export const PublishVideo = ({ editId, editContent }: NewCrowdfundProps) => { }; return ( + <> {username && ( <> @@ -634,6 +967,7 @@ export const PublishVideo = ({ editId, editContent }: NewCrowdfundProps) => { )} + { inputProps={{ "aria-label": "controlled" }} /> + { } inputProps={{ maxLength: 180 }} /> - - - - Drag and drop a video files here or click to select files - - + +
+ {MyAutocomplete} + +
+ + + + + {changeDisplay()} Supported File Containers:{" "} @@ -740,7 +1070,7 @@ export const PublishVideo = ({ editId, editContent }: NewCrowdfundProps) => { alignItems: "center", }} > - {files?.length > 0 && ( + {(files?.length > 0 || doesExist) && ( <> Select a Category @@ -789,7 +1119,7 @@ export const PublishVideo = ({ editId, editContent }: NewCrowdfundProps) => { )} - {files?.length > 0 && isCheckSameCoverImage && ( + {(files?.length > 0 || doesExist) && isCheckSameCoverImage && ( <> {!coverImageForAll ? ( { )} )} - + { )} + {playlistSetting === "new" && ( <> {!playlistCoverImage ? ( @@ -1207,7 +1538,7 @@ export const PublishVideo = ({ editId, editContent }: NewCrowdfundProps) => { )} )} - + { @@ -1311,5 +1642,7 @@ export const PublishVideo = ({ editId, editContent }: NewCrowdfundProps) => { /> )} + ); + };