Os blocos de código são renderizados pelo componente ProsePre com realce de sintaxe fornecido pelo Shiki.
export default defineNuxtConfig({
modules: ['@nitro/ui']
})
```ts
export default defineNuxtConfig({
modules: ['@nitro/ui']
})
```
| Prop | Default | Type |
|---|---|---|
icon | any | |
code | string | |
language | string | |
filename | string | |
highlights | number[] | |
hideHeader | boolean | |
meta | string | |
ui | { root?: SlotClass; header?: SlotClass; filename?: SlotClass; icon?: SlotClass; copy?: SlotClass; base?: SlotClass; } |
export default defineAppConfig({
ui: {
prose: {
pre: {
slots: {
root: 'relative my-5 group',
header: 'flex items-center gap-1.5 border border-muted bg-default border-b-0 relative rounded-t-md px-4 py-3',
filename: 'text-default text-sm/6',
icon: 'size-4 shrink-0',
copy: 'absolute top-[11px] right-[11px] lg:opacity-0 lg:group-hover:opacity-100 lg:focus-visible:opacity-100 transition',
base: 'group font-mono text-sm/6 border border-muted bg-muted rounded-md px-4 py-3 whitespace-pre-wrap wrap-break-word overflow-x-auto outline-primary/25 focus-visible:outline-3 focus-visible:border-primary **:[.line]:block **:[.line.highlight]:-mx-4 **:[.line.highlight]:px-4 **:[.line.highlight]:bg-accented/50!'
},
variants: {
filename: {
true: {
root: '[&>pre]:rounded-t-none [&>pre]:my-0 my-5'
}
}
}
},
codeIcon: {
'package.json': 'i-vscode-icons-file-type-node',
'tsconfig.json': 'i-vscode-icons-file-type-tsconfig',
'.npmrc': 'i-vscode-icons-file-type-npm',
'.editorconfig': 'i-vscode-icons-file-type-editorconfig',
'.eslintrc': 'i-vscode-icons-file-type-eslint',
'.eslintrc.cjs': 'i-vscode-icons-file-type-eslint',
'.eslintignore': 'i-vscode-icons-file-type-eslint',
'eslint.config.js': 'i-vscode-icons-file-type-eslint',
'eslint.config.mjs': 'i-vscode-icons-file-type-eslint',
'eslint.config.cjs': 'i-vscode-icons-file-type-eslint',
'.gitignore': 'i-vscode-icons-file-type-git',
'yarn.lock': 'i-vscode-icons-file-type-yarn',
'.env': 'i-vscode-icons-file-type-dotenv',
'.env.example': 'i-vscode-icons-file-type-dotenv',
'.vscode/settings.json': 'i-vscode-icons-file-type-vscode',
nuxt: 'i-vscode-icons-file-type-nuxt',
'.nuxtrc': 'i-vscode-icons-file-type-nuxt',
'.nuxtignore': 'i-vscode-icons-file-type-nuxt',
'nuxt.config.js': 'i-vscode-icons-file-type-nuxt',
'nuxt.config.ts': 'i-vscode-icons-file-type-nuxt',
'nuxt.schema.ts': 'i-vscode-icons-file-type-nuxt',
'tailwind.config.js': 'i-vscode-icons-file-type-tailwind',
'tailwind.config.ts': 'i-vscode-icons-file-type-tailwind',
vue: 'i-vscode-icons-file-type-vue',
ts: 'i-vscode-icons-file-type-typescript',
tsx: 'i-vscode-icons-file-type-typescript',
mjs: 'i-vscode-icons-file-type-js',
cjs: 'i-vscode-icons-file-type-js',
js: 'i-vscode-icons-file-type-js',
jsx: 'i-vscode-icons-file-type-js',
md: 'i-vscode-icons-file-type-markdown',
py: 'i-vscode-icons-file-type-python',
cs: 'i-vscode-icons-file-type-csharp',
asm: 'i-vscode-icons-file-type-assembly',
f: 'i-vscode-icons-file-type-fortran',
hs: 'i-vscode-icons-file-type-haskell',
fs: 'i-vscode-icons-file-type-fsharp',
kt: 'i-vscode-icons-file-type-kotlin',
rs: 'i-vscode-icons-file-type-rust',
rb: 'i-vscode-icons-file-type-ruby',
lsp: 'i-vscode-icons-file-type-lisp',
ps1: 'i-vscode-icons-file-type-powershell',
psd1: 'i-vscode-icons-file-type-powershell',
psm1: 'i-vscode-icons-file-type-powershell',
go: 'i-vscode-icons-file-type-go',
gleam: 'i-vscode-icons-file-type-gleam',
bicep: 'i-vscode-icons-file-type-bicep',
bicepparam: 'i-vscode-icons-file-type-bicep',
exs: 'i-vscode-icons-file-type-elixir',
erl: 'i-vscode-icons-file-type-erlang',
sbt: 'i-vscode-icons-file-type-scala',
h: 'i-vscode-icons-file-type-cppheader',
ino: 'i-vscode-icons-file-type-arduino',
pl: 'i-vscode-icons-file-type-perl',
jl: 'i-vscode-icons-file-type-julia',
dart: 'i-vscode-icons-file-type-dartlang',
ico: 'i-vscode-icons-file-type-favicon',
npm: 'i-vscode-icons-file-type-npm',
pnpm: 'i-vscode-icons-file-type-pnpm',
npx: 'i-vscode-icons-file-type-npm',
yarn: 'i-vscode-icons-file-type-yarn',
bun: 'i-vscode-icons-file-type-bun',
deno: 'i-vscode-icons-file-type-deno',
yml: 'i-vscode-icons-file-type-yaml',
terminal: 'i-lucide-terminal'
}
}
}
})
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nitro/ui/vite'
export default defineConfig({
plugins: [
vue(),
ui({
ui: {
prose: {
pre: {
slots: {
root: 'relative my-5 group',
header: 'flex items-center gap-1.5 border border-muted bg-default border-b-0 relative rounded-t-md px-4 py-3',
filename: 'text-default text-sm/6',
icon: 'size-4 shrink-0',
copy: 'absolute top-[11px] right-[11px] lg:opacity-0 lg:group-hover:opacity-100 lg:focus-visible:opacity-100 transition',
base: 'group font-mono text-sm/6 border border-muted bg-muted rounded-md px-4 py-3 whitespace-pre-wrap wrap-break-word overflow-x-auto outline-primary/25 focus-visible:outline-3 focus-visible:border-primary **:[.line]:block **:[.line.highlight]:-mx-4 **:[.line.highlight]:px-4 **:[.line.highlight]:bg-accented/50!'
},
variants: {
filename: {
true: {
root: '[&>pre]:rounded-t-none [&>pre]:my-0 my-5'
}
}
}
},
codeIcon: {
'package.json': 'i-vscode-icons-file-type-node',
'tsconfig.json': 'i-vscode-icons-file-type-tsconfig',
'.npmrc': 'i-vscode-icons-file-type-npm',
'.editorconfig': 'i-vscode-icons-file-type-editorconfig',
'.eslintrc': 'i-vscode-icons-file-type-eslint',
'.eslintrc.cjs': 'i-vscode-icons-file-type-eslint',
'.eslintignore': 'i-vscode-icons-file-type-eslint',
'eslint.config.js': 'i-vscode-icons-file-type-eslint',
'eslint.config.mjs': 'i-vscode-icons-file-type-eslint',
'eslint.config.cjs': 'i-vscode-icons-file-type-eslint',
'.gitignore': 'i-vscode-icons-file-type-git',
'yarn.lock': 'i-vscode-icons-file-type-yarn',
'.env': 'i-vscode-icons-file-type-dotenv',
'.env.example': 'i-vscode-icons-file-type-dotenv',
'.vscode/settings.json': 'i-vscode-icons-file-type-vscode',
nuxt: 'i-vscode-icons-file-type-nuxt',
'.nuxtrc': 'i-vscode-icons-file-type-nuxt',
'.nuxtignore': 'i-vscode-icons-file-type-nuxt',
'nuxt.config.js': 'i-vscode-icons-file-type-nuxt',
'nuxt.config.ts': 'i-vscode-icons-file-type-nuxt',
'nuxt.schema.ts': 'i-vscode-icons-file-type-nuxt',
'tailwind.config.js': 'i-vscode-icons-file-type-tailwind',
'tailwind.config.ts': 'i-vscode-icons-file-type-tailwind',
vue: 'i-vscode-icons-file-type-vue',
ts: 'i-vscode-icons-file-type-typescript',
tsx: 'i-vscode-icons-file-type-typescript',
mjs: 'i-vscode-icons-file-type-js',
cjs: 'i-vscode-icons-file-type-js',
js: 'i-vscode-icons-file-type-js',
jsx: 'i-vscode-icons-file-type-js',
md: 'i-vscode-icons-file-type-markdown',
py: 'i-vscode-icons-file-type-python',
cs: 'i-vscode-icons-file-type-csharp',
asm: 'i-vscode-icons-file-type-assembly',
f: 'i-vscode-icons-file-type-fortran',
hs: 'i-vscode-icons-file-type-haskell',
fs: 'i-vscode-icons-file-type-fsharp',
kt: 'i-vscode-icons-file-type-kotlin',
rs: 'i-vscode-icons-file-type-rust',
rb: 'i-vscode-icons-file-type-ruby',
lsp: 'i-vscode-icons-file-type-lisp',
ps1: 'i-vscode-icons-file-type-powershell',
psd1: 'i-vscode-icons-file-type-powershell',
psm1: 'i-vscode-icons-file-type-powershell',
go: 'i-vscode-icons-file-type-go',
gleam: 'i-vscode-icons-file-type-gleam',
bicep: 'i-vscode-icons-file-type-bicep',
bicepparam: 'i-vscode-icons-file-type-bicep',
exs: 'i-vscode-icons-file-type-elixir',
erl: 'i-vscode-icons-file-type-erlang',
sbt: 'i-vscode-icons-file-type-scala',
h: 'i-vscode-icons-file-type-cppheader',
ino: 'i-vscode-icons-file-type-arduino',
pl: 'i-vscode-icons-file-type-perl',
jl: 'i-vscode-icons-file-type-julia',
dart: 'i-vscode-icons-file-type-dartlang',
ico: 'i-vscode-icons-file-type-favicon',
npm: 'i-vscode-icons-file-type-npm',
pnpm: 'i-vscode-icons-file-type-pnpm',
npx: 'i-vscode-icons-file-type-npm',
yarn: 'i-vscode-icons-file-type-yarn',
bun: 'i-vscode-icons-file-type-bun',
deno: 'i-vscode-icons-file-type-deno',
yml: 'i-vscode-icons-file-type-yaml',
terminal: 'i-lucide-terminal'
}
}
}
})
]
})
O realce de sintaxe está disponível para dezenas de linguagens de programação.
<script setup lang="ts">
const message = ref('Hello World!')
function updateMessage() {
message.value = 'Button clicked!'
}
</script>
<template>
<div>
<h1>{{ message }}</h1>
<NButton @click="updateMessage">
Click me
</NButton>
</div>
</template>
```vue
<script setup lang="ts">
const message = ref('Hello World!')
function updateMessage() {
message.value = 'Button clicked!'
}
</script>
<template>
<div>
<h1>{{ message }}</h1>
<NButton @click="updateMessage">
Click me
</NButton>
</div>
</template>
```
material-theme-lighter e material-theme-palenight do Shiki são usados para os modos claro e escuro, respectivamente. Ao usar o @nuxt/content, você pode alterar isso pela chave content.build.markdown.highlight no seu nuxt.config.ts. Ao usar o @nuxtjs/mdc de forma independente, configure os temas pela chave mdc.highlight. Ao usar o Comark, configure os temas pelas opções do plugin highlight.Para dar suporte ao modo escuro com o Comark, adicione o seguinte CSS à sua folha de estilo:html.dark .shiki span {
color: var(--shiki-dark) !important;
background-color: var(--shiki-dark-bg) !important;
font-style: var(--shiki-dark-font-style) !important;
font-weight: var(--shiki-dark-font-weight) !important;
text-decoration: var(--shiki-dark-text-decoration) !important;
}
Os blocos de código suportam a exibição do nome do arquivo com detecção automática de ícone.
export default defineNuxtConfig({
modules: ['@nitro/ui']
})
```ts [nuxt.config.ts]
export default defineNuxtConfig({
modules: ['@nitro/ui']
})
```
ProseCodeIcon e contém um conjunto de ícones predefinidos que você pode personalizar na configuração do seu app:export default defineAppConfig({
ui: {
prose: {
codeIcon: {
terminal: 'i-ph-terminal-window-duotone',
config: 'i-lucide-settings',
package: 'i-lucide-package'
}
}
}
})
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nitro/ui/vite'
export default defineConfig({
plugins: [
vue(),
ui({
ui: {
prose: {
codeIcon: {
terminal: 'i-ph-terminal-window-duotone',
config: 'i-lucide-settings',
package: 'i-lucide-package'
}
}
}
})
]
})
vscode-icons, que é separada dos ícones lucide usados pelo resto dos componentes, e são resolvidos sob demanda a partir da extensão do arquivo. Instale o @iconify-json/vscode-icons para servi-los localmente e offline, como qualquer outra coleção.Todo bloco de código tem um botão de copiar embutido que copia o código para a sua área de transferência.
ui.icons.copy e ui.icons.copyCheck na configuração do seu app:export default defineAppConfig({
ui: {
icons: {
copy: 'i-lucide-copy',
copyCheck: 'i-lucide-copy-check'
}
}
})
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nitro/ui/vite'
export default defineConfig({
plugins: [
vue(),
ui({
ui: {
icons: {
copy: 'i-lucide-copy',
copyCheck: 'i-lucide-copy-check'
}
}
})
]
})
Destaque linhas específicas para chamar a atenção para partes importantes.
export default defineNuxtConfig({
modules: ['@nitro/ui'], // This line is highlighted
css: ['~/assets/css/main.css']
})
```ts [nuxt.config.ts] {2}
export default defineNuxtConfig({
modules: ['@nitro/ui'], // This line is highlighted
css: ['~/assets/css/main.css']
})
```
Use a linguagem diff para mostrar as mudanças entre versões do código.
export default defineNuxtConfig({
modules: [
- '@nitro/ui-pro'
+ '@nitro/ui'
]
})
```diff [nuxt.config.ts]
export default defineNuxtConfig({
modules: [
- '@nitro/ui-pro'
+ '@nitro/ui'
]
})
```
Trechos de código inline são renderizados pelo componente ProseCode.
inline code
Use a prop color para alterar a cor do código inline. O padrão é neutral.
inline code
`inline code`{color="error"}
Use a prop lang para especificar a linguagem do código inline.
nuxt.config.ts
`nuxt.config.ts`{lang="ts-type"}