From d1440f3907ca91b29db2977f043e44f54993aeb1 Mon Sep 17 00:00:00 2001 From: Vladislav Khorev Date: Sun, 25 Feb 2024 19:27:10 +0000 Subject: [PATCH 01/17] yarn lock --- yarn.lock | 259 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 198 insertions(+), 61 deletions(-) diff --git a/yarn.lock b/yarn.lock index 6e41ec7..51c3296 100644 --- a/yarn.lock +++ b/yarn.lock @@ -21,6 +21,13 @@ dependencies: regenerator-runtime "^0.14.0" +"@emnapi/runtime@^0.45.0": + version "0.45.0" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-0.45.0.tgz#e754de04c683263f34fd0c7f32adfe718bbe4ddd" + integrity sha512-Txumi3td7J4A/xTTwlssKieHKTGl3j4A1tglBx72auZ49YK7ePY6XZricgIg9mnZT4xPfA+UPCUdnhRuEFDL+w== + dependencies: + tslib "^2.4.0" + "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" @@ -72,6 +79,119 @@ resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz" integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== +"@img/sharp-darwin-arm64@0.33.2": + version "0.33.2" + resolved "https://registry.yarnpkg.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.2.tgz#0a52a82c2169112794dac2c71bfba9e90f7c5bd1" + integrity sha512-itHBs1rPmsmGF9p4qRe++CzCgd+kFYktnsoR1sbIAfsRMrJZau0Tt1AH9KVnufc2/tU02Gf6Ibujx+15qRE03w== + optionalDependencies: + "@img/sharp-libvips-darwin-arm64" "1.0.1" + +"@img/sharp-darwin-x64@0.33.2": + version "0.33.2" + resolved "https://registry.yarnpkg.com/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.2.tgz#982e26bb9d38a81f75915c4032539aed621d1c21" + integrity sha512-/rK/69Rrp9x5kaWBjVN07KixZanRr+W1OiyKdXcbjQD6KbW+obaTeBBtLUAtbBsnlTTmWthw99xqoOS7SsySDg== + optionalDependencies: + "@img/sharp-libvips-darwin-x64" "1.0.1" + +"@img/sharp-libvips-darwin-arm64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.1.tgz#81e83ffc2c497b3100e2f253766490f8fad479cd" + integrity sha512-kQyrSNd6lmBV7O0BUiyu/OEw9yeNGFbQhbxswS1i6rMDwBBSX+e+rPzu3S+MwAiGU3HdLze3PanQ4Xkfemgzcw== + +"@img/sharp-libvips-darwin-x64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.1.tgz#fc1fcd9d78a178819eefe2c1a1662067a83ab1d6" + integrity sha512-eVU/JYLPVjhhrd8Tk6gosl5pVlvsqiFlt50wotCvdkFGf+mDNBJxMh+bvav+Wt3EBnNZWq8Sp2I7XfSjm8siog== + +"@img/sharp-libvips-linux-arm64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.1.tgz#26eb8c556a9b0db95f343fc444abc3effb67ebcf" + integrity sha512-bnGG+MJjdX70mAQcSLxgeJco11G+MxTz+ebxlz8Y3dxyeb3Nkl7LgLI0mXupoO+u1wRNx/iRj5yHtzA4sde1yA== + +"@img/sharp-libvips-linux-arm@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.1.tgz#2a377b959ff7dd6528deee486c25461296a4fa8b" + integrity sha512-FtdMvR4R99FTsD53IA3LxYGghQ82t3yt0ZQ93WMZ2xV3dqrb0E8zq4VHaTOuLEAuA83oDawHV3fd+BsAPadHIQ== + +"@img/sharp-libvips-linux-s390x@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.1.tgz#af28ac9ba929204467ecdf843330d791e9421e10" + integrity sha512-3+rzfAR1YpMOeA2zZNp+aYEzGNWK4zF3+sdMxuCS3ey9HhDbJ66w6hDSHDMoap32DueFwhhs3vwooAB2MaK4XQ== + +"@img/sharp-libvips-linux-x64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.1.tgz#4273d182aa51912e655e1214ea47983d7c1f7f8d" + integrity sha512-3NR1mxFsaSgMMzz1bAnnKbSAI+lHXVTqAHgc1bgzjHuXjo4hlscpUxc0vFSAPKI3yuzdzcZOkq7nDPrP2F8Jgw== + +"@img/sharp-libvips-linuxmusl-arm64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.1.tgz#d150c92151cea2e8d120ad168b9c358d09c77ce8" + integrity sha512-5aBRcjHDG/T6jwC3Edl3lP8nl9U2Yo8+oTl5drd1dh9Z1EBfzUKAJFUDTDisDjUwc7N4AjnPGfCA3jl3hY8uDg== + +"@img/sharp-libvips-linuxmusl-x64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.1.tgz#e297c1a4252c670d93b0f9e51fca40a7a5b6acfd" + integrity sha512-dcT7inI9DBFK6ovfeWRe3hG30h51cBAP5JXlZfx6pzc/Mnf9HFCQDLtYf4MCBjxaaTfjCCjkBxcy3XzOAo5txw== + +"@img/sharp-linux-arm64@0.33.2": + version "0.33.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.2.tgz#af3409f801a9bee1d11d0c7e971dcd6180f80022" + integrity sha512-pz0NNo882vVfqJ0yNInuG9YH71smP4gRSdeL09ukC2YLE6ZyZePAlWKEHgAzJGTiOh8Qkaov6mMIMlEhmLdKew== + optionalDependencies: + "@img/sharp-libvips-linux-arm64" "1.0.1" + +"@img/sharp-linux-arm@0.33.2": + version "0.33.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.2.tgz#181f7466e6ac074042a38bfb679eb82505e17083" + integrity sha512-Fndk/4Zq3vAc4G/qyfXASbS3HBZbKrlnKZLEJzPLrXoJuipFNNwTes71+Ki1hwYW5lch26niRYoZFAtZVf3EGA== + optionalDependencies: + "@img/sharp-libvips-linux-arm" "1.0.1" + +"@img/sharp-linux-s390x@0.33.2": + version "0.33.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.2.tgz#9c171f49211f96fba84410b3e237b301286fa00f" + integrity sha512-MBoInDXDppMfhSzbMmOQtGfloVAflS2rP1qPcUIiITMi36Mm5YR7r0ASND99razjQUpHTzjrU1flO76hKvP5RA== + optionalDependencies: + "@img/sharp-libvips-linux-s390x" "1.0.1" + +"@img/sharp-linux-x64@0.33.2": + version "0.33.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.2.tgz#b956dfc092adc58c2bf0fae2077e6f01a8b2d5d7" + integrity sha512-xUT82H5IbXewKkeF5aiooajoO1tQV4PnKfS/OZtb5DDdxS/FCI/uXTVZ35GQ97RZXsycojz/AJ0asoz6p2/H/A== + optionalDependencies: + "@img/sharp-libvips-linux-x64" "1.0.1" + +"@img/sharp-linuxmusl-arm64@0.33.2": + version "0.33.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.2.tgz#10e0ec5a79d1234c6a71df44c9f3b0bef0bc0f15" + integrity sha512-F+0z8JCu/UnMzg8IYW1TMeiViIWBVg7IWP6nE0p5S5EPQxlLd76c8jYemG21X99UzFwgkRo5yz2DS+zbrnxZeA== + optionalDependencies: + "@img/sharp-libvips-linuxmusl-arm64" "1.0.1" + +"@img/sharp-linuxmusl-x64@0.33.2": + version "0.33.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.2.tgz#29e0030c24aa27c38201b1fc84e3d172899fcbe0" + integrity sha512-+ZLE3SQmSL+Fn1gmSaM8uFusW5Y3J9VOf+wMGNnTtJUMUxFhv+P4UPaYEYT8tqnyYVaOVGgMN/zsOxn9pSsO2A== + optionalDependencies: + "@img/sharp-libvips-linuxmusl-x64" "1.0.1" + +"@img/sharp-wasm32@0.33.2": + version "0.33.2" + resolved "https://registry.yarnpkg.com/@img/sharp-wasm32/-/sharp-wasm32-0.33.2.tgz#38d7c740a22de83a60ad1e6bcfce17462b0d4230" + integrity sha512-fLbTaESVKuQcpm8ffgBD7jLb/CQLcATju/jxtTXR1XCLwbOQt+OL5zPHSDMmp2JZIeq82e18yE0Vv7zh6+6BfQ== + dependencies: + "@emnapi/runtime" "^0.45.0" + +"@img/sharp-win32-ia32@0.33.2": + version "0.33.2" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.2.tgz#09456314e223f68e5417c283b45c399635c16202" + integrity sha512-okBpql96hIGuZ4lN3+nsAjGeggxKm7hIRu9zyec0lnfB8E7Z6p95BuRZzDDXZOl2e8UmR4RhYt631i7mfmKU8g== + +"@img/sharp-win32-x64@0.33.2": + version "0.33.2" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.2.tgz#148e96dfd6e68747da41a311b9ee4559bb1b1471" + integrity sha512-E4magOks77DK47FwHUIGH0RYWSgRBfGdK56kIHSVeB9uIS4pPFr4N2kIVsXdQQo4LzOsENKV5KAhRlRL7eMAdg== + "@isaacs/cliui@^8.0.2": version "8.0.2" resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" @@ -96,6 +216,26 @@ dependencies: glob "10.3.10" +"@next/swc-darwin-arm64@14.1.0": + version "14.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.0.tgz#70a57c87ab1ae5aa963a3ba0f4e59e18f4ecea39" + integrity sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ== + +"@next/swc-darwin-x64@14.1.0": + version "14.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.0.tgz#0863a22feae1540e83c249384b539069fef054e9" + integrity sha512-1jgudN5haWxiAl3O1ljUS2GfupPmcftu2RYJqZiMJmmbBT5M1XDffjUtRUzP4W3cBHsrvkfOFdQ71hAreNQP6g== + +"@next/swc-linux-arm64-gnu@14.1.0": + version "14.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.0.tgz#893da533d3fce4aec7116fe772d4f9b95232423c" + integrity sha512-RHo7Tcj+jllXUbK7xk2NyIDod3YcCPDZxj1WLIYxd709BQ7WuRYl3OWUNG+WUfqeQBds6kvZYlc42NJJTNi4tQ== + +"@next/swc-linux-arm64-musl@14.1.0": + version "14.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.0.tgz#d81ddcf95916310b8b0e4ad32b637406564244c0" + integrity sha512-v6kP8sHYxjO8RwHmWMJSq7VZP2nYCkRVQ0qolh2l6xroe9QjbgV8siTbduED4u0hlk0+tjS6/Tuy4n5XCp+l6g== + "@next/swc-linux-x64-gnu@14.1.0": version "14.1.0" resolved "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.0.tgz" @@ -106,6 +246,21 @@ resolved "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.0.tgz" integrity sha512-rbaIYFt2X9YZBSbH/CwGAjbBG2/MrACCVu2X0+kSykHzHnYH5FjHxwXLkcoJ10cX0aWCEynpu+rP76x0914atg== +"@next/swc-win32-arm64-msvc@14.1.0": + version "14.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.0.tgz#5f0b8cf955644104621e6d7cc923cad3a4c5365a" + integrity sha512-o1N5TsYc8f/HpGt39OUQpQ9AKIGApd3QLueu7hXk//2xq5Z9OxmV6sQfNp8C7qYmiOlHYODOGqNNa0e9jvchGQ== + +"@next/swc-win32-ia32-msvc@14.1.0": + version "14.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.0.tgz#21f4de1293ac5e5a168a412b139db5d3420a89d0" + integrity sha512-XXIuB1DBRCFwNO6EEzCTMHT5pauwaSj4SWs7CYnME57eaReAKBXCnkUE80p/pAZcewm7hs+vGvNqDPacEXHVkw== + +"@next/swc-win32-x64-msvc@14.1.0": + version "14.1.0" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.0.tgz#e561fb330466d41807123d932b365cf3d33ceba2" + integrity sha512-9WEbVRRAqJ3YFVqEZIxUqkiO8l1nool1LmNxygr5HWF8AcSYsEpneUDhmjUVJEzO2A04+oPtZdombzzPPkTtgg== + "@next/third-parties@^14.1.0": version "14.1.0" resolved "https://registry.npmjs.org/@next/third-parties/-/third-parties-14.1.0.tgz" @@ -121,7 +276,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -204,7 +359,7 @@ dependencies: react-leaflet "*" -"@types/react@*", "@types/react@^18", "@types/react@>=16.8": +"@types/react@*", "@types/react@^18": version "18.2.48" resolved "https://registry.npmjs.org/@types/react/-/react-18.2.48.tgz" integrity sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w== @@ -274,7 +429,7 @@ acorn-jsx@^5.3.2: resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.9.0: +acorn@^8.9.0: version "8.11.3" resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz" integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== @@ -843,7 +998,7 @@ eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0: dependencies: debug "^3.2.7" -eslint-plugin-import@*, eslint-plugin-import@^2.28.1: +eslint-plugin-import@^2.28.1: version "2.29.1" resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz" integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== @@ -928,7 +1083,7 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@*, "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0", "eslint@^7.23.0 || ^8.0.0", eslint@^8: +eslint@^8: version "8.56.0" resolved "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz" integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== @@ -1108,6 +1263,11 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + function-bind@^1.1.1, function-bind@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" @@ -1167,6 +1327,17 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" +glob@10.3.10: + version "10.3.10" + resolved "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.5" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" + glob@^7.1.3: version "7.2.3" resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" @@ -1179,17 +1350,6 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@10.3.10: - version "10.3.10" - resolved "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" - globals@^13.19.0: version "13.24.0" resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz" @@ -1598,7 +1758,7 @@ language-tags@^1.0.9: dependencies: language-subtag-registry "^0.3.20" -leaflet@^1.9.0, leaflet@^1.9.4: +leaflet@^1.9.4: version "1.9.4" resolved "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz" integrity sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA== @@ -1667,6 +1827,13 @@ mime-types@^2.1.12: dependencies: mime-db "1.52.0" +minimatch@9.0.3, minimatch@^9.0.1: + version "9.0.3" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" @@ -1674,20 +1841,6 @@ minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" -minimatch@^9.0.1: - version "9.0.3" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -minimatch@9.0.3: - version "9.0.3" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - minimist@^1.2.0, minimist@^1.2.6: version "1.2.8" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" @@ -1698,16 +1851,16 @@ minimist@^1.2.0, minimist@^1.2.6: resolved "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz" integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== -ms@^2.1.1: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - ms@2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + nanoid@^3.3.6: version "3.3.7" resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz" @@ -1733,7 +1886,7 @@ next-auth@^4.24.5: preact-render-to-string "^5.1.19" uuid "^8.3.2" -"next@^12.2.5 || ^13 || ^14", "next@^13.0.0 || ^14.0.0", next@^14.1.0: +next@^14.1.0: version "14.1.0" resolved "https://registry.npmjs.org/next/-/next-14.1.0.tgz" integrity sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q== @@ -1955,7 +2108,7 @@ preact-render-to-string@^5.1.19: dependencies: pretty-format "^3.8.0" -preact@^10.6.3, preact@>=10: +preact@^10.6.3: version "10.19.3" resolved "https://registry.npmjs.org/preact/-/preact-10.19.3.tgz" integrity sha512-nHHTeFVBTHRGxJXKkKu5hT8C/YWBkPso4/Gad6xuj5dbptt9iF9NZr9pHbPhBrnT2klheu7mHTxTZ/LjwJiEiQ== @@ -1994,7 +2147,7 @@ queue-microtask@^1.2.2: resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -"react-dom@^17.0.2 || ^18", react-dom@^18, react-dom@^18.0.0, react-dom@^18.2.0: +react-dom@^18: version "18.2.0" resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz" integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== @@ -2014,7 +2167,7 @@ react-leaflet@*, react-leaflet@^4.2.1: dependencies: "@react-leaflet/core" "^2.1.0" -"react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^17.0.2 || ^18", react@^18, react@^18.0.0, react@^18.2.0, "react@>= 16.8.0 || 17.x.x || ^18.0.0-0", react@>=16.8, react@>=16.8.0: +react@^18: version "18.2.0" resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== @@ -2120,7 +2273,7 @@ safe-regex-test@^1.0.0: get-intrinsic "^1.2.2" is-regex "^1.1.4" -sass@^1.3.0, sass@^1.70.0: +sass@^1.70.0: version "1.70.0" resolved "https://registry.npmjs.org/sass/-/sass-1.70.0.tgz" integrity sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ== @@ -2235,7 +2388,7 @@ slash@^3.0.0: resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -source-map-js@^1.0.2, "source-map-js@>=0.6.2 <2.0.0": +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== @@ -2245,16 +2398,7 @@ streamsearch@^1.1.0: resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.1.0: +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -2314,14 +2458,7 @@ string.prototype.trimstart@^1.0.7: define-properties "^1.2.0" es-abstract "^1.22.1" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -2457,7 +2594,7 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" -typescript@^5, typescript@>=3.3.1, typescript@>=4.2.0: +typescript@^5: version "5.3.3" resolved "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz" integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== From 6637ab4eaeec229e9553a9183303cb7bc87bb2d8 Mon Sep 17 00:00:00 2001 From: Alibek Date: Thu, 29 Feb 2024 14:09:37 +0600 Subject: [PATCH 02/17] added next-intl, composed next-auth and next-intl in middleware, fixed some bugs, completed details page, added google auth --- lib/next-auth.d.ts | 10 +- messages/en.json | 186 ++++++++++++++++++ messages/kg.json | 186 ++++++++++++++++++ messages/ru.json | 186 ++++++++++++++++++ next.config.mjs | 9 +- package.json | 1 + src/app/{ => [locale]}/App.scss | 0 src/app/{ => [locale]}/Providers.tsx | 0 src/app/{ => [locale]}/about-us/AboutUs.scss | 0 .../{ => [locale]}/about-us/assets/header.svg | 0 src/app/{ => [locale]}/about-us/page.tsx | 0 .../create-report/CreateReport.scss | 0 src/app/{ => [locale]}/create-report/page.tsx | 2 +- src/app/{ => [locale]}/globals.scss | 0 src/app/[locale]/layout.tsx | 34 ++++ src/app/{ => [locale]}/news/News.scss | 0 .../{ => [locale]}/news/[id]/NewsDetails.scss | 0 .../news/[id]/icons/calendar.svg | 0 .../news/[id]/icons/message.svg | 0 src/app/{ => [locale]}/news/[id]/page.tsx | 0 src/app/{ => [locale]}/news/page.tsx | 2 - src/app/{ => [locale]}/page.tsx | 10 +- src/app/{ => [locale]}/profile/AuthGuard.tsx | 10 +- src/app/{ => [locale]}/profile/Profile.scss | 0 src/app/{ => [locale]}/profile/layout.tsx | 1 - .../profile/my-reports/page.tsx | 2 +- src/app/{ => [locale]}/profile/page.tsx | 2 - .../{ => [locale]}/profile/personal/page.tsx | 2 +- .../[locale]/report/[id]/ReportDetails.scss | 37 ++++ .../report/[id]/icons/def_image.svg | 0 src/app/[locale]/report/[id]/page.tsx | 66 +++++++ .../sign-in/forgot-password/page.tsx | 2 +- .../sign-in/icons/sign-in_icon.svg | 0 src/app/{ => [locale]}/sign-in/page.tsx | 4 +- .../sign-in/reset-code/icons/key.svg | 0 .../sign-in/reset-code/page.tsx | 2 +- .../sign-up/confirm-email/icons/mail.svg | 0 .../sign-up/confirm-email/page.tsx | 2 +- src/app/{ => [locale]}/sign-up/icons/flag.svg | 0 src/app/{ => [locale]}/sign-up/page.tsx | 4 +- .../{ => [locale]}/statistics/Statistics.scss | 0 src/app/{ => [locale]}/statistics/page.tsx | 5 +- .../{ => [locale]}/volunteers/Volunteers.scss | 0 src/app/{ => [locale]}/volunteers/page.tsx | 2 +- src/app/layout.tsx | 30 +-- src/app/not-found.tsx | 13 ++ src/app/report/[id]/page.tsx | 138 ------------- src/entities/NewsCard/NewsCard.tsx | 4 +- src/features/BreadCrumbs/BreadCrumbs.scss | 5 + src/features/BreadCrumbs/BreadCrumbs.tsx | 9 + src/features/GoogleButton/GoogleButton.tsx | 19 +- src/features/ProfileAvatar/ProfileAvatar.tsx | 20 +- src/features/ReportLike/ReportLike.tsx | 9 +- src/features/SearchForm/SearchForm.tsx | 4 +- .../ShowMapButton/ShowMapButton.scss} | 0 src/features/ShowMapButton/ShowMapButton.tsx | 20 ++ .../ShowMapButton}/icons/map-pin.svg | 0 src/i18n.ts | 11 ++ src/middleware.ts | 54 ++++- src/shared/config/apiConfig.ts | 10 + src/shared/config/authConfig.ts | 91 ++++++--- src/shared/config/navigation.ts | 7 + src/shared/types/location-type.ts | 2 +- src/shared/types/token-type.ts | 5 + src/shared/variables/links.ts | 30 ++- src/shared/variables/month.ts | 14 ++ src/shared/variables/road-types.ts | 18 +- src/widgets/Footer/Footer.tsx | 12 +- src/widgets/Navbar/NavAuth/NavAuth.tsx | 8 +- .../Navbar/NavLanguage/NavLanguage.tsx | 53 ++++- src/widgets/Navbar/NavLanguage/variables.ts | 11 ++ src/widgets/Navbar/NavMenu/NavMenu.tsx | 10 +- src/widgets/Navbar/Navbar.tsx | 7 +- src/widgets/ProfileNav/ProfileNav.tsx | 3 +- src/widgets/ReviewSection/ReviewSection.scss | 26 +++ src/widgets/ReviewSection/ReviewSection.tsx | 99 ++++++---- .../ConfirmEmailForm/ConfirmEmailForm.scss | 0 .../ConfirmEmailForm/ConfirmEmailForm.tsx | 4 +- .../ForgotPasswordForm.scss} | 0 .../ForgotPasswordForm/ForgotPasswordForm.tsx | 0 .../confirm-code/confirm-code.scss | 0 .../confirm-code/confirm-code.tsx | 2 +- .../confirm-code/icons/key.svg | 0 .../send-email/icons/mail.svg | 0 .../send-email/send-email.scss | 0 .../send-email/send-email.tsx | 0 .../ChangePassword/ChangePassword.scss | 0 .../ChangePassword/ChangePassword.tsx | 0 .../ChangePasswordInput.scss | 0 .../ChangePasswordInput.tsx | 0 .../ChangePasswordInput/icons/eye-off.svg | 0 .../ChangePasswordInput/icons/eye-on.svg | 0 .../{ => forms}/ProfileForm/ProfileForm.scss | 0 .../{ => forms}/ProfileForm/ProfileForm.tsx | 6 +- .../{ => forms}/ProfileForm/icons/pen.svg | 0 .../CreateReportMap/CreateReportMap.scss | 0 .../CreateReportMap/CreateReportMap.tsx | 0 .../{ => forms}/ReportForm/ReportForm.scss | 0 .../{ => forms}/ReportForm/ReportForm.tsx | 2 +- .../ReportForm/icons/arrow-right.svg | 0 .../{ => forms}/ReportForm/icons/clip.svg | 0 .../ReportForm/icons/pin-image.svg | 0 .../{ => forms}/ReportForm/icons/pin_icon.svg | 0 .../ResetCodeForm/ResetCodeForm.scss | 0 .../ResetCodeForm/ResetCodeForm.tsx | 2 +- .../{ => forms}/SignInForm/SignInForm.scss | 0 .../{ => forms}/SignInForm/SignInForm.tsx | 3 +- .../{ => forms}/SignUpForm/SignUpForm.scss | 0 .../{ => forms}/SignUpForm/SignUpForm.tsx | 4 +- src/widgets/{ => home}/Header/Header.scss | 1 + src/widgets/{ => home}/Header/Header.tsx | 10 +- .../Header/HeaderLink/HeaderLink.scss | 0 .../Header/HeaderLink/HeaderLink.tsx | 7 +- .../HeaderLink/icons/arrow-right-circle.svg | 0 .../{ => home}/Header/assets/background.svg | 0 .../MapSection/HomeMap/HomeMap.scss | 0 .../{ => home}/MapSection/HomeMap/HomeMap.tsx | 12 +- .../MapSection/HomeMap/icons/geo-green.svg | 0 .../MapSection/HomeMap/icons/geo-orange.svg | 0 .../MapSection/HomeMap/icons/geo-pink.svg | 0 .../MapSection/HomeMap/icons/geo-purple.svg | 0 .../MapSection/HomeMap/icons/geo-red.svg | 0 .../MapSection/HomeMap/icons/geo-white.svg | 0 .../MapSection/HomeMap/icons/geo-yellow.svg | 0 .../MapSection/MapSearch/MapSearch.scss | 0 .../MapSection/MapSearch/MapSearch.tsx | 9 +- .../{ => home}/MapSection/MapSearch/action.ts | 0 .../MapSection/MapSearch/icons/search.svg | 0 .../{ => home}/MapSection/MapSection.scss | 0 .../{ => home}/MapSection/MapSection.tsx | 32 +-- .../{ => home}/MapSection/Switch/Switch.scss | 0 .../{ => home}/MapSection/Switch/Switch.tsx | 0 .../{ => home}/MapSection/mapSectionStore.ts | 0 .../{ => home}/NewsSection/NewsSection.scss | 2 +- .../{ => home}/NewsSection/NewsSection.tsx | 10 +- .../NewsSection/icons/arrow-right.svg | 0 .../NewsSection/newsSectionStore.ts | 0 .../RatingSection/RatingSection.scss | 2 +- .../RatingSection/RatingSection.tsx | 52 ++--- .../{ => home}/RatingSection/helpers.ts | 7 - .../{ => home}/RatingSection/icons/like.svg | 0 .../RatingSection/icons/message.svg | 0 .../RatingSection/ratingSectionStore.ts | 0 .../StatisticsSection/StatisticsSection.scss | 2 +- .../StatisticsSection/StatisticsSection.tsx | 14 +- .../ReportImages/ReportImages.scss | 52 +++++ .../ReportImages/ReportImages.tsx | 56 ++++++ .../ReportInformation/ReportInformation.scss} | 73 ------- .../ReportInformation/ReportInformation.tsx | 75 +++++++ .../ReportInformation}/icons/calendar.svg | 0 .../report-details/ReportMap/ReportMap.scss | 44 +++++ .../report-details/ReportMap/ReportMap.tsx | 108 ++++++++++ .../ReportMap/icons/geo-green.svg | 5 + .../ReportMap/icons/geo-orange.svg | 5 + .../ReportMap/icons/geo-pink.svg | 5 + .../ReportMap/icons/geo-purple.svg | 5 + .../ReportMap/icons/geo-red.svg | 5 + .../ReportMap/icons/geo-white.svg | 17 ++ .../ReportMap/icons/geo-yellow.svg | 5 + src/widgets/report-details/reportStore.ts | 13 ++ .../ProfileTable/ProfileTable.scss | 0 .../ProfileTable/ProfileTable.tsx | 3 +- .../{ => tables}/ProfileTable/helpers.ts | 0 .../ProfileTable/profile-reports.store.ts | 0 .../StatisticsTable/StatisticsTable.scss | 0 .../StatisticsTable/StatisticsTable.tsx | 3 +- .../StatisticsTable/icons/chevron-down.svg | 0 .../StatisticsTable/statistics.store.ts | 0 .../VolunteersTable/VolunteersTable.scss | 0 .../VolunteersTable/VolunteersTable.tsx | 13 +- .../VolunteersTable/volunteers.store.ts | 0 yarn.lock | 95 ++++++++- 172 files changed, 1772 insertions(+), 502 deletions(-) create mode 100644 messages/en.json create mode 100644 messages/kg.json create mode 100644 messages/ru.json rename src/app/{ => [locale]}/App.scss (100%) rename src/app/{ => [locale]}/Providers.tsx (100%) rename src/app/{ => [locale]}/about-us/AboutUs.scss (100%) rename src/app/{ => [locale]}/about-us/assets/header.svg (100%) rename src/app/{ => [locale]}/about-us/page.tsx (100%) rename src/app/{ => [locale]}/create-report/CreateReport.scss (100%) rename src/app/{ => [locale]}/create-report/page.tsx (92%) rename src/app/{ => [locale]}/globals.scss (100%) create mode 100644 src/app/[locale]/layout.tsx rename src/app/{ => [locale]}/news/News.scss (100%) rename src/app/{ => [locale]}/news/[id]/NewsDetails.scss (100%) rename src/app/{ => [locale]}/news/[id]/icons/calendar.svg (100%) rename src/app/{ => [locale]}/news/[id]/icons/message.svg (100%) rename src/app/{ => [locale]}/news/[id]/page.tsx (100%) rename src/app/{ => [locale]}/news/page.tsx (85%) rename src/app/{ => [locale]}/page.tsx (67%) rename src/app/{ => [locale]}/profile/AuthGuard.tsx (78%) rename src/app/{ => [locale]}/profile/Profile.scss (100%) rename src/app/{ => [locale]}/profile/layout.tsx (96%) rename src/app/{ => [locale]}/profile/my-reports/page.tsx (79%) rename src/app/{ => [locale]}/profile/page.tsx (72%) rename src/app/{ => [locale]}/profile/personal/page.tsx (94%) create mode 100644 src/app/[locale]/report/[id]/ReportDetails.scss rename src/app/{ => [locale]}/report/[id]/icons/def_image.svg (100%) create mode 100644 src/app/[locale]/report/[id]/page.tsx rename src/app/{ => [locale]}/sign-in/forgot-password/page.tsx (68%) rename src/app/{ => [locale]}/sign-in/icons/sign-in_icon.svg (100%) rename src/app/{ => [locale]}/sign-in/page.tsx (89%) rename src/app/{ => [locale]}/sign-in/reset-code/icons/key.svg (100%) rename src/app/{ => [locale]}/sign-in/reset-code/page.tsx (90%) rename src/app/{ => [locale]}/sign-up/confirm-email/icons/mail.svg (100%) rename src/app/{ => [locale]}/sign-up/confirm-email/page.tsx (89%) rename src/app/{ => [locale]}/sign-up/icons/flag.svg (100%) rename src/app/{ => [locale]}/sign-up/page.tsx (89%) rename src/app/{ => [locale]}/statistics/Statistics.scss (100%) rename src/app/{ => [locale]}/statistics/page.tsx (74%) rename src/app/{ => [locale]}/volunteers/Volunteers.scss (100%) rename src/app/{ => [locale]}/volunteers/page.tsx (86%) create mode 100644 src/app/not-found.tsx delete mode 100644 src/app/report/[id]/page.tsx create mode 100644 src/features/BreadCrumbs/BreadCrumbs.scss create mode 100644 src/features/BreadCrumbs/BreadCrumbs.tsx rename src/{widgets/ForgotPasswordForm/ForgotPasswordForm.scss => features/ShowMapButton/ShowMapButton.scss} (100%) create mode 100644 src/features/ShowMapButton/ShowMapButton.tsx rename src/{app/report/[id] => features/ShowMapButton}/icons/map-pin.svg (100%) create mode 100644 src/i18n.ts create mode 100644 src/shared/config/navigation.ts create mode 100644 src/shared/variables/month.ts create mode 100644 src/widgets/Navbar/NavLanguage/variables.ts rename src/widgets/{ => forms}/ConfirmEmailForm/ConfirmEmailForm.scss (100%) rename src/widgets/{ => forms}/ConfirmEmailForm/ConfirmEmailForm.tsx (98%) rename src/widgets/{ReportForm/CreateReportMap/CreateReportMap.scss => forms/ForgotPasswordForm/ForgotPasswordForm.scss} (100%) rename src/widgets/{ => forms}/ForgotPasswordForm/ForgotPasswordForm.tsx (100%) rename src/widgets/{ => forms}/ForgotPasswordForm/confirm-code/confirm-code.scss (100%) rename src/widgets/{ => forms}/ForgotPasswordForm/confirm-code/confirm-code.tsx (97%) rename src/widgets/{ => forms}/ForgotPasswordForm/confirm-code/icons/key.svg (100%) rename src/widgets/{ => forms}/ForgotPasswordForm/send-email/icons/mail.svg (100%) rename src/widgets/{ => forms}/ForgotPasswordForm/send-email/send-email.scss (100%) rename src/widgets/{ => forms}/ForgotPasswordForm/send-email/send-email.tsx (100%) rename src/widgets/{ => forms}/ProfileForm/ChangePassword/ChangePassword.scss (100%) rename src/widgets/{ => forms}/ProfileForm/ChangePassword/ChangePassword.tsx (100%) rename src/widgets/{ => forms}/ProfileForm/ChangePassword/ChangePasswordInput/ChangePasswordInput.scss (100%) rename src/widgets/{ => forms}/ProfileForm/ChangePassword/ChangePasswordInput/ChangePasswordInput.tsx (100%) rename src/widgets/{ => forms}/ProfileForm/ChangePassword/ChangePasswordInput/icons/eye-off.svg (100%) rename src/widgets/{ => forms}/ProfileForm/ChangePassword/ChangePasswordInput/icons/eye-on.svg (100%) rename src/widgets/{ => forms}/ProfileForm/ProfileForm.scss (100%) rename src/widgets/{ => forms}/ProfileForm/ProfileForm.tsx (95%) rename src/widgets/{ => forms}/ProfileForm/icons/pen.svg (100%) create mode 100644 src/widgets/forms/ReportForm/CreateReportMap/CreateReportMap.scss rename src/widgets/{ => forms}/ReportForm/CreateReportMap/CreateReportMap.tsx (100%) rename src/widgets/{ => forms}/ReportForm/ReportForm.scss (100%) rename src/widgets/{ => forms}/ReportForm/ReportForm.tsx (99%) rename src/widgets/{ => forms}/ReportForm/icons/arrow-right.svg (100%) rename src/widgets/{ => forms}/ReportForm/icons/clip.svg (100%) rename src/widgets/{ => forms}/ReportForm/icons/pin-image.svg (100%) rename src/widgets/{ => forms}/ReportForm/icons/pin_icon.svg (100%) rename src/widgets/{ => forms}/ResetCodeForm/ResetCodeForm.scss (100%) rename src/widgets/{ => forms}/ResetCodeForm/ResetCodeForm.tsx (98%) rename src/widgets/{ => forms}/SignInForm/SignInForm.scss (100%) rename src/widgets/{ => forms}/SignInForm/SignInForm.tsx (97%) rename src/widgets/{ => forms}/SignUpForm/SignUpForm.scss (100%) rename src/widgets/{ => forms}/SignUpForm/SignUpForm.tsx (97%) rename src/widgets/{ => home}/Header/Header.scss (98%) rename src/widgets/{ => home}/Header/Header.tsx (71%) rename src/widgets/{ => home}/Header/HeaderLink/HeaderLink.scss (100%) rename src/widgets/{ => home}/Header/HeaderLink/HeaderLink.tsx (65%) rename src/widgets/{ => home}/Header/HeaderLink/icons/arrow-right-circle.svg (100%) rename src/widgets/{ => home}/Header/assets/background.svg (100%) rename src/widgets/{ => home}/MapSection/HomeMap/HomeMap.scss (100%) rename src/widgets/{ => home}/MapSection/HomeMap/HomeMap.tsx (95%) rename src/widgets/{ => home}/MapSection/HomeMap/icons/geo-green.svg (100%) rename src/widgets/{ => home}/MapSection/HomeMap/icons/geo-orange.svg (100%) rename src/widgets/{ => home}/MapSection/HomeMap/icons/geo-pink.svg (100%) rename src/widgets/{ => home}/MapSection/HomeMap/icons/geo-purple.svg (100%) rename src/widgets/{ => home}/MapSection/HomeMap/icons/geo-red.svg (100%) rename src/widgets/{ => home}/MapSection/HomeMap/icons/geo-white.svg (100%) rename src/widgets/{ => home}/MapSection/HomeMap/icons/geo-yellow.svg (100%) rename src/widgets/{ => home}/MapSection/MapSearch/MapSearch.scss (100%) rename src/widgets/{ => home}/MapSection/MapSearch/MapSearch.tsx (92%) rename src/widgets/{ => home}/MapSection/MapSearch/action.ts (100%) rename src/widgets/{ => home}/MapSection/MapSearch/icons/search.svg (100%) rename src/widgets/{ => home}/MapSection/MapSection.scss (100%) rename src/widgets/{ => home}/MapSection/MapSection.tsx (86%) rename src/widgets/{ => home}/MapSection/Switch/Switch.scss (100%) rename src/widgets/{ => home}/MapSection/Switch/Switch.tsx (100%) rename src/widgets/{ => home}/MapSection/mapSectionStore.ts (100%) rename src/widgets/{ => home}/NewsSection/NewsSection.scss (95%) rename src/widgets/{ => home}/NewsSection/NewsSection.tsx (77%) rename src/widgets/{ => home}/NewsSection/icons/arrow-right.svg (100%) rename src/widgets/{ => home}/NewsSection/newsSectionStore.ts (100%) rename src/widgets/{ => home}/RatingSection/RatingSection.scss (98%) rename src/widgets/{ => home}/RatingSection/RatingSection.tsx (85%) rename src/widgets/{ => home}/RatingSection/helpers.ts (69%) rename src/widgets/{ => home}/RatingSection/icons/like.svg (100%) rename src/widgets/{ => home}/RatingSection/icons/message.svg (100%) rename src/widgets/{ => home}/RatingSection/ratingSectionStore.ts (100%) rename src/widgets/{ => home}/StatisticsSection/StatisticsSection.scss (95%) rename src/widgets/{ => home}/StatisticsSection/StatisticsSection.tsx (68%) create mode 100644 src/widgets/report-details/ReportImages/ReportImages.scss create mode 100644 src/widgets/report-details/ReportImages/ReportImages.tsx rename src/{app/report/[id]/ReportDetails.scss => widgets/report-details/ReportInformation/ReportInformation.scss} (62%) create mode 100644 src/widgets/report-details/ReportInformation/ReportInformation.tsx rename src/{app/report/[id] => widgets/report-details/ReportInformation}/icons/calendar.svg (100%) create mode 100644 src/widgets/report-details/ReportMap/ReportMap.scss create mode 100644 src/widgets/report-details/ReportMap/ReportMap.tsx create mode 100644 src/widgets/report-details/ReportMap/icons/geo-green.svg create mode 100644 src/widgets/report-details/ReportMap/icons/geo-orange.svg create mode 100644 src/widgets/report-details/ReportMap/icons/geo-pink.svg create mode 100644 src/widgets/report-details/ReportMap/icons/geo-purple.svg create mode 100644 src/widgets/report-details/ReportMap/icons/geo-red.svg create mode 100644 src/widgets/report-details/ReportMap/icons/geo-white.svg create mode 100644 src/widgets/report-details/ReportMap/icons/geo-yellow.svg create mode 100644 src/widgets/report-details/reportStore.ts rename src/widgets/{ => tables}/ProfileTable/ProfileTable.scss (100%) rename src/widgets/{ => tables}/ProfileTable/ProfileTable.tsx (98%) rename src/widgets/{ => tables}/ProfileTable/helpers.ts (100%) rename src/widgets/{ => tables}/ProfileTable/profile-reports.store.ts (100%) rename src/widgets/{ => tables}/StatisticsTable/StatisticsTable.scss (100%) rename src/widgets/{ => tables}/StatisticsTable/StatisticsTable.tsx (98%) rename src/widgets/{ => tables}/StatisticsTable/icons/chevron-down.svg (100%) rename src/widgets/{ => tables}/StatisticsTable/statistics.store.ts (100%) rename src/widgets/{ => tables}/VolunteersTable/VolunteersTable.scss (100%) rename src/widgets/{ => tables}/VolunteersTable/VolunteersTable.tsx (91%) rename src/widgets/{ => tables}/VolunteersTable/volunteers.store.ts (100%) diff --git a/lib/next-auth.d.ts b/lib/next-auth.d.ts index eb66a0c..e27115c 100644 --- a/lib/next-auth.d.ts +++ b/lib/next-auth.d.ts @@ -4,7 +4,13 @@ declare module "next-auth" { interface Session { refresh_token: string; access_token: string; - expires_in: string; + expires_in?: string; + } + + interface User { + refresh_token: string; + access_token: string; + expires_in?: string; } } @@ -14,6 +20,6 @@ declare module "next-auth/jwt" { interface JWT { refresh_token: string; access_token: string; - expires_in: string; + expires_in?: string; } } diff --git a/messages/en.json b/messages/en.json new file mode 100644 index 0000000..2dcb808 --- /dev/null +++ b/messages/en.json @@ -0,0 +1,186 @@ +{ + "general": { + "date": "Date", + "address": "Address", + "status": "Status", + "description": "Description", + "reviews": "Reviews", + "rating": "Rating", + "review": "Review", + "write_comment": "Write Comment", + "search": "Search", + "search_for": "Search For", + "city": "City", + "added_roads": "Added Roads", + "broken_roads": "Broken Roads", + "accident_hotspots": "Accident Hotspots", + "local_defects": "Local Defects", + "repair_plans": "Repair Plans", + "repaired": "Repaired", + "fixed_local_defects": "Fixed Local Defects", + "news": "News", + "details": "Details", + "navigation": "Navigation", + "contacts": "Contacts", + "download_our_app": "Download our app", + "back": "Back", + "save": "Save", + "saving": "Saving", + "cancel": "Cancel", + "cancellation": "Cancellation", + "save_changes": "Save Changes", + "send": "Send", + "receive": "Receive", + "delete": "Delete", + "show_on_map": "Show on Map", + "author_of_appeal": "Author of Appeal", + "enter_city": "Enter City", + "page_not_found": "Page Not Found (404)", + "incorrect_address_or_nonexistent_page": "Incorrect Address or Nonexistent Page.", + "home": "Home", + "first_name": "First Name", + "last_name": "Last Name", + "email": "Email" + }, + "navigation": { + "home": "Home", + "about_us": "About Us", + "statistics": "Statistics", + "news": "News", + "volunteers": "Volunteers", + "profile": "Profile", + "login": "Login" + }, + "home": { + "title": "Roads of Kyrgyzstan", + "subtitle": "Let's Make Roads Safe!", + "info": "Current information about the state of roads", + "report_broken_road": "Report Broken Road", + "road_map": "Road Map", + "latest_news": "Stay informed about the latest news on traffic, construction, and events!", + "enter_location": "Enter city, village, or region", + "broken_roads": "Broken road", + "accident_hotspots": "Accident hotspot", + "local_defects": "Local defect", + "repair_plans": "In repair plan", + "repaired": "Repaired", + "fixed_local_defects": "Fixed local defect", + "rating": "Rating", + "road_discussions": "Discussing roads: rating, experience, comfort on the way!", + "enter_address": "Enter address", + "read_more": "Read More" + }, + "about_us": { + "name": "Transparency International-Kyrgyzstan", + "description": "Branch of the international organization Transparency International in the Kyrgyz Republic.", + "mission": "Promoting effective public policy and good governance to prevent corruption and strengthen democracy in the country.", + "goals_and_priorities": { + "anti-corruption_education": "Anti-corruption education of the population, raising public awareness of the importance and significance of the fight against corruption in Kyrgyzstan;", + "study_of_corruption_practices": "Organization of the study of the practice and theory of combating corruption and the participation of civil society structures in Kyrgyzstan and other countries;", + "supporting_citizens_and_organizations": "Assistance to citizens and organizations in the implementation of their constitutional rights and freedoms;", + "international_experience": "Preferential orientation to international experience in reducing corruption, mastering its technologies and resources, as well as involving civil society structures in the international dialogue on combating corruption." + } + }, + "volunteers": { + "activists": "Activists", + "received_votes": "Received Votes", + "left_votes": "Left Votes", + "rating": "Rating" + }, + "profile": { + "personal_cabinet": "Personal Cabinet", + "personal_data": "Personal Data", + "my_appeals": "My Appeals", + "logout": "Logout", + "write_appeal": "Write Appeal", + "profile_photo": "Profile Photo", + "others_identification": "With a profile photo, other people will recognize you, and it will be easier for you to determine which account you logged into.", + "add_profile_photo": "Add Profile Photo", + "profile_photo_updated": "Profile Photo Updated", + "delete": "Delete", + "change": "Change" + }, + "authorization": { + "change_password": "Change Password", + "old_password": "Old Password", + "enter_old_password": "Enter Old Password", + "new_password": "New Password", + "enter_new_password": "Enter New Password", + "confirm_new_password": "Confirm New Password", + "confirm_new_password_prompt": "Please confirm the new password", + "password": "Password", + "forgot_password": "Forgot Password?", + "login": "Login", + "register": "Register", + "sign_in_account": "Sign in to Account", + "enter_credentials": "Please enter your credentials", + "login_via_google": "Login via Google", + "enter_password": "Enter Password", + "password_requirements": "Minimum 8 characters, 1 uppercase letter, and 1 digit", + "no_account_yet": "Don't have an account yet? Register", + "registration": "Registration", + "register_now": "Register Now", + "already_have_account": "Already have an account? Sign in", + "enter_email": "Enter Email", + "enter_email_for_code": "Enter email, and we will send a code to reset the password", + "send_code": "Send Code", + "confirm_code": "Confirm Code", + "enter_code": "Enter Code", + "enter_reset_code": "Enter code to reset and recover the password", + "reset_code": "Reset Code", + "reset_password": "Reset Password", + "check_email": "Check Your Email", + "code_sent_to": "We sent a code to the email name@gmail.com", + "confirmation_code": "Confirmation Code", + "confirm": "Confirm", + "resend_code_in": "Resend Code in", + "resend_code": "Resend Code" + }, + "send_report": { + "how_to_mark_road_section": "How to mark a road section?", + "mark_road_instructions": "Place a pin and start drawing a road section (it can consist of any number of broken lines).", + "remove_segment_instruction": "To remove a segment, click on the points again.", + "add_problem_description": "Add a problem description", + "enter_description": "Enter description", + "add_photos": "Add Photos", + "upload_photos_instructions": "Upload up to 5 photos related to the road you want to mark. Photos will help better understand the problem.", + "attach_file": "Attach File (up to 5 MB)", + "submit_for_moderation": "Submit for Moderation", + "appeal_submitted": "Your appeal has been submitted", + "thanks_for_appeal": "Thank you for your appeal. It is currently under moderation.", + "view_my_appeals": "View My Appeals" + }, + "months": { + "january": "January", + "february": "February", + "march": "March", + "april": "April", + "may": "May", + "june": "June", + "july": "July", + "august": "August", + "september": "September", + "october": "October", + "november": "November", + "december": "December" + }, + "validation_errors": { + "invalid_email_format": "Invalid email format.", + "passwords_do_not_match": "Passwords do not match.", + "required_field_not_filled": "Required field not filled.", + "exceeded_maximum_length": "Exceeded maximum length of the field.", + "login_required_before_commenting": "Please log in or register before leaving a comment.", + "login_required_before_like": "Please log in or register before liking." + }, + "server_errors": { + "invalid_email_or_password": "Invalid email or password.", + "server_error_auth_attempt": "Server error during authentication attempt.", + "login_failed": "Failed to log in. Something went wrong, please try again later.", + "account_already_exists": "An account with this email already exists.", + "account_not_found": "Account not found.", + "invalid_activation_code": "Invalid activation code.", + "invalid_activation_code_reset": "Invalid activation code for reset.", + "invalid_password_reset_code": "Invalid password reset code.", + "invalid_code": "Invalid code." + } +} diff --git a/messages/kg.json b/messages/kg.json new file mode 100644 index 0000000..2f3fe5e --- /dev/null +++ b/messages/kg.json @@ -0,0 +1,186 @@ +{ + "general": { + "date": "Күн", + "address": "Дарек", + "status": "Статус", + "description": "Сүрөт", + "reviews": "Комментарийлер", + "rating": "Рейтинг", + "review": "Комментарий", + "write_comment": "Комментарий жазуу", + "search": "Издөө", + "search_for": "Издөө", + "city": "Шаар", + "added_roads": "Кошулган жолдор", + "broken_roads": "Тас тастаган жолдор", + "accident_hotspots": "Авариялуу жерлер", + "local_defects": "Жерги дефекттер", + "repair_plans": "Түзөө планттары", + "repaired": "Түзөлгөн", + "fixed_local_defects": "Жерги дефекттерди түзөлгөн", + "news": "Жаңылыктар", + "details": "Эчти маалымат", + "navigation": "Навигация", + "contacts": "Контакттар", + "download_our_app": "Биздин приложениямызды жүктөп алыңыз", + "back": "Кайтуу", + "save": "Сактоо", + "saving": "Сакталат", + "cancel": "Жокко чыгаруу", + "cancellation": "Жокко чыгаруу", + "save_changes": "Өзгөртүүлөрдү сактоо", + "send": "Жиберүү", + "receive": "Алуу", + "delete": "Жок кылуу", + "show_on_map": "Картада көрсөтүү", + "author_of_appeal": "Өтүнчүнүн автору", + "enter_city": "Шаарды киргизиңиз", + "page_not_found": "Бет табылган эмес (404)", + "incorrect_address_or_nonexistent_page": "Туура эмес дарек же бет жок", + "home": "Башкы бет", + "first_name": "Аты", + "last_name": "Фамилия", + "email": "Электрондук почта" + }, + "navigation": { + "home": "Башкы бет", + "about_us": "Биз тууралуу", + "statistics": "Статистика", + "news": "Жаңылыктар", + "volunteers": "Волонтёрлер", + "profile": "Профиль", + "login": "Кириш" + }, + "home": { + "title": "Кыргызстандын жолдору", + "subtitle": "Жолдорду бекемделүү жасаңыз!", + "info": "Жолдордун жаңы күйү", + "report_broken_road": "Тас тастаган жолду турганды таратуу", + "road_map": "Жол картасы", + "latest_news": "Трафик, өндүрүү жана тапшыруудагы соңгосу турган жаңылыктардан кабардар болуңуз!", + "enter_location": "Шаар, айыл жана регионду киргизиңиз", + "broken_roads": "Жол кирпич", + "accident_hotspots": "Авариянын жатактоо жерлери", + "local_defects": "Жерги дефект", + "repair_plans": "Тозгоондоо жатактоо планында", + "repaired": "Тозотулду", + "fixed_local_defects": "Тозотулган жерги дефект", + "rating": "Рейтинг", + "road_discussions": "Жолдорду талкуулоо: рейтинг, тажрыйба, жолдоо боюнча комфорт!", + "enter_address": "Даректи киргизиңиз", + "read_more": "Көбүрөөк окуу" + }, + "transparency_international_kyrgyzstan": { + "name": "Транспаренттыктык Интернационал-Кыргызстан", + "description": "Транспаренттыктык Интернационалдын Кыргызстан Республикасы бөлүмү.", + "mission": "Коррупциянын ыкмасы менен демократияны күтүтүп, эффективдүү жамааттык саясат жана жакшы мамлекеттүү башкаруунун бириктирилүү үчүн.", + "goals_and_priorities": { + "anti-corruption_education": "Коррупция менен борбордук бийикти ашуу, Кыргызстанда коррупцияга каршы болгондоо маанилүүдүн жана азаттыктардын маанилүүлүгү үчүн жалпы айткынуу;", + "study_of_corruption_practices": "Коррупцияга каршы борбордукты тартуу жана учуруу теориясы менен, Кыргызстан менен башка өлкөлердеги кызмат көрсөтүүсү үчүн азаттыктыктын долбоорлорун жана каттоого жаткантыруу;", + "supporting_citizens_and_organizations": "Граждандар менен биздин же компаниялардын конституциялык башкаруу менен жандуулаткануу;", + "international_experience": "Коррупциянын аздоого чейинки жыйынтыкты башкаруу үчүн көздөр тартуу, улуттуктары менен биргелеп, коррупцияга каршы көрсөткүчтөрдү мамлекеттик диалогга киргизүү." + } + }, + "volunteers": { + "activists": "Активисттер", + "received_votes": "Алынган баллдар", + "left_votes": "Калган баллдар", + "rating": "Рейтинг" + }, + "profile": { + "personal_cabinet": "Жеке кабинет", + "personal_data": "Жеке дайындар", + "my_appeals": "Менин жардам кылган жалпылыгым", + "logout": "Чыгуу", + "write_appeal": "Жардам кылуу", + "profile_photo": "Профиль сүрөтү", + "others_identification": "Профиль сүрөтү аркылуу башка адамдар сизди танышат, жана сизге кирген аккаунтту тандашуу өттүрүлгөн болот.", + "add_profile_photo": "Профиль сүрөтү кошуу", + "profile_photo_updated": "Профиль сүрөтү жаңыртылды", + "delete": "Жок кылуу", + "change": "Өзгөртүү" + }, + "authorization": { + "change_password": "Сыр сөздү өзгөртүү", + "old_password": "Эски сыр сөз", + "enter_old_password": "Эски сыр сөздү киргизиңиз", + "new_password": "Жаңы сыр сөз", + "enter_new_password": "Жаңы сыр сөздү киргизиңиз", + "confirm_new_password": "Жаңы сыр сөздү растоо", + "confirm_new_password_prompt": "Жаңы сыр сөздү растоо, аны кайра чалыңыз", + "password": "Сыр сөз", + "forgot_password": "Сыр сөздү унуттуңузбу?", + "login": "Кириш", + "register": "Тизмеге кирүү", + "sign_in_account": "Аккаунтка кириңиз", + "enter_credentials": "Киргизген дайындарыңызды киргизиңиз", + "login_via_google": "Google аркылуу кириңиз", + "enter_password": "Сыр сөздү киргизиңиз", + "password_requirements": "Минимум 8 белги, 1 башкы буюк тамга жана 1 сандар", + "no_account_yet": "Өйткені, аккаунт жоок? Тизмеге кирүү", + "registration": "Тизмеге кирүү", + "register_now": "Азыр тизмеге кирүү", + "already_have_account": "Аккаунт бар болсо, кириңиз", + "enter_email": "Электрондук почтаны киргизиңиз", + "enter_email_for_code": "Электрондук почта киргизиңиз, биз сизге сыр сөздү калыпта тапшыруу үчүн код жөнөтөт", + "send_code": "Код жөнөтүү", + "confirm_code": "Кодду растоо", + "enter_code": "Кодду киргизиңиз", + "enter_reset_code": "Сыр сөздү өзгөртүп жаңыртуу үчүн кодду киргизиңиз", + "reset_code": "Сыр сөздү өзгөртүү коду", + "reset_password": "Сыр сөздү өзгөртүү", + "check_email": "Почтаны текшериңиз", + "code_sent_to": "Биз кодду name@gmail.com почтасына жөнөттүк", + "confirmation_code": "Тастыгы код", + "confirm": "Растоо", + "resend_code_in": "Кодду кайталап жөнөтүү", + "resend_code": "Кодду кайталап жөнөтүү" + }, + "send_report": { + "how_to_mark_road_section": "Жол бөлүмүн белгилөө үчүн", + "mark_road_instructions": "Чек салып, жол бөлүмүн белгилөөгө ээсиңиз (ал булактардан турат).", + "remove_segment_instruction": "Жол бөлүмүн каттоо үчүн бир маандын жакшысына басыңыз.", + "add_problem_description": "Проблеманын сүрөтүн кошуңуз", + "enter_description": "Сүрөттөмөнү киргизиңиз", + "add_photos": "Фотографияларды кошуңуз", + "upload_photos_instructions": "Жолдун байланышты 5 фотосун жүктөп алыңыз, анткени жататат жана туура түшүнүүдү макул болот.", + "attach_file": "Файлды тиштөө (5 МБга чейин)", + "submit_for_moderation": "Модерацияга жиберүү", + "appeal_submitted": "Сиздин жалпылыгыңыз жиберилди", + "thanks_for_appeal": "Сиздин жалпылыгыңуз үчүн рахмат. Азырынча аны модерацияда.", + "view_my_appeals": "Менин жалпылыгымдарымды көрүү" + }, + "months": { + "january": "Жанварь", + "february": "Февраль", + "march": "Март", + "april": "Апрель", + "may": "Май", + "june": "Июнь", + "july": "Июль", + "august": "Август", + "september": "Сентябрь", + "october": "Октябрь", + "november": "Ноябрь", + "december": "Декабрь" + }, + "validation_errors": { + "invalid_email_format": "Туура эмес электрондук почта форматы.", + "passwords_do_not_match": "Сыр сөздөрдүн туура келмейт.", + "required_field_not_filled": "Милдеттүү талаа толтурулган жок.", + "exceeded_maximum_length": "Талаанын эң ылдам узундугу өткөнчү болду.", + "login_required_before_commenting": "Комментарий бир ар каайыпты таштоо алганда, ал кайталап киргизиңиз же тизмеге киргизиңиз.", + "login_required_before_like": "Лайк койгондо, кайталап киргизиңиз же тизмеге киргизиңиз керек." + }, + "server_errors": { + "invalid_email_or_password": "Туура эмес почта же сыр сөз.", + "server_error_auth_attempt": "Авторизация учуруу учурастыктан кайталап сервердеги ката.", + "login_failed": "Кирүүгө мүмкүн болгон эмес. Негизги нече кайталап уруксат бериңиз.", + "account_already_exists": "Бул почтага ар бир аккаунт бар.", + "account_not_found": "Аккаунт табылган жок.", + "invalid_activation_code": "Четке калган иштеш коду.", + "invalid_activation_code_reset": "Сыр сөздү калыпта тапшыруу үчүн четке калган иштеш коду.", + "invalid_password_reset_code": "Сыр сөздү өзгөртүү коду четке калган эмес.", + "invalid_code": "Четке калган иштеш коду." + } +} diff --git a/messages/ru.json b/messages/ru.json new file mode 100644 index 0000000..d7f005a --- /dev/null +++ b/messages/ru.json @@ -0,0 +1,186 @@ +{ + "general": { + "date": "Дата", + "address": "Адрес", + "status": "Статус", + "description": "Описание", + "reviews": "Комментарии", + "rating": "Рейтинг", + "review": "Комментарий", + "write_comment": "Написать комментарий", + "search": "Поиск", + "search_for": "Искать", + "city": "Город", + "added_roads": "Добавлено дорог", + "broken_roads": "Разбитых дорог", + "accident_hotspots": "Очагов аварийности", + "local_defects": "Локальных дефектов", + "repair_plans": "В планах ремонта", + "repaired": "Отремонтировано", + "fixed_local_defects": "Локальных дефектов исправлено", + "news": "Новости", + "details": "Подробнее", + "navigation": "Навигация", + "contacts": "Контакты", + "download_our_app": "Скачивай наше приложение", + "back": "Назад", + "save": "Сохранить", + "saving": "Сохранение", + "cancel": "Отменить", + "cancellation": "Отмена", + "save_changes": "Сохранить изменения", + "send": "Отправить", + "receive": "Получить", + "delete": "Удалить", + "show_on_map": "Показать на карте", + "author_of_appeal": "Автор обращения", + "enter_city": "Введите населенный пункт", + "page_not_found": "Страница не найдена (404)", + "incorrect_address_or_nonexistent_page": "Неправильно набран адрес или такой страницы не существует.", + "home": "На главную", + "first_name": "Имя", + "last_name": "Фамилия", + "email": "Электронная почта" + }, + "navigation": { + "home": "Главная", + "about_us": "О нас", + "statistics": "Статистика", + "news": "Новости", + "volunteers": "Волонтеры", + "profile": "Профиль", + "login": "Войти" + }, + "home": { + "title": "Дороги Кыргызстана", + "subtitle": "Сделаем дороги безопасными!", + "info": "Актуальная информация о состоянии дорог", + "report_broken_road": "Отметить разбитую дорогу", + "road_map": "Карта дорог", + "latest_news": "Будьте в курсе последних новостей о дорожном движении, строительствах и мероприятиях!", + "enter_location": "Введите город, село или регион", + "broken_roads": "Разбитая дорога", + "accident_hotspots": "Очаг аварийности", + "local_defects": "Локальный дефект", + "repair_plans": "В плане ремонта", + "repaired": "Отремонтировано", + "fixed_local_defects": "Локальный дефект исправлен", + "rating": "Рейтинг", + "road_discussions": "Обсуждаем дороги: рейтинг, опыт, комфорт в пути!", + "enter_address": "Введите адрес", + "read_more": "Читать" + }, + "about_us": { + "name": "Transparency International-Кыргызстан", + "description": "Филиал международной организации Transparency International в Кыргызской Республике.", + "mission": "Продвижение эффективной общественной политики и надлежащего управления в целях предотвращения коррупции и усиления демократии в стране.", + "goals_and_priorities": { + "anti-corruption_education": "Антикоррупционное просвещение населения, повышение общественного осознания значимости и важности борьбы с коррупцией в Кыргызстане;", + "study_of_corruption_practices": "Организация изучения практики и теории борьбы с коррупцией и участия в ней структур гражданского общества в Кыргызстане и других странах;", + "supporting_citizens_and_organizations": "Содействие гражданам и организациям в реализации их конституционных прав и свобод;", + "international_experience": "Преимущественная ориентация на международный опыт уменьшения коррупции, освоение его технологий, ресурсов, а также включение структур гражданского общества в международный диалог борьбы с коррупцией." + } + }, + "volunteers": { + "activists": "Активисты", + "received_votes": "Получено голосов", + "left_votes": "Оставлено голосов", + "rating": "Рейтинг" + }, + "profile": { + "personal_cabinet": "Личный кабинет", + "personal_data": "Личные данные", + "my_appeals": "Мои обращения", + "logout": "Выйти из аккаунта", + "write_appeal": "Написать обращение", + "profile_photo": "Фото профиля", + "others_identification": "По фото профиля другие люди смогут вас узнавать, а вам будет проще определять, в какой аккаунт вы вошли.", + "add_profile_photo": "Добавить фото профиля", + "profile_photo_updated": "Фото профиля обновлено", + "delete": "Удалить", + "change": "Сменить" + }, + "authorization": { + "change_password": "Изменить пароль", + "old_password": "Старый пароль", + "enter_old_password": "Введите старый пароль", + "new_password": "Новый пароль", + "enter_new_password": "Введите новый пароль", + "confirm_new_password": "Подтвердить новый пароль", + "confirm_new_password_prompt": "Пожалуйста, подтвердите новый пароль", + "password": "Пароль", + "forgot_password": "Забыли пароль?", + "login": "Войти", + "register": "Зарегистрироваться", + "sign_in_account": "Войдите в аккаунт", + "enter_credentials": "Пожалуйста, введите свои данные", + "login_via_google": "Войти через Google", + "enter_password": "Введите пароль", + "password_requirements": "Минимум 8 символов, 1 заглавная буква и цифра", + "no_account_yet": "Еще нет аккаунта? Зарегистрируйтесь", + "registration": "Регистрация", + "register_now": "Зарегистрировать", + "already_have_account": "Уже есть аккаунт? Войти в аккаунт", + "enter_email": "Введите электронную почту", + "enter_email_for_code": "Введите электронную почту и мы отправим код для восстановления пароля", + "send_code": "Отправить код", + "confirm_code": "Потвердить код", + "enter_code": "Введите код", + "enter_reset_code": "Введите код для сброса и восстановления пароля", + "reset_code": "Код сброса пароля", + "reset_password": "Сбросить пароль", + "check_email": "Проверьте свою почту", + "code_sent_to": "Мы отправили код на почту name@gmail.com", + "confirmation_code": "Код подтверждения", + "confirm": "Подтвердить", + "resend_code_in": "Отправить код повторно через", + "resend_code": "Отправить код повторно" + }, + "send_report": { + "how_to_mark_road_section": "Как отметить участок дороги?", + "mark_road_instructions": "Поставьте булавку и начните рисовать участок дороги (он может состоять из любого количества ломаных линий).", + "remove_segment_instruction": "Чтобы удалить отрезок, нажмите на точки повторно.", + "add_problem_description": "Добавьте описание проблемы", + "enter_description": "Введите описание", + "add_photos": "Добавьте фотографии", + "upload_photos_instructions": "Загрузите до 5 фотографий, связанных с дорогой, которую вы хотите отметить. Фотографии помогут лучше понять проблему.", + "attach_file": "Прикрепить файл (до 5 МБ)", + "submit_for_moderation": "Отправить на модерацию", + "appeal_submitted": "Ваше обращение отправлено", + "thanks_for_appeal": "Спасибо за ваше обращение. На данный момент оно в модерации.", + "view_my_appeals": "Смотреть мои обращения" + }, + "months": { + "january": "Январь", + "february": "Февраль", + "march": "Март", + "april": "Апрель", + "may": "Май", + "june": "Июнь", + "july": "Июль", + "august": "Август", + "september": "Сентябрь", + "october": "Октябрь", + "november": "Ноябрь", + "december": "Декабрь" + }, + "validation_errors": { + "invalid_email_format": "Неверный формат электронной почты.", + "passwords_do_not_match": "Пароли не совпадают.", + "required_field_not_filled": "Обязательное поле не заполнено.", + "exceeded_maximum_length": "Превышена максимальная длина поля.", + "login_required_before_commenting": "Перед тем как оставить комментарий, пожалуйста, войдите или зарегистрируйтесь.", + "login_required_before_like": "Перед тем как поставить лайк, пожалуйста, войдите или зарегистрируйтесь." + }, + "server_errors": { + "invalid_email_or_password": "Неверная почта или пароль.", + "server_error_auth_attempt": "Серверная ошибка при попытке авторизации.", + "login_failed": "Не удалось войти в систему. Что-то пошло не так, попробуйте еще раз немного позже.", + "account_already_exists": "Такая учетная запись уже существует.", + "account_not_found": "Такой учетной записи не существует.", + "invalid_activation_code": "Код не действителен.", + "invalid_activation_code_reset": "Код активации не действителен.", + "invalid_password_reset_code": "Код сброса пароля не действителен.", + "invalid_code": "Неверный код." + } +} diff --git a/next.config.mjs b/next.config.mjs index 22adadb..b7e04b8 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -1,3 +1,6 @@ +import createNextIntlPlugin from "next-intl/plugin"; +const withNextIntl = createNextIntlPlugin(); + /** @type {import('next').NextConfig} */ const nextConfig = { distDir: "build", @@ -9,6 +12,10 @@ const nextConfig = { }, ], }, + env: { + CLIENT_ID: process.env.CLIENT_ID, + CLIENT_SECRET: process.env.CLIENT_SECRET, + }, }; -export default nextConfig; +export default withNextIntl(nextConfig); diff --git a/package.json b/package.json index f2aae33..68649ef 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "leaflet": "^1.9.4", "next": "14.1.0", "next-auth": "^4.24.5", + "next-intl": "^3.9.0", "react": "^18", "react-dom": "^18", "react-leaflet": "^4.2.1", diff --git a/src/app/App.scss b/src/app/[locale]/App.scss similarity index 100% rename from src/app/App.scss rename to src/app/[locale]/App.scss diff --git a/src/app/Providers.tsx b/src/app/[locale]/Providers.tsx similarity index 100% rename from src/app/Providers.tsx rename to src/app/[locale]/Providers.tsx diff --git a/src/app/about-us/AboutUs.scss b/src/app/[locale]/about-us/AboutUs.scss similarity index 100% rename from src/app/about-us/AboutUs.scss rename to src/app/[locale]/about-us/AboutUs.scss diff --git a/src/app/about-us/assets/header.svg b/src/app/[locale]/about-us/assets/header.svg similarity index 100% rename from src/app/about-us/assets/header.svg rename to src/app/[locale]/about-us/assets/header.svg diff --git a/src/app/about-us/page.tsx b/src/app/[locale]/about-us/page.tsx similarity index 100% rename from src/app/about-us/page.tsx rename to src/app/[locale]/about-us/page.tsx diff --git a/src/app/create-report/CreateReport.scss b/src/app/[locale]/create-report/CreateReport.scss similarity index 100% rename from src/app/create-report/CreateReport.scss rename to src/app/[locale]/create-report/CreateReport.scss diff --git a/src/app/create-report/page.tsx b/src/app/[locale]/create-report/page.tsx similarity index 92% rename from src/app/create-report/page.tsx rename to src/app/[locale]/create-report/page.tsx index 6dfba99..3bb680f 100644 --- a/src/app/create-report/page.tsx +++ b/src/app/[locale]/create-report/page.tsx @@ -10,7 +10,7 @@ export const metadata: Metadata = { }; const DynamicForm = dynamic( - () => import("@/widgets/ReportForm/ReportForm"), + () => import("@/widgets/forms/ReportForm/ReportForm"), { ssr: false, } diff --git a/src/app/globals.scss b/src/app/[locale]/globals.scss similarity index 100% rename from src/app/globals.scss rename to src/app/[locale]/globals.scss diff --git a/src/app/[locale]/layout.tsx b/src/app/[locale]/layout.tsx new file mode 100644 index 0000000..95ab16d --- /dev/null +++ b/src/app/[locale]/layout.tsx @@ -0,0 +1,34 @@ +import type { Metadata } from "next"; +import "./globals.scss"; +import "./App.scss"; +// import "@/shared/fonts/fonts.scss"; +import Navbar from "@/widgets/Navbar/Navbar"; +import Footer from "@/widgets/Footer/Footer"; +import { NextIntlClientProvider, useMessages } from "next-intl"; +import { Providers } from "./Providers"; + +export default function LocaleLayout({ + children, + params, +}: Readonly<{ + children: React.ReactNode; + params: { locale: string }; +}>) { + const messages = useMessages(); + return ( + + + + + +
{children}
+