diff --git a/package.json b/package.json index a8af357a..d03a2366 100644 --- a/package.json +++ b/package.json @@ -20,10 +20,9 @@ "homepage": "https://meshtastic.org", "dependencies": { "@emeraldpay/hashicon-react": "^0.5.2", - "@headlessui/react": "^1.7.9", "@hookform/error-message": "^2.0.1", - "@hookform/resolvers": "^2.9.10", - "@meshtastic/meshtasticjs": "2.0.15-0", + "@hookform/resolvers": "^2.9.11", + "@meshtastic/meshtasticjs": "2.0.20-1", "@radix-ui/react-dialog": "^1.0.2", "@radix-ui/react-label": "^2.0.0", "@radix-ui/react-menubar": "^1.0.0", @@ -41,37 +40,38 @@ "class-validator": "^0.14.0", "class-variance-authority": "^0.4.0", "clsx": "^1.2.1", + "cmdk": "^0.1.22", "geodesy": "^2.4.0", "i18next": "^22.4.9", "immer": "^9.0.19", - "lucide-react": "^0.109.0", + "lucide-react": "^0.112.0", "mapbox-gl": "npm:empty-npm-package@^1.0.0", "maplibre-gl": "2.4.0", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-hook-form": "^7.43.0", + "react-hook-form": "^7.43.1", "react-map-gl": "^7.0.21", "react-qrcode-logo": "^2.8.0", "rfc4648": "^1.5.2", - "tailwind-merge": "^1.9.0", + "tailwind-merge": "^1.9.1", "tailwindcss-animate": "^1.0.5", "timeago-react": "^3.0.5", - "zustand": "4.3.2" + "zustand": "4.3.3" }, "devDependencies": { "@tailwindcss/forms": "^0.5.3", "@types/chrome": "^0.0.212", "@types/geodesy": "^2.2.3", - "@types/node": "^18.11.18", + "@types/node": "^18.13.0", "@types/react": "^18.0.27", "@types/react-dom": "^18.0.10", "@types/w3c-web-serial": "^1.0.3", "@types/web-bluetooth": "^0.0.16", - "@typescript-eslint/eslint-plugin": "^5.50.0", - "@typescript-eslint/parser": "^5.50.0", + "@typescript-eslint/eslint-plugin": "^5.51.0", + "@typescript-eslint/parser": "^5.51.0", "@vitejs/plugin-react": "^3.1.0", "autoprefixer": "^10.4.13", - "eslint": "^8.33.0", + "eslint": "^8.34.0", "eslint-config-prettier": "^8.6.0", "eslint-import-resolver-typescript": "^3.5.3", "eslint-plugin-import": "^2.27.5", @@ -79,15 +79,15 @@ "eslint-plugin-react-hooks": "^4.6.0", "gzipper": "^7.2.0", "postcss": "^8.4.21", - "prettier": "^2.8.3", + "prettier": "^2.8.4", "prettier-plugin-tailwindcss": "^0.2.2", "rollup-plugin-visualizer": "^5.9.0", - "tailwindcss": "^3.2.4", + "tailwindcss": "^3.2.6", "tar": "^6.1.13", "tslib": "^2.5.0", "typescript": "^4.9.5", "vite": "^4.1.1", "vite-plugin-environment": "^1.1.3", - "vite-plugin-pwa": "^0.14.1" + "vite-plugin-pwa": "^0.14.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2e6a4413..1d031292 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2,10 +2,9 @@ lockfileVersion: 5.4 specifiers: '@emeraldpay/hashicon-react': ^0.5.2 - '@headlessui/react': ^1.7.9 '@hookform/error-message': ^2.0.1 - '@hookform/resolvers': ^2.9.10 - '@meshtastic/meshtasticjs': 2.0.15-0 + '@hookform/resolvers': ^2.9.11 + '@meshtastic/meshtasticjs': 2.0.20-1 '@radix-ui/react-dialog': ^1.0.2 '@radix-ui/react-label': ^2.0.0 '@radix-ui/react-menubar': ^1.0.0 @@ -21,13 +20,13 @@ specifiers: '@turf/turf': ^6.5.0 '@types/chrome': ^0.0.212 '@types/geodesy': ^2.2.3 - '@types/node': ^18.11.18 + '@types/node': ^18.13.0 '@types/react': ^18.0.27 '@types/react-dom': ^18.0.10 '@types/w3c-web-serial': ^1.0.3 '@types/web-bluetooth': ^0.0.16 - '@typescript-eslint/eslint-plugin': ^5.50.0 - '@typescript-eslint/parser': ^5.50.0 + '@typescript-eslint/eslint-plugin': ^5.51.0 + '@typescript-eslint/parser': ^5.51.0 '@vitejs/plugin-react': ^3.1.0 autoprefixer: ^10.4.13 base64-js: ^1.5.1 @@ -35,7 +34,8 @@ specifiers: class-validator: ^0.14.0 class-variance-authority: ^0.4.0 clsx: ^1.2.1 - eslint: ^8.33.0 + cmdk: ^0.1.22 + eslint: ^8.34.0 eslint-config-prettier: ^8.6.0 eslint-import-resolver-typescript: ^3.5.3 eslint-plugin-import: ^2.27.5 @@ -45,21 +45,21 @@ specifiers: gzipper: ^7.2.0 i18next: ^22.4.9 immer: ^9.0.19 - lucide-react: ^0.109.0 + lucide-react: ^0.112.0 mapbox-gl: npm:empty-npm-package@^1.0.0 maplibre-gl: 2.4.0 postcss: ^8.4.21 - prettier: ^2.8.3 + prettier: ^2.8.4 prettier-plugin-tailwindcss: ^0.2.2 react: ^18.2.0 react-dom: ^18.2.0 - react-hook-form: ^7.43.0 + react-hook-form: ^7.43.1 react-map-gl: ^7.0.21 react-qrcode-logo: ^2.8.0 rfc4648: ^1.5.2 rollup-plugin-visualizer: ^5.9.0 - tailwind-merge: ^1.9.0 - tailwindcss: ^3.2.4 + tailwind-merge: ^1.9.1 + tailwindcss: ^3.2.6 tailwindcss-animate: ^1.0.5 tar: ^6.1.13 timeago-react: ^3.0.5 @@ -67,15 +67,14 @@ specifiers: typescript: ^4.9.5 vite: ^4.1.1 vite-plugin-environment: ^1.1.3 - vite-plugin-pwa: ^0.14.1 - zustand: 4.3.2 + vite-plugin-pwa: ^0.14.4 + zustand: 4.3.3 dependencies: '@emeraldpay/hashicon-react': 0.5.2 - '@headlessui/react': 1.7.9_biqbaboplfbrettd7655fr4n2y - '@hookform/error-message': 2.0.1_tnon2c56rguu5lfvlbrc6byj3m - '@hookform/resolvers': 2.9.10_react-hook-form@7.43.0 - '@meshtastic/meshtasticjs': 2.0.15-0 + '@hookform/error-message': 2.0.1_zf7ga3u4zrffjlingb6kh5ipva + '@hookform/resolvers': 2.9.11_react-hook-form@7.43.1 + '@meshtastic/meshtasticjs': 2.0.20-1 '@radix-ui/react-dialog': 1.0.2_5ndqzdd6t4rivxsukjv3i3ak2q '@radix-ui/react-label': 2.0.0_biqbaboplfbrettd7655fr4n2y '@radix-ui/react-menubar': 1.0.0_5ndqzdd6t4rivxsukjv3i3ak2q @@ -86,61 +85,62 @@ dependencies: '@radix-ui/react-tabs': 1.0.2_biqbaboplfbrettd7655fr4n2y '@radix-ui/react-toast': 1.1.2_biqbaboplfbrettd7655fr4n2y '@radix-ui/react-tooltip': 1.0.3_5ndqzdd6t4rivxsukjv3i3ak2q - '@tailwindcss/typography': 0.5.9_tailwindcss@3.2.4 + '@tailwindcss/typography': 0.5.9_tailwindcss@3.2.6 '@turf/turf': 6.5.0 base64-js: 1.5.1 class-transformer: 0.5.1 class-validator: 0.14.0 class-variance-authority: 0.4.0_typescript@4.9.5 clsx: 1.2.1 + cmdk: 0.1.22_5ndqzdd6t4rivxsukjv3i3ak2q geodesy: 2.4.0 i18next: 22.4.9 immer: 9.0.19 - lucide-react: 0.109.0_react@18.2.0 + lucide-react: 0.112.0_react@18.2.0 mapbox-gl: /empty-npm-package/1.0.0 maplibre-gl: 2.4.0 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - react-hook-form: 7.43.0_react@18.2.0 + react-hook-form: 7.43.1_react@18.2.0 react-map-gl: 7.0.21_6eczaga5xxiwzxtfiyk6fioasq react-qrcode-logo: 2.8.0_biqbaboplfbrettd7655fr4n2y rfc4648: 1.5.2 - tailwind-merge: 1.9.0 - tailwindcss-animate: 1.0.5_tailwindcss@3.2.4 + tailwind-merge: 1.9.1 + tailwindcss-animate: 1.0.5_tailwindcss@3.2.6 timeago-react: 3.0.5_react@18.2.0 - zustand: 4.3.2_immer@9.0.19+react@18.2.0 + zustand: 4.3.3_immer@9.0.19+react@18.2.0 devDependencies: - '@tailwindcss/forms': 0.5.3_tailwindcss@3.2.4 + '@tailwindcss/forms': 0.5.3_tailwindcss@3.2.6 '@types/chrome': 0.0.212 '@types/geodesy': 2.2.3 - '@types/node': 18.11.18 + '@types/node': 18.13.0 '@types/react': 18.0.27 '@types/react-dom': 18.0.10 '@types/w3c-web-serial': 1.0.3 '@types/web-bluetooth': 0.0.16 - '@typescript-eslint/eslint-plugin': 5.50.0_go4drrxstycfikanvu45pi4vgq - '@typescript-eslint/parser': 5.50.0_4vsywjlpuriuw3tl5oq6zy5a64 + '@typescript-eslint/eslint-plugin': 5.51.0_z4swst3wuuqk4hlme4ajzslgh4 + '@typescript-eslint/parser': 5.51.0_7kw3g6rralp5ps6mg3uyzz6azm '@vitejs/plugin-react': 3.1.0_vite@4.1.1 autoprefixer: 10.4.13_postcss@8.4.21 - eslint: 8.33.0 - eslint-config-prettier: 8.6.0_eslint@8.33.0 - eslint-import-resolver-typescript: 3.5.3_ohdts44xlqyeyrlje4qnefqeay - eslint-plugin-import: 2.27.5_nowqz4jutkd4a233czbfk7jsgu - eslint-plugin-react: 7.32.2_eslint@8.33.0 - eslint-plugin-react-hooks: 4.6.0_eslint@8.33.0 + eslint: 8.34.0 + eslint-config-prettier: 8.6.0_eslint@8.34.0 + eslint-import-resolver-typescript: 3.5.3_mvgyw3chnqkp6sgfmmtihyjpnm + eslint-plugin-import: 2.27.5_inmo4nrctlhmfx73hzu6aogupa + eslint-plugin-react: 7.32.2_eslint@8.34.0 + eslint-plugin-react-hooks: 4.6.0_eslint@8.34.0 gzipper: 7.2.0 postcss: 8.4.21 - prettier: 2.8.3 - prettier-plugin-tailwindcss: 0.2.2_prettier@2.8.3 + prettier: 2.8.4 + prettier-plugin-tailwindcss: 0.2.2_prettier@2.8.4 rollup-plugin-visualizer: 5.9.0 - tailwindcss: 3.2.4_postcss@8.4.21 + tailwindcss: 3.2.6_postcss@8.4.21 tar: 6.1.13 tslib: 2.5.0 typescript: 4.9.5 - vite: 4.1.1_@types+node@18.11.18 + vite: 4.1.1_@types+node@18.13.0 vite-plugin-environment: 1.1.3_vite@4.1.1 - vite-plugin-pwa: 0.14.1_vite@4.1.1 + vite-plugin-pwa: 0.14.4_vite@4.1.1 packages: @@ -264,7 +264,7 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/helper-annotate-as-pure': 7.18.6 - regexpu-core: 5.2.2 + regexpu-core: 5.3.0 dev: true /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.20.12: @@ -1282,6 +1282,10 @@ packages: esutils: 2.0.3 dev: true + /@babel/regjsgen/0.8.0: + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} + dev: true + /@babel/runtime/7.20.13: resolution: {integrity: sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==} engines: {node: '>=6.9.0'} @@ -1324,8 +1328,8 @@ packages: to-fast-properties: 2.0.0 dev: true - /@buf/meshtastic_protobufs.bufbuild_es/1.0.0-20230129055417-f11f156e79a6.1_@bufbuild+protobuf@1.0.0: - resolution: {registry: https://buf.build/gen/npm/v1, tarball: https://buf.build/gen/npm/v1/@buf/meshtastic_protobufs.bufbuild_es/1.0.0-20230129055417-f11f156e79a6.1/tarball} + /@buf/meshtastic_protobufs.bufbuild_es/1.0.0-20230211031647-2cce48659fb1.1_@bufbuild+protobuf@1.0.0: + resolution: {registry: https://buf.build/gen/npm/v1, tarball: https://buf.build/gen/npm/v1/@buf/meshtastic_protobufs.bufbuild_es/1.0.0-20230211031647-2cce48659fb1.1/tarball} peerDependencies: '@bufbuild/protobuf': ^1.0.0 dependencies: @@ -1598,19 +1602,7 @@ packages: base64-js: 1.5.1 dev: true - /@headlessui/react/1.7.9_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-Bobh/+mDciu8kEE2hvdukFYjbfaG4MEkK/6TjWOgqcODLKYpRhWPKPE+dCcCSz/YrwjFVrEAMOiWtfk6sW20/w==} - engines: {node: '>=10'} - peerDependencies: - react: ^16 || ^17 || ^18 - react-dom: ^16 || ^17 || ^18 - dependencies: - client-only: 0.0.1 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - dev: false - - /@hookform/error-message/2.0.1_tnon2c56rguu5lfvlbrc6byj3m: + /@hookform/error-message/2.0.1_zf7ga3u4zrffjlingb6kh5ipva: resolution: {integrity: sha512-U410sAr92xgxT1idlu9WWOVjndxLdgPUHEB8Schr27C9eh7/xUnITWpCMF93s+lGiG++D4JnbSnrb5A21AdSNg==} peerDependencies: react: '>=16.8.0' @@ -1619,15 +1611,15 @@ packages: dependencies: react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - react-hook-form: 7.43.0_react@18.2.0 + react-hook-form: 7.43.1_react@18.2.0 dev: false - /@hookform/resolvers/2.9.10_react-hook-form@7.43.0: - resolution: {integrity: sha512-JIL1DgJIlH9yuxcNGtyhsWX/PgNltz+5Gr6+8SX9fhXc/hPbEIk6wPI82nhgvp3uUb6ZfAM5mqg/x7KR7NAb+A==} + /@hookform/resolvers/2.9.11_react-hook-form@7.43.1: + resolution: {integrity: sha512-bA3aZ79UgcHj7tFV7RlgThzwSSHZgvfbt2wprldRkYBcMopdMvHyO17Wwp/twcJasNFischFfS7oz8Katz8DdQ==} peerDependencies: react-hook-form: ^7.0.0 dependencies: - react-hook-form: 7.43.0_react@18.2.0 + react-hook-form: 7.43.1_react@18.2.0 dev: false /@humanwhocodes/config-array/0.11.8: @@ -1700,7 +1692,7 @@ packages: hasBin: true dependencies: get-stream: 6.0.1 - minimist: 1.2.7 + minimist: 1.2.8 dev: false /@mapbox/jsonlint-lines-primitives/2.0.2: @@ -1735,14 +1727,14 @@ packages: engines: {node: '>=6.0.0'} dev: false - /@meshtastic/meshtasticjs/2.0.15-0: - resolution: {integrity: sha512-CEfLP/PQWsQoUoFkQ2FVSNUKhjH+6J3QaTgvaRcP8YWq269SA8/A4ZFIIdg28DMKkPNcGPfVv/6PX7y98C6zmA==} + /@meshtastic/meshtasticjs/2.0.20-1: + resolution: {integrity: sha512-ShYcQ0/T4reWHcfgMIGhqjBQIIz4GrTZOJ9p+O9ChXxND+sWdmFe4U3e5sCMnEZW33xbI6bgQhq7De2sjqAzcQ==} dependencies: - '@buf/meshtastic_protobufs.bufbuild_es': 1.0.0-20230129055417-f11f156e79a6.1_@bufbuild+protobuf@1.0.0 + '@buf/meshtastic_protobufs.bufbuild_es': 1.0.0-20230211031647-2cce48659fb1.1_@bufbuild+protobuf@1.0.0 '@bufbuild/protobuf': 1.0.0 crc: 4.3.2 sub-events: 1.9.0 - tslog: 4.7.1 + tslog: 4.7.2 transitivePeerDependencies: - buffer dev: false @@ -1771,7 +1763,7 @@ packages: dependencies: cross-spawn: 7.0.3 is-glob: 4.0.3 - open: 8.4.0 + open: 8.4.1 picocolors: 1.0.0 tiny-glob: 0.2.9 tslib: 2.5.0 @@ -1834,6 +1826,33 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-dialog/1.0.0_5ndqzdd6t4rivxsukjv3i3ak2q: + resolution: {integrity: sha512-Yn9YU+QlHYLWwV1XfKiqnGVpWYWk6MeBVM6x/bcoyPvxgjQGoeT35482viLPctTMWoMw0PoHgqfSox7Ig+957Q==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + '@radix-ui/primitive': 1.0.0 + '@radix-ui/react-compose-refs': 1.0.0_react@18.2.0 + '@radix-ui/react-context': 1.0.0_react@18.2.0 + '@radix-ui/react-dismissable-layer': 1.0.0_biqbaboplfbrettd7655fr4n2y + '@radix-ui/react-focus-guards': 1.0.0_react@18.2.0 + '@radix-ui/react-focus-scope': 1.0.0_biqbaboplfbrettd7655fr4n2y + '@radix-ui/react-id': 1.0.0_react@18.2.0 + '@radix-ui/react-portal': 1.0.0_biqbaboplfbrettd7655fr4n2y + '@radix-ui/react-presence': 1.0.0_biqbaboplfbrettd7655fr4n2y + '@radix-ui/react-primitive': 1.0.0_biqbaboplfbrettd7655fr4n2y + '@radix-ui/react-slot': 1.0.0_react@18.2.0 + '@radix-ui/react-use-controllable-state': 1.0.0_react@18.2.0 + aria-hidden: 1.2.2_3stiutgnnbnfnf3uowm5cip22i + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + react-remove-scroll: 2.5.4_3stiutgnnbnfnf3uowm5cip22i + transitivePeerDependencies: + - '@types/react' + dev: false + /@radix-ui/react-dialog/1.0.2_5ndqzdd6t4rivxsukjv3i3ak2q: resolution: {integrity: sha512-EKxxp2WNSmUPkx4trtWNmZ4/vAYEg7JkAfa1HKBUnaubw9eHzf1Orr9B472lJYaYz327RHDrd4R95fsw7VR8DA==} peerDependencies: @@ -1870,6 +1889,22 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-dismissable-layer/1.0.0_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-n7kDRfx+LB1zLueRDvZ1Pd0bxdJWDUZNQ/GWoxDn2prnuJKRdxsjulejX/ePkOsLi2tTm6P24mDqlMSgQpsT6g==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + '@radix-ui/primitive': 1.0.0 + '@radix-ui/react-compose-refs': 1.0.0_react@18.2.0 + '@radix-ui/react-primitive': 1.0.0_biqbaboplfbrettd7655fr4n2y + '@radix-ui/react-use-callback-ref': 1.0.0_react@18.2.0 + '@radix-ui/react-use-escape-keydown': 1.0.0_react@18.2.0 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: false + /@radix-ui/react-dismissable-layer/1.0.2_biqbaboplfbrettd7655fr4n2y: resolution: {integrity: sha512-WjJzMrTWROozDqLB0uRWYvj4UuXsM/2L19EmQ3Au+IJWqwvwq9Bwd+P8ivo0Deg9JDPArR1I6MbWNi1CmXsskg==} peerDependencies: @@ -1895,6 +1930,20 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-focus-scope/1.0.0_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-C4SWtsULLGf/2L4oGeIHlvWQx7Rf+7cX/vKOAD2dXW0A1b5QXwi3wWeaEgW+wn+SEVrraMUk05vLU9fZZz5HbQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + '@radix-ui/react-compose-refs': 1.0.0_react@18.2.0 + '@radix-ui/react-primitive': 1.0.0_biqbaboplfbrettd7655fr4n2y + '@radix-ui/react-use-callback-ref': 1.0.0_react@18.2.0 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: false + /@radix-ui/react-focus-scope/1.0.1_biqbaboplfbrettd7655fr4n2y: resolution: {integrity: sha512-Ej2MQTit8IWJiS2uuujGUmxXjF/y5xZptIIQnyd2JHLwtV0R2j9NRVoRj/1j/gJ7e3REdaBw4Hjf4a1ImhkZcQ==} peerDependencies: @@ -2036,6 +2085,18 @@ packages: - '@types/react' dev: false + /@radix-ui/react-portal/1.0.0_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-a8qyFO/Xb99d8wQdu4o7qnigNjTPG123uADNecz0eX4usnQEj7o+cG4ZX4zkqq98NYekT7UoEQIjxBNWIFuqTA==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + '@radix-ui/react-primitive': 1.0.0_biqbaboplfbrettd7655fr4n2y + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: false + /@radix-ui/react-portal/1.0.1_biqbaboplfbrettd7655fr4n2y: resolution: {integrity: sha512-NY2vUWI5WENgAT1nfC6JS7RU5xRYBfjZVLq0HmgEN1Ezy3rk/UruMV4+Rd0F40PEaFC5SrLS1ixYvcYIQrb4Ig==} peerDependencies: @@ -2061,6 +2122,18 @@ packages: react-dom: 18.2.0_react@18.2.0 dev: false + /@radix-ui/react-primitive/1.0.0_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + '@radix-ui/react-slot': 1.0.0_react@18.2.0 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: false + /@radix-ui/react-primitive/1.0.1_biqbaboplfbrettd7655fr4n2y: resolution: {integrity: sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==} peerDependencies: @@ -2139,6 +2212,16 @@ packages: react-dom: 18.2.0_react@18.2.0 dev: false + /@radix-ui/react-slot/1.0.0_react@18.2.0: + resolution: {integrity: sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + '@radix-ui/react-compose-refs': 1.0.0_react@18.2.0 + react: 18.2.0 + dev: false + /@radix-ui/react-slot/1.0.1_react@18.2.0: resolution: {integrity: sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==} peerDependencies: @@ -2253,6 +2336,16 @@ packages: react: 18.2.0 dev: false + /@radix-ui/react-use-escape-keydown/1.0.0_react@18.2.0: + resolution: {integrity: sha512-JwfBCUIfhXRxKExgIqGa4CQsiMemo1Xt0W/B4ei3fpzpvPENKpMKQ8mZSB6Acj3ebrAEgi2xiQvcI1PAAodvyg==} + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + dependencies: + '@babel/runtime': 7.20.13 + '@radix-ui/react-use-callback-ref': 1.0.0_react@18.2.0 + react: 18.2.0 + dev: false + /@radix-ui/react-use-escape-keydown/1.0.2_react@18.2.0: resolution: {integrity: sha512-DXGim3x74WgUv+iMNCF+cAo8xUHHeqvjx8zs7trKf+FkQKPQXLk2sX7Gx1ysH7Q76xCpZuxIJE7HLPxRE+Q+GA==} peerDependencies: @@ -2361,7 +2454,7 @@ packages: rollup: 2.79.1 dev: true - /@rollup/plugin-replace/5.0.2_rollup@3.13.0: + /@rollup/plugin-replace/5.0.2_rollup@3.15.0: resolution: {integrity: sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2370,9 +2463,9 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2_rollup@3.13.0 + '@rollup/pluginutils': 5.0.2_rollup@3.15.0 magic-string: 0.27.0 - rollup: 3.13.0 + rollup: 3.15.0 dev: true /@rollup/pluginutils/3.1.0_rollup@2.79.1: @@ -2387,7 +2480,7 @@ packages: rollup: 2.79.1 dev: true - /@rollup/pluginutils/5.0.2_rollup@3.13.0: + /@rollup/pluginutils/5.0.2_rollup@3.15.0: resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -2399,7 +2492,7 @@ packages: '@types/estree': 1.0.0 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 3.13.0 + rollup: 3.15.0 dev: true /@stablelib/binary/1.0.1: @@ -2437,16 +2530,16 @@ packages: string.prototype.matchall: 4.0.8 dev: true - /@tailwindcss/forms/0.5.3_tailwindcss@3.2.4: + /@tailwindcss/forms/0.5.3_tailwindcss@3.2.6: resolution: {integrity: sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==} peerDependencies: tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1' dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 3.2.4_postcss@8.4.21 + tailwindcss: 3.2.6_postcss@8.4.21 dev: true - /@tailwindcss/typography/0.5.9_tailwindcss@3.2.4: + /@tailwindcss/typography/0.5.9_tailwindcss@3.2.6: resolution: {integrity: sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg==} peerDependencies: tailwindcss: '>=3.0.0 || insiders' @@ -2455,7 +2548,7 @@ packages: lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 3.2.4_postcss@8.4.21 + tailwindcss: 3.2.6_postcss@8.4.21 dev: false /@turf/along/6.5.0: @@ -3555,8 +3648,8 @@ packages: '@types/pbf': 3.0.2 dev: false - /@types/node/18.11.18: - resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} + /@types/node/18.13.0: + resolution: {integrity: sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg==} dev: true /@types/pbf/3.0.2: @@ -3582,7 +3675,7 @@ packages: /@types/resolve/1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 18.11.18 + '@types/node': 18.13.0 dev: true /@types/scheduler/0.16.2: @@ -3596,8 +3689,8 @@ packages: resolution: {integrity: sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==} dev: true - /@types/validator/13.7.11: - resolution: {integrity: sha512-WqTos+CnAKN64YwyBMhgUYhb5VsTNKwUY6AuzG5qu9/pFZJar/RJFMZBXwX7VS+uzYi+lIAr3WkvuWqEI9F2eg==} + /@types/validator/13.7.12: + resolution: {integrity: sha512-YVtyAPqpefU+Mm/qqnOANW6IkqKpCSrarcyV269C8MA8Ux0dbkEuQwM/4CjL47kVEM2LgBef/ETfkH+c6+moFA==} dev: false /@types/w3c-web-serial/1.0.3: @@ -3608,8 +3701,8 @@ packages: resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} dev: true - /@typescript-eslint/eslint-plugin/5.50.0_go4drrxstycfikanvu45pi4vgq: - resolution: {integrity: sha512-vwksQWSFZiUhgq3Kv7o1Jcj0DUNylwnIlGvKvLLYsq8pAWha6/WCnXUeaSoNNha/K7QSf2+jvmkxggC1u3pIwQ==} + /@typescript-eslint/eslint-plugin/5.51.0_z4swst3wuuqk4hlme4ajzslgh4: + resolution: {integrity: sha512-wcAwhEWm1RgNd7dxD/o+nnLW8oH+6RK1OGnmbmkj/GGoDPV1WWMVP0FXYQBivKHdwM1pwii3bt//RC62EriIUQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -3619,12 +3712,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.50.0_4vsywjlpuriuw3tl5oq6zy5a64 - '@typescript-eslint/scope-manager': 5.50.0 - '@typescript-eslint/type-utils': 5.50.0_4vsywjlpuriuw3tl5oq6zy5a64 - '@typescript-eslint/utils': 5.50.0_4vsywjlpuriuw3tl5oq6zy5a64 + '@typescript-eslint/parser': 5.51.0_7kw3g6rralp5ps6mg3uyzz6azm + '@typescript-eslint/scope-manager': 5.51.0 + '@typescript-eslint/type-utils': 5.51.0_7kw3g6rralp5ps6mg3uyzz6azm + '@typescript-eslint/utils': 5.51.0_7kw3g6rralp5ps6mg3uyzz6azm debug: 4.3.4 - eslint: 8.33.0 + eslint: 8.34.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 @@ -3636,8 +3729,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser/5.50.0_4vsywjlpuriuw3tl5oq6zy5a64: - resolution: {integrity: sha512-KCcSyNaogUDftK2G9RXfQyOCt51uB5yqC6pkUYqhYh8Kgt+DwR5M0EwEAxGPy/+DH6hnmKeGsNhiZRQxjH71uQ==} + /@typescript-eslint/parser/5.51.0_7kw3g6rralp5ps6mg3uyzz6azm: + resolution: {integrity: sha512-fEV0R9gGmfpDeRzJXn+fGQKcl0inIeYobmmUWijZh9zA7bxJ8clPhV9up2ZQzATxAiFAECqPQyMDB4o4B81AaA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -3646,26 +3739,26 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.50.0 - '@typescript-eslint/types': 5.50.0 - '@typescript-eslint/typescript-estree': 5.50.0_typescript@4.9.5 + '@typescript-eslint/scope-manager': 5.51.0 + '@typescript-eslint/types': 5.51.0 + '@typescript-eslint/typescript-estree': 5.51.0_typescript@4.9.5 debug: 4.3.4 - eslint: 8.33.0 + eslint: 8.34.0 typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager/5.50.0: - resolution: {integrity: sha512-rt03kaX+iZrhssaT974BCmoUikYtZI24Vp/kwTSy841XhiYShlqoshRFDvN1FKKvU2S3gK+kcBW1EA7kNUrogg==} + /@typescript-eslint/scope-manager/5.51.0: + resolution: {integrity: sha512-gNpxRdlx5qw3yaHA0SFuTjW4rxeYhpHxt491PEcKF8Z6zpq0kMhe0Tolxt0qjlojS+/wArSDlj/LtE69xUJphQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.50.0 - '@typescript-eslint/visitor-keys': 5.50.0 + '@typescript-eslint/types': 5.51.0 + '@typescript-eslint/visitor-keys': 5.51.0 dev: true - /@typescript-eslint/type-utils/5.50.0_4vsywjlpuriuw3tl5oq6zy5a64: - resolution: {integrity: sha512-dcnXfZ6OGrNCO7E5UY/i0ktHb7Yx1fV6fnQGGrlnfDhilcs6n19eIRcvLBqx6OQkrPaFlDPk3OJ0WlzQfrV0bQ==} + /@typescript-eslint/type-utils/5.51.0_7kw3g6rralp5ps6mg3uyzz6azm: + resolution: {integrity: sha512-QHC5KKyfV8sNSyHqfNa0UbTbJ6caB8uhcx2hYcWVvJAZYJRBo5HyyZfzMdRx8nvS+GyMg56fugMzzWnojREuQQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -3674,23 +3767,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.50.0_typescript@4.9.5 - '@typescript-eslint/utils': 5.50.0_4vsywjlpuriuw3tl5oq6zy5a64 + '@typescript-eslint/typescript-estree': 5.51.0_typescript@4.9.5 + '@typescript-eslint/utils': 5.51.0_7kw3g6rralp5ps6mg3uyzz6azm debug: 4.3.4 - eslint: 8.33.0 + eslint: 8.34.0 tsutils: 3.21.0_typescript@4.9.5 typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types/5.50.0: - resolution: {integrity: sha512-atruOuJpir4OtyNdKahiHZobPKFvZnBnfDiyEaBf6d9vy9visE7gDjlmhl+y29uxZ2ZDgvXijcungGFjGGex7w==} + /@typescript-eslint/types/5.51.0: + resolution: {integrity: sha512-SqOn0ANn/v6hFn0kjvLwiDi4AzR++CBZz0NV5AnusT2/3y32jdc0G4woXPWHCumWtUXZKPAS27/9vziSsC9jnw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree/5.50.0_typescript@4.9.5: - resolution: {integrity: sha512-Gq4zapso+OtIZlv8YNAStFtT6d05zyVCK7Fx3h5inlLBx2hWuc/0465C2mg/EQDDU2LKe52+/jN4f0g9bd+kow==} + /@typescript-eslint/typescript-estree/5.51.0_typescript@4.9.5: + resolution: {integrity: sha512-TSkNupHvNRkoH9FMA3w7TazVFcBPveAAmb7Sz+kArY6sLT86PA5Vx80cKlYmd8m3Ha2SwofM1KwraF24lM9FvA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -3698,8 +3791,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.50.0 - '@typescript-eslint/visitor-keys': 5.50.0 + '@typescript-eslint/types': 5.51.0 + '@typescript-eslint/visitor-keys': 5.51.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -3710,31 +3803,31 @@ packages: - supports-color dev: true - /@typescript-eslint/utils/5.50.0_4vsywjlpuriuw3tl5oq6zy5a64: - resolution: {integrity: sha512-v/AnUFImmh8G4PH0NDkf6wA8hujNNcrwtecqW4vtQ1UOSNBaZl49zP1SHoZ/06e+UiwzHpgb5zP5+hwlYYWYAw==} + /@typescript-eslint/utils/5.51.0_7kw3g6rralp5ps6mg3uyzz6azm: + resolution: {integrity: sha512-76qs+5KWcaatmwtwsDJvBk4H76RJQBFe+Gext0EfJdC3Vd2kpY2Pf//OHHzHp84Ciw0/rYoGTDnIAr3uWhhJYw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.50.0 - '@typescript-eslint/types': 5.50.0 - '@typescript-eslint/typescript-estree': 5.50.0_typescript@4.9.5 - eslint: 8.33.0 + '@typescript-eslint/scope-manager': 5.51.0 + '@typescript-eslint/types': 5.51.0 + '@typescript-eslint/typescript-estree': 5.51.0_typescript@4.9.5 + eslint: 8.34.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@8.33.0 + eslint-utils: 3.0.0_eslint@8.34.0 semver: 7.3.8 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys/5.50.0: - resolution: {integrity: sha512-cdMeD9HGu6EXIeGOh2yVW6oGf9wq8asBgZx7nsR/D36gTfQ0odE5kcRYe5M81vjEFAcPeugXrHg78Imu55F6gg==} + /@typescript-eslint/visitor-keys/5.51.0: + resolution: {integrity: sha512-Oh2+eTdjHjOFjKA27sxESlA87YPSOJafGCR0md5oeMdh1ZcCfAGCIOL216uTBAkAIptvLIfKQhl7lHxMJet4GQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.50.0 + '@typescript-eslint/types': 5.51.0 eslint-visitor-keys: 3.3.0 dev: true @@ -3749,7 +3842,7 @@ packages: '@babel/plugin-transform-react-jsx-source': 7.19.6_@babel+core@7.20.12 magic-string: 0.27.0 react-refresh: 0.14.0 - vite: 4.1.1_@types+node@18.11.18 + vite: 4.1.1_@types+node@18.13.0 transitivePeerDependencies: - supports-color dev: true @@ -3855,7 +3948,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 es-abstract: 1.21.1 get-intrinsic: 1.2.0 is-string: 1.0.7 @@ -3871,7 +3964,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 es-abstract: 1.21.1 es-shim-unscopables: 1.0.0 dev: true @@ -3881,7 +3974,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 es-abstract: 1.21.1 es-shim-unscopables: 1.0.0 dev: true @@ -3890,7 +3983,7 @@ packages: resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 es-abstract: 1.21.1 es-shim-unscopables: 1.0.0 get-intrinsic: 1.2.0 @@ -3913,7 +4006,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.21.5 - caniuse-lite: 1.0.30001450 + caniuse-lite: 1.0.30001451 fraction.js: 4.2.0 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -3997,9 +4090,9 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001450 - electron-to-chromium: 1.4.286 - node-releases: 2.0.9 + caniuse-lite: 1.0.30001451 + electron-to-chromium: 1.4.295 + node-releases: 2.0.10 update-browserslist-db: 1.0.10_browserslist@4.21.5 dev: true @@ -4027,8 +4120,8 @@ packages: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - /caniuse-lite/1.0.30001450: - resolution: {integrity: sha512-qMBmvmQmFXaSxexkjjfMvD5rnDL0+m+dUMZKoDYsGG8iZN29RuYh9eRoMvKsT6uMAWlyUUGDEQGJJYjzCIO9ew==} + /caniuse-lite/1.0.30001451: + resolution: {integrity: sha512-XY7UbUpGRatZzoRft//5xOa69/1iGJRBlrieH6QYrkKLIFn3m7OVEJ81dSrKoy2BnKsdbX5cLrOispZNYo9v2w==} dev: true /chalk/2.4.2: @@ -4074,7 +4167,7 @@ packages: /class-validator/0.14.0: resolution: {integrity: sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==} dependencies: - '@types/validator': 13.7.11 + '@types/validator': 13.7.12 libphonenumber-js: 1.10.19 validator: 13.9.0 dev: false @@ -4090,10 +4183,6 @@ packages: typescript: 4.9.5 dev: false - /client-only/0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - dev: false - /cliui/8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -4108,6 +4197,20 @@ packages: engines: {node: '>=6'} dev: false + /cmdk/0.1.22_5ndqzdd6t4rivxsukjv3i3ak2q: + resolution: {integrity: sha512-F0ffliBO/U6SXKGRud9AjsNuINvfF+d9BVUgi/y2+v3TSBHVOmIXl43CWLEyEEIOwc2DTnlXvIQenhGAEpwW0Q==} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + '@radix-ui/react-dialog': 1.0.0_5ndqzdd6t4rivxsukjv3i3ak2q + command-score: 0.1.2 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + transitivePeerDependencies: + - '@types/react' + dev: false + /color-convert/1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: @@ -4128,6 +4231,10 @@ packages: /color-name/1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + /command-score/0.1.2: + resolution: {integrity: sha512-VtDvQpIJBvBatnONUsPzXYFVKQQAhuf3XTNOAsdBxCNO/QCtUUd8LSgjn0GVarBkCad6aJCZfXgrjYbl/KRr7w==} + dev: false + /commander/2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -4288,8 +4395,8 @@ packages: engines: {node: '>=8'} dev: true - /define-properties/1.1.4: - resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} + /define-properties/1.2.0: + resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} dependencies: has-property-descriptors: 1.0.0 @@ -4313,7 +4420,7 @@ packages: dependencies: acorn-node: 1.8.2 defined: 1.0.1 - minimist: 1.2.7 + minimist: 1.2.8 /didyoumean/1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -4367,8 +4474,8 @@ packages: jake: 10.8.5 dev: true - /electron-to-chromium/1.4.286: - resolution: {integrity: sha512-Vp3CVhmYpgf4iXNKAucoQUDcCrBQX3XLBtwgFqP9BUXuucgvAV9zWp1kYU7LL9j4++s9O+12cb3wMtN4SJy6UQ==} + /electron-to-chromium/1.4.295: + resolution: {integrity: sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw==} dev: true /emoji-regex/8.0.0: @@ -4411,7 +4518,7 @@ packages: has-property-descriptors: 1.0.0 has-proto: 1.0.1 has-symbols: 1.0.3 - internal-slot: 1.0.4 + internal-slot: 1.0.5 is-array-buffer: 3.0.1 is-callable: 1.2.7 is-negative-zero: 2.0.2 @@ -4515,13 +4622,13 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-prettier/8.6.0_eslint@8.33.0: + /eslint-config-prettier/8.6.0_eslint@8.34.0: resolution: {integrity: sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.33.0 + eslint: 8.34.0 dev: true /eslint-import-resolver-node/0.3.7: @@ -4534,7 +4641,7 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript/3.5.3_ohdts44xlqyeyrlje4qnefqeay: + /eslint-import-resolver-typescript/3.5.3_mvgyw3chnqkp6sgfmmtihyjpnm: resolution: {integrity: sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -4543,9 +4650,9 @@ packages: dependencies: debug: 4.3.4 enhanced-resolve: 5.12.0 - eslint: 8.33.0 - eslint-plugin-import: 2.27.5_nowqz4jutkd4a233czbfk7jsgu - get-tsconfig: 4.3.0 + eslint: 8.34.0 + eslint-plugin-import: 2.27.5_inmo4nrctlhmfx73hzu6aogupa + get-tsconfig: 4.4.0 globby: 13.1.3 is-core-module: 2.11.0 is-glob: 4.0.3 @@ -4554,7 +4661,7 @@ packages: - supports-color dev: true - /eslint-module-utils/2.7.4_4lq3tljpmtdh3elqaianviuctu: + /eslint-module-utils/2.7.4_7d5otxxipfjcaqho6psg7iyp4e: resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} engines: {node: '>=4'} peerDependencies: @@ -4575,16 +4682,16 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.50.0_4vsywjlpuriuw3tl5oq6zy5a64 + '@typescript-eslint/parser': 5.51.0_7kw3g6rralp5ps6mg3uyzz6azm debug: 3.2.7 - eslint: 8.33.0 + eslint: 8.34.0 eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.3_ohdts44xlqyeyrlje4qnefqeay + eslint-import-resolver-typescript: 3.5.3_mvgyw3chnqkp6sgfmmtihyjpnm transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-import/2.27.5_nowqz4jutkd4a233czbfk7jsgu: + /eslint-plugin-import/2.27.5_inmo4nrctlhmfx73hzu6aogupa: resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} peerDependencies: @@ -4594,15 +4701,15 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.50.0_4vsywjlpuriuw3tl5oq6zy5a64 + '@typescript-eslint/parser': 5.51.0_7kw3g6rralp5ps6mg3uyzz6azm array-includes: 3.1.6 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.33.0 + eslint: 8.34.0 eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4_4lq3tljpmtdh3elqaianviuctu + eslint-module-utils: 2.7.4_7d5otxxipfjcaqho6psg7iyp4e has: 1.0.3 is-core-module: 2.11.0 is-glob: 4.0.3 @@ -4617,16 +4724,16 @@ packages: - supports-color dev: true - /eslint-plugin-react-hooks/4.6.0_eslint@8.33.0: + /eslint-plugin-react-hooks/4.6.0_eslint@8.34.0: resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - eslint: 8.33.0 + eslint: 8.34.0 dev: true - /eslint-plugin-react/7.32.2_eslint@8.33.0: + /eslint-plugin-react/7.32.2_eslint@8.34.0: resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} engines: {node: '>=4'} peerDependencies: @@ -4636,7 +4743,7 @@ packages: array.prototype.flatmap: 1.3.1 array.prototype.tosorted: 1.1.1 doctrine: 2.1.0 - eslint: 8.33.0 + eslint: 8.34.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.3 minimatch: 3.1.2 @@ -4666,13 +4773,13 @@ packages: estraverse: 5.3.0 dev: true - /eslint-utils/3.0.0_eslint@8.33.0: + /eslint-utils/3.0.0_eslint@8.34.0: resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: eslint: '>=5' dependencies: - eslint: 8.33.0 + eslint: 8.34.0 eslint-visitor-keys: 2.1.0 dev: true @@ -4686,8 +4793,8 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint/8.33.0: - resolution: {integrity: sha512-WjOpFQgKK8VrCnAtl8We0SUOy/oVZ5NHykyMiagV1M9r8IFpIJX7DduK6n1mpfhlG7T1NLWm2SuD8QB7KFySaA==} + /eslint/8.34.0: + resolution: {integrity: sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: @@ -4702,7 +4809,7 @@ packages: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 - eslint-utils: 3.0.0_eslint@8.33.0 + eslint-utils: 3.0.0_eslint@8.34.0 eslint-visitor-keys: 3.3.0 espree: 9.4.1 esquery: 1.4.0 @@ -4892,7 +4999,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 es-abstract: 1.21.1 functions-have-names: 1.2.3 dev: true @@ -4964,8 +5071,8 @@ packages: get-intrinsic: 1.2.0 dev: true - /get-tsconfig/4.3.0: - resolution: {integrity: sha512-YCcF28IqSay3fqpIu5y3Krg/utCBHBeoflkZyHj/QcqI2nrLPC3ZegS9CmIo+hJb8K7aiGsuUl7PwWVjNG2HQQ==} + /get-tsconfig/4.4.0: + resolution: {integrity: sha512-0Gdjo/9+FzsYhXCEFueo2aY1z1tpXrxWZzP7k8ul9qt1U5o8rYJwTJYmaeHdrVosYIVYkOy2iwCJ9FdpocJhPQ==} dev: true /gl-matrix/3.4.3: @@ -5020,7 +5127,7 @@ packages: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} dependencies: - define-properties: 1.1.4 + define-properties: 1.2.0 dev: true /globalyzer/0.1.0: @@ -5171,8 +5278,8 @@ packages: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: false - /internal-slot/1.0.4: - resolution: {integrity: sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==} + /internal-slot/1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.2.0 @@ -5398,7 +5505,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.11.18 + '@types/node': 18.13.0 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -5452,7 +5559,7 @@ packages: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true dependencies: - minimist: 1.2.7 + minimist: 1.2.8 dev: true /json5/2.2.3: @@ -5565,8 +5672,8 @@ packages: yallist: 4.0.0 dev: true - /lucide-react/0.109.0_react@18.2.0: - resolution: {integrity: sha512-CXBQnHSd/EHaSN+Bs9T73jgCbjb/0IVykFG7NvWjk+kG2skiEgXeIIJjpkta2DVSORy8u6RXN2WZuryiuNmC0Q==} + /lucide-react/0.112.0_react@18.2.0: + resolution: {integrity: sha512-+glJwNv7bv6I6WOb8RRbaVHJdaoaV/KWV44ag/EpAoSsWxSUML5RP8hA+9O188RoEv9ZFMx1l+7HPwTDnt0L/Q==} peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 dependencies: @@ -5649,8 +5756,8 @@ packages: brace-expansion: 2.0.1 dev: true - /minimist/1.2.7: - resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} + /minimist/1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} /minipass/3.3.6: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} @@ -5659,8 +5766,8 @@ packages: yallist: 4.0.0 dev: true - /minipass/4.0.1: - resolution: {integrity: sha512-V9esFpNbK0arbN3fm2sxDKqMYgIp7XtVdE4Esj+PE4Qaaxdg1wIw48ITQIOn1sc8xXSmUviVL3cyjMqPlrVkiA==} + /minipass/4.0.3: + resolution: {integrity: sha512-OW2r4sQ0sI+z5ckEt5c1Tri4xTgZwYDxpE54eqWlQloQRoWtXjqt9udJ5Z4dSv7wK+nfFI7FRXyCpBSft+gpFw==} engines: {node: '>=8'} dev: true @@ -5703,8 +5810,8 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /node-releases/2.0.9: - resolution: {integrity: sha512-2xfmOrRkGogbTK9R6Leda0DGiXeY3p2NJpy4+gNCffdUvV6mdEJnaDEic1i3Ec2djAo8jWYoJMR5PB0MSMpxUA==} + /node-releases/2.0.10: + resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} dev: true /normalize-path/3.0.0: @@ -5733,7 +5840,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 /object-keys/1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} @@ -5744,7 +5851,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 has-symbols: 1.0.3 object-keys: 1.1.1 dev: true @@ -5754,7 +5861,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 es-abstract: 1.21.1 dev: true @@ -5763,14 +5870,14 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 es-abstract: 1.21.1 dev: true /object.hasown/1.1.2: resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} dependencies: - define-properties: 1.1.4 + define-properties: 1.2.0 es-abstract: 1.21.1 dev: true @@ -5779,7 +5886,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 es-abstract: 1.21.1 dev: true @@ -5789,8 +5896,8 @@ packages: wrappy: 1.0.2 dev: true - /open/8.4.0: - resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==} + /open/8.4.1: + resolution: {integrity: sha512-/4b7qZNhv6Uhd7jjnREh1NjnPxlTq+XNWPG88Ydkj5AILcA5m3ajvcg57pB24EQjKv0dK62XnDqk9c/hkIG5Kg==} engines: {node: '>=12'} dependencies: define-lazy-prop: 2.0.0 @@ -5907,11 +6014,11 @@ packages: read-cache: 1.0.0 resolve: 1.22.1 - /postcss-js/4.0.0_postcss@8.4.21: - resolution: {integrity: sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==} + /postcss-js/4.0.1_postcss@8.4.21: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: - postcss: ^8.3.3 + postcss: ^8.4.21 dependencies: camelcase-css: 2.0.1 postcss: 8.4.21 @@ -5976,7 +6083,7 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier-plugin-tailwindcss/0.2.2_prettier@2.8.3: + /prettier-plugin-tailwindcss/0.2.2_prettier@2.8.4: resolution: {integrity: sha512-5RjUbWRe305pUpc48MosoIp6uxZvZxrM6GyOgsbGLTce+ehePKNm7ziW2dLG2air9aXbGuXlHVSQQw4Lbosq3w==} engines: {node: '>=12.17.0'} peerDependencies: @@ -6025,11 +6132,11 @@ packages: prettier-plugin-twig-melody: optional: true dependencies: - prettier: 2.8.3 + prettier: 2.8.4 dev: true - /prettier/2.8.3: - resolution: {integrity: sha512-tJ/oJ4amDihPoufT5sM0Z1SKEuKay8LfVAMlbbhnnkvt6BUserZylqo2PN+p9KeljLr0OHa2rXHU1T8reeoTrw==} + /prettier/2.8.4: + resolution: {integrity: sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==} engines: {node: '>=10.13.0'} hasBin: true dev: true @@ -6039,8 +6146,8 @@ packages: engines: {node: '>=6'} dev: true - /pretty-bytes/6.0.0: - resolution: {integrity: sha512-6UqkYefdogmzqAZWzJ7laYeJnaXDy2/J+ZqiiMtS7t7OfpXWTlaeGMwX8U6EFvPV/YWWEKRkS8hKS4k60WHTOg==} + /pretty-bytes/6.1.0: + resolution: {integrity: sha512-Rk753HI8f4uivXi4ZCIYdhmG1V+WKzvRMg/X+M42a6t7D07RcmopXJMDNk6N++7Bl75URRGsb40ruvg7Hcp2wQ==} engines: {node: ^14.13.1 || >=16.0.0} dev: true @@ -6123,8 +6230,8 @@ packages: scheduler: 0.23.0 dev: false - /react-hook-form/7.43.0_react@18.2.0: - resolution: {integrity: sha512-/rVEz7T0gLdSFwPqutJ1kn2e0sQNyb9ci/hmwEYr2YG0KF/LSuRLvNrf9QWJM+gj88CjDpDW5Bh/1AD7B2+z9Q==} + /react-hook-form/7.43.1_react@18.2.0: + resolution: {integrity: sha512-+s3+s8LLytRMriwwuSqeLStVjRXFGxgjjx2jED7Z+wz1J/88vpxieRQGvJVvzrzVxshZ0BRuocFERb779m2kNg==} engines: {node: '>=12.22.0'} peerDependencies: react: ^16.8.0 || ^17 || ^18 @@ -6179,6 +6286,25 @@ packages: tslib: 2.5.0 dev: false + /react-remove-scroll/2.5.4_3stiutgnnbnfnf3uowm5cip22i: + resolution: {integrity: sha512-xGVKJJr0SJGQVirVFAUZ2k1QLyO6m+2fy0l8Qawbp5Jgrv3DeLalrfMNBFSlmz5kriGGzsVBtGVnf4pTKIhhWA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.0.27 + react: 18.2.0 + react-remove-scroll-bar: 2.3.4_3stiutgnnbnfnf3uowm5cip22i + react-style-singleton: 2.2.1_3stiutgnnbnfnf3uowm5cip22i + tslib: 2.5.0 + use-callback-ref: 1.3.0_3stiutgnnbnfnf3uowm5cip22i + use-sidecar: 1.1.2_3stiutgnnbnfnf3uowm5cip22i + dev: false + /react-remove-scroll/2.5.5_3stiutgnnbnfnf3uowm5cip22i: resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} engines: {node: '>=10'} @@ -6288,7 +6414,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 functions-have-names: 1.2.3 /regexpp/3.2.0: @@ -6296,22 +6422,18 @@ packages: engines: {node: '>=8'} dev: true - /regexpu-core/5.2.2: - resolution: {integrity: sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==} + /regexpu-core/5.3.0: + resolution: {integrity: sha512-ZdhUQlng0RoscyW7jADnUZ25F5eVtHdMyXSb2PiwafvteRAOJUjFoUPEYZSIfP99fBIs3maLIRfpEddT78wAAQ==} engines: {node: '>=4'} dependencies: + '@babel/regjsgen': 0.8.0 regenerate: 1.4.2 regenerate-unicode-properties: 10.1.0 - regjsgen: 0.7.1 regjsparser: 0.9.1 unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.1.0 dev: true - /regjsgen/0.7.1: - resolution: {integrity: sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==} - dev: true - /regjsparser/0.9.1: resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} hasBin: true @@ -6399,7 +6521,7 @@ packages: rollup: optional: true dependencies: - open: 8.4.0 + open: 8.4.1 picomatch: 2.3.1 source-map: 0.7.4 yargs: 17.6.2 @@ -6413,8 +6535,8 @@ packages: fsevents: 2.3.2 dev: true - /rollup/3.13.0: - resolution: {integrity: sha512-HJwQtrXAc0AmyDohTJ/2c+Bx/sWPScJLlAUJ1kuD7rAkCro8Cr2SnVB2gVYBiSLxpgD2kZ24jbyXtG++GumrYQ==} + /rollup/3.15.0: + resolution: {integrity: sha512-F9hrCAhnp5/zx/7HYmftvsNBkMfLfk/dXUh73hPSM2E3CRgap65orDNJbLetoiUFwSAk6iHPLvBrZ5iHYvzqsg==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: @@ -6551,7 +6673,7 @@ packages: resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} engines: {node: '>= 0.4'} dependencies: - internal-slot: 1.0.4 + internal-slot: 1.0.5 dev: true /stream-shift/1.0.1: @@ -6571,11 +6693,11 @@ packages: resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 es-abstract: 1.21.1 get-intrinsic: 1.2.0 has-symbols: 1.0.3 - internal-slot: 1.0.4 + internal-slot: 1.0.5 regexp.prototype.flags: 1.4.3 side-channel: 1.0.4 dev: true @@ -6584,7 +6706,7 @@ packages: resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 es-abstract: 1.21.1 dev: true @@ -6592,7 +6714,7 @@ packages: resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 es-abstract: 1.21.1 dev: true @@ -6676,20 +6798,20 @@ packages: tslib: 2.5.0 dev: true - /tailwind-merge/1.9.0: - resolution: {integrity: sha512-coziXxViLHbVtFvD1+jwSu+UmDJSFX4dhj9ZuqHCuhTzu9Wk5wMedAz5AVY3uUYw95TaO7NwgUS/dLGcWvtgqw==} + /tailwind-merge/1.9.1: + resolution: {integrity: sha512-ED9MkiUHlmfh58EC1xHRqXcH1IQyRtmDP0AmXlugYkP2tvfu7ejtjFEHJLJt93mQ7ZJkcqSIgm9M394bq5vOJg==} dev: false - /tailwindcss-animate/1.0.5_tailwindcss@3.2.4: + /tailwindcss-animate/1.0.5_tailwindcss@3.2.6: resolution: {integrity: sha512-UU3qrOJ4lFQABY+MVADmBm+0KW3xZyhMdRvejwtXqYOL7YjHYxmuREFAZdmVG5LPe5E9CAst846SLC4j5I3dcw==} peerDependencies: tailwindcss: '>=3.0.0 || insiders' dependencies: - tailwindcss: 3.2.4_postcss@8.4.21 + tailwindcss: 3.2.6_postcss@8.4.21 dev: false - /tailwindcss/3.2.4_postcss@8.4.21: - resolution: {integrity: sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==} + /tailwindcss/3.2.6_postcss@8.4.21: + resolution: {integrity: sha512-BfgQWZrtqowOQMC2bwaSNe7xcIjdDEgixWGYOd6AL0CbKHJlvhfdbINeAW76l1sO+1ov/MJ93ODJ9yluRituIw==} engines: {node: '>=12.13.0'} hasBin: true peerDependencies: @@ -6711,7 +6833,7 @@ packages: picocolors: 1.0.0 postcss: 8.4.21 postcss-import: 14.1.0_postcss@8.4.21 - postcss-js: 4.0.0_postcss@8.4.21 + postcss-js: 4.0.1_postcss@8.4.21 postcss-load-config: 3.1.4_postcss@8.4.21 postcss-nested: 6.0.0_postcss@8.4.21 postcss-selector-parser: 6.0.11 @@ -6732,7 +6854,7 @@ packages: dependencies: chownr: 2.0.0 fs-minipass: 2.1.0 - minipass: 4.0.1 + minipass: 4.0.3 minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 @@ -6849,7 +6971,7 @@ packages: dependencies: '@types/json5': 0.0.29 json5: 1.0.2 - minimist: 1.2.7 + minimist: 1.2.8 strip-bom: 3.0.0 dev: true @@ -6860,8 +6982,8 @@ packages: /tslib/2.5.0: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} - /tslog/4.7.1: - resolution: {integrity: sha512-Ez90j4FKCUp9bBlgPq96aYDUbXRIOxz6Vxn/4Iw2/IiVxLB5wsUVkWfeK4oqdRMoW8qBVJz9oIT+ysjfyIRufw==} + /tslog/4.7.2: + resolution: {integrity: sha512-NZCunFmbQK25tt+Egv28MLcmbo8M1HgUy6X2hdVbgrAlcR7zRGvPmM8SnpoljXZ48zHRRYWp9vYIHFHKWsR4HA==} engines: {node: '>=16'} dev: false @@ -7050,20 +7172,20 @@ packages: peerDependencies: vite: '>= 2.7' dependencies: - vite: 4.1.1_@types+node@18.11.18 + vite: 4.1.1_@types+node@18.13.0 dev: true - /vite-plugin-pwa/0.14.1_vite@4.1.1: - resolution: {integrity: sha512-5zx7yhQ8RTLwV71+GA9YsQQ63ALKG8XXIMqRJDdZkR8ZYftFcRgnzM7wOWmQZ/DATspyhPih5wCdcZnAIsM+mA==} + /vite-plugin-pwa/0.14.4_vite@4.1.1: + resolution: {integrity: sha512-M7Ct0so8OlouMkTWgXnl8W1xU95glITSKIe7qswZf1tniAstO2idElGCnsrTJ5NPNSx1XqfTCOUj8j94S6FD7Q==} peerDependencies: vite: ^3.1.0 || ^4.0.0 dependencies: - '@rollup/plugin-replace': 5.0.2_rollup@3.13.0 + '@rollup/plugin-replace': 5.0.2_rollup@3.15.0 debug: 4.3.4 fast-glob: 3.2.12 - pretty-bytes: 6.0.0 - rollup: 3.13.0 - vite: 4.1.1_@types+node@18.11.18 + pretty-bytes: 6.1.0 + rollup: 3.15.0 + vite: 4.1.1_@types+node@18.13.0 workbox-build: 6.5.4 workbox-window: 6.5.4 transitivePeerDependencies: @@ -7071,7 +7193,7 @@ packages: - supports-color dev: true - /vite/4.1.1_@types+node@18.11.18: + /vite/4.1.1_@types+node@18.13.0: resolution: {integrity: sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -7096,11 +7218,11 @@ packages: terser: optional: true dependencies: - '@types/node': 18.11.18 + '@types/node': 18.13.0 esbuild: 0.16.17 postcss: 8.4.21 resolve: 1.22.1 - rollup: 3.13.0 + rollup: 3.15.0 optionalDependencies: fsevents: 2.3.2 dev: true @@ -7379,8 +7501,8 @@ packages: engines: {node: '>=10'} dev: true - /zustand/4.3.2_immer@9.0.19+react@18.2.0: - resolution: {integrity: sha512-rd4haDmlwMTVWVqwvgy00ny8rtti/klRoZjFbL/MAcDnmD5qSw/RZc+Vddstdv90M5Lv6RPgWvm1Hivyn0QgJw==} + /zustand/4.3.3_immer@9.0.19+react@18.2.0: + resolution: {integrity: sha512-x2jXq8S0kfLGNwGh87nhRfEc2eZy37tSatpSoSIN+O6HIaBhgQHSONV/F9VNrNcBcKQu/E80K1DeHDYQC/zCrQ==} engines: {node: '>=12.7.0'} peerDependencies: immer: '>=9.0' diff --git a/src/App.tsx b/src/App.tsx index 0f97b7de..2f91c9c3 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -2,13 +2,12 @@ import { MapProvider } from "react-map-gl"; import { useAppStore } from "@core/stores/appStore.js"; import { DeviceWrapper } from "@app/DeviceWrapper.js"; import { PageRouter } from "@app/PageRouter.js"; -import { CommandPalette } from "@components/CommandPalette/Index.js"; +import { CommandPalette } from "@components/CommandPalette.js"; import { DeviceSelector } from "@components/DeviceSelector.js"; import { DialogManager } from "@components/Dialog/DialogManager.js"; -import { NewDevice } from "@components/NewDevice.js"; +import { Dashboard } from "@app/components/Dashboard.js"; import { useDeviceStore } from "@core/stores/deviceStore.js"; import { ThemeController } from "@components/generic/ThemeController.js"; -import { Menu } from "./components/Menu.js"; import { NewDeviceDialog } from "./components/Dialog/NewDevice.js"; export const App = (): JSX.Element => { @@ -28,8 +27,7 @@ export const App = (): JSX.Element => { /> -
- +
@@ -40,7 +38,7 @@ export const App = (): JSX.Element => {
) : ( - + )}
diff --git a/src/components/CommandPalette/Index.tsx b/src/components/CommandPalette.tsx similarity index 66% rename from src/components/CommandPalette/Index.tsx rename to src/components/CommandPalette.tsx index 747f0887..b53b1df8 100644 --- a/src/components/CommandPalette/Index.tsx +++ b/src/components/CommandPalette.tsx @@ -1,14 +1,8 @@ -import { ComponentType, Fragment, SVGProps, useEffect, useState } from "react"; -import { useDevice } from "@core/stores/deviceStore.js"; +import { useEffect } from "react"; import { useAppStore } from "@core/stores/appStore.js"; -import { useDeviceStore } from "@core/stores/deviceStore.js"; -import { GroupView } from "@components/CommandPalette/GroupView.js"; -import { NoResults } from "@components/CommandPalette/NoResults.js"; -import { PaletteTransition } from "@components/CommandPalette/PaletteTransition.js"; -import { SearchBox } from "@components/CommandPalette/SearchBox.js"; -import { SearchResult } from "@components/CommandPalette/SearchResult.js"; +import { useDevice, useDeviceStore } from "@core/stores/deviceStore.js"; +import { useCommandState } from "cmdk"; import { Hashicon } from "@emeraldpay/hashicon-react"; -import { Combobox, Dialog, Transition } from "@headlessui/react"; import { LucideIcon, LinkIcon, @@ -18,7 +12,6 @@ import { PlusIcon, PowerIcon, EraserIcon, - ImportIcon, RefreshCwIcon, FactoryIcon, ArrowLeftRightIcon, @@ -34,8 +27,14 @@ import { XCircleIcon, BoxSelectIcon } from "lucide-react"; -import { Blur } from "@components/generic/Blur.js"; -import { ThemeController } from "@components/generic/ThemeController.js"; +import { + CommandDialog, + CommandEmpty, + CommandGroup, + CommandInput, + CommandItem, + CommandList +} from "@components/UI/Command.js"; export interface Group { label: string; @@ -57,7 +56,6 @@ export interface SubItem { } export const CommandPalette = (): JSX.Element => { - const [query, setQuery] = useState(""); const { commandPaletteOpen, setCommandPaletteOpen, @@ -69,7 +67,6 @@ export const CommandPalette = (): JSX.Element => { setAccent } = useAppStore(); const { getDevices } = useDeviceStore(); - const { setDialogOpen, setActivePage, connection } = useDevice(); const groups: Group[] = [ @@ -344,102 +341,72 @@ export const CommandPalette = (): JSX.Element => { } ]; - const handleKeydown = (e: KeyboardEvent) => { - if (e.key === "k" && (e.metaKey || e.ctrlKey)) { - e.preventDefault(); - setCommandPaletteOpen(true); - } - }; - useEffect(() => { + const handleKeydown = (e: KeyboardEvent) => { + if (e.key === "k" && (e.metaKey || e.ctrlKey)) { + e.preventDefault(); + setCommandPaletteOpen(true); + } + }; + window.addEventListener("keydown", handleKeydown); return () => window.removeEventListener("keydown", handleKeydown); }, []); - const filtered = - query === "" - ? [] - : groups - .map((group) => { - return { - ...group, - commands: group.commands.filter((command) => { - const nameIncludes = `${group.label} ${command.label}` - .toLowerCase() - .includes(query.toLowerCase()); - - const tagsInclude = ( - command.tags - ?.map((t) => t.includes(query.toLowerCase())) - .filter(Boolean) ?? [] - ).length; - - const subItemsInclude = ( - command.subItems - ?.map((s) => - s.label.toLowerCase().includes(query.toLowerCase()) - ) - .filter(Boolean) ?? [] - ).length; - return nameIncludes || tagsInclude || subItemsInclude; - }) - }; - }) - .filter((group) => group.commands.length); - return ( - setQuery("")} - appear + - - - - - - - onChange={(input) => { - if (typeof input === "string") { - setQuery(input); - } else if (input.action) { + + + No results found. + {groups.map((group) => ( + + {group.commands.map((command) => ( + <> + { + command.action && command.action(); setCommandPaletteOpen(false); - input.action(); - } - }} - > - + }} + > + + {command.label} + + {command.subItems && + command.subItems.map((subItem) => ( + + ))} + + ))} + + ))} + + + ); +}; - {query === "" || filtered.length > 0 ? ( - -
  • -
      - {filtered.map((group, index) => ( - - ))} - {query === "" && - groups.map((group, index) => ( - - ))} -
    -
  • -
    - ) : ( - query !== "" && filtered.length === 0 && - )} - - - - - -
    +const SubItem = ({ + label, + icon, + action +}: { + label: string; + icon: React.ReactNode; + action: () => void; +}) => { + const search = useCommandState((state) => state.search); + if (!search) return null; + + return ( + + {icon} + {label} + ); }; diff --git a/src/components/CommandPalette/GroupView.tsx b/src/components/CommandPalette/GroupView.tsx deleted file mode 100644 index c639819e..00000000 --- a/src/components/CommandPalette/GroupView.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import type { Group } from "@components/CommandPalette/Index.js"; -import { Combobox } from "@headlessui/react"; -import { ChevronRightIcon } from "lucide-react"; - -export interface GroupViewProps { - group: Group; -} - -export const GroupView = ({ group }: GroupViewProps): JSX.Element => { - return ( - - `flex cursor-default select-none items-center rounded-md px-3 py-2 ${ - active ? "bg-backgroundPrimary text-textPrimary" : "" - }` - } - > - {({ active }) => ( - <> - - {group.label} - {active && ( - - )} - - )} - - ); -}; diff --git a/src/components/CommandPalette/NoResults.tsx b/src/components/CommandPalette/NoResults.tsx deleted file mode 100644 index 04c0f41a..00000000 --- a/src/components/CommandPalette/NoResults.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { Mono } from "@components/generic/Mono.js"; -import { TerminalSquareIcon } from "lucide-react"; - -export const NoResults = (): JSX.Element => { - return ( -
    - - - Query does not match any avaliable commands - -
    - ); -}; diff --git a/src/components/CommandPalette/PaletteTransition.tsx b/src/components/CommandPalette/PaletteTransition.tsx deleted file mode 100644 index edb64158..00000000 --- a/src/components/CommandPalette/PaletteTransition.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { Fragment, ReactNode } from "react"; -import { Transition } from "@headlessui/react"; - -export interface PaletteTransitionProps { - children: ReactNode; -} - -export const PaletteTransition = ({ - children -}: PaletteTransitionProps): JSX.Element => { - return ( - <> - -
    - - -
    - - {children} - -
    - - ); -}; diff --git a/src/components/CommandPalette/SearchBox.tsx b/src/components/CommandPalette/SearchBox.tsx deleted file mode 100644 index 8ad7393c..00000000 --- a/src/components/CommandPalette/SearchBox.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { Combobox } from "@headlessui/react"; -import { SearchIcon } from "lucide-react"; - -export interface SearchBoxProps { - setQuery: (query: string) => void; -} - -export const SearchBox = ({ setQuery }: SearchBoxProps): JSX.Element => { - return ( -
    - - setQuery(event.target.value)} - /> -
    - ); -}; diff --git a/src/components/CommandPalette/SearchResult.tsx b/src/components/CommandPalette/SearchResult.tsx deleted file mode 100644 index 6782a17d..00000000 --- a/src/components/CommandPalette/SearchResult.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import type { Group } from "@components/CommandPalette/Index.js"; -import { Combobox } from "@headlessui/react"; -import { ChevronRightIcon } from "lucide-react"; - -export interface SearchResultProps { - group: Group; -} - -export const SearchResult = ({ group }: SearchResultProps): JSX.Element => { - return ( -
    -
    - - {group.label} -
    - {group.commands.map((command, index) => ( -
    - - `mr-2 ml-4 flex cursor-pointer select-none items-center rounded-md px-3 py-1 ${ - active ? "bg-backgroundPrimary text-gray-900" : "" - }` - } - > - {({ active }) => ( - <> - - {command.label} - {active && ( - - )} - - )} - - {command.subItems && ( -
    - {command.subItems?.map((item, index) => ( - - `mx-2 flex cursor-pointer select-none items-center rounded-md px-3 py-1 ${ - active - ? "bg-backgroundPrimary bg-opacity-5 text-gray-900" - : "" - }` - } - > - {({ active }) => ( - <> - {item.icon} - {item.label} - {active && ( - - )} - - )} - - ))} -
    - )} -
    - ))} -
    - ); -}; diff --git a/src/components/Dashboard.tsx b/src/components/Dashboard.tsx new file mode 100644 index 00000000..c6afe68c --- /dev/null +++ b/src/components/Dashboard.tsx @@ -0,0 +1,104 @@ +import { useAppStore } from "@app/core/stores/appStore.js"; +import { Button } from "@components/UI/Button.js"; +import { + PlusIcon, + ListPlusIcon, + UsersIcon, + MapPinIcon, + CalendarIcon, + BluetoothIcon, + UsbIcon, + NetworkIcon +} from "lucide-react"; +import { Subtle } from "./UI/Typography/Subtle.js"; +import { H3 } from "./UI/Typography/H3.js"; +import { useDeviceStore } from "@app/core/stores/deviceStore.js"; +import { useMemo } from "react"; +import { Separator } from "./UI/Seperator.js"; + +export const Dashboard = () => { + const { setConnectDialogOpen } = useAppStore(); + const { getDevices } = useDeviceStore(); + + const devices = useMemo(() => getDevices(), [getDevices]); + + return ( +
    +
    +
    +

    Connected Devices

    + Manage, connect and disconnect devices +
    +
    + + + +
    + {devices.length ? ( +
      + {devices.map((device) => { + return ( +
    • +
      +
      +

      + {device.nodes.filter( + (n) => n.data.num === device.hardware.myNodeNum + )[0]?.data.user?.longName ?? "UNK"} +

      +
      + {device.connection?.connType === "ble" && ( + <> + + BLE + + )} + {device.connection?.connType === "serial" && ( + <> + + Serial + + )} + {device.connection?.connType === "http" && ( + <> + + Network + + )} +
      +
      +
      +
      +
      +
      +
      +
    • + ); + })} +
    + ) : ( +
    + +

    No Devices

    + Connect atleast one device to get started + +
    + )} +
    +
    + ); +}; diff --git a/src/components/DeviceSelector.tsx b/src/components/DeviceSelector.tsx index 31669190..7d0a8acf 100644 --- a/src/components/DeviceSelector.tsx +++ b/src/components/DeviceSelector.tsx @@ -11,7 +11,6 @@ import { TerminalIcon } from "lucide-react"; import { Separator } from "./UI/Seperator.js"; -import { cn } from "@app/core/utils/cn.js"; import { Code } from "./UI/Typography/Code.js"; import { SidebarButton } from "./SidebarButton.js"; @@ -27,10 +26,15 @@ export const DeviceSelector = (): JSX.Element => { } = useAppStore(); return ( -
    diff --git a/src/components/PageComponents/Messages/NewLocationMessage.tsx b/src/components/PageComponents/Messages/NewLocationMessage.tsx index 97b9865f..2d5e2ceb 100644 --- a/src/components/PageComponents/Messages/NewLocationMessage.tsx +++ b/src/components/PageComponents/Messages/NewLocationMessage.tsx @@ -1,8 +1,6 @@ import { Input } from "@components/form/Input.js"; -import { Select } from "@components/form/Select.js"; -import { Button } from "@components/form/Button.js"; +import { Button } from "@components/UI/Button.js"; import { useDevice } from "@core/stores/deviceStore.js"; -import { renderOptions } from "@core/utils/selectEnumOptions.js"; import { Protobuf } from "@meshtastic/meshtasticjs"; enum LocationType { @@ -23,9 +21,9 @@ export const NewLocationMessage = (): JSX.Element => { > - {renderOptions(LocationType)} - + */} +
    +
    +
    + + {myNode?.data.user?.shortName ?? "UNK"} + + {myNode?.data.user?.longName ?? "UNK"}
    +
    -
    + {pages.map((link) => ( - { setActivePage(link.page); }} + active={link.page === activePage} /> ))} - {children} -
    + + {children}
    ); }; diff --git a/src/components/Topbar.tsx b/src/components/Topbar.tsx index 28d6baf7..a39291b8 100644 --- a/src/components/Topbar.tsx +++ b/src/components/Topbar.tsx @@ -1,7 +1,7 @@ import { LucideIcon, AlignLeftIcon } from "lucide-react"; export interface PageLayoutProps { - title: string; + label: string; children: React.ReactNode; actions?: { icon: LucideIcon; @@ -10,26 +10,24 @@ export interface PageLayoutProps { } export const PageLayout = ({ - title, + label: title, actions, children }: PageLayoutProps): JSX.Element => { return (
    -
    +
    - - {title} - + {title}
    {actions?.map((action) => ( diff --git a/src/components/UI/Command.tsx b/src/components/UI/Command.tsx new file mode 100644 index 00000000..abd0fed1 --- /dev/null +++ b/src/components/UI/Command.tsx @@ -0,0 +1,156 @@ +import * as React from "react"; +import type { DialogProps } from "@radix-ui/react-dialog"; +import { Command as CommandPrimitive } from "cmdk"; +import { Search } from "lucide-react"; + +import { cn } from "@core/utils/cn.js"; +import { Dialog, DialogContent } from "@components/UI/Dialog.js"; + +const Command = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +Command.displayName = CommandPrimitive.displayName; + +interface CommandDialogProps extends DialogProps {} + +const CommandDialog = ({ children, ...props }: CommandDialogProps) => { + return ( + + + + {children} + + + + ); +}; + +const CommandInput = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( +
    + + +
    +)); + +CommandInput.displayName = CommandPrimitive.Input.displayName; + +const CommandList = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); + +CommandList.displayName = CommandPrimitive.List.displayName; + +const CommandEmpty = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>((props, ref) => ( + +)); + +CommandEmpty.displayName = CommandPrimitive.Empty.displayName; + +const CommandGroup = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); + +CommandGroup.displayName = CommandPrimitive.Group.displayName; + +const CommandSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +CommandSeparator.displayName = CommandPrimitive.Separator.displayName; + +const CommandItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); + +CommandItem.displayName = CommandPrimitive.Item.displayName; + +const CommandShortcut = ({ + className, + ...props +}: React.HTMLAttributes) => { + return ( + + ); +}; +CommandShortcut.displayName = "CommandShortcut"; + +export { + Command, + CommandDialog, + CommandInput, + CommandList, + CommandEmpty, + CommandGroup, + CommandItem, + CommandShortcut, + CommandSeparator +}; diff --git a/src/components/UI/Input.tsx b/src/components/UI/Input.tsx new file mode 100644 index 00000000..cd28433b --- /dev/null +++ b/src/components/UI/Input.tsx @@ -0,0 +1,24 @@ +import * as React from "react"; + +import { cn } from "@core/utils/cn.js"; + +export interface InputProps + extends React.InputHTMLAttributes {} + +const Input = React.forwardRef( + ({ className, ...props }, ref) => { + return ( + + ); + } +); +Input.displayName = "Input"; + +export { Input }; diff --git a/src/components/UI/Sidebar/SidebarItem.tsx b/src/components/UI/Sidebar/SidebarItem.tsx deleted file mode 100644 index 66a5d4a4..00000000 --- a/src/components/UI/Sidebar/SidebarItem.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { cn } from "@app/core/utils/cn.js"; -import type { LucideIcon } from "lucide-react"; - -export interface SidebarItemProps { - icon?: LucideIcon; - element?: JSX.Element; - onClick?: () => void; - active?: boolean; - label: string; -} - -export const SidebarItem = ({ - icon: Icon, - element, - onClick, - active, - label -}: SidebarItemProps): JSX.Element => ( - -); diff --git a/src/components/UI/Sidebar/SidebarSection.tsx b/src/components/UI/Sidebar/SidebarSection.tsx index 0922b9a9..a71f752b 100644 --- a/src/components/UI/Sidebar/SidebarSection.tsx +++ b/src/components/UI/Sidebar/SidebarSection.tsx @@ -1,32 +1,17 @@ -import type { LucideIcon } from "lucide-react"; +import { H4 } from "../Typography/H4.js"; export interface SidebarSectionProps { - title: string; - action?: { - icon: LucideIcon; - onClick: () => void; - }; + label: string; subheader?: string; children: React.ReactNode; } export const SidebarSection = ({ - title, - action, + label: title, children }: SidebarSectionProps): JSX.Element => ( -
    -
    -
    {title}
    - {action && ( - - )} -
    -
      {children}
    +
    +

    {title}

    +
    {children}
    ); diff --git a/src/components/UI/Sidebar/sidebarButton.tsx b/src/components/UI/Sidebar/sidebarButton.tsx new file mode 100644 index 00000000..00f62886 --- /dev/null +++ b/src/components/UI/Sidebar/sidebarButton.tsx @@ -0,0 +1,29 @@ +import type { LucideIcon } from "lucide-react"; +import { Button } from "../Button.js"; + +export interface SidebarButtonProps { + label: string; + active?: boolean; + icon?: LucideIcon; + element?: JSX.Element; + onClick?: () => void; +} + +export const SidebarButton = ({ + label, + active, + icon: Icon, + element, + onClick +}: SidebarButtonProps): JSX.Element => ( + +); diff --git a/src/components/UI/Toast.tsx b/src/components/UI/Toast.tsx index 8f36fe65..c03d53ef 100644 --- a/src/components/UI/Toast.tsx +++ b/src/components/UI/Toast.tsx @@ -4,7 +4,6 @@ import { VariantProps, cva } from "class-variance-authority"; import { X } from "lucide-react"; import { cn } from "@core/utils/cn.js"; -import { buttonVariants } from "./Button.js"; const ToastProvider = ToastPrimitives.Provider; @@ -15,7 +14,7 @@ const ToastViewport = React.forwardRef< , React.ComponentPropsWithoutRef & VariantProps ->(({ className, status, ...props }, ref) => { +>(({ className, variant, ...props }, ref) => { return ( ); @@ -61,8 +61,7 @@ const ToastAction = React.forwardRef< diff --git a/src/components/UI/Typography/H2.tsx b/src/components/UI/Typography/H2.tsx index 05ef849e..fc2afcc3 100644 --- a/src/components/UI/Typography/H2.tsx +++ b/src/components/UI/Typography/H2.tsx @@ -3,7 +3,7 @@ export interface H2Props { } export const H2 = ({ children }: H2Props): JSX.Element => ( -

    +

    {children}

    ); diff --git a/src/components/UI/Typography/H3.tsx b/src/components/UI/Typography/H3.tsx index 9cfe9975..56eedaaa 100644 --- a/src/components/UI/Typography/H3.tsx +++ b/src/components/UI/Typography/H3.tsx @@ -3,7 +3,7 @@ export interface H3Props { } export const H3 = ({ children }: H3Props): JSX.Element => ( -

    +

    {children}

    ); diff --git a/src/components/UI/Typography/H4.tsx b/src/components/UI/Typography/H4.tsx index 48a7cdba..55b57bd8 100644 --- a/src/components/UI/Typography/H4.tsx +++ b/src/components/UI/Typography/H4.tsx @@ -1,9 +1,17 @@ +import { cn } from "@app/core/utils/cn.js"; + export interface H4Props { + className?: string; children: React.ReactNode; } -export const H4 = ({ children }: H4Props): JSX.Element => ( -

    +export const H4 = ({ className, children }: H4Props): JSX.Element => ( +

    {children}

    ); diff --git a/src/components/form/BitwiseSelect.tsx b/src/components/form/BitwiseSelect.tsx index 4265ac1e..89fbe052 100644 --- a/src/components/form/BitwiseSelect.tsx +++ b/src/components/form/BitwiseSelect.tsx @@ -2,7 +2,7 @@ import React, { useEffect, useState } from "react"; import { bitwiseDecode, bitwiseEncode, enumLike } from "@core/utils/bitwise.js"; import { InfoWrapper } from "@components/form/InfoWrapper.js"; -import { Listbox } from "@headlessui/react"; +// import { Listbox } from "@headlessui/react"; import { Protobuf } from "@meshtastic/meshtasticjs"; export interface BitwiseSelectProps { @@ -50,7 +50,7 @@ export const BitwiseSelect = ({ return ( - { onChange(bitwiseEncode(value)); @@ -71,7 +71,7 @@ export const BitwiseSelect = ({ ))} - + */} ); }; diff --git a/src/components/form/Button.tsx b/src/components/form/Button.tsx deleted file mode 100644 index b129dc30..00000000 --- a/src/components/form/Button.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import type { ButtonHTMLAttributes, ComponentType, SVGProps } from "react"; - -export interface ButtonProps extends ButtonHTMLAttributes { - size?: "sm" | "md" | "lg"; -} - -export const Button = ({ - size = "md", - children, - disabled, - className, - ...rest -}: ButtonProps): JSX.Element => { - return ( - - ); -}; diff --git a/src/components/form/Form.tsx b/src/components/form/Form.tsx deleted file mode 100644 index 6cbdc033..00000000 --- a/src/components/form/Form.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import type { FormEvent, HTMLProps } from "react"; - -export interface FormProps extends HTMLProps { - onSubmit?: (event: FormEvent) => Promise; -} - -export const Form = ({ - children, - onSubmit, - ...props -}: FormProps): JSX.Element => { - return ( -
    -
    {children}
    -
    - ); -}; diff --git a/src/components/form/Select.tsx b/src/components/form/Select.tsx deleted file mode 100644 index 1594f5c6..00000000 --- a/src/components/form/Select.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import { forwardRef, SelectHTMLAttributes } from "react"; - -import { InfoWrapper, InfoWrapperProps } from "@components/form/InfoWrapper.js"; - -export interface SelectProps - extends SelectHTMLAttributes, - Omit { - options?: string[]; - action?: { - icon: JSX.Element; - action: () => void; - }; -} - -export const Select = forwardRef(function Input( - { - label, - description, - options, - action, - disabled, - error, - children, - ...rest - }: SelectProps, - ref -) { - return ( - -
    - - {action && ( - - )} -
    -
    - ); -}); diff --git a/src/components/form/Toggle.tsx b/src/components/form/Toggle.tsx index dd175e72..4b1c2d17 100644 --- a/src/components/form/Toggle.tsx +++ b/src/components/form/Toggle.tsx @@ -6,7 +6,7 @@ export interface ToggleProps { label?: string; description?: string; disabled?: boolean; - onChange: (checked: boolean) => void; + onChange?: (checked: boolean) => void; } export const Toggle = ({ @@ -21,7 +21,7 @@ export const Toggle = ({ onChange(state)} + onCheckedChange={onChange} /> ); diff --git a/src/core/stores/appStore.ts b/src/core/stores/appStore.ts index 99f67cec..4ccc3c54 100644 --- a/src/core/stores/appStore.ts +++ b/src/core/stores/appStore.ts @@ -4,7 +4,7 @@ import { create } from "zustand"; export interface RasterSource { enabled: boolean; title: string; - tiles: string[]; + tiles: string; tileSize: number; } @@ -48,7 +48,7 @@ export const useAppStore = create()((set) => ({ currentPage: "messages", rasterSources: [], commandPaletteOpen: false, - darkMode: true, + darkMode: false, accent: "orange", connectDialogOpen: false, diff --git a/src/core/utils/selectEnumOptions.tsx b/src/core/utils/selectEnumOptions.tsx deleted file mode 100644 index 926fc115..00000000 --- a/src/core/utils/selectEnumOptions.tsx +++ /dev/null @@ -1,13 +0,0 @@ -export const renderOptions = (enumValue: { - [s: string]: string | number; -}): JSX.Element[] => { - const optionsEnumValues = enumValue - ? Object.entries(enumValue).filter((value) => typeof value[1] === "number") - : []; - - return optionsEnumValues.map(([name, value], index) => ( - - )); -}; diff --git a/src/index.css b/src/index.css index b2692767..8a35066d 100644 --- a/src/index.css +++ b/src/index.css @@ -3,7 +3,7 @@ @tailwind utilities; :root { - --backgroundPrimary: #f5f5f6; + --backgroundPrimary: #ffffff; --backgroundSecondary: #e6e9ed; --textPrimary: #111132; --textSecondary: #64748b; @@ -15,7 +15,7 @@ } [data-theme="dark"] { - --backgroundPrimary: #2d2d30; + --backgroundPrimary: #0f172a; --backgroundSecondary: #363638; --textPrimary: #ebebeb; --textSecondary: #bdbdbd; diff --git a/src/pages/Channels.tsx b/src/pages/Channels.tsx index 2754ae1e..96eaeba3 100644 --- a/src/pages/Channels.tsx +++ b/src/pages/Channels.tsx @@ -6,8 +6,9 @@ import { useDevice } from "@core/stores/deviceStore.js"; import { QrCodeIcon, ImportIcon } from "lucide-react"; import { Protobuf, Types } from "@meshtastic/meshtasticjs"; import { SidebarSection } from "@app/components/UI/Sidebar/SidebarSection.js"; -import { SidebarItem } from "@app/components/UI/Sidebar/SidebarItem.js"; import { useState } from "react"; +import { Button } from "@app/components/UI/Button.js"; +import { SidebarButton } from "@app/components/UI/Sidebar/sidebarButton.js"; export const getChannelName = (channel: Protobuf.Channel) => channel.settings?.name.length @@ -25,13 +26,12 @@ export const ChannelsPage = (): JSX.Element => { return ( <> - + {channels.map((channel) => ( - setActiveChannel(channel.config.index)} - label={getChannelName(channel.config)} element={ { )} /> } + onClick={() => setActiveChannel(channel.config.index)} /> ))} { ]; return ( - + {tabs.map((tab) => ( { ]; return ( - + {tabs.map((tab) => ( diff --git a/src/pages/Config/index.tsx b/src/pages/Config/index.tsx index 1c78d7cf..9332da0e 100644 --- a/src/pages/Config/index.tsx +++ b/src/pages/Config/index.tsx @@ -4,9 +4,10 @@ import { DeviceConfig } from "@pages/Config/DeviceConfig.js"; import { ModuleConfig } from "@pages/Config/ModuleConfig.js"; import { PageLayout } from "@app/components/Topbar.js"; import { SidebarSection } from "@app/components/UI/Sidebar/SidebarSection.js"; -import { SidebarItem } from "@app/components/UI/Sidebar/SidebarItem.js"; import { useState } from "react"; import { useDevice } from "@app/core/stores/deviceStore.js"; +import { Button } from "@app/components/UI/Button.js"; +import { SidebarButton } from "@app/components/UI/Sidebar/sidebarButton.js"; export const ConfigPage = (): JSX.Element => { const { workingConfig, workingModuleConfig, connection } = useDevice(); @@ -17,31 +18,23 @@ export const ConfigPage = (): JSX.Element => { return ( <> - - + setActiveConfigSection("device")} + icon={SettingsIcon} /> - setActiveConfigSection("module")} + icon={BoxesIcon} /> -
    -
    -
    -
    -
    -
    -
      -
      { const { nodes, waypoints } = useDevice(); const { rasterSources } = useAppStore(); const { default: map } = useMap(); - const tmp = useMap(); const getBBox = () => { const nodesWithPosition = nodes.filter((n) => n.data.position?.latitudeI); @@ -52,32 +54,14 @@ export const MapPage = (): JSX.Element => { return ( <> -
      -
      -
      -
      Sources
      -
      - -
      -
      -
      -
        - {rasterSources.map((source, index) => ( -
      • -
        - - {source.title} - -
        -
      • - ))} -
      -
      + + {rasterSources.map((source, index) => ( + + ))} +
      {
      ))} - {rasterSources.map((source, index) => ( + {/* {rasterSources.map((source, index) => ( - ))} + ))} */} {nodes.map((n) => { if (n.data.position?.latitudeI) { return ( diff --git a/src/pages/Messages.tsx b/src/pages/Messages.tsx index 1e85e415..d13b4a74 100644 --- a/src/pages/Messages.tsx +++ b/src/pages/Messages.tsx @@ -3,47 +3,27 @@ import { PageLayout } from "@app/components/Topbar.js"; import { ChannelChat } from "@components/PageComponents/Messages/ChannelChat.js"; import { useDevice } from "@core/stores/deviceStore.js"; import { Hashicon } from "@emeraldpay/hashicon-react"; -import { EditIcon, HashIcon } from "lucide-react"; +import { HashIcon } from "lucide-react"; import { Protobuf, Types } from "@meshtastic/meshtasticjs"; import { SidebarSection } from "@app/components/UI/Sidebar/SidebarSection.js"; -import { SidebarItem } from "@app/components/UI/Sidebar/SidebarItem.js"; import { useState } from "react"; import { getChannelName } from "./Channels.js"; +import { SidebarButton } from "@app/components/UI/Sidebar/sidebarButton.js"; export const MessagesPage = (): JSX.Element => { - const { channels, setActivePage, nodes, hardware } = useDevice(); + const { channels, nodes, hardware } = useDevice(); const [activeChannel, setActiveChannel] = useState( Types.ChannelNumber.PRIMARY ); - const tabs = channels.map((channel) => { - return { - label: channel.config.settings?.name.length - ? channel.config.settings?.name - : channel.config.index === 0 - ? "Primary" - : `Ch ${channel.config.index}`, - element: () => , - disabled: channel.config.role === Protobuf.Channel_Role.DISABLED - }; - }); - return ( <> - + {channels .filter((ch) => ch.config.role !== Protobuf.Channel_Role.DISABLED) .map((channel) => ( - { ? "Primary" : `Ch ${channel.config.index}` } - icon={HashIcon} + active={channel.config.index === activeChannel} + onClick={() => setActiveChannel(channel.config.index)} + element={} /> ))} - + {nodes .filter((n) => n.data.num !== hardware.myNodeNum) .map((node) => ( - { { .match(/.{1,2}/g) ?.join(":") ?? "UNK"} , - , + node.data.lastHeard === 0 ? ( +

      Never

      + ) : ( + + ), {node.data.snr}db/ {Math.min(Math.max((node.data.snr + 10) * 5, 0), 100)}%/ diff --git a/src/validation/config/device.ts b/src/validation/config/device.ts index 103fed46..fb389b23 100644 --- a/src/validation/config/device.ts +++ b/src/validation/config/device.ts @@ -19,4 +19,10 @@ export class DeviceValidation @IsInt() buzzerGpio: number; + + @IsEnum(Protobuf.Config_DeviceConfig_RebroadcastMode) + rebroadcastMode: Protobuf.Config_DeviceConfig_RebroadcastMode; + + @IsInt() + nodeInfoBroadcastSecs: number; } diff --git a/src/validation/config/lora.ts b/src/validation/config/lora.ts index efe7ab74..3ad22385 100644 --- a/src/validation/config/lora.ts +++ b/src/validation/config/lora.ts @@ -51,6 +51,9 @@ export class LoRaValidation @IsBoolean() sx126xRxBoostedGain: boolean; + @IsInt() + overrideFrequency: number; + @IsArray() ignoreIncoming: number[]; } diff --git a/src/validation/rasterSource.ts b/src/validation/rasterSource.ts new file mode 100644 index 00000000..0afeec77 --- /dev/null +++ b/src/validation/rasterSource.ts @@ -0,0 +1,22 @@ +import { IsArray, IsBoolean, IsNumber, IsString, IsUrl } from "class-validator"; + +import type { RasterSource } from "@core/stores/appStore.js"; + +export class MapValidation { + @IsArray() + rasterSources: MapValidation_RasterSources[]; +} + +export class MapValidation_RasterSources implements RasterSource { + @IsBoolean() + enabled: boolean; + + @IsString() + title: string; + + @IsUrl() + tiles: string; + + @IsNumber() + tileSize: number; +}