vue0
t
<script setup lang="ts"> import { Button } from '@/components/ui/button' import { SidebarMenuItem } from '@/components/ui/sidebar/index.ts' import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from '@/components/ui/tooltip' import type { SidebarCollapsibleItem } from '@/types/SidebarCollapsibleItem.ts' import { ChevronRight } from 'lucide-vue-next' const props = withDefaults(defineProps<{ item: SidebarCollapsibleItem }>(), { }) </script> <template> <TooltipProvider :delay-duration="100"> <Tooltip> <TooltipTrigger as-child> <Button v-for="subItem in item.children" :key="subItem.title" variant="ghost" class="w-full justify-start gap-2 hover:bg-gray-200 dark:hover:bg-gray-700 text-gray-600 dark:text-gray-300 transition-colors duration-200" > <component :is="subItem.icon || item.icon" class="w-4 h-4 text-gray-500 dark:text-gray-400" /> <span class="flex-grow text-left">{{ subItem.title }}</span> <ChevronRight class="ml-auto w-4 h-4 text-gray-500 dark:text-gray-400 opacity-0 group-hover:opacity-100 transition-all duration-300" /> </Button> </TooltipTrigger> <TooltipContent side="right" align="center"> <NestedSidebarTooltip v-for="(subItem, index) in item.children" :key="index" :item="subItem" /> </TooltipContent> </Tooltip> </TooltipProvider> </template> <script lang="ts"> export default { name: 'NestedSidebarTooltip' } </script>