Band
A band is the strip that separates two areas of a window: the search field under a toolbar, the composer under a message list, the action row along the bottom. Padding, and one rule on one edge.
It renders a plain <div> with no ARIA role, and that is the design rather than an oversight.
The shape is chrome, not meaning.
Basic
Inbox
24Message list goes here.
Which edge
edge takes top, bottom, both or none.
The default is bottom, and it is a coin toss made explicit: neither edge is the common case,
so the default is a convenience rather than a recommendation. Say which one you mean at the
call site rather than relying on the default to match your layout.
edge="bottom"
content between two bands
edge="top"
Padding and surface
padding takes none, xs, sm, md or lg on the token scale. surface takes none,
subtle or muted for the band that sits on its own background.
Draft saved a moment ago.
Why not toolbar, container or card.header
All three were considered and rejected, and the reasons are worth knowing because they are the reasons a band exists at all.
| Candidate | Why it does not fit |
|---|---|
toolbar |
renders role="toolbar", an ARIA composite widget promising operable controls with arrow-key navigation. A band holding one search field does not deliver that, and the role would be a promise the surface does not keep. |
container |
caps and centers its width. A band runs edge to edge; capping it is the opposite of the point. |
card.header / card.footer |
bring exactly this shape — and only at the two ends of a card. A window with seven bands has two of them. |
When a band does carry meaning
Use as when the strip is a real landmark, and give it a name:
{{-- A band that IS the page footer, not one that merely looks like one. --}}
<x-wirekit::band as="footer" edge="top" aria-label="Page actions">
…
</x-wirekit::band>
Without as, no role is emitted and none is implied.
Props
| Prop | Type | Default | Description |
|---|---|---|---|
edge |
string | 'bottom' |
Which edge carries the rule: none, top, bottom, both |
padding |
string | 'sm' |
Inline and block padding: none, xs, sm, md, lg |
surface |
string | 'none' |
Background treatment for the occasional band that is not on the page background: none, subtle, muted |
as |
string | 'div' |
The element to render. Use a landmark element when the band is one |
scope |
string|null | null |
Scoped personalization name |
Keyboard Interaction
A band is a layout wrapper and takes no focus of its own. Keyboard interaction belongs to
whatever it contains — and that is the reason it emits no role: a role="toolbar" would
announce arrow-key navigation between the controls inside, which nothing here implements.