import type { FunctionalComponent } from 'vue'; import type { VueNode } from '../_util/type'; import PropTypes from '../_util/vue-types'; export interface TransBtnProps { class: string; customizeIcon: VueNode | ((props?: any) => VueNode); customizeIconProps?: any; onMousedown?: (payload: MouseEvent) => void; onClick?: (payload: MouseEvent) => void; } export interface TransBtnType extends FunctionalComponent { displayName: string; } const TransBtn: TransBtnType = (props, { slots }) => { const { class: className, customizeIcon, customizeIconProps, onMousedown, onClick } = props; let icon: VueNode; if (typeof customizeIcon === 'function') { icon = customizeIcon(customizeIconProps); } else { icon = customizeIcon; } return ( { event.preventDefault(); if (onMousedown) { onMousedown(event); } }} style={{ userSelect: 'none', WebkitUserSelect: 'none', }} unselectable="on" onClick={onClick} aria-hidden > {icon !== undefined ? ( icon ) : ( `${cls}-icon`)}> {slots.default?.()} )} ); }; TransBtn.inheritAttrs = false; TransBtn.displayName = 'TransBtn'; TransBtn.props = { class: PropTypes.string, customizeIcon: PropTypes.any, customizeIconProps: PropTypes.any, onMousedown: PropTypes.func, onClick: PropTypes.func, }; export default TransBtn;