From e8196cf6a681c40e60ffb4689d19d3510e58a42d Mon Sep 17 00:00:00 2001 From: Seranged <80223622+Seranged@users.noreply.github.com> Date: Wed, 24 Jun 2026 12:45:14 +0100 Subject: [PATCH 1/5] feat: add vault overview accordions Wrap vault overview sections in reusable accordion cards with configurable default open states across standard, pair, and Securitize views. --- .../overview/SecuritizeVaultOverview.vue | 502 +++++++++-------- .../overview/SecuritizeVaultOverviewPair.vue | 6 +- ...ecuritizeVaultOverviewPairBlockGeneral.vue | 15 +- .../entities/vault/overview/VaultOverview.vue | 7 + .../VaultOverviewAccordionSection.vue | 60 +++ .../overview/VaultOverviewBlockAddresses.vue | 87 ++- .../overview/VaultOverviewBlockBorrow.vue | 13 +- .../VaultOverviewBlockCyclicalIRM.vue | 17 +- .../overview/VaultOverviewBlockGeneral.vue | 271 +++++----- .../vault/overview/VaultOverviewBlockIRM.vue | 18 +- .../VaultOverviewBlockOracleAdapters.vue | 12 +- .../VaultOverviewBlockRiskParameters.vue | 213 ++++---- .../overview/VaultOverviewBlockStats.vue | 185 ++++--- .../vault/overview/VaultOverviewPair.vue | 3 + .../VaultOverviewPairBlockGeneral.vue | 503 +++++++++--------- .../overview/VaultOverviewPairBlockTypes.vue | 13 +- 16 files changed, 989 insertions(+), 936 deletions(-) create mode 100644 components/entities/vault/overview/VaultOverviewAccordionSection.vue diff --git a/components/entities/vault/overview/SecuritizeVaultOverview.vue b/components/entities/vault/overview/SecuritizeVaultOverview.vue index 9cb1cd6e..4a8f4e1b 100644 --- a/components/entities/vault/overview/SecuritizeVaultOverview.vue +++ b/components/entities/vault/overview/SecuritizeVaultOverview.vue @@ -151,283 +151,271 @@ const supplyCapPercentageDisplay = computed(() => { :class="[desktopOverview ? 'gap-16' : 'gap-12']" > -
-

- Overview -

-
- +
+
+ +

+ This vault is not available in your region. +

+
+
+
+ +
+ + + + {{ marketProductName }} + + + +
-
- + -

- This vault is not available in your region. -

+ {{ entity.name }}
-
- -
+ -
- + + - - - {{ marketProductName }} - - - - -
- + + +
+
+
- -
- - -
- - - - - -
-
- -
- - {{ formatMarketAvailability(borrowCount) }} - -
-
- -
-
- -
- - {{ formatMarketAvailability(collateralCount) }} - + + {{ formatMarketAvailability(borrowCount) }} + +
+
+ +
+
+
- -
-
+ + {{ formatMarketAvailability(collateralCount) }} + +
+
+ -
-

- Statistics -

-
- - - - - - - - {{ formatNumber(supplyApyWithRewards) }}% - - -
-
+ + + + + + + + {{ formatNumber(supplyApyWithRewards) }}% + + + -
-

- Risk parameters -

-
- -
- - {{ supplyCapDisplay }} - - ({{ compactNumber(supplyCapPercentageDisplay, 2) }}%) - + +
+ + {{ supplyCapDisplay }} + + ({{ compactNumber(supplyCapPercentageDisplay, 2) }}%) - -
-
- - - - -
-
+ + +
+
+ + + + + -
-

- Addresses -

-
- -
- - {{ getSpecialAddressLabel(vault.asset.address) || shortenAddress(vault.asset.address) }} - - -
-
- -
- - {{ getSpecialAddressLabel(vault.address) || shortenAddress(vault.address) }} - - -
-
- -
- - {{ getSpecialAddressLabel(vault.governor) || shortenAddress(vault.governor) }} - - -
-
-
-
+ +
+ + {{ getSpecialAddressLabel(vault.asset.address) || shortenAddress(vault.asset.address) }} + + +
+
+ +
+ + {{ getSpecialAddressLabel(vault.address) || shortenAddress(vault.address) }} + + +
+
+ +
+ + {{ getSpecialAddressLabel(vault.governor) || shortenAddress(vault.governor) }} + + +
+
+
diff --git a/components/entities/vault/overview/SecuritizeVaultOverviewPair.vue b/components/entities/vault/overview/SecuritizeVaultOverviewPair.vue index 7b683a2e..b2132826 100644 --- a/components/entities/vault/overview/SecuritizeVaultOverviewPair.vue +++ b/components/entities/vault/overview/SecuritizeVaultOverviewPair.vue @@ -8,17 +8,17 @@ defineProps<{ pair: SecuritizeBorrowVaultPair, desktopOverview?: boolean }>() diff --git a/components/entities/vault/overview/SecuritizeVaultOverviewPairBlockGeneral.vue b/components/entities/vault/overview/SecuritizeVaultOverviewPairBlockGeneral.vue index a7c4fa28..68379845 100644 --- a/components/entities/vault/overview/SecuritizeVaultOverviewPairBlockGeneral.vue +++ b/components/entities/vault/overview/SecuritizeVaultOverviewPairBlockGeneral.vue @@ -9,7 +9,7 @@ import type { EVaultCollateral } from '@eulerxyz/euler-v2-sdk' import { formatNumber, formatSignificant } from '~/utils/string-utils' import { areTokenAddressesCorrelatedByTags } from '~/utils/token-categories' -const { pair } = defineProps<{ pair: SecuritizeBorrowVaultPair }>() +const { pair, defaultOpen = true } = defineProps<{ pair: SecuritizeBorrowVaultPair, defaultOpen?: boolean }>() const { getTokenCategoryTags } = useTokenList() const currentLiquidationLTV = computed(() => pair.ltv.currentLiquidationLTV) @@ -98,10 +98,11 @@ const onRampDownInfoIconClick = (event: MouseEvent, pair: EVaultCollateral) => { diff --git a/components/entities/vault/overview/VaultOverview.vue b/components/entities/vault/overview/VaultOverview.vue index f5febdec..c1af975d 100644 --- a/components/entities/vault/overview/VaultOverview.vue +++ b/components/entities/vault/overview/VaultOverview.vue @@ -17,32 +17,39 @@ const isCyclicalIRM = computed(() => isVaultCyclicalNote(vault.address)) >
diff --git a/components/entities/vault/overview/VaultOverviewAccordionSection.vue b/components/entities/vault/overview/VaultOverviewAccordionSection.vue new file mode 100644 index 00000000..e8fa1dc9 --- /dev/null +++ b/components/entities/vault/overview/VaultOverviewAccordionSection.vue @@ -0,0 +1,60 @@ + + + diff --git a/components/entities/vault/overview/VaultOverviewBlockAddresses.vue b/components/entities/vault/overview/VaultOverviewBlockAddresses.vue index 3c0c8c2b..cf5a9ba3 100644 --- a/components/entities/vault/overview/VaultOverviewBlockAddresses.vue +++ b/components/entities/vault/overview/VaultOverviewBlockAddresses.vue @@ -5,7 +5,7 @@ import { getSpecialAddressLabel } from '~/utils/special-addresses' import { getVaultHookTarget } from '~/utils/vault-hooks' import { isVaultBorrowable } from '~/utils/vault/classification' -const { vault } = defineProps<{ vault: EVault }>() +const { vault, defaultOpen = true } = defineProps<{ vault: EVault, defaultOpen?: boolean }>() const { chainId } = useEulerAddresses() @@ -88,49 +88,48 @@ const getExplorerAddressLink = (address: string) => getExplorerLink(address, cha diff --git a/components/entities/vault/overview/VaultOverviewBlockBorrow.vue b/components/entities/vault/overview/VaultOverviewBlockBorrow.vue index 8f5357a7..38ae38cc 100644 --- a/components/entities/vault/overview/VaultOverviewBlockBorrow.vue +++ b/components/entities/vault/overview/VaultOverviewBlockBorrow.vue @@ -9,7 +9,7 @@ import { formatNumber } from '~/utils/string-utils' const emits = defineEmits<{ 'vault-click': [address: string] }>() -const { vault } = defineProps<{ vault: EVault }>() +const { vault, defaultOpen = true } = defineProps<{ vault: EVault, defaultOpen?: boolean }>() const { get: registryGet } = useVaultRegistry() const onCollateralClick = (address: string) => { @@ -48,14 +48,13 @@ const allCollateralPairs = computed(() => diff --git a/components/entities/vault/overview/VaultOverviewBlockCyclicalIRM.vue b/components/entities/vault/overview/VaultOverviewBlockCyclicalIRM.vue index 33b63672..de7c87ae 100644 --- a/components/entities/vault/overview/VaultOverviewBlockCyclicalIRM.vue +++ b/components/entities/vault/overview/VaultOverviewBlockCyclicalIRM.vue @@ -10,7 +10,7 @@ import { useVaultRegistry } from '~/composables/useVaultRegistry' import { zeroAddress, formatUnits } from 'viem' import { INTEREST_RATE_MODEL_TYPE, SECONDS_IN_YEAR } from '~/entities/constants' -const { vault } = defineProps<{ vault: EVault }>() +const { vault, defaultOpen = true } = defineProps<{ vault: EVault, defaultOpen?: boolean }>() const { get: registryGet } = useVaultRegistry() @@ -282,16 +282,15 @@ const formatDuration = (seconds: bigint): string => {