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 }}
+
+
+ {{ marketProductName || '-' }}
+
+
+
-
-
-
-
+
+
+ -
-
+
+
-
-
- {{ marketProductName }}
-
-
- {{ marketProductName || '-' }}
-
-
-
-
-
+
+
+
+
+
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
- {{ formatMarketAvailability(borrowCount) }}
-
-
-
-
-
-
-
-
-
- {{ formatMarketAvailability(collateralCount) }}
-
+
+ {{ formatMarketAvailability(borrowCount) }}
+
+
+
+
+
-
+
+ {{ formatMarketAvailability(collateralCount) }}
+
+
+
+
-
-
- Statistics
-
-
-
-
-
- Supply APY
-
-
-
-
-
- {{ formatNumber(supplyApyWithRewards) }}%
-
-
-
-
+
+
+
+ Supply APY
+
+
+
+
+
+ {{ formatNumber(supplyApyWithRewards) }}%
+
+
+
-
-
- Risk parameters
-
-
-
-
-
- {{ supplyCapDisplay }}
-
- ({{ compactNumber(supplyCapPercentageDisplay, 2) }}%)
-
+
+
+
+ {{ supplyCapDisplay }}
+
+ ({{ compactNumber(supplyCapPercentageDisplay, 2) }}%)
-
-
-
-
-
- {{ formatNumber(nanoToValue(shareTokenExchangeRate, vault.asset.decimals), 6, 2) }}
-
-
- -
-
-
-
-
+
+
+
+
+
+
+ {{ formatNumber(nanoToValue(shareTokenExchangeRate, vault.asset.decimals), 6, 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) => {
-
-
- Overview
-
+
{
{{ priceInvert.displaySymbol }}
{
-
+
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))
>
emits('vault-click', 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 @@
+
+
+
+
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+
+
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
-
-
- Addresses
-
-
-
+
+
-
+ Unit of account
+
+
+
+
+
-
- Unit of account
-
-
-
-
-
- {{ getSpecialAddressLabel(infoItem.address) || shortenAddress(infoItem.address) }}
-
-
-
-
-
-
-
-
+ {{ getSpecialAddressLabel(infoItem.address) || shortenAddress(infoItem.address) }}
+
+
+
+
+
+
+
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(() =>
-
-
- Collateral exposure
-
Deposits in this vault can be borrowed.
Please make sure you're comfortable accepting the collaterals
@@ -121,5 +120,5 @@ 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 => {