Spaces:
Sleeping
Sleeping
Ahmad Shallouf
commited on
Commit
β’
88bf46c
1
Parent(s):
4bb8324
added control pael
Browse files- .DS_Store +0 -0
- README.md +27 -11
- docker-compose.yaml +0 -9
- package-lock.json +275 -354
- src/.DS_Store +0 -0
- src/app/.DS_Store +0 -0
- src/app/app.routes.ts +3 -0
- src/{assets β app/components}/.DS_Store +0 -0
- src/app/components/body/control-panel/admin-login/admin-login.component.css +43 -0
- src/app/components/body/control-panel/admin-login/admin-login.component.html +23 -0
- src/app/components/body/control-panel/admin-login/admin-login.component.spec.ts +23 -0
- src/app/components/body/control-panel/admin-login/admin-login.component.ts +39 -0
- src/app/components/body/control-panel/control-panel.component.css +36 -0
- src/app/components/body/control-panel/control-panel.component.html +144 -0
- src/app/components/body/control-panel/control-panel.component.spec.ts +23 -0
- src/app/components/body/control-panel/control-panel.component.ts +110 -0
- src/app/state_management/models/control-panel-entry.model.ts +16 -0
- src/app/state_management/models/leaderboard-entry.model.ts +0 -2
- src/app/state_management/models/state.model.ts +4 -0
- src/app/state_management/services/app-state.service.ts +61 -3
- src/app/state_management/services/authentication.service.spec.ts +16 -0
- src/app/state_management/services/authentication.service.ts +74 -0
- src/styles.css +1 -3
.DS_Store
CHANGED
Binary files a/.DS_Store and b/.DS_Store differ
|
|
README.md
CHANGED
@@ -1,11 +1,27 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# CompugeFrontend
|
2 |
+
|
3 |
+
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 17.3.4.
|
4 |
+
|
5 |
+
## Development server
|
6 |
+
|
7 |
+
Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application will automatically reload if you change any of the source files.
|
8 |
+
|
9 |
+
## Code scaffolding
|
10 |
+
|
11 |
+
Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
|
12 |
+
|
13 |
+
## Build
|
14 |
+
|
15 |
+
Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory.
|
16 |
+
|
17 |
+
## Running unit tests
|
18 |
+
|
19 |
+
Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
20 |
+
|
21 |
+
## Running end-to-end tests
|
22 |
+
|
23 |
+
Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities.
|
24 |
+
|
25 |
+
## Further help
|
26 |
+
|
27 |
+
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
docker-compose.yaml
DELETED
@@ -1,9 +0,0 @@
|
|
1 |
-
version: '3.7'
|
2 |
-
services:
|
3 |
-
frontend:
|
4 |
-
build:
|
5 |
-
context: .
|
6 |
-
args:
|
7 |
-
PROFILE: production
|
8 |
-
ports:
|
9 |
-
- '4200:4200' # Port mapping
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
package-lock.json
CHANGED
@@ -266,9 +266,9 @@
|
|
266 |
}
|
267 |
},
|
268 |
"node_modules/@angular/animations": {
|
269 |
-
"version": "17.3.
|
270 |
-
"resolved": "https://registry.npmjs.org/@angular/animations/-/animations-17.3.
|
271 |
-
"integrity": "sha512-
|
272 |
"dependencies": {
|
273 |
"tslib": "^2.3.0"
|
274 |
},
|
@@ -276,7 +276,7 @@
|
|
276 |
"node": "^18.13.0 || >=20.9.0"
|
277 |
},
|
278 |
"peerDependencies": {
|
279 |
-
"@angular/core": "17.3.
|
280 |
}
|
281 |
},
|
282 |
"node_modules/@angular/cdk": {
|
@@ -330,9 +330,9 @@
|
|
330 |
}
|
331 |
},
|
332 |
"node_modules/@angular/common": {
|
333 |
-
"version": "17.3.
|
334 |
-
"resolved": "https://registry.npmjs.org/@angular/common/-/common-17.3.
|
335 |
-
"integrity": "sha512-
|
336 |
"dependencies": {
|
337 |
"tslib": "^2.3.0"
|
338 |
},
|
@@ -340,14 +340,14 @@
|
|
340 |
"node": "^18.13.0 || >=20.9.0"
|
341 |
},
|
342 |
"peerDependencies": {
|
343 |
-
"@angular/core": "17.3.
|
344 |
"rxjs": "^6.5.3 || ^7.4.0"
|
345 |
}
|
346 |
},
|
347 |
"node_modules/@angular/compiler": {
|
348 |
-
"version": "17.3.
|
349 |
-
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-17.3.
|
350 |
-
"integrity": "sha512-
|
351 |
"dependencies": {
|
352 |
"tslib": "^2.3.0"
|
353 |
},
|
@@ -355,7 +355,7 @@
|
|
355 |
"node": "^18.13.0 || >=20.9.0"
|
356 |
},
|
357 |
"peerDependencies": {
|
358 |
-
"@angular/core": "17.3.
|
359 |
},
|
360 |
"peerDependenciesMeta": {
|
361 |
"@angular/core": {
|
@@ -364,9 +364,9 @@
|
|
364 |
}
|
365 |
},
|
366 |
"node_modules/@angular/compiler-cli": {
|
367 |
-
"version": "17.3.
|
368 |
-
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.3.
|
369 |
-
"integrity": "sha512-
|
370 |
"dev": true,
|
371 |
"dependencies": {
|
372 |
"@babel/core": "7.23.9",
|
@@ -387,7 +387,7 @@
|
|
387 |
"node": "^18.13.0 || >=20.9.0"
|
388 |
},
|
389 |
"peerDependencies": {
|
390 |
-
"@angular/compiler": "17.3.
|
391 |
"typescript": ">=5.2 <5.5"
|
392 |
}
|
393 |
},
|
@@ -437,9 +437,9 @@
|
|
437 |
}
|
438 |
},
|
439 |
"node_modules/@angular/core": {
|
440 |
-
"version": "17.3.
|
441 |
-
"resolved": "https://registry.npmjs.org/@angular/core/-/core-17.3.
|
442 |
-
"integrity": "sha512-
|
443 |
"dependencies": {
|
444 |
"tslib": "^2.3.0"
|
445 |
},
|
@@ -468,9 +468,9 @@
|
|
468 |
}
|
469 |
},
|
470 |
"node_modules/@angular/forms": {
|
471 |
-
"version": "17.3.
|
472 |
-
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-17.3.
|
473 |
-
"integrity": "sha512-
|
474 |
"dependencies": {
|
475 |
"tslib": "^2.3.0"
|
476 |
},
|
@@ -478,9 +478,9 @@
|
|
478 |
"node": "^18.13.0 || >=20.9.0"
|
479 |
},
|
480 |
"peerDependencies": {
|
481 |
-
"@angular/common": "17.3.
|
482 |
-
"@angular/core": "17.3.
|
483 |
-
"@angular/platform-browser": "17.3.
|
484 |
"rxjs": "^6.5.3 || ^7.4.0"
|
485 |
}
|
486 |
},
|
@@ -549,9 +549,9 @@
|
|
549 |
}
|
550 |
},
|
551 |
"node_modules/@angular/platform-browser": {
|
552 |
-
"version": "17.3.
|
553 |
-
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-17.3.
|
554 |
-
"integrity": "sha512-
|
555 |
"dependencies": {
|
556 |
"tslib": "^2.3.0"
|
557 |
},
|
@@ -559,9 +559,9 @@
|
|
559 |
"node": "^18.13.0 || >=20.9.0"
|
560 |
},
|
561 |
"peerDependencies": {
|
562 |
-
"@angular/animations": "17.3.
|
563 |
-
"@angular/common": "17.3.
|
564 |
-
"@angular/core": "17.3.
|
565 |
},
|
566 |
"peerDependenciesMeta": {
|
567 |
"@angular/animations": {
|
@@ -570,9 +570,9 @@
|
|
570 |
}
|
571 |
},
|
572 |
"node_modules/@angular/platform-browser-dynamic": {
|
573 |
-
"version": "17.3.
|
574 |
-
"resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-17.3.
|
575 |
-
"integrity": "sha512-
|
576 |
"dependencies": {
|
577 |
"tslib": "^2.3.0"
|
578 |
},
|
@@ -580,16 +580,16 @@
|
|
580 |
"node": "^18.13.0 || >=20.9.0"
|
581 |
},
|
582 |
"peerDependencies": {
|
583 |
-
"@angular/common": "17.3.
|
584 |
-
"@angular/compiler": "17.3.
|
585 |
-
"@angular/core": "17.3.
|
586 |
-
"@angular/platform-browser": "17.3.
|
587 |
}
|
588 |
},
|
589 |
"node_modules/@angular/router": {
|
590 |
-
"version": "17.3.
|
591 |
-
"resolved": "https://registry.npmjs.org/@angular/router/-/router-17.3.
|
592 |
-
"integrity": "sha512-
|
593 |
"dependencies": {
|
594 |
"tslib": "^2.3.0"
|
595 |
},
|
@@ -597,9 +597,9 @@
|
|
597 |
"node": "^18.13.0 || >=20.9.0"
|
598 |
},
|
599 |
"peerDependencies": {
|
600 |
-
"@angular/common": "17.3.
|
601 |
-
"@angular/core": "17.3.
|
602 |
-
"@angular/platform-browser": "17.3.
|
603 |
"rxjs": "^6.5.3 || ^7.4.0"
|
604 |
}
|
605 |
},
|
@@ -617,9 +617,9 @@
|
|
617 |
}
|
618 |
},
|
619 |
"node_modules/@babel/compat-data": {
|
620 |
-
"version": "7.
|
621 |
-
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.
|
622 |
-
"integrity": "sha512-
|
623 |
"dev": true,
|
624 |
"engines": {
|
625 |
"node": ">=6.9.0"
|
@@ -711,12 +711,12 @@
|
|
711 |
}
|
712 |
},
|
713 |
"node_modules/@babel/helper-compilation-targets": {
|
714 |
-
"version": "7.
|
715 |
-
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.
|
716 |
-
"integrity": "sha512-
|
717 |
"dev": true,
|
718 |
"dependencies": {
|
719 |
-
"@babel/compat-data": "^7.
|
720 |
"@babel/helper-validator-option": "^7.24.8",
|
721 |
"browserslist": "^4.23.1",
|
722 |
"lru-cache": "^5.1.1",
|
@@ -736,19 +736,17 @@
|
|
736 |
}
|
737 |
},
|
738 |
"node_modules/@babel/helper-create-class-features-plugin": {
|
739 |
-
"version": "7.
|
740 |
-
"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.
|
741 |
-
"integrity": "sha512-
|
742 |
"dev": true,
|
743 |
"dependencies": {
|
744 |
"@babel/helper-annotate-as-pure": "^7.24.7",
|
745 |
-
"@babel/helper-environment-visitor": "^7.24.7",
|
746 |
-
"@babel/helper-function-name": "^7.24.7",
|
747 |
"@babel/helper-member-expression-to-functions": "^7.24.8",
|
748 |
"@babel/helper-optimise-call-expression": "^7.24.7",
|
749 |
-
"@babel/helper-replace-supers": "^7.
|
750 |
"@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
|
751 |
-
"@babel/
|
752 |
"semver": "^6.3.1"
|
753 |
},
|
754 |
"engines": {
|
@@ -770,18 +768,6 @@
|
|
770 |
"node": ">=6.9.0"
|
771 |
}
|
772 |
},
|
773 |
-
"node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-split-export-declaration": {
|
774 |
-
"version": "7.24.7",
|
775 |
-
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz",
|
776 |
-
"integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==",
|
777 |
-
"dev": true,
|
778 |
-
"dependencies": {
|
779 |
-
"@babel/types": "^7.24.7"
|
780 |
-
},
|
781 |
-
"engines": {
|
782 |
-
"node": ">=6.9.0"
|
783 |
-
}
|
784 |
-
},
|
785 |
"node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": {
|
786 |
"version": "6.3.1",
|
787 |
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
@@ -792,9 +778,9 @@
|
|
792 |
}
|
793 |
},
|
794 |
"node_modules/@babel/helper-create-regexp-features-plugin": {
|
795 |
-
"version": "7.
|
796 |
-
"resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.
|
797 |
-
"integrity": "sha512
|
798 |
"dev": true,
|
799 |
"dependencies": {
|
800 |
"@babel/helper-annotate-as-pure": "^7.24.7",
|
@@ -857,31 +843,6 @@
|
|
857 |
"node": ">=6.9.0"
|
858 |
}
|
859 |
},
|
860 |
-
"node_modules/@babel/helper-function-name": {
|
861 |
-
"version": "7.24.7",
|
862 |
-
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz",
|
863 |
-
"integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==",
|
864 |
-
"dev": true,
|
865 |
-
"dependencies": {
|
866 |
-
"@babel/template": "^7.24.7",
|
867 |
-
"@babel/types": "^7.24.7"
|
868 |
-
},
|
869 |
-
"engines": {
|
870 |
-
"node": ">=6.9.0"
|
871 |
-
}
|
872 |
-
},
|
873 |
-
"node_modules/@babel/helper-hoist-variables": {
|
874 |
-
"version": "7.24.7",
|
875 |
-
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz",
|
876 |
-
"integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==",
|
877 |
-
"dev": true,
|
878 |
-
"dependencies": {
|
879 |
-
"@babel/types": "^7.24.7"
|
880 |
-
},
|
881 |
-
"engines": {
|
882 |
-
"node": ">=6.9.0"
|
883 |
-
}
|
884 |
-
},
|
885 |
"node_modules/@babel/helper-member-expression-to-functions": {
|
886 |
"version": "7.24.8",
|
887 |
"resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz",
|
@@ -909,16 +870,15 @@
|
|
909 |
}
|
910 |
},
|
911 |
"node_modules/@babel/helper-module-transforms": {
|
912 |
-
"version": "7.
|
913 |
-
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.
|
914 |
-
"integrity": "sha512-
|
915 |
"dev": true,
|
916 |
"dependencies": {
|
917 |
-
"@babel/helper-environment-visitor": "^7.24.7",
|
918 |
"@babel/helper-module-imports": "^7.24.7",
|
919 |
"@babel/helper-simple-access": "^7.24.7",
|
920 |
-
"@babel/helper-
|
921 |
-
"@babel/
|
922 |
},
|
923 |
"engines": {
|
924 |
"node": ">=6.9.0"
|
@@ -927,18 +887,6 @@
|
|
927 |
"@babel/core": "^7.0.0"
|
928 |
}
|
929 |
},
|
930 |
-
"node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-split-export-declaration": {
|
931 |
-
"version": "7.24.7",
|
932 |
-
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz",
|
933 |
-
"integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==",
|
934 |
-
"dev": true,
|
935 |
-
"dependencies": {
|
936 |
-
"@babel/types": "^7.24.7"
|
937 |
-
},
|
938 |
-
"engines": {
|
939 |
-
"node": ">=6.9.0"
|
940 |
-
}
|
941 |
-
},
|
942 |
"node_modules/@babel/helper-optimise-call-expression": {
|
943 |
"version": "7.24.7",
|
944 |
"resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz",
|
@@ -961,14 +909,14 @@
|
|
961 |
}
|
962 |
},
|
963 |
"node_modules/@babel/helper-remap-async-to-generator": {
|
964 |
-
"version": "7.
|
965 |
-
"resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.
|
966 |
-
"integrity": "sha512-
|
967 |
"dev": true,
|
968 |
"dependencies": {
|
969 |
"@babel/helper-annotate-as-pure": "^7.24.7",
|
970 |
-
"@babel/helper-
|
971 |
-
"@babel/
|
972 |
},
|
973 |
"engines": {
|
974 |
"node": ">=6.9.0"
|
@@ -990,14 +938,14 @@
|
|
990 |
}
|
991 |
},
|
992 |
"node_modules/@babel/helper-replace-supers": {
|
993 |
-
"version": "7.
|
994 |
-
"resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.
|
995 |
-
"integrity": "sha512-
|
996 |
"dev": true,
|
997 |
"dependencies": {
|
998 |
-
"@babel/helper-
|
999 |
-
"@babel/helper-
|
1000 |
-
"@babel/
|
1001 |
},
|
1002 |
"engines": {
|
1003 |
"node": ">=6.9.0"
|
@@ -1072,28 +1020,27 @@
|
|
1072 |
}
|
1073 |
},
|
1074 |
"node_modules/@babel/helper-wrap-function": {
|
1075 |
-
"version": "7.
|
1076 |
-
"resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.
|
1077 |
-
"integrity": "sha512-
|
1078 |
"dev": true,
|
1079 |
"dependencies": {
|
1080 |
-
"@babel/
|
1081 |
-
"@babel/
|
1082 |
-
"@babel/
|
1083 |
-
"@babel/types": "^7.24.7"
|
1084 |
},
|
1085 |
"engines": {
|
1086 |
"node": ">=6.9.0"
|
1087 |
}
|
1088 |
},
|
1089 |
"node_modules/@babel/helpers": {
|
1090 |
-
"version": "7.
|
1091 |
-
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.
|
1092 |
-
"integrity": "sha512-
|
1093 |
"dev": true,
|
1094 |
"dependencies": {
|
1095 |
-
"@babel/template": "^7.
|
1096 |
-
"@babel/types": "^7.
|
1097 |
},
|
1098 |
"engines": {
|
1099 |
"node": ">=6.9.0"
|
@@ -1115,10 +1062,13 @@
|
|
1115 |
}
|
1116 |
},
|
1117 |
"node_modules/@babel/parser": {
|
1118 |
-
"version": "7.
|
1119 |
-
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.
|
1120 |
-
"integrity": "sha512-
|
1121 |
"dev": true,
|
|
|
|
|
|
|
1122 |
"bin": {
|
1123 |
"parser": "bin/babel-parser.js"
|
1124 |
},
|
@@ -1127,12 +1077,12 @@
|
|
1127 |
}
|
1128 |
},
|
1129 |
"node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
|
1130 |
-
"version": "7.
|
1131 |
-
"resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.
|
1132 |
-
"integrity": "sha512-
|
1133 |
"dev": true,
|
1134 |
"dependencies": {
|
1135 |
-
"@babel/helper-plugin-utils": "^7.24.
|
1136 |
},
|
1137 |
"engines": {
|
1138 |
"node": ">=6.9.0"
|
@@ -1159,13 +1109,13 @@
|
|
1159 |
}
|
1160 |
},
|
1161 |
"node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
|
1162 |
-
"version": "7.
|
1163 |
-
"resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.
|
1164 |
-
"integrity": "sha512-
|
1165 |
"dev": true,
|
1166 |
"dependencies": {
|
1167 |
-
"@babel/helper-
|
1168 |
-
"@babel/
|
1169 |
},
|
1170 |
"engines": {
|
1171 |
"node": ">=6.9.0"
|
@@ -1487,12 +1437,12 @@
|
|
1487 |
}
|
1488 |
},
|
1489 |
"node_modules/@babel/plugin-transform-block-scoping": {
|
1490 |
-
"version": "7.
|
1491 |
-
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.
|
1492 |
-
"integrity": "sha512-
|
1493 |
"dev": true,
|
1494 |
"dependencies": {
|
1495 |
-
"@babel/helper-plugin-utils": "^7.24.
|
1496 |
},
|
1497 |
"engines": {
|
1498 |
"node": ">=6.9.0"
|
@@ -1535,18 +1485,16 @@
|
|
1535 |
}
|
1536 |
},
|
1537 |
"node_modules/@babel/plugin-transform-classes": {
|
1538 |
-
"version": "7.
|
1539 |
-
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.
|
1540 |
-
"integrity": "sha512-
|
1541 |
"dev": true,
|
1542 |
"dependencies": {
|
1543 |
"@babel/helper-annotate-as-pure": "^7.24.7",
|
1544 |
"@babel/helper-compilation-targets": "^7.24.8",
|
1545 |
-
"@babel/helper-environment-visitor": "^7.24.7",
|
1546 |
-
"@babel/helper-function-name": "^7.24.7",
|
1547 |
"@babel/helper-plugin-utils": "^7.24.8",
|
1548 |
-
"@babel/helper-replace-supers": "^7.
|
1549 |
-
"@babel/
|
1550 |
"globals": "^11.1.0"
|
1551 |
},
|
1552 |
"engines": {
|
@@ -1568,18 +1516,6 @@
|
|
1568 |
"node": ">=6.9.0"
|
1569 |
}
|
1570 |
},
|
1571 |
-
"node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-split-export-declaration": {
|
1572 |
-
"version": "7.24.7",
|
1573 |
-
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz",
|
1574 |
-
"integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==",
|
1575 |
-
"dev": true,
|
1576 |
-
"dependencies": {
|
1577 |
-
"@babel/types": "^7.24.7"
|
1578 |
-
},
|
1579 |
-
"engines": {
|
1580 |
-
"node": ">=6.9.0"
|
1581 |
-
}
|
1582 |
-
},
|
1583 |
"node_modules/@babel/plugin-transform-computed-properties": {
|
1584 |
"version": "7.24.7",
|
1585 |
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz",
|
@@ -1707,14 +1643,14 @@
|
|
1707 |
}
|
1708 |
},
|
1709 |
"node_modules/@babel/plugin-transform-function-name": {
|
1710 |
-
"version": "7.
|
1711 |
-
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.
|
1712 |
-
"integrity": "sha512-
|
1713 |
"dev": true,
|
1714 |
"dependencies": {
|
1715 |
-
"@babel/helper-compilation-targets": "^7.24.
|
1716 |
-
"@babel/helper-
|
1717 |
-
"@babel/
|
1718 |
},
|
1719 |
"engines": {
|
1720 |
"node": ">=6.9.0"
|
@@ -1740,12 +1676,12 @@
|
|
1740 |
}
|
1741 |
},
|
1742 |
"node_modules/@babel/plugin-transform-literals": {
|
1743 |
-
"version": "7.
|
1744 |
-
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.
|
1745 |
-
"integrity": "sha512-
|
1746 |
"dev": true,
|
1747 |
"dependencies": {
|
1748 |
-
"@babel/helper-plugin-utils": "^7.24.
|
1749 |
},
|
1750 |
"engines": {
|
1751 |
"node": ">=6.9.0"
|
@@ -1819,15 +1755,15 @@
|
|
1819 |
}
|
1820 |
},
|
1821 |
"node_modules/@babel/plugin-transform-modules-systemjs": {
|
1822 |
-
"version": "7.
|
1823 |
-
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.
|
1824 |
-
"integrity": "sha512-
|
1825 |
"dev": true,
|
1826 |
"dependencies": {
|
1827 |
-
"@babel/helper-
|
1828 |
-
"@babel/helper-
|
1829 |
-
"@babel/helper-
|
1830 |
-
"@babel/
|
1831 |
},
|
1832 |
"engines": {
|
1833 |
"node": ">=6.9.0"
|
@@ -2393,33 +2329,30 @@
|
|
2393 |
}
|
2394 |
},
|
2395 |
"node_modules/@babel/template": {
|
2396 |
-
"version": "7.
|
2397 |
-
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.
|
2398 |
-
"integrity": "sha512-
|
2399 |
"dev": true,
|
2400 |
"dependencies": {
|
2401 |
"@babel/code-frame": "^7.24.7",
|
2402 |
-
"@babel/parser": "^7.
|
2403 |
-
"@babel/types": "^7.
|
2404 |
},
|
2405 |
"engines": {
|
2406 |
"node": ">=6.9.0"
|
2407 |
}
|
2408 |
},
|
2409 |
"node_modules/@babel/traverse": {
|
2410 |
-
"version": "7.
|
2411 |
-
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.
|
2412 |
-
"integrity": "sha512-
|
2413 |
"dev": true,
|
2414 |
"dependencies": {
|
2415 |
"@babel/code-frame": "^7.24.7",
|
2416 |
-
"@babel/generator": "^7.
|
2417 |
-
"@babel/
|
2418 |
-
"@babel/
|
2419 |
-
"@babel/
|
2420 |
-
"@babel/helper-split-export-declaration": "^7.24.7",
|
2421 |
-
"@babel/parser": "^7.24.8",
|
2422 |
-
"@babel/types": "^7.24.8",
|
2423 |
"debug": "^4.3.1",
|
2424 |
"globals": "^11.1.0"
|
2425 |
},
|
@@ -2428,12 +2361,12 @@
|
|
2428 |
}
|
2429 |
},
|
2430 |
"node_modules/@babel/traverse/node_modules/@babel/generator": {
|
2431 |
-
"version": "7.
|
2432 |
-
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.
|
2433 |
-
"integrity": "sha512-
|
2434 |
"dev": true,
|
2435 |
"dependencies": {
|
2436 |
-
"@babel/types": "^7.
|
2437 |
"@jridgewell/gen-mapping": "^0.3.5",
|
2438 |
"@jridgewell/trace-mapping": "^0.3.25",
|
2439 |
"jsesc": "^2.5.1"
|
@@ -2442,22 +2375,10 @@
|
|
2442 |
"node": ">=6.9.0"
|
2443 |
}
|
2444 |
},
|
2445 |
-
"node_modules/@babel/traverse/node_modules/@babel/helper-split-export-declaration": {
|
2446 |
-
"version": "7.24.7",
|
2447 |
-
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz",
|
2448 |
-
"integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==",
|
2449 |
-
"dev": true,
|
2450 |
-
"dependencies": {
|
2451 |
-
"@babel/types": "^7.24.7"
|
2452 |
-
},
|
2453 |
-
"engines": {
|
2454 |
-
"node": ">=6.9.0"
|
2455 |
-
}
|
2456 |
-
},
|
2457 |
"node_modules/@babel/types": {
|
2458 |
-
"version": "7.
|
2459 |
-
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.
|
2460 |
-
"integrity": "sha512-
|
2461 |
"dev": true,
|
2462 |
"dependencies": {
|
2463 |
"@babel/helper-string-parser": "^7.24.8",
|
@@ -4148,9 +4069,9 @@
|
|
4148 |
}
|
4149 |
},
|
4150 |
"node_modules/@rollup/rollup-android-arm-eabi": {
|
4151 |
-
"version": "4.
|
4152 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.
|
4153 |
-
"integrity": "sha512-
|
4154 |
"cpu": [
|
4155 |
"arm"
|
4156 |
],
|
@@ -4161,9 +4082,9 @@
|
|
4161 |
]
|
4162 |
},
|
4163 |
"node_modules/@rollup/rollup-android-arm64": {
|
4164 |
-
"version": "4.
|
4165 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.
|
4166 |
-
"integrity": "sha512-
|
4167 |
"cpu": [
|
4168 |
"arm64"
|
4169 |
],
|
@@ -4174,9 +4095,9 @@
|
|
4174 |
]
|
4175 |
},
|
4176 |
"node_modules/@rollup/rollup-darwin-arm64": {
|
4177 |
-
"version": "4.
|
4178 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.
|
4179 |
-
"integrity": "sha512-
|
4180 |
"cpu": [
|
4181 |
"arm64"
|
4182 |
],
|
@@ -4187,9 +4108,9 @@
|
|
4187 |
]
|
4188 |
},
|
4189 |
"node_modules/@rollup/rollup-darwin-x64": {
|
4190 |
-
"version": "4.
|
4191 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.
|
4192 |
-
"integrity": "sha512-
|
4193 |
"cpu": [
|
4194 |
"x64"
|
4195 |
],
|
@@ -4200,9 +4121,9 @@
|
|
4200 |
]
|
4201 |
},
|
4202 |
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
|
4203 |
-
"version": "4.
|
4204 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.
|
4205 |
-
"integrity": "sha512-
|
4206 |
"cpu": [
|
4207 |
"arm"
|
4208 |
],
|
@@ -4213,9 +4134,9 @@
|
|
4213 |
]
|
4214 |
},
|
4215 |
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
|
4216 |
-
"version": "4.
|
4217 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.
|
4218 |
-
"integrity": "sha512-
|
4219 |
"cpu": [
|
4220 |
"arm"
|
4221 |
],
|
@@ -4226,9 +4147,9 @@
|
|
4226 |
]
|
4227 |
},
|
4228 |
"node_modules/@rollup/rollup-linux-arm64-gnu": {
|
4229 |
-
"version": "4.
|
4230 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.
|
4231 |
-
"integrity": "sha512-
|
4232 |
"cpu": [
|
4233 |
"arm64"
|
4234 |
],
|
@@ -4239,9 +4160,9 @@
|
|
4239 |
]
|
4240 |
},
|
4241 |
"node_modules/@rollup/rollup-linux-arm64-musl": {
|
4242 |
-
"version": "4.
|
4243 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.
|
4244 |
-
"integrity": "sha512
|
4245 |
"cpu": [
|
4246 |
"arm64"
|
4247 |
],
|
@@ -4252,9 +4173,9 @@
|
|
4252 |
]
|
4253 |
},
|
4254 |
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
|
4255 |
-
"version": "4.
|
4256 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.
|
4257 |
-
"integrity": "sha512-
|
4258 |
"cpu": [
|
4259 |
"ppc64"
|
4260 |
],
|
@@ -4265,9 +4186,9 @@
|
|
4265 |
]
|
4266 |
},
|
4267 |
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
|
4268 |
-
"version": "4.
|
4269 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.
|
4270 |
-
"integrity": "sha512-
|
4271 |
"cpu": [
|
4272 |
"riscv64"
|
4273 |
],
|
@@ -4278,9 +4199,9 @@
|
|
4278 |
]
|
4279 |
},
|
4280 |
"node_modules/@rollup/rollup-linux-s390x-gnu": {
|
4281 |
-
"version": "4.
|
4282 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.
|
4283 |
-
"integrity": "sha512-
|
4284 |
"cpu": [
|
4285 |
"s390x"
|
4286 |
],
|
@@ -4291,9 +4212,9 @@
|
|
4291 |
]
|
4292 |
},
|
4293 |
"node_modules/@rollup/rollup-linux-x64-gnu": {
|
4294 |
-
"version": "4.
|
4295 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.
|
4296 |
-
"integrity": "sha512-
|
4297 |
"cpu": [
|
4298 |
"x64"
|
4299 |
],
|
@@ -4304,9 +4225,9 @@
|
|
4304 |
]
|
4305 |
},
|
4306 |
"node_modules/@rollup/rollup-linux-x64-musl": {
|
4307 |
-
"version": "4.
|
4308 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.
|
4309 |
-
"integrity": "sha512-
|
4310 |
"cpu": [
|
4311 |
"x64"
|
4312 |
],
|
@@ -4317,9 +4238,9 @@
|
|
4317 |
]
|
4318 |
},
|
4319 |
"node_modules/@rollup/rollup-win32-arm64-msvc": {
|
4320 |
-
"version": "4.
|
4321 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.
|
4322 |
-
"integrity": "sha512-
|
4323 |
"cpu": [
|
4324 |
"arm64"
|
4325 |
],
|
@@ -4330,9 +4251,9 @@
|
|
4330 |
]
|
4331 |
},
|
4332 |
"node_modules/@rollup/rollup-win32-ia32-msvc": {
|
4333 |
-
"version": "4.
|
4334 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.
|
4335 |
-
"integrity": "sha512-
|
4336 |
"cpu": [
|
4337 |
"ia32"
|
4338 |
],
|
@@ -4343,9 +4264,9 @@
|
|
4343 |
]
|
4344 |
},
|
4345 |
"node_modules/@rollup/rollup-win32-x64-msvc": {
|
4346 |
-
"version": "4.
|
4347 |
-
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.
|
4348 |
-
"integrity": "sha512-
|
4349 |
"cpu": [
|
4350 |
"x64"
|
4351 |
],
|
@@ -4560,9 +4481,9 @@
|
|
4560 |
}
|
4561 |
},
|
4562 |
"node_modules/@types/eslint": {
|
4563 |
-
"version": "
|
4564 |
-
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-
|
4565 |
-
"integrity": "sha512-
|
4566 |
"dev": true,
|
4567 |
"dependencies": {
|
4568 |
"@types/estree": "*",
|
@@ -4616,9 +4537,9 @@
|
|
4616 |
"dev": true
|
4617 |
},
|
4618 |
"node_modules/@types/http-proxy": {
|
4619 |
-
"version": "1.17.
|
4620 |
-
"resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.
|
4621 |
-
"integrity": "sha512-
|
4622 |
"dev": true,
|
4623 |
"dependencies": {
|
4624 |
"@types/node": "*"
|
@@ -4643,12 +4564,12 @@
|
|
4643 |
"dev": true
|
4644 |
},
|
4645 |
"node_modules/@types/node": {
|
4646 |
-
"version": "
|
4647 |
-
"resolved": "https://registry.npmjs.org/@types/node/-/node-
|
4648 |
-
"integrity": "sha512-
|
4649 |
"dev": true,
|
4650 |
"dependencies": {
|
4651 |
-
"undici-types": "~
|
4652 |
}
|
4653 |
},
|
4654 |
"node_modules/@types/node-forge": {
|
@@ -4718,9 +4639,9 @@
|
|
4718 |
}
|
4719 |
},
|
4720 |
"node_modules/@types/ws": {
|
4721 |
-
"version": "8.5.
|
4722 |
-
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.
|
4723 |
-
"integrity": "sha512-
|
4724 |
"dev": true,
|
4725 |
"dependencies": {
|
4726 |
"@types/node": "*"
|
@@ -5440,9 +5361,9 @@
|
|
5440 |
}
|
5441 |
},
|
5442 |
"node_modules/browserslist": {
|
5443 |
-
"version": "4.23.
|
5444 |
-
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.
|
5445 |
-
"integrity": "sha512-
|
5446 |
"dev": true,
|
5447 |
"funding": [
|
5448 |
{
|
@@ -5459,9 +5380,9 @@
|
|
5459 |
}
|
5460 |
],
|
5461 |
"dependencies": {
|
5462 |
-
"caniuse-lite": "^1.0.
|
5463 |
-
"electron-to-chromium": "^1.4
|
5464 |
-
"node-releases": "^2.0.
|
5465 |
"update-browserslist-db": "^1.1.0"
|
5466 |
},
|
5467 |
"bin": {
|
@@ -5621,9 +5542,9 @@
|
|
5621 |
}
|
5622 |
},
|
5623 |
"node_modules/caniuse-lite": {
|
5624 |
-
"version": "1.0.
|
5625 |
-
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.
|
5626 |
-
"integrity": "sha512-
|
5627 |
"dev": true,
|
5628 |
"funding": [
|
5629 |
{
|
@@ -6060,12 +5981,12 @@
|
|
6060 |
}
|
6061 |
},
|
6062 |
"node_modules/core-js-compat": {
|
6063 |
-
"version": "3.
|
6064 |
-
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.
|
6065 |
-
"integrity": "sha512-
|
6066 |
"dev": true,
|
6067 |
"dependencies": {
|
6068 |
-
"browserslist": "^4.23.
|
6069 |
},
|
6070 |
"funding": {
|
6071 |
"type": "opencollective",
|
@@ -6340,9 +6261,9 @@
|
|
6340 |
}
|
6341 |
},
|
6342 |
"node_modules/debug": {
|
6343 |
-
"version": "4.3.
|
6344 |
-
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.
|
6345 |
-
"integrity": "sha512-
|
6346 |
"dev": true,
|
6347 |
"dependencies": {
|
6348 |
"ms": "2.1.2"
|
@@ -6541,9 +6462,9 @@
|
|
6541 |
"dev": true
|
6542 |
},
|
6543 |
"node_modules/electron-to-chromium": {
|
6544 |
-
"version": "1.
|
6545 |
-
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.
|
6546 |
-
"integrity": "sha512-
|
6547 |
"dev": true
|
6548 |
},
|
6549 |
"node_modules/emoji-regex": {
|
@@ -6624,9 +6545,9 @@
|
|
6624 |
}
|
6625 |
},
|
6626 |
"node_modules/enhanced-resolve": {
|
6627 |
-
"version": "5.17.
|
6628 |
-
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.
|
6629 |
-
"integrity": "sha512-
|
6630 |
"dev": true,
|
6631 |
"dependencies": {
|
6632 |
"graceful-fs": "^4.2.4",
|
@@ -7216,9 +7137,9 @@
|
|
7216 |
}
|
7217 |
},
|
7218 |
"node_modules/foreground-child": {
|
7219 |
-
"version": "3.
|
7220 |
-
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.
|
7221 |
-
"integrity": "sha512-
|
7222 |
"dev": true,
|
7223 |
"dependencies": {
|
7224 |
"cross-spawn": "^7.0.0",
|
@@ -7861,9 +7782,9 @@
|
|
7861 |
}
|
7862 |
},
|
7863 |
"node_modules/immutable": {
|
7864 |
-
"version": "4.3.
|
7865 |
-
"resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.
|
7866 |
-
"integrity": "sha512-
|
7867 |
"dev": true
|
7868 |
},
|
7869 |
"node_modules/import-fresh": {
|
@@ -8020,9 +7941,9 @@
|
|
8020 |
}
|
8021 |
},
|
8022 |
"node_modules/is-core-module": {
|
8023 |
-
"version": "2.
|
8024 |
-
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.
|
8025 |
-
"integrity": "sha512-
|
8026 |
"dev": true,
|
8027 |
"dependencies": {
|
8028 |
"hasown": "^2.0.2"
|
@@ -8464,9 +8385,9 @@
|
|
8464 |
]
|
8465 |
},
|
8466 |
"node_modules/karma": {
|
8467 |
-
"version": "6.4.
|
8468 |
-
"resolved": "https://registry.npmjs.org/karma/-/karma-6.4.
|
8469 |
-
"integrity": "sha512-
|
8470 |
"dev": true,
|
8471 |
"dependencies": {
|
8472 |
"@colors/colors": "1.5.0",
|
@@ -8693,9 +8614,9 @@
|
|
8693 |
}
|
8694 |
},
|
8695 |
"node_modules/launch-editor": {
|
8696 |
-
"version": "2.8.
|
8697 |
-
"resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.
|
8698 |
-
"integrity": "sha512-
|
8699 |
"dev": true,
|
8700 |
"dependencies": {
|
8701 |
"picocolors": "^1.0.0",
|
@@ -9264,9 +9185,9 @@
|
|
9264 |
"dev": true
|
9265 |
},
|
9266 |
"node_modules/minipass-json-stream": {
|
9267 |
-
"version": "1.0.
|
9268 |
-
"resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.
|
9269 |
-
"integrity": "sha512-
|
9270 |
"dev": true,
|
9271 |
"dependencies": {
|
9272 |
"jsonparse": "^1.3.1",
|
@@ -9639,9 +9560,9 @@
|
|
9639 |
}
|
9640 |
},
|
9641 |
"node_modules/node-releases": {
|
9642 |
-
"version": "2.0.
|
9643 |
-
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.
|
9644 |
-
"integrity": "sha512-
|
9645 |
"dev": true
|
9646 |
},
|
9647 |
"node_modules/nopt": {
|
@@ -11031,9 +10952,9 @@
|
|
11031 |
}
|
11032 |
},
|
11033 |
"node_modules/rollup": {
|
11034 |
-
"version": "4.
|
11035 |
-
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.
|
11036 |
-
"integrity": "sha512-
|
11037 |
"dev": true,
|
11038 |
"dependencies": {
|
11039 |
"@types/estree": "1.0.5"
|
@@ -11046,22 +10967,22 @@
|
|
11046 |
"npm": ">=8.0.0"
|
11047 |
},
|
11048 |
"optionalDependencies": {
|
11049 |
-
"@rollup/rollup-android-arm-eabi": "4.
|
11050 |
-
"@rollup/rollup-android-arm64": "4.
|
11051 |
-
"@rollup/rollup-darwin-arm64": "4.
|
11052 |
-
"@rollup/rollup-darwin-x64": "4.
|
11053 |
-
"@rollup/rollup-linux-arm-gnueabihf": "4.
|
11054 |
-
"@rollup/rollup-linux-arm-musleabihf": "4.
|
11055 |
-
"@rollup/rollup-linux-arm64-gnu": "4.
|
11056 |
-
"@rollup/rollup-linux-arm64-musl": "4.
|
11057 |
-
"@rollup/rollup-linux-powerpc64le-gnu": "4.
|
11058 |
-
"@rollup/rollup-linux-riscv64-gnu": "4.
|
11059 |
-
"@rollup/rollup-linux-s390x-gnu": "4.
|
11060 |
-
"@rollup/rollup-linux-x64-gnu": "4.
|
11061 |
-
"@rollup/rollup-linux-x64-musl": "4.
|
11062 |
-
"@rollup/rollup-win32-arm64-msvc": "4.
|
11063 |
-
"@rollup/rollup-win32-ia32-msvc": "4.
|
11064 |
-
"@rollup/rollup-win32-x64-msvc": "4.
|
11065 |
"fsevents": "~2.3.2"
|
11066 |
}
|
11067 |
},
|
@@ -12265,9 +12186,9 @@
|
|
12265 |
}
|
12266 |
},
|
12267 |
"node_modules/undici-types": {
|
12268 |
-
"version": "
|
12269 |
-
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-
|
12270 |
-
"integrity": "sha512-
|
12271 |
"dev": true
|
12272 |
},
|
12273 |
"node_modules/unicode-canonical-property-names-ecmascript": {
|
@@ -13430,9 +13351,9 @@
|
|
13430 |
}
|
13431 |
},
|
13432 |
"node_modules/zone.js": {
|
13433 |
-
"version": "0.14.
|
13434 |
-
"resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.
|
13435 |
-
"integrity": "sha512-
|
13436 |
}
|
13437 |
}
|
13438 |
}
|
|
|
266 |
}
|
267 |
},
|
268 |
"node_modules/@angular/animations": {
|
269 |
+
"version": "17.3.12",
|
270 |
+
"resolved": "https://registry.npmjs.org/@angular/animations/-/animations-17.3.12.tgz",
|
271 |
+
"integrity": "sha512-9hsdWF4gRRcVJtPcCcYLaX1CIyM9wUu6r+xRl6zU5hq8qhl35hig6ounz7CXFAzLf0WDBdM16bPHouVGaG76lg==",
|
272 |
"dependencies": {
|
273 |
"tslib": "^2.3.0"
|
274 |
},
|
|
|
276 |
"node": "^18.13.0 || >=20.9.0"
|
277 |
},
|
278 |
"peerDependencies": {
|
279 |
+
"@angular/core": "17.3.12"
|
280 |
}
|
281 |
},
|
282 |
"node_modules/@angular/cdk": {
|
|
|
330 |
}
|
331 |
},
|
332 |
"node_modules/@angular/common": {
|
333 |
+
"version": "17.3.12",
|
334 |
+
"resolved": "https://registry.npmjs.org/@angular/common/-/common-17.3.12.tgz",
|
335 |
+
"integrity": "sha512-vabJzvrx76XXFrm1RJZ6o/CyG32piTB/1sfFfKHdlH1QrmArb8It4gyk9oEjZ1IkAD0HvBWlfWmn+T6Vx3pdUw==",
|
336 |
"dependencies": {
|
337 |
"tslib": "^2.3.0"
|
338 |
},
|
|
|
340 |
"node": "^18.13.0 || >=20.9.0"
|
341 |
},
|
342 |
"peerDependencies": {
|
343 |
+
"@angular/core": "17.3.12",
|
344 |
"rxjs": "^6.5.3 || ^7.4.0"
|
345 |
}
|
346 |
},
|
347 |
"node_modules/@angular/compiler": {
|
348 |
+
"version": "17.3.12",
|
349 |
+
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-17.3.12.tgz",
|
350 |
+
"integrity": "sha512-vwI8oOL/gM+wPnptOVeBbMfZYwzRxQsovojZf+Zol9szl0k3SZ3FycWlxxXZGFu3VIEfrP6pXplTmyODS/Lt1w==",
|
351 |
"dependencies": {
|
352 |
"tslib": "^2.3.0"
|
353 |
},
|
|
|
355 |
"node": "^18.13.0 || >=20.9.0"
|
356 |
},
|
357 |
"peerDependencies": {
|
358 |
+
"@angular/core": "17.3.12"
|
359 |
},
|
360 |
"peerDependenciesMeta": {
|
361 |
"@angular/core": {
|
|
|
364 |
}
|
365 |
},
|
366 |
"node_modules/@angular/compiler-cli": {
|
367 |
+
"version": "17.3.12",
|
368 |
+
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.3.12.tgz",
|
369 |
+
"integrity": "sha512-1F8M7nWfChzurb7obbvuE7mJXlHtY1UG58pcwcomVtpPb+kPavgAO8OEvJHYBMV+bzSxkXt5UIwL9lt9jHUxZA==",
|
370 |
"dev": true,
|
371 |
"dependencies": {
|
372 |
"@babel/core": "7.23.9",
|
|
|
387 |
"node": "^18.13.0 || >=20.9.0"
|
388 |
},
|
389 |
"peerDependencies": {
|
390 |
+
"@angular/compiler": "17.3.12",
|
391 |
"typescript": ">=5.2 <5.5"
|
392 |
}
|
393 |
},
|
|
|
437 |
}
|
438 |
},
|
439 |
"node_modules/@angular/core": {
|
440 |
+
"version": "17.3.12",
|
441 |
+
"resolved": "https://registry.npmjs.org/@angular/core/-/core-17.3.12.tgz",
|
442 |
+
"integrity": "sha512-MuFt5yKi161JmauUta4Dh0m8ofwoq6Ino+KoOtkYMBGsSx+A7dSm+DUxxNwdj7+DNyg3LjVGCFgBFnq4g8z06A==",
|
443 |
"dependencies": {
|
444 |
"tslib": "^2.3.0"
|
445 |
},
|
|
|
468 |
}
|
469 |
},
|
470 |
"node_modules/@angular/forms": {
|
471 |
+
"version": "17.3.12",
|
472 |
+
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-17.3.12.tgz",
|
473 |
+
"integrity": "sha512-tV6r12Q3yEUlXwpVko4E+XscunTIpPkLbaiDn/MTL3Vxi2LZnsLgHyd/i38HaHN+e/H3B0a1ToSOhV5wf3ay4Q==",
|
474 |
"dependencies": {
|
475 |
"tslib": "^2.3.0"
|
476 |
},
|
|
|
478 |
"node": "^18.13.0 || >=20.9.0"
|
479 |
},
|
480 |
"peerDependencies": {
|
481 |
+
"@angular/common": "17.3.12",
|
482 |
+
"@angular/core": "17.3.12",
|
483 |
+
"@angular/platform-browser": "17.3.12",
|
484 |
"rxjs": "^6.5.3 || ^7.4.0"
|
485 |
}
|
486 |
},
|
|
|
549 |
}
|
550 |
},
|
551 |
"node_modules/@angular/platform-browser": {
|
552 |
+
"version": "17.3.12",
|
553 |
+
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-17.3.12.tgz",
|
554 |
+
"integrity": "sha512-DYY04ptWh/ulMHzd+y52WCE8QnEYGeIiW3hEIFjCN8z0kbIdFdUtEB0IK5vjNL3ejyhUmphcpeT5PYf3YXtqWQ==",
|
555 |
"dependencies": {
|
556 |
"tslib": "^2.3.0"
|
557 |
},
|
|
|
559 |
"node": "^18.13.0 || >=20.9.0"
|
560 |
},
|
561 |
"peerDependencies": {
|
562 |
+
"@angular/animations": "17.3.12",
|
563 |
+
"@angular/common": "17.3.12",
|
564 |
+
"@angular/core": "17.3.12"
|
565 |
},
|
566 |
"peerDependenciesMeta": {
|
567 |
"@angular/animations": {
|
|
|
570 |
}
|
571 |
},
|
572 |
"node_modules/@angular/platform-browser-dynamic": {
|
573 |
+
"version": "17.3.12",
|
574 |
+
"resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-17.3.12.tgz",
|
575 |
+
"integrity": "sha512-DQwV7B2x/DRLRDSisngZRdLqHdYbbrqZv2Hmu4ZbnNYaWPC8qvzgE/0CvY+UkDat3nCcsfwsMnlDeB6TL7/IaA==",
|
576 |
"dependencies": {
|
577 |
"tslib": "^2.3.0"
|
578 |
},
|
|
|
580 |
"node": "^18.13.0 || >=20.9.0"
|
581 |
},
|
582 |
"peerDependencies": {
|
583 |
+
"@angular/common": "17.3.12",
|
584 |
+
"@angular/compiler": "17.3.12",
|
585 |
+
"@angular/core": "17.3.12",
|
586 |
+
"@angular/platform-browser": "17.3.12"
|
587 |
}
|
588 |
},
|
589 |
"node_modules/@angular/router": {
|
590 |
+
"version": "17.3.12",
|
591 |
+
"resolved": "https://registry.npmjs.org/@angular/router/-/router-17.3.12.tgz",
|
592 |
+
"integrity": "sha512-dg7PHBSW9fmPKTVzwvHEeHZPZdpnUqW/U7kj8D29HTP9ur8zZnx9QcnbplwPeYb8yYa62JMnZSEel2X4PxdYBg==",
|
593 |
"dependencies": {
|
594 |
"tslib": "^2.3.0"
|
595 |
},
|
|
|
597 |
"node": "^18.13.0 || >=20.9.0"
|
598 |
},
|
599 |
"peerDependencies": {
|
600 |
+
"@angular/common": "17.3.12",
|
601 |
+
"@angular/core": "17.3.12",
|
602 |
+
"@angular/platform-browser": "17.3.12",
|
603 |
"rxjs": "^6.5.3 || ^7.4.0"
|
604 |
}
|
605 |
},
|
|
|
617 |
}
|
618 |
},
|
619 |
"node_modules/@babel/compat-data": {
|
620 |
+
"version": "7.25.2",
|
621 |
+
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz",
|
622 |
+
"integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==",
|
623 |
"dev": true,
|
624 |
"engines": {
|
625 |
"node": ">=6.9.0"
|
|
|
711 |
}
|
712 |
},
|
713 |
"node_modules/@babel/helper-compilation-targets": {
|
714 |
+
"version": "7.25.2",
|
715 |
+
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz",
|
716 |
+
"integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==",
|
717 |
"dev": true,
|
718 |
"dependencies": {
|
719 |
+
"@babel/compat-data": "^7.25.2",
|
720 |
"@babel/helper-validator-option": "^7.24.8",
|
721 |
"browserslist": "^4.23.1",
|
722 |
"lru-cache": "^5.1.1",
|
|
|
736 |
}
|
737 |
},
|
738 |
"node_modules/@babel/helper-create-class-features-plugin": {
|
739 |
+
"version": "7.25.0",
|
740 |
+
"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz",
|
741 |
+
"integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==",
|
742 |
"dev": true,
|
743 |
"dependencies": {
|
744 |
"@babel/helper-annotate-as-pure": "^7.24.7",
|
|
|
|
|
745 |
"@babel/helper-member-expression-to-functions": "^7.24.8",
|
746 |
"@babel/helper-optimise-call-expression": "^7.24.7",
|
747 |
+
"@babel/helper-replace-supers": "^7.25.0",
|
748 |
"@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
|
749 |
+
"@babel/traverse": "^7.25.0",
|
750 |
"semver": "^6.3.1"
|
751 |
},
|
752 |
"engines": {
|
|
|
768 |
"node": ">=6.9.0"
|
769 |
}
|
770 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
771 |
"node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": {
|
772 |
"version": "6.3.1",
|
773 |
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
|
|
778 |
}
|
779 |
},
|
780 |
"node_modules/@babel/helper-create-regexp-features-plugin": {
|
781 |
+
"version": "7.25.2",
|
782 |
+
"resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz",
|
783 |
+
"integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==",
|
784 |
"dev": true,
|
785 |
"dependencies": {
|
786 |
"@babel/helper-annotate-as-pure": "^7.24.7",
|
|
|
843 |
"node": ">=6.9.0"
|
844 |
}
|
845 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
846 |
"node_modules/@babel/helper-member-expression-to-functions": {
|
847 |
"version": "7.24.8",
|
848 |
"resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz",
|
|
|
870 |
}
|
871 |
},
|
872 |
"node_modules/@babel/helper-module-transforms": {
|
873 |
+
"version": "7.25.2",
|
874 |
+
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz",
|
875 |
+
"integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==",
|
876 |
"dev": true,
|
877 |
"dependencies": {
|
|
|
878 |
"@babel/helper-module-imports": "^7.24.7",
|
879 |
"@babel/helper-simple-access": "^7.24.7",
|
880 |
+
"@babel/helper-validator-identifier": "^7.24.7",
|
881 |
+
"@babel/traverse": "^7.25.2"
|
882 |
},
|
883 |
"engines": {
|
884 |
"node": ">=6.9.0"
|
|
|
887 |
"@babel/core": "^7.0.0"
|
888 |
}
|
889 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
890 |
"node_modules/@babel/helper-optimise-call-expression": {
|
891 |
"version": "7.24.7",
|
892 |
"resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz",
|
|
|
909 |
}
|
910 |
},
|
911 |
"node_modules/@babel/helper-remap-async-to-generator": {
|
912 |
+
"version": "7.25.0",
|
913 |
+
"resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz",
|
914 |
+
"integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==",
|
915 |
"dev": true,
|
916 |
"dependencies": {
|
917 |
"@babel/helper-annotate-as-pure": "^7.24.7",
|
918 |
+
"@babel/helper-wrap-function": "^7.25.0",
|
919 |
+
"@babel/traverse": "^7.25.0"
|
920 |
},
|
921 |
"engines": {
|
922 |
"node": ">=6.9.0"
|
|
|
938 |
}
|
939 |
},
|
940 |
"node_modules/@babel/helper-replace-supers": {
|
941 |
+
"version": "7.25.0",
|
942 |
+
"resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz",
|
943 |
+
"integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==",
|
944 |
"dev": true,
|
945 |
"dependencies": {
|
946 |
+
"@babel/helper-member-expression-to-functions": "^7.24.8",
|
947 |
+
"@babel/helper-optimise-call-expression": "^7.24.7",
|
948 |
+
"@babel/traverse": "^7.25.0"
|
949 |
},
|
950 |
"engines": {
|
951 |
"node": ">=6.9.0"
|
|
|
1020 |
}
|
1021 |
},
|
1022 |
"node_modules/@babel/helper-wrap-function": {
|
1023 |
+
"version": "7.25.0",
|
1024 |
+
"resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz",
|
1025 |
+
"integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==",
|
1026 |
"dev": true,
|
1027 |
"dependencies": {
|
1028 |
+
"@babel/template": "^7.25.0",
|
1029 |
+
"@babel/traverse": "^7.25.0",
|
1030 |
+
"@babel/types": "^7.25.0"
|
|
|
1031 |
},
|
1032 |
"engines": {
|
1033 |
"node": ">=6.9.0"
|
1034 |
}
|
1035 |
},
|
1036 |
"node_modules/@babel/helpers": {
|
1037 |
+
"version": "7.25.0",
|
1038 |
+
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz",
|
1039 |
+
"integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==",
|
1040 |
"dev": true,
|
1041 |
"dependencies": {
|
1042 |
+
"@babel/template": "^7.25.0",
|
1043 |
+
"@babel/types": "^7.25.0"
|
1044 |
},
|
1045 |
"engines": {
|
1046 |
"node": ">=6.9.0"
|
|
|
1062 |
}
|
1063 |
},
|
1064 |
"node_modules/@babel/parser": {
|
1065 |
+
"version": "7.25.3",
|
1066 |
+
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz",
|
1067 |
+
"integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
|
1068 |
"dev": true,
|
1069 |
+
"dependencies": {
|
1070 |
+
"@babel/types": "^7.25.2"
|
1071 |
+
},
|
1072 |
"bin": {
|
1073 |
"parser": "bin/babel-parser.js"
|
1074 |
},
|
|
|
1077 |
}
|
1078 |
},
|
1079 |
"node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
|
1080 |
+
"version": "7.25.0",
|
1081 |
+
"resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz",
|
1082 |
+
"integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==",
|
1083 |
"dev": true,
|
1084 |
"dependencies": {
|
1085 |
+
"@babel/helper-plugin-utils": "^7.24.8"
|
1086 |
},
|
1087 |
"engines": {
|
1088 |
"node": ">=6.9.0"
|
|
|
1109 |
}
|
1110 |
},
|
1111 |
"node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
|
1112 |
+
"version": "7.25.0",
|
1113 |
+
"resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz",
|
1114 |
+
"integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==",
|
1115 |
"dev": true,
|
1116 |
"dependencies": {
|
1117 |
+
"@babel/helper-plugin-utils": "^7.24.8",
|
1118 |
+
"@babel/traverse": "^7.25.0"
|
1119 |
},
|
1120 |
"engines": {
|
1121 |
"node": ">=6.9.0"
|
|
|
1437 |
}
|
1438 |
},
|
1439 |
"node_modules/@babel/plugin-transform-block-scoping": {
|
1440 |
+
"version": "7.25.0",
|
1441 |
+
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz",
|
1442 |
+
"integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==",
|
1443 |
"dev": true,
|
1444 |
"dependencies": {
|
1445 |
+
"@babel/helper-plugin-utils": "^7.24.8"
|
1446 |
},
|
1447 |
"engines": {
|
1448 |
"node": ">=6.9.0"
|
|
|
1485 |
}
|
1486 |
},
|
1487 |
"node_modules/@babel/plugin-transform-classes": {
|
1488 |
+
"version": "7.25.0",
|
1489 |
+
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz",
|
1490 |
+
"integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==",
|
1491 |
"dev": true,
|
1492 |
"dependencies": {
|
1493 |
"@babel/helper-annotate-as-pure": "^7.24.7",
|
1494 |
"@babel/helper-compilation-targets": "^7.24.8",
|
|
|
|
|
1495 |
"@babel/helper-plugin-utils": "^7.24.8",
|
1496 |
+
"@babel/helper-replace-supers": "^7.25.0",
|
1497 |
+
"@babel/traverse": "^7.25.0",
|
1498 |
"globals": "^11.1.0"
|
1499 |
},
|
1500 |
"engines": {
|
|
|
1516 |
"node": ">=6.9.0"
|
1517 |
}
|
1518 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1519 |
"node_modules/@babel/plugin-transform-computed-properties": {
|
1520 |
"version": "7.24.7",
|
1521 |
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz",
|
|
|
1643 |
}
|
1644 |
},
|
1645 |
"node_modules/@babel/plugin-transform-function-name": {
|
1646 |
+
"version": "7.25.1",
|
1647 |
+
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz",
|
1648 |
+
"integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==",
|
1649 |
"dev": true,
|
1650 |
"dependencies": {
|
1651 |
+
"@babel/helper-compilation-targets": "^7.24.8",
|
1652 |
+
"@babel/helper-plugin-utils": "^7.24.8",
|
1653 |
+
"@babel/traverse": "^7.25.1"
|
1654 |
},
|
1655 |
"engines": {
|
1656 |
"node": ">=6.9.0"
|
|
|
1676 |
}
|
1677 |
},
|
1678 |
"node_modules/@babel/plugin-transform-literals": {
|
1679 |
+
"version": "7.25.2",
|
1680 |
+
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz",
|
1681 |
+
"integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==",
|
1682 |
"dev": true,
|
1683 |
"dependencies": {
|
1684 |
+
"@babel/helper-plugin-utils": "^7.24.8"
|
1685 |
},
|
1686 |
"engines": {
|
1687 |
"node": ">=6.9.0"
|
|
|
1755 |
}
|
1756 |
},
|
1757 |
"node_modules/@babel/plugin-transform-modules-systemjs": {
|
1758 |
+
"version": "7.25.0",
|
1759 |
+
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz",
|
1760 |
+
"integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==",
|
1761 |
"dev": true,
|
1762 |
"dependencies": {
|
1763 |
+
"@babel/helper-module-transforms": "^7.25.0",
|
1764 |
+
"@babel/helper-plugin-utils": "^7.24.8",
|
1765 |
+
"@babel/helper-validator-identifier": "^7.24.7",
|
1766 |
+
"@babel/traverse": "^7.25.0"
|
1767 |
},
|
1768 |
"engines": {
|
1769 |
"node": ">=6.9.0"
|
|
|
2329 |
}
|
2330 |
},
|
2331 |
"node_modules/@babel/template": {
|
2332 |
+
"version": "7.25.0",
|
2333 |
+
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz",
|
2334 |
+
"integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==",
|
2335 |
"dev": true,
|
2336 |
"dependencies": {
|
2337 |
"@babel/code-frame": "^7.24.7",
|
2338 |
+
"@babel/parser": "^7.25.0",
|
2339 |
+
"@babel/types": "^7.25.0"
|
2340 |
},
|
2341 |
"engines": {
|
2342 |
"node": ">=6.9.0"
|
2343 |
}
|
2344 |
},
|
2345 |
"node_modules/@babel/traverse": {
|
2346 |
+
"version": "7.25.3",
|
2347 |
+
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz",
|
2348 |
+
"integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==",
|
2349 |
"dev": true,
|
2350 |
"dependencies": {
|
2351 |
"@babel/code-frame": "^7.24.7",
|
2352 |
+
"@babel/generator": "^7.25.0",
|
2353 |
+
"@babel/parser": "^7.25.3",
|
2354 |
+
"@babel/template": "^7.25.0",
|
2355 |
+
"@babel/types": "^7.25.2",
|
|
|
|
|
|
|
2356 |
"debug": "^4.3.1",
|
2357 |
"globals": "^11.1.0"
|
2358 |
},
|
|
|
2361 |
}
|
2362 |
},
|
2363 |
"node_modules/@babel/traverse/node_modules/@babel/generator": {
|
2364 |
+
"version": "7.25.0",
|
2365 |
+
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz",
|
2366 |
+
"integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==",
|
2367 |
"dev": true,
|
2368 |
"dependencies": {
|
2369 |
+
"@babel/types": "^7.25.0",
|
2370 |
"@jridgewell/gen-mapping": "^0.3.5",
|
2371 |
"@jridgewell/trace-mapping": "^0.3.25",
|
2372 |
"jsesc": "^2.5.1"
|
|
|
2375 |
"node": ">=6.9.0"
|
2376 |
}
|
2377 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2378 |
"node_modules/@babel/types": {
|
2379 |
+
"version": "7.25.2",
|
2380 |
+
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz",
|
2381 |
+
"integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==",
|
2382 |
"dev": true,
|
2383 |
"dependencies": {
|
2384 |
"@babel/helper-string-parser": "^7.24.8",
|
|
|
4069 |
}
|
4070 |
},
|
4071 |
"node_modules/@rollup/rollup-android-arm-eabi": {
|
4072 |
+
"version": "4.20.0",
|
4073 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz",
|
4074 |
+
"integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==",
|
4075 |
"cpu": [
|
4076 |
"arm"
|
4077 |
],
|
|
|
4082 |
]
|
4083 |
},
|
4084 |
"node_modules/@rollup/rollup-android-arm64": {
|
4085 |
+
"version": "4.20.0",
|
4086 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz",
|
4087 |
+
"integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==",
|
4088 |
"cpu": [
|
4089 |
"arm64"
|
4090 |
],
|
|
|
4095 |
]
|
4096 |
},
|
4097 |
"node_modules/@rollup/rollup-darwin-arm64": {
|
4098 |
+
"version": "4.20.0",
|
4099 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz",
|
4100 |
+
"integrity": "sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==",
|
4101 |
"cpu": [
|
4102 |
"arm64"
|
4103 |
],
|
|
|
4108 |
]
|
4109 |
},
|
4110 |
"node_modules/@rollup/rollup-darwin-x64": {
|
4111 |
+
"version": "4.20.0",
|
4112 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz",
|
4113 |
+
"integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==",
|
4114 |
"cpu": [
|
4115 |
"x64"
|
4116 |
],
|
|
|
4121 |
]
|
4122 |
},
|
4123 |
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
|
4124 |
+
"version": "4.20.0",
|
4125 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz",
|
4126 |
+
"integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==",
|
4127 |
"cpu": [
|
4128 |
"arm"
|
4129 |
],
|
|
|
4134 |
]
|
4135 |
},
|
4136 |
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
|
4137 |
+
"version": "4.20.0",
|
4138 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz",
|
4139 |
+
"integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==",
|
4140 |
"cpu": [
|
4141 |
"arm"
|
4142 |
],
|
|
|
4147 |
]
|
4148 |
},
|
4149 |
"node_modules/@rollup/rollup-linux-arm64-gnu": {
|
4150 |
+
"version": "4.20.0",
|
4151 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz",
|
4152 |
+
"integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==",
|
4153 |
"cpu": [
|
4154 |
"arm64"
|
4155 |
],
|
|
|
4160 |
]
|
4161 |
},
|
4162 |
"node_modules/@rollup/rollup-linux-arm64-musl": {
|
4163 |
+
"version": "4.20.0",
|
4164 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz",
|
4165 |
+
"integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==",
|
4166 |
"cpu": [
|
4167 |
"arm64"
|
4168 |
],
|
|
|
4173 |
]
|
4174 |
},
|
4175 |
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
|
4176 |
+
"version": "4.20.0",
|
4177 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz",
|
4178 |
+
"integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==",
|
4179 |
"cpu": [
|
4180 |
"ppc64"
|
4181 |
],
|
|
|
4186 |
]
|
4187 |
},
|
4188 |
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
|
4189 |
+
"version": "4.20.0",
|
4190 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz",
|
4191 |
+
"integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==",
|
4192 |
"cpu": [
|
4193 |
"riscv64"
|
4194 |
],
|
|
|
4199 |
]
|
4200 |
},
|
4201 |
"node_modules/@rollup/rollup-linux-s390x-gnu": {
|
4202 |
+
"version": "4.20.0",
|
4203 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz",
|
4204 |
+
"integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==",
|
4205 |
"cpu": [
|
4206 |
"s390x"
|
4207 |
],
|
|
|
4212 |
]
|
4213 |
},
|
4214 |
"node_modules/@rollup/rollup-linux-x64-gnu": {
|
4215 |
+
"version": "4.20.0",
|
4216 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz",
|
4217 |
+
"integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==",
|
4218 |
"cpu": [
|
4219 |
"x64"
|
4220 |
],
|
|
|
4225 |
]
|
4226 |
},
|
4227 |
"node_modules/@rollup/rollup-linux-x64-musl": {
|
4228 |
+
"version": "4.20.0",
|
4229 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz",
|
4230 |
+
"integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==",
|
4231 |
"cpu": [
|
4232 |
"x64"
|
4233 |
],
|
|
|
4238 |
]
|
4239 |
},
|
4240 |
"node_modules/@rollup/rollup-win32-arm64-msvc": {
|
4241 |
+
"version": "4.20.0",
|
4242 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz",
|
4243 |
+
"integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==",
|
4244 |
"cpu": [
|
4245 |
"arm64"
|
4246 |
],
|
|
|
4251 |
]
|
4252 |
},
|
4253 |
"node_modules/@rollup/rollup-win32-ia32-msvc": {
|
4254 |
+
"version": "4.20.0",
|
4255 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz",
|
4256 |
+
"integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==",
|
4257 |
"cpu": [
|
4258 |
"ia32"
|
4259 |
],
|
|
|
4264 |
]
|
4265 |
},
|
4266 |
"node_modules/@rollup/rollup-win32-x64-msvc": {
|
4267 |
+
"version": "4.20.0",
|
4268 |
+
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz",
|
4269 |
+
"integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==",
|
4270 |
"cpu": [
|
4271 |
"x64"
|
4272 |
],
|
|
|
4481 |
}
|
4482 |
},
|
4483 |
"node_modules/@types/eslint": {
|
4484 |
+
"version": "9.6.0",
|
4485 |
+
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz",
|
4486 |
+
"integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==",
|
4487 |
"dev": true,
|
4488 |
"dependencies": {
|
4489 |
"@types/estree": "*",
|
|
|
4537 |
"dev": true
|
4538 |
},
|
4539 |
"node_modules/@types/http-proxy": {
|
4540 |
+
"version": "1.17.15",
|
4541 |
+
"resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz",
|
4542 |
+
"integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==",
|
4543 |
"dev": true,
|
4544 |
"dependencies": {
|
4545 |
"@types/node": "*"
|
|
|
4564 |
"dev": true
|
4565 |
},
|
4566 |
"node_modules/@types/node": {
|
4567 |
+
"version": "22.2.0",
|
4568 |
+
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.2.0.tgz",
|
4569 |
+
"integrity": "sha512-bm6EG6/pCpkxDf/0gDNDdtDILMOHgaQBVOJGdwsqClnxA3xL6jtMv76rLBc006RVMWbmaf0xbmom4Z/5o2nRkQ==",
|
4570 |
"dev": true,
|
4571 |
"dependencies": {
|
4572 |
+
"undici-types": "~6.13.0"
|
4573 |
}
|
4574 |
},
|
4575 |
"node_modules/@types/node-forge": {
|
|
|
4639 |
}
|
4640 |
},
|
4641 |
"node_modules/@types/ws": {
|
4642 |
+
"version": "8.5.12",
|
4643 |
+
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz",
|
4644 |
+
"integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==",
|
4645 |
"dev": true,
|
4646 |
"dependencies": {
|
4647 |
"@types/node": "*"
|
|
|
5361 |
}
|
5362 |
},
|
5363 |
"node_modules/browserslist": {
|
5364 |
+
"version": "4.23.3",
|
5365 |
+
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
|
5366 |
+
"integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
|
5367 |
"dev": true,
|
5368 |
"funding": [
|
5369 |
{
|
|
|
5380 |
}
|
5381 |
],
|
5382 |
"dependencies": {
|
5383 |
+
"caniuse-lite": "^1.0.30001646",
|
5384 |
+
"electron-to-chromium": "^1.5.4",
|
5385 |
+
"node-releases": "^2.0.18",
|
5386 |
"update-browserslist-db": "^1.1.0"
|
5387 |
},
|
5388 |
"bin": {
|
|
|
5542 |
}
|
5543 |
},
|
5544 |
"node_modules/caniuse-lite": {
|
5545 |
+
"version": "1.0.30001651",
|
5546 |
+
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz",
|
5547 |
+
"integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==",
|
5548 |
"dev": true,
|
5549 |
"funding": [
|
5550 |
{
|
|
|
5981 |
}
|
5982 |
},
|
5983 |
"node_modules/core-js-compat": {
|
5984 |
+
"version": "3.38.0",
|
5985 |
+
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.0.tgz",
|
5986 |
+
"integrity": "sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==",
|
5987 |
"dev": true,
|
5988 |
"dependencies": {
|
5989 |
+
"browserslist": "^4.23.3"
|
5990 |
},
|
5991 |
"funding": {
|
5992 |
"type": "opencollective",
|
|
|
6261 |
}
|
6262 |
},
|
6263 |
"node_modules/debug": {
|
6264 |
+
"version": "4.3.6",
|
6265 |
+
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
|
6266 |
+
"integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
|
6267 |
"dev": true,
|
6268 |
"dependencies": {
|
6269 |
"ms": "2.1.2"
|
|
|
6462 |
"dev": true
|
6463 |
},
|
6464 |
"node_modules/electron-to-chromium": {
|
6465 |
+
"version": "1.5.6",
|
6466 |
+
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.6.tgz",
|
6467 |
+
"integrity": "sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw==",
|
6468 |
"dev": true
|
6469 |
},
|
6470 |
"node_modules/emoji-regex": {
|
|
|
6545 |
}
|
6546 |
},
|
6547 |
"node_modules/enhanced-resolve": {
|
6548 |
+
"version": "5.17.1",
|
6549 |
+
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
|
6550 |
+
"integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
|
6551 |
"dev": true,
|
6552 |
"dependencies": {
|
6553 |
"graceful-fs": "^4.2.4",
|
|
|
7137 |
}
|
7138 |
},
|
7139 |
"node_modules/foreground-child": {
|
7140 |
+
"version": "3.3.0",
|
7141 |
+
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
|
7142 |
+
"integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
|
7143 |
"dev": true,
|
7144 |
"dependencies": {
|
7145 |
"cross-spawn": "^7.0.0",
|
|
|
7782 |
}
|
7783 |
},
|
7784 |
"node_modules/immutable": {
|
7785 |
+
"version": "4.3.7",
|
7786 |
+
"resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz",
|
7787 |
+
"integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==",
|
7788 |
"dev": true
|
7789 |
},
|
7790 |
"node_modules/import-fresh": {
|
|
|
7941 |
}
|
7942 |
},
|
7943 |
"node_modules/is-core-module": {
|
7944 |
+
"version": "2.15.0",
|
7945 |
+
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz",
|
7946 |
+
"integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==",
|
7947 |
"dev": true,
|
7948 |
"dependencies": {
|
7949 |
"hasown": "^2.0.2"
|
|
|
8385 |
]
|
8386 |
},
|
8387 |
"node_modules/karma": {
|
8388 |
+
"version": "6.4.4",
|
8389 |
+
"resolved": "https://registry.npmjs.org/karma/-/karma-6.4.4.tgz",
|
8390 |
+
"integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==",
|
8391 |
"dev": true,
|
8392 |
"dependencies": {
|
8393 |
"@colors/colors": "1.5.0",
|
|
|
8614 |
}
|
8615 |
},
|
8616 |
"node_modules/launch-editor": {
|
8617 |
+
"version": "2.8.1",
|
8618 |
+
"resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.1.tgz",
|
8619 |
+
"integrity": "sha512-elBx2l/tp9z99X5H/qev8uyDywVh0VXAwEbjk8kJhnc5grOFkGh7aW6q55me9xnYbss261XtnUrysZ+XvGbhQA==",
|
8620 |
"dev": true,
|
8621 |
"dependencies": {
|
8622 |
"picocolors": "^1.0.0",
|
|
|
9185 |
"dev": true
|
9186 |
},
|
9187 |
"node_modules/minipass-json-stream": {
|
9188 |
+
"version": "1.0.2",
|
9189 |
+
"resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.2.tgz",
|
9190 |
+
"integrity": "sha512-myxeeTm57lYs8pH2nxPzmEEg8DGIgW+9mv6D4JZD2pa81I/OBjeU7PtICXV6c9eRGTA5JMDsuIPUZRCyBMYNhg==",
|
9191 |
"dev": true,
|
9192 |
"dependencies": {
|
9193 |
"jsonparse": "^1.3.1",
|
|
|
9560 |
}
|
9561 |
},
|
9562 |
"node_modules/node-releases": {
|
9563 |
+
"version": "2.0.18",
|
9564 |
+
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
|
9565 |
+
"integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
|
9566 |
"dev": true
|
9567 |
},
|
9568 |
"node_modules/nopt": {
|
|
|
10952 |
}
|
10953 |
},
|
10954 |
"node_modules/rollup": {
|
10955 |
+
"version": "4.20.0",
|
10956 |
+
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz",
|
10957 |
+
"integrity": "sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==",
|
10958 |
"dev": true,
|
10959 |
"dependencies": {
|
10960 |
"@types/estree": "1.0.5"
|
|
|
10967 |
"npm": ">=8.0.0"
|
10968 |
},
|
10969 |
"optionalDependencies": {
|
10970 |
+
"@rollup/rollup-android-arm-eabi": "4.20.0",
|
10971 |
+
"@rollup/rollup-android-arm64": "4.20.0",
|
10972 |
+
"@rollup/rollup-darwin-arm64": "4.20.0",
|
10973 |
+
"@rollup/rollup-darwin-x64": "4.20.0",
|
10974 |
+
"@rollup/rollup-linux-arm-gnueabihf": "4.20.0",
|
10975 |
+
"@rollup/rollup-linux-arm-musleabihf": "4.20.0",
|
10976 |
+
"@rollup/rollup-linux-arm64-gnu": "4.20.0",
|
10977 |
+
"@rollup/rollup-linux-arm64-musl": "4.20.0",
|
10978 |
+
"@rollup/rollup-linux-powerpc64le-gnu": "4.20.0",
|
10979 |
+
"@rollup/rollup-linux-riscv64-gnu": "4.20.0",
|
10980 |
+
"@rollup/rollup-linux-s390x-gnu": "4.20.0",
|
10981 |
+
"@rollup/rollup-linux-x64-gnu": "4.20.0",
|
10982 |
+
"@rollup/rollup-linux-x64-musl": "4.20.0",
|
10983 |
+
"@rollup/rollup-win32-arm64-msvc": "4.20.0",
|
10984 |
+
"@rollup/rollup-win32-ia32-msvc": "4.20.0",
|
10985 |
+
"@rollup/rollup-win32-x64-msvc": "4.20.0",
|
10986 |
"fsevents": "~2.3.2"
|
10987 |
}
|
10988 |
},
|
|
|
12186 |
}
|
12187 |
},
|
12188 |
"node_modules/undici-types": {
|
12189 |
+
"version": "6.13.0",
|
12190 |
+
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz",
|
12191 |
+
"integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==",
|
12192 |
"dev": true
|
12193 |
},
|
12194 |
"node_modules/unicode-canonical-property-names-ecmascript": {
|
|
|
13351 |
}
|
13352 |
},
|
13353 |
"node_modules/zone.js": {
|
13354 |
+
"version": "0.14.10",
|
13355 |
+
"resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.10.tgz",
|
13356 |
+
"integrity": "sha512-YGAhaO7J5ywOXW6InXNlLmfU194F8lVgu7bRntUF3TiG8Y3nBK0x1UJJuHUP/e8IyihkjCYqhCScpSwnlaSRkQ=="
|
13357 |
}
|
13358 |
}
|
13359 |
}
|
src/.DS_Store
CHANGED
Binary files a/src/.DS_Store and b/src/.DS_Store differ
|
|
src/app/.DS_Store
ADDED
Binary file (6.15 kB). View file
|
|
src/app/app.routes.ts
CHANGED
@@ -7,6 +7,8 @@ import {DatasetsComponent} from "./components/body/datasets/datasets.component";
|
|
7 |
import {AboutComponent} from "./components/body/about/about.component";
|
8 |
import {TaskComponent} from "./components/body/tasks/task/task.component";
|
9 |
import {SubmittingComponent} from "./components/body/submitting/submitting.component";
|
|
|
|
|
10 |
|
11 |
export const routes: Routes = [
|
12 |
{path: '', component : BodyComponent},
|
@@ -18,4 +20,5 @@ export const routes: Routes = [
|
|
18 |
{path: 'about', component: AboutComponent},
|
19 |
{path: 'leaderboards', component: LeaderboardsComponent},
|
20 |
{path: 'leaderboards/:task', component: LeaderboardsComponent},
|
|
|
21 |
];
|
|
|
7 |
import {AboutComponent} from "./components/body/about/about.component";
|
8 |
import {TaskComponent} from "./components/body/tasks/task/task.component";
|
9 |
import {SubmittingComponent} from "./components/body/submitting/submitting.component";
|
10 |
+
import {ControlPanelComponent} from "./components/body/control-panel/control-panel.component";
|
11 |
+
import {AdminLoginComponent} from "./components/body/control-panel/admin-login/admin-login.component";
|
12 |
|
13 |
export const routes: Routes = [
|
14 |
{path: '', component : BodyComponent},
|
|
|
20 |
{path: 'about', component: AboutComponent},
|
21 |
{path: 'leaderboards', component: LeaderboardsComponent},
|
22 |
{path: 'leaderboards/:task', component: LeaderboardsComponent},
|
23 |
+
{path: 'control', component: ControlPanelComponent},
|
24 |
];
|
src/{assets β app/components}/.DS_Store
RENAMED
Binary files a/src/assets/.DS_Store and b/src/app/components/.DS_Store differ
|
|
src/app/components/body/control-panel/admin-login/admin-login.component.css
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* CSS for the Angular component */
|
2 |
+
|
3 |
+
.login-container {
|
4 |
+
display: flex;
|
5 |
+
justify-content: center;
|
6 |
+
align-items: center;
|
7 |
+
height: 100vh;
|
8 |
+
width: 100%;
|
9 |
+
padding: 16px;
|
10 |
+
box-sizing: border-box;
|
11 |
+
}
|
12 |
+
|
13 |
+
mat-card {
|
14 |
+
width: 100%;
|
15 |
+
max-width: 400px; /* Optional: Limit the maximum width of the card */
|
16 |
+
padding: 24px;
|
17 |
+
box-sizing: border-box;
|
18 |
+
display: flex;
|
19 |
+
justify-content: center;
|
20 |
+
align-items: center;
|
21 |
+
}
|
22 |
+
|
23 |
+
.login-content {
|
24 |
+
display: flex;
|
25 |
+
flex-direction: column;
|
26 |
+
align-items: center;
|
27 |
+
width: 100%;
|
28 |
+
}
|
29 |
+
|
30 |
+
mat-form-field {
|
31 |
+
width: 100%;
|
32 |
+
margin-bottom: 16px;
|
33 |
+
}
|
34 |
+
|
35 |
+
button {
|
36 |
+
width: 100%;
|
37 |
+
margin-top: 8px;
|
38 |
+
}
|
39 |
+
|
40 |
+
mat-label {
|
41 |
+
margin-top: 16px;
|
42 |
+
text-align: center;
|
43 |
+
}
|
src/app/components/body/control-panel/admin-login/admin-login.component.html
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="login-container">
|
2 |
+
<mat-card>
|
3 |
+
<div class="login-content">
|
4 |
+
<h2>Login</h2>
|
5 |
+
<form (ngSubmit)="onSubmit()">
|
6 |
+
<mat-form-field appearance="fill">
|
7 |
+
<mat-label>Password</mat-label>
|
8 |
+
<input
|
9 |
+
matInput
|
10 |
+
type="password"
|
11 |
+
[(ngModel)]="password"
|
12 |
+
name="password"
|
13 |
+
required
|
14 |
+
/>
|
15 |
+
</mat-form-field>
|
16 |
+
<button mat-raised-button color="primary" type="submit">Login</button>
|
17 |
+
</form>
|
18 |
+
<mat-label *ngIf="(authenticationState | async)">
|
19 |
+
{{ (authenticationState | async) }}
|
20 |
+
</mat-label>
|
21 |
+
</div>
|
22 |
+
</mat-card>
|
23 |
+
</div>
|
src/app/components/body/control-panel/admin-login/admin-login.component.spec.ts
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
2 |
+
|
3 |
+
import { AdminLoginComponent } from './admin-login.component';
|
4 |
+
|
5 |
+
describe('AdminLoginComponent', () => {
|
6 |
+
let component: AdminLoginComponent;
|
7 |
+
let fixture: ComponentFixture<AdminLoginComponent>;
|
8 |
+
|
9 |
+
beforeEach(async () => {
|
10 |
+
await TestBed.configureTestingModule({
|
11 |
+
imports: [AdminLoginComponent]
|
12 |
+
})
|
13 |
+
.compileComponents();
|
14 |
+
|
15 |
+
fixture = TestBed.createComponent(AdminLoginComponent);
|
16 |
+
component = fixture.componentInstance;
|
17 |
+
fixture.detectChanges();
|
18 |
+
});
|
19 |
+
|
20 |
+
it('should create', () => {
|
21 |
+
expect(component).toBeTruthy();
|
22 |
+
});
|
23 |
+
});
|
src/app/components/body/control-panel/admin-login/admin-login.component.ts
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { Component } from '@angular/core';
|
2 |
+
import {MatCard} from "@angular/material/card";
|
3 |
+
import {FormsModule} from "@angular/forms";
|
4 |
+
import {MatFormField, MatLabel} from "@angular/material/form-field";
|
5 |
+
import {MatButton} from "@angular/material/button";
|
6 |
+
import {MatInput} from "@angular/material/input";
|
7 |
+
import {AppStateService} from "../../../../state_management/services/app-state.service";
|
8 |
+
import {map} from "rxjs";
|
9 |
+
import {AsyncPipe, NgIf} from "@angular/common";
|
10 |
+
|
11 |
+
@Component({
|
12 |
+
selector: 'app-admin-login',
|
13 |
+
standalone: true,
|
14 |
+
imports: [
|
15 |
+
MatCard,
|
16 |
+
FormsModule,
|
17 |
+
MatFormField,
|
18 |
+
MatButton,
|
19 |
+
MatInput,
|
20 |
+
MatLabel,
|
21 |
+
NgIf,
|
22 |
+
AsyncPipe
|
23 |
+
],
|
24 |
+
templateUrl: './admin-login.component.html',
|
25 |
+
styleUrl: './admin-login.component.css'
|
26 |
+
})
|
27 |
+
export class AdminLoginComponent {
|
28 |
+
password: string = '';
|
29 |
+
|
30 |
+
constructor(private stateService: AppStateService) {}
|
31 |
+
|
32 |
+
authenticationState = this.stateService.state$.pipe(
|
33 |
+
map(state => state.adminSessionStatus)
|
34 |
+
);
|
35 |
+
|
36 |
+
onSubmit() {
|
37 |
+
this.stateService.authenticate(this.password);
|
38 |
+
}
|
39 |
+
}
|
src/app/components/body/control-panel/control-panel.component.css
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.full-width {
|
2 |
+
width: 100%;
|
3 |
+
}
|
4 |
+
|
5 |
+
.table-container {
|
6 |
+
width: 100%;
|
7 |
+
overflow-x: auto;
|
8 |
+
margin-top: 16px;
|
9 |
+
}
|
10 |
+
|
11 |
+
.responsive-table {
|
12 |
+
min-width: 800px; /* Adjust based on your needs */
|
13 |
+
width: 100%;
|
14 |
+
table-layout: auto;
|
15 |
+
}
|
16 |
+
|
17 |
+
.mat-header-cell, .mat-cell {
|
18 |
+
padding: 8px;
|
19 |
+
text-align: left;
|
20 |
+
white-space: nowrap;
|
21 |
+
}
|
22 |
+
|
23 |
+
.actions-cell {
|
24 |
+
min-width: 220px; /* Adjust this value as necessary */
|
25 |
+
}
|
26 |
+
|
27 |
+
.mat-header-row, .mat-row {
|
28 |
+
display: table-row;
|
29 |
+
}
|
30 |
+
|
31 |
+
.mat-header-row.sticky {
|
32 |
+
background-color: white; /* Ensure the header has a background */
|
33 |
+
position: sticky;
|
34 |
+
top: 0;
|
35 |
+
z-index: 1;
|
36 |
+
}
|
src/app/components/body/control-panel/control-panel.component.html
ADDED
@@ -0,0 +1,144 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<app-admin-login *ngIf="(authenticationState | async) != 'authenticated'"></app-admin-login>
|
2 |
+
|
3 |
+
<div *ngIf="(authenticationState | async) == 'authenticated'">
|
4 |
+
<!-- Admin Control Panel -->
|
5 |
+
<mat-card>
|
6 |
+
<button mat-raised-button color="primary" class="full-width" (click)="refresh()">Refresh List</button>
|
7 |
+
|
8 |
+
<div class="table-container">
|
9 |
+
<table mat-table [dataSource]="dataSource" class="mat-elevation-z8 responsive-table">
|
10 |
+
|
11 |
+
<!-- Team Column -->
|
12 |
+
<ng-container matColumnDef="team">
|
13 |
+
<mat-header-cell *matHeaderCellDef> Team </mat-header-cell>
|
14 |
+
<mat-cell *matCellDef="let entry">
|
15 |
+
<span *ngIf="!isEditing(entry)">{{ entry.team }}</span>
|
16 |
+
<input *ngIf="isEditing(entry)" [(ngModel)]="entry.team" (keyup.enter)="saveEdit(entry)">
|
17 |
+
</mat-cell>
|
18 |
+
</ng-container>
|
19 |
+
|
20 |
+
<!-- Task Column -->
|
21 |
+
<ng-container matColumnDef="task">
|
22 |
+
<mat-header-cell *matHeaderCellDef> Task </mat-header-cell>
|
23 |
+
<mat-cell *matCellDef="let entry">
|
24 |
+
<span *ngIf="!isEditing(entry)">{{ entry.task }}</span>
|
25 |
+
<input *ngIf="isEditing(entry)" [(ngModel)]="entry.task" (keyup.enter)="saveEdit(entry)">
|
26 |
+
</mat-cell>
|
27 |
+
</ng-container>
|
28 |
+
|
29 |
+
<!-- Dataset Column -->
|
30 |
+
<ng-container matColumnDef="dataset">
|
31 |
+
<mat-header-cell *matHeaderCellDef> Dataset </mat-header-cell>
|
32 |
+
<mat-cell *matCellDef="let entry">
|
33 |
+
<span *ngIf="!isEditing(entry)">{{ entry.dataset }}</span>
|
34 |
+
<input *ngIf="isEditing(entry)" [(ngModel)]="entry.dataset" (keyup.enter)="saveEdit(entry)">
|
35 |
+
</mat-cell>
|
36 |
+
</ng-container>
|
37 |
+
|
38 |
+
<!-- Model Column -->
|
39 |
+
<ng-container matColumnDef="model">
|
40 |
+
<mat-header-cell *matHeaderCellDef> Model </mat-header-cell>
|
41 |
+
<mat-cell *matCellDef="let entry">
|
42 |
+
<span *ngIf="!isEditing(entry)">{{ entry.model }}</span>
|
43 |
+
<input *ngIf="isEditing(entry)" [(ngModel)]="entry.model" (keyup.enter)="saveEdit(entry)">
|
44 |
+
</mat-cell>
|
45 |
+
</ng-container>
|
46 |
+
|
47 |
+
<!-- Link Column -->
|
48 |
+
<ng-container matColumnDef="link">
|
49 |
+
<mat-header-cell *matHeaderCellDef> Link </mat-header-cell>
|
50 |
+
<mat-cell *matCellDef="let entry">
|
51 |
+
<a *ngIf="!isEditing(entry)" [href]="entry.link" target="_blank">{{ entry.link }}</a>
|
52 |
+
<input *ngIf="isEditing(entry)" [(ngModel)]="entry.link" (keyup.enter)="saveEdit(entry)">
|
53 |
+
</mat-cell>
|
54 |
+
</ng-container>
|
55 |
+
|
56 |
+
<!-- Email Column -->
|
57 |
+
<ng-container matColumnDef="email">
|
58 |
+
<mat-header-cell *matHeaderCellDef> Email </mat-header-cell>
|
59 |
+
<mat-cell *matCellDef="let entry">
|
60 |
+
<span *ngIf="!isEditing(entry)">{{ entry.email }}</span>
|
61 |
+
<input *ngIf="isEditing(entry)" [(ngModel)]="entry.email" (keyup.enter)="saveEdit(entry)">
|
62 |
+
</mat-cell>
|
63 |
+
</ng-container>
|
64 |
+
|
65 |
+
<!-- Status Column -->
|
66 |
+
<ng-container matColumnDef="status">
|
67 |
+
<mat-header-cell *matHeaderCellDef> Status </mat-header-cell>
|
68 |
+
<mat-cell *matCellDef="let entry">
|
69 |
+
<span *ngIf="!isEditing(entry)">{{ entry.status }}</span>
|
70 |
+
<input *ngIf="isEditing(entry)" [(ngModel)]="entry.status" (keyup.enter)="saveEdit(entry)">
|
71 |
+
</mat-cell>
|
72 |
+
</ng-container>
|
73 |
+
|
74 |
+
<!-- Time Column -->
|
75 |
+
<ng-container matColumnDef="time">
|
76 |
+
<mat-header-cell *matHeaderCellDef> Time </mat-header-cell>
|
77 |
+
<mat-cell *matCellDef="let entry">
|
78 |
+
<span *ngIf="!isEditing(entry)">{{ entry.time }}</span>
|
79 |
+
<input *ngIf="isEditing(entry)" [(ngModel)]="entry.time" (keyup.enter)="saveEdit(entry)">
|
80 |
+
</mat-cell>
|
81 |
+
</ng-container>
|
82 |
+
|
83 |
+
<!-- Is Public Column -->
|
84 |
+
<ng-container matColumnDef="is_public">
|
85 |
+
<mat-header-cell *matHeaderCellDef> Is Public </mat-header-cell>
|
86 |
+
<mat-cell *matCellDef="let entry">
|
87 |
+
<span *ngIf="!isEditing(entry)">{{ entry.is_public }}</span>
|
88 |
+
<input *ngIf="isEditing(entry)" type="checkbox" [(ngModel)]="entry.is_public" (keyup.enter)="saveEdit(entry)">
|
89 |
+
</mat-cell>
|
90 |
+
</ng-container>
|
91 |
+
|
92 |
+
<!-- Accuracy Column -->
|
93 |
+
<ng-container matColumnDef="accuracy">
|
94 |
+
<mat-header-cell *matHeaderCellDef> Accuracy </mat-header-cell>
|
95 |
+
<mat-cell *matCellDef="let entry">
|
96 |
+
<span *ngIf="!isEditing(entry)">{{ entry.accuracy | number: '1.2-2' }}</span>
|
97 |
+
<input *ngIf="isEditing(entry)" [(ngModel)]="entry.accuracy" (keyup.enter)="saveEdit(entry)">
|
98 |
+
</mat-cell>
|
99 |
+
</ng-container>
|
100 |
+
|
101 |
+
<!-- Precision Column -->
|
102 |
+
<ng-container matColumnDef="precision">
|
103 |
+
<mat-header-cell *matHeaderCellDef> Precision </mat-header-cell>
|
104 |
+
<mat-cell *matCellDef="let entry">
|
105 |
+
<span *ngIf="!isEditing(entry)">{{ entry.precision | number: '1.2-2' }}</span>
|
106 |
+
<input *ngIf="isEditing(entry)" [(ngModel)]="entry.precision" (keyup.enter)="saveEdit(entry)">
|
107 |
+
</mat-cell>
|
108 |
+
</ng-container>
|
109 |
+
|
110 |
+
<!-- Recall Column -->
|
111 |
+
<ng-container matColumnDef="recall">
|
112 |
+
<mat-header-cell *matHeaderCellDef> Recall </mat-header-cell>
|
113 |
+
<mat-cell *matCellDef="let entry">
|
114 |
+
<span *ngIf="!isEditing(entry)">{{ entry.recall | number: '1.2-2'}}</span>
|
115 |
+
<input *ngIf="isEditing(entry)" [(ngModel)]="entry.recall" (keyup.enter)="saveEdit(entry)">
|
116 |
+
</mat-cell>
|
117 |
+
</ng-container>
|
118 |
+
|
119 |
+
<!-- F1 Score Column -->
|
120 |
+
<ng-container matColumnDef="f1_score">
|
121 |
+
<mat-header-cell *matHeaderCellDef> F1 Score </mat-header-cell>
|
122 |
+
<mat-cell *matCellDef="let entry">
|
123 |
+
<span *ngIf="!isEditing(entry)">{{ entry.f1_score | number: '1.2-2' }}</span>
|
124 |
+
<input *ngIf="isEditing(entry)" [(ngModel)]="entry.f1_score" (keyup.enter)="saveEdit(entry)">
|
125 |
+
</mat-cell>
|
126 |
+
</ng-container>
|
127 |
+
|
128 |
+
<ng-container matColumnDef="actions">
|
129 |
+
<mat-header-cell *matHeaderCellDef class="actions-cell"> Actions </mat-header-cell>
|
130 |
+
<mat-cell *matCellDef="let entry" class="actions-cell">
|
131 |
+
<button *ngIf="!isEditing(entry)" mat-button (click)="editRow(entry)">Edit</button>
|
132 |
+
<button *ngIf="isEditing(entry)" mat-button (click)="saveEdit(entry)">Save</button>
|
133 |
+
<button *ngIf="isEditing(entry)" mat-button (click)="cancelEdit(entry)">Cancel</button>
|
134 |
+
<button mat-button color="warn" (click)="deleteRow(entry.id)">Delete</button>
|
135 |
+
</mat-cell>
|
136 |
+
</ng-container>
|
137 |
+
|
138 |
+
<mat-header-row *matHeaderRowDef="displayedColumns; sticky: true"></mat-header-row>
|
139 |
+
<mat-row *matRowDef="let row; columns: displayedColumns"></mat-row>
|
140 |
+
|
141 |
+
</table>
|
142 |
+
</div>
|
143 |
+
</mat-card>
|
144 |
+
</div>
|
src/app/components/body/control-panel/control-panel.component.spec.ts
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
2 |
+
|
3 |
+
import { ControlPanelComponent } from './control-panel.component';
|
4 |
+
|
5 |
+
describe('ControlPanelComponent', () => {
|
6 |
+
let component: ControlPanelComponent;
|
7 |
+
let fixture: ComponentFixture<ControlPanelComponent>;
|
8 |
+
|
9 |
+
beforeEach(async () => {
|
10 |
+
await TestBed.configureTestingModule({
|
11 |
+
imports: [ControlPanelComponent]
|
12 |
+
})
|
13 |
+
.compileComponents();
|
14 |
+
|
15 |
+
fixture = TestBed.createComponent(ControlPanelComponent);
|
16 |
+
component = fixture.componentInstance;
|
17 |
+
fixture.detectChanges();
|
18 |
+
});
|
19 |
+
|
20 |
+
it('should create', () => {
|
21 |
+
expect(component).toBeTruthy();
|
22 |
+
});
|
23 |
+
});
|
src/app/components/body/control-panel/control-panel.component.ts
ADDED
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import {Component, OnInit} from '@angular/core';
|
2 |
+
import {AppStateService} from "../../../state_management/services/app-state.service";
|
3 |
+
import {map} from "rxjs";
|
4 |
+
import {AdminLoginComponent} from "./admin-login/admin-login.component";
|
5 |
+
import {AsyncPipe, DecimalPipe, NgIf} from "@angular/common";
|
6 |
+
import {MatButton} from "@angular/material/button";
|
7 |
+
import {MatCard, MatCardContent} from "@angular/material/card";
|
8 |
+
import {ControlPanelEntry} from "../../../state_management/models/control-panel-entry.model";
|
9 |
+
import {
|
10 |
+
MatCell,
|
11 |
+
MatCellDef,
|
12 |
+
MatColumnDef,
|
13 |
+
MatHeaderCell, MatHeaderCellDef,
|
14 |
+
MatHeaderRow,
|
15 |
+
MatHeaderRowDef,
|
16 |
+
MatRow, MatRowDef, MatTable, MatTableDataSource
|
17 |
+
} from "@angular/material/table";
|
18 |
+
import {FormsModule} from "@angular/forms";
|
19 |
+
|
20 |
+
@Component({
|
21 |
+
selector: 'app-control-panel',
|
22 |
+
standalone: true,
|
23 |
+
imports: [
|
24 |
+
AdminLoginComponent,
|
25 |
+
NgIf,
|
26 |
+
AsyncPipe,
|
27 |
+
MatButton,
|
28 |
+
MatCard,
|
29 |
+
MatCardContent,
|
30 |
+
MatCell,
|
31 |
+
MatCellDef,
|
32 |
+
MatColumnDef,
|
33 |
+
MatHeaderCell,
|
34 |
+
MatHeaderRow,
|
35 |
+
MatHeaderRowDef,
|
36 |
+
MatRow,
|
37 |
+
MatRowDef,
|
38 |
+
MatTable,
|
39 |
+
FormsModule,
|
40 |
+
MatHeaderCellDef,
|
41 |
+
DecimalPipe
|
42 |
+
],
|
43 |
+
templateUrl: './control-panel.component.html',
|
44 |
+
styleUrl: './control-panel.component.css'
|
45 |
+
})
|
46 |
+
export class ControlPanelComponent implements OnInit {
|
47 |
+
|
48 |
+
authenticationState = this.stateService.state$.pipe(
|
49 |
+
map(state => state.adminSessionStatus)
|
50 |
+
);
|
51 |
+
|
52 |
+
submissions = this.stateService.state$.pipe(
|
53 |
+
map(
|
54 |
+
state => state.controlPanelSubmissions
|
55 |
+
)
|
56 |
+
);
|
57 |
+
|
58 |
+
dataSource = new MatTableDataSource<ControlPanelEntry>();
|
59 |
+
|
60 |
+
displayedColumns: string[] = [
|
61 |
+
'team', 'task', 'dataset', 'model', 'link', 'email',
|
62 |
+
'status', 'time', 'is_public', 'accuracy', 'precision',
|
63 |
+
'recall', 'f1_score', 'actions' // Including 'actions' for edit/delete/save buttons
|
64 |
+
];
|
65 |
+
|
66 |
+
editingState: { [key: number]: boolean } = {};
|
67 |
+
|
68 |
+
constructor(private stateService: AppStateService) {
|
69 |
+
}
|
70 |
+
|
71 |
+
ngOnInit() {
|
72 |
+
this.submissions.subscribe(
|
73 |
+
data => {
|
74 |
+
this.dataSource.data = data;
|
75 |
+
}
|
76 |
+
)
|
77 |
+
this.refresh();
|
78 |
+
}
|
79 |
+
|
80 |
+
refresh() {
|
81 |
+
this.stateService.updateControlPanel();
|
82 |
+
}
|
83 |
+
|
84 |
+
editRow(entry: ControlPanelEntry) {
|
85 |
+
this.editingState[entry.id] = true;
|
86 |
+
}
|
87 |
+
|
88 |
+
saveEdit(entry: ControlPanelEntry) {
|
89 |
+
this.editingState[entry.id] = false;
|
90 |
+
// Modify the entry in the local data source
|
91 |
+
const index = this.dataSource.data.findIndex(e => e.id === entry.id);
|
92 |
+
this.dataSource.data[index] = entry;
|
93 |
+
this.stateService.forceUpdateSubmission(entry);
|
94 |
+
}
|
95 |
+
|
96 |
+
deleteRow(id: number) {
|
97 |
+
// remove the entry from the local data source
|
98 |
+
this.dataSource.data = this.dataSource.data.filter(entry => entry.id !== id);
|
99 |
+
this.stateService.deleteSubmission(id);
|
100 |
+
}
|
101 |
+
|
102 |
+
isEditing(entry: ControlPanelEntry): boolean {
|
103 |
+
return this.editingState[entry.id] || false;
|
104 |
+
}
|
105 |
+
|
106 |
+
cancelEdit(entry: ControlPanelEntry) {
|
107 |
+
this.editingState[entry.id] = false;
|
108 |
+
}
|
109 |
+
|
110 |
+
}
|
src/app/state_management/models/control-panel-entry.model.ts
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
export interface ControlPanelEntry {
|
2 |
+
id: number;
|
3 |
+
task: string;
|
4 |
+
dataset: string;
|
5 |
+
model: string;
|
6 |
+
link: string;
|
7 |
+
team: string;
|
8 |
+
email: string;
|
9 |
+
status: string;
|
10 |
+
time: string;
|
11 |
+
is_public: boolean;
|
12 |
+
accuracy: number;
|
13 |
+
precision: number;
|
14 |
+
recall: number;
|
15 |
+
f1_score: number;
|
16 |
+
}
|
src/app/state_management/models/leaderboard-entry.model.ts
CHANGED
@@ -2,10 +2,8 @@ export interface LeaderboardEntry {
|
|
2 |
task: string;
|
3 |
dataset: string;
|
4 |
model: string;
|
5 |
-
size: number;
|
6 |
accuracy: number;
|
7 |
precision: number;
|
8 |
recall: number;
|
9 |
f1_score: number;
|
10 |
-
overall_score: number;
|
11 |
}
|
|
|
2 |
task: string;
|
3 |
dataset: string;
|
4 |
model: string;
|
|
|
5 |
accuracy: number;
|
6 |
precision: number;
|
7 |
recall: number;
|
8 |
f1_score: number;
|
|
|
9 |
}
|
src/app/state_management/models/state.model.ts
CHANGED
@@ -2,10 +2,14 @@ import {TaskModel} from "./task.mode";
|
|
2 |
import {DatasetModel} from "./dataset.model";
|
3 |
import {SubmissionEntry} from "./submission-entry.model";
|
4 |
import {LeaderboardEntry} from "./leaderboard-entry.model";
|
|
|
|
|
5 |
|
6 |
export interface StateModel{
|
7 |
leaderboards: LeaderboardEntry[];
|
8 |
submissions: SubmissionEntry[];
|
9 |
datasets: DatasetModel[];
|
10 |
tasks: TaskModel[];
|
|
|
|
|
11 |
}
|
|
|
2 |
import {DatasetModel} from "./dataset.model";
|
3 |
import {SubmissionEntry} from "./submission-entry.model";
|
4 |
import {LeaderboardEntry} from "./leaderboard-entry.model";
|
5 |
+
import {ControlPanelEntry} from "./control-panel-entry.model";
|
6 |
+
import {Observable} from "rxjs";
|
7 |
|
8 |
export interface StateModel{
|
9 |
leaderboards: LeaderboardEntry[];
|
10 |
submissions: SubmissionEntry[];
|
11 |
datasets: DatasetModel[];
|
12 |
tasks: TaskModel[];
|
13 |
+
controlPanelSubmissions: ControlPanelEntry[];
|
14 |
+
adminSessionStatus: string;
|
15 |
}
|
src/app/state_management/services/app-state.service.ts
CHANGED
@@ -1,8 +1,9 @@
|
|
1 |
import { Injectable } from '@angular/core';
|
2 |
import {environment} from "../../../environments/environment";
|
3 |
-
import {BehaviorSubject, Observable} from "rxjs";
|
4 |
import {HttpClient} from "@angular/common/http";
|
5 |
import {StateModel} from "../models/state.model";
|
|
|
6 |
|
7 |
@Injectable({
|
8 |
providedIn: 'root'
|
@@ -15,19 +16,30 @@ export class AppStateService {
|
|
15 |
leaderboards: [],
|
16 |
submissions: [],
|
17 |
datasets: [],
|
18 |
-
tasks: []
|
|
|
|
|
19 |
}
|
20 |
);
|
21 |
|
22 |
public readonly state$ = this._state.asObservable();
|
23 |
|
24 |
-
constructor(public http: HttpClient
|
|
|
25 |
console.log('AppStateService created');
|
26 |
console.log(this._apiUrl)
|
27 |
this.updateTasks();
|
28 |
this.updateDatasets();
|
29 |
this.updateLeaderboards();
|
30 |
this.updateSubmissions();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
}
|
32 |
|
33 |
private _setState(state: StateModel): void {
|
@@ -102,4 +114,50 @@ export class AppStateService {
|
|
102 |
}
|
103 |
);
|
104 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
105 |
}
|
|
|
1 |
import { Injectable } from '@angular/core';
|
2 |
import {environment} from "../../../environments/environment";
|
3 |
+
import {BehaviorSubject, catchError, Observable} from "rxjs";
|
4 |
import {HttpClient} from "@angular/common/http";
|
5 |
import {StateModel} from "../models/state.model";
|
6 |
+
import {AuthenticationService} from "./authentication.service";
|
7 |
|
8 |
@Injectable({
|
9 |
providedIn: 'root'
|
|
|
16 |
leaderboards: [],
|
17 |
submissions: [],
|
18 |
datasets: [],
|
19 |
+
tasks: [],
|
20 |
+
controlPanelSubmissions: [],
|
21 |
+
adminSessionStatus: ''
|
22 |
}
|
23 |
);
|
24 |
|
25 |
public readonly state$ = this._state.asObservable();
|
26 |
|
27 |
+
constructor(public http: HttpClient,
|
28 |
+
public authService: AuthenticationService) {
|
29 |
console.log('AppStateService created');
|
30 |
console.log(this._apiUrl)
|
31 |
this.updateTasks();
|
32 |
this.updateDatasets();
|
33 |
this.updateLeaderboards();
|
34 |
this.updateSubmissions();
|
35 |
+
authService.$authStatus.subscribe(
|
36 |
+
(status: string) => {
|
37 |
+
this._setState({
|
38 |
+
...this.getState(),
|
39 |
+
adminSessionStatus: status
|
40 |
+
});
|
41 |
+
}
|
42 |
+
);
|
43 |
}
|
44 |
|
45 |
private _setState(state: StateModel): void {
|
|
|
114 |
}
|
115 |
);
|
116 |
}
|
117 |
+
|
118 |
+
public authenticate(password : string) {
|
119 |
+
this.authService.login(password).subscribe(
|
120 |
+
() => {
|
121 |
+
this.updateControlPanel();
|
122 |
+
}
|
123 |
+
);
|
124 |
+
}
|
125 |
+
|
126 |
+
public updateControlPanel() {
|
127 |
+
const headers = this.authService.getAuthHeaders();
|
128 |
+
this.http.get(`${this._apiUrl}/controlPanelSubmissions`, { headers }).subscribe(
|
129 |
+
(data: any) => {
|
130 |
+
this._setState({
|
131 |
+
...this.getState(),
|
132 |
+
controlPanelSubmissions: data
|
133 |
+
});
|
134 |
+
}
|
135 |
+
);
|
136 |
+
}
|
137 |
+
|
138 |
+
public forceUpdateSubmission(entry: any){
|
139 |
+
const headers = this.authService.getAuthHeaders();
|
140 |
+
this.http.put(`${this._apiUrl}/controlPanelSubmission/${entry.id}`, entry, { headers }).subscribe(
|
141 |
+
() => {
|
142 |
+
this.updateControlPanel();
|
143 |
+
}
|
144 |
+
);
|
145 |
+
}
|
146 |
+
|
147 |
+
public deleteSubmission(id: number){
|
148 |
+
const headers = this.authService.getAuthHeaders();
|
149 |
+
console.log('Deleting submission with id: ' + id);
|
150 |
+
this.http.delete(`${this._apiUrl}/controlPanelSubmission/` + id, { headers })
|
151 |
+
.pipe(
|
152 |
+
catchError(error => {
|
153 |
+
console.log(error);
|
154 |
+
return error;
|
155 |
+
}
|
156 |
+
))
|
157 |
+
.subscribe(
|
158 |
+
() => {
|
159 |
+
this.updateControlPanel();
|
160 |
+
}
|
161 |
+
);
|
162 |
+
}
|
163 |
}
|
src/app/state_management/services/authentication.service.spec.ts
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { TestBed } from '@angular/core/testing';
|
2 |
+
|
3 |
+
import { AuthenticationService } from './authentication.service';
|
4 |
+
|
5 |
+
describe('AuthenticationService', () => {
|
6 |
+
let service: AuthenticationService;
|
7 |
+
|
8 |
+
beforeEach(() => {
|
9 |
+
TestBed.configureTestingModule({});
|
10 |
+
service = TestBed.inject(AuthenticationService);
|
11 |
+
});
|
12 |
+
|
13 |
+
it('should be created', () => {
|
14 |
+
expect(service).toBeTruthy();
|
15 |
+
});
|
16 |
+
});
|
src/app/state_management/services/authentication.service.ts
ADDED
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import {Injectable} from '@angular/core';
|
2 |
+
import {HttpClient, HttpHeaders} from "@angular/common/http";
|
3 |
+
import {BehaviorSubject, catchError, Observable, tap, throwError} from "rxjs";
|
4 |
+
import {environment} from "../../../environments/environment";
|
5 |
+
|
6 |
+
@Injectable({
|
7 |
+
providedIn: 'root'
|
8 |
+
})
|
9 |
+
export class AuthenticationService {
|
10 |
+
|
11 |
+
private readonly apiUrl = environment.apiUrl;
|
12 |
+
private token: string | null = this.getTokenFromLocalStorage();
|
13 |
+
public $authStatus = new BehaviorSubject<string>(
|
14 |
+
this.token !== null ? 'authenticated' : ''
|
15 |
+
);
|
16 |
+
|
17 |
+
|
18 |
+
constructor(
|
19 |
+
private http: HttpClient
|
20 |
+
) {
|
21 |
+
|
22 |
+
}
|
23 |
+
|
24 |
+
private getTokenFromLocalStorage(): string | null {
|
25 |
+
try {
|
26 |
+
return localStorage.getItem('auth_token');
|
27 |
+
} catch (e) {
|
28 |
+
return null;
|
29 |
+
}
|
30 |
+
}
|
31 |
+
|
32 |
+
public getAuthHeaders(): HttpHeaders {
|
33 |
+
return new HttpHeaders({
|
34 |
+
'Content-Type': 'application/json',
|
35 |
+
Authorization: `Bearer ${this.token}`,
|
36 |
+
});
|
37 |
+
}
|
38 |
+
|
39 |
+
public login(password: string): Observable<{ access_token: string; token_type: string }> {
|
40 |
+
// Create the request payload
|
41 |
+
const payload = new URLSearchParams();
|
42 |
+
payload.set('username', 'admin'); // Username is not used in this case
|
43 |
+
payload.set('password', password);
|
44 |
+
|
45 |
+
// Send POST request to the backend
|
46 |
+
return this.http.post<{ access_token: string; token_type: string }>
|
47 |
+
(
|
48 |
+
this.apiUrl + '/token', payload.toString(),
|
49 |
+
{
|
50 |
+
headers: {
|
51 |
+
'Content-Type': 'application/x-www-form-urlencoded', // Set content type for form data
|
52 |
+
},
|
53 |
+
}).pipe(
|
54 |
+
tap(response => {
|
55 |
+
this.token = response.access_token;
|
56 |
+
localStorage.setItem('auth_token', this.token);
|
57 |
+
this.$authStatus.next('authenticated');
|
58 |
+
}),
|
59 |
+
catchError(error => {
|
60 |
+
if (error.status === 401) {
|
61 |
+
this.$authStatus.next('wrong password');
|
62 |
+
} else {
|
63 |
+
this.$authStatus.next('server error');
|
64 |
+
}
|
65 |
+
// Return an observable to continue the stream
|
66 |
+
return throwError(() => error);
|
67 |
+
})
|
68 |
+
);
|
69 |
+
}
|
70 |
+
|
71 |
+
public isAuthenticated(): boolean {
|
72 |
+
return this.token !== null;
|
73 |
+
}
|
74 |
+
}
|
src/styles.css
CHANGED
@@ -2,9 +2,7 @@
|
|
2 |
|
3 |
html, body { height: 100%; }
|
4 |
body {
|
5 |
-
margin
|
6 |
-
margin-right: 3%;
|
7 |
-
margin-top: 0;
|
8 |
font-family: Roboto, "Helvetica Neue", sans-serif;
|
9 |
font-size: 15px;
|
10 |
}
|
|
|
2 |
|
3 |
html, body { height: 100%; }
|
4 |
body {
|
5 |
+
margin: 1%;
|
|
|
|
|
6 |
font-family: Roboto, "Helvetica Neue", sans-serif;
|
7 |
font-size: 15px;
|
8 |
}
|