UNPKG

3.54 kBJavaScriptView Raw
1var __rest = this && this.__rest || function (s, e) {
2 var t = {};
3 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
4 if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
5 if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
6 }
7 return t;
8};
9import React from 'react';
10import { useCacheToken } from '@ant-design/cssinjs';
11import version from '../version';
12import { defaultTheme, DesignTokenContext } from './context';
13import defaultSeedToken from './themes/seed';
14import formatToken from './util/alias';
15export const unitless = {
16 lineHeight: true,
17 lineHeightSM: true,
18 lineHeightLG: true,
19 lineHeightHeading1: true,
20 lineHeightHeading2: true,
21 lineHeightHeading3: true,
22 lineHeightHeading4: true,
23 lineHeightHeading5: true,
24 opacityLoading: true,
25 fontWeightStrong: true,
26 zIndexPopupBase: true,
27 zIndexBase: true
28};
29export const ignore = {
30 size: true,
31 sizeSM: true,
32 sizeLG: true,
33 sizeMD: true,
34 sizeXS: true,
35 sizeXXS: true,
36 sizeMS: true,
37 sizeXL: true,
38 sizeXXL: true,
39 sizeUnit: true,
40 sizeStep: true,
41 motionBase: true,
42 motionUnit: true
43};
44const preserve = {
45 screenXS: true,
46 screenXSMin: true,
47 screenXSMax: true,
48 screenSM: true,
49 screenSMMin: true,
50 screenSMMax: true,
51 screenMD: true,
52 screenMDMin: true,
53 screenMDMax: true,
54 screenLG: true,
55 screenLGMin: true,
56 screenLGMax: true,
57 screenXL: true,
58 screenXLMin: true,
59 screenXLMax: true,
60 screenXXL: true,
61 screenXXLMin: true
62};
63export const getComputedToken = (originToken, overrideToken, theme) => {
64 const derivativeToken = theme.getDerivativeToken(originToken);
65 const {
66 override
67 } = overrideToken,
68 components = __rest(overrideToken, ["override"]);
69 // Merge with override
70 let mergedDerivativeToken = Object.assign(Object.assign({}, derivativeToken), {
71 override
72 });
73 // Format if needed
74 mergedDerivativeToken = formatToken(mergedDerivativeToken);
75 if (components) {
76 Object.entries(components).forEach(_ref => {
77 let [key, value] = _ref;
78 const {
79 theme: componentTheme
80 } = value,
81 componentTokens = __rest(value, ["theme"]);
82 let mergedComponentToken = componentTokens;
83 if (componentTheme) {
84 mergedComponentToken = getComputedToken(Object.assign(Object.assign({}, mergedDerivativeToken), componentTokens), {
85 override: componentTokens
86 }, componentTheme);
87 }
88 mergedDerivativeToken[key] = mergedComponentToken;
89 });
90 }
91 return mergedDerivativeToken;
92};
93// ================================== Hook ==================================
94export default function useToken() {
95 const {
96 token: rootDesignToken,
97 hashed,
98 theme,
99 override,
100 cssVar
101 } = React.useContext(DesignTokenContext);
102 const salt = `${version}-${hashed || ''}`;
103 const mergedTheme = theme || defaultTheme;
104 const [token, hashId, realToken] = useCacheToken(mergedTheme, [defaultSeedToken, rootDesignToken], {
105 salt,
106 override,
107 getComputedToken,
108 // formatToken will not be consumed after 1.15.0 with getComputedToken.
109 // But token will break if @ant-design/cssinjs is under 1.15.0 without it
110 formatToken,
111 cssVar: cssVar && {
112 prefix: cssVar.prefix,
113 key: cssVar.key,
114 unitless,
115 ignore,
116 preserve
117 }
118 });
119 return [mergedTheme, realToken, hashed ? hashId : '', token, cssVar];
120}
\No newline at end of file