this repo has no description
1<script setup lang="ts">
2import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'
3import { type Component, computed } from 'vue'
4import SidebarMenuButtonChild, { type SidebarMenuButtonProps } from './SidebarMenuButtonChild.vue'
5import { useSidebar } from './utils'
6
7defineOptions({
8 inheritAttrs: false,
9})
10
11const props = withDefaults(defineProps<SidebarMenuButtonProps & {
12 tooltip?: string | Component
13}>(), {
14 as: 'button',
15 variant: 'default',
16 size: 'default',
17})
18
19const { isMobile, state } = useSidebar()
20
21const delegatedProps = computed(() => {
22 const { tooltip, ...delegated } = props
23 return delegated
24})
25</script>
26
27<template>
28 <SidebarMenuButtonChild v-if="!tooltip" v-bind="{ ...delegatedProps, ...$attrs }">
29 <slot />
30 </SidebarMenuButtonChild>
31
32 <Tooltip v-else>
33 <TooltipTrigger as-child>
34 <SidebarMenuButtonChild v-bind="{ ...delegatedProps, ...$attrs }">
35 <slot />
36 </SidebarMenuButtonChild>
37 </TooltipTrigger>
38 <TooltipContent
39 side="right"
40 align="center"
41 :hidden="state !== 'collapsed' || isMobile"
42 >
43 <template v-if="typeof tooltip === 'string'">
44 {{ tooltip }}
45 </template>
46 <component :is="tooltip" v-else />
47 </TooltipContent>
48 </Tooltip>
49</template>