Usage Patterns

Three ways to register icons depending on your application architecture.

1. Provider Function (Recommended)

The recommended approach for standalone applications. Register icons at the application or route level using provideSolarIcons.

typescript
// app.config.ts
import { ApplicationConfig } from '@angular/core';
import { provideSolarIcons } from '@rchernando/solar-icons';
import { HeartBold, StarOutline } from '@rchernando/solar-icons/like';
import { UserLinear } from '@rchernando/solar-icons/users';

export const appConfig: ApplicationConfig = {
  providers: [
    provideSolarIcons(HeartBold, StarOutline, UserLinear)
  ]
};

2. NgModule Pattern

For traditional NgModule-based applications. Import SolarIconsModule.withIcons in your module.

typescript
// app.module.ts
import { SolarIconsModule } from '@rchernando/solar-icons';
import { HeartBold, StarOutline } from '@rchernando/solar-icons/like';

@NgModule({
  imports: [
    SolarIconsModule.withIcons(HeartBold, StarOutline)
  ]
})
export class AppModule {}

3. Imperative Registration

For dynamic or runtime icon loading scenarios. Inject SolarIconsService and call addIcons directly.

typescript
import { Component, inject } from '@angular/core';
import { SolarIconsService } from '@rchernando/solar-icons';
import { HeartBold } from '@rchernando/solar-icons/like';

@Component({
  selector: 'app-my-component',
  template: `<solar-icon name="heart" iconStyle="bold" />`
})
export class MyComponent {
  private iconService = inject(SolarIconsService);

  loadIcons() {
    this.iconService.addIcons(HeartBold);
  }
}

When to Use Each Pattern

PatternBest ForTree-Shakable
provideSolarIcons()Standalone apps, route-level registration, lazy loadingYes
SolarIconsModule.withIcons()NgModule-based applicationsYes
SolarIconsService.addIcons()Dynamic/runtime loading, conditional iconsYes