Malevich

Overlays/

Sheet

4-side slide-in

panel. Slide + fade.

Sheet

A panel that slides in from one edge of the viewport. Built on the native <dialog> element with showModal() — top-layer rendering, native focus trap, escape-to-close, inert background. Per the answered design question recorded with this component: slide from the chosen edge + fade backdrop; reduced-motion drops to fade-only.

When to use

Sides

data-side controls the entry edge:

Value Behavior
right Slides in from the right (default)
left Slides in from the left
top Slides down from the top
bottom Slides up from the bottom

Anatomy

<dialog class="sheet" data-side="right">
  <header class="sheet__header">
    <h2>Filters</h2>
    <button class="sheet__close" aria-label="Close" onclick="this.closest('dialog').close()">×</button>
  </header>
  <div class="sheet__body">
    <!-- Field-groups, fields, etc. -->
  </div>
  <footer class="sheet__footer">
    <button class="button -ghost" onclick="this.closest('dialog').close()">Cancel</button>
    <button class="button -primary">Apply</button>
  </footer>
</dialog>

<button onclick="document.querySelector('.sheet').showModal()">Open</button>

The runtime (initSheet, auto-registered for dialog.sheet) adds:

Tokens used

Component-tier (defined inline)

Accessibility

Native <dialog> + showModal() carries:

The component adds:

Authors should:

Edge cases

Do

Don't