{"version":3,"file":"Card.mjs","sources":["../../../../src/components/Card/Card.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport { memo, cloneElement, FC, useMemo, useContext, ReactNode } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { getFocusStyles } from '../../themes/mixins';\n\nimport { CardContainer, CardContainerProps, getCardContainerStyles } from './CardContainer';\n\n/**\n * @public\n */\nexport interface Props extends Omit<CardContainerProps, 'disableEvents' | 'disableHover'> {\n  /** Indicates if the card and all its actions can be interacted with */\n  disabled?: boolean;\n  /** Link to redirect to on card click. If provided, the Card inner content will be rendered inside `a` */\n  href?: string;\n  /** On click handler for the Card */\n  onClick?: (e: React.MouseEvent<HTMLElement>) => void;\n  /** @deprecated Use `Card.Heading` instead */\n  heading?: ReactNode;\n  /** @deprecated Use `Card.Description` instead */\n  description?: string;\n  isSelected?: boolean;\n  /** If true, the padding of the Card will be smaller */\n  isCompact?: boolean;\n  /** Remove the bottom margin */\n  noMargin?: boolean;\n}\n\nexport interface CardInterface extends FC<Props> {\n  Heading: typeof Heading;\n  Tags: typeof Tags;\n  Figure: typeof Figure;\n  Meta: typeof Meta;\n  Actions: typeof Actions;\n  SecondaryActions: typeof SecondaryActions;\n  Description: typeof Description;\n}\n\nconst CardContext = React.createContext<{\n  href?: string;\n  onClick?: (e: React.MouseEvent<HTMLElement>) => void;\n  disabled?: boolean;\n  isSelected?: boolean;\n} | null>(null);\n\n/**\n * Generic card component\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/layout-card--docs\n * @public\n */\nexport const Card: CardInterface = ({\n  disabled,\n  href,\n  onClick,\n  children,\n  isSelected,\n  isCompact,\n  className,\n  noMargin,\n  ...htmlProps\n}) => {\n  const hasHeadingComponent = useMemo(\n    () => React.Children.toArray(children).some((c) => React.isValidElement(c) && c.type === Heading),\n    [children]\n  );\n  const hasDescriptionComponent = useMemo(\n    () => React.Children.toArray(children).some((c) => React.isValidElement(c) && c.type === Description),\n    [children]\n  );\n\n  const disableHover = disabled || (!onClick && !href);\n  const onCardClick = onClick && !disabled ? onClick : undefined;\n  const styles = useStyles2(\n    getCardContainerStyles,\n    disabled,\n    disableHover,\n    hasDescriptionComponent,\n    isSelected,\n    isCompact,\n    noMargin\n  );\n\n  return (\n    <CardContainer\n      disableEvents={disabled}\n      disableHover={disableHover}\n      isSelected={isSelected}\n      className={cx(styles.container, className)}\n      noMargin={noMargin}\n      hasDescriptionComponent={hasDescriptionComponent}\n      {...htmlProps}\n    >\n      <CardContext.Provider value={{ href, onClick: onCardClick, disabled, isSelected }}>\n        {!hasHeadingComponent && <Heading />}\n        {children}\n      </CardContext.Provider>\n    </CardContainer>\n  );\n};\nCard.displayName = 'Card';\n\ninterface ChildProps {\n  className?: string;\n  disabled?: boolean;\n  children?: React.ReactNode;\n}\n\n/** Main heading for the card */\nconst Heading = ({ children, className, 'aria-label': ariaLabel }: ChildProps & { 'aria-label'?: string }) => {\n  const context = useContext(CardContext);\n  const styles = useStyles2(getHeadingStyles);\n\n  const { href, onClick, isSelected } = context ?? {\n    href: undefined,\n    onClick: undefined,\n    isSelected: undefined,\n  };\n  const optionLabel = t('grafana-ui.card.option', 'option');\n\n  return (\n    <h2 className={cx(styles.heading, className)}>\n      {href ? (\n        <a href={href} className={styles.linkHack} aria-label={ariaLabel} onClick={onClick}>\n          {children}\n        </a>\n      ) : onClick ? (\n        <button onClick={onClick} className={styles.linkHack} aria-label={ariaLabel} type=\"button\">\n          {children}\n        </button>\n      ) : (\n        <>{children}</>\n      )}\n      {/* Input must be readonly because we are providing a value for the checked prop with no onChange handler */}\n      {isSelected !== undefined && <input aria-label={optionLabel} type=\"radio\" checked={isSelected} readOnly />}\n    </h2>\n  );\n};\nHeading.displayName = 'Heading';\n\nconst getHeadingStyles = (theme: GrafanaTheme2) => ({\n  heading: css({\n    gridArea: 'Heading',\n    justifySelf: 'start',\n    display: 'flex',\n    justifyContent: 'space-between',\n    alignItems: 'center',\n    width: '100%',\n    marginBottom: 0,\n    fontSize: theme.typography.size.md,\n    letterSpacing: 'inherit',\n    lineHeight: theme.typography.body.lineHeight,\n    color: theme.colors.text.primary,\n    fontWeight: theme.typography.fontWeightMedium,\n    '& input[readonly]': {\n      cursor: 'inherit',\n    },\n  }),\n  linkHack: css({\n    all: 'unset',\n    '&::after': {\n      position: 'absolute',\n      content: '\"\"',\n      top: 0,\n      bottom: 0,\n      left: 0,\n      right: 0,\n      borderRadius: theme.shape.radius.default,\n    },\n\n    '&:focus-visible': {\n      outline: 'none',\n      outlineOffset: 0,\n      boxShadow: 'none',\n\n      '&::after': {\n        ...getFocusStyles(theme),\n        zIndex: 1,\n      },\n    },\n  }),\n});\n\nconst Tags = ({ children, className }: ChildProps) => {\n  const styles = useStyles2(getTagStyles);\n  return <div className={cx(styles.tagList, className)}>{children}</div>;\n};\nTags.displayName = 'Tags';\n\nconst getTagStyles = (theme: GrafanaTheme2) => ({\n  tagList: css({\n    position: 'relative',\n    gridArea: 'Tags',\n    alignSelf: 'center',\n  }),\n});\n\n/** Card description text */\nconst Description = ({ children, className }: ChildProps) => {\n  const styles = useStyles2(getDescriptionStyles);\n  const Element = typeof children === 'string' ? 'p' : 'div';\n  return <Element className={cx(styles.description, className)}>{children}</Element>;\n};\nDescription.displayName = 'Description';\n\nconst getDescriptionStyles = (theme: GrafanaTheme2) => ({\n  description: css({\n    width: '100%',\n    gridArea: 'Description',\n    margin: theme.spacing(1, 0, 0),\n    color: theme.colors.text.secondary,\n    lineHeight: theme.typography.body.lineHeight,\n  }),\n});\n\nconst Figure = ({ children, align = 'start', className }: ChildProps & { align?: 'start' | 'center' }) => {\n  const styles = useStyles2(getFigureStyles);\n  return (\n    <div\n      className={cx(\n        styles.media,\n        className,\n        css({\n          alignSelf: align,\n        })\n      )}\n    >\n      {children}\n    </div>\n  );\n};\nFigure.displayName = 'Figure';\n\nconst getFigureStyles = (theme: GrafanaTheme2) => ({\n  media: css({\n    position: 'relative',\n    gridArea: 'Figure',\n\n    marginRight: theme.spacing(2),\n    width: '40px',\n\n    '> img': {\n      width: '100%',\n    },\n\n    '&:empty': {\n      display: 'none',\n    },\n  }),\n});\n\nconst Meta = memo(({ children, className, separator = '|' }: ChildProps & { separator?: string }) => {\n  const styles = useStyles2(getMetaStyles);\n  let meta = children;\n\n  const filtered = React.Children.toArray(children).filter(Boolean);\n  if (!filtered.length) {\n    return null;\n  }\n  meta = filtered.map((element, i) => (\n    <div key={`element_${i}`} className={styles.metadataItem}>\n      {element}\n    </div>\n  ));\n  // Join meta data elements by separator\n  if (filtered.length > 1 && separator) {\n    meta = filtered.reduce((prev, curr, i) => [\n      prev,\n      <span key={`separator_${i}`} className={styles.separator}>\n        {separator}\n      </span>,\n      curr,\n    ]);\n  }\n  return <div className={cx(styles.metadata, className)}>{meta}</div>;\n});\nMeta.displayName = 'Meta';\n\nconst getMetaStyles = (theme: GrafanaTheme2) => ({\n  metadata: css({\n    gridArea: 'Meta',\n    display: 'flex',\n    alignItems: 'center',\n    width: '100%',\n    fontSize: theme.typography.size.sm,\n    color: theme.colors.text.secondary,\n    margin: theme.spacing(0.5, 0, 0),\n    lineHeight: theme.typography.bodySmall.lineHeight,\n    overflowWrap: 'anywhere',\n  }),\n  metadataItem: css({\n    // Needed to allow for clickable children in metadata\n    zIndex: 0,\n  }),\n  separator: css({\n    margin: `0 ${theme.spacing(1)}`,\n  }),\n});\n\ninterface ActionsProps extends ChildProps {\n  children?: React.ReactNode;\n  variant?: 'primary' | 'secondary';\n}\n\nconst BaseActions = ({ children, disabled, variant, className }: ActionsProps) => {\n  const styles = useStyles2(getActionStyles);\n  const context = useContext(CardContext);\n  const isDisabled = context?.disabled || disabled;\n\n  const css = variant === 'primary' ? styles.actions : styles.secondaryActions;\n  return (\n    <div className={cx(css, className)}>\n      {React.Children.map(children, (child) => {\n        return React.isValidElement<Record<string, unknown>>(child)\n          ? cloneElement(child, child.type !== React.Fragment ? { disabled: isDisabled, ...child.props } : undefined)\n          : null;\n      })}\n    </div>\n  );\n};\n\nconst getActionStyles = (theme: GrafanaTheme2) => ({\n  actions: css({\n    display: 'flex',\n    flexDirection: 'row',\n    flexWrap: 'wrap',\n    gap: theme.spacing(1),\n    gridArea: 'Actions',\n    marginTop: theme.spacing(2),\n  }),\n  secondaryActions: css({\n    alignSelf: 'center',\n    color: theme.colors.text.secondary,\n    display: 'flex',\n    flexDirection: 'row',\n    flexWrap: 'wrap',\n    gap: theme.spacing(1),\n    gridArea: 'Secondary',\n    marginTop: theme.spacing(2),\n  }),\n});\n\nconst Actions = ({ children, disabled, className }: ChildProps) => {\n  return (\n    <BaseActions variant=\"primary\" disabled={disabled} className={className}>\n      {children}\n    </BaseActions>\n  );\n};\nActions.displayName = 'Actions';\n\nconst SecondaryActions = ({ children, disabled, className }: ChildProps) => {\n  return (\n    <BaseActions variant=\"secondary\" disabled={disabled} className={className}>\n      {children}\n    </BaseActions>\n  );\n};\nSecondaryActions.displayName = 'SecondaryActions';\n\n/**\n * @public\n * @deprecated Use `className` on respective components to modify styles\n */\nexport const getCardStyles = (theme: GrafanaTheme2) => {\n  return {\n    inner: css({\n      display: 'flex',\n      justifyContent: 'space-between',\n      alignItems: 'center',\n      width: '100%',\n      flexWrap: 'wrap',\n    }),\n    ...getHeadingStyles(theme),\n    ...getMetaStyles(theme),\n    ...getDescriptionStyles(theme),\n    ...getFigureStyles(theme),\n    ...getActionStyles(theme),\n    ...getTagStyles(theme),\n  };\n};\n\nCard.Heading = Heading;\nCard.Tags = Tags;\nCard.Figure = Figure;\nCard.Meta = Meta;\nCard.Actions = Actions;\nCard.SecondaryActions = SecondaryActions;\nCard.Description = Description;\n"],"names":["css"],"mappings":"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"}