drawer component

Drop-in semantic component. See examples, sizes, variants, and source.

Sliding side panel for navigation, filters, or off-canvas forms. Wrap a drawer in a drawer-overlay, give the trigger a data-drawer="..." attribute, and add modifiers for position (left right top bottom), size (xs sm xl lg fullscreen), or accent color (primary positive negative warning info). Open / close behaviour is wired by drawer.js.

Drawer System

The drawer system provides sliding panels from screen edges. It requires three parts:

  1. Trigger Button - A button with data-drawer="drawer-id" attribute
  2. Drawer HTML - The drawer structure with matching id="drawer-id"
  3. JavaScript - Automatically loaded via bluestack.core.js (no setup needed!)

Position Variants

Left Drawer (Default)

Right Drawer

Top Drawer

Bottom Drawer

Size Variants

Tiny Drawer

Large Drawer

Fullscreen Drawer

Color Variants

Primary Drawer

Negative Drawer

Form Example

Form Drawer

JavaScript API

JavaScript Methods

// Open drawer Drawer.open('drawer-id'); Drawer.open('drawer-id', { position: 'right', size: 'large' }); // Close drawer Drawer.close('drawer-id'); // Toggle drawer Drawer.toggle('drawer-id'); // Close all drawers Drawer.closeAll(); // Check if drawer is open if (Drawer.isOpen('drawer-id')) { console.log('Drawer is open'); } // Event listeners document.getElementById('drawer-id').addEventListener('drawer:open', (e) => { console.log('Drawer opened', e.detail); }); document.getElementById('drawer-id').addEventListener('drawer:close', (e) => { console.log('Drawer closed', e.detail); });

Data Attributes

Advanced Trigger Options

Interactive Examples

Class API Reference

Type Class Usage Notes
Base drawer-overlay Full-screen overlay that hosts the drawer Toggle hidden / active via JS
drawer The sliding panel itself Always required
data-drawer Trigger attribute — value matches drawer id Wired by drawer.js
Structure header Top bar with title + close button Child of drawer
title / description Header text content Inside header
close Close button Auto-wired by drawer.js
icon-container Decorative icon slot in colored variants Inside header
content Scrollable body Child of drawer
footer Bottom action bar Add center / between for alignment
Position left Slides from the left edge Default; class is optional
right Slides from the right edge Filters / details panes
top Slides from the top edge Notifications
bottom Slides from the bottom edge Mobile action sheets
Size xs 240px / 20vh — tiny Modifier on drawer
sm 320px / 30vh — small Modifier on drawer
(default) 400px / 40vh — medium No size class needed
xl 600px / 60vh — large Modifier on drawer
lg 800px / 80vh — big Modifier on drawer
fullscreen 100% viewport Modifier on drawer
Color (Intent) (default) Neutral / gray No class needed
primary Blue accent Modifier on drawer
positive Green accent — success Modifier on drawer
negative Red accent — destructive Modifier on drawer
warning Yellow / orange accent Modifier on drawer
info Blue accent — informational Modifier on drawer
Overlay no-backdrop Transparent overlay Modifier on drawer-overlay
dark-backdrop Darker overlay (70% black) Modifier on drawer-overlay
light-backdrop Light overlay (70% white) Modifier on drawer-overlay
Trigger / Behavior data-drawer-position Override position from the trigger left|right|top|bottom
data-drawer-size Override size from the trigger xs|sm|xl|lg|fullscreen
data-no-close-on-overlay Disable click-outside to close On drawer-overlay
data-keep-open Action button doesn't auto-close On any inside button