{"version":3,"file":"Drawer.mjs","sources":["../../../../src/components/Drawer/Drawer.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport { useDialog } from '@react-aria/dialog';\nimport { FocusScope } from '@react-aria/focus';\nimport { useOverlay } from '@react-aria/overlays';\nimport RcDrawer from 'rc-drawer';\nimport { ReactNode, useCallback, useEffect, useState } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { useStyles2 } from '../../themes';\nimport { t } from '../../utils/i18n';\nimport { getDragStyles } from '../DragHandle/DragHandle';\nimport { IconButton } from '../IconButton/IconButton';\nimport { ScrollContainer } from '../ScrollContainer/ScrollContainer';\nimport { Text } from '../Text/Text';\n\nimport 'rc-drawer/assets/index.css';\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\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\n  const overlayRef = React.useRef(null);\n  const { dialogProps, titleProps } = useDialog({}, overlayRef);\n  const { overlayProps } = useOverlay(\n    {\n      isDismissable: false,\n      isOpen: true,\n      onClose,\n    },\n    overlayRef\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      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      <FocusScope restoreFocus contain autoFocus>\n        <div\n          aria-label={\n            typeof title === 'string'\n              ? selectors.components.Drawer.General.title(title)\n              : selectors.components.Drawer.General.title('no title')\n          }\n          className={styles.container}\n          {...overlayProps}\n          {...dialogProps}\n          ref={overlayRef}\n        >\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          {typeof title === 'string' && (\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              <div className={styles.titleWrapper}>\n                <Text element=\"h3\" {...titleProps}>\n                  {title}\n                </Text>\n                {subtitle && (\n                  <div className={styles.subtitle} data-testid={selectors.components.Drawer.General.subtitle}>\n                    {subtitle}\n                  </div>\n                )}\n                {tabs && <div className={styles.tabsWrapper}>{tabs}</div>}\n              </div>\n            </div>\n          )}\n          {typeof title !== 'string' && title}\n          {!scrollableContent ? content : <ScrollContainer showScrollIndicators>{content}</ScrollContainer>}\n        </div>\n      </FocusScope>\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      top: 0,\n\n      '.rc-drawer-content-wrapper': {\n        boxShadow: theme.shadows.z3,\n      },\n    }),\n    drawerContent: css({\n      backgroundColor: `${theme.colors.background.primary} !important`,\n      display: 'flex',\n      overflow: 'unset !important',\n      flexDirection: 'column',\n    }),\n    drawerMotion: css({\n      '&-appear': {\n        transform: 'translateX(100%)',\n        transition: 'none !important',\n\n        '&-active': {\n          transition: `${theme.transitions.create('transform')} !important`,\n          transform: 'translateX(0)',\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      // The !important here is to override the default .rc-drawer-mask styles\n      backgroundColor: 'transparent !important',\n      // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n      position: 'fixed !important' as 'fixed',\n\n      '&:before': {\n        backgroundColor: `${theme.components.overlay.background} !important`,\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          transition: theme.transitions.create('opacity'),\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    titleWrapper: css({\n      label: 'drawer-title',\n      overflowWrap: 'break-word',\n    }),\n    subtitle: css({\n      label: 'drawer-subtitle',\n      color: theme.colors.text.secondary,\n      paddingTop: theme.spacing(1),\n    }),\n    content: css({\n      padding: theme.spacing(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    label: `drawer-content-wrapper-${size}`,\n    overflow: 'unset !important',\n\n    [theme.breakpoints.down('md')]: {\n      width: `calc(100% - ${theme.spacing(2)}) !important`,\n      minWidth: '0 !important',\n    },\n  });\n}\n"],"names":[],"mappings":"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"}