vuecssuiant-designantdreactantantd-vueenterprisefrontendui-designvue-antdvue-antd-uivue3vuecomponent
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
4.2 KiB
133 lines
4.2 KiB
import type { CSSObject } from '../../_util/cssinjs'; |
|
import type { StepsToken } from '.'; |
|
import type { GenerateStyle } from '../../theme/internal'; |
|
|
|
const genStepsProgressDotStyle: GenerateStyle<StepsToken, CSSObject> = token => { |
|
const { |
|
componentCls, |
|
descriptionWidth, |
|
lineHeight, |
|
stepsCurrentDotSize, |
|
stepsDotSize, |
|
motionDurationSlow, |
|
} = token; |
|
|
|
return { |
|
[`&${componentCls}-dot, &${componentCls}-dot${componentCls}-small`]: { |
|
[`${componentCls}-item`]: { |
|
'&-title': { |
|
lineHeight, |
|
}, |
|
|
|
'&-tail': { |
|
top: Math.floor((token.stepsDotSize - token.lineWidth * 3) / 2), |
|
width: '100%', |
|
marginTop: 0, |
|
marginBottom: 0, |
|
marginInline: `${descriptionWidth / 2}px 0`, |
|
padding: 0, |
|
|
|
'&::after': { |
|
width: `calc(100% - ${token.marginSM * 2}px)`, |
|
height: token.lineWidth * 3, |
|
marginInlineStart: token.marginSM, |
|
}, |
|
}, |
|
'&-icon': { |
|
width: stepsDotSize, |
|
height: stepsDotSize, |
|
marginInlineStart: (token.descriptionWidth - stepsDotSize) / 2, |
|
paddingInlineEnd: 0, |
|
lineHeight: `${stepsDotSize}px`, |
|
background: 'transparent', |
|
border: 0, |
|
|
|
[`${componentCls}-icon-dot`]: { |
|
position: 'relative', |
|
float: 'left', |
|
width: '100%', |
|
height: '100%', |
|
borderRadius: 100, // very large number |
|
transition: `all ${motionDurationSlow}`, |
|
|
|
/* expand hover area */ |
|
'&::after': { |
|
position: 'absolute', |
|
top: -token.marginSM, |
|
insetInlineStart: (stepsDotSize - token.controlHeightLG * 1.5) / 2, |
|
width: token.controlHeightLG * 1.5, |
|
height: token.controlHeight, |
|
background: 'transparent', |
|
content: '""', |
|
}, |
|
}, |
|
}, |
|
|
|
'&-content': { |
|
width: descriptionWidth, |
|
}, |
|
[`&-process ${componentCls}-item-icon`]: { |
|
position: 'relative', |
|
top: (stepsDotSize - stepsCurrentDotSize) / 2, |
|
width: stepsCurrentDotSize, |
|
height: stepsCurrentDotSize, |
|
lineHeight: `${stepsCurrentDotSize}px`, |
|
background: 'none', |
|
marginInlineStart: (token.descriptionWidth - stepsCurrentDotSize) / 2, |
|
}, |
|
[`&-process ${componentCls}-icon`]: { |
|
[`&:first-child ${componentCls}-icon-dot`]: { |
|
insetInlineStart: 0, |
|
}, |
|
}, |
|
}, |
|
}, |
|
[`&${componentCls}-vertical${componentCls}-dot`]: { |
|
[`${componentCls}-item-icon`]: { |
|
marginTop: (token.controlHeight - stepsDotSize) / 2, |
|
marginInlineStart: 0, |
|
background: 'none', |
|
}, |
|
[`${componentCls}-item-process ${componentCls}-item-icon`]: { |
|
marginTop: (token.controlHeight - stepsCurrentDotSize) / 2, |
|
top: 0, |
|
insetInlineStart: (stepsDotSize - stepsCurrentDotSize) / 2, |
|
marginInlineStart: 0, |
|
}, |
|
|
|
// https://github.com/ant-design/ant-design/issues/18354 |
|
[`${componentCls}-item > ${componentCls}-item-container > ${componentCls}-item-tail`]: { |
|
top: (token.controlHeight - stepsDotSize) / 2, |
|
insetInlineStart: 0, |
|
margin: 0, |
|
padding: `${stepsDotSize + token.paddingXS}px 0 ${token.paddingXS}px`, |
|
|
|
'&::after': { |
|
marginInlineStart: (stepsDotSize - token.lineWidth) / 2, |
|
}, |
|
}, |
|
|
|
[`&${componentCls}-small`]: { |
|
[`${componentCls}-item-icon`]: { |
|
marginTop: (token.controlHeightSM - stepsDotSize) / 2, |
|
}, |
|
[`${componentCls}-item-process ${componentCls}-item-icon`]: { |
|
marginTop: (token.controlHeightSM - stepsCurrentDotSize) / 2, |
|
}, |
|
|
|
[`${componentCls}-item > ${componentCls}-item-container > ${componentCls}-item-tail`]: { |
|
top: (token.controlHeightSM - stepsDotSize) / 2, |
|
}, |
|
}, |
|
|
|
[`${componentCls}-item:first-child ${componentCls}-icon-dot`]: { |
|
insetInlineStart: 0, |
|
}, |
|
[`${componentCls}-item-content`]: { |
|
width: 'inherit', |
|
}, |
|
}, |
|
}; |
|
}; |
|
|
|
export default genStepsProgressDotStyle;
|
|
|