diff --git a/client/package-lock.json b/client/package-lock.json
index 42436e972..189f1fbe3 100644
--- a/client/package-lock.json
+++ b/client/package-lock.json
@@ -14,18 +14,18 @@
"@emotion/is-prop-valid": "^1.3.1",
"@fingerprintjs/fingerprintjs": "^4.6.1",
"@firebase/analytics": "^0.10.16",
- "@firebase/app": "^0.13.0",
+ "@firebase/app": "^0.13.1",
"@firebase/auth": "^1.10.6",
- "@firebase/firestore": "^4.7.16",
+ "@firebase/firestore": "^4.7.17",
"@firebase/messaging": "^0.12.21",
"@jsreport/browser-client": "^3.1.0",
"@reduxjs/toolkit": "^2.8.2",
"@sentry/cli": "^2.46.0",
- "@sentry/react": "^9.23.0",
+ "@sentry/react": "^9.27.0",
"@sentry/vite-plugin": "^3.5.0",
- "@splitsoftware/splitio-react": "^2.1.1",
+ "@splitsoftware/splitio-react": "^2.3.1",
"@tanem/react-nprogress": "^5.0.53",
- "antd": "^5.25.3",
+ "antd": "^5.25.4",
"apollo-link-logger": "^2.0.1",
"apollo-link-sentry": "^4.3.0",
"autosize": "^6.0.1",
@@ -42,18 +42,18 @@
"i18next": "^24.2.3",
"i18next-browser-languagedetector": "^8.1.0",
"immutability-helper": "^3.1.1",
- "libphonenumber-js": "^1.12.8",
+ "libphonenumber-js": "^1.12.9",
"logrocket": "^9.0.2",
"markerjs2": "^2.32.4",
"memoize-one": "^6.0.0",
- "normalize-url": "^8.0.1",
+ "normalize-url": "^8.0.2",
"object-hash": "^3.0.0",
"phone": "^3.1.59",
"prop-types": "^15.8.1",
"query-string": "^9.2.0",
"raf-schd": "^4.0.3",
"react": "^18.3.1",
- "react-big-calendar": "^1.18.0",
+ "react-big-calendar": "^1.19.2",
"react-color": "^2.19.3",
"react-cookie": "^8.0.1",
"react-dom": "^18.3.1",
@@ -71,7 +71,7 @@
"react-resizable": "^3.0.5",
"react-router-dom": "^6.30.0",
"react-sticky": "^6.0.3",
- "react-virtuoso": "^4.12.7",
+ "react-virtuoso": "^4.12.8",
"recharts": "^2.15.2",
"redux": "^5.0.1",
"redux-actions": "^3.0.3",
@@ -79,7 +79,7 @@
"redux-saga": "^1.3.0",
"redux-state-sync": "^3.1.4",
"reselect": "^5.1.1",
- "sass": "^1.89.0",
+ "sass": "^1.89.1",
"socket.io-client": "^4.8.1",
"styled-components": "^6.1.18",
"subscriptions-transport-ws": "^0.11.0",
@@ -94,14 +94,14 @@
"@dotenvx/dotenvx": "^1.44.1",
"@emotion/babel-plugin": "^11.13.5",
"@emotion/react": "^11.14.0",
- "@eslint/js": "^9.27.0",
+ "@eslint/js": "^9.28.0",
"@playwright/test": "^1.51.1",
"@sentry/webpack-plugin": "^3.5.0",
"@testing-library/dom": "^10.4.0",
"@testing-library/jest-dom": "^6.6.3",
"@testing-library/react": "^16.3.0",
- "@vitejs/plugin-react": "^4.5.0",
- "browserslist": "^4.24.5",
+ "@vitejs/plugin-react": "^4.5.1",
+ "browserslist": "^4.25.0",
"browserslist-to-esbuild": "^2.1.1",
"chalk": "^5.4.1",
"eslint": "^8.57.1",
@@ -121,7 +121,7 @@
"vite-plugin-node-polyfills": "^0.23.0",
"vite-plugin-pwa": "^1.0.0",
"vite-plugin-style-import": "^2.0.0",
- "vitest": "^3.1.4",
+ "vitest": "^3.2.3",
"workbox-window": "^7.3.0"
},
"engines": {
@@ -2913,9 +2913,9 @@
}
},
"node_modules/@eslint/js": {
- "version": "9.27.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz",
- "integrity": "sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==",
+ "version": "9.28.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.28.0.tgz",
+ "integrity": "sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2951,9 +2951,9 @@
}
},
"node_modules/@firebase/app": {
- "version": "0.13.0",
- "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.13.0.tgz",
- "integrity": "sha512-Vj3MST245nq+V5UmmfEkB3isIgPouyUr8yGJlFeL9Trg/umG5ogAvrjAYvQ8gV7daKDoQSRnJKWI2JFpQqRsuQ==",
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.13.1.tgz",
+ "integrity": "sha512-0O33PKrXLoIWkoOO5ByFaLjZehBctSYWnb+xJkIdx2SKP/K9l1UPFXPwASyrOIqyY3ws+7orF/1j7wI5EKzPYQ==",
"license": "Apache-2.0",
"dependencies": {
"@firebase/component": "0.6.17",
@@ -3004,9 +3004,9 @@
}
},
"node_modules/@firebase/firestore": {
- "version": "4.7.16",
- "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.7.16.tgz",
- "integrity": "sha512-5OpvlwYVUTLEnqewOlXmtIpH8t2ISlZHDW0NDbKROM2D0ATMqFkMHdvl+/wz9zOAcb8GMQYlhCihOnVAliUbpQ==",
+ "version": "4.7.17",
+ "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.7.17.tgz",
+ "integrity": "sha512-YhXWA7HlSnekExhZ5u4i0e+kpPxsh/qMrzeNDgsAva71JXK8OOuOx+yLyYBFhmu3Hr5JJDO2fsZA/wrWoQYHDg==",
"license": "Apache-2.0",
"dependencies": {
"@firebase/component": "0.6.17",
@@ -4469,50 +4469,50 @@
"license": "MIT"
},
"node_modules/@sentry-internal/browser-utils": {
- "version": "9.23.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-9.23.0.tgz",
- "integrity": "sha512-hyN2Q6mh7ggw8sDVHeRyWz5LR6gjvf8zHSzQnMaF7QkeSyaeGM/SVSL4ODwqR9TRH7U2ku6nZFMbKhaBPV+Hfg==",
+ "version": "9.27.0",
+ "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-9.27.0.tgz",
+ "integrity": "sha512-SJa7f6Ct1BzP8rWEomnshSGN1CmT+axNKvT+StrbFPD6AyHnYfFLJpKgc2iToIJHB/pmeuOI9dUwqtzVx+5nSw==",
"license": "MIT",
"dependencies": {
- "@sentry/core": "9.23.0"
+ "@sentry/core": "9.27.0"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@sentry-internal/feedback": {
- "version": "9.23.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-9.23.0.tgz",
- "integrity": "sha512-Xf+KqV69TBiPo1gk2EsU6O/dumuTMxWOF52uVWJddQYI3pQTU5DqSeoZ5AY76bIIhV9n6AEFDGqNPXmuj4Acrw==",
+ "version": "9.27.0",
+ "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-9.27.0.tgz",
+ "integrity": "sha512-e7L8eG0y63RulN352lmafoCCfQGg4jLVT8YLx6096eWu/YKLkgmVpgi8livsT5WREnH+HB+iFSrejOwK7cRkhw==",
"license": "MIT",
"dependencies": {
- "@sentry/core": "9.23.0"
+ "@sentry/core": "9.27.0"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@sentry-internal/replay": {
- "version": "9.23.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-9.23.0.tgz",
- "integrity": "sha512-0/q15tvSboaK7/05BFQhs71bqgHKejJoDJgXmH0lySqgsRh/S18867ZxQNiuYhuVt337h07u1QaCyjnNJKHfuA==",
+ "version": "9.27.0",
+ "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-9.27.0.tgz",
+ "integrity": "sha512-n2kO1wOfCG7GxkMAqbYYkpgTqJM5tuVLdp0JuNCqTOLTXWvw6svWGaYKlYpKUgsK9X/GDzJYSXZmfe+Dbg+FJQ==",
"license": "MIT",
"dependencies": {
- "@sentry-internal/browser-utils": "9.23.0",
- "@sentry/core": "9.23.0"
+ "@sentry-internal/browser-utils": "9.27.0",
+ "@sentry/core": "9.27.0"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@sentry-internal/replay-canvas": {
- "version": "9.23.0",
- "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-9.23.0.tgz",
- "integrity": "sha512-cYlw5svJjyPequm0PJjFGLpee86L1NieONEHlujOXkIG6IEriiorMm+8bNpGsHRuyvg41B+4P/YmcQAGtEGxXg==",
+ "version": "9.27.0",
+ "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-9.27.0.tgz",
+ "integrity": "sha512-44rVSt3LCH6qePYRQrl4WUBwnkOk9dzinmnKmuwRksEdDOkVq5KBRhi/IDr7omwSpX8C+KrX5alfKhOx1cP0gQ==",
"license": "MIT",
"dependencies": {
- "@sentry-internal/replay": "9.23.0",
- "@sentry/core": "9.23.0"
+ "@sentry-internal/replay": "9.27.0",
+ "@sentry/core": "9.27.0"
},
"engines": {
"node": ">=18"
@@ -4528,16 +4528,16 @@
}
},
"node_modules/@sentry/browser": {
- "version": "9.23.0",
- "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-9.23.0.tgz",
- "integrity": "sha512-QRkNxWys8e088260vByztoTsEVZ0W6v/XnZfKT6wkPPGn0aFeOrg/xjgxfI8D5huqZCxT28Cf23akOOly4FXjg==",
+ "version": "9.27.0",
+ "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-9.27.0.tgz",
+ "integrity": "sha512-geR3lhRJOmUQqi1WgovLSYcD/f66zYnctdnDEa7j1BW2XIB1nlTJn0mpYyAHghXKkUN/pBpp1Z+Jk0XlVwFYVg==",
"license": "MIT",
"dependencies": {
- "@sentry-internal/browser-utils": "9.23.0",
- "@sentry-internal/feedback": "9.23.0",
- "@sentry-internal/replay": "9.23.0",
- "@sentry-internal/replay-canvas": "9.23.0",
- "@sentry/core": "9.23.0"
+ "@sentry-internal/browser-utils": "9.27.0",
+ "@sentry-internal/feedback": "9.27.0",
+ "@sentry-internal/replay": "9.27.0",
+ "@sentry-internal/replay-canvas": "9.27.0",
+ "@sentry/core": "9.27.0"
},
"engines": {
"node": ">=18"
@@ -4914,22 +4914,22 @@
}
},
"node_modules/@sentry/core": {
- "version": "9.23.0",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-9.23.0.tgz",
- "integrity": "sha512-9846pn/BvASGgl7WsnKY4xry98WreP9ToeLfCQTQOf+pNfD/qNPn1/0xPInGni3LVMAXRtfHHMPm2Ghz255N7A==",
+ "version": "9.27.0",
+ "resolved": "https://registry.npmjs.org/@sentry/core/-/core-9.27.0.tgz",
+ "integrity": "sha512-Zb2SSAdWXQjTem+sVWrrAq9L6YYfxyoTwtapaE6C6qZBR5C8Uak0wcYww8StaCFH7dDA/PSW+VxOwjNXocrQHQ==",
"license": "MIT",
"engines": {
"node": ">=18"
}
},
"node_modules/@sentry/react": {
- "version": "9.23.0",
- "resolved": "https://registry.npmjs.org/@sentry/react/-/react-9.23.0.tgz",
- "integrity": "sha512-2J/oOx8jd7Jr2koYIe5IcJyStHBXpjkQnxawo54Zyyvzc96MftyM2Dv5TeYdz7fChU1NIXw7BVbEpkQ9XEQlqg==",
+ "version": "9.27.0",
+ "resolved": "https://registry.npmjs.org/@sentry/react/-/react-9.27.0.tgz",
+ "integrity": "sha512-UT7iaGEwTqe06O4mgHfKGTRBHg+U0JSI/id+QxrOji6ksosOsSnSC3Vdq+gPs9pzCCFE+6+DkH6foYNNLIN0lw==",
"license": "MIT",
"dependencies": {
- "@sentry/browser": "9.23.0",
- "@sentry/core": "9.23.0",
+ "@sentry/browser": "9.27.0",
+ "@sentry/core": "9.27.0",
"hoist-non-react-statics": "^3.3.2"
},
"engines": {
@@ -4977,12 +4977,12 @@
"license": "MIT"
},
"node_modules/@splitsoftware/splitio": {
- "version": "11.2.0",
- "resolved": "https://registry.npmjs.org/@splitsoftware/splitio/-/splitio-11.2.0.tgz",
- "integrity": "sha512-M0TK8jlhLBv4+PchzBvn5R33MZzvRTInauGKGeaTpbxI+zq/g58meaNEiLRJxNw1lAWOjPhPRLIVg+V3Mf+uaA==",
+ "version": "11.4.1",
+ "resolved": "https://registry.npmjs.org/@splitsoftware/splitio/-/splitio-11.4.1.tgz",
+ "integrity": "sha512-wipPwsWwXPRzvEs28VYahILsF8+Lor4tby2GB3CD9kn0C3sQ2Zf3/NaDH4i7acobMlRy2sQ5mu4eeRt15gLJyw==",
"license": "Apache-2.0",
"dependencies": {
- "@splitsoftware/splitio-commons": "2.2.0",
+ "@splitsoftware/splitio-commons": "2.4.1",
"bloom-filters": "^3.0.4",
"ioredis": "^4.28.0",
"js-yaml": "^3.13.1",
@@ -4995,9 +4995,9 @@
}
},
"node_modules/@splitsoftware/splitio-commons": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@splitsoftware/splitio-commons/-/splitio-commons-2.2.0.tgz",
- "integrity": "sha512-ywWDh2fM4/EqJ1AByjXM13gAal+z/WSGiBQ5OZmjpL/iqFLENy3yo/GwsxR/ataOi27XbRQTeQbE/eD7HVnWiA==",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@splitsoftware/splitio-commons/-/splitio-commons-2.4.1.tgz",
+ "integrity": "sha512-VcbWpPykfx19LTJ0yeZbV0u3PUIt8MuiZ2a8zqkNf9KnDnhau/XxS/ctoO5jYrg4Nk2rCi0fpt1TkTstqzbaYA==",
"license": "Apache-2.0",
"dependencies": {
"@types/ioredis": "^4.28.0",
@@ -5013,12 +5013,12 @@
}
},
"node_modules/@splitsoftware/splitio-react": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@splitsoftware/splitio-react/-/splitio-react-2.2.0.tgz",
- "integrity": "sha512-OvGHtnrcJaBaY1Ec5skXWTiVCof8PsP6I4/g37BAgmvJEpLj6tgC5BDC4oyUWRnQOf8P7pqGtW0Qzk9wjJrpVQ==",
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/@splitsoftware/splitio-react/-/splitio-react-2.3.1.tgz",
+ "integrity": "sha512-s1+IbKvK2HbQykjJKgezBBg076ZsT6f470FJn68N5DtgsVn0QXIwpTZ+j3k78x4ISVZcXTpY0GgWohZ+lujPlg==",
"license": "Apache-2.0",
"dependencies": {
- "@splitsoftware/splitio": "11.2.0",
+ "@splitsoftware/splitio": "11.4.1",
"memoize-one": "^5.1.1",
"shallowequal": "^1.1.0",
"tslib": "^2.3.1"
@@ -5273,6 +5273,16 @@
"@babel/types": "^7.20.7"
}
},
+ "node_modules/@types/chai": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz",
+ "integrity": "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/deep-eql": "*"
+ }
+ },
"node_modules/@types/d3-array": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz",
@@ -5345,6 +5355,13 @@
"@types/ms": "*"
}
},
+ "node_modules/@types/deep-eql": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz",
+ "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/eslint": {
"version": "8.56.12",
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.12.tgz",
@@ -5805,9 +5822,9 @@
"license": "ISC"
},
"node_modules/@vitejs/plugin-react": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.5.0.tgz",
- "integrity": "sha512-JuLWaEqypaJmOJPLWwO335Ig6jSgC1FTONCWAxnqcQthLTK/Yc9aH6hr9z/87xciejbQcnP3GnA1FWUSWeXaeg==",
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.5.1.tgz",
+ "integrity": "sha512-uPZBqSI0YD4lpkIru6M35sIfylLGTyhGHvDZbNLuMA73lMlwJKz5xweH7FajfcCAc2HnINciejA9qTz0dr0M7A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5826,14 +5843,15 @@
}
},
"node_modules/@vitest/expect": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.1.4.tgz",
- "integrity": "sha512-xkD/ljeliyaClDYqHPNCiJ0plY5YIcM0OlRiZizLhlPmpXWpxnGMyTZXOHFhFeG7w9P5PBeL4IdtJ/HeQwTbQA==",
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.3.tgz",
+ "integrity": "sha512-W2RH2TPWVHA1o7UmaFKISPvdicFJH+mjykctJFoAkUw+SPTJTGjUNdKscFBrqM7IPnCVu6zihtKYa7TkZS1dkQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/spy": "3.1.4",
- "@vitest/utils": "3.1.4",
+ "@types/chai": "^5.2.2",
+ "@vitest/spy": "3.2.3",
+ "@vitest/utils": "3.2.3",
"chai": "^5.2.0",
"tinyrainbow": "^2.0.0"
},
@@ -5842,13 +5860,13 @@
}
},
"node_modules/@vitest/mocker": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.1.4.tgz",
- "integrity": "sha512-8IJ3CvwtSw/EFXqWFL8aCMu+YyYXG2WUSrQbViOZkWTKTVicVwZ/YiEZDSqD00kX+v/+W+OnxhNWoeVKorHygA==",
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.3.tgz",
+ "integrity": "sha512-cP6fIun+Zx8he4rbWvi+Oya6goKQDZK+Yq4hhlggwQBbrlOQ4qtZ+G4nxB6ZnzI9lyIb+JnvyiJnPC2AGbKSPA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/spy": "3.1.4",
+ "@vitest/spy": "3.2.3",
"estree-walker": "^3.0.3",
"magic-string": "^0.30.17"
},
@@ -5857,7 +5875,7 @@
},
"peerDependencies": {
"msw": "^2.4.9",
- "vite": "^5.0.0 || ^6.0.0"
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0"
},
"peerDependenciesMeta": {
"msw": {
@@ -5889,9 +5907,9 @@
}
},
"node_modules/@vitest/pretty-format": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.4.tgz",
- "integrity": "sha512-cqv9H9GvAEoTaoq+cYqUTCGscUjKqlJZC7PRwY5FMySVj5J+xOm1KQcCiYHJOEzOKRUhLH4R2pTwvFlWCEScsg==",
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.3.tgz",
+ "integrity": "sha512-yFglXGkr9hW/yEXngO+IKMhP0jxyFw2/qys/CK4fFUZnSltD+MU7dVYGrH8rvPcK/O6feXQA+EU33gjaBBbAng==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5902,14 +5920,15 @@
}
},
"node_modules/@vitest/runner": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.1.4.tgz",
- "integrity": "sha512-djTeF1/vt985I/wpKVFBMWUlk/I7mb5hmD5oP8K9ACRmVXgKTae3TUOtXAEBfslNKPzUQvnKhNd34nnRSYgLNQ==",
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.3.tgz",
+ "integrity": "sha512-83HWYisT3IpMaU9LN+VN+/nLHVBCSIUKJzGxC5RWUOsK1h3USg7ojL+UXQR3b4o4UBIWCYdD2fxuzM7PQQ1u8w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/utils": "3.1.4",
- "pathe": "^2.0.3"
+ "@vitest/utils": "3.2.3",
+ "pathe": "^2.0.3",
+ "strip-literal": "^3.0.0"
},
"funding": {
"url": "https://opencollective.com/vitest"
@@ -5923,13 +5942,13 @@
"license": "MIT"
},
"node_modules/@vitest/snapshot": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.1.4.tgz",
- "integrity": "sha512-JPHf68DvuO7vilmvwdPr9TS0SuuIzHvxeaCkxYcCD4jTk67XwL45ZhEHFKIuCm8CYstgI6LZ4XbwD6ANrwMpFg==",
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.3.tgz",
+ "integrity": "sha512-9gIVWx2+tysDqUmmM1L0hwadyumqssOL1r8KJipwLx5JVYyxvVRfxvMq7DaWbZZsCqZnu/dZedaZQh4iYTtneA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/pretty-format": "3.1.4",
+ "@vitest/pretty-format": "3.2.3",
"magic-string": "^0.30.17",
"pathe": "^2.0.3"
},
@@ -5955,26 +5974,26 @@
"license": "MIT"
},
"node_modules/@vitest/spy": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.1.4.tgz",
- "integrity": "sha512-Xg1bXhu+vtPXIodYN369M86K8shGLouNjoVI78g8iAq2rFoHFdajNvJJ5A/9bPMFcfQqdaCpOgWKEoMQg/s0Yg==",
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.3.tgz",
+ "integrity": "sha512-JHu9Wl+7bf6FEejTCREy+DmgWe+rQKbK+y32C/k5f4TBIAlijhJbRBIRIOCEpVevgRsCQR2iHRUH2/qKVM/plw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "tinyspy": "^3.0.2"
+ "tinyspy": "^4.0.3"
},
"funding": {
"url": "https://opencollective.com/vitest"
}
},
"node_modules/@vitest/utils": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.1.4.tgz",
- "integrity": "sha512-yriMuO1cfFhmiGc8ataN51+9ooHRuURdfAZfwFd3usWynjzpLslZdYnRegTv32qdgtJTsj15FoeZe2g15fY1gg==",
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.3.tgz",
+ "integrity": "sha512-4zFBCU5Pf+4Z6v+rwnZ1HU1yzOKKvDkMXZrymE2PBlbjKJRlrOxbvpfPSvJTGRIwGoahaOGvp+kbCoxifhzJ1Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/pretty-format": "3.1.4",
+ "@vitest/pretty-format": "3.2.3",
"loupe": "^3.1.3",
"tinyrainbow": "^2.0.0"
},
@@ -6104,9 +6123,9 @@
}
},
"node_modules/antd": {
- "version": "5.25.3",
- "resolved": "https://registry.npmjs.org/antd/-/antd-5.25.3.tgz",
- "integrity": "sha512-tBBcAFRjmWM3sitxrL/FEbQL+MTQntYY5bGa5c1ZZZHXWCynkhS3Ch/gy25mGMUY1M/9Uw3pH029v/RGht1x3w==",
+ "version": "5.25.4",
+ "resolved": "https://registry.npmjs.org/antd/-/antd-5.25.4.tgz",
+ "integrity": "sha512-yXdWqq1NJSZnD1HoPZWnWuQJGVYYnB3h0Ufsz4sbt3T0N9SdJ4G9GPpLMk8Gn9zWtwBekfR4THPVZ9uzAyhBHQ==",
"license": "MIT",
"dependencies": {
"@ant-design/colors": "^7.2.1",
@@ -6128,7 +6147,7 @@
"rc-checkbox": "~3.5.0",
"rc-collapse": "~3.9.0",
"rc-dialog": "~9.6.0",
- "rc-drawer": "~7.2.0",
+ "rc-drawer": "~7.3.0",
"rc-dropdown": "~4.2.1",
"rc-field-form": "~2.7.0",
"rc-image": "~7.12.0",
@@ -6154,7 +6173,7 @@
"rc-tooltip": "~6.4.0",
"rc-tree": "~5.13.1",
"rc-tree-select": "~5.27.0",
- "rc-upload": "~4.9.0",
+ "rc-upload": "~4.9.2",
"rc-util": "^5.44.4",
"scroll-into-view-if-needed": "^3.1.0",
"throttle-debounce": "^5.0.2"
@@ -6982,9 +7001,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.24.5",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz",
- "integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==",
+ "version": "4.25.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz",
+ "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==",
"funding": [
{
"type": "opencollective",
@@ -7001,8 +7020,8 @@
],
"license": "MIT",
"dependencies": {
- "caniuse-lite": "^1.0.30001716",
- "electron-to-chromium": "^1.5.149",
+ "caniuse-lite": "^1.0.30001718",
+ "electron-to-chromium": "^1.5.160",
"node-releases": "^2.0.19",
"update-browserslist-db": "^1.1.3"
},
@@ -7181,9 +7200,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001717",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001717.tgz",
- "integrity": "sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw==",
+ "version": "1.0.30001721",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001721.tgz",
+ "integrity": "sha512-cOuvmUVtKrtEaoKiO0rSc29jcjwMwX5tOHDy4MgVFEWiUXj4uBMJkwI8MDySkgXidpMiHUcviogAvFi4pA2hDQ==",
"funding": [
{
"type": "opencollective",
@@ -7978,9 +7997,9 @@
}
},
"node_modules/debug": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
- "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
+ "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
"license": "MIT",
"dependencies": {
"ms": "^2.1.3"
@@ -8345,9 +8364,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.5.149",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.149.tgz",
- "integrity": "sha512-UyiO82eb9dVOx8YO3ajDf9jz2kKyt98DEITRdeLPstOEuTlLzDA4Gyq5K9he71TQziU5jUVu2OAu5N48HmQiyQ==",
+ "version": "1.5.165",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.165.tgz",
+ "integrity": "sha512-naiMx1Z6Nb2TxPU6fiFrUrDTjyPMLdTtaOd2oLmG8zVSg2hCWGkhPyxwk+qRmZ1ytwVqUv0u7ZcDA5+ALhaUtw==",
"license": "ISC"
},
"node_modules/elliptic": {
@@ -11480,9 +11499,9 @@
}
},
"node_modules/libphonenumber-js": {
- "version": "1.12.8",
- "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.8.tgz",
- "integrity": "sha512-f1KakiQJa9tdc7w1phC2ST+DyxWimy9c3g3yeF+84QtEanJr2K77wAmBPP22riU05xldniHsvXuflnLZ4oysqA==",
+ "version": "1.12.9",
+ "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.9.tgz",
+ "integrity": "sha512-VWwAdNeJgN7jFOD+wN4qx83DTPMVPPAUyx9/TUkBXKLiNkuWWk6anV0439tgdtwaJDrEdqkvdN22iA6J4bUCZg==",
"license": "MIT"
},
"node_modules/lines-and-columns": {
@@ -12689,9 +12708,9 @@
}
},
"node_modules/normalize-url": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz",
- "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==",
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.2.tgz",
+ "integrity": "sha512-Ee/R3SyN4BuynXcnTaekmaVdbDAEiNrHqjQIA37mHU8G9pf7aaAD4ZX3XjBLo6rsdcxA/gtkcNYZLt30ACgynw==",
"license": "MIT",
"engines": {
"node": ">=14.16"
@@ -13742,9 +13761,9 @@
}
},
"node_modules/rc-drawer": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/rc-drawer/-/rc-drawer-7.2.0.tgz",
- "integrity": "sha512-9lOQ7kBekEJRdEpScHvtmEtXnAsy+NGDXiRWc2ZVC7QXAazNVbeT4EraQKYwCME8BJLa8Bxqxvs5swwyOepRwg==",
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/rc-drawer/-/rc-drawer-7.3.0.tgz",
+ "integrity": "sha512-DX6CIgiBWNpJIMGFO8BAISFkxiuKitoizooj4BDyee8/SnBn0zwO2FHrNDpqqepj0E/TFTDpmEBCyFuTgC7MOg==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.23.9",
@@ -14235,9 +14254,9 @@
}
},
"node_modules/rc-upload": {
- "version": "4.9.0",
- "resolved": "https://registry.npmjs.org/rc-upload/-/rc-upload-4.9.0.tgz",
- "integrity": "sha512-pAzlPnyiFn1GCtEybEG2m9nXNzQyWXqWV2xFYCmDxjN9HzyjS5Pz2F+pbNdYw8mMJsixLEKLG0wVy9vOGxJMJA==",
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/rc-upload/-/rc-upload-4.9.2.tgz",
+ "integrity": "sha512-nHx+9rbd1FKMiMRYsqQ3NkXUv7COHPBo3X1Obwq9SWS6/diF/A0aJ5OHubvwUAIDs+4RMleljV0pcrNUc823GQ==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.18.3",
@@ -14295,9 +14314,9 @@
}
},
"node_modules/react-big-calendar": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/react-big-calendar/-/react-big-calendar-1.18.0.tgz",
- "integrity": "sha512-bGrCdyfnCGe2qnIdEoGkGgQdEFOiGO1Tq7RLkI1a2t8ZudyEAKekFtneO2/ltKQEQK6zH76YdJ7vR9UMyD+ULw==",
+ "version": "1.19.2",
+ "resolved": "https://registry.npmjs.org/react-big-calendar/-/react-big-calendar-1.19.2.tgz",
+ "integrity": "sha512-2orH+TOXPJBlQGwSl9ZnTK2WZR9OfVf0r1s8mnbpjvtENZfmWHP6nXqxmten1vkvzOMqefVGjh5GurM27HHOZw==",
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.20.7",
@@ -14723,9 +14742,9 @@
}
},
"node_modules/react-virtuoso": {
- "version": "4.12.7",
- "resolved": "https://registry.npmjs.org/react-virtuoso/-/react-virtuoso-4.12.7.tgz",
- "integrity": "sha512-njJp764he6Fi1p89PUW0k2kbyWu9w/y+MwdxmwK2kvdwwzVDbz2c2wMj5xdSruBFVgFTsI7Z85hxZR7aSHBrbQ==",
+ "version": "4.12.8",
+ "resolved": "https://registry.npmjs.org/react-virtuoso/-/react-virtuoso-4.12.8.tgz",
+ "integrity": "sha512-NMMKfDBr/+xZZqCQF3tN1SZsh6FwOJkYgThlfnsPLkaEhdyQo0EuWUzu3ix6qjnI7rYwJhMwRGoJBi+aiDfGsA==",
"license": "MIT",
"peerDependencies": {
"react": ">=16 || >=17 || >= 18 || >= 19",
@@ -15400,9 +15419,9 @@
"license": "MIT"
},
"node_modules/sass": {
- "version": "1.89.0",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.0.tgz",
- "integrity": "sha512-ld+kQU8YTdGNjOLfRWBzewJpU5cwEv/h5yyqlSeJcj6Yh8U4TDA9UA5FPicqDz/xgRPWRSYIQNiFks21TbA9KQ==",
+ "version": "1.89.1",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.1.tgz",
+ "integrity": "sha512-eMLLkl+qz7tx/0cJ9wI+w09GQ2zodTkcE/aVfywwdlRcI3EO19xGnbmJwg/JMIm+5MxVJ6outddLZ4Von4E++Q==",
"license": "MIT",
"dependencies": {
"chokidar": "^4.0.0",
@@ -16281,6 +16300,26 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/strip-literal": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz",
+ "integrity": "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "js-tokens": "^9.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/strip-literal/node_modules/js-tokens": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz",
+ "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/style-to-js": {
"version": "1.1.16",
"resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.16.tgz",
@@ -16647,9 +16686,9 @@
"license": "MIT"
},
"node_modules/tinyglobby": {
- "version": "0.2.13",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz",
- "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==",
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
+ "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -16664,9 +16703,9 @@
}
},
"node_modules/tinypool": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz",
- "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.0.tgz",
+ "integrity": "sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -16684,9 +16723,9 @@
}
},
"node_modules/tinyspy": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz",
- "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.3.tgz",
+ "integrity": "sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -17558,17 +17597,17 @@
}
},
"node_modules/vite-node": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.1.4.tgz",
- "integrity": "sha512-6enNwYnpyDo4hEgytbmc6mYWHXDHYEn0D1/rw4Q+tnHUGtKTJsn8T1YkX6Q18wI5LCrS8CTYlBaiCqxOy2kvUA==",
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.3.tgz",
+ "integrity": "sha512-gc8aAifGuDIpZHrPjuHyP4dpQmYXqWw7D1GmDnWeNWP654UEXzVfQ5IHPSK5HaHkwB/+p1atpYpSdw/2kOv8iQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"cac": "^6.7.14",
- "debug": "^4.4.0",
+ "debug": "^4.4.1",
"es-module-lexer": "^1.7.0",
"pathe": "^2.0.3",
- "vite": "^5.0.0 || ^6.0.0"
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0"
},
"bin": {
"vite-node": "vite-node.mjs"
@@ -17756,32 +17795,34 @@
}
},
"node_modules/vitest": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.1.4.tgz",
- "integrity": "sha512-Ta56rT7uWxCSJXlBtKgIlApJnT6e6IGmTYxYcmxjJ4ujuZDI59GUQgVDObXXJujOmPDBYXHK1qmaGtneu6TNIQ==",
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.3.tgz",
+ "integrity": "sha512-E6U2ZFXe3N/t4f5BwUaVCKRLHqUpk1CBWeMh78UT4VaTPH/2dyvH6ALl29JTovEPu9dVKr/K/J4PkXgrMbw4Ww==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/expect": "3.1.4",
- "@vitest/mocker": "3.1.4",
- "@vitest/pretty-format": "^3.1.4",
- "@vitest/runner": "3.1.4",
- "@vitest/snapshot": "3.1.4",
- "@vitest/spy": "3.1.4",
- "@vitest/utils": "3.1.4",
+ "@types/chai": "^5.2.2",
+ "@vitest/expect": "3.2.3",
+ "@vitest/mocker": "3.2.3",
+ "@vitest/pretty-format": "^3.2.3",
+ "@vitest/runner": "3.2.3",
+ "@vitest/snapshot": "3.2.3",
+ "@vitest/spy": "3.2.3",
+ "@vitest/utils": "3.2.3",
"chai": "^5.2.0",
- "debug": "^4.4.0",
+ "debug": "^4.4.1",
"expect-type": "^1.2.1",
"magic-string": "^0.30.17",
"pathe": "^2.0.3",
+ "picomatch": "^4.0.2",
"std-env": "^3.9.0",
"tinybench": "^2.9.0",
"tinyexec": "^0.3.2",
- "tinyglobby": "^0.2.13",
- "tinypool": "^1.0.2",
+ "tinyglobby": "^0.2.14",
+ "tinypool": "^1.1.0",
"tinyrainbow": "^2.0.0",
- "vite": "^5.0.0 || ^6.0.0",
- "vite-node": "3.1.4",
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0",
+ "vite-node": "3.2.3",
"why-is-node-running": "^2.3.0"
},
"bin": {
@@ -17797,8 +17838,8 @@
"@edge-runtime/vm": "*",
"@types/debug": "^4.1.12",
"@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
- "@vitest/browser": "3.1.4",
- "@vitest/ui": "3.1.4",
+ "@vitest/browser": "3.2.3",
+ "@vitest/ui": "3.2.3",
"happy-dom": "*",
"jsdom": "*"
},
diff --git a/client/package.json b/client/package.json
index 61af4372d..b8de01625 100644
--- a/client/package.json
+++ b/client/package.json
@@ -13,18 +13,18 @@
"@emotion/is-prop-valid": "^1.3.1",
"@fingerprintjs/fingerprintjs": "^4.6.1",
"@firebase/analytics": "^0.10.16",
- "@firebase/app": "^0.13.0",
+ "@firebase/app": "^0.13.1",
"@firebase/auth": "^1.10.6",
- "@firebase/firestore": "^4.7.16",
+ "@firebase/firestore": "^4.7.17",
"@firebase/messaging": "^0.12.21",
"@jsreport/browser-client": "^3.1.0",
"@reduxjs/toolkit": "^2.8.2",
"@sentry/cli": "^2.46.0",
- "@sentry/react": "^9.23.0",
+ "@sentry/react": "^9.27.0",
"@sentry/vite-plugin": "^3.5.0",
- "@splitsoftware/splitio-react": "^2.1.1",
+ "@splitsoftware/splitio-react": "^2.3.1",
"@tanem/react-nprogress": "^5.0.53",
- "antd": "^5.25.3",
+ "antd": "^5.25.4",
"apollo-link-logger": "^2.0.1",
"apollo-link-sentry": "^4.3.0",
"autosize": "^6.0.1",
@@ -41,18 +41,18 @@
"i18next": "^24.2.3",
"i18next-browser-languagedetector": "^8.1.0",
"immutability-helper": "^3.1.1",
- "libphonenumber-js": "^1.12.8",
+ "libphonenumber-js": "^1.12.9",
"logrocket": "^9.0.2",
"markerjs2": "^2.32.4",
"memoize-one": "^6.0.0",
- "normalize-url": "^8.0.1",
+ "normalize-url": "^8.0.2",
"object-hash": "^3.0.0",
"phone": "^3.1.59",
"prop-types": "^15.8.1",
"query-string": "^9.2.0",
"raf-schd": "^4.0.3",
"react": "^18.3.1",
- "react-big-calendar": "^1.18.0",
+ "react-big-calendar": "^1.19.2",
"react-color": "^2.19.3",
"react-cookie": "^8.0.1",
"react-dom": "^18.3.1",
@@ -70,7 +70,7 @@
"react-resizable": "^3.0.5",
"react-router-dom": "^6.30.0",
"react-sticky": "^6.0.3",
- "react-virtuoso": "^4.12.7",
+ "react-virtuoso": "^4.12.8",
"recharts": "^2.15.2",
"redux": "^5.0.1",
"redux-actions": "^3.0.3",
@@ -78,7 +78,7 @@
"redux-saga": "^1.3.0",
"redux-state-sync": "^3.1.4",
"reselect": "^5.1.1",
- "sass": "^1.89.0",
+ "sass": "^1.89.1",
"socket.io-client": "^4.8.1",
"styled-components": "^6.1.18",
"subscriptions-transport-ws": "^0.11.0",
@@ -134,14 +134,14 @@
"@dotenvx/dotenvx": "^1.44.1",
"@emotion/babel-plugin": "^11.13.5",
"@emotion/react": "^11.14.0",
- "@eslint/js": "^9.27.0",
+ "@eslint/js": "^9.28.0",
"@playwright/test": "^1.51.1",
"@sentry/webpack-plugin": "^3.5.0",
"@testing-library/dom": "^10.4.0",
"@testing-library/jest-dom": "^6.6.3",
"@testing-library/react": "^16.3.0",
- "@vitejs/plugin-react": "^4.5.0",
- "browserslist": "^4.24.5",
+ "@vitejs/plugin-react": "^4.5.1",
+ "browserslist": "^4.25.0",
"browserslist-to-esbuild": "^2.1.1",
"chalk": "^5.4.1",
"eslint": "^8.57.1",
@@ -161,7 +161,7 @@
"vite-plugin-node-polyfills": "^0.23.0",
"vite-plugin-pwa": "^1.0.0",
"vite-plugin-style-import": "^2.0.0",
- "vitest": "^3.1.4",
+ "vitest": "^3.2.3",
"workbox-window": "^7.3.0"
}
}
diff --git a/client/src/components/bill-enter-modal/bill-enter-modal.container.jsx b/client/src/components/bill-enter-modal/bill-enter-modal.container.jsx
index 5041f007a..8073cc2f0 100644
--- a/client/src/components/bill-enter-modal/bill-enter-modal.container.jsx
+++ b/client/src/components/bill-enter-modal/bill-enter-modal.container.jsx
@@ -2,10 +2,11 @@ import { useApolloClient, useMutation } from "@apollo/client";
import { useSplitTreatments } from "@splitsoftware/splitio-react";
import { Button, Checkbox, Form, Modal, Space } from "antd";
import _ from "lodash";
-import React, { useEffect, useMemo, useState } from "react";
+import { useEffect, useMemo, useState } from "react";
import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
+import { useNotification } from "../../contexts/Notifications/notificationContext.jsx";
import { INSERT_NEW_BILL } from "../../graphql/bills.queries";
import { UPDATE_INVENTORY_LINES } from "../../graphql/inventory.queries";
import { UPDATE_JOB_LINE } from "../../graphql/jobs-lines.queries";
@@ -24,7 +25,6 @@ import BillFormContainer from "../bill-form/bill-form.container";
import { CalculateBillTotal } from "../bill-form/bill-form.totals.utility";
import { handleUpload as handleLocalUpload } from "../documents-local-upload/documents-local-upload.utility";
import { handleUpload } from "../documents-upload/documents-upload.utility";
-import { useNotification } from "../../contexts/Notifications/notificationContext.jsx";
const mapStateToProps = createStructuredSelector({
billEnterModal: selectBillEnterModal,
@@ -196,7 +196,7 @@ function BillEnterModalContainer({ billEnterModal, toggleModalVisible, bodyshop,
job: { lbr_adjustments: newAdjustments }
}
});
- if (!!jobUpdate.errors) {
+ if (jobUpdate.errors) {
notification["error"]({
message: t("jobs.errors.saving", {
message: JSON.stringify(jobUpdate.errors)
@@ -213,7 +213,7 @@ function BillEnterModalContainer({ billEnterModal, toggleModalVisible, bodyshop,
variables: { partsLineIds: markPolReceived.map((p) => p.id) },
refetchQueries: ["QUERY_PARTS_BILLS_BY_JOBID"]
});
- if (!!r2.errors) {
+ if (r2.errors) {
setLoading(false);
setEnterAgain(false);
notification["error"]({
@@ -224,7 +224,7 @@ function BillEnterModalContainer({ billEnterModal, toggleModalVisible, bodyshop,
}
}
- if (!!r1.errors) {
+ if (r1.errors) {
setLoading(false);
setEnterAgain(false);
notification["error"]({
@@ -244,7 +244,7 @@ function BillEnterModalContainer({ billEnterModal, toggleModalVisible, bodyshop,
consumedbybillid: billId
}
});
- if (!!r2.errors) {
+ if (r2.errors) {
setLoading(false);
setEnterAgain(false);
notification["error"]({
@@ -396,7 +396,7 @@ function BillEnterModalContainer({ billEnterModal, toggleModalVisible, bodyshop,
{t("bills.labels.generatepartslabel")}
-
diff --git a/client/src/components/bills-list-table/bills-list-table.component.jsx b/client/src/components/bills-list-table/bills-list-table.component.jsx
index 89813d74f..4b46fad21 100644
--- a/client/src/components/bills-list-table/bills-list-table.component.jsx
+++ b/client/src/components/bills-list-table/bills-list-table.component.jsx
@@ -1,6 +1,6 @@
import { EditFilled, SyncOutlined } from "@ant-design/icons";
import { Button, Card, Checkbox, Input, Space, Table } from "antd";
-import React, { useState } from "react";
+import { useState } from "react";
import { useTranslation } from "react-i18next";
import { FaTasks } from "react-icons/fa";
import { connect } from "react-redux";
@@ -209,6 +209,7 @@ export function BillsListTableComponent({
}
});
}}
+ id="reconcile-bills-button"
>
{t("jobs.actions.reconcile")}
diff --git a/client/src/components/jobs-available-scan/jobs-available-scan.component.jsx b/client/src/components/jobs-available-scan/jobs-available-scan.component.jsx
index 96d1ab13b..91c39a6df 100644
--- a/client/src/components/jobs-available-scan/jobs-available-scan.component.jsx
+++ b/client/src/components/jobs-available-scan/jobs-available-scan.component.jsx
@@ -1,19 +1,19 @@
import { DownloadOutlined, SyncOutlined } from "@ant-design/icons";
import { Button, Card, Input, Space, Table } from "antd";
import axios from "axios";
-import React, { useState } from "react";
+import { useState } from "react";
import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
+import { useNotification } from "../../contexts/Notifications/notificationContext.jsx";
import { selectPartnerVersion } from "../../redux/application/application.selectors";
import { alphaSort } from "../../utils/sorters";
-import { useNotification } from "../../contexts/Notifications/notificationContext.jsx";
const mapStateToProps = createStructuredSelector({
//currentUser: selectCurrentUser
partnerVersion: selectPartnerVersion
});
-const mapDispatchToProps = (dispatch) => ({
+const mapDispatchToProps = () => ({
//setUserLanguage: language => dispatch(setUserLanguage(language))
});
export default connect(mapStateToProps, mapDispatchToProps)(JobsAvailableScan);
@@ -126,6 +126,7 @@ export function JobsAvailableScan({ partnerVersion, refetch }) {
onClick={() => {
scanEstimates();
}}
+ id="scan-estimates-button"
>
diff --git a/client/src/components/jobs-create-owner-info/jobs-create-owner-info.search.component.jsx b/client/src/components/jobs-create-owner-info/jobs-create-owner-info.search.component.jsx
index 442fe3f67..9f93f4362 100644
--- a/client/src/components/jobs-create-owner-info/jobs-create-owner-info.search.component.jsx
+++ b/client/src/components/jobs-create-owner-info/jobs-create-owner-info.search.component.jsx
@@ -1,5 +1,5 @@
import { Card, Input, Table } from "antd";
-import React, { useContext, useState } from "react";
+import { useContext, useState } from "react";
import { useTranslation } from "react-i18next";
import JobCreateContext from "../../pages/jobs-create/jobs-create.context";
import PhoneFormatter from "../../utils/PhoneFormatter";
@@ -91,6 +91,7 @@ export default function JobsCreateOwnerInfoSearchComponent({ loading, owners })
});
}}
enterButton
+ id="search-owner"
/>
}
>
@@ -112,9 +113,9 @@ export default function JobsCreateOwnerInfoSearchComponent({ loading, owners })
type: "radio",
selectedRowKeys: [state.owner.selectedid]
}}
- onRow={(record, rowIndex) => {
+ onRow={(record) => {
return {
- onClick: (event) => {
+ onClick: () => {
if (record) {
if (record.id) {
setState({
diff --git a/client/src/components/jobs-create-vehicle-info/jobs-create-vehicle-info.search.component.jsx b/client/src/components/jobs-create-vehicle-info/jobs-create-vehicle-info.search.component.jsx
index 124ae31f3..2e75bded8 100644
--- a/client/src/components/jobs-create-vehicle-info/jobs-create-vehicle-info.search.component.jsx
+++ b/client/src/components/jobs-create-vehicle-info/jobs-create-vehicle-info.search.component.jsx
@@ -1,9 +1,9 @@
-import React, { useContext, useState } from "react";
-import { useTranslation } from "react-i18next";
import { Card, Input, Space, Table } from "antd";
+import { useContext, useState } from "react";
+import { useTranslation } from "react-i18next";
import { Link } from "react-router-dom";
-import { alphaSort } from "../../utils/sorters";
import JobCreateContext from "../../pages/jobs-create/jobs-create.context";
+import { alphaSort } from "../../utils/sorters";
import VehicleVinDisplay from "../vehicle-vin-display/vehicle-vin-display.component";
export default function JobsCreateVehicleInfoSearchComponent({ loading, vehicles }) {
@@ -63,6 +63,7 @@ export default function JobsCreateVehicleInfoSearchComponent({ loading, vehicles
});
}}
enterButton
+ id="search-vehicle"
/>
}
@@ -91,9 +92,9 @@ export default function JobsCreateVehicleInfoSearchComponent({ loading, vehicles
type: "radio",
selectedRowKeys: [state.vehicle.selectedid]
}}
- onRow={(record, rowIndex) => {
+ onRow={(record) => {
return {
- onClick: (event) => {
+ onClick: () => {
if (record) {
if (record.id) {
setState({
diff --git a/client/src/components/jobs-find-modal/jobs-find-modal.component.jsx b/client/src/components/jobs-find-modal/jobs-find-modal.component.jsx
index bd7cd9e0f..a70e3d118 100644
--- a/client/src/components/jobs-find-modal/jobs-find-modal.component.jsx
+++ b/client/src/components/jobs-find-modal/jobs-find-modal.component.jsx
@@ -1,9 +1,9 @@
import { SyncOutlined } from "@ant-design/icons";
import { Button, Checkbox, Divider, Input, Space, Table } from "antd";
-import dayjs from "../../utils/day";
-import React, { useState } from "react";
+import { useState } from "react";
import { useTranslation } from "react-i18next";
import { Link } from "react-router-dom";
+import dayjs from "../../utils/day";
import PhoneFormatter from "../../utils/PhoneFormatter";
import FormDateTimePickerComponent from "../form-date-time-picker/form-date-time-picker.component";
import OwnerNameDisplay from "../owner-name-display/owner-name-display.component";
@@ -223,9 +223,9 @@ export default function JobsFindModalComponent({
type: "radio",
selectedRowKeys: [selectedJob]
}}
- onRow={(record, rowIndex) => {
+ onRow={(record) => {
return {
- onClick: (event) => {
+ onClick: () => {
handleOnRowClick(record);
}
};
@@ -241,15 +241,17 @@ export default function JobsFindModalComponent({
overrideHeaders: e.target.checked
})
}
+ id="override_header"
>
{t("jobs.labels.override_header")}
- setPartsQueueToggle(e.target.checked)}>
+ setPartsQueueToggle(e.target.checked)} id="parts_queue_toggle">
{t("bodyshop.fields.md_functionality_toggles.parts_queue_toggle")}
setSchComp({ ...updateSchComp, checked: e.target.checked })}
+ id="update_scheduled_completion"
>
{t("jobs.labels.update_scheduled_completion")}
@@ -261,6 +263,7 @@ export default function JobsFindModalComponent({
onChange={(e) => {
setSchComp({ ...updateSchComp, scheduled_completion: e });
}}
+ id="scheduled_completion_date_time_picker"
/>
) : null}
{t("jobs.labels.calc_scheuled_completion")}
diff --git a/client/src/components/jobs-find-modal/jobs-find-modal.container.jsx b/client/src/components/jobs-find-modal/jobs-find-modal.container.jsx
index a5fa7c325..320c484f2 100644
--- a/client/src/components/jobs-find-modal/jobs-find-modal.container.jsx
+++ b/client/src/components/jobs-find-modal/jobs-find-modal.container.jsx
@@ -1,6 +1,5 @@
import { useQuery } from "@apollo/client";
import { Modal } from "antd";
-import React from "react";
import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
@@ -66,7 +65,7 @@ export default connect(
title={t("jobs.labels.existing_jobs")}
width={"80%"}
destroyOnHidden
- okButtonProps={{ disabled: selectedJob ? false : true }}
+ okButtonProps={{ disabled: selectedJob ? false : true, id: "jobs-find-modal-container-ok" }}
{...modalProps}
>
{loading ? : null}
diff --git a/client/src/components/owner-find-modal/owner-find-modal.container.jsx b/client/src/components/owner-find-modal/owner-find-modal.container.jsx
index b208e6058..b00c70ed6 100644
--- a/client/src/components/owner-find-modal/owner-find-modal.container.jsx
+++ b/client/src/components/owner-find-modal/owner-find-modal.container.jsx
@@ -1,12 +1,12 @@
import { useLazyQuery } from "@apollo/client";
import { Input, Modal } from "antd";
-import React, { useEffect, useState } from "react";
+import { useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
import { QUERY_SEARCH_OWNER_BY_IDX } from "../../graphql/owners.queries";
import AlertComponent from "../alert/alert.component";
import LoadingSpinner from "../loading-spinner/loading-spinner.component";
-import OwnerFindModalComponent from "./owner-find-modal.component";
import { OwnerNameDisplayFunction } from "../owner-name-display/owner-name-display.component";
+import OwnerFindModalComponent from "./owner-find-modal.component";
export default function OwnerFindModalContainer({
loading,
@@ -41,6 +41,7 @@ export default function OwnerFindModalContainer({
{t("owners.labels.existing_owners")}}
width={"80%"}
+ okButtonProps={{ id: "owner-find-modal-ok-button" }}
{...modalProps}
>
{loading ? : null}
diff --git a/client/src/components/shop-info/shop-info.component.jsx b/client/src/components/shop-info/shop-info.component.jsx
index c0e743528..55bbeaa95 100644
--- a/client/src/components/shop-info/shop-info.component.jsx
+++ b/client/src/components/shop-info/shop-info.component.jsx
@@ -1,35 +1,34 @@
import { useSplitTreatments } from "@splitsoftware/splitio-react";
import { Button, Card, Tabs } from "antd";
-import React from "react";
+import queryString from "query-string";
import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
+import { useLocation, useNavigate } from "react-router-dom";
import { createStructuredSelector } from "reselect";
+import { useSocket } from "../../contexts/SocketIO/useSocket.js";
import { selectBodyshop } from "../../redux/user/user.selectors";
+import InstanceRenderManager from "../../utils/instanceRenderMgr";
+import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component";
+import LockWrapperComponent from "../lock-wrapper/lock-wrapper.component";
import ShopInfoGeneral from "./shop-info.general.component";
import ShopInfoIntakeChecklistComponent from "./shop-info.intake.component";
import ShopInfoLaborRates from "./shop-info.laborrates.component";
+import ShopInfoNotificationsAutoadd from "./shop-info.notifications-autoadd.component.jsx";
import ShopInfoOrderStatusComponent from "./shop-info.orderstatus.component";
import ShopInfoPartsScan from "./shop-info.parts-scan";
import ShopInfoRbacComponent from "./shop-info.rbac.component";
import ShopInfoResponsibilityCenterComponent from "./shop-info.responsibilitycenters.component";
+import ShopInfoRoGuard from "./shop-info.roguard.component";
import ShopInfoROStatusComponent from "./shop-info.rostatus.component";
import ShopInfoSchedulingComponent from "./shop-info.scheduling.component";
import ShopInfoSpeedPrint from "./shop-info.speedprint.component";
-import { useLocation, useNavigate } from "react-router-dom";
import ShopInfoTaskPresets from "./shop-info.task-presets.component";
-import queryString from "query-string";
-import InstanceRenderManager from "../../utils/instanceRenderMgr";
-import ShopInfoRoGuard from "./shop-info.roguard.component";
import ShopInfoIntellipay from "./shop-intellipay-config.component";
-import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component";
-import LockWrapperComponent from "../lock-wrapper/lock-wrapper.component";
-import { useSocket } from "../../contexts/SocketIO/useSocket.js";
-import ShopInfoNotificationsAutoadd from "./shop-info.notifications-autoadd.component.jsx";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop
});
-const mapDispatchToProps = (dispatch) => ({
+const mapDispatchToProps = () => ({
//setUserLanguage: language => dispatch(setUserLanguage(language))
});
export default connect(mapStateToProps, mapDispatchToProps)(ShopInfoComponent);
@@ -158,7 +157,7 @@ export function ShopInfoComponent({ bodyshop, form, saveLoading }) {
return (
form.submit()}>
+ form.submit()} id="shop-info-save-button">
{t("general.actions.save")}
}
diff --git a/client/src/components/shop-info/shop-info.general.component.jsx b/client/src/components/shop-info/shop-info.general.component.jsx
index 58bacb2aa..8d40f02d9 100644
--- a/client/src/components/shop-info/shop-info.general.component.jsx
+++ b/client/src/components/shop-info/shop-info.general.component.jsx
@@ -1,7 +1,6 @@
import { DeleteFilled } from "@ant-design/icons";
import { useSplitTreatments } from "@splitsoftware/splitio-react";
import { Button, DatePicker, Form, Input, InputNumber, Radio, Select, Space, Switch } from "antd";
-import React from "react";
import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
@@ -19,7 +18,7 @@ const timeZonesList = Intl.supportedValuesOf("timeZone");
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop
});
-const mapDispatchToProps = (dispatch) => ({
+const mapDispatchToProps = () => ({
//setUserLanguage: language => dispatch(setUserLanguage(language))
});
export default connect(mapStateToProps, mapDispatchToProps)(ShopInfoGeneral);
@@ -823,7 +822,7 @@ export function ShopInfoGeneral({ form, bodyshop }) {
}}
-
+