@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
JavaScript
;
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;