UNPKG

koval-ui

Version:

React components collection with minimalistic design. Supports theming, layout, and input validation.

1 lines 3.99 kB
{"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"}