Getting StartedInstallation and setup guides 6
FormInput and selection components 26
LayoutWorkflow and structural layout components 10
NavigationMenu surfaces and hierarchical actions 7
OverlayModal and floating layer surfaces 3
FeedbackStatus, empty, progress, and loading placeholder patterns 6
UtilityGeneral-purpose interface utilities 7

API reference

<tng-slider> wraps the headless slider primitive for controlled numeric input. The wrapper owns the range input and integrates with form-field labeling.

tng-slider

Wrapper attachment

html
<tng-slider
  [value]="brightness()"
  (valueChange)="brightness.set($event)"
  [min]="0"
  [max]="100"
  [step]="5"
  aria-label="Brightness"
></tng-slider>
PropertyTypeDetails
value / valueChangenumber / outputControlled numeric model for the committed slider value.
minnumberLower bound forwarded to the inner range input. Defaults to 0.
maxnumberUpper bound forwarded to the inner range input. Defaults to 100.
stepnumberPositive increment forwarded to the inner range input. Defaults to 1.
disabledbooleanDisables the slider and reflects disabled state for styling.
invalid, requiredbooleanForwarded to form-field integration for validation and labeling state.
aria-label, ariaValueTextstring | nullAccessible name and optional human-readable value text for the pointer.

input[tngSlider]

Use the primitive directive when the visual shell needs direct access to the native range input.

Primitive attachment

html
<input
  tngSlider
  [value]="brightness()"
  (input)="onBrightnessInput($event)"
  [min]="0"
  [max]="100"
  [step]="5"
  aria-label="Brightness"
/>
HookTypeDetails
input[tngSlider]DirectiveHeadless attachment for custom range markup while preserving normalized range inputs.
data-slot="slider"AttributeStable styling hook reflected by the primitive input.
data-disabledAttributePresence attribute reflected when the primitive is disabled.

Angular Signal Forms

The slider binds directly with [formField]. Define min and max in the form schema instead of binding them on the same element.

Signal forms wiring

ts
import { Component, signal } from '@angular/core';
import { FormField, form, max, min } from '@angular/forms/signals';
import { TngSliderComponent } from '@tailng-ui/components';

@Component({
  selector: 'app-volume-signal-form',
  standalone: true,
  imports: [FormField, TngSliderComponent],
  template: \`
    <tng-slider
      [formField]="settingsForm.volume"
      aria-label="Volume"
    ></tng-slider>
  \`,
})
export class VolumeSignalFormComponent {
  readonly settingsModel = signal({ volume: 25 });
  readonly settingsForm = form(this.settingsModel, (settings) => {
    min(settings.volume, 0);
    max(settings.volume, 100);
  });
}