OGE logoOGE

Drawer

A panel attached to one edge of its content, in one of three layout modes — and one component, not the container/drawer/content trio the reference libraries need.

Modality is derived from mode, never configured separately. overlay and push cover or displace the content, so they are dialogs: role="dialog", aria-modal, a focus trap, Escape and inert on the background. side is part of the layout, so it is a persistent landmark with none of those. WAI-ARIA has no drawer pattern and conditions modality on background interaction actually being blocked — an independent flag is exactly what lets a panel claim role="complementary" and aria-modal="true" at once.

overlay push side APG dialog landmark

Layout modes

overlay floats over the content, push shifts it aside without resizing it, side shrinks it so both share the row. DevExtreme calls the last one shrink and Kendo calls it push; only DevExtreme and this drawer offer all three.

mode overlay push side

overlay covers this, push shifts it, side shrinks it.

Position

Logical edges: start and end mirror in RTL on their own, because there is no rtlEnabled flag anywhere in this suite. Kendo is horizontal-only; this is the union of every edge the references offer.

position start end top bottom

An overlay drawer takes focus, traps Tab, closes on Escape and on a backdrop click, and marks the page behind it inert — which none of the four reference drawers does. Escape only acts on the topmost overlay, so a popup opened inside the drawer closes first.

role=dialog aria-modal focus trap inert

Escape, or a click on the backdrop, closes it and returns focus here.

Compact rail

minSize is the closed size — the rail that keeps icons reachable. It applies to mode="side" only: a rail belongs to the layout, and a modal drawer still partly on screen is not closed. Kendo spells this mini + miniWidth; one input covers both.

minSize

Closed it is a rail, not a gap — and it stays keyboard reachable.

Responsive downgrade

DevExtreme and Kendo watch the window. This one measures its own container, so a drawer nested in a dialog, a split pane or this card adapts to the room it actually has. The decision is core's pure resolveDrawerMode(), unit-tested without a DOM.

compactBelow modeChanged
640px

resolved mode → side

Close guard

The overlay package's veto semantics, reused verbatim: false, a throw and a rejection all mean “stay open”, a promise reports pending, and a second close gesture meanwhile is dropped.

closeGuard closePending

App shell

The whole shell out of OGE containers: a toolbar on top, a drawer down the side holding the tree view that ships in the same package, and a splitter dividing the workspace. Drag the width and the shell reorganises itself from its own size.

toolbar drawer splitter tree view
Rows…
Details…

Configuration

Every user-facing string, including the panel's accessible name, lives in the messages interface — overridable application-wide or per instance with [messages].

provideOgeDrawerConfig