UNPKG

@wise/components-theming

Version:

Provides theming support for the Wise Design system components

46 lines (42 loc) 1.59 kB
'use strict'; var react = require('react'); var ThemedChildren = require('./ThemedChildren.js'); var _const = require('./const.js'); var helpers = require('./helpers.js'); var ThemeProviderContext = require('./ThemeProviderContext.js'); var jsxRuntime = require('react/jsx-runtime'); const themeClass = /\bnp-theme-[a-z-]+\b/g; const ThemeProvider = ({ theme = _const.DEFAULT_BASE_THEME, screenMode = _const.DEFAULT_SCREEN_MODE, isNotRootProvider = false, children, className = undefined }) => { const isContextRoot = react.useContext(ThemeProviderContext.ThemeContext) === undefined; // useEffect hook used to apply the theme class to the HTML element react.useEffect(() => { if (!isNotRootProvider && isContextRoot) { // Remove all the theme classes from the documentElement document.documentElement.className.match(themeClass)?.forEach(item => { document.documentElement.classList.remove(item); }); helpers.getThemeClassName(theme, screenMode).split(' ').forEach(item => { document.documentElement.classList.add(item); }); } }, [isNotRootProvider, isContextRoot, theme, screenMode]); const contextValue = react.useMemo(() => ({ theme, screenMode }), [screenMode, theme]); return /*#__PURE__*/jsxRuntime.jsx(ThemeProviderContext.ThemeContext.Provider, { value: contextValue, children: /*#__PURE__*/jsxRuntime.jsx(ThemedChildren.ThemedChildren, { className: className, children: children }) }); }; exports.ThemeProvider = ThemeProvider; //# sourceMappingURL=ThemeProvider.js.map