diff --git a/packages/grafana-data/src/types/app.ts b/packages/grafana-data/src/types/app.ts index 23e52f913b8..38a20ad12b8 100644 --- a/packages/grafana-data/src/types/app.ts +++ b/packages/grafana-data/src/types/app.ts @@ -179,4 +179,6 @@ export enum FeatureState { privatePreview = 'private preview', /** used to mark features that are in public preview with low/medium risk, or as a shared badge for public and private previews */ preview = 'preview', + /** used to mark new GA features */ + new = 'new', } diff --git a/packages/grafana-ui/src/components/Badge/Badge.tsx b/packages/grafana-ui/src/components/Badge/Badge.tsx index 73eca08b108..59cd9074a2d 100644 --- a/packages/grafana-ui/src/components/Badge/Badge.tsx +++ b/packages/grafana-ui/src/components/Badge/Badge.tsx @@ -79,7 +79,7 @@ const getStyles = (theme: GrafanaTheme2, color: BadgeColor) => { border: `1px solid ${borderColor}`, color: textColor, fontWeight: theme.typography.fontWeightRegular, - gap: '2px', + gap: theme.spacing(0.5), fontSize: theme.typography.bodySmall.fontSize, lineHeight: theme.typography.bodySmall.lineHeight, alignItems: 'center', diff --git a/packages/grafana-ui/src/components/FeatureBadge/FeatureBadge.tsx b/packages/grafana-ui/src/components/FeatureBadge/FeatureBadge.tsx index 8ecd1d54528..8265ada629b 100644 --- a/packages/grafana-ui/src/components/FeatureBadge/FeatureBadge.tsx +++ b/packages/grafana-ui/src/components/FeatureBadge/FeatureBadge.tsx @@ -1,5 +1,6 @@ import { FeatureState } from '@grafana/data'; +import { t } from '../../utils/i18n'; import { Badge, BadgeProps } from '../Badge/Badge'; export interface FeatureBadgeProps { @@ -30,21 +31,28 @@ function getPanelStateBadgeDisplayModel(featureState: FeatureState): BadgeProps case FeatureState.experimental: return { - text: 'Experimental', + text: t('grafana-ui.feature-badge.experimental', 'Experimental'), icon: 'exclamation-triangle', color: 'orange', }; case FeatureState.preview: return { - text: 'Preview', + text: t('grafana-ui.feature-badge.preview', 'Preview'), icon: 'rocket', color: 'blue', }; case FeatureState.privatePreview: return { - text: 'Private preview', + text: t('grafana-ui.feature-badge.private-preview', 'Private preview'), + icon: 'rocket', + color: 'blue', + }; + + case FeatureState.new: + return { + text: t('grafana-ui.feature-badge.new', 'New!'), icon: 'rocket', color: 'blue', }; diff --git a/public/app/core/components/AppChrome/MegaMenu/MegaMenuItem.tsx b/public/app/core/components/AppChrome/MegaMenu/MegaMenuItem.tsx index 4379283f3c5..23ed7d4fc84 100644 --- a/public/app/core/components/AppChrome/MegaMenu/MegaMenuItem.tsx +++ b/public/app/core/components/AppChrome/MegaMenu/MegaMenuItem.tsx @@ -4,10 +4,9 @@ import * as React from 'react'; import { useLocation } from 'react-router-dom-v5-compat'; import { useLocalStorage } from 'react-use'; -import { GrafanaTheme2, NavModelItem, toIconName } from '@grafana/data'; -import { useStyles2, Text, IconButton, Icon, Stack, Badge } from '@grafana/ui'; +import { FeatureState, GrafanaTheme2, NavModelItem, toIconName } from '@grafana/data'; +import { useStyles2, Text, IconButton, Icon, Stack, FeatureBadge } from '@grafana/ui'; import { useGrafana } from 'app/core/context/GrafanaContext'; -import { t } from 'app/core/internationalization'; import { Indent } from '../../Indent/Indent'; @@ -108,7 +107,7 @@ export function MegaMenuItem({ link, activeItem, level = 0, onClick, onPin, isPi > {level === 0 && iconElement && {iconElement}} {link.text} - {link.isNew && } + {link.isNew && } diff --git a/public/locales/en-US/grafana.json b/public/locales/en-US/grafana.json index 7d657396dde..8849f1b3a69 100644 --- a/public/locales/en-US/grafana.json +++ b/public/locales/en-US/grafana.json @@ -1750,6 +1750,12 @@ "drawer": { "close": "Close" }, + "feature-badge": { + "experimental": "Experimental", + "new": "New!", + "preview": "Preview", + "private-preview": "Private preview" + }, "field-link-list": { "external-links-heading": "External links" }, @@ -2756,7 +2762,6 @@ "close": "Close menu", "dock": "Dock menu", "list-label": "Navigation", - "new": "New!", "open": "Open menu", "undock": "Undock menu" }, diff --git a/public/locales/pseudo-LOCALE/grafana.json b/public/locales/pseudo-LOCALE/grafana.json index aa5a7951a0e..fd11d47872d 100644 --- a/public/locales/pseudo-LOCALE/grafana.json +++ b/public/locales/pseudo-LOCALE/grafana.json @@ -1750,6 +1750,12 @@ "drawer": { "close": "Cľőşę" }, + "feature-badge": { + "experimental": "Ēχpęřįmęʼnŧäľ", + "new": "Ńęŵ!", + "preview": "Přęvįęŵ", + "private-preview": "Přįväŧę přęvįęŵ" + }, "field-link-list": { "external-links-heading": "Ēχŧęřʼnäľ ľįʼnĸş" }, @@ -2756,7 +2762,6 @@ "close": "Cľőşę męʼnū", "dock": "Đőčĸ męʼnū", "list-label": "Ńävįģäŧįőʼn", - "new": "Ńęŵ!", "open": "Øpęʼn męʼnū", "undock": "Ůʼnđőčĸ męʼnū" },