From 11901cd2425a28f88980637c6ad85c97db06c2f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Tue, 18 Nov 2025 17:05:30 +0100 Subject: [PATCH] PanelChrome: Hover header fixes (#113908) * PanelChrome: Hover header fixes * More fixes * fixes * Fix test * restore hoverHeaderOffset feature * Fixes --- .../components/PanelChrome/HoverWidget.tsx | 16 +++--- .../components/PanelChrome/PanelChrome.tsx | 53 ++++++++++--------- .../src/components/PanelChrome/TitleItem.tsx | 2 +- .../containers/PublicDashboardPage.test.tsx | 1 + yarn.lock | 16 +++--- 5 files changed, 47 insertions(+), 41 deletions(-) diff --git a/packages/grafana-ui/src/components/PanelChrome/HoverWidget.tsx b/packages/grafana-ui/src/components/PanelChrome/HoverWidget.tsx index 74cf3cc108c..eb5c54d7b3b 100644 --- a/packages/grafana-ui/src/components/PanelChrome/HoverWidget.tsx +++ b/packages/grafana-ui/src/components/PanelChrome/HoverWidget.tsx @@ -37,7 +37,11 @@ export function HoverWidget({ menu, title, dragClass, children, offset = -32, on } return ( -
+
{dragClass && (
)} -
- - {titleItems} -
+ {(titleItems || description) && ( +
+ + {titleItems} +
+ )} + {loadingState === LoadingState.Streaming && ( )} -
- {actions &&
{itemsRenderer(actions, (item) => item)}
} -
+ {!hoverHeader &&
} + {actions && itemsRenderer(actions, (item) => item)} ); + // Ignores streaming and loading (cancel query) states for simplicity + // If you need to cancel streaming / loading panels set a title + const hasHeaderContent = title || description || titleItems || menu || dragClass || actions; + return ( // tabIndex={0} is needed for keyboard accessibility in the plot area
- - {headerContent} - + {hasHeaderContent && ( + + {headerContent} + + )} {statusMessage && (
@@ -607,16 +615,6 @@ const getStyles = (theme: GrafanaTheme2) => { top: 0, zIndex: 1, }), - rightActions: css({ - display: 'flex', - gap: theme.spacing(1), - }), - rightAligned: css({ - label: 'right-aligned-container', - marginLeft: 'auto', - display: 'flex', - alignItems: 'center', - }), titleItems: css({ display: 'flex', height: '100%', @@ -631,5 +629,8 @@ const getStyles = (theme: GrafanaTheme2) => { padding: 0, maxWidth: '100%', }), + flexGrow: css({ + flexGrow: 1, + }), }; }; diff --git a/packages/grafana-ui/src/components/PanelChrome/TitleItem.tsx b/packages/grafana-ui/src/components/PanelChrome/TitleItem.tsx index 008ae1d6d48..baf035a52ed 100644 --- a/packages/grafana-ui/src/components/PanelChrome/TitleItem.tsx +++ b/packages/grafana-ui/src/components/PanelChrome/TitleItem.tsx @@ -81,7 +81,7 @@ const getStyles = (theme: GrafanaTheme2) => { '&:hover ': { boxShadow: `${theme.shadows.z1}`, - background: `${theme.colors.background.secondary}`, + background: theme.colors.secondary.shade, color: `${theme.colors.text.primary}`, }, }); diff --git a/public/app/features/dashboard/containers/PublicDashboardPage.test.tsx b/public/app/features/dashboard/containers/PublicDashboardPage.test.tsx index d9038bf1f2b..4500526802a 100644 --- a/public/app/features/dashboard/containers/PublicDashboardPage.test.tsx +++ b/public/app/features/dashboard/containers/PublicDashboardPage.test.tsx @@ -202,6 +202,7 @@ describe('PublicDashboardPage', () => { repeatDirection: 'h', transformations: [], transparent: false, + description: 'hello', }, ]; diff --git a/yarn.lock b/yarn.lock index f4346919b99..248e94efef1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3597,10 +3597,10 @@ __metadata: linkType: soft "@grafana/scenes-react@npm:^6.46.0": - version: 6.46.0 - resolution: "@grafana/scenes-react@npm:6.46.0" + version: 6.46.1 + resolution: "@grafana/scenes-react@npm:6.46.1" dependencies: - "@grafana/scenes": "npm:6.46.0" + "@grafana/scenes": "npm:6.46.1" lru-cache: "npm:^10.2.2" react-use: "npm:^17.4.0" peerDependencies: @@ -3612,7 +3612,7 @@ __metadata: react: ^18.0.0 react-dom: ^18.0.0 react-router-dom: ^6.28.0 - checksum: 10/be082f31c14e636efe6c60f98771a03b94606c6210a1f90d64a1c4ee8429ccb5aaa9e401092f4f6d728befeec13051d9811ec894bdee9b3c39865a5ebc2bba41 + checksum: 10/47007ae998dd52c774f1b53cc1cbd62cbff6c077886ba36381f371454918bd7fbe9ea9373e021a38ba0144e507c8c51a435a2be1aa8250a36c37d7bbfa72fb9d languageName: node linkType: hard @@ -3642,9 +3642,9 @@ __metadata: languageName: node linkType: hard -"@grafana/scenes@npm:6.46.0, @grafana/scenes@npm:^6.46.0": - version: 6.46.0 - resolution: "@grafana/scenes@npm:6.46.0" +"@grafana/scenes@npm:6.46.1, @grafana/scenes@npm:^6.46.0": + version: 6.46.1 + resolution: "@grafana/scenes@npm:6.46.1" dependencies: "@floating-ui/react": "npm:^0.26.16" "@leeoniya/ufuzzy": "npm:^1.0.16" @@ -3664,7 +3664,7 @@ __metadata: react: ^18.0.0 react-dom: ^18.0.0 react-router-dom: ^6.28.0 - checksum: 10/c4b2b3113da0ea9b5745b4d560e73ad8877934138cb2862ed0fecf0954a36dc7aee2b15e12b802e0884ff8f56756935acc545019753f99a2900ba19a620a4e96 + checksum: 10/e72a90833a94307c6a4633d9f637e407f681d2be9fa27938158b0bdbb9520e31a3ff804eaab3f5e146673af5a21822b6a8279b4b8fd2ead79b94e2593e366144 languageName: node linkType: hard