Set of directives to build an accessible slider component with support for multiple thumbs, keyboard navigation, and various customization options.
Features
- Supports multiple thumbs
- Keyboard navigation
- Vertical and horizontal orientations
- Customizable step size
- Minimum distance between thumbs
- Inverted values option
- Accessible WAI-ARIA compliant
Installation
Add and import the module into your imports section.
Module
Standalone directives
Anatomy
Directive's set structure.
Input props
SliderRoot Attribute Directive
The root directive to build a slider. Handles the state and event bindings.
Input | Default | Type | Description |
---|---|---|---|
min | 0 | number | Minimum value the slider can have |
max | 100 | number | Maximum value the slider can have |
step | 1 | number | Step increment for value changes |
orientation | horizontal | "horizontal" | "vertical" | Orientation of the slider |
disabled | false | boolean | Whether the slider is disabled |
bigStepFactor | 10 | number | Multiplier for step when using keyboard navigation with shift key |
name | random-id | string | Name for the hidden input field |
minStepsBetweenThumbs | 0 | number | Minimum number of steps between multiple thumbs |
value | [] | number[] | Values for the slider thumbs |
inverted | false | boolean | Whether the slider values are inverted |
Output events
Output | Type | Description |
---|---|---|
valueChange | EventEmitter<number[]> | Emitted when the slider value changes |
valueCommit | EventEmitter<number[]> | Emitted when the user finishes interacting with the slider |
Attribute | Value |
---|---|
data-orientation | "horizontal" | "vertical" |
data-disabled | boolean |
SliderTrack Attribute Directive
Defines the track element where the thumb(s) slide.
Attribute | Value |
---|---|
data-orientation | "horizontal" | "vertical" |
data-disabled | boolean |
SliderRange Attribute Directive
Represents the filled part of the track between the minimum value and the thumb, or between two thumbs.
Attribute | Value |
---|---|
data-orientation | "horizontal" | "vertical" |
data-disabled | boolean |
SliderThumb Attribute Directive
The draggable thumb to change the slider value. Multiple thumbs are supported.
Attribute | Value |
---|---|
data-orientation | "horizontal" | "vertical" |
data-disabled | boolean |
aria-valuemin | Shows minimum value |
aria-valuemax | Shows maximum value |
aria-valuenow | Shows current value |
aria-orientation | Shows orientation |
SliderInput Attribute Directive
A hidden input that syncs with the slider value for form submissions.
Examples
Range Slider (Multiple Thumbs)
Vertical Slider
Keyboard Navigation
Key | Action |
---|---|
Arrow Left | Decrease value by step (or by step * bigStepFactor with Shift) |
Arrow Right | Increase value by step (or by step * bigStepFactor with Shift) |
Arrow Up | Increase value by step (or by step * bigStepFactor with Shift) |
Arrow Down | Decrease value by step (or by step * bigStepFactor with Shift) |
Page Up | Increase value by step * bigStepFactor |
Page Down | Decrease value by step * bigStepFactor |
Home | Set value to minimum |
End | Set value to maximum |
State
SliderStateService
allows to control the inputs and get the slider state.
Access directive API with exportAS
We can access the state of the slider using a template variable. All the directives expose themselves with the same name. We have access to the directive's attributes and also the state
service.
State API - SliderStateService
Documentation for the slider state service API.
Name | Default | Type | Description |
---|---|---|---|
min | 0 | Signal<number> | Minimum value the slider can have |
max | 100 | Signal<number> | Maximum value the slider can have |
step | 1 | Signal<number> | Step increment for value changes |
orientation | horizontal | Signal<"horizontal" | "vertical"> | Orientation of the slider |
disabled | false | Signal<boolean> | Whether the slider is disabled |
bigStepFactor | 10 | Signal<number> | Multiplier for step when using keyboard navigation with shift key |
name | random-id | Signal<string> | Name for the hidden input field |
minStepsBetweenThumbs | 0 | Signal<number> | Minimum number of steps between multiple thumbs |
value | [] | MutableSignal<number[]> | Values for the slider thumbs |
inverted | false | Signal<boolean> | Whether the slider values are inverted |
thumbs | [] | MutableSignal<Thumb[]> | Array of thumb elements |
addThumb | - | (thumb: Thumb) => void | Method to add a thumb to the slider |
Accessibility
The slider is built with accessibility in mind and follows WAI-ARIA patterns:
- Each thumb has the appropriate ARIA attributes (
aria-valuemin
,aria-valuemax
,aria-valuenow
,aria-orientation
) - Keyboard navigation supports all standard interactions
- Focus management is handled properly between thumbs
- Screen reader announcements are provided for value changes