From 4c44b98d53cf9056f1bbaab121f2feb9756ab0dd Mon Sep 17 00:00:00 2001 From: olaf Date: Fri, 5 Sep 2025 08:47:31 +0000 Subject: [PATCH] make listener robust to bad data --- dashboard/package-lock.json | 1546 +++++++++++++++++++++++++--- dashboard/public/program-info.json | 7 + docker-compose.prod.yml | 9 +- docker-compose.yml | 26 +- listener/listener.py | 53 +- scheduler/Dockerfile | 2 +- scheduler/scheduler.py | 2 +- server/Dockerfile.dev | 8 +- 8 files changed, 1437 insertions(+), 216 deletions(-) diff --git a/dashboard/package-lock.json b/dashboard/package-lock.json index 339ae92..4c6be43 100644 --- a/dashboard/package-lock.json +++ b/dashboard/package-lock.json @@ -8,6 +8,19 @@ "name": "dashboard", "version": "0.0.0", "dependencies": { + "@syncfusion/ej2-base": "^30.2.6", + "@syncfusion/ej2-buttons": "^30.2.4", + "@syncfusion/ej2-calendars": "^30.2.4", + "@syncfusion/ej2-dropdowns": "^30.2.6", + "@syncfusion/ej2-grids": "^30.2.6", + "@syncfusion/ej2-icons": "^30.2.4", + "@syncfusion/ej2-inputs": "^30.2.6", + "@syncfusion/ej2-kanban": "^30.2.4", + "@syncfusion/ej2-layouts": "^30.2.4", + "@syncfusion/ej2-lists": "^30.2.4", + "@syncfusion/ej2-navigations": "^30.2.7", + "@syncfusion/ej2-notifications": "^30.2.4", + "@syncfusion/ej2-popups": "^30.2.4", "@syncfusion/ej2-react-buttons": "^30.1.37", "@syncfusion/ej2-react-calendars": "^30.1.37", "@syncfusion/ej2-react-dropdowns": "^30.1.37", @@ -20,6 +33,7 @@ "@syncfusion/ej2-react-notifications": "^30.1.37", "@syncfusion/ej2-react-popups": "^30.1.37", "@syncfusion/ej2-react-schedule": "^30.1.37", + "@syncfusion/ej2-splitbuttons": "^30.2.4", "cldr-data": "^36.0.4", "lucide-react": "^0.522.0", "react": "^19.1.0", @@ -985,37 +999,37 @@ ] }, "node_modules/@syncfusion/ej2-base": { - "version": "30.1.38", - "resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-30.1.38.tgz", - "integrity": "sha512-cj01hiMSAt7QB2bnA0hI1IGolYnqXpmv4I4cWyBB+D8V2LIiWIfqZA4I3LuffPeo60BV96XOeI6NnseK2RTIuQ==", + "version": "30.2.6", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-30.2.6.tgz", + "integrity": "sha512-RC7yA4nK/1CvkQQkUnYbvsFUFcuWkbSxhyVgn4ymNCAylRARFerdO6epTJAn204+vhmzoS34q+4EdeWwtg0/PA==", "license": "SEE LICENSE IN license", "dependencies": { - "@syncfusion/ej2-icons": "~30.1.37" + "@syncfusion/ej2-icons": "~30.2.4" }, "bin": { "syncfusion-license": "bin/syncfusion-license.js" } }, "node_modules/@syncfusion/ej2-buttons": { - "version": "30.1.37", - "resolved": "https://registry.npmjs.org/@syncfusion/ej2-buttons/-/ej2-buttons-30.1.37.tgz", - "integrity": "sha512-31dPIDSkraFlR8+sCz2NtM1tg9TSBN2YRHC7mBZGDWX6B26ie4zbe63S22l0ytaoMDt3XHqExsk7MLlnG3LR8g==", + "version": "30.2.4", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-buttons/-/ej2-buttons-30.2.4.tgz", + "integrity": "sha512-NbZD8aI3AgVM0JEEB+CGh8e46ClxqCGrZ0AkRVifLX8Z7NmuZ9PV7d8JQDyPWWQmKIu3V4nc6ChmiYtBEkcC3w==", "license": "SEE LICENSE IN license", "dependencies": { - "@syncfusion/ej2-base": "~30.1.37" + "@syncfusion/ej2-base": "~30.2.4" } }, "node_modules/@syncfusion/ej2-calendars": { - "version": "30.1.37", - "resolved": "https://registry.npmjs.org/@syncfusion/ej2-calendars/-/ej2-calendars-30.1.37.tgz", - "integrity": "sha512-9g41zBRizXilbRJWHJgqRYJPpX0WJF5qJwGNpgvsBnyYdolYQy///x6c3oYo9W6YG28N0QDavdbOaxwprj4ghg==", + "version": "30.2.4", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-calendars/-/ej2-calendars-30.2.4.tgz", + "integrity": "sha512-/CWUBcsZ4FLcQtWGxKsc3xKKfqDloG9/JFc38zqErp2bdhTaQj1N4OmYNWAjnQ146v/z17K2KH2xiXW6bJpQ8g==", "license": "SEE LICENSE IN license", "dependencies": { - "@syncfusion/ej2-base": "~30.1.37", - "@syncfusion/ej2-buttons": "~30.1.37", - "@syncfusion/ej2-inputs": "~30.1.37", - "@syncfusion/ej2-lists": "~30.1.37", - "@syncfusion/ej2-popups": "~30.1.37" + "@syncfusion/ej2-base": "~30.2.4", + "@syncfusion/ej2-buttons": "~30.2.4", + "@syncfusion/ej2-inputs": "~30.2.4", + "@syncfusion/ej2-lists": "~30.2.4", + "@syncfusion/ej2-popups": "~30.2.4" } }, "node_modules/@syncfusion/ej2-compression": { @@ -1036,19 +1050,46 @@ "@syncfusion/ej2-base": "~30.1.38" } }, - "node_modules/@syncfusion/ej2-dropdowns": { - "version": "30.1.37", - "resolved": "https://registry.npmjs.org/@syncfusion/ej2-dropdowns/-/ej2-dropdowns-30.1.37.tgz", - "integrity": "sha512-yk4Pous9P2Ccg/QoX+fmJatn5ypbWWTvptEd5h5p4Wb0qlvwJIPuJo/KkcyK2vUx7kRzN5dzmUX7cKP7Z1ZhPg==", + "node_modules/@syncfusion/ej2-data/node_modules/@syncfusion/ej2-base": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-30.1.42.tgz", + "integrity": "sha512-PQm14uiirN2vdlbygyYb960+ELRy/f92lxC4E9GWpVSnOt/18C5ZZJSMmC1sjE2axqhHWM8JS9gFQ7OXB5FHIw==", "license": "SEE LICENSE IN license", "dependencies": { - "@syncfusion/ej2-base": "~30.1.37", - "@syncfusion/ej2-data": "~30.1.37", - "@syncfusion/ej2-inputs": "~30.1.37", - "@syncfusion/ej2-lists": "~30.1.37", - "@syncfusion/ej2-navigations": "~30.1.37", - "@syncfusion/ej2-notifications": "~30.1.37", - "@syncfusion/ej2-popups": "~30.1.37" + "@syncfusion/ej2-icons": "~30.1.37" + }, + "bin": { + "syncfusion-license": "bin/syncfusion-license.js" + } + }, + "node_modules/@syncfusion/ej2-data/node_modules/@syncfusion/ej2-icons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-30.1.37.tgz", + "integrity": "sha512-bgPklX0jiaLESbWJDNx8f8PqVexwbRJHoz4kDgOJR4VN4JoOtC7Zw47Wb+eFwj13Ped1lTfuPfmU8sI1s5INeQ==", + "license": "SEE LICENSE IN license" + }, + "node_modules/@syncfusion/ej2-dropdowns": { + "version": "30.2.6", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-dropdowns/-/ej2-dropdowns-30.2.6.tgz", + "integrity": "sha512-pvnsxvvHJWJA8Dxg/X99C3hs1tLWvLEacfytLroejlS0mjhCeGrkGVDUTHybeYuZtWb6tocDOLxdvCxxGZGIbA==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.2.4", + "@syncfusion/ej2-data": "~30.2.4", + "@syncfusion/ej2-inputs": "~30.2.6", + "@syncfusion/ej2-lists": "~30.2.4", + "@syncfusion/ej2-navigations": "~30.2.5", + "@syncfusion/ej2-notifications": "~30.2.4", + "@syncfusion/ej2-popups": "~30.2.4" + } + }, + "node_modules/@syncfusion/ej2-dropdowns/node_modules/@syncfusion/ej2-data": { + "version": "30.2.4", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-data/-/ej2-data-30.2.4.tgz", + "integrity": "sha512-HYBwk6U0pxTjc8yEYAj2YyuqRsgbVIAzTgYn1/WEvysXHFhwsNA5oUlvF9BFGPBiWLSJCCv4R9jDQHGm9pbtqw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.2.4" } }, "node_modules/@syncfusion/ej2-excel-export": { @@ -1061,6 +1102,24 @@ "@syncfusion/ej2-compression": "~30.1.37" } }, + "node_modules/@syncfusion/ej2-excel-export/node_modules/@syncfusion/ej2-base": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-30.1.42.tgz", + "integrity": "sha512-PQm14uiirN2vdlbygyYb960+ELRy/f92lxC4E9GWpVSnOt/18C5ZZJSMmC1sjE2axqhHWM8JS9gFQ7OXB5FHIw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-icons": "~30.1.37" + }, + "bin": { + "syncfusion-license": "bin/syncfusion-license.js" + } + }, + "node_modules/@syncfusion/ej2-excel-export/node_modules/@syncfusion/ej2-icons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-30.1.37.tgz", + "integrity": "sha512-bgPklX0jiaLESbWJDNx8f8PqVexwbRJHoz4kDgOJR4VN4JoOtC7Zw47Wb+eFwj13Ped1lTfuPfmU8sI1s5INeQ==", + "license": "SEE LICENSE IN license" + }, "node_modules/@syncfusion/ej2-file-utils": { "version": "30.1.37", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-file-utils/-/ej2-file-utils-30.1.37.tgz", @@ -1085,7 +1144,742 @@ "@syncfusion/ej2-splitbuttons": "~30.1.37" } }, + "node_modules/@syncfusion/ej2-filemanager/node_modules/@syncfusion/ej2-base": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-30.1.42.tgz", + "integrity": "sha512-PQm14uiirN2vdlbygyYb960+ELRy/f92lxC4E9GWpVSnOt/18C5ZZJSMmC1sjE2axqhHWM8JS9gFQ7OXB5FHIw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-icons": "~30.1.37" + }, + "bin": { + "syncfusion-license": "bin/syncfusion-license.js" + } + }, + "node_modules/@syncfusion/ej2-filemanager/node_modules/@syncfusion/ej2-buttons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-buttons/-/ej2-buttons-30.1.37.tgz", + "integrity": "sha512-31dPIDSkraFlR8+sCz2NtM1tg9TSBN2YRHC7mBZGDWX6B26ie4zbe63S22l0ytaoMDt3XHqExsk7MLlnG3LR8g==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-filemanager/node_modules/@syncfusion/ej2-calendars": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-calendars/-/ej2-calendars-30.1.37.tgz", + "integrity": "sha512-9g41zBRizXilbRJWHJgqRYJPpX0WJF5qJwGNpgvsBnyYdolYQy///x6c3oYo9W6YG28N0QDavdbOaxwprj4ghg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.37", + "@syncfusion/ej2-buttons": "~30.1.37", + "@syncfusion/ej2-inputs": "~30.1.37", + "@syncfusion/ej2-lists": "~30.1.37", + "@syncfusion/ej2-popups": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-filemanager/node_modules/@syncfusion/ej2-dropdowns": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-dropdowns/-/ej2-dropdowns-30.1.42.tgz", + "integrity": "sha512-Ya4m6SVX2yrkcWaVsJ67Pe1DVmwO3d8za285xs+HU+dujjD2L/EjYzrbwxG2gcIcpKXY9GXaVujH7DABgPQ4Dw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.42", + "@syncfusion/ej2-data": "~30.1.40", + "@syncfusion/ej2-inputs": "~30.1.40", + "@syncfusion/ej2-lists": "~30.1.42", + "@syncfusion/ej2-navigations": "~30.1.42", + "@syncfusion/ej2-notifications": "~30.1.37", + "@syncfusion/ej2-popups": "~30.1.42" + } + }, + "node_modules/@syncfusion/ej2-filemanager/node_modules/@syncfusion/ej2-grids": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-grids/-/ej2-grids-30.1.42.tgz", + "integrity": "sha512-Z7AAPYanQDiBsrHEH78AfNbyNRr08E0aTulOqlkfK/YaXP8jEbNN6ayU+ClEEv/tQRmZrNt0WWqWaBhNvBHZpQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.42", + "@syncfusion/ej2-buttons": "~30.1.37", + "@syncfusion/ej2-calendars": "~30.1.37", + "@syncfusion/ej2-compression": "~30.1.37", + "@syncfusion/ej2-data": "~30.1.40", + "@syncfusion/ej2-dropdowns": "~30.1.42", + "@syncfusion/ej2-excel-export": "~30.1.37", + "@syncfusion/ej2-file-utils": "~30.1.37", + "@syncfusion/ej2-inputs": "~30.1.40", + "@syncfusion/ej2-lists": "~30.1.42", + "@syncfusion/ej2-navigations": "~30.1.42", + "@syncfusion/ej2-notifications": "~30.1.37", + "@syncfusion/ej2-pdf-export": "~30.1.42", + "@syncfusion/ej2-popups": "~30.1.42", + "@syncfusion/ej2-splitbuttons": "~30.1.41" + } + }, + "node_modules/@syncfusion/ej2-filemanager/node_modules/@syncfusion/ej2-icons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-30.1.37.tgz", + "integrity": "sha512-bgPklX0jiaLESbWJDNx8f8PqVexwbRJHoz4kDgOJR4VN4JoOtC7Zw47Wb+eFwj13Ped1lTfuPfmU8sI1s5INeQ==", + "license": "SEE LICENSE IN license" + }, + "node_modules/@syncfusion/ej2-filemanager/node_modules/@syncfusion/ej2-inputs": { + "version": "30.1.40", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-inputs/-/ej2-inputs-30.1.40.tgz", + "integrity": "sha512-qMbwX8x6s+pS4C9BKz6Dy9z7t+GYCSDvbJXVykvqmdpU54EjmIwb8l7LV9P2B4ooiXQ4QgkFf/CtGjP3z3H1yg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.38", + "@syncfusion/ej2-buttons": "~30.1.37", + "@syncfusion/ej2-popups": "~30.1.40", + "@syncfusion/ej2-splitbuttons": "~30.1.39" + } + }, + "node_modules/@syncfusion/ej2-filemanager/node_modules/@syncfusion/ej2-layouts": { + "version": "30.1.40", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-layouts/-/ej2-layouts-30.1.40.tgz", + "integrity": "sha512-PPv+brJOOkaMp+HZ7IDq7Tc8aYMYrpP7i0cp/b2W8fFTwcXoI06l4oRp65NAy1THnU82m2pRnbTETyrSDMu+TA==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.38" + } + }, + "node_modules/@syncfusion/ej2-filemanager/node_modules/@syncfusion/ej2-lists": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-lists/-/ej2-lists-30.1.42.tgz", + "integrity": "sha512-rGRU3d6duWGPZ5wNqNEbg5RXMPmLcFgS/1+DpElpHgDxJrwckPF+KJVbysCDQDAwknn6S28Dtaezd9ffFQrp7w==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.42", + "@syncfusion/ej2-buttons": "~30.1.37", + "@syncfusion/ej2-data": "~30.1.40", + "@syncfusion/ej2-popups": "~30.1.42" + } + }, + "node_modules/@syncfusion/ej2-filemanager/node_modules/@syncfusion/ej2-navigations": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-navigations/-/ej2-navigations-30.1.42.tgz", + "integrity": "sha512-vIOSsvvR1s1Wf2/7TPheqkhMekH2rvynS6L+OTmlQmsDvaUYdfeuht3wAY/0MPJHHDYrjq5gHLvqVehAY7UuqA==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.42", + "@syncfusion/ej2-buttons": "~30.1.37", + "@syncfusion/ej2-data": "~30.1.40", + "@syncfusion/ej2-inputs": "~30.1.40", + "@syncfusion/ej2-lists": "~30.1.42", + "@syncfusion/ej2-popups": "~30.1.42" + } + }, + "node_modules/@syncfusion/ej2-filemanager/node_modules/@syncfusion/ej2-notifications": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-notifications/-/ej2-notifications-30.1.37.tgz", + "integrity": "sha512-ksXk9lTf0Iw5+4EarYjxG1rKU+e9ZbCOaxvl/PN+MP1w1BAFwu4jRwpE9mbPF2FQUxcL1xNCxTnspSQaH36f4Q==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.37", + "@syncfusion/ej2-buttons": "~30.1.37", + "@syncfusion/ej2-popups": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-filemanager/node_modules/@syncfusion/ej2-pdf-export": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-pdf-export/-/ej2-pdf-export-30.1.42.tgz", + "integrity": "sha512-+mSVSOf1b3VKtZcl8DM6o6HKnkM7zG1lJb+b++NXR+8VcosODw3JKXiUXrn9v8pqXtY97ZubGKPCd7Uef5/ZOg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-compression": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-filemanager/node_modules/@syncfusion/ej2-popups": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-popups/-/ej2-popups-30.1.42.tgz", + "integrity": "sha512-lqaaaMfWH4gWy6aaEWHQx8NkGAN2VyYCu2BYxqox/PfaHIS1gI1zKOzNxAWZyF0OUvwG2dCGwvWOBdoWHNwAhg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.42", + "@syncfusion/ej2-buttons": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-filemanager/node_modules/@syncfusion/ej2-splitbuttons": { + "version": "30.1.41", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-splitbuttons/-/ej2-splitbuttons-30.1.41.tgz", + "integrity": "sha512-PV8oiXHUmTliEY3Lmr6+ecYc6JUhBYwxfA3VhQI750awlbtUDoesXM1mtzZ91uM+0a0Cogw1G3NNCsm3Q6l77g==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.38", + "@syncfusion/ej2-popups": "~30.1.37" + } + }, "node_modules/@syncfusion/ej2-grids": { + "version": "30.2.6", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-grids/-/ej2-grids-30.2.6.tgz", + "integrity": "sha512-KVTM7xytsp60/fvQdeK37vM3rTQqsV5TTBvpeMKHQmUNhs3qfEGYA0bYGPgITqJcjzVkiVSDOyAvKC+Ne1AgjA==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.2.4", + "@syncfusion/ej2-buttons": "~30.2.4", + "@syncfusion/ej2-calendars": "~30.2.4", + "@syncfusion/ej2-compression": "~30.2.4", + "@syncfusion/ej2-data": "~30.2.4", + "@syncfusion/ej2-dropdowns": "~30.2.6", + "@syncfusion/ej2-excel-export": "~30.2.4", + "@syncfusion/ej2-file-utils": "~30.2.4", + "@syncfusion/ej2-inputs": "~30.2.6", + "@syncfusion/ej2-lists": "~30.2.4", + "@syncfusion/ej2-navigations": "~30.2.5", + "@syncfusion/ej2-notifications": "~30.2.4", + "@syncfusion/ej2-pdf-export": "~30.2.4", + "@syncfusion/ej2-popups": "~30.2.4", + "@syncfusion/ej2-splitbuttons": "~30.2.4" + } + }, + "node_modules/@syncfusion/ej2-grids/node_modules/@syncfusion/ej2-compression": { + "version": "30.2.4", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-compression/-/ej2-compression-30.2.4.tgz", + "integrity": "sha512-7h0LxmvcDcU/GHuDVblUR/FLsKb0Ru0AjTFe7cay3eEG3dr76dObVsKVBWH7lobm3G/cptlFdLqnzsUeq+crQQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-file-utils": "~30.2.4" + } + }, + "node_modules/@syncfusion/ej2-grids/node_modules/@syncfusion/ej2-data": { + "version": "30.2.4", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-data/-/ej2-data-30.2.4.tgz", + "integrity": "sha512-HYBwk6U0pxTjc8yEYAj2YyuqRsgbVIAzTgYn1/WEvysXHFhwsNA5oUlvF9BFGPBiWLSJCCv4R9jDQHGm9pbtqw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.2.4" + } + }, + "node_modules/@syncfusion/ej2-grids/node_modules/@syncfusion/ej2-excel-export": { + "version": "30.2.4", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-excel-export/-/ej2-excel-export-30.2.4.tgz", + "integrity": "sha512-7hTXmVQmcWnePt6Y4VWhJGe9jeXhUOykZSX/jrjULuBQNTE5tnHo1P6Mf2iiFZX2+qd1eRCEnS8u7EyHmpLO6Q==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.2.4", + "@syncfusion/ej2-compression": "~30.2.4" + } + }, + "node_modules/@syncfusion/ej2-grids/node_modules/@syncfusion/ej2-file-utils": { + "version": "30.2.4", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-file-utils/-/ej2-file-utils-30.2.4.tgz", + "integrity": "sha512-rrMlfJdXIF069P1kSf69Cuv7oNe6jXknUUxvDaej2+5ZgS79I181ugAHBkvyIUzpq4R0AobJUKPRIAv2XtUo7g==", + "license": "SEE LICENSE IN license" + }, + "node_modules/@syncfusion/ej2-icons": { + "version": "30.2.4", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-30.2.4.tgz", + "integrity": "sha512-zKJaCs9AhPT/xOVvjlSAQCCcQX9P+P/ajVd2Xe2UxeSuJpB8K9D1+4MHXe6lZOdY/hOyNWocpZc60UmcaAcR/Q==", + "license": "SEE LICENSE IN license" + }, + "node_modules/@syncfusion/ej2-inputs": { + "version": "30.2.6", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-inputs/-/ej2-inputs-30.2.6.tgz", + "integrity": "sha512-A6orvv+qdybR9hPHRb+XlVOOT6tB8BodxD4I/aVEGj0Vs2iAAbkJgQ+Lccn//X0r/OLoxxoVLQBRv8k8bRuBPg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.2.4", + "@syncfusion/ej2-buttons": "~30.2.4", + "@syncfusion/ej2-popups": "~30.2.4", + "@syncfusion/ej2-splitbuttons": "~30.2.4" + } + }, + "node_modules/@syncfusion/ej2-kanban": { + "version": "30.2.4", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-kanban/-/ej2-kanban-30.2.4.tgz", + "integrity": "sha512-XfDQs9X6T/NDud+YBgddZkBx2QRBhlaObrbWOSi1Utrd5a5Yv/Z9T4UN/SRztaSooLIsqgCQbgok35XD5MRFsA==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.2.4", + "@syncfusion/ej2-buttons": "~30.2.4", + "@syncfusion/ej2-data": "~30.2.4", + "@syncfusion/ej2-dropdowns": "~30.2.4", + "@syncfusion/ej2-inputs": "~30.2.4", + "@syncfusion/ej2-layouts": "~30.2.4", + "@syncfusion/ej2-navigations": "~30.2.4", + "@syncfusion/ej2-notifications": "~30.2.4", + "@syncfusion/ej2-popups": "~30.2.4" + } + }, + "node_modules/@syncfusion/ej2-kanban/node_modules/@syncfusion/ej2-data": { + "version": "30.2.4", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-data/-/ej2-data-30.2.4.tgz", + "integrity": "sha512-HYBwk6U0pxTjc8yEYAj2YyuqRsgbVIAzTgYn1/WEvysXHFhwsNA5oUlvF9BFGPBiWLSJCCv4R9jDQHGm9pbtqw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.2.4" + } + }, + "node_modules/@syncfusion/ej2-layouts": { + "version": "30.2.4", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-layouts/-/ej2-layouts-30.2.4.tgz", + "integrity": "sha512-WlCadhLT3wo4K4F7MP66Vts8rwE5EC3koKLnNuaMlQv29+NDU1dsVgA3mmkvcLL3GaaDUv6b5gzRPVUxzgzIHw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.2.4" + } + }, + "node_modules/@syncfusion/ej2-lists": { + "version": "30.2.4", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-lists/-/ej2-lists-30.2.4.tgz", + "integrity": "sha512-2+/tDgrR+GtuCB8u1IFKEbmduKZUHHRrudZXpWQWgFlO3KDZozDHwTwgf6xwlfr1u03L63H4AksaanfcBL4Zpw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.2.4", + "@syncfusion/ej2-buttons": "~30.2.4", + "@syncfusion/ej2-data": "~30.2.4", + "@syncfusion/ej2-popups": "~30.2.4" + } + }, + "node_modules/@syncfusion/ej2-lists/node_modules/@syncfusion/ej2-data": { + "version": "30.2.4", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-data/-/ej2-data-30.2.4.tgz", + "integrity": "sha512-HYBwk6U0pxTjc8yEYAj2YyuqRsgbVIAzTgYn1/WEvysXHFhwsNA5oUlvF9BFGPBiWLSJCCv4R9jDQHGm9pbtqw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.2.4" + } + }, + "node_modules/@syncfusion/ej2-navigations": { + "version": "30.2.7", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-navigations/-/ej2-navigations-30.2.7.tgz", + "integrity": "sha512-vaUqL3NbpEhjzK6rL1iPtoqq7Pl+1e1Q7vZTsuL3fBoowYIirMkI0Xmtz67PDMobyp/8aKYrNh4kzyEqnEdfLQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.2.6", + "@syncfusion/ej2-buttons": "~30.2.4", + "@syncfusion/ej2-data": "~30.2.4", + "@syncfusion/ej2-inputs": "~30.2.6", + "@syncfusion/ej2-lists": "~30.2.4", + "@syncfusion/ej2-popups": "~30.2.4" + } + }, + "node_modules/@syncfusion/ej2-navigations/node_modules/@syncfusion/ej2-data": { + "version": "30.2.4", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-data/-/ej2-data-30.2.4.tgz", + "integrity": "sha512-HYBwk6U0pxTjc8yEYAj2YyuqRsgbVIAzTgYn1/WEvysXHFhwsNA5oUlvF9BFGPBiWLSJCCv4R9jDQHGm9pbtqw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.2.4" + } + }, + "node_modules/@syncfusion/ej2-notifications": { + "version": "30.2.4", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-notifications/-/ej2-notifications-30.2.4.tgz", + "integrity": "sha512-DuwH/WCv6148ZNNjdRmsa/l51bBxaWJnyC+YnEJrKkBERYkSED/avjU0bkixE8Hh8c9Q1PcseTrUjOKHHGkL7w==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.2.4", + "@syncfusion/ej2-buttons": "~30.2.4", + "@syncfusion/ej2-popups": "~30.2.4" + } + }, + "node_modules/@syncfusion/ej2-pdf-export": { + "version": "30.2.4", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-pdf-export/-/ej2-pdf-export-30.2.4.tgz", + "integrity": "sha512-xSv1bICsnN1P0zPZBfAt6x9ThajCBvY1nSsWI5/8iA/sUHeI7GD/fpau+w4cLRBscGxWpei6i5IvSXcgdQ+muw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-compression": "~30.2.4" + } + }, + "node_modules/@syncfusion/ej2-pdf-export/node_modules/@syncfusion/ej2-compression": { + "version": "30.2.4", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-compression/-/ej2-compression-30.2.4.tgz", + "integrity": "sha512-7h0LxmvcDcU/GHuDVblUR/FLsKb0Ru0AjTFe7cay3eEG3dr76dObVsKVBWH7lobm3G/cptlFdLqnzsUeq+crQQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-file-utils": "~30.2.4" + } + }, + "node_modules/@syncfusion/ej2-pdf-export/node_modules/@syncfusion/ej2-file-utils": { + "version": "30.2.4", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-file-utils/-/ej2-file-utils-30.2.4.tgz", + "integrity": "sha512-rrMlfJdXIF069P1kSf69Cuv7oNe6jXknUUxvDaej2+5ZgS79I181ugAHBkvyIUzpq4R0AobJUKPRIAv2XtUo7g==", + "license": "SEE LICENSE IN license" + }, + "node_modules/@syncfusion/ej2-popups": { + "version": "30.2.4", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-popups/-/ej2-popups-30.2.4.tgz", + "integrity": "sha512-nlfLVgmMNK6xk/c6UN7OuLgsnMqX8cn+Ql84PVovI2cgc1MCT4Jh46MRbArXtJfeCtWIyHMVE4+hfbNAXYDhWQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.2.4", + "@syncfusion/ej2-buttons": "~30.2.4" + } + }, + "node_modules/@syncfusion/ej2-react-base": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-react-base/-/ej2-react-base-30.1.37.tgz", + "integrity": "sha512-9Mr+gGR9fb9ywlvXLU/sROH7qcQl/rnITR9wVndKtLP0kCULIAl0QVjaBP4krVIrV5rKIqpL4dEXOJhNVXwgNQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-base/node_modules/@syncfusion/ej2-base": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-30.1.42.tgz", + "integrity": "sha512-PQm14uiirN2vdlbygyYb960+ELRy/f92lxC4E9GWpVSnOt/18C5ZZJSMmC1sjE2axqhHWM8JS9gFQ7OXB5FHIw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-icons": "~30.1.37" + }, + "bin": { + "syncfusion-license": "bin/syncfusion-license.js" + } + }, + "node_modules/@syncfusion/ej2-react-base/node_modules/@syncfusion/ej2-icons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-30.1.37.tgz", + "integrity": "sha512-bgPklX0jiaLESbWJDNx8f8PqVexwbRJHoz4kDgOJR4VN4JoOtC7Zw47Wb+eFwj13Ped1lTfuPfmU8sI1s5INeQ==", + "license": "SEE LICENSE IN license" + }, + "node_modules/@syncfusion/ej2-react-buttons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-react-buttons/-/ej2-react-buttons-30.1.37.tgz", + "integrity": "sha512-QWvVNwfDBk9bZTM1otAmjGK9b8GeA/d1+/Db6skgBDcVzyQUBh26rCJeKMKOnyg/8DratkUG1VdfuhKL5YAMvA==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.37", + "@syncfusion/ej2-buttons": "30.1.37", + "@syncfusion/ej2-react-base": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-buttons/node_modules/@syncfusion/ej2-base": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-30.1.42.tgz", + "integrity": "sha512-PQm14uiirN2vdlbygyYb960+ELRy/f92lxC4E9GWpVSnOt/18C5ZZJSMmC1sjE2axqhHWM8JS9gFQ7OXB5FHIw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-icons": "~30.1.37" + }, + "bin": { + "syncfusion-license": "bin/syncfusion-license.js" + } + }, + "node_modules/@syncfusion/ej2-react-buttons/node_modules/@syncfusion/ej2-buttons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-buttons/-/ej2-buttons-30.1.37.tgz", + "integrity": "sha512-31dPIDSkraFlR8+sCz2NtM1tg9TSBN2YRHC7mBZGDWX6B26ie4zbe63S22l0ytaoMDt3XHqExsk7MLlnG3LR8g==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-buttons/node_modules/@syncfusion/ej2-icons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-30.1.37.tgz", + "integrity": "sha512-bgPklX0jiaLESbWJDNx8f8PqVexwbRJHoz4kDgOJR4VN4JoOtC7Zw47Wb+eFwj13Ped1lTfuPfmU8sI1s5INeQ==", + "license": "SEE LICENSE IN license" + }, + "node_modules/@syncfusion/ej2-react-calendars": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-react-calendars/-/ej2-react-calendars-30.1.37.tgz", + "integrity": "sha512-RDHxN2q1Pj+yIfZIm9qyFMvQdrpWXGXIh51o3CREKViD26R2ykh5WmI6JICvgp+Mru1VS3nEIzzsXEsIDrwoaw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.37", + "@syncfusion/ej2-calendars": "30.1.37", + "@syncfusion/ej2-react-base": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-calendars/node_modules/@syncfusion/ej2-base": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-30.1.42.tgz", + "integrity": "sha512-PQm14uiirN2vdlbygyYb960+ELRy/f92lxC4E9GWpVSnOt/18C5ZZJSMmC1sjE2axqhHWM8JS9gFQ7OXB5FHIw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-icons": "~30.1.37" + }, + "bin": { + "syncfusion-license": "bin/syncfusion-license.js" + } + }, + "node_modules/@syncfusion/ej2-react-calendars/node_modules/@syncfusion/ej2-buttons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-buttons/-/ej2-buttons-30.1.37.tgz", + "integrity": "sha512-31dPIDSkraFlR8+sCz2NtM1tg9TSBN2YRHC7mBZGDWX6B26ie4zbe63S22l0ytaoMDt3XHqExsk7MLlnG3LR8g==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-calendars/node_modules/@syncfusion/ej2-calendars": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-calendars/-/ej2-calendars-30.1.37.tgz", + "integrity": "sha512-9g41zBRizXilbRJWHJgqRYJPpX0WJF5qJwGNpgvsBnyYdolYQy///x6c3oYo9W6YG28N0QDavdbOaxwprj4ghg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.37", + "@syncfusion/ej2-buttons": "~30.1.37", + "@syncfusion/ej2-inputs": "~30.1.37", + "@syncfusion/ej2-lists": "~30.1.37", + "@syncfusion/ej2-popups": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-calendars/node_modules/@syncfusion/ej2-icons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-30.1.37.tgz", + "integrity": "sha512-bgPklX0jiaLESbWJDNx8f8PqVexwbRJHoz4kDgOJR4VN4JoOtC7Zw47Wb+eFwj13Ped1lTfuPfmU8sI1s5INeQ==", + "license": "SEE LICENSE IN license" + }, + "node_modules/@syncfusion/ej2-react-calendars/node_modules/@syncfusion/ej2-inputs": { + "version": "30.1.40", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-inputs/-/ej2-inputs-30.1.40.tgz", + "integrity": "sha512-qMbwX8x6s+pS4C9BKz6Dy9z7t+GYCSDvbJXVykvqmdpU54EjmIwb8l7LV9P2B4ooiXQ4QgkFf/CtGjP3z3H1yg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.38", + "@syncfusion/ej2-buttons": "~30.1.37", + "@syncfusion/ej2-popups": "~30.1.40", + "@syncfusion/ej2-splitbuttons": "~30.1.39" + } + }, + "node_modules/@syncfusion/ej2-react-calendars/node_modules/@syncfusion/ej2-lists": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-lists/-/ej2-lists-30.1.42.tgz", + "integrity": "sha512-rGRU3d6duWGPZ5wNqNEbg5RXMPmLcFgS/1+DpElpHgDxJrwckPF+KJVbysCDQDAwknn6S28Dtaezd9ffFQrp7w==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.42", + "@syncfusion/ej2-buttons": "~30.1.37", + "@syncfusion/ej2-data": "~30.1.40", + "@syncfusion/ej2-popups": "~30.1.42" + } + }, + "node_modules/@syncfusion/ej2-react-calendars/node_modules/@syncfusion/ej2-popups": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-popups/-/ej2-popups-30.1.42.tgz", + "integrity": "sha512-lqaaaMfWH4gWy6aaEWHQx8NkGAN2VyYCu2BYxqox/PfaHIS1gI1zKOzNxAWZyF0OUvwG2dCGwvWOBdoWHNwAhg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.42", + "@syncfusion/ej2-buttons": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-calendars/node_modules/@syncfusion/ej2-splitbuttons": { + "version": "30.1.41", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-splitbuttons/-/ej2-splitbuttons-30.1.41.tgz", + "integrity": "sha512-PV8oiXHUmTliEY3Lmr6+ecYc6JUhBYwxfA3VhQI750awlbtUDoesXM1mtzZ91uM+0a0Cogw1G3NNCsm3Q6l77g==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.38", + "@syncfusion/ej2-popups": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-dropdowns": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-react-dropdowns/-/ej2-react-dropdowns-30.1.37.tgz", + "integrity": "sha512-4mgqlsC8T/9YVMCo1LZIZVUfVY3llv4hndm5MlYIOSaKeVqpfbu9iUvTOZdg4NIEruaK04BGnEemO0TZkMi4Rg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.37", + "@syncfusion/ej2-dropdowns": "30.1.37", + "@syncfusion/ej2-react-base": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-dropdowns/node_modules/@syncfusion/ej2-base": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-30.1.42.tgz", + "integrity": "sha512-PQm14uiirN2vdlbygyYb960+ELRy/f92lxC4E9GWpVSnOt/18C5ZZJSMmC1sjE2axqhHWM8JS9gFQ7OXB5FHIw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-icons": "~30.1.37" + }, + "bin": { + "syncfusion-license": "bin/syncfusion-license.js" + } + }, + "node_modules/@syncfusion/ej2-react-dropdowns/node_modules/@syncfusion/ej2-buttons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-buttons/-/ej2-buttons-30.1.37.tgz", + "integrity": "sha512-31dPIDSkraFlR8+sCz2NtM1tg9TSBN2YRHC7mBZGDWX6B26ie4zbe63S22l0ytaoMDt3XHqExsk7MLlnG3LR8g==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-dropdowns/node_modules/@syncfusion/ej2-dropdowns": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-dropdowns/-/ej2-dropdowns-30.1.37.tgz", + "integrity": "sha512-yk4Pous9P2Ccg/QoX+fmJatn5ypbWWTvptEd5h5p4Wb0qlvwJIPuJo/KkcyK2vUx7kRzN5dzmUX7cKP7Z1ZhPg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.37", + "@syncfusion/ej2-data": "~30.1.37", + "@syncfusion/ej2-inputs": "~30.1.37", + "@syncfusion/ej2-lists": "~30.1.37", + "@syncfusion/ej2-navigations": "~30.1.37", + "@syncfusion/ej2-notifications": "~30.1.37", + "@syncfusion/ej2-popups": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-dropdowns/node_modules/@syncfusion/ej2-icons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-30.1.37.tgz", + "integrity": "sha512-bgPklX0jiaLESbWJDNx8f8PqVexwbRJHoz4kDgOJR4VN4JoOtC7Zw47Wb+eFwj13Ped1lTfuPfmU8sI1s5INeQ==", + "license": "SEE LICENSE IN license" + }, + "node_modules/@syncfusion/ej2-react-dropdowns/node_modules/@syncfusion/ej2-inputs": { + "version": "30.1.40", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-inputs/-/ej2-inputs-30.1.40.tgz", + "integrity": "sha512-qMbwX8x6s+pS4C9BKz6Dy9z7t+GYCSDvbJXVykvqmdpU54EjmIwb8l7LV9P2B4ooiXQ4QgkFf/CtGjP3z3H1yg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.38", + "@syncfusion/ej2-buttons": "~30.1.37", + "@syncfusion/ej2-popups": "~30.1.40", + "@syncfusion/ej2-splitbuttons": "~30.1.39" + } + }, + "node_modules/@syncfusion/ej2-react-dropdowns/node_modules/@syncfusion/ej2-lists": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-lists/-/ej2-lists-30.1.42.tgz", + "integrity": "sha512-rGRU3d6duWGPZ5wNqNEbg5RXMPmLcFgS/1+DpElpHgDxJrwckPF+KJVbysCDQDAwknn6S28Dtaezd9ffFQrp7w==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.42", + "@syncfusion/ej2-buttons": "~30.1.37", + "@syncfusion/ej2-data": "~30.1.40", + "@syncfusion/ej2-popups": "~30.1.42" + } + }, + "node_modules/@syncfusion/ej2-react-dropdowns/node_modules/@syncfusion/ej2-navigations": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-navigations/-/ej2-navigations-30.1.42.tgz", + "integrity": "sha512-vIOSsvvR1s1Wf2/7TPheqkhMekH2rvynS6L+OTmlQmsDvaUYdfeuht3wAY/0MPJHHDYrjq5gHLvqVehAY7UuqA==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.42", + "@syncfusion/ej2-buttons": "~30.1.37", + "@syncfusion/ej2-data": "~30.1.40", + "@syncfusion/ej2-inputs": "~30.1.40", + "@syncfusion/ej2-lists": "~30.1.42", + "@syncfusion/ej2-popups": "~30.1.42" + } + }, + "node_modules/@syncfusion/ej2-react-dropdowns/node_modules/@syncfusion/ej2-notifications": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-notifications/-/ej2-notifications-30.1.37.tgz", + "integrity": "sha512-ksXk9lTf0Iw5+4EarYjxG1rKU+e9ZbCOaxvl/PN+MP1w1BAFwu4jRwpE9mbPF2FQUxcL1xNCxTnspSQaH36f4Q==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.37", + "@syncfusion/ej2-buttons": "~30.1.37", + "@syncfusion/ej2-popups": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-dropdowns/node_modules/@syncfusion/ej2-popups": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-popups/-/ej2-popups-30.1.42.tgz", + "integrity": "sha512-lqaaaMfWH4gWy6aaEWHQx8NkGAN2VyYCu2BYxqox/PfaHIS1gI1zKOzNxAWZyF0OUvwG2dCGwvWOBdoWHNwAhg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.42", + "@syncfusion/ej2-buttons": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-dropdowns/node_modules/@syncfusion/ej2-splitbuttons": { + "version": "30.1.41", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-splitbuttons/-/ej2-splitbuttons-30.1.41.tgz", + "integrity": "sha512-PV8oiXHUmTliEY3Lmr6+ecYc6JUhBYwxfA3VhQI750awlbtUDoesXM1mtzZ91uM+0a0Cogw1G3NNCsm3Q6l77g==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.38", + "@syncfusion/ej2-popups": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-filemanager": { + "version": "30.1.38", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-react-filemanager/-/ej2-react-filemanager-30.1.38.tgz", + "integrity": "sha512-xwq7J24oC7zoiuSQpBe1NWvdK/4zIFSZOXGfTapUdjdczcolC6d+s3AgGmJZLvR1rqdNCJE99m5DO0LiRnJz3A==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.38", + "@syncfusion/ej2-filemanager": "30.1.38", + "@syncfusion/ej2-react-base": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-filemanager/node_modules/@syncfusion/ej2-base": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-30.1.42.tgz", + "integrity": "sha512-PQm14uiirN2vdlbygyYb960+ELRy/f92lxC4E9GWpVSnOt/18C5ZZJSMmC1sjE2axqhHWM8JS9gFQ7OXB5FHIw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-icons": "~30.1.37" + }, + "bin": { + "syncfusion-license": "bin/syncfusion-license.js" + } + }, + "node_modules/@syncfusion/ej2-react-filemanager/node_modules/@syncfusion/ej2-icons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-30.1.37.tgz", + "integrity": "sha512-bgPklX0jiaLESbWJDNx8f8PqVexwbRJHoz4kDgOJR4VN4JoOtC7Zw47Wb+eFwj13Ped1lTfuPfmU8sI1s5INeQ==", + "license": "SEE LICENSE IN license" + }, + "node_modules/@syncfusion/ej2-react-grids": { + "version": "30.1.40", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-react-grids/-/ej2-react-grids-30.1.40.tgz", + "integrity": "sha512-NaqR/r8yN1tomNkp4X5lUQe55wLmtKBvX2Qj0Sm6+SAb2taRR2v2MSKX+MHWToV1cGpUhmVDKo/PikbW98r2eA==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.38", + "@syncfusion/ej2-grids": "30.1.40", + "@syncfusion/ej2-react-base": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-grids/node_modules/@syncfusion/ej2-base": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-30.1.42.tgz", + "integrity": "sha512-PQm14uiirN2vdlbygyYb960+ELRy/f92lxC4E9GWpVSnOt/18C5ZZJSMmC1sjE2axqhHWM8JS9gFQ7OXB5FHIw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-icons": "~30.1.37" + }, + "bin": { + "syncfusion-license": "bin/syncfusion-license.js" + } + }, + "node_modules/@syncfusion/ej2-react-grids/node_modules/@syncfusion/ej2-buttons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-buttons/-/ej2-buttons-30.1.37.tgz", + "integrity": "sha512-31dPIDSkraFlR8+sCz2NtM1tg9TSBN2YRHC7mBZGDWX6B26ie4zbe63S22l0ytaoMDt3XHqExsk7MLlnG3LR8g==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-grids/node_modules/@syncfusion/ej2-calendars": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-calendars/-/ej2-calendars-30.1.37.tgz", + "integrity": "sha512-9g41zBRizXilbRJWHJgqRYJPpX0WJF5qJwGNpgvsBnyYdolYQy///x6c3oYo9W6YG28N0QDavdbOaxwprj4ghg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.37", + "@syncfusion/ej2-buttons": "~30.1.37", + "@syncfusion/ej2-inputs": "~30.1.37", + "@syncfusion/ej2-lists": "~30.1.37", + "@syncfusion/ej2-popups": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-grids/node_modules/@syncfusion/ej2-dropdowns": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-dropdowns/-/ej2-dropdowns-30.1.42.tgz", + "integrity": "sha512-Ya4m6SVX2yrkcWaVsJ67Pe1DVmwO3d8za285xs+HU+dujjD2L/EjYzrbwxG2gcIcpKXY9GXaVujH7DABgPQ4Dw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.42", + "@syncfusion/ej2-data": "~30.1.40", + "@syncfusion/ej2-inputs": "~30.1.40", + "@syncfusion/ej2-lists": "~30.1.42", + "@syncfusion/ej2-navigations": "~30.1.42", + "@syncfusion/ej2-notifications": "~30.1.37", + "@syncfusion/ej2-popups": "~30.1.42" + } + }, + "node_modules/@syncfusion/ej2-react-grids/node_modules/@syncfusion/ej2-grids": { "version": "30.1.40", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-grids/-/ej2-grids-30.1.40.tgz", "integrity": "sha512-t6WHFhF2dD0vusdn9rEOFi8Opony/TDIFlu9iBRYd2g+RvKDzK4jo97qWQbAzOnbgvJGhSy3DLnVnIMwFdnqRw==", @@ -1108,22 +1902,13 @@ "@syncfusion/ej2-splitbuttons": "~30.1.39" } }, - "node_modules/@syncfusion/ej2-grids/node_modules/@syncfusion/ej2-dropdowns": { - "version": "30.1.40", - "resolved": "https://registry.npmjs.org/@syncfusion/ej2-dropdowns/-/ej2-dropdowns-30.1.40.tgz", - "integrity": "sha512-8vpO0+X4OnA+CLPfVBqOBon2AbDHXUTK5UdP/A2JEJQw0ktNpURm8ux3K1VT9OXvYmuNgyN/WrM6Pf5m3Oexkw==", - "license": "SEE LICENSE IN license", - "dependencies": { - "@syncfusion/ej2-base": "~30.1.38", - "@syncfusion/ej2-data": "~30.1.40", - "@syncfusion/ej2-inputs": "~30.1.40", - "@syncfusion/ej2-lists": "~30.1.37", - "@syncfusion/ej2-navigations": "~30.1.39", - "@syncfusion/ej2-notifications": "~30.1.37", - "@syncfusion/ej2-popups": "~30.1.40" - } + "node_modules/@syncfusion/ej2-react-grids/node_modules/@syncfusion/ej2-icons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-30.1.37.tgz", + "integrity": "sha512-bgPklX0jiaLESbWJDNx8f8PqVexwbRJHoz4kDgOJR4VN4JoOtC7Zw47Wb+eFwj13Ped1lTfuPfmU8sI1s5INeQ==", + "license": "SEE LICENSE IN license" }, - "node_modules/@syncfusion/ej2-grids/node_modules/@syncfusion/ej2-inputs": { + "node_modules/@syncfusion/ej2-react-grids/node_modules/@syncfusion/ej2-inputs": { "version": "30.1.40", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-inputs/-/ej2-inputs-30.1.40.tgz", "integrity": "sha512-qMbwX8x6s+pS4C9BKz6Dy9z7t+GYCSDvbJXVykvqmdpU54EjmIwb8l7LV9P2B4ooiXQ4QgkFf/CtGjP3z3H1yg==", @@ -1135,23 +1920,111 @@ "@syncfusion/ej2-splitbuttons": "~30.1.39" } }, - "node_modules/@syncfusion/ej2-grids/node_modules/@syncfusion/ej2-popups": { - "version": "30.1.40", - "resolved": "https://registry.npmjs.org/@syncfusion/ej2-popups/-/ej2-popups-30.1.40.tgz", - "integrity": "sha512-yf3FKJW+jdZeargitw9CkOF2Jxg6jCw4PSq9L6aypDiAm9H3GEuZGGRwmnyTLEi+M14oxFSyKOpw5oMSPoZKuw==", + "node_modules/@syncfusion/ej2-react-grids/node_modules/@syncfusion/ej2-lists": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-lists/-/ej2-lists-30.1.42.tgz", + "integrity": "sha512-rGRU3d6duWGPZ5wNqNEbg5RXMPmLcFgS/1+DpElpHgDxJrwckPF+KJVbysCDQDAwknn6S28Dtaezd9ffFQrp7w==", "license": "SEE LICENSE IN license", "dependencies": { - "@syncfusion/ej2-base": "~30.1.38", + "@syncfusion/ej2-base": "~30.1.42", + "@syncfusion/ej2-buttons": "~30.1.37", + "@syncfusion/ej2-data": "~30.1.40", + "@syncfusion/ej2-popups": "~30.1.42" + } + }, + "node_modules/@syncfusion/ej2-react-grids/node_modules/@syncfusion/ej2-navigations": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-navigations/-/ej2-navigations-30.1.42.tgz", + "integrity": "sha512-vIOSsvvR1s1Wf2/7TPheqkhMekH2rvynS6L+OTmlQmsDvaUYdfeuht3wAY/0MPJHHDYrjq5gHLvqVehAY7UuqA==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.42", + "@syncfusion/ej2-buttons": "~30.1.37", + "@syncfusion/ej2-data": "~30.1.40", + "@syncfusion/ej2-inputs": "~30.1.40", + "@syncfusion/ej2-lists": "~30.1.42", + "@syncfusion/ej2-popups": "~30.1.42" + } + }, + "node_modules/@syncfusion/ej2-react-grids/node_modules/@syncfusion/ej2-notifications": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-notifications/-/ej2-notifications-30.1.37.tgz", + "integrity": "sha512-ksXk9lTf0Iw5+4EarYjxG1rKU+e9ZbCOaxvl/PN+MP1w1BAFwu4jRwpE9mbPF2FQUxcL1xNCxTnspSQaH36f4Q==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.37", + "@syncfusion/ej2-buttons": "~30.1.37", + "@syncfusion/ej2-popups": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-grids/node_modules/@syncfusion/ej2-pdf-export": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-pdf-export/-/ej2-pdf-export-30.1.42.tgz", + "integrity": "sha512-+mSVSOf1b3VKtZcl8DM6o6HKnkM7zG1lJb+b++NXR+8VcosODw3JKXiUXrn9v8pqXtY97ZubGKPCd7Uef5/ZOg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-compression": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-grids/node_modules/@syncfusion/ej2-popups": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-popups/-/ej2-popups-30.1.42.tgz", + "integrity": "sha512-lqaaaMfWH4gWy6aaEWHQx8NkGAN2VyYCu2BYxqox/PfaHIS1gI1zKOzNxAWZyF0OUvwG2dCGwvWOBdoWHNwAhg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.42", "@syncfusion/ej2-buttons": "~30.1.37" } }, - "node_modules/@syncfusion/ej2-icons": { + "node_modules/@syncfusion/ej2-react-grids/node_modules/@syncfusion/ej2-splitbuttons": { + "version": "30.1.41", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-splitbuttons/-/ej2-splitbuttons-30.1.41.tgz", + "integrity": "sha512-PV8oiXHUmTliEY3Lmr6+ecYc6JUhBYwxfA3VhQI750awlbtUDoesXM1mtzZ91uM+0a0Cogw1G3NNCsm3Q6l77g==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.38", + "@syncfusion/ej2-popups": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-inputs": { + "version": "30.1.38", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-react-inputs/-/ej2-react-inputs-30.1.38.tgz", + "integrity": "sha512-vJb0ZcPeGj9kSzybIde30msp8guCiWrAXtOu/LdTP/4oQwelmWpZHMy9zcsdhnTq5faW2cWZltNBZMnyQNT14Q==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.38", + "@syncfusion/ej2-inputs": "30.1.38", + "@syncfusion/ej2-react-base": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-inputs/node_modules/@syncfusion/ej2-base": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-30.1.42.tgz", + "integrity": "sha512-PQm14uiirN2vdlbygyYb960+ELRy/f92lxC4E9GWpVSnOt/18C5ZZJSMmC1sjE2axqhHWM8JS9gFQ7OXB5FHIw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-icons": "~30.1.37" + }, + "bin": { + "syncfusion-license": "bin/syncfusion-license.js" + } + }, + "node_modules/@syncfusion/ej2-react-inputs/node_modules/@syncfusion/ej2-buttons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-buttons/-/ej2-buttons-30.1.37.tgz", + "integrity": "sha512-31dPIDSkraFlR8+sCz2NtM1tg9TSBN2YRHC7mBZGDWX6B26ie4zbe63S22l0ytaoMDt3XHqExsk7MLlnG3LR8g==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-inputs/node_modules/@syncfusion/ej2-icons": { "version": "30.1.37", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-30.1.37.tgz", "integrity": "sha512-bgPklX0jiaLESbWJDNx8f8PqVexwbRJHoz4kDgOJR4VN4JoOtC7Zw47Wb+eFwj13Ped1lTfuPfmU8sI1s5INeQ==", "license": "SEE LICENSE IN license" }, - "node_modules/@syncfusion/ej2-inputs": { + "node_modules/@syncfusion/ej2-react-inputs/node_modules/@syncfusion/ej2-inputs": { "version": "30.1.38", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-inputs/-/ej2-inputs-30.1.38.tgz", "integrity": "sha512-slZHBwCbCCus4L41FvUBejOciHHfjx2XuVXx+dxmWh4IStSRn0T40WKMC8Nz8BY3X4/Wc70AbDnYcOq99erqvg==", @@ -1163,7 +2036,92 @@ "@syncfusion/ej2-splitbuttons": "~30.1.37" } }, - "node_modules/@syncfusion/ej2-kanban": { + "node_modules/@syncfusion/ej2-react-inputs/node_modules/@syncfusion/ej2-popups": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-popups/-/ej2-popups-30.1.42.tgz", + "integrity": "sha512-lqaaaMfWH4gWy6aaEWHQx8NkGAN2VyYCu2BYxqox/PfaHIS1gI1zKOzNxAWZyF0OUvwG2dCGwvWOBdoWHNwAhg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.42", + "@syncfusion/ej2-buttons": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-inputs/node_modules/@syncfusion/ej2-splitbuttons": { + "version": "30.1.41", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-splitbuttons/-/ej2-splitbuttons-30.1.41.tgz", + "integrity": "sha512-PV8oiXHUmTliEY3Lmr6+ecYc6JUhBYwxfA3VhQI750awlbtUDoesXM1mtzZ91uM+0a0Cogw1G3NNCsm3Q6l77g==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.38", + "@syncfusion/ej2-popups": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-kanban": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-react-kanban/-/ej2-react-kanban-30.1.37.tgz", + "integrity": "sha512-lcUwtLNBodSSHYQhYlG4ZiMt4kqQQLjoDBYuFu1GhDimshonwxkXEk+ekgPSHtgJFDJX5YEca/XT5jlm6gxBKw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.37", + "@syncfusion/ej2-kanban": "30.1.37", + "@syncfusion/ej2-react-base": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-kanban/node_modules/@syncfusion/ej2-base": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-30.1.42.tgz", + "integrity": "sha512-PQm14uiirN2vdlbygyYb960+ELRy/f92lxC4E9GWpVSnOt/18C5ZZJSMmC1sjE2axqhHWM8JS9gFQ7OXB5FHIw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-icons": "~30.1.37" + }, + "bin": { + "syncfusion-license": "bin/syncfusion-license.js" + } + }, + "node_modules/@syncfusion/ej2-react-kanban/node_modules/@syncfusion/ej2-buttons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-buttons/-/ej2-buttons-30.1.37.tgz", + "integrity": "sha512-31dPIDSkraFlR8+sCz2NtM1tg9TSBN2YRHC7mBZGDWX6B26ie4zbe63S22l0ytaoMDt3XHqExsk7MLlnG3LR8g==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-kanban/node_modules/@syncfusion/ej2-dropdowns": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-dropdowns/-/ej2-dropdowns-30.1.42.tgz", + "integrity": "sha512-Ya4m6SVX2yrkcWaVsJ67Pe1DVmwO3d8za285xs+HU+dujjD2L/EjYzrbwxG2gcIcpKXY9GXaVujH7DABgPQ4Dw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.42", + "@syncfusion/ej2-data": "~30.1.40", + "@syncfusion/ej2-inputs": "~30.1.40", + "@syncfusion/ej2-lists": "~30.1.42", + "@syncfusion/ej2-navigations": "~30.1.42", + "@syncfusion/ej2-notifications": "~30.1.37", + "@syncfusion/ej2-popups": "~30.1.42" + } + }, + "node_modules/@syncfusion/ej2-react-kanban/node_modules/@syncfusion/ej2-icons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-30.1.37.tgz", + "integrity": "sha512-bgPklX0jiaLESbWJDNx8f8PqVexwbRJHoz4kDgOJR4VN4JoOtC7Zw47Wb+eFwj13Ped1lTfuPfmU8sI1s5INeQ==", + "license": "SEE LICENSE IN license" + }, + "node_modules/@syncfusion/ej2-react-kanban/node_modules/@syncfusion/ej2-inputs": { + "version": "30.1.40", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-inputs/-/ej2-inputs-30.1.40.tgz", + "integrity": "sha512-qMbwX8x6s+pS4C9BKz6Dy9z7t+GYCSDvbJXVykvqmdpU54EjmIwb8l7LV9P2B4ooiXQ4QgkFf/CtGjP3z3H1yg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.38", + "@syncfusion/ej2-buttons": "~30.1.37", + "@syncfusion/ej2-popups": "~30.1.40", + "@syncfusion/ej2-splitbuttons": "~30.1.39" + } + }, + "node_modules/@syncfusion/ej2-react-kanban/node_modules/@syncfusion/ej2-kanban": { "version": "30.1.37", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-kanban/-/ej2-kanban-30.1.37.tgz", "integrity": "sha512-JiR7+CrLqaji0OaPx7BsvN/pM5hwWLMnJC9TPk6MbyMmsch8NlHBw+DMPl+0MbssNg2qFAoKmeOR6uNWv+EZvw==", @@ -1180,7 +2138,7 @@ "@syncfusion/ej2-popups": "~30.1.37" } }, - "node_modules/@syncfusion/ej2-layouts": { + "node_modules/@syncfusion/ej2-react-kanban/node_modules/@syncfusion/ej2-layouts": { "version": "30.1.40", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-layouts/-/ej2-layouts-30.1.40.tgz", "integrity": "sha512-PPv+brJOOkaMp+HZ7IDq7Tc8aYMYrpP7i0cp/b2W8fFTwcXoI06l4oRp65NAy1THnU82m2pRnbTETyrSDMu+TA==", @@ -1189,33 +2147,33 @@ "@syncfusion/ej2-base": "~30.1.38" } }, - "node_modules/@syncfusion/ej2-lists": { - "version": "30.1.37", - "resolved": "https://registry.npmjs.org/@syncfusion/ej2-lists/-/ej2-lists-30.1.37.tgz", - "integrity": "sha512-Tot/4yjBoBlCPr49EKPL/yDHFoPhHlgp3bK6+LG5jgThQE+guB5sSlqlNl3Noui25oMTRcXlt29SHZwstdpsNg==", + "node_modules/@syncfusion/ej2-react-kanban/node_modules/@syncfusion/ej2-lists": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-lists/-/ej2-lists-30.1.42.tgz", + "integrity": "sha512-rGRU3d6duWGPZ5wNqNEbg5RXMPmLcFgS/1+DpElpHgDxJrwckPF+KJVbysCDQDAwknn6S28Dtaezd9ffFQrp7w==", "license": "SEE LICENSE IN license", "dependencies": { - "@syncfusion/ej2-base": "~30.1.37", + "@syncfusion/ej2-base": "~30.1.42", "@syncfusion/ej2-buttons": "~30.1.37", - "@syncfusion/ej2-data": "~30.1.37", - "@syncfusion/ej2-popups": "~30.1.37" + "@syncfusion/ej2-data": "~30.1.40", + "@syncfusion/ej2-popups": "~30.1.42" } }, - "node_modules/@syncfusion/ej2-navigations": { - "version": "30.1.39", - "resolved": "https://registry.npmjs.org/@syncfusion/ej2-navigations/-/ej2-navigations-30.1.39.tgz", - "integrity": "sha512-mehYOsIcgGEMHbSwdnxxSqcPwhyQpVCJ6VgLESBikkTIww3NAFwRkhMcs4o4n0z+3KyySUVKNi1zU13mzlYkoQ==", + "node_modules/@syncfusion/ej2-react-kanban/node_modules/@syncfusion/ej2-navigations": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-navigations/-/ej2-navigations-30.1.42.tgz", + "integrity": "sha512-vIOSsvvR1s1Wf2/7TPheqkhMekH2rvynS6L+OTmlQmsDvaUYdfeuht3wAY/0MPJHHDYrjq5gHLvqVehAY7UuqA==", "license": "SEE LICENSE IN license", "dependencies": { - "@syncfusion/ej2-base": "~30.1.38", + "@syncfusion/ej2-base": "~30.1.42", "@syncfusion/ej2-buttons": "~30.1.37", - "@syncfusion/ej2-data": "~30.1.38", - "@syncfusion/ej2-inputs": "~30.1.38", - "@syncfusion/ej2-lists": "~30.1.37", - "@syncfusion/ej2-popups": "~30.1.37" + "@syncfusion/ej2-data": "~30.1.40", + "@syncfusion/ej2-inputs": "~30.1.40", + "@syncfusion/ej2-lists": "~30.1.42", + "@syncfusion/ej2-popups": "~30.1.42" } }, - "node_modules/@syncfusion/ej2-notifications": { + "node_modules/@syncfusion/ej2-react-kanban/node_modules/@syncfusion/ej2-notifications": { "version": "30.1.37", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-notifications/-/ej2-notifications-30.1.37.tgz", "integrity": "sha512-ksXk9lTf0Iw5+4EarYjxG1rKU+e9ZbCOaxvl/PN+MP1w1BAFwu4jRwpE9mbPF2FQUxcL1xNCxTnspSQaH36f4Q==", @@ -1226,109 +2184,24 @@ "@syncfusion/ej2-popups": "~30.1.37" } }, - "node_modules/@syncfusion/ej2-pdf-export": { - "version": "30.1.38", - "resolved": "https://registry.npmjs.org/@syncfusion/ej2-pdf-export/-/ej2-pdf-export-30.1.38.tgz", - "integrity": "sha512-iWgy/40rgKGweC3CJozn3MxcwKRg4OVoS7bnpkF+aDWFlJu4qV2bjZawacwASCitca+0jSs5aT7KOc24cmqJ4w==", + "node_modules/@syncfusion/ej2-react-kanban/node_modules/@syncfusion/ej2-popups": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-popups/-/ej2-popups-30.1.42.tgz", + "integrity": "sha512-lqaaaMfWH4gWy6aaEWHQx8NkGAN2VyYCu2BYxqox/PfaHIS1gI1zKOzNxAWZyF0OUvwG2dCGwvWOBdoWHNwAhg==", "license": "SEE LICENSE IN license", "dependencies": { - "@syncfusion/ej2-compression": "~30.1.37" - } - }, - "node_modules/@syncfusion/ej2-popups": { - "version": "30.1.37", - "resolved": "https://registry.npmjs.org/@syncfusion/ej2-popups/-/ej2-popups-30.1.37.tgz", - "integrity": "sha512-royzgtNf2BE330yBySDvLcnMHfDq1xxFKK4YocQJt5PAdYrm5mxIAmxrbbAO0LElI4GN0yQU8Xy4ne7VjqPzJg==", - "license": "SEE LICENSE IN license", - "dependencies": { - "@syncfusion/ej2-base": "~30.1.37", + "@syncfusion/ej2-base": "~30.1.42", "@syncfusion/ej2-buttons": "~30.1.37" } }, - "node_modules/@syncfusion/ej2-react-base": { - "version": "30.1.37", - "resolved": "https://registry.npmjs.org/@syncfusion/ej2-react-base/-/ej2-react-base-30.1.37.tgz", - "integrity": "sha512-9Mr+gGR9fb9ywlvXLU/sROH7qcQl/rnITR9wVndKtLP0kCULIAl0QVjaBP4krVIrV5rKIqpL4dEXOJhNVXwgNQ==", - "license": "SEE LICENSE IN license", - "dependencies": { - "@syncfusion/ej2-base": "~30.1.37" - } - }, - "node_modules/@syncfusion/ej2-react-buttons": { - "version": "30.1.37", - "resolved": "https://registry.npmjs.org/@syncfusion/ej2-react-buttons/-/ej2-react-buttons-30.1.37.tgz", - "integrity": "sha512-QWvVNwfDBk9bZTM1otAmjGK9b8GeA/d1+/Db6skgBDcVzyQUBh26rCJeKMKOnyg/8DratkUG1VdfuhKL5YAMvA==", - "license": "SEE LICENSE IN license", - "dependencies": { - "@syncfusion/ej2-base": "~30.1.37", - "@syncfusion/ej2-buttons": "30.1.37", - "@syncfusion/ej2-react-base": "~30.1.37" - } - }, - "node_modules/@syncfusion/ej2-react-calendars": { - "version": "30.1.37", - "resolved": "https://registry.npmjs.org/@syncfusion/ej2-react-calendars/-/ej2-react-calendars-30.1.37.tgz", - "integrity": "sha512-RDHxN2q1Pj+yIfZIm9qyFMvQdrpWXGXIh51o3CREKViD26R2ykh5WmI6JICvgp+Mru1VS3nEIzzsXEsIDrwoaw==", - "license": "SEE LICENSE IN license", - "dependencies": { - "@syncfusion/ej2-base": "~30.1.37", - "@syncfusion/ej2-calendars": "30.1.37", - "@syncfusion/ej2-react-base": "~30.1.37" - } - }, - "node_modules/@syncfusion/ej2-react-dropdowns": { - "version": "30.1.37", - "resolved": "https://registry.npmjs.org/@syncfusion/ej2-react-dropdowns/-/ej2-react-dropdowns-30.1.37.tgz", - "integrity": "sha512-4mgqlsC8T/9YVMCo1LZIZVUfVY3llv4hndm5MlYIOSaKeVqpfbu9iUvTOZdg4NIEruaK04BGnEemO0TZkMi4Rg==", - "license": "SEE LICENSE IN license", - "dependencies": { - "@syncfusion/ej2-base": "~30.1.37", - "@syncfusion/ej2-dropdowns": "30.1.37", - "@syncfusion/ej2-react-base": "~30.1.37" - } - }, - "node_modules/@syncfusion/ej2-react-filemanager": { - "version": "30.1.38", - "resolved": "https://registry.npmjs.org/@syncfusion/ej2-react-filemanager/-/ej2-react-filemanager-30.1.38.tgz", - "integrity": "sha512-xwq7J24oC7zoiuSQpBe1NWvdK/4zIFSZOXGfTapUdjdczcolC6d+s3AgGmJZLvR1rqdNCJE99m5DO0LiRnJz3A==", + "node_modules/@syncfusion/ej2-react-kanban/node_modules/@syncfusion/ej2-splitbuttons": { + "version": "30.1.41", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-splitbuttons/-/ej2-splitbuttons-30.1.41.tgz", + "integrity": "sha512-PV8oiXHUmTliEY3Lmr6+ecYc6JUhBYwxfA3VhQI750awlbtUDoesXM1mtzZ91uM+0a0Cogw1G3NNCsm3Q6l77g==", "license": "SEE LICENSE IN license", "dependencies": { "@syncfusion/ej2-base": "~30.1.38", - "@syncfusion/ej2-filemanager": "30.1.38", - "@syncfusion/ej2-react-base": "~30.1.37" - } - }, - "node_modules/@syncfusion/ej2-react-grids": { - "version": "30.1.40", - "resolved": "https://registry.npmjs.org/@syncfusion/ej2-react-grids/-/ej2-react-grids-30.1.40.tgz", - "integrity": "sha512-NaqR/r8yN1tomNkp4X5lUQe55wLmtKBvX2Qj0Sm6+SAb2taRR2v2MSKX+MHWToV1cGpUhmVDKo/PikbW98r2eA==", - "license": "SEE LICENSE IN license", - "dependencies": { - "@syncfusion/ej2-base": "~30.1.38", - "@syncfusion/ej2-grids": "30.1.40", - "@syncfusion/ej2-react-base": "~30.1.37" - } - }, - "node_modules/@syncfusion/ej2-react-inputs": { - "version": "30.1.38", - "resolved": "https://registry.npmjs.org/@syncfusion/ej2-react-inputs/-/ej2-react-inputs-30.1.38.tgz", - "integrity": "sha512-vJb0ZcPeGj9kSzybIde30msp8guCiWrAXtOu/LdTP/4oQwelmWpZHMy9zcsdhnTq5faW2cWZltNBZMnyQNT14Q==", - "license": "SEE LICENSE IN license", - "dependencies": { - "@syncfusion/ej2-base": "~30.1.38", - "@syncfusion/ej2-inputs": "30.1.38", - "@syncfusion/ej2-react-base": "~30.1.37" - } - }, - "node_modules/@syncfusion/ej2-react-kanban": { - "version": "30.1.37", - "resolved": "https://registry.npmjs.org/@syncfusion/ej2-react-kanban/-/ej2-react-kanban-30.1.37.tgz", - "integrity": "sha512-lcUwtLNBodSSHYQhYlG4ZiMt4kqQQLjoDBYuFu1GhDimshonwxkXEk+ekgPSHtgJFDJX5YEca/XT5jlm6gxBKw==", - "license": "SEE LICENSE IN license", - "dependencies": { - "@syncfusion/ej2-base": "~30.1.37", - "@syncfusion/ej2-kanban": "30.1.37", - "@syncfusion/ej2-react-base": "~30.1.37" + "@syncfusion/ej2-popups": "~30.1.37" } }, "node_modules/@syncfusion/ej2-react-layouts": { @@ -1342,6 +2215,33 @@ "@syncfusion/ej2-react-base": "~30.1.37" } }, + "node_modules/@syncfusion/ej2-react-layouts/node_modules/@syncfusion/ej2-base": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-30.1.42.tgz", + "integrity": "sha512-PQm14uiirN2vdlbygyYb960+ELRy/f92lxC4E9GWpVSnOt/18C5ZZJSMmC1sjE2axqhHWM8JS9gFQ7OXB5FHIw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-icons": "~30.1.37" + }, + "bin": { + "syncfusion-license": "bin/syncfusion-license.js" + } + }, + "node_modules/@syncfusion/ej2-react-layouts/node_modules/@syncfusion/ej2-icons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-30.1.37.tgz", + "integrity": "sha512-bgPklX0jiaLESbWJDNx8f8PqVexwbRJHoz4kDgOJR4VN4JoOtC7Zw47Wb+eFwj13Ped1lTfuPfmU8sI1s5INeQ==", + "license": "SEE LICENSE IN license" + }, + "node_modules/@syncfusion/ej2-react-layouts/node_modules/@syncfusion/ej2-layouts": { + "version": "30.1.40", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-layouts/-/ej2-layouts-30.1.40.tgz", + "integrity": "sha512-PPv+brJOOkaMp+HZ7IDq7Tc8aYMYrpP7i0cp/b2W8fFTwcXoI06l4oRp65NAy1THnU82m2pRnbTETyrSDMu+TA==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.38" + } + }, "node_modules/@syncfusion/ej2-react-navigations": { "version": "30.1.39", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-react-navigations/-/ej2-react-navigations-30.1.39.tgz", @@ -1353,6 +2253,91 @@ "@syncfusion/ej2-react-base": "~30.1.37" } }, + "node_modules/@syncfusion/ej2-react-navigations/node_modules/@syncfusion/ej2-base": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-30.1.42.tgz", + "integrity": "sha512-PQm14uiirN2vdlbygyYb960+ELRy/f92lxC4E9GWpVSnOt/18C5ZZJSMmC1sjE2axqhHWM8JS9gFQ7OXB5FHIw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-icons": "~30.1.37" + }, + "bin": { + "syncfusion-license": "bin/syncfusion-license.js" + } + }, + "node_modules/@syncfusion/ej2-react-navigations/node_modules/@syncfusion/ej2-buttons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-buttons/-/ej2-buttons-30.1.37.tgz", + "integrity": "sha512-31dPIDSkraFlR8+sCz2NtM1tg9TSBN2YRHC7mBZGDWX6B26ie4zbe63S22l0ytaoMDt3XHqExsk7MLlnG3LR8g==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-navigations/node_modules/@syncfusion/ej2-icons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-30.1.37.tgz", + "integrity": "sha512-bgPklX0jiaLESbWJDNx8f8PqVexwbRJHoz4kDgOJR4VN4JoOtC7Zw47Wb+eFwj13Ped1lTfuPfmU8sI1s5INeQ==", + "license": "SEE LICENSE IN license" + }, + "node_modules/@syncfusion/ej2-react-navigations/node_modules/@syncfusion/ej2-inputs": { + "version": "30.1.40", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-inputs/-/ej2-inputs-30.1.40.tgz", + "integrity": "sha512-qMbwX8x6s+pS4C9BKz6Dy9z7t+GYCSDvbJXVykvqmdpU54EjmIwb8l7LV9P2B4ooiXQ4QgkFf/CtGjP3z3H1yg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.38", + "@syncfusion/ej2-buttons": "~30.1.37", + "@syncfusion/ej2-popups": "~30.1.40", + "@syncfusion/ej2-splitbuttons": "~30.1.39" + } + }, + "node_modules/@syncfusion/ej2-react-navigations/node_modules/@syncfusion/ej2-lists": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-lists/-/ej2-lists-30.1.42.tgz", + "integrity": "sha512-rGRU3d6duWGPZ5wNqNEbg5RXMPmLcFgS/1+DpElpHgDxJrwckPF+KJVbysCDQDAwknn6S28Dtaezd9ffFQrp7w==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.42", + "@syncfusion/ej2-buttons": "~30.1.37", + "@syncfusion/ej2-data": "~30.1.40", + "@syncfusion/ej2-popups": "~30.1.42" + } + }, + "node_modules/@syncfusion/ej2-react-navigations/node_modules/@syncfusion/ej2-navigations": { + "version": "30.1.39", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-navigations/-/ej2-navigations-30.1.39.tgz", + "integrity": "sha512-mehYOsIcgGEMHbSwdnxxSqcPwhyQpVCJ6VgLESBikkTIww3NAFwRkhMcs4o4n0z+3KyySUVKNi1zU13mzlYkoQ==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.38", + "@syncfusion/ej2-buttons": "~30.1.37", + "@syncfusion/ej2-data": "~30.1.38", + "@syncfusion/ej2-inputs": "~30.1.38", + "@syncfusion/ej2-lists": "~30.1.37", + "@syncfusion/ej2-popups": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-navigations/node_modules/@syncfusion/ej2-popups": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-popups/-/ej2-popups-30.1.42.tgz", + "integrity": "sha512-lqaaaMfWH4gWy6aaEWHQx8NkGAN2VyYCu2BYxqox/PfaHIS1gI1zKOzNxAWZyF0OUvwG2dCGwvWOBdoWHNwAhg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.42", + "@syncfusion/ej2-buttons": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-navigations/node_modules/@syncfusion/ej2-splitbuttons": { + "version": "30.1.41", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-splitbuttons/-/ej2-splitbuttons-30.1.41.tgz", + "integrity": "sha512-PV8oiXHUmTliEY3Lmr6+ecYc6JUhBYwxfA3VhQI750awlbtUDoesXM1mtzZ91uM+0a0Cogw1G3NNCsm3Q6l77g==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.38", + "@syncfusion/ej2-popups": "~30.1.37" + } + }, "node_modules/@syncfusion/ej2-react-notifications": { "version": "30.1.37", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-react-notifications/-/ej2-react-notifications-30.1.37.tgz", @@ -1364,6 +2349,54 @@ "@syncfusion/ej2-react-base": "~30.1.37" } }, + "node_modules/@syncfusion/ej2-react-notifications/node_modules/@syncfusion/ej2-base": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-30.1.42.tgz", + "integrity": "sha512-PQm14uiirN2vdlbygyYb960+ELRy/f92lxC4E9GWpVSnOt/18C5ZZJSMmC1sjE2axqhHWM8JS9gFQ7OXB5FHIw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-icons": "~30.1.37" + }, + "bin": { + "syncfusion-license": "bin/syncfusion-license.js" + } + }, + "node_modules/@syncfusion/ej2-react-notifications/node_modules/@syncfusion/ej2-buttons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-buttons/-/ej2-buttons-30.1.37.tgz", + "integrity": "sha512-31dPIDSkraFlR8+sCz2NtM1tg9TSBN2YRHC7mBZGDWX6B26ie4zbe63S22l0ytaoMDt3XHqExsk7MLlnG3LR8g==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-notifications/node_modules/@syncfusion/ej2-icons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-30.1.37.tgz", + "integrity": "sha512-bgPklX0jiaLESbWJDNx8f8PqVexwbRJHoz4kDgOJR4VN4JoOtC7Zw47Wb+eFwj13Ped1lTfuPfmU8sI1s5INeQ==", + "license": "SEE LICENSE IN license" + }, + "node_modules/@syncfusion/ej2-react-notifications/node_modules/@syncfusion/ej2-notifications": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-notifications/-/ej2-notifications-30.1.37.tgz", + "integrity": "sha512-ksXk9lTf0Iw5+4EarYjxG1rKU+e9ZbCOaxvl/PN+MP1w1BAFwu4jRwpE9mbPF2FQUxcL1xNCxTnspSQaH36f4Q==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.37", + "@syncfusion/ej2-buttons": "~30.1.37", + "@syncfusion/ej2-popups": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-notifications/node_modules/@syncfusion/ej2-popups": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-popups/-/ej2-popups-30.1.42.tgz", + "integrity": "sha512-lqaaaMfWH4gWy6aaEWHQx8NkGAN2VyYCu2BYxqox/PfaHIS1gI1zKOzNxAWZyF0OUvwG2dCGwvWOBdoWHNwAhg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.42", + "@syncfusion/ej2-buttons": "~30.1.37" + } + }, "node_modules/@syncfusion/ej2-react-popups": { "version": "30.1.37", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-react-popups/-/ej2-react-popups-30.1.37.tgz", @@ -1375,6 +2408,43 @@ "@syncfusion/ej2-react-base": "~30.1.37" } }, + "node_modules/@syncfusion/ej2-react-popups/node_modules/@syncfusion/ej2-base": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-30.1.42.tgz", + "integrity": "sha512-PQm14uiirN2vdlbygyYb960+ELRy/f92lxC4E9GWpVSnOt/18C5ZZJSMmC1sjE2axqhHWM8JS9gFQ7OXB5FHIw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-icons": "~30.1.37" + }, + "bin": { + "syncfusion-license": "bin/syncfusion-license.js" + } + }, + "node_modules/@syncfusion/ej2-react-popups/node_modules/@syncfusion/ej2-buttons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-buttons/-/ej2-buttons-30.1.37.tgz", + "integrity": "sha512-31dPIDSkraFlR8+sCz2NtM1tg9TSBN2YRHC7mBZGDWX6B26ie4zbe63S22l0ytaoMDt3XHqExsk7MLlnG3LR8g==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-react-popups/node_modules/@syncfusion/ej2-icons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-30.1.37.tgz", + "integrity": "sha512-bgPklX0jiaLESbWJDNx8f8PqVexwbRJHoz4kDgOJR4VN4JoOtC7Zw47Wb+eFwj13Ped1lTfuPfmU8sI1s5INeQ==", + "license": "SEE LICENSE IN license" + }, + "node_modules/@syncfusion/ej2-react-popups/node_modules/@syncfusion/ej2-popups": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-popups/-/ej2-popups-30.1.37.tgz", + "integrity": "sha512-royzgtNf2BE330yBySDvLcnMHfDq1xxFKK4YocQJt5PAdYrm5mxIAmxrbbAO0LElI4GN0yQU8Xy4ne7VjqPzJg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.37", + "@syncfusion/ej2-buttons": "~30.1.37" + } + }, "node_modules/@syncfusion/ej2-react-schedule": { "version": "30.1.37", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-react-schedule/-/ej2-react-schedule-30.1.37.tgz", @@ -1386,6 +2456,24 @@ "@syncfusion/ej2-schedule": "30.1.37" } }, + "node_modules/@syncfusion/ej2-react-schedule/node_modules/@syncfusion/ej2-base": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-30.1.42.tgz", + "integrity": "sha512-PQm14uiirN2vdlbygyYb960+ELRy/f92lxC4E9GWpVSnOt/18C5ZZJSMmC1sjE2axqhHWM8JS9gFQ7OXB5FHIw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-icons": "~30.1.37" + }, + "bin": { + "syncfusion-license": "bin/syncfusion-license.js" + } + }, + "node_modules/@syncfusion/ej2-react-schedule/node_modules/@syncfusion/ej2-icons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-30.1.37.tgz", + "integrity": "sha512-bgPklX0jiaLESbWJDNx8f8PqVexwbRJHoz4kDgOJR4VN4JoOtC7Zw47Wb+eFwj13Ped1lTfuPfmU8sI1s5INeQ==", + "license": "SEE LICENSE IN license" + }, "node_modules/@syncfusion/ej2-schedule": { "version": "30.1.37", "resolved": "https://registry.npmjs.org/@syncfusion/ej2-schedule/-/ej2-schedule-30.1.37.tgz", @@ -1404,16 +2492,140 @@ "@syncfusion/ej2-popups": "~30.1.37" } }, - "node_modules/@syncfusion/ej2-splitbuttons": { - "version": "30.1.39", - "resolved": "https://registry.npmjs.org/@syncfusion/ej2-splitbuttons/-/ej2-splitbuttons-30.1.39.tgz", - "integrity": "sha512-MViD8imxEHukX7tvtHWquc76+pL95NB86YPUFb2lx3gxwLUBTIA/KVS2ZmAlQXYaFI7RZQPGopgIbwfb/Zhz5A==", + "node_modules/@syncfusion/ej2-schedule/node_modules/@syncfusion/ej2-base": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-base/-/ej2-base-30.1.42.tgz", + "integrity": "sha512-PQm14uiirN2vdlbygyYb960+ELRy/f92lxC4E9GWpVSnOt/18C5ZZJSMmC1sjE2axqhHWM8JS9gFQ7OXB5FHIw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-icons": "~30.1.37" + }, + "bin": { + "syncfusion-license": "bin/syncfusion-license.js" + } + }, + "node_modules/@syncfusion/ej2-schedule/node_modules/@syncfusion/ej2-buttons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-buttons/-/ej2-buttons-30.1.37.tgz", + "integrity": "sha512-31dPIDSkraFlR8+sCz2NtM1tg9TSBN2YRHC7mBZGDWX6B26ie4zbe63S22l0ytaoMDt3XHqExsk7MLlnG3LR8g==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-schedule/node_modules/@syncfusion/ej2-calendars": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-calendars/-/ej2-calendars-30.1.37.tgz", + "integrity": "sha512-9g41zBRizXilbRJWHJgqRYJPpX0WJF5qJwGNpgvsBnyYdolYQy///x6c3oYo9W6YG28N0QDavdbOaxwprj4ghg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.37", + "@syncfusion/ej2-buttons": "~30.1.37", + "@syncfusion/ej2-inputs": "~30.1.37", + "@syncfusion/ej2-lists": "~30.1.37", + "@syncfusion/ej2-popups": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-schedule/node_modules/@syncfusion/ej2-dropdowns": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-dropdowns/-/ej2-dropdowns-30.1.42.tgz", + "integrity": "sha512-Ya4m6SVX2yrkcWaVsJ67Pe1DVmwO3d8za285xs+HU+dujjD2L/EjYzrbwxG2gcIcpKXY9GXaVujH7DABgPQ4Dw==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.42", + "@syncfusion/ej2-data": "~30.1.40", + "@syncfusion/ej2-inputs": "~30.1.40", + "@syncfusion/ej2-lists": "~30.1.42", + "@syncfusion/ej2-navigations": "~30.1.42", + "@syncfusion/ej2-notifications": "~30.1.37", + "@syncfusion/ej2-popups": "~30.1.42" + } + }, + "node_modules/@syncfusion/ej2-schedule/node_modules/@syncfusion/ej2-icons": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-icons/-/ej2-icons-30.1.37.tgz", + "integrity": "sha512-bgPklX0jiaLESbWJDNx8f8PqVexwbRJHoz4kDgOJR4VN4JoOtC7Zw47Wb+eFwj13Ped1lTfuPfmU8sI1s5INeQ==", + "license": "SEE LICENSE IN license" + }, + "node_modules/@syncfusion/ej2-schedule/node_modules/@syncfusion/ej2-inputs": { + "version": "30.1.40", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-inputs/-/ej2-inputs-30.1.40.tgz", + "integrity": "sha512-qMbwX8x6s+pS4C9BKz6Dy9z7t+GYCSDvbJXVykvqmdpU54EjmIwb8l7LV9P2B4ooiXQ4QgkFf/CtGjP3z3H1yg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.38", + "@syncfusion/ej2-buttons": "~30.1.37", + "@syncfusion/ej2-popups": "~30.1.40", + "@syncfusion/ej2-splitbuttons": "~30.1.39" + } + }, + "node_modules/@syncfusion/ej2-schedule/node_modules/@syncfusion/ej2-lists": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-lists/-/ej2-lists-30.1.42.tgz", + "integrity": "sha512-rGRU3d6duWGPZ5wNqNEbg5RXMPmLcFgS/1+DpElpHgDxJrwckPF+KJVbysCDQDAwknn6S28Dtaezd9ffFQrp7w==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.42", + "@syncfusion/ej2-buttons": "~30.1.37", + "@syncfusion/ej2-data": "~30.1.40", + "@syncfusion/ej2-popups": "~30.1.42" + } + }, + "node_modules/@syncfusion/ej2-schedule/node_modules/@syncfusion/ej2-navigations": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-navigations/-/ej2-navigations-30.1.42.tgz", + "integrity": "sha512-vIOSsvvR1s1Wf2/7TPheqkhMekH2rvynS6L+OTmlQmsDvaUYdfeuht3wAY/0MPJHHDYrjq5gHLvqVehAY7UuqA==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.42", + "@syncfusion/ej2-buttons": "~30.1.37", + "@syncfusion/ej2-data": "~30.1.40", + "@syncfusion/ej2-inputs": "~30.1.40", + "@syncfusion/ej2-lists": "~30.1.42", + "@syncfusion/ej2-popups": "~30.1.42" + } + }, + "node_modules/@syncfusion/ej2-schedule/node_modules/@syncfusion/ej2-notifications": { + "version": "30.1.37", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-notifications/-/ej2-notifications-30.1.37.tgz", + "integrity": "sha512-ksXk9lTf0Iw5+4EarYjxG1rKU+e9ZbCOaxvl/PN+MP1w1BAFwu4jRwpE9mbPF2FQUxcL1xNCxTnspSQaH36f4Q==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.37", + "@syncfusion/ej2-buttons": "~30.1.37", + "@syncfusion/ej2-popups": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-schedule/node_modules/@syncfusion/ej2-popups": { + "version": "30.1.42", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-popups/-/ej2-popups-30.1.42.tgz", + "integrity": "sha512-lqaaaMfWH4gWy6aaEWHQx8NkGAN2VyYCu2BYxqox/PfaHIS1gI1zKOzNxAWZyF0OUvwG2dCGwvWOBdoWHNwAhg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.1.42", + "@syncfusion/ej2-buttons": "~30.1.37" + } + }, + "node_modules/@syncfusion/ej2-schedule/node_modules/@syncfusion/ej2-splitbuttons": { + "version": "30.1.41", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-splitbuttons/-/ej2-splitbuttons-30.1.41.tgz", + "integrity": "sha512-PV8oiXHUmTliEY3Lmr6+ecYc6JUhBYwxfA3VhQI750awlbtUDoesXM1mtzZ91uM+0a0Cogw1G3NNCsm3Q6l77g==", "license": "SEE LICENSE IN license", "dependencies": { "@syncfusion/ej2-base": "~30.1.38", "@syncfusion/ej2-popups": "~30.1.37" } }, + "node_modules/@syncfusion/ej2-splitbuttons": { + "version": "30.2.4", + "resolved": "https://registry.npmjs.org/@syncfusion/ej2-splitbuttons/-/ej2-splitbuttons-30.2.4.tgz", + "integrity": "sha512-9p0wMvNgZtcHJbwGh/RxLpEtu4AioqooO2d/aW72FufeSniR3/31fwSKBOzOu4EvR7EaYGXAnVxrmHTEojzlRg==", + "license": "SEE LICENSE IN license", + "dependencies": { + "@syncfusion/ej2-base": "~30.2.4", + "@syncfusion/ej2-popups": "~30.2.4" + } + }, "node_modules/@tailwindcss/aspect-ratio": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/@tailwindcss/aspect-ratio/-/aspect-ratio-0.4.2.tgz", diff --git a/dashboard/public/program-info.json b/dashboard/public/program-info.json index 48c155e..22f4170 100644 --- a/dashboard/public/program-info.json +++ b/dashboard/public/program-info.json @@ -31,6 +31,13 @@ "commitId": "a1b2c3d4e5f6" }, "changelog": [ + { + "version": "2025.1.0-alpha.4", + "date": "2025-09-01", + "changes": [ + "Grundstruktur für Deployment getestet und optimiert." + ] + }, { "version": "2025.1.0-alpha.3", "date": "2025-08-30", diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 4ebd11f..e208541 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -123,21 +123,18 @@ services: - infoscreen-net scheduler: - image: ghcr.io/robbstarkaustria/infoscreen-scheduler:latest # Oder wo auch immer Ihre Images liegen + image: ghcr.io/robbstarkaustria/infoscreen-scheduler:latest container_name: infoscreen-scheduler restart: unless-stopped depends_on: + # HINZUGEFÜGT: Stellt sicher, dass die DB vor dem Scheduler startet db: condition: service_healthy mqtt: condition: service_healthy environment: + # HINZUGEFÜGT: Datenbank-Verbindungsstring DB_CONN: "mysql+pymysql://${DB_USER}:${DB_PASSWORD}@db/${DB_NAME}" - DB_USER: ${DB_USER} - DB_PASSWORD: ${DB_PASSWORD} - DB_NAME: ${DB_NAME} - DB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} - MQTT_BROKER_URL: mqtt MQTT_PORT: 1883 networks: - infoscreen-net diff --git a/docker-compose.yml b/docker-compose.yml index 77a24b5..87a3bb9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,8 +5,8 @@ networks: services: listener: build: - context: ./listener - dockerfile: Dockerfile + context: . + dockerfile: listener/Dockerfile image: infoscreen-listener:latest container_name: infoscreen-listener restart: unless-stopped @@ -16,6 +16,7 @@ services: mqtt: condition: service_healthy environment: + - DB_CONN=mysql+pymysql://${DB_USER}:${DB_PASSWORD}@db/${DB_NAME} - DB_URL=mysql+pymysql://${DB_USER}:${DB_PASSWORD}@db/${DB_NAME} # 🔧 ENTFERNT: Volume-Mount ist nur für die Entwicklung networks: @@ -80,8 +81,8 @@ services: server: build: - context: ./server - dockerfile: Dockerfile + context: . + dockerfile: server/Dockerfile image: infoscreen-api:latest container_name: infoscreen-api restart: unless-stopped @@ -111,8 +112,8 @@ services: # ✅ GEÄNDERT: Dashboard jetzt mit Node.js/React statt Python/Dash dashboard: build: - context: ./dashboard - dockerfile: Dockerfile + context: . + dockerfile: dashboard/Dockerfile # 🔧 VEREINFACHT: Build-Args werden durch Umgebungsvariablen gesetzt args: - VITE_API_URL=${API_URL} @@ -140,22 +141,23 @@ services: scheduler: build: - context: ./scheduler - dockerfile: Dockerfile + dockerfile: scheduler/Dockerfile image: infoscreen-scheduler:latest container_name: infoscreen-scheduler restart: unless-stopped depends_on: + # HINZUGEFÜGT: Stellt sicher, dass die DB vor dem Scheduler startet db: condition: service_healthy mqtt: condition: service_healthy environment: - DB_CONN: "mysql+pymysql://${DB_USER}:${DB_PASSWORD}@db/${DB_NAME}" - MQTT_BROKER_URL: mqtt - MQTT_PORT: 1883 + # HINZUGEFÜGT: Datenbank-Verbindungsstring + - DB_CONN=mysql+pymysql://${DB_USER}:${DB_PASSWORD}@db/${DB_NAME} + - MQTT_PORT=1883 networks: - infoscreen-net volumes: - db-data: + server-pip-cache: + db-data: diff --git a/listener/listener.py b/listener/listener.py index 0175195..d0d87b6 100644 --- a/listener/listener.py +++ b/listener/listener.py @@ -50,32 +50,35 @@ def on_message(client, userdata, msg): # Discovery-Handling payload = json.loads(msg.payload.decode()) logging.info(f"Discovery empfangen: {payload}") - session = Session() - existing = session.query(Client).filter_by( - uuid=payload["uuid"]).first() - if not existing: - new_client = Client( - uuid=payload.get("uuid"), - hardware_token=payload.get("hardware_token"), - ip=payload.get("ip"), - type=payload.get("type"), - hostname=payload.get("hostname"), - os_version=payload.get("os_version"), - software_version=payload.get("software_version"), - macs=",".join(payload.get("macs", [])), - model=payload.get("model"), - registration_time=datetime.datetime.now(datetime.UTC), - ) - session.add(new_client) - session.commit() - logging.info(f"Neuer Client registriert: {payload['uuid']}") + if "uuid" in payload: + uuid = payload["uuid"] + session = Session() + existing = session.query(Client).filter_by(uuid=uuid).first() + if not existing: + new_client = Client( + uuid=uuid, + hardware_token=payload.get("hardware_token"), + ip=payload.get("ip"), + type=payload.get("type"), + hostname=payload.get("hostname"), + os_version=payload.get("os_version"), + software_version=payload.get("software_version"), + macs=",".join(payload.get("macs", [])), + model=payload.get("model"), + registration_time=datetime.datetime.now(datetime.UTC), + ) + session.add(new_client) + session.commit() + logging.info(f"Neuer Client registriert: {uuid}") + else: + logging.info(f"Client bereits bekannt: {uuid}") + session.close() + # Discovery-ACK senden + ack_topic = f"infoscreen/{uuid}/discovery_ack" + client.publish(ack_topic, json.dumps({"status": "ok"})) + logging.info(f"Discovery-ACK gesendet an {ack_topic}") else: - logging.info(f"Client bereits bekannt: {payload['uuid']}") - session.close() - # Discovery-ACK senden - ack_topic = f"infoscreen/{payload['uuid']}/discovery_ack" - client.publish(ack_topic, json.dumps({"status": "ok"})) - logging.info(f"Discovery-ACK gesendet an {ack_topic}") + logging.warning("Discovery ohne UUID empfangen, ignoriert.") except Exception as e: logging.error(f"Fehler bei Verarbeitung: {e}") diff --git a/scheduler/Dockerfile b/scheduler/Dockerfile index 78e2653..605f7fb 100644 --- a/scheduler/Dockerfile +++ b/scheduler/Dockerfile @@ -5,4 +5,4 @@ RUN pip install --no-cache-dir -r requirements.txt COPY scheduler/ ./scheduler COPY models/ ./models ENV PYTHONPATH=/app -CMD ["python", "scheduler/scheduler.py"] +CMD ["python", "-m", "scheduler.scheduler"] diff --git a/scheduler/scheduler.py b/scheduler/scheduler.py index 266417f..6f6a37e 100644 --- a/scheduler/scheduler.py +++ b/scheduler/scheduler.py @@ -2,7 +2,7 @@ import os import logging -from db_utils import get_active_events +from .db_utils import get_active_events import paho.mqtt.client as mqtt import json import datetime diff --git a/server/Dockerfile.dev b/server/Dockerfile.dev index 87b1780..0c7220f 100644 --- a/server/Dockerfile.dev +++ b/server/Dockerfile.dev @@ -20,16 +20,16 @@ ENV LANG=de_DE.UTF-8 \ LC_ALL=de_DE.UTF-8 # Setze das Arbeitsverzeichnis auf den Workspace-Root, passend zu den Mounts. -WORKDIR /workspace +WORKDIR /app # Kopiere die Anforderungsdateien in das korrekte Unterverzeichnis. # ✅ KORRIGIERT: Pfade sind jetzt relativ zum Build-Kontext (dem 'server'-Verzeichnis) -COPY requirements.txt requirements-dev.txt ./ +COPY server/requirements.txt server/requirements-dev.txt ./server/ # Installiere die Python-Abhängigkeiten RUN pip install --upgrade pip \ - && pip install --no-cache-dir -r requirements.txt \ - && pip install --no-cache-dir -r requirements-dev.txt + && pip install --no-cache-dir -r server/requirements.txt \ + && pip install --no-cache-dir -r server/requirements-dev.txt # Das Kopieren des Codes ist nicht nötig, da das Verzeichnis gemountet wird.