Skip to main content

Overview

Table digunakan untuk menampilkan data terstruktur dalam baris dan kolom. Komponen terdiri dari Cell yang dapat dikombinasikan secara bebas — setiap kolom dapat menggunakan style cell yang berbeda sesuai jenis data yang ditampilkan.
Name ↓StatusRevenue ↓Progress
Iqbal Maulana
● Active$1,800↑ 20%60%DeleteEdit
Siti Nurhaliza
● Inactive$940↓ 8%28%DeleteEdit
Budi Santoso
● Pending$2,400↑ 35%85%DeleteEdit

Installation

npm install @araf-ds/core

Usage

import { Table, TableHeader, TableBody, TableRow, TableCell } from "@araf-ds/core";

export default function UsersTable() {
  return (
    <Table>
      <TableHeader>
        <TableRow>
          <TableCell type="header" style="white-header" sortable>Name</TableCell>
          <TableCell type="header" style="white-header">Status</TableCell>
          <TableCell type="header" style="white-header" sortable>Revenue</TableCell>
          <TableCell type="header" style="white-header">Progress</TableCell>
          <TableCell type="header" style="white-header" />
        </TableRow>
      </TableHeader>
      <TableBody>
        {users.map((user) => (
          <TableRow key={user.id}>
            <TableCell style="lead-checkbox" checkbox supportingText>
              {user.name}
              <TableCell.Supporting>{user.email}</TableCell.Supporting>
            </TableCell>
            <TableCell style="badge">{user.status}</TableCell>
            <TableCell style="trend-positive" value={user.revenue} change={user.change} />
            <TableCell style="progress-bar" value={user.progress} />
            <TableCell style="action-buttons">
              <TableCell.Action variant="danger">Delete</TableCell.Action>
              <TableCell.Action variant="primary">Edit</TableCell.Action>
            </TableCell>
          </TableRow>
        ))}
      </TableBody>
    </Table>
  );
}
Header row menggunakan Type=Header dengan dua pilihan style background.
Background putih (#FFFFFF), digunakan untuk tabel dengan kontras ringan.
Name ↓RoleStatus
Olivia RhyeProduct DesignerActiveEdit
TokenNilai
Background#FFFFFF
Text#667085
FontInter Medium 12px
Border bottom1px solid #EAECF0
<TableCell type="header" style="white-header" sortable>Name</TableCell>

Cell Styles

Setiap cell konten (Type=Default) dapat menggunakan berbagai style sesuai jenis datanya.

Lead Cells

Cell dengan elemen interaktif (checkbox/toggle) dan opsional avatar, ikon, atau logo pembayaran di sisi kiri.
StylePreview
Lead checkbox
Iqbal Maulana
Lead toggle
Iqbal Maulana
Lead avatar checkboxIM
Iqbal Maulana
Lead icon checkbox🏷️
Category A
subcategory
Lead payment method checkboxVISA
Visa •••• 4242
Expires 04/27
// Lead checkbox dengan supporting text
<TableCell style="lead-checkbox" checkbox supportingText>
  Iqbal Maulana
  <TableCell.Supporting>[email protected]</TableCell.Supporting>
</TableCell>

// Lead avatar checkbox
<TableCell style="lead-avatar-checkbox" checkbox avatar={user.avatar} supportingText>
  {user.name}
  <TableCell.Supporting>{user.email}</TableCell.Supporting>
</TableCell>

// Lead payment method checkbox
<TableCell style="lead-payment-checkbox" checkbox paymentLogo="visa" supportingText>
  Visa •••• 4242
  <TableCell.Supporting>Expires 04/27</TableCell.Supporting>
</TableCell>

Content Cells

Cell untuk menampilkan data dalam berbagai format visual.
Satu atau beberapa badge label. Cocok untuk kolom Status, Kategori, atau Tag.

Badge (single)

● Active

Badges multiple

DesignFrontend
<TableCell style="badge">
  <Badge variant="success">Active</Badge>
</TableCell>

<TableCell style="badges-multiple">
  <Badge variant="blue">Design</Badge>
  <Badge variant="purple">Frontend</Badge>
</TableCell>

Action Cells

Cell untuk menampilkan kontrol aksi di ujung kanan baris.
StylePreviewKeterangan
Action buttonsDeleteEditText button tanpa border
Action icons✏️🗑️📋Ikon aksi tanpa label
Action dropdown iconSatu ikon dropdown (kebab menu)
// Action buttons
<TableCell style="action-buttons">
  <TableCell.Action variant="ghost-danger">Delete</TableCell.Action>
  <TableCell.Action variant="ghost-primary">Edit</TableCell.Action>
</TableCell>

// Action icons
<TableCell style="action-icons">
  <TableCell.IconAction icon={<EditIcon />} label="Edit" />
  <TableCell.IconAction icon={<TrashIcon />} label="Delete" />
</TableCell>

// Action dropdown
<TableCell style="action-dropdown-icon">
  <Dropdown>
    <DropdownItem>Edit</DropdownItem>
    <DropdownItem destructive>Delete</DropdownItem>
  </Dropdown>
</TableCell>

Standalone Cells

Cell yang hanya berisi satu elemen interaktif tanpa teks pendamping.

Checkbox only

Toggle only

<TableCell style="checkbox-only" />
<TableCell style="toggle-only" />

Cell States

Setiap cell mendukung tiga state interaksi.
Kondisi normal, tidak ada interaksi. Background cell transparan (putih dari tabel).
Iqbal MaulanaProduct Designer

Properties

Setiap cell memiliki 4 properties boolean yang dapat dikombinasikan.
PropertyTypeDefaultDeskripsi
checkboxbooleanfalseMenampilkan checkbox di sisi kiri cell
togglebooleanfalseMenampilkan toggle button di sisi kiri cell
supportingTextbooleanfalseMenampilkan teks kecil di bawah teks utama
trailingIconbooleanfalseMenampilkan ikon sort/dropdown di header (khusus Type=Header)
checkbox dan toggle bersifat mutually exclusive — tidak boleh diaktifkan bersamaan dalam satu cell.

Design Tokens

Table

TokenNilai
Border1px solid #B9B9B9
Border radius4px
Row divider1px solid #EAECF0

Cell

ElemenTokenNilai
Paddinghorizontal24px
Paddingvertical16px
Row height (Header)52px
Row height (Default)72px
Primary textcolor#101828 (Gray/900)
Supporting textcolor#667085 (Gray/500)
Primary textfontInter Medium 14px
Supporting textfontInter Regular 14px
Header textfontInter Medium 12px
Header bg (White)#FFFFFF
Header bg (Gray)#F9FAFB
Hover row bg#F9FAFB

API Reference

Table

className
string
Class tambahan untuk wrapper tabel.
bordered
boolean
default:"true"
Menampilkan border luar tabel.

TableCell

type
"default" | "header"
default:"\"default\""
Tipe cell — header untuk baris header, default untuk baris konten.
style
"lead-checkbox" | "lead-toggle" | "lead-avatar-checkbox" | "lead-avatar-toggle" | "lead-icon-checkbox" | "lead-icon-toggle" | "badge" | "badges-multiple" | "trend-positive" | "trend-negative" | "progress-bar" | "avatar-group" | "action-buttons" | "action-icons" | "action-dropdown-icon" | "checkbox-only" | "toggle-only" | "star-ratings" | "lead-payment-checkbox" | "lead-payment-toggle" | "white-header" | "gray-header"
required
Style tampilan cell yang menentukan konten dan layout.
state
"default" | "hover" | "disabled"
default:"\"default\""
State interaksi cell.
checkbox
boolean
default:"false"
Menampilkan checkbox di sisi kiri cell.
toggle
boolean
default:"false"
Menampilkan toggle button di sisi kiri cell.
supportingText
boolean
default:"false"
Menampilkan teks pendukung di bawah teks utama.
trailingIcon
boolean
default:"false"
Menampilkan sort icon pada header cell.
sortable
boolean
default:"false"
Mengaktifkan fungsionalitas sort pada header cell.
value
string | number
Nilai yang ditampilkan (trend, progress, star ratings).
change
string | number
Persentase perubahan untuk tipe trend-positive / trend-negative.

Accessibility

  • Gunakan elemen <table>, <thead>, <tbody>, <tr>, <th>, <td> yang semantik
  • Header cell menggunakan <th scope="col"> untuk relasi kolom yang jelas
  • Checkbox di header untuk “select all” menggunakan aria-label="Select all rows"
  • Tabel dengan sorting menambahkan aria-sort="ascending" | "descending" | "none" pada header
  • Tabel panjang menggunakan aria-label atau <caption> yang deskriptif
  • Pastikan tabel bisa di-scroll horizontal pada viewport sempit dengan overflow-x: auto
  • Tombol aksi pada cell menggunakan aria-label yang mencantumkan nama baris (misal aria-label="Edit Iqbal Maulana")

Do’s & Don’ts

Do

  • Gunakan style cell yang konsisten untuk setiap kolom
  • Batasi jumlah kolom agar tidak overflow pada layar kecil
  • Gunakan Gray Header untuk tabel dengan banyak baris agar lebih terbaca
  • Selalu sertakan kolom action di sisi paling kanan
  • Gunakan supportingText untuk menampilkan info sekunder tanpa kolom tambahan
  • Berikan aria-label pada setiap action button

Don't

  • Jangan campur checkbox dan toggle dalam satu tabel
  • Jangan gunakan lebih dari 2 badge dalam satu cell badges-multiple
  • Jangan letakkan action buttons di kolom selain kolom terakhir
  • Jangan tampilkan tabel tanpa header
  • Jangan gunakan teks terlalu panjang di cell — potong dengan ellipsis jika perlu
  • Jangan gunakan style progress-bar untuk nilai non-persentase