Dashboard

A stats-and-table admin dashboard with KPI cards, a progress bar, and a recent-orders table.

Preview

Revenue

$24,780

+12%
Orders

1,245

+8%
Customers

862

+2%
Conversion

3.2%

-0.4%
Monthly Sales Target
$24,780 / $30,00083%
Recent Orders
OrderCustomerAmountStatus
#1023Alice Johnson$249Delivered
#1022Bob Smith$129Shipped
#1021Carol Lee$89Processing
#1020Dan Brown$349Delivered
#1019Eve Davis$59Cancelled
html
<div class="vstack gap-4">
  <div class="grid cols-4">
    <div class="card">
      <small class="text-light">Revenue</small>
      <h3 class="mb-0">$24,780</h3>
      <small><ng-oat-badge variant="success">+12%</ng-oat-badge></small>
    </div>
    <!-- ... more KPI cards -->
  </div>

  <div class="card">
    <header><strong>Monthly Sales Target</strong></header>
    <div class="vstack gap-2">
      <div class="hstack justify-between">
        <span>$24,780 / $30,000</span>
        <span class="text-light">83%</span>
      </div>
      <ng-oat-progress [value]="83" />
    </div>
  </div>

  <div class="card">
    <header><strong>Recent Orders</strong></header>
    <div class="table">
      <table>
        <thead><tr><th>Order</th><th>Customer</th><th>Amount</th><th>Status</th></tr></thead>
        <tbody>
          <tr>
            <td>#1023</td><td>Alice Johnson</td><td>$249</td>
            <td><ng-oat-badge variant="success">Delivered</ng-oat-badge></td>
          </tr>
        </tbody>
      </table>
    </div>
  </div>
</div>

SFC Source

typescript
import { Component } from '@angular/core';
import { NgOatBadge, NgOatProgress } from '@letsprogram/ng-oat';

@Component({
  selector: 'app-dashboard',
  imports: [NgOatBadge, NgOatProgress],
  template: `
    <div class="vstack gap-4">
      <div class="grid cols-4">
        <div class="card">
          <small class="text-light">Revenue</small>
          <h3 class="mb-0">\$24,780</h3>
          <small><ng-oat-badge variant="success">+12%</ng-oat-badge></small>
        </div>
        <div class="card">
          <small class="text-light">Orders</small>
          <h3 class="mb-0">1,245</h3>
          <small><ng-oat-badge variant="success">+8%</ng-oat-badge></small>
        </div>
        <div class="card">
          <small class="text-light">Customers</small>
          <h3 class="mb-0">862</h3>
          <small><ng-oat-badge variant="outline">+2%</ng-oat-badge></small>
        </div>
        <div class="card">
          <small class="text-light">Conversion</small>
          <h3 class="mb-0">3.2%</h3>
          <small><ng-oat-badge variant="danger">-0.4%</ng-oat-badge></small>
        </div>
      </div>

      <div class="card">
        <header><strong>Monthly Sales Target</strong></header>
        <div class="vstack gap-2">
          <div class="hstack justify-between">
            <span>\$24,780 / \$30,000</span>
            <span class="text-light">83%</span>
          </div>
          <ng-oat-progress [value]="83" />
        </div>
      </div>

      <div class="card">
        <header><strong>Recent Orders</strong></header>
        <div class="table">
          <table>
            <thead><tr><th>Order</th><th>Customer</th><th>Amount</th><th>Status</th></tr></thead>
            <tbody>
              <tr><td>#1023</td><td>Alice Johnson</td><td>\$249</td>
                <td><ng-oat-badge variant="success">Delivered</ng-oat-badge></td></tr>
              <tr><td>#1022</td><td>Bob Smith</td><td>\$129</td>
                <td><ng-oat-badge variant="outline">Shipped</ng-oat-badge></td></tr>
              <tr><td>#1021</td><td>Carol Lee</td><td>\$89</td>
                <td><ng-oat-badge variant="secondary">Processing</ng-oat-badge></td></tr>
            </tbody>
          </table>
        </div>
      </div>
    </div>
  `,
})
export class DashboardComponent {}