import clsx from "clsx"; import Link from "next/link"; import type { PropsWithChildren, ReactNode } from "react"; import ChevronDown from "../../icons/chevron-down"; import { Menu as _Menu, MenuWrapper as _MenuWrapper } from "../Menu"; import { type MenuProps } from "../Menu/Menu"; import { MenuButton as _MenuButton } from "../Menu/menu-button"; import { type MenuItemProps, MenuItem as _MenuItem } from "../Menu/menu-item"; import styles from "./pill.module.css"; interface PillProps extends PropsWithChildren { href: string; label: string; prefix?: ReactNode; } const Pill = ({ href, label, prefix, children }: PillProps) => { const isExternalHref = href.startsWith("http"); const hasChildren = !!children; const hasPrefix = !!prefix; return (
{hasPrefix && {prefix}} {label} {isExternalHref && ( )} {hasChildren && <_MenuWrapper>{children}}
); }; interface PillMenuProps extends PropsWithChildren {} const Menu = ({ children, ...rest }: PillMenuProps) => { // @ts-expect-error const childrenCount = children.length || 0; return ( <> <_MenuButton variant="unstyled" className={styles.menuButton} svgOnly align="center" > +{childrenCount} <_Menu {...rest}>{children}
); }; export interface PillMenuItemProps extends PropsWithChildren {} const MenuItem = ({ children, ...rest }: PillMenuItemProps) => { return <_MenuItem {...rest}>{children}; }; export default Object.assign(Pill, { Menu, MenuItem });