diff --git a/packages/grafana-data/src/types/icon.ts b/packages/grafana-data/src/types/icon.ts
index 16ef1ddc7a1..bc0e5ff8b3d 100644
--- a/packages/grafana-data/src/types/icon.ts
+++ b/packages/grafana-data/src/types/icon.ts
@@ -29,6 +29,7 @@ export const availableIconsIndex = {
'arrow-up': true,
'arrows-h': true,
'arrows-v': true,
+ 'expand-arrows': true,
at: true,
backward: true,
bars: true,
diff --git a/packages/grafana-ui/src/components/PanelChrome/HoverWidget.tsx b/packages/grafana-ui/src/components/PanelChrome/HoverWidget.tsx
index cb16dfac8ca..c67a11837a2 100644
--- a/packages/grafana-ui/src/components/PanelChrome/HoverWidget.tsx
+++ b/packages/grafana-ui/src/components/PanelChrome/HoverWidget.tsx
@@ -1,5 +1,4 @@
-import { css } from '@emotion/css';
-import classnames from 'classnames';
+import { css, cx } from '@emotion/css';
import React, { ReactElement, useCallback, useRef, useState } from 'react';
import { GrafanaTheme2 } from '@grafana/data';
@@ -38,18 +37,19 @@ export function HoverWidget({ menu, title, dragClass, children, offset = -32 }:
return (
-
+
+ {!title &&
Untitled
}
{children}
- {hoverHeader && (
+ {hoverHeader && !isTouchDevice && (
<>
{menu && (
@@ -162,7 +170,12 @@ export function PanelChrome({
menu={menu}
title={title}
placement="bottom-end"
- menuButtonClass={cx(styles.menuItem, dragClassCancel, 'show-on-hover')}
+ menuButtonClass={cx(
+ { [styles.hiddenMenu]: !isTouchDevice },
+ styles.menuItem,
+ dragClassCancel,
+ showOnHoverClass
+ )}
/>
)}
@@ -296,9 +309,11 @@ const getStyles = (theme: GrafanaTheme2) => {
justifyContent: 'center',
alignItems: 'center',
}),
+ hiddenMenu: css({
+ visibility: 'hidden',
+ }),
menuItem: css({
label: 'panel-menu',
- visibility: 'hidden',
border: 'none',
background: theme.colors.secondary.main,
'&:hover': {
diff --git a/packages/grafana-ui/src/components/PanelChrome/TitleItem.tsx b/packages/grafana-ui/src/components/PanelChrome/TitleItem.tsx
index 9fe041ef172..a062a64bd28 100644
--- a/packages/grafana-ui/src/components/PanelChrome/TitleItem.tsx
+++ b/packages/grafana-ui/src/components/PanelChrome/TitleItem.tsx
@@ -27,7 +27,7 @@ export const TitleItem = forwardRef(
onClick={onClick}
target={target}
title={title}
- className={cx(styles.item, className)}
+ className={cx(styles.linkItem, className)}
{...rest}
>
{children}
@@ -46,29 +46,33 @@ export const TitleItem = forwardRef(
TitleItem.displayName = 'TitleItem';
const getStyles = (theme: GrafanaTheme2) => {
+ const item = css({
+ color: `${theme.colors.text.secondary}`,
+ label: 'panel-header-item',
+ cursor: 'auto',
+ border: 'none',
+ borderRadius: `${theme.shape.borderRadius()}`,
+ padding: `${theme.spacing(0, 1)}`,
+ height: `${theme.spacing(theme.components.panel.headerHeight)}`,
+ 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}`,
+ color: `${theme.colors.text.primary}`,
+ },
+ });
+
return {
- item: css({
- color: `${theme.colors.text.secondary}`,
- label: 'panel-header-item',
- cursor: 'auto',
- border: 'none',
- borderRadius: `${theme.shape.borderRadius()}`,
- padding: `${theme.spacing(0, 1)}`,
- height: `${theme.spacing(theme.components.panel.headerHeight)}`,
- 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}`,
- },
- }),
+ item,
+ linkItem: cx(item, css({ cursor: 'pointer' })),
};
};