| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- <script setup lang="ts">
- import { isFunction } from 'lodash-es'
- import { NButton, NPopover } from 'naive-ui'
- import { isVNode } from 'vue'
- import type { ButtonProps, PopoverProps } from 'naive-ui'
- import type { AllowedComponentProps, HTMLAttributes, SVGAttributes, VNodeChild } from 'vue'
- export interface HintHelpProps {
- buttonProps?: AllowedComponentProps & ButtonProps
- content?: (() => VNodeChild) | string
- iconProps?: SVGAttributes
- label?: string
- labelProps?: HTMLAttributes
- popoverProps?: PopoverProps
- }
- const { label, popoverProps, buttonProps, iconProps, content } = defineProps<HintHelpProps>()
- </script>
- <template>
- <div class="flex items-center gap-x-0.5">
- <span>{{ label }}</span>
- <NPopover v-bind="popoverProps">
- <template #trigger>
- <NButton
- quaternary
- circle
- size="small"
- v-bind="buttonProps"
- >
- <template #icon>
- <span
- class="iconify ph--question"
- v-bind="iconProps"
- />
- </template>
- </NButton>
- </template>
- <component
- v-if="isFunction(content) && isVNode(content())"
- :is="content"
- />
- <span v-else>{{ content }}</span>
- </NPopover>
- </div>
- </template>
|