fix(home): keep nav static and shift hero input
All checks were successful
Build Docker Image / build (push) Successful in 5m3s

This commit is contained in:
Ruslan Bakiev
2026-02-07 09:30:27 +07:00
parent 755a92d194
commit 34fc1bfab6
2 changed files with 45 additions and 6 deletions

View File

@@ -4,9 +4,13 @@
:class="headerClasses" :class="headerClasses"
:style="{ height: `${height}px` }" :style="{ height: `${height}px` }"
> >
<div class="absolute inset-0 pointer-events-none glass-topfade" /> <div class="absolute top-0 left-0 right-0 pointer-events-none glass-topfade" :style="glassStyle" />
<!-- Single row: Logo + Search + Icons --> <!-- Single row: Logo + Search + Icons -->
<div class="relative z-10 flex items-center h-full px-4 lg:px-6 gap-4"> <div
class="relative z-10 flex px-4 lg:px-6 gap-4"
:class="isHeroLayout ? 'items-start pt-4' : 'items-center'"
:style="rowStyle"
>
<!-- Left: Logo + Nav links (top aligned) --> <!-- Left: Logo + Nav links (top aligned) -->
<div class="flex items-center flex-shrink-0 rounded-full glass-bright"> <div class="flex items-center flex-shrink-0 rounded-full glass-bright">
<div class="flex items-center gap-2 px-4 py-2"> <div class="flex items-center gap-2 px-4 py-2">
@@ -83,7 +87,11 @@
</div> </div>
<!-- Center: Search input OR Client Area tabs (vertically centered) --> <!-- Center: Search input OR Client Area tabs (vertically centered) -->
<div class="flex-1 flex flex-col items-center max-w-2xl mx-auto gap-2 justify-center"> <div
class="flex-1 flex flex-col items-center max-w-2xl mx-auto gap-2 transition-all"
:class="isHeroLayout ? 'justify-start' : 'justify-center'"
:style="centerStyle"
>
<!-- Hero slot for home page title --> <!-- Hero slot for home page title -->
<slot name="hero" /> <slot name="hero" />
@@ -407,8 +415,11 @@ const props = withDefaults(defineProps<{
isClientArea?: boolean isClientArea?: boolean
// Dynamic height for hero effect // Dynamic height for hero effect
height?: number height?: number
// Collapse progress for hero layout
collapseProgress?: number
}>(), { }>(), {
height: 100 height: 100,
collapseProgress: 1
}) })
defineEmits([ defineEmits([
@@ -493,10 +504,37 @@ const getTokenIcon = (type: string) => {
return icons[type] || 'lucide:tag' return icons[type] || 'lucide:tag'
} }
const isHeroLayout = computed(() => props.isHomePage && !props.isClientArea)
const topRowHeight = 100
const rowStyle = computed(() => {
if (isHeroLayout.value) {
return { height: `${topRowHeight}px` }
}
return { height: `${props.height}px` }
})
const glassStyle = computed(() => {
if (isHeroLayout.value) {
return { height: `${topRowHeight}px` }
}
return { height: '100%' }
})
const centerStyle = computed(() => {
if (!isHeroLayout.value) return {}
const heroHeight = props.height || topRowHeight
const minTop = 0
const maxTop = Math.max(120, Math.round(heroHeight * 0.42))
const progress = Math.min(1, Math.max(0, props.collapseProgress || 0))
const top = Math.round(maxTop - (maxTop - minTop) * progress)
return { marginTop: `${top}px` }
})
// Header background classes // Header background classes
const headerClasses = computed(() => { const headerClasses = computed(() => {
if (props.isHomePage) { if (props.isHomePage && !props.isCollapsed) {
return 'bg-transparent backdrop-blur-xl' return 'bg-transparent'
} }
if (props.isCollapsed) { if (props.isCollapsed) {
return 'bg-transparent backdrop-blur-xl' return 'bg-transparent backdrop-blur-xl'

View File

@@ -9,6 +9,7 @@
<MainNavigation <MainNavigation
class="relative z-10" class="relative z-10"
:height="isHomePage ? heroHeight : 100" :height="isHomePage ? heroHeight : 100"
:collapse-progress="isHomePage ? collapseProgress : 1"
:session-checked="sessionChecked" :session-checked="sessionChecked"
:logged-in="isLoggedIn" :logged-in="isLoggedIn"
:user-avatar-svg="userAvatarSvg" :user-avatar-svg="userAvatarSvg"