UNPKG

mt-flowbite-react

Version:

Official React components built for Flowbite and Tailwind CSS

56 lines (55 loc) 1.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useThemeMode = exports.useTheme = exports.ThemeProvider = exports.ThemeContext = void 0; const jsx_runtime_1 = require("react/jsx-runtime"); const react_1 = require("react"); const is_client_1 = require("../../helpers/is-client"); const theme_1 = require("../../theme"); exports.ThemeContext = (0, react_1.createContext)({ theme: theme_1.theme, }); const ThemeProvider = ({ children, value }) => { return (0, jsx_runtime_1.jsx)(exports.ThemeContext.Provider, { value: value, children: children }); }; exports.ThemeProvider = ThemeProvider; const useTheme = () => { return (0, react_1.useContext)(exports.ThemeContext); }; exports.useTheme = useTheme; const prefersColorScheme = () => { if (!(0, is_client_1.isClient)()) { return 'light'; } return window.matchMedia?.('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; }; const useThemeMode = () => { const onToggleMode = () => { const newMode = mode === 'dark' ? 'light' : 'dark'; setModeOnBody(newMode); setMode(newMode); }; const setModeOnBody = (0, react_1.useCallback)((mode) => { if (!(0, is_client_1.isClient)()) { return; } if (mode === 'dark') { document.documentElement.classList.add('dark'); } else { document.documentElement.classList.remove('dark'); } }, []); const { mode: initialMode, toggleMode = onToggleMode } = (0, react_1.useContext)(exports.ThemeContext); const [mode, setMode] = (0, react_1.useState)('light'); (0, react_1.useEffect)(() => { if (initialMode) { setModeOnBody(initialMode); setMode(initialMode); } else { setMode(prefersColorScheme()); } }, [initialMode, setModeOnBody, setMode]); return [mode, setMode, toggleMode]; }; exports.useThemeMode = useThemeMode;