{"version":3,"file":"Drawer.cjs","sources":["../../../../src/components/Drawer/Drawer.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport { FloatingFocusManager, useFloating } from '@floating-ui/react';\nimport RcDrawer from '@rc-component/drawer';\nimport { ReactNode, useCallback, useEffect, useId, useState } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { getDragStyles } from '../DragHandle/DragHandle';\nimport { IconButton } from '../IconButton/IconButton';\nimport { Stack } from '../Layout/Stack/Stack';\nimport { getPortalContainer } from '../Portal/Portal';\nimport { ScrollContainer } from '../ScrollContainer/ScrollContainer';\nimport { Text } from '../Text/Text';\n\nexport interface Props {\n  children: ReactNode;\n  /** Title shown at the top of the drawer */\n  title?: ReactNode;\n  /** Subtitle shown below the title */\n  subtitle?: ReactNode;\n  /** Should the Drawer be closable by clicking on the mask, defaults to true */\n  closeOnMaskClick?: boolean;\n  /** @deprecated */\n  inline?: boolean;\n  /**\n   * @deprecated use the size property instead\n   **/\n  width?: number | string;\n  /**\n   * @deprecated use a large size instead if high width is needed\n   **/\n  expandable?: boolean;\n  /**\n   * Specifies the width and min-width.\n   * sm = width 25vw & min-width 384px\n   * md = width 50vw & min-width 568px\n   * lg = width 75vw & min-width 744px\n   **/\n  size?: 'sm' | 'md' | 'lg';\n  /** Tabs */\n  tabs?: React.ReactNode;\n  /**\n   * Whether the content should be wrapped in a ScrollContainer\n   * Only change this if you intend to manage scroll behaviour yourself\n   * (e.g. having a split pane with independent scrolling)\n   **/\n  scrollableContent?: boolean;\n  /** Callback for closing the drawer */\n  onClose: () => void;\n}\n\nconst drawerSizes = {\n  sm: { width: '25vw', minWidth: 384 },\n  md: { width: '50vw', minWidth: 568 },\n  lg: { width: '75vw', minWidth: 744 },\n};\n\n/**\n * Drawer is a slide in overlay that can be used to display additional information without hiding the main page content. It can be anchored to the left or right edge of the screen.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/overlays-drawer--docs\n */\nexport function Drawer({\n  children,\n  onClose,\n  closeOnMaskClick = true,\n  scrollableContent = true,\n  title,\n  subtitle,\n  width,\n  size = 'md',\n  tabs,\n}: Props) {\n  const [drawerWidth, onMouseDown, onTouchStart] = useResizebleDrawer();\n\n  const styles = useStyles2(getStyles);\n  const wrapperStyles = useStyles2(getWrapperStyles, size);\n  const dragStyles = useStyles2(getDragStyles);\n  const titleId = useId();\n\n  const { context, refs } = useFloating({\n    open: true,\n    onOpenChange: (open) => {\n      if (!open) {\n        onClose?.();\n      }\n    },\n  });\n\n  // Adds body class while open so the toolbar nav can hide some actions while drawer is open\n  useBodyClassWhileOpen();\n\n  const content = <div className={styles.content}>{children}</div>;\n  const overrideWidth = drawerWidth ?? width ?? drawerSizes[size].width;\n  const minWidth = drawerSizes[size].minWidth;\n\n  return (\n    <RcDrawer\n      open={true}\n      onClose={onClose}\n      placement=\"right\"\n      getContainer={'.main-view'}\n      className={styles.drawerContent}\n      rootClassName={styles.drawer}\n      classNames={{\n        wrapper: wrapperStyles,\n      }}\n      styles={{\n        wrapper: {\n          width: overrideWidth,\n          minWidth,\n        },\n      }}\n      aria-label={typeof title === 'string' ? selectors.components.Drawer.General.title(title) : undefined}\n      aria-labelledby={typeof title !== 'string' ? titleId : undefined}\n      width={''}\n      motion={{\n        motionAppear: true,\n        motionName: styles.drawerMotion,\n      }}\n      maskClassName={styles.mask}\n      maskClosable={closeOnMaskClick}\n      maskMotion={{\n        motionAppear: true,\n        motionName: styles.maskMotion,\n      }}\n    >\n      <FloatingFocusManager context={context} modal getInsideElements={() => [getPortalContainer()]}>\n        <div className={styles.container} ref={refs.setFloating}>\n          {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n          <div\n            className={cx(dragStyles.dragHandleVertical, styles.resizer)}\n            onMouseDown={onMouseDown}\n            onTouchStart={onTouchStart}\n          />\n          <div className={cx(styles.header, Boolean(tabs) && styles.headerWithTabs)}>\n            <div className={styles.actions}>\n              <IconButton\n                name=\"times\"\n                variant=\"secondary\"\n                onClick={onClose}\n                data-testid={selectors.components.Drawer.General.close}\n                tooltip={t(`grafana-ui.drawer.close`, 'Close')}\n              />\n            </div>\n            {typeof title === 'string' ? (\n              <Stack direction=\"column\">\n                <Text element=\"h3\" truncate>\n                  {title}\n                </Text>\n                {subtitle && (\n                  <div className={styles.subtitle} data-testid={selectors.components.Drawer.General.subtitle}>\n                    {subtitle}\n                  </div>\n                )}\n              </Stack>\n            ) : (\n              <div id={titleId}>{title}</div>\n            )}\n            {tabs && <div className={styles.tabsWrapper}>{tabs}</div>}\n          </div>\n          {!scrollableContent ? content : <ScrollContainer showScrollIndicators>{content}</ScrollContainer>}\n        </div>\n      </FloatingFocusManager>\n    </RcDrawer>\n  );\n}\n\nfunction useResizebleDrawer(): [\n  string | undefined,\n  React.EventHandler<React.MouseEvent>,\n  React.EventHandler<React.TouchEvent>,\n] {\n  const [drawerWidth, setDrawerWidth] = useState<string | undefined>(undefined);\n\n  const onMouseMove = useCallback((e: MouseEvent) => {\n    setDrawerWidth(getCustomDrawerWidth(e.clientX));\n  }, []);\n\n  const onTouchMove = useCallback((e: TouchEvent) => {\n    const touch = e.touches[0];\n    setDrawerWidth(getCustomDrawerWidth(touch.clientX));\n  }, []);\n\n  const onMouseUp = useCallback(\n    (e: MouseEvent) => {\n      document.removeEventListener('mousemove', onMouseMove);\n      document.removeEventListener('mouseup', onMouseUp);\n    },\n    [onMouseMove]\n  );\n\n  const onTouchEnd = useCallback(\n    (e: TouchEvent) => {\n      document.removeEventListener('touchmove', onTouchMove);\n      document.removeEventListener('touchend', onTouchEnd);\n    },\n    [onTouchMove]\n  );\n\n  function onMouseDown(e: React.MouseEvent<HTMLDivElement>) {\n    e.stopPropagation();\n    e.preventDefault();\n    // we will only add listeners when needed, and remove them afterward\n    document.addEventListener('mousemove', onMouseMove);\n    document.addEventListener('mouseup', onMouseUp);\n  }\n\n  function onTouchStart(e: React.TouchEvent<HTMLDivElement>) {\n    e.stopPropagation();\n    e.preventDefault();\n    // we will only add listeners when needed, and remove them afterward\n    document.addEventListener('touchmove', onTouchMove);\n    document.addEventListener('touchend', onTouchEnd);\n  }\n\n  return [drawerWidth, onMouseDown, onTouchStart];\n}\n\nfunction getCustomDrawerWidth(clientX: number) {\n  let offsetRight = document.body.offsetWidth - (clientX - document.body.offsetLeft);\n  let widthPercent = Math.min((offsetRight / document.body.clientWidth) * 100, 98).toFixed(2);\n  return `${widthPercent}vw`;\n}\n\nfunction useBodyClassWhileOpen() {\n  useEffect(() => {\n    if (!document.body) {\n      return;\n    }\n\n    document.body.classList.add('body-drawer-open');\n\n    return () => {\n      document.body.classList.remove('body-drawer-open');\n    };\n  }, []);\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n  return {\n    container: css({\n      display: 'flex',\n      flexDirection: 'column',\n      height: '100%',\n      flex: '1 1 0',\n      minHeight: '100%',\n      position: 'relative',\n    }),\n    drawer: css({\n      inset: 0,\n      position: 'fixed',\n      zIndex: theme.zIndex.modalBackdrop,\n      pointerEvents: 'none',\n\n      '.rc-drawer-content-wrapper': {\n        boxShadow: theme.shadows.z3,\n      },\n    }),\n    drawerContent: css({\n      backgroundColor: theme.colors.background.primary,\n      display: 'flex',\n      flexDirection: 'column',\n      height: '100%',\n      pointerEvents: 'auto',\n      width: '100%',\n    }),\n    drawerMotion: css({\n      '&-appear': {\n        [theme.transitions.handleMotion('no-preference')]: {\n          transform: 'translateX(100%)',\n          transition: 'none',\n        },\n        [theme.transitions.handleMotion('reduce')]: {\n          opacity: 0,\n        },\n        '&-active': {\n          [theme.transitions.handleMotion('no-preference')]: {\n            transform: 'translateX(0)',\n            transition: theme.transitions.create('transform'),\n          },\n          [theme.transitions.handleMotion('reduce')]: {\n            transition: `opacity 0.2s ease-in-out`,\n            opacity: 1,\n          },\n        },\n      },\n    }),\n    // we want the mask itself to span the whole page including the top bar\n    // this ensures trying to click something in the top bar will close the drawer correctly\n    // but we don't want the backdrop styling to apply over the top bar as it looks weird\n    // instead have a child pseudo element to apply the backdrop styling below the top bar\n    mask: css({\n      inset: 0,\n      pointerEvents: 'auto',\n      position: 'fixed',\n      zIndex: theme.zIndex.modalBackdrop,\n\n      '&:before': {\n        backgroundColor: theme.components.overlay.background,\n        bottom: 0,\n        content: '\"\"',\n        left: 0,\n        position: 'fixed',\n        right: 0,\n        top: 0,\n      },\n    }),\n    maskMotion: css({\n      '&-appear': {\n        opacity: 0,\n\n        '&-active': {\n          opacity: 1,\n          [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n            transition: theme.transitions.create('opacity'),\n          },\n        },\n      },\n    }),\n    header: css({\n      label: 'drawer-header',\n      flexGrow: 0,\n      padding: theme.spacing(2, 2, 3),\n      borderBottom: `1px solid ${theme.colors.border.weak}`,\n    }),\n    headerWithTabs: css({\n      borderBottom: 'none',\n    }),\n    actions: css({\n      position: 'absolute',\n      right: theme.spacing(1),\n      top: theme.spacing(1),\n    }),\n    subtitle: css({\n      label: 'drawer-subtitle',\n      color: theme.colors.text.secondary,\n    }),\n    content: css({\n      padding: theme.spacing(theme.components.drawer?.padding ?? 2),\n      height: '100%',\n      flexGrow: 1,\n      minHeight: 0,\n    }),\n    tabsWrapper: css({\n      label: 'drawer-tabs',\n      paddingLeft: theme.spacing(2),\n      margin: theme.spacing(1, -1, -3, -3),\n    }),\n    resizer: css({\n      top: 0,\n      left: theme.spacing(-1),\n      bottom: 0,\n      position: 'absolute',\n      zIndex: theme.zIndex.modal,\n    }),\n  };\n};\n\nfunction getWrapperStyles(theme: GrafanaTheme2, size: 'sm' | 'md' | 'lg') {\n  return css({\n    bottom: 0,\n    label: `drawer-content-wrapper-${size}`,\n    position: 'absolute',\n    right: 0,\n    top: 0,\n    zIndex: theme.zIndex.modalBackdrop,\n\n    [theme.breakpoints.down('md')]: {\n      width: `calc(100% - ${theme.spacing(2)}) !important`,\n      minWidth: '0 !important',\n    },\n  });\n}\n"],"names":["useStyles2","getDragStyles","useId","useFloating","jsx","RcDrawer","selectors","FloatingFocusManager","getPortalContainer","cx","jsxs","IconButton","t","Stack","Text","ScrollContainer","useState","useCallback","useEffect","css"],"mappings":"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"}