import { Icon } from "@iconify/react"; import { ClickAwayListener, Grid2 as Grid, IconButton, Slider as MuiSlider, Popover, Stack, styled, Typography, TypographyProps, } from "@mui/material"; import { MouseEvent, useState } from "react"; export interface Props { value: number; setValue: (value: number) => void; min: number; max: number; label: string; size?: number; marksFilter?: number; step?: number; infoContent?: TypographyProps["children"]; } export default function Slider({ min, max, label, value, setValue, size, marksFilter, step = 1, infoContent, }: Props) { const [anchorEl, setAnchorEl] = useState(null); const handleOpenPopover = (event: MouseEvent) => { setAnchorEl(event.currentTarget); }; const handleClosePopover = () => { setAnchorEl(null); }; return ( {step === 1 && marksFilter ? label : `${label}: ${value}`} {!!infoContent && ( <> {infoContent} )} ({ value: i + min, label: `${i + min}`, })).filter((_, i) => i % marksFilter === 0) : undefined } step={step} valueLabelDisplay="off" value={value} onChange={(_, value) => setValue(value as number)} aria-labelledby={`input-${label}`} /> ); } const CustomSlider = styled(MuiSlider)(() => ({ ".MuiSlider-markLabel": { fontSize: "0.8rem", lineHeight: "0.8rem", }, ".MuiSlider-thumb": { width: "18px", height: "18px", }, marginBottom: "1rem", }));