Skip to content

shadcn.io is an independent project built on shadcn/ui

List with Icons Skeleton for Vue

Five bordered list rows, each with a leading icon, two lines of text and a trailing action.

UI library: Ark UI

Five bordered rows each hold a square for an icon, two lines of text, and a second square at the end for an action.

Use it for a settings list or a file list with an icon in front and an action behind. A row that is already real can show a Spinner on that action. In Vue, Ark UI does not run it.

Preview

Preview width

Installation

MCP · Pro
Make your AI a shadcn expert
Your agent installs components, builds pages and restyles your app from one prompt, in Claude Code, Cursor or VS Code.
Part of Pro

Anatomy

Skeleton anatomy: avatar, title, description, media

Usage

<div class="flex w-full max-w-md flex-col gap-3">
  <div
    v-for="row in ROWS"
    class="flex items-center gap-3 rounded-md border p-3"
    :key="row"
  >
    <Skeleton class="size-8 shrink-0 rounded-md" />
    <div class="flex flex-1 flex-col gap-2">
      <Skeleton class="h-4 w-2/3" />
      <Skeleton class="h-3 w-1/2" />
    </div>
    <Skeleton class="size-8 shrink-0 rounded-md" />
  </div>
</div>

FAQ

How many rows does this list show?

Five. ROWS maps them into a max-w-md column with gap-3. Each row is flex items-center gap-3 rounded-md border p-3.

What are the squares at each end?

Both are size-8 shrink-0 rounded-md. One leads the row, one trails it. shrink-0 keeps them square while the text is flex-1.

What text does a row reserve?

Two lines in a gap-2 column: h-4 w-2/3 and h-3 w-1/2. The second bar is a smaller height and a shorter width.

Where does the row border come from?

rounded-md border p-3 is on the row div. The bars inside use Skeleton's own rounded-md and bg-muted.

How do I match a real icon row?

Keep the leading and trailing blocks at size-8, the text column flex-1, and items-center so the squares line up with the two lines.

Should these rows be announced?

Set aria-hidden on each Skeleton when a status already says the list is loading. The pulse should not be the only message.

API Reference

Skeleton

No extra props in this demo. The rest is on the Skeleton page.