@hh.ru/magritte-ui-picker-wheel 2.1.114 → 2.1.116

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/PickerWheel.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { PickerWheelComponent } from '@hh.ru/magritte-ui-picker-wheel/types';
1
+ import { PickerWheelComponent } from './types';
2
2
  export declare const PickerWheel: PickerWheelComponent;
package/PickerWheel.js CHANGED
@@ -6,352 +6,383 @@ import { initScrollHandlers } from '@hh.ru/magritte-internal-custom-scroll';
6
6
  import { BottomSheetContext } from '@hh.ru/magritte-ui-bottom-sheet';
7
7
  import { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';
8
8
 
9
- var styles = {"picker-wheel":"magritte-picker-wheel___VaPvG_2-1-114","pickerWheel":"magritte-picker-wheel___VaPvG_2-1-114","selected-item-background":"magritte-selected-item-background___UnBPm_2-1-114","selectedItemBackground":"magritte-selected-item-background___UnBPm_2-1-114","columns":"magritte-columns___I7bCB_2-1-114","touch-events-overlay":"magritte-touch-events-overlay___c3YOp_2-1-114","touchEventsOverlay":"magritte-touch-events-overlay___c3YOp_2-1-114","fixed-height":"magritte-fixed-height___BLw9W_2-1-114","fixedHeight":"magritte-fixed-height___BLw9W_2-1-114","column-wrapper":"magritte-column-wrapper___yRwai_2-1-114","columnWrapper":"magritte-column-wrapper___yRwai_2-1-114","column-position-wrapper":"magritte-column-position-wrapper___wQTIu_2-1-114","columnPositionWrapper":"magritte-column-position-wrapper___wQTIu_2-1-114","wide-column-wrapper":"magritte-wide-column-wrapper___nvecx_2-1-114","wideColumnWrapper":"magritte-wide-column-wrapper___nvecx_2-1-114","full-width-column-wrapper":"magritte-full-width-column-wrapper___oxhh1_2-1-114","fullWidthColumnWrapper":"magritte-full-width-column-wrapper___oxhh1_2-1-114","column":"magritte-column___IMYca_2-1-114","item":"magritte-item___4RQVs_2-1-114","align-left":"magritte-align-left___PXJt0_2-1-114","alignLeft":"magritte-align-left___PXJt0_2-1-114","align-right":"magritte-align-right___0yc2S_2-1-114","alignRight":"magritte-align-right___0yc2S_2-1-114","disabled":"magritte-disabled___d3ukm_2-1-114","selected":"magritte-selected___Nar3H_2-1-114"};
9
+ var styles = {"picker-wheel":"magritte-picker-wheel___VaPvG_2-1-116","pickerWheel":"magritte-picker-wheel___VaPvG_2-1-116","selected-item-background":"magritte-selected-item-background___UnBPm_2-1-116","selectedItemBackground":"magritte-selected-item-background___UnBPm_2-1-116","columns":"magritte-columns___I7bCB_2-1-116","touch-events-overlay":"magritte-touch-events-overlay___c3YOp_2-1-116","touchEventsOverlay":"magritte-touch-events-overlay___c3YOp_2-1-116","fixed-height":"magritte-fixed-height___BLw9W_2-1-116","fixedHeight":"magritte-fixed-height___BLw9W_2-1-116","column-wrapper":"magritte-column-wrapper___yRwai_2-1-116","columnWrapper":"magritte-column-wrapper___yRwai_2-1-116","column-position-wrapper":"magritte-column-position-wrapper___wQTIu_2-1-116","columnPositionWrapper":"magritte-column-position-wrapper___wQTIu_2-1-116","wide-column-wrapper":"magritte-wide-column-wrapper___nvecx_2-1-116","wideColumnWrapper":"magritte-wide-column-wrapper___nvecx_2-1-116","full-width-column-wrapper":"magritte-full-width-column-wrapper___oxhh1_2-1-116","fullWidthColumnWrapper":"magritte-full-width-column-wrapper___oxhh1_2-1-116","column":"magritte-column___IMYca_2-1-116","item":"magritte-item___4RQVs_2-1-116","align-left":"magritte-align-left___PXJt0_2-1-116","alignLeft":"magritte-align-left___PXJt0_2-1-116","align-right":"magritte-align-right___0yc2S_2-1-116","alignRight":"magritte-align-right___0yc2S_2-1-116","disabled":"magritte-disabled___d3ukm_2-1-116","selected":"magritte-selected___Nar3H_2-1-116"};
10
10
 
11
11
  const FIXED_HEIGHT_ITEMS = 7;
12
12
  const ITEM_HEIGHT = 48;
13
13
  const COLUMN_WIDTH = 64;
14
14
  const WIDE_COLUMN_WIDTH = 105;
15
15
  const SELECTED_ITEM_SCALE = 22 / 18;
16
- /**
17
- * Превращает массив точек в массив интервалов
18
- * [0, 50, 100, 200] => [{ left: 0, right: 50 }, { left: 50, right: 100 }, { left: 100, right: 200 }]
19
- */
20
16
  const makeIntervalsFromPoints = (...points) => {
21
- return points
22
- .flatMap((point, index) => {
23
- if (index !== 0 && index !== points.length - 1) {
24
- return [point, point];
25
- }
26
- return point;
27
- })
28
- .reduce((intervals, point, index) => {
29
- if (index % 2 === 0) {
30
- return [...intervals, { left: point }];
31
- }
32
- const interval = { ...intervals[intervals.length - 1], right: point };
33
- return [...intervals.slice(0, intervals.length - 1), interval];
34
- }, []);
17
+ return points.flatMap((point, index) => {
18
+ if (index !== 0 && index !== points.length - 1) {
19
+ return [point, point];
20
+ }
21
+ return point;
22
+ }).reduce(
23
+ (intervals, point, index) => {
24
+ if (index % 2 === 0) {
25
+ return [...intervals, { left: point }];
26
+ }
27
+ const interval = { ...intervals[intervals.length - 1], right: point };
28
+ return [...intervals.slice(0, intervals.length - 1), interval];
29
+ },
30
+ []
31
+ );
35
32
  };
36
- /**
37
- * Генерирует горизонтальные границы в пикселях относительно контейнера, в которых колонки должны реагировать на скролл
38
- */
39
33
  const makeScrollAreas = (columnCount, containerWidth, showDelimiter) => {
40
- switch (columnCount) {
41
- case 1:
42
- return makeIntervalsFromPoints(0, containerWidth);
43
- case 2:
44
- return makeIntervalsFromPoints(0, containerWidth / 2, containerWidth);
45
- case 3:
46
- return makeIntervalsFromPoints(0, (containerWidth - WIDE_COLUMN_WIDTH) / 2, (containerWidth + WIDE_COLUMN_WIDTH) / 2, containerWidth);
47
- case 4:
48
- if (showDelimiter) {
49
- return makeIntervalsFromPoints(0, containerWidth / 2 - COLUMN_WIDTH * 1.5, containerWidth / 2, containerWidth / 2 + COLUMN_WIDTH * 1.5, containerWidth);
50
- }
51
- return makeIntervalsFromPoints(0, containerWidth / 2 - COLUMN_WIDTH, containerWidth / 2, containerWidth / 2 + COLUMN_WIDTH, containerWidth);
52
- default:
53
- throw new Error('Unexpected column count');
54
- }
34
+ switch (columnCount) {
35
+ case 1:
36
+ return makeIntervalsFromPoints(0, containerWidth);
37
+ case 2:
38
+ return makeIntervalsFromPoints(0, containerWidth / 2, containerWidth);
39
+ case 3:
40
+ return makeIntervalsFromPoints(
41
+ 0,
42
+ (containerWidth - WIDE_COLUMN_WIDTH) / 2,
43
+ (containerWidth + WIDE_COLUMN_WIDTH) / 2,
44
+ containerWidth
45
+ );
46
+ case 4:
47
+ if (showDelimiter) {
48
+ return makeIntervalsFromPoints(
49
+ 0,
50
+ containerWidth / 2 - COLUMN_WIDTH * 1.5,
51
+ containerWidth / 2,
52
+ containerWidth / 2 + COLUMN_WIDTH * 1.5,
53
+ containerWidth
54
+ );
55
+ }
56
+ return makeIntervalsFromPoints(
57
+ 0,
58
+ containerWidth / 2 - COLUMN_WIDTH,
59
+ containerWidth / 2,
60
+ containerWidth / 2 + COLUMN_WIDTH,
61
+ containerWidth
62
+ );
63
+ default:
64
+ throw new Error("Unexpected column count");
65
+ }
55
66
  };
56
- const floorToOdd = (value) => (value % 2 !== 1 ? value - 1 : value);
67
+ const floorToOdd = (value) => value % 2 !== 1 ? value - 1 : value;
57
68
  const range = (start, end) => {
58
- return [...Array(end - start).keys()].map((_, index) => index + start);
69
+ return [...Array(end - start).keys()].map((_, index) => index + start);
59
70
  };
60
71
  const translateY = (value) => `translate3d(0, ${value}px, 0)`;
61
72
  const makeInitialState = (columns) => {
62
- return {
63
- activeColumnIndex: null,
64
- animations: [],
65
- containerMetrics: null,
66
- columns: columns.map((column) => {
67
- const itemElementCallbacks = new Map();
68
- const columnState = {
69
- circular: column.circular,
70
- cloneCount: 1,
71
- disabledItems: new Set(),
72
- itemCount: column.items.length,
73
- translateY: 0,
74
- visibleItemCount: null,
75
- columnElement: null,
76
- columnElementCallback: (element) => (columnState.columnElement = element),
77
- columnWrapper: null,
78
- columnWrapperCallback: (element) => (columnState.columnWrapper = element),
79
- itemElements: new Map(),
80
- itemElementCallbacks: {
81
- get: (itemIndex) => {
82
- if (!itemElementCallbacks.has(itemIndex)) {
83
- itemElementCallbacks.set(itemIndex, (element) => {
84
- columnState.itemElements.set(itemIndex, element);
85
- });
86
- }
87
- return itemElementCallbacks.get(itemIndex);
88
- },
89
- },
90
- };
91
- return columnState;
92
- }),
93
- scrollAreas: null,
94
- scrollDirection: null,
95
- };
73
+ return {
74
+ activeColumnIndex: null,
75
+ animations: [],
76
+ containerMetrics: null,
77
+ columns: columns.map((column) => {
78
+ const itemElementCallbacks = /* @__PURE__ */ new Map();
79
+ const columnState = {
80
+ circular: column.circular,
81
+ cloneCount: 1,
82
+ disabledItems: /* @__PURE__ */ new Set(),
83
+ itemCount: column.items.length,
84
+ translateY: 0,
85
+ visibleItemCount: null,
86
+ columnElement: null,
87
+ columnElementCallback: (element) => columnState.columnElement = element,
88
+ columnWrapper: null,
89
+ columnWrapperCallback: (element) => columnState.columnWrapper = element,
90
+ itemElements: /* @__PURE__ */ new Map(),
91
+ itemElementCallbacks: {
92
+ get: (itemIndex) => {
93
+ if (!itemElementCallbacks.has(itemIndex)) {
94
+ itemElementCallbacks.set(itemIndex, (element) => {
95
+ columnState.itemElements.set(itemIndex, element);
96
+ });
97
+ }
98
+ return itemElementCallbacks.get(itemIndex);
99
+ }
100
+ }
101
+ };
102
+ return columnState;
103
+ }),
104
+ scrollAreas: null,
105
+ scrollDirection: null
106
+ };
96
107
  };
97
- const PickerWheel = ({ columns, fixedHeight, onChange, selectedIndexes, showDelimiter, }) => {
98
- if (columns.length !== selectedIndexes.length) {
99
- throw new Error('selectedIndexes.length does not match columns.length');
100
- }
101
- const stateRef = useRef(makeInitialState(columns));
102
- if (columns.length !== stateRef.current.columns.length ||
103
- columns.some((column, columnIndex) => {
104
- return (column.items.length !== stateRef.current.columns[columnIndex].itemCount ||
105
- column.circular !== stateRef.current.columns[columnIndex].circular);
106
- })) {
107
- stateRef.current = makeInitialState(columns);
108
+ const PickerWheel = ({
109
+ columns,
110
+ fixedHeight,
111
+ onChange,
112
+ selectedIndexes,
113
+ showDelimiter
114
+ }) => {
115
+ if (columns.length !== selectedIndexes.length) {
116
+ throw new Error("selectedIndexes.length does not match columns.length");
117
+ }
118
+ const stateRef = useRef(makeInitialState(columns));
119
+ if (columns.length !== stateRef.current.columns.length || columns.some((column, columnIndex) => {
120
+ return column.items.length !== stateRef.current.columns[columnIndex].itemCount || column.circular !== stateRef.current.columns[columnIndex].circular;
121
+ })) {
122
+ stateRef.current = makeInitialState(columns);
123
+ }
124
+ columns.forEach(
125
+ (column, columnIndex) => stateRef.current.columns[columnIndex].disabledItems = new Set(
126
+ column.items.reduce(
127
+ (result, item, itemIndex) => item.disabled ? [...result, itemIndex] : result,
128
+ []
129
+ )
130
+ )
131
+ );
132
+ const bottomSheetContext = useContext(BottomSheetContext);
133
+ const containerRef = useRef(null);
134
+ const isFixedHeight = bottomSheetContext !== null && bottomSheetContext.height !== "full-screen" || fixedHeight;
135
+ const onChangeRef = useRef(onChange);
136
+ onChangeRef.current = onChange;
137
+ const selectedIndexesRef = useRef(selectedIndexes);
138
+ selectedIndexesRef.current = selectedIndexes;
139
+ const [_, setStateKey] = useState(0);
140
+ const [touchActionActive, setTouchActionActive] = useState(false);
141
+ const visible = useBreakpoint().isMobile;
142
+ useEffect(() => {
143
+ const container = containerRef.current;
144
+ if (!container) {
145
+ return void 0;
108
146
  }
109
- columns.forEach((column, columnIndex) => (stateRef.current.columns[columnIndex].disabledItems = new Set(column.items.reduce((result, item, itemIndex) => (item.disabled ? [...result, itemIndex] : result), []))));
110
- const bottomSheetContext = useContext(BottomSheetContext);
111
- const containerRef = useRef(null);
112
- const isFixedHeight = (bottomSheetContext !== null && bottomSheetContext.height !== 'full-screen') || fixedHeight;
113
- const onChangeRef = useRef(onChange);
114
- onChangeRef.current = onChange;
115
- const selectedIndexesRef = useRef(selectedIndexes);
116
- selectedIndexesRef.current = selectedIndexes;
117
- const [_, setStateKey] = useState(0);
118
- const [touchActionActive, setTouchActionActive] = useState(false);
119
- const visible = useBreakpoint().isMobile;
120
- useEffect(() => {
121
- const container = containerRef.current;
122
- if (!container) {
123
- return void 0;
147
+ const setActiveColumn = (clientX) => {
148
+ const containerMetrics = stateRef.current.containerMetrics;
149
+ if (containerMetrics !== null) {
150
+ stateRef.current.activeColumnIndex = stateRef.current.scrollAreas?.findIndex((interval) => {
151
+ const relativeX = clientX - containerMetrics.left;
152
+ return relativeX >= interval.left && relativeX <= interval.right;
153
+ }) ?? null;
154
+ }
155
+ };
156
+ const handleTouchStart = (event) => {
157
+ event.preventDefault();
158
+ event.stopPropagation();
159
+ event.changedTouches.length === 1 && setActiveColumn(event.changedTouches[0].clientX);
160
+ };
161
+ const handleTouchMove = (event) => {
162
+ event.preventDefault();
163
+ event.stopPropagation();
164
+ };
165
+ const handleWheel = (event) => {
166
+ event.preventDefault();
167
+ event.stopPropagation();
168
+ setActiveColumn(event.clientX);
169
+ };
170
+ container.addEventListener("touchstart", handleTouchStart, { passive: false });
171
+ container.addEventListener("touchmove", handleTouchMove, { passive: false });
172
+ container.addEventListener("wheel", handleWheel, { passive: false });
173
+ return () => {
174
+ container.removeEventListener("touchstart", handleTouchStart);
175
+ container.removeEventListener("touchmove", handleTouchMove);
176
+ container.removeEventListener("wheel", handleWheel);
177
+ };
178
+ }, []);
179
+ useEffect(() => {
180
+ const handleScroll = (event) => {
181
+ if (stateRef.current.activeColumnIndex !== null && stateRef.current.containerMetrics !== null) {
182
+ const columnIndex = stateRef.current.activeColumnIndex;
183
+ const columnState = stateRef.current?.columns[columnIndex];
184
+ const { columnElement, columnWrapper } = columnState;
185
+ if (!columnState || !columnState.visibleItemCount || !columnElement || !columnWrapper) {
186
+ return;
124
187
  }
125
- // вычисляем колонку, которую пользователь начал скроллить
126
- const setActiveColumn = (clientX) => {
127
- const containerMetrics = stateRef.current.containerMetrics;
128
- if (containerMetrics !== null) {
129
- stateRef.current.activeColumnIndex =
130
- stateRef.current.scrollAreas?.findIndex((interval) => {
131
- const relativeX = clientX - containerMetrics.left;
132
- return relativeX >= interval.left && relativeX <= interval.right;
133
- }) ?? null;
134
- }
135
- };
136
- const handleTouchStart = (event) => {
137
- event.preventDefault();
138
- event.stopPropagation();
139
- event.changedTouches.length === 1 && setActiveColumn(event.changedTouches[0].clientX);
140
- };
141
- const handleTouchMove = (event) => {
142
- event.preventDefault();
143
- event.stopPropagation();
144
- };
145
- const handleWheel = (event) => {
146
- event.preventDefault();
147
- event.stopPropagation();
148
- setActiveColumn(event.clientX);
149
- };
150
- container.addEventListener('touchstart', handleTouchStart, { passive: false });
151
- container.addEventListener('touchmove', handleTouchMove, { passive: false });
152
- container.addEventListener('wheel', handleWheel, { passive: false });
153
- return () => {
154
- container.removeEventListener('touchstart', handleTouchStart);
155
- container.removeEventListener('touchmove', handleTouchMove);
156
- container.removeEventListener('wheel', handleWheel);
157
- };
158
- }, []);
159
- useEffect(() => {
160
- const handleScroll = (event) => {
161
- if (stateRef.current.activeColumnIndex !== null && stateRef.current.containerMetrics !== null) {
162
- const columnIndex = stateRef.current.activeColumnIndex;
163
- const columnState = stateRef.current?.columns[columnIndex];
164
- const { columnElement, columnWrapper } = columnState;
165
- if (!columnState || !columnState.visibleItemCount || !columnElement || !columnWrapper) {
166
- return;
167
- }
168
- stateRef.current.scrollDirection = event.delta > 0 ? 'up' : 'down';
169
- columnState.translateY += event.delta;
170
- // бесконечный скролл
171
- if (columnState.circular) {
172
- // скролл вверх
173
- // верхний край колонки близко к верхнему краю враппера
174
- if (event.delta > 0 &&
175
- stateRef.current.containerMetrics.height / 2 + columnState.translateY > -100) {
176
- columnState.translateY -= columnState.itemCount * ITEM_HEIGHT;
177
- }
178
- // скролл вниз
179
- // нижний край колонки близко к нижнему краю враппера
180
- if (event.delta < 0 &&
181
- columnState.cloneCount * columnState.itemCount * ITEM_HEIGHT +
182
- columnState.translateY -
183
- stateRef.current.containerMetrics.height / 2 <
184
- 100) {
185
- columnState.translateY += columnState.itemCount * ITEM_HEIGHT;
186
- }
187
- }
188
- // скролл ограничен — делаем чтобы колонку было нельзя проскроллить за допустимые границы
189
- if (!columnState.circular) {
190
- // скролл вверх
191
- if (event.delta > 0) {
192
- // translateY, когда колонка проскроллена в самый верх (выбран первый айтем)
193
- const minAllowedTranslateY = 0;
194
- columnState.translateY = Math.min(columnState.translateY, minAllowedTranslateY);
195
- }
196
- // скролл вниз
197
- if (event.delta < 0) {
198
- // translateY, когда колонка проскроллена в самый низ (выбран последний айтем)
199
- const maxAllowedTranslateY = (columnState.itemCount - 1) * ITEM_HEIGHT;
200
- columnState.translateY = Math.max(columnState.translateY, -maxAllowedTranslateY);
201
- }
202
- }
203
- // анимация увеличения ближайшего к центру айтема
204
- const selectedItemIndex = Math.round(-columnState.translateY / ITEM_HEIGHT);
205
- if (columnState.itemElements.has(selectedItemIndex)) {
206
- const halfItemHeight = ITEM_HEIGHT / 2;
207
- columnState.itemElements.get(selectedItemIndex).style.transform =
208
- `scale(${1 + (SELECTED_ITEM_SCALE - 1) * Math.abs((Math.abs(columnState.translateY % ITEM_HEIGHT) - halfItemHeight) / halfItemHeight)})`;
209
- }
210
- columnElement.style.transform = translateY(columnState.translateY);
211
- setTouchActionActive(true);
212
- }
213
- };
214
- const handleScrollEnd = () => {
215
- if (stateRef.current.activeColumnIndex !== null) {
216
- const columnIndex = stateRef.current.activeColumnIndex;
217
- const columnState = stateRef.current?.columns[columnIndex];
218
- const { columnElement, columnWrapper } = columnState;
219
- if (!columnState || !columnElement || !columnWrapper) {
220
- return;
221
- }
222
- // если колонка зациклена, у нее могут быть отрендерены клоны для бесконечного скролла
223
- // поэтому нужно взять остаток от деления на количество айтемов в колонке
224
- const _selectedItemIndex = Math.round(Math.abs(columnState.translateY) / ITEM_HEIGHT) % columnState.itemCount;
225
- let selectedItemIndex = _selectedItemIndex;
226
- // если выбранный айтем disabled, ищем ближайший не disabled в направлении скролла
227
- if (columnState.disabledItems.has(selectedItemIndex)) {
228
- do {
229
- if (stateRef.current.scrollDirection === 'up') {
230
- selectedItemIndex -= 1;
231
- if (selectedItemIndex < 0) {
232
- selectedItemIndex = columnState.itemCount - 1;
233
- }
234
- }
235
- else if (stateRef.current.scrollDirection === 'down') {
236
- selectedItemIndex += 1;
237
- if (selectedItemIndex > columnState.itemCount - 1) {
238
- selectedItemIndex = 0;
239
- }
240
- }
241
- else {
242
- break;
243
- }
244
- } while (columnState.disabledItems.has(selectedItemIndex) &&
245
- selectedItemIndex !== _selectedItemIndex);
246
- }
247
- const _selectedIndexes = [...selectedIndexesRef.current];
248
- _selectedIndexes[columnIndex] = selectedItemIndex;
249
- onChangeRef.current?.(_selectedIndexes);
250
- stateRef.current.activeColumnIndex = null;
251
- stateRef.current.scrollDirection = null;
252
- setTouchActionActive(false);
253
- }
254
- };
255
- let timeoutId = null;
256
- return initScrollHandlers({
257
- axis: 'vertical',
258
- wrapperRef: containerRef,
259
- onTouchMove: handleScroll,
260
- onTouchEnd: handleScrollEnd,
261
- onWheelMove: (event) => {
262
- handleScroll(event);
263
- if (timeoutId !== null) {
264
- clearTimeout(timeoutId);
265
- }
266
- timeoutId = setTimeout(handleScrollEnd, 50);
267
- },
268
- });
269
- }, [setTouchActionActive]);
270
- const recalcLayoutMetrics = useCallback(() => {
271
- if (!containerRef.current) {
272
- return;
188
+ stateRef.current.scrollDirection = event.delta > 0 ? "up" : "down";
189
+ columnState.translateY += event.delta;
190
+ if (columnState.circular) {
191
+ if (event.delta > 0 && stateRef.current.containerMetrics.height / 2 + columnState.translateY > -100) {
192
+ columnState.translateY -= columnState.itemCount * ITEM_HEIGHT;
193
+ }
194
+ if (event.delta < 0 && columnState.cloneCount * columnState.itemCount * ITEM_HEIGHT + columnState.translateY - stateRef.current.containerMetrics.height / 2 < 100) {
195
+ columnState.translateY += columnState.itemCount * ITEM_HEIGHT;
196
+ }
273
197
  }
274
- stateRef.current.containerMetrics = containerRef.current.getBoundingClientRect();
275
- stateRef.current.scrollAreas = makeScrollAreas(stateRef.current.columns.length, stateRef.current.containerMetrics.width, showDelimiter);
276
- const containerHeight = stateRef.current.containerMetrics.height;
277
- stateRef.current.columns.forEach((columnState) => {
278
- const { columnElement, columnWrapper } = columnState;
279
- if (!columnElement || !columnWrapper) {
280
- return;
281
- }
282
- if (columnState.circular) {
283
- const cloneCount = Math.max(Math.ceil(containerHeight / (columnState.itemCount * ITEM_HEIGHT)), 1) * 2 + 1;
284
- if (columnState.cloneCount !== cloneCount) {
285
- columnState.cloneCount = cloneCount;
286
- columnState.translateY -=
287
- Math.floor(columnState.cloneCount / 2) * columnState.itemCount * ITEM_HEIGHT;
288
- columnElement.style.transform = translateY(columnState.translateY);
289
- setStateKey((stateKey) => stateKey + 1);
290
- }
198
+ if (!columnState.circular) {
199
+ if (event.delta > 0) {
200
+ const minAllowedTranslateY = 0;
201
+ columnState.translateY = Math.min(columnState.translateY, minAllowedTranslateY);
202
+ }
203
+ if (event.delta < 0) {
204
+ const maxAllowedTranslateY = (columnState.itemCount - 1) * ITEM_HEIGHT;
205
+ columnState.translateY = Math.max(columnState.translateY, -maxAllowedTranslateY);
206
+ }
207
+ }
208
+ const selectedItemIndex = Math.round(-columnState.translateY / ITEM_HEIGHT);
209
+ if (columnState.itemElements.has(selectedItemIndex)) {
210
+ const halfItemHeight = ITEM_HEIGHT / 2;
211
+ columnState.itemElements.get(selectedItemIndex).style.transform = `scale(${1 + (SELECTED_ITEM_SCALE - 1) * Math.abs((Math.abs(columnState.translateY % ITEM_HEIGHT) - halfItemHeight) / halfItemHeight)})`;
212
+ }
213
+ columnElement.style.transform = translateY(columnState.translateY);
214
+ setTouchActionActive(true);
215
+ }
216
+ };
217
+ const handleScrollEnd = () => {
218
+ if (stateRef.current.activeColumnIndex !== null) {
219
+ const columnIndex = stateRef.current.activeColumnIndex;
220
+ const columnState = stateRef.current?.columns[columnIndex];
221
+ const { columnElement, columnWrapper } = columnState;
222
+ if (!columnState || !columnElement || !columnWrapper) {
223
+ return;
224
+ }
225
+ const _selectedItemIndex = Math.round(Math.abs(columnState.translateY) / ITEM_HEIGHT) % columnState.itemCount;
226
+ let selectedItemIndex = _selectedItemIndex;
227
+ if (columnState.disabledItems.has(selectedItemIndex)) {
228
+ do {
229
+ if (stateRef.current.scrollDirection === "up") {
230
+ selectedItemIndex -= 1;
231
+ if (selectedItemIndex < 0) {
232
+ selectedItemIndex = columnState.itemCount - 1;
233
+ }
234
+ } else if (stateRef.current.scrollDirection === "down") {
235
+ selectedItemIndex += 1;
236
+ if (selectedItemIndex > columnState.itemCount - 1) {
237
+ selectedItemIndex = 0;
238
+ }
239
+ } else {
240
+ break;
291
241
  }
292
- columnState.visibleItemCount = Math.min(columnState.circular ? columnState.itemCount : columnState.itemCount * 2 - 1, floorToOdd(Math.floor(containerHeight / ITEM_HEIGHT)), fixedHeight ? FIXED_HEIGHT_ITEMS : Infinity);
293
- const gradientStartPoint = (containerHeight - columnState.visibleItemCount * ITEM_HEIGHT) / 2;
294
- const gradientEndPoint = containerHeight / 2 + (columnState.visibleItemCount * ITEM_HEIGHT) / 2;
295
- columnWrapper.style.maskImage = `linear-gradient(
242
+ } while (columnState.disabledItems.has(selectedItemIndex) && selectedItemIndex !== _selectedItemIndex);
243
+ }
244
+ const _selectedIndexes = [...selectedIndexesRef.current];
245
+ _selectedIndexes[columnIndex] = selectedItemIndex;
246
+ onChangeRef.current?.(_selectedIndexes);
247
+ stateRef.current.activeColumnIndex = null;
248
+ stateRef.current.scrollDirection = null;
249
+ setTouchActionActive(false);
250
+ }
251
+ };
252
+ let timeoutId = null;
253
+ return initScrollHandlers({
254
+ axis: "vertical",
255
+ wrapperRef: containerRef,
256
+ onTouchMove: handleScroll,
257
+ onTouchEnd: handleScrollEnd,
258
+ onWheelMove: (event) => {
259
+ handleScroll(event);
260
+ if (timeoutId !== null) {
261
+ clearTimeout(timeoutId);
262
+ }
263
+ timeoutId = setTimeout(handleScrollEnd, 50);
264
+ }
265
+ });
266
+ }, [setTouchActionActive]);
267
+ const recalcLayoutMetrics = useCallback(() => {
268
+ if (!containerRef.current) {
269
+ return;
270
+ }
271
+ stateRef.current.containerMetrics = containerRef.current.getBoundingClientRect();
272
+ stateRef.current.scrollAreas = makeScrollAreas(
273
+ stateRef.current.columns.length,
274
+ stateRef.current.containerMetrics.width,
275
+ showDelimiter
276
+ );
277
+ const containerHeight = stateRef.current.containerMetrics.height;
278
+ stateRef.current.columns.forEach((columnState) => {
279
+ const { columnElement, columnWrapper } = columnState;
280
+ if (!columnElement || !columnWrapper) {
281
+ return;
282
+ }
283
+ if (columnState.circular) {
284
+ const cloneCount = Math.max(Math.ceil(containerHeight / (columnState.itemCount * ITEM_HEIGHT)), 1) * 2 + 1;
285
+ if (columnState.cloneCount !== cloneCount) {
286
+ columnState.cloneCount = cloneCount;
287
+ columnState.translateY -= Math.floor(columnState.cloneCount / 2) * columnState.itemCount * ITEM_HEIGHT;
288
+ columnElement.style.transform = translateY(columnState.translateY);
289
+ setStateKey((stateKey) => stateKey + 1);
290
+ }
291
+ }
292
+ columnState.visibleItemCount = Math.min(
293
+ columnState.circular ? columnState.itemCount : columnState.itemCount * 2 - 1,
294
+ floorToOdd(Math.floor(containerHeight / ITEM_HEIGHT)),
295
+ fixedHeight ? FIXED_HEIGHT_ITEMS : Infinity
296
+ );
297
+ const gradientStartPoint = (containerHeight - columnState.visibleItemCount * ITEM_HEIGHT) / 2;
298
+ const gradientEndPoint = containerHeight / 2 + columnState.visibleItemCount * ITEM_HEIGHT / 2;
299
+ columnWrapper.style.maskImage = `linear-gradient(
296
300
  to bottom,
297
301
  transparent ${gradientStartPoint}px,
298
302
  #000 ${gradientStartPoint + 60}px,
299
303
  #000 ${gradientEndPoint - 60}px,
300
304
  transparent ${gradientEndPoint}px
301
305
  )`;
302
- });
303
- }, [fixedHeight, showDelimiter, setStateKey]);
304
- useLayoutEffect(() => {
305
- if (stateRef.current.containerMetrics !== null) {
306
- recalcLayoutMetrics();
307
- }
308
- }, [recalcLayoutMetrics]);
309
- useLayoutEffect(() => {
310
- if (stateRef.current.containerMetrics === null) {
311
- recalcLayoutMetrics();
312
- }
313
306
  });
314
- // Скроллим к initial значению либо округляем позицию скролла до ближайшего айтема после завершения анимации инерции скролла
315
- useEffect(() => {
316
- stateRef.current.columns.forEach((columnState, columnIndex) => {
317
- const { columnElement, columnWrapper } = columnState;
318
- if (!columnElement || !columnWrapper) {
319
- return;
320
- }
321
- columnState.translateY =
322
- -(Math.floor(columnState.cloneCount / 2) * columnState.itemCount * ITEM_HEIGHT) -
323
- selectedIndexes[columnIndex] * ITEM_HEIGHT;
324
- columnElement.style.transform = translateY(columnState.translateY);
325
- columnState.itemElements.forEach((itemElement) => {
326
- if (itemElement !== null) {
327
- itemElement.style.transform = ``;
328
- }
329
- });
330
- });
331
- }, [selectedIndexes]);
332
- if (!visible) {
333
- return null;
307
+ }, [fixedHeight, showDelimiter, setStateKey]);
308
+ useLayoutEffect(() => {
309
+ if (stateRef.current.containerMetrics !== null) {
310
+ recalcLayoutMetrics();
334
311
  }
335
- const renderColumns = (startIndex, endIndex) => {
336
- return range(startIndex, endIndex).map((columnIndex) => {
337
- const columnState = stateRef.current.columns[columnIndex];
338
- return (jsx("div", { className: classnames(styles.columnWrapper, {
339
- [styles.wideColumnWrapper]: columns.length < 4 && columns.length > 1,
340
- [styles.fullWidthColumnWrapper]: columns.length === 1,
341
- }), ref: columnState.columnWrapperCallback, children: jsx("div", { className: styles.columnPositionWrapper, children: jsx("div", { className: styles.column, ref: columnState.columnElementCallback, children: [...Array(columnState.cloneCount).keys()].flatMap((columnCloneIndex) => columns[columnIndex].items.map((item, itemIndex) => (jsx("div", { className: classnames(styles.item, {
342
- [styles.alignLeft]: columns[columnIndex].align === 'left',
343
- [styles.alignRight]: columns[columnIndex].align === 'right',
344
- [styles.disabled]: item.disabled,
345
- [styles.selected]: itemIndex === selectedIndexes[columnIndex] &&
346
- (!touchActionActive ||
347
- columnIndex !== stateRef.current.activeColumnIndex),
348
- }), ref: columnState.itemElementCallbacks?.get(columnCloneIndex * columnState.itemCount + itemIndex), children: item.text }, `${columnCloneIndex}-${columns[columnIndex].items.length}-${item.key ?? item.text}`)))) }) }) }, `${columns.length}-${columnIndex}`));
349
- });
350
- };
351
- if (showDelimiter && columns.length % 2 === 0) {
352
- return (jsxs("div", { className: classnames(styles.pickerWheel, { [styles.fixedHeight]: isFixedHeight }), ref: containerRef, children: [jsx("div", { className: styles.selectedItemBackground }), jsxs("div", { className: classnames(styles.columns), children: [renderColumns(0, columns.length / 2), jsx("div", { className: styles.columnWrapper, children: jsx("div", { className: styles.columnPositionWrapper, children: jsx("div", { className: styles.column, children: jsx("div", { className: classnames(styles.item, styles.selected), children: "\u2013" }) }) }) }), renderColumns(columns.length / 2, columns.length)] }), jsx("div", { className: styles.touchEventsOverlay })] }));
312
+ }, [recalcLayoutMetrics]);
313
+ useLayoutEffect(() => {
314
+ if (stateRef.current.containerMetrics === null) {
315
+ recalcLayoutMetrics();
353
316
  }
354
- return (jsxs("div", { className: classnames(styles.pickerWheel, { [styles.fixedHeight]: isFixedHeight }), ref: containerRef, children: [jsx("div", { className: styles.selectedItemBackground }), jsx("div", { className: classnames(styles.columns), children: renderColumns(0, columns.length) }), jsx("div", { className: styles.touchEventsOverlay })] }));
317
+ });
318
+ useEffect(() => {
319
+ stateRef.current.columns.forEach((columnState, columnIndex) => {
320
+ const { columnElement, columnWrapper } = columnState;
321
+ if (!columnElement || !columnWrapper) {
322
+ return;
323
+ }
324
+ columnState.translateY = -(Math.floor(columnState.cloneCount / 2) * columnState.itemCount * ITEM_HEIGHT) - selectedIndexes[columnIndex] * ITEM_HEIGHT;
325
+ columnElement.style.transform = translateY(columnState.translateY);
326
+ columnState.itemElements.forEach((itemElement) => {
327
+ if (itemElement !== null) {
328
+ itemElement.style.transform = ``;
329
+ }
330
+ });
331
+ });
332
+ }, [selectedIndexes]);
333
+ if (!visible) {
334
+ return null;
335
+ }
336
+ const renderColumns = (startIndex, endIndex) => {
337
+ return range(startIndex, endIndex).map((columnIndex) => {
338
+ const columnState = stateRef.current.columns[columnIndex];
339
+ return /* @__PURE__ */ jsx(
340
+ "div",
341
+ {
342
+ className: classnames(styles.columnWrapper, {
343
+ [styles.wideColumnWrapper]: columns.length < 4 && columns.length > 1,
344
+ [styles.fullWidthColumnWrapper]: columns.length === 1
345
+ }),
346
+ ref: columnState.columnWrapperCallback,
347
+ children: /* @__PURE__ */ jsx("div", { className: styles.columnPositionWrapper, children: /* @__PURE__ */ jsx("div", { className: styles.column, ref: columnState.columnElementCallback, children: [...Array(columnState.cloneCount).keys()].flatMap(
348
+ (columnCloneIndex) => columns[columnIndex].items.map((item, itemIndex) => /* @__PURE__ */ jsx(
349
+ "div",
350
+ {
351
+ className: classnames(styles.item, {
352
+ [styles.alignLeft]: columns[columnIndex].align === "left",
353
+ [styles.alignRight]: columns[columnIndex].align === "right",
354
+ [styles.disabled]: item.disabled,
355
+ [styles.selected]: itemIndex === selectedIndexes[columnIndex] && (!touchActionActive || columnIndex !== stateRef.current.activeColumnIndex)
356
+ }),
357
+ ref: columnState.itemElementCallbacks?.get(
358
+ columnCloneIndex * columnState.itemCount + itemIndex
359
+ ),
360
+ children: item.text
361
+ },
362
+ `${columnCloneIndex}-${columns[columnIndex].items.length}-${item.key ?? item.text}`
363
+ ))
364
+ ) }) })
365
+ },
366
+ `${columns.length}-${columnIndex}`
367
+ );
368
+ });
369
+ };
370
+ if (showDelimiter && columns.length % 2 === 0) {
371
+ return /* @__PURE__ */ jsxs("div", { className: classnames(styles.pickerWheel, { [styles.fixedHeight]: isFixedHeight }), ref: containerRef, children: [
372
+ /* @__PURE__ */ jsx("div", { className: styles.selectedItemBackground }),
373
+ /* @__PURE__ */ jsxs("div", { className: classnames(styles.columns), children: [
374
+ renderColumns(0, columns.length / 2),
375
+ /* @__PURE__ */ jsx("div", { className: styles.columnWrapper, children: /* @__PURE__ */ jsx("div", { className: styles.columnPositionWrapper, children: /* @__PURE__ */ jsx("div", { className: styles.column, children: /* @__PURE__ */ jsx("div", { className: classnames(styles.item, styles.selected), children: "\u2013" }) }) }) }),
376
+ renderColumns(columns.length / 2, columns.length)
377
+ ] }),
378
+ /* @__PURE__ */ jsx("div", { className: styles.touchEventsOverlay })
379
+ ] });
380
+ }
381
+ return /* @__PURE__ */ jsxs("div", { className: classnames(styles.pickerWheel, { [styles.fixedHeight]: isFixedHeight }), ref: containerRef, children: [
382
+ /* @__PURE__ */ jsx("div", { className: styles.selectedItemBackground }),
383
+ /* @__PURE__ */ jsx("div", { className: classnames(styles.columns), children: renderColumns(0, columns.length) }),
384
+ /* @__PURE__ */ jsx("div", { className: styles.touchEventsOverlay })
385
+ ] });
355
386
  };
356
387
  PickerWheel.isFullHeightBottomSheetContent = true;
357
388
 
@@ -1 +1 @@
1
- {"version":3,"file":"PickerWheel.js","sources":["src/PickerWheel.tsx"],"sourcesContent":["import { useCallback, useContext, useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport classnames from 'classnames';\n\nimport { initScrollHandlers, ScrollGestureEvent } from '@hh.ru/magritte-internal-custom-scroll';\nimport { BottomSheetContext } from '@hh.ru/magritte-ui-bottom-sheet';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { PickerWheelColumn, PickerWheelComponent } from '@hh.ru/magritte-ui-picker-wheel/types';\n\nimport styles from './picker-wheel.less';\n\nconst FIXED_HEIGHT_ITEMS = 7;\nconst ITEM_HEIGHT = 48;\nconst COLUMN_WIDTH = 64;\nconst WIDE_COLUMN_WIDTH = 105;\nconst SELECTED_ITEM_SCALE = 22 / 18;\n\n/**\n * Превращает массив точек в массив интервалов\n * [0, 50, 100, 200] => [{ left: 0, right: 50 }, { left: 50, right: 100 }, { left: 100, right: 200 }]\n */\nconst makeIntervalsFromPoints = (...points: Array<number>) => {\n return points\n .flatMap((point, index) => {\n if (index !== 0 && index !== points.length - 1) {\n return [point, point];\n }\n return point;\n })\n .reduce(\n (intervals, point, index) => {\n if (index % 2 === 0) {\n return [...intervals, { left: point }];\n }\n const interval = { ...intervals[intervals.length - 1], right: point };\n return [...intervals.slice(0, intervals.length - 1), interval];\n },\n [] as Array<{ left: number; right?: number }>\n ) as Array<{ left: number; right: number }>;\n};\n\n/**\n * Генерирует горизонтальные границы в пикселях относительно контейнера, в которых колонки должны реагировать на скролл\n */\nconst makeScrollAreas = (\n columnCount: number,\n containerWidth: number,\n showDelimiter?: boolean\n): Array<{ left: number; right: number }> => {\n switch (columnCount) {\n case 1:\n return makeIntervalsFromPoints(0, containerWidth);\n case 2:\n return makeIntervalsFromPoints(0, containerWidth / 2, containerWidth);\n case 3:\n return makeIntervalsFromPoints(\n 0,\n (containerWidth - WIDE_COLUMN_WIDTH) / 2,\n (containerWidth + WIDE_COLUMN_WIDTH) / 2,\n containerWidth\n );\n case 4:\n if (showDelimiter) {\n return makeIntervalsFromPoints(\n 0,\n containerWidth / 2 - COLUMN_WIDTH * 1.5,\n containerWidth / 2,\n containerWidth / 2 + COLUMN_WIDTH * 1.5,\n containerWidth\n );\n }\n return makeIntervalsFromPoints(\n 0,\n containerWidth / 2 - COLUMN_WIDTH,\n containerWidth / 2,\n containerWidth / 2 + COLUMN_WIDTH,\n containerWidth\n );\n default:\n throw new Error('Unexpected column count');\n }\n};\n\nconst floorToOdd = (value: number) => (value % 2 !== 1 ? value - 1 : value);\n\nconst range = (start: number, end: number) => {\n return [...Array(end - start).keys()].map((_, index) => index + start);\n};\n\nconst translateY = (value: number) => `translate3d(0, ${value}px, 0)`;\n\ninterface ColumnState {\n circular?: boolean;\n /**\n * Если колонка не зациклена (circular), всегда 1\n * Если зациклена, то это количество копий колонки, которое нужно отрендерить, чтобы заполнить контейнер целиком\n */\n cloneCount: number;\n disabledItems: Set<number>;\n /** Количество айтемов колонки, копируется из props.columns чтобы не нужно было добавлять props.columns в зависимости */\n itemCount: number;\n /** translateY для эмуляции скролла */\n translateY: number;\n /** Количество видимых айтемов, всегда нечетное */\n visibleItemCount: number | null;\n columnElement: HTMLDivElement | null;\n columnElementCallback: React.RefCallback<HTMLDivElement | null>;\n columnWrapper: HTMLDivElement | null;\n columnWrapperCallback: React.RefCallback<HTMLDivElement | null>;\n itemElements: Map<number, HTMLDivElement | null>;\n itemElementCallbacks: Pick<Map<number, React.RefCallback<HTMLDivElement | null>>, 'get'>;\n}\n\ninterface PickerWheelState {\n activeColumnIndex: number | null;\n animations: Array<{ renderedKey: number; itemIndex: number }>;\n containerMetrics: DOMRect | null;\n columns: Array<ColumnState>;\n scrollAreas: Array<{ left: number; right: number }> | null;\n scrollDirection: 'up' | 'down' | null;\n}\n\nconst makeInitialState = (columns: Array<PickerWheelColumn>): PickerWheelState => {\n return {\n activeColumnIndex: null,\n animations: [],\n containerMetrics: null,\n columns: columns.map((column) => {\n const itemElementCallbacks: Map<number, React.RefCallback<HTMLDivElement | null>> = new Map();\n const columnState: ColumnState = {\n circular: column.circular,\n cloneCount: 1,\n disabledItems: new Set(),\n itemCount: column.items.length,\n translateY: 0,\n visibleItemCount: null,\n columnElement: null,\n columnElementCallback: (element) => (columnState.columnElement = element),\n columnWrapper: null,\n columnWrapperCallback: (element) => (columnState.columnWrapper = element),\n itemElements: new Map(),\n itemElementCallbacks: {\n get: (itemIndex: number) => {\n if (!itemElementCallbacks.has(itemIndex)) {\n itemElementCallbacks.set(itemIndex, (element) => {\n columnState.itemElements.set(itemIndex, element);\n });\n }\n return itemElementCallbacks.get(itemIndex);\n },\n },\n };\n return columnState;\n }),\n scrollAreas: null,\n scrollDirection: null,\n };\n};\n\nexport const PickerWheel: PickerWheelComponent = ({\n columns,\n fixedHeight,\n onChange,\n selectedIndexes,\n showDelimiter,\n}) => {\n if (columns.length !== selectedIndexes.length) {\n throw new Error('selectedIndexes.length does not match columns.length');\n }\n\n const stateRef = useRef<PickerWheelState>(makeInitialState(columns));\n if (\n columns.length !== stateRef.current.columns.length ||\n columns.some((column, columnIndex) => {\n return (\n column.items.length !== stateRef.current.columns[columnIndex].itemCount ||\n column.circular !== stateRef.current.columns[columnIndex].circular\n );\n })\n ) {\n stateRef.current = makeInitialState(columns);\n }\n columns.forEach(\n (column, columnIndex) =>\n (stateRef.current.columns[columnIndex].disabledItems = new Set(\n column.items.reduce(\n (result, item, itemIndex) => (item.disabled ? [...result, itemIndex] : result),\n [] as Array<number>\n )\n ))\n );\n\n const bottomSheetContext = useContext(BottomSheetContext);\n const containerRef = useRef<HTMLDivElement>(null);\n const isFixedHeight = (bottomSheetContext !== null && bottomSheetContext.height !== 'full-screen') || fixedHeight;\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const selectedIndexesRef = useRef(selectedIndexes);\n selectedIndexesRef.current = selectedIndexes;\n const [_, setStateKey] = useState(0);\n const [touchActionActive, setTouchActionActive] = useState(false);\n const visible = useBreakpoint().isMobile;\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) {\n return void 0;\n }\n\n // вычисляем колонку, которую пользователь начал скроллить\n const setActiveColumn = (clientX: number) => {\n const containerMetrics = stateRef.current.containerMetrics;\n if (containerMetrics !== null) {\n stateRef.current.activeColumnIndex =\n stateRef.current.scrollAreas?.findIndex((interval) => {\n const relativeX = clientX - containerMetrics.left;\n return relativeX >= interval.left && relativeX <= interval.right;\n }) ?? null;\n }\n };\n\n const handleTouchStart = (event: TouchEvent) => {\n event.preventDefault();\n event.stopPropagation();\n\n event.changedTouches.length === 1 && setActiveColumn(event.changedTouches[0].clientX);\n };\n\n const handleTouchMove = (event: TouchEvent) => {\n event.preventDefault();\n event.stopPropagation();\n };\n\n const handleWheel = (event: WheelEvent) => {\n event.preventDefault();\n event.stopPropagation();\n\n setActiveColumn(event.clientX);\n };\n\n container.addEventListener('touchstart', handleTouchStart, { passive: false });\n container.addEventListener('touchmove', handleTouchMove, { passive: false });\n container.addEventListener('wheel', handleWheel, { passive: false });\n return () => {\n container.removeEventListener('touchstart', handleTouchStart);\n container.removeEventListener('touchmove', handleTouchMove);\n container.removeEventListener('wheel', handleWheel);\n };\n }, []);\n\n useEffect(() => {\n const handleScroll = (event: ScrollGestureEvent) => {\n if (stateRef.current.activeColumnIndex !== null && stateRef.current.containerMetrics !== null) {\n const columnIndex = stateRef.current.activeColumnIndex;\n const columnState = stateRef.current?.columns[columnIndex];\n const { columnElement, columnWrapper } = columnState;\n if (!columnState || !columnState.visibleItemCount || !columnElement || !columnWrapper) {\n return;\n }\n\n stateRef.current.scrollDirection = event.delta > 0 ? 'up' : 'down';\n columnState.translateY += event.delta;\n\n // бесконечный скролл\n if (columnState.circular) {\n // скролл вверх\n // верхний край колонки близко к верхнему краю враппера\n if (\n event.delta > 0 &&\n stateRef.current.containerMetrics.height / 2 + columnState.translateY > -100\n ) {\n columnState.translateY -= columnState.itemCount * ITEM_HEIGHT;\n }\n\n // скролл вниз\n // нижний край колонки близко к нижнему краю враппера\n if (\n event.delta < 0 &&\n columnState.cloneCount * columnState.itemCount * ITEM_HEIGHT +\n columnState.translateY -\n stateRef.current.containerMetrics.height / 2 <\n 100\n ) {\n columnState.translateY += columnState.itemCount * ITEM_HEIGHT;\n }\n }\n\n // скролл ограничен — делаем чтобы колонку было нельзя проскроллить за допустимые границы\n if (!columnState.circular) {\n // скролл вверх\n if (event.delta > 0) {\n // translateY, когда колонка проскроллена в самый верх (выбран первый айтем)\n const minAllowedTranslateY = 0;\n columnState.translateY = Math.min(columnState.translateY, minAllowedTranslateY);\n }\n\n // скролл вниз\n if (event.delta < 0) {\n // translateY, когда колонка проскроллена в самый низ (выбран последний айтем)\n const maxAllowedTranslateY = (columnState.itemCount - 1) * ITEM_HEIGHT;\n columnState.translateY = Math.max(columnState.translateY, -maxAllowedTranslateY);\n }\n }\n\n // анимация увеличения ближайшего к центру айтема\n const selectedItemIndex = Math.round(-columnState.translateY / ITEM_HEIGHT);\n if (columnState.itemElements.has(selectedItemIndex)) {\n const halfItemHeight = ITEM_HEIGHT / 2;\n (columnState.itemElements.get(selectedItemIndex) as HTMLElement).style.transform =\n `scale(${1 + (SELECTED_ITEM_SCALE - 1) * Math.abs((Math.abs(columnState.translateY % ITEM_HEIGHT) - halfItemHeight) / halfItemHeight)})`;\n }\n\n columnElement.style.transform = translateY(columnState.translateY);\n setTouchActionActive(true);\n }\n };\n\n const handleScrollEnd = () => {\n if (stateRef.current.activeColumnIndex !== null) {\n const columnIndex = stateRef.current.activeColumnIndex;\n const columnState = stateRef.current?.columns[columnIndex];\n const { columnElement, columnWrapper } = columnState;\n if (!columnState || !columnElement || !columnWrapper) {\n return;\n }\n\n // если колонка зациклена, у нее могут быть отрендерены клоны для бесконечного скролла\n // поэтому нужно взять остаток от деления на количество айтемов в колонке\n const _selectedItemIndex =\n Math.round(Math.abs(columnState.translateY) / ITEM_HEIGHT) % columnState.itemCount;\n let selectedItemIndex = _selectedItemIndex;\n // если выбранный айтем disabled, ищем ближайший не disabled в направлении скролла\n if (columnState.disabledItems.has(selectedItemIndex)) {\n do {\n if (stateRef.current.scrollDirection === 'up') {\n selectedItemIndex -= 1;\n if (selectedItemIndex < 0) {\n selectedItemIndex = columnState.itemCount - 1;\n }\n } else if (stateRef.current.scrollDirection === 'down') {\n selectedItemIndex += 1;\n if (selectedItemIndex > columnState.itemCount - 1) {\n selectedItemIndex = 0;\n }\n } else {\n break;\n }\n } while (\n columnState.disabledItems.has(selectedItemIndex) &&\n selectedItemIndex !== _selectedItemIndex\n );\n }\n\n const _selectedIndexes = [...selectedIndexesRef.current];\n _selectedIndexes[columnIndex] = selectedItemIndex;\n onChangeRef.current?.(_selectedIndexes);\n\n stateRef.current.activeColumnIndex = null;\n stateRef.current.scrollDirection = null;\n setTouchActionActive(false);\n }\n };\n\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n return initScrollHandlers({\n axis: 'vertical',\n wrapperRef: containerRef,\n onTouchMove: handleScroll,\n onTouchEnd: handleScrollEnd,\n onWheelMove: (event) => {\n handleScroll(event);\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(handleScrollEnd, 50);\n },\n });\n }, [setTouchActionActive]);\n\n const recalcLayoutMetrics = useCallback(() => {\n if (!containerRef.current) {\n return;\n }\n\n stateRef.current.containerMetrics = containerRef.current.getBoundingClientRect();\n stateRef.current.scrollAreas = makeScrollAreas(\n stateRef.current.columns.length,\n stateRef.current.containerMetrics.width,\n showDelimiter\n );\n\n const containerHeight = stateRef.current.containerMetrics.height;\n stateRef.current.columns.forEach((columnState) => {\n const { columnElement, columnWrapper } = columnState;\n if (!columnElement || !columnWrapper) {\n return;\n }\n\n if (columnState.circular) {\n const cloneCount =\n Math.max(Math.ceil(containerHeight / (columnState.itemCount * ITEM_HEIGHT)), 1) * 2 + 1;\n if (columnState.cloneCount !== cloneCount) {\n columnState.cloneCount = cloneCount;\n columnState.translateY -=\n Math.floor(columnState.cloneCount / 2) * columnState.itemCount * ITEM_HEIGHT;\n columnElement.style.transform = translateY(columnState.translateY);\n setStateKey((stateKey) => stateKey + 1);\n }\n }\n\n columnState.visibleItemCount = Math.min(\n columnState.circular ? columnState.itemCount : columnState.itemCount * 2 - 1,\n floorToOdd(Math.floor(containerHeight / ITEM_HEIGHT)),\n fixedHeight ? FIXED_HEIGHT_ITEMS : Infinity\n );\n const gradientStartPoint = (containerHeight - columnState.visibleItemCount * ITEM_HEIGHT) / 2;\n const gradientEndPoint = containerHeight / 2 + (columnState.visibleItemCount * ITEM_HEIGHT) / 2;\n columnWrapper.style.maskImage = `linear-gradient(\n to bottom,\n transparent ${gradientStartPoint}px,\n #000 ${gradientStartPoint + 60}px,\n #000 ${gradientEndPoint - 60}px,\n transparent ${gradientEndPoint}px\n )`;\n });\n }, [fixedHeight, showDelimiter, setStateKey]);\n\n useLayoutEffect(() => {\n if (stateRef.current.containerMetrics !== null) {\n recalcLayoutMetrics();\n }\n }, [recalcLayoutMetrics]);\n\n useLayoutEffect(() => {\n if (stateRef.current.containerMetrics === null) {\n recalcLayoutMetrics();\n }\n });\n\n // Скроллим к initial значению либо округляем позицию скролла до ближайшего айтема после завершения анимации инерции скролла\n useEffect(() => {\n stateRef.current.columns.forEach((columnState, columnIndex) => {\n const { columnElement, columnWrapper } = columnState;\n if (!columnElement || !columnWrapper) {\n return;\n }\n\n columnState.translateY =\n -(Math.floor(columnState.cloneCount / 2) * columnState.itemCount * ITEM_HEIGHT) -\n selectedIndexes[columnIndex] * ITEM_HEIGHT;\n columnElement.style.transform = translateY(columnState.translateY);\n\n columnState.itemElements.forEach((itemElement) => {\n if (itemElement !== null) {\n itemElement.style.transform = ``;\n }\n });\n });\n }, [selectedIndexes]);\n\n if (!visible) {\n return null;\n }\n\n const renderColumns = (startIndex: number, endIndex: number) => {\n return range(startIndex, endIndex).map((columnIndex) => {\n const columnState = stateRef.current.columns[columnIndex];\n return (\n <div\n className={classnames(styles.columnWrapper, {\n [styles.wideColumnWrapper]: columns.length < 4 && columns.length > 1,\n [styles.fullWidthColumnWrapper]: columns.length === 1,\n })}\n key={`${columns.length}-${columnIndex}`}\n ref={columnState.columnWrapperCallback}\n >\n <div className={styles.columnPositionWrapper}>\n <div className={styles.column} ref={columnState.columnElementCallback}>\n {[...Array(columnState.cloneCount).keys()].flatMap((columnCloneIndex) =>\n columns[columnIndex].items.map((item, itemIndex) => (\n <div\n className={classnames(styles.item, {\n [styles.alignLeft]: columns[columnIndex].align === 'left',\n [styles.alignRight]: columns[columnIndex].align === 'right',\n [styles.disabled]: item.disabled,\n [styles.selected]:\n itemIndex === selectedIndexes[columnIndex] &&\n (!touchActionActive ||\n columnIndex !== stateRef.current.activeColumnIndex),\n })}\n key={`${columnCloneIndex}-${columns[columnIndex].items.length}-${item.key ?? item.text}`}\n ref={columnState.itemElementCallbacks?.get(\n columnCloneIndex * columnState.itemCount + itemIndex\n )}\n >\n {item.text}\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n );\n });\n };\n\n if (showDelimiter && columns.length % 2 === 0) {\n return (\n <div className={classnames(styles.pickerWheel, { [styles.fixedHeight]: isFixedHeight })} ref={containerRef}>\n <div className={styles.selectedItemBackground} />\n <div className={classnames(styles.columns)}>\n {renderColumns(0, columns.length / 2)}\n <div className={styles.columnWrapper}>\n <div className={styles.columnPositionWrapper}>\n <div className={styles.column}>\n <div className={classnames(styles.item, styles.selected)}>–</div>\n </div>\n </div>\n </div>\n {renderColumns(columns.length / 2, columns.length)}\n </div>\n <div className={styles.touchEventsOverlay} />\n </div>\n );\n }\n\n return (\n <div className={classnames(styles.pickerWheel, { [styles.fixedHeight]: isFixedHeight })} ref={containerRef}>\n <div className={styles.selectedItemBackground} />\n <div className={classnames(styles.columns)}>{renderColumns(0, columns.length)}</div>\n <div className={styles.touchEventsOverlay} />\n </div>\n );\n};\n\nPickerWheel.isFullHeightBottomSheetContent = true;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"PickerWheel.js","sources":["src/PickerWheel.tsx"],"sourcesContent":["import { useCallback, useContext, useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport classnames from 'classnames';\n\nimport { initScrollHandlers, ScrollGestureEvent } from '@hh.ru/magritte-internal-custom-scroll';\nimport { BottomSheetContext } from '@hh.ru/magritte-ui-bottom-sheet';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { PickerWheelColumn, PickerWheelComponent } from '@hh.ru/magritte-ui-picker-wheel/types';\n\nimport styles from './picker-wheel.less';\n\nconst FIXED_HEIGHT_ITEMS = 7;\nconst ITEM_HEIGHT = 48;\nconst COLUMN_WIDTH = 64;\nconst WIDE_COLUMN_WIDTH = 105;\nconst SELECTED_ITEM_SCALE = 22 / 18;\n\n/**\n * Превращает массив точек в массив интервалов\n * [0, 50, 100, 200] => [{ left: 0, right: 50 }, { left: 50, right: 100 }, { left: 100, right: 200 }]\n */\nconst makeIntervalsFromPoints = (...points: Array<number>) => {\n return points\n .flatMap((point, index) => {\n if (index !== 0 && index !== points.length - 1) {\n return [point, point];\n }\n return point;\n })\n .reduce(\n (intervals, point, index) => {\n if (index % 2 === 0) {\n return [...intervals, { left: point }];\n }\n const interval = { ...intervals[intervals.length - 1], right: point };\n return [...intervals.slice(0, intervals.length - 1), interval];\n },\n [] as Array<{ left: number; right?: number }>\n ) as Array<{ left: number; right: number }>;\n};\n\n/**\n * Генерирует горизонтальные границы в пикселях относительно контейнера, в которых колонки должны реагировать на скролл\n */\nconst makeScrollAreas = (\n columnCount: number,\n containerWidth: number,\n showDelimiter?: boolean\n): Array<{ left: number; right: number }> => {\n switch (columnCount) {\n case 1:\n return makeIntervalsFromPoints(0, containerWidth);\n case 2:\n return makeIntervalsFromPoints(0, containerWidth / 2, containerWidth);\n case 3:\n return makeIntervalsFromPoints(\n 0,\n (containerWidth - WIDE_COLUMN_WIDTH) / 2,\n (containerWidth + WIDE_COLUMN_WIDTH) / 2,\n containerWidth\n );\n case 4:\n if (showDelimiter) {\n return makeIntervalsFromPoints(\n 0,\n containerWidth / 2 - COLUMN_WIDTH * 1.5,\n containerWidth / 2,\n containerWidth / 2 + COLUMN_WIDTH * 1.5,\n containerWidth\n );\n }\n return makeIntervalsFromPoints(\n 0,\n containerWidth / 2 - COLUMN_WIDTH,\n containerWidth / 2,\n containerWidth / 2 + COLUMN_WIDTH,\n containerWidth\n );\n default:\n throw new Error('Unexpected column count');\n }\n};\n\nconst floorToOdd = (value: number) => (value % 2 !== 1 ? value - 1 : value);\n\nconst range = (start: number, end: number) => {\n return [...Array(end - start).keys()].map((_, index) => index + start);\n};\n\nconst translateY = (value: number) => `translate3d(0, ${value}px, 0)`;\n\ninterface ColumnState {\n circular?: boolean;\n /**\n * Если колонка не зациклена (circular), всегда 1\n * Если зациклена, то это количество копий колонки, которое нужно отрендерить, чтобы заполнить контейнер целиком\n */\n cloneCount: number;\n disabledItems: Set<number>;\n /** Количество айтемов колонки, копируется из props.columns чтобы не нужно было добавлять props.columns в зависимости */\n itemCount: number;\n /** translateY для эмуляции скролла */\n translateY: number;\n /** Количество видимых айтемов, всегда нечетное */\n visibleItemCount: number | null;\n columnElement: HTMLDivElement | null;\n columnElementCallback: React.RefCallback<HTMLDivElement | null>;\n columnWrapper: HTMLDivElement | null;\n columnWrapperCallback: React.RefCallback<HTMLDivElement | null>;\n itemElements: Map<number, HTMLDivElement | null>;\n itemElementCallbacks: Pick<Map<number, React.RefCallback<HTMLDivElement | null>>, 'get'>;\n}\n\ninterface PickerWheelState {\n activeColumnIndex: number | null;\n animations: Array<{ renderedKey: number; itemIndex: number }>;\n containerMetrics: DOMRect | null;\n columns: Array<ColumnState>;\n scrollAreas: Array<{ left: number; right: number }> | null;\n scrollDirection: 'up' | 'down' | null;\n}\n\nconst makeInitialState = (columns: Array<PickerWheelColumn>): PickerWheelState => {\n return {\n activeColumnIndex: null,\n animations: [],\n containerMetrics: null,\n columns: columns.map((column) => {\n const itemElementCallbacks: Map<number, React.RefCallback<HTMLDivElement | null>> = new Map();\n const columnState: ColumnState = {\n circular: column.circular,\n cloneCount: 1,\n disabledItems: new Set(),\n itemCount: column.items.length,\n translateY: 0,\n visibleItemCount: null,\n columnElement: null,\n columnElementCallback: (element) => (columnState.columnElement = element),\n columnWrapper: null,\n columnWrapperCallback: (element) => (columnState.columnWrapper = element),\n itemElements: new Map(),\n itemElementCallbacks: {\n get: (itemIndex: number) => {\n if (!itemElementCallbacks.has(itemIndex)) {\n itemElementCallbacks.set(itemIndex, (element) => {\n columnState.itemElements.set(itemIndex, element);\n });\n }\n return itemElementCallbacks.get(itemIndex);\n },\n },\n };\n return columnState;\n }),\n scrollAreas: null,\n scrollDirection: null,\n };\n};\n\nexport const PickerWheel: PickerWheelComponent = ({\n columns,\n fixedHeight,\n onChange,\n selectedIndexes,\n showDelimiter,\n}) => {\n if (columns.length !== selectedIndexes.length) {\n throw new Error('selectedIndexes.length does not match columns.length');\n }\n\n const stateRef = useRef<PickerWheelState>(makeInitialState(columns));\n if (\n columns.length !== stateRef.current.columns.length ||\n columns.some((column, columnIndex) => {\n return (\n column.items.length !== stateRef.current.columns[columnIndex].itemCount ||\n column.circular !== stateRef.current.columns[columnIndex].circular\n );\n })\n ) {\n stateRef.current = makeInitialState(columns);\n }\n columns.forEach(\n (column, columnIndex) =>\n (stateRef.current.columns[columnIndex].disabledItems = new Set(\n column.items.reduce(\n (result, item, itemIndex) => (item.disabled ? [...result, itemIndex] : result),\n [] as Array<number>\n )\n ))\n );\n\n const bottomSheetContext = useContext(BottomSheetContext);\n const containerRef = useRef<HTMLDivElement>(null);\n const isFixedHeight = (bottomSheetContext !== null && bottomSheetContext.height !== 'full-screen') || fixedHeight;\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const selectedIndexesRef = useRef(selectedIndexes);\n selectedIndexesRef.current = selectedIndexes;\n const [_, setStateKey] = useState(0);\n const [touchActionActive, setTouchActionActive] = useState(false);\n const visible = useBreakpoint().isMobile;\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) {\n return void 0;\n }\n\n // вычисляем колонку, которую пользователь начал скроллить\n const setActiveColumn = (clientX: number) => {\n const containerMetrics = stateRef.current.containerMetrics;\n if (containerMetrics !== null) {\n stateRef.current.activeColumnIndex =\n stateRef.current.scrollAreas?.findIndex((interval) => {\n const relativeX = clientX - containerMetrics.left;\n return relativeX >= interval.left && relativeX <= interval.right;\n }) ?? null;\n }\n };\n\n const handleTouchStart = (event: TouchEvent) => {\n event.preventDefault();\n event.stopPropagation();\n\n event.changedTouches.length === 1 && setActiveColumn(event.changedTouches[0].clientX);\n };\n\n const handleTouchMove = (event: TouchEvent) => {\n event.preventDefault();\n event.stopPropagation();\n };\n\n const handleWheel = (event: WheelEvent) => {\n event.preventDefault();\n event.stopPropagation();\n\n setActiveColumn(event.clientX);\n };\n\n container.addEventListener('touchstart', handleTouchStart, { passive: false });\n container.addEventListener('touchmove', handleTouchMove, { passive: false });\n container.addEventListener('wheel', handleWheel, { passive: false });\n return () => {\n container.removeEventListener('touchstart', handleTouchStart);\n container.removeEventListener('touchmove', handleTouchMove);\n container.removeEventListener('wheel', handleWheel);\n };\n }, []);\n\n useEffect(() => {\n const handleScroll = (event: ScrollGestureEvent) => {\n if (stateRef.current.activeColumnIndex !== null && stateRef.current.containerMetrics !== null) {\n const columnIndex = stateRef.current.activeColumnIndex;\n const columnState = stateRef.current?.columns[columnIndex];\n const { columnElement, columnWrapper } = columnState;\n if (!columnState || !columnState.visibleItemCount || !columnElement || !columnWrapper) {\n return;\n }\n\n stateRef.current.scrollDirection = event.delta > 0 ? 'up' : 'down';\n columnState.translateY += event.delta;\n\n // бесконечный скролл\n if (columnState.circular) {\n // скролл вверх\n // верхний край колонки близко к верхнему краю враппера\n if (\n event.delta > 0 &&\n stateRef.current.containerMetrics.height / 2 + columnState.translateY > -100\n ) {\n columnState.translateY -= columnState.itemCount * ITEM_HEIGHT;\n }\n\n // скролл вниз\n // нижний край колонки близко к нижнему краю враппера\n if (\n event.delta < 0 &&\n columnState.cloneCount * columnState.itemCount * ITEM_HEIGHT +\n columnState.translateY -\n stateRef.current.containerMetrics.height / 2 <\n 100\n ) {\n columnState.translateY += columnState.itemCount * ITEM_HEIGHT;\n }\n }\n\n // скролл ограничен — делаем чтобы колонку было нельзя проскроллить за допустимые границы\n if (!columnState.circular) {\n // скролл вверх\n if (event.delta > 0) {\n // translateY, когда колонка проскроллена в самый верх (выбран первый айтем)\n const minAllowedTranslateY = 0;\n columnState.translateY = Math.min(columnState.translateY, minAllowedTranslateY);\n }\n\n // скролл вниз\n if (event.delta < 0) {\n // translateY, когда колонка проскроллена в самый низ (выбран последний айтем)\n const maxAllowedTranslateY = (columnState.itemCount - 1) * ITEM_HEIGHT;\n columnState.translateY = Math.max(columnState.translateY, -maxAllowedTranslateY);\n }\n }\n\n // анимация увеличения ближайшего к центру айтема\n const selectedItemIndex = Math.round(-columnState.translateY / ITEM_HEIGHT);\n if (columnState.itemElements.has(selectedItemIndex)) {\n const halfItemHeight = ITEM_HEIGHT / 2;\n (columnState.itemElements.get(selectedItemIndex) as HTMLElement).style.transform =\n `scale(${1 + (SELECTED_ITEM_SCALE - 1) * Math.abs((Math.abs(columnState.translateY % ITEM_HEIGHT) - halfItemHeight) / halfItemHeight)})`;\n }\n\n columnElement.style.transform = translateY(columnState.translateY);\n setTouchActionActive(true);\n }\n };\n\n const handleScrollEnd = () => {\n if (stateRef.current.activeColumnIndex !== null) {\n const columnIndex = stateRef.current.activeColumnIndex;\n const columnState = stateRef.current?.columns[columnIndex];\n const { columnElement, columnWrapper } = columnState;\n if (!columnState || !columnElement || !columnWrapper) {\n return;\n }\n\n // если колонка зациклена, у нее могут быть отрендерены клоны для бесконечного скролла\n // поэтому нужно взять остаток от деления на количество айтемов в колонке\n const _selectedItemIndex =\n Math.round(Math.abs(columnState.translateY) / ITEM_HEIGHT) % columnState.itemCount;\n let selectedItemIndex = _selectedItemIndex;\n // если выбранный айтем disabled, ищем ближайший не disabled в направлении скролла\n if (columnState.disabledItems.has(selectedItemIndex)) {\n do {\n if (stateRef.current.scrollDirection === 'up') {\n selectedItemIndex -= 1;\n if (selectedItemIndex < 0) {\n selectedItemIndex = columnState.itemCount - 1;\n }\n } else if (stateRef.current.scrollDirection === 'down') {\n selectedItemIndex += 1;\n if (selectedItemIndex > columnState.itemCount - 1) {\n selectedItemIndex = 0;\n }\n } else {\n break;\n }\n } while (\n columnState.disabledItems.has(selectedItemIndex) &&\n selectedItemIndex !== _selectedItemIndex\n );\n }\n\n const _selectedIndexes = [...selectedIndexesRef.current];\n _selectedIndexes[columnIndex] = selectedItemIndex;\n onChangeRef.current?.(_selectedIndexes);\n\n stateRef.current.activeColumnIndex = null;\n stateRef.current.scrollDirection = null;\n setTouchActionActive(false);\n }\n };\n\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n return initScrollHandlers({\n axis: 'vertical',\n wrapperRef: containerRef,\n onTouchMove: handleScroll,\n onTouchEnd: handleScrollEnd,\n onWheelMove: (event) => {\n handleScroll(event);\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(handleScrollEnd, 50);\n },\n });\n }, [setTouchActionActive]);\n\n const recalcLayoutMetrics = useCallback(() => {\n if (!containerRef.current) {\n return;\n }\n\n stateRef.current.containerMetrics = containerRef.current.getBoundingClientRect();\n stateRef.current.scrollAreas = makeScrollAreas(\n stateRef.current.columns.length,\n stateRef.current.containerMetrics.width,\n showDelimiter\n );\n\n const containerHeight = stateRef.current.containerMetrics.height;\n stateRef.current.columns.forEach((columnState) => {\n const { columnElement, columnWrapper } = columnState;\n if (!columnElement || !columnWrapper) {\n return;\n }\n\n if (columnState.circular) {\n const cloneCount =\n Math.max(Math.ceil(containerHeight / (columnState.itemCount * ITEM_HEIGHT)), 1) * 2 + 1;\n if (columnState.cloneCount !== cloneCount) {\n columnState.cloneCount = cloneCount;\n columnState.translateY -=\n Math.floor(columnState.cloneCount / 2) * columnState.itemCount * ITEM_HEIGHT;\n columnElement.style.transform = translateY(columnState.translateY);\n setStateKey((stateKey) => stateKey + 1);\n }\n }\n\n columnState.visibleItemCount = Math.min(\n columnState.circular ? columnState.itemCount : columnState.itemCount * 2 - 1,\n floorToOdd(Math.floor(containerHeight / ITEM_HEIGHT)),\n fixedHeight ? FIXED_HEIGHT_ITEMS : Infinity\n );\n const gradientStartPoint = (containerHeight - columnState.visibleItemCount * ITEM_HEIGHT) / 2;\n const gradientEndPoint = containerHeight / 2 + (columnState.visibleItemCount * ITEM_HEIGHT) / 2;\n columnWrapper.style.maskImage = `linear-gradient(\n to bottom,\n transparent ${gradientStartPoint}px,\n #000 ${gradientStartPoint + 60}px,\n #000 ${gradientEndPoint - 60}px,\n transparent ${gradientEndPoint}px\n )`;\n });\n }, [fixedHeight, showDelimiter, setStateKey]);\n\n useLayoutEffect(() => {\n if (stateRef.current.containerMetrics !== null) {\n recalcLayoutMetrics();\n }\n }, [recalcLayoutMetrics]);\n\n useLayoutEffect(() => {\n if (stateRef.current.containerMetrics === null) {\n recalcLayoutMetrics();\n }\n });\n\n // Скроллим к initial значению либо округляем позицию скролла до ближайшего айтема после завершения анимации инерции скролла\n useEffect(() => {\n stateRef.current.columns.forEach((columnState, columnIndex) => {\n const { columnElement, columnWrapper } = columnState;\n if (!columnElement || !columnWrapper) {\n return;\n }\n\n columnState.translateY =\n -(Math.floor(columnState.cloneCount / 2) * columnState.itemCount * ITEM_HEIGHT) -\n selectedIndexes[columnIndex] * ITEM_HEIGHT;\n columnElement.style.transform = translateY(columnState.translateY);\n\n columnState.itemElements.forEach((itemElement) => {\n if (itemElement !== null) {\n itemElement.style.transform = ``;\n }\n });\n });\n }, [selectedIndexes]);\n\n if (!visible) {\n return null;\n }\n\n const renderColumns = (startIndex: number, endIndex: number) => {\n return range(startIndex, endIndex).map((columnIndex) => {\n const columnState = stateRef.current.columns[columnIndex];\n return (\n <div\n className={classnames(styles.columnWrapper, {\n [styles.wideColumnWrapper]: columns.length < 4 && columns.length > 1,\n [styles.fullWidthColumnWrapper]: columns.length === 1,\n })}\n key={`${columns.length}-${columnIndex}`}\n ref={columnState.columnWrapperCallback}\n >\n <div className={styles.columnPositionWrapper}>\n <div className={styles.column} ref={columnState.columnElementCallback}>\n {[...Array(columnState.cloneCount).keys()].flatMap((columnCloneIndex) =>\n columns[columnIndex].items.map((item, itemIndex) => (\n <div\n className={classnames(styles.item, {\n [styles.alignLeft]: columns[columnIndex].align === 'left',\n [styles.alignRight]: columns[columnIndex].align === 'right',\n [styles.disabled]: item.disabled,\n [styles.selected]:\n itemIndex === selectedIndexes[columnIndex] &&\n (!touchActionActive ||\n columnIndex !== stateRef.current.activeColumnIndex),\n })}\n key={`${columnCloneIndex}-${columns[columnIndex].items.length}-${item.key ?? item.text}`}\n ref={columnState.itemElementCallbacks?.get(\n columnCloneIndex * columnState.itemCount + itemIndex\n )}\n >\n {item.text}\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n );\n });\n };\n\n if (showDelimiter && columns.length % 2 === 0) {\n return (\n <div className={classnames(styles.pickerWheel, { [styles.fixedHeight]: isFixedHeight })} ref={containerRef}>\n <div className={styles.selectedItemBackground} />\n <div className={classnames(styles.columns)}>\n {renderColumns(0, columns.length / 2)}\n <div className={styles.columnWrapper}>\n <div className={styles.columnPositionWrapper}>\n <div className={styles.column}>\n <div className={classnames(styles.item, styles.selected)}>–</div>\n </div>\n </div>\n </div>\n {renderColumns(columns.length / 2, columns.length)}\n </div>\n <div className={styles.touchEventsOverlay} />\n </div>\n );\n }\n\n return (\n <div className={classnames(styles.pickerWheel, { [styles.fixedHeight]: isFixedHeight })} ref={containerRef}>\n <div className={styles.selectedItemBackground} />\n <div className={classnames(styles.columns)}>{renderColumns(0, columns.length)}</div>\n <div className={styles.touchEventsOverlay} />\n </div>\n );\n};\n\nPickerWheel.isFullHeightBottomSheetContent = true;\n"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { PickerWheelComponent } from '@hh.ru/magritte-ui-picker-wheel/types';
1
+ import { PickerWheelComponent } from './types';
2
2
  export declare const UncontrolledPickerWheel: PickerWheelComponent;
@@ -7,15 +7,22 @@ import '@hh.ru/magritte-internal-custom-scroll';
7
7
  import '@hh.ru/magritte-ui-bottom-sheet';
8
8
  import '@hh.ru/magritte-ui-breakpoint';
9
9
 
10
- const UncontrolledPickerWheel = ({ selectedIndexes: initialSelectedIndexes, onChange, ...props }) => {
11
- const [selectedIndexes, setSelectedIndexes] = useState(initialSelectedIndexes);
12
- const onChangeRef = useRef(onChange);
13
- onChangeRef.current = onChange;
14
- const handleChange = useCallback((value) => {
15
- onChangeRef.current?.(value);
16
- setSelectedIndexes(value);
17
- }, [setSelectedIndexes]);
18
- return jsx(PickerWheel, { selectedIndexes: selectedIndexes, onChange: handleChange, ...props });
10
+ const UncontrolledPickerWheel = ({
11
+ selectedIndexes: initialSelectedIndexes,
12
+ onChange,
13
+ ...props
14
+ }) => {
15
+ const [selectedIndexes, setSelectedIndexes] = useState(initialSelectedIndexes);
16
+ const onChangeRef = useRef(onChange);
17
+ onChangeRef.current = onChange;
18
+ const handleChange = useCallback(
19
+ (value) => {
20
+ onChangeRef.current?.(value);
21
+ setSelectedIndexes(value);
22
+ },
23
+ [setSelectedIndexes]
24
+ );
25
+ return /* @__PURE__ */ jsx(PickerWheel, { selectedIndexes, onChange: handleChange, ...props });
19
26
  };
20
27
  UncontrolledPickerWheel.isFullHeightBottomSheetContent = true;
21
28
 
@@ -1 +1 @@
1
- {"version":3,"file":"UncontrolledPickerWheel.js","sources":["src/UncontrolledPickerWheel.tsx"],"sourcesContent":["import { useCallback, useRef, useState } from 'react';\n\nimport { PickerWheel } from '@hh.ru/magritte-ui-picker-wheel/PickerWheel';\nimport { PickerWheelComponent } from '@hh.ru/magritte-ui-picker-wheel/types';\n\nexport const UncontrolledPickerWheel: PickerWheelComponent = ({\n selectedIndexes: initialSelectedIndexes,\n onChange,\n ...props\n}) => {\n const [selectedIndexes, setSelectedIndexes] = useState(initialSelectedIndexes);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const handleChange = useCallback(\n (value: Array<number>) => {\n onChangeRef.current?.(value);\n setSelectedIndexes(value);\n },\n [setSelectedIndexes]\n );\n\n return <PickerWheel selectedIndexes={selectedIndexes} onChange={handleChange} {...props} />;\n};\n\nUncontrolledPickerWheel.isFullHeightBottomSheetContent = true;\n"],"names":["_jsx"],"mappings":";;;;;;;;AAKa,MAAA,uBAAuB,GAAyB,CAAC,EAC1D,eAAe,EAAE,sBAAsB,EACvC,QAAQ,EACR,GAAG,KAAK,EACX,KAAI;IACD,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,sBAAsB,CAAC,CAAC;AAC/E,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AACrC,IAAA,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;AAE/B,IAAA,MAAM,YAAY,GAAG,WAAW,CAC5B,CAAC,KAAoB,KAAI;AACrB,QAAA,WAAW,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC;QAC7B,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAC9B,KAAC,EACD,CAAC,kBAAkB,CAAC,CACvB,CAAC;AAEF,IAAA,OAAOA,GAAC,CAAA,WAAW,EAAC,EAAA,eAAe,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAM,GAAA,KAAK,GAAI,CAAC;AAChG,EAAE;AAEF,uBAAuB,CAAC,8BAA8B,GAAG,IAAI;;;;"}
1
+ {"version":3,"file":"UncontrolledPickerWheel.js","sources":["src/UncontrolledPickerWheel.tsx"],"sourcesContent":["import { useCallback, useRef, useState } from 'react';\n\nimport { PickerWheel } from '@hh.ru/magritte-ui-picker-wheel/PickerWheel';\nimport { PickerWheelComponent } from '@hh.ru/magritte-ui-picker-wheel/types';\n\nexport const UncontrolledPickerWheel: PickerWheelComponent = ({\n selectedIndexes: initialSelectedIndexes,\n onChange,\n ...props\n}) => {\n const [selectedIndexes, setSelectedIndexes] = useState(initialSelectedIndexes);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const handleChange = useCallback(\n (value: Array<number>) => {\n onChangeRef.current?.(value);\n setSelectedIndexes(value);\n },\n [setSelectedIndexes]\n );\n\n return <PickerWheel selectedIndexes={selectedIndexes} onChange={handleChange} {...props} />;\n};\n\nUncontrolledPickerWheel.isFullHeightBottomSheetContent = true;\n"],"names":[],"mappings":";;;;;;;;AAKO,MAAM,0BAAgD,CAAC;AAAA,EAC1D,eAAiB,EAAA,sBAAA;AAAA,EACjB,QAAA;AAAA,EACA,GAAG,KAAA;AACP,CAAM,KAAA;AACF,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAI,SAAS,sBAAsB,CAAA,CAAA;AAC7E,EAAM,MAAA,WAAA,GAAc,OAAO,QAAQ,CAAA,CAAA;AACnC,EAAA,WAAA,CAAY,OAAU,GAAA,QAAA,CAAA;AAEtB,EAAA,MAAM,YAAe,GAAA,WAAA;AAAA,IACjB,CAAC,KAAyB,KAAA;AACtB,MAAA,WAAA,CAAY,UAAU,KAAK,CAAA,CAAA;AAC3B,MAAA,kBAAA,CAAmB,KAAK,CAAA,CAAA;AAAA,KAC5B;AAAA,IACA,CAAC,kBAAkB,CAAA;AAAA,GACvB,CAAA;AAEA,EAAA,2BAAQ,WAAY,EAAA,EAAA,eAAA,EAAkC,QAAU,EAAA,YAAA,EAAe,GAAG,KAAO,EAAA,CAAA,CAAA;AAC7F,EAAA;AAEA,uBAAA,CAAwB,8BAAiC,GAAA,IAAA;;;;"}
package/index.css CHANGED
@@ -1,57 +1,57 @@
1
1
  :root{
2
- --magritte-color-text-primary-v25-1-1:#000000;
3
- --magritte-color-text-state-primary-disabled-v25-1-1:#0000007a;
4
- --magritte-color-component-time-picker-background-selection-v25-1-1:#F1F4F9;
2
+ --magritte-color-text-primary-v26-0-1:#000000;
3
+ --magritte-color-text-state-primary-disabled-v26-0-1:#0000007a;
4
+ --magritte-color-component-time-picker-background-selection-v26-0-1:#F1F4F9;
5
5
  }
6
6
 
7
7
  .magritte-night-theme{
8
- --magritte-color-text-primary-v25-1-1:#ffffff;
9
- --magritte-color-text-state-primary-disabled-v25-1-1:#ababab7a;
10
- --magritte-color-component-time-picker-background-selection-v25-1-1:#262626;
8
+ --magritte-color-text-primary-v26-0-1:#ffffff;
9
+ --magritte-color-text-state-primary-disabled-v26-0-1:#ababab7a;
10
+ --magritte-color-component-time-picker-background-selection-v26-0-1:#262626;
11
11
  }
12
- .magritte-picker-wheel___VaPvG_2-1-114{
12
+ .magritte-picker-wheel___VaPvG_2-1-116{
13
13
  position:relative;
14
14
  height:100%;
15
15
  }
16
- .magritte-selected-item-background___UnBPm_2-1-114{
16
+ .magritte-selected-item-background___UnBPm_2-1-116{
17
17
  position:absolute;
18
18
  inset:calc(50% - 48px / 2) 0;
19
- background-color:var(--magritte-color-component-time-picker-background-selection-v25-1-1);
19
+ background-color:var(--magritte-color-component-time-picker-background-selection-v26-0-1);
20
20
  }
21
- .magritte-columns___I7bCB_2-1-114{
21
+ .magritte-columns___I7bCB_2-1-116{
22
22
  position:relative;
23
23
  height:100%;
24
24
  display:flex;
25
25
  align-items:stretch;
26
26
  justify-content:center;
27
27
  }
28
- .magritte-touch-events-overlay___c3YOp_2-1-114{
28
+ .magritte-touch-events-overlay___c3YOp_2-1-116{
29
29
  position:absolute;
30
30
  inset:0;
31
31
  }
32
- .magritte-fixed-height___BLw9W_2-1-114{
32
+ .magritte-fixed-height___BLw9W_2-1-116{
33
33
  height:336px;
34
34
  }
35
- .magritte-column-wrapper___yRwai_2-1-114{
35
+ .magritte-column-wrapper___yRwai_2-1-116{
36
36
  flex:0 0 64px;
37
37
  position:relative;
38
38
  }
39
- .magritte-column-position-wrapper___wQTIu_2-1-114{
39
+ .magritte-column-position-wrapper___wQTIu_2-1-116{
40
40
  position:relative;
41
41
  top:50%;
42
42
  margin-top:-24px;
43
43
  }
44
- .magritte-wide-column-wrapper___nvecx_2-1-114{
44
+ .magritte-wide-column-wrapper___nvecx_2-1-116{
45
45
  flex:0 0 105px;
46
46
  }
47
- .magritte-full-width-column-wrapper___oxhh1_2-1-114{
47
+ .magritte-full-width-column-wrapper___oxhh1_2-1-116{
48
48
  flex:0 0 100%;
49
49
  }
50
- .magritte-column___IMYca_2-1-114{
50
+ .magritte-column___IMYca_2-1-116{
51
51
  will-change:transform;
52
52
  transform:translate3d(0, 0, 0);
53
53
  }
54
- .magritte-item___4RQVs_2-1-114{
54
+ .magritte-item___4RQVs_2-1-116{
55
55
  font-family:"hh sans";
56
56
  font-weight:400;
57
57
  line-height:26px;
@@ -60,25 +60,25 @@
60
60
  text-indent:0px;
61
61
  text-transform:none;
62
62
  text-decoration:none;
63
- color:var(--magritte-color-text-primary-v25-1-1);
63
+ color:var(--magritte-color-text-primary-v26-0-1);
64
64
  height:18px;
65
65
  line-height:18px;
66
66
  padding:calc((48px - 18px) / 2) 0;
67
67
  text-align:center;
68
68
  transform-origin:center center;
69
69
  }
70
- .magritte-item___4RQVs_2-1-114.magritte-align-left___PXJt0_2-1-114{
70
+ .magritte-item___4RQVs_2-1-116.magritte-align-left___PXJt0_2-1-116{
71
71
  text-align:left;
72
72
  transform-origin:left center;
73
73
  }
74
- .magritte-item___4RQVs_2-1-114.magritte-align-right___0yc2S_2-1-114{
74
+ .magritte-item___4RQVs_2-1-116.magritte-align-right___0yc2S_2-1-116{
75
75
  text-align:right;
76
76
  transform-origin:right center;
77
77
  }
78
- .magritte-item___4RQVs_2-1-114.magritte-disabled___d3ukm_2-1-114{
79
- color:var(--magritte-color-text-state-primary-disabled-v25-1-1);
78
+ .magritte-item___4RQVs_2-1-116.magritte-disabled___d3ukm_2-1-116{
79
+ color:var(--magritte-color-text-state-primary-disabled-v26-0-1);
80
80
  }
81
- .magritte-item___4RQVs_2-1-114.magritte-selected___Nar3H_2-1-114{
81
+ .magritte-item___4RQVs_2-1-116.magritte-selected___Nar3H_2-1-116{
82
82
  font-weight:500;
83
83
  height:22px;
84
84
  line-height:22px;
package/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export * from '@hh.ru/magritte-ui-picker-wheel/types';
2
- export * from '@hh.ru/magritte-ui-picker-wheel/itemsFromRange';
3
- export { PickerWheel } from '@hh.ru/magritte-ui-picker-wheel/PickerWheel';
4
- export { UncontrolledPickerWheel } from '@hh.ru/magritte-ui-picker-wheel/UncontrolledPickerWheel';
1
+ export * from './types';
2
+ export * from './itemsFromRange';
3
+ export { PickerWheel } from './PickerWheel';
4
+ export { UncontrolledPickerWheel } from './UncontrolledPickerWheel';
@@ -1,2 +1,2 @@
1
- import { PickerWheelItem } from '@hh.ru/magritte-ui-picker-wheel/types';
1
+ import { PickerWheelItem } from './types';
2
2
  export declare const itemsFromRange: (start: number, end: number, discreteness?: number) => Array<PickerWheelItem>;
package/itemsFromRange.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import './index.css';
2
2
  const itemsFromRange = (start, end, discreteness = 1) => {
3
- const result = [];
4
- for (let i = start; discreteness > 0 ? i <= end : i > discreteness; i += discreteness) {
5
- result.push({ text: `${i}` });
6
- }
7
- return result;
3
+ const result = [];
4
+ for (let i = start; discreteness > 0 ? i <= end : i > discreteness; i += discreteness) {
5
+ result.push({ text: `${i}` });
6
+ }
7
+ return result;
8
8
  };
9
9
 
10
10
  export { itemsFromRange };
@@ -1 +1 @@
1
- {"version":3,"file":"itemsFromRange.js","sources":["src/itemsFromRange.ts"],"sourcesContent":["import { PickerWheelItem } from '@hh.ru/magritte-ui-picker-wheel/types';\n\nexport const itemsFromRange = (start: number, end: number, discreteness: number = 1): Array<PickerWheelItem> => {\n const result = [];\n for (let i = start; discreteness > 0 ? i <= end : i > discreteness; i += discreteness) {\n result.push({ text: `${i}` });\n }\n return result;\n};\n"],"names":[],"mappings":"AAEO,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,GAAW,EAAE,YAAA,GAAuB,CAAC,KAA4B;IAC3G,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,YAAY,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,YAAY,EAAE,CAAC,IAAI,YAAY,EAAE;QACnF,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAA,EAAG,CAAC,CAAA,CAAE,EAAE,CAAC,CAAC;KACjC;AACD,IAAA,OAAO,MAAM,CAAC;AAClB;;;;"}
1
+ {"version":3,"file":"itemsFromRange.js","sources":["src/itemsFromRange.ts"],"sourcesContent":["import { PickerWheelItem } from '@hh.ru/magritte-ui-picker-wheel/types';\n\nexport const itemsFromRange = (start: number, end: number, discreteness: number = 1): Array<PickerWheelItem> => {\n const result = [];\n for (let i = start; discreteness > 0 ? i <= end : i > discreteness; i += discreteness) {\n result.push({ text: `${i}` });\n }\n return result;\n};\n"],"names":[],"mappings":"AAEO,MAAM,cAAiB,GAAA,CAAC,KAAe,EAAA,GAAA,EAAa,eAAuB,CAA8B,KAAA;AAC5G,EAAA,MAAM,SAAS,EAAC,CAAA;AAChB,EAAS,KAAA,IAAA,CAAA,GAAI,OAAO,YAAe,GAAA,CAAA,GAAI,KAAK,GAAM,GAAA,CAAA,GAAI,YAAc,EAAA,CAAA,IAAK,YAAc,EAAA;AACnF,IAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,CAAG,EAAA,CAAC,IAAI,CAAA,CAAA;AAAA,GAChC;AACA,EAAO,OAAA,MAAA,CAAA;AACX;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hh.ru/magritte-ui-picker-wheel",
3
- "version": "2.1.114",
3
+ "version": "2.1.116",
4
4
  "main": "index.js",
5
5
  "types": "index.d.ts",
6
6
  "sideEffects": [
@@ -19,12 +19,12 @@
19
19
  "watch": "yarn root:watch $(pwd)"
20
20
  },
21
21
  "dependencies": {
22
- "@hh.ru/magritte-design-tokens": "25.1.1",
22
+ "@hh.ru/magritte-design-tokens": "26.0.1",
23
23
  "@hh.ru/magritte-internal-custom-scroll": "2.1.2",
24
24
  "@hh.ru/magritte-types": "5.0.8",
25
- "@hh.ru/magritte-ui-bottom-sheet": "9.4.47",
25
+ "@hh.ru/magritte-ui-bottom-sheet": "9.4.49",
26
26
  "@hh.ru/magritte-ui-breakpoint": "6.1.2",
27
- "@hh.ru/magritte-ui-typography": "5.3.14"
27
+ "@hh.ru/magritte-ui-typography": "5.3.16"
28
28
  },
29
29
  "peerDependencies": {
30
30
  "classnames": ">=2.3.2",
@@ -33,5 +33,5 @@
33
33
  "publishConfig": {
34
34
  "access": "public"
35
35
  },
36
- "gitHead": "46d606980abbb523a41afba452c0a852ee902864"
36
+ "gitHead": "f6539d7a0e7cd42dd851458db1de04a748bbee03"
37
37
  }