import * as Sliders from '@radix-ui/react-slider'; import { useRef } from 'react'; import * as styles from './index.css'; export interface SliderProps extends Sliders.SliderProps { width?: number; containerStyle?: React.CSSProperties; rootStyle?: React.CSSProperties; trackStyle?: React.CSSProperties; rangeStyle?: React.CSSProperties; thumbStyle?: React.CSSProperties; noteStyle?: React.CSSProperties; nodes?: number[]; // The values where the nodes should be placed } export const Slider = ({ value, min = 0, max = 10, step, width = 250, nodes, containerStyle, rootStyle, trackStyle, rangeStyle, thumbStyle, noteStyle, ...props }: SliderProps) => { const sliderRef = useRef(null); return (
{!!nodes && nodes.map((nodeValue, index) => (
= nodeValue} style={{ left: `${((nodeValue - (min !== undefined ? min : 0)) / (max !== undefined ? max - (min !== undefined ? min : 0) : 1)) * 100}%`, transform: index === 0 ? 'translateY(-50%)' : index === nodes.length - 1 ? 'translateY(-50%) translateX(-100%)' : undefined, ...noteStyle, }} /> ))}
); };