toggle

A two-state button that can be either on or off.

PreviousNext
import { Component } from '@angular/core';

import { NgIcon, provideIcons } from '@ng-icons/core';
import { lucideBookmark } from '@ng-icons/lucide';

import { ZardToggleComponent } from '../toggle.component';

@Component({
  selector: 'z-demo-toggle-default',
  imports: [ZardToggleComponent, NgIcon],
  template: `
    <z-toggle zAriaLabel="Toggle bookmark" zSize="sm" zType="outline">
      <ng-icon name="lucideBookmark" class="group-data-[state=on]/toggle:[&_path]:fill-foreground" />
      Bookmark
    </z-toggle>
  `,
  viewProviders: [provideIcons({ lucideBookmark })],
})
export class ZardDemoToggleDefaultComponent {}

Installation

Copy
npx zard-cli@latest add toggle

Usage

import { ZardToggleComponent } from '@/shared/components/toggle/toggle.component';
Copy
<z-toggle>Toggle</z-toggle>
Copy

Examples

outline

Use zType="outline" for an outline style.

import { Component } from '@angular/core';

import { NgIcon, provideIcons } from '@ng-icons/core';
import { lucideBold, lucideItalic } from '@ng-icons/lucide';

import { ZardToggleComponent } from '../toggle.component';

@Component({
  selector: 'z-demo-toggle-outline',
  imports: [ZardToggleComponent, NgIcon],
  template: `
    <div class="flex items-center gap-2">
      <z-toggle zAriaLabel="Toggle italic" zType="outline">
        <ng-icon name="lucideItalic" />
        Italic
      </z-toggle>
      <z-toggle zAriaLabel="Toggle bold" zType="outline">
        <ng-icon name="lucideBold" />
        Bold
      </z-toggle>
    </div>
  `,
  viewProviders: [provideIcons({ lucideBold, lucideItalic })],
})
export class ZardDemoToggleOutlineComponent {}

with text

import { Component } from '@angular/core';

import { NgIcon, provideIcons } from '@ng-icons/core';
import { lucideItalic } from '@ng-icons/lucide';

import { ZardToggleComponent } from '../toggle.component';

@Component({
  selector: 'z-demo-toggle-with-text',
  imports: [ZardToggleComponent, NgIcon],
  template: `
    <z-toggle zAriaLabel="Toggle italic">
      <ng-icon name="lucideItalic" />
      Italic
    </z-toggle>
  `,
  viewProviders: [provideIcons({ lucideItalic })],
})
export class ZardDemoToggleWithTextComponent {}

size

Use the zSize input to change the size of the toggle.

import { Component } from '@angular/core';

import { ZardToggleComponent } from '../toggle.component';

@Component({
  selector: 'z-demo-toggle-size',
  imports: [ZardToggleComponent],
  template: `
    <div class="flex items-center gap-2">
      <z-toggle zAriaLabel="Toggle small" zSize="sm" zType="outline">Small</z-toggle>
      <z-toggle zAriaLabel="Toggle default" zSize="default" zType="outline">Default</z-toggle>
      <z-toggle zAriaLabel="Toggle large" zSize="lg" zType="outline">Large</z-toggle>
    </div>
  `,
})
export class ZardDemoToggleSizeComponent {}

disabled

import { Component } from '@angular/core';

import { ZardToggleComponent } from '../toggle.component';

@Component({
  selector: 'z-demo-toggle-disabled',
  imports: [ZardToggleComponent],
  template: `
    <div class="flex items-center gap-2">
      <z-toggle zAriaLabel="Toggle disabled" zDisabled>Disabled</z-toggle>
      <z-toggle zAriaLabel="Toggle disabled outline" zType="outline" zDisabled>Disabled</z-toggle>
    </div>
  `,
})
export class ZardDemoToggleDisabledComponent {}

with

Light is off.
import { Component, computed, signal } from '@angular/core';

import { NgIcon, provideIcons } from '@ng-icons/core';
import { lucideLightbulb, lucideLightbulbOff } from '@ng-icons/lucide';

import { ZardToggleComponent } from '../toggle.component';

@Component({
  selector: 'z-demo-toggle-with-bindings',
  imports: [ZardToggleComponent, NgIcon],
  template: `
    <div class="flex flex-col items-center gap-8">
      <z-toggle zAriaLabel="Turn on the light" [(zValue)]="lightOn" zType="outline">
        <ng-icon [name]="bulb()" />
      </z-toggle>
      <span>Light is {{ state() }}.</span>
    </div>
  `,
  viewProviders: [provideIcons({ lucideLightbulb, lucideLightbulbOff })],
})
export class ZardDemoToggleWithBindingsComponent {
  protected readonly lightOn = signal(false);
  protected readonly bulb = computed(() => (this.lightOn() ? 'lucideLightbulb' : 'lucideLightbulbOff'));
  protected readonly state = computed(() => (this.lightOn() ? 'on' : 'off'));
}

API Reference

[z-toggle]Component

A two-state button that can be either on or off.

PropertyDescriptionTypeDefault
[class] Custom CSS classes string ''
[zSize] Toggle size 'sm' | 'default' | 'lg' 'default'
[zType] Visual style 'default' | 'outline' 'default'
[(zValue)] Toggle value boolean false
[zDisabled] Disables the toggle (also integrates with Angular Forms) boolean false
[zAriaLabel] Accessible label for screen readers (required) string (required) -
(zToggleClick) Emitted when the toggle is clicked void -
(zToggleHover) Emitted when the toggle is hovered void -
(zToggleChange) Emitted when the toggle value changes boolean -
github iconwhatsapp icondiscord iconX icon

Made with in Brazil. Open source and available on GitHub .