Skip to main content
Light Dark System

Shoelace is now Web Awesome!

Web Awesome, like Shoelace before it, has an even larger library of free web components. Plus, it has themes, utilities, patterns, and more.

Switch from Shoelace for free today. Grab Web Awesome Pro and get even more at a 20% discount!

Okay, got it
FYI, Shoelace is no longer actively being developed

But it is still available for use and may receive updates as needed.

Angular

Angular plays nice with custom elements, so you can use Shoelace in your Angular apps with ease.

Installation

Download the npm package

To add Shoelace to your Angular app, install the package from npm.

npm install @shoelace-style/shoelace

Update the Angular Configuration

Next, include a theme. In this example, we’ll import the light theme.

Its also important to load the components by using a <script> tag into the index.html file. However, the Angular way to do it is by adding a script configurations into your angular.json file as follows:

"architect": {
  "build": {
    ...
    "options": {
      ...
      "styles": [
        "src/styles.scss",
        "@shoelace-style/shoelace/dist/themes/light.css"
       ],
      "scripts": [
        "@shoelace-style/shoelace/dist/shoelace.js"
      ]
      ...

Setting up the base path

Next, set the base path for icons and other assets in the main.ts. In this example, we’ll use the CDN as a base path.

import { setBasePath } from '@shoelace-style/shoelace/dist/utilities/base-path';

setBasePath('https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.20.1/cdn/');

Configuration

Then make sure to apply the custom elements schema as shown below.

import { BrowserModule } from '@angular/platform-browser';
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';

import { AppComponent } from './app.component';

@NgModule({
  declarations: [AppComponent],
  imports: [BrowserModule],
  providers: [],
  bootstrap: [AppComponent],
  schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
export class AppModule {}

Reference Shoelace components in your Angular component code

import { SlDrawer } from '@shoelace-style/shoelace';

@Component({
  selector: 'app-drawer-example',
  template: '<div id="page"><button (click)="showDrawer()">Show drawer</button><sl-drawer #drawer label="Drawer" class="drawer-focus" style="--size: 50vw"><p>Drawer content</p></sl-drawer></div>'
})
export class DrawerExampleComponent implements OnInit {

  // use @ViewChild to get a reference to the #drawer element within component template
  @ViewChild('drawer')
  drawer?: ElementRef<SlDrawer>;

  ...

  constructor(...) {
  }

  ngOnInit() {
  }

  ...

  showDrawer() {
    // use nativeElement to access Shoelace components
    this.drawer?.nativeElement.show();
  }
}

Now you can start using Shoelace components in your app!