Ingin platform Terintegrasi, All-in-One untuk Tim Pengembang Anda agar bekerja bersama dengan produktivitas maksimum?
Apidog memenuhi semua kebutuhan Anda, dan menggantikan Postman dengan harga yang jauh lebih terjangkau!
Untuk pengembang frontend, permintaan akan antarmuka pengguna yang estetis, berperforma tinggi, dan sangat dapat disesuaikan tidak pernah sebesar ini. Pengembang terus-menerus mencari alat yang dapat mempercepat alur kerja mereka tanpa mengorbankan kualitas atau kontrol kreatif. Meskipun pustaka komponen UI monolitik telah melayani komunitas dengan baik selama bertahun-tahun, paradigma baru sedang muncul—yang memprioritaskan kepemilikan pengembang, modularitas, dan integrasi tanpa hambatan dengan kerangka kerja modern. Di dalam paradigma baru inilah HeroUI mengukir ceruknya.
HeroUI bukan hanya pustaka komponen lain; ini adalah koleksi komponen UI yang dapat digunakan kembali yang dibuat dengan cermat, dirancang untuk diintegrasikan langsung ke dalam proyek Anda. Ini menganut filosofi yang memberikan pengembang kontrol penuh atas basis kode mereka. Alih-alih mengimpor komponen buram dari modul node, Anda menggunakan HeroUI Command Line Interface (CLI) untuk menambahkan kode sumber sebenarnya dari komponen yang Anda butuhkan ke dalam proyek Anda. Evolusi "salin-dan-tempel" ini berarti setiap tombol, kartu, dan kotak dialog menjadi bagian dari aplikasi Anda sendiri, siap untuk diubah, ditata ulang, dan disesuaikan dengan kebutuhan spesifik Anda.
Dibangun di atas fondasi raksasa seperti React, Tailwind CSS, dan Next.js, HeroUI menyediakan blok bangunan untuk menciptakan antarmuka pengguna yang indah, dapat diakses, dan responsif. Ini dirancang untuk pengembang modern yang menghargai kecepatan dan spesifisitas, menawarkan titik awal yang kuat yang tidak mengunci Anda ke dalam sistem desain yang kaku. Artikel ini akan berfungsi sebagai panduan komprehensif untuk memahami prinsip-prinsip inti HeroUI, menginstalnya di proyek Anda, menyesuaikan tampilan dan nuansanya, dan memanfaatkan CLI-nya yang kuat untuk membangun aplikasi web generasi berikutnya.
Bagian 1: Mendekonstruksi HeroUI - Filosofi dan Fitur Inti
Sebelum masuk ke detail teknis instalasi dan penggunaan, penting untuk memahami "mengapa" di balik HeroUI. Masalah apa yang dipecahkannya, dan apa yang menjadikannya pilihan menarik di tengah banyaknya alat UI?
Filosofi: Kepemilikan dan Kustomisasi Tanpa Kompromi
Perbedaan mendasar antara HeroUI dan pustaka UI tradisional seperti Material-UI atau Ant Design terletak pada konsep kepemilikan. Saat Anda menginstal pustaka tradisional, Anda menambahkan dependensi ke package.json
Anda. Aplikasi Anda kemudian mengimpor komponen yang sudah dikompilasi dari paket ini. Meskipun ini nyaman, ada beberapa kekurangan:
- Kustomisasi Terbatas: Penggantian gaya bisa rumit, seringkali mengharuskan Anda melawan gaya bawaan pustaka dengan tag
!important
atau konfigurasi penyedia tema yang rumit. - Komponen Kotak Hitam: Logika internal komponen disembunyikan di folder
node_modules
. Debugging perilaku yang tidak terduga atau memahami cara kerja internal menjadi jauh lebih sulit. - Pembengkakan Ukuran Bundle: Anda sering mengimpor seluruh pustaka, atau setidaknya sebagian besar darinya, meskipun Anda hanya menggunakan beberapa komponen, berpotensi meningkatkan ukuran bundle akhir aplikasi Anda.
- Neraka Dependensi: Anda terikat pada siklus pembaruan pustaka dan dependensinya. Perubahan yang merusak dalam pustaka dapat memaksa refaktor besar dalam aplikasi Anda.
HeroUI menghindari masalah ini sepenuhnya. Dengan meminta CLI menempatkan kode sumber komponen langsung ke direktori proyek Anda (misalnya, /components/ui
), ini memberdayakan Anda dalam beberapa cara utama:
- Anda Memiliki Kodenya: Komponen sekarang milik Anda. Anda dapat mengubah strukturnya, gayanya, logikanya—apa pun. Tidak ada batasan buatan. Jika Anda membutuhkan tombol dengan animasi unik atau struktur internal yang sedikit berbeda, Anda cukup mengedit file.
- Transparansi Total: Anda dapat membaca kode untuk setiap komponen yang Anda gunakan. Ini sangat berharga untuk belajar, debugging, dan mendapatkan pemahaman yang lebih dalam tentang cara membangun elemen UI yang dapat diakses dan tangguh.
- Nol Kode Tidak Terpakai: Bundle aplikasi Anda hanya akan menyertakan kode untuk komponen yang secara eksplisit Anda tambahkan. Tidak lebih.
- Terpisah dan Tahan Masa Depan: Karena komponen adalah bagian dari basis kode Anda, Anda tidak terikat pada versi HeroUI dengan cara yang sama. Anda dapat memperbarui komponen sesuai jadwal Anda sendiri atau memilih untuk tidak memperbaruinya sama sekali.
Filosofi ini ditujukan untuk pengembang dan tim yang ingin membangun sistem desain unik untuk produk mereka tanpa memulai dari awal. Ini menyediakan primitif dasar, tanpa gaya (atau dengan sedikit gaya), dan Anda menyediakan identitas merek.
Fitur Utama Sekilas
HeroUI lebih dari sekadar metode instalasinya. Ini dilengkapi dengan fitur-fitur yang dirancang untuk alur kerja pengembangan modern.
- Koleksi Komponen Kaya: HeroUI menawarkan serangkaian komprehensif komponen UI yang paling umum dibutuhkan, termasuk tombol, formulir, dialog, dropdown, tabel data, dan lainnya. Setiap komponen dirancang dengan cermat dengan mempertimbangkan aksesibilitas (atribut ARIA) dan pengalaman pengguna.
- Didukung oleh Tailwind CSS: Inti dari kemampuan gaya HeroUI adalah Tailwind CSS, kerangka kerja CSS yang mengutamakan utilitas. Ini berarti kustomisasi tidak dilakukan melalui penimpaan kelas CSS tetapi dengan menyusun kelas utilitas. Pendekatan ini sangat cepat, intuitif, dan membantu menjaga bahasa desain yang konsisten. HeroUI menggunakan kemampuan theming Tailwind secara penuh, memungkinkan perubahan di seluruh proyek hanya dengan beberapa baris konfigurasi.
- Theming dan Kustomisasi Mendalam: Seluruh tampilan dan nuansa komponen dapat dikontrol melalui konfigurasi tema pusat. Ini mencakup warna, font, radius border, spasi, dan lainnya. Semua ini didukung oleh variabel CSS, yang membuat theming dinamis, seperti mengimplementasikan mode gelap, sangat mudah.
- Command Line Interface (CLI) yang Kuat:
heroui-cli
adalah alat utama Anda untuk berinteraksi dengan ekosistem HeroUI. Ini menangani inisialisasi proyek, menambahkan komponen baru, dan memastikan proyek Anda dikonfigurasi dengan benar, menghemat jam pengaturan manual. - Integrasi Berbasis Kerangka Kerja: HeroUI dirancang untuk berintegrasi tanpa hambatan dengan kerangka kerja modern. Dokumentasi menyediakan dukungan kelas satu dan panduan untuk Next.js, menunjukkan komitmen untuk bekerja dengan baik dalam alat paling populer di ekosistem React. Ini dibangun dengan React dan dapat diadaptasi ke kerangka kerja berbasis React lainnya seperti Vite atau Create React App.
- Mode Gelap Secara Bawaan: Mode gelap bukanlah sesuatu yang ditambahkan belakangan. Seluruh sistem dibangun dengan mempertimbangkan mode gelap, memanfaatkan variabel CSS dan varian
dark:
Tailwind untuk membuat implementasi menjadi sepele. - Dukungan TypeScript dan RSC: HeroUI ditulis dalam TypeScript, menyediakan keamanan tipe yang sangat baik secara bawaan. Ini juga kompatibel dengan React Server Components (RSC), menyelaraskannya dengan kemajuan terbaru dalam ekosistem Next.js dan React.
Untuk Siapa HeroUI?
HeroUI adalah pilihan ideal untuk jenis pengembang dan proyek tertentu:
- Pengembang yang mendambakan kontrol: Jika Anda pernah merasa frustrasi dengan kekakuan pustaka komponen, HeroUI akan terasa seperti udara segar.
- Proyek dengan identitas merek yang kuat dan unik: Ini menyediakan fondasi sempurna untuk membangun sistem desain kustom yang tidak terlihat seperti setiap situs web lainnya.
- Startup dan tim produk: Tim yang perlu bergerak cepat tetapi juga ingin membangun arsitektur front-end yang terukur dan dapat dipelihara akan menemukan HeroUI sebagai akselerator yang kuat.
- Pembelajaran dan pengembangan: Karena Anda mendapatkan kode sumbernya, ini adalah alat yang sangat baik untuk mempelajari cara membangun komponen React yang berkualitas tinggi dan dapat diakses.
Ini mungkin kurang cocok untuk pemula mutlak yang lebih memilih solusi "siap pakai" yang sudah termasuk semua, di mana konfigurasi minimal diperlukan. Kekuatan HeroUI terletak pada kemampuannya untuk dikonfigurasi, yang membutuhkan pemahaman dasar tentang Tailwind CSS dan lingkungan pengembangan front-end modern.
Bagian 2: Memulai - Panduan Lengkap Instalasi dan Pengaturan
Sekarang setelah kita memahami filosofinya, mari kita mulai praktik. Bagian ini menyediakan panduan langkah demi langkah yang teliti untuk mengintegrasikan HeroUI ke dalam proyek baru atau yang sudah ada. Metode yang direkomendasikan dan paling efisien adalah menggunakan CLI resmi HeroUI.
Prasyarat
Sebelum kita mulai, pastikan lingkungan pengembangan Anda memenuhi persyaratan berikut:
- Node.js: Anda harus memiliki versi Node.js terbaru terinstal (biasanya versi 18 atau yang lebih baru). Anda dapat memeriksa versi Anda dengan menjalankan
node -v
di terminal Anda. - Pengelola Paket: Anda akan memerlukan pengelola paket seperti
npm
,yarn
, ataupnpm
. Panduan ini akan menggunakannpx
, yang disertakan dengannpm
. - Proyek Kerangka Kerja React: HeroUI dirancang untuk ditambahkan ke proyek yang dibangun dengan kerangka kerja React. Panduan utama berfokus pada Next.js, tetapi dapat diadaptasi untuk yang lain seperti Vite atau Create React App. Untuk pengalaman terbaik, kami akan mengasumsikan Anda memulai dengan proyek Next.js yang baru. Anda dapat membuatnya dengan perintah: Bash
npx create-next-app@latest my-heroui-app
Selama pengaturan Next.js, disarankan untuk memilih TypeScript dan Tailwind CSS, karena ini adalah dasar bagi ekosistem HeroUI.
Perintah init HeroUI CLI: Titik Awal Anda
Perintah init
adalah titik masuk ajaib ke dunia HeroUI. Ini secara cerdas memeriksa proyek Anda, menanyakan serangkaian pertanyaan, dan kemudian secara otomatis mengonfigurasi semua yang Anda butuhkan.
Navigasikan ke direktori proyek Anda:Bash
cd my-heroui-app
Sekarang, jalankan perintah inisialisasi:Bash
npx heroui-cli@latest init
CLI sekarang akan memandu Anda melalui proses pengaturan. Mari kita uraikan setiap pertanyaan yang diajukan dan apa arti pilihan Anda.
1. "Gaya mana yang ingin Anda gunakan?"
- Pilihan:
Default
,New York
- Penjelasan: Pilihan ini mendefinisikan estetika dasar komponen.
Default
adalah gaya yang lebih modern, minimalis, sementaraNew York
menawarkan tampilan yang sedikit lebih tradisional, korporat. Pilihan ini terutama memengaruhi gaya bawaan, seperti radius border dan spasi, yang akan diatur oleh CLI. Anda tidak terkunci pada pilihan ini; ini hanyalah titik awal yang dapat sepenuhnya disesuaikan nanti. Untuk permulaan yang bersih,Default
seringkali merupakan pilihan yang bagus.
2. "Warna mana yang ingin Anda gunakan sebagai warna dasar?"
- Pilihan:
Slate
,Gray
,Zinc
,Neutral
,Stone
- Penjelasan: Seluruh sistem warna HeroUI didasarkan pada nuansa warna dasar netral. Pilihan ini menentukan palet utama untuk latar belakang, teks, border, dan status komponen. Misalnya, memilih
Slate
akan memberikan UI Anda nada abu-abu kebiruan yang dingin, sementaraStone
akan memberikan nuansa yang lebih hangat, lebih alami. CLI akan secara otomatis menghasilkan spektrum penuh variabel CSS berdasarkan pilihan Anda.
3. "Di mana file CSS global Anda?"
- Bawaan:
app/globals.css
(untuk Next.js App Router) ataustyles/globals.css
(untuk Pages Router). - Penjelasan: CLI perlu mengetahui di mana menyuntikkan variabel CSS inti dan direktif Tailwind. Biasanya cukup pintar untuk mendeteksi jalur yang benar dalam proyek Next.js standar. Anda hanya boleh mengubah ini jika Anda memiliki struktur proyek yang tidak standar.
4. "Apakah Anda ingin menggunakan variabel CSS untuk warna?"
- Bawaan:
Ya
- Penjelasan: Anda hampir selalu harus menjawab ya. Menggunakan variabel CSS adalah landasan sistem theming HeroUI. Ini memungkinkan Anda mendefinisikan palet warna Anda di satu tempat (
globals.css
) dan secara otomatis menerapkannya di mana saja. Lebih penting lagi, inilah yang memungkinkan fitur dinamis seperti mode gelap.
5. "Di mana file tailwind.config.js
Anda?"
- Bawaan:
tailwind.config.js
- Penjelasan: CLI perlu memodifikasi konfigurasi Tailwind Anda untuk mengintegrasikan preset tema dan plugin HeroUI. Sekali lagi, ini seharusnya mendeteksinya secara otomatis.
6. "Konfigurasi alias impor untuk komponen:"
- Bawaan:
@/components
- Penjelasan: Alias jalur adalah praktik terbaik untuk pernyataan impor yang bersih. Alih-alih menulis
import { Button } from '../../../components/ui/button'
, Anda dapat menulisimport { Button } from '@/components/ui/button'
. CLI perlu mengetahui alias apa yang ingin Anda gunakan untuk komponen agar dapat mengonfigurasinya ditsconfig.json
(ataujsconfig.json
) Anda. Bawaan@/components
adalah pilihan yang masuk akal.
7. "Konfigurasi alias impor untuk utilitas:"
- Bawaan:
@/lib/utils
- Penjelasan: HeroUI bergantung pada beberapa fungsi utilitas, terutama fungsi untuk menggabungkan kelas Tailwind secara kondisional (sering disebut
cn
). CLI akan membuat file utilitas ini untuk Anda dan perlu mengetahui di mana menempatkannya dan alias apa yang akan digunakan. Bawaan@/lib/utils
adalah standar.
8. "Apakah Anda menggunakan React Server Components?"
- Bawaan: Ini akan mendeteksi secara otomatis berdasarkan versi dan pengaturan Next.js Anda.
- Penjelasan: Ini sangat penting untuk aplikasi Next.js modern yang menggunakan App Router. Menjawab
Ya
memastikan bahwa komponen yang ditambahkan oleh CLI menyertakan direktif"use client"
jika diperlukan. Direktif ini menandai komponen yang memerlukan interaktivitas sisi klien (seperti menangani eventonClick
atau menggunakan hook sepertiuseState
), membuatnya kompatibel dengan React Server Components.
Setelah Anda menjawab semua pertanyaan, CLI akan melakukan keajaibannya. Ini akan:
- Menginstal dependensi yang diperlukan (
tailwindcss-animate
,class-variance-authority
,lucide-react
, dll.). - Membuat file
components.json
di root proyek Anda. - Memodifikasi
tailwind.config.js
Anda dengan pengaturan tema yang benar. - Mengisi
globals.css
Anda dengan gaya dasar dan semua variabel CSS untuk tema warna pilihan Anda. - Memperbarui
tsconfig.json
ataujsconfig.json
Anda dengan alias jalur yang Anda konfigurasi. - Membuat file
lib/utils.ts
dengan fungsi utilitascn
.
Proyek Anda sekarang sepenuhnya dikonfigurasi dan siap untuk HeroUI.
Anatomi Perubahan
Mari kita lihat lebih dekat file-file utama yang telah dimodifikasi atau dibuat oleh CLI.
components.json
File ini adalah manifes untuk HeroUI dalam proyek Anda. Ini menyimpan pilihan yang Anda buat selama proses init
dan memberi tahu CLI bagaimana proyek Anda dikonfigurasi.JSON
{
"style": "default",
"rsc": true,
"tsx": true,
"tailwind": {
"config": "tailwind.config.js",
"css": "app/globals.css",
"baseColor": "slate",
"cssVariables": true
},
"aliases": {
"utils": "@/lib/utils",
"components": "@/components"
}
}
Anda jarang perlu mengedit file ini secara manual, tetapi berguna untuk memahami tujuannya. Ini adalah otak di balik operasi CLI.
tailwind.config.js
Konfigurasi Tailwind Anda akan diperluas menjadi seperti ini. Penambahan utama adalah ekstensi tema dan plugin tailwindcss-animate
.JavaScript
/** @type {import('tailwindcss').Config} */
module.exports = {
darkMode: ["class"],
content: [
'./pages/**/*.{ts,tsx}',
'./components/**/*.{ts,tsx}',
'./app/**/*.{ts,tsx}',
'./src/**/*.{ts,tsx}',
],
theme: {
container: {
center: true,
padding: "2rem",
screens: {
"2xl": "1400px",
},
},
extend: {
colors: {
border: "hsl(var(--border))",
input: "hsl(var(--input))",
// ... and many more color definitions linked to CSS variables
primary: {
DEFAULT: "hsl(var(--primary))",
foreground: "hsl(var(--primary-foreground))",
},
// ...
},
borderRadius: {
lg: "var(--radius)",
md: "calc(var(--radius) - 2px)",
sm: "calc(var(--radius) - 4px)",
},
keyframes: {
// ... keyframes for animations
},
animation: {
// ... animation utilities
},
},
},
plugins: [require("tailwindcss-animate")],
}
Perhatikan bagaimana warna seperti primary
tidak didefinisikan dengan kode hex tetapi dengan hsl(var(--primary))
. Ini memberitahu Tailwind untuk menggunakan variabel CSS bernama --primary
, yang didefinisikan dalam CSS global Anda.
app/globals.css
File ini sekarang menjadi jantung tema sistem desain Anda. Ini akan berisi direktif dasar Tailwind dan blok besar variabel CSS.CSS
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
:root {
--background: 0 0% 100%;
--foreground: 222.2 84% 4.9%;
--card: 0 0% 100%;
/* ... many more variables for the light theme */
--radius: 0.5rem;
}
.dark {
--background: 222.2 84% 4.9%;
--foreground: 210 40% 98%;
--card: 222.2 84% 4.9%;
/* ... many more variables for the dark theme */
}
}
Di sini Anda dapat melihat kekuatan pengaturan ini. Semua warna tema terang Anda didefinisikan dalam lingkup :root
, dan semua warna tema gelap Anda didefinisikan di dalam lingkup kelas .dark
. Ketika kelas .dark
ditambahkan ke elemen <html>
, browser akan secara otomatis menggunakan variabel tema gelap.
Bagian 3: Menguasai Kustomisasi - Theming, Tata Letak, dan Mode Gelap
Dengan HeroUI yang sudah diinisialisasi, kesenangan sebenarnya dimulai: menjadikannya milik Anda sendiri. Arsitektur ini secara eksplisit dirancang untuk kustomisasi yang mendalam dan intuitif.
Seni Theming dengan Variabel CSS
Theming di HeroUI berbeda dari objek tema berbasis JavaScript yang kompleks yang mungkin Anda temukan di pustaka lain. Ini lebih sederhana, lebih kuat, dan memanfaatkan fitur CSS modern. Seluruh tema—warna, radius border, font—dikontrol oleh variabel CSS yang didefinisikan dalam file globals.css
Anda.
Mengubah Warna
Misalnya Anda ingin mengubah warna merek utama Anda. Anda tidak perlu masuk ke konfigurasi Tailwind. Anda cukup menemukan variabel CSS yang relevan di globals.css
dan mengubah nilainya.
Warna didefinisikan menggunakan nilai HSL (Hue, Saturation, Lightness), tetapi tanpa pembungkus hsl()
. Contoh:CSS
:root {
/* ... */
--primary: 221.2 83.2% 53.3%;
--primary-foreground: 210 40% 98%;
/* ... */
}
.dark {
/* ... */
--primary: 217.2 91.2% 59.8%;
--primary-foreground: 210 40% 98%;
/* ... */
}
Untuk mengubah warna utama Anda menjadi hijau cerah, Anda dapat menggunakan pemilih warna online untuk menemukan nilai HSL untuk warna pilihan Anda dan memperbarui variabel:CSS
/* In globals.css */
:root {
/* ... */
--primary: 142.1 76.2% 36.3%; /* Warna Utama Hijau Baru */
--primary-foreground: 355.7 100% 97.3%; /* Warna terang kontras untuk teks pada warna utama */
/* ... */
}
.dark {
/* ... */
--primary: 142.1 70.2% 46.3%; /* Hijau yang sedikit berbeda untuk mode gelap */
--primary-foreground: 355.7 100% 97.3%;
/* ... */
}
Setelah Anda menyimpan file ini, setiap komponen yang menggunakan warna "primary" (seperti <Button>
) akan langsung diperbarui di seluruh aplikasi Anda untuk mencerminkan warna hijau baru ini. Ini sangat kuat.
Mengubah Radius Border
Kecepatan sudut pada komponen seperti kartu dan input dikontrol oleh satu variabel CSS: --radius
.CSS
/* In globals.css */
:root {
/* ... */
--radius: 0.5rem; /* Nilai bawaan */
}
Jika Anda lebih suka tampilan yang lebih tajam, lebih persegi, Anda dapat mengurangi nilai ini:CSS
:root {
--radius: 0.25rem; /* Kurang membulat */
}
Atau, untuk estetika yang sangat lembut, membulat, Anda dapat meningkatkannya:CSS
:root {
--radius: 1.5rem; /* Sangat membulat */
}
Perubahan satu baris ini akan menyebar ke semua komponen Anda, memastikan radius border yang konsisten di seluruh UI Anda.
Menambahkan Warna Baru
Anda tidak terbatas pada warna yang disediakan oleh perintah init. Anda dapat dengan mudah menambahkan warna semantik Anda sendiri. Misalnya, mari tambahkan warna merek "special".
Definisikan variabel CSS di globals.css
:CSS
/* Di globals.css */
:root {
/* ... */
--special: 320 86% 59%;
--special-foreground: 330 100% 98%;
}
.dark {
/* ... */
--special: 320 80% 69%;
--special-foreground: 330 100% 98%;
}
Ekspos ke Tailwind di tailwind.config.js
:JavaScript
// Di tailwind.config.js
// ...
extend: {
colors: {
// ...
special: {
DEFAULT: "hsl(var(--special))",
foreground: "hsl(var(--special-foreground))",
},
},
},
// ...
Sekarang Anda dapat menggunakan warna-warna ini di komponen Anda dengan kelas utilitas Tailwind, seperti bg-special
dan text-special-foreground
.
Membangun Tata Letak Responsif
Komponen HeroUI dibangun dengan Tailwind CSS, yang berarti secara inheren responsif. Anda dapat menggunakan prefiks responsif Tailwind (sm:
, md:
, lg:
, xl:
) pada kelas utilitas apa pun untuk mengubah gaya komponen pada ukuran layar yang berbeda.
Mari bayangkan membangun tata letak halaman sederhana dengan sidebar yang terlihat di desktop tetapi dilipat di seluler. Meskipun HeroUI menyediakan komponen tingkat rendah (Card
, Button
), Anda bertanggung jawab untuk menyusunnya menjadi tata letak yang lebih besar.
Berikut adalah contoh bagaimana Anda dapat menyusun ini dalam komponen halaman Next.js:TypeScript
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { Button } from "@/components/ui/button";
export default function DashboardPage() {
return (
<div className="flex min-h-screen flex-col md:flex-row">
{/* Sidebar */}
<aside className="w-full border-b bg-muted p-4 md:w-64 md:border-b-0 md:border-r">
<h2 className="text-lg font-semibold">Navigation</h2>
<nav className="mt-4 flex flex-row space-x-2 md:flex-col md:space-x-0 md:space-y-2">
<Button variant="ghost" className="justify-start">Dashboard</Button>
<Button variant="ghost" className="justify-start">Settings</Button>
<Button variant="ghost" className="justify-start">Profile</Button>
</nav>
</aside>
{/* Main Content */}
<main className="flex-1 p-8">
<h1 className="text-4xl font-bold tracking-tight">Dashboard</h1>
<p className="mt-2 text-muted-foreground">
Welcome to your dashboard.
</p>
<div className="mt-8 grid gap-4 sm:grid-cols-2 lg:grid-cols-3">
<Card>
<CardHeader>
<CardTitle>Revenue</CardTitle>
</CardHeader>
<CardContent>
<p className="text-3xl font-bold">$45,231.89</p>
</CardContent>
</Card>
<Card>
<CardHeader>
<CardTitle>Subscriptions</CardTitle>
</CardHeader>
<CardContent>
<p className="text-3xl font-bold">+2350</p>
</CardContent>
</Card>
<Card>
<CardHeader>
<CardTitle>Active Users</CardTitle>
</CardHeader>
<CardContent>
<p className="text-3xl font-bold">+573</p>
</CardContent>
</Card>
</div>
</main>
</div>
);
}
```
Dalam contoh ini:
Kontainer utama adalah kontainer
flex
. Di seluler (flex-col
), sidebar berada di atas. Di layar menengah ke atas (md:flex-row
), beralih ke tata letak berdampingan.Aside memiliki lebar penuh di seluler (
w-full
) tetapi lebar tetap di desktop (md:w-64
).Area konten utama menggunakan tata letak
grid
yang menyesuaikan jumlah kolom berdasarkan ukuran layar (sm:grid-cols-2
,lg:grid-cols-3
).
Ini menunjukkan prinsip inti: HeroUI menyediakan primitif yang diberi gaya (
Card
, Button
), dan Anda menggunakan kekuatan penuh Tailwind CSS untuk menyusunnya menjadi tata letak yang responsif dan kompleks.
Mengimplementasikan Mode Gelap Tanpa Cacat
Salah satu fitur paling elegan HeroUI adalah dukungan bawaannya untuk mode gelap. Karena perintah init sudah menyiapkan variabel warna untuk tema terang (
:root
) dan gelap (.dark
), mengimplementasikannya sangat sederhana.
Pendekatan yang paling umum adalah menggunakan paket
next-themes
, yang menangani peralihan tema dan mempertahankan pilihan pengguna di penyimpanan lokal.
Instal
next-themes
:Bash
npm install next-themes
Buat Penyedia Tema:
Buat file baru, misalnya, di components/theme-provider.tsx.TypeScript
"use client";
import * as React from "react";
import { ThemeProvider as NextThemesProvider } from "next-themes";
import { type ThemeProviderProps } from "next-themes/dist/types";
export function ThemeProvider({ children, ...props }: ThemeProviderProps) {
return <NextThemesProvider {...props}>{children}</NextThemesProvider>;
}
Bungkus Tata Letak Root Anda dengan Penyedia:
Di tata letak root Next.js Anda (app/layout.tsx), impor dan gunakan ThemeProvider.TypeScript
import { ThemeProvider } from "@/components/theme-provider";
import type { Metadata } from "next";
import { Inter } from "next/font/google";
import "./globals.css";
const inter = Inter({ subsets: ["latin"] });
export const metadata: Metadata = {
title: "Create Next App",
description: "Generated by create next app",
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="en" suppressHydrationWarning>
<body className={inter.className}>
<ThemeProvider
attribute="class"
defaultTheme="system"
enableSystem
disableTransitionOnChange
>
{children}
</ThemeProvider>
</body>
</html>
);
}
Props kunci di sini adalah:
attribute="class"
: Memberitahunext-themes
untuk beralih tema dengan menambah/menghapus kelas ke elemen<html>
.defaultTheme="system"
: Secara otomatis mengatur tema berdasarkan preferensi sistem operasi pengguna.enableSystem
: Mengaktifkan opsi tema "system".
Buat Tombol Pengalih Tema:
Sekarang, Anda hanya perlu elemen UI untuk membiarkan pengguna beralih tema.TypeScript
"use client";
import * as React from "react";
import { Moon, Sun } from "lucide-react";
import { useTheme } from "next-themes";
import { Button } from "@/components/ui/button";
export function ModeToggle() {
const { setTheme, theme } = useTheme();
const toggleTheme = () => {
setTheme(theme === "light" ? "dark" : "light");
};
return (
<Button variant="outline" size="icon" onClick={toggleTheme}>
<Sun className="h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" />
<Moon className="absolute h-[1.2rem] w-[1.2rem] rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" />
<span className="sr-only">Toggle theme</span>
</Button>
);
}
```
Komponen ini menggunakan hook
useTheme
dari next-themes
untuk memeriksa tema saat ini dan mengatur tema baru. Ikon matahari dan bulan yang berputar memberikan transisi visual yang bagus. Cukup tempatkan komponen <ModeToggle />
ini di suatu tempat di UI Anda (seperti header), dan Anda memiliki pengalih mode gelap yang berfungsi penuh dan persisten.
Bagian 4: HeroUI CLI dan Alur Kerja Berbasis Komponennya
Bagian 4: HeroUI CLI dan Alur Kerja Berbasis Komponennya
heroui-cli
lebih dari sekadar penginstal. Ini adalah alat utama yang akan Anda gunakan untuk mengelola dan mengembangkan pustaka komponen Anda. Tujuan utamanya setelah inisialisasi adalah menambahkan komponen baru ke proyek Anda.
Menambahkan Komponen: Alur Kerja Inti
Menambahkan Komponen: Alur Kerja Inti
Misalnya Anda memerlukan modal dialog untuk aplikasi Anda. Alih-alih menulisnya dari awal, Anda dapat meminta CLI untuk menambahkan komponen
Dialog
HeroUI yang sudah dibuat sebelumnya dan dapat diakses.
Perintahnya sederhana:Bash
npx heroui-cli@latest add dialog
CLI akan melakukan tindakan berikut:
Ini membaca file
components.json
Anda untuk memahami struktur proyek Anda (alias jalur, penggunaan TypeScript, dll.).Ini mengambil kode sumber terbaru untuk komponen
Dialog
dan dependensinya (misalnya,Dialog
mungkin bergantung padaButton
).Ini menempatkan file komponen langsung ke direktori komponen Anda, misalnya:
components/ui/dialog.tsx
.Ini akan memberi tahu Anda tentang dependensi lain yang mungkin perlu Anda instal.
Sekarang, Anda memiliki file
dialog.tsx
di proyek Anda. Anda dapat memeriksa kodenya, belajar darinya, dan bahkan memodifikasinya. Jika Dialog
bawaan memiliki transisi yang tidak Anda sukai, Anda cukup membuka file dan mengubah kelas Tailwind yang mengontrol animasi. Tingkat kontrol ini adalah landasan pengalaman HeroUI.
Anda dapat menambahkan beberapa komponen sekaligus:Bash
npx heroui-cli@latest add card button input label
Perintah ini akan menambahkan keempat komponen dan dependensinya ke proyek Anda dalam satu kali jalan.
Memahami CLI API: components.json
Memahami CLI API: components.json
File
components.json
adalah kontrak antara proyek Anda dan HeroUI CLI. Mari kita tinjau kembali propertinya untuk memahami bagaimana properti tersebut memengaruhi perilaku CLI.
style
: Mengingatkan CLI gaya dasar mana (default
ataunew-york
) yang akan digunakan saat mengambil kode komponen, memastikan konsistensi gaya.rsc
: Menentukan apakah CLI harus menambahkan direktif"use client"
ke komponen. Ini sangat penting untuk kompatibilitas Next.js App Router.tsx
: Memberitahu CLI apakah akan mengambil versi TypeScript (.tsx
) atau JavaScript (.jsx
) dari file komponen.tailwind
:config
: Jalur ketailwind.config.js
Anda. CLI mungkin memerlukannya untuk pembaruan atau analisis di masa mendatang.css
: Jalur ke file CSS global Anda tempat variabel disimpan.baseColor
: Palet warna netral yang Anda pilih saatinit
.cssVariables
: Mengonfirmasi bahwa proyek Anda diatur untuk menggunakan variabel CSS untuk theming.aliases
:utils
: Mendefinisikan jalur impor untuk utilitas bersama seperti fungsicn
. Saat CLI menambahkan komponen yang memerlukan utilitas ini, ia akan menggunakan alias ini dalam pernyataan impor.components
: Mendefinisikan jalur impor untuk komponen UI itu sendiri. Ini memungkinkan komponen untuk mengimpor komponen lain (misalnya,Dialog
dapat mengimporButton
) menggunakan jalur yang bersih dan konsisten.
Dengan memahami konfigurasi ini, Anda bahkan dapat secara manual menyesuaikan perilaku CLI jika Anda memutuskan untuk merefaktor struktur proyek Anda, misalnya, dengan memindahkan direktori komponen Anda dari
@/components
ke @/ui
.
Kesimpulan: Bangun Cara Anda dengan HeroUI
Kesimpulan: Bangun Cara Anda dengan HeroUI
HeroUI mewakili pergeseran signifikan dalam cara pengembang dapat berpikir tentang dan menggunakan pustaka UI. Ini menjauh dari model 'satu ukuran untuk semua', 'kotak hitam' dan menuju pengalaman pengembang yang transparan, memberdayakan, dan sangat dapat disesuaikan. Dengan menyediakan komponen yang tidak diberi gaya, dapat diakses langsung sebagai kode sumber, ini mencapai keseimbangan sempurna antara pengembangan cepat dan desain khusus.
Kekuatan inti HeroUI jelas:
Kepemilikan Mutlak: Komponen adalah kode Anda. Anda dapat memodifikasi, memperluas, dan mengadaptasinya tanpa batasan.
Kustomisasi Mendalam: Sistem theming yang kuat berdasarkan variabel CSS membuatnya mudah untuk mengubah warna, spasi, dan radius di seluruh aplikasi Anda.
Arsitektur Modern: Dibangun dengan TypeScript, Tailwind CSS, dan dukungan kelas satu untuk Next.js dan React Server Components, ini adalah alat yang dirancang untuk masa depan pengembangan web.
Alat yang Ramah Pengembang: CLI yang cerdas mengotomatiskan proses pengaturan yang membosankan dan membuat penambahan komponen baru menjadi pengalaman yang mulus.
HeroUI adalah untuk para pembangun, para pengrajin, dan tim yang percaya bahwa antarmuka pengguna mereka adalah bagian inti dari identitas produk mereka. Ini tidak memberi Anda rumah yang sudah jadi; ini memberi Anda bahan berkualitas tertinggi dan bengkel yang terorganisir dengan sempurna untuk membangun rumah impian Anda. Untuk proyek Anda berikutnya yang menuntut front-end yang unik, rapi, dan dapat dipelihara, tidak perlu mencari lagi selain HeroUI. Ini mungkin saja alat yang memberdayakan Anda untuk membangun UI paling heroik Anda.
Ingin alat Pengujian API yang hebat yang menghasilkan Dokumentasi API yang indah?
Ingin platform Terintegrasi, All-in-One untuk Tim Pengembang Anda agar bekerja bersama dengan produktivitas maksimum?
Apidog memenuhi semua kebutuhan Anda, dan menggantikan Postman dengan harga yang jauh lebih terjangkau!
button