{"version":3,"file":"Drawer.cjs","sources":["../../../../src/lib/Drawer/Drawer.tsx"],"sourcesContent":["import type {ReactNode} from 'react';\nimport {useMemo} from 'react';\nimport {useLocalTheme, useRootTheme} from 'css-vars-hook';\nimport {forwardRef} from 'react';\nimport classNames from 'classnames';\n\nimport type {DataAttributes, LibraryProps} from '@/internal/LibraryAPI';\nimport {Portal} from '@/internal/Portal';\nimport {useInternalRef} from '@/internal/hooks/useInternalRef';\nimport {useDismiss} from '@/internal/hooks/useDismiss';\nimport {TransitionSlideLeft, TransitionSlideRight} from '@/internal/Transitions';\n\nimport classes from './Drawer.module.css';\nimport {useDrawerState} from './useDrawerState.tsx';\n\nenum Placements {\n    left = 'left',\n    right = 'right',\n}\n\nexport type Props = DataAttributes &\n    LibraryProps & {\n        children?: ReactNode;\n        /** Choose side to attach Drawer */\n        placement?: keyof typeof Placements;\n        /** Provide unique id for Drawer */\n        id: string;\n    };\n\nexport const Drawer = forwardRef<HTMLDivElement, Props>(\n    ({children, className, placement = Placements.left, id, ...nativeProps}, refProp) => {\n        const ref = useInternalRef(refProp);\n        const {isOpen, closeDrawer} = useDrawerState(id);\n\n        const {getTheme} = useRootTheme();\n        const {LocalRoot} = useLocalTheme();\n\n        const Transition = useMemo(\n            () =>\n                ({\n                    [Placements.left]: TransitionSlideLeft,\n                    [Placements.right]: TransitionSlideRight,\n                })[placement],\n            [placement]\n        );\n\n        useDismiss(closeDrawer, ref, isOpen);\n\n        return (\n            <Portal>\n                <Transition show={isOpen} nodeRef={ref}>\n                    <LocalRoot theme={getTheme()} className={classes.provider}>\n                        <div className={classes.backdrop}>\n                            <div\n                                {...nativeProps}\n                                className={classNames(\n                                    classes.drawer,\n                                    {\n                                        [classes.left]: placement === Placements.left,\n                                        [classes.right]: placement === Placements.right,\n                                    },\n                                    className\n                                )}\n                                ref={ref}>\n                                {children}\n                            </div>\n                        </div>\n                    </LocalRoot>\n                </Transition>\n            </Portal>\n        );\n    }\n);\n\nDrawer.displayName = 'Drawer';\n"],"names":["Drawer","forwardRef","children","className","placement","id","nativeProps","refProp","ref","useInternalRef","isOpen","closeDrawer","useDrawerState","getTheme","useRootTheme","LocalRoot","useLocalTheme","Transition","useMemo","TransitionSlideLeft","TransitionSlideRight","useDismiss","jsx","Portal","classes","classNames"],"mappings":"ghBA6BaA,EAASC,EAAAA,WAClB,CAAC,CAAC,SAAAC,EAAU,UAAAC,EAAW,UAAAC,EAAY,OAAiB,GAAAC,EAAI,GAAGC,CAAA,EAAcC,IAAY,CACjF,MAAMC,EAAMC,EAAAA,eAAeF,CAAO,EAC5B,CAAC,OAAAG,EAAQ,YAAAC,GAAeC,EAAAA,eAAeP,CAAE,EAEzC,CAAC,SAAAQ,CAAA,EAAYC,eAAA,EACb,CAAC,UAAAC,CAAA,EAAaC,gBAAA,EAEdC,EAAaC,EAAAA,QACf,KACK,CACI,KAAkBC,EAAAA,UAClB,MAAmBC,EAAAA,UAAA,GACrBhB,CAAS,EAChB,CAACA,CAAS,CAAA,EAGdiB,OAAAA,aAAWV,EAAaH,EAAKE,CAAM,EAG/BY,EAAAA,IAACC,EAAAA,QACG,SAAAD,EAAAA,IAACL,EAAA,CAAW,KAAMP,EAAQ,QAASF,EAC/B,SAAAc,EAAAA,IAACP,EAAA,CAAU,MAAOF,EAAA,EAAY,UAAWW,EAAAA,QAAQ,SAC7C,eAAC,MAAA,CAAI,UAAWA,EAAAA,QAAQ,SACpB,SAAAF,EAAAA,IAAC,MAAA,CACI,GAAGhB,EACJ,UAAWmB,EACPD,EAAAA,QAAQ,OACR,CACI,CAACA,EAAAA,QAAQ,IAAI,EAAGpB,IAAc,OAC9B,CAACoB,EAAAA,QAAQ,KAAK,EAAGpB,IAAc,OAAA,EAEnCD,CAAA,EAEJ,IAAAK,EACC,SAAAN,CAAA,CAAA,EAET,CAAA,CACJ,CAAA,CACJ,EACJ,CAER,CACJ,EAEAF,EAAO,YAAc"}