@chayns-components/core 5.0.0-beta.861 → 5.0.0-beta.868
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/lib/cjs/components/slider-button/SliderButton.js +164 -154
- package/lib/cjs/components/slider-button/SliderButton.js.map +1 -1
- package/lib/cjs/components/slider-button/SliderButton.styles.js +33 -8
- package/lib/cjs/components/slider-button/SliderButton.styles.js.map +1 -1
- package/lib/esm/components/slider-button/SliderButton.js +180 -155
- package/lib/esm/components/slider-button/SliderButton.js.map +1 -1
- package/lib/esm/components/slider-button/SliderButton.styles.js +48 -11
- package/lib/esm/components/slider-button/SliderButton.styles.js.map +1 -1
- package/lib/types/components/slider-button/SliderButton.d.ts +0 -4
- package/lib/types/components/slider-button/SliderButton.styles.d.ts +9 -2
- package/package.json +2 -2
|
@@ -1,42 +1,73 @@
|
|
|
1
1
|
import { setRefreshScrollEnabled } from 'chayns-api';
|
|
2
2
|
import { AnimatePresence, useAnimate } from 'framer-motion';
|
|
3
3
|
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
4
|
-
import { useTheme } from 'styled-components';
|
|
5
4
|
import { useElementSize } from '../../hooks/useElementSize';
|
|
6
5
|
import { calculateBiggestWidth } from '../../utils/calculate';
|
|
7
6
|
import { getNearestPoint, getThumbPosition } from '../../utils/sliderButton';
|
|
8
|
-
import
|
|
7
|
+
import Icon from '../icon/Icon';
|
|
8
|
+
import Popup from '../popup/Popup';
|
|
9
|
+
import { StyledMotionSliderButtonThumb, StyledSliderButton, StyledSliderButtonButtonsWrapper, StyledSliderButtonItem, StyledSliderButtonPopupContent, StyledSliderButtonPopupContentItem, StyledSliderButtonWrapper } from './SliderButton.styles';
|
|
9
10
|
const SliderButton = _ref => {
|
|
10
11
|
let {
|
|
11
12
|
selectedButtonId,
|
|
12
13
|
isDisabled,
|
|
13
14
|
items,
|
|
14
|
-
onChange
|
|
15
|
-
shouldUseFullWidth = false
|
|
15
|
+
onChange
|
|
16
16
|
} = _ref;
|
|
17
|
-
const [selectedButton, setSelectedButton] = useState(undefined);
|
|
18
17
|
const [dragRange, setDragRange] = useState({
|
|
19
18
|
left: 0,
|
|
20
19
|
right: 0
|
|
21
20
|
});
|
|
21
|
+
const [shownItemsCount, setShownItemsCount] = useState(items.length);
|
|
22
|
+
const [sliderSize, setSliderSize] = useState({
|
|
23
|
+
width: 0
|
|
24
|
+
});
|
|
25
|
+
const [currentId, setCurrentId] = useState('');
|
|
26
|
+
const [currentPopupId, setCurrentPopupId] = useState('');
|
|
27
|
+
const [currentIndex, setCurrentIndex] = useState(0);
|
|
22
28
|
const sliderButtonRef = useRef(null);
|
|
23
29
|
const sliderButtonWrapperRef = useRef(null);
|
|
24
|
-
const
|
|
25
|
-
const preventHandleScroll = useRef(false);
|
|
30
|
+
const popupRef = useRef(null);
|
|
26
31
|
const [scope, animate] = useAnimate();
|
|
27
32
|
const initialItemWidth = useMemo(() => calculateBiggestWidth(items), [items]);
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
const elementSize = useElementSize(sliderButtonRef);
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
if (elementSize) setSliderSize(elementSize);
|
|
36
|
+
}, [elementSize]);
|
|
37
|
+
const setPopupId = useCallback(selectedId => {
|
|
38
|
+
const ids = items.slice(shownItemsCount - 1).map(_ref2 => {
|
|
39
|
+
let {
|
|
40
|
+
id
|
|
41
|
+
} = _ref2;
|
|
42
|
+
return id;
|
|
43
|
+
});
|
|
44
|
+
const newId = ids.find(id => id === selectedId);
|
|
45
|
+
if (newId) {
|
|
46
|
+
setCurrentId('more');
|
|
47
|
+
setCurrentPopupId(newId);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
setCurrentId(selectedId);
|
|
51
|
+
}, [items, shownItemsCount]);
|
|
52
|
+
const isSliderBigger = useMemo(() => sliderSize && Math.floor(sliderSize.width / initialItemWidth) < items.length - 1, [initialItemWidth, items.length, sliderSize]);
|
|
53
|
+
const maxShownItemsCount = useMemo(() => {
|
|
54
|
+
let totalWidth = 0;
|
|
55
|
+
let count = 0;
|
|
56
|
+
while (count < items.length) {
|
|
57
|
+
const visibleItems = items.slice(0, count + 1);
|
|
58
|
+
const currentMaxWidth = calculateBiggestWidth(visibleItems) + 8;
|
|
59
|
+
if (totalWidth + currentMaxWidth > sliderSize.width) break;
|
|
60
|
+
totalWidth += currentMaxWidth;
|
|
61
|
+
count++;
|
|
37
62
|
}
|
|
38
|
-
return
|
|
39
|
-
}, [
|
|
63
|
+
return count;
|
|
64
|
+
}, [items, sliderSize.width]);
|
|
65
|
+
const itemWidth = useMemo(() => {
|
|
66
|
+
const sliderWidth = sliderSize?.width || 0;
|
|
67
|
+
const itemCount = items.length || 1;
|
|
68
|
+
setShownItemsCount(isSliderBigger ? maxShownItemsCount : itemCount);
|
|
69
|
+
return sliderWidth / (isSliderBigger ? maxShownItemsCount : itemCount);
|
|
70
|
+
}, [isSliderBigger, items.length, maxShownItemsCount, sliderSize?.width]);
|
|
40
71
|
useEffect(() => {
|
|
41
72
|
if (sliderSize) {
|
|
42
73
|
const sliderWidth = itemWidth * (items.length - 1);
|
|
@@ -56,67 +87,130 @@ const SliderButton = _ref => {
|
|
|
56
87
|
});
|
|
57
88
|
}, [animate, scope]);
|
|
58
89
|
const setItemPosition = useCallback(index => {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
const count = dragRange.right / itemWidth;
|
|
64
|
-
if (items.length - count >= index) {
|
|
65
|
-
void animation(0);
|
|
66
|
-
} else {
|
|
67
|
-
void animation(itemWidth * (count - (items.length - index)));
|
|
68
|
-
}
|
|
69
|
-
if (sliderButtonWrapperRef.current) {
|
|
70
|
-
sliderButtonWrapperRef.current.scrollLeft = itemWidth * index;
|
|
71
|
-
}
|
|
72
|
-
}, [animation, dragRange.right, isSliderBigger, itemWidth, items.length]);
|
|
90
|
+
setCurrentIndex(index);
|
|
91
|
+
void animation(itemWidth * index);
|
|
92
|
+
}, [animation, itemWidth]);
|
|
73
93
|
useEffect(() => {
|
|
74
|
-
if (selectedButtonId) {
|
|
75
|
-
|
|
76
|
-
const index = items.findIndex(_ref2 => {
|
|
94
|
+
if (typeof selectedButtonId === 'string') {
|
|
95
|
+
let index = items.findIndex(_ref3 => {
|
|
77
96
|
let {
|
|
78
97
|
id
|
|
79
|
-
} =
|
|
98
|
+
} = _ref3;
|
|
80
99
|
return id === selectedButtonId;
|
|
81
100
|
});
|
|
101
|
+
setCurrentId(selectedButtonId);
|
|
102
|
+
setPopupId(selectedButtonId);
|
|
103
|
+
if (items.length > shownItemsCount && index > shownItemsCount - 1) {
|
|
104
|
+
index = shownItemsCount - 1;
|
|
105
|
+
}
|
|
82
106
|
if (index >= 0) {
|
|
83
107
|
setItemPosition(index);
|
|
84
108
|
}
|
|
85
|
-
} else {
|
|
86
|
-
setSelectedButton(items[0]?.id);
|
|
87
109
|
}
|
|
88
|
-
}, [animation, dragRange.right, isSliderBigger, itemWidth, items, selectedButtonId, setItemPosition]);
|
|
110
|
+
}, [animation, dragRange.right, isSliderBigger, itemWidth, items, selectedButtonId, setItemPosition, setPopupId, shownItemsCount]);
|
|
89
111
|
const handleClick = useCallback((id, index) => {
|
|
90
112
|
if (isDisabled) {
|
|
91
113
|
return;
|
|
92
114
|
}
|
|
93
|
-
|
|
94
|
-
if (typeof onChange === 'function') {
|
|
115
|
+
setPopupId(id);
|
|
116
|
+
if (typeof onChange === 'function' && id !== 'more') {
|
|
95
117
|
onChange(id);
|
|
96
118
|
}
|
|
119
|
+
if (popupRef.current) {
|
|
120
|
+
if (id === 'more') {
|
|
121
|
+
popupRef.current.show();
|
|
122
|
+
} else {
|
|
123
|
+
popupRef.current.hide();
|
|
124
|
+
}
|
|
125
|
+
}
|
|
97
126
|
setItemPosition(index);
|
|
98
|
-
}, [isDisabled, onChange, setItemPosition]);
|
|
99
|
-
const buttons = useMemo(() =>
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
127
|
+
}, [isDisabled, onChange, setItemPosition, setPopupId]);
|
|
128
|
+
const buttons = useMemo(() => {
|
|
129
|
+
if (items.length > shownItemsCount) {
|
|
130
|
+
const newItems = items.slice(0, shownItemsCount - 1);
|
|
131
|
+
const otherItems = items.slice(shownItemsCount - 1);
|
|
132
|
+
const elements = newItems.map((_ref4, index) => {
|
|
133
|
+
let {
|
|
134
|
+
id,
|
|
135
|
+
text
|
|
136
|
+
} = _ref4;
|
|
137
|
+
return /*#__PURE__*/React.createElement(StyledSliderButtonItem, {
|
|
138
|
+
$width: itemWidth,
|
|
139
|
+
key: `slider-button-${id}`,
|
|
140
|
+
onClick: () => handleClick(id, index)
|
|
141
|
+
}, text);
|
|
142
|
+
});
|
|
143
|
+
const popupContent = otherItems.map(_ref5 => {
|
|
144
|
+
let {
|
|
145
|
+
id,
|
|
146
|
+
text
|
|
147
|
+
} = _ref5;
|
|
148
|
+
return /*#__PURE__*/React.createElement(StyledSliderButtonPopupContentItem, {
|
|
149
|
+
key: `slider-button-${id}`,
|
|
150
|
+
onClick: () => handleClick(id, newItems.length),
|
|
151
|
+
$isSelected: id === currentPopupId
|
|
152
|
+
}, text);
|
|
153
|
+
});
|
|
154
|
+
const id = 'more';
|
|
155
|
+
elements.push(/*#__PURE__*/React.createElement(StyledSliderButtonItem, {
|
|
156
|
+
$width: itemWidth,
|
|
157
|
+
key: `slider-button-${id}`
|
|
158
|
+
}, /*#__PURE__*/React.createElement(Popup, {
|
|
159
|
+
ref: popupRef,
|
|
160
|
+
content: /*#__PURE__*/React.createElement(StyledSliderButtonPopupContent, null, popupContent)
|
|
161
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
162
|
+
icons: ['fa fa-ellipsis'],
|
|
163
|
+
color: "white"
|
|
164
|
+
}))));
|
|
165
|
+
return elements;
|
|
166
|
+
}
|
|
167
|
+
return items.map(_ref6 => {
|
|
113
168
|
let {
|
|
114
|
-
id
|
|
115
|
-
|
|
116
|
-
|
|
169
|
+
id,
|
|
170
|
+
text
|
|
171
|
+
} = _ref6;
|
|
172
|
+
return /*#__PURE__*/React.createElement(StyledSliderButtonItem, {
|
|
173
|
+
$width: itemWidth,
|
|
174
|
+
key: `slider-button-${id}`
|
|
175
|
+
}, text);
|
|
176
|
+
});
|
|
177
|
+
}, [currentPopupId, handleClick, itemWidth, items, shownItemsCount]);
|
|
178
|
+
const pseudoButtons = useMemo(() => {
|
|
179
|
+
if (items.length > shownItemsCount) {
|
|
180
|
+
const newItems = items.slice(0, shownItemsCount - 1);
|
|
181
|
+
const elements = newItems.map((_ref7, index) => {
|
|
182
|
+
let {
|
|
183
|
+
id,
|
|
184
|
+
text
|
|
185
|
+
} = _ref7;
|
|
186
|
+
return /*#__PURE__*/React.createElement(StyledSliderButtonItem, {
|
|
187
|
+
$width: itemWidth,
|
|
188
|
+
key: `pseudo-slider-button-${id}`,
|
|
189
|
+
onClick: () => handleClick(id, index)
|
|
190
|
+
}, text);
|
|
191
|
+
});
|
|
192
|
+
const id = 'more';
|
|
193
|
+
elements.push(/*#__PURE__*/React.createElement(StyledSliderButtonItem, {
|
|
194
|
+
$width: itemWidth,
|
|
195
|
+
key: `pseudo-slider-button-${id}`,
|
|
196
|
+
onClick: () => handleClick(id, newItems.length)
|
|
197
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
198
|
+
icons: ['fa fa-ellipsis']
|
|
199
|
+
})));
|
|
200
|
+
return elements;
|
|
201
|
+
}
|
|
202
|
+
return items.map((_ref8, index) => {
|
|
203
|
+
let {
|
|
204
|
+
id,
|
|
205
|
+
text
|
|
206
|
+
} = _ref8;
|
|
207
|
+
return /*#__PURE__*/React.createElement(StyledSliderButtonItem, {
|
|
208
|
+
$width: itemWidth,
|
|
209
|
+
key: `pseudo-slider-button-${id}`,
|
|
210
|
+
onClick: () => handleClick(id, index)
|
|
211
|
+
}, text);
|
|
117
212
|
});
|
|
118
|
-
|
|
119
|
-
}, [items, selectedButton]);
|
|
213
|
+
}, [handleClick, itemWidth, items, shownItemsCount]);
|
|
120
214
|
|
|
121
215
|
/**
|
|
122
216
|
* Creates an array with the snap points relative to the width of the items
|
|
@@ -128,6 +222,9 @@ const SliderButton = _ref => {
|
|
|
128
222
|
}
|
|
129
223
|
return points;
|
|
130
224
|
}, [itemWidth, items.length]);
|
|
225
|
+
const handleDragStart = useCallback(() => {
|
|
226
|
+
void setRefreshScrollEnabled(false);
|
|
227
|
+
}, []);
|
|
131
228
|
const handleDragEnd = useCallback(() => {
|
|
132
229
|
void setRefreshScrollEnabled(true);
|
|
133
230
|
const position = getThumbPosition({
|
|
@@ -166,96 +263,30 @@ const SliderButton = _ref => {
|
|
|
166
263
|
});
|
|
167
264
|
if (nearestPoint >= 0 && nearestIndex >= 0) {
|
|
168
265
|
void animation(nearestPoint);
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
266
|
+
let id;
|
|
267
|
+
if (nearestIndex === shownItemsCount - 1) {
|
|
268
|
+
id = 'more';
|
|
269
|
+
} else {
|
|
270
|
+
id = items[nearestIndex]?.id;
|
|
173
271
|
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
const position = getThumbPosition({
|
|
181
|
-
scope,
|
|
182
|
-
itemWidth
|
|
183
|
-
});
|
|
184
|
-
if (!position) {
|
|
185
|
-
return;
|
|
186
|
-
}
|
|
187
|
-
const {
|
|
188
|
-
right,
|
|
189
|
-
left,
|
|
190
|
-
middle
|
|
191
|
-
} = position;
|
|
192
|
-
let scrollLeft = 0;
|
|
193
|
-
const scrollSpeed = 3;
|
|
194
|
-
if (sliderButtonWrapperRef.current) {
|
|
195
|
-
if (right >= dragRange.right) {
|
|
196
|
-
sliderButtonWrapperRef.current.scrollLeft += scrollSpeed;
|
|
272
|
+
if (popupRef.current) {
|
|
273
|
+
if (id === 'more') {
|
|
274
|
+
popupRef.current.show();
|
|
275
|
+
} else {
|
|
276
|
+
popupRef.current.hide();
|
|
277
|
+
}
|
|
197
278
|
}
|
|
198
|
-
if (
|
|
199
|
-
|
|
279
|
+
if (typeof onChange === 'function' && id && id !== 'more') {
|
|
280
|
+
onChange(id);
|
|
200
281
|
}
|
|
201
|
-
scrollLeft = sliderButtonWrapperRef.current.scrollLeft;
|
|
202
|
-
}
|
|
203
|
-
const {
|
|
204
|
-
nearestIndex
|
|
205
|
-
} = getNearestPoint({
|
|
206
|
-
snapPoints,
|
|
207
|
-
position: middle,
|
|
208
|
-
scrollLeft
|
|
209
|
-
});
|
|
210
|
-
if (nearestIndex >= 0) {
|
|
211
|
-
setSelectedButton(items[nearestIndex]?.id);
|
|
212
|
-
}
|
|
213
|
-
}, [dragRange, itemWidth, items, scope, snapPoints]);
|
|
214
|
-
|
|
215
|
-
// With this, the handleScroll works before the thumb is moved the first time.
|
|
216
|
-
useEffect(() => {
|
|
217
|
-
void animation(1);
|
|
218
|
-
void animation(0);
|
|
219
|
-
}, [animation]);
|
|
220
|
-
const handleScroll = useCallback(event => {
|
|
221
|
-
if (preventHandleScroll.current) {
|
|
222
|
-
return;
|
|
223
|
-
}
|
|
224
|
-
void setRefreshScrollEnabled(false);
|
|
225
|
-
const position = getThumbPosition({
|
|
226
|
-
scope,
|
|
227
|
-
itemWidth
|
|
228
|
-
});
|
|
229
|
-
if (!position) {
|
|
230
|
-
return;
|
|
231
|
-
}
|
|
232
|
-
const {
|
|
233
|
-
middle
|
|
234
|
-
} = position;
|
|
235
|
-
const {
|
|
236
|
-
scrollLeft
|
|
237
|
-
} = event.target;
|
|
238
|
-
const {
|
|
239
|
-
nearestIndex
|
|
240
|
-
} = getNearestPoint({
|
|
241
|
-
snapPoints,
|
|
242
|
-
position: middle,
|
|
243
|
-
scrollLeft
|
|
244
|
-
});
|
|
245
|
-
if (nearestIndex >= 0) {
|
|
246
|
-
setSelectedButton(items[nearestIndex]?.id);
|
|
247
|
-
}
|
|
248
|
-
if (timeout.current) {
|
|
249
|
-
clearTimeout(timeout.current);
|
|
250
282
|
}
|
|
251
|
-
|
|
252
|
-
handleDragEnd();
|
|
253
|
-
}, 200);
|
|
254
|
-
}, [handleDragEnd, itemWidth, items, scope, snapPoints]);
|
|
283
|
+
}, [animation, itemWidth, items, onChange, scope, shownItemsCount, snapPoints]);
|
|
255
284
|
return useMemo(() => /*#__PURE__*/React.createElement(StyledSliderButton, {
|
|
256
285
|
$isDisabled: isDisabled,
|
|
257
286
|
ref: sliderButtonRef
|
|
258
|
-
}, /*#__PURE__*/React.createElement(
|
|
287
|
+
}, /*#__PURE__*/React.createElement(StyledSliderButtonButtonsWrapper, {
|
|
288
|
+
$isInvisible: true
|
|
289
|
+
}, pseudoButtons), /*#__PURE__*/React.createElement(StyledMotionSliderButtonThumb, {
|
|
259
290
|
ref: scope,
|
|
260
291
|
drag: isDisabled ? false : 'x',
|
|
261
292
|
dragElastic: 0,
|
|
@@ -266,20 +297,14 @@ const SliderButton = _ref => {
|
|
|
266
297
|
...dragRange
|
|
267
298
|
},
|
|
268
299
|
$width: itemWidth,
|
|
269
|
-
onDrag: handleWhileDrag,
|
|
270
300
|
onDragEnd: handleDragEnd,
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
whileHover: isDisabled ? {} : {
|
|
275
|
-
backgroundColor: theme['409']
|
|
276
|
-
}
|
|
277
|
-
}, thumbText), /*#__PURE__*/React.createElement(StyledSliderButtonWrapper, {
|
|
301
|
+
onDragStart: handleDragStart,
|
|
302
|
+
onClick: () => handleClick(currentId, currentIndex)
|
|
303
|
+
}), /*#__PURE__*/React.createElement(StyledSliderButtonWrapper, {
|
|
278
304
|
$isDisabled: isDisabled,
|
|
279
305
|
$width: !isSliderBigger ? dragRange.right + itemWidth : dragRange.right,
|
|
280
|
-
ref: sliderButtonWrapperRef
|
|
281
|
-
|
|
282
|
-
}, /*#__PURE__*/React.createElement(AnimatePresence, null, /*#__PURE__*/React.createElement(StyledSliderButtonButtonsWrapper, null, buttons)))), [buttons, dragRange, handleDragEnd, handleScroll, handleWhileDrag, isDisabled, isSliderBigger, itemWidth, scope, theme, thumbText]);
|
|
306
|
+
ref: sliderButtonWrapperRef
|
|
307
|
+
}, /*#__PURE__*/React.createElement(AnimatePresence, null, /*#__PURE__*/React.createElement(StyledSliderButtonButtonsWrapper, null, buttons)))), [buttons, currentId, currentIndex, dragRange, handleClick, handleDragEnd, handleDragStart, isDisabled, isSliderBigger, itemWidth, pseudoButtons, scope]);
|
|
283
308
|
};
|
|
284
309
|
SliderButton.displayName = 'SliderButton';
|
|
285
310
|
export default SliderButton;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SliderButton.js","names":["setRefreshScrollEnabled","AnimatePresence","useAnimate","React","useCallback","useEffect","useMemo","useRef","useState","useTheme","useElementSize","calculateBiggestWidth","getNearestPoint","getThumbPosition","StyledMotionSliderButtonThumb","StyledSliderButton","StyledSliderButtonButtonsWrapper","StyledSliderButtonItem","StyledSliderButtonWrapper","SliderButton","_ref","selectedButtonId","isDisabled","items","onChange","shouldUseFullWidth","selectedButton","setSelectedButton","undefined","dragRange","setDragRange","left","right","sliderButtonRef","sliderButtonWrapperRef","timeout","preventHandleScroll","scope","animate","initialItemWidth","sliderSize","theme","isSliderBigger","Math","floor","width","length","itemWidth","sliderWidth","maxShownItemsCount","itemCount","count","animation","x","current","type","duration","setItemPosition","index","scrollLeft","findIndex","_ref2","id","handleClick","buttons","map","_ref3","text","createElement","$width","key","onClick","$isSelected","thumbText","selectedItem","find","_ref4","snapPoints","points","i","push","handleDragEnd","position","middle","nearestPoint","nearestIndex","handleWhileDrag","scrollSpeed","handleScroll","event","target","clearTimeout","window","setTimeout","$isDisabled","ref","drag","dragElastic","dragConstraints","onDrag","onDragEnd","whileTap","backgroundColor","whileHover","onScroll","displayName"],"sources":["../../../../src/components/slider-button/SliderButton.tsx"],"sourcesContent":["import { setRefreshScrollEnabled } from 'chayns-api';\nimport { AnimatePresence, useAnimate } from 'framer-motion';\nimport React, { FC, UIEvent, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useTheme } from 'styled-components';\nimport { useElementSize } from '../../hooks/useElementSize';\nimport type { SliderButtonItem } from '../../types/slider-button';\nimport { calculateBiggestWidth } from '../../utils/calculate';\nimport { getNearestPoint, getThumbPosition } from '../../utils/sliderButton';\nimport type { Theme } from '../color-scheme-provider/ColorSchemeProvider';\nimport {\n StyledMotionSliderButtonThumb,\n StyledSliderButton,\n StyledSliderButtonButtonsWrapper,\n StyledSliderButtonItem,\n StyledSliderButtonWrapper,\n} from './SliderButton.styles';\n\nexport type SliderButtonProps = {\n /**\n * Whether the button is disabled.\n */\n isDisabled?: boolean;\n /**\n * Function to be executed when a button is selected.\n * @param id\n */\n onChange?: (id: string) => void;\n /**\n * The buttons that are slidable.\n */\n items: SliderButtonItem[];\n /**\n * The id of a button that should be selected.\n */\n selectedButtonId?: string;\n /**\n * Whether the full width should be used if the slider is smaller.\n */\n shouldUseFullWidth?: boolean;\n};\n\nconst SliderButton: FC<SliderButtonProps> = ({\n selectedButtonId,\n isDisabled,\n items,\n onChange,\n shouldUseFullWidth = false,\n}) => {\n const [selectedButton, setSelectedButton] = useState<string | undefined>(undefined);\n const [dragRange, setDragRange] = useState({ left: 0, right: 0 });\n\n const sliderButtonRef = useRef<HTMLDivElement>(null);\n const sliderButtonWrapperRef = useRef<HTMLDivElement>(null);\n const timeout = useRef<number>();\n const preventHandleScroll = useRef(false);\n\n const [scope, animate] = useAnimate();\n\n const initialItemWidth = useMemo(() => calculateBiggestWidth(items), [items]);\n const sliderSize = useElementSize(sliderButtonRef);\n\n const theme: Theme = useTheme();\n\n const isSliderBigger = useMemo(\n () => sliderSize && Math.floor(sliderSize.width / initialItemWidth) < items.length,\n [initialItemWidth, items.length, sliderSize],\n );\n\n const itemWidth = useMemo(() => {\n if (shouldUseFullWidth) {\n const sliderWidth = sliderSize?.width || 0;\n const maxShownItemsCount = Math.floor(sliderWidth / initialItemWidth);\n const itemCount = items.length || 1;\n\n return sliderWidth / (isSliderBigger ? maxShownItemsCount : itemCount);\n }\n\n return initialItemWidth;\n }, [initialItemWidth, isSliderBigger, items.length, shouldUseFullWidth, sliderSize?.width]);\n\n useEffect(() => {\n if (sliderSize) {\n const sliderWidth = itemWidth * (items.length - 1);\n\n const count = Math.floor(sliderSize.width / itemWidth);\n\n setDragRange({ left: 0, right: isSliderBigger ? itemWidth * count : sliderWidth });\n }\n }, [isSliderBigger, itemWidth, items.length, sliderSize]);\n\n const animation = useCallback(\n async (x: number) => {\n await animate(\n scope.current,\n { x },\n {\n type: 'tween',\n duration: 0.2,\n },\n );\n },\n [animate, scope],\n );\n\n const setItemPosition = useCallback(\n (index: number) => {\n if (!isSliderBigger) {\n void animation(itemWidth * index);\n\n return;\n }\n\n const count = dragRange.right / itemWidth;\n\n if (items.length - count >= index) {\n void animation(0);\n } else {\n void animation(itemWidth * (count - (items.length - index)));\n }\n\n if (sliderButtonWrapperRef.current) {\n sliderButtonWrapperRef.current.scrollLeft = itemWidth * index;\n }\n },\n [animation, dragRange.right, isSliderBigger, itemWidth, items.length],\n );\n\n useEffect(() => {\n if (selectedButtonId) {\n setSelectedButton(selectedButtonId);\n\n const index = items.findIndex(({ id }) => id === selectedButtonId);\n\n if (index >= 0) {\n setItemPosition(index);\n }\n } else {\n setSelectedButton(items[0]?.id);\n }\n }, [\n animation,\n dragRange.right,\n isSliderBigger,\n itemWidth,\n items,\n selectedButtonId,\n setItemPosition,\n ]);\n\n const handleClick = useCallback(\n (id: string, index: number) => {\n if (isDisabled) {\n return;\n }\n\n setSelectedButton(id);\n\n if (typeof onChange === 'function') {\n onChange(id);\n }\n\n setItemPosition(index);\n },\n [isDisabled, onChange, setItemPosition],\n );\n\n const buttons = useMemo(\n () =>\n items.map(({ id, text }, index) => (\n <StyledSliderButtonItem\n $width={itemWidth}\n key={`slider-button-${id}`}\n onClick={() => handleClick(id, index)}\n $isSelected={id === selectedButton}\n >\n {text}\n </StyledSliderButtonItem>\n )),\n [handleClick, itemWidth, items, selectedButton],\n );\n\n const thumbText = useMemo(() => {\n const selectedItem = items.find(({ id }) => id === selectedButton);\n\n return selectedItem ? selectedItem.text : items[0]?.text;\n }, [items, selectedButton]);\n\n /**\n * Creates an array with the snap points relative to the width of the items\n */\n const snapPoints = useMemo(() => {\n const points = [0];\n\n for (let i = 1; i < items.length; i++) {\n points.push(itemWidth * i);\n }\n\n return points;\n }, [itemWidth, items.length]);\n\n const handleDragEnd = useCallback(() => {\n void setRefreshScrollEnabled(true);\n\n const position = getThumbPosition({ scope, itemWidth });\n\n if (!position) {\n return;\n }\n\n const { middle, left } = position;\n\n let scrollLeft = 0;\n\n if (sliderButtonWrapperRef.current) {\n scrollLeft = sliderButtonWrapperRef.current.scrollLeft;\n\n sliderButtonWrapperRef.current.scrollLeft = getNearestPoint({\n snapPoints,\n position: middle,\n scrollLeft: scrollLeft - left,\n }).nearestPoint;\n }\n\n const { nearestIndex } = getNearestPoint({\n snapPoints,\n position: middle,\n scrollLeft,\n });\n\n const { nearestPoint } = getNearestPoint({\n snapPoints,\n position: middle,\n scrollLeft: 0,\n });\n\n if (nearestPoint >= 0 && nearestIndex >= 0) {\n void animation(nearestPoint);\n\n const id = items[nearestIndex]?.id;\n\n setSelectedButton(id);\n\n if (typeof onChange === 'function' && id) {\n onChange(id);\n }\n }\n\n preventHandleScroll.current = false;\n }, [animation, itemWidth, items, onChange, scope, snapPoints]);\n\n const handleWhileDrag = useCallback(() => {\n preventHandleScroll.current = true;\n void setRefreshScrollEnabled(false);\n\n const position = getThumbPosition({ scope, itemWidth });\n\n if (!position) {\n return;\n }\n\n const { right, left, middle } = position;\n\n let scrollLeft = 0;\n\n const scrollSpeed = 3;\n\n if (sliderButtonWrapperRef.current) {\n if (right >= dragRange.right) {\n sliderButtonWrapperRef.current.scrollLeft += scrollSpeed;\n }\n\n if (left <= dragRange.left) {\n sliderButtonWrapperRef.current.scrollLeft -= scrollSpeed;\n }\n\n scrollLeft = sliderButtonWrapperRef.current.scrollLeft;\n }\n\n const { nearestIndex } = getNearestPoint({ snapPoints, position: middle, scrollLeft });\n\n if (nearestIndex >= 0) {\n setSelectedButton(items[nearestIndex]?.id);\n }\n }, [dragRange, itemWidth, items, scope, snapPoints]);\n\n // With this, the handleScroll works before the thumb is moved the first time.\n useEffect(() => {\n void animation(1);\n void animation(0);\n }, [animation]);\n\n const handleScroll = useCallback(\n (event: UIEvent<HTMLElement>) => {\n if (preventHandleScroll.current) {\n return;\n }\n\n void setRefreshScrollEnabled(false);\n\n const position = getThumbPosition({ scope, itemWidth });\n\n if (!position) {\n return;\n }\n\n const { middle } = position;\n\n const { scrollLeft } = event.target as HTMLDivElement;\n\n const { nearestIndex } = getNearestPoint({ snapPoints, position: middle, scrollLeft });\n\n if (nearestIndex >= 0) {\n setSelectedButton(items[nearestIndex]?.id);\n }\n\n if (timeout.current) {\n clearTimeout(timeout.current);\n }\n\n timeout.current = window.setTimeout(() => {\n handleDragEnd();\n }, 200);\n },\n [handleDragEnd, itemWidth, items, scope, snapPoints],\n );\n\n return useMemo(\n () => (\n <StyledSliderButton $isDisabled={isDisabled} ref={sliderButtonRef}>\n <StyledMotionSliderButtonThumb\n ref={scope}\n drag={isDisabled ? false : 'x'}\n dragElastic={0}\n dragConstraints={\n isSliderBigger\n ? { ...dragRange, right: dragRange.right - itemWidth }\n : { ...dragRange }\n }\n $width={itemWidth}\n onDrag={handleWhileDrag}\n onDragEnd={handleDragEnd}\n whileTap={isDisabled ? {} : { backgroundColor: theme['407'] }}\n whileHover={isDisabled ? {} : { backgroundColor: theme['409'] }}\n >\n {thumbText}\n </StyledMotionSliderButtonThumb>\n <StyledSliderButtonWrapper\n $isDisabled={isDisabled}\n $width={!isSliderBigger ? dragRange.right + itemWidth : dragRange.right}\n ref={sliderButtonWrapperRef}\n onScroll={handleScroll}\n >\n <AnimatePresence>\n <StyledSliderButtonButtonsWrapper>\n {buttons}\n </StyledSliderButtonButtonsWrapper>\n </AnimatePresence>\n </StyledSliderButtonWrapper>\n </StyledSliderButton>\n ),\n [\n buttons,\n dragRange,\n handleDragEnd,\n handleScroll,\n handleWhileDrag,\n isDisabled,\n isSliderBigger,\n itemWidth,\n scope,\n theme,\n thumbText,\n ],\n );\n};\n\nSliderButton.displayName = 'SliderButton';\n\nexport default SliderButton;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"SliderButton.js","names":["setRefreshScrollEnabled","AnimatePresence","useAnimate","React","useCallback","useEffect","useMemo","useRef","useState","useElementSize","calculateBiggestWidth","getNearestPoint","getThumbPosition","Icon","Popup","StyledMotionSliderButtonThumb","StyledSliderButton","StyledSliderButtonButtonsWrapper","StyledSliderButtonItem","StyledSliderButtonPopupContent","StyledSliderButtonPopupContentItem","StyledSliderButtonWrapper","SliderButton","_ref","selectedButtonId","isDisabled","items","onChange","dragRange","setDragRange","left","right","shownItemsCount","setShownItemsCount","length","sliderSize","setSliderSize","width","currentId","setCurrentId","currentPopupId","setCurrentPopupId","currentIndex","setCurrentIndex","sliderButtonRef","sliderButtonWrapperRef","popupRef","scope","animate","initialItemWidth","elementSize","setPopupId","selectedId","ids","slice","map","_ref2","id","newId","find","isSliderBigger","Math","floor","maxShownItemsCount","totalWidth","count","visibleItems","currentMaxWidth","itemWidth","sliderWidth","itemCount","animation","x","current","type","duration","setItemPosition","index","findIndex","_ref3","handleClick","show","hide","buttons","newItems","otherItems","elements","_ref4","text","createElement","$width","key","onClick","popupContent","_ref5","$isSelected","push","ref","content","icons","color","_ref6","pseudoButtons","_ref7","_ref8","snapPoints","points","i","handleDragStart","handleDragEnd","position","middle","scrollLeft","nearestPoint","nearestIndex","$isDisabled","$isInvisible","drag","dragElastic","dragConstraints","onDragEnd","onDragStart","displayName"],"sources":["../../../../src/components/slider-button/SliderButton.tsx"],"sourcesContent":["import { setRefreshScrollEnabled } from 'chayns-api';\nimport { AnimatePresence, useAnimate } from 'framer-motion';\nimport React, { FC, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useElementSize } from '../../hooks/useElementSize';\nimport { PopupRef } from '../../types/popup';\nimport type { SliderButtonItem } from '../../types/slider-button';\nimport { calculateBiggestWidth } from '../../utils/calculate';\nimport { getNearestPoint, getThumbPosition } from '../../utils/sliderButton';\nimport Icon from '../icon/Icon';\nimport Popup from '../popup/Popup';\nimport {\n StyledMotionSliderButtonThumb,\n StyledSliderButton,\n StyledSliderButtonButtonsWrapper,\n StyledSliderButtonItem,\n StyledSliderButtonPopupContent,\n StyledSliderButtonPopupContentItem,\n StyledSliderButtonWrapper,\n} from './SliderButton.styles';\n\nexport type SliderButtonProps = {\n /**\n * Whether the button is disabled.\n */\n isDisabled?: boolean;\n /**\n * Function to be executed when a button is selected.\n * @param id\n */\n onChange?: (id: string) => void;\n /**\n * The buttons that are slidable.\n */\n items: SliderButtonItem[];\n /**\n * The id of a button that should be selected.\n */\n selectedButtonId?: string;\n};\n\nconst SliderButton: FC<SliderButtonProps> = ({ selectedButtonId, isDisabled, items, onChange }) => {\n const [dragRange, setDragRange] = useState({ left: 0, right: 0 });\n const [shownItemsCount, setShownItemsCount] = useState(items.length);\n const [sliderSize, setSliderSize] = useState({ width: 0 });\n const [currentId, setCurrentId] = useState('');\n const [currentPopupId, setCurrentPopupId] = useState('');\n const [currentIndex, setCurrentIndex] = useState(0);\n\n const sliderButtonRef = useRef<HTMLDivElement>(null);\n const sliderButtonWrapperRef = useRef<HTMLDivElement>(null);\n const popupRef = useRef<PopupRef>(null);\n\n const [scope, animate] = useAnimate();\n\n const initialItemWidth = useMemo(() => calculateBiggestWidth(items), [items]);\n const elementSize = useElementSize(sliderButtonRef);\n\n useEffect(() => {\n if (elementSize) setSliderSize(elementSize);\n }, [elementSize]);\n\n const setPopupId = useCallback(\n (selectedId: string) => {\n const ids = items.slice(shownItemsCount - 1).map(({ id }) => id);\n\n const newId = ids.find((id) => id === selectedId);\n\n if (newId) {\n setCurrentId('more');\n setCurrentPopupId(newId);\n\n return;\n }\n\n setCurrentId(selectedId);\n },\n [items, shownItemsCount],\n );\n\n const isSliderBigger = useMemo(\n () => sliderSize && Math.floor(sliderSize.width / initialItemWidth) < items.length - 1,\n [initialItemWidth, items.length, sliderSize],\n );\n\n const maxShownItemsCount = useMemo(() => {\n let totalWidth = 0;\n let count = 0;\n\n while (count < items.length) {\n const visibleItems = items.slice(0, count + 1);\n const currentMaxWidth = calculateBiggestWidth(visibleItems) + 8;\n\n if (totalWidth + currentMaxWidth > sliderSize.width) break;\n\n totalWidth += currentMaxWidth;\n count++;\n }\n\n return count;\n }, [items, sliderSize.width]);\n\n const itemWidth = useMemo(() => {\n const sliderWidth = sliderSize?.width || 0;\n const itemCount = items.length || 1;\n\n setShownItemsCount(isSliderBigger ? maxShownItemsCount : itemCount);\n\n return sliderWidth / (isSliderBigger ? maxShownItemsCount : itemCount);\n }, [isSliderBigger, items.length, maxShownItemsCount, sliderSize?.width]);\n\n useEffect(() => {\n if (sliderSize) {\n const sliderWidth = itemWidth * (items.length - 1);\n\n const count = Math.floor(sliderSize.width / itemWidth);\n\n setDragRange({ left: 0, right: isSliderBigger ? itemWidth * count : sliderWidth });\n }\n }, [isSliderBigger, itemWidth, items.length, sliderSize]);\n\n const animation = useCallback(\n async (x: number) => {\n await animate(\n scope.current,\n { x },\n {\n type: 'tween',\n duration: 0.2,\n },\n );\n },\n [animate, scope],\n );\n\n const setItemPosition = useCallback(\n (index: number) => {\n setCurrentIndex(index);\n\n void animation(itemWidth * index);\n },\n [animation, itemWidth],\n );\n\n useEffect(() => {\n if (typeof selectedButtonId === 'string') {\n let index = items.findIndex(({ id }) => id === selectedButtonId);\n\n setCurrentId(selectedButtonId);\n\n setPopupId(selectedButtonId);\n\n if (items.length > shownItemsCount && index > shownItemsCount - 1) {\n index = shownItemsCount - 1;\n }\n\n if (index >= 0) {\n setItemPosition(index);\n }\n }\n }, [\n animation,\n dragRange.right,\n isSliderBigger,\n itemWidth,\n items,\n selectedButtonId,\n setItemPosition,\n setPopupId,\n shownItemsCount,\n ]);\n\n const handleClick = useCallback(\n (id: string, index: number) => {\n if (isDisabled) {\n return;\n }\n\n setPopupId(id);\n\n if (typeof onChange === 'function' && id !== 'more') {\n onChange(id);\n }\n\n if (popupRef.current) {\n if (id === 'more') {\n popupRef.current.show();\n } else {\n popupRef.current.hide();\n }\n }\n\n setItemPosition(index);\n },\n [isDisabled, onChange, setItemPosition, setPopupId],\n );\n\n const buttons = useMemo(() => {\n if (items.length > shownItemsCount) {\n const newItems = items.slice(0, shownItemsCount - 1);\n const otherItems = items.slice(shownItemsCount - 1);\n\n const elements = newItems.map(({ id, text }, index) => (\n <StyledSliderButtonItem\n $width={itemWidth}\n key={`slider-button-${id}`}\n onClick={() => handleClick(id, index)}\n >\n {text}\n </StyledSliderButtonItem>\n ));\n\n const popupContent = otherItems.map(({ id, text }) => (\n <StyledSliderButtonPopupContentItem\n key={`slider-button-${id}`}\n onClick={() => handleClick(id, newItems.length)}\n $isSelected={id === currentPopupId}\n >\n {text}\n </StyledSliderButtonPopupContentItem>\n ));\n\n const id = 'more';\n\n elements.push(\n <StyledSliderButtonItem $width={itemWidth} key={`slider-button-${id}`}>\n <Popup\n ref={popupRef}\n content={\n <StyledSliderButtonPopupContent>\n {popupContent}\n </StyledSliderButtonPopupContent>\n }\n >\n <Icon icons={['fa fa-ellipsis']} color=\"white\" />\n </Popup>\n </StyledSliderButtonItem>,\n );\n\n return elements;\n }\n return items.map(({ id, text }) => (\n <StyledSliderButtonItem $width={itemWidth} key={`slider-button-${id}`}>\n {text}\n </StyledSliderButtonItem>\n ));\n }, [currentPopupId, handleClick, itemWidth, items, shownItemsCount]);\n\n const pseudoButtons = useMemo(() => {\n if (items.length > shownItemsCount) {\n const newItems = items.slice(0, shownItemsCount - 1);\n\n const elements = newItems.map(({ id, text }, index) => (\n <StyledSliderButtonItem\n $width={itemWidth}\n key={`pseudo-slider-button-${id}`}\n onClick={() => handleClick(id, index)}\n >\n {text}\n </StyledSliderButtonItem>\n ));\n\n const id = 'more';\n\n elements.push(\n <StyledSliderButtonItem\n $width={itemWidth}\n key={`pseudo-slider-button-${id}`}\n onClick={() => handleClick(id, newItems.length)}\n >\n <Icon icons={['fa fa-ellipsis']} />\n </StyledSliderButtonItem>,\n );\n\n return elements;\n }\n return items.map(({ id, text }, index) => (\n <StyledSliderButtonItem\n $width={itemWidth}\n key={`pseudo-slider-button-${id}`}\n onClick={() => handleClick(id, index)}\n >\n {text}\n </StyledSliderButtonItem>\n ));\n }, [handleClick, itemWidth, items, shownItemsCount]);\n\n /**\n * Creates an array with the snap points relative to the width of the items\n */\n const snapPoints = useMemo(() => {\n const points = [0];\n\n for (let i = 1; i < items.length; i++) {\n points.push(itemWidth * i);\n }\n\n return points;\n }, [itemWidth, items.length]);\n\n const handleDragStart = useCallback(() => {\n void setRefreshScrollEnabled(false);\n }, []);\n\n const handleDragEnd = useCallback(() => {\n void setRefreshScrollEnabled(true);\n\n const position = getThumbPosition({ scope, itemWidth });\n\n if (!position) {\n return;\n }\n\n const { middle, left } = position;\n\n let scrollLeft = 0;\n\n if (sliderButtonWrapperRef.current) {\n scrollLeft = sliderButtonWrapperRef.current.scrollLeft;\n\n sliderButtonWrapperRef.current.scrollLeft = getNearestPoint({\n snapPoints,\n position: middle,\n scrollLeft: scrollLeft - left,\n }).nearestPoint;\n }\n\n const { nearestIndex } = getNearestPoint({\n snapPoints,\n position: middle,\n scrollLeft,\n });\n\n const { nearestPoint } = getNearestPoint({\n snapPoints,\n position: middle,\n scrollLeft: 0,\n });\n\n if (nearestPoint >= 0 && nearestIndex >= 0) {\n void animation(nearestPoint);\n\n let id;\n\n if (nearestIndex === shownItemsCount - 1) {\n id = 'more';\n } else {\n id = items[nearestIndex]?.id;\n }\n\n if (popupRef.current) {\n if (id === 'more') {\n popupRef.current.show();\n } else {\n popupRef.current.hide();\n }\n }\n\n if (typeof onChange === 'function' && id && id !== 'more') {\n onChange(id);\n }\n }\n }, [animation, itemWidth, items, onChange, scope, shownItemsCount, snapPoints]);\n\n return useMemo(\n () => (\n <StyledSliderButton $isDisabled={isDisabled} ref={sliderButtonRef}>\n <StyledSliderButtonButtonsWrapper $isInvisible>\n {pseudoButtons}\n </StyledSliderButtonButtonsWrapper>\n <StyledMotionSliderButtonThumb\n ref={scope}\n drag={isDisabled ? false : 'x'}\n dragElastic={0}\n dragConstraints={\n isSliderBigger\n ? { ...dragRange, right: dragRange.right - itemWidth }\n : { ...dragRange }\n }\n $width={itemWidth}\n onDragEnd={handleDragEnd}\n onDragStart={handleDragStart}\n onClick={() => handleClick(currentId, currentIndex)}\n />\n <StyledSliderButtonWrapper\n $isDisabled={isDisabled}\n $width={!isSliderBigger ? dragRange.right + itemWidth : dragRange.right}\n ref={sliderButtonWrapperRef}\n >\n <AnimatePresence>\n <StyledSliderButtonButtonsWrapper>\n {buttons}\n </StyledSliderButtonButtonsWrapper>\n </AnimatePresence>\n </StyledSliderButtonWrapper>\n </StyledSliderButton>\n ),\n [\n buttons,\n currentId,\n currentIndex,\n dragRange,\n handleClick,\n handleDragEnd,\n handleDragStart,\n isDisabled,\n isSliderBigger,\n itemWidth,\n pseudoButtons,\n scope,\n ],\n );\n};\n\nSliderButton.displayName = 'SliderButton';\n\nexport default SliderButton;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -16,7 +16,7 @@ export const StyledSliderButtonWrapper = styled.div`
|
|
|
16
16
|
let {
|
|
17
17
|
theme
|
|
18
18
|
} = _ref2;
|
|
19
|
-
return theme['
|
|
19
|
+
return theme['408'];
|
|
20
20
|
}};
|
|
21
21
|
border-radius: 3px;
|
|
22
22
|
border: none;
|
|
@@ -28,7 +28,6 @@ export const StyledSliderButtonWrapper = styled.div`
|
|
|
28
28
|
position: relative;
|
|
29
29
|
user-select: none;
|
|
30
30
|
transition: opacity 0.3s ease;
|
|
31
|
-
z-index: 1;
|
|
32
31
|
|
|
33
32
|
width: ${_ref3 => {
|
|
34
33
|
let {
|
|
@@ -78,32 +77,70 @@ export const StyledSliderButtonItem = styled.div`
|
|
|
78
77
|
justify-content: center;
|
|
79
78
|
color: white;
|
|
80
79
|
`;
|
|
80
|
+
export const StyledSliderButtonPopupContent = styled.div`
|
|
81
|
+
display: flex;
|
|
82
|
+
flex-direction: column;
|
|
83
|
+
`;
|
|
84
|
+
export const StyledSliderButtonPopupContentItem = styled.div`
|
|
85
|
+
font-size: 110%;
|
|
86
|
+
font-family: 'Roboto Medium', serif;
|
|
87
|
+
cursor: pointer;
|
|
88
|
+
background-color: ${_ref7 => {
|
|
89
|
+
let {
|
|
90
|
+
$isSelected,
|
|
91
|
+
theme
|
|
92
|
+
} = _ref7;
|
|
93
|
+
return $isSelected ? theme['secondary-102'] : undefined;
|
|
94
|
+
}};
|
|
95
|
+
padding: 4px 12px;
|
|
96
|
+
`;
|
|
81
97
|
export const StyledSliderButtonButtonsWrapper = styled.div`
|
|
82
98
|
position: absolute;
|
|
99
|
+
z-index: ${_ref8 => {
|
|
100
|
+
let {
|
|
101
|
+
$isInvisible
|
|
102
|
+
} = _ref8;
|
|
103
|
+
return $isInvisible ? '2' : '4';
|
|
104
|
+
}};
|
|
105
|
+
opacity: ${_ref9 => {
|
|
106
|
+
let {
|
|
107
|
+
$isInvisible
|
|
108
|
+
} = _ref9;
|
|
109
|
+
return $isInvisible ? 0 : 1;
|
|
110
|
+
}};
|
|
83
111
|
display: flex;
|
|
112
|
+
cursor: pointer;
|
|
84
113
|
align-items: center;
|
|
114
|
+
pointer-events: ${_ref10 => {
|
|
115
|
+
let {
|
|
116
|
+
$isInvisible
|
|
117
|
+
} = _ref10;
|
|
118
|
+
return $isInvisible ? 'auto' : 'none';
|
|
119
|
+
}};
|
|
85
120
|
`;
|
|
86
121
|
export const StyledMotionSliderButtonThumb = styled(motion.div)`
|
|
87
122
|
font-size: 110%;
|
|
88
123
|
font-family: 'Roboto Medium', serif;
|
|
89
|
-
background-color: ${
|
|
124
|
+
background-color: ${_ref11 => {
|
|
90
125
|
let {
|
|
91
126
|
theme
|
|
92
|
-
} =
|
|
93
|
-
return theme['
|
|
127
|
+
} = _ref11;
|
|
128
|
+
return theme['405'];
|
|
94
129
|
}};
|
|
95
|
-
|
|
130
|
+
opacity: 1;
|
|
131
|
+
width: ${_ref12 => {
|
|
96
132
|
let {
|
|
97
133
|
$width
|
|
98
|
-
} =
|
|
99
|
-
return $width;
|
|
134
|
+
} = _ref12;
|
|
135
|
+
return $width - 8;
|
|
100
136
|
}}px;
|
|
101
137
|
position: absolute;
|
|
102
|
-
border-radius:
|
|
103
|
-
|
|
138
|
+
border-radius: 2px;
|
|
139
|
+
top: 4px;
|
|
140
|
+
left: 4px;
|
|
104
141
|
white-space: nowrap;
|
|
105
142
|
z-index: 3;
|
|
106
|
-
height:
|
|
143
|
+
height: 24px;
|
|
107
144
|
padding: 7px 12px;
|
|
108
145
|
display: flex;
|
|
109
146
|
color: white;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SliderButton.styles.js","names":["motion","styled","StyledSliderButton","div","_ref","$isDisabled","StyledSliderButtonWrapper","_ref2","theme","_ref3","$width","_ref4","StyledSliderButtonItem","_ref5","_ref6","
|
|
1
|
+
{"version":3,"file":"SliderButton.styles.js","names":["motion","styled","StyledSliderButton","div","_ref","$isDisabled","StyledSliderButtonWrapper","_ref2","theme","_ref3","$width","_ref4","StyledSliderButtonItem","_ref5","_ref6","StyledSliderButtonPopupContent","StyledSliderButtonPopupContentItem","_ref7","$isSelected","undefined","StyledSliderButtonButtonsWrapper","_ref8","$isInvisible","_ref9","_ref10","StyledMotionSliderButtonThumb","_ref11","_ref12"],"sources":["../../../../src/components/slider-button/SliderButton.styles.ts"],"sourcesContent":["import { motion } from 'framer-motion';\nimport styled from 'styled-components';\nimport type { WithTheme } from '../color-scheme-provider/ColorSchemeProvider';\n\ntype StyledSliderButtonProps = WithTheme<{ $isDisabled?: boolean }>;\n\nexport const StyledSliderButton = styled.div<StyledSliderButtonProps>`\n opacity: ${({ $isDisabled }) => ($isDisabled ? 0.5 : 1)};\n width: 100%;\n touch-action: none;\n`;\n\ntype StyledSliderButtonWrapperProps = WithTheme<{ $width: number; $isDisabled?: boolean }>;\n\nexport const StyledSliderButtonWrapper = styled.div<StyledSliderButtonWrapperProps>`\n align-items: center;\n background-color: ${({ theme }: StyledMotionSliderButtonThumbProps) => theme['408']};\n border-radius: 3px;\n border: none;\n color: white;\n cursor: pointer;\n display: inline-flex;\n line-height: 1.15;\n height: 32px;\n position: relative;\n user-select: none;\n transition: opacity 0.3s ease;\n\n width: ${({ $width }) => $width}px;\n\n max-width: 100%;\n overflow-x: ${({ $isDisabled }) => ($isDisabled ? 'hidden' : 'scroll')};\n overflow-y: hidden;\n\n // Chrome\n &::-webkit-scrollbar {\n display: none;\n }\n\n // IE and Edge\n -ms-overflow-style: none;\n\n // Firefox\n scrollbar-width: none;\n`;\n\ntype StyledSliderButtonItemProps = WithTheme<{ $width: number }>;\n\nexport const StyledSliderButtonItem = styled.div<StyledSliderButtonItemProps>`\n font-size: 110%;\n font-family: 'Roboto Medium', serif;\n padding: 7px 12px;\n min-width: ${({ $width }) => $width}px;\n max-width: ${({ $width }) => $width}px;\n display: flex;\n white-space: nowrap;\n justify-content: center;\n color: white;\n`;\n\nexport const StyledSliderButtonPopupContent = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\ntype StyledSliderButtonPopupContentItemProps = WithTheme<{ $isSelected?: boolean }>;\n\nexport const StyledSliderButtonPopupContentItem = styled.div<StyledSliderButtonPopupContentItemProps>`\n font-size: 110%;\n font-family: 'Roboto Medium', serif;\n cursor: pointer;\n background-color: ${({ $isSelected, theme }: StyledSliderButtonPopupContentItemProps) =>\n $isSelected ? theme['secondary-102'] : undefined};\n padding: 4px 12px;\n`;\n\ntype StyledSliderButtonButtonsWrapperProps = WithTheme<{ $isInvisible?: boolean }>;\n\nexport const StyledSliderButtonButtonsWrapper = styled.div<StyledSliderButtonButtonsWrapperProps>`\n position: absolute;\n z-index: ${({ $isInvisible }) => ($isInvisible ? '2' : '4')};\n opacity: ${({ $isInvisible }) => ($isInvisible ? 0 : 1)};\n display: flex;\n cursor: pointer;\n align-items: center;\n pointer-events: ${({ $isInvisible }) => ($isInvisible ? 'auto' : 'none')};\n`;\n\ntype StyledMotionSliderButtonThumbProps = WithTheme<{ $width: number }>;\n\nexport const StyledMotionSliderButtonThumb = styled(motion.div)<StyledMotionSliderButtonThumbProps>`\n font-size: 110%;\n font-family: 'Roboto Medium', serif;\n background-color: ${({ theme }: StyledSliderButtonProps) => theme['405']};\n opacity: 1;\n width: ${({ $width }) => $width - 8}px;\n position: absolute;\n border-radius: 2px;\n top: 4px;\n left: 4px;\n white-space: nowrap;\n z-index: 3;\n height: 24px;\n padding: 7px 12px;\n display: flex;\n color: white;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n`;\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,eAAe;AACtC,OAAOC,MAAM,MAAM,mBAAmB;AAKtC,OAAO,MAAMC,kBAAkB,GAAGD,MAAM,CAACE,GAA4B;AACrE,eAAeC,IAAA;EAAA,IAAC;IAAEC;EAAY,CAAC,GAAAD,IAAA;EAAA,OAAMC,WAAW,GAAG,GAAG,GAAG,CAAC;AAAA,CAAC;AAC3D;AACA;AACA,CAAC;AAID,OAAO,MAAMC,yBAAyB,GAAGL,MAAM,CAACE,GAAmC;AACnF;AACA,wBAAwBI,KAAA;EAAA,IAAC;IAAEC;EAA0C,CAAC,GAAAD,KAAA;EAAA,OAAKC,KAAK,CAAC,KAAK,CAAC;AAAA;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAaC,KAAA;EAAA,IAAC;IAAEC;EAAO,CAAC,GAAAD,KAAA;EAAA,OAAKC,MAAM;AAAA;AACnC;AACA;AACA,kBAAkBC,KAAA;EAAA,IAAC;IAAEN;EAAY,CAAC,GAAAM,KAAA;EAAA,OAAMN,WAAW,GAAG,QAAQ,GAAG,QAAQ;AAAA,CAAC;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAID,OAAO,MAAMO,sBAAsB,GAAGX,MAAM,CAACE,GAAgC;AAC7E;AACA;AACA;AACA,iBAAiBU,KAAA;EAAA,IAAC;IAAEH;EAAO,CAAC,GAAAG,KAAA;EAAA,OAAKH,MAAM;AAAA;AACvC,iBAAiBI,KAAA;EAAA,IAAC;IAAEJ;EAAO,CAAC,GAAAI,KAAA;EAAA,OAAKJ,MAAM;AAAA;AACvC;AACA;AACA;AACA;AACA,CAAC;AAED,OAAO,MAAMK,8BAA8B,GAAGd,MAAM,CAACE,GAAG;AACxD;AACA;AACA,CAAC;AAID,OAAO,MAAMa,kCAAkC,GAAGf,MAAM,CAACE,GAA4C;AACrG;AACA;AACA;AACA,wBAAwBc,KAAA;EAAA,IAAC;IAAEC,WAAW;IAAEV;EAA+C,CAAC,GAAAS,KAAA;EAAA,OAChFC,WAAW,GAAGV,KAAK,CAAC,eAAe,CAAC,GAAGW,SAAS;AAAA;AACxD;AACA,CAAC;AAID,OAAO,MAAMC,gCAAgC,GAAGnB,MAAM,CAACE,GAA0C;AACjG;AACA,eAAekB,KAAA;EAAA,IAAC;IAAEC;EAAa,CAAC,GAAAD,KAAA;EAAA,OAAMC,YAAY,GAAG,GAAG,GAAG,GAAG;AAAA,CAAC;AAC/D,eAAeC,KAAA;EAAA,IAAC;IAAED;EAAa,CAAC,GAAAC,KAAA;EAAA,OAAMD,YAAY,GAAG,CAAC,GAAG,CAAC;AAAA,CAAC;AAC3D;AACA;AACA;AACA,sBAAsBE,MAAA;EAAA,IAAC;IAAEF;EAAa,CAAC,GAAAE,MAAA;EAAA,OAAMF,YAAY,GAAG,MAAM,GAAG,MAAM;AAAA,CAAC;AAC5E,CAAC;AAID,OAAO,MAAMG,6BAA6B,GAAGxB,MAAM,CAACD,MAAM,CAACG,GAAG,CAAqC;AACnG;AACA;AACA,wBAAwBuB,MAAA;EAAA,IAAC;IAAElB;EAA+B,CAAC,GAAAkB,MAAA;EAAA,OAAKlB,KAAK,CAAC,KAAK,CAAC;AAAA;AAC5E;AACA,aAAamB,MAAA;EAAA,IAAC;IAAEjB;EAAO,CAAC,GAAAiB,MAAA;EAAA,OAAKjB,MAAM,GAAG,CAAC;AAAA;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC","ignoreList":[]}
|