2022-03-25 14:26:09 +08:00
|
|
|
// deps-lint-skip-all
|
|
|
|
import { CSSObject, Keyframes } from '@ant-design/cssinjs';
|
2022-04-11 16:04:00 +08:00
|
|
|
import {
|
|
|
|
resetComponent,
|
|
|
|
GenerateStyle,
|
|
|
|
FullToken,
|
|
|
|
genComponentStyleHook,
|
|
|
|
mergeToken,
|
|
|
|
} from '../../_util/theme';
|
2022-04-08 15:28:24 +08:00
|
|
|
|
|
|
|
interface SpinToken extends FullToken<'Spin'> {
|
2022-03-25 14:26:09 +08:00
|
|
|
spinDotDefault: string;
|
|
|
|
spinDotSize: number;
|
|
|
|
spinDotSizeSM: number;
|
|
|
|
spinDotSizeLG: number;
|
|
|
|
}
|
|
|
|
|
|
|
|
const antSpinMove = new Keyframes('antSpinMove', {
|
|
|
|
to: { opacity: 1 },
|
|
|
|
});
|
|
|
|
|
|
|
|
const antRotate = new Keyframes('antRotate', {
|
|
|
|
to: { transform: 'rotate(405deg)' },
|
|
|
|
});
|
|
|
|
|
|
|
|
const genSpinStyle: GenerateStyle<SpinToken> = (token: SpinToken, hashId: string): CSSObject => ({
|
2022-04-08 15:28:24 +08:00
|
|
|
[`${token.componentCls}`]: {
|
2022-03-25 14:26:09 +08:00
|
|
|
...resetComponent(token),
|
|
|
|
position: 'absolute',
|
|
|
|
display: 'none',
|
|
|
|
color: token.colorPrimary,
|
|
|
|
textAlign: 'center',
|
|
|
|
verticalAlign: 'middle',
|
|
|
|
opacity: 0,
|
|
|
|
transition: `transform ${token.motionDurationSlow} ${token.motionEaseInOutCirc}`,
|
|
|
|
|
|
|
|
'&-spinning': {
|
|
|
|
position: 'static',
|
|
|
|
display: 'inline-block',
|
|
|
|
opacity: 1,
|
|
|
|
},
|
|
|
|
|
|
|
|
'&-nested-loading': {
|
|
|
|
position: 'relative',
|
2022-04-08 15:28:24 +08:00
|
|
|
[`> div > ${token.componentCls}`]: {
|
2022-03-25 14:26:09 +08:00
|
|
|
position: 'absolute',
|
|
|
|
top: 0,
|
|
|
|
insetInlineStart: 0,
|
|
|
|
zIndex: 4,
|
|
|
|
display: 'block',
|
|
|
|
width: '100%',
|
|
|
|
height: '100%',
|
|
|
|
maxHeight: 400, // FIXME: hard code in v4
|
|
|
|
|
2022-04-08 15:28:24 +08:00
|
|
|
[`${token.componentCls}-dot`]: {
|
2022-03-25 14:26:09 +08:00
|
|
|
position: 'absolute',
|
|
|
|
top: '50%',
|
|
|
|
insetInlineStart: '50%',
|
|
|
|
margin: -token.spinDotSize / 2,
|
|
|
|
},
|
|
|
|
|
2022-04-08 15:28:24 +08:00
|
|
|
[`${token.componentCls}-text`]: {
|
2022-03-25 14:26:09 +08:00
|
|
|
position: 'absolute',
|
|
|
|
top: '50%',
|
|
|
|
width: '100%',
|
|
|
|
paddingTop: (token.spinDotSize - token.fontSize) / 2 + 2,
|
|
|
|
textShadow: `0 1px 2px ${token.colorBgComponent}`,
|
|
|
|
},
|
|
|
|
|
2022-04-08 15:28:24 +08:00
|
|
|
[`&${token.componentCls}-show-text ${token.componentCls}-dot`]: {
|
2022-03-25 14:26:09 +08:00
|
|
|
marginTop: -(token.spinDotSize / 2) - 10,
|
|
|
|
},
|
|
|
|
|
2022-04-08 15:28:24 +08:00
|
|
|
[`> div > ${token.componentCls}-sm`]: {
|
|
|
|
[`${token.componentCls}-dot`]: {
|
2022-03-25 14:26:09 +08:00
|
|
|
margin: -token.spinDotSizeSM / 2,
|
|
|
|
},
|
2022-04-08 15:28:24 +08:00
|
|
|
[`${token.componentCls}-text`]: {
|
2022-03-25 14:26:09 +08:00
|
|
|
paddingTop: (token.spinDotSizeSM - token.fontSize) / 2 + 2,
|
|
|
|
},
|
2022-04-08 15:28:24 +08:00
|
|
|
[`&${token.componentCls}-show-text ${token.componentCls}-dot`]: {
|
2022-03-25 14:26:09 +08:00
|
|
|
marginTop: -(token.spinDotSizeSM / 2) - 10,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
2022-04-08 15:28:24 +08:00
|
|
|
[`> div > ${token.componentCls}-lg`]: {
|
|
|
|
[`${token.componentCls}-dot`]: {
|
2022-03-25 14:26:09 +08:00
|
|
|
margin: -(token.spinDotSizeLG / 2),
|
|
|
|
},
|
2022-04-08 15:28:24 +08:00
|
|
|
[`${token.componentCls}-text`]: {
|
2022-03-25 14:26:09 +08:00
|
|
|
paddingTop: (token.spinDotSizeLG - token.fontSize) / 2 + 2,
|
|
|
|
},
|
2022-04-08 15:28:24 +08:00
|
|
|
[`&${token.componentCls}-show-text ${token.componentCls}-dot`]: {
|
2022-03-25 14:26:09 +08:00
|
|
|
marginTop: -(token.spinDotSizeLG / 2) - 10,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
2022-04-08 15:28:24 +08:00
|
|
|
[`${token.componentCls}-container`]: {
|
2022-03-25 14:26:09 +08:00
|
|
|
position: 'relative',
|
|
|
|
transition: `opacity ${token.motionDurationSlow}`,
|
|
|
|
|
|
|
|
'&::after': {
|
|
|
|
position: 'absolute',
|
|
|
|
top: 0,
|
|
|
|
insetInlineEnd: 0,
|
|
|
|
bottom: 0,
|
|
|
|
insetInlineStart: 0,
|
|
|
|
zIndex: 10,
|
|
|
|
width: '100%',
|
|
|
|
height: '100%',
|
|
|
|
background: token.colorBgComponent,
|
|
|
|
opacity: 0,
|
|
|
|
transition: `all ${token.motionDurationSlow}`,
|
|
|
|
content: '""',
|
|
|
|
pointerEvents: 'none',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
2022-04-08 15:28:24 +08:00
|
|
|
[`${token.componentCls}-blur`]: {
|
2022-03-25 14:26:09 +08:00
|
|
|
clear: 'both',
|
|
|
|
opacity: 0.5,
|
|
|
|
userSelect: 'none',
|
|
|
|
pointerEvents: 'none',
|
|
|
|
|
|
|
|
[`&::after`]: {
|
|
|
|
opacity: 0.4,
|
|
|
|
pointerEvents: 'auto',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
// tip
|
|
|
|
// ------------------------------
|
|
|
|
[`&-tip`]: {
|
|
|
|
color: token.spinDotDefault,
|
|
|
|
},
|
|
|
|
|
|
|
|
// dots
|
|
|
|
// ------------------------------
|
2022-04-08 15:28:24 +08:00
|
|
|
[`${token.componentCls}-dot`]: {
|
2022-03-25 14:26:09 +08:00
|
|
|
position: 'relative',
|
|
|
|
display: 'inline-block',
|
|
|
|
fontSize: token.spinDotSize,
|
|
|
|
width: '1em',
|
|
|
|
height: '1em',
|
|
|
|
|
|
|
|
'&-item': {
|
|
|
|
position: 'absolute',
|
|
|
|
display: 'block',
|
|
|
|
width: 9, // FIXME: hard code in v4
|
|
|
|
height: 9, // FIXME: hard code in v4
|
|
|
|
backgroundColor: token.colorPrimary,
|
|
|
|
borderRadius: '100%',
|
|
|
|
transform: 'scale(0.75)',
|
|
|
|
transformOrigin: '50% 50%',
|
|
|
|
opacity: 0.3,
|
|
|
|
animation: `${antSpinMove.getName(hashId)} 1s infinite linear alternate`,
|
|
|
|
|
|
|
|
'&:nth-child(1)': {
|
|
|
|
top: 0,
|
|
|
|
insetInlineStart: 0,
|
|
|
|
},
|
|
|
|
|
|
|
|
'&:nth-child(2)': {
|
|
|
|
top: 0,
|
|
|
|
insetInlineEnd: 0,
|
|
|
|
animationDelay: '0.4s',
|
|
|
|
},
|
|
|
|
|
|
|
|
'&:nth-child(3)': {
|
|
|
|
insetInlineEnd: 0,
|
|
|
|
bottom: 0,
|
|
|
|
animationDelay: '0.8s',
|
|
|
|
},
|
|
|
|
|
|
|
|
'&:nth-child(4)': {
|
|
|
|
bottom: 0,
|
|
|
|
insetInlineStart: 0,
|
|
|
|
animationDelay: '1.2s',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
'&-spin': {
|
|
|
|
transform: 'rotate(45deg)',
|
|
|
|
animation: `${antRotate.getName(hashId)} 1.2s infinite linear`,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
// Sizes
|
|
|
|
// ------------------------------
|
|
|
|
|
|
|
|
// small
|
2022-04-08 15:28:24 +08:00
|
|
|
[`&-sm ${token.componentCls}-dot`]: {
|
2022-03-25 14:26:09 +08:00
|
|
|
fontSize: token.spinDotSizeSM,
|
|
|
|
|
|
|
|
i: {
|
|
|
|
width: 6, // FIXME: hard code in v4
|
|
|
|
height: 6, // FIXME: hard code in v4
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
// large
|
2022-04-08 15:28:24 +08:00
|
|
|
[`&-lg ${token.componentCls}-dot`]: {
|
2022-03-25 14:26:09 +08:00
|
|
|
fontSize: token.spinDotSizeLG,
|
|
|
|
|
|
|
|
i: {
|
|
|
|
width: 14, // FIXME: hard code in v4
|
|
|
|
height: 14, // FIXME: hard code in v4
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
2022-04-08 15:28:24 +08:00
|
|
|
[`&${token.componentCls}-show-text ${token.componentCls}-text`]: {
|
2022-03-25 14:26:09 +08:00
|
|
|
display: 'block',
|
|
|
|
},
|
|
|
|
|
|
|
|
// animation
|
|
|
|
antSpinMove,
|
|
|
|
antRotate,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
// ============================== Export ==============================
|
2022-04-08 15:28:24 +08:00
|
|
|
export default genComponentStyleHook('Spin', (token, { hashId }) => {
|
2022-04-11 16:04:00 +08:00
|
|
|
const spinToken = mergeToken<SpinToken>(token, {
|
2022-03-25 14:26:09 +08:00
|
|
|
spinDotDefault: token.colorTextSecondary,
|
|
|
|
spinDotSize: 20, // FIXME: hard code in v4
|
|
|
|
spinDotSizeSM: 14, // FIXME: hard code in v4
|
|
|
|
spinDotSizeLG: 32, // FIXME: hard code in v4
|
2022-04-11 16:04:00 +08:00
|
|
|
});
|
2022-04-08 15:28:24 +08:00
|
|
|
return [genSpinStyle(spinToken, hashId)];
|
|
|
|
});
|