Drawer
The Drawer component provides a side navigation panel that slides in from the left or right. It supports modal mode with backdrop and focus trapping for accessibility.
Installation
npm install @duskmoon-dev/el-drawer
Usage
import '@duskmoon-dev/el-drawer/register' ;
< el-dm-drawer id = "my-drawer" modal >
< span slot = "header" >Menu</ span >
< nav >
< a href = "/" >Home</ a >
< a href = "/about" >About</ a >
< a href = "/contact" >Contact</ a >
</ nav >
</ el-dm-drawer >
< el-dm-button onclick = " document . querySelector ('#my-drawer'). show ()" >
Open Drawer
</ el-dm-button >
Live Demo
Drawer Demo Open Left Drawer
Open Right Drawer
Navigation Settings Drawer content on the right side.
Close
Properties
Property Type Default Description openbooleanfalseWhether the drawer is open position'left' | 'right''left'Which side the drawer appears from modalbooleanfalseShows backdrop and traps focus when true widthstring'280px'Custom width for the drawer (CSS value)
Methods
Method Description show()Opens the drawer hide()Closes the drawer toggle()Toggles the drawer open/closed
Events
Event Description openFired when drawer opens closeFired when drawer closes
Event Handling
const drawer = document. querySelector ( 'el-dm-drawer' );
drawer. addEventListener ( 'open' , () => {
console. log ( 'Drawer opened' );
});
drawer. addEventListener ( 'close' , () => {
console. log ( 'Drawer closed' );
});
Position Variants
<!-- Left drawer (default) -->
< el-dm-drawer position = "left" >...</ el-dm-drawer >
<!-- Right drawer -->
< el-dm-drawer position = "right" >...</ el-dm-drawer >
Modal vs Non-Modal
<!-- Modal drawer with backdrop -->
< el-dm-drawer modal >
Content that requires focus
</ el-dm-drawer >
<!-- Non-modal drawer (no backdrop) -->
< el-dm-drawer >
Side navigation that doesn't block interaction
</ el-dm-drawer >
Custom Width
< el-dm-drawer width = "400px" >...</ el-dm-drawer >
< el-dm-drawer width = "50vw" >...</ el-dm-drawer >
Slots
Slot Description default Main drawer content (body) headerDrawer header section footerDrawer footer section
CSS Parts
Part Description wrapperThe outer wrapper drawerThe drawer container backdropThe backdrop overlay (modal mode) headerThe header section bodyThe body section footerThe footer section closeThe close button
Styling Example
el-dm-drawer ::part(drawer) {
--drawer-width : 320 px ;
background : linear-gradient ( to bottom , #f8fafc , #ffffff );
}
el-dm-drawer ::part( header ) {
background-color : var ( --color-primary );
color : white ;
}
el-dm-drawer ::part(close) {
color : white ;
}
Accessibility
Uses role="dialog" and aria-modal="true" for modal drawers
Escape key closes modal drawers
Focus is trapped within modal drawers when open
Body scroll is disabled when modal drawer is open
Focus returns to the previously focused element when closed
Close button has aria-label="Close drawer"