Pola
Status & tahap dokumen
Status sebagai teks + tone, tahap proses dengan StagePath, dan penanda "perlu tindakan Anda".
Contoh
PO-2026-0142
Menunggu BAST/DOPT Pelanggan Contoh A · Lisensi + jasa · Rp 150.000.000 · Pemilik Anisa Nugraha
- Diajukan, Selesai12 Sep 2026 · Budi Santoso
- PO terbit, Selesai13 Sep 2026 · Rina Kartika
- Invoice distributor, Selesai20 Sep 2026 · INV-DST-8812
- BAST/DO, Menunggu tindakan AndaMenunggu Anda · hari ini
- Ditagih, BelumTermin 2 · Rp 60.000.000
| No. PO | Customer | Nilai (Rp) | Status |
|---|---|---|---|
| PO-2026-0142 | PT Pelanggan Contoh A | 150.000.000 | Menunggu BAST/DO |
| PO-2026-0144 | PT Samudra Farma | 128.000.000 | Menunggu BAST/DO |
| PO-2026-0146 | PT Mitra Energi Persada | 45.000.000 | Dikembalikan |
| PO-2026-0139 | PT Cakra Media Digital | 38.000.000 | Siap ditagih |
| PO-2026-0131 | PT Andalan Finance | 210.000.000 | Selesai |
import { Button, StagePath, StateLabel, formatMoney, formatNumber, type StateLabelTone } from '@divistant/circca-react';
import { DotsThree } from '@phosphor-icons/react';
// Pola status dokumen — Figma BizOps for IT Services › 07 Template › Detail PO-2026-0142.
// Status = teks + tone yang sama di daftar dan di header. Tahap proses = StagePath bertanggal.
const DAFTAR: { no: string; customer: string; nilai: number; status: string; tone: StateLabelTone }[] = [
{ no: 'PO-2026-0142', customer: 'PT Pelanggan Contoh A', nilai: 150_000_000, status: 'Menunggu BAST/DO', tone: 'warning' },
{ no: 'PO-2026-0144', customer: 'PT Samudra Farma', nilai: 128_000_000, status: 'Menunggu BAST/DO', tone: 'warning' },
{ no: 'PO-2026-0146', customer: 'PT Mitra Energi Persada', nilai: 45_000_000, status: 'Dikembalikan', tone: 'warning' },
{ no: 'PO-2026-0139', customer: 'PT Cakra Media Digital', nilai: 38_000_000, status: 'Siap ditagih', tone: 'highlight' },
{ no: 'PO-2026-0131', customer: 'PT Andalan Finance', nilai: 210_000_000, status: 'Selesai', tone: 'success' },
];
export default function Example() {
return (
<div className="grid gap-8">
{/* Header detail: nomor + status di satu baris, meta, aksi di kanan, lalu tahap */}
<section className="grid gap-5">
<header className="flex flex-wrap items-start gap-x-6 gap-y-3">
<div className="grid min-w-0 flex-1 gap-1">
<div className="flex flex-wrap items-center gap-2">
<h3 className="type-heading-large text-default">PO-2026-0142</h3>
<StateLabel tone="warning">Menunggu BAST/DO</StateLabel>
</div>
<p className="type-callout-default text-muted">PT Pelanggan Contoh A · Lisensi + jasa · {formatMoney(150_000_000)} · Pemilik Anisa Nugraha</p>
</div>
<div className="flex items-center gap-2">
<Button>Cetak</Button>
<Button aria-label="Aksi lain" leadingVisual={DotsThree} className="px-1.5" />
<Button variant="primary">Terbitkan BAST</Button>
</div>
</header>
<StagePath
aria-label="Tahap PO-2026-0142"
current="bast"
actionNeeded
stages={[
{ key: 'diajukan', label: 'Diajukan', meta: '12 Sep 2026 · Budi Santoso' },
{ key: 'terbit', label: 'PO terbit', meta: '13 Sep 2026 · Rina Kartika' },
{ key: 'invoice', label: 'Invoice distributor', meta: '20 Sep 2026 · INV-DST-8812' },
{ key: 'bast', label: 'BAST/DO', meta: 'Menunggu Anda · hari ini' },
{ key: 'tagih', label: 'Ditagih', meta: `Termin 2 · ${formatMoney(60_000_000)}` },
]}
/>
</section>
{/* Daftar: label status yang sama, ukuran Small */}
<section className="overflow-x-auto rounded-2xl border-[0.5px] border-default bg-default">
<table className="w-full border-collapse text-left">
<thead>
<tr className="type-footnote-medium text-muted">
<th className="px-4 py-2 font-[inherit]">No. PO</th>
<th className="px-4 py-2 font-[inherit]">Customer</th>
<th className="px-4 py-2 text-right font-[inherit]">Nilai (Rp)</th>
<th className="px-4 py-2 font-[inherit]">Status</th>
</tr>
</thead>
<tbody className="type-body-default">
{DAFTAR.map(po => (
<tr key={po.no} className="border-t-[0.5px] border-muted">
<td className="px-4 py-2.5 whitespace-nowrap text-accent-fg">{po.no}</td>
<td className="px-4 py-2.5 text-default">{po.customer}</td>
<td className="px-4 py-2.5 text-right whitespace-nowrap tabular-nums text-default">{formatNumber(po.nilai)}</td>
<td className="px-4 py-2.5 whitespace-nowrap">
<StateLabel tone={po.tone} size="sm">
{po.status}
</StateLabel>
</td>
</tr>
))}
</tbody>
</table>
</section>
</div>
);
}Tujuh tone, satu arti
Tone mengikuti makna status, bukan modulnya. PO, deal, project, dan invoice memakai aturan yang sama.
| Tone | Makna | Contoh status |
|---|---|---|
| neutral | Belum mulai | Draft, Open |
| info | Diproses / menunggu pihak lain | Diajukan ke Finance, Quotation terkirim |
| accent | Aktif berjalan | Working, Project berjalan |
| warning | Butuh tindakan internal | Menunggu BAST/DO, Dikembalikan, Pending review |
| highlight | Siap ke langkah berikutnya | Siap ditagih, To Bill |
| success | Selesai / menang | Completed, Lunas, Converted |
| danger | Batal / kalah / terlambat | Cancelled, Lost, Overdue |
Aturan
- 1Nama status dari sistemPakai nama status BizOps apa adanya (atau terjemahan tetapnya) agar sama dengan laporan dan e-mail notifikasi.
- 2Label yang sama di daftar dan di headerGaya Subtle di keduanya; Small di tabel, Medium di header. Pengguna mengenali status yang sama di dua tempat.
- 3Tahap proses dengan StagePathTampilkan di bawah kepala dokumen untuk dokumen yang berjalan berhari-hari. Tiap tahap diberi meta: tanggal · pelaku, atau siapa yang ditunggu.
- 4"Perlu tindakan Anda" hanya bila benaractionNeeded dan teks "Menunggu Anda" hanya bila sistem tahu pengguna yang login harus bertindak (workflow + role, atau Assignment). Di layar orang lain tahap yang sama tampil sebagai tahap berjalan biasa.
- 5Aksi yang memajukan tahap ada di headerAksi tahap berikutnya ("Terbitkan BAST") menjadi Primary di kanan atas kepala dokumen.