Tables

Tables display large datasets in a structured format. We use high-fidelity patterns for subscriptions, transactions, and data management.

Full Dashboard Template

Subscription Table Pattern

The standard Recura subscription list featuring tab-based filtering and the Action Reveal header system.

Subscription List

CustomerPlanStatusBilling CycleActions
Mark LuckEnterprise CorpActive$299.00/mo
Sarah JohnsonTrial PlanTrial$0.00/mo
Michael BrownBasic PlanPaused$99.00/mo
<div className="dashboard-card p-0 overflow-hidden">
  <div className="p-8 pb-4">
    <div className="flex justify-between items-center mb-8">
      <h3 className="text-xl font-extrabold tracking-tight">Subscription List</h3>
      <div className="flex items-center gap-3">
        <ActionRevealToggle show={showActions} onToggle={() => setShowActions(!showActions)} />
        <div className={cn("flex gap-3 transition-all origin-right", !showActions && "w-0 opacity-0")}>
          <button className="dashboard-action-btn-secondary">Print</button>
          <button className="dashboard-action-btn-primary">Export</button>
        </div>
      </div>
    </div>
    <div className="flex gap-2 overflow-x-auto">
      {tabs.map(tab => <TabButton active={tab === active} />)}
    </div>
  </div>
  <table className="w-full">
     {/* Standard table structure */}
  </table>
  
  <div className="p-8 border-t flex justify-center">
    <div className="flex items-center gap-2">
      <button className="pagination-btn"><ChevronLeft className="w-4 h-4" /> Back</button>
      <button className="pagination-page-btn-active">1</button>
      <button className="pagination-page-btn">2</button>
      <button className="pagination-btn">Next <ChevronRight className="w-4 h-4" /></button>
    </div>
  </div>
</div>

Transaction History Pattern

Recent Transactions

A simplified transaction list with high-contrast status badges for payment flows.

Recent Transactions

Track and manage customer payments

CustomerAmountStatusAction
A
Alex Johnson
$124.00Approved
S
Sarah Miller
$50.00Failed
M
Mike Ross
$89.99Pending

Showing 1 to 6 of 14 results

<div className="dashboard-card overflow-hidden !p-0">
  <div className="px-8 py-6 flex justify-between items-center">
    <div>
      <h3 className="text-base font-black">Recent Transactions</h3>
      <p className="text-xs font-medium text-slate-400">Manage customer payments</p>
    </div>
    <button className="bg-slate-900 text-white dark:bg-white dark:text-slate-900 px-5 py-2.5 rounded-xl text-sm font-black">
      Export CSV
    </button>
  </div>
  <table className="w-full border-collapse">
    <thead className="bg-slate-50/50 dark:bg-white/2"> ... </thead>
    <tbody className="divide-y divide-gray-50 dark:divide-white/5">
      {transactions.map(tx => (
        <tr className="hover:bg-slate-50/30">
          <td className="px-8 py-6 text-sm font-bold">{tx.customer}</td>
          <td className="px-8 py-6 text-sm font-black text-right relative">
            <button onClick={() => setOpenId(tx.id)}>View</button>
            {openId === tx.id && <RowActionsMenu ref={menuRef} />}
          </td>
        </tr>
      ))}
    </tbody>
  </table>

  <div className="px-8 py-5 flex justify-between items-center sm:flex-row flex-col gap-4">
    <p className="text-xs font-bold text-slate-400">Showing 1 to 10 of 48 results</p>
    <div className="flex items-center gap-2">
      <button className="p-2 border rounded-xl"><ChevronLeft className="w-4 h-4" /></button>
      <button className="w-9 h-9 rounded-xl bg-purple-600 text-white">1</button>
      <button className="p-2 border rounded-xl"><ChevronRight className="w-4 h-4" /></button>
    </div>
  </div>
</div>

Team Management Pattern

Team Members Table

A multi-filter management interface with role badges, status indicators, and relative activity tracking.

MemberRoleStatusLast ActiveActions
A

Admin User

admin@business.com

Owners
Active
Online
S

Sarah Johnson

sarah@business.com

Admin
Active
5 min ago
M

Michael Brown

michael@business.com

Management
Active
2 hours ago
E

Emma Wilson

emma@business.com

Support
Pending Invite
Pending
J

John Doe

john@business.com

Support
Inactive
2 days ago
Rows per page:
1-5 of 5
<div className="dashboard-card p-0 overflow-hidden">
  <div className="p-6 flex flex-wrap justify-between items-center bg-white dark:bg-slate-950 relative z-40">
     <div className="relative flex-1 md:max-w-xl">
        <Search className="absolute left-4 top-1/2 -translate-y-1/2 w-4 h-4" />
        <input className="w-full pl-11 pr-4 py-2.5 rounded-xl bg-slate-50" />
     </div>
     <div className="flex gap-3">
       <SimpleDropdown value={role} options={["All Roles", "Owners", "Admin", "Management"]} icon={Users} />
       <SimpleDropdown value={status} options={["All Status", "Active", "Pending", "Inactive"]} icon={ListFilter} />
     </div>
  </div>
  <table className="w-full">
     <tr className="hover:bg-slate-50/50">
       <td className="px-6 py-4">
         <div className="flex items-center gap-3">
           <Avatar name={m.name} />
           <div><p className="font-bold">{m.name}</p><p className="text-[10px]">{m.email}</p></div>
         </div>
       </td>
       <td className="text-center">
         <Badge variant={m.role === 'Owners' ? 'primary' : 'secondary'}>{m.role}</Badge>
       </td>
       <td className="text-center relative">
         <RowActionMenu zIndex={100} shadow="shadow-2xl" options={['Change Role', 'Edit Member', 'Deactivate', 'Remove']} />
       </td>
     </tr>
  </table>
  <div className="p-6 bg-slate-50 flex justify-between items-center relative z-30">
    <div className="flex items-center gap-3">
       <span className="text-[10px] font-black uppercase">Rows per page:</span>
       <RowsPerPageSelector value={rowsPerPage} isOpen={isRowsOpen} onToggle={() => setIsRowsOpen(!isRowsOpen)} />
    </div>
    <div className="flex items-center gap-6">
       <span className="text-[10px] font-black uppercase">1-10 of 48</span>
       <div className="flex gap-1">
          <button className="p-1.5 border rounded-lg"><ChevronLeft className="w-4 h-4" /></button>
          <button className="p-1.5 border rounded-lg"><ChevronRight className="w-4 h-4" /></button>
       </div>
    </div>
  </div>
</div>

Pagination Patterns

Numeric Pager

Style 1: Standard subscription-style pager with Back/Next labels.

<div className="flex items-center gap-2">
  <button className="pagination-btn">
    <ChevronLeft className="w-4 h-4" />
    Back
  </button>
  <button className="pagination-page-btn pagination-page-btn-active">1</button>
  <button className="pagination-page-btn">2</button>
  <button className="pagination-page-btn">3</button>
  <button className="pagination-btn">
    Next
    <ChevronRight className="w-4 h-4" />
  </button>
</div>

Result Count Pager

Style 2: Transaction history style with 'Showing 1 to X of Y' detail.

Showing 1 to 10 of 48 results

<div className="flex flex-col sm:flex-row sm:items-center justify-between gap-4">
  <p className="text-xs font-bold text-slate-400">
    Showing <span className="text-slate-900">1</span> to <span className="text-slate-900">10</span> of <span className="text-slate-900">48</span> results
  </p>
  <div className="flex items-center gap-2">
    <button className="pagination-btn px-2"><ChevronLeft className="w-4 h-4" /></button>
    <div className="flex items-center gap-1">
      <button className="w-9 h-9 rounded-xl bg-purple-600 text-white font-black text-xs shadow-lg">1</button>
      <button className="w-9 h-9 rounded-xl bg-white border border-gray-100 text-slate-400 text-xs font-black">2</button>
    </div>
    <button className="pagination-btn px-2"><ChevronRight className="w-4 h-4" /></button>
  </div>
</div>

Interactive Details

Header Action Reveal

Exact parity with SubscriptionTable toggle logic.

Status Badge Library

Full set of standardized transaction/subscription badges.

ActiveTrialPausedCanceledApprovedFailed

Standard CSS Class Map

PurposeGlobal CSS Class
Table Card Wrapperdashboard-card !p-0 overflow-hidden
Common Header Celltable-header-cell
Standard Data Celltable-data-cell
Row Hover Effecttable-row-hover
Primary Action Btndashboard-action-btn-primary
Secondary Action Btndashboard-action-btn-secondary