'use client' import type { Placement } from '@/app/components/base/ui/placement' import { Menu } from '@base-ui/react/menu' import * as React from 'react' import { menuGroupLabelClassName, menuIndicatorClassName, menuPopupAnimationClassName, menuPopupBaseClassName, menuRowClassName, menuSeparatorClassName, } from '@/app/components/base/ui/menu-shared' import { parsePlacement } from '@/app/components/base/ui/placement' import { cn } from '@/utils/classnames' export const DropdownMenu = Menu.Root export const DropdownMenuPortal = Menu.Portal export const DropdownMenuTrigger = Menu.Trigger export const DropdownMenuSub = Menu.SubmenuRoot export const DropdownMenuGroup = Menu.Group export const DropdownMenuRadioGroup = Menu.RadioGroup export function DropdownMenuRadioItem({ className, ...props }: React.ComponentPropsWithoutRef) { return ( ) } export function DropdownMenuRadioItemIndicator({ className, ...props }: Omit, 'children'>) { return ( ) } export function DropdownMenuCheckboxItem({ className, ...props }: React.ComponentPropsWithoutRef) { return ( ) } export function DropdownMenuCheckboxItemIndicator({ className, ...props }: Omit, 'children'>) { return ( ) } export function DropdownMenuGroupLabel({ className, ...props }: React.ComponentPropsWithoutRef) { return ( ) } type DropdownMenuContentProps = { children: React.ReactNode placement?: Placement sideOffset?: number alignOffset?: number className?: string popupClassName?: string positionerProps?: Omit< React.ComponentPropsWithoutRef, 'children' | 'className' | 'side' | 'align' | 'sideOffset' | 'alignOffset' > popupProps?: Omit< React.ComponentPropsWithoutRef, 'children' | 'className' > } type DropdownMenuPopupRenderProps = Required> & { placement: Placement sideOffset: number alignOffset: number className?: string popupClassName?: string positionerProps?: DropdownMenuContentProps['positionerProps'] popupProps?: DropdownMenuContentProps['popupProps'] } function renderDropdownMenuPopup({ children, placement, sideOffset, alignOffset, className, popupClassName, positionerProps, popupProps, }: DropdownMenuPopupRenderProps) { const { side, align } = parsePlacement(placement) return ( {children} ) } export function DropdownMenuContent({ children, placement = 'bottom-end', sideOffset = 4, alignOffset = 0, className, popupClassName, positionerProps, popupProps, }: DropdownMenuContentProps) { return renderDropdownMenuPopup({ children, placement, sideOffset, alignOffset, className, popupClassName, positionerProps, popupProps, }) } type DropdownMenuSubTriggerProps = React.ComponentPropsWithoutRef & { destructive?: boolean } export function DropdownMenuSubTrigger({ className, destructive, children, ...props }: DropdownMenuSubTriggerProps) { return ( {children} ) } type DropdownMenuSubContentProps = { children: React.ReactNode placement?: Placement sideOffset?: number alignOffset?: number className?: string popupClassName?: string positionerProps?: DropdownMenuContentProps['positionerProps'] popupProps?: DropdownMenuContentProps['popupProps'] } export function DropdownMenuSubContent({ children, placement = 'left-start', sideOffset = 4, alignOffset = 0, className, popupClassName, positionerProps, popupProps, }: DropdownMenuSubContentProps) { return renderDropdownMenuPopup({ children, placement, sideOffset, alignOffset, className, popupClassName, positionerProps, popupProps, }) } type DropdownMenuItemProps = React.ComponentPropsWithoutRef & { destructive?: boolean } export function DropdownMenuItem({ className, destructive, ...props }: DropdownMenuItemProps) { return ( ) } type DropdownMenuLinkItemProps = React.ComponentPropsWithoutRef & { destructive?: boolean } export function DropdownMenuLinkItem({ className, destructive, closeOnClick = true, ...props }: DropdownMenuLinkItemProps) { return ( ) } export function DropdownMenuSeparator({ className, ...props }: React.ComponentPropsWithoutRef) { return ( ) }