Icônes
Utilisation
L'interface utilisateur Nuxt embarque un composant Icon soutenu par @iconify/vue, donc aucune configuration supplémentaire n'est requise.
Composant ### Icon
Vous pouvez utiliser le composant Icon avec une prop name pour afficher une icône:
<template>
<UIcon name="i-lucide-lightbulb" class="size-5" />
</template>search-iconsxph022/docs/getting-started/ai/mcp#available-tools).-), vous devez séparer le nom de l'icône du nom de la collection avec un deux-points (:) car @iconify/vue ne gère pas cette casse comme @nuxt/icon.En savoir plus sur la convention de nommage Iconify .Composants props
Certains composants disposent également d'un prop icon pour afficher une icône, comme le Button par exemple:
<template>
<UButton icon="i-lucide-sun" variant="subtle">Button</UButton>
</template>Collections
Iconify jeu de données
Il est fortement recommandé d'installer les données d'icônes localement avec:
pnpm i @iconify-json/{collection_name}
yarn add @iconify-json/{collection_name}
npm install @iconify-json/{collection_name}
Par exemple, pour utiliser l'icône i-lucide-lightbulb, installez sa collection avec @iconify-json/lucide.
L'installation de la collection permet à Nuxt UI d'intégrer les icônes qu 'elle utilise dans votre build, de sorte qu' elles soient immédiatement affichées pendant la SSR et fonctionnent entièrement hors ligne au lieu d'être récupérées à partir de l'API Iconify lors de l'exécution.
Pour regrouper d'autres icônes, telles que celles que vous remplacez ou utilisez ailleurs dans votre application, ajoutez-les à l'option icon.clientBundle.icons dans votre vite.config.ts:
import ui from '@nuxt/ui/vite'
export default defineConfig({
plugins: [
ui({
icon: {
clientBundle: {
icons: ['lucide:heart', 'simple-icons:github']
}
}
})
]
})
i-{collection}-{name} ou {collection}:{name}, par exemple i-lucide-heart ou lucide:heart, et i-material-symbols-menu ou material-symbols:menu.Pour regrouper les icônes que vous utilisez sans les répertorier une par une, activez scan à la place. Il analyse votre source pour les utilisations d'icônes de vos collections installées et les regroupe, de la même manière que clientBundle.scan de @nuxt/icon fonctionne:
import ui from '@nuxt/ui/vite'
export default defineConfig({
plugins: [
ui({
icon: {
clientBundle: {
scan: true
}
}
})
]
})
La numérisation lit uniquement les fichiers .vue, .jsx, .tsx, .md, .mdc, .mdx, .yml et .yaml, et ne correspond qu 'aux noms d'icônes écrits sous forme de chaînes littérales. tout comme les noms construits dynamiquement comme i-lucide-${name}. Définissez globInclude pour analyser ces fichiers aussi bien. Il remplace la liste par défaut, alors gardez les extensions dont vous avez toujours besoin:
import ui from '@nuxt/ui/vite'
export default defineConfig({
plugins: [
ui({
icon: {
clientBundle: {
scan: {
globInclude: ['**/*.{vue,jsx,tsx,md,mdc,mdx,yml,yaml,ts,js}']
}
}
}
})
]
})
Les noms dynamiques peuvent toujours être regroupés lorsque vous connaissez l'ensemble au moment de la construction, en les répertoriant dans clientBundle.icons. Les noms qui n'existent qu'à l'exécution, comme les icônes provenant d'une API, ne peuvent pas être regroupés du tout et sont chargés à partir de l'API Iconify à la demande.
Les icônes dont la collection n'est pas installée se chargent toujours à partir de l'API Iconify au moment de l'exécution, installez donc chaque collection que vous utilisez avec @iconify-json/{collection_name}.
Thème
Vous pouvez modifier les icônes par défaut utilisées par les composants de l'interface utilisateur Nuxt dans votre vite.config.ts:
export default defineAppConfig({
ui: {
icons: {
arrowDown: 'i-lucide-arrow-down',
arrowLeft: 'i-lucide-arrow-left',
arrowRight: 'i-lucide-arrow-right',
arrowUp: 'i-lucide-arrow-up',
caution: 'i-lucide-circle-alert',
check: 'i-lucide-check',
chevronDoubleLeft: 'i-lucide-chevrons-left',
chevronDoubleRight: 'i-lucide-chevrons-right',
chevronDown: 'i-lucide-chevron-down',
chevronLeft: 'i-lucide-chevron-left',
chevronRight: 'i-lucide-chevron-right',
chevronUp: 'i-lucide-chevron-up',
close: 'i-lucide-x',
copy: 'i-lucide-copy',
copyCheck: 'i-lucide-copy-check',
dark: 'i-lucide-moon',
drag: 'i-lucide-grip-vertical',
ellipsis: 'i-lucide-ellipsis',
error: 'i-lucide-circle-x',
external: 'i-lucide-arrow-up-right',
eye: 'i-lucide-eye',
eyeOff: 'i-lucide-eye-off',
file: 'i-lucide-file',
folder: 'i-lucide-folder',
folderOpen: 'i-lucide-folder-open',
hash: 'i-lucide-hash',
info: 'i-lucide-info',
light: 'i-lucide-sun',
loading: 'i-lucide-loader-circle',
menu: 'i-lucide-menu',
minus: 'i-lucide-minus',
panelClose: 'i-lucide-panel-left-close',
panelOpen: 'i-lucide-panel-left-open',
plus: 'i-lucide-plus',
reload: 'i-lucide-rotate-ccw',
search: 'i-lucide-search',
stop: 'i-lucide-square',
star: 'i-lucide-star',
success: 'i-lucide-circle-check',
system: 'i-lucide-monitor',
tip: 'i-lucide-lightbulb',
upload: 'i-lucide-upload',
warning: 'i-lucide-triangle-alert'
}
}
})import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nuxt/ui/vite'
export default defineConfig({
plugins: [
vue(),
ui({
ui: {
icons: {
arrowDown: 'i-lucide-arrow-down',
arrowLeft: 'i-lucide-arrow-left',
arrowRight: 'i-lucide-arrow-right',
arrowUp: 'i-lucide-arrow-up',
caution: 'i-lucide-circle-alert',
check: 'i-lucide-check',
chevronDoubleLeft: 'i-lucide-chevrons-left',
chevronDoubleRight: 'i-lucide-chevrons-right',
chevronDown: 'i-lucide-chevron-down',
chevronLeft: 'i-lucide-chevron-left',
chevronRight: 'i-lucide-chevron-right',
chevronUp: 'i-lucide-chevron-up',
close: 'i-lucide-x',
copy: 'i-lucide-copy',
copyCheck: 'i-lucide-copy-check',
dark: 'i-lucide-moon',
drag: 'i-lucide-grip-vertical',
ellipsis: 'i-lucide-ellipsis',
error: 'i-lucide-circle-x',
external: 'i-lucide-arrow-up-right',
eye: 'i-lucide-eye',
eyeOff: 'i-lucide-eye-off',
file: 'i-lucide-file',
folder: 'i-lucide-folder',
folderOpen: 'i-lucide-folder-open',
hash: 'i-lucide-hash',
info: 'i-lucide-info',
light: 'i-lucide-sun',
loading: 'i-lucide-loader-circle',
menu: 'i-lucide-menu',
minus: 'i-lucide-minus',
panelClose: 'i-lucide-panel-left-close',
panelOpen: 'i-lucide-panel-left-open',
plus: 'i-lucide-plus',
reload: 'i-lucide-rotate-ccw',
search: 'i-lucide-search',
stop: 'i-lucide-square',
star: 'i-lucide-star',
success: 'i-lucide-circle-check',
system: 'i-lucide-monitor',
tip: 'i-lucide-lightbulb',
upload: 'i-lucide-upload',
warning: 'i-lucide-triangle-alert'
}
}
})
]
})