1 viewer
Back to Components
Component · Overlay

Drawer

Slide-in modal panel with placement (left|right), backdrop, and dismiss affordance. Open state is declarative until the WASM hydrator gains a drawer arm.

Category
Overlay
Slots
6
States
2
Writer
Shared
cre8.primitive.drawer

Preview

Live renderShared SSR + WASM writers
<Drawer
  id="settings-drawer"
  open={true}
  placement="right"
  title="Inspector Panel"
>
  <Text
    text="Contextual actions and parameter configuration inside sliding drawer panel."
  />
</Drawer>

Anatomy

The named parts of the rendered markup. Recipes style these hooks, and every renderer keeps them stable.

SlotDOM class
root.primitive-drawer-wrap
backdrop.primitive-drawer__backdrop
aside.primitive-drawer
header.primitive-drawer__header
title.primitive-drawer__title
body.primitive-drawer__body
6 rows
Modifier
primitive-drawer-wrap--{placement}
State attribute
data-openfrom the open prop
Role
dialog
Hydration markers
data-cre8-drawer, data-cre8-drawer-dismiss

States and platforms

The states the contract publishes, the platforms it declares, and the style recipes that dress it.

States
openclosed
Platforms
webruntime-node
Recipes
unstyledruntime-console

Renderers

Shared writer
Drawer renders through the one writer the server and the WASM DOM share, so both emit the same markup.

Every tag in the example above renders through a shared writer.

Declared adapters. A status is the manifest's declaration, not a measured parity result.

TargetRendererStatus
webreactexperimental
runtime-nodeview-nodeready
ssrhtml-semanticready
terminalterminal-textplanned
4 rows

Accessibility

Semantic structure must stay available without visual styling.

  • Expose meaningful names for interactive controls.
  • Keep keyboard and pointer behavior equivalent where the platform supports it.
  • Publish state with native semantics and data attributes where the adapter supports them.