diff --git a/docs/pages/components/Menu.mdx b/docs/pages/components/Menu.mdx index f7b108fd..7052fb29 100644 --- a/docs/pages/components/Menu.mdx +++ b/docs/pages/components/Menu.mdx @@ -1,3 +1,4 @@ +import { useState } from 'react'; import Callout from '../../components/callout'; The `` component is an accessibility-focused dropdown menu. @@ -20,6 +21,7 @@ import { MenuList, MenuItem, MenuLink, + MenuDivider, } from 'minerva-ui'; ``` @@ -39,6 +41,38 @@ import { ``` +## With Custom Colored Selected Menu Item + +```jsx live +() => { + const [selectedItem, setSelectedItem] = useState(''); + + return ( + + + Actions + + + setSelectedItem('edit_profile')} + > + Edit Profile + + setSelectedItem('settings')} + > + Settings + + + + ); +}; +``` + ## Positioned To Right Change alignment for `MenuList` relative to parent diff --git a/package.json b/package.json index 335e0df9..6784aaf7 100644 --- a/package.json +++ b/package.json @@ -105,6 +105,7 @@ "@testing-library/react": "^10.0.4", "@types/styled-components": "^5.1.5", "@types/styled-system": "^5.1.10", + "@types/styled-system__css": "^5.0.15", "copy-to-clipboard": "^3.3.1", "eslint-config-cratebind": "^3.0.8", "eslint-config-react-app": "^5.2.1", diff --git a/src/Menu/Menu.stories.tsx b/src/Menu/Menu.stories.tsx index 4574dfe5..bae75188 100644 --- a/src/Menu/Menu.stories.tsx +++ b/src/Menu/Menu.stories.tsx @@ -8,10 +8,10 @@ import { MenuItem, MenuLink, MenuDivider, + MenuIcon, } from '.'; -import { Icon } from '..'; import { filteredArgs } from '../utils'; -import { Flex } from '../layout'; +import { Flex, Box } from '../layout'; const meta: Meta = { title: 'Menu', @@ -38,10 +38,11 @@ const Template: Story = ({}) => { <> - Actions + Actions + - alert('Download')}>Download + {}}>Download alert('Copy')}>Create a Copy alert('Mark as Draft')}> Mark as Draft @@ -63,7 +64,8 @@ export const PositionedRight = () => ( - Actions + Actions + alert('Edit Profile')}>Edit Profile @@ -76,7 +78,8 @@ export const PositionedRight = () => ( export const DisabledItems = () => ( - Actions + Actions + alert('Edit Profile')}>Edit Profile diff --git a/src/Menu/index.tsx b/src/Menu/index.tsx index 40d82950..24f4b453 100644 --- a/src/Menu/index.tsx +++ b/src/Menu/index.tsx @@ -7,17 +7,21 @@ import { MenuPopover as ReachMenuPopover, MenuItems as ReachMenuItems, MenuProps, - MenuButtonProps, + MenuButtonProps as ReachMenuButtonProps, MenuItemsProps, + MenuItemProps as ReachMenuItemProps, + MenuLinkProps as ReachMenuLinkProps, + useMenuButtonContext, } from '@reach/menu-button'; import { positionDefault, positionRight } from '@reach/popover'; import styled from 'styled-components'; -import Button, { ButtonProps } from '../Button'; -import { Box, MinervaProps } from '../layout'; +import { Box, MinervaProps, shouldForwardProp, systemProps } from '../layout'; +import { useComponentStyles } from '../theme'; +import { ChevronDown } from '../Icon/baseIcons'; // import { useTheme } from '../theme'; // import '@reach/menu-button/styles.css'; -import PseudoBox from '../PseudoBox'; +import PseudoBox, { createPseudoStyles, PseudoBoxProps } from '../PseudoBox'; export type MenuContainerProps = MenuProps; @@ -26,9 +30,20 @@ export const MenuContainer = (props: MenuContainerProps) => ( ); -export const MenuButton = (props: MenuButtonProps & ButtonProps) => ( - -); +type MenuButtonProps = ReachMenuButtonProps & MinervaProps; + +export const MenuButton = (props: MenuButtonProps) => { + const componentStyles = useComponentStyles('MenuButton'); + const { isExpanded } = useMenuButtonContext(); + + return ( + + ); +}; export interface MenuListProps extends MinervaProps { children?: React.ReactNode; @@ -37,15 +52,15 @@ export interface MenuListProps extends MinervaProps { export const OverlayBox = props => ( ); -export const MenuItem = styled(ReachMenuItem)` - color: #374151; - padding: 0.5rem 1rem; - font-size: 14px; - cursor: pointer; - - &[data-selected], - &:hover { - background-color: #f4f5f7; - color: #161e2e; - } -`; - -export const MenuLink = styled(ReachMenuLink)` - color: #374151; - padding: 0.5rem 1rem; - font-size: 14px; - display: block; - cursor: pointer; - - &[data-selected], - &:hover { - background-color: #f4f5f7; - color: #161e2e; - text-decoration: none; - } -`; +export function MenuIcon(props: MinervaProps) { + const { isExpanded } = useMenuButtonContext(); + + return ( +