コード
クリップボードへのコピーをサポートしたインラインコードと構文ハイライトされたコードブロックを表示します。
Codeブロック
コードブロックはProsePreコンポーネントによってレンダリングされ、Shikiによるシンタックスハイライト付きです。
export default defineNuxtConfig({
modules: ['@nuxt/ui']
})
```ts
export defineNuxtConfig {
モジュール['@ nuxt/ui']
})
```
| Prop | Default | Type |
|---|---|---|
icon | any | |
code | string | |
language | string | |
filename | string | |
highlights | number[] | |
hideHeader | boolean | |
meta | string | |
copy | true | boolean | Omit<ButtonProps, LinkPropsKeys> Display a button to copy the code to the clipboard.
|
ui | { root?: SlotClass; header?: SlotClass; filename?: SlotClass; icon?: SlotClass; copy?: SlotClass; base?: SlotClass; } |
app.config.ts
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] end-[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: {
'.editorconfig': 'i-vscode-icons-file-type-editorconfig',
'.env': 'i-vscode-icons-file-type-dotenv',
'.env.example': 'i-vscode-icons-file-type-dotenv',
'.eslintignore': 'i-vscode-icons-file-type-eslint',
'.eslintrc': 'i-vscode-icons-file-type-eslint',
'.eslintrc.cjs': 'i-vscode-icons-file-type-eslint',
'.gitignore': 'i-vscode-icons-file-type-git',
'.npmrc': 'i-vscode-icons-file-type-npm',
'.nuxtignore': 'i-vscode-icons-file-type-nuxt',
'.nuxtrc': 'i-vscode-icons-file-type-nuxt',
'.vscode/settings.json': 'i-vscode-icons-file-type-vscode',
asm: 'i-vscode-icons-file-type-assembly',
bicep: 'i-vscode-icons-file-type-bicep',
bicepparam: 'i-vscode-icons-file-type-bicep',
bun: 'i-vscode-icons-file-type-bun',
cjs: 'i-vscode-icons-file-type-js',
cs: 'i-vscode-icons-file-type-csharp',
dart: 'i-vscode-icons-file-type-dartlang',
deno: 'i-vscode-icons-file-type-deno',
erl: 'i-vscode-icons-file-type-erlang',
'eslint.config.cjs': 'i-vscode-icons-file-type-eslint',
'eslint.config.js': 'i-vscode-icons-file-type-eslint',
'eslint.config.mjs': 'i-vscode-icons-file-type-eslint',
exs: 'i-vscode-icons-file-type-elixir',
f: 'i-vscode-icons-file-type-fortran',
fs: 'i-vscode-icons-file-type-fsharp',
gleam: 'i-vscode-icons-file-type-gleam',
go: 'i-vscode-icons-file-type-go',
h: 'i-vscode-icons-file-type-cppheader',
hs: 'i-vscode-icons-file-type-haskell',
ico: 'i-vscode-icons-file-type-favicon',
ino: 'i-vscode-icons-file-type-arduino',
jl: 'i-vscode-icons-file-type-julia',
js: 'i-vscode-icons-file-type-js',
jsx: 'i-vscode-icons-file-type-js',
kt: 'i-vscode-icons-file-type-kotlin',
lsp: 'i-vscode-icons-file-type-lisp',
md: 'i-vscode-icons-file-type-markdown',
mjs: 'i-vscode-icons-file-type-js',
npm: 'i-vscode-icons-file-type-npm',
npx: 'i-vscode-icons-file-type-npm',
nuxt: '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',
'package.json': 'i-vscode-icons-file-type-node',
pl: 'i-vscode-icons-file-type-perl',
pnpm: 'i-vscode-icons-file-type-pnpm',
ps1: 'i-vscode-icons-file-type-powershell',
psd1: 'i-vscode-icons-file-type-powershell',
psm1: 'i-vscode-icons-file-type-powershell',
py: 'i-vscode-icons-file-type-python',
rb: 'i-vscode-icons-file-type-ruby',
rs: 'i-vscode-icons-file-type-rust',
sbt: 'i-vscode-icons-file-type-scala',
'tailwind.config.js': 'i-vscode-icons-file-type-tailwind',
'tailwind.config.ts': 'i-vscode-icons-file-type-tailwind',
terminal: 'i-lucide-terminal',
ts: 'i-vscode-icons-file-type-typescript',
'tsconfig.json': 'i-vscode-icons-file-type-tsconfig',
tsx: 'i-vscode-icons-file-type-typescript',
vue: 'i-vscode-icons-file-type-vue',
yarn: 'i-vscode-icons-file-type-yarn',
'yarn.lock': 'i-vscode-icons-file-type-yarn',
yml: 'i-vscode-icons-file-type-yaml'
}
}
}
})vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nuxt/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] end-[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: {
'.editorconfig': 'i-vscode-icons-file-type-editorconfig',
'.env': 'i-vscode-icons-file-type-dotenv',
'.env.example': 'i-vscode-icons-file-type-dotenv',
'.eslintignore': 'i-vscode-icons-file-type-eslint',
'.eslintrc': 'i-vscode-icons-file-type-eslint',
'.eslintrc.cjs': 'i-vscode-icons-file-type-eslint',
'.gitignore': 'i-vscode-icons-file-type-git',
'.npmrc': 'i-vscode-icons-file-type-npm',
'.nuxtignore': 'i-vscode-icons-file-type-nuxt',
'.nuxtrc': 'i-vscode-icons-file-type-nuxt',
'.vscode/settings.json': 'i-vscode-icons-file-type-vscode',
asm: 'i-vscode-icons-file-type-assembly',
bicep: 'i-vscode-icons-file-type-bicep',
bicepparam: 'i-vscode-icons-file-type-bicep',
bun: 'i-vscode-icons-file-type-bun',
cjs: 'i-vscode-icons-file-type-js',
cs: 'i-vscode-icons-file-type-csharp',
dart: 'i-vscode-icons-file-type-dartlang',
deno: 'i-vscode-icons-file-type-deno',
erl: 'i-vscode-icons-file-type-erlang',
'eslint.config.cjs': 'i-vscode-icons-file-type-eslint',
'eslint.config.js': 'i-vscode-icons-file-type-eslint',
'eslint.config.mjs': 'i-vscode-icons-file-type-eslint',
exs: 'i-vscode-icons-file-type-elixir',
f: 'i-vscode-icons-file-type-fortran',
fs: 'i-vscode-icons-file-type-fsharp',
gleam: 'i-vscode-icons-file-type-gleam',
go: 'i-vscode-icons-file-type-go',
h: 'i-vscode-icons-file-type-cppheader',
hs: 'i-vscode-icons-file-type-haskell',
ico: 'i-vscode-icons-file-type-favicon',
ino: 'i-vscode-icons-file-type-arduino',
jl: 'i-vscode-icons-file-type-julia',
js: 'i-vscode-icons-file-type-js',
jsx: 'i-vscode-icons-file-type-js',
kt: 'i-vscode-icons-file-type-kotlin',
lsp: 'i-vscode-icons-file-type-lisp',
md: 'i-vscode-icons-file-type-markdown',
mjs: 'i-vscode-icons-file-type-js',
npm: 'i-vscode-icons-file-type-npm',
npx: 'i-vscode-icons-file-type-npm',
nuxt: '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',
'package.json': 'i-vscode-icons-file-type-node',
pl: 'i-vscode-icons-file-type-perl',
pnpm: 'i-vscode-icons-file-type-pnpm',
ps1: 'i-vscode-icons-file-type-powershell',
psd1: 'i-vscode-icons-file-type-powershell',
psm1: 'i-vscode-icons-file-type-powershell',
py: 'i-vscode-icons-file-type-python',
rb: 'i-vscode-icons-file-type-ruby',
rs: 'i-vscode-icons-file-type-rust',
sbt: 'i-vscode-icons-file-type-scala',
'tailwind.config.js': 'i-vscode-icons-file-type-tailwind',
'tailwind.config.ts': 'i-vscode-icons-file-type-tailwind',
terminal: 'i-lucide-terminal',
ts: 'i-vscode-icons-file-type-typescript',
'tsconfig.json': 'i-vscode-icons-file-type-tsconfig',
tsx: 'i-vscode-icons-file-type-typescript',
vue: 'i-vscode-icons-file-type-vue',
yarn: 'i-vscode-icons-file-type-yarn',
'yarn.lock': 'i-vscode-icons-file-type-yarn',
yml: 'i-vscode-icons-file-type-yaml'
}
}
}
})
]
})言語
シンタックスハイライトは、数十のプログラミング言語で利用できます。
<script setup lang="ts">
const message = ref('Hello World!')
function updateMessage() {
message.value = 'Button clicked!'
}
</script>
<template>
<div>
<h1>{{ message }}</h1>
<UButton @click="updateMessage">
Click me
</UButton>
</div>
</template>
```vue
<script setup lang="ts">
const message = ref 'Hello World!'
関数updateMessage {
message. value ='ボタンがクリックされました!'
}
</script>
<template>
<div>
<h1> {{ message }} </h1>
<UButton @click="updateMessage">
クリックする
</UButton>
</div>
</template>
```
デフォルトでは、
material-theme-lighterとmaterial-theme-palenight Shikiテーマはそれぞれライトモードとダークモードに使用されます。@nuxt/contentを使用する場合は、nuxt.config.tsのcontent.build.markdown.highlightキーでこれを変更できます。スタンドアロン@nuxtjs/mdcを使用する場合は、mdc.highlightキーでテーマを設定します。Comarkを使用する場合は、shikiプラグインオプションでテーマを設定します。Comarkでダークモードをサポートするには、以下のCSSをスタイルシートに追加します。main.css
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;
}
Filename
コードブロックは自動アイコン検出でファイル名表示をサポート。
nuxt.config.ts
export default defineNuxtConfig({
modules: ['@nuxt/ui']
})
```ts [nuxt.config.ts]
export defineNuxtConfig {
モジュール['@ nuxt/ui']
})
```
ファイル名アイコンは
ProseCodeIconコンポーネントによってレンダリングされ、アプリ設定でカスタマイズできる定義済みのアイコンのセットが含まれています。app/app.config.ts
export default defineAppConfig({
ui: {
prose: {
codeIcon: {
terminal: 'i-lucide-square-terminal',
config: 'i-lucide-settings',
package: 'i-lucide-package'
}
}
}
})
vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nuxt/ui/vite'
export default defineConfig({
plugins: [
vue(),
ui({
ui: {
prose: {
codeIcon: {
terminal: 'i-lucide-square-terminal',
config: 'i-lucide-settings',
package: 'i-lucide-package'
}
}
}
})
]
})
これらのファイル名アイコンは
vscode-iconsコレクションから来ています。このコレクションは他のコンポーネントが使用するlucideアイコンとは別のもので、ファイル拡張子から要求に応じて解決されます。@iconify-json/vscode-iconsをインストールして、他のコレクションと同様にローカルでオフラインで提供します。Copyボタン
各コードブロックには、コードをクリップボードにコピーするコピーボタンが組み込まれています。
copyプロパティをfalseに設定してボタンを非表示にするか、Buttonプロパティを渡してカスタマイズします。
アプリ設定の
ui.icons.copyキーとui.icons.copyCheckキーでアイコンを変更できます。app/app.config.ts
export default defineAppConfig({
ui: {
icons: {
copy: 'i-lucide-copy',
copyCheck: 'i-lucide-copy-check'
}
}
})
vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nuxt/ui/vite'
export default defineConfig({
plugins: [
vue(),
ui({
ui: {
icons: {
copy: 'i-lucide-copy',
copyCheck: 'i-lucide-copy-check'
}
}
})
]
})
Lineハイライト
特定の線をハイライトして重要な部分に注意を引く。
nuxt.config.ts
export default defineNuxtConfig({
modules: ['@nuxt/ui'], // This line is highlighted
css: ['~/assets/css/main.css']
})
```ts [nuxt.config.ts] {2}
export defineNuxtConfig {
modules:['@ nuxt/ui'],//この行はハイライトされます
css ['~/assets/css/main.css']
})
```
コード差分
コードバージョン間の変更を表示するにはdiff言語を使用します。
nuxt.config.ts
export default defineNuxtConfig({
modules: [
- '@nuxt/ui-pro'
+ '@nuxt/ui'
]
})
```diff [nuxt.config.ts]
export defineNuxtConfig {
モジュール[
- '@ nuxt/ui—pro'
+ '@ nuxt/ui'
]
})
```
Inlineコード
インラインコードスニペットはProseCodeコンポーネントによってレンダリングされます。
inline code
Color
colorプロパティを使用してインラインコードの色を変更します。デフォルトはneutralです。
inline code
`inline code`{color="error"}
Lang
langプロパティを使用して、インラインコードの言語を指定します。
nuxt.config.ts
`nuxt.config.ts`{lang="ts-type"}