Data
Data tables, Kanban boards, searchable tables, and timeline components.
Full Data Table
Feature-rich data table with sorting, filtering, pagination, and bulk actions.
| Name↕ | Email↕ | Role↕ | Status↕ | |
|---|---|---|---|---|
| Alice Johnson | alice@example.com | Admin | Active | |
| Bob Smith | bob@example.com | Member | Active | |
| Carol White | carol@example.com | Member | Inactive | |
| Dave Brown | dave@example.com | Viewer | Active |
0 of 4 row(s) selected
| Name↕ | Email↕ | Role↕ | Status↕ | |
|---|---|---|---|---|
| Alice Johnson | alice@example.com | Admin | Active | |
| Bob Smith | bob@example.com | Member | Active | |
| Carol White | carol@example.com | Member | Inactive | |
| Dave Brown | dave@example.com | Viewer | Active |
0 of 4 row(s) selected
| Name↕ | Email↕ | Role↕ | Status↕ | |
|---|---|---|---|---|
| Alice Johnson | alice@example.com | Admin | Active | |
| Bob Smith | bob@example.com | Member | Active | |
| Carol White | carol@example.com | Member | Inactive | |
| Dave Brown | dave@example.com | Viewer | Active |
0 of 4 row(s) selected
import { FullDataTable } from "@launchapp/design-system/blocks/data";import type { ColumnDef } from "@tanstack/react-table";interface User { id: string; name: string; email: string; role: string; status: "active" | "inactive";}const columns: ColumnDef<User>[] = [ { accessorKey: "name", header: "Name" }, { accessorKey: "email", header: "Email" }, { accessorKey: "role", header: "Role" }, { accessorKey: "status", header: "Status" },];const data: User[] = [ { id: "1", name: "Alice Johnson", email: "alice@example.com", role: "Admin", status: "active" }, { id: "2", name: "Bob Smith", email: "bob@example.com", role: "Member", status: "active" }, { id: "3", name: "Carol White", email: "carol@example.com", role: "Member", status: "inactive" },];export default function Page() { return <FullDataTable columns={columns} data={data} searchColumn="name" />;}Kanban Board
Drag-and-drop Kanban board with columns and cards.
To Do
2In Progress
2Done
1To Do
2In Progress
2Done
1To Do
2In Progress
2Done
1import { KanbanBoard } from "@launchapp/design-system/blocks/data";const initialColumns = [ { id: "todo", title: "To Do", cards: [ { id: "1", title: "Research competitors", badge: "Research" }, { id: "2", title: "Design wireframes", badge: "Design" }, ], }, { id: "in-progress", title: "In Progress", cards: [ { id: "3", title: "Build API endpoints", badge: "Engineering" }, ], }, { id: "done", title: "Done", cards: [ { id: "4", title: "Project kickoff", badge: "Planning" }, ], },];export default function Page() { return <KanbanBoard initialColumns={initialColumns} />;}Searchable Data Table
Data table with search input and column visibility controls.
4 results
| Name↕ | Email↕ | Role↕ | Status↕ |
|---|---|---|---|
| Alice Johnson | alice@example.com | Admin | Active |
| Bob Smith | bob@example.com | Member | Active |
| Carol White | carol@example.com | Member | Inactive |
| Dave Brown | dave@example.com | Viewer | Active |
Page 1 of 1
import { SearchableDataTable } from "@launchapp/design-system/blocks/data";import type { ColumnDef } from "@tanstack/react-table";interface Product { id: string; name: string; category: string; price: number;}const columns: ColumnDef<Product>[] = [ { accessorKey: "name", header: "Name" }, { accessorKey: "category", header: "Category" }, { accessorKey: "price", header: "Price" },];const data: Product[] = [ { id: "1", name: "Wireless Headphones", category: "Electronics", price: 99 }, { id: "2", name: "Running Shoes", category: "Sports", price: 75 }, { id: "3", name: "Coffee Maker", category: "Appliances", price: 49 },];export default function Page() { return ( <SearchableDataTable columns={columns} data={data} searchColumn="name" searchPlaceholder="Search products..." /> );}Timeline
Vertical timeline for displaying chronological events with icons and badges.
- Completed
Project kickoff
Initial planning meeting with all stakeholders.
- Completed
Design phase
Created wireframes and design system tokens.
- In Progress
Development sprint
Building core features and API integration.
- Upcoming
Launch
Public release and marketing campaign.
- Completed
Project kickoff
Initial planning meeting with all stakeholders.
- Completed
Design phase
Created wireframes and design system tokens.
- In Progress
Development sprint
Building core features and API integration.
- Upcoming
Launch
Public release and marketing campaign.
- Completed
Project kickoff
Initial planning meeting with all stakeholders.
- Completed
Design phase
Created wireframes and design system tokens.
- In Progress
Development sprint
Building core features and API integration.
- Upcoming
Launch
Public release and marketing campaign.
import { Timeline } from "@launchapp/design-system/blocks/data";const items = [ { id: "1", title: "Project kickoff", description: "Initial planning meeting with all stakeholders.", date: "Jan 15, 2025", status: "completed", }, { id: "2", title: "Design phase", description: "Created wireframes and design system.", date: "Feb 1, 2025", status: "completed", }, { id: "3", title: "Development sprint", description: "Building core features and API integration.", date: "Mar 10, 2025", status: "current", }, { id: "4", title: "Launch", description: "Public release and marketing campaign.", date: "Apr 1, 2025", status: "upcoming", },];export default function Page() { return <Timeline items={items} />;}Stats Card
Single-metric stat card with trend indicator and sparkline.
Total Revenue
Monthly recurring revenue
import { StatsCard } from "@launchapp/design-system/blocks/data";export default function Page() { return ( <StatsCard label="Total Revenue" value="$45,231" trend="up" trendValue="+20.1% from last month" sparklineData={[30, 40, 35, 50, 49, 60, 70]} /> );}Metric Grid
Responsive grid of metric cards for dashboard overview sections.
Revenue
Active Users
Churn Rate
import { MetricGrid } from "@launchapp/design-system/blocks/data";const metrics = [ { id: "revenue", label: "Revenue", value: "$45,231", trend: "up" as const, trendValue: "+20.1%" }, { id: "users", label: "Active Users", value: "2,350", trend: "up" as const, trendValue: "+15.3%" }, { id: "orders", label: "Orders", value: "1,247", trend: "down" as const, trendValue: "-4.2%" }, { id: "conversion", label: "Conversion", value: "3.24%", trend: "neutral" as const, trendValue: "0.0%" },];export default function Page() { return <MetricGrid metrics={metrics} />;}Activity Feed
Paginated activity feed for data dashboards with filtering.
Recent Activity
Alice Johnson
Invalid Date
Bob Smith
Invalid Date
Carol White
Invalid Date
import { ActivityFeed } from "@launchapp/design-system/blocks/data";const items = [ { id: "1", user: { name: "Alice", initials: "AJ" }, action: "Created a project", timestamp: "2 min ago", actionType: "create" }, { id: "2", user: { name: "Bob", initials: "BS" }, action: "Merged a PR", timestamp: "1 hour ago", actionType: "merge" },];export default function Page() { return <ActivityFeed items={items} />;}Empty State
Empty state placeholder with icon, title, description, and CTA.
No projects yet
Get started by creating your first project.
import { EmptyState } from "@launchapp/design-system/blocks/data";export default function Page() { return ( <EmptyState title="No projects yet" description="Get started by creating your first project." action={<button type="button">Create project</button>} /> );}Calendar View
Monthly calendar view with event markers and day selection.
Calendar
Plan customer touchpoints, internal milestones, and admin work.
Wednesday
April 29, 2026
No events scheduled
Create an event or drag one here.
import { CalendarView, type CalendarEvent } from "@launchapp/design-system/blocks/data";const events: CalendarEvent[] = [ { id: "1", title: "Team standup", date: new Date(), allDay: true }, { id: "2", title: "Design review", date: new Date(), color: "secondary" },];export default function Page() { return ( <CalendarView events={events} defaultView="week" onEventCreate={(event) => console.log("created", event)} onEventReschedule={(event) => console.log("rescheduled", event)} /> );}Chart Card
Card wrapper for charts with title, description, period selector, and actions.
Revenue Over Time
Monthly revenue for the past 6 months
import { ChartCard } from "@launchapp/design-system/blocks/data";export default function Page() { return ( <ChartCard title="Revenue Over Time" description="Monthly revenue for the past 6 months" periods={["1W", "1M", "3M", "6M", "1Y"]} > <div className="h-48 flex items-center justify-center text-muted-foreground text-sm"> Chart goes here </div> </ChartCard> );}Data Trend
Trend indicator card showing metric value with percentage change and sparkline.
import { DataTrend } from "@launchapp/design-system/blocks/data";export default function Page() { return ( <DataTrend label="Monthly Active Users" value={12450} previousValue={10800} format="number" sparklineData={[8200, 9100, 10200, 10800, 11400, 12450]} /> );}Empty State Card
Card-styled empty state for table and list components.
No results found
Try adjusting your search or filters.
import { EmptyStateCard } from "@launchapp/design-system/blocks/data";export default function Page() { return ( <EmptyStateCard title="No results found" description="Try adjusting your search or filters to find what you're looking for." /> );}Filter Bar
Horizontal filter bar with multi-select dropdowns and active filter chips.
import { FilterBar } from "@launchapp/design-system/blocks/data";const filters = [ { id: "status", label: "Status", options: ["Active", "Inactive", "Pending"] }, { id: "role", label: "Role", options: ["Admin", "Member", "Viewer"] },];export default function Page() { return ( <FilterBar filters={filters} onFilterChange={(id, values) => console.log("filter", id, values)} onClearAll={() => console.log("clear all")} /> );}Funnel Chart Card
Card displaying a conversion funnel chart with stage-by-stage breakdown.
Checkout Funnel
Conversion funnel for this month
import { FunnelChartCard } from "@launchapp/design-system/blocks/data";const stages = [ { label: "Visitors", value: 10000 }, { label: "Sign-ups", value: 3500 }, { label: "Activated", value: 1200 }, { label: "Converted", value: 420 },];export default function Page() { return <FunnelChartCard title="Conversion Funnel" stages={stages} />;}Gauge Card
Card with circular gauge meter for displaying a single KPI as a percentage.
CPU Usage
Current server load
import { GaugeCard } from "@launchapp/design-system/blocks/data";export default function Page() { return ( <GaugeCard title="System Health" value={87} unit="%" threshold={{ warning: 60, critical: 30 }} /> );}KPI Comparison Card
Side-by-side KPI comparison card showing current vs previous period.
Monthly Revenue
Total recurring revenue
import { KPIComparisonCard } from "@launchapp/design-system/blocks/data";export default function Page() { return ( <KPIComparisonCard title="Revenue" current={{ value: 45231, label: "This Month", formatted: "$45,231" }} previous={{ value: 37600, label: "Last Month", formatted: "$37,600" }} /> );}Sparkline Card
Compact metric card with inline sparkline chart for trend visualization.
Revenue
++20.1%vs last month
import { SparklineCard } from "@launchapp/design-system/blocks/data";export default function Page() { return ( <SparklineCard label="Weekly Signups" value={342} trend="up" trendValue="+12%" data={[180, 220, 195, 280, 310, 290, 342]} /> );}Data Table Card
Card-wrapped data table with header, title, and export button.
Recent Users
Latest registered users
| Name | Role | |
|---|---|---|
| Alice Johnson | alice@example.com | Admin |
| Bob Smith | bob@example.com | Member |
| Carol White | carol@example.com | Viewer |
import { DataTableCard } from "@launchapp/design-system/blocks/data";import type { ColumnDef } from "@tanstack/react-table";const columns: ColumnDef<{ name: string; email: string; status: string }>[] = [ { accessorKey: "name", header: "Name" }, { accessorKey: "email", header: "Email" }, { accessorKey: "status", header: "Status" },];const data = [ { name: "Alice Johnson", email: "alice@example.com", status: "Active" }, { name: "Bob Smith", email: "bob@example.com", status: "Pending" },];export default function Page() { return <DataTableCard title="Users" columns={columns} data={data} />;}Column Filters
Per-column filter controls for data tables with type-aware input components.
import { ColumnFilters } from "@launchapp/design-system/blocks/data";const filters = [ { id: "name", label: "Name", type: "text" as const }, { id: "status", label: "Status", type: "select" as const, options: ["active", "inactive"] },];export default function Page() { return ( <ColumnFilters filters={filters} onFiltersChange={(values) => console.log("filters changed", values)} /> );}Data Table Toolbar
Toolbar for data tables with global search, filter, column visibility, and bulk actions.
import { DataTableToolbar } from "@launchapp/design-system/blocks/data";export default function Page() { return ( <DataTableToolbar onSearch={(q) => console.log("search", q)} onAddNew={() => console.log("add new")} onExport={() => console.log("export")} /> );}Checkout Funnel
Funnel chart visualization showing step-by-step conversion rates through checkout.
Visitors
Sign Ups
Trial Started
Paid
import { CheckoutFunnel } from "@launchapp/design-system/blocks/data";const steps = [ { id: "visitors", label: "Visitors", value: 10000 }, { id: "signups", label: "Sign Ups", value: 4200 }, { id: "trial", label: "Trial", value: 1800 }, { id: "paid", label: "Paid", value: 620 },];export default function Page() { return ( <CheckoutFunnel steps={steps} showDropoff showValues /> );}Data Export Wizard
Multi-step wizard for selecting data types, fields, and export format before downloading.
Export Data
Format
Choose the output format for your export.
Best for spreadsheets and data analysis tools.
Best for developers and programmatic data processing.
Best for Excel with formatting preserved.
Best for legacy systems and structured documents.
import { DataExportWizard } from "@launchapp/design-system/blocks/data";const dataTypes = [ { id: "users", label: "Users", count: 1250 }, { id: "orders", label: "Orders", count: 8430 },];export default function Page() { return ( <DataExportWizard availableDataTypes={dataTypes} onExport={(options) => console.log("export", options)} /> );}Empty State
Centered empty state with icon, title, description, and optional action button.
No projects yet
Create your first project to get started.
import { EmptyState } from "@launchapp/design-system/blocks/data";export default function Page() { return ( <EmptyState title="No projects yet" description="Create your first project to get started." primaryAction={{ label: "Create project", onClick: () => console.log("create") }} /> );}Calendar Widget
Mini calendar widget with event dots and date selection.
import { CalendarWidget } from "@launchapp/design-system/blocks/data";const events = [ { id: "1", title: "Team standup", date: new Date(), color: "primary" }, { id: "2", title: "Product launch", date: new Date(Date.now() + 5 * 86400000), color: "secondary" },];export default function Page() { return ( <CalendarWidget events={events} onDateSelect={(date) => console.log("selected", date)} onEventClick={(event) => console.log("event", event.id)} /> );}Comparison Table
Side-by-side product comparison table with attributes, ratings, and add-to-cart.
import { ComparisonTable } from "@launchapp/design-system/blocks/data";const products = [ { id: "1", name: "Starter Plan", price: 9, badge: "Popular", rating: 4.5, pros: ["Easy setup", "Good support"], cons: ["Limited features"] }, { id: "2", name: "Pro Plan", price: 29, badge: "Best Value", rating: 4.8, pros: ["All features", "Priority support"], cons: ["Higher cost"] }, { id: "3", name: "Enterprise", price: 99, rating: 4.9, pros: ["Unlimited everything", "Dedicated support"], cons: [] },];const attributes = [ { key: "price", label: "Price" }, { key: "rating", label: "Rating" },];export default function Page() { return ( <ComparisonTable products={products} attributes={attributes} onAddToCart={(p) => console.log("add", p.id)} /> );}Project Board
Kanban-style project board with task cards, priorities, and column management.
To Do
2In Progress
1Review
0Done
1import { ProjectBoard } from "@launchapp/design-system/blocks/data";const columns = [ { id: "backlog", title: "Backlog", status: "backlog", tasks: [ { id: "1", title: "Research competitors", priority: "low" }, { id: "2", title: "Design new onboarding", priority: "medium" }, ], }, { id: "in-progress", title: "In Progress", status: "in_progress", tasks: [ { id: "3", title: "Build API endpoints", priority: "high", assignee: { name: "Alice", initials: "AJ" } }, ], }, { id: "done", title: "Done", status: "done", tasks: [ { id: "4", title: "Project kickoff", priority: "low" }, ], },];export default function Page() { return ( <ProjectBoard initialColumns={columns} onCardClick={(card) => console.log("card", card.id)} /> );}Project Kanban
Kanban board for project management with priority badges, assignees, and due dates.
Backlog
Update dependencies
Write unit tests
In Progress
Implement OAuth flow
Review
Design system update
Done
Setup CI/CD pipeline
import { ProjectKanban } from "@launchapp/design-system/blocks/project";const columns = [ { id: "todo", title: "To Do", color: "bg-slate-500", cards: [ { id: "1", title: "Research competitors", priority: "low", labels: ["Research"] }, { id: "2", title: "Design wireframes", priority: "medium", labels: ["Design"] }, ], }, { id: "in-progress", title: "In Progress", color: "bg-blue-500", cards: [ { id: "3", title: "Build API endpoints", priority: "high", assignee: { name: "Alice Johnson", initials: "AJ" }, dueDate: "2024-02-15" }, ], }, { id: "done", title: "Done", color: "bg-emerald-500", cards: [ { id: "4", title: "Project kickoff", priority: "low", labels: ["Planning"] }, ], },];export default function Page() { return ( <ProjectKanban columns={columns} onCardClick={(card) => console.log("card", card.id)} onAddCard={(colId) => console.log("add to", colId)} /> );}Timeline View
Vertical timeline with event entries, avatars, badges, and click handlers.
Project Timeline
Project Kickoff
Initial planning and team alignment completed.
Design Phase
UI/UX designs reviewed and approved.
Alpha Release
First internal release shipped to early testers.
Beta Launch
Public beta opened to 500 users.
v1.0 GA
General availability release.
import { TimelineView } from "@launchapp/design-system/blocks/timeline";const events = [ { id: "1", date: "Jan 15, 2025", title: "Project kicked off", description: "Initial planning meeting with all stakeholders.", badge: "Completed", badgeVariant: "secondary", avatarFallback: "AJ" }, { id: "2", date: "Feb 1, 2025", title: "Design phase complete", description: "Wireframes and design tokens finalized.", badge: "Completed", badgeVariant: "secondary", avatarFallback: "BS" }, { id: "3", date: "Mar 10, 2025", title: "Development sprint", description: "Building core features and API integration.", badge: "In Progress", badgeVariant: "default", avatarFallback: "CW" }, { id: "4", date: "Apr 1, 2025", title: "Public launch", description: "Go-live and marketing campaign.", badge: "Upcoming", badgeVariant: "outline" },];export default function Page() { return ( <TimelineView events={events} title="Project Timeline" onEventClick={(event) => console.log("event", event.id)} /> );}Data Table Advanced
Advanced data table with multi-column filtering, sorting, pagination, column resizing, row selection, and CSV/JSON export. Ideal for CRM and admin panels.
| Name | Company | Role | Status | ||
|---|---|---|---|---|---|
| Alice Johnson | alice@acme.com | Acme Corp | Admin | active | |
| Bob Smith | bob@globex.com | Globex | Member | inactive | |
| Carol White | carol@initech.com | Initech | Member | lead | |
| David Lee | david@acme.com | Acme Corp | Viewer | active | |
| Eva Green | eva@globex.com | Globex | Admin | active |
0 of 5 row(s) selected
import { DataTableAdvanced } from "@launchapp/design-system/blocks/data";import type { ColumnDef } from "@tanstack/react-table";import { Badge } from "@launchapp/design-system";interface Contact { id: string; name: string; email: string; company: string; status: "active" | "inactive" | "lead"; role: string;}const columns: ColumnDef<Contact>[] = [ { accessorKey: "name", header: "Name" }, { accessorKey: "email", header: "Email" }, { accessorKey: "company", header: "Company" }, { accessorKey: "role", header: "Role" }, { accessorKey: "status", header: "Status", cell: ({ getValue }) => { const v = getValue<string>(); const color = v === "active" ? "default" : v === "lead" ? "secondary" : "outline"; return <Badge variant={color}>{v}</Badge>; }, },];const data: Contact[] = [ { id: "1", name: "Alice Johnson", email: "alice@acme.com", company: "Acme Corp", role: "Admin", status: "active" }, { id: "2", name: "Bob Smith", email: "bob@globex.com", company: "Globex", role: "Member", status: "inactive" }, { id: "3", name: "Carol White", email: "carol@initech.com", company: "Initech", role: "Member", status: "lead" }, { id: "4", name: "David Lee", email: "david@acme.com", company: "Acme Corp", role: "Viewer", status: "active" }, { id: "5", name: "Eva Green", email: "eva@globex.com", company: "Globex", role: "Admin", status: "active" },];export default function Page() { return ( <DataTableAdvanced title="Contacts" columns={columns} data={data} searchColumn="name" searchPlaceholder="Search contacts..." filterColumns={[ { column: "status", label: "Status", options: [ { label: "Active", value: "active" }, { label: "Inactive", value: "inactive" }, { label: "Lead", value: "lead" }, ], }, { column: "company", label: "Company", options: [ { label: "Acme Corp", value: "Acme Corp" }, { label: "Globex", value: "Globex" }, { label: "Initech", value: "Initech" }, ], }, ]} enableExport onBulkDelete={(rows) => console.log("Delete", rows)} pageSize={10} /> );}