Pulled ALL skills from 15 source repositories: - anthropics/skills: 16 (docs, design, MCP, testing) - obra/superpowers: 14 (TDD, debugging, agents, planning) - coreyhaines31/marketingskills: 25 (marketing, CRO, SEO, growth) - better-auth/skills: 5 (auth patterns) - vercel-labs/agent-skills: 5 (React, design, Vercel) - antfu/skills: 16 (Vue, Vite, Vitest, pnpm, Turborepo) - Plus 13 individual skills from various repos Mosaic Stack is not limited to coding — the Orchestrator and subagents serve coding, business, design, marketing, writing, logistics, analysis, and more. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
284 lines
4.2 KiB
Markdown
284 lines
4.2 KiB
Markdown
---
|
|
name: unocss-vite-integration
|
|
description: Setting up UnoCSS with Vite and framework-specific tips
|
|
---
|
|
|
|
# UnoCSS Vite Integration
|
|
|
|
The Vite plugin is the most common way to use UnoCSS.
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
pnpm add -D unocss
|
|
```
|
|
|
|
```ts
|
|
// vite.config.ts
|
|
import UnoCSS from 'unocss/vite'
|
|
import { defineConfig } from 'vite'
|
|
|
|
export default defineConfig({
|
|
plugins: [
|
|
UnoCSS(),
|
|
],
|
|
})
|
|
```
|
|
|
|
Create config file:
|
|
|
|
```ts
|
|
// uno.config.ts
|
|
import { defineConfig, presetWind3 } from 'unocss'
|
|
|
|
export default defineConfig({
|
|
presets: [
|
|
presetWind3(),
|
|
],
|
|
})
|
|
```
|
|
|
|
Add to entry:
|
|
|
|
```ts
|
|
// main.ts
|
|
import 'virtual:uno.css'
|
|
```
|
|
|
|
## Modes
|
|
|
|
### global (default)
|
|
|
|
Standard mode - generates global CSS injected via `uno.css` import.
|
|
|
|
```ts
|
|
import 'virtual:uno.css'
|
|
```
|
|
|
|
### vue-scoped
|
|
|
|
Injects generated CSS into Vue SFC `<style scoped>`.
|
|
|
|
```ts
|
|
UnoCSS({
|
|
mode: 'vue-scoped',
|
|
})
|
|
```
|
|
|
|
### shadow-dom
|
|
|
|
For Web Components using Shadow DOM:
|
|
|
|
```ts
|
|
UnoCSS({
|
|
mode: 'shadow-dom',
|
|
})
|
|
```
|
|
|
|
Add placeholder in component styles:
|
|
|
|
```ts
|
|
const template = document.createElement('template')
|
|
template.innerHTML = `
|
|
<style>
|
|
:host { ... }
|
|
@unocss-placeholder
|
|
</style>
|
|
<div class="m-1em">...</div>
|
|
`
|
|
```
|
|
|
|
### per-module (experimental)
|
|
|
|
Generates CSS per module with optional scoping.
|
|
|
|
### dist-chunk (experimental)
|
|
|
|
Generates CSS per chunk on build for MPA.
|
|
|
|
## DevTools Support
|
|
|
|
Edit classes directly in browser DevTools:
|
|
|
|
```ts
|
|
import 'virtual:uno.css'
|
|
import 'virtual:unocss-devtools'
|
|
```
|
|
|
|
**Warning:** Uses MutationObserver to detect changes. Dynamic classes from scripts will also be included.
|
|
|
|
## Framework-Specific Setup
|
|
|
|
### React
|
|
|
|
```ts
|
|
// vite.config.ts
|
|
import React from '@vitejs/plugin-react'
|
|
import UnoCSS from 'unocss/vite'
|
|
|
|
export default {
|
|
plugins: [
|
|
UnoCSS(), // Must be before React when using attributify
|
|
React(),
|
|
],
|
|
}
|
|
```
|
|
|
|
**Note:** Remove `tsc` from build script if using `@unocss/preset-attributify`.
|
|
|
|
### Vue
|
|
|
|
Works out of the box with `@vitejs/plugin-vue`.
|
|
|
|
### Svelte
|
|
|
|
```ts
|
|
import { svelte } from '@sveltejs/vite-plugin-svelte'
|
|
import extractorSvelte from '@unocss/extractor-svelte'
|
|
import UnoCSS from 'unocss/vite'
|
|
|
|
export default {
|
|
plugins: [
|
|
UnoCSS({
|
|
extractors: [extractorSvelte()],
|
|
}),
|
|
svelte(),
|
|
],
|
|
}
|
|
```
|
|
|
|
Supports `class:foo` and `class:foo={bar}` syntax.
|
|
|
|
### SvelteKit
|
|
|
|
Same as Svelte, use `sveltekit()` from `@sveltejs/kit/vite`.
|
|
|
|
### Solid
|
|
|
|
```ts
|
|
import UnoCSS from 'unocss/vite'
|
|
import solidPlugin from 'vite-plugin-solid'
|
|
|
|
export default {
|
|
plugins: [
|
|
UnoCSS(),
|
|
solidPlugin(),
|
|
],
|
|
}
|
|
```
|
|
|
|
### Preact
|
|
|
|
```ts
|
|
import Preact from '@preact/preset-vite'
|
|
import UnoCSS from 'unocss/vite'
|
|
|
|
export default {
|
|
plugins: [
|
|
UnoCSS(),
|
|
Preact(),
|
|
],
|
|
}
|
|
```
|
|
|
|
### Elm
|
|
|
|
```ts
|
|
import Elm from 'vite-plugin-elm'
|
|
import UnoCSS from 'unocss/vite'
|
|
|
|
export default {
|
|
plugins: [
|
|
Elm(),
|
|
UnoCSS(),
|
|
],
|
|
}
|
|
```
|
|
|
|
### Web Components (Lit)
|
|
|
|
```ts
|
|
UnoCSS({
|
|
mode: 'shadow-dom',
|
|
shortcuts: [
|
|
{ 'cool-blue': 'bg-blue-500 text-white' },
|
|
],
|
|
})
|
|
```
|
|
|
|
```ts
|
|
// my-element.ts
|
|
@customElement('my-element')
|
|
export class MyElement extends LitElement {
|
|
static styles = css`
|
|
:host { ... }
|
|
@unocss-placeholder
|
|
`
|
|
}
|
|
```
|
|
|
|
Supports `part-[<part-name>]:<utility>` for `::part` styling.
|
|
|
|
## Inspector
|
|
|
|
Visit `http://localhost:5173/__unocss` in dev mode to:
|
|
|
|
- Inspect generated CSS rules
|
|
- See applied classes per file
|
|
- Test utilities in REPL
|
|
|
|
## Legacy Browser Support
|
|
|
|
With `@vitejs/plugin-legacy`:
|
|
|
|
```ts
|
|
import legacy from '@vitejs/plugin-legacy'
|
|
import UnoCSS from 'unocss/vite'
|
|
|
|
export default {
|
|
plugins: [
|
|
UnoCSS({
|
|
legacy: {
|
|
renderModernChunks: false,
|
|
},
|
|
}),
|
|
legacy({
|
|
targets: ['defaults', 'not IE 11'],
|
|
renderModernChunks: false,
|
|
}),
|
|
],
|
|
}
|
|
```
|
|
|
|
## VanillaJS / TypeScript
|
|
|
|
By default, `.js` and `.ts` files are not extracted. Configure to include:
|
|
|
|
```ts
|
|
// uno.config.ts
|
|
export default defineConfig({
|
|
content: {
|
|
pipeline: {
|
|
include: [
|
|
/\.(vue|svelte|[jt]sx|html)($|\?)/,
|
|
'src/**/*.{js,ts}',
|
|
],
|
|
},
|
|
},
|
|
})
|
|
```
|
|
|
|
Or use magic comment in files:
|
|
|
|
```ts
|
|
// @unocss-include
|
|
export const classes = {
|
|
active: 'bg-primary text-white',
|
|
}
|
|
```
|
|
|
|
<!--
|
|
Source references:
|
|
- https://unocss.dev/integrations/vite
|
|
-->
|