import { memo, type MouseEvent } from 'react'
import {
getActionMenuButtonGroupStyles,
getActionMenuButtonStyles,
getActionMenuTriggerStyles,
getMenuButtonStyles,
splitClassNameProp,
} from '@pluralsight/headless-styles'
import { ChevronDownIcon } from '@pluralsight/icons'
import {
useAriaMenuButton,
useAriaMenuSubmitButton,
} from '@pluralsight/react-aria'
import {
Button,
useMenu,
useMenuTriggerInteraction,
Flex,
IconButton,
type ButtonProps,
} from '../../index.ts'
//
export type MenuButtonProps = ButtonProps
function MenuButtonEl(props: MenuButtonProps) {
const context = useMenu()
const { onKeyDown } = useMenuTriggerInteraction()
const pandoAriaProps = useAriaMenuButton({
expanded: context.expanded,
menuId: context.menuId,
id: context.triggerId,
})
const pandoStyles = getMenuButtonStyles({
classNames: splitClassNameProp(props.className),
})
function handleClick(e: MouseEvent) {
if (props.onClick) props.onClick(e)
context.setExpanded((prev) => !prev)
}
return (
)
}
//
export interface ActionMenuButtonProps extends Omit {
value: string
}
function ActionMenuButtonEl(props: ActionMenuButtonProps) {
const context = useMenu()
const { onKeyDown } = useMenuTriggerInteraction()
const pandoAriaProps = useAriaMenuSubmitButton({
value: props.value,
})
const pandoAriaTriggerProps = useAriaMenuButton({
expanded: context.expanded,
menuId: context.menuId,
id: context.triggerId,
})
function handleClick(e: MouseEvent) {
e.preventDefault()
if (props.onClick) props.onClick(e)
context.setExpanded((prev) => !prev)
}
return (
)
}
// exports
/**
* An action button to display a Navigation based menu
* @param props the same props as the [Button](https://design.pluralsight.com/docs/reference/components/button#parameters) component
* @see https://design.pluralsight.com/docs/reference/components/menu
*/
export const MenuButton = memo(MenuButtonEl)
/**
* An action button to display an ActionMenu based menu
* @param props the same props as the [Button](https://design.pluralsight.com/docs/reference/components/button#parameters) component
* @see https://design.pluralsight.com/docs/reference/components/menu
*/
export const ActionMenuButton = memo(ActionMenuButtonEl)