- Accordion
- Action Bar
- Action Toast
- Alert Banner
- Alert Dialog
- Alert
- Alphabet Index
- Amount Field
- Aspect Ratio
- Attachment
- Availability List
- Avatar
- Badge
- Bank Card
- Breadcrumb
- Bubble
- Button Group
- Button
- Calendar
- Camera Frame
- Card Design Picker
- Card Details
- Card Peek
- Card Stack
- Card
- Carousel
- Chart
- Chat Thread
- Checkbox
- Chip Group
- Choice Tile
- Code Block
- Code Dots
- Collapsible
- Combobox
- Command
- Context Menu
- Copy Field
- Countdown
- Country Select
- Data Table
- Date Field
- Date Picker
- Date Range Picker
- Dialog
- Direction
- Document Paper
- Drawer
- Dropdown Menu
- Empty
- Entity Avatar
- Field
- File Trigger
- File Upload Item
- Hover Card
- Input Group
- Input OTP
- Input
- Item
- Kbd
- Key Value
- Keypad
- Label
- Live Region
- Marker
- Message Scroller
- Message
- Money Amount
- Native Select
- Number Field
- Pagination
- Percent Split Editor
- Phone Field
- Popover
- Progress
- QR Code
- Questionnaire
- Radio Group
- Range Histogram
- Rating
- Resizable
- Scroll Area
- Search Field
- Select
- Separator
- Share Bar
- Sheet
- Sidebar
- Skeleton
- Slider
- Sonner
- Sortable List
- Spinner
- Status Timeline
- Step Header
- Steps List
- Swipe Row
- Switch
- Table
- Tabs
- Text Field
- Textarea
- Tier Ladder
- Toggle Group
- Toggle
- Token Search Field
- Tooltip
- Trace
- Transaction Row
- Usage Meter
During maintenance
- Card paymentsOnline and in stores, Works
- TransfersSent after 04:30, Queued
- ExchangeRates are on hold, Paused
import {
AvailabilityItem,
AvailabilityList,The AvailabilityList component tells the user what they can still do right now: during maintenance, under an account restriction, while a card is frozen or after a lockout. Each row names a feature, says what it means at the moment and shows its state as a word plus an icon. Use it when the answer is a state per feature. For label and value details such as fees or terms, use KeyValue. For the steps of a process over time, use StatusTimeline.
Installation#
pnpm dlx shadcn@latest add @dots/availability-list
Usage#
import {
AvailabilityItem,
AvailabilityList,
} from "@/components/ui/availability-list"<AvailabilityList label="During maintenance">
<AvailabilityItem
title="Card payments"
description="Online and in stores"
status="works"
/>
<AvailabilityItem
title="Transfers"
description="Sent after 04:30"
status="queued"
/>
</AvailabilityList>Composition#
Use the following composition to build an availability list:
AvailabilityList
└── AvailabilityItemFeatures#
- Three states:
works,queuedandpaused, each shown as a word plus an icon, never color alone - An optional heading that also names the list, with a configurable heading level
- An optional round icon tile per row
- Custom status words through
statusLabel, such as "Delayed" or "Off", while the icon stays - No background of its own, so it sits in a card or sheet
Without icons#
Leave out icon for a compact list. Put working features first, then queued, then paused.
While your card is frozen
- Incoming transfersCredited as usual, Works
- SubscriptionsCharged when you unfreeze, Queued
- Card paymentsDeclined until you unfreeze, Paused
import {
AvailabilityItem,
AvailabilityList,Custom status words#
Use statusLabel to replace the status word when "Queued" or "Paused" does not fit. Without a label, pass aria-label to name the list.
- Bank top-upsCredited after 04:30, Delayed
- Cash withdrawalsNot available in this country, Off
import {
AvailabilityItem,
AvailabilityList,Accessibility#
AvailabilityList renders a real list (<ul role="list">) of <li> rows.
Name the list#
With label, the heading names the list through aria-labelledby. Set headingLevel so the heading fits the page outline. Without label, pass aria-label or aria-labelledby.
<AvailabilityList aria-label="Services right now">
{/* items */}
</AvailabilityList>State in words#
Each row reads as the title and the description, followed by the status word. The status icon and the row icon are hidden from assistive tech, so the status word must carry the meaning. Keep statusLabel short and clear.
API Reference#
AvailabilityList#
The list and its optional heading. Accepts all <div> props except title.
| Prop | Type | Default | Description |
|---|---|---|---|
label | React.ReactNode | - | What the rows answer, e.g. "Still works". Also names the list. |
headingLevel | 2 | 3 | 4 | 5 | 6 | 3 | Heading level of the label in the page outline. |
aria-label | string | - | Names the list when there is no label. Ignored when label is set. |
aria-labelledby | string | - | Names the list by another element when there is no label. |
children | React.ReactNode | - | AvailabilityItem elements. |
className | string | - | Additional classes to apply to the root. |
AvailabilityItem#
One feature and its state. Accepts all <li> props except title and children.
| Prop | Type | Default | Description |
|---|---|---|---|
title | React.ReactNode | - | The feature, e.g. "Card payments". Required. |
status | "works" | "queued" | "paused" | - | The state of the feature. Required. |
description | React.ReactNode | - | What it means right now, e.g. "Sent after 04:30". |
icon | React.ReactNode | - | An icon for the feature, shown in a round tile. |
statusLabel | string | - | Replaces the status word. The status icon stays. |
className | string | - | Additional classes to apply to the row. |