SolanaUISolanaUI

Leverage Slider

A slider component for selecting leverage levels

5x
import { LeverageSlider } from "@/components/sol/leverage-slider";

export function LeverageSliderDemo() {
  return <LeverageSlider defaultValue={[5]} min={1} max={50} step={1} />;
}

Installation

pnpm dlx shadcn@latest add @solanaui/leverage-slider
npx shadcn@latest add @solanaui/leverage-slider
yarn dlx shadcn@latest add @solanaui/leverage-slider

Usage

<LeverageSlider defaultValue={[5]} min={1} max={50} step={1} />

Source Code

"use client";import React from "react";import { Label } from "@/components/ui/label";import { Slider } from "@/components/ui/slider";import { cn } from "@/lib/utils";interface LeverageSliderProps {  min?: number;  max?: number;  step?: number;  value?: number[];  defaultValue?: number[];  onValueChange?: (value: number[]) => void;  className?: string;}const LeverageSlider = ({  min,  max,  step,  value,  defaultValue,  onValueChange,  className,}: LeverageSliderProps) => {  const [displayValue, setDisplayValue] = React.useState(    defaultValue?.[0] ?? min ?? 0,  );  const currentValue = value?.[0] ?? displayValue;  const handleValueChange = (newValue: number[]) => {    setDisplayValue(newValue[0]);    onValueChange?.(newValue);  };  const handleMinClick = () => {    if (min !== undefined) {      handleValueChange([min]);    }  };  const handleMaxClick = () => {    if (max !== undefined) {      handleValueChange([max]);    }  };  return (    <div className={cn("w-full space-y-2", className)}>      <div className="flex items-center justify-between text-sm">        <Label className="text-muted-foreground">Leverage</Label>        <span className="font-medium">{currentValue}x</span>      </div>      <Slider        min={min}        max={max}        step={step}        value={value ?? [displayValue]}        onValueChange={handleValueChange}      />      {(min !== undefined || max !== undefined) && (        <div className="flex mt-2 text-xs text-muted-foreground">          {min !== undefined && (            <button              type="button"              onClick={handleMinClick}              className="hover:text-foreground transition-colors cursor-pointer"            >              {min}x            </button>          )}          {max !== undefined && (            <button              type="button"              onClick={handleMaxClick}              className="ml-auto hover:text-foreground transition-colors cursor-pointer"            >              {max}x            </button>          )}        </div>      )}    </div>  );};export type { LeverageSliderProps };export { LeverageSlider };