{"version":3,"file":"DrawerRoot.cjs","sources":["../../../src/components/Drawer/DrawerRoot.tsx"],"sourcesContent":["import {\n  createVarsResolver,\n  factory,\n  Factory,\n  getDefaultZIndex,\n  getSize,\n  RaikouRadius,\n  rem,\n  StylesApiProps,\n  useDirection,\n  useProps,\n  useStyles,\n} from '../../core';\nimport { ModalBase, ModalBaseProps, ModalBaseStylesNames } from '../ModalBase';\nimport { RaikouTransition } from '../Transition';\nimport { DrawerProvider, ScrollAreaComponent } from './Drawer.context';\nimport {\n  DrawerContentStyle,\n  DrawerHeaderStyle,\n  DrawerInnerStyle,\n  DrawerRootStyle,\n} from './Drawer.css';\n\ntype DrawerPosition = 'bottom' | 'left' | 'right' | 'top';\n\nfunction getDrawerAlign(position: DrawerPosition | undefined) {\n  switch (position) {\n    case 'top':\n      return 'flex-start';\n    case 'bottom':\n      return 'flex-end';\n    default:\n      return undefined;\n  }\n}\n\nfunction getDrawerFlex(position: DrawerPosition | undefined) {\n  if (position === 'top' || position === 'bottom') {\n    return '0 0 calc(100% - var(--drawer-offset, 0rem) * 2)';\n  }\n\n  return undefined;\n}\n\nexport type DrawerRootStylesNames = ModalBaseStylesNames;\nexport type DrawerRootCssVariables = {\n  root:\n    | '--drawer-size'\n    | '--drawer-flex'\n    | '--drawer-height'\n    | '--drawer-align'\n    | '--drawer-justify'\n    | '--drawer-offset';\n};\n\nexport interface DrawerRootProps extends StylesApiProps<DrawerRootFactory>, ModalBaseProps {\n  /** Scroll area component, native `div` element by default */\n  scrollAreaComponent?: ScrollAreaComponent;\n\n  /** Side of the screen on which drawer will be opened, `'left'` by default */\n  position?: DrawerPosition;\n\n  /** Key of `theme.radius` or any valid CSS value to set `border-radius`, numbers are converted to rem, `0` by default */\n  radius?: RaikouRadius;\n\n  /** Drawer container offset from the viewport end, `0` by default */\n  offset?: number | string;\n}\n\nexport type DrawerRootFactory = Factory<{\n  props: DrawerRootProps;\n  ref: HTMLDivElement;\n  stylesNames: DrawerRootStylesNames;\n  vars: DrawerRootCssVariables;\n  compound: true;\n}>;\n\nconst transitions: Record<DrawerPosition, RaikouTransition> = {\n  top: 'slide-down',\n  bottom: 'slide-up',\n  left: 'slide-right',\n  right: 'slide-left',\n};\n\nconst rtlTransitions: Record<DrawerPosition, RaikouTransition> = {\n  top: 'slide-down',\n  bottom: 'slide-up',\n  right: 'slide-right',\n  left: 'slide-left',\n};\n\nconst defaultProps: Partial<DrawerRootProps> = {\n  closeOnClickOutside: true,\n  withinPortal: true,\n  lockScroll: true,\n  trapFocus: true,\n  returnFocus: true,\n  closeOnEscape: true,\n  keepMounted: false,\n  zIndex: getDefaultZIndex('modal'),\n  position: 'left',\n};\n\nconst varsResolver = createVarsResolver<DrawerRootFactory>((_, { position, size, offset }) => ({\n  root: {\n    '--drawer-size': getSize(size, 'drawer-size'),\n    '--drawer-flex': getDrawerFlex(position),\n    '--drawer-height':\n      position === 'left' || position === 'right' ? undefined : 'var(--drawer-size)',\n    '--drawer-align': getDrawerAlign(position),\n    '--drawer-justify': position === 'right' ? 'flex-end' : undefined,\n    '--drawer-offset': rem(offset),\n  },\n}));\n\nexport const DrawerRoot = factory<DrawerRootFactory>((_props, ref) => {\n  const props = useProps('DrawerRoot', defaultProps, _props);\n  const {\n    classNames,\n    className,\n    style,\n    styles,\n    unstyled,\n    vars,\n    scrollAreaComponent,\n    position,\n    transitionProps,\n    radius,\n    ...others\n  } = props;\n\n  const { dir } = useDirection();\n\n  const getStyles = useStyles<DrawerRootFactory>({\n    name: 'Drawer',\n    classes: {\n      root: DrawerRootStyle,\n      header: DrawerHeaderStyle,\n      content: DrawerContentStyle,\n      inner: DrawerInnerStyle,\n    },\n    props,\n    className,\n    style,\n    classNames,\n    styles,\n    unstyled,\n    vars,\n    varsResolver,\n  });\n\n  const drawerTransition = (dir === 'rtl' ? rtlTransitions : transitions)[position!];\n\n  return (\n    <DrawerProvider value={{ scrollAreaComponent, getStyles, radius }}>\n      <ModalBase\n        ref={ref}\n        {...getStyles('root')}\n        transitionProps={{ transition: drawerTransition, ...transitionProps }}\n        unstyled={unstyled}\n        {...others}\n      />\n    </DrawerProvider>\n  );\n});\n\nDrawerRoot.displayName = '@raikou/core/DrawerRoot';\n"],"names":["getDefaultZIndex","createVarsResolver","getSize","rem","factory","useProps","useDirection","useStyles","DrawerRootStyle","DrawerHeaderStyle","DrawerContentStyle","DrawerInnerStyle","DrawerProvider","jsx","ModalBase"],"mappings":"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"}