- Accordion
- Alert
- Alert Dialog
- Aspect Ratio
- Attachment
- Avatar
- Badge
- Breadcrumb
- Bubble
- Button
- Button Group
- Calendar
- Card
- Carousel
- Chart
- Checkbox
- Collapsible
- Combobox
- Command
- Context Menu
- Data Table
- Date Picker
- Dialog
- Drawer
- Dropdown Menu
- Empty
- Field
- Form
- Hover Card
- Input
- Input Group
- Input OTP
- Item
- Kbd
- Label
- Marker
- Menubar
- Message
- Message Scroller
- Native Select
- Navigation Menu
- Number Field
- Pagination
- Pin Input
- Popover
- Progress
- Questionnaire
- Radio Group
- Range Calendar
- Resizable
- Scroll Area
- Select
- Separator
- Sheet
- Sidebar
- Skeleton
- Slider
- Sonner
- Spinner
- Stepper
- Switch
- Table
- Tabs
- Tags Input
- Textarea
- Toast
- Toggle
- Toggle Group
- Tooltip
- Typography
Memasang dan mengonfigurasi Kliping di project Nuxt.
Buat project
Mulai dengan membuat project Nuxt baru:
npm create nuxt@latestKalau Anda menemui error ERROR: Cannot read properties of undefined (reading 'sys') (x4), pasang TypeScript sebagai dependency seperti disarankan pada issue ini.
npm install -D typescriptPasang Tailwind CSS
Ada dua cara memasang Tailwind CSS di Nuxt. Pilih salah satu.
npm install tailwindcss @tailwindcss/vite -DGanti seluruh isi app/assets/css/tailwind.css dengan baris berikut:
@import "tailwindcss";Perbarui nuxt.config.ts seperti ini:
import tailwindcss from '@tailwindcss/vite'
export default defineNuxtConfig({
// ...
css: ['~/assets/css/tailwind.css'],
vite: {
plugins: [
tailwindcss(),
],
},
})npm install tailwindcss @nuxtjs/tailwindcss@7.0.0-beta.1 -DGanti seluruh isi app/assets/css/tailwind.css dengan baris berikut:
@import "tailwindcss";export default defineNuxtConfig({
// ...
modules: ['@nuxtjs/tailwindcss'],
})Pasang module Nuxt
Kalau langkah ini dilewati, console Anda akan dipenuhi peringatan akibat fitur auto-import milik Nuxt.
Pasang paket berikut.
npx nuxi@latest module add shadcn-nuxtPasang @types/node terlebih dahulu.
npm install -D @types/nodeLalu tambahkan kode berikut ke modules/shadcn.ts.
import { readdirSync } from 'node:fs'
import { join } from 'node:path'
import {
addComponentExports,
addComponentsDir,
createResolver,
defineNuxtModule,
} from 'nuxt/kit'
export interface ShadcnVueOptions {
/**
* Prefix for all the imported component
* @default "Ui"
*/
prefix: string
/**
* Directory that the component lives in.
* @default "@/components/ui"
*/
componentDir: string
}
export default defineNuxtModule<ShadcnVueOptions>({
defaults: {
prefix: 'Ui',
componentDir: '@/components/ui',
},
meta: {
name: 'ShadcnVue',
configKey: 'shadcn',
version: '0.0.1',
compatibility: {
nuxt: '>=3.17.0',
},
},
async setup({ componentDir, prefix }, nuxt) {
const COMPONENT_DIR_PATH = componentDir!
const ROOT_DIR_PATH = nuxt.options.rootDir
const { resolve, resolvePath } = createResolver(ROOT_DIR_PATH)
const componentsPath = await resolvePath(COMPONENT_DIR_PATH)
addComponentsDir({
path: componentsPath,
extensions: [],
ignore: ['**/*'],
}, {
prepend: true,
})
try {
await Promise.all(readdirSync(componentsPath).map(async (dir) => {
try {
const filePath = await resolvePath(join(COMPONENT_DIR_PATH, dir, 'index'), { extensions: ['.ts', '.js'] })
addComponentExports({
prefix,
filePath: resolve(filePath),
priority: 1,
})
}
catch (err) {
if (err instanceof Error)
console.warn('Module error: ', err.message)
}
}))
}
catch (err) {
if (err instanceof Error)
console.warn(err.message)
}
},
})Atur nuxt.config.ts
export default defineNuxtConfig({
// ...
modules: ['shadcn-nuxt'],
shadcn: {
/**
* Prefix for all the imported component.
* @default "Ui"
*/
prefix: '',
/**
* Directory that the component lives in.
* Will respect the Nuxt aliases.
* @link https://nuxt.com/docs/api/nuxt-config#alias
* @default "@/components/ui"
*/
componentDir: '@/components/ui'
}
})Tambahkan plugin ssrWidth (opsional)
Sebagian komponen perlu nilai ssrWidth yang diatur lewat VueUse, agar tidak terjadi error hydration di perangkat mobile.
Tambahkan plugin berikut ke aplikasi Nuxt Anda di app/plugins/ssr-width.ts.
Penjelasan lebih lanjut ada di useSSRWidth.
import { provideSSRWidth } from '@vueuse/core'
export default defineNuxtPlugin((nuxtApp) => {
provideSSRWidth(1024, nuxtApp.vueApp)
})Jalankan Nuxt Prepare
Kalau ini project baru, jalankan perintah berikut supaya Nuxt menghasilkan folder .nuxt yang dibutuhkan:
npx nuxi prepareJalankan CLI
Jalankan perintah init untuk menyiapkan project Anda:
npx shadcn-vue@latest initAnda akan ditanya beberapa hal untuk mengisi components.json.
Which color would you like to use as base color? › NeutralTambahkan komponen
Sekarang Anda bisa mulai menambahkan komponen ke project.
npx shadcn-vue@latest add buttonPerintah di atas menambahkan komponen Button ke project Anda. Fitur auto-import Nuxt yang akan mengurus import-nya, jadi Anda bisa langsung memakainya:
<template>
<div>
<Button>Klik saya</Button>
</div>
</template>2
3
4
5