import type { MenuProps as MantineMenuProps, MenuItemProps as MantineMenuItemProps, MenuLabelProps as MantineMenuLabelProps, MenuDividerProps as MantineMenuDividerProps, MenuDropdownProps as MantineMenuDropdownProps, } from '@mantine/core'; import { Menu as MantineMenu, createPolymorphicComponent } from '@mantine/core'; import { RiArrowLeftLine } from 'react-icons/ri'; import styled from 'styled-components'; type MenuProps = MantineMenuProps; type MenuLabelProps = MantineMenuLabelProps; interface MenuItemProps extends MantineMenuItemProps { $isActive?: boolean; children: React.ReactNode; } type MenuDividerProps = MantineMenuDividerProps; type MenuDropdownProps = MantineMenuDropdownProps; const StyledMenu = styled(MantineMenu)``; const StyledMenuLabel = styled(MantineMenu.Label)` font-family: var(--content-font-family); `; const StyledMenuItem = styled(MantineMenu.Item)` padding: 0.8rem; font-size: 0.9em; font-family: var(--content-font-family); &:disabled { opacity: 0.6; } &:hover { background-color: var(--dropdown-menu-bg-hover); } & .mantine-Menu-itemIcon { margin-right: 0.5rem; } & .mantine-Menu-itemLabel { color: ${({ $isActive }) => ($isActive ? 'var(--primary-color)' : 'var(--dropdown-menu-fg)')}; font-weight: 500; font-size: 1em; } & .mantine-Menu-itemRightSection { display: flex; margin-left: 2rem !important; color: ${({ $isActive }) => ($isActive ? 'var(--primary-color)' : 'var(--dropdown-menu-fg)')}; } `; const StyledMenuDropdown = styled(MantineMenu.Dropdown)` background: var(--dropdown-menu-bg); border: var(--dropdown-menu-border); border-radius: var(--dropdown-menu-border-radius); filter: drop-shadow(0 0 5px rgb(0, 0, 0, 50%)); `; const StyledMenuDivider = styled(MantineMenu.Divider)` margin: 0.3rem 0; `; export const DropdownMenu = ({ children, ...props }: MenuProps) => { return ( {children} ); }; const MenuLabel = ({ children, ...props }: MenuLabelProps) => { return {children}; }; const pMenuItem = ({ $isActive, children, ...props }: MenuItemProps) => { return ( } {...props} > {children} ); }; const MenuDropdown = ({ children, ...props }: MenuDropdownProps) => { return {children}; }; const MenuItem = createPolymorphicComponent<'button', MenuItemProps>(pMenuItem); const MenuDivider = ({ ...props }: MenuDividerProps) => { return ; }; DropdownMenu.Label = MenuLabel; DropdownMenu.Item = MenuItem; DropdownMenu.Target = MantineMenu.Target; DropdownMenu.Dropdown = MenuDropdown; DropdownMenu.Divider = MenuDivider;