diff --git a/.github/workflows/Comment_on_Issues.yml b/.github/workflows/Comment_on_Issues.yml index 6b65991389d6..38e9a5405a28 100644 --- a/.github/workflows/Comment_on_Issues.yml +++ b/.github/workflows/Comment_on_Issues.yml @@ -12,7 +12,7 @@ jobs: issues: write steps: - name: Add Comment - uses: peter-evans/create-or-update-comment@a35cf36e5301d70b76f316e867e7788a55a31dae + uses: peter-evans/create-or-update-comment@v3 with: issue-number: ${{ github.event.issue.number }} body: | @@ -27,4 +27,4 @@ jobs: issues: write steps: - name: Add Comment - uses: peter-evans/create-or-update + uses: peter-evans/create-or-update@v3 diff --git a/jsconfig.json b/jsconfig.json index bc2112b1afda..35496702afff 100644 --- a/jsconfig.json +++ b/jsconfig.json @@ -1,7 +1,10 @@ { "compilerOptions": { - "module": "ES2022", - "baseUrl": "." + "module": "ESNext", + "baseUrl": "./", + "checkJs": false, + "moduleResolution": "node", + "jsx": "react" }, "include": ["./src"], "exclude": ["node_modules/"] diff --git a/package-lock.json b/package-lock.json index e4f1dc12dcf5..04c86c8b250b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -71,8 +71,9 @@ "styled-components": "^5.3.3" }, "devDependencies": { + "@types/react": "^18.2.39", "@types/react-helmet": "^6.1.5", - "@vitejs/plugin-react": "^4.1.1", + "@vitejs/plugin-react": "^4.2.1", "auto-changelog": "~2.3.0", "browserslist-to-esbuild": "^1.2.0", "eslint": "^8.54.0", @@ -91,7 +92,7 @@ "stylelint": "^14.3.0", "stylelint-config-sass-guidelines": "^9.0.1", "stylelint-order": "^5.0.0", - "vite": "^4.5.0", + "vite": "^5.0.6", "vite-plugin-eslint": "^1.8.1" }, "engines": { @@ -121,11 +122,11 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "dependencies": { - "@babel/highlight": "^7.22.13", + "@babel/highlight": "^7.23.4", "chalk": "^2.4.2" }, "engines": { @@ -141,20 +142,20 @@ } }, "node_modules/@babel/core": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz", - "integrity": "sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.5.tgz", + "integrity": "sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.3", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.5", "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.2", - "@babel/parser": "^7.23.3", + "@babel/helpers": "^7.23.5", + "@babel/parser": "^7.23.5", "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.3", - "@babel/types": "^7.23.3", + "@babel/traverse": "^7.23.5", + "@babel/types": "^7.23.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -175,11 +176,11 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "node_modules/@babel/generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", - "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.5.tgz", + "integrity": "sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==", "dependencies": { - "@babel/types": "^7.23.3", + "@babel/types": "^7.23.5", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -318,9 +319,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", "engines": { "node": ">=6.9.0" } @@ -342,22 +343,22 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", - "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.5.tgz", + "integrity": "sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==", "dependencies": { "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0" + "@babel/traverse": "^7.23.5", + "@babel/types": "^7.23.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", @@ -368,9 +369,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", - "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.5.tgz", + "integrity": "sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==", "bin": { "parser": "bin/babel-parser.js" }, @@ -452,18 +453,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz", - "integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.5.tgz", + "integrity": "sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.3", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.5", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.3", - "@babel/types": "^7.23.3", + "@babel/parser": "^7.23.5", + "@babel/types": "^7.23.5", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -472,11 +473,11 @@ } }, "node_modules/@babel/types": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", - "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.5.tgz", + "integrity": "sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, @@ -699,9 +700,9 @@ "license": "MIT" }, "node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.8.tgz", + "integrity": "sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA==", "cpu": [ "arm" ], @@ -715,9 +716,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.8.tgz", + "integrity": "sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA==", "cpu": [ "arm64" ], @@ -731,9 +732,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.8.tgz", + "integrity": "sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A==", "cpu": [ "x64" ], @@ -747,9 +748,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.8.tgz", + "integrity": "sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw==", "cpu": [ "arm64" ], @@ -763,9 +764,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.8.tgz", + "integrity": "sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q==", "cpu": [ "x64" ], @@ -779,9 +780,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.8.tgz", + "integrity": "sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw==", "cpu": [ "arm64" ], @@ -795,9 +796,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.8.tgz", + "integrity": "sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg==", "cpu": [ "x64" ], @@ -811,9 +812,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.8.tgz", + "integrity": "sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ==", "cpu": [ "arm" ], @@ -827,9 +828,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.8.tgz", + "integrity": "sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ==", "cpu": [ "arm64" ], @@ -843,9 +844,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.8.tgz", + "integrity": "sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ==", "cpu": [ "ia32" ], @@ -859,9 +860,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.8.tgz", + "integrity": "sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ==", "cpu": [ "loong64" ], @@ -875,9 +876,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.8.tgz", + "integrity": "sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q==", "cpu": [ "mips64el" ], @@ -891,9 +892,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.8.tgz", + "integrity": "sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg==", "cpu": [ "ppc64" ], @@ -907,9 +908,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.8.tgz", + "integrity": "sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg==", "cpu": [ "riscv64" ], @@ -923,9 +924,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.8.tgz", + "integrity": "sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg==", "cpu": [ "s390x" ], @@ -939,9 +940,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.8.tgz", + "integrity": "sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg==", "cpu": [ "x64" ], @@ -955,9 +956,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.8.tgz", + "integrity": "sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw==", "cpu": [ "x64" ], @@ -971,9 +972,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.8.tgz", + "integrity": "sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ==", "cpu": [ "x64" ], @@ -987,9 +988,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.8.tgz", + "integrity": "sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w==", "cpu": [ "x64" ], @@ -1003,9 +1004,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.8.tgz", + "integrity": "sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg==", "cpu": [ "arm64" ], @@ -1019,9 +1020,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.8.tgz", + "integrity": "sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw==", "cpu": [ "ia32" ], @@ -1035,9 +1036,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.8.tgz", + "integrity": "sha512-bfZ0cQ1uZs2PqpulNL5j/3w+GDhP36k1K5c38QdQg+Swy51jFZWWeIkteNsufkQxp986wnqRRsb/bHbY1WQ7TA==", "cpu": [ "x64" ], @@ -1530,10 +1531,166 @@ "node": ">= 8.0.0" } }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.6.1.tgz", + "integrity": "sha512-0WQ0ouLejaUCRsL93GD4uft3rOmB8qoQMU05Kb8CmMtMBe7XUDLAltxVZI1q6byNqEtU7N1ZX1Vw5lIpgulLQA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.6.1.tgz", + "integrity": "sha512-1TKm25Rn20vr5aTGGZqo6E4mzPicCUD79k17EgTLAsXc1zysyi4xXKACfUbwyANEPAEIxkzwue6JZ+stYzWUTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.6.1.tgz", + "integrity": "sha512-cEXJQY/ZqMACb+nxzDeX9IPLAg7S94xouJJCNVE5BJM8JUEP4HeTF+ti3cmxWeSJo+5D+o8Tc0UAWUkfENdeyw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.6.1.tgz", + "integrity": "sha512-LoSU9Xu56isrkV2jLldcKspJ7sSXmZWkAxg7sW/RfF7GS4F5/v4EiqKSMCFbZtDu2Nc1gxxFdQdKwkKS4rwxNg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.6.1.tgz", + "integrity": "sha512-EfI3hzYAy5vFNDqpXsNxXcgRDcFHUWSx5nnRSCKwXuQlI5J9dD84g2Usw81n3FLBNsGCegKGwwTVsSKK9cooSQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.6.1.tgz", + "integrity": "sha512-9lhc4UZstsegbNLhH0Zu6TqvDfmhGzuCWtcTFXY10VjLLUe4Mr0Ye2L3rrtHaDd/J5+tFMEuo5LTCSCMXWfUKw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.6.1.tgz", + "integrity": "sha512-FfoOK1yP5ksX3wwZ4Zk1NgyGHZyuRhf99j64I5oEmirV8EFT7+OhUZEnP+x17lcP/QHJNWGsoJwrz4PJ9fBEXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.6.1.tgz", + "integrity": "sha512-DNGZvZDO5YF7jN5fX8ZqmGLjZEXIJRdJEdTFMhiyXqyXubBa0WVLDWSNlQ5JR2PNgDbEV1VQowhVRUh+74D+RA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.6.1.tgz", + "integrity": "sha512-RkJVNVRM+piYy87HrKmhbexCHg3A6Z6MU0W9GHnJwBQNBeyhCJG9KDce4SAMdicQnpURggSvtbGo9xAWOfSvIQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.6.1.tgz", + "integrity": "sha512-v2FVT6xfnnmTe3W9bJXl6r5KwJglMK/iRlkKiIFfO6ysKs0rDgz7Cwwf3tjldxQUrHL9INT/1r4VA0n9L/F1vQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.6.1.tgz", + "integrity": "sha512-YEeOjxRyEjqcWphH9dyLbzgkF8wZSKAKUkldRY6dgNR5oKs2LZazqGB41cWJ4Iqqcy9/zqYgmzBkRoVz3Q9MLw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.6.1.tgz", + "integrity": "sha512-0zfTlFAIhgz8V2G8STq8toAjsYYA6eci1hnXuyOTUFnymrtJwnS6uGKiv3v5UrPZkBlamLvrLV2iiaeqCKzb0A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@types/babel__core": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.4.tgz", - "integrity": "sha512-mLnSC22IC4vcWiuObSRjrLd9XcBTGf59vUSoq2jkQDJ/QQ8PMI9rSuzE+aEV8karUMbskw07bKYoUJCKTUaygg==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, "dependencies": { "@babel/parser": "^7.20.7", @@ -1629,8 +1786,12 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "17.0.21", - "license": "MIT" + "version": "20.10.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.3.tgz", + "integrity": "sha512-XJavIpZqiXID5Yxnxv3RUDKTN5b81ddNC3ecsA0SoFXz/QU8OGBwZGMomiq0zw+uuqbL/krztv/DINAQ/EV4gg==", + "dependencies": { + "undici-types": "~5.26.4" + } }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", @@ -1658,8 +1819,9 @@ "optional": true }, "node_modules/@types/react": { - "version": "17.0.39", - "license": "MIT", + "version": "18.2.39", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.39.tgz", + "integrity": "sha512-Oiw+ppED6IremMInLV4HXGbfbG6GyziY3kqAwJYOR0PNbkYDmLWQA3a95EhdSmamsvbkJN96ZNN+YD+fGjzSBA==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -1712,22 +1874,22 @@ "dev": true }, "node_modules/@vitejs/plugin-react": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.1.1.tgz", - "integrity": "sha512-Jie2HERK+uh27e+ORXXwEP5h0Y2lS9T2PRGbfebiHGlwzDO0dEnd2aNtOR/qjBlPb1YgxwAONeblL1xqLikLag==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", + "integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==", "dev": true, "dependencies": { - "@babel/core": "^7.23.2", - "@babel/plugin-transform-react-jsx-self": "^7.22.5", - "@babel/plugin-transform-react-jsx-source": "^7.22.5", - "@types/babel__core": "^7.20.3", + "@babel/core": "^7.23.5", + "@babel/plugin-transform-react-jsx-self": "^7.23.3", + "@babel/plugin-transform-react-jsx-source": "^7.23.3", + "@types/babel__core": "^7.20.5", "react-refresh": "^0.14.0" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, "peerDependencies": { - "vite": "^4.2.0" + "vite": "^4.2.0 || ^5.0.0" } }, "node_modules/@webassemblyjs/ast": { @@ -3212,9 +3374,9 @@ } }, "node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.8.tgz", + "integrity": "sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w==", "dev": true, "hasInstallScript": true, "bin": { @@ -3224,28 +3386,28 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" + "@esbuild/android-arm": "0.19.8", + "@esbuild/android-arm64": "0.19.8", + "@esbuild/android-x64": "0.19.8", + "@esbuild/darwin-arm64": "0.19.8", + "@esbuild/darwin-x64": "0.19.8", + "@esbuild/freebsd-arm64": "0.19.8", + "@esbuild/freebsd-x64": "0.19.8", + "@esbuild/linux-arm": "0.19.8", + "@esbuild/linux-arm64": "0.19.8", + "@esbuild/linux-ia32": "0.19.8", + "@esbuild/linux-loong64": "0.19.8", + "@esbuild/linux-mips64el": "0.19.8", + "@esbuild/linux-ppc64": "0.19.8", + "@esbuild/linux-riscv64": "0.19.8", + "@esbuild/linux-s390x": "0.19.8", + "@esbuild/linux-x64": "0.19.8", + "@esbuild/netbsd-x64": "0.19.8", + "@esbuild/openbsd-x64": "0.19.8", + "@esbuild/sunos-x64": "0.19.8", + "@esbuild/win32-arm64": "0.19.8", + "@esbuild/win32-ia32": "0.19.8", + "@esbuild/win32-x64": "0.19.8" } }, "node_modules/escalade": { @@ -3954,9 +4116,9 @@ "license": "ISC" }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, "optional": true, @@ -5450,9 +5612,9 @@ "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "funding": [ { "type": "github", @@ -5886,9 +6048,9 @@ } }, "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.4.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", + "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", "funding": [ { "type": "opencollective", @@ -5904,7 +6066,7 @@ } ], "dependencies": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -7886,6 +8048,11 @@ "react": ">=15.0.0" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, "node_modules/update-browserslist-db": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", @@ -7981,29 +8148,29 @@ "integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==" }, "node_modules/vite": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", - "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.6.tgz", + "integrity": "sha512-MD3joyAEBtV7QZPl2JVVUai6zHms3YOmLR+BpMzLlX2Yzjfcc4gTgNi09d/Rua3F4EtC8zdwPU8eQYyib4vVMQ==", "dev": true, "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.27", - "rollup": "^3.27.1" + "esbuild": "^0.19.3", + "postcss": "^8.4.32", + "rollup": "^4.2.0" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" }, "optionalDependencies": { - "fsevents": "~2.3.2" + "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": ">= 14", + "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", @@ -8051,18 +8218,30 @@ } }, "node_modules/vite/node_modules/rollup": { - "version": "3.29.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", - "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.6.1.tgz", + "integrity": "sha512-jZHaZotEHQaHLgKr8JnQiDT1rmatjgKlMekyksz+yk9jt/8z9quNjnKNRoaM0wd9DC2QKXjmWWuDYtM3jfF8pQ==", "dev": true, "bin": { "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=14.18.0", + "node": ">=18.0.0", "npm": ">=8.0.0" }, "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.6.1", + "@rollup/rollup-android-arm64": "4.6.1", + "@rollup/rollup-darwin-arm64": "4.6.1", + "@rollup/rollup-darwin-x64": "4.6.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.6.1", + "@rollup/rollup-linux-arm64-gnu": "4.6.1", + "@rollup/rollup-linux-arm64-musl": "4.6.1", + "@rollup/rollup-linux-x64-gnu": "4.6.1", + "@rollup/rollup-linux-x64-musl": "4.6.1", + "@rollup/rollup-win32-arm64-msvc": "4.6.1", + "@rollup/rollup-win32-ia32-msvc": "4.6.1", + "@rollup/rollup-win32-x64-msvc": "4.6.1", "fsevents": "~2.3.2" } }, @@ -8334,11 +8513,11 @@ } }, "@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "requires": { - "@babel/highlight": "^7.22.13", + "@babel/highlight": "^7.23.4", "chalk": "^2.4.2" } }, @@ -8348,20 +8527,20 @@ "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==" }, "@babel/core": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz", - "integrity": "sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.5.tgz", + "integrity": "sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==", "requires": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.3", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.5", "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.2", - "@babel/parser": "^7.23.3", + "@babel/helpers": "^7.23.5", + "@babel/parser": "^7.23.5", "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.3", - "@babel/types": "^7.23.3", + "@babel/traverse": "^7.23.5", + "@babel/types": "^7.23.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -8377,11 +8556,11 @@ } }, "@babel/generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", - "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.5.tgz", + "integrity": "sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==", "requires": { - "@babel/types": "^7.23.3", + "@babel/types": "^7.23.5", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -8486,9 +8665,9 @@ } }, "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==" }, "@babel/helper-validator-identifier": { "version": "7.22.20", @@ -8501,19 +8680,19 @@ "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==" }, "@babel/helpers": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", - "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.5.tgz", + "integrity": "sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==", "requires": { "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0" + "@babel/traverse": "^7.23.5", + "@babel/types": "^7.23.5" } }, "@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "requires": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", @@ -8521,9 +8700,9 @@ } }, "@babel/parser": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", - "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==" + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.5.tgz", + "integrity": "sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==" }, "@babel/plugin-syntax-jsx": { "version": "7.23.3", @@ -8577,28 +8756,28 @@ } }, "@babel/traverse": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz", - "integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.5.tgz", + "integrity": "sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==", "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.3", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.5", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.3", - "@babel/types": "^7.23.3", + "@babel/parser": "^7.23.5", + "@babel/types": "^7.23.5", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", - "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.5.tgz", + "integrity": "sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==", "requires": { - "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } @@ -8749,156 +8928,156 @@ "version": "0.2.5" }, "@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.8.tgz", + "integrity": "sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA==", "dev": true, "optional": true }, "@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.8.tgz", + "integrity": "sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA==", "dev": true, "optional": true }, "@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.8.tgz", + "integrity": "sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A==", "dev": true, "optional": true }, "@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.8.tgz", + "integrity": "sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw==", "dev": true, "optional": true }, "@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.8.tgz", + "integrity": "sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q==", "dev": true, "optional": true }, "@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.8.tgz", + "integrity": "sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw==", "dev": true, "optional": true }, "@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.8.tgz", + "integrity": "sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg==", "dev": true, "optional": true }, "@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.8.tgz", + "integrity": "sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ==", "dev": true, "optional": true }, "@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.8.tgz", + "integrity": "sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ==", "dev": true, "optional": true }, "@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.8.tgz", + "integrity": "sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ==", "dev": true, "optional": true }, "@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.8.tgz", + "integrity": "sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ==", "dev": true, "optional": true }, "@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.8.tgz", + "integrity": "sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q==", "dev": true, "optional": true }, "@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.8.tgz", + "integrity": "sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg==", "dev": true, "optional": true }, "@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.8.tgz", + "integrity": "sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg==", "dev": true, "optional": true }, "@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.8.tgz", + "integrity": "sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg==", "dev": true, "optional": true }, "@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.8.tgz", + "integrity": "sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg==", "dev": true, "optional": true }, "@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.8.tgz", + "integrity": "sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw==", "dev": true, "optional": true }, "@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.8.tgz", + "integrity": "sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ==", "dev": true, "optional": true }, "@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.8.tgz", + "integrity": "sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w==", "dev": true, "optional": true }, "@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.8.tgz", + "integrity": "sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg==", "dev": true, "optional": true }, "@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.8.tgz", + "integrity": "sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw==", "dev": true, "optional": true }, "@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.8.tgz", + "integrity": "sha512-bfZ0cQ1uZs2PqpulNL5j/3w+GDhP36k1K5c38QdQg+Swy51jFZWWeIkteNsufkQxp986wnqRRsb/bHbY1WQ7TA==", "dev": true, "optional": true }, @@ -9229,10 +9408,94 @@ "picomatch": "^2.2.2" } }, + "@rollup/rollup-android-arm-eabi": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.6.1.tgz", + "integrity": "sha512-0WQ0ouLejaUCRsL93GD4uft3rOmB8qoQMU05Kb8CmMtMBe7XUDLAltxVZI1q6byNqEtU7N1ZX1Vw5lIpgulLQA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-android-arm64": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.6.1.tgz", + "integrity": "sha512-1TKm25Rn20vr5aTGGZqo6E4mzPicCUD79k17EgTLAsXc1zysyi4xXKACfUbwyANEPAEIxkzwue6JZ+stYzWUTA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-arm64": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.6.1.tgz", + "integrity": "sha512-cEXJQY/ZqMACb+nxzDeX9IPLAg7S94xouJJCNVE5BJM8JUEP4HeTF+ti3cmxWeSJo+5D+o8Tc0UAWUkfENdeyw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-x64": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.6.1.tgz", + "integrity": "sha512-LoSU9Xu56isrkV2jLldcKspJ7sSXmZWkAxg7sW/RfF7GS4F5/v4EiqKSMCFbZtDu2Nc1gxxFdQdKwkKS4rwxNg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.6.1.tgz", + "integrity": "sha512-EfI3hzYAy5vFNDqpXsNxXcgRDcFHUWSx5nnRSCKwXuQlI5J9dD84g2Usw81n3FLBNsGCegKGwwTVsSKK9cooSQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-gnu": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.6.1.tgz", + "integrity": "sha512-9lhc4UZstsegbNLhH0Zu6TqvDfmhGzuCWtcTFXY10VjLLUe4Mr0Ye2L3rrtHaDd/J5+tFMEuo5LTCSCMXWfUKw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-musl": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.6.1.tgz", + "integrity": "sha512-FfoOK1yP5ksX3wwZ4Zk1NgyGHZyuRhf99j64I5oEmirV8EFT7+OhUZEnP+x17lcP/QHJNWGsoJwrz4PJ9fBEXw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-gnu": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.6.1.tgz", + "integrity": "sha512-DNGZvZDO5YF7jN5fX8ZqmGLjZEXIJRdJEdTFMhiyXqyXubBa0WVLDWSNlQ5JR2PNgDbEV1VQowhVRUh+74D+RA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-musl": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.6.1.tgz", + "integrity": "sha512-RkJVNVRM+piYy87HrKmhbexCHg3A6Z6MU0W9GHnJwBQNBeyhCJG9KDce4SAMdicQnpURggSvtbGo9xAWOfSvIQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-arm64-msvc": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.6.1.tgz", + "integrity": "sha512-v2FVT6xfnnmTe3W9bJXl6r5KwJglMK/iRlkKiIFfO6ysKs0rDgz7Cwwf3tjldxQUrHL9INT/1r4VA0n9L/F1vQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-ia32-msvc": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.6.1.tgz", + "integrity": "sha512-YEeOjxRyEjqcWphH9dyLbzgkF8wZSKAKUkldRY6dgNR5oKs2LZazqGB41cWJ4Iqqcy9/zqYgmzBkRoVz3Q9MLw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-x64-msvc": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.6.1.tgz", + "integrity": "sha512-0zfTlFAIhgz8V2G8STq8toAjsYYA6eci1hnXuyOTUFnymrtJwnS6uGKiv3v5UrPZkBlamLvrLV2iiaeqCKzb0A==", + "dev": true, + "optional": true + }, "@types/babel__core": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.4.tgz", - "integrity": "sha512-mLnSC22IC4vcWiuObSRjrLd9XcBTGf59vUSoq2jkQDJ/QQ8PMI9rSuzE+aEV8karUMbskw07bKYoUJCKTUaygg==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, "requires": { "@babel/parser": "^7.20.7", @@ -9322,7 +9585,12 @@ "dev": true }, "@types/node": { - "version": "17.0.21" + "version": "20.10.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.3.tgz", + "integrity": "sha512-XJavIpZqiXID5Yxnxv3RUDKTN5b81ddNC3ecsA0SoFXz/QU8OGBwZGMomiq0zw+uuqbL/krztv/DINAQ/EV4gg==", + "requires": { + "undici-types": "~5.26.4" + } }, "@types/normalize-package-data": { "version": "2.4.1", @@ -9345,7 +9613,9 @@ "optional": true }, "@types/react": { - "version": "17.0.39", + "version": "18.2.39", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.39.tgz", + "integrity": "sha512-Oiw+ppED6IremMInLV4HXGbfbG6GyziY3kqAwJYOR0PNbkYDmLWQA3a95EhdSmamsvbkJN96ZNN+YD+fGjzSBA==", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -9394,15 +9664,15 @@ "dev": true }, "@vitejs/plugin-react": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.1.1.tgz", - "integrity": "sha512-Jie2HERK+uh27e+ORXXwEP5h0Y2lS9T2PRGbfebiHGlwzDO0dEnd2aNtOR/qjBlPb1YgxwAONeblL1xqLikLag==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", + "integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==", "dev": true, "requires": { - "@babel/core": "^7.23.2", - "@babel/plugin-transform-react-jsx-self": "^7.22.5", - "@babel/plugin-transform-react-jsx-source": "^7.22.5", - "@types/babel__core": "^7.20.3", + "@babel/core": "^7.23.5", + "@babel/plugin-transform-react-jsx-self": "^7.23.3", + "@babel/plugin-transform-react-jsx-source": "^7.23.3", + "@types/babel__core": "^7.20.5", "react-refresh": "^0.14.0" } }, @@ -10413,33 +10683,33 @@ } }, "esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.8.tgz", + "integrity": "sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.19.8", + "@esbuild/android-arm64": "0.19.8", + "@esbuild/android-x64": "0.19.8", + "@esbuild/darwin-arm64": "0.19.8", + "@esbuild/darwin-x64": "0.19.8", + "@esbuild/freebsd-arm64": "0.19.8", + "@esbuild/freebsd-x64": "0.19.8", + "@esbuild/linux-arm": "0.19.8", + "@esbuild/linux-arm64": "0.19.8", + "@esbuild/linux-ia32": "0.19.8", + "@esbuild/linux-loong64": "0.19.8", + "@esbuild/linux-mips64el": "0.19.8", + "@esbuild/linux-ppc64": "0.19.8", + "@esbuild/linux-riscv64": "0.19.8", + "@esbuild/linux-s390x": "0.19.8", + "@esbuild/linux-x64": "0.19.8", + "@esbuild/netbsd-x64": "0.19.8", + "@esbuild/openbsd-x64": "0.19.8", + "@esbuild/sunos-x64": "0.19.8", + "@esbuild/win32-arm64": "0.19.8", + "@esbuild/win32-ia32": "0.19.8", + "@esbuild/win32-x64": "0.19.8" } }, "escalade": { @@ -10930,9 +11200,9 @@ "dev": true }, "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "optional": true }, @@ -11858,9 +12128,9 @@ "version": "2.1.2" }, "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" }, "natural-compare": { "version": "1.4.0", @@ -12125,11 +12395,11 @@ "version": "2.3.1" }, "postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.4.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", + "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", "requires": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } @@ -13444,6 +13714,11 @@ "react-lifecycles-compat": "^3.0.4" } }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, "update-browserslist-db": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", @@ -13514,23 +13789,35 @@ "integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==" }, "vite": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", - "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.6.tgz", + "integrity": "sha512-MD3joyAEBtV7QZPl2JVVUai6zHms3YOmLR+BpMzLlX2Yzjfcc4gTgNi09d/Rua3F4EtC8zdwPU8eQYyib4vVMQ==", "dev": true, "requires": { - "esbuild": "^0.18.10", - "fsevents": "~2.3.2", - "postcss": "^8.4.27", - "rollup": "^3.27.1" + "esbuild": "^0.19.3", + "fsevents": "~2.3.3", + "postcss": "^8.4.32", + "rollup": "^4.2.0" }, "dependencies": { "rollup": { - "version": "3.29.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", - "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.6.1.tgz", + "integrity": "sha512-jZHaZotEHQaHLgKr8JnQiDT1rmatjgKlMekyksz+yk9jt/8z9quNjnKNRoaM0wd9DC2QKXjmWWuDYtM3jfF8pQ==", "dev": true, "requires": { + "@rollup/rollup-android-arm-eabi": "4.6.1", + "@rollup/rollup-android-arm64": "4.6.1", + "@rollup/rollup-darwin-arm64": "4.6.1", + "@rollup/rollup-darwin-x64": "4.6.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.6.1", + "@rollup/rollup-linux-arm64-gnu": "4.6.1", + "@rollup/rollup-linux-arm64-musl": "4.6.1", + "@rollup/rollup-linux-x64-gnu": "4.6.1", + "@rollup/rollup-linux-x64-musl": "4.6.1", + "@rollup/rollup-win32-arm64-msvc": "4.6.1", + "@rollup/rollup-win32-ia32-msvc": "4.6.1", + "@rollup/rollup-win32-x64-msvc": "4.6.1", "fsevents": "~2.3.2" } } diff --git a/package.json b/package.json index 32fb31014b74..bdff861cc3bf 100644 --- a/package.json +++ b/package.json @@ -88,8 +88,9 @@ "styled-components": "^5.3.3" }, "devDependencies": { + "@types/react": "^18.2.39", "@types/react-helmet": "^6.1.5", - "@vitejs/plugin-react": "^4.1.1", + "@vitejs/plugin-react": "^4.2.1", "auto-changelog": "~2.3.0", "browserslist-to-esbuild": "^1.2.0", "eslint": "^8.54.0", @@ -108,7 +109,7 @@ "stylelint": "^14.3.0", "stylelint-config-sass-guidelines": "^9.0.1", "stylelint-order": "^5.0.0", - "vite": "^4.5.0", + "vite": "^5.0.6", "vite-plugin-eslint": "^1.8.1" }, "engines": { diff --git a/public/version_latest.txt b/public/version_latest.txt index 4178d093f02e..6ca6df113f09 100644 --- a/public/version_latest.txt +++ b/public/version_latest.txt @@ -1 +1 @@ -4.7.3 \ No newline at end of file +4.8.0 \ No newline at end of file diff --git a/src/_nav.jsx b/src/_nav.jsx index 6d069007e1f2..fc47f52686b5 100644 --- a/src/_nav.jsx +++ b/src/_nav.jsx @@ -50,6 +50,11 @@ const _nav = [ name: 'Groups', to: '/identity/administration/groups', }, + { + component: CNavItem, + name: 'Deploy Group Template', + to: '/identity/administration/deploy-group-template', + }, { component: CNavItem, name: 'Group Templates', @@ -57,8 +62,8 @@ const _nav = [ }, { component: CNavItem, - name: 'Deploy Group Template', - to: '/identity/administration/deploy-group-template', + name: 'Deleted Items', + to: '/identity/administration/deleted-items', }, { component: CNavItem, @@ -70,11 +75,6 @@ const _nav = [ name: 'Offboarding Wizard', to: '/identity/administration/offboarding-wizard', }, - { - component: CNavItem, - name: 'Deleted Items', - to: '/identity/administration/deleted-items', - }, ], }, { @@ -152,7 +152,7 @@ const _nav = [ { component: CNavGroup, name: 'Tools', - section: 'Tools', + section: 'Tenant Administration', to: '/tenant/administration', icon: , items: [ @@ -197,13 +197,13 @@ const _nav = [ items: [ { component: CNavItem, - name: 'Edit Individual Standards', + name: 'Edit Standards', to: '/tenant/standards/list-applied-standards', }, { component: CNavItem, - name: 'Standards Wizard', - to: '/tenant/standards/apply-standard', + name: 'List Standards', + to: '/tenant/standards/list-standards', }, { component: CNavItem, @@ -220,85 +220,75 @@ const _nav = [ { component: CNavGroup, name: 'Conditional Access', - section: 'Conditional Access', + section: 'Tenant Administration', to: '/tenant/administration', icon: , items: [ { component: CNavItem, - name: 'Policies', + name: 'CA Policies', to: '/tenant/conditional/list-policies', }, { component: CNavItem, - name: 'Named Locations', - to: '/tenant/conditional/list-named-locations', + name: 'Deploy CA Policies', + to: '/tenant/conditional/deploy', }, { component: CNavItem, - name: 'Deploy Conditional Access', - to: '/tenant/conditional/deploy', + name: 'CA Templates', + to: '/tenant/conditional/list-template', }, { component: CNavItem, - name: 'Deploy Named Locations', - to: '/tenant/conditional/deploy-named-location', + name: 'Add CA Template', + to: '/tenant/conditional/add-template', }, { component: CNavItem, - name: 'Add Template', - to: '/tenant/conditional/add-template', + name: 'Named Locations', + to: '/tenant/conditional/list-named-locations', }, { component: CNavItem, - name: 'Templates', - to: '/tenant/conditional/list-template', + name: 'Deploy Named Locations', + to: '/tenant/conditional/deploy-named-location', }, ], }, { component: CNavGroup, name: 'GDAP Management', - section: 'Settings', + section: 'Tenant Administration', to: '/cipp/gdap', icon: , items: [ { component: CNavItem, - name: 'Role Wizard', - to: '/tenant/administration/gdap-role-wizard', + name: 'Invite Wizard', + to: '/tenant/administration/gdap-invite', }, { component: CNavItem, - name: 'GDAP Roles', - to: '/tenant/administration/gdap-roles', + name: 'GDAP Relationships', + to: '/tenant/administration/gdap-relationships', }, - // { - // component: CNavItem, - // name: 'Migration Wizard', - // to: '/tenant/administration/gdap', - // }, - // { - // component: CNavItem, - // name: 'GDAP Migration Status', - // to: '/tenant/administration/gdap-status', - // }, { component: CNavItem, - name: 'Invite Wizard', - to: '/tenant/administration/gdap-invite', + name: 'Role Wizard', + to: '/tenant/administration/gdap-role-wizard', }, { component: CNavItem, - name: 'GDAP Relationships', - to: '/tenant/administration/gdap-relationships', + name: 'GDAP Roles', + to: '/tenant/administration/gdap-roles', }, ], }, { component: CNavGroup, name: 'Reports', - section: 'Reports', + section: 'Tenant Administration', to: '/tenant/reports', icon: , items: [ @@ -351,13 +341,13 @@ const _nav = [ items: [ { component: CNavItem, - name: 'Defender Deployment', - to: '/security/defender/deployment', + name: 'Defender Status', + to: '/security/defender/list-defender', }, { component: CNavItem, - name: 'Defender Status', - to: '/security/defender/list-defender', + name: 'Defender Deployment', + to: '/security/defender/deployment', }, { component: CNavItem, @@ -387,7 +377,7 @@ const _nav = [ { component: CNavGroup, name: 'Applications', - section: 'Endpoint Management', + section: 'Intune', to: '/endpoint/applications', icon: , items: [ @@ -426,46 +416,46 @@ const _nav = [ { component: CNavGroup, name: 'Autopilot', - section: 'Endpoint Management', + section: 'Intune', to: '/endpoint/autopilot', icon: , items: [ { component: CNavItem, - name: 'Add Device', - to: '/endpoint/autopilot/add-device', + name: 'Autopilot Devices', + to: '/endpoint/autopilot/list-devices', }, { component: CNavItem, - name: 'Add Profile', - to: '/endpoint/autopilot/add-profile', + name: 'Add Autopilot Device', + to: '/endpoint/autopilot/add-device', }, { component: CNavItem, - name: 'Add Status Page', - to: '/endpoint/autopilot/add-status-page', + name: 'Profiles', + to: '/endpoint/autopilot/list-profiles', }, { component: CNavItem, - name: 'Autopilot Devices', - to: '/endpoint/autopilot/list-devices', + name: 'Add Profile', + to: '/endpoint/autopilot/add-profile', }, { component: CNavItem, - name: 'Profiles', - to: '/endpoint/autopilot/list-profiles', + name: 'Status Pages', + to: '/endpoint/autopilot/list-status-pages', }, { component: CNavItem, - name: 'Status Pages', - to: '/endpoint/autopilot/list-status-pages', + name: 'Add Status Page', + to: '/endpoint/autopilot/add-status-page', }, ], }, { component: CNavGroup, name: 'Device Management', - section: 'Endpoint Management', + section: 'Intune', to: '/endpoint/MEM', icon: , items: [ @@ -486,13 +476,13 @@ const _nav = [ }, { component: CNavItem, - name: 'Add Policy Template', - to: '/endpoint/MEM/add-policy-template', + name: 'Policy Templates', + to: '/endpoint/MEM/list-templates', }, { component: CNavItem, - name: 'Templates', - to: '/endpoint/MEM/list-templates', + name: 'Add Policy Template', + to: '/endpoint/MEM/add-policy-template', }, ], }, @@ -535,11 +525,6 @@ const _nav = [ to: '/teams-share/teams', icon: , items: [ - { - component: CNavItem, - name: 'Business Voice', - to: '/teams-share/teams/business-voice', - }, { component: CNavItem, name: 'Teams', @@ -555,6 +540,11 @@ const _nav = [ name: 'Teams Activity', to: '/teams-share/teams/teams-activity', }, + { + component: CNavItem, + name: 'Business Voice', + to: '/teams-share/teams/business-voice', + }, ], }, { @@ -590,10 +580,29 @@ const _nav = [ }, ], }, + { + component: CNavGroup, + name: 'Tools', + section: 'Email & Exchange', + to: '/email/tools', + icon: , + items: [ + { + component: CNavItem, + name: 'Mailbox Restore Wizard', + to: '/email/tools/mailbox-restore-wizard', + }, + { + component: CNavItem, + name: 'Mailbox Restores', + to: '/email/tools/mailbox-restores', + }, + ], + }, { component: CNavGroup, name: 'Transport', - section: 'Transport Rules', + section: 'Email & Exchange', to: '/tenant/administration', icon: , items: [ @@ -604,13 +613,13 @@ const _nav = [ }, { component: CNavItem, - name: 'Transport Templates', - to: '/email/transport/list-templates', + name: 'Deploy Transport rule', + to: '/email/transport/deploy-rules', }, { component: CNavItem, - name: 'Deploy Transport rule', - to: '/email/transport/deploy-rules', + name: 'Transport Templates', + to: '/email/transport/list-templates', }, { component: CNavItem, @@ -619,20 +628,20 @@ const _nav = [ }, { component: CNavItem, - name: 'Connector Templates', - to: '/email/connectors/list-connector-templates', + name: 'Deploy Connector Templates', + to: '/email/connectors/deploy-connector', }, { component: CNavItem, - name: 'Deploy Connector Templates', - to: '/email/connectors/deploy-connector', + name: 'Connector Templates', + to: '/email/connectors/list-connector-templates', }, ], }, { component: CNavGroup, name: 'Spamfilter', - section: 'Spamfilter', + section: 'Email & Exchange', to: '/tenant/administration', icon: , items: [ @@ -687,25 +696,6 @@ const _nav = [ }, ], }, - { - component: CNavGroup, - name: 'Tools', - section: 'Tools', - to: '/email/tools', - icon: , - items: [ - { - component: CNavItem, - name: 'Mailbox Restore Wizard', - to: '/email/tools/mailbox-restore-wizard', - }, - { - component: CNavItem, - name: 'Mailbox Restores', - to: '/email/tools/mailbox-restores', - }, - ], - }, { component: CNavTitle, name: 'Settings', diff --git a/src/adminRoutes.js b/src/adminRoutes.js index 9031558d3150..5192ca20a203 100644 --- a/src/adminRoutes.js +++ b/src/adminRoutes.js @@ -1,7 +1,7 @@ import React from 'react' const CIPPSettings = React.lazy(() => import('src/views/cipp/CIPPSettings')) const Setup = React.lazy(() => import('src/views/cipp/Setup')) -const ApplyStandard = React.lazy(() => import('src/views/tenant/standards/ApplyStandard')) +const ApplyStandard = React.lazy(() => import('src/views/tenant/standards/ListStandards')) const GDAPStatus = React.lazy(() => import('src/views/tenant/administration/ListGDAPQueue')) const GDAP = React.lazy(() => import('src/views/tenant/administration/GDAPWizard')) const GDAPInvite = React.lazy(() => import('src/views/tenant/administration/GDAPInviteWizard')) @@ -40,7 +40,7 @@ const adminRoutes = [ }, { path: '/tenant/administration/appapproval', name: 'App Approval', component: appapproval }, { path: '/tenant/administration/gdap-status', name: 'GDAP Status', component: GDAPStatus }, - { path: '/tenant/standards/apply-standard', name: 'Apply Standard', component: ApplyStandard }, + { path: '/tenant/standards/list-standards', name: 'List Standard', component: ApplyStandard }, { path: '/tenant/administration/tenant-offboarding-wizard', name: 'Tenant Offboarding', diff --git a/src/components/buttons/CsvButton.jsx b/src/components/buttons/CsvButton.jsx index 1e643f38c571..855ba10ea132 100644 --- a/src/components/buttons/CsvButton.jsx +++ b/src/components/buttons/CsvButton.jsx @@ -8,9 +8,8 @@ import { faFileCsv } from '@fortawesome/free-solid-svg-icons' function ExportCsvButton(props) { return ( - - - + + {props.nameText} ) } @@ -18,5 +17,6 @@ export default ExportCsvButton ExportCsvButton.propTypes = { csvData: PropTypes.array.isRequired, + nameText: PropTypes.string, reportName: PropTypes.oneOfType([PropTypes.element, PropTypes.string, PropTypes.number]), } diff --git a/src/components/buttons/PdfButton.jsx b/src/components/buttons/PdfButton.jsx index 0671910acec4..4bfda756a7e4 100644 --- a/src/components/buttons/PdfButton.jsx +++ b/src/components/buttons/PdfButton.jsx @@ -1,5 +1,5 @@ import React from 'react' -import { CButton } from '@coreui/react' +import { CButton, CDropdownItem } from '@coreui/react' import jsPDF from 'jspdf' import 'jspdf-autotable' import PropTypes from 'prop-types' @@ -39,13 +39,12 @@ function ExportPDFButton(props) { } return ( - exportPDF(props.pdfData, props.pdfHeaders, props.pdfSize, props.reportName)} > - - + + {props.nameText} + ) } export default ExportPDFButton @@ -55,4 +54,5 @@ ExportPDFButton.propTypes = { pdfHeaders: PropTypes.oneOfType([PropTypes.string, PropTypes.array]), pdfSize: PropTypes.oneOf(['A1', 'A2', 'A3', 'A4']), reportName: PropTypes.oneOfType([PropTypes.element, PropTypes.string, PropTypes.number]), + nameText: PropTypes.string, } diff --git a/src/components/tables/CellBoolean.jsx b/src/components/tables/CellBoolean.jsx index 8d5a31138f63..fc23282f7a2c 100644 --- a/src/components/tables/CellBoolean.jsx +++ b/src/components/tables/CellBoolean.jsx @@ -63,7 +63,7 @@ export default function CellBoolean({ } } - if (cell === '' && !noDataIsFalse) { + if ((cell === '' && !noDataIsFalse) || cell === undefined) { return } else if (colourless && warning && reverse) { return nocolour(colourless, normalized ? : ) diff --git a/src/components/tables/CippTable.jsx b/src/components/tables/CippTable.jsx index db02e0acdd6e..5effb0f2b538 100644 --- a/src/components/tables/CippTable.jsx +++ b/src/components/tables/CippTable.jsx @@ -23,7 +23,15 @@ import { import DataTable, { createTheme } from 'react-data-table-component' import PropTypes from 'prop-types' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' -import { faCheck, faColumns, faSearch, faSync, faTasks } from '@fortawesome/free-solid-svg-icons' +import { + faCheck, + faColumns, + faFileCsv, + faFilePdf, + faSearch, + faSync, + faTasks, +} from '@fortawesome/free-solid-svg-icons' import { cellGenericFormatter } from './CellGenericFormat' import { ModalService } from '../utilities' import { useLazyGenericGetRequestQuery, useLazyGenericPostRequestQuery } from 'src/store/api/app' @@ -177,7 +185,6 @@ export default function CippTable({ (e) => { if (graphFilterFunction) { graphFilterFunction(e) - console.log(e) } }, [graphFilterFunction], @@ -613,19 +620,71 @@ export default function CippTable({ } defaultActions.push([ - , + + + + + + {dataKeys() && ( + <> + + + )} + + , ]) } if (!disableCSVExport) { defaultActions.push([ - , + <> + + + + + + {dataKeys() && ( + <> + + + + + + + + )} + + + , ]) } } @@ -686,6 +745,7 @@ export default function CippTable({ columns, reportName, selectedRows, + filteredItems, ]) const tablePageSize = useSelector((state) => state.app.tablePageSize) diff --git a/src/data/standards.json b/src/data/standards.json index 4ef78d3553e4..b38bc7eafca9 100644 --- a/src/data/standards.json +++ b/src/data/standards.json @@ -1,585 +1,669 @@ [ { - "name": "standards.MailContacts.GeneralContact.Enabled", - "cat": "Global", - "helpText": "Receives emails about updates about subscriptions etc", - "addedComponent": { - "type": "input", - "name": "standards.MailContacts.GeneralContact.Mail", - "label": "General Contact" + "name": "standards.MailContacts", + "cat": "Global Standards", + "helpText": "Defines the email address to receive general updates and information related to M365 subscriptions. Leave a contact field blank if you do not want to update the contact information.", + "disabledFeatures": { + "report": false, + "warn": false, + "remediate": false }, - "label": "Set General Contact e-mail" - }, - { - "name": "standards.MailContacts.SecurityContact.Enabled", - "cat": "Global", - "helpText": "Receives emails about security alerts or advisories by Microsoft", - "addedComponent": { - "type": "input", - "name": "standards.MailContacts.SecurityContact.Mail", - "label": "Security Contact" - }, - "label": "Set Security Contact e-mail" - }, - { - "name": "standards.MailContacts.MarketingContact.Enabled", - "cat": "Global", - "helpText": "Receives the emails related to marketing; new features etc", - "addedComponent": { - "type": "input", - "name": "standards.MailContacts.MarketingContact.Mail", - "label": "Marketing Contact" - }, - "label": "Set Marketing Contact e-mail" - }, - { - "name": "standards.MailContacts.TechContact.Enabled", - "cat": "Global", - "helpText": "Receives emails related to possible technical issues, service disruptions, etc", - "addedComponent": { - "type": "input", - "name": "standards.MailContacts.TechContact.Mail", - "label": "Technical Contact" - }, - "label": "Set Technical Contact e-mail" + "addedComponent": [ + { + "type": "input", + "name": "standards.MailContacts.GeneralContact", + "label": "General Contact" + }, + { + "type": "input", + "name": "standards.MailContacts.SecurityContact", + "label": "Security Contact" + }, + { + "type": "input", + "name": "standards.MailContacts.MarketingContact", + "label": "Marketing Contact" + }, + { + "type": "input", + "name": "standards.MailContacts.TechContact", + "label": "Technical Contact" + } + ], + "label": "Set contact e-mails", + "impact": "Low Impact", + "impactColour": "info" }, { "name": "standards.AuditLog", - "cat": "Global", - "helpText": "Also runs Enable-OrganizationCustomization if needed", - "addedComponent": null, - "label": "Enable the Unified Audit Log" + "cat": "Global Standards", + "helpText": "Enables the Unified Audit Log for tracking and auditing activities; also runs Enable-OrganizationCustomization if necessary.", + "addedComponent": [], + "label": "Enable the Unified Audit Log", + "impact": "Low Impact", + "impactColour": "info" }, { "name": "standards.AnonReportDisable", - "cat": "Global", - "helpText": "", - "addedComponent": null, - "label": "Enable Usernames instead of pseudo anonymised names in reports" + "cat": "Global Standards", + "helpText": "Shows usernames instead of pseudo anonymised names in reports. This standard is required for reporting to work correctly.", + "addedComponent": [], + "label": "Enable Usernames instead of pseudo anonymised names in reports", + "impact": "Low Impact", + "impactColour": "info" }, { "name": "standards.DisableGuestDirectory", - "cat": "Global", - "helpText": "See the standards documentation for more information about the implications of this standard", - "addedComponent": null, - "label": "Restrict guest user access to directory objects" + "cat": "Global Standards", + "helpText": "Disables Guest access to enumerate directory objects. This prevents guest users from see other users or guests in the directory.", + "addedComponent": [], + "label": "Restrict guest user access to directory objects", + "impact": "Low Impact", + "impactColour": "info" }, { "name": "standards.DisableBasicAuthSMTP", - "cat": "Global", - "helpText": "Disables SMTP AUTH for the organization. This is the default for new tenants. Can be overridden by enabling SMTP AUTH on specific users", - "addedComponent": null, - "label": "Disable SMTP Basic Authentication" + "cat": "Global Standards", + "helpText": "Disables SMTP AUTH for the organization. This is the default for new tenants. Sets the entire tenant to no longer allow SMTP AUTH, and as such has no exclusions.", + "addedComponent": [], + "label": "Disable SMTP Basic Authentication", + "impact": "Medium Impact", + "impactColour": "warning" + }, + { + "name": "standards.ActivityBasedTimeout", + "cat": "Global Standards", + "helpText": "Enables and sets Idle session timeout for Microsoft 365 to 1 hour. This policy affects most M365 web apps", + "addedComponent": [], + "label": "Enable 1 hour Activity based Timeout", + "impact": "Medium Impact", + "impactColour": "warning" }, { "name": "standards.laps", - "cat": "AAD", - "helpText": "Enables the tenant to use LAPS", - "addedComponent": null, - "label": "Enable LAPs on the tenant" + "cat": "Entra (AAD) Standards", + "helpText": "Enables the tenant to use LAPS. You must still create a policy for LAPS to be active on all devices. Use the template standards to deploy this by default.", + "addedComponent": [], + "label": "Enable LAPs on the tenant", + "impact": "Low Impact", + "impactColour": "info" }, { - "cat": "AAD", + "cat": "Entra (AAD) Standards", "name": "standards.PWdisplayAppInformationRequiredState", - "helpText": "Enables the MS authenticator app to display information about the app that is requesting authentication", - "addedComponent": null, - "label": "Enable Passwordless with Location information and Number Matching" + "helpText": "Enables the MS authenticator app to display information about the app that is requesting authentication. This displays the application name.", + "addedComponent": [], + "label": "Enable Passwordless with Location information and Number Matching", + "impact": "Low Impact", + "impactColour": "info" }, { - "cat": "AAD", + "cat": "Entra (AAD) Standards", "name": "standards.allowOTPTokens", - "helpText": "Allows you to use MS authenticator OTP tokens", - "addedComponent": null, - "label": "Enable OTP via Authenticator." - }, - { - "cat": "AAD", - "name": "standards.allowOAuthTokens", "helpText": "Allows you to use any OTP token generator", - "addedComponent": null, - "label": "Enable OTP Software oAuth tokens." - }, - { - "cat": "AAD", - "name": "standards.PWcompanionAppAllowedState.Enabled", - "helpText": "Sets the state of Authenticator Lite, in Outlook for mobile", - "addedComponent": { - "type": "Select", - "label": "Select value", - "name": "standards.PWcompanionAppAllowedState.state", - "values": [ - { - "label": "Enabled", - "value": "enabled" - }, - { - "label": "Disabled", - "value": "disabled" - } - ] - }, - "label": "Set Authenticator Lite state" - }, - { - "cat": "AAD", - "name": "standards.TAP.Enabled", - "helpText": "Enables TAP and sets the default TAP lifetime to 1 hour and maximum lifetime to 8 hours.", - "addedComponent": { - "type": "Select", - "label": "Select TAP Lifetime", - "name": "standards.TAP.config", - "values": [ - { - "label": "Only Once", - "value": "true" - }, - { - "label": "Multiple Logons", - "value": "false" - } - ] - }, - "label": "Enable Temporary Access Passwords" - }, - { - "cat": "AAD", - "name": "standards.SecurityDefaults", - "helpText": "Enables security defaults for the tenant. This has a lot of implications and should be carefully considered before enabling", - "addedComponent": null, - "label": "Enable Security Defaults" + "addedComponent": [], + "label": "Enable OTP via Authenticator.", + "impact": "Low Impact", + "impactColour": "info" }, { - "cat": "AAD", + "cat": "Entra (AAD) Standards", + "name": "standards.allowOAuthTokens", + "helpText": "Allows you to use any software OAuth token generator", + "addedComponent": [], + "label": "Enable OTP Software oAuth tokens.", + "impact": "Low Impact", + "impactColour": "info" + }, + { + "cat": "Entra (AAD) Standards", + "name": "standards.PWcompanionAppAllowedState", + "helpText": "Sets the state of Authenticator Lite, Authenticator lite is a companion app for passwordless authentication.", + "addedComponent": [ + { + "type": "Select", + "label": "Select value", + "name": "standards.PWcompanionAppAllowedState.state", + "values": [ + { + "label": "Enabled", + "value": "enabled" + }, + { + "label": "Disabled", + "value": "disabled" + } + ] + } + ], + "label": "Set Authenticator Lite state", + "impact": "Low Impact", + "impactColour": "info" + }, + { + "cat": "Entra (AAD) Standards", + "name": "standards.TAP", + "helpText": "Enables TAP and sets the default TAP lifetime to 1 hour. This configuration also allows you to select is a TAP is single use or multi-logon.", + "addedComponent": [ + { + "type": "Select", + "label": "Select TAP Lifetime", + "name": "standards.TAP.config", + "values": [ + { + "label": "Only Once", + "value": "true" + }, + { + "label": "Multiple Logons", + "value": "false" + } + ] + } + ], + "label": "Enable Temporary Access Passwords", + "impact": "Low Impact", + "impactColour": "info" + }, + { + "cat": "Entra (AAD) Standards", "name": "standards.PasswordExpireDisabled", - "helpText": "Disables the expiration of passwords for the tenant", - "addedComponent": null, - "label": "Do not expire passwords" - }, - { - "cat": "AAD", - "name": "standards.DisableSecurityGroupUsers", - "helpText": "Completely disables the creation of security groups by users. This also breaks the ability to manage groups themselves, or create Teams", - "addedComponent": null, - "label": "Disable Security Group creation by users" + "helpText": "Disables the expiration of passwords for the tenant by setting the password expiration policy to never expire for any user.", + "addedComponent": [], + "label": "Do not expire passwords", + "impact": "Low Impact", + "impactColour": "info" }, { - "cat": "AAD", + "cat": "Entra (AAD) Standards", "name": "standards.DisableTenantCreation", - "helpText": "Restricts creation of M365 tenants to the Global Administrator or Tenant Creator roles", - "addedComponent": null, - "label": "Disable M365 Tenant creation by users" - }, - { - "cat": "AAD", - "name": "standards.OauthConsent.Enabled", - "helpText": "Disables users from being able to consent to applications, except for those specified in the field below", - "addedComponent": { - "type": "input", - "name": "standards.OauthConsent.AllowedApps", - "label": "Allowed application IDs, comma separated" - }, - "label": "Require admin consent for applications (Prevent OAuth phishing.)" - }, - { - "cat": "AAD", - "name": "standards.OauthConsentLowSec", - "helpText": "", - "label": "Allow users to consent to applications with low security risk (Prevent OAuth phishing. Lower impact, less secure.)" + "helpText": "Restricts creation of M365 tenants to the Global Administrator or Tenant Creator roles. ", + "addedComponent": [], + "label": "Disable M365 Tenant creation by users", + "impact": "Low Impact", + "impactColour": "info" }, { - "cat": "AAD", - "name": "standards.EnableAppConsentRequests.Enabled", + "cat": "Entra (AAD) Standards", + "name": "standards.EnableAppConsentRequests", "helpText": "Enables App consent admin requests for the tenant via the GA role. Does not overwrite existing reviewer settings", - "addedComponent": { - "type": "AdminRolesMultiSelect", - "label": "App Consent Reviewer Roles", - "name": "standards.EnableAppConsentRequests.ReviewerRoles" - }, - "label": "Enable App consent admin requests" - }, - { - "cat": "AAD", - "name": "standards.LegacyMFACleanup", - "helpText": "Removes legacy Per-User MFA if the tenant has Security Defaults or an All Users Conditional Access rule enabled.", - "addedComponent": null, - "label": "Remove Legacy MFA if SD or CA is active" - }, - { - "cat": "AAD", + "addedComponent": [ + { + "type": "AdminRolesMultiSelect", + "label": "App Consent Reviewer Roles", + "name": "standards.EnableAppConsentRequests.ReviewerRoles" + } + ], + "label": "Enable App consent admin requests", + "impact": "Low Impact", + "impactColour": "info" + }, + { + "cat": "Entra (AAD) Standards", "name": "standards.NudgeMFA.enable", "helpText": "Enables registration campaign for the tenant", - "addedComponent": null, - "label": "Request to setup Authenticator if not setup yet." + "addedComponent": [], + "label": "Request to setup Authenticator if not setup yet.", + "impact": "Low Impact", + "impactColour": "info" }, { - "cat": "AAD", + "cat": "Entra (AAD) Standards", "name": "standards.NudgeMFA.disable", "helpText": "Disables registration campaign for the tenant", - "addedComponent": null, - "label": "Disables the request to setup Authenticator if setup." - }, - { - "cat": "AAD", - "name": "standards.DisableSelfServiceLicenses", - "helpText": "This standard currently does not function and can be safely disabled", - "addedComponent": null, - "label": "Disable Self Service Licensing" + "addedComponent": [], + "label": "Disables the request to setup Authenticator if setup.", + "impact": "Low Impact", + "impactColour": "info" }, { - "cat": "AAD", + "cat": "Entra (AAD) Standards", "name": "standards.DisableM365GroupUsers", "helpText": "Restricts M365 group creation to certain admin roles. This disables the ability to create Teams, Sharepoint sites, Planner, etc", - "addedComponent": null, - "label": "Disable M365 Group creation by users" - }, - { - "cat": "AAD", - "name": "standards.UndoOauth", - "helpText": "Disables App consent and set to Allow user consent for apps", - "addedComponent": null, - "label": "Undo App Consent Standard" - }, - { - "cat": "AAD", - "name": "standards.DisableGuests", - "helpText": "Blocks login for guest users that have not logged in for 90 days", - "addedComponent": null, - "label": "Disable Guest accounts that have not logged on for 90 days" + "addedComponent": [], + "label": "Disable M365 Group creation by users", + "impact": "Low Impact", + "impactColour": "info" }, { - "cat": "AAD", + "cat": "Entra (AAD) Standards", "name": "standards.EnableFIDO2", "helpText": "Enables the FIDO2 authenticationMethod for the tenant", - "addedComponent": null, - "label": "Enable FIDO2 capabilities" + "addedComponent": [], + "label": "Enable FIDO2 capabilities", + "impact": "Low Impact", + "impactColour": "info" }, - { - "name": "standards.OutBoundSpamAlert.Enabled", - "cat": "Exchange", - "helpText": "Set the Outbound Spam Alert e-mail address.", - "addedComponent": { - "type": "input", - "name": "standards.OutBoundSpamAlert.OutboundSpamContact", - "label": "Outbound spam contact" - }, - "label": "Set Outbound Spam Alert e-mail" + "cat": "Entra (AAD) Standards", + "name": "standards.DisableSecurityGroupUsers", + "helpText": "Completely disables the creation of security groups by users. This also breaks the ability to manage groups themselves, or create Teams", + "addedComponent": [], + "label": "Disable Security Group creation by users", + "impact": "Medium Impact", + "impactColour": "warning" }, { - "name": "standards.SafeSendersDisable", - "cat": "Exchange", - "helpText": "", - "addedComponent": null, - "label": "Remove Safe Senders to prevent SPF bypass" + "cat": "Entra (AAD) Standards", + "name": "standards.LegacyMFACleanup", + "helpText": "Removes legacy Per-User MFA if the tenant has Security Defaults or an All Users Conditional Access rule enabled.", + "addedComponent": [], + "label": "Remove Legacy MFA if SD or CA is active", + "impact": "Medium Impact", + "impactColour": "warning" }, { - "name": "standards.DisableSharedMailbox", - "cat": "Exchange", - "helpText": "Blocks login for all accounts that are marked as a shared mailbox", - "addedComponent": null, - "label": "Disable Shared Mailbox AAD accounts" + "cat": "Entra (AAD) Standards", + "name": "standards.DisableSelfServiceLicenses", + "helpText": "This standard currently does not function and can be safely disabled", + "addedComponent": [], + "label": "Disable Self Service Licensing", + "impact": "Medium Impact", + "impactColour": "warning" }, { - "name": "standards.DelegateSentItems", - "cat": "Exchange", - "helpText": "Sets emails sent as and on behalf of shared mailboxes to also be stored in the shared mailbox sent items folder", - "addedComponent": null, - "label": "Set mailbox Sent Items delegation (Sent items for shared mailboxes)" + "cat": "Entra (AAD) Standards", + "name": "standards.DisableGuests", + "helpText": "Blocks login for guest users that have not logged in for 90 days", + "addedComponent": [], + "label": "Disable Guest accounts that have not logged on for 90 days", + "impact": "Medium Impact", + "impactColour": "warning" }, { - "name": "standards.SendFromAlias", - "cat": "Exchange", - "helpText": "", - "addedComponent": null, - "label": "Allow users to send from their alias addresses" + "cat": "Entra (AAD) Standards", + "name": "standards.SecurityDefaults", + "helpText": "Enables security defaults for the tenant, for newer tenants this is enabled by default. Do not enable this feature if you use Conditional Access.", + "addedComponent": [], + "label": "Enable Security Defaults", + "impact": "High Impact", + "impactColour": "danger" }, { - "name": "standards.AutoExpandArchive", - "cat": "Exchange", - "helpText": "Enables auto-expanding archives for the tenant", - "addedComponent": null, - "label": "Enable Auto-expanding archives" + "cat": "Entra (AAD) Standards", + "name": "standards.UndoOauth", + "disabledFeatures": { + "report": true, + "warn": true, + "remediate": false + }, + "helpText": "Disables App consent and set to Allow user consent for apps", + "addedComponent": [], + "label": "Undo App Consent Standard", + "impact": "High Impact", + "impactColour": "danger" }, { - "name": "standards.SpoofWarn.enable", - "cat": "Exchange", - "helpText": "Adds indicators to e-mail messages received from external senders in Outlook. Works on all Outlook clients/OWA", - "addedComponent": null, - "label": "Enable Spoofing warnings for Outlook (This e-mail is external identifiers)" + "cat": "Entra (AAD) Standards", + "name": "standards.OauthConsent", + "helpText": "Disables users from being able to consent to applications, except for those specified in the field below", + "addedComponent": [ + { + "type": "input", + "name": "standards.OauthConsent.AllowedApps", + "label": "Allowed application IDs, comma separated" + } + ], + "label": "Require admin consent for applications (Prevent OAuth phishing.)", + "impact": "Medium impact", + "impactColour": "warning" + }, + { + "cat": "Entra (AAD) Standards", + "name": "standards.OauthConsentLowSec", + "helpText": "Sets the default oauth consent level so users can consent to applications that have low risks.", + "label": "Allow users to consent to applications with low security risk (Prevent OAuth phishing. Lower impact, less secure.)", + "impact": "Medium impact", + "impactColour": "warning" + }, + { + "name": "standards.OutBoundSpamAlert", + "cat": "Exchange Standards", + "helpText": "Set the Outbound Spam Alert e-mail address.", + "addedComponent": [ + { + "type": "input", + "name": "standards.OutBoundSpamAlert.OutboundSpamContact", + "label": "Outbound spam contact" + } + ], + "label": "Set Outbound Spam Alert e-mail", + "impact": "Low Impact", + "impactColour": "info" }, { - "name": "standards.SpoofWarn.disable", - "cat": "Exchange", - "helpText": "Disables spoof warnings from external senders in Outlook.", - "addedComponent": null, - "label": "Disable Spoofing warnings for Outlook (This e-mail is external identifiers)" + "name": "standards.AutoExpandArchive", + "cat": "Exchange Standards", + "helpText": "Enables auto-expanding archives for the tenant", + "addedComponent": [], + "label": "Enable Auto-expanding archives", + "impact": "Low Impact", + "impactColour": "info" + }, + { + "name": "standards.SpoofWarn", + "cat": "Exchange Standards", + "helpText": "Adds or removes indicators to e-mail messages received from external senders in Outlook. Works on all Outlook clients/OWA", + "addedComponent": [ + { + "type": "Select", + "label": "Select value", + "name": "standards.SpoofWarn.state", + "values": [ + { + "label": "Enabled", + "value": "enabled" + }, + { + "label": "Disabled", + "value": "disabled" + } + ] + } + ], + "label": "Enable or disable 'external' warning in Outlook.", + "impact": "Low Impact", + "impactColour": "info" }, { "name": "standards.DisableViva", - "cat": "Exchange", - "helpText": "", - "addedComponent": null, - "label": "Disable daily Insight/Viva reports" + "cat": "Exchange Standards", + "helpText": "Disables the daily viva reports for all users.", + "addedComponent": [], + "label": "Disable daily Insight/Viva reports", + "impact": "Low Impact", + "impactColour": "info" }, { "name": "standards.RotateDKIM", - "cat": "Exchange", + "cat": "Exchange Standards", "helpText": "Rotate DKIM keys that are 1024 bit to 2048 bit", - "addedComponent": null, - "label": "Rotate DKIM keys that are 1024 bit to 2048 bit" + "addedComponent": [], + "label": "Rotate DKIM keys that are 1024 bit to 2048 bit", + "impact": "Low Impact", + "impactColour": "info" }, { "name": "standards.AddDKIM", - "cat": "Exchange", + "cat": "Exchange Standards", "helpText": "Enables DKIM for all domains that currently support it", - "addedComponent": null, - "label": "Enables DKIM for all domains that currently support it" + "addedComponent": [], + "label": "Enables DKIM for all domains that currently support it", + "impact": "Low Impact", + "impactColour": "info" }, { - "name": "standards.ActivityBasedTimeout", - "cat": "Global", - "helpText": "Enables and sets Idle session timeout for Microsoft 365 to 1 hour. This policy affects most M365 web apps", - "addedComponent": null, - "label": "Enable 1 hour Activity based Timeout" - }, - { - "name": "standards.SendReceiveLimitTenant.Enabled", - "cat": "Exchange", + "name": "standards.SendReceiveLimitTenant", + "cat": "Exchange Standards", "helpText": "Sets the Send and Receive limits for new users. Valid values are 1KB to 150MB. Invalid values will be set to EXO standard of 35MB,36MB", - "addedComponent": { - "type": "input", - "name": "standards.SendReceiveLimitTenant.SendReceiveLimit", - "label": "Send limit and Receive limit, comma separated" - }, - "label": "Set send/receive size limits" - }, - - { - "name": "standards.calDefault.Enabled", - "cat": "Exchange", + "addedComponent": [ + { + "type": "number", + "name": "standards.SendReceiveLimitTenant.SendLimit", + "label": "Send limit in MB" + }, + { + "type": "number", + "name": "standards.SendReceiveLimitTenant.ReceiveLimit", + "label": "Receive Limit in MB" + } + ], + "label": "Set send/receive size limits", + "impact": "Low Impact", + "impactColour": "info" + }, + { + "name": "standards.calDefault", + "cat": "Exchange Standards", "helpText": "Sets the default sharing level for the default calendar, for all users", - "addedComponent": { - "type": "Select", - "label": "Select Sharing Level", - "name": "standards.calDefault.permissionlevel", - "values": [ - { - "label": "Owner - The user can create, read, edit, and delete all items in the folder, and create subfolders. The user is both folder owner and folder contact.", - "value": "Owner" - }, - { - "label": "Publishing Editor - The user can create, read, edit, and delete all items in the folder, and create subfolders.", - "value": "PublishingEditor" - }, - { - "label": "Reviewer - The user can read all items in the folder.", - "value": "Reviewer" - }, - { - "label": "Editor - The user can create items in the folder. The contents of the folder do not appear.", - "value": "Contributor" - }, - { - "label": "Limited Details - The user can view free/busy time within the calendar and the subject and location of appointments.", - "value": "LimitedDetails" - }, - { - "label": "Availability Only - Indicates that the user can view only free/busy time within the calendar.", - "value": "AvailabilityOnly" - }, - { - "label": "None - The user has no permissions on the folder.", - "value": "none" - } - ] + "disabledFeatures": { + "report": true, + "warn": true, + "remediate": false }, - "label": "Set Sharing Level for Default calendar" - }, - { - "name": "standards.UserSubmissions.enable", - "cat": "Exchange", - "helpText": "", - "addedComponent": null, - "label": "Enable the built-in Report button in Outlook" + "addedComponent": [ + { + "type": "Select", + "label": "Select Sharing Level", + "name": "standards.calDefault.permissionlevel", + "values": [ + { + "label": "Owner - The user can create, read, edit, and delete all items in the folder, and create subfolders. The user is both folder owner and folder contact.", + "value": "Owner" + }, + { + "label": "Publishing Editor - The user can create, read, edit, and delete all items in the folder, and create subfolders.", + "value": "PublishingEditor" + }, + { + "label": "Reviewer - The user can read all items in the folder.", + "value": "Reviewer" + }, + { + "label": "Editor - The user can create items in the folder. The contents of the folder do not appear.", + "value": "Contributor" + }, + { + "label": "Limited Details - The user can view free/busy time within the calendar and the subject and location of appointments.", + "value": "LimitedDetails" + }, + { + "label": "Availability Only - Indicates that the user can view only free/busy time within the calendar.", + "value": "AvailabilityOnly" + }, + { + "label": "None - The user has no permissions on the folder.", + "value": "none" + } + ] + } + ], + "label": "Set Sharing Level for Default calendar", + "impact": "Low Impact", + "impactColour": "info" }, { - "name": "standards.UserSubmissions.disable", - "cat": "Exchange", - "helpText": "", - "addedComponent": null, - "label": "Disable the built-in Report button in Outlook" - }, - { - "name": "standards.intuneDeviceReg.Enabled", - "cat": "Intune", - "helpText": "", - "addedComponent": { - "type": "input", - "name": "standards.intuneDeviceReg.max", - "label": "Maximum devices (Enter 2147483647 for unlimited.)" + "name": "standards.SafeSendersDisable", + "cat": "Exchange Standards", + "disabledFeatures": { + "report": true, + "warn": true, + "remediate": false }, - "label": "Set Maximum Number of Devices per user" + "helpText": "Loops through all users and removes the Safe Senders list. This is to prevent SPF bypass attacks, as the Safe Senders list is not checked by SPF.", + "addedComponent": [], + "label": "Remove Safe Senders to prevent SPF bypass", + "impact": "Medium Impact", + "impactColour": "warning" }, { - "name": "standards.intuneDeviceRetirementDays.Enabled", - "cat": "Intune", - "helpText": "A value between 0 and 270 is supported. A value of 0 disables retirement.", - "addedComponent": { - "type": "input", - "name": "standards.intuneDeviceRetirementDays.days", - "label": "Maximum days (0 equals disabled)" - }, - "label": "Set inactive device retirement days" + "name": "standards.DelegateSentItems", + "cat": "Exchange Standards", + "helpText": "Sets emails sent as and on behalf of shared mailboxes to also be stored in the shared mailbox sent items folder", + "addedComponent": [], + "label": "Set mailbox Sent Items delegation (Sent items for shared mailboxes)", + "impact": "Medium Impact", + "impactColour": "warning" }, { - "name": "standards.intuneRequireMFA", - "cat": "Intune", - "helpText": "", - "label": "Require Multifactor Authentication to register or join devices with Microsoft Entra" + "name": "standards.SendFromAlias", + "cat": "Exchange Standards", + "helpText": "Enables the ability for users to send from their alias addresses.", + "addedComponent": [], + "label": "Allow users to send from their alias addresses", + "impact": "Medium Impact", + "impactColour": "warning" }, { - "name": "standards.sharingCapability.Enabled", - "cat": "SharePoint", - "helpText": "Sets the default sharing level for OneDrive and Sharepoint. This is a tenant wide setting and overrules any settings set on the site level", - "addedComponent": { - "type": "Select", - "label": "Select Sharing Level", - "name": "standards.sharingCapability.Level", - "values": [ - { - "label": "Users can share only with people in the organization. No external sharing is allowed.", - "value": "disabled" - }, - { - "label": "Users can share with new and existing guests. Guests must sign in or provide a verification code.", - "value": "externalUserSharingOnly" - }, - { - "label": "Users can share with anyone by using links that do not require sign-in.", - "value": "externalUserAndGuestSharing" - }, - { - "label": "Users can share with existing guests (those already in the directory of the organization).", - "value": "existingExternalUserSharingOnly" - } - ] - }, - "label": "Set Sharing Level for OneDrive and Sharepoint" + "name": "standards.UserSubmissions.enable", + "cat": "Exchange Standards", + "helpText": "Enables the spam submission button in Outlook", + "addedComponent": [], + "label": "Enable the built-in Report button in Outlook", + "impact": "Medium Impact", + "impactColour": "warning" }, { - "name": "standards.ExcludedfileExt.Enabled", - "cat": "SharePoint", - "helpText": "", - "addedComponent": { - "type": "input", - "name": "standards.ExcludedfileExt.ext", - "label": "Extensions, Comma separated" - }, - "label": "Exclude File Extensions from Syncing" + "name": "standards.UserSubmissions.disable", + "cat": "Exchange Standards", + "helpText": "Disables the spam submission button in Outlook", + "addedComponent": [], + "label": "Disable the built-in Report button in Outlook", + "impact": "Medium Impact", + "impactColour": "warning" }, { - "name": "standards.disableMacSync", - "cat": "SharePoint", - "helpText": "", - "addedComponent": null, - "label": "Do not allow Mac devices to sync using OneDrive" + "name": "standards.DisableSharedMailbox", + "cat": "Exchange Standards", + "helpText": "Blocks login for all accounts that are marked as a shared mailbox. This is Microsoft best practice to prevent direct logons to shared mailboxes.", + "addedComponent": [], + "label": "Disable Shared Mailbox AAD accounts", + "impact": "Medium Impact", + "impactColour": "warning" + }, + { + "name": "standards.intuneDeviceRetirementDays", + "cat": "Intune Standards", + "helpText": "A value between 0 and 270 is supported. A value of 0 disables retirement, retired devices are removed from Intune after the specified number of days.", + "addedComponent": [ + { + "type": "input", + "name": "standards.intuneDeviceRetirementDays.days", + "label": "Maximum days (0 equals disabled)" + } + ], + "label": "Set inactive device retirement days", + "impact": "Low Impact", + "impactColour": "info" + }, + { + "name": "standards.intuneDeviceReg", + "cat": "Intune Standards", + "helpText": "sets the maximum number of devices that can be registered by a user. A value of 0 disables device registration by users", + "addedComponent": [ + { + "type": "input", + "name": "standards.intuneDeviceReg.max", + "label": "Maximum devices (Enter 2147483647 for unlimited.)" + } + ], + "label": "Set Maximum Number of Devices per user", + "impact": "Medium Impact", + "impactColour": "warning" }, { - "name": "standards.DisableReshare", - "cat": "SharePoint", - "helpText": "Disables the ability for external users to share files they don't own. Sharing links can only be made for People with existing access", - "addedComponent": null, - "label": "Disable Resharing by External Users" + "name": "standards.intuneRequireMFA", + "cat": "Intune Standards", + "helpText": "Requires MFA for all users to register devices with Intune. This is useful when not using Conditional Access.", + "label": "Require Multifactor Authentication to register or join devices with Microsoft Entra", + "impact": "Medium Impact", + "impactColour": "warning" }, { "name": "standards.DeletedUserRentention", - "cat": "SharePoint", + "cat": "SharePoint Standards", "helpText": "Sets the retention period for deleted users OneDrive to 1 year/365 days", - "addedComponent": null, - "label": "Retain a deleted user OneDrive for 1 year" - }, - { - "name": "standards.DisableUserSiteCreate", - "cat": "SharePoint", - "helpText": "Disables users from creating new SharePoint sites", - "addedComponent": null, - "label": "Disable site creation by standard users" - }, - { - "name": "standards.unmanagedSync", - "cat": "SharePoint", - "helpText": "", - "addedComponent": null, - "label": "Only allow users to sync OneDrive from AAD joined devices" + "addedComponent": [], + "label": "Retain a deleted user OneDrive for 1 year", + "impact": "Low Impact", + "impactColour": "info" }, { "name": "standards.DisableAddShortcutsToOneDrive", - "cat": "SharePoint", + "cat": "SharePoint Standards", "helpText": "When the feature is disabled the option Add shortcut to My files will be removed; any folders that have already been added will remain on the user's computer.", - "addedComponent": null, - "label": "Disable Add Shortcuts To OneDrive" - }, - { - "name": "standards.IntuneTemplate.enabled", - "cat": "templates", - "helpText": "", - "addedComponent": null, - "label": "Intune Templates" - }, - { - "name": "standards.GroupTemplate.enabled", - "cat": "templates", - "helpText": "", - "addedComponent": null, - "label": "Group Templates" - }, - { - "name": "standards.ExConnector.enabled", - "cat": "templates", - "helpText": "", - "addedComponent": null, - "label": "Exchange Connector Templates" - }, - { - "name": "standards.ConditionalAccess.enabled", - "cat": "templates", - "helpText": "", - "addedComponent": null, - "label": "Conditional Access Templates" + "disabledFeatures": { + "report": true, + "warn": true, + "remediate": false + }, + "addedComponent": [], + "label": "Disable Add Shortcuts To OneDrive", + "impact": "Medium Impact", + "impactColour": "warning" }, { - "name": "standards.TransportRuleTemplate.enabled", - "cat": "templates", - "helpText": "", - "addedComponent": null, - "label": "Transport Rule Templates" + "name": "standards.sharingCapability", + "cat": "SharePoint Standards", + "helpText": "Sets the default sharing level for OneDrive and Sharepoint. This is a tenant wide setting and overrules any settings set on the site level", + "addedComponent": [ + { + "type": "Select", + "label": "Select Sharing Level", + "name": "standards.sharingCapability.Level", + "values": [ + { + "label": "Users can share only with people in the organization. No external sharing is allowed.", + "value": "disabled" + }, + { + "label": "Users can share with new and existing guests. Guests must sign in or provide a verification code.", + "value": "externalUserSharingOnly" + }, + { + "label": "Users can share with anyone by using links that do not require sign-in.", + "value": "externalUserAndGuestSharing" + }, + { + "label": "Users can share with existing guests (those already in the directory of the organization).", + "value": "existingExternalUserSharingOnly" + } + ] + } + ], + "label": "Set Sharing Level for OneDrive and Sharepoint", + "impact": "High Impact", + "impactColour": "danger" + }, + { + "name": "standards.ExcludedfileExt", + "cat": "SharePoint Standards", + "helpText": "Sets the file extensions that are excluded from syncing with OneDrive. These files will be blocked from upload.", + "addedComponent": [ + { + "type": "input", + "name": "standards.ExcludedfileExt.ext", + "label": "Extensions, Comma separated" + } + ], + "label": "Exclude File Extensions from Syncing", + "impact": "High Impact", + "impactColour": "danger" }, { - "name": "standards.ModernAuth", - "cat": "legacy", - "helpText": "Modern Authentication is enabled by default. This standard is no longer required and can be safely disabled", - "addedComponent": null, - "label": "Enable Modern Authentication" + "name": "standards.disableMacSync", + "cat": "SharePoint Standards", + "helpText": "Disables the ability for Mac devices to sync with OneDrive.", + "addedComponent": [], + "label": "Do not allow Mac devices to sync using OneDrive", + "impact": "High Impact", + "impactColour": "danger" }, { - "name": "standards.DisableBasicAuth", - "cat": "legacy", - "helpText": "Basic Authentication is disabled by default. This standard is no longer required and can be safely disabled", - "addedComponent": null, - "label": "Disable Basic Authentication" + "name": "standards.DisableReshare", + "cat": "SharePoint Standards", + "helpText": "Disables the ability for external users to share files they don't own. Sharing links can only be made for People with existing access", + "addedComponent": [], + "label": "Disable Resharing by External Users", + "impact": "High Impact", + "impactColour": "danger" }, { - "name": "standards.PWnumberMatchingRequiredState", - "cat": "legacy", - "helpText": "Passwordless with number matching is now enabled by default. This standard is no longer required and can be safely disabled", - "addedComponent": null, - "label": "Enable Passwordless with Number Matching" + "name": "standards.DisableUserSiteCreate", + "cat": "SharePoint Standards", + "helpText": "Disables users from creating new SharePoint sites", + "addedComponent": [], + "label": "Disable site creation by standard users", + "impact": "High Impact", + "impactColour": "danger" }, { - "cat": "legacy", - "name": "standards.LegacyMFA", - "helpText": "This standard is no longer works and can be safely disabled", - "addedComponent": null, - "label": "Enable per-user MFA for all user (Legacy, Requires DAP.)" + "name": "standards.unmanagedSync", + "cat": "SharePoint Standards", + "helpText": "This standard will only allow devices that are AD joined, or AAD joined to sync with OneDrive", + "addedComponent": [], + "label": "Only allow users to sync OneDrive from AAD joined devices", + "impact": "High Impact", + "impactColour": "danger" } ] diff --git a/src/scss/_themes.scss b/src/scss/_themes.scss index 54c25faff62e..c4aac8515247 100644 --- a/src/scss/_themes.scss +++ b/src/scss/_themes.scss @@ -413,6 +413,7 @@ --text-medium-emphasis: rgba(255, 255, 255, 0.6); --cui-emphasis-color-rgb: rgba(255, 255, 255, 0.6); --cui-input-placeholder-color: rgba(255, 255, 255, 0.6); + //--cui-tertiary-bg: var(--cyberdrain-dark); // Core UI Impact theme variables. --cui-header-hover-color: var(--cyberdrain-light); @@ -566,7 +567,9 @@ --cui-btn-disabled-color: #e55353; --cui-btn-shadow: rgb(229 83 83 / 50%); } - + .accordion { + --cui-accordion-btn-icon: url('data:image/svg+xml,%3Cns0%3Asvg%20xmlns%3Ans0%3D%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F2000%2Fsvg%22%20viewBox%3D%220%200%2016%2016%22%20fill%3D%22%23FFFFFF%22%3E%3Cns0%3Apath%20fill-rule%3D%22evenodd%22%20d%3D%22M1%2E646%204%2E646a%2E5%2E5%200%200%201%20%2E708%200L8%2010%2E293l5%2E646-5%2E647a%2E5%2E5%200%200%201%20%2E708%2E708l-6%206a%2E5%2E5%200%200%201-%2E708%200l-6-6a%2E5%2E5%200%200%201%200-%2E708z%22%20%2F%3E%3C%2Fns0%3Asvg%3E'); + } .list-group-content-card { --cui-list-group-border-color: var(--cyberdrain-accent-blue); } diff --git a/src/scss/_variables.scss b/src/scss/_variables.scss index 099a132a062b..d9013e625c45 100644 --- a/src/scss/_variables.scss +++ b/src/scss/_variables.scss @@ -1252,7 +1252,8 @@ $form-check-input-bg: var(--cyberdrain-light) !default; // $accordion-button-padding-y: $accordion-padding-y !default; // $accordion-button-padding-x: $accordion-padding-x !default; // $accordion-button-color: $accordion-color !default; -// $accordion-button-bg: $accordion-bg !default; +$accordion-button-bg: var(--cipp-accordion-button-bg) !default; + // $accordion-transition: $btn-transition, border-radius .15s ease !default; // $accordion-button-active-bg: tint-color($component-active-bg, 90%) !default; // $accordion-button-active-color: shade-color($primary, 10%) !default; diff --git a/src/views/cipp/CIPPSettings.jsx b/src/views/cipp/CIPPSettings.jsx index 1c1f82a32759..f61fa935969b 100644 --- a/src/views/cipp/CIPPSettings.jsx +++ b/src/views/cipp/CIPPSettings.jsx @@ -723,13 +723,6 @@ const ExcludedTenantsSettings = () => { cell: (row) => CellTip(row['defaultDomainName']), exportSelector: 'defaultDomainName', }, - { - name: 'Relationship Type', - selector: (row) => row['delegatedPrivilegeStatus'], - sortable: true, - cell: (row) => CellDelegatedPrivilege({ cell: row['delegatedPrivilegeStatus'] }), - exportSelector: 'delegatedPrivilegeStatus', - }, { name: 'Excluded', selector: (row) => row['Excluded'], @@ -838,15 +831,6 @@ const ExcludedTenantsSettings = () => { filterName: 'Included Tenants', filter: 'Complex: Excluded eq false', }, - { - filterName: 'GDAP & DAP', - filter: - 'Complex: delegatedPrivilegeStatus eq delegatedAndGranularDelegetedAdminPrivileges', - }, - { - filterName: 'GDAP Only', - filter: 'Complex: delegatedPrivilegeStatus eq granularDelegatedAdminPrivileges', - }, ], keyField: 'id', columns, diff --git a/src/views/email-exchange/administration/EditMailboxPermissions.jsx b/src/views/email-exchange/administration/EditMailboxPermissions.jsx index ee9458d2437e..ddd87082fe47 100644 --- a/src/views/email-exchange/administration/EditMailboxPermissions.jsx +++ b/src/views/email-exchange/administration/EditMailboxPermissions.jsx @@ -847,8 +847,8 @@ const OutOfOffice = () => { user: userId, tenantFilter: tenantDomain, AutoReplyState: values.AutoReplyState ? 'Scheduled' : 'Disabled', - StartTime: startDate.toLocaleString(), - EndTime: endDate.toLocaleString(), + StartTime: startDate.toUTCString(), + EndTime: endDate.toUTCString(), InternalMessage: values.InternalMessage ? values.InternalMessage : '', ExternalMessage: values.ExternalMessage ? values.ExternalMessage : '', } diff --git a/src/views/email-exchange/reports/SharedMailboxEnabledAccount.jsx b/src/views/email-exchange/reports/SharedMailboxEnabledAccount.jsx index 8135b38a3655..3df832c973b1 100644 --- a/src/views/email-exchange/reports/SharedMailboxEnabledAccount.jsx +++ b/src/views/email-exchange/reports/SharedMailboxEnabledAccount.jsx @@ -1,7 +1,47 @@ import React from 'react' +import { CButton } from '@coreui/react' +import { faBan } from '@fortawesome/free-solid-svg-icons' import { useSelector } from 'react-redux' import { CellTip, cellBooleanFormatter } from 'src/components/tables' import { CippPageList } from 'src/components/layout' +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' +import { ModalService } from 'src/components/utilities' +import { useLazyGenericGetRequestQuery } from 'src/store/api/app' + +const DisableSharedMailbox = (userId) => { + const tenant = useSelector((state) => state.app.currentTenant) + const [genericGetRequest, getResults] = useLazyGenericGetRequestQuery() + const handleModal = (modalMessage, modalUrl) => { + ModalService.confirm({ + body: ( +
+
{modalMessage}
+
+ ), + title: 'Confirm', + onConfirm: () => genericGetRequest({ path: modalUrl }), + }) + } + + return ( + <> + { + ModalService.confirm( + handleModal( + 'Are you sure you want to block this user from signing in?', + `/api/ExecDisableUser?TenantFilter=${tenant?.defaultDomainName}&ID=${userId}`, + ), + ) + }} + > + + + + ) +} const columns = [ { @@ -43,6 +83,11 @@ const columns = [ cell: (row) => CellTip(row['accountEnabled']), exportSelector: 'accountEnabled', }, + { + name: 'Block sign-in', + cell: (row) => DisableSharedMailbox(row['id']), + minWidth: '100px', + }, ] const SharedMailboxEnabledAccount = () => { diff --git a/src/views/endpoint/intune/MEMListPolicies.jsx b/src/views/endpoint/intune/MEMListPolicies.jsx index b5e47974e0c8..ad45fc5485fe 100644 --- a/src/views/endpoint/intune/MEMListPolicies.jsx +++ b/src/views/endpoint/intune/MEMListPolicies.jsx @@ -1,7 +1,15 @@ import React, { useState } from 'react' import { useSelector } from 'react-redux' import { CButton } from '@coreui/react' -import { faBook, faEdit, faEllipsisV, faTrashAlt } from '@fortawesome/free-solid-svg-icons' +import { + faBook, + faEdit, + faEllipsisV, + faGlobeEurope, + faPager, + faTrashAlt, + faUser, +} from '@fortawesome/free-solid-svg-icons' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { CippPageList } from 'src/components/layout' import { Link } from 'react-router-dom' @@ -14,13 +22,6 @@ const Actions = (row, rowIndex, formatExtraData) => { const tenant = useSelector((state) => state.app.currentTenant) return ( <> - - - - - setOCVisible(true)}> @@ -41,6 +42,30 @@ const Actions = (row, rowIndex, formatExtraData) => { modalUrl: `/api/AddIntuneTemplate?TenantFilter=${tenant.defaultDomainName}&ID=${row.id}&URLName=${row.URLName}`, modalMessage: 'Are you sure you want to create a template based on this policy?', }, + { + icon: , + label: ' Assign to All Users', + color: 'info', + modal: true, + modalUrl: `/api/ExecAssignPolicy?AssignTo=allLicensedUsers&TenantFilter=${tenant.defaultDomainName}&ID=${row.id}`, + modalMessage: `Are you sure you want to assign ${row.displayName} to all users?`, + }, + { + icon: , + label: ' Assign to All Devices', + color: 'info', + modal: true, + modalUrl: `/api/ExecAssignPolicy?AssignTo=AllDevices&TenantFilter=${tenant.defaultDomainName}&ID=${row.id}`, + modalMessage: `Are you sure you want to assign ${row.displayName} to all devices?`, + }, + { + icon: , + label: ' Assign Globally (All Users / All Devices)', + color: 'info', + modal: true, + modalUrl: `/api/ExecAssignPolicy?AssignTo=AllDevicesAndUsers&TenantFilter=${tenant.defaultDomainName}&ID=${row.id}`, + modalMessage: `Are you sure you want to assign ${row.displayName} to all users and devices?`, + }, { label: 'Delete Policy', color: 'danger', diff --git a/src/views/identity/administration/OffboardingWizard.jsx b/src/views/identity/administration/OffboardingWizard.jsx index 8a5bc168ce97..644bbc6c3a4b 100644 --- a/src/views/identity/administration/OffboardingWizard.jsx +++ b/src/views/identity/administration/OffboardingWizard.jsx @@ -15,7 +15,7 @@ import { } from 'src/components/forms' import { TenantSelector } from 'src/components/utilities' import { useListUsersQuery } from 'src/store/api/users' -import { useLazyGenericPostRequestQuery } from 'src/store/api/app' +import { useGenericGetRequestQuery, useLazyGenericPostRequestQuery } from 'src/store/api/app' import DatePicker from 'react-datepicker' import 'react-datepicker/dist/react-datepicker.css' @@ -48,6 +48,13 @@ const OffboardingWizard = () => { isFetching: usersIsFetching, error: usersError, } = useListUsersQuery({ tenantDomain }) + + const { + data: recipients = [], + isFetching: recipientsIsFetching, + error: recipientsError, + } = useGenericGetRequestQuery({ path: `/api/ListRecipients?tenantFilter=${tenantDomain}` }) + const currentSettings = useSelector((state) => state.app) const [genericPostRequest, postResults] = useLazyGenericPostRequestQuery() @@ -194,7 +201,7 @@ const OffboardingWizard = () => { /> x.mail) .map((user) => ({ value: user.mail, diff --git a/src/views/tenant/administration/GDAPInviteWizard.jsx b/src/views/tenant/administration/GDAPInviteWizard.jsx index ff4c6b89cde7..23fa60e962e6 100644 --- a/src/views/tenant/administration/GDAPInviteWizard.jsx +++ b/src/views/tenant/administration/GDAPInviteWizard.jsx @@ -1,5 +1,14 @@ -import React from 'react' -import { CCol, CRow, CForm, CCallout, CSpinner, CButton } from '@coreui/react' +import React, { useState } from 'react' +import { + CCol, + CRow, + CForm, + CCallout, + CSpinner, + CFormInput, + CFormLabel, + CFormRange, +} from '@coreui/react' import { Field, FormSpy } from 'react-final-form' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons' @@ -8,6 +17,7 @@ import { WizardTableField } from 'src/components/tables' import { TitleButton } from 'src/components/buttons' import PropTypes from 'prop-types' import { useLazyGenericGetRequestQuery, useLazyGenericPostRequestQuery } from 'src/store/api/app' +import { CippCodeBlock } from 'src/components/utilities' const Error = ({ name }) => ( (value && value.length !== 0 ? undefined : 'Required') const GDAPInviteWizard = () => { + const [inviteCount, setInviteCount] = useState(1) + const [loopRunning, setLoopRunning] = React.useState(false) + const [massResults, setMassResults] = React.useState([]) const [genericPostRequest, postResults] = useLazyGenericPostRequestQuery() const [genericGetRequest, getResults] = useLazyGenericGetRequestQuery() const handleSubmit = async (values) => { - genericPostRequest({ path: '/api/ExecGDAPInvite', values: values }) + const resultsarr = [] + setLoopRunning(true) + for (var x = 0; x < inviteCount; x++) { + const results = await genericPostRequest({ path: '/api/ExecGDAPInvite', values: values }) + resultsarr.push(results) + setMassResults(resultsarr) + } + setLoopRunning(false) } const formValues = {} @@ -94,13 +114,40 @@ const GDAPInviteWizard = () => {
- +

Step 2

+
Invite Options
+
+
+ Number of Invites + + + setInviteCount(e.target.value)} + /> + + + setInviteCount(e.target.value)} + /> + + +
+ +
+

Step 3

Confirm and apply

- {!postResults.isSuccess && ( + {massResults.length < 1 && ( {/* eslint-disable react/prop-types */} {(props) => { @@ -135,17 +182,29 @@ const GDAPInviteWizard = () => { }} )} - {postResults.isFetching && ( - - Loading - - )} - {postResults.isSuccess && ( - - {postResults.data.Results.map((message, idx) => { - return
  • {message}
  • - })} -
    + {(massResults.length >= 1 || loopRunning) && + massResults.map((message, idx) => { + const results = message?.data + const displayResults = Array.isArray(results) ? results.join(', ') : results + return ( + + {results.Results.map((message, idx) => { + return
  • {message}
  • + })} + +
    + ) + })} + {loopRunning && ( +
  • + +
  • )}
    diff --git a/src/views/tenant/administration/GDAPRoleWizard.jsx b/src/views/tenant/administration/GDAPRoleWizard.jsx index 91d202fd2fb7..acaca41de84a 100644 --- a/src/views/tenant/administration/GDAPRoleWizard.jsx +++ b/src/views/tenant/administration/GDAPRoleWizard.jsx @@ -168,8 +168,8 @@ const GDAPRoleWizard = () => { return
  • {message}
  • })} - - Start GDAP Migration + + Create GDAP Invite )} diff --git a/src/views/tenant/standards/ApplyStandard.jsx b/src/views/tenant/standards/ApplyStandard.jsx deleted file mode 100644 index 79eb493e24c8..000000000000 --- a/src/views/tenant/standards/ApplyStandard.jsx +++ /dev/null @@ -1,568 +0,0 @@ -import React from 'react' -import { CCallout, CCol, CRow, CSpinner } from '@coreui/react' -import { Field, FormSpy } from 'react-final-form' -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' -import { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons' -import { CippWizard } from 'src/components/layout' -import { WizardTableField } from 'src/components/tables' -import PropTypes from 'prop-types' -import { - RFFCFormSwitch, - Condition, - RFFCFormInput, - RFFCFormSelect, - RFFSelectSearch, -} from 'src/components/forms' -import { useLazyGenericGetRequestQuery, useLazyGenericPostRequestQuery } from 'src/store/api/app' -import allStandardsList from 'src/data/standards' - -const Error = ({ name }) => ( - - touched && error ? ( - - - {error} - - ) : null - } - /> -) - -Error.propTypes = { - name: PropTypes.string.isRequired, -} - -function getDeepKeys(obj) { - return Object.keys(obj) - .filter((key) => obj[key] instanceof Object) - .map((key) => getDeepKeys(obj[key]).map((k) => `${key}.${k}`)) - .reduce((x, y) => x.concat(y), Object.keys(obj)) -} - -const ApplyStandard = () => { - const [genericPostRequest, postResults] = useLazyGenericPostRequestQuery() - - const [intuneGetRequest, intuneTemplates] = useLazyGenericGetRequestQuery() - const [transportGetRequest, transportTemplates] = useLazyGenericGetRequestQuery() - const [exConnectorGetRequest, exConnectorTemplates] = useLazyGenericGetRequestQuery() - const [caGetRequest, caTemplates] = useLazyGenericGetRequestQuery() - const [groupGetRequest, groupTemplates] = useLazyGenericGetRequestQuery() - - const handleSubmit = async (values) => { - // @todo: clean this up api sided so we don't need to perform weird tricks. - Object.keys(values.standards).filter(function (x) { - if (values.standards[x] === false) { - delete values.standards[x] - } - return null - }) - - values.selectedTenants.map( - (tenant) => - (values.standards[`Select_${tenant.defaultDomainName}`] = tenant.defaultDomainName), - ) - //filter on only objects that are 'true' - genericPostRequest({ path: '/api/AddStandardsDeploy', values: values.standards }) - } - - const formValues = { - selectedTenants: [], - standards: {}, - } - - return ( - - - - Ensure you read{' '} - - the documentation fully - {' '} - before proceeding with this wizard. Some of the changes cannot be reverted by CIPP. - -
    -

    Step 1

    -
    Choose a tenant
    -
    -
    - - {(props) => ( - row['displayName'], - sortable: true, - exportselector: 'displayName', - }, - { - name: 'Default Domain Name', - selector: (row) => row['defaultDomainName'], - sortable: true, - exportselector: 'mail', - }, - ]} - fieldProps={props} - /> - )} - - -
    -
    - -
    -

    Step 2

    -
    Select Standards
    -
    -
    -
    - - {allStandardsList - .filter((obj) => obj.cat === 'Global') - .map((item, key) => ( - <> - - - {item.addedComponent && ( - - {item.addedComponent.type === 'Select' ? ( - - ) : ( - - )} - - )} - - - ))} - -
    -
    -
    - -
    -

    Step 3

    -
    Select Standards
    -
    -
    -
    - - {allStandardsList - .filter((obj) => obj.cat === 'AAD') - .map((item, key) => ( - <> - - - {item.addedComponent && ( - - {item.addedComponent.type === 'Select' ? ( - - ) : ( - - )} - - )} - - - ))} - -
    -
    -
    - -
    -

    Step 4

    -
    Select Standards
    -
    -
    -
    - - {allStandardsList - .filter((obj) => obj.cat === 'Exchange') - .map((item, key) => ( - <> - - - {item.addedComponent && ( - - {item.addedComponent.type === 'Select' ? ( - - ) : ( - - )} - - )} - - - ))} - -
    -
    -
    - -
    -

    Step 5

    -
    Select Standards
    -
    -
    -
    - - {allStandardsList - .filter((obj) => obj.cat === 'Intune') - .map((item, key) => ( - <> - - - {item.addedComponent && ( - - {item.addedComponent.type === 'Select' ? ( - - ) : ( - - )} - - )} - - - ))} - -
    -
    -
    - -
    -

    Step 5

    -
    Select Standards
    -
    -
    -
    - - {allStandardsList - .filter((obj) => obj.cat === 'SharePoint') - .map((item, key) => ( - <> - - - {item.addedComponent && ( - - {item.addedComponent.type === 'Select' ? ( - - ) : ( - - )} - - )} - - - ))} - -
    -
    -
    - -
    -

    Step 7

    -
    Select Default Templates to apply
    -
    -
    - - Attention: Selected options below will run every 3 hours and overwrite any previously set - policy by the same name. This will keep the policy exactly in the state as defined by the - template. - -
    - - - - - {intuneTemplates.isUninitialized && - intuneGetRequest({ path: 'api/ListIntuneTemplates' })} - {intuneTemplates.isSuccess && ( - ({ - value: template.GUID, - name: template.Displayname, - }))} - placeholder="Select a template" - label="Choose your Intune templates to apply" - /> - )} - - - - - - {transportTemplates.isUninitialized && - transportGetRequest({ path: 'api/ListTransportRulesTemplates' })} - {transportTemplates.isSuccess && ( - ({ - value: template.GUID, - name: template.name, - }))} - placeholder="Select a template" - label="Choose your Transport Rule templates to apply" - /> - )} - - - - - - {caTemplates.isUninitialized && caGetRequest({ path: 'api/ListCAtemplates' })} - {caTemplates.isSuccess && ( - ({ - value: template.GUID, - name: template.displayName, - }))} - placeholder="Select a template" - label="Choose your Conditional Access templates to apply" - /> - )} - - - - - - {exConnectorTemplates.isUninitialized && - exConnectorGetRequest({ path: 'api/ListExConnectorTemplates' })} - {exConnectorTemplates.isSuccess && ( - ({ - value: template.GUID, - name: template.name, - }))} - placeholder="Select a template" - label="Choose your Exchange Connector templates to apply" - /> - )} - - - - - - {groupTemplates.isUninitialized && - groupGetRequest({ path: 'api/ListGroupTemplates' })} - {groupTemplates.isSuccess && ( - ({ - value: template.GUID, - name: template.Displayname, - }))} - placeholder="Select a template" - label="Choose your Group templates to apply" - /> - )} - - - -
    -
    -
    - -
    -

    Step 6

    -
    Confirm and apply
    -
    -
    - {!postResults.isSuccess && ( - - -
    - WARNING! Setting a standard will make changes to your tenants and set these standards - on every 365 tenant you select. If you want to review only, please use the Best - Practice Analyser. -
    -
    - )} - {postResults.isFetching && ( - - Loading - - )} - {!postResults.isSuccess && ( - - {/* eslint-disable react/prop-types */} - {(props) => ( - <> - - -
    Selected Tenants
    - - {props.values.selectedTenants.map((tenant, idx) => ( -
  • - {tenant.displayName}- {tenant.defaultDomainName} -
  • - ))} -
    -
    Selected Standards
    - - {getDeepKeys(props.values.standards) - .reduce((acc, key) => { - const existingItem = allStandardsList.find((obj) => - obj.name.includes(key), - ) - if ( - existingItem && - !acc.find((item) => item.name === existingItem.name) - ) { - acc.push(existingItem) - } - return acc - }, []) - .map((item, idx) => ( -
  • {item.label}
  • - ))} -
    -
    -
    -
    - - )} -
    - )} - {postResults.isSuccess && {postResults.data.Results}} -
    -
    -
    - ) -} - -export default ApplyStandard diff --git a/src/views/tenant/standards/ListAppliedStandards.jsx b/src/views/tenant/standards/ListAppliedStandards.jsx index ab764629deb7..26622283e4bd 100644 --- a/src/views/tenant/standards/ListAppliedStandards.jsx +++ b/src/views/tenant/standards/ListAppliedStandards.jsx @@ -1,9 +1,23 @@ import React, { useState } from 'react' -import { CButton, CCallout, CCol, CForm, CRow, CSpinner } from '@coreui/react' +import { + CButton, + CCallout, + CCol, + CForm, + CRow, + CSpinner, + CAccordion, + CAccordionHeader, + CAccordionBody, + CAccordionItem, + CWidgetStatsB, + CBadge, +} from '@coreui/react' import { Form } from 'react-final-form' import { Condition, RFFCFormInput, + RFFCFormRadio, RFFCFormSelect, RFFCFormSwitch, RFFSelectSearch, @@ -26,8 +40,8 @@ import GDAPRoles from 'src/data/GDAPRoles' const RefreshAction = () => { const [execStandards, execStandardsResults] = useLazyGenericGetRequestQuery() - - const showModal = () => + const tenantDomain = useSelector((state) => state.app.currentTenant.defaultDomainName) + const showModal = (selectedTenant) => ModalService.confirm({ body: (
    @@ -35,7 +49,8 @@ const RefreshAction = () => { Please note: this runs every three hours automatically.
    ), - onConfirm: () => execStandards({ path: 'api/Standards_OrchestrationStarter' }), + onConfirm: () => + execStandards({ path: `api/ExecStandardsRun?Tenantfilter=${selectedTenant}` }), }) return ( @@ -44,14 +59,24 @@ const RefreshAction = () => { 'Already running. Please wait for the current instance to finish' && (
    {execStandardsResults.data?.Results}
    )} - - {execStandardsResults.isLoading && } - {execStandardsResults.error && ( - - )} - {execStandardsResults.isSuccess && } - Run Standards Now - +

    + showModal('AllTenants')} size="sm" className="m-1"> + {execStandardsResults.isLoading && } + {execStandardsResults.error && ( + + )} + {execStandardsResults.isSuccess && } + Run Standards Now (All Tenants) + + showModal(tenantDomain)} size="sm" className="m-1"> + {execStandardsResults.isLoading && } + {execStandardsResults.error && ( + + )} + {execStandardsResults.isSuccess && } + Run Standards Now (Selected Tenant) + +

    ) } @@ -75,13 +100,15 @@ const DeleteAction = () => { )} Delete Standard - {execStandardsResults.isSuccess && ( - {execStandardsResults.data.Results} - )} + <> + {execStandardsResults.isSuccess && ( + {execStandardsResults.data.Results} + )} + ) } -const ListAppliedStandards = () => { +const ApplyNewStandard = () => { const [ExecuteGetRequest, getResults] = useLazyGenericGetRequestQuery() const Offcanvas = (row, rowIndex, formatExtraData) => { @@ -178,25 +205,55 @@ const ListAppliedStandards = () => { const allTenantsStandard = listStandardsAllTenants.find( (tenant) => tenant.displayName === 'AllTenants', ) + function getLabel(item) { const keys = item.name.split('.') let value = keys.reduce((prev, curr) => prev && prev[curr], allTenantsStandard) return value ? `* Enabled via All Tenants` : '' } + const groupedStandards = allStandardsList.reduce((acc, obj) => { + acc[obj.cat] = acc[obj.cat] || [] + acc[obj.cat].push(obj) + return acc + }, {}) + + // Function to count enabled standards + function countEnabledStandards(standards, type) { + let count = 0 + Object.keys(standards).forEach((key) => { + const standard = standards[key] + // Check if 'Enabled' exists and the specific type is true, for non-v2 standards + if (standard?.Enabled && standard?.Enabled[type]) { + count++ + } else if (standard && standard[type]) { + // Check if the type exists directly under the standard + count++ + } + }) + return count + } + + // Assuming listStandardResults[0] contains your JSON object + const enabledStandards = listStandardResults[0] ? listStandardResults[0].standards : {} + const enabledAlertsCount = countEnabledStandards(enabledStandards, 'alert') + const enabledRemediationsCount = countEnabledStandards(enabledStandards, 'remediate') + const enabledWarningsCount = countEnabledStandards(enabledStandards, 'report') + const totalAvailableStandards = allStandardsList.length + return ( <> {postResults.isSuccess && {postResults.data?.Results}} - + } - title="List and edit standard" + title={`List and edit standard - ${tenantDomain}`} > {isFetching && } {intuneTemplates.isUninitialized && @@ -215,423 +272,547 @@ const ListAppliedStandards = () => { render={({ handleSubmit, submitting, values }) => { return ( -
    {' '} - - {listStandardResults[0]?.appliedBy - ? `This standard has been applied at ${new Date( - listStandardResults[0].appliedAt + 'Z', - ).toLocaleDateString(undefined, { - year: 'numeric', - month: 'long', - day: 'numeric', - })} ${new Date( - listStandardResults[0].appliedAt + 'Z', - ).toLocaleTimeString(undefined, { - hour: '2-digit', - minute: '2-digit', - second: '2-digit', - hour12: false, - })} by ${listStandardResults[0].appliedBy}` - : 'This tenant does not yet have a standard applied'} - - {tenantDomain !== 'AllTenants' && ( - <> -
    -
    Standard Settings
    -
    - - - - - )} -
    -
    Global Standards
    -
    - - {allStandardsList - .filter((obj) => obj.cat === 'Global') - .map((item, key) => ( - <> - - - {item.addedComponent && ( - - {item.addedComponent.type === 'Select' ? ( - + + 0 + ? Math.round( + (enabledWarningsCount / totalAvailableStandards) * 1000, + ) / 10 + : 0, + }} + text={ + listStandardResults[0].appliedBy + ? `Created by ${listStandardResults[0].appliedBy}` + : 'None' + } + title={`${enabledWarningsCount} out of ${totalAvailableStandards}`} + value="Enabled Warnings" + /> + + + 0 + ? Math.round( + (enabledAlertsCount / totalAvailableStandards) * 1000, + ) / 10 + : 0, + }} + text={ + listStandardResults[0].appliedBy + ? `Created by ${listStandardResults[0].appliedBy}` + : 'None' + } + title={`${enabledAlertsCount} out of ${totalAvailableStandards}`} + value="Enabled Alerts" + /> + + + 0 + ? Math.round( + (enabledRemediationsCount / totalAvailableStandards) * 1000, + ) / 10 + : 0, + }} + text={ + listStandardResults[0].appliedBy + ? `Created by ${listStandardResults[0].appliedBy}` + : 'None' + } + title={`${enabledRemediationsCount} out of ${totalAvailableStandards}`} + value="Enabled Remediations" + /> + + + {tenantDomain !== 'AllTenants' && ( + + General Standard Settings + + + +
    +
    Do not apply All Tenants Standard to this tenant
    +
    + Minimal Impact +
    +
    +

    + + Enabling this feature excludes this tenant from any + top-level "All Tenants" standard. This means that only the + standards you explicitly set for this tenant will be + applied. Standards previously applied by the "All Tenants" + standard will not be reverted. + +

    +
    + +
    Report
    + +
    + +
    Alert
    + +
    + +
    Remediate
    + +
    + +
    Optional Input
    +
    +
    +
    +
    + )} + {Object.keys(groupedStandards).map((cat, catIndex) => ( + + {cat} + + {groupedStandards[cat].map((obj, index) => ( + + +
    +
    {obj.label}
    +
    + {obj.impact} +
    +
    +

    + {obj.helpText} +

    +
    + +
    Report
    + - ) : ( - + +
    Alert
    + - )} -
    - )} -
    - - ))} -
    -
    -
    Entra ID Standards
    -
    - - {allStandardsList - .filter((obj) => obj.cat === 'AAD') - .map((item, key) => ( - <> - - - {item.addedComponent && ( - - {(item.addedComponent.type === 'Select' && ( - + +
    Remediate
    + - )) || - (item.addedComponent.type === 'AdminRolesMultiSelect' && ( - ({ - value: role.ObjectId, - name: role.Name, - }))} - /> - )) || ( - - )} -
    - )} -
    - +
    + +
    Optional Input
    + {obj.addedComponent && + obj.addedComponent.map((component) => ( + <> + {component.type === 'Select' && ( + + )} + {component.type === 'input' && ( + + )} + {component.type === 'number' && ( + + )} + {component.type === 'AdminRolesMultiSelect' && ( + ({ + value: role.ObjectId, + name: role.Name, + }))} + /> + )} + + ))} +
    +
    + ))} + + ))} - -
    -
    Exchange Standards
    -
    - - {allStandardsList - .filter((obj) => obj.cat === 'Exchange') - .map((item, key) => ( - <> - - - {item.addedComponent && ( - - {item.addedComponent.type === 'Select' ? ( - + Templates Standard Deployment + + {[ + { + name: 'Intune Template', + switchName: 'standards.IntuneTemplate', + assignable: true, + templates: intuneTemplates, + }, + { + name: 'Transport Rule Template', + switchName: 'standards.TransportRuleTemplate', + templates: transportTemplates, + }, + { + name: 'Conditional Access Template', + switchName: 'standards.ConditionalAccess', + templates: caTemplates, + }, + { + name: 'Exchange Connector Template', + switchName: 'standards.ExConnector', + templates: exConnectorTemplates, + }, + { + name: 'Group Template', + switchName: 'standards.GroupTemplate', + templates: groupTemplates, + }, + ].map((template, index) => ( + + +
    {template.name}
    + Deploy {template.name} +
    + +
    Report
    + +
    + +
    Alert
    + +
    + +
    Remediate
    + +
    + +
    Optional Input
    + {template.templates.isSuccess && ( + ({ + value: t.GUID, + name: t.name || t.Displayname, + }))} + placeholder="Select a template" + label={`Choose your ${template.name}`} /> - ) : ( + )} + {template.assignable && ( + <> + + + + + + + + + + )} +
    +
    + ))} + + +
    Autopilot Profile
    + Deploy Autopilot profile +
    + +
    Report
    + +
    + +
    Alert
    + +
    + +
    Remediate
    + +
    + +
    Optional Input
    + + - )} -
    - )} -
    - - ))} -
    -
    -
    Intune Standards
    -
    - - {allStandardsList - .filter((obj) => obj.cat === 'Intune') - .map((item, key) => ( - <> - - - {item.addedComponent && ( - - {item.addedComponent.type === 'Select' ? ( - - ) : ( + + + + - )} - - )} - - - ))} - -
    -
    SharePoint Standards
    -
    - - {allStandardsList - .filter((obj) => obj.cat === 'SharePoint') - .map((item, key) => ( - <> - - - {item.addedComponent && ( - - {item.addedComponent.type === 'Select' ? ( - - ) : ( + + + + - )} - - )} - - - ))} - -
    -
    Templates
    -
    - - - - - - {intuneTemplates.isSuccess && ( - ({ - value: template.GUID, - name: template.Displayname, - }))} - placeholder="Select a template" - label="Choose your Intune templates to apply" - /> - )} - - - - - - - {transportTemplates.isSuccess && ( - ({ - value: template.GUID, - name: template.name, - }))} - placeholder="Select a template" - label="Choose your Transport Rule templates to apply" - /> - )} - - - - - - - {caTemplates.isSuccess && ( - ({ - value: template.GUID, - name: template.displayName, - }))} - placeholder="Select a template" - label="Choose your Conditional Access templates to apply" - /> - )} - - - - - - - {exConnectorTemplates.isSuccess && ( - ({ - value: template.GUID, - name: template.name, - }))} - placeholder="Select a template" - label="Choose your Exchange Connector templates to apply" - /> - )} - - - - - - {groupTemplates.isSuccess && ( - ({ - value: template.GUID, - name: template.Displayname, - }))} - placeholder="Select a template" - label="Choose your Group templates to apply" - /> - )} - - - -
    -
    Legacy Standards
    -
    - - {allStandardsList - .filter((obj) => obj.cat === 'legacy') - .map((item, key) => ( - <> - - - {item.addedComponent && ( - - {item.addedComponent.type === 'Select' ? ( -
    +
    +
    + + + + + + + + + + + + + +
    Autopilot Status Page
    + Deploy Autopilot Status Page +
    + +
    Report
    + +
    + +
    Alert
    + +
    + +
    Remediate
    + +
    + +
    Optional Input
    + + + - ) : ( + + + + - )} - - )} - - - ))} +
    +
    + + + + + + + + + + + + - {postResults.isSuccess && ( - {postResults.data.Results} - )} - - - - Save - {postResults.isFetching && ( - + + + {postResults.isSuccess && ( + {postResults.data.Results} + )} + + + + Save + {postResults.isFetching && ( + + )} + + + + {listStandardResults[0].appliedBy && ( + )} - - - - {listStandardResults[0].appliedBy && ( - - )} - + + ) @@ -640,25 +821,10 @@ const ListAppliedStandards = () => { )} - - {listStandardsAllTenants && ( - - {getResults.isLoading && } - {getResults.isSuccess && ( - {getResults.data?.Results} - )} - - - )} -
    ) } -export default ListAppliedStandards +export default ApplyNewStandard diff --git a/src/views/tenant/standards/ListStandards.jsx b/src/views/tenant/standards/ListStandards.jsx new file mode 100644 index 000000000000..c444b2d9f40b --- /dev/null +++ b/src/views/tenant/standards/ListStandards.jsx @@ -0,0 +1,97 @@ +import React, { useState } from 'react' +import { CButton, CCallout, CCol, CRow, CSpinner } from '@coreui/react' +import { useGenericGetRequestQuery, useLazyGenericGetRequestQuery } from 'src/store/api/app' +import { CippContentCard, CippPage } from 'src/components/layout' +import { useSelector } from 'react-redux' +import { ModalService } from 'src/components/utilities' +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' +import { CippTable } from 'src/components/tables' +import CippCodeOffCanvas from 'src/components/utilities/CippCodeOffcanvas' + +const ListAppliedStandards = () => { + const [ExecuteGetRequest, getResults] = useLazyGenericGetRequestQuery() + + const Offcanvas = (row, rowIndex, formatExtraData) => { + const [ocVisible, setOCVisible] = useState(false) + const handleDeleteIntuneTemplate = (apiurl, message) => { + ModalService.confirm({ + title: 'Confirm', + body:
    {message}
    , + onConfirm: () => ExecuteGetRequest({ path: apiurl }), + confirmLabel: 'Continue', + cancelLabel: 'Cancel', + }) + } + return ( + <> + setOCVisible(true)}> + + + + handleDeleteIntuneTemplate( + `api/RemoveStandard?ID=${row.displayName}`, + 'Do you want to delete this standard?', + ) + } + > + + + setOCVisible(false)} + /> + + ) + } + + const { data: listStandardsAllTenants = [] } = useGenericGetRequestQuery({ + path: 'api/listStandards', + }) + const tableColumns = [ + { + name: 'Tenant', + selector: (row) => row['displayName'], + sortable: true, + exportSelector: 'displayName', + maxWidth: '280px', + }, + { + name: 'Actions', + cell: Offcanvas, + maxWidth: '80px', + }, + ] + + return ( + + <> + + + {listStandardsAllTenants && ( + + {getResults.isLoading && } + {getResults.isSuccess && ( + {getResults.data?.Results} + )} + + + )} + + + + + ) +} + +export default ListAppliedStandards diff --git a/version_latest.txt b/version_latest.txt index 4178d093f02e..6ca6df113f09 100644 --- a/version_latest.txt +++ b/version_latest.txt @@ -1 +1 @@ -4.7.3 \ No newline at end of file +4.8.0 \ No newline at end of file