{"version":3,"file":"menuItem.mjs","names":[],"sources":["../../../../package/common/menu/menuItem.tsx"],"sourcesContent":["import type { CSSProperties, ReactNode } from 'react';\n\nimport { followHref } from '../utils/navigation';\nimport { renderIcon } from '../utils/renderIcon';\nimport { isMenuAction, type MenuAction, type MenuEntry } from './menu.types';\n\nexport function hasAnyIcon(items: MenuEntry[]): boolean {\n  return items.some((entry) => isMenuAction(entry) && entry.icon != null);\n}\n\n/** The action's icon, or an empty cell as wide when another action has one, so the labels line up. */\nexport function renderItemIcon(\n  icon: MenuAction['icon'],\n  reserveCell: boolean,\n  props: { className: string; style?: CSSProperties },\n): ReactNode {\n  if (icon != null) return renderIcon(icon, props);\n  return reserveCell ? <span aria-hidden {...props} /> : null;\n}\n\n/**\n * Runs an action the way clicking it does: its own `onClick`, then `onAction`, then its `href`.\n * `follow` is `useFollowHref()` where the caller can reach the router; `menuHotkeys` cannot.\n */\nexport function runMenuAction(\n  action: MenuAction,\n  onAction?: (id: string) => void,\n  follow: (href: string) => void = followHref,\n): void {\n  action.onClick?.();\n  onAction?.(action.id);\n  if (action.href) follow(action.href);\n}\n"],"mappings":"+MAMA,SAAgB,EAAW,EAA6B,CACtD,OAAO,EAAM,KAAM,GAAU,EAAa,CAAK,GAAK,EAAM,MAAQ,IAAI,CACxE,CAGA,SAAgB,EACd,EACA,EACA,EACW,CAEX,OADI,GAAQ,KACL,EAAc,EAAC,OAAD,CAAM,cAAA,GAAY,GAAI,CAAQ,CAAA,EAAI,KAD9B,EAAW,EAAM,CAAK,CAEjD,CAMA,SAAgB,EACd,EACA,EACA,EAAiC,EAC3B,CACN,EAAO,UAAU,EACjB,IAAW,EAAO,EAAE,EAChB,EAAO,MAAM,EAAO,EAAO,IAAI,CACrC"}