import type { CSSProperties, Slots } from 'vue' import type { MiniMapNodeProps } from './types' import { MiniMapSlots } from './types' export default defineComponent({ name: 'MiniMapNode', props: ['id', 'position', 'dimensions', 'strokeWidth', 'strokeColor', 'borderRadius', 'color', 'shapeRendering', 'type'], emits: ['click', 'dblclick', 'mouseenter', 'mousemove', 'mouseleave'], setup(props: MiniMapNodeProps, { attrs, emit }) { const miniMapSlots: Slots = inject(MiniMapSlots)! return () => { const style = (attrs.style ?? {}) as CSSProperties const slot = miniMapSlots[`node-${props.type}`] if (slot) return slot!(props) return h('rect', { id: props.id, class: ['vue-flow__minimap-node', attrs.class].join(' '), style, x: props.position.x, y: props.position.y, rx: props.borderRadius, ry: props.borderRadius, width: props.dimensions.width, height: props.dimensions.height, fill: props.color || (style.background as string) || style.backgroundColor, stroke: props.strokeColor, strokeWidth: props.strokeWidth, shapeRendering: props.shapeRendering, onClick: (e: MouseEvent) => emit('click', e), onDblClick: (e: MouseEvent) => emit('dblclick', e), onMouseenter: (e: MouseEvent) => emit('mouseenter', e), onMousemove: (e: MouseEvent) => emit('mousemove', e), onMouseleave: (e: MouseEvent) => emit('mouseleave', e), }) } }, })