Display Components
Display components present static or structural content that is not bound to a table data source: hard-coded tables, empty states, scroll areas, chat speech bubbles, scrolling marquees, accordions, and tab containers. All accept the shared props bag plus visibility and responsive modules.
components:
- type: static-table
tableHeaders: [Plan, Price, Seats]
tableRows:
- [Free, '$0', '1']
- [Pro, '$29', '10']
caption: 'Pricing tiers'static-table
A table populated from inline data (not a data source).
| Property | Description |
|---|---|
tableHeaders |
Column header labels. |
tableRows |
Row data as an array of string arrays. |
caption |
Caption text displayed above or below the table. |
empty-state
A placeholder shown when there is nothing to display.
| Property | Description |
|---|---|
icon |
Lucide icon name for the illustration. |
title |
Title text. |
description |
Supporting text below the title. |
children |
Optional call-to-action components. |
scroll-area
A scrollable region with custom scrollbars.
| Property | Description |
|---|---|
orientation |
Scroll axis: vertical, horizontal, or both. |
maxHeight |
CSS max-height for the area (e.g. 400px). |
children |
The scrollable content. |
speech-bubble
A chat-style message bubble (used in conversation UIs).
| Property | Description |
|---|---|
content |
The message text. |
props |
HTML attributes — typically className for sender alignment/color. |
list-item
A single list-item element, used as a building block inside lists and menus.
| Property | Description |
|---|---|
content |
Inline content. |
children |
Nested components. |
props |
HTML attributes. |
marquee
A band of children on a continuously scrolling track. Use it to show more items than fit on screen — a row of app screenshots, a set of logos — as a demonstration rather than a static grid. The children are duplicated internally so the loop has no visible seam; the duplicate is hidden from assistive technology, so each item is announced once.
| Property | Description |
|---|---|
marqueeDirection |
Scroll direction: left, right, up, or down (default left). |
marqueeSpeed |
Seconds for one full loop. Larger is slower. |
marqueeGap |
CSS length between items, e.g. 2rem or 24px. |
pauseOnHover |
Pause while the pointer is over the band, and while a child holds keyboard focus. |
marqueeFade |
Fade the leading and trailing edges, so items appear to enter and leave. |
pauseControl |
Render an explicit pause and resume button. |
children |
The components to scroll. |
components:
- type: marquee
marqueeDirection: right
marqueeSpeed: 30
marqueeGap: 2rem
pauseOnHover: true
marqueeFade: true
children:
- type: link
props:
href: /apps/invoicing
content: Invoicing
- type: link
props:
href: /apps/recruiting
content: RecruitingGive the reader a way to stop it
Content that moves for more than a few seconds needs to be stoppable
(WCAG 2.2.2). Set pauseOnHover, pauseControl, or both. pauseOnHover covers a
pointer and keyboard focus — hover alone leaves a keyboard user chasing a link
that scrolls out from under them. pauseControl covers the visitor who has
neither.
Visitors who ask their system for reduced motion get no loop at all. Nothing is hidden from them: every item stays reachable and the band stays scrollable by hand, so they lose the animation and nothing else.
accordion
Collapsible content sections. (Also documented in Content Components.)
| Property | Description |
|---|---|
type |
single or multiple open sections. |
defaultOpen |
IDs of items open by default. |
children |
The accordion items. |
tabs
A tabbed container holding tab-panel children. (Also documented in Navigation Components.)
| Property | Description |
|---|---|
orientation |
Trigger layout: horizontal or vertical. |
defaultValue |
ID of the tab active by default. |
children |
The tab-panel components. |
Related Pages
- Pages Overview — the component model.
- Layout Components — containers, cards, tab panels.
- Data Components — data-bound tables vs.
static-table. - Content Components — text, code, callouts.
Last updated August 11, 2026
This documentation was written with AI, so errors or outdated content are possible. Sovrium is in beta. Contributions and corrections are welcome.