| 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);
|
| };
|
|
|
|
|
| document.addEventListener('scroll', onScroll, { passive: true });
|
|
|
|
|
| return () => document.removeEventListener('scroll', onScroll);
|
| }, []);
|
|
|
|
|
| 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';
|
|
|