Skip to content
wdj

Drawer

Partial Overlay

Edge-anchored modal panel. LayerDialog has its own layered component.

A wdj composition built from the existing component library.

Kumo reference: kumo-ui.com/components/dialog/

Presentation commands show demo feedback. Read the interaction guide to connect real actions.

Basic

Project settings

Review the details before continuing.

Show template
{% load wdj %}
{% wdj_component "wdj/components/drawer.html" id="drawer_basic" title="Project settings" trigger_label="Open basic"  %}
<p class="text-base">Review the details before continuing.</p>
{% endwdj_component %}

Form

Project settings

Show template
{% load wdj %}
{% wdj_component "wdj/components/drawer.html" id="drawer_form" title="Project settings" trigger_label="Open form"  %}
<form method="dialog" class="grid gap-4">{% include "wdj/components/input.html" with name="drawer_project" label="Project name" required=True only %}{% include "wdj/components/button.html" with label="Save" type="submit" variant="primary" only %}</form>
{% endwdj_component %}

Description

Project settings

Manage your project settings.

Review the details before continuing.

Show template
{% load wdj %}
{% wdj_component "wdj/components/drawer.html" id="drawer_description" title="Project settings" trigger_label="Open description" description="Manage your project settings." %}
<p class="text-base">Review the details before continuing.</p>
{% endwdj_component %}

Large

Project settings

Review the details before continuing.

Show template
{% load wdj %}
{% wdj_component "wdj/components/drawer.html" id="drawer_large" title="Project settings" trigger_label="Open large" width="sm:max-w-lg" %}
<p class="text-base">Review the details before continuing.</p>
{% endwdj_component %}

Scrolling body

Project settings

Resource details and configuration 0.

Resource details and configuration 1.

Resource details and configuration 2.

Resource details and configuration 3.

Resource details and configuration 4.

Resource details and configuration 5.

Resource details and configuration 6.

Resource details and configuration 7.

Resource details and configuration 8.

Resource details and configuration 9.

Resource details and configuration 10.

Resource details and configuration 11.

Resource details and configuration 12.

Resource details and configuration 13.

Resource details and configuration 14.

Resource details and configuration 15.

Resource details and configuration 16.

Resource details and configuration 17.

Resource details and configuration 18.

Resource details and configuration 19.

Resource details and configuration 20.

Resource details and configuration 21.

Resource details and configuration 22.

Resource details and configuration 23.

Show template
{% load wdj %}
{% wdj_component "wdj/components/drawer.html" id="drawer_scrolling_body" title="Project settings" trigger_label="Open scrolling body"  %}
<div class="grid gap-4"><p class="text-base">Resource details and configuration 0.</p><p class="text-base">Resource details and configuration 1.</p><p class="text-base">Resource details and configuration 2.</p><p class="text-base">Resource details and configuration 3.</p><p class="text-base">Resource details and configuration 4.</p><p class="text-base">Resource details and configuration 5.</p><p class="text-base">Resource details and configuration 6.</p><p class="text-base">Resource details and configuration 7.</p><p class="text-base">Resource details and configuration 8.</p><p class="text-base">Resource details and configuration 9.</p><p class="text-base">Resource details and configuration 10.</p><p class="text-base">Resource details and configuration 11.</p><p class="text-base">Resource details and configuration 12.</p><p class="text-base">Resource details and configuration 13.</p><p class="text-base">Resource details and configuration 14.</p><p class="text-base">Resource details and configuration 15.</p><p class="text-base">Resource details and configuration 16.</p><p class="text-base">Resource details and configuration 17.</p><p class="text-base">Resource details and configuration 18.</p><p class="text-base">Resource details and configuration 19.</p><p class="text-base">Resource details and configuration 20.</p><p class="text-base">Resource details and configuration 21.</p><p class="text-base">Resource details and configuration 22.</p><p class="text-base">Resource details and configuration 23.</p></div>
{% endwdj_component %}

Left side

Navigation

Navigation from the left edge.

Show template
{% load wdj %}
{% wdj_component "wdj/components/drawer.html" id="drawer_left" title="Navigation" trigger_label="Open left drawer" side="left" %}
<p class="text-base">Navigation from the left edge.</p>
{% endwdj_component %}

Compact

Project

Panel content.

Show template
{% load wdj %}
{% wdj_component "wdj/components/drawer.html" id="drawer_compact" title="Project" trigger_label="Open compact" width="sm:max-w-xs" %}
<p class="text-base">Panel content.</p>
{% endwdj_component %}

Wide

Project

Panel content.

Show template
{% load wdj %}
{% wdj_component "wdj/components/drawer.html" id="drawer_wide" title="Project" trigger_label="Open wide" width="sm:max-w-xl" %}
<p class="text-base">Panel content.</p>
{% endwdj_component %}

Backdrop controlled

Project

Panel content.

Show template
{% load wdj %}
{% wdj_component "wdj/components/drawer.html" id="drawer_backdrop_controlled" title="Project" trigger_label="Open backdrop controlled" close_on_backdrop=False %}
<p class="text-base">Panel content.</p>
{% endwdj_component %}

Descriptive panel

Project

Update your project configuration.

Panel content.

Show template
{% load wdj %}
{% wdj_component "wdj/components/drawer.html" id="drawer_descriptive_panel" title="Project" trigger_label="Open descriptive panel" description="Update your project configuration." %}
<p class="text-base">Panel content.</p>
{% endwdj_component %}

Nested panel

Project

Details

Review resource details.

Show template
{% load wdj %}
{% wdj_component "wdj/components/drawer.html" id="drawer_parent" title="Project" trigger_label="Open nested panels" %}
{% wdj_component "wdj/components/drawer.html" id="drawer_child" title="Details" trigger_label="Open child panel" side="left" %}
<p class="text-base">Review resource details.</p>
{% endwdj_component %}
{% endwdj_component %}

Form actions

Profile

Show template
{% load wdj %}
{% wdj_component "wdj/components/drawer.html" id="drawer_actions" title="Profile" trigger_label="Edit profile" %}
<form method="dialog" class="grid gap-4">{% include "wdj/components/input.html" with name="drawer_display_name" label="Display name" only %}{% include "wdj/components/button.html" with label="Save profile" type="submit" variant="primary" only %}</form>
{% endwdj_component %}

Top and bottom panels

Top panel

Settings can also open from the top edge.

Bottom panel

The content remains scrollable on small screens.

Show template
{% load wdj %}
<div class='flex flex-wrap gap-3'>
  {% wdj_component 'wdj/components/drawer.html' id='top-drawer' side='top' title='Top panel' trigger_label='Open top panel' %}<p>Settings can also open from the top edge.</p>{% endwdj_component %}
  {% wdj_component 'wdj/components/drawer.html' id='bottom-drawer' side='bottom' title='Bottom panel' trigger_label='Open bottom panel' %}<p>The content remains scrollable on small screens.</p>{% endwdj_component %}
</div>

Dismissal disabled

Review operation

Escape, the backdrop and the close control remain disabled until the application finishes the operation.

Show template
{% load wdj %}
{% wdj_component 'wdj/components/drawer.html' id='pending-drawer' title='Review operation' trigger_label='Open protected panel' dismiss_disabled=True %}
  <p class='mb-3'>Escape, the backdrop and the close control remain disabled until the application finishes the operation.</p>
  <button type='button' x-data @click="$el.closest('dialog').removeAttribute('data-wdj-dismiss-disabled'); $el.closest('dialog').close()" class='h-9 rounded-lg bg-kumo-base px-3 text-base ring-1 ring-kumo-line hover:bg-kumo-tint'>Complete demonstration</button>
{% endwdj_component %}

API Reference

Prop Type Default Description
string unset Stable unique DOM ID; important for HTMX targets and focus restoration.
string unset Title; pass the documented value shown in the examples.
string unset Description; pass the documented value shown in the examples.
string / HTML slot unset Trigger; pass the documented value shown in the examples.
string unset Combobox without endpoint: enable the button trigger and search inside its popup. Calendar: calendar trigger text.
string unset Searchable button: default control styling or ghost.
string unset Width; pass the documented value shown in the examples.
string component-specific Side; pass the documented value shown in the examples.
string / HTML slot unset Rich HTML supplied by the wdj_component block tag, rendered in an isolated context.
string / HTML slot unset Footer; pass the documented value shown in the examples.
bool True Close on backdrop; pass the documented value shown in the examples.
bool False Dismiss disabled; pass the documented value shown in the examples.
string unset Close label; pass the documented value shown in the examples.
string "" Class; pass the documented value shown in the examples.

Accessibility notes

Every interactive component keeps real semantics and keyboard support: native controls where possible, ARIA only where necessary, and a visible focus ring. See the Accessibility page for the shared contract.

Read the accessibility contract

Components

Components overview
AutocompleteFree-form input with local or HTMX-filtered suggestions.
BadgeSolid, tinted, outline and dot status labels.
BannerInline message bar with variants and optional action.
BreadcrumbsTrail navigation in two sizes.
ButtonVariants, sizes, shapes, icons and loading state.
ButtonGroupJoins a small set of tightly-coupled buttons into a single control (split buttons).
CheckboxSingle checkbox and indeterminate state.
ClipboardTextRead-only text field with a one-click copy-to-clipboard button.
Code / CodeHighlightedEscaped Pygments grammar highlighting, multiline tokens, line numbers, highlighted lines and localized copying.
CollapsibleComposable disclosure component for showing and hiding content.
Combobox / AutocompleteKumo-styled input/button triggers, search inside the popup, grouped local choices and debounced HTMX search.
CommandPaletteAccessible spotlight search overlay with Cmd+K keyboard shortcut.
DatePickerKumo-styled date and datetime popups; inline single, multiple and range calendars with bounds/presets.
DateRangePickerStyled popup or inline range calendar with bounds, presets and separately named form values.
DialogNative <dialog> modal with focus management.
DrawerEdge-anchored modal panel. LayerDialog has its own layered component.
DropdownMenuNative details menu with delegated keyboard navigation and dismissal.
EmptyEmpty-state placeholder with icon and action.
FieldLabel + description + error wrapper. Built into each control.
FlowDirected diagrams with branches, SVG connectors, custom anchors and responsive local scrolling.
GridResponsive CSS grid layout container with preset column configurations.
InlineCopyTextCompact borderless copy control for IDs and short values.
InputText field with label, description, leading/trailing icons.
InputAreaMulti-line textarea with auto-resize option.
InputGroupInput field with seamless prefix, suffix, and addon attachments.
LabelForm field label, optional marker and tooltip.
LayerCardCompound surface card with distinct primary and secondary layers.
LayerDialogLayered native modal with actions, forms, nested dialogs and pending states.
LinkInline, current and plain text links.
LoaderAnimated spinner in three sizes.
MenuBarCompact view selector using native radio semantics.
MeterProgress bar showing a measured value within a known range.
PaginationA page navigation component for navigating through paginated content.
PopoverAnchored popup with interactive content.
RadioRadio group, vertical and horizontal.
SelectKumo-styled Alpine dropdown with groups, rich options and multiple selection; native form values and fallback.
SensitiveInputPassword/secret input with reveal toggle and copy button.
SeparatorHorizontal / vertical rules with optional label.
SidebarRecursive navigation groups, account/zone views, search, loading, resize and full-screen mobile breadcrumbs.
SkeletonShimmer placeholder.
SliderInset single/range selection with vertical grips, value badges, endpoint labels and native keyboard/form behavior.
SurfaceBordered surface panel with header slot.
SwitchOn/off toggle in three sizes.
TableServer-driven table: sort, filter, select and paginate the full dataset.
Table of contentsPage section navigation tree with active link indicator.
TabsSegmented and underline tabs with a sliding indicator, responsive overflow and local Alpine or URL/HTMX state.
TagInputMulti-value badge input for tags and recipients.
TextHeading, body, secondary, success, error and mono text.
ToastyExpandable notification stack with variants, paused expiry and a live region.
ToolbarCompact grouped controls with shared borders, composed filters and keyboard arrow navigation.
TooltipHover and focus tooltip with grouped delays, Escape dismissal and viewport bounds.
↑ ↓ Navigate ↵ Select