W4C UI
Design system Waste4Change: token warna, komponen Vue, dan pedoman pemakaian untuk project Nuxt. Dengan ini, project baru bisa langsung fokus ke fitur tanpa membuat ulang tombol, input, dan modal.
Instalasi
Untuk project Nuxt 4 baru.
- 1
Hubungkan ke registry
Package ini private dan tinggal di GitLab Package Registry, bukan di npmjs. Baris pertama masuk ke repo project. Tokennya disimpan di ~/.npmrc, di luar repo, supaya tidak ikut ter-commit; buat di GitLab lewat Preferences > Access tokens dengan scope read_api saja.
.npmrc@waste4change:registry=https://gitlab.com/api/v4/projects/w4c-tech%2Fui/packages/npm/~/.npmrc//gitlab.com/api/v4/projects/w4c-tech%2Fui/packages/npm/:_authToken=TOKEN_KAMU - 2
Tambahkan package
Versi yang terpasang mengikuti tag rilis di repo design system.
bashbun add @waste4change/ui - 3
Extend di nuxt.config.ts
Layer ini sudah memasang Tailwind v4, ikon Iconify lewat W4cIcon (@nuxt/icon), dan font Nunito (@nuxt/fonts). Tidak perlu dipasang lagi.
nuxt.config.tsexport default defineNuxtConfig({
extends: ['@waste4change/ui'],
css: ['~/assets/css/main.css'],
}) - 4
Import di CSS utama
Satu baris ini sudah memuat Tailwind dan token W4C, jadi token warna langsung bisa dipakai sebagai class (bg-primary, text-content-muted, dan seterusnya). Jangan tambahkan @import 'tailwindcss' lagi.
app/assets/css/main.css@import '@waste4change/ui'; - 5
Pakai komponennya
Semua komponen memakai prefix W4c dan langsung tersedia tanpa import.
vue<W4cButton icon="lucide:save" @click="save">
Simpan
</W4cButton>
Di CI project pemakai
Pipeline project pemakai juga butuh token sendiri. CI_JOB_TOKEN milik satu project tidak otomatis boleh membaca registry project lain, jadi cara paling sederhana adalah satu group access token Waste4Change dengan scope read_api, disimpan sebagai CI variable bertipe masked.
# Di before_script pipeline project pemakai.
# W4C_REGISTRY_TOKEN disimpan sebagai CI variable bertipe masked.
echo "//gitlab.com/api/v4/projects/w4c-tech%2Fui/packages/npm/:_authToken=${W4C_REGISTRY_TOKEN}" >> ~/.npmrc
bun install --frozen-lockfileDark mode
Token otomatis berganti saat elemen <html> punya class dark. Cara paling mudah memasang class itu adalah dengan @nuxtjs/color-mode:
// bun add -D @nuxtjs/color-mode
export default defineNuxtConfig({
extends: ['@waste4change/ui'],
modules: ['@nuxtjs/color-mode'],
colorMode: { classSuffix: '' },
})Konvensi
- Semua komponen memakai prefix
W4c. Boleh ditulis PascalCase (<W4cButton>) atau kebab-case (<w4c-button>). Pilih salah satu dan pakai konsisten dalam satu project. - Warna diatur lewat prop
color(primary, neutral, success, warning, danger). Hindari class warna langsung. classpada komponen hanya untuk tata letak: margin, lebar, posisi.- Untuk halaman sendiri, pakai token semantik seperti
bg-surface,text-content-muted, danborder-border, bukanbg-whiteatautext-gray-500. Dengan begitu dark mode ikut benar.
Untuk AI agent
Banyak MVP di W4C dibuat dengan bantuan AI, dan agent yang tidak tahu library ini akan mengarang komponennya sendiri. Tiga berkas dibuat untuk mencegah itu:
- /llms.txt — seluruh halaman dokumentasi sebagai satu berkas teks. Dibuat dari navigasi situs ini, jadi halaman baru langsung ikut terdaftar.
- /llms-full.txt — API lengkap setiap komponen dalam satu berkas: 51 komponen, 482 prop, 43 event, dan 107 slot, dengan tipe, nilai bawaan, dan keterangannya. Dibaca langsung dari sumber komponen oleh
bun run api, jadi tidak bisa ketinggalan dari kodenya. Satu kali fetch menggantikan membuka seluruh halaman komponen. AGENTS.mdikut terkirim bersama paketnya, dinode_modules/@waste4change/ui/AGENTS.md: aturan keras, daftar komponen, tabel “pakai ini, bukan itu”, dan kesalahan yang paling sering terjadi.
Arahkan agent ke ketiganya di awal pekerjaan — misalnya lewat CLAUDE.md atau AGENTS.md milik project itu sendiri.