UNPKG

@nutui/nutui-react

Version:

京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序

110 lines (109 loc) 4.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { ConfigProvider: function() { return ConfigProvider; }, defaultConfigRef: function() { return defaultConfigRef; }, getDefaultConfig: function() { return getDefaultConfig; }, setDefaultConfig: function() { return setDefaultConfig; }, useConfig: function() { return useConfig; }, useRtl: function() { return useRtl; } }); var _interop_require_default = require("@swc/helpers/_/_interop_require_default"); var _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard"); var _object_spread = require("@swc/helpers/_/_object_spread"); var _object_spread_props = require("@swc/helpers/_/_object_spread_props"); var _object_without_properties = require("@swc/helpers/_/_object_without_properties"); var _react = /*#__PURE__*/ _interop_require_wildcard._(require("react")); var _classnames = /*#__PURE__*/ _interop_require_default._(require("classnames")); var _lodashkebabcase = /*#__PURE__*/ _interop_require_default._(require("lodash.kebabcase")); var _reactfastcompare = /*#__PURE__*/ _interop_require_default._(require("react-fast-compare")); var _usememo = /*#__PURE__*/ _interop_require_default._(require("../../hooks/use-memo")); var _zhCN = /*#__PURE__*/ _interop_require_default._(require("../../locales/zh-CN")); var _raf = require("../../utils/raf"); var classPrefix = 'nut-configprovider'; var defaultConfigRef = { current: { locale: _zhCN.default } }; var setDefaultConfig = function setDefaultConfig(config) { defaultConfigRef.current = config; }; var getDefaultConfig = function getDefaultConfig() { return defaultConfigRef.current; }; var ConfigContext = /*#__PURE__*/ (0, _react.createContext)(null); var useConfig = function useConfig() { var _useContext; return (_useContext = (0, _react.useContext)(ConfigContext)) !== null && _useContext !== void 0 ? _useContext : getDefaultConfig(); }; function convertThemeVarsToCSSVars(themeVars) { var cssVars = {}; Object.keys(themeVars).forEach(function(key) { cssVars["--".concat((0, _lodashkebabcase.default)(key))] = themeVars[key]; }); return cssVars; } var useRtl = function useRtl() { var direction = useConfig().direction; if (direction) { return direction === 'rtl'; } return _raf.inBrowser && document.dir === 'rtl'; }; var ConfigProvider = function ConfigProvider(props) { var style = props.style, className = props.className, children = props.children, direction = props.direction, config = (0, _object_without_properties._)(props, [ "style", "className", "children", "direction" ]); var mergedConfig = (0, _usememo.default)(function() { return (0, _object_spread_props._)((0, _object_spread._)({}, getDefaultConfig(), config), { direction: direction }); }, [ config, direction ], function(prev, next) { return prev.some(function(prevTheme, index) { var nextTheme = next[index]; return !(0, _reactfastcompare.default)(prevTheme, nextTheme); }); }); var cssVarStyle = _react.default.useMemo(function() { return convertThemeVarsToCSSVars(mergedConfig.theme || {}); }, [ mergedConfig.theme ]); return /*#__PURE__*/ _react.default.createElement(ConfigContext.Provider, { value: mergedConfig }, /*#__PURE__*/ _react.default.createElement("div", { className: (0, _classnames.default)(classPrefix, className), style: (0, _object_spread_props._)((0, _object_spread._)({}, cssVarStyle, style), { direction: direction }), dir: direction }, children)); }; ConfigProvider.displayName = 'NutConfigProvider';