From e9cb2e4de9844aabd08f30837062635b5b1e0a33 Mon Sep 17 00:00:00 2001 From: Wenszel Date: Mon, 11 Dec 2023 11:21:30 +0100 Subject: [PATCH 1/9] added useKeyPress hook --- src/components/LoginPage/NameInput/NameInput.jsx | 15 +++------------ src/hooks/useKeyPress.js | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 12 deletions(-) create mode 100644 src/hooks/useKeyPress.js diff --git a/src/components/LoginPage/NameInput/NameInput.jsx b/src/components/LoginPage/NameInput/NameInput.jsx index f07ffd0..22da873 100644 --- a/src/components/LoginPage/NameInput/NameInput.jsx +++ b/src/components/LoginPage/NameInput/NameInput.jsx @@ -2,7 +2,7 @@ import React, { useState, useContext, useEffect, useCallback } from 'react'; import { SocketContext } from '../../../App'; import useInput from '../../../hooks/useInput'; import './NameInput.css'; -import Overlay from '../../Overlay/Overlay'; +import useKeyPress from '../../../hooks/useKeyPress'; const NameInput = ({ isRoomPrivate, roomId }) => { const socket = useContext(SocketContext); @@ -14,21 +14,12 @@ const NameInput = ({ isRoomPrivate, roomId }) => { socket.emit('player:login', { name: nickname.value, password: password.value, roomId: roomId }); }, [socket, nickname.value, password.value, roomId]); + useKeyPress('Enter', handleButtonClick); useEffect(() => { socket.on('error:wrongPassword', () => { setIsPasswordWrong(true); }); - const keyDownHandler = event => { - if (event.key === 'Enter') { - event.preventDefault(); - handleButtonClick(); - } - }; - document.addEventListener('keydown', keyDownHandler); - return () => { - document.removeEventListener('keydown', keyDownHandler); - }; - }, [socket, handleButtonClick]); + }, [socket]); return (
diff --git a/src/hooks/useKeyPress.js b/src/hooks/useKeyPress.js new file mode 100644 index 0000000..072a74c --- /dev/null +++ b/src/hooks/useKeyPress.js @@ -0,0 +1,15 @@ +import { useEffect } from 'react'; +export default function useKeyPress(targetKey, callback) { + const keyPressHandler = ({ key }) => { + if (key === targetKey) { + callback(); + } + }; + + useEffect(() => { + window.addEventListener('keydown', keyPressHandler); + return () => { + window.removeEventListener('keydown', keyPressHandler); + }; + }, []); +} From aa6c03ebcb01f9c6d56541b163d02e86d78d4b8e Mon Sep 17 00:00:00 2001 From: Wenszel Date: Mon, 11 Dec 2023 11:52:06 +0100 Subject: [PATCH 2/9] added Overlay component --- package-lock.json | 640 +++++++++++++++++- package.json | 8 +- .../LoginPage/NameInput/NameInput.css | 13 +- .../LoginPage/NameInput/NameInput.jsx | 24 +- .../LoginPage/ServerList/ServerList.jsx | 7 +- src/components/Overlay/Overlay.jsx | 9 + src/components/Overlay/Overlay.module.css | 13 + src/components/Overlay/Overlay.test.js | 34 + 8 files changed, 708 insertions(+), 40 deletions(-) create mode 100644 src/components/Overlay/Overlay.jsx create mode 100644 src/components/Overlay/Overlay.module.css create mode 100644 src/components/Overlay/Overlay.test.js diff --git a/package-lock.json b/package-lock.json index 3d5e6e2..51d1a77 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,8 +11,6 @@ "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", "@mui/material": "^5.14.20", - "@testing-library/jest-dom": "^6.1.5", - "@testing-library/react": "^14.1.2", "@testing-library/user-event": "^14.5.1", "axios": "^1.6.2", "prop-types": "^15.8.1", @@ -27,6 +25,10 @@ "socket.io-client": "^4.7.2", "web-vitals": "^3.5.0" }, + "devDependencies": { + "@testing-library/jest-dom": "^6.1.5", + "@testing-library/react": "^14.1.2" + }, "engines": { "node": "10.16.0" } @@ -42,7 +44,8 @@ "node_modules/@adobe/css-tools": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.2.tgz", - "integrity": "sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw==" + "integrity": "sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw==", + "dev": true }, "node_modules/@alloc/quick-lru": { "version": "5.2.0", @@ -2683,6 +2686,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -2701,6 +2705,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -2717,6 +2722,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -2734,6 +2740,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -2747,6 +2754,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -2754,6 +2762,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -2764,6 +2773,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -2782,6 +2792,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -2795,6 +2806,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -2843,6 +2855,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -2870,6 +2883,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -2886,6 +2900,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -2903,6 +2918,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -2916,6 +2932,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -2923,6 +2940,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -2933,6 +2951,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -2959,6 +2978,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -2969,6 +2989,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -2990,6 +3011,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3008,6 +3030,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3026,6 +3049,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3042,6 +3066,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3058,6 +3083,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3073,6 +3099,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -3086,6 +3113,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, "optional": true, "peer": true }, @@ -3093,6 +3121,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -3103,6 +3132,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3116,6 +3146,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3130,6 +3161,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3146,6 +3178,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3160,6 +3193,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3173,6 +3207,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3191,6 +3226,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3207,6 +3243,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3224,6 +3261,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3237,6 +3275,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -3244,6 +3283,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -3254,6 +3294,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3272,6 +3313,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3285,6 +3327,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3301,6 +3344,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3345,6 +3389,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3372,6 +3417,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3388,6 +3434,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3405,6 +3452,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3418,6 +3466,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -3425,6 +3474,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -3435,6 +3485,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3452,6 +3503,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3478,6 +3530,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -3488,6 +3541,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3506,6 +3560,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3522,6 +3577,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3538,6 +3594,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3551,6 +3608,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3565,6 +3623,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3578,6 +3637,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3593,6 +3653,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3609,6 +3670,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3625,6 +3687,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3641,6 +3704,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3658,6 +3722,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3671,6 +3736,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -3678,6 +3744,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -3688,6 +3755,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3714,6 +3782,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -3724,6 +3793,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3742,6 +3812,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3758,6 +3829,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3774,6 +3846,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3912,6 +3985,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3930,6 +4004,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3946,6 +4021,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3963,6 +4039,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -3976,6 +4053,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -3983,6 +4061,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -3993,6 +4072,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -4522,6 +4602,7 @@ "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, "optional": true, "peer": true }, @@ -4529,6 +4610,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -4539,6 +4621,7 @@ "version": "10.3.0", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -4854,6 +4937,7 @@ "version": "6.1.5", "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.1.5.tgz", "integrity": "sha512-3y04JLW+EceVPy2Em3VwNr95dOKqA8DhR0RJHhHKDZNYXcVXnEK7WIrpj4eYU8SVt/qYZ2aRWt/WgQ+grNES8g==", + "dev": true, "dependencies": { "@adobe/css-tools": "^4.3.1", "@babel/runtime": "^7.9.2", @@ -4894,6 +4978,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -4908,6 +4993,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, "dependencies": { "dequal": "^2.0.3" } @@ -4916,6 +5002,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4928,6 +5015,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -4938,12 +5026,14 @@ "node_modules/@testing-library/jest-dom/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/@testing-library/jest-dom/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -4952,6 +5042,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -4963,6 +5054,7 @@ "version": "14.1.2", "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.1.2.tgz", "integrity": "sha512-z4p7DVBTPjKM5qDZ0t5ZjzkpSNb+fZy1u6bzO7kk8oeGagpPCAtgh4cx1syrfp7a+QWkM021jGqjJaxJJnXAZg==", + "dev": true, "dependencies": { "@babel/runtime": "^7.12.5", "@testing-library/dom": "^9.0.0", @@ -5257,6 +5349,7 @@ "version": "18.2.17", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.17.tgz", "integrity": "sha512-rvrT/M7Df5eykWFxn6MYt5Pem/Dbyc1N8Y0S9Mrkw2WFCRiqUgw9P7ul2NpwsXCSM1DVdENzdG9J5SreqfAIWg==", + "dev": true, "dependencies": { "@types/react": "*" } @@ -5349,6 +5442,7 @@ "version": "17.0.32", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -6919,6 +7013,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -7186,6 +7281,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -7208,6 +7304,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -7224,6 +7321,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -7241,6 +7339,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -7254,6 +7353,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -7261,6 +7361,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -7271,6 +7372,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -7289,6 +7391,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -7547,7 +7650,8 @@ "node_modules/css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=" + "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=", + "dev": true }, "node_modules/cssdb": { "version": "7.9.0", @@ -7753,6 +7857,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, "optional": true, "peer": true, "peerDependencies": { @@ -7940,6 +8045,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -8145,6 +8251,7 @@ "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -9165,6 +9272,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -9182,6 +9290,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -9198,6 +9307,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -9215,6 +9325,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -9228,6 +9339,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -9235,6 +9347,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -9245,6 +9358,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -9263,6 +9377,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -10553,6 +10668,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, "engines": { "node": ">=8" } @@ -11236,6 +11352,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11263,6 +11380,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11278,6 +11396,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11294,6 +11413,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11311,6 +11431,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11324,6 +11445,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -11331,6 +11453,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -11341,6 +11464,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11359,6 +11483,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11372,6 +11497,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11404,6 +11530,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11420,6 +11547,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11437,6 +11565,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11450,6 +11579,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -11457,6 +11587,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -11467,6 +11598,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11485,6 +11617,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11500,6 +11633,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -11513,6 +11647,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, "optional": true, "peer": true }, @@ -11520,6 +11655,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11533,6 +11669,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11567,6 +11704,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11583,6 +11721,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11600,6 +11739,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11613,6 +11753,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -11620,6 +11761,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -11630,6 +11772,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11648,6 +11791,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11666,6 +11810,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11681,6 +11826,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -11694,6 +11840,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, "optional": true, "peer": true }, @@ -11701,6 +11848,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11714,6 +11862,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11760,6 +11909,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11787,6 +11937,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11803,6 +11954,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11825,6 +11977,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11841,6 +11994,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11858,6 +12012,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11875,6 +12030,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11888,6 +12044,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -11895,6 +12052,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -11905,6 +12063,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11931,6 +12090,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -11941,6 +12101,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11962,6 +12123,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11980,6 +12142,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -11998,6 +12161,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -12014,6 +12178,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -12030,6 +12195,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -12045,6 +12211,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -12058,6 +12225,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, "optional": true, "peer": true }, @@ -12065,6 +12233,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -12075,6 +12244,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -12088,6 +12258,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -12102,6 +12273,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -12118,6 +12290,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -12134,6 +12307,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -12151,6 +12325,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -12164,6 +12339,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -12171,6 +12347,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -12181,6 +12358,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -12196,6 +12374,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -12209,6 +12388,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, "optional": true, "peer": true }, @@ -12216,6 +12396,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -12229,6 +12410,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -12242,6 +12424,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -12259,6 +12442,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -12275,6 +12459,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -12292,6 +12477,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -12305,6 +12491,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -12312,6 +12499,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -12322,6 +12510,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -12340,6 +12529,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -12355,6 +12545,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -12368,6 +12559,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, "optional": true, "peer": true }, @@ -12375,6 +12567,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -12569,6 +12762,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -12587,6 +12781,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -12603,6 +12798,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -12620,6 +12816,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -12633,6 +12830,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -12640,6 +12838,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -12650,6 +12849,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -12668,6 +12868,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -12681,6 +12882,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -13195,6 +13397,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13209,6 +13412,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -13222,6 +13426,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13237,6 +13442,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, "optional": true, "peer": true }, @@ -13244,6 +13450,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13260,6 +13467,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13276,6 +13484,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13293,6 +13502,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13306,6 +13516,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -13313,6 +13524,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -13323,6 +13535,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13338,6 +13551,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -13351,6 +13565,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, "optional": true, "peer": true }, @@ -13358,6 +13573,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13371,6 +13587,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13392,6 +13609,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13408,6 +13626,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13425,6 +13644,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13438,6 +13658,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -13445,6 +13666,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -13455,6 +13677,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13470,6 +13693,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -13483,6 +13707,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, "optional": true, "peer": true }, @@ -13490,6 +13715,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13503,6 +13729,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13518,6 +13745,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13534,6 +13762,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13551,6 +13780,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13564,6 +13794,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -13571,6 +13802,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -13581,6 +13813,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13599,6 +13832,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13656,6 +13890,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13670,6 +13905,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -13767,6 +14003,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13800,6 +14037,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13827,6 +14065,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13843,6 +14082,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13860,6 +14100,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13873,6 +14114,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -13880,6 +14122,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -13890,6 +14133,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13916,6 +14160,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -13926,6 +14171,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13947,6 +14193,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13965,6 +14212,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13983,6 +14231,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -13999,6 +14248,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14015,6 +14265,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14030,6 +14281,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -14043,6 +14295,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, "optional": true, "peer": true }, @@ -14050,6 +14303,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -14060,6 +14314,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -14070,6 +14325,7 @@ "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14081,6 +14337,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14094,6 +14351,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14108,6 +14366,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14142,6 +14401,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14169,6 +14429,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14185,6 +14446,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14202,6 +14464,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14215,6 +14478,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -14222,6 +14486,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -14232,6 +14497,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14258,6 +14524,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -14268,6 +14535,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14289,6 +14557,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14307,6 +14576,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14325,6 +14595,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14341,6 +14612,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14357,6 +14629,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14372,6 +14645,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -14385,6 +14659,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, "optional": true, "peer": true }, @@ -14392,6 +14667,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -14402,6 +14678,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14415,6 +14692,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14441,6 +14719,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14473,6 +14752,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14500,6 +14780,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14516,6 +14797,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14533,6 +14815,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14546,6 +14829,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -14553,6 +14837,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -14563,6 +14848,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14589,6 +14875,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -14599,6 +14886,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14617,6 +14905,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14633,6 +14922,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14649,6 +14939,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14664,6 +14955,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -14677,6 +14969,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, "optional": true, "peer": true }, @@ -14684,6 +14977,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14697,6 +14991,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14925,6 +15220,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14945,6 +15241,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14961,6 +15258,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14978,6 +15276,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -14991,6 +15290,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -14998,6 +15298,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -15008,6 +15309,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -15026,6 +15328,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -15585,6 +15888,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, "engines": { "node": ">=4" } @@ -17761,6 +18065,7 @@ "version": "6.0.4", "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "dev": true, "funding": [ { "type": "individual", @@ -19309,6 +19614,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" @@ -20531,6 +20837,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, "dependencies": { "min-indent": "^1.0.0" }, @@ -21348,6 +21655,7 @@ "version": "9.2.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -22304,6 +22612,7 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, "optional": true, "peer": true, "dependencies": { @@ -22323,6 +22632,7 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, "optional": true, "peer": true, "engines": { @@ -22350,7 +22660,8 @@ "@adobe/css-tools": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.2.tgz", - "integrity": "sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw==" + "integrity": "sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw==", + "dev": true }, "@alloc/quick-lru": { "version": "5.2.0", @@ -24095,6 +24406,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24110,6 +24422,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24120,6 +24433,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24131,6 +24445,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24141,6 +24456,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -24148,6 +24464,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true }, @@ -24155,6 +24472,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24170,6 +24488,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24182,6 +24501,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24219,6 +24539,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24243,6 +24564,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24253,6 +24575,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24264,6 +24587,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24274,6 +24598,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -24281,6 +24606,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true }, @@ -24288,6 +24614,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24309,6 +24636,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, "optional": true, "peer": true }, @@ -24316,6 +24644,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24334,6 +24663,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24349,6 +24679,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24364,6 +24695,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24377,6 +24709,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24389,6 +24722,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24401,6 +24735,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "optional": true, "peer": true } @@ -24410,6 +24745,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, "optional": true, "peer": true }, @@ -24417,6 +24753,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, "optional": true, "peer": true }, @@ -24424,6 +24761,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24434,6 +24772,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24447,6 +24786,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24460,6 +24800,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24471,6 +24812,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24481,6 +24823,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24496,6 +24839,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24506,6 +24850,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24517,6 +24862,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24527,6 +24873,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -24534,6 +24881,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true }, @@ -24541,6 +24889,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24556,6 +24905,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24568,6 +24918,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24581,6 +24932,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24614,6 +24966,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24638,6 +24991,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24648,6 +25002,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24659,6 +25014,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24669,6 +25025,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -24676,6 +25033,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true }, @@ -24683,6 +25041,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24697,6 +25056,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24718,6 +25078,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, "optional": true, "peer": true }, @@ -24725,6 +25086,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24740,6 +25102,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24753,6 +25116,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24765,6 +25129,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24775,6 +25140,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24788,6 +25154,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24798,6 +25165,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24810,6 +25178,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24823,6 +25192,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24836,6 +25206,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24846,6 +25217,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24857,6 +25229,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24867,6 +25240,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -24874,6 +25248,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true }, @@ -24881,6 +25256,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24902,6 +25278,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, "optional": true, "peer": true }, @@ -24909,6 +25286,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24924,6 +25302,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24937,6 +25316,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -24949,6 +25329,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -25058,6 +25439,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -25073,6 +25455,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -25083,6 +25466,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -25094,6 +25478,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -25104,6 +25489,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -25111,6 +25497,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true }, @@ -25118,6 +25505,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -25428,6 +25816,7 @@ "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, "optional": true, "peer": true }, @@ -25435,6 +25824,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -25445,6 +25835,7 @@ "version": "10.3.0", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -25640,6 +26031,7 @@ "version": "6.1.5", "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.1.5.tgz", "integrity": "sha512-3y04JLW+EceVPy2Em3VwNr95dOKqA8DhR0RJHhHKDZNYXcVXnEK7WIrpj4eYU8SVt/qYZ2aRWt/WgQ+grNES8g==", + "dev": true, "requires": { "@adobe/css-tools": "^4.3.1", "@babel/runtime": "^7.9.2", @@ -25655,6 +26047,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -25663,6 +26056,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, "requires": { "dequal": "^2.0.3" } @@ -25671,6 +26065,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -25680,6 +26075,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -25687,17 +26083,20 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -25708,6 +26107,7 @@ "version": "14.1.2", "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.1.2.tgz", "integrity": "sha512-z4p7DVBTPjKM5qDZ0t5ZjzkpSNb+fZy1u6bzO7kk8oeGagpPCAtgh4cx1syrfp7a+QWkM021jGqjJaxJJnXAZg==", + "dev": true, "requires": { "@babel/runtime": "^7.12.5", "@testing-library/dom": "^9.0.0", @@ -25983,6 +26383,7 @@ "version": "18.2.17", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.17.tgz", "integrity": "sha512-rvrT/M7Df5eykWFxn6MYt5Pem/Dbyc1N8Y0S9Mrkw2WFCRiqUgw9P7ul2NpwsXCSM1DVdENzdG9J5SreqfAIWg==", + "dev": true, "requires": { "@types/react": "*" } @@ -26075,6 +26476,7 @@ "version": "17.0.32", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -27216,6 +27618,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -27428,6 +27831,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -27444,6 +27848,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -27454,6 +27859,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -27465,6 +27871,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -27475,6 +27882,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -27482,6 +27890,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true }, @@ -27489,6 +27898,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -27504,6 +27914,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -27665,7 +28076,8 @@ "css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=" + "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=", + "dev": true }, "cssdb": { "version": "7.9.0", @@ -27815,6 +28227,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, "optional": true, "peer": true, "requires": {} @@ -27950,6 +28363,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, "optional": true, "peer": true }, @@ -28115,6 +28529,7 @@ "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, "optional": true, "peer": true }, @@ -28865,6 +29280,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -28879,6 +29295,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -28889,6 +29306,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -28900,6 +29318,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -28910,6 +29329,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -28917,6 +29337,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true }, @@ -28924,6 +29345,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -28939,6 +29361,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -29873,7 +30296,8 @@ "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true }, "inflight": { "version": "1.0.6", @@ -30340,6 +30764,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30353,6 +30778,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30365,6 +30791,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30375,6 +30802,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30386,6 +30814,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30396,6 +30825,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -30403,6 +30833,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true }, @@ -30410,6 +30841,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30425,6 +30857,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30437,6 +30870,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30466,6 +30900,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30476,6 +30911,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30487,6 +30923,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30497,6 +30934,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -30504,6 +30942,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true }, @@ -30511,6 +30950,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30526,6 +30966,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30538,6 +30979,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "optional": true, "peer": true } @@ -30547,6 +30989,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, "optional": true, "peer": true }, @@ -30554,6 +30997,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30566,6 +31010,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30586,6 +31031,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30596,6 +31042,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30607,6 +31054,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30617,6 +31065,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -30624,6 +31073,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true }, @@ -30631,6 +31081,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30646,6 +31097,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30661,6 +31113,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30673,6 +31126,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "optional": true, "peer": true } @@ -30682,6 +31136,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, "optional": true, "peer": true }, @@ -30689,6 +31144,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30701,6 +31157,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30732,6 +31189,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30756,6 +31214,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30766,6 +31225,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30782,6 +31242,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30795,6 +31256,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30806,6 +31268,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30817,6 +31280,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30827,6 +31291,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -30834,6 +31299,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true }, @@ -30841,6 +31307,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30862,6 +31329,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, "optional": true, "peer": true }, @@ -30869,6 +31337,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30887,6 +31356,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30902,6 +31372,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30917,6 +31388,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30930,6 +31402,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30942,6 +31415,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30954,6 +31428,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "optional": true, "peer": true } @@ -30963,6 +31438,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, "optional": true, "peer": true }, @@ -30970,6 +31446,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, "optional": true, "peer": true }, @@ -30977,6 +31454,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -30987,6 +31465,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31000,6 +31479,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31013,6 +31493,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31023,6 +31504,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31034,6 +31516,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31044,6 +31527,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -31051,6 +31535,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true }, @@ -31058,6 +31543,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31070,6 +31556,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "optional": true, "peer": true } @@ -31079,6 +31566,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, "optional": true, "peer": true }, @@ -31086,6 +31574,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31098,6 +31587,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31108,6 +31598,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31122,6 +31613,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31132,6 +31624,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31143,6 +31636,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31153,6 +31647,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -31160,6 +31655,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true }, @@ -31167,6 +31663,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31182,6 +31679,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31194,6 +31692,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "optional": true, "peer": true } @@ -31203,6 +31702,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, "optional": true, "peer": true }, @@ -31210,6 +31710,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31366,6 +31867,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31381,6 +31883,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31391,6 +31894,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31402,6 +31906,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31412,6 +31917,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -31419,6 +31925,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true }, @@ -31426,6 +31933,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31441,6 +31949,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31453,6 +31962,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, "optional": true, "peer": true }, @@ -31861,6 +32371,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31872,6 +32383,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "optional": true, "peer": true }, @@ -31879,6 +32391,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31891,6 +32404,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, "optional": true, "peer": true } @@ -31900,6 +32414,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31913,6 +32428,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31923,6 +32439,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31934,6 +32451,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31944,6 +32462,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -31951,6 +32470,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true }, @@ -31958,6 +32478,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31970,6 +32491,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "optional": true, "peer": true } @@ -31979,6 +32501,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, "optional": true, "peer": true }, @@ -31986,6 +32509,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -31998,6 +32522,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32016,6 +32541,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32026,6 +32552,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32037,6 +32564,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32047,6 +32575,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -32054,6 +32583,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true }, @@ -32061,6 +32591,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32073,6 +32604,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "optional": true, "peer": true } @@ -32082,6 +32614,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, "optional": true, "peer": true }, @@ -32089,6 +32622,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32101,6 +32635,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32113,6 +32648,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32123,6 +32659,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32134,6 +32671,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32144,6 +32682,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -32151,6 +32690,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true }, @@ -32158,6 +32698,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32173,6 +32714,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32278,6 +32820,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32289,6 +32832,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, "optional": true, "peer": true } @@ -32298,6 +32842,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32328,6 +32873,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32352,6 +32898,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32362,6 +32909,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32373,6 +32921,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32383,6 +32932,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -32390,6 +32940,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true }, @@ -32397,6 +32948,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32418,6 +32970,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, "optional": true, "peer": true }, @@ -32425,6 +32978,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32443,6 +32997,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32458,6 +33013,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32473,6 +33029,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32486,6 +33043,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32498,6 +33056,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32510,6 +33069,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "optional": true, "peer": true } @@ -32519,6 +33079,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, "optional": true, "peer": true }, @@ -32526,6 +33087,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, "optional": true, "peer": true }, @@ -32533,6 +33095,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "optional": true, "peer": true }, @@ -32540,6 +33103,7 @@ "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32551,6 +33115,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32561,6 +33126,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32574,6 +33140,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32605,6 +33172,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32629,6 +33197,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32639,6 +33208,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32650,6 +33220,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32660,6 +33231,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -32667,6 +33239,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true }, @@ -32674,6 +33247,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32695,6 +33269,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, "optional": true, "peer": true }, @@ -32702,6 +33277,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32720,6 +33296,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32735,6 +33312,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32750,6 +33328,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32763,6 +33342,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32775,6 +33355,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32787,6 +33368,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "optional": true, "peer": true } @@ -32796,6 +33378,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, "optional": true, "peer": true }, @@ -32803,6 +33386,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, "optional": true, "peer": true }, @@ -32810,6 +33394,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32820,6 +33405,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32842,6 +33428,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32871,6 +33458,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32895,6 +33483,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32905,6 +33494,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32916,6 +33506,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32926,6 +33517,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -32933,6 +33525,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true }, @@ -32940,6 +33533,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32961,6 +33555,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, "optional": true, "peer": true }, @@ -32968,6 +33563,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32983,6 +33579,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -32996,6 +33593,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -33008,6 +33606,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -33020,6 +33619,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "optional": true, "peer": true } @@ -33029,6 +33629,7 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true, "optional": true, "peer": true }, @@ -33036,6 +33637,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -33046,6 +33648,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -33220,6 +33823,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -33237,6 +33841,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -33247,6 +33852,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -33258,6 +33864,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -33268,6 +33875,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "optional": true, "peer": true }, @@ -33275,6 +33883,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "optional": true, "peer": true }, @@ -33282,6 +33891,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -33297,6 +33907,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -33716,7 +34327,8 @@ "min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true }, "mini-css-extract-plugin": { "version": "2.7.6", @@ -35099,6 +35711,7 @@ "version": "6.0.4", "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "dev": true, "optional": true, "peer": true }, @@ -36263,6 +36876,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, "requires": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" @@ -37169,6 +37783,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, "requires": { "min-indent": "^1.0.0" } @@ -37747,6 +38362,7 @@ "version": "9.2.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -38491,6 +39107,7 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, "optional": true, "peer": true, "requires": { @@ -38507,6 +39124,7 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, "optional": true, "peer": true }, diff --git a/package.json b/package.json index 3de7108..7116ef6 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,6 @@ "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", "@mui/material": "^5.14.20", - "@testing-library/jest-dom": "^6.1.5", - "@testing-library/react": "^14.1.2", "@testing-library/user-event": "^14.5.1", "axios": "^1.6.2", "prop-types": "^15.8.1", @@ -50,5 +48,9 @@ "last 1 safari version" ] }, - "proxy": "http://localhost:5000" + "proxy": "http://localhost:5000", + "devDependencies": { + "@testing-library/jest-dom": "^6.1.5", + "@testing-library/react": "^14.1.2" + } } diff --git a/src/components/LoginPage/NameInput/NameInput.css b/src/components/LoginPage/NameInput/NameInput.css index 9f6282c..8e311e7 100644 --- a/src/components/LoginPage/NameInput/NameInput.css +++ b/src/components/LoginPage/NameInput/NameInput.css @@ -7,6 +7,7 @@ border: 1px solid white; border-radius: 8px; margin: 20px; + z-index: 2; } .name-input-container > button { margin-top: 5px; @@ -17,18 +18,6 @@ .name-input-container > input { margin-top: 10px; } -.name-overlay { - position: absolute; - display: flex; - align-items: center; - justify-content: center; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: rgba(0, 0, 0, 0.5); - z-index: 1; -} input, button { padding: 0; diff --git a/src/components/LoginPage/NameInput/NameInput.jsx b/src/components/LoginPage/NameInput/NameInput.jsx index 22da873..964a843 100644 --- a/src/components/LoginPage/NameInput/NameInput.jsx +++ b/src/components/LoginPage/NameInput/NameInput.jsx @@ -22,19 +22,17 @@ const NameInput = ({ isRoomPrivate, roomId }) => { }, [socket]); return ( -
-
- - {isRoomPrivate ? ( - - ) : null} - -
+
+ + {isRoomPrivate ? ( + + ) : null} +
); }; diff --git a/src/components/LoginPage/ServerList/ServerList.jsx b/src/components/LoginPage/ServerList/ServerList.jsx index 16eb46e..c6af53e 100644 --- a/src/components/LoginPage/ServerList/ServerList.jsx +++ b/src/components/LoginPage/ServerList/ServerList.jsx @@ -6,6 +6,7 @@ import ReactLoading from 'react-loading'; import './ServerList.css'; import NameInput from '../NameInput/NameInput'; +import Overlay from '../../Overlay/Overlay'; const ServerList = () => { const socket = useContext(SocketContext); @@ -70,7 +71,11 @@ const ServerList = () => {
)}
- {joining ? : null} + {joining ? ( + setJoining(false)}> + + + ) : null} ); }; diff --git a/src/components/Overlay/Overlay.jsx b/src/components/Overlay/Overlay.jsx new file mode 100644 index 0000000..30164d3 --- /dev/null +++ b/src/components/Overlay/Overlay.jsx @@ -0,0 +1,9 @@ +import styles from './Overlay.module.css'; +import useKeyPress from '../../hooks/useKeyPress'; + +const Overlay = ({ children, handleOverlayClose }) => { + useKeyPress('Escape', handleOverlayClose); + + return
{children}
; +}; +export default Overlay; diff --git a/src/components/Overlay/Overlay.module.css b/src/components/Overlay/Overlay.module.css new file mode 100644 index 0000000..115d2ae --- /dev/null +++ b/src/components/Overlay/Overlay.module.css @@ -0,0 +1,13 @@ +.container { + position: absolute; + display: flex; + align-items: center; + justify-content: center; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.5); + z-index: 1; + cursor: pointer; +} diff --git a/src/components/Overlay/Overlay.test.js b/src/components/Overlay/Overlay.test.js new file mode 100644 index 0000000..c7907be --- /dev/null +++ b/src/components/Overlay/Overlay.test.js @@ -0,0 +1,34 @@ +import '@testing-library/jest-dom'; +import React from 'react'; +import { render } from '@testing-library/react'; +import Overlay from './Overlay'; +import userEvent from '@testing-library/user-event'; + +describe('Overlay component', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('renders Overlay component', () => { + const { container } = render( {}} />); + expect(container).toBeInTheDocument(); + }); + + it('renders children inside Overlay', () => { + const { getByTestId } = render( + {}}> +
+ + ); + expect(getByTestId('test-child')).toBeInTheDocument(); + }); + + it('calls handleOverlayClose on Escape key press', async () => { + const handleOverlayCloseMock = jest.fn(); + render(); + + await userEvent.type(document.body, '{Escape}'); + + expect(handleOverlayCloseMock).toHaveBeenCalled(); + }); +}); From 469a60871af6edc613690bdae2ffb79df027fe2b Mon Sep 17 00:00:00 2001 From: Wenszel Date: Tue, 12 Dec 2023 20:13:13 +0100 Subject: [PATCH 3/9] added tests and css modules for NameContainer components --- .../AnimatedOverlay/AnimatedOverlay.jsx | 11 +--- .../AnimatedOverlay.module.css | 10 ++++ .../AnimatedOverlay/AnimatedOverlay.test.js | 20 +++++++ .../AnimatedOverlay/TimerAnimation.js | 19 +++--- .../Navbar/NameContainer/NameContainer.jsx | 7 +-- .../NameContainer/NameContainer.module.css | 13 +++++ .../NameContainer/NameContainer.test.js | 58 +++++++++++++++++++ src/constants/colors.js | 2 + src/index.css | 13 ----- 9 files changed, 118 insertions(+), 35 deletions(-) create mode 100644 src/components/Navbar/NameContainer/AnimatedOverlay/AnimatedOverlay.module.css create mode 100644 src/components/Navbar/NameContainer/AnimatedOverlay/AnimatedOverlay.test.js create mode 100644 src/components/Navbar/NameContainer/NameContainer.module.css create mode 100644 src/components/Navbar/NameContainer/NameContainer.test.js create mode 100644 src/constants/colors.js diff --git a/src/components/Navbar/NameContainer/AnimatedOverlay/AnimatedOverlay.jsx b/src/components/Navbar/NameContainer/AnimatedOverlay/AnimatedOverlay.jsx index ba0558a..7c19fa2 100644 --- a/src/components/Navbar/NameContainer/AnimatedOverlay/AnimatedOverlay.jsx +++ b/src/components/Navbar/NameContainer/AnimatedOverlay/AnimatedOverlay.jsx @@ -1,19 +1,12 @@ import React, { useMemo } from 'react'; import { CSSTransition } from 'react-transition-group'; import './TimerAnimation.js'; - const AnimatedOverlay = ({ time }) => { const animationDelay = useMemo(() => 15 - Math.ceil((time - Date.now()) / 1000), [time]); return ( - -
+ +
); }; diff --git a/src/components/Navbar/NameContainer/AnimatedOverlay/AnimatedOverlay.module.css b/src/components/Navbar/NameContainer/AnimatedOverlay/AnimatedOverlay.module.css new file mode 100644 index 0000000..23f87f4 --- /dev/null +++ b/src/components/Navbar/NameContainer/AnimatedOverlay/AnimatedOverlay.module.css @@ -0,0 +1,10 @@ +.overlay { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + opacity: 0.9; + animation: timerAnimation 15s linear infinite; + transition-duration: 15s; +} diff --git a/src/components/Navbar/NameContainer/AnimatedOverlay/AnimatedOverlay.test.js b/src/components/Navbar/NameContainer/AnimatedOverlay/AnimatedOverlay.test.js new file mode 100644 index 0000000..77b8d9e --- /dev/null +++ b/src/components/Navbar/NameContainer/AnimatedOverlay/AnimatedOverlay.test.js @@ -0,0 +1,20 @@ +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import '@testing-library/jest-dom'; +import AnimatedOverlay from './AnimatedOverlay'; + +describe('AnimatedOverlay component', () => { + it('renders without crashing', () => { + render(); + }); + + it('applies animation delay based on time prop', () => { + const timeNow = Date.now(); + const time = timeNow + 5000; + render(); + const overlay = screen.getByTestId('animated-overlay'); + const expectedDelay = 15 - Math.ceil((time - timeNow) / 1000); + + expect(overlay).toHaveStyle({ animationDelay: `-${expectedDelay}s` }); + }); +}); diff --git a/src/components/Navbar/NameContainer/AnimatedOverlay/TimerAnimation.js b/src/components/Navbar/NameContainer/AnimatedOverlay/TimerAnimation.js index a8742a4..084300a 100644 --- a/src/components/Navbar/NameContainer/AnimatedOverlay/TimerAnimation.js +++ b/src/components/Navbar/NameContainer/AnimatedOverlay/TimerAnimation.js @@ -4,20 +4,20 @@ const steps = 86; let count = 0; let s = 'polygon(50% 50%, 50% 0%, 50% 0%'; -for (let i = 50; i <= 100; i += 5) { +for (let i = 50; i < 100; i += 5) { s += `, ${i}% 0%`; handle(); } -for (let i = 0; i <= 100; i += 5) { +for (let i = 0; i < 100; i += 5) { s += `, 100% ${i}%`; handle(); } -for (let i = 100; i >= 0; i -= 5) { +for (let i = 100; i > 0; i -= 5) { s += `, ${i}% 100%`; handle(); } -for (let i = 100; i >= 0; i -= 5) { +for (let i = 100; i > 0; i -= 5) { s += `, 0% ${i}%`; handle(); } @@ -52,12 +52,13 @@ function handle() { keyframes.push(step); count++; } - -document.styleSheets[0].insertRule( - ` +if (document && document.styleSheets && document.styleSheets[0]) { + document.styleSheets[0].insertRule( + ` @keyframes timerAnimation { ${keyframes.join('\n')} } `, - document.styleSheets[0].cssRules.length -); + document.styleSheets[0].cssRules.length + ); +} diff --git a/src/components/Navbar/NameContainer/NameContainer.jsx b/src/components/Navbar/NameContainer/NameContainer.jsx index 14981ee..53ba65d 100644 --- a/src/components/Navbar/NameContainer/NameContainer.jsx +++ b/src/components/Navbar/NameContainer/NameContainer.jsx @@ -1,13 +1,11 @@ import React from 'react'; import PropTypes from 'prop-types'; import AnimatedOverlay from './AnimatedOverlay/AnimatedOverlay'; +import styles from './NameContainer.module.css'; const NameContainer = ({ player, time }) => { return ( -
+

{player.name}

{player.nowMoving ? : null}
@@ -17,6 +15,7 @@ const NameContainer = ({ player, time }) => { NameContainer.propTypes = { player: PropTypes.object, time: PropTypes.number, + testId: PropTypes.string, }; export default NameContainer; diff --git a/src/components/Navbar/NameContainer/NameContainer.module.css b/src/components/Navbar/NameContainer/NameContainer.module.css new file mode 100644 index 0000000..b5ef2f2 --- /dev/null +++ b/src/components/Navbar/NameContainer/NameContainer.module.css @@ -0,0 +1,13 @@ +.container { + position: relative; + min-width: 100px; + min-height: 50px; + display: flex; + justify-content: center; + align-items: center; + border: 2px solid white; + border-radius: 5px; + color: white; + font-weight: bold; + text-align: center; +} diff --git a/src/components/Navbar/NameContainer/NameContainer.test.js b/src/components/Navbar/NameContainer/NameContainer.test.js new file mode 100644 index 0000000..030f9af --- /dev/null +++ b/src/components/Navbar/NameContainer/NameContainer.test.js @@ -0,0 +1,58 @@ +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import '@testing-library/jest-dom'; +import NameContainer from './NameContainer'; +import { NOT_READY_COLOR } from '../../../constants/colors'; + +jest.mock('./AnimatedOverlay/AnimatedOverlay.jsx', () => () => { + return ; +}); + +describe('NameContainer component', () => { + let player; + let time; + + beforeEach(() => { + player = { + name: 'TestPlayer', + ready: false, + color: 'blue', + nowMoving: false, + }; + time = 0; + }); + + it('renders without crashing', () => { + render(); + }); + + it('renders player name', () => { + render(); + expect(screen.getByText(player.name)).toBeInTheDocument(); + }); + + it('applies grey color when player is not ready', () => { + player.ready = false; + render(); + const container = screen.getByText(player.name).closest('div'); + expect(container).toHaveStyle({ backgroundColor: NOT_READY_COLOR }); + }); + + it('applies player colors as background when player is ready', () => { + player.ready = true; + render(); + const container = screen.getByText(player.name).closest('div'); + expect(container).toHaveStyle({ backgroundColor: player.color }); + }); + + it('renders AnimatedOverlay when player is nowMoving', () => { + const movingPlayer = { ...player, nowMoving: true }; + render(); + expect(screen.getByTestId('animated-overlay')).toBeInTheDocument(); + }); + + it('does not render AnimatedOverlay when player is not nowMoving', () => { + render(); + expect(screen.queryByTestId('animated-overlay')).toBeNull(); + }); +}); diff --git a/src/constants/colors.js b/src/constants/colors.js new file mode 100644 index 0000000..1e1034e --- /dev/null +++ b/src/constants/colors.js @@ -0,0 +1,2 @@ +export const NOT_READY_COLOR = 'lightgrey'; +export const PLAYER_COLORS = ['red', 'blue', 'green', 'yellow']; diff --git a/src/index.css b/src/index.css index 1346031..f4893af 100644 --- a/src/index.css +++ b/src/index.css @@ -29,19 +29,6 @@ canvas { flex-direction: row; } -.name-container { - position: relative; - min-width: 100px; - min-height: 50px; - display: flex; - justify-content: center; - align-items: center; - border: 2px solid white; - border-radius: 5px; - color: white; - font-weight: bold; - text-align: center; -} .timer { background-color: darkblue; color: white; From 949af0622bb3c6c0e603b984ed84d5f68afa469b Mon Sep 17 00:00:00 2001 From: Wenszel Date: Tue, 12 Dec 2023 20:49:28 +0100 Subject: [PATCH 4/9] added useSocketData hook --- src/components/Gameboard/Dice/Dice.jsx | 38 ------------------------- src/components/Gameboard/Gameboard.jsx | 8 ++---- src/components/Navbar/Dice/Dice.jsx | 24 ++++++++++++++++ src/components/Navbar/Dice/Dice.test.js | 0 src/components/Navbar/Navbar.css | 18 ------------ src/components/Navbar/Navbar.jsx | 16 ++++++----- src/constants/diceImages.js | 11 +++++++ src/hooks/useSocketData.js | 13 +++++++++ 8 files changed, 59 insertions(+), 69 deletions(-) delete mode 100644 src/components/Gameboard/Dice/Dice.jsx create mode 100644 src/components/Navbar/Dice/Dice.jsx create mode 100644 src/components/Navbar/Dice/Dice.test.js create mode 100644 src/constants/diceImages.js create mode 100644 src/hooks/useSocketData.js diff --git a/src/components/Gameboard/Dice/Dice.jsx b/src/components/Gameboard/Dice/Dice.jsx deleted file mode 100644 index 84d3a49..0000000 --- a/src/components/Gameboard/Dice/Dice.jsx +++ /dev/null @@ -1,38 +0,0 @@ -import React, { useEffect, useContext } from 'react'; -import { SocketContext } from '../../../App'; -import one from '../../../images/dice/1.png'; -import two from '../../../images/dice/2.png'; -import three from '../../../images/dice/3.png'; -import four from '../../../images/dice/4.png'; -import five from '../../../images/dice/5.png'; -import six from '../../../images/dice/6.png'; -import roll from '../../../images/dice/roll.png'; - -const Dice = ({ rolledNumberCallback, rolledNumber, nowMoving, color, movingPlayer }) => { - const socket = useContext(SocketContext); - - const images = [one, two, three, four, five, six, roll]; - - const handleRoll = () => { - socket.emit('game:roll'); - }; - - useEffect(() => { - socket.on('game:roll', number => { - rolledNumberCallback(number); - }); - }, [socket, rolledNumberCallback]); - - return ( -
- {movingPlayer === color ? ( - rolledNumber ? ( - {rolledNumber} - ) : nowMoving ? ( - roll - ) : null - ) : null} -
- ); -}; -export default Dice; diff --git a/src/components/Gameboard/Gameboard.jsx b/src/components/Gameboard/Gameboard.jsx index 5217304..99384ac 100644 --- a/src/components/Gameboard/Gameboard.jsx +++ b/src/components/Gameboard/Gameboard.jsx @@ -1,6 +1,7 @@ import React, { useState, useEffect, useContext } from 'react'; import ReactLoading from 'react-loading'; import { PlayerDataContext, SocketContext } from '../../App'; +import useSocketData from '../../hooks/useSocketData'; import Map from './Map/Map'; import Navbar from '../Navbar/Navbar'; @@ -11,7 +12,7 @@ const Gameboard = () => { const [pawns, setPawns] = useState([]); const [players, setPlayers] = useState([]); - const [rolledNumber, setRolledNumber] = useState(null); + const [rolledNumber, setRolledNumber] = useSocketData('game:roll'); const [time, setTime] = useState(); const [isReady, setIsReady] = useState(); const [nowMoving, setNowMoving] = useState(false); @@ -48,10 +49,6 @@ const Gameboard = () => { }); }, [socket]); - const rolledNumberCallback = number => { - setRolledNumber(number); - }; - return ( <> {(players[0] && !started) || (time && started) ? ( @@ -64,7 +61,6 @@ const Gameboard = () => { movingPlayer={movingPlayer} rolledNumber={rolledNumber} nowMoving={nowMoving} - rolledNumberCallback={rolledNumberCallback} />
diff --git a/src/components/Navbar/Dice/Dice.jsx b/src/components/Navbar/Dice/Dice.jsx new file mode 100644 index 0000000..dfd1630 --- /dev/null +++ b/src/components/Navbar/Dice/Dice.jsx @@ -0,0 +1,24 @@ +import React, { useContext } from 'react'; +import { SocketContext } from '../../../App'; +import images from '../../../constants/diceImages'; + +const Dice = ({ rolledNumber, nowMoving, color, movingPlayer }) => { + const socket = useContext(SocketContext); + + const handleRoll = () => { + socket.emit('game:roll'); + }; + + return ( +
+ {movingPlayer === color ? ( + rolledNumber ? ( + {rolledNumber} + ) : nowMoving ? ( + roll + ) : null + ) : null} +
+ ); +}; +export default Dice; diff --git a/src/components/Navbar/Dice/Dice.test.js b/src/components/Navbar/Dice/Dice.test.js new file mode 100644 index 0000000..e69de29 diff --git a/src/components/Navbar/Navbar.css b/src/components/Navbar/Navbar.css index 1358d4b..6dc92fd 100644 --- a/src/components/Navbar/Navbar.css +++ b/src/components/Navbar/Navbar.css @@ -7,23 +7,6 @@ .roll { cursor: pointer; } -.ready-container { - display: flex; - width: 300px; - justify-content: center; - align-items: center; - flex-direction: column; - flex-flow: row-reverse; - background-color: grey; - border-radius: 10px; - border: 2px solid white; -} -.ready-container > label { - margin-left: 10px; - margin-right: 10px; - width: 100px; - color: white; -} .player-container { display: flex; align-items: center; @@ -52,4 +35,3 @@ grid-column: 2; grid-row: 4; } -/* Styl dla overlay */ diff --git a/src/components/Navbar/Navbar.jsx b/src/components/Navbar/Navbar.jsx index 1b05d12..1a84d19 100644 --- a/src/components/Navbar/Navbar.jsx +++ b/src/components/Navbar/Navbar.jsx @@ -1,29 +1,31 @@ import React from 'react'; -import Dice from '../Gameboard/Dice/Dice'; +import Dice from './Dice/Dice'; import NameContainer from './NameContainer/NameContainer'; import ReadyButton from './ReadyButton/ReadyButton'; import './Navbar.css'; +import { PLAYER_COLORS } from '../../constants/colors'; import { useContext } from 'react'; import { PlayerDataContext } from '../../App'; -const Navbar = ({ players, started, time, isReady, rolledNumber, nowMoving, rolledNumberCallback, movingPlayer }) => { + +const Navbar = ({ players, started, time, isReady, rolledNumber, nowMoving, movingPlayer }) => { const context = useContext(PlayerDataContext); - const colors = ['red', 'blue', 'green', 'yellow']; + return ( <> {players.map((player, index) => ( -
+
- {context.color !== player.color || started ? null : } + {context.color === player.color || (!started && )}
))} ); }; + export default Navbar; diff --git a/src/constants/diceImages.js b/src/constants/diceImages.js new file mode 100644 index 0000000..e2acf9c --- /dev/null +++ b/src/constants/diceImages.js @@ -0,0 +1,11 @@ +import one from '../images/dice/1.png'; +import two from '../images/dice/2.png'; +import three from '../images/dice/3.png'; +import four from '../images/dice/4.png'; +import five from '../images/dice/5.png'; +import six from '../images/dice/6.png'; +import roll from '../images/dice/roll.png'; + +const diceImages = [one, two, three, four, five, six, roll]; + +export default diceImages; diff --git a/src/hooks/useSocketData.js b/src/hooks/useSocketData.js new file mode 100644 index 0000000..d33b7dc --- /dev/null +++ b/src/hooks/useSocketData.js @@ -0,0 +1,13 @@ +import { useState, useContext } from 'react'; +import { SocketContext } from '../App'; + +const useSocketData = port => { + const socket = useContext(SocketContext); + const [data, setData] = useState(null); + socket.on(port, data => { + setData(data); + }); + return [data, setData]; +}; + +export default useSocketData; From aa11edca027781f2f8c915280930baa20657125c Mon Sep 17 00:00:00 2001 From: Wenszel Date: Tue, 12 Dec 2023 22:18:55 +0100 Subject: [PATCH 5/9] added ready button tests --- .../Navbar/ReadyButton/ReadyButton.jsx | 5 +- .../Navbar/ReadyButton/ReadyButton.module.css | 17 ++++++ .../Navbar/ReadyButton/ReadyButton.test.js | 55 +++++++++++++++++++ 3 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 src/components/Navbar/ReadyButton/ReadyButton.module.css create mode 100644 src/components/Navbar/ReadyButton/ReadyButton.test.js diff --git a/src/components/Navbar/ReadyButton/ReadyButton.jsx b/src/components/Navbar/ReadyButton/ReadyButton.jsx index 86d40ed..4d5a2b2 100644 --- a/src/components/Navbar/ReadyButton/ReadyButton.jsx +++ b/src/components/Navbar/ReadyButton/ReadyButton.jsx @@ -1,8 +1,7 @@ import React, { useState, useContext } from 'react'; import { SocketContext } from '../../../App'; import Switch from '@mui/material/Switch'; -import '../Navbar.css'; -import '../NameContainer/AnimatedOverlay/TimerAnimation'; +import styles from './ReadyButton.module.css'; const ReadyButton = ({ isReady }) => { const socket = useContext(SocketContext); @@ -13,7 +12,7 @@ const ReadyButton = ({ isReady }) => { setChecked(!checked); }; return ( -
+
diff --git a/src/components/Navbar/ReadyButton/ReadyButton.module.css b/src/components/Navbar/ReadyButton/ReadyButton.module.css new file mode 100644 index 0000000..8656421 --- /dev/null +++ b/src/components/Navbar/ReadyButton/ReadyButton.module.css @@ -0,0 +1,17 @@ +.container { + display: flex; + justify-content: center; + align-items: center; + margin: 10px; + flex-direction: column; + flex-flow: row-reverse; + background-color: grey; + border-radius: 10px; + border: 2px solid white; +} +.container > label { + margin-left: 10px; + margin-right: 10px; + width: 100px; + color: white; +} diff --git a/src/components/Navbar/ReadyButton/ReadyButton.test.js b/src/components/Navbar/ReadyButton/ReadyButton.test.js new file mode 100644 index 0000000..325587c --- /dev/null +++ b/src/components/Navbar/ReadyButton/ReadyButton.test.js @@ -0,0 +1,55 @@ +import React from 'react'; +import { render, screen, fireEvent } from '@testing-library/react'; +import '@testing-library/jest-dom'; +import ReadyButton from './ReadyButton'; +import { SocketContext } from '../../../App'; + +const mockSocket = { + emit: jest.fn(), +}; + +describe('ReadyButton component', () => { + it('renders without crashing', () => { + render( + + + + ); + }); + + it('emits "player:ready" event and toggles switch on change', () => { + render( + + + + ); + + const switchElement = screen.getByRole('checkbox'); + fireEvent.click(switchElement); + + expect(mockSocket.emit).toHaveBeenCalledWith('player:ready'); + expect(switchElement).toBeChecked(); + }); + + it('displays correct label when switch is checked', () => { + render( + + + + ); + + const labelElement = screen.getByText('I want to play'); + expect(labelElement).toBeInTheDocument(); + }); + + it('displays correct label when switch is not checked', () => { + render( + + + + ); + + const labelElement = screen.getByText('Im waiting'); + expect(labelElement).toBeInTheDocument(); + }); +}); From dd026fbc37240a0b8c754c2cc6304ed7a826e157 Mon Sep 17 00:00:00 2001 From: Wenszel Date: Wed, 13 Dec 2023 09:38:32 +0100 Subject: [PATCH 6/9] edited map event handlers --- src/components/Gameboard/Map/Map.jsx | 88 ++++++++++++---------------- src/constants/positions.js | 4 +- 2 files changed, 40 insertions(+), 52 deletions(-) diff --git a/src/components/Gameboard/Map/Map.jsx b/src/components/Gameboard/Map/Map.jsx index 8f008b2..fdfd211 100644 --- a/src/components/Gameboard/Map/Map.jsx +++ b/src/components/Gameboard/Map/Map.jsx @@ -2,7 +2,7 @@ import React, { useEffect, useRef, useState, useContext } from 'react'; import { PlayerDataContext, SocketContext } from '../../../App'; import mapImage from '../../../images/map.jpg'; -import positions from '../positions'; +import positionMapCoords from '../positions'; import pawnImages from '../../../constants/pawnImages'; import canPawnMove from './canPawnMove'; import getPositionAfterMove from './getPositionAfterMove'; @@ -14,63 +14,56 @@ const Map = ({ pawns, nowMoving, rolledNumber }) => { const [hintPawn, setHintPawn] = useState(); - const paintPawn = (context, x, y, color) => { + const paintPawn = (context, pawn) => { + const { x, y } = positionMapCoords[pawn.position]; const touchableArea = new Path2D(); touchableArea.arc(x, y, 12, 0, 2 * Math.PI); const image = new Image(); - image.src = pawnImages[color]; - // image.onload = function () { - context.drawImage(image, x - 17, y - 14, 35, 30); + image.src = pawnImages[pawn.color]; + image.onload = function () { + context.drawImage(image, x - 17, y - 15, 35, 30); + }; return touchableArea; }; const handleCanvasClick = event => { - if (hintPawn) { - const canvas = canvasRef.current; - const ctx = canvas.getContext('2d'); - const rect = canvas.getBoundingClientRect(), - cursorX = event.clientX - rect.left, - cursorY = event.clientY - rect.top; - for (const pawn of pawns) { - if (ctx.isPointInPath(pawn.touchableArea, cursorX, cursorY)) { - socket.emit('game:move', pawn._id); - } + const canvas = canvasRef.current; + const ctx = canvas.getContext('2d'); + const rect = canvas.getBoundingClientRect(), + cursorX = event.clientX - rect.left, + cursorY = event.clientY - rect.top; + for (const pawn of pawns) { + if (ctx.isPointInPath(pawn.touchableArea, cursorX, cursorY)) { + if (canPawnMove(pawn, rolledNumber)) socket.emit('game:move', pawn._id); } - setHintPawn(null); } + setHintPawn(null); }; const handleMouseMove = event => { - if (nowMoving && rolledNumber) { - const canvas = canvasRef.current; - const ctx = canvas.getContext('2d'); - const rect = canvas.getBoundingClientRect(), - x = event.clientX - rect.left, - y = event.clientY - rect.top; - canvas.style.cursor = 'default'; - for (const pawn of pawns) { - if (pawn.touchableArea) { - if ( - ctx.isPointInPath(pawn.touchableArea, x, y) && - player.color === pawn.color && - canPawnMove(pawn, rolledNumber) - ) { - const pawnPosition = getPositionAfterMove(pawn, rolledNumber); - if (pawnPosition) { - canvas.style.cursor = 'pointer'; - setHintPawn({ id: pawn._id, position: pawnPosition, color: 'grey' }); - break; - } - } else { - setHintPawn(null); - } - } else { - setHintPawn(null); + if (!nowMoving || !rolledNumber) return; + const canvas = canvasRef.current; + const ctx = canvas.getContext('2d'); + const rect = canvas.getBoundingClientRect(), + x = event.clientX - rect.left, + y = event.clientY - rect.top; + canvas.style.cursor = 'default'; + for (const pawn of pawns) { + if ( + ctx.isPointInPath(pawn.touchableArea, x, y) && + player.color === pawn.color && + canPawnMove(pawn, rolledNumber) + ) { + const pawnPosition = getPositionAfterMove(pawn, rolledNumber); + if (pawnPosition) { + canvas.style.cursor = 'pointer'; + if (hintPawn && hintPawn.id === pawn._id) return; + setHintPawn({ id: pawn._id, position: pawnPosition, color: 'grey' }); + return; } } - } else { - setHintPawn(null); } + setHintPawn(null); }; useEffect(() => { @@ -82,15 +75,10 @@ const Map = ({ pawns, nowMoving, rolledNumber }) => { image.onload = function () { ctx.drawImage(image, 0, 0); pawns.forEach((pawn, index) => { - pawns[index].touchableArea = paintPawn( - ctx, - positions[pawn.position].x, - positions[pawn.position].y, - pawn.color - ); + pawns[index].touchableArea = paintPawn(ctx, pawn); }); if (hintPawn) { - paintPawn(ctx, positions[hintPawn.position].x, positions[hintPawn.position].y, hintPawn.color); + paintPawn(ctx, hintPawn); } }; }; diff --git a/src/constants/positions.js b/src/constants/positions.js index c437f9f..c5d848a 100644 --- a/src/constants/positions.js +++ b/src/constants/positions.js @@ -1,4 +1,4 @@ -const positions = [ +const positionMapCoords = [ // Red base { x: 67, y: 67 }, // 0 { x: 67, y: 116 }, @@ -114,4 +114,4 @@ const positions = [ { x: 230, y: 200 }, // 91 ]; -export default positions; +export default positionMapCoords; From caf6bc7d91663c4eceafcb2cf1a65a49c2525f2e Mon Sep 17 00:00:00 2001 From: Wenszel Date: Wed, 13 Dec 2023 11:18:11 +0100 Subject: [PATCH 7/9] added tests to Navbar and Dice --- src/components/Navbar/Dice/Dice.jsx | 24 +++--- src/components/Navbar/Dice/Dice.module.css | 11 +++ src/components/Navbar/Dice/Dice.test.js | 74 +++++++++++++++++++ src/components/Navbar/Navbar.jsx | 19 ++--- .../Navbar/{Navbar.css => Navbar.module.css} | 11 +-- src/components/Navbar/Navbar.test.js | 72 ++++++++++++++++++ src/index.css | 4 - 7 files changed, 182 insertions(+), 33 deletions(-) create mode 100644 src/components/Navbar/Dice/Dice.module.css rename src/components/Navbar/{Navbar.css => Navbar.module.css} (73%) create mode 100644 src/components/Navbar/Navbar.test.js diff --git a/src/components/Navbar/Dice/Dice.jsx b/src/components/Navbar/Dice/Dice.jsx index dfd1630..ff5a4d5 100644 --- a/src/components/Navbar/Dice/Dice.jsx +++ b/src/components/Navbar/Dice/Dice.jsx @@ -1,24 +1,28 @@ import React, { useContext } from 'react'; import { SocketContext } from '../../../App'; import images from '../../../constants/diceImages'; +import styles from './Dice.module.css'; -const Dice = ({ rolledNumber, nowMoving, color, movingPlayer }) => { +const Dice = ({ rolledNumber, nowMoving, playerColor, movingPlayer }) => { const socket = useContext(SocketContext); - const handleRoll = () => { + const handleClick = () => { socket.emit('game:roll'); }; + const isCurrentPlayer = movingPlayer === playerColor; + const hasRolledNumber = rolledNumber !== null; + return ( -
- {movingPlayer === color ? ( - rolledNumber ? ( - {rolledNumber} - ) : nowMoving ? ( - roll - ) : null - ) : null} +
+ {isCurrentPlayer && + (hasRolledNumber ? ( + {rolledNumber} + ) : ( + nowMoving && roll + ))}
); }; + export default Dice; diff --git a/src/components/Navbar/Dice/Dice.module.css b/src/components/Navbar/Dice/Dice.module.css new file mode 100644 index 0000000..ce20014 --- /dev/null +++ b/src/components/Navbar/Dice/Dice.module.css @@ -0,0 +1,11 @@ +.container { + margin-left: 20px; + margin-right: 20px; + width: 50px; + height: 50px; +} +.container > img { + width: 100%; + height: 100%; + cursor: pointer; +} diff --git a/src/components/Navbar/Dice/Dice.test.js b/src/components/Navbar/Dice/Dice.test.js index e69de29..5de3150 100644 --- a/src/components/Navbar/Dice/Dice.test.js +++ b/src/components/Navbar/Dice/Dice.test.js @@ -0,0 +1,74 @@ +import React from 'react'; +import { render, screen, fireEvent } from '@testing-library/react'; +import '@testing-library/jest-dom'; +import Dice from './Dice'; +import { SocketContext } from '../../../App'; + +const mockSocket = { + emit: jest.fn(), +}; + +describe('Dice component', () => { + let props; + const MOVING_PLAYER = 'blue'; + const NOT_MOVING_PLAYER = 'red'; + const THIS_PLAYER_MOVING = true; + + beforeEach(() => { + props = { + rolledNumber: null, + nowMoving: false, + playerColor: '', + movingPlayer: '', + }; + }); + + it('should render correct rolledNumber next to moving player', () => { + props.rolledNumber = 5; + props.movingPlayer = MOVING_PLAYER; + props.playerColor = MOVING_PLAYER; + render(); + expect(screen.queryByAltText(props.rolledNumber)).toBeInTheDocument(); + }); + + it('should not render rolledNumber next to not moving player', () => { + props.rolledNumber = 5; + props.movingPlayer = MOVING_PLAYER; + props.playerColor = NOT_MOVING_PLAYER; + render(); + expect(screen.queryByAltText(props.rolledNumber)).not.toBeInTheDocument(); + }); + + it('should render roll icon next to moving player', () => { + props.rolledNumber = null; + props.movingPlayer = MOVING_PLAYER; + props.playerColor = MOVING_PLAYER; + props.nowMoving = THIS_PLAYER_MOVING; + render(); + expect(screen.queryByAltText('roll')).toBeInTheDocument(); + }); + + it('should not render roll icon next to not moving player', () => { + props.rolledNumber = null; + props.movingPlayer = MOVING_PLAYER; + props.playerColor = MOVING_PLAYER; + props.nowMoving = !THIS_PLAYER_MOVING; + render(); + expect(screen.queryByAltText('roll')).not.toBeInTheDocument(); + }); + + it('should send data on click', () => { + props.rolledNumber = null; + props.movingPlayer = MOVING_PLAYER; + props.playerColor = MOVING_PLAYER; + props.nowMoving = THIS_PLAYER_MOVING; + render( + + + + ); + const dice = screen.getByAltText('roll'); + fireEvent.click(dice); + expect(mockSocket.emit).toHaveBeenCalledWith('game:roll'); + }); +}); diff --git a/src/components/Navbar/Navbar.jsx b/src/components/Navbar/Navbar.jsx index 1a84d19..608b6e0 100644 --- a/src/components/Navbar/Navbar.jsx +++ b/src/components/Navbar/Navbar.jsx @@ -2,26 +2,27 @@ import React from 'react'; import Dice from './Dice/Dice'; import NameContainer from './NameContainer/NameContainer'; import ReadyButton from './ReadyButton/ReadyButton'; -import './Navbar.css'; import { PLAYER_COLORS } from '../../constants/colors'; import { useContext } from 'react'; import { PlayerDataContext } from '../../App'; +import styles from './Navbar.module.css'; const Navbar = ({ players, started, time, isReady, rolledNumber, nowMoving, movingPlayer }) => { const context = useContext(PlayerDataContext); + const diceProps = { + rolledNumber, + nowMoving, + movingPlayer, + }; + return ( <> {players.map((player, index) => ( -
+
- - {context.color === player.color || (!started && )} + {started ? : null} + {context.color === player.color && !started ? : null}
))} diff --git a/src/components/Navbar/Navbar.css b/src/components/Navbar/Navbar.module.css similarity index 73% rename from src/components/Navbar/Navbar.css rename to src/components/Navbar/Navbar.module.css index 6dc92fd..e574f19 100644 --- a/src/components/Navbar/Navbar.css +++ b/src/components/Navbar/Navbar.module.css @@ -1,13 +1,4 @@ -.dice-container { - margin-left: 20px; - margin-right: 20px; - width: 50px; - height: 50px; -} -.roll { - cursor: pointer; -} -.player-container { +.playerContainer { display: flex; align-items: center; flex-direction: row; diff --git a/src/components/Navbar/Navbar.test.js b/src/components/Navbar/Navbar.test.js new file mode 100644 index 0000000..a9f7457 --- /dev/null +++ b/src/components/Navbar/Navbar.test.js @@ -0,0 +1,72 @@ +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import '@testing-library/jest-dom'; +import Navbar from './Navbar'; +import { PlayerDataContext } from '../../App'; + +const mockPlayers = [ + { name: 'Player1', color: 'red' }, + { name: 'Player2', color: 'blue' }, +]; + +const mockPlayerData = { + color: 'red', +}; + +jest.mock('./NameContainer/NameContainer.jsx', () => () => { + return ; +}); + +jest.mock('./ReadyButton/ReadyButton.jsx', () => () => { + return ; +}); + +jest.mock('./Dice/Dice.jsx', () => () => { + return ; +}); + +const setup = props => { + props.players = mockPlayers; + return render( + + + + ); +}; + +describe('Navbar component', () => { + it('should render NameContainer for each player', () => { + setup({ + started: true, + }); + expect(screen.getAllByTestId('name-container')).toHaveLength(mockPlayers.length); + }); + + it('should render Dice when started is true', () => { + setup({ + started: true, + }); + expect(screen.getAllByTestId('dice-container')).toHaveLength(mockPlayers.length); + }); + + it('should not render ReadyButton when started is true', () => { + setup({ + started: true, + }); + expect(screen.queryByTestId('ready-button')).toBeNull(); + }); + + it('should render ReadyButton when started is false', () => { + setup({ + started: false, + }); + expect(screen.getByTestId('ready-button')).toBeInTheDocument(); + }); + + it('does not render Dice when started is false', () => { + setup({ + started: false, + }); + expect(screen.queryByTestId('dice-container')).toBeNull(); + }); +}); diff --git a/src/index.css b/src/index.css index f4893af..cae3a75 100644 --- a/src/index.css +++ b/src/index.css @@ -20,10 +20,6 @@ canvas { border-radius: 15px; border: 2px solid black; } -.dice-container > img { - width: 50px; - height: 50px; -} .navbar-container { display: flex; flex-direction: row; From a33ebeccddcdd81c75533422c4bddcf5d03f1ca8 Mon Sep 17 00:00:00 2001 From: Wenszel Date: Wed, 13 Dec 2023 16:31:52 +0100 Subject: [PATCH 8/9] added tests and css modules to LoginPage components --- backend/handlers/roomHandler.js | 4 +- src/components/HOC/withLoading.jsx | 14 +++ .../LoginPage/AddServer/AddServer.css | 35 -------- .../LoginPage/AddServer/AddServer.jsx | 62 ++++++------- .../LoginPage/AddServer/AddServer.module.css | 15 ++++ .../LoginPage/AddServer/AddServer.test.js | 82 +++++++++++++++++ .../LoginPage/JoinServer/JoinServer.jsx | 66 ++++++++++++++ .../JoinServer/JoinServer.module.css | 20 +++++ .../JoinServer/ServersTable/ServersTable.jsx | 33 +++++++ .../ServersTable/ServersTable.module.css | 40 +++++++++ .../ServersTable/ServersTable.test.js | 34 +++++++ src/components/LoginPage/LoginPage.jsx | 15 ++-- src/components/LoginPage/LoginPage.module.css | 8 ++ src/components/LoginPage/LoginPage.test.js | 19 ++++ .../LoginPage/NameInput/NameInput.css | 59 ------------ .../LoginPage/NameInput/NameInput.jsx | 13 +-- .../LoginPage/NameInput/NameInput.module.css | 20 +++++ .../LoginPage/NameInput/NameInput.test.js | 89 +++++++++++++++++++ .../LoginPage/ServerList/ServerList.css | 51 ----------- .../LoginPage/ServerList/ServerList.jsx | 82 ----------------- .../LoginPage/WindowLayout/WindowLayout.jsx | 15 ++++ .../WindowLayout.module.css} | 25 ++---- .../WindowLayout/WindowLayout.test.js | 28 ++++++ src/hooks/useInput.js | 4 +- src/hooks/useKeyPress.js | 2 +- src/hooks/useSocketData.js | 10 ++- src/index.css | 67 ++++++++++++++ 27 files changed, 614 insertions(+), 298 deletions(-) create mode 100644 src/components/HOC/withLoading.jsx delete mode 100644 src/components/LoginPage/AddServer/AddServer.css create mode 100644 src/components/LoginPage/AddServer/AddServer.module.css create mode 100644 src/components/LoginPage/AddServer/AddServer.test.js create mode 100644 src/components/LoginPage/JoinServer/JoinServer.jsx create mode 100644 src/components/LoginPage/JoinServer/JoinServer.module.css create mode 100644 src/components/LoginPage/JoinServer/ServersTable/ServersTable.jsx create mode 100644 src/components/LoginPage/JoinServer/ServersTable/ServersTable.module.css create mode 100644 src/components/LoginPage/JoinServer/ServersTable/ServersTable.test.js create mode 100644 src/components/LoginPage/LoginPage.module.css create mode 100644 src/components/LoginPage/LoginPage.test.js delete mode 100644 src/components/LoginPage/NameInput/NameInput.css create mode 100644 src/components/LoginPage/NameInput/NameInput.module.css create mode 100644 src/components/LoginPage/NameInput/NameInput.test.js delete mode 100644 src/components/LoginPage/ServerList/ServerList.css delete mode 100644 src/components/LoginPage/ServerList/ServerList.jsx create mode 100644 src/components/LoginPage/WindowLayout/WindowLayout.jsx rename src/components/LoginPage/{LoginPage.css => WindowLayout/WindowLayout.module.css} (76%) create mode 100644 src/components/LoginPage/WindowLayout/WindowLayout.test.js diff --git a/backend/handlers/roomHandler.js b/backend/handlers/roomHandler.js index f99324c..d01b908 100644 --- a/backend/handlers/roomHandler.js +++ b/backend/handlers/roomHandler.js @@ -16,13 +16,13 @@ module.exports = socket => { }; const handleGetAllRooms = async () => { - let rooms = await getRooms(); + const rooms = await getRooms(); sendToOnePlayerRooms(socket.id, rooms); }; const handleCreateRoom = async data => { createNewRoom(data); - socket.to(socket.id).emit('room:created'); + sendToOnePlayerRooms(socket.id, await getRooms()); }; socket.on('room:data', handleGetData); diff --git a/src/components/HOC/withLoading.jsx b/src/components/HOC/withLoading.jsx new file mode 100644 index 0000000..d68ecd3 --- /dev/null +++ b/src/components/HOC/withLoading.jsx @@ -0,0 +1,14 @@ +import ReactLoading from 'react-loading'; + +const withLoading = Component => { + return function WithLoading({ isLoading, ...props }) { + if (!isLoading) { + return ; + } + return ( + + ); + }; +}; + +export default withLoading; diff --git a/src/components/LoginPage/AddServer/AddServer.css b/src/components/LoginPage/AddServer/AddServer.css deleted file mode 100644 index 4c64921..0000000 --- a/src/components/LoginPage/AddServer/AddServer.css +++ /dev/null @@ -1,35 +0,0 @@ -.refresh { - display: flex; - margin-left: auto; - justify-content: center; - align-items: center; - width: 40px; - height: 100%; - border: 1px solid white; -} -.refresh > img { - width: 20px; - height: 20px; - cursor: pointer; -} - -form { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - width: 100%; -} - -.private-container { - margin-left: 10px; - display: flex; - flex-direction: row; - align-items: center; - width: 100%; -} -input:disabled { - background-color: black; - color: #999; - border: 1px solid #ddd; -} diff --git a/src/components/LoginPage/AddServer/AddServer.jsx b/src/components/LoginPage/AddServer/AddServer.jsx index a02c5e1..e065623 100644 --- a/src/components/LoginPage/AddServer/AddServer.jsx +++ b/src/components/LoginPage/AddServer/AddServer.jsx @@ -1,56 +1,50 @@ -import React, { useState, useContext, useEffect } from 'react'; -import './AddServer.css'; +import React, { useState, useContext } from 'react'; import Switch from '@mui/material/Switch'; import { SocketContext } from '../../../App'; +import WindowLayout from '../WindowLayout/WindowLayout'; +import useInput from '../../../hooks/useInput'; +import styles from './AddServer.module.css'; + const AddServer = () => { const socket = useContext(SocketContext); const [isPrivate, setIsPrivate] = useState(false); - const [serverName, setServerName] = useState(''); - const [password, setPassword] = useState(''); - - useEffect(() => { - socket.on('room:created', () => { - socket.emit('room:rooms'); - }); - }, [socket]); + const [isIncorrect, setIsIncorrect] = useState(false); + const serverName = useInput(''); + const password = useInput(''); const handleButtonClick = e => { e.preventDefault(); - socket.emit('room:create', { - name: serverName, - private: isPrivate, - password: password, - }); + if (!serverName.value) setIsIncorrect(true); + else + socket.emit('room:create', { + name: serverName.value, + password: password.value, + private: isPrivate, + }); }; return ( -
-
-

Host A Server

-
-
-
+ setServerName(e.target.value)} placeholder='Server Name' + {...serverName} + style={{ + border: isIncorrect ? '1px solid red' : '1px solid white', + }} /> -
-

Private

+
+ setIsPrivate(!isPrivate)} />
- setPassword(e.target.value)} - placeholder='password' - disabled={!isPrivate} - /> + -
-
+ } + /> ); }; diff --git a/src/components/LoginPage/AddServer/AddServer.module.css b/src/components/LoginPage/AddServer/AddServer.module.css new file mode 100644 index 0000000..7c91a94 --- /dev/null +++ b/src/components/LoginPage/AddServer/AddServer.module.css @@ -0,0 +1,15 @@ +.formContainer { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 100%; +} + +.privateContainer { + margin-left: 10px; + display: flex; + flex-direction: row; + align-items: center; + width: 100%; +} diff --git a/src/components/LoginPage/AddServer/AddServer.test.js b/src/components/LoginPage/AddServer/AddServer.test.js new file mode 100644 index 0000000..3602cb4 --- /dev/null +++ b/src/components/LoginPage/AddServer/AddServer.test.js @@ -0,0 +1,82 @@ +import React from 'react'; +import { render, screen, fireEvent } from '@testing-library/react'; +import '@testing-library/jest-dom'; +import { SocketContext } from '../../../App'; +import AddServer from './AddServer'; + +const mockSocket = { + emit: jest.fn(), +}; + +describe('AddServer component', () => { + it('should renders without crashing', () => { + render( + + + + ); + expect(screen.getByText('Host A Server')).toBeInTheDocument(); + }); + + it('should handles form submission with valid data when private', () => { + render( + + + + ); + + const serverNameInput = screen.getByPlaceholderText('Server Name'); + fireEvent.change(serverNameInput, { target: { value: 'Test Server' } }); + + const privateSwitch = screen.getByRole('checkbox'); + fireEvent.click(privateSwitch); + + const passwordInput = screen.getByPlaceholderText('password'); + fireEvent.change(passwordInput, { target: { value: 'TestPassword' } }); + + const hostButton = screen.getByText('Host'); + fireEvent.click(hostButton); + + expect(mockSocket.emit).toHaveBeenCalledWith('room:create', { + name: 'Test Server', + password: 'TestPassword', + private: true, + }); + }); + + it('should handles form submission with valid data when not private', () => { + render( + + + + ); + + const serverNameInput = screen.getByPlaceholderText('Server Name'); + fireEvent.change(serverNameInput, { target: { value: 'Test Server' } }); + + const hostButton = screen.getByText('Host'); + fireEvent.click(hostButton); + + expect(mockSocket.emit).toHaveBeenCalledWith('room:create', { + name: 'Test Server', + password: '', + private: false, + }); + }); + + it('should handles form submission with missing server name', () => { + render( + + + + ); + + const hostButton = screen.getByText('Host'); + fireEvent.click(hostButton); + + expect(mockSocket.emit).not.toHaveBeenCalled(); + + const serverNameInput = screen.getByPlaceholderText('Server Name'); + expect(serverNameInput).toHaveStyle('border: 1px solid red'); + }); +}); diff --git a/src/components/LoginPage/JoinServer/JoinServer.jsx b/src/components/LoginPage/JoinServer/JoinServer.jsx new file mode 100644 index 0000000..c267007 --- /dev/null +++ b/src/components/LoginPage/JoinServer/JoinServer.jsx @@ -0,0 +1,66 @@ +import React, { useContext, useEffect, useState } from 'react'; +import { SocketContext } from '../../../App'; +import refresh from '../../../images/login-page/refresh.png'; +import NameInput from '../NameInput/NameInput'; +import Overlay from '../../Overlay/Overlay'; +import WindowLayout from '../WindowLayout/WindowLayout'; +import ServersTable from './ServersTable/ServersTable'; +import withLoading from '../../HOC/withLoading'; +import useSocketData from '../../../hooks/useSocketData'; +import styles from './JoinServer.module.css'; + +const JoinServer = () => { + const socket = useContext(SocketContext); + const [rooms, setRooms] = useSocketData('room:rooms'); + + const [joining, setJoining] = useState(false); + const [clickedRoom, setClickedRoom] = useState(null); + const [isLoading, setIsLoading] = useState(true); + + useEffect(() => { + socket.emit('room:rooms'); + socket.on('room:rooms', () => { + setIsLoading(false); + }); + }, [socket]); + + const getRooms = () => { + setRooms([]); + socket.emit('room:rooms'); + }; + + const handleJoinClick = room => { + setClickedRoom(room); + setJoining(true); + }; + + const ServersTableWithLoading = withLoading(ServersTable); + + return ( + <> + + refresh +
+ } + content={ +
+ +
+ } + /> + {joining ? ( + setJoining(false)}> + + + ) : null} + + ); +}; +export default JoinServer; diff --git a/src/components/LoginPage/JoinServer/JoinServer.module.css b/src/components/LoginPage/JoinServer/JoinServer.module.css new file mode 100644 index 0000000..bd89d03 --- /dev/null +++ b/src/components/LoginPage/JoinServer/JoinServer.module.css @@ -0,0 +1,20 @@ +.serversTableContainer { + display: flex; + height: 500px; + overflow: scroll; + width: 100%; +} +.refresh { + display: flex; + margin-left: auto; + justify-content: center; + align-items: center; + width: 40px; + height: 100%; + border: 1px solid white; +} +.refresh > img { + width: 20px; + height: 20px; + cursor: pointer; +} diff --git a/src/components/LoginPage/JoinServer/ServersTable/ServersTable.jsx b/src/components/LoginPage/JoinServer/ServersTable/ServersTable.jsx new file mode 100644 index 0000000..d6b9987 --- /dev/null +++ b/src/components/LoginPage/JoinServer/ServersTable/ServersTable.jsx @@ -0,0 +1,33 @@ +import lock from '../../../../images/login-page/lock.png'; +import styles from './ServersTable.module.css'; + +const ServerListTable = ({ rooms, handleJoinClick }) => { + return ( + + + + + + + + + + + + {rooms.map((room, index) => ( + + + + + + + + ))} + +
Server#/#Status
{room.private ? private : null}{room.name}{`${room.players.length}/4`}{room.isStarted ? 'started' : 'waiting'} + +
+ ); +}; + +export default ServerListTable; diff --git a/src/components/LoginPage/JoinServer/ServersTable/ServersTable.module.css b/src/components/LoginPage/JoinServer/ServersTable/ServersTable.module.css new file mode 100644 index 0000000..25636ad --- /dev/null +++ b/src/components/LoginPage/JoinServer/ServersTable/ServersTable.module.css @@ -0,0 +1,40 @@ +.roomName { + max-width: 150px; + overflow: hidden; + text-align: left !important; +} +.rooms > thead > tr :nth-child(2) { + text-align: left; +} +.rooms > tbody > tr > td > img { + margin-right: 5px; + width: 20px; + height: 20px; +} + +.rooms > th { + padding: 8px; + text-align: center; + height: 50px; +} +.rooms > tbody > tr > td { + padding: 4px; + text-align: center; + height: 50px; +} +.rooms > tbody > tr > td { + max-height: 50px; + height: 10px; +} + +.rooms { + border-collapse: collapse; + width: 100%; +} + +.lastColumn { + width: 70px; +} +.firstColumn { + width: 40px; +} diff --git a/src/components/LoginPage/JoinServer/ServersTable/ServersTable.test.js b/src/components/LoginPage/JoinServer/ServersTable/ServersTable.test.js new file mode 100644 index 0000000..6ecde47 --- /dev/null +++ b/src/components/LoginPage/JoinServer/ServersTable/ServersTable.test.js @@ -0,0 +1,34 @@ +import React from 'react'; +import { render, screen, fireEvent } from '@testing-library/react'; +import '@testing-library/jest-dom'; +import ServersTable from './ServersTable'; + +const mockRooms = [ + { _id: '1', name: 'Room 1', private: false, players: [], isStarted: false }, + { _id: '2', name: 'Room 2', private: true, players: [], isStarted: true }, +]; + +describe('ServersTable component', () => { + it('should renders without crashing', () => { + render( {}} />); + expect(screen.getByText('Server')).toBeInTheDocument(); + expect(screen.getByText('#/#')).toBeInTheDocument(); + expect(screen.getByText('Status')).toBeInTheDocument(); + }); + + it('should renders the list of rooms', () => { + render( {}} />); + expect(screen.getByText('Room 1')).toBeInTheDocument(); + expect(screen.getByText('Room 2')).toBeInTheDocument(); + }); + + it('should handles join click for each room', () => { + const handleJoinClick = jest.fn(); + render(); + + const joinButtons = screen.getAllByText('Join'); + fireEvent.click(joinButtons[0]); + + expect(handleJoinClick).toHaveBeenCalledWith(mockRooms[0]); + }); +}); diff --git a/src/components/LoginPage/LoginPage.jsx b/src/components/LoginPage/LoginPage.jsx index 0a3f19f..2971fd6 100644 --- a/src/components/LoginPage/LoginPage.jsx +++ b/src/components/LoginPage/LoginPage.jsx @@ -1,14 +1,13 @@ -import './LoginPage.css'; import AddServer from './AddServer/AddServer'; -import ServerList from './ServerList/ServerList'; +import JoinServer from './JoinServer/JoinServer'; +import styles from './LoginPage.module.css'; + const LoginPage = () => { return ( - <> -
- - -
- +
+ + +
); }; diff --git a/src/components/LoginPage/LoginPage.module.css b/src/components/LoginPage/LoginPage.module.css new file mode 100644 index 0000000..b15dd68 --- /dev/null +++ b/src/components/LoginPage/LoginPage.module.css @@ -0,0 +1,8 @@ +.container { + display: flex; + flex-direction: row; + justify-content: center; + align-items: flex-start; + height: 50%; + width: 100%; +} diff --git a/src/components/LoginPage/LoginPage.test.js b/src/components/LoginPage/LoginPage.test.js new file mode 100644 index 0000000..d165830 --- /dev/null +++ b/src/components/LoginPage/LoginPage.test.js @@ -0,0 +1,19 @@ +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import '@testing-library/jest-dom'; +import LoginPage from './LoginPage'; + +jest.mock('./JoinServer/JoinServer', () => () =>
); +jest.mock('./AddServer/AddServer', () => () =>
); + +describe('LoginPage component', () => { + it('should renders JoinServer component ', () => { + render(); + expect(screen.getByTestId('join-server')).toBeInTheDocument(); + }); + + it('should renders AddServer component', () => { + render(); + expect(screen.getByTestId('add-server')).toBeInTheDocument(); + }); +}); diff --git a/src/components/LoginPage/NameInput/NameInput.css b/src/components/LoginPage/NameInput/NameInput.css deleted file mode 100644 index 8e311e7..0000000 --- a/src/components/LoginPage/NameInput/NameInput.css +++ /dev/null @@ -1,59 +0,0 @@ -.name-input-container { - display: flex; - flex-direction: column; - padding: 10px 20px 60px 20px; - width: 300px; - background: radial-gradient(circle, rgba(0, 138, 255, 1) 5%, rgba(9, 9, 121, 1) 81%); - border: 1px solid white; - border-radius: 8px; - margin: 20px; - z-index: 2; -} -.name-input-container > button { - margin-top: 5px; - text-align: center; - width: 100px; - align-self: center; -} -.name-input-container > input { - margin-top: 10px; -} -input, -button { - padding: 0; - border: none; - outline: none; - box-sizing: border-box; -} - -input { - width: 100%; - padding: 12px; - font-size: 16px; - border-radius: 8px; - color: white; - border: 1px solid #ccc; - background-color: rgba(0, 0, 0, 0.2); - transition: border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; -} - -input:focus { - color: black; - border-color: #4a90e2; - background-color: #fff; -} - -button { - padding: 12px 20px; - font-size: 16px; - border-radius: 8px; - border: none; - color: #fff; - background-color: rgba(0, 0, 0, 0.4); - cursor: pointer; - transition: background-color 0.3s ease-in-out; -} - -button:hover { - background-color: rgba(0, 0, 0, 1); -} diff --git a/src/components/LoginPage/NameInput/NameInput.jsx b/src/components/LoginPage/NameInput/NameInput.jsx index 964a843..137b026 100644 --- a/src/components/LoginPage/NameInput/NameInput.jsx +++ b/src/components/LoginPage/NameInput/NameInput.jsx @@ -1,8 +1,8 @@ import React, { useState, useContext, useEffect, useCallback } from 'react'; import { SocketContext } from '../../../App'; import useInput from '../../../hooks/useInput'; -import './NameInput.css'; import useKeyPress from '../../../hooks/useKeyPress'; +import styles from './NameInput.module.css'; const NameInput = ({ isRoomPrivate, roomId }) => { const socket = useContext(SocketContext); @@ -10,11 +10,12 @@ const NameInput = ({ isRoomPrivate, roomId }) => { const password = useInput(''); const [isPasswordWrong, setIsPasswordWrong] = useState(false); - const handleButtonClick = useCallback(() => { + const handleButtonClick = () => { socket.emit('player:login', { name: nickname.value, password: password.value, roomId: roomId }); - }, [socket, nickname.value, password.value, roomId]); + }; useKeyPress('Enter', handleButtonClick); + useEffect(() => { socket.on('error:wrongPassword', () => { setIsPasswordWrong(true); @@ -22,13 +23,13 @@ const NameInput = ({ isRoomPrivate, roomId }) => { }, [socket]); return ( -
- +
+ {isRoomPrivate ? ( ) : null} diff --git a/src/components/LoginPage/NameInput/NameInput.module.css b/src/components/LoginPage/NameInput/NameInput.module.css new file mode 100644 index 0000000..a55980e --- /dev/null +++ b/src/components/LoginPage/NameInput/NameInput.module.css @@ -0,0 +1,20 @@ +.container { + display: flex; + flex-direction: column; + padding: 10px 20px 60px 20px; + width: 300px; + background: radial-gradient(circle, rgba(0, 138, 255, 1) 5%, rgba(9, 9, 121, 1) 81%); + border: 1px solid white; + border-radius: 8px; + margin: 20px; + z-index: 2; +} +.container > button { + margin-top: 5px; + text-align: center; + width: 100px; + align-self: center; +} +.container > input { + margin-top: 10px; +} diff --git a/src/components/LoginPage/NameInput/NameInput.test.js b/src/components/LoginPage/NameInput/NameInput.test.js new file mode 100644 index 0000000..44e2702 --- /dev/null +++ b/src/components/LoginPage/NameInput/NameInput.test.js @@ -0,0 +1,89 @@ +import React from 'react'; +import { render, screen, fireEvent } from '@testing-library/react'; +import '@testing-library/jest-dom'; +import NameInput from './NameInput'; +import { SocketContext } from '../../../App'; + +const mockSocket = { + on: jest.fn(), + emit: jest.fn(), +}; + +describe('NameInput component', () => { + it('should renders password field when room is private', () => { + render( + + + + ); + expect(screen.getByPlaceholderText('Room password')).toBeInTheDocument(); + }); + + it('should not renders password field when room is not private', () => { + render( + + + + ); + expect(screen.queryByPlaceholderText('Room password')).not.toBeInTheDocument(); + }); + + it('should handles input change', () => { + render( + + + + ); + const nicknameInput = screen.getByPlaceholderText('Nickname'); + fireEvent.change(nicknameInput, { target: { value: 'TestName' } }); + expect(nicknameInput.value).toBe('TestName'); + }); + + it('should handles password change', () => { + render( + + + + ); + const passwordInput = screen.getByPlaceholderText('Room password'); + fireEvent.change(passwordInput, { target: { value: 'TestPassword' } }); + expect(passwordInput.value).toBe('TestPassword'); + }); + + it('should handles button click', () => { + render( + + + + ); + const nicknameInput = screen.getByPlaceholderText('Nickname'); + fireEvent.change(nicknameInput, { target: { value: 'TestName' } }); + const passwordInput = screen.getByPlaceholderText('Room password'); + fireEvent.change(passwordInput, { target: { value: 'TestPassword' } }); + const button = screen.getByText('JOIN'); + fireEvent.click(button); + expect(mockSocket.emit).toHaveBeenCalledWith('player:login', { + name: 'TestName', + password: 'TestPassword', + roomId: 123, + }); + }); + + it('should handles Enter key press', () => { + render( + + + + ); + const nicknameInput = screen.getByPlaceholderText('Nickname'); + fireEvent.change(nicknameInput, { target: { value: 'TestName' } }); + const passwordInput = screen.getByPlaceholderText('Room password'); + fireEvent.change(passwordInput, { target: { value: 'TestPassword' } }); + fireEvent.keyDown(nicknameInput, { key: 'Enter' }); + expect(mockSocket.emit).toHaveBeenCalledWith('player:login', { + name: 'TestName', + password: 'TestPassword', + roomId: 123, + }); + }); +}); diff --git a/src/components/LoginPage/ServerList/ServerList.css b/src/components/LoginPage/ServerList/ServerList.css deleted file mode 100644 index 318a008..0000000 --- a/src/components/LoginPage/ServerList/ServerList.css +++ /dev/null @@ -1,51 +0,0 @@ -th { - text-align: left; -} -img { - margin-right: 5px; - width: 20px; - height: 20px; -} -th, -td { - padding: 8px; - text-align: left; - height: 50px; -} -tr { - max-height: 50px; -} - -table { - border-collapse: collapse; - width: 100%; -} -.server-container { - display: flex; - height: 500px; - overflow: scroll; -} -.room-name { - max-width: 150px; - overflow: hidden; -} -/* Firefox */ -* { - scrollbar-width: auto; - scrollbar-color: #ffffff rgba(0, 0, 0, 0.1); -} - -/* Chrome, Edge, and Safari */ -*::-webkit-scrollbar { - background: rgba(0, 0, 0, 0); - width: 10px; -} - -*::-webkit-scrollbar-track { - background: rgba(0, 0, 0, 0); -} - -*::-webkit-scrollbar-thumb { - background-color: #ffffff; - border-radius: 10px; -} diff --git a/src/components/LoginPage/ServerList/ServerList.jsx b/src/components/LoginPage/ServerList/ServerList.jsx deleted file mode 100644 index c6af53e..0000000 --- a/src/components/LoginPage/ServerList/ServerList.jsx +++ /dev/null @@ -1,82 +0,0 @@ -import React, { useContext, useEffect, useState } from 'react'; -import { SocketContext } from '../../../App'; -import lock from '../../../images/login-page/lock.png'; -import refresh from '../../../images/login-page/refresh.png'; -import ReactLoading from 'react-loading'; - -import './ServerList.css'; -import NameInput from '../NameInput/NameInput'; -import Overlay from '../../Overlay/Overlay'; - -const ServerList = () => { - const socket = useContext(SocketContext); - const [rooms, setRooms] = useState([]); - const [joining, setJoining] = useState(false); - const [clickedRoom, setClickedRoom] = useState(null); - useEffect(() => { - socket.emit('room:rooms'); - socket.on('room:rooms', data => { - data = JSON.parse(data); - setRooms(data); - }); - }, [socket]); - - const getRooms = () => { - setRooms(null); - socket.emit('room:rooms'); - }; - - const handleJoinClick = room => { - setClickedRoom(room); - setJoining(true); - }; - - return ( -
-
-

Server List

-
- refresh -
-
-
- {rooms ? ( - - - - - - - - - - - - {rooms.map((room, index) => ( - - - - - - - - ))} - -
Server#/#Status
{room.private ? private : null}{room.name}{`${room.players.length}/4`}{room.isStarted ? 'started' : 'waiting'} - -
- ) : ( -
- -
- )} -
- {joining ? ( - setJoining(false)}> - - - ) : null} -
- ); -}; -export default ServerList; diff --git a/src/components/LoginPage/WindowLayout/WindowLayout.jsx b/src/components/LoginPage/WindowLayout/WindowLayout.jsx new file mode 100644 index 0000000..ee85e85 --- /dev/null +++ b/src/components/LoginPage/WindowLayout/WindowLayout.jsx @@ -0,0 +1,15 @@ +import styles from './WindowLayout.module.css'; + +const WindowLayout = ({ title, titleComponent, content }) => { + return ( +
+
+

{title}

+ {titleComponent} +
+
{content}
+
+ ); +}; + +export default WindowLayout; diff --git a/src/components/LoginPage/LoginPage.css b/src/components/LoginPage/WindowLayout/WindowLayout.module.css similarity index 76% rename from src/components/LoginPage/LoginPage.css rename to src/components/LoginPage/WindowLayout/WindowLayout.module.css index 3376c6f..ca9f74e 100644 --- a/src/components/LoginPage/LoginPage.css +++ b/src/components/LoginPage/WindowLayout/WindowLayout.module.css @@ -1,25 +1,14 @@ -.login-page-container { - display: flex; - flex-direction: row; - - justify-content: center; - align-items: flex-start; - height: 50%; - width: 100%; -} - -.lp-container { +.container { margin: 50px; display: flex; flex-direction: column; align-items: center; justify-content: center; width: 500px; - padding: 20px; color: white; } -.title-container { +.title { display: flex; flex-direction: row; justify-content: center; @@ -34,17 +23,21 @@ text-align: center; } -.title-container > h1 { +.title > h1 { width: 100%; margin: 0; padding: 0; } -.content-container { +.content { display: flex; flex-direction: column; + justify-content: center; + align-items: center; width: 100%; - padding: 10px; + padding-left: 5px; + padding-right: 5px; + padding-top: 10px; background-color: rgba(0, 0, 0, 0.5); box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); border-left: 1px solid black; diff --git a/src/components/LoginPage/WindowLayout/WindowLayout.test.js b/src/components/LoginPage/WindowLayout/WindowLayout.test.js new file mode 100644 index 0000000..2bd1827 --- /dev/null +++ b/src/components/LoginPage/WindowLayout/WindowLayout.test.js @@ -0,0 +1,28 @@ +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import '@testing-library/jest-dom'; +import WindowLayout from './WindowLayout'; + +jest.mock('./WindowLayout', () => ({ title, titleComponent, content }) => ( +
+
{title}
+
{titleComponent}
+
{content}
+
+)); + +describe('WindowLayout component', () => { + it('should render without crashing', () => { + render( + Test Title Component
} + content={
Test Content
} + /> + ); + expect(screen.getByTestId('mocked-window-layout')).toBeInTheDocument(); + expect(screen.getByTestId('mocked-title')).toHaveTextContent('Test Title'); + expect(screen.getByTestId('mocked-title-component')).toHaveTextContent('Test Title Component'); + expect(screen.getByTestId('mocked-content')).toHaveTextContent('Test Content'); + }); +}); diff --git a/src/hooks/useInput.js b/src/hooks/useInput.js index 1144f96..a933dc3 100644 --- a/src/hooks/useInput.js +++ b/src/hooks/useInput.js @@ -1,11 +1,11 @@ import { useState } from 'react'; -export default function useInput({ initialValue }) { +export default function useInput(initialValue = '') { const [value, setValue] = useState(initialValue); const handleChange = e => { setValue(e.target.value); }; return { - value, + value: value, onChange: handleChange, }; } diff --git a/src/hooks/useKeyPress.js b/src/hooks/useKeyPress.js index 072a74c..70e4a19 100644 --- a/src/hooks/useKeyPress.js +++ b/src/hooks/useKeyPress.js @@ -11,5 +11,5 @@ export default function useKeyPress(targetKey, callback) { return () => { window.removeEventListener('keydown', keyPressHandler); }; - }, []); + }, [keyPressHandler]); } diff --git a/src/hooks/useSocketData.js b/src/hooks/useSocketData.js index d33b7dc..527bc84 100644 --- a/src/hooks/useSocketData.js +++ b/src/hooks/useSocketData.js @@ -4,8 +4,14 @@ import { SocketContext } from '../App'; const useSocketData = port => { const socket = useContext(SocketContext); const [data, setData] = useState(null); - socket.on(port, data => { - setData(data); + socket.on(port, res => { + let parsedData; + try { + parsedData = JSON.parse(res); + } catch (error) { + parsedData = res; + } + setData(parsedData); }); return [data, setData]; }; diff --git a/src/index.css b/src/index.css index cae3a75..a7f45a9 100644 --- a/src/index.css +++ b/src/index.css @@ -67,3 +67,70 @@ canvas { grid-column: 1 / span 2; grid-row: 2 / span 2; } + +input, +button { + padding: 0; + border: none; + outline: none; + box-sizing: border-box; +} + +input { + width: 100%; + padding: 12px; + font-size: 16px; + border-radius: 8px; + color: white; + border: 1px solid #ccc; + background-color: rgba(0, 0, 0, 0.2); + transition: border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; +} + +input:disabled { + background-color: black; + color: #999; + border: 1px solid #ddd; +} + +input:focus { + color: black; + border-color: #4a90e2; + background-color: #fff; +} + +button { + padding: 12px 20px; + font-size: 16px; + border-radius: 8px; + border: none; + color: #fff; + background-color: rgba(0, 0, 0, 0.4); + cursor: pointer; + transition: background-color 0.3s ease-in-out; +} + +button:hover { + background-color: rgba(0, 0, 0, 1); +} + +/* Firefox */ +* { + scrollbar-width: auto; + scrollbar-color: #ffffff rgba(0, 0, 0, 0.1); +} + +/* Chrome, Edge, and Safari */ +*::-webkit-scrollbar { + background: rgba(0, 0, 0, 0); + width: 10px; +} + +*::-webkit-scrollbar-track { + background: rgba(0, 0, 0, 0); +} + +*::-webkit-scrollbar-thumb { + background-color: #ffffff; + border-radius: 10px; +} From 97513eac2d6249ec41425e2a0b4db24fe094a155 Mon Sep 17 00:00:00 2001 From: Wenszel Date: Wed, 13 Dec 2023 21:25:19 +0100 Subject: [PATCH 9/9] edited readme --- README.md | 79 +++++++++++++----- backend/handlers/gameHandler.js | 2 +- backend/handlers/handlersFunctions.js | 2 +- backend/handlers/playerHandler.js | 2 +- backend/handlers/roomHandler.js | 2 +- .../roomService.js} | 0 src/images/architecture.png | Bin 0 -> 281159 bytes 7 files changed, 61 insertions(+), 26 deletions(-) rename backend/{controllers/roomController.js => services/roomService.js} (100%) create mode 100644 src/images/architecture.png diff --git a/README.md b/README.md index 8b2cb32..f547e85 100644 --- a/README.md +++ b/README.md @@ -1,31 +1,66 @@ -# Online multiplayer Ludo -## About +#
Online Multiplayer Ludo Game
-**Ludo** is a strategy board game for two to four players, in which the players race their four tokens from start to finish according to the rolls of a single die. Like other cross and circle games, Ludo is derived from the Indian game Pachisi, but simpler. The game and its variations are popular in many countries and under various names. [Read more](https://en.wikipedia.org/wiki/Ludo_(board_game)) -## Interface -![Interface](https://github.com/Wenszel/mern-ludo/blob/main/src/images/readme1.png?raw=true) +\>\> [Play Online here](www.github.com/wenszel/mern-ludo) << + +\>\> [Watch YouTube Video here](www.github.com/wenszel/mern-ludo) << + +## Table of content + +- [About](#about) + +- [Architecture](#architecture) + +- [Key Features and Challenges](#key-features-and-challenges) + +- [Tech Stack](#tech-stack) + +- [Installation](#installation) + +- [Screenshots](#screenshots) + +## About +Ludo Online is a multiplayer web-based implementation of the classic board game Ludo, built using the MERN stack and integrated with SocketIO for real-time communication. +## Architecture +![Interface](https://github.com/Wenszel/mern-ludo/blob/main/src/images/architecture.png?raw=true) +## Tech Stack +Frontend: +![JavaScript](https://img.shields.io/badge/javascript-%23323330.svg?style=for-the-badge&logo=javascript&logoColor=%23F7DF1E) ![React](https://img.shields.io/badge/react-%2320232a.svg?style=for-the-badge&logo=react&logoColor=%2361DAFB) ![React Router](https://img.shields.io/badge/React_Router-CA4245?style=for-the-badge&logo=react-router&logoColor=white) +![CSS3](https://img.shields.io/badge/css3-%231572B6.svg?style=for-the-badge&logo=css3&logoColor=white) ![HTML5](https://img.shields.io/badge/html5-%23E34F26.svg?style=for-the-badge&logo=html5&logoColor=white) ![MUI](https://img.shields.io/badge/MUI-%230081CB.svg?style=for-the-badge&logo=mui&logoColor=white) +Backend: +![MongoDB](https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge&logo=mongodb&logoColor=white) ![Express.js](https://img.shields.io/badge/express.js-%23404d59.svg?style=for-the-badge&logo=express&logoColor=%2361DAFB) ![Socket.io](https://img.shields.io/badge/Socket.io-black?style=for-the-badge&logo=socket.io&badgeColor=010101) ![NodeJS](https://img.shields.io/badge/node.js-6DA55F?style=for-the-badge&logo=node.js&logoColor=white) +Tests: +![Mocha](https://img.shields.io/badge/-mocha-%238D6748?style=for-the-badge&logo=mocha&logoColor=white) ![Jest](https://img.shields.io/badge/-jest-%23C21325?style=for-the-badge&logo=jest&logoColor=white) +Tools: +![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge&logo=docker&logoColor=white) ![AWS](https://img.shields.io/badge/AWS-%23FF9900.svg?style=for-the-badge&logo=amazon-aws&logoColor=white) ![CircleCI](https://img.shields.io/badge/circle%20ci-%23161616.svg?style=for-the-badge&logo=circleci&logoColor=white) ![Git](https://img.shields.io/badge/git-%23F05033.svg?style=for-the-badge&logo=git&logoColor=white) ![Jira](https://img.shields.io/badge/jira-%230A0FFF.svg?style=for-the-badge&logo=jira&logoColor=white) + +## Key Features and Challenges + +- Maintained session consistency with **Express Session** and **MongoDB**. +- Enabled real-time communication via **WebSocket** and **SocketIO**. +- Ensured code reliability with testing using **Mocha**, **Chai**, and **Jest**. +- Hosted in a **Docker** container on **AWS EC2**. +- Established CI/CD using **CircleCI**. + + +## Installation +1. Download this repository +2. Generate your own [mongoDB atlas](https://www.mongodb.com) credential URL. It should looks like this: + +``` +mongodb+srv://madmin:@clustername.mongodb.net/?retryWrites=true&w=majority +``` +3. Add this URL to the /backend/credentials.js file +4. Perform these commands in the main directory: -## Installation -Play this game [here](https://smaga-wiktor-ludo.herokuapp.com) ``` npm i -npm start +npm start cd backend npm i node server.js -``` +``` -## Technologies -### Backend -- Node.js -- Express -- Express-session -- MongoDB, Mongoose -- MongoDB sessions store -- SocketIO -### Frontend -- React -- Axios -- Material UI -- Canvas \ No newline at end of file +## Screenshots + +![Interface](https://github.com/Wenszel/mern-ludo/blob/main/src/images/readme1.png?raw=true) \ No newline at end of file diff --git a/backend/handlers/gameHandler.js b/backend/handlers/gameHandler.js index 9ef9315..b66348a 100644 --- a/backend/handlers/gameHandler.js +++ b/backend/handlers/gameHandler.js @@ -1,4 +1,4 @@ -const { getRoom, updateRoom } = require('../controllers/roomController'); +const { getRoom, updateRoom } = require('../services/roomService'); const { sendToPlayersRolledNumber } = require('../socket/emits'); const { rollDice, isMoveValid } = require('./handlersFunctions'); diff --git a/backend/handlers/handlersFunctions.js b/backend/handlers/handlersFunctions.js index a457d54..74e5ed5 100644 --- a/backend/handlers/handlersFunctions.js +++ b/backend/handlers/handlersFunctions.js @@ -6,7 +6,7 @@ const rollDice = () => { }; const makeRandomMove = async roomId => { - const { updateRoom, getRoom } = require('../controllers/roomController'); + const { updateRoom, getRoom } = require('../services/roomService'); const room = await getRoom(roomId); if (room.rolledNumber === null) { room.rolledNumber = rollDice(); diff --git a/backend/handlers/playerHandler.js b/backend/handlers/playerHandler.js index 825d568..3ff80c9 100644 --- a/backend/handlers/playerHandler.js +++ b/backend/handlers/playerHandler.js @@ -1,4 +1,4 @@ -const { getRoom, updateRoom } = require('../controllers/roomController'); +const { getRoom, updateRoom } = require('../services/roomService'); const { colors } = require('../utils/constants'); module.exports = socket => { diff --git a/backend/handlers/roomHandler.js b/backend/handlers/roomHandler.js index d01b908..e8a638c 100644 --- a/backend/handlers/roomHandler.js +++ b/backend/handlers/roomHandler.js @@ -1,4 +1,4 @@ -const { getRooms, getRoom, updateRoom, createNewRoom } = require('../controllers/roomController'); +const { getRooms, getRoom, updateRoom, createNewRoom } = require('../services/roomService'); const { sendToOnePlayerRooms, sendToOnePlayerData } = require('../socket/emits'); module.exports = socket => { diff --git a/backend/controllers/roomController.js b/backend/services/roomService.js similarity index 100% rename from backend/controllers/roomController.js rename to backend/services/roomService.js diff --git a/src/images/architecture.png b/src/images/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..46bf0a628e28d9c7d43bf6f924e62df29d18edcb GIT binary patch literal 281159 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%0ARjz2?aAVV-pWhC9z_qK= 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�>V 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