UNPKG

@grafana/ui

Version:
1 lines • 19.2 kB
{"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\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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"}