Chirp UI ships two slide-out panel contracts:
drawer(...)anddrawer_trigger(...)fromchirpui/drawer.htmltray(...)andtray_trigger(...)fromchirpui/tray.html
Native drawers render<dialog> and open through chirpuiDialogTarget().
Trays render a div-based dialog controlled throughAlpine.store("trays"),
withx-trap.inert.noscroll on the panel and a chirpui:tray-closedevent.
The full rendered contract, ARIA roles, focus and close behavior, event
payloads, and proof locations live in the canonical source guide:
docs/DRAWER-TRAY-ANATOMY.md.