Scrubber
betaA design-tool number field: drag across a labelled bar to scrub a value, step it from the keyboard, or type it.
- Forms
- 1 file
- 2 npm packages
- Accessibility notes
pnpm dlx @dowel-ui/cli add scrubbernpm packages installed: class-variance-authority, radix-ui.
import { Scrubber } from "@/components/ui/scrubber";Default
Gallery
Sizes
Without Ticks
Drag Only
Disabled
<Scrubber>
| Prop | Type | Default |
|---|---|---|
decimalsDecimal places shown. Defaults to the precision of | number | — |
defaultValue | number | — |
disabled | boolean | false |
editableAllow typing an exact value (Enter or double-click). | boolean | true |
formatValueFormats the displayed value and | (value: number) => string | — |
labelVisible label at the start of the bar. It also names the slider. | ReactNode | "Value" |
largeStepSteps moved by Shift + arrow and Page Up / Page Down. | number | 10 |
max | number | 1 |
min | number | 0 |
nameSubmits the value with a form under this name. | string | — |
onValueChangeCalled on every change: while dragging, per key press, and on a typed entry. | (value: number) => void | — |
onValueCommitCalled when an interaction ends: pointer released, key press or typed entry. | (value: number) => void | — |
size | "sm" | "md" | "lg" | "md" |
step | number | 0.01 |
ticksNumber of evenly spaced tick marks; 0 hides them. | number | 9 |
value | number | — |
Plus every attribute of <div> except defaultValue, onChange, children.
10/10
checks passed
- Tested — passes
- axe assertion — passes
- Keyboard tested — passes
- Storybook examples — passes
- Accessibility documented — passes
- Semantic tokens only — passes
- Motion from tokens — passes
- className merged — passes
- Visible focus — passes
- No fixed widths — passes