| <script setup lang='ts'> | |
| import { computed } from 'vue' | |
| import type { PopoverPlacement } from 'naive-ui' | |
| import { NTooltip } from 'naive-ui' | |
| import Button from './Button.vue' | |
| interface Props { | |
| tooltip?: string | |
| placement?: PopoverPlacement | |
| } | |
| interface Emit { | |
| (e: 'click'): void | |
| } | |
| const props = withDefaults(defineProps<Props>(), { | |
| tooltip: '', | |
| placement: 'bottom', | |
| }) | |
| const emit = defineEmits<Emit>() | |
| const showTooltip = computed(() => Boolean(props.tooltip)) | |
| function handleClick() { | |
| emit('click') | |
| } | |
| </script> | |
| <template> | |
| <div v-if="showTooltip"> | |
| <NTooltip :placement="placement" trigger="hover"> | |
| <template #trigger> | |
| <Button @click="handleClick"> | |
| <slot /> | |
| </Button> | |
| </template> | |
| {{ tooltip }} | |
| </NTooltip> | |
| </div> | |
| <div v-else> | |
| <Button @click="handleClick"> | |
| <slot /> | |
| </Button> | |
| </div> | |
| </template> | |