返回 slidev
FormItem.vue
根目录 / packages / client / internals / FormItem.vue
1 <script setup lang="ts">
2 import { Tooltip } from 'floating-vue'
3
4 defineProps<{
5 title: string
6 nested?: boolean | number
7 div?: boolean
8 description?: string
9 dot?: boolean
10 }>()
11
12 const emit = defineEmits<{
13 (event: 'reset'): void
14 }>()
15
16 function reset() {
17 emit('reset')
18 }
19 </script>
20
21 <template>
22 <component :is="div ? 'div' : 'label'" flex="~ row gap-2 items-center" select-none>
23 <div w-30 h-8 flex="~ gap-1 items-center">
24 <div
25 v-if="nested" i-ri-corner-down-right-line op40
26 :style="typeof nested === 'number' ? { marginLeft: `${nested * 0.5 + 0.5}rem` } : { marginLeft: '0.25rem' }"
27 />
28 <div v-if="!description" op75 relative @dblclick="reset">
29 {{ title }}
30 <div v-if="dot" w-1.5 h-1.5 bg-primary rounded absolute top-0 right--2 />
31 </div>
32 <Tooltip v-else distance="10">
33 <div op75 text-right relative @dblclick="reset">
34 {{ title }}
35 <div v-if="dot" w-1.5 h-1.5 bg-primary rounded absolute top-0 right--2 />
36 </div>
37 <template #popper>
38 <div text-sm min-w-90 v-html="description" />
39 </template>
40 </Tooltip>
41 </div>
42 <slot />
43 </component>
44 </template>
45
45 lines Plain Text