import React, { cloneElement, Children, ReactElement } from "react"; import styled, { DefaultTheme } from "styled-components"; import { space } from "styled-system"; import { scales, variants } from "../Button/types"; import { ButtonMenuProps } from "./types"; interface StyledButtonMenuProps extends ButtonMenuProps { theme: DefaultTheme; } const getBackgroundColor = ({ theme, variant }: StyledButtonMenuProps) => { return theme.colors[variant === variants.SUBTLE ? "input" : "tertiary"]; }; const getBorderColor = ({ theme, variant }: StyledButtonMenuProps) => { return theme.colors[variant === variants.SUBTLE ? "inputSecondary" : "disabled"]; }; const StyledButtonMenu = styled.div` background-color: ${getBackgroundColor}; border-radius: 16px; display: inline-flex; border: 1px solid ${getBorderColor}; & > button + button, & > a + a { margin-left: 2px; // To avoid focus shadow overlap } ${space} `; const ButtonMenu: React.FC = ({ activeIndex = 0, scale = scales.MD, variant = variants.PRIMARY, onItemClick, children, ...props }) => { return ( {Children.map(children, (child: ReactElement, index) => { return cloneElement(child, { isActive: activeIndex === index, onClick: onItemClick ? () => onItemClick(index) : undefined, scale, variant, }); })} ); }; export default ButtonMenu;