{"version":3,"file":"DataLinksContextMenu.cjs","sources":["../../../../src/components/DataLinks/DataLinksContextMenu.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { CSSProperties, type JSX } from 'react';\nimport * as React from 'react';\n\nimport { ActionModel, GrafanaTheme2, LinkModel } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { linkModelToContextMenuItems } from '../../utils/dataLinks';\nimport { WithContextMenu } from '../ContextMenu/WithContextMenu';\nimport { MenuGroup, MenuItemsGroup } from '../Menu/MenuGroup';\nimport { MenuItem } from '../Menu/MenuItem';\n\nexport interface DataLinksContextMenuProps {\n  children: (props: DataLinksContextMenuApi) => JSX.Element;\n  links: () => LinkModel[];\n  style?: CSSProperties;\n  /**\n   * @deprecated Will be removed in a future version\n   */\n  actions?: ActionModel[];\n}\n\nexport interface DataLinksContextMenuApi {\n  openMenu?: React.MouseEventHandler<HTMLOrSVGElement>;\n  targetClassName?: string;\n}\n\nexport const DataLinksContextMenu = ({ children, links, style }: DataLinksContextMenuProps) => {\n  const styles = useStyles2(getStyles);\n\n  const itemsGroup: MenuItemsGroup[] = [\n    { items: linkModelToContextMenuItems(links), label: Boolean(links().length) ? 'Data links' : '' },\n  ];\n\n  const linksCounter = itemsGroup[0].items.length;\n  const renderMenuGroupItems = () => {\n    return itemsGroup.map((group, groupIdx) => (\n      <MenuGroup key={`${group.label}${groupIdx}`} label={group.label}>\n        {(group.items || []).map((item, itemIdx) => (\n          <MenuItem\n            key={`${group.label}-${groupIdx}-${itemIdx}}`}\n            url={item.url}\n            label={item.label}\n            target={item.target}\n            icon={item.icon}\n            active={item.active}\n            onClick={item.onClick}\n            className={styles.itemWrapper}\n          />\n        ))}\n      </MenuGroup>\n    ));\n  };\n\n  // Use this class name (exposed via render prop) to add context menu indicator to the click target of the visualization\n  const targetClassName = css({\n    cursor: 'context-menu',\n  });\n\n  if (linksCounter > 1) {\n    return (\n      <WithContextMenu renderMenuItems={renderMenuGroupItems}>\n        {({ openMenu }) => {\n          return children({ openMenu, targetClassName });\n        }}\n      </WithContextMenu>\n    );\n  } else {\n    const linkModel = links()[0];\n    return (\n      <a\n        href={linkModel.href}\n        onClick={linkModel.onClick}\n        target={linkModel.target}\n        title={linkModel.title}\n        style={{ ...style, overflow: 'hidden', display: 'flex' }}\n        data-testid={selectors.components.DataLinksContextMenu.singleLink}\n      >\n        {children({})}\n      </a>\n    );\n  }\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n  itemWrapper: css({\n    fontSize: 12,\n  }),\n});\n"],"names":["useStyles2","linkModelToContextMenuItems","MenuGroup","jsx","MenuItem","css","WithContextMenu","selectors"],"mappings":";;;;;;;;;;;;;;AA4BO,MAAM,uBAAuB,CAAC,EAAE,QAAA,EAAU,KAAA,EAAO,OAAM,KAAiC;AAC7F,EAAA,MAAM,MAAA,GAASA,wBAAW,SAAS,CAAA;AAEnC,EAAA,MAAM,UAAA,GAA+B;AAAA,IACnC,EAAE,KAAA,EAAOC,qCAAA,CAA4B,KAAK,CAAA,EAAG,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAM,CAAE,MAAM,CAAA,GAAI,YAAA,GAAe,EAAA;AAAG,GAClG;AAEA,EAAA,MAAM,YAAA,GAAe,UAAA,CAAW,CAAC,CAAA,CAAE,KAAA,CAAM,MAAA;AACzC,EAAA,MAAM,uBAAuB,MAAM;AACjC,IAAA,OAAO,WAAW,GAAA,CAAI,CAAC,KAAA,EAAO,QAAA,oCAC3BC,mBAAA,EAAA,EAA4C,KAAA,EAAO,KAAA,CAAM,KAAA,EACtD,iBAAM,KAAA,IAAS,IAAI,GAAA,CAAI,CAAC,MAAM,OAAA,qBAC9BC,cAAA;AAAA,MAACC,iBAAA;AAAA,MAAA;AAAA,QAEC,KAAK,IAAA,CAAK,GAAA;AAAA,QACV,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,WAAW,MAAA,CAAO;AAAA,OAAA;AAAA,MAPb,GAAG,KAAA,CAAM,KAAK,CAAA,CAAA,EAAI,QAAQ,IAAI,OAAO,CAAA,CAAA;AAAA,KAS7C,KAZa,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,EAAG,QAAQ,EAazC,CACD,CAAA;AAAA,EACH,CAAA;AAGA,EAAA,MAAM,kBAAkBC,OAAA,CAAI;AAAA,IAC1B,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,IAAI,eAAe,CAAA,EAAG;AACpB,IAAA,sCACGC,+BAAA,EAAA,EAAgB,eAAA,EAAiB,sBAC/B,QAAA,EAAA,CAAC,EAAE,UAAS,KAAM;AACjB,MAAA,OAAO,QAAA,CAAS,EAAE,QAAA,EAAU,eAAA,EAAiB,CAAA;AAAA,IAC/C,CAAA,EACF,CAAA;AAAA,EAEJ,CAAA,MAAO;AACL,IAAA,MAAM,SAAA,GAAY,KAAA,EAAM,CAAE,CAAC,CAAA;AAC3B,IAAA,uBACEH,cAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,MAAM,SAAA,CAAU,IAAA;AAAA,QAChB,SAAS,SAAA,CAAU,OAAA;AAAA,QACnB,QAAQ,SAAA,CAAU,MAAA;AAAA,QAClB,OAAO,SAAA,CAAU,KAAA;AAAA,QACjB,OAAO,EAAE,GAAG,OAAO,QAAA,EAAU,QAAA,EAAU,SAAS,MAAA,EAAO;AAAA,QACvD,aAAA,EAAaI,sBAAA,CAAU,UAAA,CAAW,oBAAA,CAAqB,UAAA;AAAA,QAEtD,QAAA,EAAA,QAAA,CAAS,EAAE;AAAA;AAAA,KACd;AAAA,EAEJ;AACF;AAEA,MAAM,SAAA,GAAY,CAAC,KAAA,MAA0B;AAAA,EAC3C,aAAaF,OAAA,CAAI;AAAA,IACf,QAAA,EAAU;AAAA,GACX;AACH,CAAA,CAAA;;;;"}