Invoice History Table

Billing

Billing History

View and download your past invoices and payment history.

DateDescriptionAmountStatusDownload
Jan 1, 2024
INV-2024-001
Pro Plan - Monthly$29.00Paid
Dec 1, 2023
INV-2023-012
Pro Plan - Monthly$29.00Paid
Nov 1, 2023
INV-2023-011
Pro Plan - Monthly$29.00Paid
Oct 1, 2023
INV-2023-010
Pro Plan - Monthly$29.00Failed
Sep 1, 2023
INV-2023-009
Pro Plan - Monthly$29.00Paid
About this block

Invoice History TableFREE

Billing history table displaying invoices with date, description, amount, payment status badges, and download buttons. Perfect for account billing pages and payment management dashboards.

Settings64: Invoice History Table

Billing history table for an account or settings page: a header with a billing badge, a shadcn Table of past invoices with colored status badges (paid, pending, failed) and a per-row download button, an empty state when there are no invoices, and an optional "view all" link.

Free block

This block is free. No license or account is required: install it with the CLI and use it in unlimited projects.

Installation

Radix flavor

bash
npx shadcn add "https://ui.beste.co/r/settings64"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/settings64"

This installs the block to components/beste/block/settings64.tsx and the badge, button, and table shadcn/ui primitives it depends on.

Quick start

The installed file exports settings64Demo alongside the block: the exact props behind the preview above. Spread it to get a working billing table in one line.

tsx
import { Settings64, settings64Demo } from "@/components/beste/block/settings64";

export default function BillingPage() {
  return <Settings64 {...settings64Demo} />;
}

Then replace the demo with your own props. Written out, the same setup looks like this:

tsx
import { Settings64 } from "@/components/beste/block/settings64";

export default function BillingPage() {
  return (
    <Settings64
      badge={{ label: "Billing", variant: "secondary" }}
      heading="Billing History"
      description="View and download your past invoices and payment history."
      invoices={[
        {
          date: "Jan 1, 2024",
          amount: "$29.00",
          status: "paid",
          description: "Pro Plan - Monthly",
          invoiceNumber: "INV-2024-001",
          downloadUrl: "https://beste.co",
        },
        {
          date: "Dec 1, 2023",
          amount: "$29.00",
          status: "failed",
          description: "Pro Plan - Monthly",
          invoiceNumber: "INV-2023-012",
        },
      ]}
      labels={{
        date: "Date",
        description: "Description",
        amount: "Amount",
        status: "Status",
        paid: "Paid",
        failed: "Failed",
        download: "Download",
      }}
      viewAllUrl="https://beste.co"
    />
  );
}

Props

PropTypeDefaultDescription
badge{ label: string; variant?: "default" | "secondary" | "outline" }Optional badge above the heading
headingstringSection heading
descriptionstringSection intro text
invoicesInvoice[][]Rows rendered in the table, in order
labelsLabels{}Every user-visible table string, for i18n
viewAllUrlstringLink for the "view all" button below the table; button is hidden without it
classNamestringExtra classes for the outer <section>
ts
type Invoice = {
  date: string;
  amount: string;
  status: "paid" | "pending" | "failed";
  description: string;
  invoiceNumber: string;
  downloadUrl?: string;
};

type Labels = {
  date?: string;
  description?: string;
  amount?: string;
  status?: string;
  paid?: string;
  pending?: string;
  failed?: string;
  download?: string;
  noInvoices?: string;
  viewAll?: string;
};

Behavior notes

  • Status badges use hardcoded status colors rather than the semantic palette: emerald for paid, amber for pending, rose for failed, each paired with a matching icon (CheckCircle, Clock, XCircle).
  • A row's download button is a real link (asChild around <Link>) when downloadUrl is set; when it's missing, the same icon button renders with the disabled attribute instead of being hidden, so the column stays visually aligned.
  • When invoices is empty, the table is replaced entirely by a centered empty-state card with a FileText icon and the labels.noInvoices string.
  • The "view all" button only renders when both invoices.length > 0 and viewAllUrl are set; supplying only one of the two hides it.
  • Every table header and status label comes from the labels object with no internal fallback text, so omitting a key renders that cell blank.

More Settings blocks

View all Settings
PRO

settings65

Invoice Detail View

Detailed invoice page with billing address, itemized line items table, subtotal, tax, total, and payment method info with print and download actions. Perfect for generating printable invoices and payment receipts.

PRO

settings59

Subscription Plan Card

Subscription management card displaying current plan details, pricing, included features, renewal date, and status badges with actions to change or cancel. Perfect for SaaS billing dashboards and account settings.

PRO

settings67

Email Preferences With Live Volume

A subscription preference list where each list carries how often it sends, and the figure underneath recomputes the monthly email volume as boxes are ticked, down to a stated zero.

PRO

settings66

Workspace Preferences Panel

A settings panel with a section rail on the left and the chosen group on the right, laying out hairline preference rows with switches, a select for the group's default, and a save bar underneath.