Slider
Slider captures a value or range on a continuous scale.
@duskmoon-dev/components/slider Usage
When to use
- Use it inside forms, filters, settings, and any workflow that captures user input.
- Prefer controlled props when the value must stay synchronized with application state.
Implementation notes
Features
Documents default values, value props, and change callbacks for form integration.
Surfaces status, size, disabled, and option data patterns where the component supports them.
Slider is most often configured through `value`, `defaultValue`, `onChange`, `onAfterChange`.
Renders with default DuskMoon classes
Feature Demos
Feature demos are authored for the component page, then supplemented with behavior scenarios from the component test coverage.
Colors
Slider supports the full semantic color palette: primary, secondary, tertiary, accent, neutral, base, info, success, warning, error.
import "@duskmoon-dev/components/styles.css";
import { Slider } from "@duskmoon-dev/components/slider";
const colors = [
"primary",
"secondary",
"tertiary",
"accent",
"neutral",
"base",
"info",
"success",
"warning",
"error"
] as const;
export function SliderColorsDemo() {
return (<div style={{ display: "grid", gap: 14 }}>
{colors.map((color) => (
<Slider key={color} color={color} defaultValue={64} tooltip={{ open: true }} />
))}
</div>);
} Basic usage
Import the component stylesheet and Slider from its package subpath, then render it with the core props.
import "@duskmoon-dev/components/styles.css";
import { Slider } from "@duskmoon-dev/components/slider";
export function Example() {
return (<Slider
defaultValue={48}
marks={{ 0: "0", 50: "50", 100: "100" }}
tooltip={{ open: true }}
color="secondary"
/>);
} Renders with default DuskMoon classes
test-backedSlider scenario from the component test coverage: renders with default duskmoon classes.
import "@duskmoon-dev/components/styles.css";
import { Slider } from "@duskmoon-dev/components/slider";
export function SliderRendersWithDefaultDuskMoonDemo() {
return (<Slider
defaultValue={48}
marks={{ 0: "0", 50: "50", 100: "100" }}
tooltip={{ open: true }}
color="secondary"
/>);
} Uses defaultValue for fill and thumb position
test-backedSlider scenario from the component test coverage: uses defaultvalue for fill and thumb position.
import "@duskmoon-dev/components/styles.css";
import { Slider } from "@duskmoon-dev/components/slider";
export function SliderUsesDefaultValueForFillDemo() {
return (<Slider
defaultValue={48}
marks={{ 0: "0", 50: "50", 100: "100" }}
tooltip={{ open: true }}
color="secondary"
/>);
} Renders range values with two thumbs
test-backedSlider scenario from the component test coverage: renders range values with two thumbs.
import "@duskmoon-dev/components/styles.css";
import { Slider } from "@duskmoon-dev/components/slider";
export function SliderRendersRangeValuesWithDemo() {
return (<Slider
defaultValue={48}
marks={{ 0: "0", 50: "50", 100: "100" }}
tooltip={{ open: true }}
color="secondary"
/>);
} Calls onChange and onAfterChange with changed scalar value
test-backedSlider scenario from the component test coverage: calls onchange and onafterchange with changed scalar value.
import "@duskmoon-dev/components/styles.css";
import { Slider } from "@duskmoon-dev/components/slider";
export function SliderCallsOnChangeAndOnAfterChangeDemo() {
return (<Slider
defaultValue={48}
marks={{ 0: "0", 50: "50", 100: "100" }}
tooltip={{ open: true }}
color="secondary"
/>);
} Applies disabled and vertical classes
test-backedSlider scenario from the component test coverage: applies disabled and vertical classes.
import "@duskmoon-dev/components/styles.css";
import { Slider } from "@duskmoon-dev/components/slider";
export function SliderAppliesDisabledAndVerticalDemo() {
return (<Slider
defaultValue={48}
marks={{ 0: "0", 50: "50", 100: "100" }}
tooltip={{ open: true }}
color="secondary"
/>);
} Passes min and max to range inputs
test-backedSlider scenario from the component test coverage: passes min and max to range inputs.
import "@duskmoon-dev/components/styles.css";
import { Slider } from "@duskmoon-dev/components/slider";
export function SliderPassesMinAndMaxDemo() {
return (<Slider
defaultValue={48}
marks={{ 0: "0", 50: "50", 100: "100" }}
tooltip={{ open: true }}
color="secondary"
/>);
} Renders marks and active mark classes
test-backedSlider scenario from the component test coverage: renders marks and active mark classes.
import "@duskmoon-dev/components/styles.css";
import { Slider } from "@duskmoon-dev/components/slider";
export function SliderRendersMarksAndActiveDemo() {
return (<Slider
defaultValue={48}
marks={{ 0: "0", 50: "50", 100: "100" }}
tooltip={{ open: true }}
color="secondary"
/>);
} Applies custom className
test-backedSlider scenario from the component test coverage: applies custom classname.
import "@duskmoon-dev/components/styles.css";
import { Slider } from "@duskmoon-dev/components/slider";
export function SliderAppliesCustomClassNameDemo() {
return (<Slider
defaultValue={48}
marks={{ 0: "0", 50: "50", 100: "100" }}
tooltip={{ open: true }}
color="secondary"
/>);
} Theme aware
Docs previews inherit the DuskMoon data-theme value. Use the header switch to compare light and dark rendering.
<div data-theme="sunshine">
<Slider
defaultValue={48}
marks={{ 0: "0", 50: "50", 100: "100" }}
tooltip={{ open: true }}
color="secondary"
/>
</div>
<div data-theme="moonlight">
<Slider
defaultValue={48}
marks={{ 0: "0", 50: "50", 100: "100" }}
tooltip={{ open: true }}
color="secondary"
/>
</div> API
The API reference below lists every parsed exported type or interface for Slider. Start with `value`, `defaultValue`, `onChange`, `onAfterChange` for common usage.
packages/components/src/components/slider/Slider.types.ts
Scenarios: packages/components/src/components/slider/Slider.test.tsx | Prop | Type | Required | Description |
|---|---|---|---|
value | SliderValue | No | value configures Slider. |
defaultValue | SliderValue | No | defaultValue configures Slider. |
onChange | (value: SliderValue) => void | No | onChange configures Slider. |
onAfterChange | (value: SliderValue) => void | No | onAfterChange configures Slider. |
min | number | No | min configures Slider. |
max | number | No | max configures Slider. |
step | number | null | No | step configures Slider. |
range | boolean | SliderRangeConfig | No | range configures Slider. |
disabled | boolean | No | disabled configures Slider. |
vertical | boolean | No | vertical configures Slider. |
marks | SliderMarks | No | marks configures Slider. |
tooltip | SliderTooltip | No | tooltip configures Slider. |
reverse | boolean | No | reverse configures Slider. |
size | SliderSize | No | size configures Slider. |
color | SliderColor | No | color configures Slider. |
onInputKeyDown | (event: KeyboardEvent<HTMLInputElement>) => void | No | onInputKeyDown configures Slider. |
| Prop | Type | Required | Description |
|---|---|---|---|
label | ReactNode | No | label configures Slider. |
style | CSSProperties | No | style configures Slider. |
className | string | No | className configures Slider. |
| Prop | Type | Required | Description |
|---|---|---|---|
open | boolean | No | open configures Slider. |
formatter | SliderTooltipFormatter | null | No | formatter configures Slider. |
| Prop | Type | Required | Description |
|---|---|---|---|
draggableTrack | boolean | No | draggableTrack configures Slider. |
number | [number, number] "sm" | "md" | "lg" | "primary" | "secondary" | "tertiary" | "accent" | "neutral" | "base" | "info" | "success" | "warning" | "error" ReactNode | SliderMarkConfig Record<number, SliderMark> (value: number) => ReactNode | boolean | SliderTooltipFormatter | SliderTooltipConfig