Skip to main content

Overview

The RangeSlider component provides a dual-handle slider for selecting a range of values within a specified min/max range.

Basic Usage

  • Code
  • Preview
import { useState } from "react";
import { RangeSlider } from '@peppermint-design/devreadykit';

export default function App() {
  const [range, setRange] = useState([20, 80]);

  return (
    <RangeSlider
      value={range}
      onValueChange={setRange}
      min={0}
      max={100}
    />
  );
}

With Labels

  • Code
  • Preview
import { RangeSlider } from '@peppermint-design/devreadykit';

export default function PriceRange() {
  return (
    <RangeSlider 
      label="Price Range"
      min={0}
      max={1000}
      defaultValue={[100, 500]}
      formatValue={(value) => `$${value}`}
    />
  );
}

Custom Ranges

  • Code
  • Preview
import { RangeSlider } from '@peppermint-design/devreadykit';

export default function CustomRanges() {
  return (
    <div className="space-y-4">
      <RangeSlider 
        label="Temperature Range"
        min={-20}
        max={50}
        defaultValue={[10, 30]}
        step={5}
        formatValue={(value) => `${value}°C`}
      />

      <RangeSlider 
        label="Age Range"
        min={18}
        max={100}
        defaultValue={[25, 65]}
        step={1}
        formatValue={(value) => `${value} years`}
      />
    </div>
  );
}

Without Value Display

  • Code
  • Preview
import { RangeSlider } from '@peppermint-design/devreadykit';

export default function VolumeRange() {
  return (
    <RangeSlider 
      label="Volume Range"
      min={0}
      max={100}
      showValue={false}
    />
  );
}

Disabled State

  • Code
  • Preview
import { RangeSlider } from '@peppermint-design/devreadykit';

export default function DisabledRange() {
  return (
    <RangeSlider 
      label="Disabled Range"
      min={0}
      max={100}
      defaultValue={[30, 70]}
      disabled
    />
  );
}

Props

PropTypeDefaultDescription
value[number, number]Current range (controlled)
defaultValue[number, number][20, 80]Default range (uncontrolled)
onValueChange(value: [number, number]) => voidChange handler
minnumber0Minimum value
maxnumber100Maximum value
stepnumber1Step increment
disabledbooleanfalseDisabled state
showValuebooleantrueShow current values
formatValue(value: number) => string(v) => Math.round(v) + '%'Value formatter
labelReact.ReactNodeLabel content
classNamestringAdditional CSS classes
trackClassNamestringTrack CSS classes

Examples

Price Filter

  • Code
  • Preview
import { useState } from "react";
import { RangeSlider } from '@peppermint-design/devreadykit';

function PriceFilter({ onRangeChange }: { onRangeChange: (range: [number, number]) => void }) {
  const [priceRange, setPriceRange] = useState<[number, number]>([50, 500]);

  return (
    <div className="space-y-4">
      <RangeSlider
        label="Price Range"
        value={priceRange}
        onValueChange={(range) => {
          setPriceRange(range);
          onRangeChange(range);
        }}
        min={0}
        max={1000}
        step={10}
        formatValue={(value) => `$${value}`}
      />
      
      <div className="flex justify-between text-sm text-gray-600">
        <span>Min: ${priceRange[0]}</span>
        <span>Max: ${priceRange[1]}</span>
      </div>
    </div>
  );
}

export default PriceFilter;

Date Range Picker

  • Code
  • Preview
import { useState } from "react";
import { RangeSlider } from '@peppermint-design/devreadykit';

function DateRangePicker() {
  const [yearRange, setYearRange] = useState<[number, number]>([2020, 2024]);
  
  const formatYear = (year: number) => `${year}`;

  return (
    <div className="space-y-4">
      <RangeSlider
        label="Year Range"
        value={yearRange}
        onValueChange={setYearRange}
        min={1990}
        max={2030}
        step={1}
        formatValue={formatYear}
      />
      
      <div className="text-center">
        <span className="text-lg font-medium">
          {yearRange[0]} - {yearRange[1]}
        </span>
      </div>
    </div>
  );
}

export default DateRangePicker;

Filter Component

  • Code
  • Preview
import { useState } from "react";
import { RangeSlider } from '@peppermint-design/devreadykit';

function ProductFilter() {
  const [filters, setFilters] = useState({
    priceRange: [100, 800],
    ratingRange: [3, 5],
    weightRange: [0.5, 5.0]
  });

  return (
    <div className="space-y-6">
      <RangeSlider
        label="Price Range"
        value={filters.priceRange}
        onValueChange={(range) => setFilters(prev => ({ ...prev, priceRange: range }))}
        min={0}
        max={1000}
        step={25}
        formatValue={(value) => `$${value}`}
      />
      
      <RangeSlider
        label="Rating"
        value={filters.ratingRange}
        onValueChange={(range) => setFilters(prev => ({ ...prev, ratingRange: range }))}
        min={1}
        max={5}
        step={0.1}
        formatValue={(value) => `${value.toFixed(1)}★`}
      />
      
      <RangeSlider
        label="Weight (kg)"
        value={filters.weightRange}
        onValueChange={(range) => setFilters(prev => ({ ...prev, weightRange: range }))}
        min={0}
        max={10}
        step={0.1}
        formatValue={(value) => `${value.toFixed(1)}kg`}
      />
    </div>
  );
}

export default ProductFilter;
I