import { useContainer } from '@tldraw/editor' import { DropdownMenu as _DropdownMenu } from 'radix-ui' import { ReactNode, memo } from 'react' import { useMenuIsOpen } from '../../hooks/useMenuIsOpen' import { useDirection, useTranslation } from '../../hooks/useTranslation/useTranslation' import { TldrawUiButton } from '../primitives/Button/TldrawUiButton' import { TldrawUiButtonIcon } from '../primitives/Button/TldrawUiButtonIcon' import { TldrawUiMenuContextProvider } from '../primitives/menus/TldrawUiMenuContext' import { DefaultMainMenuContent } from './DefaultMainMenuContent' /** @public */ export interface TLUiMainMenuProps { children?: ReactNode } /** @public @react */ export const DefaultMainMenu = memo(function DefaultMainMenu({ children }: TLUiMainMenuProps) { const container = useContainer() const [isOpen, onOpenChange] = useMenuIsOpen('main menu') const msg = useTranslation() const dir = useDirection() // Get the main menu content, either the default component or the user's // override. If there's no menu content, then the user has set it to null, // so skip rendering the menu. const content = children ?? return ( <_DropdownMenu.Root dir={dir} open={isOpen} onOpenChange={onOpenChange} modal={false}> <_DropdownMenu.Trigger asChild dir={dir}> <_DropdownMenu.Portal container={container}> <_DropdownMenu.Content className="tlui-menu" side="bottom" align="start" collisionPadding={4} alignOffset={0} sideOffset={6} > {content} ) })