@@ -33,18 +33,27 @@ const router = useRouter()
3333
3434const header = useTemplateRef (' header' )
3535const isHeaderPinned = shallowRef (false )
36+ const readmeHeader = useTemplateRef (' readmeHeader' )
37+ const isReadmeHeaderPinned = shallowRef (false )
3638const navExtraOffset = shallowRef (0 )
3739const isMobile = useMediaQuery (' (max-width: 639.9px)' )
3840
39- function checkHeaderPosition() {
40- const el = header .value
41- if (! el ) return
41+ const headerBounds = useElementBounding (header )
42+ const readmeStickyTop = computed (() => ` ${56 + headerBounds .height .value }px ` )
43+
44+ function isStickyPinned(el : HTMLElement | null ): boolean {
45+ if (! el ) return false
4246
4347 const style = getComputedStyle (el )
4448 const top = parseFloat (style .top ) || 0
4549 const rect = el .getBoundingClientRect ()
4650
47- isHeaderPinned .value = Math .abs (rect .top - top ) < 1
51+ return Math .abs (rect .top - top ) < 1
52+ }
53+
54+ function checkHeaderPosition() {
55+ isHeaderPinned .value = isStickyPinned (header .value )
56+ isReadmeHeaderPinned .value = isStickyPinned (readmeHeader .value )
4857}
4958
5059useEventListener (' scroll' , checkHeaderPosition , { passive: true })
@@ -1394,7 +1403,12 @@ const showSkeleton = shallowRef(false)
13941403
13951404 <!-- README -->
13961405 <section id =" readme" class =" min-w-0 scroll-mt-20" :class =" $style.areaReadme" >
1397- <div class =" flex flex-wrap items-center justify-between mb-3 px-1" >
1406+ <div
1407+ ref =" readmeHeader"
1408+ class =" flex sticky z-10 flex-wrap items-center justify-between mb-3 py-2 -mx-1 px-2 transition-shadow duration-200"
1409+ :class =" { 'bg-bg border-border border-b': isReadmeHeaderPinned }"
1410+ :style =" { top: readmeStickyTop }"
1411+ >
13981412 <h2 id =" readme-heading" class =" group text-xs text-fg-subtle uppercase tracking-wider" >
13991413 <LinkBase to =" #readme" >
14001414 {{ $t('package.readme.title') }}
0 commit comments