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