Skip to content

Multi Thumb Slider

Adjust several ordered values on one shared numeric track.

Usage

Two thumb range

Use two thumbs to choose the lower and upper bounds of an interval.

Campaign budgetChoose the monthly spend range$120 – $340
$120$340
$50 · Minimum$275 · Typical$500 · Maximum

Drag a handle or use the arrow keys for precise steps.

Three thumb thresholds

Use three thumbs to divide one numeric range into meaningful thresholds.

Release quality gatesSet warning, review, and blocking thresholds20% · 55% · 85%
20%55%85%
0% · Open50% · Review100% · Block

Drag a handle or use the arrow keys for precise steps.

Crossing thumbs

Prevent or normalize thumb crossing according to the configured range policy.

Search price rangeKeep at least $10 between both limits$35 – $70
$35$70
$0 · Minimum$50 · Typical$100 · Maximum

Drag a handle or use the arrow keys for precise steps.

Controlled range

Let the parent own every thumb value in the selected interval.

Campaign budgetChoose the monthly spend range$120 – $340
$120$340
$50 · Minimum$275 · Typical$500 · Maximum

Drag a handle or use the arrow keys for precise steps.

API

Vue package: @sectile/vue/multi-thumb-slider

Components
  • MultiThumbSliderRoot
  • MultiThumbSliderTrack
  • MultiThumbSliderRange
  • MultiThumbSliderThumb

Props

MultiThumbSliderRootProps

as

Element or component rendered for this part.

asChild

Whether to merge this part into its single child instead of rendering a wrapper.

defaultValue

Initial value used when the component owns its state.

disabled

Whether interaction is unavailable.

form

ID of the native form associated with the control.

formatValue

Formats a value for visible text.

getThumbLabel

Returns the accessible label for a slider thumb.

label

Accessible name announced for the control.

max

Largest value accepted by the component.

min

Smallest value accepted by the component.

modelValue

Current value when state is controlled by the parent.

name

Name used for native form submission.

orientation

Axis used for layout and keyboard movement.

policies

Behavior policies that customize validation, movement, or selection.

readonly

Whether the value can be inspected but not changed.

required

Whether the control must contain a valid value before submission.

step

Smallest value increment accepted by the component.

thumbs

Ordered slider thumb definitions.

MultiThumbSliderThumbProps

as

Element or component rendered for this part.

asChild

Whether to merge this part into its single child instead of rendering a wrapper.

value

Current value exposed by this contract.

MultiThumbSliderPartProps

as

Element or component rendered for this part.

asChild

Whether to merge this part into its single child instead of rendering a wrapper.

Slots

MultiThumbSliderRootSlotProps

activeThumb

Index of the thumb currently being adjusted.

disabled

Whether interaction is unavailable.

percentages

Percentage position for each thumb.

readonly

Whether the value can be inspected but not changed.

values

Current ordered value collection.

MultiThumbSliderThumbSlotProps

activeThumb

Index of the thumb currently being adjusted.

disabled

Whether interaction is unavailable.

index

Zero-based position in the parent collection.

percentage

Current value expressed as a percentage of its range.

percentages

Percentage position for each thumb.

readonly

Whether the value can be inspected but not changed.

value

Current value exposed by this contract.

values

Current ordered value collection.

Events

MultiThumbSliderRoot

update:modelValue

Emitted when the component requests a new controlled value.

Other types

MultiThumbSliderThumbLabelResolver

ts
type MultiThumbSliderThumbLabelResolver = NonNullable<MultiThumbSliderRootProps['getThumbLabel']>

MultiThumbSliderValueFormatter

ts
type MultiThumbSliderValueFormatter = NonNullable<MultiThumbSliderRootProps['formatValue']>

MultiThumbSliderValueChangeHandler

ts
type MultiThumbSliderValueChangeHandler = (values: readonly string[]) => void

Parts

Shared scope: [data-scope="multi-thumb-slider"]. Combine it with a part selector to keep styles local to this component.

PartSelectorRoleExtra attributes
root[data-part="root"]Defines the component boundary and owns its composed parts.
track[data-part="track"]Defines the measurable path used by one or more thumbs.
range[data-part="range"]Shows the active interval on the track.
thumb[data-part="thumb"]Controls one value along the track.

Keyboard interaction

KeyBehavior
Arrow Right / Arrow UpIncrease the value by one step.
Arrow Left / Arrow DownDecrease the value by one step.
Home / EndMove to the minimum or maximum value.
Page Up / Page DownChange the value by the configured page step when supported.

Accessibility

Every thumb is separately named and exposes its own minimum, maximum, current value, and orientation.

See the corresponding WAI-ARIA pattern for the host accessibility contract.

Released under the MIT License.