ProjectList
A list of projects as a table or cards with status, progress, members, lead, due date and tags, plus search, status and client and member and tag filters, bulk select, loading skeletons and an empty state.
Code
import { ProjectList, type Project } from "@fadymondy/nasaq/web";const projects: Project[] = [ { id: "1", name: "Website redesign", key: "WEB", client: "Acme", status: "active", progress: 62, dueDate: "2026-12-01", members: [{ name: "Sara Ali" }, { name: "Omar Nasser" }] },];export function Projects() { return <ProjectList projects={projects} />;}Projects & Work · beta
Live examples and controls: ProjectList in the lab.
Install
npx shadcn@latest add https://docs.nasaqui.com/r/project-list.jsonA portfolio of projects: status, progress, who works on it, the lead, when it is due and its tags. It is
EntityList with the columns, cards and filters set up, plus an overdue highlight on the due date.
When to use
- A projects overview, portfolio or client project list.
When not to use
- Tasks on a board: use
KanbanBoard. - Other records: build on
EntityList.
Import
import { ProjectList } from "@fadymondy/nasaq/web";
// inside this monorepo: "@nasaq/web"Quick start
import { ProjectList, type Project } from "@fadymondy/nasaq/web";
const projects: Project[] = [
{ id: "1", name: "Website redesign", key: "WEB", client: "Acme", status: "active", progress: 62, dueDate: "2026-12-01", members: [{ name: "Sara Ali" }, { name: "Omar Nasser" }] },
];
export function Projects() {
return <ProjectList projects={projects} />;
}Anatomy
ProjectList renders EntityList. Columns: name (logo, name, key and client), status, progress, members, lead
(hidden by default), due, tags (hidden by default), last activity. Facets: status, client, member, tag.
API
ProjectListProps extends the EntityList props (view, pageSize, selectable, toolbar, bulkActions,
rowActions, onRowClick, loading, error, onRetry, empty, defaultSort, className).
| Prop | Type | Description |
|---|---|---|
projects | Project[] | { id, name, key?, logo?, client?, status, progress (0 to 100), members?, owner?, dueDate?, tags?, lastActivity? }. |
label | string | Accessible name. Default "Projects" / "المشاريع". |
labels | Partial<ProjectListLabels> | Override any string, including statuses. |
ProjectStatus is "planning" | "active" | "on-hold" | "completed" | "archived".
Examples
Cards only
<ProjectList projects={projects} defaultView="cards" views={["cards"]} />Accessibility
Inherited from EntityList. Each progress bar is named ("Progress: Website redesign") and reads its value; status is
text plus an icon, never colour alone. Overdue dates say "Overdue" in text.
RTL & i18n
- English and Arabic strings ship, including status names. Percentages and dates follow the locale; project keys are set left-to-right.
- Progress bars fill from the inline start, so they run right to left in Arabic.
Styling & tokens
- Status tones and progress tones come from
StatusandProgress. Overdue usestext-nq-danger-text.
Do / Don't
- Do keep
progressbetween 0 and 100. - Don't use colour alone to tell statuses apart in your own cells; reuse
Status.
Related
Lab
https://docs.nasaqui.com/?path=/docs/components-projects-work-project-list--docs
KanbanBoard
Controlled board of columns and draggable cards (dnd-kit sortable) with keyboard moves, localised announcements and RTL column flow.
Project View
A project page with a header, progress and members, and tabs for overview, board, list, timeline, activity, time, AI cost, files, memory, vault, GitHub and settings.