/* eslint-disable no-shadow */
import { space, SpaceProps, LayoutProps, variant, layout, color, ColorProps } from 'styled-system'
import { styled } from '@styled-components'
import { cssClass } from '../../utils/css-class.js'
import { DEFAULT_DRAWER_WIDTH } from '../../constants.js'
/**
* Props for Drawer component. Apart from those described below it also extends all
* {@link SpaceProps}.
*
* @alias DrawerProps
* @extends SpaceProps
* @extends LayoutProps
* @extends ColorProps
* @memberof Drawer
*/
export type DrawerProps = SpaceProps & LayoutProps & ColorProps & {
/** Indicates if drawer should be hidden */
isHidden?: boolean;
/**
* Drawer variant
*/
variant?: 'filter';
}
const variants = variant({
variants: {
filter: {
bg: 'filterBg',
width: '400px',
className: cssClass(['Drawer', 'Drawer_Filter']),
},
},
})
/**
* @classdesc
*
*
*
* Drawer component renders a huge side area where {@link BaseActionComponent} renders
* all actions where {@link Action.showInDrawer} is set to true.
*
* You probably don't want to use it directly in your actions, but if you decide to set
* `showInDrawer` to true you will probably want to use `DrawerContent` or `DrawerFooter`
* components.
*
* All these components: Drawer, DrawerContent and Drawer Footer extends {@link SpaceProps}.
*
* ### Usage
*
* ```javascript
* import { Drawer, DrawerProps, DrawerContent, DrawerFooter } from '@adminjs/design-system'
* ```
*
* @component
* @subcategory Molecules
* @hideconstructor
* @see DrawerProps
* @see {@link https://storybook.adminjs.co/?path=/story/designsystem-molecules-drawer--default Storybook}
* @example
* return (
*
*
*
*
*
* Edit
*
*
*
*
*
*
*
*
*
*
*
*
* )
*
* @section design-system
*/
const Drawer = styled.section`
position: fixed;
top: 0;
right: 0;
display: flex;
flex-direction: column;
height: 100%;
max-width: 100%;
z-index: 100;
transform: translateX(${({ isHidden }) => (isHidden ? '100%' : '0%')});
transition: transform 0.25s ease-in-out;
box-shadow: -1px 0px 0px #EEEEEF, -4px 0px 16px rgba(107, 119, 129, 0.1);
background-color: ${({ theme }) => theme.colors.container};
overflow-y: auto;
overflow-x: hidden;
${space};
${color};
${layout};
${variants};
`
Drawer.defaultProps = {
width: DEFAULT_DRAWER_WIDTH,
className: cssClass('Drawer'),
}
Drawer.displayName = 'Drawer'
export { Drawer }
export default Drawer