diff --git a/package.json b/package.json index b7b1aa9..d99fab9 100644 --- a/package.json +++ b/package.json @@ -39,11 +39,12 @@ "@cosmjs/proto-signing": "^0.31.0", "@cosmjs/stargate": "^0.31.0", "@cosmjs/tendermint-rpc": "^0.31.0", - "@dydxprotocol/v4-abacus": "^1.1.4", - "@dydxprotocol/v4-client-js": "^1.0.6", - "@dydxprotocol/v4-localization": "^1.0.17", + "@dydxprotocol/v4-abacus": "^1.1.32", + "@dydxprotocol/v4-client-js": "^1.0.11", + "@dydxprotocol/v4-localization": "^1.1.5", "@ethersproject/providers": "^5.7.2", "@js-joda/core": "^5.5.3", + "@radix-ui/react-accordion": "^1.1.2", "@radix-ui/react-checkbox": "^1.0.4", "@radix-ui/react-collapsible": "^1.0.3", "@radix-ui/react-dialog": "^1.0.4", @@ -111,7 +112,7 @@ "styled-components": "^5.3.11", "use-latest": "^1.2.1", "viem": "^1.12.2", - "wagmi": "^1.4.5" + "wagmi": "^1.4.12" }, "devDependencies": { "@babel/core": "^7.22.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bdb47df..67939f7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,9 +1,5 @@ lockfileVersion: '6.0' -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - dependencies: '@0xsquid/sdk': specifier: ^1.10.0 @@ -27,20 +23,23 @@ dependencies: specifier: ^0.31.0 version: 0.31.0 '@dydxprotocol/v4-abacus': - specifier: ^1.1.4 - version: 1.1.4 + specifier: ^1.1.32 + version: 1.1.32 '@dydxprotocol/v4-client-js': - specifier: ^1.0.6 - version: 1.0.6 + specifier: ^1.0.11 + version: 1.0.11 '@dydxprotocol/v4-localization': - specifier: ^1.0.17 - version: 1.0.17 + specifier: ^1.1.5 + version: 1.1.5 '@ethersproject/providers': specifier: ^5.7.2 version: 5.7.2 '@js-joda/core': specifier: ^5.5.3 version: 5.5.3 + '@radix-ui/react-accordion': + specifier: ^1.1.2 + version: 1.1.2(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-checkbox': specifier: ^1.0.4 version: 1.0.4(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) @@ -243,8 +242,8 @@ dependencies: specifier: ^1.12.2 version: 1.12.2(typescript@5.1.3) wagmi: - specifier: ^1.4.5 - version: 1.4.5(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.3)(viem@1.12.2) + specifier: ^1.4.12 + version: 1.4.12(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.3)(viem@1.12.2) devDependencies: '@babel/core': @@ -285,7 +284,7 @@ devDependencies: version: 2.0.0 babel-loader: specifier: ^9.1.2 - version: 9.1.2(@babel/core@7.22.5)(webpack@5.88.2) + version: 9.1.2(@babel/core@7.22.5)(webpack@5.89.0) babel-plugin-styled-components: specifier: ^2.1.4 version: 2.1.4(@babel/core@7.22.5)(styled-components@5.3.11) @@ -654,7 +653,7 @@ packages: /@confio/ics23@0.6.8: resolution: {integrity: sha512-wB6uo+3A50m0sW/EWcU64xpV/8wShZ6bMTa7pF8eYsTrSkQA7oLUIJcs/wb8g4y2Oyq701BaGiO6n/ak5WXO1w==} dependencies: - '@noble/hashes': 1.3.2 + '@noble/hashes': 1.3.3 protobufjs: 6.11.4 dev: false @@ -715,7 +714,7 @@ packages: bn.js: 5.2.1 elliptic: 6.5.4 js-sha3: 0.8.0 - libsodium-wrappers: 0.7.11 + libsodium-wrappers: 0.7.13 ripemd160: 2.0.2 sha.js: 2.4.11 dev: false @@ -726,10 +725,10 @@ packages: '@cosmjs/encoding': 0.30.1 '@cosmjs/math': 0.30.1 '@cosmjs/utils': 0.30.1 - '@noble/hashes': 1.3.2 + '@noble/hashes': 1.3.3 bn.js: 5.2.1 elliptic: 6.5.4 - libsodium-wrappers: 0.7.11 + libsodium-wrappers: 0.7.13 dev: false /@cosmjs/crypto@0.31.0: @@ -988,12 +987,12 @@ packages: resolution: {integrity: sha512-RpfLEtTlyIxeNPGKcokS+p3BZII/Q3bYxryFRglh5H3A3T8q9fsLYm72VYAMEOOIBLEa8o93kFLiBDUWKrwXZA==} dev: true - /@dydxprotocol/v4-abacus@1.1.4: - resolution: {integrity: sha512-gml6qheFsPShE9p3FmzFeStYM9ZVhgMq0K0+y12V7pObnMKbumkOIISgCzc47idkah0GMNhiqwi9faD5SjOy/A==} + /@dydxprotocol/v4-abacus@1.1.32: + resolution: {integrity: sha512-1KM3ILBg/YrdiVhCp/DXUgyCnJurxeYAIwL6+MWZisEGtdhPf9R7MNKUyVcTeNwEyiyxh4AzXNLRp3IPeHAsAw==} dev: false - /@dydxprotocol/v4-client-js@1.0.6: - resolution: {integrity: sha512-xiWH+kbix+zhI6EsAnd+NDvkjBgxWtGwQmvpd0PjljWNYSFgUtNe5M+piDdRbl2nhy6YWbxAGTwwS3K/ih5qSw==} + /@dydxprotocol/v4-client-js@1.0.11: + resolution: {integrity: sha512-rJNFGTO+HU1GQppXeRLKXNk4HWx/h+DjU2sUCieEv5mnRIMQpLw8dH/L+Uyhxx2oovccY1MaKB4Fr9IngdrF0A==} dependencies: '@cosmjs/amino': 0.30.1 '@cosmjs/encoding': 0.31.1 @@ -1013,15 +1012,15 @@ packages: ethers: 6.6.1 long: 4.0.0 protobufjs: 6.11.4 - ws: 8.13.0(bufferutil@4.0.7)(utf-8-validate@5.0.10) + ws: 8.15.0 transitivePeerDependencies: - bufferutil - debug - utf-8-validate dev: false - /@dydxprotocol/v4-localization@1.0.17: - resolution: {integrity: sha512-fybNpi1ono1IdwFQJTszsHbHmGti2BdhTo1nz9KOmKh3tmXdhWObKb64Ve6/6Fjk6h/9+DeZ5ZG4UbYyYMyhCA==} + /@dydxprotocol/v4-localization@1.1.5: + resolution: {integrity: sha512-Y25yuCLFaK3v/81B60lc3qthaWwJn1fNJuYQdOtgnmOhLNqI4YRryUncLkbjdB5xd4QODq5KZikP34pLKX9sgA==} dev: false /@dydxprotocol/v4-proto@0.4.1: @@ -1626,13 +1625,13 @@ packages: resolution: {integrity: sha512-6ueQTeJZtwKjmh23bdkq/DMqH4l4bmfvtQH98blOSbiXv/OUiyijSW6jU22IT8BNM1ujCaEvJfTtyCYVH38EMQ==} dependencies: '@formatjs/intl-localematcher': 0.4.0 - tslib: 2.6.1 + tslib: 2.6.2 dev: false /@formatjs/fast-memoize@2.2.0: resolution: {integrity: sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==} dependencies: - tslib: 2.6.1 + tslib: 2.6.2 dev: false /@formatjs/icu-messageformat-parser@2.6.0: @@ -1640,20 +1639,20 @@ packages: dependencies: '@formatjs/ecma402-abstract': 1.17.0 '@formatjs/icu-skeleton-parser': 1.6.0 - tslib: 2.6.1 + tslib: 2.6.2 dev: false /@formatjs/icu-skeleton-parser@1.6.0: resolution: {integrity: sha512-eMmxNpoX/J1IPUjPGSZwo0Wh+7CEvdEMddP2Jxg1gQJXfGfht/FdW2D5XDFj3VMbOTUQlDIdZJY7uC6O6gjPoA==} dependencies: '@formatjs/ecma402-abstract': 1.17.0 - tslib: 2.6.1 + tslib: 2.6.2 dev: false /@formatjs/intl-localematcher@0.4.0: resolution: {integrity: sha512-bRTd+rKomvfdS4QDlVJ6TA/Jx1F2h/TBVO5LjvhQ7QPPHp19oPNMIum7W2CMEReq/zPxpmCeB31F9+5gl/qtvw==} dependencies: - tslib: 2.6.1 + tslib: 2.6.2 dev: false /@humanwhocodes/config-array@0.11.10: @@ -1701,6 +1700,10 @@ packages: '@swc/helpers': 0.5.1 dev: false + /@ioredis/commands@1.2.0: + resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} + dev: false + /@ipld/car@3.2.4: resolution: {integrity: sha512-rezKd+jk8AsTGOoJKqzfjLJ3WVft7NZNH95f0pfPbicROvzTyvHCNy567HzSUd6gRXZ9im29z5ZEv9Hw49jSYw==} dependencies: @@ -1749,7 +1752,7 @@ packages: resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} dependencies: '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.20 dev: true /@jridgewell/sourcemap-codec@1.4.15: @@ -1761,6 +1764,13 @@ packages: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 + /@jridgewell/trace-mapping@0.3.20: + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + /@js-joda/core@5.5.3: resolution: {integrity: sha512-7dqNYwG8gCt4hfg5PKgM7xLEcgSBcx/UgC92OMnhMmvAnq11QzDFPrxUkNR/u5kn17WWLZ8beZ4A3Qrz4pZcmQ==} dev: false @@ -1824,7 +1834,7 @@ packages: resolution: {integrity: sha512-BKTaDYI17QgEcBBCP5ZqsHsfNH29P6VMRxjR4nOXcJfhsuwvdJxa/p88VwQYbpVBw0oXcDOwudNiu7Bgf8w6QQ==} dependencies: '@keplr-wallet/types': 0.11.64 - big-integer: 1.6.51 + big-integer: 1.6.52 utility-types: 3.10.0 transitivePeerDependencies: - debug @@ -1898,18 +1908,14 @@ packages: - terser dev: true - /@ledgerhq/connect-kit-loader@1.1.2: - resolution: {integrity: sha512-mscwGroSJQrCTjtNGBu+18FQbZYA4+q6Tyx6K7CXHl6AwgZKbWfZYdgP2F+fyZcRUdGRsMX8QtvU61VcGGtO1A==} - dev: false - - /@lit-labs/ssr-dom-shim@1.1.1: - resolution: {integrity: sha512-kXOeFbfCm4fFf2A3WwVEeQj55tMZa8c8/f9AKHMobQMkzNUfUj+antR3fRPaZJawsa1aZiP/Da3ndpZrwEe4rQ==} + /@lit-labs/ssr-dom-shim@1.1.2: + resolution: {integrity: sha512-jnOD+/+dSrfTWYfSXBXlo5l5f0q1UuJo3tkbMDCYA2lKUYq79jaxqtGEvnRoh049nt1vdo1+45RinipU6FGY2g==} dev: false /@lit/reactive-element@1.6.3: resolution: {integrity: sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==} dependencies: - '@lit-labs/ssr-dom-shim': 1.1.1 + '@lit-labs/ssr-dom-shim': 1.1.2 dev: false /@mdx-js/mdx@2.3.0: @@ -1954,7 +1960,7 @@ packages: resolution: {integrity: sha512-9cIRrfkWvHblSiNDVXsjivqa9Ak0RYo/1H6tqTqTbAx+oBK2Sva0lWDHxGchOqA7bySGUJKAWSNJvH6gdHZ0gQ==} engines: {node: '>=14.0.0'} dependencies: - '@types/debug': 4.1.8 + '@types/debug': 4.1.12 debug: 4.3.4(supports-color@5.5.0) semver: 7.5.4 superstruct: 1.0.3 @@ -1962,65 +1968,65 @@ packages: - supports-color dev: false - /@motionone/animation@10.15.1: - resolution: {integrity: sha512-mZcJxLjHor+bhcPuIFErMDNyrdb2vJur8lSfMCsuCB4UyV8ILZLvK+t+pg56erv8ud9xQGK/1OGPt10agPrCyQ==} + /@motionone/animation@10.16.3: + resolution: {integrity: sha512-QUGWpLbMFLhyqKlngjZhjtxM8IqiJQjLK0DF+XOF6od9nhSvlaeEpOY/UMCRVcZn/9Tr2rZO22EkuCIjYdI74g==} dependencies: - '@motionone/easing': 10.15.1 - '@motionone/types': 10.15.1 - '@motionone/utils': 10.15.1 - tslib: 2.6.1 + '@motionone/easing': 10.16.3 + '@motionone/types': 10.16.3 + '@motionone/utils': 10.16.3 + tslib: 2.6.2 dev: false - /@motionone/dom@10.16.2: - resolution: {integrity: sha512-bnuHdNbge1FutZXv+k7xub9oPWcF0hsu8y1HTH/qg6av58YI0VufZ3ngfC7p2xhMJMnoh0LXFma2EGTgPeCkeg==} + /@motionone/dom@10.16.4: + resolution: {integrity: sha512-HPHlVo/030qpRj9R8fgY50KTN4Ko30moWRTA3L3imrsRBmob93cTYmodln49HYFbQm01lFF7X523OkKY0DX6UA==} dependencies: - '@motionone/animation': 10.15.1 - '@motionone/generators': 10.15.1 - '@motionone/types': 10.15.1 - '@motionone/utils': 10.15.1 + '@motionone/animation': 10.16.3 + '@motionone/generators': 10.16.4 + '@motionone/types': 10.16.3 + '@motionone/utils': 10.16.3 hey-listen: 1.0.8 - tslib: 2.6.1 + tslib: 2.6.2 dev: false - /@motionone/easing@10.15.1: - resolution: {integrity: sha512-6hIHBSV+ZVehf9dcKZLT7p5PEKHGhDwky2k8RKkmOvUoYP3S+dXsKupyZpqx5apjd9f+php4vXk4LuS+ADsrWw==} + /@motionone/easing@10.16.3: + resolution: {integrity: sha512-HWTMZbTmZojzwEuKT/xCdvoMPXjYSyQvuVM6jmM0yoGU6BWzsmYMeB4bn38UFf618fJCNtP9XeC/zxtKWfbr0w==} dependencies: - '@motionone/utils': 10.15.1 - tslib: 2.6.1 + '@motionone/utils': 10.16.3 + tslib: 2.6.2 dev: false - /@motionone/generators@10.15.1: - resolution: {integrity: sha512-67HLsvHJbw6cIbLA/o+gsm7h+6D4Sn7AUrB/GPxvujse1cGZ38F5H7DzoH7PhX+sjvtDnt2IhFYF2Zp1QTMKWQ==} + /@motionone/generators@10.16.4: + resolution: {integrity: sha512-geFZ3w0Rm0ZXXpctWsSf3REGywmLLujEjxPYpBR0j+ymYwof0xbV6S5kGqqsDKgyWKVWpUInqQYvQfL6fRbXeg==} dependencies: - '@motionone/types': 10.15.1 - '@motionone/utils': 10.15.1 - tslib: 2.6.1 + '@motionone/types': 10.16.3 + '@motionone/utils': 10.16.3 + tslib: 2.6.2 dev: false - /@motionone/svelte@10.16.2: - resolution: {integrity: sha512-38xsroKrfK+aHYhuQlE6eFcGy0EwrB43Q7RGjF73j/kRUTcLNu/LAaKiLLsN5lyqVzCgTBVt4TMT/ShWbTbc5Q==} + /@motionone/svelte@10.16.4: + resolution: {integrity: sha512-zRVqk20lD1xqe+yEDZhMYgftsuHc25+9JSo+r0a0OWUJFocjSV9D/+UGhX4xgJsuwB9acPzXLr20w40VnY2PQA==} dependencies: - '@motionone/dom': 10.16.2 - tslib: 2.6.1 + '@motionone/dom': 10.16.4 + tslib: 2.6.2 dev: false - /@motionone/types@10.15.1: - resolution: {integrity: sha512-iIUd/EgUsRZGrvW0jqdst8st7zKTzS9EsKkP+6c6n4MPZoQHwiHuVtTQLD6Kp0bsBLhNzKIBlHXponn/SDT4hA==} + /@motionone/types@10.16.3: + resolution: {integrity: sha512-W4jkEGFifDq73DlaZs3HUfamV2t1wM35zN/zX7Q79LfZ2sc6C0R1baUHZmqc/K5F3vSw3PavgQ6HyHLd/MXcWg==} dev: false - /@motionone/utils@10.15.1: - resolution: {integrity: sha512-p0YncgU+iklvYr/Dq4NobTRdAPv9PveRDUXabPEeOjBLSO/1FNB2phNTZxOxpi1/GZwYpAoECEa0Wam+nsmhSw==} + /@motionone/utils@10.16.3: + resolution: {integrity: sha512-WNWDksJIxQkaI9p9Z9z0+K27xdqISGNFy1SsWVGaiedTHq0iaT6iZujby8fT/ZnZxj1EOaxJtSfUPCFNU5CRoA==} dependencies: - '@motionone/types': 10.15.1 + '@motionone/types': 10.16.3 hey-listen: 1.0.8 - tslib: 2.6.1 + tslib: 2.6.2 dev: false - /@motionone/vue@10.16.2: - resolution: {integrity: sha512-7/dEK/nWQXOkJ70bqb2KyNfSWbNvWqKKq1C8juj+0Mg/AorgD8O5wE3naddK0G+aXuNMqRuc4jlsYHHWHtIzVw==} + /@motionone/vue@10.16.4: + resolution: {integrity: sha512-z10PF9JV6SbjFq+/rYabM+8CVlMokgl8RFGvieSGNTmrkQanfHn+15XBrhG3BgUfvmTeSeyShfOHpG0i9zEdcg==} dependencies: - '@motionone/dom': 10.16.2 - tslib: 2.6.1 + '@motionone/dom': 10.16.4 + tslib: 2.6.2 dev: false /@multiformats/murmur3@1.1.3: @@ -2070,6 +2076,11 @@ packages: engines: {node: '>= 16'} dev: false + /@noble/hashes@1.3.3: + resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} + engines: {node: '>= 16'} + dev: false + /@noble/secp256k1@1.7.1: resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} @@ -2103,6 +2114,148 @@ packages: - debug dev: false + /@parcel/watcher-android-arm64@2.3.0: + resolution: {integrity: sha512-f4o9eA3dgk0XRT3XhB0UWpWpLnKgrh1IwNJKJ7UJek7eTYccQ8LR7XUWFKqw6aEq5KUNlCcGvSzKqSX/vtWVVA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-darwin-arm64@2.3.0: + resolution: {integrity: sha512-mKY+oijI4ahBMc/GygVGvEdOq0L4DxhYgwQqYAz/7yPzuGi79oXrZG52WdpGA1wLBPrYb0T8uBaGFo7I6rvSKw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-darwin-x64@2.3.0: + resolution: {integrity: sha512-20oBj8LcEOnLE3mgpy6zuOq8AplPu9NcSSSfyVKgfOhNAc4eF4ob3ldj0xWjGGbOF7Dcy1Tvm6ytvgdjlfUeow==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-freebsd-x64@2.3.0: + resolution: {integrity: sha512-7LftKlaHunueAEiojhCn+Ef2CTXWsLgTl4hq0pkhkTBFI3ssj2bJXmH2L67mKpiAD5dz66JYk4zS66qzdnIOgw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-linux-arm-glibc@2.3.0: + resolution: {integrity: sha512-1apPw5cD2xBv1XIHPUlq0cO6iAaEUQ3BcY0ysSyD9Kuyw4MoWm1DV+W9mneWI+1g6OeP6dhikiFE6BlU+AToTQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-linux-arm64-glibc@2.3.0: + resolution: {integrity: sha512-mQ0gBSQEiq1k/MMkgcSB0Ic47UORZBmWoAWlMrTW6nbAGoLZP+h7AtUM7H3oDu34TBFFvjy4JCGP43JlylkTQA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-linux-arm64-musl@2.3.0: + resolution: {integrity: sha512-LXZAExpepJew0Gp8ZkJ+xDZaTQjLHv48h0p0Vw2VMFQ8A+RKrAvpFuPVCVwKJCr5SE+zvaG+Etg56qXvTDIedw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-linux-x64-glibc@2.3.0: + resolution: {integrity: sha512-P7Wo91lKSeSgMTtG7CnBS6WrA5otr1K7shhSjKHNePVmfBHDoAOHYRXgUmhiNfbcGk0uMCHVcdbfxtuiZCHVow==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-linux-x64-musl@2.3.0: + resolution: {integrity: sha512-+kiRE1JIq8QdxzwoYY+wzBs9YbJ34guBweTK8nlzLKimn5EQ2b2FSC+tAOpq302BuIMjyuUGvBiUhEcLIGMQ5g==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-wasm@2.3.0: + resolution: {integrity: sha512-ejBAX8H0ZGsD8lSICDNyMbSEtPMWgDL0WFCt/0z7hyf5v8Imz4rAM8xY379mBsECkq/Wdqa5WEDLqtjZ+6NxfA==} + engines: {node: '>= 10.0.0'} + dependencies: + is-glob: 4.0.3 + micromatch: 4.0.5 + napi-wasm: 1.1.0 + dev: false + bundledDependencies: + - napi-wasm + + /@parcel/watcher-win32-arm64@2.3.0: + resolution: {integrity: sha512-35gXCnaz1AqIXpG42evcoP2+sNL62gZTMZne3IackM+6QlfMcJLy3DrjuL6Iks7Czpd3j4xRBzez3ADCj1l7Aw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-win32-ia32@2.3.0: + resolution: {integrity: sha512-FJS/IBQHhRpZ6PiCjFt1UAcPr0YmCLHRbTc00IBTrelEjlmmgIVLeOx4MSXzx2HFEy5Jo5YdhGpxCuqCyDJ5ow==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-win32-x64@2.3.0: + resolution: {integrity: sha512-dLx+0XRdMnVI62kU3wbXvbIRhLck4aE28bIGKbRGS7BJNt54IIj9+c/Dkqb+7DJEbHUZAX1bwaoM8PqVlHJmCA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher@2.3.0: + resolution: {integrity: sha512-pW7QaFiL11O0BphO+bq3MgqeX/INAk9jgBldVDYjlQPO4VddoZnF22TcF9onMhnLVHuNqBJeRf+Fj7eezi/+rQ==} + engines: {node: '>= 10.0.0'} + dependencies: + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.5 + node-addon-api: 7.0.0 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.3.0 + '@parcel/watcher-darwin-arm64': 2.3.0 + '@parcel/watcher-darwin-x64': 2.3.0 + '@parcel/watcher-freebsd-x64': 2.3.0 + '@parcel/watcher-linux-arm-glibc': 2.3.0 + '@parcel/watcher-linux-arm64-glibc': 2.3.0 + '@parcel/watcher-linux-arm64-musl': 2.3.0 + '@parcel/watcher-linux-x64-glibc': 2.3.0 + '@parcel/watcher-linux-x64-musl': 2.3.0 + '@parcel/watcher-win32-arm64': 2.3.0 + '@parcel/watcher-win32-ia32': 2.3.0 + '@parcel/watcher-win32-x64': 2.3.0 + dev: false + /@pkgr/utils@2.4.2: resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -2166,6 +2319,35 @@ packages: '@babel/runtime': 7.22.10 dev: false + /@radix-ui/react-accordion@1.1.2(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-fDG7jcoNKVjSK6yfmuAs0EnPDro0WMXIhMtXdTBWqEioVW206ku+4Lw07e+13lUkFkpoEQ2PdeMIAGpdqEAmDg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.10 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collapsible': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.14)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.14)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.14)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.14)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.14)(react@18.2.0) + '@types/react': 18.2.14 + '@types/react-dom': 18.2.6 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} peerDependencies: @@ -4687,10 +4869,10 @@ packages: picomatch: 2.3.1 dev: true - /@safe-global/safe-apps-provider@0.17.1(typescript@5.1.3): - resolution: {integrity: sha512-lYfRqrbbK1aKU1/UGkYWc/X7PgySYcumXKc5FB2uuwAs2Ghj8uETuW5BrwPqyjBknRxutFbTv+gth/JzjxAhdQ==} + /@safe-global/safe-apps-provider@0.18.1(typescript@5.1.3): + resolution: {integrity: sha512-V4a05A3EgJcriqtDoJklDz1BOinWhC6P0hjUSxshA4KOZM7rGPCTto/usXs09zr1vvL28evl/NldSTv97j2bmg==} dependencies: - '@safe-global/safe-apps-sdk': 8.0.0(typescript@5.1.3) + '@safe-global/safe-apps-sdk': 8.1.0(typescript@5.1.3) events: 3.3.0 transitivePeerDependencies: - bufferutil @@ -4700,19 +4882,6 @@ packages: - zod dev: false - /@safe-global/safe-apps-sdk@8.0.0(typescript@5.1.3): - resolution: {integrity: sha512-gYw0ki/EAuV1oSyMxpqandHjnthZjYYy+YWpTAzf8BqfXM3ItcZLpjxfg+3+mXW8HIO+3jw6T9iiqEXsqHaMMw==} - dependencies: - '@safe-global/safe-gateway-typescript-sdk': 3.9.0 - viem: 1.12.2(typescript@5.1.3) - transitivePeerDependencies: - - bufferutil - - encoding - - typescript - - utf-8-validate - - zod - dev: false - /@safe-global/safe-apps-sdk@8.1.0(typescript@5.1.3): resolution: {integrity: sha512-XJbEPuaVc7b9n23MqlF6c+ToYIS3f7P2Sel8f3cSBQ9WORE4xrSuvhMpK9fDSFqJ7by/brc+rmJR/5HViRr0/w==} dependencies: @@ -4738,8 +4907,8 @@ packages: resolution: {integrity: sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==} dev: false - /@scure/base@1.1.3: - resolution: {integrity: sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==} + /@scure/base@1.1.5: + resolution: {integrity: sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==} dev: false /@scure/bip32@1.3.0: @@ -4754,16 +4923,16 @@ packages: resolution: {integrity: sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==} dependencies: '@noble/curves': 1.1.0 - '@noble/hashes': 1.3.2 - '@scure/base': 1.1.3 + '@noble/hashes': 1.3.3 + '@scure/base': 1.1.5 dev: false /@scure/bip32@1.3.2: resolution: {integrity: sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==} dependencies: '@noble/curves': 1.2.0 - '@noble/hashes': 1.3.2 - '@scure/base': 1.1.3 + '@noble/hashes': 1.3.3 + '@scure/base': 1.1.5 dev: false /@scure/bip39@1.2.0: @@ -4776,8 +4945,8 @@ packages: /@scure/bip39@1.2.1: resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} dependencies: - '@noble/hashes': 1.3.2 - '@scure/base': 1.1.3 + '@noble/hashes': 1.3.3 + '@scure/base': 1.1.5 dev: false /@solana/buffer-layout@4.0.1: @@ -4792,7 +4961,7 @@ packages: dependencies: '@babel/runtime': 7.22.10 '@noble/curves': 1.2.0 - '@noble/hashes': 1.3.2 + '@noble/hashes': 1.3.3 '@solana/buffer-layout': 4.0.1 agentkeepalive: 4.5.0 bigint-buffer: 1.1.5 @@ -5163,7 +5332,7 @@ packages: /@swc/helpers@0.4.14: resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==} dependencies: - tslib: 2.6.1 + tslib: 2.6.2 dev: false /@swc/helpers@0.4.36: @@ -5176,7 +5345,7 @@ packages: /@swc/helpers@0.5.1: resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==} dependencies: - tslib: 2.6.1 + tslib: 2.6.2 dev: false /@tanstack/match-sorter-utils@8.8.4: @@ -5190,6 +5359,10 @@ packages: resolution: {integrity: sha512-YVB+mVWENQwPyv+40qO7flMgKZ0uI41Ph7qXC2Zf1ft5AIGfnXnMZyifB2ghhZ27u+5wm5mlzO4Y6lwwadzxCA==} dev: false + /@tanstack/query-core@4.36.1: + resolution: {integrity: sha512-DJSilV5+ytBP1FbFcEJovv4rnnm/CokuVvrBEtW/Va9DvuJ3HksbXUJEpI0aV1KtuL4ZoO9AVE6PyNLzF7tLeA==} + dev: false + /@tanstack/query-persist-client-core@4.32.6: resolution: {integrity: sha512-MJJ7CldvT5HOel50h/3wOZZwVlIcroFD5Vxn8vPsfo2C0qQ208ilmN/81JWutm/lWy4n2BjnCrrWv6HvVI7S0w==} dependencies: @@ -5202,18 +5375,18 @@ packages: '@tanstack/query-persist-client-core': 4.32.6 dev: false - /@tanstack/react-query-devtools@4.32.6(@tanstack/react-query@4.32.6)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Gd9pBkm2sbeze9P5Yp8R7y0rZVUdoIOhduomDjz138WdJuVbRS4Y8p6gX2uMJFsUFVe7jA6fX/D6NfQ9o5OS/A==} + /@tanstack/react-query-devtools@4.36.1(@tanstack/react-query@4.36.1)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-WYku83CKP3OevnYSG8Y/QO9g0rT75v1om5IvcWUwiUZJ4LanYGLVCZ8TdFG5jfsq4Ej/lu2wwDAULEUnRIMBSw==} peerDependencies: - '@tanstack/react-query': ^4.32.6 + '@tanstack/react-query': ^4.36.1 react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@tanstack/match-sorter-utils': 8.8.4 - '@tanstack/react-query': 4.32.6(react-dom@18.2.0)(react@18.2.0) + '@tanstack/react-query': 4.36.1(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - superjson: 1.13.1 + superjson: 1.13.3 use-sync-external-store: 1.2.0(react@18.2.0) dev: false @@ -5244,6 +5417,24 @@ packages: use-sync-external-store: 1.2.0(react@18.2.0) dev: false + /@tanstack/react-query@4.36.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-y7ySVHFyyQblPl3J3eQBWpXZkliroki3ARnBKsdJchlgt7yJLRDUcf4B8soufgiYt3pEQIkBWBx1N9/ZPIeUWw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-native: '*' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + dependencies: + '@tanstack/query-core': 4.36.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + use-sync-external-store: 1.2.0(react@18.2.0) + dev: false + /@types/acorn@4.0.6: resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} dependencies: @@ -5279,7 +5470,7 @@ packages: /@types/connect@3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: - '@types/node': 20.3.1 + '@types/node': 20.10.5 dev: false /@types/crypto-js@4.1.1: @@ -5320,23 +5511,23 @@ packages: resolution: {integrity: sha512-DExNQkaHd1F3dFPvGA/Aw2NGyjMln6E9QzsiqOcBgnE+VInYnFBHBBySbZQts6z6xD+5jTfKCP7M4OqMyVjdwQ==} dev: false - /@types/debug@4.1.8: - resolution: {integrity: sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==} + /@types/debug@4.1.12: + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} dependencies: - '@types/ms': 0.7.31 + '@types/ms': 0.7.34 - /@types/eslint-scope@3.7.4: - resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} + /@types/eslint-scope@3.7.7: + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} dependencies: - '@types/eslint': 8.44.2 - '@types/estree': 1.0.1 + '@types/eslint': 8.56.0 + '@types/estree': 1.0.5 dev: true - /@types/eslint@8.44.2: - resolution: {integrity: sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==} + /@types/eslint@8.56.0: + resolution: {integrity: sha512-FlsN0p4FhuYRjIxpbdXovvHQhtlG05O1GG/RNWvdAxTboR438IOTwmrY/vLA+Xfgg06BTkP045M3vpFwTMv1dg==} dependencies: - '@types/estree': 1.0.1 - '@types/json-schema': 7.0.12 + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 dev: true /@types/estree-jsx@1.0.0: @@ -5349,6 +5540,10 @@ packages: resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} dev: true + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + dev: true + /@types/hast@2.3.5: resolution: {integrity: sha512-SvQi0L/lNpThgPoleH53cdjB3y9zpLlVjRbqB3rH8hx1jiRSBGAhyjV3H+URFjNVRqt2EdYNrbZE5IsGlNfpRg==} dependencies: @@ -5366,6 +5561,10 @@ packages: resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} dev: true + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + dev: true + /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true @@ -5399,8 +5598,8 @@ packages: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true - /@types/ms@0.7.31: - resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} + /@types/ms@0.7.34: + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} /@types/node@10.12.18: resolution: {integrity: sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==} @@ -5414,6 +5613,11 @@ packages: resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==} dev: false + /@types/node@20.10.5: + resolution: {integrity: sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==} + dependencies: + undici-types: 5.26.5 + /@types/node@20.3.1: resolution: {integrity: sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==} @@ -5459,8 +5663,8 @@ packages: csstype: 3.1.2 dev: false - /@types/trusted-types@2.0.3: - resolution: {integrity: sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==} + /@types/trusted-types@2.0.7: + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} dev: false /@types/unist@2.0.7: @@ -5474,7 +5678,7 @@ packages: /@types/ws@7.4.7: resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} dependencies: - '@types/node': 20.3.1 + '@types/node': 20.10.5 dev: false /@types/ws@8.5.6: @@ -5979,8 +6183,8 @@ packages: pretty-format: 27.5.1 dev: true - /@wagmi/connectors@3.1.3(@types/react@18.2.14)(react@18.2.0)(typescript@5.1.3)(viem@1.12.2): - resolution: {integrity: sha512-UgwsQKQDFObJVJMf9pDfFoXTv710o4zrTHyhIWKBTMMkLpCMsMxN5+ZaDhBYt/BgoRinfRYQo8uwuwLhxE6Log==} + /@wagmi/connectors@3.1.10(@types/react@18.2.14)(react@18.2.0)(typescript@5.1.3)(viem@1.12.2): + resolution: {integrity: sha512-ZLJC1QaeiZarkF07Cr9mOlVjPO1Lf5TBx+JKBms2y5fUIXlKrxCfQgO/gDCureboI+Us2X3IRI659+XacSGpbA==} peerDependencies: typescript: '>=5.0.4' viem: '>=0.3.35' @@ -5989,10 +6193,9 @@ packages: optional: true dependencies: '@coinbase/wallet-sdk': 3.7.1 - '@ledgerhq/connect-kit-loader': 1.1.2 - '@safe-global/safe-apps-provider': 0.17.1(typescript@5.1.3) + '@safe-global/safe-apps-provider': 0.18.1(typescript@5.1.3) '@safe-global/safe-apps-sdk': 8.1.0(typescript@5.1.3) - '@walletconnect/ethereum-provider': 2.10.2(@walletconnect/modal@2.6.2) + '@walletconnect/ethereum-provider': 2.10.6(@types/react@18.2.14)(react@18.2.0) '@walletconnect/legacy-provider': 2.0.0 '@walletconnect/modal': 2.6.2(@types/react@18.2.14)(react@18.2.0) '@walletconnect/utils': 2.10.2 @@ -6001,19 +6204,29 @@ packages: typescript: 5.1.3 viem: 1.12.2(typescript@5.1.3) transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' - '@react-native-async-storage/async-storage' - '@types/react' + - '@upstash/redis' + - '@vercel/kv' - bufferutil - encoding - - lokijs - react - supports-color - utf-8-validate - zod dev: false - /@wagmi/core@1.4.5(@types/react@18.2.14)(react@18.2.0)(typescript@5.1.3)(viem@1.12.2): - resolution: {integrity: sha512-N9luRb1Uk4tBN9kaYcQSWKE9AsRt/rvZaFt5IZech4JPzNN2sQlfhKd9GEjOXYRDqEPHdDvos7qyBKiDNTz4GA==} + /@wagmi/core@1.4.12(@types/react@18.2.14)(react@18.2.0)(typescript@5.1.3)(viem@1.12.2): + resolution: {integrity: sha512-bLcYmmGgjtl3jAGo8X3Sm6oUwsdjbVxFMu9SWnwHdE4S9JdYeWM57dEhQgq8SYul2yQ7yY2/gimBf1Or0Ky3dQ==} peerDependencies: typescript: '>=5.0.4' viem: '>=0.3.35' @@ -6021,74 +6234,69 @@ packages: typescript: optional: true dependencies: - '@wagmi/connectors': 3.1.3(@types/react@18.2.14)(react@18.2.0)(typescript@5.1.3)(viem@1.12.2) + '@wagmi/connectors': 3.1.10(@types/react@18.2.14)(react@18.2.0)(typescript@5.1.3)(viem@1.12.2) abitype: 0.8.7(typescript@5.1.3) eventemitter3: 4.0.7 typescript: 5.1.3 viem: 1.12.2(typescript@5.1.3) - zustand: 4.4.1(@types/react@18.2.14)(react@18.2.0) + zustand: 4.4.7(@types/react@18.2.14)(react@18.2.0) transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' - '@react-native-async-storage/async-storage' - '@types/react' + - '@upstash/redis' + - '@vercel/kv' - bufferutil - encoding - immer - - lokijs - react - supports-color - utf-8-validate - zod dev: false - /@walletconnect/core@2.10.0: - resolution: {integrity: sha512-Z8pdorfIMueuiBXLdnf7yloiO9JIiobuxN3j0OTal+MYc4q5/2O7d+jdD1DAXbLi1taJx3x60UXT/FPVkjIqIQ==} + /@walletconnect/core@2.10.6: + resolution: {integrity: sha512-Z4vh4ZdfcoQjgPEOxeuF9HUZCVLtV3MgRbS/awLIj/omDrFnOwlBhxi5Syr4Y8muVGC0ocRetQYHae0/gX5crQ==} dependencies: '@walletconnect/heartbeat': 1.2.1 '@walletconnect/jsonrpc-provider': 1.0.13 '@walletconnect/jsonrpc-types': 1.0.3 '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/jsonrpc-ws-connection': 1.0.13 - '@walletconnect/keyvaluestorage': 1.0.2 + '@walletconnect/jsonrpc-ws-connection': 1.0.14 + '@walletconnect/keyvaluestorage': 1.1.1 '@walletconnect/logger': 2.0.1 '@walletconnect/relay-api': 1.0.9 '@walletconnect/relay-auth': 1.0.4 '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.10.0 - '@walletconnect/utils': 2.10.0 + '@walletconnect/types': 2.10.6 + '@walletconnect/utils': 2.10.6 events: 3.3.0 lodash.isequal: 4.5.0 uint8arrays: 3.1.1 transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' - bufferutil - - lokijs - - utf-8-validate - dev: false - - /@walletconnect/core@2.10.2: - resolution: {integrity: sha512-JQz/xp3SLEpTeRQctdck2ugSBVEpMxoSE+lFi2voJkZop1hv6P+uqr6E4PzjFluAjeAnKlT1xvra0aFWjPWVcw==} - dependencies: - '@walletconnect/heartbeat': 1.2.1 - '@walletconnect/jsonrpc-provider': 1.0.13 - '@walletconnect/jsonrpc-types': 1.0.3 - '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/jsonrpc-ws-connection': 1.0.13 - '@walletconnect/keyvaluestorage': 1.0.2 - '@walletconnect/logger': 2.0.1 - '@walletconnect/relay-api': 1.0.9 - '@walletconnect/relay-auth': 1.0.4 - '@walletconnect/safe-json': 1.0.2 - '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.10.2 - '@walletconnect/utils': 2.10.2 - events: 3.3.0 - lodash.isequal: 4.5.0 - uint8arrays: 3.1.1 - transitivePeerDependencies: - - '@react-native-async-storage/async-storage' - - bufferutil - - lokijs + - supports-color - utf-8-validate dev: false @@ -6117,29 +6325,37 @@ packages: tslib: 1.14.1 dev: false - /@walletconnect/ethereum-provider@2.10.2(@walletconnect/modal@2.6.2): - resolution: {integrity: sha512-QMYFZ6+rVq2CJLdIPdKK0j1Qm66UA27oQU5V2SrL8EVwl7wFfm0Bq7fnL+qAWeDpn612dNeNErpk/ROa1zWlWg==} - peerDependencies: - '@walletconnect/modal': '>=2' - peerDependenciesMeta: - '@walletconnect/modal': - optional: true + /@walletconnect/ethereum-provider@2.10.6(@types/react@18.2.14)(react@18.2.0): + resolution: {integrity: sha512-bBQ+yUfxLv8VxNttgNKY7nED35gSVayO/BnLHbNKvyV1gpvSCla5mWB9MsXuQs70MK0g+/qtgRVSrOtdSubaNQ==} dependencies: '@walletconnect/jsonrpc-http-connection': 1.0.7 '@walletconnect/jsonrpc-provider': 1.0.13 '@walletconnect/jsonrpc-types': 1.0.3 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/modal': 2.6.2(@types/react@18.2.14)(react@18.2.0) - '@walletconnect/sign-client': 2.10.2 - '@walletconnect/types': 2.10.2 - '@walletconnect/universal-provider': 2.10.2 - '@walletconnect/utils': 2.10.2 + '@walletconnect/sign-client': 2.10.6 + '@walletconnect/types': 2.10.6 + '@walletconnect/universal-provider': 2.10.6 + '@walletconnect/utils': 2.10.6 events: 3.3.0 transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' - '@react-native-async-storage/async-storage' + - '@types/react' + - '@upstash/redis' + - '@vercel/kv' - bufferutil - encoding - - lokijs + - react + - supports-color - utf-8-validate dev: false @@ -6192,32 +6408,42 @@ packages: tslib: 1.14.1 dev: false - /@walletconnect/jsonrpc-ws-connection@1.0.13: - resolution: {integrity: sha512-mfOM7uFH4lGtQxG+XklYuFBj6dwVvseTt5/ahOkkmpcAEgz2umuzu7fTR+h5EmjQBdrmYyEBOWADbeaFNxdySg==} + /@walletconnect/jsonrpc-ws-connection@1.0.14: + resolution: {integrity: sha512-Jsl6fC55AYcbkNVkwNM6Jo+ufsuCQRqViOQ8ZBPH9pRREHH9welbBiszuTLqEJiQcO/6XfFDl6bzCJIkrEi8XA==} dependencies: '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/safe-json': 1.0.2 events: 3.3.0 - tslib: 1.14.1 ws: 7.5.9 transitivePeerDependencies: - bufferutil - utf-8-validate dev: false - /@walletconnect/keyvaluestorage@1.0.2: - resolution: {integrity: sha512-U/nNG+VLWoPFdwwKx0oliT4ziKQCEoQ27L5Hhw8YOFGA2Po9A9pULUYNWhDgHkrb0gYDNt//X7wABcEWWBd3FQ==} + /@walletconnect/keyvaluestorage@1.1.1: + resolution: {integrity: sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==} peerDependencies: '@react-native-async-storage/async-storage': 1.x - lokijs: 1.x peerDependenciesMeta: '@react-native-async-storage/async-storage': optional: true - lokijs: - optional: true dependencies: - safe-json-utils: 1.1.1 - tslib: 1.14.1 + '@walletconnect/safe-json': 1.0.2 + idb-keyval: 6.2.1 + unstorage: 1.10.1(idb-keyval@6.2.1) + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@upstash/redis' + - '@vercel/kv' + - supports-color dev: false /@walletconnect/legacy-client@2.0.0: @@ -6348,41 +6574,33 @@ packages: tslib: 1.14.1 dev: false - /@walletconnect/sign-client@2.10.0: - resolution: {integrity: sha512-hbDljDS53kR/It3oXD91UkcOsT6diNnW5+Zzksm0YEfwww5dop/YfNlcdnc8+jKUhWOL/YDPNQCjzsCSNlVzbw==} + /@walletconnect/sign-client@2.10.6: + resolution: {integrity: sha512-EvUWjaZBQu2yKnH5/5F2qzbuiIuUN9ZgrNKgvXkw5z1Dq5RJCks0S9/MFlKH/ZSGqXnLl7uAzBXtoX4sMgbCMA==} dependencies: - '@walletconnect/core': 2.10.0 + '@walletconnect/core': 2.10.6 '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.1 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/logger': 2.0.1 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.10.0 - '@walletconnect/utils': 2.10.0 + '@walletconnect/types': 2.10.6 + '@walletconnect/utils': 2.10.6 events: 3.3.0 transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' - bufferutil - - lokijs - - utf-8-validate - dev: false - - /@walletconnect/sign-client@2.10.2: - resolution: {integrity: sha512-vviSLV3f92I0bReX+OLr1HmbH0uIzYEQQFd1MzIfDk9PkfFT/LLAHhUnDaIAMkIdippqDcJia+5QEtT4JihL3Q==} - dependencies: - '@walletconnect/core': 2.10.2 - '@walletconnect/events': 1.0.1 - '@walletconnect/heartbeat': 1.2.1 - '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/logger': 2.0.1 - '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.10.2 - '@walletconnect/utils': 2.10.2 - events: 3.3.0 - transitivePeerDependencies: - - '@react-native-async-storage/async-storage' - - bufferutil - - lokijs + - supports-color - utf-8-validate dev: false @@ -6392,76 +6610,87 @@ packages: tslib: 1.14.1 dev: false - /@walletconnect/types@2.10.0: - resolution: {integrity: sha512-kSTA/WZnbKdEbvbXSW16Ty6dOSzOZCHnGg6JH7q1MuraalD2HuNg00lVVu7QAZ/Rj1Gn9DAkrgP5Wd5a8Xq//Q==} - dependencies: - '@walletconnect/events': 1.0.1 - '@walletconnect/heartbeat': 1.2.1 - '@walletconnect/jsonrpc-types': 1.0.3 - '@walletconnect/keyvaluestorage': 1.0.2 - '@walletconnect/logger': 2.0.1 - events: 3.3.0 - transitivePeerDependencies: - - '@react-native-async-storage/async-storage' - - lokijs - dev: false - /@walletconnect/types@2.10.2: resolution: {integrity: sha512-luNV+07Wdla4STi9AejseCQY31tzWKQ5a7C3zZZaRK/di+rFaAAb7YW04OP4klE7tw/mJRGPTlekZElmHxO8kQ==} dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.1 '@walletconnect/jsonrpc-types': 1.0.3 - '@walletconnect/keyvaluestorage': 1.0.2 + '@walletconnect/keyvaluestorage': 1.1.1 '@walletconnect/logger': 2.0.1 events: 3.3.0 transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' - '@react-native-async-storage/async-storage' - - lokijs + - '@upstash/redis' + - '@vercel/kv' + - supports-color dev: false - /@walletconnect/universal-provider@2.10.2: - resolution: {integrity: sha512-wFgI0LbQ3D56sgaUMsgOHCM5m8WLxiC71BGuCKQfApgsbNMVKugYVy2zWHyUyi8sqTQHI+uSaVpDev4UHq9LEw==} + /@walletconnect/types@2.10.6: + resolution: {integrity: sha512-WgHfiTG1yakmxheaBRiXhUdEmgxwrvsAdOIWaMf/spvrzVKYh6sHI3oyEEky5qj5jjiMiyQBeB57QamzCotbcQ==} + dependencies: + '@walletconnect/events': 1.0.1 + '@walletconnect/heartbeat': 1.2.1 + '@walletconnect/jsonrpc-types': 1.0.3 + '@walletconnect/keyvaluestorage': 1.1.1 + '@walletconnect/logger': 2.0.1 + events: 3.3.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - supports-color + dev: false + + /@walletconnect/universal-provider@2.10.6: + resolution: {integrity: sha512-CEivusqqoD31BhCTKp08DnrccfGjwD9MFjZs5BNRorDteRFE8zVm9LmP6DSiNJCw82ZajGlZThggLQ/BAATfwA==} dependencies: '@walletconnect/jsonrpc-http-connection': 1.0.7 '@walletconnect/jsonrpc-provider': 1.0.13 '@walletconnect/jsonrpc-types': 1.0.3 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/logger': 2.0.1 - '@walletconnect/sign-client': 2.10.2 - '@walletconnect/types': 2.10.2 - '@walletconnect/utils': 2.10.2 + '@walletconnect/sign-client': 2.10.6 + '@walletconnect/types': 2.10.6 + '@walletconnect/utils': 2.10.6 events: 3.3.0 transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' - bufferutil - encoding - - lokijs + - supports-color - utf-8-validate dev: false - /@walletconnect/utils@2.10.0: - resolution: {integrity: sha512-9GRyEz/7CJW+G04RvrjPET5k7hOEsB9b3fF9cWDk/iDCxSWpbkU/hv/urRB36C+gvQMAZgIZYX3dHfzJWkY/2g==} - dependencies: - '@stablelib/chacha20poly1305': 1.0.1 - '@stablelib/hkdf': 1.0.1 - '@stablelib/random': 1.0.2 - '@stablelib/sha256': 1.0.1 - '@stablelib/x25519': 1.0.3 - '@walletconnect/relay-api': 1.0.9 - '@walletconnect/safe-json': 1.0.2 - '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.10.0 - '@walletconnect/window-getters': 1.0.1 - '@walletconnect/window-metadata': 1.0.1 - detect-browser: 5.3.0 - query-string: 7.1.3 - uint8arrays: 3.1.1 - transitivePeerDependencies: - - '@react-native-async-storage/async-storage' - - lokijs - dev: false - /@walletconnect/utils@2.10.2: resolution: {integrity: sha512-syxXRpc2yhSknMu3IfiBGobxOY7fLfLTJuw+ppKaeO6WUdZpIit3wfuGOcc0Ms3ZPFCrGfyGOoZsCvgdXtptRg==} dependencies: @@ -6480,8 +6709,52 @@ packages: query-string: 7.1.3 uint8arrays: 3.1.1 transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' - '@react-native-async-storage/async-storage' - - lokijs + - '@upstash/redis' + - '@vercel/kv' + - supports-color + dev: false + + /@walletconnect/utils@2.10.6: + resolution: {integrity: sha512-oRsWWhN2+hi3aiDXrQEOfysz6FHQJGXLsNQPVt+WIBJplO6Szmdau9dbleD88u1iiT4GKPqE0R9FOYvvPm1H/w==} + dependencies: + '@stablelib/chacha20poly1305': 1.0.1 + '@stablelib/hkdf': 1.0.1 + '@stablelib/random': 1.0.2 + '@stablelib/sha256': 1.0.1 + '@stablelib/x25519': 1.0.3 + '@walletconnect/relay-api': 1.0.9 + '@walletconnect/safe-json': 1.0.2 + '@walletconnect/time': 1.0.2 + '@walletconnect/types': 2.10.6 + '@walletconnect/window-getters': 1.0.1 + '@walletconnect/window-metadata': 1.0.1 + detect-browser: 5.3.0 + query-string: 7.1.3 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' + - '@react-native-async-storage/async-storage' + - '@upstash/redis' + - '@vercel/kv' + - supports-color dev: false /@walletconnect/window-getters@1.0.1: @@ -6757,12 +7030,12 @@ packages: negotiator: 0.6.3 dev: true - /acorn-import-assertions@1.9.0(acorn@8.10.0): + /acorn-import-assertions@1.9.0(acorn@8.11.2): resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} peerDependencies: acorn: ^8 dependencies: - acorn: 8.10.0 + acorn: 8.11.2 dev: true /acorn-jsx@5.3.2(acorn@8.10.0): @@ -6782,7 +7055,11 @@ packages: resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} hasBin: true - dev: true + + /acorn@8.11.2: + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + engines: {node: '>=0.4.0'} + hasBin: true /aes-js@3.0.0: resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} @@ -6907,7 +7184,10 @@ packages: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: true + + /arch@2.2.0: + resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} + dev: false /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -7025,7 +7305,7 @@ packages: /async-mutex@0.2.6: resolution: {integrity: sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==} dependencies: - tslib: 2.6.1 + tslib: 2.6.2 dev: false /asynckit@0.4.0: @@ -7079,7 +7359,7 @@ packages: dequal: 2.0.3 dev: true - /babel-loader@9.1.2(@babel/core@7.22.5)(webpack@5.88.2): + /babel-loader@9.1.2(@babel/core@7.22.5)(webpack@5.89.0): resolution: {integrity: sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA==} engines: {node: '>= 14.15.0'} peerDependencies: @@ -7089,7 +7369,7 @@ packages: '@babel/core': 7.22.5 find-cache-dir: 3.3.2 schema-utils: 4.2.0 - webpack: 5.88.2 + webpack: 5.89.0 dev: true /babel-plugin-styled-components@2.1.4(@babel/core@7.22.5)(styled-components@5.3.11): @@ -7133,6 +7413,11 @@ packages: /big-integer@1.6.51: resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} engines: {node: '>=0.6'} + dev: false + + /big-integer@1.6.52: + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} + engines: {node: '>=0.6'} /bigint-buffer@1.1.5: resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} @@ -7149,7 +7434,6 @@ packages: /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} - dev: true /bind-decorator@1.0.11: resolution: {integrity: sha512-yzkH0uog6Vv/vQ9+rhSKxecnqGUZHYncg7qS7voz3Q76+TAi1SGiOKk2mlOvusQnFz9Dc4BC/NMkeXu11YgjJg==} @@ -7177,7 +7461,7 @@ packages: /bip39@3.1.0: resolution: {integrity: sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A==} dependencies: - '@noble/hashes': 1.3.2 + '@noble/hashes': 1.3.3 dev: false /bl@5.1.0: @@ -7245,7 +7529,7 @@ packages: resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} engines: {node: '>= 5.10.0'} dependencies: - big-integer: 1.6.51 + big-integer: 1.6.52 dev: true /brace-expansion@1.1.11: @@ -7259,7 +7543,6 @@ packages: engines: {node: '>=8'} dependencies: fill-range: 7.0.1 - dev: true /broadcast-channel@3.7.0: resolution: {integrity: sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==} @@ -7298,6 +7581,17 @@ packages: node-releases: 2.0.13 update-browserslist-db: 1.0.11(browserslist@4.21.10) + /browserslist@4.22.2: + resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001570 + electron-to-chromium: 1.4.615 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.22.2) + dev: true + /bs58@4.0.1: resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} dependencies: @@ -7322,8 +7616,8 @@ packages: base64-js: 1.5.1 ieee754: 1.2.1 - /bufferutil@4.0.7: - resolution: {integrity: sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==} + /bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} engines: {node: '>=6.14.2'} requiresBuild: true dependencies: @@ -7396,6 +7690,10 @@ packages: /caniuse-lite@1.0.30001521: resolution: {integrity: sha512-fnx1grfpEOvDGH+V17eccmNjucGUnCbP6KL+l5KqBIerp26WK/+RQ7CIDE37KGJjaPyqWXXlFUyKiWmvdNNKmQ==} + /caniuse-lite@1.0.30001570: + resolution: {integrity: sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==} + dev: true + /carbites@1.0.6: resolution: {integrity: sha512-dS9IQvnrb5VIRvSTNz5Ff+mB9d2MFfi5mojtJi7Rlss79VeF190jr0sZdA7eW0CGHotvHkZaWuM6wgfD9PEFRg==} dependencies: @@ -7480,8 +7778,7 @@ packages: normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: 2.3.2 - dev: true + fsevents: 2.3.3 /chrome-trace-event@1.0.3: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} @@ -7495,6 +7792,12 @@ packages: safe-buffer: 5.2.1 dev: false + /citty@0.1.5: + resolution: {integrity: sha512-AS7n5NSc0OQVMV9v6wt3ByujNIrne0/cTjiC2MYqhvao57VNfiuVksTSr2p17nVOhEr2KtqiAkGwHcgMC/qUuQ==} + dependencies: + consola: 3.2.3 + dev: false + /class-is@1.1.0: resolution: {integrity: sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==} dev: true @@ -7507,6 +7810,15 @@ packages: engines: {node: '>=10'} dev: true + /clipboardy@3.0.0: + resolution: {integrity: sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + arch: 2.2.0 + execa: 5.1.1 + is-wsl: 2.2.0 + dev: false + /cliui@6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} dependencies: @@ -7520,6 +7832,11 @@ packages: engines: {node: '>=6'} dev: false + /cluster-key-slot@1.1.2: + resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} + engines: {node: '>=0.10.0'} + dev: false + /cmdk@0.2.0(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-JQpKvEOb86SnvMZbYaFKYhvzFntWBeSZdyii0rZPhKJj9uwJBxu4DaVYDrRN7r3mPop56oPhRw+JYWTKs66TYw==} peerDependencies: @@ -7624,6 +7941,11 @@ packages: resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} dev: true + /consola@3.2.3: + resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + engines: {node: ^14.18.0 || >=16.10.0} + dev: false + /content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} @@ -7639,6 +7961,10 @@ packages: /convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + /cookie-es@1.0.0: + resolution: {integrity: sha512-mWYvfOLrfEc996hlKcdABeIiPHUPC6DM2QYZdGGOvhOTbA3tjm2eBwqlJpoFdjC89NI4Qt6h0Pu06Mp+1Pj5OQ==} + dev: false + /cookies@0.8.0: resolution: {integrity: sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==} engines: {node: '>= 0.8'} @@ -7651,7 +7977,7 @@ packages: resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} engines: {node: '>=12.13'} dependencies: - is-what: 4.1.15 + is-what: 4.1.16 dev: false /copy-to-clipboard@3.3.3: @@ -7688,7 +8014,7 @@ packages: resolution: {integrity: sha512-WIdaQ8uW1vIbYvNnAVunkC6yxTrneJC7VQ5UUQ0kuw8b0C0A39KTIpoQHCfc8tV7o9vF4niwRhdXEdfAgQEsQQ==} dependencies: cosmos-directory-types: 0.0.6 - node-fetch-native: 1.4.1 + node-fetch-native: 1.6.1 dev: false /cosmos-directory-types@0.0.6: @@ -7731,7 +8057,6 @@ packages: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - dev: true /crypto-js@4.1.1: resolution: {integrity: sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==} @@ -7953,6 +8278,10 @@ packages: has-property-descriptors: 1.0.0 object-keys: 1.1.1 + /defu@6.1.3: + resolution: {integrity: sha512-Vy2wmG3NTkmHNg/kzpuvHhkqeIx3ODWqasgCRbKtbXEN0G+HpEEv9BtJLp7ZG1CZloFaC41Ah3ZFbq7aqCqMeQ==} + dev: false + /delay@4.4.1: resolution: {integrity: sha512-aL3AhqtfhOlT/3ai6sWXeqwnw63ATNpnUiN4HL7x9q+My5QtHlO3OIkasmug9LKzpheLdmUKGRKnYXYAS7FQkQ==} engines: {node: '>=6'} @@ -7972,6 +8301,11 @@ packages: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} dev: true + /denque@2.1.0: + resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} + engines: {node: '>=0.10'} + dev: false + /depd@1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} @@ -7987,6 +8321,10 @@ packages: engines: {node: '>=6'} dev: true + /destr@2.0.2: + resolution: {integrity: sha512-65AlobnZMiCET00KaFFjUefxDX0khFA/E4myqZ7a6Sq1yZtR8+FVIvilVX66vF2uobSumxooYZChiRPCKNqhmg==} + dev: false + /destroy@1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -7996,6 +8334,12 @@ packages: resolution: {integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==} dev: false + /detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + dev: false + /detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} dev: false @@ -8077,6 +8421,10 @@ packages: /electron-to-chromium@1.4.495: resolution: {integrity: sha512-mwknuemBZnoOCths4GtpU/SDuVMp3uQHKa2UNJT9/aVD6WVRjGpXOxRGX7lm6ILIenTdGXPSTCTDaWos5tEU8Q==} + /electron-to-chromium@1.4.615: + resolution: {integrity: sha512-/bKPPcgZVUziECqDc+0HkT87+0zhaWSZHNXqF8FLd2lQcptpmUFwoCSWjCdOng9Gdq+afKArPdEg/0ZW461Eng==} + dev: true + /elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} dependencies: @@ -8185,8 +8533,8 @@ packages: which-typed-array: 1.1.11 dev: true - /es-module-lexer@1.3.0: - resolution: {integrity: sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==} + /es-module-lexer@1.4.1: + resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} dev: true /es-set-tostringtag@2.0.1: @@ -8769,6 +9117,12 @@ packages: fast-safe-stringify: 2.1.1 dev: false + /eth-rpc-errors@4.0.3: + resolution: {integrity: sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==} + dependencies: + fast-safe-stringify: 2.1.1 + dev: false + /ethereum-cryptography@2.1.2: resolution: {integrity: sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug==} dependencies: @@ -8858,7 +9212,6 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 - dev: true /execa@7.2.0: resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} @@ -8966,7 +9319,6 @@ packages: engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 - dev: true /filter-obj@1.1.0: resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} @@ -9052,12 +9404,11 @@ packages: /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true - dev: true optional: true /function-bind@1.1.1: @@ -9107,6 +9458,10 @@ packages: engines: {node: '>=6'} dev: false + /get-port-please@3.1.1: + resolution: {integrity: sha512-3UBAyM3u4ZBVYDsxOQfJDxEa6XTbpBDrOjp4mf7ExFRt5BKs/QywQQiJsh2B+hxcZLSapWqCRvElUe8DnKcFHA==} + dev: false + /get-port@6.1.2: resolution: {integrity: sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -9115,7 +9470,6 @@ packages: /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - dev: true /get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} @@ -9136,7 +9490,6 @@ packages: engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 - dev: true /glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} @@ -9248,28 +9601,52 @@ packages: '@cosmjs/tendermint-rpc': 0.30.1 '@keplr-wallet/cosmos': 0.11.64 '@keplr-wallet/types': 0.11.64 - '@tanstack/react-query': 4.32.6(react-dom@18.2.0)(react@18.2.0) - '@tanstack/react-query-devtools': 4.32.6(@tanstack/react-query@4.32.6)(react-dom@18.2.0)(react@18.2.0) - '@walletconnect/sign-client': 2.10.0 - '@walletconnect/types': 2.10.0 - '@walletconnect/utils': 2.10.0 + '@tanstack/react-query': 4.36.1(react-dom@18.2.0)(react@18.2.0) + '@tanstack/react-query-devtools': 4.36.1(@tanstack/react-query@4.36.1)(react-dom@18.2.0)(react@18.2.0) + '@walletconnect/sign-client': 2.10.6 + '@walletconnect/types': 2.10.6 + '@walletconnect/utils': 2.10.6 '@web3modal/standalone': 2.4.3(react@18.2.0) arg: 5.0.2 cosmos-directory-client: 0.0.6 react: 18.2.0 - zustand: 4.4.1(@types/react@18.2.14)(react@18.2.0) + zustand: 4.4.7(@types/react@18.2.14)(react@18.2.0) transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' - '@react-native-async-storage/async-storage' - '@types/react' + - '@upstash/redis' + - '@vercel/kv' - bufferutil - debug - immer - - lokijs - react-dom - react-native + - supports-color - utf-8-validate dev: false + /h3@1.9.0: + resolution: {integrity: sha512-+F3ZqrNV/CFXXfZ2lXBINHi+rM4Xw3CDC5z2CDK3NMPocjonKipGLLDSkrqY9DOrioZNPTIdDMWfQKm//3X2DA==} + dependencies: + cookie-es: 1.0.0 + defu: 6.1.3 + destr: 2.0.2 + iron-webcrypto: 1.0.0 + radix3: 1.1.0 + ufo: 1.3.2 + uncrypto: 0.1.3 + unenv: 1.8.0 + dev: false + /hamt-sharding@2.0.1: resolution: {integrity: sha512-vnjrmdXG9dDs1m/H4iJ6z0JFI2NtgsW5keRkTcM85NGak69Mkf5PHUqBz+Xs0T4sg0ppvj9O5EGAJo40FTxmmA==} engines: {node: '>=10.0.0', npm: '>=6.0.0'} @@ -9475,10 +9852,14 @@ packages: toidentifier: 1.0.1 dev: true + /http-shutdown@1.2.2: + resolution: {integrity: sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + dev: false + /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - dev: true /human-signals@4.3.1: resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} @@ -9500,7 +9881,6 @@ packages: /idb-keyval@6.2.1: resolution: {integrity: sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==} - dev: true /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -9588,7 +9968,7 @@ packages: '@formatjs/ecma402-abstract': 1.17.0 '@formatjs/fast-memoize': 2.2.0 '@formatjs/icu-messageformat-parser': 2.6.0 - tslib: 2.6.1 + tslib: 2.6.2 dev: false /invariant@2.2.4: @@ -9597,6 +9977,23 @@ packages: loose-envify: 1.4.0 dev: false + /ioredis@5.3.2: + resolution: {integrity: sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==} + engines: {node: '>=12.22.0'} + dependencies: + '@ioredis/commands': 1.2.0 + cluster-key-slot: 1.1.2 + debug: 4.3.4(supports-color@5.5.0) + denque: 2.1.0 + lodash.defaults: 4.2.0 + lodash.isarguments: 3.1.0 + redis-errors: 1.2.0 + redis-parser: 3.0.0 + standard-as-callback: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: false + /ip-regex@4.3.0: resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} engines: {node: '>=8'} @@ -9765,6 +10162,10 @@ packages: - supports-color dev: true + /iron-webcrypto@1.0.0: + resolution: {integrity: sha512-anOK1Mktt8U1Xi7fCM3RELTuYbnFikQY5VtrDj7kPgpejV7d43tWKhzgioO0zpkazLEL/j/iayRqnJhrGfqUsg==} + dev: false + /is-alphabetical@2.0.1: resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} dev: true @@ -9810,7 +10211,6 @@ packages: engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 - dev: true /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} @@ -9850,7 +10250,6 @@ packages: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} hasBin: true - dev: true /is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} @@ -9865,7 +10264,6 @@ packages: /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - dev: true /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} @@ -9882,7 +10280,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 - dev: true /is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} @@ -9926,7 +10323,6 @@ packages: /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - dev: true /is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} @@ -9971,7 +10367,6 @@ packages: /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - dev: true /is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} @@ -10008,8 +10403,8 @@ packages: call-bind: 1.0.2 dev: true - /is-what@4.1.15: - resolution: {integrity: sha512-uKua1wfy3Yt+YqsD6mTUEa2zSi3G1oPlqTflgaPJ7z63vUGN5pxFpnQfeSLMFnJDEsdvOtkp1rUWkYjB4YfhgA==} + /is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} engines: {node: '>=12.13'} dev: false @@ -10018,7 +10413,6 @@ packages: engines: {node: '>=8'} dependencies: is-docker: 2.2.1 - dev: true /isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} @@ -10026,7 +10420,6 @@ packages: /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true /iso-random-stream@2.0.2: resolution: {integrity: sha512-yJvs+Nnelic1L2vH2JzWvvPQFA4r7kSTnpST/+LkAQjSz0hos2oqLD+qIVi9Qk38Hoe7mNDt3j0S27R58MVjLQ==} @@ -10054,7 +10447,7 @@ packages: peerDependencies: ws: '*' dependencies: - ws: 8.13.0(bufferutil@4.0.7)(utf-8-validate@5.0.10) + ws: 8.13.0 dev: false /it-all@1.0.6: @@ -10154,11 +10547,16 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.3.1 + '@types/node': 20.10.5 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true + /jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + hasBin: true + dev: false + /js-sha3@0.8.0: resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} dev: false @@ -10192,7 +10590,7 @@ packages: engines: {node: '>=10.0.0'} dependencies: '@metamask/safe-event-emitter': 2.0.0 - eth-rpc-errors: 4.0.2 + eth-rpc-errors: 4.0.3 dev: false /json-rpc-random-id@1.0.1: @@ -10229,7 +10627,6 @@ packages: /jsonc-parser@3.2.0: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} - dev: true /jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} @@ -10366,24 +10763,47 @@ packages: libsodium-sumo: 0.7.11 dev: false - /libsodium-wrappers@0.7.11: - resolution: {integrity: sha512-SrcLtXj7BM19vUKtQuyQKiQCRJPgbpauzl3s0rSwD+60wtHqSUuqcoawlMDheCJga85nKOQwxNYQxf/CKAvs6Q==} + /libsodium-wrappers@0.7.13: + resolution: {integrity: sha512-kasvDsEi/r1fMzKouIDv7B8I6vNmknXwGiYodErGuESoFTohGSKZplFtVxZqHaoQ217AynyIFgnOVRitpHs0Qw==} dependencies: - libsodium: 0.7.11 + libsodium: 0.7.13 dev: false - /libsodium@0.7.11: - resolution: {integrity: sha512-WPfJ7sS53I2s4iM58QxY3Inb83/6mjlYgcmZs7DJsvDlnmVUwNinBCi5vBT43P6bHRy01O4zsMU2CoVR6xJ40A==} + /libsodium@0.7.13: + resolution: {integrity: sha512-mK8ju0fnrKXXfleL53vtp9xiPq5hKM0zbDQtcxQIsSmxNgSxqCj6R7Hl9PkrNe2j29T4yoDaF7DJLK9/i5iWUw==} dev: false /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true + /listhen@1.5.5: + resolution: {integrity: sha512-LXe8Xlyh3gnxdv4tSjTjscD1vpr/2PRpzq8YIaMJgyKzRG8wdISlWVWnGThJfHnlJ6hmLt2wq1yeeix0TEbuoA==} + hasBin: true + dependencies: + '@parcel/watcher': 2.3.0 + '@parcel/watcher-wasm': 2.3.0 + citty: 0.1.5 + clipboardy: 3.0.0 + consola: 3.2.3 + defu: 6.1.3 + get-port-please: 3.1.1 + h3: 1.9.0 + http-shutdown: 1.2.2 + jiti: 1.21.0 + mlly: 1.4.2 + node-forge: 1.3.1 + pathe: 1.1.1 + std-env: 3.6.0 + ufo: 1.3.2 + untun: 0.1.3 + uqr: 0.1.2 + dev: false + /lit-element@3.3.3: resolution: {integrity: sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==} dependencies: - '@lit-labs/ssr-dom-shim': 1.1.1 + '@lit-labs/ssr-dom-shim': 1.1.2 '@lit/reactive-element': 1.6.3 lit-html: 2.8.0 dev: false @@ -10391,7 +10811,7 @@ packages: /lit-html@2.8.0: resolution: {integrity: sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==} dependencies: - '@types/trusted-types': 2.0.3 + '@types/trusted-types': 2.0.7 dev: false /lit@2.7.5: @@ -10433,6 +10853,14 @@ packages: p-locate: 5.0.0 dev: true + /lodash.defaults@4.2.0: + resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} + dev: false + + /lodash.isarguments@3.1.0: + resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} + dev: false + /lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} dev: false @@ -10467,6 +10895,11 @@ packages: get-func-name: 2.0.0 dev: true + /lru-cache@10.1.0: + resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} + engines: {node: 14 || >=16.14} + dev: false + /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: @@ -10767,7 +11200,6 @@ packages: /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} @@ -11087,7 +11519,7 @@ packages: /micromark@3.2.0: resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} dependencies: - '@types/debug': 4.1.8 + '@types/debug': 4.1.12 debug: 4.3.4(supports-color@5.5.0) decode-named-character-reference: 1.0.2 micromark-core-commonmark: 1.1.0 @@ -11114,7 +11546,6 @@ packages: dependencies: braces: 3.0.2 picomatch: 2.3.1 - dev: true /microseconds@0.2.0: resolution: {integrity: sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==} @@ -11130,10 +11561,15 @@ packages: dependencies: mime-db: 1.52.0 + /mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + dev: false + /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - dev: true /mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} @@ -11182,17 +11618,25 @@ packages: pathe: 1.1.1 pkg-types: 1.0.3 ufo: 1.2.0 - dev: true + + /mlly@1.4.2: + resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} + dependencies: + acorn: 8.11.2 + pathe: 1.1.1 + pkg-types: 1.0.3 + ufo: 1.3.2 + dev: false /motion@10.16.2: resolution: {integrity: sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ==} dependencies: - '@motionone/animation': 10.15.1 - '@motionone/dom': 10.16.2 - '@motionone/svelte': 10.16.2 - '@motionone/types': 10.15.1 - '@motionone/utils': 10.15.1 - '@motionone/vue': 10.16.2 + '@motionone/animation': 10.16.3 + '@motionone/dom': 10.16.4 + '@motionone/svelte': 10.16.4 + '@motionone/types': 10.16.3 + '@motionone/utils': 10.16.3 + '@motionone/vue': 10.16.4 dev: false /move-file@2.1.0: @@ -11205,7 +11649,6 @@ packages: /mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} - dev: true /mrmime@1.0.1: resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} @@ -11259,8 +11702,8 @@ packages: thenify-all: 1.6.0 dev: true - /nan@2.17.0: - resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==} + /nan@2.18.0: + resolution: {integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==} dev: false /nano-time@1.0.0: @@ -11275,6 +11718,10 @@ packages: hasBin: true dev: true + /napi-wasm@1.1.0: + resolution: {integrity: sha512-lHwIAJbmLSjF9VDRm9GoVOy9AGp3aIvkjv+Kvz9h16QR3uSVYH78PNQUnT2U4X53mhlnV2M7wrhibQ3GHicDmg==} + dev: false + /native-abort-controller@1.0.4(abort-controller@3.0.0): resolution: {integrity: sha512-zp8yev7nxczDJMoP6pDxyD20IU0T22eX8VwN2ztDccKvSZhRaV33yP1BGwKSZfXuqWUzsXopVFjBdau9OOAwMQ==} peerDependencies: @@ -11320,13 +11767,21 @@ packages: resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} dev: false + /node-addon-api@7.0.0: + resolution: {integrity: sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==} + dev: false + /node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} dev: true - /node-fetch-native@1.4.1: - resolution: {integrity: sha512-NsXBU0UgBxo2rQLOeWNZqS3fvflWePMECr8CoSWoSTqCqGbVVsvl9vZu1HfQicYN0g5piV9Gh8RTEvo/uP752w==} + /node-fetch-native@1.6.1: + resolution: {integrity: sha512-bW9T/uJDPAJB2YNYEpWzE54U5O3MQidXsOyTfnbKYtTtFexRvGzb1waphBN4ZwP6EcIvYYEOwW0b72BpAqydTw==} + dev: false + + /node-fetch-native@1.6.1: + resolution: {integrity: sha512-bW9T/uJDPAJB2YNYEpWzE54U5O3MQidXsOyTfnbKYtTtFexRvGzb1waphBN4ZwP6EcIvYYEOwW0b72BpAqydTw==} dev: false /node-fetch@2.6.12: @@ -11352,7 +11807,6 @@ packages: /node-forge@1.3.1: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} - dev: true /node-gyp-build@4.6.0: resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==} @@ -11362,6 +11816,10 @@ packages: /node-releases@2.0.13: resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + dev: true + /normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: @@ -11384,14 +11842,12 @@ packages: /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - dev: true /npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} dependencies: path-key: 3.1.1 - dev: true /npm-run-path@5.1.0: resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} @@ -11467,6 +11923,14 @@ packages: resolution: {integrity: sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==} dev: false + /ofetch@1.3.3: + resolution: {integrity: sha512-s1ZCMmQWXy4b5K/TW9i/DtiN8Ku+xCiHcjQ6/J/nDdssirrQNOoB165Zu8EqLMA2lln1JUth9a0aW9Ap2ctrUg==} + dependencies: + destr: 2.0.2 + node-fetch-native: 1.6.1 + ufo: 1.3.2 + dev: false + /on-exit-leak-free@0.2.0: resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} dev: false @@ -11488,7 +11952,6 @@ packages: engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 - dev: true /onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} @@ -11642,7 +12105,6 @@ packages: /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - dev: true /path-key@4.0.0: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} @@ -11660,7 +12122,6 @@ packages: /pathe@1.1.1: resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} - dev: true /pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} @@ -11748,7 +12209,6 @@ packages: jsonc-parser: 3.2.0 mlly: 1.4.0 pathe: 1.1.1 - dev: true /pngjs@5.0.0: resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} @@ -11843,7 +12303,7 @@ packages: '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 '@types/long': 4.0.2 - '@types/node': 20.3.1 + '@types/node': 20.10.5 long: 4.0.0 /proxy-compare@2.5.1: @@ -11943,6 +12403,10 @@ packages: - supports-color dev: true + /radix3@1.1.0: + resolution: {integrity: sha512-pNsHDxbGORSvuSScqNJ+3Km6QAVqk8CfsCBIEoDgpqLrkD2f3QM4I7d1ozJJ172OmIcoUcerZaNWqtLkRXTV3A==} + dev: false + /randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: @@ -12121,7 +12585,7 @@ packages: '@types/react': 18.2.14 react: 18.2.0 react-style-singleton: 2.2.1(@types/react@18.2.14)(react@18.2.0) - tslib: 2.6.1 + tslib: 2.6.2 dev: false /react-remove-scroll@2.5.4(@types/react@18.2.14)(react@18.2.0): @@ -12138,7 +12602,7 @@ packages: react: 18.2.0 react-remove-scroll-bar: 2.3.4(@types/react@18.2.14)(react@18.2.0) react-style-singleton: 2.2.1(@types/react@18.2.14)(react@18.2.0) - tslib: 2.6.1 + tslib: 2.6.2 use-callback-ref: 1.3.0(@types/react@18.2.14)(react@18.2.0) use-sidecar: 1.1.2(@types/react@18.2.14)(react@18.2.0) dev: false @@ -12229,7 +12693,7 @@ packages: get-nonce: 1.0.1 invariant: 2.2.4 react: 18.2.0 - tslib: 2.6.1 + tslib: 2.6.2 dev: false /react-use-measure@2.1.1(react-dom@18.2.0)(react@18.2.0): @@ -12281,7 +12745,6 @@ packages: engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 - dev: true /readonly-date@1.0.0: resolution: {integrity: sha512-tMKIV7hlk0h4mO3JTmmVuIlJVXjKk3Sep9Bf5OH0O+758ruuVkUy2J9SttDLm91IEX/WHlXPSpxMGjPj4beMIQ==} @@ -12316,6 +12779,18 @@ packages: strip-indent: 3.0.0 dev: true + /redis-errors@1.2.0: + resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} + engines: {node: '>=4'} + dev: false + + /redis-parser@3.0.0: + resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} + engines: {node: '>=4'} + dependencies: + redis-errors: 1.2.0 + dev: false + /reduce-css-calc@1.3.0: resolution: {integrity: sha512-0dVfwYVOlf/LBA2ec4OwQ6p3X9mYxn/wOl2xTcLwjnPYrkgEfPx3VI4eGCH3rQLlPISG5v9I9bkZosKsNRTRKA==} dependencies: @@ -12484,7 +12959,7 @@ packages: engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: true /rpc-websockets@7.6.0: @@ -12493,9 +12968,9 @@ packages: '@babel/runtime': 7.22.10 eventemitter3: 4.0.7 uuid: 8.3.2 - ws: 8.13.0(bufferutil@4.0.7)(utf-8-validate@5.0.10) + ws: 8.15.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) optionalDependencies: - bufferutil: 4.0.7 + bufferutil: 4.0.8 utf-8-validate: 5.0.10 dev: false @@ -12539,10 +13014,6 @@ packages: /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - /safe-json-utils@1.1.1: - resolution: {integrity: sha512-SAJWGKDs50tAbiDXLf89PDwt9XYkWyANFWVzn4dTXl5QyI8t2o/bW5/OJl3lvc2WVU4MEpTo9Yz5NVFNsp+OJQ==} - dev: false - /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: @@ -12569,7 +13040,7 @@ packages: resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/json-schema': 7.0.12 + '@types/json-schema': 7.0.15 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) dev: true @@ -12634,12 +13105,10 @@ packages: engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 - dev: true /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - dev: true /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} @@ -12654,7 +13123,6 @@ packages: /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true /simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} @@ -12748,6 +13216,10 @@ packages: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} dev: true + /standard-as-callback@2.1.0: + resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} + dev: false + /statuses@1.5.0: resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} engines: {node: '>= 0.6'} @@ -12757,6 +13229,10 @@ packages: resolution: {integrity: sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==} dev: true + /std-env@3.6.0: + resolution: {integrity: sha512-aFZ19IgVmhdB2uX599ve2kE6BIE3YMnQ6Gp6BURhW/oIzpXGKr878TQfAQZn1+i0Flcc/UKUy1gOlcfaUBCryg==} + dev: false + /stream-browserify@3.0.0: resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} dependencies: @@ -12872,7 +13348,6 @@ packages: /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} - dev: true /strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} @@ -12941,8 +13416,8 @@ packages: ts-interface-checker: 0.1.13 dev: true - /superjson@1.13.1: - resolution: {integrity: sha512-AVH2eknm9DEd3qvxM4Sq+LTCkSXE2ssfh1t11MHMXyYXFQyQ1HLgVvV+guLTsaQnJU3gnaVo34TohHPulY/wLg==} + /superjson@1.13.3: + resolution: {integrity: sha512-mJiVjfd2vokfDxsQPOwJ/PtanO87LhpYY88ubI5dUB1Ab58Txbyje3+jpm+/83R/fevaq/107NNhtYBLuoTrFg==} engines: {node: '>=10'} dependencies: copy-anything: 3.0.5 @@ -13004,7 +13479,7 @@ packages: engines: {node: '>=6'} dev: true - /terser-webpack-plugin@5.3.9(webpack@5.88.2): + /terser-webpack-plugin@5.3.9(webpack@5.89.0): resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -13020,21 +13495,21 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.20 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.1 - terser: 5.19.2 - webpack: 5.88.2 + terser: 5.26.0 + webpack: 5.89.0 dev: true - /terser@5.19.2: - resolution: {integrity: sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==} + /terser@5.26.0: + resolution: {integrity: sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==} engines: {node: '>=10'} hasBin: true dependencies: '@jridgewell/source-map': 0.3.5 - acorn: 8.10.0 + acorn: 8.11.2 commander: 2.20.3 source-map-support: 0.5.21 dev: true @@ -13100,7 +13575,7 @@ packages: bn.js: 4.12.0 create-hmac: 1.1.7 elliptic: 6.5.4 - nan: 2.17.0 + nan: 2.18.0 dev: false /tinybench@2.5.0: @@ -13131,7 +13606,6 @@ packages: engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 - dev: true /toggle-selection@1.0.6: resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} @@ -13190,6 +13664,10 @@ packages: /tslib@2.6.1: resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==} + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: false + /tsscmp@1.0.6: resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} engines: {node: '>=0.6.x'} @@ -13305,7 +13783,10 @@ packages: /ufo@1.2.0: resolution: {integrity: sha512-RsPyTbqORDNDxqAdQPQBpgqhWle1VcTSou/FraClYlHf6TZnQcGslpLcAphNR+sQW4q5lLWLbOsRlh9j24baQg==} - dev: true + + /ufo@1.3.2: + resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} + dev: false /uint8arrays@3.1.1: resolution: {integrity: sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==} @@ -13321,6 +13802,23 @@ packages: which-boxed-primitive: 1.0.2 dev: true + /uncrypto@0.1.3: + resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} + dev: false + + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + /unenv@1.8.0: + resolution: {integrity: sha512-uIGbdCWZfhRRmyKj1UioCepQ0jpq638j/Cf0xFTn4zD1nGJ2lSdzYHLzfdXN791oo/0juUiSWW1fBklXMTsuqg==} + dependencies: + consola: 3.2.3 + defu: 6.1.3 + mime: 3.0.0 + node-fetch-native: 1.6.1 + pathe: 1.1.1 + dev: false + /unified@10.1.2: resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} dependencies: @@ -13390,11 +13888,77 @@ packages: detect-node: 2.1.0 dev: false + /unstorage@1.10.1(idb-keyval@6.2.1): + resolution: {integrity: sha512-rWQvLRfZNBpF+x8D3/gda5nUCQL2PgXy2jNG4U7/Rc9BGEv9+CAJd0YyGCROUBKs9v49Hg8huw3aih5Bf5TAVw==} + peerDependencies: + '@azure/app-configuration': ^1.4.1 + '@azure/cosmos': ^4.0.0 + '@azure/data-tables': ^13.2.2 + '@azure/identity': ^3.3.2 + '@azure/keyvault-secrets': ^4.7.0 + '@azure/storage-blob': ^12.16.0 + '@capacitor/preferences': ^5.0.6 + '@netlify/blobs': ^6.2.0 + '@planetscale/database': ^1.11.0 + '@upstash/redis': ^1.23.4 + '@vercel/kv': ^0.2.3 + idb-keyval: ^6.2.1 + peerDependenciesMeta: + '@azure/app-configuration': + optional: true + '@azure/cosmos': + optional: true + '@azure/data-tables': + optional: true + '@azure/identity': + optional: true + '@azure/keyvault-secrets': + optional: true + '@azure/storage-blob': + optional: true + '@capacitor/preferences': + optional: true + '@netlify/blobs': + optional: true + '@planetscale/database': + optional: true + '@upstash/redis': + optional: true + '@vercel/kv': + optional: true + idb-keyval: + optional: true + dependencies: + anymatch: 3.1.3 + chokidar: 3.5.3 + destr: 2.0.2 + h3: 1.9.0 + idb-keyval: 6.2.1 + ioredis: 5.3.2 + listhen: 1.5.5 + lru-cache: 10.1.0 + mri: 1.2.0 + node-fetch-native: 1.6.1 + ofetch: 1.3.3 + ufo: 1.3.2 + transitivePeerDependencies: + - supports-color + dev: false + /untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} dev: true + /untun@0.1.3: + resolution: {integrity: sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ==} + hasBin: true + dependencies: + citty: 0.1.5 + consola: 3.2.3 + pathe: 1.1.1 + dev: false + /update-browserslist-db@1.0.11(browserslist@4.21.10): resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} hasBin: true @@ -13405,6 +13969,21 @@ packages: escalade: 3.1.1 picocolors: 1.0.0 + /update-browserslist-db@1.0.13(browserslist@4.22.2): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.22.2 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + + /uqr@0.1.2: + resolution: {integrity: sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==} + dev: false + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: @@ -13427,7 +14006,7 @@ packages: dependencies: '@types/react': 18.2.14 react: 18.2.0 - tslib: 2.6.1 + tslib: 2.6.2 dev: false /use-isomorphic-layout-effect@1.1.2(@types/react@18.2.14)(react@18.2.0): @@ -13470,7 +14049,7 @@ packages: '@types/react': 18.2.14 detect-node-es: 1.1.0 react: 18.2.0 - tslib: 2.6.1 + tslib: 2.6.2 dev: false /use-sync-external-store@1.2.0(react@18.2.0): @@ -13610,7 +14189,7 @@ packages: abitype: 0.9.8(typescript@5.1.3) isomorphic-ws: 5.0.0(ws@8.13.0) typescript: 5.1.3 - ws: 8.13.0(bufferutil@4.0.7)(utf-8-validate@5.0.10) + ws: 8.13.0 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -13696,7 +14275,7 @@ packages: postcss: 8.4.28 rollup: 3.28.0 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: true /vitest@0.32.2: @@ -13778,8 +14357,8 @@ packages: - supports-color dev: true - /wagmi@1.4.5(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.3)(viem@1.12.2): - resolution: {integrity: sha512-Ph62E6cO5n2Z8Z5LTyZrkaNprxTsbC4w0qZJT4OJdXrEELziI8z/b4FO6amVFXdu2rDp/wpvF56e4mhKC8/Kdw==} + /wagmi@1.4.12(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0)(typescript@5.1.3)(viem@1.12.2): + resolution: {integrity: sha512-QRxpjhdMlZmbYTfn9VQkQMKq+l3kwA1O7tF10vaykPrjbGX+IIlyn72ib9oqW9BfQO7n/Sf/mnVz1zbxRhGPWA==} peerDependencies: react: '>=17.0.0' typescript: '>=5.0.4' @@ -13791,19 +14370,29 @@ packages: '@tanstack/query-sync-storage-persister': 4.32.6 '@tanstack/react-query': 4.32.6(react-dom@18.2.0)(react@18.2.0) '@tanstack/react-query-persist-client': 4.32.6(@tanstack/react-query@4.32.6) - '@wagmi/core': 1.4.5(@types/react@18.2.14)(react@18.2.0)(typescript@5.1.3)(viem@1.12.2) + '@wagmi/core': 1.4.12(@types/react@18.2.14)(react@18.2.0)(typescript@5.1.3)(viem@1.12.2) abitype: 0.8.7(typescript@5.1.3) react: 18.2.0 typescript: 5.1.3 use-sync-external-store: 1.2.0(react@18.2.0) viem: 1.12.2(typescript@5.1.3) transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@netlify/blobs' + - '@planetscale/database' - '@react-native-async-storage/async-storage' - '@types/react' + - '@upstash/redis' + - '@vercel/kv' - bufferutil - encoding - immer - - lokijs - react-dom - react-native - supports-color @@ -13869,8 +14458,8 @@ packages: engines: {node: '>=10.13.0'} dev: true - /webpack@5.88.2: - resolution: {integrity: sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==} + /webpack@5.89.0: + resolution: {integrity: sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -13879,17 +14468,17 @@ packages: webpack-cli: optional: true dependencies: - '@types/eslint-scope': 3.7.4 - '@types/estree': 1.0.1 + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.5 '@webassemblyjs/ast': 1.11.6 '@webassemblyjs/wasm-edit': 1.11.6 '@webassemblyjs/wasm-parser': 1.11.6 - acorn: 8.10.0 - acorn-import-assertions: 1.9.0(acorn@8.10.0) - browserslist: 4.21.10 + acorn: 8.11.2 + acorn-import-assertions: 1.9.0(acorn@8.11.2) + browserslist: 4.22.2 chrome-trace-event: 1.0.3 enhanced-resolve: 5.15.0 - es-module-lexer: 1.3.0 + es-module-lexer: 1.4.1 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -13900,7 +14489,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.9(webpack@5.88.2) + terser-webpack-plugin: 5.3.9(webpack@5.89.0) watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -13950,7 +14539,6 @@ packages: hasBin: true dependencies: isexe: 2.0.0 - dev: true /why-is-node-running@2.2.2: resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} @@ -14021,9 +14609,35 @@ packages: optional: true dev: false - /ws@8.13.0(bufferutil@4.0.7)(utf-8-validate@5.0.10): + /ws@8.13.0: resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /ws@8.15.0: + resolution: {integrity: sha512-H/Z3H55mrcrgjFwI+5jKavgXvwQLtfPCUEp6pi35VhoB0pfcHnSoyuTzkBEZpzq49g1193CUEwIvmsjcotenYw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /ws@8.15.1(bufferutil@4.0.8)(utf-8-validate@5.0.10): + resolution: {integrity: sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==} + engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 utf-8-validate: '>=5.0.2' @@ -14033,7 +14647,7 @@ packages: utf-8-validate: optional: true dependencies: - bufferutil: 4.0.7 + bufferutil: 4.0.8 utf-8-validate: 5.0.10 dev: false @@ -14117,8 +14731,8 @@ packages: engines: {node: '>=12.20'} dev: true - /zustand@4.4.1(@types/react@18.2.14)(react@18.2.0): - resolution: {integrity: sha512-QCPfstAS4EBiTQzlaGP1gmorkh/UL1Leaj2tdj+zZCZ/9bm0WS7sI2wnfD5lpOszFqWJ1DcPnGoY8RDL61uokw==} + /zustand@4.4.7(@types/react@18.2.14)(react@18.2.0): + resolution: {integrity: sha512-QFJWJMdlETcI69paJwhSMJz7PPWjVP8Sjhclxmxmxv/RYI7ZOvR5BHX+ktH0we9gTWQMxcne8q1OY8xxz604gw==} engines: {node: '>=12.7.0'} peerDependencies: '@types/react': '>=16.8' @@ -14140,3 +14754,7 @@ packages: /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} dev: true + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false diff --git a/public/configs/cctp.json b/public/configs/cctp.json index 61bd08a..df65617 100644 --- a/public/configs/cctp.json +++ b/public/configs/cctp.json @@ -1,61 +1,12 @@ [ - { - "chainId": "42161", - "tokenAddress": "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8", - "name": "Arbitrum" - }, - { - "chainId": "43114", - "tokenAddress": "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E", - "name": "Avalanche" - }, - { - "chainId": "8453", - "tokenAddress": "0x66627F389ae46D881773B7131139b2411980E09E", - "name": "Base" - }, { "chainId": "1", "tokenAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", "name": "Ethereum" }, - { - "chainId": "10", - "tokenAddress": "0x7F5c764cBc14f9669B88837ca1490cCa17c31607", - "name": "OP Mainnet" - }, - { - "chainId": "421613", - "tokenAddress": "0xfd064a18f3bf249cf1f87fc203e90d8f650f2d63", - "name": "Arbitrum Goerli" - }, - { - "chainId": "43113", - "tokenAddress": "0x5425890298aed601595a70AB815c96711a31Bc65", - "name": "Avalanche Fuji" - }, - { - "chainId": "84531", - "tokenAddress": "0xf175520c52418dfe19c8098071a252da48cd1c19", - "name": "Base Goerli" - }, { "chainId": "5", "tokenAddress": "0x07865c6E87B9F70255377e024ace6630C1Eaa37F", "name": "Ethereum Goerli" - }, - { - "chainId": "grand-1", - "tokenAddress": "uusdc", - "name": "Noble Testnet" - }, - { - "chainId": "420", - "tokenAddress": "0xe05606174bac4a6364b31bd0eca4bf4dd368f8c6", - "name": "OP Goerli" - }, - { - "chainId": "103", - "name": "Solana Devnet" } ] \ No newline at end of file diff --git a/public/configs/documentation.json b/public/configs/documentation.json new file mode 100644 index 0000000..cad14ef --- /dev/null +++ b/public/configs/documentation.json @@ -0,0 +1,16 @@ +{ + "tradingRewardsFAQs": [ + { + "questionLocalizationKey": "APP.TRADING_REWARDS.FAQ_WHO_IS_ELIGIBLE_QUESTION", + "answerLocalizationKey": "APP.TRADING_REWARDS.FAQ_WHO_IS_ELIGIBLE_ANSWER" + }, + { + "questionLocalizationKey": "APP.TRADING_REWARDS.FAQ_HOW_DO_TRADING_REWARDS_WORK_QUESTION", + "answerLocalizationKey": "APP.TRADING_REWARDS.FAQ_HOW_DO_TRADING_REWARDS_WORK_ANSWER" + }, + { + "questionLocalizationKey": "APP.TRADING_REWARDS.FAQ_HOW_DO_I_CLAIM_MY_REWARDS_QUESTION", + "answerLocalizationKey": "APP.TRADING_REWARDS.FAQ_HOW_DO_I_CLAIM_MY_REWARDS_ANSWER" + } + ] +} diff --git a/public/configs/env.json b/public/configs/env.json index bbd5982..1d10cae 100644 --- a/public/configs/env.json +++ b/public/configs/env.json @@ -42,7 +42,7 @@ "ethereumChainId": "5", "dydxChainId": "dydxprotocol-testnet", "chainName": "dYdX Chain", - "chainLogo": "dydx-chain.png", + "chainLogo": "/dydx-chain.png", "squidIntegratorId": "dYdX-api", "isMainNet": false, "tokens": { @@ -71,7 +71,7 @@ "https://validator.v4dev.dydx.exchange" ], "0xsquid": "https://testnet.api.0xsquid.com", - "nobleValidator": "https://rpc.testnet.noble.strange.love", + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/", "faucet": "https://faucet.v4dev.dydx.exchange" }, "links": { @@ -89,7 +89,7 @@ "governanceLearnMore": "https://help.dydx.exchange", "stakingLearnMore": "https://help.dydx.exchange", "keplrDashboard": "https://testnet.keplr.app/", - "accountExportLearnMore": "https://help.dydx.exchange", + "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" }, "wallets": { @@ -116,7 +116,7 @@ "ethereumChainId": "5", "dydxChainId": "dydxprotocol-testnet", "chainName": "dYdX Chain", - "chainLogo": "dydx-chain.png", + "chainLogo": "/dydx-chain.png", "squidIntegratorId": "dYdX-api", "isMainNet": false, "tokens": { @@ -145,7 +145,7 @@ "http://54.92.118.111" ], "0xsquid": "https://testnet.api.0xsquid.com", - "nobleValidator": "https://rpc.testnet.noble.strange.love" + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/" }, "links": { "tos": "https://dydx.exchange/v4-terms", @@ -162,7 +162,7 @@ "governanceLearnMore": "https://help.dydx.exchange", "stakingLearnMore": "https://help.dydx.exchange", "keplrDashboard": "https://testnet.keplr.app/", - "accountExportLearnMore": "https://help.dydx.exchange", + "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" }, "wallets": { @@ -189,7 +189,7 @@ "ethereumChainId": "5", "dydxChainId": "dydxprotocol-testnet", "chainName": "dYdX Chain", - "chainLogo": "dydx-chain.png", + "chainLogo": "/dydx-chain.png", "squidIntegratorId": "dYdX-api", "isMainNet": false, "tokens": { @@ -218,7 +218,7 @@ "http://validator.v4dev4.dydx.exchange" ], "0xsquid": "https://testnet.api.0xsquid.com", - "nobleValidator": "https://rpc.testnet.noble.strange.love" + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/" }, "links": { "tos": "https://dydx.exchange/v4-terms", @@ -235,7 +235,7 @@ "governanceLearnMore": "https://help.dydx.exchange", "stakingLearnMore": "https://help.dydx.exchange", "keplrDashboard": "https://testnet.keplr.app/", - "accountExportLearnMore": "https://help.dydx.exchange", + "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" }, "wallets": { @@ -262,7 +262,7 @@ "ethereumChainId": "5", "dydxChainId": "dydxprotocol-testnet", "chainName": "dYdX Chain", - "chainLogo": "dydx-chain.png", + "chainLogo": "/dydx-chain.png", "squidIntegratorId": "dYdX-api", "isMainNet": false, "tokens": { @@ -291,7 +291,7 @@ "http://18.223.78.50" ], "0xsquid": "https://testnet.api.0xsquid.com", - "nobleValidator": "https://rpc.testnet.noble.strange.love" + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/" }, "links": { "tos": "https://dydx.exchange/v4-terms", @@ -308,7 +308,7 @@ "governanceLearnMore": "https://help.dydx.exchange", "stakingLearnMore": "https://help.dydx.exchange", "keplrDashboard": "https://testnet.keplr.app/", - "accountExportLearnMore": "https://help.dydx.exchange", + "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" }, "wallets": { @@ -335,7 +335,7 @@ "ethereumChainId": "5", "dydxChainId": "dydxprotocol-testnet", "chainName": "dYdX Chain", - "chainLogo": "dydx-chain.png", + "chainLogo": "/dydx-chain.png", "squidIntegratorId": "dYdX-api", "isMainNet": false, "tokens": { @@ -365,7 +365,7 @@ "https://validator.v4staging.dydx.exchange" ], "0xsquid": "https://testnet.api.squidrouter.com", - "nobleValidator": "https://rpc.testnet.noble.strange.love" + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/" }, "links": { "tos": "https://dydx.exchange/v4-terms", @@ -383,7 +383,7 @@ "governanceLearnMore": "https://help.dydx.exchange", "stakingLearnMore": "https://help.dydx.exchange", "keplrDashboard": "https://testnet.keplr.app/", - "accountExportLearnMore": "https://help.dydx.exchange", + "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" }, "wallets": { @@ -410,7 +410,7 @@ "ethereumChainId": "5", "dydxChainId": "dydxprotocol-testnet", "chainName": "dYdX Chain", - "chainLogo": "dydx-chain.png", + "chainLogo": "/dydx-chain.png", "squidIntegratorId": "dYdX-api", "isMainNet": false, "tokens": { @@ -440,7 +440,7 @@ "https://validator.v4staging.dydx.exchange" ], "0xsquid": "https://testnet.api.squidrouter.com", - "nobleValidator": "https://rpc.testnet.noble.strange.love" + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/" }, "links": { "tos": "https://dydx.exchange/v4-terms", @@ -483,7 +483,7 @@ "ethereumChainId": "5", "dydxChainId": "dydxprotocol-testnet", "chainName": "dYdX Chain", - "chainLogo": "dydx-chain.png", + "chainLogo": "/dydx-chain.png", "squidIntegratorId": "dYdX-api", "isMainNet": false, "tokens": { @@ -513,7 +513,7 @@ "https://validator-uswest1.v4staging.dydx.exchange" ], "0xsquid": "https://testnet.api.squidrouter.com", - "nobleValidator": "https://rpc.testnet.noble.strange.love" + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/" }, "links": { "tos": "https://dydx.exchange/v4-terms", @@ -531,7 +531,7 @@ "governanceLearnMore": "https://help.dydx.exchange", "stakingLearnMore": "https://help.dydx.exchange", "keplrDashboard": "https://testnet.keplr.app/", - "accountExportLearnMore": "https://help.dydx.exchange", + "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" }, "wallets": { @@ -558,7 +558,7 @@ "ethereumChainId": "5", "dydxChainId": "dydx-testnet-4", "chainName": "dYdX Chain", - "chainLogo": "dydx-chain.png", + "chainLogo": "/dydx-chain.png", "squidIntegratorId": "dYdX-api", "isMainNet": false, "tokens": { @@ -591,7 +591,7 @@ "https://dydx-rpc.liquify.com/api=8878132/dydx" ], "0xsquid": "https://testnet.api.squidrouter.com", - "nobleValidator": "https://rpc.testnet.noble.strange.love", + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/", "faucet": "https://faucet.v4testnet.dydx.exchange" }, "links": { @@ -610,7 +610,7 @@ "governanceLearnMore": "https://help.dydx.exchange", "stakingLearnMore": "https://help.dydx.exchange", "keplrDashboard": "https://testnet.keplr.app/", - "accountExportLearnMore": "https://help.dydx.exchange", + "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" }, "wallets": { @@ -637,7 +637,7 @@ "ethereumChainId": "5", "dydxChainId": "dydx-testnet-4", "chainName": "dYdX Chain", - "chainLogo": "dydx-chain.png", + "chainLogo": "/dydx-chain.png", "squidIntegratorId": "dYdX-api", "isMainNet": false, "tokens": { @@ -666,7 +666,7 @@ "https://validator.v4testnet.dydx.exchange" ], "0xsquid": "https://testnet.api.squidrouter.com", - "nobleValidator": "https://rpc.testnet.noble.strange.love", + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/", "faucet": "https://faucet.v4testnet.dydx.exchange" }, "links": { @@ -686,7 +686,7 @@ "governanceLearnMore": "https://help.dydx.exchange", "stakingLearnMore": "https://help.dydx.exchange", "keplrDashboard": "https://testnet.keplr.app/", - "accountExportLearnMore": "https://help.dydx.exchange", + "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" }, "wallets": { @@ -713,7 +713,7 @@ "ethereumChainId": "5", "dydxChainId": "dydx-testnet-4", "chainName": "dYdX Chain", - "chainLogo": "dydx-chain.png", + "chainLogo": "/dydx-chain.png", "squidIntegratorId": "dYdX-api", "isMainNet": false, "tokens": { @@ -742,7 +742,7 @@ "https://dydx-testnet.nodefleet.org" ], "0xsquid": "https://testnet.api.squidrouter.com", - "nobleValidator": "https://rpc.testnet.noble.strange.love", + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/", "faucet": "https://faucet.v4testnet.dydx.exchange" }, "links": { @@ -762,7 +762,7 @@ "governanceLearnMore": "https://help.dydx.exchange", "stakingLearnMore": "https://help.dydx.exchange", "keplrDashboard": "https://testnet.keplr.app/", - "accountExportLearnMore": "https://help.dydx.exchange", + "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" }, "wallets": { @@ -789,7 +789,7 @@ "ethereumChainId": "5", "dydxChainId": "dydx-testnet-4", "chainName": "dYdX Chain", - "chainLogo": "dydx-chain.png", + "chainLogo": "/dydx-chain.png", "squidIntegratorId": "dYdX-api", "isMainNet": false, "tokens": { @@ -818,7 +818,7 @@ "https://test-dydx.kingnodes.com" ], "0xsquid": "https://testnet.api.squidrouter.com", - "nobleValidator": "https://rpc.testnet.noble.strange.love", + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/", "faucet": "https://faucet.v4testnet.dydx.exchange" }, "links": { @@ -838,7 +838,7 @@ "governanceLearnMore": "https://help.dydx.exchange", "stakingLearnMore": "https://help.dydx.exchange", "keplrDashboard": "https://testnet.keplr.app/", - "accountExportLearnMore": "https://help.dydx.exchange", + "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" }, "wallets": { @@ -865,7 +865,7 @@ "ethereumChainId": "5", "dydxChainId": "dydx-testnet-4", "chainName": "dYdX Chain", - "chainLogo": "dydx-chain.png", + "chainLogo": "/dydx-chain.png", "squidIntegratorId": "dYdX-api", "isMainNet": false, "tokens": { @@ -894,7 +894,7 @@ "https://dydx-rpc.liquify.com/api=8878132/dydx" ], "0xsquid": "https://testnet.api.squidrouter.com", - "nobleValidator": "https://rpc.testnet.noble.strange.love", + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/", "faucet": "https://faucet.v4testnet.dydx.exchange" }, "links": { @@ -914,7 +914,7 @@ "governanceLearnMore": "https://help.dydx.exchange", "stakingLearnMore": "https://help.dydx.exchange", "keplrDashboard": "https://testnet.keplr.app/", - "accountExportLearnMore": "https://help.dydx.exchange", + "accountExportLearnMore": "https://help.dydx.exchange/en/articles/8565867-secret-phrase-on-dydx-chain", "walletLearnMore": "https://www.dydx.academy/video/defi-wallet" }, "wallets": { @@ -941,7 +941,7 @@ "ethereumChainId": "5", "dydxChainId": "dydx-testnet-4", "chainName": "dYdX Chain", - "chainLogo": "dydx-chain.png", + "chainLogo": "/dydx-chain.png", "squidIntegratorId": "dYdX-api", "isMainNet": false, "tokens": { @@ -970,7 +970,7 @@ "https://dydx-testnet-rpc.polkachu.com/" ], "0xsquid": "https://testnet.api.squidrouter.com", - "nobleValidator": "https://rpc.testnet.noble.strange.love", + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/", "faucet": "https://faucet.v4testnet.dydx.exchange" }, "links": { @@ -1008,7 +1008,7 @@ "ethereumChainId": "5", "dydxChainId": "dydx-testnet-4", "chainName": "dYdX Chain", - "chainLogo": "dydx-chain.png", + "chainLogo": "/dydx-chain.png", "squidIntegratorId": "dYdX-api", "isMainNet": false, "tokens": { @@ -1037,7 +1037,7 @@ "https://dydx-testnet-full-rpc.public.blastapi.io/" ], "0xsquid": "https://testnet.api.squidrouter.com", - "nobleValidator": "https://rpc.testnet.noble.strange.love", + "nobleValidator": "https://noble-testnet-rpc.polkachu.com/", "faucet": "https://faucet.v4testnet.dydx.exchange" }, "links": { @@ -1084,7 +1084,7 @@ "ethereumChainId": "1", "dydxChainId": "[mainnet chain id]", "chainName": "dYdX Chain", - "chainLogo": "dydx-chain.png", + "chainLogo": "/dydx-chain.png", "squidIntegratorId": "[mainnet squid integrator id]", "isMainNet": true, "tokens": { @@ -1126,7 +1126,7 @@ "blogs": "[HTTP link to blogs, can be null]", "foundation": "[HTTP link to foundation, can be null]", "initialMarginFractionLearnMore": "[HTTP link to initial margin fraction learn more, can be null]", - "reduceOnlyLearnMore": "https://help.dydx.exchange/articles/6345793-reduce-only-orders", + "reduceOnlyLearnMore": "[HTTP link to reduce-only learn more, can be null]", "documentation": "[HTTP link to documentation, can be null]", "community": "[HTTP link to community, can be null]", "help": "[HTTP link to help page, can be null]", diff --git a/public/configs/markets.json b/public/configs/markets.json index f887f2b..e81e812 100644 --- a/public/configs/markets.json +++ b/public/configs/markets.json @@ -1,454 +1,360 @@ { - "1INCH-USD":{ - "name":"1inch", - "tags":[ - "Defi" - ], - "websiteLink":"https://1inch.io/", - "whitepaperLink":"https://github.com/1inch", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/1inch/" - }, - "AAVE-USD":{ - "name":"Aave", - "tags":[ - "Defi" - ], - "websiteLink":"https://aave.com/", - "whitepaperLink":"https://github.com/aave/protocol-v2/blob/master/aave-v2-whitepaper.pdf", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/aave/" - }, - "ADA-USD":{ - "name":"Cardano", - "tags":[ - "Layer 1" - ], - "websiteLink":"https://cardano.org/", - "whitepaperLink":"https://why.cardano.org/en/introduction/motivation/", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/cardano/" - }, - "ALGO-USD":{ - "name":"Algorand", - "tags":[ - "Layer 1" - ], - "websiteLink":"https://algorand.com/", - "whitepaperLink":"https://algorand.com/technology/white-papers", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/algorand/" - }, - "APE-USD":{ - "name":"ApeCoin", - "tags":[ - - ], - "websiteLink":"https://apecoin.com/", - "whitepaperLink":"https://apecoin.com/about", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/apecoin-ape/" - }, - "APT-USD":{ - "name":"Aptos", - "tags":[ - "Layer 1" - ], - "websiteLink":"https://aptoslabs.com/", - "whitepaperLink":"https://aptos.dev/aptos-white-paper/", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/aptos/" - }, - "ARB-USD":{ - "name":"Arbitrum", - "tags":[ - - ], - "websiteLink":"https://arbitrum.io/", - "whitepaperLink":"https://github.com/OffchainLabs/nitro", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/arbitrum/" - }, - "ATOM-USD":{ - "name":"Cosmos", - "tags":[ - "Layer 1" - ], - "websiteLink":"https://cosmos.network/", - "whitepaperLink":"https://v1.cosmos.network/resources/whitepaper", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/cosmos/" - }, - "AVAX-USD":{ - "name":"Avalanche", - "tags":[ - "Layer 1" - ], - "websiteLink":"https://www.avalabs.org/", - "whitepaperLink":"https://assets.website-files.com/5d80307810123f5ffbb34d6e/6008d7bbf8b10d1eb01e7e16_Avalanche%20Platform%20Whitepaper.pdf", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/avalanche/" - }, - "BCH-USD":{ - "name":"Bitcoin Cash", - "tags":[ - "Layer 1" - ], - "websiteLink":"https://bitcoincash.org/", - "whitepaperLink":"https://bitcoincash.org/", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/bitcoin-cash/" - }, - "BLUR-USD":{ - "name":"Blur", - "tags":[ - - ], - "websiteLink":"https://blur.io/", - "whitepaperLink":"https://docs.blur.foundation/", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/blur-token/" - }, - "CELO-USD":{ - "name":"Celo", - "tags":[ - - ], - "websiteLink":"https://celo.org", - "whitepaperLink":"https://docs.celo.org", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/celo/" - }, - "BTC-USD":{ - "name":"Bitcoin", - "tags":[ - "Layer 1" - ], - "websiteLink":"https://bitcoin.org/", - "whitepaperLink":"https://bitcoin.org/bitcoin.pdf", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/bitcoin/" - }, - "COMP-USD":{ - "name":"Compound", - "tags":[ - "Defi" - ], - "websiteLink":"https://compound.finance/", - "whitepaperLink":"https://compound.finance/documents/Compound.Whitepaper.pdf", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/compound/" - }, - "CRV-USD":{ - "name":"Curve", - "tags":[ - "Governance" - ], - "websiteLink":"https://curve.fi/", - "whitepaperLink":"https://curve.fi/whitepaper", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/curve-dao-token/" - }, - "DOGE-USD":{ - "name":"Dogecoin", - "tags":[ - "Layer 1" - ], - "websiteLink":"https://dogecoin.com/", - "whitepaperLink":"https://github.com/dogecoin/dogecoin", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/dogecoin/" - }, - "DOT-USD":{ - "name":"Polkadot", - "tags":[ - "Layer 1" - ], - "websiteLink":"https://polkadot.network/", - "whitepaperLink":"https://polkadot.network/PolkaDotPaper.pdf", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/polkadot-new/" - }, - "ENJ-USD":{ - "name":"Enjin", - "tags":[ - - ], - "websiteLink":"https://enjin.io/", - "whitepaperLink":"https://cdn.enjin.io/downloads/whitepapers/enjin-coin/en.pdf/", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/enjin-coin/" - }, - "EOS-USD":{ - "name":"EOS", - "tags":[ - "Layer 1" - ], - "websiteLink":"https://eos.io/", - "whitepaperLink":"https://github.com/EOSIO/Documentation/blob/master/TechnicalWhitePaper.md", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/eos/" - }, - "ETC-USD":{ - "name":"Ethereum Classic", - "tags":[ - "Layer 1" - ], - "websiteLink":"https://ethereumclassic.org/", - "whitepaperLink":"https://ethereumclassic.org/why-classic", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/ethereum-classic/" - }, - "ETH-USD":{ - "name":"Ethereum", - "tags":[ - "Layer 1" - ], - "websiteLink":"https://ethereum.org/", - "whitepaperLink":"https://ethereum.org/whitepaper/", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/ethereum/", - "displayStepSize":"0.001", - "displayTickSize":"0.1" - }, - "FIL-USD":{ - "name":"Filecoin", - "tags":[ - "Layer 1" - ], - "websiteLink":"https://filecoin.io/", - "whitepaperLink":"https://filecoin.io/filecoin.pdf", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/filecoin/" - }, - "HNT-USD":{ - "name":"Helium", - "tags":[ - "Layer 1" - ], - "websiteLink":"https://www.helium.com", - "whitepaperLink":"http://whitepaper.helium.com", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/helium/" - }, - "ICP-USD":{ - "name":"Internet Computer", - "tags":[ - "Layer 1" - ], - "websiteLink":"https://dfinity.org", - "whitepaperLink":"https://dfinity.org/whitepaper.pdf", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/internet-computer/" - }, - "LDO-USD":{ - "name":"Lido DAO", - "tags":[ - "Defi" - ], - "websiteLink":"https://lido.fi/", - "whitepaperLink":"https://lido.fi/static/Lido:Ethereum-Liquid-Staking.pdf", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/lido-dao/" - }, - "LINK-USD":{ - "name":"Chainlink", - "tags":[ - "Defi" - ], - "websiteLink":"https://chain.link/", - "whitepaperLink":"https://link.smartcontract.com/whitepaper", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/chainlink/" - }, - "LTC-USD":{ - "name":"Litecoin", - "tags":[ - "Layer 1" - ], - "websiteLink":"https://litecoin.org/", - "whitepaperLink":"https://litecoin.info/index.php/Main_Page", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/litecoin/" - }, - "MATIC-USD":{ - "name":"Polygon", - "tags":[ - "Layer 2" - ], - "websiteLink":"https://polygon.technology/", - "whitepaperLink":"https://polygon.technology/lightpaper-polygon.pdf", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/polygon/" - }, - "MKR-USD":{ - "name":"Maker", - "tags":[ - "Governance" - ], - "websiteLink":"https://makerdao.com", - "whitepaperLink":"https://makerdao.com/whitepaper", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/maker/" - }, - "NEAR-USD":{ - "name":"NEAR Protocol", - "tags":[ - "Layer 1" - ], - "websiteLink":"https://near.org", - "whitepaperLink":"https://near.org/papers/the-official-near-white-paper/", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/near-protocol/" - }, - "OP-USD":{ - "name":"Optimism", - "tags":[ - - ], - "websiteLink":"https://www.optimism.io/", - "whitepaperLink":"https://github.com/ethereum-optimism", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/optimism-ethereum/" - }, - "PEPE-USD":{ - "name":"Pepe", - "tags":[ - - ], - "websiteLink":"https://www.pepe.vip/", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/pepe/" - }, - "RUNE-USD":{ - "name":"THORChain", - "tags":[ - "Layer 1" - ], - "websiteLink":"https://thorchain.org", - "whitepaperLink":"https://whitepaper.io/document/709/thorchain-whitepaper", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/thorchain/" - }, - "SEI-USD":{ - "name":"Sei", - "tags":[ - "Layer 1", - "Defi" - ], - "websiteLink":"https://www.sei.io/", - "whitepaperLink":"https://github.com/sei-protocol/sei-chain/blob/3c9576fee3494ce039df684624f918dd8066ba3f/whitepaper/Sei_Whitepaper.pdf", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/sei/" - }, - "SHIB-USD":{ - "name":"Shiba Inu", - "tags":[ - - ], - "websiteLink":"https://shibatoken.com/", - "whitepaperLink":"https://docs.shibatoken.com/", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/shiba-inu/" - }, - "SNX-USD":{ - "name":"Synthetix", - "tags":[ - "Defi" - ], - "websiteLink":"https://synthetix.io/", - "whitepaperLink":"https://docs.synthetix.io/litepaper", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/synthetix-network-token/" - }, - "SOL-USD":{ - "name":"Solana", - "tags":[ - "Layer 1" - ], - "websiteLink":"https://solana.com/", - "whitepaperLink":"https://solana.com/solana-whitepaper.pdf", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/solana/" - }, - "SUI-USD":{ - "name":"Sui", - "tags":[ - "Layer 1" - ], - "websiteLink":"https://sui.io/", - "whitepaperLink":"https://github.com/MystenLabs", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/sui/" - }, - "SUSHI-USD":{ - "name":"Sushi", - "tags":[ - "Defi" - ], - "websiteLink":"https://sushi.com/", - "whitepaperLink":"https://docs.sushi.com/", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/sushiswap/" - }, - "TRX-USD":{ - "name":"TRON", - "tags":[ - "Defi" - ], - "websiteLink":"https://tron.network/", - "whitepaperLink":"https://tron.network/static/doc/white_paper_v_2_0.pdf", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/tron/" - }, - "UMA-USD":{ - "name":"UMA", - "tags":[ - "Defi" - ], - "websiteLink":"https://umaproject.org/", - "whitepaperLink":"https://github.com/UMAprotocol/whitepaper", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/uma/" - }, - "UNI-USD":{ - "name":"Uniswap", - "tags":[ - "Defi" - ], - "websiteLink":"https://uniswap.org/", - "whitepaperLink":"https://uniswap.org/whitepaper-v3.pdf", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/uniswap/" - }, - "WLD-USD":{ - "name":"Worldcoin", - "tags":[ - - ], - "websiteLink":"https://worldcoin.org/", - "whitepaperLink":"https://whitepaper.worldcoin.org/", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/worldcoin-org/" - }, - "XLM-USD":{ - "name":"Stellar", - "tags":[ - "Layer 1" - ], - "websiteLink":"https://www.stellar.org/", - "whitepaperLink":"https://www.stellar.org/papers/stellar-consensus-protocol", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/stellar/" - }, - "XMR-USD":{ - "name":"Monero", - "tags":[ - "Layer 1" - ], - "websiteLink":"https://www.getmonero.org/", - "whitepaperLink":"https://www.getmonero.org/resources/research-lab/", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/monero/" - }, - "XRP-USD":{ - "name":"Ripple", - "tags":[ - "Layer 1" - ], - "websiteLink":"https://ripple.com/currency/", - "whitepaperLink":"https://github.com/ripple", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/xrp/" - }, - "XTZ-USD":{ - "name":"Tezos", - "tags":[ - "Layer 1" - ], - "websiteLink":"https://tezos.com", - "whitepaperLink":"https://tezos.com/whitepaper.pdf", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/tezos/" - }, - "YFI-USD":{ - "name":"Yearn", - "tags":[ - "Defi" - ], - "websiteLink":"https://yearn.finance/", - "whitepaperLink":"https://docs.yearn.finance/", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/yearn-finance/" - }, - "ZEC-USD":{ - "name":"Zcash", - "tags":[ - "Layer 1" - ], - "websiteLink":"https://z.cash/", - "whitepaperLink":"https://z.cash/technology/", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/zcash/" - }, - "ZRX-USD":{ - "name":"0x", - "tags":[ - "Defi" - ], - "websiteLink":"https://0x.org/", - "whitepaperLink":"https://0x.org/pdfs/0x_white_paper.pdf", - "coinMarketCapsLink":"https://coinmarketcap.com/currencies/0x/" - } - } \ No newline at end of file + "1INCH-USD": { + "name": "1inch", + "tags": ["Defi"], + "websiteLink": "https://1inch.io/", + "whitepaperLink": "https://github.com/1inch", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/1inch/" + }, + "AAVE-USD": { + "name": "Aave", + "tags": ["Defi"], + "websiteLink": "https://aave.com/", + "whitepaperLink": "https://github.com/aave/protocol-v2/blob/master/aave-v2-whitepaper.pdf", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/aave/" + }, + "ADA-USD": { + "name": "Cardano", + "tags": ["Layer 1"], + "websiteLink": "https://cardano.org/", + "whitepaperLink": "https://why.cardano.org/en/introduction/motivation/", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/cardano/" + }, + "ALGO-USD": { + "name": "Algorand", + "tags": ["Layer 1"], + "websiteLink": "https://algorand.com/", + "whitepaperLink": "https://algorand.com/technology/white-papers", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/algorand/" + }, + "APE-USD": { + "name": "ApeCoin", + "tags": [], + "websiteLink": "https://apecoin.com/", + "whitepaperLink": "https://apecoin.com/about", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/apecoin-ape/" + }, + "APT-USD": { + "name": "Aptos", + "tags": ["Layer 1"], + "websiteLink": "https://aptoslabs.com/", + "whitepaperLink": "https://aptos.dev/aptos-white-paper/", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/aptos/" + }, + "ARB-USD": { + "name": "Arbitrum", + "tags": [], + "websiteLink": "https://arbitrum.io/", + "whitepaperLink": "https://github.com/OffchainLabs/nitro", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/arbitrum/" + }, + "ATOM-USD": { + "name": "Cosmos", + "tags": ["Layer 1"], + "websiteLink": "https://cosmos.network/", + "whitepaperLink": "https://v1.cosmos.network/resources/whitepaper", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/cosmos/" + }, + "AVAX-USD": { + "name": "Avalanche", + "tags": ["Layer 1"], + "websiteLink": "https://www.avalabs.org/", + "whitepaperLink": "https://assets.website-files.com/5d80307810123f5ffbb34d6e/6008d7bbf8b10d1eb01e7e16_Avalanche%20Platform%20Whitepaper.pdf", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/avalanche/" + }, + "BCH-USD": { + "name": "Bitcoin Cash", + "tags": ["Layer 1"], + "websiteLink": "https://bitcoincash.org/", + "whitepaperLink": "https://bitcoincash.org/", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/bitcoin-cash/" + }, + "BLUR-USD": { + "name": "Blur", + "tags": [], + "websiteLink": "https://blur.io/", + "whitepaperLink": "https://docs.blur.foundation/", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/blur-token/" + }, + "CELO-USD": { + "name": "Celo", + "tags": [], + "websiteLink": "https://celo.org", + "whitepaperLink": "https://docs.celo.org", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/celo/" + }, + "BTC-USD": { + "name": "Bitcoin", + "tags": ["Layer 1"], + "websiteLink": "https://bitcoin.org/", + "whitepaperLink": "https://bitcoin.org/bitcoin.pdf", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/bitcoin/" + }, + "COMP-USD": { + "name": "Compound", + "tags": ["Defi"], + "websiteLink": "https://compound.finance/", + "whitepaperLink": "https://compound.finance/documents/Compound.Whitepaper.pdf", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/compound/" + }, + "CRV-USD": { + "name": "Curve", + "tags": ["Governance"], + "websiteLink": "https://curve.fi/", + "whitepaperLink": "https://curve.fi/whitepaper", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/curve-dao-token/" + }, + "DOGE-USD": { + "name": "Dogecoin", + "tags": ["Layer 1"], + "websiteLink": "https://dogecoin.com/", + "whitepaperLink": "https://github.com/dogecoin/dogecoin", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/dogecoin/" + }, + "DOT-USD": { + "name": "Polkadot", + "tags": ["Layer 1"], + "websiteLink": "https://polkadot.network/", + "whitepaperLink": "https://polkadot.network/PolkaDotPaper.pdf", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/polkadot-new/" + }, + "ENJ-USD": { + "name": "Enjin", + "tags": [], + "websiteLink": "https://enjin.io/", + "whitepaperLink": "https://cdn.enjin.io/downloads/whitepapers/enjin-coin/en.pdf/", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/enjin-coin/" + }, + "EOS-USD": { + "name": "EOS", + "tags": ["Layer 1"], + "websiteLink": "https://eos.io/", + "whitepaperLink": "https://github.com/EOSIO/Documentation/blob/master/TechnicalWhitePaper.md", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/eos/" + }, + "ETC-USD": { + "name": "Ethereum Classic", + "tags": ["Layer 1"], + "websiteLink": "https://ethereumclassic.org/", + "whitepaperLink": "https://ethereumclassic.org/why-classic", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/ethereum-classic/" + }, + "ETH-USD": { + "name": "Ethereum", + "tags": ["Layer 1"], + "websiteLink": "https://ethereum.org/", + "whitepaperLink": "https://ethereum.org/whitepaper/", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/ethereum/", + "displayStepSize": "0.001", + "displayTickSize": "0.1" + }, + "FIL-USD": { + "name": "Filecoin", + "tags": ["Layer 1"], + "websiteLink": "https://filecoin.io/", + "whitepaperLink": "https://filecoin.io/filecoin.pdf", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/filecoin/" + }, + "HNT-USD": { + "name": "Helium", + "tags": ["Layer 1"], + "websiteLink": "https://www.helium.com", + "whitepaperLink": "http://whitepaper.helium.com", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/helium/" + }, + "ICP-USD": { + "name": "Internet Computer", + "tags": ["Layer 1"], + "websiteLink": "https://dfinity.org", + "whitepaperLink": "https://dfinity.org/whitepaper.pdf", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/internet-computer/" + }, + "LDO-USD": { + "name": "Lido DAO", + "tags": ["Defi"], + "websiteLink": "https://lido.fi/", + "whitepaperLink": "https://lido.fi/static/Lido:Ethereum-Liquid-Staking.pdf", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/lido-dao/" + }, + "LINK-USD": { + "name": "Chainlink", + "tags": ["Defi"], + "websiteLink": "https://chain.link/", + "whitepaperLink": "https://link.smartcontract.com/whitepaper", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/chainlink/" + }, + "LTC-USD": { + "name": "Litecoin", + "tags": ["Layer 1"], + "websiteLink": "https://litecoin.org/", + "whitepaperLink": "https://litecoin.info/index.php/Main_Page", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/litecoin/" + }, + "MATIC-USD": { + "name": "Polygon", + "tags": ["Layer 2"], + "websiteLink": "https://polygon.technology/", + "whitepaperLink": "https://polygon.technology/lightpaper-polygon.pdf", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/polygon/" + }, + "MKR-USD": { + "name": "Maker", + "tags": ["Governance"], + "websiteLink": "https://makerdao.com", + "whitepaperLink": "https://makerdao.com/whitepaper", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/maker/" + }, + "NEAR-USD": { + "name": "NEAR Protocol", + "tags": ["Layer 1"], + "websiteLink": "https://near.org", + "whitepaperLink": "https://near.org/papers/the-official-near-white-paper/", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/near-protocol/" + }, + "OP-USD": { + "name": "Optimism", + "tags": [], + "websiteLink": "https://www.optimism.io/", + "whitepaperLink": "https://github.com/ethereum-optimism", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/optimism-ethereum/" + }, + "PEPE-USD": { + "name": "Pepe", + "tags": [], + "websiteLink": "https://www.pepe.vip/", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/pepe/" + }, + "RUNE-USD": { + "name": "THORChain", + "tags": ["Layer 1"], + "websiteLink": "https://thorchain.org", + "whitepaperLink": "https://whitepaper.io/document/709/thorchain-whitepaper", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/thorchain/" + }, + "SEI-USD": { + "name": "Sei", + "tags": ["Layer 1", "Defi"], + "websiteLink": "https://www.sei.io/", + "whitepaperLink": "https://github.com/sei-protocol/sei-chain/blob/3c9576fee3494ce039df684624f918dd8066ba3f/whitepaper/Sei_Whitepaper.pdf", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/sei/" + }, + "SHIB-USD": { + "name": "Shiba Inu", + "tags": [], + "websiteLink": "https://shibatoken.com/", + "whitepaperLink": "https://docs.shibatoken.com/", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/shiba-inu/" + }, + "SNX-USD": { + "name": "Synthetix", + "tags": ["Defi"], + "websiteLink": "https://synthetix.io/", + "whitepaperLink": "https://docs.synthetix.io/litepaper", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/synthetix-network-token/" + }, + "SOL-USD": { + "name": "Solana", + "tags": ["Layer 1"], + "websiteLink": "https://solana.com/", + "whitepaperLink": "https://solana.com/solana-whitepaper.pdf", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/solana/" + }, + "SUI-USD": { + "name": "Sui", + "tags": ["Layer 1"], + "websiteLink": "https://sui.io/", + "whitepaperLink": "https://github.com/MystenLabs", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/sui/" + }, + "SUSHI-USD": { + "name": "Sushi", + "tags": ["Defi"], + "websiteLink": "https://sushi.com/", + "whitepaperLink": "https://docs.sushi.com/", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/sushiswap/" + }, + "TIA-USD": { + "name": "Celestia", + "tags": ["Layer 1"], + "websiteLink": "https://celestia.org/", + "whitepaperLink": "https://arxiv.org/pdf/1905.09274.pdf", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/celestia/" + }, + "TRX-USD": { + "name": "TRON", + "tags": ["Defi"], + "websiteLink": "https://tron.network/", + "whitepaperLink": "https://tron.network/static/doc/white_paper_v_2_0.pdf", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/tron/" + }, + "UMA-USD": { + "name": "UMA", + "tags": ["Defi"], + "websiteLink": "https://umaproject.org/", + "whitepaperLink": "https://github.com/UMAprotocol/whitepaper", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/uma/" + }, + "UNI-USD": { + "name": "Uniswap", + "tags": ["Defi"], + "websiteLink": "https://uniswap.org/", + "whitepaperLink": "https://uniswap.org/whitepaper-v3.pdf", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/uniswap/" + }, + "WLD-USD": { + "name": "Worldcoin", + "tags": [], + "websiteLink": "https://worldcoin.org/", + "whitepaperLink": "https://whitepaper.worldcoin.org/", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/worldcoin-org/" + }, + "XLM-USD": { + "name": "Stellar", + "tags": ["Layer 1"], + "websiteLink": "https://www.stellar.org/", + "whitepaperLink": "https://www.stellar.org/papers/stellar-consensus-protocol", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/stellar/" + }, + "XMR-USD": { + "name": "Monero", + "tags": ["Layer 1"], + "websiteLink": "https://www.getmonero.org/", + "whitepaperLink": "https://www.getmonero.org/resources/research-lab/", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/monero/" + }, + "XRP-USD": { + "name": "Ripple", + "tags": ["Layer 1"], + "websiteLink": "https://ripple.com/currency/", + "whitepaperLink": "https://github.com/ripple", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/xrp/" + }, + "XTZ-USD": { + "name": "Tezos", + "tags": ["Layer 1"], + "websiteLink": "https://tezos.com", + "whitepaperLink": "https://tezos.com/whitepaper.pdf", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/tezos/" + }, + "YFI-USD": { + "name": "Yearn", + "tags": ["Defi"], + "websiteLink": "https://yearn.finance/", + "whitepaperLink": "https://docs.yearn.finance/", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/yearn-finance/" + }, + "ZEC-USD": { + "name": "Zcash", + "tags": ["Layer 1"], + "websiteLink": "https://z.cash/", + "whitepaperLink": "https://z.cash/technology/", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/zcash/" + }, + "ZRX-USD": { + "name": "0x", + "tags": ["Defi"], + "websiteLink": "https://0x.org/", + "whitepaperLink": "https://0x.org/pdfs/0x_white_paper.pdf", + "coinMarketCapsLink": "https://coinmarketcap.com/currencies/0x/" + } +} diff --git a/public/currencies/tia.png b/public/currencies/tia.png new file mode 100644 index 0000000..7dc9a4f Binary files /dev/null and b/public/currencies/tia.png differ diff --git a/public/currencies/unavailable.png b/public/currencies/unavailable.png new file mode 100644 index 0000000..922585a Binary files /dev/null and b/public/currencies/unavailable.png differ diff --git a/src/App.tsx b/src/App.tsx index 57d1970..ae59c05 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,4 +1,4 @@ -import { Suspense } from 'react'; +import { lazy, Suspense } from 'react'; import { Navigate, Route, Routes } from 'react-router-dom'; import styled, { AnyStyledComponent, css } from 'styled-components'; import { WagmiConfig } from 'wagmi'; @@ -25,16 +25,6 @@ import { SubaccountProvider } from '@/hooks/useSubaccount'; import { GuardedMobileRoute } from '@/components/GuardedMobileRoute'; -import MarketsPage from '@/pages/markets/Markets'; -import PortfolioPage from '@/pages/portfolio/Portfolio'; -import { AlertsPage } from '@/pages/AlertsPage'; -import ProfilePage from '@/pages/Profile'; -import { SettingsPage } from '@/pages/settings/Settings'; -import TradePage from '@/pages/trade/Trade'; -import { RewardsPage } from '@/pages/rewards/RewardsPage'; -import { TermsOfUsePage } from '@/pages/TermsOfUsePage'; -import { PrivacyPolicyPage } from '@/pages/PrivacyPolicyPage'; - import { HeaderDesktop } from '@/layout/Header/HeaderDesktop'; import { FooterDesktop } from '@/layout/Footer/FooterDesktop'; import { FooterMobile } from '@/layout/Footer/FooterMobile'; @@ -46,11 +36,22 @@ import { config } from '@/lib/wagmi'; import { breakpoints } from '@/styles'; import { layoutMixins } from '@/styles/layoutMixins'; +import { LoadingSpace } from './components/Loading/LoadingSpinner'; import '@/styles/constants.css'; import '@/styles/fonts.css'; import '@/styles/web3modal.css'; +const MarketsPage = lazy(() => import('@/pages/markets/Markets')); +const PortfolioPage = lazy(() => import('@/pages/portfolio/Portfolio')); +const AlertsPage = lazy(() => import('@/pages/AlertsPage')); +const ProfilePage = lazy(() => import('@/pages/Profile')); +const SettingsPage = lazy(() => import('@/pages/settings/Settings')); +const TradePage = lazy(() => import('@/pages/trade/Trade')); +const RewardsPage = lazy(() => import('@/pages/rewards/RewardsPage')); +const TermsOfUsePage = lazy(() => import('@/pages/TermsOfUsePage')); +const PrivacyPolicyPage = lazy(() => import('@/pages/PrivacyPolicyPage')); + const queryClient = new QueryClient(); const Content = () => { @@ -69,7 +70,7 @@ const Content = () => { {isNotTablet && } - + }> } /> diff --git a/src/components/Accordion.tsx b/src/components/Accordion.tsx new file mode 100644 index 0000000..b65c90e --- /dev/null +++ b/src/components/Accordion.tsx @@ -0,0 +1,119 @@ +import styled, { keyframes, type AnyStyledComponent } from 'styled-components'; + +import { Root, Item, Header, Trigger, Content } from '@radix-ui/react-accordion'; + +import { layoutMixins } from '@/styles/layoutMixins'; +import { PlusIcon } from '@/icons'; + +export type AccordionItem = { + header: React.ReactNode; + content: React.ReactNode; +}; + +type AccordionProps = { + items: AccordionItem[]; + className?: string; +}; + +export const Accordion = ({ items, className }: AccordionProps) => ( + + {items.map(({ header, content }, idx) => ( + +
+ + {header} + + + + +
+ {content} +
+ ))} +
+); + +const Styled: Record = {}; + +Styled.Root = styled(Root)` + > *:not(:last-child) { + border-bottom: var(--border-width) solid var(--border-color); + } +`; + +Styled.Item = styled(Item)``; + +Styled.Icon = styled.div` + display: inline-flex; + justify-content: center; + align-items: center; + + width: 2.25rem; + height: 2.25rem; + + --color-border: var(--color-layer-6); + color: var(--color-text-1); + background-color: var(--color-layer-5); + border: solid var(--border-width) var(--color-border); + border-radius: 50%; + font: var(--font-small-book); + + svg { + height: 1.125em; + width: 1.125em; + } +`; + +Styled.Trigger = styled(Trigger)` + ${layoutMixins.spacedRow} + width: 100%; + padding: 1rem 0.75rem; + + color: var(--color-text-1); + text-align: start; + + &:hover { + ${Styled.Icon} { + color: var(--color-text-2); + filter: brightness(1.1); + } + } + + svg { + color: var(--color-text-0); + transition: transform 0.3s var(--ease-out-expo); + } + + &[data-state='open'] svg { + transform: rotate(45deg); + } +`; + +Styled.Content = styled(Content)` + overflow: hidden; + margin: 0 0.75rem 1rem; + + color: var(--color-text-0); + + &[data-state='open'] { + animation: ${keyframes` + from { + height: 0; + } + to { + height: var(--radix-accordion-content-height); + } + `} 0.3s var(--ease-out-expo); + } + + &[data-state='closed'] { + animation: ${keyframes` + from { + height: var(--radix-accordion-content-height); + } + to { + height: 0; + } + `} 0.1s var(--ease-in-expo); + } +`; diff --git a/src/components/AssetIcon.tsx b/src/components/AssetIcon.tsx index 5ecc426..1ea994b 100644 --- a/src/components/AssetIcon.tsx +++ b/src/components/AssetIcon.tsx @@ -45,6 +45,7 @@ const assetIcons = { SOL: '/currencies/sol.png', SUI: '/currencies/sui.png', SUSHI: '/currencies/sushi.png', + TIA: '/currencies/tia.png', TRX: '/currencies/trx.png', UMA: '/currencies/uma.png', UNI: '/currencies/uni.png', @@ -71,8 +72,13 @@ export const AssetIcon = ({ }: { symbol?: Nullable; className?: string; -}) => - isAssetSymbol(symbol) ? : null; +}) => ( + +); const Styled: Record = {}; diff --git a/src/components/CollapsibleTabs.tsx b/src/components/CollapsibleTabs.tsx index a1d7bfa..991f0ac 100644 --- a/src/components/CollapsibleTabs.tsx +++ b/src/components/CollapsibleTabs.tsx @@ -31,10 +31,12 @@ type ElementProps = { }; type StyleProps = { - fullWidthTabs?: boolean; className?: string; + fullWidthTabs?: boolean; }; +export type CollapsibleTabsProps = ElementProps & StyleProps; + export const CollapsibleTabs = ({ defaultValue, items, @@ -43,8 +45,9 @@ export const CollapsibleTabs = ({ onOpenChange, fullWidthTabs, + className, -}: ElementProps & StyleProps) => { +}: CollapsibleTabsProps) => { const [value, setValue] = useState(defaultValue); const currentItem = items.find((item) => item.value === value); @@ -86,8 +89,8 @@ export const CollapsibleTabs = ({ - {items.map(({ value, content }) => ( - + {items.map(({ asChild, value, content }) => ( + {content} ))} @@ -219,7 +222,6 @@ Styled.Header = styled.header` Styled.CollapsibleContent = styled(CollapsibleContent)` ${layoutMixins.stack} - ${layoutMixins.perspectiveArea} box-shadow: none; `; diff --git a/src/components/Icon.tsx b/src/components/Icon.tsx index d5f5d64..d8db86f 100644 --- a/src/components/Icon.tsx +++ b/src/components/Icon.tsx @@ -55,6 +55,7 @@ import { OverviewIcon, PencilIcon, PlayIcon, + PlusIcon, PositionsIcon, PriceChartIcon, PrivacyIcon, @@ -130,6 +131,7 @@ export enum IconName { Overview = 'Overview', Pencil = 'Pencil', Play = 'Play', + Plus = 'Plus', Positions = 'Positions', PriceChart = 'PriceChart', Privacy = 'Privacy', @@ -204,6 +206,7 @@ const icons = { [IconName.Overview]: OverviewIcon, [IconName.Pencil]: PencilIcon, [IconName.Play]: PlayIcon, + [IconName.Plus]: PlusIcon, [IconName.Positions]: PositionsIcon, [IconName.PriceChart]: PriceChartIcon, [IconName.Privacy]: PrivacyIcon, diff --git a/src/components/Input.tsx b/src/components/Input.tsx index b74e4f8..e8d3d75 100644 --- a/src/components/Input.tsx +++ b/src/components/Input.tsx @@ -10,7 +10,7 @@ import { USD_DECIMALS, } from '@/constants/numbers'; -import { BIG_NUMBERS, MustBigNumber } from '@/lib/numbers'; +import { BIG_NUMBERS } from '@/lib/numbers'; import { useLocaleSeparators } from '@/hooks'; export enum InputType { @@ -29,31 +29,38 @@ type StyleProps = { type ElementProps = { type?: InputType; value?: string | number | null; - - allowNegative?: boolean; - decimals?: number; disabled?: boolean; id?: string; - max?: number; onBlur?: () => void; - onChange?: - | Dispatch> - | React.ReactEventHandler - | ((values: NumberFormatValues, e: SourceInfo) => void); onFocus?: () => void; - onInput?: ({ - value, - floatValue, - formattedValue, - }: { - value: string; - floatValue?: number; - formattedValue: string; - }) => void; placeholder?: string; }; -export type InputProps = ElementProps & StyleProps; +type ConditionalProps = + | { + allowNegative?: boolean; + decimals?: number; + max?: number; + onChange?: (values: NumberFormatValues, e: SourceInfo) => void; + onInput?: ({ + value, + floatValue, + formattedValue, + }: { + value: string; + floatValue?: number; + formattedValue: string; + }) => void; + } + | { + allowNegative?: never; + decimals?: never; + max?: never; + onChange?: Dispatch> | React.ReactEventHandler; + onInput?: (e: SyntheticInputEvent) => void; + }; + +export type InputProps = ElementProps & StyleProps & ConditionalProps; export const Input = forwardRef( ( @@ -138,6 +145,7 @@ export const Input = forwardRef( ref={ref as React.Ref>} id={id} // NumericFormat + valueIsNumericString allowNegative={allowNegative} decimalScale={decimals} decimalSeparator={LOCALE_DECIMAL_SEPARATOR} @@ -161,7 +169,7 @@ export const Input = forwardRef( ? undefined : Number(formattedValue.replace(',', '.')); - onInput?.({ value, floatValue, formattedValue }); + onInput?.({ value, floatValue, formattedValue, ...e }); }} // Native disabled={disabled} @@ -190,7 +198,6 @@ Styled.InputContainer = styled.div` border-radius: inherit; input { - user-select: all; flex: 1; width: 100%; } diff --git a/src/components/Table.tsx b/src/components/Table.tsx index 5ef1dd0..d82a94a 100644 --- a/src/components/Table.tsx +++ b/src/components/Table.tsx @@ -43,6 +43,7 @@ import { layoutMixins } from '@/styles/layoutMixins'; import { Icon, IconName } from './Icon'; import { Tag } from './Tag'; +import { MustBigNumber } from '@/lib/numbers'; export { TableCell } from './Table/TableCell'; export { TableColumnHeader } from './Table/TableColumnHeader'; @@ -161,10 +162,7 @@ export const Table = ({ ? // String collator.compare(first as string, second as string) : // Number - Math.sign( - (parseInt(first as string) || (first as number)) - - (parseInt(second as string) || (second as number)) - )) * + MustBigNumber(first).comparedTo(MustBigNumber(second))) * // Flip the direction if descending order is specified. (sortDirection === 'descending' ? -1 : 1) ); diff --git a/src/components/Tabs.tsx b/src/components/Tabs.tsx index f6b9cd3..7ef8bc2 100644 --- a/src/components/Tabs.tsx +++ b/src/components/Tabs.tsx @@ -42,6 +42,8 @@ type StyleProps = { className?: string; }; +export type TabsProps = ElementProps & StyleProps; + export const Tabs = ({ defaultValue, value, @@ -111,6 +113,7 @@ export const Tabs = ({ {items.map(({ asChild, value, content, forceMount }) => ( ` Styled.Stack = styled.div` ${layoutMixins.stack} - ${layoutMixins.perspectiveArea} box-shadow: none; `; diff --git a/src/constants/markets.ts b/src/constants/markets.ts index 203e2ce..edb44f9 100644 --- a/src/constants/markets.ts +++ b/src/constants/markets.ts @@ -26,34 +26,3 @@ export enum FundingDirection { ToShort = 'ToShort', ToLong = 'ToLong', } - -export const MARKETS_TO_DISPLAY = [ - 'BTC-USD', - 'ETH-USD', - 'LINK-USD', - 'SOL-USD', - 'MATIC-USD', - 'ATOM-USD', - 'AVAX-USD', - 'APE-USD', - 'XRP-USD', - 'UNI-USD', - 'ADA-USD', - 'TRX-USD', - 'OP-USD', - 'MKR-USD', - 'DOGE-USD', - 'SHIB-USD', - 'COMP-USD', - 'LDO-USD', - 'NEAR-USD', - 'APT-USD', - 'SUI-USD', - 'DOT-USD', - 'ETC-USD', - 'ARB-USD', - 'CRV-USD', - 'BLUR-USD', - 'FIL-USD', - 'XLM-USD', -]; diff --git a/src/constants/notifications.ts b/src/constants/notifications.ts index 5262c83..a455fd1 100644 --- a/src/constants/notifications.ts +++ b/src/constants/notifications.ts @@ -122,9 +122,15 @@ export type NotificationDisplayData = { toastDuration?: number; }; +export enum TransferNotificationTypes { + Withdrawal = 'withdrawal', + Deposit = 'deposit', +} + // Notification types export type TransferNotifcation = { txHash: string; + type?: TransferNotificationTypes; toChainId?: string; fromChainId?: string; toAmount?: number; diff --git a/src/constants/numbers.ts b/src/constants/numbers.ts index aa6fd6a..e515d83 100644 --- a/src/constants/numbers.ts +++ b/src/constants/numbers.ts @@ -10,6 +10,7 @@ export const LEVERAGE_DECIMALS = 2; export const TOKEN_DECIMALS = 4; export const LARGE_TOKEN_DECIMALS = 2; export const FEE_DECIMALS = 3; +export const FUNDING_DECIMALS = 6; export const QUANTUM_MULTIPLIER = 1_000_000; @@ -18,3 +19,7 @@ export enum NumberSign { Negative = 'Negative', Neutral = 'Neutral', } + +// Deposit/Withdraw +export const MAX_CCTP_TRANSFER_AMOUNT = 1_000_000; +export const MAX_PRICE_IMPACT = 0.02; // 2% diff --git a/src/constants/tooltips/deposit.ts b/src/constants/tooltips/deposit.ts index a358def..de30ab2 100644 --- a/src/constants/tooltips/deposit.ts +++ b/src/constants/tooltips/deposit.ts @@ -1,6 +1,10 @@ import { type TooltipStrings, TOOLTIP_STRING_KEYS } from '@/constants/localization'; export const depositTooltips: TooltipStrings = { + 'minimum-deposit-amount': ({ stringGetter }) => ({ + title: stringGetter({ key: TOOLTIP_STRING_KEYS.MINIMUM_DEPOSIT_AMOUNT_TITLE }), + body: stringGetter({ key: TOOLTIP_STRING_KEYS.MINIMUM_DEPOSIT_AMOUNT_BODY }), + }), swap: ({ stringGetter }) => ({ title: stringGetter({ key: TOOLTIP_STRING_KEYS.SWAP_TITLE }), body: stringGetter({ key: TOOLTIP_STRING_KEYS.SWAP_BODY }), diff --git a/src/constants/tooltips/withdraw.ts b/src/constants/tooltips/withdraw.ts index 4b91aa7..e5c0f41 100644 --- a/src/constants/tooltips/withdraw.ts +++ b/src/constants/tooltips/withdraw.ts @@ -5,6 +5,10 @@ export const withdrawTooltips: TooltipStrings = { title: stringGetter({ key: TOOLTIP_STRING_KEYS.FAST_WITHDRAW_FEE_TITLE }), body: stringGetter({ key: TOOLTIP_STRING_KEYS.FAST_WITHDRAW_FEE_BODY }), }), + 'minimum-amount-received': ({ stringGetter }) => ({ + title: stringGetter({ key: TOOLTIP_STRING_KEYS.MINIMUM_AMOUNT_RECEIVED_TITLE }), + body: stringGetter({ key: TOOLTIP_STRING_KEYS.MINIMUM_AMOUNT_RECEIVED_BODY }), + }), 'withdraw-types': ({ stringGetter }) => ({ title: stringGetter({ key: TOOLTIP_STRING_KEYS.WITHDRAW_TYPES_TITLE }), body: stringGetter({ key: TOOLTIP_STRING_KEYS.WITHDRAW_TYPES_BODY }), diff --git a/src/hooks/useCurrentMarketId.ts b/src/hooks/useCurrentMarketId.ts index 7530a2c..c9a9166 100644 --- a/src/hooks/useCurrentMarketId.ts +++ b/src/hooks/useCurrentMarketId.ts @@ -5,16 +5,15 @@ import { useMatch, useNavigate } from 'react-router-dom'; import { LocalStorageKey } from '@/constants/localStorage'; import { DEFAULT_MARKETID } from '@/constants/markets'; import { AppRoute } from '@/constants/routes'; +import { useLocalStorage } from '@/hooks/useLocalStorage'; import { getSelectedNetwork } from '@/state/appSelectors'; import { closeDialogInTradeBox } from '@/state/dialogs'; import { setCurrentMarketId } from '@/state/perpetuals'; +import { getMarketIds } from '@/state/perpetualsSelectors'; import abacusStateManager from '@/lib/abacus'; -import { useLocalStorage } from './useLocalStorage'; -import { getMarketIds } from '@/state/perpetualsSelectors'; - export const useCurrentMarketId = () => { const navigate = useNavigate(); const match = useMatch(`/${AppRoute.Trade}/:marketId`); @@ -33,17 +32,35 @@ export const useCurrentMarketId = () => { if (marketIds.length === 0) return marketId ?? lastViewedMarket; if (!marketIds.includes(marketId ?? lastViewedMarket)) return DEFAULT_MARKETID; return marketId ?? lastViewedMarket; - }, [marketIds, marketId]); + }, [hasMarketIds, marketId]); useEffect(() => { - setLastViewedMarket(validId); - dispatch(setCurrentMarketId(validId)); - dispatch(closeDialogInTradeBox()); + // If v4_markets has not been subscribed to yet or marketId is not specified, default to validId + if (!hasMarketIds || !marketId) { + setLastViewedMarket(validId); + dispatch(setCurrentMarketId(validId)); + dispatch(closeDialogInTradeBox()); - navigate(`${AppRoute.Trade}/${validId}`, { - replace: true, - }); - }, [validId]); + if (validId !== marketId) { + navigate(`${AppRoute.Trade}/${validId}`, { + replace: true, + }); + } + } else { + // If v4_markets has been subscribed to, check if marketId is valid + if (!marketIds.includes(marketId)) { + // If marketId is not valid (i.e. final settlement), navigate to markets page + navigate(AppRoute.Markets, { + replace: true, + }); + } else { + // If marketId is valid, set currentMarketId + setLastViewedMarket(marketId); + dispatch(setCurrentMarketId(marketId)); + dispatch(closeDialogInTradeBox()); + } + } + }, [hasMarketIds, marketId]); useEffect(() => { // Check for marketIds otherwise Abacus will silently fail its isMarketValid check diff --git a/src/hooks/useMarketsData.ts b/src/hooks/useMarketsData.ts index e9ec038..020db64 100644 --- a/src/hooks/useMarketsData.ts +++ b/src/hooks/useMarketsData.ts @@ -1,14 +1,7 @@ import { useMemo } from 'react'; import { useSelector, shallowEqual } from 'react-redux'; -import { - MarketFilters, - MARKET_FILTER_LABELS, - type MarketData, - MARKETS_TO_DISPLAY, -} from '@/constants/markets'; - -import { testFlags } from '@/lib/testFlags'; +import { MarketFilters, MARKET_FILTER_LABELS, type MarketData } from '@/constants/markets'; import { getAssets } from '@/state/assetsSelectors'; import { getPerpetualMarkets } from '@/state/perpetualsSelectors'; @@ -49,9 +42,7 @@ export const useMarketsData = ( }, [allPerpetualMarkets, allAssets]); const filteredMarkets = useMemo(() => { - const filtered = markets - .filter(filterFunctions[filter]) - .filter(({ id }) => (testFlags.displayAllMarkets ? true : MARKETS_TO_DISPLAY.includes(id))); + const filtered = markets.filter(filterFunctions[filter]); if (searchFilter) { return filtered.filter( diff --git a/src/hooks/useNotificationTypes.tsx b/src/hooks/useNotificationTypes.tsx index 619a072..870e03e 100644 --- a/src/hooks/useNotificationTypes.tsx +++ b/src/hooks/useNotificationTypes.tsx @@ -20,6 +20,7 @@ import { type NotificationTypeConfig, NotificationType, DEFAULT_TOAST_AUTO_CLOSE_MS, + TransferNotificationTypes, } from '@/constants/notifications'; import { useSelectedNetwork, useStringGetter } from '@/hooks'; @@ -152,20 +153,20 @@ export const notificationTypes: NotificationTypeConfig[] = [ useEffect(() => { for (const transfer of transferNotifications) { - const { fromChainId, status, txHash, toAmount } = transfer; + const { fromChainId, status, txHash, toAmount, type } = transfer; const isFinished = Boolean(status) && status?.squidTransactionStatus !== 'ongoing'; const icon = ; - const type = - fromChainId === ENVIRONMENT_CONFIG_MAP[selectedNetwork].dydxChainId - ? 'withdrawal' - : 'deposit'; + const transferType = + type ?? fromChainId === ENVIRONMENT_CONFIG_MAP[selectedNetwork].dydxChainId + ? TransferNotificationTypes.Withdrawal + : TransferNotificationTypes.Deposit; const title = stringGetter({ key: { deposit: isFinished ? STRING_KEYS.DEPOSIT : STRING_KEYS.DEPOSIT_IN_PROGRESS, withdrawal: isFinished ? STRING_KEYS.WITHDRAW : STRING_KEYS.WITHDRAW_IN_PROGRESS, - }[type], + }[transferType], }); const toChainEta = status?.toChain?.chainData?.estimatedRouteDuration || 0; @@ -190,7 +191,7 @@ export const notificationTypes: NotificationTypeConfig[] = [ slotIcon={icon} slotTitle={title} transfer={transfer} - type={type} + type={transferType} triggeredAt={transfer.triggeredAt} notification={notification} /> diff --git a/src/hooks/useSubaccount.tsx b/src/hooks/useSubaccount.tsx index cd5fa57..b44b2ac 100644 --- a/src/hooks/useSubaccount.tsx +++ b/src/hooks/useSubaccount.tsx @@ -31,6 +31,7 @@ import { log } from '@/lib/telemetry'; import { useAccounts } from './useAccounts'; import { useTokenConfigs } from './useTokenConfigs'; import { useDydxClient } from './useDydxClient'; +import { hashFromTx } from '@/lib/hashfromTx'; type SubaccountContextType = ReturnType; const SubaccountContext = createContext({} as SubaccountContextType); @@ -293,12 +294,29 @@ export const useSubaccountContext = ({ localDydxWallet }: { localDydxWallet?: Lo ); const sendSquidWithdraw = useCallback( - async (amount: number, payload: string) => { + async (amount: number, payload: string, isCctp?: boolean) => { + + const cctpWithdraw = () => { + return new Promise((resolve, reject) => + abacusStateManager.cctpWithdraw((success, error, data) => { + const parsedData = JSON.parse(data); + if (success && parsedData?.code == 0) { + resolve(parsedData?.transactionHash); + } else { + reject(error); + } + }) + ) + } + if (isCctp) { + return await cctpWithdraw(); + } + if (!subaccountClient) { return; } - - return await sendSquidWithdrawFromSubaccount({ subaccountClient, amount, payload }); + const tx = await sendSquidWithdrawFromSubaccount({ subaccountClient, amount, payload }); + return hashFromTx(tx?.hash); }, [subaccountClient, sendSquidWithdrawFromSubaccount] ); diff --git a/src/hooks/useTradeFormInputs.ts b/src/hooks/useTradeFormInputs.ts index 39ff5b5..fa36827 100644 --- a/src/hooks/useTradeFormInputs.ts +++ b/src/hooks/useTradeFormInputs.ts @@ -11,22 +11,19 @@ export const useTradeFormInputs = () => { const { limitPriceInput, triggerPriceInput, trailingPercentInput } = tradeFormInputValues; useEffect(() => { - const floatValue = parseFloat(triggerPriceInput); abacusStateManager.setTradeValue({ - value: floatValue, + value: triggerPriceInput, field: TradeInputField.triggerPrice, }); }, [triggerPriceInput]); useEffect(() => { - const floatValue = parseFloat(limitPriceInput); - abacusStateManager.setTradeValue({ value: floatValue, field: TradeInputField.limitPrice }); + abacusStateManager.setTradeValue({ value: limitPriceInput, field: TradeInputField.limitPrice }); }, [limitPriceInput]); useEffect(() => { - const floatValue = parseFloat(trailingPercentInput); abacusStateManager.setTradeValue({ - value: floatValue, + value: trailingPercentInput, field: TradeInputField.trailingPercent, }); }, [trailingPercentInput]); diff --git a/src/icons/index.ts b/src/icons/index.ts index a32913e..bd3b347 100644 --- a/src/icons/index.ts +++ b/src/icons/index.ts @@ -44,6 +44,7 @@ export { default as OrderbookIcon } from './orderbook.svg'; export { default as OverviewIcon } from './overview.svg'; export { default as PencilIcon } from './pencil.svg'; export { default as PlayIcon } from './play.svg'; +export { default as PlusIcon } from './plus.svg'; export { default as PortfolioIcon } from './portfolio.svg'; export { default as PositionsIcon } from './positions.svg'; export { default as PriceChartIcon } from './price-chart.svg'; diff --git a/src/icons/plus.svg b/src/icons/plus.svg new file mode 100644 index 0000000..c74751a --- /dev/null +++ b/src/icons/plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/lib/abacus/dydxChainTransactions.ts b/src/lib/abacus/dydxChainTransactions.ts index 425c16d..56c4a8c 100644 --- a/src/lib/abacus/dydxChainTransactions.ts +++ b/src/lib/abacus/dydxChainTransactions.ts @@ -2,6 +2,7 @@ import Abacus, { type Nullable } from '@dydxprotocol/v4-abacus'; import Long from 'long'; import type { IndexedTx } from '@cosmjs/stargate'; import { GAS_MULTIPLIER, encodeJson } from '@dydxprotocol/v4-client-js'; +import { EncodeObject } from '@cosmjs/proto-signing'; import { CompositeClient, @@ -41,6 +42,7 @@ import { openDialog } from '@/state/dialogs'; import { StatefulOrderError } from '../errors'; import { bytesToBigInt } from '../numbers'; import { log } from '../telemetry'; +import { hashFromTx } from '../hashfromTx'; class DydxChainTransactions implements AbacusDYDXChainTransactionsProtocol { private compositeClient: CompositeClient | undefined; @@ -63,9 +65,13 @@ class DydxChainTransactions implements AbacusDYDXChainTransactionsProtocol { } setNobleWallet(nobleWallet: LocalWallet) { - this.nobleWallet = nobleWallet; - if (this.nobleClient) { - this.nobleClient.connect(nobleWallet); + try { + this.nobleWallet = nobleWallet; + if (this.nobleClient) { + this.nobleClient.connect(nobleWallet); + } + } catch (e) { + log('DydxChainTransactions/setNobleWallet', e); } } @@ -112,10 +118,15 @@ class DydxChainTransactions implements AbacusDYDXChainTransactionsProtocol { this.compositeClient = compositeClient; - if (nobleValidatorUrl) { - this.nobleClient = new NobleClient(nobleValidatorUrl); - if (this.nobleWallet) await this.nobleClient.connect(this.nobleWallet); + try { + if (nobleValidatorUrl) { + this.nobleClient = new NobleClient(nobleValidatorUrl); + if (this.nobleWallet) await this.nobleClient.connect(this.nobleWallet); + } + } catch (e) { + log('DydxChainTransactions/connectNetwork/NobleClient', e); } + // Dispatch custom event to notify other parts of the app that the network has been connected const customEvent = new CustomEvent('abacus:connectNetwork', { detail: parsedParams, @@ -201,8 +212,8 @@ class DydxChainTransactions implements AbacusDYDXChainTransactionsProtocol { timeInForce as OrderTimeInForce, goodTilTimeInSeconds ?? 0, execution as OrderExecution, - postOnly, - reduceOnly, + postOnly ?? undefined, + reduceOnly ?? undefined, triggerPrice ?? undefined ); @@ -340,12 +351,7 @@ class DydxChainTransactions implements AbacusDYDXChainTransactionsProtocol { } } - async sendNobleIBC( - params: { - msgTypeUrl: string, - msg: any, - } - ): Promise { + async sendNobleIBC(params: { msgTypeUrl: string; msg: any }): Promise { if (!this.nobleClient?.isConnected) { throw new Error('Missing nobleClient or localWallet'); } @@ -356,15 +362,16 @@ class DydxChainTransactions implements AbacusDYDXChainTransactionsProtocol { value: params.msg, }; const fee = await this.nobleClient.simulateTransaction([ibcMsg]); - + // take out fee from amount before sweeping - const amount = parseInt(ibcMsg.value.token.amount, 10) - + const amount = + parseInt(ibcMsg.value.token.amount, 10) - Math.floor(parseInt(fee.amount[0].amount, 10) * GAS_MULTIPLIER); - + if (amount <= 0) { throw new Error('noble balance does not cover fees'); } - + ibcMsg.value.token.amount = amount.toString(); const tx = await this.nobleClient.send([ibcMsg]); @@ -380,6 +387,86 @@ class DydxChainTransactions implements AbacusDYDXChainTransactionsProtocol { } } + async withdrawToNobleIBC(params: { + subaccountNumber: number; + amount: string; + ibcPayload: string; + }): Promise { + if (!this.compositeClient || !this.localWallet) { + throw new Error('Missing compositeClient or localWallet'); + } + + const { subaccountNumber, amount, ibcPayload } = params ?? {}; + const parsedIbcPayload: { + msgTypeUrl: string; + msg: any; + } = ibcPayload ? JSON.parse(atob(ibcPayload)) : undefined; + + try { + const msg = this.compositeClient.withdrawFromSubaccountMessage( + new SubaccountClient(this.localWallet, subaccountNumber), + parseFloat(amount).toFixed(this.compositeClient.validatorClient.config.denoms.USDC_DECIMALS) + ); + const ibcMsg: EncodeObject = { + typeUrl: parsedIbcPayload.msgTypeUrl, + value: parsedIbcPayload.msg, + }; + + const tx = await this.compositeClient.send( + this.localWallet, + () => Promise.resolve([msg, ibcMsg]), + false + ); + + return JSON.stringify({ + txHash: hashFromTx(tx?.hash), + }); + } catch (error) { + log('DydxChainTransactions/withdrawToNobleIBC', error); + + return JSON.stringify({ + error, + }); + } + } + + async cctpWithdraw(params: { typeUrl: string; value: any }): Promise { + if (!this.nobleClient?.isConnected) { + throw new Error('Missing nobleClient or localWallet'); + } + + try { + const ibcMsg = { + typeUrl: params.typeUrl, // '/circle.cctp.v1.MsgDepositForBurn', + value: params.value, + }; + const fee = await this.nobleClient.simulateTransaction([ibcMsg]); + + // take out fee from amount before sweeping + const amount = + parseInt(ibcMsg.value.amount, 10) - + Math.floor(parseInt(fee.amount[0].amount, 10) * GAS_MULTIPLIER); + + if (amount <= 0) { + throw new Error('noble balance does not cover fees'); + } + + ibcMsg.value.amount = amount.toString(); + + const tx = await this.nobleClient.send([ibcMsg]); + + const parsedTx = this.parseToPrimitives(tx); + + return JSON.stringify(parsedTx); + } catch (error) { + log('DydxChainTransactions/cctpWithdraw', error); + + return JSON.stringify({ + error, + }); + } + } + async transaction( type: TransactionTypes, paramsInJson: Abacus.Nullable, @@ -414,6 +501,17 @@ class DydxChainTransactions implements AbacusDYDXChainTransactionsProtocol { callback(result); break; } + case TransactionType.WithdrawToNobleIBC: { + const result = await this.withdrawToNobleIBC(params); + callback(result); + break; + } + case TransactionType.CctpWithdraw: { + const result = await this.cctpWithdraw(params); + callback(result); + break; + break; + } default: { break; } diff --git a/src/lib/abacus/index.ts b/src/lib/abacus/index.ts index b8ffaae..796fb94 100644 --- a/src/lib/abacus/index.ts +++ b/src/lib/abacus/index.ts @@ -84,8 +84,7 @@ class AbacusStateManager { ); const appConfigs = AbacusAppConfig.Companion.forWeb; - if (!isMainnet || testFlags.withCCTP) - appConfigs.squidVersion = AbacusAppConfig.SquidVersion.V2DepositOnly; + appConfigs.squidVersion = AbacusAppConfig.SquidVersion.V2; this.stateManager = new AsyncAbacusStateManager( '', @@ -262,6 +261,14 @@ class AbacusStateManager { ) => void ) => this.stateManager.cancelOrder(orderId, callback); + cctpWithdraw = ( + callback: ( + success: boolean, + parsingError: Nullable, + data: string, + ) => void + ): void => this.stateManager.commitCCTPWithdraw(callback); + // ------ Utils ------ // getHistoricalPnlPeriod = (): Nullable => this.stateManager.historicalPnlPeriod; diff --git a/src/lib/hashfromTx.ts b/src/lib/hashfromTx.ts new file mode 100644 index 0000000..98696e6 --- /dev/null +++ b/src/lib/hashfromTx.ts @@ -0,0 +1,3 @@ +export const hashFromTx = ( + txHash: string | Uint8Array +): string => `0x${Buffer.from(txHash).toString('hex')}`; diff --git a/src/lib/testFlags.ts b/src/lib/testFlags.ts index bbb5aed..b4a0364 100644 --- a/src/lib/testFlags.ts +++ b/src/lib/testFlags.ts @@ -5,13 +5,13 @@ class TestFlags { this.queryParams = {}; const hash = window.location.hash; const queryIndex = hash.indexOf('?'); - if (queryIndex === -1) return + if (queryIndex === -1) return; const queryParamsString = hash.substring(queryIndex + 1); const params = new URLSearchParams(queryParamsString); for (const [key, value] of params) { - this.queryParams[key] = value; + this.queryParams[key] = value; } } @@ -19,10 +19,6 @@ class TestFlags { return !!this.queryParams.displayInitializingMarkets; } - get displayAllMarkets() { - return !!this.queryParams.displayAllMarkets; - } - get withCCTP() { return !!this.queryParams.withCCTP; } diff --git a/src/lib/wagmi.ts b/src/lib/wagmi.ts index 3a0216a..06df75b 100644 --- a/src/lib/wagmi.ts +++ b/src/lib/wagmi.ts @@ -146,7 +146,7 @@ const getConnectors = (walletConnectConfig: WalletConnectConfig) => [ new CoinbaseWalletConnector({ chains, options: { - appName: 'wagmi', + appName: 'dYdX', reloadOnDisconnect: false, }, }), diff --git a/src/pages/AlertsPage.tsx b/src/pages/AlertsPage.tsx index 87b6a6a..96bf932 100644 --- a/src/pages/AlertsPage.tsx +++ b/src/pages/AlertsPage.tsx @@ -1,4 +1,6 @@ import { DialogPlacement } from '@/components/Dialog'; import { NotificationsMenu } from '@/views/menus/NotificationsMenu'; -export const AlertsPage = () => ; +const AlertsPage = () => ; + +export default AlertsPage; diff --git a/src/pages/PrivacyPolicyPage.tsx b/src/pages/PrivacyPolicyPage.tsx index ac854ce..226ddb5 100644 --- a/src/pages/PrivacyPolicyPage.tsx +++ b/src/pages/PrivacyPolicyPage.tsx @@ -2,7 +2,7 @@ import styled, { AnyStyledComponent } from 'styled-components'; import { articleMixins } from '@/styles/articleMixins'; -export const PrivacyPolicyPage = () => ( +const PrivacyPolicyPage = () => (

Privacy Policy

@@ -10,6 +10,8 @@ export const PrivacyPolicyPage = () => ( ); +export default PrivacyPolicyPage; + const Styled: Record = {}; Styled.Article = styled.article` diff --git a/src/pages/TermsOfUsePage.tsx b/src/pages/TermsOfUsePage.tsx index cc4ea51..63f431c 100644 --- a/src/pages/TermsOfUsePage.tsx +++ b/src/pages/TermsOfUsePage.tsx @@ -2,7 +2,7 @@ import styled, { AnyStyledComponent } from 'styled-components'; import { articleMixins } from '@/styles/articleMixins'; -export const TermsOfUsePage = () => ( +const TermsOfUsePage = () => (

Sample Terms of Use

@@ -1076,6 +1076,8 @@ export const TermsOfUsePage = () => ( ); +export default TermsOfUsePage; + const Styled: Record = {}; Styled.Article = styled.article` diff --git a/src/pages/portfolio/Portfolio.tsx b/src/pages/portfolio/Portfolio.tsx index dc64379..9b46b43 100644 --- a/src/pages/portfolio/Portfolio.tsx +++ b/src/pages/portfolio/Portfolio.tsx @@ -1,17 +1,20 @@ +import { lazy, Suspense } from 'react'; import { shallowEqual, useDispatch, useSelector } from 'react-redux'; import styled, { type AnyStyledComponent } from 'styled-components'; import { Navigate, Route, Routes } from 'react-router-dom'; import { OnboardingState } from '@/constants/account'; +import { ButtonAction } from '@/constants/buttons'; import { DialogTypes } from '@/constants/dialogs'; import { STRING_KEYS } from '@/constants/localization'; import { HistoryRoute, PortfolioRoute } from '@/constants/routes'; - import { useAccountBalance, useBreakpoints, useDocumentTitle, useStringGetter } from '@/hooks'; +import { layoutMixins } from '@/styles/layoutMixins'; import { FillsTable, FillsTableColumnKey } from '@/views/tables/FillsTable'; import { FundingPaymentsTable } from '@/views/tables/FundingPaymentsTable'; import { TransferHistoryTable } from '@/views/tables/TransferHistoryTable'; +import { Button } from '@/components/Button'; import { Icon, IconName } from '@/components/Icon'; import { NavigationMenu } from '@/components/NavigationMenu'; import { WithSidebar } from '@/components/WithSidebar'; @@ -20,15 +23,15 @@ import { getOnboardingState, getSubaccount } from '@/state/accountSelectors'; import { openDialog } from '@/state/dialogs'; import { PortfolioNavMobile } from './PortfolioNavMobile'; -import { Overview } from './Overview'; -import { Positions } from './Positions'; -import { Orders } from './Orders'; -import { Fees } from './Fees'; -import { History } from './History'; +import { LoadingSpace } from '@/components/Loading/LoadingSpinner'; -import { layoutMixins } from '@/styles/layoutMixins'; -import { Button } from '@/components/Button'; -import { ButtonAction } from '@/constants/buttons'; +const Overview = lazy(() => import('./Overview').then((module) => ({ default: module.Overview }))); +const Positions = lazy(() => + import('./Positions').then((module) => ({ default: module.Positions })) +); +const Orders = lazy(() => import('./Orders').then((module) => ({ default: module.Orders }))); +const Fees = lazy(() => import('./Fees').then((module) => ({ default: module.Fees }))); +const History = lazy(() => import('./History').then((module) => ({ default: module.History }))); export default () => { const dispatch = useDispatch(); @@ -44,49 +47,51 @@ export default () => { useDocumentTitle(stringGetter({ key: STRING_KEYS.PORTFOLIO })); const routesComponent = ( - - } /> - } /> - } /> - } /> - }> - } /> - - } - /> - } - /> - } - /> - - } /> - + }> + + } /> + } /> + } /> + } /> + }> + } /> + + } + /> + } + /> + } + /> + + } /> + + ); return isTablet ? ( @@ -191,7 +196,7 @@ Styled.SideBar = styled.div` Styled.Footer = styled.div` ${layoutMixins.row} flex-wrap: wrap; - + padding: 1rem; gap: 0.5rem; diff --git a/src/pages/rewards/RewardsHelpPanel.tsx b/src/pages/rewards/RewardsHelpPanel.tsx new file mode 100644 index 0000000..e7c23d6 --- /dev/null +++ b/src/pages/rewards/RewardsHelpPanel.tsx @@ -0,0 +1,80 @@ +import styled, { AnyStyledComponent } from 'styled-components'; + +import { STRING_KEYS } from '@/constants/localization'; +import { layoutMixins } from '@/styles/layoutMixins'; +import { useStringGetter } from '@/hooks'; + +import { Accordion } from '@/components/Accordion'; +import { Link } from '@/components/Link'; +import { Panel } from '@/components/Panel'; + +const REWARDS_LEARN_MORE_LINK = ''; // to be configured + +export const RewardsHelpPanel = () => { + const stringGetter = useStringGetter(); + + return ( + +

{stringGetter({ key: STRING_KEYS.HELP })}

+ {REWARDS_LEARN_MORE_LINK && ( + + {stringGetter({ key: STRING_KEYS.LEARN_MORE })} + + )} + + } + > + +
+ ); +}; + +const Styled: Record = {}; + +Styled.HelpCard = styled(Panel)` + --panel-content-paddingY: 0; + width: 100%; + height: max-content; + padding: 0; + gap: 0; + + text-align: start; +`; + +Styled.Header = styled.div` + ${layoutMixins.spacedRow} + gap: 1ch; + + padding: 1.25rem 1.5rem; + border-bottom: var(--border-width) solid var(--border-color); + + font: var(--font-small-book); + + h3 { + font: var(--font-medium-book); + color: var(--color-text-2); + } +`; + +Styled.Link = styled(Link)` + display: inline-flex; +`; diff --git a/src/pages/rewards/RewardsPage.tsx b/src/pages/rewards/RewardsPage.tsx index 745d746..2476c0f 100644 --- a/src/pages/rewards/RewardsPage.tsx +++ b/src/pages/rewards/RewardsPage.tsx @@ -21,7 +21,7 @@ import { DYDXBalancePanel } from './DYDXBalancePanel'; import { MigratePanel } from './MigratePanel'; import { LaunchIncentivesPanel } from './LaunchIncentivesPanel'; -export const RewardsPage = () => { +const RewardsPage = () => { const dispatch = useDispatch(); const stringGetter = useStringGetter(); const { governanceLearnMore, stakingLearnMore } = useURLConfigs(); @@ -84,6 +84,8 @@ export const RewardsPage = () => { ); }; +export default RewardsPage; + const Styled: Record = {}; Styled.Page = styled.div` diff --git a/src/pages/settings/Settings.tsx b/src/pages/settings/Settings.tsx index 15de0d3..e8dde6d 100644 --- a/src/pages/settings/Settings.tsx +++ b/src/pages/settings/Settings.tsx @@ -25,7 +25,7 @@ import { useNetworks } from '@/views/menus/useNetworks'; import { SettingsHeader } from './SettingsHeader'; import { ComingSoonSpace } from '@/components/ComingSoon'; -export const SettingsPage = () => { +const SettingsPage = () => { const stringGetter = useStringGetter(); const { pathname } = useLocation(); const dispatch = useDispatch(); @@ -105,3 +105,5 @@ export const SettingsPage = () => { ); }; + +export default SettingsPage; diff --git a/src/pages/trade/HorizontalPanel.tsx b/src/pages/trade/HorizontalPanel.tsx index b072adc..6024679 100644 --- a/src/pages/trade/HorizontalPanel.tsx +++ b/src/pages/trade/HorizontalPanel.tsx @@ -1,8 +1,7 @@ -import { useState } from 'react'; +import { useMemo, useState } from 'react'; import { shallowEqual, useSelector } from 'react-redux'; import styled, { type AnyStyledComponent } from 'styled-components'; -import { AbacusOrderStatus } from '@/constants/abacus'; import { STRING_KEYS } from '@/constants/localization'; import { useBreakpoints, useStringGetter } from '@/hooks'; @@ -28,7 +27,6 @@ import { getCurrentMarketTradeInfoNumbers, getHasUnseenFillUpdates, getHasUnseenOrderUpdates, - getLatestOrderStatus, getTradeInfoNumbers, } from '@/state/accountSelectors'; @@ -82,125 +80,141 @@ export const HorizontalPanel = ({ isOpen = true, setIsOpen }: ElementProps) => { showCurrentMarket ? numOpenOrders : numTotalOpenOrders ); - const tabItems = [ - { - value: InfoSection.Position, - label: stringGetter({ - key: showCurrentMarket ? STRING_KEYS.POSITION : STRING_KEYS.POSITIONS, - }), + const tabItems = useMemo( + () => [ + { + value: InfoSection.Position, + label: stringGetter({ + key: showCurrentMarket ? STRING_KEYS.POSITION : STRING_KEYS.POSITIONS, + }), - tag: showCurrentMarket ? null : shortenNumberForDisplay(numTotalPositions), + tag: showCurrentMarket ? null : shortenNumberForDisplay(numTotalPositions), - content: showCurrentMarket ? ( - - ) : ( - setView(PanelView.CurrentMarket)} - /> - ), - }, - { - value: InfoSection.Orders, - label: stringGetter({ key: STRING_KEYS.ORDERS }), + content: showCurrentMarket ? ( + + ) : ( + setView(PanelView.CurrentMarket)} + /> + ), + }, + { + asChild: true, + value: InfoSection.Orders, + label: stringGetter({ key: STRING_KEYS.ORDERS }), - slotRight: isWaitingForOrderToIndex ? ( - - ) : ( - ordersTagNumber && ( - - {ordersTagNumber} + slotRight: isWaitingForOrderToIndex ? ( + + ) : ( + ordersTagNumber && ( + + {ordersTagNumber} + + ) + ), + + content: ( + + ), + }, + { + asChild: true, + value: InfoSection.Fills, + label: stringGetter({ key: STRING_KEYS.FILLS }), + + slotRight: fillsTagNumber && ( + + {fillsTagNumber} - ) - ), + ), - content: ( - - ), - }, - { - value: InfoSection.Fills, - label: stringGetter({ key: STRING_KEYS.FILLS }), + content: ( + + ), + }, + // TODO - TRCL-1693 - re-enable when funding payments are supported + // { + // value: InfoSection.Payments, + // label: stringGetter({ key: STRING_KEYS.PAYMENTS }), - slotRight: fillsTagNumber && ( - - {fillsTagNumber} - - ), - - content: ( - - ), - }, - // TODO - TRCL-1693 - re-enable when funding payments are supported - // { - // value: InfoSection.Payments, - // label: stringGetter({ key: STRING_KEYS.PAYMENTS }), - - // tag: shortenNumberForDisplay( - // showCurrentMarket ? numFundingPayments : numTotalFundingPayments - // ), - // content: ( - // - // ), - // }, - ]; + // tag: shortenNumberForDisplay( + // showCurrentMarket ? numFundingPayments : numTotalFundingPayments + // ), + // content: ( + // + // ), + // }, + ], + [ + stringGetter, + currentMarketId, + showCurrentMarket, + isTablet, + isWaitingForOrderToIndex, + isAccountViewOnly, + ordersTagNumber, + fillsTagNumber, + hasUnseenFillUpdates, + hasUnseenOrderUpdates, + ] + ); return isTablet ? ( diff --git a/src/styles/layoutMixins.ts b/src/styles/layoutMixins.ts index f33ef85..fdc2be4 100644 --- a/src/styles/layoutMixins.ts +++ b/src/styles/layoutMixins.ts @@ -877,11 +877,6 @@ export const layoutMixins: Record< } `, - perspectiveArea: css` - perspective: 100rem; - transform-style: preserve-3d; - `, - absolute: css` position: absolute; top: 0; diff --git a/src/views/AccountInfo.tsx b/src/views/AccountInfo.tsx index 504956f..e9ee324 100644 --- a/src/views/AccountInfo.tsx +++ b/src/views/AccountInfo.tsx @@ -63,7 +63,6 @@ Styled.AccountInfoSectionContainer = styled.div<{ showAccountInfo?: boolean }>` ${layoutMixins.column} height: var(--account-info-section-height); min-height: var(--account-info-section-height); - overflow-x: clip; ${({ showAccountInfo }) => !showAccountInfo && diff --git a/src/views/AccountInfo/AccountInfoConnectedState.tsx b/src/views/AccountInfo/AccountInfoConnectedState.tsx index e9e5e85..1627c7f 100644 --- a/src/views/AccountInfo/AccountInfoConnectedState.tsx +++ b/src/views/AccountInfo/AccountInfoConnectedState.tsx @@ -203,7 +203,6 @@ const Styled: Record = {}; Styled.Stack = styled.div` ${layoutMixins.stack} - ${layoutMixins.perspectiveArea} `; Styled.CornerButton = styled(Button)` @@ -293,7 +292,14 @@ Styled.TransferButtons = styled.div` Styled.ConnectedAccountInfoContainer = styled.div<{ $showHeader?: boolean }>` ${layoutMixins.column} - ${layoutMixins.withOuterAndInnerBorders} + + @media ${breakpoints.notTablet} { + ${layoutMixins.withOuterAndInnerBorders} + } + + @media ${breakpoints.tablet} { + ${layoutMixins.withInnerBorder} + } ${({ $showHeader }) => $showHeader && diff --git a/src/views/ExchangeBillboards.tsx b/src/views/ExchangeBillboards.tsx index bdb90e4..d6ce345 100644 --- a/src/views/ExchangeBillboards.tsx +++ b/src/views/ExchangeBillboards.tsx @@ -2,9 +2,7 @@ import styled, { type AnyStyledComponent } from 'styled-components'; import { shallowEqual, useSelector } from 'react-redux'; import { STRING_KEYS } from '@/constants/localization'; -import { MARKETS_TO_DISPLAY } from '@/constants/markets'; import { useBreakpoints, useStringGetter } from '@/hooks'; -import { testFlags } from '@/lib/testFlags'; import { breakpoints } from '@/styles'; import { layoutMixins } from '@/styles/layoutMixins'; @@ -34,7 +32,6 @@ export const ExchangeBillboards: React.FC = ({ Object.values(perpetualMarkets) .filter(Boolean) - .filter(({ id }) => (testFlags.displayAllMarkets ? true : MARKETS_TO_DISPLAY.includes(id))) .forEach(({ oraclePrice, perpetual }) => { const { volume24H, trades24H, openInterest = 0 } = perpetual || {}; volume24HUSDC += volume24H ?? 0; diff --git a/src/views/MarketDetails.tsx b/src/views/MarketDetails.tsx index d1b0a18..3b18cbf 100644 --- a/src/views/MarketDetails.tsx +++ b/src/views/MarketDetails.tsx @@ -213,13 +213,8 @@ Styled.MarketDetails = styled.div` `; Styled.Header = styled.header` - /* max-width: fit-content; */ - ${layoutMixins.column} gap: 1.25rem; - - position: sticky; - bottom: 3rem; `; Styled.WrapRow = styled.div` diff --git a/src/views/PositionInfo.tsx b/src/views/PositionInfo.tsx index dca2d48..ac79452 100644 --- a/src/views/PositionInfo.tsx +++ b/src/views/PositionInfo.tsx @@ -453,13 +453,6 @@ Styled.Actions = styled.footer` > :last-child { flex: 2; } - - position: sticky; - bottom: clamp(0.5rem, 7.5%, 2rem); - - @media ${breakpoints.tablet} { - bottom: 0; - } `; Styled.Output = styled(Output)<{ sign: NumberSign; smallText?: boolean; margin?: string }>` @@ -514,6 +507,7 @@ Styled.PositionInfo = styled.div` Styled.DetachedSection = styled(DetachedSection)` padding: 0 1.5rem; + position: relative; `; Styled.DetachedScrollableSection = styled(DetachedScrollableSection)` diff --git a/src/views/charts/TvChart.tsx b/src/views/charts/TvChart.tsx index a5813cc..f3586ff 100644 --- a/src/views/charts/TvChart.tsx +++ b/src/views/charts/TvChart.tsx @@ -82,7 +82,6 @@ const Styled: Record = {}; Styled.PriceChart = styled.div<{ isChartReady?: boolean }>` ${layoutMixins.stack} - ${layoutMixins.perspectiveArea} height: 100%; diff --git a/src/views/dialogs/DetailsDialog/FillDetailsDialog.tsx b/src/views/dialogs/DetailsDialog/FillDetailsDialog.tsx index ffdbe72..0ba26c9 100644 --- a/src/views/dialogs/DetailsDialog/FillDetailsDialog.tsx +++ b/src/views/dialogs/DetailsDialog/FillDetailsDialog.tsx @@ -94,7 +94,7 @@ export const FillDetailsDialog = ({ fillId, setIsOpen }: ElementProps) => { return ( } + slotIcon={} title={resources.typeStringKey && stringGetter({ key: resources.typeStringKey })} items={detailItems} setIsOpen={setIsOpen} diff --git a/src/views/dialogs/DetailsDialog/OrderDetailsDialog.tsx b/src/views/dialogs/DetailsDialog/OrderDetailsDialog.tsx index e0c0737..904d15d 100644 --- a/src/views/dialogs/DetailsDialog/OrderDetailsDialog.tsx +++ b/src/views/dialogs/DetailsDialog/OrderDetailsDialog.tsx @@ -194,7 +194,7 @@ export const OrderDetailsDialog = ({ orderId, setIsOpen }: ElementProps) => { return ( } + slotIcon={} title={!resources.typeStringKey ? '' : stringGetter({ key: resources.typeStringKey })} slotFooter={ isAccountViewOnly ? null : isOrderStatusClearable(status) ? ( diff --git a/src/views/dialogs/HelpDialog.tsx b/src/views/dialogs/HelpDialog.tsx index 88181b1..1563032 100644 --- a/src/views/dialogs/HelpDialog.tsx +++ b/src/views/dialogs/HelpDialog.tsx @@ -8,6 +8,7 @@ import { ComboboxDialogMenu } from '@/components/ComboboxDialogMenu'; import { Icon, IconName } from '@/components/Icon'; import { isTruthy } from '@/lib/isTruthy'; +import { breakpoints } from '@/styles'; type ElementProps = { setIsOpen: (open: boolean) => void; @@ -72,8 +73,11 @@ export const HelpDialog = ({ setIsOpen }: ElementProps) => { const Styled: Record = {}; Styled.ComboboxDialogMenu = styled(ComboboxDialogMenu)` - --dialog-width: var(--dialog-small-width); --dialog-content-paddingTop: 1rem; --dialog-content-paddingBottom: 1rem; --comboxDialogMenu-item-gap: 1rem; + + @media ${breakpoints.notMobile} { + --dialog-width: var(--dialog-small-width); + } `; diff --git a/src/views/forms/AccountManagementForms/ChainSelectMenu.tsx b/src/views/forms/AccountManagementForms/ChainSelectMenu.tsx index 9badaea..f77fac0 100644 --- a/src/views/forms/AccountManagementForms/ChainSelectMenu.tsx +++ b/src/views/forms/AccountManagementForms/ChainSelectMenu.tsx @@ -18,11 +18,7 @@ type ElementProps = { onSelectChain: (chain: string) => void; }; -export const ChainSelectMenu = ({ - label, - selectedChain, - onSelectChain, -}: ElementProps) => { +export const ChainSelectMenu = ({ label, selectedChain, onSelectChain }: ElementProps) => { const stringGetter = useStringGetter(); const { type, depositOptions, withdrawalOptions, resources } = useSelector(getTransferInputs, shallowEqual) || {}; @@ -38,7 +34,7 @@ export const ChainSelectMenu = ({ slotBefore: , })); - const selectedOption = chains.find((item) => item.type === selectedChain); + const selectedOption = chains.find((item) => item.type === selectedChain); return ( { if (txHash) { addTransferNotification({ txHash: txHash, - toChainId: !isCctp ? ENVIRONMENT_CONFIG_MAP[selectedNetwork].dydxChainId : getNobleChainId(), + toChainId: !isCctp + ? ENVIRONMENT_CONFIG_MAP[selectedNetwork].dydxChainId + : getNobleChainId(), fromChainId: chainIdStr || undefined, toAmount: summary?.usdcSize || undefined, triggeredAt: Date.now(), @@ -324,6 +325,21 @@ export const DepositForm = ({ onDeposit, onError }: DepositFormProps) => { return stringGetter({ key: STRING_KEYS.DEPOSIT_MORE_THAN_BALANCE }); } + if (isCctp) { + if (MustBigNumber(debouncedAmountBN).gte(MAX_CCTP_TRANSFER_AMOUNT)) { + return stringGetter({ + key: STRING_KEYS.MAX_CCTP_TRANSFER_LIMIT_EXCEEDED, + params: { + MAX_CCTP_TRANSFER_AMOUNT: MAX_CCTP_TRANSFER_AMOUNT, + }, + }); + } + } + + if (isMainnet && MustBigNumber(summary?.aggregatePriceImpact).gte(MAX_PRICE_IMPACT)) { + return stringGetter({ key: STRING_KEYS.PRICE_IMPACT_TOO_HIGH }); + } + return undefined; }, [ error, @@ -334,6 +350,7 @@ export const DepositForm = ({ onDeposit, onError }: DepositFormProps) => { fromAmount, sourceToken, stringGetter, + summary, ]); const isDisabled = diff --git a/src/views/forms/AccountManagementForms/DepositForm/DepositButtonAndReceipt.tsx b/src/views/forms/AccountManagementForms/DepositForm/DepositButtonAndReceipt.tsx index 5cd5815..146da70 100644 --- a/src/views/forms/AccountManagementForms/DepositForm/DepositButtonAndReceipt.tsx +++ b/src/views/forms/AccountManagementForms/DepositForm/DepositButtonAndReceipt.tsx @@ -1,21 +1,16 @@ -import { type Dispatch, type SetStateAction, useState, type ReactNode } from 'react'; +import { type Dispatch, type ReactNode, type SetStateAction, useState, useMemo } from 'react'; import styled, { type AnyStyledComponent } from 'styled-components'; import { shallowEqual, useSelector } from 'react-redux'; import type { RouteData } from '@0xsquid/sdk'; +import { formatUnits } from 'viem'; -import { - ButtonAction, - ButtonShape, - ButtonSize, - ButtonState, - ButtonType, -} from '@/constants/buttons'; +import { ButtonAction, ButtonShape, ButtonSize, ButtonType } from '@/constants/buttons'; import { TransferInputTokenResource } from '@/constants/abacus'; import { STRING_KEYS } from '@/constants/localization'; -import { NumberSign } from '@/constants/numbers'; +import { NumberSign, TOKEN_DECIMALS } from '@/constants/numbers'; -import { useStringGetter } from '@/hooks'; +import { useStringGetter, useTokenConfigs } from '@/hooks'; import { useMatchingEvmNetwork } from '@/hooks/useMatchingEvmNetwork'; import { layoutMixins } from '@/styles/layoutMixins'; @@ -34,6 +29,7 @@ import { calculateCanAccountTrade } from '@/state/accountCalculators'; import { getSubaccountBuyingPower, getSubaccountEquity } from '@/state/accountSelectors'; import { getTransferInputs } from '@/state/inputsSelectors'; +import { isTruthy } from '@/lib/isTruthy'; import { MustBigNumber } from '@/lib/numbers'; import { SlippageEditor } from '../SlippageEditor'; @@ -83,7 +79,8 @@ export const DepositButtonAndReceipt = ({ const { current: buyingPower, postOrder: newBuyingPower } = useSelector(getSubaccountBuyingPower, shallowEqual) || {}; - const { summary, requestPayload } = useSelector(getTransferInputs, shallowEqual) || {}; + const { isCctp, summary, requestPayload } = useSelector(getTransferInputs, shallowEqual) || {}; + const { usdcDecimals, usdcLabel } = useTokenConfigs(); const feeSubitems: DetailsItem[] = []; @@ -98,7 +95,7 @@ export const DepositButtonAndReceipt = ({ if (typeof summary?.bridgeFee === 'number') { feeSubitems.push({ key: 'bridge-fees', - label: Bridge Fee, + label: {stringGetter({ key: STRING_KEYS.BRIDGE_FEE })}, value: , }); } @@ -111,12 +108,68 @@ export const DepositButtonAndReceipt = ({ const totalFees = (summary?.bridgeFee || 0) + (summary?.gasFee || 0); + const { toAmount, toAmountMin } = useMemo(() => { + if (isCctp) { + return { + toAmount: summary?.toAmount, + toAmountMin: summary?.toAmountMin, + }; + } else { + return { + toAmount: summary?.toAmount && formatUnits(BigInt(summary.toAmount), usdcDecimals), + toAmountMin: summary?.toAmountMin && formatUnits(BigInt(summary.toAmountMin), usdcDecimals), + }; + } + }, [isCctp, summary]); + const submitButtonReceipt = [ + { + key: 'expected-deposit-amount', + label: ( + + {stringGetter({ key: STRING_KEYS.EXPECTED_DEPOSIT_AMOUNT })} {usdcLabel} + + ), + value: , + subitems: [ + { + key: 'minimum-deposit-amount', + label: ( + + {stringGetter({ key: STRING_KEYS.MINIMUM_DEPOSIT_AMOUNT })} {usdcLabel} + + ), + value: ( + + ), + tooltip: 'minimum-deposit-amount', + }, + ], + }, + { + key: 'exchange-rate', + label: {stringGetter({ key: STRING_KEYS.EXCHANGE_RATE })}, + value: + typeof summary?.exchangeRate === 'number' ? ( + + + = + + + ) : ( + + ), + }, { key: 'equity', label: ( - {stringGetter({ key: STRING_KEYS.EQUITY })} USDC + {stringGetter({ key: STRING_KEYS.EQUITY })} {usdcLabel} ), value: ( @@ -133,7 +186,7 @@ export const DepositButtonAndReceipt = ({ key: 'buying-power', label: ( - {stringGetter({ key: STRING_KEYS.BUYING_POWER })} USDC + {stringGetter({ key: STRING_KEYS.BUYING_POWER })} {usdcLabel} ), value: ( @@ -146,18 +199,7 @@ export const DepositButtonAndReceipt = ({ /> ), }, - { - key: 'exchange-rate', - label: {stringGetter({ key: STRING_KEYS.EXCHANGE_RATE })}, - value: typeof summary?.exchangeRate === 'number' && ( - - - = - - - ), - }, - { + !isCctp && { key: 'total-fees', label: {stringGetter({ key: STRING_KEYS.TOTAL_FEES })}, value: , @@ -165,7 +207,7 @@ export const DepositButtonAndReceipt = ({ }, { key: 'slippage', - label: {stringGetter({ key: STRING_KEYS.SLIPPAGE })}, + label: {stringGetter({ key: STRING_KEYS.MAX_SLIPPAGE })}, value: ( {stringGetter({ key: STRING_KEYS.ESTIMATED_TIME })}, - value: typeof summary?.estimatedRouteDuration === 'number' && ( + value: ( ), }, - ]; + ].filter(isTruthy); const isFormValid = !isDisabled && !isEditingSlippage; diff --git a/src/views/forms/AccountManagementForms/TokenSelectMenu.tsx b/src/views/forms/AccountManagementForms/TokenSelectMenu.tsx index 0015c6b..212e158 100644 --- a/src/views/forms/AccountManagementForms/TokenSelectMenu.tsx +++ b/src/views/forms/AccountManagementForms/TokenSelectMenu.tsx @@ -57,7 +57,6 @@ export const TokenSelectMenu = ({ selectedToken, onSelectToken }: ElementProps) {type === TransferType.deposit ? 'USDC' : selectedToken?.symbol} ), - tooltip: 'swap', }, ]} > diff --git a/src/views/forms/AccountManagementForms/WithdrawForm.tsx b/src/views/forms/AccountManagementForms/WithdrawForm.tsx index f575366..5a629ec 100644 --- a/src/views/forms/AccountManagementForms/WithdrawForm.tsx +++ b/src/views/forms/AccountManagementForms/WithdrawForm.tsx @@ -9,9 +9,9 @@ import { TransferInputField, TransferInputTokenResource, TransferType } from '@/ import { AlertType } from '@/constants/alerts'; import { ButtonSize } from '@/constants/buttons'; import { STRING_KEYS } from '@/constants/localization'; -import { ENVIRONMENT_CONFIG_MAP } from '@/constants/networks'; -import { NotificationStatus } from '@/constants/notifications'; -import { NumberSign } from '@/constants/numbers'; +import { ENVIRONMENT_CONFIG_MAP, isMainnet } from '@/constants/networks'; +import { TransferNotificationTypes } from '@/constants/notifications'; +import { MAX_CCTP_TRANSFER_AMOUNT, MAX_PRICE_IMPACT, NumberSign } from '@/constants/numbers'; import { useAccounts, @@ -45,6 +45,7 @@ import { getTransferInputs } from '@/state/inputsSelectors'; import abacusStateManager from '@/lib/abacus'; import { MustBigNumber } from '@/lib/numbers'; +import { getNobleChainId } from '@/lib/squid'; import { TokenSelectMenu } from './TokenSelectMenu'; import { WithdrawButtonAndReceipt } from './WithdrawForm/WithdrawButtonAndReceipt'; @@ -66,7 +67,8 @@ export const WithdrawForm = () => { resources, errors: routeErrors, errorMessage: routeErrorMessage, - isCctp + isCctp, + summary, } = useSelector(getTransferInputs, shallowEqual) || {}; // User input @@ -74,7 +76,6 @@ export const WithdrawForm = () => { const [slippage, setSlippage] = useState(isCctp ? 0 : 0.01); // 0.1% slippage const debouncedAmount = useDebounce(withdrawAmount, 500); - const isValidAddress = toAddress && isAddress(toAddress); const toToken = useMemo( @@ -167,16 +168,22 @@ export const WithdrawForm = () => { }) ); } else { - const txHash = await sendSquidWithdraw(debouncedAmountBN.toNumber(), requestPayload.data); - if (txHash?.hash) { - const hash = `0x${Buffer.from(txHash.hash).toString('hex')}`; + const txHash = await sendSquidWithdraw( + debouncedAmountBN.toNumber(), + requestPayload.data, + isCctp + ); + if (txHash) { addTransferNotification({ - txHash: hash, - fromChainId: ENVIRONMENT_CONFIG_MAP[selectedNetwork].dydxChainId, + txHash: txHash, + type: TransferNotificationTypes.Withdrawal, + fromChainId: !isCctp + ? ENVIRONMENT_CONFIG_MAP[selectedNetwork].dydxChainId + : getNobleChainId(), toChainId: chainIdStr || undefined, toAmount: debouncedAmountBN.toNumber(), triggeredAt: Date.now(), - notificationStatus: NotificationStatus.Triggered, + isCctp, }); abacusStateManager.clearTransferInputValues(); setWithdrawAmount(''); @@ -282,10 +289,7 @@ export const WithdrawForm = () => { const errorMessage = useMemo(() => { if (error) { - return stringGetter({ - key: STRING_KEYS.SOMETHING_WENT_WRONG_WITH_MESSAGE, - params: { ERROR_MESSAGE: error }, - }); + return error; } if (routeErrors) { @@ -316,6 +320,21 @@ export const WithdrawForm = () => { return stringGetter({ key: STRING_KEYS.WITHDRAW_MORE_THAN_FREE }); } + if (isCctp) { + if (MustBigNumber(debouncedAmountBN).gte(MAX_CCTP_TRANSFER_AMOUNT)) { + return stringGetter({ + key: STRING_KEYS.MAX_CCTP_TRANSFER_LIMIT_EXCEEDED, + params: { + MAX_CCTP_TRANSFER_AMOUNT: MAX_CCTP_TRANSFER_AMOUNT, + }, + }); + } + } + + if (isMainnet && MustBigNumber(summary?.aggregatePriceImpact).gte(MAX_PRICE_IMPACT)) { + return stringGetter({ key: STRING_KEYS.PRICE_IMPACT_TOO_HIGH }); + } + return undefined; }, [ error, @@ -328,6 +347,7 @@ export const WithdrawForm = () => { toAddress, sanctionedAddresses, stringGetter, + summary, ]); const isDisabled = diff --git a/src/views/forms/AccountManagementForms/WithdrawForm/WithdrawButtonAndReceipt.tsx b/src/views/forms/AccountManagementForms/WithdrawForm/WithdrawButtonAndReceipt.tsx index 3a7b467..763e4d8 100644 --- a/src/views/forms/AccountManagementForms/WithdrawForm/WithdrawButtonAndReceipt.tsx +++ b/src/views/forms/AccountManagementForms/WithdrawForm/WithdrawButtonAndReceipt.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import { useMemo, useState } from 'react'; import { shallowEqual, useSelector } from 'react-redux'; import styled, { type AnyStyledComponent } from 'styled-components'; import { formatUnits } from 'viem'; @@ -6,14 +6,11 @@ import { formatUnits } from 'viem'; import { TransferInputTokenResource } from '@/constants/abacus'; import { ButtonAction, ButtonShape, ButtonSize, ButtonType } from '@/constants/buttons'; import { STRING_KEYS } from '@/constants/localization'; -import { NumberSign } from '@/constants/numbers'; - -import { formatSeconds } from '@/lib/timeUtils'; +import { NumberSign, TOKEN_DECIMALS } from '@/constants/numbers'; import { layoutMixins } from '@/styles/layoutMixins'; -import { useStringGetter } from '@/hooks'; -import { useAccountBalance } from '@/hooks/useAccountBalance'; +import { useStringGetter, useTokenConfigs } from '@/hooks'; import { Button } from '@/components/Button'; @@ -58,13 +55,9 @@ export const WithdrawButtonAndReceipt = ({ const stringGetter = useStringGetter(); const { leverage } = useSelector(getSubaccount, shallowEqual) || {}; - const { summary, requestPayload } = useSelector(getTransferInputs, shallowEqual) || {}; + const { isCctp, summary, requestPayload } = useSelector(getTransferInputs, shallowEqual) || {}; const canAccountTrade = useSelector(calculateCanAccountTrade, shallowEqual); - - const toAmount = - summary?.toAmount && - withdrawToken?.decimals && - formatUnits(BigInt(summary.toAmount), withdrawToken?.decimals); + const { usdcLabel } = useTokenConfigs(); const feeSubitems: DetailsItem[] = []; @@ -89,9 +82,29 @@ export const WithdrawButtonAndReceipt = ({ const showSubitemsToggle = showFeeBreakdown ? stringGetter({ key: STRING_KEYS.HIDE_ALL_DETAILS }) : stringGetter({ key: STRING_KEYS.SHOW_ALL_DETAILS }); - + const totalFees = (summary?.bridgeFee || 0) + (summary?.gasFee || 0); + const { toAmount, toAmountMin } = useMemo(() => { + if (isCctp) { + return { + toAmount: summary?.toAmount, + toAmountMin: summary?.toAmountMin, + }; + } else { + return { + toAmount: + summary?.toAmount && + withdrawToken?.decimals && + formatUnits(BigInt(summary.toAmount), withdrawToken.decimals), + toAmountMin: + summary?.toAmountMin && + withdrawToken?.decimals && + formatUnits(BigInt(summary.toAmountMin), withdrawToken.decimals), + }; + } + }, [isCctp, summary, withdrawToken]); + const submitButtonReceipt = [ { key: 'total-fees', @@ -99,43 +112,12 @@ export const WithdrawButtonAndReceipt = ({ value: , subitems: feeSubitems, }, - { - key: 'wallet', - label: ( - - {stringGetter({ key: STRING_KEYS.AMOUNT_RECEIVED })}{' '} - {withdrawToken && {withdrawToken?.symbol}} - - ), - value: ( - - ), - }, - { - key: 'leverage', - label: {stringGetter({ key: STRING_KEYS.ACCOUNT_LEVERAGE })}, - value: ( - - ), - }, { key: 'exchange-rate', label: {stringGetter({ key: STRING_KEYS.EXCHANGE_RATE })}, value: withdrawToken && typeof summary?.exchangeRate === 'number' && ( - + = {stringGetter({ key: STRING_KEYS.SLIPPAGE })}, - value: ( - - ), - }, - { - key: 'estimatedRouteDuration', + key: 'estimated-route-duration', label: {stringGetter({ key: STRING_KEYS.ESTIMATED_TIME })}, value: typeof summary?.estimatedRouteDuration === 'number' && ( ), }, + { + key: 'expected-amount-received', + label: ( + + {stringGetter({ key: STRING_KEYS.EXPECTED_AMOUNT_RECEIVED })}{' '} + {withdrawToken && {withdrawToken?.symbol}} + + ), + value: , + subitems: [ + { + key: 'minimum-amount-received', + label: ( + + {stringGetter({ key: STRING_KEYS.MINIMUM_AMOUNT_RECEIVED })}{' '} + {withdrawToken && {withdrawToken?.symbol}} + + ), + value: ( + + ), + tooltip: 'minimum-amount-received', + }, + ], + }, + { + key: 'slippage', + label: {stringGetter({ key: STRING_KEYS.MAX_SLIPPAGE })}, + value: ( + + ), + }, + { + key: 'leverage', + label: {stringGetter({ key: STRING_KEYS.ACCOUNT_LEVERAGE })}, + value: ( + + ), + }, ]; const isFormValid = !isDisabled && !isEditingSlippage; diff --git a/src/views/forms/TradeForm.tsx b/src/views/forms/TradeForm.tsx index 68a96b3..78f5759 100644 --- a/src/views/forms/TradeForm.tsx +++ b/src/views/forms/TradeForm.tsx @@ -206,7 +206,7 @@ export const TradeForm = ({ dispatch(setTradeFormInputs({ triggerPriceInput: value })); }, value: triggerPriceInput ?? '', - decimals: tickSizeDecimals || USD_DECIMALS, + decimals: tickSizeDecimals ?? USD_DECIMALS, }); } @@ -226,7 +226,7 @@ export const TradeForm = ({ dispatch(setTradeFormInputs({ limitPriceInput: value })); }, value: limitPriceInput, - decimals: tickSizeDecimals || USD_DECIMALS, + decimals: tickSizeDecimals ?? USD_DECIMALS, }); } diff --git a/src/views/forms/TradeForm/LeverageSlider.tsx b/src/views/forms/TradeForm/LeverageSlider.tsx index b18a1c0..57b0277 100644 --- a/src/views/forms/TradeForm/LeverageSlider.tsx +++ b/src/views/forms/TradeForm/LeverageSlider.tsx @@ -1,10 +1,10 @@ -import { type Dispatch, type SetStateAction, useCallback, useMemo } from 'react'; +import { useCallback, useMemo } from 'react'; import styled, { AnyStyledComponent, css } from 'styled-components'; import { Root, Thumb, Track } from '@radix-ui/react-slider'; import _ from 'lodash'; import { OrderSide } from '@dydxprotocol/v4-client-js'; -import { type Nullable, TradeInputField } from '@/constants/abacus'; +import { TradeInputField } from '@/constants/abacus'; import { PositionSide } from '@/constants/trade'; import { MustBigNumber, type BigNumberish } from '@/lib/numbers'; @@ -12,11 +12,11 @@ import abacusStateManager from '@/lib/abacus'; type ElementProps = { leverage?: BigNumberish | null; - leverageInputValue: Nullable; + leverageInputValue: string; maxLeverage: BigNumberish | null; orderSide: OrderSide; positionSide: PositionSide; - setLeverageInputValue: Dispatch>>; + setLeverageInputValue: (value: string) => void; }; type StyleProps = { className?: string }; @@ -33,6 +33,7 @@ export const LeverageSlider = ({ const leverageBN = MustBigNumber(leverage); const maxLeverageBN = MustBigNumber(maxLeverage); const leverageInputBN = MustBigNumber(leverageInputValue || leverage); + const leverageInputNumber = isNaN(leverageInputBN.toNumber()) ? 0 : leverageInputBN.toNumber(); const sliderConfig = useMemo( () => ({ @@ -79,12 +80,12 @@ export const LeverageSlider = ({ ); const onSliderDrag = ([newLeverage]: number[]) => { - setLeverageInputValue(newLeverage); + setLeverageInputValue(`${newLeverage}`); debouncedSetAbacusLeverage(newLeverage); }; const onValueCommit = ([newLeverage]: number[]) => { - setLeverageInputValue(newLeverage); + setLeverageInputValue(`${newLeverage}`); // Ensure Abacus is updated with the latest, committed value debouncedSetAbacusLeverage.cancel(); @@ -102,7 +103,7 @@ export const LeverageSlider = ({ min={min} max={max} step={0.1} - value={[Math.min(Math.max(leverageInputBN.toNumber(), min), max)]} + value={[Math.min(Math.max(leverageInputNumber, min), max)]} onValueChange={onSliderDrag} onValueCommit={onValueCommit} > diff --git a/src/views/forms/TradeForm/MarketLeverageInput.tsx b/src/views/forms/TradeForm/MarketLeverageInput.tsx index aba36e9..4ca06ee 100644 --- a/src/views/forms/TradeForm/MarketLeverageInput.tsx +++ b/src/views/forms/TradeForm/MarketLeverageInput.tsx @@ -1,9 +1,8 @@ -import type { Dispatch, SetStateAction } from 'react'; import { shallowEqual, useSelector } from 'react-redux'; import styled, { AnyStyledComponent } from 'styled-components'; import { OrderSide } from '@dydxprotocol/v4-client-js'; -import { TradeInputField, Nullable } from '@/constants/abacus'; +import { TradeInputField } from '@/constants/abacus'; import { ButtonShape } from '@/constants/buttons'; import { STRING_KEYS } from '@/constants/localization'; import { LEVERAGE_DECIMALS } from '@/constants/numbers'; @@ -62,21 +61,7 @@ export const MarketLeverageInput = ({ const leveragePosition = postOrderLeverage ? newPositionSide : currentPositionSide; - const onLeverageInput = ({ value, floatValue }: { value: string; floatValue?: number }) => { - const newLeverage = MustBigNumber(floatValue).toFixed(); - - if (value === '' || newLeverage === 'NaN' || !floatValue) { - setLeverageInputValue(''); - abacusStateManager.setTradeValue({ - value: null, - field: TradeInputField.leverage, - }); - } else { - updateLeverage(floatValue); - } - }; - - const updateLeverage = (newLeverage: string | number) => { + const getSignedLeverage = (newLeverage: string | number) => { const newLeverageBN = MustBigNumber(newLeverage); const newLeverageSignedBN = leveragePosition === PositionSide.Short || @@ -84,10 +69,33 @@ export const MarketLeverageInput = ({ ? newLeverageBN.abs().negated() : newLeverageBN.abs(); - setLeverageInputValue(newLeverageSignedBN.toString()); + return newLeverageSignedBN.toFixed(LEVERAGE_DECIMALS); + }; + + const onLeverageInput = ({ + floatValue, + formattedValue, + }: { + floatValue?: number; + formattedValue: string; + }) => { + setLeverageInputValue(formattedValue); + const newLeverage = MustBigNumber(floatValue).toFixed(); abacusStateManager.setTradeValue({ - value: newLeverageSignedBN.toFixed(LEVERAGE_DECIMALS), + value: + formattedValue === '' || newLeverage === 'NaN' ? null : getSignedLeverage(formattedValue), + field: TradeInputField.leverage, + }); + }; + + const updateLeverage = (newLeverage: string | number) => { + const newLeverageSigned = getSignedLeverage(newLeverage); + + setLeverageInputValue(newLeverageSigned); + + abacusStateManager.setTradeValue({ + value: newLeverageSigned, field: TradeInputField.leverage, }); }; @@ -130,7 +138,7 @@ export const MarketLeverageInput = ({ > { useSelector(getCurrentMarketConfig, shallowEqual) || {}; const { size, usdcSize, leverage, input: lastEditedInput } = inputTradeSizeData || {}; const { needsLeverage } = currentTradeInputOptions || {}; - const decimals = stepSizeDecimals || TOKEN_DECIMALS; + const decimals = stepSizeDecimals ?? TOKEN_DECIMALS; const { amountInput, usdAmountInput, leverageInput } = useSelector( getTradeFormInputs, @@ -70,22 +70,34 @@ export const TradeSizeInputs = () => { } }, [size, usdcSize, leverage, lastEditedInput]); - const onSizeInput = ({ value, floatValue }: { value: string; floatValue?: number }) => { - dispatch(setTradeFormInputs({ amountInput: value })); + const onSizeInput = ({ + floatValue, + formattedValue, + }: { + floatValue?: number; + formattedValue: string; + }) => { + dispatch(setTradeFormInputs({ amountInput: formattedValue })); const newAmount = MustBigNumber(floatValue).toFixed(decimals); abacusStateManager.setTradeValue({ - value: value === '' || newAmount === 'NaN' ? null : newAmount, + value: formattedValue === '' || newAmount === 'NaN' ? null : newAmount, field: TradeInputField.size, }); }; - const onUSDCInput = ({ value, floatValue }: { value: string; floatValue?: number }) => { - dispatch(setTradeFormInputs({ usdAmountInput: value })); - const newUsdcAmount = MustBigNumber(floatValue).toFixed(); + const onUSDCInput = ({ + floatValue, + formattedValue, + }: { + floatValue?: number; + formattedValue: string; + }) => { + dispatch(setTradeFormInputs({ usdAmountInput: formattedValue })); + const newUsdcAmount = MustBigNumber(floatValue).toFixed(tickSizeDecimals || USD_DECIMALS); abacusStateManager.setTradeValue({ - value: value === '' || newUsdcAmount === 'NaN' ? null : newUsdcAmount, + value: formattedValue === '' || newUsdcAmount === 'NaN' ? null : newUsdcAmount, field: TradeInputField.usdcSize, }); }; diff --git a/src/views/notifications/TransferStatusNotification/TransferStatusSteps.tsx b/src/views/notifications/TransferStatusNotification/TransferStatusSteps.tsx index 758c60b..3cb050b 100644 --- a/src/views/notifications/TransferStatusNotification/TransferStatusSteps.tsx +++ b/src/views/notifications/TransferStatusNotification/TransferStatusSteps.tsx @@ -12,10 +12,11 @@ import { LoadingSpinner } from '@/components/Loading/LoadingSpinner'; import { layoutMixins } from '@/styles/layoutMixins'; import { STRING_KEYS } from '@/constants/localization'; import { ENVIRONMENT_CONFIG_MAP } from '@/constants/networks'; +import { TransferNotificationTypes } from '@/constants/notifications'; type ElementProps = { status?: StatusResponse; - type: 'withdrawal' | 'deposit'; + type: TransferNotificationTypes; }; type StyleProps = { @@ -46,11 +47,13 @@ export const TransferStatusSteps = ({ className, status, type }: ElementProps & { label: stringGetter({ key: - type === 'deposit' ? STRING_KEYS.INITIATED_DEPOSIT : STRING_KEYS.INITIATED_WITHDRAWAL, + type === TransferNotificationTypes.Deposit + ? STRING_KEYS.INITIATED_DEPOSIT + : STRING_KEYS.INITIATED_WITHDRAWAL, }), step: TransferStatusStep.FromChain, - link: - type === 'deposit' + link: + type === TransferNotificationTypes.Deposit ? status?.fromChain?.transactionUrl : routeStatus?.[0]?.chainId === dydxChainId && routeStatus[0].txHash ? `${mintscanTxUrl?.replace('{tx_hash}', routeStatus[0].txHash.replace('0x', ''))}` @@ -63,14 +66,20 @@ export const TransferStatusSteps = ({ className, status, type }: ElementProps & }, { label: stringGetter({ - key: type === 'deposit' ? STRING_KEYS.DEPOSIT_TO_CHAIN : STRING_KEYS.WITHDRAW_TO_CHAIN, + key: + type === TransferNotificationTypes.Deposit + ? STRING_KEYS.DEPOSIT_TO_CHAIN + : STRING_KEYS.WITHDRAW_TO_CHAIN, params: { - CHAIN: type === 'deposit' ? 'dYdX' : status?.toChain?.chainData?.chainName, + CHAIN: + type === TransferNotificationTypes.Deposit + ? 'dYdX' + : status?.toChain?.chainData?.chainName, }, }), step: TransferStatusStep.ToChain, link: - type === 'withdrawal' + type === TransferNotificationTypes.Withdrawal ? status?.toChain?.transactionUrl : currentStatus?.chainId === dydxChainId && currentStatus?.txHash ? `${mintscanTxUrl?.replace('{tx_hash}', currentStatus.txHash.replace('0x', ''))}` diff --git a/src/views/notifications/TransferStatusNotification/index.tsx b/src/views/notifications/TransferStatusNotification/index.tsx index fdbbcbf..36a0bbe 100644 --- a/src/views/notifications/TransferStatusNotification/index.tsx +++ b/src/views/notifications/TransferStatusNotification/index.tsx @@ -5,7 +5,7 @@ import { useInterval, useStringGetter } from '@/hooks'; import { AlertType } from '@/constants/alerts'; import { STRING_KEYS } from '@/constants/localization'; -import { TransferNotifcation } from '@/constants/notifications'; +import { TransferNotifcation, TransferNotificationTypes } from '@/constants/notifications'; import { formatSeconds } from '@/lib/timeUtils'; @@ -22,7 +22,7 @@ import { layoutMixins } from '@/styles/layoutMixins'; import { TransferStatusSteps } from './TransferStatusSteps'; type ElementProps = { - type: 'withdrawal' | 'deposit'; + type: TransferNotificationTypes; transfer: TransferNotifcation; triggeredAt?: number; }; @@ -55,7 +55,7 @@ export const TransferStatusNotification = ({ useInterval({ callback: updateSecondsLeft }); const inProgressStatusString = - type === 'deposit' + type === TransferNotificationTypes.Deposit ? secondsLeft > 0 ? STRING_KEYS.DEPOSIT_STATUS : STRING_KEYS.DEPOSIT_STATUS_SHORTLY @@ -64,7 +64,7 @@ export const TransferStatusNotification = ({ : STRING_KEYS.WITHDRAW_STATUS_SHORTLY; const statusString = - type === 'deposit' + type === TransferNotificationTypes.Deposit ? status?.squidTransactionStatus === 'success' ? STRING_KEYS.DEPOSIT_COMPLETE : inProgressStatusString diff --git a/src/views/tables/MarketsTable.tsx b/src/views/tables/MarketsTable.tsx index 014a963..b66ed66 100644 --- a/src/views/tables/MarketsTable.tsx +++ b/src/views/tables/MarketsTable.tsx @@ -4,7 +4,7 @@ import { useNavigate } from 'react-router-dom'; import { STRING_KEYS } from '@/constants/localization'; import { MarketFilters, type MarketData } from '@/constants/markets'; -import { LARGE_TOKEN_DECIMALS } from '@/constants/numbers'; +import { FUNDING_DECIMALS, LARGE_TOKEN_DECIMALS } from '@/constants/numbers'; import { AppRoute } from '@/constants/routes'; import { useBreakpoints, useStringGetter } from '@/hooks'; @@ -128,7 +128,8 @@ export const MarketsTable = ({ className }: { className?: string }) => { label: stringGetter({ key: STRING_KEYS.FUNDING_RATE_1H_SHORT }), renderCell: (row) => ( & { + side: 'bid' | 'ask'; + mine?: number; + key: string; +}; const useCalculateOrderbookData = ({ maxRowsPerSide }: { maxRowsPerSide: number }) => { const orderbook = useSelector(getCurrentMarketOrderbook, shallowEqual); @@ -53,8 +57,9 @@ const useCalculateOrderbookData = ({ maxRowsPerSide }: { maxRowsPerSide: number return useMemo(() => { const asks = (orderbook?.asks?.toArray() ?? []) .map( - (row: OrderbookLine) => + (row: OrderbookLine, idx: number) => ({ + key: `ask-${idx}`, side: 'ask', mine: openOrdersBySideAndPrice[OrderSide.SELL]?.[row.price]?.size, ...row, @@ -64,8 +69,9 @@ const useCalculateOrderbookData = ({ maxRowsPerSide }: { maxRowsPerSide: number const bids = (orderbook?.bids?.toArray() ?? []) .map( - (row: OrderbookLine) => + (row: OrderbookLine, idx: number) => ({ + key: `bid-${idx}`, side: 'bid', mine: openOrdersBySideAndPrice[OrderSide.BUY]?.[row.price]?.size, ...row, @@ -97,15 +103,44 @@ const useCalculateOrderbookData = ({ maxRowsPerSide }: { maxRowsPerSide: number } const spread = - asks[0] && bids[0] ? MustBigNumber(asks[0]?.price ?? 0).minus(bids[0]?.price ?? 0) : null; + asks[0]?.price && bids[0]?.price ? MustBigNumber(asks[0].price).minus(bids[0].price) : null; const spreadPercent = orderbook?.spreadPercent; const histogramRange = Math.max( - Number(bids[bids.length - 1]?.depth), - Number(asks[asks.length - 1]?.depth) + isNaN(Number(bids[bids.length - 1]?.depth)) ? 0 : Number(bids[bids.length - 1]?.depth), + isNaN(Number(asks[asks.length - 1]?.depth)) ? 0 : Number(asks[asks.length - 1]?.depth) ); + // Ensure asks and bids are of length maxRowsPerSide by adding empty rows. + let idx = asks.length - 1; + while (asks.length < maxRowsPerSide) { + idx += 1; + + asks.push({ + key: `ask-${idx}`, + side: 'ask', + size: 0, + price: 0, + offset: 0, + depth: 0, + }); + } + + idx = bids.length - 1; + while (bids.length < maxRowsPerSide) { + idx += 1; + + bids.push({ + key: `bid-${idx}`, + side: 'bid', + size: 0, + price: 0, + offset: 0, + depth: 0, + }); + } + return { asks, bids, spread, spreadPercent, histogramRange, hasOrderbook: !!orderbook }; }, [orderbook, openOrdersBySideAndPrice]); }; @@ -142,31 +177,33 @@ const OrderbookTable = ({ getCellValue: (row: RowData) => row.size, label: stringGetter({ key: STRING_KEYS.ORDERBOOK_ORDER_SIZE }), tag: symbol, - renderCell: (row: RowData) => ( - - ), + renderCell: (row: RowData) => + row.size > 0 && ( + + ), }, { columnKey: 'price', getCellValue: (row: RowData) => row.price, label: stringGetter({ key: STRING_KEYS.PRICE }), tag: 'USD', - renderCell: (row: RowData) => ( - - ), + renderCell: (row: RowData) => + row.price > 0 && ( + + ), }, { columnKey: 'subaccount-orders', @@ -194,12 +231,13 @@ const OrderbookTable = ({ label="Orderbook" data={data} columns={columns} - getRowKey={(row: RowData) => `${row.side}-${row.price}`} + getRowKey={(row: RowData) => row.key} getRowAttributes={(row: RowData) => ({ 'data-side': row.side, style: { '--histogram-bucket-size': row.size, '--histogram-bucket-depth': row.depth, + '--tr-pointerEvents': row.price ? 'auto' : 'none', }, })} onRowAction={onRowAction} @@ -238,19 +276,10 @@ export const Orderbook = ({ maxRowsPerSide, }); - const [showRowsPerSide, setShowRowsPerSide] = useState(0); - - // Make rows visible one by one so avoid jumps in initial scroll position - useEffect(() => { - if (showRowsPerSide < maxRowsPerSide) { - setShowRowsPerSide((showRows) => showRows + 1); - } - }, [showRowsPerSide]); - const data = useMemo( () => [ - ...bids.slice(0, showRowsPerSide).reverse(), + ...bids.reverse(), { key: 'spread', slotCustomRow: (props) => ( @@ -267,9 +296,9 @@ export const Orderbook = ({ ), } as CustomRowConfig, - ...asks.slice(0, showRowsPerSide), + ...asks, ].reverse(), - [asks, bids, spread, spreadPercent, showRowsPerSide, isTablet] + [asks, bids, spread, spreadPercent, isTablet] ); const onRowAction = useCallback( @@ -325,7 +354,7 @@ export const Orderbook = ({ - + ); @@ -495,6 +524,7 @@ Styled.OrderbookTable = styled(OrderbookTradesTable)` tr { --histogram-bucket-depth: 0; + pointer-events: var(--tr-pointerEvents); &[data-side='bid'] { --accent-color: var(--color-positive); diff --git a/src/views/tables/OrdersTable.tsx b/src/views/tables/OrdersTable.tsx index 0d22cb9..9629969 100644 --- a/src/views/tables/OrdersTable.tsx +++ b/src/views/tables/OrdersTable.tsx @@ -230,14 +230,7 @@ const getOrdersTableColumnDef = ({ label: `${stringGetter({ key: STRING_KEYS.STATUS })} / ${stringGetter({ key: STRING_KEYS.FILL, })}`, - renderCell: ({ - asset, - createdAtMilliseconds, - size, - status, - totalFilled, - resources, - }) => { + renderCell: ({ asset, createdAtMilliseconds, size, status, totalFilled, resources }) => { const { statusIconColor, statusStringKey } = getStatusIconInfo({ status, totalFilled, @@ -345,9 +338,7 @@ export const OrdersTable = ({ if (hasUnseenOrderUpdates) dispatch(viewedOrders()); }, [hasUnseenOrderUpdates]); - const symbol = currentMarket - ? allAssets[allPerpetualMarkets[currentMarket]?.assetId]?.symbol - : null; + const symbol = currentMarket ? allAssets[allPerpetualMarkets[currentMarket]?.assetId]?.id : null; const ordersData = orders.map((order: SubaccountOrder) => getHydratedTradingData({ diff --git a/src/views/tables/PositionsTable.tsx b/src/views/tables/PositionsTable.tsx index 9aaac46..3e8f80f 100644 --- a/src/views/tables/PositionsTable.tsx +++ b/src/views/tables/PositionsTable.tsx @@ -366,6 +366,7 @@ Styled.InlineRow = styled.div` Styled.AssetIcon = styled(AssetIcon)` ${layoutMixins.inlineRow} + min-width: unset; font-size: 2.25rem; `;