Spaces:
Runtime error
Runtime error
import * as DropdownMenu from '@radix-ui/react-dropdown-menu'; | |
import { type ReactNode } from 'react'; | |
import { classNames } from '~/utils/classNames'; | |
interface DropdownProps { | |
trigger: ReactNode; | |
children: ReactNode; | |
align?: 'start' | 'center' | 'end'; | |
sideOffset?: number; | |
} | |
interface DropdownItemProps { | |
children: ReactNode; | |
onSelect?: () => void; | |
className?: string; | |
} | |
export const DropdownItem = ({ children, onSelect, className }: DropdownItemProps) => ( | |
<DropdownMenu.Item | |
className={classNames( | |
'relative flex items-center gap-2 px-3 py-2 rounded-lg text-sm', | |
'text-bolt-elements-textPrimary hover:text-bolt-elements-textPrimary', | |
'hover:bg-bolt-elements-background-depth-3', | |
'transition-colors cursor-pointer', | |
'outline-none', | |
className, | |
)} | |
onSelect={onSelect} | |
> | |
{children} | |
</DropdownMenu.Item> | |
); | |
export const DropdownSeparator = () => <DropdownMenu.Separator className="h-px bg-bolt-elements-borderColor my-1" />; | |
export const Dropdown = ({ trigger, children, align = 'end', sideOffset = 5 }: DropdownProps) => { | |
return ( | |
<DropdownMenu.Root> | |
<DropdownMenu.Trigger asChild>{trigger}</DropdownMenu.Trigger> | |
<DropdownMenu.Portal> | |
<DropdownMenu.Content | |
className={classNames( | |
'min-w-[220px] rounded-lg p-2', | |
'bg-bolt-elements-background-depth-2', | |
'border border-bolt-elements-borderColor', | |
'shadow-lg', | |
'animate-in fade-in-80 zoom-in-95', | |
'data-[side=bottom]:slide-in-from-top-2', | |
'data-[side=left]:slide-in-from-right-2', | |
'data-[side=right]:slide-in-from-left-2', | |
'data-[side=top]:slide-in-from-bottom-2', | |
'z-[1000]', | |
)} | |
sideOffset={sideOffset} | |
align={align} | |
> | |
{children} | |
</DropdownMenu.Content> | |
</DropdownMenu.Portal> | |
</DropdownMenu.Root> | |
); | |
}; | |