Overview
Komponen Button adalah elemen interaktif utama dalam A-raf Design System. Dapat merender sebagai<button> maupun <a> tag secara otomatis tergantung apakah prop href diberikan.
Installation
Usage
Variants
Button memiliki 7 hierarki visual yang mencerminkan tingkat penekanan aksi.Primary
Digunakan untuk aksi utama dan paling penting dalam sebuah halaman. Gunakan secara sparingly — maksimal satu per view.Kapan dipakai
- Konfirmasi form utama
- CTA halaman
- Aksi tidak dapat dibatalkan
Kapan tidak dipakai
- Lebih dari satu aksi penting dalam satu area
- Aksi sekunder atau tersier
Secondary
Dua varian:secondary dengan background biru muda dan secondary-gray dengan border abu-abu. Digunakan berdampingan dengan Primary untuk aksi alternatif.
Tertiary
Tombol tanpa border, terlihat seperti teks biasa namun tetap memiliki area interaktif. Cocok untuk aksi tersier yang tidak perlu menonjol.Link
Tampil sepenuhnya seperti hyperlink. Tersedia dalam dua warna:link-color dan link-gray.
Gunakan prop
href agar button ini sekaligus berfungsi sebagai anchor tag untuk navigasi.Destructive
Varian merah untuk aksi berbahaya atau permanen. Tersedia untuk semua hierarki.Sizes
Tersedia 5 ukuran untuk menyesuaikan konteks tampilan.| Size | Prop | Height | Use case |
|---|---|---|---|
| Small | sm | 36px | Tabel, toolbar padat |
| Medium | md | 40px | Default — form, card, dialog |
| Large | lg | 44px | Hero section, landing page |
| Extra Large | xl | 48px | Marketing page |
| 2X Large | 2xl | 56px | Full-width CTA, splash screen |
States
| State | Prop | Keterangan |
|---|---|---|
| Default | — | Tampilan normal |
| Hover | — | Bg menjadi #045CA0, dikelola otomatis |
| Focused | — | Ring 4px #CDE4F5 untuk keyboard navigation |
| Disabled | isDisabled | Opacity 0.4, cursor not-allowed |
| Loading | isLoading | Spinner menyesuaikan ukuran dan warna |
Hindari menyembunyikan tombol saat tidak tersedia. Gunakan
isDisabled agar pengguna tetap tahu aksi tersebut ada.Icons
Button mendukung icon di posisi kiri, kanan, maupun mode icon-only.As Link
Button merender sebagai<a> tag cukup dengan menambahkan prop href.
API Reference
Hierarki visual button. Nilai yang tersedia:
primary · secondary · secondary-gray · tertiary · tertiary-gray · link-color · link-gray · primary-destructive · secondary-destructive · tertiary-destructive · link-destructiveUkuran button. Nilai yang tersedia:
sm · md · lg · xl · 2xlMenonaktifkan interaksi dan mengubah tampilan menjadi state disabled.
Menampilkan spinner loading dan mencegah interaksi.
Jika
true, teks children tetap ditampilkan saat isLoading aktif.Komponen icon di sebelah kiri teks. Tanpa
children, button menjadi mode icon-only.Komponen icon di sebelah kanan teks.
Jika diberikan, button merender sebagai elemen
<a> (anchor tag).Class Tailwind tambahan untuk kustomisasi.
Accessibility
- Menggunakan elemen semantik
<button>secara default - State
disabledditangani dengan atributdisablednative - Fokus keyboard ditampilkan dengan ring outline
4px #CDE4F5 - Mode icon-only wajib menggunakan
aria-label - Saat dirender sebagai link (
href), anchor semantics berlaku penuh
Do’s & Don’ts
Do
- Gunakan Primary untuk satu aksi utama per halaman
- Pasangkan Primary + Secondary untuk aksi confirm/cancel
- Selalu tambahkan
aria-labelpada icon-only button - Gunakan variant Destructive untuk aksi yang tidak dapat dibatalkan
Don't
- Jangan gunakan lebih dari satu Primary button dalam satu section
- Jangan gunakan warna custom di luar sistem untuk button
- Jangan sembunyikan button yang disabled — gunakan prop
isDisabled - Jangan gunakan Link variant untuk aksi yang mengubah data