diff --git a/packages/grafana-ui/src/components/TagsInput/TagItem.tsx b/packages/grafana-ui/src/components/TagsInput/TagItem.tsx index c4ec9254845..8d6bde058bc 100644 --- a/packages/grafana-ui/src/components/TagsInput/TagItem.tsx +++ b/packages/grafana-ui/src/components/TagsInput/TagItem.tsx @@ -1,4 +1,4 @@ -import { css } from '@emotion/css'; +import { css, cx } from '@emotion/css'; import { useMemo } from 'react'; import { GrafanaTheme2 } from '@grafana/data'; @@ -12,18 +12,30 @@ interface Props { name: string; disabled?: boolean; onRemove: (tag: string) => void; + + /** Colours the tags 'randomly' based on the name. Defaults to true */ + autoColors?: boolean; } /** * @internal * Only used internally by TagsInput * */ -export const TagItem = ({ name, disabled, onRemove }: Props) => { - const { color, borderColor } = useMemo(() => getTagColorsFromName(name), [name]); +export const TagItem = ({ name, disabled, onRemove, autoColors = true }: Props) => { const styles = useStyles2(getStyles); + // If configured, use random colors based on name. + // Otherwise, a default class name will be applied to the tag. + const tagStyle = useMemo(() => { + if (autoColors) { + const { color, borderColor } = getTagColorsFromName(name); + return { backgroundColor: color, borderColor }; + } + return undefined; + }, [name, autoColors]); + return ( -
  • +
  • {name} { alignItems: 'center', height: `${height}px`, lineHeight: `${height - 2}px`, - color: '#fff', borderWidth: '1px', borderStyle: 'solid', borderRadius: theme.shape.radius.default, @@ -56,6 +67,12 @@ const getStyles = (theme: GrafanaTheme2) => { textShadow: 'none', fontWeight: 500, fontSize: theme.typography.size.sm, + color: '#fff', + }), + defaultTagColor: css({ + backgroundColor: theme.colors.background.secondary, + borderColor: theme.components.input.borderColor, + color: theme.colors.text.primary, }), nameStyle: css({ maxWidth: '25ch', diff --git a/packages/grafana-ui/src/components/TagsInput/TagsInput.tsx b/packages/grafana-ui/src/components/TagsInput/TagsInput.tsx index 163af886ba7..d0d72febaf0 100644 --- a/packages/grafana-ui/src/components/TagsInput/TagsInput.tsx +++ b/packages/grafana-ui/src/components/TagsInput/TagsInput.tsx @@ -25,6 +25,8 @@ export interface Props { addOnBlur?: boolean; /** Toggle invalid state */ invalid?: boolean; + /** Colours the tags 'randomly' based on the name. Defaults to true */ + autoColors?: boolean; } export const TagsInput = ({ @@ -37,6 +39,7 @@ export const TagsInput = ({ addOnBlur, invalid, id, + autoColors = true, }: Props) => { const [newTagName, setNewTagName] = useState(''); const styles = useStyles2(getStyles); @@ -96,7 +99,7 @@ export const TagsInput = ({ {tags?.length > 0 && ( )}