Skip to content

Commit 23d5d77

Browse files
authored
[Slider] Lowest value for vertical should be at the bottom (#13090)
* [Slider] Lowest value for vertical should be at the bottom * [Slider] Fix lagging transition on vertical slider * [Slider] Fix thumb position on horizontal sliders * [docs] Document how to improve actionable area Document how to apply #11889 which was removed from default implementation in #12967.
1 parent 6b3d12c commit 23d5d77

File tree

6 files changed

+26
-21
lines changed

6 files changed

+26
-21
lines changed

docs/src/pages/lab/slider/CustomIconSlider.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class CustomIconSlider extends React.Component {
3737
<div className={classes.root}>
3838
<Typography id="slider-image">Image thumb</Typography>
3939
<Slider
40-
className={classes.slider}
40+
classes={{ container: classes.slider }}
4141
value={value}
4242
aria-labelledby="slider-image"
4343
onChange={this.handleChange}
@@ -51,11 +51,11 @@ class CustomIconSlider extends React.Component {
5151
/>
5252
<Typography id="slider-icon">Icon thumb</Typography>
5353
<Slider
54-
className={classes.slider}
5554
value={value}
5655
aria-labelledby="slider-icon"
5756
onChange={this.handleChange}
5857
classes={{
58+
container: classes.slider,
5959
thumbIconWrapper: classes.thumbIconWrapper,
6060
}}
6161
thumb={<LensIcon style={{ color: '#2196f3' }} />}

docs/src/pages/lab/slider/DisabledSlider.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ function DisabledSlider(props) {
1717

1818
return (
1919
<div className={classes.root}>
20-
<Slider className={classes.slider} value={0} disabled />
21-
<Slider className={classes.slider} value={50} disabled />
22-
<Slider className={classes.slider} value={100} disabled />
20+
<Slider classes={{ container: classes.slider }} value={0} disabled />
21+
<Slider classes={{ container: classes.slider }} value={50} disabled />
22+
<Slider classes={{ container: classes.slider }} value={100} disabled />
2323
</div>
2424
);
2525
}

docs/src/pages/lab/slider/SimpleSlider.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class SimpleSlider extends React.Component {
3030
<div className={classes.root}>
3131
<Typography id="label">Slider label</Typography>
3232
<Slider
33-
className={classes.slider}
33+
classes={{ container: classes.slider }}
3434
value={value}
3535
aria-labelledby="label"
3636
onChange={this.handleChange}

docs/src/pages/lab/slider/StepSlider.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class StepSlider extends React.Component {
2828
return (
2929
<div className={classes.root}>
3030
<Slider
31-
className={classes.slider}
31+
classes={{ container: classes.slider }}
3232
value={value}
3333
min={0}
3434
max={6}

docs/src/pages/lab/slider/VerticalSlider.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,12 @@ class VerticalSlider extends React.Component {
2828

2929
return (
3030
<div className={classes.root}>
31-
<Slider value={value} onChange={this.handleChange} vertical />
31+
<Slider
32+
classes={{ container: classes.slider }}
33+
value={value}
34+
onChange={this.handleChange}
35+
vertical
36+
/>
3237
</div>
3338
);
3439
}

packages/material-ui-lab/src/Slider/Slider.js

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export const styles = theme => {
1616

1717
const trackTransitions = theme.transitions.create(['width', 'height'], commonTransitionsOptions);
1818
const thumbCommonTransitions = theme.transitions.create(
19-
['width', 'height', 'left', 'right', 'top', 'box-shadow'],
19+
['width', 'height', 'left', 'right', 'bottom', 'box-shadow'],
2020
commonTransitionsOptions,
2121
);
2222
// no transition on the position
@@ -76,6 +76,7 @@ export const styles = theme => {
7676
transform: 'translate(-50%, 0)',
7777
left: '50%',
7878
top: 'initial',
79+
bottom: 0,
7980
width: 2,
8081
},
8182
},
@@ -120,6 +121,9 @@ export const styles = theme => {
120121
'&$jumped': {
121122
boxShadow: `0px 0px 0px ${pressedOutlineRadius * 2}px ${colors.thumbOutline}`,
122123
},
124+
'&$vertical': {
125+
transform: 'translate(-50%, +50%)',
126+
},
123127
},
124128
/* Class applied to the thumb element if custom thumb icon provided. */
125129
thumbIconWrapper: {
@@ -152,10 +156,10 @@ function roundToStep(number, step) {
152156

153157
function getOffset(node) {
154158
const { pageYOffset, pageXOffset } = global;
155-
const { left, top } = node.getBoundingClientRect();
159+
const { left, bottom } = node.getBoundingClientRect();
156160

157161
return {
158-
top: top + pageYOffset,
162+
bottom: bottom + pageYOffset,
159163
left: left + pageXOffset,
160164
};
161165
}
@@ -176,10 +180,10 @@ function getMousePosition(event) {
176180

177181
function calculatePercent(node, event, isVertical, isRtl) {
178182
const { width, height } = node.getBoundingClientRect();
179-
const { top, left } = getOffset(node);
183+
const { bottom, left } = getOffset(node);
180184
const { x, y } = getMousePosition(event);
181185

182-
const value = isVertical ? y - top : x - left;
186+
const value = isVertical ? bottom - y : x - left;
183187
const onePercent = (isVertical ? height : width) / 100;
184188

185189
return isRtl && !isVertical ? 100 - clamp(value / onePercent) : clamp(value / onePercent);
@@ -413,6 +417,7 @@ class Slider extends React.Component {
413417
[classes.jumped]: !disabled && currentState === 'jumped',
414418
[classes.focused]: !disabled && currentState === 'focused',
415419
[classes.activated]: !disabled && currentState === 'activated',
420+
[classes.vertical]: vertical,
416421
};
417422

418423
const className = classNames(
@@ -428,17 +433,12 @@ class Slider extends React.Component {
428433
[classes.vertical]: vertical,
429434
});
430435

431-
const trackBeforeClasses = classNames(classes.track, classes.trackBefore, commonClasses, {
432-
[classes.vertical]: vertical,
433-
});
434-
435-
const trackAfterClasses = classNames(classes.track, classes.trackAfter, commonClasses, {
436-
[classes.vertical]: vertical,
437-
});
436+
const trackBeforeClasses = classNames(classes.track, classes.trackBefore, commonClasses);
437+
const trackAfterClasses = classNames(classes.track, classes.trackAfter, commonClasses);
438438

439439
const trackProperty = vertical ? 'height' : 'width';
440440
const horizontalMinimumPosition = theme.direction === 'ltr' ? 'left' : 'right';
441-
const thumbProperty = vertical ? 'top' : horizontalMinimumPosition;
441+
const thumbProperty = vertical ? 'bottom' : horizontalMinimumPosition;
442442
const inlineTrackBeforeStyles = { [trackProperty]: this.calculateTrackBeforeStyles(percent) };
443443
const inlineTrackAfterStyles = { [trackProperty]: this.calculateTrackAfterStyles(percent) };
444444
const inlineThumbStyles = { [thumbProperty]: `${percent}%` };

0 commit comments

Comments
 (0)