diff --git a/packages/mui-material/src/Slider/Slider.test.js b/packages/mui-material/src/Slider/Slider.test.js
index 8f1b0af1dfc19b..b97fba9117295f 100644
--- a/packages/mui-material/src/Slider/Slider.test.js
+++ b/packages/mui-material/src/Slider/Slider.test.js
@@ -1195,6 +1195,44 @@ describe('', () => {
});
});
});
+
+ it(`stops at the max value with custom marks`, () => {
+ const handleChange = stub().callsFake((_event, value) => value);
+ const { getByRole } = render(
+ ({ value }))} step={null} value={30} onChange={handleChange} />
+ );
+
+ const slider = getByRole('slider');
+ expect(slider).to.have.attribute('aria-valuenow', '30');
+
+ act(() => {
+ slider.focus();
+ });
+
+ fireEvent.keyDown(slider, { key: 'ArrowRight' });
+
+ expect(handleChange.callCount).to.equal(0);
+ expect(slider).to.have.attribute('aria-valuenow', '30');
+ });
+
+ it(`stops at the min value with custom marks`, () => {
+ const handleChange = stub().callsFake((_event, value) => value);
+ const { getByRole } = render(
+ ({ value }))} step={null} value={10} onChange={handleChange} />
+ );
+
+ const slider = getByRole('slider');
+ expect(slider).to.have.attribute('aria-valuenow', '10');
+
+ act(() => {
+ slider.focus();
+ });
+
+ fireEvent.keyDown(slider, { key: 'ArrowLeft' });
+
+ expect(handleChange.callCount).to.equal(0);
+ expect(slider).to.have.attribute('aria-valuenow', '10');
+ });
});
describe('warnings', () => {
diff --git a/packages/mui-material/src/Slider/useSlider.ts b/packages/mui-material/src/Slider/useSlider.ts
index 71fef5b75129bb..a5d455b2315426 100644
--- a/packages/mui-material/src/Slider/useSlider.ts
+++ b/packages/mui-material/src/Slider/useSlider.ts
@@ -311,9 +311,9 @@ export function useSlider(parameters: UseSliderParameters): UseSliderReturnValue
let newValue: number | number[] = valueInput;
if (marks && step == null) {
const maxMarksValue = marksValues[marksValues.length - 1];
- if (newValue > maxMarksValue) {
+ if (newValue >= maxMarksValue) {
newValue = maxMarksValue;
- } else if (newValue < marksValues[0]) {
+ } else if (newValue <= marksValues[0]) {
newValue = marksValues[0];
} else {
newValue = newValue < value ? marksValues[marksIndex - 1] : marksValues[marksIndex + 1];