fumadocs-ui
Version:
The framework for building a documentation website in Next.js
40 lines (39 loc) • 1.36 kB
JavaScript
'use client';
import { jsx as _jsx } from "react/jsx-runtime";
import { useEffect, useMemo, useState } from 'react';
import { createContext } from 'fumadocs-core/framework';
/**
* applied styles to different layout components in `Page` from layouts
*/
const StylesContext = createContext('StylesContext', {
tocNav: 'xl:hidden',
toc: 'max-xl:hidden',
});
export function usePageStyles() {
return StylesContext.use();
}
export function StylesProvider({ children, ...value }) {
return (_jsx(StylesContext.Provider, { value: value, children: children }));
}
const NavContext = createContext('NavContext', {
isTransparent: false,
});
export function NavProvider({ transparentMode = 'none', children, }) {
const [transparent, setTransparent] = useState(transparentMode !== 'none');
useEffect(() => {
if (transparentMode !== 'top')
return;
const listener = () => {
setTransparent(window.scrollY < 10);
};
listener();
window.addEventListener('scroll', listener);
return () => {
window.removeEventListener('scroll', listener);
};
}, [transparentMode]);
return (_jsx(NavContext.Provider, { value: useMemo(() => ({ isTransparent: transparent }), [transparent]), children: children }));
}
export function useNav() {
return NavContext.use();
}