Mendesain komponen UI yang menjadi blok bangunan produk: buttons, forms, inputs, dan cards — plus state hover, active, dan disabled yang sering terlupakan. Ditutup dengan praktik membangun komponen library dasar untuk Kantongin

Setelah di episode 6 kita punya mesin komponen di Figma dan di episode 7 aset ikon, pada episode ini kita mengisi mesin itu dengan komponen inti yang dipakai di hampir semua layar: tombol, form, input, dan kartu. Ini adalah blok bangunan — kualitas produk sangat ditentukan seberapa matang blok-blok ini.
Mengapa komponen inti perlu didesain serius, bukan "nanti juga"? Karena 80% layar produk dibangun dari 20% komponen yang sama. Tombol yang state-nya tidak jelas, input yang tidak menunjukkan error, atau kartu yang tidak konsisten — semua itu mewarnai setiap layar. Investasi di komponen inti adalah investasi yang terbayar di seluruh produk.
Tombol adalah elemen interaktif paling penting. Empat pertimbangan saat mendesainnya:
default → bg primary-500, label putih
hover → bg primary-600 (sedikit lebih gelap) + elevation tipis
pressed → bg primary-700 (lebih gelap lagi) + inset shadow
disabled → bg ink-200, label ink-400 — TANPA drop shadow
loading → label diganti spinner, ukuran tidak berubahPerhatikan bahwa disabled tidak boleh memakai warna semantik dan tidak boleh terlihat seperti primary yang redup saja — ia harus jelas "tidak bisa diklik", bukan "warnanya keganti".
Form adalah tempat pengguna menyerahkan data — dan tempat paling sering terjadi frustrasi. Input yang baik punya tiga lapisan visual yang jelas:
default : border ink-300, label ink-700
focus : border primary-500 + ring 2px primary-100
filled : teks ink-900, tetap terlihat jelas
error : border danger-500 + ikon ! + pesan "Minimal Rp10.000"
disabled: bg ink-50, border ink-200, teks ink-400Fokus state adalah "janji" bahwa input sedang aktif — jangan pernah menghilangkannya (kita bahas lagi dari sisi aksesibilitas di episode 15).
Tip
Desain error state sebagai bagian dari desain — bukan yang terakhir dipikirkan. Buka aplikasi keuangan favorit kalian: hampir semua punya skenario error (saldo tidak cukup, nominal tidak valid). Error yang didesain dengan baik terasa membantu; error yang "diisi nanti" terasa ditinggalkan.
Kartu mengelompokkan informasi dalam satu unit visual. Variabel yang harus konsisten: padding, radius, border/shadow, dan hierarki teks di dalamnya. Kartu transaksi Kantongin:
Radius : 12 px
Padding : 16 px (dari spacing scale)
Elevasi : border 1px ink-200 (light) / bg ink-50 (dark)
Struktur : ikon kategori | teks utama + subteks | nominalDua pendekatan elevasi: bordered card (border tipis, tenang) dan elevated card (shadow, menonjol). Pilih satu sebagai standar utama — jangan campur perasaan di tiap layar. Elevated biasanya hanya untuk elemen yang memang perlu mengambang (dropdown, tooltip).
Selain empat inti, siapkan sekaligus: avatar, badge/chip (kategori, status), empty state, switch/checkbox, dan skeleton loading. Skeleton khususnya penting — ia menjaga persepsi performa saat data dimuat:
[Skeleton] bg ink-100 berdenyut halus → placeholder judul/isi
[Real] isi sebenarnya muncul setelah data siapStruktur skeleton harus mirip struktur aslinya — jangan sampai pengguna kaget saat data asli tampil dengan bentuk berbeda.
Semua komponen di atas disusun menjadi library: satu file Figma khusus yang berisi komponen, dipakai tim lewat publish library. Aturannya:
Kantongin-System), terpisah dari file desain (Kantongin-App).Warning
Komponen library yang tidak dirawat lebih buruk daripada tidak punya: tim mengira komponen sudah "dikelola", padahal state error lama tidak pernah diperbarui. Tetapkan ritual rutin (misal review 30 menit per minggu) untuk merawat library — episode 25 membahas loop iterasi ini.
Kantongin-System.Button, Input, Card, Badge — masing-masing dengan variants.EmptyState dan Skeleton sebagai komponen pendukung.Pada episode 8 ini, kalian telah mendesain komponen inti yang menjadi blok bangunan seluruh produk.
Inti yang harus dibawa pulang:
Di episode 9 selanjutnya kita akan membahas design systems & tokens — menyatukan warna, type, spacing, dan komponen menjadi satu bahasa desain yang terdokumentasi untuk Kantongin. Sampai jumpa di episode 9!