UNPKG

@nex-ui/system

Version:

A lightweight and performant styling library based on Emotion, focusing on component architecture and developer experience.

92 lines (88 loc) 2.96 kB
'use strict'; var jsxRuntime = require('react/jsx-runtime'); var react = require('react'); var react$1 = require('@emotion/react'); var utils = require('@nex-ui/utils'); var system = require('../system.cjs'); var SystemContext = require('./SystemContext.cjs'); var ColorSchemeProvider = require('../colorScheme/ColorSchemeProvider.cjs'); const SystemProvider = ({ children, cssVarsPrefix, aliases, tokens, semanticTokens, scales, breakpoints, selectors, colorSchemeNode, forcedMode, defaultMode = 'system', modeStorageKey = 'color-scheme', colorSchemeSelector = 'data' })=>{ const getColorSchemeSelector = react.useMemo(()=>ColorSchemeProvider.createGetColorSchemeSelector(colorSchemeSelector), [ colorSchemeSelector ]); const { css, getGlobalCssVars } = react.useMemo(()=>{ return system.createSystem({ cssVarsPrefix, aliases, tokens, semanticTokens, scales, breakpoints, selectors: { ...selectors, dark: getColorSchemeSelector('dark'), light: getColorSchemeSelector('light') } }); }, [ aliases, breakpoints, cssVarsPrefix, getColorSchemeSelector, scales, selectors, semanticTokens, tokens ]); const globalStyles = react.useMemo(()=>{ if (!getGlobalCssVars) { return null; } const cssVarMap = getGlobalCssVars(); const result = {}; cssVarMap.forEach((value, key)=>{ const cssVar = Object.fromEntries(value.entries()); if (key === 'base') { utils.merge(result, { ':root': cssVar }); return; } utils.merge(result, { [getColorSchemeSelector(key)]: { ':root': { colorScheme: key, ...cssVar } } }); }); return result; }, [ getColorSchemeSelector, getGlobalCssVars ]); const methods = react.useMemo(()=>({ css }), [ css ]); return /*#__PURE__*/ jsxRuntime.jsx(SystemContext.InnerSystemProvider, { value: methods, children: /*#__PURE__*/ jsxRuntime.jsxs(ColorSchemeProvider.ColorSchemeProvider, { forcedMode: forcedMode, defaultMode: defaultMode, modeStorageKey: modeStorageKey, colorSchemeSelector: colorSchemeSelector, colorSchemeNode: colorSchemeNode, children: [ /*#__PURE__*/ jsxRuntime.jsx(react$1.Global, { styles: globalStyles }), children ] }) }); }; SystemProvider.displayName = 'SystemProvider'; exports.SystemProvider = SystemProvider;