@react-spectrum/slider 3.8.4 → 3.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/import.mjs +3 -3
- package/dist/main.js +4 -4
- package/dist/main.js.map +1 -1
- package/dist/module.js +3 -3
- package/dist/module.js.map +1 -1
- package/dist/types/src/index.d.ts +5 -0
- package/package.json +12 -34
- package/src/index.ts +6 -3
- package/dist/RangeSlider.main.js +0 -120
- package/dist/RangeSlider.main.js.map +0 -1
- package/dist/RangeSlider.mjs +0 -115
- package/dist/RangeSlider.module.js +0 -115
- package/dist/RangeSlider.module.js.map +0 -1
- package/dist/Slider.main.js +0 -121
- package/dist/Slider.main.js.map +0 -1
- package/dist/Slider.mjs +0 -116
- package/dist/Slider.module.js +0 -116
- package/dist/Slider.module.js.map +0 -1
- package/dist/SliderBase.main.js +0 -169
- package/dist/SliderBase.main.js.map +0 -1
- package/dist/SliderBase.mjs +0 -164
- package/dist/SliderBase.module.js +0 -164
- package/dist/SliderBase.module.js.map +0 -1
- package/dist/SliderThumb.main.js +0 -67
- package/dist/SliderThumb.main.js.map +0 -1
- package/dist/SliderThumb.mjs +0 -62
- package/dist/SliderThumb.module.js +0 -62
- package/dist/SliderThumb.module.js.map +0 -1
- package/dist/ar-AE.main.js +0 -7
- package/dist/ar-AE.main.js.map +0 -1
- package/dist/ar-AE.mjs +0 -9
- package/dist/ar-AE.module.js +0 -9
- package/dist/ar-AE.module.js.map +0 -1
- package/dist/bg-BG.main.js +0 -7
- package/dist/bg-BG.main.js.map +0 -1
- package/dist/bg-BG.mjs +0 -9
- package/dist/bg-BG.module.js +0 -9
- package/dist/bg-BG.module.js.map +0 -1
- package/dist/cs-CZ.main.js +0 -7
- package/dist/cs-CZ.main.js.map +0 -1
- package/dist/cs-CZ.mjs +0 -9
- package/dist/cs-CZ.module.js +0 -9
- package/dist/cs-CZ.module.js.map +0 -1
- package/dist/da-DK.main.js +0 -7
- package/dist/da-DK.main.js.map +0 -1
- package/dist/da-DK.mjs +0 -9
- package/dist/da-DK.module.js +0 -9
- package/dist/da-DK.module.js.map +0 -1
- package/dist/de-DE.main.js +0 -7
- package/dist/de-DE.main.js.map +0 -1
- package/dist/de-DE.mjs +0 -9
- package/dist/de-DE.module.js +0 -9
- package/dist/de-DE.module.js.map +0 -1
- package/dist/el-GR.main.js +0 -7
- package/dist/el-GR.main.js.map +0 -1
- package/dist/el-GR.mjs +0 -9
- package/dist/el-GR.module.js +0 -9
- package/dist/el-GR.module.js.map +0 -1
- package/dist/en-US.main.js +0 -7
- package/dist/en-US.main.js.map +0 -1
- package/dist/en-US.mjs +0 -9
- package/dist/en-US.module.js +0 -9
- package/dist/en-US.module.js.map +0 -1
- package/dist/es-ES.main.js +0 -7
- package/dist/es-ES.main.js.map +0 -1
- package/dist/es-ES.mjs +0 -9
- package/dist/es-ES.module.js +0 -9
- package/dist/es-ES.module.js.map +0 -1
- package/dist/et-EE.main.js +0 -7
- package/dist/et-EE.main.js.map +0 -1
- package/dist/et-EE.mjs +0 -9
- package/dist/et-EE.module.js +0 -9
- package/dist/et-EE.module.js.map +0 -1
- package/dist/fi-FI.main.js +0 -7
- package/dist/fi-FI.main.js.map +0 -1
- package/dist/fi-FI.mjs +0 -9
- package/dist/fi-FI.module.js +0 -9
- package/dist/fi-FI.module.js.map +0 -1
- package/dist/fr-FR.main.js +0 -7
- package/dist/fr-FR.main.js.map +0 -1
- package/dist/fr-FR.mjs +0 -9
- package/dist/fr-FR.module.js +0 -9
- package/dist/fr-FR.module.js.map +0 -1
- package/dist/he-IL.main.js +0 -7
- package/dist/he-IL.main.js.map +0 -1
- package/dist/he-IL.mjs +0 -9
- package/dist/he-IL.module.js +0 -9
- package/dist/he-IL.module.js.map +0 -1
- package/dist/hr-HR.main.js +0 -7
- package/dist/hr-HR.main.js.map +0 -1
- package/dist/hr-HR.mjs +0 -9
- package/dist/hr-HR.module.js +0 -9
- package/dist/hr-HR.module.js.map +0 -1
- package/dist/hu-HU.main.js +0 -7
- package/dist/hu-HU.main.js.map +0 -1
- package/dist/hu-HU.mjs +0 -9
- package/dist/hu-HU.module.js +0 -9
- package/dist/hu-HU.module.js.map +0 -1
- package/dist/intlStrings.main.js +0 -108
- package/dist/intlStrings.main.js.map +0 -1
- package/dist/intlStrings.mjs +0 -110
- package/dist/intlStrings.module.js +0 -110
- package/dist/intlStrings.module.js.map +0 -1
- package/dist/it-IT.main.js +0 -7
- package/dist/it-IT.main.js.map +0 -1
- package/dist/it-IT.mjs +0 -9
- package/dist/it-IT.module.js +0 -9
- package/dist/it-IT.module.js.map +0 -1
- package/dist/ja-JP.main.js +0 -7
- package/dist/ja-JP.main.js.map +0 -1
- package/dist/ja-JP.mjs +0 -9
- package/dist/ja-JP.module.js +0 -9
- package/dist/ja-JP.module.js.map +0 -1
- package/dist/ko-KR.main.js +0 -7
- package/dist/ko-KR.main.js.map +0 -1
- package/dist/ko-KR.mjs +0 -9
- package/dist/ko-KR.module.js +0 -9
- package/dist/ko-KR.module.js.map +0 -1
- package/dist/lt-LT.main.js +0 -7
- package/dist/lt-LT.main.js.map +0 -1
- package/dist/lt-LT.mjs +0 -9
- package/dist/lt-LT.module.js +0 -9
- package/dist/lt-LT.module.js.map +0 -1
- package/dist/lv-LV.main.js +0 -7
- package/dist/lv-LV.main.js.map +0 -1
- package/dist/lv-LV.mjs +0 -9
- package/dist/lv-LV.module.js +0 -9
- package/dist/lv-LV.module.js.map +0 -1
- package/dist/nb-NO.main.js +0 -7
- package/dist/nb-NO.main.js.map +0 -1
- package/dist/nb-NO.mjs +0 -9
- package/dist/nb-NO.module.js +0 -9
- package/dist/nb-NO.module.js.map +0 -1
- package/dist/nl-NL.main.js +0 -7
- package/dist/nl-NL.main.js.map +0 -1
- package/dist/nl-NL.mjs +0 -9
- package/dist/nl-NL.module.js +0 -9
- package/dist/nl-NL.module.js.map +0 -1
- package/dist/pl-PL.main.js +0 -7
- package/dist/pl-PL.main.js.map +0 -1
- package/dist/pl-PL.mjs +0 -9
- package/dist/pl-PL.module.js +0 -9
- package/dist/pl-PL.module.js.map +0 -1
- package/dist/pt-BR.main.js +0 -7
- package/dist/pt-BR.main.js.map +0 -1
- package/dist/pt-BR.mjs +0 -9
- package/dist/pt-BR.module.js +0 -9
- package/dist/pt-BR.module.js.map +0 -1
- package/dist/pt-PT.main.js +0 -7
- package/dist/pt-PT.main.js.map +0 -1
- package/dist/pt-PT.mjs +0 -9
- package/dist/pt-PT.module.js +0 -9
- package/dist/pt-PT.module.js.map +0 -1
- package/dist/ro-RO.main.js +0 -7
- package/dist/ro-RO.main.js.map +0 -1
- package/dist/ro-RO.mjs +0 -9
- package/dist/ro-RO.module.js +0 -9
- package/dist/ro-RO.module.js.map +0 -1
- package/dist/ru-RU.main.js +0 -7
- package/dist/ru-RU.main.js.map +0 -1
- package/dist/ru-RU.mjs +0 -9
- package/dist/ru-RU.module.js +0 -9
- package/dist/ru-RU.module.js.map +0 -1
- package/dist/sk-SK.main.js +0 -7
- package/dist/sk-SK.main.js.map +0 -1
- package/dist/sk-SK.mjs +0 -9
- package/dist/sk-SK.module.js +0 -9
- package/dist/sk-SK.module.js.map +0 -1
- package/dist/sl-SI.main.js +0 -7
- package/dist/sl-SI.main.js.map +0 -1
- package/dist/sl-SI.mjs +0 -9
- package/dist/sl-SI.module.js +0 -9
- package/dist/sl-SI.module.js.map +0 -1
- package/dist/slider.674e7af0.css +0 -1189
- package/dist/slider.674e7af0.css.map +0 -1
- package/dist/slider_vars_css.main.js +0 -146
- package/dist/slider_vars_css.main.js.map +0 -1
- package/dist/slider_vars_css.mjs +0 -148
- package/dist/slider_vars_css.module.js +0 -148
- package/dist/slider_vars_css.module.js.map +0 -1
- package/dist/sr-SP.main.js +0 -7
- package/dist/sr-SP.main.js.map +0 -1
- package/dist/sr-SP.mjs +0 -9
- package/dist/sr-SP.module.js +0 -9
- package/dist/sr-SP.module.js.map +0 -1
- package/dist/sv-SE.main.js +0 -7
- package/dist/sv-SE.main.js.map +0 -1
- package/dist/sv-SE.mjs +0 -9
- package/dist/sv-SE.module.js +0 -9
- package/dist/sv-SE.module.js.map +0 -1
- package/dist/tr-TR.main.js +0 -7
- package/dist/tr-TR.main.js.map +0 -1
- package/dist/tr-TR.mjs +0 -9
- package/dist/tr-TR.module.js +0 -9
- package/dist/tr-TR.module.js.map +0 -1
- package/dist/types.d.ts +0 -14
- package/dist/types.d.ts.map +0 -1
- package/dist/uk-UA.main.js +0 -7
- package/dist/uk-UA.main.js.map +0 -1
- package/dist/uk-UA.mjs +0 -9
- package/dist/uk-UA.module.js +0 -9
- package/dist/uk-UA.module.js.map +0 -1
- package/dist/zh-CN.main.js +0 -7
- package/dist/zh-CN.main.js.map +0 -1
- package/dist/zh-CN.mjs +0 -9
- package/dist/zh-CN.module.js +0 -9
- package/dist/zh-CN.module.js.map +0 -1
- package/dist/zh-TW.main.js +0 -7
- package/dist/zh-TW.main.js.map +0 -1
- package/dist/zh-TW.mjs +0 -9
- package/dist/zh-TW.module.js +0 -9
- package/dist/zh-TW.module.js.map +0 -1
- package/src/RangeSlider.tsx +0 -95
- package/src/Slider.tsx +0 -119
- package/src/SliderBase.tsx +0 -195
- package/src/SliderThumb.tsx +0 -68
package/dist/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":";;;AEsBA;;GAEG;AACH,OAAO,MAAM,qIA6FX,CAAC;AC/FH;;GAEG;AACH,OAAO,MAAM,+IAoEX,CAAC;AC9EH,YAAY,EAAC,wBAAwB,EAAE,mBAAmB,EAAC,MAAM,qBAAqB,CAAC","sources":["packages/@react-spectrum/slider/src/packages/@react-spectrum/slider/src/SliderBase.tsx","packages/@react-spectrum/slider/src/packages/@react-spectrum/slider/src/SliderThumb.tsx","packages/@react-spectrum/slider/src/packages/@react-spectrum/slider/src/Slider.tsx","packages/@react-spectrum/slider/src/packages/@react-spectrum/slider/src/RangeSlider.tsx","packages/@react-spectrum/slider/src/packages/@react-spectrum/slider/src/index.ts","packages/@react-spectrum/slider/src/index.ts"],"sourcesContent":[null,null,null,null,null,"/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n/// <reference types=\"css-module-types\" />\n\nexport {Slider} from './Slider';\nexport {RangeSlider} from './RangeSlider';\nexport type {SpectrumRangeSliderProps, SpectrumSliderProps} from '@react-types/slider';\n"],"names":[],"version":3,"file":"types.d.ts.map"}
|
package/dist/uk-UA.main.js
DELETED
package/dist/uk-UA.main.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"AAAA,iBAAiB;IAAG,WAAW,CAAC,wDAAQ,CAAC;IACvC,WAAW,CAAC,iDAAO,CAAC;AACtB","sources":["packages/@react-spectrum/slider/intl/uk-UA.json"],"sourcesContent":["{\n \"maximum\": \"Максимум\",\n \"minimum\": \"Мінімум\"\n}\n"],"names":[],"version":3,"file":"uk-UA.main.js.map"}
|
package/dist/uk-UA.mjs
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
var $3108f34a285e911e$exports = {};
|
|
2
|
-
$3108f34a285e911e$exports = {
|
|
3
|
-
"maximum": `\u{41C}\u{430}\u{43A}\u{441}\u{438}\u{43C}\u{443}\u{43C}`,
|
|
4
|
-
"minimum": `\u{41C}\u{456}\u{43D}\u{456}\u{43C}\u{443}\u{43C}`
|
|
5
|
-
};
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export {$3108f34a285e911e$exports as default};
|
|
9
|
-
//# sourceMappingURL=uk-UA.module.js.map
|
package/dist/uk-UA.module.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
var $3108f34a285e911e$exports = {};
|
|
2
|
-
$3108f34a285e911e$exports = {
|
|
3
|
-
"maximum": `\u{41C}\u{430}\u{43A}\u{441}\u{438}\u{43C}\u{443}\u{43C}`,
|
|
4
|
-
"minimum": `\u{41C}\u{456}\u{43D}\u{456}\u{43C}\u{443}\u{43C}`
|
|
5
|
-
};
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export {$3108f34a285e911e$exports as default};
|
|
9
|
-
//# sourceMappingURL=uk-UA.module.js.map
|
package/dist/uk-UA.module.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":";AAAA,4BAAiB;IAAG,WAAW,CAAC,wDAAQ,CAAC;IACvC,WAAW,CAAC,iDAAO,CAAC;AACtB","sources":["packages/@react-spectrum/slider/intl/uk-UA.json"],"sourcesContent":["{\n \"maximum\": \"Максимум\",\n \"minimum\": \"Мінімум\"\n}\n"],"names":[],"version":3,"file":"uk-UA.module.js.map"}
|
package/dist/zh-CN.main.js
DELETED
package/dist/zh-CN.main.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"AAAA,iBAAiB;IAAG,WAAW,CAAC,gBAAE,CAAC;IACjC,WAAW,CAAC,gBAAE,CAAC;AACjB","sources":["packages/@react-spectrum/slider/intl/zh-CN.json"],"sourcesContent":["{\n \"maximum\": \"最大\",\n \"minimum\": \"最小\"\n}\n"],"names":[],"version":3,"file":"zh-CN.main.js.map"}
|
package/dist/zh-CN.mjs
DELETED
package/dist/zh-CN.module.js
DELETED
package/dist/zh-CN.module.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":";AAAA,4BAAiB;IAAG,WAAW,CAAC,gBAAE,CAAC;IACjC,WAAW,CAAC,gBAAE,CAAC;AACjB","sources":["packages/@react-spectrum/slider/intl/zh-CN.json"],"sourcesContent":["{\n \"maximum\": \"最大\",\n \"minimum\": \"最小\"\n}\n"],"names":[],"version":3,"file":"zh-CN.module.js.map"}
|
package/dist/zh-TW.main.js
DELETED
package/dist/zh-TW.main.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"AAAA,iBAAiB;IAAG,WAAW,CAAC,wBAAG,CAAC;IAClC,WAAW,CAAC,wBAAG,CAAC;AAClB","sources":["packages/@react-spectrum/slider/intl/zh-TW.json"],"sourcesContent":["{\n \"maximum\": \"最大值\",\n \"minimum\": \"最小值\"\n}\n"],"names":[],"version":3,"file":"zh-TW.main.js.map"}
|
package/dist/zh-TW.mjs
DELETED
package/dist/zh-TW.module.js
DELETED
package/dist/zh-TW.module.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":";AAAA,4BAAiB;IAAG,WAAW,CAAC,wBAAG,CAAC;IAClC,WAAW,CAAC,wBAAG,CAAC;AAClB","sources":["packages/@react-spectrum/slider/intl/zh-TW.json"],"sourcesContent":["{\n \"maximum\": \"最大值\",\n \"minimum\": \"最小值\"\n}\n"],"names":[],"version":3,"file":"zh-TW.module.js.map"}
|
package/src/RangeSlider.tsx
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2020 Adobe. All rights reserved.
|
|
3
|
-
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
-
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
-
*
|
|
7
|
-
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
-
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
-
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
-
* governing permissions and limitations under the License.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import {classNames} from '@react-spectrum/utils';
|
|
14
|
-
import {FocusableRef} from '@react-types/shared';
|
|
15
|
-
// @ts-ignore
|
|
16
|
-
import intlMessages from '../intl/*.json';
|
|
17
|
-
import React from 'react';
|
|
18
|
-
import {SliderBase, SliderBaseChildArguments, SliderBaseProps} from './SliderBase';
|
|
19
|
-
import {SliderThumb} from './SliderThumb';
|
|
20
|
-
import {SpectrumRangeSliderProps} from '@react-types/slider';
|
|
21
|
-
import styles from '@adobe/spectrum-css-temp/components/slider/vars.css';
|
|
22
|
-
import {useLocale, useLocalizedStringFormatter} from '@react-aria/i18n';
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* RangeSliders allow users to quickly select a subset range. They should be used when the upper and lower bounds to the range are invariable.
|
|
26
|
-
*/
|
|
27
|
-
export const RangeSlider = React.forwardRef(function RangeSlider(props: SpectrumRangeSliderProps, ref: FocusableRef<HTMLDivElement>) {
|
|
28
|
-
let {onChange, onChangeEnd, value, defaultValue, getValueLabel, ...otherProps} = props;
|
|
29
|
-
let defaultThumbValues: number[] | undefined = undefined;
|
|
30
|
-
if (defaultValue != null) {
|
|
31
|
-
defaultThumbValues = [defaultValue.start, defaultValue.end];
|
|
32
|
-
} else if (value == null) {
|
|
33
|
-
// make sure that useSliderState knows we have two handles
|
|
34
|
-
defaultThumbValues = [props.minValue ?? 0, props.maxValue ?? 100];
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
let baseProps: Omit<SliderBaseProps<number[]>, 'children'> = {
|
|
38
|
-
...otherProps,
|
|
39
|
-
value: value != null ? [value.start, value.end] : undefined,
|
|
40
|
-
defaultValue: defaultThumbValues,
|
|
41
|
-
onChange(v) {
|
|
42
|
-
onChange?.({start: v[0], end: v[1]});
|
|
43
|
-
},
|
|
44
|
-
onChangeEnd(v) {
|
|
45
|
-
onChangeEnd?.({start: v[0], end: v[1]});
|
|
46
|
-
},
|
|
47
|
-
getValueLabel: getValueLabel ? ([start, end]) => getValueLabel({start, end}) : undefined
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/slider');
|
|
51
|
-
let {direction} = useLocale();
|
|
52
|
-
|
|
53
|
-
return (
|
|
54
|
-
<SliderBase {...baseProps} classes={'spectrum-Slider--range'} ref={ref}>
|
|
55
|
-
{({trackRef, inputRef, state}: SliderBaseChildArguments) => {
|
|
56
|
-
let cssDirection = direction === 'rtl' ? 'right' : 'left';
|
|
57
|
-
return (
|
|
58
|
-
<>
|
|
59
|
-
<div
|
|
60
|
-
className={classNames(styles, 'spectrum-Slider-track')}
|
|
61
|
-
style={{width: `${state.getThumbPercent(0) * 100}%`}} />
|
|
62
|
-
<SliderThumb
|
|
63
|
-
index={0}
|
|
64
|
-
aria-label={stringFormatter.format('minimum')}
|
|
65
|
-
isDisabled={props.isDisabled}
|
|
66
|
-
trackRef={trackRef}
|
|
67
|
-
inputRef={inputRef}
|
|
68
|
-
state={state}
|
|
69
|
-
name={props.startName}
|
|
70
|
-
form={props.form} />
|
|
71
|
-
<div
|
|
72
|
-
className={classNames(styles, 'spectrum-Slider-track')}
|
|
73
|
-
style={{
|
|
74
|
-
[cssDirection]: `${state.getThumbPercent(0) * 100}%`,
|
|
75
|
-
width: `${Math.abs(state.getThumbPercent(0) - state.getThumbPercent(1)) * 100}%`
|
|
76
|
-
}} />
|
|
77
|
-
<SliderThumb
|
|
78
|
-
index={1}
|
|
79
|
-
aria-label={stringFormatter.format('maximum')}
|
|
80
|
-
isDisabled={props.isDisabled}
|
|
81
|
-
trackRef={trackRef}
|
|
82
|
-
state={state}
|
|
83
|
-
name={props.endName}
|
|
84
|
-
form={props.form} />
|
|
85
|
-
<div
|
|
86
|
-
className={classNames(styles, 'spectrum-Slider-track')}
|
|
87
|
-
style={{
|
|
88
|
-
width: `${(1 - state.getThumbPercent(1)) * 100}%`
|
|
89
|
-
}} />
|
|
90
|
-
</>
|
|
91
|
-
);
|
|
92
|
-
}}
|
|
93
|
-
</SliderBase>
|
|
94
|
-
);
|
|
95
|
-
});
|
package/src/Slider.tsx
DELETED
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2020 Adobe. All rights reserved.
|
|
3
|
-
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
-
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
-
*
|
|
7
|
-
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
-
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
-
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
-
* governing permissions and limitations under the License.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import {clamp} from '@react-aria/utils';
|
|
14
|
-
import {classNames} from '@react-spectrum/utils';
|
|
15
|
-
import {FocusableRef} from '@react-types/shared';
|
|
16
|
-
import React, {ReactNode} from 'react';
|
|
17
|
-
import {SliderBase, SliderBaseChildArguments, SliderBaseProps} from './SliderBase';
|
|
18
|
-
import {SliderThumb} from './SliderThumb';
|
|
19
|
-
import {SpectrumSliderProps} from '@react-types/slider';
|
|
20
|
-
import styles from '@adobe/spectrum-css-temp/components/slider/vars.css';
|
|
21
|
-
import {useLocale} from '@react-aria/i18n';
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Sliders allow users to quickly select a value within a range. They should be used when the upper and lower bounds to the range are invariable.
|
|
25
|
-
*/
|
|
26
|
-
export const Slider = React.forwardRef(function Slider(props: SpectrumSliderProps, ref: FocusableRef<HTMLDivElement>) {
|
|
27
|
-
let {onChange, onChangeEnd, value, defaultValue, isFilled, fillOffset, trackGradient, getValueLabel, ...otherProps} = props;
|
|
28
|
-
|
|
29
|
-
let baseProps: Omit<SliderBaseProps, 'children'> = {
|
|
30
|
-
...otherProps,
|
|
31
|
-
// Normalize `value: number[]` to `value: number`
|
|
32
|
-
value: value != null ? [value] : undefined,
|
|
33
|
-
defaultValue: defaultValue != null ? [defaultValue] : undefined,
|
|
34
|
-
onChange: (v: number[]): void => {
|
|
35
|
-
onChange?.(v[0]);
|
|
36
|
-
},
|
|
37
|
-
onChangeEnd: (v: number[]): void => {
|
|
38
|
-
onChangeEnd?.(v[0]);
|
|
39
|
-
},
|
|
40
|
-
getValueLabel: getValueLabel ? ([v]) => getValueLabel(v) : undefined
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
let {direction} = useLocale();
|
|
44
|
-
|
|
45
|
-
return (
|
|
46
|
-
<SliderBase
|
|
47
|
-
{...baseProps}
|
|
48
|
-
ref={ref}
|
|
49
|
-
classes={{
|
|
50
|
-
'spectrum-Slider--filled': isFilled && fillOffset == null
|
|
51
|
-
}}
|
|
52
|
-
style={
|
|
53
|
-
// @ts-ignore
|
|
54
|
-
{'--spectrum-slider-track-gradient': trackGradient && `linear-gradient(to ${direction === 'ltr' ? 'right' : 'left'}, ${trackGradient.join(', ')})`}
|
|
55
|
-
}>
|
|
56
|
-
{({trackRef, inputRef, state}: SliderBaseChildArguments) => {
|
|
57
|
-
fillOffset = fillOffset != null ? clamp(fillOffset, state.getThumbMinValue(0), state.getThumbMaxValue(0)) : fillOffset;
|
|
58
|
-
let cssDirection = direction === 'rtl' ? 'right' : 'left';
|
|
59
|
-
|
|
60
|
-
let lowerTrack = (
|
|
61
|
-
<div
|
|
62
|
-
className={classNames(styles, 'spectrum-Slider-track')}
|
|
63
|
-
style={{
|
|
64
|
-
width: `${state.getThumbPercent(0) * 100}%`,
|
|
65
|
-
// TODO not sure if it has advantages, but this could also be implemented as CSS calc():
|
|
66
|
-
// .track::before {
|
|
67
|
-
// background-size: calc((1/ (var(--width)/100)) * 100%);
|
|
68
|
-
// width: calc(var(--width) * 1%)M
|
|
69
|
-
// }
|
|
70
|
-
// @ts-ignore
|
|
71
|
-
'--spectrum-track-background-size': `${(1 / state.getThumbPercent(0)) * 100}%`,
|
|
72
|
-
'--spectrum-track-background-position': direction === 'ltr' ? '0' : '100%'
|
|
73
|
-
}} />
|
|
74
|
-
);
|
|
75
|
-
let upperTrack = (
|
|
76
|
-
<div
|
|
77
|
-
className={classNames(styles, 'spectrum-Slider-track')}
|
|
78
|
-
style={{
|
|
79
|
-
width: `${(1 - state.getThumbPercent(0)) * 100}%`,
|
|
80
|
-
// @ts-ignore
|
|
81
|
-
'--spectrum-track-background-size': `${(1 / (1 - state.getThumbPercent(0))) * 100}%`,
|
|
82
|
-
'--spectrum-track-background-position': direction === 'ltr' ? '100%' : '0'
|
|
83
|
-
}} />
|
|
84
|
-
);
|
|
85
|
-
|
|
86
|
-
let filledTrack: ReactNode = null;
|
|
87
|
-
if (isFilled && fillOffset != null) {
|
|
88
|
-
let width = state.getThumbPercent(0) - state.getValuePercent(fillOffset);
|
|
89
|
-
let isRightOfOffset = width > 0;
|
|
90
|
-
let offset = isRightOfOffset ? state.getValuePercent(fillOffset) : state.getThumbPercent(0);
|
|
91
|
-
filledTrack = (
|
|
92
|
-
<div
|
|
93
|
-
className={classNames(styles, 'spectrum-Slider-fill', {'spectrum-Slider-fill--right': isRightOfOffset})}
|
|
94
|
-
style={{
|
|
95
|
-
[cssDirection]: `${offset * 100}%`,
|
|
96
|
-
width: `${Math.abs(width) * 100}%`
|
|
97
|
-
}} />
|
|
98
|
-
);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
return (
|
|
102
|
-
<>
|
|
103
|
-
{lowerTrack}
|
|
104
|
-
<SliderThumb
|
|
105
|
-
index={0}
|
|
106
|
-
isDisabled={props.isDisabled}
|
|
107
|
-
trackRef={trackRef}
|
|
108
|
-
inputRef={inputRef}
|
|
109
|
-
state={state}
|
|
110
|
-
name={props.name}
|
|
111
|
-
form={props.form} />
|
|
112
|
-
{filledTrack}
|
|
113
|
-
{upperTrack}
|
|
114
|
-
</>
|
|
115
|
-
);
|
|
116
|
-
}}
|
|
117
|
-
</SliderBase>
|
|
118
|
-
);
|
|
119
|
-
});
|
package/src/SliderBase.tsx
DELETED
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2020 Adobe. All rights reserved.
|
|
3
|
-
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
-
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
-
*
|
|
7
|
-
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
-
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
-
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
-
* governing permissions and limitations under the License.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import {classNames, SlotProvider, useFocusableRef, useStyleProps} from '@react-spectrum/utils';
|
|
14
|
-
import {FocusableRef, RefObject} from '@react-types/shared';
|
|
15
|
-
import React, {CSSProperties, ReactNode, useRef} from 'react';
|
|
16
|
-
import {SliderState, useSliderState} from '@react-stately/slider';
|
|
17
|
-
import {SpectrumBarSliderBase} from '@react-types/slider';
|
|
18
|
-
import styles from '@adobe/spectrum-css-temp/components/slider/vars.css';
|
|
19
|
-
import {useNumberFormatter} from '@react-aria/i18n';
|
|
20
|
-
import {useProviderProps} from '@react-spectrum/provider';
|
|
21
|
-
import {useSlider} from '@react-aria/slider';
|
|
22
|
-
|
|
23
|
-
export interface SliderBaseChildArguments {
|
|
24
|
-
inputRef: RefObject<HTMLInputElement | null>,
|
|
25
|
-
trackRef: RefObject<HTMLElement | null>,
|
|
26
|
-
state: SliderState
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export interface SliderBaseProps<T = number[]> extends SpectrumBarSliderBase<T> {
|
|
30
|
-
children: (opts: SliderBaseChildArguments) => ReactNode,
|
|
31
|
-
classes?: string[] | Object,
|
|
32
|
-
style?: CSSProperties
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export const SliderBase = React.forwardRef(function SliderBase(props: SliderBaseProps, ref: FocusableRef<HTMLDivElement>) {
|
|
36
|
-
props = useProviderProps(props);
|
|
37
|
-
let {
|
|
38
|
-
isDisabled,
|
|
39
|
-
children,
|
|
40
|
-
classes,
|
|
41
|
-
style,
|
|
42
|
-
labelPosition = 'top',
|
|
43
|
-
getValueLabel,
|
|
44
|
-
showValueLabel = !!props.label,
|
|
45
|
-
formatOptions,
|
|
46
|
-
minValue = 0,
|
|
47
|
-
maxValue = 100,
|
|
48
|
-
...otherProps
|
|
49
|
-
} = props;
|
|
50
|
-
|
|
51
|
-
let {styleProps} = useStyleProps(otherProps);
|
|
52
|
-
|
|
53
|
-
// `Math.abs(Math.sign(a) - Math.sign(b)) === 2` is true if the values have a different sign.
|
|
54
|
-
let alwaysDisplaySign = Math.abs(Math.sign(minValue) - Math.sign(maxValue)) === 2;
|
|
55
|
-
if (alwaysDisplaySign) {
|
|
56
|
-
if (formatOptions != null) {
|
|
57
|
-
if (!('signDisplay' in formatOptions)) {
|
|
58
|
-
formatOptions = {
|
|
59
|
-
...formatOptions,
|
|
60
|
-
signDisplay: 'exceptZero'
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
} else {
|
|
64
|
-
formatOptions = {signDisplay: 'exceptZero'};
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
const formatter = useNumberFormatter(formatOptions);
|
|
69
|
-
const state = useSliderState({
|
|
70
|
-
...props,
|
|
71
|
-
numberFormatter: formatter,
|
|
72
|
-
minValue,
|
|
73
|
-
maxValue
|
|
74
|
-
});
|
|
75
|
-
let trackRef = useRef<HTMLDivElement | null>(null);
|
|
76
|
-
let {
|
|
77
|
-
groupProps,
|
|
78
|
-
trackProps,
|
|
79
|
-
labelProps,
|
|
80
|
-
outputProps
|
|
81
|
-
} = useSlider(props, state, trackRef);
|
|
82
|
-
|
|
83
|
-
let inputRef = useRef<HTMLInputElement | null>(null);
|
|
84
|
-
let domRef = useFocusableRef(ref, inputRef);
|
|
85
|
-
|
|
86
|
-
let displayValue = '';
|
|
87
|
-
let maxLabelLength: number | null = null;
|
|
88
|
-
|
|
89
|
-
if (typeof getValueLabel === 'function') {
|
|
90
|
-
displayValue = getValueLabel(state.values);
|
|
91
|
-
switch (state.values.length) {
|
|
92
|
-
case 1:
|
|
93
|
-
maxLabelLength = Math.max(
|
|
94
|
-
getValueLabel([minValue]).length,
|
|
95
|
-
getValueLabel([maxValue]).length
|
|
96
|
-
);
|
|
97
|
-
break;
|
|
98
|
-
case 2:
|
|
99
|
-
// Try all possible combinations of min and max values.
|
|
100
|
-
maxLabelLength = Math.max(
|
|
101
|
-
getValueLabel([minValue, minValue]).length,
|
|
102
|
-
getValueLabel([minValue, maxValue]).length,
|
|
103
|
-
getValueLabel([maxValue, minValue]).length,
|
|
104
|
-
getValueLabel([maxValue, maxValue]).length
|
|
105
|
-
);
|
|
106
|
-
break;
|
|
107
|
-
default:
|
|
108
|
-
throw new Error('Only sliders with 1 or 2 handles are supported!');
|
|
109
|
-
}
|
|
110
|
-
} else {
|
|
111
|
-
maxLabelLength = Math.max([...formatter.format(minValue)].length, [...formatter.format(maxValue)].length);
|
|
112
|
-
switch (state.values.length) {
|
|
113
|
-
case 1:
|
|
114
|
-
displayValue = state.getThumbValueLabel(0);
|
|
115
|
-
break;
|
|
116
|
-
case 2:
|
|
117
|
-
// This should really use the NumberFormat#formatRange proposal...
|
|
118
|
-
// https://github.com/tc39/ecma402/issues/393
|
|
119
|
-
// https://github.com/tc39/proposal-intl-numberformat-v3#formatrange-ecma-402-393
|
|
120
|
-
displayValue = `${state.getThumbValueLabel(0)} – ${state.getThumbValueLabel(1)}`;
|
|
121
|
-
maxLabelLength = 3 + 2 * Math.max(
|
|
122
|
-
maxLabelLength,
|
|
123
|
-
[...formatter.format(minValue)].length, [...formatter.format(maxValue)].length
|
|
124
|
-
);
|
|
125
|
-
break;
|
|
126
|
-
default:
|
|
127
|
-
throw new Error('Only sliders with 1 or 2 handles are supported!');
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
let labelNode = (
|
|
132
|
-
<label
|
|
133
|
-
className={classNames(styles, 'spectrum-Slider-label')}
|
|
134
|
-
{...labelProps}>
|
|
135
|
-
{props.label}
|
|
136
|
-
</label>
|
|
137
|
-
);
|
|
138
|
-
|
|
139
|
-
let valueNode = (
|
|
140
|
-
<output
|
|
141
|
-
{...outputProps}
|
|
142
|
-
className={classNames(styles, 'spectrum-Slider-value')}
|
|
143
|
-
style={maxLabelLength != null ? {width: `${maxLabelLength}ch`, minWidth: `${maxLabelLength}ch`} : undefined}>
|
|
144
|
-
{displayValue}
|
|
145
|
-
</output>
|
|
146
|
-
);
|
|
147
|
-
|
|
148
|
-
return (
|
|
149
|
-
<div
|
|
150
|
-
ref={domRef}
|
|
151
|
-
className={classNames(styles,
|
|
152
|
-
'spectrum-Slider',
|
|
153
|
-
{
|
|
154
|
-
'spectrum-Slider--positionTop': labelPosition === 'top',
|
|
155
|
-
'spectrum-Slider--positionSide': labelPosition === 'side',
|
|
156
|
-
'is-disabled': isDisabled
|
|
157
|
-
},
|
|
158
|
-
classes,
|
|
159
|
-
styleProps.className)}
|
|
160
|
-
style={{
|
|
161
|
-
...style,
|
|
162
|
-
...styleProps.style
|
|
163
|
-
}}
|
|
164
|
-
{...groupProps}>
|
|
165
|
-
{(props.label) &&
|
|
166
|
-
<div className={classNames(styles, 'spectrum-Slider-labelContainer')} role="presentation">
|
|
167
|
-
{props.label && labelNode}
|
|
168
|
-
{props.contextualHelp &&
|
|
169
|
-
<SlotProvider
|
|
170
|
-
slots={{
|
|
171
|
-
actionButton: {
|
|
172
|
-
UNSAFE_className: classNames(styles, 'spectrum-Slider-contextualHelp')
|
|
173
|
-
}
|
|
174
|
-
}}>
|
|
175
|
-
{props.contextualHelp}
|
|
176
|
-
</SlotProvider>
|
|
177
|
-
}
|
|
178
|
-
{labelPosition === 'top' && showValueLabel && valueNode}
|
|
179
|
-
</div>
|
|
180
|
-
}
|
|
181
|
-
<div className={classNames(styles, 'spectrum-Slider-controls')} ref={trackRef} {...trackProps} role="presentation">
|
|
182
|
-
{children({
|
|
183
|
-
trackRef,
|
|
184
|
-
inputRef,
|
|
185
|
-
state
|
|
186
|
-
})}
|
|
187
|
-
</div>
|
|
188
|
-
{labelPosition === 'side' &&
|
|
189
|
-
<div className={classNames(styles, 'spectrum-Slider-valueLabelContainer')} role="presentation">
|
|
190
|
-
{showValueLabel && valueNode}
|
|
191
|
-
</div>
|
|
192
|
-
}
|
|
193
|
-
</div>
|
|
194
|
-
);
|
|
195
|
-
});
|
package/src/SliderThumb.tsx
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright 2020 Adobe. All rights reserved.
|
|
3
|
-
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
-
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
-
*
|
|
7
|
-
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
-
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
-
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
-
* governing permissions and limitations under the License.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import {AriaSliderThumbProps} from '@react-types/slider';
|
|
14
|
-
import {classNames} from '@react-spectrum/utils';
|
|
15
|
-
import {FocusRing} from '@react-aria/focus';
|
|
16
|
-
import {mergeProps} from '@react-aria/utils';
|
|
17
|
-
import React, {ReactNode, useRef} from 'react';
|
|
18
|
-
import {RefObject} from '@react-types/shared';
|
|
19
|
-
import {SliderState} from '@react-stately/slider';
|
|
20
|
-
import styles from '@adobe/spectrum-css-temp/components/slider/vars.css';
|
|
21
|
-
import {useHover} from '@react-aria/interactions';
|
|
22
|
-
import {useSliderThumb} from '@react-aria/slider';
|
|
23
|
-
import {VisuallyHidden} from '@react-aria/visually-hidden';
|
|
24
|
-
|
|
25
|
-
interface SliderThumbProps extends AriaSliderThumbProps {
|
|
26
|
-
trackRef: RefObject<HTMLElement | null>,
|
|
27
|
-
inputRef?: RefObject<HTMLInputElement | null>,
|
|
28
|
-
state: SliderState
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export function SliderThumb(props: SliderThumbProps): ReactNode {
|
|
32
|
-
let {
|
|
33
|
-
inputRef,
|
|
34
|
-
state
|
|
35
|
-
} = props;
|
|
36
|
-
let backupRef = useRef<HTMLInputElement | null>(null);
|
|
37
|
-
inputRef = inputRef || backupRef;
|
|
38
|
-
|
|
39
|
-
let {thumbProps, inputProps, isDragging, isFocused} = useSliderThumb({
|
|
40
|
-
...props,
|
|
41
|
-
inputRef
|
|
42
|
-
}, state);
|
|
43
|
-
|
|
44
|
-
let {hoverProps, isHovered} = useHover({});
|
|
45
|
-
|
|
46
|
-
return (
|
|
47
|
-
<FocusRing within focusRingClass={classNames(styles, 'is-focused')}>
|
|
48
|
-
<div
|
|
49
|
-
className={
|
|
50
|
-
classNames(
|
|
51
|
-
styles,
|
|
52
|
-
'spectrum-Slider-handle',
|
|
53
|
-
{
|
|
54
|
-
'is-hovered': isHovered,
|
|
55
|
-
'is-dragged': isDragging,
|
|
56
|
-
'is-tophandle': isFocused
|
|
57
|
-
}
|
|
58
|
-
)
|
|
59
|
-
}
|
|
60
|
-
{...mergeProps(thumbProps, hoverProps)}
|
|
61
|
-
role="presentation">
|
|
62
|
-
<VisuallyHidden>
|
|
63
|
-
<input className={classNames(styles, 'spectrum-Slider-input')} ref={inputRef} {...inputProps} />
|
|
64
|
-
</VisuallyHidden>
|
|
65
|
-
</div>
|
|
66
|
-
</FocusRing>
|
|
67
|
-
);
|
|
68
|
-
}
|