Skip to content
Blobz docs

User Table

A people table with generated avatars, roles, statuses, and activity.

UserRoleStatusLast seen
Janaki Ammaljanaki@example.com
Owneractive2m ago
Vikram Sarabhaivikram@example.com
Adminactive1h ago
Kalpana Chawlakalpana@example.com
Developeractiveyesterday
Srinivasa Ramanujansrinivasa@example.com
Developerinvitednever
Gagandeep Kanggagandeep@example.com
Billingsuspended3 weeks ago
View code
user-table-example.tsx
import { DEMO_PEOPLE, getFirstName } from "@/lib/demo-people";
import {
	UserTable,
	type UserTableRow,
} from "@/components/blobz/user-table";

const USERS: readonly UserTableRow[] = [
	{
		avatar: {
			name: getFirstName(DEMO_PEOPLE.janakiAmmal),
			palette: ["#e7efff", "#91bafa"],
		},
		email: "janaki@example.com",
		id: "janaki",
		lastSeen: "2m ago",
		name: DEMO_PEOPLE.janakiAmmal,
		role: "Owner",
		status: "active",
	},
	{
		avatar: {
			name: getFirstName(DEMO_PEOPLE.vikramSarabhai),
			palette: ["#e3fff4", "#46c888"],
		},
		email: "vikram@example.com",
		id: "vikram",
		lastSeen: "1h ago",
		name: DEMO_PEOPLE.vikramSarabhai,
		role: "Admin",
		status: "active",
	},
	{
		avatar: {
			name: getFirstName(DEMO_PEOPLE.kalpanaChawla),
			palette: ["#e1fff9", "#4bd3b5"],
		},
		email: "kalpana@example.com",
		id: "kalpana",
		lastSeen: "yesterday",
		name: DEMO_PEOPLE.kalpanaChawla,
		role: "Developer",
		status: "active",
	},
	{
		avatar: {
			name: getFirstName(DEMO_PEOPLE.srinivasaRamanujan),
			palette: ["#e5f9ff", "#32c4d6"],
		},
		email: "srinivasa@example.com",
		id: "srinivasa",
		lastSeen: "never",
		name: DEMO_PEOPLE.srinivasaRamanujan,
		role: "Developer",
		status: "invited",
	},
	{
		avatar: {
			name: getFirstName(DEMO_PEOPLE.gagandeepKang),
			palette: ["#fff0dc", "#e7ad55"],
		},
		email: "gagandeep@example.com",
		id: "gagandeep",
		lastSeen: "3 weeks ago",
		name: DEMO_PEOPLE.gagandeepKang,
		role: "Billing",
		status: "suspended",
	},
];

export function UserTableExample() {
	return <UserTable className="max-w-3xl" users={USERS} />;
}

Installation

Register the Blobz registry once in your project, then install:

npx shadcn@latest add @blobz/user-table

The base avatar is installed automatically.

Usage

import { UserTable } from "@/components/blobz/user-table";

<UserTable users={[{
  id: "janaki",
  name: "Janaki Ammal",
  email: "janaki@example.com",
  role: "Owner",
  status: "active",
  lastSeen: "2m ago",
  avatar: { name: "Janaki" },
}]} />

Status accepts active, invited, and suspended. On narrow screens, the table scrolls horizontally so every column remains readable.

Theme

On this page