UNPKG

@grafana/ui

Version:
1 lines 7.83 kB
{"version":3,"file":"Label.mjs","sources":["../../../../src/components/BrowserLabel/Label.tsx"],"sourcesContent":["import { cx, css } from '@emotion/css';\nimport { forwardRef, HTMLAttributes, useCallback } from 'react';\nimport * as React from 'react';\nimport Highlighter from 'react-highlight-words';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useTheme2 } from '../../themes/ThemeContext';\nimport { HighlightPart } from '../../types/completion';\nimport { PartialHighlighter } from '../Typeahead/PartialHighlighter';\n\ntype OnLabelClick = (name: string, value: string | undefined, event: React.MouseEvent<HTMLElement>) => void;\n\ninterface Props extends Omit<HTMLAttributes<HTMLElement>, 'onClick'> {\n name: string;\n active?: boolean;\n loading?: boolean;\n searchTerm?: string;\n value?: string;\n facets?: number;\n title?: string;\n highlightParts?: HighlightPart[];\n onClick?: OnLabelClick;\n}\n\n/**\n * @internal\n */\nexport const Label = forwardRef<HTMLButtonElement, Props>(\n (\n {\n name,\n value,\n hidden,\n facets,\n onClick,\n className,\n loading,\n searchTerm,\n active,\n style,\n title,\n highlightParts,\n ...rest\n },\n ref\n ) => {\n const theme = useTheme2();\n const styles = getLabelStyles(theme);\n const searchWords = searchTerm ? [searchTerm] : [];\n\n const onLabelClick = useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n if (onClick && !hidden) {\n onClick(name, value, event);\n }\n },\n [onClick, name, hidden, value]\n );\n\n // Using this component for labels and label values. If value is given use value for display text.\n let text = value || name;\n if (facets) {\n text = `${text} (${facets})`;\n }\n\n return (\n <button\n key={text}\n ref={ref}\n onClick={onLabelClick}\n style={style}\n title={title || text}\n type=\"button\"\n role=\"option\"\n aria-selected={!!active}\n className={cx(\n styles.base,\n active && styles.active,\n loading && styles.loading,\n hidden && styles.hidden,\n className,\n onClick && !hidden && styles.hover\n )}\n {...rest}\n >\n {highlightParts !== undefined ? (\n <PartialHighlighter text={text} highlightClassName={styles.matchHighLight} highlightParts={highlightParts} />\n ) : (\n <Highlighter\n textToHighlight={text}\n searchWords={searchWords}\n autoEscape\n highlightClassName={styles.matchHighLight}\n />\n )}\n </button>\n );\n }\n);\n\nLabel.displayName = 'Label';\n\nconst getLabelStyles = (theme: GrafanaTheme2) => ({\n base: css({\n display: 'inline-block',\n cursor: 'pointer',\n fontSize: theme.typography.size.sm,\n lineHeight: theme.typography.bodySmall.lineHeight,\n backgroundColor: theme.colors.background.secondary,\n color: theme.colors.text.primary,\n whiteSpace: 'nowrap',\n textShadow: 'none',\n padding: theme.spacing(0.5),\n borderRadius: theme.shape.radius.default,\n border: 'none',\n marginRight: theme.spacing(1),\n marginBottom: theme.spacing(0.5),\n }),\n loading: css({\n fontWeight: theme.typography.fontWeightMedium,\n backgroundColor: theme.colors.primary.shade,\n color: theme.colors.text.primary,\n [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n animation: 'pulse 3s ease-out 0s infinite normal forwards',\n },\n '@keyframes pulse': {\n '0%': {\n color: theme.colors.text.primary,\n },\n '50%': {\n color: theme.colors.text.secondary,\n },\n '100%': {\n color: theme.colors.text.disabled,\n },\n },\n }),\n active: css({\n fontWeight: theme.typography.fontWeightMedium,\n backgroundColor: theme.colors.primary.main,\n color: theme.colors.primary.contrastText,\n }),\n matchHighLight: css({\n background: 'inherit',\n color: theme.components.textHighlight.text,\n backgroundColor: theme.components.textHighlight.background,\n }),\n hidden: css({\n opacity: 0.6,\n cursor: 'default',\n border: '1px solid transparent',\n }),\n hover: css({\n ['&:hover']: {\n opacity: 0.85,\n cursor: 'pointer',\n },\n }),\n});\n"],"names":[],"mappings":"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"}