UNPKG

@grafana/ui

Version:
1 lines 6.64 kB
{"version":3,"file":"HoverWidget.mjs","sources":["../../../../src/components/PanelChrome/HoverWidget.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport { ReactElement, useCallback, useRef } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors as e2eSelectors } from '@grafana/e2e-selectors';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { Icon } from '../Icon/Icon';\n\nimport { PanelMenu } from './PanelMenu';\n\ninterface Props {\n children?: React.ReactNode;\n menu?: ReactElement | (() => ReactElement);\n title?: string;\n offset?: number;\n dragClass?: string;\n onOpenMenu?: () => void;\n}\n\nexport function HoverWidget({ menu, title, dragClass, children, offset = -32, onOpenMenu }: Props) {\n const styles = useStyles2(getStyles);\n const draggableRef = useRef<HTMLDivElement>(null);\n const selectors = e2eSelectors.components.Panels.Panel.HoverWidget;\n // Capture the pointer to keep the widget visible while dragging\n const onPointerDown = useCallback((e: React.PointerEvent<HTMLDivElement>) => {\n draggableRef.current?.setPointerCapture(e.pointerId);\n }, []);\n\n const onPointerUp = useCallback((e: React.PointerEvent<HTMLDivElement>) => {\n draggableRef.current?.releasePointerCapture(e.pointerId);\n }, []);\n\n if (children === undefined || React.Children.count(children) === 0) {\n return null;\n }\n\n return (\n <div className={cx(styles.container, 'show-on-hover')} style={{ top: offset }} data-testid={selectors.container}>\n {dragClass && (\n <div\n className={cx(styles.square, styles.draggable, dragClass)}\n onPointerDown={onPointerDown}\n onPointerUp={onPointerUp}\n ref={draggableRef}\n data-testid={selectors.dragIcon}\n >\n <Icon name=\"expand-arrows\" className={styles.draggableIcon} />\n </div>\n )}\n {children}\n {menu && (\n <PanelMenu\n menu={menu}\n title={title}\n placement=\"bottom\"\n menuButtonClass={styles.menuButton}\n onOpenMenu={onOpenMenu}\n />\n )}\n </div>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n container: css({\n label: 'hover-container-widget',\n [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n transition: `all .1s linear`,\n },\n display: 'flex',\n position: 'absolute',\n zIndex: 1,\n right: 0,\n boxSizing: 'content-box',\n alignItems: 'center',\n background: theme.colors.background.secondary,\n color: theme.colors.text.primary,\n border: `1px solid ${theme.colors.border.weak}`,\n borderRadius: theme.shape.radius.default,\n height: theme.spacing(4),\n boxShadow: theme.shadows.z1,\n }),\n square: css({\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n width: theme.spacing(4),\n height: '100%',\n }),\n draggable: css({\n cursor: 'move',\n // mobile do not support draggable panels\n [theme.breakpoints.down('md')]: {\n display: 'none',\n },\n }),\n menuButton: css({\n // Background and border are overriden when topnav toggle is disabled\n background: 'inherit',\n border: 'none',\n '&:hover': {\n background: theme.colors.secondary.main,\n },\n }),\n draggableIcon: css({\n transform: 'rotate(45deg)',\n color: theme.colors.text.secondary,\n '&:hover': {\n color: theme.colors.text.primary,\n },\n }),\n };\n}\n"],"names":["selectors","e2eSelectors"],"mappings":";;;;;;;;;;AAqBO,SAAS,WAAA,CAAY,EAAE,IAAA,EAAM,KAAA,EAAO,WAAW,QAAA,EAAU,MAAA,GAAS,CAAA,EAAA,EAAK,UAAA,EAAW,EAAU;AACjG,EAAA,MAAM,MAAA,GAAS,WAAW,SAAS,CAAA;AACnC,EAAA,MAAM,YAAA,GAAe,OAAuB,IAAI,CAAA;AAChD,EAAA,MAAMA,WAAA,GAAYC,SAAA,CAAa,UAAA,CAAW,MAAA,CAAO,KAAA,CAAM,WAAA;AAEvD,EAAA,MAAM,aAAA,GAAgB,WAAA,CAAY,CAAC,CAAA,KAA0C;AA1B/E,IAAA,IAAA,EAAA;AA2BI,IAAA,CAAA,EAAA,GAAA,YAAA,CAAa,OAAA,KAAb,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAsB,iBAAA,CAAkB,CAAA,CAAE,SAAA,CAAA;AAAA,EAC5C,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,WAAA,GAAc,WAAA,CAAY,CAAC,CAAA,KAA0C;AA9B7E,IAAA,IAAA,EAAA;AA+BI,IAAA,CAAA,EAAA,GAAA,YAAA,CAAa,OAAA,KAAb,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAsB,qBAAA,CAAsB,CAAA,CAAE,SAAA,CAAA;AAAA,EAChD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,IAAI,aAAa,KAAA,CAAA,IAAa,KAAA,CAAM,SAAS,KAAA,CAAM,QAAQ,MAAM,CAAA,EAAG;AAClE,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,OAAO,SAAA,EAAW,eAAe,CAAA,EAAG,KAAA,EAAO,EAAE,GAAA,EAAK,MAAA,EAAO,EAAG,aAAA,EAAaD,YAAU,SAAA,EACnG,QAAA,EAAA;AAAA,IAAA,SAAA,oBACC,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,WAAW,EAAA,CAAG,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,WAAW,SAAS,CAAA;AAAA,QACxD,aAAA;AAAA,QACA,WAAA;AAAA,QACA,GAAA,EAAK,YAAA;AAAA,QACL,eAAaA,WAAA,CAAU,QAAA;AAAA,QAEvB,8BAAC,IAAA,EAAA,EAAK,IAAA,EAAK,eAAA,EAAgB,SAAA,EAAW,OAAO,aAAA,EAAe;AAAA;AAAA,KAC9D;AAAA,IAED,QAAA;AAAA,IACA,IAAA,oBACC,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,KAAA;AAAA,QACA,SAAA,EAAU,QAAA;AAAA,QACV,iBAAiB,MAAA,CAAO,UAAA;AAAA,QACxB;AAAA;AAAA;AACF,GAAA,EAEJ,CAAA;AAEJ;AAEA,SAAS,UAAU,KAAA,EAAsB;AACvC,EAAA,OAAO;AAAA,IACL,WAAW,GAAA,CAAI;AAAA,MACb,KAAA,EAAO,wBAAA;AAAA,MACP,CAAC,KAAA,CAAM,WAAA,CAAY,aAAa,eAAA,EAAiB,QAAQ,CAAC,GAAG;AAAA,QAC3D,UAAA,EAAY,CAAA,cAAA;AAAA,OACd;AAAA,MACA,OAAA,EAAS,MAAA;AAAA,MACT,QAAA,EAAU,UAAA;AAAA,MACV,MAAA,EAAQ,CAAA;AAAA,MACR,KAAA,EAAO,CAAA;AAAA,MACP,SAAA,EAAW,aAAA;AAAA,MACX,UAAA,EAAY,QAAA;AAAA,MACZ,UAAA,EAAY,KAAA,CAAM,MAAA,CAAO,UAAA,CAAW,SAAA;AAAA,MACpC,KAAA,EAAO,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,OAAA;AAAA,MACzB,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,MAAA,CAAO,OAAO,IAAI,CAAA,CAAA;AAAA,MAC7C,YAAA,EAAc,KAAA,CAAM,KAAA,CAAM,MAAA,CAAO,OAAA;AAAA,MACjC,MAAA,EAAQ,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,MACvB,SAAA,EAAW,MAAM,OAAA,CAAQ;AAAA,KAC1B,CAAA;AAAA,IACD,QAAQ,GAAA,CAAI;AAAA,MACV,OAAA,EAAS,MAAA;AAAA,MACT,cAAA,EAAgB,QAAA;AAAA,MAChB,UAAA,EAAY,QAAA;AAAA,MACZ,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,MACtB,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,IACD,WAAW,GAAA,CAAI;AAAA,MACb,MAAA,EAAQ,MAAA;AAAA;AAAA,MAER,CAAC,KAAA,CAAM,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,GAAG;AAAA,QAC9B,OAAA,EAAS;AAAA;AACX,KACD,CAAA;AAAA,IACD,YAAY,GAAA,CAAI;AAAA;AAAA,MAEd,UAAA,EAAY,SAAA;AAAA,MACZ,MAAA,EAAQ,MAAA;AAAA,MACR,SAAA,EAAW;AAAA,QACT,UAAA,EAAY,KAAA,CAAM,MAAA,CAAO,SAAA,CAAU;AAAA;AACrC,KACD,CAAA;AAAA,IACD,eAAe,GAAA,CAAI;AAAA,MACjB,SAAA,EAAW,eAAA;AAAA,MACX,KAAA,EAAO,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,SAAA;AAAA,MACzB,SAAA,EAAW;AAAA,QACT,KAAA,EAAO,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK;AAAA;AAC3B,KACD;AAAA,GACH;AACF;;;;"}