mui-extended
Version:
Extended UI Components built on Material UI
26 lines (25 loc) • 1.3 kB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
import { createTheme, ThemeProvider, responsiveFontSizes } from "@mui/material";
import { createContext, useContext, useMemo, useState } from "react";
import { deepmerge } from "@mui/utils";
var ThemeOptionsContext = createContext({
themeOptions: {},
setThemeOptions: function () {
// don't do anything
}
});
export var useThemeOptions = function () {
return useContext(ThemeOptionsContext);
};
export var ThemeOptionsProvider = function (_a) {
var children = _a.children, _b = _a.themeOptions, themeOptionsFromProp = _b === void 0 ? {} : _b;
var _c = useState({}), themeOptions = _c[0], setThemeOptions = _c[1];
var themeOptionsFromContext = useThemeOptions().themeOptions;
var theme = useMemo(function () {
return responsiveFontSizes(createTheme(deepmerge(deepmerge(themeOptionsFromContext, themeOptionsFromProp), themeOptions)));
}, [themeOptionsFromContext, themeOptionsFromProp, themeOptions]);
return (_jsx(ThemeOptionsContext.Provider, { value: {
themeOptions: deepmerge(deepmerge(themeOptionsFromContext, themeOptionsFromProp), themeOptions),
setThemeOptions: setThemeOptions
}, children: _jsx(ThemeProvider, { theme: theme, children: children }) }));
};