Spaces:
Sleeping
Sleeping
pythonic-rag-FastAPIReact
/
frontend
/node_modules
/@mui
/system
/modern
/ThemeProvider
/ThemeProvider.js
| 'use client'; | |
| import _extends from "@babel/runtime/helpers/esm/extends"; | |
| import * as React from 'react'; | |
| import PropTypes from 'prop-types'; | |
| import { ThemeProvider as MuiThemeProvider, useTheme as usePrivateTheme } from '@mui/private-theming'; | |
| import exactProp from '@mui/utils/exactProp'; | |
| import { ThemeContext as StyledEngineThemeContext } from '@mui/styled-engine'; | |
| import useThemeWithoutDefault from '../useThemeWithoutDefault'; | |
| import RtlProvider from '../RtlProvider'; | |
| import DefaultPropsProvider from '../DefaultPropsProvider'; | |
| import { jsx as _jsx } from "react/jsx-runtime"; | |
| const EMPTY_THEME = {}; | |
| function useThemeScoping(themeId, upperTheme, localTheme, isPrivate = false) { | |
| return React.useMemo(() => { | |
| const resolvedTheme = themeId ? upperTheme[themeId] || upperTheme : upperTheme; | |
| if (typeof localTheme === 'function') { | |
| const mergedTheme = localTheme(resolvedTheme); | |
| const result = themeId ? _extends({}, upperTheme, { | |
| [themeId]: mergedTheme | |
| }) : mergedTheme; | |
| // must return a function for the private theme to NOT merge with the upper theme. | |
| // see the test case "use provided theme from a callback" in ThemeProvider.test.js | |
| if (isPrivate) { | |
| return () => result; | |
| } | |
| return result; | |
| } | |
| return themeId ? _extends({}, upperTheme, { | |
| [themeId]: localTheme | |
| }) : _extends({}, upperTheme, localTheme); | |
| }, [themeId, upperTheme, localTheme, isPrivate]); | |
| } | |
| /** | |
| * This component makes the `theme` available down the React tree. | |
| * It should preferably be used at **the root of your component tree**. | |
| * | |
| * <ThemeProvider theme={theme}> // existing use case | |
| * <ThemeProvider theme={{ id: theme }}> // theme scoping | |
| */ | |
| function ThemeProvider(props) { | |
| const { | |
| children, | |
| theme: localTheme, | |
| themeId | |
| } = props; | |
| const upperTheme = useThemeWithoutDefault(EMPTY_THEME); | |
| const upperPrivateTheme = usePrivateTheme() || EMPTY_THEME; | |
| if (process.env.NODE_ENV !== 'production') { | |
| if (upperTheme === null && typeof localTheme === 'function' || themeId && upperTheme && !upperTheme[themeId] && typeof localTheme === 'function') { | |
| console.error(['MUI: You are providing a theme function prop to the ThemeProvider component:', '<ThemeProvider theme={outerTheme => outerTheme} />', '', 'However, no outer theme is present.', 'Make sure a theme is already injected higher in the React tree ' + 'or provide a theme object.'].join('\n')); | |
| } | |
| } | |
| const engineTheme = useThemeScoping(themeId, upperTheme, localTheme); | |
| const privateTheme = useThemeScoping(themeId, upperPrivateTheme, localTheme, true); | |
| const rtlValue = engineTheme.direction === 'rtl'; | |
| return /*#__PURE__*/_jsx(MuiThemeProvider, { | |
| theme: privateTheme, | |
| children: /*#__PURE__*/_jsx(StyledEngineThemeContext.Provider, { | |
| value: engineTheme, | |
| children: /*#__PURE__*/_jsx(RtlProvider, { | |
| value: rtlValue, | |
| children: /*#__PURE__*/_jsx(DefaultPropsProvider, { | |
| value: engineTheme?.components, | |
| children: children | |
| }) | |
| }) | |
| }) | |
| }); | |
| } | |
| process.env.NODE_ENV !== "production" ? ThemeProvider.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`. β | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| /** | |
| * Your component tree. | |
| */ | |
| children: PropTypes.node, | |
| /** | |
| * A theme object. You can provide a function to extend the outer theme. | |
| */ | |
| theme: PropTypes.oneOfType([PropTypes.func, PropTypes.object]).isRequired, | |
| /** | |
| * The design system's unique id for getting the corresponded theme when there are multiple design systems. | |
| */ | |
| themeId: PropTypes.string | |
| } : void 0; | |
| if (process.env.NODE_ENV !== 'production') { | |
| process.env.NODE_ENV !== "production" ? ThemeProvider.propTypes = exactProp(ThemeProvider.propTypes) : void 0; | |
| } | |
| export default ThemeProvider; |