soapbox/src/components/ui/menu.tsx

42 wiersze
1.1 KiB
TypeScript
Czysty Zwykły widok Historia

2022-03-21 18:09:01 +00:00
import {
Menu,
MenuButton,
MenuItem,
MenuItems,
MenuPopover,
MenuLink,
2022-09-13 18:11:22 +00:00
MenuListProps,
2022-03-21 18:09:01 +00:00
} from '@reach/menu-button';
import { positionDefault, positionRight } from '@reach/popover';
2023-02-06 18:01:03 +00:00
import clsx from 'clsx';
2022-03-21 18:09:01 +00:00
import './menu.css';
2022-09-13 18:11:22 +00:00
interface IMenuList extends Omit<MenuListProps, 'position'> {
/** Position of the dropdown menu. */
position?: 'left' | 'right';
className?: string;
2022-03-21 18:09:01 +00:00
}
/** Renders children as a dropdown menu. */
2022-09-13 18:11:22 +00:00
const MenuList: React.FC<IMenuList> = (props) => {
const { position, className, ...filteredProps } = props;
return (
<MenuPopover position={props.position === 'left' ? positionDefault : positionRight}>
<MenuItems
onKeyDown={(event) => event.nativeEvent.stopImmediatePropagation()}
className={
2024-10-28 20:42:29 +00:00
clsx(className, 'rounded-lg bg-white py-1 black:bg-black dark:bg-primary-900')
2022-09-13 18:11:22 +00:00
}
{...filteredProps}
/>
</MenuPopover>
);
};
2022-03-21 18:09:01 +00:00
/** Divides menu items. */
const MenuDivider = () => <hr className='mx-2 my-1 border-t-2 border-gray-100 black:border-t dark:border-gray-800' />;
2022-03-21 18:09:01 +00:00
export { Menu, MenuButton, MenuDivider, MenuItems, MenuItem, MenuList, MenuLink };