# Circca HIG Design System (Divistant) > Design system untuk aplikasi bisnis Divistant (BizOps, IntegraCI). Gaya Apple HIG, React + Tailwind v4, teks Bahasa Indonesia. ## Aturan utama - Pakai komponen `@divistant/circca-react` dan kelas token Circca (bg-*, text-*, border-*, type-*); jangan warna/spasi mentah. - Ikon: `@phosphor-icons/react` (Server Component: `@phosphor-icons/react/ssr`). - Satu tombol Primary per layar. Status selalu berupa teks + tone StateLabel. - Tema lewat `data-theme` di : light, dark, light-contrast, dark-contrast, system. ## Pola - [Form dokumen](https://localhost:3000/pola/form-dokumen): Membuat dan mengajukan dokumen: letak aksi, bagian bernomor, ringkasan nilai, kelengkapan, dan mode baca setelah diajukan. - [Validasi & pesan error](https://localhost:3000/pola/validasi): Kapan memeriksa isian, cara menulis pesan error, dan ringkasan kesalahan di atas form. - [Status & tahap dokumen](https://localhost:3000/pola/status-dokumen): Status sebagai teks + tone, tahap proses dengan StagePath, dan penanda "perlu tindakan Anda". - [Perubahan belum disimpan](https://localhost:3000/pola/perubahan-belum-disimpan): Mencegah pekerjaan hilang saat pengguna meninggalkan form atau berpindah perusahaan sebelum menyimpan. - [Angka, uang & tanggal](https://localhost:3000/pola/angka-uang-tanggal): Format Rupiah penuh dan ringkas, terbilang, persen, dan tanggal Bahasa Indonesia. ## Komponen siap di React - [Button](https://localhost:3000/md/button): Tombol untuk menjalankan aksi. Label berupa kata kerja: "Simpan", "Terbitkan BAST". - [StateLabel](https://localhost:3000/md/state-label): Label status dokumen/record. Tone menyatakan makna, bukan dekorasi — satu aturan untuk semua modul. - [FormField](https://localhost:3000/md/form-field): Label + kontrol + teks bantuan/error. Selalu dipakai untuk isian form agar label, tanda wajib, dan pesan error konsisten serta terhubung. - [Input](https://localhost:3000/md/input): Kolom isian satu baris. Bungkus dengan FormField agar selalu punya label. - [Textarea](https://localhost:3000/md/textarea): Isian teks panjang (catatan, alasan penolakan, syarat pembayaran). Tinggi minimal ±3 baris, tumbuh mengikuti isi lalu scroll. - [AmountInput](https://localhost:3000/md/amount-input): Isian nominal uang: mata uang di kiri, angka rata kanan dengan pemisah ribuan (id-ID), tanpa desimal untuk Rupiah. Saat fokus tampil angka mentah, saat blur diformat. - [Select](https://localhost:3000/md/select): Memilih satu nilai dari daftar pendek (≤ ±15 opsi). Lebih dari itu pakai Combobox (dengan pencarian). - [Checkbox](https://localhost:3000/md/checkbox): Pilihan independen (boleh lebih dari satu) atau persetujuan tunggal. Klik label ikut mengubah nilai. - [Radio](https://localhost:3000/md/radio): Satu pilihan dari 2–5 opsi yang semuanya perlu terlihat. Selalu dalam RadioGroup dengan satu opsi default bila memungkinkan. - [Switch](https://localhost:3000/md/switch): Mengaktifkan/menonaktifkan pengaturan yang LANGSUNG berlaku (tanpa tombol Simpan). Untuk pilihan di dalam form yang disimpan belakangan, pakai Checkbox. - [StagePath](https://localhost:3000/md/stage-path): Perjalanan dokumen atau deal per tahap, lengkap dengan tanggal · pelaku. Berbeda dengan Steps (wizard form): StagePath adalah status proses bisnis yang berjalan berhari-hari. - [Dialog](https://localhost:3000/md/dialog): Sheet modal untuk konfirmasi dan form singkat. Menghentikan pekerjaan sampai pengguna memutuskan — pakai seperlunya. - [Banner](https://localhost:3000/md/banner): Pesan di dalam halaman yang tetap terlihat sampai keadaannya berubah: dokumen dikembalikan, data belum lengkap, sinkronisasi gagal. - [Badge](https://localhost:3000/md/badge): Angka kecil penanda jumlah di ikon, item menu, atau tab: persetujuan menunggu, invoice jatuh tempo, notifikasi belum dibaca. - [Avatar](https://localhost:3000/md/avatar): Inisial atau foto orang dan perusahaan. AvatarGroup menumpuk beberapa avatar dan meringkas sisanya menjadi "+n". - [ProgressBar](https://localhost:3000/md/progress-bar): Bar kapsul tipis untuk progres atau kapasitas yang terukur: termin terbayar, jam proyek terpakai, kuota lisensi. - [Skeleton](https://localhost:3000/md/skeleton): Placeholder berdenyut yang meniru tata letak isi selagi data dimuat, agar layar tidak melompat saat data tiba. - [Tooltip](https://localhost:3000/md/tooltip): Teks singkat yang muncul saat kontrol di-hover atau difokus untuk menjelaskan fungsinya. Tanpa caret, sesuai HIG. - [IconButton](https://localhost:3000/md/icon-button): Tombol bulat berisi ikon saja untuk toolbar dan baris tabel. Label aksesibel wajib dan otomatis tampil sebagai tooltip. - [Toast](https://localhost:3000/md/toast): HUD gelap singkat di bawah tengah layar untuk konfirmasi setelah aksi ("PO-2026-0142 disimpan"), dengan aksi Urungkan opsional. Hilang sendiri tanpa menghentikan pekerjaan. - [Alert](https://localhost:3000/md/alert): Peringatan sistem ringkas ala macOS/iOS di tengah layar: judul, pesan, dan satu–dua tombol. Untuk keputusan cepat yang tidak bisa ditunda — hapus, sesi berakhir, koneksi terputus. - [EmptyState](https://localhost:3000/md/empty-state): Isi pengganti saat area data kosong: belum ada data, tidak ada hasil pencarian, atau tidak punya izin — selalu dengan penjelasan dan langkah berikutnya. - [Popover](https://localhost:3000/md/popover): Panel melayang non-modal untuk detail ringkas atau filter tanpa meninggalkan layar: filter daftar PO, detail singkat customer, ringkasan termin. - [Breadcrumbs](https://localhost:3000/md/breadcrumbs): Jejak lokasi halaman dalam hierarki modul: "Order & pengadaan › PO Customer". Biasanya dipakai di dalam PageHeader, di atas judul. - [PageHeader](https://localhost:3000/md/page-header): Kepala halaman/dokumen BizOps: jejak, judul + label status di satu baris, baris meta, dan aksi di kanan atas. - [Card](https://localhost:3000/md/card): Wadah isi berjudul di halaman detail dan dashboard: judul + keterangan, aksi di kanan header, isi bebas, dan footer. Contoh: kartu Item, Termin pembayaran, dan "Perlu tindakan Anda" di detail PO. - [DescriptionList](https://localhost:3000/md/description-list): Pasangan label–nilai untuk detail dokumen: customer, nomor PO, cara penagihan, project, pemilik. Gaya inset grouped — kartu putih radius 12, baris dipisah garis tipis — dirender semantik sebagai