Pictogrammen

Nuxt UI integreert met Nuxt Icon om toegang te krijgen tot meer dan 200.000 + pictogrammen van Iconify.

Gebruik

Nuxt UI registreert automatisch de @nuxt/icon module voor u, dus er is geen extra installatie vereist.

Icon onderdeel

U kunt de Icon component met een name prop gebruiken om een pictogram weer te geven:

<template>
  <UIcon name="i-lucide-lightbulb" class="size-5" />
</template>
U kunt elke naam uit de https://iconify.design-collectie gebruiken. Blader ze gemakkelijk op https://icones.js.org of zoek rechtstreeks vanuit uw AI-assistent met behulp van de search-icons MCP-tool.

Component rekwisieten

Sommige componenten hebben ook een icon prop om een pictogram weer te geven, zoals de Button bijvoorbeeld:

<template>
  <UButton icon="i-lucide-sun" variant="subtle">Button</UButton>
</template>

Collecties

Iconify gegevensset

Het wordt ten zeerste aanbevolen om de pictogramgegevens lokaal te installeren met:

pnpm i @iconify-json/{collection_name}

Als u bijvoorbeeld het i-uil-github-pictogram wilt gebruiken, installeert u de collectie met @iconify-json/uil. Op deze manier kunnen de pictogrammen lokaal of vanuit uw serverloze functies worden bediend, wat sneller en betrouwbaarder is aan zowel SSR als client-side.

Door de collectie te installeren, kan Nuxt UI ook de pictogrammen die het gebruikt tijdens het bouwen in de clientbundel insluiten, zodat ze beschikbaar zijn bij de eerste weergave in plaats van op aanvraag te worden geladen op runtime. Dit gebeurt automatisch voor Nuxt UI 's eigen iconen, standaard uit de lucide collectie. Om andere pictogrammen te bundelen, zoals pictogrammen die u overschrijft of elders in uw app gebruikt, voegt u ze toe aan de clientBundle.icons van @nuxt/icon in uw nuxt.config.ts:

nuxt.config.ts
export default defineNuxtConfig({
  modules: ['@nuxt/ui'],
  css: ['~/assets/css/main.css'],
  icon: {
    clientBundle: {
      icons: ['lucide:heart', 'simple-icons:github']
    }
  }
})

Of schakel clientBundle.scan in om elk pictogram dat in uw app wordt gebruikt te bundelen door uw bron te scannen, zodat u ze niet één voor één hoeft te vermelden:

nuxt.config.ts
export default defineNuxtConfig({
  modules: ['@nuxt/ui'],
  css: ['~/assets/css/main.css'],
  icon: {
    clientBundle: {
      scan: true
    }
  }
})

Scannen leest alleen .vue, .jsx, .tsx, .md, .mdc, .mdx, .yml en .yaml bestanden, en het komt alleen overeen met pictogramnamen die zijn geschreven als letterlijke tekenreeksen. Pictogrammen die zijn gedefinieerd in een .ts- of .js-bestand, zoals een lijst met navigatielinks, worden gemist, evenals namen die dynamisch zijn gebouwd zoals i-lucide-${name}. Stel globInclude in om die bestanden ook te scannen. Het vervangt de standaardlijst, dus bewaar de extensies die je nog nodig hebt:

nuxt.config.ts
export default defineNuxtConfig({
  modules: ['@nuxt/ui'],
  css: ['~/assets/css/main.css'],
  icon: {
    clientBundle: {
      scan: {
        globInclude: ['**/*.{vue,jsx,tsx,md,mdc,mdx,yml,yaml,ts,js}']
      }
    }
  }
})

Dynamische namen kunnen nog steeds worden gebundeld wanneer u de hele set tijdens het bouwen kent, door ze in clientBundle.icons te vermelden. Namen die alleen tijdens runtime bestaan, zoals pictogrammen die afkomstig zijn van een API, kunnen helemaal niet worden gebundeld. Ze worden op aanvraag geladen vanaf de /api/_nuxt_icon-route wanneer uw app door de server wordt gerenderd, met de Iconify API als fallback en rechtstreeks vanuit de Iconify API wanneer u nuxt generate of ssr: false.

Lees hier meer over in de @nuxt/icon documentatie.

Aangepaste lokale collecties

U kunt lokale SVG-bestanden gebruiken om een aangepaste Iconify-collectie te maken.

Plaats bijvoorbeeld de SVG-bestanden van uw pictogrammen onder een map naar keuze, bijvoorbeeld ./app/assets/icons:

assets/icons
├── add.svg
└── remove.svg

Voeg in je nuxt.config.ts een item toe in icon.customCollections:

export default defineNuxtConfig({
  modules: ['@nuxt/ui'],
  css: ['~/assets/css/main.css'],
  icon: {
    customCollections: [{
      prefix: 'custom',
      dir: './app/assets/icons'
    }]
  }
})

Dan kun je de icoontjes als volgt gebruiken:

<template>
  <UIcon name="i-custom-add" />
</template>
Lees hier meer over in de @nuxt/icon documentatie.

Thema

U kunt de standaardpictogrammen wijzigen die worden gebruikt door componenten in uw app.config.ts:

app.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'
    }
  }
})
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: {
          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'
        }
      }
    })
  ]
})
Pictogrammen die u in app.config.ts overschrijft, worden tijdens runtime op aanvraag geladen in plaats van ingebed in de clientbundel. Om ze ook te bundelen voeg je ze in {collection}:{name} vorm (bijvoorbeeld lucide:rocket) toe aan @nuxt/icon 's clientBundle.icons in je nuxt.config.ts.