feat(minimap): add MiniMapNodeEmits interface & export it

This commit is contained in:
braks
2024-01-03 11:13:31 +01:00
committed by Braks
parent 9c2b281948
commit 5f0a333b2a
2 changed files with 12 additions and 18 deletions
+4 -18
View File
@@ -1,31 +1,17 @@
import type { CSSProperties } from 'vue'
import { defineComponent, h, inject } from 'vue'
import type { MiniMapNodeProps } from './types'
import type { MiniMapNodeEmits, MiniMapNodeProps } from './types'
import { Slots } from './types'
// todo: typings
export default defineComponent({
export default defineComponent<MiniMapNodeProps, MiniMapNodeEmits>({
name: 'MiniMapNode',
compatConfig: { MODE: 3 },
props: [
'id',
'type',
'selected',
'dragging',
'position',
'dimensions',
'borderRadius',
'color',
'shapeRendering',
'strokeColor',
'strokeWidth',
],
emits: ['click', 'dblclick', 'mouseenter', 'mousemove', 'mouseleave'],
setup(props: MiniMapNodeProps, { attrs, emit }) {
setup(props, { attrs, emit }) {
const miniMapSlots = inject(Slots)!
return () => {
const style = (attrs.style ?? {}) as CSSProperties
const slot = miniMapSlots[`node-${props.type}`]
if (slot) {
+8
View File
@@ -73,6 +73,14 @@ export interface MiniMapEmits {
(event: 'nodeMouseleave', params: NodeMouseEvent): void
}
export interface MiniMapNodeEmits {
(event: 'click', params: NodeMouseEvent): void
(event: 'dblclick', params: NodeMouseEvent): void
(event: 'mouseenter', params: NodeMouseEvent): void
(event: 'mousemove', params: NodeMouseEvent): void
(event: 'mouseleave', params: NodeMouseEvent): void
}
export interface MiniMapSlots extends Record<`node-${string}`, (nodeProps: MiniMapNodeProps) => any> {}
export const Slots: InjectionKey<MiniMapSlots> = Symbol('MiniMapSlots')