import * as React from 'react'; import { ctw } from '@ballerine/ui'; import { Slot } from '@radix-ui/react-slot'; import { cva, VariantProps } from 'class-variance-authority'; import { useSidebar } from './hooks/useSidebar'; import { Tooltip } from '@/common/components/atoms/Tooltip/Tooltip'; import { TooltipContent } from '@/common/components/atoms/Tooltip/Tooltip.Content'; import { TooltipTrigger } from '@/common/components/atoms/Tooltip/Tooltip.Trigger'; const sidebarMenuButtonVariants = cva( 'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-[[data-sidebar=menu-action]]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!p-2 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0', { variants: { variant: { default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground', outline: 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]', }, size: { default: 'h-8 text-sm', sm: 'h-7 text-xs', lg: 'h-12 text-sm group-data-[collapsible=icon]:!p-0', }, }, defaultVariants: { variant: 'default', size: 'default', }, }, ); export const SidebarMenuButton = React.forwardRef< HTMLButtonElement, React.ComponentProps<'button'> & { asChild?: boolean; isActive?: boolean; tooltip?: string | React.ComponentProps; } & VariantProps >( ( { asChild = false, isActive = false, variant = 'default', size = 'default', tooltip, className, ...props }, ref, ) => { const Comp = asChild ? Slot : 'button'; const { isMobile, state } = useSidebar(); const button = ( ); if (!tooltip) { return button; } if (typeof tooltip === 'string') { tooltip = { children: tooltip, }; } return ( {button} ); }, ); SidebarMenuButton.displayName = 'SidebarMenuButton';