├── .gitignore
├── README.md
├── bin
└── www
├── client
└── build
│ ├── asset-manifest.json
│ ├── assets
│ ├── auth-illustration.svg
│ ├── imgs
│ │ └── bg
│ │ │ └── error-404.png
│ ├── logo.svg
│ └── logoIcon.svg
│ ├── favicon-16x16.png
│ ├── favicon-32x32.png
│ ├── favicon.ico
│ ├── favicon1.ico
│ ├── index.html
│ ├── manifest.json
│ ├── robots.txt
│ └── static
│ ├── css
│ ├── main.6c657092.css
│ └── main.6c657092.css.map
│ ├── js
│ ├── 787.59db3541.chunk.js
│ ├── 787.59db3541.chunk.js.map
│ ├── main.ed45ed54.js
│ ├── main.ed45ed54.js.LICENSE.txt
│ └── main.ed45ed54.js.map
│ └── media
│ ├── roboto-all-300-normal.168d6383e73339293ac3.woff
│ ├── roboto-all-400-normal.c5d001fa922fa66a147f.woff
│ ├── roboto-all-500-normal.0ab669b7a0d19b178f57.woff
│ ├── roboto-all-700-normal.a457fde362a540fcadff.woff
│ ├── roboto-cyrillic-300-normal.1431d1cef06ad04f5458.woff2
│ ├── roboto-cyrillic-400-normal.71a33b6b50457b2c903a.woff2
│ ├── roboto-cyrillic-500-normal.cad7d3d9cb265e334e58.woff2
│ ├── roboto-cyrillic-700-normal.d010f1f324e111a22e53.woff2
│ ├── roboto-cyrillic-ext-300-normal.4777461b144e55145268.woff2
│ ├── roboto-cyrillic-ext-400-normal.804378952da8a10faae2.woff2
│ ├── roboto-cyrillic-ext-500-normal.62ced72e5832f02c2796.woff2
│ ├── roboto-cyrillic-ext-700-normal.be4d02458ce53887dc37.woff2
│ ├── roboto-greek-300-normal.db2632771401f61463fe.woff2
│ ├── roboto-greek-400-normal.c35e4c3958e209d17b31.woff2
│ ├── roboto-greek-500-normal.9ac81fefbe6c319ea40b.woff2
│ ├── roboto-greek-700-normal.50e795c1345353b0e996.woff2
│ ├── roboto-greek-ext-300-normal.35b9d6be04b95f0f0530.woff2
│ ├── roboto-greek-ext-400-normal.169619821ea93019d1bb.woff2
│ ├── roboto-greek-ext-500-normal.6fb9cffb1d3e72bf9293.woff2
│ ├── roboto-greek-ext-700-normal.bd9854c751441ccc1a70.woff2
│ ├── roboto-latin-300-normal.c48fb6765a9fcb00b330.woff2
│ ├── roboto-latin-400-normal.b009a76ad6afe4ebd301.woff2
│ ├── roboto-latin-500-normal.f25d774ecfe0996f8eb5.woff2
│ ├── roboto-latin-700-normal.227c93190fe7f82de3f8.woff2
│ ├── roboto-latin-ext-300-normal.dc7dcec8e3f654e0ed63.woff2
│ ├── roboto-latin-ext-400-normal.861b791f9de857a6e7bc.woff2
│ ├── roboto-latin-ext-500-normal.9165081d10e1ba601384.woff2
│ ├── roboto-latin-ext-700-normal.ed67ad54b1a8f5d21150.woff2
│ ├── roboto-vietnamese-300-normal.32fc45a3d1e8ea11fabc.woff2
│ ├── roboto-vietnamese-400-normal.3230f9b040f3c630e0c3.woff2
│ ├── roboto-vietnamese-500-normal.d8642a3d1d4ef6179644.woff2
│ └── roboto-vietnamese-700-normal.3425a701027d0699e369.woff2
├── config
├── config.js
├── express.js
├── mongoose.js
└── storeOptioins.js
├── controllers
├── auth.js
├── group.js
├── metrics.js
└── wage.js
├── middleware
├── auth.js
└── checkObjectId.js
├── models
├── group.js
├── metrics.js
├── user.js
└── wage.js
├── package-lock.json
├── package.json
├── routes
├── auth.js
├── group.js
├── metrics.js
└── routes.js
├── server.js
└── utils
├── auth.js
└── isEmpty.js
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .env
16 | .DS_Store
17 | .env.local
18 | .env.development.local
19 | .env.test.local
20 | .env.production.local
21 |
22 | npm-debug.log*
23 | yarn-debug.log*
24 | yarn-error.log*
25 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Smart-Metrics-Logbook-Backend
2 |
--------------------------------------------------------------------------------
/bin/www:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | /* Sets up the environment variables from your .env file*/
4 | require('dotenv').config();
5 |
6 | /**
7 | * Module dependencies.
8 | */
9 |
10 | var app = require('../server');
11 | var http = require('http');
12 | const mongoose = require('mongoose');
13 |
14 | /**
15 | * Get port from environment and store in Express.
16 | */
17 |
18 | var port = normalizePort(process.env.PORT || 8000);
19 | app.set('port', port);
20 |
21 | /**
22 | * Create HTTP server.
23 | */
24 |
25 | var server = http.createServer(app);
26 |
27 | /**
28 | * Listen on provided port, on all network interfaces.
29 | */
30 |
31 | server.listen(port);
32 | server.on('error', onError);
33 | server.on('listening', onListening);
34 |
35 | /**
36 | * Normalize a port into a number, string, or false.
37 | */
38 |
39 | function normalizePort(val) {
40 | var port = parseInt(val, 10);
41 |
42 | if (isNaN(port)) {
43 | // named pipe
44 | return val;
45 | }
46 |
47 | if (port >= 0) {
48 | // port number
49 | return port;
50 | }
51 |
52 | return false;
53 | }
54 |
55 | /**
56 | * Event listener for HTTP server "error" event.
57 | */
58 |
59 | function onError(error) {
60 | if (error.syscall !== 'listen') {
61 | throw error;
62 | }
63 |
64 | var bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port;
65 |
66 | // handle specific listen errors with friendly messages
67 | switch (error.code) {
68 | case 'EACCES':
69 | console.error(bind + ' requires elevated privileges');
70 | process.exit(1);
71 | break;
72 | case 'EADDRINUSE':
73 | console.error(bind + ' is already in use');
74 | process.exit(1);
75 | break;
76 | default:
77 | throw error;
78 | }
79 | }
80 |
81 | /**
82 | * Event listener for HTTP server "listening" event.
83 | */
84 | function onListening() {
85 | var addr = server.address();
86 | var bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port;
87 |
88 | console.log('Listening on ' + bind);
89 |
90 | //connect to db
91 | connectDatabase();
92 | }
93 |
94 | /**
95 | * use mongoose to connect to MongoDB Atlas
96 | */
97 |
98 | function connectDatabase() {
99 | //option object to avoid deprecation warnings
100 | mongoose
101 | .connect(process.env.MONGODB_URI_PRODUCTION, {
102 | useNewUrlParser: true,
103 | useCreateIndex: true,
104 | useUnifiedTopology: true,
105 | })
106 | .catch((e) => console.error('Connection error :' + e));
107 |
108 | //check pending connection
109 | //error may not return immediately
110 | const connection = mongoose.connection;
111 | connection.once('open', () => {
112 | console.log('Successfully connected to MongoDB');
113 | });
114 | }
115 |
--------------------------------------------------------------------------------
/client/build/asset-manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": {
3 | "main.css": "/static/css/main.6c657092.css",
4 | "main.js": "/static/js/main.ed45ed54.js",
5 | "static/js/787.59db3541.chunk.js": "/static/js/787.59db3541.chunk.js",
6 | "static/media/roboto-all-500-normal.woff": "/static/media/roboto-all-500-normal.0ab669b7a0d19b178f57.woff",
7 | "static/media/roboto-all-700-normal.woff": "/static/media/roboto-all-700-normal.a457fde362a540fcadff.woff",
8 | "static/media/roboto-all-400-normal.woff": "/static/media/roboto-all-400-normal.c5d001fa922fa66a147f.woff",
9 | "static/media/roboto-all-300-normal.woff": "/static/media/roboto-all-300-normal.168d6383e73339293ac3.woff",
10 | "static/media/roboto-latin-500-normal.woff2": "/static/media/roboto-latin-500-normal.f25d774ecfe0996f8eb5.woff2",
11 | "static/media/roboto-latin-700-normal.woff2": "/static/media/roboto-latin-700-normal.227c93190fe7f82de3f8.woff2",
12 | "static/media/roboto-latin-400-normal.woff2": "/static/media/roboto-latin-400-normal.b009a76ad6afe4ebd301.woff2",
13 | "static/media/roboto-latin-300-normal.woff2": "/static/media/roboto-latin-300-normal.c48fb6765a9fcb00b330.woff2",
14 | "static/media/roboto-cyrillic-ext-400-normal.woff2": "/static/media/roboto-cyrillic-ext-400-normal.804378952da8a10faae2.woff2",
15 | "static/media/roboto-cyrillic-ext-300-normal.woff2": "/static/media/roboto-cyrillic-ext-300-normal.4777461b144e55145268.woff2",
16 | "static/media/roboto-cyrillic-ext-500-normal.woff2": "/static/media/roboto-cyrillic-ext-500-normal.62ced72e5832f02c2796.woff2",
17 | "static/media/roboto-cyrillic-ext-700-normal.woff2": "/static/media/roboto-cyrillic-ext-700-normal.be4d02458ce53887dc37.woff2",
18 | "static/media/roboto-latin-ext-400-normal.woff2": "/static/media/roboto-latin-ext-400-normal.861b791f9de857a6e7bc.woff2",
19 | "static/media/roboto-latin-ext-700-normal.woff2": "/static/media/roboto-latin-ext-700-normal.ed67ad54b1a8f5d21150.woff2",
20 | "static/media/roboto-latin-ext-500-normal.woff2": "/static/media/roboto-latin-ext-500-normal.9165081d10e1ba601384.woff2",
21 | "static/media/roboto-latin-ext-300-normal.woff2": "/static/media/roboto-latin-ext-300-normal.dc7dcec8e3f654e0ed63.woff2",
22 | "static/media/roboto-cyrillic-500-normal.woff2": "/static/media/roboto-cyrillic-500-normal.cad7d3d9cb265e334e58.woff2",
23 | "static/media/roboto-cyrillic-700-normal.woff2": "/static/media/roboto-cyrillic-700-normal.d010f1f324e111a22e53.woff2",
24 | "static/media/roboto-cyrillic-400-normal.woff2": "/static/media/roboto-cyrillic-400-normal.71a33b6b50457b2c903a.woff2",
25 | "static/media/roboto-cyrillic-300-normal.woff2": "/static/media/roboto-cyrillic-300-normal.1431d1cef06ad04f5458.woff2",
26 | "static/media/roboto-greek-300-normal.woff2": "/static/media/roboto-greek-300-normal.db2632771401f61463fe.woff2",
27 | "static/media/roboto-greek-400-normal.woff2": "/static/media/roboto-greek-400-normal.c35e4c3958e209d17b31.woff2",
28 | "static/media/roboto-greek-500-normal.woff2": "/static/media/roboto-greek-500-normal.9ac81fefbe6c319ea40b.woff2",
29 | "static/media/roboto-greek-700-normal.woff2": "/static/media/roboto-greek-700-normal.50e795c1345353b0e996.woff2",
30 | "static/media/roboto-vietnamese-500-normal.woff2": "/static/media/roboto-vietnamese-500-normal.d8642a3d1d4ef6179644.woff2",
31 | "static/media/roboto-vietnamese-400-normal.woff2": "/static/media/roboto-vietnamese-400-normal.3230f9b040f3c630e0c3.woff2",
32 | "static/media/roboto-vietnamese-700-normal.woff2": "/static/media/roboto-vietnamese-700-normal.3425a701027d0699e369.woff2",
33 | "static/media/roboto-vietnamese-300-normal.woff2": "/static/media/roboto-vietnamese-300-normal.32fc45a3d1e8ea11fabc.woff2",
34 | "static/media/roboto-greek-ext-500-normal.woff2": "/static/media/roboto-greek-ext-500-normal.6fb9cffb1d3e72bf9293.woff2",
35 | "static/media/roboto-greek-ext-400-normal.woff2": "/static/media/roboto-greek-ext-400-normal.169619821ea93019d1bb.woff2",
36 | "static/media/roboto-greek-ext-300-normal.woff2": "/static/media/roboto-greek-ext-300-normal.35b9d6be04b95f0f0530.woff2",
37 | "static/media/roboto-greek-ext-700-normal.woff2": "/static/media/roboto-greek-ext-700-normal.bd9854c751441ccc1a70.woff2",
38 | "index.html": "/index.html",
39 | "main.6c657092.css.map": "/static/css/main.6c657092.css.map",
40 | "main.ed45ed54.js.map": "/static/js/main.ed45ed54.js.map",
41 | "787.59db3541.chunk.js.map": "/static/js/787.59db3541.chunk.js.map"
42 | },
43 | "entrypoints": [
44 | "static/css/main.6c657092.css",
45 | "static/js/main.ed45ed54.js"
46 | ]
47 | }
--------------------------------------------------------------------------------
/client/build/assets/imgs/bg/error-404.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/assets/imgs/bg/error-404.png
--------------------------------------------------------------------------------
/client/build/assets/logo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/client/build/assets/logoIcon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/client/build/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/favicon-16x16.png
--------------------------------------------------------------------------------
/client/build/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/favicon-32x32.png
--------------------------------------------------------------------------------
/client/build/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/favicon.ico
--------------------------------------------------------------------------------
/client/build/favicon1.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/favicon1.ico
--------------------------------------------------------------------------------
/client/build/index.html:
--------------------------------------------------------------------------------
1 |
Smart Metrcis Logbook
--------------------------------------------------------------------------------
/client/build/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "Smart Metrics Logbook",
3 | "name": "Smart Metrics Logbook",
4 | "icons": [
5 | {
6 | "src": "./favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | }
10 | ],
11 | "start_url": ".",
12 | "display": "standalone",
13 | "theme_color": "#000000",
14 | "background_color": "#ffffff"
15 | }
16 |
--------------------------------------------------------------------------------
/client/build/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/client/build/static/css/main.6c657092.css:
--------------------------------------------------------------------------------
1 | @font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:300;src:url(/static/media/roboto-cyrillic-ext-300-normal.4777461b144e55145268.woff2) format("woff2"),url(/static/media/roboto-all-300-normal.168d6383e73339293ac3.woff) format("woff");unicode-range:u+0460-052f,u+1c80-1c88,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:300;src:url(/static/media/roboto-cyrillic-300-normal.1431d1cef06ad04f5458.woff2) format("woff2"),url(/static/media/roboto-all-300-normal.168d6383e73339293ac3.woff) format("woff");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:300;src:url(/static/media/roboto-greek-ext-300-normal.35b9d6be04b95f0f0530.woff2) format("woff2"),url(/static/media/roboto-all-300-normal.168d6383e73339293ac3.woff) format("woff");unicode-range:u+1f??}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:300;src:url(/static/media/roboto-greek-300-normal.db2632771401f61463fe.woff2) format("woff2"),url(/static/media/roboto-all-300-normal.168d6383e73339293ac3.woff) format("woff");unicode-range:u+0370-03ff}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:300;src:url(/static/media/roboto-vietnamese-300-normal.32fc45a3d1e8ea11fabc.woff2) format("woff2"),url(/static/media/roboto-all-300-normal.168d6383e73339293ac3.woff) format("woff");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+1ea0-1ef9,u+20ab}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:300;src:url(/static/media/roboto-latin-ext-300-normal.dc7dcec8e3f654e0ed63.woff2) format("woff2"),url(/static/media/roboto-all-300-normal.168d6383e73339293ac3.woff) format("woff");unicode-range:u+0100-024f,u+0259,u+1e??,u+2020,u+20a0-20ab,u+20ad-20cf,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:300;src:url(/static/media/roboto-latin-300-normal.c48fb6765a9fcb00b330.woff2) format("woff2"),url(/static/media/roboto-all-300-normal.168d6383e73339293ac3.woff) format("woff");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:400;src:url(/static/media/roboto-cyrillic-ext-400-normal.804378952da8a10faae2.woff2) format("woff2"),url(/static/media/roboto-all-400-normal.c5d001fa922fa66a147f.woff) format("woff");unicode-range:u+0460-052f,u+1c80-1c88,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:400;src:url(/static/media/roboto-cyrillic-400-normal.71a33b6b50457b2c903a.woff2) format("woff2"),url(/static/media/roboto-all-400-normal.c5d001fa922fa66a147f.woff) format("woff");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:400;src:url(/static/media/roboto-greek-ext-400-normal.169619821ea93019d1bb.woff2) format("woff2"),url(/static/media/roboto-all-400-normal.c5d001fa922fa66a147f.woff) format("woff");unicode-range:u+1f??}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:400;src:url(/static/media/roboto-greek-400-normal.c35e4c3958e209d17b31.woff2) format("woff2"),url(/static/media/roboto-all-400-normal.c5d001fa922fa66a147f.woff) format("woff");unicode-range:u+0370-03ff}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:400;src:url(/static/media/roboto-vietnamese-400-normal.3230f9b040f3c630e0c3.woff2) format("woff2"),url(/static/media/roboto-all-400-normal.c5d001fa922fa66a147f.woff) format("woff");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+1ea0-1ef9,u+20ab}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:400;src:url(/static/media/roboto-latin-ext-400-normal.861b791f9de857a6e7bc.woff2) format("woff2"),url(/static/media/roboto-all-400-normal.c5d001fa922fa66a147f.woff) format("woff");unicode-range:u+0100-024f,u+0259,u+1e??,u+2020,u+20a0-20ab,u+20ad-20cf,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:400;src:url(/static/media/roboto-latin-400-normal.b009a76ad6afe4ebd301.woff2) format("woff2"),url(/static/media/roboto-all-400-normal.c5d001fa922fa66a147f.woff) format("woff");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:500;src:url(/static/media/roboto-cyrillic-ext-500-normal.62ced72e5832f02c2796.woff2) format("woff2"),url(/static/media/roboto-all-500-normal.0ab669b7a0d19b178f57.woff) format("woff");unicode-range:u+0460-052f,u+1c80-1c88,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:500;src:url(/static/media/roboto-cyrillic-500-normal.cad7d3d9cb265e334e58.woff2) format("woff2"),url(/static/media/roboto-all-500-normal.0ab669b7a0d19b178f57.woff) format("woff");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:500;src:url(/static/media/roboto-greek-ext-500-normal.6fb9cffb1d3e72bf9293.woff2) format("woff2"),url(/static/media/roboto-all-500-normal.0ab669b7a0d19b178f57.woff) format("woff");unicode-range:u+1f??}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:500;src:url(/static/media/roboto-greek-500-normal.9ac81fefbe6c319ea40b.woff2) format("woff2"),url(/static/media/roboto-all-500-normal.0ab669b7a0d19b178f57.woff) format("woff");unicode-range:u+0370-03ff}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:500;src:url(/static/media/roboto-vietnamese-500-normal.d8642a3d1d4ef6179644.woff2) format("woff2"),url(/static/media/roboto-all-500-normal.0ab669b7a0d19b178f57.woff) format("woff");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+1ea0-1ef9,u+20ab}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:500;src:url(/static/media/roboto-latin-ext-500-normal.9165081d10e1ba601384.woff2) format("woff2"),url(/static/media/roboto-all-500-normal.0ab669b7a0d19b178f57.woff) format("woff");unicode-range:u+0100-024f,u+0259,u+1e??,u+2020,u+20a0-20ab,u+20ad-20cf,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:500;src:url(/static/media/roboto-latin-500-normal.f25d774ecfe0996f8eb5.woff2) format("woff2"),url(/static/media/roboto-all-500-normal.0ab669b7a0d19b178f57.woff) format("woff");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:700;src:url(/static/media/roboto-cyrillic-ext-700-normal.be4d02458ce53887dc37.woff2) format("woff2"),url(/static/media/roboto-all-700-normal.a457fde362a540fcadff.woff) format("woff");unicode-range:u+0460-052f,u+1c80-1c88,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:700;src:url(/static/media/roboto-cyrillic-700-normal.d010f1f324e111a22e53.woff2) format("woff2"),url(/static/media/roboto-all-700-normal.a457fde362a540fcadff.woff) format("woff");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:700;src:url(/static/media/roboto-greek-ext-700-normal.bd9854c751441ccc1a70.woff2) format("woff2"),url(/static/media/roboto-all-700-normal.a457fde362a540fcadff.woff) format("woff");unicode-range:u+1f??}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:700;src:url(/static/media/roboto-greek-700-normal.50e795c1345353b0e996.woff2) format("woff2"),url(/static/media/roboto-all-700-normal.a457fde362a540fcadff.woff) format("woff");unicode-range:u+0370-03ff}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:700;src:url(/static/media/roboto-vietnamese-700-normal.3425a701027d0699e369.woff2) format("woff2"),url(/static/media/roboto-all-700-normal.a457fde362a540fcadff.woff) format("woff");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+1ea0-1ef9,u+20ab}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:700;src:url(/static/media/roboto-latin-ext-700-normal.ed67ad54b1a8f5d21150.woff2) format("woff2"),url(/static/media/roboto-all-700-normal.a457fde362a540fcadff.woff) format("woff");unicode-range:u+0100-024f,u+0259,u+1e??,u+2020,u+20a0-20ab,u+20ad-20cf,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:700;src:url(/static/media/roboto-latin-700-normal.227c93190fe7f82de3f8.woff2) format("woff2"),url(/static/media/roboto-all-700-normal.a457fde362a540fcadff.woff) format("woff");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}.circles-loader{display:inline-block;height:80px;position:relative;width:80px;z-index:1000}.circles-loader div{-webkit-animation:circles-loader 1.2s cubic-bezier(.5,0,.5,1) infinite;animation:circles-loader 1.2s cubic-bezier(.5,0,.5,1) infinite;-webkit-transform-origin:40px 40px;transform-origin:40px 40px}.circles-loader div:after{background:#797979;border-radius:50%;content:" ";display:block;height:7px;margin:-4px 0 0 -4px;position:absolute;width:7px}.circles-loader div:first-child{-webkit-animation-delay:-36ms;animation-delay:-36ms}.circles-loader div:first-child:after{left:63px;top:63px}.circles-loader div:nth-child(2){-webkit-animation-delay:-72ms;animation-delay:-72ms}.circles-loader div:nth-child(2):after{left:56px;top:68px}.circles-loader div:nth-child(3){-webkit-animation-delay:-.108s;animation-delay:-.108s}.circles-loader div:nth-child(3):after{left:48px;top:71px}.circles-loader div:nth-child(4){-webkit-animation-delay:-.144s;animation-delay:-.144s}.circles-loader div:nth-child(4):after{left:40px;top:72px}.circles-loader div:nth-child(5){-webkit-animation-delay:-.18s;animation-delay:-.18s}.circles-loader div:nth-child(5):after{left:32px;top:71px}.circles-loader div:nth-child(6){-webkit-animation-delay:-.216s;animation-delay:-.216s}.circles-loader div:nth-child(6):after{left:24px;top:68px}.circles-loader div:nth-child(7){-webkit-animation-delay:-.252s;animation-delay:-.252s}.circles-loader div:nth-child(7):after{left:17px;top:63px}.circles-loader div:nth-child(8){-webkit-animation-delay:-.288s;animation-delay:-.288s}.circles-loader div:nth-child(8):after{left:12px;top:56px}@-webkit-keyframes circles-loader{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes circles-loader{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}:root{--toastify-color-light:#fff;--toastify-color-dark:#121212;--toastify-color-info:#3498db;--toastify-color-success:#07bc0c;--toastify-color-warning:#f1c40f;--toastify-color-error:#e74c3c;--toastify-color-transparent:hsla(0,0%,100%,.7);--toastify-icon-color-info:var(--toastify-color-info);--toastify-icon-color-success:var(--toastify-color-success);--toastify-icon-color-warning:var(--toastify-color-warning);--toastify-icon-color-error:var(--toastify-color-error);--toastify-toast-width:320px;--toastify-toast-background:#fff;--toastify-toast-min-height:64px;--toastify-toast-max-height:800px;--toastify-font-family:sans-serif;--toastify-z-index:9999;--toastify-text-color-light:#757575;--toastify-text-color-dark:#fff;--toastify-text-color-info:#fff;--toastify-text-color-success:#fff;--toastify-text-color-warning:#fff;--toastify-text-color-error:#fff;--toastify-spinner-color:#616161;--toastify-spinner-color-empty-area:#e0e0e0;--toastify-color-progress-light:linear-gradient(90deg,#4cd964,#5ac8fa,#007aff,#34aadc,#5856d6,#ff2d55);--toastify-color-progress-dark:#bb86fc;--toastify-color-progress-info:var(--toastify-color-info);--toastify-color-progress-success:var(--toastify-color-success);--toastify-color-progress-warning:var(--toastify-color-warning);--toastify-color-progress-error:var(--toastify-color-error)}.Toastify__toast-container{box-sizing:border-box;color:#fff;padding:4px;position:fixed;-webkit-transform:translate3d(0,0,9999 px);-webkit-transform:translate3d(0,0,var(--toastify-z-index) px);width:320px;width:var(--toastify-toast-width);z-index:9999;z-index:var(--toastify-z-index)}.Toastify__toast-container--top-left{left:1em;top:1em}.Toastify__toast-container--top-center{left:50%;top:1em;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.Toastify__toast-container--top-right{right:1em;top:1em}.Toastify__toast-container--bottom-left{bottom:1em;left:1em}.Toastify__toast-container--bottom-center{bottom:1em;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.Toastify__toast-container--bottom-right{bottom:1em;right:1em}@media only screen and (max-width:480px){.Toastify__toast-container{left:0;margin:0;padding:0;width:100vw}.Toastify__toast-container--top-center,.Toastify__toast-container--top-left,.Toastify__toast-container--top-right{top:0;-webkit-transform:translateX(0);transform:translateX(0)}.Toastify__toast-container--bottom-center,.Toastify__toast-container--bottom-left,.Toastify__toast-container--bottom-right{bottom:0;-webkit-transform:translateX(0);transform:translateX(0)}.Toastify__toast-container--rtl{left:auto;right:0}}.Toastify__toast{border-radius:4px;box-shadow:0 1px 10px 0 rgba(0,0,0,.1),0 2px 15px 0 rgba(0,0,0,.05);box-sizing:border-box;cursor:default;direction:ltr;display:flex;font-family:sans-serif;font-family:var(--toastify-font-family);justify-content:space-between;margin-bottom:1rem;max-height:800px;max-height:var(--toastify-toast-max-height);min-height:64px;min-height:var(--toastify-toast-min-height);overflow:hidden;padding:8px;position:relative;z-index:0}.Toastify__toast--rtl{direction:rtl}.Toastify__toast--close-on-click{cursor:pointer}.Toastify__toast-body{align-items:center;display:flex;flex:1 1 auto;margin:auto 0;padding:6px}.Toastify__toast-body>div:last-child{flex:1 1;word-break:break-word}.Toastify__toast-icon{-webkit-margin-end:10px;display:flex;flex-shrink:0;margin-inline-end:10px;width:20px}.Toastify--animate{-webkit-animation-duration:.7s;animation-duration:.7s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.Toastify--animate-icon{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both}@media only screen and (max-width:480px){.Toastify__toast{border-radius:0;margin-bottom:0}}.Toastify__toast-theme--dark{background:#121212;background:var(--toastify-color-dark);color:#fff;color:var(--toastify-text-color-dark)}.Toastify__toast-theme--colored.Toastify__toast--default,.Toastify__toast-theme--light{background:#fff;background:var(--toastify-color-light);color:#757575;color:var(--toastify-text-color-light)}.Toastify__toast-theme--colored.Toastify__toast--info{background:#3498db;background:var(--toastify-color-info);color:#fff;color:var(--toastify-text-color-info)}.Toastify__toast-theme--colored.Toastify__toast--success{background:#07bc0c;background:var(--toastify-color-success);color:#fff;color:var(--toastify-text-color-success)}.Toastify__toast-theme--colored.Toastify__toast--warning{background:#f1c40f;background:var(--toastify-color-warning);color:#fff;color:var(--toastify-text-color-warning)}.Toastify__toast-theme--colored.Toastify__toast--error{background:#e74c3c;background:var(--toastify-color-error);color:#fff;color:var(--toastify-text-color-error)}.Toastify__progress-bar-theme--light{background:linear-gradient(90deg,#4cd964,#5ac8fa,#007aff,#34aadc,#5856d6,#ff2d55);background:var(--toastify-color-progress-light)}.Toastify__progress-bar-theme--dark{background:#bb86fc;background:var(--toastify-color-progress-dark)}.Toastify__progress-bar--info{background:#3498db;background:var(--toastify-color-progress-info)}.Toastify__progress-bar--success{background:#07bc0c;background:var(--toastify-color-progress-success)}.Toastify__progress-bar--warning{background:#f1c40f;background:var(--toastify-color-progress-warning)}.Toastify__progress-bar--error{background:#e74c3c;background:var(--toastify-color-progress-error)}.Toastify__progress-bar-theme--colored.Toastify__progress-bar--error,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--info,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--success,.Toastify__progress-bar-theme--colored.Toastify__progress-bar--warning{background:hsla(0,0%,100%,.7);background:var(--toastify-color-transparent)}.Toastify__close-button{align-self:flex-start;background:transparent;border:none;color:#fff;cursor:pointer;opacity:.7;outline:none;padding:0;transition:.3s ease}.Toastify__close-button--light{color:#000;opacity:.3}.Toastify__close-button>svg{fill:currentColor;height:16px;width:14px}.Toastify__close-button:focus,.Toastify__close-button:hover{opacity:1}@-webkit-keyframes Toastify__trackProgress{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}to{-webkit-transform:scaleX(0);transform:scaleX(0)}}@keyframes Toastify__trackProgress{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}to{-webkit-transform:scaleX(0);transform:scaleX(0)}}.Toastify__progress-bar{bottom:0;height:5px;left:0;opacity:.7;position:absolute;-webkit-transform-origin:left;transform-origin:left;width:100%;z-index:9999;z-index:var(--toastify-z-index)}.Toastify__progress-bar--animated{-webkit-animation:Toastify__trackProgress linear 1 forwards;animation:Toastify__trackProgress linear 1 forwards}.Toastify__progress-bar--controlled{transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s}.Toastify__progress-bar--rtl{left:auto;right:0;-webkit-transform-origin:right;transform-origin:right}.Toastify__spinner{-webkit-animation:Toastify__spin .65s linear infinite;animation:Toastify__spin .65s linear infinite;border:2px solid #e0e0e0;border-color:var(--toastify-spinner-color-empty-area);border-radius:100%;border-right-color:#616161;border-right-color:var(--toastify-spinner-color);box-sizing:border-box;height:20px;width:20px}@-webkit-keyframes Toastify__bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes Toastify__bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes Toastify__bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes Toastify__bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@-webkit-keyframes Toastify__bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes Toastify__bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes Toastify__bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes Toastify__bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@-webkit-keyframes Toastify__bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes Toastify__bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@-webkit-keyframes Toastify__bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@keyframes Toastify__bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes Toastify__bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes Toastify__bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.Toastify__bounce-enter--bottom-left,.Toastify__bounce-enter--top-left{-webkit-animation-name:Toastify__bounceInLeft;animation-name:Toastify__bounceInLeft}.Toastify__bounce-enter--bottom-right,.Toastify__bounce-enter--top-right{-webkit-animation-name:Toastify__bounceInRight;animation-name:Toastify__bounceInRight}.Toastify__bounce-enter--top-center{-webkit-animation-name:Toastify__bounceInDown;animation-name:Toastify__bounceInDown}.Toastify__bounce-enter--bottom-center{-webkit-animation-name:Toastify__bounceInUp;animation-name:Toastify__bounceInUp}.Toastify__bounce-exit--bottom-left,.Toastify__bounce-exit--top-left{-webkit-animation-name:Toastify__bounceOutLeft;animation-name:Toastify__bounceOutLeft}.Toastify__bounce-exit--bottom-right,.Toastify__bounce-exit--top-right{-webkit-animation-name:Toastify__bounceOutRight;animation-name:Toastify__bounceOutRight}.Toastify__bounce-exit--top-center{-webkit-animation-name:Toastify__bounceOutUp;animation-name:Toastify__bounceOutUp}.Toastify__bounce-exit--bottom-center{-webkit-animation-name:Toastify__bounceOutDown;animation-name:Toastify__bounceOutDown}@-webkit-keyframes Toastify__zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes Toastify__zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@-webkit-keyframes Toastify__zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes Toastify__zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.Toastify__zoom-enter{-webkit-animation-name:Toastify__zoomIn;animation-name:Toastify__zoomIn}.Toastify__zoom-exit{-webkit-animation-name:Toastify__zoomOut;animation-name:Toastify__zoomOut}@-webkit-keyframes Toastify__flipIn{0%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}40%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}60%{opacity:1;-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg)}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes Toastify__flipIn{0%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}40%{-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}60%{opacity:1;-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg)}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@-webkit-keyframes Toastify__flipOut{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{opacity:1;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}to{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}}@keyframes Toastify__flipOut{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{opacity:1;-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg)}to{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}}.Toastify__flip-enter{-webkit-animation-name:Toastify__flipIn;animation-name:Toastify__flipIn}.Toastify__flip-exit{-webkit-animation-name:Toastify__flipOut;animation-name:Toastify__flipOut}@-webkit-keyframes Toastify__slideInRight{0%{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInRight{0%{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideInLeft{0%{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInLeft{0%{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideInUp{0%{-webkit-transform:translate3d(0,110%,0);transform:translate3d(0,110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInUp{0%{-webkit-transform:translate3d(0,110%,0);transform:translate3d(0,110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideInDown{0%{-webkit-transform:translate3d(0,-110%,0);transform:translate3d(0,-110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInDown{0%{-webkit-transform:translate3d(0,-110%,0);transform:translate3d(0,-110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:hidden}}@keyframes Toastify__slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:hidden}}@-webkit-keyframes Toastify__slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:hidden}}@keyframes Toastify__slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:hidden}}@-webkit-keyframes Toastify__slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,500px,0);transform:translate3d(0,500px,0);visibility:hidden}}@keyframes Toastify__slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,500px,0);transform:translate3d(0,500px,0);visibility:hidden}}@-webkit-keyframes Toastify__slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,-500px,0);transform:translate3d(0,-500px,0);visibility:hidden}}@keyframes Toastify__slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,-500px,0);transform:translate3d(0,-500px,0);visibility:hidden}}.Toastify__slide-enter--bottom-left,.Toastify__slide-enter--top-left{-webkit-animation-name:Toastify__slideInLeft;animation-name:Toastify__slideInLeft}.Toastify__slide-enter--bottom-right,.Toastify__slide-enter--top-right{-webkit-animation-name:Toastify__slideInRight;animation-name:Toastify__slideInRight}.Toastify__slide-enter--top-center{-webkit-animation-name:Toastify__slideInDown;animation-name:Toastify__slideInDown}.Toastify__slide-enter--bottom-center{-webkit-animation-name:Toastify__slideInUp;animation-name:Toastify__slideInUp}.Toastify__slide-exit--bottom-left,.Toastify__slide-exit--top-left{-webkit-animation-name:Toastify__slideOutLeft;animation-name:Toastify__slideOutLeft}.Toastify__slide-exit--bottom-right,.Toastify__slide-exit--top-right{-webkit-animation-name:Toastify__slideOutRight;animation-name:Toastify__slideOutRight}.Toastify__slide-exit--top-center{-webkit-animation-name:Toastify__slideOutUp;animation-name:Toastify__slideOutUp}.Toastify__slide-exit--bottom-center{-webkit-animation-name:Toastify__slideOutDown;animation-name:Toastify__slideOutDown}@-webkit-keyframes Toastify__spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes Toastify__spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}[data-simplebar]{align-content:flex-start;align-items:flex-start;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;position:relative}.simplebar-wrapper{height:inherit;max-height:inherit;max-width:inherit;overflow:hidden;width:inherit}.simplebar-mask{direction:inherit;height:auto!important;overflow:hidden;width:auto!important;z-index:0}.simplebar-mask,.simplebar-offset{bottom:0;left:0;margin:0;padding:0;position:absolute;right:0;top:0}.simplebar-offset{-webkit-overflow-scrolling:touch;box-sizing:inherit!important;direction:inherit!important;resize:none!important}.simplebar-content-wrapper{-ms-overflow-style:none;box-sizing:border-box!important;direction:inherit;display:block;height:100%;max-height:100%;max-width:100%;overflow:auto;position:relative;scrollbar-width:none;width:auto}.simplebar-content-wrapper::-webkit-scrollbar,.simplebar-hide-scrollbar::-webkit-scrollbar{display:none;height:0;width:0}.simplebar-content:after,.simplebar-content:before{content:" ";display:table}.simplebar-placeholder{max-height:100%;max-width:100%;pointer-events:none;width:100%}.simplebar-height-auto-observer-wrapper{box-sizing:inherit!important;flex-basis:0;flex-grow:inherit;flex-shrink:0;float:left;height:100%;margin:0;max-height:1px;max-width:1px;overflow:hidden;padding:0;pointer-events:none;position:relative;width:100%;z-index:-1}.simplebar-height-auto-observer{box-sizing:inherit;display:block;height:1000%;left:0;min-height:1px;min-width:1px;opacity:0;top:0;width:1000%;z-index:-1}.simplebar-height-auto-observer,.simplebar-track{overflow:hidden;pointer-events:none;position:absolute}.simplebar-track{bottom:0;right:0;z-index:1}[data-simplebar].simplebar-dragging,[data-simplebar].simplebar-dragging .simplebar-content{-webkit-touch-callout:none;pointer-events:none;-webkit-user-select:none;user-select:none}[data-simplebar].simplebar-dragging .simplebar-track{pointer-events:all}.simplebar-scrollbar{left:0;min-height:10px;position:absolute;right:0}.simplebar-scrollbar:before{background:#000;border-radius:7px;content:"";opacity:0;position:absolute;transition:opacity .2s linear .5s}.simplebar-scrollbar.simplebar-visible:before{opacity:.5;transition-delay:0s;transition-duration:0s}.simplebar-track.simplebar-vertical{top:0;width:11px}.simplebar-scrollbar:before{bottom:2px;left:2px;right:2px;top:2px}.simplebar-track.simplebar-horizontal{height:11px;left:0}.simplebar-track.simplebar-horizontal .simplebar-scrollbar{bottom:0;left:0;min-height:0;min-width:10px;right:auto;top:0;width:auto}[data-simplebar-direction=rtl] .simplebar-track.simplebar-vertical{left:0;right:auto}.simplebar-dummy-scrollbar-size{-ms-overflow-style:scrollbar!important;direction:rtl;height:500px;opacity:0;overflow-x:scroll;overflow-y:hidden;position:fixed;visibility:hidden;width:500px}.simplebar-dummy-scrollbar-size>div{height:200%;margin:10px 0;width:200%}.simplebar-hide-scrollbar{-ms-overflow-style:none;left:0;overflow-y:scroll;position:fixed;scrollbar-width:none;visibility:hidden}#root{--toastify-font-family:"Poppins",sans-serif;display:flex;flex:1 1 auto;flex-direction:column;font-family:Roboto,Helvetica,Arial,"sans-serif"!important;height:100%;width:100%}::-webkit-scrollbar{height:6px;width:6px}::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.2);border-radius:6px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}::-webkit-scrollbar-track{border-radius:6px}p{font-family:Roboto,Helvetica,Arial,"sans-serif"!important}
2 | /*# sourceMappingURL=main.6c657092.css.map*/
--------------------------------------------------------------------------------
/client/build/static/css/main.6c657092.css.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"static/css/main.6c657092.css","mappings":"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nB,2EAAiD,CAJjD,qBAAsB,CADtB,WAAY,CADZ,UN6QF,CO1QA,2CACE,kBAJA,uHPkRA,COvQA,GACE,SAAU,CACV,2EPyQF,COvQA,IACE,SAAU,CACV,yEPyQF,COvQA,IACE,uEPyQF,COvQA,IACE,uEPyQF,COvQA,GACE,qCPyQF,CACF,COjSA,mCACE,kBAJA,uHPkRA,COvQA,GACE,SAAU,CACV,2EPyQF,COvQA,IACE,SAAU,CACV,yEPyQF,COvQA,IACE,uEPyQF,COvQA,IACE,uEPyQF,COvQA,GACE,qCPyQF,CACF,COtQA,4CACE,IACE,SAAU,CACV,yEPwQF,COtQA,GACE,SAAU,CACV,2EPwQF,CACF,COhRA,oCACE,IACE,SAAU,CACV,yEPwQF,COtQA,GACE,SAAU,CACV,2EPwQF,CACF,COrQA,0CACE,kBA1CA,uHPkTA,COjQA,GACE,SAAU,CACV,6EPmQF,COjQA,IACE,SAAU,CACV,uEPmQF,COjQA,IACE,yEPmQF,COjQA,IACE,qEPmQF,COjQA,GACE,qCPmQF,CACF,CO3RA,kCACE,kBA1CA,uHPkTA,COjQA,GACE,SAAU,CACV,6EPmQF,COjQA,IACE,SAAU,CACV,uEPmQF,COjQA,IACE,yEPmQF,COjQA,IACE,qEPmQF,COjQA,GACE,qCPmQF,CACF,COhQA,2CACE,IACE,SAAU,CACV,uEPkQF,COhQA,GACE,SAAU,CACV,6EPkQF,CACF,CO1QA,mCACE,IACE,SAAU,CACV,uEPkQF,COhQA,GACE,SAAU,CACV,6EPkQF,CACF,CO/PA,wCACE,kBAhFA,uHPkVA,CO3PA,GACE,SAAU,CACV,2EP6PF,CO3PA,IACE,SAAU,CACV,yEP6PF,CO3PA,IACE,uEP6PF,CO3PA,IACE,uEP6PF,CO3PA,GACE,uDP6PF,CACF,COrRA,gCACE,kBAhFA,uHPkVA,CO3PA,GACE,SAAU,CACV,2EP6PF,CO3PA,IACE,SAAU,CACV,yEP6PF,CO3PA,IACE,uEP6PF,CO3PA,IACE,uEP6PF,CO3PA,GACE,uDP6PF,CACF,CO1PA,yCACE,IACE,yEP4PF,CO1PA,QAEE,SAAU,CAC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","sources":["../node_modules/@fontsource/roboto/300.css","../node_modules/@fontsource/roboto/400.css","../node_modules/@fontsource/roboto/500.css","../node_modules/@fontsource/roboto/700.css","components/loader/CirclesLoader.scss","../node_modules/react-toastify/scss/_variables.scss","../node_modules/react-toastify/dist/ReactToastify.css","../node_modules/react-toastify/scss/_toastContainer.scss","../node_modules/react-toastify/scss/_toast.scss","../node_modules/react-toastify/scss/_theme.scss","../node_modules/react-toastify/scss/_closeButton.scss","../node_modules/react-toastify/scss/_progressBar.scss","../node_modules/react-toastify/scss/_icons.scss","../node_modules/react-toastify/scss/animations/_bounce.scss","../node_modules/react-toastify/scss/animations/_zoom.scss","../node_modules/react-toastify/scss/animations/_flip.scss","../node_modules/react-toastify/scss/animations/_slide.scss","../node_modules/react-toastify/scss/animations/_spin.scss","../node_modules/simplebar-react/dist/simplebar.min.css","styles/index.scss"],"sourcesContent":["/* roboto-cyrillic-ext-300-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 300;\n src: url('./files/roboto-cyrillic-ext-300-normal.woff2') format('woff2'), url('./files/roboto-all-300-normal.woff') format('woff');\n unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;\n}\n/* roboto-cyrillic-300-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 300;\n src: url('./files/roboto-cyrillic-300-normal.woff2') format('woff2'), url('./files/roboto-all-300-normal.woff') format('woff');\n unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;\n}\n/* roboto-greek-ext-300-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 300;\n src: url('./files/roboto-greek-ext-300-normal.woff2') format('woff2'), url('./files/roboto-all-300-normal.woff') format('woff');\n unicode-range: U+1F00-1FFF;\n}\n/* roboto-greek-300-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 300;\n src: url('./files/roboto-greek-300-normal.woff2') format('woff2'), url('./files/roboto-all-300-normal.woff') format('woff');\n unicode-range: U+0370-03FF;\n}\n/* roboto-vietnamese-300-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 300;\n src: url('./files/roboto-vietnamese-300-normal.woff2') format('woff2'), url('./files/roboto-all-300-normal.woff') format('woff');\n unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB;\n}\n/* roboto-latin-ext-300-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 300;\n src: url('./files/roboto-latin-ext-300-normal.woff2') format('woff2'), url('./files/roboto-all-300-normal.woff') format('woff');\n unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;\n}\n/* roboto-latin-300-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 300;\n src: url('./files/roboto-latin-300-normal.woff2') format('woff2'), url('./files/roboto-all-300-normal.woff') format('woff');\n unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;\n}\n","/* roboto-cyrillic-ext-400-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('./files/roboto-cyrillic-ext-400-normal.woff2') format('woff2'), url('./files/roboto-all-400-normal.woff') format('woff');\n unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;\n}\n/* roboto-cyrillic-400-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('./files/roboto-cyrillic-400-normal.woff2') format('woff2'), url('./files/roboto-all-400-normal.woff') format('woff');\n unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;\n}\n/* roboto-greek-ext-400-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('./files/roboto-greek-ext-400-normal.woff2') format('woff2'), url('./files/roboto-all-400-normal.woff') format('woff');\n unicode-range: U+1F00-1FFF;\n}\n/* roboto-greek-400-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('./files/roboto-greek-400-normal.woff2') format('woff2'), url('./files/roboto-all-400-normal.woff') format('woff');\n unicode-range: U+0370-03FF;\n}\n/* roboto-vietnamese-400-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('./files/roboto-vietnamese-400-normal.woff2') format('woff2'), url('./files/roboto-all-400-normal.woff') format('woff');\n unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB;\n}\n/* roboto-latin-ext-400-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('./files/roboto-latin-ext-400-normal.woff2') format('woff2'), url('./files/roboto-all-400-normal.woff') format('woff');\n unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;\n}\n/* roboto-latin-400-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('./files/roboto-latin-400-normal.woff2') format('woff2'), url('./files/roboto-all-400-normal.woff') format('woff');\n unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;\n}\n","/* roboto-cyrillic-ext-500-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 500;\n src: url('./files/roboto-cyrillic-ext-500-normal.woff2') format('woff2'), url('./files/roboto-all-500-normal.woff') format('woff');\n unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;\n}\n/* roboto-cyrillic-500-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 500;\n src: url('./files/roboto-cyrillic-500-normal.woff2') format('woff2'), url('./files/roboto-all-500-normal.woff') format('woff');\n unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;\n}\n/* roboto-greek-ext-500-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 500;\n src: url('./files/roboto-greek-ext-500-normal.woff2') format('woff2'), url('./files/roboto-all-500-normal.woff') format('woff');\n unicode-range: U+1F00-1FFF;\n}\n/* roboto-greek-500-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 500;\n src: url('./files/roboto-greek-500-normal.woff2') format('woff2'), url('./files/roboto-all-500-normal.woff') format('woff');\n unicode-range: U+0370-03FF;\n}\n/* roboto-vietnamese-500-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 500;\n src: url('./files/roboto-vietnamese-500-normal.woff2') format('woff2'), url('./files/roboto-all-500-normal.woff') format('woff');\n unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB;\n}\n/* roboto-latin-ext-500-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 500;\n src: url('./files/roboto-latin-ext-500-normal.woff2') format('woff2'), url('./files/roboto-all-500-normal.woff') format('woff');\n unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;\n}\n/* roboto-latin-500-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 500;\n src: url('./files/roboto-latin-500-normal.woff2') format('woff2'), url('./files/roboto-all-500-normal.woff') format('woff');\n unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;\n}\n","/* roboto-cyrillic-ext-700-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 700;\n src: url('./files/roboto-cyrillic-ext-700-normal.woff2') format('woff2'), url('./files/roboto-all-700-normal.woff') format('woff');\n unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;\n}\n/* roboto-cyrillic-700-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 700;\n src: url('./files/roboto-cyrillic-700-normal.woff2') format('woff2'), url('./files/roboto-all-700-normal.woff') format('woff');\n unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;\n}\n/* roboto-greek-ext-700-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 700;\n src: url('./files/roboto-greek-ext-700-normal.woff2') format('woff2'), url('./files/roboto-all-700-normal.woff') format('woff');\n unicode-range: U+1F00-1FFF;\n}\n/* roboto-greek-700-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 700;\n src: url('./files/roboto-greek-700-normal.woff2') format('woff2'), url('./files/roboto-all-700-normal.woff') format('woff');\n unicode-range: U+0370-03FF;\n}\n/* roboto-vietnamese-700-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 700;\n src: url('./files/roboto-vietnamese-700-normal.woff2') format('woff2'), url('./files/roboto-all-700-normal.woff') format('woff');\n unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB;\n}\n/* roboto-latin-ext-700-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 700;\n src: url('./files/roboto-latin-ext-700-normal.woff2') format('woff2'), url('./files/roboto-all-700-normal.woff') format('woff');\n unicode-range: U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF;\n}\n/* roboto-latin-700-normal*/\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 700;\n src: url('./files/roboto-latin-700-normal.woff2') format('woff2'), url('./files/roboto-all-700-normal.woff') format('woff');\n unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;\n}\n",".circles-loader {\r\n display: inline-block;\r\n position: relative;\r\n width: 80px;\r\n height: 80px;\r\n z-index: 1000;\r\n}\r\n.circles-loader div {\r\n animation: circles-loader 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\r\n transform-origin: 40px 40px;\r\n}\r\n.circles-loader div:after {\r\n content: \" \";\r\n display: block;\r\n position: absolute;\r\n width: 7px;\r\n height: 7px;\r\n border-radius: 50%;\r\n background: #797979;\r\n margin: -4px 0 0 -4px;\r\n}\r\n.circles-loader div:nth-child(1) {\r\n animation-delay: -0.036s;\r\n}\r\n.circles-loader div:nth-child(1):after {\r\n top: 63px;\r\n left: 63px;\r\n}\r\n.circles-loader div:nth-child(2) {\r\n animation-delay: -0.072s;\r\n}\r\n.circles-loader div:nth-child(2):after {\r\n top: 68px;\r\n left: 56px;\r\n}\r\n.circles-loader div:nth-child(3) {\r\n animation-delay: -0.108s;\r\n}\r\n.circles-loader div:nth-child(3):after {\r\n top: 71px;\r\n left: 48px;\r\n}\r\n.circles-loader div:nth-child(4) {\r\n animation-delay: -0.144s;\r\n}\r\n.circles-loader div:nth-child(4):after {\r\n top: 72px;\r\n left: 40px;\r\n}\r\n.circles-loader div:nth-child(5) {\r\n animation-delay: -0.18s;\r\n}\r\n.circles-loader div:nth-child(5):after {\r\n top: 71px;\r\n left: 32px;\r\n}\r\n.circles-loader div:nth-child(6) {\r\n animation-delay: -0.216s;\r\n}\r\n.circles-loader div:nth-child(6):after {\r\n top: 68px;\r\n left: 24px;\r\n}\r\n.circles-loader div:nth-child(7) {\r\n animation-delay: -0.252s;\r\n}\r\n.circles-loader div:nth-child(7):after {\r\n top: 63px;\r\n left: 17px;\r\n}\r\n.circles-loader div:nth-child(8) {\r\n animation-delay: -0.288s;\r\n}\r\n.circles-loader div:nth-child(8):after {\r\n top: 56px;\r\n left: 12px;\r\n}\r\n@keyframes circles-loader {\r\n 0% {\r\n transform: rotate(0deg);\r\n }\r\n 100% {\r\n transform: rotate(360deg);\r\n }\r\n}\r\n","$rt-namespace: 'Toastify';\n$rt-mobile: 'only screen and (max-width : 480px)' !default;\n\n:root {\n --toastify-color-light: #fff;\n --toastify-color-dark: #121212;\n --toastify-color-info: #3498db;\n --toastify-color-success: #07bc0c;\n --toastify-color-warning: #f1c40f;\n --toastify-color-error: #e74c3c;\n --toastify-color-transparent: rgba(255, 255, 255, 0.7);\n\n --toastify-icon-color-info: var(--toastify-color-info);\n --toastify-icon-color-success: var(--toastify-color-success);\n --toastify-icon-color-warning: var(--toastify-color-warning);\n --toastify-icon-color-error: var(--toastify-color-error);\n\n --toastify-toast-width: 320px;\n --toastify-toast-background: #fff;\n --toastify-toast-min-height: 64px;\n --toastify-toast-max-height: 800px;\n --toastify-font-family: sans-serif;\n --toastify-z-index: 9999;\n\n --toastify-text-color-light: #757575;\n --toastify-text-color-dark: #fff;\n\n //Used only for colored theme\n --toastify-text-color-info: #fff;\n --toastify-text-color-success: #fff;\n --toastify-text-color-warning: #fff;\n --toastify-text-color-error: #fff;\n\n --toastify-spinner-color: #616161;\n --toastify-spinner-color-empty-area: #e0e0e0;\n\n // Used when no type is provided\n --toastify-color-progress-light: linear-gradient(\n to right,\n #4cd964,\n #5ac8fa,\n #007aff,\n #34aadc,\n #5856d6,\n #ff2d55\n );\n // Used when no type is provided\n --toastify-color-progress-dark: #bb86fc;\n --toastify-color-progress-info: var(--toastify-color-info);\n --toastify-color-progress-success: var(--toastify-color-success);\n --toastify-color-progress-warning: var(--toastify-color-warning);\n --toastify-color-progress-error: var(--toastify-color-error);\n}\n",":root {\n --toastify-color-light: #fff;\n --toastify-color-dark: #121212;\n --toastify-color-info: #3498db;\n --toastify-color-success: #07bc0c;\n --toastify-color-warning: #f1c40f;\n --toastify-color-error: #e74c3c;\n --toastify-color-transparent: rgba(255, 255, 255, 0.7);\n --toastify-icon-color-info: var(--toastify-color-info);\n --toastify-icon-color-success: var(--toastify-color-success);\n --toastify-icon-color-warning: var(--toastify-color-warning);\n --toastify-icon-color-error: var(--toastify-color-error);\n --toastify-toast-width: 320px;\n --toastify-toast-background: #fff;\n --toastify-toast-min-height: 64px;\n --toastify-toast-max-height: 800px;\n --toastify-font-family: sans-serif;\n --toastify-z-index: 9999;\n --toastify-text-color-light: #757575;\n --toastify-text-color-dark: #fff;\n --toastify-text-color-info: #fff;\n --toastify-text-color-success: #fff;\n --toastify-text-color-warning: #fff;\n --toastify-text-color-error: #fff;\n --toastify-spinner-color: #616161;\n --toastify-spinner-color-empty-area: #e0e0e0;\n --toastify-color-progress-light: linear-gradient(\n to right,\n #4cd964,\n #5ac8fa,\n #007aff,\n #34aadc,\n #5856d6,\n #ff2d55\n );\n --toastify-color-progress-dark: #bb86fc;\n --toastify-color-progress-info: var(--toastify-color-info);\n --toastify-color-progress-success: var(--toastify-color-success);\n --toastify-color-progress-warning: var(--toastify-color-warning);\n --toastify-color-progress-error: var(--toastify-color-error);\n}\n\n.Toastify__toast-container {\n z-index: var(--toastify-z-index);\n -webkit-transform: translate3d(0, 0, var(--toastify-z-index) px);\n position: fixed;\n padding: 4px;\n width: var(--toastify-toast-width);\n box-sizing: border-box;\n color: #fff;\n}\n.Toastify__toast-container--top-left {\n top: 1em;\n left: 1em;\n}\n.Toastify__toast-container--top-center {\n top: 1em;\n left: 50%;\n transform: translateX(-50%);\n}\n.Toastify__toast-container--top-right {\n top: 1em;\n right: 1em;\n}\n.Toastify__toast-container--bottom-left {\n bottom: 1em;\n left: 1em;\n}\n.Toastify__toast-container--bottom-center {\n bottom: 1em;\n left: 50%;\n transform: translateX(-50%);\n}\n.Toastify__toast-container--bottom-right {\n bottom: 1em;\n right: 1em;\n}\n\n@media only screen and (max-width : 480px) {\n .Toastify__toast-container {\n width: 100vw;\n padding: 0;\n left: 0;\n margin: 0;\n }\n .Toastify__toast-container--top-left, .Toastify__toast-container--top-center, .Toastify__toast-container--top-right {\n top: 0;\n transform: translateX(0);\n }\n .Toastify__toast-container--bottom-left, .Toastify__toast-container--bottom-center, .Toastify__toast-container--bottom-right {\n bottom: 0;\n transform: translateX(0);\n }\n .Toastify__toast-container--rtl {\n right: 0;\n left: initial;\n }\n}\n.Toastify__toast {\n position: relative;\n min-height: var(--toastify-toast-min-height);\n box-sizing: border-box;\n margin-bottom: 1rem;\n padding: 8px;\n border-radius: 4px;\n box-shadow: 0 1px 10px 0 rgba(0, 0, 0, 0.1), 0 2px 15px 0 rgba(0, 0, 0, 0.05);\n display: -ms-flexbox;\n display: flex;\n -ms-flex-pack: justify;\n justify-content: space-between;\n max-height: var(--toastify-toast-max-height);\n overflow: hidden;\n font-family: var(--toastify-font-family);\n cursor: default;\n direction: ltr;\n /* webkit only issue #791 */\n z-index: 0;\n}\n.Toastify__toast--rtl {\n direction: rtl;\n}\n.Toastify__toast--close-on-click {\n cursor: pointer;\n}\n.Toastify__toast-body {\n margin: auto 0;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n padding: 6px;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n}\n.Toastify__toast-body > div:last-child {\n word-break: break-word;\n -ms-flex: 1;\n flex: 1;\n}\n.Toastify__toast-icon {\n -webkit-margin-end: 10px;\n margin-inline-end: 10px;\n width: 20px;\n -ms-flex-negative: 0;\n flex-shrink: 0;\n display: -ms-flexbox;\n display: flex;\n}\n\n.Toastify--animate {\n animation-fill-mode: both;\n animation-duration: 0.7s;\n}\n\n.Toastify--animate-icon {\n animation-fill-mode: both;\n animation-duration: 0.3s;\n}\n\n@media only screen and (max-width : 480px) {\n .Toastify__toast {\n margin-bottom: 0;\n border-radius: 0;\n }\n}\n.Toastify__toast-theme--dark {\n background: var(--toastify-color-dark);\n color: var(--toastify-text-color-dark);\n}\n.Toastify__toast-theme--light {\n background: var(--toastify-color-light);\n color: var(--toastify-text-color-light);\n}\n.Toastify__toast-theme--colored.Toastify__toast--default {\n background: var(--toastify-color-light);\n color: var(--toastify-text-color-light);\n}\n.Toastify__toast-theme--colored.Toastify__toast--info {\n color: var(--toastify-text-color-info);\n background: var(--toastify-color-info);\n}\n.Toastify__toast-theme--colored.Toastify__toast--success {\n color: var(--toastify-text-color-success);\n background: var(--toastify-color-success);\n}\n.Toastify__toast-theme--colored.Toastify__toast--warning {\n color: var(--toastify-text-color-warning);\n background: var(--toastify-color-warning);\n}\n.Toastify__toast-theme--colored.Toastify__toast--error {\n color: var(--toastify-text-color-error);\n background: var(--toastify-color-error);\n}\n\n.Toastify__progress-bar-theme--light {\n background: var(--toastify-color-progress-light);\n}\n.Toastify__progress-bar-theme--dark {\n background: var(--toastify-color-progress-dark);\n}\n.Toastify__progress-bar--info {\n background: var(--toastify-color-progress-info);\n}\n.Toastify__progress-bar--success {\n background: var(--toastify-color-progress-success);\n}\n.Toastify__progress-bar--warning {\n background: var(--toastify-color-progress-warning);\n}\n.Toastify__progress-bar--error {\n background: var(--toastify-color-progress-error);\n}\n.Toastify__progress-bar-theme--colored.Toastify__progress-bar--info, .Toastify__progress-bar-theme--colored.Toastify__progress-bar--success, .Toastify__progress-bar-theme--colored.Toastify__progress-bar--warning, .Toastify__progress-bar-theme--colored.Toastify__progress-bar--error {\n background: var(--toastify-color-transparent);\n}\n\n.Toastify__close-button {\n color: #fff;\n background: transparent;\n outline: none;\n border: none;\n padding: 0;\n cursor: pointer;\n opacity: 0.7;\n transition: 0.3s ease;\n -ms-flex-item-align: start;\n align-self: flex-start;\n}\n.Toastify__close-button--light {\n color: #000;\n opacity: 0.3;\n}\n.Toastify__close-button > svg {\n fill: currentColor;\n height: 16px;\n width: 14px;\n}\n.Toastify__close-button:hover, .Toastify__close-button:focus {\n opacity: 1;\n}\n\n@keyframes Toastify__trackProgress {\n 0% {\n transform: scaleX(1);\n }\n 100% {\n transform: scaleX(0);\n }\n}\n.Toastify__progress-bar {\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 5px;\n z-index: var(--toastify-z-index);\n opacity: 0.7;\n transform-origin: left;\n}\n.Toastify__progress-bar--animated {\n animation: Toastify__trackProgress linear 1 forwards;\n}\n.Toastify__progress-bar--controlled {\n transition: transform 0.2s;\n}\n.Toastify__progress-bar--rtl {\n right: 0;\n left: initial;\n transform-origin: right;\n}\n\n.Toastify__spinner {\n width: 20px;\n height: 20px;\n box-sizing: border-box;\n border: 2px solid;\n border-radius: 100%;\n border-color: var(--toastify-spinner-color-empty-area);\n border-right-color: var(--toastify-spinner-color);\n animation: Toastify__spin 0.65s linear infinite;\n}\n\n@keyframes Toastify__bounceInRight {\n from, 60%, 75%, 90%, to {\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n }\n from {\n opacity: 0;\n transform: translate3d(3000px, 0, 0);\n }\n 60% {\n opacity: 1;\n transform: translate3d(-25px, 0, 0);\n }\n 75% {\n transform: translate3d(10px, 0, 0);\n }\n 90% {\n transform: translate3d(-5px, 0, 0);\n }\n to {\n transform: none;\n }\n}\n@keyframes Toastify__bounceOutRight {\n 20% {\n opacity: 1;\n transform: translate3d(-20px, 0, 0);\n }\n to {\n opacity: 0;\n transform: translate3d(2000px, 0, 0);\n }\n}\n@keyframes Toastify__bounceInLeft {\n from, 60%, 75%, 90%, to {\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n }\n 0% {\n opacity: 0;\n transform: translate3d(-3000px, 0, 0);\n }\n 60% {\n opacity: 1;\n transform: translate3d(25px, 0, 0);\n }\n 75% {\n transform: translate3d(-10px, 0, 0);\n }\n 90% {\n transform: translate3d(5px, 0, 0);\n }\n to {\n transform: none;\n }\n}\n@keyframes Toastify__bounceOutLeft {\n 20% {\n opacity: 1;\n transform: translate3d(20px, 0, 0);\n }\n to {\n opacity: 0;\n transform: translate3d(-2000px, 0, 0);\n }\n}\n@keyframes Toastify__bounceInUp {\n from, 60%, 75%, 90%, to {\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n }\n from {\n opacity: 0;\n transform: translate3d(0, 3000px, 0);\n }\n 60% {\n opacity: 1;\n transform: translate3d(0, -20px, 0);\n }\n 75% {\n transform: translate3d(0, 10px, 0);\n }\n 90% {\n transform: translate3d(0, -5px, 0);\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n}\n@keyframes Toastify__bounceOutUp {\n 20% {\n transform: translate3d(0, -10px, 0);\n }\n 40%, 45% {\n opacity: 1;\n transform: translate3d(0, 20px, 0);\n }\n to {\n opacity: 0;\n transform: translate3d(0, -2000px, 0);\n }\n}\n@keyframes Toastify__bounceInDown {\n from, 60%, 75%, 90%, to {\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n }\n 0% {\n opacity: 0;\n transform: translate3d(0, -3000px, 0);\n }\n 60% {\n opacity: 1;\n transform: translate3d(0, 25px, 0);\n }\n 75% {\n transform: translate3d(0, -10px, 0);\n }\n 90% {\n transform: translate3d(0, 5px, 0);\n }\n to {\n transform: none;\n }\n}\n@keyframes Toastify__bounceOutDown {\n 20% {\n transform: translate3d(0, 10px, 0);\n }\n 40%, 45% {\n opacity: 1;\n transform: translate3d(0, -20px, 0);\n }\n to {\n opacity: 0;\n transform: translate3d(0, 2000px, 0);\n }\n}\n.Toastify__bounce-enter--top-left, .Toastify__bounce-enter--bottom-left {\n animation-name: Toastify__bounceInLeft;\n}\n.Toastify__bounce-enter--top-right, .Toastify__bounce-enter--bottom-right {\n animation-name: Toastify__bounceInRight;\n}\n.Toastify__bounce-enter--top-center {\n animation-name: Toastify__bounceInDown;\n}\n.Toastify__bounce-enter--bottom-center {\n animation-name: Toastify__bounceInUp;\n}\n\n.Toastify__bounce-exit--top-left, .Toastify__bounce-exit--bottom-left {\n animation-name: Toastify__bounceOutLeft;\n}\n.Toastify__bounce-exit--top-right, .Toastify__bounce-exit--bottom-right {\n animation-name: Toastify__bounceOutRight;\n}\n.Toastify__bounce-exit--top-center {\n animation-name: Toastify__bounceOutUp;\n}\n.Toastify__bounce-exit--bottom-center {\n animation-name: Toastify__bounceOutDown;\n}\n\n@keyframes Toastify__zoomIn {\n from {\n opacity: 0;\n transform: scale3d(0.3, 0.3, 0.3);\n }\n 50% {\n opacity: 1;\n }\n}\n@keyframes Toastify__zoomOut {\n from {\n opacity: 1;\n }\n 50% {\n opacity: 0;\n transform: scale3d(0.3, 0.3, 0.3);\n }\n to {\n opacity: 0;\n }\n}\n.Toastify__zoom-enter {\n animation-name: Toastify__zoomIn;\n}\n\n.Toastify__zoom-exit {\n animation-name: Toastify__zoomOut;\n}\n\n@keyframes Toastify__flipIn {\n from {\n transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n animation-timing-function: ease-in;\n opacity: 0;\n }\n 40% {\n transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n animation-timing-function: ease-in;\n }\n 60% {\n transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n opacity: 1;\n }\n 80% {\n transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n }\n to {\n transform: perspective(400px);\n }\n}\n@keyframes Toastify__flipOut {\n from {\n transform: perspective(400px);\n }\n 30% {\n transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n opacity: 1;\n }\n to {\n transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n opacity: 0;\n }\n}\n.Toastify__flip-enter {\n animation-name: Toastify__flipIn;\n}\n\n.Toastify__flip-exit {\n animation-name: Toastify__flipOut;\n}\n\n@keyframes Toastify__slideInRight {\n from {\n transform: translate3d(110%, 0, 0);\n visibility: visible;\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n}\n@keyframes Toastify__slideInLeft {\n from {\n transform: translate3d(-110%, 0, 0);\n visibility: visible;\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n}\n@keyframes Toastify__slideInUp {\n from {\n transform: translate3d(0, 110%, 0);\n visibility: visible;\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n}\n@keyframes Toastify__slideInDown {\n from {\n transform: translate3d(0, -110%, 0);\n visibility: visible;\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n}\n@keyframes Toastify__slideOutRight {\n from {\n transform: translate3d(0, 0, 0);\n }\n to {\n visibility: hidden;\n transform: translate3d(110%, 0, 0);\n }\n}\n@keyframes Toastify__slideOutLeft {\n from {\n transform: translate3d(0, 0, 0);\n }\n to {\n visibility: hidden;\n transform: translate3d(-110%, 0, 0);\n }\n}\n@keyframes Toastify__slideOutDown {\n from {\n transform: translate3d(0, 0, 0);\n }\n to {\n visibility: hidden;\n transform: translate3d(0, 500px, 0);\n }\n}\n@keyframes Toastify__slideOutUp {\n from {\n transform: translate3d(0, 0, 0);\n }\n to {\n visibility: hidden;\n transform: translate3d(0, -500px, 0);\n }\n}\n.Toastify__slide-enter--top-left, .Toastify__slide-enter--bottom-left {\n animation-name: Toastify__slideInLeft;\n}\n.Toastify__slide-enter--top-right, .Toastify__slide-enter--bottom-right {\n animation-name: Toastify__slideInRight;\n}\n.Toastify__slide-enter--top-center {\n animation-name: Toastify__slideInDown;\n}\n.Toastify__slide-enter--bottom-center {\n animation-name: Toastify__slideInUp;\n}\n\n.Toastify__slide-exit--top-left, .Toastify__slide-exit--bottom-left {\n animation-name: Toastify__slideOutLeft;\n}\n.Toastify__slide-exit--top-right, .Toastify__slide-exit--bottom-right {\n animation-name: Toastify__slideOutRight;\n}\n.Toastify__slide-exit--top-center {\n animation-name: Toastify__slideOutUp;\n}\n.Toastify__slide-exit--bottom-center {\n animation-name: Toastify__slideOutDown;\n}\n\n@keyframes Toastify__spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n/*# sourceMappingURL=ReactToastify.css.map */",".#{$rt-namespace}__toast-container {\n z-index: var(--toastify-z-index);\n -webkit-transform: translate3d(0, 0, var(--toastify-z-index) px);\n position: fixed;\n padding: 4px;\n width: var(--toastify-toast-width);\n box-sizing: border-box;\n color: #fff;\n &--top-left {\n top: 1em;\n left: 1em;\n }\n &--top-center {\n top: 1em;\n left: 50%;\n transform: translateX(-50%);\n }\n &--top-right {\n top: 1em;\n right: 1em;\n }\n &--bottom-left {\n bottom: 1em;\n left: 1em;\n }\n &--bottom-center {\n bottom: 1em;\n left: 50%;\n transform: translateX(-50%);\n }\n &--bottom-right {\n bottom: 1em;\n right: 1em;\n }\n}\n\n@media #{$rt-mobile} {\n .#{$rt-namespace}__toast-container {\n width: 100vw;\n padding: 0;\n left: 0;\n margin: 0;\n &--top-left,\n &--top-center,\n &--top-right {\n top: 0;\n transform: translateX(0);\n }\n &--bottom-left,\n &--bottom-center,\n &--bottom-right {\n bottom: 0;\n transform: translateX(0);\n }\n &--rtl {\n right: 0;\n left: initial;\n }\n }\n}\n",".#{$rt-namespace}__toast {\n position: relative;\n min-height: var(--toastify-toast-min-height);\n box-sizing: border-box;\n margin-bottom: 1rem;\n padding: 8px;\n border-radius: 4px;\n box-shadow: 0 1px 10px 0 rgba(0, 0, 0, 0.1), 0 2px 15px 0 rgba(0, 0, 0, 0.05);\n display: flex;\n justify-content: space-between;\n max-height: var(--toastify-toast-max-height);\n overflow: hidden;\n font-family: var(--toastify-font-family);\n cursor: default;\n direction: ltr;\n /* webkit only issue #791 */\n z-index: 0;\n &--rtl {\n direction: rtl;\n }\n &--close-on-click {\n cursor: pointer;\n }\n &-body {\n margin: auto 0;\n flex: 1 1 auto;\n padding: 6px;\n display: flex;\n align-items: center;\n & > div:last-child {\n word-break: break-word;\n flex: 1;\n }\n }\n &-icon {\n margin-inline-end: 10px;\n width: 20px;\n flex-shrink: 0;\n display: flex;\n }\n}\n\n.#{$rt-namespace}--animate {\n animation-fill-mode: both;\n animation-duration: 0.7s;\n}\n\n.#{$rt-namespace}--animate-icon {\n animation-fill-mode: both;\n animation-duration: 0.3s;\n}\n\n@media #{$rt-mobile} {\n .#{$rt-namespace}__toast {\n margin-bottom: 0;\n border-radius: 0;\n }\n}\n",".#{$rt-namespace}__toast {\n &-theme--dark {\n background: var(--toastify-color-dark);\n color: var(--toastify-text-color-dark);\n }\n &-theme--light {\n background: var(--toastify-color-light);\n color: var(--toastify-text-color-light);\n }\n &-theme--colored#{&}--default {\n background: var(--toastify-color-light);\n color: var(--toastify-text-color-light);\n }\n &-theme--colored#{&}--info {\n color: var(--toastify-text-color-info);\n background: var(--toastify-color-info);\n }\n &-theme--colored#{&}--success {\n color: var(--toastify-text-color-success);\n background: var(--toastify-color-success);\n }\n &-theme--colored#{&}--warning {\n color: var(--toastify-text-color-warning);\n background: var(--toastify-color-warning);\n }\n &-theme--colored#{&}--error {\n color: var(--toastify-text-color-error);\n background: var(--toastify-color-error);\n }\n}\n\n.#{$rt-namespace}__progress-bar {\n &-theme--light {\n background: var(--toastify-color-progress-light);\n }\n &-theme--dark {\n background: var(--toastify-color-progress-dark);\n }\n &--info {\n background: var(--toastify-color-progress-info);\n }\n &--success {\n background: var(--toastify-color-progress-success);\n }\n &--warning {\n background: var(--toastify-color-progress-warning);\n }\n &--error {\n background: var(--toastify-color-progress-error);\n }\n &-theme--colored#{&}--info,\n &-theme--colored#{&}--success,\n &-theme--colored#{&}--warning,\n &-theme--colored#{&}--error {\n background: var(--toastify-color-transparent);\n }\n}\n",".#{$rt-namespace}__close-button {\n color: #fff;\n background: transparent;\n outline: none;\n border: none;\n padding: 0;\n cursor: pointer;\n opacity: 0.7;\n transition: 0.3s ease;\n align-self: flex-start;\n\n &--light {\n color: #000;\n opacity: 0.3;\n }\n\n & > svg {\n fill: currentColor;\n height: 16px;\n width: 14px;\n }\n\n &:hover,\n &:focus {\n opacity: 1;\n }\n}\n","@keyframes #{$rt-namespace}__trackProgress {\n 0% {\n transform: scaleX(1);\n }\n 100% {\n transform: scaleX(0);\n }\n}\n\n.#{$rt-namespace}__progress-bar {\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 5px;\n z-index: var(--toastify-z-index);\n opacity: 0.7;\n transform-origin: left;\n\n &--animated {\n animation: #{$rt-namespace}__trackProgress linear 1 forwards;\n }\n\n &--controlled {\n transition: transform 0.2s;\n }\n\n &--rtl {\n right: 0;\n left: initial;\n transform-origin: right;\n }\n}\n",".#{$rt-namespace}__spinner {\n width: 20px;\n height: 20px;\n box-sizing: border-box;\n border: 2px solid;\n border-radius: 100%;\n border-color: var(--toastify-spinner-color-empty-area);\n border-right-color: var(--toastify-spinner-color);\n animation: #{$rt-namespace}__spin 0.65s linear infinite;\n}\n","@mixin timing-function {\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n}\n\n@keyframes #{$rt-namespace}__bounceInRight {\n from,\n 60%,\n 75%,\n 90%,\n to {\n @include timing-function;\n }\n from {\n opacity: 0;\n transform: translate3d(3000px, 0, 0);\n }\n 60% {\n opacity: 1;\n transform: translate3d(-25px, 0, 0);\n }\n 75% {\n transform: translate3d(10px, 0, 0);\n }\n 90% {\n transform: translate3d(-5px, 0, 0);\n }\n to {\n transform: none;\n }\n}\n\n@keyframes #{$rt-namespace}__bounceOutRight {\n 20% {\n opacity: 1;\n transform: translate3d(-20px, 0, 0);\n }\n to {\n opacity: 0;\n transform: translate3d(2000px, 0, 0);\n }\n}\n\n@keyframes #{$rt-namespace}__bounceInLeft {\n from,\n 60%,\n 75%,\n 90%,\n to {\n @include timing-function;\n }\n 0% {\n opacity: 0;\n transform: translate3d(-3000px, 0, 0);\n }\n 60% {\n opacity: 1;\n transform: translate3d(25px, 0, 0);\n }\n 75% {\n transform: translate3d(-10px, 0, 0);\n }\n 90% {\n transform: translate3d(5px, 0, 0);\n }\n to {\n transform: none;\n }\n}\n\n@keyframes #{$rt-namespace}__bounceOutLeft {\n 20% {\n opacity: 1;\n transform: translate3d(20px, 0, 0);\n }\n to {\n opacity: 0;\n transform: translate3d(-2000px, 0, 0);\n }\n}\n\n@keyframes #{$rt-namespace}__bounceInUp {\n from,\n 60%,\n 75%,\n 90%,\n to {\n @include timing-function;\n }\n from {\n opacity: 0;\n transform: translate3d(0, 3000px, 0);\n }\n 60% {\n opacity: 1;\n transform: translate3d(0, -20px, 0);\n }\n 75% {\n transform: translate3d(0, 10px, 0);\n }\n 90% {\n transform: translate3d(0, -5px, 0);\n }\n to {\n transform: translate3d(0, 0, 0);\n }\n}\n\n@keyframes #{$rt-namespace}__bounceOutUp {\n 20% {\n transform: translate3d(0, -10px, 0);\n }\n 40%,\n 45% {\n opacity: 1;\n transform: translate3d(0, 20px, 0);\n }\n to {\n opacity: 0;\n transform: translate3d(0, -2000px, 0);\n }\n}\n\n@keyframes #{$rt-namespace}__bounceInDown {\n from,\n 60%,\n 75%,\n 90%,\n to {\n @include timing-function;\n }\n 0% {\n opacity: 0;\n transform: translate3d(0, -3000px, 0);\n }\n 60% {\n opacity: 1;\n transform: translate3d(0, 25px, 0);\n }\n 75% {\n transform: translate3d(0, -10px, 0);\n }\n 90% {\n transform: translate3d(0, 5px, 0);\n }\n to {\n transform: none;\n }\n}\n\n@keyframes #{$rt-namespace}__bounceOutDown {\n 20% {\n transform: translate3d(0, 10px, 0);\n }\n 40%,\n 45% {\n opacity: 1;\n transform: translate3d(0, -20px, 0);\n }\n to {\n opacity: 0;\n transform: translate3d(0, 2000px, 0);\n }\n}\n\n.#{$rt-namespace}__bounce-enter {\n &--top-left,\n &--bottom-left {\n animation-name: #{$rt-namespace}__bounceInLeft;\n }\n &--top-right,\n &--bottom-right {\n animation-name: #{$rt-namespace}__bounceInRight;\n }\n &--top-center {\n animation-name: #{$rt-namespace}__bounceInDown;\n }\n &--bottom-center {\n animation-name: #{$rt-namespace}__bounceInUp;\n }\n}\n\n.#{$rt-namespace}__bounce-exit {\n &--top-left,\n &--bottom-left {\n animation-name: #{$rt-namespace}__bounceOutLeft;\n }\n &--top-right,\n &--bottom-right {\n animation-name: #{$rt-namespace}__bounceOutRight;\n }\n &--top-center {\n animation-name: #{$rt-namespace}__bounceOutUp;\n }\n &--bottom-center {\n animation-name: #{$rt-namespace}__bounceOutDown;\n }\n}\n","@keyframes #{$rt-namespace}__zoomIn {\n from {\n opacity: 0;\n transform: scale3d(0.3, 0.3, 0.3);\n }\n 50% {\n opacity: 1;\n }\n}\n\n@keyframes #{$rt-namespace}__zoomOut {\n from {\n opacity: 1;\n }\n 50% {\n opacity: 0;\n transform: scale3d(0.3, 0.3, 0.3);\n }\n to {\n opacity: 0;\n }\n}\n\n.#{$rt-namespace}__zoom-enter {\n animation-name: #{$rt-namespace}__zoomIn;\n}\n\n.#{$rt-namespace}__zoom-exit {\n animation-name: #{$rt-namespace}__zoomOut;\n}\n","@keyframes #{$rt-namespace}__flipIn {\n from {\n transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n animation-timing-function: ease-in;\n opacity: 0;\n }\n 40% {\n transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n animation-timing-function: ease-in;\n }\n 60% {\n transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n opacity: 1;\n }\n 80% {\n transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n }\n to {\n transform: perspective(400px);\n }\n}\n\n@keyframes #{$rt-namespace}__flipOut {\n from {\n transform: perspective(400px);\n }\n 30% {\n transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n opacity: 1;\n }\n to {\n transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n opacity: 0;\n }\n}\n\n.#{$rt-namespace}__flip-enter {\n animation-name: #{$rt-namespace}__flipIn;\n}\n\n.#{$rt-namespace}__flip-exit {\n animation-name: #{$rt-namespace}__flipOut;\n}\n","@mixin transform {\n transform: translate3d(0, 0, 0);\n}\n\n@keyframes #{$rt-namespace}__slideInRight {\n from {\n transform: translate3d(110%, 0, 0);\n visibility: visible;\n }\n to {\n @include transform;\n }\n}\n\n@keyframes #{$rt-namespace}__slideInLeft {\n from {\n transform: translate3d(-110%, 0, 0);\n visibility: visible;\n }\n to {\n @include transform;\n }\n}\n\n@keyframes #{$rt-namespace}__slideInUp {\n from {\n transform: translate3d(0, 110%, 0);\n visibility: visible;\n }\n to {\n @include transform;\n }\n}\n\n@keyframes #{$rt-namespace}__slideInDown {\n from {\n transform: translate3d(0, -110%, 0);\n visibility: visible;\n }\n to {\n @include transform;\n }\n}\n\n@keyframes #{$rt-namespace}__slideOutRight {\n from {\n @include transform;\n }\n to {\n visibility: hidden;\n transform: translate3d(110%, 0, 0);\n }\n}\n\n@keyframes #{$rt-namespace}__slideOutLeft {\n from {\n @include transform;\n }\n to {\n visibility: hidden;\n transform: translate3d(-110%, 0, 0);\n }\n}\n\n@keyframes #{$rt-namespace}__slideOutDown {\n from {\n @include transform;\n }\n to {\n visibility: hidden;\n transform: translate3d(0, 500px, 0);\n }\n}\n\n@keyframes #{$rt-namespace}__slideOutUp {\n from {\n @include transform;\n }\n to {\n visibility: hidden;\n transform: translate3d(0, -500px, 0);\n }\n}\n\n.#{$rt-namespace}__slide-enter {\n &--top-left,\n &--bottom-left {\n animation-name: #{$rt-namespace}__slideInLeft;\n }\n &--top-right,\n &--bottom-right {\n animation-name: #{$rt-namespace}__slideInRight;\n }\n &--top-center {\n animation-name: #{$rt-namespace}__slideInDown;\n }\n &--bottom-center {\n animation-name: #{$rt-namespace}__slideInUp;\n }\n}\n\n.#{$rt-namespace}__slide-exit {\n &--top-left,\n &--bottom-left {\n animation-name: #{$rt-namespace}__slideOutLeft;\n }\n &--top-right,\n &--bottom-right {\n animation-name: #{$rt-namespace}__slideOutRight;\n }\n &--top-center {\n animation-name: #{$rt-namespace}__slideOutUp;\n }\n &--bottom-center {\n animation-name: #{$rt-namespace}__slideOutDown;\n }\n}\n","@keyframes #{$rt-namespace}__spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n","[data-simplebar]{position:relative;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;align-content:flex-start;align-items:flex-start}.simplebar-wrapper{overflow:hidden;width:inherit;height:inherit;max-width:inherit;max-height:inherit}.simplebar-mask{direction:inherit;position:absolute;overflow:hidden;padding:0;margin:0;left:0;top:0;bottom:0;right:0;width:auto!important;height:auto!important;z-index:0}.simplebar-offset{direction:inherit!important;box-sizing:inherit!important;resize:none!important;position:absolute;top:0;left:0;bottom:0;right:0;padding:0;margin:0;-webkit-overflow-scrolling:touch}.simplebar-content-wrapper{direction:inherit;box-sizing:border-box!important;position:relative;display:block;height:100%;width:auto;max-width:100%;max-height:100%;overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.simplebar-content-wrapper::-webkit-scrollbar,.simplebar-hide-scrollbar::-webkit-scrollbar{display:none;width:0;height:0}.simplebar-content:after,.simplebar-content:before{content:' ';display:table}.simplebar-placeholder{max-height:100%;max-width:100%;width:100%;pointer-events:none}.simplebar-height-auto-observer-wrapper{box-sizing:inherit!important;height:100%;width:100%;max-width:1px;position:relative;float:left;max-height:1px;overflow:hidden;z-index:-1;padding:0;margin:0;pointer-events:none;flex-grow:inherit;flex-shrink:0;flex-basis:0}.simplebar-height-auto-observer{box-sizing:inherit;display:block;opacity:0;position:absolute;top:0;left:0;height:1000%;width:1000%;min-height:1px;min-width:1px;overflow:hidden;pointer-events:none;z-index:-1}.simplebar-track{z-index:1;position:absolute;right:0;bottom:0;pointer-events:none;overflow:hidden}[data-simplebar].simplebar-dragging{pointer-events:none;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}[data-simplebar].simplebar-dragging .simplebar-content{pointer-events:none;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}[data-simplebar].simplebar-dragging .simplebar-track{pointer-events:all}.simplebar-scrollbar{position:absolute;left:0;right:0;min-height:10px}.simplebar-scrollbar:before{position:absolute;content:'';background:#000;border-radius:7px;left:2px;right:2px;opacity:0;transition:opacity .2s .5s linear}.simplebar-scrollbar.simplebar-visible:before{opacity:.5;transition-delay:0s;transition-duration:0s}.simplebar-track.simplebar-vertical{top:0;width:11px}.simplebar-scrollbar:before{top:2px;bottom:2px;left:2px;right:2px}.simplebar-track.simplebar-horizontal{left:0;height:11px}.simplebar-track.simplebar-horizontal .simplebar-scrollbar{right:auto;left:0;top:0;bottom:0;min-height:0;min-width:10px;width:auto}[data-simplebar-direction=rtl] .simplebar-track.simplebar-vertical{right:auto;left:0}.simplebar-dummy-scrollbar-size{direction:rtl;position:fixed;opacity:0;visibility:hidden;height:500px;width:500px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:scrollbar!important}.simplebar-dummy-scrollbar-size>div{width:200%;height:200%;margin:10px 0}.simplebar-hide-scrollbar{position:fixed;left:0;visibility:hidden;overflow-y:scroll;scrollbar-width:none;-ms-overflow-style:none}\n","#root {\r\n --toastify-font-family: \"Poppins\", sans-serif;\r\n display: flex;\r\n flex: 1 1 auto;\r\n flex-direction: column;\r\n height: 100%;\r\n width: 100%;\r\n font-family: \"Roboto\", \"Helvetica\", \"Arial\", \"sans-serif\" !important;\r\n}\r\n\r\n::-webkit-scrollbar {\r\n width: 6px;\r\n height: 6px;\r\n}\r\n\r\n::-webkit-scrollbar-thumb {\r\n background-color: #0003;\r\n border-radius: 6px;\r\n transition: all 0.2s ease-in-out;\r\n}\r\n::-webkit-scrollbar-track {\r\n border-radius: 6px;\r\n}\r\np {\r\n font-family: \"Roboto\", \"Helvetica\", \"Arial\", \"sans-serif\" !important;\r\n}\r\n"],"names":[],"sourceRoot":""}
--------------------------------------------------------------------------------
/client/build/static/js/787.59db3541.chunk.js:
--------------------------------------------------------------------------------
1 | "use strict";(self.webpackChunksmart_metrics_logbook=self.webpackChunksmart_metrics_logbook||[]).push([[787],{787:function(e,t,n){n.r(t),n.d(t,{getCLS:function(){return y},getFCP:function(){return g},getFID:function(){return F},getLCP:function(){return P},getTTFB:function(){return D}});var i,r,a,o,u=function(e,t){return{name:e,value:void 0===t?-1:t,delta:0,entries:[],id:"v2-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12)}},c=function(e,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){if("first-input"===e&&!("PerformanceEventTiming"in self))return;var n=new PerformanceObserver((function(e){return e.getEntries().map(t)}));return n.observe({type:e,buffered:!0}),n}}catch(e){}},f=function(e,t){var n=function n(i){"pagehide"!==i.type&&"hidden"!==document.visibilityState||(e(i),t&&(removeEventListener("visibilitychange",n,!0),removeEventListener("pagehide",n,!0)))};addEventListener("visibilitychange",n,!0),addEventListener("pagehide",n,!0)},s=function(e){addEventListener("pageshow",(function(t){t.persisted&&e(t)}),!0)},m=function(e,t,n){var i;return function(r){t.value>=0&&(r||n)&&(t.delta=t.value-(i||0),(t.delta||void 0===i)&&(i=t.value,e(t)))}},v=-1,p=function(){return"hidden"===document.visibilityState?0:1/0},d=function(){f((function(e){var t=e.timeStamp;v=t}),!0)},l=function(){return v<0&&(v=p(),d(),s((function(){setTimeout((function(){v=p(),d()}),0)}))),{get firstHiddenTime(){return v}}},g=function(e,t){var n,i=l(),r=u("FCP"),a=function(e){"first-contentful-paint"===e.name&&(f&&f.disconnect(),e.startTime-1&&e(t)},r=u("CLS",0),a=0,o=[],v=function(e){if(!e.hadRecentInput){var t=o[0],i=o[o.length-1];a&&e.startTime-i.startTime<1e3&&e.startTime-t.startTime<5e3?(a+=e.value,o.push(e)):(a=e.value,o=[e]),a>r.value&&(r.value=a,r.entries=o,n())}},p=c("layout-shift",v);p&&(n=m(i,r,t),f((function(){p.takeRecords().map(v),n(!0)})),s((function(){a=0,T=-1,r=u("CLS",0),n=m(i,r,t)})))},E={passive:!0,capture:!0},w=new Date,L=function(e,t){i||(i=t,r=e,a=new Date,k(removeEventListener),S())},S=function(){if(r>=0&&r1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,t){var n=function(){L(e,t),r()},i=function(){r()},r=function(){removeEventListener("pointerup",n,E),removeEventListener("pointercancel",i,E)};addEventListener("pointerup",n,E),addEventListener("pointercancel",i,E)}(t,e):L(t,e)}},k=function(e){["mousedown","keydown","touchstart","pointerdown"].forEach((function(t){return e(t,b,E)}))},F=function(e,t){var n,a=l(),v=u("FID"),p=function(e){e.startTimeperformance.now())return;n.entries=[t],e(n)}catch(e){}},"complete"===document.readyState?setTimeout(t,0):addEventListener("load",(function(){return setTimeout(t,0)}))}}}]);
2 | //# sourceMappingURL=787.59db3541.chunk.js.map
--------------------------------------------------------------------------------
/client/build/static/js/787.59db3541.chunk.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"static/js/787.59db3541.chunk.js","mappings":"+RAAA,IAAIA,EAAEC,EAAEC,EAAEC,EAAEC,EAAE,SAASJ,EAAEC,GAAG,MAAM,CAACI,KAAKL,EAAEM,WAAM,IAASL,GAAG,EAAEA,EAAEM,MAAM,EAAEC,QAAQ,GAAGC,GAAG,MAAMC,OAAOC,KAAKC,MAAM,KAAKF,OAAOG,KAAKC,MAAM,cAAcD,KAAKE,UAAU,MAAM,EAAEC,EAAE,SAAShB,EAAEC,GAAG,IAAI,GAAGgB,oBAAoBC,oBAAoBC,SAASnB,GAAG,CAAC,GAAG,gBAAgBA,KAAK,2BAA2BoB,MAAM,OAAO,IAAIlB,EAAE,IAAIe,qBAAqB,SAASjB,GAAG,OAAOA,EAAEqB,aAAaC,IAAIrB,EAAE,IAAI,OAAOC,EAAEqB,QAAQ,CAACC,KAAKxB,EAAEyB,UAAS,IAAKvB,CAAC,CAAC,CAAC,MAAMF,GAAG,CAAC,EAAE0B,EAAE,SAAS1B,EAAEC,GAAG,IAAIC,EAAE,SAASA,EAAEC,GAAG,aAAaA,EAAEqB,MAAM,WAAWG,SAASC,kBAAkB5B,EAAEG,GAAGF,IAAI4B,oBAAoB,mBAAmB3B,GAAE,GAAI2B,oBAAoB,WAAW3B,GAAE,IAAK,EAAE4B,iBAAiB,mBAAmB5B,GAAE,GAAI4B,iBAAiB,WAAW5B,GAAE,EAAG,EAAE6B,EAAE,SAAS/B,GAAG8B,iBAAiB,YAAY,SAAS7B,GAAGA,EAAE+B,WAAWhC,EAAEC,EAAE,IAAG,EAAG,EAAEgC,EAAE,SAASjC,EAAEC,EAAEC,GAAG,IAAIC,EAAE,OAAO,SAASC,GAAGH,EAAEK,OAAO,IAAIF,GAAGF,KAAKD,EAAEM,MAAMN,EAAEK,OAAOH,GAAG,IAAIF,EAAEM,YAAO,IAASJ,KAAKA,EAAEF,EAAEK,MAAMN,EAAEC,IAAI,CAAC,EAAEiC,GAAG,EAAEC,EAAE,WAAW,MAAM,WAAWR,SAASC,gBAAgB,EAAE,GAAG,EAAEQ,EAAE,WAAWV,GAAG,SAAS1B,GAAG,IAAIC,EAAED,EAAEqC,UAAUH,EAAEjC,CAAC,IAAG,EAAG,EAAEqC,EAAE,WAAW,OAAOJ,EAAE,IAAIA,EAAEC,IAAIC,IAAIL,GAAG,WAAWQ,YAAY,WAAWL,EAAEC,IAAIC,GAAG,GAAG,EAAE,KAAK,CAAKI,sBAAkB,OAAON,CAAC,EAAE,EAAEO,EAAE,SAASzC,EAAEC,GAAG,IAAIC,EAAEC,EAAEmC,IAAIZ,EAAEtB,EAAE,OAAO8B,EAAE,SAASlC,GAAG,2BAA2BA,EAAEK,OAAO+B,GAAGA,EAAEM,aAAa1C,EAAE2C,UAAUxC,EAAEqC,kBAAkBd,EAAEpB,MAAMN,EAAE2C,UAAUjB,EAAElB,QAAQoC,KAAK5C,GAAGE,GAAE,IAAK,EAAEiC,EAAEU,OAAOC,aAAaA,YAAYC,kBAAkBD,YAAYC,iBAAiB,0BAA0B,GAAGX,EAAED,EAAE,KAAKnB,EAAE,QAAQkB,IAAIC,GAAGC,KAAKlC,EAAE+B,EAAEjC,EAAE0B,EAAEzB,GAAGkC,GAAGD,EAAEC,GAAGJ,GAAG,SAAS5B,GAAGuB,EAAEtB,EAAE,OAAOF,EAAE+B,EAAEjC,EAAE0B,EAAEzB,GAAG+C,uBAAuB,WAAWA,uBAAuB,WAAWtB,EAAEpB,MAAMwC,YAAYlC,MAAMT,EAAEkC,UAAUnC,GAAE,EAAG,GAAG,GAAG,IAAI,EAAE+C,GAAE,EAAGC,GAAG,EAAEC,EAAE,SAASnD,EAAEC,GAAGgD,IAAIR,GAAG,SAASzC,GAAGkD,EAAElD,EAAEM,KAAK,IAAI2C,GAAE,GAAI,IAAI/C,EAAEC,EAAE,SAASF,GAAGiD,GAAG,GAAGlD,EAAEC,EAAE,EAAEiC,EAAE9B,EAAE,MAAM,GAAG+B,EAAE,EAAEC,EAAE,GAAGE,EAAE,SAAStC,GAAG,IAAIA,EAAEoD,eAAe,CAAC,IAAInD,EAAEmC,EAAE,GAAGjC,EAAEiC,EAAEA,EAAEiB,OAAO,GAAGlB,GAAGnC,EAAE2C,UAAUxC,EAAEwC,UAAU,KAAK3C,EAAE2C,UAAU1C,EAAE0C,UAAU,KAAKR,GAAGnC,EAAEM,MAAM8B,EAAEQ,KAAK5C,KAAKmC,EAAEnC,EAAEM,MAAM8B,EAAE,CAACpC,IAAImC,EAAED,EAAE5B,QAAQ4B,EAAE5B,MAAM6B,EAAED,EAAE1B,QAAQ4B,EAAElC,IAAI,CAAC,EAAEiD,EAAEnC,EAAE,eAAesB,GAAGa,IAAIjD,EAAE+B,EAAE9B,EAAE+B,EAAEjC,GAAGyB,GAAG,WAAWyB,EAAEG,cAAchC,IAAIgB,GAAGpC,GAAE,EAAG,IAAI6B,GAAG,WAAWI,EAAE,EAAEe,GAAG,EAAEhB,EAAE9B,EAAE,MAAM,GAAGF,EAAE+B,EAAE9B,EAAE+B,EAAEjC,EAAE,IAAI,EAAEsD,EAAE,CAACC,SAAQ,EAAGC,SAAQ,GAAIC,EAAE,IAAI/C,KAAKgD,EAAE,SAASxD,EAAEC,GAAGJ,IAAIA,EAAEI,EAAEH,EAAEE,EAAED,EAAE,IAAIS,KAAKiD,EAAE/B,qBAAqBgC,IAAI,EAAEA,EAAE,WAAW,GAAG5D,GAAG,GAAGA,EAAEC,EAAEwD,EAAE,CAAC,IAAItD,EAAE,CAAC0D,UAAU,cAAczD,KAAKL,EAAEwB,KAAKuC,OAAO/D,EAAE+D,OAAOC,WAAWhE,EAAEgE,WAAWrB,UAAU3C,EAAEqC,UAAU4B,gBAAgBjE,EAAEqC,UAAUpC,GAAGE,EAAE+D,SAAS,SAASlE,GAAGA,EAAEI,EAAE,IAAID,EAAE,EAAE,CAAC,EAAEgE,EAAE,SAASnE,GAAG,GAAGA,EAAEgE,WAAW,CAAC,IAAI/D,GAAGD,EAAEqC,UAAU,KAAK,IAAI1B,KAAKmC,YAAYlC,OAAOZ,EAAEqC,UAAU,eAAerC,EAAEwB,KAAK,SAASxB,EAAEC,GAAG,IAAIC,EAAE,WAAWyD,EAAE3D,EAAEC,GAAGG,GAAG,EAAED,EAAE,WAAWC,GAAG,EAAEA,EAAE,WAAWyB,oBAAoB,YAAY3B,EAAEqD,GAAG1B,oBAAoB,gBAAgB1B,EAAEoD,EAAE,EAAEzB,iBAAiB,YAAY5B,EAAEqD,GAAGzB,iBAAiB,gBAAgB3B,EAAEoD,EAAE,CAAhO,CAAkOtD,EAAED,GAAG2D,EAAE1D,EAAED,EAAE,CAAC,EAAE4D,EAAE,SAAS5D,GAAG,CAAC,YAAY,UAAU,aAAa,eAAekE,SAAS,SAASjE,GAAG,OAAOD,EAAEC,EAAEkE,EAAEZ,EAAE,GAAG,EAAEa,EAAE,SAASlE,EAAEgC,GAAG,IAAIC,EAAEC,EAAEE,IAAIG,EAAErC,EAAE,OAAO6C,EAAE,SAASjD,GAAGA,EAAE2C,UAAUP,EAAEI,kBAAkBC,EAAEnC,MAAMN,EAAEiE,gBAAgBjE,EAAE2C,UAAUF,EAAEjC,QAAQoC,KAAK5C,GAAGmC,GAAE,GAAI,EAAEe,EAAElC,EAAE,cAAciC,GAAGd,EAAEF,EAAE/B,EAAEuC,EAAEP,GAAGgB,GAAGxB,GAAG,WAAWwB,EAAEI,cAAchC,IAAI2B,GAAGC,EAAER,YAAY,IAAG,GAAIQ,GAAGnB,GAAG,WAAW,IAAIf,EAAEyB,EAAErC,EAAE,OAAO+B,EAAEF,EAAE/B,EAAEuC,EAAEP,GAAG/B,EAAE,GAAGF,GAAG,EAAED,EAAE,KAAK4D,EAAE9B,kBAAkBd,EAAEiC,EAAE9C,EAAEyC,KAAK5B,GAAG6C,GAAG,GAAG,EAAEQ,EAAE,CAAC,EAAEC,EAAE,SAAStE,EAAEC,GAAG,IAAIC,EAAEC,EAAEmC,IAAIJ,EAAE9B,EAAE,OAAO+B,EAAE,SAASnC,GAAG,IAAIC,EAAED,EAAE2C,UAAU1C,EAAEE,EAAEqC,kBAAkBN,EAAE5B,MAAML,EAAEiC,EAAE1B,QAAQoC,KAAK5C,GAAGE,IAAI,EAAEkC,EAAEpB,EAAE,2BAA2BmB,GAAG,GAAGC,EAAE,CAAClC,EAAE+B,EAAEjC,EAAEkC,EAAEjC,GAAG,IAAIwC,EAAE,WAAW4B,EAAEnC,EAAEzB,MAAM2B,EAAEkB,cAAchC,IAAIa,GAAGC,EAAEM,aAAa2B,EAAEnC,EAAEzB,KAAI,EAAGP,GAAE,GAAI,EAAE,CAAC,UAAU,SAASgE,SAAS,SAASlE,GAAG8B,iBAAiB9B,EAAEyC,EAAE,CAAC8B,MAAK,EAAGd,SAAQ,GAAI,IAAI/B,EAAEe,GAAE,GAAIV,GAAG,SAAS5B,GAAG+B,EAAE9B,EAAE,OAAOF,EAAE+B,EAAEjC,EAAEkC,EAAEjC,GAAG+C,uBAAuB,WAAWA,uBAAuB,WAAWd,EAAE5B,MAAMwC,YAAYlC,MAAMT,EAAEkC,UAAUgC,EAAEnC,EAAEzB,KAAI,EAAGP,GAAE,EAAG,GAAG,GAAG,GAAG,CAAC,EAAEsE,EAAE,SAASxE,GAAG,IAAIC,EAAEC,EAAEE,EAAE,QAAQH,EAAE,WAAW,IAAI,IAAIA,EAAE6C,YAAY2B,iBAAiB,cAAc,IAAI,WAAW,IAAIzE,EAAE8C,YAAY4B,OAAOzE,EAAE,CAAC6D,UAAU,aAAanB,UAAU,GAAG,IAAI,IAAIzC,KAAKF,EAAE,oBAAoBE,GAAG,WAAWA,IAAID,EAAEC,GAAGW,KAAK8D,IAAI3E,EAAEE,GAAGF,EAAE4E,gBAAgB,IAAI,OAAO3E,CAAC,CAAjL,GAAqL,GAAGC,EAAEI,MAAMJ,EAAEK,MAAMN,EAAE4E,cAAc3E,EAAEI,MAAM,GAAGJ,EAAEI,MAAMwC,YAAYlC,MAAM,OAAOV,EAAEM,QAAQ,CAACP,GAAGD,EAAEE,EAAE,CAAC,MAAMF,GAAG,CAAC,EAAE,aAAa2B,SAASmD,WAAWvC,WAAWtC,EAAE,GAAG6B,iBAAiB,QAAQ,WAAW,OAAOS,WAAWtC,EAAE,EAAE,GAAG,C","sources":["../node_modules/web-vitals/dist/web-vitals.js"],"sourcesContent":["var e,t,n,i,r=function(e,t){return{name:e,value:void 0===t?-1:t,delta:0,entries:[],id:\"v2-\".concat(Date.now(),\"-\").concat(Math.floor(8999999999999*Math.random())+1e12)}},a=function(e,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){if(\"first-input\"===e&&!(\"PerformanceEventTiming\"in self))return;var n=new PerformanceObserver((function(e){return e.getEntries().map(t)}));return n.observe({type:e,buffered:!0}),n}}catch(e){}},o=function(e,t){var n=function n(i){\"pagehide\"!==i.type&&\"hidden\"!==document.visibilityState||(e(i),t&&(removeEventListener(\"visibilitychange\",n,!0),removeEventListener(\"pagehide\",n,!0)))};addEventListener(\"visibilitychange\",n,!0),addEventListener(\"pagehide\",n,!0)},u=function(e){addEventListener(\"pageshow\",(function(t){t.persisted&&e(t)}),!0)},c=function(e,t,n){var i;return function(r){t.value>=0&&(r||n)&&(t.delta=t.value-(i||0),(t.delta||void 0===i)&&(i=t.value,e(t)))}},f=-1,s=function(){return\"hidden\"===document.visibilityState?0:1/0},m=function(){o((function(e){var t=e.timeStamp;f=t}),!0)},v=function(){return f<0&&(f=s(),m(),u((function(){setTimeout((function(){f=s(),m()}),0)}))),{get firstHiddenTime(){return f}}},d=function(e,t){var n,i=v(),o=r(\"FCP\"),f=function(e){\"first-contentful-paint\"===e.name&&(m&&m.disconnect(),e.startTime-1&&e(t)},f=r(\"CLS\",0),s=0,m=[],v=function(e){if(!e.hadRecentInput){var t=m[0],i=m[m.length-1];s&&e.startTime-i.startTime<1e3&&e.startTime-t.startTime<5e3?(s+=e.value,m.push(e)):(s=e.value,m=[e]),s>f.value&&(f.value=s,f.entries=m,n())}},h=a(\"layout-shift\",v);h&&(n=c(i,f,t),o((function(){h.takeRecords().map(v),n(!0)})),u((function(){s=0,l=-1,f=r(\"CLS\",0),n=c(i,f,t)})))},T={passive:!0,capture:!0},y=new Date,g=function(i,r){e||(e=r,t=i,n=new Date,w(removeEventListener),E())},E=function(){if(t>=0&&t1e12?new Date:performance.now())-e.timeStamp;\"pointerdown\"==e.type?function(e,t){var n=function(){g(e,t),r()},i=function(){r()},r=function(){removeEventListener(\"pointerup\",n,T),removeEventListener(\"pointercancel\",i,T)};addEventListener(\"pointerup\",n,T),addEventListener(\"pointercancel\",i,T)}(t,e):g(t,e)}},w=function(e){[\"mousedown\",\"keydown\",\"touchstart\",\"pointerdown\"].forEach((function(t){return e(t,S,T)}))},L=function(n,f){var s,m=v(),d=r(\"FID\"),p=function(e){e.startTimeperformance.now())return;n.entries=[t],e(n)}catch(e){}},\"complete\"===document.readyState?setTimeout(t,0):addEventListener(\"load\",(function(){return setTimeout(t,0)}))};export{h as getCLS,d as getFCP,L as getFID,F as getLCP,P as getTTFB};\n"],"names":["e","t","n","i","r","name","value","delta","entries","id","concat","Date","now","Math","floor","random","a","PerformanceObserver","supportedEntryTypes","includes","self","getEntries","map","observe","type","buffered","o","document","visibilityState","removeEventListener","addEventListener","u","persisted","c","f","s","m","timeStamp","v","setTimeout","firstHiddenTime","d","disconnect","startTime","push","window","performance","getEntriesByName","requestAnimationFrame","p","l","h","hadRecentInput","length","takeRecords","T","passive","capture","y","g","w","E","entryType","target","cancelable","processingStart","forEach","S","L","b","F","once","P","getEntriesByType","timing","max","navigationStart","responseStart","readyState"],"sourceRoot":""}
--------------------------------------------------------------------------------
/client/build/static/js/main.ed45ed54.js.LICENSE.txt:
--------------------------------------------------------------------------------
1 | /*!
2 | * ApexCharts v3.37.1
3 | * (c) 2018-2023 ApexCharts
4 | * Released under the MIT License.
5 | */
6 |
7 | /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
8 |
9 | /*! svg.draggable.js - v2.2.2 - 2019-01-08
10 | * https://github.com/svgdotjs/svg.draggable.js
11 | * Copyright (c) 2019 Wout Fierens; Licensed MIT */
12 |
13 | /*! svg.filter.js - v2.0.2 - 2016-02-24
14 | * https://github.com/wout/svg.filter.js
15 | * Copyright (c) 2016 Wout Fierens; Licensed MIT */
16 |
17 | /**
18 | * @license React
19 | * react-dom.production.min.js
20 | *
21 | * Copyright (c) Facebook, Inc. and its affiliates.
22 | *
23 | * This source code is licensed under the MIT license found in the
24 | * LICENSE file in the root directory of this source tree.
25 | */
26 |
27 | /**
28 | * @license React
29 | * react-is.production.min.js
30 | *
31 | * Copyright (c) Facebook, Inc. and its affiliates.
32 | *
33 | * This source code is licensed under the MIT license found in the
34 | * LICENSE file in the root directory of this source tree.
35 | */
36 |
37 | /**
38 | * @license React
39 | * react-jsx-runtime.production.min.js
40 | *
41 | * Copyright (c) Facebook, Inc. and its affiliates.
42 | *
43 | * This source code is licensed under the MIT license found in the
44 | * LICENSE file in the root directory of this source tree.
45 | */
46 |
47 | /**
48 | * @license React
49 | * react.production.min.js
50 | *
51 | * Copyright (c) Facebook, Inc. and its affiliates.
52 | *
53 | * This source code is licensed under the MIT license found in the
54 | * LICENSE file in the root directory of this source tree.
55 | */
56 |
57 | /**
58 | * @license React
59 | * scheduler.production.min.js
60 | *
61 | * Copyright (c) Facebook, Inc. and its affiliates.
62 | *
63 | * This source code is licensed under the MIT license found in the
64 | * LICENSE file in the root directory of this source tree.
65 | */
66 |
67 | /**
68 | * @license React
69 | * use-sync-external-store-shim.production.min.js
70 | *
71 | * Copyright (c) Facebook, Inc. and its affiliates.
72 | *
73 | * This source code is licensed under the MIT license found in the
74 | * LICENSE file in the root directory of this source tree.
75 | */
76 |
77 | /**
78 | * @license React
79 | * use-sync-external-store-shim/with-selector.production.min.js
80 | *
81 | * Copyright (c) Facebook, Inc. and its affiliates.
82 | *
83 | * This source code is licensed under the MIT license found in the
84 | * LICENSE file in the root directory of this source tree.
85 | */
86 |
87 | /**
88 | * @mui/styled-engine v5.12.0
89 | *
90 | * @license MIT
91 | * This source code is licensed under the MIT license found in the
92 | * LICENSE file in the root directory of this source tree.
93 | */
94 |
95 | /**
96 | * @remix-run/router v1.3.3
97 | *
98 | * Copyright (c) Remix Software Inc.
99 | *
100 | * This source code is licensed under the MIT license found in the
101 | * LICENSE.md file in the root directory of this source tree.
102 | *
103 | * @license MIT
104 | */
105 |
106 | /**
107 | * React Router DOM v6.8.2
108 | *
109 | * Copyright (c) Remix Software Inc.
110 | *
111 | * This source code is licensed under the MIT license found in the
112 | * LICENSE.md file in the root directory of this source tree.
113 | *
114 | * @license MIT
115 | */
116 |
117 | /**
118 | * React Router v6.8.2
119 | *
120 | * Copyright (c) Remix Software Inc.
121 | *
122 | * This source code is licensed under the MIT license found in the
123 | * LICENSE.md file in the root directory of this source tree.
124 | *
125 | * @license MIT
126 | */
127 |
128 | /** @license React v16.13.1
129 | * react-is.production.min.js
130 | *
131 | * Copyright (c) Facebook, Inc. and its affiliates.
132 | *
133 | * This source code is licensed under the MIT license found in the
134 | * LICENSE file in the root directory of this source tree.
135 | */
136 |
137 | /** @license React v17.0.2
138 | * react-is.production.min.js
139 | *
140 | * Copyright (c) Facebook, Inc. and its affiliates.
141 | *
142 | * This source code is licensed under the MIT license found in the
143 | * LICENSE file in the root directory of this source tree.
144 | */
145 |
146 | //! Copyright (c) JS Foundation and other contributors
147 |
148 | //! github.com/moment/moment-timezone
149 |
150 | //! license : MIT
151 |
152 | //! moment-timezone.js
153 |
154 | //! moment.js
155 |
156 | //! version : 0.5.43
157 |
--------------------------------------------------------------------------------
/client/build/static/media/roboto-all-300-normal.168d6383e73339293ac3.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-all-300-normal.168d6383e73339293ac3.woff
--------------------------------------------------------------------------------
/client/build/static/media/roboto-all-400-normal.c5d001fa922fa66a147f.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-all-400-normal.c5d001fa922fa66a147f.woff
--------------------------------------------------------------------------------
/client/build/static/media/roboto-all-500-normal.0ab669b7a0d19b178f57.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-all-500-normal.0ab669b7a0d19b178f57.woff
--------------------------------------------------------------------------------
/client/build/static/media/roboto-all-700-normal.a457fde362a540fcadff.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-all-700-normal.a457fde362a540fcadff.woff
--------------------------------------------------------------------------------
/client/build/static/media/roboto-cyrillic-300-normal.1431d1cef06ad04f5458.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-cyrillic-300-normal.1431d1cef06ad04f5458.woff2
--------------------------------------------------------------------------------
/client/build/static/media/roboto-cyrillic-400-normal.71a33b6b50457b2c903a.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-cyrillic-400-normal.71a33b6b50457b2c903a.woff2
--------------------------------------------------------------------------------
/client/build/static/media/roboto-cyrillic-500-normal.cad7d3d9cb265e334e58.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-cyrillic-500-normal.cad7d3d9cb265e334e58.woff2
--------------------------------------------------------------------------------
/client/build/static/media/roboto-cyrillic-700-normal.d010f1f324e111a22e53.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-cyrillic-700-normal.d010f1f324e111a22e53.woff2
--------------------------------------------------------------------------------
/client/build/static/media/roboto-cyrillic-ext-300-normal.4777461b144e55145268.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-cyrillic-ext-300-normal.4777461b144e55145268.woff2
--------------------------------------------------------------------------------
/client/build/static/media/roboto-cyrillic-ext-400-normal.804378952da8a10faae2.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-cyrillic-ext-400-normal.804378952da8a10faae2.woff2
--------------------------------------------------------------------------------
/client/build/static/media/roboto-cyrillic-ext-500-normal.62ced72e5832f02c2796.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-cyrillic-ext-500-normal.62ced72e5832f02c2796.woff2
--------------------------------------------------------------------------------
/client/build/static/media/roboto-cyrillic-ext-700-normal.be4d02458ce53887dc37.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-cyrillic-ext-700-normal.be4d02458ce53887dc37.woff2
--------------------------------------------------------------------------------
/client/build/static/media/roboto-greek-300-normal.db2632771401f61463fe.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-greek-300-normal.db2632771401f61463fe.woff2
--------------------------------------------------------------------------------
/client/build/static/media/roboto-greek-400-normal.c35e4c3958e209d17b31.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-greek-400-normal.c35e4c3958e209d17b31.woff2
--------------------------------------------------------------------------------
/client/build/static/media/roboto-greek-500-normal.9ac81fefbe6c319ea40b.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-greek-500-normal.9ac81fefbe6c319ea40b.woff2
--------------------------------------------------------------------------------
/client/build/static/media/roboto-greek-700-normal.50e795c1345353b0e996.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-greek-700-normal.50e795c1345353b0e996.woff2
--------------------------------------------------------------------------------
/client/build/static/media/roboto-greek-ext-300-normal.35b9d6be04b95f0f0530.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-greek-ext-300-normal.35b9d6be04b95f0f0530.woff2
--------------------------------------------------------------------------------
/client/build/static/media/roboto-greek-ext-400-normal.169619821ea93019d1bb.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-greek-ext-400-normal.169619821ea93019d1bb.woff2
--------------------------------------------------------------------------------
/client/build/static/media/roboto-greek-ext-500-normal.6fb9cffb1d3e72bf9293.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-greek-ext-500-normal.6fb9cffb1d3e72bf9293.woff2
--------------------------------------------------------------------------------
/client/build/static/media/roboto-greek-ext-700-normal.bd9854c751441ccc1a70.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-greek-ext-700-normal.bd9854c751441ccc1a70.woff2
--------------------------------------------------------------------------------
/client/build/static/media/roboto-latin-300-normal.c48fb6765a9fcb00b330.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-latin-300-normal.c48fb6765a9fcb00b330.woff2
--------------------------------------------------------------------------------
/client/build/static/media/roboto-latin-400-normal.b009a76ad6afe4ebd301.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-latin-400-normal.b009a76ad6afe4ebd301.woff2
--------------------------------------------------------------------------------
/client/build/static/media/roboto-latin-500-normal.f25d774ecfe0996f8eb5.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-latin-500-normal.f25d774ecfe0996f8eb5.woff2
--------------------------------------------------------------------------------
/client/build/static/media/roboto-latin-700-normal.227c93190fe7f82de3f8.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-latin-700-normal.227c93190fe7f82de3f8.woff2
--------------------------------------------------------------------------------
/client/build/static/media/roboto-latin-ext-300-normal.dc7dcec8e3f654e0ed63.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-latin-ext-300-normal.dc7dcec8e3f654e0ed63.woff2
--------------------------------------------------------------------------------
/client/build/static/media/roboto-latin-ext-400-normal.861b791f9de857a6e7bc.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-latin-ext-400-normal.861b791f9de857a6e7bc.woff2
--------------------------------------------------------------------------------
/client/build/static/media/roboto-latin-ext-500-normal.9165081d10e1ba601384.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-latin-ext-500-normal.9165081d10e1ba601384.woff2
--------------------------------------------------------------------------------
/client/build/static/media/roboto-latin-ext-700-normal.ed67ad54b1a8f5d21150.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-latin-ext-700-normal.ed67ad54b1a8f5d21150.woff2
--------------------------------------------------------------------------------
/client/build/static/media/roboto-vietnamese-300-normal.32fc45a3d1e8ea11fabc.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-vietnamese-300-normal.32fc45a3d1e8ea11fabc.woff2
--------------------------------------------------------------------------------
/client/build/static/media/roboto-vietnamese-400-normal.3230f9b040f3c630e0c3.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-vietnamese-400-normal.3230f9b040f3c630e0c3.woff2
--------------------------------------------------------------------------------
/client/build/static/media/roboto-vietnamese-500-normal.d8642a3d1d4ef6179644.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-vietnamese-500-normal.d8642a3d1d4ef6179644.woff2
--------------------------------------------------------------------------------
/client/build/static/media/roboto-vietnamese-700-normal.3425a701027d0699e369.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/client/build/static/media/roboto-vietnamese-700-normal.3425a701027d0699e369.woff2
--------------------------------------------------------------------------------
/config/config.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/config/config.js
--------------------------------------------------------------------------------
/config/express.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const bodyParser = require("body-parser");
3 | const cors = require("cors");
4 | const morgan = require("morgan");
5 |
6 | const { json } = express;
7 |
8 |
9 | // const helmet = require("helmet");
10 | const app = express();
11 | app.use(cors());
12 | // app.use(bodyParser.urlencoded({ extended: false }));
13 | app.use(bodyParser.json());
14 | // app.use(json());
15 | app.use(morgan("dev"));
16 | // app.use(helmet());
17 | app.use(express.json());
18 |
19 | // app.get("/", (req, res) => {
20 | // res.send("Hello World!");
21 | // });
22 |
23 |
24 |
25 | // app.use(
26 | // helmet.contentSecurityPolicy({
27 | // directives: {
28 | // defaultSrc: ["'self'"],
29 | // connectSrc: ["'self'", "http://127.0.0.1:8000"],
30 | // },
31 | // })
32 | // );
33 |
34 | module.exports = app;
35 |
--------------------------------------------------------------------------------
/config/mongoose.js:
--------------------------------------------------------------------------------
1 | const mongoose = require("mongoose");
2 | const dotenv = require("dotenv");
3 | dotenv.config();
4 | mongoose
5 | .connect(process.env.MONGODB_URI_PRODUCTION, {
6 | useNewUrlParser: true,
7 | useUnifiedTopology: true,
8 | useFindAndModify: false,
9 | })
10 | .catch((err) => console.error("Connection error :" + err));
11 | const db = mongoose.connection;
12 |
13 | module.exports = db;
14 |
--------------------------------------------------------------------------------
/config/storeOptioins.js:
--------------------------------------------------------------------------------
1 | const mongoose = require("mongoose");
2 |
3 | //create new connection for session store
4 | const connection = mongoose.createConnection(process.env.MONGODB_URI_PRODUCTION, {
5 | useNewUrlParser: true,
6 | useUnifiedTopology: true,
7 | });
8 |
9 | module.exports = storeOptions = {
10 | mongooseConnection: connection,
11 | //automatically remove after 3 hours
12 | ttl: 3 * 60 * 60,
13 | };
14 |
--------------------------------------------------------------------------------
/controllers/auth.js:
--------------------------------------------------------------------------------
1 | const User = require("../models/user");
2 | const Metrics = require("../models/metrics");
3 | const jwt = require("jsonwebtoken");
4 | const bcrypt = require("bcrypt");
5 | const { createJWT } = require("../utils/auth");
6 |
7 | // @route POST api/auth/register
8 | // @desc Register user
9 | // @access Public
10 | exports.register = async (req, res, next) => {
11 | const { name, email, password } = req.body;
12 |
13 | try {
14 | let user = await User.findOne({ email });
15 |
16 | if (user) {
17 | return res
18 | .status(400)
19 | .json({ errors: [{ msg: "Email already exists" }] });
20 | }
21 |
22 | user = new User({
23 | name,
24 | email,
25 | password,
26 | });
27 |
28 | const salt = await bcrypt.genSalt(10);
29 | user.password = await bcrypt.hash(password, salt);
30 | Metrics.insertM
31 |
32 | await user.save();
33 |
34 | const payload = {
35 | user: {
36 | id: user.id,
37 | },
38 | };
39 |
40 | jwt.sign(
41 | payload,
42 | process.env.TOKEN_SECRET,
43 | { expiresIn: "5 days" },
44 | (err, token) => {
45 | if (err) throw err;
46 | res.json({ doc: token });
47 | }
48 | );
49 | } catch (err) {
50 | console.error(err.message);
51 | res.status(500).json({ errors: [{ msg: "Server error!" }] });
52 | }
53 | };
54 |
55 |
56 | exports.login = async (req, res) => {
57 | const { email, password } = req.body;
58 |
59 | try {
60 | let user = await User.findOne({ email });
61 |
62 | if (!user) {
63 | return res
64 | .status(400)
65 | .json({ errors: [{ msg: "The email does not exists!" }] });
66 | }
67 |
68 | const isMatch = await bcrypt.compare(password, user.password);
69 |
70 | if (!isMatch) {
71 | return res
72 | .status(400)
73 | .json({ errors: [{ msg: "Password is incorrect!" }] });
74 | }
75 |
76 | const payload = {
77 | user: {
78 | id: user.id,
79 | },
80 | };
81 |
82 | jwt.sign(
83 | payload,
84 | process.env.TOKEN_SECRET,
85 | { expiresIn: "5 days" },
86 | (err, token) => {
87 | if (err) throw err;
88 | res.json({ doc: token });
89 | }
90 | );
91 | } catch (err) {
92 | console.error(err.message);
93 | res.status(500).json({ errors: [{ msg: "Server error!" }] });
94 | }
95 | };
96 |
97 | // function delay(time) {
98 | // return new Promise((resolve) => setTimeout(resolve, time));
99 | // }
100 | // @route GET api/auth/load_user
101 | // @desc Get user by token
102 | // @access Private
103 | exports.loadUser = async (req, res) => {
104 | try {
105 | const user = await User.findById(req.user.id).select("-password");
106 |
107 | res.json({ doc: user });
108 | } catch (err) {
109 | console.error(err.message);
110 | res.status(500).json({ errors: [{ msg: "Server error!" }] });
111 | }
112 | };
113 |
--------------------------------------------------------------------------------
/controllers/group.js:
--------------------------------------------------------------------------------
1 | const Group = require("../models/group");
2 | const { check, validationResult } = require("express-validator");
3 |
4 | exports.addGroup = async (req, res, next) => {
5 | const errors = validationResult(req);
6 | if (!errors.isEmpty()) {
7 | return res.status(400).json({ errors: errors.array() });
8 | }
9 | try {
10 | const newGroup = new Group({
11 | userId: req.user.id,
12 | name: req.body.name,
13 | contents: req.body.contents,
14 | });
15 |
16 | const group = await newGroup.save();
17 |
18 | res.json({ doc: group });
19 | } catch (err) {
20 | console.error(err.message);
21 | res.status(500).json({ errors: [{ msg: "Group name duplicated!" }] });
22 | }
23 | };
24 |
25 | exports.updateGroup = async (req, res) => {
26 | const errors = validationResult(req);
27 | if (!errors.isEmpty()) {
28 | return res.status(400).json({ errors: errors.array() });
29 | }
30 | try {
31 | const group = await Group.findByIdAndUpdate(
32 | { _id: req.body._id },
33 | req.body,
34 | {
35 | new: true,
36 | }
37 | );
38 | res.status(200).json({ doc: group });
39 | } catch (err) {
40 | console.error(err.message);
41 | res.status(500).json({ errors: [{ msg: "Server error!" }] });
42 | }
43 | };
44 |
45 | exports.getUserGroup = async (req, res, next) => {
46 | try {
47 | const groups = await Group.find({ userId: req.user.id });
48 | res.json({ docs: groups });
49 | } catch (err) {
50 | console.error(err.message);
51 | res.status(500).json({ errors: [{ msg: "Server error!" }] });
52 | }
53 | };
54 |
55 | exports.deleteGroupById = async (req, res, next) => {
56 | try {
57 | const group = await Group.findOne({ _id: req.query._id });
58 | group.delete();
59 | res.status(200).json();
60 | } catch (err) {
61 | console.error(err.message);
62 | res.status(500).json({ errors: [{ msg: "Server error!" }] });
63 | }
64 | };
65 |
--------------------------------------------------------------------------------
/controllers/metrics.js:
--------------------------------------------------------------------------------
1 | const Metrics = require("../models/metrics");
2 | const { validationResult } = require("express-validator");
3 | const Wage = require("../models/wage");
4 | const Group = require("../models/group");
5 | exports.addMetrics = async (req, res, next) => {
6 | const errors = validationResult(req);
7 | if (!errors.isEmpty()) {
8 | return res.status(400).json({ errors: errors.array() });
9 | }
10 |
11 | try {
12 | const newMetrics = new Metrics({
13 | userId: req.user.id,
14 | name: req.body.name,
15 | description: req.body.description,
16 | fieldType: req.body.fieldType,
17 | prefix: req.body.prefix,
18 | postfix: req.body.postfix,
19 | chartType: req.body.chartType,
20 | status: req.body.status,
21 | ignore: req.body.ignore,
22 | timing: req.body.timing,
23 | });
24 |
25 | const metrics = await newMetrics.save();
26 |
27 | res.json({ doc: metrics });
28 | } catch (err) {
29 | console.error(err.message);
30 | res.status(500).json({ errors: [{ msg: "Server error!" }] });
31 | }
32 | };
33 |
34 | exports.updateMetrics = async (req, res) => {
35 | const errors = validationResult(req);
36 | if (!errors.isEmpty()) {
37 | return res.status(400).json({ errors: errors.array() });
38 | }
39 | try {
40 | const metric = await Metrics.findByIdAndUpdate(
41 | { _id: req.body._id },
42 | req.body,
43 | {
44 | new: true,
45 | }
46 | );
47 | res.status(200).json({ doc: metric });
48 | } catch (err) {
49 | console.error(err.message);
50 | res.status(500).json({ errors: [{ msg: "Server error!" }] });
51 | }
52 | };
53 |
54 | exports.getUserMetrics = async (req, res, next) => {
55 | try {
56 | const metrics = await Metrics.find({ userId: req.user.id });
57 | res.json({ docs: metrics });
58 | } catch (err) {
59 | console.error(err.message);
60 | res.status(500).json({ errors: [{ msg: "Server error!" }] });
61 | }
62 | };
63 |
64 | exports.deleteMetricById = async (req, res, next) => {
65 | try {
66 | const metric = await Metrics.findOne({ _id: req.query._id });
67 | await Wage.deleteMany({ metricsId: req.query._id });
68 | await Group.updateMany(
69 | { contents: req.query._id },
70 | { $pull: { contents: req.query._id } }
71 | );
72 |
73 | metric.delete();
74 | res.status(200).json();
75 | } catch (err) {
76 | console.error(err.message);
77 | res.status(500).json({ errors: [{ msg: "Server error!" }] });
78 | }
79 | };
80 |
--------------------------------------------------------------------------------
/controllers/wage.js:
--------------------------------------------------------------------------------
1 | const Wage = require("../models/wage");
2 | const { check, validationResult } = require("express-validator");
3 |
4 | (exports.addMetricsWage = async (req, res) => {
5 | const errors = validationResult(req);
6 | if (!errors.isEmpty()) {
7 | return res.status(400).json({ errors: errors.array() });
8 | }
9 |
10 | try {
11 | const newWage = new Wage({
12 | userId: req.user.id,
13 | metricsId: req.body.metricId,
14 | wage: req.body.metricValue,
15 | });
16 |
17 | const wage = await newWage.save();
18 |
19 | res.json({ doc: wage });
20 | } catch (err) {
21 | console.error(err.message);
22 | res.status(500).json({ errors: [{ msg: "Server error!" }] });
23 | }
24 | }),
25 | (exports.updateMetricsWage = async (req, res) => {
26 | const errors = validationResult(req);
27 | if (!errors.isEmpty()) {
28 | return res.status(400).json({ errors: errors.array() });
29 | }
30 | try {
31 | const wage = await Wage.findByIdAndUpdate(
32 | { _id: req.body._id },
33 | req.body,
34 | { new: true }
35 | );
36 |
37 | res.status(200).json({ doc: wage });
38 | } catch (err) {
39 | console.error(err.message);
40 | res.status(500).json({ errors: [{ msg: "Server error!" }] });
41 | }
42 | });
43 | exports.getUserMetricsAllWages = async (req, res) => {
44 | try {
45 | const wages = await Wage.find({ userId: req.user.id });
46 | res.json({ docs: wages });
47 | } catch (err) {
48 | console.error(err.message);
49 | res.status(500).json({ errors: [{ msg: "Server error!" }] });
50 | }
51 | };
52 | exports.getUserMetricsAllTodayWages = async (req, res) => {
53 | const today = new Date();
54 | try {
55 | const wages = await Wage.find({ userId: req?.user?.id });
56 |
57 | const results = wages.filter(
58 | (wage) =>
59 | parseInt(new Date(wage.createdAt).getFullYear()) ===
60 | parseInt(today.getFullYear()) &&
61 | parseInt(new Date(wage.createdAt).getMonth()) ===
62 | parseInt(today.getMonth()) &&
63 | parseInt(new Date(wage.createdAt).getDate()) ===
64 | parseInt(today.getDate())
65 | );
66 | res.json({ docs: results });
67 | } catch (err) {
68 | // console.error(err.message);
69 | res.status(500).json({ errors: [{ msg: "Server error!" }] });
70 | }
71 | };
72 | exports.getLastestMetricsWagesById = async (req, res) => {
73 | try {
74 | const wages = await Wage.find({ userId: req.user.id })
75 | .sort({
76 | createdAt: -1,
77 | })
78 | .limit(3);
79 | res.status(200).json({ docs: wages });
80 | } catch (err) {
81 | // console.error(err.message);
82 | // res.status(500).json({ errors: [{ msg: "Server error!" }] });
83 | }
84 | };
85 | exports.deleteMetricWageById = async (req, res) => {
86 | try {
87 | const wage = await Wage.findOne({ _id: req.query._id });
88 | wage.delete();
89 | res.status(200).json();
90 | } catch (err) {
91 | console.error(err.message);
92 | res.status(500).json({ errors: [{ msg: "Server error!" }] });
93 | }
94 | };
95 |
--------------------------------------------------------------------------------
/middleware/auth.js:
--------------------------------------------------------------------------------
1 | const jwt = require("jsonwebtoken");
2 | const User = require("../models/user");
3 | require("dotenv").config();
4 |
5 | module.exports = function (req, res, next) {
6 | // Get token from header
7 |
8 | const token = req.header("x-auth-token");
9 |
10 | // Check if not token
11 | if (!token) {
12 | return res
13 | .status(401)
14 | .json({ errors: [{ msg: "No token, authorization denied" }] });
15 | }
16 |
17 | // Verify token
18 | try {
19 | jwt.verify(token, process.env.TOKEN_SECRET, async (error, decoded) => {
20 | if (error) {
21 | return res
22 | .status(401)
23 | .json({ errors: [{ msg: "Token is not valid" }] });
24 | } else {
25 | const user = await User.findOne({ _id: decoded.user.id });
26 |
27 | if (user?._id) {
28 | req.user = decoded.user;
29 | next();
30 | } else {
31 | return res
32 | .status(401)
33 | .json({ errors: [{ msg: "Token is not valid" }] });
34 | }
35 | }
36 | });
37 | } catch (err) {
38 | console.error("something wrong with auth middleware");
39 | res.status(500).json({ errors: [{ msg: "Server Error" }] });
40 | }
41 | };
42 |
--------------------------------------------------------------------------------
/middleware/checkObjectId.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 | // middleware to check for a valid object id
3 | const checkObjectId = (idToCheck) => (req, res, next) => {
4 | if (!mongoose.Types.ObjectId.isValid(req.params[idToCheck]))
5 | return res.status(400).json({ msg: 'Invalid ID' });
6 | next();
7 | };
8 |
9 | module.exports = checkObjectId;
10 |
--------------------------------------------------------------------------------
/models/group.js:
--------------------------------------------------------------------------------
1 | const mongoose = require("mongoose");
2 | const Schema = mongoose.Schema;
3 |
4 | const groupSchema = new Schema(
5 | {
6 | name: {
7 | type: String,
8 | required: true,
9 | },
10 |
11 | userId: {
12 | type: Schema.Types.ObjectId,
13 | required: true,
14 | },
15 | contents: [
16 | {
17 | type: Schema.Types.ObjectId,
18 | },
19 | ],
20 | },
21 | {
22 | timestamps: true,
23 | collection: "group",
24 | }
25 | );
26 | module.exports = mongoose.model("group", groupSchema);
27 |
--------------------------------------------------------------------------------
/models/metrics.js:
--------------------------------------------------------------------------------
1 | const { ObjectId } = require("mongoose");
2 | const mongoose = require("mongoose");
3 | const Schema = mongoose.Schema;
4 | const metricsSchema = new Schema(
5 | {
6 | userId: {
7 | type: Schema.Types.ObjectId,
8 | required: true,
9 | },
10 | name: {
11 | type: String,
12 | },
13 | description: {
14 | type: String,
15 | },
16 | fieldType: {
17 | type: String,
18 | },
19 | prefix: {
20 | type: String,
21 | },
22 | postfix: {
23 | type: String,
24 | },
25 | chartType: {
26 | type: String,
27 | },
28 | status: {
29 | type: String,
30 | },
31 | ignore: {
32 | type: Boolean,
33 | default: true,
34 | },
35 | timing: {
36 | type: String,
37 | },
38 | },
39 | {
40 | timestamps: true,
41 | collection: "metrics",
42 | }
43 | );
44 | module.exports = mongoose.model("metrics", metricsSchema);
45 |
--------------------------------------------------------------------------------
/models/user.js:
--------------------------------------------------------------------------------
1 | const mongoose = require("mongoose");
2 | const Metrics = require("./metrics");
3 | const Schema = mongoose.Schema;
4 | const userSchema = new Schema(
5 | {
6 | name: {
7 | type: String,
8 | required: true,
9 | },
10 | email: {
11 | type: String,
12 | required: true,
13 | unique: true,
14 | },
15 | password: {
16 | type: String,
17 | required: true,
18 | },
19 | },
20 | {
21 | timestamps: true,
22 | collection: "user",
23 | }
24 | );
25 |
26 | // userSchema.pre("save", async function (next) {
27 | // try {
28 | // // Create new profile with predefined fields
29 |
30 | // const newOtherDocs = [
31 | // {
32 | // userId: this._id,
33 | // chartType: "line",
34 | // description: "",
35 | // fieldType: "number",
36 | // name: "Mood",
37 | // order: "",
38 | // postfix: "",
39 | // prefix: "",
40 | // status: "active",
41 | // timing: "daily",
42 | // },
43 | // {
44 | // userId: this._id,
45 | // chartType: "line",
46 | // description: "",
47 | // fieldType: "number",
48 | // name: "Heart rate",
49 | // order: "",
50 | // postfix: "",
51 | // prefix: "",
52 | // status: "active",
53 | // timing: "daily",
54 | // },
55 | // {
56 | // userId: this._id,
57 | // chartType: "line",
58 | // description: "",
59 | // fieldType: "number",
60 | // name: "Weight",
61 | // order: "",
62 | // postfix: "",
63 | // prefix: "",
64 | // status: "active",
65 | // timing: "daily",
66 | // },
67 | // ];
68 |
69 | // // Save new profile
70 | // await Metrics.insertMany(newOtherDocs);
71 |
72 | // next();
73 | // } catch (err) {
74 | // console.error(err.message);
75 | // next(err);
76 | // }
77 | // });
78 | module.exports = mongoose.model("user", userSchema);
79 |
--------------------------------------------------------------------------------
/models/wage.js:
--------------------------------------------------------------------------------
1 | const mongoose = require("mongoose");
2 | const Schema = mongoose.Schema;
3 | const wageSchema = new Schema(
4 | {
5 | userId: {
6 | type: Schema.Types.ObjectId,
7 | required: true,
8 | },
9 | metricsId: {
10 | type: Schema.Types.ObjectId,
11 | required: true,
12 | },
13 | wage: {
14 | type: String,
15 | },
16 | },
17 | {
18 | timestamps: true,
19 | collection: "wage",
20 | }
21 | );
22 | module.exports = mongoose.model("wage", wageSchema);
23 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "web",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "server.js",
6 | "scripts": {
7 | "start": "node ./bin/www",
8 | "dev": "nodemon ./bin/www",
9 | "debug": "nodemon --inspect ./bin/www",
10 | "test": "NODE_ENV=test ./node_modules/.bin/mocha --exit --timeout 30000",
11 | "heroku-postbuild": "cd client && npm install --only=dev && npm install && npm run build"
12 | },
13 | "author": "",
14 | "license": "ISC",
15 | "dependencies": {
16 | "bcrypt": "^5.1.0",
17 | "body-parser": "^1.20.1",
18 | "config": "^3.3.9",
19 | "connect-mongo": "^5.0.0",
20 | "cors": "^2.8.5",
21 | "cross-env": "^7.0.3",
22 | "dotenv": "^16.0.3",
23 | "express": "^4.18.2",
24 | "express-session": "^1.17.3",
25 | "express-validator": "^6.15.0",
26 | "helmet": "^6.0.1",
27 | "http-errors": "^2.0.0",
28 | "jsonwebtoken": "^9.0.0",
29 | "lodash": "^4.17.21",
30 | "mongodb": "^5.4.0",
31 | "mongoose": "^5.9.6",
32 | "morgan": "^1.10.0"
33 | },
34 | "devDependencies": {
35 | "nodemon": "^2.0.20"
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/routes/auth.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const router = express.Router();
3 |
4 | const { register, login, loadUser } = require("../controllers/auth.js");
5 | const auth = require("../middleware/auth");
6 |
7 | router.get("/loadUser", auth, loadUser); // load user
8 | router.post("/register", register);
9 | router.post("/login", login);
10 |
11 | module.exports = router;
12 |
--------------------------------------------------------------------------------
/routes/group.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const router = express.Router();
3 | const {
4 | addGroup,
5 | getUserGroup,
6 | deleteGroupById,
7 | updateGroup,
8 | } = require("../controllers/group.js");
9 | const auth = require("../middleware/auth");
10 |
11 | router.post("", auth, addGroup);
12 | router.put("", auth, updateGroup);
13 | router.get("", auth, getUserGroup);
14 | router.delete("", auth, deleteGroupById);
15 |
16 | module.exports = router;
17 |
--------------------------------------------------------------------------------
/routes/metrics.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const router = express.Router();
3 | const {
4 | addMetrics,
5 | getUserMetrics,
6 | deleteMetricById,
7 | updateMetrics,
8 | } = require("../controllers/metrics.js");
9 | const {
10 | addMetricsWage,
11 | updateMetricsWage,
12 | getUserMetricsAllWages,
13 | getUserMetricsAllTodayWages,
14 | deleteMetricWageById,
15 | getLastestMetricsWagesById,
16 | } = require("../controllers/wage.js");
17 | const auth = require("../middleware/auth");
18 |
19 | router.post("", auth, addMetrics);
20 | router.put("", auth, updateMetrics);
21 | router.get("", auth, getUserMetrics);
22 | router.delete("", auth, deleteMetricById);
23 | router.post("/wage", auth, addMetricsWage);
24 | router.put("/wage", auth, updateMetricsWage);
25 | router.get("/wage", auth, getUserMetricsAllWages);
26 | router.get("/wage/today", auth, getUserMetricsAllTodayWages);
27 | router.delete("/wage", auth, deleteMetricWageById);
28 | router.get("/wage/lastest", auth, getLastestMetricsWagesById);
29 |
30 | module.exports = router;
31 |
--------------------------------------------------------------------------------
/routes/routes.js:
--------------------------------------------------------------------------------
1 | const path = require("path");
2 | const express = require("express");
3 | const authRountes = require("./auth");
4 | const metricsRoutes = require("./metrics");
5 | const groupRoutes = require("./group");
6 | module.exports = (app) => {
7 | // const router = express.Router();
8 |
9 | // //sample route
10 | // router.get("/hello", (req, res) => {
11 | // res.send("Hello World!");
12 | // });
13 |
14 | app.use("/api/auth", authRountes);
15 | app.use("/api/metrics", metricsRoutes);
16 | app.use("/api/group", groupRoutes);
17 | app.get("/api/*", (req, res) => {
18 | res.status(404).json({
19 | message: "Not found",
20 | });
21 | });
22 | app.use(express.static(path.join(__dirname, "../client", "build")));
23 | app.get("*", (req, res) => {
24 | res.sendFile(path.join(__dirname, "../client", "build", "index.html"));
25 | });
26 | };
27 |
--------------------------------------------------------------------------------
/server.js:
--------------------------------------------------------------------------------
1 | // const app = require("./config/express");
2 | // const mongoose = require("./config/mongoose");
3 |
4 | // require("dotenv").config();
5 | // //middlewares
6 |
7 | // const port = process.env.PORT;
8 |
9 | // mongoose.on("connected", () => {
10 | // app.listen(port || 8000, () => {
11 | // require("./routes/routes")(app);
12 | // console.log("----------Metric LogoBook -----------");
13 | // console.log(`Server app listening on port ${port}`);
14 | // });
15 | // });
16 | // module.exports = app;
17 |
18 | const path = require("path");
19 | const createError = require("http-errors");
20 | const cors = require("cors");
21 | const express = require("express");
22 | // const session = require("express-session");
23 | // const MongoStore = require("connect-mongo")(session);
24 | // const storeOptions = require("./config/storeOptions");
25 | const logger = require("morgan");
26 | const authRoutes = require("./routes/auth");
27 | const metricsRoutes = require("./routes/metrics");
28 | const groupRoutes = require("./routes/group");
29 |
30 | const { json, urlencoded } = express;
31 |
32 | var app = express();
33 |
34 | app.use(cors());
35 | app.use(logger("dev"));
36 | app.use(json());
37 | app.use(urlencoded({ extended: false }));
38 | app.use(express.static(path.join(__dirname, "client", "build")));
39 |
40 | // app.use(
41 | // session({
42 | // name: "sess_calendapp",
43 | // secret: process.env.SESS_SECRET,
44 | // store: new MongoStore(storeOptions),
45 | // resave: false,
46 | // saveUninitialized: false,
47 | // cookie: {
48 | // maxAge: 1000 * 60 * 60,
49 | // httpOnly: false,
50 | // secure: false,
51 | // },
52 | // })
53 | // );
54 |
55 | app.use("/api/auth", authRoutes);
56 | app.use("/api/metrics", metricsRoutes);
57 | app.use("/api/group", groupRoutes);
58 |
59 | app.get("*", (req, res) => {
60 | res.sendFile(path.join(__dirname, "client", "build", "index.html"));
61 | });
62 |
63 | // catch 404 and forward to error handler
64 | app.use(function (req, res, next) {
65 | next(createError(404));
66 | });
67 |
68 | // error handler
69 | app.use(function (err, req, res, next) {
70 | // set locals, only providing error in development
71 | console.log(err);
72 | res.locals.message = err.message;
73 | res.locals.error = req.app.get("env") === "development" ? err : {};
74 | // render the error page
75 | res.status(err.status || 500);
76 | res.json({ error: err });
77 | });
78 |
79 | module.exports = app;
80 |
--------------------------------------------------------------------------------
/utils/auth.js:
--------------------------------------------------------------------------------
1 | const jwt = require("jsonwebtoken");
2 |
3 | exports.createJWT = (email, userId, duration) => {
4 | const payload = {
5 | email,
6 | userId,
7 | duration
8 | };
9 | return jwt.sign(payload, process.env.TOKEN_SECRET, {
10 | expiresIn: duration,
11 | });
12 | };
--------------------------------------------------------------------------------
/utils/isEmpty.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dev-miro26/Metrics-for-health-Node-backend/4bdefddef6aba164aea287487dacdff8e67f5ffa/utils/isEmpty.js
--------------------------------------------------------------------------------