diff --git a/README.md b/README.md
index de10730..c500089 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# Money Controll Frontend SPA
***
-### Application to control your income and outcome money, planning your personal budget
+### Application path control your income and outcome money, planning your personal budget
### Scripts
- `start:dev` - start local application on [`https://localhost:3000`](https://localhost:3000)
diff --git a/offline_node_modules/@babel-helper-module-imports-npm-7.24.6-be1121ea22-e0db3fbfcd.zip b/offline_node_modules/@babel-helper-module-imports-npm-7.24.6-be1121ea22-e0db3fbfcd.zip
new file mode 100644
index 0000000..8745186
Binary files /dev/null and b/offline_node_modules/@babel-helper-module-imports-npm-7.24.6-be1121ea22-e0db3fbfcd.zip differ
diff --git a/offline_node_modules/@babel-helper-string-parser-npm-7.24.6-ab02401caf-95115bf676.zip b/offline_node_modules/@babel-helper-string-parser-npm-7.24.6-ab02401caf-95115bf676.zip
new file mode 100644
index 0000000..295472e
Binary files /dev/null and b/offline_node_modules/@babel-helper-string-parser-npm-7.24.6-ab02401caf-95115bf676.zip differ
diff --git a/offline_node_modules/@babel-helper-validator-identifier-npm-7.24.6-cf629561b7-d29d2e3fca.zip b/offline_node_modules/@babel-helper-validator-identifier-npm-7.24.6-cf629561b7-d29d2e3fca.zip
new file mode 100644
index 0000000..362f7c8
Binary files /dev/null and b/offline_node_modules/@babel-helper-validator-identifier-npm-7.24.6-cf629561b7-d29d2e3fca.zip differ
diff --git a/offline_node_modules/@babel-runtime-npm-7.24.6-3acd4a9fd9-224ad205de.zip b/offline_node_modules/@babel-runtime-npm-7.24.6-3acd4a9fd9-224ad205de.zip
new file mode 100644
index 0000000..ee53d2f
Binary files /dev/null and b/offline_node_modules/@babel-runtime-npm-7.24.6-3acd4a9fd9-224ad205de.zip differ
diff --git a/offline_node_modules/@babel-types-npm-7.24.6-5a7d5202c4-1d94d92d97.zip b/offline_node_modules/@babel-types-npm-7.24.6-5a7d5202c4-1d94d92d97.zip
new file mode 100644
index 0000000..18bff25
Binary files /dev/null and b/offline_node_modules/@babel-types-npm-7.24.6-5a7d5202c4-1d94d92d97.zip differ
diff --git a/offline_node_modules/@emotion-babel-plugin-npm-11.11.0-c1dcc4c884-89cbb6ec0e.zip b/offline_node_modules/@emotion-babel-plugin-npm-11.11.0-c1dcc4c884-89cbb6ec0e.zip
new file mode 100644
index 0000000..004b256
Binary files /dev/null and b/offline_node_modules/@emotion-babel-plugin-npm-11.11.0-c1dcc4c884-89cbb6ec0e.zip differ
diff --git a/offline_node_modules/@emotion-cache-npm-11.11.0-3e6e449071-a23ab5ab2f.zip b/offline_node_modules/@emotion-cache-npm-11.11.0-3e6e449071-a23ab5ab2f.zip
new file mode 100644
index 0000000..46e3081
Binary files /dev/null and b/offline_node_modules/@emotion-cache-npm-11.11.0-3e6e449071-a23ab5ab2f.zip differ
diff --git a/offline_node_modules/@emotion-hash-npm-0.9.1-650576c2b1-cdafe5da63.zip b/offline_node_modules/@emotion-hash-npm-0.9.1-650576c2b1-cdafe5da63.zip
new file mode 100644
index 0000000..1d6ac5c
Binary files /dev/null and b/offline_node_modules/@emotion-hash-npm-0.9.1-650576c2b1-cdafe5da63.zip differ
diff --git a/offline_node_modules/@emotion-is-prop-valid-npm-1.2.2-53f93f2b2d-bb1530dcb4.zip b/offline_node_modules/@emotion-is-prop-valid-npm-1.2.2-53f93f2b2d-bb1530dcb4.zip
new file mode 100644
index 0000000..d9ebde6
Binary files /dev/null and b/offline_node_modules/@emotion-is-prop-valid-npm-1.2.2-53f93f2b2d-bb1530dcb4.zip differ
diff --git a/offline_node_modules/@emotion-memoize-npm-0.8.1-9b1e35ff15-dffed372fc.zip b/offline_node_modules/@emotion-memoize-npm-0.8.1-9b1e35ff15-dffed372fc.zip
new file mode 100644
index 0000000..320c9e5
Binary files /dev/null and b/offline_node_modules/@emotion-memoize-npm-0.8.1-9b1e35ff15-dffed372fc.zip differ
diff --git a/offline_node_modules/@emotion-react-npm-11.11.4-52eda8b8fe-6df892fd9e.zip b/offline_node_modules/@emotion-react-npm-11.11.4-52eda8b8fe-6df892fd9e.zip
new file mode 100644
index 0000000..2a9625a
Binary files /dev/null and b/offline_node_modules/@emotion-react-npm-11.11.4-52eda8b8fe-6df892fd9e.zip differ
diff --git a/offline_node_modules/@emotion-serialize-npm-1.1.4-5b0b39d76a-164d936f72.zip b/offline_node_modules/@emotion-serialize-npm-1.1.4-5b0b39d76a-164d936f72.zip
new file mode 100644
index 0000000..374ac7f
Binary files /dev/null and b/offline_node_modules/@emotion-serialize-npm-1.1.4-5b0b39d76a-164d936f72.zip differ
diff --git a/offline_node_modules/@emotion-sheet-npm-1.2.2-a918ac483c-69827a1bfa.zip b/offline_node_modules/@emotion-sheet-npm-1.2.2-a918ac483c-69827a1bfa.zip
new file mode 100644
index 0000000..8874796
Binary files /dev/null and b/offline_node_modules/@emotion-sheet-npm-1.2.2-a918ac483c-69827a1bfa.zip differ
diff --git a/offline_node_modules/@emotion-styled-npm-11.11.5-f6c8a45c9e-27da6ad7f5.zip b/offline_node_modules/@emotion-styled-npm-11.11.5-f6c8a45c9e-27da6ad7f5.zip
new file mode 100644
index 0000000..f2f6edb
Binary files /dev/null and b/offline_node_modules/@emotion-styled-npm-11.11.5-f6c8a45c9e-27da6ad7f5.zip differ
diff --git a/offline_node_modules/@emotion-unitless-npm-0.8.1-bcf0a8f565-a1ed508628.zip b/offline_node_modules/@emotion-unitless-npm-0.8.1-bcf0a8f565-a1ed508628.zip
new file mode 100644
index 0000000..901cf6f
Binary files /dev/null and b/offline_node_modules/@emotion-unitless-npm-0.8.1-bcf0a8f565-a1ed508628.zip differ
diff --git a/offline_node_modules/@emotion-use-insertion-effect-with-fallbacks-npm-1.0.1-730758c66c-a15b216794.zip b/offline_node_modules/@emotion-use-insertion-effect-with-fallbacks-npm-1.0.1-730758c66c-a15b216794.zip
new file mode 100644
index 0000000..9620474
Binary files /dev/null and b/offline_node_modules/@emotion-use-insertion-effect-with-fallbacks-npm-1.0.1-730758c66c-a15b216794.zip differ
diff --git a/offline_node_modules/@emotion-utils-npm-1.2.1-3d04f99348-db43ca8033.zip b/offline_node_modules/@emotion-utils-npm-1.2.1-3d04f99348-db43ca8033.zip
new file mode 100644
index 0000000..f0569e8
Binary files /dev/null and b/offline_node_modules/@emotion-utils-npm-1.2.1-3d04f99348-db43ca8033.zip differ
diff --git a/offline_node_modules/@emotion-weak-memoize-npm-0.3.1-bfc18213af-ed514b3cb9.zip b/offline_node_modules/@emotion-weak-memoize-npm-0.3.1-bfc18213af-ed514b3cb9.zip
new file mode 100644
index 0000000..68a7fa3
Binary files /dev/null and b/offline_node_modules/@emotion-weak-memoize-npm-0.3.1-bfc18213af-ed514b3cb9.zip differ
diff --git a/offline_node_modules/@floating-ui-core-npm-1.6.2-83764613ea-db2621dc68.zip b/offline_node_modules/@floating-ui-core-npm-1.6.2-83764613ea-db2621dc68.zip
new file mode 100644
index 0000000..21bb2bf
Binary files /dev/null and b/offline_node_modules/@floating-ui-core-npm-1.6.2-83764613ea-db2621dc68.zip differ
diff --git a/offline_node_modules/@floating-ui-dom-npm-1.6.5-42fe2aed4f-ebdc14806f.zip b/offline_node_modules/@floating-ui-dom-npm-1.6.5-42fe2aed4f-ebdc14806f.zip
new file mode 100644
index 0000000..7c0e668
Binary files /dev/null and b/offline_node_modules/@floating-ui-dom-npm-1.6.5-42fe2aed4f-ebdc14806f.zip differ
diff --git a/offline_node_modules/@floating-ui-react-dom-npm-2.1.0-6bd6adf553-9ee44dfeb2.zip b/offline_node_modules/@floating-ui-react-dom-npm-2.1.0-6bd6adf553-9ee44dfeb2.zip
new file mode 100644
index 0000000..811b3f4
Binary files /dev/null and b/offline_node_modules/@floating-ui-react-dom-npm-2.1.0-6bd6adf553-9ee44dfeb2.zip differ
diff --git a/offline_node_modules/@floating-ui-utils-npm-0.2.2-86598cb25a-b2becdcafd.zip b/offline_node_modules/@floating-ui-utils-npm-0.2.2-86598cb25a-b2becdcafd.zip
new file mode 100644
index 0000000..00bbb4a
Binary files /dev/null and b/offline_node_modules/@floating-ui-utils-npm-0.2.2-86598cb25a-b2becdcafd.zip differ
diff --git a/offline_node_modules/@mui-base-npm-5.0.0-beta.40-248417914d-631b4ee389.zip b/offline_node_modules/@mui-base-npm-5.0.0-beta.40-248417914d-631b4ee389.zip
new file mode 100644
index 0000000..16dc1bd
Binary files /dev/null and b/offline_node_modules/@mui-base-npm-5.0.0-beta.40-248417914d-631b4ee389.zip differ
diff --git a/offline_node_modules/@mui-core-downloads-tracker-npm-5.15.19-9ed77064af-90cd3eb953.zip b/offline_node_modules/@mui-core-downloads-tracker-npm-5.15.19-9ed77064af-90cd3eb953.zip
new file mode 100644
index 0000000..f1f83f7
Binary files /dev/null and b/offline_node_modules/@mui-core-downloads-tracker-npm-5.15.19-9ed77064af-90cd3eb953.zip differ
diff --git a/offline_node_modules/@mui-icons-material-npm-5.15.19-15b122e6ba-f2a4381b6a.zip b/offline_node_modules/@mui-icons-material-npm-5.15.19-15b122e6ba-f2a4381b6a.zip
new file mode 100644
index 0000000..d8db646
Binary files /dev/null and b/offline_node_modules/@mui-icons-material-npm-5.15.19-15b122e6ba-f2a4381b6a.zip differ
diff --git a/offline_node_modules/@mui-material-npm-5.15.19-5d6fd3466f-388eb14bed.zip b/offline_node_modules/@mui-material-npm-5.15.19-5d6fd3466f-388eb14bed.zip
new file mode 100644
index 0000000..a199789
Binary files /dev/null and b/offline_node_modules/@mui-material-npm-5.15.19-5d6fd3466f-388eb14bed.zip differ
diff --git a/offline_node_modules/@mui-private-theming-npm-5.15.14-da7d55aa3f-2888950587.zip b/offline_node_modules/@mui-private-theming-npm-5.15.14-da7d55aa3f-2888950587.zip
new file mode 100644
index 0000000..85eb474
Binary files /dev/null and b/offline_node_modules/@mui-private-theming-npm-5.15.14-da7d55aa3f-2888950587.zip differ
diff --git a/offline_node_modules/@mui-styled-engine-npm-5.15.14-f2c4d6b014-0d262ea0b3.zip b/offline_node_modules/@mui-styled-engine-npm-5.15.14-f2c4d6b014-0d262ea0b3.zip
new file mode 100644
index 0000000..0961006
Binary files /dev/null and b/offline_node_modules/@mui-styled-engine-npm-5.15.14-f2c4d6b014-0d262ea0b3.zip differ
diff --git a/offline_node_modules/@mui-system-npm-5.15.15-c000fc1ae9-80724377ee.zip b/offline_node_modules/@mui-system-npm-5.15.15-c000fc1ae9-80724377ee.zip
new file mode 100644
index 0000000..448b4ac
Binary files /dev/null and b/offline_node_modules/@mui-system-npm-5.15.15-c000fc1ae9-80724377ee.zip differ
diff --git a/offline_node_modules/@mui-types-npm-7.2.14-c3027ebada-d4e0a9fce4.zip b/offline_node_modules/@mui-types-npm-7.2.14-c3027ebada-d4e0a9fce4.zip
new file mode 100644
index 0000000..10ab908
Binary files /dev/null and b/offline_node_modules/@mui-types-npm-7.2.14-c3027ebada-d4e0a9fce4.zip differ
diff --git a/offline_node_modules/@mui-utils-npm-5.15.14-0912681c9c-3626598847.zip b/offline_node_modules/@mui-utils-npm-5.15.14-0912681c9c-3626598847.zip
new file mode 100644
index 0000000..21a967d
Binary files /dev/null and b/offline_node_modules/@mui-utils-npm-5.15.14-0912681c9c-3626598847.zip differ
diff --git a/offline_node_modules/@popperjs-core-npm-2.11.8-f1692e11a0-4681e682ab.zip b/offline_node_modules/@popperjs-core-npm-2.11.8-f1692e11a0-4681e682ab.zip
new file mode 100644
index 0000000..c1f1984
Binary files /dev/null and b/offline_node_modules/@popperjs-core-npm-2.11.8-f1692e11a0-4681e682ab.zip differ
diff --git a/offline_node_modules/@types-parse-json-npm-4.0.2-f87f65692e-b1b863ac34.zip b/offline_node_modules/@types-parse-json-npm-4.0.2-f87f65692e-b1b863ac34.zip
new file mode 100644
index 0000000..e253df9
Binary files /dev/null and b/offline_node_modules/@types-parse-json-npm-4.0.2-f87f65692e-b1b863ac34.zip differ
diff --git a/offline_node_modules/@types-react-transition-group-npm-4.4.10-5e11bed850-3eb9bca143.zip b/offline_node_modules/@types-react-transition-group-npm-4.4.10-5e11bed850-3eb9bca143.zip
new file mode 100644
index 0000000..cfa4d40
Binary files /dev/null and b/offline_node_modules/@types-react-transition-group-npm-4.4.10-5e11bed850-3eb9bca143.zip differ
diff --git a/offline_node_modules/babel-plugin-macros-npm-3.1.0-320e781f4e-c6dfb15de9.zip b/offline_node_modules/babel-plugin-macros-npm-3.1.0-320e781f4e-c6dfb15de9.zip
new file mode 100644
index 0000000..33d9d61
Binary files /dev/null and b/offline_node_modules/babel-plugin-macros-npm-3.1.0-320e781f4e-c6dfb15de9.zip differ
diff --git a/offline_node_modules/clsx-npm-2.1.1-96125b98be-c4c8eb865f.zip b/offline_node_modules/clsx-npm-2.1.1-96125b98be-c4c8eb865f.zip
new file mode 100644
index 0000000..abdbd53
Binary files /dev/null and b/offline_node_modules/clsx-npm-2.1.1-96125b98be-c4c8eb865f.zip differ
diff --git a/offline_node_modules/convert-source-map-npm-1.9.0-e294555f4b-281da55454.zip b/offline_node_modules/convert-source-map-npm-1.9.0-e294555f4b-281da55454.zip
new file mode 100644
index 0000000..74fd0cd
Binary files /dev/null and b/offline_node_modules/convert-source-map-npm-1.9.0-e294555f4b-281da55454.zip differ
diff --git a/offline_node_modules/cosmiconfig-npm-7.1.0-13a5090bcd-b923ff6af5.zip b/offline_node_modules/cosmiconfig-npm-7.1.0-13a5090bcd-b923ff6af5.zip
new file mode 100644
index 0000000..9880df8
Binary files /dev/null and b/offline_node_modules/cosmiconfig-npm-7.1.0-13a5090bcd-b923ff6af5.zip differ
diff --git a/offline_node_modules/dom-helpers-npm-5.2.1-b38bb4470b-f735074d66.zip b/offline_node_modules/dom-helpers-npm-5.2.1-b38bb4470b-f735074d66.zip
new file mode 100644
index 0000000..36972d0
Binary files /dev/null and b/offline_node_modules/dom-helpers-npm-5.2.1-b38bb4470b-f735074d66.zip differ
diff --git a/offline_node_modules/normalize.css-npm-8.0.1-6124fb39b6-4ddf56d1af.zip b/offline_node_modules/normalize.css-npm-8.0.1-6124fb39b6-4ddf56d1af.zip
deleted file mode 100644
index a1cdce1..0000000
Binary files a/offline_node_modules/normalize.css-npm-8.0.1-6124fb39b6-4ddf56d1af.zip and /dev/null differ
diff --git a/offline_node_modules/react-is-npm-18.3.1-370a81e1e9-f2f1e60010.zip b/offline_node_modules/react-is-npm-18.3.1-370a81e1e9-f2f1e60010.zip
new file mode 100644
index 0000000..c79d786
Binary files /dev/null and b/offline_node_modules/react-is-npm-18.3.1-370a81e1e9-f2f1e60010.zip differ
diff --git a/offline_node_modules/react-transition-group-npm-4.4.5-98ea4ef96e-2ba754ba74.zip b/offline_node_modules/react-transition-group-npm-4.4.5-98ea4ef96e-2ba754ba74.zip
new file mode 100644
index 0000000..815053a
Binary files /dev/null and b/offline_node_modules/react-transition-group-npm-4.4.5-98ea4ef96e-2ba754ba74.zip differ
diff --git a/offline_node_modules/source-map-npm-0.5.7-7c3f035429-904e767bb9.zip b/offline_node_modules/source-map-npm-0.5.7-7c3f035429-904e767bb9.zip
new file mode 100644
index 0000000..10ebd60
Binary files /dev/null and b/offline_node_modules/source-map-npm-0.5.7-7c3f035429-904e767bb9.zip differ
diff --git a/offline_node_modules/stylis-npm-4.2.0-6b07f11c99-a7128ad5a8.zip b/offline_node_modules/stylis-npm-4.2.0-6b07f11c99-a7128ad5a8.zip
new file mode 100644
index 0000000..7e48d6e
Binary files /dev/null and b/offline_node_modules/stylis-npm-4.2.0-6b07f11c99-a7128ad5a8.zip differ
diff --git a/offline_node_modules/yaml-npm-1.10.2-0e780aebdf-5c28b9eb7a.zip b/offline_node_modules/yaml-npm-1.10.2-0e780aebdf-5c28b9eb7a.zip
new file mode 100644
index 0000000..b7ec99f
Binary files /dev/null and b/offline_node_modules/yaml-npm-1.10.2-0e780aebdf-5c28b9eb7a.zip differ
diff --git a/package.json b/package.json
index 7bdac98..adaced8 100644
--- a/package.json
+++ b/package.json
@@ -31,8 +31,11 @@
},
"homepage": "https://gitlab.com/money-control2/web/frontend#readme",
"dependencies": {
+ "@emotion/react": "11.11.4",
+ "@emotion/styled": "11.11.5",
+ "@mui/icons-material": "^5.15.19",
+ "@mui/material": "5.15.19",
"classnames": "2.5.1",
- "normalize.css": "8.0.1",
"prop-types": "15.8.1",
"react": "18.3.1",
"react-dnd": "16.0.1",
@@ -59,6 +62,5 @@
"standard-version": "9.5.0",
"ts-jest": "29.1.4",
"typescript": "5.4.5"
- },
- "packageManager": "yarn@4.1.1"
+ }
}
diff --git a/public/assets/fonts/Comfortaa/comfortaa-cyrillic-300-normal.woff2 b/public/assets/fonts/Comfortaa/comfortaa-cyrillic-300-normal.woff2
new file mode 100644
index 0000000..1a7fcbc
Binary files /dev/null and b/public/assets/fonts/Comfortaa/comfortaa-cyrillic-300-normal.woff2 differ
diff --git a/public/assets/fonts/Comfortaa/comfortaa-cyrillic-400-normal.woff2 b/public/assets/fonts/Comfortaa/comfortaa-cyrillic-400-normal.woff2
new file mode 100644
index 0000000..bea01fe
Binary files /dev/null and b/public/assets/fonts/Comfortaa/comfortaa-cyrillic-400-normal.woff2 differ
diff --git a/public/assets/fonts/Comfortaa/comfortaa-cyrillic-500-normal.woff2 b/public/assets/fonts/Comfortaa/comfortaa-cyrillic-500-normal.woff2
new file mode 100644
index 0000000..c120a82
Binary files /dev/null and b/public/assets/fonts/Comfortaa/comfortaa-cyrillic-500-normal.woff2 differ
diff --git a/public/assets/fonts/Comfortaa/comfortaa-cyrillic-600-normal.woff2 b/public/assets/fonts/Comfortaa/comfortaa-cyrillic-600-normal.woff2
new file mode 100644
index 0000000..c3902ea
Binary files /dev/null and b/public/assets/fonts/Comfortaa/comfortaa-cyrillic-600-normal.woff2 differ
diff --git a/public/assets/fonts/Comfortaa/comfortaa-cyrillic-700-normal.woff2 b/public/assets/fonts/Comfortaa/comfortaa-cyrillic-700-normal.woff2
new file mode 100644
index 0000000..41d58aa
Binary files /dev/null and b/public/assets/fonts/Comfortaa/comfortaa-cyrillic-700-normal.woff2 differ
diff --git a/public/assets/fonts/Comfortaa/comfortaa-latin-300-normal.woff2 b/public/assets/fonts/Comfortaa/comfortaa-latin-300-normal.woff2
new file mode 100644
index 0000000..7fb6941
Binary files /dev/null and b/public/assets/fonts/Comfortaa/comfortaa-latin-300-normal.woff2 differ
diff --git a/public/assets/fonts/Comfortaa/comfortaa-latin-400-normal.woff2 b/public/assets/fonts/Comfortaa/comfortaa-latin-400-normal.woff2
new file mode 100644
index 0000000..7740306
Binary files /dev/null and b/public/assets/fonts/Comfortaa/comfortaa-latin-400-normal.woff2 differ
diff --git a/public/assets/fonts/Comfortaa/comfortaa-latin-500-normal.woff2 b/public/assets/fonts/Comfortaa/comfortaa-latin-500-normal.woff2
new file mode 100644
index 0000000..ed2adf8
Binary files /dev/null and b/public/assets/fonts/Comfortaa/comfortaa-latin-500-normal.woff2 differ
diff --git a/public/assets/fonts/Comfortaa/comfortaa-latin-600-normal.woff2 b/public/assets/fonts/Comfortaa/comfortaa-latin-600-normal.woff2
new file mode 100644
index 0000000..25c1d63
Binary files /dev/null and b/public/assets/fonts/Comfortaa/comfortaa-latin-600-normal.woff2 differ
diff --git a/public/assets/fonts/Comfortaa/comfortaa-latin-700-normal.woff2 b/public/assets/fonts/Comfortaa/comfortaa-latin-700-normal.woff2
new file mode 100644
index 0000000..8cb8b14
Binary files /dev/null and b/public/assets/fonts/Comfortaa/comfortaa-latin-700-normal.woff2 differ
diff --git a/public/assets/fonts/Roboto/roboto-cyrillic-100-italic.woff2 b/public/assets/fonts/Roboto/roboto-cyrillic-100-italic.woff2
new file mode 100644
index 0000000..18c3f12
Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-cyrillic-100-italic.woff2 differ
diff --git a/public/assets/fonts/Roboto/roboto-cyrillic-100-normal.woff2 b/public/assets/fonts/Roboto/roboto-cyrillic-100-normal.woff2
new file mode 100644
index 0000000..122ac2c
Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-cyrillic-100-normal.woff2 differ
diff --git a/public/assets/fonts/Roboto/roboto-cyrillic-300-italic.woff2 b/public/assets/fonts/Roboto/roboto-cyrillic-300-italic.woff2
new file mode 100644
index 0000000..943c5a0
Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-cyrillic-300-italic.woff2 differ
diff --git a/public/assets/fonts/Roboto/roboto-cyrillic-300-normal.woff2 b/public/assets/fonts/Roboto/roboto-cyrillic-300-normal.woff2
new file mode 100644
index 0000000..9d7fb7f
Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-cyrillic-300-normal.woff2 differ
diff --git a/public/assets/fonts/Roboto/roboto-cyrillic-400-italic.woff2 b/public/assets/fonts/Roboto/roboto-cyrillic-400-italic.woff2
new file mode 100644
index 0000000..dd587a2
Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-cyrillic-400-italic.woff2 differ
diff --git a/public/assets/fonts/Roboto/roboto-cyrillic-400-normal.woff2 b/public/assets/fonts/Roboto/roboto-cyrillic-400-normal.woff2
new file mode 100644
index 0000000..47da362
Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-cyrillic-400-normal.woff2 differ
diff --git a/public/assets/fonts/Roboto/roboto-cyrillic-500-italic.woff2 b/public/assets/fonts/Roboto/roboto-cyrillic-500-italic.woff2
new file mode 100644
index 0000000..cbe564b
Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-cyrillic-500-italic.woff2 differ
diff --git a/public/assets/fonts/Roboto/roboto-cyrillic-500-normal.woff2 b/public/assets/fonts/Roboto/roboto-cyrillic-500-normal.woff2
new file mode 100644
index 0000000..cb5834f
Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-cyrillic-500-normal.woff2 differ
diff --git a/public/assets/fonts/Roboto/roboto-cyrillic-700-italic.woff2 b/public/assets/fonts/Roboto/roboto-cyrillic-700-italic.woff2
new file mode 100644
index 0000000..d2f30b5
Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-cyrillic-700-italic.woff2 differ
diff --git a/public/assets/fonts/Roboto/roboto-cyrillic-700-normal.woff2 b/public/assets/fonts/Roboto/roboto-cyrillic-700-normal.woff2
new file mode 100644
index 0000000..1bb7737
Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-cyrillic-700-normal.woff2 differ
diff --git a/public/assets/fonts/Roboto/roboto-cyrillic-900-italic.woff2 b/public/assets/fonts/Roboto/roboto-cyrillic-900-italic.woff2
new file mode 100644
index 0000000..fe8fcec
Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-cyrillic-900-italic.woff2 differ
diff --git a/public/assets/fonts/Roboto/roboto-cyrillic-900-normal.woff2 b/public/assets/fonts/Roboto/roboto-cyrillic-900-normal.woff2
new file mode 100644
index 0000000..1d173f2
Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-cyrillic-900-normal.woff2 differ
diff --git a/public/assets/fonts/Roboto/roboto-latin-100-italic.woff2 b/public/assets/fonts/Roboto/roboto-latin-100-italic.woff2
new file mode 100644
index 0000000..4ccadd1
Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-latin-100-italic.woff2 differ
diff --git a/public/assets/fonts/Roboto/roboto-latin-100-normal.woff2 b/public/assets/fonts/Roboto/roboto-latin-100-normal.woff2
new file mode 100644
index 0000000..71c9bb7
Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-latin-100-normal.woff2 differ
diff --git a/public/assets/fonts/Roboto/roboto-latin-300-italic.woff2 b/public/assets/fonts/Roboto/roboto-latin-300-italic.woff2
new file mode 100644
index 0000000..22c57b0
Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-latin-300-italic.woff2 differ
diff --git a/public/assets/fonts/Roboto/roboto-latin-300-normal.woff2 b/public/assets/fonts/Roboto/roboto-latin-300-normal.woff2
new file mode 100644
index 0000000..6068138
Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-latin-300-normal.woff2 differ
diff --git a/public/assets/fonts/Roboto/roboto-latin-400-italic.woff2 b/public/assets/fonts/Roboto/roboto-latin-400-italic.woff2
new file mode 100644
index 0000000..e1b7a79
Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-latin-400-italic.woff2 differ
diff --git a/public/assets/fonts/Roboto/roboto-latin-400-normal.woff2 b/public/assets/fonts/Roboto/roboto-latin-400-normal.woff2
new file mode 100644
index 0000000..020729e
Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-latin-400-normal.woff2 differ
diff --git a/public/assets/fonts/Roboto/roboto-latin-500-italic.woff2 b/public/assets/fonts/Roboto/roboto-latin-500-italic.woff2
new file mode 100644
index 0000000..ae1933f
Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-latin-500-italic.woff2 differ
diff --git a/public/assets/fonts/Roboto/roboto-latin-500-normal.woff2 b/public/assets/fonts/Roboto/roboto-latin-500-normal.woff2
new file mode 100644
index 0000000..29342a8
Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-latin-500-normal.woff2 differ
diff --git a/public/assets/fonts/Roboto/roboto-latin-700-italic.woff2 b/public/assets/fonts/Roboto/roboto-latin-700-italic.woff2
new file mode 100644
index 0000000..a56a6ed
Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-latin-700-italic.woff2 differ
diff --git a/public/assets/fonts/Roboto/roboto-latin-700-normal.woff2 b/public/assets/fonts/Roboto/roboto-latin-700-normal.woff2
new file mode 100644
index 0000000..771fbec
Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-latin-700-normal.woff2 differ
diff --git a/public/assets/fonts/Roboto/roboto-latin-900-italic.woff2 b/public/assets/fonts/Roboto/roboto-latin-900-italic.woff2
new file mode 100644
index 0000000..59cab0f
Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-latin-900-italic.woff2 differ
diff --git a/public/assets/fonts/Roboto/roboto-latin-900-normal.woff2 b/public/assets/fonts/Roboto/roboto-latin-900-normal.woff2
new file mode 100644
index 0000000..067cb32
Binary files /dev/null and b/public/assets/fonts/Roboto/roboto-latin-900-normal.woff2 differ
diff --git a/public/assets/images/404.png b/public/assets/images/404.png
new file mode 100644
index 0000000..4d16e94
Binary files /dev/null and b/public/assets/images/404.png differ
diff --git a/public/assets/images/oops.png b/public/assets/images/oops.png
new file mode 100644
index 0000000..4661646
Binary files /dev/null and b/public/assets/images/oops.png differ
diff --git a/src/apps/MoneyControllApp/model/providers/RouterProvider/index.tsx b/src/apps/MoneyControllApp/model/providers/RouterProvider/index.tsx
index 1084733..0f4d86a 100644
--- a/src/apps/MoneyControllApp/model/providers/RouterProvider/index.tsx
+++ b/src/apps/MoneyControllApp/model/providers/RouterProvider/index.tsx
@@ -1,11 +1,79 @@
-import { createBrowserRouter, RouterProvider as RRDRouterProvider } from 'react-router-dom';
+import CalendarMonthIcon from '@mui/icons-material/CalendarMonth';
+import FormatListBulletedIcon from '@mui/icons-material/FormatListBulleted';
+import PieChartIcon from '@mui/icons-material/PieChart';
+import { createBrowserRouter, Navigate, RouterProvider as RRDRouterProvider } from 'react-router-dom';
-import { CalendarPage } from 'pages/CalendarPage';
+// todo lazy & access
+import { AnalyzePage, AnalyzePageToolbar } from 'pages/AnalyzePage';
+import { ErrorPage, ErrorPageToolbar } from 'pages/ErrorPage';
+import { PaymentsPage, PaymentsPageToolbar } from 'pages/PaymentsPage';
+import { SchedulePage, SchedulePageToolbar } from 'pages/SchedulePage';
+import { AsideMenuLayout } from 'widgets/AsideMenuLayout';
+
+import type { ReactNode } from 'react';
+
+type PageListItem = {
+ icon: ReactNode;
+ path: `/${string}`;
+ title: string;
+ Content: ReactNode;
+ Toolbar?: ReactNode;
+};
+
+const pages: PageListItem[] = [
+ {
+ icon: ,
+ title: 'Аналитика',
+ path: '/analyze',
+ Content: ,
+ Toolbar: ,
+ },
+ {
+ icon: ,
+ title: 'График платежей',
+ path: '/schedule',
+ Content: ,
+ Toolbar: ,
+ },
+ {
+ icon: ,
+ title: 'Список платежей',
+ path: '/payments',
+ Content: ,
+ Toolbar: ,
+ },
+];
+
+const routes = pages.map((page) => ({
+ path: page.path,
+ element: (
+
+ ),
+ errorElement: (
+ }
+ pages={pages}
+ Toolbar={}
+ />
+ ),
+}));
const router = createBrowserRouter([
+ ...routes,
{
path: '/',
- element: ,
+ element: ,
+ errorElement: (
+ }
+ pages={pages}
+ Toolbar={}
+ />
+ ),
},
]);
diff --git a/src/apps/MoneyControllApp/ui/MoneyControllApp.ui.tsx b/src/apps/MoneyControllApp/ui/MoneyControllApp.ui.tsx
index 0dd508a..b5e3608 100644
--- a/src/apps/MoneyControllApp/ui/MoneyControllApp.ui.tsx
+++ b/src/apps/MoneyControllApp/ui/MoneyControllApp.ui.tsx
@@ -1,7 +1,11 @@
+import CssBaseline from '@mui/material/CssBaseline';
+
import RouterProvider from '../model/providers/RouterProvider';
const MoneyControllApp = () => (
+
+
);
diff --git a/src/index.tsx b/src/index.tsx
index 5ba8418..47186b2 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -1,4 +1,4 @@
-import 'normalize.css';
+import 'shared/styles/fonts/fonts.css';
import { createRoot } from 'react-dom/client';
import { MoneyControllApp } from 'apps/MoneyControllApp';
diff --git a/src/pages/AnalyzePage/index.ts b/src/pages/AnalyzePage/index.ts
new file mode 100644
index 0000000..ad8be7d
--- /dev/null
+++ b/src/pages/AnalyzePage/index.ts
@@ -0,0 +1,2 @@
+export { default as AnalyzePage } from './ui/AnalyzePage.ui';
+export { default as AnalyzePageToolbar } from './ui/AnalyzePageToolbar.ui';
diff --git a/src/pages/AnalyzePage/ui/AnalyzePage.ui.tsx b/src/pages/AnalyzePage/ui/AnalyzePage.ui.tsx
new file mode 100644
index 0000000..9bb9675
--- /dev/null
+++ b/src/pages/AnalyzePage/ui/AnalyzePage.ui.tsx
@@ -0,0 +1,9 @@
+import type { FC } from 'react';
+
+const AnalyzePage: FC = () => (
+
+ Analyze page
+
+);
+
+export default AnalyzePage;
diff --git a/src/pages/AnalyzePage/ui/AnalyzePageToolbar.ui.tsx b/src/pages/AnalyzePage/ui/AnalyzePageToolbar.ui.tsx
new file mode 100644
index 0000000..252b4e6
--- /dev/null
+++ b/src/pages/AnalyzePage/ui/AnalyzePageToolbar.ui.tsx
@@ -0,0 +1,11 @@
+import Toolbar from '@mui/material/Toolbar';
+import Typography from '@mui/material/Typography';
+
+const AnalyzePageToolbar = () => (
+
+
+ Analyze Page Toolbar
+
+
+);
+export default AnalyzePageToolbar;
diff --git a/src/pages/ErrorPage/index.ts b/src/pages/ErrorPage/index.ts
new file mode 100644
index 0000000..6d8bf24
--- /dev/null
+++ b/src/pages/ErrorPage/index.ts
@@ -0,0 +1,2 @@
+export { default as ErrorPage } from './ui/ErrorPage.ui';
+export { default as ErrorPageToolbar } from './ui/ErrorPageToolbar.ui';
diff --git a/src/pages/ErrorPage/ui/ErrorPage.ui.tsx b/src/pages/ErrorPage/ui/ErrorPage.ui.tsx
new file mode 100644
index 0000000..62eabd2
--- /dev/null
+++ b/src/pages/ErrorPage/ui/ErrorPage.ui.tsx
@@ -0,0 +1,48 @@
+import { Grid } from '@mui/material';
+import Typography from '@mui/material/Typography';
+
+import _404Image from 'public/assets/images/404.png';
+import OopsImage from 'public/assets/images/oops.png';
+
+import type { FC } from 'react';
+
+type ErrorPageProps = {
+ type?: '404' | 'ErrorBoundary';
+};
+const ErrorPage: FC = (props) => {
+ const {
+ type = 'ErrorBoundary',
+ } = props;
+
+ if (type === 'ErrorBoundary') {
+ return (
+
+
+
+ Что-то пошло не так
+
+
+
+
+
+
+
+ );
+ }
+
+ return (
+
+
+
+
+
+ );
+};
+
+export default ErrorPage;
diff --git a/src/pages/ErrorPage/ui/ErrorPageToolbar.ui.tsx b/src/pages/ErrorPage/ui/ErrorPageToolbar.ui.tsx
new file mode 100644
index 0000000..f8eef69
--- /dev/null
+++ b/src/pages/ErrorPage/ui/ErrorPageToolbar.ui.tsx
@@ -0,0 +1,29 @@
+import Toolbar from '@mui/material/Toolbar';
+import Typography from '@mui/material/Typography';
+
+import type { FC } from 'react';
+
+type ErrorPageToolbarProps = {
+ type?: '404' | 'ErrorBoundary';
+};
+
+const TITLE: Record, string> = {
+ 404: 'Страницы не существует',
+ ErrorBoundary: 'Непредвиденная ошибка',
+};
+
+const ErrorPageToolbar: FC = (props) => {
+ const {
+ type = 'ErrorBoundary',
+ } = props;
+
+ return (
+
+
+ {TITLE[type]}
+
+
+ );
+};
+
+export default ErrorPageToolbar;
diff --git a/src/pages/PaymentsPage/index.ts b/src/pages/PaymentsPage/index.ts
new file mode 100644
index 0000000..df8f217
--- /dev/null
+++ b/src/pages/PaymentsPage/index.ts
@@ -0,0 +1,2 @@
+export { default as PaymentsPage } from './ui/PaymentsPage.ui';
+export { default as PaymentsPageToolbar } from './ui/PaymentsPageToolbar.ui';
diff --git a/src/pages/PaymentsPage/ui/PaymentsPage.ui.tsx b/src/pages/PaymentsPage/ui/PaymentsPage.ui.tsx
new file mode 100644
index 0000000..31e5afb
--- /dev/null
+++ b/src/pages/PaymentsPage/ui/PaymentsPage.ui.tsx
@@ -0,0 +1,9 @@
+import type { FC } from 'react';
+
+const PaymentsPage: FC = () => (
+
+ Payments Page
+
+);
+
+export default PaymentsPage;
diff --git a/src/pages/PaymentsPage/ui/PaymentsPageToolbar.ui.tsx b/src/pages/PaymentsPage/ui/PaymentsPageToolbar.ui.tsx
new file mode 100644
index 0000000..0a844ca
--- /dev/null
+++ b/src/pages/PaymentsPage/ui/PaymentsPageToolbar.ui.tsx
@@ -0,0 +1,14 @@
+import Toolbar from '@mui/material/Toolbar';
+import Typography from '@mui/material/Typography';
+
+import type { FC } from 'react';
+
+const PaymentsPageToolbar: FC = () => (
+
+
+ Payments Page Toolbar
+
+
+);
+
+export default PaymentsPageToolbar;
diff --git a/src/pages/SchedulePage/index.ts b/src/pages/SchedulePage/index.ts
new file mode 100644
index 0000000..3e6515a
--- /dev/null
+++ b/src/pages/SchedulePage/index.ts
@@ -0,0 +1,2 @@
+export { default as SchedulePage } from './ui/SchedulePage.ui';
+export { default as SchedulePageToolbar } from './ui/SchedulePageToolbar.ui';
diff --git a/src/pages/SchedulePage/ui/SchedulePage.ui.tsx b/src/pages/SchedulePage/ui/SchedulePage.ui.tsx
new file mode 100644
index 0000000..4a6c82a
--- /dev/null
+++ b/src/pages/SchedulePage/ui/SchedulePage.ui.tsx
@@ -0,0 +1,9 @@
+import type { FC } from 'react';
+
+const SchedulePage: FC = () => (
+
+ Schedule Page
+
+);
+
+export default SchedulePage;
diff --git a/src/pages/SchedulePage/ui/SchedulePageToolbar.ui.tsx b/src/pages/SchedulePage/ui/SchedulePageToolbar.ui.tsx
new file mode 100644
index 0000000..6144077
--- /dev/null
+++ b/src/pages/SchedulePage/ui/SchedulePageToolbar.ui.tsx
@@ -0,0 +1,14 @@
+import Toolbar from '@mui/material/Toolbar';
+import Typography from '@mui/material/Typography';
+
+import type { FC } from 'react';
+
+const SchedulePageToolbar: FC = () => (
+
+
+ Schedule Page Toolbar
+
+
+);
+
+export default SchedulePageToolbar;
diff --git a/src/shared/styles/fonts/Comforta.css b/src/shared/styles/fonts/Comforta.css
new file mode 100644
index 0000000..ab66e71
--- /dev/null
+++ b/src/shared/styles/fonts/Comforta.css
@@ -0,0 +1,78 @@
+/* Comfortaa 300 Latin and Cyrillic, Normal */
+@font-face {
+ font-family: "Comfortaa";
+ font-weight: 300;
+ font-style: normal;
+ src: url("public/assets/fonts/Comfortaa/comfortaa-latin-300-normal.woff2") format("woff2")
+}
+@font-face {
+ font-family: "Comfortaa";
+ font-weight: 300;
+ font-style: normal;
+ unicode-range: U+0410-044F;
+ src: url("public/assets/fonts/Comfortaa/comfortaa-cyrillic-300-normal.woff2") format("woff2")
+}
+
+
+/* Comfortaa 400 Latin and Cyrillic, Normal */
+@font-face {
+ font-family: "Comfortaa";
+ font-weight: 400;
+ font-style: normal;
+ src: url("public/assets/fonts/Comfortaa/comfortaa-latin-400-normal.woff2") format("woff2")
+}
+@font-face {
+ font-family: "Comfortaa";
+ font-weight: 400;
+ font-style: normal;
+ unicode-range: U+0410-044F;
+ src: url("public/assets/fonts/Comfortaa/comfortaa-cyrillic-400-normal.woff2") format("woff2")
+}
+
+
+/* Comfortaa 500 Latin and Cyrillic, Normal */
+@font-face {
+ font-family: "Comfortaa";
+ font-weight: 500;
+ font-style: normal;
+ src: url("public/assets/fonts/Comfortaa/comfortaa-latin-500-normal.woff2") format("woff2")
+}
+@font-face {
+ font-family: "Comfortaa";
+ font-weight: 500;
+ font-style: normal;
+ unicode-range: U+0410-044F;
+ src: url("public/assets/fonts/Comfortaa/comfortaa-cyrillic-500-normal.woff2") format("woff2")
+}
+
+
+/* Comfortaa 600 Latin and Cyrillic, Normal */
+@font-face {
+ font-family: "Comfortaa";
+ font-weight: 600;
+ font-style: normal;
+ src: url("public/assets/fonts/Comfortaa/comfortaa-latin-600-normal.woff2") format("woff2")
+}
+@font-face {
+ font-family: "Comfortaa";
+ font-weight: 600;
+ font-style: normal;
+ unicode-range: U+0410-044F;
+ src: url("public/assets/fonts/Comfortaa/comfortaa-cyrillic-600-normal.woff2") format("woff2")
+}
+
+
+/* Comfortaa 700 Latin and Cyrillic, Normal */
+@font-face {
+ font-family: "Comfortaa";
+ font-weight: 700;
+ font-style: normal;
+ src: url("public/assets/fonts/Comfortaa/comfortaa-latin-700-normal.woff2") format("woff2")
+}
+@font-face {
+ font-family: "Comfortaa";
+ font-weight: 700;
+ font-style: normal;
+ unicode-range: U+0410-044F;
+ src: url("public/assets/fonts/Comfortaa/comfortaa-cyrillic-700-normal.woff2") format("woff2")
+}
diff --git a/src/shared/styles/fonts/Roboto.css b/src/shared/styles/fonts/Roboto.css
new file mode 100644
index 0000000..ecdf9c9
--- /dev/null
+++ b/src/shared/styles/fonts/Roboto.css
@@ -0,0 +1,173 @@
+/* Roboto 100 Latin and Cyrillic, Normal & Italic styles */
+@font-face {
+ font-family: "Roboto";
+ font-weight: 100;
+ font-style: normal;
+ src: url("public/assets/fonts/Roboto/roboto-latin-100-normal.woff2") format("woff2")
+}
+@font-face {
+ font-family: "Roboto";
+ font-weight: 100;
+ font-style: italic;
+ src: url("public/assets/fonts/Roboto/roboto-latin-100-italic.woff2") format("woff2");
+}
+@font-face {
+ font-family: "Roboto";
+ font-weight: 100;
+ font-style: normal;
+ unicode-range: U+0410-044F;
+ src: url("public/assets/fonts/Roboto/roboto-cyrillic-100-normal.woff2") format("woff2")
+}
+@font-face {
+ font-family: "Roboto";
+ font-weight: 100;
+ font-style: italic;
+ unicode-range: U+0410-044F;
+ src: url("public/assets/fonts/Roboto/roboto-cyrillic-100-italic.woff2") format("woff2")
+}
+
+
+/* Roboto 300 Latin and Cyrillic, Normal & Italic styles */
+@font-face {
+ font-family: "Roboto";
+ font-weight: 300;
+ font-style: normal;
+ src: url("public/assets/fonts/Roboto/roboto-latin-300-normal.woff2") format("woff2")
+}
+@font-face {
+ font-family: "Roboto";
+ font-weight: 300;
+ font-style: italic;
+ src: url("public/assets/fonts/Roboto/roboto-latin-300-italic.woff2") format("woff2");
+}
+@font-face {
+ font-family: "Roboto";
+ font-weight: 300;
+ font-style: normal;
+ unicode-range: U+0410-044F;
+ src: url("public/assets/fonts/Roboto/roboto-cyrillic-300-normal.woff2") format("woff2")
+}
+@font-face {
+ font-family: "Roboto";
+ font-weight: 300;
+ font-style: italic;
+ unicode-range: U+0410-044F;
+ src: url("public/assets/fonts/Roboto/roboto-cyrillic-300-italic.woff2") format("woff2")
+}
+
+
+/* Roboto 400 Latin and Cyrillic, Normal & Italic styles */
+@font-face {
+ font-family: "Roboto";
+ font-weight: 400;
+ font-style: normal;
+ src: url("public/assets/fonts/Roboto/roboto-latin-400-normal.woff2") format("woff2")
+}
+@font-face {
+ font-family: "Roboto";
+ font-weight: 400;
+ font-style: italic;
+ src: url("public/assets/fonts/Roboto/roboto-latin-400-italic.woff2") format("woff2");
+}
+@font-face {
+ font-family: "Roboto";
+ font-weight: 400;
+ font-style: normal;
+ unicode-range: U+0410-044F;
+ src: url("public/assets/fonts/Roboto/roboto-cyrillic-400-normal.woff2") format("woff2")
+}
+@font-face {
+ font-family: "Roboto";
+ font-weight: 400;
+ font-style: italic;
+ unicode-range: U+0410-044F;
+ src: url("public/assets/fonts/Roboto/roboto-cyrillic-400-italic.woff2") format("woff2")
+}
+
+
+/* Roboto 500 Latin and Cyrillic, Normal & Italic styles */
+@font-face {
+ font-family: "Roboto";
+ font-weight: 500;
+ font-style: normal;
+ src: url("public/assets/fonts/Roboto/roboto-latin-500-normal.woff2") format("woff2")
+}
+@font-face {
+ font-family: "Roboto";
+ font-weight: 500;
+ font-style: italic;
+ src: url("public/assets/fonts/Roboto/roboto-latin-500-italic.woff2") format("woff2");
+}
+@font-face {
+ font-family: "Roboto";
+ font-weight: 500;
+ font-style: normal;
+ unicode-range: U+0410-044F;
+ src: url("public/assets/fonts/Roboto/roboto-cyrillic-500-normal.woff2") format("woff2")
+}
+@font-face {
+ font-family: "Roboto";
+ font-weight: 500;
+ font-style: italic;
+ unicode-range: U+0410-044F;
+ src: url("public/assets/fonts/Roboto/roboto-cyrillic-500-italic.woff2") format("woff2")
+}
+
+
+/* Roboto 700 Latin and Cyrillic, Normal & Italic styles */
+@font-face {
+ font-family: "Roboto";
+ font-weight: 700;
+ font-style: normal;
+ src: url("public/assets/fonts/Roboto/roboto-latin-700-normal.woff2") format("woff2")
+}
+@font-face {
+ font-family: "Roboto";
+ font-weight: 700;
+ font-style: italic;
+ src: url("public/assets/fonts/Roboto/roboto-latin-700-italic.woff2") format("woff2");
+}
+@font-face {
+ font-family: "Roboto";
+ font-weight: 700;
+ font-style: normal;
+ unicode-range: U+0410-044F;
+ src: url("public/assets/fonts/Roboto/roboto-cyrillic-700-normal.woff2") format("woff2")
+}
+@font-face {
+ font-family: "Roboto";
+ font-weight: 700;
+ font-style: italic;
+ unicode-range: U+0410-044F;
+ src: url("public/assets/fonts/Roboto/roboto-cyrillic-700-italic.woff2") format("woff2")
+}
+
+
+/* Roboto 900 Latin and Cyrillic, Normal & Italic styles */
+@font-face {
+ font-family: "Roboto";
+ font-weight: 900;
+ font-style: normal;
+ src: url("public/assets/fonts/Roboto/roboto-latin-900-normal.woff2") format("woff2")
+}
+@font-face {
+ font-family: "Roboto";
+ font-weight: 900;
+ font-style: italic;
+ src: url("public/assets/fonts/Roboto/roboto-latin-900-italic.woff2") format("woff2");
+}
+@font-face {
+ font-family: "Roboto";
+ font-weight: 900;
+ font-style: normal;
+ unicode-range: U+0410-044F;
+ src: url("public/assets/fonts/Roboto/roboto-cyrillic-900-normal.woff2") format("woff2")
+}
+@font-face {
+ font-family: "Roboto";
+ font-weight: 900;
+ font-style: italic;
+ unicode-range: U+0410-044F;
+ src: url("public/assets/fonts/Roboto/roboto-cyrillic-900-italic.woff2") format("woff2")
+}
+
diff --git a/src/shared/styles/fonts/fonts.css b/src/shared/styles/fonts/fonts.css
new file mode 100644
index 0000000..c510c2d
--- /dev/null
+++ b/src/shared/styles/fonts/fonts.css
@@ -0,0 +1,2 @@
+@import "./Roboto.css";
+@import "./Comforta.css";
diff --git a/src/widgets/AsideMenuLayout/index.ts b/src/widgets/AsideMenuLayout/index.ts
new file mode 100644
index 0000000..7ca3bc4
--- /dev/null
+++ b/src/widgets/AsideMenuLayout/index.ts
@@ -0,0 +1 @@
+export { default as AsideMenuLayout } from './ui/AsideMenuLayout.ui';
diff --git a/src/widgets/AsideMenuLayout/ui/AsideMenuLayout.ui.tsx b/src/widgets/AsideMenuLayout/ui/AsideMenuLayout.ui.tsx
new file mode 100644
index 0000000..51f9a01
--- /dev/null
+++ b/src/widgets/AsideMenuLayout/ui/AsideMenuLayout.ui.tsx
@@ -0,0 +1,94 @@
+import ChevronLeftIcon from '@mui/icons-material/ChevronLeft';
+import MenuIcon from '@mui/icons-material/Menu';
+import Box from '@mui/material/Box';
+import CssBaseline from '@mui/material/CssBaseline';
+import Divider from '@mui/material/Divider';
+import List from '@mui/material/List';
+import { useState } from 'react';
+
+import AppBar from './components/AppBar';
+import Drawer from './components/Drawer';
+import DrawerHeader from './components/DrawerMenu';
+import DrawerSwitcher from './components/DrawerSwitcher';
+import MenuItem from './components/MenuItem';
+
+import type { MenuItemProps } from './components/MenuItem';
+import type { FC, ReactNode } from 'react';
+
+const drawerWidth = 250;
+
+type AsideMenuLayoutProps = {
+ pages: MenuItemProps['page'][];
+ Content: ReactNode;
+ Toolbar?: ReactNode;
+};
+const AsideMenuLayout: FC = (props) => {
+ const {
+ pages,
+ Content,
+ Toolbar,
+ } = props;
+
+ const [isOpen, setIsOpen] = useState(true);
+
+ const handleDrawerOpen = () => {
+ setIsOpen(true);
+ };
+ const handleDrawerClose = () => {
+ setIsOpen(false);
+ };
+
+ return (
+
+
+
+
+
+
+ { isOpen ? : }
+
+
+
+
+
+
+ {pages.map((page) => (
+
+ ))}
+
+
+
+
+ {
+ // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
+ Toolbar
+ ? (
+ <>
+
+ {Toolbar}
+
+
+
+ >
+ )
+ : null
+ }
+
+ {Content}
+
+
+ );
+};
+
+export default AsideMenuLayout;
diff --git a/src/widgets/AsideMenuLayout/ui/components/AppBar/index.tsx b/src/widgets/AsideMenuLayout/ui/components/AppBar/index.tsx
new file mode 100644
index 0000000..98e9d21
--- /dev/null
+++ b/src/widgets/AsideMenuLayout/ui/components/AppBar/index.tsx
@@ -0,0 +1,30 @@
+import MuiAppBar from '@mui/material/AppBar';
+import { styled } from '@mui/material/styles';
+
+import type { AppBarProps as MuiAppBarProps } from '@mui/material/AppBar/AppBar';
+
+type AppBarProps = MuiAppBarProps & {
+ open?: boolean;
+ drawerWidth: number;
+};
+
+const AppBar = styled(MuiAppBar, { shouldForwardProp: (prop) => prop !== 'open' })(
+ ({ theme, open, drawerWidth }) => ({
+ transition: theme.transitions.create(['width', 'margin'], {
+ easing: theme.transitions.easing.sharp,
+ duration: theme.transitions.duration.leavingScreen,
+ }),
+ marginLeft: `calc(${theme.spacing(7)} + 1px)`,
+ width: `calc(100% - calc(${theme.spacing(7)} + 1px))`,
+ ...Boolean(open) && {
+ marginLeft: drawerWidth,
+ width: `calc(100% - ${drawerWidth}px)`,
+ transition: theme.transitions.create(['width', 'margin'], {
+ easing: theme.transitions.easing.sharp,
+ duration: theme.transitions.duration.enteringScreen,
+ }),
+ },
+ }),
+);
+
+export default AppBar;
diff --git a/src/widgets/AsideMenuLayout/ui/components/Drawer/index.tsx b/src/widgets/AsideMenuLayout/ui/components/Drawer/index.tsx
new file mode 100644
index 0000000..29e654d
--- /dev/null
+++ b/src/widgets/AsideMenuLayout/ui/components/Drawer/index.tsx
@@ -0,0 +1,44 @@
+import MuiDrawer from '@mui/material/Drawer';
+import { type CSSObject, styled, type Theme } from '@mui/material/styles';
+
+type DrawerProps = {
+ open: boolean;
+ drawerWidth: number;
+};
+
+const openedMixin = (theme: Theme, { drawerWidth }: Pick): CSSObject => ({
+ width: drawerWidth,
+ transition: theme.transitions.create('width', {
+ easing: theme.transitions.easing.sharp,
+ duration: theme.transitions.duration.enteringScreen,
+ }),
+ overflowX: 'hidden',
+});
+
+const closedMixin = (theme: Theme): CSSObject => ({
+ transition: theme.transitions.create('width', {
+ easing: theme.transitions.easing.sharp,
+ duration: theme.transitions.duration.leavingScreen,
+ }),
+ overflowX: 'hidden',
+ width: `calc(${theme.spacing(8)} + 1px)`,
+});
+
+const Drawer = styled(MuiDrawer, { shouldForwardProp: (prop) => prop !== 'open' })(
+ ({ theme, open, drawerWidth }) => ({
+ width: drawerWidth,
+ flexShrink: 0,
+ whiteSpace: 'nowrap',
+ boxSizing: 'border-box',
+ ...open && {
+ ...openedMixin(theme, { drawerWidth }),
+ '& .MuiDrawer-paper': openedMixin(theme, { drawerWidth }),
+ },
+ ...!open && {
+ ...closedMixin(theme),
+ '& .MuiDrawer-paper': closedMixin(theme),
+ },
+ }),
+);
+
+export default Drawer;
diff --git a/src/widgets/AsideMenuLayout/ui/components/DrawerMenu/index.tsx b/src/widgets/AsideMenuLayout/ui/components/DrawerMenu/index.tsx
new file mode 100644
index 0000000..fd57536
--- /dev/null
+++ b/src/widgets/AsideMenuLayout/ui/components/DrawerMenu/index.tsx
@@ -0,0 +1,10 @@
+import { styled } from '@mui/material/styles';
+
+const DrawerHeader = styled('div')(({ theme }) => ({
+ display: 'flex',
+ alignItems: 'center',
+ justifyContent: 'flex-end',
+ ...theme.mixins.toolbar,
+}));
+
+export default DrawerHeader;
diff --git a/src/widgets/AsideMenuLayout/ui/components/DrawerSwitcher/index.tsx b/src/widgets/AsideMenuLayout/ui/components/DrawerSwitcher/index.tsx
new file mode 100644
index 0000000..8188f5a
--- /dev/null
+++ b/src/widgets/AsideMenuLayout/ui/components/DrawerSwitcher/index.tsx
@@ -0,0 +1,20 @@
+import { styled } from '@mui/material/styles';
+
+type DrawerSwitcherProps = {
+ open: boolean;
+};
+const DrawerSwitcher = styled('div')(({ open }) => ({
+ width: '100%',
+ height: '100%',
+ cursor: 'pointer',
+ display: 'flex',
+ justifyContent: open ? 'flex-end' : 'center',
+ alignItems: 'center',
+ padding: '0 20px',
+ transition: '200ms',
+ '&:hover': {
+ background: 'rgba(0, 0, 0, 0.1)',
+ },
+}));
+
+export default DrawerSwitcher;
diff --git a/src/widgets/AsideMenuLayout/ui/components/MenuItem/index.tsx b/src/widgets/AsideMenuLayout/ui/components/MenuItem/index.tsx
new file mode 100644
index 0000000..58fe27d
--- /dev/null
+++ b/src/widgets/AsideMenuLayout/ui/components/MenuItem/index.tsx
@@ -0,0 +1,72 @@
+import ListItem from '@mui/material/ListItem';
+import ListItemButton from '@mui/material/ListItemButton';
+import ListItemIcon from '@mui/material/ListItemIcon';
+import ListItemText from '@mui/material/ListItemText';
+import { styled, useTheme } from '@mui/material/styles';
+import Typography from '@mui/material/Typography';
+import { NavLink as RRDNavLink } from 'react-router-dom';
+
+import type { FC, ReactNode } from 'react';
+
+const NavLink = styled(RRDNavLink)(({ theme }) => ({
+ textDecoration: 'none',
+ color: theme.palette.grey['600'],
+ width: '100%',
+}));
+
+export type MenuItemProps = {
+ page: {
+ icon: ReactNode;
+ title: string;
+ path: string;
+ };
+ isOpen: boolean;
+};
+
+const MenuItem: FC = (props) => {
+ const {
+ page,
+ isOpen,
+ } = props;
+ const theme = useTheme();
+
+ return (
+
+
+ {({ isActive }) => (
+
+
+ {page.icon}
+
+
+
+
+ {page.title}
+
+
+
+ )}
+
+
+ );
+};
+
+export default MenuItem;
diff --git a/tsconfig.json b/tsconfig.json
index 166c178..b3c1d07 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -33,6 +33,7 @@
"moduleResolution": "Node",
"paths": {
"__spec__/*": ["./__spec__/*"],
+ "public*": ["./public/*"],
"*": ["./src/*"]
},
diff --git a/yarn.lock b/yarn.lock
index 46ede99..43ebb81 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -232,6 +232,15 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-module-imports@npm:^7.16.7":
+ version: 7.24.6
+ resolution: "@babel/helper-module-imports@npm:7.24.6"
+ dependencies:
+ "@babel/types": "npm:^7.24.6"
+ checksum: 10c0/e0db3fbfcd963d138f0792ff626f940a576fcf212d02b8fe6478dccf3421bd1c2a76f8e69c7450c049985e7b63b30be309a24eeeb6ad7c2137a31b676a095a84
+ languageName: node
+ linkType: hard
+
"@babel/helper-module-imports@npm:^7.22.15, @babel/helper-module-imports@npm:^7.24.1":
version: 7.24.3
resolution: "@babel/helper-module-imports@npm:7.24.3"
@@ -332,6 +341,13 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-string-parser@npm:^7.24.6":
+ version: 7.24.6
+ resolution: "@babel/helper-string-parser@npm:7.24.6"
+ checksum: 10c0/95115bf676e92c4e99166395649108d97447e6cabef1fabaec8cdbc53a43f27b5df2268ff6534439d405bc1bd06685b163eb3b470455bd49f69159dada414145
+ languageName: node
+ linkType: hard
+
"@babel/helper-validator-identifier@npm:^7.22.20":
version: 7.22.20
resolution: "@babel/helper-validator-identifier@npm:7.22.20"
@@ -339,6 +355,13 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-validator-identifier@npm:^7.24.6":
+ version: 7.24.6
+ resolution: "@babel/helper-validator-identifier@npm:7.24.6"
+ checksum: 10c0/d29d2e3fca66c31867a009014169b93f7bc21c8fc1dd7d0b9d85d7a4000670526ff2222d966febb75a6e12f9859a31d1e75b558984e28ecb69651314dd0a6fd1
+ languageName: node
+ linkType: hard
+
"@babel/helper-validator-option@npm:^7.22.15, @babel/helper-validator-option@npm:^7.23.5":
version: 7.23.5
resolution: "@babel/helper-validator-option@npm:7.23.5"
@@ -1590,6 +1613,15 @@ __metadata:
languageName: node
linkType: hard
+"@babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.7":
+ version: 7.24.6
+ resolution: "@babel/runtime@npm:7.24.6"
+ dependencies:
+ regenerator-runtime: "npm:^0.14.0"
+ checksum: 10c0/224ad205de33ea28979baaec89eea4c4d4e9482000dd87d15b97859365511cdd4d06517712504024f5d33a5fb9412f9b91c96f1d923974adf9359e1575cde049
+ languageName: node
+ linkType: hard
+
"@babel/template@npm:^7.22.15, @babel/template@npm:^7.24.0, @babel/template@npm:^7.3.3":
version: 7.24.0
resolution: "@babel/template@npm:7.24.0"
@@ -1630,6 +1662,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/types@npm:^7.24.6":
+ version: 7.24.6
+ resolution: "@babel/types@npm:7.24.6"
+ dependencies:
+ "@babel/helper-string-parser": "npm:^7.24.6"
+ "@babel/helper-validator-identifier": "npm:^7.24.6"
+ to-fast-properties: "npm:^2.0.0"
+ checksum: 10c0/1d94d92d97ef49030ad7f9e14cfccfeb70b1706dabcaa69037e659ec9d2c3178fb005d2088cce40d88dfc1306153d9157fe038a79ea2be92e5e6b99a59ef80cc
+ languageName: node
+ linkType: hard
+
"@bcoe/v8-coverage@npm:^0.2.3":
version: 0.2.3
resolution: "@bcoe/v8-coverage@npm:0.2.3"
@@ -2281,6 +2324,152 @@ __metadata:
languageName: node
linkType: hard
+"@emotion/babel-plugin@npm:^11.11.0":
+ version: 11.11.0
+ resolution: "@emotion/babel-plugin@npm:11.11.0"
+ dependencies:
+ "@babel/helper-module-imports": "npm:^7.16.7"
+ "@babel/runtime": "npm:^7.18.3"
+ "@emotion/hash": "npm:^0.9.1"
+ "@emotion/memoize": "npm:^0.8.1"
+ "@emotion/serialize": "npm:^1.1.2"
+ babel-plugin-macros: "npm:^3.1.0"
+ convert-source-map: "npm:^1.5.0"
+ escape-string-regexp: "npm:^4.0.0"
+ find-root: "npm:^1.1.0"
+ source-map: "npm:^0.5.7"
+ stylis: "npm:4.2.0"
+ checksum: 10c0/89cbb6ec0e52c8ee9c2a4b9889ccd4fc3a75d28091d835bfac6d7c4565d3338621e23af0a85f3bcd133e1cae795c692e1dadada015784d4b0554aa5bb111df43
+ languageName: node
+ linkType: hard
+
+"@emotion/cache@npm:^11.11.0":
+ version: 11.11.0
+ resolution: "@emotion/cache@npm:11.11.0"
+ dependencies:
+ "@emotion/memoize": "npm:^0.8.1"
+ "@emotion/sheet": "npm:^1.2.2"
+ "@emotion/utils": "npm:^1.2.1"
+ "@emotion/weak-memoize": "npm:^0.3.1"
+ stylis: "npm:4.2.0"
+ checksum: 10c0/a23ab5ab2fd08e904698106d58ad3536fed51cc1aa0ef228e95bb640eaf11f560dbd91a395477b0d84e1e3c20150263764b4558517cf6576a89d2d6cc5253688
+ languageName: node
+ linkType: hard
+
+"@emotion/hash@npm:^0.9.1":
+ version: 0.9.1
+ resolution: "@emotion/hash@npm:0.9.1"
+ checksum: 10c0/cdafe5da63fc1137f3db6e232fdcde9188b2b47ee66c56c29137199642a4086f42382d866911cfb4833cae2cc00271ab45cad3946b024f67b527bb7fac7f4c9d
+ languageName: node
+ linkType: hard
+
+"@emotion/is-prop-valid@npm:^1.2.2":
+ version: 1.2.2
+ resolution: "@emotion/is-prop-valid@npm:1.2.2"
+ dependencies:
+ "@emotion/memoize": "npm:^0.8.1"
+ checksum: 10c0/bb1530dcb4e0e5a4fabb219279f2d0bc35796baf66f6241f98b0d03db1985c890a8cafbea268e0edefd5eeda143dbd5c09a54b5fba74cee8c69b98b13194af50
+ languageName: node
+ linkType: hard
+
+"@emotion/memoize@npm:^0.8.1":
+ version: 0.8.1
+ resolution: "@emotion/memoize@npm:0.8.1"
+ checksum: 10c0/dffed372fc3b9fa2ba411e76af22b6bb686fb0cb07694fdfaa6dd2baeb0d5e4968c1a7caa472bfcf06a5997d5e7c7d16b90e993f9a6ffae79a2c3dbdc76dfe78
+ languageName: node
+ linkType: hard
+
+"@emotion/react@npm:11.11.4":
+ version: 11.11.4
+ resolution: "@emotion/react@npm:11.11.4"
+ dependencies:
+ "@babel/runtime": "npm:^7.18.3"
+ "@emotion/babel-plugin": "npm:^11.11.0"
+ "@emotion/cache": "npm:^11.11.0"
+ "@emotion/serialize": "npm:^1.1.3"
+ "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.0.1"
+ "@emotion/utils": "npm:^1.2.1"
+ "@emotion/weak-memoize": "npm:^0.3.1"
+ hoist-non-react-statics: "npm:^3.3.1"
+ peerDependencies:
+ react: ">=16.8.0"
+ peerDependenciesMeta:
+ "@types/react":
+ optional: true
+ checksum: 10c0/6df892fd9e04b5c8c37aacfd7f461631e04e00e845edc3c5b2955ab8ad681abf5cd49584101f579427e08b82f2f88369c78d37ae2fe9360a8f68fd4e51b8e448
+ languageName: node
+ linkType: hard
+
+"@emotion/serialize@npm:^1.1.2, @emotion/serialize@npm:^1.1.3, @emotion/serialize@npm:^1.1.4":
+ version: 1.1.4
+ resolution: "@emotion/serialize@npm:1.1.4"
+ dependencies:
+ "@emotion/hash": "npm:^0.9.1"
+ "@emotion/memoize": "npm:^0.8.1"
+ "@emotion/unitless": "npm:^0.8.1"
+ "@emotion/utils": "npm:^1.2.1"
+ csstype: "npm:^3.0.2"
+ checksum: 10c0/164d936f72382594c47b9c24e67a51c7fc16b83d9a36b84eec5e4cb9bf7be029218a490ef4b44233a1b53423bdb3905d65b597cde3ebba759d40dab7a4c99121
+ languageName: node
+ linkType: hard
+
+"@emotion/sheet@npm:^1.2.2":
+ version: 1.2.2
+ resolution: "@emotion/sheet@npm:1.2.2"
+ checksum: 10c0/69827a1bfa43d7b188f1d8cea42163143a36312543fdade5257c459a2b3efd7ce386aac84ba152bc2517a4f7e54384c04800b26adb382bb284ac7e4ad40e584b
+ languageName: node
+ linkType: hard
+
+"@emotion/styled@npm:11.11.5":
+ version: 11.11.5
+ resolution: "@emotion/styled@npm:11.11.5"
+ dependencies:
+ "@babel/runtime": "npm:^7.18.3"
+ "@emotion/babel-plugin": "npm:^11.11.0"
+ "@emotion/is-prop-valid": "npm:^1.2.2"
+ "@emotion/serialize": "npm:^1.1.4"
+ "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.0.1"
+ "@emotion/utils": "npm:^1.2.1"
+ peerDependencies:
+ "@emotion/react": ^11.0.0-rc.0
+ react: ">=16.8.0"
+ peerDependenciesMeta:
+ "@types/react":
+ optional: true
+ checksum: 10c0/27da6ad7f5b374d61cfe6647cc2f93ee3ceb1139a51907050576ee30da0a50a27b0bbed45f76889d560d2a8ccf8bc4a4f7126cad3f00127e107c11093dc0a801
+ languageName: node
+ linkType: hard
+
+"@emotion/unitless@npm:^0.8.1":
+ version: 0.8.1
+ resolution: "@emotion/unitless@npm:0.8.1"
+ checksum: 10c0/a1ed508628288f40bfe6dd17d431ed899c067a899fa293a13afe3aed1d70fac0412b8a215fafab0b42829360db687fecd763e5f01a64ddc4a4b58ec3112ff548
+ languageName: node
+ linkType: hard
+
+"@emotion/use-insertion-effect-with-fallbacks@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.0.1"
+ peerDependencies:
+ react: ">=16.8.0"
+ checksum: 10c0/a15b2167940e3a908160687b73fc4fcd81e59ab45136b6967f02c7c419d9a149acd22a416b325c389642d4f1c3d33cf4196cad6b618128b55b7c74f6807a240b
+ languageName: node
+ linkType: hard
+
+"@emotion/utils@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "@emotion/utils@npm:1.2.1"
+ checksum: 10c0/db43ca803361740c14dfb1cca1464d10d27f4c8b40d3e8864e6932ccf375d1450778ff4e4eadee03fb97f2aeb18de9fae98294905596a12ff7d4cd1910414d8d
+ languageName: node
+ linkType: hard
+
+"@emotion/weak-memoize@npm:^0.3.1":
+ version: 0.3.1
+ resolution: "@emotion/weak-memoize@npm:0.3.1"
+ checksum: 10c0/ed514b3cb94bbacece4ac2450d98898066c0a0698bdeda256e312405ca53634cb83c75889b25cd8bbbe185c80f4c05a1f0a0091e1875460ba6be61d0334f0b8a
+ languageName: node
+ linkType: hard
+
"@esbuild/aix-ppc64@npm:0.19.12":
version: 0.19.12
resolution: "@esbuild/aix-ppc64@npm:0.19.12"
@@ -2484,6 +2673,44 @@ __metadata:
languageName: node
linkType: hard
+"@floating-ui/core@npm:^1.0.0":
+ version: 1.6.2
+ resolution: "@floating-ui/core@npm:1.6.2"
+ dependencies:
+ "@floating-ui/utils": "npm:^0.2.0"
+ checksum: 10c0/db2621dc682e7f043d6f118d087ae6a6bfdacf40b26ede561760dd53548c16e2e7c59031e013e37283801fa307b55e6de65bf3b316b96a054e4a6a7cb937c59e
+ languageName: node
+ linkType: hard
+
+"@floating-ui/dom@npm:^1.0.0":
+ version: 1.6.5
+ resolution: "@floating-ui/dom@npm:1.6.5"
+ dependencies:
+ "@floating-ui/core": "npm:^1.0.0"
+ "@floating-ui/utils": "npm:^0.2.0"
+ checksum: 10c0/ebdc14806f786e60df8e7cc2c30bf9cd4d75fe734f06d755588bbdef2f60d0a0f21dffb14abdc58dea96e5577e2e366feca6d66ba962018efd1bc91a3ece4526
+ languageName: node
+ linkType: hard
+
+"@floating-ui/react-dom@npm:^2.0.8":
+ version: 2.1.0
+ resolution: "@floating-ui/react-dom@npm:2.1.0"
+ dependencies:
+ "@floating-ui/dom": "npm:^1.0.0"
+ peerDependencies:
+ react: ">=16.8.0"
+ react-dom: ">=16.8.0"
+ checksum: 10c0/9ee44dfeb27f585fb1e0114cbe37c72ff5d34149900f4f3013f6b0abf8c3365eab13286c360f97fbe0c44bb91a745e7a4c18b82d111990b45a7a7796dc55e461
+ languageName: node
+ linkType: hard
+
+"@floating-ui/utils@npm:^0.2.0":
+ version: 0.2.2
+ resolution: "@floating-ui/utils@npm:0.2.2"
+ checksum: 10c0/b2becdcafdf395af1641348da0031ff1eaad2bc60c22e14bd3abad4acfe2c8401e03097173d89a2f646a99b75819a78ef21ebb2572cab0042a56dd654b0065cd
+ languageName: node
+ linkType: hard
+
"@humanwhocodes/config-array@npm:^0.11.14":
version: 0.11.14
resolution: "@humanwhocodes/config-array@npm:0.11.14"
@@ -2849,6 +3076,180 @@ __metadata:
languageName: node
linkType: hard
+"@mui/base@npm:5.0.0-beta.40":
+ version: 5.0.0-beta.40
+ resolution: "@mui/base@npm:5.0.0-beta.40"
+ dependencies:
+ "@babel/runtime": "npm:^7.23.9"
+ "@floating-ui/react-dom": "npm:^2.0.8"
+ "@mui/types": "npm:^7.2.14"
+ "@mui/utils": "npm:^5.15.14"
+ "@popperjs/core": "npm:^2.11.8"
+ clsx: "npm:^2.1.0"
+ prop-types: "npm:^15.8.1"
+ 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
+ checksum: 10c0/631b4ee389e23d82c16c5845c2849af43000f52f1def639b9bb5bf39fd09f4eab93787d32950b715a7de7b689faab53bb7c9a78f6fd12b663876cf8128d45de1
+ languageName: node
+ linkType: hard
+
+"@mui/core-downloads-tracker@npm:^5.15.19":
+ version: 5.15.19
+ resolution: "@mui/core-downloads-tracker@npm:5.15.19"
+ checksum: 10c0/90cd3eb95399326f60140618b43c91de133a7192fd122c379278e30e09b921a6109786189b1a78e45b3b6ef6104d0f0e2f29209e48f64c978ec28ef91c5bce2b
+ languageName: node
+ linkType: hard
+
+"@mui/icons-material@npm:^5.15.19":
+ version: 5.15.19
+ resolution: "@mui/icons-material@npm:5.15.19"
+ dependencies:
+ "@babel/runtime": "npm:^7.23.9"
+ peerDependencies:
+ "@mui/material": ^5.0.0
+ "@types/react": ^17.0.0 || ^18.0.0
+ react: ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ "@types/react":
+ optional: true
+ checksum: 10c0/f2a4381b6a0f955d74aa5ac88bb8d38fee384fdff9a8e82c7fb9e596fbc61ccff97883a6c1a3cfbab3253f4d53c3fef21a3b438dfe45de365e842577bc892c08
+ languageName: node
+ linkType: hard
+
+"@mui/material@npm:5.15.19":
+ version: 5.15.19
+ resolution: "@mui/material@npm:5.15.19"
+ dependencies:
+ "@babel/runtime": "npm:^7.23.9"
+ "@mui/base": "npm:5.0.0-beta.40"
+ "@mui/core-downloads-tracker": "npm:^5.15.19"
+ "@mui/system": "npm:^5.15.15"
+ "@mui/types": "npm:^7.2.14"
+ "@mui/utils": "npm:^5.15.14"
+ "@types/react-transition-group": "npm:^4.4.10"
+ clsx: "npm:^2.1.0"
+ csstype: "npm:^3.1.3"
+ prop-types: "npm:^15.8.1"
+ react-is: "npm:^18.2.0"
+ react-transition-group: "npm:^4.4.5"
+ peerDependencies:
+ "@emotion/react": ^11.5.0
+ "@emotion/styled": ^11.3.0
+ "@types/react": ^17.0.0 || ^18.0.0
+ react: ^17.0.0 || ^18.0.0
+ react-dom: ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ "@emotion/react":
+ optional: true
+ "@emotion/styled":
+ optional: true
+ "@types/react":
+ optional: true
+ checksum: 10c0/388eb14bedea7453dde7e5cbdcf9e51bec20567978d9405aa4affb9df69d25c9696427820ebff927215a8e8cd79a873ce9ac4207989a1c6b859d26394031382e
+ languageName: node
+ linkType: hard
+
+"@mui/private-theming@npm:^5.15.14":
+ version: 5.15.14
+ resolution: "@mui/private-theming@npm:5.15.14"
+ dependencies:
+ "@babel/runtime": "npm:^7.23.9"
+ "@mui/utils": "npm:^5.15.14"
+ prop-types: "npm:^15.8.1"
+ peerDependencies:
+ "@types/react": ^17.0.0 || ^18.0.0
+ react: ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ "@types/react":
+ optional: true
+ checksum: 10c0/28889505874f03e2aeeb147bc5eefcc537825a91ab9c771a5e60ea0df1eab760e900a3a50fec55b25bc9087e9030be37adbe1acdd81a3e2fcca5a1e0cf5979ec
+ languageName: node
+ linkType: hard
+
+"@mui/styled-engine@npm:^5.15.14":
+ version: 5.15.14
+ resolution: "@mui/styled-engine@npm:5.15.14"
+ dependencies:
+ "@babel/runtime": "npm:^7.23.9"
+ "@emotion/cache": "npm:^11.11.0"
+ csstype: "npm:^3.1.3"
+ prop-types: "npm:^15.8.1"
+ peerDependencies:
+ "@emotion/react": ^11.4.1
+ "@emotion/styled": ^11.3.0
+ react: ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ "@emotion/react":
+ optional: true
+ "@emotion/styled":
+ optional: true
+ checksum: 10c0/0d262ea0b3c117f865af1cd52b992592c24432e491b35e712159bb49adfd776ee9a532abbc4ab08889f308e75d30082a0fee809119d5d61a82b3277212655319
+ languageName: node
+ linkType: hard
+
+"@mui/system@npm:^5.15.15":
+ version: 5.15.15
+ resolution: "@mui/system@npm:5.15.15"
+ dependencies:
+ "@babel/runtime": "npm:^7.23.9"
+ "@mui/private-theming": "npm:^5.15.14"
+ "@mui/styled-engine": "npm:^5.15.14"
+ "@mui/types": "npm:^7.2.14"
+ "@mui/utils": "npm:^5.15.14"
+ clsx: "npm:^2.1.0"
+ csstype: "npm:^3.1.3"
+ prop-types: "npm:^15.8.1"
+ peerDependencies:
+ "@emotion/react": ^11.5.0
+ "@emotion/styled": ^11.3.0
+ "@types/react": ^17.0.0 || ^18.0.0
+ react: ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ "@emotion/react":
+ optional: true
+ "@emotion/styled":
+ optional: true
+ "@types/react":
+ optional: true
+ checksum: 10c0/80724377ee9c0e1604373371bb9b7d566c899009264caf6f638eed224600b91b739f32bef03c6a479dc9348dfc01d7c28cc8d1252454d7dd4a23f59033a8653e
+ languageName: node
+ linkType: hard
+
+"@mui/types@npm:^7.2.14":
+ version: 7.2.14
+ resolution: "@mui/types@npm:7.2.14"
+ peerDependencies:
+ "@types/react": ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ "@types/react":
+ optional: true
+ checksum: 10c0/d4e0a9fce4bddfb5e0b7b6be1b15b591df33bb90ef0087e4bd5fe85f00f62776c7ed0e4698e7fb43213e1f04064aac1695b53ca52aaeaee7dbba248a792bdd1e
+ languageName: node
+ linkType: hard
+
+"@mui/utils@npm:^5.15.14":
+ version: 5.15.14
+ resolution: "@mui/utils@npm:5.15.14"
+ dependencies:
+ "@babel/runtime": "npm:^7.23.9"
+ "@types/prop-types": "npm:^15.7.11"
+ prop-types: "npm:^15.8.1"
+ react-is: "npm:^18.2.0"
+ peerDependencies:
+ "@types/react": ^17.0.0 || ^18.0.0
+ react: ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ "@types/react":
+ optional: true
+ checksum: 10c0/36265988477637a011361456b40929de928e215466b72e6c48673a2088610d83e09960a3e0608100448910683079fc80a5e11dbf49b9ce7109dd8e49403ae3b3
+ languageName: node
+ linkType: hard
+
"@nodelib/fs.scandir@npm:2.1.5":
version: 2.1.5
resolution: "@nodelib/fs.scandir@npm:2.1.5"
@@ -2951,6 +3352,13 @@ __metadata:
languageName: node
linkType: hard
+"@popperjs/core@npm:^2.11.8":
+ version: 2.11.8
+ resolution: "@popperjs/core@npm:2.11.8"
+ checksum: 10c0/4681e682abc006d25eb380d0cf3efc7557043f53b6aea7a5057d0d1e7df849a00e281cd8ea79c902a35a414d7919621fc2ba293ecec05f413598e0b23d5a1e63
+ languageName: node
+ linkType: hard
+
"@react-dnd/asap@npm:^5.0.1":
version: 5.0.2
resolution: "@react-dnd/asap@npm:5.0.2"
@@ -3775,7 +4183,14 @@ __metadata:
languageName: node
linkType: hard
-"@types/prop-types@npm:*":
+"@types/parse-json@npm:^4.0.0":
+ version: 4.0.2
+ resolution: "@types/parse-json@npm:4.0.2"
+ checksum: 10c0/b1b863ac34a2c2172fbe0807a1ec4d5cb684e48d422d15ec95980b81475fac4fdb3768a8b13eef39130203a7c04340fc167bae057c7ebcafd7dec9fe6c36aeb1
+ languageName: node
+ linkType: hard
+
+"@types/prop-types@npm:*, @types/prop-types@npm:^15.7.11":
version: 15.7.12
resolution: "@types/prop-types@npm:15.7.12"
checksum: 10c0/1babcc7db6a1177779f8fde0ccc78d64d459906e6ef69a4ed4dd6339c920c2e05b074ee5a92120fe4e9d9f1a01c952f843ebd550bee2332fc2ef81d1706878f8
@@ -3805,6 +4220,15 @@ __metadata:
languageName: node
linkType: hard
+"@types/react-transition-group@npm:^4.4.10":
+ version: 4.4.10
+ resolution: "@types/react-transition-group@npm:4.4.10"
+ dependencies:
+ "@types/react": "npm:*"
+ checksum: 10c0/3eb9bca143abc21eb781aa5cb1bded0c9335689d515bf0513fb8e63217b7a8122c6a323ecd5644a06938727e1f467ee061d8df1c93b68825a80ff1b47ab777a2
+ languageName: node
+ linkType: hard
+
"@types/react@npm:*":
version: 18.2.69
resolution: "@types/react@npm:18.2.69"
@@ -4908,6 +5332,17 @@ __metadata:
languageName: node
linkType: hard
+"babel-plugin-macros@npm:^3.1.0":
+ version: 3.1.0
+ resolution: "babel-plugin-macros@npm:3.1.0"
+ dependencies:
+ "@babel/runtime": "npm:^7.12.5"
+ cosmiconfig: "npm:^7.0.0"
+ resolve: "npm:^1.19.0"
+ checksum: 10c0/c6dfb15de96f67871d95bd2e8c58b0c81edc08b9b087dc16755e7157f357dc1090a8dc60ebab955e92587a9101f02eba07e730adc253a1e4cf593ca3ebd3839c
+ languageName: node
+ linkType: hard
+
"babel-plugin-polyfill-corejs2@npm:^0.4.10, babel-plugin-polyfill-corejs2@npm:^0.4.8":
version: 0.4.10
resolution: "babel-plugin-polyfill-corejs2@npm:0.4.10"
@@ -5417,6 +5852,13 @@ __metadata:
languageName: node
linkType: hard
+"clsx@npm:^2.1.0":
+ version: 2.1.1
+ resolution: "clsx@npm:2.1.1"
+ checksum: 10c0/c4c8eb865f8c82baab07e71bfa8897c73454881c4f99d6bc81585aecd7c441746c1399d08363dc096c550cceaf97bd4ce1e8854e1771e9998d9f94c4fe075839
+ languageName: node
+ linkType: hard
+
"co@npm:^4.6.0":
version: 4.6.0
resolution: "co@npm:4.6.0"
@@ -5846,6 +6288,13 @@ __metadata:
languageName: node
linkType: hard
+"convert-source-map@npm:^1.5.0":
+ version: 1.9.0
+ resolution: "convert-source-map@npm:1.9.0"
+ checksum: 10c0/281da55454bf8126cbc6625385928c43479f2060984180c42f3a86c8b8c12720a24eac260624a7d1e090004028d2dee78602330578ceec1a08e27cb8bb0a8a5b
+ languageName: node
+ linkType: hard
+
"convert-source-map@npm:^2.0.0":
version: 2.0.0
resolution: "convert-source-map@npm:2.0.0"
@@ -5919,6 +6368,19 @@ __metadata:
languageName: node
linkType: hard
+"cosmiconfig@npm:^7.0.0":
+ version: 7.1.0
+ resolution: "cosmiconfig@npm:7.1.0"
+ dependencies:
+ "@types/parse-json": "npm:^4.0.0"
+ import-fresh: "npm:^3.2.1"
+ parse-json: "npm:^5.0.0"
+ path-type: "npm:^4.0.0"
+ yaml: "npm:^1.10.0"
+ checksum: 10c0/b923ff6af581638128e5f074a5450ba12c0300b71302398ea38dbeabd33bbcaa0245ca9adbedfcf284a07da50f99ede5658c80bb3e39e2ce770a99d28a21ef03
+ languageName: node
+ linkType: hard
+
"cosmiconfig@npm:^8.1.3, cosmiconfig@npm:^8.2.0":
version: 8.3.6
resolution: "cosmiconfig@npm:8.3.6"
@@ -6252,7 +6714,7 @@ __metadata:
languageName: node
linkType: hard
-"csstype@npm:^3.0.2":
+"csstype@npm:^3.0.2, csstype@npm:^3.1.3":
version: 3.1.3
resolution: "csstype@npm:3.1.3"
checksum: 10c0/80c089d6f7e0c5b2bd83cf0539ab41474198579584fa10d86d0cafe0642202343cbc119e076a0b1aece191989477081415d66c9fefbf3c957fc2fc4b7009f248
@@ -6639,6 +7101,16 @@ __metadata:
languageName: node
linkType: hard
+"dom-helpers@npm:^5.0.1":
+ version: 5.2.1
+ resolution: "dom-helpers@npm:5.2.1"
+ dependencies:
+ "@babel/runtime": "npm:^7.8.7"
+ csstype: "npm:^3.0.2"
+ checksum: 10c0/f735074d66dd759b36b158fa26e9d00c9388ee0e8c9b16af941c38f014a37fc80782de83afefd621681b19ac0501034b4f1c4a3bff5caa1b8667f0212b5e124c
+ languageName: node
+ linkType: hard
+
"dom-serializer@npm:^1.0.1":
version: 1.4.1
resolution: "dom-serializer@npm:1.4.1"
@@ -8536,7 +9008,7 @@ __metadata:
languageName: node
linkType: hard
-"hoist-non-react-statics@npm:^3.3.2":
+"hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2":
version: 3.3.2
resolution: "hoist-non-react-statics@npm:3.3.2"
dependencies:
@@ -10950,6 +11422,10 @@ __metadata:
dependencies:
"@commitlint/cli": "npm:19.2.1"
"@commitlint/config-conventional": "npm:19.1.0"
+ "@emotion/react": "npm:11.11.4"
+ "@emotion/styled": "npm:11.11.5"
+ "@mui/icons-material": "npm:^5.15.19"
+ "@mui/material": "npm:5.15.19"
"@testing-library/jest-dom": "npm:6.4.2"
"@testing-library/react": "npm:14.3.1"
"@testing-library/user-event": "npm:^14.5.2"
@@ -10964,7 +11440,6 @@ __metadata:
jest-environment-jsdom: "npm:29.7.0"
ksv741-react-scripts: "npm:0.3.1"
lint-staged: "npm:15.2.2"
- normalize.css: "npm:8.0.1"
prop-types: "npm:15.8.1"
react: "npm:18.3.1"
react-dnd: "npm:16.0.1"
@@ -11161,13 +11636,6 @@ __metadata:
languageName: node
linkType: hard
-"normalize.css@npm:8.0.1":
- version: 8.0.1
- resolution: "normalize.css@npm:8.0.1"
- checksum: 10c0/4ddf56d1af5ca755fa5e692e718316d8758ecb792aa96e1ad206824b5810a043763d681d6f7697d46573515f5e9690038b4c91a95c1997567128815545fb8cd7
- languageName: node
- linkType: hard
-
"npm-run-path@npm:^4.0.1":
version: 4.0.1
resolution: "npm-run-path@npm:4.0.1"
@@ -12592,7 +13060,7 @@ __metadata:
languageName: node
linkType: hard
-"prop-types@npm:15.8.1, prop-types@npm:^15.8.1":
+"prop-types@npm:15.8.1, prop-types@npm:^15.6.2, prop-types@npm:^15.8.1":
version: 15.8.1
resolution: "prop-types@npm:15.8.1"
dependencies:
@@ -12773,6 +13241,13 @@ __metadata:
languageName: node
linkType: hard
+"react-is@npm:^18.2.0":
+ version: 18.3.1
+ resolution: "react-is@npm:18.3.1"
+ checksum: 10c0/f2f1e60010c683479e74c63f96b09fb41603527cd131a9959e2aee1e5a8b0caf270b365e5ca77d4a6b18aae659b60a86150bb3979073528877029b35aecd2072
+ languageName: node
+ linkType: hard
+
"react-refresh@npm:0.14.0":
version: 0.14.0
resolution: "react-refresh@npm:0.14.0"
@@ -12804,6 +13279,21 @@ __metadata:
languageName: node
linkType: hard
+"react-transition-group@npm:^4.4.5":
+ version: 4.4.5
+ resolution: "react-transition-group@npm:4.4.5"
+ dependencies:
+ "@babel/runtime": "npm:^7.5.5"
+ dom-helpers: "npm:^5.0.1"
+ loose-envify: "npm:^1.4.0"
+ prop-types: "npm:^15.6.2"
+ peerDependencies:
+ react: ">=16.6.0"
+ react-dom: ">=16.6.0"
+ checksum: 10c0/2ba754ba748faefa15f87c96dfa700d5525054a0141de8c75763aae6734af0740e77e11261a1e8f4ffc08fd9ab78510122e05c21c2d79066c38bb6861a886c82
+ languageName: node
+ linkType: hard
+
"react@npm:18.3.1":
version: 18.3.1
resolution: "react@npm:18.3.1"
@@ -13089,7 +13579,7 @@ __metadata:
languageName: node
linkType: hard
-"resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.20.0, resolve@npm:^1.22.4":
+"resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.4":
version: 1.22.8
resolution: "resolve@npm:1.22.8"
dependencies:
@@ -13115,7 +13605,7 @@ __metadata:
languageName: node
linkType: hard
-"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin":
+"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin":
version: 1.22.8
resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d"
dependencies:
@@ -13677,6 +14167,13 @@ __metadata:
languageName: node
linkType: hard
+"source-map@npm:^0.5.7":
+ version: 0.5.7
+ resolution: "source-map@npm:0.5.7"
+ checksum: 10c0/904e767bb9c494929be013017380cbba013637da1b28e5943b566031e29df04fba57edf3f093e0914be094648b577372bd8ad247fa98cfba9c600794cd16b599
+ languageName: node
+ linkType: hard
+
"source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.0, source-map@npm:~0.6.1":
version: 0.6.1
resolution: "source-map@npm:0.6.1"
@@ -14075,6 +14572,13 @@ __metadata:
languageName: node
linkType: hard
+"stylis@npm:4.2.0":
+ version: 4.2.0
+ resolution: "stylis@npm:4.2.0"
+ checksum: 10c0/a7128ad5a8ed72652c6eba46bed4f416521bc9745a460ef5741edc725252cebf36ee45e33a8615a7057403c93df0866ab9ee955960792db210bb80abd5ac6543
+ languageName: node
+ linkType: hard
+
"supports-color@npm:^5.3.0":
version: 5.5.0
resolution: "supports-color@npm:5.5.0"
@@ -15360,6 +15864,13 @@ __metadata:
languageName: node
linkType: hard
+"yaml@npm:^1.10.0":
+ version: 1.10.2
+ resolution: "yaml@npm:1.10.2"
+ checksum: 10c0/5c28b9eb7adc46544f28d9a8d20c5b3cb1215a886609a2fd41f51628d8aaa5878ccd628b755dbcd29f6bb4921bd04ffbc6dcc370689bb96e594e2f9813d2605f
+ languageName: node
+ linkType: hard
+
"yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3":
version: 20.2.9
resolution: "yargs-parser@npm:20.2.9"