UNPKG

antd-style

Version:

css-in-js solution for application combine with antd v5 token system and emotion

110 lines (103 loc) 4.73 kB
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2"; import { createContext } from 'react'; import { CacheManager, createCSS, createEmotion, serializeCSS } from "../core"; import { createEmotionContext } from "../factories/createEmotionContext"; import { createGlobalStyleFactory } from "../factories/createGlobalStyle"; import { createStaticStylesFactory } from "../factories/createStaticStyles"; import { createStylishFactory } from "../factories/createStyish"; import { createStyleProvider } from "../factories/createStyleProvider"; import { createStylesFactory } from "../factories/createStyles"; import { createThemeProvider } from "../factories/createThemeProvider"; import { createUseTheme } from "../factories/createUseTheme"; // 为 SSR 添加一个全局的 cacheManager,用于统一抽取 ssr 样式 var cacheManager = new CacheManager(); if (typeof global !== 'undefined') { global.__ANTD_STYLE_CACHE_MANAGER_FOR_SSR__ = cacheManager; } /** * Creates a new instance of antd-style * 创建一个新的 antd-style 实例 */ export var createInstance = function createInstance(options) { var _options$key, _options$speedy, _internalOptions$styl; var internalOptions = _objectSpread(_objectSpread({}, options), {}, { key: (_options$key = options.key) !== null && _options$key !== void 0 ? _options$key : 'zcss', // 新建的 instance key 如果不传,则设为 zcss- 使得该 key 和 acss 不一样 speedy: (_options$speedy = options.speedy) !== null && _options$speedy !== void 0 ? _options$speedy : false }); var emotion = createEmotion({ key: internalOptions.key, speedy: internalOptions.speedy, container: internalOptions.container }); var EmotionContext = createEmotionContext(emotion); var StyleProvider = createStyleProvider(EmotionContext); // 将 cache 存到全局管理器中 emotion.cache = cacheManager.add(emotion.cache); // ******* 下面这些都和主题相关,如果做了任何改动,都需要排查一遍 ************* // var CustomThemeContext = /*#__PURE__*/createContext(internalOptions.customToken ? internalOptions.customToken : {}); var styledThemeContext = (_internalOptions$styl = internalOptions.styled) === null || _internalOptions$styl === void 0 ? void 0 : _internalOptions$styl.ThemeContext; var StyleEngineContext = /*#__PURE__*/createContext({ CustomThemeContext: CustomThemeContext, StyledThemeContext: styledThemeContext, prefixCls: internalOptions === null || internalOptions === void 0 ? void 0 : internalOptions.prefixCls, iconPrefixCls: internalOptions === null || internalOptions === void 0 ? void 0 : internalOptions.iconPrefixCls }); var useTheme = createUseTheme({ StyleEngineContext: StyleEngineContext }); var createStyles = createStylesFactory({ hashPriority: internalOptions.hashPriority, useTheme: useTheme, EmotionContext: EmotionContext }); var createGlobalStyle = createGlobalStyleFactory(useTheme); var createStylish = createStylishFactory(createStyles); // 创建静态样式实例,使用配置的 prefixCls 和相同的 cache var staticStylesInstance = createStaticStylesFactory({ prefix: internalOptions.prefixCls || 'ant', hashPriority: internalOptions.hashPriority, cache: emotion.cache }); var ThemeProvider = createThemeProvider({ styledConfig: internalOptions.styled, StyleEngineContext: StyleEngineContext, useTheme: useTheme }); ThemeProvider.displayName = 'AntdStyleThemeProvider'; // ******** 上面这些都和主题相关,如果做了任何改动,都需要排查一遍 ************ // var _createCSS = createCSS(emotion.cache, { hashPriority: internalOptions.hashPriority }), cx = _createCSS.cx; var injectGlobal = emotion.injectGlobal, keyframes = emotion.keyframes; return { // ******************** // // **** 样式生成相关 **** // // ******************** // createStyles: createStyles, createGlobalStyle: createGlobalStyle, createStylish: createStylish, createStaticStyles: staticStylesInstance.createStaticStyles, // ******************** // // **** 基础样式方法 **** // // ******************** // css: serializeCSS, cx: cx, keyframes: keyframes, injectGlobal: injectGlobal, cssVar: staticStylesInstance.cssVar, responsive: staticStylesInstance.responsive, //******************** // //**** 样式表管理 **** // //******************** // styleManager: emotion, // ******************** // // ***** 主题相关 ***** // // ******************** // useTheme: useTheme, StyleProvider: StyleProvider, ThemeProvider: ThemeProvider }; };