import { type ReactNode, useEffect } from "react" import { useLayout } from "./layout-context" type Breakpoints = { sm: boolean md: boolean lg: boolean xl: boolean } const breakpoints: Breakpoints = { sm: false, md: false, lg: false, xl: false } export function useBreakpoint() { return breakpoints } export const bp = breakpoints export default function Effects(props: { children?: ReactNode }) { const { setNavbar } = useLayout() useEffect(() => { const sm = window.matchMedia("(width >= 40rem)") const md = window.matchMedia("(width >= 48rem)") const lg = window.matchMedia("(width >= 64rem)") const xl = window.matchMedia("(width >= 80rem)") breakpoints.sm = sm.matches breakpoints.md = md.matches breakpoints.lg = lg.matches breakpoints.xl = xl.matches setNavbar(md.matches) sm.addEventListener("change", (e) => { breakpoints.sm = e.matches }) md.addEventListener("change", (e) => { breakpoints.md = e.matches setNavbar(e.matches) }) lg.addEventListener("change", (e) => { breakpoints.lg = e.matches }) xl.addEventListener("change", (e) => { breakpoints.xl = e.matches }) const html = document.documentElement const originalFontSize = html.style.fontSize html.style.fontSize = "16px" return () => { html.style.fontSize = originalFontSize } }, [setNavbar]) return <>{props.children} }