import { EdgeTextProps, Rect } from '../../types'; import { defineComponent, PropType, ref, watch } from 'vue-demi'; const EdgeText = defineComponent({ props: { x: { type: Number as PropType, required: true }, y: { type: Number as PropType, required: true }, label: { type: String as PropType, required: true }, labelStyle: { type: Object as PropType, default: () => ({}) }, labelShowBg: { type: Boolean as PropType, default: true }, labelBgStyle: { type: Object as PropType, default: () => ({}) }, labelBgPadding: { /* @ts-ignore */ type: Array as PropType<[number, number]>, default: () => [2, 4] }, labelBgBorderRadius: { type: Number as PropType, default: 2 } }, setup(props, { slots }) { const edgeRef = ref(null); const edgeTextBox = ref({ x: 0, y: 0, width: 0, height: 0 }); const label = ref(props.label); watch(label, () => { if (edgeRef.value) { const textBbox = edgeRef.value.getBBox(); edgeRef.value = { x: textBbox.x, y: textBbox.y, width: textBbox.width, height: textBbox.height } as any; } }); if (typeof label.value === 'undefined' || !label.value) { return null; } return ( {props.labelShowBg && ( )} {label} {slots.default ? slots.default() : ''} ); } }); export default EdgeText;