Search documentation v0.10.1

Icon

Render symbols for representing actions, objects, or concepts

Source Report Issue

Use the Icon component to create intuitive, visually appealing, and user-friendly interfaces, enhancing both functionality and design. Icons are provided by the open source MynaUI Icons, along with some custom icons. Sizes are set to 24x24px by default.

Preview
How to use Icons in Astro
---
import { Icon } from 'webcoreui/astro'
---
<Icon type="github" />
How to use Icons in Svelte
<script>
import { Icon } from 'webcoreui/svelte'
</script>
<Icon type="github" />
How to use Icons in React
import React from 'react'
import { Icon } from 'webcoreui/react'
const Component = () => <Icon type="github" />
export default Component

Themes

The Icon component supports four different themes that you can use to set the color of your icon:

<Icon type="github" theme="info" />
<Icon type="github" theme="success" />
<Icon type="github" theme="warning" />
<Icon type="github" theme="alert" />

Sizes and Colors

You can specify custom icon sizes and colors using the size and color props respectively. When the color prop is specified, it’ll override the theme prop:

<Icon type="github" size={12} color="#32e3a0" />
<Icon type="github" size={16} color="#32cae3" />
<Icon type="github" size={20} color="#ad74f7" />
<Icon type="github" size={24} color="#ff89aa" />
<Icon type="github" size={30} color="#f2c262" />
If no color is specified for an icon, it’ll always use the color of the text of the parent element.

Available Icons

To avoid shipping hundreds of icons to all users where most remain unused, we only provide a small subset of most commonly used icons out of the box, the ones that are required for Webcore components. The following icons are available with the Icon component (hover the icon to see its type):

<Icon type="alert" />
<Icon type="check" />
...

Adding Custom Icons

As some projects may require additional icons, we wanted to make sure that you can easily extend the Icon component. To add your own set of icons, you can use the iconSet prop that expects an object of SVG strings, where each key represents the type of the icon, and each value is an SVG string:

Create your own Icon.astro file
---
import Astro from '@icons/astro.svg?raw'
import Components from '@icons/components.svg?raw'
import { Icon as IconComponent } from 'webcoreui/astro'
const iconSet = {
'astro': Astro,
'components': Components
}
---
<IconComponent iconSet={iconSet} {...Astro.props} />

Using the above setup, you can abstract the Icon component into your own component that adds additional custom icons that you can use in your project with the same API. Note that in this case, your import path must point to your component. Now you can use astro and components as a new type along with the existing types:

How to use the component
---
// Import the above component in your project
// Your import path may differ
import Icon from '@components/Icon.astro'
---
<Icon type="alert" />
<Icon type="check" />
<Icon type="astro" />
<Icon type="components" />
You can find the source code for the above component in our block library with the below example icons.

Importing as String

Using the Icon component is the preferred way to render SVG icons provided by Webcore on the server. However, when using the Icon component on the client, it can drastically increase your bundle size as it prebundles all icons.

If you want to import icons provided by Webcore on the client-side, it’s recommended to import them directly as strings using the following imports:

How to import SVG icons as strings
import { info } from 'webcoreui/icons'

This can be useful in cases where you cannot use a component. In this case, the value of info will be an SVG string that you can use to dynamically render the icon.

API

type IconProps = {
type: string
size?: number
color?: string
theme?: 'info' | 'success' | 'warning' | 'alert'
iconSet?: {
[key: string]: string
}
}
PropPurpose
type Specify the type of the icon.
size Sets the size of the icon. Defaults to 24px.
color Sets the color of the icon.
theme Sets the theme of the icon.
iconSet Pass additional SVG icons to extend the component.

Request improvement for this page