{"version":3,"file":"MenuItem.cjs","sources":["../../../../src/components/Menu/MenuItem.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport { ReactElement, useCallback, useState, useRef, useImperativeHandle, CSSProperties, AriaRole } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2, LinkTarget } from '@grafana/data';\nimport { t } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { getFocusStyles, getInternalRadius } from '../../themes/mixins';\nimport { IconName } from '../../types/icon';\nimport { Icon } from '../Icon/Icon';\nimport { Stack } from '../Layout/Stack/Stack';\n\nimport { SubMenu } from './SubMenu';\n\n/** @internal */\nexport type MenuItemElement = HTMLAnchorElement & HTMLButtonElement & HTMLDivElement;\n\n/** @internal */\nexport interface MenuItemProps<T = unknown> {\n  /** Label of the menu item */\n  label: string;\n  /** Description of item */\n  description?: string;\n  /** Aria label for accessibility support */\n  ariaLabel?: string;\n  /** Aria checked for accessibility support */\n  ariaChecked?: boolean;\n  /** Target of the menu item (i.e. new window)  */\n  target?: LinkTarget;\n  /** Icon of the menu item */\n  icon?: IconName;\n  /** Role of the menu item */\n  role?: AriaRole;\n  /** Url of the menu item */\n  url?: string;\n  /** Handler for the click behaviour */\n  onClick?: (event: React.MouseEvent<HTMLElement>, payload?: T) => void;\n  /** Custom MenuItem styles*/\n  className?: string;\n  /** Active */\n  active?: boolean;\n  /** Disabled */\n  disabled?: boolean;\n  /** Show in destructive style (error color) */\n  destructive?: boolean;\n  tabIndex?: number;\n  /** List of menu items for the subMenu */\n  childItems?: Array<ReactElement<MenuItemProps>>;\n  /** Custom style for SubMenu */\n  customSubMenuContainerStyles?: CSSProperties;\n  /** Shortcut key combination */\n  shortcut?: string;\n  /** Test id for e2e tests and fullstory*/\n  testId?: string;\n  /* Optional component that will be shown together with other options. Does not get passed any props. */\n  component?: React.ComponentType;\n}\n\n/** @internal */\nexport const MenuItem = React.memo(\n  React.forwardRef<MenuItemElement, MenuItemProps>((props, ref) => {\n    const {\n      url,\n      icon,\n      label,\n      description,\n      ariaLabel,\n      ariaChecked,\n      target,\n      onClick,\n      className,\n      active,\n      disabled,\n      destructive,\n      childItems,\n      role,\n      tabIndex = -1,\n      customSubMenuContainerStyles,\n      shortcut,\n      testId,\n    } = props;\n    const styles = useStyles2(getStyles);\n    const [isActive, setIsActive] = useState(active);\n    const [isSubMenuOpen, setIsSubMenuOpen] = useState(false);\n    const onMouseEnter = useCallback(() => {\n      if (disabled) {\n        return;\n      }\n\n      setIsSubMenuOpen(true);\n      setIsActive(true);\n    }, [disabled]);\n    const onMouseLeave = useCallback(() => {\n      if (disabled) {\n        return;\n      }\n\n      setIsSubMenuOpen(false);\n      setIsActive(false);\n    }, [disabled]);\n\n    const hasSubMenu = childItems && childItems.length > 0;\n    const ItemElement = hasSubMenu ? 'div' : url === undefined ? 'button' : 'a';\n    const itemStyle = cx(\n      {\n        [styles.item]: true,\n        [styles.active]: isActive,\n        [styles.disabled]: disabled,\n        [styles.destructive]: destructive && !disabled,\n      },\n      className\n    );\n\n    const disabledProps = {\n      [ItemElement === 'button' ? 'disabled' : 'aria-disabled']: disabled,\n      ...(ItemElement === 'a' && disabled && { href: undefined, onClick: undefined }),\n      ...(disabled && {\n        tabIndex: -1,\n        ['data-disabled']: disabled, // used to identify disabled items in Menu.tsx\n      }),\n    };\n\n    const localRef = useRef<MenuItemElement>(null);\n    useImperativeHandle(ref, () => localRef.current!);\n\n    const handleKeys = (event: React.KeyboardEvent) => {\n      switch (event.key) {\n        case 'ArrowRight':\n          event.preventDefault();\n          event.stopPropagation();\n          if (hasSubMenu) {\n            setIsSubMenuOpen(true);\n            setIsActive(true);\n          }\n          break;\n        default:\n          break;\n      }\n    };\n\n    const closeSubMenu = () => {\n      setIsSubMenuOpen(false);\n      setIsActive(false);\n      localRef?.current?.focus();\n    };\n\n    const hasShortcut = Boolean(shortcut && shortcut.length > 0);\n\n    return (\n      <ItemElement\n        target={target}\n        className={itemStyle}\n        rel={target === '_blank' ? 'noopener noreferrer' : undefined}\n        href={url}\n        onClick={(event) => {\n          if (hasSubMenu && !isSubMenuOpen) {\n            event.preventDefault();\n            event.stopPropagation();\n          }\n          onClick?.(event);\n        }}\n        onMouseEnter={onMouseEnter}\n        onMouseLeave={onMouseLeave}\n        onKeyDown={handleKeys}\n        // If there's no URL, then set either the role from the props, or fallback to menuitem\n        // If there IS a URL, then use the role from props - which will result in this either being a\n        // link (default role of an anchor), or whatever the user of this component specified\n        role={!url ? role || 'menuitem' : role}\n        data-role=\"menuitem\" // used to identify menuitem in Menu.tsx\n        ref={localRef}\n        data-testid={testId}\n        aria-label={ariaLabel}\n        aria-checked={ariaChecked}\n        tabIndex={tabIndex}\n        {...disabledProps}\n      >\n        <Stack direction=\"row\" justifyContent=\"flex-start\" alignItems=\"center\">\n          {icon && <Icon name={icon} className={styles.icon} aria-hidden />}\n          <span className={cx(styles.ellipsis, styles.label)}>{label}</span>\n          <div className={cx(styles.rightWrapper, { [styles.withShortcut]: hasShortcut })}>\n            {hasShortcut && (\n              <div className={styles.shortcut}>\n                <Icon name=\"keyboard\" title={t('grafana-ui.menu-item.keyboard-shortcut-label', 'Keyboard shortcut')} />\n                {shortcut}\n              </div>\n            )}\n            {hasSubMenu && (\n              <SubMenu\n                parentItemRef={localRef}\n                items={childItems}\n                isOpen={isSubMenuOpen}\n                close={closeSubMenu}\n                customStyle={customSubMenuContainerStyles}\n              />\n            )}\n          </div>\n        </Stack>\n        {description && (\n          <div\n            className={cx(styles.description, styles.ellipsis, {\n              [styles.descriptionWithIcon]: icon !== undefined,\n            })}\n          >\n            {description}\n          </div>\n        )}\n        {props.component ? <props.component /> : null}\n      </ItemElement>\n    );\n  })\n);\n\nMenuItem.displayName = 'MenuItem';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n  const menuPadding = theme.components.menu.padding * theme.spacing.gridSize;\n\n  return {\n    item: css({\n      background: 'none',\n      cursor: 'pointer',\n      whiteSpace: 'nowrap',\n      color: theme.colors.text.secondary,\n      display: 'flex',\n      flexDirection: 'column',\n      alignItems: 'stretch',\n      justifyContent: 'center',\n      padding: theme.spacing(0.5, 1.5),\n      minHeight: theme.spacing(4),\n      borderRadius: getInternalRadius(theme, menuPadding, { parentBorderWidth: 0 }),\n      margin: 0,\n      border: 'none',\n      width: '100%',\n      position: 'relative',\n\n      '&:hover, &:focus-visible': {\n        background: theme.colors.action.hover,\n        color: theme.colors.text.primary,\n        textDecoration: 'none',\n      },\n\n      '&:focus-visible': getFocusStyles(theme),\n    }),\n    label: css({\n      color: theme.colors.text.primary,\n    }),\n    active: css({\n      background: theme.colors.action.hover,\n    }),\n    destructive: css({\n      color: theme.colors.error.text,\n\n      svg: {\n        color: theme.colors.error.text,\n      },\n\n      '&:hover, &:focus, &:focus-visible': {\n        background: theme.colors.error.main,\n        color: theme.colors.error.contrastText,\n\n        svg: {\n          color: theme.colors.error.contrastText,\n        },\n      },\n    }),\n    disabled: css({\n      color: theme.colors.action.disabledText,\n      label: 'menu-item-disabled',\n      '&:hover, &:focus, &:focus-visible': {\n        cursor: 'not-allowed',\n        background: 'none',\n        color: theme.colors.action.disabledText,\n      },\n    }),\n    icon: css({\n      opacity: 0.7,\n    }),\n    rightWrapper: css({\n      display: 'flex',\n      alignItems: 'center',\n      marginLeft: 'auto',\n    }),\n    withShortcut: css({\n      minWidth: theme.spacing(10.5),\n    }),\n    shortcut: css({\n      display: 'flex',\n      alignItems: 'center',\n      gap: theme.spacing(1),\n      marginLeft: theme.spacing(2),\n    }),\n    description: css({\n      ...theme.typography.bodySmall,\n      textAlign: 'start',\n    }),\n    descriptionWithIcon: css({\n      marginLeft: theme.spacing(3),\n    }),\n    ellipsis: css({\n      overflow: 'hidden',\n      textOverflow: 'ellipsis',\n      whiteSpace: 'nowrap',\n    }),\n  };\n};\n"],"names":["React","useStyles2","useState","useCallback","cx","useRef","useImperativeHandle","jsxs","Stack","jsx","Icon","t","SubMenu","css","getInternalRadius","getFocusStyles"],"mappings":"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"}