import React, {
DetailedHTMLProps,
InputHTMLAttributes,
useEffect,
useRef,
} from "react";
import Stack from "./Stack";
import Typography from "./Typography";
import classNames from "./lib/classNames";
export interface CustomSliderProps {
labels?: string[];
}
export interface SliderProps
extends DetailedHTMLProps<
InputHTMLAttributes,
HTMLInputElement
>,
CustomSliderProps {}
export default function Slider({ className, labels, ...rest }: SliderProps) {
const slider = useRef(null);
useEffect(() => {
if (slider) {
setBackgroundSize(slider.current!);
slider.current?.addEventListener("input", () =>
setBackgroundSize(slider.current!)
);
}
function setBackgroundSize(input: HTMLInputElement) {
input.style.setProperty(
"--background-size",
`${getBackgroundSize(input)}%`
);
}
function getBackgroundSize(input: HTMLInputElement) {
const min = +input.min || 0;
const max = +input.max || 100;
const value = +input.value;
return ((value - min) / (max - min)) * 100;
}
}, [slider]);
return (
{labels?.length ? (
{labels.map((label) => (
{label}
))}
) : null}
);
}