@byyuurin/ui
v0.5.3
Published
A collection of Vue.js components for my projects.
Readme
@byyuurin/ui
A collection of Vue.js components for my projects.
Preview
https://byyuurin-ui.netlify.app/
Installation
pnpm add @byyuurin/ui unocssyarn add @byyuurin/ui unocssnpm install @byyuurin/ui unocssNuxt
- Add the UI module in your
nuxt.config.ts:
export default defineNuxtConfig({
modules: [
'@byyuurin/ui',
],
ui: {
prefix: 'U',
colorMode: true,
theme: {
colors: ['primary', 'secondary', 'success', 'info', 'warning', 'error'],
transitions: true,
defaultVariants: {
color: 'primary',
size: 'md',
},
},
},
})- Add UnoCSS preset in your
uno.config.ts:
import { createUnoPreset } from '@byyuurin/ui/unocss'
import { defineConfig, presetWind4 } from 'unocss'
export default defineConfig({
outputToCssLayers: true,
presets: [
presetWind4(),
createUnoPreset({
colors: ['primary', 'secondary', 'success', 'info', 'warning', 'error'],
}),
],
})[!NOTE] This preset relies on CSS layers to ensure generated CSS variables can be properly overridden. Make sure
outputToCssLayersis enabled.
[!IMPORTANT] The preset colors configuration must be the same as your nuxt configuration
Vue
- Create
ui.config.tsfile for unified management of UI settings:
// @unocss-include
import { setup } from '@byyuurin/ui/setup'
export default setup({
prefix: 'U',
autoImport: {
// ... unplugin-auto-import options
},
components: {
// ... unplugin-vue-components options
},
colorMode: true,
theme: {
colors: ['primary', 'secondary', 'success', 'info', 'warning', 'error'],
transitions: true,
defaultVariants: {
color: 'primary',
size: 'md',
},
},
ui: {
colors: {
primary: 'orange',
secondary: 'teal',
success: 'green',
info: 'blue',
warning: 'yellow',
error: 'red',
neutral: 'stone',
},
icons: {
close: 'i-lucide-x',
loading: 'i-lucide-loader-circle',
check: 'i-lucide-check',
chevronUp: 'i-lucide-chevron-up',
chevronDown: 'i-lucide-chevron-down',
chevronLeft: 'i-lucide-chevron-left',
chevronRight: 'i-lucide-chevron-right',
chevronDoubleLeft: 'i-lucide-chevrons-left',
chevronDoubleRight: 'i-lucide-chevrons-right',
ellipsis: 'i-lucide-ellipsis',
folder: 'i-lucide-folder',
folderOpen: 'i-lucide-folder-open',
plus: 'i-lucide-plus',
minus: 'i-lucide-minus',
external: 'i-lucide-arrow-up-right',
},
},
})[!IMPORTANT] Add
// @unocss-includeto add ui.config.ts to unocss scan files
[!NOTE] Internally relies on custom alias to resolve the theme types. If you're using TypeScript, you should add an alias to your tsconfig to enable auto-completion in your ui.config.ts.
// tsconfig.node.json
{
"compilerOptions": {
"paths": {
"#build/*": ["./node_modules/.nuxt/*"]
}
}
}- Add the UI Vite plugin in your
vite.config.ts:
import ui from '@byyuurin/ui/vite' // <---
import vue from '@vitejs/plugin-vue'
import unocss from 'unocss/vite'
import { defineConfig } from 'vite'
import uiConfig from './ui.config' // <---
export default defineConfig({
plugins: [
unocss(),
vue(),
ui(uiConfig.vite), // <---
],
})- Add UnoCSS preset in your
uno.config.ts:
import { createUnoPreset } from '@byyuurin/ui/unocss' // <---
import { defineConfig, presetWebFonts, presetWind4 } from 'unocss'
import uiConfig from './ui.config' // <---
export default defineConfig({
outputToCssLayers: true, // <--
presets: [
presetWind4(),
createUnoPreset(uiConfig.uno), // <---
presetWebFonts({
fonts: {
sans: { provider: 'google', name: 'Public Sans', weights: [400, 500, 600, 700] },
},
}),
],
})[!NOTE] This preset relies on CSS layers to ensure generated CSS variables can be properly overridden. Make sure
outputToCssLayersis enabled.
- Add the UI Vue plugin in your
src/main.ts
import 'uno.css'
import ui from '@byyuurin/ui/vue-plugin' // <---
import { createApp } from 'vue'
import { createRouter, createWebHistory } from 'vue-router'
import App from './App.vue'
const app = createApp(App)
const router = createRouter({
routes: [],
history: createWebHistory(),
})
app.use(ui) // <----
app.use(router)
app.mount('#app')- Add the
isolateclass to your root container
<!doctype html>
<html lang="en">
<head>
...
</head>
<body>
<div id="app" class="isolate"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>