Components/SegmentedSlider
Since 1.0.0BETA

SegmentedSlider

Discrete slider for choosing one value from a fixed set.

This page was migrated by AI, please review carefully

Migration is complete, but please validate against source code and manual review.

SegmentedSlider

TxSegmentedSlider maps a finite list of values onto a slider-like track. Use it when the available values are discrete and should remain visible while the user changes selection.

Basic Usage

SegmentedSlider

Demo will load when visible.
<script setup lang="ts">
import { ref } from 'vue'

const value = ref(1)
const segments = [
  { value: 0, label: 'Small' },
  { value: 1, label: 'Medium' },
  { value: 2, label: 'Large' },
  { value: 3, label: 'XL' },
]
</script>

<template>
  <div style="display: flex; flex-direction: column; gap: 16px; width: 400px;">
    <div>
      <div style="font-size: 12px; opacity: 0.72; margin-bottom: 8px;">
        Current value: {{ value }}
      </div>
      <TxSegmentedSlider v-model="value" :segments="segments" />
    </div>
  </div>
</template>

Custom Options

SegmentedSlider (custom)

Demo will load when visible.
<script setup lang="ts">
import { ref } from 'vue'

const priceValue = ref('pro')
const priceSegments = [
  { value: 'free', label: 'Free' },
  { value: 'pro', label: 'Pro' },
  { value: 'team', label: 'Team' },
  { value: 'enterprise', label: 'Enterprise' },
]

const ratingValue = ref(3)
const ratingSegments = [
  { value: 1, label: '⭐' },
  { value: 2, label: '⭐⭐' },
  { value: 3, label: '⭐⭐⭐' },
  { value: 4, label: '⭐⭐⭐⭐' },
  { value: 5, label: '⭐⭐⭐⭐⭐' },
]
</script>

<template>
  <div style="display: flex; flex-direction: column; gap: 24px; width: 400px;">
    <div>
      <div style="font-size: 14px; margin-bottom: 12px;">
        Price tier selection
      </div>
      <div style="font-size: 12px; opacity: 0.72; margin-bottom: 8px;">
        Current: {{ priceValue }}
      </div>
      <TxSegmentedSlider v-model="priceValue" :segments="priceSegments" />
    </div>

    <div>
      <div style="font-size: 14px; margin-bottom: 12px;">
        Rating selection
      </div>
      <div style="font-size: 12px; opacity: 0.72; margin-bottom: 8px;">
        Current: {{ ratingValue }} stars
      </div>
      <TxSegmentedSlider v-model="ratingValue" :segments="ratingSegments" />
    </div>
  </div>
</template>

API

Props

PropTypeDefaultDescription
modelValuenumber | string0Currently selected segment value.
segmentsSegmentedSliderSegment[][]Ordered segment definitions rendered along the track.
disabledbooleanfalsePrevents click and keyboard selection changes.
showLabelsbooleantrueShows each segment label when a label is provided.
verticalbooleanfalseRenders a vertical track with bottom-to-top progress.

SegmentedSliderSegment

PropTypeDescription
valuenumber | stringValue emitted when the segment is selected.
labelstringOptional text rendered next to the segment marker.

Events

EventParamsDescription
update:modelValue(value: number | string)Emitted when an enabled segment requests a new value.
change(value: number | string)Emitted with the same selected value for change listeners.