|
13 | 13 | import {AriaColorSliderProps} from '@react-types/color';
|
14 | 14 | import {ColorSliderState} from '@react-stately/color';
|
15 | 15 | import {HTMLAttributes, RefObject} from 'react';
|
16 |
| -import {mergeProps, snapValueToStep} from '@react-aria/utils'; |
| 16 | +import {mergeProps} from '@react-aria/utils'; |
17 | 17 | import {useKeyboard} from '@react-aria/interactions';
|
18 | 18 | import {useLocale} from '@react-aria/i18n';
|
19 | 19 | import {useSlider, useSliderThumb} from '@react-aria/slider';
|
@@ -62,40 +62,32 @@ export function useColorSlider(props: ColorSliderAriaOptions, state: ColorSlider
|
62 | 62 | inputRef
|
63 | 63 | }, state);
|
64 | 64 |
|
65 |
| - let {minValue, maxValue, step, pageSize} = state.value.getChannelRange(channel); |
| 65 | + let {step, pageSize} = state.value.getChannelRange(channel); |
66 | 66 | let {keyboardProps} = useKeyboard({
|
67 | 67 | onKeyDown(e) {
|
68 | 68 | // these are the cases that useMove or useSlider don't handle
|
69 |
| - if (!/^(PageUp|PageDown|Home|End)$/.test(e.key)) { |
| 69 | + if (!/^(PageUp|PageDown)$/.test(e.key)) { |
70 | 70 | e.continuePropagation();
|
71 | 71 | return;
|
72 | 72 | }
|
73 | 73 | // same handling as useMove, stopPropagation to prevent useSlider from handling the event as well.
|
74 | 74 | e.preventDefault();
|
75 |
| - let channelValue = state.value.getChannelValue(channel); |
76 |
| - let pageStep = Math.max(pageSize, step); |
77 |
| - let newValue = channelValue; |
| 75 | + let pageStep = Math.max( |
| 76 | + props.pageSize || pageSize, |
| 77 | + props.step || step |
| 78 | + ); |
| 79 | + // remember to set this so that onChangeEnd is fired |
| 80 | + state.setThumbDragging(0, true); |
78 | 81 | switch (e.key) {
|
79 | 82 | case 'PageUp':
|
80 |
| - newValue = channelValue + pageStep > maxValue ? maxValue : snapValueToStep(channelValue + pageStep, minValue, maxValue, pageStep); |
| 83 | + state.incrementThumb(0, pageStep); |
81 | 84 | break;
|
82 | 85 | case 'PageDown':
|
83 |
| - newValue = snapValueToStep(channelValue - pageStep, minValue, maxValue, pageStep); |
84 |
| - break; |
85 |
| - case 'Home': |
86 |
| - newValue = minValue; |
87 |
| - break; |
88 |
| - case 'End': |
89 |
| - newValue = maxValue; |
| 86 | + state.decrementThumb(0, pageStep); |
90 | 87 | break;
|
91 | 88 | }
|
92 |
| - // remember to set this so that onChangeEnd is fired |
93 |
| - state.setThumbDragging(0, true); |
94 |
| - if (newValue !== channelValue) { |
95 |
| - state.setValue(state.value.withChannelValue(channel, newValue)); |
96 |
| - } |
97 | 89 | // wait a frame to ensure value has changed then unset this so that onChangeEnd is fired
|
98 |
| - requestAnimationFrame(() => state.setThumbDragging(0, false)); |
| 90 | + state.setThumbDragging(0, false); |
99 | 91 | }
|
100 | 92 | });
|
101 | 93 |
|
|
0 commit comments