From 2372083afeff4e8ab86c08b34dcb69e669a7f6a9 Mon Sep 17 00:00:00 2001 From: andrei Date: Mon, 17 Mar 2025 15:19:04 +0500 Subject: [PATCH] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=B0=D1=80=D1=85=D0=B8=D1=82=D0=B5=D0=BA=D1=82=D1=83=D1=80?= =?UTF-8?q?=D1=83=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D1=81=20api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/app/main.py | 8 +- web-app/package-lock.json | 1446 ++++++----------- web-app/package.json | 1 + web-app/src/App.jsx | 10 +- web-app/src/AppRouter.jsx | 2 +- web-app/src/AuthContext.jsx | 24 +- .../api/appointments/GetAllAppointments.jsx | 21 - .../api/appointments/getAllAppointments.jsx | 8 + web-app/src/api/auth/LoginRequest.jsx | 19 - web-app/src/api/auth/loginRequest.jsx | 14 + web-app/src/api/lens_issues/AddLensIssue.jsx | 21 - .../src/api/lens_issues/GetAllLensIssues.jsx | 21 - web-app/src/api/lens_issues/addLensIssue.jsx | 8 + .../src/api/lens_issues/getAllLensIssues.jsx | 8 + .../src/api/lens_types/GetAllLensTypes.jsx | 21 - .../src/api/lens_types/getAllLensTypes.jsx | 8 + web-app/src/api/lenses/AddLens.jsx | 21 - web-app/src/api/lenses/DeleteLens.jsx | 21 - web-app/src/api/lenses/GetAllLenses.jsx | 20 - web-app/src/api/lenses/GetNotIssuedLenses.jsx | 20 - web-app/src/api/lenses/UpdateLens.jsx | 21 - web-app/src/api/lenses/addLens.jsx | 8 + web-app/src/api/lenses/deleteLens.jsx | 8 + web-app/src/api/lenses/getAllLenses.jsx | 8 + web-app/src/api/lenses/getNotIssuedLenses.jsx | 8 + web-app/src/api/lenses/updateLens.jsx | 8 + web-app/src/api/patients/AddPatient.jsx | 21 - web-app/src/api/patients/DeletePatient.jsx | 22 - web-app/src/api/patients/GetAllPatients.jsx | 21 - web-app/src/api/patients/UpdatePatient.jsx | 21 - web-app/src/api/patients/addPatient.jsx | 8 + web-app/src/api/patients/deletePatient.jsx | 8 + web-app/src/api/patients/getAllPatients.jsx | 8 + web-app/src/api/patients/updatePatient.jsx | 8 + .../getAllScheduledAppointments.jsx | 8 + web-app/src/api/set_content/AddSetContent.jsx | 21 - .../api/set_content/GetSetContentBySetId.jsx | 21 - .../src/api/set_content/UpdateSetContent.jsx | 21 - web-app/src/api/set_content/addSetContent.jsx | 8 + .../api/set_content/getSetContentBySetId.jsx | 8 + .../src/api/set_content/updateSetContent.jsx | 8 + web-app/src/api/sets/AddSet.jsx | 21 - web-app/src/api/sets/AppendLensesFromSet.jsx | 21 - web-app/src/api/sets/DeleteSet.jsx | 20 - web-app/src/api/sets/GetAllSets.jsx | 20 - web-app/src/api/sets/UpdateSet.jsx | 21 - web-app/src/api/sets/addSet.jsx | 8 + web-app/src/api/sets/appendLensesFromSet.jsx | 8 + web-app/src/api/sets/deleteSet.jsx | 8 + web-app/src/api/sets/getAllSets.jsx | 8 + web-app/src/api/sets/updateSet.jsx | 8 + web-app/src/components/LoadingIndicator.jsx | 18 + web-app/src/components/PrivateRoute.jsx | 1 + web-app/src/components/SelectViewMode.jsx | 3 +- .../lens_issues/LensIssueFormModal.jsx | 338 ++-- .../src/components/lenses/LensFormModal.jsx | 20 +- web-app/src/components/sets/SetFormModal.jsx | 11 +- web-app/src/components/sets/SetListCard.jsx | 1 - web-app/src/core/axiosConfig.jsx | 58 + web-app/src/core/{Config.jsx => сonfig.jsx} | 0 web-app/src/layouts/AppointmentsLayout.jsx | 192 ++- web-app/src/pages/IssuesPage.jsx | 29 +- web-app/src/pages/PatientsPage.jsx | 50 +- .../AppointmentsCalendarPage.jsx | 152 +- .../AppointmentsTablePage.jsx | 50 +- .../src/pages/lenses_layout/LensesPage.jsx | 37 +- .../src/pages/lenses_layout/SetLensesPage.jsx | 60 +- web-app/src/styles/app.css | 1 + web-app/src/utils/cachedInfoUtils.jsx | 18 + 69 files changed, 1371 insertions(+), 1806 deletions(-) delete mode 100644 web-app/src/api/appointments/GetAllAppointments.jsx create mode 100644 web-app/src/api/appointments/getAllAppointments.jsx delete mode 100644 web-app/src/api/auth/LoginRequest.jsx create mode 100644 web-app/src/api/auth/loginRequest.jsx delete mode 100644 web-app/src/api/lens_issues/AddLensIssue.jsx delete mode 100644 web-app/src/api/lens_issues/GetAllLensIssues.jsx create mode 100644 web-app/src/api/lens_issues/addLensIssue.jsx create mode 100644 web-app/src/api/lens_issues/getAllLensIssues.jsx delete mode 100644 web-app/src/api/lens_types/GetAllLensTypes.jsx create mode 100644 web-app/src/api/lens_types/getAllLensTypes.jsx delete mode 100644 web-app/src/api/lenses/AddLens.jsx delete mode 100644 web-app/src/api/lenses/DeleteLens.jsx delete mode 100644 web-app/src/api/lenses/GetAllLenses.jsx delete mode 100644 web-app/src/api/lenses/GetNotIssuedLenses.jsx delete mode 100644 web-app/src/api/lenses/UpdateLens.jsx create mode 100644 web-app/src/api/lenses/addLens.jsx create mode 100644 web-app/src/api/lenses/deleteLens.jsx create mode 100644 web-app/src/api/lenses/getAllLenses.jsx create mode 100644 web-app/src/api/lenses/getNotIssuedLenses.jsx create mode 100644 web-app/src/api/lenses/updateLens.jsx delete mode 100644 web-app/src/api/patients/AddPatient.jsx delete mode 100644 web-app/src/api/patients/DeletePatient.jsx delete mode 100644 web-app/src/api/patients/GetAllPatients.jsx delete mode 100644 web-app/src/api/patients/UpdatePatient.jsx create mode 100644 web-app/src/api/patients/addPatient.jsx create mode 100644 web-app/src/api/patients/deletePatient.jsx create mode 100644 web-app/src/api/patients/getAllPatients.jsx create mode 100644 web-app/src/api/patients/updatePatient.jsx create mode 100644 web-app/src/api/scheduled_appointments/getAllScheduledAppointments.jsx delete mode 100644 web-app/src/api/set_content/AddSetContent.jsx delete mode 100644 web-app/src/api/set_content/GetSetContentBySetId.jsx delete mode 100644 web-app/src/api/set_content/UpdateSetContent.jsx create mode 100644 web-app/src/api/set_content/addSetContent.jsx create mode 100644 web-app/src/api/set_content/getSetContentBySetId.jsx create mode 100644 web-app/src/api/set_content/updateSetContent.jsx delete mode 100644 web-app/src/api/sets/AddSet.jsx delete mode 100644 web-app/src/api/sets/AppendLensesFromSet.jsx delete mode 100644 web-app/src/api/sets/DeleteSet.jsx delete mode 100644 web-app/src/api/sets/GetAllSets.jsx delete mode 100644 web-app/src/api/sets/UpdateSet.jsx create mode 100644 web-app/src/api/sets/addSet.jsx create mode 100644 web-app/src/api/sets/appendLensesFromSet.jsx create mode 100644 web-app/src/api/sets/deleteSet.jsx create mode 100644 web-app/src/api/sets/getAllSets.jsx create mode 100644 web-app/src/api/sets/updateSet.jsx create mode 100644 web-app/src/components/LoadingIndicator.jsx create mode 100644 web-app/src/core/axiosConfig.jsx rename web-app/src/core/{Config.jsx => сonfig.jsx} (100%) create mode 100644 web-app/src/utils/cachedInfoUtils.jsx diff --git a/api/app/main.py b/api/app/main.py index 1d84a30..744f8ff 100644 --- a/api/app/main.py +++ b/api/app/main.py @@ -20,21 +20,21 @@ def start_app(): api_app.add_middleware( CORSMiddleware, - allow_origins=['*'], + allow_origins=['http://localhost:5173'], allow_credentials=True, - allow_methods=['GET', 'POST', 'PUT', 'DELETE'], + allow_methods=['*'], allow_headers=['*'], ) api_app.include_router(appointments_types_router, prefix=f'{settings.APP_PREFIX}/appointment_types', tags=['appointment_types']) api_app.include_router(appointment_router, prefix=f'{settings.APP_PREFIX}/appointments', tags=['appointments']) api_app.include_router(auth_router, prefix=settings.APP_PREFIX, tags=['auth']) - api_app.include_router(lens_issues_router, prefix=f'{settings.APP_PREFIX}/lens_issue', tags=['lens_issue']) + api_app.include_router(lens_issues_router, prefix=f'{settings.APP_PREFIX}/lens_issues', tags=['lens_issue']) api_app.include_router(lens_types_router, prefix=f'{settings.APP_PREFIX}/lens_types', tags=['lens_types']) api_app.include_router(lenses_router, prefix=f'{settings.APP_PREFIX}/lenses', tags=['lenses']) api_app.include_router(patients_router, prefix=f'{settings.APP_PREFIX}/patients', tags=['patients']) api_app.include_router(register_router, prefix=f'{settings.APP_PREFIX}/register', tags=['register']) - api_app.include_router(scheduled_appointments_router, prefix=f'{settings.APP_PREFIX}/scheduled_appointments_router', tags=['scheduled_appointments_router']) + api_app.include_router(scheduled_appointments_router, prefix=f'{settings.APP_PREFIX}/scheduled_appointments', tags=['scheduled_appointments']) api_app.include_router(set_content_router, prefix=f'{settings.APP_PREFIX}/set_content', tags=['set_content']) api_app.include_router(sets_router, prefix=f'{settings.APP_PREFIX}/sets', tags=['sets']) diff --git a/web-app/package-lock.json b/web-app/package-lock.json index fbb83e1..ef1be5e 100644 --- a/web-app/package-lock.json +++ b/web-app/package-lock.json @@ -12,6 +12,7 @@ "@react-buddy/ide-toolbox": "^2.4.0", "@react-buddy/palette-antd": "^5.3.0", "antd": "^5.23.1", + "antd-dayjs-webpack-plugin": "^1.0.6", "antd-mask-input": "^2.0.7", "axios": "^1.7.9", "dayjs": "^1.11.13", @@ -44,9 +45,9 @@ } }, "node_modules/@ant-design/cssinjs": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/@ant-design/cssinjs/-/cssinjs-1.22.1.tgz", - "integrity": "sha512-SLuXM4wiEE1blOx94iXrkOgseMZHzdr4ngdFu3VVDq6AOWh7rlwqTkMAtJho3EsBF6x/eUGOtK53VZXGQG7+sQ==", + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@ant-design/cssinjs/-/cssinjs-1.23.0.tgz", + "integrity": "sha512-7GAg9bD/iC9ikWatU9ym+P9ugJhi/WbsTWzcKN6T4gU0aehsprtke1UAaaSxxkjjmkJb3llet/rbUSLPgwlY4w==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.11.1", @@ -132,9 +133,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", - "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz", + "integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==", "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" @@ -156,9 +157,9 @@ "license": "MIT" }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", - "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz", + "integrity": "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==", "cpu": [ "ppc64" ], @@ -173,9 +174,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", - "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.1.tgz", + "integrity": "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==", "cpu": [ "arm" ], @@ -190,9 +191,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", - "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz", + "integrity": "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==", "cpu": [ "arm64" ], @@ -207,9 +208,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", - "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.1.tgz", + "integrity": "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==", "cpu": [ "x64" ], @@ -224,9 +225,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", - "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz", + "integrity": "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==", "cpu": [ "arm64" ], @@ -241,9 +242,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", - "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz", + "integrity": "sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==", "cpu": [ "x64" ], @@ -258,9 +259,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", - "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz", + "integrity": "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==", "cpu": [ "arm64" ], @@ -275,9 +276,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", - "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz", + "integrity": "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==", "cpu": [ "x64" ], @@ -292,9 +293,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", - "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz", + "integrity": "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==", "cpu": [ "arm" ], @@ -309,9 +310,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", - "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz", + "integrity": "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==", "cpu": [ "arm64" ], @@ -326,9 +327,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", - "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz", + "integrity": "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==", "cpu": [ "ia32" ], @@ -343,9 +344,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", - "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz", + "integrity": "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==", "cpu": [ "loong64" ], @@ -360,9 +361,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", - "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz", + "integrity": "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==", "cpu": [ "mips64el" ], @@ -377,9 +378,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", - "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz", + "integrity": "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==", "cpu": [ "ppc64" ], @@ -394,9 +395,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", - "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz", + "integrity": "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==", "cpu": [ "riscv64" ], @@ -411,9 +412,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", - "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz", + "integrity": "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==", "cpu": [ "s390x" ], @@ -428,9 +429,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", - "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz", + "integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==", "cpu": [ "x64" ], @@ -445,9 +446,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", - "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz", + "integrity": "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==", "cpu": [ "arm64" ], @@ -462,9 +463,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", - "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz", + "integrity": "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==", "cpu": [ "x64" ], @@ -479,9 +480,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", - "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz", + "integrity": "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==", "cpu": [ "arm64" ], @@ -496,9 +497,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", - "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz", + "integrity": "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==", "cpu": [ "x64" ], @@ -513,9 +514,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", - "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz", + "integrity": "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==", "cpu": [ "x64" ], @@ -530,9 +531,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", - "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz", + "integrity": "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==", "cpu": [ "arm64" ], @@ -547,9 +548,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", - "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz", + "integrity": "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==", "cpu": [ "ia32" ], @@ -564,9 +565,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", - "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz", + "integrity": "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==", "cpu": [ "x64" ], @@ -581,9 +582,9 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", - "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz", + "integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==", "dev": true, "license": "MIT", "dependencies": { @@ -623,13 +624,13 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz", - "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", + "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.5", + "@eslint/object-schema": "^2.1.6", "debug": "^4.3.1", "minimatch": "^3.1.2" }, @@ -637,10 +638,20 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@eslint/config-helpers": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.1.0.tgz", + "integrity": "sha512-kLrdPDJE1ckPo94kmPPf9Hfd0DU0Jw6oKYrhe+pwSC0iTUInmTa+w6fw8sGgcfkFJGNdWOUeOaDM4quW4a7OkA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/core": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.10.0.tgz", - "integrity": "sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", + "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -651,9 +662,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", - "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.0.tgz", + "integrity": "sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -688,9 +699,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.18.0.tgz", - "integrity": "sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==", + "version": "9.22.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.22.0.tgz", + "integrity": "sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==", "dev": true, "license": "MIT", "engines": { @@ -698,9 +709,9 @@ } }, "node_modules/@eslint/object-schema": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz", - "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -708,13 +719,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz", - "integrity": "sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz", + "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.10.0", + "@eslint/core": "^0.12.0", "levn": "^0.4.1" }, "engines": { @@ -774,9 +785,9 @@ } }, "node_modules/@humanwhocodes/retry": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", - "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", + "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -787,330 +798,6 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@parcel/watcher": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", - "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "detect-libc": "^1.0.3", - "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "node-addon-api": "^7.0.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.5.1", - "@parcel/watcher-darwin-arm64": "2.5.1", - "@parcel/watcher-darwin-x64": "2.5.1", - "@parcel/watcher-freebsd-x64": "2.5.1", - "@parcel/watcher-linux-arm-glibc": "2.5.1", - "@parcel/watcher-linux-arm-musl": "2.5.1", - "@parcel/watcher-linux-arm64-glibc": "2.5.1", - "@parcel/watcher-linux-arm64-musl": "2.5.1", - "@parcel/watcher-linux-x64-glibc": "2.5.1", - "@parcel/watcher-linux-x64-musl": "2.5.1", - "@parcel/watcher-win32-arm64": "2.5.1", - "@parcel/watcher-win32-ia32": "2.5.1", - "@parcel/watcher-win32-x64": "2.5.1" - } - }, - "node_modules/@parcel/watcher-android-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", - "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", - "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", - "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", - "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", - "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", - "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", - "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", - "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", - "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", - "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", - "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", - "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", - "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, "node_modules/@rc-component/async-validator": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@rc-component/async-validator/-/async-validator-5.0.4.tgz", @@ -1284,9 +971,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.30.1.tgz", - "integrity": "sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.35.0.tgz", + "integrity": "sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ==", "cpu": [ "arm" ], @@ -1298,9 +985,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.30.1.tgz", - "integrity": "sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.35.0.tgz", + "integrity": "sha512-FtKddj9XZudurLhdJnBl9fl6BwCJ3ky8riCXjEw3/UIbjmIY58ppWwPEvU3fNu+W7FUsAsB1CdH+7EQE6CXAPA==", "cpu": [ "arm64" ], @@ -1312,9 +999,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.30.1.tgz", - "integrity": "sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.35.0.tgz", + "integrity": "sha512-Uk+GjOJR6CY844/q6r5DR/6lkPFOw0hjfOIzVx22THJXMxktXG6CbejseJFznU8vHcEBLpiXKY3/6xc+cBm65Q==", "cpu": [ "arm64" ], @@ -1326,9 +1013,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.30.1.tgz", - "integrity": "sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.35.0.tgz", + "integrity": "sha512-3IrHjfAS6Vkp+5bISNQnPogRAW5GAV1n+bNCrDwXmfMHbPl5EhTmWtfmwlJxFRUCBZ+tZ/OxDyU08aF6NI/N5Q==", "cpu": [ "x64" ], @@ -1340,9 +1027,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.30.1.tgz", - "integrity": "sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.35.0.tgz", + "integrity": "sha512-sxjoD/6F9cDLSELuLNnY0fOrM9WA0KrM0vWm57XhrIMf5FGiN8D0l7fn+bpUeBSU7dCgPV2oX4zHAsAXyHFGcQ==", "cpu": [ "arm64" ], @@ -1354,9 +1041,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.30.1.tgz", - "integrity": "sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.35.0.tgz", + "integrity": "sha512-2mpHCeRuD1u/2kruUiHSsnjWtHjqVbzhBkNVQ1aVD63CcexKVcQGwJ2g5VphOd84GvxfSvnnlEyBtQCE5hxVVw==", "cpu": [ "x64" ], @@ -1368,9 +1055,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.30.1.tgz", - "integrity": "sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.35.0.tgz", + "integrity": "sha512-mrA0v3QMy6ZSvEuLs0dMxcO2LnaCONs1Z73GUDBHWbY8tFFocM6yl7YyMu7rz4zS81NDSqhrUuolyZXGi8TEqg==", "cpu": [ "arm" ], @@ -1382,9 +1069,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.30.1.tgz", - "integrity": "sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.35.0.tgz", + "integrity": "sha512-DnYhhzcvTAKNexIql8pFajr0PiDGrIsBYPRvCKlA5ixSS3uwo/CWNZxB09jhIapEIg945KOzcYEAGGSmTSpk7A==", "cpu": [ "arm" ], @@ -1396,9 +1083,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.30.1.tgz", - "integrity": "sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.35.0.tgz", + "integrity": "sha512-uagpnH2M2g2b5iLsCTZ35CL1FgyuzzJQ8L9VtlJ+FckBXroTwNOaD0z0/UF+k5K3aNQjbm8LIVpxykUOQt1m/A==", "cpu": [ "arm64" ], @@ -1410,9 +1097,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.30.1.tgz", - "integrity": "sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.35.0.tgz", + "integrity": "sha512-XQxVOCd6VJeHQA/7YcqyV0/88N6ysSVzRjJ9I9UA/xXpEsjvAgDTgH3wQYz5bmr7SPtVK2TsP2fQ2N9L4ukoUg==", "cpu": [ "arm64" ], @@ -1424,9 +1111,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.30.1.tgz", - "integrity": "sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.35.0.tgz", + "integrity": "sha512-5pMT5PzfgwcXEwOaSrqVsz/LvjDZt+vQ8RT/70yhPU06PTuq8WaHhfT1LW+cdD7mW6i/J5/XIkX/1tCAkh1W6g==", "cpu": [ "loong64" ], @@ -1438,9 +1125,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.30.1.tgz", - "integrity": "sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.35.0.tgz", + "integrity": "sha512-c+zkcvbhbXF98f4CtEIP1EBA/lCic5xB0lToneZYvMeKu5Kamq3O8gqrxiYYLzlZH6E3Aq+TSW86E4ay8iD8EA==", "cpu": [ "ppc64" ], @@ -1452,9 +1139,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.30.1.tgz", - "integrity": "sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.35.0.tgz", + "integrity": "sha512-s91fuAHdOwH/Tad2tzTtPX7UZyytHIRR6V4+2IGlV0Cej5rkG0R61SX4l4y9sh0JBibMiploZx3oHKPnQBKe4g==", "cpu": [ "riscv64" ], @@ -1466,9 +1153,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.30.1.tgz", - "integrity": "sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.35.0.tgz", + "integrity": "sha512-hQRkPQPLYJZYGP+Hj4fR9dDBMIM7zrzJDWFEMPdTnTy95Ljnv0/4w/ixFw3pTBMEuuEuoqtBINYND4M7ujcuQw==", "cpu": [ "s390x" ], @@ -1480,9 +1167,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.1.tgz", - "integrity": "sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.35.0.tgz", + "integrity": "sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA==", "cpu": [ "x64" ], @@ -1494,9 +1181,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.30.1.tgz", - "integrity": "sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.35.0.tgz", + "integrity": "sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg==", "cpu": [ "x64" ], @@ -1508,9 +1195,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.30.1.tgz", - "integrity": "sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.35.0.tgz", + "integrity": "sha512-OUOlGqPkVJCdJETKOCEf1mw848ZyJ5w50/rZ/3IBQVdLfR5jk/6Sr5m3iO2tdPgwo0x7VcncYuOvMhBWZq8ayg==", "cpu": [ "arm64" ], @@ -1522,9 +1209,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.30.1.tgz", - "integrity": "sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.35.0.tgz", + "integrity": "sha512-2/lsgejMrtwQe44glq7AFFHLfJBPafpsTa6JvP2NGef/ifOa4KBoglVf7AKN7EV9o32evBPRqfg96fEHzWo5kw==", "cpu": [ "ia32" ], @@ -1536,9 +1223,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.30.1.tgz", - "integrity": "sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.35.0.tgz", + "integrity": "sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw==", "cpu": [ "x64" ], @@ -1550,15 +1237,15 @@ ] }, "node_modules/@swc/core": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.10.7.tgz", - "integrity": "sha512-py91kjI1jV5D5W/Q+PurBdGsdU5TFbrzamP7zSCqLdMcHkKi3rQEM5jkQcZr0MXXSJTaayLxS3MWYTBIkzPDrg==", + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.11.10.tgz", + "integrity": "sha512-Si27CiYwqJSF3K0HgxugQnjHNfH7YqqD89V+fLpyRHr81uTmCQpF0bnVdRMQ2SGAkCFJACYETRiBSrZOQ660+Q==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.17" + "@swc/types": "^0.1.19" }, "engines": { "node": ">=10" @@ -1568,16 +1255,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.10.7", - "@swc/core-darwin-x64": "1.10.7", - "@swc/core-linux-arm-gnueabihf": "1.10.7", - "@swc/core-linux-arm64-gnu": "1.10.7", - "@swc/core-linux-arm64-musl": "1.10.7", - "@swc/core-linux-x64-gnu": "1.10.7", - "@swc/core-linux-x64-musl": "1.10.7", - "@swc/core-win32-arm64-msvc": "1.10.7", - "@swc/core-win32-ia32-msvc": "1.10.7", - "@swc/core-win32-x64-msvc": "1.10.7" + "@swc/core-darwin-arm64": "1.11.10", + "@swc/core-darwin-x64": "1.11.10", + "@swc/core-linux-arm-gnueabihf": "1.11.10", + "@swc/core-linux-arm64-gnu": "1.11.10", + "@swc/core-linux-arm64-musl": "1.11.10", + "@swc/core-linux-x64-gnu": "1.11.10", + "@swc/core-linux-x64-musl": "1.11.10", + "@swc/core-win32-arm64-msvc": "1.11.10", + "@swc/core-win32-ia32-msvc": "1.11.10", + "@swc/core-win32-x64-msvc": "1.11.10" }, "peerDependencies": { "@swc/helpers": "*" @@ -1589,9 +1276,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.10.7.tgz", - "integrity": "sha512-SI0OFg987P6hcyT0Dbng3YRISPS9uhLX1dzW4qRrfqQdb0i75lPJ2YWe9CN47HBazrIA5COuTzrD2Dc0TcVsSQ==", + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.11.10.tgz", + "integrity": "sha512-FWwYyhUu+xRXldXHw4CBP6M0rXQs9gnE5/qodsb+cyOJaTHI8kU6FJtwaC0PiOVxjREdg/DoTrXS4sZUiL881A==", "cpu": [ "arm64" ], @@ -1606,9 +1293,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.10.7.tgz", - "integrity": "sha512-RFIAmWVicD/l3RzxgHW0R/G1ya/6nyMspE2cAeDcTbjHi0I5qgdhBWd6ieXOaqwEwiCd0Mot1g2VZrLGoBLsjQ==", + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.11.10.tgz", + "integrity": "sha512-NKQ62w81TGR5YAidV3KF7CDY0nu62OWmz6Hl/mB/i8Cd9xPc+MnLwdY1cJOU/DsrU4YnRFSaOfBF4Fx4mKLWxA==", "cpu": [ "x64" ], @@ -1623,9 +1310,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.10.7.tgz", - "integrity": "sha512-QP8vz7yELWfop5mM5foN6KkLylVO7ZUgWSF2cA0owwIaziactB2hCPZY5QU690coJouk9KmdFsPWDnaCFUP8tg==", + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.11.10.tgz", + "integrity": "sha512-1Vu+ZjoR7M8ShIf0Koi+B1OJ6DsU7jd4Py743KCgKlabvLFrv/uahp5fPJ1kyAUTxFE5d37qWqWLl5NkYDmDtQ==", "cpu": [ "arm" ], @@ -1640,9 +1327,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.10.7.tgz", - "integrity": "sha512-NgUDBGQcOeLNR+EOpmUvSDIP/F7i/OVOKxst4wOvT5FTxhnkWrW+StJGKj+DcUVSK5eWOYboSXr1y+Hlywwokw==", + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.11.10.tgz", + "integrity": "sha512-mP26821Auyqa+Dce8gFlH4GxxbJ8xJU8H5/iIU8ObK12ulmK75G2VdILoc3gFDKfx3K7IqQkfokW3PAGI9X2Vg==", "cpu": [ "arm64" ], @@ -1657,9 +1344,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.10.7.tgz", - "integrity": "sha512-gp5Un3EbeSThBIh6oac5ZArV/CsSmTKj5jNuuUAuEsML3VF9vqPO+25VuxCvsRf/z3py+xOWRaN2HY/rjMeZog==", + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.11.10.tgz", + "integrity": "sha512-XZ61quwNgTqvbMqpFAa6/ZqoErabocHUHMWQHyShxbqM2nkP1sBe6EgODX6mNSzLn0u+KDVRyQUy9ratt+xbFw==", "cpu": [ "arm64" ], @@ -1674,9 +1361,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.10.7.tgz", - "integrity": "sha512-k/OxLLMl/edYqbZyUNg6/bqEHTXJT15l9WGqsl/2QaIGwWGvles8YjruQYQ9d4h/thSXLT9gd8bExU2D0N+bUA==", + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.11.10.tgz", + "integrity": "sha512-BwohorC2nkak8YQuS6IH/70XkhBjqmPbL7KT0NKmr4sstRe52I3F5Vbo30xBckpvT8ZRPvjmjK3FvJ2Rf3PRmw==", "cpu": [ "x64" ], @@ -1691,9 +1378,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.10.7.tgz", - "integrity": "sha512-XeDoURdWt/ybYmXLCEE8aSiTOzEn0o3Dx5l9hgt0IZEmTts7HgHHVeRgzGXbR4yDo0MfRuX5nE1dYpTmCz0uyA==", + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.11.10.tgz", + "integrity": "sha512-bCaEJVB1+5KscAolNfL6qd3I1bVovhNDShutrTlNXNvjqNavWrX8z8ZfSJ3oK6CvrBzFR6fjCSqkoD+ckKBYBA==", "cpu": [ "x64" ], @@ -1708,9 +1395,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.10.7.tgz", - "integrity": "sha512-nYAbi/uLS+CU0wFtBx8TquJw2uIMKBnl04LBmiVoFrsIhqSl+0MklaA9FVMGA35NcxSJfcm92Prl2W2LfSnTqQ==", + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.11.10.tgz", + "integrity": "sha512-Gq4svadhEVP7xClzsV8W2/8R/kfEUbJJKIS2fj8hb9lM6/AVs/PVmDiLGye6cYfVpQzkdDsJLm8r4yhSAIFsFQ==", "cpu": [ "arm64" ], @@ -1725,9 +1412,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.10.7.tgz", - "integrity": "sha512-+aGAbsDsIxeLxw0IzyQLtvtAcI1ctlXVvVcXZMNXIXtTURM876yNrufRo4ngoXB3jnb1MLjIIjgXfFs/eZTUSw==", + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.11.10.tgz", + "integrity": "sha512-RkZYTY0pQiHgcoFJwZoFZiEWw4WB/XVLp+y90l4Ar1nnoQQNmfb4FyvWYZbDQgrMGP0Wj5WhZuMXzW12/qI5Kg==", "cpu": [ "ia32" ], @@ -1742,9 +1429,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.10.7.tgz", - "integrity": "sha512-TBf4clpDBjF/UUnkKrT0/th76/zwvudk5wwobiTFqDywMApHip5O0VpBgZ+4raY2TM8k5+ujoy7bfHb22zu17Q==", + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.11.10.tgz", + "integrity": "sha512-clDl+oAl6YLsqZiGb8NzpEXTdIzCTPCJSRFCeHIldjLlsAs+qsqItry2r2xSAKU1pFv4D7j9WgJmVVxOPgs/Jg==", "cpu": [ "x64" ], @@ -1766,9 +1453,9 @@ "license": "Apache-2.0" }, "node_modules/@swc/types": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.17.tgz", - "integrity": "sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==", + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.19.tgz", + "integrity": "sha512-WkAZaAfj44kh/UFdAQcrMP1I0nwRqpt27u+08LMBYMqmQfwwMofYoMh/48NGkMMRfC4ynpfwRbJuu8ErfNloeA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1824,22 +1511,22 @@ } }, "node_modules/@vitejs/plugin-react-swc": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.7.2.tgz", - "integrity": "sha512-y0byko2b2tSVVf5Gpng1eEhX1OvPC7x8yns1Fx8jDzlJp4LS6CMkCPfLw47cjyoMrshQDoQw4qcgjsU9VvlCew==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.8.0.tgz", + "integrity": "sha512-T4sHPvS+DIqDP51ifPqa9XIRAz/kIvIi8oXcnOZZgHmMotgmmdxe/DD5tMFlt5nuIRzT0/QuiwmKlH0503Aapw==", "dev": true, "license": "MIT", "dependencies": { - "@swc/core": "^1.7.26" + "@swc/core": "^1.10.15" }, "peerDependencies": { "vite": "^4 || ^5 || ^6" } }, "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true, "license": "MIT", "bin": { @@ -1893,16 +1580,16 @@ } }, "node_modules/antd": { - "version": "5.23.1", - "resolved": "https://registry.npmjs.org/antd/-/antd-5.23.1.tgz", - "integrity": "sha512-rg5xd5LotHw0IRyo/nsiUN/EEV3e+xU4V4UmIb/62hMN9+3APyz1Ohjf17a+fN13jC8sNY1hP1K252SU2Th0xA==", + "version": "5.24.4", + "resolved": "https://registry.npmjs.org/antd/-/antd-5.24.4.tgz", + "integrity": "sha512-s89666DcoWeekJFaIqbtz2vRlIvgPR28GuDYYGUpW1mVP08bV7HZAPBH5lFJKYNGKrN3dHbZGgRK5aNRD2iPHg==", "license": "MIT", "dependencies": { "@ant-design/colors": "^7.2.0", - "@ant-design/cssinjs": "^1.22.0", + "@ant-design/cssinjs": "^1.23.0", "@ant-design/cssinjs-utils": "^1.1.3", "@ant-design/fast-color": "^2.0.6", - "@ant-design/icons": "^5.5.2", + "@ant-design/icons": "^5.6.1", "@ant-design/react-slick": "~1.1.2", "@babel/runtime": "^7.26.0", "@rc-component/color-picker": "~2.0.1", @@ -1913,7 +1600,7 @@ "classnames": "^2.5.1", "copy-to-clipboard": "^3.3.3", "dayjs": "^1.11.11", - "rc-cascader": "~3.33.0", + "rc-cascader": "~3.33.1", "rc-checkbox": "~3.5.0", "rc-collapse": "~3.9.0", "rc-dialog": "~9.6.0", @@ -1921,30 +1608,30 @@ "rc-dropdown": "~4.2.1", "rc-field-form": "~2.7.0", "rc-image": "~7.11.0", - "rc-input": "~1.7.2", + "rc-input": "~1.7.3", "rc-input-number": "~9.4.0", "rc-mentions": "~2.19.1", - "rc-menu": "~9.16.0", + "rc-menu": "~9.16.1", "rc-motion": "^2.9.5", - "rc-notification": "~5.6.2", - "rc-pagination": "~5.0.0", - "rc-picker": "~4.9.2", + "rc-notification": "~5.6.3", + "rc-pagination": "~5.1.0", + "rc-picker": "~4.11.3", "rc-progress": "~4.0.0", - "rc-rate": "~2.13.0", + "rc-rate": "~2.13.1", "rc-resize-observer": "^1.4.3", "rc-segmented": "~2.7.0", - "rc-select": "~14.16.5", + "rc-select": "~14.16.6", "rc-slider": "~11.1.8", "rc-steps": "~6.0.1", "rc-switch": "~4.1.0", - "rc-table": "~7.50.2", - "rc-tabs": "~15.5.0", + "rc-table": "~7.50.4", + "rc-tabs": "~15.5.1", "rc-textarea": "~1.9.0", - "rc-tooltip": "~6.3.2", - "rc-tree": "~5.13.0", + "rc-tooltip": "~6.4.0", + "rc-tree": "~5.13.1", "rc-tree-select": "~5.27.0", "rc-upload": "~4.8.1", - "rc-util": "^5.44.3", + "rc-util": "^5.44.4", "scroll-into-view-if-needed": "^3.1.0", "throttle-debounce": "^5.0.2" }, @@ -1957,6 +1644,15 @@ "react-dom": ">=16.9.0" } }, + "node_modules/antd-dayjs-webpack-plugin": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/antd-dayjs-webpack-plugin/-/antd-dayjs-webpack-plugin-1.0.6.tgz", + "integrity": "sha512-UlK3BfA0iE2c5+Zz/Bd2iPAkT6cICtrKG4/swSik5MZweBHtgmu1aUQCHvICdiv39EAShdZy/edfP6mlkS/xXg==", + "license": "MIT", + "peerDependencies": { + "dayjs": "*" + } + }, "node_modules/antd-mask-input": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/antd-mask-input/-/antd-mask-input-2.0.7.tgz", @@ -2113,6 +1809,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -2136,9 +1842,9 @@ } }, "node_modules/axios": { - "version": "1.7.9", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", - "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.3.tgz", + "integrity": "sha512-iP4DebzoNlP/YN2dpwCgb8zoCmhtkajzS48JvwmkSkXvPI3DHc7m+XYL5tGnSlJtR6nImXZmdCuN5aP8dh1d8A==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", @@ -2164,21 +1870,6 @@ "concat-map": "0.0.1" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/call-bind": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", @@ -2199,10 +1890,9 @@ } }, "node_modules/call-bind-apply-helpers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", - "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", - "dev": true, + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -2213,14 +1903,14 @@ } }, "node_modules/call-bound": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", - "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "get-intrinsic": "^1.2.6" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -2256,24 +1946,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/classnames": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", @@ -2494,21 +2166,6 @@ "node": ">=0.4.0" } }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "peer": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -2526,7 +2183,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -2607,7 +2263,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -2617,7 +2272,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -2655,7 +2309,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -2668,7 +2321,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -2681,13 +2333,16 @@ } }, "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", "dev": true, "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/es-to-primitive": { @@ -2709,9 +2364,9 @@ } }, "node_modules/esbuild": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", - "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz", + "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -2722,31 +2377,31 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.24.2", - "@esbuild/android-arm": "0.24.2", - "@esbuild/android-arm64": "0.24.2", - "@esbuild/android-x64": "0.24.2", - "@esbuild/darwin-arm64": "0.24.2", - "@esbuild/darwin-x64": "0.24.2", - "@esbuild/freebsd-arm64": "0.24.2", - "@esbuild/freebsd-x64": "0.24.2", - "@esbuild/linux-arm": "0.24.2", - "@esbuild/linux-arm64": "0.24.2", - "@esbuild/linux-ia32": "0.24.2", - "@esbuild/linux-loong64": "0.24.2", - "@esbuild/linux-mips64el": "0.24.2", - "@esbuild/linux-ppc64": "0.24.2", - "@esbuild/linux-riscv64": "0.24.2", - "@esbuild/linux-s390x": "0.24.2", - "@esbuild/linux-x64": "0.24.2", - "@esbuild/netbsd-arm64": "0.24.2", - "@esbuild/netbsd-x64": "0.24.2", - "@esbuild/openbsd-arm64": "0.24.2", - "@esbuild/openbsd-x64": "0.24.2", - "@esbuild/sunos-x64": "0.24.2", - "@esbuild/win32-arm64": "0.24.2", - "@esbuild/win32-ia32": "0.24.2", - "@esbuild/win32-x64": "0.24.2" + "@esbuild/aix-ppc64": "0.25.1", + "@esbuild/android-arm": "0.25.1", + "@esbuild/android-arm64": "0.25.1", + "@esbuild/android-x64": "0.25.1", + "@esbuild/darwin-arm64": "0.25.1", + "@esbuild/darwin-x64": "0.25.1", + "@esbuild/freebsd-arm64": "0.25.1", + "@esbuild/freebsd-x64": "0.25.1", + "@esbuild/linux-arm": "0.25.1", + "@esbuild/linux-arm64": "0.25.1", + "@esbuild/linux-ia32": "0.25.1", + "@esbuild/linux-loong64": "0.25.1", + "@esbuild/linux-mips64el": "0.25.1", + "@esbuild/linux-ppc64": "0.25.1", + "@esbuild/linux-riscv64": "0.25.1", + "@esbuild/linux-s390x": "0.25.1", + "@esbuild/linux-x64": "0.25.1", + "@esbuild/netbsd-arm64": "0.25.1", + "@esbuild/netbsd-x64": "0.25.1", + "@esbuild/openbsd-arm64": "0.25.1", + "@esbuild/openbsd-x64": "0.25.1", + "@esbuild/sunos-x64": "0.25.1", + "@esbuild/win32-arm64": "0.25.1", + "@esbuild/win32-ia32": "0.25.1", + "@esbuild/win32-x64": "0.25.1" } }, "node_modules/escape-string-regexp": { @@ -2763,22 +2418,23 @@ } }, "node_modules/eslint": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.18.0.tgz", - "integrity": "sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==", + "version": "9.22.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.22.0.tgz", + "integrity": "sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.19.0", - "@eslint/core": "^0.10.0", - "@eslint/eslintrc": "^3.2.0", - "@eslint/js": "9.18.0", - "@eslint/plugin-kit": "^0.2.5", + "@eslint/config-array": "^0.19.2", + "@eslint/config-helpers": "^0.1.0", + "@eslint/core": "^0.12.0", + "@eslint/eslintrc": "^3.3.0", + "@eslint/js": "9.22.0", + "@eslint/plugin-kit": "^0.2.7", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.1", + "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", @@ -2786,7 +2442,7 @@ "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.2.0", + "eslint-scope": "^8.3.0", "eslint-visitor-keys": "^4.2.0", "espree": "^10.3.0", "esquery": "^1.5.0", @@ -2856,9 +2512,9 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0.tgz", - "integrity": "sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", "dev": true, "license": "MIT", "engines": { @@ -2869,9 +2525,9 @@ } }, "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.18.tgz", - "integrity": "sha512-IRGEoFn3OKalm3hjfolEWGqoF/jPqeEYFp+C8B0WMzwGwBMvlRDQd06kghDhF0C61uJ6WfSDhEZE/sAQjduKgw==", + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.19.tgz", + "integrity": "sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -2879,9 +2535,9 @@ } }, "node_modules/eslint-scope": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", - "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -3006,21 +2662,6 @@ "node": ">=16.0.0" } }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -3053,9 +2694,9 @@ } }, "node_modules/flatted": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", - "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "dev": true, "license": "ISC" }, @@ -3080,23 +2721,30 @@ } }, "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.1.3" + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", "mime-types": "^2.1.12" }, "engines": { @@ -3122,7 +2770,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3160,18 +2807,17 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", - "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", - "dev": true, + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", + "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "get-proto": "^1.0.0", + "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", @@ -3188,7 +2834,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", @@ -3230,9 +2875,9 @@ } }, "node_modules/globals": { - "version": "15.14.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz", - "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==", + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", "dev": true, "license": "MIT", "engines": { @@ -3263,7 +2908,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -3328,7 +2972,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -3341,7 +2984,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -3357,7 +2999,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -3385,19 +3026,10 @@ "npm": ">=4.0.0" } }, - "node_modules/immutable": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz", - "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3455,12 +3087,13 @@ } }, "node_modules/is-async-function": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.0.tgz", - "integrity": "sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, "license": "MIT", "dependencies": { + "async-function": "^1.0.0", "call-bound": "^1.0.3", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", @@ -3490,13 +3123,13 @@ } }, "node_modules/is-boolean-object": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", - "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", + "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" }, "engines": { @@ -3641,18 +3274,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.12.0" - } - }, "node_modules/is-number-object": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", @@ -3783,13 +3404,13 @@ } }, "node_modules/is-weakref": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", - "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -3975,28 +3596,11 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" } }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -4031,17 +3635,6 @@ "node": "*" } }, - "node_modules/moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": "*" - } - }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -4050,9 +3643,9 @@ "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.10.tgz", + "integrity": "sha512-vSJJTG+t/dIKAUhUDw/dLdZ9s//5OxcHqLaDWWrW4Cdq7o6tdLIczUkMXt2MBNmk6sJRZBZRXVixs7URY1CmIg==", "dev": true, "funding": [ { @@ -4075,15 +3668,6 @@ "dev": true, "license": "MIT" }, - "node_modules/node-addon-api": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -4094,9 +3678,9 @@ } }, "node_modules/object-inspect": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", - "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, "license": "MIT", "engines": { @@ -4138,15 +3722,16 @@ } }, "node_modules/object.entries": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", - "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "es-object-atoms": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -4305,25 +3890,10 @@ "dev": true, "license": "ISC" }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true, "license": "MIT", "engines": { @@ -4331,9 +3901,9 @@ } }, "node_modules/postcss": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz", - "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==", + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", "dev": true, "funding": [ { @@ -4397,9 +3967,9 @@ } }, "node_modules/rc-cascader": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-3.33.0.tgz", - "integrity": "sha512-JvZrMbKBXIbEDmpIORxqvedY/bck6hGbs3hxdWT8eS9wSQ1P7//lGxbyKjOSyQiVBbgzNWriSe6HoMcZO/+0rQ==", + "version": "3.33.1", + "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-3.33.1.tgz", + "integrity": "sha512-Kyl4EJ7ZfCBuidmZVieegcbFw0RcU5bHHSbtEdmuLYd0fYHCAiYKZ6zon7fWAVyC6rWWOOib0XKdTSf7ElC9rg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.7", @@ -4513,9 +4083,9 @@ } }, "node_modules/rc-image": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/rc-image/-/rc-image-7.11.0.tgz", - "integrity": "sha512-aZkTEZXqeqfPZtnSdNUnKQA0N/3MbgR7nUnZ+/4MfSFWPFHZau4p5r5ShaI0KPEMnNjv4kijSCFq/9wtJpwykw==", + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/rc-image/-/rc-image-7.11.1.tgz", + "integrity": "sha512-XuoWx4KUXg7hNy5mRTy1i8c8p3K8boWg6UajbHpDXS5AlRVucNfTi5YxTtPBTBzegxAZpvuLfh3emXFt6ybUdA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.11.2", @@ -4531,9 +4101,9 @@ } }, "node_modules/rc-input": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/rc-input/-/rc-input-1.7.2.tgz", - "integrity": "sha512-g3nYONnl4edWj2FfVoxsU3Ec4XTE+Hb39Kfh2MFxMZjp/0gGyPUgy/v7ZhS27ZxUFNkuIDYXm9PJsLyJbtg86A==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/rc-input/-/rc-input-1.7.3.tgz", + "integrity": "sha512-A5w4egJq8+4JzlQ55FfQjDnPvOaAbzwC3VLOAdOytyek3TboSOP9qxN+Gifup+shVXfvecBLBbWBpWxmk02SWQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.11.1", @@ -4582,9 +4152,9 @@ } }, "node_modules/rc-menu": { - "version": "9.16.0", - "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-9.16.0.tgz", - "integrity": "sha512-vAL0yqPkmXWk3+YKRkmIR8TYj3RVdEt3ptG2jCJXWNAvQbT0VJJdRyHZ7kG/l1JsZlB+VJq/VcYOo69VR4oD+w==", + "version": "9.16.1", + "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-9.16.1.tgz", + "integrity": "sha512-ghHx6/6Dvp+fw8CJhDUHFHDJ84hJE3BXNCzSgLdmNiFErWSOaZNsihDAsKq9ByTALo/xkNIwtDFGIl6r+RPXBg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.1", @@ -4615,9 +4185,9 @@ } }, "node_modules/rc-notification": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-5.6.2.tgz", - "integrity": "sha512-Id4IYMoii3zzrG0lB0gD6dPgJx4Iu95Xu0BQrhHIbp7ZnAZbLqdqQ73aIWH0d0UFcElxwaKjnzNovTjo7kXz7g==", + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-5.6.3.tgz", + "integrity": "sha512-42szwnn8VYQoT6GnjO00i1iwqV9D1TTMvxObWsuLwgl0TsOokzhkYiufdtQBsJMFjJravS1hfDKVMHLKLcPE4g==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.1", @@ -4650,9 +4220,9 @@ } }, "node_modules/rc-pagination": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-5.0.0.tgz", - "integrity": "sha512-QjrPvbAQwps93iluvFM62AEYglGYhWW2q/nliQqmvkTi4PXP4HHoh00iC1Sa5LLVmtWQHmG73fBi2x6H6vFHRg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-5.1.0.tgz", + "integrity": "sha512-8416Yip/+eclTFdHXLKTxZvn70duYVGTvUUWbckCCZoIl3jagqke3GLsFrMs0bsQBikiYpZLD9206Ej4SOdOXQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.1", @@ -4665,9 +4235,9 @@ } }, "node_modules/rc-picker": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-4.9.2.tgz", - "integrity": "sha512-SLW4PRudODOomipKI0dvykxW4P8LOqtMr17MOaLU6NQJhkh9SZeh44a/8BMxwv5T6e3kiIeYc9k5jFg2Mv35Pg==", + "version": "4.11.3", + "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-4.11.3.tgz", + "integrity": "sha512-MJ5teb7FlNE0NFHTncxXQ62Y5lytq6sh5nUw0iH8OkHL/TjARSEvSHpr940pWgjGANpjCwyMdvsEV55l5tYNSg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.24.7", @@ -4719,9 +4289,9 @@ } }, "node_modules/rc-rate": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/rc-rate/-/rc-rate-2.13.0.tgz", - "integrity": "sha512-oxvx1Q5k5wD30sjN5tqAyWTvJfLNNJn7Oq3IeS4HxWfAiC4BOXMITNAsw7u/fzdtO4MS8Ki8uRLOzcnEuoQiAw==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/rc-rate/-/rc-rate-2.13.1.tgz", + "integrity": "sha512-QUhQ9ivQ8Gy7mtMZPAjLbxBt5y9GRp65VcUyGUMF3N3fhiftivPHdpuDIaWIMOTEprAjZPC08bls1dQB+I1F2Q==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.1", @@ -4769,9 +4339,9 @@ } }, "node_modules/rc-select": { - "version": "14.16.5", - "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-14.16.5.tgz", - "integrity": "sha512-cRls713egTcitJ7WUXhHEf22h3U1OMC8nbw9+HN4Fniew8Xo3avgEDvIeGRwhbiyPNbQR23AwP+tt6KWUcB4IA==", + "version": "14.16.6", + "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-14.16.6.tgz", + "integrity": "sha512-YPMtRPqfZWOm2XGTbx5/YVr1HT0vn//8QS77At0Gjb3Lv+Lbut0IORJPKLWu1hQ3u4GsA0SrDzs7nI8JG7Zmyg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.1", @@ -4842,9 +4412,9 @@ } }, "node_modules/rc-table": { - "version": "7.50.2", - "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.50.2.tgz", - "integrity": "sha512-+nJbzxzstBriLb5sr9U7Vjs7+4dO8cWlouQbMwBVYghk2vr508bBdkHJeP/z9HVjAIKmAgMQKxmtbgDd3gc5wA==", + "version": "7.50.4", + "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.50.4.tgz", + "integrity": "sha512-Y+YuncnQqoS5e7yHvfvlv8BmCvwDYDX/2VixTBEhkMDk9itS9aBINp4nhzXFKiBP/frG4w0pS9d9Rgisl0T1Bw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.1", @@ -4863,9 +4433,9 @@ } }, "node_modules/rc-tabs": { - "version": "15.5.0", - "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-15.5.0.tgz", - "integrity": "sha512-NrDcTaUJLh9UuDdMBkjKTn97U9iXG44s9D03V5NHkhEDWO5/nC6PwC3RhkCWFMKB9hh+ryqgZ+TIr1b9Jd/hnQ==", + "version": "15.5.1", + "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-15.5.1.tgz", + "integrity": "sha512-yiWivLAjEo5d1v2xlseB2dQocsOhkoVSfo1krS8v8r+02K+TBUjSjXIf7dgyVSxp6wRIPv5pMi5hanNUlQMgUA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.11.2", @@ -4902,14 +4472,15 @@ } }, "node_modules/rc-tooltip": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-6.3.2.tgz", - "integrity": "sha512-oA4HZIiZJbUQ5ojigM0y4XtWxaH/aQlJSzknjICRWNpqyemy1sL3X3iEQV2eSPBWEq+bqU3+aSs81z+28j9luA==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-6.4.0.tgz", + "integrity": "sha512-kqyivim5cp8I5RkHmpsp1Nn/Wk+1oeloMv9c7LXNgDxUpGm+RbXJGL+OPvDlcRnx9DBeOe4wyOIl4OKUERyH1g==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.11.2", "@rc-component/trigger": "^2.0.0", - "classnames": "^2.3.1" + "classnames": "^2.3.1", + "rc-util": "^5.44.3" }, "peerDependencies": { "react": ">=16.9.0", @@ -4917,9 +4488,9 @@ } }, "node_modules/rc-tree": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-5.13.0.tgz", - "integrity": "sha512-2+lFvoVRnvHQ1trlpXMOWtF8BUgF+3TiipG72uOfhpL5CUdXCk931kvDdUkTL/IZVtNEDQKwEEmJbAYJSA5NnA==", + "version": "5.13.1", + "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-5.13.1.tgz", + "integrity": "sha512-FNhIefhftobCdUJshO7M8uZTA9F4OPGVXqGfZkkD/5soDeOhwO06T/aKTrg0WD8gRg/pyfq+ql3aMymLHCTC4A==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.1", @@ -4969,9 +4540,9 @@ } }, "node_modules/rc-util": { - "version": "5.44.3", - "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.44.3.tgz", - "integrity": "sha512-q6KCcOFk3rv/zD3MckhJteZxb0VjAIFuf622B7ElK4vfrZdAzs16XR5p3VTdy3+U5jfJU5ACz4QnhLSuAGe5dA==", + "version": "5.44.4", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.44.4.tgz", + "integrity": "sha512-resueRJzmHG9Q6rI/DfK6Kdv9/Lfls05vzMs1Sk3M2P+3cJa+MakaZyWY8IPfehVuhPJFKrIY1IK4GqbiaiY5w==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.18.3", @@ -4989,9 +4560,9 @@ "license": "MIT" }, "node_modules/rc-virtual-list": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.17.0.tgz", - "integrity": "sha512-h0jPHWt8/Ots9eiGVSGQTxwrSuQ3kxqL/ERKubv8zzIMICGQaDDWm/JoUa31MdQUC7PKDMiy5KDLkNfHcWo+iQ==", + "version": "3.18.4", + "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.18.4.tgz", + "integrity": "sha512-qkurwgc4Je4xJaYe1DprDl2fwtfEZcuC4UhsJRiX2YZ6wSZAUPQXH/lIX+ZRtNEWmz3pzSBQ7NX3Csjp0wCtcg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.0", @@ -5039,9 +4610,9 @@ "license": "MIT" }, "node_modules/react-router": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.1.1.tgz", - "integrity": "sha512-39sXJkftkKWRZ2oJtHhCxmoCrBCULr/HAH4IT5DHlgu/Q0FCPV0S4Lx+abjDTx/74xoZzNYDYbOZWlJjruyuDQ==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.3.0.tgz", + "integrity": "sha512-466f2W7HIWaNXTKM5nHTqNxLrHTyXybm7R0eBlVSt0k/u55tTCDO194OIx/NrYD4TS5SXKTNekXfT37kMKUjgw==", "license": "MIT", "dependencies": { "@types/cookie": "^0.6.0", @@ -5063,12 +4634,12 @@ } }, "node_modules/react-router-dom": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.1.1.tgz", - "integrity": "sha512-vSrQHWlJ5DCfyrhgo0k6zViOe9ToK8uT5XGSmnuC2R3/g261IdIMpZVqfjD6vWSXdnf5Czs4VA/V60oVR6/jnA==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.3.0.tgz", + "integrity": "sha512-z7Q5FTiHGgQfEurX/FBinkOXhWREJIAB2RiU24lvcBa82PxUpwqvs/PAXb9lJyPjTs2jrl6UkLvCZVGJPeNuuQ==", "license": "MIT", "dependencies": { - "react-router": "7.1.1" + "react-router": "7.3.0" }, "engines": { "node": ">=20.0.0" @@ -5078,22 +4649,6 @@ "react-dom": ">=18" } }, - "node_modules/readdirp": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.1.tgz", - "integrity": "sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -5179,9 +4734,9 @@ } }, "node_modules/rollup": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.30.1.tgz", - "integrity": "sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.35.0.tgz", + "integrity": "sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg==", "dev": true, "license": "MIT", "dependencies": { @@ -5195,25 +4750,25 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.30.1", - "@rollup/rollup-android-arm64": "4.30.1", - "@rollup/rollup-darwin-arm64": "4.30.1", - "@rollup/rollup-darwin-x64": "4.30.1", - "@rollup/rollup-freebsd-arm64": "4.30.1", - "@rollup/rollup-freebsd-x64": "4.30.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.30.1", - "@rollup/rollup-linux-arm-musleabihf": "4.30.1", - "@rollup/rollup-linux-arm64-gnu": "4.30.1", - "@rollup/rollup-linux-arm64-musl": "4.30.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.30.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.30.1", - "@rollup/rollup-linux-riscv64-gnu": "4.30.1", - "@rollup/rollup-linux-s390x-gnu": "4.30.1", - "@rollup/rollup-linux-x64-gnu": "4.30.1", - "@rollup/rollup-linux-x64-musl": "4.30.1", - "@rollup/rollup-win32-arm64-msvc": "4.30.1", - "@rollup/rollup-win32-ia32-msvc": "4.30.1", - "@rollup/rollup-win32-x64-msvc": "4.30.1", + "@rollup/rollup-android-arm-eabi": "4.35.0", + "@rollup/rollup-android-arm64": "4.35.0", + "@rollup/rollup-darwin-arm64": "4.35.0", + "@rollup/rollup-darwin-x64": "4.35.0", + "@rollup/rollup-freebsd-arm64": "4.35.0", + "@rollup/rollup-freebsd-x64": "4.35.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.35.0", + "@rollup/rollup-linux-arm-musleabihf": "4.35.0", + "@rollup/rollup-linux-arm64-gnu": "4.35.0", + "@rollup/rollup-linux-arm64-musl": "4.35.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.35.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.35.0", + "@rollup/rollup-linux-riscv64-gnu": "4.35.0", + "@rollup/rollup-linux-s390x-gnu": "4.35.0", + "@rollup/rollup-linux-x64-gnu": "4.35.0", + "@rollup/rollup-linux-x64-musl": "4.35.0", + "@rollup/rollup-win32-arm64-msvc": "4.35.0", + "@rollup/rollup-win32-ia32-msvc": "4.35.0", + "@rollup/rollup-win32-x64-msvc": "4.35.0", "fsevents": "~2.3.2" } }, @@ -5272,29 +4827,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/sass": { - "version": "1.84.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.84.0.tgz", - "integrity": "sha512-XDAbhEPJRxi7H0SxrnOpiXFQoUJHwkR2u3Zc4el+fK/Tt5Hpzw5kkQ59qVDfvdaUq6gCrEZIbySFBM2T9DNKHg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "chokidar": "^4.0.0", - "immutable": "^5.0.2", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - }, - "optionalDependencies": { - "@parcel/watcher": "^2.4.1" - } - }, "node_modules/scheduler": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", @@ -5605,9 +5137,9 @@ } }, "node_modules/stylis": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.5.tgz", - "integrity": "sha512-K7npNOKGRYuhAFFzkzMGfxFDpN6gDwf8hcMiE+uveTVbBgm93HrNP3ZDUpKqzZ4pG7TP6fmb+EMAQPjq9FqqvA==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz", + "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==", "license": "MIT" }, "node_modules/supports-color": { @@ -5645,21 +5177,6 @@ "node": ">=12.22" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, "node_modules/toggle-selection": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", @@ -5802,15 +5319,15 @@ } }, "node_modules/vite": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.7.tgz", - "integrity": "sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.2.tgz", + "integrity": "sha512-yW7PeMM+LkDzc7CgJuRLMW2Jz0FxMOsVJ8Lv3gpgW9WLcb9cTW+121UEr1hvmfR7w3SegR5ItvYyzVz1vxNJgQ==", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "^0.24.2", - "postcss": "^8.4.49", - "rollup": "^4.23.0" + "esbuild": "^0.25.0", + "postcss": "^8.5.3", + "rollup": "^4.30.1" }, "bin": { "vite": "bin/vite.js" @@ -5957,16 +5474,17 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", - "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "for-each": "^0.3.3", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" }, diff --git a/web-app/package.json b/web-app/package.json index 99a31b7..e6c17ef 100644 --- a/web-app/package.json +++ b/web-app/package.json @@ -14,6 +14,7 @@ "@react-buddy/ide-toolbox": "^2.4.0", "@react-buddy/palette-antd": "^5.3.0", "antd": "^5.23.1", + "antd-dayjs-webpack-plugin": "^1.0.6", "antd-mask-input": "^2.0.7", "axios": "^1.7.9", "dayjs": "^1.11.13", diff --git a/web-app/src/App.jsx b/web-app/src/App.jsx index 8788652..c77f999 100644 --- a/web-app/src/App.jsx +++ b/web-app/src/App.jsx @@ -4,11 +4,11 @@ import {AuthProvider} from "./AuthContext.jsx"; import "/src/styles/app.css"; const App = () => ( - - + + - - + + ); -export default App +export default App; diff --git a/web-app/src/AppRouter.jsx b/web-app/src/AppRouter.jsx index f299e28..2de9be0 100644 --- a/web-app/src/AppRouter.jsx +++ b/web-app/src/AppRouter.jsx @@ -24,6 +24,6 @@ const AppRouter = () => ( }/> -) +); export default AppRouter; \ No newline at end of file diff --git a/web-app/src/AuthContext.jsx b/web-app/src/AuthContext.jsx index c76789f..b93215f 100644 --- a/web-app/src/AuthContext.jsx +++ b/web-app/src/AuthContext.jsx @@ -1,13 +1,16 @@ import {createContext, useState, useContext, useEffect} from "react"; import PropTypes from "prop-types"; -import loginUser from "./api/auth/LoginRequest.jsx"; +import loginUser from "./api/auth/loginRequest.jsx"; import {Spin} from "antd"; +import {useNavigate} from "react-router-dom"; +import createApi from "./core/axiosConfig.jsx"; const AuthContext = createContext(undefined); -export const AuthProvider = ({children}) => { +const AuthProvider = ({children}) => { const [user, setUser] = useState(null); const [isLoading, setIsLoading] = useState(true); + const navigate = useNavigate(); useEffect(() => { const token = localStorage.getItem("access_token"); @@ -17,9 +20,10 @@ export const AuthProvider = ({children}) => { setIsLoading(false); }, []); + const login = async (loginData) => { try { - const token = await loginUser(loginData); + const token = await loginUser(loginData, api); localStorage.setItem("access_token", token); setUser({token}); } catch (error) { @@ -28,6 +32,12 @@ export const AuthProvider = ({children}) => { } }; + const logoutAndRedirect = () => { + localStorage.removeItem("access_token"); + setUser(null); + navigate("/login"); + }; + const logout = () => { localStorage.removeItem("access_token"); setUser(null); @@ -37,8 +47,10 @@ export const AuthProvider = ({children}) => { return ; } + const api = createApi(logoutAndRedirect); + return ( - + {children} ); @@ -48,6 +60,8 @@ AuthProvider.propTypes = { children: PropTypes.node.isRequired, }; -export const useAuth = () => { +const useAuth = () => { return useContext(AuthContext); }; + +export {useAuth, AuthProvider}; \ No newline at end of file diff --git a/web-app/src/api/appointments/GetAllAppointments.jsx b/web-app/src/api/appointments/GetAllAppointments.jsx deleted file mode 100644 index 8b720f2..0000000 --- a/web-app/src/api/appointments/GetAllAppointments.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import axios from "axios"; -import CONFIG from "../../core/Config.jsx"; - - -const getAllAppointments = async (token) => { - try { - const response = await axios.get(`${CONFIG.BASE_URL}/appointments/`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - return response.data; - } catch (error) { - if (error.status === 403 || error.status === 401) { - throw new Error("Ошибка авторизации: пользователь неайден или токен недействителен"); - } - throw new Error(error.message); - } -}; - -export default getAllAppointments; \ No newline at end of file diff --git a/web-app/src/api/appointments/getAllAppointments.jsx b/web-app/src/api/appointments/getAllAppointments.jsx new file mode 100644 index 0000000..ae93746 --- /dev/null +++ b/web-app/src/api/appointments/getAllAppointments.jsx @@ -0,0 +1,8 @@ +import CONFIG from "../../core/сonfig.jsx"; + +const getAllAppointments = async (api) => { + const response = await api.get(`${CONFIG.BASE_URL}/appointments/`); + return response.data; +}; + +export default getAllAppointments; \ No newline at end of file diff --git a/web-app/src/api/auth/LoginRequest.jsx b/web-app/src/api/auth/LoginRequest.jsx deleted file mode 100644 index 19f88fa..0000000 --- a/web-app/src/api/auth/LoginRequest.jsx +++ /dev/null @@ -1,19 +0,0 @@ -import axios from "axios"; -import CONFIG from "../../core/Config.jsx"; - -const loginUser = async (loginData) => { - try { - const response = await axios.post(`${CONFIG.BASE_URL}/login/`, loginData, { - withCredentials: true, - }); - return response.data.access_token; - } catch (error) { - if (error.status === 403 || error.status === 401) { - throw new Error("Неверное имя пользователя или пароль") - } - - throw new Error(error.message); - } -}; - -export default loginUser; \ No newline at end of file diff --git a/web-app/src/api/auth/loginRequest.jsx b/web-app/src/api/auth/loginRequest.jsx new file mode 100644 index 0000000..84af9af --- /dev/null +++ b/web-app/src/api/auth/loginRequest.jsx @@ -0,0 +1,14 @@ +import CONFIG from "../../core/сonfig.jsx"; + +const loginUser = async (loginData, api) => { + const response = await api.post(`${CONFIG.BASE_URL}/login/`, loginData, { + withCredentials: true, + headers: { + 'Content-Type': 'application/json' + } + }); + + return response.data.access_token; +}; + +export default loginUser; \ No newline at end of file diff --git a/web-app/src/api/lens_issues/AddLensIssue.jsx b/web-app/src/api/lens_issues/AddLensIssue.jsx deleted file mode 100644 index 4517eea..0000000 --- a/web-app/src/api/lens_issues/AddLensIssue.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import axios from "axios"; -import CONFIG from "../../core/Config.jsx"; - - -const AddLensIssue = async (token, lens_issue) => { - try { - const response = await axios.post(`${CONFIG.BASE_URL}/lens_issues/`, lens_issue, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - return response.data; - } catch (error) { - if (error.status === 403 || error.status === 401) { - throw new Error("Ошибка авторизации: пользователь неайден или токен недействителен"); - } - throw new Error(error.message); - } -}; - -export default AddLensIssue; \ No newline at end of file diff --git a/web-app/src/api/lens_issues/GetAllLensIssues.jsx b/web-app/src/api/lens_issues/GetAllLensIssues.jsx deleted file mode 100644 index ea08802..0000000 --- a/web-app/src/api/lens_issues/GetAllLensIssues.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import axios from "axios"; -import CONFIG from "../../core/Config.jsx"; - - -const GetAllLensIssues = async (token) => { - try { - const response = await axios.get(`${CONFIG.BASE_URL}/lens_issues/`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - return response.data; - } catch (error) { - if (error.status === 403 || error.status === 401) { - throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); - } - throw new Error(error.message); - } -}; - -export default GetAllLensIssues; \ No newline at end of file diff --git a/web-app/src/api/lens_issues/addLensIssue.jsx b/web-app/src/api/lens_issues/addLensIssue.jsx new file mode 100644 index 0000000..22d933c --- /dev/null +++ b/web-app/src/api/lens_issues/addLensIssue.jsx @@ -0,0 +1,8 @@ +import CONFIG from "../../core/сonfig.jsx"; + +const AddLensIssue = async (api, lens_issue) => { + const response = await api.post(`${CONFIG.BASE_URL}/lens_issues/`, lens_issue); + return response.data; +}; + +export default AddLensIssue; \ No newline at end of file diff --git a/web-app/src/api/lens_issues/getAllLensIssues.jsx b/web-app/src/api/lens_issues/getAllLensIssues.jsx new file mode 100644 index 0000000..0745c28 --- /dev/null +++ b/web-app/src/api/lens_issues/getAllLensIssues.jsx @@ -0,0 +1,8 @@ +import CONFIG from "../../core/сonfig.jsx"; + +const GetAllLensIssues = async (api) => { + const response = await api.get(`${CONFIG.BASE_URL}/lens_issues/`); + return response.data; +}; + +export default GetAllLensIssues; \ No newline at end of file diff --git a/web-app/src/api/lens_types/GetAllLensTypes.jsx b/web-app/src/api/lens_types/GetAllLensTypes.jsx deleted file mode 100644 index 289a27d..0000000 --- a/web-app/src/api/lens_types/GetAllLensTypes.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import axios from "axios"; -import CONFIG from "../../core/Config.jsx"; - - -const getAllLensTypes = async (token) => { - try { - const response = await axios.get(`${CONFIG.BASE_URL}/lens_types/`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - return response.data; - } catch (error) { - if (error.status === 403 || error.status === 401) { - throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); - } - throw new Error(error.message); - } -}; - -export default getAllLensTypes; \ No newline at end of file diff --git a/web-app/src/api/lens_types/getAllLensTypes.jsx b/web-app/src/api/lens_types/getAllLensTypes.jsx new file mode 100644 index 0000000..54c9bc2 --- /dev/null +++ b/web-app/src/api/lens_types/getAllLensTypes.jsx @@ -0,0 +1,8 @@ +import CONFIG from "../../core/сonfig.jsx"; + +const getAllLensTypes = async (api) => { + const response = await api.get(`${CONFIG.BASE_URL}/lens_types/`); + return response.data; +}; + +export default getAllLensTypes; \ No newline at end of file diff --git a/web-app/src/api/lenses/AddLens.jsx b/web-app/src/api/lenses/AddLens.jsx deleted file mode 100644 index f9cf3c5..0000000 --- a/web-app/src/api/lenses/AddLens.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import CONFIG from "../../core/Config.jsx"; -import axios from "axios"; - - -const addLens = async (token, lens) => { - try { - const response = await axios.post(`${CONFIG.BASE_URL}/lenses/`, lens, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - return response.data; - } catch (error) { - if (error.status === 403 || error.status === 401) { - throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); - } - throw new Error(error.message); - } -}; - -export default addLens; \ No newline at end of file diff --git a/web-app/src/api/lenses/DeleteLens.jsx b/web-app/src/api/lenses/DeleteLens.jsx deleted file mode 100644 index b33b2e6..0000000 --- a/web-app/src/api/lenses/DeleteLens.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import axios from "axios"; -import CONFIG from "../../core/Config.jsx"; - - -const deleteLens = async (token, lens_id) => { - try { - const response = await axios.delete(`${CONFIG.BASE_URL}/lenses/${lens_id}/`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - return response.data; - } catch (error) { - if (error.status === 403 || error.status === 401) { - throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); - } - throw new Error(error.message); - } -}; - -export default deleteLens; \ No newline at end of file diff --git a/web-app/src/api/lenses/GetAllLenses.jsx b/web-app/src/api/lenses/GetAllLenses.jsx deleted file mode 100644 index 6421132..0000000 --- a/web-app/src/api/lenses/GetAllLenses.jsx +++ /dev/null @@ -1,20 +0,0 @@ -import axios from "axios"; -import CONFIG from "../../core/Config.jsx"; - -const getAllLenses = async (token) => { - try { - const response = await axios.get(`${CONFIG.BASE_URL}/lenses/`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - return response.data; - } catch (error) { - if (error.status === 403 || error.status === 401) { - throw Error("Ошибка авторизации: пользователь неяден или токен недействителен"); - } - throw Error(error.message); - } -}; - -export default getAllLenses; \ No newline at end of file diff --git a/web-app/src/api/lenses/GetNotIssuedLenses.jsx b/web-app/src/api/lenses/GetNotIssuedLenses.jsx deleted file mode 100644 index 1ff5835..0000000 --- a/web-app/src/api/lenses/GetNotIssuedLenses.jsx +++ /dev/null @@ -1,20 +0,0 @@ -import axios from "axios"; -import CONFIG from "../../core/Config.jsx"; - -const getNotIssuedLenses = async (token) => { - try { - const response = await axios.get(`${CONFIG.BASE_URL}/lenses/not_issued/`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - return response.data; - } catch (error) { - if (error.status === 403 || error.status === 401) { - throw Error("Ошибка авторизации: пользователь неяден или токен недействителен"); - } - throw Error(error.message); - } -}; - -export default getNotIssuedLenses; \ No newline at end of file diff --git a/web-app/src/api/lenses/UpdateLens.jsx b/web-app/src/api/lenses/UpdateLens.jsx deleted file mode 100644 index ad44ec2..0000000 --- a/web-app/src/api/lenses/UpdateLens.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import axios from "axios"; -import CONFIG from "../../core/Config.jsx"; - - -const updateLens = async (token, lensId, lensData) => { - try { - const response = await axios.put(`${CONFIG.BASE_URL}/lenses/${lensId}/`, lensData, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - return response.data; - } catch (error) { - if (error.status === 403 || error.status === 401) { - throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); - } - throw new Error(error.message); - } -}; - -export default updateLens; \ No newline at end of file diff --git a/web-app/src/api/lenses/addLens.jsx b/web-app/src/api/lenses/addLens.jsx new file mode 100644 index 0000000..f2a33d8 --- /dev/null +++ b/web-app/src/api/lenses/addLens.jsx @@ -0,0 +1,8 @@ +import CONFIG from "../../core/сonfig.jsx"; + +const addLens = async (api, lens) => { + const response = await api.post(`${CONFIG.BASE_URL}/lenses/`, lens); + return response.data; +}; + +export default addLens; \ No newline at end of file diff --git a/web-app/src/api/lenses/deleteLens.jsx b/web-app/src/api/lenses/deleteLens.jsx new file mode 100644 index 0000000..c4b4c6e --- /dev/null +++ b/web-app/src/api/lenses/deleteLens.jsx @@ -0,0 +1,8 @@ +import CONFIG from "../../core/сonfig.jsx"; + +const deleteLens = async (api, lens_id) => { + const response = await api.delete(`${CONFIG.BASE_URL}/lenses/${lens_id}/`); + return response.data; +}; + +export default deleteLens; \ No newline at end of file diff --git a/web-app/src/api/lenses/getAllLenses.jsx b/web-app/src/api/lenses/getAllLenses.jsx new file mode 100644 index 0000000..dc5afc0 --- /dev/null +++ b/web-app/src/api/lenses/getAllLenses.jsx @@ -0,0 +1,8 @@ +import CONFIG from "../../core/сonfig.jsx"; + +const getAllLenses = async (api) => { + const response = await api.get(`${CONFIG.BASE_URL}/lenses/`); + return response.data; +}; + +export default getAllLenses; \ No newline at end of file diff --git a/web-app/src/api/lenses/getNotIssuedLenses.jsx b/web-app/src/api/lenses/getNotIssuedLenses.jsx new file mode 100644 index 0000000..251c9ac --- /dev/null +++ b/web-app/src/api/lenses/getNotIssuedLenses.jsx @@ -0,0 +1,8 @@ +import CONFIG from "../../core/сonfig.jsx"; + +const getNotIssuedLenses = async (api) => { + const response = await api.get(`${CONFIG.BASE_URL}/lenses/not_issued/`); + return response.data; +}; + +export default getNotIssuedLenses; \ No newline at end of file diff --git a/web-app/src/api/lenses/updateLens.jsx b/web-app/src/api/lenses/updateLens.jsx new file mode 100644 index 0000000..08565a6 --- /dev/null +++ b/web-app/src/api/lenses/updateLens.jsx @@ -0,0 +1,8 @@ +import CONFIG from "../../core/сonfig.jsx"; + +const updateLens = async (api, lensId, lensData) => { + const response = await api.put(`${CONFIG.BASE_URL}/lenses/${lensId}/`, lensData); + return response.data; +}; + +export default updateLens; \ No newline at end of file diff --git a/web-app/src/api/patients/AddPatient.jsx b/web-app/src/api/patients/AddPatient.jsx deleted file mode 100644 index ac84f39..0000000 --- a/web-app/src/api/patients/AddPatient.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import axios from "axios"; -import CONFIG from "../../core/Config.jsx"; - - -const addPatient = async (token, patient) => { - try { - const response = await axios.post(`${CONFIG.BASE_URL}/patients/`, patient, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - return response.data; - } catch (error) { - if (error.status === 403 || error.status === 401) { - throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); - } - throw new Error(error.message); - } -}; - -export default addPatient; \ No newline at end of file diff --git a/web-app/src/api/patients/DeletePatient.jsx b/web-app/src/api/patients/DeletePatient.jsx deleted file mode 100644 index b27db48..0000000 --- a/web-app/src/api/patients/DeletePatient.jsx +++ /dev/null @@ -1,22 +0,0 @@ -import axios from "axios"; -import CONFIG from "../../core/Config.jsx"; - - -const deletePatient = async (token, patient_id) => { - try { - const response = await axios.delete(`${CONFIG.BASE_URL}/patients/${patient_id}/`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - return response.data; - } catch (error) { - if (error.status === 403 || error.status === 401) { - throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); - } - throw new Error(error.message); - } -} - - -export default deletePatient; \ No newline at end of file diff --git a/web-app/src/api/patients/GetAllPatients.jsx b/web-app/src/api/patients/GetAllPatients.jsx deleted file mode 100644 index 07df8d4..0000000 --- a/web-app/src/api/patients/GetAllPatients.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import axios from "axios"; -import CONFIG from "../../core/Config.jsx"; - - -const getAllPatients = async (token) => { - try { - const response = await axios.get(`${CONFIG.BASE_URL}/patients/`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - return response.data; - } catch (error) { - if (error.status === 403 || error.status === 401) { - throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); - } - throw new Error(error.message); - } -}; - -export default getAllPatients; \ No newline at end of file diff --git a/web-app/src/api/patients/UpdatePatient.jsx b/web-app/src/api/patients/UpdatePatient.jsx deleted file mode 100644 index c344c48..0000000 --- a/web-app/src/api/patients/UpdatePatient.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import axios from "axios"; -import CONFIG from "../../core/Config.jsx"; - - -const updatePatient = async (token, patientId, patientData) => { - try { - const response = await axios.put(`${CONFIG.BASE_URL}/patients/${patientId}/`, patientData, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - return response.data; - } catch (error) { - if (error.status === 403 || error.status === 401) { - throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); - } - throw new Error(error.message); - } -} - -export default updatePatient; \ No newline at end of file diff --git a/web-app/src/api/patients/addPatient.jsx b/web-app/src/api/patients/addPatient.jsx new file mode 100644 index 0000000..cc98bc3 --- /dev/null +++ b/web-app/src/api/patients/addPatient.jsx @@ -0,0 +1,8 @@ +import CONFIG from "../../core/сonfig.jsx"; + +const addPatient = async (api, patient) => { + const response = await api.post(`${CONFIG.BASE_URL}/patients/`, patient); + return response.data; +}; + +export default addPatient; \ No newline at end of file diff --git a/web-app/src/api/patients/deletePatient.jsx b/web-app/src/api/patients/deletePatient.jsx new file mode 100644 index 0000000..95b52a2 --- /dev/null +++ b/web-app/src/api/patients/deletePatient.jsx @@ -0,0 +1,8 @@ +import CONFIG from "../../core/сonfig.jsx"; + +const deletePatient = async (api, patient_id) => { + const response = await api.delete(`${CONFIG.BASE_URL}/patients/${patient_id}/`); + return response.data; +}; + +export default deletePatient; \ No newline at end of file diff --git a/web-app/src/api/patients/getAllPatients.jsx b/web-app/src/api/patients/getAllPatients.jsx new file mode 100644 index 0000000..a8e49f5 --- /dev/null +++ b/web-app/src/api/patients/getAllPatients.jsx @@ -0,0 +1,8 @@ +import CONFIG from "../../core/сonfig.jsx"; + +const getAllPatients = async (api) => { + const response = await api.get(`${CONFIG.BASE_URL}/patients/`); + return response.data; +}; + +export default getAllPatients; \ No newline at end of file diff --git a/web-app/src/api/patients/updatePatient.jsx b/web-app/src/api/patients/updatePatient.jsx new file mode 100644 index 0000000..b5f34fa --- /dev/null +++ b/web-app/src/api/patients/updatePatient.jsx @@ -0,0 +1,8 @@ +import CONFIG from "../../core/сonfig.jsx"; + +const updatePatient = async (api, patientId, patientData) => { + const response = await api.put(`${CONFIG.BASE_URL}/patients/${patientId}/`, patientData); + return response.data; +}; + +export default updatePatient; \ No newline at end of file diff --git a/web-app/src/api/scheduled_appointments/getAllScheduledAppointments.jsx b/web-app/src/api/scheduled_appointments/getAllScheduledAppointments.jsx new file mode 100644 index 0000000..1edaf52 --- /dev/null +++ b/web-app/src/api/scheduled_appointments/getAllScheduledAppointments.jsx @@ -0,0 +1,8 @@ +import CONFIG from "../../core/сonfig.jsx"; + +const getAllScheduledAppointments = async (api) => { + const response = await api.get(`${CONFIG.BASE_URL}/scheduled_appointments/`); + return response.data; +}; + +export default getAllScheduledAppointments; \ No newline at end of file diff --git a/web-app/src/api/set_content/AddSetContent.jsx b/web-app/src/api/set_content/AddSetContent.jsx deleted file mode 100644 index 4120cca..0000000 --- a/web-app/src/api/set_content/AddSetContent.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import axios from "axios"; -import CONFIG from "../../core/Config.jsx"; - - -const addSetContent = async (token, set_content, set_id) => { - try { - const response = await axios.post(`${CONFIG.BASE_URL}/set_content/${set_id}/`, set_content, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - return response.data; - } catch (error) { - if (error.status === 403 || error.status === 401) { - throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); - } - throw new Error(error.message); - } -}; - -export default addSetContent; \ No newline at end of file diff --git a/web-app/src/api/set_content/GetSetContentBySetId.jsx b/web-app/src/api/set_content/GetSetContentBySetId.jsx deleted file mode 100644 index 9640287..0000000 --- a/web-app/src/api/set_content/GetSetContentBySetId.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import axios from "axios"; -import CONFIG from "../../core/Config.jsx"; - - -const getSetContentBySetId = async (token, set_id) => { - try { - const response = await axios.get(`${CONFIG.BASE_URL}/set_content/${set_id}/`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - return response.data; - } catch (error) { - if (error.status === 403 || error.status === 401) { - throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); - } - throw new Error(error.message); - } -}; - -export default getSetContentBySetId; \ No newline at end of file diff --git a/web-app/src/api/set_content/UpdateSetContent.jsx b/web-app/src/api/set_content/UpdateSetContent.jsx deleted file mode 100644 index 08b5dec..0000000 --- a/web-app/src/api/set_content/UpdateSetContent.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import axios from "axios"; -import CONFIG from "../../core/Config.jsx"; - - -const updateSetContent = async (token, set_content, set_id) => { - try { - const response = await axios.put(`${CONFIG.BASE_URL}/set_content/${set_id}/`, set_content, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - return response.data; - } catch (error) { - if (error.status === 403 || error.status === 401) { - throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); - } - throw new Error(error.message); - } -}; - -export default updateSetContent; \ No newline at end of file diff --git a/web-app/src/api/set_content/addSetContent.jsx b/web-app/src/api/set_content/addSetContent.jsx new file mode 100644 index 0000000..9fbd5cf --- /dev/null +++ b/web-app/src/api/set_content/addSetContent.jsx @@ -0,0 +1,8 @@ +import CONFIG from "../../core/сonfig.jsx"; + +const addSetContent = async (api, set_content, set_id) => { + const response = await api.post(`${CONFIG.BASE_URL}/set_content/${set_id}/`, set_content); + return response.data; +}; + +export default addSetContent; \ No newline at end of file diff --git a/web-app/src/api/set_content/getSetContentBySetId.jsx b/web-app/src/api/set_content/getSetContentBySetId.jsx new file mode 100644 index 0000000..4223663 --- /dev/null +++ b/web-app/src/api/set_content/getSetContentBySetId.jsx @@ -0,0 +1,8 @@ +import CONFIG from "../../core/сonfig.jsx"; + +const getSetContentBySetId = async (api, set_id) => { + const response = await api.get(`${CONFIG.BASE_URL}/set_content/${set_id}/`); + return response.data; +}; + +export default getSetContentBySetId; \ No newline at end of file diff --git a/web-app/src/api/set_content/updateSetContent.jsx b/web-app/src/api/set_content/updateSetContent.jsx new file mode 100644 index 0000000..2b8c6dc --- /dev/null +++ b/web-app/src/api/set_content/updateSetContent.jsx @@ -0,0 +1,8 @@ +import CONFIG from "../../core/сonfig.jsx"; + +const updateSetContent = async (api, set_content, set_id) => { + const response = await api.put(`${CONFIG.BASE_URL}/set_content/${set_id}/`, set_content); + return response.data; +}; + +export default updateSetContent; \ No newline at end of file diff --git a/web-app/src/api/sets/AddSet.jsx b/web-app/src/api/sets/AddSet.jsx deleted file mode 100644 index 900bb75..0000000 --- a/web-app/src/api/sets/AddSet.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import axios from "axios"; -import CONFIG from "../../core/Config.jsx"; - - -const addSet = async (token, set) => { - try { - const response = await axios.post(`${CONFIG.BASE_URL}/sets/`, set, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - return response.data; - } catch (error) { - if (error.status === 403 || error.status === 401) { - throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); - } - throw new Error(error.message); - } -}; - -export default addSet; \ No newline at end of file diff --git a/web-app/src/api/sets/AppendLensesFromSet.jsx b/web-app/src/api/sets/AppendLensesFromSet.jsx deleted file mode 100644 index 13112cc..0000000 --- a/web-app/src/api/sets/AppendLensesFromSet.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import axios from "axios"; -import CONFIG from "../../core/Config.jsx"; - - -const appendLensesFromSet = async (token, set_id) => { - try { - const response = await axios.post(`${CONFIG.BASE_URL}/sets/append_lenses/${set_id}/`, {}, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - return response.data; - } catch (error) { - if (error.status === 403 || error.status === 401) { - throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); - } - throw new Error(error.message); - } -}; - -export default appendLensesFromSet; \ No newline at end of file diff --git a/web-app/src/api/sets/DeleteSet.jsx b/web-app/src/api/sets/DeleteSet.jsx deleted file mode 100644 index acc5664..0000000 --- a/web-app/src/api/sets/DeleteSet.jsx +++ /dev/null @@ -1,20 +0,0 @@ -import axios from "axios"; -import CONFIG from "../../core/Config.jsx"; - -const deleteSet = async (token, set_id) => { - try { - const response = await axios.delete(`${CONFIG.BASE_URL}/sets/${set_id}/`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - return response.data; - } catch (error) { - if (error.status === 403 || error.status === 401) { - throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); - } - throw new Error(error.message); - } -}; - -export default deleteSet; \ No newline at end of file diff --git a/web-app/src/api/sets/GetAllSets.jsx b/web-app/src/api/sets/GetAllSets.jsx deleted file mode 100644 index b22182e..0000000 --- a/web-app/src/api/sets/GetAllSets.jsx +++ /dev/null @@ -1,20 +0,0 @@ -import axios from "axios"; -import CONFIG from "../../core/Config.jsx"; - -const getAllSets = async (token) => { - try { - const response = await axios.get(`${CONFIG.BASE_URL}/sets/`, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - return response.data; - } catch (error) { - if (error.status === 403 || error.status === 401) { - throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); - } - throw new Error(error.message); - } -}; - -export default getAllSets; \ No newline at end of file diff --git a/web-app/src/api/sets/UpdateSet.jsx b/web-app/src/api/sets/UpdateSet.jsx deleted file mode 100644 index 68e2cf4..0000000 --- a/web-app/src/api/sets/UpdateSet.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import axios from "axios"; -import CONFIG from "../../core/Config.jsx"; - - -const updateSet = async (token, set_id, set) => { - try { - const response = await axios.put(`${CONFIG.BASE_URL}/sets/${set_id}/`, set, { - headers: { - Authorization: `Bearer ${token}`, - }, - }); - return response.data; - } catch (error) { - if (error.status === 403 || error.status === 401) { - throw new Error("Ошибка авторизации: пользователь не найден или токен недействителен"); - } - throw new Error(error.message); - } -}; - -export default updateSet; \ No newline at end of file diff --git a/web-app/src/api/sets/addSet.jsx b/web-app/src/api/sets/addSet.jsx new file mode 100644 index 0000000..19e7f09 --- /dev/null +++ b/web-app/src/api/sets/addSet.jsx @@ -0,0 +1,8 @@ +import CONFIG from "../../core/сonfig.jsx"; + +const addSet = async (api, set) => { + const response = await api.post(`${CONFIG.BASE_URL}/sets/`, set); + return response.data; +}; + +export default addSet; \ No newline at end of file diff --git a/web-app/src/api/sets/appendLensesFromSet.jsx b/web-app/src/api/sets/appendLensesFromSet.jsx new file mode 100644 index 0000000..498c20b --- /dev/null +++ b/web-app/src/api/sets/appendLensesFromSet.jsx @@ -0,0 +1,8 @@ +import CONFIG from "../../core/сonfig.jsx"; + +const appendLensesFromSet = async (api, set_id) => { + const response = await api.post(`${CONFIG.BASE_URL}/sets/append_lenses/${set_id}/`); + return response.data; +}; + +export default appendLensesFromSet; \ No newline at end of file diff --git a/web-app/src/api/sets/deleteSet.jsx b/web-app/src/api/sets/deleteSet.jsx new file mode 100644 index 0000000..885f32b --- /dev/null +++ b/web-app/src/api/sets/deleteSet.jsx @@ -0,0 +1,8 @@ +import CONFIG from "../../core/сonfig.jsx"; + +const deleteSet = async (api, set_id) => { + const response = await api.delete(`${CONFIG.BASE_URL}/sets/${set_id}/`); + return response.data; +}; + +export default deleteSet; \ No newline at end of file diff --git a/web-app/src/api/sets/getAllSets.jsx b/web-app/src/api/sets/getAllSets.jsx new file mode 100644 index 0000000..ae48dc2 --- /dev/null +++ b/web-app/src/api/sets/getAllSets.jsx @@ -0,0 +1,8 @@ +import CONFIG from "../../core/сonfig.jsx"; + +const getAllSets = async (api) => { + const response = await api.get(`${CONFIG.BASE_URL}/sets/`); + return response.data; +}; + +export default getAllSets; \ No newline at end of file diff --git a/web-app/src/api/sets/updateSet.jsx b/web-app/src/api/sets/updateSet.jsx new file mode 100644 index 0000000..30fedea --- /dev/null +++ b/web-app/src/api/sets/updateSet.jsx @@ -0,0 +1,8 @@ +import CONFIG from "../../core/сonfig.jsx"; + +const updateSet = async (api, set_id, set) => { + const response = await api.put(`${CONFIG.BASE_URL}/sets/${set_id}/`, set); + return response.data; +}; + +export default updateSet; \ No newline at end of file diff --git a/web-app/src/components/LoadingIndicator.jsx b/web-app/src/components/LoadingIndicator.jsx new file mode 100644 index 0000000..ff51c1b --- /dev/null +++ b/web-app/src/components/LoadingIndicator.jsx @@ -0,0 +1,18 @@ +import {Spin} from "antd"; +import {LoadingOutlined} from "@ant-design/icons"; + + +const LoadingIndicator = () => { + return ( +
+ }/> +
+ ) +}; + +export default LoadingIndicator; \ No newline at end of file diff --git a/web-app/src/components/PrivateRoute.jsx b/web-app/src/components/PrivateRoute.jsx index e9553ad..f6e6b84 100644 --- a/web-app/src/components/PrivateRoute.jsx +++ b/web-app/src/components/PrivateRoute.jsx @@ -11,4 +11,5 @@ const PrivateRoute = () => { return ; }; + export default PrivateRoute; diff --git a/web-app/src/components/SelectViewMode.jsx b/web-app/src/components/SelectViewMode.jsx index 2f073ff..cc48c28 100644 --- a/web-app/src/components/SelectViewMode.jsx +++ b/web-app/src/components/SelectViewMode.jsx @@ -1,6 +1,7 @@ import {BuildOutlined, TableOutlined} from "@ant-design/icons"; import {Select, Tooltip} from "antd"; import PropTypes from "prop-types"; +import {cacheInfo} from "../utils/cachedInfoUtils.jsx"; const {Option} = Select; @@ -13,7 +14,7 @@ const SelectViewMode = ({viewMode, setViewMode, localStorageKey, toolTipText, vi value={viewMode} onChange={value => { setViewMode(value); - localStorage.setItem(localStorageKey, value); + cacheInfo(localStorageKey, value); }} style={{width: "100%"}} > diff --git a/web-app/src/components/lens_issues/LensIssueFormModal.jsx b/web-app/src/components/lens_issues/LensIssueFormModal.jsx index 241687e..6b7abd1 100644 --- a/web-app/src/components/lens_issues/LensIssueFormModal.jsx +++ b/web-app/src/components/lens_issues/LensIssueFormModal.jsx @@ -3,15 +3,15 @@ import { Modal, Input, Button, notification, Typography, Collapse, Steps, Row, Alert, Col, DatePicker, Spin, Grid } from "antd"; import PropTypes from "prop-types"; -import getAllPatients from "../../api/patients/GetAllPatients.jsx"; +import getAllPatients from "../../api/patients/getAllPatients.jsx"; import {useAuth} from "../../AuthContext.jsx"; import dayjs from "dayjs"; -import getNotIssuedLenses from "../../api/lenses/GetNotIssuedLenses.jsx"; +import getNotIssuedLenses from "../../api/lenses/getNotIssuedLenses.jsx"; const {useBreakpoint} = Grid; const LensIssueFormModal = ({visible, onCancel, onSubmit}) => { - const {user} = useAuth(); + const {api} = useAuth(); const screens = useBreakpoint(); const [patients, setPatients] = useState([]); @@ -37,7 +37,7 @@ const LensIssueFormModal = ({visible, onCancel, onSubmit}) => { const fetchPatients = async () => { try { - const data = await getAllPatients(user.token); + const data = await getAllPatients(api); setPatients(data); } catch (error) { console.error(error); @@ -49,7 +49,7 @@ const LensIssueFormModal = ({visible, onCancel, onSubmit}) => { const fetchLenses = async () => { try { - const data = await getNotIssuedLenses(user.token); + const data = await getNotIssuedLenses(api); setLenses(data); } catch (error) { console.error(error); @@ -83,17 +83,17 @@ const LensIssueFormModal = ({visible, onCancel, onSubmit}) => { }); const patientsItems = filteredPatients.map((patient) => ({ - key: patient.id, - label: `${patient.last_name} ${patient.first_name} (${new Date(patient.birthday).toLocaleDateString("ru-RU")})`, - children:
-

Пациент: {patient.last_name} {patient.first_name}

-

Дата рождения: {new Date(patient.birthday).toLocaleDateString("ru-RU")}

-

Диагноз: {patient.diagnosis}

-

Email: {patient.email}

-

Телефон: {patient.phone}

- -
, - })); + key: patient.id, + label: `${patient.last_name} ${patient.first_name} (${new Date(patient.birthday).toLocaleDateString("ru-RU")})`, + children:
+

Пациент: {patient.last_name} {patient.first_name}

+

Дата рождения: {new Date(patient.birthday).toLocaleDateString("ru-RU")}

+

Диагноз: {patient.diagnosis}

+

Email: {patient.email}

+

Телефон: {patient.phone}

+ +
, + })); const filteredLenses = lenses.filter((lens) => { const searchLower = searchLensString.toLowerCase(); @@ -104,19 +104,19 @@ const LensIssueFormModal = ({visible, onCancel, onSubmit}) => { }) const lensesItems = filteredLenses.map((lens) => ({ - key: lens.id, label: `Линза ${lens.side} ${lens.diameter} мм`, children:
-

Диаметр: {lens.diameter}

-

Тор: {lens.tor}

-

Пресетная рефракция: {lens.preset_refraction}

-

Диаметр: {lens.diameter}

-

FVC: {lens.fvc}

-

Острота зрения (Trial): {lens.trial}

-

Периферийная торичность: {lens.periphery_toricity}

-

Сторона: {lens.side}

-

Esa: {lens.esa}

- -
, - })); + key: lens.id, label: `Линза ${lens.side} ${lens.diameter} мм`, children:
+

Диаметр: {lens.diameter}

+

Тор: {lens.tor}

+

Пресетная рефракция: {lens.preset_refraction}

+

Диаметр: {lens.diameter}

+

FVC: {lens.fvc}

+

Острота зрения (Trial): {lens.trial}

+

Периферийная торичность: {lens.periphery_toricity}

+

Сторона: {lens.side}

+

Esa: {lens.esa}

+ +
, + })); const SelectPatientStep = () => { return selectedPatient ? ( @@ -135,24 +135,96 @@ const LensIssueFormModal = ({visible, onCancel, onSubmit}) => { Выбрать другого пациента ) : (<> - setSearchPatientString(e.target.value)} - style={{marginBottom: 16}} - allowClear - /> + setSearchPatientString(e.target.value)} + style={{marginBottom: 16}} + allowClear + /> -
- -
- ) +
+ +
+ ) }; const SelectLensStep = () => { return selectedLens ? (
+ + {selectedLens.diameter} {selectedLens.tor} {selectedLens.preset_refraction} + +

Диаметр: {selectedLens.diameter}

+

Тор: {selectedLens.tor}

+

Пресетная рефракция: {selectedLens.preset_refraction}

+

Диаметр: {selectedLens.diameter}

+

FVC: {selectedLens.fvc}

+

Острота зрения (Trial): {selectedLens.trial}

+

Периферийная торичность: {selectedLens.periphery_toricity}

+

Сторона: {selectedLens.side}

+

Esa: {selectedLens.esa}

+ +
) : (<> + setSearchLensString(e.target.value)} + style={{marginBottom: 16}} + allowClear + /> + +
+ +
+ ) + }; + + const ConfirmStep = () => { + return (<> + + + + + + Дата выдачи: {issueDate?.toDate().toLocaleDateString("ru-RU")} + + + + setIssueDate(date)} + format="DD.MM.YYYY" + style={{width: "100%"}} + /> + + + +
+ + {selectedPatient.last_name} {selectedPatient.first_name} + +

Дата рождения: {new Date(selectedPatient.birthday).toLocaleDateString("ru-RU")}

+

Email: {selectedPatient.email}

+

Телефон: {selectedPatient.phone}

+

Линза: {selectedLens.diameter} {selectedLens.tor} {selectedLens.preset_refraction}

+
+ +
{selectedLens.diameter} {selectedLens.tor} {selectedLens.preset_refraction} @@ -165,80 +237,8 @@ const LensIssueFormModal = ({visible, onCancel, onSubmit}) => {

Периферийная торичность: {selectedLens.periphery_toricity}

Сторона: {selectedLens.side}

Esa: {selectedLens.esa}

- -
) : (<> - setSearchLensString(e.target.value)} - style={{marginBottom: 16}} - allowClear - /> - -
- -
- ) - }; - - const ConfirmStep = () => { - return (<> - - - - - - Дата выдачи: {issueDate?.toDate().toLocaleDateString("ru-RU")} - - - - setIssueDate(date)} - format="DD.MM.YYYY" - style={{width: "100%"}} - /> - - - -
- - {selectedPatient.last_name} {selectedPatient.first_name} - -

Дата рождения: {new Date(selectedPatient.birthday).toLocaleDateString("ru-RU")}

-

Email: {selectedPatient.email}

-

Телефон: {selectedPatient.phone}

-

Линза: {selectedLens.diameter} {selectedLens.tor} {selectedLens.preset_refraction}

-
- -
- - {selectedLens.diameter} {selectedLens.tor} {selectedLens.preset_refraction} - -

Диаметр: {selectedLens.diameter}

-

Тор: {selectedLens.tor}

-

Пресетная рефракция: {selectedLens.preset_refraction}

-

Диаметр: {selectedLens.diameter}

-

FVC: {selectedLens.fvc}

-

Острота зрения (Trial): {selectedLens.trial}

-

Периферийная торичность: {selectedLens.periphery_toricity}

-

Сторона: {selectedLens.side}

-

Esa: {selectedLens.esa}

-
- ); + + ); }; const steps = [{ @@ -266,61 +266,61 @@ const LensIssueFormModal = ({visible, onCancel, onSubmit}) => { }; return ( { - setSelectedPatient(null); - setSelectedLens(null); - setCurrentStep(0); - setIssueDate(dayjs(new Date())); - onCancel(); - }} - footer={null} - maskClosable={false} - width={!screens.xs ? 700 : "90%"} - centered + title="Выдача линзы пациенту" + open={visible} + onCancel={() => { + setSelectedPatient(null); + setSelectedLens(null); + setCurrentStep(0); + setIssueDate(dayjs(new Date())); + onCancel(); + }} + footer={null} + maskClosable={false} + width={!screens.xs ? 700 : "90%"} + centered + > + {loading ? (
+ +
) : (
+ {steps[currentStep].content} +
)} + + + {!screens.xs && ()} + + - {loading ? (
- -
) : (
- {steps[currentStep].content} -
)} - - - {!screens.xs && ()} - - setCurrentStep(currentStep - 1)} + disabled={!isActivePrevButton()} > - - - -
); + Назад + + + + ); }; LensIssueFormModal.propTypes = { diff --git a/web-app/src/components/lenses/LensFormModal.jsx b/web-app/src/components/lenses/LensFormModal.jsx index 3438904..4d0dbdb 100644 --- a/web-app/src/components/lenses/LensFormModal.jsx +++ b/web-app/src/components/lenses/LensFormModal.jsx @@ -1,12 +1,12 @@ import {Col, Form, InputNumber, Modal, notification, Row, Select} from "antd"; import {useEffect, useState} from "react"; import PropTypes from "prop-types"; -import getAllLensTypes from "../../api/lens_types/GetAllLensTypes.jsx"; +import getAllLensTypes from "../../api/lens_types/getAllLensTypes.jsx"; import {useAuth} from "../../AuthContext.jsx"; const LensFormModal = ({visible, onCancel, onSubmit, lens}) => { - const {user} = useAuth(); + const {api} = useAuth(); const [form] = Form.useForm(); const [lensTypes, setLensTypes] = useState([]); @@ -27,7 +27,7 @@ const LensFormModal = ({visible, onCancel, onSubmit, lens}) => { const fetchLensTypes = async () => { try { - const data = await getAllLensTypes(user.token); + const data = await getAllLensTypes(api); setLensTypes(data); } catch (error) { console.log(error); @@ -76,7 +76,7 @@ const LensFormModal = ({visible, onCancel, onSubmit, lens}) => { @@ -89,7 +89,7 @@ const LensFormModal = ({visible, onCancel, onSubmit, lens}) => { @@ -104,7 +104,7 @@ const LensFormModal = ({visible, onCancel, onSubmit, lens}) => { @@ -117,7 +117,7 @@ const LensFormModal = ({visible, onCancel, onSubmit, lens}) => { @@ -132,7 +132,7 @@ const LensFormModal = ({visible, onCancel, onSubmit, lens}) => { @@ -145,7 +145,7 @@ const LensFormModal = ({visible, onCancel, onSubmit, lens}) => { @@ -160,7 +160,7 @@ const LensFormModal = ({visible, onCancel, onSubmit, lens}) => { diff --git a/web-app/src/components/sets/SetFormModal.jsx b/web-app/src/components/sets/SetFormModal.jsx index 07bc8d4..38805f6 100644 --- a/web-app/src/components/sets/SetFormModal.jsx +++ b/web-app/src/components/sets/SetFormModal.jsx @@ -2,15 +2,15 @@ import {useState, useEffect} from "react"; import {Modal, Button, Form, Input, Table, InputNumber, Select, Space, notification} from "antd"; import {PlusOutlined, DeleteOutlined} from "@ant-design/icons"; import axios from "axios"; -import getAllLensTypes from "../../api/lens_types/GetAllLensTypes.jsx"; +import getAllLensTypes from "../../api/lens_types/getAllLensTypes.jsx"; import {useAuth} from "../../AuthContext.jsx"; import PropTypes from "prop-types"; -import getSetContentBySetId from "../../api/set_content/GetSetContentBySetId.jsx"; +import getSetContentBySetId from "../../api/set_content/getSetContentBySetId.jsx"; const {Option} = Select; const SetFormModal = ({visible, onCancel, setData, onSubmit}) => { - const {user} = useAuth(); + const {api} = useAuth(); const [form] = Form.useForm(); const [content, setContent] = useState([]); @@ -33,7 +33,7 @@ const SetFormModal = ({visible, onCancel, setData, onSubmit}) => { if (!setData) return; try { - const data = await getSetContentBySetId(user.token, setData.id); + const data = await getSetContentBySetId(api, setData.id); setContent(data); } catch (error) { console.log(error); @@ -47,7 +47,7 @@ const SetFormModal = ({visible, onCancel, setData, onSubmit}) => { const fetchLensTypes = async () => { try { - const data = await getAllLensTypes(user.token); + const data = await getAllLensTypes(api); setLensTypes(data); } catch (error) { console.log(error); @@ -278,5 +278,4 @@ SetFormModal.propTypes = { }), } - export default SetFormModal; diff --git a/web-app/src/components/sets/SetListCard.jsx b/web-app/src/components/sets/SetListCard.jsx index 3fa9316..c84614a 100644 --- a/web-app/src/components/sets/SetListCard.jsx +++ b/web-app/src/components/sets/SetListCard.jsx @@ -7,7 +7,6 @@ const SetListCard = ({set, handleEditSet, handleDeleteSet, handleAppendSet}) => handleDeleteSet(set.id); }; - const appendSet = () => { handleAppendSet(set); }; diff --git a/web-app/src/core/axiosConfig.jsx b/web-app/src/core/axiosConfig.jsx new file mode 100644 index 0000000..04b0d4c --- /dev/null +++ b/web-app/src/core/axiosConfig.jsx @@ -0,0 +1,58 @@ +import axios from "axios"; +import CONFIG from "./сonfig.jsx"; +import {notification} from "antd"; + +const createApi = (logoutAndRedirect) => { + const api = axios.create({ + baseURL: CONFIG.BASE_URL, + }); + + api.interceptors.request.use(config => { + const token = localStorage.getItem('access_token'); + + if (token) { + config.headers.Authorization = `Bearer ${token}`; + } + + return config; + }); + + api.interceptors.response.use( + (response) => response, + (error) => { + if (error.response) { + const {status} = error.response; + + if (status === 401 || status === 403) { + notification.error({ + message: "Ошибка авторизации", + description: "Пользователь не найден или токен недействителен", + }); + + logoutAndRedirect(); + } else { + notification.error({ + message: "Ошибка API", + description: error.response.data.message || "Что-то пошло не так", + }); + } + } else if (error.request) { + notification.error({ + message: "Ошибка соединения", + description: "Сервер не отвечает. Проверьте соединение с сетью.", + }); + } else { + notification.error({ + message: "Неизвестная ошибка", + description: "Проверьте соединение с сетью.", + }); + } + + return Promise.reject(error); + } + ); + + return api; +}; + +export default createApi; diff --git a/web-app/src/core/Config.jsx b/web-app/src/core/сonfig.jsx similarity index 100% rename from web-app/src/core/Config.jsx rename to web-app/src/core/сonfig.jsx diff --git a/web-app/src/layouts/AppointmentsLayout.jsx b/web-app/src/layouts/AppointmentsLayout.jsx index 5355f76..425fab3 100644 --- a/web-app/src/layouts/AppointmentsLayout.jsx +++ b/web-app/src/layouts/AppointmentsLayout.jsx @@ -1,34 +1,182 @@ -import {useAuth} from "../AuthContext.jsx"; import {useEffect, useState} from "react"; -import getAllAppointments from "../api/appointments/GetAllAppointments.jsx"; -import {notification, Tabs} from "antd"; +import {Button, Grid, notification, Tabs, Typography} from "antd"; +import {Splitter} from "antd"; +import { + CalendarOutlined, TableOutlined, MenuFoldOutlined, MenuUnfoldOutlined, +} from "@ant-design/icons"; import AppointmentsCalendarPage from "../pages/appointments_layout/AppointmentsCalendarPage.jsx"; -import {CalendarOutlined, TableOutlined} from "@ant-design/icons"; import AppointmentsTablePage from "../pages/appointments_layout/AppointmentsTablePage.jsx"; +import getAllAppointments from "../api/appointments/getAllAppointments.jsx"; +import getAllScheduledAppointments from "../api/scheduled_appointments/getAllScheduledAppointments.jsx"; +import {useAuth} from "../AuthContext.jsx"; +import LoadingIndicator from "../components/LoadingIndicator.jsx"; +import {cacheInfo, getCachedInfo, getCacheTimestamp} from "../utils/cachedInfoUtils.jsx"; +const {useBreakpoint} = Grid; const AppointmentsLayout = () => { - const items = [ - { - key: '1', - label: 'Календарь приемов', - children: , - icon: , - }, - { - key: '2', - label: 'Таблица приемов', - children: , - icon: , + const [collapsed, setCollapsed] = useState(true); + const [siderWidth, setSiderWidth] = useState(250); + const [hovered, setHovered] = useState(false); + + const screens = useBreakpoint(); + const {api} = useAuth(); + + const [loading, setLoading] = useState(true); + + const [appointments, setAppointments] = useState([]); + const [scheduledAppointments, setScheduledAppointments] = useState([]); + + const toggleSider = () => setCollapsed(!collapsed); + + useEffect(() => { + loadDataWithCache(); + }, []); + + useEffect(() => { + const interval = setInterval(loadData, 5000); + return () => clearInterval(interval); + }, []); + + const loadData = async () => { + await fetchAppointments(); + await fetchScheduledAppointments(); + setLoading(false); + }; + + const loadDataWithCache = async () => { + await fetchAppointmentsWithCache(); + await fetchScheduledAppointmentsWithCache(); + }; + + const fetchAppointmentsWithCache = async () => { + const cachedData = getCachedInfo("appointmentsData"); + const cacheTimestamp = getCacheTimestamp("appointmentsData"); + + if (cachedData && cacheTimestamp && (Date.now() - cacheTimestamp) < 60 * 1000) { + setAppointments(cachedData); + return; } - ] + + await fetchAppointments(); + }; + + const fetchAppointments = async () => { + try { + const data = await getAllAppointments(api); + setAppointments(data); + + cacheInfo("appointmentsData", data); + } catch (error) { + console.log(error); + notification.error({ + message: "Ошибка загрузки данных", description: "Проверьте подключение к сети.", placement: "topRight", + }); + } + }; + + const fetchScheduledAppointmentsWithCache = async () => { + const cachedData = getCachedInfo("scheduledAppointmentsData"); + const cacheTimestamp = getCacheTimestamp("scheduledAppointmentsData"); + + if (cachedData && cacheTimestamp && (Date.now() - cacheTimestamp) < 60 * 1000) { + setScheduledAppointments(cachedData); + return; + } + + await fetchScheduledAppointments(); + }; + + const fetchScheduledAppointments = async () => { + try { + const data = await getAllScheduledAppointments(api); + setScheduledAppointments(data); + + cacheInfo("scheduledAppointmentsData", data); + } catch (error) { + console.log(error); + notification.error({ + message: "Ошибка загрузки данных", description: "Проверьте подключение к сети.", placement: "topRight", + }); + } + }; + + const items = [{ + key: "1", + label: "Календарь приемов", + children: , + icon: , + }, { + key: "2", + label: "Таблица приемов", + children: , + icon: , + },]; + + if (loading) { + return () + } return ( - + <> + + + + + + {!collapsed && !screens.xs && ( + + + Предстоящие события + +

Здесь будут предстоящие приемы...

+
+ )} +
+
setHovered(true)} + onMouseLeave={() => setHovered(false)} + > + +
+ ); }; -export default AppointmentsLayout; \ No newline at end of file +export default AppointmentsLayout; diff --git a/web-app/src/pages/IssuesPage.jsx b/web-app/src/pages/IssuesPage.jsx index 9c5e3ae..22ff090 100644 --- a/web-app/src/pages/IssuesPage.jsx +++ b/web-app/src/pages/IssuesPage.jsx @@ -1,6 +1,5 @@ import { notification, - Spin, Table, Input, Row, @@ -12,21 +11,23 @@ import { Typography, Timeline, Grid, Pagination } from "antd"; -import getAllLensIssues from "../api/lens_issues/GetAllLensIssues.jsx"; +import getAllLensIssues from "../api/lens_issues/getAllLensIssues.jsx"; import {useEffect, useState} from "react"; import {useAuth} from "../AuthContext.jsx"; -import {DatabaseOutlined, LoadingOutlined, PlusOutlined, UnorderedListOutlined} from "@ant-design/icons"; +import {DatabaseOutlined, PlusOutlined, UnorderedListOutlined} from "@ant-design/icons"; import LensIssueViewModal from "../components/lens_issues/LensIssueViewModal.jsx"; import dayjs from "dayjs"; import LensIssueFormModal from "../components/lens_issues/LensIssueFormModal.jsx"; -import addLensIssue from "../api/lens_issues/AddLensIssue.jsx"; +import addLensIssue from "../api/lens_issues/addLensIssue.jsx"; import SelectViewMode from "../components/SelectViewMode.jsx"; +import LoadingIndicator from "../components/LoadingIndicator.jsx"; +import {getCachedInfo, getCacheTimestamp} from "../utils/cachedInfoUtils.jsx"; const {Title} = Typography; const {useBreakpoint} = Grid; const IssuesPage = () => { - const {user} = useAuth(); + const {api} = useAuth(); const screens = useBreakpoint(); const [loading, setLoading] = useState(true); @@ -56,13 +57,13 @@ const IssuesPage = () => { const intervalId = setInterval(fetchLensIssues, 5000); return () => clearInterval(intervalId); } - }, [user, isModalVisible]); + }, [isModalVisible]); const fetchLensIssuesWithCache = async () => { - const cachedData = localStorage.getItem("lensIssuesData"); - const cacheTimestamp = localStorage.getItem("lensIssuesTimestamp"); + const cachedData = getCachedInfo("lensIssuesData"); + const cacheTimestamp = getCacheTimestamp("lensIssuesData"); - if (cachedData && cacheTimestamp && (Date.now() - parseInt(cacheTimestamp)) < 60 * 1000) { + if (cachedData && cacheTimestamp && (Date.now() - cacheTimestamp) < 60 * 1000) { setLensIssues(JSON.parse(cachedData)); setLoading(false); } else { @@ -71,7 +72,7 @@ const IssuesPage = () => { }; const fetchViewModeFromCache = () => { - const cachedViewMode = localStorage.getItem("viewModeIssues"); + const cachedViewMode = getCachedInfo("viewModeIssues"); if (cachedViewMode) { setViewMode(cachedViewMode); } @@ -92,7 +93,7 @@ const IssuesPage = () => { const handleSubmitFormModal = async (issue_date, patient_id, lens_id) => { try { - await addLensIssue(user.token, {issue_date, patient_id, lens_id}); + await addLensIssue(api, {issue_date, patient_id, lens_id}); setIsModalVisible(false); notification.success({ message: "Линза выдана", @@ -112,7 +113,7 @@ const IssuesPage = () => { const fetchLensIssues = async () => { try { - const data = await getAllLensIssues(user.token); + const data = await getAllLensIssues(api); setLensIssues(data); setLoading(false); } catch (error) { @@ -345,9 +346,7 @@ const IssuesPage = () => { {loading ? ( -
- }/> -
+ ) : viewMode === "table" ? ( ) : ( diff --git a/web-app/src/pages/PatientsPage.jsx b/web-app/src/pages/PatientsPage.jsx index f23735a..10ab986 100644 --- a/web-app/src/pages/PatientsPage.jsx +++ b/web-app/src/pages/PatientsPage.jsx @@ -6,7 +6,6 @@ import { FloatButton, Row, Col, - Spin, notification, Tooltip, Table, @@ -16,26 +15,27 @@ import { } from "antd"; import { BuildOutlined, - LoadingOutlined, PlusOutlined, SortAscendingOutlined, SortDescendingOutlined, TableOutlined, TeamOutlined } from "@ant-design/icons"; import {useAuth} from "../AuthContext.jsx"; -import getAllPatients from "../api/patients/GetAllPatients.jsx"; +import getAllPatients from "../api/patients/getAllPatients.jsx"; import PatientListCard from "../components/patients/PatientListCard.jsx"; import PatientFormModal from "../components/patients/PatientFormModal.jsx"; -import updatePatient from "../api/patients/UpdatePatient.jsx"; -import addPatient from "../api/patients/AddPatient.jsx"; -import deletePatient from "../api/patients/DeletePatient.jsx"; +import updatePatient from "../api/patients/updatePatient.jsx"; +import addPatient from "../api/patients/addPatient.jsx"; +import deletePatient from "../api/patients/deletePatient.jsx"; import SelectViewMode from "../components/SelectViewMode.jsx"; +import LoadingIndicator from "../components/LoadingIndicator.jsx"; +import {cacheInfo, getCachedInfo, getCacheTimestamp} from "../utils/cachedInfoUtils.jsx"; const {Option} = Select; const {Title} = Typography const PatientsPage = () => { - const {user} = useAuth(); + const {api} = useAuth(); const [searchText, setSearchText] = useState(""); const [sortOrder, setSortOrder] = useState("asc"); const [viewMode, setViewMode] = useState("tile"); @@ -59,14 +59,14 @@ const PatientsPage = () => { const intervalId = setInterval(fetchPatients, 5000); return () => clearInterval(intervalId); } - }, [user, isModalVisible, selectedPatient]); + }, [isModalVisible, selectedPatient]); const fetchPatientsWithCache = async () => { - const cachedData = localStorage.getItem("patientsData"); - const cacheTimestamp = localStorage.getItem("patientsTimestamp"); + const cachedData = getCachedInfo("patientsData"); + const cacheTimestamp = getCacheTimestamp("patientsData"); - if (cachedData && cacheTimestamp && (Date.now() - parseInt(cacheTimestamp)) < 60 * 1000) { - setPatients(JSON.parse(cachedData)); + if (cachedData && cacheTimestamp && (Date.now() - cacheTimestamp) < 60 * 1000) { + setPatients(cachedData); setLoading(false); return; } @@ -76,11 +76,10 @@ const PatientsPage = () => { const fetchPatients = async () => { try { - const data = await getAllPatients(user.token); + const data = await getAllPatients(api); setPatients(data); - localStorage.setItem("patientsData", JSON.stringify(data)); - localStorage.setItem("patientsTimestamp", Date.now().toString()); + cacheInfo("patientsData", data); } catch (error) { console.log(error); notification.error({ @@ -90,13 +89,11 @@ const PatientsPage = () => { }) } - if (loading) { - setLoading(false); - } + setLoading(false); }; const fetchViewModeFromCache = () => { - const cachedViewMode = localStorage.getItem("viewModePatients"); + const cachedViewMode = getCachedInfo("viewModePatients"); if (cachedViewMode) { setViewMode(cachedViewMode); } @@ -128,7 +125,7 @@ const PatientsPage = () => { const handleDeletePatient = async (patient_id) => { try { - await deletePatient(user.token, patient_id); + await deletePatient(api, patient_id); await fetchPatients(); notification.success({ message: "Пациент удалён", @@ -171,7 +168,7 @@ const PatientsPage = () => { }; const editPatient = async (patient) => { - await updatePatient(user.token, selectedPatient.id, patient); + await updatePatient(api, selectedPatient.id, patient); notification.success({ message: "Пациент обновлён", description: `Данные пациента ${patient.first_name} ${patient.last_name} успешно обновлены.`, @@ -180,7 +177,7 @@ const PatientsPage = () => { }; const addNewPatient = async (patient) => { - await addPatient(user.token, patient); + await addPatient(api, patient); notification.success({ message: "Пациент добавлен", description: `Пациент ${patient.first_name} ${patient.last_name} успешно добавлен.`, @@ -370,14 +367,7 @@ const PatientsPage = () => { {loading ? ( -
- }/> -
+ ) : viewMode === "tile" ? ( ) : ( diff --git a/web-app/src/pages/appointments_layout/AppointmentsCalendarPage.jsx b/web-app/src/pages/appointments_layout/AppointmentsCalendarPage.jsx index 29e4cdf..df0fe3e 100644 --- a/web-app/src/pages/appointments_layout/AppointmentsCalendarPage.jsx +++ b/web-app/src/pages/appointments_layout/AppointmentsCalendarPage.jsx @@ -1,25 +1,149 @@ -import {Calendar, Grid} from "antd"; +import {Calendar, Grid, ConfigProvider, Badge, Modal} from "antd"; import {useState} from "react"; import dayjs from "dayjs"; +import 'dayjs/locale/ru'; +import locale from 'antd/es/locale/ru_RU'; +import updateLocale from 'dayjs/plugin/updateLocale'; +import PropTypes from "prop-types"; const {useBreakpoint} = Grid; -const AppointmentsCalendarPage = () => { - const screens = useBreakpoint(); +dayjs.extend(updateLocale); +dayjs.updateLocale('ru', { + weekStart: 1 +}); - const [selectedDate, setSelectedDate] = useState(dayjs( - new Date() - )); +const AppointmentsCalendarPage = ({appointments, scheduledAppointments}) => { + const screens = useBreakpoint(); + const [selectedDate, setSelectedDate] = useState(dayjs(new Date())); + const [modalVisible, setModalVisible] = useState(false); + const [selectedAppointments, setSelectedAppointments] = useState([]); + + const dateCellRender = (value) => { + const date = value.format('YYYY-MM-DD'); + const appointmentsForDate = appointments.filter(app => + dayjs(app.appointment_datetime).format('YYYY-MM-DD') === date + ); + const scheduledForDate = scheduledAppointments.filter(app => + dayjs(app.scheduled_datetime).format('YYYY-MM-DD') === date + ); + + return ( +
    + {appointmentsForDate.map(app => ( +
  • + +
  • + ))} + {scheduledForDate.map(app => ( +
  • + +
  • + ))} +
+ ); + }; + + const onSelect = (date) => { + setSelectedDate(date); + const selectedDateStr = date.format('YYYY-MM-DD'); + const appointmentsForDate = appointments.filter(app => + dayjs(app.appointment_datetime).format('YYYY-MM-DD') === selectedDateStr + ); + const scheduledForDate = scheduledAppointments.filter(app => + dayjs(app.scheduled_datetime).format('YYYY-MM-DD') === selectedDateStr + ); + setSelectedAppointments([...appointmentsForDate, ...scheduledForDate]); + setModalVisible(true); + }; return ( -
- -
+ +
+ + setModalVisible(false)} + footer={null} + > + {selectedAppointments.map(app => ( +
+

{app.appointment_datetime ? 'Прием' : 'Запланировано'}: {dayjs(app.appointment_datetime || app.scheduled_datetime).format('HH:mm')}

+

Пациент: {app.patient?.name || 'Не указан'}

+

Врач: {app.doctor?.name || 'Не указан'}

+

Тип: {app.type?.name || 'Не указан'}

+ {app.results &&

Результаты: {app.results}

} +
+
+ ))} +
+
+
); }; -export default AppointmentsCalendarPage; \ No newline at end of file +AppointmentsCalendarPage.propTypes = { + appointments: PropTypes.arrayOf( + PropTypes.shape({ + id: PropTypes.number.isRequired, + results: PropTypes.string, + days_until_the_next_appointment: PropTypes.number, + appointment_datetime: PropTypes.string.isRequired, + patient: PropTypes.shape({ + first_name: PropTypes.string, + last_name: PropTypes.string, + patronymic: PropTypes.string, + birthday: PropTypes.string, + address: PropTypes.string, + email: PropTypes.string, + phone: PropTypes.string, + diagnosis: PropTypes.string, + correction: PropTypes.string, + }), + doctor: PropTypes.shape({ + last_name: PropTypes.string, + first_name: PropTypes.string, + login: PropTypes.string, + }), + type: PropTypes.shape({ + title: PropTypes.string, + }) + }) + ), + scheduledAppointments: PropTypes.arrayOf( + PropTypes.shape( + { + id: PropTypes.number.isRequired, + scheduled_datetime: PropTypes.string.isRequired, + patient: PropTypes.shape({ + first_name: PropTypes.string, + last_name: PropTypes.string, + patronymic: PropTypes.string, + birthday: PropTypes.string, + address: PropTypes.string, + email: PropTypes.string, + phone: PropTypes.string, + diagnosis: PropTypes.string, + correction: PropTypes.string, + }), + doctor: PropTypes.shape({ + last_name: PropTypes.string, + first_name: PropTypes.string, + login: PropTypes.string, + }), + type: PropTypes.shape({ + title: PropTypes.string, + }), + } + ) + ) +}; + +export default AppointmentsCalendarPage; diff --git a/web-app/src/pages/appointments_layout/AppointmentsTablePage.jsx b/web-app/src/pages/appointments_layout/AppointmentsTablePage.jsx index f0ea018..54840d4 100644 --- a/web-app/src/pages/appointments_layout/AppointmentsTablePage.jsx +++ b/web-app/src/pages/appointments_layout/AppointmentsTablePage.jsx @@ -1,11 +1,11 @@ import {useAuth} from "../../AuthContext.jsx"; import {useEffect, useState} from "react"; -import getAllAppointments from "../../api/appointments/GetAllAppointments.jsx"; +import getAllAppointments from "../../api/appointments/getAllAppointments.jsx"; import {notification} from "antd"; const AppointmentsTablePage = () => { - const {user} = useAuth(); + const {api} = useAuth(); const [appointments, setAppointments] = useState([]); @@ -16,52 +16,6 @@ const AppointmentsTablePage = () => { const [selectedAppointment, setSelectedAppointment] = useState(null); const [loading, setLoading] = useState(true); - useEffect(() => { - fetchAppointmentsWithCache(); - document.title = "Приемы"; - }, []); - - useEffect(() => { - if (!isModalVisible && !selectedAppointment) { - const intervalId = setInterval(fetchAppointments, 5000); - return () => clearInterval(intervalId); - } - }, [user, isModalVisible, selectedAppointment]); - - const fetchAppointmentsWithCache = async () => { - const cachedData = localStorage.getItem("appointmentsData"); - const cacheTimestamp = localStorage.getItem("appointmentsTimestamp"); - const currentTime = Date.now(); - if (cachedData && currentTime - cacheTimestamp < 60000) { - setAppointments(JSON.parse(cachedData)); - setLoading(false); - return; - } - - await fetchAppointments(); - }; - - const fetchAppointments = async () => { - try { - const data = await getAllAppointments(user.token); - setAppointments(data); - - localStorage.setItem("appointmentsData", JSON.stringify(data)); - localStorage.setItem("appointmentsTimestamp", Date.now().toString()); - } catch (error) { - console.log(error); - notification.error({ - message: "Ошибка загрузки данных", - description: "Проверьте подключение к сети.", - placement: "topRight", - }) - } - - if (loading) { - setLoading(false); - } - }; - return (
diff --git a/web-app/src/pages/lenses_layout/LensesPage.jsx b/web-app/src/pages/lenses_layout/LensesPage.jsx index 8f9d235..bcec68d 100644 --- a/web-app/src/pages/lenses_layout/LensesPage.jsx +++ b/web-app/src/pages/lenses_layout/LensesPage.jsx @@ -6,7 +6,6 @@ import { FloatButton, Row, Col, - Spin, Button, Form, InputNumber, @@ -18,7 +17,6 @@ import { Typography } from "antd"; import { - LoadingOutlined, PlusOutlined, DownOutlined, UpOutlined, @@ -27,20 +25,22 @@ import { BuildOutlined } from "@ant-design/icons"; import LensCard from "../../components/lenses/LensListCard.jsx"; -import getAllLenses from "../../api/lenses/GetAllLenses.jsx"; -import addLens from "../../api/lenses/AddLens.jsx"; -import updateLens from "../../api/lenses/UpdateLens.jsx"; -import deleteLens from "../../api/lenses/DeleteLens.jsx"; +import getAllLenses from "../../api/lenses/getAllLenses.jsx"; +import addLens from "../../api/lenses/addLens.jsx"; +import updateLens from "../../api/lenses/updateLens.jsx"; +import deleteLens from "../../api/lenses/deleteLens.jsx"; import {useAuth} from "../../AuthContext.jsx"; import LensFormModal from "../../components/lenses/LensFormModal.jsx"; import SelectViewMode from "../../components/SelectViewMode.jsx"; +import LoadingIndicator from "../../components/LoadingIndicator.jsx"; +import {getCachedInfo, getCacheTimestamp} from "../../utils/cachedInfoUtils.jsx"; const {Option} = Select; const {useBreakpoint} = Grid; const {Title} = Typography; const LensesPage = () => { - const {user} = useAuth(); + const {api} = useAuth(); const screens = useBreakpoint(); const [current, setCurrent] = useState(1); @@ -76,11 +76,11 @@ const LensesPage = () => { const intervalId = setInterval(fetchLenses, 5000); return () => clearInterval(intervalId); } - }, [user, isModalVisible, selectedLens]); + }, [isModalVisible, selectedLens]); const fetchLensWithCache = async () => { - const cachedData = localStorage.getItem("lensData"); - const cacheTimestamp = localStorage.getItem("lensTimestamp"); + const cachedData = getCachedInfo("lensData"); + const cacheTimestamp = getCacheTimestamp("lensData"); if (cachedData && cacheTimestamp && (Date.now() - parseInt(cacheTimestamp)) < 60 * 1000) { setLenses(JSON.parse(cachedData)); @@ -93,7 +93,7 @@ const LensesPage = () => { const fetchLenses = async () => { try { - const data = await getAllLenses(user.token); + const data = await getAllLenses(api); setLenses(data); setLoading(false); } catch (error) { @@ -108,7 +108,7 @@ const LensesPage = () => { }; const fetchViewModeFromCache = () => { - const cachedViewMode = localStorage.getItem("viewModeLenses"); + const cachedViewMode = getCachedInfo("viewModeLenses"); if (cachedViewMode) { setViewMode(cachedViewMode); } @@ -148,8 +148,8 @@ const LensesPage = () => { const handleDeleteLens = async (lensId) => { try { - await deleteLens(user.token, lensId); - await fetchLenses(user.token); + await deleteLens(api, lensId); + await fetchLenses(api); notification.success({ message: "Линза удалена", description: "Линза успешно удалена.", @@ -168,14 +168,14 @@ const LensesPage = () => { const handleModalSubmit = async (lensData) => { try { if (selectedLens) { - await updateLens(user.token, selectedLens.id, lensData); + await updateLens(api, selectedLens.id, lensData); notification.success({ message: "Линза обновлена", description: "Линза успешно обновлена.", placement: "topRight", }); } else { - await addLens(user.token, lensData); + await addLens(api, lensData); notification.success({ message: "Линза добавлена", description: "Линза успешно добавлена.", @@ -345,7 +345,6 @@ const LensesPage = () => { /> ); - return (
<FolderViewOutlined/> Линзы @@ -497,9 +496,7 @@ const LensesPage = () => { )} {loading ? ( -
- }/> -
+ ) : viewMode === "tile" ? ( ) : ( diff --git a/web-app/src/pages/lenses_layout/SetLensesPage.jsx b/web-app/src/pages/lenses_layout/SetLensesPage.jsx index 7b9f59d..f569d3a 100644 --- a/web-app/src/pages/lenses_layout/SetLensesPage.jsx +++ b/web-app/src/pages/lenses_layout/SetLensesPage.jsx @@ -1,22 +1,24 @@ import {useAuth} from "../../AuthContext.jsx"; import {useEffect, useState} from "react"; -import {FloatButton, Input, List, notification, Row, Spin, Typography} from "antd"; -import getAllSets from "../../api/sets/GetAllSets.jsx"; -import {LoadingOutlined, PlusOutlined, SwitcherOutlined} from "@ant-design/icons"; +import {FloatButton, Input, List, notification, Row, Typography} from "antd"; +import getAllSets from "../../api/sets/getAllSets.jsx"; +import {PlusOutlined, SwitcherOutlined} from "@ant-design/icons"; import SetListCard from "../../components/sets/SetListCard.jsx"; import SetFormModal from "../../components/sets/SetFormModal.jsx"; -import updateSet from "../../api/sets/UpdateSet.jsx"; -import addSet from "../../api/sets/AddSet.jsx"; -import deleteSet from "../../api/sets/DeleteSet.jsx"; -import addSetContent from "../../api/set_content/AddSetContent.jsx"; -import updateSetContent from "../../api/set_content/UpdateSetContent.jsx"; -import appendLensesFromSet from "../../api/sets/AppendLensesFromSet.jsx"; +import updateSet from "../../api/sets/updateSet.jsx"; +import addSet from "../../api/sets/addSet.jsx"; +import deleteSet from "../../api/sets/deleteSet.jsx"; +import addSetContent from "../../api/set_content/addSetContent.jsx"; +import updateSetContent from "../../api/set_content/updateSetContent.jsx"; +import appendLensesFromSet from "../../api/sets/appendLensesFromSet.jsx"; +import LoadingIndicator from "../../components/LoadingIndicator.jsx"; +import {cacheInfo, getCachedInfo, getCacheTimestamp} from "../../utils/cachedInfoUtils.jsx"; const {Title} = Typography; const SetLensesPage = () => { - const {user} = useAuth(); + const {api} = useAuth(); const [current, setCurrent] = useState(1); const [pageSize, setPageSize] = useState(10); @@ -36,14 +38,14 @@ const SetLensesPage = () => { const intervalId = setInterval(fetchSets, 5000); return () => clearInterval(intervalId); } - }, [user, isModalVisible]); + }, [isModalVisible]); const fetchSetsWithCache = async () => { - const cachedData = localStorage.getItem("setsData"); - const cacheTimestamp = localStorage.getItem("setsTimestamp"); + const cachedData = getCachedInfo("setsData"); + const cacheTimestamp = getCacheTimestamp("setsData"); - if (cachedData && cacheTimestamp && (Date.now() - parseInt(cacheTimestamp)) < 60 * 1000) { - setSets(JSON.parse(cachedData)); + if (cachedData && cacheTimestamp && (Date.now() - cacheTimestamp) < 60 * 1000) { + setSets(cachedData); setLoading(false); } else { await fetchSets(); @@ -51,14 +53,11 @@ const SetLensesPage = () => { }; const fetchSets = async () => { - if (!user || !user.token) return; - try { - const data = await getAllSets(user.token); + const data = await getAllSets(api); setSets(data); - localStorage.setItem("setsData", JSON.stringify(data)); - localStorage.setItem("setsTimestamp", Date.now().toString()); + cacheInfo("setsData", data); } catch (error) { console.log(error); notification.error({ @@ -87,7 +86,7 @@ const SetLensesPage = () => { const handleDeleteSet = async (set_id) => { try { - await deleteSet(user.token, set_id); + await deleteSet(api, set_id); notification.success({ message: "Набор удален", description: "Набор успешно удален.", @@ -110,7 +109,7 @@ const SetLensesPage = () => { const handleAppendSet = async (set) => { try { - await appendLensesFromSet(user.token, set.id); + await appendLensesFromSet(api, set.id); notification.success({ message: "Линзы добавлены", description: "Линзы успешно добавлены.", @@ -157,7 +156,7 @@ const SetLensesPage = () => { const setContent = async (content, set_id) => { try { console.log(content); - await addSetContent(user.token, content, set_id); + await addSetContent(api, content, set_id); } catch (error) { console.error("Ошибка сохранения набора:", error); notification.error({ @@ -170,7 +169,7 @@ const SetLensesPage = () => { const updateContent = async (content, set_id) => { try { - await updateSetContent(user.token, content, set_id); + await updateSetContent(api, content, set_id); } catch (error) { console.error("Ошибка сохранения набора:", error); notification.error({ @@ -182,7 +181,7 @@ const SetLensesPage = () => { }; const editCurrentSet = async (set) => { - const refreshed_set = await updateSet(user.token, selectedSet.id, set); + const refreshed_set = await updateSet(api, selectedSet.id, set); notification.success({ message: "Набор обновлен", description: "Набор успешно обновлен.", @@ -192,7 +191,7 @@ const SetLensesPage = () => { }; const addNewSet = async (set) => { - const refreshed_set = await addSet(user.token, set); + const refreshed_set = await addSet(api, set); notification.success({ message: "Набор добавлен", description: "Набор успешно добавлен.", @@ -214,14 +213,7 @@ const SetLensesPage = () => { {loading ? ( -
- }/> -
+ ) : ( { + localStorage.setItem(key, JSON.stringify(value)); + localStorage.setItem(`${key}Timestamp`, Date.now().toString()); +}; + +const getCachedInfo = (key) => { + const data = localStorage.getItem(key); + if (!data) return null; + return JSON.parse(data); +}; + +const getCacheTimestamp = (key) => { + const timestamp = localStorage.getItem(`${key}Timestamp`); + if (!timestamp) return null; + return parseInt(timestamp); +}; + +export {cacheInfo, getCachedInfo, getCacheTimestamp}; \ No newline at end of file