123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307 |
- "use strict";
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.prepareComponentToken = exports.default = void 0;
- var _cssinjs = require("@ant-design/cssinjs");
- var _style = require("../../style");
- var _motion = require("../../style/motion");
- var _placementArrow = _interopRequireWildcard(require("../../style/placementArrow"));
- var _roundedArrow = require("../../style/roundedArrow");
- var _internal = require("../../theme/internal");
- var _status = _interopRequireDefault(require("./status"));
- // =============================== Base ===============================
- const genBaseStyle = token => {
- const {
- componentCls,
- menuCls,
- zIndexPopup,
- dropdownArrowDistance,
- sizePopupArrow,
- antCls,
- iconCls,
- motionDurationMid,
- paddingBlock,
- fontSize,
- dropdownEdgeChildPadding,
- colorTextDisabled,
- fontSizeIcon,
- controlPaddingHorizontal,
- colorBgElevated
- } = token;
- return [{
- [componentCls]: {
- position: 'absolute',
- top: -9999,
- left: {
- _skip_check_: true,
- value: -9999
- },
- zIndex: zIndexPopup,
- display: 'block',
- // A placeholder out of dropdown visible range to avoid close when user moving
- '&::before': {
- position: 'absolute',
- insetBlock: token.calc(sizePopupArrow).div(2).sub(dropdownArrowDistance).equal(),
- // insetInlineStart: -7, // FIXME: Seems not work for hidden element
- zIndex: -9999,
- opacity: 0.0001,
- content: '""'
- },
- // Makes vertical dropdowns have a scrollbar once they become taller than the viewport.
- '&-menu-vertical': {
- maxHeight: '100vh',
- overflowY: 'auto'
- },
- [`&-trigger${antCls}-btn`]: {
- [`& > ${iconCls}-down, & > ${antCls}-btn-icon > ${iconCls}-down`]: {
- fontSize: fontSizeIcon
- }
- },
- [`${componentCls}-wrap`]: {
- position: 'relative',
- [`${antCls}-btn > ${iconCls}-down`]: {
- fontSize: fontSizeIcon
- },
- [`${iconCls}-down::before`]: {
- transition: `transform ${motionDurationMid}`
- }
- },
- [`${componentCls}-wrap-open`]: {
- [`${iconCls}-down::before`]: {
- transform: `rotate(180deg)`
- }
- },
- [`
- &-hidden,
- &-menu-hidden,
- &-menu-submenu-hidden
- `]: {
- display: 'none'
- },
- // =============================================================
- // == Motion ==
- // =============================================================
- // When position is not enough for dropdown, the placement will revert.
- // We will handle this with revert motion name.
- [`&${antCls}-slide-down-enter${antCls}-slide-down-enter-active${componentCls}-placement-bottomLeft,
- &${antCls}-slide-down-appear${antCls}-slide-down-appear-active${componentCls}-placement-bottomLeft,
- &${antCls}-slide-down-enter${antCls}-slide-down-enter-active${componentCls}-placement-bottom,
- &${antCls}-slide-down-appear${antCls}-slide-down-appear-active${componentCls}-placement-bottom,
- &${antCls}-slide-down-enter${antCls}-slide-down-enter-active${componentCls}-placement-bottomRight,
- &${antCls}-slide-down-appear${antCls}-slide-down-appear-active${componentCls}-placement-bottomRight`]: {
- animationName: _motion.slideUpIn
- },
- [`&${antCls}-slide-up-enter${antCls}-slide-up-enter-active${componentCls}-placement-topLeft,
- &${antCls}-slide-up-appear${antCls}-slide-up-appear-active${componentCls}-placement-topLeft,
- &${antCls}-slide-up-enter${antCls}-slide-up-enter-active${componentCls}-placement-top,
- &${antCls}-slide-up-appear${antCls}-slide-up-appear-active${componentCls}-placement-top,
- &${antCls}-slide-up-enter${antCls}-slide-up-enter-active${componentCls}-placement-topRight,
- &${antCls}-slide-up-appear${antCls}-slide-up-appear-active${componentCls}-placement-topRight`]: {
- animationName: _motion.slideDownIn
- },
- [`&${antCls}-slide-down-leave${antCls}-slide-down-leave-active${componentCls}-placement-bottomLeft,
- &${antCls}-slide-down-leave${antCls}-slide-down-leave-active${componentCls}-placement-bottom,
- &${antCls}-slide-down-leave${antCls}-slide-down-leave-active${componentCls}-placement-bottomRight`]: {
- animationName: _motion.slideUpOut
- },
- [`&${antCls}-slide-up-leave${antCls}-slide-up-leave-active${componentCls}-placement-topLeft,
- &${antCls}-slide-up-leave${antCls}-slide-up-leave-active${componentCls}-placement-top,
- &${antCls}-slide-up-leave${antCls}-slide-up-leave-active${componentCls}-placement-topRight`]: {
- animationName: _motion.slideDownOut
- }
- }
- },
- // =============================================================
- // == Arrow style ==
- // =============================================================
- (0, _placementArrow.default)(token, colorBgElevated, {
- arrowPlacement: {
- top: true,
- bottom: true
- }
- }), {
- // =============================================================
- // == Menu ==
- // =============================================================
- [`${componentCls} ${menuCls}`]: {
- position: 'relative',
- margin: 0
- },
- [`${menuCls}-submenu-popup`]: {
- position: 'absolute',
- zIndex: zIndexPopup,
- background: 'transparent',
- boxShadow: 'none',
- transformOrigin: '0 0',
- 'ul, li': {
- listStyle: 'none',
- margin: 0
- }
- },
- [`${componentCls}, ${componentCls}-menu-submenu`]: Object.assign(Object.assign({}, (0, _style.resetComponent)(token)), {
- [menuCls]: Object.assign(Object.assign({
- padding: dropdownEdgeChildPadding,
- listStyleType: 'none',
- backgroundColor: colorBgElevated,
- backgroundClip: 'padding-box',
- borderRadius: token.borderRadiusLG,
- outline: 'none',
- boxShadow: token.boxShadowSecondary
- }, (0, _style.genFocusStyle)(token)), {
- '&:empty': {
- padding: 0,
- boxShadow: 'none'
- },
- [`${menuCls}-item-group-title`]: {
- padding: `${(0, _cssinjs.unit)(paddingBlock)} ${(0, _cssinjs.unit)(controlPaddingHorizontal)}`,
- color: token.colorTextDescription,
- transition: `all ${motionDurationMid}`
- },
- // ======================= Item Content =======================
- [`${menuCls}-item`]: {
- position: 'relative',
- display: 'flex',
- alignItems: 'center'
- },
- [`${menuCls}-item-icon`]: {
- minWidth: fontSize,
- marginInlineEnd: token.marginXS,
- fontSize: token.fontSizeSM
- },
- [`${menuCls}-title-content`]: {
- flex: 'auto',
- '&-with-extra': {
- display: 'inline-flex',
- alignItems: 'center',
- width: '100%'
- },
- '> a': {
- color: 'inherit',
- transition: `all ${motionDurationMid}`,
- '&:hover': {
- color: 'inherit'
- },
- '&::after': {
- position: 'absolute',
- inset: 0,
- content: '""'
- }
- },
- [`${menuCls}-item-extra`]: {
- paddingInlineStart: token.padding,
- marginInlineStart: 'auto',
- fontSize: token.fontSizeSM,
- color: token.colorTextDescription
- }
- },
- // =========================== Item ===========================
- [`${menuCls}-item, ${menuCls}-submenu-title`]: Object.assign(Object.assign({
- display: 'flex',
- margin: 0,
- padding: `${(0, _cssinjs.unit)(paddingBlock)} ${(0, _cssinjs.unit)(controlPaddingHorizontal)}`,
- color: token.colorText,
- fontWeight: 'normal',
- fontSize,
- lineHeight: token.lineHeight,
- cursor: 'pointer',
- transition: `all ${motionDurationMid}`,
- borderRadius: token.borderRadiusSM,
- '&:hover, &-active': {
- backgroundColor: token.controlItemBgHover
- }
- }, (0, _style.genFocusStyle)(token)), {
- '&-selected': {
- color: token.colorPrimary,
- backgroundColor: token.controlItemBgActive,
- '&:hover, &-active': {
- backgroundColor: token.controlItemBgActiveHover
- }
- },
- '&-disabled': {
- color: colorTextDisabled,
- cursor: 'not-allowed',
- '&:hover': {
- color: colorTextDisabled,
- backgroundColor: colorBgElevated,
- cursor: 'not-allowed'
- },
- a: {
- pointerEvents: 'none'
- }
- },
- '&-divider': {
- height: 1,
- // By design
- margin: `${(0, _cssinjs.unit)(token.marginXXS)} 0`,
- overflow: 'hidden',
- lineHeight: 0,
- backgroundColor: token.colorSplit
- },
- [`${componentCls}-menu-submenu-expand-icon`]: {
- position: 'absolute',
- insetInlineEnd: token.paddingXS,
- [`${componentCls}-menu-submenu-arrow-icon`]: {
- marginInlineEnd: '0 !important',
- color: token.colorIcon,
- fontSize: fontSizeIcon,
- fontStyle: 'normal'
- }
- }
- }),
- [`${menuCls}-item-group-list`]: {
- margin: `0 ${(0, _cssinjs.unit)(token.marginXS)}`,
- padding: 0,
- listStyle: 'none'
- },
- [`${menuCls}-submenu-title`]: {
- paddingInlineEnd: token.calc(controlPaddingHorizontal).add(token.fontSizeSM).equal()
- },
- [`${menuCls}-submenu-vertical`]: {
- position: 'relative'
- },
- [`${menuCls}-submenu${menuCls}-submenu-disabled ${componentCls}-menu-submenu-title`]: {
- [`&, ${componentCls}-menu-submenu-arrow-icon`]: {
- color: colorTextDisabled,
- backgroundColor: colorBgElevated,
- cursor: 'not-allowed'
- }
- },
- // https://github.com/ant-design/ant-design/issues/19264
- [`${menuCls}-submenu-selected ${componentCls}-menu-submenu-title`]: {
- color: token.colorPrimary
- }
- })
- })
- },
- // Follow code may reuse in other components
- [(0, _motion.initSlideMotion)(token, 'slide-up'), (0, _motion.initSlideMotion)(token, 'slide-down'), (0, _motion.initMoveMotion)(token, 'move-up'), (0, _motion.initMoveMotion)(token, 'move-down'), (0, _motion.initZoomMotion)(token, 'zoom-big')]];
- };
- // ============================== Export ==============================
- const prepareComponentToken = token => Object.assign(Object.assign({
- zIndexPopup: token.zIndexPopupBase + 50,
- paddingBlock: (token.controlHeight - token.fontSize * token.lineHeight) / 2
- }, (0, _placementArrow.getArrowOffsetToken)({
- contentRadius: token.borderRadiusLG,
- limitVerticalRadius: true
- })), (0, _roundedArrow.getArrowToken)(token));
- exports.prepareComponentToken = prepareComponentToken;
- var _default = exports.default = (0, _internal.genStyleHooks)('Dropdown', token => {
- const {
- marginXXS,
- sizePopupArrow,
- paddingXXS,
- componentCls
- } = token;
- const dropdownToken = (0, _internal.mergeToken)(token, {
- menuCls: `${componentCls}-menu`,
- dropdownArrowDistance: token.calc(sizePopupArrow).div(2).add(marginXXS).equal(),
- dropdownEdgeChildPadding: paddingXXS
- });
- return [genBaseStyle(dropdownToken), (0, _status.default)(dropdownToken)];
- }, prepareComponentToken, {
- resetStyle: false
- });
|