{"version":3,"file":"PanelChrome.cjs","sources":["../../../../src/components/PanelChrome/PanelChrome.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport { CSSProperties, ReactElement, ReactNode, useId, useState } from 'react';\nimport * as React from 'react';\nimport { useMeasure, useToggle } from 'react-use';\n\nimport { GrafanaTheme2, LoadingState } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\n\nimport { useStyles2, useTheme2 } from '../../themes/ThemeContext';\nimport { getFocusStyles } from '../../themes/mixins';\nimport { DelayRender } from '../../utils/DelayRender';\nimport { getFeatureToggle } from '../../utils/featureToggle';\nimport { usePointerDistance } from '../../utils/usePointerDistance';\nimport { useElementSelection } from '../ElementSelectionContext/ElementSelectionContext';\nimport { Icon } from '../Icon/Icon';\nimport { LoadingBar } from '../LoadingBar/LoadingBar';\nimport { Text } from '../Text/Text';\nimport { Tooltip } from '../Tooltip/Tooltip';\n\nimport { HoverWidget } from './HoverWidget';\nimport { PanelDescription } from './PanelDescription';\nimport { PanelMenu } from './PanelMenu';\nimport { PanelStatus } from './PanelStatus';\nimport { TitleItem } from './TitleItem';\n\n/**\n * @internal\n */\nexport type PanelChromeProps = (AutoSize | FixedDimensions) & (Collapsible | HoverHeader);\n\ninterface BaseProps {\n  padding?: PanelPadding;\n  title?: string | React.ReactElement;\n  description?: string | (() => string);\n  titleItems?: ReactNode;\n  menu?: ReactElement | (() => ReactElement);\n  dragClass?: string;\n  dragClassCancel?: string;\n  onDragStart?: (e: React.PointerEvent) => void;\n  selectionId?: string;\n  /**\n   * Use only to indicate loading or streaming data in the panel.\n   * Any other values of loadingState are ignored.\n   */\n  loadingState?: LoadingState;\n  /**\n   * Used to display status message (used for panel errors currently)\n   */\n  statusMessage?: string;\n  /**\n   * Handle opening error details view (like inspect / error tab)\n   */\n  statusMessageOnClick?: (e: React.SyntheticEvent) => void;\n  /**\n   * @deprecated use `actions' instead\n   **/\n  leftItems?: ReactNode[];\n  actions?: ReactNode;\n  displayMode?: 'default' | 'transparent';\n  onCancelQuery?: () => void;\n  /**\n   * callback when opening the panel menu\n   */\n  onOpenMenu?: () => void;\n  /**\n   * Used for setting panel attention\n   */\n  onFocus?: () => void;\n  /**\n   * Debounce the event handler, if possible\n   */\n  onMouseMove?: () => void;\n  onMouseEnter?: () => void;\n  /**\n   * If true, the VizPanelMenu will always be visible in the panel header. Defaults to false.\n   */\n  showMenuAlways?: boolean;\n  /**\n   * Content to display in the sub-header area below the main header.\n   * Can contain text, pills, links, buttons, or any other React elements.\n   */\n  subHeaderContent?: ReactNode;\n}\n\ninterface FixedDimensions extends BaseProps {\n  width: number;\n  height: number;\n  children: (innerWidth: number, innerHeight: number) => ReactNode;\n}\n\ninterface AutoSize extends BaseProps {\n  width?: never;\n  height?: never;\n  children: ReactNode;\n}\n\ninterface Collapsible {\n  collapsible: boolean;\n  collapsed?: boolean;\n  /**\n   * callback when collapsing or expanding the panel\n   */\n  onToggleCollapse?: (collapsed: boolean) => void;\n  hoverHeader?: never;\n  hoverHeaderOffset?: never;\n}\n\ninterface HoverHeader {\n  collapsible?: never;\n  collapsed?: never;\n  showMenuAlways?: never;\n  onToggleCollapse?: never;\n  hoverHeader?: boolean;\n  hoverHeaderOffset?: number;\n}\n\n/**\n * @internal\n */\nexport type PanelPadding = 'none' | 'md';\n\n/**\n * Component used for rendering content wrapped in the same style as grafana panels.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/plugins-panelchrome--docs\n *\n * @internal\n */\nexport function PanelChrome({\n  width,\n  height,\n  children,\n  padding = 'md',\n  title = '',\n  description = '',\n  displayMode = 'default',\n  titleItems,\n  menu,\n  dragClass,\n  dragClassCancel,\n  hoverHeader = false,\n  hoverHeaderOffset,\n  loadingState,\n  statusMessage,\n  statusMessageOnClick,\n  leftItems,\n  actions,\n  selectionId,\n  onCancelQuery,\n  onOpenMenu,\n  collapsible = false,\n  collapsed,\n  onToggleCollapse,\n  onFocus,\n  onMouseMove,\n  onMouseEnter,\n  onDragStart,\n  showMenuAlways = false,\n  subHeaderContent,\n}: PanelChromeProps) {\n  const theme = useTheme2();\n  const styles = useStyles2(getStyles);\n  const panelContentId = useId();\n  const panelTitleId = useId().replace(/:/g, '_');\n  const { isSelected, onSelect, isSelectable } = useElementSelection(selectionId);\n  const pointerDistance = usePointerDistance();\n  const [subHeaderRef, { height: measuredSubHeaderHeight }] = useMeasure<HTMLDivElement>();\n\n  const hasHeader = !hoverHeader;\n\n  const [isOpen, toggleOpen] = useToggle(true);\n\n  // Highlight the full panel when hovering over header\n  const [selectableHighlight, setSelectableHighlight] = useState(false);\n  const onHeaderEnter = React.useCallback(() => setSelectableHighlight(true), []);\n  const onHeaderLeave = React.useCallback(() => setSelectableHighlight(false), []);\n\n  // if collapsed is not defined, then component is uncontrolled and state is managed internally\n  if (collapsed === undefined) {\n    collapsed = !isOpen;\n  }\n\n  // hover menu is only shown on hover when not on touch devices\n  const showOnHoverClass = showMenuAlways ? 'always-show' : 'show-on-hover';\n  const isPanelTransparent = displayMode === 'transparent';\n\n  const headerHeight = getHeaderHeight(theme, hasHeader);\n  const subHeaderHeight = Math.min(measuredSubHeaderHeight, headerHeight);\n  const { contentStyle, innerWidth, innerHeight } = getContentStyle(\n    padding,\n    theme,\n    headerHeight,\n    collapsed,\n    subHeaderHeight,\n    height,\n    width\n  );\n\n  const headerStyles: CSSProperties = {\n    height: headerHeight,\n    cursor: dragClass ? 'move' : 'auto',\n  };\n\n  const containerStyles: CSSProperties = { width, height: collapsed ? undefined : height };\n  const [ref, { width: loadingBarWidth }] = useMeasure<HTMLDivElement>();\n\n  /** Old property name now maps to actions */\n  if (leftItems) {\n    actions = leftItems;\n  }\n\n  const testid = typeof title === 'string' ? selectors.components.Panels.Panel.title(title) : 'Panel';\n\n  // Handle drag & selection events\n  // Mainly the tricky bit of differentiating between dragging and selecting\n  const onPointerUp = React.useCallback(\n    (evt: React.PointerEvent) => {\n      if (\n        pointerDistance.check(evt) ||\n        (dragClassCancel && evt.target instanceof Element && evt.target.closest(`.${dragClassCancel}`))\n      ) {\n        return;\n      }\n      // setTimeout is needed here because onSelect stops the event propagation\n      // By doing so, the event won't get to the document and drag will never be stopped\n      setTimeout(() => onSelect?.(evt));\n    },\n    [dragClassCancel, onSelect, pointerDistance]\n  );\n\n  const onPointerDown = React.useCallback(\n    (evt: React.PointerEvent) => {\n      evt.stopPropagation();\n\n      pointerDistance.set(evt);\n\n      onDragStart?.(evt);\n    },\n    [pointerDistance, onDragStart]\n  );\n\n  const onContentPointerDown = React.useCallback(\n    (evt: React.PointerEvent) => {\n      // Ignore clicks inside buttons, links, canvas and svg elments\n      // This does prevent a clicks inside a graphs from selecting panel as there is normal div above the canvas element that intercepts the click\n      if (\n        evt.target instanceof Element &&\n        (evt.target.closest('button,a,canvas,svg') || evt.target.classList.contains('u-over'))\n      ) {\n        // Stop propagation otherwise row config editor will get selected\n        evt.stopPropagation();\n        return;\n      }\n\n      onSelect?.(evt);\n    },\n    [onSelect]\n  );\n\n  const headerContent = (\n    <>\n      {/* Non collapsible title */}\n      {!collapsible && title && (\n        <div className={styles.title}>\n          <Text\n            element=\"h2\"\n            variant=\"h6\"\n            truncate\n            title={typeof title === 'string' ? title : undefined}\n            id={panelTitleId}\n          >\n            {title}\n          </Text>\n        </div>\n      )}\n\n      {/* Collapsible title */}\n      {collapsible && (\n        <div className={styles.title}>\n          <Text element=\"h2\" variant=\"h6\">\n            <button\n              type=\"button\"\n              className={styles.clearButtonStyles}\n              onClick={() => {\n                toggleOpen();\n                if (onToggleCollapse) {\n                  onToggleCollapse(!collapsed);\n                }\n              }}\n              aria-expanded={!collapsed}\n              aria-controls={!collapsed ? panelContentId : undefined}\n            >\n              <Icon\n                name={!collapsed ? 'angle-down' : 'angle-right'}\n                aria-hidden={!!title}\n                aria-label={\n                  !title ? t('grafana-ui.panel-chrome.aria-label-toggle-collapse', 'toggle collapse panel') : undefined\n                }\n              />\n              <Text variant=\"h6\" truncate id={panelTitleId}>\n                {title}\n              </Text>\n            </button>\n          </Text>\n        </div>\n      )}\n\n      {(titleItems || description) && (\n        <div className={cx(styles.titleItems, dragClassCancel)} data-testid=\"title-items-container\">\n          <PanelDescription description={description} className={dragClassCancel} />\n          {titleItems}\n        </div>\n      )}\n\n      {loadingState === LoadingState.Streaming && (\n        <Tooltip\n          content={\n            onCancelQuery\n              ? t('grafana-ui.panel-chrome.tooltip-stop-streaming', 'Stop streaming')\n              : t('grafana-ui.panel-chrome.tooltip-streaming', 'Streaming')\n          }\n        >\n          <TitleItem className={dragClassCancel} data-testid=\"panel-streaming\" onClick={onCancelQuery}>\n            <Icon name=\"circle-mono\" size=\"md\" className={styles.streaming} />\n          </TitleItem>\n        </Tooltip>\n      )}\n      {loadingState === LoadingState.Loading && onCancelQuery && (\n        <DelayRender delay={2000}>\n          <Tooltip content={t('grafana-ui.panel-chrome.tooltip-cancel', 'Cancel query')}>\n            <TitleItem\n              className={cx(dragClassCancel, styles.pointer)}\n              data-testid=\"panel-cancel-query\"\n              onClick={onCancelQuery}\n            >\n              <Icon name=\"sync-slash\" size=\"md\" />\n            </TitleItem>\n          </Tooltip>\n        </DelayRender>\n      )}\n      {!hoverHeader && <div className={styles.flexGrow} />}\n      {actions && itemsRenderer(actions, (item) => item)}\n    </>\n  );\n\n  // Ignores streaming and loading (cancel query) states for simplicity\n  // If you need to cancel streaming / loading panels set a title\n  const hasHeaderContent = title || description || titleItems || menu || dragClass || actions;\n\n  return (\n    <div className={styles.container}>\n      {/* tabIndex={0} is needed for keyboard accessibility in the plot area */}\n      <section\n        className={cx(\n          styles.panel,\n          isPanelTransparent && styles.panelTransparent,\n          isSelected && 'dashboard-selected-element',\n          !isSelected && isSelectable && selectableHighlight && 'dashboard-selectable-element'\n        )}\n        style={containerStyles}\n        aria-labelledby={!!title ? panelTitleId : undefined}\n        data-testid={testid}\n        tabIndex={0} // eslint-disable-line jsx-a11y/no-noninteractive-tabindex\n        onFocus={onFocus}\n        onMouseMove={onMouseMove}\n        onMouseEnter={onMouseEnter}\n        ref={ref}\n      >\n        <div className={styles.loadingBarContainer}>\n          {loadingState === LoadingState.Loading ? (\n            <LoadingBar\n              width={loadingBarWidth}\n              ariaLabel={t('grafana-ui.panel-chrome.ariaLabel-panel-loading', 'Panel loading bar')}\n            />\n          ) : null}\n        </div>\n\n        {hoverHeader && (\n          <>\n            {hasHeaderContent && (\n              <HoverWidget\n                menu={menu}\n                title={typeof title === 'string' ? title : undefined}\n                dragClass={dragClass}\n                onDragStart={onDragStart}\n                offset={hoverHeaderOffset}\n                onOpenMenu={onOpenMenu}\n              >\n                {headerContent}\n              </HoverWidget>\n            )}\n\n            {statusMessage && (\n              <div className={styles.errorContainerFloating}>\n                <PanelStatus\n                  message={statusMessage}\n                  onClick={statusMessageOnClick}\n                  ariaLabel={t('grafana-ui.panel-chrome.ariaLabel-panel-status', 'Panel status')}\n                />\n              </div>\n            )}\n          </>\n        )}\n\n        {hasHeader && (\n          <>\n            <div\n              className={cx(styles.headerContainer, dragClass)}\n              style={headerStyles}\n              data-testid={selectors.components.Panels.Panel.headerContainer}\n              onPointerDown={onPointerDown}\n              onMouseEnter={isSelectable ? onHeaderEnter : undefined}\n              onMouseLeave={isSelectable ? onHeaderLeave : undefined}\n              onPointerUp={onPointerUp}\n            >\n              {statusMessage && (\n                <div className={dragClassCancel}>\n                  <PanelStatus\n                    message={statusMessage}\n                    onClick={statusMessageOnClick}\n                    ariaLabel={t('grafana-ui.panel-chrome.ariaLabel-panel-status', 'Panel status')}\n                  />\n                </div>\n              )}\n\n              {headerContent}\n\n              {menu && (\n                <PanelMenu\n                  menu={menu}\n                  title={typeof title === 'string' ? title : undefined}\n                  placement=\"bottom-end\"\n                  menuButtonClass={cx(styles.menuItem, dragClassCancel, showOnHoverClass)}\n                  onOpenMenu={onOpenMenu}\n                  dragClassCancel={dragClassCancel}\n                />\n              )}\n            </div>\n            {!collapsed && subHeaderContent && (\n              <div className={styles.subHeader} ref={subHeaderRef}>\n                {subHeaderContent}\n              </div>\n            )}\n          </>\n        )}\n\n        {!collapsed && (\n          <div\n            id={panelContentId}\n            data-testid={selectors.components.Panels.Panel.content}\n            className={cx(styles.content, height === undefined && styles.containNone)}\n            style={contentStyle}\n            onPointerDown={onContentPointerDown}\n          >\n            {typeof children === 'function' ? children(innerWidth, innerHeight) : children}\n          </div>\n        )}\n      </section>\n    </div>\n  );\n}\n\nconst itemsRenderer = (items: ReactNode[] | ReactNode, renderer: (items: ReactNode[]) => ReactNode): ReactNode => {\n  const toRender = React.Children.toArray(items).filter(Boolean);\n  return toRender.length > 0 ? renderer(toRender) : null;\n};\n\nconst getHeaderHeight = (theme: GrafanaTheme2, hasHeader: boolean) => {\n  if (hasHeader) {\n    if (getFeatureToggle('newPanelPadding')) {\n      return theme.spacing.gridSize * 5;\n    }\n\n    return theme.spacing.gridSize * theme.components.panel.headerHeight;\n  }\n\n  return 0;\n};\n\nconst getContentStyle = (\n  padding: string,\n  theme: GrafanaTheme2,\n  headerHeight: number,\n  collapsed: boolean,\n  subHeaderHeight: number,\n  height?: number,\n  width?: number\n) => {\n  const chromePadding = (padding === 'md' ? theme.components.panel.padding : 0) * theme.spacing.gridSize;\n\n  const panelPadding = chromePadding * 2;\n  const panelBorder = 1 * 2;\n\n  let innerWidth = 0;\n  if (width) {\n    innerWidth = width - panelPadding - panelBorder;\n  }\n\n  let innerHeight = 0;\n  if (height) {\n    innerHeight = height - headerHeight - panelPadding - panelBorder - subHeaderHeight;\n  }\n\n  if (collapsed) {\n    innerHeight = headerHeight;\n  }\n\n  const contentStyle: CSSProperties = {\n    padding: chromePadding,\n  };\n\n  return { contentStyle, innerWidth, innerHeight };\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n  const { background, borderColor } = theme.components.panel;\n  const newPanelPadding = getFeatureToggle('newPanelPadding');\n\n  return {\n    container: css({\n      height: '100%',\n      position: 'relative',\n    }),\n    panel: css({\n      label: 'panel-container',\n      backgroundColor: background,\n      border: `1px solid ${borderColor}`,\n      position: 'unset',\n      borderRadius: theme.shape.radius.default,\n      height: '100%',\n      display: 'flex',\n      flexDirection: 'column',\n      overflow: 'hidden',\n\n      '.always-show': {\n        background: 'none',\n        '&:focus-visible, &:hover': {\n          background: theme.colors.secondary.shade,\n        },\n      },\n\n      '.show-on-hover': {\n        opacity: '0',\n        visibility: 'hidden',\n      },\n\n      '&:focus-visible, &:hover': {\n        // only show menu icon on hover or focused panel\n        '.show-on-hover': {\n          opacity: '1',\n          visibility: 'visible',\n        },\n      },\n\n      '&:focus-visible': getFocusStyles(theme),\n\n      // The not:(:focus) clause is so that this rule is only applied when decendants are focused (important otherwise the hover header is visible when panel is clicked).\n      '&:focus-within:not(:focus)': {\n        '.show-on-hover': {\n          visibility: 'visible',\n          opacity: '1',\n        },\n      },\n    }),\n    panelTransparent: css({\n      label: 'panel-transparent-container',\n      backgroundColor: 'transparent',\n      border: '1px solid transparent',\n      boxSizing: 'border-box',\n      '&:hover': {\n        border: `1px solid ${borderColor}`,\n      },\n    }),\n    loadingBarContainer: css({\n      label: 'panel-loading-bar-container',\n      position: 'absolute',\n      top: 0,\n      width: '100%',\n      // this is to force the loading bar container to create a new stacking context\n      // otherwise, in webkit browsers on windows/linux, the aliasing of panel text changes when the loading bar is shown\n      // see https://github.com/grafana/grafana/issues/88104\n      zIndex: 1,\n    }),\n    containNone: css({\n      contain: 'none',\n    }),\n    content: css({\n      label: 'panel-content',\n      flexGrow: 1,\n      contain: 'size layout',\n    }),\n    headerContainer: css({\n      label: 'panel-header',\n      display: 'flex',\n      alignItems: 'center',\n      // remove logic after newPanelPadding feature toggle is removed\n      padding: newPanelPadding ? theme.spacing(0, 1, 0, 1.5) : theme.spacing(0, 0.5, 0, 1),\n      gap: theme.spacing(1),\n    }),\n    subHeader: css({\n      label: 'panel-sub-header',\n      display: 'flex',\n      alignItems: 'center',\n      maxHeight: theme.spacing.gridSize * theme.components.panel.headerHeight,\n      padding: newPanelPadding ? theme.spacing(0, 1, 0, 1.5) : theme.spacing(0, 0.5, 0, 1),\n      overflow: 'hidden',\n      gap: theme.spacing(1),\n    }),\n    pointer: css({\n      cursor: 'pointer',\n    }),\n    streaming: css({\n      label: 'panel-streaming',\n      marginRight: 0,\n      color: theme.colors.success.text,\n\n      '&:hover': {\n        color: theme.colors.success.text,\n      },\n    }),\n    title: css({\n      label: 'panel-title',\n      display: 'flex',\n      minWidth: 0,\n      '& > h2': {\n        minWidth: 0,\n      },\n    }),\n    items: css({\n      display: 'flex',\n    }),\n    item: css({\n      display: 'flex',\n      justifyContent: 'center',\n      alignItems: 'center',\n    }),\n    hiddenMenu: css({\n      visibility: 'hidden',\n    }),\n    menuItem: css({\n      label: 'panel-menu',\n      border: 'none',\n      background: theme.colors.secondary.main,\n      '&:hover': {\n        background: theme.colors.secondary.shade,\n      },\n    }),\n    errorContainerFloating: css({\n      label: 'error-container',\n      position: 'absolute',\n      left: 0,\n      top: 0,\n      zIndex: 1,\n    }),\n    titleItems: css({\n      display: 'flex',\n      height: '100%',\n      alignItems: 'center',\n    }),\n    clearButtonStyles: css({\n      alignItems: 'center',\n      display: 'flex',\n      gap: theme.spacing(0.5),\n      background: 'transparent',\n      border: 'none',\n      padding: 0,\n      maxWidth: '100%',\n    }),\n    flexGrow: css({\n      flexGrow: 1,\n    }),\n  };\n};\n"],"names":["useTheme2","useStyles2","useId","useElementSelection","usePointerDistance","useMeasure","useToggle","useState","React","selectors","jsxs","Fragment","jsx","Text","Icon","t","cx","PanelDescription","LoadingState","Tooltip","TitleItem","DelayRender","LoadingBar","HoverWidget","PanelStatus","PanelMenu","getFeatureToggle","css","getFocusStyles"],"mappings":"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"}