diff --git a/package-lock.json b/package-lock.json index 068f429e..09b7f151 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2692,12 +2692,12 @@ "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==" }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", - "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "version": "0.11.12", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.12.tgz", + "integrity": "sha512-NlGesA1usRNn6ctHCZ21M4/dKPgW9Nn1FypRdIKKgZOKzkVV4T1FlK5mBiLhHBCDmEbdQG0idrcXlbZfksJ+RA==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", + "@humanwhocodes/object-schema": "^2.0.0", "debug": "^4.1.1", "minimatch": "^3.0.5" }, @@ -2741,9 +2741,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.0.tgz", + "integrity": "sha512-9S9QrXY2K0L4AGDcSgTi9vgiCcG8VcBv4Mp7/1hDPYoswIy6Z6KO5blYto82BT8M0MZNRWmCFLpCs3HlpYGGdw==", "dev": true }, "node_modules/@isaacs/cliui": { @@ -3314,9 +3314,9 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -3366,15 +3366,15 @@ } }, "node_modules/@mdn/browser-compat-data": { - "version": "5.3.23", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.3.23.tgz", - "integrity": "sha512-UnUu2mvVam9CtEMR2+k7eEsbtrYAecmd3SWRrXGDJrAIddnE6Ln+SmihqNMwHRa64VfNkVFSV/mVphvlwky/Bw==", + "version": "5.3.24", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.3.24.tgz", + "integrity": "sha512-0USwV4F7T4vWGqPoefi0j103sq6Nut2YEXqLz9TUyoj7LBbqXSeWseNRHA7C6LXXm0glrvllKXdeju4oHqIxZw==", "dev": true }, "node_modules/@mui/base": { - "version": "5.0.0-beta.19", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.19.tgz", - "integrity": "sha512-maNBgAscddyPNzFZQUJDF/puxM27Li+NqSBsr/lAP8TLns2VvWS2SoL3OKFOIoRnAMKGY/Ic6Aot6gCYeQnssA==", + "version": "5.0.0-beta.20", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.20.tgz", + "integrity": "sha512-CS2pUuqxST7ch9VNDCklRYDbJ3rru20Tx7na92QvVVKfu3RL4z/QLuVIc8jYGsdCnauMaeUSlFNLAJNb0yXe6w==", "dependencies": { "@babel/runtime": "^7.23.1", "@floating-ui/react-dom": "^2.0.2", @@ -3403,18 +3403,18 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.14.13", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.13.tgz", - "integrity": "sha512-3ZUbzcH4yloLKlV6Y+S0Edn2wef9t+EGHSfEkwVCn8E0ULdshifEFgfEroKRegQifDIwcKS/ofccxuZ8njTAYg==", + "version": "5.14.14", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.14.tgz", + "integrity": "sha512-Rw/xKiTOUgXD8hdKqj60aC6QcGprMipG7ne2giK6Mz7b4PlhL/xog9xLeclY3BxsRLkZQ05egFnIEY1CSibTbw==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" } }, "node_modules/@mui/icons-material": { - "version": "5.14.13", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.14.13.tgz", - "integrity": "sha512-fxKE1UrjI4xVxHe9IAGuVQZrc18dSBJg0P+Sqi2SZmcDUCShmgRq6Jq7l7GduvuMIkOSqAJdNgLtXmtmZkjtLg==", + "version": "5.14.14", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.14.14.tgz", + "integrity": "sha512-vwuaMsKvI7AWTeYqR8wYbpXijuU8PzMAJWRAq2DDIuOZPxjKyHlr8WQ25+azZYkIXtJ7AqnVb1ZmHdEyB4/kug==", "dependencies": { "@babel/runtime": "^7.23.1" }, @@ -3437,14 +3437,14 @@ } }, "node_modules/@mui/material": { - "version": "5.14.13", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.13.tgz", - "integrity": "sha512-iPEFwhoVG789UVsXX4gqd1eJUlcLW1oceqwJYQN8Z4MpcAKfL9Lv3fda65AwG7pQ5lf+d7IbHzm4m48SWZxI2g==", + "version": "5.14.14", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.14.tgz", + "integrity": "sha512-cAmCwAHFQXxb44kWbVFkhKATN8tACgMsFwrXo8ro6WzYW73U/qsR5AcCiJIhCyYYg+gcftfkmNcpRaV3JjhHCg==", "dependencies": { "@babel/runtime": "^7.23.1", - "@mui/base": "5.0.0-beta.19", - "@mui/core-downloads-tracker": "^5.14.13", - "@mui/system": "^5.14.13", + "@mui/base": "5.0.0-beta.20", + "@mui/core-downloads-tracker": "^5.14.14", + "@mui/system": "^5.14.14", "@mui/types": "^7.2.6", "@mui/utils": "^5.14.13", "@types/react-transition-group": "^4.4.7", @@ -3481,9 +3481,9 @@ } }, "node_modules/@mui/private-theming": { - "version": "5.14.13", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.13.tgz", - "integrity": "sha512-5EFqk4tqiSwPguj4NW/6bUf4u1qoUWXy9lrKfNh9H6oAohM+Ijv/7qSxFjnxPGBctj469/Sc5aKAR35ILBKZLQ==", + "version": "5.14.14", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.14.tgz", + "integrity": "sha512-n77au3CQj9uu16hak2Y+rvbGSBaJKxziG/gEbOLVGrAuqZ+ycVSkorCfN6Y/4XgYOpG/xvmuiY3JwhAEOzY3iA==", "dependencies": { "@babel/runtime": "^7.23.1", "@mui/utils": "^5.14.13", @@ -3507,9 +3507,9 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.14.13", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.14.13.tgz", - "integrity": "sha512-1ff/egFQl26hiwcUtCMKAkp4Sgqpm3qIewmXq+GN27fb44lDIACquehMFBuadOjceOFmbIXbayzbA46ZyqFYzA==", + "version": "5.14.14", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.14.14.tgz", + "integrity": "sha512-sF3DS2PVG+cFWvkVHQQaGFpL1h6gSwOW3L91pdxPLQDHDZ5mZ/X0SlXU5XA+WjypoysG4urdAQC7CH/BRvUiqg==", "dependencies": { "@babel/runtime": "^7.23.1", "@emotion/cache": "^11.11.0", @@ -3564,12 +3564,12 @@ } }, "node_modules/@mui/system": { - "version": "5.14.13", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.13.tgz", - "integrity": "sha512-+5+Dx50lG4csbx2sGjrKLozXQJeCpJ4dIBZolyFLkZ+XphD1keQWouLUvJkPQ3MSglLLKuD37pp52YjMncZMEQ==", + "version": "5.14.14", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.14.tgz", + "integrity": "sha512-y4InFmCgGGWXnz+iK4jRTWVikY0HgYnABjz4wgiUgEa2W1H8M4ow+27BegExUWPkj4TWthQ2qG9FOGSMtI+PKA==", "dependencies": { "@babel/runtime": "^7.23.1", - "@mui/private-theming": "^5.14.13", + "@mui/private-theming": "^5.14.14", "@mui/styled-engine": "^5.14.13", "@mui/types": "^7.2.6", "@mui/utils": "^5.14.13", @@ -3616,9 +3616,9 @@ } }, "node_modules/@mui/utils": { - "version": "5.14.13", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.13.tgz", - "integrity": "sha512-2AFpyXWw7uDCIqRu7eU2i/EplZtks5LAMzQvIhC79sPV9IhOZU2qwOWVnPtdctRXiQJOAaXulg+A37pfhEueQw==", + "version": "5.14.14", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.14.tgz", + "integrity": "sha512-3AKp8uksje5sRfVrtgG9Q/2TBsHWVBUtA0NaXliZqGcXo8J+A+Agp0qUW2rJ+ivgPWTCCubz9FZVT2IQZ3bGsw==", "dependencies": { "@babel/runtime": "^7.23.1", "@types/prop-types": "^15.7.7", @@ -3889,9 +3889,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.9.0.tgz", - "integrity": "sha512-bV63itrKBC0zdT27qYm6SDZHlkXwFL1xMBuhkn+X7l0+IIhNaH5wuuvZKp6eKhCD4KFhujhfhCT1YxXW6esUIA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.10.0.tgz", + "integrity": "sha512-Lm+fYpMfZoEucJ7cMxgt4dYt8jLfbpwRCzAjm9UgSLOkmlqo9gupxt6YX3DY0Fk155NT9l17d/ydi+964uS9Lw==", "engines": { "node": ">=14.0.0" } @@ -4396,15 +4396,15 @@ "dev": true }, "node_modules/@types/aria-query": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.2.tgz", - "integrity": "sha512-PHKZuMN+K5qgKIWhBodXzQslTo5P+K/6LqeKXS6O/4liIDdZqaX5RXrCK++LAw+y/nptN48YmUMFiQHRSWYwtQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.3.tgz", + "integrity": "sha512-0Z6Tr7wjKJIk4OUEjVUQMtyunLDy339vcMaj38Kpj6jM2OE1p3S4kXExKZ7a3uXQAPCoy3sbrP1wibDKaf39oA==", "dev": true }, "node_modules/@types/babel__core": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.2.tgz", - "integrity": "sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==", + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.3.tgz", + "integrity": "sha512-54fjTSeSHwfan8AyHWrKbfBWiEUrNTZsUwPTDSNaaP1QDQIZbeNUg3a59E9D+375MzUw/x1vx2/0F5LBz+AeYA==", "dev": true, "dependencies": { "@babel/parser": "^7.20.7", @@ -4415,18 +4415,18 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.5", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.5.tgz", - "integrity": "sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==", + "version": "7.6.6", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.6.tgz", + "integrity": "sha512-66BXMKb/sUWbMdBNdMvajU7i/44RkrA3z/Yt1c7R5xejt8qh84iU54yUWCtm0QwGJlDcf/gg4zd/x4mpLAlb/w==", "dev": true, "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.2.tgz", - "integrity": "sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.3.tgz", + "integrity": "sha512-ciwyCLeuRfxboZ4isgdNZi/tkt06m8Tw6uGbBSBgWrnnZGNXiEyM27xc/PjXGQLqlZ6ylbgHMnm7ccF9tCkOeQ==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -4434,18 +4434,18 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.2.tgz", - "integrity": "sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==", + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.3.tgz", + "integrity": "sha512-Lsh766rGEFbaxMIDH7Qa+Yha8cMVI3qAK6CHt3OR0YfxOIn5Z54iHiyDRycHrBqeIiqGa20Kpsv1cavfBKkRSw==", "dev": true, "dependencies": { "@babel/types": "^7.20.7" } }, "node_modules/@types/body-parser": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.3.tgz", - "integrity": "sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==", + "version": "1.19.4", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.4.tgz", + "integrity": "sha512-N7UDG0/xiPQa2D/XrVJXjkWbpqHCd2sBaB32ggRF2l83RhPfamgKGF8gwwqyksS95qUS5ZYF9aF+lLPRlwI2UA==", "dev": true, "dependencies": { "@types/connect": "*", @@ -4453,9 +4453,9 @@ } }, "node_modules/@types/bonjour": { - "version": "3.5.11", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.11.tgz", - "integrity": "sha512-isGhjmBtLIxdHBDl2xGwUzEM8AOyOvWsADWq7rqirdi/ZQoHnLWErHvsThcEzTX8juDRiZtzp2Qkv5bgNh6mAg==", + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.12.tgz", + "integrity": "sha512-ky0kWSqXVxSqgqJvPIkgFkcn4C8MnRog308Ou8xBBIVo39OmUFy+jqNe0nPwLCDFxUpmT9EvT91YzOJgkDRcFg==", "dev": true, "dependencies": { "@types/node": "*" @@ -4474,18 +4474,18 @@ } }, "node_modules/@types/connect": { - "version": "3.4.36", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", - "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", + "version": "3.4.37", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.37.tgz", + "integrity": "sha512-zBUSRqkfZ59OcwXon4HVxhx5oWCJmc0OtBTK05M+p0dYjgN6iTwIL2T/WbsQZrEsdnwaF9cWQ+azOnpPvIqY3Q==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.1.tgz", - "integrity": "sha512-iaQslNbARe8fctL5Lk+DsmgWOM83lM+7FzP0eQUJs1jd3kBE8NWqBTIT2S8SqQOJjxvt2eyIjpOuYeRXq2AdMw==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.2.tgz", + "integrity": "sha512-gX2j9x+NzSh4zOhnRPSdPPmTepS4DfxES0AvIFv3jGv5QyeAJf6u6dY5/BAoAJU9Qq1uTvwOku8SSC2GnCRl6Q==", "dev": true, "dependencies": { "@types/express-serve-static-core": "*", @@ -4493,18 +4493,18 @@ } }, "node_modules/@types/debug": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.9.tgz", - "integrity": "sha512-8Hz50m2eoS56ldRlepxSBa6PWEVCtzUo/92HgLc2qTMnotJNIm7xP+UZhyWoYsyOdd5dxZ+NZLb24rsKyFs2ow==", + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.10.tgz", + "integrity": "sha512-tOSCru6s732pofZ+sMv9o4o3Zc+Sa8l3bxd/tweTQudFn06vAzb13ZX46Zi6m6EJ+RUbRTHvgQJ1gBtSgkaUYA==", "dev": true, "dependencies": { "@types/ms": "*" } }, "node_modules/@types/eslint": { - "version": "8.44.4", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.4.tgz", - "integrity": "sha512-lOzjyfY/D9QR4hY9oblZ76B90MYTB3RrQ4z2vBIJKj9ROCRqdkYl2gSUx1x1a4IWPjKJZLL4Aw1Zfay7eMnmnA==", + "version": "8.44.6", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.6.tgz", + "integrity": "sha512-P6bY56TVmX8y9J87jHNgQh43h6VVU+6H7oN7hgvivV81K2XY8qJZ5vqPy/HdUoVIelii2kChYVzQanlswPWVFw==", "dev": true, "dependencies": { "@types/estree": "*", @@ -4512,9 +4512,9 @@ } }, "node_modules/@types/eslint-scope": { - "version": "3.7.5", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.5.tgz", - "integrity": "sha512-JNvhIEyxVW6EoMIFIvj93ZOywYFatlpu9deeH6eSx6PE3WHYvHaQtmHmQeNw7aA81bYGBPPQqdtBm6b1SsQMmA==", + "version": "3.7.6", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.6.tgz", + "integrity": "sha512-zfM4ipmxVKWdxtDaJ3MP3pBurDXOCoyjvlpE3u6Qzrmw4BPbfm4/ambIeTk/r/J0iq/+2/xp0Fmt+gFvXJY2PQ==", "dev": true, "dependencies": { "@types/eslint": "*", @@ -4522,15 +4522,15 @@ } }, "node_modules/@types/estree": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz", - "integrity": "sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.3.tgz", + "integrity": "sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ==", "dev": true }, "node_modules/@types/express": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.19.tgz", - "integrity": "sha512-UtOfBtzN9OvpZPPbnnYunfjM7XCI4jyk1NvnFhTVz5krYAnW4o5DCoIekvms+8ApqhB4+9wSge1kBijdfTSmfg==", + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.20.tgz", + "integrity": "sha512-rOaqlkgEvOW495xErXMsmyX3WKBInbhG5eqojXYi3cGUaLoRDlXa5d52fkfWZT963AZ3v2eZ4MbKE6WpDAGVsw==", "dev": true, "dependencies": { "@types/body-parser": "*", @@ -4540,9 +4540,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.37", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.37.tgz", - "integrity": "sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg==", + "version": "4.17.39", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.39.tgz", + "integrity": "sha512-BiEUfAiGCOllomsRAZOiMFP7LAnrifHpt56pc4Z7l9K6ACyN06Ns1JLMBxwkfLOjJRlSf06NwWsT7yzfpaVpyQ==", "dev": true, "dependencies": { "@types/node": "*", @@ -4561,18 +4561,18 @@ } }, "node_modules/@types/graceful-fs": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.7.tgz", - "integrity": "sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==", + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.8.tgz", + "integrity": "sha512-NhRH7YzWq8WiNKVavKPBmtLYZHxNY19Hh+az28O/phfp68CF45pMFud+ZzJ8ewnxnC5smIdF3dqFeiSUQ5I+pw==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.3.tgz", - "integrity": "sha512-Wny3a2UXn5FEA1l7gc6BbpoV5mD1XijZqgkp4TRgDCDL5r3B5ieOFGUX5h3n78Tr1MEG7BfvoM8qeztdvNU0fw==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.4.tgz", + "integrity": "sha512-ZchYkbieA+7tnxwX/SCBySx9WwvWR8TaP5tb2jRAzwvLb/rWchGw3v0w3pqUbUvj0GCwW2Xz/AVPSk6kUGctXQ==", "dependencies": { "@types/react": "*", "hoist-non-react-statics": "^3.3.0" @@ -4585,54 +4585,54 @@ "dev": true }, "node_modules/@types/http-cache-semantics": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.2.tgz", - "integrity": "sha512-FD+nQWA2zJjh4L9+pFXqWOi0Hs1ryBCfI+985NjluQ1p8EYtoLvjLOKidXBtZ4/IcxDX4o8/E8qDS3540tNliw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz", + "integrity": "sha512-V46MYLFp08Wf2mmaBhvgjStM3tPa+2GAdy/iqoX+noX1//zje2x4XmrIU0cAwyClATsTmahbtoQ2EwP7I5WSiA==", "dev": true }, "node_modules/@types/http-errors": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.2.tgz", - "integrity": "sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.3.tgz", + "integrity": "sha512-pP0P/9BnCj1OVvQR2lF41EkDG/lWWnDyA203b/4Fmi2eTyORnBtcDoKDwjWQthELrBvWkMOrvSOnZ8OVlW6tXA==", "dev": true }, "node_modules/@types/http-proxy": { - "version": "1.17.12", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.12.tgz", - "integrity": "sha512-kQtujO08dVtQ2wXAuSFfk9ASy3sug4+ogFR8Kd8UgP8PEuc1/G/8yjYRmp//PcDNJEUKOza/MrQu15bouEUCiw==", + "version": "1.17.13", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.13.tgz", + "integrity": "sha512-GkhdWcMNiR5QSQRYnJ+/oXzu0+7JJEPC8vkWXK351BkhjraZF+1W13CUYARUvX9+NqIU2n6YHA4iwywsc/M6Sw==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-zONci81DZYCZjiLe0r6equvZut0b+dBRPBN5kBDjsONnutYNtJMoWQ9uR2RkL1gLG9NMTzvf+29e5RFfPbeKhQ==", "dev": true }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.2.tgz", + "integrity": "sha512-8toY6FgdltSdONav1XtUHl4LN1yTmLza+EuDazb/fEmRNCwjyqNVIQWs2IfC74IqjHkREs/nQ2FWq5kZU9IC0w==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.3.tgz", + "integrity": "sha512-1nESsePMBlf0RPRffLZi5ujYh7IH1BWL4y9pr+Bn3cJBdxz+RTP8bUFljLz9HvzhhOSWKdyBZ4DIivdL6rvgZg==", "dev": true, "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/jest": { - "version": "29.5.5", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.5.tgz", - "integrity": "sha512-ebylz2hnsWR9mYvmBFbXJXr+33UPc4+ZdxyDXh5w0FlPBTfCVN3wPL+kuOiQt3xvrK419v7XWeAs+AeOksafXg==", + "version": "29.5.6", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.6.tgz", + "integrity": "sha512-/t9NnzkOpXb4Nfvg17ieHE6EeSjDS2SGSpNYfoLbUAeL/EOueU/RSdOWFpfQTXBEM7BguYW1XQ0EbM+6RlIh6w==", "dev": true, "dependencies": { "expect": "^29.0.0", @@ -4677,9 +4677,9 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", - "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", + "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", "dev": true }, "node_modules/@types/json5": { @@ -4698,15 +4698,15 @@ } }, "node_modules/@types/mime": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.3.tgz", - "integrity": "sha512-Ys+/St+2VF4+xuY6+kDIXGxbNRO0mesVg0bbxEfB97Od1Vjpjx9KD1qxs64Gcb3CWPirk9Xe+PT4YiiHQ9T+eg==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.4.tgz", + "integrity": "sha512-1Gjee59G25MrQGk8bsNvC6fxNiRgUlGn2wlhGf95a59DrprnnHk80FIMMFG9XHMdrfsuA119ht06QPDXA1Z7tw==", "dev": true }, "node_modules/@types/ms": { - "version": "0.7.32", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.32.tgz", - "integrity": "sha512-xPSg0jm4mqgEkNhowKgZFBNtwoEwF6gJ4Dhww+GFpm3IgtNseHQZ5IqdNwnquZEoANxyDAKDRAdVo4Z72VvD/g==", + "version": "0.7.33", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.33.tgz", + "integrity": "sha512-AuHIyzR5Hea7ij0P9q7vx7xu4z0C28ucwjAZC0ja7JhINyCnOw8/DnvAPQQ9TfOlCtZAmCERKQX9+o1mgQhuOQ==", "dev": true }, "node_modules/@types/node": { @@ -4716,14 +4716,14 @@ "dev": true }, "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.1.tgz", + "integrity": "sha512-3YmXzzPAdOTVljVMkTMBdBEvlOLg2cDQaDhnnhT3nT9uDbnJzjWhKlzb+desT12Y7tGqaN6d+AbozcKzyL36Ng==" }, "node_modules/@types/plist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.3.tgz", - "integrity": "sha512-DXkBoKc7jwUR0p439icInmXXMJNhoImdpOrrgA5/nDFK7LVtcJ9MyQNKhJEKpEztnHGWnNWMWLOIR62By0Ln0A==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.4.tgz", + "integrity": "sha512-pTa9xUFQFM9WJGSWHajYNljD+DbVylE1q9IweK1LBhUYJdJ28YNU8j3KZ4Q1Qw+cSl4+QLLLOVmqNjhhvVO8fA==", "dev": true, "optional": true, "dependencies": { @@ -4732,26 +4732,26 @@ } }, "node_modules/@types/prop-types": { - "version": "15.7.8", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.8.tgz", - "integrity": "sha512-kMpQpfZKSCBqltAJwskgePRaYRFukDkm1oItcAbC3gNELR20XIBcN9VRgg4+m8DKsTfkWeA4m4Imp4DDuWy7FQ==" + "version": "15.7.9", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.9.tgz", + "integrity": "sha512-n1yyPsugYNSmHgxDFjicaI2+gCNjsBck8UX9kuofAKlc0h1bL+20oSF72KeNaW2DUlesbEVCFgyV2dPGTiY42g==" }, "node_modules/@types/qs": { - "version": "6.9.8", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz", - "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==", + "version": "6.9.9", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.9.tgz", + "integrity": "sha512-wYLxw35euwqGvTDx6zfY1vokBFnsK0HNrzc6xNHchxfO2hpuRg74GbkEW7e3sSmPvj0TjCDT1VCa6OtHXnubsg==", "dev": true }, "node_modules/@types/range-parser": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.5.tgz", - "integrity": "sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.6.tgz", + "integrity": "sha512-+0autS93xyXizIYiyL02FCY8N+KkKPhILhcUSA276HxzreZ16kl+cmwvV2qAM/PuCCwPXzOXOWhiPcw20uSFcA==", "dev": true }, "node_modules/@types/react": { - "version": "18.2.28", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.28.tgz", - "integrity": "sha512-ad4aa/RaaJS3hyGz0BGegdnSRXQBkd1CCYDCdNjBPg90UUpLgo+WlJqb9fMYUxtehmzF3PJaTWqRZjko6BRzBg==", + "version": "18.2.30", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.30.tgz", + "integrity": "sha512-OfqdJnDsSo4UNw0bqAjFCuBpLYQM7wvZidz0hVxHRjrEkzRlvZL1pJVyOSY55HMiKvRNEo9DUBRuEl7FNlJ/Vg==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -4759,18 +4759,18 @@ } }, "node_modules/@types/react-dom": { - "version": "18.2.13", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.13.tgz", - "integrity": "sha512-eJIUv7rPP+EC45uNYp/ThhSpE16k22VJUknt5OLoH9tbXoi8bMhwLf5xRuWMywamNbWzhrSmU7IBJfPup1+3fw==", + "version": "18.2.14", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.14.tgz", + "integrity": "sha512-V835xgdSVmyQmI1KLV2BEIUgqEuinxp9O4G6g3FqO/SqLac049E53aysv0oEFD2kHfejeKU+ZqL2bcFWj9gLAQ==", "dev": true, "dependencies": { "@types/react": "*" } }, "node_modules/@types/react-redux": { - "version": "7.1.27", - "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.27.tgz", - "integrity": "sha512-xj7d9z32p1K/eBmO+OEy+qfaWXtcPlN8f1Xk3Ne0p/ZRQ867RI5bQ/bpBtxbqU1AHNhKJSgGvld/P2myU2uYkg==", + "version": "7.1.28", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.28.tgz", + "integrity": "sha512-EQr7cChVzVUuqbA+J8ArWK1H0hLAHKOs21SIMrskKZ3nHNeE+LFYA+IsoZGhVOT8Ktjn3M20v4rnZKN3fLbypw==", "dependencies": { "@types/hoist-non-react-statics": "^3.3.0", "@types/react": "*", @@ -4779,26 +4779,26 @@ } }, "node_modules/@types/react-test-renderer": { - "version": "18.0.3", - "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-18.0.3.tgz", - "integrity": "sha512-4wcNLnY6nIT+L6g94CpzL4CXX2P18JvKPU9CDlaHr3DnbP3GiaQLhDotJqjWlVqOcE4UhLRjp0MtxqwuNKONnA==", + "version": "18.0.5", + "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-18.0.5.tgz", + "integrity": "sha512-PsnmF4Hpi61PTRX+dTxkjgDdtZ09kFFgPXczoF+yBfOVxn7xBLPvKP1BUrSasYHmerj33rhoJuvpIMsJuyRqHw==", "dev": true, "dependencies": { "@types/react": "*" } }, "node_modules/@types/react-transition-group": { - "version": "4.4.7", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.7.tgz", - "integrity": "sha512-ICCyBl5mvyqYp8Qeq9B5G/fyBSRC0zx3XM3sCC6KkcMsNeAHqXBKkmat4GqdJET5jtYUpZXrxI5flve5qhi2Eg==", + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.8.tgz", + "integrity": "sha512-QmQ22q+Pb+HQSn04NL3HtrqHwYMf4h3QKArOy5F8U5nEVMaihBs3SR10WiOM1iwPz5jIo8x/u11al+iEGZZrvg==", "dependencies": { "@types/react": "*" } }, "node_modules/@types/responselike": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.1.tgz", - "integrity": "sha512-TiGnitEDxj2X0j+98Eqk5lv/Cij8oHd32bU4D/Yw6AOq7vvTk0gSD2GPj0G/HkvhMoVsdlhYF4yqqlyPBTM6Sg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/4YQT5Kp6HxUDb4yhRkm0bJ7TbjvTddqX7PZ5hz6qV3pxSo72f/6YPRo+Mu2DU307tm9IioO69l7uAwn5XNcFA==", "dev": true, "dependencies": { "@types/node": "*" @@ -4811,19 +4811,19 @@ "dev": true }, "node_modules/@types/scheduler": { - "version": "0.16.4", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.4.tgz", - "integrity": "sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ==" + "version": "0.16.5", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.5.tgz", + "integrity": "sha512-s/FPdYRmZR8SjLWGMCuax7r3qCWQw9QKHzXVukAuuIJkXkDRwp+Pu5LMIVFi0Fxbav35WURicYr8u1QsoybnQw==" }, "node_modules/@types/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==" + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==" }, "node_modules/@types/send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.2.tgz", - "integrity": "sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw==", + "version": "0.17.3", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.3.tgz", + "integrity": "sha512-/7fKxvKUoETxjFUsuFlPB9YndePpxxRAOfGC/yJdc9kTjTeP5kRCTzfnE8kPUKCeyiyIZu0YQ76s50hCedI1ug==", "dev": true, "dependencies": { "@types/mime": "^1", @@ -4831,18 +4831,18 @@ } }, "node_modules/@types/serve-index": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.2.tgz", - "integrity": "sha512-asaEIoc6J+DbBKXtO7p2shWUpKacZOoMBEGBgPG91P8xhO53ohzHWGCs4ScZo5pQMf5ukQzVT9fhX1WzpHihig==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.3.tgz", + "integrity": "sha512-4KG+yMEuvDPRrYq5fyVm/I2uqAJSAwZK9VSa+Zf+zUq9/oxSSvy3kkIqyL+jjStv6UCVi8/Aho0NHtB1Fwosrg==", "dev": true, "dependencies": { "@types/express": "*" } }, "node_modules/@types/serve-static": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.3.tgz", - "integrity": "sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg==", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.4.tgz", + "integrity": "sha512-aqqNfs1XTF0HDrFdlY//+SGUxmdSUbjeRXb5iaZc3x0/vMbYmdw9qvOgHWOyyLFxSSRnUuP5+724zBgfw8/WAw==", "dev": true, "dependencies": { "@types/http-errors": "*", @@ -4851,18 +4851,18 @@ } }, "node_modules/@types/sockjs": { - "version": "0.3.34", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.34.tgz", - "integrity": "sha512-R+n7qBFnm/6jinlteC9DBL5dGiDGjWAvjo4viUanpnc/dG1y7uDoacXPIQ/PQEg1fI912SMHIa014ZjRpvDw4g==", + "version": "0.3.35", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.35.tgz", + "integrity": "sha512-tIF57KB+ZvOBpAQwSaACfEu7htponHXaFzP7RfKYgsOS0NoYnn+9+jzp7bbq4fWerizI3dTB4NfAZoyeQKWJLw==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.2.tgz", + "integrity": "sha512-g7CK9nHdwjK2n0ymT2CW698FuWJRIx+RP6embAzZ2Qi8/ilIrA1Imt2LVSeHUzKvpoi7BhmmQcXz95eS0f2JXw==", "dev": true }, "node_modules/@types/terser-webpack-plugin": { @@ -4885,22 +4885,22 @@ } }, "node_modules/@types/tough-cookie": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.3.tgz", - "integrity": "sha512-THo502dA5PzG/sfQH+42Lw3fvmYkceefOspdCwpHRul8ik2Jv1K8I5OZz1AT3/rs46kwgMCe9bSBmDLYkkOMGg==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.4.tgz", + "integrity": "sha512-95Sfz4nvMAb0Nl9DTxN3j64adfwfbBPEYq14VN7zT5J5O2M9V6iZMIIQU1U+pJyl9agHYHNCqhCXgyEtIRRa5A==", "dev": true }, "node_modules/@types/verror": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.7.tgz", - "integrity": "sha512-4c5F4T0qMSoXq1KHx7WV1FMuD2h0xdaFoJ7HSVWUfQ8w5YbqCwLOA8K7/yy1I+Txuzvm417dnPUaLmqazX1F7g==", + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.8.tgz", + "integrity": "sha512-YhUhnxRYs/NiVUbIs3F/EzviDP/NZCEAE2Mx5DUqLdldUmphOhFCVh7Kc+7zlYEExM0P8dzfbJi0yRlNb2Bw5g==", "dev": true, "optional": true }, "node_modules/@types/webpack-bundle-analyzer": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/@types/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.6.1.tgz", - "integrity": "sha512-MQ9GBzu8N7bsjmE9xtWe9JUrRUsPljKxS8fd5EdSIU/x+/U0Ga8f0OsVJZTX1yWF87xZSt0Ai1Iaiwi+Gq+ugA==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@types/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.6.2.tgz", + "integrity": "sha512-QmT3hL44dlvtH3BHroev8PZ98YaGoU9q8bcNWN+Oq9TbuVB+rCcknC/l6DmPjNPs3CvxOe2grxnS9coS6gQu8A==", "dev": true, "dependencies": { "@types/node": "*", @@ -4909,33 +4909,33 @@ } }, "node_modules/@types/ws": { - "version": "8.5.7", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.7.tgz", - "integrity": "sha512-6UrLjiDUvn40CMrAubXuIVtj2PEfKDffJS7ychvnPU44j+KVeXmdHHTgqcM/dxLUTHxlXHiFM8Skmb8ozGdTnQ==", + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.8.tgz", + "integrity": "sha512-flUksGIQCnJd6sZ1l5dqCEG/ksaoAg/eUwiLAGTJQcfgvZJKF++Ta4bJA6A5aPSJmsr+xlseHn4KLgVlNnvPTg==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { - "version": "17.0.28", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.28.tgz", - "integrity": "sha512-N3e3fkS86hNhtk6BEnc0rj3zcehaxx8QWhCROJkqpl5Zaoi7nAic3jH8q94jVD3zu5LGk+PUB6KAiDmimYOEQw==", + "version": "17.0.29", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.29.tgz", + "integrity": "sha512-nacjqA3ee9zRF/++a3FUY1suHTFKZeHba2n8WeDw9cCVdmzmHpIxyzOJBcpHvvEmS8E9KqWlSnWHUkOrkhWcvA==", "dev": true, "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==", + "version": "21.0.2", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.2.tgz", + "integrity": "sha512-5qcvofLPbfjmBfKaLfj/+f+Sbd6pN4zl7w7VSVI5uz7m9QZTuB2aZAa2uo1wHFBNN2x6g/SoTkXmd8mQnQF2Cw==", "dev": true }, "node_modules/@types/yauzl": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.1.tgz", - "integrity": "sha512-CHzgNU3qYBnp/O4S3yv2tXPlvMTq0YWSTVg2/JYLqWZGHwwgJGAwd00poay/11asPq8wLFwHzubyInqHIFmmiw==", + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.2.tgz", + "integrity": "sha512-Km7XAtUIduROw7QPgvcft0lIupeG8a8rdKL8RiSyKvlE7dYY31fEn41HVuQsRFDuROA8tA4K2UVL+WdfFmErBA==", "dev": true, "optional": true, "dependencies": { @@ -6763,9 +6763,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001549", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001549.tgz", - "integrity": "sha512-qRp48dPYSCYaP+KurZLhDYdVE+yEyht/3NlmcJgVQ2VMGt6JL36ndQ/7rgspdZsJuxDPFIo/OzBT2+GmIJ53BA==", + "version": "1.0.30001551", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001551.tgz", + "integrity": "sha512-vtBAez47BoGMMzlbYhfXrMV1kvRF2WP/lqiMuDu1Sb4EE4LKEgjopFDSRtZfdVnslNRpOqV/woE+Xgrwj6VQlg==", "funding": [ { "type": "opencollective", @@ -7184,9 +7184,9 @@ "dev": true }, "node_modules/concurrently": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.1.tgz", - "integrity": "sha512-nVraf3aXOpIcNud5pB9M82p1tynmZkrSGQ1p6X/VY8cJ+2LMVqAgXsJxYYefACSHbTYlm92O1xuhdGTjwoEvbQ==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz", + "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==", "dev": true, "dependencies": { "chalk": "^4.1.2", @@ -8642,9 +8642,9 @@ } }, "node_modules/electron": { - "version": "25.9.1", - "resolved": "https://registry.npmjs.org/electron/-/electron-25.9.1.tgz", - "integrity": "sha512-Uo/Fh7igjoUXA/f90iTATZJesQEArVL1uLA672JefNWTLymdKSZkJKiCciu/Xnd0TS6qvdIOUGuJFSTQnKskXQ==", + "version": "25.9.2", + "resolved": "https://registry.npmjs.org/electron/-/electron-25.9.2.tgz", + "integrity": "sha512-hVBN5rsrL99BKNHvzMeYy2PkAmewuIobu4U3o3EzVz4MDoLmMfW4yTH5GZ4RbJrpokoEky5IzGtRR/ggPzL6Fw==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -8806,9 +8806,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.554", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.554.tgz", - "integrity": "sha512-Q0umzPJjfBrrj8unkONTgbKQXzXRrH7sVV7D9ea2yBV3Oaogz991yhbpfvo2LMNkJItmruXTEzVpP9cp7vaIiQ==" + "version": "1.4.560", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.560.tgz", + "integrity": "sha512-HhJH/pWAxTaPZl7R3mJ6gCd8MfjQdil9RAWk84qHaLsmPTadydfAmq0a1x8kZtOGQ6pZrWhOYj5uZ8I0meZIgg==" }, "node_modules/electron-updater": { "version": "5.3.0", @@ -8852,9 +8852,9 @@ } }, "node_modules/electron/node_modules/@types/node": { - "version": "18.18.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.5.tgz", - "integrity": "sha512-4slmbtwV59ZxitY4ixUZdy1uRLf9eSIvBWPQxNjhHYWEtn0FryfKpyS2cvADYXTayWdKEIsJengncrVvkI4I6A==", + "version": "18.18.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.6.tgz", + "integrity": "sha512-wf3Vz+jCmOQ2HV1YUJuCWdL64adYxumkrxtc+H1VUQlnQI04+5HtH+qZCOE21lBE7gIrt+CwX2Wv8Acrw5Ak6w==", "dev": true }, "node_modules/electronmon": { @@ -9368,16 +9368,16 @@ } }, "node_modules/eslint-config-erb/node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.5.tgz", - "integrity": "sha512-JhtAwTRhOUcP96D0Y6KYnwig/MRQbOoLGXTON2+LlyB/N35SP9j1boai2zzwXb7ypKELXMx3DVk9UTaEq1vHEw==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.8.0.tgz", + "integrity": "sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.7.5", - "@typescript-eslint/type-utils": "6.7.5", - "@typescript-eslint/utils": "6.7.5", - "@typescript-eslint/visitor-keys": "6.7.5", + "@typescript-eslint/scope-manager": "6.8.0", + "@typescript-eslint/type-utils": "6.8.0", + "@typescript-eslint/utils": "6.8.0", + "@typescript-eslint/visitor-keys": "6.8.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -9403,15 +9403,15 @@ } }, "node_modules/eslint-config-erb/node_modules/@typescript-eslint/parser": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.5.tgz", - "integrity": "sha512-bIZVSGx2UME/lmhLcjdVc7ePBwn7CLqKarUBL4me1C5feOd663liTGjMBGVcGr+BhnSLeP4SgwdvNnnkbIdkCw==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.8.0.tgz", + "integrity": "sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.7.5", - "@typescript-eslint/types": "6.7.5", - "@typescript-eslint/typescript-estree": "6.7.5", - "@typescript-eslint/visitor-keys": "6.7.5", + "@typescript-eslint/scope-manager": "6.8.0", + "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/typescript-estree": "6.8.0", + "@typescript-eslint/visitor-keys": "6.8.0", "debug": "^4.3.4" }, "engines": { @@ -9431,13 +9431,13 @@ } }, "node_modules/eslint-config-erb/node_modules/@typescript-eslint/scope-manager": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.5.tgz", - "integrity": "sha512-GAlk3eQIwWOJeb9F7MKQ6Jbah/vx1zETSDw8likab/eFcqkjSD7BI75SDAeC5N2L0MmConMoPvTsmkrg71+B1A==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz", + "integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.5", - "@typescript-eslint/visitor-keys": "6.7.5" + "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/visitor-keys": "6.8.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -9448,13 +9448,13 @@ } }, "node_modules/eslint-config-erb/node_modules/@typescript-eslint/type-utils": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.5.tgz", - "integrity": "sha512-Gs0qos5wqxnQrvpYv+pf3XfcRXW6jiAn9zE/K+DlmYf6FcpxeNYN0AIETaPR7rHO4K2UY+D0CIbDP9Ut0U4m1g==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.8.0.tgz", + "integrity": "sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.7.5", - "@typescript-eslint/utils": "6.7.5", + "@typescript-eslint/typescript-estree": "6.8.0", + "@typescript-eslint/utils": "6.8.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -9475,9 +9475,9 @@ } }, "node_modules/eslint-config-erb/node_modules/@typescript-eslint/types": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.5.tgz", - "integrity": "sha512-WboQBlOXtdj1tDFPyIthpKrUb+kZf2VroLZhxKa/VlwLlLyqv/PwUNgL30BlTVZV1Wu4Asu2mMYPqarSO4L5ZQ==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.8.0.tgz", + "integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -9488,13 +9488,13 @@ } }, "node_modules/eslint-config-erb/node_modules/@typescript-eslint/typescript-estree": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.5.tgz", - "integrity": "sha512-NhJiJ4KdtwBIxrKl0BqG1Ur+uw7FiOnOThcYx9DpOGJ/Abc9z2xNzLeirCG02Ig3vkvrc2qFLmYSSsaITbKjlg==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz", + "integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.5", - "@typescript-eslint/visitor-keys": "6.7.5", + "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/visitor-keys": "6.8.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9515,17 +9515,17 @@ } }, "node_modules/eslint-config-erb/node_modules/@typescript-eslint/utils": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.5.tgz", - "integrity": "sha512-pfRRrH20thJbzPPlPc4j0UNGvH1PjPlhlCMq4Yx7EGjV7lvEeGX0U6MJYe8+SyFutWgSHsdbJ3BXzZccYggezA==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.8.0.tgz", + "integrity": "sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.7.5", - "@typescript-eslint/types": "6.7.5", - "@typescript-eslint/typescript-estree": "6.7.5", + "@typescript-eslint/scope-manager": "6.8.0", + "@typescript-eslint/types": "6.8.0", + "@typescript-eslint/typescript-estree": "6.8.0", "semver": "^7.5.4" }, "engines": { @@ -9540,12 +9540,12 @@ } }, "node_modules/eslint-config-erb/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.5.tgz", - "integrity": "sha512-3MaWdDZtLlsexZzDSdQWsFQ9l9nL8B80Z4fImSpyllFC/KLqWQRdEcB+gGGO+N3Q2uL40EsG66wZLsohPxNXvg==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz", + "integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/types": "6.8.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -10632,6 +10632,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, "node_modules/flat-cache": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", @@ -11590,9 +11599,9 @@ } }, "node_modules/i18next": { - "version": "23.5.1", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.5.1.tgz", - "integrity": "sha512-JelYzcaCoFDaa+Ysbfz2JsGAKkrHiMG6S61+HLBUEIPaF40WMwW9hCPymlQGrP+wWawKxKPuSuD71WZscCsWHg==", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.6.0.tgz", + "integrity": "sha512-z0Cxr0MGkt+kli306WS4nNNM++9cgt2b2VCMprY92j+AIab/oclgPxdwtTZVLP1zn5t5uo8M6uLsZmYrcjr3HA==", "funding": [ { "type": "individual", @@ -14448,9 +14457,9 @@ } }, "node_modules/node-abi": { - "version": "3.50.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.50.0.tgz", - "integrity": "sha512-2Gxu7Eq7vnBIRfYSmqPruEllMM14FjOQFJSoqdGWthVn+tmwEXzmdPpya6cvvwf0uZA3F5N1fMFr9mijZBplFA==", + "version": "3.51.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.51.0.tgz", + "integrity": "sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==", "dev": true, "dependencies": { "semver": "^7.3.5" @@ -14625,9 +14634,9 @@ } }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.0.tgz", + "integrity": "sha512-HQ4J+ic8hKrgIt3mqk6cVOVrW2ozL4KdvHlqpBv9vDYWx9ysAgENAdvy4FoGF+KFdhR7nQTNm5J0ctAeOwn+3g==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -16188,9 +16197,9 @@ } }, "node_modules/react-i18next": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-13.3.0.tgz", - "integrity": "sha512-FlR9xjYHSPIJfQspEmkN0yOlxgRyNuiJKJ8gCaZH08UJ7SZHG+VrptEPcpEMEchjNoCOZdKcvJ3PnmHEZhkeXg==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-13.3.1.tgz", + "integrity": "sha512-JAtYREK879JXaN9GdzfBI4yJeo/XyLeXWUsRABvYXiFUakhZJ40l+kaTo+i+A/3cKIED41kS/HAbZ5BzFtq/Og==", "dependencies": { "@babel/runtime": "^7.22.5", "html-parse-stringify": "^3.0.1" @@ -16252,11 +16261,11 @@ } }, "node_modules/react-router": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.16.0.tgz", - "integrity": "sha512-VT4Mmc4jj5YyjpOi5jOf0I+TYzGpvzERy4ckNSvSh2RArv8LLoCxlsZ2D+tc7zgjxcY34oTz2hZaeX5RVprKqA==", + "version": "6.17.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.17.0.tgz", + "integrity": "sha512-YJR3OTJzi3zhqeJYADHANCGPUu9J+6fT5GLv82UWRGSxu6oJYCKVmxUcaBQuGm9udpWmPsvpme/CdHumqgsoaA==", "dependencies": { - "@remix-run/router": "1.9.0" + "@remix-run/router": "1.10.0" }, "engines": { "node": ">=14.0.0" @@ -16266,12 +16275,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.16.0.tgz", - "integrity": "sha512-aTfBLv3mk/gaKLxgRDUPbPw+s4Y/O+ma3rEN1u8EgEpLpPe6gNjIsWt9rxushMHHMb7mSwxRGdGlGdvmFsyPIg==", + "version": "6.17.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.17.0.tgz", + "integrity": "sha512-qWHkkbXQX+6li0COUUPKAUkxjNNqPJuiBd27dVwQGDNsuFBdMbrS6UZ0CLYc4CsbdLYTckn4oB4tGDuPZpPhaQ==", "dependencies": { - "@remix-run/router": "1.9.0", - "react-router": "6.16.0" + "@remix-run/router": "1.10.0", + "react-router": "6.17.0" }, "engines": { "node": ">=14.0.0" @@ -16883,9 +16892,9 @@ } }, "node_modules/sass": { - "version": "1.69.3", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.3.tgz", - "integrity": "sha512-X99+a2iGdXkdWn1akFPs0ZmelUzyAQfvqYc2P/MPTrJRuIRoTffGzT9W9nFqG00S+c8hXzVmgxhUuHFdrwxkhQ==", + "version": "1.69.4", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.4.tgz", + "integrity": "sha512-+qEreVhqAy8o++aQfCJwp0sklr2xyEzkm9Pp/Igu9wNPoe7EZEQ8X/MBvvXggI2ql607cxKg/RKOwDj6pp2XDA==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -18156,9 +18165,9 @@ } }, "node_modules/terser": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.21.0.tgz", - "integrity": "sha512-WtnFKrxu9kaoXuiZFSGrcAvvBqAdmKx0SFNmVNYdJamMu9yyN3I/QF0FbH4QcqJQ+y1CJnzxGIKH0cSj+FGYRw==", + "version": "5.22.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.22.0.tgz", + "integrity": "sha512-hHZVLgRA2z4NWcN6aS5rQDc+7Dcy58HOf2zbYwmFcQ+ua3h6eEFf5lIDKTzbWwlazPyOZsFQO8V80/IjVNExEw==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -19575,12 +19584,13 @@ } }, "node_modules/webpack-merge": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "dev": true, "dependencies": { "clone-deep": "^4.0.1", + "flat": "^5.0.2", "wildcard": "^2.0.0" }, "engines": { diff --git a/package.json b/package.json index 39b75f4c..18d14b54 100644 --- a/package.json +++ b/package.json @@ -223,7 +223,7 @@ "applicationId": "RobinAhle.sleektodomanager" }, "linux": { - "icon": "assets/icons/sleek.png", + "icon": "assets/icons/sleek.ico", "category": "ProjectManagement", "target": [ "deb", diff --git a/release/app/package.json b/release/app/package.json index 665d0a26..d66372be 100644 --- a/release/app/package.json +++ b/release/app/package.json @@ -1,6 +1,6 @@ { "name": "sleek", - "version": "2.0.0-dev16", + "version": "2.0.0-dev17", "description": "todo.txt manager for Linux, Windows and MacOS, free and open-source (FOSS)", "synopsis": "todo.txt manager for Linux, Windows and MacOS, free and open-source (FOSS)", "keywords": [ diff --git a/src/__tests__/__mock__/recurrence.txt b/src/__tests__/__mock__/recurrence.txt index dedb1037..712305e5 100644 --- a/src/__tests__/__mock__/recurrence.txt +++ b/src/__tests__/__mock__/recurrence.txt @@ -1,11 +1,11 @@ -2023-10-15 Line 1 rec:1d due:2023-10-16 -2023-10-15 Line 1 rec:w due:2023-10-22 -2023-10-15 Line 1 rec:2m due:2023-12-15 -2023-10-15 Line 1 rec:+1d due:2023-10-17 -2023-10-15 Line 1 rec:7w due:2023-12-03 +2023-10-20 Line 1 rec:1d due:2023-10-21 +2023-10-20 Line 1 rec:w due:2023-10-27 +2023-10-20 Line 1 rec:2m due:2023-12-20 +2023-10-20 Line 1 rec:+1d due:2023-10-22 +2023-10-20 Line 1 rec:7w due:2023-12-08 2023-07-21 Line 1 due:2023-07-24 rec:+1b 2021-01-01 taxes are due in one year t:2022-03-30 due:2022-04-30 rec:+1y -2023-10-15 Water plants @home +quick due:2023-10-22 t:2023-10-12 rec:1w -2023-10-15 Line 1 rec:+1d t:2023-09-20 due:2023-10-16 -(A) 2023-10-15 Line 1 rec:1d pri:A due:2023-10-16 \ No newline at end of file +2023-10-20 Water plants @home +quick due:2023-10-27 t:2023-10-17 rec:1w +2023-10-20 Line 1 rec:+1d t:2023-09-20 due:2023-10-21 +(A) 2023-10-20 Line 1 rec:1d pri:A due:2023-10-21 \ No newline at end of file diff --git a/src/__tests__/__mock__/test.txt b/src/__tests__/__mock__/test.txt index efd6db7c..fecd7946 100644 --- a/src/__tests__/__mock__/test.txt +++ b/src/__tests__/__mock__/test.txt @@ -1,5 +1,5 @@ Line 1 Edited line New line -2023-10-15 New line with creation date +2023-10-20 New line with creation date New line with relative threshold date t:June 3rd, 2005 \ No newline at end of file diff --git a/src/locales/cs.json b/src/locales/cs.json index 5b59fe19..f8d51a34 100644 --- a/src/locales/cs.json +++ b/src/locales/cs.json @@ -44,7 +44,8 @@ "splashscreen.noTodosVisible.text": "Žádné výsledky nejsou viditelné.", "splashscreen.noTodosVisible.reset": "Obnovit filtry a hledání", "search.visibleTodos": "Viditelné úkoly: ", - "todoDialog.footer.save": "Uložit", + "todoDialog.footer.add": "Přidat", + "todoDialog.footer.update": "Aktualizovat", "todoDialog.footer.cancel": "Zrušit", "todoDialog.snackbar.emptyInput": "Zadejte prosím něco do textového pole", "todoDialog.priorityPicker.label": "Priorita", diff --git a/src/locales/de.json b/src/locales/de.json index 47f2661e..34e7a052 100644 --- a/src/locales/de.json +++ b/src/locales/de.json @@ -44,7 +44,8 @@ "splashscreen.noTodosVisible.text": "Keine sichtbaren Ergebnisse.", "splashscreen.noTodosVisible.reset": "Filter und Suche zurücksetzen", "search.visibleTodos": "Sichtbare Aufgaben: ", - "todoDialog.footer.save": "Speichern", + "todoDialog.footer.add": "Hinzufügen", + "todoDialog.footer.update": "Aktualisieren", "todoDialog.footer.cancel": "Abbrechen", "todoDialog.snackbar.emptyInput": "Bitte geben Sie etwas in das Textfeld ein", "todoDialog.priorityPicker.label": "Priorität", diff --git a/src/locales/en-gb.json b/src/locales/en-gb.json index 89c1f688..227d1a2e 100644 --- a/src/locales/en-gb.json +++ b/src/locales/en-gb.json @@ -44,7 +44,8 @@ "splashscreen.noTodosVisible.text": "No results visible.", "splashscreen.noTodosVisible.reset": "Reset filters and search", "search.visibleTodos": "Visible todos: ", - "todoDialog.footer.save": "Save", + "todoDialog.footer.add": "Add", + "todoDialog.footer.update": "Update", "todoDialog.footer.cancel": "Cancel", "todoDialog.snackbar.emptyInput": "Please enter something into the text field", "todoDialog.priorityPicker.label": "Priority", diff --git a/src/locales/en.json b/src/locales/en.json index 89c1f688..227d1a2e 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -44,7 +44,8 @@ "splashscreen.noTodosVisible.text": "No results visible.", "splashscreen.noTodosVisible.reset": "Reset filters and search", "search.visibleTodos": "Visible todos: ", - "todoDialog.footer.save": "Save", + "todoDialog.footer.add": "Add", + "todoDialog.footer.update": "Update", "todoDialog.footer.cancel": "Cancel", "todoDialog.snackbar.emptyInput": "Please enter something into the text field", "todoDialog.priorityPicker.label": "Priority", diff --git a/src/locales/es.json b/src/locales/es.json index a15b3a95..9e065463 100644 --- a/src/locales/es.json +++ b/src/locales/es.json @@ -44,7 +44,8 @@ "splashscreen.noTodosVisible.text": "No se ven resultados.", "splashscreen.noTodosVisible.reset": "Restablecer filtros y búsqueda", "search.visibleTodos": "Tareas visibles: ", - "todoDialog.footer.save": "Guardar", + "todoDialog.footer.add": "Agregar", + "todoDialog.footer.update": "Actualizar", "todoDialog.footer.cancel": "Cancelar", "todoDialog.snackbar.emptyInput": "Por favor, ingrese algo en el campo de texto", "todoDialog.priorityPicker.label": "Prioridad", diff --git a/src/locales/fr.json b/src/locales/fr.json index f069803d..ead3d039 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -44,7 +44,8 @@ "splashscreen.noTodosVisible.text": "Aucun résultat visible.", "splashscreen.noTodosVisible.reset": "Réinitialiser les filtres et la recherche", "search.visibleTodos": "Tâches visibles : ", - "todoDialog.footer.save": "Enregistrer", + "todoDialog.footer.add": "Ajouter", + "todoDialog.footer.update": "Mettre à jour", "todoDialog.footer.cancel": "Annuler", "todoDialog.snackbar.emptyInput": "Veuillez entrer quelque chose dans le champ de texte", "todoDialog.priorityPicker.label": "Priorité", diff --git a/src/locales/hi.json b/src/locales/hi.json index 3dfd5970..a3b34e80 100644 --- a/src/locales/hi.json +++ b/src/locales/hi.json @@ -44,7 +44,8 @@ "splashscreen.noTodosVisible.text": "कोई दिखाई देने वाला परिणाम नहीं है।", "splashscreen.noTodosVisible.reset": "फ़िल्टर और खोज को रीसेट करें", "search.visibleTodos": "दिखाई देने वाले कार्य: ", - "todoDialog.footer.save": "सहेजें", + "todoDialog.footer.add": "जोड़ें", + "todoDialog.footer.update": "अपडेट करें", "todoDialog.footer.cancel": "रद्द करें", "todoDialog.snackbar.emptyInput": "कृपया पाठ फ़ील्ड में कुछ डालें", "todoDialog.priorityPicker.label": "प्राथमिकता", diff --git a/src/locales/hu.json b/src/locales/hu.json index a5f0bbc3..2532f0ef 100644 --- a/src/locales/hu.json +++ b/src/locales/hu.json @@ -44,7 +44,8 @@ "splashscreen.noTodosVisible.text": "Nincs látható eredmény.", "splashscreen.noTodosVisible.reset": "Szűrők és keresés visszaállítása", "search.visibleTodos": "Látható feladatok: ", - "todoDialog.footer.save": "Mentés", + "todoDialog.footer.add": "Hozzáadás", + "todoDialog.footer.update": "Frissítés", "todoDialog.footer.cancel": "Mégse", "todoDialog.snackbar.emptyInput": "Kérjük, írjon be valamit a szövegmezőbe", "todoDialog.priorityPicker.label": "Prioritás", diff --git a/src/locales/it.json b/src/locales/it.json index 2487a852..d69ba1df 100644 --- a/src/locales/it.json +++ b/src/locales/it.json @@ -44,7 +44,8 @@ "splashscreen.noTodosVisible.text": "Nessun risultato visibile.", "splashscreen.noTodosVisible.reset": "Reimposta filtri e ricerca", "search.visibleTodos": "Compiti visibili: ", - "todoDialog.footer.save": "Salva", + "todoDialog.footer.add": "Aggiungi", + "todoDialog.footer.update": "Aggiorna", "todoDialog.footer.cancel": "Annulla", "todoDialog.snackbar.emptyInput": "Inserisci qualcosa nel campo di testo, per favore", "todoDialog.priorityPicker.label": "Priorità", diff --git a/src/locales/jp.json b/src/locales/jp.json index e255b4d7..3aa9543f 100644 --- a/src/locales/jp.json +++ b/src/locales/jp.json @@ -44,7 +44,8 @@ "splashscreen.noTodosVisible.text": "表示できる結果はありません。", "splashscreen.noTodosVisible.reset": "フィルターと検索をリセット", "search.visibleTodos": "表示されるタスク:", - "todoDialog.footer.save": "保存", + "todoDialog.footer.add": "追加", + "todoDialog.footer.update": "更新", "todoDialog.footer.cancel": "キャンセル", "todoDialog.snackbar.emptyInput": "テキストフィールドに何かを入力してください", "todoDialog.priorityPicker.label": "優先度", diff --git a/src/locales/ko.json b/src/locales/ko.json index ace1bac0..b3e9dbdb 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -44,7 +44,8 @@ "splashscreen.noTodosVisible.text": "표시할 결과 없음.", "splashscreen.noTodosVisible.reset": "필터 및 검색 재설정", "search.visibleTodos": "표시된 작업: ", - "todoDialog.footer.save": "저장", + "todoDialog.footer.add": "추가", + "todoDialog.footer.update": "업데이트", "todoDialog.footer.cancel": "취소", "todoDialog.snackbar.emptyInput": "텍스트 필드에 내용을 입력하세요", "todoDialog.priorityPicker.label": "우선 순위", diff --git a/src/locales/pl.json b/src/locales/pl.json index 0ea833b1..1b070f2b 100644 --- a/src/locales/pl.json +++ b/src/locales/pl.json @@ -44,7 +44,8 @@ "splashscreen.noTodosVisible.text": "Brak widocznych wyników.", "splashscreen.noTodosVisible.reset": "Resetuj filtry i wyszukiwanie", "search.visibleTodos": "Widoczne zadania: ", - "todoDialog.footer.save": "Zapisz", + "todoDialog.footer.add": "Dodaj", + "todoDialog.footer.update": "Aktualizuj", "todoDialog.footer.cancel": "Anuluj", "todoDialog.snackbar.emptyInput": "Proszę wprowadzić coś do pola tekstowego", "todoDialog.priorityPicker.label": "Priorytet", diff --git a/src/locales/pt.json b/src/locales/pt.json index 76bd33fe..71cc0902 100644 --- a/src/locales/pt.json +++ b/src/locales/pt.json @@ -44,7 +44,8 @@ "splashscreen.noTodosVisible.text": "Sem resultados visíveis.", "splashscreen.noTodosVisible.reset": "Repor filtros e pesquisa", "search.visibleTodos": "Tarefas visíveis: ", - "todoDialog.footer.save": "Guardar", + "todoDialog.footer.add": "Adicionar", + "todoDialog.footer.update": "Atualizar", "todoDialog.footer.cancel": "Cancelar", "todoDialog.snackbar.emptyInput": "Por favor, insira algo no campo de texto", "todoDialog.priorityPicker.label": "Prioridade", diff --git a/src/locales/ru.json b/src/locales/ru.json index 1ef90197..2f945b1c 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -44,7 +44,8 @@ "splashscreen.noTodosVisible.text": "Нет видимых результатов.", "splashscreen.noTodosVisible.reset": "Сбросить фильтры и поиск", "search.visibleTodos": "Видимые задачи: ", - "todoDialog.footer.save": "Сохранить", + "todoDialog.footer.add": "Добавить", + "todoDialog.footer.update": "Обновить", "todoDialog.footer.cancel": "Отменить", "todoDialog.snackbar.emptyInput": "Пожалуйста, введите что-то в текстовое поле", "todoDialog.priorityPicker.label": "Приоритет", diff --git a/src/locales/tr.json b/src/locales/tr.json index 7c32ab0d..0c5840dc 100644 --- a/src/locales/tr.json +++ b/src/locales/tr.json @@ -44,7 +44,8 @@ "splashscreen.noTodosVisible.text": "Görünen sonuç yok.", "splashscreen.noTodosVisible.reset": "Filtreleri ve aramayı sıfırla", "search.visibleTodos": "Görünür görevler: ", - "todoDialog.footer.save": "Kaydet", + "todoDialog.footer.add": "Ekle", + "todoDialog.footer.update": "Güncelle", "todoDialog.footer.cancel": "İptal", "todoDialog.snackbar.emptyInput": "Lütfen metin alanına bir şeyler yazın", "todoDialog.priorityPicker.label": "Öncelik", diff --git a/src/locales/zh.json b/src/locales/zh.json index a32316c3..b35224b6 100644 --- a/src/locales/zh.json +++ b/src/locales/zh.json @@ -44,7 +44,8 @@ "splashscreen.noTodosVisible.text": "没有可见的结果。", "splashscreen.noTodosVisible.reset": "重置过滤器和搜索", "search.visibleTodos": "可见任务:", - "todoDialog.footer.save": "保存", + "todoDialog.footer.add": "添加", + "todoDialog.footer.update": "更新", "todoDialog.footer.cancel": "取消", "todoDialog.snackbar.emptyInput": "请在文本字段中输入内容", "todoDialog.priorityPicker.label": "优先级", diff --git a/src/main/config.tsx b/src/main/config.tsx index 228d6ae0..5719a82b 100644 --- a/src/main/config.tsx +++ b/src/main/config.tsx @@ -55,6 +55,7 @@ const defaultConfigData = { customStylesPath: customStylesPath, tray: false, zoom: 100, + multilineTextField: false, }; const configPath = path.join(userDataDirectory, 'config.json'); diff --git a/src/main/modules/Filters.tsx b/src/main/modules/Filters.tsx index 64861b33..a1147a1c 100644 --- a/src/main/modules/Filters.tsx +++ b/src/main/modules/Filters.tsx @@ -26,6 +26,8 @@ function applyFilters(todoObjects: TodoObject[], filters: Filters | null): TodoO const hasMatchingValue = attributeValues.includes(value); + console.log(hasMatchingValue) + return exclude ? !hasMatchingValue : hasMatchingValue; }); }); diff --git a/src/main/modules/TodoObject/CreateTodoObjects.tsx b/src/main/modules/TodoObject/CreateTodoObjects.tsx index 273f114e..3380bd9b 100644 --- a/src/main/modules/TodoObject/CreateTodoObjects.tsx +++ b/src/main/modules/TodoObject/CreateTodoObjects.tsx @@ -12,7 +12,9 @@ function createTodoObjects(fileContent: string): TodoObject[] { const todoObjects: TodoObject[] = lines .map((line, i) => { try { - const JsTodoTxtObject = new Item(line); + const updatedLine = line.replaceAll(String.fromCharCode(16), ` `) + + const JsTodoTxtObject = new Item(updatedLine); const body = JsTodoTxtObject.body(); if (!body) { return null; @@ -49,9 +51,8 @@ function createTodoObjects(fileContent: string): TodoObject[] { rec, hidden, pm, - string: JsTodoTxtObject.toString(), + string: line, }; - return todoObject as TodoObject; } catch (error) { console.log(error); @@ -59,7 +60,6 @@ function createTodoObjects(fileContent: string): TodoObject[] { } }) .filter((todoObject): todoObject is TodoObject => todoObject !== null); - return todoObjects; } diff --git a/src/renderer/App.tsx b/src/renderer/App.tsx index f32e8051..f10dae1e 100644 --- a/src/renderer/App.tsx +++ b/src/renderer/App.tsx @@ -35,7 +35,7 @@ const App = () => { const [todoObject, setTodoObject] = useState(null); const [headers, setHeaders] = useState(null); const [filters, setFilters] = useState({}); - const [attributes, setAttributes] = useState({}); + const [attributes, setAttributes] = useState({}); const [sorting, setSorting] = useState(store.get('sorting') || null); const [zoom, setZoom] = useState(store.get('zoom') || 100); const searchFieldRef = useRef(null); @@ -169,7 +169,6 @@ const App = () => { document.body.style.fontSize = `${adjustedFontSize}px`; }, [zoom]); - useEffect(() => { ipcRenderer.on('requestData', handleRequestedData); ipcRenderer.on('updateFiles', handleUpdateFiles); @@ -183,20 +182,20 @@ const App = () => { ipcRenderer.on('writeTodoToFile', handleWriteTodoToFile); window.addEventListener('drop', handleDrop); window.addEventListener('dragover', handleDragOver); - return () => { - ipcRenderer.removeListener('requestData', handleRequestedData); - ipcRenderer.removeListener('updateFiles', handleUpdateFiles); - ipcRenderer.removeListener('updateSorting', handleUpdateSorting); - ipcRenderer.removeListener('setIsSearchOpen', handleSetIsSearchOpen); - ipcRenderer.removeListener('setIsNavigationOpen', handleSetIsNavigationOpen); - ipcRenderer.removeListener('setShouldUseDarkColors', handleSetShouldUseDarkColors); - ipcRenderer.removeListener('setShowFileTabs', handleSetShowFileTabs); - ipcRenderer.removeListener('setIsDrawerOpen', handleSetIsDrawerOpen); - ipcRenderer.removeListener('setIsSettingsOpen', handleSetIsSettingsOpen); - ipcRenderer.removeListener('writeTodoToFile', handleWriteTodoToFile); - window.removeEventListener('drop', handleDrop); - window.removeEventListener('dragover', handleDragOver); - }; + // return () => { + // ipcRenderer.removeListener('requestData', handleRequestedData); + // ipcRenderer.removeListener('updateFiles', handleUpdateFiles); + // ipcRenderer.removeListener('updateSorting', handleUpdateSorting); + // ipcRenderer.removeListener('setIsSearchOpen', handleSetIsSearchOpen); + // ipcRenderer.removeListener('setIsNavigationOpen', handleSetIsNavigationOpen); + // ipcRenderer.removeListener('setShouldUseDarkColors', handleSetShouldUseDarkColors); + // ipcRenderer.removeListener('setShowFileTabs', handleSetShowFileTabs); + // ipcRenderer.removeListener('setIsDrawerOpen', handleSetIsDrawerOpen); + // ipcRenderer.removeListener('setIsSettingsOpen', handleSetIsSettingsOpen); + // ipcRenderer.removeListener('writeTodoToFile', handleWriteTodoToFile); + // window.removeEventListener('drop', handleDrop); + // window.removeEventListener('dragover', handleDragOver); + // }; }, []); return ( @@ -266,6 +265,7 @@ const App = () => { setContextMenuPosition={setContextMenuPosition} contextMenuItems={contextMenuItems} setContextMenuItems={setContextMenuItems} + setTextFieldValue={setTextFieldValue} /> = ({ +interface DatePickerInlineProps { + type: string, + todoObject: TodoObject, + date: date, + filters +} + +const DatePickerInline: React.FC = ({ type, todoObject, date, diff --git a/src/renderer/DataGrid/Elements.tsx b/src/renderer/DataGrid/Elements.tsx index 92230371..ab8de51a 100644 --- a/src/renderer/DataGrid/Elements.tsx +++ b/src/renderer/DataGrid/Elements.tsx @@ -72,7 +72,7 @@ const Elements: React.FC = ({ todoObject, filters, handleButtonCl { pattern: /rec:([^ ]+)/, type: 'rec', key: 'rec:' }, ]; - let body = todoObject.body; + let body = todoObject.body.replaceAll(String.fromCharCode(16), ' '); let substrings = []; let index = 0; @@ -81,15 +81,14 @@ const Elements: React.FC = ({ todoObject, filters, handleButtonCl let matched = false; for (const expression of expressions) { + const regex = new RegExp(`^(${expression.pattern.source})`); const match = body.match(regex); if (match) { matched = true; - - const value = match[0].substr(expression.key.length); - - substrings.push({ type: expression.type, value: value, key: expression.key, index: index }); + const value = match[0].substr(expression.key?.length); + if(value) substrings.push({ type: expression.type, value: value, key: expression.key, index: index }); body = body.substring(match[0].length); break; } @@ -98,11 +97,10 @@ const Elements: React.FC = ({ todoObject, filters, handleButtonCl if (!matched) { const nextSpaceIndex = body.indexOf(' '); const endOfWordIndex = nextSpaceIndex !== -1 ? nextSpaceIndex : body.length; - - substrings.push({ type: null, value: body.substring(0, endOfWordIndex), index: index }); + const value = body.substring(0, endOfWordIndex); + if(value !== '') substrings.push({ type: null, value: value, index: index }); body = body.substring(endOfWordIndex + 1); } - index++; } } @@ -130,4 +128,4 @@ const Elements: React.FC = ({ todoObject, filters, handleButtonCl return <>{elements}; }; -export default Elements; +export default Elements; \ No newline at end of file diff --git a/src/renderer/DataGrid/Row.tsx b/src/renderer/DataGrid/Row.tsx index f379b008..0561ebd8 100644 --- a/src/renderer/DataGrid/Row.tsx +++ b/src/renderer/DataGrid/Row.tsx @@ -80,7 +80,7 @@ const Row: React.FC = ({ setTodoObject(row); setDialogOpen(true); } - //setTextFieldValue(row.string); + setTextFieldValue(row.string); } } }; diff --git a/src/renderer/LanguageSelector.tsx b/src/renderer/LanguageSelector.tsx index 0b9e532f..31b818dc 100644 --- a/src/renderer/LanguageSelector.tsx +++ b/src/renderer/LanguageSelector.tsx @@ -93,8 +93,12 @@ const friendlyLanguageName = { } const LanguageSelector = ({ setAttributeMapping }) => { - const [selectedLanguage, setSelectedLanguage] = useState(store.get('language') || i18n.language); const supportedLanguages = i18n.options.supportedLngs; + const [selectedLanguage, setSelectedLanguage] = useState( + supportedLanguages.includes(store.get('language') || navigator.language) + ? store.get('language') || navigator.language + : 'en' + ); const changeLanguage = (event) => { const language = event.target.value; diff --git a/src/renderer/TodoDialog/AutoSuggest.js b/src/renderer/TodoDialog/AutoSuggest.js index 896e623d..6987784f 100644 --- a/src/renderer/TodoDialog/AutoSuggest.js +++ b/src/renderer/TodoDialog/AutoSuggest.js @@ -1,13 +1,18 @@ import React, { useState, useEffect, useRef } from 'react'; import Autosuggest from 'react-autosuggest'; -import { TextField, InputAdornment, Button, Avatar, Box } from '@mui/material'; +import { Button, Avatar, Box, TextField, InputAdornment, IconButton } from '@mui/material'; +import OpenInFullIcon from '@mui/icons-material/OpenInFull'; +import CloseFullscreenIcon from '@mui/icons-material/CloseFullscreen'; import './AutoSuggest.scss'; -const regex = / [\+@][^ ]*/g; +const { store } = window.api; + +//const regex = / [\+@][^ ]*/g; +const regex = /(?<=^| )[\+@][^ ]*/g; +//const regex = /[@+]/g; const AutoSuggest = ({ setDialogOpen, - textFieldRef, textFieldValue, setTextFieldValue, attributes, @@ -18,24 +23,30 @@ const AutoSuggest = ({ const [selectedSuggestionIndex, setSelectedSuggestionIndex] = useState(-1); const [prefix, setPrefix] = useState(null); const [matchPosition, setMatchPosition] = useState({ start: -1, end: -1 }); + const [multilineTextField, setMultilineTextField] = useState(store.get('multilineTextField', false)); + const textFieldRef = useRef(null); + + const handleSetMultilineTextField = () => { + setMultilineTextField(prevMultilineTextField => !prevMultilineTextField); + }; const handleSuggestionsFetchRequested = ({ value }) => { - const inputValue = value; - if (!inputValue) return; + let content = value.replaceAll('\n', ' ').replaceAll(String.fromCharCode(16), ' '); + if (!content) return; const cursorPosition = textFieldRef.current?.selectionStart; if (!cursorPosition) return; setSuggestions([]); let match; - while ((match = regex.exec(inputValue)) !== null) { + while ((match = regex.exec(content)) !== null) { const matchValue = match[0]; const matchStart = match.index; const matchEnd = matchStart + matchValue.length; if (cursorPosition >= matchStart && cursorPosition <= matchEnd) { - const suggestions = getSuggestions(matchValue.substr(1, 1), matchValue.substr(2)); + const suggestions = getSuggestions(matchValue.substr(0, 1), matchValue.substr(1)); setSuggestions(suggestions); setMatchPosition({ start: matchStart, end: matchEnd }); } @@ -46,15 +57,16 @@ const AutoSuggest = ({ const inputValue = textFieldValue; if (!textFieldValue) return; const createNewValue = (string, a, b) => { - return `${textFieldValue.slice(0, a)} ${prefix}${string} ${textFieldValue.slice(b + 1)}`; + return `${textFieldValue.slice(0, a)}${prefix}${string} ${textFieldValue.slice(b + 1)}`; }; const newValue = createNewValue(suggestion, matchPosition.start, matchPosition.end); setTextFieldValue(newValue) setSuggestions([]); }; - const handleChange = (event, { newValue, method }) => { - if (method === 'type') setTextFieldValue(newValue); + const handleChange = (event) => { + const newValue = event.target.value; + setTextFieldValue(newValue); }; const getSuggestions = (trigger, match) => { @@ -78,8 +90,6 @@ const AutoSuggest = ({ ); - const renderInputComponent = (inputProps) => ; - const handleSuggestionsClearRequested = () => { setSuggestions([]); }; @@ -90,7 +100,6 @@ const AutoSuggest = ({ const handleKeyDown = (event, id, string) => { if (suggestions.length > 0) { - if (event.key === 'Enter') { if (suggestions.length > 0 && selectedSuggestionIndex !== -1) { event.stopPropagation(); @@ -102,7 +111,7 @@ const AutoSuggest = ({ handleSuggestionsClearRequested(); } } else { - if (event.key === 'Enter') { + if ((multilineTextField && (event.metaKey || event.ctrlKey) && event.key === 'Enter') || (!multilineTextField && event.key === 'Enter')) { event.stopPropagation(); handleAdd(event, id, string); } else if (event.key === 'Escape') { @@ -113,35 +122,66 @@ const AutoSuggest = ({ } }; + const value = () => { + const value = (multilineTextField) + ? textFieldValue.replaceAll(String.fromCharCode(16), '\n') + : textFieldValue.replaceAll('\n', String.fromCharCode(16)); + return value; + } + const inputProps = { placeholder: `(A) text +project @context due:2020-12-12 t:2021-01-10 rec:d pm:1`, - value: textFieldValue, + value: value(), onChange: handleChange, inputRef: textFieldRef, onKeyDown: (event) => handleKeyDown(event, todoObject?.id, textFieldValue), }; useEffect(() => { - if(todoObject) setTextFieldValue(todoObject.string); - textFieldRef.current.focus(); - }, []); + store.set('multilineTextField', multilineTextField); + textFieldRef.current?.focus(); + }, [multilineTextField]); + + useEffect(() => { + textFieldRef.current?.focus(); + }, [textFieldValue]); return ( - ( - - {children} - - )} - suggestions={suggestions} - onSuggestionsFetchRequested={handleSuggestionsFetchRequested} - onSuggestionsClearRequested={handleSuggestionsClearRequested} - getSuggestionValue={(suggestion) => suggestion} - renderSuggestion={renderSuggestion} - onSuggestionSelected={handleSuggestionSelected} - inputProps={inputProps} - /> + <> + ( + multilineTextField ? ( + + ) : ( + + ) + )} + renderSuggestionsContainer={({ containerProps, children }) => ( + + {children} + + )} + suggestions={suggestions} + onSuggestionsFetchRequested={handleSuggestionsFetchRequested} + onSuggestionsClearRequested={handleSuggestionsClearRequested} + getSuggestionValue={(suggestion) => suggestion} + renderSuggestion={renderSuggestion} + onSuggestionSelected={handleSuggestionSelected} + inputProps={inputProps} + /> + + + {multilineTextField ? : } + + + ); }; diff --git a/src/renderer/TodoDialog/AutoSuggest.scss b/src/renderer/TodoDialog/AutoSuggest.scss index ba302f18..e03b006c 100644 --- a/src/renderer/TodoDialog/AutoSuggest.scss +++ b/src/renderer/TodoDialog/AutoSuggest.scss @@ -11,7 +11,6 @@ display: block; border-radius: $radius; background-color: rgba(240, 240, 240, 0.85); - ul { padding: 0; margin: 0; @@ -27,12 +26,4 @@ .react-autosuggest__suggestions-container--open { background-color: rgba(45, 45, 45, 0.85); } -} -.react-autosuggest__container { - .react-autosuggest__input { - input { - font-size: 1.25em; - } - - } } \ No newline at end of file diff --git a/src/renderer/TodoDialog/DatePicker.tsx b/src/renderer/TodoDialog/DatePicker.tsx index 02e2a116..a7363426 100644 --- a/src/renderer/TodoDialog/DatePicker.tsx +++ b/src/renderer/TodoDialog/DatePicker.tsx @@ -31,9 +31,11 @@ const DatePickerComponent: React.FC = ({ const formattedDate = dayjs(updatedDate).format('YYYY-MM-DD'); + const content = textFieldValue.replaceAll(/\n/g, ` ${String.fromCharCode(16)}`); + const updatedTextFieldValue = todoObject?.dueString - ? textFieldValue.replace(` ${type}:${todoObject.dueString}`, '') - : textFieldValue; + ? content.replace(` ${type}:${todoObject.dueString}`, '') + : content; const JsTodoTxtObject = new Item(updatedTextFieldValue); JsTodoTxtObject.setExtension(type, formattedDate); diff --git a/src/renderer/TodoDialog/PomodoroPicker.tsx b/src/renderer/TodoDialog/PomodoroPicker.tsx index eafc626f..5c6c2a3e 100644 --- a/src/renderer/TodoDialog/PomodoroPicker.tsx +++ b/src/renderer/TodoDialog/PomodoroPicker.tsx @@ -19,7 +19,8 @@ const PomodoroPicker: PomodoroPicker = ({ const handleChange = (event) => { const updatedPomodoro = event.target.value; - const JsTodoTxtObject = new Item(textFieldValue); + let string = textFieldValue.replaceAll('\n', ` ${String.fromCharCode(16)}`); + const JsTodoTxtObject = new Item(string); JsTodoTxtObject.setExtension('pm', updatedPomodoro); setTextFieldValue(JsTodoTxtObject.toString()); setPomodoro(updatedPomodoro); diff --git a/src/renderer/TodoDialog/TodoDialog.scss b/src/renderer/TodoDialog/TodoDialog.scss index d3c83f2c..7d4573c0 100644 --- a/src/renderer/TodoDialog/TodoDialog.scss +++ b/src/renderer/TodoDialog/TodoDialog.scss @@ -3,21 +3,48 @@ #TodoDialog { .MuiDialog-paper { max-width: 50em; - button { - svg { - font-size: 1em; - } - } + position: relative; } .MuiDialogContent-root { display: flex; gap: 0.625em; flex-wrap: wrap; + .input { + width: 100%; + input, textarea { + font-size: 1.25em; + padding-right: 3em; + } + textarea { + min-height: 3.5em; + } + } + // input.input { + // width: 100%; + // font-size: 1.25em; + // } + // textarea.input { + // width: 100%; + // height: auto; + // min-height: 3em; + // font-family: 'FreeSans'; + // background: $lighter-grey; + // border: none; + // border-radius: $radius; + // outline: none; + // padding: 0.85em; + // } .react-autosuggest__container { width: 100%; flex-grow: 1; - .react-autosuggest__input { - width: 100%; + } + .resize { + position: absolute; + right: 2.5em; + top: 3.2em; + svg { + font-size: 1.75em; + color: #1976d2; } } } diff --git a/src/renderer/TodoDialog/TodoDialog.tsx b/src/renderer/TodoDialog/TodoDialog.tsx index db271679..94044a63 100644 --- a/src/renderer/TodoDialog/TodoDialog.tsx +++ b/src/renderer/TodoDialog/TodoDialog.tsx @@ -1,4 +1,4 @@ -import React, { useState, useRef, useEffect } from 'react'; +import React, { useState, useEffect } from 'react'; import { Button, Dialog, DialogContent, DialogActions, FormControl } from '@mui/material'; import AutoSuggest from './AutoSuggest'; import PriorityPicker from './PriorityPicker'; @@ -9,7 +9,7 @@ import { withTranslation } from 'react-i18next'; import { i18n } from '../LanguageSelector'; import './TodoDialog.scss'; -const ipcRenderer = window.api.ipcRenderer; +const { ipcRenderer, store } = window.api; interface TodoDialog { dialogOpen: boolean; @@ -35,16 +35,15 @@ const TodoDialog: React.FC = ({ t }: TodoDialogProps) => { - const textFieldRef = useRef(null); - const handleAdd = (event, id, string) => { try { if(string === '') { setSnackBarSeverity('info'); setSnackBarContent(t('todoDialog.snackbar.emptyInput')); - return false; } else { - ipcRenderer.send('writeTodoToFile', id, string); + const multilineTextField = store.get('multilineTextField'); + const content = string.replaceAll(/\n/g, String.fromCharCode(16)); + ipcRenderer.send('writeTodoToFile', id, content); } } catch (error) { console.error(error.message); @@ -65,10 +64,6 @@ const TodoDialog: React.FC = ({ } }, [dialogOpen]); - useEffect(() => { - textFieldRef.current?.focus(); - }, [textFieldValue]); - return ( = ({ = ({