85 lines
2.5 KiB
JavaScript
85 lines
2.5 KiB
JavaScript
|
import { genComponentStyleHook, mergeToken } from '../../theme/internal';
|
||
|
import { resetComponent } from '../../style';
|
||
|
// ============================== Shared ==============================
|
||
|
const genSharedBackTopStyle = token => {
|
||
|
const {
|
||
|
componentCls,
|
||
|
backTopFontSize,
|
||
|
backTopSize,
|
||
|
zIndexPopup
|
||
|
} = token;
|
||
|
return {
|
||
|
[componentCls]: Object.assign(Object.assign({}, resetComponent(token)), {
|
||
|
position: 'fixed',
|
||
|
insetInlineEnd: token.backTopInlineEnd,
|
||
|
insetBlockEnd: token.backTopBlockEnd,
|
||
|
zIndex: zIndexPopup,
|
||
|
width: 40,
|
||
|
height: 40,
|
||
|
cursor: 'pointer',
|
||
|
'&:empty': {
|
||
|
display: 'none'
|
||
|
},
|
||
|
[`${componentCls}-content`]: {
|
||
|
width: backTopSize,
|
||
|
height: backTopSize,
|
||
|
overflow: 'hidden',
|
||
|
color: token.backTopColor,
|
||
|
textAlign: 'center',
|
||
|
backgroundColor: token.backTopBackground,
|
||
|
borderRadius: backTopSize,
|
||
|
transition: `all ${token.motionDurationMid}`,
|
||
|
'&:hover': {
|
||
|
backgroundColor: token.backTopHoverBackground,
|
||
|
transition: `all ${token.motionDurationMid}`
|
||
|
}
|
||
|
},
|
||
|
// change to .backtop .backtop-icon
|
||
|
[`${componentCls}-icon`]: {
|
||
|
fontSize: backTopFontSize,
|
||
|
lineHeight: `${backTopSize}px`
|
||
|
}
|
||
|
})
|
||
|
};
|
||
|
};
|
||
|
const genMediaBackTopStyle = token => {
|
||
|
const {
|
||
|
componentCls
|
||
|
} = token;
|
||
|
return {
|
||
|
[`@media (max-width: ${token.screenMD}px)`]: {
|
||
|
[componentCls]: {
|
||
|
insetInlineEnd: token.backTopInlineEndMD
|
||
|
}
|
||
|
},
|
||
|
[`@media (max-width: ${token.screenXS}px)`]: {
|
||
|
[componentCls]: {
|
||
|
insetInlineEnd: token.backTopInlineEndXS
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
};
|
||
|
// ============================== Export ==============================
|
||
|
export default genComponentStyleHook('BackTop', token => {
|
||
|
const {
|
||
|
fontSizeHeading3,
|
||
|
colorTextDescription,
|
||
|
colorTextLightSolid,
|
||
|
colorText,
|
||
|
controlHeightLG
|
||
|
} = token;
|
||
|
const backTopToken = mergeToken(token, {
|
||
|
backTopBackground: colorTextDescription,
|
||
|
backTopColor: colorTextLightSolid,
|
||
|
backTopHoverBackground: colorText,
|
||
|
backTopFontSize: fontSizeHeading3,
|
||
|
backTopSize: controlHeightLG,
|
||
|
backTopBlockEnd: controlHeightLG * 1.25,
|
||
|
backTopInlineEnd: controlHeightLG * 2.5,
|
||
|
backTopInlineEndMD: controlHeightLG * 1.5,
|
||
|
backTopInlineEndXS: controlHeightLG * 0.5
|
||
|
});
|
||
|
return [genSharedBackTopStyle(backTopToken), genMediaBackTopStyle(backTopToken)];
|
||
|
}, token => ({
|
||
|
zIndexPopup: token.zIndexBase + 10
|
||
|
}));
|