import { css, cx } from '@emotion/css'; import React from 'react'; import { PanelData, GrafanaTheme2, PanelModel, LinkModel, AlertState, DataLink } from '@grafana/data'; import { Icon, Tooltip, useStyles2 } from '@grafana/ui'; import { getFocusStyles, getMouseFocusStyles } from '@grafana/ui/src/themes/mixins'; import { PanelLinks } from '../PanelLinks'; import { PanelHeaderNotices } from './PanelHeaderNotices'; export interface Props { alertState?: string; data: PanelData; panelId: number; onShowPanelLinks?: () => Array>; panelLinks?: DataLink[]; } export function PanelHeaderTitleItems(props: Props) { const { alertState, data, panelId, onShowPanelLinks, panelLinks } = props; const styles = useStyles2(getStyles); // panel health const alertStateItem = ( ); const timeshift = ( <> {data.request?.timeInfo} ); return ( <> {panelLinks && panelLinks.length > 0 && onShowPanelLinks && ( )} {} {data.request && data.request.timeInfo && timeshift} {alertState && alertStateItem} ); } const getStyles = (theme: GrafanaTheme2) => { return { item: css({ label: 'panel-header-item', backgroundColor: `${theme.colors.background.primary}`, cursor: 'auto', border: 'none', borderRadius: `${theme.shape.borderRadius()}`, padding: `${theme.spacing(0, 1)}`, height: `${theme.spacing(theme.components.height.md)}`, display: 'flex', alignItems: 'center', justifyContent: 'center', '&:focus, &:focus-visible': { ...getFocusStyles(theme), zIndex: 1, }, '&: focus:not(:focus-visible)': getMouseFocusStyles(theme), '&:hover ': { boxShadow: `${theme.shadows.z1}`, background: `${theme.colors.background.secondary}`, }, }), ok: css({ color: theme.colors.success.text, }), pending: css({ color: theme.colors.warning.text, }), alerting: css({ color: theme.colors.error.text, }), timeshift: css({ color: theme.colors.text.link, '&:hover': { color: theme.colors.emphasize(theme.colors.text.link, 0.03), }, }), }; };