From 68b3bc221a19d4624718c4baa9b933171f356c8c Mon Sep 17 00:00:00 2001 From: Tong Li Date: Sun, 8 Dec 2024 17:16:07 +1100 Subject: [PATCH 1/4] connect button refinement --- public/lock.svg | 3 + src/app/assets/Keplr.png | Bin 0 -> 2981 bytes src/app/assets/OKX.png | Bin 0 -> 1241 bytes src/app/assets/bitcoin.png | Bin 0 -> 1647 bytes src/app/components/Connect/ConnectSmall.tsx | 141 ++++++--------- src/app/components/Connect/ConnectedSmall.tsx | 166 ++++++++++-------- src/app/components/Connect/Menu.tsx | 81 +++++++++ src/app/components/Header/Header.tsx | 17 -- src/app/components/Toggle/Toggle.tsx | 19 ++ 9 files changed, 247 insertions(+), 180 deletions(-) create mode 100644 public/lock.svg create mode 100644 src/app/assets/Keplr.png create mode 100644 src/app/assets/OKX.png create mode 100644 src/app/assets/bitcoin.png create mode 100644 src/app/components/Connect/Menu.tsx create mode 100644 src/app/components/Toggle/Toggle.tsx diff --git a/public/lock.svg b/public/lock.svg new file mode 100644 index 00000000..637369de --- /dev/null +++ b/public/lock.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/app/assets/Keplr.png b/src/app/assets/Keplr.png new file mode 100644 index 0000000000000000000000000000000000000000..2fde14ec1d5d61ad55110b1a174313db5f0bb924 GIT binary patch literal 2981 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 Dt)@iu literal 0 HcmV?d00001 diff --git a/src/app/assets/bitcoin.png b/src/app/assets/bitcoin.png new file mode 100644 index 0000000000000000000000000000000000000000..fb5b243ad7c00948241af14d0a975fab3c3ae966 GIT binary patch literal 1647 zcmV-#29WuQP)ZCaeJl0j|*oJ5XJ1ZP37{eOG0X`}ZEHxWS&V&AL6)UVS)e+&3!BVoN z`VfqldMYxXi%3vZXXb#h4Kf`WMDEU~fyeaLWll4mT3bCt+h5?BGr(-ai0~r7=YlMJ z4CQ)S>nU4$Ufcrfh+wWvCp>E&5*GXa8{(fopf#Tb&zS5lUpv=rGuKb}Mjb@wEy#jm ze|RUit)*9EWg9`#S?0)vh5rf3phc&!X(@_ zpUc5YT3Z#p^!76QdV0)}_0}$b5B1{b^fel|V|q{$G0KC%w zYKsR6?spD%95Z52Xxig22|=-@o)69p!rcndbcSBkUcxks2@5vBy8ICM*d>q!E!J1{ zCwEn6&5@10uueuy3@VGJ({S(4hkNHFc#p24S-aYY=x8J^-3{iP1sM>*bXS#g9;XDf z0C9qkSr}AS8;<#jdT&F$upjPE7C~J9rO&7w2{Vcz4IyT7F63h`jG$v$aDUC`f(K%Ag z@a!?$a3n52XyieS5;Zh0g}`F)aSsRCslV-mG)SfE1mn_qT;Cx=>l}Fi{VM(VsF(H= z!M!kn5f(i~(T{n8wDKElLmc4Q^T9&e407i`h4;JHU=|i4r|&}}%{UqHH|(xJ zS&u(o-3R_cjov;6mYJ)e-1Bt6Mw#@ik#>Bi%OMMzw-!n>XoE?F&R*#173~f1ep?E) zc4tt%<^DDFVG|(FP&9B=h*}w2L&1!D#L#+te6W`7$$z2n(LNlC(5*50ptxe;jMI5l zJQ>T@GOHBI#HS**h2_55Xm#pn$AMp z{+sr8)zE{MyjQ|(#m!$KPY@^ka;wsLgQhb*nlT?a)exmh_Ck72C$*9WvrsR60q-}3 za>fkxNrjDL{fb&(M=X2odM(tScf)hA0PgoElkV&AyWYA$jlNj!{uTV=yO0F~JD@)e zf;KHtU;A!ZXPz+yEHTA+_Z)ti2;Xb$9L9%GJc^c!BpB`(QeR)u>bYuo_AL!kH!;`= zp{N!5t0DPWNquWqm9v8K&g)YC-6BD2zhX#!?wn1m6O20V*DGniy^aAv!>*)4|NTwi z&}8)`Zsv?hEiv9L5(4Ls(cR~do972kj$#j7YzmAOsHa)fG)P@@cz<{c?%h-2JGs&C zo8lKl{iPc-P{B6zy;KT2B)O`xwo?d{z$935h9UJuXA9y5Nx!Yhg^fXB7V#9}te=TlDL1my?JC{{qt=Ay2(#xf=ig002ovPDHLkV1ja%2#x>% literal 0 HcmV?d00001 diff --git a/src/app/components/Connect/ConnectSmall.tsx b/src/app/components/Connect/ConnectSmall.tsx index 13ec1983..653b1f0d 100644 --- a/src/app/components/Connect/ConnectSmall.tsx +++ b/src/app/components/Connect/ConnectSmall.tsx @@ -1,20 +1,19 @@ +import { Button, Text } from "@babylonlabs-io/bbn-core-ui"; +import Image from "next/image"; import { useRef, useState } from "react"; import { AiOutlineInfoCircle } from "react-icons/ai"; -import { FaBitcoin } from "react-icons/fa"; -import { IoMdClose } from "react-icons/io"; +import { MdKeyboardArrowDown } from "react-icons/md"; import { PiWalletBold } from "react-icons/pi"; import { Tooltip } from "react-tooltip"; import { useOnClickOutside } from "usehooks-ts"; +import keplr from "@/app/assets/Keplr.png"; +import okx from "@/app/assets/OKX.png"; import { useHealthCheck } from "@/app/hooks/useHealthCheck"; import { useAppState } from "@/app/state"; import { getNetworkConfig } from "@/config/network.config"; -import { satoshiToBtc } from "@/utils/btc"; -import { maxDecimals } from "@/utils/maxDecimals"; -import { trim } from "@/utils/trim"; -import { Hash } from "../Hash/Hash"; -import { LoadingSmall } from "../Loading/Loading"; +import { Menu } from "./Menu"; interface ConnectSmallProps { loading?: boolean; @@ -66,91 +65,55 @@ export const ConnectSmall: React.FC = ({ ); }; - return connected ? ( -
- + {!isApiNormal && renderApiNotAvailableTooltip()} +
+ ); + } + + return ( +
+
+ OKX + Keplr +
+
+ Wallet Connected +
+ bc1pnT + | + bbn170
- - {showMenu && ( -
+
+ -
-
- -
-
- -
- -
- )} -
- ) : ( -
- - {!isApiNormal && renderApiNotAvailableTooltip()} + + +
+ setShowMenu(false)} />
); }; diff --git a/src/app/components/Connect/ConnectedSmall.tsx b/src/app/components/Connect/ConnectedSmall.tsx index 0559e3ae..5ac6337d 100644 --- a/src/app/components/Connect/ConnectedSmall.tsx +++ b/src/app/components/Connect/ConnectedSmall.tsx @@ -1,16 +1,14 @@ -import { useRef, useState } from "react"; -import { FaBitcoin } from "react-icons/fa"; -import { IoMdClose } from "react-icons/io"; +import { useWalletConnect } from "@babylonlabs-io/bbn-wallet-connect"; +import Image from "next/image"; +import { useEffect, useRef, useState } from "react"; import { useOnClickOutside } from "usehooks-ts"; +import keplr from "@/app/assets/Keplr.png"; +import okx from "@/app/assets/OKX.png"; +import { useBTCWallet } from "@/app/context/wallet/BTCWalletProvider"; +import { useCosmosWallet } from "@/app/context/wallet/CosmosWalletProvider"; import { useAppState } from "@/app/state"; import { getNetworkConfig } from "@/config/network.config"; -import { satoshiToBtc } from "@/utils/btc"; -import { maxDecimals } from "@/utils/maxDecimals"; -import { trim } from "@/utils/trim"; - -import { Hash } from "../Hash/Hash"; -import { LoadingSmall } from "../Loading/Loading"; interface ConnectedSmallProps { loading?: boolean; @@ -22,87 +20,107 @@ interface ConnectedSmallProps { export const ConnectedSmall: React.FC = ({ loading = false, - connected, address, btcWalletBalanceSat, onDisconnect, }) => { const { ordinalsExcluded, includeOrdinals, excludeOrdinals } = useAppState(); + const { connected } = useWalletConnect(); + const btc = useBTCWallet(); + const bbn = useCosmosWallet(); const [showMenu, setShowMenu] = useState(false); const handleClickOutside = () => { setShowMenu(false); }; + useEffect(() => { + const action = async () => { + console.log({ btc, network: await btc.getNetwork(), bbn }); + }; + action(); + }, [bbn, btc]); + const ref = useRef(null); useOnClickOutside(ref, handleClickOutside); const { coinName } = getNetworkConfig(); + if (!connected) { + return null; + } + return ( - connected && ( -
- - {showMenu && ( -
-
-

Settings

- -
-
- -
-
- -
- -
- )} -
- ) +
+ OKX + Keplr +
); + + // return ( + // connected && ( + //
+ // + // {showMenu && ( + //
+ //
+ //

Settings

+ // + //
+ //
+ // + //
+ //
+ // + //
+ // + //
+ // )} + //
+ // ) + // ); }; diff --git a/src/app/components/Connect/Menu.tsx b/src/app/components/Connect/Menu.tsx new file mode 100644 index 00000000..4c788a98 --- /dev/null +++ b/src/app/components/Connect/Menu.tsx @@ -0,0 +1,81 @@ +import { Text } from "@babylonlabs-io/bbn-core-ui"; +import { useWalletConnect } from "@babylonlabs-io/bbn-wallet-connect"; +import Image from "next/image"; + +import bitcoin from "@/app/assets/bitcoin.png"; +import bbnIcon from "@/app/assets/icon-black.svg"; +import { useBTCWallet } from "@/app/context/wallet/BTCWalletProvider"; +import { useAppState } from "@/app/state"; + +import { Hash } from "../Hash/Hash"; +import { ThemeToggle } from "../ThemeToggle/ThemeToggle"; +import { Toggle } from "../Toggle/Toggle"; + +interface MenuProps { + open: boolean; + onClose: () => void; +} + +export const Menu: React.FC = ({ open, onClose }) => { + const { ordinalsExcluded, includeOrdinals, excludeOrdinals } = useAppState(); + const { disconnect } = useWalletConnect(); + const { address } = useBTCWallet(); + + if (!open) { + return null; + } + + return ( +
+
+ bitcoin +
+ + Bitcoin + + +
+
+
+ + Not using Inscriptions + +
+ +
+
+
+
+ bitcoin +
+ + Babylon Chain + + +
+
+
+
+ +
+
+
+ +
+
+ ); +}; diff --git a/src/app/components/Header/Header.tsx b/src/app/components/Header/Header.tsx index 4d234da3..eca07c91 100644 --- a/src/app/components/Header/Header.tsx +++ b/src/app/components/Header/Header.tsx @@ -1,11 +1,9 @@ import { useWalletConnect } from "@babylonlabs-io/bbn-wallet-connect"; -import { twJoin } from "tailwind-merge"; import { useBTCWallet } from "@/app/context/wallet/BTCWalletProvider"; import { useAppState } from "@/app/state"; import { shouldDisplayTestingMsg } from "@/config"; -import { ConnectedSmall } from "../Connect/ConnectedSmall"; import { ConnectSmall } from "../Connect/ConnectSmall"; import { Logo } from "../Logo/Logo"; import { TestingInfo } from "../TestingInfo/TestingInfo"; @@ -36,21 +34,6 @@ export const Header = () => { btcWalletBalanceSat={totalBalance} onDisconnect={disconnect} /> - {/* */} -
-
-
diff --git a/src/app/components/Toggle/Toggle.tsx b/src/app/components/Toggle/Toggle.tsx new file mode 100644 index 00000000..e9ec7ceb --- /dev/null +++ b/src/app/components/Toggle/Toggle.tsx @@ -0,0 +1,19 @@ +import { twJoin } from "tailwind-merge"; + +interface ToggleProps { + disabled?: boolean; +} + +export const Toggle: React.FC = ({ disabled = false }) => { + return ( + + ); +}; From c3094884f75421f755e1a446b78ed4fbe0c30485 Mon Sep 17 00:00:00 2001 From: jeremy-babylonchain Date: Thu, 19 Dec 2024 15:00:23 +0700 Subject: [PATCH 2/4] address review feedback --- package-lock.json | 762 ++++-------------- {src/app/assets => public}/Keplr.png | Bin {src/app/assets => public}/OKX.png | Bin src/app/components/Connect/ConnectSmall.tsx | 91 ++- src/app/components/Connect/ConnectedSmall.tsx | 126 --- src/app/components/Connect/Menu.tsx | 81 -- 6 files changed, 230 insertions(+), 830 deletions(-) rename {src/app/assets => public}/Keplr.png (100%) rename {src/app/assets => public}/OKX.png (100%) delete mode 100644 src/app/components/Connect/ConnectedSmall.tsx delete mode 100644 src/app/components/Connect/Menu.tsx diff --git a/package-lock.json b/package-lock.json index 67cc839d..9a0aac95 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2235,16 +2235,6 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@emnapi/runtime": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", - "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", @@ -2525,28 +2515,6 @@ "@img/sharp-libvips-darwin-arm64": "1.0.4" } }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", - "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.0.4" - } - }, "node_modules/@img/sharp-libvips-darwin-arm64": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", @@ -2563,307 +2531,6 @@ "url": "https://opencollective.com/libvips" } }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", - "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", - "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", - "cpu": [ - "arm" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", - "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", - "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", - "cpu": [ - "s390x" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", - "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", - "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", - "cpu": [ - "arm64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", - "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", - "cpu": [ - "x64" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", - "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", - "cpu": [ - "arm" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.0.5" - } - }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", - "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.0.4" - } - }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", - "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", - "cpu": [ - "s390x" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.0.4" - } - }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", - "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.0.4" - } - }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", - "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" - } - }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", - "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.0.4" - } - }, - "node_modules/@img/sharp-wasm32": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", - "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", - "cpu": [ - "wasm32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", - "optional": true, - "dependencies": { - "@emnapi/runtime": "^1.2.0" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", - "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", - "cpu": [ - "ia32" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", - "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -4287,186 +3954,58 @@ }, "node_modules/@next/eslint-plugin-next": { "version": "14.1.3", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.3.tgz", - "integrity": "sha512-VCnZI2cy77Yaj3L7Uhs3+44ikMM1VD/fBMwvTBb3hIaTIuqa+DmG4dhUDq+MASu3yx97KhgsVJbsas0XuiKyww==", - "dev": true, - "license": "MIT", - "dependencies": { - "glob": "10.3.10" - } - }, - "node_modules/@next/eslint-plugin-next/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@next/eslint-plugin-next/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "14.2.15", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.15.tgz", - "integrity": "sha512-Rvh7KU9hOUBnZ9TJ28n2Oa7dD9cvDBKua9IKx7cfQQ0GoYUwg9ig31O2oMwH3wm+pE3IkAQ67ZobPfEgurPZIA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "14.2.15", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.15.tgz", - "integrity": "sha512-5TGyjFcf8ampZP3e+FyCax5zFVHi+Oe7sZyaKOngsqyaNEpOgkKB3sqmymkZfowy3ufGA/tUgDPPxpQx931lHg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.2.15", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.15.tgz", - "integrity": "sha512-3Bwv4oc08ONiQ3FiOLKT72Q+ndEMyLNsc/D3qnLMbtUYTQAmkx9E/JRu0DBpHxNddBmNT5hxz1mYBphJ3mfrrw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.2.15", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.15.tgz", - "integrity": "sha512-k5xf/tg1FBv/M4CMd8S+JL3uV9BnnRmoe7F+GWC3DxkTCD9aewFRH1s5rJ1zkzDa+Do4zyN8qD0N8c84Hu96FQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.2.15", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.15.tgz", - "integrity": "sha512-kE6q38hbrRbKEkkVn62reLXhThLRh6/TvgSP56GkFNhU22TbIrQDEMrO7j0IcQHcew2wfykq8lZyHFabz0oBrA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "14.2.15", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.15.tgz", - "integrity": "sha512-PZ5YE9ouy/IdO7QVJeIcyLn/Rc4ml9M2G4y3kCM9MNf1YKvFY4heg3pVa/jQbMro+tP6yc4G2o9LjAz1zxD7tQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.2.15", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.15.tgz", - "integrity": "sha512-2raR16703kBvYEQD9HNLyb0/394yfqzmIeyp2nDzcPV4yPjqNUG3ohX6jX00WryXz6s1FXpVhsCo3i+g4RUX+g==", - "cpu": [ - "arm64" - ], + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.3.tgz", + "integrity": "sha512-VCnZI2cy77Yaj3L7Uhs3+44ikMM1VD/fBMwvTBb3hIaTIuqa+DmG4dhUDq+MASu3yx97KhgsVJbsas0XuiKyww==", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "glob": "10.3.10" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, "engines": { - "node": ">= 10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.2.15", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.15.tgz", - "integrity": "sha512-fyTE8cklgkyR1p03kJa5zXEaZ9El+kDNM5A+66+8evQS5e/6v0Gk28LqA0Jet8gKSOyP+OTm/tJHzMlGdQerdQ==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "node_modules/@next/eslint-plugin-next/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", "engines": { - "node": ">= 10" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/@next/swc-win32-x64-msvc": { + "node_modules/@next/swc-darwin-arm64": { "version": "14.2.15", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.15.tgz", - "integrity": "sha512-SzqGbsLsP9OwKNUG9nekShTwhj6JSB9ZLMWQ8g1gG6hdE5gQLncbnbymrwy2yVmH9nikSLYRYxYMFu78Ggp7/g==", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.15.tgz", + "integrity": "sha512-Rvh7KU9hOUBnZ9TJ28n2Oa7dD9cvDBKua9IKx7cfQQ0GoYUwg9ig31O2oMwH3wm+pE3IkAQ67ZobPfEgurPZIA==", "cpu": [ - "x64" + "arm64" ], "license": "MIT", "optional": true, "os": [ - "win32" + "darwin" ], "engines": { "node": ">= 10" @@ -5606,108 +5145,6 @@ "node": ">=10" } }, - "node_modules/@sentry/cli-linux-arm": { - "version": "2.39.1", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-2.39.1.tgz", - "integrity": "sha512-DkENbxyRxUrfLnJLXTA4s5UL/GoctU5Cm4ER1eB7XN7p9WsamFJd/yf2KpltkjEyiTuplv0yAbdjl1KX3vKmEQ==", - "cpu": [ - "arm" - ], - "license": "BSD-3-Clause", - "optional": true, - "os": [ - "linux", - "freebsd" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@sentry/cli-linux-arm64": { - "version": "2.39.1", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.39.1.tgz", - "integrity": "sha512-5VbVJDatolDrWOgaffsEM7znjs0cR8bHt9Bq0mStM3tBolgAeSDHE89NgHggfZR+DJ2VWOy4vgCwkObrUD6NQw==", - "cpu": [ - "arm64" - ], - "license": "BSD-3-Clause", - "optional": true, - "os": [ - "linux", - "freebsd" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@sentry/cli-linux-i686": { - "version": "2.39.1", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-2.39.1.tgz", - "integrity": "sha512-pXWVoKXCRrY7N8vc9H7mETiV9ZCz+zSnX65JQCzZxgYrayQPJTc+NPRnZTdYdk5RlAupXaFicBI2GwOCRqVRkg==", - "cpu": [ - "x86", - "ia32" - ], - "license": "BSD-3-Clause", - "optional": true, - "os": [ - "linux", - "freebsd" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@sentry/cli-linux-x64": { - "version": "2.39.1", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-2.39.1.tgz", - "integrity": "sha512-IwayNZy+it7FWG4M9LayyUmG1a/8kT9+/IEm67sT5+7dkMIMcpmHDqL8rWcPojOXuTKaOBBjkVdNMBTXy0mXlA==", - "cpu": [ - "x64" - ], - "license": "BSD-3-Clause", - "optional": true, - "os": [ - "linux", - "freebsd" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@sentry/cli-win32-i686": { - "version": "2.39.1", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-2.39.1.tgz", - "integrity": "sha512-NglnNoqHSmE+Dz/wHeIVRnV2bLMx7tIn3IQ8vXGO5HWA2f8zYJGktbkLq1Lg23PaQmeZLPGlja3gBQfZYSG10Q==", - "cpu": [ - "x86", - "ia32" - ], - "license": "BSD-3-Clause", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@sentry/cli-win32-x64": { - "version": "2.39.1", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-2.39.1.tgz", - "integrity": "sha512-xv0R2CMf/X1Fte3cMWie1NXuHmUyQPDBfCyIt6k6RPFPxAYUgcqgMPznYwVMwWEA1W43PaOkSn3d8ZylsDaETw==", - "cpu": [ - "x64" - ], - "license": "BSD-3-Clause", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, "node_modules/@sentry/core": { "version": "8.46.0", "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.46.0.tgz", @@ -14756,7 +14193,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -18467,6 +17903,126 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "14.2.15", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.15.tgz", + "integrity": "sha512-5TGyjFcf8ampZP3e+FyCax5zFVHi+Oe7sZyaKOngsqyaNEpOgkKB3sqmymkZfowy3ufGA/tUgDPPxpQx931lHg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "14.2.15", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.15.tgz", + "integrity": "sha512-3Bwv4oc08ONiQ3FiOLKT72Q+ndEMyLNsc/D3qnLMbtUYTQAmkx9E/JRu0DBpHxNddBmNT5hxz1mYBphJ3mfrrw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "14.2.15", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.15.tgz", + "integrity": "sha512-k5xf/tg1FBv/M4CMd8S+JL3uV9BnnRmoe7F+GWC3DxkTCD9aewFRH1s5rJ1zkzDa+Do4zyN8qD0N8c84Hu96FQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "14.2.15", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.15.tgz", + "integrity": "sha512-kE6q38hbrRbKEkkVn62reLXhThLRh6/TvgSP56GkFNhU22TbIrQDEMrO7j0IcQHcew2wfykq8lZyHFabz0oBrA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "14.2.15", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.15.tgz", + "integrity": "sha512-PZ5YE9ouy/IdO7QVJeIcyLn/Rc4ml9M2G4y3kCM9MNf1YKvFY4heg3pVa/jQbMro+tP6yc4G2o9LjAz1zxD7tQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "14.2.15", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.15.tgz", + "integrity": "sha512-2raR16703kBvYEQD9HNLyb0/394yfqzmIeyp2nDzcPV4yPjqNUG3ohX6jX00WryXz6s1FXpVhsCo3i+g4RUX+g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "14.2.15", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.15.tgz", + "integrity": "sha512-fyTE8cklgkyR1p03kJa5zXEaZ9El+kDNM5A+66+8evQS5e/6v0Gk28LqA0Jet8gKSOyP+OTm/tJHzMlGdQerdQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "14.2.15", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.15.tgz", + "integrity": "sha512-SzqGbsLsP9OwKNUG9nekShTwhj6JSB9ZLMWQ8g1gG6hdE5gQLncbnbymrwy2yVmH9nikSLYRYxYMFu78Ggp7/g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } } } } diff --git a/src/app/assets/Keplr.png b/public/Keplr.png similarity index 100% rename from src/app/assets/Keplr.png rename to public/Keplr.png diff --git a/src/app/assets/OKX.png b/public/OKX.png similarity index 100% rename from src/app/assets/OKX.png rename to public/OKX.png diff --git a/src/app/components/Connect/ConnectSmall.tsx b/src/app/components/Connect/ConnectSmall.tsx index 653b1f0d..db510891 100644 --- a/src/app/components/Connect/ConnectSmall.tsx +++ b/src/app/components/Connect/ConnectSmall.tsx @@ -1,19 +1,26 @@ -import { Button, Text } from "@babylonlabs-io/bbn-core-ui"; +import { + Avatar, + AvatarGroup, + Button, + Popover, + Text, +} from "@babylonlabs-io/bbn-core-ui"; +import { useWalletConnect } from "@babylonlabs-io/bbn-wallet-connect"; import Image from "next/image"; import { useRef, useState } from "react"; import { AiOutlineInfoCircle } from "react-icons/ai"; import { MdKeyboardArrowDown } from "react-icons/md"; import { PiWalletBold } from "react-icons/pi"; import { Tooltip } from "react-tooltip"; -import { useOnClickOutside } from "usehooks-ts"; +import { useResizeObserver } from "usehooks-ts"; -import keplr from "@/app/assets/Keplr.png"; -import okx from "@/app/assets/OKX.png"; +import bitcoin from "@/app/assets/bitcoin.png"; +import bbnIcon from "@/app/assets/icon-black.svg"; import { useHealthCheck } from "@/app/hooks/useHealthCheck"; import { useAppState } from "@/app/state"; -import { getNetworkConfig } from "@/config/network.config"; -import { Menu } from "./Menu"; +import { Hash } from "../Hash/Hash"; +import { Toggle } from "../Toggle/Toggle"; interface ConnectSmallProps { loading?: boolean; @@ -32,17 +39,19 @@ export const ConnectSmall: React.FC = ({ btcWalletBalanceSat, onDisconnect, }) => { + const anchorEl = useRef(null); + const { width = 0 } = useResizeObserver({ + ref: anchorEl, + box: "border-box", + }); const { ordinalsExcluded, includeOrdinals, excludeOrdinals } = useAppState(); + const { disconnect } = useWalletConnect(); const [showMenu, setShowMenu] = useState(false); const handleClickOutside = () => { setShowMenu(false); }; - const ref = useRef(null); - useOnClickOutside(ref, handleClickOutside); - - const { coinName } = getNetworkConfig(); const { isApiNormal, isGeoBlocked, apiMessage } = useHealthCheck(); // Renders the Tooltip describing the reason @@ -86,16 +95,12 @@ export const ConnectSmall: React.FC = ({ } return ( -
+
- OKX - Keplr + + + +
Wallet Connected @@ -113,7 +118,53 @@ export const ConnectSmall: React.FC = ({
- setShowMenu(false)} /> + +
+ bitcoin +
+ + Bitcoin + + +
+
+
+ + Not using Inscriptions + +
+ +
+
+
+
+ bitcoin +
+ + Babylon Chain + + +
+
+
+
+ +
+
); }; diff --git a/src/app/components/Connect/ConnectedSmall.tsx b/src/app/components/Connect/ConnectedSmall.tsx deleted file mode 100644 index 5ac6337d..00000000 --- a/src/app/components/Connect/ConnectedSmall.tsx +++ /dev/null @@ -1,126 +0,0 @@ -import { useWalletConnect } from "@babylonlabs-io/bbn-wallet-connect"; -import Image from "next/image"; -import { useEffect, useRef, useState } from "react"; -import { useOnClickOutside } from "usehooks-ts"; - -import keplr from "@/app/assets/Keplr.png"; -import okx from "@/app/assets/OKX.png"; -import { useBTCWallet } from "@/app/context/wallet/BTCWalletProvider"; -import { useCosmosWallet } from "@/app/context/wallet/CosmosWalletProvider"; -import { useAppState } from "@/app/state"; -import { getNetworkConfig } from "@/config/network.config"; - -interface ConnectedSmallProps { - loading?: boolean; - connected: boolean; - address: string; - onDisconnect: () => void; - btcWalletBalanceSat?: number; -} - -export const ConnectedSmall: React.FC = ({ - loading = false, - address, - btcWalletBalanceSat, - onDisconnect, -}) => { - const { ordinalsExcluded, includeOrdinals, excludeOrdinals } = useAppState(); - const { connected } = useWalletConnect(); - const btc = useBTCWallet(); - const bbn = useCosmosWallet(); - - const [showMenu, setShowMenu] = useState(false); - const handleClickOutside = () => { - setShowMenu(false); - }; - - useEffect(() => { - const action = async () => { - console.log({ btc, network: await btc.getNetwork(), bbn }); - }; - action(); - }, [bbn, btc]); - - const ref = useRef(null); - useOnClickOutside(ref, handleClickOutside); - - const { coinName } = getNetworkConfig(); - - if (!connected) { - return null; - } - - return ( -
- OKX - Keplr -
- ); - - // return ( - // connected && ( - //
- // - // {showMenu && ( - //
- //
- //

Settings

- // - //
- //
- // - //
- //
- // - //
- // - //
- // )} - //
- // ) - // ); -}; diff --git a/src/app/components/Connect/Menu.tsx b/src/app/components/Connect/Menu.tsx deleted file mode 100644 index 4c788a98..00000000 --- a/src/app/components/Connect/Menu.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import { Text } from "@babylonlabs-io/bbn-core-ui"; -import { useWalletConnect } from "@babylonlabs-io/bbn-wallet-connect"; -import Image from "next/image"; - -import bitcoin from "@/app/assets/bitcoin.png"; -import bbnIcon from "@/app/assets/icon-black.svg"; -import { useBTCWallet } from "@/app/context/wallet/BTCWalletProvider"; -import { useAppState } from "@/app/state"; - -import { Hash } from "../Hash/Hash"; -import { ThemeToggle } from "../ThemeToggle/ThemeToggle"; -import { Toggle } from "../Toggle/Toggle"; - -interface MenuProps { - open: boolean; - onClose: () => void; -} - -export const Menu: React.FC = ({ open, onClose }) => { - const { ordinalsExcluded, includeOrdinals, excludeOrdinals } = useAppState(); - const { disconnect } = useWalletConnect(); - const { address } = useBTCWallet(); - - if (!open) { - return null; - } - - return ( -
-
- bitcoin -
- - Bitcoin - - -
-
-
- - Not using Inscriptions - -
- -
-
-
-
- bitcoin -
- - Babylon Chain - - -
-
-
-
- -
-
-
- -
-
- ); -}; From 4e3c432db27be5c2b4b3a7a689e695cea62ef724 Mon Sep 17 00:00:00 2001 From: jeremy-babylonchain Date: Thu, 19 Dec 2024 23:12:51 +0700 Subject: [PATCH 3/4] update wallet connect component and hook up states --- src/app/assets/bitcoin.png | Bin 1647 -> 39289 bytes src/app/assets/cancel-circle.svg | 3 + src/app/components/Connect/ConnectSmall.tsx | 170 -------------- src/app/components/Hash/Hash.tsx | 12 +- src/app/components/Header/Header.tsx | 17 +- .../Modals/WalletDisconnectModal.tsx | 58 +++++ src/app/components/Toggle/Toggle.tsx | 32 ++- src/app/components/Wallet/Connect.tsx | 219 ++++++++++++++++++ 8 files changed, 320 insertions(+), 191 deletions(-) create mode 100644 src/app/assets/cancel-circle.svg delete mode 100644 src/app/components/Connect/ConnectSmall.tsx create mode 100644 src/app/components/Modals/WalletDisconnectModal.tsx create mode 100644 src/app/components/Wallet/Connect.tsx diff --git a/src/app/assets/bitcoin.png b/src/app/assets/bitcoin.png index fb5b243ad7c00948241af14d0a975fab3c3ae966..865ffda19211619abee80463ae7c187e2c0d3b17 100644 GIT binary patch literal 39289 zcmX_ncRbba`~NwIV;n>rD>D+3SymZGl$|{@L-vSla_pH%wm8V%dvj8u?6S8A*(H0N z->uL4`}?DZ$D_yV-1q&u?&oz~&+B2nYm1rl=sN34y@Sm;Z)>W+7gm@RVG}s z7}BGOvVs~A^o+Bu+vi!PQd*?aRclAyrux7(iw*MAr}^Yo1^*_-v-H3uUk-}EH$uTo zqa7Lv1IBAsi$F4_V*Xt%l#2KRY35Uqh(ig`!^a(<}AuBv) zfsnmyfhU+ZL$&om*;8-h)jT>}=8OoFgS0fzFevSAx3n2vd&KQ5nA25tDk|a0Adylt zq{t{T3}q{Ooh}Cx2B9N0LqBnKH)l40Y&~-$(#V4Tp?~Xl#n}HD-HEmEe$Dj5K7OI& zYzUl7y$QmA{Ypk32n(cCr}8AVuGva|Akd1bOht(V7xrTW9CQ+BxyT8lRq>9Dh@aUa z?j#nbDt!sqV`JGbb$+sD#+(raL+%Db7*H&?*_1J8CfNGRwbTQdbUMw6N0?XW!ZN5Z zEN&6P=F#^h#R|c78?qaJoJ@JFj=%F0?Kwf0^y`Z`k_Zh>0l6)t{2rwTTbXOsR&Xq^ zosglodr$P}mYLjDa@7~qX#pM0Fh{fxZQLPpH}*;^1AW|?Tvv|zY^~UR@E(p(5%j1D zbU+On4j*xpwJ6G)j8Dt=(8VgC7>EmbAt8*9L%-|Do59fyaz($wdhW`Y8@8HnuZ}8) z)@Y((qm*WN`n=u)%Fu9p&G9RY#V;H^Z6;LTPEp4(9Z{9b9+{+eoe>*Y-oxZa+I-Jh z?BQ`8ur~GO@Ly4cBHr?02`XRQiN&Dp;Uiu)Ol?%tzj6+smeTM|0yB&~)w8Eg)B
  • BWZhv(=%ze_i`X`C0ej=GrhbzRv5Mte2vM?-jgD4i$rycB(x2__A?DX zH6j2X-xM2Hgcj6!(B)ROxB7A=>xVuuJctuZAmC*`5GBbM*Ul%%ci*7qS zm<1umYqrhcXTmLEO?SNN9as1LEaNpSk+>3C+V?t_+pGoqEi$q_`}P%z1=iBDUJ30~ z7DS^W3ThX|wIyyNBz{dKzeoJb6;X~JBQ8{+Gf5?MnMnqkOw0xUWmC*lWGh5~J|0&n z^~oyh)wH^Y)K5ks5d4T;{0E_&$8LhoNJOI=nhbL~7D5kK$NGgD-i*c@{Tk+c7cB>& z*RM8(*fHuT2V&0K60X4O4!}0GgGuptw=0*!t}{H^3uR|rU)GV{v4gId{X%l- zVEy!d+r#z;9ptvRy&t>E6hXZt;art3!B(xZTxRj;P;Dnj8b&&QL}Kg8U4*Q z7(HBth65M#YcjmiT41dKZ=*p8m`&$R43z?OZ`A%*yZfo^;$2iKx!Vi!8~D-r=sU0# zJa%%})K=BW80|w$Mru-xIyM0206A~SFYSQ_CZ3+S^tDLs~fBK)3UbdcL& z<+GFwl=Va9PMsPuFNTto2F>r278 zhCdbNC1?X`?PP9GAv|R-j$% z%HQQiCbD(gbE5*?iE4R5?U#JE zA7yg(_2Uuyg*zOril_478#fB-i%$cyQCwvock~*jRo+Yu(%@dm z0GGO2DxN?FTVc2_G!>?SH6t7bF8v;UQgmks*EbyJtLP-nNSMi0GrYCLM1)u7idI{Zl)F61 z2n*DK#^p+q8Who}iZT!Uwma_C(6jG)LTlTQ*X_r(YkY|tP9y#}CnZLr4?2j6x&1Ff zG6;3nHCWBV5tba1Dcryz8R5CEi|4rmWVTHzaG*R_ys7{a0Iz(4xvnn(=UR9e_!>F# z^Y_U?xSUzLZ3u{+mwsE46#OLx_G^RCk)Z!57ZwY}`o3*|gU8LG!enV@ccu7_tHYzs z)}@dO9Y+3*g(keeHtY%ZW5Z&U6BiypG%ChEv;wmu{Pa-J*Y-*s0%KyQTI=dqGH^w+ zl?dpd%&f@WB*XYN6!In1EcibgcEISNX4;7bKKmuBUBr31%lw`i~Mt;A*ePjxN39v3OUapM6dcu?Njx1D0jd)(w2rXx$XTjrJ zG|&7j(+C|cu#H!-nad!YfTXjJ@MBXas|q`?UXz2~hfhGJiWqh$?4IV_eD^u;tVwi1 z6n4q2lxPG3Xu{s?*Ruq>OKps6}C0tn7e|-ARXeNz~1b&MeWc4D}ZuZ%` zURrt7PGOxF|9dO&BFlGB12LktkE`5hx(+&kJK-v-9I1%#A?M!!`7Zn%aN)8 zZ$iWD5nL#zSlh|0uZ_nmzXi|KF_r+m90||S+(X{A(V7hpMh1|VG!7M5OyqYZzGi9P zaZty~(JFYau||-Tx`k-5CNi?f->2 z0C1w7n4qwPme=;a-R#77`fm{dZUSr8%U7uz$t30Ah4}bzSYMJWaENy>TaG^^M?v)) zmJ+0CV3*6wQ1eqm3GZ*Gjy)AcE#CNZc?}qJ0X$Rh`qtY^f+b-LPiQa#Zu#^5+?B?s zo!EE6vMq#I0cX9=%}X1oW3)hcfLMRJmhf651U3)$Uv8`XlSRG~%*<5HK5yQaYQkCK_Qs?5^Mhp^4~_+BJzoS)XGrSdf^ z0bU7w&*PihodRsWo_+B&`|rI2F+}h2*J%N)H-a?uSPSHPWpSwP{ztuw|Q}&L`45Iha;5+u^_2HXPF){Sd8q0s+)8}Bt-XE&9 zuvjv*zRIBwY!h5Jr%*StjmL2aQ@}5Mk)-_3iuSbn#cwkVzE2!L0)s%Z6=1b@l=_*T zsebClbu0;yWVNbM`L`g~V-&HA&I|KDdP2;{Kf-oz@dN(%_s=?YYD;sq^J^8=zaH@Y zT(^c4i4j%Jtt9ra@wk$B>(RSV?;L+ zZKR8foc(9hTw;Da0w8rVqK&5ADWZ&eyjzYs=VsHc-Va9?uRez+~>>MCm?? zc1lfonGAcmHdC4r32X|1``s20PyZe}zwl%1p;Wn`OCE@p!*4tR4;&+vC`NDjYttzI z&!N^y{E8!=YuCOUARJW-rPsd>kdJss`)SRFzP5yG$-MnrKRo&a5*z?=q-EB`B`!5K zaS$TiOQNd--oJ8=iPs$v%W3E*fAuTM|3Vt{5P_6i?9{iY{@lhbRPz*sRhr!8Z}wwe z6H984#w0#t&iseKPFQD{(hzbdt5v@%XQ5##NRvFB;B|Rzv!l)J8VTP5SnR$HvC1Vx zAaIG>82s0tIXrV>(mQ58TH%Yhi=df}PAV$sNA6P!F$bFQljje<{Rej}Ck)o=7*fk_ zH(>9$r>Gdn9ZZJlPP*s5h0P|iRfA4+S`^(e{&%Ch1t`t$bsuw98`@U~|C||6GoZ-J z>{r5Mrmw-56d~@+O6f&_lL5~dgyZX%zP)#AZbE8wHSZ)}0&H*a6~tY$yhSM2-(7{T zDhdA%8pIK&!B#Lb(lEwUN zLdp3(wU@U7V6;I)AuL#rIrpO{4_4Wx0$ib8IIx+;$LH}6XNruUoqtpQAqd0*{Xk!f z_$jTQ8KQ2VuPnF^fN1cdt7*+Z`+KF$qbGuj+~WCbGOcm{cIR3!3FLe#zNO#PDExB{ z8JtYdfTAsHy7Y|~s(%GhTN^pGDTqsGf`x^kA4saGCv%sp;k~y=J`L+$RuW3ponm%B zZZf>DvE4(j&hn6cUc9_b@C#8yYkc%VW#;M)+D5@9%+F5*LvWt<+Prc#{B`=g%3P9f z=7|3uO~)TOJ&t>B_Iht+pvD#!#tUeoS-iT3as6f&^n5=<$^d_QN|G1&pKQ@61&S$ z@XvRl2rqe*Kn-itdGqUZ>F)cAzM@(p=qshO#Vb4BkSF2-Oa=e5Ho{92#od}bZmB(Z zQXiUm8!M|=1FiM0>XXg4HLCNRs9i^Nm%%gF0!1t2MO)#L*~u z!1J^#cTi?zK;-eqq5sa;LEL(6qldZElW@AB6g*X}1H_+#kD;8<$-#VXx}^V%V+svj zeOgG*3uw>PqteY@u><>qtR5DCx?IjDV6NR{zhnmv^ zrRMUzDP9ChcQd@{Ai5WnxDVb}{my8{5fj?<3Ei9Q{~QMi!65m{Y*kDilG=kXWw;da zLTgK0Y1x@3)PnBcg@J|IdCe~H{hqa6_hvA^b*W=CUH_&U$^LfXI^;S@ry&0Sjt^K2 zEf>*luDTaM%#FV7T{Dqb6N3VTR5c7LmY415PYIAxo zNkhWk(g%I~zjxs>UHBNoJXLa8lJH5(xyV;TZ(D4Qev(tY$F6l0)gZJh7VMGt!~eK~(0mhG^ozXANtDj9LdLzX#+D`woXF^w zi*u=zHzj!#pQHN(Bxxn|h1-@e!c`;kqn9|G%Pbcy^#ead{=CkOpzg0S-PU*W8wDSa z*5QR#jv@nn05@o5{I1IzaaZKaR0t+BBkp}`_c()iA&D|M-F zcOoi4@!Ip+G4g{#02DvEIa_*K^C!(4cid%y93av9Av)b{DQag<>YskL0&BRaqeLc% zh7$HVxQVf@l`!9s|m8JEN`BK zyp(@-?0!zT=3{dY{h`$WpwW{gguIpcgvMSPS7De+`%EfgX1U8wbK3b4mL`(**;cQKiXy1`}xTdcr!Fm z0$JvKKa4!Iw4DmP@9zS(QO!enuKivNPR9Hkxf_K3J3}eFweTy)?WsGO&vPzI zJrT>*Lc@L{ma|6+y(~^gT=9-<85vNJqNJ%;m}OOn|5}7?JU}1=p0L({y z#mkhG#1AjUt~{NnFze{4umL_C#>Ofc&g%2Eq`XArjxB#7N7ntcGwhHFnkwu$Qr-6M9+n&LRlBZ64xMVzG z5g}NV<-Bm7b7oSRm143RR_S*85rW)Bqpt_aTI_%M!rU{Ogv6VMwh+X|c%)Rg+ zunErF;D7jhZ?#cCbXp5xiC1`Yo9?mov?+dN%T{Lw2;!AS*u+zuNh30pe7nANtQ_`8 z&5!w;ua{nO*+tlHdf1QyLBHNazi$?q`LIvxP&h2Xf+QjQs~4SAsbd=lyc((^%2}?7 z9So|UCunxr^cd`)Q2CCgg4ikE~_dnFV%D{wG=XR zN~gGkW4ynPYW#d(geo*0hR46eVB;l+15ozR5DKk>{q%x9{|)|pMT-&c>oKJq{(`t zjK4lQV$uI4x&QPX#w<^Ns%xfFuQx3?TW)dQlnoTZzuCQ>5FT-KidC5xMFa1em;Lh7 zY6ijx>g+}p?7LGOpX_3=Vyv=`1~o`oY`NHZsw~weYN811A)g)^-skG@v-QWnOcdyP?#=}5m{bzbKWaz+EtLJMeb|=A?RF@o9xct=Q7QCD zsgyRyx_zhpJb;`LY7y%_MI(*eO-K7kieUWJI?j=sEd&CyZ;nbdkBa7pWA5v6g>tOtq@5gW+$J~rjBdAs+&3iHy7kp7RP9{%ckGW5 zWTng{zH`G4FPQ#r&Ft6TS}Ni0k@9&%#xod)ba{me=klM{UvjYS_|s73H-8sh^76!= z3acyPBX}1a9}eBdJ$c0}xi}vuwLP`?CSZTCr(@D6^nS3GCRXOM26_Gk@5~id>wFEX z?e@bH@^WjT3|j<}5+Qyg&RMwH_YlWKY!Q2m>p0E^Wu4qRrV8hd&*VBMIZ&hha?`!O zjzSiiP+@?a5)c?-Lyr++qW;?55|$V3!Asn~(iy{c7x_*-$-%Y1WO3<$ke+n>PC_F*|K6pUx0Hx1iJ+M~tM@atymsav z%x~ZBUNxQ%nZd0V|1=YNOvE+A;;hoV!J=d}vUN-#Fq$F8gq`m#d?yQDfSgE9&71n0 zTSSRazv{6#;?B0KM8VqcgzNtDVp2ONH_&ro-3f<#zYF&OD+z*s8?C~Mc`tq zY@Ai8iGvRf(l8O^p~+zH`c)bU>=soZU&H9nsJ^v(L_`YTGhm_MRfB@m0 zl3hQ3J<#Lp>E{l7>4D8X1>n28yig9W(tIiJ_j>vg-y!*ic7s80(%WFY65PASfkVv6?03H%XOWLL zQSvzv?eoUU9AP(%-KmOhZQ;I)Na4p1^Z8C*J;XJw&shp>U!|Z6@4mJo@iQ}K>|G@1 zHI%#6JoB%#h~v6-6hB5t9#N{w>bglaL@-f{8$`I$3Wop^EX(q|m0HJuCU;jc@c_34 z(%n`QZm>GklJyeGDfCZsPh+ur4Tu`F(i$i^@B6sM71u4}^*yBE-`P%*vH(Mh;!e)Kwsr&*@4sf-m zji!dpVCj%yss5yWYjuQ|F$(=THABQ9IQj`~Qxgr?qG)C6K1BR;e?;Fam@#q4!4dTX z_Q9QXp`9~-c5;gk;p$u8?=wJi_odZs?Jo?v&jU)F@f??euhRRcw`@lPc(J2{HUbu1 zlNoA=-=ZM_k-|6l-Q0%Dogg);?$gwAZJ#YnXZ%P68=m4Db>J#e*qR$3@t#-j6{)k^ ziiCd8rb#uONxpavvY^51>xZ=u3B8h0lv5j`M2@%w%109cMc%t!2Uk6}25UR)22g=- z;MF;_^)c_H4{P4Y-@A()B{M4)7o^7qUNLaFhL~Wd*bbYRWVz>gktM0~mQe@PJi<6h zI>kMP&LV-8LCD)-D@HvK+wVJN*oHdtv&C<%n`d%}X_H6qjfjcpc%i2EKQl&0* zn zVMbEtWkcWEXokPfRa)NT3AQY*#F57{N4z@^BpJjlT}bon@OJ&FLkp4CxiyeX&A+fn zEO&tP%VvS9+nKoX9m8-66to{;qGSvrA(azk+bZ{XB?hyQ*2gD;Fh<&(*zI;nKF0Lo{Jlz-XfonpCNvZuK2)8&Z_4Y}VHp=jU#j%p zk>nVG868bPjD8Z~zrdM_YdbL|`2N=8Y7J;v`t`6&3SNe*j~#4jC*G?t4L$q2VU$Rf zkc}q9pNkmf^t>AAs#RWY5BbhpC#|7$vza)uNgZPZb?mu_U=%N!S!7&=1@=kietntK zwE1_o8Ml+o@{`><6gJa|CWh}@wj->z3)mZq%d!}jqBC+))AA0gHR#k zVD9>a{&o552QGyYdctU?{>Ut1mqgh*Hvk|$?0G;v)$~1?QQ+T~NlmO{$HhN|0K|2l z3PCT5e{tPo{OrbZ8iBg;WP|)Y=3~;Jc9}*peG3R+7K3}yeZWVO1pt)dvtE|1j=zPg zW1?VLU2JtvzKT1q6sLT|<$I`tGVk#jBQ|RW-O0#h7K#?Jl$MKaosLqE(crkGHe^}; zYc_OW#*1qyGm?NBN1?F_IxWtwvclyykWn4H<~)n$CWgMHk3nCH{-i(MJ0OE~5z@D-8j4pY!@kxE7#+>Wo!2IFdDU@*BNKWy&7DV8O$8 zqZPHvk8A#Zndq6|%-;7LSB`7MRlL6+LaT)#fgazkuXJpTk#A4a)^Ud1Put+5EVM6< z#5Qr8)d3Tk%Ed1CI+S|2Tea@Ae=FY-PN{g!v#~U`hr4hmjj7k`y%iY@YT-Jfhzyzv z=aO}k*To{}lJ@g-I3`w<2!3{hVrok$#KZ2dmSSlhe&7zyL87K`cxnibg5J$qWBi`S z)j^zFOd9Y&GhG0ZUb~kh`lFYGm#zS52&-GZEkXf{&t(bJZP8-2vx+w+DWu*rt5w@L zo77LmiSL}(ZL^bZJr@T7bmJZ-SdXp@Cv&i9!ITlNrNPPt8% zlbIn1!sz)X$}(Vn3NauUH{q^vNuP75dW9OaR=1+^)GE+PL1}cE%7mJSkcGB zj-0{CHtgD%-rIrDS9EYAqH#seVJ-q$sf1!^6=jn@|5)r2Lxmr>=}PC8FUwFXiU~E+ zd7gBNGpb`&=`w}E7^&?Qqzqpb7mtAopURorEZh#+FAgdX2mpCe??fyDS*rA)< zx(sF)D%HS1#pvA|rd7^ib@Js(m%4^OH10fuFKJH$>k$Yt2Mf&S(?O9K6uwC#aCnjG z3%Q)o+oV#*<_eR2$=yuj=VLCnD+QOH#%()5bmc>caZpU{Yle8VV~c)?k%NT=Kz?lHh*O&uC1eMh z&OFf!jk7}L;*IcJU`cOm7y5!2GW&&1oEDw|ibYur*%XQ4Q(Bw479b7w6cve+!*5fA zVoO<^J_e*p%U6D0HVx734m;})N-o;L8qGxqb{wu%I$!QwfzR-<3ZJv$)$jOmeR3eW zKj^h|8aUhT&_})|arzo)KRoJKjlg-Jf$E6~=UR|q(ozZ)tpyoS&IM6R5=fVKs73mK1ZJgj8b^7i-a%Ry~1o@iz4M62%V(^|FV!TIgQd#EkXAUs{kzLf}+A1SNCpzY6?>Po1N{KlyYCL>B+PKz6HQu3I2oU zA&)X&55?~Lu?RXNy79HU{g6`4ETQzCvb=Ts$|T)(Kje^w)z}RE_Z|_Kt=@782S*SR zDLEq+m|NalikW6xu$6>Q@v=CANtZj68dz~K1omN)KU=^8l$X*Zg+Xp^ZZ{D}DkvEy zt?xq@7-Or+DNwj=D7bR4!tSint|e zl9w>N6e%!Bov}}ZaGuAv2s}1{{7>AJbI}0}2V1@I#JxjD+yAJ*q%OoSR7Sj{QxI9H zkNV+%RoqfFkItI=QmUY*t2 zt9#)*+Mf;dl6;vdqdXGR&6;_D|FsyMB=TQ9_`OUi_BjwBHsF8zV;>yFF_e<`fxIJw z;=MpNC3k;3`s2-z1G;#v?3lNkCSdL&O^5!;6vX2$XBxb);g)z82wSDJAhJ?O{?ysP zyTb-|Kmw<^`$ww+Z8-L9={D$Z(2_)?(N#E0j~A2j+CxS^F@5~y;Cp}YqQ=gaE*vI8 zY;*n7z&Ud0C?iR=lhi&LqV7<+(jc_8P(>`=4AcFuDyjW%+d{tgyOZB4WYKv` zOb8;%08t8gV1_VW#9x!QUya&l$w3w{s8F*Uer6A`84pdw%4 z`}QaRB&}I)3U_%9MVH&)xEUy$>*cvDh8)?+rQk@Q*;((LDkyDaOKJImf2Hl z8+Tt+GiQde%7E@0^f51xb|;TY-gNzbifGh9aZ6}^PdSrmI!>I06z7`{*S_dmS{(fO z&5aSBK?`V0Xy3didR@S?T>mtlOf*!)hTkUmFi^@yO-lbMZw1FN&=DUvedV9PH_Z9M z%16=jNxQk@E}x;{V?Ha8O_OB8d93hH8{WHq5)T7k4^S{w)kqV)u+Z!SgeXb=1yC}A zL~NYFl3_^`WJ4d5LY~Ea#s4}5Q=fdxs0y9NN4of_%2t<_d4bi6Rz9gh2I|Xh5#)n7 zcFCzQhPXe;YXm$DA6}6Mwg0{z=+w#ER@6({B^hYd`8SPl8Wgw1_89qWvbmC)t9Kb5>_u9<%%JV*kYGOc zbnXy#UD6u{ ztd;1MHI}a%TaeoSPU(KhswHrP@KfAZ{g-sLRUQHJ})s5Cq7SxxjEOFJ+^kET4fRrQ}1&ZA2lhTPl^ zHgn)k*fj)w+bGx!j)caF6%C2m+d;6Wif?ALlQhf3GM6Qo6_<~k z*Y(>u;rRTYHWG4`zO=mu@}oT0D5sz)+T{O^M{IN6@X&HoYg8Evzf<9d_i4~LE;5vR z?dsYSppZT$^CNrru+(l*zGo(YPQAwv8E?+Dkb)A)|9R5Wc-$NPuIl}zw%0=bwpHK3 z#RT}Qwkd1vM{%Mp`pxhIx513?PR`f50fL)7sMl<@v-Crr4ruR%yV8lo%LS&iOdihV*ySVa-&nWw!D*X@!Bc!62m%5xO z&JwD|OuVdmU6PRfvUN(?0dGk^Md#uqs!~*=i}QD`oA zr_w6_r+UXU(~!p$3uom)zjpv5*uI1i*;E%{3upE%OUk43fDNJ7FXUG*hMH$fDsM5T zYf{HG`CAuKyGbUAeJ86#X`Di$FLP1d4zyYoEog8Lz+njJ+Y&hbM&~flB7C^A?cZAG z^!OP=6uaw4+mM~7hpVpIKq79CB|cz-Ky78u0(pY*g!PioEZ|izIixknXnoxP6^2cfa zMN9XatEEUTS=3#}nu*3SgAIl$tN+tsO}fr5o5R|Q!03=|9MASj0<(KWj6Z^MM{5R+ zHc4zcgcODvZR1xkt%?|^y=o5?9?DId>?Uw@?+j`ilIj*+` zpiK@Wmv_ffeM^!-CmMhTKKo`O!`tzrxqtlAL$wT;O?H&UF)upak8CnL_TY&@X?Fz- zG5DDwfiUSZgHoA7CVDDFN~2*fsp8t%DI{N3&wssD#0>5_(!Pu~oV@kQ3C$VqV*az> zA16KH1~TnhDTDsAUg3a)po&E7wMa}C7|*_u8L3_aFo^*iDn5*6?3ruHzt zc8GI#)b67mPA~~^5Gzel#&cIa7^X7!+kc9&dsf9vL*eex+J2t&22>DQKN={E78k2i z@4*B!QrFXXxpQ@8JzX(w{QzMps`dr{DfJA5DDQkP)AaA)zH3t8y_#O!EaRKMIva~-6!B}?#5cD%-eWZziXP0NRu|06tB8J?zKiJIz8-?}XOXK4Y z*8qvU?OfwAy-s082Wo|{y}p&S+5HOf);>c>JuWiwx+F`lLVN6{tn?p0rrWG2n9}1{ zqV=-|+Lr>+DK+MTf|WT*393e-ki~lyi~wYoXMbBJVVMh_*-O^G7Pd4_G1MT*wCI0S z5hU!4u(%+#+_@ieNDP-?XH_bX7OpqeHo}{D+ejW%m01)UsmZzkJE^y3Z5`afD~n5? ziRkPj#B(%r|NT!G-fQE(QkvPN_50|3Q$bSnmvW>RH}K+yMuJLlK`QLZ+gu2|^*V*r z=CieQ=IvLOj$eh`y7|<5ryQb~`zj5$9!D^qD+olJ%8%OpO759yB2?vCpocw+{nNgucc&VY5v0nbuxR*jFW1!*78@cpw(PT&Ga|}0y9Een)WyrAOD;YH* z&Vpyy)1?Szeh)_`x%^JvA5vO(1=3RVcvpqhca-g43Ot=>Ca0o-dTii33D(ORaA--Q}S@Z9pfEdt~*y+0dY_*tvWB*u!HPCT^=kX5?v0LtW9Tx zfyutVsQiOG8>cQ&(Vu%3Z77>nl1nvx1J76D=}J;r_P1zB6Zm)X95khbu2zlT@r z*6iJgDe(w_(o~oU6;RTs{+i3o;~IEIs&y-P-*NtV72{6{3TBD;5-r7IYB#{xxLa}ZZ^G9a|1*Z_^lyvRSE z-z3_ZOzBDkm7D}j#zy~y{6E^=yq zb9kv!$!q|c)+NrKH#>cC1MS2T*TivSWIZ^}iD^EG<`*ib41ujx&(CtiP5nxs%U1bW8F?WZs2WFACfb^1b)W$rTTAhvm-;G8L%_SdNQ2_=IrB8MG8t z>!c~;34>KXu5&Mt1@2~3Ws@^3{VzBWg8gMm$R=sy+51GH~Kd!9CDcUbzo`O|2T@?Frtf|t#Yji%23 ztXVN_p#;j1Q6|UtTvRe_5VSqsnf?azG61tr3D9NDj9*DEKj}k+kT+dDd4{{+TT|Sm zZSM-kmQ76NPb@ zngfs;!FYT$^#>92eWXhV+M&^4^(vFh1qi2~ODg2AN*+9qXexM{RfnLfF@11wwVfle zAzT`tbj^MC+B44k4A{T>!6I5|zpJE`EU1yY6{yvVj`NGG-|a+-@ocLjG6UxQQ0# z)!_Nj>gzPKw&Jp~o%bzDU?+ECg#dr&1pNKnfTaYHf#zbQw^xy>uZB7lOA@mszzVQI z+zZ_Q=#E*hTE~?~8@&Q6?frKqzqSQDl>aw(cJSAg9sgOz@C89NIWu*NkAV#Y|Luul zYt{M602n0@e_jO9BfvN$DL@AiV9?JqiEkWgF_13sOf7Wy9(C6lJz7Yjr9GB|xm;#> zfp|znYNCp}O+w=$asE2)K#o5dJHx%p1Z`rQ8#*}EAv2qGhq*&vfk=6X*iDJuuXv@z ziyl5f#7y#gUKALfwu}d7SHXOI%K%O%=%2sRaw}`0w=vKMgZw&vW1{Gm@Ua44$9#F$^T34>5UKvFxiW*3#44+1El~AH%Qf>T~7;LWV*$8EG3)RKeYaly5 z)nBtB0qh=BwI9&?+zU`G2l13s@qJH58>AK$IrpZcZyjC#Snt-6aujzIm-cKQCFiWM zG|)V;WH>tcSk5Ig?4s~TxchB5_$)p^PpqZk3F9EfN4CLmax4CG z0>@t}+Qf3<6%IEOwDh^&S6_skybJBe+XDGB2M5JN9Pi8Arn#@*3k>AWf8A=mstJbD z5q$&~N@?)R194UR0d><9gf2kn3<#C9!kB&w)NNsX{={aJq-=4BU%R9OmR=g$7$AHg zfqfQ!f-P`4UAA&)j`nM*d9cN##sbPpg;cu24L=AcXIz8EMXN!6|Fi zFKkPnb=+cnO%)msBr~h_nr2DLZ~*RurCOC#PVGf(t7aOu-v1BQoMe7zchzSvt+AKO z8&0(bR|-;?Yi65tVw1%yId_V9kGi&dEoQi~r{Gn+lV8eO7diZ#7Xf!>yDkvnOKaP- zIL!Wt4&HQC7h-Oqu(-vEZf~qbNE}F*tEJXI1pH*q%IG|t| zNWeXH%aF5^Ce5ibRryFBSdQi^P`j!DsZA7#8wSx-FDMqs675ZogkAY!mmb1>7k^7A z2%tK3m~*`C$2zO4NWE@$o|#+V&hL$c-!h9Q;dL+r7|286!-*c* zT;6Hea}fe>UzM>-Qi@siYNmOmL*O4na2ML2tboja9DMS#``0DK2^Sz*zJ1NKui zAC+e0Rva{CZemi@a;{Phmd(iHnQI`|*bm$~RVY#R_N;7|Y#1RYH-#z`F5@bPyUUM? zfbn2*cxE1>msi~GHjsLIL}|prrf7s)-h~7Aakq=kO^~&!MhW@g7852JvhH$U1`lMV z_$dKS!*TjIS>V}M1OTQSq1D?QHZ14R1T*DpM7V~?@80*t{yd2Im=RHg`N1!Y(>ux`TMf$nj+g#W|i8NV|@MWW_VJ>z!br2-0(_axrP*q)uJkGXT?g-P{ zbdLjZjVE7!K-ZoMc|Rb08#Q8Ns-UI>*%FaJfBS(Ngv zBquXcV!gmOS)+@|JjBZj5&+IS`hWmfQXT&_<$3uO+idYHFa9IjL}@&?)@ko`6| z4rDR_>xorcy@$?VNAU^)5YEC^F!}gh8(aH_n*=4kbPhN* z`0Zjz{hq}txPv+I(ya@kO!Cz;it#o*w|QpnqkAK=-$3ftCf=-d=3TJ=6D9nOeih_9 zag?n0PvJbYRBUlB=>LJsfTT1p>{U2IFie4gm|6|145uXK#$Y*9ind2kw#V*|2q}2Xt z{0h|TXY|O&dwBFU2)}_45VRzKbZY@>>;`0^Qi-U}01@1O&>zkE7bMG6`Trv*xD~4U zIpFvjoxIs8%%=#Z&79u_EA+ z-AOZ1Ou!#D65sf-w^=e*%@=no2#8nw5|ivY%+8dkm`WSd zxF~_z!f|ve1d{THG9i*At#RF~m9XwyltS2P8il_3q}%+b>LNRw|4@mHwgZS4l^0e{40d_e}0K{s9tb z53gM}ZY==?M@(Zg&F?vVarVnO-!pt+gzhaTPb6Akj#uwF!9)PXx;!7Fx5t(MG}i+< zkQI@-iui3dr|2AaidXqjcZ%wx%U#KrL0%6O%c%;vz9^k~TzseM?rbi8LfAh!Se!4Ey|1%z-IK1?hXz zF=~K4D@-3J^hOk(e2PO_E#h=FZ+juK3N>MXGA&0*F_X2Zg#k2zKU`uJBt-sd$mw0l zr{s0tbnlpCIJ^Gn(@F72{$sWAtUyKjh-5YGI$_8gMYOv_(4y6#57Ea+R<^VK`iwHt zt8z1LUF7Vw6$iD?F_r?ITgeQGfDMbz0cfQ;dB_XPFsQ}BMcBQvAwR*}X>Dw0-kH-Q zCp`#Ob{@mZeUFpdo`5|AR3lFa{}ok;;zQ{xZ?8EuxTzXB01N}rm@VvDN_6+MO5mjc z1#lr;M(BYVD&G@!j9EPIp}{Z!>}lX6Pxxgpq{#j|%|}(srT~h4TJ2+(dsdPu;N>16 z1IZNj6D?a$vbVqIcFB5~fA@7|v1C~;iI=R{6IvOX?)h}eE@6GB-X(WHjcDwqJ18dr zP)X7A)QN;AQJWH}k#Xw)eRdV}}|b>pIu?T>XG=Hn7^^ zW@UT^Y;Ustsw3b%!gS70ZyR*qC!Qb(yTfNq{H8NzU2J%r#67CK| zmJf2J7TJ!Dp9oL$fke<%E3XgpM)xH+9|pmv1a0+4ef{sgl)!0Bpp22soj@ z4hCFiVGpsiA;Zt`T$Z5(8@svyuHp%#7vjH*Xe1d`i35IY2D{)QCk;V9>fu=F>nDto z?GzgkmQ>}ASLx4bPyTj%+@Q6RlYKj@ZyA3cL590|GnNRWd>e6p2h}-M?gp~+?umJl z$4A}@iyBt9x}+(;pI!cp{~!AQ({Yz~Xe*GWtOj_^6^7i2H+IwOC{(8VC`}r98{l|x z{hJ^J6u#Ym6siBU%o!FRaSIz#bXSB79?U^8;3=yV%Sw6w=+Wz)2m1U^VJs9enY)a6 zOP1s|j#|$Pt>r|*rrY+Gu#ZY}qbbKuZ!b5Rk~};7EEC)hdv~T$brc_EoJnH50tkz1 z)LmbgUf;S^rYgqu7H38}*1rRgpMeKJe0Mz|Y&hE+2P5qR2vxP~sNlTnG37mYx8}bGN@LOY%3uRndtA=F#FG?6NGqQ6tbTZd>7j zjCek?jMvLo76CFECgm2bMuM!JCu%d90Po35nugR2UXrTy?&t^bN5KSXgr}*QWPRQd zi+Txu0Jbk7=+t!S=Kg?2AnvTJV06nQLvXbz!fbiWhgnDnjEeS+DaX-ZFSJblXkog$F?eH1R0#;x~9<}mTE^i0J`(%K4pHu+J^gpaf*wpC;@wb%F7uZYq}{YH~i<>HrC`)|k-8be^(^VjN+}r zB^lFU8oB(7*Y7^= zuM5F@HftQF#FP!_J-&p-06$5$53>qrH7eEl6307!n)yZ0L21hGz3R3QB|buQ^+Sw0 zdbuSTQQ7m$JnA;68^+BS3>~g(y89|&09VsN*`~-XGKX2{Id_Z4^RcuzjAQvWz>&C5yi#=AIPjU`OdW91^*PooIsI2p?e^ z?qICWO4Df<^{t?;PirAEyCp9pRzXEnY>32WI6F*R9pIIJIP^ds
      2H59s%b@x0m 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 literal 1647 zcmV-#29WuQP)ZCaeJl0j|*oJ5XJ1ZP37{eOG0X`}ZEHxWS&V&AL6)UVS)e+&3!BVoN z`VfqldMYxXi%3vZXXb#h4Kf`WMDEU~fyeaLWll4mT3bCt+h5?BGr(-ai0~r7=YlMJ z4CQ)S>nU4$Ufcrfh+wWvCp>E&5*GXa8{(fopf#Tb&zS5lUpv=rGuKb}Mjb@wEy#jm ze|RUit)*9EWg9`#S?0)vh5rf3phc&!X(@_ zpUc5YT3Z#p^!76QdV0)}_0}$b5B1{b^fel|V|q{$G0KC%w zYKsR6?spD%95Z52Xxig22|=-@o)69p!rcndbcSBkUcxks2@5vBy8ICM*d>q!E!J1{ zCwEn6&5@10uueuy3@VGJ({S(4hkNHFc#p24S-aYY=x8J^-3{iP1sM>*bXS#g9;XDf z0C9qkSr}AS8;<#jdT&F$upjPE7C~J9rO&7w2{Vcz4IyT7F63h`jG$v$aDUC`f(K%Ag z@a!?$a3n52XyieS5;Zh0g}`F)aSsRCslV-mG)SfE1mn_qT;Cx=>l}Fi{VM(VsF(H= z!M!kn5f(i~(T{n8wDKElLmc4Q^T9&e407i`h4;JHU=|i4r|&}}%{UqHH|(xJ zS&u(o-3R_cjov;6mYJ)e-1Bt6Mw#@ik#>Bi%OMMzw-!n>XoE?F&R*#173~f1ep?E) zc4tt%<^DDFVG|(FP&9B=h*}w2L&1!D#L#+te6W`7$$z2n(LNlC(5*50ptxe;jMI5l zJQ>T@GOHBI#HS**h2_55Xm#pn$AMp z{+sr8)zE{MyjQ|(#m!$KPY@^ka;wsLgQhb*nlT?a)exmh_Ck72C$*9WvrsR60q-}3 za>fkxNrjDL{fb&(M=X2odM(tScf)hA0PgoElkV&AyWYA$jlNj!{uTV=yO0F~JD@)e zf;KHtU;A!ZXPz+yEHTA+_Z)ti2;Xb$9L9%GJc^c!BpB`(QeR)u>bYuo_AL!kH!;`= zp{N!5t0DPWNquWqm9v8K&g)YC-6BD2zhX#!?wn1m6O20V*DGniy^aAv!>*)4|NTwi z&}8)`Zsv?hEiv9L5(4Ls(cR~do972kj$#j7YzmAOsHa)fG)P@@cz<{c?%h-2JGs&C zo8lKl{iPc-P{B6zy;KT2B)O`xwo?d{z$935h9UJuXA9y5Nx!Yhg^fXB7V#9}te=TlDL1my?JC{{qt=Ay2(#xf=ig002ovPDHLkV1ja%2#x>% diff --git a/src/app/assets/cancel-circle.svg b/src/app/assets/cancel-circle.svg new file mode 100644 index 00000000..43431f63 --- /dev/null +++ b/src/app/assets/cancel-circle.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/app/components/Connect/ConnectSmall.tsx b/src/app/components/Connect/ConnectSmall.tsx deleted file mode 100644 index db510891..00000000 --- a/src/app/components/Connect/ConnectSmall.tsx +++ /dev/null @@ -1,170 +0,0 @@ -import { - Avatar, - AvatarGroup, - Button, - Popover, - Text, -} from "@babylonlabs-io/bbn-core-ui"; -import { useWalletConnect } from "@babylonlabs-io/bbn-wallet-connect"; -import Image from "next/image"; -import { useRef, useState } from "react"; -import { AiOutlineInfoCircle } from "react-icons/ai"; -import { MdKeyboardArrowDown } from "react-icons/md"; -import { PiWalletBold } from "react-icons/pi"; -import { Tooltip } from "react-tooltip"; -import { useResizeObserver } from "usehooks-ts"; - -import bitcoin from "@/app/assets/bitcoin.png"; -import bbnIcon from "@/app/assets/icon-black.svg"; -import { useHealthCheck } from "@/app/hooks/useHealthCheck"; -import { useAppState } from "@/app/state"; - -import { Hash } from "../Hash/Hash"; -import { Toggle } from "../Toggle/Toggle"; - -interface ConnectSmallProps { - loading?: boolean; - onConnect: () => void; - address: string; - connected: boolean; - btcWalletBalanceSat?: number; - onDisconnect: () => void; -} - -export const ConnectSmall: React.FC = ({ - loading = false, - connected, - onConnect, - address, - btcWalletBalanceSat, - onDisconnect, -}) => { - const anchorEl = useRef(null); - const { width = 0 } = useResizeObserver({ - ref: anchorEl, - box: "border-box", - }); - const { ordinalsExcluded, includeOrdinals, excludeOrdinals } = useAppState(); - const { disconnect } = useWalletConnect(); - - const [showMenu, setShowMenu] = useState(false); - const handleClickOutside = () => { - setShowMenu(false); - }; - - const { isApiNormal, isGeoBlocked, apiMessage } = useHealthCheck(); - - // Renders the Tooltip describing the reason - // why the user might not be able to connect the wallet - const renderApiNotAvailableTooltip = () => { - if (!isGeoBlocked && isApiNormal) return null; - - return ( - <> - - - - - - ); - }; - - if (!connected) { - return ( -
      - - {!isApiNormal && renderApiNotAvailableTooltip()} -
      - ); - } - - return ( -
      -
      - - - - -
      -
      - Wallet Connected -
      - bc1pnT - | - bbn170 -
      -
      -
      - -
      - -
      - bitcoin -
      - - Bitcoin - - -
      -
      -
      - - Not using Inscriptions - -
      - -
      -
      -
      -
      - bitcoin -
      - - Babylon Chain - - -
      -
      -
      -
      - -
      - -
      - ); -}; diff --git a/src/app/components/Hash/Hash.tsx b/src/app/components/Hash/Hash.tsx index 54962ee3..a8d0c945 100644 --- a/src/app/components/Hash/Hash.tsx +++ b/src/app/components/Hash/Hash.tsx @@ -1,3 +1,4 @@ +import { Text } from "@babylonlabs-io/bbn-core-ui"; import { useEffect, useState } from "react"; import { FiCopy } from "react-icons/fi"; import { IoIosCheckmarkCircle } from "react-icons/io"; @@ -11,6 +12,7 @@ interface HashProps { address?: boolean; small?: boolean; fullWidth?: boolean; + symbols?: number; } export const Hash: React.FC = ({ @@ -19,6 +21,7 @@ export const Hash: React.FC = ({ address, small, fullWidth, + symbols = 8, }) => { const [_value, copy] = useCopyToClipboard(); const [copiedText, setCopiedText] = useState(""); @@ -42,11 +45,12 @@ export const Hash: React.FC = ({ } hover:opacity-100 pointer-events-auto`} onClick={handleCopy} > -

      {copiedText || ( <> @@ -56,10 +60,10 @@ export const Hash: React.FC = ({ x )} - {trim(value)} + {trim(value, symbols)} )} -

      + {copiedText ? ( ) : ( diff --git a/src/app/components/Header/Header.tsx b/src/app/components/Header/Header.tsx index eca07c91..679f81db 100644 --- a/src/app/components/Header/Header.tsx +++ b/src/app/components/Header/Header.tsx @@ -1,17 +1,15 @@ import { useWalletConnect } from "@babylonlabs-io/bbn-wallet-connect"; -import { useBTCWallet } from "@/app/context/wallet/BTCWalletProvider"; import { useAppState } from "@/app/state"; import { shouldDisplayTestingMsg } from "@/config"; -import { ConnectSmall } from "../Connect/ConnectSmall"; import { Logo } from "../Logo/Logo"; import { TestingInfo } from "../TestingInfo/TestingInfo"; +import { Connect } from "../Wallet/Connect"; export const Header = () => { - const { connected, disconnect, open } = useWalletConnect(); - const { address } = useBTCWallet(); - const { totalBalance, isLoading: loading } = useAppState(); + const { open } = useWalletConnect(); + const { isLoading: loading } = useAppState(); return (
      - +
      diff --git a/src/app/components/Modals/WalletDisconnectModal.tsx b/src/app/components/Modals/WalletDisconnectModal.tsx new file mode 100644 index 00000000..9bf08a05 --- /dev/null +++ b/src/app/components/Modals/WalletDisconnectModal.tsx @@ -0,0 +1,58 @@ +import { + Button, + DialogBody, + DialogFooter, + Heading, + Text, +} from "@babylonlabs-io/bbn-core-ui"; +import Image from "next/image"; + +import cancelCircle from "@/app/assets/cancel-circle.svg"; + +import { ResponsiveDialog } from "./ResponsiveDialog"; + +interface WalletDisconnectModalProps { + isOpen: boolean; + onClose: () => void; + onDisconnect: () => void; +} + +export const WalletDisconnectModal = ({ + isOpen, + onClose, + onDisconnect, +}: WalletDisconnectModalProps) => { + return ( + + +
      +
      + Disconnect +
      +
      + + Disconnect Wallets + + + Disconnecting will log you out of both your Babylon Chain and Bitcoin + wallets. You'll need to reconnect them to access your staking + account. + +
      + + + + + +
      + ); +}; diff --git a/src/app/components/Toggle/Toggle.tsx b/src/app/components/Toggle/Toggle.tsx index e9ec7ceb..2eff5112 100644 --- a/src/app/components/Toggle/Toggle.tsx +++ b/src/app/components/Toggle/Toggle.tsx @@ -1,18 +1,42 @@ import { twJoin } from "tailwind-merge"; interface ToggleProps { + defaultChecked?: boolean; disabled?: boolean; + onChange: () => void; } -export const Toggle: React.FC = ({ disabled = false }) => { +export const Toggle: React.FC = ({ + defaultChecked = false, + disabled = false, + onChange, +}) => { return ( ); diff --git a/src/app/components/Wallet/Connect.tsx b/src/app/components/Wallet/Connect.tsx new file mode 100644 index 00000000..50769fe2 --- /dev/null +++ b/src/app/components/Wallet/Connect.tsx @@ -0,0 +1,219 @@ +import { + Avatar, + AvatarGroup, + Button, + MobileDialog, + Popover, + Text, +} from "@babylonlabs-io/bbn-core-ui"; +import { useWalletConnect } from "@babylonlabs-io/bbn-wallet-connect"; +import Image from "next/image"; +import { useCallback, useMemo, useRef, useState } from "react"; +import { AiOutlineInfoCircle } from "react-icons/ai"; +import { MdKeyboardArrowDown } from "react-icons/md"; +import { PiWalletBold } from "react-icons/pi"; +import { Tooltip } from "react-tooltip"; + +import bitcoin from "@/app/assets/bitcoin.png"; +import bbnIcon from "@/app/assets/icon-black.svg"; +import { useBTCWallet } from "@/app/context/wallet/BTCWalletProvider"; +import { useCosmosWallet } from "@/app/context/wallet/CosmosWalletProvider"; +import { useIsMobileView } from "@/app/hooks/useBreakpoint"; +import { useHealthCheck } from "@/app/hooks/useHealthCheck"; +import { useAppState } from "@/app/state"; + +import { Hash } from "../Hash/Hash"; +import { WalletDisconnectModal } from "../Modals/WalletDisconnectModal"; +import { Toggle } from "../Toggle/Toggle"; + +interface ConnectProps { + loading?: boolean; + onConnect: () => void; +} + +export const Connect: React.FC = ({ + loading = false, + onConnect, +}) => { + const containerRef = useRef(null); + const isMobileView = useIsMobileView(); + const { includeOrdinals, excludeOrdinals, ordinalsExcluded } = useAppState(); + + // Wallet states + const { address: btcAddress, connected: btcConnected } = useBTCWallet(); + const { bech32Address, connected: bbnConnected } = useCosmosWallet(); + const { disconnect } = useWalletConnect(); + + const [showMenu, setShowMenu] = useState(false); + const { isApiNormal, isGeoBlocked, apiMessage } = useHealthCheck(); + const [showDisconnectModal, setShowDisconnectModal] = useState(false); + + const isConnected = useMemo( + () => btcConnected && bbnConnected, + [btcConnected, bbnConnected], + ); + + const handleClickOutside = useCallback(() => { + setShowMenu(false); + }, []); + + const handleDisconnectClick = useCallback(() => { + setShowMenu(false); + setShowDisconnectModal(true); + }, []); + + const handleDisconnectCancel = useCallback(() => { + setShowDisconnectModal(false); + setShowMenu(true); + }, []); + + const handleDisconnectConfirm = useCallback(() => { + setShowDisconnectModal(false); + disconnect(); + }, [disconnect]); + + const renderApiNotAvailableTooltip = useMemo(() => { + if (!isGeoBlocked && isApiNormal) return null; + + return ( + <> + + + + + + ); + }, [isGeoBlocked, isApiNormal, apiMessage]); + + if (!isConnected) { + return ( +
      + + {!isApiNormal && renderApiNotAvailableTooltip} +
      + ); + } + + const walletContent = ( +
      +
      +
      + bitcoin +
      +
      + + Bitcoin + + +
      +
      +
      + + {ordinalsExcluded ? "Not using Inscriptions" : "Using Inscriptions"} + +
      + { + ordinalsExcluded ? includeOrdinals() : excludeOrdinals(); + }} + /> +
      +
      +
      +
      +
      + babylon +
      +
      + + Babylon Chain + + +
      +
      +
      +
      + +
      +
      + ); + + return ( + <> +
      +
      + + + + +
      +
      + Wallet Connected +
      + {btcAddress.slice(0, 6)} + | + {bech32Address.slice(0, 6)} +
      +
      + + + {isMobileView ? ( + + {walletContent} + + ) : ( + + {walletContent} + + )} +
      + + + + ); +}; From f2362b76b162f24b8159e52390bd512ef0505402 Mon Sep 17 00:00:00 2001 From: jeremy-babylonchain Date: Fri, 20 Dec 2024 02:44:55 +0700 Subject: [PATCH 4/4] add widget states --- public/Keplr.png | Bin 2981 -> 0 bytes public/OKX.png | Bin 1241 -> 0 bytes src/app/components/Wallet/Connect.tsx | 22 +++++++++++++++++++--- 3 files changed, 19 insertions(+), 3 deletions(-) delete mode 100644 public/Keplr.png delete mode 100644 public/OKX.png diff --git a/public/Keplr.png b/public/Keplr.png deleted file mode 100644 index 2fde14ec1d5d61ad55110b1a174313db5f0bb924..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2981 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 Dt)@iu diff --git a/src/app/components/Wallet/Connect.tsx b/src/app/components/Wallet/Connect.tsx index 50769fe2..0aea836b 100644 --- a/src/app/components/Wallet/Connect.tsx +++ b/src/app/components/Wallet/Connect.tsx @@ -6,7 +6,10 @@ import { Popover, Text, } from "@babylonlabs-io/bbn-core-ui"; -import { useWalletConnect } from "@babylonlabs-io/bbn-wallet-connect"; +import { + useWalletConnect, + useWidgetState, +} from "@babylonlabs-io/bbn-wallet-connect"; import Image from "next/image"; import { useCallback, useMemo, useRef, useState } from "react"; import { AiOutlineInfoCircle } from "react-icons/ai"; @@ -44,6 +47,9 @@ export const Connect: React.FC = ({ const { bech32Address, connected: bbnConnected } = useCosmosWallet(); const { disconnect } = useWalletConnect(); + // Widget states + const { selectedWallets } = useWidgetState(); + const [showMenu, setShowMenu] = useState(false); const { isApiNormal, isGeoBlocked, apiMessage } = useHealthCheck(); const [showDisconnectModal, setShowDisconnectModal] = useState(false); @@ -168,8 +174,18 @@ export const Connect: React.FC = ({ >
      - - + +