mirror of
https://github.com/ant-design/ant-design.git
synced 2024-12-24 07:28:28 +08:00
502dac12aa
* docs: fix code * feat: lint * feat: prettier * feat: test * feat: review * feat: format html * feat: format html
172 lines
4.3 KiB
TypeScript
172 lines
4.3 KiB
TypeScript
import type { CSSProperties } from 'react';
|
|
import type { CSSObject } from '@ant-design/cssinjs';
|
|
import { unit } from '@ant-design/cssinjs';
|
|
|
|
import type { FullToken, GenerateStyle, GetDefaultToken } from '../../theme/internal';
|
|
import { genStyleHooks, mergeToken } from '../../theme/internal';
|
|
|
|
export interface ComponentToken {
|
|
/**
|
|
* @desc 标题字体大小
|
|
* @descEN Title font size
|
|
*/
|
|
titleFontSize: number;
|
|
/**
|
|
* @desc 副标题字体大小
|
|
* @descEN Subtitle font size
|
|
*/
|
|
subtitleFontSize: number;
|
|
/**
|
|
* @desc 图标大小
|
|
* @descEN Icon size
|
|
*/
|
|
iconFontSize: number;
|
|
/**
|
|
* @desc 额外区域外间距
|
|
* @descEN Margin of extra area
|
|
*/
|
|
extraMargin: CSSProperties['margin'];
|
|
}
|
|
|
|
interface ResultToken extends FullToken<'Result'> {
|
|
imageWidth: number;
|
|
imageHeight: number;
|
|
resultInfoIconColor: string;
|
|
resultSuccessIconColor: string;
|
|
resultWarningIconColor: string;
|
|
resultErrorIconColor: string;
|
|
}
|
|
|
|
// ============================== Styles ==============================
|
|
const genBaseStyle: GenerateStyle<ResultToken> = (token): CSSObject => {
|
|
const {
|
|
componentCls,
|
|
lineHeightHeading3,
|
|
iconCls,
|
|
padding,
|
|
paddingXL,
|
|
paddingXS,
|
|
paddingLG,
|
|
marginXS,
|
|
lineHeight,
|
|
} = token;
|
|
|
|
return {
|
|
// Result
|
|
[componentCls]: {
|
|
padding: `${unit(token.calc(paddingLG).mul(2).equal())} ${unit(paddingXL)}`,
|
|
|
|
// RTL
|
|
'&-rtl': {
|
|
direction: 'rtl',
|
|
},
|
|
},
|
|
|
|
// Exception Status image
|
|
[`${componentCls} ${componentCls}-image`]: {
|
|
width: token.imageWidth,
|
|
height: token.imageHeight,
|
|
margin: 'auto',
|
|
},
|
|
|
|
[`${componentCls} ${componentCls}-icon`]: {
|
|
marginBottom: paddingLG,
|
|
textAlign: 'center',
|
|
|
|
[`& > ${iconCls}`]: {
|
|
fontSize: token.iconFontSize,
|
|
},
|
|
},
|
|
|
|
[`${componentCls} ${componentCls}-title`]: {
|
|
color: token.colorTextHeading,
|
|
fontSize: token.titleFontSize,
|
|
lineHeight: lineHeightHeading3,
|
|
marginBlock: marginXS,
|
|
textAlign: 'center',
|
|
},
|
|
|
|
[`${componentCls} ${componentCls}-subtitle`]: {
|
|
color: token.colorTextDescription,
|
|
fontSize: token.subtitleFontSize,
|
|
lineHeight,
|
|
textAlign: 'center',
|
|
},
|
|
|
|
[`${componentCls} ${componentCls}-content`]: {
|
|
marginTop: paddingLG,
|
|
padding: `${unit(paddingLG)} ${unit(token.calc(padding).mul(2.5).equal())}`,
|
|
backgroundColor: token.colorFillAlter,
|
|
},
|
|
|
|
[`${componentCls} ${componentCls}-extra`]: {
|
|
margin: token.extraMargin,
|
|
textAlign: 'center',
|
|
|
|
'& > *': {
|
|
marginInlineEnd: paddingXS,
|
|
|
|
'&:last-child': {
|
|
marginInlineEnd: 0,
|
|
},
|
|
},
|
|
},
|
|
};
|
|
};
|
|
|
|
const genStatusIconStyle: GenerateStyle<ResultToken> = (token) => {
|
|
const { componentCls, iconCls } = token;
|
|
|
|
return {
|
|
[`${componentCls}-success ${componentCls}-icon > ${iconCls}`]: {
|
|
color: token.resultSuccessIconColor,
|
|
},
|
|
[`${componentCls}-error ${componentCls}-icon > ${iconCls}`]: {
|
|
color: token.resultErrorIconColor,
|
|
},
|
|
[`${componentCls}-info ${componentCls}-icon > ${iconCls}`]: {
|
|
color: token.resultInfoIconColor,
|
|
},
|
|
[`${componentCls}-warning ${componentCls}-icon > ${iconCls}`]: {
|
|
color: token.resultWarningIconColor,
|
|
},
|
|
};
|
|
};
|
|
|
|
const genResultStyle: GenerateStyle<ResultToken> = (token) => [
|
|
genBaseStyle(token),
|
|
genStatusIconStyle(token),
|
|
];
|
|
|
|
const getStyle: GenerateStyle<ResultToken> = (token) => genResultStyle(token);
|
|
|
|
// ============================== Export ==============================
|
|
export const prepareComponentToken: GetDefaultToken<'Result'> = (token) => ({
|
|
titleFontSize: token.fontSizeHeading3,
|
|
subtitleFontSize: token.fontSize,
|
|
iconFontSize: token.fontSizeHeading3 * 3,
|
|
extraMargin: `${token.paddingLG}px 0 0 0`,
|
|
});
|
|
|
|
export default genStyleHooks(
|
|
'Result',
|
|
(token) => {
|
|
const resultInfoIconColor = token.colorInfo;
|
|
const resultErrorIconColor = token.colorError;
|
|
const resultSuccessIconColor = token.colorSuccess;
|
|
const resultWarningIconColor = token.colorWarning;
|
|
|
|
const resultToken = mergeToken<ResultToken>(token, {
|
|
resultInfoIconColor,
|
|
resultErrorIconColor,
|
|
resultSuccessIconColor,
|
|
resultWarningIconColor,
|
|
imageWidth: 250,
|
|
imageHeight: 295,
|
|
});
|
|
|
|
return [getStyle(resultToken)];
|
|
},
|
|
prepareComponentToken,
|
|
);
|