@@ -3,42 +3,46 @@ import { cn } from '@/lib/utils'
33import { Separator } from '@/components/ui/separator'
44import { SidebarTrigger } from '@/components/ui/sidebar'
55
6- interface HeaderProps extends React . HTMLAttributes < React . ElementRef < 'header' > > {
7- sticky ?: boolean
6+ interface HeaderProps extends React . HTMLAttributes < HTMLElement > {
7+ fixed ?: boolean
8+ ref ?: React . Ref < HTMLElement >
89}
910
10- export const Header = React . forwardRef < React . ElementRef < 'header' > , HeaderProps > (
11- ( { className, sticky, children, ...props } , ref ) => {
12- const [ offset , setOffset ] = React . useState ( 0 )
11+ export const Header = ( {
12+ className,
13+ fixed,
14+ children,
15+ ...props
16+ } : HeaderProps ) => {
17+ const [ offset , setOffset ] = React . useState ( 0 )
1318
14- React . useEffect ( ( ) => {
15- const onScroll = ( ) => {
16- setOffset ( document . body . scrollTop || document . documentElement . scrollTop )
17- }
19+ React . useEffect ( ( ) => {
20+ const onScroll = ( ) => {
21+ setOffset ( document . body . scrollTop || document . documentElement . scrollTop )
22+ }
1823
19- // Add scroll listener to the body
20- document . addEventListener ( 'scroll' , onScroll , { passive : true } )
24+ // Add scroll listener to the body
25+ document . addEventListener ( 'scroll' , onScroll , { passive : true } )
2126
22- // Clean up the event listener on unmount
23- return ( ) => document . removeEventListener ( 'scroll' , onScroll )
24- } , [ ] )
27+ // Clean up the event listener on unmount
28+ return ( ) => document . removeEventListener ( 'scroll' , onScroll )
29+ } , [ ] )
30+
31+ return (
32+ < header
33+ className = { cn (
34+ 'flex items-center gap-3 sm:gap-4 bg-background p-4 h-16' ,
35+ fixed && 'header-fixed peer/header w-[inherit] fixed z-50 rounded-md' ,
36+ offset > 10 && fixed ? 'shadow' : 'shadow-none' ,
37+ className
38+ ) }
39+ { ...props }
40+ >
41+ < SidebarTrigger variant = 'outline' className = 'scale-125 sm:scale-100' />
42+ < Separator orientation = 'vertical' className = 'h-6' />
43+ { children }
44+ </ header >
45+ )
46+ }
2547
26- return (
27- < header
28- ref = { ref }
29- className = { cn (
30- 'flex items-center gap-3 sm:gap-4 bg-background p-4 h-16' ,
31- sticky && 'sticky top-0 z-20' ,
32- offset > 10 && sticky ? 'shadow' : 'shadow-none' ,
33- className
34- ) }
35- { ...props }
36- >
37- < SidebarTrigger variant = 'outline' className = 'scale-125 sm:scale-100' />
38- < Separator orientation = 'vertical' className = 'h-6' />
39- { children }
40- </ header >
41- )
42- }
43- )
4448Header . displayName = 'Header'
0 commit comments