Skip to content

Commit cf4818e

Browse files
add demo
1 parent 14138b0 commit cf4818e

File tree

5 files changed

+88
-2
lines changed

5 files changed

+88
-2
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import React from 'react';
2+
import Typography from '@material-ui/core/Typography';
3+
import Slider from '@material-ui/core/Slider';
4+
5+
function valueLabelFormat(value) {
6+
const [coefficient, exponent] = value
7+
.toExponential()
8+
.split('e')
9+
.map(item => Number(item));
10+
return `${Math.round(coefficient)}e^${exponent}`;
11+
}
12+
13+
export default function NonLinearSlider() {
14+
const [value, setValue] = React.useState(1);
15+
16+
const handleChange = (event, newValue) => {
17+
setValue(newValue);
18+
};
19+
20+
return (
21+
<div>
22+
<Typography id="non-linear-slider" gutterBottom>
23+
Temperature range
24+
</Typography>
25+
<Slider
26+
value={value}
27+
min={0}
28+
step={0.1}
29+
max={6}
30+
scale={x => x ** 10}
31+
getAriaValueText={valueLabelFormat}
32+
valueLabelFormat={valueLabelFormat}
33+
onChange={handleChange}
34+
valueLabelDisplay="auto"
35+
aria-labelledby="non-linear-slider"
36+
/>
37+
</div>
38+
);
39+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import React from 'react';
2+
import Typography from '@material-ui/core/Typography';
3+
import Slider from '@material-ui/core/Slider';
4+
5+
function valueLabelFormat(value: number) {
6+
const [coefficient, exponent] = value
7+
.toExponential()
8+
.split('e')
9+
.map(item => Number(item));
10+
return `${Math.round(coefficient)}e^${exponent}`;
11+
}
12+
13+
export default function NonLinearSlider() {
14+
const [value, setValue] = React.useState<number | number[]>(1);
15+
16+
const handleChange = (event: any, newValue: number | number[]) => {
17+
setValue(newValue);
18+
};
19+
20+
return (
21+
<div>
22+
<Typography id="non-linear-slider" gutterBottom>
23+
Temperature range
24+
</Typography>
25+
<Slider
26+
value={value}
27+
min={0}
28+
step={0.1}
29+
max={6}
30+
scale={x => x ** 10}
31+
getAriaValueText={valueLabelFormat}
32+
valueLabelFormat={valueLabelFormat}
33+
onChange={handleChange}
34+
valueLabelDisplay="auto"
35+
aria-labelledby="non-linear-slider"
36+
/>
37+
</div>
38+
);
39+
}

docs/src/pages/components/slider/slider.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,13 @@ The track can be inverted with `track="inverted"`.
6464

6565
{{"demo": "pages/components/slider/TrackInvertedSlider.js"}}
6666

67+
## Non-linear scale
68+
69+
You can use the `scale` prop to represent the `value` in a different scale.
70+
For instance, in the following demo, the value *x* represents the power of *10^x*.
71+
72+
{{"demo": "pages/components/slider/NonLinearSlider.js"}}
73+
6774
## Accessibility
6875

6976
(WAI-ARIA: https://www.w3.org/TR/wai-aria-practices/#slider)

docs/src/pages/components/steppers/steppers.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,13 @@ determine when all steps are completed (or even if they need to be completed).
5050

5151
{{"demo": "pages/components/steppers/HorizontalNonLinearStepper.js", "bg": true}}
5252

53-
### Non Linear - Alternative Label
53+
### Non-linear - Alternative Label
5454

5555
Labels can be placed below the step icon by setting the `alternativeLabel` prop on the `Stepper` component.
5656

5757
{{"demo": "pages/components/steppers/HorizontalNonLinearAlternativeLabelStepper.js", "bg": true}}
5858

59-
### Non Linear - Error Step
59+
### Non-kinear - Error Step
6060

6161
{{"demo": "pages/components/steppers/HorizontalNonLinearStepperWithError.js", "bg": true}}
6262

packages/material-ui/src/Slider/Slider.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ export interface SliderProps
3535
onChangeCommitted?: (event: React.ChangeEvent<{}>, value: number | number[]) => void;
3636
orientation?: 'horizontal' | 'vertical';
3737
step?: number | null;
38+
scale?: (value: number) => number;
3839
ThumbComponent?: React.ElementType<React.HTMLAttributes<HTMLSpanElement>>;
3940
track?: 'normal' | false | 'inverted';
4041
value?: number | number[];

0 commit comments

Comments
 (0)