a tool for shared writing and social publishing
at main 2.2 kB view raw
1"use client"; 2import { useState, useEffect } from "react"; 3import { useCardBorderHidden } from "./Pages/useCardBorderHidden"; 4 5export const Header = (props: { children: React.ReactNode }) => { 6 let cardBorderHidden = useCardBorderHidden(); 7 let [scrollPos, setScrollPos] = useState(0); 8 9 useEffect(() => { 10 const homeContent = document.getElementById("home-content"); 11 12 const handleScroll = () => { 13 if (homeContent) { 14 setScrollPos(homeContent.scrollTop); 15 } 16 }; 17 18 if (homeContent) { 19 homeContent.addEventListener("scroll", handleScroll); 20 return () => homeContent.removeEventListener("scroll", handleScroll); 21 } 22 }, []); 23 24 let headerBGColor = !cardBorderHidden 25 ? "var(--bg-leaflet)" 26 : "var(--bg-page)"; 27 28 return ( 29 <div 30 className={` 31 headerWrapper 32 sticky top-0 z-10 33 w-full bg-transparent 34 `} 35 > 36 <div 37 style={ 38 scrollPos < 20 39 ? { 40 paddingLeft: `calc(${scrollPos / 20}*8px)`, 41 paddingRight: `calc(${scrollPos / 20}*8px)`, 42 } 43 : { paddingLeft: `8px`, paddingRight: `8px` } 44 } 45 > 46 <div 47 className={` 48 headerContent 49 border rounded-lg 50 ${scrollPos > 20 ? "border-border-light" : "border-transparent"} 51 py-1 52 w-full flex justify-between items-center gap-4`} 53 style={ 54 scrollPos < 20 55 ? { 56 backgroundColor: !cardBorderHidden 57 ? `rgba(${headerBGColor}, ${scrollPos / 60 + 0.75})` 58 : `rgba(${headerBGColor}, ${scrollPos / 20})`, 59 paddingLeft: !cardBorderHidden 60 ? "4px" 61 : `calc(${scrollPos / 20}*4px)`, 62 paddingRight: !cardBorderHidden 63 ? "8px" 64 : `calc(${scrollPos / 20}*8px)`, 65 } 66 : { 67 backgroundColor: `rgb(${headerBGColor})`, 68 paddingLeft: "4px", 69 paddingRight: "8px", 70 } 71 } 72 > 73 {props.children} 74 </div> 75 </div> 76 </div> 77 ); 78};