llzai's picture
Upload 1793 files
9853396 verified
import React from 'react';
import { cn } from '@/lib/utils';
interface HeaderProps extends React.HTMLAttributes<HTMLElement> {
fixed?: boolean;
ref?: React.Ref<HTMLElement>;
}
export const Header = ({ className, fixed, children, ...props }: HeaderProps) => {
const [offset, setOffset] = React.useState(0);
React.useEffect(() => {
const onScroll = () => {
setOffset(document.body.scrollTop || document.documentElement.scrollTop);
};
// Add scroll listener to the body
document.addEventListener('scroll', onScroll, { passive: true });
// Clean up the event listener on unmount
return () => document.removeEventListener('scroll', onScroll);
}, []);
// Don't render if there's no children
if (!children) {
return null;
}
return (
<header
className={cn(
'bg-background flex h-16 items-center gap-3 p-4 sm:gap-4',
fixed && 'header-fixed peer/header fixed z-50 w-[inherit] rounded-md',
offset > 10 && fixed ? 'shadow-sm' : 'shadow-none',
className
)}
{...props}
>
{children}
</header>
);
};
Header.displayName = 'Header';