diff --git a/mentor-match-app/.gitignore b/mentor-match-app/.gitignore
index 65d5881..622120a 100644
--- a/mentor-match-app/.gitignore
+++ b/mentor-match-app/.gitignore
@@ -30,3 +30,4 @@ yarn-error.log*
server/firebase-service-account-key.json
functions/node_modules/
+
diff --git a/mentor-match-app/package-lock.json b/mentor-match-app/package-lock.json
index 99dc3e8..020f488 100644
--- a/mentor-match-app/package-lock.json
+++ b/mentor-match-app/package-lock.json
@@ -11,31 +11,36 @@
"@chatscope/chat-ui-kit-react": "^2.1.1",
"@chatscope/chat-ui-kit-styles": "^1.4.0",
"@chatscope/use-chat": "^3.1.2",
- "@emotion/react": "^11.13.3",
- "@emotion/styled": "^11.13.0",
+ "@emotion/react": "^11.14.0",
+ "@emotion/styled": "^11.14.1",
"@fontsource-variable/onest": "^5.1.0",
- "@mui/icons-material": "^6.1.0",
- "@mui/lab": "^6.0.0-beta.9",
- "@mui/material": "^6.1.0",
+ "@mui/icons-material": "^7.3.4",
+ "@mui/lab": "^7.0.1-beta.18",
+ "@mui/material": "^7.3.4",
+ "@mui/x-date-pickers": "^8.12.0",
"@testing-library/jest-dom": "^5.17.0",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"ajv": "^8.17.1",
"ajv-keywords": "^5.1.0",
"cors": "^2.8.5",
+ "dayjs": "^1.11.18",
"dotenv": "^17.2.1",
+ "export-to-csv": "^1.4.0",
"express": "^5.1.0",
"firebase": "^10.13.1",
"firebase-admin": "^13.5.0",
"formik": "^2.4.6",
"lottie-react": "^2.4.1",
+ "material-react-table": "^3.2.1",
"node-fetch": "^2.6.7",
"notistack": "^3.0.1",
- "react": "^18.2.0",
- "react-dom": "^18.2.0",
+ "react": "18.2.0",
+ "react-dom": "18.2.0",
"react-router-dom": "^6.26.2",
"react-scripts": "5.0.1",
"web-vitals": "^2.1.4",
+ "yaml": "^2.8.1",
"yup": "^1.4.0"
},
"devDependencies": {
@@ -46,9 +51,9 @@
}
},
"node_modules/@adobe/css-tools": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.3.tgz",
- "integrity": "sha512-VQKMkwriZbaOgVCby1UDY/LDk5fIjhQicCvVPFqfe+69fWaPWydbWJ3wRt59/YzIwda1I81loas3oCoHxnqvdA==",
+ "version": "4.4.4",
+ "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz",
+ "integrity": "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==",
"license": "MIT"
},
"node_modules/@alloc/quick-lru": {
@@ -63,19 +68,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@ampproject/remapping": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
- "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
- "license": "Apache-2.0",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.24"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
"node_modules/@apideck/better-ajv-errors": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz",
@@ -108,30 +100,30 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz",
- "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==",
+ "version": "7.28.4",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.4.tgz",
+ "integrity": "sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz",
- "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==",
+ "version": "7.28.4",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz",
+ "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==",
"license": "MIT",
"dependencies": {
- "@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.27.1",
- "@babel/generator": "^7.28.0",
+ "@babel/generator": "^7.28.3",
"@babel/helper-compilation-targets": "^7.27.2",
- "@babel/helper-module-transforms": "^7.27.3",
- "@babel/helpers": "^7.27.6",
- "@babel/parser": "^7.28.0",
+ "@babel/helper-module-transforms": "^7.28.3",
+ "@babel/helpers": "^7.28.4",
+ "@babel/parser": "^7.28.4",
"@babel/template": "^7.27.2",
- "@babel/traverse": "^7.28.0",
- "@babel/types": "^7.28.0",
+ "@babel/traverse": "^7.28.4",
+ "@babel/types": "^7.28.4",
+ "@jridgewell/remapping": "^2.3.5",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -146,16 +138,10 @@
"url": "https://opencollective.com/babel"
}
},
- "node_modules/@babel/core/node_modules/convert-source-map": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
- "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
- "license": "MIT"
- },
"node_modules/@babel/eslint-parser": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.28.0.tgz",
- "integrity": "sha512-N4ntErOlKvcbTt01rr5wj3y55xnIdx1ymrfIr8C2WnM1Y9glFgWaGDEULJIazOX3XM9NRzhfJ6zZnQ1sBNWU+w==",
+ "version": "7.28.4",
+ "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.28.4.tgz",
+ "integrity": "sha512-Aa+yDiH87980jR6zvRfFuCR1+dLb00vBydhTL+zI992Rz/wQhSvuxjmOOuJOgO3XmakO6RykRGD2S1mq1AtgHA==",
"license": "MIT",
"dependencies": {
"@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1",
@@ -180,13 +166,13 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz",
- "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==",
+ "version": "7.28.3",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz",
+ "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==",
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.28.0",
- "@babel/types": "^7.28.0",
+ "@babel/parser": "^7.28.3",
+ "@babel/types": "^7.28.2",
"@jridgewell/gen-mapping": "^0.3.12",
"@jridgewell/trace-mapping": "^0.3.28",
"jsesc": "^3.0.2"
@@ -224,17 +210,17 @@
}
},
"node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz",
- "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==",
+ "version": "7.28.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz",
+ "integrity": "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==",
"license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.27.1",
+ "@babel/helper-annotate-as-pure": "^7.27.3",
"@babel/helper-member-expression-to-functions": "^7.27.1",
"@babel/helper-optimise-call-expression": "^7.27.1",
"@babel/helper-replace-supers": "^7.27.1",
"@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
- "@babel/traverse": "^7.27.1",
+ "@babel/traverse": "^7.28.3",
"semver": "^6.3.1"
},
"engines": {
@@ -313,14 +299,14 @@
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.27.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz",
- "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==",
+ "version": "7.28.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz",
+ "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==",
"license": "MIT",
"dependencies": {
"@babel/helper-module-imports": "^7.27.1",
"@babel/helper-validator-identifier": "^7.27.1",
- "@babel/traverse": "^7.27.3"
+ "@babel/traverse": "^7.28.3"
},
"engines": {
"node": ">=6.9.0"
@@ -425,39 +411,39 @@
}
},
"node_modules/@babel/helper-wrap-function": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz",
- "integrity": "sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==",
+ "version": "7.28.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz",
+ "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==",
"license": "MIT",
"dependencies": {
- "@babel/template": "^7.27.1",
- "@babel/traverse": "^7.27.1",
- "@babel/types": "^7.27.1"
+ "@babel/template": "^7.27.2",
+ "@babel/traverse": "^7.28.3",
+ "@babel/types": "^7.28.2"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
- "version": "7.28.2",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.2.tgz",
- "integrity": "sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==",
+ "version": "7.28.4",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz",
+ "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==",
"license": "MIT",
"dependencies": {
"@babel/template": "^7.27.2",
- "@babel/types": "^7.28.2"
+ "@babel/types": "^7.28.4"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz",
- "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==",
+ "version": "7.28.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz",
+ "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==",
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.28.0"
+ "@babel/types": "^7.28.4"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -530,13 +516,13 @@
}
},
"node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz",
- "integrity": "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==",
+ "version": "7.28.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz",
+ "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==",
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.27.1",
- "@babel/traverse": "^7.27.1"
+ "@babel/traverse": "^7.28.3"
},
"engines": {
"node": ">=6.9.0"
@@ -1015,9 +1001,9 @@
}
},
"node_modules/@babel/plugin-transform-block-scoping": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.0.tgz",
- "integrity": "sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q==",
+ "version": "7.28.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.4.tgz",
+ "integrity": "sha512-1yxmvN0MJHOhPVmAsmoW5liWwoILobu/d/ShymZmj867bAdxGbehIrew1DuLpw2Ukv+qDSSPQdYW1dLNE7t11A==",
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.27.1"
@@ -1046,12 +1032,12 @@
}
},
"node_modules/@babel/plugin-transform-class-static-block": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz",
- "integrity": "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==",
+ "version": "7.28.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz",
+ "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==",
"license": "MIT",
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.27.1",
+ "@babel/helper-create-class-features-plugin": "^7.28.3",
"@babel/helper-plugin-utils": "^7.27.1"
},
"engines": {
@@ -1062,9 +1048,9 @@
}
},
"node_modules/@babel/plugin-transform-classes": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.0.tgz",
- "integrity": "sha512-IjM1IoJNw72AZFlj33Cu8X0q2XK/6AaVC3jQu+cgQ5lThWD5ajnuUAml80dqRmOhmPkTH8uAwnpMu9Rvj0LTRA==",
+ "version": "7.28.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz",
+ "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==",
"license": "MIT",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.27.3",
@@ -1072,7 +1058,7 @@
"@babel/helper-globals": "^7.28.0",
"@babel/helper-plugin-utils": "^7.27.1",
"@babel/helper-replace-supers": "^7.27.1",
- "@babel/traverse": "^7.28.0"
+ "@babel/traverse": "^7.28.4"
},
"engines": {
"node": ">=6.9.0"
@@ -1458,16 +1444,16 @@
}
},
"node_modules/@babel/plugin-transform-object-rest-spread": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.0.tgz",
- "integrity": "sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA==",
+ "version": "7.28.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz",
+ "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==",
"license": "MIT",
"dependencies": {
"@babel/helper-compilation-targets": "^7.27.2",
"@babel/helper-plugin-utils": "^7.27.1",
"@babel/plugin-transform-destructuring": "^7.28.0",
"@babel/plugin-transform-parameters": "^7.27.7",
- "@babel/traverse": "^7.28.0"
+ "@babel/traverse": "^7.28.4"
},
"engines": {
"node": ">=6.9.0"
@@ -1667,9 +1653,9 @@
}
},
"node_modules/@babel/plugin-transform-regenerator": {
- "version": "7.28.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.1.tgz",
- "integrity": "sha512-P0QiV/taaa3kXpLY+sXla5zec4E+4t4Aqc9ggHlfZ7a2cp8/x/Gv08jfwEtn9gnnYIMvHx6aoOZ8XJL8eU71Dg==",
+ "version": "7.28.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz",
+ "integrity": "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==",
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.27.1"
@@ -1713,9 +1699,9 @@
}
},
"node_modules/@babel/plugin-transform-runtime": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.0.tgz",
- "integrity": "sha512-dGopk9nZrtCs2+nfIem25UuHyt5moSJamArzIoh9/vezUQPmYDOzjaHDCkAzuGJibCIkPup8rMT2+wYB6S73cA==",
+ "version": "7.28.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.3.tgz",
+ "integrity": "sha512-Y6ab1kGqZ0u42Zv/4a7l0l72n9DKP/MKoKWaUSBylrhNZO2prYuqFOLbn5aW5SIFXwSH93yfjbgllL8lxuGKLg==",
"license": "MIT",
"dependencies": {
"@babel/helper-module-imports": "^7.27.1",
@@ -1891,9 +1877,9 @@
}
},
"node_modules/@babel/preset-env": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.0.tgz",
- "integrity": "sha512-VmaxeGOwuDqzLl5JUkIRM1X2Qu2uKGxHEQWh+cvvbl7JuJRgKGJSfsEF/bUaxFhJl/XAyxBe7q7qSuTbKFuCyg==",
+ "version": "7.28.3",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.3.tgz",
+ "integrity": "sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg==",
"license": "MIT",
"dependencies": {
"@babel/compat-data": "^7.28.0",
@@ -1904,7 +1890,7 @@
"@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1",
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1",
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1",
- "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.27.1",
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3",
"@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
"@babel/plugin-syntax-import-assertions": "^7.27.1",
"@babel/plugin-syntax-import-attributes": "^7.27.1",
@@ -1915,8 +1901,8 @@
"@babel/plugin-transform-block-scoped-functions": "^7.27.1",
"@babel/plugin-transform-block-scoping": "^7.28.0",
"@babel/plugin-transform-class-properties": "^7.27.1",
- "@babel/plugin-transform-class-static-block": "^7.27.1",
- "@babel/plugin-transform-classes": "^7.28.0",
+ "@babel/plugin-transform-class-static-block": "^7.28.3",
+ "@babel/plugin-transform-classes": "^7.28.3",
"@babel/plugin-transform-computed-properties": "^7.27.1",
"@babel/plugin-transform-destructuring": "^7.28.0",
"@babel/plugin-transform-dotall-regex": "^7.27.1",
@@ -1948,7 +1934,7 @@
"@babel/plugin-transform-private-methods": "^7.27.1",
"@babel/plugin-transform-private-property-in-object": "^7.27.1",
"@babel/plugin-transform-property-literals": "^7.27.1",
- "@babel/plugin-transform-regenerator": "^7.28.0",
+ "@babel/plugin-transform-regenerator": "^7.28.3",
"@babel/plugin-transform-regexp-modifiers": "^7.27.1",
"@babel/plugin-transform-reserved-words": "^7.27.1",
"@babel/plugin-transform-shorthand-properties": "^7.27.1",
@@ -2040,9 +2026,9 @@
}
},
"node_modules/@babel/runtime": {
- "version": "7.28.2",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz",
- "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==",
+ "version": "7.28.4",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz",
+ "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
@@ -2063,17 +2049,17 @@
}
},
"node_modules/@babel/traverse": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz",
- "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==",
+ "version": "7.28.4",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz",
+ "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==",
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.27.1",
- "@babel/generator": "^7.28.0",
+ "@babel/generator": "^7.28.3",
"@babel/helper-globals": "^7.28.0",
- "@babel/parser": "^7.28.0",
+ "@babel/parser": "^7.28.4",
"@babel/template": "^7.27.2",
- "@babel/types": "^7.28.0",
+ "@babel/types": "^7.28.4",
"debug": "^4.3.1"
},
"engines": {
@@ -2081,9 +2067,9 @@
}
},
"node_modules/@babel/types": {
- "version": "7.28.2",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz",
- "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==",
+ "version": "7.28.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz",
+ "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==",
"license": "MIT",
"dependencies": {
"@babel/helper-string-parser": "^7.27.1",
@@ -2443,6 +2429,12 @@
"stylis": "4.2.0"
}
},
+ "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "license": "MIT"
+ },
"node_modules/@emotion/cache": {
"version": "11.14.0",
"resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz",
@@ -2463,9 +2455,9 @@
"license": "MIT"
},
"node_modules/@emotion/is-prop-valid": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz",
- "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.4.0.tgz",
+ "integrity": "sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==",
"license": "MIT",
"dependencies": {
"@emotion/memoize": "^0.9.0"
@@ -2571,9 +2563,9 @@
"license": "MIT"
},
"node_modules/@eslint-community/eslint-utils": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
- "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz",
+ "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==",
"license": "MIT",
"dependencies": {
"eslint-visitor-keys": "^3.4.3"
@@ -2636,24 +2628,6 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/@eslint/eslintrc/node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "license": "Python-2.0"
- },
- "node_modules/@eslint/eslintrc/node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
"node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -2789,7 +2763,24 @@
"integrity": "sha512-oMEZ1TDlBz479lmABwWsWjzHwheQKiAgnuKxE0pz0IXCVx7/rtlkx1fQ6GfgK24WCrxDKMplZrT50Kh04iMbXQ==",
"license": "Apache-2.0"
},
- "node_modules/@firebase/auth": {
+ "node_modules/@firebase/auth-compat": {
+ "version": "0.5.14",
+ "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.5.14.tgz",
+ "integrity": "sha512-2eczCSqBl1KUPJacZlFpQayvpilg3dxXLy9cSMTKtQMTQSmondUtPI47P3ikH3bQAXhzKLOE+qVxJ3/IRtu9pw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@firebase/auth": "1.7.9",
+ "@firebase/auth-types": "0.12.2",
+ "@firebase/component": "0.6.9",
+ "@firebase/util": "1.10.0",
+ "tslib": "^2.1.0",
+ "undici": "6.19.7"
+ },
+ "peerDependencies": {
+ "@firebase/app-compat": "0.x"
+ }
+ },
+ "node_modules/@firebase/auth-compat/node_modules/@firebase/auth": {
"version": "1.7.9",
"resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.7.9.tgz",
"integrity": "sha512-yLD5095kVgDw965jepMyUrIgDklD6qH/BZNHeKOgvu7pchOKNjVM+zQoOVYJIKWMWOWBq8IRNVU6NXzBbozaJg==",
@@ -2811,23 +2802,6 @@
}
}
},
- "node_modules/@firebase/auth-compat": {
- "version": "0.5.14",
- "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.5.14.tgz",
- "integrity": "sha512-2eczCSqBl1KUPJacZlFpQayvpilg3dxXLy9cSMTKtQMTQSmondUtPI47P3ikH3bQAXhzKLOE+qVxJ3/IRtu9pw==",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/auth": "1.7.9",
- "@firebase/auth-types": "0.12.2",
- "@firebase/component": "0.6.9",
- "@firebase/util": "1.10.0",
- "tslib": "^2.1.0",
- "undici": "6.19.7"
- },
- "peerDependencies": {
- "@firebase/app-compat": "0.x"
- }
- },
"node_modules/@firebase/auth-interop-types": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.3.tgz",
@@ -3238,48 +3212,10 @@
"integrity": "sha512-jmEnr/pk0yVkA7mIlHNnxCi+wWzOFUg0WyIotgkKAb2u1J7fAeDBcVNSTjTihbAYNusCLQdW5s9IJ5qwnEufcQ==",
"license": "Apache-2.0"
},
- "node_modules/@floating-ui/core": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz",
- "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==",
- "license": "MIT",
- "dependencies": {
- "@floating-ui/utils": "^0.2.10"
- }
- },
- "node_modules/@floating-ui/dom": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.3.tgz",
- "integrity": "sha512-uZA413QEpNuhtb3/iIKoYMSK07keHPYeXF02Zhd6e213j+d1NamLix/mCLxBUDW/Gx52sPH2m+chlUsyaBs/Ag==",
- "license": "MIT",
- "dependencies": {
- "@floating-ui/core": "^1.7.3",
- "@floating-ui/utils": "^0.2.10"
- }
- },
- "node_modules/@floating-ui/react-dom": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.5.tgz",
- "integrity": "sha512-HDO/1/1oH9fjj4eLgegrlH3dklZpHtUYYFiVwMUwfGvk9jWDRWqkklA2/NFScknrcNSspbV868WjXORvreDX+Q==",
- "license": "MIT",
- "dependencies": {
- "@floating-ui/dom": "^1.7.3"
- },
- "peerDependencies": {
- "react": ">=16.8.0",
- "react-dom": ">=16.8.0"
- }
- },
- "node_modules/@floating-ui/utils": {
- "version": "0.2.10",
- "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz",
- "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==",
- "license": "MIT"
- },
"node_modules/@fontsource-variable/onest": {
- "version": "5.2.9",
- "resolved": "https://registry.npmjs.org/@fontsource-variable/onest/-/onest-5.2.9.tgz",
- "integrity": "sha512-yMYrvMibKYTckL2vxeC+Z9buANY1GNgwG8oMHx3I7sjqxeOmHufHsI+Bbt3kYSoM0ominSr3qgAjMiFNWog6Uw==",
+ "version": "5.2.11",
+ "resolved": "https://registry.npmjs.org/@fontsource-variable/onest/-/onest-5.2.11.tgz",
+ "integrity": "sha512-knJww1KxK4g66+qu90q3CPBvl4zhL5oDRi3/JMkYMmlhW3OgyRgT4MMfgd6jg2lvho7bLPAXfsYPh59h0yzwUA==",
"license": "OFL-1.1",
"funding": {
"url": "https://github.com/sponsors/ayuhito"
@@ -3328,9 +3264,9 @@
}
},
"node_modules/@fortawesome/react-fontawesome": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.3.tgz",
- "integrity": "sha512-HlJco8RDY8NrzFVjy23b/7mNS4g9NegcrBG3n7jinwpc2x/AmSVk53IhWniLYM4szYLxRAFTAGwGn0EIlclDeQ==",
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.6.tgz",
+ "integrity": "sha512-mtBFIi1UsYQo7rYonYFkjgYKGoL8T+fEH6NGUpvuqtY3ytMsAoDaPo5rk25KuMtKDipY4bGYM/CkmCHA1N3FUg==",
"license": "MIT",
"dependencies": {
"prop-types": "^15.8.1"
@@ -3341,9 +3277,9 @@
}
},
"node_modules/@google-cloud/firestore": {
- "version": "7.11.4",
- "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-7.11.4.tgz",
- "integrity": "sha512-9jwx87tnm0x8QMfppT543oqIvcPaBKvfn0t5toygqlwh17lN92OwCDsUl7S+jg3a9Nhxjl9/Y3TZAusVJzugrA==",
+ "version": "7.11.6",
+ "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-7.11.6.tgz",
+ "integrity": "sha512-EW/O8ktzwLfyWBOsNuhRoMi8lrC3clHM5LVFhGvO1HCsLozCOOXRAlHrYBoE6HL42Sc8yYMuCb2XqcnJ4OOEpw==",
"license": "Apache-2.0",
"optional": true,
"dependencies": {
@@ -3392,9 +3328,9 @@
}
},
"node_modules/@google-cloud/storage": {
- "version": "7.17.1",
- "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-7.17.1.tgz",
- "integrity": "sha512-2FMQbpU7qK+OtBPaegC6n+XevgZksobUGo6mGKnXNmeZpvLiAo1gTAE3oTKsrMGDV4VtL8Zzpono0YsK/Q7Iqg==",
+ "version": "7.17.2",
+ "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-7.17.2.tgz",
+ "integrity": "sha512-6xN0KNO8L/LIA5zu3CJwHkJiB6n65eykBLOb0E+RooiHYgX8CSao6lvQiKT9TBk2gL5g33LL3fmhDodZnt56rw==",
"license": "Apache-2.0",
"optional": true,
"dependencies": {
@@ -3418,33 +3354,14 @@
"node": ">=14"
}
},
- "node_modules/@google-cloud/storage/node_modules/mime": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz",
- "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==",
+ "node_modules/@google-cloud/storage/node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
"license": "MIT",
"optional": true,
"bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/@google-cloud/storage/node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "uuid": "dist/bin/uuid"
}
},
"node_modules/@grpc/grpc-js": {
@@ -3531,9 +3448,9 @@
}
},
"node_modules/@isaacs/cliui/node_modules/ansi-regex": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
- "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+ "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
"license": "MIT",
"engines": {
"node": ">=12"
@@ -3543,9 +3460,9 @@
}
},
"node_modules/@isaacs/cliui/node_modules/ansi-styles": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
+ "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
"license": "MIT",
"engines": {
"node": ">=12"
@@ -3572,9 +3489,9 @@
}
},
"node_modules/@isaacs/cliui/node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
+ "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
"license": "MIT",
"dependencies": {
"ansi-regex": "^6.0.1"
@@ -3619,6 +3536,15 @@
"node": ">=8"
}
},
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "license": "MIT",
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
"node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
@@ -3628,6 +3554,71 @@
"node": ">=6"
}
},
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "license": "MIT",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
@@ -4008,12 +3999,12 @@
}
},
"node_modules/@jest/expect-utils": {
- "version": "30.0.5",
- "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.0.5.tgz",
- "integrity": "sha512-F3lmTT7CXWYywoVUGTCmom0vXq3HTTkaZyTAzIy+bXSBizB7o5qzlC9VCtq0arOa8GqmNsbg/cE9C6HLn7Szew==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.2.0.tgz",
+ "integrity": "sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==",
"license": "MIT",
"dependencies": {
- "@jest/get-type": "30.0.1"
+ "@jest/get-type": "30.1.0"
},
"engines": {
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
@@ -4155,9 +4146,9 @@
}
},
"node_modules/@jest/get-type": {
- "version": "30.0.1",
- "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.0.1.tgz",
- "integrity": "sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw==",
+ "version": "30.1.0",
+ "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz",
+ "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==",
"license": "MIT",
"engines": {
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
@@ -4622,6 +4613,12 @@
"node": ">=8"
}
},
+ "node_modules/@jest/transform/node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "license": "MIT"
+ },
"node_modules/@jest/transform/node_modules/jest-regex-util": {
"version": "27.5.1",
"resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz",
@@ -4670,9 +4667,9 @@
}
},
"node_modules/@jest/types": {
- "version": "30.0.5",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.5.tgz",
- "integrity": "sha512-aREYa3aku9SSnea4aX6bhKn4bgv3AXkgijoQgbYV3yvbiGt6z+MQ85+6mIhx9DsKW2BuB/cLR/A+tcMThx+KLQ==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.2.0.tgz",
+ "integrity": "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==",
"license": "MIT",
"dependencies": {
"@jest/pattern": "30.0.1",
@@ -4704,15 +4701,25 @@
}
},
"node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.12",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz",
- "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==",
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
"license": "MIT",
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.5.0",
"@jridgewell/trace-mapping": "^0.3.24"
}
},
+ "node_modules/@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
"node_modules/@jridgewell/resolve-uri": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
@@ -4723,9 +4730,9 @@
}
},
"node_modules/@jridgewell/source-map": {
- "version": "0.3.10",
- "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.10.tgz",
- "integrity": "sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==",
+ "version": "0.3.11",
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz",
+ "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==",
"license": "MIT",
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.5",
@@ -4733,15 +4740,15 @@
}
},
"node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz",
- "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==",
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
"license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.29",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz",
- "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==",
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
"license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
@@ -4765,32 +4772,35 @@
"integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==",
"license": "MIT"
},
- "node_modules/@mui/base": {
- "version": "5.0.0-beta.42",
- "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.42.tgz",
- "integrity": "sha512-fWRiUJVCHCPF+mxd5drn08bY2qRw3jj5f1SSQdUXmaJ/yKpk23ys8MgLO2KGVTRtbks/+ctRfgffGPbXifj0Ug==",
- "deprecated": "This package has been replaced by @base-ui-components/react",
+ "node_modules/@mui/core-downloads-tracker": {
+ "version": "7.3.4",
+ "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.3.4.tgz",
+ "integrity": "sha512-BIktMapG3r4iXwIhYNpvk97ZfYWTreBBQTWjQKbNbzI64+ULHfYavQEX2w99aSWHS58DvXESWIgbD9adKcUOBw==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ }
+ },
+ "node_modules/@mui/icons-material": {
+ "version": "7.3.4",
+ "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.3.4.tgz",
+ "integrity": "sha512-9n6Xcq7molXWYb680N2Qx+FRW8oT6j/LXF5PZFH3ph9X/Rct0B/BlLAsFI7iL9ySI6LVLuQIVtrLiPT82R7OZw==",
"license": "MIT",
"dependencies": {
- "@babel/runtime": "^7.24.4",
- "@floating-ui/react-dom": "^2.0.8",
- "@mui/types": "^7.2.14",
- "@mui/utils": "^6.0.0-alpha.1",
- "@popperjs/core": "^2.11.8",
- "clsx": "^2.1.0",
- "prop-types": "^15.8.1"
+ "@babel/runtime": "^7.28.4"
},
"engines": {
- "node": ">=12.0.0"
+ "node": ">=14.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/mui-org"
},
"peerDependencies": {
- "@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": "^7.3.4",
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -4798,58 +4808,21 @@
}
}
},
- "node_modules/@mui/core-downloads-tracker": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.5.0.tgz",
- "integrity": "sha512-LGb8t8i6M2ZtS3Drn3GbTI1DVhDY6FJ9crEey2lZ0aN2EMZo8IZBZj9wRf4vqbZHaWjsYgtbOnJw5V8UWbmK2Q==",
- "license": "MIT",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/mui-org"
- }
- },
- "node_modules/@mui/icons-material": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.5.0.tgz",
- "integrity": "sha512-VPuPqXqbBPlcVSA0BmnoE4knW4/xG6Thazo8vCLWkOKusko6DtwFV6B665MMWJ9j0KFohTIf3yx2zYtYacvG1g==",
- "license": "MIT",
- "dependencies": {
- "@babel/runtime": "^7.26.0"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/mui-org"
- },
- "peerDependencies": {
- "@mui/material": "^6.5.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
- }
- }
- },
- "node_modules/@mui/lab": {
- "version": "6.0.0-dev.240424162023-9968b4889d",
- "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-6.0.0-dev.240424162023-9968b4889d.tgz",
- "integrity": "sha512-iKFAz7/EeWI4PaFsP4jK2FcYJmUYDBkn3XZwpQSAl5806yYq5J2U2mPQLuZBdhrH50gT2O98p95i3vwL4YBwAg==",
+ "node_modules/@mui/lab": {
+ "version": "7.0.1-beta.18",
+ "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-7.0.1-beta.18.tgz",
+ "integrity": "sha512-LC+Eki92aW9/8uUS2RNqo3yytdMlUiIzV3tKvaZVabzecHncyiItAk12SNSqV+U4Pu+TUKqEM9Y5lShAUtuLPQ==",
"license": "MIT",
"dependencies": {
- "@babel/runtime": "^7.24.4",
- "@mui/base": "5.0.0-beta.42",
- "@mui/system": "^6.0.0-dev.240424162023-9968b4889d",
- "@mui/types": "^7.2.14",
- "@mui/utils": "^6.0.0-alpha.3",
- "clsx": "^2.1.0",
+ "@babel/runtime": "^7.28.4",
+ "@mui/system": "^7.3.3",
+ "@mui/types": "^7.4.7",
+ "@mui/utils": "^7.3.3",
+ "clsx": "^2.1.1",
"prop-types": "^15.8.1"
},
"engines": {
- "node": ">=12.0.0"
+ "node": ">=14.0.0"
},
"funding": {
"type": "opencollective",
@@ -4858,10 +4831,11 @@
"peerDependencies": {
"@emotion/react": "^11.5.0",
"@emotion/styled": "^11.3.0",
- "@mui/material": "^6.0.0-dev.240424162023-9968b4889d",
- "@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": "^7.3.4",
+ "@mui/material-pigment-css": "^7.3.3",
+ "@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": {
@@ -4870,28 +4844,31 @@
"@emotion/styled": {
"optional": true
},
+ "@mui/material-pigment-css": {
+ "optional": true
+ },
"@types/react": {
"optional": true
}
}
},
"node_modules/@mui/material": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.5.0.tgz",
- "integrity": "sha512-yjvtXoFcrPLGtgKRxFaH6OQPtcLPhkloC0BML6rBG5UeldR0nPULR/2E2BfXdo5JNV7j7lOzrrLX2Qf/iSidow==",
+ "version": "7.3.4",
+ "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.3.4.tgz",
+ "integrity": "sha512-gEQL9pbJZZHT7lYJBKQCS723v1MGys2IFc94COXbUIyCTWa+qC77a7hUax4Yjd5ggEm35dk4AyYABpKKWC4MLw==",
"license": "MIT",
"dependencies": {
- "@babel/runtime": "^7.26.0",
- "@mui/core-downloads-tracker": "^6.5.0",
- "@mui/system": "^6.5.0",
- "@mui/types": "~7.2.24",
- "@mui/utils": "^6.4.9",
+ "@babel/runtime": "^7.28.4",
+ "@mui/core-downloads-tracker": "^7.3.4",
+ "@mui/system": "^7.3.3",
+ "@mui/types": "^7.4.7",
+ "@mui/utils": "^7.3.3",
"@popperjs/core": "^2.11.8",
"@types/react-transition-group": "^4.4.12",
"clsx": "^2.1.1",
"csstype": "^3.1.3",
"prop-types": "^15.8.1",
- "react-is": "^19.0.0",
+ "react-is": "^19.1.1",
"react-transition-group": "^4.4.5"
},
"engines": {
@@ -4904,7 +4881,7 @@
"peerDependencies": {
"@emotion/react": "^11.5.0",
"@emotion/styled": "^11.3.0",
- "@mui/material-pigment-css": "^6.5.0",
+ "@mui/material-pigment-css": "^7.3.3",
"@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"
@@ -4924,28 +4901,14 @@
}
}
},
- "node_modules/@mui/material/node_modules/@mui/types": {
- "version": "7.2.24",
- "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.24.tgz",
- "integrity": "sha512-3c8tRt/CbWZ+pEg7QpSwbdxOk36EfmhbKf6AGZsD1EcLDLTSZoxxJ86FVtcjxvjuhdyBiWKSTGZFaXCnidO2kw==",
- "license": "MIT",
- "peerDependencies": {
- "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
"node_modules/@mui/private-theming": {
- "version": "6.4.9",
- "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.4.9.tgz",
- "integrity": "sha512-LktcVmI5X17/Q5SkwjCcdOLBzt1hXuc14jYa7NPShog0GBDCDvKtcnP0V7a2s6EiVRlv7BzbWEJzH6+l/zaCxw==",
+ "version": "7.3.3",
+ "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.3.3.tgz",
+ "integrity": "sha512-OJM+9nj5JIyPUvsZ5ZjaeC9PfktmK+W5YaVLToLR8L0lB/DGmv1gcKE43ssNLSvpoW71Hct0necfade6+kW3zQ==",
"license": "MIT",
"dependencies": {
- "@babel/runtime": "^7.26.0",
- "@mui/utils": "^6.4.9",
+ "@babel/runtime": "^7.28.4",
+ "@mui/utils": "^7.3.3",
"prop-types": "^15.8.1"
},
"engines": {
@@ -4966,13 +4929,13 @@
}
},
"node_modules/@mui/styled-engine": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.5.0.tgz",
- "integrity": "sha512-8woC2zAqF4qUDSPIBZ8v3sakj+WgweolpyM/FXf8jAx6FMls+IE4Y8VDZc+zS805J7PRz31vz73n2SovKGaYgw==",
+ "version": "7.3.3",
+ "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.3.3.tgz",
+ "integrity": "sha512-CmFxvRJIBCEaWdilhXMw/5wFJ1+FT9f3xt+m2pPXhHPeVIbBg9MnMvNSJjdALvnQJMPw8jLhrUtXmN7QAZV2fw==",
"license": "MIT",
"dependencies": {
- "@babel/runtime": "^7.26.0",
- "@emotion/cache": "^11.13.5",
+ "@babel/runtime": "^7.28.4",
+ "@emotion/cache": "^11.14.0",
"@emotion/serialize": "^1.3.3",
"@emotion/sheet": "^1.4.0",
"csstype": "^3.1.3",
@@ -5000,16 +4963,16 @@
}
},
"node_modules/@mui/system": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.5.0.tgz",
- "integrity": "sha512-XcbBYxDS+h/lgsoGe78ExXFZXtuIlSBpn/KsZq8PtZcIkUNJInkuDqcLd2rVBQrDC1u+rvVovdaWPf2FHKJf3w==",
+ "version": "7.3.3",
+ "resolved": "https://registry.npmjs.org/@mui/system/-/system-7.3.3.tgz",
+ "integrity": "sha512-Lqq3emZr5IzRLKaHPuMaLBDVaGvxoh6z7HMWd1RPKawBM5uMRaQ4ImsmmgXWtwJdfZux5eugfDhXJUo2mliS8Q==",
"license": "MIT",
"dependencies": {
- "@babel/runtime": "^7.26.0",
- "@mui/private-theming": "^6.4.9",
- "@mui/styled-engine": "^6.5.0",
- "@mui/types": "~7.2.24",
- "@mui/utils": "^6.4.9",
+ "@babel/runtime": "^7.28.4",
+ "@mui/private-theming": "^7.3.3",
+ "@mui/styled-engine": "^7.3.3",
+ "@mui/types": "^7.4.7",
+ "@mui/utils": "^7.3.3",
"clsx": "^2.1.1",
"csstype": "^3.1.3",
"prop-types": "^15.8.1"
@@ -5039,27 +5002,13 @@
}
}
},
- "node_modules/@mui/system/node_modules/@mui/types": {
- "version": "7.2.24",
- "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.24.tgz",
- "integrity": "sha512-3c8tRt/CbWZ+pEg7QpSwbdxOk36EfmhbKf6AGZsD1EcLDLTSZoxxJ86FVtcjxvjuhdyBiWKSTGZFaXCnidO2kw==",
- "license": "MIT",
- "peerDependencies": {
- "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
"node_modules/@mui/types": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.4.tgz",
- "integrity": "sha512-p63yhbX52MO/ajXC7hDHJA5yjzJekvWD3q4YDLl1rSg+OXLczMYPvTuSuviPRCgRX8+E42RXz1D/dz9SxPSlWg==",
+ "version": "7.4.7",
+ "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.7.tgz",
+ "integrity": "sha512-8vVje9rdEr1rY8oIkYgP+Su5Kwl6ik7O3jQ0wl78JGSmiZhRHV+vkjooGdKD8pbtZbutXFVTWQYshu2b3sG9zw==",
"license": "MIT",
"dependencies": {
- "@babel/runtime": "^7.27.6"
+ "@babel/runtime": "^7.28.4"
},
"peerDependencies": {
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0"
@@ -5071,17 +5020,17 @@
}
},
"node_modules/@mui/utils": {
- "version": "6.4.9",
- "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.4.9.tgz",
- "integrity": "sha512-Y12Q9hbK9g+ZY0T3Rxrx9m2m10gaphDuUMgWxyV5kNJevVxXYCLclYUCC9vXaIk1/NdNDTcW2Yfr2OGvNFNmHg==",
+ "version": "7.3.3",
+ "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.3.3.tgz",
+ "integrity": "sha512-kwNAUh7bLZ7mRz9JZ+6qfRnnxbE4Zuc+RzXnhSpRSxjTlSTj7b4JxRLXpG+MVtPVtqks5k/XC8No1Vs3x4Z2gg==",
"license": "MIT",
"dependencies": {
- "@babel/runtime": "^7.26.0",
- "@mui/types": "~7.2.24",
- "@types/prop-types": "^15.7.14",
+ "@babel/runtime": "^7.28.4",
+ "@mui/types": "^7.4.7",
+ "@types/prop-types": "^15.7.15",
"clsx": "^2.1.1",
"prop-types": "^15.8.1",
- "react-is": "^19.0.0"
+ "react-is": "^19.1.1"
},
"engines": {
"node": ">=14.0.0"
@@ -5100,20 +5049,94 @@
}
}
},
- "node_modules/@mui/utils/node_modules/@mui/types": {
- "version": "7.2.24",
- "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.24.tgz",
- "integrity": "sha512-3c8tRt/CbWZ+pEg7QpSwbdxOk36EfmhbKf6AGZsD1EcLDLTSZoxxJ86FVtcjxvjuhdyBiWKSTGZFaXCnidO2kw==",
+ "node_modules/@mui/x-date-pickers": {
+ "version": "8.12.0",
+ "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-8.12.0.tgz",
+ "integrity": "sha512-CDcjdBNwMcTy3flZTCKZqSUS6deBFGKLqy3Vl6bgr5KTo8Vky2v+S+zNi56fv23Qs+P47GwpILcm3QZt/0BP0A==",
"license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.28.2",
+ "@mui/utils": "^7.3.2",
+ "@mui/x-internals": "8.12.0",
+ "@types/react-transition-group": "^4.4.12",
+ "clsx": "^2.1.1",
+ "prop-types": "^15.8.1",
+ "react-transition-group": "^4.4.5"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ },
"peerDependencies": {
- "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0"
+ "@emotion/react": "^11.9.0",
+ "@emotion/styled": "^11.8.1",
+ "@mui/material": "^5.15.14 || ^6.0.0 || ^7.0.0",
+ "@mui/system": "^5.15.14 || ^6.0.0 || ^7.0.0",
+ "date-fns": "^2.25.0 || ^3.2.0 || ^4.0.0",
+ "date-fns-jalali": "^2.13.0-0 || ^3.2.0-0 || ^4.0.0-0",
+ "dayjs": "^1.10.7",
+ "luxon": "^3.0.2",
+ "moment": "^2.29.4",
+ "moment-hijri": "^2.1.2 || ^3.0.0",
+ "moment-jalaali": "^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.0",
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
},
"peerDependenciesMeta": {
- "@types/react": {
+ "@emotion/react": {
+ "optional": true
+ },
+ "@emotion/styled": {
+ "optional": true
+ },
+ "date-fns": {
+ "optional": true
+ },
+ "date-fns-jalali": {
+ "optional": true
+ },
+ "dayjs": {
+ "optional": true
+ },
+ "luxon": {
+ "optional": true
+ },
+ "moment": {
+ "optional": true
+ },
+ "moment-hijri": {
+ "optional": true
+ },
+ "moment-jalaali": {
"optional": true
}
}
},
+ "node_modules/@mui/x-internals": {
+ "version": "8.12.0",
+ "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-8.12.0.tgz",
+ "integrity": "sha512-KCZgFHwuPg0v8I2gpjeC6k3eDRXPPX8RIGSNDXe8zSZ8dAw+p6Q2pzT9kKvctqCXSFK8ct/5YQwqx8Quhs8Ndg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.28.2",
+ "@mui/utils": "^7.3.2",
+ "reselect": "^5.1.1",
+ "use-sync-external-store": "^1.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ },
+ "peerDependencies": {
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
"node_modules/@nicolo-ribaudo/eslint-scope-5-internals": {
"version": "5.1.1-v1",
"resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz",
@@ -5447,15 +5470,15 @@
"license": "MIT"
},
"node_modules/@rushstack/eslint-patch": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.12.0.tgz",
- "integrity": "sha512-5EwMtOqvJMMa3HbmxLlF74e+3/HhwBTMcvt3nqVJgGCozO6hzIPOBlwm8mGVNR9SN2IJpxSnlxczyDjcn7qIyw==",
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.13.0.tgz",
+ "integrity": "sha512-2ih5qGw5SZJ+2fLZxP6Lr6Na2NTIgPRL/7Kmyuw0uIyBQnuhQ8fi8fzUTd38eIQmqp+GYLC00cI6WgtqHxBwmw==",
"license": "MIT"
},
"node_modules/@sinclair/typebox": {
- "version": "0.34.38",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.38.tgz",
- "integrity": "sha512-HpkxMmc2XmZKhvaKIZZThlHmx1L0I/V1hWK1NubtlFnr6ZqdiOpV72TKudZUNQjZNsyDBay72qFEhEvb+bcwcA==",
+ "version": "0.34.41",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.41.tgz",
+ "integrity": "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==",
"license": "MIT"
},
"node_modules/@sinonjs/commons": {
@@ -5718,48 +5741,100 @@
"url": "https://github.com/sponsors/gregberge"
}
},
- "node_modules/@testing-library/dom": {
- "version": "8.20.1",
- "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz",
- "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==",
+ "node_modules/@tanstack/match-sorter-utils": {
+ "version": "8.19.4",
+ "resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.19.4.tgz",
+ "integrity": "sha512-Wo1iKt2b9OT7d+YGhvEPD3DXvPv2etTusIMhMUoG7fbhmxcXCtIjJDEygy91Y2JFlwGyjqiBPRozme7UD8hoqg==",
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.10.4",
- "@babel/runtime": "^7.12.5",
- "@types/aria-query": "^5.0.1",
- "aria-query": "5.1.3",
- "chalk": "^4.1.0",
- "dom-accessibility-api": "^0.5.9",
- "lz-string": "^1.5.0",
- "pretty-format": "^27.0.2"
+ "remove-accents": "0.5.0"
},
"engines": {
"node": ">=12"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
}
},
- "node_modules/@testing-library/dom/node_modules/aria-query": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz",
- "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==",
- "license": "Apache-2.0",
+ "node_modules/@tanstack/react-table": {
+ "version": "8.20.6",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.20.6.tgz",
+ "integrity": "sha512-w0jluT718MrOKthRcr2xsjqzx+oEM7B7s/XXyfs19ll++hlId3fjTm+B2zrR3ijpANpkzBAr15j1XGVOMxpggQ==",
+ "license": "MIT",
"dependencies": {
- "deep-equal": "^2.0.5"
+ "@tanstack/table-core": "8.20.5"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ },
+ "peerDependencies": {
+ "react": ">=16.8",
+ "react-dom": ">=16.8"
}
},
- "node_modules/@testing-library/dom/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/@tanstack/react-virtual": {
+ "version": "3.11.2",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.11.2.tgz",
+ "integrity": "sha512-OuFzMXPF4+xZgx8UzJha0AieuMihhhaWG0tCqpp6tDzlFwOmNBPYMuLOtMJ1Tr4pXLHmgjcWhG6RlknY2oNTdQ==",
"license": "MIT",
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "@tanstack/virtual-core": "3.11.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
},
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/@tanstack/table-core": {
+ "version": "8.20.5",
+ "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.20.5.tgz",
+ "integrity": "sha512-P9dF7XbibHph2PFRz8gfBKEXEY/HJPOhym8CHmjF8y3q5mWpKx9xtZapXQUWCgkqvsK0R46Azuz+VaxD4Xl+Tg==",
+ "license": "MIT",
"engines": {
- "node": ">=10"
+ "node": ">=12"
},
"funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ }
+ },
+ "node_modules/@tanstack/virtual-core": {
+ "version": "3.11.2",
+ "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.11.2.tgz",
+ "integrity": "sha512-vTtpNt7mKCiZ1pwU9hfKPhpdVO2sVzFQsxoVBGtOSHxlrRRzYr8iQ2TlwbAcRYCcEiZ9ECAM8kBzH0v2+VzfKw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ }
+ },
+ "node_modules/@testing-library/dom": {
+ "version": "10.4.1",
+ "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz",
+ "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/runtime": "^7.12.5",
+ "@types/aria-query": "^5.0.1",
+ "aria-query": "5.3.0",
+ "dom-accessibility-api": "^0.5.9",
+ "lz-string": "^1.5.0",
+ "picocolors": "1.1.1",
+ "pretty-format": "^27.0.2"
+ },
+ "engines": {
+ "node": ">=18"
}
},
"node_modules/@testing-library/jest-dom": {
@@ -5802,6 +5877,50 @@
"react-dom": "^18.0.0"
}
},
+ "node_modules/@testing-library/react/node_modules/@testing-library/dom": {
+ "version": "8.20.1",
+ "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz",
+ "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/runtime": "^7.12.5",
+ "@types/aria-query": "^5.0.1",
+ "aria-query": "5.1.3",
+ "chalk": "^4.1.0",
+ "dom-accessibility-api": "^0.5.9",
+ "lz-string": "^1.5.0",
+ "pretty-format": "^27.0.2"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@testing-library/react/node_modules/aria-query": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz",
+ "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "deep-equal": "^2.0.5"
+ }
+ },
+ "node_modules/@testing-library/react/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
"node_modules/@testing-library/user-event": {
"version": "13.5.0",
"resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz",
@@ -5967,21 +6086,9 @@
}
},
"node_modules/@types/express-serve-static-core": {
- "version": "5.0.7",
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.7.tgz",
- "integrity": "sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==",
- "license": "MIT",
- "dependencies": {
- "@types/node": "*",
- "@types/qs": "*",
- "@types/range-parser": "*",
- "@types/send": "*"
- }
- },
- "node_modules/@types/express/node_modules/@types/express-serve-static-core": {
- "version": "4.19.6",
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz",
- "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==",
+ "version": "4.19.7",
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz",
+ "integrity": "sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==",
"license": "MIT",
"dependencies": {
"@types/node": "*",
@@ -6079,9 +6186,9 @@
}
},
"node_modules/@types/jest/node_modules/pretty-format": {
- "version": "30.0.5",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.5.tgz",
- "integrity": "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz",
+ "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==",
"license": "MIT",
"dependencies": {
"@jest/schemas": "30.0.5",
@@ -6140,18 +6247,18 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "24.1.0",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-24.1.0.tgz",
- "integrity": "sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==",
+ "version": "24.7.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.7.0.tgz",
+ "integrity": "sha512-IbKooQVqUBrlzWTi79E8Fw78l8k1RNtlDDNWsFZs7XonuQSJ8oNYfEeclhprUldXISRMLzBpILuKgPlIxm+/Yw==",
"license": "MIT",
"dependencies": {
- "undici-types": "~7.8.0"
+ "undici-types": "~7.14.0"
}
},
"node_modules/@types/node-forge": {
- "version": "1.3.13",
- "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.13.tgz",
- "integrity": "sha512-zePQJSW5QkwSHKRApqWCVKeKoSOt4xvEnLENZPjyvm9Ezdf/EyDeJM7jqLzOwjVICQQzvLZ63T55MKdJB5H6ww==",
+ "version": "1.3.14",
+ "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz",
+ "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==",
"license": "MIT",
"dependencies": {
"@types/node": "*"
@@ -6194,9 +6301,9 @@
"license": "MIT"
},
"node_modules/@types/react": {
- "version": "18.3.24",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.24.tgz",
- "integrity": "sha512-0dLEBsA1kI3OezMBF8nSsb7Nk19ZnsyE1LLhB8r27KbgU5H4pvuqZLdtE+aUkJVoXgTVuA+iLIwmZ0TuK4tx6A==",
+ "version": "18.3.26",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.26.tgz",
+ "integrity": "sha512-RFA/bURkcKzx/X9oumPG9Vp3D3JUgus/d0b67KB0t5S/raciymilkOa66olh78MUI92QLbEJevO7rvqU/kjwKA==",
"license": "MIT",
"peer": true,
"dependencies": {
@@ -6253,6 +6360,29 @@
"node": ">= 0.12"
}
},
+ "node_modules/@types/request/node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/@types/request/node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/@types/resolve": {
"version": "1.17.1",
"resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
@@ -6269,18 +6399,17 @@
"license": "MIT"
},
"node_modules/@types/semver": {
- "version": "7.7.0",
- "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.0.tgz",
- "integrity": "sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==",
+ "version": "7.7.1",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz",
+ "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==",
"license": "MIT"
},
"node_modules/@types/send": {
- "version": "0.17.5",
- "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz",
- "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.0.tgz",
+ "integrity": "sha512-zBF6vZJn1IaMpg3xUF25VK3gd3l8zwE0ZLRX7dsQyQi+jp4E8mMDJNGDYnYse+bQhYwWERTxVwHpi3dMOq7RKQ==",
"license": "MIT",
"dependencies": {
- "@types/mime": "^1",
"@types/node": "*"
}
},
@@ -6294,14 +6423,24 @@
}
},
"node_modules/@types/serve-static": {
- "version": "1.15.8",
- "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz",
- "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==",
+ "version": "1.15.9",
+ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.9.tgz",
+ "integrity": "sha512-dOTIuqpWLyl3BBXU3maNQsS4A3zuuoYRNIvYSxxhebPfXg2mzWQEPne/nlJ37yOse6uGgR386uTpdsx4D0QZWA==",
"license": "MIT",
"dependencies": {
"@types/http-errors": "*",
"@types/node": "*",
- "@types/send": "*"
+ "@types/send": "<1"
+ }
+ },
+ "node_modules/@types/serve-static/node_modules/@types/send": {
+ "version": "0.17.5",
+ "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz",
+ "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mime": "^1",
+ "@types/node": "*"
}
},
"node_modules/@types/sockjs": {
@@ -6400,9 +6539,9 @@
}
},
"node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -6542,9 +6681,9 @@
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -6602,9 +6741,9 @@
}
},
"node_modules/@typescript-eslint/utils/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -6815,27 +6954,18 @@
}
},
"node_modules/accepts": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
- "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz",
+ "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==",
"license": "MIT",
"dependencies": {
- "mime-types": "~2.1.34",
- "negotiator": "0.6.3"
+ "mime-types": "^3.0.0",
+ "negotiator": "^1.0.0"
},
"engines": {
"node": ">= 0.6"
}
},
- "node_modules/accepts/node_modules/negotiator": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
- "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/acorn": {
"version": "8.15.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
@@ -6923,15 +7053,12 @@
}
},
"node_modules/agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
+ "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
"license": "MIT",
- "dependencies": {
- "debug": "4"
- },
"engines": {
- "node": ">= 6.0.0"
+ "node": ">= 14"
}
},
"node_modules/ajv": {
@@ -7092,21 +7219,18 @@
"license": "MIT"
},
"node_modules/argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "license": "MIT",
- "dependencies": {
- "sprintf-js": "~1.0.2"
- }
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "license": "Python-2.0"
},
"node_modules/aria-query": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
- "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
+ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
"license": "Apache-2.0",
- "engines": {
- "node": ">= 0.4"
+ "dependencies": {
+ "dequal": "^2.0.3"
}
},
"node_modules/array-buffer-byte-length": {
@@ -7754,6 +7878,15 @@
],
"license": "MIT"
},
+ "node_modules/baseline-browser-mapping": {
+ "version": "2.8.13",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.13.tgz",
+ "integrity": "sha512-7s16KR8io8nIBWQyCYhmFhd+ebIzb9VKTzki+wOJXHTxTnV6+mFGH3+Jwn1zoKaY9/H9T/0BcKCZnzXljPnpSQ==",
+ "license": "Apache-2.0",
+ "bin": {
+ "baseline-browser-mapping": "dist/cli.js"
+ }
+ },
"node_modules/batch": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
@@ -7877,9 +8010,9 @@
"license": "BSD-2-Clause"
},
"node_modules/browserslist": {
- "version": "4.25.1",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz",
- "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==",
+ "version": "4.26.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.3.tgz",
+ "integrity": "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==",
"funding": [
{
"type": "opencollective",
@@ -7896,9 +8029,10 @@
],
"license": "MIT",
"dependencies": {
- "caniuse-lite": "^1.0.30001726",
- "electron-to-chromium": "^1.5.173",
- "node-releases": "^2.0.19",
+ "baseline-browser-mapping": "^2.8.9",
+ "caniuse-lite": "^1.0.30001746",
+ "electron-to-chromium": "^1.5.227",
+ "node-releases": "^2.0.21",
"update-browserslist-db": "^1.1.3"
},
"bin": {
@@ -8050,9 +8184,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001731",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001731.tgz",
- "integrity": "sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==",
+ "version": "1.0.30001748",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001748.tgz",
+ "integrity": "sha512-5P5UgAr0+aBmNiplks08JLw+AW/XG/SurlgZLgB1dDLfAw7EfRGxIwzPHxdSCGY/BTKDqIVyJL87cCN6s0ZR0w==",
"funding": [
{
"type": "opencollective",
@@ -8152,9 +8286,9 @@
}
},
"node_modules/ci-info": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz",
- "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz",
+ "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==",
"funding": [
{
"type": "github",
@@ -8434,6 +8568,15 @@
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"license": "MIT"
},
+ "node_modules/compression/node_modules/negotiator": {
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz",
+ "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -8561,15 +8704,15 @@
}
},
"node_modules/convert-source-map": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
- "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
"license": "MIT"
},
"node_modules/cookie": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
- "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
+ "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
@@ -8585,9 +8728,9 @@
}
},
"node_modules/core-js": {
- "version": "3.44.0",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.44.0.tgz",
- "integrity": "sha512-aFCtd4l6GvAXwVEh3XbbVqJGHDJt0OZRa+5ePGx3LLwi12WfexqQxcsohb2wgsa/92xtl19Hd66G/L+TaAxDMw==",
+ "version": "3.45.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.45.1.tgz",
+ "integrity": "sha512-L4NPsJlCfZsPeXukyzHFlg/i7IIVwHSItR0wg0FLNqYClJ4MQYTYLbC7EkjKYRLZF2iof2MUgN0EGy7MdQFChg==",
"hasInstallScript": true,
"license": "MIT",
"funding": {
@@ -8596,12 +8739,12 @@
}
},
"node_modules/core-js-compat": {
- "version": "3.44.0",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.44.0.tgz",
- "integrity": "sha512-JepmAj2zfl6ogy34qfWtcE7nHKAJnKsQFRn++scjVS2bZFllwptzw61BZcZFYBPpUznLfAvh0LGhxKppk04ClA==",
+ "version": "3.45.1",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.45.1.tgz",
+ "integrity": "sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==",
"license": "MIT",
"dependencies": {
- "browserslist": "^4.25.1"
+ "browserslist": "^4.25.3"
},
"funding": {
"type": "opencollective",
@@ -8609,9 +8752,9 @@
}
},
"node_modules/core-js-pure": {
- "version": "3.44.0",
- "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.44.0.tgz",
- "integrity": "sha512-gvMQAGB4dfVUxpYD0k3Fq8J+n5bB6Ytl15lqlZrOIXFzxOhtPaObfkQGHtMRdyjIf7z2IeNULwi1jEwyS+ltKQ==",
+ "version": "3.45.1",
+ "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.45.1.tgz",
+ "integrity": "sha512-OHnWFKgTUshEU8MK+lOs1H8kC8GkTi9Z1tvNkxrCcw9wl3MJIO7q2ld77wjWn4/xuGrVu2X+nME1iIIPBSdyEQ==",
"hasInstallScript": true,
"license": "MIT",
"funding": {
@@ -8654,6 +8797,15 @@
"node": ">=10"
}
},
+ "node_modules/cosmiconfig/node_modules/yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/cross-spawn": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
@@ -8761,9 +8913,9 @@
}
},
"node_modules/css-loader/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -9000,6 +9152,15 @@
"postcss": "^8.2.15"
}
},
+ "node_modules/cssnano/node_modules/yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/csso": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz",
@@ -9090,6 +9251,32 @@
"node": ">=10"
}
},
+ "node_modules/data-urls/node_modules/tr46": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
+ "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
+ "license": "MIT",
+ "dependencies": {
+ "punycode": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/data-urls/node_modules/whatwg-url": {
+ "version": "8.7.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
+ "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
+ "license": "MIT",
+ "dependencies": {
+ "lodash": "^4.7.0",
+ "tr46": "^2.1.0",
+ "webidl-conversions": "^6.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/data-view-buffer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
@@ -9145,7 +9332,7 @@
"version": "2.30.0",
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz",
"integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==",
- "dev": true,
+ "devOptional": true,
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.21.0"
@@ -9158,10 +9345,16 @@
"url": "https://opencollective.com/date-fns"
}
},
+ "node_modules/dayjs": {
+ "version": "1.11.18",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.18.tgz",
+ "integrity": "sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==",
+ "license": "MIT"
+ },
"node_modules/debug": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
- "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
"license": "MIT",
"dependencies": {
"ms": "^2.1.3"
@@ -9307,6 +9500,15 @@
"node": ">= 0.8"
}
},
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/destroy": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
@@ -9534,9 +9736,9 @@
}
},
"node_modules/dotenv": {
- "version": "17.2.1",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.1.tgz",
- "integrity": "sha512-kQhDYKZecqnM0fCnzI5eIv5L4cAe/iRI+HqMbO/hbRdTAeXDG+M9FjipUxNfbARuEg4iHIbhnhs78BCHNbSxEQ==",
+ "version": "17.2.3",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz",
+ "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==",
"license": "BSD-2-Clause",
"engines": {
"node": ">=12"
@@ -9621,9 +9823,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.5.194",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.194.tgz",
- "integrity": "sha512-SdnWJwSUot04UR51I2oPD8kuP2VI37/CADR1OHsFOUzZIvfWJBO6q11k5P/uKNyTT3cdOsnyjkrZ+DDShqYqJA==",
+ "version": "1.5.232",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.232.tgz",
+ "integrity": "sha512-ENirSe7wf8WzyPCibqKUG1Cg43cPaxH4wRR7AJsX7MCABCHBIOFqvaYODSLKUuZdraxUTHRE/0A2Aq8BYKEHOg==",
"license": "ISC"
},
"node_modules/emittery": {
@@ -9673,9 +9875,9 @@
}
},
"node_modules/enhanced-resolve": {
- "version": "5.18.2",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz",
- "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==",
+ "version": "5.18.3",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz",
+ "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==",
"license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.4",
@@ -9695,9 +9897,9 @@
}
},
"node_modules/error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz",
+ "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==",
"license": "MIT",
"dependencies": {
"is-arrayish": "^0.2.1"
@@ -10226,6 +10428,15 @@
"eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9"
}
},
+ "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
+ "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/eslint-plugin-react": {
"version": "7.37.5",
"resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz",
@@ -10412,12 +10623,6 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/eslint/node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "license": "Python-2.0"
- },
"node_modules/eslint/node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -10434,85 +10639,12 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/eslint/node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "license": "MIT",
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint/node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
"node_modules/eslint/node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"license": "MIT"
},
- "node_modules/eslint/node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "license": "MIT",
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint/node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "license": "MIT",
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint/node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "license": "MIT",
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/espree": {
"version": "9.6.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
@@ -10657,22 +10789,31 @@
}
},
"node_modules/expect": {
- "version": "30.0.5",
- "resolved": "https://registry.npmjs.org/expect/-/expect-30.0.5.tgz",
- "integrity": "sha512-P0te2pt+hHI5qLJkIR+iMvS+lYUZml8rKKsohVHAGY+uClp9XVbdyYNJOIjSRpHVp8s8YqxJCiHUkSYZGr8rtQ==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-30.2.0.tgz",
+ "integrity": "sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==",
"license": "MIT",
"dependencies": {
- "@jest/expect-utils": "30.0.5",
- "@jest/get-type": "30.0.1",
- "jest-matcher-utils": "30.0.5",
- "jest-message-util": "30.0.5",
- "jest-mock": "30.0.5",
- "jest-util": "30.0.5"
+ "@jest/expect-utils": "30.2.0",
+ "@jest/get-type": "30.1.0",
+ "jest-matcher-utils": "30.2.0",
+ "jest-message-util": "30.2.0",
+ "jest-mock": "30.2.0",
+ "jest-util": "30.2.0"
},
"engines": {
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
+ "node_modules/export-to-csv": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/export-to-csv/-/export-to-csv-1.4.0.tgz",
+ "integrity": "sha512-6CX17Cu+rC2Fi2CyZ4CkgVG3hLl6BFsdAxfXiZkmDFIDY4mRx2y2spdeH6dqPHI9rP+AsHEfGeKz84Uuw7+Pmg==",
+ "license": "MIT",
+ "engines": {
+ "node": "^v12.20.0 || >=v14.13.0"
+ }
+ },
"node_modules/express": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz",
@@ -10715,49 +10856,6 @@
"url": "https://opencollective.com/express"
}
},
- "node_modules/express/node_modules/accepts": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz",
- "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==",
- "license": "MIT",
- "dependencies": {
- "mime-types": "^3.0.0",
- "negotiator": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/express/node_modules/mime-db": {
- "version": "1.54.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
- "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/express/node_modules/mime-types": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz",
- "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==",
- "license": "MIT",
- "dependencies": {
- "mime-db": "^1.54.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/express/node_modules/negotiator": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz",
- "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
@@ -10820,9 +10918,9 @@
"license": "MIT"
},
"node_modules/fast-uri": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz",
- "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz",
+ "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
"funding": [
{
"type": "github",
@@ -11057,16 +11155,19 @@
"license": "MIT"
},
"node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
"license": "MIT",
"dependencies": {
- "locate-path": "^5.0.0",
+ "locate-path": "^6.0.0",
"path-exists": "^4.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/firebase": {
@@ -11233,9 +11334,9 @@
}
},
"node_modules/firebase-admin/node_modules/@types/node": {
- "version": "22.18.4",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.4.tgz",
- "integrity": "sha512-UJdblFqXymSBhmZf96BnbisoFIr8ooiiBRMolQgg77Ea+VM37jXw76C2LQr9n8wm9+i/OvlUlW6xSvqwzwqznw==",
+ "version": "22.18.8",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.8.tgz",
+ "integrity": "sha512-pAZSHMiagDR7cARo/cch1f3rXy0AEXwsVsVH09FcyeJVAzCnGgmYis7P3JidtTUjyadhTeSo8TgRPswstghDaw==",
"license": "MIT",
"dependencies": {
"undici-types": "~6.21.0"
@@ -11247,17 +11348,26 @@
"integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
"license": "MIT"
},
- "node_modules/firebase-admin/node_modules/uuid": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz",
- "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist/esm/bin/uuid"
+ "node_modules/firebase/node_modules/@firebase/auth": {
+ "version": "1.7.9",
+ "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.7.9.tgz",
+ "integrity": "sha512-yLD5095kVgDw965jepMyUrIgDklD6qH/BZNHeKOgvu7pchOKNjVM+zQoOVYJIKWMWOWBq8IRNVU6NXzBbozaJg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@firebase/component": "0.6.9",
+ "@firebase/logger": "0.4.2",
+ "@firebase/util": "1.10.0",
+ "tslib": "^2.1.0",
+ "undici": "6.19.7"
+ },
+ "peerDependencies": {
+ "@firebase/app": "0.x",
+ "@react-native-async-storage/async-storage": "^1.18.1"
+ },
+ "peerDependenciesMeta": {
+ "@react-native-async-storage/async-storage": {
+ "optional": true
+ }
}
},
"node_modules/flat-cache": {
@@ -11488,9 +11598,9 @@
}
},
"node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -11508,6 +11618,15 @@
"node": ">=6"
}
},
+ "node_modules/fork-ts-checker-webpack-plugin/node_modules/yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/form-data": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.4.tgz",
@@ -11524,6 +11643,27 @@
"node": ">= 6"
}
},
+ "node_modules/form-data/node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/form-data/node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/formik": {
"version": "2.4.6",
"resolved": "https://registry.npmjs.org/formik/-/formik-2.4.6.tgz",
@@ -11681,28 +11821,6 @@
"node": ">=14"
}
},
- "node_modules/gaxios/node_modules/agent-base": {
- "version": "7.1.4",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
- "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/gaxios/node_modules/https-proxy-agent": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
- "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
- "license": "MIT",
- "dependencies": {
- "agent-base": "^7.1.2",
- "debug": "4"
- },
- "engines": {
- "node": ">= 14"
- }
- },
"node_modules/gaxios/node_modules/uuid": {
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
@@ -11730,6 +11848,15 @@
"node": ">=14"
}
},
+ "node_modules/generator-function": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz",
+ "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/gensync": {
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
@@ -11958,9 +12085,9 @@
}
},
"node_modules/goober": {
- "version": "2.1.16",
- "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.16.tgz",
- "integrity": "sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g==",
+ "version": "2.1.18",
+ "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.18.tgz",
+ "integrity": "sha512-2vFqsaDVIT9Gz7N6kAL++pLpp41l3PfDuusHcjnGLfR6+huZkl6ziX+zgVC3ZxpqWhzH6pyDdGrCeDhMIvwaxw==",
"license": "MIT",
"peerDependencies": {
"csstype": "^3.0.10"
@@ -12223,6 +12350,16 @@
"he": "bin/he"
}
},
+ "node_modules/highlight-words": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/highlight-words/-/highlight-words-2.0.0.tgz",
+ "integrity": "sha512-If5n+IhSBRXTScE7wl16VPmd+44Vy7kof24EdqhjsZsDuHikpv1OCagVcJFpB4fS4UPUniedlWqrjIO8vWOsIQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 20",
+ "npm": ">= 9"
+ }
+ },
"node_modules/hoist-non-react-statics": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
@@ -12351,9 +12488,9 @@
}
},
"node_modules/html-webpack-plugin": {
- "version": "5.6.3",
- "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz",
- "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==",
+ "version": "5.6.4",
+ "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.4.tgz",
+ "integrity": "sha512-V/PZeWsqhfpE27nKeX9EO2sbR+D17A+tLf6qU+ht66jdUsN0QLKJN27Z+1+gHrVMKgndBahes0PU6rRihDgHTw==",
"license": "MIT",
"dependencies": {
"@types/html-minifier-terser": "^6.0.0",
@@ -12466,6 +12603,18 @@
"node": ">= 6"
}
},
+ "node_modules/http-proxy-agent/node_modules/agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
"node_modules/http-proxy-middleware": {
"version": "2.0.9",
"resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz",
@@ -12491,16 +12640,16 @@
}
},
"node_modules/https-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
"license": "MIT",
"dependencies": {
- "agent-base": "6",
+ "agent-base": "^7.1.2",
"debug": "4"
},
"engines": {
- "node": ">= 6"
+ "node": ">= 14"
}
},
"node_modules/human-signals": {
@@ -12664,12 +12813,12 @@
}
},
"node_modules/ipaddr.js": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz",
- "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==",
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
"license": "MIT",
"engines": {
- "node": ">= 10"
+ "node": ">= 0.10"
}
},
"node_modules/is-arguments": {
@@ -12891,13 +13040,14 @@
}
},
"node_modules/is-generator-function": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz",
- "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz",
+ "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==",
"license": "MIT",
"dependencies": {
- "call-bound": "^1.0.3",
- "get-proto": "^1.0.0",
+ "call-bound": "^1.0.4",
+ "generator-function": "^2.0.0",
+ "get-proto": "^1.0.1",
"has-tostringtag": "^1.0.2",
"safe-regex-test": "^1.1.0"
},
@@ -13268,9 +13418,9 @@
}
},
"node_modules/istanbul-lib-report/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -13303,9 +13453,9 @@
}
},
"node_modules/istanbul-reports": {
- "version": "3.1.7",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz",
- "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz",
+ "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==",
"license": "BSD-3-Clause",
"dependencies": {
"html-escaper": "^2.0.0",
@@ -13348,15 +13498,14 @@
}
},
"node_modules/jake": {
- "version": "10.9.2",
- "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz",
- "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==",
+ "version": "10.9.4",
+ "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz",
+ "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==",
"license": "Apache-2.0",
"dependencies": {
- "async": "^3.2.3",
- "chalk": "^4.0.2",
+ "async": "^3.2.6",
"filelist": "^1.0.4",
- "minimatch": "^3.1.2"
+ "picocolors": "^1.1.1"
},
"bin": {
"jake": "bin/cli.js"
@@ -13365,22 +13514,6 @@
"node": ">=10"
}
},
- "node_modules/jake/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
"node_modules/jest": {
"version": "27.5.1",
"resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz",
@@ -13945,15 +14078,15 @@
}
},
"node_modules/jest-diff": {
- "version": "30.0.5",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.5.tgz",
- "integrity": "sha512-1UIqE9PoEKaHcIKvq2vbibrCog4Y8G0zmOxgQUVEiTqwR5hJVMCoDsN1vFvI5JvwD37hjueZ1C4l2FyGnfpE0A==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.2.0.tgz",
+ "integrity": "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==",
"license": "MIT",
"dependencies": {
"@jest/diff-sequences": "30.0.1",
- "@jest/get-type": "30.0.1",
+ "@jest/get-type": "30.1.0",
"chalk": "^4.1.2",
- "pretty-format": "30.0.5"
+ "pretty-format": "30.2.0"
},
"engines": {
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
@@ -13976,9 +14109,9 @@
}
},
"node_modules/jest-diff/node_modules/pretty-format": {
- "version": "30.0.5",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.5.tgz",
- "integrity": "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz",
+ "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==",
"license": "MIT",
"dependencies": {
"@jest/schemas": "30.0.5",
@@ -14672,15 +14805,15 @@
}
},
"node_modules/jest-matcher-utils": {
- "version": "30.0.5",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.0.5.tgz",
- "integrity": "sha512-uQgGWt7GOrRLP1P7IwNWwK1WAQbq+m//ZY0yXygyfWp0rJlksMSLQAA4wYQC3b6wl3zfnchyTx+k3HZ5aPtCbQ==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.2.0.tgz",
+ "integrity": "sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==",
"license": "MIT",
"dependencies": {
- "@jest/get-type": "30.0.1",
+ "@jest/get-type": "30.1.0",
"chalk": "^4.1.2",
- "jest-diff": "30.0.5",
- "pretty-format": "30.0.5"
+ "jest-diff": "30.2.0",
+ "pretty-format": "30.2.0"
},
"engines": {
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
@@ -14703,9 +14836,9 @@
}
},
"node_modules/jest-matcher-utils/node_modules/pretty-format": {
- "version": "30.0.5",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.5.tgz",
- "integrity": "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz",
+ "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==",
"license": "MIT",
"dependencies": {
"@jest/schemas": "30.0.5",
@@ -14735,18 +14868,18 @@
"license": "MIT"
},
"node_modules/jest-message-util": {
- "version": "30.0.5",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.5.tgz",
- "integrity": "sha512-NAiDOhsK3V7RU0Aa/HnrQo+E4JlbarbmI3q6Pi4KcxicdtjV82gcIUrejOtczChtVQR4kddu1E1EJlW6EN9IyA==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.2.0.tgz",
+ "integrity": "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==",
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.27.1",
- "@jest/types": "30.0.5",
+ "@jest/types": "30.2.0",
"@types/stack-utils": "^2.0.3",
"chalk": "^4.1.2",
"graceful-fs": "^4.2.11",
"micromatch": "^4.0.8",
- "pretty-format": "30.0.5",
+ "pretty-format": "30.2.0",
"slash": "^3.0.0",
"stack-utils": "^2.0.6"
},
@@ -14771,9 +14904,9 @@
}
},
"node_modules/jest-message-util/node_modules/pretty-format": {
- "version": "30.0.5",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.5.tgz",
- "integrity": "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz",
+ "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==",
"license": "MIT",
"dependencies": {
"@jest/schemas": "30.0.5",
@@ -14803,14 +14936,14 @@
"license": "MIT"
},
"node_modules/jest-mock": {
- "version": "30.0.5",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.5.tgz",
- "integrity": "sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.2.0.tgz",
+ "integrity": "sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==",
"license": "MIT",
"dependencies": {
- "@jest/types": "30.0.5",
+ "@jest/types": "30.2.0",
"@types/node": "*",
- "jest-util": "30.0.5"
+ "jest-util": "30.2.0"
},
"engines": {
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
@@ -15506,9 +15639,9 @@
}
},
"node_modules/jest-snapshot/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -15518,12 +15651,12 @@
}
},
"node_modules/jest-util": {
- "version": "30.0.5",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.5.tgz",
- "integrity": "sha512-pvyPWssDZR0FlfMxCBoc0tvM8iUEskaRFALUtGQYzVEAqisAztmy+R8LnU14KT4XA0H/a5HMVTXat1jLne010g==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.2.0.tgz",
+ "integrity": "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==",
"license": "MIT",
"dependencies": {
- "@jest/types": "30.0.5",
+ "@jest/types": "30.2.0",
"@types/node": "*",
"chalk": "^4.1.2",
"ci-info": "^4.2.0",
@@ -15930,9 +16063,9 @@
}
},
"node_modules/jest-watch-typeahead/node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
+ "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
"license": "MIT",
"dependencies": {
"ansi-regex": "^6.0.1"
@@ -15945,9 +16078,9 @@
}
},
"node_modules/jest-watch-typeahead/node_modules/strip-ansi/node_modules/ansi-regex": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
- "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+ "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
"license": "MIT",
"engines": {
"node": ">=12"
@@ -16113,13 +16246,12 @@
"license": "MIT"
},
"node_modules/js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"license": "MIT",
"dependencies": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
+ "argparse": "^2.0.1"
},
"bin": {
"js-yaml": "bin/js-yaml.js"
@@ -16171,6 +16303,57 @@
}
}
},
+ "node_modules/jsdom/node_modules/agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/jsdom/node_modules/https-proxy-agent": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/jsdom/node_modules/tr46": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
+ "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
+ "license": "MIT",
+ "dependencies": {
+ "punycode": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jsdom/node_modules/whatwg-url": {
+ "version": "8.7.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
+ "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
+ "license": "MIT",
+ "dependencies": {
+ "lodash": "^4.7.0",
+ "tr46": "^2.1.0",
+ "webidl-conversions": "^6.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/jsesc": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
@@ -16235,9 +16418,9 @@
}
},
"node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
+ "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
"license": "MIT",
"dependencies": {
"universalify": "^2.0.0"
@@ -16322,9 +16505,9 @@
}
},
"node_modules/jsonwebtoken/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -16441,9 +16624,9 @@
}
},
"node_modules/launch-editor": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.11.0.tgz",
- "integrity": "sha512-R/PIF14L6e2eHkhvQPu7jDRCr0msfCYCxbYiLgkkAGi0dVPWuM+RrsPu0a5dpuNe0KWGL3jpAkOlv53xGfPheQ==",
+ "version": "2.11.1",
+ "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.11.1.tgz",
+ "integrity": "sha512-SEET7oNfgSaB6Ym0jufAdCeo3meJVeCaaDyzRygy0xsp2BFKCprcfHljTq4QkzTLUxEKkFK6OK4811YM2oSrRg==",
"license": "MIT",
"dependencies": {
"picocolors": "^1.1.1",
@@ -16516,15 +16699,18 @@
}
},
"node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
"license": "MIT",
"dependencies": {
- "p-locate": "^4.1.0"
+ "p-locate": "^5.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/lodash": {
@@ -16748,6 +16934,34 @@
"tmpl": "1.0.5"
}
},
+ "node_modules/material-react-table": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/material-react-table/-/material-react-table-3.2.1.tgz",
+ "integrity": "sha512-sQtTf7bETpkPN2Hm5BVtz89wrfXCVQguz6XlwMChSnfKFO5QCKAJJC5aSIKnUc3S0AvTz/k/ILi00FnnY1Gixw==",
+ "license": "MIT",
+ "dependencies": {
+ "@tanstack/match-sorter-utils": "8.19.4",
+ "@tanstack/react-table": "8.20.6",
+ "@tanstack/react-virtual": "3.11.2",
+ "highlight-words": "2.0.0"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/kevinvandy"
+ },
+ "peerDependencies": {
+ "@emotion/react": ">=11.13",
+ "@emotion/styled": ">=11.13",
+ "@mui/icons-material": ">=6",
+ "@mui/material": ">=6",
+ "@mui/x-date-pickers": ">=7.15",
+ "react": ">=18.0",
+ "react-dom": ">=18.0"
+ }
+ },
"node_modules/math-intrinsics": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
@@ -16846,33 +17060,34 @@
}
},
"node_modules/mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz",
+ "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==",
"license": "MIT",
+ "optional": true,
"bin": {
"mime": "cli.js"
},
"engines": {
- "node": ">=4"
+ "node": ">=10.0.0"
}
},
"node_modules/mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "version": "1.54.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
+ "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz",
+ "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==",
"license": "MIT",
"dependencies": {
- "mime-db": "1.52.0"
+ "mime-db": "^1.54.0"
},
"engines": {
"node": ">= 0.6"
@@ -16897,9 +17112,9 @@
}
},
"node_modules/mini-css-extract-plugin": {
- "version": "2.9.2",
- "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz",
- "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==",
+ "version": "2.9.4",
+ "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.4.tgz",
+ "integrity": "sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ==",
"license": "MIT",
"dependencies": {
"schema-utils": "^4.0.0",
@@ -17025,9 +17240,9 @@
"license": "MIT"
},
"node_modules/negotiator": {
- "version": "0.6.4",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz",
- "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz",
+ "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
@@ -17069,28 +17284,6 @@
}
}
},
- "node_modules/node-fetch/node_modules/tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
- "license": "MIT"
- },
- "node_modules/node-fetch/node_modules/webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
- "license": "BSD-2-Clause"
- },
- "node_modules/node-fetch/node_modules/whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
- "license": "MIT",
- "dependencies": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
"node_modules/node-forge": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
@@ -17107,9 +17300,9 @@
"license": "MIT"
},
"node_modules/node-releases": {
- "version": "2.0.19",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
- "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
+ "version": "2.0.23",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.23.tgz",
+ "integrity": "sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==",
"license": "MIT"
},
"node_modules/normalize-path": {
@@ -17198,9 +17391,9 @@
}
},
"node_modules/nwsapi": {
- "version": "2.2.21",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.21.tgz",
- "integrity": "sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA==",
+ "version": "2.2.22",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.22.tgz",
+ "integrity": "sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==",
"license": "MIT"
},
"node_modules/object-assign": {
@@ -17467,30 +17660,33 @@
}
},
"node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"license": "MIT",
"dependencies": {
- "p-try": "^2.0.0"
+ "yocto-queue": "^0.1.0"
},
"engines": {
- "node": ">=6"
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
"license": "MIT",
"dependencies": {
- "p-limit": "^2.2.0"
+ "p-limit": "^3.0.2"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/p-retry": {
@@ -17642,12 +17838,13 @@
"license": "ISC"
},
"node_modules/path-to-regexp": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz",
- "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==",
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz",
+ "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==",
"license": "MIT",
- "engines": {
- "node": ">=16"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
}
},
"node_modules/path-type": {
@@ -17713,6 +17910,58 @@
"node": ">=8"
}
},
+ "node_modules/pkg-dir/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "license": "MIT",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/pkg-up": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz",
@@ -17750,6 +17999,21 @@
"node": ">=6"
}
},
+ "node_modules/pkg-up/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "license": "MIT",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/pkg-up/node_modules/p-locate": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
@@ -18228,9 +18492,19 @@
}
},
"node_modules/postcss-js": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
- "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz",
+ "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
"license": "MIT",
"dependencies": {
"camelcase-css": "^2.0.1"
@@ -18238,10 +18512,6 @@
"engines": {
"node": "^12 || ^14 || >= 16"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
"peerDependencies": {
"postcss": "^8.4.21"
}
@@ -18266,65 +18536,6 @@
"postcss": "^8.2"
}
},
- "node_modules/postcss-load-config": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
- "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "lilconfig": "^3.0.0",
- "yaml": "^2.3.4"
- },
- "engines": {
- "node": ">= 14"
- },
- "peerDependencies": {
- "postcss": ">=8.0.9",
- "ts-node": ">=9.0.0"
- },
- "peerDependenciesMeta": {
- "postcss": {
- "optional": true
- },
- "ts-node": {
- "optional": true
- }
- }
- },
- "node_modules/postcss-load-config/node_modules/lilconfig": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
- "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
- "license": "MIT",
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/antonk52"
- }
- },
- "node_modules/postcss-load-config/node_modules/yaml": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz",
- "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==",
- "license": "ISC",
- "bin": {
- "yaml": "bin.mjs"
- },
- "engines": {
- "node": ">= 14.6"
- }
- },
"node_modules/postcss-loader": {
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz",
@@ -18348,9 +18559,9 @@
}
},
"node_modules/postcss-loader/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -19229,9 +19440,9 @@
}
},
"node_modules/protobufjs": {
- "version": "7.5.3",
- "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.3.tgz",
- "integrity": "sha512-sildjKwVqOI2kmFDiXQ6aEB0fjYTafpEvIBs8tOR8qI4spuL9OPROLVu2qZqi/xgCfsHIwVqlaF8JBjWFHnKbw==",
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz",
+ "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==",
"hasInstallScript": true,
"license": "BSD-3-Clause",
"dependencies": {
@@ -19265,15 +19476,6 @@
"node": ">= 0.10"
}
},
- "node_modules/proxy-addr/node_modules/ipaddr.js": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.10"
- }
- },
"node_modules/psl": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz",
@@ -19375,18 +19577,34 @@
}
},
"node_modules/raw-body": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz",
- "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.1.tgz",
+ "integrity": "sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==",
"license": "MIT",
"dependencies": {
"bytes": "3.1.2",
"http-errors": "2.0.0",
- "iconv-lite": "0.6.3",
+ "iconv-lite": "0.7.0",
"unpipe": "1.0.0"
},
"engines": {
- "node": ">= 0.8"
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/raw-body/node_modules/iconv-lite": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz",
+ "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==",
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
}
},
"node_modules/react": {
@@ -19469,22 +19687,6 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/react-dev-utils/node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "license": "MIT",
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/react-dev-utils/node_modules/loader-utils": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz",
@@ -19494,51 +19696,6 @@
"node": ">= 12.13.0"
}
},
- "node_modules/react-dev-utils/node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "license": "MIT",
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/react-dev-utils/node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "license": "MIT",
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/react-dev-utils/node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "license": "MIT",
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/react-dom": {
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
@@ -19565,9 +19722,9 @@
"license": "MIT"
},
"node_modules/react-is": {
- "version": "19.1.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.1.tgz",
- "integrity": "sha512-tr41fA15Vn8p4X9ntI+yCyeGSf1TlYaY5vlTZfQmeLBrFo3psOPX6HhTDnFNL9uj3EhP0KAQ80cugCl4b4BERA==",
+ "version": "19.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.0.tgz",
+ "integrity": "sha512-x3Ax3kNSMIIkyVYhWPyO09bu0uttcAIoecO/um/rKGQ4EltYWVYtyiGkS/3xMynrbVQdS69Jhlv8FXUEZehlzA==",
"license": "MIT"
},
"node_modules/react-refresh": {
@@ -19694,9 +19851,9 @@
}
},
"node_modules/react-scripts/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -19822,9 +19979,9 @@
"license": "MIT"
},
"node_modules/regenerate-unicode-properties": {
- "version": "10.2.0",
- "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz",
- "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==",
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz",
+ "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==",
"license": "MIT",
"dependencies": {
"regenerate": "^1.4.2"
@@ -19866,17 +20023,17 @@
}
},
"node_modules/regexpu-core": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz",
- "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==",
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz",
+ "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==",
"license": "MIT",
"dependencies": {
"regenerate": "^1.4.2",
- "regenerate-unicode-properties": "^10.2.0",
+ "regenerate-unicode-properties": "^10.2.2",
"regjsgen": "^0.8.0",
- "regjsparser": "^0.12.0",
+ "regjsparser": "^0.13.0",
"unicode-match-property-ecmascript": "^2.0.0",
- "unicode-match-property-value-ecmascript": "^2.1.0"
+ "unicode-match-property-value-ecmascript": "^2.2.1"
},
"engines": {
"node": ">=4"
@@ -19889,29 +20046,17 @@
"license": "MIT"
},
"node_modules/regjsparser": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz",
- "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==",
+ "version": "0.13.0",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz",
+ "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==",
"license": "BSD-2-Clause",
"dependencies": {
- "jsesc": "~3.0.2"
+ "jsesc": "~3.1.0"
},
"bin": {
"regjsparser": "bin/parser"
}
},
- "node_modules/regjsparser/node_modules/jsesc": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
- "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
- "license": "MIT",
- "bin": {
- "jsesc": "bin/jsesc"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/relateurl": {
"version": "0.2.7",
"resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
@@ -19921,6 +20066,12 @@
"node": ">= 0.10"
}
},
+ "node_modules/remove-accents": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz",
+ "integrity": "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==",
+ "license": "MIT"
+ },
"node_modules/renderkid": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz",
@@ -19958,6 +20109,12 @@
"integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
"license": "MIT"
},
+ "node_modules/reselect": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz",
+ "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==",
+ "license": "MIT"
+ },
"node_modules/resolve": {
"version": "1.22.10",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
@@ -20036,6 +20193,12 @@
}
}
},
+ "node_modules/resolve-url-loader/node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "license": "MIT"
+ },
"node_modules/resolve-url-loader/node_modules/picocolors": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
@@ -20388,9 +20551,9 @@
}
},
"node_modules/schema-utils": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz",
- "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==",
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz",
+ "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==",
"license": "MIT",
"dependencies": {
"@types/json-schema": "^7.0.9",
@@ -20456,27 +20619,6 @@
"node": ">= 18"
}
},
- "node_modules/send/node_modules/mime-db": {
- "version": "1.54.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
- "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/send/node_modules/mime-types": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz",
- "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==",
- "license": "MIT",
- "dependencies": {
- "mime-db": "^1.54.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/serialize-javascript": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
@@ -20504,6 +20646,19 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/serve-index/node_modules/accepts": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/serve-index/node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -20543,12 +20698,42 @@
"integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
"license": "ISC"
},
+ "node_modules/serve-index/node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/serve-index/node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/serve-index/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"license": "MIT"
},
+ "node_modules/serve-index/node_modules/negotiator": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/serve-index/node_modules/setprototypeof": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
@@ -20768,6 +20953,15 @@
"websocket-driver": "^0.7.4"
}
},
+ "node_modules/sockjs/node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
"node_modules/source-list-map": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
@@ -21536,6 +21730,15 @@
"node": ">=4"
}
},
+ "node_modules/svgo/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "license": "MIT",
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
"node_modules/svgo/node_modules/chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
@@ -21633,6 +21836,19 @@
"node": ">=4"
}
},
+ "node_modules/svgo/node_modules/js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
"node_modules/svgo/node_modules/nth-check": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
@@ -21661,9 +21877,9 @@
"license": "MIT"
},
"node_modules/tailwindcss": {
- "version": "3.4.17",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz",
- "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==",
+ "version": "3.4.18",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.18.tgz",
+ "integrity": "sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==",
"license": "MIT",
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
@@ -21674,7 +21890,7 @@
"fast-glob": "^3.3.2",
"glob-parent": "^6.0.2",
"is-glob": "^4.0.3",
- "jiti": "^1.21.6",
+ "jiti": "^1.21.7",
"lilconfig": "^3.1.3",
"micromatch": "^4.0.8",
"normalize-path": "^3.0.0",
@@ -21683,7 +21899,7 @@
"postcss": "^8.4.47",
"postcss-import": "^15.1.0",
"postcss-js": "^4.0.1",
- "postcss-load-config": "^4.0.2",
+ "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0",
"postcss-nested": "^6.2.0",
"postcss-selector-parser": "^6.1.2",
"resolve": "^1.22.8",
@@ -21709,13 +21925,59 @@
"url": "https://github.com/sponsors/antonk52"
}
},
+ "node_modules/tailwindcss/node_modules/postcss-load-config": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz",
+ "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "lilconfig": "^3.1.1"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "jiti": ">=1.21.0",
+ "postcss": ">=8.0.9",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ },
+ "postcss": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ },
"node_modules/tapable": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz",
- "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz",
+ "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==",
"license": "MIT",
"engines": {
"node": ">=6"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
}
},
"node_modules/teeny-request": {
@@ -21745,6 +22007,19 @@
"node": ">= 10"
}
},
+ "node_modules/teeny-request/node_modules/agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
"node_modules/teeny-request/node_modules/http-proxy-agent": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
@@ -21760,6 +22035,20 @@
"node": ">= 6"
}
},
+ "node_modules/teeny-request/node_modules/https-proxy-agent": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/teeny-request/node_modules/uuid": {
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
@@ -21830,13 +22119,13 @@
}
},
"node_modules/terser": {
- "version": "5.43.1",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz",
- "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==",
+ "version": "5.44.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz",
+ "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==",
"license": "BSD-2-Clause",
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
- "acorn": "^8.14.0",
+ "acorn": "^8.15.0",
"commander": "^2.20.0",
"source-map-support": "~0.5.20"
},
@@ -22010,16 +22299,10 @@
}
},
"node_modules/tr46": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
- "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
- "license": "MIT",
- "dependencies": {
- "punycode": "^2.1.1"
- },
- "engines": {
- "node": ">=8"
- }
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
+ "license": "MIT"
},
"node_modules/tree-kill": {
"version": "1.2.2",
@@ -22150,27 +22433,6 @@
"node": ">= 0.6"
}
},
- "node_modules/type-is/node_modules/mime-db": {
- "version": "1.54.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
- "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/type-is/node_modules/mime-types": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz",
- "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==",
- "license": "MIT",
- "dependencies": {
- "mime-db": "^1.54.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/typed-array-buffer": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
@@ -22301,9 +22563,9 @@
}
},
"node_modules/undici-types": {
- "version": "7.8.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz",
- "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==",
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.14.0.tgz",
+ "integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==",
"license": "MIT"
},
"node_modules/unicode-canonical-property-names-ecmascript": {
@@ -22329,18 +22591,18 @@
}
},
"node_modules/unicode-match-property-value-ecmascript": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz",
- "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz",
+ "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==",
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/unicode-property-aliases-ecmascript": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
- "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz",
+ "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==",
"license": "MIT",
"engines": {
"node": ">=4"
@@ -22441,6 +22703,15 @@
"requires-port": "^1.0.0"
}
},
+ "node_modules/use-sync-external-store": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz",
+ "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -22478,12 +22749,16 @@
}
},
"node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz",
+ "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
"license": "MIT",
"bin": {
- "uuid": "dist/bin/uuid"
+ "uuid": "dist/esm/bin/uuid"
}
},
"node_modules/v8-to-istanbul": {
@@ -22500,6 +22775,12 @@
"node": ">=10.12.0"
}
},
+ "node_modules/v8-to-istanbul/node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "license": "MIT"
+ },
"node_modules/v8-to-istanbul/node_modules/source-map": {
"version": "0.7.6",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
@@ -22587,9 +22868,9 @@
}
},
"node_modules/webpack": {
- "version": "5.101.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.0.tgz",
- "integrity": "sha512-B4t+nJqytPeuZlHuIKTbalhljIFXeNRqrUGAQgTGlfOl2lXXKXw+yZu6bicycP+PUlM44CxBjCFD6aciKFT3LQ==",
+ "version": "5.102.1",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.102.1.tgz",
+ "integrity": "sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==",
"license": "MIT",
"dependencies": {
"@types/eslint-scope": "^3.7.7",
@@ -22600,9 +22881,9 @@
"@webassemblyjs/wasm-parser": "^1.14.1",
"acorn": "^8.15.0",
"acorn-import-phases": "^1.0.3",
- "browserslist": "^4.24.0",
+ "browserslist": "^4.26.3",
"chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.17.2",
+ "enhanced-resolve": "^5.17.3",
"es-module-lexer": "^1.2.1",
"eslint-scope": "5.1.1",
"events": "^3.2.0",
@@ -22612,10 +22893,10 @@
"loader-runner": "^4.2.0",
"mime-types": "^2.1.27",
"neo-async": "^2.6.2",
- "schema-utils": "^4.3.2",
- "tapable": "^2.1.1",
+ "schema-utils": "^4.3.3",
+ "tapable": "^2.3.0",
"terser-webpack-plugin": "^5.3.11",
- "watchpack": "^2.4.1",
+ "watchpack": "^2.4.4",
"webpack-sources": "^3.3.3"
},
"bin": {
@@ -22657,6 +22938,27 @@
"webpack": "^4.0.0 || ^5.0.0"
}
},
+ "node_modules/webpack-dev-middleware/node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/webpack-dev-middleware/node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/webpack-dev-server": {
"version": "4.15.2",
"resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz",
@@ -22716,6 +23018,19 @@
}
}
},
+ "node_modules/webpack-dev-server/node_modules/accepts": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/webpack-dev-server/node_modules/body-parser": {
"version": "1.20.3",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
@@ -22752,6 +23067,15 @@
"node": ">= 0.6"
}
},
+ "node_modules/webpack-dev-server/node_modules/cookie": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
+ "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/webpack-dev-server/node_modules/cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
@@ -22858,6 +23182,15 @@
"node": ">=0.10.0"
}
},
+ "node_modules/webpack-dev-server/node_modules/ipaddr.js": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz",
+ "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
"node_modules/webpack-dev-server/node_modules/media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -22876,6 +23209,48 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/webpack-dev-server/node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "license": "MIT",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/webpack-dev-server/node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/webpack-dev-server/node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/webpack-dev-server/node_modules/negotiator": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/webpack-dev-server/node_modules/path-to-regexp": {
"version": "0.1.12",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
@@ -23072,6 +23447,27 @@
"node": ">=4.0"
}
},
+ "node_modules/webpack/node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/webpack/node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/websocket-driver": {
"version": "0.7.4",
"resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
@@ -23129,19 +23525,21 @@
"license": "MIT"
},
"node_modules/whatwg-url": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
- "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
"license": "MIT",
"dependencies": {
- "lodash": "^4.7.0",
- "tr46": "^2.1.0",
- "webidl-conversions": "^6.1.0"
- },
- "engines": {
- "node": ">=10"
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
}
},
+ "node_modules/whatwg-url/node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
+ "license": "BSD-2-Clause"
+ },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -23638,12 +24036,15 @@
"license": "ISC"
},
"node_modules/yaml": {
- "version": "1.10.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
- "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz",
+ "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==",
"license": "ISC",
+ "bin": {
+ "yaml": "bin.mjs"
+ },
"engines": {
- "node": ">= 6"
+ "node": ">= 14.6"
}
},
"node_modules/yargs": {
@@ -23686,9 +24087,9 @@
}
},
"node_modules/yup": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/yup/-/yup-1.7.0.tgz",
- "integrity": "sha512-VJce62dBd+JQvoc+fCVq+KZfPHr+hXaxCcVgotfwWvlR0Ja3ffYKaJBT8rptPOSKOGJDCUnW2C2JWpud7aRP6Q==",
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/yup/-/yup-1.7.1.tgz",
+ "integrity": "sha512-GKHFX2nXul2/4Dtfxhozv701jLQHdf6J34YDh2cEkpqoo8le5Mg6/LrdseVLrFarmFygZTlfIhHx/QKfb/QWXw==",
"license": "MIT",
"dependencies": {
"property-expr": "^2.0.5",
diff --git a/mentor-match-app/package.json b/mentor-match-app/package.json
index 140e897..93f5c9e 100644
--- a/mentor-match-app/package.json
+++ b/mentor-match-app/package.json
@@ -6,32 +6,37 @@
"@chatscope/chat-ui-kit-react": "^2.1.1",
"@chatscope/chat-ui-kit-styles": "^1.4.0",
"@chatscope/use-chat": "^3.1.2",
- "@emotion/react": "^11.13.3",
- "@emotion/styled": "^11.13.0",
+ "@emotion/react": "^11.14.0",
+ "@emotion/styled": "^11.14.1",
"@fontsource-variable/onest": "^5.1.0",
- "@mui/icons-material": "^6.1.0",
- "@mui/lab": "^6.0.0-beta.9",
- "@mui/material": "^6.1.0",
+ "@mui/icons-material": "^7.3.4",
+ "@mui/lab": "^7.0.1-beta.18",
+ "@mui/material": "^7.3.4",
+ "@mui/x-date-pickers": "^8.12.0",
"@testing-library/jest-dom": "^5.17.0",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"ajv": "^8.17.1",
"ajv-keywords": "^5.1.0",
"cors": "^2.8.5",
+ "dayjs": "^1.11.18",
"dotenv": "^17.2.1",
+ "export-to-csv": "^1.4.0",
"express": "^5.1.0",
"firebase": "^10.13.1",
"firebase-admin": "^13.5.0",
"formik": "^2.4.6",
"lottie-react": "^2.4.1",
+ "material-react-table": "^3.2.1",
"node-fetch": "^2.6.7",
"notistack": "^3.0.1",
- "react": "^18.2.0",
- "react-dom": "^18.2.0",
+ "react": "18.2.0",
+ "react-dom": "18.2.0",
"react-router-dom": "^6.26.2",
"react-scripts": "5.0.1",
"web-vitals": "^2.1.4",
- "yup": "^1.4.0"
+ "yup": "^1.4.0",
+ "yaml": "^2.8.1"
},
"devDependencies": {
"@babel/plugin-proposal-private-property-in-object": "^7.18.6",
diff --git a/mentor-match-app/src/App.jsx b/mentor-match-app/src/App.jsx
index d42eb0a..63858e6 100644
--- a/mentor-match-app/src/App.jsx
+++ b/mentor-match-app/src/App.jsx
@@ -1,6 +1,10 @@
import './App.css'
import { BrowserRouter, Route, Routes, Outlet } from 'react-router-dom'
import { ThemeContextProvider } from './hooks/useTheme'
+import { UserProvider } from './hooks/useUser'
+import { CssBaseline } from '@mui/material'
+
+// Pages
import Dashboard from './pages/Dashboard'
import MenteeForm from './pages/MenteeForm'
import MentorForm from './pages/MentorForm'
@@ -8,15 +12,17 @@ import CombinedForm from './pages/CombinedForm'
import Login from './pages/Login'
import GetStarted from './pages/GetStarted'
import Signup from './pages/Signup'
-import { CssBaseline } from '@mui/material'
-import UnAuthPage from './components/UnAuthPage'
-import AuthPage from './components/AuthPage'
-import { UserProvider } from './hooks/useUser'
-import ErrorPage from './components/ErrorPage'
-import AdminRoute from './components/AdminRoute'
import AdminDashboard from './pages/AdminDashboard'
import MentorPick from './pages/MentorPick'
-import RootHandler from './components/RootHandler'
+import ErrorPage from './components/ErrorPage'
+import EditSurvey from './pages/EditSurvey'
+import Survey from './pages/Survey'
+
+// Authentication Handlers
+import RootHandler from './components/auth/RootHandler'
+import UnAuthPage from './components/auth/UnAuthPage'
+import AuthPage from './components/auth/AuthPage'
+import AdminRoute from './components/auth/AdminRoute'
function App() {
return (
@@ -56,6 +62,7 @@ function App() {
element={Couldn't find this form!}
/>
} />
+ } />
@@ -64,6 +71,7 @@ function App() {
}
>
} />
+ } />
diff --git a/mentor-match-app/src/api/forms.js b/mentor-match-app/src/api/forms.js
index 8cd6b30..13a5380 100644
--- a/mentor-match-app/src/api/forms.js
+++ b/mentor-match-app/src/api/forms.js
@@ -215,7 +215,7 @@ export const getFormAnswers = async (userId) => {
if (!mentorData && !menteeData) {
return null
}
- console.log('getFormData', { mentorData, menteeData })
+ // console.log('getFormData', { mentorData, menteeData })
return { ok: true, mentorData, menteeData }
} catch (err) {
console.error('Error fetching form answers:', err)
diff --git a/mentor-match-app/src/api/surveys.js b/mentor-match-app/src/api/surveys.js
new file mode 100644
index 0000000..de8a3d4
--- /dev/null
+++ b/mentor-match-app/src/api/surveys.js
@@ -0,0 +1,217 @@
+import {
+ doc,
+ setDoc,
+ collection,
+ deleteDoc,
+ getDoc,
+ getDocs,
+ addDoc,
+ serverTimestamp,
+ onSnapshot,
+ query,
+ orderBy,
+ updateDoc,
+ increment
+} from 'firebase/firestore'
+import { db } from './firebaseConfig'
+import { getUserById } from './users'
+
+export const createEmptySurvey = async (userId) => {
+ try {
+ const surveyRef = doc(collection(db, 'surveys'))
+ const user = await getUserById(userId)
+ if (!user) {
+ throw new Error('User not found')
+ }
+ const author = { id: userId, name: user.displayName, email: user.email }
+ await setDoc(surveyRef, {
+ author,
+ title: 'Untitled Survey',
+ description: '',
+ createdAt: serverTimestamp(),
+ publishedAt: null,
+ responses: 0,
+ questionsCount: 0,
+ enabledFor: { mentors: false, mentees: false },
+ status: 'draft'
+ })
+
+ return surveyRef.id
+ } catch (error) {
+ console.error('Error creating survey:', error)
+ throw error
+ }
+}
+
+export const deleteSurvey = async (surveyId) => {
+ try {
+ const surveyRef = doc(db, 'surveys', surveyId)
+ await deleteDoc(surveyRef)
+ return { ok: true }
+ } catch (error) {
+ console.error('Error deleting survey:', error)
+ return { ok: false, error: error.message }
+ }
+}
+
+export const getSurveyById = async (id) => {
+ if (!id) {
+ throw new Error('getSurveyById: missing survey id')
+ }
+ try {
+ // Ensure we never pass undefined into doc()
+ const ref = doc(collection(db, 'surveys'), String(id))
+ const snap = await getDoc(ref)
+ if (!snap.exists()) {
+ throw new Error('Survey not found')
+ }
+
+ // Fetch questions ordered by "order"
+ const questionsRef = collection(db, 'surveys', id, 'questions')
+ const questionsSnap = await getDocs(query(questionsRef, orderBy('order', 'asc')))
+ const questions = questionsSnap.docs.map((d) => ({ id: d.id, ...d.data() }))
+
+ return { id: snap.id, ...snap.data(), questions }
+ } catch (error) {
+ console.error('Error fetching survey by ID:', error)
+ throw error
+ }
+}
+
+export const getAllSurveys = async () => {
+ try {
+ const surveysCol = collection(db, 'surveys')
+ const surveySnapshot = await getDocs(surveysCol)
+ const surveys = surveySnapshot.docs.map(doc => ({ id: doc.id, ...doc.data() }))
+ // console.log('Fetched surveys:', surveys)
+ return surveys
+ } catch (error) {
+ console.error('Error fetching surveys:', error)
+ throw error
+ }
+}
+
+export const getSurveysByStatusAndUserRole = async (status, role) => {
+ const surveys = await getAllSurveys()
+
+ // normalize role to 'mentors' | 'mentees'
+ const normalizeRole = (r) => {
+ if (!r) return null
+ const v = String(r).toLowerCase()
+ if (v === 'mentor') return 'mentors'
+ if (v === 'mentee') return 'mentees'
+ return null
+ }
+ const roleKey = normalizeRole(role)
+
+ const filteredSurveys = surveys.filter((survey) => {
+ const matchesStatus = survey.status === status
+ const matchesRole = roleKey ? !!(survey.enabledFor && survey.enabledFor[roleKey]) : true
+ return matchesStatus && matchesRole
+ })
+
+ return filteredSurveys
+}
+
+// Adds a new document in subcollection surveys/{surveyId}/questions
+// questionData: { title, type, options?, required?, description?, order? }
+export const addQuestionToSurvey = async (surveyId, questionType, questionData = {}) => {
+ try {
+ const surveyRef = doc(db, 'surveys', surveyId)
+ const questionsCol = collection(surveyRef, 'questions')
+
+ const emptyDefault = {
+ title: 'New Question',
+ type: questionType,
+ isRequired: false,
+ options: [],
+ description: '',
+ order: Date.now()
+ }
+
+ const newQuestion = {
+ ...emptyDefault,
+ ...(questionData || {})
+ }
+
+ const qRef = await addDoc(questionsCol, newQuestion)
+ // increment questionsCount
+ await updateDoc(surveyRef, {
+ questionsCount: increment(1),
+ updatedAt: serverTimestamp()
+ })
+
+ return qRef.id
+ } catch (error) {
+ console.error('Error adding question to survey:', error)
+ throw error
+ }
+}
+
+// Subscribe to survey meta changes
+export const subscribeToSurvey = (surveyId, callback) => {
+ const surveyRef = doc(db, 'surveys', surveyId)
+ return onSnapshot(surveyRef, callback)
+}
+
+// Subscribe to questions (ordered)
+export const subscribeToQuestions = (surveyId, callback) => {
+ const qRef = collection(db, 'surveys', surveyId, 'questions')
+ const q = query(qRef, orderBy('order', 'asc'))
+ return onSnapshot(q, (snap) => {
+ const list = snap.docs.map((d) => ({ id: d.id, ...d.data() }))
+ callback(list)
+ })
+}
+
+// Update survey metadata (debounced from UI)
+export const updateSurveyMeta = async (surveyId, patch) => {
+ const surveyRef = doc(db, 'surveys', surveyId)
+ try {
+ await updateDoc(surveyRef, { ...patch, updatedAt: serverTimestamp() })
+ return { ok: true }
+ } catch (error) {
+ console.error('Error updating survey meta:', error)
+ return { ok: false, error: error.message }
+ }
+}
+
+// Upsert a question (debounced from UI)
+export const upsertQuestion = async (surveyId, questionId, patch) => {
+ const qRef = doc(db, 'surveys', surveyId, 'questions', questionId)
+ await setDoc(qRef, { ...patch }, { merge: true })
+}
+
+// Delete a question and decrement count
+export const deleteQuestionFromSurvey = async (surveyId, questionId) => {
+ const surveyRef = doc(db, 'surveys', surveyId)
+ const qRef = doc(db, 'surveys', surveyId, 'questions', questionId)
+ await deleteDoc(qRef)
+ await updateDoc(surveyRef, {
+ questionsCount: increment(-1),
+ updatedAt: serverTimestamp()
+ })
+}
+
+export const submitSurveyResponse = async (surveyId, responses, userId) => {
+ try {
+ const responsesCol = collection(db, 'surveys', surveyId, 'responses')
+ const docRef = await addDoc(responsesCol, { answers: responses, submittedAt: serverTimestamp(), userId })
+ return { ok: true, id: docRef.id }
+ } catch (error) {
+ console.error('Error submitting survey response:', error)
+ return { ok: false, error: error.message }
+ }
+}
+
+export const getSurveyResponses = async (surveyId) => {
+ try {
+ const responsesCol = collection(db, 'surveys', surveyId, 'responses')
+ const responsesSnap = await getDocs(responsesCol)
+ const responses = responsesSnap.docs.map(doc => ({ id: doc.id, ...doc.data() }))
+ return { ok: true, responses }
+ } catch (error) {
+ console.error('Error fetching survey responses:', error)
+ return { ok: false, error: error.message }
+ }
+}
diff --git a/mentor-match-app/src/api/users.js b/mentor-match-app/src/api/users.js
index 2cbccbd..7c12609 100644
--- a/mentor-match-app/src/api/users.js
+++ b/mentor-match-app/src/api/users.js
@@ -83,7 +83,7 @@ export const getUserArrayByIds = async (userIds) => {
}
try {
const users = await Promise.all(userIds.map((id) => getUserById(id)))
- console.log('Fetched users:', users)
+ // console.log('Fetched users:', users)
return users
} catch (err) {
console.error('Error fetching user list by IDs:', err)
@@ -96,7 +96,7 @@ export const getAdmins = async () => {
const querySnapshot = await getDocs(collection(db, 'admins'))
const adminIds = querySnapshot.docs.map((d) => (d.id))
const admins = await getUserArrayByIds(adminIds)
- console.log('Fetched admins:', admins)
+ // console.log('Fetched admins:', admins)
return admins
} catch (err) {
console.error('Error fetching admins:', err)
diff --git a/mentor-match-app/src/components/FormCard.jsx b/mentor-match-app/src/components/FormCard.jsx
index 386305f..e4549f8 100644
--- a/mentor-match-app/src/components/FormCard.jsx
+++ b/mentor-match-app/src/components/FormCard.jsx
@@ -16,6 +16,7 @@ import { ChevronLeft } from '@mui/icons-material'
const FormCard = ({
children,
title,
+ description,
type,
props,
enableInfo = true,
@@ -78,10 +79,15 @@ const FormCard = ({
{title}
+ {description && (
+
+ {description}
+
+ )}
{showInfo ? (
diff --git a/mentor-match-app/src/components/Header.jsx b/mentor-match-app/src/components/Header.jsx
index aa219b1..0f4b7bf 100644
--- a/mentor-match-app/src/components/Header.jsx
+++ b/mentor-match-app/src/components/Header.jsx
@@ -1,3 +1,4 @@
+import { useState } from 'react'
import {
AppBar,
Box,
@@ -5,12 +6,16 @@ import {
IconButton,
Toolbar,
Tooltip,
- Stack
+ Stack,
+ Button,
+ Divider
} from '@mui/material'
import {
Logout,
DarkModeOutlined as DarkMode,
- LightModeOutlined as LightMode
+ LightModeOutlined as LightMode,
+ Dashboard as DashboardIcon,
+ Preview as PreviewIcon
} from '@mui/icons-material'
import logo from '../assets/logo.png'
import { signOut } from '../api/auth'
@@ -18,12 +23,14 @@ import { useThemeContext } from '../hooks/useTheme'
import { useUser } from '../hooks/useUser'
import { useNavigate } from 'react-router-dom'
import { useSnackbar } from 'notistack'
+import SurveySettingsDialog from './dialogs/SurveySettingsDialog'
-const Header = () => {
+const Header = ({ props }) => {
const { user } = useUser()
const navigate = useNavigate()
const { mode, toggleColorMode } = useThemeContext()
const { enqueueSnackbar } = useSnackbar()
+ const [openSurveyDialog, setOpenSurveyDialog] = useState(false)
const handleLogoClick = () => {
navigate('/')
@@ -40,31 +47,56 @@ const Header = () => {
}
return (
-
-
-
-
-
-
- {/* {user?.isAdmin && location.pathname === '/admin' && (
- }
- onClick={() => navigate('/dashboard')}
- >
- User Dashboard
-
- )} */}
-
-
+ <>
+
+
+
+
+
+
+ {user?.isAdmin && location.pathname === '/admin' && (
+
+ navigate('/dashboard')}
+ >
+
+
+
+ )}
+ {user?.isAdmin && location.pathname.includes('/survey/edit/') && (
+
+
+
+
+ {
+ const id = location.pathname.split('/').pop()
+ window.open(
+ `${window.location.origin}/survey/${id}`,
+ '_blank',
+ 'noopener,noreferrer'
+ )
+ }}
+ >
+
+
+
+
+
+ )}
{
)}
-
-
-
-
-
+
+
+
+
+ setOpenSurveyDialog(false)}
+ />
+ >
)
}
diff --git a/mentor-match-app/src/components/UnAuthPage.jsx b/mentor-match-app/src/components/UnAuthPage.jsx
deleted file mode 100644
index ccc6dc3..0000000
--- a/mentor-match-app/src/components/UnAuthPage.jsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import { Navigate } from "react-router-dom";
-import { useUser } from "../hooks/useUser";
-import { LinearProgress } from "@mui/material";
-
-const UnAuthPage = ({ children }) => {
- const { user, loading } = useUser();
-
- if (loading) {
- return ; // Show a loading indicator while checking authentication
- }
-
- if (user) {
- return ;
- }
-
- return children;
-};
-
-export default UnAuthPage;
diff --git a/mentor-match-app/src/components/adminDashboard/ManageAdminsSection.jsx b/mentor-match-app/src/components/adminDashboard/ManageAdminsSection.jsx
index 1d1ed80..6be2a9c 100644
--- a/mentor-match-app/src/components/adminDashboard/ManageAdminsSection.jsx
+++ b/mentor-match-app/src/components/adminDashboard/ManageAdminsSection.jsx
@@ -3,7 +3,7 @@ import {
Stack,
Typography,
Card,
- Grid2 as Grid,
+ Grid,
IconButton,
Dialog,
DialogTitle,
@@ -33,8 +33,8 @@ import { useUser } from '../../hooks/useUser'
import SearchBar from '../SearchBar'
import { useSnackbar } from 'notistack'
-const ManageAdminsSection = () => {
- const { userList, user } = useUser()
+const ManageAdminsSection = ({ userList }) => {
+ const { user } = useUser()
const [admins, setAdmins] = useState([])
const [dialogOpen, setDialogOpen] = useState(false)
const [reloadList, setReloadList] = useState(true)
@@ -45,7 +45,7 @@ const ManageAdminsSection = () => {
useEffect(() => {
const fetchAdmins = async () => {
const admins = await getAdmins()
- console.log('Admins:', admins)
+ //console.log('Admins:', admins)
setAdmins(admins)
setReloadList(false)
setLoading(false)
diff --git a/mentor-match-app/src/components/adminDashboard/ManageMatchesSection.jsx b/mentor-match-app/src/components/adminDashboard/ManageMatchesSection.jsx
index 01696d5..ac4222c 100644
--- a/mentor-match-app/src/components/adminDashboard/ManageMatchesSection.jsx
+++ b/mentor-match-app/src/components/adminDashboard/ManageMatchesSection.jsx
@@ -1,11 +1,5 @@
import { useState } from 'react'
-import {
- Stack,
- Typography,
- Card,
- Grid2 as Grid,
- IconButton
-} from '@mui/material'
+import { Stack, Typography, Card, Grid, IconButton } from '@mui/material'
import { Add as AddIcon } from '@mui/icons-material'
import MatchGrid from './MatchGrid'
import CreateNewMatchDialog from '../dialogs/CreateNewMatchDialog'
diff --git a/mentor-match-app/src/components/adminDashboard/ManageSurveysSection.jsx b/mentor-match-app/src/components/adminDashboard/ManageSurveysSection.jsx
new file mode 100644
index 0000000..24ad1de
--- /dev/null
+++ b/mentor-match-app/src/components/adminDashboard/ManageSurveysSection.jsx
@@ -0,0 +1,163 @@
+import { useMemo } from 'react'
+import {
+ MaterialReactTable,
+ useMaterialReactTable,
+ MRT_ToggleFullScreenButton,
+ MRT_ToggleFiltersButton,
+ MRT_ToggleGlobalFilterButton,
+ MRT_ToggleDensePaddingButton
+} from 'material-react-table'
+import { Box, IconButton, Tooltip, Typography } from '@mui/material'
+import {
+ Edit as EditIcon,
+ Delete as DeleteIcon,
+ Add as AddIcon,
+ Link as LinkIcon,
+ Preview as PreviewIcon
+} from '@mui/icons-material'
+import { createEmptySurvey, deleteSurvey } from '../../api/surveys'
+import { useUser } from '../../hooks/useUser'
+import { useNavigate } from 'react-router-dom'
+import { useSnackbar } from 'notistack'
+
+const ManageSurveysSection = ({ surveyData, fetchSurveys, loading }) => {
+ const { user } = useUser()
+ const navigate = useNavigate()
+ const { enqueueSnackbar } = useSnackbar()
+
+ const columns = useMemo(
+ () => [
+ {
+ accessorKey: 'title', //simple recommended way to define a column
+ header: 'Title',
+ Header: Title //optional custom markup
+ },
+ {
+ id: 'createdAt',
+ header: 'Creation Date',
+ Header: Creation Date,
+ accessorFn: (row) => {
+ const ts = row?.createdAt
+ // Firestore Timestamp -> Date; allow ISO string/number too
+ if (!ts) return null
+ return ts.toDate ? ts.toDate() : new Date(ts)
+ },
+ Cell: ({ cell }) => {
+ const v = cell.getValue()
+ return v ? new Date(v).toLocaleString() : '—'
+ },
+ sortingFn: 'datetime'
+ },
+ {
+ accessorKey: 'author', //simple recommended way to define a column
+ header: 'Author',
+ Header: Author,
+ accessorFn: (row) => row?.author?.name
+ },
+ {
+ accessorKey: 'responses', //simple recommended way to define a column
+ header: 'Responses',
+ Header: Responses //optional custom markup
+ }
+ ],
+ []
+ )
+
+ const table = useMaterialReactTable({
+ data: surveyData,
+ columns,
+ initialState: { density: 'spacious' },
+ muiTablePaperProps: {
+ elevation: 0 //change the mui box shadow
+ },
+ enableFullScreenToggle: false,
+ enableColumnActions: false,
+ enableRowActions: true,
+ positionActionsColumn: 'last',
+ state: { isLoading: loading },
+ renderRowActions: ({ row }) => (
+
+
+ navigate('/survey/edit/' + row.original.id)}
+ >
+
+
+
+
+ {
+ const url = `${window.location.origin}/survey/${row.original.id}`
+ navigator.clipboard.writeText(url)
+ enqueueSnackbar('Survey link copied to clipboard', {
+ variant: 'info'
+ })
+ }}
+ >
+
+
+
+
+
+ window.open(
+ `${window.location.origin}/survey/${row.original.id}`,
+ '_blank',
+ 'noopener,noreferrer'
+ )
+ }
+ >
+
+
+
+
+ {
+ const res = await deleteSurvey(row.original.id)
+ if (res.ok) {
+ enqueueSnackbar('Survey deleted successfully', {
+ variant: 'success'
+ })
+ fetchSurveys()
+ } else {
+ enqueueSnackbar('Error deleting survey: ' + res.error, {
+ variant: 'error'
+ })
+ }
+ }}
+ >
+
+
+
+
+ ),
+ renderToolbarInternalActions: ({ table }) => (
+ <>
+
+ {
+ const newSurveyId = await createEmptySurvey(user.uid)
+ //console.log('New survey created with ID:', newSurveyId)
+ navigate('/survey/edit/' + newSurveyId)
+ }}
+ >
+
+
+
+
+
+
+
+ >
+ ),
+ renderEmptyRowsFallback: () => (
+
+ No surveys created yet
+
+ )
+ })
+
+ return
+}
+
+export default ManageSurveysSection
diff --git a/mentor-match-app/src/components/adminDashboard/MatchGrid.jsx b/mentor-match-app/src/components/adminDashboard/MatchGrid.jsx
index ced0649..c2516fd 100644
--- a/mentor-match-app/src/components/adminDashboard/MatchGrid.jsx
+++ b/mentor-match-app/src/components/adminDashboard/MatchGrid.jsx
@@ -1,6 +1,6 @@
import { useState, useEffect } from 'react'
import {
- Grid2 as Grid,
+ Grid,
Stack,
Typography,
Box,
@@ -35,10 +35,6 @@ const MatchGrid = ({ menteeId, mentorId, gridSize = 4, fetchPairs }) => {
const mentorData = await getUserById(mentorId)
setMentee(menteeData)
setMentor(mentorData)
- console.log('Setting loading to false, fetched data:', {
- menteeData,
- mentorData
- })
setLoading(false)
}
fetchUserData()
diff --git a/mentor-match-app/src/components/AdminRoute.jsx b/mentor-match-app/src/components/auth/AdminRoute.jsx
similarity index 75%
rename from mentor-match-app/src/components/AdminRoute.jsx
rename to mentor-match-app/src/components/auth/AdminRoute.jsx
index 4ef2c0c..cd90f8d 100644
--- a/mentor-match-app/src/components/AdminRoute.jsx
+++ b/mentor-match-app/src/components/auth/AdminRoute.jsx
@@ -1,6 +1,6 @@
import { LinearProgress } from '@mui/material'
-import { useUser } from '../hooks/useUser'
-import ErrorPage from '../components/ErrorPage'
+import { useUser } from '../../hooks/useUser'
+import ErrorPage from '../ErrorPage'
const AdminRoute = ({ children }) => {
const { user, loading } = useUser()
diff --git a/mentor-match-app/src/components/AuthPage.jsx b/mentor-match-app/src/components/auth/AuthPage.jsx
similarity index 85%
rename from mentor-match-app/src/components/AuthPage.jsx
rename to mentor-match-app/src/components/auth/AuthPage.jsx
index c7a82d5..38240d1 100644
--- a/mentor-match-app/src/components/AuthPage.jsx
+++ b/mentor-match-app/src/components/auth/AuthPage.jsx
@@ -1,7 +1,7 @@
import { Navigate, useLocation } from 'react-router-dom'
-import { useUser } from '../hooks/useUser'
+import { useUser } from '../../hooks/useUser'
import { LinearProgress } from '@mui/material'
-import { auth } from '../api/firebaseConfig'
+import { auth } from '../../api/firebaseConfig'
const AuthPage = ({ children }) => {
const location = useLocation()
diff --git a/mentor-match-app/src/components/OrcidHandler.jsx b/mentor-match-app/src/components/auth/OrcidHandler.jsx
similarity index 95%
rename from mentor-match-app/src/components/OrcidHandler.jsx
rename to mentor-match-app/src/components/auth/OrcidHandler.jsx
index 9e73ce7..12928cc 100644
--- a/mentor-match-app/src/components/OrcidHandler.jsx
+++ b/mentor-match-app/src/components/auth/OrcidHandler.jsx
@@ -1,10 +1,10 @@
import { useEffect, useRef } from 'react'
import { useNavigate } from 'react-router-dom'
import { useSnackbar } from 'notistack'
-import { fetchOrcidProfile } from '../utils/orcidUtils'
-import { signInWithOrcid } from '../api/auth'
+import { fetchOrcidProfile } from '../../utils/orcidUtils'
+import { signInWithOrcid } from '../../api/auth'
import { Card, CardContent, Typography, CircularProgress } from '@mui/material'
-import { useUser } from '../hooks/useUser'
+import { useUser } from '../../hooks/useUser'
const OrcidHandler = () => {
const navigate = useNavigate()
diff --git a/mentor-match-app/src/components/RootHandler.jsx b/mentor-match-app/src/components/auth/RootHandler.jsx
similarity index 100%
rename from mentor-match-app/src/components/RootHandler.jsx
rename to mentor-match-app/src/components/auth/RootHandler.jsx
diff --git a/mentor-match-app/src/components/auth/UnAuthPage.jsx b/mentor-match-app/src/components/auth/UnAuthPage.jsx
new file mode 100644
index 0000000..c92c614
--- /dev/null
+++ b/mentor-match-app/src/components/auth/UnAuthPage.jsx
@@ -0,0 +1,19 @@
+import { Navigate } from 'react-router-dom'
+import { useUser } from '../../hooks/useUser'
+import { LinearProgress } from '@mui/material'
+
+const UnAuthPage = ({ children }) => {
+ const { user, loading } = useUser()
+
+ if (loading) {
+ return // Show a loading indicator while checking authentication
+ }
+
+ if (user) {
+ return
+ }
+
+ return children
+}
+
+export default UnAuthPage
diff --git a/mentor-match-app/src/components/dashboard/ActiveSurveys.jsx b/mentor-match-app/src/components/dashboard/ActiveSurveys.jsx
new file mode 100644
index 0000000..f61c527
--- /dev/null
+++ b/mentor-match-app/src/components/dashboard/ActiveSurveys.jsx
@@ -0,0 +1,113 @@
+import {
+ Card,
+ Box,
+ Stack,
+ Typography,
+ Tooltip,
+ IconButton
+} from '@mui/material'
+import { AssignmentOutlined as SurveyIcon } from '@mui/icons-material'
+import { useMemo } from 'react'
+import { useNavigate } from 'react-router-dom'
+import { MaterialReactTable, useMaterialReactTable } from 'material-react-table'
+
+const ActiveSurveys = ({ loadingSurveys, activeSurveys }) => {
+ const navigate = useNavigate()
+ const columns = useMemo(
+ () => [
+ {
+ accessorKey: 'title',
+ header: 'Title',
+ Header: Title
+ },
+ {
+ id: 'publishedAt',
+ header: 'Date Published',
+ Header: Date Published,
+ accessorFn: (row) => {
+ const ts = row?.publishedAt
+ if (!ts) return null
+ return ts.toDate ? ts.toDate() : new Date(ts)
+ },
+ Cell: ({ cell }) => {
+ const v = cell.getValue()
+ return v ? new Date(v).toLocaleString() : '—'
+ },
+ sortingFn: 'datetime'
+ },
+ {
+ accessorKey: 'answerStatus',
+ header: 'Status',
+ Header: Status
+ }
+ ],
+ []
+ )
+
+ const table = useMaterialReactTable({
+ columns,
+ data: activeSurveys,
+ muiTablePaperProps: {
+ elevation: 0 //change the mui box shadow
+ },
+ enableFullScreenToggle: false,
+ enableColumnActions: false,
+ enableRowActions: true,
+ state: { isLoading: loadingSurveys },
+ positionActionsColumn: 'last',
+ renderRowActions: ({ row }) => {
+ const isAnswered = row.original.answerStatus === 'Answered'
+ return (
+
+
+
+
+ !isAnswered && navigate('/survey/' + row.original.id)
+ }
+ >
+
+
+
+
+
+ )
+ },
+ renderEmptyRowsFallback: () => (
+
+ No active surveys at the moment
+
+ )
+ })
+
+ return (
+
+
+
+
+
+ Active Surveys
+
+
+
+
+
+
+
+
+
+ )
+}
+
+export default ActiveSurveys
diff --git a/mentor-match-app/src/components/dashboard/ApplicationStatus.jsx b/mentor-match-app/src/components/dashboard/ApplicationStatus.jsx
index 5fbe9cd..bd1c4cd 100644
--- a/mentor-match-app/src/components/dashboard/ApplicationStatus.jsx
+++ b/mentor-match-app/src/components/dashboard/ApplicationStatus.jsx
@@ -56,7 +56,7 @@ const ApplicationStatus = () => {
setFormType(type)
const data = await getCurrentApplicationStatus(user.uid, type)
- console.log('Application data:', data)
+ //console.log('Application data:', data)
if (!data) {
setApplicationInfo(null)
return
diff --git a/mentor-match-app/src/components/dashboard/CurrentMentor.jsx b/mentor-match-app/src/components/dashboard/CurrentMentor.jsx
index 661c49a..dfe4614 100644
--- a/mentor-match-app/src/components/dashboard/CurrentMentor.jsx
+++ b/mentor-match-app/src/components/dashboard/CurrentMentor.jsx
@@ -5,7 +5,7 @@ import { useState } from 'react'
import {
Box,
Card,
- Grid2 as Grid,
+ Grid,
Stack,
Button,
Typography,
diff --git a/mentor-match-app/src/components/dashboard/MatchAlert.jsx b/mentor-match-app/src/components/dashboard/MatchAlert.jsx
index 9281b2d..415a14f 100644
--- a/mentor-match-app/src/components/dashboard/MatchAlert.jsx
+++ b/mentor-match-app/src/components/dashboard/MatchAlert.jsx
@@ -15,7 +15,7 @@ const MatchAlert = ({ setView, setShowAlert }) => {
if (user.newMenteeMatch) {
updateNewMatchNotification(user.uid)
.then(() => {
- console.log('New match notification updated successfully')
+ //console.log('New match notification updated successfully')
})
.catch((error) => {
console.error('Error updating new match notification:', error)
diff --git a/mentor-match-app/src/components/dashboard/ProfileWidget.jsx b/mentor-match-app/src/components/dashboard/ProfileWidget.jsx
index 2223636..e522694 100644
--- a/mentor-match-app/src/components/dashboard/ProfileWidget.jsx
+++ b/mentor-match-app/src/components/dashboard/ProfileWidget.jsx
@@ -13,12 +13,12 @@ import {
Link,
Tooltip
} from '@mui/material'
+import { LoadingButton } from '@mui/lab'
import {
Settings as SettingsIcon,
Google as GoogleIcon,
GitHub as GitHubIcon
} from '@mui/icons-material'
-import { LoadingButton } from '@mui/lab'
// Hooks and services
import { Form, Formik } from 'formik'
diff --git a/mentor-match-app/src/components/dashboard/SideMenu.jsx b/mentor-match-app/src/components/dashboard/SideMenu.jsx
index 963a1cd..e6025a7 100644
--- a/mentor-match-app/src/components/dashboard/SideMenu.jsx
+++ b/mentor-match-app/src/components/dashboard/SideMenu.jsx
@@ -10,7 +10,8 @@ import {
Dashboard as DashboardIcon,
AccountBox as MentorIcon,
Assignment as ApplicationIcon,
- ManageAccounts as AdminIcon
+ ManageAccounts as AdminIcon,
+ PollOutlined as SurveyIcon
} from '@mui/icons-material'
import { useUser } from '../../hooks/useUser'
import { useNavigate } from 'react-router-dom'
@@ -83,6 +84,17 @@ const SideMenu = ({ setView }) => {
)}
+
+
)
diff --git a/mentor-match-app/src/components/dashboard/UserGrid.jsx b/mentor-match-app/src/components/dashboard/UserGrid.jsx
index fe0975b..0583722 100644
--- a/mentor-match-app/src/components/dashboard/UserGrid.jsx
+++ b/mentor-match-app/src/components/dashboard/UserGrid.jsx
@@ -1,6 +1,6 @@
import React, { useState, useEffect } from 'react'
import {
- Grid2 as Grid,
+ Grid,
Stack,
Typography,
Box,
diff --git a/mentor-match-app/src/components/dashboard/UserListView.jsx b/mentor-match-app/src/components/dashboard/UserListView.jsx
index f9aa205..47a7f51 100644
--- a/mentor-match-app/src/components/dashboard/UserListView.jsx
+++ b/mentor-match-app/src/components/dashboard/UserListView.jsx
@@ -5,7 +5,7 @@ import { useState } from 'react'
import {
Box,
Card,
- Grid2 as Grid,
+ Grid,
Stack,
Button,
Typography,
diff --git a/mentor-match-app/src/components/dialogs/CreateNewMatchDialog.jsx b/mentor-match-app/src/components/dialogs/CreateNewMatchDialog.jsx
index c863365..0dd89cb 100644
--- a/mentor-match-app/src/components/dialogs/CreateNewMatchDialog.jsx
+++ b/mentor-match-app/src/components/dialogs/CreateNewMatchDialog.jsx
@@ -61,7 +61,7 @@ const CreateNewMatchDialog = ({
const formType = roleToFormType(u.role)
const res = await getCurrentApplicationStatus(u.uid, formType)
const status = res && typeof res === 'object' ? res.status : null
- console.log(`User ${u.uid} (${u.role}) application status:`, status)
+ //console.log(`User ${u.uid} (${u.role}) application status:`, status)
return [u.uid, status]
} catch (e) {
console.error('Error fetching application status for', u.uid, e)
diff --git a/mentor-match-app/src/components/dialogs/EndMentorshipDialog.jsx b/mentor-match-app/src/components/dialogs/EndMentorshipDialog.jsx
index 6c5d54c..63d4291 100644
--- a/mentor-match-app/src/components/dialogs/EndMentorshipDialog.jsx
+++ b/mentor-match-app/src/components/dialogs/EndMentorshipDialog.jsx
@@ -45,11 +45,11 @@ const EndMentorshipDialog = ({
enqueueSnackbar('Missing menteeId or mentorId.', { variant: 'error' })
return
}
- console.log(
+ /* console.log(
'Admin ending mentorship (menteeId->mentorId):',
menteeId,
mentorId
- )
+ ) */
res = await endMentorship(
menteeId,
mentorId,
@@ -61,7 +61,7 @@ const EndMentorshipDialog = ({
loggedUser.menteesId.includes(userId)
) {
// Mentor is ending mentorship with a mentee
- console.log('Mentor is ending mentorship with a mentee')
+ //console.log('Mentor is ending mentorship with a mentee')
res = await endMentorship(
userId,
loggedUser.uid,
@@ -69,7 +69,7 @@ const EndMentorshipDialog = ({
additionalInfo
)
} else {
- console.log('Mentee is ending mentorship with a mentor')
+ //console.log('Mentee is ending mentorship with a mentor')
// Mentee is ending mentorship with a mentor
res = await endMentorship(
loggedUser.uid,
@@ -78,7 +78,7 @@ const EndMentorshipDialog = ({
additionalInfo
)
}
- console.log('End mentorship response:', res)
+ //console.log('End mentorship response:', res)
if (res.ok) {
enqueueSnackbar('Mentorship ended successfully', { variant: 'success' })
}
diff --git a/mentor-match-app/src/components/dialogs/ResetPasswordDialog.jsx b/mentor-match-app/src/components/dialogs/ResetPasswordDialog.jsx
index 9abbb01..f80a296 100644
--- a/mentor-match-app/src/components/dialogs/ResetPasswordDialog.jsx
+++ b/mentor-match-app/src/components/dialogs/ResetPasswordDialog.jsx
@@ -5,10 +5,11 @@ import {
DialogActions,
DialogTitle,
Stack,
- Typography
+ Typography,
+ Button
} from '@mui/material'
-import TextField from '../inputFields/TextField'
import { LoadingButton } from '@mui/lab'
+import TextField from '../inputFields/TextField'
import { useAuthHandlers } from '../../utils/authUtils'
const ResetPasswordDialog = ({
diff --git a/mentor-match-app/src/components/dialogs/SurveySettingsDialog.jsx b/mentor-match-app/src/components/dialogs/SurveySettingsDialog.jsx
new file mode 100644
index 0000000..e29c640
--- /dev/null
+++ b/mentor-match-app/src/components/dialogs/SurveySettingsDialog.jsx
@@ -0,0 +1,124 @@
+import {
+ Dialog,
+ DialogContent,
+ DialogActions,
+ DialogTitle,
+ Button,
+ Typography,
+ Stack,
+ Switch
+} from '@mui/material'
+import { updateSurveyMeta, getSurveyById } from '../../api/surveys'
+import { useState, useEffect, useCallback } from 'react'
+import { useParams } from 'react-router-dom'
+import { useSnackbar } from 'notistack'
+import { serverTimestamp } from 'firebase/firestore'
+
+const SurveySettingsDialog = ({ open, onClose }) => {
+ const { id } = useParams()
+ const { enqueueSnackbar } = useSnackbar()
+
+ const [enableSettings, setEnableSettings] = useState({
+ mentors: true,
+ mentees: true
+ })
+
+ const fetchSettings = useCallback(async () => {
+ // Prevent Firestore doc() from receiving undefined
+ if (!id) {
+ console.warn('SurveySettingsDialog: missing surveyId; skipping fetch')
+ return
+ }
+ try {
+ const survey = await getSurveyById(id)
+ //console.log('Fetched survey for settings:', survey)
+ setEnableSettings({
+ mentees: survey.enabledFor.mentees,
+ mentors: survey.enabledFor.mentors
+ })
+ } catch (err) {
+ console.error('Error fetching survey by ID:', err)
+ }
+ }, [id]) // include surveyId dep
+
+ useEffect(() => {
+ // Only fetch when dialog is open and we have a valid id
+ if (!open || !id) return
+ fetchSettings()
+ }, [open, id, fetchSettings])
+
+ const handleToggle = (role) => {
+ setEnableSettings((prev) => ({
+ ...prev,
+ [role]: !prev[role]
+ }))
+ }
+
+ const handleSave = async () => {
+ try {
+ const res = await updateSurveyMeta(id, {
+ enabledFor: enableSettings,
+ status: 'published',
+ publishedAt: serverTimestamp()
+ })
+ //console.log('Survey settings updated:', res)
+ if (res.ok) {
+ enqueueSnackbar('Survey posted successfully', {
+ variant: 'success'
+ })
+ }
+ onClose()
+ } catch (error) {
+ enqueueSnackbar('Failed to post survey', { variant: 'error' })
+ console.error('Error saving survey settings:', error)
+ }
+ }
+
+ return (
+
+ )
+}
+
+export default SurveySettingsDialog
diff --git a/mentor-match-app/src/components/profile/LoggedUserProfile.jsx b/mentor-match-app/src/components/profile/LoggedUserProfile.jsx
index 2fcef3b..21075ea 100644
--- a/mentor-match-app/src/components/profile/LoggedUserProfile.jsx
+++ b/mentor-match-app/src/components/profile/LoggedUserProfile.jsx
@@ -15,6 +15,7 @@ import {
IconButton,
Fab
} from '@mui/material'
+import { LoadingButton } from '@mui/lab'
import {
Business as BusinessIcon,
Language as LanguageIcon,
@@ -25,7 +26,6 @@ import {
Close as CloseIcon,
Edit as EditIcon
} from '@mui/icons-material'
-import { LoadingButton } from '@mui/lab'
// Component imports
import ProfilePicture from '../ProfilePicture'
@@ -120,7 +120,7 @@ const LoggedUserProfile = ({ openDialog, setOpenDialog }) => {
try {
const ans = await getFormAnswers(user.uid)
setFormAnswers(ans)
- console.log('formAnswers', ans)
+ //console.log('formAnswers', ans)
setFormAnswers(ans || {})
setLoading(false)
} catch (error) {
diff --git a/mentor-match-app/src/components/profile/UserProfileDialog.jsx b/mentor-match-app/src/components/profile/UserProfileDialog.jsx
index e044882..f7217bd 100644
--- a/mentor-match-app/src/components/profile/UserProfileDialog.jsx
+++ b/mentor-match-app/src/components/profile/UserProfileDialog.jsx
@@ -63,12 +63,12 @@ const UserProfileDialog = ({
if (openDialog) {
const fetchUser = async () => {
const res = userList.find((user) => user.uid === userId)
- console.log('user', res)
+ //console.log('user', res)
setUser(res)
if (loggedUser) {
const ans = await getFormAnswers(userId)
- console.log('formAnswers', ans)
+ //console.log('formAnswers', ans)
setFormAnswers(ans)
}
setLoading(false)
diff --git a/mentor-match-app/src/components/questions/DropdownQuestion.jsx b/mentor-match-app/src/components/questions/DropdownQuestion.jsx
new file mode 100644
index 0000000..ad1a833
--- /dev/null
+++ b/mentor-match-app/src/components/questions/DropdownQuestion.jsx
@@ -0,0 +1,145 @@
+import {
+ Typography,
+ Card,
+ Stack,
+ FormControl,
+ FormLabel,
+ FormHelperText,
+ TextField,
+ Select,
+ MenuItem,
+ InputLabel
+} from '@mui/material'
+import { Field, ErrorMessage } from 'formik'
+import { formatDescription } from '../../utils/formatDescription'
+import { useState } from 'react'
+
+const DropdownQuestion = ({
+ name,
+ question,
+ description,
+ options,
+ required = true,
+ disabled = false,
+ spacing = 0
+}) => {
+ const formattedDescription = description
+ ? formatDescription(description)
+ : null
+ const [isOtherSelected, setIsOtherSelected] = useState(false)
+
+ return (
+
+
+
+
+ {question}
+
+ {formattedDescription && (
+
+ {formattedDescription}
+
+ )}
+
+ {({ field, form }) => {
+ const nonOtherOptions = options.filter((o) => o !== 'Other')
+ const fieldValue = form.values[name]
+ const selectValue = isOtherSelected
+ ? 'Other'
+ : typeof fieldValue === 'string' &&
+ nonOtherOptions.includes(fieldValue)
+ ? fieldValue
+ : typeof fieldValue === 'string' && fieldValue
+ ? 'Other'
+ : ''
+ const showOtherError =
+ selectValue === 'Other' &&
+ (fieldValue === undefined ||
+ fieldValue === null ||
+ (typeof fieldValue === 'string' && fieldValue.trim() === ''))
+
+ return (
+
+
+ {question}
+
+
+
+ {selectValue === 'Other' && (
+ form.setFieldValue(name, e.target.value)}
+ placeholder="Please specify"
+ size="small"
+ fullWidth
+ required={required}
+ error={showOtherError}
+ disabled={disabled}
+ helperText={
+ showOtherError
+ ? 'Please specify your answer for "Other".'
+ : ''
+ }
+ />
+ )}
+
+ )
+ }}
+
+
+ {(msg) => {msg}}
+
+
+
+
+ )
+}
+
+export default DropdownQuestion
diff --git a/mentor-match-app/src/components/surveys/AnswersTable.jsx b/mentor-match-app/src/components/surveys/AnswersTable.jsx
new file mode 100644
index 0000000..84af3bf
--- /dev/null
+++ b/mentor-match-app/src/components/surveys/AnswersTable.jsx
@@ -0,0 +1,89 @@
+import {
+ MaterialReactTable,
+ useMaterialReactTable,
+ MRT_ToggleFullScreenButton,
+ MRT_ToggleFiltersButton,
+ MRT_ToggleGlobalFilterButton,
+ MRT_ToggleDensePaddingButton
+} from 'material-react-table'
+import { useMemo } from 'react'
+import { mkConfig, generateCsv, download } from 'export-to-csv'
+import { Typography, IconButton, Tooltip } from '@mui/material'
+import { Download as DownloadIcon } from '@mui/icons-material'
+
+const AnswersTable = ({ data, questions, surveyName }) => {
+ const columns = useMemo(() => {
+ const qs = questions ?? []
+ return qs.map((q) => ({
+ accessorKey: q.id, // stable key
+ header: q.title || q.id // user-friendly header
+ }))
+ }, [questions])
+
+ const csvConfig = mkConfig({
+ fieldSeparator: ',',
+ decimalSeparator: '.',
+ columnHeaders: columns.map((col) => ({
+ key: col.accessorKey,
+ displayLabel: col.header
+ })),
+ fileName: surveyName || 'survey_answers',
+ title: surveyName || 'Survey Answers'
+ })
+
+ const formattedData = useMemo(() => {
+ const responses = data?.responses ?? []
+ return responses.map((r) => {
+ const answers = r?.answers ?? {}
+ const row = {}
+ Object.entries(answers).forEach(([key, value]) => {
+ // Convert arrays (e.g., checklist) to comma-separated strings
+ if (Array.isArray(value)) {
+ row[key] = value.join(', ')
+ } else {
+ row[key] = value
+ }
+ })
+ return row
+ })
+ }, [data])
+
+ //console.log('Formatted data for AnswersTable:', formattedData)
+
+ const handleExportData = () => {
+ const csv = generateCsv(csvConfig)(formattedData)
+ download(csvConfig)(csv)
+ }
+
+ const table = useMaterialReactTable({
+ data: formattedData,
+ columns,
+ initialState: { density: 'spacious' },
+ muiTablePaperProps: {
+ elevation: 0 //change the mui box shadow
+ },
+ enableColumnActions: false,
+ renderToolbarInternalActions: ({ table }) => (
+ <>
+
+
+
+
+
+
+
+
+
+ >
+ ),
+ renderEmptyRowsFallback: () => (
+
+ No responses available at the moment
+
+ )
+ })
+
+ return
+}
+
+export default AnswersTable
diff --git a/mentor-match-app/src/components/surveys/OptionsEditor.jsx b/mentor-match-app/src/components/surveys/OptionsEditor.jsx
new file mode 100644
index 0000000..11b9ae0
--- /dev/null
+++ b/mentor-match-app/src/components/surveys/OptionsEditor.jsx
@@ -0,0 +1,105 @@
+import {
+ Stack,
+ Checkbox,
+ Radio,
+ IconButton,
+ TextField,
+ Button,
+ Typography
+} from '@mui/material'
+import { Close as DeleteIcon } from '@mui/icons-material'
+import { useEffect, useState } from 'react'
+
+const OptionsEditor = ({
+ questionType,
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
+ updateOptions = () => {},
+ currentOptions = []
+}) => {
+ const [options, setOptions] = useState(currentOptions)
+
+ useEffect(() => {
+ setOptions(currentOptions || [])
+ }, [currentOptions])
+
+ const handleAddOption = () => {
+ const newOptions = [...options, 'Option ' + (options.length + 1)]
+ setOptions(newOptions)
+ updateOptions(newOptions)
+ }
+
+ const handleOptionChange = (index, value) => {
+ const newOptions = options.map((opt, i) => (i === index ? value : opt))
+ setOptions(newOptions)
+ updateOptions(newOptions)
+ }
+
+ const handleDeleteOption = (index) => {
+ const newOptions = options.filter((_, i) => i !== index)
+ setOptions(newOptions)
+ updateOptions(newOptions)
+ }
+
+ // Add "Other" option support for checklist/radio
+ const isChoiceType = questionType === 'checklist' || questionType === 'radio'
+ const hasOther = options.some(
+ (o) => String(o).trim().toLowerCase() === 'other'
+ )
+ const handleAddOtherOption = () => {
+ if (!isChoiceType || hasOther) return
+ const newOptions = [...options, 'Other']
+ setOptions(newOptions)
+ updateOptions(newOptions)
+ }
+
+ return (
+
+ Options
+
+ {options.map((option, index) => {
+ const isOther = String(option).trim().toLowerCase() === 'other'
+ return (
+
+ {questionType === 'checklist' && (
+
+ )}
+ {questionType === 'radio' && (
+
+ )}
+ handleOptionChange(index, e.target.value)}
+ fullWidth
+ disabled={isOther} // keep "Other" label fixed
+ />
+ handleDeleteOption(index)}>
+
+
+
+ )
+ })}
+
+
+
+
+
+
+ )
+}
+
+export default OptionsEditor
diff --git a/mentor-match-app/src/components/surveys/QuestionPreview.jsx b/mentor-match-app/src/components/surveys/QuestionPreview.jsx
new file mode 100644
index 0000000..9d64e3f
--- /dev/null
+++ b/mentor-match-app/src/components/surveys/QuestionPreview.jsx
@@ -0,0 +1,111 @@
+import {
+ Card,
+ Typography,
+ Stack,
+ TextField,
+ FormControlLabel,
+ Radio,
+ MenuItem,
+ Checkbox
+} from '@mui/material'
+
+const QuestionPreview = ({ questionData, isCurrentQuestion }) => {
+ if (!questionData) return null
+ const { title, description, type, options, isRequired } = questionData
+
+ const isOtherOption = (opt) => String(opt).trim().toLowerCase() === 'other'
+
+ const renderOptionLabel = (option) =>
+ isOtherOption(option) ? (
+
+ Other
+
+
+ ) : (
+ option
+ )
+
+ return (
+
+
+
+
+ {title}
+
+ {isRequired && (
+
+ *
+
+ )}
+
+ {description !== '' && (
+ {description}
+ )}
+ {type === 'text' && (
+
+ )}
+
+ {type === 'checklist' &&
+ options &&
+ options.map((option, index) => (
+
+
+ }
+ label={renderOptionLabel(option)}
+ />
+
+ ))}
+ {type === 'radio' &&
+ options &&
+ options.map((option, index) => (
+
+ }
+ label={renderOptionLabel(option)}
+ />
+ ))}
+ {type === 'dropdown' && (
+
+ {options &&
+ options.map((option, index) => (
+
+ ))}
+
+ )}
+
+
+
+ )
+}
+
+export default QuestionPreview
diff --git a/mentor-match-app/src/hooks/useUser.jsx b/mentor-match-app/src/hooks/useUser.jsx
index eb39ee3..87866b8 100644
--- a/mentor-match-app/src/hooks/useUser.jsx
+++ b/mentor-match-app/src/hooks/useUser.jsx
@@ -18,7 +18,7 @@ const UserProvider = ({ children }) => {
const fetchLoggedUser = async (uid) => {
setLoading(true) // ensure loading true at start
try {
- console.log(`Fetching user data for uid: ${uid}`)
+ //console.log(`Fetching user data for uid: ${uid}`)
const userDoc = doc(db, 'users', uid)
const userSnap = await getDoc(userDoc)
let isAdmin = false
@@ -31,12 +31,12 @@ const UserProvider = ({ children }) => {
}
if (userSnap.exists()) {
const userData = { uid, ...userSnap.data(), isAdmin }
- console.log('Setting user data: ', userData)
+ //console.log('Setting user data: ', userData)
setUser(userData)
setLoading(false) // success path
return
}
- console.log('No user data found for uid:', uid)
+ //console.log('No user data found for uid:', uid)
setUser(null)
} catch (err) {
console.error('Error fetching user data: ', err)
@@ -57,7 +57,7 @@ const UserProvider = ({ children }) => {
useEffect(() => {
const unsubscribe = onAuthStateChanged(auth, async (authUser) => {
if (authUser) {
- console.log('User is logged in: ', authUser.uid)
+ //console.log('User is logged in: ', authUser.uid)
await fetchLoggedUser(authUser.uid)
} else {
setUser(null)
diff --git a/mentor-match-app/src/pages/AdminDashboard.jsx b/mentor-match-app/src/pages/AdminDashboard.jsx
index f7319fc..64743a9 100644
--- a/mentor-match-app/src/pages/AdminDashboard.jsx
+++ b/mentor-match-app/src/pages/AdminDashboard.jsx
@@ -1,6 +1,5 @@
// React hooks
import { useState, useCallback, useEffect } from 'react'
-import { useNavigate } from 'react-router-dom'
// MUI components
import {
@@ -16,13 +15,14 @@ import {
Select,
MenuItem
} from '@mui/material'
-import { Cached as ReloadIcon, Person as UserIcon } from '@mui/icons-material'
+import { Cached as ReloadIcon } from '@mui/icons-material'
import { TabList, TabPanel, TabContext } from '@mui/lab'
// Hooks and services
import { useUser } from '../hooks/useUser'
import { getAllApplications } from '../api/forms'
import { getAllMentorshipPairs } from '../api/match'
+import { getAllSurveys } from '../api/surveys'
// Components
import Header from '../components/Header'
@@ -34,20 +34,21 @@ import MentorApplicationDialog from '../components/dialogs/formReview/MentorAppl
import CombinedApplicationDialog from '../components/dialogs/formReview/CombinedApplicationDialog'
import ManageMatchesSection from '../components/adminDashboard/ManageMatchesSection'
import ManageAdminsSection from '../components/adminDashboard/ManageAdminsSection'
+import ManageSurveysSection from '../components/adminDashboard/ManageSurveysSection'
const AdminDashboard = () => {
const { userList } = useUser()
const [toggleChat, setToggleChat] = useState(false)
const [selectedChatRoomId, setSelectedChatRoomId] = useState(null)
const [value, setValue] = useState('0')
- const navigate = useNavigate()
+
// Application management state
- const [applications, setApplications] = useState([])
const [loadingApplications, setLoadingApplications] = useState(true)
const [selectedApplication, setSelectedApplication] = useState(null)
const [dialogOpen, setDialogOpen] = useState(false)
const [statusFilter, setStatusFilter] = useState('all')
const [typeFilter, setTypeFilter] = useState('all') // new state
+ const [loadingSurveys, setLoadingSurveys] = useState(true)
// Mentorship pairs (lifted to page scope)
const [mentorshipPairs, setMentorshipPairs] = useState([])
@@ -56,12 +57,8 @@ const AdminDashboard = () => {
setMentorshipPairs(pairs)
}, [])
- // Fetch pairs once when the page mounts
- useEffect(() => {
- fetchPairs()
- }, [fetchPairs])
-
- const fetchApplications = async () => {
+ const [applications, setApplications] = useState([])
+ const fetchApplications = useCallback(async () => {
setLoadingApplications(true)
try {
const apps = await getAllApplications()
@@ -71,12 +68,27 @@ const AdminDashboard = () => {
} finally {
setLoadingApplications(false)
}
- }
+ }, [])
- // Fetch all applications when the component mounts
+ const [surveys, setSurveys] = useState([])
+ const fetchSurveys = useCallback(async () => {
+ setLoadingSurveys(true)
+ try {
+ const surveys = await getAllSurveys()
+ setSurveys(surveys)
+ } catch (error) {
+ console.error('Error fetching surveys:', error)
+ } finally {
+ setLoadingSurveys(false)
+ }
+ }, [])
+
+ // Fetch all data when the component mounts
useEffect(() => {
+ fetchPairs()
fetchApplications()
- }, [])
+ fetchSurveys()
+ }, [fetchPairs, fetchApplications, fetchSurveys])
const handleStartChat = useCallback((chatRoomId) => {
setSelectedChatRoomId(chatRoomId)
@@ -95,12 +107,8 @@ const AdminDashboard = () => {
const handleApplicationStatusUpdate = useCallback(() => {
// Refresh applications after status update (fetch all)
- const fetchApplications = async () => {
- const apps = await getAllApplications()
- setApplications(apps)
- }
fetchApplications()
- }, [])
+ }, [fetchApplications])
// Derive filtered list based on status and type
const filteredApplications = applications.filter(
@@ -169,19 +177,13 @@ const AdminDashboard = () => {
value={value}
onChange={(event, newValue) => setValue(newValue)}
>
-
-
-
-
+
+
+
+
+
-
@@ -286,6 +288,13 @@ const AdminDashboard = () => {
+
+
+
diff --git a/mentor-match-app/src/pages/CombinedForm.jsx b/mentor-match-app/src/pages/CombinedForm.jsx
index ea1ab02..977f77b 100644
--- a/mentor-match-app/src/pages/CombinedForm.jsx
+++ b/mentor-match-app/src/pages/CombinedForm.jsx
@@ -11,7 +11,6 @@ import {
Button
} from '@mui/material'
import { ErrorOutline } from '@mui/icons-material'
-import { LoadingButton } from '@mui/lab'
// Component imports
import FormCard from '../components/FormCard'
@@ -367,7 +366,7 @@ const CombinedForm = () => {
Next
) : (
- {
color="success"
>
Submit
-
+
)}
diff --git a/mentor-match-app/src/pages/Dashboard.jsx b/mentor-match-app/src/pages/Dashboard.jsx
index f43babc..1edee58 100644
--- a/mentor-match-app/src/pages/Dashboard.jsx
+++ b/mentor-match-app/src/pages/Dashboard.jsx
@@ -13,12 +13,17 @@ import MatchAlert from '../components/dashboard/MatchAlert'
import SideMenu from '../components/dashboard/SideMenu'
import CurrentMentor from '../components/dashboard/CurrentMentor'
import ApplicationStatus from '../components/dashboard/ApplicationStatus'
+import ActiveSurveys from '../components/dashboard/ActiveSurveys'
// Hooks and services
import { getUserById } from '../api/users'
import { getMentorshipStartDate } from '../api/match'
import { useUser } from '../hooks/useUser'
import ChatDrawer from '../components/chat/ChatDrawer'
+import {
+ getSurveysByStatusAndUserRole,
+ getSurveyResponses
+} from '../api/surveys'
const Dashboard = () => {
const { userList, user, loading, mentees, isAdmin } = useUser()
@@ -27,6 +32,8 @@ const Dashboard = () => {
const [viewType, setViewType] = useState('dashboard')
const [mentorData, setMentorData] = useState(null)
const [loadingMentor, setLoadingMentor] = useState(false)
+ const [loadingSurveys, setLoadingSurveys] = useState(false)
+ const [activeSurveys, setActiveSurveys] = useState([])
const [toggleChat, setToggleChat] = useState(false)
const [selectedChatRoomId, setSelectedChatRoomId] = useState(null)
const [showAlert, setShowAlert] = useState(true)
@@ -64,7 +71,7 @@ const Dashboard = () => {
if (!user) return
// Fetch mentor data when user is available
setLoadingMentor(true)
- console.log('Fetching mentor data for user:', user)
+ //console.log('Fetching mentor data for user:', user)
if (user.mentorId) {
const fetchMentorData = async () => {
try {
@@ -79,7 +86,7 @@ const Dashboard = () => {
}
}
fetchMentorData()
- console.log('Mentor data fetched')
+ //console.log('Mentor data fetched')
} else {
setMentorData(null)
}
@@ -87,13 +94,45 @@ const Dashboard = () => {
}, [user])
const handleStartChat = useCallback((chatRoomId) => {
- console.log('Dashboard handleStartChat called with chatRoomId:', chatRoomId)
+ //console.log('Dashboard handleStartChat called with chatRoomId:', chatRoomId)
setSelectedChatRoomId(chatRoomId)
setToggleChat(true)
- console.log('Dashboard - setSelectedChatRoomId to:', chatRoomId)
- console.log('Dashboard - setToggleChat to true')
+ //console.log('Dashboard - setSelectedChatRoomId to:', chatRoomId)
+ //console.log('Dashboard - setToggleChat to true')
}, [])
+ const fetchActiveSurveys = useCallback(async () => {
+ if (!user?.uid) return
+ try {
+ const surveys = await getSurveysByStatusAndUserRole(
+ 'published',
+ user.role
+ )
+ const surveysWithStatus = await Promise.all(
+ (surveys || []).map(async (s) => {
+ try {
+ const res = await getSurveyResponses(s.id)
+ const answered =
+ res?.ok &&
+ Array.isArray(res.responses) &&
+ res.responses.some((r) => r.userId === user.uid)
+ return { ...s, answerStatus: answered ? 'Answered' : 'Pending' }
+ } catch {
+ return { ...s, answerStatus: 'Pending' }
+ }
+ })
+ )
+ setActiveSurveys(surveysWithStatus)
+ setLoadingSurveys(false)
+ } catch (error) {
+ console.error('Error fetching active surveys:', error)
+ }
+ }, [user])
+
+ useEffect(() => {
+ fetchActiveSurveys()
+ }, [fetchActiveSurveys])
+
return (
<>
@@ -165,6 +204,12 @@ const Dashboard = () => {
{user && viewType === 'applicationStatus' && (
)}
+ {user && viewType === 'activeSurveys' && (
+
+ )}
diff --git a/mentor-match-app/src/pages/EditSurvey.jsx b/mentor-match-app/src/pages/EditSurvey.jsx
new file mode 100644
index 0000000..761284a
--- /dev/null
+++ b/mentor-match-app/src/pages/EditSurvey.jsx
@@ -0,0 +1,459 @@
+import { useParams, useNavigate } from 'react-router-dom'
+import { useRef, useState, useEffect, useCallback } from 'react'
+import {
+ Drawer,
+ Box,
+ Stack,
+ Typography,
+ Fab,
+ Toolbar,
+ Card,
+ MenuItem,
+ Tab,
+ Tooltip,
+ TextField,
+ Checkbox,
+ FormControlLabel,
+ Button,
+ IconButton,
+ CircularProgress
+} from '@mui/material'
+import { TabList, TabPanel, TabContext } from '@mui/lab'
+import {
+ Add as AddIcon,
+ Delete as DeleteIcon,
+ ArrowBack as BackIcon
+} from '@mui/icons-material'
+import Header from '../components/Header'
+import QuestionPreview from '../components/surveys/QuestionPreview'
+import OptionsEditor from '../components/surveys/OptionsEditor'
+import AnswersTable from '../components/surveys/AnswersTable'
+import {
+ subscribeToSurvey,
+ subscribeToQuestions,
+ updateSurveyMeta,
+ upsertQuestion,
+ addQuestionToSurvey,
+ deleteQuestionFromSurvey,
+ getSurveyResponses
+} from '../api/surveys'
+
+const drawerWidth = 350
+const EditSurvey = () => {
+ const { id: surveyId } = useParams()
+ const navigate = useNavigate()
+ const [tabValue, setTabValue] = useState('0')
+ const [questions, setQuestions] = useState([])
+ const [responses, setResponses] = useState([])
+ const [currentQuestionIndex, setCurrentQuestionIndex] = useState(null)
+ const [surveyMeta, setSurveyMeta] = useState({
+ title: 'Untitled Survey',
+ description: ''
+ })
+ const [metaLoaded, setMetaLoaded] = useState(false)
+ const [questionsLoaded, setQuestionsLoaded] = useState(false)
+ const pendingSelectIdRef = useRef(null)
+
+ // Realtime subscriptions
+ useEffect(() => {
+ if (!surveyId) return
+
+ const unsubSurvey = subscribeToSurvey(surveyId, (snap) => {
+ const data = snap.data()
+ if (data) {
+ setSurveyMeta({
+ title: data.title || 'Untitled Survey',
+ description: data.description || ''
+ })
+ }
+ // Mark meta as loaded on first callback
+ setMetaLoaded(true)
+ })
+ const unsubQuestions = subscribeToQuestions(surveyId, (list) => {
+ setQuestions(list)
+ setCurrentQuestionIndex((prev) => {
+ if (pendingSelectIdRef.current) {
+ const idx = list.findIndex((q) => q.id === pendingSelectIdRef.current)
+ if (idx !== -1) {
+ pendingSelectIdRef.current = null
+ return idx
+ }
+ }
+ if (list.length > 0 && (prev === null || prev >= list.length)) {
+ return 0
+ }
+ return prev
+ })
+ // Mark questions as loaded on first callback
+ setQuestionsLoaded(true)
+ })
+ return () => {
+ unsubSurvey && unsubSurvey()
+ unsubQuestions && unsubQuestions()
+ }
+ // eslint-disable-next-line
+ }, [surveyId])
+
+ // Debounced save helpers
+ const metaSaveTimer = useRef(null)
+ const questionSaveTimers = useRef({})
+
+ const scheduleMetaSave = useCallback(
+ (patch) => {
+ clearTimeout(metaSaveTimer.current)
+ metaSaveTimer.current = setTimeout(() => {
+ updateSurveyMeta(surveyId, patch)
+ }, 500)
+ },
+ [surveyId]
+ )
+
+ const scheduleQuestionSave = useCallback(
+ (question) => {
+ if (!question?.id) return
+ const key = question.id
+ clearTimeout(questionSaveTimers.current[key])
+ questionSaveTimers.current[key] = setTimeout(() => {
+ const { id, ...rest } = question
+ upsertQuestion(surveyId, id, rest)
+ }, 500)
+ },
+ [surveyId]
+ )
+
+ const handleAddNewQuestion = useCallback(async () => {
+ const base = {
+ title: 'Untitled Question',
+ type: 'text',
+ isRequired: false,
+ options: ['Option 1'],
+ description: '',
+ order: Date.now()
+ }
+ const newId = await addQuestionToSurvey(surveyId, base.type, base)
+ pendingSelectIdRef.current = newId
+ // rely on subscribeToQuestions to update list and selection
+ // eslint-disable-next-line
+ }, [surveyId])
+
+ const handleSelectQuestion = (index) => setCurrentQuestionIndex(index)
+
+ const updateCurrentQuestion = (patch) => {
+ setQuestions((prev) => {
+ if (currentQuestionIndex === null || currentQuestionIndex >= prev.length)
+ return prev
+ const next = [...prev]
+ next[currentQuestionIndex] = { ...next[currentQuestionIndex], ...patch }
+ // schedule save
+ scheduleQuestionSave(next[currentQuestionIndex])
+ return next
+ })
+ }
+
+ const handleDeleteCurrentQuestion = async () => {
+ const current = questions[currentQuestionIndex]
+ if (!current) return
+ await deleteQuestionFromSurvey(surveyId, current.id)
+ setQuestions((prev) => prev.filter((_, i) => i !== currentQuestionIndex))
+ setCurrentQuestionIndex((prev) => {
+ const remaining = questions.length - 1
+ if (remaining <= 0) return null
+ return Math.max(0, Math.min(prev, remaining - 1))
+ })
+ }
+
+ const currentQuestion =
+ currentQuestionIndex !== null ? questions[currentQuestionIndex] : null
+
+ const isLoading = !metaLoaded || !questionsLoaded
+
+ useEffect(() => {
+ if (!surveyId) return
+ let cancelled = false
+
+ const fetchOnce = async () => {
+ try {
+ const res = await getSurveyResponses(surveyId)
+ if (!cancelled && res?.ok) {
+ //console.log('Fetched responses:', res)
+ setResponses(res)
+ }
+ } catch (err) {
+ console.error('Failed to fetch responses:', err)
+ }
+ }
+
+ // Initial fetch on mount/id change
+ fetchOnce()
+
+ // Poll for updates to approximate real-time
+ const intervalId = setInterval(fetchOnce, 120000)
+
+ return () => {
+ cancelled = true
+ clearInterval(intervalId)
+ }
+ }, [surveyId])
+
+ return (
+ <>
+ theme.zIndex.drawer + 1 }} />
+
+ {/* EDIT QUESTION DRAWER */}
+
+
+
+
+
+ navigate('/admin')}
+ >
+
+
+
+
+
+
+ Edit Question
+
+
+
+ {currentQuestion ? (
+ <>
+
+ updateCurrentQuestion({ title: e.target.value })
+ }
+ />
+
+ updateCurrentQuestion({ description: e.target.value })
+ }
+ />
+
+ updateCurrentQuestion({ type: e.target.value })
+ }
+ >
+
+
+
+
+
+
+ {(currentQuestion.type === 'checklist' ||
+ currentQuestion.type === 'radio' ||
+ currentQuestion.type === 'dropdown') && (
+
+ updateCurrentQuestion({ options })
+ }
+ />
+ )}
+
+
+ updateCurrentQuestion({
+ isRequired: e.target.checked
+ })
+ }
+ />
+ }
+ sx={{ ml: '-6px' }}
+ />
+
+ }
+ onClick={handleDeleteCurrentQuestion}
+ >
+ Delete question
+
+ >
+ ) : (
+
+ Select a question to edit, or click “Add Question”.
+
+ )}
+
+
+
+ {/* END EDIT QUESTION DRAWER */}
+
+ {/* MAIN CONTENT */}
+
+ {isLoading ? (
+
+ ) : (
+ <>
+
+
+
+ {
+ const title = e.target.value
+ setSurveyMeta((s) => ({ ...s, title }))
+ scheduleMetaSave({ title })
+ }}
+ variant="standard"
+ />
+ {
+ const description = e.target.value
+ setSurveyMeta((s) => ({ ...s, description }))
+ scheduleMetaSave({ description })
+ }}
+ variant="standard"
+ />
+
+
+
+ {/* QUESTIONS AND ANSWERS CARD */}
+
+
+ setTabValue(newValue)}
+ variant="fullWidth"
+ sx={{
+ '& .MuiTabs-indicator': {
+ backgroundColor: 'accent.main'
+ }
+ }}
+ >
+
+
+
+
+ {/* QUESTIONS PREVIEW */}
+
+
+ {questions.map((question, index) => (
+ handleSelectQuestion(index)}
+ >
+
+
+ ))}
+ {questions.length === 0 && (
+
+ No questions yet. Click “Add Question” to get
+ started.
+
+ )}
+
+
+
+ {/* RESPONSES PREVIEW */}
+
+
+
+
+
+
+
+ {/* ADD QUESTION BUTTON */}
+
+ theme.zIndex.appBar + 1
+ }}
+ onClick={handleAddNewQuestion}
+ >
+
+
+
+ >
+ )}
+
+
+ >
+ )
+}
+
+export default EditSurvey
diff --git a/mentor-match-app/src/pages/GetStarted.jsx b/mentor-match-app/src/pages/GetStarted.jsx
index b14efd0..7cca2b8 100644
--- a/mentor-match-app/src/pages/GetStarted.jsx
+++ b/mentor-match-app/src/pages/GetStarted.jsx
@@ -25,8 +25,8 @@ import {
RadioGroup,
Radio
} from '@mui/material'
-import { LoadingButton } from '@mui/lab'
import { ErrorOutline } from '@mui/icons-material'
+import { LoadingButton } from '@mui/lab'
// Component imports
import ProfilePicture from '../components/ProfilePicture'
@@ -135,7 +135,7 @@ const GetStarted = () => {
const onSubmit = useCallback(
async (values, { setSubmitting }) => {
- console.log('Form submitted with values:', values)
+ //console.log('Form submitted with values:', values)
setSubmitting(true)
try {
const res = await updateUserProfile(user, values)
diff --git a/mentor-match-app/src/pages/Login.jsx b/mentor-match-app/src/pages/Login.jsx
index 626e9e9..75d168b 100644
--- a/mentor-match-app/src/pages/Login.jsx
+++ b/mentor-match-app/src/pages/Login.jsx
@@ -2,9 +2,9 @@ import { useState } from 'react'
import { useNavigate } from 'react-router-dom'
import { Button, Typography, Stack, Divider, Link, Box } from '@mui/material'
+import { LoadingButton } from '@mui/lab'
// eslint-disable-next-line
import { Google as GoogleIcon, GitHub as GitHubIcon } from '@mui/icons-material'
-import { LoadingButton } from '@mui/lab'
import MainCard from '../components/MainCard'
import PasswordField from '../components/inputFields/PasswordField'
diff --git a/mentor-match-app/src/pages/MenteeForm.jsx b/mentor-match-app/src/pages/MenteeForm.jsx
index 043f16f..d148e58 100644
--- a/mentor-match-app/src/pages/MenteeForm.jsx
+++ b/mentor-match-app/src/pages/MenteeForm.jsx
@@ -2,7 +2,7 @@
import { useCallback, useState, useRef } from 'react'
// Material-UI components and icons
-import { Typography, Stack, CircularProgress } from '@mui/material'
+import { Typography, Stack, CircularProgress, Button } from '@mui/material'
import { ErrorOutline } from '@mui/icons-material'
import { LoadingButton } from '@mui/lab'
@@ -99,7 +99,7 @@ const MenteeForm = () => {
try {
const res = await setMenteeForm(user, values)
if (res.ok) {
- console.log('Form submitted successfully')
+ //console.log('Form submitted successfully')
refreshUser() // Refresh the user data
setOpenDialog(true)
}
diff --git a/mentor-match-app/src/pages/MentorForm.jsx b/mentor-match-app/src/pages/MentorForm.jsx
index 4639bcc..b397b38 100644
--- a/mentor-match-app/src/pages/MentorForm.jsx
+++ b/mentor-match-app/src/pages/MentorForm.jsx
@@ -2,7 +2,7 @@
import { useCallback, useState, useRef } from 'react'
// Material UI components
-import { Typography, Stack, CircularProgress } from '@mui/material'
+import { Typography, Stack, CircularProgress, Button } from '@mui/material'
import { ErrorOutline } from '@mui/icons-material'
import { LoadingButton } from '@mui/lab'
diff --git a/mentor-match-app/src/pages/Signup.jsx b/mentor-match-app/src/pages/Signup.jsx
index 20eab82..daeb184 100644
--- a/mentor-match-app/src/pages/Signup.jsx
+++ b/mentor-match-app/src/pages/Signup.jsx
@@ -3,6 +3,7 @@ import { useCallback } from 'react'
import { Stack, Button, Typography, Link } from '@mui/material'
import { LoadingButton } from '@mui/lab'
+
// eslint-disable-next-line
import { Google as GoogleIcon, GitHub as GitHubIcon } from '@mui/icons-material'
@@ -80,7 +81,7 @@ const Signup = () => {
// eslint-disable-next-line
const githubSignUp = useCallback(async () => {
const res = await signInWithGithub()
- console.log(res)
+ //console.log(res)
if (!res.ok) {
return enqueueSnackbar(
'Failed to sign in with Github. Please try again.',
diff --git a/mentor-match-app/src/pages/Survey.jsx b/mentor-match-app/src/pages/Survey.jsx
new file mode 100644
index 0000000..4ecc326
--- /dev/null
+++ b/mentor-match-app/src/pages/Survey.jsx
@@ -0,0 +1,223 @@
+// React and hooks
+import { useParams, useNavigate } from 'react-router-dom'
+import { useState, useEffect, useRef, useMemo } from 'react'
+
+// Material-UI components
+import { Stack, Typography, Button, Box } from '@mui/material'
+import { LoadingButton } from '@mui/lab'
+
+// Component imports
+import TextfieldQuestion from '../components/questions/TextfieldQuestion'
+import RadioQuestion from '../components/questions/RadioQuestion'
+import CheckboxQuestion from '../components/questions/CheckboxQuestion'
+import DropdownQuestion from '../components/questions/DropdownQuestion'
+import FormCard from '../components/FormCard'
+import MainCard from '../components/MainCard'
+
+// Services and API
+import { Form, Formik } from 'formik'
+import * as Yup from 'yup'
+import {
+ getSurveyById,
+ submitSurveyResponse,
+ updateSurveyMeta
+} from '../api/surveys'
+import { useSnackbar } from 'notistack'
+import { useUser } from '../hooks/useUser'
+
+const Survey = () => {
+ const { id } = useParams()
+ const { user } = useUser()
+ const [survey, setSurvey] = useState(null)
+ const [loading, setLoading] = useState(true)
+ const topRef = useRef(null)
+ const { enqueueSnackbar } = useSnackbar()
+ const navigate = useNavigate()
+ const [showSubmittedMessage, setShowSubmittedMessage] = useState(false)
+
+ useEffect(() => {
+ const fetchSurvey = async () => {
+ try {
+ setLoading(true)
+ const surveyData = await getSurveyById(id)
+ setSurvey(surveyData)
+ } finally {
+ setLoading(false)
+ }
+ }
+ fetchSurvey()
+ }, [id])
+
+ // Build initial form values based on questions
+ const initialValues = useMemo(() => {
+ const init = {}
+ const qs = survey?.questions || []
+ qs.forEach((q, idx) => {
+ const name = q.id || `q_${idx}`
+ if (q.type === 'checklist') init[name] = []
+ else init[name] = ''
+ })
+ return init
+ }, [survey])
+
+ // Dynamic validation schema based on required flag and type
+ const validationSchema = useMemo(() => {
+ const shape = {}
+ const qs = survey?.questions || []
+ qs.forEach((q, idx) => {
+ const name = q.id || `q_${idx}`
+ if (q.isRequired) {
+ if (q.type === 'checklist') {
+ shape[name] = Yup.array().min(1, 'Required')
+ } else {
+ shape[name] = Yup.string().trim().required('Required')
+ }
+ } else {
+ if (q.type === 'checklist') {
+ shape[name] = Yup.array()
+ } else {
+ shape[name] = Yup.string().trim()
+ }
+ }
+ })
+ return Yup.object().shape(shape)
+ }, [survey])
+
+ const onSubmit = async (values, { setSubmitting }) => {
+ setSubmitting(true)
+ try {
+ //console.log('Form submitted with values:', values)
+ const res = await submitSurveyResponse(id, values, user.uid)
+ await updateSurveyMeta(id, {
+ responses: survey.responses + 1
+ })
+
+ if (res.ok) {
+ enqueueSnackbar('Survey submitted successfully!', {
+ variant: 'success'
+ })
+ setShowSubmittedMessage(true)
+ } else {
+ enqueueSnackbar('Error submitting survey: ' + res.error, {
+ variant: 'error'
+ })
+ }
+ } catch (error) {
+ console.error('Error submitting form:', error)
+ } finally {
+ setSubmitting(false)
+ }
+ }
+
+ // Map question types to components to eliminate duplicated conditional blocks
+ const COMPONENTS = {
+ text: TextfieldQuestion,
+ radio: RadioQuestion,
+ checklist: CheckboxQuestion,
+ dropdown: DropdownQuestion
+ }
+
+ return (
+ <>
+ {showSubmittedMessage ? (
+
+
+
+
+
+ Your response has been recorded
+
+
+
+
+
+
+ ) : (
+
+ {survey && (
+
+ {({ isSubmitting, isValid }) => (
+
+ )}
+
+ )}
+
+ )}
+ >
+ )
+}
+
+export default Survey