@wise/components-theming
Version:
Provides theming support for the Wise Design system components
46 lines (42 loc) • 1.59 kB
JavaScript
;
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