From 563a5b7efbafb95d8dc3065162e7fcd6152ab8fc Mon Sep 17 00:00:00 2001 From: sebas Date: Tue, 5 Nov 2024 16:15:07 -0500 Subject: [PATCH 01/17] Update dependencies in package.json to latest versions --- frontend/package.json | 42 +- frontend/pnpm-lock.yaml | 1804 +++++++++++++++++++-------------------- 2 files changed, 908 insertions(+), 938 deletions(-) diff --git a/frontend/package.json b/frontend/package.json index 6f7764f..40b49ca 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -17,16 +17,17 @@ "@mui/icons-material": "^5.16.7", "@mui/lab": "5.0.0-alpha.173", "@mui/material": "^5.16.7", - "@mui/x-data-grid": "^7.16.0", - "@sentry/react": "^8.30.0", - "@sentry/vite-plugin": "^2.22.4", - "cally": "^0.7.1", + "@mui/x-data-grid": "^7.22.1", + "@sentry/react": "^8.37.1", + "@sentry/vite-plugin": "^2.22.6", + "cally": "^0.7.2", + "clsx": "^2.1.1", "depcheck": "^1.4.7", - "embla-carousel-autoplay": "^8.2.1", - "embla-carousel-class-names": "^8.2.1", - "embla-carousel-fade": "^8.2.1", - "embla-carousel-react": "^8.2.1", - "filepond": "^4.31.3", + "embla-carousel-autoplay": "^8.3.1", + "embla-carousel-class-names": "^8.3.1", + "embla-carousel-fade": "^8.3.1", + "embla-carousel-react": "^8.3.1", + "filepond": "^4.32.1", "filepond-plugin-file-validate-type": "^1.2.9", "filepond-plugin-image-exif-orientation": "^1.0.11", "filepond-plugin-image-preview": "^4.6.12", @@ -35,28 +36,29 @@ "node-fetch": "^3.3.2", "react": "^18.3.1", "react-dom": "^18.3.1", - "react-dropzone": "^14.2.3", + "react-dropzone": "^14.3.5", "react-filepond": "^7.1.2", "react-material-ui-carousel": "^3.4.2", - "react-router-dom": "^6.26.2", + "react-router-dom": "^6.27.0", "rollup-plugin-visualizer": "^5.12.0", + "sonner": "^1.7.0", "swiper": "^11.1.14", "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz", "yup": "^1.4.0" }, "devDependencies": { - "@babel/eslint-parser": "^7.25.1", - "@testing-library/jest-dom": "^6.5.0", + "@babel/eslint-parser": "^7.25.9", + "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.0.1", "@testing-library/user-event": "^14.5.2", - "@types/react": "^18.3.5", - "@vitejs/plugin-react": "^4.3.1", - "@vitest/ui": "^2.1.1", - "jsdom": "^25.0.0", - "oxlint": "^0.9.5", + "@types/react": "^18.3.12", + "@vitejs/plugin-react": "^4.3.3", + "@vitest/ui": "^2.1.4", + "jsdom": "^25.0.1", + "oxlint": "^0.9.10", "prettier": "^3.3.3", "rollup-plugin-visualizer": "^5.12.0", - "vite": "^5.4.4", - "vitest": "^2.1.0" + "vite": "^5.4.10", + "vitest": "^2.1.4" } } diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index fe25132..9a714c2 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -10,58 +10,61 @@ importers: dependencies: '@emotion/react': specifier: ^11.13.3 - version: 11.13.3(@types/react@18.3.5)(react@18.3.1) + version: 11.13.3(@types/react@18.3.12)(react@18.3.1) '@emotion/styled': specifier: ^11.13.0 - version: 11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1) + version: 11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) '@mui/icons-material': specifier: ^5.16.7 - version: 5.16.7(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.5)(react@18.3.1) + version: 5.16.7(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) '@mui/lab': specifier: 5.0.0-alpha.173 - version: 5.0.0-alpha.173(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 5.0.0-alpha.173(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mui/material': specifier: ^5.16.7 - version: 5.16.7(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mui/x-data-grid': - specifier: ^7.16.0 - version: 7.17.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mui/system@5.16.7(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^7.22.1 + version: 7.22.1(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mui/system@5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@sentry/react': - specifier: ^8.30.0 - version: 8.30.0(react@18.3.1) + specifier: ^8.37.1 + version: 8.37.1(react@18.3.1) '@sentry/vite-plugin': - specifier: ^2.22.4 - version: 2.22.4 + specifier: ^2.22.6 + version: 2.22.6 cally: - specifier: ^0.7.1 - version: 0.7.1 + specifier: ^0.7.2 + version: 0.7.2 + clsx: + specifier: ^2.1.1 + version: 2.1.1 depcheck: specifier: ^1.4.7 version: 1.4.7 embla-carousel-autoplay: - specifier: ^8.2.1 - version: 8.3.0(embla-carousel@8.3.0) + specifier: ^8.3.1 + version: 8.3.1(embla-carousel@8.3.1) embla-carousel-class-names: - specifier: ^8.2.1 - version: 8.3.0(embla-carousel@8.3.0) + specifier: ^8.3.1 + version: 8.3.1(embla-carousel@8.3.1) embla-carousel-fade: - specifier: ^8.2.1 - version: 8.3.0(embla-carousel@8.3.0) + specifier: ^8.3.1 + version: 8.3.1(embla-carousel@8.3.1) embla-carousel-react: - specifier: ^8.2.1 - version: 8.3.0(react@18.3.1) + specifier: ^8.3.1 + version: 8.3.1(react@18.3.1) filepond: - specifier: ^4.31.3 - version: 4.31.3 + specifier: ^4.32.1 + version: 4.32.1 filepond-plugin-file-validate-type: specifier: ^1.2.9 - version: 1.2.9(filepond@4.31.3) + version: 1.2.9(filepond@4.32.1) filepond-plugin-image-exif-orientation: specifier: ^1.0.11 - version: 1.0.11(filepond@4.31.3) + version: 1.0.11(filepond@4.32.1) filepond-plugin-image-preview: specifier: ^4.6.12 - version: 4.6.12(filepond@4.31.3) + version: 4.6.12(filepond@4.32.1) formik: specifier: ^2.4.6 version: 2.4.6(react@18.3.1) @@ -78,20 +81,23 @@ importers: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) react-dropzone: - specifier: ^14.2.3 - version: 14.2.3(react@18.3.1) + specifier: ^14.3.5 + version: 14.3.5(react@18.3.1) react-filepond: specifier: ^7.1.2 - version: 7.1.2(filepond@4.31.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 7.1.2(filepond@4.32.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-material-ui-carousel: specifier: ^3.4.2 - version: 3.4.2(ybbliznkjfjrmgdxnl6g3mlm54) + version: 3.4.2(p3vvayirda5gy2xqqpgt24dakm) react-router-dom: - specifier: ^6.26.2 - version: 6.26.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^6.27.0 + version: 6.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rollup-plugin-visualizer: specifier: ^5.12.0 - version: 5.12.0(rollup@4.21.3) + version: 5.12.0(rollup@4.24.4) + sonner: + specifier: ^1.7.0 + version: 1.7.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) swiper: specifier: ^11.1.14 version: 11.1.14 @@ -103,41 +109,41 @@ importers: version: 1.4.0 devDependencies: '@babel/eslint-parser': - specifier: ^7.25.1 - version: 7.25.1(@babel/core@7.25.2)(eslint@9.10.0) + specifier: ^7.25.9 + version: 7.25.9(@babel/core@7.26.0)(eslint@9.10.0(jiti@1.21.6)) '@testing-library/jest-dom': - specifier: ^6.5.0 - version: 6.5.0 + specifier: ^6.6.3 + version: 6.6.3 '@testing-library/react': specifier: ^16.0.1 - version: 16.0.1(@testing-library/dom@10.4.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.0.1(@testing-library/dom@10.4.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@testing-library/user-event': specifier: ^14.5.2 version: 14.5.2(@testing-library/dom@10.4.0) '@types/react': - specifier: ^18.3.5 - version: 18.3.5 + specifier: ^18.3.12 + version: 18.3.12 '@vitejs/plugin-react': - specifier: ^4.3.1 - version: 4.3.1(vite@5.4.5) + specifier: ^4.3.3 + version: 4.3.3(vite@5.4.10) '@vitest/ui': - specifier: ^2.1.1 - version: 2.1.1(vitest@2.1.1) + specifier: ^2.1.4 + version: 2.1.4(vitest@2.1.4) jsdom: - specifier: ^25.0.0 - version: 25.0.0 + specifier: ^25.0.1 + version: 25.0.1 oxlint: - specifier: ^0.9.5 - version: 0.9.5 + specifier: ^0.9.10 + version: 0.9.10 prettier: specifier: ^3.3.3 version: 3.3.3 vite: - specifier: ^5.4.4 - version: 5.4.5 + specifier: ^5.4.10 + version: 5.4.10 vitest: - specifier: ^2.1.0 - version: 2.1.1(@vitest/ui@2.1.1)(jsdom@25.0.0) + specifier: ^2.1.4 + version: 2.1.4(@vitest/ui@2.1.4)(jsdom@25.0.1) packages: @@ -148,102 +154,94 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@babel/code-frame@7.24.7': - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.25.4': - resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} + '@babel/compat-data@7.26.2': + resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==} engines: {node: '>=6.9.0'} - '@babel/core@7.25.2': - resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} + '@babel/core@7.26.0': + resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} engines: {node: '>=6.9.0'} - '@babel/eslint-parser@7.25.1': - resolution: {integrity: sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg==} + '@babel/eslint-parser@7.25.9': + resolution: {integrity: sha512-5UXfgpK0j0Xr/xIdgdLEhOFxaDZ0bRPWJJchRpqOSur/3rZoPbqqki5mm0p4NE2cs28krBEiSM2MB7//afRSQQ==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: '@babel/core': ^7.11.0 eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 - '@babel/generator@7.25.6': - resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} + '@babel/generator@7.26.2': + resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.25.2': - resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} + '@babel/helper-compilation-targets@7.25.9': + resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.24.7': - resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.25.2': - resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-plugin-utils@7.24.8': - resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-simple-access@7.24.7': - resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} + '@babel/helper-plugin-utils@7.25.9': + resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.8': - resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.24.8': - resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.25.6': - resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==} + '@babel/helpers@7.26.0': + resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.7': - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.25.6': - resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} + '@babel/parser@7.26.2': + resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-transform-react-jsx-self@7.24.7': - resolution: {integrity: sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==} + '@babel/plugin-transform-react-jsx-self@7.25.9': + resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-source@7.24.7': - resolution: {integrity: sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==} + '@babel/plugin-transform-react-jsx-source@7.25.9': + resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.25.6': - resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} + '@babel/runtime@7.26.0': + resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} engines: {node: '>=6.9.0'} - '@babel/template@7.25.0': - resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.25.6': - resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} + '@babel/traverse@7.25.9': + resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} engines: {node: '>=6.9.0'} - '@babel/types@7.25.6': - resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} + '@babel/types@7.26.0': + resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} '@emotion/babel-plugin@11.12.0': @@ -258,8 +256,8 @@ packages: '@emotion/is-prop-valid@0.8.8': resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} - '@emotion/is-prop-valid@1.3.0': - resolution: {integrity: sha512-SHetuSLvJDzuNbOdtPVbq6yMMMlLoW5Q94uDqJZqy50gcmAjxFkVqmzqSGEFq9gT2iMuIeKV1PXVWmvUhuZLlQ==} + '@emotion/is-prop-valid@1.3.1': + resolution: {integrity: sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==} '@emotion/memoize@0.7.4': resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} @@ -276,8 +274,8 @@ packages: '@types/react': optional: true - '@emotion/serialize@1.3.1': - resolution: {integrity: sha512-dEPNKzBPU+vFPGa+z3axPRn8XVDetYORmDC0wAiej+TNcOZE70ZMJa0X7JdeoM6q/nWTMZeLpN/fTnD9o8MQBA==} + '@emotion/serialize@1.3.2': + resolution: {integrity: sha512-grVnMvVPK9yUVE6rkKfAJlYZgo0cu3l9iMC77V7DW6E1DUIrU68pSEXRmFZFOFB1QFo57TncmOcvcbMDWsL4yA==} '@emotion/sheet@1.4.0': resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} @@ -300,8 +298,8 @@ packages: peerDependencies: react: '>=16.8.0' - '@emotion/utils@1.4.0': - resolution: {integrity: sha512-spEnrA1b6hDR/C68lC2M7m6ALPUHZC0lIY7jAS/B/9DuuO1ZP04eov8SMv/6fwRd8pzmsn2AuJEznRREWlQrlQ==} + '@emotion/utils@1.4.1': + resolution: {integrity: sha512-BymCXzCG3r72VKJxaYVwOXATqXIZ85cuvg0YOUDxMGNrKc1DJRZk8MgV5wyXRyEayIMd4FuXJIUgTBXvDNW5cA==} '@emotion/weak-memoize@0.4.0': resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} @@ -444,14 +442,14 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.11.0': - resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} '@eslint/config-array@0.18.0': @@ -474,27 +472,27 @@ packages: resolution: {integrity: sha512-autAXT203ixhqei9xt+qkYOvY8l6LAFIdT2UXc/RPNeUVfqRF1BV94GTJyVPFKT8nFM6MyVJhjLj9E8JWvf5zQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@floating-ui/core@1.6.7': - resolution: {integrity: sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==} + '@floating-ui/core@1.6.8': + resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} - '@floating-ui/dom@1.6.10': - resolution: {integrity: sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==} + '@floating-ui/dom@1.6.12': + resolution: {integrity: sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==} - '@floating-ui/react-dom@2.1.1': - resolution: {integrity: sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==} + '@floating-ui/react-dom@2.1.2': + resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' - '@floating-ui/utils@0.2.7': - resolution: {integrity: sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==} + '@floating-ui/utils@0.2.8': + resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/retry@0.3.0': - resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} '@jridgewell/gen-mapping@0.3.5': @@ -614,8 +612,8 @@ packages: '@types/react': optional: true - '@mui/types@7.2.16': - resolution: {integrity: sha512-qI8TV3M7ShITEEc8Ih15A2vLzZGLhD+/UPNwck/hcls2gwg7dyRjNGXcQYHKLB5Q7PuTRfrTkAoPa2VV1s67Ag==} + '@mui/types@7.2.19': + resolution: {integrity: sha512-6XpZEM/Q3epK9RN8ENoXuygnqUQxE+siN/6rGRi2iwJPgBUR25mphYQ9ZI87plGh58YoZ5pp40bFvKYOCDJ3tA==} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: @@ -632,8 +630,18 @@ packages: '@types/react': optional: true - '@mui/x-data-grid@7.17.0': - resolution: {integrity: sha512-d3pFdrQlNR+8waol7iM6LlNIpvqo9SgYeKcMIOSQ3etpue9iRFNy8s1HCHd9Nxnhzgr+fqMy/v3bXZnd196qig==} + '@mui/utils@6.1.6': + resolution: {integrity: sha512-sBS6D9mJECtELASLM+18WUcXF6RH3zNxBRFeyCRg8wad6NbyNrdxLuwK+Ikvc38sTZwBzAz691HmSofLqHd9sQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@mui/x-data-grid@7.22.1': + resolution: {integrity: sha512-YHF96MEv7ACG/VuiycZjEAPH7cZLNuV2+bi/MyR1t/e6E6LTolYFykvjSFq+Imz1mYbW4+9mEvrHZsIKL5KKIQ==} engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.9.0 @@ -648,8 +656,8 @@ packages: '@emotion/styled': optional: true - '@mui/x-internals@7.17.0': - resolution: {integrity: sha512-FLlAGSJl/vsuaA/8hPGazXFppyzIzxApJJDZMoTS0geUmHd0hyooISV2ltllLmrZ/DGtHhI08m8GGnHL6/vVeg==} + '@mui/x-internals@7.21.0': + resolution: {integrity: sha512-94YNyZ0BhK5Z+Tkr90RKf47IVCW8R/1MvdUhh6MCQg6sZa74jsX+x+gEZ4kzuCqOsuyTyxikeQ8vVuCIQiP7UQ==} engines: {node: '>=14.0.0'} peerDependencies: react: ^17.0.0 || ^18.0.0 @@ -669,43 +677,43 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@oxlint/darwin-arm64@0.9.5': - resolution: {integrity: sha512-+PzOfZga1MY+Bx7CXjqp+3OuA575bCcwKI2hbRvfcrmynpQB+sT9vy9TY0XvWsJpWDikQSHHFF3GipSvEqslfw==} + '@oxlint/darwin-arm64@0.9.10': + resolution: {integrity: sha512-eOXKZYq5bnCSgDefgM5bzAg+4Fc//Rc4yjgKN8iDWUARweCaChiQXb6TXX8MfEfs6qayEMy6yVj0pqoFz0B1aw==} cpu: [arm64] os: [darwin] - '@oxlint/darwin-x64@0.9.5': - resolution: {integrity: sha512-vvkfBnWs2nari8Qqas8BPI7M+CbDwBMSORy5LgoCS+hUlFQ6PsRlTXYtMpLCdvBamp7FtcRSUDrX5+wK+cVDQg==} + '@oxlint/darwin-x64@0.9.10': + resolution: {integrity: sha512-UeYICDvLUaUOcY+0ugZUEmBMRLP+x8iTgL7TeY6BlpGw2ahbtUOTbyIIRWtr/0O++TnjZ+v8TzhJ9crw6Ij6dg==} cpu: [x64] os: [darwin] - '@oxlint/linux-arm64-gnu@0.9.5': - resolution: {integrity: sha512-xCRr3wbqrqbDVnu9a43tKOWqNmc11ryH8OR6k2Z1H28iAohT5kP3dUxGfZfhM/LdxkTFHyU1d3+jFyJsUmCkWg==} + '@oxlint/linux-arm64-gnu@0.9.10': + resolution: {integrity: sha512-0Zn+vqHhrZyufFBfq9WOgiIool0gCR14BLsdS+0Dwd9o+kNxPGA5q7erQFkiC4rpkxtfBHeD3iIKMMt7d29Kyw==} cpu: [arm64] os: [linux] - '@oxlint/linux-arm64-musl@0.9.5': - resolution: {integrity: sha512-DDjaFIwgGlHU7sl4PVkp4cKqh8KECEdtEg6zs5t1++T8Lqm6ThZUAtT/oBWM+jR1bPawptpH9BzYSeGs4OmDdg==} + '@oxlint/linux-arm64-musl@0.9.10': + resolution: {integrity: sha512-tkQcWpYwF42bA/uRaV2iMFePHkBjTTgomOgeEaiw6XOSJX4nBEqGIIboqqLBWT4JnKCf/L+IG3y/e1MflhKByw==} cpu: [arm64] os: [linux] - '@oxlint/linux-x64-gnu@0.9.5': - resolution: {integrity: sha512-xZc8M42EbAeqBjLVwuUnEqfyAit0WbZYaSJ4rd6N7EVfnKxTRRu7JGy5yuR0nOtveekhQyj59VC92HipOdmZig==} + '@oxlint/linux-x64-gnu@0.9.10': + resolution: {integrity: sha512-JHbkMUnibqaSMBvLHyqTL5cWxcGW+jw+Ppt2baLISpvo34a6fBR+PI7v/A92sEDWe0W1rPhypzCwA8mKpkQ3DA==} cpu: [x64] os: [linux] - '@oxlint/linux-x64-musl@0.9.5': - resolution: {integrity: sha512-V6k4h2fOXFlQ3B6AhSvJv56DBQ7Ki23IU+tilpDzvPDTjUYsA18VWsaM2DQU00/eCxTFaqvjP1ahtGJlaZm0/w==} + '@oxlint/linux-x64-musl@0.9.10': + resolution: {integrity: sha512-aBBwN7bQzidwHwEXr7BAdVvMTLWstCy5gikerjLnGDeCSXX9r+o6+yUzTOqZvOo66E+XBgOJaVbY8rsL1MLE0g==} cpu: [x64] os: [linux] - '@oxlint/win32-arm64@0.9.5': - resolution: {integrity: sha512-5qbr5KwczXCXpj31NiL600cJe0LfNSBj4y4VovpYT3EH+HCP8NhOk7aMe2TDdc4yD4Few9qJfMlMbW4GltJGVw==} + '@oxlint/win32-arm64@0.9.10': + resolution: {integrity: sha512-LXDnk7vKHT3IY6G1jq0O7+XMhtcHOYuxLGIx4KP+4xS6vKgBY+Bsq4xV3AtmtKlvnXkP5FxHpfLmcEtm5AWysA==} cpu: [arm64] os: [win32] - '@oxlint/win32-x64@0.9.5': - resolution: {integrity: sha512-6zZK5S0mrIO8+/metreSb0ydq5JgC5VLve7dNnbYMxZFajdjNGGTCTatJm6cuLXhupHkcMI28AIvrMmPsfrb7A==} + '@oxlint/win32-x64@0.9.10': + resolution: {integrity: sha512-w5XRAV4bhgwenjjpGYZGglqzG9Wv/sI+cjQWJBQsvfDXsr2w4vOBXzt1j3/Z3EcSqf4KtkCa/IIuAhQyeShUbA==} cpu: [x64] os: [win32] @@ -715,192 +723,202 @@ packages: '@popperjs/core@2.11.8': resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - '@remix-run/router@1.19.2': - resolution: {integrity: sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==} + '@remix-run/router@1.20.0': + resolution: {integrity: sha512-mUnk8rPJBI9loFDZ+YzPGdeniYK+FTmRD1TMCz7ev2SNIozyKKpnGgsxO34u6Z4z/t0ITuu7voi/AshfsGsgFg==} engines: {node: '>=14.0.0'} - '@rollup/rollup-android-arm-eabi@4.21.3': - resolution: {integrity: sha512-MmKSfaB9GX+zXl6E8z4koOr/xU63AMVleLEa64v7R0QF/ZloMs5vcD1sHgM64GXXS1csaJutG+ddtzcueI/BLg==} + '@rollup/rollup-android-arm-eabi@4.24.4': + resolution: {integrity: sha512-jfUJrFct/hTA0XDM5p/htWKoNNTbDLY0KRwEt6pyOA6k2fmk0WVwl65PdUdJZgzGEHWx+49LilkcSaumQRyNQw==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.21.3': - resolution: {integrity: sha512-zrt8ecH07PE3sB4jPOggweBjJMzI1JG5xI2DIsUbkA+7K+Gkjys6eV7i9pOenNSDJH3eOr/jLb/PzqtmdwDq5g==} + '@rollup/rollup-android-arm64@4.24.4': + resolution: {integrity: sha512-j4nrEO6nHU1nZUuCfRKoCcvh7PIywQPUCBa2UsootTHvTHIoIu2BzueInGJhhvQO/2FTRdNYpf63xsgEqH9IhA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.21.3': - resolution: {integrity: sha512-P0UxIOrKNBFTQaXTxOH4RxuEBVCgEA5UTNV6Yz7z9QHnUJ7eLX9reOd/NYMO3+XZO2cco19mXTxDMXxit4R/eQ==} + '@rollup/rollup-darwin-arm64@4.24.4': + resolution: {integrity: sha512-GmU/QgGtBTeraKyldC7cDVVvAJEOr3dFLKneez/n7BvX57UdhOqDsVwzU7UOnYA7AAOt+Xb26lk79PldDHgMIQ==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.21.3': - resolution: {integrity: sha512-L1M0vKGO5ASKntqtsFEjTq/fD91vAqnzeaF6sfNAy55aD+Hi2pBI5DKwCO+UNDQHWsDViJLqshxOahXyLSh3EA==} + '@rollup/rollup-darwin-x64@4.24.4': + resolution: {integrity: sha512-N6oDBiZCBKlwYcsEPXGDE4g9RoxZLK6vT98M8111cW7VsVJFpNEqvJeIPfsCzbf0XEakPslh72X0gnlMi4Ddgg==} cpu: [x64] os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.21.3': - resolution: {integrity: sha512-btVgIsCjuYFKUjopPoWiDqmoUXQDiW2A4C3Mtmp5vACm7/GnyuprqIDPNczeyR5W8rTXEbkmrJux7cJmD99D2g==} + '@rollup/rollup-freebsd-arm64@4.24.4': + resolution: {integrity: sha512-py5oNShCCjCyjWXCZNrRGRpjWsF0ic8f4ieBNra5buQz0O/U6mMXCpC1LvrHuhJsNPgRt36tSYMidGzZiJF6mw==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.24.4': + resolution: {integrity: sha512-L7VVVW9FCnTTp4i7KrmHeDsDvjB4++KOBENYtNYAiYl96jeBThFfhP6HVxL74v4SiZEVDH/1ILscR5U9S4ms4g==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.24.4': + resolution: {integrity: sha512-10ICosOwYChROdQoQo589N5idQIisxjaFE/PAnX2i0Zr84mY0k9zul1ArH0rnJ/fpgiqfu13TFZR5A5YJLOYZA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.21.3': - resolution: {integrity: sha512-zmjbSphplZlau6ZTkxd3+NMtE4UKVy7U4aVFMmHcgO5CUbw17ZP6QCgyxhzGaU/wFFdTfiojjbLG3/0p9HhAqA==} + '@rollup/rollup-linux-arm-musleabihf@4.24.4': + resolution: {integrity: sha512-ySAfWs69LYC7QhRDZNKqNhz2UKN8LDfbKSMAEtoEI0jitwfAG2iZwVqGACJT+kfYvvz3/JgsLlcBP+WWoKCLcw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.21.3': - resolution: {integrity: sha512-nSZfcZtAnQPRZmUkUQwZq2OjQciR6tEoJaZVFvLHsj0MF6QhNMg0fQ6mUOsiCUpTqxTx0/O6gX0V/nYc7LrgPw==} + '@rollup/rollup-linux-arm64-gnu@4.24.4': + resolution: {integrity: sha512-uHYJ0HNOI6pGEeZ/5mgm5arNVTI0nLlmrbdph+pGXpC9tFHFDQmDMOEqkmUObRfosJqpU8RliYoGz06qSdtcjg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.21.3': - resolution: {integrity: sha512-MnvSPGO8KJXIMGlQDYfvYS3IosFN2rKsvxRpPO2l2cum+Z3exiExLwVU+GExL96pn8IP+GdH8Tz70EpBhO0sIQ==} + '@rollup/rollup-linux-arm64-musl@4.24.4': + resolution: {integrity: sha512-38yiWLemQf7aLHDgTg85fh3hW9stJ0Muk7+s6tIkSUOMmi4Xbv5pH/5Bofnsb6spIwD5FJiR+jg71f0CH5OzoA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.21.3': - resolution: {integrity: sha512-+W+p/9QNDr2vE2AXU0qIy0qQE75E8RTwTwgqS2G5CRQ11vzq0tbnfBd6brWhS9bCRjAjepJe2fvvkvS3dno+iw==} + '@rollup/rollup-linux-powerpc64le-gnu@4.24.4': + resolution: {integrity: sha512-q73XUPnkwt9ZNF2xRS4fvneSuaHw2BXuV5rI4cw0fWYVIWIBeDZX7c7FWhFQPNTnE24172K30I+dViWRVD9TwA==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.21.3': - resolution: {integrity: sha512-yXH6K6KfqGXaxHrtr+Uoy+JpNlUlI46BKVyonGiaD74ravdnF9BUNC+vV+SIuB96hUMGShhKV693rF9QDfO6nQ==} + '@rollup/rollup-linux-riscv64-gnu@4.24.4': + resolution: {integrity: sha512-Aie/TbmQi6UXokJqDZdmTJuZBCU3QBDA8oTKRGtd4ABi/nHgXICulfg1KI6n9/koDsiDbvHAiQO3YAUNa/7BCw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.21.3': - resolution: {integrity: sha512-R8cwY9wcnApN/KDYWTH4gV/ypvy9yZUHlbJvfaiXSB48JO3KpwSpjOGqO4jnGkLDSk1hgjYkTbTt6Q7uvPf8eg==} + '@rollup/rollup-linux-s390x-gnu@4.24.4': + resolution: {integrity: sha512-P8MPErVO/y8ohWSP9JY7lLQ8+YMHfTI4bAdtCi3pC2hTeqFJco2jYspzOzTUB8hwUWIIu1xwOrJE11nP+0JFAQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.21.3': - resolution: {integrity: sha512-kZPbX/NOPh0vhS5sI+dR8L1bU2cSO9FgxwM8r7wHzGydzfSjLRCFAT87GR5U9scj2rhzN3JPYVC7NoBbl4FZ0g==} + '@rollup/rollup-linux-x64-gnu@4.24.4': + resolution: {integrity: sha512-K03TljaaoPK5FOyNMZAAEmhlyO49LaE4qCsr0lYHUKyb6QacTNF9pnfPpXnFlFD3TXuFbFbz7tJ51FujUXkXYA==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.21.3': - resolution: {integrity: sha512-S0Yq+xA1VEH66uiMNhijsWAafffydd2X5b77eLHfRmfLsRSpbiAWiRHV6DEpz6aOToPsgid7TI9rGd6zB1rhbg==} + '@rollup/rollup-linux-x64-musl@4.24.4': + resolution: {integrity: sha512-VJYl4xSl/wqG2D5xTYncVWW+26ICV4wubwN9Gs5NrqhJtayikwCXzPL8GDsLnaLU3WwhQ8W02IinYSFJfyo34Q==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.21.3': - resolution: {integrity: sha512-9isNzeL34yquCPyerog+IMCNxKR8XYmGd0tHSV+OVx0TmE0aJOo9uw4fZfUuk2qxobP5sug6vNdZR6u7Mw7Q+Q==} + '@rollup/rollup-win32-arm64-msvc@4.24.4': + resolution: {integrity: sha512-ku2GvtPwQfCqoPFIJCqZ8o7bJcj+Y54cZSr43hHca6jLwAiCbZdBUOrqE6y29QFajNAzzpIOwsckaTFmN6/8TA==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.21.3': - resolution: {integrity: sha512-nMIdKnfZfzn1Vsk+RuOvl43ONTZXoAPUUxgcU0tXooqg4YrAqzfKzVenqqk2g5efWh46/D28cKFrOzDSW28gTA==} + '@rollup/rollup-win32-ia32-msvc@4.24.4': + resolution: {integrity: sha512-V3nCe+eTt/W6UYNr/wGvO1fLpHUrnlirlypZfKCT1fG6hWfqhPgQV/K/mRBXBpxc0eKLIF18pIOFVPh0mqHjlg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.21.3': - resolution: {integrity: sha512-fOvu7PCQjAj4eWDEuD8Xz5gpzFqXzGlxHZozHP4b9Jxv9APtdxL6STqztDzMLuRXEc4UpXGGhx029Xgm91QBeA==} + '@rollup/rollup-win32-x64-msvc@4.24.4': + resolution: {integrity: sha512-LTw1Dfd0mBIEqUVCxbvTE/LLo+9ZxVC9k99v1v4ahg9Aak6FpqOfNu5kRkeTAn0wphoC4JU7No1/rL+bBCEwhg==} cpu: [x64] os: [win32] - '@sentry-internal/browser-utils@8.30.0': - resolution: {integrity: sha512-pwX+awNWaxSOAsBLVLqc1+Hw+Fm1Nci9mbKFA6Ed5YzCG049PnBVQwugpmx2dcyyCqJpORhcIqb9jHdCkYmCiA==} + '@sentry-internal/browser-utils@8.37.1': + resolution: {integrity: sha512-OSR/V5GCsSCG7iapWtXCT/y22uo3HlawdEgfM1NIKk1mkP15UyGQtGEzZDdih2H+SNuX1mp9jQLTjr5FFp1A5w==} engines: {node: '>=14.18'} - '@sentry-internal/feedback@8.30.0': - resolution: {integrity: sha512-ParFRxQY6helxkwUDmro77Wc5uSIC6rZos88jYMrYwFmoTJaNWf4lDzPyECfdSiSYyzSMZk4dorSUN85Ul7DCg==} + '@sentry-internal/feedback@8.37.1': + resolution: {integrity: sha512-Se25NXbSapgS2S+JssR5YZ48b3OY4UGmAuBOafgnMW91LXMxRNWRbehZuNUmjjHwuywABMxjgu+Yp5uJDATX+g==} engines: {node: '>=14.18'} - '@sentry-internal/replay-canvas@8.30.0': - resolution: {integrity: sha512-y/QqcvchhtMlVA6eOZicIfTxtZarazQZJuFW0018ynPxBTiuuWSxMCLqduulXUYsFejfD8/eKHb3BpCIFdDYjg==} + '@sentry-internal/replay-canvas@8.37.1': + resolution: {integrity: sha512-1JLAaPtn1VL5vblB0BMELFV0D+KUm/iMGsrl4/JpRm0Ws5ESzQl33DhXVv1IX/ZAbx9i14EjR7MG9+Hj70tieQ==} engines: {node: '>=14.18'} - '@sentry-internal/replay@8.30.0': - resolution: {integrity: sha512-/KFre+BrovPCiovgAu5N1ErJtkDVzkJA5hV3Jw011AlxRWxrmPwu6+9sV9/rn3tqYAGyq6IggYqeIOHhLh1Ihg==} + '@sentry-internal/replay@8.37.1': + resolution: {integrity: sha512-E/Plhisk/pXJjOdOU12sg8m/APTXTA21iEniidP6jW3/+O0tD/H/UovEqa4odNTqxPMa798xHQSQNt5loYiaLA==} engines: {node: '>=14.18'} - '@sentry/babel-plugin-component-annotate@2.22.4': - resolution: {integrity: sha512-hbSq067KwmeKIEkmyzkTNJbmbtx2KRqvpiy9Q/DynI5Z46Nko/ppvgIfyFXK9DelwvEPOqZic4WXTIhO4iv3DA==} + '@sentry/babel-plugin-component-annotate@2.22.6': + resolution: {integrity: sha512-V2g1Y1I5eSe7dtUVMBvAJr8BaLRr4CLrgNgtPaZyMT4Rnps82SrZ5zqmEkLXPumlXhLUWR6qzoMNN2u+RXVXfQ==} engines: {node: '>= 14'} - '@sentry/browser@8.30.0': - resolution: {integrity: sha512-M+tKqawH9S3CqlAIcqdZcHbcsNQkEa9MrPqPCYvXco3C4LRpNizJP2XwBiGQY2yK+fOSvbaWpPtlI938/wuRZQ==} + '@sentry/browser@8.37.1': + resolution: {integrity: sha512-5ym+iGiIpjIKKpMWi9S3/tXh9xneS+jqxwRTJqed3cb8i4ydfMAAP8sM3U8xMCWWABpWyIUW+fpewC0tkhE1aQ==} engines: {node: '>=14.18'} - '@sentry/bundler-plugin-core@2.22.4': - resolution: {integrity: sha512-25NiyV3v6mdqOXlpzbbJnq0FHdAu1uTEDr+DU8CzNLjIXlq2Sr2CFZ/mhRcR6daM8OAretJdQ34lu0yHUVeE4Q==} + '@sentry/bundler-plugin-core@2.22.6': + resolution: {integrity: sha512-1esQdgSUCww9XAntO4pr7uAM5cfGhLsgTK9MEwAKNfvpMYJi9NUTYa3A7AZmdA8V6107Lo4OD7peIPrDRbaDCg==} engines: {node: '>= 14'} - '@sentry/cli-darwin@2.36.1': - resolution: {integrity: sha512-JOHQjVD8Kqxm1jUKioAP5ohLOITf+Dh6+DBz4gQjCNdotsvNW5m63TKROwq2oB811p+Jzv5304ujmN4cAqW1Ww==} + '@sentry/cli-darwin@2.38.2': + resolution: {integrity: sha512-21ywIcJCCFrCTyiF1o1PaT7rbelFC2fWmayKYgFElnQ55IzNYkcn8BYhbh/QknE0l1NBRaeWMXwTTdeoqETCCg==} engines: {node: '>=10'} os: [darwin] - '@sentry/cli-linux-arm64@2.36.1': - resolution: {integrity: sha512-R//3ZEkbzvoStr3IA7nxBZNiBYyxOljOqAhgiTnejXHmnuwDzM3TBA2n5vKPE/kBFxboEBEw0UTzTIRb1T0bgw==} + '@sentry/cli-linux-arm64@2.38.2': + resolution: {integrity: sha512-4Fp/jjQpNZj4Th+ZckMQvldAuuP0ZcyJ9tJCP1CCOn5poIKPYtY6zcbTP036R7Te14PS4ALOcDNX3VNKfpsifA==} engines: {node: '>=10'} cpu: [arm64] os: [linux, freebsd] - '@sentry/cli-linux-arm@2.36.1': - resolution: {integrity: sha512-gvEOKN0fWL2AVqUBKHNXPRZfJNvKTs8kQhS8cQqahZGgZHiPCI4BqW45cKMq+ZTt1UUbLmt6khx5Dz7wi+0i5A==} + '@sentry/cli-linux-arm@2.38.2': + resolution: {integrity: sha512-+AiKDBQKIdQe4NhBiHSHGl0KR+b//HHTrnfK1SaTrOm9HtM4ELXAkjkRF3bmbpSzSQCS5WzcbIxxCJOeaUaO0A==} engines: {node: '>=10'} cpu: [arm] os: [linux, freebsd] - '@sentry/cli-linux-i686@2.36.1': - resolution: {integrity: sha512-R7sW5Vk/HacVy2YgQoQB+PwccvFYf2CZVPSFSFm2z7MEfNe77UYHWUq+sjJ4vxWG6HDWGVmaX0fjxyDkE01JRA==} + '@sentry/cli-linux-i686@2.38.2': + resolution: {integrity: sha512-6zVJN10dHIn4R1v+fxuzlblzVBhIVwsaN/S7aBED6Vn1HhAyAcNG2tIzeCLGeDfieYjXlE2sCI82sZkQBCbAGw==} engines: {node: '>=10'} cpu: [x86, ia32] os: [linux, freebsd] - '@sentry/cli-linux-x64@2.36.1': - resolution: {integrity: sha512-UMr3ik8ksA7zQfbzsfwCb+ztenLnaeAbX94Gp+bzANZwPfi/vVHf2bLyqsBs4OyVt9SPlN1bbM/RTGfMjZ3JOw==} + '@sentry/cli-linux-x64@2.38.2': + resolution: {integrity: sha512-4UiLu9zdVtqPeltELR5MDGKcuqAdQY9xz3emISuA6bm+MXGbt2W1WgX+XY3GElwjZbmH8qpyLUEd34sw6sdcbQ==} engines: {node: '>=10'} cpu: [x64] os: [linux, freebsd] - '@sentry/cli-win32-i686@2.36.1': - resolution: {integrity: sha512-CflvhnvxPEs5GWQuuDtYSLqPrBaPbcSJFlBuUIb+8WNzRxvVfjgw1qzfZmkQqABqiy/YEsEekllOoMFZAvCcVA==} + '@sentry/cli-win32-i686@2.38.2': + resolution: {integrity: sha512-DYfSvd5qLPerLpIxj3Xu2rRe3CIlpGOOfGSNI6xvJ5D8j6hqbOHlCzvfC4oBWYVYGtxnwQLMeDGJ7o7RMYulig==} engines: {node: '>=10'} cpu: [x86, ia32] os: [win32] - '@sentry/cli-win32-x64@2.36.1': - resolution: {integrity: sha512-wWqht2xghcK3TGnooHZSzA3WSjdtno/xFjZLvWmw38rblGwgKMxLZnlxV6uDyS+OJ6CbfDTlCRay/0TIqA0N8g==} + '@sentry/cli-win32-x64@2.38.2': + resolution: {integrity: sha512-W5UX58PKY1hNUHo9YJxWNhGvgvv2uOYHI27KchRiUvFYBIqlUUcIdPZDfyzetDfd8qBCxlAsFnkL2VJSNdpA9A==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@sentry/cli@2.36.1': - resolution: {integrity: sha512-gzK5uQKDWKhyH5udoB5+oaUNrS//urWyaXgKvHKz4gFfl744HuKY9dpLPP2nMnf0zLGmGM6xJnMXLqILq0mtxw==} + '@sentry/cli@2.38.2': + resolution: {integrity: sha512-CR0oujpAnhegK2pBAv6ZReMqbFTuNJLDZLvoD1B+syrKZX+R+oxkgT2e1htsBbht+wGxAsluVWsIAydSws1GAA==} engines: {node: '>= 10'} hasBin: true - '@sentry/core@8.30.0': - resolution: {integrity: sha512-CJ/FuWLw0QEKGKXGL/nm9eaOdajEcmPekLuHAuOCxID7N07R9l9laz3vFbAkUZ97GGDv3sYrJZgywfY3Moropg==} + '@sentry/core@8.37.1': + resolution: {integrity: sha512-82csXby589iDupM3VgCHJeWZagUyEEaDnbFcoZ/Z91QX2Sjq8FcF5OsforoXjw09i0XTFqlkFAnQVpDBmMXcpQ==} engines: {node: '>=14.18'} - '@sentry/react@8.30.0': - resolution: {integrity: sha512-ktQjXs87jdsxW0YrHci3sb6zcSzhMECWnrTVU/KGZF8UoDsk4P4xRCknijd2SSmDIjSkwzUAANR43UkCi4BTQg==} + '@sentry/react@8.37.1': + resolution: {integrity: sha512-HanDqBFTgIUhUsYztAHhSti+sEhQ8YopAymXgnpqkJ7j1PLHXZgQAre6M4Uvixu28WS5MDHC1onnAIBDgYRDYw==} engines: {node: '>=14.18'} peerDependencies: react: ^16.14.0 || 17.x || 18.x || 19.x - '@sentry/types@8.30.0': - resolution: {integrity: sha512-kgWW2BCjBmVlSQRG32GonHEVyeDbys74xf9mLPvynwHTgw3+NUlNAlEdu05xnb2ow4bCTHfbkS5G1zRgyv5k4Q==} + '@sentry/types@8.37.1': + resolution: {integrity: sha512-ryMOTROLSLINKFEbHWvi7GigNrsQhsaScw2NddybJGztJQ5UhxIGESnxGxWCufBmWFDwd7+5u0jDPCVUJybp7w==} engines: {node: '>=14.18'} - '@sentry/utils@8.30.0': - resolution: {integrity: sha512-wZxU2HWlzsnu8214Xy7S7cRIuD6h8Z5DnnkojJfX0i0NLooepZQk2824el1Q13AakLb7/S8CHSHXOMnCtoSduw==} + '@sentry/utils@8.37.1': + resolution: {integrity: sha512-Qtn2IfpII12K17txG/ZtTci35XYjYi4CxbQ3j7nXY7toGv/+MqPXwV5q2i9g94XaSXlE5Wy9/hoCZoZpZs/djA==} engines: {node: '>=14.18'} - '@sentry/vite-plugin@2.22.4': - resolution: {integrity: sha512-C51PUlTv0BXN3+e9SjPHptNX3b9E0clrsaR5c//l/sFkQjuteDHKChA1gNzZSvfoa3gm9NzZAgpk3hVF2O3nBA==} + '@sentry/vite-plugin@2.22.6': + resolution: {integrity: sha512-zIieP1VLWQb3wUjFJlwOAoaaJygJhXeUoGd0e/Ha2RLb2eW2S+4gjf6y6NqyY71tZ74LYVZKg/4prB6FAZSMXQ==} engines: {node: '>= 14'} '@testing-library/dom@10.4.0': resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} engines: {node: '>=18'} - '@testing-library/jest-dom@6.5.0': - resolution: {integrity: sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==} + '@testing-library/jest-dom@6.6.3': + resolution: {integrity: sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} '@testing-library/react@16.0.1': @@ -939,8 +957,8 @@ packages: '@types/babel__traverse@7.20.6': resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} - '@types/estree@1.0.5': - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} '@types/hoist-non-react-statics@3.3.5': resolution: {integrity: sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==} @@ -951,29 +969,28 @@ packages: '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - '@types/prop-types@15.7.12': - resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + '@types/prop-types@15.7.13': + resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} '@types/react-transition-group@4.4.11': resolution: {integrity: sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==} - '@types/react@18.3.5': - resolution: {integrity: sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA==} + '@types/react@18.3.12': + resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==} - '@vitejs/plugin-react@4.3.1': - resolution: {integrity: sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==} + '@vitejs/plugin-react@4.3.3': + resolution: {integrity: sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 - '@vitest/expect@2.1.1': - resolution: {integrity: sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==} + '@vitest/expect@2.1.4': + resolution: {integrity: sha512-DOETT0Oh1avie/D/o2sgMHGrzYUFFo3zqESB2Hn70z6QB1HrS2IQ9z5DfyTqU8sg4Bpu13zZe9V4+UTNQlUeQA==} - '@vitest/mocker@2.1.1': - resolution: {integrity: sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==} + '@vitest/mocker@2.1.4': + resolution: {integrity: sha512-Ky/O1Lc0QBbutJdW0rqLeFNbuLEyS+mIPiNdlVlp2/yhJ0SbyYqObS5IHdhferJud8MbbwMnexg4jordE5cCoQ==} peerDependencies: - '@vitest/spy': 2.1.1 - msw: ^2.3.5 + msw: ^2.4.9 vite: ^5.0.0 peerDependenciesMeta: msw: @@ -981,48 +998,48 @@ packages: vite: optional: true - '@vitest/pretty-format@2.1.1': - resolution: {integrity: sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==} + '@vitest/pretty-format@2.1.4': + resolution: {integrity: sha512-L95zIAkEuTDbUX1IsjRl+vyBSLh3PwLLgKpghl37aCK9Jvw0iP+wKwIFhfjdUtA2myLgjrG6VU6JCFLv8q/3Ww==} - '@vitest/runner@2.1.1': - resolution: {integrity: sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==} + '@vitest/runner@2.1.4': + resolution: {integrity: sha512-sKRautINI9XICAMl2bjxQM8VfCMTB0EbsBc/EDFA57V6UQevEKY/TOPOF5nzcvCALltiLfXWbq4MaAwWx/YxIA==} - '@vitest/snapshot@2.1.1': - resolution: {integrity: sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==} + '@vitest/snapshot@2.1.4': + resolution: {integrity: sha512-3Kab14fn/5QZRog5BPj6Rs8dc4B+mim27XaKWFWHWA87R56AKjHTGcBFKpvZKDzC4u5Wd0w/qKsUIio3KzWW4Q==} - '@vitest/spy@2.1.1': - resolution: {integrity: sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==} + '@vitest/spy@2.1.4': + resolution: {integrity: sha512-4JOxa+UAizJgpZfaCPKK2smq9d8mmjZVPMt2kOsg/R8QkoRzydHH1qHxIYNvr1zlEaFj4SXiaaJWxq/LPLKaLg==} - '@vitest/ui@2.1.1': - resolution: {integrity: sha512-IIxo2LkQDA+1TZdPLYPclzsXukBWd5dX2CKpGqH8CCt8Wh0ZuDn4+vuQ9qlppEju6/igDGzjWF/zyorfsf+nHg==} + '@vitest/ui@2.1.4': + resolution: {integrity: sha512-Zd9e5oU063c+j9N9XzGJagCLNvG71x/2tOme3Js4JEZKX55zsgxhJwUgLI8hkN6NjMLpdJO8d7nVUUuPGAA58Q==} peerDependencies: - vitest: 2.1.1 + vitest: 2.1.4 - '@vitest/utils@2.1.1': - resolution: {integrity: sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==} + '@vitest/utils@2.1.4': + resolution: {integrity: sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==} - '@vue/compiler-core@3.5.5': - resolution: {integrity: sha512-ZrxcY8JMoV+kgDrmRwlDufz0SjDZ7jfoNZiIBluAACMBmgr55o/jTbxnyrccH6VSJXnFaDI4Ik1UFCiq9r8i7w==} + '@vue/compiler-core@3.5.12': + resolution: {integrity: sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==} - '@vue/compiler-dom@3.5.5': - resolution: {integrity: sha512-HSvK5q1gmBbxRse3S0Wt34RcKuOyjDJKDDMuF3i7NC+QkDFrbAqw8NnrEm/z7zFDxWZa4/5eUwsBOMQzm1RHBA==} + '@vue/compiler-dom@3.5.12': + resolution: {integrity: sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==} - '@vue/compiler-sfc@3.5.5': - resolution: {integrity: sha512-MzBHDxwZhgQPHrwJ5tj92gdTYRCuPDSZr8PY3+JFv8cv2UD5/WayH5yo0kKCkKfrtJhc39jNSMityHrkMSbfnA==} + '@vue/compiler-sfc@3.5.12': + resolution: {integrity: sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==} - '@vue/compiler-ssr@3.5.5': - resolution: {integrity: sha512-oFasHnpv/upubjJEmqiTKQYb4qS3ziJddf4UVWuFw6ebk/QTrTUc+AUoTJdo39x9g+AOQBzhOU0ICCRuUjvkmw==} + '@vue/compiler-ssr@3.5.12': + resolution: {integrity: sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==} - '@vue/shared@3.5.5': - resolution: {integrity: sha512-0KyMXyEgnmFAs6rNUL+6eUHtUCqCaNrVd+AW3MX3LyA0Yry5SA0Km03CDKiOua1x1WWnIr+W9+S0GMFoSDWERQ==} + '@vue/shared@3.5.12': + resolution: {integrity: sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==} acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} hasBin: true @@ -1041,10 +1058,6 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -1066,8 +1079,8 @@ packages: aria-query@5.3.0: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} - aria-query@5.3.1: - resolution: {integrity: sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==} + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} array-differ@3.0.0: @@ -1092,8 +1105,8 @@ packages: atomico@1.79.2: resolution: {integrity: sha512-mshhLRMeIltNYbnQnqgnrvJ/uDa8XDfTQcjw3ymOygQqwHIQ4Sp0LcNYMCbACkV3DtV+eDXb9szwU4qMUuGwYQ==} - attr-accept@2.2.2: - resolution: {integrity: sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==} + attr-accept@2.2.4: + resolution: {integrity: sha512-2pA6xFIbdTUDCAwjN8nQwI+842VwzbDUXO2IYlpPXQIORgKnavorcr4Ce3rwh+zsNg9zK7QPsdvDj3Lum4WX4w==} engines: {node: '>=4'} babel-plugin-macros@3.1.0: @@ -1117,8 +1130,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.23.3: - resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} + browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1133,24 +1146,20 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - cally@0.7.1: - resolution: {integrity: sha512-pMWInVWdwuQMmXvGQfPVECHRLnQgtwJ4Ya+dIU4D+7I4AQIR7nsVON0cOi4paioNzvtSuu/HiUr22RQOcmiqxA==} + cally@0.7.2: + resolution: {integrity: sha512-ej7AfqMe3ACjAzqvkiH0ZHRSQzRRsoJlQwpvm6oevkEbMrgFmlxkBXdkxnGj4AvG743KGV/3sw2Ya85cbWqWew==} camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001660: - resolution: {integrity: sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==} + caniuse-lite@1.0.30001677: + resolution: {integrity: sha512-fmfjsOlJUpMWu+mAAtZZZHz7UEwsUxIIvu1TJfO1HqFQvB/B+ii0xr9B5HpbZY/mC4XZ8SvjHJqtAY6pDPQEog==} - chai@5.1.1: - resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} + chai@5.1.2: + resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} engines: {node: '>=12'} - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - chalk@3.0.0: resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} engines: {node: '>=8'} @@ -1178,16 +1187,10 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -1290,36 +1293,36 @@ packages: resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} - electron-to-chromium@1.5.22: - resolution: {integrity: sha512-tKYm5YHPU1djz0O+CGJ+oJIvimtsCcwR2Z9w7Skh08lUdyzXY5djods3q+z2JkWdb7tCcmM//eVavSRAiaPRNg==} + electron-to-chromium@1.5.51: + resolution: {integrity: sha512-kKeWV57KSS8jH4alKt/jKnvHPmJgBxXzGUSbMd4eQF+iOsVPl7bz2KUmu6eo80eMP8wVioTfTyTzdMgM15WXNg==} - embla-carousel-autoplay@8.3.0: - resolution: {integrity: sha512-h7DFJLf9uQD+XDxr1NwA3/oFIjsnj/iED2RjET5u6/svMec46IbF1CYPhmB5Q/1Fc0WkcvhPpsEsrtVXQLxNzA==} + embla-carousel-autoplay@8.3.1: + resolution: {integrity: sha512-L8THF1AJJSQtlNa1wZ6lEKh/CiZssE3TsVFtabQNsS+pc1O1O/YTIYCC3khdQAztGMOBf3WfVDIY/4AIfQj3JQ==} peerDependencies: - embla-carousel: 8.3.0 + embla-carousel: 8.3.1 - embla-carousel-class-names@8.3.0: - resolution: {integrity: sha512-d78aB1rZyuvsgfyqzZJiNL8dvZsjWlF9IP62S9pxhhTwsh4Ry5AAYhPSWPjBfuFnOtnq72QDI06ziUuU6wdxHQ==} + embla-carousel-class-names@8.3.1: + resolution: {integrity: sha512-Hap1Y+ILMV3cJopGUC0HAcIqts3KCIHFxcwojYTre2QeH+bf4yFzdPiGVPZ3nooTx7rFgEu9noidw4SnLBqoNw==} peerDependencies: - embla-carousel: 8.3.0 + embla-carousel: 8.3.1 - embla-carousel-fade@8.3.0: - resolution: {integrity: sha512-m0NbkNPTAr6ghINhJrCnI0BRgWWoGRIGUd1tYCxTK00Exm9+kzOVL5KBPkrMVzXRXHe6TRgkmsCkb/7npfwRFQ==} + embla-carousel-fade@8.3.1: + resolution: {integrity: sha512-YUnb222xjkdRDtyC09X59GapaYB6P8baAEHy1rn2UQ0yqixa80kXhG74SoJ6wxLYsZOaw5fZQ2V25p04ltHE/w==} peerDependencies: - embla-carousel: 8.3.0 + embla-carousel: 8.3.1 - embla-carousel-react@8.3.0: - resolution: {integrity: sha512-P1FlinFDcIvggcErRjNuVqnUR8anyo8vLMIH8Rthgofw7Nj8qTguCa2QjFAbzxAUTQTPNNjNL7yt0BGGinVdFw==} + embla-carousel-react@8.3.1: + resolution: {integrity: sha512-gBY0zM+2ASvKFwRpTIOn2SLifFqOKKap9R/y0iCpJWS3bc8OHVEn2gAThGYl2uq0N+hu9aBiswffL++OYZOmDQ==} peerDependencies: - react: ^16.8.0 || ^17.0.1 || ^18.0.0 + react: ^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - embla-carousel-reactive-utils@8.3.0: - resolution: {integrity: sha512-EYdhhJ302SC4Lmkx8GRsp0sjUhEN4WyFXPOk0kGu9OXZSRMmcBlRgTvHcq8eKJE1bXWBsOi1T83B+BSSVZSmwQ==} + embla-carousel-reactive-utils@8.3.1: + resolution: {integrity: sha512-Js6rTTINNGnUGPu7l5kTcheoSbEnP5Ak2iX0G9uOoI8okTNLMzuWlEIpYFd1WP0Sq82FFcLkKM2oiO6jcElZ/Q==} peerDependencies: - embla-carousel: 8.3.0 + embla-carousel: 8.3.1 - embla-carousel@8.3.0: - resolution: {integrity: sha512-Ve8dhI4w28qBqR8J+aMtv7rLK89r1ZA5HocwFz6uMB/i5EiC7bGI7y+AM80yAVUJw3qqaZYK7clmZMUR8kM3UA==} + embla-carousel@8.3.1: + resolution: {integrity: sha512-DutFjtEO586XptDn4cwvBJwsR/8fMa4jUk5Jk2g+/elKgu8mdn0Z2sx33g4JskvbLc1/6P8Xg4QlfELGJFcP5A==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1340,10 +1343,6 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -1352,8 +1351,8 @@ packages: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} - eslint-scope@8.0.2: - resolution: {integrity: sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==} + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@2.1.0: @@ -1364,8 +1363,8 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-visitor-keys@4.0.0: - resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint@9.10.0: @@ -1378,8 +1377,8 @@ packages: jiti: optional: true - espree@10.1.0: - resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} esprima@4.0.1: @@ -1417,6 +1416,10 @@ packages: resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} engines: {node: '>=0.10.0'} + expect-type@1.1.0: + resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} + engines: {node: '>=12.0.0'} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -1429,8 +1432,8 @@ packages: fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} - fdir@6.4.0: - resolution: {integrity: sha512-3oB133prH1o4j/L5lLW7uOCF1PlD+/It2L0eL/iAqWMB91RBbqTewABqxhj0ibBd90EEmWZq7ntIWzVaWcXTGQ==} + fdir@6.4.2: + resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -1448,8 +1451,8 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} - file-selector@0.6.0: - resolution: {integrity: sha512-QlZ5yJC0VxHxQQsQhXvBaC7VRJ2uaxTf+Tfpu4Z/OcVQJVpZO+DGU0rkoVW5ce2SccxugvpBJoMvUs59iILYdw==} + file-selector@2.1.0: + resolution: {integrity: sha512-ZuXAqGePcSPz4JuerOY06Dzzq0hrmQ6VGoXVzGyFI1npeOfBgqGIKKpznfYWRkSLJlXutkqVC5WvGZtkFVhu9Q==} engines: {node: '>= 12'} filepond-plugin-file-validate-type@1.2.9: @@ -1467,8 +1470,8 @@ packages: peerDependencies: filepond: '>=4.x <5.x' - filepond@4.31.3: - resolution: {integrity: sha512-XMbPmfkYzUsdQrJJfa3fXigOgTwksUKVPzlGaA4Kwxg833+Vsr09YkKWBq5SbWJHlMAu6CmEOQo+EzjMUtJruw==} + filepond@4.32.1: + resolution: {integrity: sha512-saY+F6VsiUomUH+w/sFO49gwL+GZG3WglSbg46ubuowSY3imE6dl1wUu48VT1NnIIeXFqRUEDt9td2QP8C6uDg==} fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} @@ -1492,8 +1495,8 @@ packages: flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} engines: {node: '>= 6'} formdata-polyfill@4.0.10: @@ -1533,9 +1536,6 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-func-name@2.0.2: - resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} - glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -1564,10 +1564,6 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -1675,6 +1671,10 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + jiti@1.21.6: + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + hasBin: true + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -1686,8 +1686,8 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsdom@25.0.0: - resolution: {integrity: sha512-OhoFVT59T7aEq75TVw9xxEfkXgacpqAhQaYgP9y/fDqWQCMB/b1H66RfmPm/MaeaAIU9nDwMOVTlPN51+ao6CQ==} + jsdom@25.0.1: + resolution: {integrity: sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==} engines: {node: '>=18'} peerDependencies: canvas: ^2.11.2 @@ -1695,9 +1695,9 @@ packages: canvas: optional: true - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} hasBin: true json-buffer@3.0.1: @@ -1744,8 +1744,8 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - loupe@3.1.1: - resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} + loupe@3.1.2: + resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -1757,8 +1757,8 @@ packages: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true - magic-string@0.30.11: - resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} + magic-string@0.30.12: + resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} magic-string@0.30.8: resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} @@ -1842,8 +1842,8 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - nwsapi@2.2.12: - resolution: {integrity: sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==} + nwsapi@2.2.13: + resolution: {integrity: sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==} object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} @@ -1857,8 +1857,8 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - oxlint@0.9.5: - resolution: {integrity: sha512-Jw1QnE3GPwkKU6JUIfA+b8W5e+Oq9gAPDkEUK2ImE/1kPGoO2iHUmvnI0FS7sHeivHWbe1lsfdetWgxeW5YBZA==} + oxlint@0.9.10: + resolution: {integrity: sha512-bKiiFN7Hnoaist/rditTRBXz+GXKYuLd53/NB7Q6zHB/bifELJarSoRLkAUGElIJKl4PSr3lTh1g6zehh+rX0g==} engines: {node: '>=14.*'} hasBin: true @@ -1882,8 +1882,8 @@ packages: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} engines: {node: '>=0.10.0'} - parse5@7.1.2: - resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} @@ -1911,8 +1911,8 @@ packages: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} engines: {node: '>= 14.16'} - picocolors@1.1.0: - resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -1928,8 +1928,8 @@ packages: popmotion@9.3.6: resolution: {integrity: sha512-ZTbXiu6zIggXzIliMi8LGxXBF5ST+wkpXGEjeTUDUOCdSQ356hij/xjeUdv0F8zCQNeqB1+PR5/BB+gC+QLAPw==} - postcss@8.4.45: - resolution: {integrity: sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==} + postcss@8.4.47: + resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -1958,16 +1958,10 @@ packages: proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - psl@1.9.0: - resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - querystringify@2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -1976,8 +1970,8 @@ packages: peerDependencies: react: ^18.3.1 - react-dropzone@14.2.3: - resolution: {integrity: sha512-O3om8I+PkFKbxCukfIR3QAGftYXDZfOE2N1mr/7qebQJHs7U+/RSL/9xomJNpRg9kM5h9soQSdf0Gc7OHF5Fug==} + react-dropzone@14.3.5: + resolution: {integrity: sha512-9nDUaEEpqZLOz5v5SUcFA0CjM4vq8YbqO0WRls+EYT7+DvxUdzDPKNCPLqGfj3YL9MsniCLCD4RFA6M95V6KMQ==} engines: {node: '>= 10.13'} peerDependencies: react: '>= 16.8 || 18.0.0' @@ -2016,15 +2010,15 @@ packages: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} - react-router-dom@6.26.2: - resolution: {integrity: sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==} + react-router-dom@6.27.0: + resolution: {integrity: sha512-+bvtFWMC0DgAFrfKXKG9Fc+BcXWRUO1aJIihbB79xaeq0v5UzfvnM5houGUm1Y461WVRcgAQ+Clh5rdb1eCx4g==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' react-dom: '>=16.8' - react-router@6.26.2: - resolution: {integrity: sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==} + react-router@6.27.0: + resolution: {integrity: sha512-YA+HGZXz4jaAkVoYBE98VQl+nVzI+cVI2Oj/06F5ZM+0u3TgedN9Y9kmMRo2mnkSK2nCpNQn0DVob4HCsY/WLw==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' @@ -2057,9 +2051,6 @@ packages: require-package-name@2.0.1: resolution: {integrity: sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==} - requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - reselect@5.1.1: resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==} @@ -2093,8 +2084,8 @@ packages: rollup: optional: true - rollup@4.21.3: - resolution: {integrity: sha512-7sqRtBNnEbcBtMeRVc6VRsJMmpI+JU1z9VTvW8D4gXIYQFz0aLcsE6rRkyghZkLfEgUZgVvOG7A5CVz/VW5GIA==} + rollup@4.24.4: + resolution: {integrity: sha512-vGorVWIsWfX3xbcyAS+I047kFKapHYivmkaT63Smj77XwvLSJos6M1xGqZnBPFQFBRZDOcG1QnYEIxAvTr/HjA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -2137,9 +2128,15 @@ packages: siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - sirv@2.0.4: - resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} - engines: {node: '>= 10'} + sirv@3.0.0: + resolution: {integrity: sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==} + engines: {node: '>=18'} + + sonner@1.7.0: + resolution: {integrity: sha512-W6dH7m5MujEPyug3lpI2l3TC3Pp1+LTgK0Efg+IHDrBbtEjyCmCHHo6yfNBOsf1tFZ6zf+jceWwB38baC8yO9g==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} @@ -2184,10 +2181,6 @@ packages: stylis@4.2.0: resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -2215,11 +2208,11 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@0.3.0: - resolution: {integrity: sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==} + tinyexec@0.3.1: + resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} - tinyglobby@0.2.9: - resolution: {integrity: sha512-8or1+BGEdk1Zkkw2ii16qSS7uVrQJPre5A9o/XkWPATkk23FZh/15BKFxPnlTy6vkljZxLqYCzzBMj30ZrSvjw==} + tinyglobby@0.2.10: + resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} engines: {node: '>=12.0.0'} tinypool@1.0.1: @@ -2234,9 +2227,12 @@ packages: resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} + tldts-core@6.1.58: + resolution: {integrity: sha512-dR936xmhBm7AeqHIhCWwK765gZ7dFyL+IqLSFAjJbFlUXGMLCb8i2PzlzaOuWBuplBTaBYseSb565nk/ZEM0Bg==} + + tldts@6.1.58: + resolution: {integrity: sha512-MQJrJhjHOYGYb8DobR6Y4AdDbd4TYkyQ+KBDVc5ODzs1cbrvPpfN1IemYi9jfipJ/vR1YWvrDli0hg1y19VRoA==} + hasBin: true to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} @@ -2249,9 +2245,9 @@ packages: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} - tough-cookie@4.1.4: - resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} - engines: {node: '>=6'} + tough-cookie@5.0.0: + resolution: {integrity: sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==} + engines: {node: '>=16'} tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -2260,8 +2256,8 @@ packages: resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} engines: {node: '>=18'} - tslib@2.7.0: - resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} @@ -2271,15 +2267,11 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - universalify@0.2.0: - resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} - engines: {node: '>= 4.0.0'} - unplugin@1.0.1: resolution: {integrity: sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==} - update-browserslist-db@1.1.0: - resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -2287,16 +2279,13 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - url-parse@1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} - - vite-node@2.1.1: - resolution: {integrity: sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==} + vite-node@2.1.4: + resolution: {integrity: sha512-kqa9v+oi4HwkG6g8ufRnb5AeplcRw8jUF6/7/Qz1qRQOXHImG8YnLbB+LLszENwFnoBl9xIf9nVdCFzNd7GQEg==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true - vite@5.4.5: - resolution: {integrity: sha512-pXqR0qtb2bTwLkev4SE3r4abCNioP3GkjvIDLlzziPpXtHgiJIjuKl+1GN6ESOT3wMjG3JTeARopj2SwYaHTOA==} + vite@5.4.10: + resolution: {integrity: sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -2326,15 +2315,15 @@ packages: terser: optional: true - vitest@2.1.1: - resolution: {integrity: sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==} + vitest@2.1.4: + resolution: {integrity: sha512-eDjxbVAJw1UJJCHr5xr/xM86Zx+YxIEXGAR+bmnEID7z9qWfoxpHw0zdobz+TQAFOLT+nEXz3+gx6nUJ7RgmlQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 2.1.1 - '@vitest/ui': 2.1.1 + '@vitest/browser': 2.1.4 + '@vitest/ui': 2.1.4 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -2478,25 +2467,26 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@babel/code-frame@7.24.7': + '@babel/code-frame@7.26.2': dependencies: - '@babel/highlight': 7.24.7 - picocolors: 1.1.0 + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 - '@babel/compat-data@7.25.4': {} + '@babel/compat-data@7.26.2': {} - '@babel/core@7.25.2': + '@babel/core@7.26.0': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.6 - '@babel/helper-compilation-targets': 7.25.2 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) - '@babel/helpers': 7.25.6 - '@babel/parser': 7.25.6 - '@babel/template': 7.25.0 - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.2 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helpers': 7.26.0 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 convert-source-map: 2.0.0 debug: 4.3.7 gensync: 1.0.0-beta.2 @@ -2505,122 +2495,107 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.25.1(@babel/core@7.25.2)(eslint@9.10.0)': + '@babel/eslint-parser@7.25.9(@babel/core@7.26.0)(eslint@9.10.0(jiti@1.21.6))': dependencies: - '@babel/core': 7.25.2 + '@babel/core': 7.26.0 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 9.10.0 + eslint: 9.10.0(jiti@1.21.6) eslint-visitor-keys: 2.1.0 semver: 6.3.1 - '@babel/generator@7.25.6': + '@babel/generator@7.26.2': dependencies: - '@babel/types': 7.25.6 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 + jsesc: 3.0.2 - '@babel/helper-compilation-targets@7.25.2': + '@babel/helper-compilation-targets@7.25.9': dependencies: - '@babel/compat-data': 7.25.4 - '@babel/helper-validator-option': 7.24.8 - browserslist: 4.23.3 + '@babel/compat-data': 7.26.2 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.2 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-module-imports@7.24.7': + '@babel/helper-module-imports@7.25.9': dependencies: - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)': + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - '@babel/traverse': 7.25.6 + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/helper-plugin-utils@7.24.8': {} + '@babel/helper-plugin-utils@7.25.9': {} - '@babel/helper-simple-access@7.24.7': - dependencies: - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 - transitivePeerDependencies: - - supports-color + '@babel/helper-string-parser@7.25.9': {} - '@babel/helper-string-parser@7.24.8': {} + '@babel/helper-validator-identifier@7.25.9': {} - '@babel/helper-validator-identifier@7.24.7': {} + '@babel/helper-validator-option@7.25.9': {} - '@babel/helper-validator-option@7.24.8': {} - - '@babel/helpers@7.25.6': + '@babel/helpers@7.26.0': dependencies: - '@babel/template': 7.25.0 - '@babel/types': 7.25.6 + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 - '@babel/highlight@7.24.7': + '@babel/parser@7.26.2': dependencies: - '@babel/helper-validator-identifier': 7.24.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.1.0 + '@babel/types': 7.26.0 - '@babel/parser@7.25.6': + '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/types': 7.25.6 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-react-jsx-self@7.24.7(@babel/core@7.25.2)': + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-react-jsx-source@7.24.7(@babel/core@7.25.2)': - dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/runtime@7.25.6': + '@babel/runtime@7.26.0': dependencies: regenerator-runtime: 0.14.1 - '@babel/template@7.25.0': + '@babel/template@7.25.9': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.25.6 - '@babel/types': 7.25.6 + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 - '@babel/traverse@7.25.6': + '@babel/traverse@7.25.9': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.6 - '@babel/parser': 7.25.6 - '@babel/template': 7.25.0 - '@babel/types': 7.25.6 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.25.6': + '@babel/types@7.26.0': dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 '@emotion/babel-plugin@11.12.0': dependencies: - '@babel/helper-module-imports': 7.24.7 - '@babel/runtime': 7.25.6 + '@babel/helper-module-imports': 7.25.9 + '@babel/runtime': 7.26.0 '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 - '@emotion/serialize': 1.3.1 + '@emotion/serialize': 1.3.2 babel-plugin-macros: 3.1.0 convert-source-map: 1.9.0 escape-string-regexp: 4.0.0 @@ -2634,7 +2609,7 @@ snapshots: dependencies: '@emotion/memoize': 0.9.0 '@emotion/sheet': 1.4.0 - '@emotion/utils': 1.4.0 + '@emotion/utils': 1.4.1 '@emotion/weak-memoize': 0.4.0 stylis: 4.2.0 @@ -2645,7 +2620,7 @@ snapshots: '@emotion/memoize': 0.7.4 optional: true - '@emotion/is-prop-valid@1.3.0': + '@emotion/is-prop-valid@1.3.1': dependencies: '@emotion/memoize': 0.9.0 @@ -2654,44 +2629,44 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1)': + '@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@emotion/babel-plugin': 11.12.0 '@emotion/cache': 11.13.1 - '@emotion/serialize': 1.3.1 + '@emotion/serialize': 1.3.2 '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.3.1) - '@emotion/utils': 1.4.0 + '@emotion/utils': 1.4.1 '@emotion/weak-memoize': 0.4.0 hoist-non-react-statics: 3.3.2 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.5 + '@types/react': 18.3.12 transitivePeerDependencies: - supports-color - '@emotion/serialize@1.3.1': + '@emotion/serialize@1.3.2': dependencies: '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 '@emotion/unitless': 0.10.0 - '@emotion/utils': 1.4.0 + '@emotion/utils': 1.4.1 csstype: 3.1.3 '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1)': + '@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@emotion/babel-plugin': 11.12.0 - '@emotion/is-prop-valid': 1.3.0 - '@emotion/react': 11.13.3(@types/react@18.3.5)(react@18.3.1) - '@emotion/serialize': 1.3.1 + '@emotion/is-prop-valid': 1.3.1 + '@emotion/react': 11.13.3(@types/react@18.3.12)(react@18.3.1) + '@emotion/serialize': 1.3.2 '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.3.1) - '@emotion/utils': 1.4.0 + '@emotion/utils': 1.4.1 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.5 + '@types/react': 18.3.12 transitivePeerDependencies: - supports-color @@ -2701,7 +2676,7 @@ snapshots: dependencies: react: 18.3.1 - '@emotion/utils@1.4.0': {} + '@emotion/utils@1.4.1': {} '@emotion/weak-memoize@0.4.0': {} @@ -2774,12 +2749,12 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@9.10.0)': + '@eslint-community/eslint-utils@4.4.1(eslint@9.10.0(jiti@1.21.6))': dependencies: - eslint: 9.10.0 + eslint: 9.10.0(jiti@1.21.6) eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.11.0': {} + '@eslint-community/regexpp@4.12.1': {} '@eslint/config-array@0.18.0': dependencies: @@ -2793,7 +2768,7 @@ snapshots: dependencies: ajv: 6.12.6 debug: 4.3.7 - espree: 10.1.0 + espree: 10.3.0 globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.0 @@ -2811,26 +2786,26 @@ snapshots: dependencies: levn: 0.4.1 - '@floating-ui/core@1.6.7': + '@floating-ui/core@1.6.8': dependencies: - '@floating-ui/utils': 0.2.7 + '@floating-ui/utils': 0.2.8 - '@floating-ui/dom@1.6.10': + '@floating-ui/dom@1.6.12': dependencies: - '@floating-ui/core': 1.6.7 - '@floating-ui/utils': 0.2.7 + '@floating-ui/core': 1.6.8 + '@floating-ui/utils': 0.2.8 - '@floating-ui/react-dom@2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@floating-ui/dom': 1.6.10 + '@floating-ui/dom': 1.6.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@floating-ui/utils@0.2.7': {} + '@floating-ui/utils@0.2.8': {} '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/retry@0.3.0': {} + '@humanwhocodes/retry@0.3.1': {} '@jridgewell/gen-mapping@0.3.5': dependencies: @@ -2849,54 +2824,54 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@mui/base@5.0.0-beta.40(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@mui/base@5.0.0-beta.40(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 - '@floating-ui/react-dom': 2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mui/types': 7.2.16(@types/react@18.3.5) - '@mui/utils': 5.16.6(@types/react@18.3.5)(react@18.3.1) + '@babel/runtime': 7.26.0 + '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mui/types': 7.2.19(@types/react@18.3.12) + '@mui/utils': 5.16.6(@types/react@18.3.12)(react@18.3.1) '@popperjs/core': 2.11.8 clsx: 2.1.1 prop-types: 15.8.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.5 + '@types/react': 18.3.12 '@mui/core-downloads-tracker@5.16.7': {} - '@mui/icons-material@5.16.7(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.5)(react@18.3.1)': + '@mui/icons-material@5.16.7(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.12)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 - '@mui/material': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@babel/runtime': 7.26.0 + '@mui/material': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.5 + '@types/react': 18.3.12 - '@mui/lab@5.0.0-alpha.173(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@mui/lab@5.0.0-alpha.173(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 - '@mui/base': 5.0.0-beta.40(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mui/material': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mui/system': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1) - '@mui/types': 7.2.16(@types/react@18.3.5) - '@mui/utils': 5.16.6(@types/react@18.3.5)(react@18.3.1) + '@babel/runtime': 7.26.0 + '@mui/base': 5.0.0-beta.40(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mui/material': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mui/system': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) + '@mui/types': 7.2.19(@types/react@18.3.12) + '@mui/utils': 5.16.6(@types/react@18.3.12)(react@18.3.1) clsx: 2.1.1 prop-types: 15.8.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@emotion/react': 11.13.3(@types/react@18.3.5)(react@18.3.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1) - '@types/react': 18.3.5 + '@emotion/react': 11.13.3(@types/react@18.3.12)(react@18.3.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) + '@types/react': 18.3.12 - '@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@mui/core-downloads-tracker': 5.16.7 - '@mui/system': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1) - '@mui/types': 7.2.16(@types/react@18.3.5) - '@mui/utils': 5.16.6(@types/react@18.3.5)(react@18.3.1) + '@mui/system': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) + '@mui/types': 7.2.19(@types/react@18.3.12) + '@mui/utils': 5.16.6(@types/react@18.3.12)(react@18.3.1) '@popperjs/core': 2.11.8 '@types/react-transition-group': 4.4.11 clsx: 2.1.1 @@ -2907,84 +2882,96 @@ snapshots: react-is: 18.3.1 react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) optionalDependencies: - '@emotion/react': 11.13.3(@types/react@18.3.5)(react@18.3.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1) - '@types/react': 18.3.5 + '@emotion/react': 11.13.3(@types/react@18.3.12)(react@18.3.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) + '@types/react': 18.3.12 - '@mui/private-theming@5.16.6(@types/react@18.3.5)(react@18.3.1)': + '@mui/private-theming@5.16.6(@types/react@18.3.12)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 - '@mui/utils': 5.16.6(@types/react@18.3.5)(react@18.3.1) + '@babel/runtime': 7.26.0 + '@mui/utils': 5.16.6(@types/react@18.3.12)(react@18.3.1) prop-types: 15.8.1 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.5 + '@types/react': 18.3.12 - '@mui/styled-engine@5.16.6(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(react@18.3.1)': + '@mui/styled-engine@5.16.6(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@emotion/cache': 11.13.1 csstype: 3.1.3 prop-types: 15.8.1 react: 18.3.1 optionalDependencies: - '@emotion/react': 11.13.3(@types/react@18.3.5)(react@18.3.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1) + '@emotion/react': 11.13.3(@types/react@18.3.12)(react@18.3.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) - '@mui/system@5.16.7(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1)': + '@mui/system@5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 - '@mui/private-theming': 5.16.6(@types/react@18.3.5)(react@18.3.1) - '@mui/styled-engine': 5.16.6(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(react@18.3.1) - '@mui/types': 7.2.16(@types/react@18.3.5) - '@mui/utils': 5.16.6(@types/react@18.3.5)(react@18.3.1) + '@babel/runtime': 7.26.0 + '@mui/private-theming': 5.16.6(@types/react@18.3.12)(react@18.3.1) + '@mui/styled-engine': 5.16.6(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) + '@mui/types': 7.2.19(@types/react@18.3.12) + '@mui/utils': 5.16.6(@types/react@18.3.12)(react@18.3.1) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 react: 18.3.1 optionalDependencies: - '@emotion/react': 11.13.3(@types/react@18.3.5)(react@18.3.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1) - '@types/react': 18.3.5 + '@emotion/react': 11.13.3(@types/react@18.3.12)(react@18.3.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) + '@types/react': 18.3.12 - '@mui/types@7.2.16(@types/react@18.3.5)': + '@mui/types@7.2.19(@types/react@18.3.12)': optionalDependencies: - '@types/react': 18.3.5 + '@types/react': 18.3.12 - '@mui/utils@5.16.6(@types/react@18.3.5)(react@18.3.1)': + '@mui/utils@5.16.6(@types/react@18.3.12)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 - '@mui/types': 7.2.16(@types/react@18.3.5) - '@types/prop-types': 15.7.12 + '@babel/runtime': 7.26.0 + '@mui/types': 7.2.19(@types/react@18.3.12) + '@types/prop-types': 15.7.13 clsx: 2.1.1 prop-types: 15.8.1 react: 18.3.1 react-is: 18.3.1 optionalDependencies: - '@types/react': 18.3.5 + '@types/react': 18.3.12 - '@mui/x-data-grid@7.17.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mui/system@5.16.7(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@mui/utils@6.1.6(@types/react@18.3.12)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 - '@mui/material': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mui/system': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1) - '@mui/utils': 5.16.6(@types/react@18.3.5)(react@18.3.1) - '@mui/x-internals': 7.17.0(@types/react@18.3.5)(react@18.3.1) + '@babel/runtime': 7.26.0 + '@mui/types': 7.2.19(@types/react@18.3.12) + '@types/prop-types': 15.7.13 + clsx: 2.1.1 + prop-types: 15.8.1 + react: 18.3.1 + react-is: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@mui/x-data-grid@7.22.1(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mui/system@5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.26.0 + '@mui/material': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mui/system': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) + '@mui/utils': 6.1.6(@types/react@18.3.12)(react@18.3.1) + '@mui/x-internals': 7.21.0(@types/react@18.3.12)(react@18.3.1) clsx: 2.1.1 prop-types: 15.8.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) reselect: 5.1.1 optionalDependencies: - '@emotion/react': 11.13.3(@types/react@18.3.5)(react@18.3.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1) + '@emotion/react': 11.13.3(@types/react@18.3.12)(react@18.3.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) transitivePeerDependencies: - '@types/react' - '@mui/x-internals@7.17.0(@types/react@18.3.5)(react@18.3.1)': + '@mui/x-internals@7.21.0(@types/react@18.3.12)(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 - '@mui/utils': 5.16.6(@types/react@18.3.5)(react@18.3.1) + '@babel/runtime': 7.26.0 + '@mui/utils': 6.1.6(@types/react@18.3.12)(react@18.3.1) react: 18.3.1 transitivePeerDependencies: - '@types/react' @@ -3005,127 +2992,133 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - '@oxlint/darwin-arm64@0.9.5': + '@oxlint/darwin-arm64@0.9.10': optional: true - '@oxlint/darwin-x64@0.9.5': + '@oxlint/darwin-x64@0.9.10': optional: true - '@oxlint/linux-arm64-gnu@0.9.5': + '@oxlint/linux-arm64-gnu@0.9.10': optional: true - '@oxlint/linux-arm64-musl@0.9.5': + '@oxlint/linux-arm64-musl@0.9.10': optional: true - '@oxlint/linux-x64-gnu@0.9.5': + '@oxlint/linux-x64-gnu@0.9.10': optional: true - '@oxlint/linux-x64-musl@0.9.5': + '@oxlint/linux-x64-musl@0.9.10': optional: true - '@oxlint/win32-arm64@0.9.5': + '@oxlint/win32-arm64@0.9.10': optional: true - '@oxlint/win32-x64@0.9.5': + '@oxlint/win32-x64@0.9.10': optional: true '@polka/url@1.0.0-next.28': {} '@popperjs/core@2.11.8': {} - '@remix-run/router@1.19.2': {} + '@remix-run/router@1.20.0': {} + + '@rollup/rollup-android-arm-eabi@4.24.4': + optional: true + + '@rollup/rollup-android-arm64@4.24.4': + optional: true - '@rollup/rollup-android-arm-eabi@4.21.3': + '@rollup/rollup-darwin-arm64@4.24.4': optional: true - '@rollup/rollup-android-arm64@4.21.3': + '@rollup/rollup-darwin-x64@4.24.4': optional: true - '@rollup/rollup-darwin-arm64@4.21.3': + '@rollup/rollup-freebsd-arm64@4.24.4': optional: true - '@rollup/rollup-darwin-x64@4.21.3': + '@rollup/rollup-freebsd-x64@4.24.4': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.21.3': + '@rollup/rollup-linux-arm-gnueabihf@4.24.4': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.21.3': + '@rollup/rollup-linux-arm-musleabihf@4.24.4': optional: true - '@rollup/rollup-linux-arm64-gnu@4.21.3': + '@rollup/rollup-linux-arm64-gnu@4.24.4': optional: true - '@rollup/rollup-linux-arm64-musl@4.21.3': + '@rollup/rollup-linux-arm64-musl@4.24.4': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.21.3': + '@rollup/rollup-linux-powerpc64le-gnu@4.24.4': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.21.3': + '@rollup/rollup-linux-riscv64-gnu@4.24.4': optional: true - '@rollup/rollup-linux-s390x-gnu@4.21.3': + '@rollup/rollup-linux-s390x-gnu@4.24.4': optional: true - '@rollup/rollup-linux-x64-gnu@4.21.3': + '@rollup/rollup-linux-x64-gnu@4.24.4': optional: true - '@rollup/rollup-linux-x64-musl@4.21.3': + '@rollup/rollup-linux-x64-musl@4.24.4': optional: true - '@rollup/rollup-win32-arm64-msvc@4.21.3': + '@rollup/rollup-win32-arm64-msvc@4.24.4': optional: true - '@rollup/rollup-win32-ia32-msvc@4.21.3': + '@rollup/rollup-win32-ia32-msvc@4.24.4': optional: true - '@rollup/rollup-win32-x64-msvc@4.21.3': + '@rollup/rollup-win32-x64-msvc@4.24.4': optional: true - '@sentry-internal/browser-utils@8.30.0': + '@sentry-internal/browser-utils@8.37.1': dependencies: - '@sentry/core': 8.30.0 - '@sentry/types': 8.30.0 - '@sentry/utils': 8.30.0 + '@sentry/core': 8.37.1 + '@sentry/types': 8.37.1 + '@sentry/utils': 8.37.1 - '@sentry-internal/feedback@8.30.0': + '@sentry-internal/feedback@8.37.1': dependencies: - '@sentry/core': 8.30.0 - '@sentry/types': 8.30.0 - '@sentry/utils': 8.30.0 + '@sentry/core': 8.37.1 + '@sentry/types': 8.37.1 + '@sentry/utils': 8.37.1 - '@sentry-internal/replay-canvas@8.30.0': + '@sentry-internal/replay-canvas@8.37.1': dependencies: - '@sentry-internal/replay': 8.30.0 - '@sentry/core': 8.30.0 - '@sentry/types': 8.30.0 - '@sentry/utils': 8.30.0 + '@sentry-internal/replay': 8.37.1 + '@sentry/core': 8.37.1 + '@sentry/types': 8.37.1 + '@sentry/utils': 8.37.1 - '@sentry-internal/replay@8.30.0': + '@sentry-internal/replay@8.37.1': dependencies: - '@sentry-internal/browser-utils': 8.30.0 - '@sentry/core': 8.30.0 - '@sentry/types': 8.30.0 - '@sentry/utils': 8.30.0 + '@sentry-internal/browser-utils': 8.37.1 + '@sentry/core': 8.37.1 + '@sentry/types': 8.37.1 + '@sentry/utils': 8.37.1 - '@sentry/babel-plugin-component-annotate@2.22.4': {} + '@sentry/babel-plugin-component-annotate@2.22.6': {} - '@sentry/browser@8.30.0': + '@sentry/browser@8.37.1': dependencies: - '@sentry-internal/browser-utils': 8.30.0 - '@sentry-internal/feedback': 8.30.0 - '@sentry-internal/replay': 8.30.0 - '@sentry-internal/replay-canvas': 8.30.0 - '@sentry/core': 8.30.0 - '@sentry/types': 8.30.0 - '@sentry/utils': 8.30.0 + '@sentry-internal/browser-utils': 8.37.1 + '@sentry-internal/feedback': 8.37.1 + '@sentry-internal/replay': 8.37.1 + '@sentry-internal/replay-canvas': 8.37.1 + '@sentry/core': 8.37.1 + '@sentry/types': 8.37.1 + '@sentry/utils': 8.37.1 - '@sentry/bundler-plugin-core@2.22.4': + '@sentry/bundler-plugin-core@2.22.6': dependencies: - '@babel/core': 7.25.2 - '@sentry/babel-plugin-component-annotate': 2.22.4 - '@sentry/cli': 2.36.1 + '@babel/core': 7.26.0 + '@sentry/babel-plugin-component-annotate': 2.22.6 + '@sentry/cli': 2.38.2 dotenv: 16.4.5 find-up: 5.0.0 glob: 9.3.5 @@ -3135,28 +3128,28 @@ snapshots: - encoding - supports-color - '@sentry/cli-darwin@2.36.1': + '@sentry/cli-darwin@2.38.2': optional: true - '@sentry/cli-linux-arm64@2.36.1': + '@sentry/cli-linux-arm64@2.38.2': optional: true - '@sentry/cli-linux-arm@2.36.1': + '@sentry/cli-linux-arm@2.38.2': optional: true - '@sentry/cli-linux-i686@2.36.1': + '@sentry/cli-linux-i686@2.38.2': optional: true - '@sentry/cli-linux-x64@2.36.1': + '@sentry/cli-linux-x64@2.38.2': optional: true - '@sentry/cli-win32-i686@2.36.1': + '@sentry/cli-win32-i686@2.38.2': optional: true - '@sentry/cli-win32-x64@2.36.1': + '@sentry/cli-win32-x64@2.38.2': optional: true - '@sentry/cli@2.36.1': + '@sentry/cli@2.38.2': dependencies: https-proxy-agent: 5.0.1 node-fetch: 2.7.0 @@ -3164,40 +3157,40 @@ snapshots: proxy-from-env: 1.1.0 which: 2.0.2 optionalDependencies: - '@sentry/cli-darwin': 2.36.1 - '@sentry/cli-linux-arm': 2.36.1 - '@sentry/cli-linux-arm64': 2.36.1 - '@sentry/cli-linux-i686': 2.36.1 - '@sentry/cli-linux-x64': 2.36.1 - '@sentry/cli-win32-i686': 2.36.1 - '@sentry/cli-win32-x64': 2.36.1 + '@sentry/cli-darwin': 2.38.2 + '@sentry/cli-linux-arm': 2.38.2 + '@sentry/cli-linux-arm64': 2.38.2 + '@sentry/cli-linux-i686': 2.38.2 + '@sentry/cli-linux-x64': 2.38.2 + '@sentry/cli-win32-i686': 2.38.2 + '@sentry/cli-win32-x64': 2.38.2 transitivePeerDependencies: - encoding - supports-color - '@sentry/core@8.30.0': + '@sentry/core@8.37.1': dependencies: - '@sentry/types': 8.30.0 - '@sentry/utils': 8.30.0 + '@sentry/types': 8.37.1 + '@sentry/utils': 8.37.1 - '@sentry/react@8.30.0(react@18.3.1)': + '@sentry/react@8.37.1(react@18.3.1)': dependencies: - '@sentry/browser': 8.30.0 - '@sentry/core': 8.30.0 - '@sentry/types': 8.30.0 - '@sentry/utils': 8.30.0 + '@sentry/browser': 8.37.1 + '@sentry/core': 8.37.1 + '@sentry/types': 8.37.1 + '@sentry/utils': 8.37.1 hoist-non-react-statics: 3.3.2 react: 18.3.1 - '@sentry/types@8.30.0': {} + '@sentry/types@8.37.1': {} - '@sentry/utils@8.30.0': + '@sentry/utils@8.37.1': dependencies: - '@sentry/types': 8.30.0 + '@sentry/types': 8.37.1 - '@sentry/vite-plugin@2.22.4': + '@sentry/vite-plugin@2.22.6': dependencies: - '@sentry/bundler-plugin-core': 2.22.4 + '@sentry/bundler-plugin-core': 2.22.6 unplugin: 1.0.1 transitivePeerDependencies: - encoding @@ -3205,8 +3198,8 @@ snapshots: '@testing-library/dom@10.4.0': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/runtime': 7.25.6 + '@babel/code-frame': 7.26.2 + '@babel/runtime': 7.26.0 '@types/aria-query': 5.0.4 aria-query: 5.3.0 chalk: 4.1.2 @@ -3214,24 +3207,24 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/jest-dom@6.5.0': + '@testing-library/jest-dom@6.6.3': dependencies: '@adobe/css-tools': 4.4.0 - aria-query: 5.3.1 + aria-query: 5.3.2 chalk: 3.0.0 css.escape: 1.5.1 dom-accessibility-api: 0.6.3 lodash: 4.17.21 redent: 3.0.0 - '@testing-library/react@16.0.1(@testing-library/dom@10.4.0)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@testing-library/react@16.0.1(@testing-library/dom@10.4.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@testing-library/dom': 10.4.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.5 + '@types/react': 18.3.12 '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)': dependencies: @@ -3241,146 +3234,146 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.25.6 - '@babel/types': 7.25.6 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.25.6 + '@babel/types': 7.26.0 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.25.6 - '@babel/types': 7.25.6 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.25.6 + '@babel/types': 7.26.0 - '@types/estree@1.0.5': {} + '@types/estree@1.0.6': {} '@types/hoist-non-react-statics@3.3.5': dependencies: - '@types/react': 18.3.5 + '@types/react': 18.3.12 hoist-non-react-statics: 3.3.2 '@types/minimatch@3.0.5': {} '@types/parse-json@4.0.2': {} - '@types/prop-types@15.7.12': {} + '@types/prop-types@15.7.13': {} '@types/react-transition-group@4.4.11': dependencies: - '@types/react': 18.3.5 + '@types/react': 18.3.12 - '@types/react@18.3.5': + '@types/react@18.3.12': dependencies: - '@types/prop-types': 15.7.12 + '@types/prop-types': 15.7.13 csstype: 3.1.3 - '@vitejs/plugin-react@4.3.1(vite@5.4.5)': + '@vitejs/plugin-react@4.3.3(vite@5.4.10)': dependencies: - '@babel/core': 7.25.2 - '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2) + '@babel/core': 7.26.0 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.5 + vite: 5.4.10 transitivePeerDependencies: - supports-color - '@vitest/expect@2.1.1': + '@vitest/expect@2.1.4': dependencies: - '@vitest/spy': 2.1.1 - '@vitest/utils': 2.1.1 - chai: 5.1.1 + '@vitest/spy': 2.1.4 + '@vitest/utils': 2.1.4 + chai: 5.1.2 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.1(@vitest/spy@2.1.1)(vite@5.4.5)': + '@vitest/mocker@2.1.4(vite@5.4.10)': dependencies: - '@vitest/spy': 2.1.1 + '@vitest/spy': 2.1.4 estree-walker: 3.0.3 - magic-string: 0.30.11 + magic-string: 0.30.12 optionalDependencies: - vite: 5.4.5 + vite: 5.4.10 - '@vitest/pretty-format@2.1.1': + '@vitest/pretty-format@2.1.4': dependencies: tinyrainbow: 1.2.0 - '@vitest/runner@2.1.1': + '@vitest/runner@2.1.4': dependencies: - '@vitest/utils': 2.1.1 + '@vitest/utils': 2.1.4 pathe: 1.1.2 - '@vitest/snapshot@2.1.1': + '@vitest/snapshot@2.1.4': dependencies: - '@vitest/pretty-format': 2.1.1 - magic-string: 0.30.11 + '@vitest/pretty-format': 2.1.4 + magic-string: 0.30.12 pathe: 1.1.2 - '@vitest/spy@2.1.1': + '@vitest/spy@2.1.4': dependencies: tinyspy: 3.0.2 - '@vitest/ui@2.1.1(vitest@2.1.1)': + '@vitest/ui@2.1.4(vitest@2.1.4)': dependencies: - '@vitest/utils': 2.1.1 + '@vitest/utils': 2.1.4 fflate: 0.8.2 flatted: 3.3.1 pathe: 1.1.2 - sirv: 2.0.4 - tinyglobby: 0.2.9 + sirv: 3.0.0 + tinyglobby: 0.2.10 tinyrainbow: 1.2.0 - vitest: 2.1.1(@vitest/ui@2.1.1)(jsdom@25.0.0) + vitest: 2.1.4(@vitest/ui@2.1.4)(jsdom@25.0.1) - '@vitest/utils@2.1.1': + '@vitest/utils@2.1.4': dependencies: - '@vitest/pretty-format': 2.1.1 - loupe: 3.1.1 + '@vitest/pretty-format': 2.1.4 + loupe: 3.1.2 tinyrainbow: 1.2.0 - '@vue/compiler-core@3.5.5': + '@vue/compiler-core@3.5.12': dependencies: - '@babel/parser': 7.25.6 - '@vue/shared': 3.5.5 + '@babel/parser': 7.26.2 + '@vue/shared': 3.5.12 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-dom@3.5.5': + '@vue/compiler-dom@3.5.12': dependencies: - '@vue/compiler-core': 3.5.5 - '@vue/shared': 3.5.5 + '@vue/compiler-core': 3.5.12 + '@vue/shared': 3.5.12 - '@vue/compiler-sfc@3.5.5': + '@vue/compiler-sfc@3.5.12': dependencies: - '@babel/parser': 7.25.6 - '@vue/compiler-core': 3.5.5 - '@vue/compiler-dom': 3.5.5 - '@vue/compiler-ssr': 3.5.5 - '@vue/shared': 3.5.5 + '@babel/parser': 7.26.2 + '@vue/compiler-core': 3.5.12 + '@vue/compiler-dom': 3.5.12 + '@vue/compiler-ssr': 3.5.12 + '@vue/shared': 3.5.12 estree-walker: 2.0.2 - magic-string: 0.30.11 - postcss: 8.4.45 + magic-string: 0.30.12 + postcss: 8.4.47 source-map-js: 1.2.1 - '@vue/compiler-ssr@3.5.5': + '@vue/compiler-ssr@3.5.12': dependencies: - '@vue/compiler-dom': 3.5.5 - '@vue/shared': 3.5.5 + '@vue/compiler-dom': 3.5.12 + '@vue/shared': 3.5.12 - '@vue/shared@3.5.5': {} + '@vue/shared@3.5.12': {} - acorn-jsx@5.3.2(acorn@8.12.1): + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: - acorn: 8.12.1 + acorn: 8.14.0 - acorn@8.12.1: {} + acorn@8.14.0: {} agent-base@6.0.2: dependencies: @@ -3403,10 +3396,6 @@ snapshots: ansi-regex@5.0.1: {} - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -3428,7 +3417,7 @@ snapshots: dependencies: dequal: 2.0.3 - aria-query@5.3.1: {} + aria-query@5.3.2: {} array-differ@3.0.0: {} @@ -3442,11 +3431,11 @@ snapshots: atomico@1.79.2: {} - attr-accept@2.2.2: {} + attr-accept@2.2.4: {} babel-plugin-macros@3.1.0: dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 cosmiconfig: 7.1.0 resolve: 1.22.8 @@ -3467,12 +3456,12 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.23.3: + browserslist@4.24.2: dependencies: - caniuse-lite: 1.0.30001660 - electron-to-chromium: 1.5.22 + caniuse-lite: 1.0.30001677 + electron-to-chromium: 1.5.51 node-releases: 2.0.18 - update-browserslist-db: 1.1.0(browserslist@4.23.3) + update-browserslist-db: 1.1.1(browserslist@4.24.2) cac@6.7.14: {} @@ -3480,28 +3469,22 @@ snapshots: callsites@3.1.0: {} - cally@0.7.1: + cally@0.7.2: dependencies: atomico: 1.79.2 camelcase@6.3.0: {} - caniuse-lite@1.0.30001660: {} + caniuse-lite@1.0.30001677: {} - chai@5.1.1: + chai@5.1.2: dependencies: assertion-error: 2.0.1 check-error: 2.1.1 deep-eql: 5.0.2 - loupe: 3.1.1 + loupe: 3.1.2 pathval: 2.0.0 - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - chalk@3.0.0: dependencies: ansi-styles: 4.3.0 @@ -3540,16 +3523,10 @@ snapshots: clsx@2.1.1: {} - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - color-convert@2.0.1: dependencies: color-name: 1.1.4 - color-name@1.1.3: {} - color-name@1.1.4: {} combined-stream@1.0.8: @@ -3609,9 +3586,9 @@ snapshots: depcheck@1.4.7: dependencies: - '@babel/parser': 7.25.6 - '@babel/traverse': 7.25.6 - '@vue/compiler-sfc': 3.5.5 + '@babel/parser': 7.26.2 + '@babel/traverse': 7.25.9 + '@vue/compiler-sfc': 3.5.12 callsite: 1.0.0 camelcase: 6.3.0 cosmiconfig: 7.1.0 @@ -3647,36 +3624,36 @@ snapshots: dom-helpers@5.2.1: dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 csstype: 3.1.3 dotenv@16.4.5: {} - electron-to-chromium@1.5.22: {} + electron-to-chromium@1.5.51: {} - embla-carousel-autoplay@8.3.0(embla-carousel@8.3.0): + embla-carousel-autoplay@8.3.1(embla-carousel@8.3.1): dependencies: - embla-carousel: 8.3.0 + embla-carousel: 8.3.1 - embla-carousel-class-names@8.3.0(embla-carousel@8.3.0): + embla-carousel-class-names@8.3.1(embla-carousel@8.3.1): dependencies: - embla-carousel: 8.3.0 + embla-carousel: 8.3.1 - embla-carousel-fade@8.3.0(embla-carousel@8.3.0): + embla-carousel-fade@8.3.1(embla-carousel@8.3.1): dependencies: - embla-carousel: 8.3.0 + embla-carousel: 8.3.1 - embla-carousel-react@8.3.0(react@18.3.1): + embla-carousel-react@8.3.1(react@18.3.1): dependencies: - embla-carousel: 8.3.0 - embla-carousel-reactive-utils: 8.3.0(embla-carousel@8.3.0) + embla-carousel: 8.3.1 + embla-carousel-reactive-utils: 8.3.1(embla-carousel@8.3.1) react: 18.3.1 - embla-carousel-reactive-utils@8.3.0(embla-carousel@8.3.0): + embla-carousel-reactive-utils@8.3.1(embla-carousel@8.3.1): dependencies: - embla-carousel: 8.3.0 + embla-carousel: 8.3.1 - embla-carousel@8.3.0: {} + embla-carousel@8.3.1: {} emoji-regex@8.0.0: {} @@ -3714,8 +3691,6 @@ snapshots: escalade@3.2.0: {} - escape-string-regexp@1.0.5: {} - escape-string-regexp@4.0.0: {} eslint-scope@5.1.1: @@ -3723,7 +3698,7 @@ snapshots: esrecurse: 4.3.0 estraverse: 4.3.0 - eslint-scope@8.0.2: + eslint-scope@8.2.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 @@ -3732,27 +3707,27 @@ snapshots: eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.0.0: {} + eslint-visitor-keys@4.2.0: {} - eslint@9.10.0: + eslint@9.10.0(jiti@1.21.6): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.10.0) - '@eslint-community/regexpp': 4.11.0 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.10.0(jiti@1.21.6)) + '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.18.0 '@eslint/eslintrc': 3.1.0 '@eslint/js': 9.10.0 '@eslint/plugin-kit': 0.1.0 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.3.0 + '@humanwhocodes/retry': 0.3.1 '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 debug: 4.3.7 escape-string-regexp: 4.0.0 - eslint-scope: 8.0.2 - eslint-visitor-keys: 4.0.0 - espree: 10.1.0 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -3770,14 +3745,16 @@ snapshots: optionator: 0.9.4 strip-ansi: 6.0.1 text-table: 0.2.0 + optionalDependencies: + jiti: 1.21.6 transitivePeerDependencies: - supports-color - espree@10.1.0: + espree@10.3.0: dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) - eslint-visitor-keys: 4.0.0 + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 esprima@4.0.1: {} @@ -3797,7 +3774,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 esutils@2.0.3: {} @@ -3805,6 +3782,8 @@ snapshots: dependencies: homedir-polyfill: 1.0.3 + expect-type@1.1.0: {} + fast-deep-equal@3.1.3: {} fast-json-stable-stringify@2.1.0: {} @@ -3815,7 +3794,7 @@ snapshots: dependencies: reusify: 1.0.4 - fdir@6.4.0(picomatch@4.0.2): + fdir@6.4.2(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 @@ -3830,23 +3809,23 @@ snapshots: dependencies: flat-cache: 4.0.1 - file-selector@0.6.0: + file-selector@2.1.0: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 - filepond-plugin-file-validate-type@1.2.9(filepond@4.31.3): + filepond-plugin-file-validate-type@1.2.9(filepond@4.32.1): dependencies: - filepond: 4.31.3 + filepond: 4.32.1 - filepond-plugin-image-exif-orientation@1.0.11(filepond@4.31.3): + filepond-plugin-image-exif-orientation@1.0.11(filepond@4.32.1): dependencies: - filepond: 4.31.3 + filepond: 4.32.1 - filepond-plugin-image-preview@4.6.12(filepond@4.31.3): + filepond-plugin-image-preview@4.6.12(filepond@4.32.1): dependencies: - filepond: 4.31.3 + filepond: 4.32.1 - filepond@4.31.3: {} + filepond@4.32.1: {} fill-range@7.1.1: dependencies: @@ -3873,7 +3852,7 @@ snapshots: flatted@3.3.1: {} - form-data@4.0.0: + form-data@4.0.1: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 @@ -3893,7 +3872,7 @@ snapshots: react: 18.3.1 react-fast-compare: 2.0.4 tiny-warning: 1.0.3 - tslib: 2.7.0 + tslib: 2.8.1 framer-motion@4.1.17(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: @@ -3903,13 +3882,13 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) style-value-types: 4.1.4 - tslib: 2.7.0 + tslib: 2.8.1 optionalDependencies: '@emotion/is-prop-valid': 0.8.8 framesync@5.3.0: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 fs.realpath@1.0.0: {} @@ -3922,8 +3901,6 @@ snapshots: get-caller-file@2.0.5: {} - get-func-name@2.0.2: {} - glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -3957,8 +3934,6 @@ snapshots: globals@14.0.0: {} - has-flag@3.0.0: {} - has-flag@4.0.0: {} hasown@2.0.2: @@ -4051,6 +4026,9 @@ snapshots: isexe@2.0.0: {} + jiti@1.21.6: + optional: true + js-tokens@4.0.0: {} js-yaml@3.14.1: @@ -4062,22 +4040,22 @@ snapshots: dependencies: argparse: 2.0.1 - jsdom@25.0.0: + jsdom@25.0.1: dependencies: cssstyle: 4.1.0 data-urls: 5.0.0 decimal.js: 10.4.3 - form-data: 4.0.0 + form-data: 4.0.1 html-encoding-sniffer: 4.0.0 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.5 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.12 - parse5: 7.1.2 + nwsapi: 2.2.13 + parse5: 7.2.1 rrweb-cssom: 0.7.1 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 4.1.4 + tough-cookie: 5.0.0 w3c-xmlserializer: 5.0.0 webidl-conversions: 7.0.0 whatwg-encoding: 3.1.1 @@ -4090,7 +4068,7 @@ snapshots: - supports-color - utf-8-validate - jsesc@2.5.2: {} + jsesc@3.0.2: {} json-buffer@3.0.1: {} @@ -4127,9 +4105,7 @@ snapshots: dependencies: js-tokens: 4.0.0 - loupe@3.1.1: - dependencies: - get-func-name: 2.0.2 + loupe@3.1.2: {} lru-cache@10.4.3: {} @@ -4139,7 +4115,7 @@ snapshots: lz-string@1.5.0: {} - magic-string@0.30.11: + magic-string@0.30.12: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -4208,7 +4184,7 @@ snapshots: normalize-path@3.0.0: {} - nwsapi@2.2.12: {} + nwsapi@2.2.13: {} object-assign@4.1.1: {} @@ -4227,16 +4203,16 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - oxlint@0.9.5: + oxlint@0.9.10: optionalDependencies: - '@oxlint/darwin-arm64': 0.9.5 - '@oxlint/darwin-x64': 0.9.5 - '@oxlint/linux-arm64-gnu': 0.9.5 - '@oxlint/linux-arm64-musl': 0.9.5 - '@oxlint/linux-x64-gnu': 0.9.5 - '@oxlint/linux-x64-musl': 0.9.5 - '@oxlint/win32-arm64': 0.9.5 - '@oxlint/win32-x64': 0.9.5 + '@oxlint/darwin-arm64': 0.9.10 + '@oxlint/darwin-x64': 0.9.10 + '@oxlint/linux-arm64-gnu': 0.9.10 + '@oxlint/linux-arm64-musl': 0.9.10 + '@oxlint/linux-x64-gnu': 0.9.10 + '@oxlint/linux-x64-musl': 0.9.10 + '@oxlint/win32-arm64': 0.9.10 + '@oxlint/win32-x64': 0.9.10 p-limit@3.1.0: dependencies: @@ -4252,14 +4228,14 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.26.2 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 parse-passwd@1.0.0: {} - parse5@7.1.2: + parse5@7.2.1: dependencies: entities: 4.5.0 @@ -4280,7 +4256,7 @@ snapshots: pathval@2.0.0: {} - picocolors@1.1.0: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -4295,12 +4271,12 @@ snapshots: framesync: 5.3.0 hey-listen: 1.0.8 style-value-types: 4.1.4 - tslib: 2.7.0 + tslib: 2.8.1 - postcss@8.4.45: + postcss@8.4.47: dependencies: nanoid: 3.3.7 - picocolors: 1.1.0 + picocolors: 1.1.1 source-map-js: 1.2.1 prelude-ls@1.2.1: {} @@ -4325,12 +4301,8 @@ snapshots: proxy-from-env@1.1.0: {} - psl@1.9.0: {} - punycode@2.3.1: {} - querystringify@2.2.0: {} - queue-microtask@1.2.3: {} react-dom@18.3.1(react@18.3.1): @@ -4339,18 +4311,18 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 - react-dropzone@14.2.3(react@18.3.1): + react-dropzone@14.3.5(react@18.3.1): dependencies: - attr-accept: 2.2.2 - file-selector: 0.6.0 + attr-accept: 2.2.4 + file-selector: 2.1.0 prop-types: 15.8.1 react: 18.3.1 react-fast-compare@2.0.4: {} - react-filepond@7.1.2(filepond@4.31.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-filepond@7.1.2(filepond@4.32.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - filepond: 4.31.3 + filepond: 4.32.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -4360,34 +4332,34 @@ snapshots: react-is@18.3.1: {} - react-material-ui-carousel@3.4.2(ybbliznkjfjrmgdxnl6g3mlm54): + react-material-ui-carousel@3.4.2(p3vvayirda5gy2xqqpgt24dakm): dependencies: - '@emotion/react': 11.13.3(@types/react@18.3.5)(react@18.3.1) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1) - '@mui/icons-material': 5.16.7(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.5)(react@18.3.1) - '@mui/material': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mui/system': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(react@18.3.1) + '@emotion/react': 11.13.3(@types/react@18.3.12)(react@18.3.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) + '@mui/icons-material': 5.16.7(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) + '@mui/material': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mui/system': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) framer-motion: 4.1.17(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-refresh@0.14.2: {} - react-router-dom@6.26.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-router-dom@6.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@remix-run/router': 1.19.2 + '@remix-run/router': 1.20.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-router: 6.26.2(react@18.3.1) + react-router: 6.27.0(react@18.3.1) - react-router@6.26.2(react@18.3.1): + react-router@6.27.0(react@18.3.1): dependencies: - '@remix-run/router': 1.19.2 + '@remix-run/router': 1.20.0 react: 18.3.1 react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -4413,8 +4385,6 @@ snapshots: require-package-name@2.0.1: {} - requires-port@1.0.0: {} - reselect@5.1.1: {} resolve-dir@1.0.1: @@ -4434,35 +4404,37 @@ snapshots: reusify@1.0.4: {} - rollup-plugin-visualizer@5.12.0(rollup@4.21.3): + rollup-plugin-visualizer@5.12.0(rollup@4.24.4): dependencies: open: 8.4.2 picomatch: 2.3.1 source-map: 0.7.4 yargs: 17.7.2 optionalDependencies: - rollup: 4.21.3 + rollup: 4.24.4 - rollup@4.21.3: + rollup@4.24.4: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.21.3 - '@rollup/rollup-android-arm64': 4.21.3 - '@rollup/rollup-darwin-arm64': 4.21.3 - '@rollup/rollup-darwin-x64': 4.21.3 - '@rollup/rollup-linux-arm-gnueabihf': 4.21.3 - '@rollup/rollup-linux-arm-musleabihf': 4.21.3 - '@rollup/rollup-linux-arm64-gnu': 4.21.3 - '@rollup/rollup-linux-arm64-musl': 4.21.3 - '@rollup/rollup-linux-powerpc64le-gnu': 4.21.3 - '@rollup/rollup-linux-riscv64-gnu': 4.21.3 - '@rollup/rollup-linux-s390x-gnu': 4.21.3 - '@rollup/rollup-linux-x64-gnu': 4.21.3 - '@rollup/rollup-linux-x64-musl': 4.21.3 - '@rollup/rollup-win32-arm64-msvc': 4.21.3 - '@rollup/rollup-win32-ia32-msvc': 4.21.3 - '@rollup/rollup-win32-x64-msvc': 4.21.3 + '@rollup/rollup-android-arm-eabi': 4.24.4 + '@rollup/rollup-android-arm64': 4.24.4 + '@rollup/rollup-darwin-arm64': 4.24.4 + '@rollup/rollup-darwin-x64': 4.24.4 + '@rollup/rollup-freebsd-arm64': 4.24.4 + '@rollup/rollup-freebsd-x64': 4.24.4 + '@rollup/rollup-linux-arm-gnueabihf': 4.24.4 + '@rollup/rollup-linux-arm-musleabihf': 4.24.4 + '@rollup/rollup-linux-arm64-gnu': 4.24.4 + '@rollup/rollup-linux-arm64-musl': 4.24.4 + '@rollup/rollup-linux-powerpc64le-gnu': 4.24.4 + '@rollup/rollup-linux-riscv64-gnu': 4.24.4 + '@rollup/rollup-linux-s390x-gnu': 4.24.4 + '@rollup/rollup-linux-x64-gnu': 4.24.4 + '@rollup/rollup-linux-x64-musl': 4.24.4 + '@rollup/rollup-win32-arm64-msvc': 4.24.4 + '@rollup/rollup-win32-ia32-msvc': 4.24.4 + '@rollup/rollup-win32-x64-msvc': 4.24.4 fsevents: 2.3.3 rrweb-cssom@0.7.1: {} @@ -4495,12 +4467,17 @@ snapshots: siginfo@2.0.0: {} - sirv@2.0.4: + sirv@3.0.0: dependencies: '@polka/url': 1.0.0-next.28 mrmime: 2.0.0 totalist: 3.0.1 + sonner@1.7.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + source-map-js@1.2.1: {} source-map@0.5.7: {} @@ -4532,14 +4509,10 @@ snapshots: style-value-types@4.1.4: dependencies: hey-listen: 1.0.8 - tslib: 2.7.0 + tslib: 2.8.1 stylis@4.2.0: {} - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -4558,11 +4531,11 @@ snapshots: tinybench@2.9.0: {} - tinyexec@0.3.0: {} + tinyexec@0.3.1: {} - tinyglobby@0.2.9: + tinyglobby@0.2.10: dependencies: - fdir: 6.4.0(picomatch@4.0.2) + fdir: 6.4.2(picomatch@4.0.2) picomatch: 4.0.2 tinypool@1.0.1: {} @@ -4571,7 +4544,11 @@ snapshots: tinyspy@3.0.2: {} - to-fast-properties@2.0.0: {} + tldts-core@6.1.58: {} + + tldts@6.1.58: + dependencies: + tldts-core: 6.1.58 to-regex-range@5.0.1: dependencies: @@ -4581,12 +4558,9 @@ snapshots: totalist@3.0.1: {} - tough-cookie@4.1.4: + tough-cookie@5.0.0: dependencies: - psl: 1.9.0 - punycode: 2.3.1 - universalify: 0.2.0 - url-parse: 1.5.10 + tldts: 6.1.58 tr46@0.0.3: {} @@ -4594,7 +4568,7 @@ snapshots: dependencies: punycode: 2.3.1 - tslib@2.7.0: {} + tslib@2.8.1: {} type-check@0.4.0: dependencies: @@ -4602,36 +4576,29 @@ snapshots: type-fest@2.19.0: {} - universalify@0.2.0: {} - unplugin@1.0.1: dependencies: - acorn: 8.12.1 + acorn: 8.14.0 chokidar: 3.6.0 webpack-sources: 3.2.3 webpack-virtual-modules: 0.5.0 - update-browserslist-db@1.1.0(browserslist@4.23.3): + update-browserslist-db@1.1.1(browserslist@4.24.2): dependencies: - browserslist: 4.23.3 + browserslist: 4.24.2 escalade: 3.2.0 - picocolors: 1.1.0 + picocolors: 1.1.1 uri-js@4.4.1: dependencies: punycode: 2.3.1 - url-parse@1.5.10: - dependencies: - querystringify: 2.2.0 - requires-port: 1.0.0 - - vite-node@2.1.1: + vite-node@2.1.4: dependencies: cac: 6.7.14 debug: 4.3.7 pathe: 1.1.2 - vite: 5.4.5 + vite: 5.4.10 transitivePeerDependencies: - '@types/node' - less @@ -4643,38 +4610,39 @@ snapshots: - supports-color - terser - vite@5.4.5: + vite@5.4.10: dependencies: esbuild: 0.21.5 - postcss: 8.4.45 - rollup: 4.21.3 + postcss: 8.4.47 + rollup: 4.24.4 optionalDependencies: fsevents: 2.3.3 - vitest@2.1.1(@vitest/ui@2.1.1)(jsdom@25.0.0): + vitest@2.1.4(@vitest/ui@2.1.4)(jsdom@25.0.1): dependencies: - '@vitest/expect': 2.1.1 - '@vitest/mocker': 2.1.1(@vitest/spy@2.1.1)(vite@5.4.5) - '@vitest/pretty-format': 2.1.1 - '@vitest/runner': 2.1.1 - '@vitest/snapshot': 2.1.1 - '@vitest/spy': 2.1.1 - '@vitest/utils': 2.1.1 - chai: 5.1.1 + '@vitest/expect': 2.1.4 + '@vitest/mocker': 2.1.4(vite@5.4.10) + '@vitest/pretty-format': 2.1.4 + '@vitest/runner': 2.1.4 + '@vitest/snapshot': 2.1.4 + '@vitest/spy': 2.1.4 + '@vitest/utils': 2.1.4 + chai: 5.1.2 debug: 4.3.7 - magic-string: 0.30.11 + expect-type: 1.1.0 + magic-string: 0.30.12 pathe: 1.1.2 std-env: 3.7.0 tinybench: 2.9.0 - tinyexec: 0.3.0 + tinyexec: 0.3.1 tinypool: 1.0.1 tinyrainbow: 1.2.0 - vite: 5.4.5 - vite-node: 2.1.1 + vite: 5.4.10 + vite-node: 2.1.4 why-is-node-running: 2.3.0 optionalDependencies: - '@vitest/ui': 2.1.1(vitest@2.1.1) - jsdom: 25.0.0 + '@vitest/ui': 2.1.4(vitest@2.1.4) + jsdom: 25.0.1 transitivePeerDependencies: - less - lightningcss From 27d1c78d963768fffd38b7cc69255e01e60188c7 Mon Sep 17 00:00:00 2001 From: sebas Date: Tue, 5 Nov 2024 16:20:56 -0500 Subject: [PATCH 02/17] Add Assistance and Points pages with context providers for Snackbar and Progressbar --- frontend/src/components/pages/Assistance.jsx | 513 +++++++++++++++++++ frontend/src/components/pages/Points.jsx | 31 +- frontend/src/main.jsx | 24 +- 3 files changed, 535 insertions(+), 33 deletions(-) create mode 100644 frontend/src/components/pages/Assistance.jsx diff --git a/frontend/src/components/pages/Assistance.jsx b/frontend/src/components/pages/Assistance.jsx new file mode 100644 index 0000000..ec810c6 --- /dev/null +++ b/frontend/src/components/pages/Assistance.jsx @@ -0,0 +1,513 @@ +import { useState } from 'react'; +import { DataGrid, GridToolbar } from '@mui/x-data-grid'; +import { Typography, Box, Container, TextField, MenuItem } from '@mui/material'; +import clsx from 'clsx'; +import { + CustomNoResultsOverlay, + CustomNoRowsOverlay, +} from '../../assets/CustomDataGridOverlays'; + +const columns = [ + { field: 'employeeId', headerName: 'Cedula', width: 100 }, + { field: 'name', headerName: 'Nombre', width: 250 }, + { field: 'campaign', headerName: 'Campaña', width: 250 }, + ...Array.from({ length: 30 }, (_, index) => ({ + field: `day${index + 1}`, + headerName: `${index + 1}`, + width: 20, + type: 'singleSelect', + valueOptions: [ + 'A', + 'T', + 'AF', + 'IPE', + 'ICJ', + 'ISJ', + 'R', + 'V', + 'IM', + 'C', + 'CD/CF', + 'ARU', + 'TR', + 'LM', + 'LNR', + 'DF', + 'AM', + 'SAN', + ], + editable: true, + cellClassName: (params) => { + if (params.value == null) { + return ''; + } + + return clsx('super-app', { + negative: params.value === 'A', + positive: params.value === 'ISJ', + }); + }, + })), + { + field: 'Dias Laborados', + headerName: 'Dias Laborados', + width: 120, + editable: true, + // count the number of days that are A in the 30 days in that row + valueGetter: (value, row) => { + let count = 0; + for (let i = 1; i <= 30; i++) { + if (row[`day${i}`] === 'A') { + count++; + } + } + return count; + }, + }, + { + field: 'ipe', + headerName: 'IPE', + width: 50, + editable: true, + type: 'number', + valueGetter: (value, row) => { + let count = 0; + for (let i = 1; i <= 30; i++) { + if (row[`day${i}`] === 'IPE') { + count++; + } + } + return count; + }, + }, + { + field: 'im', + headerName: 'IM', + width: 50, + editable: true, + type: 'number', + valueGetter: (value, row) => { + let count = 0; + for (let i = 1; i <= 30; i++) { + if (row[`day${i}`] === 'IM') { + count++; + } + } + return count; + }, + }, + { + field: 'af', + headerName: 'AF', + width: 50, + editable: true, + type: 'number', + valueGetter: (value, row) => { + let count = 0; + for (let i = 1; i <= 30; i++) { + if (row[`day${i}`] === 'AF') { + count++; + } + } + return count; + }, + }, + { + field: 'ar', + headerName: 'AR', + width: 50, + editable: true, + type: 'number', + valueGetter: (value, row) => { + let count = 0; + for (let i = 1; i <= 30; i++) { + if (row[`day${i}`] === 'AR') { + count++; + } + } + return count; + }, + }, + { + field: 'icj', + headerName: 'ICJ', + width: 50, + editable: true, + type: 'number', + valueGetter: (value, row) => { + let count = 0; + for (let i = 1; i <= 30; i++) { + if (row[`day${i}`] === 'ICJ') { + count++; + } + } + return count; + }, + }, + { + field: 'isj', + headerName: 'ISJ', + width: 50, + editable: true, + type: 'number', + valueGetter: (value, row) => { + let count = 0; + for (let i = 1; i <= 30; i++) { + if (row[`day${i}`] === 'ISJ') { + count++; + } + } + return count; + }, + }, + { + field: 'c', + headerName: 'C', + width: 50, + editable: true, + type: 'number', + valueGetter: (value, row) => { + let count = 0; + for (let i = 1; i <= 30; i++) { + if (row[`day${i}`] === 'IPE') { + count++; + } + } + return count; + }, + }, + { + field: 'cd/cf', + headerName: 'CD/CF', + width: 70, + editable: true, + type: 'number', + valueGetter: (value, row) => { + let count = 0; + for (let i = 1; i <= 30; i++) { + if (row[`day${i}`] === 'C') { + count++; + } + } + return count; + }, + }, + { + field: 'aru', + headerName: 'ARU', + width: 50, + editable: true, + type: 'number', + valueGetter: (value, row) => { + let count = 0; + for (let i = 1; i <= 30; i++) { + if (row[`day${i}`] === 'ARU') { + count++; + } + } + return count; + }, + }, + { + field: 'tr', + headerName: 'TR', + width: 50, + editable: true, + type: 'number', + valueGetter: (value, row) => { + let count = 0; + for (let i = 1; i <= 30; i++) { + if (row[`day${i}`] === 'TR') { + count++; + } + } + return count; + }, + }, + { + field: 'am', + headerName: 'AM', + width: 50, + editable: true, + type: 'number', + valueGetter: (value, row) => { + let count = 0; + for (let i = 1; i <= 30; i++) { + if (row[`day${i}`] === 'AM') { + count++; + } + } + return count; + }, + }, + { + field: 'san', + headerName: 'SAN', + width: 50, + editable: true, + type: 'number', + valueGetter: (value, row) => { + let count = 0; + for (let i = 1; i <= 30; i++) { + if (row[`day${i}`] === 'SAN') { + count++; + } + } + return count; + }, + }, + { + field: 'lnr', + headerName: 'LNR', + width: 50, + editable: true, + type: 'number', + valueGetter: (value, row) => { + let count = 0; + for (let i = 1; i <= 30; i++) { + if (row[`day${i}`] === 'LNR') { + count++; + } + } + return count; + }, + }, + { + field: 'lm', + headerName: 'LM', + width: 50, + editable: true, + type: 'number', + valueGetter: (value, row) => { + let count = 0; + for (let i = 1; i <= 30; i++) { + if (row[`day${i}`] === 'LM') { + count++; + } + } + return count; + }, + }, + { + field: 'r', + headerName: 'R', + width: 50, + editable: true, + type: 'number', + valueGetter: (value, row) => { + let count = 0; + for (let i = 1; i <= 30; i++) { + if (row[`day${i}`] === 'R') { + count++; + } + } + return count; + }, + }, + { + field: 'v', + headerName: 'V', + width: 50, + editable: true, + type: 'number', + valueGetter: (value, row) => { + let count = 0; + for (let i = 1; i <= 30; i++) { + if (row[`day${i}`] === 'V') { + count++; + } + } + return count; + }, + }, + { + field: 'df', + headerName: 'DF', + width: 50, + editable: true, + type: 'number', + valueGetter: (value, row) => { + let count = 0; + for (let i = 1; i <= 30; i++) { + if (row[`day${i}`] === 'DF') { + count++; + } + } + return count; + }, + }, + { + field: 'total_days', + headerName: 'DIAS TOTALES LABORADOS', + width: 200, + editable: true, + type: 'number', + // Count `dias laborados` + `ipe` + `im` + `af` + `ar` + `c` + `cd/cf` + `aru` + `am` + `df + valueGetter: (value, row) => { + let count = 0; + for (let i = 1; i <= 30; i++) { + if ( + row[`day${i}`] === 'A' || + row[`day${i}`] === 'IPE' || + row[`day${i}`] === 'IM' || + row[`day${i}`] === 'AF' || + row[`day${i}`] === 'AR' || + row[`day${i}`] === 'C' || + row[`day${i}`] === 'CD/CF' || + row[`day${i}`] === 'ARU' || + row[`day${i}`] === 'AM' || + row[`day${i}`] === 'DF' + ) { + count++; + } + } + return count; + }, + }, +]; + +const initialRows = Array.from({ length: 800 }, (_, index) => { + const row = { + id: index + 1, + employeeId: `${index + 1 + 1000000}`, + name: `Empleado ${index + 1}`, + campaign: `Campaña ${index + 1}`, + }; + for (let i = 1; i <= 800; i++) { + row[`day${i}`] = Math.random() > 0.9 ? 'ISJ' : 'A'; + } + return row; +}); + +export default function Assistance() { + const [rowModesModel, setRowModesModel] = useState({}); + const [rows, setRows] = useState(initialRows); + + const handleRowEditStop = (params, event) => { + if (params.reason === GridRowEditStopReasons.rowFocusOut) { + event.defaultMuiPrevented = true; + } + }; + + const handleEditClick = (id) => () => { + setRowModesModel({ + ...rowModesModel, + [id]: { mode: GridRowModes.Edit }, + }); + }; + + const handleSaveClick = (id) => () => { + setRowModesModel({ + ...rowModesModel, + [id]: { mode: GridRowModes.View }, + }); + }; + + const handleDeleteClick = (id) => () => { + setRows(rows.filter((row) => row.id !== id)); + }; + + const handleCancelClick = (id) => () => { + setRowModesModel({ + ...rowModesModel, + [id]: { mode: GridRowModes.View, ignoreModifications: true }, + }); + + const editedRow = rows.find((row) => row.id === id); + if (editedRow.isNew) { + setRows(rows.filter((row) => row.id !== id)); + } + }; + + const processRowUpdate = (newRow) => { + const updatedRow = { ...newRow, isNew: false }; + setRows(rows.map((row) => (row.id === newRow.id ? updatedRow : row))); + return updatedRow; + }; + + const handleRowModesModelChange = (newRowModesModel) => { + setRowModesModel(newRowModesModel); + }; + + const currentMonth = new Date().getMonth(); + const months = [ + 'Enero', + 'Febrero', + 'Marzo', + 'Abril', + 'Mayo', + 'Junio', + 'Julio', + 'Agosto', + 'Septiembre', + 'Octubre', + 'Noviembre', + 'Diciembre', + ]; + const availableMonths = months.slice(0, currentMonth + 1); + + return ( + + + {months[currentMonth]} + + + {availableMonths.map((option) => ( + + {option} + + ))} + + + + + + ); +} diff --git a/frontend/src/components/pages/Points.jsx b/frontend/src/components/pages/Points.jsx index 51e84da..47bf47e 100644 --- a/frontend/src/components/pages/Points.jsx +++ b/frontend/src/components/pages/Points.jsx @@ -3,8 +3,9 @@ import { useState, useEffect } from 'react'; // Libraries import { useNavigate } from 'react-router-dom'; +import { useSnackbar } from '../context/SnackbarContext'; + // Custom Components -import SnackbarAlert from '../common/SnackBarAlert'; import { getApiUrl } from '../../assets/getApi'; import { handleError } from '../../assets/handleError'; import { @@ -40,20 +41,9 @@ const StyledDataGrid = styled(DataGrid)(() => ({ export const Points = () => { const [rows, setRows] = useState([]); - const [severity, setSeverity] = useState('success'); - const [message, setMessage] = useState(); - const [openSnack, setOpenSnack] = useState(false); + const { showSnack } = useSnackbar(); const [loading, setLoading] = useState(false); - const navigate = useNavigate(); const cedula = JSON.parse(localStorage.getItem('cedula')); - const permissions = JSON.parse(localStorage.getItem('permissions')); - - useEffect(() => { - window.scrollTo(0, 0); - if (!permissions || !permissions.includes('vacancy.view_reference')) { - navigate('/logged/home'); - } - }, []); const getPoints = async () => { setLoading(true); @@ -94,14 +84,6 @@ export const Points = () => { getPoints(); }, []); - const showSnack = (severity, message) => { - setSeverity(severity); - setMessage(message); - setOpenSnack(true); - }; - - const handleCloseSnack = () => setOpenSnack(false); - const CustomToolbar = () => { return ( @@ -195,13 +177,6 @@ export const Points = () => { > - - ); }; diff --git a/frontend/src/main.jsx b/frontend/src/main.jsx index 782caad..ba3275e 100644 --- a/frontend/src/main.jsx +++ b/frontend/src/main.jsx @@ -42,6 +42,12 @@ import Vacations from './components/pages/Vacations'; import PowerBI from './components/pages/PowerBI'; import Pqrs from './components/pages/Pqrs'; import CoexistenceCommittee from './components/pages/CoexistenceCommittee'; +import Assistance from './components/pages/Assistance'; +import Points from './components/pages/Points'; + +// Context +import { ProgressbarProvider } from './components/context/ProgressbarContext'; +import { SnackbarProvider } from './components/context/SnackbarContext'; Sentry.init({ dsn: 'https://5c6491f1c851a0f106e61adad4c4d46c@o4507664328359936.ingest.us.sentry.io/4507664339107840', @@ -194,10 +200,10 @@ const router = createBrowserRouter([ path: 'pqrs', element: , }, - // { - // path: "points", - // element: , - // }, + { + path: 'points', + element: , + }, { path: 'coexistence-committee', element: , @@ -206,6 +212,10 @@ const router = createBrowserRouter([ path: 'test', element: , }, + { + path: 'demo-assistance', + element: , + }, ], }, ]); @@ -218,7 +228,11 @@ ReactDOM.createRoot(document.getElementById('root')).render( - + + + + + From ef629aadfc6aa1add4460a8d571bd082c6989321 Mon Sep 17 00:00:00 2001 From: sebas Date: Tue, 5 Nov 2024 16:23:59 -0500 Subject: [PATCH 03/17] Enhance error handling in handleError.js to support various error formats --- frontend/src/assets/handleError.js | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/frontend/src/assets/handleError.js b/frontend/src/assets/handleError.js index 4fa22ef..055465c 100644 --- a/frontend/src/assets/handleError.js +++ b/frontend/src/assets/handleError.js @@ -8,10 +8,31 @@ export const handleError = async (response, showSnack) => { switch (response.status) { case 400: const data = await response.json(); - const firstKey = Object.keys(data)[0]; - errorMessage = firstKey - ? data[firstKey] - : 'Por favor, verifica la información ingresada y vuelve a intentarlo.'; + let firstKey = Object.keys(data)[0]; + + if (firstKey === 'Error') { + // Check if the "Error" value is a string and handle it directly + if (typeof data[firstKey] === 'string') { + errorMessage = data[firstKey]; // Directly set the error message + } else if (Array.isArray(data[firstKey])) { + // If it's an array, pick the first item + errorMessage = data[firstKey][0]; + } else { + // If it's an object or anything unexpected, fall back to a generic message + errorMessage = + 'Por favor, verifica la información ingresada y vuelve a intentarlo.'; + } + } else { + // Handle non-nested error cases (same logic as before) + if (typeof data[firstKey] === 'string') { + errorMessage = data[firstKey]; + } else if (Array.isArray(data[firstKey])) { + errorMessage = data[firstKey][0]; + } else { + errorMessage = + 'Por favor, verifica la información ingresada y vuelve a intentarlo.'; + } + } break; case 401: errorMessage = From db0e03f39750f6f0c5e0dbfb8db48a0878c2ce50 Mon Sep 17 00:00:00 2001 From: sebas Date: Tue, 5 Nov 2024 16:49:18 -0500 Subject: [PATCH 04/17] Fix management titles and correct spelling in About page --- frontend/src/components/pages/About.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/pages/About.jsx b/frontend/src/components/pages/About.jsx index d5c96ea..77062c2 100644 --- a/frontend/src/components/pages/About.jsx +++ b/frontend/src/components/pages/About.jsx @@ -49,7 +49,7 @@ const managements = [ }, { name: 'Diego González', - management: 'Gerente de Legal y Riesgo', + management: 'Gerente de Legal', image: diegoGonzales, description: 'LEGAL: Prestar asesorías y representación judicial de los clientes internos y externos. \n \nRIESGO: Ejecutar procesos de Investigación y análisis mediante la implementación y desarrollo de estrategias que garanticen la mitigación del riesgo.', @@ -505,7 +505,7 @@ const About = () => { justifyContent: 'flex-end', }} > - Pablo Cesár Castañeda + Pablo César Castañeda From 65a412f886450312ec69abb711ed5893921ede16 Mon Sep 17 00:00:00 2001 From: sebas Date: Tue, 5 Nov 2024 16:49:56 -0500 Subject: [PATCH 05/17] Remove inactive management entries from SwiperSlider component --- frontend/src/components/shared/SwiperSlider.jsx | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/frontend/src/components/shared/SwiperSlider.jsx b/frontend/src/components/shared/SwiperSlider.jsx index 1b0d41c..35b656f 100644 --- a/frontend/src/components/shared/SwiperSlider.jsx +++ b/frontend/src/components/shared/SwiperSlider.jsx @@ -20,12 +20,6 @@ import managersJr8 from '../../images/managers-jr/28553156.webp'; import managersJr9 from '../../images/managers-jr/1010178143.webp'; const managersJr = [ - { - name: 'Rodrigo Lozano', - management: 'GERENTE JR INFRAESTRUCTURA Y REDES', - image: managersJr7, - description: '', - }, { name: 'Marcela Osorio', management: 'GERENTE JR. DE MESA DE SERVICIO', @@ -50,12 +44,6 @@ const managersJr = [ image: managersJr2, description: '', }, - { - name: 'Karen Romero', - management: 'GERENTE DE CUENTAS JR', - image: managersJr3, - description: '', - }, { name: 'Luis Pachon', management: 'GERENTE DE CUENTAS', From 43042dd80cc11e15a713f5825eeba42aeb6bfc0a Mon Sep 17 00:00:00 2001 From: sebas Date: Tue, 5 Nov 2024 16:54:31 -0500 Subject: [PATCH 06/17] Refactor Notifications component to utilize SnackbarContext for notifications handling and fix the bug with the reverse background color --- .../src/components/shared/Notifications.jsx | 28 ++++--------------- 1 file changed, 6 insertions(+), 22 deletions(-) diff --git a/frontend/src/components/shared/Notifications.jsx b/frontend/src/components/shared/Notifications.jsx index 47873a0..a62c1d5 100644 --- a/frontend/src/components/shared/Notifications.jsx +++ b/frontend/src/components/shared/Notifications.jsx @@ -1,8 +1,10 @@ import React, { useState } from 'react'; +// Custom Hooks +import { useSnackbar } from '../context/SnackbarContext'; + // Custom Components import { getApiUrl } from '../../assets/getApi'; -import SnackbarAlert from '../common/SnackBarAlert'; import { handleError } from '../../assets/handleError'; // Material UI @@ -34,28 +36,16 @@ const Notifications = ({ notifications, getNotifications, }) => { + const { showSnack } = useSnackbar(); const [anchorElOptions, setAnchorElOptions] = useState(null); const openOptions = Boolean(anchorElOptions); const [notificationStatus, setNotificationStatus] = useState(false); const [notificationId, setNotificationId] = useState(null); - const [openSnack, setOpenSnack] = useState(false); - const [message, setMessage] = useState(''); - const [severity, setSeverity] = useState(''); const handleClose = () => { setAnchorNotification(null); }; - const showSnack = (severity, message) => { - setMessage(message); - setSeverity(severity); - setOpenSnack(true); - }; - - const closeSnack = () => { - setOpenSnack(false); - }; - const handleCloseOptions = () => { setAnchorElOptions(null); }; @@ -122,12 +112,6 @@ const Notifications = ({ return ( - Date: Tue, 5 Nov 2024 17:12:19 -0500 Subject: [PATCH 07/17] Refactor GoalsStats module by adding options based on the DB, Formik, new field `campaign`, specific columns object for `claro` campaign, and stats section Add context providers for Snackbar and Progressbar --- frontend/src/components/pages/GoalsStats.jsx | 672 ++++++++++++------- 1 file changed, 426 insertions(+), 246 deletions(-) diff --git a/frontend/src/components/pages/GoalsStats.jsx b/frontend/src/components/pages/GoalsStats.jsx index 62c72e2..d1c26a1 100644 --- a/frontend/src/components/pages/GoalsStats.jsx +++ b/frontend/src/components/pages/GoalsStats.jsx @@ -1,7 +1,12 @@ -import { useState, useEffect, useRef } from 'react'; +import { useState, useEffect } from 'react'; + +// Libraries +import { Formik, Form, useField } from 'formik'; +import * as Yup from 'yup'; +// Custom Hooks +import { useSnackbar } from '../context/SnackbarContext'; // Custom Components -import SnackbarAlert from '../common/SnackBarAlert'; import { getApiUrl } from '../../assets/getApi'; import { useNavigate } from 'react-router-dom'; import { handleError } from '../../assets/handleError'; @@ -18,7 +23,9 @@ import { TextField, MenuItem, Button, + Card, } from '@mui/material'; + import { DataGrid, GridToolbarContainer, @@ -29,16 +36,134 @@ import { GridToolbarQuickFilter, } from '@mui/x-data-grid'; +const validationSchema = Yup.object().shape({ + deliveryType: Yup.string().required('Campo requerido'), + month: Yup.string().required('Campo requerido'), + campaign: Yup.string().required('Campo requerido'), + year: Yup.string().required('Campo requerido'), +}); + +const FormikTextField = ({ + type, + label, + options, + multiline, + rows, + ...props +}) => { + const [field, meta] = useField(props); + const errorText = meta.error && meta.touched ? meta.error : ''; + + return ( + + {type === 'select' && + options.map((option) => ( + + {option.label} + + ))} + + ); +}; + +const options = [ + { label: 'Banco Agrario', value: 'Banco Agrario' }, + { label: 'Coomeva Cartera', value: 'Coomeva Cartera' }, + { label: 'Coomeva Cem', value: 'Coomeva Cem' }, + { label: 'Coomeva Mp', value: 'Coomeva Mp' }, + { label: 'Falabella', value: 'Falabella' }, + { label: 'Falabella Castigo', value: 'Falabella Castigo' }, + { label: 'Falabella Renegociados', value: 'Falabella Renegociados' }, + { label: 'Metlife-Cafam', value: 'Metlife-Cafam' }, + { label: 'Metlife-Colsubsidio Cupo', value: 'Metlife-Colsubsidio Cupo' }, + { + label: 'Metlife-Colsubsidio Monetaria', + value: 'Metlife-Colsubsidio Monetaria', + }, + { label: 'Metlife-Gmf', value: 'Metlife-Gmf' }, + { + label: 'Metlife-Serfiananza Stock Apoyo', + value: 'Metlife-Serfiananza Stock Apoyo', + }, + { + label: 'Metlife-Serfinanaza Apoyo Colsubsidio', + value: 'Metlife-Serfinanaza Apoyo Colsubsidio', + }, + { + label: 'Metlife-Serfinanza Bienvenida', + value: 'Metlife-Serfinanza Bienvenida', + }, + { label: 'Nueva Eps', value: 'Nueva Eps' }, + { label: 'Sura', value: 'Sura' }, + { label: 'CLARO', value: 'CLARO' }, + { label: 'Metlife', value: 'Metlife' }, + { label: 'Banco Agrario', value: 'Banco Agrario' }, + { label: 'No', value: 'No' }, + { label: 'PayU', value: 'PayU' }, + { label: 'Liberty', value: 'Liberty' }, + { label: 'Codensa', value: 'Codensa' }, + { label: 'Credibanco', value: 'Credibanco' }, + { label: 'Scotiabank', value: 'Scotiabank' }, + { label: 'Yanbal', value: 'Yanbal' }, + { label: 'MI BANCO', value: 'MI BANCO' }, + { label: 'PICHINCHA', value: 'PICHINCHA' }, + { label: 'COOMEVA', value: 'COOMEVA' }, + { label: 'CLARO CARTERA', value: 'CLARO CARTERA' }, + { label: 'SCOTIABANK COLPATRIA', value: 'SCOTIABANK COLPATRIA' }, + { label: 'CEM COOMEVA', value: 'CEM COOMEVA' }, + { label: 'CAFAM', value: 'CAFAM' }, + { label: 'CAFAM OJT', value: 'CAFAM OJT' }, + { label: 'COLSUBSIDIO', value: 'COLSUBSIDIO' }, + { label: 'COLSUBSIDIO OJT', value: 'COLSUBSIDIO OJT' }, + { label: 'GMF', value: 'GMF' }, + { label: 'SERFINANZA BIENVENIDA', value: 'SERFINANZA BIENVENIDA' }, + { label: 'SERFINANZA BIENVENIDA OJT', value: 'SERFINANZA BIENVENIDA OJT' }, + { label: 'SERFINANZA STOCK', value: 'SERFINANZA STOCK' }, + { label: 'SERFINANZA STOCK OJT', value: 'SERFINANZA STOCK OJT' }, + { label: 'COLSUBSIDIO PRIMA UNICA', value: 'COLSUBSIDIO PRIMA UNICA' }, + { label: 'Serf. Bienvenida', value: 'Serf. Bienvenida' }, + { label: 'Serf. Stock', value: 'Serf. Stock' }, + { label: 'Affluent', value: 'Affluent' }, + { label: 'Rehabilitacion', value: 'Rehabilitacion' }, + { label: 'Cyc Cartera', value: 'Cyc Cartera' }, + { label: 'Banco Satander', value: 'Banco Satander' }, + { label: 'Minuto De Dios', value: 'Minuto De Dios' }, + { label: 'Nubank', value: 'Nubank' }, + { label: 'Flexfintech', value: 'Flexfintech' }, + { label: 'Banco Finandina', value: 'Banco Finandina' }, + { label: 'Banco Pichincha', value: 'Banco Pichincha' }, + { label: 'Scotiabank', value: 'Scotiabank' }, + { label: 'Nueva Eps Sc', value: 'Nueva Eps Sc' }, + { label: 'Banco Santander', value: 'Banco Santander' }, + { label: 'Mi Banco', value: 'Mi Banco' }, + { label: 'Minuto de Dios', value: 'Minuto de Dios' }, + { label: 'Banco Santader', value: 'Banco Santader' }, + { label: 'Interactuar', value: 'Interactuar' }, + { label: 'Credintegral', value: 'Credintegral' }, + { label: 'Cuotas Acumuladas', value: 'Cuotas Acumuladas' }, + { label: 'Falabella / Cafam', value: 'Falabella / Cafam' }, + { label: 'Falabella / Stock', value: 'Falabella / Stock' }, +]; + const AnalisisMetas = () => { - const [openSnack, setOpenSnack] = useState(false); - const [severity, setSeverity] = useState('success'); - const [message, setMessage] = useState(''); + const { showSnack } = useSnackbar(); const [rows, setRows] = useState([]); + const [goalsQuantity, setGoalsQuantity] = useState([]); const [yearsArray, setYearsArray] = useState([]); const [loading, setLoading] = useState(false); - const monthRef = useRef(); - const yearRef = useRef(); - const goalType = useRef(null); + const [currentMonth, setCurrentMonth] = useState(''); + const [currentYear, setCurrentYear] = useState(''); + const [campaigns, setCampaigns] = useState([]); + const [initialValues, setInitialValues] = useState({}); const navigate = useNavigate(); const permissions = JSON.parse(localStorage.getItem('permissions')); @@ -48,11 +173,90 @@ const AnalisisMetas = () => { } }, []); + const getCurrentDate = () => { + const currentDate = new Date(); + const currentMonth = currentDate.toLocaleString('es-ES', { + month: 'long', + }); + + const currentYear = currentDate.getFullYear(); + + setCurrentMonth(currentMonth); + setCurrentYear(currentYear); + + const basedInitialValues = { + deliveryType: 'delivery', + month: currentMonth, + campaign: '', + year: currentYear, + }; + + setInitialValues(basedInitialValues); + }; + + const YearSelect = () => { + const currentYear = new Date().getFullYear(); + const years = []; + for (let year = 2023; year <= currentYear; year++) { + years.push({ value: year, label: year }); + } + setYearsArray(years); + }; + + useEffect(() => { + getCurrentDate(); + YearSelect(); + }, []); + + const fields = [ + { + id: 'deliveryType', + label: 'Tipo de meta', + name: 'deliveryType', + type: 'select', + options: [ + { value: 'delivery', label: 'Entrega' }, + { value: 'execution', label: 'Ejecución' }, + ], + }, + { + id: 'campaign', + label: 'Campaña', + name: 'campaign', + type: 'select', + options: options, + }, + { + id: 'month', + label: 'Mes', + name: 'month', + type: 'select', + options: [ + { value: 'ENERO', label: 'ENERO' }, + { value: 'FEBRERO', label: 'FEBRERO' }, + { value: 'MARZO', label: 'MARZO' }, + { value: 'ABRIL', label: 'ABRIL' }, + { value: 'MAYO', label: 'MAYO' }, + { value: 'JUNIO', label: 'JUNIO' }, + { value: 'JULIO', label: 'JULIO' }, + { value: 'AGOSTO', label: 'AGOSTO' }, + { value: 'SEPTIEMBRE', label: 'SEPTIEMBRE' }, + { value: 'OCTUBRE', label: 'OCTUBRE' }, + { value: 'NOVIEMBRE', label: 'NOVIEMBRE' }, + { value: 'DICIEMBRE', label: 'DICIEMBRE' }, + ], + }, + { + id: 'year', + label: 'Año', + name: 'year', + type: 'select', + options: yearsArray, + }, + ]; + const modifyData = (data) => { const modifiedData = data.map((row) => { - const date_update = row.last_update - ? 'last_update' - : 'history_date'; if (row.quantity_goal > 999) { const formatter = new Intl.NumberFormat('es-CO', { style: 'currency', @@ -68,7 +272,6 @@ const AnalisisMetas = () => { } return { ...row, - [date_update]: row[date_update].substring(0, 10), accepted: row.accepted == 0 ? 'Rechazada' @@ -94,10 +297,52 @@ const AnalisisMetas = () => { setRows(modifiedData); }; - const getGoals = async () => { + const getCampaignOptions = (data) => { + const campaigns = data.map((row) => row.campaign_goal).filter(Boolean); + const uniqueCampaigns = [...new Set(campaigns)]; + const campaignOptions = uniqueCampaigns.map((campaign) => ({ + value: campaign.toLowerCase(), + label: + campaign.charAt(0).toUpperCase() + + campaign.slice(1).toLowerCase(), + })); + const uniqueCampaignOptions = Array.from( + new Map( + campaignOptions.map((item) => [item['value'], item]) + ).values() + ); + + console.log(uniqueCampaignOptions); + setCampaigns(uniqueCampaignOptions); + }; + + const constructStats = (data, deliveryType) => { + const stats = { + metasCumplidas: 0, + metasNoCumplidas: 0, + metasEnEspera: 0, + }; + + data.forEach((row) => { + let acceptedRow = + deliveryType === 'delivery' ? 'accepted' : 'accepted_execution'; + + if (row[acceptedRow] === true) { + stats.metasCumplidas++; + } else if (row[acceptedRow] === false) { + stats.metasNoCumplidas++; + } else { + stats.metasEnEspera++; + } + }); + + setGoalsQuantity(stats); + }; + + const getAllGoals = async () => { setLoading(true); try { - const response = await fetch(`${getApiUrl().apiUrl}goals`, { + const response = await fetch(`${getApiUrl().apiUrl}goals/`, { method: 'GET', credentials: 'include', }); @@ -106,7 +351,35 @@ const AnalisisMetas = () => { if (response.status === 200) { const data = await response.json(); + getCampaignOptions(data); + } + } catch (error) { + if (getApiUrl().environment === 'development') { + console.error(error); + } + } finally { + setLoading(false); + } + }; + + const getCurrentGoals = async () => { + setLoading(true); + try { + const response = await fetch( + `${getApiUrl().apiUrl}goals/?column=delivery`, + { + method: 'GET', + credentials: 'include', + } + ); + + await handleError(response, showSnack); + + if (response.status === 200) { + const data = await response.json(); + constructStats(data, 'delivery'); modifyData(data); + setColumns(currentColumns); } } catch (error) { if (getApiUrl().environment === 'development') { @@ -118,128 +391,73 @@ const AnalisisMetas = () => { }; useEffect(() => { - getGoals(); + getCurrentGoals(); + getAllGoals(); }, []); + const currentColumns = [ + { field: 'cedula', headerName: 'Cedula', width: 105 }, + { + field: 'name', + headerName: 'Nombre', + width: 280, + }, + { field: 'campaign_goal', headerName: 'Campaña', width: 250 }, + { + field: 'criteria_goal', + headerName: 'Variable a Medir', + width: 300, + }, + { field: 'quantity_goal', headerName: 'Meta', width: 200 }, + { field: 'goal_date', headerName: 'Fecha', width: 240 }, + { field: 'accepted', headerName: 'Aprobación Meta', width: 225 }, + ]; + const goalsColumns = [ - { field: 'cedula', headerName: 'Cedula', width: 200 }, - { field: 'quantity_goal', headerName: 'Meta', width: 240 }, + { field: 'cedula', headerName: 'Cedula', width: 105 }, { - field: 'last_update', - headerName: 'Fecha de modificación', - width: 255, + field: 'name', + headerName: 'Nombre', + width: 280, }, + { field: 'criteria_goal', headerName: 'Variable a Medir', width: 300 }, + { field: 'quantity_goal', headerName: 'Meta', width: 240 }, { field: 'accepted', headerName: 'Aprobación Meta', width: 225 }, + ]; + + const claroColumns = [ + { field: 'cedula', headerName: 'Cedula', width: 105 }, { - field: 'goal_date', - headerName: 'Fecha de la meta', - width: 150, - sortComparator: (v1, v2) => { - // Extraer el mes y el año de los valores - const [mes1, año1] = v1.split('-'); - const [mes2, año2] = v2.split('-'); - // Crear un objeto con los nombres de los meses en español y sus números correspondientes - const meses = { - ENERO: 1, - FEBRERO: 2, - MARZO: 3, - ABRIL: 4, - MAYO: 5, - JUNIO: 6, - JULIO: 7, - AGOSTO: 8, - SEPTIEMBRE: 9, - OCTUBRE: 10, - NOVIEMBRE: 11, - DICIEMBRE: 12, - }; - // Convertir los meses a números - const num1 = meses[mes1]; - const num2 = meses[mes2]; - // Comparar los años primero, y si son iguales, comparar los meses - if (año1 < año2) { - return -1; - } else if (año1 > año2) { - return 1; - } else { - if (num1 < num2) { - return -1; - } else if (num1 > num2) { - return 1; - } else { - return 0; - } - } - }, + field: 'name', + headerName: 'Nombre', + width: 280, }, + { + field: 'coordinator_goal', + headerName: 'Coordinador', + width: 300, + }, + { + field: 'table_goal', + headerName: 'Franja', + width: 200, + }, + { field: 'accepted', headerName: 'Aprobación Meta', width: 225 }, ]; const executionColumns = [ { field: 'cedula', headerName: 'Cedula', width: 100 }, + { field: 'name', headerName: 'Nombre', width: 280 }, { field: 'quantity_execution', headerName: 'Meta', width: 140 }, { field: 'clean_desk', headerName: 'Clean Desk', width: 100 }, { field: 'quality', headerName: 'Calidad', width: 80 }, { field: 'result', headerName: 'Resultado', width: 100 }, { field: 'total', headerName: 'Total', width: 80 }, - { - field: 'last_update', - headerName: 'Fecha de modificación', - width: 180, - }, { field: 'accepted_execution', headerName: 'Aprobación', width: 170 }, - { - field: 'execution_date', - headerName: 'Mes de la ejecución', - width: 180, - sortComparator: (v1, v2) => { - // Extraer el mes y el año de los valores - const [mes1, año1] = v1.split('-'); - const [mes2, año2] = v2.split('-'); - // Crear un objeto con los nombres de los meses en español y sus números correspondientes - const meses = { - ENERO: 1, - FEBRERO: 2, - MARZO: 3, - ABRIL: 4, - MAYO: 5, - JUNIO: 6, - JULIO: 7, - AGOSTO: 8, - SEPTIEMBRE: 9, - OCTUBRE: 10, - NOVIEMBRE: 11, - DICIEMBRE: 12, - }; - // Convertir los meses a números - const num1 = meses[mes1]; - const num2 = meses[mes2]; - // Comparar los años primero, y si son iguales, comparar los meses - if (año1 < año2) { - return -1; - } else if (año1 > año2) { - return 1; - } else { - if (num1 < num2) { - return -1; - } else if (num1 > num2) { - return 1; - } else { - return 0; - } - } - }, - }, ]; const [columns, setColumns] = useState(goalsColumns); - const handleCloseSnackbar = (event, reason) => { - if (reason === 'clickaway') { - return; - } - setOpenSnack(false); - }; - function CustomToolbar() { return ( @@ -270,29 +488,24 @@ const AnalisisMetas = () => { { value: 'JULIO', label: 'JULIO' }, { value: 'AGOSTO', label: 'AGOSTO' }, { value: 'SEPTIEMBRE', label: 'SEPTIEMBRE' }, - { value: 'OCTUBRE', label: 'OCTUBRE' }, + { value: 'octubre', label: 'OCTUBRE' }, { value: 'NOVIEMBRE', label: 'NOVIEMBRE' }, { value: 'DICIEMBRE', label: 'DICIEMBRE' }, ]; - useEffect(() => { - const YearSelect = () => { - const currentYear = new Date().getFullYear(); - const years = []; - for (let year = 2023; year <= currentYear; year++) { - years.push({ value: year, label: year }); - } - setYearsArray(years); - }; - - YearSelect(); - }, []); + const stats = [ + { title: 'Metas Aceptadas', quantity: goalsQuantity.metasCumplidas }, + { + title: 'Metas No Aceptadas', + quantity: goalsQuantity.metasNoCumplidas, + }, + { title: 'Metas en Espera', quantity: goalsQuantity.metasEnEspera }, + ]; - const handleFilter = async (event) => { - event.preventDefault(); + const handleFilter = async (values) => { try { const response = await fetch( - `${getApiUrl().apiUrl}goals/?date=${monthRef.current.value}-${yearRef.current.value}&column=${goalType.current.value}`, + `${getApiUrl().apiUrl}goals/?date=${values.month}-${values.year}&column=${values.deliveryType}&campaign=${values.campaign}`, { method: 'GET', credentials: 'include', @@ -303,29 +516,17 @@ const AnalisisMetas = () => { if (response.status === 200) { const data = await response.json(); - - // Create a new columns array based on the initial columns but with the field name changed - let currentColumns = []; - if (goalType.current.value === 'delivery') { - currentColumns = goalsColumns; - } else if (goalType.current.value === 'execution') { - currentColumns = executionColumns; + constructStats(data, values.deliveryType); + const newColumns = + values.deliveryType === 'delivery' && + values.campaign === 'claro' + ? claroColumns + : values.deliveryType === 'delivery' + ? goalsColumns + : executionColumns; + if (columns !== newColumns) { + setColumns(newColumns); } - - const updatedColumns = currentColumns.map((column) => { - if (column.field === 'last_update') { - // Change the field and header name for 'last_update' column - return { - ...column, - field: 'history_date', - headerName: 'Fecha de modificación', - }; - } - return column; // Keep other columns unchanged - }); - - // // Update the 'columns' state with the modified columns - setColumns(updatedColumns); modifyData(data); } } catch (error) { @@ -335,32 +536,9 @@ const AnalisisMetas = () => { } }; - const handleTypeGoalChange = (event) => { - const selectedValue = event.target.value; - // Perform actions based on the selected value - if ( - selectedValue === 'delivery' && - monthRef.current.value === '' && - yearRef.current.value === '' - ) { - setColumns(goalsColumns); - } else if ( - selectedValue === 'execution' && - monthRef.current.value === '' && - yearRef.current.value === '' - ) { - setColumns(executionColumns); - } - }; - - const showSnack = (message, severity) => { - setMessage(message); - setSeverity(severity); - setOpenSnack(true); - }; - return ( { > Análisis de Metas - - - - Entrega - Ejecución - - - - - {months.map((option) => ( - - {option.label} - - ))} - - +
+ - {yearsArray.map((option) => ( - - {option.label} - + {fields.map((field) => ( + ))} - - - - + + +
+ { }} getRowId={(row) => row.cedula} /> + + {stats.map((stat, index) => ( + + + Porcentaje de {stat.title} + + + {Math.round( + (stat.quantity / rows.length) * 100 + ) || 0} + % + + + {stat.quantity} de {rows.length} metas + + + ))} + -
); }; From 3163453c82274bfabf121af1fd87ed19a42e4062 Mon Sep 17 00:00:00 2001 From: sebas Date: Tue, 5 Nov 2024 17:25:17 -0500 Subject: [PATCH 08/17] Vacation module individually Add context providers for Snackbar and Progressbar --- frontend/src/components/pages/Vacations.jsx | 257 +++++++---- .../components/shared/VacationsRequest.jsx | 416 ++++++------------ 2 files changed, 306 insertions(+), 367 deletions(-) diff --git a/frontend/src/components/pages/Vacations.jsx b/frontend/src/components/pages/Vacations.jsx index c2b0f3e..e62fa7a 100644 --- a/frontend/src/components/pages/Vacations.jsx +++ b/frontend/src/components/pages/Vacations.jsx @@ -1,13 +1,11 @@ import { useState, useEffect, useRef } from 'react'; -// Material-UI +// MUI import { Container, Box, Button, Typography, - LinearProgress, - Fade, Tooltip, Dialog, DialogTitle, @@ -16,6 +14,8 @@ import { Chip, Collapse, } from '@mui/material'; + +// MUI Data Grid import { DataGrid, gridClasses, @@ -28,8 +28,14 @@ import { GridToolbarQuickFilter, } from '@mui/x-data-grid'; +// MUI Lab +import { LoadingButton } from '@mui/lab'; + +// Custom Hooks +import { useSnackbar } from '../context/SnackbarContext'; +import { useProgressbar } from '../context/ProgressbarContext'; + // Custom Components -import SnackbarAlert from '../common/SnackBarAlert'; import { getApiUrl } from '../../assets/getApi'; import { handleError } from '../../assets/handleError'; import VacationsRequest from '../shared/VacationsRequest.jsx'; @@ -47,31 +53,31 @@ import CancelIcon from '@mui/icons-material/Cancel'; import EventBusyIcon from '@mui/icons-material/EventBusy'; export const Vacations = () => { + const { showSnack } = useSnackbar(); const [rows, setRows] = useState([]); - const [severity, setSeverity] = useState('success'); - const [message, setMessage] = useState(); - const [openSnack, setOpenSnack] = useState(false); const permissions = JSON.parse(localStorage.getItem('permissions')); const [openVacation, setOpenVacation] = useState(false); - const [loading, setLoading] = useState(false); const [loadingRows, setLoadingRows] = useState(false); const [openDialogPayslip, setOpenDialogPayslip] = useState(false); const [vacationId, setVacationId] = useState(); - const [disabled, setDisabled] = useState(false); const [openObservationsInput, setOpenObservationsInput] = useState(false); const observationsRef = useRef(); const cargo = localStorage.getItem('cargo'); const rank = JSON.parse(localStorage.getItem('rango')); const cedula = JSON.parse(localStorage.getItem('cedula')); + const bossApprovalPermission = rank > 1; const managerApprovalPermission = cargo.includes('GERENTE') || cedula === '1022370826'; const hrApprovalPermission = cargo === `"GERENTE DE GESTION HUMANA"`; const payrollApprovalPermission = permissions.includes( - 'vacation.payroll_approbation' + 'vacation.payroll_approval' ); const [buttonType, setButtonType] = useState('button'); const [approvalType, setApprovalType] = useState(''); + const { isProgressVisible, showProgressbar, hideProgressbar } = + useProgressbar(); + const getVacations = async () => { setLoadingRows(true); try { @@ -99,18 +105,9 @@ export const Vacations = () => { getVacations(); }, []); - const showSnack = (severity, message) => { - setSeverity(severity); - setMessage(message); - setOpenSnack(true); - }; - - const handleCloseSnack = () => setOpenSnack(false); - const handleApproval = async (event) => { event.preventDefault(); - setDisabled(true); - setLoading(true); + showProgressbar(); const formData = new FormData(); @@ -134,8 +131,6 @@ export const Vacations = () => { await handleError(response, showSnack); if (response.status === 200) { - setLoading(false); - setDisabled(false); getVacations(); showSnack('success', 'Solicitud de vacaciones actualizada'); handleCloseDialogPayslip(); @@ -144,8 +139,8 @@ export const Vacations = () => { if (getApiUrl().environment === 'development') { console.error(error); } - setLoading(false); - setDisabled(false); + } finally { + hideProgressbar(); } }; @@ -194,17 +189,80 @@ export const Vacations = () => { }, }, { - field: 'uploaded_by', + field: 'username', headerName: 'Solicitado por', width: 250, }, { - field: 'user', - headerName: 'Solicitado para', - width: 250, + field: 'boss_is_approved', + headerName: 'Aprobación Jefe', + width: 160, + type: 'singleSelect', + valueOptions: ['PENDIENTE', 'APROBADA', 'RECHAZADA'], + // return a chip with the status + valueGetter: (value) => { + if (value === null) { + return 'PENDIENTE'; + } else if (value === true) { + return 'APROBADA'; + } + return 'RECHAZADA'; + }, + renderCell: (params) => { + if (params.value === 'PENDIENTE') { + return ( + + handleVacancyApproval( + params.id, + 'boss_is_approved' + ) + : undefined + } + icon={} + label="Pendiente" + /> + ); + } else if (params.value === 'APROBADA') { + return ( + + handleVacancyApproval( + params.id, + 'boss_is_approved' + ) + : undefined + } + icon={} + label="Aprobada" + color="success" + /> + ); + } + return ( + + handleVacancyApproval( + params.id, + 'boss_is_approved' + ) + : undefined + } + icon={} + label="Rechazado" + color="error" + /> + ); + }, }, { - field: 'manager_approbation', + field: 'manager_is_approved', headerName: 'Aprobación gerente', width: 160, type: 'singleSelect', @@ -223,11 +281,12 @@ export const Vacations = () => { return ( handleVacancyApproval( params.id, - 'manager_approbation' + 'manager_is_approved' ) : undefined } @@ -239,11 +298,12 @@ export const Vacations = () => { return ( handleVacancyApproval( params.id, - 'manager_approbation' + 'manager_is_approved' ) : undefined } @@ -256,11 +316,12 @@ export const Vacations = () => { return ( handleVacancyApproval( params.id, - 'manager_approbation' + 'manager_is_approved' ) : undefined } @@ -272,7 +333,7 @@ export const Vacations = () => { }, }, { - field: 'hr_approbation', + field: 'hr_is_approved', headerName: 'Aprobación RH', width: 150, type: 'singleSelect', @@ -291,12 +352,12 @@ export const Vacations = () => { return ( handleVacancyApproval( params.id, - 'hr_approbation' + 'hr_is_approved' ) : undefined } @@ -312,7 +373,7 @@ export const Vacations = () => { ? () => handleVacancyApproval( params.id, - 'hr_approbation' + 'hr_is_approved' ) : undefined } @@ -325,12 +386,12 @@ export const Vacations = () => { return ( handleVacancyApproval( params.id, - 'hr_approbation' + 'hr_is_approved' ) : undefined } @@ -342,7 +403,7 @@ export const Vacations = () => { }, }, { - field: 'payroll_approbation', + field: 'payroll_is_approved', headerName: 'Aprobación nomina', width: 160, type: 'singleSelect', @@ -361,12 +422,12 @@ export const Vacations = () => { return ( handleVacancyApproval( params.id, - 'payroll_approbation' + 'payroll_is_approved' ) : undefined } @@ -378,12 +439,12 @@ export const Vacations = () => { return ( handleVacancyApproval( params.id, - 'payroll_approbation' + 'payroll_is_approved' ) : undefined } @@ -396,12 +457,12 @@ export const Vacations = () => { return ( handleVacancyApproval( params.id, - 'payroll_approbation' + 'payroll_is_approved' ) : undefined } @@ -455,7 +516,7 @@ export const Vacations = () => { }, }, { - field: 'letter', + field: 'request_letter', headerName: 'Carta de solicitud', width: 150, type: 'actions', @@ -468,19 +529,47 @@ export const Vacations = () => { arrow > } - label="open-letter" + label="open-request-letter" sx={{ color: 'primary.main', }} onClick={() => { - const requestFile = row.request_file.replace( - /^\//, - '' + window.open( + `${getApiUrl().apiUrl}vacation/${row.id}/get-request`, + '_blank' ); + }} + /> + , + ]; + }, + }, + { + field: 'response_letter', + headerName: 'Carta de respuesta', + width: 150, + type: 'actions', + cellClassName: 'actions', + getActions: ({ row }) => { + return [ + + } + disabled={row.status === 'PENDIENTE'} + label="open-response-letter" + sx={{ + color: 'primary.main', + }} + onClick={() => { window.open( - `${getApiUrl().apiUrl}${requestFile}`, + `${getApiUrl().apiUrl}vacation/${row.id}/get-response`, '_blank' ); }} @@ -491,7 +580,7 @@ export const Vacations = () => { }, ]; - const handleOpenDialog = () => setOpenVacation(true); + // const handleOpenDialog = () => setOpenVacation(true); const CustomToolbar = () => { return ( @@ -506,15 +595,21 @@ export const Vacations = () => { utf8WithBom: true, }} /> - {rank > 1 ? ( - - ) : null} + + + + + @@ -524,10 +619,8 @@ export const Vacations = () => { const handleCloseDialogPayslip = () => { setOpenDialogPayslip(false); - setDisabled(false); setOpenObservationsInput(false); setButtonType('button'); - setLoading(false); }; const handleDecline = async () => { @@ -548,12 +641,7 @@ export const Vacations = () => { openVacation={openVacation} setOpenVacation={setOpenVacation} /> - + { inputRef={observationsRef} sx={{ my: '1rem' }} required={buttonType === 'submit'} - disabled={disabled} + disabled={isProgressVisible} variant="filled" fullWidth id="outlined-multiline-flexible" @@ -594,7 +682,7 @@ export const Vacations = () => { }} > - + - - - { useEffect(() => { @@ -85,6 +84,7 @@ export const CalendarRange = forwardRef(function CalendarRange( return ( { }; const VacationsRequest = ({ openVacation, setOpenVacation, getVacations }) => { + const { showSnack } = useSnackbar(); const [value, setValue] = useState(''); const [textDate, setTextDate] = useState(''); const [daysAmount, setDaysAmount] = useState(''); const [collapseDate, setCollapseDate] = useState(true); - const [employeesInCharge, setEmployeesInCharge] = useState([]); - const [selectedFile, setSelectedFile] = useState(null); - const [fileName, setFileName] = useState( - 'SUBIR CARTA DE SOLICITUD DE VACACIONES' - ); - const [openSnack, setOpenSnack] = useState(false); - const [severity, setSeverity] = useState('success'); - const [message, setMessage] = useState(''); - const [valueAutocomplete, setValueAutocomplete] = useState(null); // [value, setValue + + const { isProgressVisible, showProgressbar, hideProgressbar } = + useProgressbar(); + const [isMondayToFriday, setIsMondayToFriday] = useState(false); const [openCalendar, setOpenCalendar] = useState(false); - const [loadingBar, setLoadingBar] = useState(false); const [holidays, setHolidays] = useState([]); const getTextMonth = (month) => { @@ -163,12 +158,6 @@ const VacationsRequest = ({ openVacation, setOpenVacation, getVacations }) => { ).toLocaleString('es-ES', { month: 'long' }); }; - const showSnack = (severity, message) => { - setSeverity(severity); - setMessage(message); - setOpenSnack(true); - }; - const handleSchedule = (event) => { setIsMondayToFriday(event.target.value); setOpenCalendar(true); @@ -177,58 +166,6 @@ const VacationsRequest = ({ openVacation, setOpenVacation, getVacations }) => { } }; - const handleCloseSnack = () => { - setOpenSnack(false); - }; - - useEffect(() => { - getEmployeesInCharge(); - }, []); - - const getEmployeesInCharge = async () => { - try { - const response = await fetch( - `${getApiUrl().apiUrl}users/get-subordinates/`, - { - method: 'GET', - credentials: 'include', - } - ); - - await handleError(response, showSnack); - - if (response.status === 200) { - const data = await response.json(); - // format the data to put it in the autocomplete - setEmployeesInCharge( - data.map((item) => ({ id: item.id, label: item.name })) - ); - } - } catch (error) { - if (getApiUrl().environment === 'development') { - console.error(error); - } - } - }; - - const VisuallyHiddenInput = styled('input')({ - clip: 'rect(0 0 0 0)', - clipPath: 'inset(50%)', - height: 1, - overflow: 'hidden', - position: 'absolute', - bottom: 0, - left: 0, - whiteSpace: 'nowrap', - width: 1, - }); - - const handleFileInputChange = (event) => { - const file = event.target.files[0]; - setFileName(file.name); - setSelectedFile(file); - }; - const getHolidays = async () => { const date = new Date(); try { @@ -310,39 +247,18 @@ const VacationsRequest = ({ openVacation, setOpenVacation, getVacations }) => { const handleCloseVacationDialog = () => { setOpenVacation(false); + setOpenCalendar(false); setTextDate(''); setValue(''); - setFileName('SUBIR CARTA DE SOLICITUD DE VACACIONES'); - setSelectedFile(null); }; - const validateData = (event) => { + const handleSubmitVacationRequest = async (event) => { event.preventDefault(); - if (selectedFile === null) { - showSnack( - 'error', - 'Por favor, sube el archivo de solicitud de vacaciones.' - ); - return false; - } else if (value === '') { - showSnack( - 'error', - 'Por favor, selecciona las fechas de inicio y fin de las vacaciones.' - ); - return false; - } else { - handleSubmitVacationRequest(); - } - }; - - const handleSubmitVacationRequest = async () => { - setLoadingBar(true); + showProgressbar(); const formData = new FormData(); - formData.append('request_file', selectedFile); - formData.append('mon_to_sat', !isMondayToFriday); + formData.append('sat_is_working', !isMondayToFriday); formData.append('start_date', value.split('/')[0]); formData.append('end_date', value.split('/')[1]); - formData.append('user', valueAutocomplete.id); try { const response = await fetch(`${getApiUrl().apiUrl}vacation/`, { @@ -366,193 +282,139 @@ const VacationsRequest = ({ openVacation, setOpenVacation, getVacations }) => { console.error(error); } } finally { - setLoadingBar(false); + hideProgressbar(); } }; return ( - <> - - + + {'¿Solicitud de Vacaciones?'} + + + - - - - - {'¿Solicitud de Vacaciones?'} - - - + - +
  • + Ten en cuenta que no puedes solicitar vacaciones + para el mes actual. +
  • +
    +
  • + Puedes solicitar vacaciones para{' '} + {getTextMonth(1)} si haces tu solicitud + antes del día 20 del mes actual. + + {' '} + Si no lo haces en ese periodo, el proximo + mes disponible para la solicitud sera{' '} + {getTextMonth(2)}. + +
  • +
    +
  • + Asegúrate de seleccionar la cantidad de días + correctos. Recuerda que son máximo{' '} + 15 días hábiles vigentes por solicitud, + así que ten en cuenta si tu horario es de{' '} + lunes a viernes o de lunes a sábado, y + también considera los días festivos. +
  • +
    +
  • + Sube el archivo de solicitud de vacaciones en + formato PDF. +
  • +
    +
  • + Las restricciones mencionadas ya están + implementadas en el calendario al seleccionar el + rango de fechas para las vacaciones. +
  • + +
    + + + - Antes de crear una solicitud de vacaciones, ten en - cuenta los siguientes datos: -
      -
    • - Ten en cuenta que no puedes solicitar - vacaciones para el mes actual. -
    • -
      -
    • - Puedes solicitar vacaciones para{' '} - {getTextMonth(1)} si haces tu - solicitud antes del día 20 del{' '} - mes actual. - - {' '} - Si no lo haces en ese periodo, el - proximo mes disponible para la solicitud - sera {getTextMonth(2)}. - -
    • -
      -
    • - Asegúrate de seleccionar la cantidad de días - correctos. Recuerda que son máximo{' '} - 15 días hábiles vigentes por - solicitud, así que ten en cuenta si tu - empleado tiene un horario de{' '} - lunes a viernes o de lunes a sábado, - y también considera los días festivos - . -
    • -
      -
    • - Sube el archivo de solicitud de vacaciones - en formato PDF. -
    • -
      -
    • - Las restricciones mencionadas ya están - implementadas en el calendario al - seleccionar el rango de fechas para las - vacaciones. -
    • -
    + Lunes a Viernes + Lunes a Sábado +
    +
    + + + Periodo de vacaciones seleccionado:{' '} - - { - setValueAutocomplete(newValue); - }} - id="combo-box-demo" - options={employeesInCharge} - sx={{ width: 'max-width', px: '4rem' }} - renderInput={(params) => ( - - )} - /> - - - Lunes a Viernes - Lunes a Sábado - - - - - - - - Periodo de vacaciones seleccionado:{' '} + + + {textDate} + + + Cantidad de días hábiles seleccionados:{' '} + {daysAmount} - - - {textDate} - - - Cantidad de días hábiles seleccionados:{' '} - {daysAmount} - - - - - -
    -
    - + + + + + + + + - - - -
    - + Solicitar + + + ); }; From cd804d8b3b8af6f8c49d7bba74218a4c436c0785 Mon Sep 17 00:00:00 2001 From: sebas Date: Tue, 5 Nov 2024 17:32:50 -0500 Subject: [PATCH 09/17] Fix bug progress bar in handleSave function Refactor UploadFiles component to utilize SnackbarContext for notifications and streamline state management --- frontend/src/components/pages/UploadFiles.jsx | 33 ++++++------------- 1 file changed, 10 insertions(+), 23 deletions(-) diff --git a/frontend/src/components/pages/UploadFiles.jsx b/frontend/src/components/pages/UploadFiles.jsx index f230398..79cb3c9 100644 --- a/frontend/src/components/pages/UploadFiles.jsx +++ b/frontend/src/components/pages/UploadFiles.jsx @@ -4,8 +4,10 @@ import { useState, useEffect, useCallback } from 'react'; import { useDropzone } from 'react-dropzone'; import { useNavigate } from 'react-router-dom'; +// Custom Hooks +import { useSnackbar } from '../context/SnackbarContext'; + // Custom Components -import SnackbarAlert from '../common/SnackBarAlert'; import { getApiUrl } from '../../assets/getApi'; import { handleError } from '../../assets/handleError'; @@ -18,12 +20,11 @@ import UploadFileIcon from '@mui/icons-material/UploadFile'; import CloudUploadIcon from '@mui/icons-material/CloudUpload'; const UploadFiles = () => { + const { showSnack } = useSnackbar(); const [selectedFile, setSelectedFile] = useState(null); const [fileName, setFileName] = useState('Example'); const [loading, setLoading] = useState(false); - const [severity, setSeverity] = useState('success'); - const [message, setMessage] = useState(); - const [openSnack, setOpenSnack] = useState(false); + const permissions = JSON.parse(localStorage.getItem('permissions')); const navigate = useNavigate(); @@ -31,18 +32,14 @@ const UploadFiles = () => { window.scrollTo(0, 0); if ( !permissions || - !permissions.includes('users.upload_robinson_list') + (!permissions.includes('users.upload_robinson_list') && + !permissions.includes('goals.add_goals') && + !permissions.includes('users.upload_points')) ) { navigate('/logged/home'); } }, []); - const showSnack = (severity, message) => { - setSeverity(severity); - setMessage(message); - setOpenSnack(true); - }; - const onDrop = useCallback((acceptedFiles) => { setSelectedFile(acceptedFiles[0]); }, []); @@ -75,7 +72,6 @@ const UploadFiles = () => { if (selectedFile) { const formData = new FormData(); formData.append('file', selectedFile); - formData.append('cedula', cedula); let path; if (selectedFile.name.includes('meta')) { path = `${getApiUrl().apiUrl}goals/`; @@ -100,8 +96,6 @@ const UploadFiles = () => { credentials: 'include', }); - setLoading(false); - await handleError(response, showSnack); const data = await response.json(); @@ -126,20 +120,19 @@ const UploadFiles = () => { 'La importación se ejecutó exitosamente, no se encontraron registros por añadir.\nRegistros totales en la base de datos: ' + data.database_rows ); - } else if (response.status === 200) { + } else if (response.status === 201 || response.status === 200) { showSnack('success', 'El cargue se subió exitosamente.'); } } catch (error) { if (getApiUrl().environment === 'development') { console.error(error); } + } finally { setLoading(false); } } }; - const handleCloseSnack = () => setOpenSnack(false); - return ( { {' '} - ); }; From 29a4900781abc18e7483f55ad9f7fd5ad0f478c3 Mon Sep 17 00:00:00 2001 From: sebas Date: Tue, 5 Nov 2024 17:36:51 -0500 Subject: [PATCH 10/17] Refactor CoexistenceCommittee component to use LoadingButton and SnackbarContext, update form validation, and improve progress handling --- .../components/pages/CoexistenceCommittee.jsx | 95 ++++++++----------- 1 file changed, 39 insertions(+), 56 deletions(-) diff --git a/frontend/src/components/pages/CoexistenceCommittee.jsx b/frontend/src/components/pages/CoexistenceCommittee.jsx index cc62923..c58df76 100644 --- a/frontend/src/components/pages/CoexistenceCommittee.jsx +++ b/frontend/src/components/pages/CoexistenceCommittee.jsx @@ -1,26 +1,34 @@ -import React, { useState } from 'react'; +// Libraries +import { LoadingButton } from '@mui/lab'; +import { Formik, Form, useField } from 'formik'; +import * as Yup from 'yup'; + +// MUI Components import { Container, Box, Typography, TextField, MenuItem, - Button, - LinearProgress, List, ListItem, ListItemText, } from '@mui/material'; -import { Formik, Form, useField } from 'formik'; -import * as Yup from 'yup'; + +// MUI Icons import SendIcon from '@mui/icons-material/Send'; -import SnackbarAlert from '../common/SnackBarAlert'; + +// Custom components and assets import { getApiUrl } from '../../assets/getApi'; import { handleError } from '../../assets/handleError'; // Media import CoexistenceCommitteeSVG from '../../images/coexistence-committee/coexistence-committee.svg'; +// Custom hooks +import { useSnackbar } from '../context/SnackbarContext'; +import { useProgressbar } from '../context/ProgressbarContext'; + // Opciones de motivos de la denuncia const motivos = [ { value: 'Acoso laboral' }, @@ -32,8 +40,7 @@ const motivos = [ // Esquema de validación con Yup const validationSchema = Yup.object().shape({ - area: Yup.string().required('Campo requerido'), - motivo: Yup.string().required('Campo requerido'), + reason: Yup.string().required('Campo requerido'), description: Yup.string().required('Campo requerido'), }); @@ -72,26 +79,17 @@ const FormikTextField = ({ // Componente principal del Comité de Convivencia const CoexistenceCommittee = () => { - const [loadingBar, setLoadingBar] = useState(false); - const [openSnack, setOpenSnack] = useState(false); - const [severity, setSeverity] = useState('success'); - const [message, setMessage] = useState(''); - - const handleCloseSnack = () => setOpenSnack(false); - - const showSnack = (severity, message) => { - setSeverity(severity); - setMessage(message); - setOpenSnack(true); - }; + const { showSnack } = useSnackbar(); + const { isProgressVisible, showProgressbar, hideProgressbar } = + useProgressbar(); // Maneja el envío del formulario - const handleSubmit = async (values) => { - setLoadingBar(true); + const handleSubmit = async (values, { resetForm }) => { + showProgressbar(); try { const response = await fetch( - `${getApiUrl().apiUrl}pqrs/complaints/`, + `${getApiUrl().apiUrl}coexistence-committee/complaints/`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, @@ -100,11 +98,16 @@ const CoexistenceCommittee = () => { } ); - setLoadingBar(false); await handleError(response, showSnack); + + if (response.status === 201) { + showSnack('success', 'Mensaje enviado correctamente'); + resetForm(); + } } catch (error) { console.error(error); - setLoadingBar(false); + } finally { + hideProgressbar(); } }; @@ -174,7 +177,10 @@ const CoexistenceCommittee = () => { {/* Formulario para enviar mensajes al Comité */} @@ -195,7 +201,7 @@ const CoexistenceCommittee = () => { @@ -209,42 +215,19 @@ const CoexistenceCommittee = () => { autoComplete="off" /> - + - - {/* Barra de carga */} - {loadingBar && ( - - - - )} - - {/* Alerta Snackbar */} -
    ); }; From 519a8137b753e5321db607c7ff2a6eefa315c1a6 Mon Sep 17 00:00:00 2001 From: sebas Date: Tue, 5 Nov 2024 17:38:58 -0500 Subject: [PATCH 11/17] Refactor Login component to utilize SnackbarContext and ProgressbarContext, enhance error and submit handling , and replace Button with LoadingButton for improved UX --- frontend/src/components/pages/Login.jsx | 229 ++++++++++++------------ 1 file changed, 118 insertions(+), 111 deletions(-) diff --git a/frontend/src/components/pages/Login.jsx b/frontend/src/components/pages/Login.jsx index a75cf24..04f3534 100644 --- a/frontend/src/components/pages/Login.jsx +++ b/frontend/src/components/pages/Login.jsx @@ -5,12 +5,16 @@ import { useNavigate, useLocation } from 'react-router-dom'; import { Formik, Form, useField } from 'formik'; import * as Yup from 'yup'; import * as Sentry from '@sentry/react'; +import { Toaster, toast } from 'sonner'; -// Custom Components -import SnackbarAlert from '../common/SnackBarAlert'; +// Custom Hooks +import { useSnackbar } from '../context/SnackbarContext'; +import { useProgressbar } from '../context/ProgressbarContext'; + +// Custom Components/Functions import { getApiUrl } from '../../assets/getApi.js'; -// Material-UI +// MUI Components import { Box, Typography, @@ -19,9 +23,11 @@ import { Link, Alert, Collapse, - LinearProgress, } from '@mui/material'; +// MUI Lab +import { LoadingButton } from '@mui/lab'; + // Icons import LoginOutlinedIcon from '@mui/icons-material/LoginOutlined'; import Diversity3Icon from '@mui/icons-material/Diversity3'; @@ -51,18 +57,16 @@ const FormikTextField = ({ label, type, disabled, autoComplete, ...props }) => { const Login = () => { const [open, setOpen] = useState(false); - const [openSnack, setOpenSnack] = useState(false); + const { showSnack } = useSnackbar(); const navigate = useNavigate(); - const [isSubmitting, setIsSubmitting] = useState(false); - const [severity, setSeverity] = useState('success'); - const [message, setMessage] = useState(); - const [loadingBar, setLoadingBar] = useState(false); const location = useLocation(); const showAlert = location.state?.showAlert; const lastLocationPath = location.state?.lastLocation ? new URL(location.state?.lastLocation).pathname : null; const [lastLocation, setLastLocation] = useState(null); + const { isProgressVisible, showProgressbar, hideProgressbar } = + useProgressbar(); // Use Effect Hook to update localStorage when items state changes useEffect(() => { @@ -97,17 +101,62 @@ const Login = () => { } }, [showAlert, navigate, location, lastLocation]); - const handleCloseSnack = () => setOpenSnack(false); + // Constants + const ERROR_MESSAGES = { + ACCOUNT_CREATION: + 'Tu usuario esta siendo creado, por favor intenta mas tarde.', + INVALID_CREDENTIALS: + 'No se puede iniciar sesión con las credenciales proporcionadas.', + GENERIC_ERROR: 'Ha ocurrido un error. Por favor, inténtelo de nuevo.', + }; + + const REFRESH_TIMER_EXPIRY = 15 * 60 * 60 * 1000; // 15 hours in milliseconds + + // Helper functions + const saveUserDataToLocalStorage = (data) => { + const itemsToStore = { + 'refresh-timer-ls': { + expiry: new Date().getTime() + REFRESH_TIMER_EXPIRY, + }, + permissions: data.permissions, + cedula: data.cedula, + cargo: data.cargo, + email: data.email, + rango: data.rango, + }; + + Object.entries(itemsToStore).forEach(([key, value]) => { + localStorage.setItem(key, JSON.stringify(value)); + }); + }; + + const setupSentryUser = (data, username) => { + Sentry.setUser({ + id: data.cedula, + email: data.email, + username, + }); + }; - const showSnack = (severity, message) => { - setSeverity(severity); - setMessage(message); - setOpenSnack(true); + const handleNavigation = (lastLocation, navigate) => { + const destination = lastLocation || '/logged/home'; + navigate(destination, { replace: true }); + }; + + const handleErrorResponse = (response, data) => { + if (response.status === 400 && data?.non_field_errors?.length > 0) { + throw new Error(ERROR_MESSAGES.ACCOUNT_CREATION); + } + + if (response.status === 401 && data?.detail?.length > 0) { + throw new Error(ERROR_MESSAGES.INVALID_CREDENTIALS); + } + + throw new Error(ERROR_MESSAGES.GENERIC_ERROR); }; const handleSubmit = async (values) => { - setIsSubmitting(true); - setLoadingBar(true); + showProgressbar(); try { const response = await fetch(`${getApiUrl().apiUrl}token/obtain/`, { @@ -117,93 +166,33 @@ const Login = () => { credentials: 'include', }); - setIsSubmitting(false); - setLoadingBar(false); - const data = await response.json(); if (!response.ok) { - // Check if the response contains the expected error structure - if ( - response.status === 400 && - data && - data.non_field_errors && - data.non_field_errors.length > 0 - ) { - // If the error structure is as expected, throw the first error message - throw new Error( - 'Tu usuario esta siendo creado, por favor intenta mas tarde.' - ); - } else if ( - response.status === 401 && - data && - data.detail && - data.detail.length > 0 - ) { - showSnack( - 'error', - 'No se puede iniciar sesión con las credenciales proporcionadas.' - ); - } else { - // If the error structure is not as expected, throw a generic error - throw new Error( - 'Ha ocurrido un error. Por favor, inténtelo de nuevo.' - ); - } + handleErrorResponse(response, data); } if (response.status === 200) { - // Set the item in localStorage - localStorage.setItem( - 'refresh-timer-ls', - JSON.stringify({ - expiry: new Date().getTime() + 15 * 60 * 60 * 1000, // 24 hours from now - }) - ); - localStorage?.setItem( - 'permissions', - JSON.stringify(data.permissions) - ); - localStorage?.setItem('cedula', JSON.stringify(data.cedula)); - localStorage?.setItem('cargo', JSON.stringify(data.cargo)); - localStorage?.setItem('email', JSON.stringify(data.email)); - localStorage?.setItem('rango', JSON.stringify(data.rango)); - Sentry.setUser({ - id: data.cedula, - email: data.email, - username: values.username, - }); - if (lastLocation) { - navigate(lastLocation, { replace: true }); - } else { - navigate('/logged/home'); - } + saveUserDataToLocalStorage(data); + setupSentryUser(data, values.username); + handleNavigation(lastLocation, navigate); } } catch (error) { - if ( - error.message === - 'Tu usuario esta siendo creado, por favor intenta mas tarde.' - ) { - showSnack('info', error.message); - } else { - console.error(error); - if ( - error.message === - 'Unable to log in with provided credentials.' || - error.message === - 'No active account found with the given credentials' - ) { - showSnack( - 'error', - 'No se puede iniciar sesión con las credenciales proporcionadas.' - ); - } else { - console.error(error.message); - showSnack('error', error.message); - } - } - setIsSubmitting(false); - setLoadingBar(false); + console.error(error); + + const errorMessage = + error.message === ERROR_MESSAGES.ACCOUNT_CREATION + ? { type: 'info', message: error.message } + : error.message === ERROR_MESSAGES.INVALID_CREDENTIALS + ? { + type: 'error', + message: ERROR_MESSAGES.INVALID_CREDENTIALS, + } + : { type: 'error', message: error.message }; + + showSnack(errorMessage.type, errorMessage.message); + } finally { + hideProgressbar(); } }; @@ -213,6 +202,21 @@ const Login = () => { navigate('ethical-line'); }; + // const toastPromise = () => { + // const promise = () => + // new Promise((resolve) => + // setTimeout(() => resolve({ name: 'Sonner' }), 2000) + // ); + + // toast.promise(promise, { + // loading: 'Loading...', + // success: (data) => { + // return `${data.name} toast has been added`; + // }, + // error: 'Error', + // }); + // }; + return ( { - + + + + */} + + {/* */} ); }; From 8ca5f930c1e28d90a434c33da702524040e3dafd Mon Sep 17 00:00:00 2001 From: sebas Date: Tue, 5 Nov 2024 17:40:39 -0500 Subject: [PATCH 12/17] Refactor Payslips component to integrate LoadingButton and SnackbarContext, enhance progress handling, and add 'bearing' column to PayslipsPreview --- frontend/src/components/pages/Payslips.jsx | 89 +++++++------------ .../src/components/pages/PayslipsPreview.jsx | 11 +++ 2 files changed, 42 insertions(+), 58 deletions(-) diff --git a/frontend/src/components/pages/Payslips.jsx b/frontend/src/components/pages/Payslips.jsx index 9db4767..3ca3869 100644 --- a/frontend/src/components/pages/Payslips.jsx +++ b/frontend/src/components/pages/Payslips.jsx @@ -5,21 +5,21 @@ import { read, utils } from 'xlsx'; import { useNavigate } from 'react-router-dom'; -// Material-UI +// MUI import { Container, Box, Button, Typography, styled, - LinearProgress, - Fade, Tooltip, Dialog, DialogTitle, DialogContent, TextField, } from '@mui/material'; + +// MUI DataGrid import { DataGrid, GridActionsCellItem, @@ -31,8 +31,14 @@ import { GridToolbarQuickFilter, } from '@mui/x-data-grid'; +// MUI Lab +import { LoadingButton } from '@mui/lab'; + +// Custom Hooks +import { useSnackbar } from '../context/SnackbarContext'; +import { useProgressbar } from '../context/ProgressbarContext'; + // Custom Components -import SnackbarAlert from '../common/SnackBarAlert'; import PayslipsPreview from './PayslipsPreview.jsx'; import { getApiUrl } from '../../assets/getApi'; import { handleError } from '../../assets/handleError'; @@ -49,22 +55,20 @@ import ArrowCircleUpIcon from '@mui/icons-material/ArrowCircleUp'; export const Payslips = () => { const [rows, setRows] = useState([]); - const [severity, setSeverity] = useState('success'); - const [message, setMessage] = useState(); - const [openSnack, setOpenSnack] = useState(false); + const { showSnack } = useSnackbar(); const navigate = useNavigate(); const permissions = JSON.parse(localStorage.getItem('permissions')); const [openDialog, setOpenDialog] = useState(false); const [fileName, setFileName] = useState('Subir archivo'); const [payslipFile, setPayslipFile] = useState(null); const [previewRows, setPreviewRows] = useState([]); - const [loadingPreview, setLoadingPreview] = useState(false); - const [loading, setLoading] = useState(false); const [loadingRows, setLoadingRows] = useState(false); const [openDialogPayslip, setOpenDialogPayslip] = useState(false); const [idPayslip, setIdPayslip] = useState(); const [disabled, setDisabled] = useState(false); const emailRef = useRef(); + const { isProgressVisible, showProgressbar, hideProgressbar } = + useProgressbar(); useEffect(() => { window.scrollTo(0, 0); @@ -100,14 +104,6 @@ export const Payslips = () => { getPayslips(); }, []); - const showSnack = (severity, message) => { - setSeverity(severity); - setMessage(message); - setOpenSnack(true); - }; - - const handleCloseSnack = () => setOpenSnack(false); - const VisuallyHiddenInput = styled('input')({ clip: 'rect(0 0 0 0)', clipPath: 'inset(50%)', @@ -122,8 +118,7 @@ export const Payslips = () => { const handleResend = async (event) => { event.preventDefault(); - setDisabled(true); - setLoading(true); + showProgressbar(); const formData = new FormData(); formData.append('email', emailRef.current.value); @@ -139,9 +134,7 @@ export const Payslips = () => { await handleError(response, showSnack); - if (response.status === 201) { - setLoading(false); - setDisabled(false); + if (response.status === 200) { getPayslips(); showSnack('success', 'Desprendible reenviado correctamente'); handleCloseDialogPayslip(); @@ -150,8 +143,8 @@ export const Payslips = () => { if (getApiUrl().environment === 'development') { console.error(error); } - setLoading(false); - setDisabled(false); + } finally { + hideProgressbar(); } }; @@ -267,6 +260,7 @@ export const Payslips = () => { 'days', 'biweekly_period', 'transport_allowance', + 'bearing', 'surcharge_night_shift_hours', 'surcharge_night_shift_allowance', 'surcharge_night_shift_holiday_hours', @@ -344,7 +338,11 @@ export const Payslips = () => { }; const submitPayslipFile = async () => { - setLoadingPreview(true); + showProgressbar(); + if (!payslipFile) { + showSnack('error', 'Debes seleccionar un archivo'); + return; + } try { const formData = new FormData(); @@ -359,7 +357,6 @@ export const Payslips = () => { if (response.status === 201) { handleCloseDialog(); - setLoadingPreview(false); getPayslips(); showSnack( 'success', @@ -370,7 +367,8 @@ export const Payslips = () => { if (getApiUrl().environment === 'development') { console.error(error); } - setLoadingPreview(false); + } finally { + hideProgressbar(); } }; @@ -431,29 +429,18 @@ export const Payslips = () => { > Cancelar - + - - - { open={openDialog} onClose={handleCloseDialog} > - - - Cargar Desprendibles de Nomina - + - ); }; diff --git a/frontend/src/components/pages/PayslipsPreview.jsx b/frontend/src/components/pages/PayslipsPreview.jsx index bd725c3..a553513 100644 --- a/frontend/src/components/pages/PayslipsPreview.jsx +++ b/frontend/src/components/pages/PayslipsPreview.jsx @@ -50,6 +50,17 @@ const columns = [ headerName: 'Auxilio de Transporte', width: 130, type: 'number', + valueFormatter: (value) => + new Intl.NumberFormat('es-CO', { + style: 'currency', + currency: 'COP', + }).format(value), + }, + { + field: 'bearing', + headerName: 'Rodamiento', + width: 130, + type: 'number', valueFormatter: (value) => new Intl.NumberFormat('es-CO', { style: 'currency', From 45a831899c2bda3defffe233854966a790e5f413 Mon Sep 17 00:00:00 2001 From: sebas Date: Tue, 5 Nov 2024 17:45:51 -0500 Subject: [PATCH 13/17] Refactor Pqrs component to integrate LoadingButton and SnackbarContext, edit fields name, get the managements options by BD and improve progress handling --- frontend/src/components/pages/Pqrs.jsx | 173 ++++++++++++++----------- 1 file changed, 94 insertions(+), 79 deletions(-) diff --git a/frontend/src/components/pages/Pqrs.jsx b/frontend/src/components/pages/Pqrs.jsx index 1bb6335..ba1b7e9 100644 --- a/frontend/src/components/pages/Pqrs.jsx +++ b/frontend/src/components/pages/Pqrs.jsx @@ -1,82 +1,104 @@ -import React, { useState } from 'react'; +import { useState, useEffect } from 'react'; + +// Libraries import { Container, Box, Typography, TextField, MenuItem, - Button, - LinearProgress, + Alert, } from '@mui/material'; import { Formik, Form, useField } from 'formik'; import * as Yup from 'yup'; +import { LoadingButton } from '@mui/lab'; + +// Icons import SendIcon from '@mui/icons-material/Send'; -import SnackbarAlert from '../common/SnackBarAlert'; + +// Custom Components/Functions import { getApiUrl } from '../../assets/getApi'; import { handleError } from '../../assets/handleError'; -// Media -import Pqrs from '../../images/pqrs/pqrs.png'; - -const areas = [ - { value: 'Gerencia General' }, - { value: 'Gerencia de Riesgo y Control Interno' }, - { value: 'Gerencia Gestión Humana' }, - { value: 'Gerencia de Planeación' }, - { value: 'Gerencia Administrativa' }, - { value: 'Gerencia de Legal' }, - { value: 'Gerencia de Operaciones' }, - { value: 'Gerencia de Recursos Físicos' }, -]; +// Custom Hooks +import { useSnackbar } from '../context/SnackbarContext'; +import { useProgressbar } from '../context/ProgressbarContext'; -const motivos = [ - { value: 'Petición' }, - { value: 'Queja' }, - { value: 'Reclamo' }, - { value: 'Sugerencia' }, - { value: 'Otro' }, +// Media +import PqrsImage from '../../images/pqrs/pqrs.png'; + +const reasons = [ + { value: 'PETICIÓN', label: 'Petición' }, + { value: 'QUEJA', label: 'Queja' }, + { value: 'RECLAMO', label: 'Reclamo' }, + { value: 'SUGERENCIA', label: 'Sugerencia' }, + { value: 'OTRO', label: 'Otro' }, ]; const validationSchema = Yup.object().shape({ - area: Yup.string().required('Campo requerido'), - motivo: Yup.string().required('Campo requerido'), + management: Yup.string().required('Campo requerido'), + reason: Yup.string().required('Campo requerido'), description: Yup.string().required('Campo requerido'), }); -const Suggestions = () => { - const [loadingBar, setLoadingBar] = useState(false); - const [openSnack, setOpenSnack] = useState(false); - const [severity, setSeverity] = useState('success'); - const [message, setMessage] = useState(''); - - const handleCloseSnack = () => setOpenSnack(false); - - const showSnack = (severity, message) => { - setSeverity(severity); - setMessage(message); - setOpenSnack(true); - }; - - const handleSubmit = async (values) => { - setLoadingBar(true); +const Pqrs = () => { + const [managements, setManagements] = useState([]); + const { showSnack } = useSnackbar(); + const { isProgressVisible, showProgressbar, hideProgressbar } = + useProgressbar(); + const getManagement = async () => { try { const response = await fetch( - `${getApiUrl().apiUrl}pqrs/complaints/`, + `${getApiUrl().apiUrl}pqrs/management/`, { - method: 'POST', + method: 'GET', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(values), credentials: 'include', } ); - setLoadingBar(false); + + await handleError(response, showSnack); + if (response.status === 200) { + const data = await response.json(); + let managements = data.map((management) => ({ + value: management.id, + label: management.area, + })); + setManagements(managements); + } + } catch (error) { + if (getApiUrl().environment === 'development') { + console.error(error); + } + } + }; + + useEffect(() => { + getManagement(); + }, []); + + const handleSubmit = async (values, { resetForm }) => { + showProgressbar(); + + try { + const response = await fetch(`${getApiUrl().apiUrl}pqrs/pqrs/`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(values), + credentials: 'include', + }); await handleError(response, showSnack); + if (response.status === 201) { + showSnack('success', 'Mensaje enviado correctamente'); + resetForm(); + } } catch (error) { if (getApiUrl().environment === 'development') { console.error(error); } - setLoadingBar(false); + } finally { + hideProgressbar(false); } }; @@ -107,7 +129,7 @@ const Suggestions = () => { {type === 'select' && options.map((option) => ( - {option.value} + {option.label} ))} @@ -117,7 +139,7 @@ const Suggestions = () => { return ( Coexistence Committee { En esta sección puedes enviar un mensaje a las distintas - Gerencias de la Compañía, según tus intereses. Tienes la + Gerencias de la Compañía según tus intereses. Tienes la opción de expresar de manera respetuosa tus inconformidades, inconvenientes, sugerencias o felicitaciones, dirigiendo el mensaje a la Gerencia correspondiente. @@ -144,13 +166,26 @@ const Suggestions = () => { Ten en cuenta que el contenido de tu mensaje será confidencial y únicamente lo conocerán tú y el Gerente del área seleccionada. Te recomendamos redactar de forma clara, - con prudencia y buena ortografía, para asegurar que tu + con prudencia y buena ortografía para asegurar que tu mensaje sea fácilmente comprensible. + + + + Ten en cuenta que tus datos de contacto serán enviados a + la Gerencia correspondiente para que puedan responder a + tu mensaje. Si deseas mantener tu mensaje anónimo y + corresponde a una de las categorías del módulo de línea + ética, por favor haz tu solicitud por ese medio. + Recuerda que para acceder al módulo de línea ética + tienes que cerrar sesión e ingresar por el botón de + línea ética en el inicio de sesión de la intranet. + + @@ -164,15 +199,15 @@ const Suggestions = () => { > @@ -184,40 +219,20 @@ const Suggestions = () => { label="Deja tu mensaje aquí" autoComplete="off" /> - + - - {loadingBar && ( - - - - )} - - ); }; -export default Suggestions; +export default Pqrs; From 35a4160e91de5fc8bf2e9e29dc7d3dbdb3d721e9 Mon Sep 17 00:00:00 2001 From: sebas Date: Tue, 5 Nov 2024 17:54:53 -0500 Subject: [PATCH 14/17] Refactor Snackbar handling by removing SnackbarAlert component, introducing SnackbarContext and ProgressbarContext for improved state management, and updating the modules and components to utilize these new context. --- frontend/src/__test__/SnackBarAlert.test.jsx | 49 ------- .../src/__test__/SnackbarContext.test.jsx | 47 +++++++ frontend/src/components/common/NavBar.jsx | 132 +++++++----------- .../src/components/common/SnackBarAlert.jsx | 46 ------ .../components/context/ProgressbarContext.jsx | 41 ++++++ .../components/context/SnackbarContext.jsx | 41 ++++++ .../pages/EmploymentCertification.jsx | 25 +--- frontend/src/components/pages/EthicalLine.jsx | 36 +---- frontend/src/components/pages/Home.jsx | 63 ++++----- frontend/src/components/pages/Legal.jsx | 23 +-- frontend/src/components/pages/MyPayslips.jsx | 69 +++------ frontend/src/components/pages/Promotions.jsx | 24 +--- frontend/src/components/pages/Quality.jsx | 22 +-- frontend/src/components/pages/RiskEvents.jsx | 29 +--- frontend/src/components/pages/Sgc.jsx | 23 +-- frontend/src/components/pages/Vacancies.jsx | 21 +-- .../components/pages/VacanciesReferred.jsx | 23 +-- .../shared/AddImagesCarouselDialog.jsx | 97 ++++++------- .../src/components/shared/EmblaCarousel.jsx | 20 +-- frontend/src/components/shared/MyAccount.jsx | 126 ++++++++--------- 20 files changed, 369 insertions(+), 588 deletions(-) delete mode 100644 frontend/src/__test__/SnackBarAlert.test.jsx create mode 100644 frontend/src/__test__/SnackbarContext.test.jsx delete mode 100644 frontend/src/components/common/SnackBarAlert.jsx create mode 100644 frontend/src/components/context/ProgressbarContext.jsx create mode 100644 frontend/src/components/context/SnackbarContext.jsx diff --git a/frontend/src/__test__/SnackBarAlert.test.jsx b/frontend/src/__test__/SnackBarAlert.test.jsx deleted file mode 100644 index 2994b74..0000000 --- a/frontend/src/__test__/SnackBarAlert.test.jsx +++ /dev/null @@ -1,49 +0,0 @@ -import { render, screen, fireEvent } from '@testing-library/react'; -import SnackbarAlert from '../components/common/SnackBarAlert'; - -describe('SnackbarAlert Component', () => { - test('renders SnackbarAlert with message and severity', () => { - render( - {}} - /> - ); - expect(screen.getByText('Test Message')).toBeInTheDocument(); - expect(screen.getByRole('alert')).toHaveClass( - 'MuiAlert-standardSuccess' - ); - }); - - test('renders SnackbarAlert with action button', () => { - render( - {}} - action={true} - /> - ); - expect(screen.getByText('Test Message')).toBeInTheDocument(); - expect( - screen.getByRole('button', { name: /aceptar/i }) - ).toBeInTheDocument(); - }); - - test('calls closeSnack function when close button is clicked', () => { - const closeSnackMock = vi.fn(); - render( - - ); - fireEvent.click(screen.getByRole('button', { name: /close/i })); - expect(closeSnackMock).toHaveBeenCalledTimes(1); - }); -}); diff --git a/frontend/src/__test__/SnackbarContext.test.jsx b/frontend/src/__test__/SnackbarContext.test.jsx new file mode 100644 index 0000000..d9df3ec --- /dev/null +++ b/frontend/src/__test__/SnackbarContext.test.jsx @@ -0,0 +1,47 @@ +import React from 'react'; +import { render, screen, fireEvent, waitFor } from '@testing-library/react'; +import { + SnackbarProvider, + useSnackbar, +} from '../components/context/SnackbarContext'; +import '@testing-library/jest-dom'; + +// Test component to use the Snackbar context +const TestComponent = () => { + const { showSnack } = useSnackbar(); + + return ( + + ); +}; + +describe('SnackbarContext', () => { + it('should show and hide the snackbar with the correct message and severity', async () => { + render( + + + + ); + + // Click the button to show the snackbar + fireEvent.click(screen.getByText('Show Snackbar')); + + // Check if the snackbar is displayed with the correct message and severity + expect(await screen.findByText('Test message')).toBeInTheDocument(); + expect(screen.getByRole('alert')).toHaveClass( + 'MuiAlert-standardSuccess' + ); + + // Wait for the snackbar to auto-hide + await waitFor( + () => { + expect( + screen.queryByText('Test message') + ).not.toBeInTheDocument(); + }, + { timeout: 4000 } + ); + }); +}); diff --git a/frontend/src/components/common/NavBar.jsx b/frontend/src/components/common/NavBar.jsx index 6b4d89c..3e82fd0 100644 --- a/frontend/src/components/common/NavBar.jsx +++ b/frontend/src/components/common/NavBar.jsx @@ -3,13 +3,16 @@ import { useState, useEffect, useRef } from 'react'; // Libraries import { useNavigate, useMatch } from 'react-router-dom'; -// Custom Components +// Custom Hooks +import { useProgressbar } from '../context/ProgressbarContext'; // Adjust the path +import { useSnackbar } from '../context/SnackbarContext'; + +// Custom Components/Functions import Goals from '../shared/Goals'; -import SnackbarAlert from './SnackBarAlert'; -import { getApiUrl } from '../../assets/getApi'; import MyAccountDialog from '../shared/MyAccount'; import InactivityDetector from '../shared/InactivityDetector'; import Notifications from '../shared/Notifications'; +import { getApiUrl } from '../../assets/getApi'; import { handleError } from '../../assets/handleError'; // Material-UI @@ -24,8 +27,6 @@ import { Avatar, ListItemIcon, ListItemText, - LinearProgress, - Fade, Dialog, DialogTitle, DialogContent, @@ -41,6 +42,9 @@ import { Alert, } from '@mui/material'; +// MUI Lab +import { LoadingButton } from '@mui/lab'; + // Icons import Logout from '@mui/icons-material/Logout'; import FlagIcon from '@mui/icons-material/Flag'; @@ -58,29 +62,24 @@ import TopicIcon from '@mui/icons-material/Topic'; import NotificationsIcon from '@mui/icons-material/Notifications'; import BeachAccessIcon from '@mui/icons-material/BeachAccess'; import SportsScoreIcon from '@mui/icons-material/SportsScore'; -import TipsAndUpdatesIcon from '@mui/icons-material/TipsAndUpdates'; +import EmailIcon from '@mui/icons-material/Email'; import VolunteerActivismIcon from '@mui/icons-material/VolunteerActivism'; // Media import logotipo from '../../images/cyc-logos/logo-navbar.webp'; const Navbar = () => { - const [openCollapse, setOpenCollapse] = useState(false); const [openCollapseEmail, setOpenCollapseEmail] = useState(false); const [anchorEl, setAnchorEl] = useState(null); const [anchorElUtils, setAnchorElUtils] = useState(null); const open = Boolean(anchorEl); const navigate = useNavigate(); - const [severity, setSeverity] = useState('success'); - const [message, setMessage] = useState(); - const [openSnack, setOpenSnack] = useState(false); const openUtils = Boolean(anchorElUtils); const [openDialog, setOpenDialog] = useState(false); const [openAccountDialog, setOpenAccountDialog] = useState(false); const [openCertification, setOpenCertification] = useState(false); const [openCollapseBonuses, setOpenCollapseBonuses] = useState(false); const [checked, setChecked] = useState(false); - const [openPqrs, setOpenPqrs] = useState(false); const cargoItem = localStorage.getItem('cargo'); const isAdvisor = cargoItem && JSON.parse(cargoItem).includes('ASESOR'); const permissions = JSON.parse(localStorage.getItem('permissions')); @@ -92,6 +91,9 @@ const Navbar = () => { const operationalRiskPermission = permissions && permissions.includes('operational_risk.view_events'); const rank = JSON.parse(localStorage.getItem('rango')); + const { isProgressVisible, showProgressbar, hideProgressbar } = + useProgressbar(); + const { showSnack } = useSnackbar(); const servicesPermission = permissions && @@ -219,8 +221,6 @@ const Navbar = () => { getNotifications(); }, [openNotification]); - const handleCloseSnack = () => setOpenSnack(false); - const handleOpenCertification = () => setOpenCertification(true); const handleCloseCertification = () => { @@ -261,12 +261,6 @@ const Navbar = () => { setOpenCollapseEmail(!openCollapseEmail); }; - const showSnack = (severity, message) => { - setSeverity(severity); - setMessage(message); - setOpenSnack(true); - }; - const handleLogout = async (inactivity) => { try { const response = await fetch( @@ -302,7 +296,7 @@ const Navbar = () => { }; const sendCertification = async () => { - setOpenCollapse(true); + showProgressbar(); let body = {}; if (checked) { @@ -341,7 +335,7 @@ const Navbar = () => { console.error(error); } } finally { - setOpenCollapse(false); + hideProgressbar(); } }; @@ -359,12 +353,6 @@ const Navbar = () => { showSnack={showSnack} /> ) : null} - { - - + + + Enviar + - - - { ) : null} - {getApiUrl().environment === 'development' ? ( - navigate('/logged/points')}> - - - - - - ) : null} - {getApiUrl().environment === 'development' ? ( - navigate('/logged/pqrs')}> - - - - - - ) : null} - {getApiUrl().environment === 'development' ? ( - - navigate('/logged/coexistence-committee') - } - > - - - - - - ) : null} - - {getApiUrl().environment === 'development' ? ( - navigate('/logged/pqrs')} - > - - - - - - ) : null} - + navigate('/logged/points')}> + + + + + + navigate('/logged/pqrs')}> + + + + + + navigate('/logged/coexistence-committee')} + > + + + + + @@ -765,7 +730,8 @@ const Navbar = () => { ) : null} {permissions && (permissions.includes('users.upload_robinson_list') || - permissions.includes('goals.add_goals')) ? ( + permissions.includes('goals.add_goals') || + permissions.includes('users.upload_points')) ? ( navigate('/logged/upload-files')}> diff --git a/frontend/src/components/common/SnackBarAlert.jsx b/frontend/src/components/common/SnackBarAlert.jsx deleted file mode 100644 index 7ae0b43..0000000 --- a/frontend/src/components/common/SnackBarAlert.jsx +++ /dev/null @@ -1,46 +0,0 @@ -// Material-UI -import { Snackbar, Alert, Button } from '@mui/material'; - -const SnackbarAlert = ({ - message, - severity, - openSnack, - closeSnack, - action, -}) => { - if (!action) { - return ( - - - {message} - - - ); - } else { - return ( - - - Aceptar - - } - > - {message} - - - ); - } -}; - -export default SnackbarAlert; diff --git a/frontend/src/components/context/ProgressbarContext.jsx b/frontend/src/components/context/ProgressbarContext.jsx new file mode 100644 index 0000000..1df35d3 --- /dev/null +++ b/frontend/src/components/context/ProgressbarContext.jsx @@ -0,0 +1,41 @@ +import React, { createContext, useState, useContext } from 'react'; +import { Fade, LinearProgress } from '@mui/material'; + +// Create ProgressBar context +const ProgressbarContext = createContext(); + +// ProgressBarProvider component +export const ProgressbarProvider = ({ children }) => { + const [isProgressVisible, setIsProgressVisible] = useState(false); + + const showProgressbar = () => { + setIsProgressVisible(true); + }; + + const hideProgressbar = () => { + setIsProgressVisible(false); + }; + + return ( + + {children} + + + + + ); +}; + +// Custom hook to use the ProgressBar context +export const useProgressbar = () => useContext(ProgressbarContext); diff --git a/frontend/src/components/context/SnackbarContext.jsx b/frontend/src/components/context/SnackbarContext.jsx new file mode 100644 index 0000000..4894c11 --- /dev/null +++ b/frontend/src/components/context/SnackbarContext.jsx @@ -0,0 +1,41 @@ +import React, { createContext, useContext, useState } from 'react'; +import { Snackbar, Alert } from '@mui/material'; + +// Create the context +const SnackbarContext = createContext(); + +// Snackbar Provider component +export const SnackbarProvider = ({ children }) => { + const [openSnack, setOpenSnack] = useState(false); + const [message, setMessage] = useState(''); + const [severity, setSeverity] = useState('success'); + + const showSnack = (severity, message) => { + setMessage(message); + setSeverity(severity); + setOpenSnack(true); + }; + + const closeSnack = () => { + setOpenSnack(false); + }; + + return ( + + {children} + + + {message} + + + + ); +}; + +// Custom hook to use the Snackbar context +export const useSnackbar = () => useContext(SnackbarContext); diff --git a/frontend/src/components/pages/EmploymentCertification.jsx b/frontend/src/components/pages/EmploymentCertification.jsx index 42a4ebe..2fd4a6c 100644 --- a/frontend/src/components/pages/EmploymentCertification.jsx +++ b/frontend/src/components/pages/EmploymentCertification.jsx @@ -4,7 +4,6 @@ import { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; // Custom Components -import SnackbarAlert from '../common/SnackBarAlert'; import { getApiUrl } from '../../assets/getApi'; import { handleError } from '../../assets/handleError'; import { @@ -16,12 +15,15 @@ import { import { Container, Typography, Box } from '@mui/material'; import { DataGrid, GridToolbar } from '@mui/x-data-grid'; +// Custom hooks +import { useSnackbar } from '../context/SnackbarContext'; + export const EmploymentCertification = () => { const [rows, setRows] = useState([]); - const [severity, setSeverity] = useState('success'); - const [message, setMessage] = useState(); - const [openSnack, setOpenSnack] = useState(false); + const [loading, setLoading] = useState(false); + const { showSnack } = useSnackbar(); + const navigate = useNavigate(); const permissions = JSON.parse(localStorage.getItem('permissions')); @@ -67,14 +69,6 @@ export const EmploymentCertification = () => { getEmploymentCertifications(); }, []); - const showSnack = (severity, message) => { - setSeverity(severity); - setMessage(message); - setOpenSnack(true); - }; - - const handleCloseSnack = () => setOpenSnack(false); - const columns = [ { field: 'cedula', headerName: 'Cedula', width: 100 }, { field: 'position', headerName: 'Cargo', width: 360, editable: false }, @@ -186,13 +180,6 @@ export const EmploymentCertification = () => { > - - ); }; diff --git a/frontend/src/components/pages/EthicalLine.jsx b/frontend/src/components/pages/EthicalLine.jsx index ed95119..3149c85 100644 --- a/frontend/src/components/pages/EthicalLine.jsx +++ b/frontend/src/components/pages/EthicalLine.jsx @@ -5,8 +5,10 @@ import { Formik, Form, useField, Field } from 'formik'; import { useNavigate } from 'react-router-dom'; import * as Yup from 'yup'; +// Custom Hooks +import { useSnackbar } from '../context/SnackbarContext'; + // Custom Components -import SnackbarAlert from '../common/SnackBarAlert'; import { getApiUrl } from '../../assets/getApi'; import { handleError } from '../../assets/handleError'; @@ -22,7 +24,6 @@ import { TextField, MenuItem, Button, - LinearProgress, Collapse, Radio, RadioGroup, @@ -81,11 +82,9 @@ const baseInitialValues = { const EthicalLine = () => { const [loadingBar, setLoadingBar] = useState(false); - const [openSnack, setOpenSnack] = useState(false); - const [severity, setSeverity] = useState('success'); - const [message, setMessage] = useState(); const [collapse, setCollapse] = useState(false); const navigate = useNavigate(); + const { showSnack } = useSnackbar(); const FormikError = ({ name }) => { const [meta] = useField(name); @@ -95,14 +94,6 @@ const EthicalLine = () => { ) : null; }; - const handleCloseSnack = () => setOpenSnack(false); - - const showSnack = (severity, message) => { - setSeverity(severity); - setMessage(message); - setOpenSnack(true); - }; - const handleSubmit = async (values) => { let { contact, ...rest } = values; @@ -418,25 +409,6 @@ const EthicalLine = () => { )} - {loadingBar && ( - - - - )} - ); diff --git a/frontend/src/components/pages/Home.jsx b/frontend/src/components/pages/Home.jsx index a35ef68..d7cf669 100644 --- a/frontend/src/components/pages/Home.jsx +++ b/frontend/src/components/pages/Home.jsx @@ -3,10 +3,12 @@ import React, { useEffect, useState } from 'react'; // Custom Components import { getApiUrl } from '../../assets/getApi.js'; import CarouselComponent from '../shared/Carousel'; -import SnackbarAlert from '../common/SnackBarAlert'; import { handleError } from '../../assets/handleError'; import { EmblaCarousel } from '../shared/EmblaCarousel.jsx'; +// Custom Hooks +import { useSnackbar } from '../context/SnackbarContext'; + // Material-UI import { Typography, Box, Container, useMediaQuery, Card } from '@mui/material'; @@ -19,51 +21,41 @@ import AvatarImage from '../../images/home-carousel/avatar.jpg'; import securityPractices from '../../images/home-carousel/security-practices.png'; import differentiationMatrices from '../../images/home-carousel/differentiation-matrices.png'; import points from '../../images/home-carousel/points.png'; -import water from '../../images/home-carousel/water.png'; import socialMedia from '../../images/home-carousel/social-media.png'; import mapProcess from '../../images/home-carousel/process-map.png'; -import electricityCampaign from '../../images/home-carousel/electricity-campaign.png'; -import passwords from '../../images/home-carousel/password.png'; -import valentine from '../../images/home-carousel/valentine.png'; -import valentine2 from '../../images/home-carousel/valentine-2.png'; -import valentine3 from '../../images/home-carousel/valentine-3.png'; -import halloween from '../../images/home-carousel/halloween-2.png'; +import harassmentPrevention from '../../images/home-carousel/harassment-prevention.png'; +import harassmentPrevention2 from '../../images/home-carousel/harassment-prevention-2.png'; +import harassmentPrevention3 from '../../images/home-carousel/harassment-prevention-3.png'; +import compensationFund from '../../images/home-carousel/compensation-fund.png'; +import clothSize from '../../images/home-carousel/cloth-size.png'; +import halloween from '../../images/home-carousel/halloween.png'; +import noViolenceWomen from '../../images/home-carousel/no-violence-women.png'; const benefits = [{ image: realBenefit2, title: 'Beneficio 2' }]; const homeImages = [ + { image: noViolenceWomen }, { image: halloween }, - { image: valentine }, - { image: valentine2 }, - { image: valentine3 }, - { image: passwords }, - { image: electricityCampaign }, - { image: mapProcess }, + { image: compensationFund }, + { image: clothSize }, { image: points }, - { image: water }, + { image: mapProcess }, + { image: harassmentPrevention }, + { image: harassmentPrevention2 }, + { image: harassmentPrevention3 }, + { image: securityPractices }, { image: socialMedia }, { image: differentiationMatrices }, - { image: securityPractices }, { image: ceroDiscrimination }, ]; const Home = () => { - const [openSnack, setOpenSnack] = useState(false); - const [message, setMessage] = useState(''); - const [severity, setSeverity] = useState('success'); const [todayBirthdays, setTodayBirthdays] = useState([]); const [yesterdayBirthdays, setYesterdayBirthdays] = useState([]); const [tomorrowBirthdays, setTomorrowBirthdays] = useState([]); + const { showSnack } = useSnackbar(); const matches = useMediaQuery('(min-width:1025px)'); - const handleCloseSnack = () => setOpenSnack(false); - - const showSnack = (severity, message) => { - setSeverity(severity); - setMessage(message); - setOpenSnack(true); - }; - const fetchImages = async (employees) => { const imagePromises = employees.map(async (employee) => { try { @@ -155,12 +147,12 @@ const Home = () => { return ( <> - {/* @@ -170,8 +162,8 @@ const Home = () => { height={matches ? '648px' : '480px'} width={matches ? '1152px' : '854px'} /> - */} - + {/* { }} > - + */} { /> - - ); }; diff --git a/frontend/src/components/pages/Legal.jsx b/frontend/src/components/pages/Legal.jsx index 865ebde..52df354 100644 --- a/frontend/src/components/pages/Legal.jsx +++ b/frontend/src/components/pages/Legal.jsx @@ -4,8 +4,10 @@ import * as Yup from 'yup'; import { Formik, Form, useField } from 'formik'; import { useNavigate } from 'react-router-dom'; +// Custom Hooks +import { useSnackbar } from '../context/SnackbarContext'; + // Custom Components -import SnackbarAlert from '../common/SnackBarAlert'; import { getApiUrl } from '../../assets/getApi'; import { handleError } from '../../assets/handleError'; import { @@ -388,11 +390,9 @@ export const Legal = () => { }; const [rows, setRows] = useState([]); - const [severity, setSeverity] = useState('success'); - const [message, setMessage] = useState(); const [details, setDetails] = useState({}); - const [openSnack, setOpenSnack] = useState(false); const [openDialog, setOpenDialog] = useState(false); + const { showSnack } = useSnackbar(); const [openDialogEdit, setOpenDialogEdit] = useState(false); const [disabled, setDisabled] = useState(false); const [inputs, setInputs] = useState(initialInputs); @@ -483,14 +483,6 @@ export const Legal = () => { setDisabled(!disabled); }; - const showSnack = (severity, message) => { - setSeverity(severity); - setMessage(message); - setOpenSnack(true); - }; - - const handleCloseSnack = () => setOpenSnack(false); - const handleDeleteClick = async (id) => { try { const response = await fetch( @@ -772,12 +764,7 @@ export const Legal = () => { > - + { const [rows, setRows] = useState([]); - const [severity, setSeverity] = useState('success'); - const [message, setMessage] = useState(); - const [openSnack, setOpenSnack] = useState(false); + const { showSnack } = useSnackbar(); const [openDialog, setOpenDialog] = useState(false); const [openCollapse, setOpenCollapse] = useState(false); const [paySlipId, setPaySlipId] = useState(null); - const [disabled, setDisabled] = useState(false); - const [loading, setLoading] = useState(false); const [loadingRows, setLoadingRows] = useState(false); const currentEmail = JSON.parse(localStorage.getItem('email')); const permissions = JSON.parse(localStorage.getItem('permissions')); const cedula = JSON.parse(localStorage.getItem('cedula')); + const { isProgressVisible, showProgressbar, hideProgressbar } = + useProgressbar(); useEffect(() => { window.scrollTo(0, 0); @@ -85,12 +89,6 @@ export const MyPayslips = () => { getPayslips(); }, []); - const showSnack = (severity, message) => { - setSeverity(severity); - setMessage(message); - setOpenSnack(true); - }; - const handleCollapse = () => { setOpenCollapse(!openCollapse); }; @@ -100,8 +98,6 @@ export const MyPayslips = () => { setOpenDialog(true); }; - const handleCloseSnack = () => setOpenSnack(false); - const handleCloseDialog = () => { setOpenDialog(false); setOpenCollapse(false); @@ -109,8 +105,7 @@ export const MyPayslips = () => { }; const handleResend = async () => { - setDisabled(true); - setLoading(true); + showProgressbar(); try { const response = await fetch( @@ -126,17 +121,15 @@ export const MyPayslips = () => { if (response.status === 201) { showSnack('success', 'Desprendible reenviado correctamente'); setPaySlipId(null); - setDisabled(false); setOpenDialog(false); setOpenCollapse(false); - setLoading(false); } } catch (error) { if (getApiUrl().environment === 'development') { console.error(error); } - setDisabled(false); - setLoading(false); + } finally { + hideProgressbar(); } }; @@ -218,17 +211,6 @@ export const MyPayslips = () => { return ( <> - - - { - + - - { + const { showSnack } = useSnackbar(); const [yesterdayBirthdays, setYesterdayBirthdays] = useState([]); const [todayBirthdays, setTodayBirthdays] = useState([]); const [tomorrowBirthdays, setTomorrowBirthdays] = useState([]); - const [openSnack, setOpenSnack] = useState(false); - const [message, setMessage] = useState(''); - const [severity, setSeverity] = useState('success'); - - const handleCloseSnack = () => { - setOpenSnack(false); - }; - - const showSnack = (severity, message) => { - setSeverity(severity); - setMessage(message); - setOpenSnack(true); - }; const fetchImages = async (employees) => { const imagePromises = employees.map(async (employee) => { @@ -169,12 +159,6 @@ const Promotions = () => { width={'100%'} /> - ); diff --git a/frontend/src/components/pages/Quality.jsx b/frontend/src/components/pages/Quality.jsx index 96cb89c..9c0c564 100644 --- a/frontend/src/components/pages/Quality.jsx +++ b/frontend/src/components/pages/Quality.jsx @@ -3,8 +3,10 @@ import { useState, useEffect, useRef } from 'react'; // Libraries import { useNavigate } from 'react-router-dom'; +// Custom Hooks +import { useSnackbar } from '../context/SnackbarContext'; + // Custom Components -import SnackbarAlert from '../common/SnackBarAlert'; import { getApiUrl } from '../../assets/getApi'; import { handleError } from '../../assets/handleError'; @@ -69,9 +71,7 @@ const Quality = () => { const [openCollapse, setOpenCollapse] = useState(true); const [fileName, setFileName] = useState(''); const [loading, setLoading] = useState(false); - const [severity, setSeverity] = useState('success'); - const [message, setMessage] = useState(); - const [openSnack, setOpenSnack] = useState(false); + const { showSnack } = useSnackbar(); const [selectedCampaign, setSelectedCampaign] = useState(campaigns[0]); // Set default campaign const callType = useRef(); const navigate = useNavigate(); @@ -96,12 +96,6 @@ const Quality = () => { } }; - const showSnack = (severity, message) => { - setSeverity(severity); - setMessage(message); - setOpenSnack(true); - }; - const handleCampaignChange = (event) => { const selectedCampaignValue = event.target.value; const campaign = campaigns.find( @@ -110,8 +104,6 @@ const Quality = () => { setSelectedCampaign(campaign); }; - const handleCloseSnack = () => setOpenSnack(false); - const handleUpload = async () => { setLoading(true); if (selectedFile) { @@ -314,12 +306,6 @@ const Quality = () => { ) : null} - ); diff --git a/frontend/src/components/pages/RiskEvents.jsx b/frontend/src/components/pages/RiskEvents.jsx index 4f48571..ce0059b 100644 --- a/frontend/src/components/pages/RiskEvents.jsx +++ b/frontend/src/components/pages/RiskEvents.jsx @@ -5,9 +5,11 @@ import { useNavigate } from 'react-router-dom'; import { Formik, Form, useField } from 'formik'; import * as Yup from 'yup'; +// Custom Hooks +import { useSnackbar } from '../context/SnackbarContext'; + // Custom components import { getApiUrl } from '../../assets/getApi'; -import SnackbarAlert from '../common/SnackBarAlert'; import { handleError } from '../../assets/handleError'; import { CustomNoResultsOverlay, @@ -69,11 +71,9 @@ const validationSchema = Yup.object().shape({ }); export const RiskEvent = () => { + const { showSnack } = useSnackbar(); const [rows, setRows] = useState([]); - const [severity, setSeverity] = useState('success'); - const [message, setMessage] = useState(); const [details, setDetails] = useState({}); - const [openSnack, setOpenSnack] = useState(false); const [openDialog, setOpenDialog] = useState(false); const [openDialogEdit, setOpenDialogEdit] = useState(false); const [disabled, setDisabled] = useState(false); @@ -177,14 +177,6 @@ export const RiskEvent = () => { setDisabled(!disabled); }; - const showSnack = (severity, message) => { - setSeverity(severity); - setMessage(message); - setOpenSnack(true); - }; - - const handleCloseSnack = () => setOpenSnack(false); - const handleDeleteClick = async (id) => { try { const response = await fetch( @@ -501,7 +493,6 @@ export const RiskEvent = () => { }, { field: 'event_title', - type: 'text', headerName: 'Evento', width: 100, editable: false, @@ -557,7 +548,6 @@ export const RiskEvent = () => { }, { field: 'description', - type: 'text', headerName: 'Descripción del Evento', width: 100, editable: false, @@ -634,7 +624,6 @@ export const RiskEvent = () => { }, { field: 'reported_by', - type: '', headerName: 'Reportado Por', width: 100, editable: false, @@ -673,21 +662,18 @@ export const RiskEvent = () => { }, { field: 'public_accounts_affected', - type: 'text', headerName: 'Cuentas PUC Afectadas', width: 100, editable: false, }, { field: 'plan', - type: '', headerName: 'Plan', width: 100, editable: false, }, { field: 'learning', - type: '', headerName: 'Aprendizaje', width: 100, editable: false, @@ -787,12 +773,7 @@ export const RiskEvent = () => { > - + { const hiddenFileInput = useRef(null); const [rowModesModel, setRowModesModel] = useState({}); const [rows, setRows] = useState([]); - const [severity, setSeverity] = useState('success'); - const [message, setMessage] = useState(); - const [openSnack, setOpenSnack] = useState(false); + const { showSnack } = useSnackbar(); const [openDialog, setOpenDialog] = useState(false); const [selectedFile, setSelectedFile] = useState(null); const [selectedFileUpdate, setSelectedFileUpdate] = useState(null); @@ -174,14 +174,6 @@ export const Sgc = () => { }; const handleOpenDialog = () => setOpenDialog(true); - const showSnack = (severity, message) => { - setSeverity(severity); - setMessage(message); - setOpenSnack(true); - }; - - const handleCloseSnack = () => setOpenSnack(false); - const handleEditClick = (id) => () => { setRowModesModel({ ...rowModesModel, @@ -652,12 +644,7 @@ export const Sgc = () => { > - + { const [openVacancy, setOpenVacancy] = useState(false); - const [openSnack, setOpenSnack] = useState(false); - const [message, setMessage] = useState(''); - const [severity, setSeverity] = useState('success'); + const { showSnack } = useSnackbar(); const [vacancyId, setVacancyId] = useState(); const [openCollapse, setOpenCollapse] = useState(false); const [openAddVacancy, setOpenAddVacancy] = useState(false); @@ -162,12 +162,6 @@ const Vacancies = () => { } }; - const showSnack = (severity, message) => { - setSeverity(severity); - setMessage(message); - setOpenSnack(true); - }; - const handleCloseVacancy = () => { setOpenVacancy(false); setOpenCollapse(false); @@ -226,7 +220,6 @@ const Vacancies = () => { const handleOpenAddVacancy = () => setOpenAddVacancy(true); - const handleCloseSnack = () => setOpenSnack(false); const handleOpenCollapse = () => { setOpenCollapse(true); setVacancyDescription( @@ -518,12 +511,6 @@ const Vacancies = () => { - ); }; diff --git a/frontend/src/components/pages/VacanciesReferred.jsx b/frontend/src/components/pages/VacanciesReferred.jsx index cb51565..cfe0d7d 100644 --- a/frontend/src/components/pages/VacanciesReferred.jsx +++ b/frontend/src/components/pages/VacanciesReferred.jsx @@ -3,8 +3,10 @@ import { useState, useEffect } from 'react'; // Libraries import { useNavigate } from 'react-router-dom'; +// Custom Hooks +import { useSnackbar } from '../context/SnackbarContext'; + // Custom Components -import SnackbarAlert from '../common/SnackBarAlert'; import { getApiUrl } from '../../assets/getApi'; import { handleError } from '../../assets/handleError'; import { @@ -26,9 +28,7 @@ import { export const VacanciesReferred = () => { const [rows, setRows] = useState([]); - const [severity, setSeverity] = useState('success'); - const [message, setMessage] = useState(); - const [openSnack, setOpenSnack] = useState(false); + const { showSnack } = useSnackbar(); const [loading, setLoading] = useState(false); const navigate = useNavigate(); const permissions = JSON.parse(localStorage.getItem('permissions')); @@ -70,14 +70,6 @@ export const VacanciesReferred = () => { getVacanciesReferred(); }, []); - const showSnack = (severity, message) => { - setSeverity(severity); - setMessage(message); - setOpenSnack(true); - }; - - const handleCloseSnack = () => setOpenSnack(false); - const CustomToolbar = () => { return ( @@ -168,13 +160,6 @@ export const VacanciesReferred = () => { > - - ); }; diff --git a/frontend/src/components/shared/AddImagesCarouselDialog.jsx b/frontend/src/components/shared/AddImagesCarouselDialog.jsx index bf5d822..2076725 100644 --- a/frontend/src/components/shared/AddImagesCarouselDialog.jsx +++ b/frontend/src/components/shared/AddImagesCarouselDialog.jsx @@ -19,18 +19,22 @@ import { MenuItem, Box, DialogContentText, - LinearProgress, - Fade, FormGroup, FormControlLabel, Checkbox, Collapse, } from '@mui/material'; +// MUI Lab +import { LoadingButton } from '@mui/lab'; + +// Custom Hooks +import { useSnackbar } from '../context/SnackbarContext'; +import { useProgressbar } from '../context/ProgressbarContext'; + // Custom components and assets import { getApiUrl } from '../../assets/getApi'; import { handleError } from '../../assets/handleError'; -import SnackbarAlert from '../common/SnackBarAlert'; registerPlugin( FilePondPluginImageExifOrientation, @@ -46,26 +50,35 @@ const AddImagesCarouselDialog = ({ setImages, }) => { const [image, setImage] = useState([]); - const [openSnack, setOpenSnack] = useState(false); - const [message, setMessage] = useState(''); - const [severity, setSeverity] = useState('success'); - const [loadingBar, setLoadingBar] = useState(false); + const { showSnack } = useSnackbar(); const [openCollapse, setOpenCollapse] = useState(false); + const { isProgressVisible, showProgressbar, hideProgressbar } = + useProgressbar(); - const handleCloseSnack = () => { - setOpenSnack(false); + const handleSubmit = async (event) => { + event.preventDefault(); + showProgressbar(); + const position = event.target.position?.value || ''; + const link = openCollapse ? event.target.link.value : ''; + if (!validateFormData(image)) return; + + const formData = createFormData(image, position, link); + await sendApiRequest(formData); }; - const showSnack = (severity, message) => { - setMessage(message); - setSeverity(severity); - setOpenSnack(true); + const validateFormData = (image) => { + if (image.length === 0) { + showSnack('error', 'Debes añadir una imagen'); + hideProgressbar(); + return false; + } + return true; }; const createFormData = (image, position, link) => { const formData = new FormData(); formData.append('image', image[0]); - formData.append('title', image[0].name); + formData.append('title', image[0]?.name); formData.append('order', position); if (link) { @@ -74,25 +87,13 @@ const AddImagesCarouselDialog = ({ return formData; }; - const validateFormData = (image) => { - if (image.length === 0) { - showSnack('error', 'Debes añadir una imagen'); - setLoadingBar(false); - return false; - } - return true; - }; - const sendApiRequest = async (formData) => { try { - const response = await fetch( - `${getApiUrl().apiUrl}carousel-images/banners/`, - { - method: 'POST', - credentials: 'include', - body: formData, - } - ); + const response = await fetch('http://localhost/', { + method: 'POST', + credentials: 'include', + body: formData, + }); await handleError(response, showSnack); @@ -106,36 +107,17 @@ const AddImagesCarouselDialog = ({ } } finally { setOpenAddDialog(false); - setLoadingBar(false); + hideProgressbar(); } }; - const handleSubmit = async (event) => { - event.preventDefault(); - console.log(event.target.position); - const position = event.target.position.value; - const link = openCollapse ? event.target.link.value : ''; - if (!validateFormData(image)) return; - - const formData = createFormData(image, position, link); - await sendApiRequest(formData); - }; - return ( - - - - setOpenAddDialog(false)} @@ -180,7 +162,6 @@ const AddImagesCarouselDialog = ({ id="position" name="position" select - required label="Posición" variant="outlined" defaultValue={1} @@ -196,6 +177,7 @@ const AddImagesCarouselDialog = ({ - + diff --git a/frontend/src/components/shared/EmblaCarousel.jsx b/frontend/src/components/shared/EmblaCarousel.jsx index 8fdbc27..2bb504a 100644 --- a/frontend/src/components/shared/EmblaCarousel.jsx +++ b/frontend/src/components/shared/EmblaCarousel.jsx @@ -4,11 +4,13 @@ import Autoplay from 'embla-carousel-autoplay'; import { useState, useEffect } from 'react'; import { DotButton, useDotButton } from './EmblaCarouselDotButton'; +// Custom Hooks +import { useSnackbar } from '../context/SnackbarContext'; + // Custom Functions and Components import { getApiUrl } from '../../assets/getApi'; import { handleError } from '../../assets/handleError'; import AddImagesCarouselDialog from './AddImagesCarouselDialog'; -import SnackbarAlert from '../common/SnackBarAlert'; // Icons import DeleteForeverIcon from '@mui/icons-material/DeleteForever'; @@ -83,23 +85,15 @@ const IconButtonsStyle = { }; export function EmblaCarousel() { + const { showSnack } = useSnackbar(); const [images, setImages] = useState([]); const [openAddDialog, setOpenAddDialog] = useState(false); - const [severity, setSeverity] = useState('success'); - const [message, setMessage] = useState(''); - const [openSnack, setOpenSnack] = useState(false); const permissions = JSON.parse(localStorage.getItem('permissions')); useEffect(() => { getCarouselImages(setImages); }, []); - const showSnack = (severity, message) => { - setMessage(message); - setSeverity(severity); - setOpenSnack(true); - }; - const [emblaRef, emblaApi] = useEmblaCarousel({ loop: true }, [ Autoplay({ delay: 4000, stopOnInteraction: false }), ]); @@ -109,12 +103,6 @@ export function EmblaCarousel() { return ( - setOpenSnack(false)} - > { - const [openSnack, setOpenSnack] = useState(false); - const [message, setMessage] = useState(''); - const [severity, setSeverity] = useState('success'); + const { showSnack } = useSnackbar(); const [initialValues, setInitialValues] = useState({}); - const [loadingBar, setLoadingBar] = useState(false); - - const handleCloseSnack = () => { - setOpenSnack(false); - }; - - const showSnack = (severity, message) => { - setMessage(message); - setSeverity(severity); - setOpenSnack(true); - }; + const { isProgressVisible, showProgressbar, hideProgressbar } = + useProgressbar(); const getInitialValues = async () => { try { @@ -199,7 +192,7 @@ const MyAccountDialog = ({ open, onClose }) => { }; const handleSave = async (values) => { - setLoadingBar(true); + showProgressbar(); try { const response = await fetch( `${getApiUrl().apiUrl}users/update-profile/`, @@ -225,59 +218,56 @@ const MyAccountDialog = ({ open, onClose }) => { console.error(error); } } finally { - setLoadingBar(false); + hideProgressbar(); } }; return ( - <> - - - - - - -
    - - Tu Cuenta - - Completa y actualiza tu información personal - - - - - - - - - -
    -
    -
    - + + +
    + + Tu Cuenta + + Completa y actualiza tu información personal + + + + + + + + + Actualizar + + +
    +
    +
    ); }; From ef31126762409b46dda0010f224edb833fded586 Mon Sep 17 00:00:00 2001 From: sebas Date: Tue, 5 Nov 2024 17:55:35 -0500 Subject: [PATCH 15/17] Add tests for CoexistenceCommittee component and enhance AddImagesCarouselDialog tests --- .../__test__/AddImagesCarouselDialog.test.jsx | 18 ++- .../__test__/CoexistenceCommittee.test.jsx | 150 ++++++++++++++++++ 2 files changed, 161 insertions(+), 7 deletions(-) create mode 100644 frontend/src/__test__/CoexistenceCommittee.test.jsx diff --git a/frontend/src/__test__/AddImagesCarouselDialog.test.jsx b/frontend/src/__test__/AddImagesCarouselDialog.test.jsx index dc18bfe..ea6290c 100644 --- a/frontend/src/__test__/AddImagesCarouselDialog.test.jsx +++ b/frontend/src/__test__/AddImagesCarouselDialog.test.jsx @@ -21,6 +21,7 @@ vi.mock('react-filepond', () => { registerPlugin: vi.fn(), }; }); +vi.spyOn(console, 'warn'); describe('AddImagesCarouselDialog Component', () => { const mockSetOpenAddDialog = vi.fn(); @@ -61,28 +62,31 @@ describe('AddImagesCarouselDialog Component', () => { render(); // Simulate opening the dropdown (for "position" field) - const positionInput = screen.getByLabelText(/Posición/i); + const positionInput = screen.getByDisplayValue('1'); + const positionBox = screen.getByLabelText(/Posición/i); - fireEvent.mouseDown(positionInput); // Open the dropdown + // console.log(positionInput); + + fireEvent.mouseDown(positionBox); // Open the dropdown // Find the dropdown list within the document - const listbox = within(screen.getByRole('listbox')); + const listbox = within(screen.getByRole('listbox', { hidden: true })); // Select the first option (e.g., value "1") const firstOption = listbox.getByText('1'); fireEvent.click(firstOption); + // Now, simulate a change event to ensure the value is set + fireEvent.change(positionInput, { target: { value: '1' } }); + // Now, add the file using the mocked FilePond input const fileInput = screen.getByTestId('filepond-input'); const file = new File(['dummy content'], 'example.png', { type: 'image/png', }); - fireEvent.change(fileInput, { target: { files: [file] } }); - // Add a console log to inspect the form elements - const form = screen.getByRole('form'); - console.log(form); + fireEvent.change(fileInput, { target: { files: [file] } }); // Submit the form const submitButton = screen.getByText('Actualizar'); diff --git a/frontend/src/__test__/CoexistenceCommittee.test.jsx b/frontend/src/__test__/CoexistenceCommittee.test.jsx new file mode 100644 index 0000000..43301fd --- /dev/null +++ b/frontend/src/__test__/CoexistenceCommittee.test.jsx @@ -0,0 +1,150 @@ +import { render, screen, fireEvent, waitFor } from '@testing-library/react'; +import { describe, it, expect, vi } from 'vitest'; +import CoexistenceCommittee from '../components/pages/CoexistenceCommittee'; +import { SnackbarProvider } from '../components/context/SnackbarContext'; +import { ProgressbarProvider } from '../components/context/ProgressbarContext'; + +// Mock the fetch function and the custom hooks +global.fetch = vi.fn(() => + Promise.resolve({ + status: 201, + json: () => Promise.resolve({}), + }) +); + +const mockShowSnack = vi.fn(); +const mockShowProgressbar = vi.fn(); +const mockHideProgressbar = vi.fn(); + +vi.mock('../components/context/SnackbarContext', () => ({ + useSnackbar: () => ({ showSnack: mockShowSnack }), +})); + +vi.mock('../components/context/ProgressbarContext', () => ({ + useProgressbar: () => ({ + isProgressVisible: false, + showProgressbar: mockShowProgressbar, + hideProgressbar: mockHideProgressbar, + }), +})); + +describe('CoexistenceCommittee component', () => { + it('renders the form correctly', () => { + render( + + + + + + ); + + // Check if the form fields are rendered + expect(screen.getByLabelText('Motivo')).toBeInTheDocument(); + expect( + screen.getByLabelText('Deja tu mensaje aquí') + ).toBeInTheDocument(); + expect( + screen.getByRole('button', { name: /Enviar/i }) + ).toBeInTheDocument(); + }); + + it('displays validation errors when fields are empty', async () => { + render( + + + + + + ); + + const submitButton = screen.getByRole('button', { name: /Enviar/i }); + + // Click submit without filling the form + fireEvent.click(submitButton); + + // Wait for validation errors to appear + await waitFor(() => { + const errors = screen.getAllByText('Campo requerido'); + expect(errors).toHaveLength(2); + }); + }); + + it('submits the form correctly when fields are filled', async () => { + render( + + + + + + ); + + const [motivoInput] = screen.getAllByRole('textbox'); + // Fill out the form + fireEvent.change(motivoInput, { + target: { value: 'Acoso laboral' }, + }); + fireEvent.change(screen.getByLabelText('Deja tu mensaje aquí'), { + target: { value: 'Test description' }, + }); + + const submitButton = screen.getByRole('button', { name: /Enviar/i }); + + // Submit the form + fireEvent.click(submitButton); + + // Wait for form submission and expect a success message + await waitFor(() => { + expect(mockShowSnack).toHaveBeenCalledWith( + 'success', + 'Mensaje enviado correctamente' + ); + }); + + expect(mockShowProgressbar).toHaveBeenCalled(); + expect(mockHideProgressbar).toHaveBeenCalled(); + }); + + it('handles submission error correctly', async () => { + // Mock fetch to return an error response + global.fetch = vi.fn(() => + Promise.resolve({ + status: 400, + json: () => Promise.resolve({ message: 'Error message' }), + }) + ); + + render( + + + + + + ); + + const [motivoInput] = screen.getAllByRole('textbox'); + // Fill out the form + fireEvent.change(motivoInput, { + target: { value: 'Acoso laboral' }, + }); + + fireEvent.change(screen.getByLabelText('Deja tu mensaje aquí'), { + target: { value: 'Test description' }, + }); + + const submitButton = screen.getByRole('button', { name: /Enviar/i }); + + // Submit the form + fireEvent.click(submitButton); + + // Wait for error handling + await waitFor(() => { + expect(mockShowSnack).toHaveBeenCalledWith( + 'error', + 'Error message' + ); + }); + + expect(mockShowProgressbar).toHaveBeenCalled(); + expect(mockHideProgressbar).toHaveBeenCalled(); + }); +}); From d8802d29c75a0cb251e760fd535836b1f89db1e2 Mon Sep 17 00:00:00 2001 From: sebas Date: Wed, 6 Nov 2024 17:45:50 -0500 Subject: [PATCH 16/17] Refactor components to remove unused imports, enhance code readability, and update dependencies in package.json --- frontend/package.json | 8 +- frontend/pnpm-lock.yaml | 252 +++++++++--------- frontend/src/components/pages/Assistance.jsx | 52 ++-- .../components/pages/CoexistenceCommittee.jsx | 2 +- frontend/src/components/pages/GoalsStats.jsx | 64 ----- frontend/src/components/pages/Home.jsx | 2 +- frontend/src/components/pages/Login.jsx | 2 +- .../src/components/pages/PayslipsPreview.jsx | 2 +- frontend/src/components/pages/Points.jsx | 3 - frontend/src/components/pages/RiskEvents.jsx | 8 +- frontend/src/components/pages/Vacations.jsx | 62 ++--- .../src/components/shared/SwiperSlider.jsx | 2 - .../components/shared/VacationsRequest.jsx | 2 +- 13 files changed, 187 insertions(+), 274 deletions(-) diff --git a/frontend/package.json b/frontend/package.json index 40b49ca..ab7e65c 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -14,9 +14,9 @@ "dependencies": { "@emotion/react": "^11.13.3", "@emotion/styled": "^11.13.0", - "@mui/icons-material": "^5.16.7", - "@mui/lab": "5.0.0-alpha.173", - "@mui/material": "^5.16.7", + "@mui/icons-material": "^6.1.6", + "@mui/lab": "6.0.0-beta.14", + "@mui/material": "^6.1.6", "@mui/x-data-grid": "^7.22.1", "@sentry/react": "^8.37.1", "@sentry/vite-plugin": "^2.22.6", @@ -55,7 +55,7 @@ "@vitejs/plugin-react": "^4.3.3", "@vitest/ui": "^2.1.4", "jsdom": "^25.0.1", - "oxlint": "^0.9.10", + "oxlint": "^0.11.0", "prettier": "^3.3.3", "rollup-plugin-visualizer": "^5.12.0", "vite": "^5.4.10", diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 9a714c2..5c4cb10 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -15,17 +15,17 @@ importers: specifier: ^11.13.0 version: 11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) '@mui/icons-material': - specifier: ^5.16.7 - version: 5.16.7(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) + specifier: ^6.1.6 + version: 6.1.6(@mui/material@6.1.6(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) '@mui/lab': - specifier: 5.0.0-alpha.173 - version: 5.0.0-alpha.173(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 6.0.0-beta.14 + version: 6.0.0-beta.14(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@mui/material@6.1.6(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mui/material': - specifier: ^5.16.7 - version: 5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^6.1.6 + version: 6.1.6(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mui/x-data-grid': specifier: ^7.22.1 - version: 7.22.1(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mui/system@5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 7.22.1(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@mui/material@6.1.6(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mui/system@6.1.6(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@sentry/react': specifier: ^8.37.1 version: 8.37.1(react@18.3.1) @@ -88,7 +88,7 @@ importers: version: 7.1.2(filepond@4.32.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-material-ui-carousel: specifier: ^3.4.2 - version: 3.4.2(p3vvayirda5gy2xqqpgt24dakm) + version: 3.4.2(32b2q543jilm25kslkm5e6heia) react-router-dom: specifier: ^6.27.0 version: 6.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -133,8 +133,8 @@ importers: specifier: ^25.0.1 version: 25.0.1 oxlint: - specifier: ^0.9.10 - version: 0.9.10 + specifier: ^0.11.0 + version: 0.11.0 prettier: specifier: ^3.3.3 version: 3.3.3 @@ -513,9 +513,9 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@mui/base@5.0.0-beta.40': - resolution: {integrity: sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ==} - engines: {node: '>=12.0.0'} + '@mui/base@5.0.0-beta.61': + resolution: {integrity: sha512-YaMOTXS3ecDNGsPKa6UdlJ8loFLvcL9+VbpCK3hfk71OaNauZRp4Yf7KeXDYr7Ms3M/XBD3SaiR6JMr6vYtfDg==} + engines: {node: '>=14.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 react: ^17.0.0 || ^18.0.0 @@ -524,86 +524,92 @@ packages: '@types/react': optional: true - '@mui/core-downloads-tracker@5.16.7': - resolution: {integrity: sha512-RtsCt4Geed2/v74sbihWzzRs+HsIQCfclHeORh5Ynu2fS4icIKozcSubwuG7vtzq2uW3fOR1zITSP84TNt2GoQ==} + '@mui/core-downloads-tracker@6.1.6': + resolution: {integrity: sha512-nz1SlR9TdBYYPz4qKoNasMPRiGb4PaIHFkzLzhju0YVYS5QSuFF2+n7CsiHMIDcHv3piPu/xDWI53ruhOqvZwQ==} - '@mui/icons-material@5.16.7': - resolution: {integrity: sha512-UrGwDJCXEszbDI7yV047BYU5A28eGJ79keTCP4cc74WyncuVrnurlmIRxaHL8YK+LI1Kzq+/JM52IAkNnv4u+Q==} - engines: {node: '>=12.0.0'} + '@mui/icons-material@6.1.6': + resolution: {integrity: sha512-5r9urIL2lxXb/sPN3LFfFYEibsXJUb986HhhIeu1gOcte460pwdSiEhBSxkAuyT8Dj7jvu9MjqSBmSumQELo8A==} + engines: {node: '>=14.0.0'} peerDependencies: - '@mui/material': ^5.0.0 - '@types/react': ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 + '@mui/material': ^6.1.6 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': optional: true - '@mui/lab@5.0.0-alpha.173': - resolution: {integrity: sha512-Gt5zopIWwxDgGy/MXcp6GueD84xFFugFai4hYiXY0zowJpTVnIrTQCQXV004Q7rejJ7aaCntX9hpPJqCrioshA==} - engines: {node: '>=12.0.0'} + '@mui/lab@6.0.0-beta.14': + resolution: {integrity: sha512-l+g8z6QGcr7HdfCXhVaYcEp9TijH/G4h0lNaDaBL+qDFQ087ipNHC+XozE7mXOmBwtEAWmTJB4E5GwDboi9oxA==} + engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.5.0 '@emotion/styled': ^11.3.0 - '@mui/material': '>=5.15.0' - '@types/react': ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 + '@mui/material': ^6.1.6 + '@mui/material-pigment-css': ^6.1.6 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@emotion/react': optional: true '@emotion/styled': optional: true + '@mui/material-pigment-css': + optional: true '@types/react': optional: true - '@mui/material@5.16.7': - resolution: {integrity: sha512-cwwVQxBhK60OIOqZOVLFt55t01zmarKJiJUWbk0+8s/Ix5IaUzAShqlJchxsIQ4mSrWqgcKCCXKtIlG5H+/Jmg==} - engines: {node: '>=12.0.0'} + '@mui/material@6.1.6': + resolution: {integrity: sha512-1yvejiQ/601l5AK3uIdUlAVElyCxoqKnl7QA+2oFB/2qYPWfRwDgavW/MoywS5Y2gZEslcJKhe0s2F3IthgFgw==} + engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.5.0 '@emotion/styled': ^11.3.0 - '@types/react': ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 + '@mui/material-pigment-css': ^6.1.6 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@emotion/react': optional: true '@emotion/styled': optional: true + '@mui/material-pigment-css': + optional: true '@types/react': optional: true - '@mui/private-theming@5.16.6': - resolution: {integrity: sha512-rAk+Rh8Clg7Cd7shZhyt2HGTTE5wYKNSJ5sspf28Fqm/PZ69Er9o6KX25g03/FG2dfpg5GCwZh/xOojiTfm3hw==} - engines: {node: '>=12.0.0'} + '@mui/private-theming@6.1.6': + resolution: {integrity: sha512-ioAiFckaD/fJSnTrUMWgjl9HYBWt7ixCh7zZw7gDZ+Tae7NuprNV6QJK95EidDT7K0GetR2rU3kAeIR61Myttw==} + engines: {node: '>=14.0.0'} peerDependencies: - '@types/react': ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': optional: true - '@mui/styled-engine@5.16.6': - resolution: {integrity: sha512-zaThmS67ZmtHSWToTiHslbI8jwrmITcN93LQaR2lKArbvS7Z3iLkwRoiikNWutx9MBs8Q6okKvbZq1RQYB3v7g==} - engines: {node: '>=12.0.0'} + '@mui/styled-engine@6.1.6': + resolution: {integrity: sha512-I+yS1cSuSvHnZDBO7e7VHxTWpj+R7XlSZvTC4lS/OIbUNJOMMSd3UDP6V2sfwzAdmdDNBi7NGCRv2SZ6O9hGDA==} + engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.4.1 '@emotion/styled': ^11.3.0 - react: ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@emotion/react': optional: true '@emotion/styled': optional: true - '@mui/system@5.16.7': - resolution: {integrity: sha512-Jncvs/r/d/itkxh7O7opOunTqbbSSzMTHzZkNLM+FjAOg+cYAZHrPDlYe1ZGKUYORwwb2XexlWnpZp0kZ4AHuA==} - engines: {node: '>=12.0.0'} + '@mui/system@6.1.6': + resolution: {integrity: sha512-qOf1VUE9wK8syiB0BBCp82oNBAVPYdj4Trh+G1s+L+ImYiKlubWhhqlnvWt3xqMevR+D2h1CXzA1vhX2FvA+VQ==} + engines: {node: '>=14.0.0'} peerDependencies: '@emotion/react': ^11.5.0 '@emotion/styled': ^11.3.0 - '@types/react': ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@emotion/react': optional: true @@ -620,16 +626,6 @@ packages: '@types/react': optional: true - '@mui/utils@5.16.6': - resolution: {integrity: sha512-tWiQqlhxAt3KENNiSRL+DIn9H5xNVK6Jjf70x3PnfQPz1MPBdh7yyIcAyVBT9xiw7hP3SomRhPR7hzBMBCjqEA==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@types/react': ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@mui/utils@6.1.6': resolution: {integrity: sha512-sBS6D9mJECtELASLM+18WUcXF6RH3zNxBRFeyCRg8wad6NbyNrdxLuwK+Ikvc38sTZwBzAz691HmSofLqHd9sQ==} engines: {node: '>=14.0.0'} @@ -677,43 +673,43 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@oxlint/darwin-arm64@0.9.10': - resolution: {integrity: sha512-eOXKZYq5bnCSgDefgM5bzAg+4Fc//Rc4yjgKN8iDWUARweCaChiQXb6TXX8MfEfs6qayEMy6yVj0pqoFz0B1aw==} + '@oxlint/darwin-arm64@0.11.0': + resolution: {integrity: sha512-qQ1C5yvRYECp+FP8DCOSqNX4+e72xXyApJ2O8QyIeYFuGGF2MoDVQz3NYJEOjOfArZ9YXGsELwM3UFtjTGIZVg==} cpu: [arm64] os: [darwin] - '@oxlint/darwin-x64@0.9.10': - resolution: {integrity: sha512-UeYICDvLUaUOcY+0ugZUEmBMRLP+x8iTgL7TeY6BlpGw2ahbtUOTbyIIRWtr/0O++TnjZ+v8TzhJ9crw6Ij6dg==} + '@oxlint/darwin-x64@0.11.0': + resolution: {integrity: sha512-pAqp6/6+mAIPr8WBndzmEuRbcXW8WNdn80hd8fLeR9teJI8eMpTkYL6kQIU7VjJ3NxpmzBLO7nh979/bwmmuBQ==} cpu: [x64] os: [darwin] - '@oxlint/linux-arm64-gnu@0.9.10': - resolution: {integrity: sha512-0Zn+vqHhrZyufFBfq9WOgiIool0gCR14BLsdS+0Dwd9o+kNxPGA5q7erQFkiC4rpkxtfBHeD3iIKMMt7d29Kyw==} + '@oxlint/linux-arm64-gnu@0.11.0': + resolution: {integrity: sha512-RmpjCWjX0RJ1MdIcqGQsOlXh9WgXnVgVolZLCs8MHqNuYtaIA+0VOxOhJOr7CQ0HmwV+ysPTAiQ2SVSI2tVJQQ==} cpu: [arm64] os: [linux] - '@oxlint/linux-arm64-musl@0.9.10': - resolution: {integrity: sha512-tkQcWpYwF42bA/uRaV2iMFePHkBjTTgomOgeEaiw6XOSJX4nBEqGIIboqqLBWT4JnKCf/L+IG3y/e1MflhKByw==} + '@oxlint/linux-arm64-musl@0.11.0': + resolution: {integrity: sha512-totBeaOeZlblKRpSZi3svVWpJjFlhxR7Xzrh3nhPTgHMM3696qjzyb80Yg0K8gAlOrIDlBblLG0JnaxvdM2yjg==} cpu: [arm64] os: [linux] - '@oxlint/linux-x64-gnu@0.9.10': - resolution: {integrity: sha512-JHbkMUnibqaSMBvLHyqTL5cWxcGW+jw+Ppt2baLISpvo34a6fBR+PI7v/A92sEDWe0W1rPhypzCwA8mKpkQ3DA==} + '@oxlint/linux-x64-gnu@0.11.0': + resolution: {integrity: sha512-tXiJ97WH4vwTIkGMnXYPx5NqwQiYLW9MbmnGkKkm5Xv/wpAaN761PkHRJT0zsYoAgoU3nZVp3qhit9MpHq1SQg==} cpu: [x64] os: [linux] - '@oxlint/linux-x64-musl@0.9.10': - resolution: {integrity: sha512-aBBwN7bQzidwHwEXr7BAdVvMTLWstCy5gikerjLnGDeCSXX9r+o6+yUzTOqZvOo66E+XBgOJaVbY8rsL1MLE0g==} + '@oxlint/linux-x64-musl@0.11.0': + resolution: {integrity: sha512-LgjgD80fiz37g31t/jMm9kyDM31WPjcTkXXXU702WQsdhujXVUZDWid9/QeVvi51EVufyyekaTYgNR8REVVZZg==} cpu: [x64] os: [linux] - '@oxlint/win32-arm64@0.9.10': - resolution: {integrity: sha512-LXDnk7vKHT3IY6G1jq0O7+XMhtcHOYuxLGIx4KP+4xS6vKgBY+Bsq4xV3AtmtKlvnXkP5FxHpfLmcEtm5AWysA==} + '@oxlint/win32-arm64@0.11.0': + resolution: {integrity: sha512-lfANFSWt0vU6x9JQYeMEy6uy8wniZGYQt0nT45P3BwXIMhAJbEC3yEX+bP5x8eTQrgkDu4dwIDURGCeeUL/NdA==} cpu: [arm64] os: [win32] - '@oxlint/win32-x64@0.9.10': - resolution: {integrity: sha512-w5XRAV4bhgwenjjpGYZGglqzG9Wv/sI+cjQWJBQsvfDXsr2w4vOBXzt1j3/Z3EcSqf4KtkCa/IIuAhQyeShUbA==} + '@oxlint/win32-x64@0.11.0': + resolution: {integrity: sha512-5CHtAp82xbv0jnh/HGi3QE0ANBr3+R338MA0wgZXc7477Vuri0aSK0T9oRU+K/pVloPVJaWKSDCCZoiZIYckzg==} cpu: [x64] os: [win32] @@ -1857,8 +1853,8 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - oxlint@0.9.10: - resolution: {integrity: sha512-bKiiFN7Hnoaist/rditTRBXz+GXKYuLd53/NB7Q6zHB/bifELJarSoRLkAUGElIJKl4PSr3lTh1g6zehh+rX0g==} + oxlint@0.11.0: + resolution: {integrity: sha512-uY6/R4k5bECwJBR+y8CqGRcUb5hxNReziBjt5+pk6DKxj46DqMd6HwEk090KnaH1czVf23r8mcEsJYGowMWeIA==} engines: {node: '>=14.*'} hasBin: true @@ -2824,12 +2820,12 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@mui/base@5.0.0-beta.40(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@mui/base@5.0.0-beta.61(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.26.0 '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mui/types': 7.2.19(@types/react@18.3.12) - '@mui/utils': 5.16.6(@types/react@18.3.12)(react@18.3.1) + '@mui/utils': 6.1.6(@types/react@18.3.12)(react@18.3.1) '@popperjs/core': 2.11.8 clsx: 2.1.1 prop-types: 15.8.1 @@ -2838,24 +2834,24 @@ snapshots: optionalDependencies: '@types/react': 18.3.12 - '@mui/core-downloads-tracker@5.16.7': {} + '@mui/core-downloads-tracker@6.1.6': {} - '@mui/icons-material@5.16.7(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.12)(react@18.3.1)': + '@mui/icons-material@6.1.6(@mui/material@6.1.6(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.12)(react@18.3.1)': dependencies: '@babel/runtime': 7.26.0 - '@mui/material': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mui/material': 6.1.6(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 optionalDependencies: '@types/react': 18.3.12 - '@mui/lab@5.0.0-alpha.173(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@mui/lab@6.0.0-beta.14(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@mui/material@6.1.6(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.26.0 - '@mui/base': 5.0.0-beta.40(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mui/material': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mui/system': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) + '@mui/base': 5.0.0-beta.61(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mui/material': 6.1.6(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mui/system': 6.1.6(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) '@mui/types': 7.2.19(@types/react@18.3.12) - '@mui/utils': 5.16.6(@types/react@18.3.12)(react@18.3.1) + '@mui/utils': 6.1.6(@types/react@18.3.12)(react@18.3.1) clsx: 2.1.1 prop-types: 15.8.1 react: 18.3.1 @@ -2865,13 +2861,13 @@ snapshots: '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) '@types/react': 18.3.12 - '@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@mui/material@6.1.6(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.26.0 - '@mui/core-downloads-tracker': 5.16.7 - '@mui/system': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) + '@mui/core-downloads-tracker': 6.1.6 + '@mui/system': 6.1.6(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) '@mui/types': 7.2.19(@types/react@18.3.12) - '@mui/utils': 5.16.6(@types/react@18.3.12)(react@18.3.1) + '@mui/utils': 6.1.6(@types/react@18.3.12)(react@18.3.1) '@popperjs/core': 2.11.8 '@types/react-transition-group': 4.4.11 clsx: 2.1.1 @@ -2886,19 +2882,21 @@ snapshots: '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) '@types/react': 18.3.12 - '@mui/private-theming@5.16.6(@types/react@18.3.12)(react@18.3.1)': + '@mui/private-theming@6.1.6(@types/react@18.3.12)(react@18.3.1)': dependencies: '@babel/runtime': 7.26.0 - '@mui/utils': 5.16.6(@types/react@18.3.12)(react@18.3.1) + '@mui/utils': 6.1.6(@types/react@18.3.12)(react@18.3.1) prop-types: 15.8.1 react: 18.3.1 optionalDependencies: '@types/react': 18.3.12 - '@mui/styled-engine@5.16.6(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1)': + '@mui/styled-engine@6.1.6(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.26.0 '@emotion/cache': 11.13.1 + '@emotion/serialize': 1.3.2 + '@emotion/sheet': 1.4.0 csstype: 3.1.3 prop-types: 15.8.1 react: 18.3.1 @@ -2906,13 +2904,13 @@ snapshots: '@emotion/react': 11.13.3(@types/react@18.3.12)(react@18.3.1) '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) - '@mui/system@5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1)': + '@mui/system@6.1.6(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1)': dependencies: '@babel/runtime': 7.26.0 - '@mui/private-theming': 5.16.6(@types/react@18.3.12)(react@18.3.1) - '@mui/styled-engine': 5.16.6(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) + '@mui/private-theming': 6.1.6(@types/react@18.3.12)(react@18.3.1) + '@mui/styled-engine': 6.1.6(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(react@18.3.1) '@mui/types': 7.2.19(@types/react@18.3.12) - '@mui/utils': 5.16.6(@types/react@18.3.12)(react@18.3.1) + '@mui/utils': 6.1.6(@types/react@18.3.12)(react@18.3.1) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 @@ -2926,18 +2924,6 @@ snapshots: optionalDependencies: '@types/react': 18.3.12 - '@mui/utils@5.16.6(@types/react@18.3.12)(react@18.3.1)': - dependencies: - '@babel/runtime': 7.26.0 - '@mui/types': 7.2.19(@types/react@18.3.12) - '@types/prop-types': 15.7.13 - clsx: 2.1.1 - prop-types: 15.8.1 - react: 18.3.1 - react-is: 18.3.1 - optionalDependencies: - '@types/react': 18.3.12 - '@mui/utils@6.1.6(@types/react@18.3.12)(react@18.3.1)': dependencies: '@babel/runtime': 7.26.0 @@ -2950,11 +2936,11 @@ snapshots: optionalDependencies: '@types/react': 18.3.12 - '@mui/x-data-grid@7.22.1(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mui/system@5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@mui/x-data-grid@7.22.1(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@mui/material@6.1.6(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mui/system@6.1.6(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.26.0 - '@mui/material': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mui/system': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) + '@mui/material': 6.1.6(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mui/system': 6.1.6(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) '@mui/utils': 6.1.6(@types/react@18.3.12)(react@18.3.1) '@mui/x-internals': 7.21.0(@types/react@18.3.12)(react@18.3.1) clsx: 2.1.1 @@ -2992,28 +2978,28 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - '@oxlint/darwin-arm64@0.9.10': + '@oxlint/darwin-arm64@0.11.0': optional: true - '@oxlint/darwin-x64@0.9.10': + '@oxlint/darwin-x64@0.11.0': optional: true - '@oxlint/linux-arm64-gnu@0.9.10': + '@oxlint/linux-arm64-gnu@0.11.0': optional: true - '@oxlint/linux-arm64-musl@0.9.10': + '@oxlint/linux-arm64-musl@0.11.0': optional: true - '@oxlint/linux-x64-gnu@0.9.10': + '@oxlint/linux-x64-gnu@0.11.0': optional: true - '@oxlint/linux-x64-musl@0.9.10': + '@oxlint/linux-x64-musl@0.11.0': optional: true - '@oxlint/win32-arm64@0.9.10': + '@oxlint/win32-arm64@0.11.0': optional: true - '@oxlint/win32-x64@0.9.10': + '@oxlint/win32-x64@0.11.0': optional: true '@polka/url@1.0.0-next.28': {} @@ -4203,16 +4189,16 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - oxlint@0.9.10: + oxlint@0.11.0: optionalDependencies: - '@oxlint/darwin-arm64': 0.9.10 - '@oxlint/darwin-x64': 0.9.10 - '@oxlint/linux-arm64-gnu': 0.9.10 - '@oxlint/linux-arm64-musl': 0.9.10 - '@oxlint/linux-x64-gnu': 0.9.10 - '@oxlint/linux-x64-musl': 0.9.10 - '@oxlint/win32-arm64': 0.9.10 - '@oxlint/win32-x64': 0.9.10 + '@oxlint/darwin-arm64': 0.11.0 + '@oxlint/darwin-x64': 0.11.0 + '@oxlint/linux-arm64-gnu': 0.11.0 + '@oxlint/linux-arm64-musl': 0.11.0 + '@oxlint/linux-x64-gnu': 0.11.0 + '@oxlint/linux-x64-musl': 0.11.0 + '@oxlint/win32-arm64': 0.11.0 + '@oxlint/win32-x64': 0.11.0 p-limit@3.1.0: dependencies: @@ -4332,13 +4318,13 @@ snapshots: react-is@18.3.1: {} - react-material-ui-carousel@3.4.2(p3vvayirda5gy2xqqpgt24dakm): + react-material-ui-carousel@3.4.2(32b2q543jilm25kslkm5e6heia): dependencies: '@emotion/react': 11.13.3(@types/react@18.3.12)(react@18.3.1) '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) - '@mui/icons-material': 5.16.7(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) - '@mui/material': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mui/system': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) + '@mui/icons-material': 6.1.6(@mui/material@6.1.6(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) + '@mui/material': 6.1.6(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mui/system': 6.1.6(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(react@18.3.1) framer-motion: 4.1.17(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) diff --git a/frontend/src/components/pages/Assistance.jsx b/frontend/src/components/pages/Assistance.jsx index ec810c6..868bec5 100644 --- a/frontend/src/components/pages/Assistance.jsx +++ b/frontend/src/components/pages/Assistance.jsx @@ -342,7 +342,7 @@ const columns = [ width: 200, editable: true, type: 'number', - // Count `dias laborados` + `ipe` + `im` + `af` + `ar` + `c` + `cd/cf` + `aru` + `am` + `df + // Count `días laborados` + `ipe` + `im` + `af` + `ar` + `c` + `cd/cf` + `aru` + `am` + `df valueGetter: (value, row) => { let count = 0; for (let i = 1; i <= 30; i++) { @@ -389,35 +389,35 @@ export default function Assistance() { } }; - const handleEditClick = (id) => () => { - setRowModesModel({ - ...rowModesModel, - [id]: { mode: GridRowModes.Edit }, - }); - }; + // const handleEditClick = (id) => () => { + // setRowModesModel({ + // ...rowModesModel, + // [id]: { mode: GridRowModes.Edit }, + // }); + // }; - const handleSaveClick = (id) => () => { - setRowModesModel({ - ...rowModesModel, - [id]: { mode: GridRowModes.View }, - }); - }; + // const handleSaveClick = (id) => () => { + // setRowModesModel({ + // ...rowModesModel, + // [id]: { mode: GridRowModes.View }, + // }); + // }; - const handleDeleteClick = (id) => () => { - setRows(rows.filter((row) => row.id !== id)); - }; + // const handleDeleteClick = (id) => () => { + // setRows(rows.filter((row) => row.id !== id)); + // }; - const handleCancelClick = (id) => () => { - setRowModesModel({ - ...rowModesModel, - [id]: { mode: GridRowModes.View, ignoreModifications: true }, - }); + // const handleCancelClick = (id) => () => { + // setRowModesModel({ + // ...rowModesModel, + // [id]: { mode: GridRowModes.View, ignoreModifications: true }, + // }); - const editedRow = rows.find((row) => row.id === id); - if (editedRow.isNew) { - setRows(rows.filter((row) => row.id !== id)); - } - }; + // const editedRow = rows.find((row) => row.id === id); + // if (editedRow.isNew) { + // setRows(rows.filter((row) => row.id !== id)); + // } + // }; const processRowUpdate = (newRow) => { const updatedRow = { ...newRow, isNew: false }; diff --git a/frontend/src/components/pages/CoexistenceCommittee.jsx b/frontend/src/components/pages/CoexistenceCommittee.jsx index c58df76..9837e68 100644 --- a/frontend/src/components/pages/CoexistenceCommittee.jsx +++ b/frontend/src/components/pages/CoexistenceCommittee.jsx @@ -81,7 +81,7 @@ const FormikTextField = ({ const CoexistenceCommittee = () => { const { showSnack } = useSnackbar(); const { isProgressVisible, showProgressbar, hideProgressbar } = - useProgressbar(); + useProgressbar(); // Maneja el envío del formulario const handleSubmit = async (values, { resetForm }) => { diff --git a/frontend/src/components/pages/GoalsStats.jsx b/frontend/src/components/pages/GoalsStats.jsx index d1c26a1..b1bf562 100644 --- a/frontend/src/components/pages/GoalsStats.jsx +++ b/frontend/src/components/pages/GoalsStats.jsx @@ -160,9 +160,6 @@ const AnalisisMetas = () => { const [goalsQuantity, setGoalsQuantity] = useState([]); const [yearsArray, setYearsArray] = useState([]); const [loading, setLoading] = useState(false); - const [currentMonth, setCurrentMonth] = useState(''); - const [currentYear, setCurrentYear] = useState(''); - const [campaigns, setCampaigns] = useState([]); const [initialValues, setInitialValues] = useState({}); const navigate = useNavigate(); const permissions = JSON.parse(localStorage.getItem('permissions')); @@ -181,9 +178,6 @@ const AnalisisMetas = () => { const currentYear = currentDate.getFullYear(); - setCurrentMonth(currentMonth); - setCurrentYear(currentYear); - const basedInitialValues = { deliveryType: 'delivery', month: currentMonth, @@ -297,25 +291,6 @@ const AnalisisMetas = () => { setRows(modifiedData); }; - const getCampaignOptions = (data) => { - const campaigns = data.map((row) => row.campaign_goal).filter(Boolean); - const uniqueCampaigns = [...new Set(campaigns)]; - const campaignOptions = uniqueCampaigns.map((campaign) => ({ - value: campaign.toLowerCase(), - label: - campaign.charAt(0).toUpperCase() + - campaign.slice(1).toLowerCase(), - })); - const uniqueCampaignOptions = Array.from( - new Map( - campaignOptions.map((item) => [item['value'], item]) - ).values() - ); - - console.log(uniqueCampaignOptions); - setCampaigns(uniqueCampaignOptions); - }; - const constructStats = (data, deliveryType) => { const stats = { metasCumplidas: 0, @@ -339,29 +314,6 @@ const AnalisisMetas = () => { setGoalsQuantity(stats); }; - const getAllGoals = async () => { - setLoading(true); - try { - const response = await fetch(`${getApiUrl().apiUrl}goals/`, { - method: 'GET', - credentials: 'include', - }); - - await handleError(response, showSnack); - - if (response.status === 200) { - const data = await response.json(); - getCampaignOptions(data); - } - } catch (error) { - if (getApiUrl().environment === 'development') { - console.error(error); - } - } finally { - setLoading(false); - } - }; - const getCurrentGoals = async () => { setLoading(true); try { @@ -392,7 +344,6 @@ const AnalisisMetas = () => { useEffect(() => { getCurrentGoals(); - getAllGoals(); }, []); const currentColumns = [ @@ -478,21 +429,6 @@ const AnalisisMetas = () => { ); } - const months = [ - { value: 'ENERO', label: 'ENERO' }, - { value: 'FEBRERO', label: 'FEBRERO' }, - { value: 'MARZO', label: 'MARZO' }, - { value: 'ABRIL', label: 'ABRIL' }, - { value: 'MAYO', label: 'MAYO' }, - { value: 'JUNIO', label: 'JUNIO' }, - { value: 'JULIO', label: 'JULIO' }, - { value: 'AGOSTO', label: 'AGOSTO' }, - { value: 'SEPTIEMBRE', label: 'SEPTIEMBRE' }, - { value: 'octubre', label: 'OCTUBRE' }, - { value: 'NOVIEMBRE', label: 'NOVIEMBRE' }, - { value: 'DICIEMBRE', label: 'DICIEMBRE' }, - ]; - const stats = [ { title: 'Metas Aceptadas', quantity: goalsQuantity.metasCumplidas }, { diff --git a/frontend/src/components/pages/Home.jsx b/frontend/src/components/pages/Home.jsx index d7cf669..2386d9a 100644 --- a/frontend/src/components/pages/Home.jsx +++ b/frontend/src/components/pages/Home.jsx @@ -4,7 +4,7 @@ import React, { useEffect, useState } from 'react'; import { getApiUrl } from '../../assets/getApi.js'; import CarouselComponent from '../shared/Carousel'; import { handleError } from '../../assets/handleError'; -import { EmblaCarousel } from '../shared/EmblaCarousel.jsx'; +// import { EmblaCarousel } from '../shared/EmblaCarousel.jsx'; // Custom Hooks import { useSnackbar } from '../context/SnackbarContext'; diff --git a/frontend/src/components/pages/Login.jsx b/frontend/src/components/pages/Login.jsx index 04f3534..d0a25b9 100644 --- a/frontend/src/components/pages/Login.jsx +++ b/frontend/src/components/pages/Login.jsx @@ -5,7 +5,7 @@ import { useNavigate, useLocation } from 'react-router-dom'; import { Formik, Form, useField } from 'formik'; import * as Yup from 'yup'; import * as Sentry from '@sentry/react'; -import { Toaster, toast } from 'sonner'; +// import { Toaster, toast } from 'sonner'; // Custom Hooks import { useSnackbar } from '../context/SnackbarContext'; diff --git a/frontend/src/components/pages/PayslipsPreview.jsx b/frontend/src/components/pages/PayslipsPreview.jsx index a553513..13e105a 100644 --- a/frontend/src/components/pages/PayslipsPreview.jsx +++ b/frontend/src/components/pages/PayslipsPreview.jsx @@ -54,7 +54,7 @@ const columns = [ new Intl.NumberFormat('es-CO', { style: 'currency', currency: 'COP', - }).format(value), + }).format(value), }, { field: 'bearing', diff --git a/frontend/src/components/pages/Points.jsx b/frontend/src/components/pages/Points.jsx index 47bf47e..ca97667 100644 --- a/frontend/src/components/pages/Points.jsx +++ b/frontend/src/components/pages/Points.jsx @@ -1,8 +1,5 @@ import { useState, useEffect } from 'react'; -// Libraries -import { useNavigate } from 'react-router-dom'; - import { useSnackbar } from '../context/SnackbarContext'; // Custom Components diff --git a/frontend/src/components/pages/RiskEvents.jsx b/frontend/src/components/pages/RiskEvents.jsx index ce0059b..508155b 100644 --- a/frontend/src/components/pages/RiskEvents.jsx +++ b/frontend/src/components/pages/RiskEvents.jsx @@ -319,7 +319,6 @@ export const RiskEvent = () => { return ( { {...field} helperText={errorText} error={!!errorText} + slotProps={{ + inputLabel: { shrink: true }, + }} /> ); } else if (type === 'date' || type === 'datetime-local') { return ( { {...field} helperText={errorText} error={!!errorText} + slotProps={{ + inputLabel: { shrink: true }, + }} /> ); } else if (multiline) { diff --git a/frontend/src/components/pages/Vacations.jsx b/frontend/src/components/pages/Vacations.jsx index e62fa7a..a06e900 100644 --- a/frontend/src/components/pages/Vacations.jsx +++ b/frontend/src/components/pages/Vacations.jsx @@ -554,33 +554,32 @@ export const Vacations = () => { cellClassName: 'actions', getActions: ({ row }) => { return [ - - } - disabled={row.status === 'PENDIENTE'} - label="open-response-letter" - sx={{ - color: 'primary.main', - }} - onClick={() => { - window.open( - `${getApiUrl().apiUrl}vacation/${row.id}/get-response`, - '_blank' - ); - }} - /> + + + } + disabled={row.status === 'PENDIENTE'} + label="open-response-letter" + sx={{ + color: 'primary.main', + }} + onClick={() => { + window.open( + `${getApiUrl().apiUrl}vacation/${row.id}/get-response`, + '_blank' + ); + }} + /> + , ]; }, }, ]; - // const handleOpenDialog = () => setOpenVacation(true); + const handleOpenDialog = () => setOpenVacation(true); const CustomToolbar = () => { return ( @@ -595,21 +594,14 @@ export const Vacations = () => { utf8WithBom: true, }} /> - } > - - - - + Crear solicitud + diff --git a/frontend/src/components/shared/SwiperSlider.jsx b/frontend/src/components/shared/SwiperSlider.jsx index 35b656f..3f7616b 100644 --- a/frontend/src/components/shared/SwiperSlider.jsx +++ b/frontend/src/components/shared/SwiperSlider.jsx @@ -11,11 +11,9 @@ import '../../index.css'; // Media import managersJr1 from '../../images/managers-jr/52716114.webp'; import managersJr2 from '../../images/managers-jr/53069726.webp'; -import managersJr3 from '../../images/managers-jr/1014205170.webp'; import managersJr4 from '../../images/managers-jr/1016002011.webp'; import managersJr5 from '../../images/managers-jr/1016033764.webp'; import managersJr6 from '../../images/managers-jr/91498957.webp'; -import managersJr7 from '../../images/managers-jr/79509094.webp'; import managersJr8 from '../../images/managers-jr/28553156.webp'; import managersJr9 from '../../images/managers-jr/1010178143.webp'; diff --git a/frontend/src/components/shared/VacationsRequest.jsx b/frontend/src/components/shared/VacationsRequest.jsx index c47565d..7140af2 100644 --- a/frontend/src/components/shared/VacationsRequest.jsx +++ b/frontend/src/components/shared/VacationsRequest.jsx @@ -288,7 +288,7 @@ const VacationsRequest = ({ openVacation, setOpenVacation, getVacations }) => { return ( Date: Wed, 6 Nov 2024 17:46:18 -0500 Subject: [PATCH 17/17] Fix date formatting in vacation response template for improved readability --- .../vacation/templates/vacation_response.html | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/INSIGHTSAPI/vacation/templates/vacation_response.html b/INSIGHTSAPI/vacation/templates/vacation_response.html index efae598..6c89294 100644 --- a/INSIGHTSAPI/vacation/templates/vacation_response.html +++ b/INSIGHTSAPI/vacation/templates/vacation_response.html @@ -80,9 +80,18 @@

    - Bogotá D.C.; {% if vacation.payroll_approved_at %} {{ vacation.payroll_approved_at|date:"d \d\e F \d\e Y" }} {% elif vacation.hr_approved_at %} - {{vacation.hr_approved_at|date:"d \d\e F \d\e Y" }} {% elif vacation.manager_approved_at %} {{vacation.manager_approved_at|date:"d \d\e F \d\e Y" }} {% elif - vacation.boss_approved_at %} {{ vacation.boss_approved_at|date:"d \d\e F \d\e Y" }} {% else %} No approval date available {% endif %} + Bogotá D.C.; + {% if vacation.payroll_approved_at %} + {{ vacation.payroll_approved_at|date:"d \\d\\e F \\d\\e Y" }} + {% elif vacation.hr_approved_at %} + {{ vacation.hr_approved_at|date:"d \\d\\e F \\d\\e Y" }} + {% elif vacation.manager_approved_at %} + {{ vacation.manager_approved_at|date:"d \\d\\e F \\d\\e Y" }} + {% elif vacation.boss_approved_at %} + {{ vacation.boss_approved_at|date:"d \\d\\e F \\d\\e Y" }} + {% else %} + No approval date available + {% endif %}