@@ -7,19 +7,23 @@ import { Badge } from "@/components/ui/badge"
77import { Button } from "@/components/ui/button"
88import { Card , CardContent , CardDescription , CardHeader , CardTitle } from "@/components/ui/card"
99import publicationsData from "@/data/publications.json"
10+ import { useHeaderOffset } from "@/lib/hooks/useHeaderOffset"
1011
1112export default function PublicationsPage ( ) {
1213 const [ selectedYear , setSelectedYear ] = useState < number | null > ( null )
1314 const [ selectedType , setSelectedType ] = useState < string | null > ( null )
1415 const filterRef = useRef < HTMLElement | null > ( null )
1516 const [ yearStickyOffset , setYearStickyOffset ] = useState < number | null > ( null )
17+ const headerOffset = useHeaderOffset ( )
1618
1719 useEffect ( ( ) => {
20+ if ( headerOffset === null ) {
21+ return
22+ }
23+
1824 const updateOffset = ( ) => {
19- const header = document . querySelector < HTMLElement > ( "header" )
20- const headerHeight = header ?. getBoundingClientRect ( ) . height ?? 0
2125 const filterHeight = filterRef . current ?. getBoundingClientRect ( ) . height ?? 0
22- const combinedHeight = headerHeight + filterHeight
26+ const combinedHeight = headerOffset + filterHeight
2327
2428 setYearStickyOffset ( prev => {
2529 if ( prev !== null && Math . abs ( prev - combinedHeight ) < 0.5 ) {
@@ -35,10 +39,6 @@ export default function PublicationsPage() {
3539 let resizeObserver : ResizeObserver | null = null
3640 if ( typeof ResizeObserver !== "undefined" ) {
3741 resizeObserver = new ResizeObserver ( updateOffset )
38- const header = document . querySelector < HTMLElement > ( "header" )
39- if ( header ) {
40- resizeObserver . observe ( header )
41- }
4242 if ( filterRef . current ) {
4343 resizeObserver . observe ( filterRef . current )
4444 }
@@ -48,7 +48,7 @@ export default function PublicationsPage() {
4848 window . removeEventListener ( "resize" , updateOffset )
4949 resizeObserver ?. disconnect ( )
5050 }
51- } , [ ] )
51+ } , [ headerOffset ] )
5252
5353 const years = Array . from ( new Set ( publicationsData . map ( p => p . year ) ) ) . sort ( ( a , b ) => b - a )
5454 const types = Array . from ( new Set ( publicationsData . map ( p => p . type ) ) )
@@ -68,7 +68,7 @@ export default function PublicationsPage() {
6868 return (
6969 < div className = "flex flex-col" >
7070 { /* Header */ }
71- < section className = "bg-muted/30 py-24 " >
71+ < section className = "bg-muted/30 pb-12 pt-24 lg:pb-16 " >
7272 < div className = "section-container" >
7373 < div className = "mx-auto max-w-2xl text-center" >
7474 < h1 className = "text-4xl font-bold tracking-tight sm:text-5xl" >
@@ -93,7 +93,8 @@ export default function PublicationsPage() {
9393 { /* Filters */ }
9494 < section
9595 ref = { filterRef }
96- className = "sticky top-16 z-10 border-b bg-background py-8"
96+ className = "sticky top-16 z-10 border-b bg-background py-6 sm:py-8"
97+ style = { headerOffset !== null ? { top : headerOffset } : undefined }
9798 >
9899 < div className = "section-container" >
99100 < div className = "flex flex-col gap-4" >
@@ -158,7 +159,7 @@ export default function PublicationsPage() {
158159 < div key = { year } className = "mb-16" >
159160 < h2
160161 className = "sticky top-32 mb-8 bg-background py-4 text-3xl font-bold"
161- style = { yearStickyOffset !== null ? { top : ` ${ yearStickyOffset } px` } : undefined }
162+ style = { yearStickyOffset !== null ? { top : yearStickyOffset } : undefined }
162163 >
163164 { year }
164165 </ h2 >
0 commit comments