diff --git a/package.json b/package.json index 3ec1709f..db92e021 100644 --- a/package.json +++ b/package.json @@ -11,12 +11,12 @@ "lint": "eslint 'src/**/*.{ts,tsx}'" }, "dependencies": { - "@headlessui/react": "^1.4.1", - "@meshtastic/meshtasticjs": "^0.6.22", + "@headlessui/react": "^1.4.2", + "@meshtastic/meshtasticjs": "^0.6.24", "@reduxjs/toolkit": "^1.6.2", "apexcharts": "^3.29.0", "boring-avatars": "^1.5.8", - "i18next": "^21.3.3", + "i18next": "^21.4.1", "i18next-browser-languagedetector": "^6.1.2", "moment": "^2.29.1", "react": "^17.0.2", @@ -24,7 +24,7 @@ "react-dom": "^17.0.2", "react-file-icon": "^1.1.0", "react-flags-select": "^2.1.2", - "react-hook-form": "^7.18.0", + "react-hook-form": "^7.19.1", "react-i18next": "^11.13.0", "react-icons": "^4.3.1", "react-redux": "^7.2.6", @@ -37,30 +37,30 @@ "@snowpack/plugin-postcss": "^1.4.3", "@snowpack/plugin-react-refresh": "^2.5.0", "@snowpack/plugin-typescript": "^1.2.1", - "@types/react": "^17.0.33", - "@types/react-dom": "^17.0.10", + "@types/react": "^17.0.34", + "@types/react-dom": "^17.0.11", "@types/react-file-icon": "^1.0.1", "@types/react-redux": "^7.1.20", "@types/snowpack-env": "^2.3.4", "@types/w3c-web-serial": "^1.0.2", "@types/web-bluetooth": "^0.0.11", - "@typescript-eslint/eslint-plugin": "^5.2.0", - "@typescript-eslint/parser": "^5.2.0", + "@typescript-eslint/eslint-plugin": "^5.3.1", + "@typescript-eslint/parser": "^5.3.1", "@verypossible/eslint-config": "^1.6.1", "autoprefixer": "^10.4.0", "babel-plugin-module-resolver": "^4.1.0", - "eslint": "8.1.0", + "eslint": "8.2.0", "eslint-config-prettier": "^8.3.0", "eslint-import-resolver-babel-module": "^5.3.1", "eslint-import-resolver-typescript": "^2.5.0", "eslint-plugin-import": "^2.25.2", "eslint-plugin-react": "^7.26.1", - "eslint-plugin-react-hooks": "^4.2.1-alpha-9c8161ba8-20211028", + "eslint-plugin-react-hooks": "^4.2.0", "gzipper": "^6.0.0", "postcss": "^8.3.11", "prettier": "^2.4.1", "snowpack": "^3.8.8", - "tailwindcss": "^3.0.0-alpha.1", + "tailwindcss": "^3.0.0-alpha.2", "tar": "^6.1.11", "typescript": "^4.4.4" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8e05c773..22e59893 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,36 +1,36 @@ lockfileVersion: 5.3 specifiers: - '@headlessui/react': ^1.4.1 - '@meshtastic/meshtasticjs': ^0.6.22 + '@headlessui/react': ^1.4.2 + '@meshtastic/meshtasticjs': ^0.6.24 '@reduxjs/toolkit': ^1.6.2 '@snowpack/plugin-dotenv': ^2.2.0 '@snowpack/plugin-postcss': ^1.4.3 '@snowpack/plugin-react-refresh': ^2.5.0 '@snowpack/plugin-typescript': ^1.2.1 - '@types/react': ^17.0.33 - '@types/react-dom': ^17.0.10 + '@types/react': ^17.0.34 + '@types/react-dom': ^17.0.11 '@types/react-file-icon': ^1.0.1 '@types/react-redux': ^7.1.20 '@types/snowpack-env': ^2.3.4 '@types/w3c-web-serial': ^1.0.2 '@types/web-bluetooth': ^0.0.11 - '@typescript-eslint/eslint-plugin': ^5.2.0 - '@typescript-eslint/parser': ^5.2.0 + '@typescript-eslint/eslint-plugin': ^5.3.1 + '@typescript-eslint/parser': ^5.3.1 '@verypossible/eslint-config': ^1.6.1 apexcharts: ^3.29.0 autoprefixer: ^10.4.0 babel-plugin-module-resolver: ^4.1.0 boring-avatars: ^1.5.8 - eslint: 8.1.0 + eslint: 8.2.0 eslint-config-prettier: ^8.3.0 eslint-import-resolver-babel-module: ^5.3.1 eslint-import-resolver-typescript: ^2.5.0 eslint-plugin-import: ^2.25.2 eslint-plugin-react: ^7.26.1 - eslint-plugin-react-hooks: ^4.2.1-alpha-9c8161ba8-20211028 + eslint-plugin-react-hooks: ^4.2.0 gzipper: ^6.0.0 - i18next: ^21.3.3 + i18next: ^21.4.1 i18next-browser-languagedetector: ^6.1.2 moment: ^2.29.1 postcss: ^8.3.11 @@ -40,25 +40,25 @@ specifiers: react-dom: ^17.0.2 react-file-icon: ^1.1.0 react-flags-select: ^2.1.2 - react-hook-form: ^7.18.0 + react-hook-form: ^7.19.1 react-i18next: ^11.13.0 react-icons: ^4.3.1 react-redux: ^7.2.6 snowpack: ^3.8.8 swr: ^1.0.1 - tailwindcss: ^3.0.0-alpha.1 + tailwindcss: ^3.0.0-alpha.2 tar: ^6.1.11 type-route: ^0.6.0 typescript: ^4.4.4 use-breakpoint: ^2.0.2 dependencies: - '@headlessui/react': 1.4.1_react-dom@17.0.2+react@17.0.2 - '@meshtastic/meshtasticjs': 0.6.22 + '@headlessui/react': 1.4.2_react-dom@17.0.2+react@17.0.2 + '@meshtastic/meshtasticjs': 0.6.24 '@reduxjs/toolkit': 1.6.2_react-redux@7.2.6+react@17.0.2 apexcharts: 3.29.0 boring-avatars: 1.5.8 - i18next: 21.3.3 + i18next: 21.4.1 i18next-browser-languagedetector: 6.1.2 moment: 2.29.1 react: 17.0.2 @@ -66,8 +66,8 @@ dependencies: react-dom: 17.0.2_react@17.0.2 react-file-icon: 1.1.0_react-dom@17.0.2+react@17.0.2 react-flags-select: 2.1.2_react-dom@17.0.2+react@17.0.2 - react-hook-form: 7.18.0_react@17.0.2 - react-i18next: 11.13.0_i18next@21.3.3+react@17.0.2 + react-hook-form: 7.19.1_react@17.0.2 + react-i18next: 11.13.0_i18next@21.4.1+react@17.0.2 react-icons: 4.3.1_react@17.0.2 react-redux: 7.2.6_react-dom@17.0.2+react@17.0.2 swr: 1.0.1_react@17.0.2 @@ -79,30 +79,30 @@ devDependencies: '@snowpack/plugin-postcss': 1.4.3_postcss@8.3.11 '@snowpack/plugin-react-refresh': 2.5.0_react-dom@17.0.2+react@17.0.2 '@snowpack/plugin-typescript': 1.2.1_typescript@4.4.4 - '@types/react': 17.0.33 - '@types/react-dom': 17.0.10 + '@types/react': 17.0.34 + '@types/react-dom': 17.0.11 '@types/react-file-icon': 1.0.1 '@types/react-redux': 7.1.20 '@types/snowpack-env': 2.3.4 '@types/w3c-web-serial': 1.0.2 '@types/web-bluetooth': 0.0.11 - '@typescript-eslint/eslint-plugin': 5.2.0_9a56ca1c5fc1d82b3da3317a5c6f9ab1 - '@typescript-eslint/parser': 5.2.0_eslint@8.1.0+typescript@4.4.4 + '@typescript-eslint/eslint-plugin': 5.3.1_4653b7803b7453f5f37717b7e1448517 + '@typescript-eslint/parser': 5.3.1_eslint@8.2.0+typescript@4.4.4 '@verypossible/eslint-config': 1.6.1_typescript@4.4.4 autoprefixer: 10.4.0_postcss@8.3.11 babel-plugin-module-resolver: 4.1.0 - eslint: 8.1.0 - eslint-config-prettier: 8.3.0_eslint@8.1.0 + eslint: 8.2.0 + eslint-config-prettier: 8.3.0_eslint@8.2.0 eslint-import-resolver-babel-module: 5.3.1_e51044130ac762fd207a8cd2109b5344 - eslint-import-resolver-typescript: 2.5.0_f3fc3a8f1727ab01eb417b5ed5016c22 - eslint-plugin-import: 2.25.2_eslint@8.1.0 - eslint-plugin-react: 7.26.1_eslint@8.1.0 - eslint-plugin-react-hooks: 4.2.1-alpha-9c8161ba8-20211028_eslint@8.1.0 + eslint-import-resolver-typescript: 2.5.0_3f013334cb52440e201498cdb6b29798 + eslint-plugin-import: 2.25.2_eslint@8.2.0 + eslint-plugin-react: 7.26.1_eslint@8.2.0 + eslint-plugin-react-hooks: 4.2.0_eslint@8.2.0 gzipper: 6.0.0 postcss: 8.3.11 prettier: 2.4.1 snowpack: 3.8.8 - tailwindcss: 3.0.0-alpha.1_0c54bdadaf9d9c9c6c134cb2c6c061a3 + tailwindcss: 3.0.0-alpha.2_0c54bdadaf9d9c9c6c134cb2c6c061a3 tar: 6.1.11 typescript: 4.4.4 @@ -135,7 +135,7 @@ packages: '@babel/helper-compilation-targets': 7.16.0_@babel+core@7.16.0 '@babel/helper-module-transforms': 7.16.0 '@babel/helpers': 7.16.0 - '@babel/parser': 7.16.0 + '@babel/parser': 7.16.2 '@babel/template': 7.16.0 '@babel/traverse': 7.16.0 '@babel/types': 7.16.0 @@ -167,7 +167,7 @@ packages: '@babel/compat-data': 7.16.0 '@babel/core': 7.16.0 '@babel/helper-validator-option': 7.14.5 - browserslist: 4.17.5 + browserslist: 4.17.6 semver: 6.3.0 dev: true @@ -292,8 +292,8 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser/7.16.0: - resolution: {integrity: sha512-TEHWXf0xxpi9wKVyBCmRcSSDjbJ/cl6LUdlbYUHEaNQUJGhreJbZrXT6sR4+fZLxVUJqNRB4KyOvjuy/D9009A==} + /@babel/parser/7.16.2: + resolution: {integrity: sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw==} engines: {node: '>=6.0.0'} hasBin: true dev: true @@ -318,7 +318,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.16.0 - '@babel/parser': 7.16.0 + '@babel/parser': 7.16.2 '@babel/types': 7.16.0 dev: true @@ -331,7 +331,7 @@ packages: '@babel/helper-function-name': 7.16.0 '@babel/helper-hoist-variables': 7.16.0 '@babel/helper-split-export-declaration': 7.16.0 - '@babel/parser': 7.16.0 + '@babel/parser': 7.16.2 '@babel/types': 7.16.0 debug: 4.3.2 globals: 11.12.0 @@ -364,8 +364,8 @@ packages: - supports-color dev: true - /@eslint/eslintrc/1.0.3: - resolution: {integrity: sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg==} + /@eslint/eslintrc/1.0.4: + resolution: {integrity: sha512-h8Vx6MdxwWI2WM8/zREHMoqdgLNXEL4QX3MWSVMdyNJGvXVOs+6lp+m2hc3FnuMHDc4poxFNI20vCk0OmI4G0Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 @@ -374,7 +374,7 @@ packages: globals: 13.12.0 ignore: 4.0.6 import-fresh: 3.3.0 - js-yaml: 3.14.1 + js-yaml: 4.1.0 minimatch: 3.0.4 strip-json-comments: 3.1.1 transitivePeerDependencies: @@ -385,8 +385,8 @@ packages: resolution: {integrity: sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==} dev: true - /@headlessui/react/1.4.1_react-dom@17.0.2+react@17.0.2: - resolution: {integrity: sha512-gL6Ns5xQM57cZBzX6IVv6L7nsam8rDEpRhs5fg28SN64ikfmuuMgunc+Rw5C1cMScnvFM+cz32ueVrlSFEVlSg==} + /@headlessui/react/1.4.2_react-dom@17.0.2+react@17.0.2: + resolution: {integrity: sha512-N8tv7kLhg9qGKBkVdtg572BvKvWhmiudmeEpOCyNwzOsZHCXBtl8AazGikIfUS+vBoub20Fse3BjawXDVPPdug==} engines: {node: '>=10'} peerDependencies: react: ^16 || ^17 || ^18 @@ -400,7 +400,7 @@ packages: resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 1.2.0 + '@humanwhocodes/object-schema': 1.2.1 debug: 4.3.2 minimatch: 3.0.4 transitivePeerDependencies: @@ -411,26 +411,26 @@ packages: resolution: {integrity: sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 1.2.0 + '@humanwhocodes/object-schema': 1.2.1 debug: 4.3.2 minimatch: 3.0.4 transitivePeerDependencies: - supports-color dev: true - /@humanwhocodes/object-schema/1.2.0: - resolution: {integrity: sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==} + /@humanwhocodes/object-schema/1.2.1: + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true /@isaacs/string-locale-compare/1.1.0: resolution: {integrity: sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==} dev: true - /@meshtastic/meshtasticjs/0.6.22: - resolution: {integrity: sha512-3G1dwVmwwtrR/TVbCGKcqXDgLDCkUPERiw8P8ZXdYLxYrmlAy2WAZEclzWdQtEmhvBKpXm1+pEBlycN4DXBDXw==} + /@meshtastic/meshtasticjs/0.6.24: + resolution: {integrity: sha512-zdIxyIL6a+UUgZdZvxeRhK/xVhLYB0ZeB5OuA9peRFVE/ICHmAhkmNb58G1hDr0Lq3mPtmlsnh0DiPkI5O4TnQ==} dependencies: '@protobuf-ts/runtime': 2.0.7 - node-fetch: 3.0.0 + node-fetch: 3.1.0 sub-events: 1.8.9 dev: false @@ -602,7 +602,7 @@ packages: react-redux: 7.2.6_react-dom@17.0.2+react@17.0.2 redux: 4.1.2 redux-thunk: 2.4.0_redux@4.1.2 - reselect: 4.1.1 + reselect: 4.1.2 dev: false /@rollup/plugin-commonjs/16.0.0_rollup@2.37.1: @@ -746,7 +746,7 @@ packages: dependencies: '@types/http-cache-semantics': 4.0.1 '@types/keyv': 3.1.3 - '@types/node': 16.11.6 + '@types/node': 16.11.7 '@types/responselike': 1.0.0 dev: true @@ -761,7 +761,7 @@ packages: /@types/hoist-non-react-statics/3.3.1: resolution: {integrity: sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==} dependencies: - '@types/react': 17.0.33 + '@types/react': 17.0.34 hoist-non-react-statics: 3.3.2 /@types/http-cache-semantics/4.0.1: @@ -779,11 +779,11 @@ packages: /@types/keyv/3.1.3: resolution: {integrity: sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==} dependencies: - '@types/node': 16.11.6 + '@types/node': 16.11.7 dev: true - /@types/node/16.11.6: - resolution: {integrity: sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==} + /@types/node/16.11.7: + resolution: {integrity: sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==} dev: true /@types/parse-json/4.0.0: @@ -793,28 +793,28 @@ packages: /@types/prop-types/15.7.4: resolution: {integrity: sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==} - /@types/react-dom/17.0.10: - resolution: {integrity: sha512-8oz3NAUId2z/zQdFI09IMhQPNgIbiP8Lslhv39DIDamr846/0spjZK0vnrMak0iB8EKb9QFTTIdg2Wj2zH5a3g==} + /@types/react-dom/17.0.11: + resolution: {integrity: sha512-f96K3k+24RaLGVu/Y2Ng3e1EbZ8/cVJvypZWd7cy0ofCBaf2lcM46xNhycMZ2xGwbBjRql7hOlZ+e2WlJ5MH3Q==} dependencies: - '@types/react': 17.0.33 + '@types/react': 17.0.34 dev: true /@types/react-file-icon/1.0.1: resolution: {integrity: sha512-QTdYCkYXzh/PfKEIwcPxRdaPQkii5R4Ke7fcO+KB++IDPbYAG1jj+ulEcTA7pRf0gZ5jAvjWcTXBJJRtfYHjlw==} dependencies: - '@types/react': 17.0.33 + '@types/react': 17.0.34 dev: true /@types/react-redux/7.1.20: resolution: {integrity: sha512-q42es4c8iIeTgcnB+yJgRTTzftv3eYYvCZOh1Ckn2eX/3o5TdsQYKUWpLoLuGlcY/p+VAhV9IOEZJcWk/vfkXw==} dependencies: '@types/hoist-non-react-statics': 3.3.1 - '@types/react': 17.0.33 + '@types/react': 17.0.34 hoist-non-react-statics: 3.3.2 redux: 4.1.2 - /@types/react/17.0.33: - resolution: {integrity: sha512-pLWntxXpDPaU+RTAuSGWGSEL2FRTNyRQOjSWDke/rxRg14ncsZvx8AKWMWZqvc1UOaJIAoObdZhAWvRaHFi5rw==} + /@types/react/17.0.34: + resolution: {integrity: sha512-46FEGrMjc2+8XhHXILr+3+/sTe3OfzSPU9YGKILLrUYbQ1CLQC9Daqo1KzENGXAWwrFwiY0l4ZbF20gRvgpWTg==} dependencies: '@types/prop-types': 15.7.4 '@types/scheduler': 0.16.2 @@ -823,13 +823,13 @@ packages: /@types/resolve/1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 16.11.6 + '@types/node': 16.11.7 dev: true /@types/responselike/1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} dependencies: - '@types/node': 16.11.6 + '@types/node': 16.11.7 dev: true /@types/scheduler/0.16.2: @@ -864,7 +864,7 @@ packages: debug: 4.3.2 eslint: 7.32.0 functional-red-black-tree: 1.0.1 - ignore: 5.1.8 + ignore: 5.1.9 regexpp: 3.2.0 semver: 7.3.5 tsutils: 3.21.0_typescript@4.4.4 @@ -873,8 +873,8 @@ packages: - supports-color dev: true - /@typescript-eslint/eslint-plugin/5.2.0_9a56ca1c5fc1d82b3da3317a5c6f9ab1: - resolution: {integrity: sha512-qQwg7sqYkBF4CIQSyRQyqsYvP+g/J0To9ZPVNJpfxfekl5RmdvQnFFTVVwpRtaUDFNvjfe/34TgY/dpc3MgNTw==} + /@typescript-eslint/eslint-plugin/5.3.1_4653b7803b7453f5f37717b7e1448517: + resolution: {integrity: sha512-cFImaoIr5Ojj358xI/SDhjog57OK2NqlpxwdcgyxDA3bJlZcJq5CPzUXtpD7CxI2Hm6ATU7w5fQnnkVnmwpHqw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -884,13 +884,13 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/experimental-utils': 5.2.0_eslint@8.1.0+typescript@4.4.4 - '@typescript-eslint/parser': 5.2.0_eslint@8.1.0+typescript@4.4.4 - '@typescript-eslint/scope-manager': 5.2.0 + '@typescript-eslint/experimental-utils': 5.3.1_eslint@8.2.0+typescript@4.4.4 + '@typescript-eslint/parser': 5.3.1_eslint@8.2.0+typescript@4.4.4 + '@typescript-eslint/scope-manager': 5.3.1 debug: 4.3.2 - eslint: 8.1.0 + eslint: 8.2.0 functional-red-black-tree: 1.0.1 - ignore: 5.1.8 + ignore: 5.1.9 regexpp: 3.2.0 semver: 7.3.5 tsutils: 3.21.0_typescript@4.4.4 @@ -917,19 +917,19 @@ packages: - typescript dev: true - /@typescript-eslint/experimental-utils/5.2.0_eslint@8.1.0+typescript@4.4.4: - resolution: {integrity: sha512-fWyT3Agf7n7HuZZRpvUYdFYbPk3iDCq6fgu3ulia4c7yxmPnwVBovdSOX7RL+k8u6hLbrXcdAehlWUVpGh6IEw==} + /@typescript-eslint/experimental-utils/5.3.1_eslint@8.2.0+typescript@4.4.4: + resolution: {integrity: sha512-RgFn5asjZ5daUhbK5Sp0peq0SSMytqcrkNfU4pnDma2D8P3ElZ6JbYjY8IMSFfZAJ0f3x3tnO3vXHweYg0g59w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' dependencies: '@types/json-schema': 7.0.9 - '@typescript-eslint/scope-manager': 5.2.0 - '@typescript-eslint/types': 5.2.0 - '@typescript-eslint/typescript-estree': 5.2.0_typescript@4.4.4 - eslint: 8.1.0 + '@typescript-eslint/scope-manager': 5.3.1 + '@typescript-eslint/types': 5.3.1 + '@typescript-eslint/typescript-estree': 5.3.1_typescript@4.4.4 + eslint: 8.2.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@8.1.0 + eslint-utils: 3.0.0_eslint@8.2.0 transitivePeerDependencies: - supports-color - typescript @@ -955,8 +955,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser/5.2.0_eslint@8.1.0+typescript@4.4.4: - resolution: {integrity: sha512-Uyy4TjJBlh3NuA8/4yIQptyJb95Qz5PX//6p8n7zG0QnN4o3NF9Je3JHbVU7fxf5ncSXTmnvMtd/LDQWDk0YqA==} + /@typescript-eslint/parser/5.3.1_eslint@8.2.0+typescript@4.4.4: + resolution: {integrity: sha512-TD+ONlx5c+Qhk21x9gsJAMRohWAUMavSOmJgv3JGy9dgPhuBd5Wok0lmMClZDyJNLLZK1JRKiATzCKZNUmoyfw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -965,11 +965,11 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.2.0 - '@typescript-eslint/types': 5.2.0 - '@typescript-eslint/typescript-estree': 5.2.0_typescript@4.4.4 + '@typescript-eslint/scope-manager': 5.3.1 + '@typescript-eslint/types': 5.3.1 + '@typescript-eslint/typescript-estree': 5.3.1_typescript@4.4.4 debug: 4.3.2 - eslint: 8.1.0 + eslint: 8.2.0 typescript: 4.4.4 transitivePeerDependencies: - supports-color @@ -983,12 +983,12 @@ packages: '@typescript-eslint/visitor-keys': 4.33.0 dev: true - /@typescript-eslint/scope-manager/5.2.0: - resolution: {integrity: sha512-RW+wowZqPzQw8MUFltfKYZfKXqA2qgyi6oi/31J1zfXJRpOn6tCaZtd9b5u9ubnDG2n/EMvQLeZrsLNPpaUiFQ==} + /@typescript-eslint/scope-manager/5.3.1: + resolution: {integrity: sha512-XksFVBgAq0Y9H40BDbuPOTUIp7dn4u8oOuhcgGq7EoDP50eqcafkMVGrypyVGvDYHzjhdUCUwuwVUK4JhkMAMg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.2.0 - '@typescript-eslint/visitor-keys': 5.2.0 + '@typescript-eslint/types': 5.3.1 + '@typescript-eslint/visitor-keys': 5.3.1 dev: true /@typescript-eslint/types/4.33.0: @@ -996,8 +996,8 @@ packages: engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dev: true - /@typescript-eslint/types/5.2.0: - resolution: {integrity: sha512-cTk6x08qqosps6sPyP2j7NxyFPlCNsJwSDasqPNjEQ8JMD5xxj2NHxcLin5AJQ8pAVwpQ8BMI3bTxR0zxmK9qQ==} + /@typescript-eslint/types/5.3.1: + resolution: {integrity: sha512-bG7HeBLolxKHtdHG54Uac750eXuQQPpdJfCYuw4ZI3bZ7+GgKClMWM8jExBtp7NSP4m8PmLRM8+lhzkYnSmSxQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -1022,8 +1022,8 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree/5.2.0_typescript@4.4.4: - resolution: {integrity: sha512-RsdXq2XmVgKbm9nLsE3mjNUM7BTr/K4DYR9WfFVMUuozHWtH5gMpiNZmtrMG8GR385EOSQ3kC9HiEMJWimxd/g==} + /@typescript-eslint/typescript-estree/5.3.1_typescript@4.4.4: + resolution: {integrity: sha512-PwFbh/PKDVo/Wct6N3w+E4rLZxUDgsoII/GrWM2A62ETOzJd4M6s0Mu7w4CWsZraTbaC5UQI+dLeyOIFF1PquQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -1031,8 +1031,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.2.0 - '@typescript-eslint/visitor-keys': 5.2.0 + '@typescript-eslint/types': 5.3.1 + '@typescript-eslint/visitor-keys': 5.3.1 debug: 4.3.2 globby: 11.0.4 is-glob: 4.0.3 @@ -1051,12 +1051,12 @@ packages: eslint-visitor-keys: 2.1.0 dev: true - /@typescript-eslint/visitor-keys/5.2.0: - resolution: {integrity: sha512-Nk7HizaXWWCUBfLA/rPNKMzXzWS8Wg9qHMuGtT+v2/YpPij4nVXrVJc24N/r5WrrmqK31jCrZxeHqIgqRzs0Xg==} + /@typescript-eslint/visitor-keys/5.3.1: + resolution: {integrity: sha512-3cHUzUuVTuNHx0Gjjt5pEHa87+lzyqOiHXy/Gz+SJOCW1mpw9xQHIIEwnKn+Thph1mgWyZ90nboOcSuZr/jTTQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.2.0 - eslint-visitor-keys: 3.0.0 + '@typescript-eslint/types': 5.3.1 + eslint-visitor-keys: 3.1.0 dev: true /@verypossible/eslint-config/1.6.1_typescript@4.4.4: @@ -1166,8 +1166,8 @@ packages: uri-js: 4.4.1 dev: true - /ajv/8.6.3: - resolution: {integrity: sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==} + /ajv/8.7.1: + resolution: {integrity: sha512-gPpOObTO1QjbnN1sVMjJcp1TF9nggMfO4MBR5uQl6ZVTOaEPq5i4oq/6R9q2alMMPB3eg53wFv1RuJBLuxf3Hw==} dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 @@ -1286,8 +1286,8 @@ packages: resolution: {integrity: sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=} dev: true - /asn1/0.2.4: - resolution: {integrity: sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==} + /asn1/0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} dependencies: safer-buffer: 2.1.2 dev: true @@ -1320,8 +1320,8 @@ packages: peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.17.5 - caniuse-lite: 1.0.30001272 + browserslist: 4.17.6 + caniuse-lite: 1.0.30001278 fraction.js: 4.1.1 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -1349,7 +1349,7 @@ packages: find-babel-config: 1.2.0 glob: 7.2.0 pkg-up: 3.1.0 - reselect: 4.1.1 + reselect: 4.1.2 resolve: 1.20.0 dev: true @@ -1417,13 +1417,13 @@ packages: fill-range: 7.0.1 dev: true - /browserslist/4.17.5: - resolution: {integrity: sha512-I3ekeB92mmpctWBoLXe0d5wPS2cBuRvvW0JyyJHMrk9/HmP2ZjrTboNAZ8iuGqaEIlKguljbQY32OkOJIRrgoA==} + /browserslist/4.17.6: + resolution: {integrity: sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001272 - electron-to-chromium: 1.3.885 + caniuse-lite: 1.0.30001278 + electron-to-chromium: 1.3.891 escalade: 3.1.1 node-releases: 2.0.1 picocolors: 1.0.0 @@ -1482,7 +1482,7 @@ packages: clone-response: 1.0.2 get-stream: 5.2.0 http-cache-semantics: 4.1.0 - keyv: 4.0.3 + keyv: 4.0.4 lowercase-keys: 2.0.0 normalize-url: 6.1.0 responselike: 2.0.0 @@ -1510,8 +1510,8 @@ packages: engines: {node: '>= 6'} dev: true - /caniuse-lite/1.0.30001272: - resolution: {integrity: sha512-DV1j9Oot5dydyH1v28g25KoVm7l8MTxazwuiH3utWiAS6iL/9Nh//TGwqFEeqqN8nnWYQ8HHhUq+o4QPt9kvYw==} + /caniuse-lite/1.0.30001278: + resolution: {integrity: sha512-mpF9KeH8u5cMoEmIic/cr7PNS+F5LWBk0t2ekGT60lFf0Wq+n9LspAj0g3P+o7DQhD3sUdlMln4YFAWhFYn9jg==} dev: true /caseless/0.12.0: @@ -1735,9 +1735,9 @@ packages: assert-plus: 1.0.0 dev: true - /data-uri-to-buffer/3.0.1: - resolution: {integrity: sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==} - engines: {node: '>= 6'} + /data-uri-to-buffer/4.0.0: + resolution: {integrity: sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==} + engines: {node: '>= 12'} dev: false /debug/2.6.9: @@ -1951,8 +1951,8 @@ packages: safer-buffer: 2.1.2 dev: true - /electron-to-chromium/1.3.885: - resolution: {integrity: sha512-JXKFJcVWrdHa09n4CNZYfYaK6EW5aAew7/wr3L1OnsD1L+JHL+RCtd7QgIsxUbFPeTwPlvnpqNNTOLkoefmtXg==} + /electron-to-chromium/1.3.891: + resolution: {integrity: sha512-3cpwR82QkIS01CN/dup/4Yr3BiOiRLlZlcAFn/5FbNCunMO9ojqDgEP9JEo1QNLflu3pEnPWve50gHOEKc7r6w==} dev: true /emoji-regex/8.0.0: @@ -2114,13 +2114,13 @@ packages: eslint: 7.32.0 dev: true - /eslint-config-prettier/8.3.0_eslint@8.1.0: + /eslint-config-prettier/8.3.0_eslint@8.2.0: resolution: {integrity: sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.1.0 + eslint: 8.2.0 dev: true /eslint-import-resolver-babel-module/5.3.1_e51044130ac762fd207a8cd2109b5344: @@ -2142,7 +2142,7 @@ packages: resolve: 1.20.0 dev: true - /eslint-import-resolver-typescript/2.5.0_560ef94424f7023f0ab025f67f79aa67: + /eslint-import-resolver-typescript/2.5.0_3f013334cb52440e201498cdb6b29798: resolution: {integrity: sha512-qZ6e5CFr+I7K4VVhQu3M/9xGv9/YmwsEXrsm3nimw8vWaVHRDrQRp26BgCypTxBp3vUp4o5aVEJRiy0F2DFddQ==} engines: {node: '>=4'} peerDependencies: @@ -2150,8 +2150,8 @@ packages: eslint-plugin-import: '*' dependencies: debug: 4.3.2 - eslint: 7.32.0 - eslint-plugin-import: 2.25.2_eslint@7.32.0 + eslint: 8.2.0 + eslint-plugin-import: 2.25.2_eslint@8.2.0 glob: 7.2.0 is-glob: 4.0.3 resolve: 1.20.0 @@ -2160,7 +2160,7 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript/2.5.0_f3fc3a8f1727ab01eb417b5ed5016c22: + /eslint-import-resolver-typescript/2.5.0_560ef94424f7023f0ab025f67f79aa67: resolution: {integrity: sha512-qZ6e5CFr+I7K4VVhQu3M/9xGv9/YmwsEXrsm3nimw8vWaVHRDrQRp26BgCypTxBp3vUp4o5aVEJRiy0F2DFddQ==} engines: {node: '>=4'} peerDependencies: @@ -2168,8 +2168,8 @@ packages: eslint-plugin-import: '*' dependencies: debug: 4.3.2 - eslint: 8.1.0 - eslint-plugin-import: 2.25.2_eslint@8.1.0 + eslint: 7.32.0 + eslint-plugin-import: 2.25.2_eslint@7.32.0 glob: 7.2.0 is-glob: 4.0.3 resolve: 1.20.0 @@ -2209,7 +2209,7 @@ packages: tsconfig-paths: 3.11.0 dev: true - /eslint-plugin-import/2.25.2_eslint@8.1.0: + /eslint-plugin-import/2.25.2_eslint@8.2.0: resolution: {integrity: sha512-qCwQr9TYfoBHOFcVGKY9C9unq05uOxxdklmBXLVvcwo68y5Hta6/GzCZEMx2zQiu0woKNEER0LE7ZgaOfBU14g==} engines: {node: '>=4'} peerDependencies: @@ -2219,7 +2219,7 @@ packages: array.prototype.flat: 1.2.5 debug: 2.6.9 doctrine: 2.1.0 - eslint: 8.1.0 + eslint: 8.2.0 eslint-import-resolver-node: 0.3.6 eslint-module-utils: 2.7.1 has: 1.0.3 @@ -2240,13 +2240,13 @@ packages: eslint: 7.32.0 dev: true - /eslint-plugin-react-hooks/4.2.1-alpha-9c8161ba8-20211028_eslint@8.1.0: - resolution: {integrity: sha512-wqdj1w8azrZwM5yYh3Pm6y/Cxg6nA+Nb2OqkHZ3Bf+cmnoCs2MSDUal+AnKAZN3kxWjSK4rljuromNaxUejyiA==} + /eslint-plugin-react-hooks/4.2.0_eslint@8.2.0: + resolution: {integrity: sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==} engines: {node: '>=10'} peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 dependencies: - eslint: 8.1.0 + eslint: 8.2.0 dev: true /eslint-plugin-react/7.26.1_eslint@7.32.0: @@ -2272,7 +2272,7 @@ packages: string.prototype.matchall: 4.0.6 dev: true - /eslint-plugin-react/7.26.1_eslint@8.1.0: + /eslint-plugin-react/7.26.1_eslint@8.2.0: resolution: {integrity: sha512-Lug0+NOFXeOE+ORZ5pbsh6mSKjBKXDXItUD2sQoT+5Yl0eoT82DqnXeTMfUare4QVCn9QwXbfzO/dBLjLXwVjQ==} engines: {node: '>=4'} peerDependencies: @@ -2281,7 +2281,7 @@ packages: array-includes: 3.1.4 array.prototype.flatmap: 1.2.5 doctrine: 2.1.0 - eslint: 8.1.0 + eslint: 8.2.0 estraverse: 5.3.0 jsx-ast-utils: 3.2.1 minimatch: 3.0.4 @@ -2328,13 +2328,13 @@ packages: eslint-visitor-keys: 2.1.0 dev: true - /eslint-utils/3.0.0_eslint@8.1.0: + /eslint-utils/3.0.0_eslint@8.2.0: resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: eslint: '>=5' dependencies: - eslint: 8.1.0 + eslint: 8.2.0 eslint-visitor-keys: 2.1.0 dev: true @@ -2348,8 +2348,8 @@ packages: engines: {node: '>=10'} dev: true - /eslint-visitor-keys/3.0.0: - resolution: {integrity: sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==} + /eslint-visitor-keys/3.1.0: + resolution: {integrity: sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -2395,19 +2395,19 @@ packages: semver: 7.3.5 strip-ansi: 6.0.1 strip-json-comments: 3.1.1 - table: 6.7.2 + table: 6.7.3 text-table: 0.2.0 v8-compile-cache: 2.3.0 transitivePeerDependencies: - supports-color dev: true - /eslint/8.1.0: - resolution: {integrity: sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw==} + /eslint/8.2.0: + resolution: {integrity: sha512-erw7XmM+CLxTOickrimJ1SiF55jiNlVSp2qqm0NuBWPtHYQCegD5ZMaW0c3i5ytPqL+SSLaCxdvQXFPLJn+ABw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint/eslintrc': 1.0.3 + '@eslint/eslintrc': 1.0.4 '@humanwhocodes/config-array': 0.6.0 ajv: 6.12.6 chalk: 4.1.2 @@ -2417,8 +2417,8 @@ packages: enquirer: 2.3.6 escape-string-regexp: 4.0.0 eslint-scope: 6.0.0 - eslint-utils: 3.0.0_eslint@8.1.0 - eslint-visitor-keys: 3.0.0 + eslint-utils: 3.0.0_eslint@8.2.0 + eslint-visitor-keys: 3.1.0 espree: 9.0.0 esquery: 1.4.0 esutils: 2.0.3 @@ -2464,7 +2464,7 @@ packages: dependencies: acorn: 8.5.0 acorn-jsx: 5.3.2_acorn@8.5.0 - eslint-visitor-keys: 3.0.0 + eslint-visitor-keys: 3.1.0 dev: true /esprima/4.0.1: @@ -2580,7 +2580,7 @@ packages: resolution: {integrity: sha512-ax1Y5I9w+9+JiM+wdHkhBoxew+zG4AJ2SvAD1v1szpddUIiPERVGBxrMcB2ZqW0Y3PP8bOWYv2zqQq1Jp2kqUQ==} engines: {node: ^12.20 || >= 14.13} dependencies: - web-streams-polyfill: 3.1.1 + web-streams-polyfill: 3.2.0 dev: false /file-entry-cache/6.0.1: @@ -2673,6 +2673,13 @@ packages: mime-types: 2.1.33 dev: true + /formdata-polyfill/4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + dependencies: + fetch-blob: 3.1.3 + dev: false + /fraction.js/4.1.1: resolution: {integrity: sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==} dev: true @@ -2813,7 +2820,7 @@ packages: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.2.7 - ignore: 5.1.8 + ignore: 5.1.9 merge2: 1.4.1 slash: 3.0.0 dev: true @@ -2900,8 +2907,8 @@ packages: function-bind: 1.1.1 dev: true - /history/5.0.1: - resolution: {integrity: sha512-5qC/tFUKfVci5kzgRxZxN5Mf1CV8NmJx9ByaPX0YTLx5Vz3Svh7NYp6eA4CpDq4iA9D0C1t8BNIfvQIrUI3mVw==} + /history/5.1.0: + resolution: {integrity: sha512-zPuQgPacm2vH2xdORvGGz1wQMuHSIB56yNAy5FnLuwOwgSYyPKptJtcMm6Ev+hRGeS+GzhbmRacHzvlESbFwDg==} dependencies: '@babel/runtime': 7.16.0 dev: false @@ -2997,8 +3004,8 @@ packages: '@babel/runtime': 7.16.0 dev: false - /i18next/21.3.3: - resolution: {integrity: sha512-Wv5arCT9pK35nfhOzTdS64T7JpPcoqnkOEidxc4zF0DZ8KetpvmnkO+uWkXy+DFz6zWzPX7U9bIemwBqpFRprw==} + /i18next/21.4.1: + resolution: {integrity: sha512-uTCDfoMKTX6b/Amss7w/hQU8NV80ahmoKKNYUg0qbLbtUAMvYIWS2VvCCeNEGQIaEjyC4GV4W+iQbBcv3A/ViA==} dependencies: '@babel/runtime': 7.16.0 dev: false @@ -3035,8 +3042,8 @@ packages: engines: {node: '>= 4'} dev: true - /ignore/5.1.8: - resolution: {integrity: sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==} + /ignore/5.1.9: + resolution: {integrity: sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==} engines: {node: '>= 4'} dev: true @@ -3434,16 +3441,16 @@ packages: object.assign: 4.1.2 dev: true - /just-diff-apply/3.0.0: - resolution: {integrity: sha512-K2MLc+ZC2DVxX4V61bIKPeMUUfj1YYZ3h0myhchDXOW1cKoPZMnjIoNCqv9bF2n5Oob1PFxuR2gVJxkxz4e58w==} + /just-diff-apply/3.1.2: + resolution: {integrity: sha512-TCa7ZdxCeq6q3Rgms2JCRHTCfWAETPZ8SzYUbkYF6KR3I03sN29DaOIC+xyWboIcMvjAsD5iG2u/RWzHD8XpgQ==} dev: true /just-diff/3.1.1: resolution: {integrity: sha512-sdMWKjRq8qWZEjDcVA6llnUT8RDEBIfOiGpYFPYa9u+2c39JCsejktSP7mj5eRid5EIvTzIpQ2kDOCw1Nq9BjQ==} dev: true - /keyv/4.0.3: - resolution: {integrity: sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==} + /keyv/4.0.4: + resolution: {integrity: sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==} dependencies: json-buffer: 3.0.1 dev: true @@ -3461,8 +3468,8 @@ packages: type-check: 0.4.0 dev: true - /lilconfig/2.0.3: - resolution: {integrity: sha512-EHKqr/+ZvdKCifpNrJCKxBTgk5XupZA3y/aCPY9mxfgBzmgh93Mt/WqjjQ38oMxXuvDokaKiM3lAgvSH2sjtHg==} + /lilconfig/2.0.4: + resolution: {integrity: sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==} engines: {node: '>=10'} dev: true @@ -3513,10 +3520,6 @@ packages: resolution: {integrity: sha1-soqmKIorn8ZRA1x3EfZathkDMaY=} dev: true - /lodash.clonedeep/4.5.0: - resolution: {integrity: sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=} - dev: true - /lodash.merge/4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true @@ -3750,12 +3753,13 @@ packages: engines: {node: '>= 0.6'} dev: true - /node-fetch/3.0.0: - resolution: {integrity: sha512-bKMI+C7/T/SPU1lKnbQbwxptpCrG9ashG+VkytmXCPZyuM9jB6VU+hY0oi4lC8LxTtAeWdckNCTa3nrGsAdA3Q==} + /node-fetch/3.1.0: + resolution: {integrity: sha512-QU0WbIfMUjd5+MUzQOYhenAazakV7Irh1SGkWCsRzBwvm4fAhzEUaHMJ6QLP7gWT6WO9/oH2zhKMMGMuIrDyKw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - data-uri-to-buffer: 3.0.1 + data-uri-to-buffer: 4.0.0 fetch-blob: 3.1.3 + formdata-polyfill: 4.0.10 dev: false /node-gyp-build/4.3.0: @@ -4138,7 +4142,7 @@ packages: dependencies: json-parse-even-better-errors: 2.3.1 just-diff: 3.1.1 - just-diff-apply: 3.0.0 + just-diff-apply: 3.1.2 dev: true /parse-json/5.2.0: @@ -4254,7 +4258,7 @@ packages: optional: true dependencies: import-cwd: 3.0.0 - lilconfig: 2.0.3 + lilconfig: 2.0.4 yaml: 1.10.2 dev: true @@ -4473,15 +4477,15 @@ packages: react-dom: 17.0.2_react@17.0.2 dev: false - /react-hook-form/7.18.0_react@17.0.2: - resolution: {integrity: sha512-aTFs1jXGvpBBv4vYuhheVd9KbAZw/l3DOZhLIadNDyFddaDQmn+yJa63IZ14GDFz4NFgIi+ROkubfGJG2x6q2Q==} + /react-hook-form/7.19.1_react@17.0.2: + resolution: {integrity: sha512-e0Oii07qNAa72JeGUT5czVCMwdAFPxmxYvd1Y9oPy2KVD6ZGblN6DG1G7AwL9Bz2lOPFZu15SRNnn0Vpx/eGdg==} peerDependencies: react: ^16.8.0 || ^17 dependencies: react: 17.0.2 dev: false - /react-i18next/11.13.0_i18next@21.3.3+react@17.0.2: + /react-i18next/11.13.0_i18next@21.4.1+react@17.0.2: resolution: {integrity: sha512-AY8ydSqx8LVm1Tn5yXFA0JwCeSWpcFOSr96HrjUXXVAWWbptamZOY2iMxVaGNlGxSLnRY0U2sdCIPVYHcmhBxQ==} peerDependencies: i18next: '>= 19.0.0' @@ -4489,7 +4493,7 @@ packages: dependencies: '@babel/runtime': 7.16.0 html-parse-stringify: 3.0.1 - i18next: 21.3.3 + i18next: 21.4.1 react: 17.0.2 dev: false @@ -4644,8 +4648,8 @@ packages: engines: {node: '>=0.10.0'} dev: true - /reselect/4.1.1: - resolution: {integrity: sha512-Jjt8Us6hAWJpjucyladHvUGR+q1mHHgWtGDXlhvvKyNyIeQ3bjuWLDX0bsTLhbm/gd4iXEACBlODUHBlLWiNnA==} + /reselect/4.1.2: + resolution: {integrity: sha512-wg60ebcPOtxcptIUfrr7Jt3h4BR86cCW3R7y4qt65lnNb4yz4QgrXcbSioVsIOYguyz42+XTHIyJ5TEruzkFgQ==} /resolve-alpn/1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} @@ -4926,7 +4930,7 @@ packages: engines: {node: '>=0.10.0'} hasBin: true dependencies: - asn1: 0.2.4 + asn1: 0.2.6 assert-plus: 1.0.0 bcrypt-pbkdf: 1.0.2 dashdash: 1.14.1 @@ -5115,20 +5119,19 @@ packages: react: 17.0.2 dev: false - /table/6.7.2: - resolution: {integrity: sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==} + /table/6.7.3: + resolution: {integrity: sha512-5DkIxeA7XERBqMwJq0aHZOdMadBx4e6eDoFRuyT5VR82J0Ycg2DwM6GfA/EQAhJ+toRTaS1lIdSQCqgrmhPnlw==} engines: {node: '>=10.0.0'} dependencies: - ajv: 8.6.3 - lodash.clonedeep: 4.5.0 + ajv: 8.7.1 lodash.truncate: 4.4.2 slice-ansi: 4.0.0 string-width: 4.2.3 strip-ansi: 6.0.1 dev: true - /tailwindcss/3.0.0-alpha.1_0c54bdadaf9d9c9c6c134cb2c6c061a3: - resolution: {integrity: sha512-VweVLyu1tpo/i2MnoyDIunToZHYhHRZLGuKDt9I+nnjFoW07NhDwwHWsUyRHKowP5MZaHduhV+AVlM6Auy7m3A==} + /tailwindcss/3.0.0-alpha.2_0c54bdadaf9d9c9c6c134cb2c6c061a3: + resolution: {integrity: sha512-DLPLL927a05mhwTAPMPgSk1EFLAsWc0qmZeB1yHDSRAj/Bfn0nvdFTqj2u/8FnM5EiS20nsqCZ/HFfXzzaFOZg==} engines: {node: '>=12.13.0'} hasBin: true peerDependencies: @@ -5265,7 +5268,7 @@ packages: /type-route/0.6.0: resolution: {integrity: sha512-uh5bxHxHOKNDNTetGwBgtSP5ba3SUtnKcdj3d5AjbIALVbYBwaix4wwfpyxqrE9ia31LknXUc+359FChcC01jw==} dependencies: - history: 5.0.1 + history: 5.1.0 dev: false /typedarray-to-buffer/3.1.5: @@ -5387,8 +5390,8 @@ packages: resolution: {integrity: sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==} dev: true - /web-streams-polyfill/3.1.1: - resolution: {integrity: sha512-Czi3fG883e96T4DLEPRvufrF2ydhOOW1+1a6c3gNjH2aIh50DNFBdfwh2AKoOf1rXvpvavAoA11Qdq9+BKjE0Q==} + /web-streams-polyfill/3.2.0: + resolution: {integrity: sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==} engines: {node: '>= 8'} dev: false diff --git a/src/components/generic/SidebarItem.tsx b/src/components/generic/SidebarItem.tsx index ce83009b..25497f63 100644 --- a/src/components/generic/SidebarItem.tsx +++ b/src/components/generic/SidebarItem.tsx @@ -2,11 +2,11 @@ import React from 'react'; type DefaultDivProps = JSX.IntrinsicElements['div']; -interface SidebarItemProps extends DefaultDivProps { +export interface SidebarItemProps extends DefaultDivProps { title: string; description: string; - selected: boolean; icon: JSX.Element; + selected?: boolean; } export const SidebarItem = ({ diff --git a/src/components/templates/PageLayout.tsx b/src/components/templates/PageLayout.tsx new file mode 100644 index 00000000..d7d76a13 --- /dev/null +++ b/src/components/templates/PageLayout.tsx @@ -0,0 +1,87 @@ +import React from 'react'; + +import { FiXCircle } from 'react-icons/fi'; + +import { IconButton } from '@app/components/generic/IconButton.jsx'; +import { useBreakpoint } from '@app/hooks/breakpoint'; +import { Drawer } from '@components/generic/Drawer'; +import { SidebarItem, SidebarItemProps } from '@components/generic/SidebarItem'; +import { Tab } from '@headlessui/react'; + +export interface PageLayoutProps { + title: string; + sidebarItems: SidebarItemProps[]; + panels: JSX.Element[]; + emptyMessage?: string; +} + +export const PageLayout = ({ + title, + sidebarItems, + panels, + emptyMessage, +}: PageLayoutProps): JSX.Element => { + const [navOpen, setNavOpen] = React.useState(false); + + const { breakpoint } = useBreakpoint(); + + return ( + +
+ { + setNavOpen(!navOpen); + }} + > + +
+
+ {title} +
+
+ } + onClick={(): void => { + setNavOpen(false); + }} + /> +
+
+ {!sidebarItems.length && ( + + {emptyMessage} + + )} + {sidebarItems.map((props, index) => ( + { + setNavOpen(false); + }} + > + {({ selected }): JSX.Element => ( + + )} + + ))} +
+
+
+ + {panels.map((Panel, index) => ( + + {React.cloneElement(Panel, { + key: index, + navOpen: navOpen, + setNavOpen: setNavOpen, + })} + + ))} + +
+
+
+ ); +}; diff --git a/src/pages/Nodes/Index.tsx b/src/pages/Nodes/Index.tsx index e5d3916e..0dcbe640 100644 --- a/src/pages/Nodes/Index.tsx +++ b/src/pages/Nodes/Index.tsx @@ -1,102 +1,39 @@ import React from 'react'; import Avatar from 'boring-avatars'; -import { FiXCircle } from 'react-icons/fi'; -import { IconButton } from '@app/components/generic/IconButton.jsx'; -import { useBreakpoint } from '@app/hooks/breakpoint'; +import { PageLayout } from '@app/components/templates/PageLayout.jsx'; import { useAppSelector } from '@app/hooks/redux'; -import { Drawer } from '@components/generic/Drawer'; -import { SidebarItem } from '@components/generic/SidebarItem'; -import { Tab } from '@headlessui/react'; import { Protobuf } from '@meshtastic/meshtasticjs'; import { Node } from './Node'; export const Nodes = (): JSX.Element => { - const [navOpen, setNavOpen] = React.useState(false); - - const { breakpoint } = useBreakpoint(); - const nodes = useAppSelector((state) => state.meshtastic.nodes); return ( - -
- { - setNavOpen(!navOpen); - }} - > - -
-
- Nodes -
-
- } - onClick={(): void => { - setNavOpen(false); - }} - /> -
-
- - {!nodes.length && ( - - No nodes discovered yet... - - )} - - {nodes.map((node) => ( - { - setNavOpen(false); - }} - key={node.num} - > - {({ selected }): JSX.Element => ( - - } - /> - )} - - ))} -
-
-
- - {nodes.map((node) => ( - - - - ))} - -
-
-
+ { + return { + title: node.user?.longName ?? node.num.toString(), + description: node.user?.hwModel + ? Protobuf.HardwareModel[node.user.hwModel] + : 'Unknown Hardware', + icon: ( + + ), + }; + })} + panels={nodes.map((node, index) => ( + + ))} + /> ); }; diff --git a/src/pages/Nodes/Node.tsx b/src/pages/Nodes/Node.tsx index fd8b2560..65a16fec 100644 --- a/src/pages/Nodes/Node.tsx +++ b/src/pages/Nodes/Node.tsx @@ -12,8 +12,8 @@ import { PrimaryTemplate } from '@components/templates/PrimaryTemplate'; import type { Protobuf } from '@meshtastic/meshtasticjs'; export interface NodeProps { - navOpen: boolean; - setNavOpen: React.Dispatch>; + navOpen?: boolean; + setNavOpen?: React.Dispatch>; node: Protobuf.NodeInfo; } @@ -26,7 +26,7 @@ export const Node = ({ navOpen, setNavOpen, node }: NodeProps): JSX.Element => { } onClick={(): void => { - setNavOpen(!navOpen); + setNavOpen && setNavOpen(!navOpen); }} /> } diff --git a/src/pages/Plugins/Files.tsx b/src/pages/Plugins/Files.tsx index 2a52804d..889e2112 100644 --- a/src/pages/Plugins/Files.tsx +++ b/src/pages/Plugins/Files.tsx @@ -11,8 +11,8 @@ import { useAppSelector } from '@app/hooks/redux'; import { PrimaryTemplate } from '@components/templates/PrimaryTemplate'; export interface RangeTestProps { - navOpen: boolean; - setNavOpen: React.Dispatch>; + navOpen?: boolean; + setNavOpen?: React.Dispatch>; } interface IFile { name: string; @@ -58,7 +58,7 @@ export const Files = ({ navOpen, setNavOpen }: RangeTestProps): JSX.Element => { } onClick={(): void => { - setNavOpen(!navOpen); + setNavOpen && setNavOpen(!navOpen); }} /> } diff --git a/src/pages/Plugins/Index.tsx b/src/pages/Plugins/Index.tsx index f63583bf..9d0313dd 100644 --- a/src/pages/Plugins/Index.tsx +++ b/src/pages/Plugins/Index.tsx @@ -1,86 +1,29 @@ import React from 'react'; -import { FiFileText, FiRss, FiXCircle } from 'react-icons/fi'; +import { FiFileText, FiRss } from 'react-icons/fi'; -import { IconButton } from '@app/components/generic/IconButton.jsx'; -import { useBreakpoint } from '@app/hooks/breakpoint'; -import { Drawer } from '@components/generic/Drawer'; -import { SidebarItem } from '@components/generic/SidebarItem'; -import { Tab } from '@headlessui/react'; +import { PageLayout } from '@app/components/templates/PageLayout.jsx'; import { Files } from './Files'; import { RangeTest } from './RangeTest'; export const Plugins = (): JSX.Element => { - const [navOpen, setNavOpen] = React.useState(false); - - const { breakpoint } = useBreakpoint(); - return ( - -
- { - setNavOpen(!navOpen); - }} - > - -
-
- Plugins -
-
- } - onClick={(): void => { - setNavOpen(false); - }} - /> -
-
- { - setNavOpen(false); - }} - > - {({ selected }): JSX.Element => ( - } - /> - )} - - { - setNavOpen(false); - }} - > - {({ selected }): JSX.Element => ( - } - /> - )} - -
-
-
- - - - - - - - -
-
-
+ , + }, + { + title: 'File Browser', + description: 'HTTP only file browser', + icon: , + }, + ]} + panels={[, ]} + /> ); }; diff --git a/src/pages/Plugins/RangeTest.tsx b/src/pages/Plugins/RangeTest.tsx index 40d0eb22..8e70dcbf 100644 --- a/src/pages/Plugins/RangeTest.tsx +++ b/src/pages/Plugins/RangeTest.tsx @@ -15,8 +15,8 @@ import { PrimaryTemplate } from '@components/templates/PrimaryTemplate'; import type { RadioConfig_UserPreferences } from '@meshtastic/meshtasticjs/dist/generated'; export interface RangeTestProps { - navOpen: boolean; - setNavOpen: React.Dispatch>; + navOpen?: boolean; + setNavOpen?: React.Dispatch>; } export const RangeTest = ({ @@ -49,7 +49,7 @@ export const RangeTest = ({ } onClick={(): void => { - setNavOpen(!navOpen); + setNavOpen && setNavOpen(!navOpen); }} /> } diff --git a/src/pages/settings/Channels.tsx b/src/pages/settings/Channels.tsx index 2b2de58e..8e7a16ed 100644 --- a/src/pages/settings/Channels.tsx +++ b/src/pages/settings/Channels.tsx @@ -11,8 +11,8 @@ import { Button } from '@components/generic/Button'; import { PrimaryTemplate } from '@components/templates/PrimaryTemplate'; export interface ChannelsProps { - navOpen: boolean; - setNavOpen: React.Dispatch>; + navOpen?: boolean; + setNavOpen?: React.Dispatch>; } export const Channels = ({ @@ -30,7 +30,7 @@ export const Channels = ({ } onClick={(): void => { - setNavOpen(!navOpen); + setNavOpen && setNavOpen(!navOpen); }} /> } diff --git a/src/pages/settings/Connection.tsx b/src/pages/settings/Connection.tsx index 7784f5b2..0ef1db08 100644 --- a/src/pages/settings/Connection.tsx +++ b/src/pages/settings/Connection.tsx @@ -25,8 +25,8 @@ import type { } from '@meshtastic/meshtasticjs/dist/types'; export interface ConnectionProps { - navOpen: boolean; - setNavOpen: React.Dispatch>; + navOpen?: boolean; + setNavOpen?: React.Dispatch>; } enum connType { @@ -125,7 +125,7 @@ export const Connection = ({ } onClick={(): void => { - setNavOpen(!navOpen); + setNavOpen && setNavOpen(!navOpen); }} /> } @@ -142,8 +142,8 @@ export const Connection = ({ } >
diff --git a/src/pages/settings/Device.tsx b/src/pages/settings/Device.tsx index 0ff240c6..7da0cd0c 100644 --- a/src/pages/settings/Device.tsx +++ b/src/pages/settings/Device.tsx @@ -15,8 +15,8 @@ import { PrimaryTemplate } from '@components/templates/PrimaryTemplate'; import { Protobuf } from '@meshtastic/meshtasticjs'; export interface DeviceProps { - navOpen: boolean; - setNavOpen: React.Dispatch>; + navOpen?: boolean; + setNavOpen?: React.Dispatch>; } export const Device = ({ navOpen, setNavOpen }: DeviceProps): JSX.Element => { @@ -46,7 +46,7 @@ export const Device = ({ navOpen, setNavOpen }: DeviceProps): JSX.Element => { } onClick={(): void => { - setNavOpen(!navOpen); + setNavOpen && setNavOpen(!navOpen); }} /> } diff --git a/src/pages/settings/Index.tsx b/src/pages/settings/Index.tsx index b80b29c6..faaa7e86 100644 --- a/src/pages/settings/Index.tsx +++ b/src/pages/settings/Index.tsx @@ -6,14 +6,9 @@ import { FiLink2, FiRss, FiSmartphone, - FiXCircle, } from 'react-icons/fi'; -import { IconButton } from '@app/components/generic/IconButton.jsx'; -import { useBreakpoint } from '@app/hooks/breakpoint'; -import { Drawer } from '@components/generic/Drawer'; -import { SidebarItem } from '@components/generic/SidebarItem'; -import { Tab } from '@headlessui/react'; +import { PageLayout } from '@app/components/templates/PageLayout.jsx'; import { Channels } from './Channels'; import { Connection } from './Connection'; @@ -22,114 +17,43 @@ import { Interface } from './Interface'; import { Radio } from './Radio'; export const Settings = (): JSX.Element => { - const [navOpen, setNavOpen] = React.useState(false); - - const { breakpoint } = useBreakpoint(); - return ( - -
- { - setNavOpen(!navOpen); - }} - > - -
-
- Settings -
-
- } - onClick={(): void => { - setNavOpen(false); - }} - /> -
-
- { - setNavOpen(false); - }} - > - {({ selected }): JSX.Element => ( - } - /> - )} - - { - setNavOpen(false); - }} - > - {({ selected }): JSX.Element => ( - } - /> - )} - - - {({ selected }): JSX.Element => ( - } - /> - )} - - - {({ selected }): JSX.Element => ( - } - /> - )} - - - {({ selected }): JSX.Element => ( - } - /> - )} - -
-
-
- - - - - - - - - - - - - - - - - -
-
-
+ , + }, + { + title: 'Device', + description: 'Device settings, such as device name and wifi settings', + icon: , + }, + { + title: 'Radio', + description: 'Adjust radio power and frequency settings', + icon: , + }, + { + title: 'Interface', + description: 'Change language and other UI settings', + icon: , + }, + { + title: 'Channels', + description: 'Manage channels', + icon: , + }, + ]} + panels={[ + , + , + , + , + , + ]} + /> ); }; diff --git a/src/pages/settings/Interface.tsx b/src/pages/settings/Interface.tsx index a9b03682..dfadf35b 100644 --- a/src/pages/settings/Interface.tsx +++ b/src/pages/settings/Interface.tsx @@ -11,8 +11,8 @@ import { Button } from '@components/generic/Button'; import { PrimaryTemplate } from '@components/templates/PrimaryTemplate'; export interface InterfaceProps { - navOpen: boolean; - setNavOpen: React.Dispatch>; + navOpen?: boolean; + setNavOpen?: React.Dispatch>; } export const Interface = ({ @@ -29,7 +29,7 @@ export const Interface = ({