this repo has no description
at master 49 lines 1.3 kB view raw
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>