From d867ef847c7dd658a8c15a17300c3d3e55be9e7f Mon Sep 17 00:00:00 2001 From: Imamah-Zafar <88320460+Imamah-Zafar@users.noreply.github.com> Date: Wed, 22 Feb 2023 02:03:51 +0500 Subject: [PATCH 01/16] show alert on btc and ordinal address copy --- package-lock.json | 280 +++++++----------- src/app/components/AlertMessage/index.tsx | 64 +++- src/app/components/accountRow/index.tsx | 17 +- .../extendedScreenContainer/index.tsx | 52 +++- src/app/components/screenContainer/index.tsx | 52 +++- src/app/screens/home/index.tsx | 1 - .../receiveNft/receiveCardComponent/index.tsx | 9 + src/app/screens/receive/index.tsx | 7 + .../stores/wallet/actions/actionCreators.ts | 14 + src/app/stores/wallet/actions/types.ts | 19 +- src/app/stores/wallet/walletReducer.ts | 14 + src/locales/en.json | 8 + 12 files changed, 356 insertions(+), 181 deletions(-) diff --git a/package-lock.json b/package-lock.json index 332c443f4..2fdf7fb3f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "xverse-web-extension", - "version": "0.2.0", + "version": "0.2.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "xverse-web-extension", - "version": "0.2.0", + "version": "0.2.1", "dependencies": { "@react-spring/web": "^9.6.1", "@secretkeylabs/xverse-core": "0.7.3", @@ -119,7 +119,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -143,7 +142,6 @@ "version": "7.20.14", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz", "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -152,7 +150,6 @@ "version": "7.20.12", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", - "dev": true, "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", @@ -182,7 +179,6 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, "bin": { "json5": "lib/cli.js" }, @@ -194,7 +190,6 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -251,7 +246,6 @@ "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", - "dev": true, "dependencies": { "@babel/compat-data": "^7.20.5", "@babel/helper-validator-option": "^7.18.6", @@ -266,39 +260,10 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -349,7 +314,6 @@ "version": "7.20.11", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", - "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", @@ -376,7 +340,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dev": true, "dependencies": { "@babel/types": "^7.20.2" }, @@ -415,7 +378,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -424,7 +386,6 @@ "version": "7.20.13", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", - "dev": true, "dependencies": { "@babel/template": "^7.20.7", "@babel/traverse": "^7.20.13", @@ -1583,7 +1544,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -4976,6 +4936,19 @@ "semver": "^5.3.0" } }, + "node_modules/babel-preset-env/node_modules/browserslist": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + }, + "bin": { + "browserslist": "cli.js" + } + }, "node_modules/babel-preset-env/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -5502,16 +5475,30 @@ } }, "node_modules/browserslist": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", - "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", - "dev": true, + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], "dependencies": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" }, "bin": { "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, "node_modules/bs-logger": { @@ -5675,7 +5662,6 @@ "version": "1.0.30001452", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001452.tgz", "integrity": "sha512-Lkp0vFjMkBB3GTpLR8zk4NwW5EdRdnitwYJHDOOKIU85x4ckYCPQ+9WlVvSVClHxVReefkUMtWZH2l9KGlD51w==", - "dev": true, "funding": [ { "type": "opencollective", @@ -6908,8 +6894,7 @@ "node_modules/electron-to-chromium": { "version": "1.4.295", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.295.tgz", - "integrity": "sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw==", - "dev": true + "integrity": "sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw==" }, "node_modules/elliptic": { "version": "6.5.4", @@ -7158,7 +7143,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, "engines": { "node": ">=6" } @@ -8313,7 +8297,6 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -10987,7 +10970,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, "dependencies": { "yallist": "^3.0.2" } @@ -11454,8 +11436,7 @@ "node_modules/node-releases": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", - "dev": true + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -11953,8 +11934,7 @@ "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -14689,7 +14669,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -15261,34 +15240,6 @@ "node": ">=10.13.0" } }, - "node_modules/webpack/node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, "node_modules/webpack/node_modules/enhanced-resolve": { "version": "5.12.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", @@ -15532,8 +15483,7 @@ "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/yaml": { "version": "1.10.2", @@ -15601,7 +15551,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, "requires": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -15618,14 +15567,12 @@ "@babel/compat-data": { "version": "7.20.14", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz", - "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==", - "dev": true + "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==" }, "@babel/core": { "version": "7.20.12", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", - "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", @@ -15647,14 +15594,12 @@ "json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -15697,7 +15642,6 @@ "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", - "dev": true, "requires": { "@babel/compat-data": "^7.20.5", "@babel/helper-validator-option": "^7.18.6", @@ -15706,23 +15650,10 @@ "semver": "^6.3.0" }, "dependencies": { - "browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - } - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -15760,7 +15691,6 @@ "version": "7.20.11", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", - "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", @@ -15781,7 +15711,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dev": true, "requires": { "@babel/types": "^7.20.2" } @@ -15807,14 +15736,12 @@ "@babel/helper-validator-option": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" }, "@babel/helpers": { "version": "7.20.13", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", - "dev": true, "requires": { "@babel/template": "^7.20.7", "@babel/traverse": "^7.20.13", @@ -16232,7 +16159,8 @@ "@emotion/use-insertion-effect-with-fallbacks": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", - "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==" + "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", + "requires": {} }, "@emotion/utils": { "version": "1.2.0", @@ -16696,7 +16624,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, "requires": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -18410,7 +18337,8 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", - "dev": true + "dev": true, + "requires": {} }, "@webpack-cli/info": { "version": "1.5.0", @@ -18425,7 +18353,8 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", - "dev": true + "dev": true, + "requires": {} }, "@xtuc/ieee754": { "version": "1.2.0", @@ -18483,13 +18412,15 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true + "dev": true, + "requires": {} }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true + "dev": true, + "requires": {} }, "acorn-walk": { "version": "7.2.0", @@ -18551,7 +18482,8 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true + "dev": true, + "requires": {} }, "ansi-escapes": { "version": "4.3.2", @@ -19576,6 +19508,16 @@ "semver": "^5.3.0" }, "dependencies": { + "browserslist": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + } + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -20052,13 +19994,14 @@ } }, "browserslist": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", - "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", - "dev": true, + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "requires": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" } }, "bs-logger": { @@ -20188,8 +20131,7 @@ "caniuse-lite": { "version": "1.0.30001452", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001452.tgz", - "integrity": "sha512-Lkp0vFjMkBB3GTpLR8zk4NwW5EdRdnitwYJHDOOKIU85x4ckYCPQ+9WlVvSVClHxVReefkUMtWZH2l9KGlD51w==", - "dev": true + "integrity": "sha512-Lkp0vFjMkBB3GTpLR8zk4NwW5EdRdnitwYJHDOOKIU85x4ckYCPQ+9WlVvSVClHxVReefkUMtWZH2l9KGlD51w==" }, "chalk": { "version": "3.0.0", @@ -21149,8 +21091,7 @@ "electron-to-chromium": { "version": "1.4.295", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.295.tgz", - "integrity": "sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw==", - "dev": true + "integrity": "sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw==" }, "elliptic": { "version": "6.5.4", @@ -21351,8 +21292,7 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-html": { "version": "1.0.3", @@ -21746,7 +21686,8 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true + "dev": true, + "requires": {} }, "eslint-scope": { "version": "5.1.1", @@ -22233,8 +22174,7 @@ "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, "get-caller-file": { "version": "2.0.5", @@ -22343,7 +22283,8 @@ "goober": { "version": "2.1.12", "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.12.tgz", - "integrity": "sha512-yXHAvO08FU1JgTXX6Zn6sYCUFfB/OJSX8HHjDSgerZHZmFKAb08cykp5LBw5QnmyMcZyPRMqkdyHUSSzge788Q==" + "integrity": "sha512-yXHAvO08FU1JgTXX6Zn6sYCUFfB/OJSX8HHjDSgerZHZmFKAb08cykp5LBw5QnmyMcZyPRMqkdyHUSSzge788Q==", + "requires": {} }, "gopd": { "version": "1.0.1", @@ -22781,7 +22722,8 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true + "dev": true, + "requires": {} }, "ieee754": { "version": "1.2.1", @@ -23614,7 +23556,8 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true + "dev": true, + "requires": {} }, "jest-regex-util": { "version": "27.5.1", @@ -24219,7 +24162,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, "requires": { "yallist": "^3.0.2" } @@ -24593,8 +24535,7 @@ "node-releases": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", - "dev": true + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, "normalize-path": { "version": "3.0.0", @@ -24968,8 +24909,7 @@ "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "picomatch": { "version": "2.3.1", @@ -25074,7 +25014,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true + "dev": true, + "requires": {} }, "postcss-modules-local-by-default": { "version": "4.0.0", @@ -25432,7 +25373,8 @@ "react-content-loader": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/react-content-loader/-/react-content-loader-6.2.0.tgz", - "integrity": "sha512-r1dI6S+uHNLW68qraLE2njJYOuy6976PpCExuCZUcABWbfnF3FMcmuESRI8L4Bj45wnZ7n8g71hkPLzbma7/Cw==" + "integrity": "sha512-r1dI6S+uHNLW68qraLE2njJYOuy6976PpCExuCZUcABWbfnF3FMcmuESRI8L4Bj45wnZ7n8g71hkPLzbma7/Cw==", + "requires": {} }, "react-dom": { "version": "18.2.0", @@ -25528,7 +25470,8 @@ "version": "2.0.7", "resolved": "https://registry.npmjs.org/react-refresh-typescript/-/react-refresh-typescript-2.0.7.tgz", "integrity": "sha512-KbuW57FauO11e6a9gU836sCm3M3z0b2+J2qPhUudg0QplOfz0eAF3gMeshcUC/ChfNLJCK1SZxvYmUtRxiZE5A==", - "dev": true + "dev": true, + "requires": {} }, "react-router": { "version": "6.8.1", @@ -25575,7 +25518,8 @@ "react-spinners": { "version": "0.13.8", "resolved": "https://registry.npmjs.org/react-spinners/-/react-spinners-0.13.8.tgz", - "integrity": "sha512-3e+k56lUkPj0vb5NDXPVFAOkPC//XyhKPJjvcGjyMNPWsBKpplfeyialP74G7H7+It7KzhtET+MvGqbKgAqpZA==" + "integrity": "sha512-3e+k56lUkPj0vb5NDXPVFAOkPC//XyhKPJjvcGjyMNPWsBKpplfeyialP74G7H7+It7KzhtET+MvGqbKgAqpZA==", + "requires": {} }, "react-switch": { "version": "7.0.0", @@ -25663,7 +25607,8 @@ "redux-persist": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-6.0.0.tgz", - "integrity": "sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ==" + "integrity": "sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ==", + "requires": {} }, "redux-saga": { "version": "1.2.2", @@ -26460,7 +26405,8 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", - "dev": true + "dev": true, + "requires": {} }, "styled-components": { "version": "5.3.6", @@ -26985,7 +26931,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -27029,12 +26974,14 @@ "use-isomorphic-layout-effect": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==" + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "requires": {} }, "use-sync-external-store": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==" + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "requires": {} }, "util": { "version": "0.12.5", @@ -27209,18 +27156,6 @@ "webpack-sources": "^3.2.3" }, "dependencies": { - "browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - } - }, "enhanced-resolve": { "version": "5.12.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", @@ -27395,7 +27330,8 @@ "version": "8.12.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.1.tgz", "integrity": "sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==", - "dev": true + "dev": true, + "requires": {} } } }, @@ -27567,7 +27503,8 @@ "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true + "dev": true, + "requires": {} }, "xml-name-validator": { "version": "3.0.0", @@ -27590,8 +27527,7 @@ "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "yaml": { "version": "1.10.2", diff --git a/src/app/components/AlertMessage/index.tsx b/src/app/components/AlertMessage/index.tsx index 8d79ca59b..893c86b37 100644 --- a/src/app/components/AlertMessage/index.tsx +++ b/src/app/components/AlertMessage/index.tsx @@ -35,6 +35,21 @@ const RowContainer = styled.div((props) => ({ borderBottom: `1px solid ${props.theme.colors.background.elevation3}`, })); +const TickMarkButtonContainer = styled.div((props) => ({ + display: 'flex', + flexDirection: 'row', + alignItems: 'center', + marginLeft: props.theme.spacing(8), + marginRight: props.theme.spacing(8), + marginBottom: props.theme.spacing(18), +})); + +const TickMarkButtonText = styled.h1((props) => ({ + ...props.theme.body_m, + color: props.theme.colors.white[0], + marginLeft: props.theme.spacing(4.25), +})); + const TransparentButtonContainer = styled.div((props) => ({ marginRight: props.theme.spacing(6), width: '100%', @@ -44,6 +59,30 @@ const ButtonImage = styled.button({ backgroundColor: 'transparent', }); +const TickButton = styled.input.attrs({ type: 'checkbox' })` + appearance: none; + border: 1.3px solid #ffffff; + width: 12px; + height: 12px; + + &:checked { + position: relative; + &::before { + content: '\\2713'; + font-size: 10px; + color: #fff; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + } + + &:hover { + background-color: #303354; + } +`; + const ButtonContainer = styled.div((props) => ({ display: 'flex', flexDirection: 'row', @@ -71,12 +110,15 @@ interface Props { description: string; buttonText?: string; secondButtonText?: string; + tickMarkButtonText?: string; onButtonClick?: () => void; onSecondButtonClick?: () => void; + tickMarkButtonClick?:() => void; + } function AlertMessage({ - onClose, title, description, buttonText, secondButtonText, onButtonClick, onSecondButtonClick, + onClose, title, description, buttonText, secondButtonText, tickMarkButtonText, onButtonClick, onSecondButtonClick, tickMarkButtonClick, }: Props) { return ( <> @@ -104,6 +146,26 @@ function AlertMessage({ /> )} + {!onSecondButtonClick && onButtonClick && ( + + + + )} + { tickMarkButtonText && tickMarkButtonClick && ( + + { + tickMarkButtonClick(); + }} + /> + {tickMarkButtonText} + + )} diff --git a/src/app/components/accountRow/index.tsx b/src/app/components/accountRow/index.tsx index 55f21d1fa..0d304fd46 100644 --- a/src/app/components/accountRow/index.tsx +++ b/src/app/components/accountRow/index.tsx @@ -9,6 +9,9 @@ import Copy from '@assets/img/Copy.svg'; import { LoaderSize } from '@utils/constants'; import { Account } from '@secretkeylabs/xverse-core'; import { useState } from 'react'; +import { useDispatch } from 'react-redux'; +import { ChangeShowBtcReceiveAlertAction } from '@stores/wallet/actions/actionCreators'; +import useWalletSelector from '@hooks/useWalletSelector'; interface GradientCircleProps { firstGradient: string; @@ -107,12 +110,19 @@ interface Props { } function AccountRow({ - account, isSelected, onAccountSelected, allowCopyAddress, + account, + isSelected, + onAccountSelected, + allowCopyAddress, }: Props) { const { t } = useTranslation('translation', { keyPrefix: 'DASHBOARD_SCREEN' }); + const { + showBtcReceiveAlert, + } = useWalletSelector(); const gradient = getAccountGradient(account?.stxAddress!); const [onStxCopied, setOnStxCopied] = useState(false); const [onBtcCopied, setOnBtcCopied] = useState(false); + const dispatch = useDispatch(); function getName() { return account?.bnsName ?? `${t('ACCOUNT_NAME')} ${`${(account?.id ?? 0) + 1}`}`; @@ -122,6 +132,7 @@ function AccountRow({ navigator.clipboard.writeText(account?.btcAddress!); setOnBtcCopied(true); setOnStxCopied(false); + if (showBtcReceiveAlert !== null) { dispatch(ChangeShowBtcReceiveAlertAction(true)); } }; const handleOnStxAddressClick = () => { @@ -131,7 +142,9 @@ function AccountRow({ }; const onRowClick = () => { - if (!allowCopyAddress) { onAccountSelected(account!); } + if (!allowCopyAddress) { + onAccountSelected(account!); + } }; const onClick = () => { diff --git a/src/app/components/extendedScreenContainer/index.tsx b/src/app/components/extendedScreenContainer/index.tsx index 9ebc9e9ee..828baa444 100644 --- a/src/app/components/extendedScreenContainer/index.tsx +++ b/src/app/components/extendedScreenContainer/index.tsx @@ -1,5 +1,9 @@ +import AlertMessage from '@components/alertMessage'; import useWalletSelector from '@hooks/useWalletSelector'; +import { ChangeShowBtcReceiveAlertAction, ChangeShowOrdinalReceiveAlertAction } from '@stores/wallet/actions/actionCreators'; +import { useState } from 'react'; import { useTranslation } from 'react-i18next'; +import { useDispatch } from 'react-redux'; import { Outlet } from 'react-router-dom'; import styled from 'styled-components'; @@ -31,15 +35,59 @@ const TestnetText = styled.h1((props) => ({ function ExtendedScreenContainer(): JSX.Element { const { network, + showBtcReceiveAlert, + showOrdinalReceiveAlert, } = useWalletSelector(); - const { t } = useTranslation('translation', { keyPrefix: 'SETTING_SCREEN' }); + const { t } = useTranslation('translation'); + const [dontShowOrdinalReceiveAlert, setDontShowOrdinalReceiveAlert] = useState(false); + const [dontShowBtcReceiveAlert, setDontShowBtcReceiveAlert] = useState(false); + const dispatch = useDispatch(); + + const onReceiveAlertClose = () => { + if (dontShowBtcReceiveAlert) { dispatch(ChangeShowBtcReceiveAlertAction(null)); } else dispatch(ChangeShowBtcReceiveAlertAction(false)); + }; + + const onReceiveOrdinalAlertClose = () => { + if (dontShowOrdinalReceiveAlert) { dispatch(ChangeShowOrdinalReceiveAlertAction(null)); } else dispatch(ChangeShowOrdinalReceiveAlertAction(false)); + }; + + const onDontShowReceiveBtcAlert = () => { + setDontShowBtcReceiveAlert(true); + }; + + const onDontShowReceiveOrdinalAlert = () => { + setDontShowOrdinalReceiveAlert(true); + }; + return ( {network.type === 'Testnet' && ( - {t('TESTNET')} + {t('SETTING_SCREEN.TESTNET')} )} + {showBtcReceiveAlert && ( + + )} + {showOrdinalReceiveAlert && ( + + )} ); diff --git a/src/app/components/screenContainer/index.tsx b/src/app/components/screenContainer/index.tsx index cab1898ea..e6763208d 100644 --- a/src/app/components/screenContainer/index.tsx +++ b/src/app/components/screenContainer/index.tsx @@ -1,5 +1,9 @@ +import AlertMessage from '@components/alertMessage'; import useWalletSelector from '@hooks/useWalletSelector'; +import { ChangeShowBtcReceiveAlertAction, ChangeShowOrdinalReceiveAlertAction } from '@stores/wallet/actions/actionCreators'; +import { useState } from 'react'; import { useTranslation } from 'react-i18next'; +import { useDispatch } from 'react-redux'; import { Outlet } from 'react-router-dom'; import styled from 'styled-components'; @@ -32,15 +36,59 @@ const TestnetText = styled.h1((props) => ({ function ScreenContainer(): JSX.Element { const { network, + showBtcReceiveAlert, + showOrdinalReceiveAlert, } = useWalletSelector(); - const { t } = useTranslation('translation', { keyPrefix: 'SETTING_SCREEN' }); + const { t } = useTranslation('translation'); + const [dontShowOrdinalReceiveAlert, setDontShowOrdinalReceiveAlert] = useState(false); + const [dontShowBtcReceiveAlert, setDontShowBtcReceiveAlert] = useState(false); + const dispatch = useDispatch(); + + const onReceiveAlertClose = () => { + if (dontShowBtcReceiveAlert) { dispatch(ChangeShowBtcReceiveAlertAction(null)); } else dispatch(ChangeShowBtcReceiveAlertAction(false)); + }; + + const onReceiveOrdinalAlertClose = () => { + if (dontShowOrdinalReceiveAlert) { dispatch(ChangeShowOrdinalReceiveAlertAction(null)); } else dispatch(ChangeShowOrdinalReceiveAlertAction(false)); + }; + + const onDontShowReceiveBtcAlert = () => { + setDontShowBtcReceiveAlert(true); + }; + + const onDontShowReceiveOrdinalAlert = () => { + setDontShowOrdinalReceiveAlert(true); + }; + return ( {network.type === 'Testnet' && ( - {t('TESTNET')} + {t('SETTING_SCREEN.TESTNET')} )} + {showBtcReceiveAlert && ( + + )} + {showOrdinalReceiveAlert && ( + + )} ); diff --git a/src/app/screens/home/index.tsx b/src/app/screens/home/index.tsx index 24a48391e..63f98c5fd 100644 --- a/src/app/screens/home/index.tsx +++ b/src/app/screens/home/index.tsx @@ -111,7 +111,6 @@ function Home() { const { stxAddress, btcAddress, - ordinalsAddress, masterPubKey, fiatCurrency, btcFiatRate, diff --git a/src/app/screens/nftDashboard/receiveNft/receiveCardComponent/index.tsx b/src/app/screens/nftDashboard/receiveNft/receiveCardComponent/index.tsx index ffe734d4c..726f9556d 100644 --- a/src/app/screens/nftDashboard/receiveNft/receiveCardComponent/index.tsx +++ b/src/app/screens/nftDashboard/receiveNft/receiveCardComponent/index.tsx @@ -5,6 +5,9 @@ import { getShortTruncatedAddress } from '@utils/helper'; import Copy from '@assets/img/nftDashboard/Copy.svg'; import QrCode from '@assets/img/nftDashboard/QrCode.svg'; import { useTranslation } from 'react-i18next'; +import { ChangeShowOrdinalReceiveAlertAction } from '@stores/wallet/actions/actionCreators'; +import { useDispatch } from 'react-redux'; +import useWalletSelector from '@hooks/useWalletSelector'; interface Props { icon: string; @@ -83,7 +86,13 @@ function ReceiveCardComponent({ icon, title, address, onQrAddressClick, }: Props) { const { t } = useTranslation('translation', { keyPrefix: 'NFT_DASHBOARD_SCREEN' }); + const dispatch = useDispatch(); + const { + ordinalsAddress, + showOrdinalReceiveAlert, + } = useWalletSelector(); const onCopyClick = () => { + if (ordinalsAddress === address && showOrdinalReceiveAlert !== null) { dispatch(ChangeShowOrdinalReceiveAlertAction(true)); } navigator.clipboard.writeText(address); }; diff --git a/src/app/screens/receive/index.tsx b/src/app/screens/receive/index.tsx index 47b9c88d6..3415efb70 100644 --- a/src/app/screens/receive/index.tsx +++ b/src/app/screens/receive/index.tsx @@ -10,6 +10,8 @@ import ActionButton from '@components/button'; import useWalletSelector from '@hooks/useWalletSelector'; import BottomTabBar from '@components/tabBar'; import InfoContainer from '@components/infoContainer'; +import { useDispatch } from 'react-redux'; +import { ChangeShowBtcReceiveAlertAction, ChangeShowOrdinalReceiveAlertAction } from '@stores/wallet/actions/actionCreators'; const OuterContainer = styled.div` display: flex; @@ -94,11 +96,14 @@ function Receive(): JSX.Element { const { t } = useTranslation('translation', { keyPrefix: 'RECEIVE' }); const [addressCopied, setAddressCopied] = useState(false); const navigate = useNavigate(); + const dispatch = useDispatch(); const { stxAddress, btcAddress, ordinalsAddress, selectedAccount, + showBtcReceiveAlert, + showOrdinalReceiveAlert, } = useWalletSelector(); const { currency } = useParams(); @@ -142,6 +147,8 @@ function Receive(): JSX.Element { const handleOnClick = () => { navigator.clipboard.writeText(getAddress()); setAddressCopied(true); + if (currency === 'BTC' && showBtcReceiveAlert !== null) { dispatch(ChangeShowBtcReceiveAlertAction(true)); } + if (currency === 'ORD' && showOrdinalReceiveAlert !== null) { dispatch(ChangeShowOrdinalReceiveAlertAction(true)); } }; return ( <> diff --git a/src/app/stores/wallet/actions/actionCreators.ts b/src/app/stores/wallet/actions/actionCreators.ts index 119140de0..effe0abbb 100644 --- a/src/app/stores/wallet/actions/actionCreators.ts +++ b/src/app/stores/wallet/actions/actionCreators.ts @@ -270,3 +270,17 @@ export function ChangeActivateOrdinalsAction(hasActivatedOrdinalsKey: boolean): hasActivatedOrdinalsKey, }; } + +export function ChangeShowBtcReceiveAlertAction(showBtcReceiveAlert: boolean | null): actions.ChangeShowBtcReceiveAlert { + return { + type: actions.ChangeShowBtcReceiveAlertKey, + showBtcReceiveAlert, + }; +} + +export function ChangeShowOrdinalReceiveAlertAction(showOrdinalReceiveAlert: boolean | null): actions.ChangeShowOrdinalReceiveAlert { + return { + type: actions.ChangeShowOrdinalReceiveAlertKey, + showOrdinalReceiveAlert, + }; +} diff --git a/src/app/stores/wallet/actions/types.ts b/src/app/stores/wallet/actions/types.ts index 1cea74d56..740e32bff 100644 --- a/src/app/stores/wallet/actions/types.ts +++ b/src/app/stores/wallet/actions/types.ts @@ -46,6 +46,9 @@ export const FetchCoinDataFailureKey = 'FetchCoinDataFailure'; export const ChangeHasActivatedOrdinalsKey = 'ChangeHasActivatedOrdinalsKey'; +export const ChangeShowBtcReceiveAlertKey = 'ChangeShowBtcReceiveAlertKey'; +export const ChangeShowOrdinalReceiveAlertKey = 'ChangeShowOrdinalReceiveAlertKey'; + export interface WalletState { stxAddress: string; btcAddress: string; @@ -74,6 +77,8 @@ export interface WalletState { feeMultipliers: FeesMultipliers | null; networkAddress: string | undefined; hasActivatedOrdinalsKey: boolean | undefined; + showBtcReceiveAlert: boolean | null; + showOrdinalReceiveAlert: boolean | null; } export interface SetWallet { @@ -229,6 +234,16 @@ export interface ChangeActivateOrdinals { hasActivatedOrdinalsKey: boolean; } +export interface ChangeShowBtcReceiveAlert { + type: typeof ChangeShowBtcReceiveAlertKey; + showBtcReceiveAlert: boolean | null; +} + +export interface ChangeShowOrdinalReceiveAlert { + type: typeof ChangeShowOrdinalReceiveAlertKey; + showOrdinalReceiveAlert: boolean | null; +} + export type WalletActions = | SetWallet | ResetWallet @@ -256,4 +271,6 @@ export type WalletActions = | ChangeFiatCurrency | ChangeNetwork | GetActiveAccounts - | ChangeActivateOrdinals; + | ChangeActivateOrdinals + | ChangeShowBtcReceiveAlert + | ChangeShowOrdinalReceiveAlert; diff --git a/src/app/stores/wallet/walletReducer.ts b/src/app/stores/wallet/walletReducer.ts index 9355842fa..7136b0291 100644 --- a/src/app/stores/wallet/walletReducer.ts +++ b/src/app/stores/wallet/walletReducer.ts @@ -27,6 +27,8 @@ import { GetActiveAccountsKey, SetWalletSeedPhraseKey, ChangeHasActivatedOrdinalsKey, + ChangeShowBtcReceiveAlertKey, + ChangeShowOrdinalReceiveAlertKey, } from './actions/types'; const initialWalletState: WalletState = { @@ -60,6 +62,8 @@ const initialWalletState: WalletState = { hasRestoredMemoryKey: false, networkAddress: undefined, hasActivatedOrdinalsKey: undefined, + showBtcReceiveAlert: false, + showOrdinalReceiveAlert: false, }; const walletReducer = ( @@ -213,6 +217,16 @@ const walletReducer = ( ...state, hasActivatedOrdinalsKey: action.hasActivatedOrdinalsKey, }; + case ChangeShowBtcReceiveAlertKey: + return { + ...state, + showBtcReceiveAlert: action.showBtcReceiveAlert, + }; + case ChangeShowOrdinalReceiveAlertKey: + return { + ...state, + showOrdinalReceiveAlert: action.showOrdinalReceiveAlert, + }; default: return state; } diff --git a/src/locales/en.json b/src/locales/en.json index b58d526c5..8d7d3dad1 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -418,5 +418,13 @@ "WINDOW_CLOSED_ALERT": { "TITLE": "Requesting window closed", "BODY": "The window that initiated the request is closed, but you can still broadcast the transaction" + }, + "ADDRESS_RECEIVE_ALERT_MESSAGE": { + "RECEIVING_ORDINALS": "Receiving Ordinals", + "RECEIVING_ORDINAL_INFO": "If you want to receive Bitcoin, do not use your Ordinal address ; go to the main tab and use your Bitcoin receive address instead.", + "RECEIVING_BTC": "Receiving Bitcoin", + "RECEIVING_BTC_INFO": "If you want to receive Ordinal, do not use your BTC address ; go to the NFT tab and use your Ordinal receive address instead.", + "I_UNDERSTAND": "I understand", + "DO_NOT_SHOW_MESSAGE": "Do not show this message again" } } From fdc2bf6cd25e3819969e65bd41bbe3e3f040d93d Mon Sep 17 00:00:00 2001 From: DuskaT021 Date: Thu, 23 Feb 2023 12:37:07 +0100 Subject: [PATCH 02/16] Updated the copy --- src/locales/en.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index 8d7d3dad1..8080167a9 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -421,9 +421,9 @@ }, "ADDRESS_RECEIVE_ALERT_MESSAGE": { "RECEIVING_ORDINALS": "Receiving Ordinals", - "RECEIVING_ORDINAL_INFO": "If you want to receive Bitcoin, do not use your Ordinal address ; go to the main tab and use your Bitcoin receive address instead.", + "RECEIVING_ORDINAL_INFO": "Use this address to receive Ordinals only. Do not use this address to receive Bitcoin payments.", "RECEIVING_BTC": "Receiving Bitcoin", - "RECEIVING_BTC_INFO": "If you want to receive Ordinal, do not use your BTC address ; go to the NFT tab and use your Ordinal receive address instead.", + "RECEIVING_BTC_INFO": "Use this address to receive Bitcoin payments only. Do not use this address to receive Ordinals.", "I_UNDERSTAND": "I understand", "DO_NOT_SHOW_MESSAGE": "Do not show this message again" } From 12c6a776d9a8352b0eec3acd738d78e32ed5b1b7 Mon Sep 17 00:00:00 2001 From: Mahmoud Date: Fri, 24 Feb 2023 08:44:10 +0200 Subject: [PATCH 03/16] init ordinal transfers screens --- package-lock.json | 298 +++++++----------- package.json | 2 +- src/app/components/infoContainer/index.tsx | 19 +- src/app/components/sendForm/index.tsx | 11 +- src/app/routes/index.tsx | 22 ++ .../confirmOrdinalTransaction/index.tsx | 232 ++++++++++++++ src/app/screens/nftDashboard/index.tsx | 2 +- src/app/screens/ordinalDetail/index.tsx | 76 ++--- src/app/screens/sendOrdinal/index.tsx | 262 +++++++++++++++ src/app/utils/constants.ts | 2 +- src/assets/img/Warning.svg | 5 + src/locales/en.json | 4 +- 12 files changed, 699 insertions(+), 236 deletions(-) create mode 100644 src/app/screens/confirmOrdinalTransaction/index.tsx create mode 100644 src/app/screens/sendOrdinal/index.tsx create mode 100644 src/assets/img/Warning.svg diff --git a/package-lock.json b/package-lock.json index 332c443f4..e9958af56 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,15 @@ { "name": "xverse-web-extension", - "version": "0.2.0", + "version": "0.2.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "xverse-web-extension", - "version": "0.2.0", + "version": "0.2.1", "dependencies": { "@react-spring/web": "^9.6.1", - "@secretkeylabs/xverse-core": "0.7.3", + "@secretkeylabs/xverse-core": "0.7.4", "@stacks/connect": "^6.10.2", "@stacks/encryption": "4.3.5", "@stacks/stacks-blockchain-api-types": "^6.1.1", @@ -119,7 +119,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -143,7 +142,6 @@ "version": "7.20.14", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz", "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -152,7 +150,6 @@ "version": "7.20.12", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", - "dev": true, "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", @@ -182,7 +179,6 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, "bin": { "json5": "lib/cli.js" }, @@ -194,7 +190,6 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -251,7 +246,6 @@ "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", - "dev": true, "dependencies": { "@babel/compat-data": "^7.20.5", "@babel/helper-validator-option": "^7.18.6", @@ -266,39 +260,10 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -349,7 +314,6 @@ "version": "7.20.11", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", - "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", @@ -376,7 +340,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dev": true, "dependencies": { "@babel/types": "^7.20.2" }, @@ -415,7 +378,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -424,7 +386,6 @@ "version": "7.20.13", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", - "dev": true, "dependencies": { "@babel/template": "^7.20.7", "@babel/traverse": "^7.20.13", @@ -1583,7 +1544,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -1959,9 +1919,9 @@ } }, "node_modules/@secretkeylabs/xverse-core": { - "version": "0.7.3", - "resolved": "https://npm.pkg.github.com/download/@secretkeylabs/xverse-core/0.7.3/17b23a971ca01d41255d20bb17c43ed2944f9e50", - "integrity": "sha512-jajL4AKjlCrfiBQbF7V++ZkA7v1GWqVku5/8TE2kMb0FEFFXrSAymHAfBq4BPERTXAI2CA6csoAvDjMXcQvDiA==", + "version": "0.7.4", + "resolved": "https://npm.pkg.github.com/download/@secretkeylabs/xverse-core/0.7.4/04a1d022b070b7af1b5ab149bc0ee7a45f4de4e0", + "integrity": "sha512-QjcvosTrQKm8Tr6yAld1bLgqZPrlQMDzMH0R2OqxRa3FCWKeCl2buZejeQl1BqevkzaAi+dap6RC3e30cUN0ww==", "hasInstallScript": true, "license": "ISC", "dependencies": { @@ -1982,7 +1942,7 @@ "buffer": "6.0.3", "ecpair": "^2.1.0", "jsontokens": "^4.0.1", - "micro-btc-signer": "^0.4.0", + "micro-btc-signer": "^0.4.2", "process": "^0.11.10", "util": "^0.12.4" } @@ -4976,6 +4936,19 @@ "semver": "^5.3.0" } }, + "node_modules/babel-preset-env/node_modules/browserslist": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + }, + "bin": { + "browserslist": "cli.js" + } + }, "node_modules/babel-preset-env/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -5502,16 +5475,30 @@ } }, "node_modules/browserslist": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", - "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", - "dev": true, + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], "dependencies": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" }, "bin": { "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, "node_modules/bs-logger": { @@ -5675,7 +5662,6 @@ "version": "1.0.30001452", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001452.tgz", "integrity": "sha512-Lkp0vFjMkBB3GTpLR8zk4NwW5EdRdnitwYJHDOOKIU85x4ckYCPQ+9WlVvSVClHxVReefkUMtWZH2l9KGlD51w==", - "dev": true, "funding": [ { "type": "opencollective", @@ -6908,8 +6894,7 @@ "node_modules/electron-to-chromium": { "version": "1.4.295", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.295.tgz", - "integrity": "sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw==", - "dev": true + "integrity": "sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw==" }, "node_modules/elliptic": { "version": "6.5.4", @@ -7158,7 +7143,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, "engines": { "node": ">=6" } @@ -8313,7 +8297,6 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -10987,7 +10970,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, "dependencies": { "yallist": "^3.0.2" } @@ -11454,8 +11436,7 @@ "node_modules/node-releases": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", - "dev": true + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -11953,8 +11934,7 @@ "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -14689,7 +14669,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -15261,34 +15240,6 @@ "node": ">=10.13.0" } }, - "node_modules/webpack/node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, "node_modules/webpack/node_modules/enhanced-resolve": { "version": "5.12.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", @@ -15532,8 +15483,7 @@ "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/yaml": { "version": "1.10.2", @@ -15601,7 +15551,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, "requires": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -15618,14 +15567,12 @@ "@babel/compat-data": { "version": "7.20.14", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz", - "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==", - "dev": true + "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==" }, "@babel/core": { "version": "7.20.12", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", - "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", @@ -15647,14 +15594,12 @@ "json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -15697,7 +15642,6 @@ "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", - "dev": true, "requires": { "@babel/compat-data": "^7.20.5", "@babel/helper-validator-option": "^7.18.6", @@ -15706,23 +15650,10 @@ "semver": "^6.3.0" }, "dependencies": { - "browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - } - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -15760,7 +15691,6 @@ "version": "7.20.11", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", - "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", @@ -15781,7 +15711,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dev": true, "requires": { "@babel/types": "^7.20.2" } @@ -15807,14 +15736,12 @@ "@babel/helper-validator-option": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" }, "@babel/helpers": { "version": "7.20.13", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", - "dev": true, "requires": { "@babel/template": "^7.20.7", "@babel/traverse": "^7.20.13", @@ -16232,7 +16159,8 @@ "@emotion/use-insertion-effect-with-fallbacks": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", - "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==" + "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", + "requires": {} }, "@emotion/utils": { "version": "1.2.0", @@ -16696,7 +16624,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, "requires": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -16953,9 +16880,9 @@ } }, "@secretkeylabs/xverse-core": { - "version": "0.7.3", - "resolved": "https://npm.pkg.github.com/download/@secretkeylabs/xverse-core/0.7.3/17b23a971ca01d41255d20bb17c43ed2944f9e50", - "integrity": "sha512-jajL4AKjlCrfiBQbF7V++ZkA7v1GWqVku5/8TE2kMb0FEFFXrSAymHAfBq4BPERTXAI2CA6csoAvDjMXcQvDiA==", + "version": "0.7.4", + "resolved": "https://npm.pkg.github.com/download/@secretkeylabs/xverse-core/0.7.4/04a1d022b070b7af1b5ab149bc0ee7a45f4de4e0", + "integrity": "sha512-QjcvosTrQKm8Tr6yAld1bLgqZPrlQMDzMH0R2OqxRa3FCWKeCl2buZejeQl1BqevkzaAi+dap6RC3e30cUN0ww==", "requires": { "@noble/secp256k1": "^1.7.1", "@scure/base": "^1.1.1", @@ -16974,7 +16901,7 @@ "buffer": "6.0.3", "ecpair": "^2.1.0", "jsontokens": "^4.0.1", - "micro-btc-signer": "^0.4.0", + "micro-btc-signer": "^0.4.2", "process": "^0.11.10", "util": "^0.12.4" }, @@ -18410,7 +18337,8 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", - "dev": true + "dev": true, + "requires": {} }, "@webpack-cli/info": { "version": "1.5.0", @@ -18425,7 +18353,8 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", - "dev": true + "dev": true, + "requires": {} }, "@xtuc/ieee754": { "version": "1.2.0", @@ -18483,13 +18412,15 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true + "dev": true, + "requires": {} }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true + "dev": true, + "requires": {} }, "acorn-walk": { "version": "7.2.0", @@ -18551,7 +18482,8 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true + "dev": true, + "requires": {} }, "ansi-escapes": { "version": "4.3.2", @@ -19576,6 +19508,16 @@ "semver": "^5.3.0" }, "dependencies": { + "browserslist": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + } + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -20052,13 +19994,14 @@ } }, "browserslist": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", - "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", - "dev": true, + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "requires": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" } }, "bs-logger": { @@ -20188,8 +20131,7 @@ "caniuse-lite": { "version": "1.0.30001452", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001452.tgz", - "integrity": "sha512-Lkp0vFjMkBB3GTpLR8zk4NwW5EdRdnitwYJHDOOKIU85x4ckYCPQ+9WlVvSVClHxVReefkUMtWZH2l9KGlD51w==", - "dev": true + "integrity": "sha512-Lkp0vFjMkBB3GTpLR8zk4NwW5EdRdnitwYJHDOOKIU85x4ckYCPQ+9WlVvSVClHxVReefkUMtWZH2l9KGlD51w==" }, "chalk": { "version": "3.0.0", @@ -21149,8 +21091,7 @@ "electron-to-chromium": { "version": "1.4.295", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.295.tgz", - "integrity": "sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw==", - "dev": true + "integrity": "sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw==" }, "elliptic": { "version": "6.5.4", @@ -21351,8 +21292,7 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-html": { "version": "1.0.3", @@ -21746,7 +21686,8 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true + "dev": true, + "requires": {} }, "eslint-scope": { "version": "5.1.1", @@ -22233,8 +22174,7 @@ "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, "get-caller-file": { "version": "2.0.5", @@ -22343,7 +22283,8 @@ "goober": { "version": "2.1.12", "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.12.tgz", - "integrity": "sha512-yXHAvO08FU1JgTXX6Zn6sYCUFfB/OJSX8HHjDSgerZHZmFKAb08cykp5LBw5QnmyMcZyPRMqkdyHUSSzge788Q==" + "integrity": "sha512-yXHAvO08FU1JgTXX6Zn6sYCUFfB/OJSX8HHjDSgerZHZmFKAb08cykp5LBw5QnmyMcZyPRMqkdyHUSSzge788Q==", + "requires": {} }, "gopd": { "version": "1.0.1", @@ -22781,7 +22722,8 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true + "dev": true, + "requires": {} }, "ieee754": { "version": "1.2.1", @@ -23614,7 +23556,8 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true + "dev": true, + "requires": {} }, "jest-regex-util": { "version": "27.5.1", @@ -24219,7 +24162,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, "requires": { "yallist": "^3.0.2" } @@ -24593,8 +24535,7 @@ "node-releases": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", - "dev": true + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, "normalize-path": { "version": "3.0.0", @@ -24968,8 +24909,7 @@ "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "picomatch": { "version": "2.3.1", @@ -25074,7 +25014,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true + "dev": true, + "requires": {} }, "postcss-modules-local-by-default": { "version": "4.0.0", @@ -25432,7 +25373,8 @@ "react-content-loader": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/react-content-loader/-/react-content-loader-6.2.0.tgz", - "integrity": "sha512-r1dI6S+uHNLW68qraLE2njJYOuy6976PpCExuCZUcABWbfnF3FMcmuESRI8L4Bj45wnZ7n8g71hkPLzbma7/Cw==" + "integrity": "sha512-r1dI6S+uHNLW68qraLE2njJYOuy6976PpCExuCZUcABWbfnF3FMcmuESRI8L4Bj45wnZ7n8g71hkPLzbma7/Cw==", + "requires": {} }, "react-dom": { "version": "18.2.0", @@ -25528,7 +25470,8 @@ "version": "2.0.7", "resolved": "https://registry.npmjs.org/react-refresh-typescript/-/react-refresh-typescript-2.0.7.tgz", "integrity": "sha512-KbuW57FauO11e6a9gU836sCm3M3z0b2+J2qPhUudg0QplOfz0eAF3gMeshcUC/ChfNLJCK1SZxvYmUtRxiZE5A==", - "dev": true + "dev": true, + "requires": {} }, "react-router": { "version": "6.8.1", @@ -25575,7 +25518,8 @@ "react-spinners": { "version": "0.13.8", "resolved": "https://registry.npmjs.org/react-spinners/-/react-spinners-0.13.8.tgz", - "integrity": "sha512-3e+k56lUkPj0vb5NDXPVFAOkPC//XyhKPJjvcGjyMNPWsBKpplfeyialP74G7H7+It7KzhtET+MvGqbKgAqpZA==" + "integrity": "sha512-3e+k56lUkPj0vb5NDXPVFAOkPC//XyhKPJjvcGjyMNPWsBKpplfeyialP74G7H7+It7KzhtET+MvGqbKgAqpZA==", + "requires": {} }, "react-switch": { "version": "7.0.0", @@ -25663,7 +25607,8 @@ "redux-persist": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-6.0.0.tgz", - "integrity": "sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ==" + "integrity": "sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ==", + "requires": {} }, "redux-saga": { "version": "1.2.2", @@ -26460,7 +26405,8 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", - "dev": true + "dev": true, + "requires": {} }, "styled-components": { "version": "5.3.6", @@ -26985,7 +26931,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -27029,12 +26974,14 @@ "use-isomorphic-layout-effect": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==" + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "requires": {} }, "use-sync-external-store": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==" + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "requires": {} }, "util": { "version": "0.12.5", @@ -27209,18 +27156,6 @@ "webpack-sources": "^3.2.3" }, "dependencies": { - "browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - } - }, "enhanced-resolve": { "version": "5.12.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", @@ -27395,7 +27330,8 @@ "version": "8.12.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.1.tgz", "integrity": "sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==", - "dev": true + "dev": true, + "requires": {} } } }, @@ -27567,7 +27503,8 @@ "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true + "dev": true, + "requires": {} }, "xml-name-validator": { "version": "3.0.0", @@ -27590,8 +27527,7 @@ "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "yaml": { "version": "1.10.2", diff --git a/package.json b/package.json index 3cd4b3e95..4577fb45c 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "private": true, "dependencies": { "@react-spring/web": "^9.6.1", - "@secretkeylabs/xverse-core": "0.7.3", + "@secretkeylabs/xverse-core": "0.7.4", "@stacks/connect": "^6.10.2", "@stacks/encryption": "4.3.5", "@stacks/stacks-blockchain-api-types": "^6.1.1", diff --git a/src/app/components/infoContainer/index.tsx b/src/app/components/infoContainer/index.tsx index 822392060..1ef1d73ca 100644 --- a/src/app/components/infoContainer/index.tsx +++ b/src/app/components/infoContainer/index.tsx @@ -1,7 +1,8 @@ import styled from 'styled-components'; import InfoIcon from '@assets/img/info.svg'; +import WarningIcon from '@assets/img/Warning.svg'; -const Container = styled.div((props) => ({ +const Container = styled.div<{ type: 'Info' | 'Warning' | undefined }>((props) => ({ display: 'flex', flexDirection: 'row', borderRadius: 12, @@ -9,7 +10,9 @@ const Container = styled.div((props) => ({ backgroundColor: 'transparent', padding: props.theme.spacing(8), marginBottom: props.theme.spacing(6), - border: '1px solid rgba(255, 255, 255, 0.2)', + border: `1px solid ${ + props.type === 'Warning' ? props.theme.colors.feedback.error_700 : 'rgba(255, 255, 255, 0.2)' + }`, })); const TextContainer = styled.div((props) => ({ @@ -38,20 +41,22 @@ const Text = styled.h1((props) => ({ interface Props { titleText?: string; bodyText: string; + type?: 'Info' | 'Warning'; } -function InfoContainer({ titleText, bodyText }: Props) { +function InfoContainer({ titleText, bodyText, type }: Props) { return ( - - alert + + alert {titleText ? ( <> {titleText} {bodyText} - ) - : {bodyText}} + ) : ( + {bodyText} + )} ); diff --git a/src/app/components/sendForm/index.tsx b/src/app/components/sendForm/index.tsx index 2bc4bd8fe..90c0f96fb 100644 --- a/src/app/components/sendForm/index.tsx +++ b/src/app/components/sendForm/index.tsx @@ -329,7 +329,7 @@ function SendForm({ @@ -379,7 +379,7 @@ function SendForm({ return ( <> - {currencyType !== 'NFT' && ( + {currencyType !== 'NFT' && currencyType !== 'Ordinal' && ( {addressError} - {currencyType !== 'BTC' && currencyType !== 'NFT' && !hideMemo && ( + {currencyType !== 'BTC' && currencyType !== 'NFT' && currencyType !== 'Ordinal' && !hideMemo && ( <> {t('MEMO')} @@ -419,6 +419,11 @@ function SendForm({ )} + { + currencyType === 'Ordinal' && ( + + ) + } diff --git a/src/app/routes/index.tsx b/src/app/routes/index.tsx index f9fb02564..65e4016ad 100644 --- a/src/app/routes/index.tsx +++ b/src/app/routes/index.tsx @@ -40,6 +40,8 @@ import SignatureRequest from '@screens/signatureRequest'; import TransactionRequest from '@screens/transactionRequest'; import ErrorBoundary from '@screens/error'; import OrdinalDetailScreen from '@screens/ordinalDetail'; +import SendOrdinal from '@screens/sendOrdinal'; +import ConfirmOrdinalTransaction from '@screens/confirmOrdinalTransaction'; const router = createHashRouter([ { @@ -195,6 +197,14 @@ const router = createHashRouter([ ), }, + { + path: 'send-ordinal', + element: ( + + + + ), + }, ], }, { @@ -226,6 +236,18 @@ const router = createHashRouter([ path: 'confirm-nft-tx/:id', element: , }, + { + path: 'confirm-ordinal-tx/:id', + element: , + }, + { + path: 'nft-dashboard/ordinal-detail/:id/send-ordinal', + element: ( + + + + ), + }, ], }, ]); diff --git a/src/app/screens/confirmOrdinalTransaction/index.tsx b/src/app/screens/confirmOrdinalTransaction/index.tsx new file mode 100644 index 000000000..440946c0f --- /dev/null +++ b/src/app/screens/confirmOrdinalTransaction/index.tsx @@ -0,0 +1,232 @@ +import { useTranslation } from 'react-i18next'; +import styled from 'styled-components'; +import { useMutation } from '@tanstack/react-query'; +import { useEffect, useState } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { useLocation, useNavigate, useParams } from 'react-router-dom'; +import ArrowLeft from '@assets/img/dashboard/arrow_left.svg'; +import Seperator from '@components/seperator'; +import { StoreState } from '@stores/index'; +import BottomBar from '@components/tabBar'; +import { fetchBtcWalletDataRequestAction } from '@stores/wallet/actions/actionCreators'; +import RecipientAddressView from '@components/recipinetAddressView'; +import useNftDataSelector from '@hooks/useNftDataSelector'; +import AccountHeaderComponent from '@components/accountHeader'; +import TopRow from '@components/topRow'; +import ConfirmBtcTransactionComponent from '@screens/confrimBtcTransaction/confirmBtcTransactionComponent'; +import { BtcTransactionBroadcastResponse, broadcastRawBtcTransaction } from '@secretkeylabs/xverse-core'; +import OrdinalImage from '@screens/ordinals/ordinalImage'; + +const ScrollContainer = styled.div` + display: flex; + flex: 1; + flex-direction: column; + overflow-y: auto; + &::-webkit-scrollbar { + display: none; + } + height: 600px; + width: 360px; + margin: auto; +`; + +const InfoContainer = styled.div((props) => ({ + display: 'flex', + flexDirection: 'column', + marginTop: props.theme.spacing(12), +})); + +const TitleText = styled.h1((props) => ({ + ...props.theme.headline_category_s, + color: props.theme.colors.white['400'], + textTransform: 'uppercase', +})); + +const ButtonContainer = styled.div((props) => ({ + display: 'flex', + flexDirection: 'row', + marginLeft: '15%', + marginTop: props.theme.spacing(40), +})); + +const Button = styled.button((props) => ({ + display: 'flex', + flexDirection: 'row', + justifyContent: 'flex-end', + alignItems: 'center', + borderRadius: props.theme.radius(1), + backgroundColor: 'transparent', + opacity: 0.8, + marginTop: props.theme.spacing(5), +})); + +const ButtonText = styled.div((props) => ({ + ...props.theme.body_xs, + fontWeight: 400, + fontSize: 14, + color: props.theme.colors.white['0'], + textAlign: 'center', +})); + +const ButtonImage = styled.img((props) => ({ + marginRight: props.theme.spacing(3), + alignSelf: 'center', + transform: 'all', +})); + +const IndicationText = styled.h1((props) => ({ + ...props.theme.headline_category_s, + color: props.theme.colors.white['400'], + textTransform: 'uppercase', + fontSize: 14, +})); + +const ValueText = styled.h1((props) => ({ + ...props.theme.body_m, + marginTop: props.theme.spacing(2), + wordBreak: 'break-all', +})); + +const Container = styled.div({ + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', +}); + +const NFtContainer = styled.div((props) => ({ + maxWidth: 120, + maxHeight: 120, + width: '60%', + display: 'flex', + aspectRatio: 1, + justifyContent: 'center', + alignItems: 'center', + borderRadius: 8, + padding: props.theme.spacing(5), + marginBottom: props.theme.spacing(6), +})); + +const OrdinalInscriptionNumber = styled.h1((props) => ({ + ...props.theme.headline_s, + color: props.theme.colors.white['0'], + textAlign: 'center', +})); + +function ConfirmOrdinalTransaction() { + const { t } = useTranslation('translation', { keyPrefix: 'CONFIRM_TRANSACTION' }); + const isGalleryOpen: boolean = document.documentElement.clientWidth > 360; + const navigate = useNavigate(); + const dispatch = useDispatch(); + const { + network, btcAddress, stxBtcRate, btcFiatRate, + } = useSelector( + (state: StoreState) => state.walletState, + ); + const [recipientAddress, setRecipientAddress] = useState(''); + const location = useLocation(); + const { fee, amount, signedTxHex } = location.state; + const { + isLoading, + error: txError, + data: btcTxBroadcastData, + mutate, + } = useMutation( + async ({ signedTx }) => broadcastRawBtcTransaction(signedTx, network.type), + ); + const { id } = useParams(); + const { ordinalsData } = useNftDataSelector(); + const ordinalId = id!.split('::'); + const ordinal = ordinalsData.find((inscription) => inscription?.metadata?.id === ordinalId[0]); + + useEffect(() => { + setRecipientAddress(location.state.recipientAddress); + }, [location]); + + useEffect(() => { + if (btcTxBroadcastData) { + navigate('/tx-status', { + state: { + txid: btcTxBroadcastData.tx.hash, + currency: 'BTC', + error: '', + }, + }); + setTimeout(() => { + dispatch( + fetchBtcWalletDataRequestAction(btcAddress, network.type, stxBtcRate, btcFiatRate), + ); + }, 1000); + } + }, [btcTxBroadcastData]); + + useEffect(() => { + if (txError) { + navigate('/tx-status', { + state: { + txid: '', + currency: 'BTC', + error: txError.toString(), + }, + }); + } + }, [txError]); + + const networkInfoSection = ( + + {t('NETWORK')} + {network.type} + + ); + + const handleOnConfirmClick = (txHex: string) => { + mutate({ signedTx: txHex }); + }; + + const handleOnCancelClick = () => { + navigate(-1); + }; + + return ( + <> + {isGalleryOpen && ( + <> + + + + + + )} + + {!isGalleryOpen && } + + + + + + {ordinal?.inscriptionNumber} + + + {networkInfoSection} + + + {!isGalleryOpen && } + + + ); +} +export default ConfirmOrdinalTransaction; diff --git a/src/app/screens/nftDashboard/index.tsx b/src/app/screens/nftDashboard/index.tsx index 571ee4ca3..c08ad80cf 100644 --- a/src/app/screens/nftDashboard/index.tsx +++ b/src/app/screens/nftDashboard/index.tsx @@ -16,7 +16,7 @@ import ShareDialog from '@components/shareNft'; import AccountHeaderComponent from '@components/accountHeader'; import useNetworkSelector from '@hooks/useNetwork'; import Ordinal from '@screens/ordinals'; -import AlertMessage from '@components/alertMessage'; +import AlertMessage from '@components/AlertMessage'; import { ChangeActivateOrdinalsAction } from '@stores/wallet/actions/actionCreators'; import { useDispatch } from 'react-redux'; import { BtcOrdinal, NftsListData } from '@secretkeylabs/xverse-core/types'; diff --git a/src/app/screens/ordinalDetail/index.tsx b/src/app/screens/ordinalDetail/index.tsx index 1db908279..5cdafcc61 100644 --- a/src/app/screens/ordinalDetail/index.tsx +++ b/src/app/screens/ordinalDetail/index.tsx @@ -213,7 +213,6 @@ function OrdinalDetailScreen() { const { storeOrdinalsMetaData } = useOrdinalDataReducer(); const { id } = useParams(); const [ordinalData, setOrdinalData] = useState(); - const [showSendOridnalsAlert, setshowSendOridnalsAlert] = useState(false); const [notSupportedOrdinal, setNotSupportedOrdinal] = useState(false); const isGalleryOpen: boolean = document.documentElement.clientWidth > 360; const { @@ -250,18 +249,18 @@ function OrdinalDetailScreen() { navigate('/nft-dashboard'); }; - const onCloseAlert = () => { - setshowSendOridnalsAlert(false); - }; - const openInGalleryView = async () => { await chrome.tabs.create({ url: chrome.runtime.getURL(`options.html#/nft-dashboard/ordinal-detail/${id}`), }); }; - const showAlert = () => { - setshowSendOridnalsAlert(true); + const handleSendOrdinal = () => { + navigate('send-ordinal', { + state: { + ordinal: ordinalData, + }, + }); }; const ownedByView = ( @@ -294,11 +293,9 @@ function OrdinalDetailScreen() { - {notSupportedOrdinal && ( - - )} + {notSupportedOrdinal && } - + ); @@ -317,10 +314,12 @@ function OrdinalDetailScreen() { - {ordinalData?.inscriptionNumber ?? t('INSCRIPTION')} + + {ordinalData?.inscriptionNumber ?? t('INSCRIPTION')} + - + @@ -330,36 +329,38 @@ function OrdinalDetailScreen() { {t('DESCRIPTION')} - {notSupportedOrdinal && ( - - )} + {notSupportedOrdinal && } {ordinalData?.metadata['content length'] && ( - + )} {ordinalData?.metadata['content type'] && ( - + )} {ordinalData?.metadata['output value'] && ( - + + )} + {ordinalData?.metadata.timestamp && ( + )} - {ordinalData?.metadata.timestamp && } {ordinalData?.metadata['genesis height'] && ( - + + )} + {ordinalData?.metadata.location && ( + )} - {ordinalData?.metadata.location && } @@ -373,13 +374,6 @@ function OrdinalDetailScreen() { )} - {showSendOridnalsAlert && ( - - )} {isGalleryOpen ? galleryView : extensionView} {!isGalleryOpen && ( diff --git a/src/app/screens/sendOrdinal/index.tsx b/src/app/screens/sendOrdinal/index.tsx new file mode 100644 index 000000000..d7832ad55 --- /dev/null +++ b/src/app/screens/sendOrdinal/index.tsx @@ -0,0 +1,262 @@ +import styled from 'styled-components'; +import { useTranslation } from 'react-i18next'; +import { useEffect, useState } from 'react'; +import { useMutation, useQuery } from '@tanstack/react-query'; +import { useLocation, useNavigate, useParams } from 'react-router-dom'; +import { + BtcOrdinal, ErrorCodes, OrdinalInfo, ResponseError, +} from '@secretkeylabs/xverse-core/types'; +import { validateBtcAddress } from '@secretkeylabs/xverse-core/wallet'; +import { getOrdinalsByAddress } from '@secretkeylabs/xverse-core/api'; +import { + SignedBtcTx, + signOrdinalSendTransaction, + getBtcFeesForOrdinalSend, +} from '@secretkeylabs/xverse-core/transactions/btc'; +import useNftDataSelector from '@hooks/useNftDataSelector'; +import useWalletSelector from '@hooks/useWalletSelector'; +import SendForm from '@components/sendForm'; +import TopRow from '@components/topRow'; +import BottomBar from '@components/tabBar'; +import AccountHeaderComponent from '@components/accountHeader'; +import OrdinalImage from '@screens/ordinals/ordinalImage'; +import ArrowLeft from '@assets/img/dashboard/arrow_left.svg'; +import { getBtcFiatEquivalent } from '@secretkeylabs/xverse-core'; + +const ScrollContainer = styled.div` + display: flex; + flex: 1; + flex-direction: column; + overflow-y: auto; + &::-webkit-scrollbar { + display: none; + } + width: 360px; + margin: auto; +`; + +const Container = styled.div({ + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + flex: 1, +}); + +const NFtContainer = styled.div((props) => ({ + maxHeight: 148, + width: 148, + display: 'flex', + aspectRatio: 1, + justifyContent: 'center', + alignItems: 'center', + borderRadius: 8, + marginTop: props.theme.spacing(16), + marginBottom: props.theme.spacing(12), +})); + +const OrdinalInscriptionNumber = styled.h1((props) => ({ + ...props.theme.headline_s, + color: props.theme.colors.white['0'], + textAlign: 'center', +})); + +const BottomBarContainer = styled.div({ + marginTop: 'auto', +}); + +const ButtonContainer = styled.div((props) => ({ + display: 'flex', + flexDirection: 'row', + marginLeft: '15%', + marginTop: props.theme.spacing(40), +})); + +const Button = styled.button((props) => ({ + display: 'flex', + flexDirection: 'row', + justifyContent: 'flex-end', + alignItems: 'center', + borderRadius: props.theme.radius(1), + backgroundColor: 'transparent', + opacity: 0.8, + marginTop: props.theme.spacing(5), +})); + +const ButtonText = styled.div((props) => ({ + ...props.theme.body_xs, + fontWeight: 400, + fontSize: 14, + color: props.theme.colors.white['0'], + textAlign: 'center', +})); + +const ButtonImage = styled.img((props) => ({ + marginRight: props.theme.spacing(3), + alignSelf: 'center', + transform: 'all', +})); + +function SendOrdinal() { + const { t } = useTranslation('translation', { keyPrefix: 'SEND' }); + const navigate = useNavigate(); + const { id } = useParams(); + const location = useLocation(); + const { + network, ordinalsAddress, btcAddress, selectedAccount, seedPhrase, btcFiatRate, + } = useWalletSelector(); + const { ordinalsData } = useNftDataSelector(); + const [ordinal, setOrdinal] = useState(undefined); + const [error, setError] = useState(''); + const [recipientAddress, setRecipientAddress] = useState(''); + + let address: string | undefined; + + if (location.state) { + address = location.state.recipientAddress; + } + + const ordinalIdDetails = id!.split('::'); + + const isGalleryOpen: boolean = document.documentElement.clientWidth > 360; + + useEffect(() => { + const data = ordinalsData.find( + (inscription) => inscription?.metadata?.id === ordinalIdDetails[0], + ); + if (data) { + setOrdinal(data); + } + }, []); + + function fetchOrdinals(): Promise { + return getOrdinalsByAddress(ordinalsAddress); + } + + const { data: ordinals } = useQuery({ + queryKey: [`ordinals-${ordinalsAddress}`], + queryFn: fetchOrdinals, + }); + + const { + isLoading, + data, + error: txError, + mutate, + } = useMutation(async (recepient) => { + const ordinalUtx = ordinals?.find((inscription) => inscription.id === ordinalIdDetails[0])?.utxo; + if (ordinalUtx) { + const txFees = await getBtcFeesForOrdinalSend( + recepient, + ordinalUtx, + btcAddress, + network.type, + ); + const signedTx = await signOrdinalSendTransaction( + recepient, + ordinalUtx, + btcAddress, + Number(selectedAccount?.id), + seedPhrase, + network.type, + txFees, + ); + return signedTx; + } + }); + + useEffect(() => { + if (txError) { + if (Number(txError) === ErrorCodes.InSufficientBalance) { + setError(t('ERRORS.INSUFFICIENT_BALANCE')); + } else if (Number(txError) === ErrorCodes.InSufficientBalanceWithTxFee) { + setError(t('ERRORS.INSUFFICIENT_BALANCE_FEES')); + } else setError(txError.toString()); + } + }, [txError]); + + useEffect(() => { + if (data) { + navigate(`/confirm-ordinal-tx/${id}`, { + state: { + signedTxHex: data.signedTx, + recipientAddress, + fee: data.fee, + fiatFee: getBtcFiatEquivalent(data.fee, btcFiatRate), + total: data.total, + fiatTotal: getBtcFiatEquivalent(data.total, btcFiatRate), + }, + }); + } + }, [data]); + + const handleBackButtonClick = () => { + navigate(-1); + }; + + function validateFields(associatedAddress: string): boolean { + if (!associatedAddress) { + setError(t('ERRORS.ADDRESS_REQUIRED')); + return false; + } + + if (!validateBtcAddress({ btcAddress: associatedAddress, network: network.type })) { + setError(t('ERRORS.ADDRESS_INVALID')); + return false; + } + + if (associatedAddress === ordinalsAddress) { + setError(t('ERRORS.SEND_TO_SELF')); + return false; + } + + return true; + } + + const onPressNext = async (associatedAddress: string) => { + setRecipientAddress(associatedAddress); + if (validateFields(associatedAddress)) { + mutate(associatedAddress); + } + }; + return ( + <> + {isGalleryOpen && ( + <> + + + + + + )} + + {!isGalleryOpen && ( + + )} + + + + + + {ordinal?.inscriptionNumber} + + + {!isGalleryOpen && } + + + ); +} + +export default SendOrdinal; diff --git a/src/app/utils/constants.ts b/src/app/utils/constants.ts index adab908b6..a89da8e51 100644 --- a/src/app/utils/constants.ts +++ b/src/app/utils/constants.ts @@ -18,7 +18,7 @@ export const MOON_PAY_API_KEY = 'pk_live_8YeOjOzFqHUG1qi2G6NPA4N1tZAWFihK'; export const BINANCE_URL = 'https://www.binancecnt.com/en/pre-connect'; export const BINANCE_MERCHANT_CODE = 'secret_key_labs'; -export type CurrencyTypes = 'STX' | 'BTC' | 'FT' | 'NFT'; +export type CurrencyTypes = 'STX' | 'BTC' | 'FT' | 'NFT' | 'Ordinal'; export enum LoaderSize { SMALLEST, SMALL, diff --git a/src/assets/img/Warning.svg b/src/assets/img/Warning.svg new file mode 100644 index 000000000..0b6f24502 --- /dev/null +++ b/src/assets/img/Warning.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/locales/en.json b/src/locales/en.json index b58d526c5..cca33581c 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -72,7 +72,9 @@ "NFT_SEND_DETAIL": "This Nft is already sent and is in pending state" }, "SEND_NFT": "Send NFT", - "ASSOCIATED_BNS_DOMAIN": "Associated BNS Name" + "ASSOCIATED_BNS_DOMAIN": "Associated BNS Name", + "SEND_ORDINAL_TITLE": "Send Ordinal", + "SEND_ORDINAL_WALLET_WARNING": "You are about to transfer an Ordinal. Make sure the recipient wallet supports ordinals" }, "CONFIRM_TRANSACTION": { "SEND": "Send", From b7fb14ec2a7409ad558cfe5edf7beaceeb5630bd Mon Sep 17 00:00:00 2001 From: Imamah-Zafar <88320460+Imamah-Zafar@users.noreply.github.com> Date: Fri, 24 Feb 2023 12:50:25 +0500 Subject: [PATCH 04/16] remove amount section from confirmation screen --- .../confirmBtcTransactionComponent/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/screens/confrimBtcTransaction/confirmBtcTransactionComponent/index.tsx b/src/app/screens/confrimBtcTransaction/confirmBtcTransactionComponent/index.tsx index 1254ae99f..ad3851d7b 100644 --- a/src/app/screens/confrimBtcTransaction/confirmBtcTransactionComponent/index.tsx +++ b/src/app/screens/confrimBtcTransaction/confirmBtcTransactionComponent/index.tsx @@ -170,7 +170,7 @@ function ConfirmBtcTransactionComponent({ <> - + {amount && } {children}