Close
Angular React Web Components Blazor Angular
Open Source

Angular Icon Service Overview

The Ignite UI for Angular Icon Service allows developers to add new icons from various sources to their UIs.

Introduction

The Ignite UI for Angular Icon Service provides several methods that allow users to create and manage icon families.

The icon service can be imported directly from the Ignite UI for Angular package.

import { IgxIconComponent } from 'igniteui-angular/icon';
import { IgxIconService } from 'igniteui-angular/core';

@Component({
    selector: 'app-root',
    standalone: true,
    imports: [ IgxIconComponent ]
})
export class AppComponent implements OnInit {
    constructor(public iconService: IgxIconService) {}
}

Adding Icon Families

By default the Icon Service sets its default family to material.

Adding new families of icons is done using the setFamily method of the icon service. It creates an family entry with some metadata that instructs the igx-icon component about the icon(s) it should render.

Let’s use a practical example to explain how the setFamily method works:

/** 
* The icon service associates a given family name (provided by the user) 
* with a specific CSS class (as documented in the providing icon font) 
* and corresponding icon name (documented in the icon font).
* NOTE: Material is already the default family.
*/ 
iconService.setFamily('material', { className: 'material-icons', type: 'liga' });
iconService.setFamily('fa-solid', { className: 'fas', type: 'font', prefix: 'fa' });

The example above creates two icon families: ‘material’ and ‘fa-solid’. Their types are different, the material family is registered as liga, while the fa-solid family is registered as font. The difference between the two is how the igx-icon component would go about rendering them. Typically, Font Awesome uses class names to specify code points to a font family, hence why we set its type to font. Anytime we have to rely on code points to render icons, we should set the type to font. The Material Icons family is still a font family, however, the standard way to display an icon is to provide a ligature name, instead of a class name pointing to a specific code point. For that reason, we need to set the type to liga. There’s a third family type - svg, it is reserved for icon families that will be comprised of SVGs that are registered through the Icon Service.

Having registered the two font families above, we can now consume their icons in a standardized way via the igx-icon component:

<igx-icon family="material" name="home"></igx-icon>
<igx-icon family="fa-solid" name="car"></igx-icon>

To render icons from the default material family with igx-icon, add the following link to your index.html: <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">

You might have noticed that for the material family we use the ligature name as name, while in the case of the fa-solid family we specify the className for name, which is fa-car but drop the fa- prefix as it has been specified when we registered the icon family in the previous step.

Adding SVG Icons

The Ignite UI for Angular Icon Service allows us to associate SVG images with families and give them names so that they can be included via the igx-icon component in the same way as font-based icons. The SVGs should be resolved via either strings or via absolute URI to the SVG asset.

// Add a new 'material' icon called 'my-icon' from an SVG file
iconService.addSvgIcon('my-icon', 'my-icon.svg', 'material');

// Add a new 'fa-solid' icon called 'my-icon' from string 
iconService.addSvgIconFromText('my-icon', '<svg>...</svg>', 'fa-solid');

Later in markup:

<igx-icon family="material" name="my-icon"></igx-icon>
<igx-icon family="fa-solid" name="my-icon"></igx-icon>

Note that we are adding custom SVG icons to families of type liga and font. This is possible because the addSvgIcon and addSvgIconFromText methods register the icons as svg type implicitly, allowing the igx-icon component to correctly render the SVG.

Meta Families

The Ignite UI for Angular Icon Service allows us to create pseudo family maps that combine icons added via either setting a family of font icons or adding SVGs under a common umbrella so that it’s easier to reference them.

// The `setIconRef` sets an icon reference in the icon map,
// assuming material and fa-solid have been added as families,
iconService.setIconRef('home', 'my-family', { family: 'material', name: 'home' });
iconService.setIconRef('home-alt', 'my-family', { family: 'fa-solid', name: 'home' });
iconService.setIconRef('car', 'my-family', { family: 'fa-solid', name: 'car' });

Later in markup:

<igx-icon family="my-family" name="home"></igx-icon>
<igx-icon family="my-family" name="home-alt"></igx-icon>
<igx-icon family="my-family" name="car"></igx-icon>

Icon Retrieval

It is possible to get an icon for a given family and icon name in order to read the original icon type, name, family, and className.

const { family, className, name, type } = iconService.getIcon('my-family', 'car');

console.log(family); // -> 'fa-solid'
console.log(className); // -> 'fas'
console.log(name); // -> 'fa-car'
console.log(type); // -> 'font'

Internal Usage

Starting with version 18.1.0 of Ignite UI for Angular, we added a new setFamily method that allows us to create new families of icons in the Icon Service and associate them with CSS classes, types, and even prefixes. Additionally, icons used internally are now all declared by reference in a new default family with aliased names (see table bellow).

Alias Target Icon Target Family
add add material
add_child add-child imx-icons
add_row add-row imx-icons
arrow_back arrow_back material
arrow_drop_down arrow_drop_up material
arrow_forward arrow_forward material
arrow_next chevron_right material
arrow_prev chevron_left material
case_sensitive case-sensitive imx-icons
carousel_next arrow_forward material
carousel_prev arrow_back material
chevron_left chevron_left material
chevron_right chevron_right material
clock access_time material
close close material
collapse expand_less material
confirm check material
date_range date_range material
delete delete material
drag_indicator drag_indicator material
edit edit material
error error material
expand expand_more material
expand_more expand_more material
file_download file_download material
filter_all select-all imx-icons
filter_before is-before imx-icons
filter_contains contains imx-icons
filter_does_not_contain does-not-contain imx-icons
filter_empty is-empty imx-icons
filter_equal equals imx-icons
filter_false is-false imx-icons
filter_greater_than greater-than imx-icons
filter_greater_than_or_equal greater-than-or-equal imx-icons
filter_in is-in imx-icons
filter_last_month last-month imx-icons
filter_last_year last-year imx-icons
filter_less_than less-than imx-icons
filter_less_than_or_equal less-than-or-equal imx-icons
filter_next_month next-month imx-icons
filter_next_year next-year imx-icons
filter_not_empty not-empty imx-icons
filter_not_equal not-equal imx-icons
filter_not_null is-not-null imx-icons
filter_null is-null imx-icons
filter_starts_with starts-with imx-icons
filter_this_month this-month imx-icons
filter_this_year this-year imx-icons
filter_today today imx-icons
filter_true is-true imx-icons
filter_yesterday yesterday imx-icons
first_page first_page material
group_work group_work material
hide visibility_off material
import_export import_export material
input_collapse arrow_drop_up material
input_clear clear material
input_expand arrow_drop_down material
jump_down jump-down imx-icons
jump_up jump-up imx-icons
last_page last_page material
more_vert more_vert material
next navigate_next material
pin pin-left imx-icons
prev navigate_before material
refresh refresh material
remove cancel material
search search material
selected done material
show visibility material
sort_asc arrow_upward material
sort_desc arrow_downward material
functions functions material
table_rows table_rows material
today calendar_today material
tree_collapse expand_more material
tree_expand chevron_right material
unfold_less unfold_less material
unfold_more unfold_more material
unpin unpin-left imx-icons
view_column view_column material

To take advantage of changing the internal icons by reference, as opposed by to creating custom templates, you can do the following to replace the expand/collapse icons in the combo and select components:

iconService.setIconRef('input_expand', 'default', {
    name: 'arrow_downward',
    family: 'material',
});

iconService.setIconRef('input_collapse', 'default', {
    name: 'arrow_upward',
    family: 'material',
});

This will set the expand and collapse icons to the arrow_downward and arrow_upward ligatures, respectively, from the material font family for all combo and select components.

Here’s a breakdown of all icons as used by each component:

Action Strip

Icon Description
add_child Used by the popup menu.
add_row Used by the popup menu.
more_vert Used by the popup menu.

Calendar

Icon Description
arrow_prev Used by the header for navigating between months/years.
arrow_next Used by the header for navigating between months/years.
Icon Description
carousel_prev Used for navigating between slides.
carousel_next Used for navigating between slides.

Chip

Icon Description
selected Used to indicate that a chip is selected.
remove Used for the remove button.

Combo (incl. Simple Combo)

Icon Description
case_sensitive Used to indicate and toggle case-sensitive filtering.
input_clear Used for the clear button.
input_expand Used for the toggle button when the combo menu is collapsed.
input_collapse Used for the toggle button when the combo menu is expanded.

Date Picker

Icon Description
today Used for the toggle button that triggers the picker.
input_clear Used for the clear button.

Date Range Picker

Icon Description
date_range Used for the toggle button that triggers the picker.

Expansion Panel

Icon Description
expand Used for the toggle button that triggers the expanded state.
collapse Used for the toggle button that triggers the collapsed state.

Grid

Icon Description
add Used in excel-filter menu to add filter entry.
arrow_back Used in various UI elements for moving a column backwards.
arrow_drop_down Used in various buttons to indicate toggleable menus.
arrow_forward Used in various UI elements for moving a column forwards.
cancel Used in various UI elements for canceling operations.
chevron_right Used to indicate expandable menus, like in the excel style filtering.
close Used to close an expanded menu.
confirm Used to confirm an operation.
drag_indicator Used to show a handle to indicate an item can be dragged.
error Used in editable cells to indicate erroneous data input.
expand_more Used by the excel filtering menu to indicate the addition of more filters.
file_download Used by the excel filter exporter.
filter_* Used for various filtering operands.
group_work Used by the group-by drop area.
hide Used by various UI elements for hiding columns.
import_export Used by the pivot data selector for moving.
input_clear Used by input fields for clearing input data.
next Used by the filtering row menu to navigate between chips.
pin Used by various UI elements for column pinning.
prev Used by the filtering row menu to navigate between chips.
remove Used by various UI elements as a removal indicator.
refresh Used by the filtering row menu to reload the filters.
selected Used by various UI elements to indicated active selection.
show Used by various UI elements for showing columns.
sort_asc Used by various UI elements to indicate sorting direction.
sort_desc Used by various UI elements to indicate sorting direction.
functions Used by the pivot grid and data selectors.
table_rows Used by the pivot grid data selector.
tree_collapse Used by tree-like structure to show less details.
tree_expand Used by tree-like structure to show more details.
unpin Used by various UI elements for column pinning.
unfold_less Used by the hierarchical grid to collapse all rows.
unfold_more Used by the hierarchical grid to expand all rows.
view_column Used by the pivot data selector.

Input Group

Icon Description
input_clear Used for the clear button.

Paginator

Icon Description
first_page Used by the button used for navigating to the first page.
last_page Used by the button used for navigating to the last page.
prev Used by the button used for navigating to the previous page.
next Used by the button used for navigating to the next page.

Query Builder

Icon Description
add Used by the button for adding new filter entries.
close Used by the button that closes the contextual menu.
edit Used by the button for editing filter entries.
confirm Used by the button to confirm adding new filter entries.
ungroup Used by the button to ungroup filter entries.
delete Used by the button to delete filter entries.
filter_* Used for various filtering operands.

Select

Icon Description
input_expand Used for the toggle button when the select menu is collapsed.
input_collapse Used for the toggle button when the select menu is expanded.

Tabs

Icon Description
prev Used by the button used for navigating to the previous tab.
next Used by the button used for navigating to the next tab.

Time Picker

Icon Description
clock Used for the toggle button that triggers the picker.

Tree

Icon Description
tree_expand Used for the toggle button that triggers the picker.
tree_collapse Used for the toggle button that triggers the picker.

API

Here’s a quick summary of all methods available via the Ignite UI for Angular Icon Service.

Add Family

setFamily(name: string, meta: IconFamilyMeta): IgxIconService;

Icon References

Set ONLY if NOT already present the icon map:

addIconRef(name: string, family: string, icon: IconMeta): void;

Set an Icon reference in the icon map (overridden if already present):

setIconRef(name: string, family: string, icon: IconMeta): void;

Get and Icon reference

getIconRef(family: string, name: string): IconReference;

SVG Icons

From URI:

addSvgIcon(name: string, url: string, family: string, stripMeta = false): void;

From string:

addSvgIconFromText(name: string, iconText: string, family: string, stripMeta = false): void;

API References

Additional Resources


Our community is active and always welcoming to new ideas.