UNPKG

@mui/material

Version:

Material UI is an open-source React component library that implements Google's Material Design. It's comprehensive and can be used in production out of the box.

61 lines (55 loc) 1.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.stringifyTheme = stringifyTheme; var _deepmerge = require("@mui/utils/deepmerge"); /* eslint-disable import/prefer-default-export */ function isSerializable(val) { return (0, _deepmerge.isPlainObject)(val) || typeof val === 'undefined' || typeof val === 'string' || typeof val === 'boolean' || typeof val === 'number' || Array.isArray(val); } /** * `baseTheme` usually comes from `createTheme()` or `extendTheme()`. * * This function is intended to be used with zero-runtime CSS-in-JS like Pigment CSS * For example, in a Next.js project: * * ```js * // next.config.js * const { extendTheme } = require('@mui/material/styles'); * * const theme = extendTheme(); * // `.toRuntimeSource` is Pigment CSS specific to create a theme that is available at runtime. * theme.toRuntimeSource = stringifyTheme; * * module.exports = withPigment({ * theme, * }); * ``` */ function stringifyTheme(baseTheme = {}) { const serializableTheme = { ...baseTheme }; function serializeTheme(object) { const array = Object.entries(object); // eslint-disable-next-line no-plusplus for (let index = 0; index < array.length; index++) { const [key, value] = array[index]; if (!isSerializable(value) || key.startsWith('unstable_')) { delete object[key]; } else if ((0, _deepmerge.isPlainObject)(value)) { object[key] = { ...value }; serializeTheme(object[key]); } } } serializeTheme(serializableTheme); return `import { unstable_createBreakpoints as createBreakpoints, createTransitions } from '@mui/material/styles'; const theme = ${JSON.stringify(serializableTheme, null, 2)}; theme.breakpoints = createBreakpoints(theme.breakpoints || {}); theme.transitions = createTransitions(theme.transitions || {}); export default theme;`; }