Skip to content

Commit e1ce416

Browse files
committed
fix(mobile-nav): partial bottom sheet with backdrop, fix scroll overflow
1 parent c9de3e1 commit e1ce416

3 files changed

Lines changed: 24 additions & 7 deletions

File tree

app/components/Header/MobileMenuDocsView.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ const docsLinks = [{ label: 'Docs home', href: NPMX_DOCS_SITE, external: true }]
1010
</script>
1111

1212
<template>
13-
<div class="flex-1 flex flex-col">
14-
<div class="flex-1 overflow-y-auto overscroll-contain py-2">
13+
<div class="flex-1 min-h-0 flex flex-col">
14+
<div class="flex-1 min-h-0 overflow-y-auto overscroll-contain py-2">
1515
<div class="px-2 py-2">
1616
<span class="px-3 py-2 block font-mono text-xs text-fg-subtle uppercase tracking-wider">
1717
{{ $t('nav.docs_label') }}

app/components/Header/MobileMenuRootView.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ const { user: atprotoUser } = useAtproto()
1818
</script>
1919

2020
<template>
21-
<div class="flex-1 overflow-y-auto overscroll-contain py-2">
21+
<div class="flex-1 min-h-0 overflow-y-auto overscroll-contain py-2">
2222
<!-- Account section -->
2323
<div class="px-2 py-2">
2424
<span class="px-3 py-2 block font-mono text-xs text-fg-subtle uppercase tracking-wider">

app/components/Header/MobileMenuSheet.client.vue

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,23 @@ onUnmounted(deactivate)
5252

5353
<template>
5454
<Teleport to="body">
55+
<!-- Backdrop: fades in/out, sits below the sheet and above page content -->
56+
<Transition
57+
enter-active-class="transition-opacity duration-200 motion-reduce:transition-none"
58+
leave-active-class="transition-opacity duration-150 motion-reduce:transition-none"
59+
enter-from-class="opacity-0"
60+
leave-to-class="opacity-0"
61+
>
62+
<button
63+
v-if="isOpen"
64+
type="button"
65+
class="sm:hidden fixed inset-0 z-40 bg-black/50 cursor-default"
66+
:aria-label="$t('common.close')"
67+
@click="close"
68+
/>
69+
</Transition>
70+
71+
<!-- Sheet: anchored to the bottom bar, max 70% viewport height -->
5572
<Transition
5673
enter-active-class="transition-transform duration-200 ease-out motion-reduce:transition-none"
5774
leave-active-class="transition-transform duration-200 ease-in motion-reduce:transition-none"
@@ -65,13 +82,13 @@ onUnmounted(deactivate)
6582
role="dialog"
6683
aria-modal="true"
6784
:aria-label="$t('nav.mobile_menu')"
68-
class="sm:hidden fixed inset-0 z-50 bg-bg flex flex-col overflow-hidden pb-[var(--mobile-bar-height,3.5rem)]"
85+
class="sm:hidden fixed inset-x-0 bottom-[var(--mobile-bar-height,3.5rem)] z-50 bg-bg border-t border-border flex flex-col overflow-hidden max-h-[70dvh] rounded-t-lg shadow-xl"
6986
>
7087
<div
71-
class="flex-1 flex w-[200%] transition-transform duration-200 motion-reduce:transition-none"
88+
class="flex-1 min-h-0 flex w-[200%] transition-transform duration-200 motion-reduce:transition-none"
7289
:style="{ transform: activeView === 'docs' ? 'translateX(-50%)' : 'translateX(0)' }"
7390
>
74-
<div class="w-1/2 flex flex-col">
91+
<div class="w-1/2 min-h-0 flex flex-col">
7592
<HeaderMobileMenuRootView
7693
:links="links"
7794
@close="close"
@@ -81,7 +98,7 @@ onUnmounted(deactivate)
8198
@show-auth="handleShowAuth"
8299
/>
83100
</div>
84-
<div class="w-1/2 flex flex-col">
101+
<div class="w-1/2 min-h-0 flex flex-col">
85102
<HeaderMobileMenuDocsView @back="back" @close="close" />
86103
</div>
87104
</div>

0 commit comments

Comments
 (0)