diff --git a/package.json b/package.json index cad9ddcf..8501a68c 100644 --- a/package.json +++ b/package.json @@ -13,10 +13,10 @@ }, "dependencies": { "@headlessui/react": "^1.4.2", - "@meshtastic/meshtasticjs": "^0.6.27", + "@meshtastic/meshtasticjs": "^0.6.28", "@reduxjs/toolkit": "^1.6.2", "boring-avatars": "^1.5.8", - "i18next": "^21.4.2", + "i18next": "^21.5.1", "i18next-browser-languagedetector": "^6.1.2", "react": "^17.0.2", "react-dom": "^17.0.2", @@ -33,13 +33,13 @@ "use-breakpoint": "^2.0.2" }, "devDependencies": { - "@types/react": "^17.0.34", + "@types/react": "^17.0.35", "@types/react-dom": "^17.0.11", "@types/react-file-icon": "^1.0.1", "@types/w3c-web-serial": "^1.0.2", "@types/web-bluetooth": "^0.0.11", - "@typescript-eslint/eslint-plugin": "^5.3.1", - "@typescript-eslint/parser": "^5.3.1", + "@typescript-eslint/eslint-plugin": "^5.4.0", + "@typescript-eslint/parser": "^5.4.0", "@verypossible/eslint-config": "^1.6.1", "@vitejs/plugin-react": "^1.0.9", "autoprefixer": "^10.4.0", @@ -58,7 +58,7 @@ "tar": "^6.1.11", "typescript": "^4.4.4", "vite": "^2.6.14", - "vite-plugin-pwa": "^0.11.3", - "workbox-window": "^6.3.0" + "vite-plugin-pwa": "^0.11.5", + "workbox-window": "^6.4.1" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b0ccfb26..95aff183 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2,15 +2,15 @@ lockfileVersion: 5.3 specifiers: '@headlessui/react': ^1.4.2 - '@meshtastic/meshtasticjs': ^0.6.27 + '@meshtastic/meshtasticjs': ^0.6.28 '@reduxjs/toolkit': ^1.6.2 - '@types/react': ^17.0.34 + '@types/react': ^17.0.35 '@types/react-dom': ^17.0.11 '@types/react-file-icon': ^1.0.1 '@types/w3c-web-serial': ^1.0.2 '@types/web-bluetooth': ^0.0.11 - '@typescript-eslint/eslint-plugin': ^5.3.1 - '@typescript-eslint/parser': ^5.3.1 + '@typescript-eslint/eslint-plugin': ^5.4.0 + '@typescript-eslint/parser': ^5.4.0 '@verypossible/eslint-config': ^1.6.1 '@vitejs/plugin-react': ^1.0.9 autoprefixer: ^10.4.0 @@ -24,7 +24,7 @@ specifiers: eslint-plugin-react: ^7.27.0 eslint-plugin-react-hooks: ^4.3.0 gzipper: ^6.0.0 - i18next: ^21.4.2 + i18next: ^21.5.1 i18next-browser-languagedetector: ^6.1.2 postcss: ^8.3.11 prettier: ^2.4.1 @@ -45,21 +45,21 @@ specifiers: typescript: ^4.4.4 use-breakpoint: ^2.0.2 vite: ^2.6.14 - vite-plugin-pwa: ^0.11.3 - workbox-window: ^6.3.0 + vite-plugin-pwa: ^0.11.5 + workbox-window: ^6.4.1 dependencies: '@headlessui/react': 1.4.2_react-dom@17.0.2+react@17.0.2 - '@meshtastic/meshtasticjs': 0.6.27 + '@meshtastic/meshtasticjs': 0.6.28 '@reduxjs/toolkit': 1.6.2_react-redux@7.2.6+react@17.0.2 boring-avatars: 1.5.8 - i18next: 21.4.2 + i18next: 21.5.1 i18next-browser-languagedetector: 6.1.2 react: 17.0.2 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-hook-form: 7.19.5_react@17.0.2 - react-i18next: 11.14.2_i18next@21.4.2+react@17.0.2 + react-i18next: 11.14.2_i18next@21.5.1+react@17.0.2 react-icons: 4.3.1_react@17.0.2 react-json-pretty: 2.2.0_react-dom@17.0.2+react@17.0.2 react-redux: 7.2.6_react-dom@17.0.2+react@17.0.2 @@ -70,13 +70,13 @@ dependencies: use-breakpoint: 2.0.2_react-dom@17.0.2+react@17.0.2 devDependencies: - '@types/react': 17.0.34 + '@types/react': 17.0.35 '@types/react-dom': 17.0.11 '@types/react-file-icon': 1.0.1 '@types/w3c-web-serial': 1.0.2 '@types/web-bluetooth': 0.0.11 - '@typescript-eslint/eslint-plugin': 5.3.1_4653b7803b7453f5f37717b7e1448517 - '@typescript-eslint/parser': 5.3.1_eslint@8.2.0+typescript@4.4.4 + '@typescript-eslint/eslint-plugin': 5.4.0_b983626bd16070d34b18187cb6bde052 + '@typescript-eslint/parser': 5.4.0_eslint@8.2.0+typescript@4.4.4 '@verypossible/eslint-config': 1.6.1_typescript@4.4.4 '@vitejs/plugin-react': 1.0.9 autoprefixer: 10.4.0_postcss@8.3.11 @@ -95,20 +95,20 @@ devDependencies: tar: 6.1.11 typescript: 4.4.4 vite: 2.6.14 - vite-plugin-pwa: 0.11.3_vite@2.6.14 - workbox-window: 6.3.0 + vite-plugin-pwa: 0.11.5_vite@2.6.14 + workbox-window: 6.4.1 packages: - /@apideck/better-ajv-errors/0.2.6_ajv@8.7.1: - resolution: {integrity: sha512-FvGcbFUdbPLexAhdvihkroCA3LQa7kGMa8Qj9f32BiOcV1Thscg/QCxp/kJibsFrhUrlKOzd07uJFOGTN0/awQ==} + /@apideck/better-ajv-errors/0.2.7_ajv@8.8.0: + resolution: {integrity: sha512-J2dW+EHYudbwI7MGovcHWLBrxasl21uuroc2zT8bH2RxYuv2g5GqsO5jcKUZz4LaMST45xhKjVuyRYkhcWyMhA==} engines: {node: '>=10'} peerDependencies: ajv: '>=8' dependencies: - ajv: 8.7.1 + ajv: 8.8.0 json-schema: 0.3.0 - jsonpointer: 4.1.0 + jsonpointer: 5.0.0 leven: 3.1.0 dev: true @@ -186,7 +186,7 @@ packages: '@babel/compat-data': 7.16.0 '@babel/core': 7.16.0 '@babel/helper-validator-option': 7.14.5 - browserslist: 4.17.6 + browserslist: 4.18.1 semver: 6.3.0 dev: true @@ -1355,8 +1355,8 @@ packages: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true - /@meshtastic/meshtasticjs/0.6.27: - resolution: {integrity: sha512-WiM9v/3+YWtt6/wLJOyyhAQdtsIGcEs3geofRZA6y/TCQkbjo/mdvY8Y+ZMZERSFXIZXiovvZgJG0vSYq7JC9A==} + /@meshtastic/meshtasticjs/0.6.28: + resolution: {integrity: sha512-yoFzIM+fktvYqgRr/IVA41h4JMEv5GJue/xtxWNhWweEX6fiPoy+MoGeDkwU2dRyNzzZ03RLa6xNXqYxiHRlLA==} dependencies: '@protobuf-ts/runtime': 2.0.7 sub-events: 1.8.9 @@ -1403,10 +1403,10 @@ 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.2 + reselect: 4.1.3 dev: false - /@rollup/plugin-babel/5.3.0_@babel+core@7.16.0+rollup@2.59.0: + /@rollup/plugin-babel/5.3.0_@babel+core@7.16.0+rollup@2.60.0: resolution: {integrity: sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==} engines: {node: '>= 10.0.0'} peerDependencies: @@ -1419,36 +1419,36 @@ packages: dependencies: '@babel/core': 7.16.0 '@babel/helper-module-imports': 7.16.0 - '@rollup/pluginutils': 3.1.0_rollup@2.59.0 - rollup: 2.59.0 + '@rollup/pluginutils': 3.1.0_rollup@2.60.0 + rollup: 2.60.0 dev: true - /@rollup/plugin-node-resolve/11.2.1_rollup@2.59.0: + /@rollup/plugin-node-resolve/11.2.1_rollup@2.60.0: resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} engines: {node: '>= 10.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0 dependencies: - '@rollup/pluginutils': 3.1.0_rollup@2.59.0 + '@rollup/pluginutils': 3.1.0_rollup@2.60.0 '@types/resolve': 1.17.1 builtin-modules: 3.2.0 deepmerge: 4.2.2 is-module: 1.0.0 resolve: 1.20.0 - rollup: 2.59.0 + rollup: 2.60.0 dev: true - /@rollup/plugin-replace/2.4.2_rollup@2.59.0: + /@rollup/plugin-replace/2.4.2_rollup@2.60.0: resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} peerDependencies: rollup: ^1.20.0 || ^2.0.0 dependencies: - '@rollup/pluginutils': 3.1.0_rollup@2.59.0 + '@rollup/pluginutils': 3.1.0_rollup@2.60.0 magic-string: 0.25.7 - rollup: 2.59.0 + rollup: 2.60.0 dev: true - /@rollup/pluginutils/3.1.0_rollup@2.59.0: + /@rollup/pluginutils/3.1.0_rollup@2.60.0: resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} engines: {node: '>= 8.0.0'} peerDependencies: @@ -1457,7 +1457,7 @@ packages: '@types/estree': 0.0.39 estree-walker: 1.0.1 picomatch: 2.3.0 - rollup: 2.59.0 + rollup: 2.60.0 dev: true /@rollup/pluginutils/4.1.1: @@ -1468,11 +1468,13 @@ packages: picomatch: 2.3.0 dev: true - /@surma/rollup-plugin-off-main-thread/1.4.2: - resolution: {integrity: sha512-yBMPqmd1yEJo/280PAMkychuaALyQ9Lkb5q1ck3mjJrFuEobIfhnQ4J3mbvBoISmR3SWMWV+cGB/I0lCQee79A==} + /@surma/rollup-plugin-off-main-thread/2.2.3: + resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} dependencies: - ejs: 2.7.4 + ejs: 3.1.6 + json5: 2.2.0 magic-string: 0.25.7 + string.prototype.matchall: 4.0.6 dev: true /@types/estree/0.0.39: @@ -1482,7 +1484,7 @@ packages: /@types/hoist-non-react-statics/3.3.1: resolution: {integrity: sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==} dependencies: - '@types/react': 17.0.34 + '@types/react': 17.0.35 hoist-non-react-statics: 3.3.2 dev: false @@ -1508,30 +1510,30 @@ packages: /@types/react-dom/17.0.11: resolution: {integrity: sha512-f96K3k+24RaLGVu/Y2Ng3e1EbZ8/cVJvypZWd7cy0ofCBaf2lcM46xNhycMZ2xGwbBjRql7hOlZ+e2WlJ5MH3Q==} dependencies: - '@types/react': 17.0.34 + '@types/react': 17.0.35 dev: true /@types/react-file-icon/1.0.1: resolution: {integrity: sha512-QTdYCkYXzh/PfKEIwcPxRdaPQkii5R4Ke7fcO+KB++IDPbYAG1jj+ulEcTA7pRf0gZ5jAvjWcTXBJJRtfYHjlw==} dependencies: - '@types/react': 17.0.34 + '@types/react': 17.0.35 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.34 + '@types/react': 17.0.35 hoist-non-react-statics: 3.3.2 redux: 4.1.2 dev: false - /@types/react/17.0.34: - resolution: {integrity: sha512-46FEGrMjc2+8XhHXILr+3+/sTe3OfzSPU9YGKILLrUYbQ1CLQC9Daqo1KzENGXAWwrFwiY0l4ZbF20gRvgpWTg==} + /@types/react/17.0.35: + resolution: {integrity: sha512-r3C8/TJuri/SLZiiwwxQoLAoavaczARfT9up9b4Jr65+ErAUX3MIkU0oMOQnrpfgHme8zIqZLX7O5nnjm5Wayw==} dependencies: '@types/prop-types': 15.7.4 '@types/scheduler': 0.16.2 - csstype: 3.0.9 + csstype: 3.0.10 /@types/resolve/1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} @@ -1580,8 +1582,8 @@ packages: - supports-color dev: true - /@typescript-eslint/eslint-plugin/5.3.1_4653b7803b7453f5f37717b7e1448517: - resolution: {integrity: sha512-cFImaoIr5Ojj358xI/SDhjog57OK2NqlpxwdcgyxDA3bJlZcJq5CPzUXtpD7CxI2Hm6ATU7w5fQnnkVnmwpHqw==} + /@typescript-eslint/eslint-plugin/5.4.0_b983626bd16070d34b18187cb6bde052: + resolution: {integrity: sha512-9/yPSBlwzsetCsGEn9j24D8vGQgJkOTr4oMLas/w886ZtzKIs1iyoqFrwsX2fqYEeUwsdBpC21gcjRGo57u0eg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -1591,9 +1593,9 @@ packages: typescript: optional: true dependencies: - '@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 + '@typescript-eslint/experimental-utils': 5.4.0_eslint@8.2.0+typescript@4.4.4 + '@typescript-eslint/parser': 5.4.0_eslint@8.2.0+typescript@4.4.4 + '@typescript-eslint/scope-manager': 5.4.0 debug: 4.3.2 eslint: 8.2.0 functional-red-black-tree: 1.0.1 @@ -1624,16 +1626,16 @@ packages: - typescript dev: true - /@typescript-eslint/experimental-utils/5.3.1_eslint@8.2.0+typescript@4.4.4: - resolution: {integrity: sha512-RgFn5asjZ5daUhbK5Sp0peq0SSMytqcrkNfU4pnDma2D8P3ElZ6JbYjY8IMSFfZAJ0f3x3tnO3vXHweYg0g59w==} + /@typescript-eslint/experimental-utils/5.4.0_eslint@8.2.0+typescript@4.4.4: + resolution: {integrity: sha512-Nz2JDIQUdmIGd6p33A+naQmwfkU5KVTLb/5lTk+tLVTDacZKoGQisj8UCxk7onJcrgjIvr8xWqkYI+DbI3TfXg==} 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.3.1 - '@typescript-eslint/types': 5.3.1 - '@typescript-eslint/typescript-estree': 5.3.1_typescript@4.4.4 + '@typescript-eslint/scope-manager': 5.4.0 + '@typescript-eslint/types': 5.4.0 + '@typescript-eslint/typescript-estree': 5.4.0_typescript@4.4.4 eslint: 8.2.0 eslint-scope: 5.1.1 eslint-utils: 3.0.0_eslint@8.2.0 @@ -1662,8 +1664,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser/5.3.1_eslint@8.2.0+typescript@4.4.4: - resolution: {integrity: sha512-TD+ONlx5c+Qhk21x9gsJAMRohWAUMavSOmJgv3JGy9dgPhuBd5Wok0lmMClZDyJNLLZK1JRKiATzCKZNUmoyfw==} + /@typescript-eslint/parser/5.4.0_eslint@8.2.0+typescript@4.4.4: + resolution: {integrity: sha512-JoB41EmxiYpaEsRwpZEYAJ9XQURPFer8hpkIW9GiaspVLX8oqbqNM8P4EP8HOZg96yaALiLEVWllA2E8vwsIKw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -1672,9 +1674,9 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.3.1 - '@typescript-eslint/types': 5.3.1 - '@typescript-eslint/typescript-estree': 5.3.1_typescript@4.4.4 + '@typescript-eslint/scope-manager': 5.4.0 + '@typescript-eslint/types': 5.4.0 + '@typescript-eslint/typescript-estree': 5.4.0_typescript@4.4.4 debug: 4.3.2 eslint: 8.2.0 typescript: 4.4.4 @@ -1690,12 +1692,12 @@ packages: '@typescript-eslint/visitor-keys': 4.33.0 dev: true - /@typescript-eslint/scope-manager/5.3.1: - resolution: {integrity: sha512-XksFVBgAq0Y9H40BDbuPOTUIp7dn4u8oOuhcgGq7EoDP50eqcafkMVGrypyVGvDYHzjhdUCUwuwVUK4JhkMAMg==} + /@typescript-eslint/scope-manager/5.4.0: + resolution: {integrity: sha512-pRxFjYwoi8R+n+sibjgF9iUiAELU9ihPBtHzocyW8v8D8G8KeQvXTsW7+CBYIyTYsmhtNk50QPGLE3vrvhM5KA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.3.1 - '@typescript-eslint/visitor-keys': 5.3.1 + '@typescript-eslint/types': 5.4.0 + '@typescript-eslint/visitor-keys': 5.4.0 dev: true /@typescript-eslint/types/4.33.0: @@ -1703,8 +1705,8 @@ packages: engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dev: true - /@typescript-eslint/types/5.3.1: - resolution: {integrity: sha512-bG7HeBLolxKHtdHG54Uac750eXuQQPpdJfCYuw4ZI3bZ7+GgKClMWM8jExBtp7NSP4m8PmLRM8+lhzkYnSmSxQ==} + /@typescript-eslint/types/5.4.0: + resolution: {integrity: sha512-GjXNpmn+n1LvnttarX+sPD6+S7giO+9LxDIGlRl4wK3a7qMWALOHYuVSZpPTfEIklYjaWuMtfKdeByx0AcaThA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -1729,8 +1731,8 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree/5.3.1_typescript@4.4.4: - resolution: {integrity: sha512-PwFbh/PKDVo/Wct6N3w+E4rLZxUDgsoII/GrWM2A62ETOzJd4M6s0Mu7w4CWsZraTbaC5UQI+dLeyOIFF1PquQ==} + /@typescript-eslint/typescript-estree/5.4.0_typescript@4.4.4: + resolution: {integrity: sha512-nhlNoBdhKuwiLMx6GrybPT3SFILm5Gij2YBdPEPFlYNFAXUJWX6QRgvi/lwVoadaQEFsizohs6aFRMqsXI2ewA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -1738,8 +1740,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.3.1 - '@typescript-eslint/visitor-keys': 5.3.1 + '@typescript-eslint/types': 5.4.0 + '@typescript-eslint/visitor-keys': 5.4.0 debug: 4.3.2 globby: 11.0.4 is-glob: 4.0.3 @@ -1758,11 +1760,11 @@ packages: eslint-visitor-keys: 2.1.0 dev: true - /@typescript-eslint/visitor-keys/5.3.1: - resolution: {integrity: sha512-3cHUzUuVTuNHx0Gjjt5pEHa87+lzyqOiHXy/Gz+SJOCW1mpw9xQHIIEwnKn+Thph1mgWyZ90nboOcSuZr/jTTQ==} + /@typescript-eslint/visitor-keys/5.4.0: + resolution: {integrity: sha512-PVbax7MeE7tdLfW5SA0fs8NGVVr+buMPrcj+CWYWPXsZCH8qZ1THufDzbXm1xrZ2b2PA1iENJ0sRq5fuUtvsJg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.3.1 + '@typescript-eslint/types': 5.4.0 eslint-visitor-keys: 3.1.0 dev: true @@ -1852,8 +1854,8 @@ packages: uri-js: 4.4.1 dev: true - /ajv/8.7.1: - resolution: {integrity: sha512-gPpOObTO1QjbnN1sVMjJcp1TF9nggMfO4MBR5uQl6ZVTOaEPq5i4oq/6R9q2alMMPB3eg53wFv1RuJBLuxf3Hw==} + /ajv/8.8.0: + resolution: {integrity: sha512-L+cJ/+pkdICMueKR6wIx3VP2fjIx3yAhuvadUv/osv9yFD7OVZy442xFF+Oeu3ZvmhBGQzoF6mTSt+LUWBmGQg==} dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 @@ -1946,6 +1948,10 @@ packages: engines: {node: '>=8'} dev: true + /async/0.9.2: + resolution: {integrity: sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=} + dev: true + /at-least-node/1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} @@ -1958,9 +1964,9 @@ packages: peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.17.6 - caniuse-lite: 1.0.30001279 - fraction.js: 4.1.1 + browserslist: 4.18.1 + caniuse-lite: 1.0.30001280 + fraction.js: 4.1.2 normalize-range: 0.1.2 picocolors: 1.0.0 postcss: 8.3.11 @@ -1985,7 +1991,7 @@ packages: find-babel-config: 1.2.0 glob: 7.2.0 pkg-up: 3.1.0 - reselect: 4.1.2 + reselect: 4.1.3 resolve: 1.20.0 dev: true @@ -2052,13 +2058,13 @@ packages: fill-range: 7.0.1 dev: true - /browserslist/4.17.6: - resolution: {integrity: sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw==} + /browserslist/4.18.1: + resolution: {integrity: sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001279 - electron-to-chromium: 1.3.894 + caniuse-lite: 1.0.30001280 + electron-to-chromium: 1.3.899 escalade: 3.1.1 node-releases: 2.0.1 picocolors: 1.0.0 @@ -2090,8 +2096,8 @@ packages: engines: {node: '>= 6'} dev: true - /caniuse-lite/1.0.30001279: - resolution: {integrity: sha512-VfEHpzHEXj6/CxggTwSFoZBBYGQfQv9Cf42KPlO79sWXCD1QNKWKsKzFeWL7QpZHJQYAvocqV6Rty1yJMkqWLQ==} + /caniuse-lite/1.0.30001280: + resolution: {integrity: sha512-kFXwYvHe5rix25uwueBxC569o53J6TpnGu0BEEn+6Lhl2vsnAumRFWEBhDft1fwyo6m1r4i+RqA4+163FpeFcA==} dev: true /chalk/2.4.2: @@ -2161,8 +2167,8 @@ packages: engines: {node: '>= 10'} dev: true - /common-tags/1.8.0: - resolution: {integrity: sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==} + /common-tags/1.8.1: + resolution: {integrity: sha512-uOZd85rJqrdEIE/JjhW5YAeatX8iqjjvVzIyfx7JL7G5r9Tep6YpYT9gEJWhWpVyDQEyzukWd6p2qULpJ8tmBw==} engines: {node: '>=4.0.0'} dev: true @@ -2179,7 +2185,7 @@ packages: /core-js-compat/3.19.1: resolution: {integrity: sha512-Q/VJ7jAF/y68+aUsQJ/afPOewdsGkDtcMb40J8MbuWKlK3Y+wtHq8bTHKPj2WKWLIqmS5JhHs4CzHtz6pT2W6g==} dependencies: - browserslist: 4.17.6 + browserslist: 4.18.1 semver: 7.0.0 dev: true @@ -2214,8 +2220,8 @@ packages: hasBin: true dev: true - /csstype/3.0.9: - resolution: {integrity: sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==} + /csstype/3.0.10: + resolution: {integrity: sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==} /debug/2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} @@ -2325,14 +2331,16 @@ packages: esutils: 2.0.3 dev: true - /ejs/2.7.4: - resolution: {integrity: sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==} + /ejs/3.1.6: + resolution: {integrity: sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==} engines: {node: '>=0.10.0'} - requiresBuild: true + hasBin: true + dependencies: + jake: 10.8.2 dev: true - /electron-to-chromium/1.3.894: - resolution: {integrity: sha512-WY8pA4irAZ4cm/Pr7YFPtPLVqj3nU6d0SbfoHF6M7HZNONfPdAnYAarumqQ75go2LuN72uO9wGuCEqnfya/ytg==} + /electron-to-chromium/1.3.899: + resolution: {integrity: sha512-w16Dtd2zl7VZ4N4Db+FIa7n36sgPGCKjrKvUUmp5ialsikvcQLjcJR9RWnlYNxIyEHLdHaoIZEqKsPxU9MdyBg==} dev: true /emoji-regex/8.0.0: @@ -2400,164 +2408,164 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild-android-arm64/0.13.13: - resolution: {integrity: sha512-T02aneWWguJrF082jZworjU6vm8f4UQ+IH2K3HREtlqoY9voiJUwHLRL6khRlsNLzVglqgqb7a3HfGx7hAADCQ==} + /esbuild-android-arm64/0.13.14: + resolution: {integrity: sha512-Q+Xhfp827r+ma8/DJgpMRUbDZfefsk13oePFEXEIJ4gxFbNv5+vyiYXYuKm43/+++EJXpnaYmEnu4hAKbAWYbA==} cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /esbuild-darwin-64/0.13.13: - resolution: {integrity: sha512-wkaiGAsN/09X9kDlkxFfbbIgR78SNjMOfUhoel3CqKBDsi9uZhw7HBNHNxTzYUK8X8LAKFpbODgcRB3b/I8gHA==} + /esbuild-darwin-64/0.13.14: + resolution: {integrity: sha512-YmOhRns6QBNSjpVdTahi/yZ8dscx9ai7a6OY6z5ACgOuQuaQ2Qk2qgJ0/siZ6LgD0gJFMV8UINFV5oky5TFNQQ==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /esbuild-darwin-arm64/0.13.13: - resolution: {integrity: sha512-b02/nNKGSV85Gw9pUCI5B48AYjk0vFggDeom0S6QMP/cEDtjSh1WVfoIFNAaLA0MHWfue8KBwoGVsN7rBshs4g==} + /esbuild-darwin-arm64/0.13.14: + resolution: {integrity: sha512-Lp00VTli2jqZghSa68fx3fEFCPsO1hK59RMo1PRap5RUjhf55OmaZTZYnCDI0FVlCtt+gBwX5qwFt4lc6tI1xg==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /esbuild-freebsd-64/0.13.13: - resolution: {integrity: sha512-ALgXYNYDzk9YPVk80A+G4vz2D22Gv4j4y25exDBGgqTcwrVQP8rf/rjwUjHoh9apP76oLbUZTmUmvCMuTI1V9A==} + /esbuild-freebsd-64/0.13.14: + resolution: {integrity: sha512-BKosI3jtvTfnmsCW37B1TyxMUjkRWKqopR0CE9AF2ratdpkxdR24Vpe3gLKNyWiZ7BE96/SO5/YfhbPUzY8wKw==} cpu: [x64] os: [freebsd] requiresBuild: true dev: true optional: true - /esbuild-freebsd-arm64/0.13.13: - resolution: {integrity: sha512-uFvkCpsZ1yqWQuonw5T1WZ4j59xP/PCvtu6I4pbLejhNo4nwjW6YalqnBvBSORq5/Ifo9S/wsIlVHzkzEwdtlw==} + /esbuild-freebsd-arm64/0.13.14: + resolution: {integrity: sha512-yd2uh0yf+fWv5114+SYTl4/1oDWtr4nN5Op+PGxAkMqHfYfLjFKpcxwCo/QOS/0NWqPVE8O41IYZlFhbEN2B8Q==} cpu: [arm64] os: [freebsd] requiresBuild: true dev: true optional: true - /esbuild-linux-32/0.13.13: - resolution: {integrity: sha512-yxR9BBwEPs9acVEwTrEE2JJNHYVuPQC9YGjRfbNqtyfK/vVBQYuw8JaeRFAvFs3pVJdQD0C2BNP4q9d62SCP4w==} + /esbuild-linux-32/0.13.14: + resolution: {integrity: sha512-a8rOnS1oWSfkkYWXoD2yXNV4BdbDKA7PNVQ1klqkY9SoSApL7io66w5H44mTLsfyw7G6Z2vLlaLI2nz9MMAowA==} cpu: [ia32] os: [linux] requiresBuild: true dev: true optional: true - /esbuild-linux-64/0.13.13: - resolution: {integrity: sha512-kzhjlrlJ+6ESRB/n12WTGll94+y+HFeyoWsOrLo/Si0s0f+Vip4b8vlnG0GSiS6JTsWYAtGHReGczFOaETlKIw==} + /esbuild-linux-64/0.13.14: + resolution: {integrity: sha512-yPZSoMs9W2MC3Dw+6kflKt5FfQm6Dicex9dGIr1OlHRsn3Hm7yGMUTctlkW53KknnZdOdcdd5upxvbxqymczVQ==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /esbuild-linux-arm/0.13.13: - resolution: {integrity: sha512-hXub4pcEds+U1TfvLp1maJ+GHRw7oizvzbGRdUvVDwtITtjq8qpHV5Q5hWNNn6Q+b3b2UxF03JcgnpzCw96nUQ==} + /esbuild-linux-arm/0.13.14: + resolution: {integrity: sha512-8chZE4pkKRvJ/M/iwsNQ1KqsRg2RyU5eT/x2flNt/f8F2TVrDreR7I0HEeCR50wLla3B1C3wTIOzQBmjuc6uWg==} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /esbuild-linux-arm64/0.13.13: - resolution: {integrity: sha512-KMrEfnVbmmJxT3vfTnPv/AiXpBFbbyExH13BsUGy1HZRPFMi5Gev5gk8kJIZCQSRfNR17aqq8sO5Crm2KpZkng==} + /esbuild-linux-arm64/0.13.14: + resolution: {integrity: sha512-Lvo391ln9PzC334e+jJ2S0Rt0cxP47eoH5gFyv/E8HhOnEJTvm7A+RRnMjjHnejELacTTfYgFGQYPjLsi/jObQ==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /esbuild-linux-mips64le/0.13.13: - resolution: {integrity: sha512-cJT9O1LYljqnnqlHaS0hdG73t7hHzF3zcN0BPsjvBq+5Ad47VJun+/IG4inPhk8ta0aEDK6LdP+F9299xa483w==} + /esbuild-linux-mips64le/0.13.14: + resolution: {integrity: sha512-MZhgxbmrWbpY3TOE029O6l5tokG9+Yoj2hW7vdit/d/VnmneqeGrSHADuDL6qXM8L5jaCiaivb4VhsyVCpdAbQ==} cpu: [mips64el] os: [linux] requiresBuild: true dev: true optional: true - /esbuild-linux-ppc64le/0.13.13: - resolution: {integrity: sha512-+rghW8st6/7O6QJqAjVK3eXzKkZqYAw6LgHv7yTMiJ6ASnNvghSeOcIvXFep3W2oaJc35SgSPf21Ugh0o777qQ==} + /esbuild-linux-ppc64le/0.13.14: + resolution: {integrity: sha512-un7KMwS7fX1Un6BjfSZxTT8L5cV/8Uf4SAhM7WYy2XF8o8TI+uRxxD03svZnRNIPsN2J5cl6qV4n7Iwz+yhhVw==} cpu: [ppc64] os: [linux] requiresBuild: true dev: true optional: true - /esbuild-netbsd-64/0.13.13: - resolution: {integrity: sha512-A/B7rwmzPdzF8c3mht5TukbnNwY5qMJqes09ou0RSzA5/jm7Jwl/8z853ofujTFOLhkNHUf002EAgokzSgEMpQ==} + /esbuild-netbsd-64/0.13.14: + resolution: {integrity: sha512-5ekKx/YbOmmlTeNxBjh38Uh5TGn5C4uyqN17i67k18pS3J+U2hTVD7rCxcFcRS1AjNWumkVL3jWqYXadFwMS0Q==} cpu: [x64] os: [netbsd] requiresBuild: true dev: true optional: true - /esbuild-openbsd-64/0.13.13: - resolution: {integrity: sha512-szwtuRA4rXKT3BbwoGpsff6G7nGxdKgUbW9LQo6nm0TVCCjDNDC/LXxT994duIW8Tyq04xZzzZSW7x7ttDiw1w==} + /esbuild-openbsd-64/0.13.14: + resolution: {integrity: sha512-9bzvwewHjct2Cv5XcVoE1yW5YTW12Sk838EYfA46abgnhxGoFSD1mFcaztp5HHC43AsF+hQxbSFG/RilONARUA==} cpu: [x64] os: [openbsd] requiresBuild: true dev: true optional: true - /esbuild-sunos-64/0.13.13: - resolution: {integrity: sha512-ihyds9O48tVOYF48iaHYUK/boU5zRaLOXFS+OOL3ceD39AyHo46HVmsJLc7A2ez0AxNZCxuhu+P9OxfPfycTYQ==} + /esbuild-sunos-64/0.13.14: + resolution: {integrity: sha512-mjMrZB76M6FmoiTvj/RGWilrioR7gVwtFBRVugr9qLarXMIU1W/pQx+ieEOtflrW61xo8w1fcxyHsVVGRvoQ0w==} cpu: [x64] os: [sunos] requiresBuild: true dev: true optional: true - /esbuild-windows-32/0.13.13: - resolution: {integrity: sha512-h2RTYwpG4ldGVJlbmORObmilzL8EECy8BFiF8trWE1ZPHLpECE9//J3Bi+W3eDUuv/TqUbiNpGrq4t/odbayUw==} + /esbuild-windows-32/0.13.14: + resolution: {integrity: sha512-GZa6mrx2rgfbH/5uHg0Rdw50TuOKbdoKCpEBitzmG5tsXBdce+cOL+iFO5joZc6fDVCLW3Y6tjxmSXRk/v20Hg==} cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true - /esbuild-windows-64/0.13.13: - resolution: {integrity: sha512-oMrgjP4CjONvDHe7IZXHrMk3wX5Lof/IwFEIbwbhgbXGBaN2dke9PkViTiXC3zGJSGpMvATXVplEhlInJ0drHA==} + /esbuild-windows-64/0.13.14: + resolution: {integrity: sha512-Lsgqah24bT7ClHjLp/Pj3A9wxjhIAJyWQcrOV4jqXAFikmrp2CspA8IkJgw7HFjx6QrJuhpcKVbCAe/xw0i2yw==} cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true - /esbuild-windows-arm64/0.13.13: - resolution: {integrity: sha512-6fsDfTuTvltYB5k+QPah/x7LrI2+OLAJLE3bWLDiZI6E8wXMQU+wLqtEO/U/RvJgVY1loPs5eMpUBpVajczh1A==} + /esbuild-windows-arm64/0.13.14: + resolution: {integrity: sha512-KP8FHVlWGhM7nzYtURsGnskXb/cBCPTfj0gOKfjKq2tHtYnhDZywsUG57nk7TKhhK0fL11LcejHG3LRW9RF/9A==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /esbuild/0.13.13: - resolution: {integrity: sha512-Z17A/R6D0b4s3MousytQ/5i7mTCbaF+Ua/yPfoe71vdTv4KBvVAvQ/6ytMngM2DwGJosl8WxaD75NOQl2QF26Q==} + /esbuild/0.13.14: + resolution: {integrity: sha512-xu4D+1ji9x53ocuomcY+KOrwAnWzhBu/wTEjpdgZ8I1c8i5vboYIeigMdzgY1UowYBKa2vZgVgUB32bu7gkxeg==} hasBin: true requiresBuild: true optionalDependencies: - esbuild-android-arm64: 0.13.13 - esbuild-darwin-64: 0.13.13 - esbuild-darwin-arm64: 0.13.13 - esbuild-freebsd-64: 0.13.13 - esbuild-freebsd-arm64: 0.13.13 - esbuild-linux-32: 0.13.13 - esbuild-linux-64: 0.13.13 - esbuild-linux-arm: 0.13.13 - esbuild-linux-arm64: 0.13.13 - esbuild-linux-mips64le: 0.13.13 - esbuild-linux-ppc64le: 0.13.13 - esbuild-netbsd-64: 0.13.13 - esbuild-openbsd-64: 0.13.13 - esbuild-sunos-64: 0.13.13 - esbuild-windows-32: 0.13.13 - esbuild-windows-64: 0.13.13 - esbuild-windows-arm64: 0.13.13 + esbuild-android-arm64: 0.13.14 + esbuild-darwin-64: 0.13.14 + esbuild-darwin-arm64: 0.13.14 + esbuild-freebsd-64: 0.13.14 + esbuild-freebsd-arm64: 0.13.14 + esbuild-linux-32: 0.13.14 + esbuild-linux-64: 0.13.14 + esbuild-linux-arm: 0.13.14 + esbuild-linux-arm64: 0.13.14 + esbuild-linux-mips64le: 0.13.14 + esbuild-linux-ppc64le: 0.13.14 + esbuild-netbsd-64: 0.13.14 + esbuild-openbsd-64: 0.13.14 + esbuild-sunos-64: 0.13.14 + esbuild-windows-32: 0.13.14 + esbuild-windows-64: 0.13.14 + esbuild-windows-arm64: 0.13.14 dev: true /escalade/3.1.1: @@ -3016,6 +3024,12 @@ packages: flat-cache: 3.0.4 dev: true + /filelist/1.0.2: + resolution: {integrity: sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==} + dependencies: + minimatch: 3.0.4 + dev: true + /fill-range/7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -3061,8 +3075,8 @@ packages: resolution: {integrity: sha1-C+4AUBiusmDQo6865ljdATbsG5k=} dev: true - /fraction.js/4.1.1: - resolution: {integrity: sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==} + /fraction.js/4.1.2: + resolution: {integrity: sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA==} dev: true /fs-extra/9.1.0: @@ -3246,8 +3260,8 @@ packages: '@babel/runtime': 7.16.3 dev: false - /i18next/21.4.2: - resolution: {integrity: sha512-vVWsmTnZNdYHPLt01MvT5YNM2lxec2R6r5T72J89eaazp8XQnGSqA66O+a918qqmjHZGB6HHRSs02xp753he9g==} + /i18next/21.5.1: + resolution: {integrity: sha512-fmpns1dbYYgyOkiATp1rg5gyXzvBdvM0YQFDCM38BoqybG2Rs3looAv+e24ghFeeozD1fteUtDTZ36SQ0a+ycg==} dependencies: '@babel/runtime': 7.16.3 dev: false @@ -3488,6 +3502,16 @@ packages: resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} dev: true + /jake/10.8.2: + resolution: {integrity: sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==} + hasBin: true + dependencies: + async: 0.9.2 + chalk: 2.4.2 + filelist: 1.0.2 + minimatch: 3.0.4 + dev: true + /jest-worker/26.6.2: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} @@ -3574,8 +3598,8 @@ packages: graceful-fs: 4.2.8 dev: true - /jsonpointer/4.1.0: - resolution: {integrity: sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg==} + /jsonpointer/5.0.0: + resolution: {integrity: sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg==} engines: {node: '>=0.10.0'} dev: true @@ -4075,7 +4099,7 @@ packages: react: 17.0.2 dev: false - /react-i18next/11.14.2_i18next@21.4.2+react@17.0.2: + /react-i18next/11.14.2_i18next@21.5.1+react@17.0.2: resolution: {integrity: sha512-fmDhwNA0zDmSEL3BBT5qwNMvxrKu25oXDDAZyHprfB0AHZmWXfBmRLf8MX8i1iBd2I2C2vsA2D9wxYBIwzooEQ==} peerDependencies: i18next: '>= 19.0.0' @@ -4083,7 +4107,7 @@ packages: dependencies: '@babel/runtime': 7.16.3 html-parse-stringify: 3.0.1 - i18next: 21.4.2 + i18next: 21.5.1 react: 17.0.2 dev: false @@ -4230,8 +4254,8 @@ packages: engines: {node: '>=0.10.0'} dev: true - /reselect/4.1.2: - resolution: {integrity: sha512-wg60ebcPOtxcptIUfrr7Jt3h4BR86cCW3R7y4qt65lnNb4yz4QgrXcbSioVsIOYguyz42+XTHIyJ5TEruzkFgQ==} + /reselect/4.1.3: + resolution: {integrity: sha512-TVpMknnmdSRNhLPgTDSCQKw32zt1ZIJtEcSxfL/ihtDqShEMUs2X2UY/g96YAVynUXxqLWSXObLGIcqKHQObHw==} /resolve-from/4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} @@ -4273,20 +4297,22 @@ packages: glob: 7.2.0 dev: true - /rollup-plugin-terser/7.0.2_rollup@2.59.0: + /rollup-plugin-terser/7.0.2_rollup@2.60.0: resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} peerDependencies: rollup: ^2.0.0 dependencies: '@babel/code-frame': 7.16.0 jest-worker: 26.6.2 - rollup: 2.59.0 + rollup: 2.60.0 serialize-javascript: 4.0.0 - terser: 5.9.0 + terser: 5.10.0 + transitivePeerDependencies: + - acorn dev: true - /rollup/2.59.0: - resolution: {integrity: sha512-l7s90JQhCQ6JyZjKgo7Lq1dKh2RxatOM+Jr6a9F7WbS9WgKbocyUSeLmZl8evAse7y96Ae98L2k1cBOwWD8nHw==} + /rollup/2.60.0: + resolution: {integrity: sha512-cHdv9GWd58v58rdseC8e8XIaPUo8a9cgZpnCMMDGZFDZKEODOiPPEQFXLriWr/TjXzhPPmG5bkAztPsOARIcGQ==} engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: @@ -4517,7 +4543,7 @@ packages: resolution: {integrity: sha512-5DkIxeA7XERBqMwJq0aHZOdMadBx4e6eDoFRuyT5VR82J0Ycg2DwM6GfA/EQAhJ+toRTaS1lIdSQCqgrmhPnlw==} engines: {node: '>=10.0.0'} dependencies: - ajv: 8.7.1 + ajv: 8.8.0 lodash.truncate: 4.4.2 slice-ansi: 4.0.0 string-width: 4.2.3 @@ -4586,10 +4612,15 @@ packages: unique-string: 2.0.0 dev: true - /terser/5.9.0: - resolution: {integrity: sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==} + /terser/5.10.0: + resolution: {integrity: sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==} engines: {node: '>=10'} hasBin: true + peerDependencies: + acorn: ^8.5.0 + peerDependenciesMeta: + acorn: + optional: true dependencies: commander: 2.20.3 source-map: 0.7.3 @@ -4772,8 +4803,8 @@ packages: resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} dev: true - /vite-plugin-pwa/0.11.3_vite@2.6.14: - resolution: {integrity: sha512-KAuv7aAX1VTkaR7DakpmUG7LypNXlf+M/x4y2xYrYgQHoqk2Y2mKKR0dAG5cGBekqcev56QsABusTBScPm50mw==} + /vite-plugin-pwa/0.11.5_vite@2.6.14: + resolution: {integrity: sha512-qn79L7008ZMn9GS0ClxypOBRA3Ft8/a8saIQ03SC2R1QndbZVW+YQVHTlFno33Wp6fu5UJacoHWuZYCuKZKaOA==} peerDependencies: vite: ^2.0.0 dependencies: @@ -4781,12 +4812,13 @@ packages: debug: 4.3.2 fast-glob: 3.2.7 pretty-bytes: 5.6.0 - rollup: 2.59.0 + rollup: 2.60.0 vite: 2.6.14 - workbox-build: 6.3.0 - workbox-window: 6.3.0 + workbox-build: 6.4.1 + workbox-window: 6.4.1 transitivePeerDependencies: - '@types/babel__core' + - acorn - supports-color dev: true @@ -4806,10 +4838,10 @@ packages: stylus: optional: true dependencies: - esbuild: 0.13.13 + esbuild: 0.13.14 postcss: 8.3.11 resolve: 1.20.0 - rollup: 2.59.0 + rollup: 2.60.0 optionalDependencies: fsevents: 2.3.2 dev: true @@ -4875,151 +4907,152 @@ packages: engines: {node: '>=0.10.0'} dev: true - /workbox-background-sync/6.3.0: - resolution: {integrity: sha512-79Wznt6oO8xMmLiErRS4zENUEldFHj1/5IiuHsY3NgGRN5rJdvGW6hz+RERhWzoB7rd/vXyAQdKYahGdsiYG1A==} + /workbox-background-sync/6.4.1: + resolution: {integrity: sha512-GiDklRhDF/oJ+WJhb6jO00wA+fjOZlY4SomqpumXP6OXp1WodmKu7xv75hpum0Kx4Fh3MZrj+9Ae+dIYlq21dA==} dependencies: idb: 6.1.5 - workbox-core: 6.3.0 + workbox-core: 6.4.1 dev: true - /workbox-broadcast-update/6.3.0: - resolution: {integrity: sha512-hp7Du6GJzK99wak5cQFhcSBxvcS+2fkFcxiMmz/RsQ5GQNxVcbiovq74w5aNCzuv3muQvICyC1XELZhZ4GYRTQ==} + /workbox-broadcast-update/6.4.1: + resolution: {integrity: sha512-oz1WAEppIatucgIc49zXPsyQG6004eoKsyiJVGDyN94LIFpUDfGa+cykN32X0PaqOC9bdlj+4EjVBi0OuwkIHA==} dependencies: - workbox-core: 6.3.0 + workbox-core: 6.4.1 dev: true - /workbox-build/6.3.0: - resolution: {integrity: sha512-Th93AaC+88ZvJje0acTjCCCvU3tGenxJht5xUALXHW+Mzk3I5SMzTFwKn5F3e1iZ+M7U2jjfpMXe/sJ4UMx46A==} + /workbox-build/6.4.1: + resolution: {integrity: sha512-cvH74tEO8SrziFrCntZ/35B0uaMZFKG+gnk3vZmKLSUTab/6MlhL+UwYXf1sMV5SD/W/v7pnFKZbdAOAg5Ne2w==} engines: {node: '>=10.0.0'} dependencies: - '@apideck/better-ajv-errors': 0.2.6_ajv@8.7.1 + '@apideck/better-ajv-errors': 0.2.7_ajv@8.8.0 '@babel/core': 7.16.0 '@babel/preset-env': 7.16.0_@babel+core@7.16.0 '@babel/runtime': 7.16.3 - '@rollup/plugin-babel': 5.3.0_@babel+core@7.16.0+rollup@2.59.0 - '@rollup/plugin-node-resolve': 11.2.1_rollup@2.59.0 - '@rollup/plugin-replace': 2.4.2_rollup@2.59.0 - '@surma/rollup-plugin-off-main-thread': 1.4.2 - ajv: 8.7.1 - common-tags: 1.8.0 + '@rollup/plugin-babel': 5.3.0_@babel+core@7.16.0+rollup@2.60.0 + '@rollup/plugin-node-resolve': 11.2.1_rollup@2.60.0 + '@rollup/plugin-replace': 2.4.2_rollup@2.60.0 + '@surma/rollup-plugin-off-main-thread': 2.2.3 + ajv: 8.8.0 + common-tags: 1.8.1 fast-json-stable-stringify: 2.1.0 fs-extra: 9.1.0 glob: 7.2.0 lodash: 4.17.21 pretty-bytes: 5.6.0 - rollup: 2.59.0 - rollup-plugin-terser: 7.0.2_rollup@2.59.0 + rollup: 2.60.0 + rollup-plugin-terser: 7.0.2_rollup@2.60.0 source-map: 0.8.0-beta.0 source-map-url: 0.4.1 stringify-object: 3.3.0 strip-comments: 2.0.1 tempy: 0.6.0 upath: 1.2.0 - workbox-background-sync: 6.3.0 - workbox-broadcast-update: 6.3.0 - workbox-cacheable-response: 6.3.0 - workbox-core: 6.3.0 - workbox-expiration: 6.3.0 - workbox-google-analytics: 6.3.0 - workbox-navigation-preload: 6.3.0 - workbox-precaching: 6.3.0 - workbox-range-requests: 6.3.0 - workbox-recipes: 6.3.0 - workbox-routing: 6.3.0 - workbox-strategies: 6.3.0 - workbox-streams: 6.3.0 - workbox-sw: 6.3.0 - workbox-window: 6.3.0 + workbox-background-sync: 6.4.1 + workbox-broadcast-update: 6.4.1 + workbox-cacheable-response: 6.4.1 + workbox-core: 6.4.1 + workbox-expiration: 6.4.1 + workbox-google-analytics: 6.4.1 + workbox-navigation-preload: 6.4.1 + workbox-precaching: 6.4.1 + workbox-range-requests: 6.4.1 + workbox-recipes: 6.4.1 + workbox-routing: 6.4.1 + workbox-strategies: 6.4.1 + workbox-streams: 6.4.1 + workbox-sw: 6.4.1 + workbox-window: 6.4.1 transitivePeerDependencies: - '@types/babel__core' + - acorn - supports-color dev: true - /workbox-cacheable-response/6.3.0: - resolution: {integrity: sha512-oYCRGF6PFEmJJkktdxYw/tcrU8N5u/2ihxVSHd+9sNqjNMDiXLqsewcEG544f1yx7gq5/u6VcvUA5N62KzN1GQ==} + /workbox-cacheable-response/6.4.1: + resolution: {integrity: sha512-omXplP3miJhQwx+jfFnqO9xWgNc8CLG6EWRvTyc8R81cA/4zhqh87yj9UVH+fGUmuIXOUBPAuulSazXUsvKFWg==} dependencies: - workbox-core: 6.3.0 + workbox-core: 6.4.1 dev: true - /workbox-core/6.3.0: - resolution: {integrity: sha512-SufToEV3SOLwwz3j+P4pgkfpzLRUlR17sX3p/LrMHP/brYKvJQqjTwtSvaCkkAX0RPHX2TFHmN8xhPP1bpmomg==} + /workbox-core/6.4.1: + resolution: {integrity: sha512-5hosqpSK+48jHlj+5EHN5dtH1Ade4fqTe4+xX3U9wWK1SDaXEqXpVxdHuBqYfg75UE1PUINA0rhMZWTqeGoLFg==} dev: true - /workbox-expiration/6.3.0: - resolution: {integrity: sha512-teYuYfM3HFbwAD/nlZDw/dCMOrCKjsAiMRhz0uOy9IkfBb7vBynO3xf118lY62X6BfqjZdeahiHh10N0/aYICg==} + /workbox-expiration/6.4.1: + resolution: {integrity: sha512-N912AGhi95vhf2vebE3wPhnGjnR+t5W4yALDY7Pl6bcuhySNbwkkp2RjQcBB+dxrdiX2rOvavvdcf/q1LSnEyg==} dependencies: idb: 6.1.5 - workbox-core: 6.3.0 + workbox-core: 6.4.1 dev: true - /workbox-google-analytics/6.3.0: - resolution: {integrity: sha512-6u0y21rtimnrCKpvayTkwh9y4Y5Xdn6X87x895WzwcOcWA2j/Nl7nmCpB0wjjhqU9pMj7B2lChqfypP+xUs5IA==} + /workbox-google-analytics/6.4.1: + resolution: {integrity: sha512-L1JQISg1CxMAlqw3HXpWB2gRYsmJ9F9OgC2/UNAZLyOJTFk1faZziPS4eXe+UaHevZ+Ma66Z2zfYxPUTr5znjQ==} dependencies: - workbox-background-sync: 6.3.0 - workbox-core: 6.3.0 - workbox-routing: 6.3.0 - workbox-strategies: 6.3.0 + workbox-background-sync: 6.4.1 + workbox-core: 6.4.1 + workbox-routing: 6.4.1 + workbox-strategies: 6.4.1 dev: true - /workbox-navigation-preload/6.3.0: - resolution: {integrity: sha512-D7bomh9SCn1u6n32FqAWfyHe2dkK6mWbwcTsoeBnFSD0p8Gr9Zq1Mpt/DitEfGIQHck90Zd024xcTFLkjczS/Q==} + /workbox-navigation-preload/6.4.1: + resolution: {integrity: sha512-npgZYoeaE+teQvpWqZLgJDJ6I3qxwqAfnSIa8yrNQ2sLR1A88uWGGsiRzfUsIdKjVCLPQVZ+clwb6XU1vyW9Lw==} dependencies: - workbox-core: 6.3.0 + workbox-core: 6.4.1 dev: true - /workbox-precaching/6.3.0: - resolution: {integrity: sha512-bND3rUxiuzFmDfeKywdvOqK0LQ5LLbOPk0eX22PlMQNOOduHRxzglMpgHo/MR6h+8cPJ3GpxT8hZ895/7bHMqQ==} + /workbox-precaching/6.4.1: + resolution: {integrity: sha512-Sq8d+/wfcXFjwuVwKe2VxD4QddRBgkO6pJVgpHbk5WFynR8dc8Zj3BlJ38e4nMlRuBZ8996TIgAmk/U6Rr5YHQ==} dependencies: - workbox-core: 6.3.0 - workbox-routing: 6.3.0 - workbox-strategies: 6.3.0 + workbox-core: 6.4.1 + workbox-routing: 6.4.1 + workbox-strategies: 6.4.1 dev: true - /workbox-range-requests/6.3.0: - resolution: {integrity: sha512-AHnGtfSvc/fBt+8NCVT6jVcshv7oFkiuS94YsedQu2sIN1jKHkxLaj7qMBl818FoY6x7r0jw1WLmG/QDmI1/oA==} + /workbox-range-requests/6.4.1: + resolution: {integrity: sha512-X/asYHeuWIKg5Tk+dfmiEOo9hlkQ1K737dnENj8zL97kZDdcfokPT5CuXgM2xqX7NMoahONq1Eo2UoFfJNjZzg==} dependencies: - workbox-core: 6.3.0 + workbox-core: 6.4.1 dev: true - /workbox-recipes/6.3.0: - resolution: {integrity: sha512-f0AZyxd48E4t+PV+ifgIf8WodfJqRj8/E0t+PwppDIdTPyD59cIh0HZBtgPKFdIMVnltodpMz4zioxym1H3GjQ==} + /workbox-recipes/6.4.1: + resolution: {integrity: sha512-Yu9tLmgD25NorZPO3FHJUii/Y2ghrx2jD2QKMaWBBplshw1MFokqlmr3Dz3O6NI8jBBUnK5Dtbl0+SCwVGSCqg==} dependencies: - workbox-cacheable-response: 6.3.0 - workbox-core: 6.3.0 - workbox-expiration: 6.3.0 - workbox-precaching: 6.3.0 - workbox-routing: 6.3.0 - workbox-strategies: 6.3.0 + workbox-cacheable-response: 6.4.1 + workbox-core: 6.4.1 + workbox-expiration: 6.4.1 + workbox-precaching: 6.4.1 + workbox-routing: 6.4.1 + workbox-strategies: 6.4.1 dev: true - /workbox-routing/6.3.0: - resolution: {integrity: sha512-asajX5UPkaoU4PB9pEpxKWKkcpA+KJQUEeYU6NlK0rXTCpdWQ6iieMRDoBTZBjTzUdL3j3s1Zo2qCOSvtXSYGg==} + /workbox-routing/6.4.1: + resolution: {integrity: sha512-FIy27mwM3WdDASOTMX10OZ8q3Un47ULeDtDrDAKfWYIP/oTF2xoA1/HtXpOjBlyg5VP/poPX5GDojXHXAXpfzQ==} dependencies: - workbox-core: 6.3.0 + workbox-core: 6.4.1 dev: true - /workbox-strategies/6.3.0: - resolution: {integrity: sha512-SYZt40y+Iu5nA+UEPQOrAuAMMNTxtUBPLCIaMMb4lcADpBYrNP1CD+/s2QsrxzS651a8hfi06REKt+uTp1tqfw==} + /workbox-strategies/6.4.1: + resolution: {integrity: sha512-2UQ+7Siy4Z5QG2LebbVhDLmPG3M7bVo/tZqN4LNUGXS6fDlpbTTK6A3Hu0W8gCVwIX0tSg7U3mVhDntH4qt3Dg==} dependencies: - workbox-core: 6.3.0 + workbox-core: 6.4.1 dev: true - /workbox-streams/6.3.0: - resolution: {integrity: sha512-CiRsuoXJOytA7IQriRu6kVCa0L4OdNi0DdniiSageu/EZuxTswNXpgVzkGE4IDArU/5jlzgRtwqrqIWCJX+OMA==} + /workbox-streams/6.4.1: + resolution: {integrity: sha512-0t3QKBml3Qi37JniDfEn0FfN4JRgMK6sEcjGxvmMGwlHAyKukZr0Gj58ax1o1KYGGJr72RDBK+YXI9Sk9cKifw==} dependencies: - workbox-core: 6.3.0 - workbox-routing: 6.3.0 + workbox-core: 6.4.1 + workbox-routing: 6.4.1 dev: true - /workbox-sw/6.3.0: - resolution: {integrity: sha512-xwrXRBzw5jwJ7VdAQkTSNTbNZ4S6VhXtbZZ0vY6XKNQARO5nuGphNdif+hJFIejHUgtV6ESpQnixPj5hYB2jKQ==} + /workbox-sw/6.4.1: + resolution: {integrity: sha512-IJNYcNbjugMB9v+Yx7uswohjOaYoimw5dI0Gcaj2zrJHKjV0bom+BPRCdijmttN/3uVbX57jhNe8SMzWMj7fHw==} dev: true - /workbox-window/6.3.0: - resolution: {integrity: sha512-CFP84assX9srH/TOx4OD8z4EBPO/Cq4WKdV2YLcJIFJmVTS/cB63XKeidKl2KJk8qOOLVIKnaO7BLmb0MxGFtA==} + /workbox-window/6.4.1: + resolution: {integrity: sha512-v5G1U+NN0sHErvE9fzHRA75FrfRFj/0dihFnvno5yqHZZIb9G4U2AarodSDRBC3t6CsnLO68l1Bj1gsHqsM9Qw==} dependencies: '@types/trusted-types': 2.0.2 - workbox-core: 6.3.0 + workbox-core: 6.4.1 dev: true /wrappy/1.0.2: diff --git a/src/App.tsx b/src/App.tsx index 551e4b1a..2284ac14 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -22,12 +22,13 @@ import { setReady, } from '@core/slices/meshtasticSlice'; import { + IBLEConnection, IHTTPConnection, + ISerialConnection, Protobuf, SettingsManager, Types, } from '@meshtastic/meshtasticjs'; -import { About } from '@pages/About'; import { Messages } from '@pages/Messages'; import { Nodes } from '@pages/Nodes/Index'; import { Settings } from '@pages/settings/Index'; @@ -55,15 +56,28 @@ const App = (): JSX.Element => { 'http://meshtastic.local'; React.useEffect(() => { + const connectionMethod = localStorage.getItem('connectionMethod'); + + switch (connectionMethod) { + case 'serial': + setConnection(new ISerialConnection()); + //show connection dialogue + break; + case 'bluetooth': + setConnection(new IBLEConnection()); + //show connection dialogue + break; + default: + setConnection(new IHTTPConnection()); + void connection.connect({ + address: connectionURL, + tls: false, + receiveBatchRequests: false, + fetchInterval: 2000, + }); + break; + } SettingsManager.debugMode = Protobuf.LogRecord_Level.TRACE; - - setConnection(new IHTTPConnection()); - void connection.connect({ - address: connectionURL, - tls: false, - receiveBatchRequests: false, - fetchInterval: 2000, - }); }, [hostOverrideEnabled, hostOverride, connectionURL]); React.useEffect(() => { @@ -168,7 +182,6 @@ const App = (): JSX.Element => { {route.name === 'nodes' && } {route.name === 'plugins' && } {route.name === 'settings' && } - {route.name === 'about' && } {route.name === false && } diff --git a/src/components/Channel.tsx b/src/components/Channel.tsx index 95d77a1b..f60b3fa9 100644 --- a/src/components/Channel.tsx +++ b/src/components/Channel.tsx @@ -13,13 +13,17 @@ import { IconButton } from './generic/IconButton'; export interface ChannelProps { channel: Protobuf.Channel; + hideEnabled?: boolean; } -export const Channel = ({ channel }: ChannelProps): JSX.Element => { +export const Channel = ({ + channel, + hideEnabled, +}: ChannelProps): JSX.Element => { const [edit, setEdit] = React.useState(false); const [loading, setLoading] = React.useState(false); - const { register, handleSubmit, formState } = useForm<{ + const { register, handleSubmit } = useForm<{ enabled: boolean; settings: { name: string; @@ -33,11 +37,12 @@ export const Channel = ({ channel }: ChannelProps): JSX.Element => { }; }>({ defaultValues: { - enabled: - channel.role === - (Protobuf.Channel_Role.PRIMARY || Protobuf.Channel_Role.SECONDARY) - ? true - : false, + enabled: [ + Protobuf.Channel_Role.SECONDARY, + Protobuf.Channel_Role.PRIMARY, + ].find((role) => role === channel.role) + ? true + : false, settings: { name: channel.settings?.name, bandwidth: channel.settings?.bandwidth, @@ -54,9 +59,12 @@ export const Channel = ({ channel }: ChannelProps): JSX.Element => { const onSubmit = handleSubmit(async (data) => { setLoading(true); const adminChannel = Protobuf.Channel.create({ - role: data.enabled - ? Protobuf.Channel_Role.SECONDARY - : Protobuf.Channel_Role.DISABLED, + role: + channel.role === Protobuf.Channel_Role.PRIMARY + ? Protobuf.Channel_Role.PRIMARY + : data.enabled + ? Protobuf.Channel_Role.SECONDARY + : Protobuf.Channel_Role.DISABLED, index: channel.index, settings: { ...data.settings, @@ -75,41 +83,24 @@ export const Channel = ({ channel }: ChannelProps): JSX.Element => { {edit ? ( <> {loading && } -
-
-
- {/* @todo: change to disable & make primary buttons */} +
+ {/* TODO: get gap working */} + + {/* @todo: change to disable & make primary buttons */} + {!hideEnabled && ( -
+ )} - - - - {
role === channel.role) ? 'bg-green-500' : 'bg-gray-400' }`} diff --git a/src/components/LoraConfig.tsx b/src/components/LoraConfig.tsx new file mode 100644 index 00000000..4c474464 --- /dev/null +++ b/src/components/LoraConfig.tsx @@ -0,0 +1,116 @@ +import React from 'react'; + +import { useForm } from 'react-hook-form'; + +import { Loading } from '@components/generic/Loading'; +import { Protobuf } from '@meshtastic/meshtasticjs'; + +import { connection } from '../core/connection'; +import { Card } from './generic/Card'; +import { Checkbox } from './generic/form/Checkbox'; +import { Input } from './generic/form/Input'; + +export interface LoraConfigProps { + channel: Protobuf.Channel; +} + +export const LoraConfig = ({ channel }: LoraConfigProps): JSX.Element => { + const [loading, setLoading] = React.useState(false); + + const { register, handleSubmit } = useForm<{ + enabled: boolean; + settings: { + name: string; + bandwidth?: number; + codingRate?: number; + spreadFactor?: number; + downlinkEnabled?: boolean; + uplinkEnabled?: boolean; + txPower?: number; + psk?: string; + }; + }>({ + defaultValues: { + enabled: + channel.role === + (Protobuf.Channel_Role.PRIMARY || Protobuf.Channel_Role.SECONDARY) + ? true + : false, + settings: { + name: channel.settings?.name, + bandwidth: channel.settings?.bandwidth, + codingRate: channel.settings?.codingRate, + spreadFactor: channel.settings?.spreadFactor, + downlinkEnabled: channel.settings?.downlinkEnabled, + uplinkEnabled: channel.settings?.uplinkEnabled, + txPower: channel.settings?.txPower, + psk: new TextDecoder().decode(channel.settings?.psk), + }, + }, + }); + + const onSubmit = handleSubmit(async (data) => { + setLoading(true); + const adminChannel = Protobuf.Channel.create({ + role: data.enabled + ? Protobuf.Channel_Role.SECONDARY + : Protobuf.Channel_Role.DISABLED, + index: channel.index, + settings: { + ...data.settings, + psk: new TextEncoder().encode(data.settings.psk), + }, + }); + + await connection.setChannel(adminChannel, (): Promise => { + setLoading(false); + return Promise.resolve(); + }); + }); + + return ( + + {loading && } +
+ {/* TODO: get gap working */} + + + + + + + + +
+
+ ); +}; diff --git a/src/components/generic/form/Input.tsx b/src/components/generic/form/Input.tsx index b65b3f14..fb75d698 100644 --- a/src/components/generic/form/Input.tsx +++ b/src/components/generic/form/Input.tsx @@ -9,10 +9,12 @@ interface InputProps extends DefaultInputProps { label?: string; error?: string; action?: JSX.Element; + prefix?: string; + suffix?: string; } export const Input = React.forwardRef( - function Input({ label, error, action, ...props }: InputProps, ref) { + function Input({ label, error, action, suffix, ...props }: InputProps, ref) { return (
{label &&
diff --git a/src/components/generic/form/Select.tsx b/src/components/generic/form/Select.tsx index 2885629c..9b67322f 100644 --- a/src/components/generic/form/Select.tsx +++ b/src/components/generic/form/Select.tsx @@ -30,7 +30,7 @@ export const Select = React.forwardRef( + + +
+ +
+ + ); +}; diff --git a/src/pages/Plugins/Index.tsx b/src/pages/Plugins/Index.tsx index e942cb18..9dd44282 100644 --- a/src/pages/Plugins/Index.tsx +++ b/src/pages/Plugins/Index.tsx @@ -1,11 +1,13 @@ import type React from 'react'; -import { FiFileText, FiRss } from 'react-icons/fi'; +import { FiAlignLeft, FiBell, FiFileText, FiRss } from 'react-icons/fi'; import { PageLayout } from '@components/templates/PageLayout'; +import { ExternalNotification } from './ExternalNotification'; import { Files } from './Files'; import { RangeTest } from './RangeTest'; +import { Serial } from './Serial'; export const Plugins = (): JSX.Element => { return ( @@ -22,8 +24,23 @@ export const Plugins = (): JSX.Element => { description: 'HTTP only file browser', icon: , }, + { + title: 'External Notification', + description: 'External hardware alerts', + icon: , + }, + { + title: 'Serial', + description: 'Send serial data over the mesh', + icon: , + }, + ]} + panels={[ + , + , + , + , ]} - panels={[, ]} /> ); }; diff --git a/src/pages/Plugins/RangeTest.tsx b/src/pages/Plugins/RangeTest.tsx index 81108d14..2ceb88b8 100644 --- a/src/pages/Plugins/RangeTest.tsx +++ b/src/pages/Plugins/RangeTest.tsx @@ -1,7 +1,6 @@ import type React from 'react'; import { useForm, useWatch } from 'react-hook-form'; -import { useTranslation } from 'react-i18next'; import { FiMenu } from 'react-icons/fi'; import { FormFooter } from '@app/components/FormFooter'; @@ -23,7 +22,6 @@ export const RangeTest = ({ navOpen, setNavOpen, }: RangeTestProps): JSX.Element => { - const { t } = useTranslation(); const preferences = useAppSelector((state) => state.meshtastic.preferences); const { register, handleSubmit, formState, reset, control } = @@ -66,7 +64,7 @@ export const RangeTest = ({ } >
- +
>; +} + +export const Serial = ({ navOpen, setNavOpen }: SerialProps): JSX.Element => { + const preferences = useAppSelector((state) => state.meshtastic.preferences); + + const { register, handleSubmit, formState, reset, control } = + useForm({ + defaultValues: { + serialpluginEnabled: preferences.serialpluginEnabled, + serialpluginEcho: preferences.serialpluginEcho, + serialpluginMode: preferences.serialpluginMode, + serialpluginRxd: preferences.serialpluginRxd, + serialpluginTimeout: preferences.serialpluginTimeout, + serialpluginTxd: preferences.serialpluginTxd, + }, + }); + + const onSubmit = handleSubmit((data) => { + void connection.setPreferences(data); + }); + + const watchSerialPluginEnabled = useWatch({ + control, + name: 'serialpluginEnabled', + defaultValue: false, + }); + + return ( + } + onClick={(): void => { + setNavOpen && setNavOpen(!navOpen); + }} + /> + } + footer={ + + } + > +
+ +
+ + + + + + + + + +
+
+
+
+ ); +}; diff --git a/src/pages/settings/Channels.tsx b/src/pages/settings/Channels.tsx index 7bea40b5..fe96ea47 100644 --- a/src/pages/settings/Channels.tsx +++ b/src/pages/settings/Channels.tsx @@ -1,9 +1,9 @@ import React from 'react'; -import { useTranslation } from 'react-i18next'; import { FiCode, FiMenu, FiSave } from 'react-icons/fi'; import JSONPretty from 'react-json-pretty'; +import { LoraConfig } from '@app/components/LoraConfig'; import { connection } from '@app/core/connection'; import { useAppSelector } from '@app/hooks/redux'; import { Channel } from '@components/Channel'; @@ -22,10 +22,7 @@ export const Channels = ({ navOpen, setNavOpen, }: ChannelsProps): JSX.Element => { - const { t } = useTranslation(); - const channels = useAppSelector((state) => state.meshtastic.channels).filter( - (channel) => channel.index !== 0, - ); + const channels = useAppSelector((state) => state.meshtastic.channels); const [debug, setDebug] = React.useState(false); return ( @@ -61,11 +58,16 @@ export const Channels = ({ } >
+ {channels[0] && } } />
{channels.map((channel) => ( - + ))}
diff --git a/src/pages/settings/Connection.tsx b/src/pages/settings/Connection.tsx index ca2cd2a4..b40e6a78 100644 --- a/src/pages/settings/Connection.tsx +++ b/src/pages/settings/Connection.tsx @@ -1,12 +1,12 @@ import React from 'react'; import { useForm } from 'react-hook-form'; -import { useTranslation } from 'react-i18next'; import { FiCheck, FiMenu } from 'react-icons/fi'; +import JSONPretty from 'react-json-pretty'; import { FormFooter } from '@app/components/FormFooter'; -import { connection, setConnection } from '@app/core/connection'; -import { useAppDispatch, useAppSelector } from '@app/hooks/redux'; +import { ble, connection, serial, setConnection } from '@app/core/connection'; +import { useAppSelector } from '@app/hooks/redux'; import { Button } from '@components/generic/Button'; import { Card } from '@components/generic/Card'; import { Checkbox } from '@components/generic/form/Checkbox'; @@ -40,20 +40,18 @@ export const Connection = ({ navOpen, setNavOpen, }: ConnectionProps): JSX.Element => { - const dispatch = useAppDispatch(); const [selectedConnType, setSelectedConnType] = React.useState(connType.HTTP); const [bleDevices, setBleDevices] = React.useState([]); const [serialDevices, setSerialDevices] = React.useState([]); const [httpIpSource, setHttpIpSource] = React.useState<'local' | 'remote'>( 'local', ); - const { t } = useTranslation(); const hostOverrideEnabled = useAppSelector( (state) => state.meshtastic.hostOverrideEnabled, ); const hostOverride = useAppSelector((state) => state.meshtastic.hostOverride); - const { register, handleSubmit, formState, reset } = useForm<{ + const { formState, reset } = useForm<{ method: connType; }>({ defaultValues: { @@ -83,30 +81,26 @@ export const Connection = ({ await connection.connect(params); }; - const updateBleDeviceList = async (): Promise => { + const updateBleDeviceList = React.useCallback(async (): Promise => { const devices = await ble.getDevices(); setBleDevices(devices); - }; + }, []); - const updateSerialDeviceList = async (): Promise => { + const updateSerialDeviceList = React.useCallback(async (): Promise => { const devices = await serial.getPorts(); console.log(devices); setSerialDevices(devices); - }; - - // React.useEffect(() => { - // if (selectedConnType === connType.BLE) { - // void updateBleDeviceList(); - // } - // if (selectedConnType === connType.SERIAL) { - // void updateSerialDeviceList(); - // } - // }, [selectedConnType]); + }, []); - const onSubmit = handleSubmit((data) => { - // void connection.setOwner(data); - }); + React.useEffect(() => { + if (selectedConnType === connType.BLE) { + void updateBleDeviceList(); + } + if (selectedConnType === connType.SERIAL) { + void updateSerialDeviceList(); + } + }, [selectedConnType, updateBleDeviceList, updateSerialDeviceList]); const connectionURL: string = hostOverrideEnabled ? hostOverride @@ -115,9 +109,6 @@ export const Connection = ({ : (import.meta.env.VITE_PUBLIC_DEVICE_IP as string) ?? 'http://meshtastic.local'; - const ble = new IBLEConnection(); - const serial = new ISerialConnection(); - return ( { + return; + }} clearAction={reset} /> } >
-
+