Skip to content

Commit 0157c9e

Browse files
authored
Merge pull request #10 from ant-design/feat/getCommonStyle
feat: add new config `config.getCommonStyle` `config.getCompUnitless` for `genStyleUtils`
2 parents bd794b0 + f890ec8 commit 0157c9e

File tree

4 files changed

+42
-21
lines changed

4 files changed

+42
-21
lines changed

docs/demos/genStyleUtils.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,14 @@ nav:
1010

1111
## 入参介绍
1212

13-
### `genStyleUtils<CompTokenMap>(getConfigProviderContext?, getThemeProviderContext?)`
13+
### `genStyleUtils<CompTokenMap, AliasToken, DesignToken>(config)`
1414
- `config`: 可选,配置
1515
- `useCSP`: 使用 CSP 的钩子函数
1616
- `usePrefix`: 使用样式前缀的钩子函数
1717
- `useToken`: 使用 token 的钩子函数
18+
- `getResetStyles`: 获取重置样式函数
19+
- `getCommonStyle`: 获取通用样式函数
20+
- `getCompUnitless`: 获取组件无单位样式函数
1821
- `CompTokenMap`: 范型参数,表示组件 token 映射
1922
- `AliasToken`: 范型参数,表示别名 token
2023
- `DesignToken`: 范型参数,表示设计 token

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ export { default as genCalc } from './util/calc';
33
export {
44
default as statisticToken,
55
merge as mergeToken,
6+
statistic,
67
} from './util/statistic';
78

89
export type {

src/util/genStyleUtils.tsx

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,13 @@ export type GetResetStyles<
102102
AliasToken extends TokenType,
103103
> = (token: Partial<AliasToken & CompTokenMap>) => CSSInterpolation;
104104

105+
export type GetCompUnitless<
106+
CompTokenMap extends TokenMap,
107+
AliasToken extends TokenType,
108+
> = <C extends TokenMapKey<CompTokenMap>>(component: C | [C, string]) => {
109+
[key in ComponentTokenKey<CompTokenMap, AliasToken, C>]: boolean;
110+
}
111+
105112
export default function genStyleUtils<
106113
CompTokenMap extends TokenMap,
107114
AliasToken extends TokenType,
@@ -112,6 +119,13 @@ export default function genStyleUtils<
112119
useToken: UseToken<CompTokenMap, AliasToken, DesignToken>;
113120
useCSP?: UseCSP;
114121
getResetStyles?: GetResetStyles<CompTokenMap, AliasToken>,
122+
getCommonStyle?: (
123+
token: OverrideTokenMap<CompTokenMap, AliasToken>,
124+
componentPrefixCls: string,
125+
rootCls?: string,
126+
resetFont?: boolean,
127+
) => CSSObject;
128+
getCompUnitless?: GetCompUnitless<CompTokenMap, AliasToken>,
115129
}
116130
) {
117131
// Dependency inversion for preparing basic config.
@@ -120,6 +134,8 @@ export default function genStyleUtils<
120134
useToken,
121135
usePrefix,
122136
getResetStyles,
137+
getCommonStyle,
138+
getCompUnitless,
123139
} = config;
124140

125141
function genStyleHooks<C extends TokenMapKey<CompTokenMap>>(
@@ -165,8 +181,11 @@ export default function genStyleUtils<
165181

166182
// Fill unitless
167183
const originUnitless = options?.unitless || {};
184+
185+
const originCompUnitless = typeof getCompUnitless === 'function' ? getCompUnitless(component) : {};
186+
168187
const compUnitless: any = {
169-
...originUnitless,
188+
...originCompUnitless,
170189
[prefixToken('zIndexPopup')]: true,
171190
};
172191
Object.keys(originUnitless).forEach((key) => {
@@ -315,12 +334,6 @@ export default function genStyleUtils<
315334
unitless?: {
316335
[key in ComponentTokenKey<CompTokenMap, AliasToken, C>]: boolean;
317336
};
318-
genCommonStyle?: (
319-
token: OverrideTokenMap<CompTokenMap, AliasToken>,
320-
componentPrefixCls: string,
321-
rootCls?: string,
322-
resetFont?: boolean,
323-
) => CSSObject;
324337
} = {},
325338
) {
326339
const cells = (
@@ -364,8 +377,7 @@ export default function genStyleUtils<
364377
const { max, min } = genMaxMin(type);
365378

366379
// Shared config
367-
const sharedConfig: Omit<Parameters<typeof useStyleRegister>[0], 'path'> =
368-
{
380+
const sharedConfig: Omit<Parameters<typeof useStyleRegister>[0], 'path'> = {
369381
theme,
370382
token,
371383
hashId,
@@ -382,7 +394,7 @@ export default function genStyleUtils<
382394
// Generate style for all need reset tags.
383395
useStyleRegister(
384396
{ ...sharedConfig, clientOnly: false, path: ['Shared', rootPrefixCls] },
385-
() => getResetStyles?.(token) ?? [],
397+
() => typeof getResetStyles === 'function' ? getResetStyles(token) : [],
386398
);
387399

388400
const wrapSSR = useStyleRegister(
@@ -398,7 +410,7 @@ export default function genStyleUtils<
398410
CompTokenMap,
399411
AliasToken,
400412
C
401-
>(component, realToken, getDefaultToken) ?? {};
413+
>(component, realToken, getDefaultToken);
402414

403415
const componentCls = `.${prefixCls}`;
404416
const componentToken = getComponentToken<CompTokenMap, AliasToken, C>(
@@ -410,7 +422,7 @@ export default function genStyleUtils<
410422
},
411423
);
412424

413-
if (cssVar) {
425+
if (cssVar && typeof defaultComponentToken === 'object') {
414426
Object.keys(defaultComponentToken).forEach((key) => {
415427
defaultComponentToken[key] = `var(${token2CSSVar(
416428
key,
@@ -423,8 +435,8 @@ export default function genStyleUtils<
423435
{
424436
componentCls,
425437
prefixCls,
426-
iconCls: !!iconPrefixCls.length ? '' : `.${iconPrefixCls}`,
427-
antCls: !!rootPrefixCls.length ? '' : `.${rootPrefixCls}`,
438+
iconCls: `.${iconPrefixCls}`,
439+
antCls: `.${rootPrefixCls}`,
428440
calc,
429441
// @ts-ignore
430442
max,
@@ -441,15 +453,18 @@ export default function genStyleUtils<
441453
iconPrefixCls,
442454
});
443455
flush(component, componentToken);
456+
const commonStyle = typeof getCommonStyle === 'function'
457+
? getCommonStyle(
458+
mergedToken,
459+
prefixCls,
460+
rootCls,
461+
options.resetFont
462+
)
463+
: null;
444464
return [
445465
options.resetStyle === false
446466
? null
447-
: options?.genCommonStyle?.(
448-
mergedToken,
449-
prefixCls,
450-
rootCls,
451-
options.resetFont,
452-
) ?? {},
467+
: commonStyle,
453468
styleInterpolation,
454469
];
455470
},

src/util/statistic.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ export function merge<CompTokenMap extends TokenMap>(...objs: Partial<CompTokenM
2121
const ret = {} as CompTokenMap;
2222

2323
objs.forEach((obj) => {
24+
if (typeof obj !== 'object') return;
25+
2426
const keys = Object.keys(obj);
2527

2628
keys.forEach((key) => {

0 commit comments

Comments
 (0)