import EllipsisOutlined from '@ant-design/icons/EllipsisOutlined'; import classNames from 'classnames'; import * as React from 'react'; import type { ButtonProps } from '../button'; import Button from '../button'; import type { ButtonHTMLType } from '../button/button'; import type { ButtonGroupProps } from '../button/button-group'; import { ConfigContext } from '../config-provider'; import type { DropdownProps } from './dropdown'; import Dropdown from './dropdown'; import useStyle from './style'; const ButtonGroup = Button.Group; export type DropdownButtonType = 'default' | 'primary' | 'ghost' | 'dashed' | 'link' | 'text'; export interface DropdownButtonProps extends ButtonGroupProps, DropdownProps { type?: DropdownButtonType; htmlType?: ButtonHTMLType; danger?: boolean; disabled?: boolean; loading?: ButtonProps['loading']; onClick?: React.MouseEventHandler; icon?: React.ReactNode; href?: string; children?: React.ReactNode; title?: string; buttonsRender?: (buttons: React.ReactNode[]) => React.ReactNode[]; } interface DropdownButtonInterface extends React.FC { __ANT_BUTTON: boolean; } const DropdownButton: DropdownButtonInterface = props => { const { getPopupContainer: getContextPopupContainer, getPrefixCls, direction, } = React.useContext(ConfigContext); const { prefixCls: customizePrefixCls, type = 'default', danger, disabled, loading, onClick, htmlType, children, className, overlay, trigger, align, visible, onVisibleChange, placement, getPopupContainer, href, icon = , title, buttonsRender = (buttons: React.ReactNode[]) => buttons, mouseEnterDelay, mouseLeaveDelay, overlayClassName, overlayStyle, destroyPopupOnHide, ...restProps } = props; const prefixCls = getPrefixCls('dropdown', customizePrefixCls); const buttonPrefixCls = `${prefixCls}-button`; const [wrapSSR, hashId] = useStyle(prefixCls); const dropdownProps = { align, overlay, disabled, trigger: disabled ? [] : trigger, onVisibleChange, getPopupContainer: getPopupContainer || getContextPopupContainer, mouseEnterDelay, mouseLeaveDelay, overlayClassName, overlayStyle, destroyPopupOnHide, } as DropdownProps; if ('visible' in props) { dropdownProps.visible = visible; } if ('placement' in props) { dropdownProps.placement = placement; } else { dropdownProps.placement = direction === 'rtl' ? 'bottomLeft' : 'bottomRight'; } const leftButton = ( ); const rightButton =