Drawer are to display content that is out of context of the rest of the page (notifications, navigation, settings). Or use Panel inline as its content couples with or closely relates to the content on the page (details, extra actions/options). MDN Popover API
<nve-drawer id="drawer" closable modal>
<nve-drawer-header>
<h3 nve-text="heading semibold sm">Drawer Header</h3>
</nve-drawer-header>
<nve-drawer-content>
<p nve-text="body">drawer content</p>
</nve-drawer-content>
<nve-drawer-footer>
<p nve-text="body">drawer footer</p>
</nve-drawer-footer>
</nve-drawer>
<nve-button popovertarget="drawer">button</nve-button>
drawer content
drawer footer
button
Installation
Learn more about native Popover APIs.
<script type="module">
import '@nvidia-elements/core/drawer/define.js';
</script>
<nve-drawer id="drawer" closable modal>
<nve-drawer-header>
<h3 nve-text="heading semibold sm">Drawer Header</h3>
</nve-drawer-header>
<nve-drawer-content>
<p nve-text="body">drawer content</p>
</nve-drawer-content>
<nve-drawer-footer>
<p nve-text="body">drawer footer</p>
</nve-drawer-footer>
</nve-drawer>
<nve-button popovertarget="drawer">button</nve-button>
Visual
Complete drawer layout pattern with header, scrollable content, and footer sections for consistent drawer structure.
<nve-drawer closable>
<nve-drawer-header>
<h3 nve-text="heading semibold sm">Drawer Header</h3>
</nve-drawer-header>
<nve-drawer-content>
<p nve-text="body">drawer content</p>
</nve-drawer-content>
<nve-drawer-footer>
<p nve-text="body">drawer footer</p>
</nve-drawer-footer>
</nve-drawer>
Events
Event Description close Dispatched when the drawer closes.
open Dispatched when the drawer opens.
toggle Dispatched on a popover element just after showing or hiding. MDN
beforetoggle Dispatched on a popover just before showing or hiding. MDN
Event handling for drawer open, close, and toggle events. Useful for adding custom behavior when drawer state changes.
<nve-drawer id="drawer" closable modal position="right">
<nve-drawer-header>
<h3 nve-text="heading">Drawer Header</h3>
</nve-drawer-header>
<nve-drawer-content>
<p nve-text="body">drawer content</p>
</nve-drawer-content>
</nve-drawer>
<nve-button popovertarget="drawer">open</nve-button>
<script type="module">
const drawer = document.querySelector("nve-drawer");
drawer.addEventListener("beforetoggle", () => console.log("beforetoggle"));
drawer.addEventListener("toggle", () => console.log("toggle"));
drawer.addEventListener("open", () => console.log("open"));
drawer.addEventListener("close", () => console.log("close"));
</script>
Size
Controls the visual scale of an element to match its importance and available space.
Size Description sm Compact size for dense layouts or secondary elements with less visual prominence. md Standard size that works well in most contexts and provides balanced visibility. lg Larger size for emphasizing important elements or improving touch targets in spacious layouts.
Small
Small drawer size for compact side panels and quick actions. Ideal for navigation menus, filters, or supplementary information that shouldn't dominate the screen.
<nve-drawer size="sm" closable>
<nve-drawer-header>
<h3 nve-text="heading semibold sm">Drawer Header</h3>
</nve-drawer-header>
<nve-drawer-content>
<p nve-text="body">drawer content</p>
</nve-drawer-content>
<nve-drawer-footer>
<p nve-text="body">drawer footer</p>
</nve-drawer-footer>
</nve-drawer>
Large
Large drawer size for comprehensive content like detailed forms or settings panels. Use when users need significant screen space for complex tasks without leaving the current page context.
<nve-drawer size="lg" closable>
<nve-drawer-header>
<h3 nve-text="heading semibold sm">Drawer Header</h3>
</nve-drawer-header>
<nve-drawer-content>
<p nve-text="body">drawer content</p>
</nve-drawer-content>
<nve-drawer-footer>
<p nve-text="body">drawer footer</p>
</nve-drawer-footer>
</nve-drawer>
Drawer with scrollable content for overflow behavior. Use when drawer content exceeds viewport height, ensuring header and footer remain fixed while content scrolls independently.
<nve-drawer closable>
<nve-drawer-header>
<h3 nve-text="heading semibold sm">Drawer Header</h3>
</nve-drawer-header>
<nve-drawer-content>
<p nve-text="body" style="height: 2500px">drawer content</p>
</nve-drawer-content>
<nve-drawer-footer>
<p nve-text="body">drawer footer</p>
</nve-drawer-footer>
</nve-drawer>
Position
Determines the position of an element along both inline and block axis. MDN
Position Description left right bottom top
Drawer positioning from all four screen edges. Use position based on content type and user workflow: right for details/settings, left for navigation, top/bottom for notifications or quick actions that span the width.
<div nve-layout="row align:center gap:md">
<nve-button popovertarget="popover-top">open top</nve-button>
<nve-button popovertarget="popover-left">open left</nve-button>
<nve-button popovertarget="popover-right">open right</nve-button>
<nve-button popovertarget="popover-bottom">open bottom</nve-button>
</div>
<nve-drawer id="popover-top" closable modal position="top">
<nve-drawer-header>
<h3 nve-text="heading">Drawer Header Top</h3>
</nve-drawer-header>
<nve-drawer-content>
<p nve-text="body" style="height: 200px">some text content in a top closable drawer</p>
</nve-drawer-content>
<nve-drawer-footer>
<p nve-text="body">some text footer content</p>
</nve-drawer-footer>
</nve-drawer>
<nve-drawer id="popover-left" closable modal position="left">
<nve-drawer-header>
<h3 nve-text="heading">Drawer Header Left</h3>
</nve-drawer-header>
<nve-drawer-content>
<p nve-text="body">drawer content</p>
</nve-drawer-content>
<nve-drawer-footer>
<p nve-text="body">drawer footer</p>
</nve-drawer-footer>
</nve-drawer>
<nve-drawer id="popover-right" closable modal position="right">
<nve-drawer-header>
<h3 nve-text="heading">Drawer Header Right</h3>
</nve-drawer-header>
<nve-drawer-content>
<p nve-text="body">some text content in a right closable drawer</p>
</nve-drawer-content>
<nve-drawer-footer>
<p nve-text="body">some text footer content</p>
</nve-drawer-footer>
</nve-drawer>
<nve-drawer id="popover-bottom" closable modal position="bottom">
<nve-drawer-header>
<h3 nve-text="heading">Drawer Header Bottom</h3>
</nve-drawer-header>
<nve-drawer-content>
<p nve-text="body" style="height: 200px">some text content in a bottom closable drawer</p>
</nve-drawer-content>
<nve-drawer-footer>
<p nve-text="body">some text footer content</p>
</nve-drawer-footer>
</nve-drawer>
Release Status
All elements and features go through 3 phases of stability, pre-release, beta and stable.
pre-release
Docs Preview
API Documentation
Fully Themeable
beta
Robust unit test coverages
Passed API Review
Passed Designer VQA Review
Included in library package
stable
No known outstanding AA WCAG issues
No known outstanding performance issues
Adapts to different screen/container sizes
No breaking API changes for at least 90 days