import { CSSProperties, PropType, Transition, defineComponent } from 'vue'; import { createNamespace } from '../utils'; import Icon from '../icon'; const [name, bem] = createNamespace('tag'); export type TagType = 'default' | 'primary' | 'success' | 'warning' | 'danger'; export default defineComponent({ name, props: { size: String, mark: Boolean, color: String, plain: Boolean, round: Boolean, textColor: String, closeable: Boolean, type: { type: String as PropType, default: 'default', }, show: { type: Boolean, default: true, }, }, emits: ['close'], setup(props, { slots, emit }) { const onClose = (event: MouseEvent) => { event.stopPropagation(); emit('close'); }; const getStyle = (): CSSProperties => { if (props.plain) { return { color: props.textColor || props.color, }; } return { color: props.textColor, background: props.color, }; }; const renderTag = () => { const { type, mark, plain, round, size, closeable } = props; const classes: Record = { mark, plain, round, }; if (size) { classes[size] = size; } const CloseIcon = closeable && ( ); return ( {slots.default?.()} {CloseIcon} ); }; return () => ( {props.show ? renderTag() : null} ); }, });