Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: migrate less to token for Skeleton #42134

Merged
merged 28 commits into from
May 18, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
bcc7b9b
feat: migrate less to token for Message
kiner-tang May 4, 2023
3d8fe52
docs: update docs
kiner-tang May 5, 2023
eb50b02
feat: add debug demo
kiner-tang May 5, 2023
f5ea508
feat: optimize code
kiner-tang May 12, 2023
2f37d90
feat: optimize code
kiner-tang May 12, 2023
ab5a0d2
feat: optimize code
kiner-tang May 13, 2023
38a003e
Merge branch 'feature' into skeleton-component-token
kiner-tang May 15, 2023
4b00263
Merge branch 'feature' into skeleton-component-token
kiner-tang May 16, 2023
b80575b
Merge branch 'feature' into skeleton-component-token
kiner-tang May 17, 2023
f2cff40
Merge branch 'feature' into skeleton-component-token
kiner-tang May 17, 2023
29feec6
feat: optimize code
kiner-tang May 18, 2023
d6e2476
feat: update snapshots
kiner-tang May 18, 2023
5fe5f5a
Merge branch 'feature' into skeleton-component-token
kiner-tang May 18, 2023
1a481f9
Update docs/react/migrate-less-variables.en-US.md
kiner-tang May 18, 2023
d0e352a
feat: optimize code
kiner-tang May 18, 2023
fbb337b
feat: optimize code
kiner-tang May 18, 2023
9010f37
feat: optimize code
kiner-tang May 18, 2023
9623281
feat: optimize code
kiner-tang May 18, 2023
3e873ca
Merge branch 'feature' into skeleton-component-token
kiner-tang May 18, 2023
11b9cc3
feat: optimize code
kiner-tang May 18, 2023
4a5904f
feat: optimize code
kiner-tang May 18, 2023
d6ccf54
feat: optimize code
kiner-tang May 18, 2023
a988859
feat: optimize code
kiner-tang May 18, 2023
ec609fc
feat: optimize code
kiner-tang May 18, 2023
508ccae
feat: optimize code
kiner-tang May 18, 2023
7e29afe
Merge branch 'feature' into skeleton-component-token
kiner-tang May 18, 2023
7b5261b
feat: optimize code
kiner-tang May 18, 2023
6d8af8a
feat: optimize code
kiner-tang May 18, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,30 @@ exports[`renders components/skeleton/demo/complex.tsx extend context correctly 1
</div>
`;

exports[`renders components/skeleton/demo/componentToken.tsx extend context correctly 1`] = `
<div
class="ant-skeleton ant-skeleton-active"
>
<div
class="ant-skeleton-content"
>
<h3
class="ant-skeleton-title"
style="width: 38%;"
/>
<ul
class="ant-skeleton-paragraph"
>
<li />
<li />
<li
style="width: 61%;"
/>
</ul>
</div>
</div>
`;

exports[`renders components/skeleton/demo/element.tsx extend context correctly 1`] = `
Array [
<div
Expand Down
24 changes: 24 additions & 0 deletions components/skeleton/__tests__/__snapshots__/demo.test.tsx.snap
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,30 @@ exports[`renders components/skeleton/demo/complex.tsx correctly 1`] = `
</div>
`;

exports[`renders components/skeleton/demo/componentToken.tsx correctly 1`] = `
<div
class="ant-skeleton ant-skeleton-active"
>
<div
class="ant-skeleton-content"
>
<h3
class="ant-skeleton-title"
style="width:38%"
/>
<ul
class="ant-skeleton-paragraph"
>
<li />
<li />
<li
style="width:61%"
/>
</ul>
</div>
</div>
`;

exports[`renders components/skeleton/demo/element.tsx correctly 1`] = `
Array [
<div
Expand Down
7 changes: 7 additions & 0 deletions components/skeleton/demo/componentToken.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
## zh-CN

自定义组件 Token。

## en-US

Custom component token.
23 changes: 23 additions & 0 deletions components/skeleton/demo/componentToken.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { ConfigProvider, Skeleton } from 'antd';
import React from 'react';

const App: React.FC = () => (
<ConfigProvider
theme={{
components: {
Skeleton: {
blockRadius: 30,
titleHeight: 50,
gradientFromColor: '#222',
gradientToColor: '#444',
paragraphMarginTop: 30,
paragraphLiHeight: 30,
},
},
}}
>
<Skeleton loading active />
</ConfigProvider>
);

export default App;
1 change: 1 addition & 0 deletions components/skeleton/index.en-US.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ Provide a placeholder while you wait for content to load, or to visualize conten
<code src="./demo/element.tsx">Button/Avatar/Input/Image/Node</code>
<code src="./demo/children.tsx">Contains sub component</code>
<code src="./demo/list.tsx">List</code>
<code src="./demo/componentToken.tsx" debug>Custom component token</code>

## API

Expand Down
1 change: 1 addition & 0 deletions components/skeleton/index.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ coverDark: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*VcjGQLSrYdcAAA
<code src="./demo/element.tsx">按钮/头像/输入框/图像/自定义节点</code>
<code src="./demo/children.tsx">包含子组件</code>
<code src="./demo/list.tsx">列表</code>
<code src="./demo/componentToken.tsx" debug>自定义组件 Token</code>

## API

Expand Down
80 changes: 47 additions & 33 deletions components/skeleton/style/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,16 @@ import type { FullToken, GenerateStyle } from '../../theme/internal';
import { genComponentStyleHook, mergeToken } from '../../theme/internal';

export type ComponentToken = {
/** @deprecated use gradientFromColor instead. */
color: string;
/** @deprecated use gradientToColor instead. */
colorGradientEnd: string;
gradientFromColor: string;
gradientToColor: string;
titleHeight: number;
blockRadius: number;
paragraphMarginTop: number;
paragraphLiHeight: number;
};

const skeletonClsLoading = new Keyframes(`ant-skeleton-loading`, {
Expand All @@ -25,10 +33,6 @@ interface SkeletonToken extends FullToken<'Skeleton'> {
skeletonInputCls: string;
skeletonImageCls: string;
imageSizeBase: number;
skeletonTitleHeight: number;
skeletonBlockRadius: number;
skeletonParagraphLineHeight: number;
skeletonParagraphMarginTop: number;
skeletonLoadingBackground: string;
skeletonLoadingMotionDuration: string;
borderRadius: number;
Expand Down Expand Up @@ -60,12 +64,13 @@ const genSkeletonElementInputSize = (size: number): CSSObject => ({
});

const genSkeletonElementAvatar = (token: SkeletonToken): CSSObject => {
const { skeletonAvatarCls, color, controlHeight, controlHeightLG, controlHeightSM } = token;
const { skeletonAvatarCls, gradientFromColor, controlHeight, controlHeightLG, controlHeightSM } =
token;
return {
[`${skeletonAvatarCls}`]: {
display: 'inline-block',
verticalAlign: 'top',
background: color,
background: gradientFromColor,
...genSkeletonElementAvatarSize(controlHeight),
},
[`${skeletonAvatarCls}${skeletonAvatarCls}-circle`]: {
Expand All @@ -87,13 +92,13 @@ const genSkeletonElementInput = (token: SkeletonToken): CSSObject => {
skeletonInputCls,
controlHeightLG,
controlHeightSM,
color,
gradientFromColor,
} = token;
return {
[`${skeletonInputCls}`]: {
display: 'inline-block',
verticalAlign: 'top',
background: color,
background: gradientFromColor,
borderRadius: borderRadiusSM,
...genSkeletonElementInputSize(controlHeight),
},
Expand All @@ -114,14 +119,14 @@ const genSkeletonElementImageSize = (size: number): CSSObject => ({
});

const genSkeletonElementImage = (token: SkeletonToken): CSSObject => {
const { skeletonImageCls, imageSizeBase, color, borderRadiusSM } = token;
const { skeletonImageCls, imageSizeBase, gradientFromColor, borderRadiusSM } = token;
return {
[`${skeletonImageCls}`]: {
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
verticalAlign: 'top',
background: color,
background: gradientFromColor,
borderRadius: borderRadiusSM,
...genSkeletonElementImageSize(imageSizeBase * 2),
[`${skeletonImageCls}-path`]: {
Expand Down Expand Up @@ -172,13 +177,13 @@ const genSkeletonElementButton = (token: SkeletonToken): CSSObject => {
controlHeight,
controlHeightLG,
controlHeightSM,
color,
gradientFromColor,
} = token;
return {
[`${skeletonButtonCls}`]: {
display: 'inline-block',
verticalAlign: 'top',
background: color,
background: gradientFromColor,
borderRadius: borderRadiusSM,
width: controlHeight * 2,
minWidth: controlHeight * 2,
Expand Down Expand Up @@ -211,15 +216,15 @@ const genBaseStyle: GenerateStyle<SkeletonToken> = (token: SkeletonToken) => {
controlHeight,
controlHeightLG,
controlHeightSM,
color,
gradientFromColor,
padding,
marginSM,
borderRadius,
skeletonTitleHeight,
skeletonBlockRadius,
skeletonParagraphLineHeight,
titleHeight,
blockRadius,
paragraphLiHeight,
controlHeightXS,
skeletonParagraphMarginTop,
paragraphMarginTop,
} = token;

return {
Expand All @@ -236,7 +241,7 @@ const genBaseStyle: GenerateStyle<SkeletonToken> = (token: SkeletonToken) => {
[`${skeletonAvatarCls}`]: {
display: 'inline-block',
verticalAlign: 'top',
background: color,
background: gradientFromColor,
...genSkeletonElementAvatarSize(controlHeight),
},
[`${skeletonAvatarCls}-circle`]: {
Expand All @@ -257,9 +262,9 @@ const genBaseStyle: GenerateStyle<SkeletonToken> = (token: SkeletonToken) => {
// Title
[`${skeletonTitleCls}`]: {
width: '100%',
height: skeletonTitleHeight,
background: color,
borderRadius: skeletonBlockRadius,
height: titleHeight,
background: gradientFromColor,
borderRadius: blockRadius,
[`+ ${skeletonParagraphCls}`]: {
marginBlockStart: controlHeightSM,
},
Expand All @@ -270,10 +275,10 @@ const genBaseStyle: GenerateStyle<SkeletonToken> = (token: SkeletonToken) => {
padding: 0,
'> li': {
width: '100%',
height: skeletonParagraphLineHeight,
height: paragraphLiHeight,
listStyle: 'none',
background: color,
borderRadius: skeletonBlockRadius,
background: gradientFromColor,
borderRadius: blockRadius,
'+ li': {
marginBlockStart: controlHeightXS,
},
Expand All @@ -297,7 +302,7 @@ const genBaseStyle: GenerateStyle<SkeletonToken> = (token: SkeletonToken) => {
marginBlockStart: marginSM,

[`+ ${skeletonParagraphCls}`]: {
marginBlockStart: skeletonParagraphMarginTop,
marginBlockStart: paragraphMarginTop,
},
},
},
Expand Down Expand Up @@ -353,22 +358,31 @@ export default genComponentStyleHook(
skeletonInputCls: `${componentCls}-input`,
skeletonImageCls: `${componentCls}-image`,
imageSizeBase: token.controlHeight * 1.5,
skeletonTitleHeight: token.controlHeight / 2,
skeletonBlockRadius: token.borderRadiusSM,
skeletonParagraphLineHeight: token.controlHeight / 2,
skeletonParagraphMarginTop: token.marginLG + token.marginXXS,
borderRadius: 100, // Large number to make capsule shape
skeletonLoadingBackground: `linear-gradient(90deg, ${token.color} 25%, ${token.colorGradientEnd} 37%, ${token.color} 63%)`,
skeletonLoadingBackground: `linear-gradient(90deg, ${token.gradientFromColor} 25%, ${token.gradientToColor} 37%, ${token.gradientFromColor} 63%)`,
skeletonLoadingMotionDuration: '1.4s',
});
return [genBaseStyle(skeletonToken)];
},
(token) => {
const { colorFillContent, colorFill } = token;

const gradientFromColor = colorFillContent;
const gradientToColor = colorFill;
return {
color: colorFillContent,
colorGradientEnd: colorFill,
color: gradientFromColor,
colorGradientEnd: gradientToColor,
gradientFromColor,
gradientToColor,
titleHeight: token.controlHeight / 2,
blockRadius: token.borderRadiusSM,
paragraphMarginTop: token.marginLG + token.marginXXS,
paragraphLiHeight: token.controlHeight / 2,
};
},
{
deprecatedTokens: [
['color', 'gradientFromColor'],
['colorGradientEnd', 'gradientToColor'],
],
},
);
32 changes: 31 additions & 1 deletion components/theme/util/genComponentStyleHook.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/* eslint-disable no-redeclare */
import type { CSSInterpolation } from '@ant-design/cssinjs';
import { useStyleRegister } from '@ant-design/cssinjs';
import { warning } from 'rc-util';
import { useContext } from 'react';
import { ConfigContext } from '../../config-provider/context';
import { genCommonStyle, genLinkStyle } from '../../style';
Expand All @@ -13,6 +14,13 @@ export type OverrideComponent = keyof OverrideTokenWithoutDerivative;
export type GlobalTokenWithComponent<ComponentName extends OverrideComponent> = GlobalToken &
ComponentTokenMap[ComponentName];

type ComponentToken<ComponentName extends OverrideComponent> = Exclude<
OverrideTokenWithoutDerivative[ComponentName],
undefined
>;
type ComponentTokenKey<ComponentName extends OverrideComponent> =
keyof ComponentToken<ComponentName>;

export interface StyleInfo<ComponentName extends OverrideComponent> {
hashId: string;
prefixCls: string;
Expand Down Expand Up @@ -43,6 +51,8 @@ export default function genComponentStyleHook<ComponentName extends OverrideComp
| ((token: GlobalToken) => OverrideTokenWithoutDerivative[ComponentName]),
options?: {
resetStyle?: boolean;
// Deprecated token key map [["oldTokenKey", "newTokenKey"], ["oldTokenKey", "newTokenKey"]]
deprecatedTokens?: [ComponentTokenKey<ComponentName>, ComponentTokenKey<ComponentName>][];
},
) {
return (prefixCls: string): UseComponentStyleResult => {
Expand Down Expand Up @@ -72,7 +82,27 @@ export default function genComponentStyleHook<ComponentName extends OverrideComp

const defaultComponentToken =
typeof getDefaultToken === 'function' ? getDefaultToken(proxyToken) : getDefaultToken;
const mergedComponentToken = { ...defaultComponentToken, ...token[component] };
const customComponentToken = token[component] as ComponentToken<ComponentName>;
const mergedComponentToken = { ...defaultComponentToken, ...customComponentToken };

if (options?.deprecatedTokens) {
const { deprecatedTokens } = options;
deprecatedTokens.forEach(([oldTokenKey, newTokenKey]) => {
if (process.env.NODE_ENV !== 'production') {
warning(
!customComponentToken?.[oldTokenKey],
`The token '${String(oldTokenKey)}' of ${component} had deprecated, use '${String(
newTokenKey,
)}' instead.`,
);
}

mergedComponentToken[newTokenKey] =
customComponentToken?.[newTokenKey] ||
customComponentToken?.[oldTokenKey] ||
defaultComponentToken[newTokenKey];
});
}

const componentCls = `.${prefixCls}`;
const mergedToken = mergeToken<
Expand Down
13 changes: 12 additions & 1 deletion docs/react/migrate-less-variables.en-US.md
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,18 @@ This document contains the correspondence between all the less variables related

<!-- ### Select -->

<!-- ### Skeleton -->
### Skeleton

<!-- prettier-ignore -->
| Less variables | Component Token | Note |
| --- | --- | --- |
| `@skeleton-block-radius` | `blockRadius` | - |
| `@skeleton-title-height` | `titleHeight` | - |
| `@skeleton-color` | `gradientFromColor` | - |
| `@skeleton-to-color` | `gradientToColor` | - |
| `@skeleton-paragraph-margin-top` | `paragraphMarginTop` | - |
| `@skeleton-paragraph-li-height` | `paragraphLiHeight` | - |
| `@skeleton-paragraph-li-margin-top` | - | 由于样式变化已废弃 |

<!-- ### Slider -->

Expand Down