@atlaskit/range 5.0.11

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.
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+
3
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.Theme = exports.track = exports.thumb = void 0;
9
+
10
+ var colors = _interopRequireWildcard(require("@atlaskit/theme/colors"));
11
+
12
+ var _components = require("@atlaskit/theme/components");
13
+
14
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
+
16
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
+
18
+ var thumb = {
19
+ default: {
20
+ background: colors.N0,
21
+ // This border color is not being used - awaiting focus state lift to props
22
+ border: colors.N800
23
+ },
24
+ disabled: {
25
+ boxShadow: colors.N60A
26
+ },
27
+ focus: {
28
+ // This border color is not being used - awaiting focus state lift to props
29
+ background: colors.N0,
30
+ border: colors.B200
31
+ }
32
+ };
33
+ exports.thumb = thumb;
34
+ var track = {
35
+ background: colors.N30A,
36
+ default: {
37
+ lower: colors.B400,
38
+ upper: colors.N30
39
+ },
40
+ disabled: {
41
+ lower: colors.N50,
42
+ upper: colors.N30
43
+ },
44
+ hover: {
45
+ lower: colors.B300,
46
+ upper: colors.N40
47
+ }
48
+ };
49
+ exports.track = track;
50
+ var Theme = (0, _components.createTheme)(function () {
51
+ return {
52
+ thumb: thumb,
53
+ track: track
54
+ };
55
+ });
56
+ exports.Theme = Theme;
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "@atlaskit/range",
3
+ "version": "5.0.11",
4
+ "sideEffects": false
5
+ }
@@ -0,0 +1 @@
1
+ export { default } from './range';
@@ -0,0 +1,67 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import React, { forwardRef, useCallback, useState } from 'react';
3
+ import { Input } from './styled';
4
+ import { Theme } from './theme';
5
+
6
+ const snapToStep = (value, min, step) => {
7
+ // Normalise the value to allow for division properly with different min values
8
+ const adjustedValue = value - min; // Find the number of steps the value covers
9
+
10
+ const numSteps = Math.round(adjustedValue / step); // Convert numSteps back into original range
11
+
12
+ return numSteps * step + min;
13
+ };
14
+
15
+ const getRoundedPercentValue = (value, min, max, step) => {
16
+ let percent = '0';
17
+
18
+ if (min < max && value > min) {
19
+ const snappedValue = snapToStep(value, min, step);
20
+ percent = ((snappedValue - min) / (max - min) * 100).toFixed(2);
21
+ }
22
+
23
+ return percent;
24
+ };
25
+
26
+ const noop = () => {};
27
+
28
+ export default /*#__PURE__*/forwardRef(function Range(props, ref) {
29
+ const {
30
+ isDisabled = false,
31
+ defaultValue = 50,
32
+ max = 100,
33
+ min = 0,
34
+ onChange = noop,
35
+ step = 1,
36
+ value: propsValue,
37
+ theme,
38
+ testId,
39
+ ...rest
40
+ } = props;
41
+ const spreadProps = {
42
+ max,
43
+ min,
44
+ step,
45
+ ref,
46
+ ...rest
47
+ };
48
+ const [value, setValue] = useState(propsValue !== undefined ? propsValue : defaultValue);
49
+ const handleChange = useCallback(e => {
50
+ const newValue = Number(e.target.value);
51
+ setValue(newValue); // Note use of newValue to ensure up=to-date value is used
52
+
53
+ onChange(newValue);
54
+ }, [onChange]);
55
+ const renderValue = propsValue !== undefined ? propsValue : value;
56
+ const valuePercent = getRoundedPercentValue(renderValue, min, max, step);
57
+ return /*#__PURE__*/React.createElement(Theme.Provider, {
58
+ value: theme
59
+ }, /*#__PURE__*/React.createElement(Theme.Consumer, null, computedTheme => /*#__PURE__*/React.createElement(Input, _extends({
60
+ type: "range",
61
+ disabled: isDisabled,
62
+ onChange: handleChange,
63
+ value: renderValue,
64
+ valuePercent: valuePercent,
65
+ "data-testid": testId
66
+ }, computedTheme, spreadProps))));
67
+ });
@@ -0,0 +1,255 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+
3
+ /** @jsx jsx */
4
+
5
+ /* eslint-disable no-mixed-operators */
6
+ import { forwardRef, useMemo } from 'react';
7
+ import { css, jsx } from '@emotion/core';
8
+ import { fontFamily } from '@atlaskit/theme/constants';
9
+ import { e200 } from '@atlaskit/theme/elevation';
10
+ const sliderThumbSize = 16;
11
+ const sliderThumbBorderThickness = 2;
12
+ const sliderLineThickness = 4;
13
+ const transitionDuration = '0.2s';
14
+ const sliderBorderRadius = sliderLineThickness / 2;
15
+ export const overallHeight = 40;
16
+
17
+ const getBackgroundGradient = ({
18
+ lower,
19
+ upper
20
+ }) => `
21
+ background: linear-gradient(${lower}, ${lower}) 0 / var(--range-inline-width) 100%
22
+ no-repeat ${upper};
23
+ [dir='rtl'] & {
24
+ background-position: right;
25
+ }
26
+ `; // Thumb style
27
+
28
+
29
+ const sliderThumbStyle = ({
30
+ thumb
31
+ }) => {
32
+ return `
33
+ background: ${thumb.default.background};
34
+ border: ${sliderThumbBorderThickness}px solid transparent;
35
+ border-radius: 50%;
36
+ height: ${sliderThumbSize}px;
37
+ width: ${sliderThumbSize}px;
38
+ box-sizing: border-box;
39
+ transition: border-color ${transitionDuration} ease-in-out;
40
+ ${e200()};
41
+ `;
42
+ }; // Track styles
43
+
44
+
45
+ const sliderTrackStyle = `
46
+ border-radius: ${sliderBorderRadius}px;
47
+ border: 0;
48
+ cursor: pointer;
49
+ height: ${sliderLineThickness}px;
50
+ width: 100%;
51
+ transition: background-color ${transitionDuration} ease-in-out;
52
+ `; // Range input styles
53
+
54
+ const chromeRangeInputStyle = tokens => {
55
+ return `
56
+ &::-webkit-slider-thumb {
57
+ -webkit-appearance: none;
58
+ margin-top: -${(sliderThumbSize - sliderLineThickness) / 2}px;
59
+ ${sliderThumbStyle(tokens)};
60
+ }
61
+
62
+ &:focus::-webkit-slider-thumb {
63
+ border-color: ${tokens.thumb.focus.border};
64
+ }
65
+
66
+ &:disabled::-webkit-slider-thumb {
67
+ cursor: not-allowed;
68
+ box-shadow: 0 0 1px ${tokens.thumb.disabled.boxShadow};
69
+ }
70
+
71
+ &::-webkit-slider-runnable-track {
72
+ ${sliderTrackStyle};
73
+ ${getBackgroundGradient(tokens.track.default)};
74
+ }
75
+
76
+ &:focus::-webkit-slider-runnable-track {
77
+ ${getBackgroundGradient(tokens.track.default)};
78
+ }
79
+
80
+ &:active::-webkit-slider-runnable-track,
81
+ &:hover::-webkit-slider-runnable-track {
82
+ ${getBackgroundGradient(tokens.track.hover)};
83
+ }
84
+
85
+ &:disabled::-webkit-slider-runnable-track {
86
+ ${getBackgroundGradient(tokens.track.disabled)}
87
+ cursor: not-allowed;
88
+ }
89
+ `;
90
+ };
91
+
92
+ const firefoxRangeInputStyle = tokens => {
93
+ return `
94
+ &::-moz-focus-outer {
95
+ border: 0;
96
+ }
97
+
98
+ &::-moz-range-thumb {
99
+ ${sliderThumbStyle(tokens)};
100
+ }
101
+
102
+ &:focus::-moz-range-thumb {
103
+ border-color: ${tokens.thumb.focus.border};
104
+ }
105
+
106
+ &:disabled::-moz-range-thumb {
107
+ cursor: not-allowed;
108
+ box-shadow: 0 0 1px ${tokens.thumb.disabled.boxShadow};
109
+ }
110
+
111
+ &::-moz-range-progress {
112
+ ${sliderTrackStyle};
113
+ background: ${tokens.track.default.lower};
114
+ }
115
+
116
+ &::-moz-range-track {
117
+ ${sliderTrackStyle};
118
+ background: ${tokens.track.default.upper};
119
+ }
120
+
121
+ &:active::-moz-range-progress,
122
+ &:hover::-moz-range-progress {
123
+ background: ${tokens.track.hover.lower};
124
+ }
125
+
126
+ &:active::-moz-range-track,
127
+ &:hover::-moz-range-track {
128
+ background: ${tokens.track.hover.upper};
129
+ }
130
+
131
+ &:disabled::-moz-range-progress {
132
+ background: ${tokens.track.disabled.lower};
133
+ cursor: not-allowed;
134
+ }
135
+
136
+ &:disabled::-moz-range-track {
137
+ background: ${tokens.track.disabled.upper};
138
+ cursor: not-allowed;
139
+ }
140
+ `;
141
+ };
142
+
143
+ const IERangeInputStyle = tokens => {
144
+ return `
145
+ &::-ms-thumb {
146
+ margin-top: 0;
147
+ ${sliderThumbStyle(tokens)};
148
+ }
149
+
150
+ &:focus::-ms-thumb {
151
+ border-color: ${tokens.thumb.focus.border};
152
+ }
153
+
154
+ &:disabled::-ms-thumb {
155
+ cursor: not-allowed;
156
+ box-shadow: 0 0 1px ${tokens.thumb.disabled.boxShadow};
157
+ }
158
+
159
+ &::-ms-track {
160
+ background: transparent;
161
+ border-color: transparent;
162
+ color: transparent;
163
+ cursor: pointer;
164
+ height: ${sliderLineThickness}px;
165
+ transition: background-color ${transitionDuration} ease-in-out;
166
+ width: 100%;
167
+ }
168
+
169
+ &::-ms-fill-lower {
170
+ background: ${tokens.track.default.lower};
171
+ border-radius: ${sliderBorderRadius}px;
172
+ border: 0;
173
+ }
174
+
175
+ &::-ms-fill-upper {
176
+ background: ${tokens.track.default.upper};
177
+ border-radius: ${sliderBorderRadius}px;
178
+ border: 0;
179
+ }
180
+
181
+ &:active::-ms-fill-lower,
182
+ &:hover::-ms-fill-lower {
183
+ background: ${tokens.track.hover.lower};
184
+ }
185
+
186
+ &:active::-ms-fill-upper,
187
+ &:hover::-ms-fill-upper {
188
+ background: ${tokens.track.hover.upper};
189
+ }
190
+
191
+ &:disabled::-ms-fill-lower {
192
+ background: ${tokens.track.disabled.lower};
193
+ cursor: not-allowed;
194
+ }
195
+
196
+ &:disabled::-ms-fill-upper {
197
+ background: ${tokens.track.disabled.upper};
198
+ cursor: not-allowed;
199
+ }
200
+ `;
201
+ }; // Styles are split per browser as they are implemented differently
202
+ // Cannot consolidate as Chrome & Firefox don't recognise styles if they are grouped
203
+ // with CSS selectors they don't recognise, e.g. &::-ms-thumb
204
+
205
+
206
+ export const rangeInputStyle = tokens => {
207
+ return css`
208
+ -webkit-appearance: none; /* Hides the slider so that custom slider can be made */
209
+ background: transparent; /* Otherwise white in Chrome */
210
+ height: ${overallHeight}px; /* Otherwise thumb will collide with previous box element */
211
+ padding: 0; /* IE11 includes padding, this normalises it */
212
+ width: 100%; /* Specific width is required for Firefox. */
213
+
214
+ &:focus {
215
+ outline: none;
216
+ }
217
+
218
+ &:disabled {
219
+ cursor: not-allowed;
220
+ }
221
+
222
+ ${chromeRangeInputStyle(tokens)}
223
+ ${firefoxRangeInputStyle(tokens)}
224
+ ${IERangeInputStyle(tokens)};
225
+
226
+ font-family: ${fontFamily()};
227
+
228
+ background-position: right;
229
+ `;
230
+ };
231
+ export const Input = /*#__PURE__*/forwardRef((props, ref) => {
232
+ const {
233
+ valuePercent,
234
+ thumb,
235
+ track,
236
+ style,
237
+ ...strippedProps
238
+ } = props; // Note: emotion will cache unique outputs as their own this
239
+ // We are memoizing the creation of this string
240
+
241
+ const styles = useMemo(() => rangeInputStyle({
242
+ track,
243
+ thumb
244
+ }), [thumb, track]); // We are creating a css variable to control the "progress" portion of the range input
245
+ // This avoids us needing to create a new css class for each new percentage value
246
+
247
+ return jsx("input", _extends({}, strippedProps, {
248
+ style: {
249
+ '--range-inline-width': `${valuePercent}%`
250
+ },
251
+ ref: ref,
252
+ css: styles
253
+ }));
254
+ });
255
+ Input.displayName = 'InputRange';
@@ -0,0 +1,36 @@
1
+ import * as colors from '@atlaskit/theme/colors';
2
+ import { createTheme } from '@atlaskit/theme/components';
3
+ export const thumb = {
4
+ default: {
5
+ background: colors.N0,
6
+ // This border color is not being used - awaiting focus state lift to props
7
+ border: colors.N800
8
+ },
9
+ disabled: {
10
+ boxShadow: colors.N60A
11
+ },
12
+ focus: {
13
+ // This border color is not being used - awaiting focus state lift to props
14
+ background: colors.N0,
15
+ border: colors.B200
16
+ }
17
+ };
18
+ export const track = {
19
+ background: colors.N30A,
20
+ default: {
21
+ lower: colors.B400,
22
+ upper: colors.N30
23
+ },
24
+ disabled: {
25
+ lower: colors.N50,
26
+ upper: colors.N30
27
+ },
28
+ hover: {
29
+ lower: colors.B300,
30
+ upper: colors.N40
31
+ }
32
+ };
33
+ export const Theme = createTheme(() => ({
34
+ thumb,
35
+ track
36
+ }));
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "@atlaskit/range",
3
+ "version": "5.0.11",
4
+ "sideEffects": false
5
+ }
@@ -0,0 +1 @@
1
+ export { default } from './range';
@@ -0,0 +1,86 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
4
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
5
+
6
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
7
+
8
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
9
+
10
+ import React, { forwardRef, useCallback, useState } from 'react';
11
+ import { Input } from './styled';
12
+ import { Theme } from './theme';
13
+
14
+ var snapToStep = function snapToStep(value, min, step) {
15
+ // Normalise the value to allow for division properly with different min values
16
+ var adjustedValue = value - min; // Find the number of steps the value covers
17
+
18
+ var numSteps = Math.round(adjustedValue / step); // Convert numSteps back into original range
19
+
20
+ return numSteps * step + min;
21
+ };
22
+
23
+ var getRoundedPercentValue = function getRoundedPercentValue(value, min, max, step) {
24
+ var percent = '0';
25
+
26
+ if (min < max && value > min) {
27
+ var snappedValue = snapToStep(value, min, step);
28
+ percent = ((snappedValue - min) / (max - min) * 100).toFixed(2);
29
+ }
30
+
31
+ return percent;
32
+ };
33
+
34
+ var noop = function noop() {};
35
+
36
+ export default /*#__PURE__*/forwardRef(function Range(props, ref) {
37
+ var _props$isDisabled = props.isDisabled,
38
+ isDisabled = _props$isDisabled === void 0 ? false : _props$isDisabled,
39
+ _props$defaultValue = props.defaultValue,
40
+ defaultValue = _props$defaultValue === void 0 ? 50 : _props$defaultValue,
41
+ _props$max = props.max,
42
+ max = _props$max === void 0 ? 100 : _props$max,
43
+ _props$min = props.min,
44
+ min = _props$min === void 0 ? 0 : _props$min,
45
+ _props$onChange = props.onChange,
46
+ onChange = _props$onChange === void 0 ? noop : _props$onChange,
47
+ _props$step = props.step,
48
+ step = _props$step === void 0 ? 1 : _props$step,
49
+ propsValue = props.value,
50
+ theme = props.theme,
51
+ testId = props.testId,
52
+ rest = _objectWithoutProperties(props, ["isDisabled", "defaultValue", "max", "min", "onChange", "step", "value", "theme", "testId"]);
53
+
54
+ var spreadProps = _objectSpread({
55
+ max: max,
56
+ min: min,
57
+ step: step,
58
+ ref: ref
59
+ }, rest);
60
+
61
+ var _useState = useState(propsValue !== undefined ? propsValue : defaultValue),
62
+ _useState2 = _slicedToArray(_useState, 2),
63
+ value = _useState2[0],
64
+ setValue = _useState2[1];
65
+
66
+ var handleChange = useCallback(function (e) {
67
+ var newValue = Number(e.target.value);
68
+ setValue(newValue); // Note use of newValue to ensure up=to-date value is used
69
+
70
+ onChange(newValue);
71
+ }, [onChange]);
72
+ var renderValue = propsValue !== undefined ? propsValue : value;
73
+ var valuePercent = getRoundedPercentValue(renderValue, min, max, step);
74
+ return /*#__PURE__*/React.createElement(Theme.Provider, {
75
+ value: theme
76
+ }, /*#__PURE__*/React.createElement(Theme.Consumer, null, function (computedTheme) {
77
+ return /*#__PURE__*/React.createElement(Input, _extends({
78
+ type: "range",
79
+ disabled: isDisabled,
80
+ onChange: handleChange,
81
+ value: renderValue,
82
+ valuePercent: valuePercent,
83
+ "data-testid": testId
84
+ }, computedTheme, spreadProps));
85
+ }));
86
+ });