123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405 |
- "use strict";
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.prepareComponentToken = exports.default = void 0;
- var _cssinjs = require("@ant-design/cssinjs");
- var _style = require("../../style");
- var _fade = require("../../style/motion/fade");
- var _internal = require("../../theme/internal");
- var _util = _interopRequireDefault(require("../util"));
- var _keyframes = _interopRequireDefault(require("./keyframes"));
- // ============================== Group ==============================
- const floatButtonGroupStyle = token => {
- const {
- antCls,
- componentCls,
- floatButtonSize,
- margin,
- borderRadiusLG,
- borderRadiusSM,
- badgeOffset,
- floatButtonBodyPadding,
- zIndexPopupBase,
- calc
- } = token;
- const groupPrefixCls = `${componentCls}-group`;
- return {
- [groupPrefixCls]: Object.assign(Object.assign({}, (0, _style.resetComponent)(token)), {
- zIndex: zIndexPopupBase,
- display: 'flex',
- flexDirection: 'column',
- alignItems: 'center',
- justifyContent: 'center',
- border: 'none',
- position: 'fixed',
- height: 'auto',
- boxShadow: 'none',
- minWidth: floatButtonSize,
- minHeight: floatButtonSize,
- insetInlineEnd: token.floatButtonInsetInlineEnd,
- bottom: token.floatButtonInsetBlockEnd,
- borderRadius: borderRadiusLG,
- [`${groupPrefixCls}-wrap`]: {
- zIndex: -1,
- display: 'flex',
- justifyContent: 'center',
- alignItems: 'center',
- position: 'absolute'
- },
- [`&${groupPrefixCls}-rtl`]: {
- direction: 'rtl'
- },
- [componentCls]: {
- position: 'static'
- }
- }),
- [`${groupPrefixCls}-top > ${groupPrefixCls}-wrap`]: {
- flexDirection: 'column',
- top: 'auto',
- bottom: calc(floatButtonSize).add(margin).equal(),
- '&::after': {
- content: '""',
- position: 'absolute',
- width: '100%',
- height: margin,
- bottom: calc(margin).mul(-1).equal()
- }
- },
- [`${groupPrefixCls}-bottom > ${groupPrefixCls}-wrap`]: {
- flexDirection: 'column',
- top: calc(floatButtonSize).add(margin).equal(),
- bottom: 'auto',
- '&::after': {
- content: '""',
- position: 'absolute',
- width: '100%',
- height: margin,
- top: calc(margin).mul(-1).equal()
- }
- },
- [`${groupPrefixCls}-right > ${groupPrefixCls}-wrap`]: {
- flexDirection: 'row',
- left: {
- _skip_check_: true,
- value: calc(floatButtonSize).add(margin).equal()
- },
- right: {
- _skip_check_: true,
- value: 'auto'
- },
- '&::after': {
- content: '""',
- position: 'absolute',
- width: margin,
- height: '100%',
- left: {
- _skip_check_: true,
- value: calc(margin).mul(-1).equal()
- }
- }
- },
- [`${groupPrefixCls}-left > ${groupPrefixCls}-wrap`]: {
- flexDirection: 'row',
- left: {
- _skip_check_: true,
- value: 'auto'
- },
- right: {
- _skip_check_: true,
- value: calc(floatButtonSize).add(margin).equal()
- },
- '&::after': {
- content: '""',
- position: 'absolute',
- width: margin,
- height: '100%',
- right: {
- _skip_check_: true,
- value: calc(margin).mul(-1).equal()
- }
- }
- },
- [`${groupPrefixCls}-circle`]: {
- gap: margin,
- [`${groupPrefixCls}-wrap`]: {
- gap: margin
- }
- },
- [`${groupPrefixCls}-square`]: {
- [`${componentCls}-square`]: {
- padding: 0,
- borderRadius: 0,
- [`&${groupPrefixCls}-trigger`]: {
- borderRadius: borderRadiusLG
- },
- '&:first-child': {
- borderStartStartRadius: borderRadiusLG,
- borderStartEndRadius: borderRadiusLG
- },
- '&:last-child': {
- borderEndStartRadius: borderRadiusLG,
- borderEndEndRadius: borderRadiusLG
- },
- '&:not(:last-child)': {
- borderBottom: `${(0, _cssinjs.unit)(token.lineWidth)} ${token.lineType} ${token.colorSplit}`
- },
- [`${antCls}-badge`]: {
- [`${antCls}-badge-count`]: {
- top: calc(calc(floatButtonBodyPadding).add(badgeOffset)).mul(-1).equal(),
- insetInlineEnd: calc(calc(floatButtonBodyPadding).add(badgeOffset)).mul(-1).equal()
- }
- }
- },
- [`${groupPrefixCls}-wrap`]: {
- borderRadius: borderRadiusLG,
- boxShadow: token.boxShadowSecondary,
- [`${componentCls}-square`]: {
- boxShadow: 'none',
- borderRadius: 0,
- padding: floatButtonBodyPadding,
- [`${componentCls}-body`]: {
- width: token.floatButtonBodySize,
- height: token.floatButtonBodySize,
- borderRadius: borderRadiusSM
- }
- }
- }
- },
- [`${groupPrefixCls}-top > ${groupPrefixCls}-wrap, ${groupPrefixCls}-bottom > ${groupPrefixCls}-wrap`]: {
- [`> ${componentCls}-square`]: {
- '&:first-child': {
- borderStartStartRadius: borderRadiusLG,
- borderStartEndRadius: borderRadiusLG
- },
- '&:last-child': {
- borderEndStartRadius: borderRadiusLG,
- borderEndEndRadius: borderRadiusLG
- },
- '&:not(:last-child)': {
- borderBottom: `${(0, _cssinjs.unit)(token.lineWidth)} ${token.lineType} ${token.colorSplit}`
- }
- }
- },
- [`${groupPrefixCls}-left > ${groupPrefixCls}-wrap, ${groupPrefixCls}-right > ${groupPrefixCls}-wrap`]: {
- [`> ${componentCls}-square`]: {
- '&:first-child': {
- borderStartStartRadius: borderRadiusLG,
- borderEndStartRadius: borderRadiusLG
- },
- '&:last-child': {
- borderStartEndRadius: borderRadiusLG,
- borderEndEndRadius: borderRadiusLG
- },
- '&:not(:last-child)': {
- borderBottom: 'none',
- borderInlineEnd: `${(0, _cssinjs.unit)(token.lineWidth)} ${token.lineType} ${token.colorSplit}`
- }
- }
- },
- [`${groupPrefixCls}-circle-shadow`]: {
- boxShadow: 'none'
- },
- [`${groupPrefixCls}-square-shadow`]: {
- boxShadow: token.boxShadowSecondary,
- [`${componentCls}-square`]: {
- boxShadow: 'none',
- padding: floatButtonBodyPadding,
- [`${componentCls}-body`]: {
- width: token.floatButtonBodySize,
- height: token.floatButtonBodySize,
- borderRadius: borderRadiusSM
- }
- }
- }
- };
- };
- // ============================== Shared ==============================
- const sharedFloatButtonStyle = token => {
- const {
- antCls,
- componentCls,
- floatButtonBodyPadding,
- floatButtonIconSize,
- floatButtonSize,
- borderRadiusLG,
- badgeOffset,
- dotOffsetInSquare,
- dotOffsetInCircle,
- zIndexPopupBase,
- calc
- } = token;
- return {
- [componentCls]: Object.assign(Object.assign({}, (0, _style.resetComponent)(token)), {
- border: 'none',
- position: 'fixed',
- cursor: 'pointer',
- zIndex: zIndexPopupBase,
- // Do not remove the 'display: block' here.
- // Deleting it will cause marginBottom to become ineffective.
- // Ref: https://github.com/ant-design/ant-design/issues/44700
- display: 'block',
- width: floatButtonSize,
- height: floatButtonSize,
- insetInlineEnd: token.floatButtonInsetInlineEnd,
- bottom: token.floatButtonInsetBlockEnd,
- boxShadow: token.boxShadowSecondary,
- // Pure Panel
- '&-pure': {
- position: 'relative',
- inset: 'auto'
- },
- '&:empty': {
- display: 'none'
- },
- [`${antCls}-badge`]: {
- width: '100%',
- height: '100%',
- [`${antCls}-badge-count`]: {
- transform: 'translate(0, 0)',
- transformOrigin: 'center',
- top: calc(badgeOffset).mul(-1).equal(),
- insetInlineEnd: calc(badgeOffset).mul(-1).equal()
- }
- },
- [`${componentCls}-body`]: {
- width: '100%',
- height: '100%',
- display: 'flex',
- justifyContent: 'center',
- alignItems: 'center',
- transition: `all ${token.motionDurationMid}`,
- [`${componentCls}-content`]: {
- overflow: 'hidden',
- textAlign: 'center',
- minHeight: floatButtonSize,
- display: 'flex',
- flexDirection: 'column',
- justifyContent: 'center',
- alignItems: 'center',
- padding: `${(0, _cssinjs.unit)(calc(floatButtonBodyPadding).div(2).equal())} ${(0, _cssinjs.unit)(floatButtonBodyPadding)}`,
- [`${componentCls}-icon`]: {
- textAlign: 'center',
- margin: 'auto',
- width: floatButtonIconSize,
- fontSize: floatButtonIconSize,
- lineHeight: 1
- }
- }
- }
- }),
- [`${componentCls}-rtl`]: {
- direction: 'rtl'
- },
- [`${componentCls}-circle`]: {
- height: floatButtonSize,
- borderRadius: '50%',
- [`${antCls}-badge`]: {
- [`${antCls}-badge-dot`]: {
- top: dotOffsetInCircle,
- insetInlineEnd: dotOffsetInCircle
- }
- },
- [`${componentCls}-body`]: {
- borderRadius: '50%'
- }
- },
- [`${componentCls}-square`]: {
- height: 'auto',
- minHeight: floatButtonSize,
- borderRadius: borderRadiusLG,
- [`${antCls}-badge`]: {
- [`${antCls}-badge-dot`]: {
- top: dotOffsetInSquare,
- insetInlineEnd: dotOffsetInSquare
- }
- },
- [`${componentCls}-body`]: {
- height: 'auto',
- borderRadius: borderRadiusLG
- }
- },
- [`${componentCls}-default`]: {
- backgroundColor: token.floatButtonBackgroundColor,
- transition: `background-color ${token.motionDurationMid}`,
- [`${componentCls}-body`]: {
- backgroundColor: token.floatButtonBackgroundColor,
- transition: `background-color ${token.motionDurationMid}`,
- '&:hover': {
- backgroundColor: token.colorFillContent
- },
- [`${componentCls}-content`]: {
- [`${componentCls}-icon`]: {
- color: token.colorText
- },
- [`${componentCls}-description`]: {
- display: 'flex',
- alignItems: 'center',
- lineHeight: (0, _cssinjs.unit)(token.fontSizeLG),
- color: token.colorText,
- fontSize: token.fontSizeSM
- }
- }
- }
- },
- [`${componentCls}-primary`]: {
- backgroundColor: token.colorPrimary,
- [`${componentCls}-body`]: {
- backgroundColor: token.colorPrimary,
- transition: `background-color ${token.motionDurationMid}`,
- '&:hover': {
- backgroundColor: token.colorPrimaryHover
- },
- [`${componentCls}-content`]: {
- [`${componentCls}-icon`]: {
- color: token.colorTextLightSolid
- },
- [`${componentCls}-description`]: {
- display: 'flex',
- alignItems: 'center',
- lineHeight: (0, _cssinjs.unit)(token.fontSizeLG),
- color: token.colorTextLightSolid,
- fontSize: token.fontSizeSM
- }
- }
- }
- }
- };
- };
- // ============================== Export ==============================
- const prepareComponentToken = token => ({
- dotOffsetInCircle: (0, _util.default)(token.controlHeightLG / 2),
- dotOffsetInSquare: (0, _util.default)(token.borderRadiusLG)
- });
- exports.prepareComponentToken = prepareComponentToken;
- var _default = exports.default = (0, _internal.genStyleHooks)('FloatButton', token => {
- const {
- colorTextLightSolid,
- colorBgElevated,
- controlHeightLG,
- marginXXL,
- marginLG,
- fontSize,
- fontSizeIcon,
- controlItemBgHover,
- paddingXXS,
- calc
- } = token;
- const floatButtonToken = (0, _internal.mergeToken)(token, {
- floatButtonBackgroundColor: colorBgElevated,
- floatButtonColor: colorTextLightSolid,
- floatButtonHoverBackgroundColor: controlItemBgHover,
- floatButtonFontSize: fontSize,
- floatButtonIconSize: calc(fontSizeIcon).mul(1.5).equal(),
- floatButtonSize: controlHeightLG,
- floatButtonInsetBlockEnd: marginXXL,
- floatButtonInsetInlineEnd: marginLG,
- floatButtonBodySize: calc(controlHeightLG).sub(calc(paddingXXS).mul(2)).equal(),
- // 这里的 paddingXXS 是简写,完整逻辑是 (controlHeightLG - (controlHeightLG - paddingXXS * 2)) / 2,
- floatButtonBodyPadding: paddingXXS,
- badgeOffset: calc(paddingXXS).mul(1.5).equal()
- });
- return [floatButtonGroupStyle(floatButtonToken), sharedFloatButtonStyle(floatButtonToken), (0, _fade.initFadeMotion)(token), (0, _keyframes.default)(floatButtonToken)];
- }, prepareComponentToken);
|