diff --git a/components/account/AccountActions.tsx b/components/account/AccountActions.tsx
index fbf399c0..da3a5cac 100644
--- a/components/account/AccountActions.tsx
+++ b/components/account/AccountActions.tsx
@@ -1,4 +1,4 @@
-import { Fragment, useMemo, useState } from 'react'
+import { Fragment, useState } from 'react'
import Button, { IconButton } from '../shared/Button'
import {
ArrowDownRightIcon,
@@ -28,7 +28,7 @@ import useUnownedAccount from 'hooks/useUnownedAccount'
import { useViewport } from 'hooks/useViewport'
import { breakpoints } from 'utils/theme'
import MangoAccountSizeModal from '@components/modals/MangoAccountSizeModal'
-import { getIsAccountSizeFull } from '@components/settings/AccountSettings'
+import useMangoAccountAccounts from 'hooks/useMangoAccountAccounts'
export const handleCopyAddress = (
mangoAccount: MangoAccount,
@@ -55,6 +55,7 @@ const AccountActions = () => {
const { isDelegatedAccount, isUnownedAccount } = useUnownedAccount()
const { width } = useViewport()
const isMobile = width ? width < breakpoints.sm : false
+ const { isAccountFull } = useMangoAccountAccounts()
const handleBorrowModal = () => {
if (mangoAccountAddress || !connected) {
@@ -64,11 +65,6 @@ const AccountActions = () => {
}
}
- const isAccountFull = useMemo(() => {
- if (!mangoAccountAddress) return true
- return getIsAccountSizeFull()
- }, [mangoAccountAddress])
-
return (
<>
{isUnownedAccount ? null : (
diff --git a/components/modals/MangoAccountSizeModal.tsx b/components/modals/MangoAccountSizeModal.tsx
index 02443633..40301a01 100644
--- a/components/modals/MangoAccountSizeModal.tsx
+++ b/components/modals/MangoAccountSizeModal.tsx
@@ -1,6 +1,6 @@
import mangoStore from '@store/mangoStore'
import useMangoAccount from 'hooks/useMangoAccount'
-import { ReactNode, useCallback, useEffect, useMemo, useState } from 'react'
+import { ReactNode, useCallback, useEffect, useState } from 'react'
import { useTranslation } from 'react-i18next'
import NumberFormat, {
NumberFormatValues,
@@ -15,11 +15,9 @@ import InlineNotification from '../shared/InlineNotification'
import Modal from '@components/shared/Modal'
import { ModalProps } from 'types/modal'
import Label from '@components/forms/Label'
-import {
+import useMangoAccountAccounts, {
getAvaialableAccountsColor,
- getTotalMangoAccountAccounts,
- getUsedMangoAccountAccounts,
-} from '@components/settings/AccountSettings'
+} from 'hooks/useMangoAccountAccounts'
const MIN_ACCOUNTS = 8
export const MAX_ACCOUNTS: AccountSizeForm = {
@@ -56,35 +54,16 @@ const MangoAccountSizeModal = ({ isOpen, onClose }: ModalProps) => {
useState(DEFAULT_FORM)
const [formErrors, setFormErrors] = useState()
const [submitting, setSubmitting] = useState(false)
-
- const [availableTokens, availableSerum3, availablePerps, availablePerpOo] =
- useMemo(() => {
- const [usedTokens, usedSerum3, usedPerps, usedPerpOo] =
- getUsedMangoAccountAccounts(mangoAccountAddress)
- const [totalTokens, totalSerum3, totalPerps, totalPerpOpenOrders] =
- getTotalMangoAccountAccounts(mangoAccountAddress)
- return [
- {`${usedTokens}/${totalTokens}`},
- {`${usedSerum3}/${totalSerum3}`},
- {`${usedPerps}/${totalPerps}`},
- {`${usedPerpOo}/${totalPerpOpenOrders}`},
- ]
- }, [mangoAccountAddress])
+ const {
+ usedTokens,
+ usedSerum3,
+ usedPerps,
+ usedPerpOo,
+ totalTokens,
+ totalSerum3,
+ totalPerps,
+ totalPerpOpenOrders,
+ } = useMangoAccountAccounts()
useEffect(() => {
if (mangoAccount) {
@@ -245,7 +224,14 @@ const MangoAccountSizeModal = ({ isOpen, onClose }: ModalProps) => {
{`${usedTokens.length}/${totalTokens.length}`}
+ }
disabled={
mangoAccount
? mangoAccount.tokens.length >=
@@ -265,7 +251,14 @@ const MangoAccountSizeModal = ({ isOpen, onClose }: ModalProps) => {
{`${usedSerum3.length}/${totalSerum3.length}`}
+ }
disabled
error={formErrors?.spotOpenOrders}
label={t('settings:spot-open-orders')}
@@ -280,7 +273,15 @@ const MangoAccountSizeModal = ({ isOpen, onClose }: ModalProps) => {
{`${usedPerps.length}/${totalPerps.length}`}
+ }
disabled
error={formErrors?.perpAccounts}
label={t('settings:perp-positions')}
@@ -295,7 +296,15 @@ const MangoAccountSizeModal = ({ isOpen, onClose }: ModalProps) => {
{`${usedPerpOo.length}/${totalPerpOpenOrders.length}`}
+ }
disabled={
mangoAccount
? mangoAccount.perpOpenOrders.length >=
diff --git a/components/settings/AccountSettings.tsx b/components/settings/AccountSettings.tsx
index c6f47155..44405273 100644
--- a/components/settings/AccountSettings.tsx
+++ b/components/settings/AccountSettings.tsx
@@ -2,119 +2,41 @@ import MangoAccountSizeModal, {
MAX_ACCOUNTS,
} from '@components/modals/MangoAccountSizeModal'
import { LinkButton } from '@components/shared/Button'
+import TokenLogo from '@components/shared/TokenLogo'
import Tooltip from '@components/shared/Tooltip'
+import MarketLogos from '@components/trade/MarketLogos'
+import { Disclosure } from '@headlessui/react'
import {
+ ChevronDownIcon,
ExclamationCircleIcon,
SquaresPlusIcon,
} from '@heroicons/react/20/solid'
-import mangoStore from '@store/mangoStore'
import useMangoAccount from 'hooks/useMangoAccount'
+import useMangoAccountAccounts, {
+ getAvaialableAccountsColor,
+} from 'hooks/useMangoAccountAccounts'
+import useMangoGroup from 'hooks/useMangoGroup'
import { useTranslation } from 'next-i18next'
-import { useMemo, useState } from 'react'
-
-// todo: use these functions to auto show model when an account is full
-export const getUsedMangoAccountAccounts = (
- mangoAccountAddress: string | undefined,
-) => {
- const mangoAccount = mangoStore.getState().mangoAccount.current
- if (!mangoAccountAddress || !mangoAccount) return [0, 0, 0, 0]
- const { tokens, serum3, perps, perpOpenOrders } = mangoAccount
- const usedTokens = tokens.filter((t) => t.inUseCount).length
- const usedSerum3 = serum3.filter((s) => s.marketIndex !== 65535).length
- const usedPerps = perps.filter((p) => p.marketIndex !== 65535).length
- const usedPerpOo = perpOpenOrders.filter(
- (p) => p.orderMarket !== 65535,
- ).length
- return [usedTokens, usedSerum3, usedPerps, usedPerpOo]
-}
-
-export const getTotalMangoAccountAccounts = (
- mangoAccountAddress: string | undefined,
-) => {
- const mangoAccount = mangoStore.getState().mangoAccount.current
- if (!mangoAccountAddress || !mangoAccount) return [0, 0, 0, 0]
- const { tokens, serum3, perps, perpOpenOrders } = mangoAccount
- const totalTokens = tokens.length
- const totalSerum3 = serum3.length
- const totalPerps = perps.length
- const totalPerpOpenOrders = perpOpenOrders.length
- return [totalTokens, totalSerum3, totalPerps, totalPerpOpenOrders]
-}
-
-export const getAvaialableAccountsColor = (used: number, total: number) => {
- const remaining = total - used
- return remaining >= 4
- ? 'text-th-up'
- : remaining >= 2
- ? 'text-th-warning'
- : 'text-th-down'
-}
-
-const isAccountSlotFull = (slots: number, max: string) => {
- const numberMax = Number(max)
- return slots >= numberMax
-}
-
-export const getIsAccountSizeFull = () => {
- const mangoAccount = mangoStore.getState().mangoAccount.current
- if (!mangoAccount) return true
- return (
- isAccountSlotFull(
- mangoAccount.tokens.length,
- MAX_ACCOUNTS.tokenAccounts!,
- ) &&
- isAccountSlotFull(
- mangoAccount.serum3.length,
- MAX_ACCOUNTS.spotOpenOrders!,
- ) &&
- isAccountSlotFull(mangoAccount.perps.length, MAX_ACCOUNTS.perpAccounts!) &&
- isAccountSlotFull(
- mangoAccount.perpOpenOrders.length,
- MAX_ACCOUNTS.perpOpenOrders!,
- )
- )
-}
+import { useState } from 'react'
const AccountSettings = () => {
const { t } = useTranslation(['common', 'settings'])
const { mangoAccountAddress } = useMangoAccount()
+ const { group } = useMangoGroup()
const [showAccountSizeModal, setShowAccountSizeModal] = useState(false)
+ const {
+ usedTokens,
+ usedSerum3,
+ usedPerps,
+ usedPerpOo,
+ totalTokens,
+ totalSerum3,
+ totalPerps,
+ totalPerpOpenOrders,
+ isAccountFull,
+ } = useMangoAccountAccounts()
- const [availableTokens, availableSerum3, availablePerps, availablePerpOo] =
- useMemo(() => {
- const [usedTokens, usedSerum3, usedPerps, usedPerpOo] =
- getUsedMangoAccountAccounts(mangoAccountAddress)
- const [totalTokens, totalSerum3, totalPerps, totalPerpOpenOrders] =
- getTotalMangoAccountAccounts(mangoAccountAddress)
- return [
- {`${usedTokens}/${totalTokens}`},
- {`${usedSerum3}/${totalSerum3}`},
- {`${usedPerps}/${totalPerps}`},
- {`${usedPerpOo}/${totalPerpOpenOrders}`},
- ]
- }, [mangoAccountAddress])
-
- const isAccountFull = useMemo(() => {
- if (!mangoAccountAddress) return true
- return getIsAccountSizeFull()
- }, [mangoAccountAddress])
-
- return (
+ return mangoAccountAddress && group ? (
<>
{t('account')}
@@ -135,40 +57,234 @@ const AccountSettings = () => {
)}
-
-
- {t('tokens')}
-
-
{availableTokens}
-
-
-
-
- {t('settings:spot-open-orders')}
-
-
-
{availableSerum3}
-
-
-
-
- {t('settings:perp-positions')}
-
-
-
{availablePerps}
-
+
+ {({ open }) => (
+ <>
+
+
+
+ {t('tokens')}
+
+
+
+ {`${usedTokens.length}/${totalTokens.length}`}
+
+
+
+
+
+
+ {usedTokens.length ? (
+ usedTokens.map((token, i) => {
+ const tokenBank = group.getFirstBankByTokenIndex(
+ token.tokenIndex,
+ )
+ return (
+
+
{i + 1}.
+
+
{tokenBank.name}
+
+ )
+ })
+ ) : (
+
+ {t('notifications:empty-state-title')}...
+
+ )}
+
+ >
+ )}
+
+
+ {({ open }) => (
+ <>
+
+
+
+
+ {t('settings:spot-open-orders')}
+
+
+
+
+ {`${usedSerum3.length}/${totalSerum3.length}`}
+
+
+
+
+
+
+ {usedSerum3.length ? (
+ usedSerum3.map((mkt, i) => {
+ const market = group.getSerum3MarketByMarketIndex(
+ mkt.marketIndex,
+ )
+ return (
+
+
{i + 1}.
+
+
{market.name}
+
+ )
+ })
+ ) : (
+
+ {t('notifications:empty-state-title')}...
+
+ )}
+
+ >
+ )}
+
+
+ {({ open }) => (
+ <>
+
+
+
+
+ {t('settings:perp-positions')}
+
+
+
+
+ {`${usedPerps.length}/${totalPerps.length}`}
+
+
+
+
+
+
+ {usedPerps.length ? (
+ usedPerps.map((perp, i) => {
+ const market = group.getPerpMarketByMarketIndex(
+ perp.marketIndex,
+ )
+ return (
+
+
{i + 1}.
+
+
{market.name}
+
+ )
+ })
+ ) : (
+
+ {t('notifications:empty-state-title')}...
+
+ )}
+
+ >
+ )}
+
+
+ {({ open }) => (
+ <>
+
+
+
+
+ {t('settings:perp-open-orders')}
+
+
+
+
+ {`${usedPerpOo.length}/${totalPerpOpenOrders.length}`}
+
+
+
+
+
+
+ {usedPerpOo.length ? (
+ usedPerpOo.map((perp, i) => {
+ const market = group.getPerpMarketByMarketIndex(
+ perp.orderMarket,
+ )
+ return (
+
+
{i + 1}.
+
+
{market.name}
+
+ )
+ })
+ ) : (
+
+ {t('notifications:empty-state-title')}...
+
+ )}
+
+ >
+ )}
+
+ {/*
+ */}
{showAccountSizeModal ? (
{
/>
) : null}
>
- )
+ ) : null
}
export default AccountSettings
diff --git a/hooks/useMangoAccountAccounts.ts b/hooks/useMangoAccountAccounts.ts
new file mode 100644
index 00000000..ff8f3e49
--- /dev/null
+++ b/hooks/useMangoAccountAccounts.ts
@@ -0,0 +1,108 @@
+import mangoStore from '@store/mangoStore'
+import { useMemo } from 'react'
+import useMangoAccount from './useMangoAccount'
+import { MAX_ACCOUNTS } from '@components/modals/MangoAccountSizeModal'
+import {
+ PerpOo,
+ PerpPosition,
+ Serum3Orders,
+ TokenPosition,
+} from '@blockworks-foundation/mango-v4'
+
+export const getAvaialableAccountsColor = (used: number, total: number) => {
+ const remaining = total - used
+ return remaining >= 4
+ ? 'text-th-up'
+ : remaining >= 2
+ ? 'text-th-warning'
+ : 'text-th-down'
+}
+
+const isAccountSlotFull = (slots: number, max: string) => {
+ const numberMax = Number(max)
+ return slots >= numberMax
+}
+
+const getIsAccountSizeFull = () => {
+ const mangoAccount = mangoStore.getState().mangoAccount.current
+ if (!mangoAccount) return true
+ return (
+ isAccountSlotFull(
+ mangoAccount.tokens.length,
+ MAX_ACCOUNTS.tokenAccounts!,
+ ) &&
+ isAccountSlotFull(
+ mangoAccount.serum3.length,
+ MAX_ACCOUNTS.spotOpenOrders!,
+ ) &&
+ isAccountSlotFull(mangoAccount.perps.length, MAX_ACCOUNTS.perpAccounts!) &&
+ isAccountSlotFull(
+ mangoAccount.perpOpenOrders.length,
+ MAX_ACCOUNTS.perpOpenOrders!,
+ )
+ )
+}
+
+export default function useMangoAccountAccounts() {
+ const { mangoAccountAddress } = useMangoAccount()
+
+ const [usedTokens, usedSerum3, usedPerps, usedPerpOo] = useMemo(() => {
+ const mangoAccount = mangoStore.getState().mangoAccount.current
+ if (!mangoAccountAddress || !mangoAccount) return [[], [], [], []]
+ const { tokens, serum3, perps, perpOpenOrders } = mangoAccount
+ const usedTokens: TokenPosition[] = tokens.filter((t) => t.inUseCount)
+ const usedSerum3: Serum3Orders[] = serum3.filter(
+ (s) => s.marketIndex !== 65535,
+ )
+ const usedPerps: PerpPosition[] = perps.filter(
+ (p) => p.marketIndex !== 65535,
+ )
+ const usedPerpOo: PerpOo[] = perpOpenOrders.filter(
+ (p) => p.orderMarket !== 65535,
+ )
+ return [usedTokens, usedSerum3, usedPerps, usedPerpOo]
+ }, [mangoAccountAddress])
+
+ const [totalTokens, totalSerum3, totalPerps, totalPerpOpenOrders] =
+ useMemo(() => {
+ const mangoAccount = mangoStore.getState().mangoAccount.current
+ if (!mangoAccountAddress || !mangoAccount) return [[], [], [], []]
+ const { tokens, serum3, perps, perpOpenOrders } = mangoAccount
+ const totalTokens = tokens
+ const totalSerum3 = serum3
+ const totalPerps = perps
+ const totalPerpOpenOrders = perpOpenOrders
+ return [totalTokens, totalSerum3, totalPerps, totalPerpOpenOrders]
+ }, [mangoAccountAddress])
+
+ // const [availableTokens, availableSerum3, availablePerps, availablePerpOo] =
+ // useMemo(() => {
+ // const [usedTokens, usedSerum3, usedPerps, usedPerpOo] =
+ // getUsedMangoAccountAccounts(mangoAccountAddress)
+ // const [totalTokens, totalSerum3, totalPerps, totalPerpOpenOrders] =
+ // getTotalMangoAccountAccounts(mangoAccountAddress)
+ // return [
+ // `${usedTokens}/${totalTokens}`,
+ // `${usedSerum3}/${totalSerum3}`,
+ // `${usedPerps}/${totalPerps}`,
+ // `${usedPerpOo}/${totalPerpOpenOrders}`,
+ // ]
+ // }, [mangoAccountAddress])
+
+ const isAccountFull = useMemo(() => {
+ if (!mangoAccountAddress) return true
+ return getIsAccountSizeFull()
+ }, [mangoAccountAddress])
+
+ return {
+ usedTokens,
+ usedSerum3,
+ usedPerps,
+ usedPerpOo,
+ totalTokens,
+ totalSerum3,
+ totalPerps,
+ totalPerpOpenOrders,
+ isAccountFull,
+ }
+}
diff --git a/yarn.lock b/yarn.lock
index 71f82988..f62a05d3 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -12,14 +12,7 @@
resolved "https://registry.yarnpkg.com/@apocentre/alias-sampling/-/alias-sampling-0.5.3.tgz#897ff181b48ad7b2bcb4ecf29400214888244f08"
integrity sha512-7UDWIIF9hIeJqfKXkNIzkVandlwLf1FWTSdrb9iXvOP8oF544JRXQjCbiTmCv2c9n44n/FIWtehhBfNuAx2CZA==
-"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.5", "@babel/runtime@^7.17.2", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.7", "@babel/runtime@^7.22.5", "@babel/runtime@^7.22.6":
- version "7.22.6"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.6.tgz#57d64b9ae3cff1d67eb067ae117dac087f5bd438"
- integrity sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==
- dependencies:
- regenerator-runtime "^0.13.11"
-
-"@babel/runtime@^7.21.0":
+"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.5", "@babel/runtime@^7.17.2", "@babel/runtime@^7.20.13", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.22.6":
version "7.22.10"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.10.tgz#ae3e9631fd947cb7e3610d3e9d8fef5f76696682"
integrity sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==
@@ -1009,31 +1002,24 @@
jsbi "^3.1.5"
sha.js "^2.4.11"
-"@noble/curves@1.1.0", "@noble/curves@^1.1.0", "@noble/curves@~1.1.0":
+"@noble/curves@1.1.0", "@noble/curves@^1.0.0", "@noble/curves@^1.1.0", "@noble/curves@~1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.1.0.tgz#f13fc667c89184bc04cccb9b11e8e7bae27d8c3d"
integrity sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==
dependencies:
"@noble/hashes" "1.3.1"
-"@noble/curves@^1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.0.0.tgz#e40be8c7daf088aaf291887cbc73f43464a92932"
- integrity sha512-2upgEu0iLiDVDZkNLeFV2+ht0BAVgQnEmCk6JsOch9Rp8xfkMCbvbAZlA2pBHQc73dbl+vFOXfqkf4uemdn0bw==
- dependencies:
- "@noble/hashes" "1.3.0"
-
"@noble/ed25519@^1.6.1", "@noble/ed25519@^1.7.1":
version "1.7.3"
resolved "https://registry.yarnpkg.com/@noble/ed25519/-/ed25519-1.7.3.tgz#57e1677bf6885354b466c38e2b620c62f45a7123"
integrity sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==
-"@noble/hashes@1.3.0", "@noble/hashes@^1.1.3", "@noble/hashes@^1.3.0":
+"@noble/hashes@1.3.0":
version "1.3.0"
resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.0.tgz#085fd70f6d7d9d109671090ccae1d3bec62554a1"
integrity sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==
-"@noble/hashes@1.3.1", "@noble/hashes@~1.3.0", "@noble/hashes@~1.3.1":
+"@noble/hashes@1.3.1", "@noble/hashes@^1.1.3", "@noble/hashes@^1.3.0", "@noble/hashes@~1.3.0", "@noble/hashes@~1.3.1":
version "1.3.1"
resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9"
integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==
@@ -1578,7 +1564,7 @@
dependencies:
"@solana/wallet-adapter-base" "^0.9.23"
-"@solana/wallet-adapter-base@0.9.23", "@solana/wallet-adapter-base@^0.9.22", "@solana/wallet-adapter-base@^0.9.23":
+"@solana/wallet-adapter-base@0.9.23", "@solana/wallet-adapter-base@^0.9.17", "@solana/wallet-adapter-base@^0.9.2", "@solana/wallet-adapter-base@^0.9.22", "@solana/wallet-adapter-base@^0.9.23":
version "0.9.23"
resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-base/-/wallet-adapter-base-0.9.23.tgz#3b17c28afd44e173f44f658bf9700fd637e12a11"
integrity sha512-apqMuYwFp1jFi55NxDfvXUX2x1T0Zh07MxhZ/nCCTGys5raSfYUh82zen2BLv8BSDj/JxZ2P/s7jrQZGrX8uAw==
@@ -1588,16 +1574,6 @@
"@wallet-standard/features" "^1.0.3"
eventemitter3 "^4.0.7"
-"@solana/wallet-adapter-base@^0.9.17", "@solana/wallet-adapter-base@^0.9.2":
- version "0.9.22"
- resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-base/-/wallet-adapter-base-0.9.22.tgz#97812eaf6aebe01e5fe714326b3c9a0614ae6112"
- integrity sha512-xbLEZPGSJFvgTeldG9D55evhl7QK/3e/F7vhvcA97mEt1eieTgeKMnGlmmjs3yivI3/gtZNZeSk1XZLnhKcQvw==
- dependencies:
- "@solana/wallet-standard-features" "^1.0.1"
- "@wallet-standard/base" "^1.0.1"
- "@wallet-standard/features" "^1.0.3"
- eventemitter3 "^4.0.7"
-
"@solana/wallet-adapter-bitkeep@^0.3.19":
version "0.3.19"
resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-bitkeep/-/wallet-adapter-bitkeep-0.3.19.tgz#7d6a467fae791c5486b325473ed6b494958e3b5e"
@@ -1983,15 +1959,7 @@
dependencies:
"@wallet-standard/base" "^1.0.1"
-"@solana/wallet-standard-features@^1.0.1":
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/@solana/wallet-standard-features/-/wallet-standard-features-1.0.1.tgz#36270a646f74a80e51b9e21fb360edb64f840c68"
- integrity sha512-SUfx7KtBJ55XIj0qAhhVcC1I6MklAXqWFEz9hDHW+6YcJIyvfix/EilBhaBik1FJ2JT0zukpOfFv8zpuAbFRbw==
- dependencies:
- "@wallet-standard/base" "^1.0.1"
- "@wallet-standard/features" "^1.0.3"
-
-"@solana/wallet-standard-features@^1.1.0":
+"@solana/wallet-standard-features@^1.0.1", "@solana/wallet-standard-features@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@solana/wallet-standard-features/-/wallet-standard-features-1.1.0.tgz#516d78626dd0802d299db49298e4ebbec3433940"
integrity sha512-oVyygxfYkkF5INYL0GuD8GFmNO/wd45zNesIqGCFE6X66BYxmI6HmyzQJCcZTZ0BNsezlVg4t+3MCL5AhfFoGA==
@@ -7822,14 +7790,7 @@ semver@^6.3.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
-semver@^7.3.2, semver@^7.3.5, semver@^7.3.7:
- version "7.3.8"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798"
- integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==
- dependencies:
- lru-cache "^6.0.0"
-
-semver@^7.3.8:
+semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8:
version "7.5.4"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==