Skip to content

Using Icons ​

Vue File ​

Local Icons in Templates (Available Offline) ​

This project uses unplugin-icons to automatically import icons from @iconify-json/icon-park-outline. It is recommended to visit icones to find the icons you need.

For example, if you find an icon named home, you must use the <{collection}-{icon} /> format to import it, otherwise it will not work.

vue
// usage
<icon-park-outline-home />
<IconParkOutlineHome />

// modify style
<icon-park-outline-home style="font-size: 2em; color: red"/>

// modify style using Unocss
<icon-park-outline-home class="text-red text-2em"/>

TIP

It is recommended to use the Iconify IntelliSense plugin to improve development experience.

Network Icons in Templates (Not Available Offline) ​

The project also provides the functionality to automatically load network icons, allowing the use of all icons from icones rather than being limited to the icon-park-outline series. This feature is implemented based on @iconify/vue and n-icon. Icons loaded this way will not be automatically packaged into the project. Not available offline.

For example, if you find an icon named icon-park-outline:user

vue
// usage
<nova-icon icon="icon-park-outline:user" />

// modify style
<nova-icon icon="icon-park-outline:user" :color="red" :size="22"/>
Props Type Declaration
ts
interface iconProps {
  /* Icon name */
  icon?: string
  /* Icon color */
  color?: string
  /* Icon size */
  size?: number
  /* Icon depth */
  depth?: 1 | 2 | 3 | 4 | 5
}

TypeScript File ​

Local Icons in TypeScript (Available Offline) ​

In some scenarios, it may not be possible to directly use icons in a component, such as when adding icons for rendering in a TypeScript file or in the script section of a Vue file with Naive components. In such cases, icons need to be manually imported for use.

ts
import IconRedo from '~icons/icon-park-outline/redo'

const options = [
  {
    label: 'Refresh',
    key: 'reload',
    icon: () => h(IconRedo),
  }
]

Network Icons in TypeScript (Not Available Offline) ​

Similar to the above scenario, but icons are loaded from the network.

ts
import { renderIcon } from '@/utils'

const options = [
  {
    label: 'Refresh',
    key: 'reload',
    icon: renderIcon('icon-park-outline:redo'),
  }
]

TIP

renderIcon returns a @iconify/vue wrapped by the h function, not directly returning a VNode node. Depending on your needs, its usage may be renderIcon('{collection}:{icon}') or renderIcon('{collection}:{icon}')(), the latter directly returns a VNode node.

SVG Icons ​

This project uses unplugin-icons to automatically import SVG icons. First, you need to add the SVG icons to src/assets/svg-icons.

For example, if you add a logo.svg, you can use it in the project by importing it with a custom name that follows the format svg-icons-{name}.

vue
// usage
<svg-icons-logo/>

// modify style using Unocss
<svg-icons-logo class="text-2em"/>

TIP

For visual aesthetics, SVG icons are set to a default size of 1.2em. You can modify this default behavior by changing the build\plugins.ts file.

ts
// auto import iconify's icons
Icons({
  defaultStyle: 'display:inline-block',
  compiler: 'vue3',
  customCollections: {
    'svg-icons': FileSystemIconLoader(
      'src/assets/svg-icons',
      svg => svg.replace(/^<svg /, '<svg fill="currentColor" width="1.2em" height="1.2em"')
    ),
  },
})

Dynamically Importing Local SVG Icons ​

Sometimes it may be necessary to dynamically import SVG icons. In such cases, the renderIcon function should be used, and the icon name must start with the local: prefix.

ts
import { renderIcon } from '@/utils'

// Automatically import `/src/assets/svg-icons/logo.svg`
renderIcon('local:logo', {size: 20})

In the template, use the nova-icon component for importing

vue
// usage
<nova-icon icon="local:cool" />

// modify style
<nova-icon icon="local:cool" :color="red" :size="22"/>

Released under the MIT License.