What it is
A flexible, elevated container for a section of a page — a raised surface with rounded corners that lays out an optional header, a scrollable body, and an optional footer in a fixed column. Unlike every other component in this category, it is not an overlay: it renders in place as part of the page layout and has no open, close, or expand/collapse state of its own.Live example
Exports
Hand-confirmed from source — no prop emitter has run for this component yet.Tile itself
accepts any prop the underlying box-layout primitive does (it is a typed passthrough with no
prop interface of its own); the sub-components add the following:
Choose Panel when
- A section of a page needs a visually distinct, raised surface — separate from the page background — that is always visible, not something a reader opens or dismisses.
- The content benefits from a structured header (title, status chips, a filter, an actions menu) and a separately-scrollable body.
Choose something else when
Anatomy
Variants, sizes, and states
No size or variant prop exists onTile itself — it fills its container’s width and inherits
its height (“inherit” is a literal value in source, not a token), so sizing is entirely up to
the parent layout. The one published example demonstrates the full composition: a draggable
header with three chips (each with its own tooltip and color), a filter dropdown, an actions
menu, a scrollable body with multiple paragraphs, and a footer.
Edge and failure states
- A
Tilewith noTileHeaderorTileFooteris not demonstrated in any story. The only published example uses all four sub-components together, so the container’s appearance with just a bare body — or with no sub-components at all — is unconfirmed visually, though nothing in source requires any of them. TileTitletruncation depends on extracting plain text from its children. Source walkschildrenlooking for strings or nestedchildrento build the tooltip text; a title built from more complex nested elements may not extract cleanly, though this is not exercised by any test found.
Tokens
Hand-confirmed fromTile.tsx, TileHeader.tsx, TileBody.tsx, and TileFooter.tsx — no
per-component token emitter exists yet for this concept, so this table is hand-confirmed rather
than generated. Unlike Dialog and
Accordion, none of this is registered
as a theme override — there is no Tile.overrides.ts file, and no panel-* or tile-* entries
exist in the component token file. Every value below is a generic, cross-component token applied
inline.
Composition
TileHeader’s menuOptions renders a Menu;
its per-chip tooltip renders a Tooltip.
TileTitle composes a separate truncate-with-tooltip primitive from outside this package’s
components/ tree, not Tooltip directly. A Panel does not compose into Form’s field pattern.
Content
No copy rules are recorded in source for title, chip, or footer text.Accessibility
- No test in source asserts a landmark role, heading semantics, or any ARIA relationship between
TileTitleand the region it labels — unconfirmed at the Titan layer. - The header’s overflow-menu button carries
aria-haspopup,aria-expanded, andaria-controls, confirmed directly from source — the most complete accessibility wiring found anywhere in this container. - Chip tooltips use the same
Tooltipcomponent documented on its own page, so the same hover/focus behavior applies to them.
Constraints
No falsifiable, source-backed constraint beyond what is already stated as an edge case is recorded for this component.Known issues
Panel: open issues
Divergences, open decisions, and undocumented gaps for Panel.
Why it works this way
The header/body/footer split exists to make one thing predictable: only the body scrolls.TileBody is the one sub-component with overflow: auto; header and footer are fixed. That
split is what lets a Panel hold a long list or block of text without its own header actions or
footer buttons scrolling out of view.
Status
No lifecycle metadata exists. There is no
status, since, deprecated, or
replacedBy field on a Titan component, so this table cannot report when an export arrived or
whether it is on the way out.Related
Hand-confirmed fromutilization.md — no utilization emitter has run for this component yet.
Only 4 usages across 3 applications: real-time-interactions-reporting (2),
dashboards (1), interaction-details (1) — the lightest adoption of any component in this
category.