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}
: null}
- {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' })), }; };