@grafana/ui
Version:
Grafana Components Library
1 lines • 19.1 kB
Source Map (JSON)
{"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 * @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\n const disableHover = disabled || (!onClick && !href);\n const onCardClick = onClick && !disabled ? onClick : undefined;\n const styles = useStyles2(getCardContainerStyles, disabled, disableHover, isSelected, isCompact, noMargin);\n\n return (\n <CardContainer\n disableEvents={disabled}\n disableHover={disableHover}\n isSelected={isSelected}\n className={cx(styles.container, className)}\n noMargin={noMargin}\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(child) ? cloneElement(child, { disabled: isDisabled, ...child.props }) : 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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"}