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.

161 lines (157 loc) 5.89 kB
'use client'; import * as React from 'react'; import PropTypes from 'prop-types'; import { globalCss } from "../zero-styled/index.js"; import { useDefaultProps } from "../DefaultPropsProvider/index.js"; // to determine if the global styles are static or dynamic import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; const isDynamicSupport = typeof globalCss({}) === 'function'; export const html = (theme, enableColorScheme) => ({ WebkitFontSmoothing: 'antialiased', // Antialiasing. MozOsxFontSmoothing: 'grayscale', // Antialiasing. // Change from `box-sizing: content-box` so that `width` // is not affected by `padding` or `border`. boxSizing: 'border-box', // Fix font resize problem in iOS WebkitTextSizeAdjust: '100%', // When used under CssVarsProvider, colorScheme should not be applied dynamically because it will generate the stylesheet twice for server-rendered applications. ...(enableColorScheme && !theme.vars && { colorScheme: theme.palette.mode }) }); export const body = theme => ({ color: (theme.vars || theme).palette.text.primary, ...theme.typography.body1, backgroundColor: (theme.vars || theme).palette.background.default, '@media print': { // Save printer ink. backgroundColor: (theme.vars || theme).palette.common.white } }); export const styles = (theme, enableColorScheme = false) => { const colorSchemeStyles = {}; if (enableColorScheme && theme.colorSchemes && typeof theme.getColorSchemeSelector === 'function') { Object.entries(theme.colorSchemes).forEach(([key, scheme]) => { const selector = theme.getColorSchemeSelector(key); if (selector.startsWith('@')) { // for @media (prefers-color-scheme), we need to target :root colorSchemeStyles[selector] = { ':root': { colorScheme: scheme.palette?.mode } }; } else { // else, it's likely that the selector already target an element with a class or data attribute colorSchemeStyles[selector.replace(/\s*&/, '')] = { colorScheme: scheme.palette?.mode }; } }); } let defaultStyles = { html: html(theme, enableColorScheme), '*, *::before, *::after': { boxSizing: 'inherit' }, 'strong, b': { fontWeight: theme.typography.fontWeightBold }, body: { margin: 0, // Remove the margin in all browsers. ...body(theme), // Add support for document.body.requestFullScreen(). // Other elements, if background transparent, are not supported. '&::backdrop': { backgroundColor: (theme.vars || theme).palette.background.default } }, ...colorSchemeStyles }; const themeOverrides = theme.components?.MuiCssBaseline?.styleOverrides; if (themeOverrides) { defaultStyles = [defaultStyles, themeOverrides]; } return defaultStyles; }; // `ecs` stands for enableColorScheme. This is internal logic to make it work with Pigment CSS, so shorter is better. const SELECTOR = 'mui-ecs'; const staticStyles = theme => { const result = styles(theme, false); const baseStyles = Array.isArray(result) ? result[0] : result; if (!theme.vars && baseStyles) { baseStyles.html[`:root:has(${SELECTOR})`] = { colorScheme: theme.palette.mode }; } if (theme.colorSchemes) { Object.entries(theme.colorSchemes).forEach(([key, scheme]) => { const selector = theme.getColorSchemeSelector(key); if (selector.startsWith('@')) { // for @media (prefers-color-scheme), we need to target :root baseStyles[selector] = { [`:root:not(:has(.${SELECTOR}))`]: { colorScheme: scheme.palette?.mode } }; } else { // else, it's likely that the selector already target an element with a class or data attribute baseStyles[selector.replace(/\s*&/, '')] = { [`&:not(:has(.${SELECTOR}))`]: { colorScheme: scheme.palette?.mode } }; } }); } return result; }; const GlobalStyles = globalCss(isDynamicSupport ? ({ theme, enableColorScheme }) => styles(theme, enableColorScheme) : ({ theme }) => staticStyles(theme)); /** * Kickstart an elegant, consistent, and simple baseline to build upon. */ function CssBaseline(inProps) { const props = useDefaultProps({ props: inProps, name: 'MuiCssBaseline' }); const { children, enableColorScheme = false } = props; return /*#__PURE__*/_jsxs(React.Fragment, { children: [isDynamicSupport && /*#__PURE__*/_jsx(GlobalStyles, { enableColorScheme: enableColorScheme }), !isDynamicSupport && !enableColorScheme && /*#__PURE__*/_jsx("span", { className: SELECTOR, style: { display: 'none' } }), children] }); } process.env.NODE_ENV !== "production" ? CssBaseline.propTypes /* remove-proptypes */ = { // ┌────────────────────────────── Warning ──────────────────────────────┐ // │ These PropTypes are generated from the TypeScript type definitions. │ // │ To update them, edit the d.ts file and run `pnpm proptypes`. │ // └─────────────────────────────────────────────────────────────────────┘ /** * You can wrap a node. */ children: PropTypes.node, /** * Enable `color-scheme` CSS property to use `theme.palette.mode`. * For more details, check out https://developer.mozilla.org/en-US/docs/Web/CSS/color-scheme * For browser support, check out https://caniuse.com/?search=color-scheme * @default false */ enableColorScheme: PropTypes.bool } : void 0; export default CssBaseline;