Some checks failed
No response / noResponse (push) Has been cancelled
CI / Continuous releases (push) Has been cancelled
CI / test-dev (macos-latest) (push) Has been cancelled
CI / test-dev (ubuntu-latest) (push) Has been cancelled
CI / test-dev (windows-latest) (push) Has been cancelled
Maintenance / main (push) Has been cancelled
Scorecards supply-chain security / Scorecards analysis (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
59 lines
1.6 KiB
TypeScript
59 lines
1.6 KiB
TypeScript
import * as React from 'react';
|
|
import Box from '@mui/material/Box';
|
|
import Slider from '@mui/material/Slider';
|
|
|
|
function valuetext(value: number) {
|
|
return `${value}°C`;
|
|
}
|
|
|
|
const minDistance = 10;
|
|
|
|
export default function MinimumDistanceSlider() {
|
|
const [value1, setValue1] = React.useState<number[]>([20, 37]);
|
|
|
|
const handleChange1 = (event: Event, newValue: number[], activeThumb: number) => {
|
|
if (activeThumb === 0) {
|
|
setValue1([Math.min(newValue[0], value1[1] - minDistance), value1[1]]);
|
|
} else {
|
|
setValue1([value1[0], Math.max(newValue[1], value1[0] + minDistance)]);
|
|
}
|
|
};
|
|
|
|
const [value2, setValue2] = React.useState<number[]>([20, 37]);
|
|
|
|
const handleChange2 = (event: Event, newValue: number[], activeThumb: number) => {
|
|
if (newValue[1] - newValue[0] < minDistance) {
|
|
if (activeThumb === 0) {
|
|
const clamped = Math.min(newValue[0], 100 - minDistance);
|
|
setValue2([clamped, clamped + minDistance]);
|
|
} else {
|
|
const clamped = Math.max(newValue[1], minDistance);
|
|
setValue2([clamped - minDistance, clamped]);
|
|
}
|
|
} else {
|
|
setValue2(newValue);
|
|
}
|
|
};
|
|
|
|
return (
|
|
<Box sx={{ width: 300 }}>
|
|
<Slider
|
|
getAriaLabel={() => 'Minimum distance'}
|
|
value={value1}
|
|
onChange={handleChange1}
|
|
valueLabelDisplay="auto"
|
|
getAriaValueText={valuetext}
|
|
disableSwap
|
|
/>
|
|
<Slider
|
|
getAriaLabel={() => 'Minimum distance shift'}
|
|
value={value2}
|
|
onChange={handleChange2}
|
|
valueLabelDisplay="auto"
|
|
getAriaValueText={valuetext}
|
|
disableSwap
|
|
/>
|
|
</Box>
|
|
);
|
|
}
|