import { useSizeProp } from '@element-plus/hooks' import { buildProps, iconPropType } from '@element-plus/utils' import { Loading } from '@element-plus/icons-vue' import type { ExtractPropTypes } from 'vue' import type button from './button.vue' export const buttonTypes = [ 'default', 'primary', 'success', 'warning', 'info', 'danger', 'text', '', ] as const export const buttonNativeTypes = ['button', 'submit', 'reset'] as const export const buttonProps = buildProps({ size: useSizeProp, disabled: Boolean, type: { type: String, values: buttonTypes, default: '', }, icon: { type: iconPropType, default: '', }, nativeType: { type: String, values: buttonNativeTypes, default: 'button', }, loading: Boolean, loadingIcon: { type: iconPropType, default: () => Loading, }, plain: Boolean, autofocus: Boolean, round: Boolean, circle: Boolean, color: String, autoInsertSpace: { type: Boolean, default: undefined, }, } as const) export const buttonEmits = { click: (evt: MouseEvent) => evt instanceof MouseEvent, } export type ButtonProps = ExtractPropTypes export type ButtonEmits = typeof buttonEmits export type ButtonType = ButtonProps['type'] export type ButtonNativeType = ButtonProps['nativeType'] export type ButtonInstance = InstanceType export interface ButtonConfigContext { autoInsertSpace?: boolean }