@ -1,7 +1,7 @@
import React , { FC } from 'react' ;
import { cx } from '@emotion/css' ;
import { DataLink , PanelData } from '@grafana/data' ;
import { Icon } from '@grafana/ui' ;
import { cx , css } from '@emotion/css' ;
import { DataLink , GrafanaTheme2 , PanelData } from '@grafana/data' ;
import { Icon , useStyles2 } from '@grafana/ui' ;
import { selectors } from '@grafana/e2e-selectors' ;
import PanelHeaderCorner from './PanelHeaderCorner' ;
@ -30,6 +30,7 @@ export const PanelHeader: FC<Props> = ({ panel, error, isViewing, isEditing, dat
const onCancelQuery = ( ) = > panel . getQueryRunner ( ) . cancelQuery ( ) ;
const title = panel . getDisplayTitle ( ) ;
const className = cx ( 'panel-header' , ! ( isViewing || isEditing ) ? 'grid-drag-handle' : '' ) ;
const styles = useStyles2 ( panelStyles ) ;
return (
< >
@ -57,7 +58,7 @@ export const PanelHeader: FC<Props> = ({ panel, error, isViewing, isEditing, dat
size = "sm"
/ >
) : null }
< span className = "panel-title-text" > { title } < / span >
< h2 className = { styles . titleText } > { title } < / h2 >
< Icon name = "angle-down" className = "panel-menu-toggle" / >
< PanelHeaderMenuWrapper panel = { panel } dashboard = { dashboard } show = { panelMenuOpen } onClose = { closeMenu } / >
{ data . request && data . request . timeInfo && (
@ -73,3 +74,25 @@ export const PanelHeader: FC<Props> = ({ panel, error, isViewing, isEditing, dat
< / >
) ;
} ;
const panelStyles = ( theme : GrafanaTheme2 ) = > {
return {
titleText : css `
text - overflow : ellipsis ;
overflow : hidden ;
white - space : nowrap ;
max - width : calc ( 100 % - 38 px ) ;
cursor : pointer ;
font - weight : $ { theme . typography . fontWeightMedium } ;
font - size : $ { theme . typography . body . fontSize } ;
margin : 0 ;
& : hover {
color : $ { theme . colors . text . primary } ;
}
. panel - has - alert & {
max - width : calc ( 100 % - 54 px ) ;
}
` ,
} ;
} ;