@hh.ru/magritte-ui-bottom-sheet 5.5.6 → 5.5.8
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/BottomSheet.js +97 -52
- package/BottomSheet.js.map +1 -1
- package/BottomSheetFooter.js +1 -1
- package/bottom-sheet-DzLpRO8F.js +5 -0
- package/bottom-sheet-DzLpRO8F.js.map +1 -0
- package/index.css +32 -32
- package/index.js +1 -1
- package/package.json +4 -4
- package/bottom-sheet-DP0QAW6i.js +0 -5
- package/bottom-sheet-DP0QAW6i.js.map +0 -1
package/BottomSheet.js
CHANGED
|
@@ -18,7 +18,7 @@ import { Divider } from '@hh.ru/magritte-ui-divider';
|
|
|
18
18
|
import { Layer } from '@hh.ru/magritte-ui-layer';
|
|
19
19
|
import { isNavigationBarComponent, NavigationBarComponent } from '@hh.ru/magritte-ui-navigation-bar';
|
|
20
20
|
import { isValidTreeSelectorWrapper } from '@hh.ru/magritte-ui-tree-selector';
|
|
21
|
-
import { s as styles } from './bottom-sheet-
|
|
21
|
+
import { s as styles } from './bottom-sheet-DzLpRO8F.js';
|
|
22
22
|
|
|
23
23
|
const CSS_VAR_ENTER_ANIMATION_DURATION = '--enter-animation-duration';
|
|
24
24
|
const CSS_VAR_EXIT_ANIMATION_DURATION = '--exit-animation-duration';
|
|
@@ -53,6 +53,7 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
|
|
|
53
53
|
const contentOverlayRef = useRef(null);
|
|
54
54
|
const cssVariablesContainerRef = useRef(null);
|
|
55
55
|
const dividerRef = useRef(null);
|
|
56
|
+
const focusedElementRef = useRef(null);
|
|
56
57
|
const footerRef = useRef(null);
|
|
57
58
|
const grabberRef = useRef(null);
|
|
58
59
|
const headerRef = useRef(null);
|
|
@@ -82,31 +83,52 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
|
|
|
82
83
|
const LayoutMetrics = useRef((() => {
|
|
83
84
|
let cache = {};
|
|
84
85
|
return {
|
|
85
|
-
get availableScrollHeight() {
|
|
86
|
-
if (!('availableScrollHeight' in cache) && scrollContainerRef.current !== null) {
|
|
87
|
-
cache.availableScrollHeight =
|
|
88
|
-
scrollContainerRef.current.clientHeight - LayoutMetrics.current.headerHeight;
|
|
89
|
-
}
|
|
90
|
-
return cache.availableScrollHeight ?? 0;
|
|
91
|
-
},
|
|
92
86
|
get bottomSheetHeight() {
|
|
93
87
|
if (!('bottomSheetHeight' in cache) && visualContainerRef.current !== null) {
|
|
94
88
|
cache.bottomSheetHeight = visualContainerRef.current.clientHeight;
|
|
95
89
|
}
|
|
96
90
|
return cache.bottomSheetHeight ?? 0;
|
|
97
91
|
},
|
|
92
|
+
/**
|
|
93
|
+
* Высота контента
|
|
94
|
+
* Может превышать высоту контейнера из-за скролла
|
|
95
|
+
*/
|
|
98
96
|
get contentHeight() {
|
|
99
97
|
if (!('contentHeight' in cache) && contentRef.current !== null) {
|
|
100
98
|
cache.contentHeight = contentRef.current.clientHeight;
|
|
101
99
|
}
|
|
102
100
|
return cache.contentHeight ?? 0;
|
|
103
101
|
},
|
|
102
|
+
/**
|
|
103
|
+
* Высота видимой части контента
|
|
104
|
+
*/
|
|
105
|
+
get visibleContentHeight() {
|
|
106
|
+
if (!('visibleContentHeight' in cache) && scrollContainerRef.current !== null) {
|
|
107
|
+
const layoutHeaderHeight = headerRef.current?.layoutHeight ?? 0;
|
|
108
|
+
cache.visibleContentHeight = scrollContainerRef.current.clientHeight - layoutHeaderHeight;
|
|
109
|
+
}
|
|
110
|
+
return cache.visibleContentHeight ?? 0;
|
|
111
|
+
},
|
|
112
|
+
/**
|
|
113
|
+
* Положение верхнего края видимой части контента относительно вьюпорта
|
|
114
|
+
*/
|
|
115
|
+
get contentTop() {
|
|
116
|
+
if (!('contentTop' in cache) && visualContainerRef.current !== null) {
|
|
117
|
+
const visibleHeaderHeight = headerRef.current?.visibleHeight ?? 0;
|
|
118
|
+
cache.contentTop = visualContainerRef.current.offsetTop + visibleHeaderHeight;
|
|
119
|
+
}
|
|
120
|
+
return cache.contentTop ?? 0;
|
|
121
|
+
},
|
|
104
122
|
get footerHeight() {
|
|
105
123
|
if (!('footerHeight' in cache) && footerRef.current !== null) {
|
|
106
124
|
cache.footerHeight = footerRef.current.clientHeight;
|
|
107
125
|
}
|
|
108
126
|
return cache.footerHeight ?? 0;
|
|
109
127
|
},
|
|
128
|
+
/**
|
|
129
|
+
* Фактическая высота, которую NavigationBar занимает в боттомшите
|
|
130
|
+
* Может отличаться от видимой высоты NavigationBar
|
|
131
|
+
*/
|
|
110
132
|
get headerHeight() {
|
|
111
133
|
if (!('headerHeight' in cache) && headerRef.current !== null) {
|
|
112
134
|
cache.headerHeight = headerRef.current.layoutHeight;
|
|
@@ -128,6 +150,9 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
|
|
|
128
150
|
}
|
|
129
151
|
return cache.initialOffset ?? 0;
|
|
130
152
|
},
|
|
153
|
+
/**
|
|
154
|
+
* Расстояние между верхним краем боттомшита и границей вьюпорта
|
|
155
|
+
*/
|
|
131
156
|
get remainingAvailableHeight() {
|
|
132
157
|
if (!('remainingAvailableHeight' in cache) && grabberRef.current !== null) {
|
|
133
158
|
cache.remainingAvailableHeight = grabberRef.current.offsetTop;
|
|
@@ -189,10 +214,10 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
|
|
|
189
214
|
meta.setAttribute('content', attributesStrUpdated);
|
|
190
215
|
}, [currentVisible, keyboardOverlaysContent]);
|
|
191
216
|
const recalcKeyboardOffsets = useCallback(() => {
|
|
192
|
-
if (!
|
|
217
|
+
if (!overlayRef.current || !visualViewport) {
|
|
193
218
|
return;
|
|
194
219
|
}
|
|
195
|
-
if (stateRef.current.hasFocus) {
|
|
220
|
+
if (stateRef.current.hasFocus && focusedElementRef.current !== null) {
|
|
196
221
|
// терминология: https://developer.chrome.com/blog/viewport-resize-behavior/
|
|
197
222
|
//
|
|
198
223
|
// делим браузеры на три группы в зависимости от поведения при открытии виртуальной клавиатуры:
|
|
@@ -218,15 +243,18 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
|
|
|
218
243
|
if (keyboardOverlaysContent) {
|
|
219
244
|
// браузеры из этой группы меняют Layout Viewport
|
|
220
245
|
const layoutViewportDiff = Math.round(DOCUMENT_HEIGHT.current - document.documentElement.clientHeight);
|
|
246
|
+
setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET, `${visualViewportShift}px`);
|
|
221
247
|
if (layoutViewportDiff > 0) {
|
|
222
248
|
setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET, `${visualViewportShift}px`);
|
|
223
249
|
// сдвигаем НИЖНИЙ край контейнера ВНИЗ, чтобы футер уехал под клавиатуру
|
|
224
250
|
setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET, `${-layoutViewportDiff}px`);
|
|
225
|
-
// при этом может возникнуть проблема, что клавиатура перекрыла
|
|
251
|
+
// при этом может возникнуть проблема, что клавиатура перекрыла инпут
|
|
226
252
|
// проверяем это и компенсируем величину перекрытия при необходимости
|
|
227
|
-
const
|
|
228
|
-
|
|
229
|
-
|
|
253
|
+
const focusedElementOutOfViewportHeight = Math.round(focusedElementRef.current.getBoundingClientRect().bottom +
|
|
254
|
+
layoutViewportDiff -
|
|
255
|
+
DOCUMENT_HEIGHT.current);
|
|
256
|
+
if (focusedElementOutOfViewportHeight > 0) {
|
|
257
|
+
setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET, `${focusedElementOutOfViewportHeight - layoutViewportDiff}px`);
|
|
230
258
|
}
|
|
231
259
|
}
|
|
232
260
|
}
|
|
@@ -234,8 +262,8 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
|
|
|
234
262
|
// этот кейс нужно корректировать только в Safari
|
|
235
263
|
if (!keyboardOverlaysContent && deviceFlagsRef.current.isSafari) {
|
|
236
264
|
const visualViewportDiff = Math.round(overlayDOMRect.bottom - visualViewport.height);
|
|
265
|
+
setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET, `${visualViewportShift}px`);
|
|
237
266
|
if (visualViewportDiff > 0) {
|
|
238
|
-
setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET, `${visualViewportShift}px`);
|
|
239
267
|
// сдвигаем НИЖНИЙ край контейнера ВВЕРХ, чтобы он совпал с границей Visual Viewport
|
|
240
268
|
setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET, `${visualViewportDiff}px`);
|
|
241
269
|
}
|
|
@@ -250,7 +278,8 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
|
|
|
250
278
|
const focusedElement = event.target;
|
|
251
279
|
const initialViewportHeight = visualViewport?.height;
|
|
252
280
|
const resizeRAFStart = performance.now();
|
|
253
|
-
if (!(focusedElement instanceof HTMLInputElement
|
|
281
|
+
if (!(focusedElement instanceof HTMLInputElement || focusedElement instanceof HTMLTextAreaElement) ||
|
|
282
|
+
stateRef.current.resizeRAFHandle !== null) {
|
|
254
283
|
return;
|
|
255
284
|
}
|
|
256
285
|
const handleResize = () => {
|
|
@@ -286,11 +315,13 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
|
|
|
286
315
|
stateRef.current.resizeRAFHandle = null;
|
|
287
316
|
}
|
|
288
317
|
focusedElement.removeEventListener('blur', handleBlur);
|
|
318
|
+
focusedElementRef.current = null;
|
|
289
319
|
};
|
|
290
320
|
stateRef.current.hasFocus = true;
|
|
291
321
|
stateRef.current.resizeRAFHandle = requestAnimationFrame(waitForResize);
|
|
292
322
|
visualViewport?.addEventListener('resize', handleResize);
|
|
293
323
|
focusedElement.addEventListener('blur', handleBlur);
|
|
324
|
+
focusedElementRef.current = focusedElement;
|
|
294
325
|
}, [recalcKeyboardOffsets]);
|
|
295
326
|
// contentOverlay совпадает по границам с контентом боттомшита, но лежит вне боттомшита,
|
|
296
327
|
// чтобы чайлды contentOverlay не обрезались границами боттомшита
|
|
@@ -300,9 +331,8 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
|
|
|
300
331
|
if (contentOverlayRef.current !== null &&
|
|
301
332
|
scrollContainerRef.current !== null &&
|
|
302
333
|
visualContainerRef.current !== null) {
|
|
303
|
-
|
|
304
|
-
contentOverlayRef.current.style.
|
|
305
|
-
contentOverlayRef.current.style.height = `${LayoutMetrics.current.availableScrollHeight}px`;
|
|
334
|
+
contentOverlayRef.current.style.top = `${LayoutMetrics.current.contentTop}px`;
|
|
335
|
+
contentOverlayRef.current.style.height = `${LayoutMetrics.current.visibleContentHeight}px`;
|
|
306
336
|
}
|
|
307
337
|
}, []);
|
|
308
338
|
const recalcScrollFlags = useCallback(() => {
|
|
@@ -311,7 +341,7 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
|
|
|
311
341
|
: -(scrollContainerRef.current?.scrollTop ?? 0);
|
|
312
342
|
if (dividerRef.current !== null) {
|
|
313
343
|
const prevDividerVisible = stateRef.current.dividerVisible;
|
|
314
|
-
const isNotScrolledToEnd = LayoutMetrics.current.contentHeight + scrollOffset > LayoutMetrics.current.
|
|
344
|
+
const isNotScrolledToEnd = LayoutMetrics.current.contentHeight + scrollOffset > LayoutMetrics.current.visibleContentHeight;
|
|
315
345
|
stateRef.current.dividerVisible =
|
|
316
346
|
showDivider === 'always' || (showDivider === 'with-scroll' && isNotScrolledToEnd);
|
|
317
347
|
if (stateRef.current.dividerVisible !== prevDividerVisible) {
|
|
@@ -328,14 +358,6 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
|
|
|
328
358
|
}
|
|
329
359
|
}
|
|
330
360
|
}, [showDivider]);
|
|
331
|
-
const resetScrollPosition = useCallback(() => {
|
|
332
|
-
if (deviceFlagsRef.current.useCustomScroll) {
|
|
333
|
-
scrollContextProviderRef.current?.notify({ scrollTop: 0 });
|
|
334
|
-
}
|
|
335
|
-
else {
|
|
336
|
-
scrollContainerRef.current?.scrollTo({ top: 0 });
|
|
337
|
-
}
|
|
338
|
-
}, []);
|
|
339
361
|
// помещает боттомшит в позицию вне экрана снизу, которая может быть начальной либо конечной точкой анимации
|
|
340
362
|
const setTransformToInvisible = useCallback(() => {
|
|
341
363
|
LayoutMetrics.current.invalidateCache();
|
|
@@ -363,8 +385,7 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
|
|
|
363
385
|
}
|
|
364
386
|
requestAnimationFrame(recalcContentOverlayPosition);
|
|
365
387
|
requestAnimationFrame(recalcScrollFlags);
|
|
366
|
-
|
|
367
|
-
}, [recalcContentOverlayPosition, recalcScrollFlags, resetScrollPosition]);
|
|
388
|
+
}, [recalcContentOverlayPosition, recalcScrollFlags]);
|
|
368
389
|
const handleExitAnimationStart = useCallback(() => {
|
|
369
390
|
setTransformToVisible();
|
|
370
391
|
onBeforeExit?.();
|
|
@@ -378,16 +399,23 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
|
|
|
378
399
|
stateRef.current.exitHandlers = [];
|
|
379
400
|
onAfterExit?.();
|
|
380
401
|
}, [onAfterExit]);
|
|
381
|
-
const
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
402
|
+
const resetScrollPosition = useCallback(() => {
|
|
403
|
+
if (deviceFlagsRef.current.useCustomScroll) {
|
|
404
|
+
stateRef.current.scrollOffset = LayoutMetrics.current.initialOffset;
|
|
405
|
+
stateRef.current.swipeOffset = 0;
|
|
406
|
+
if (contentRef.current !== null) {
|
|
407
|
+
contentRef.current.style.transform = translateY(0);
|
|
408
|
+
}
|
|
409
|
+
if (swipeContainerRef.current !== null) {
|
|
410
|
+
swipeContainerRef.current.style.transform = translateY(LayoutMetrics.current.initialOffset);
|
|
411
|
+
}
|
|
387
412
|
}
|
|
388
|
-
|
|
389
|
-
|
|
413
|
+
else {
|
|
414
|
+
scrollContainerRef.current?.scrollTo({ top: 0 });
|
|
390
415
|
}
|
|
416
|
+
}, []);
|
|
417
|
+
const handleHeightAnimationStart = useCallback(() => {
|
|
418
|
+
LayoutMetrics.current.invalidateCache();
|
|
391
419
|
if (stateRef.current.heightAnimationDiff !== null && visualContainerRef.current !== null) {
|
|
392
420
|
visualContainerRef.current.style.height = `${LayoutMetrics.current.bottomSheetHeight + stateRef.current.heightAnimationDiff}px`;
|
|
393
421
|
}
|
|
@@ -403,8 +431,8 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
|
|
|
403
431
|
setHeightAnimationRunning(false);
|
|
404
432
|
requestAnimationFrame(recalcContentOverlayPosition);
|
|
405
433
|
requestAnimationFrame(recalcScrollFlags);
|
|
406
|
-
|
|
407
|
-
}, [setHeightAnimationRunning, recalcContentOverlayPosition, recalcScrollFlags
|
|
434
|
+
scrollContextProviderRef.current?.notify({ scrollTop: 0 });
|
|
435
|
+
}, [setHeightAnimationRunning, recalcContentOverlayPosition, recalcScrollFlags]);
|
|
408
436
|
const handleSwipeMove = useCallback((event) => {
|
|
409
437
|
if ((stateRef.current.touchAction !== null && stateRef.current.touchAction !== 'swipe') ||
|
|
410
438
|
hasSelectedText()) {
|
|
@@ -462,7 +490,7 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
|
|
|
462
490
|
}
|
|
463
491
|
const handleScroll = (delta) => {
|
|
464
492
|
if (LayoutMetrics.current.initialOffset !== 0 ||
|
|
465
|
-
LayoutMetrics.current.contentHeight > LayoutMetrics.current.
|
|
493
|
+
LayoutMetrics.current.contentHeight > LayoutMetrics.current.visibleContentHeight) {
|
|
466
494
|
// храним неокругленное значение для translateY, чтобы анимация была плавнее
|
|
467
495
|
let newScrollOffset = stateRef.current.scrollOffset + delta;
|
|
468
496
|
const roundedNewScrollOffset = Math.round(newScrollOffset);
|
|
@@ -475,10 +503,10 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
|
|
|
475
503
|
}
|
|
476
504
|
}
|
|
477
505
|
else if (LayoutMetrics.current.contentHeight + roundedNewScrollOffset <=
|
|
478
|
-
LayoutMetrics.current.
|
|
506
|
+
LayoutMetrics.current.visibleContentHeight) {
|
|
479
507
|
// скролла нет (touchAction is null)
|
|
480
508
|
// либо контент проскроллен до конца, тогда не даем скроллить дальше
|
|
481
|
-
newScrollOffset = LayoutMetrics.current.
|
|
509
|
+
newScrollOffset = LayoutMetrics.current.visibleContentHeight - LayoutMetrics.current.contentHeight;
|
|
482
510
|
if (stateRef.current.touchAction === 'scroll') {
|
|
483
511
|
stateRef.current.touchAction = 'complete';
|
|
484
512
|
}
|
|
@@ -517,15 +545,20 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
|
|
|
517
545
|
}
|
|
518
546
|
}
|
|
519
547
|
};
|
|
548
|
+
let focusedElementTouchY = null;
|
|
520
549
|
const onTouchMove = (event) => {
|
|
521
550
|
if ((!allowScrollWhileFocused && stateRef.current.hasFocus) ||
|
|
522
551
|
(stateRef.current.touchAction !== null && stateRef.current.touchAction !== 'scroll') ||
|
|
523
|
-
hasSelectedText()
|
|
552
|
+
hasSelectedText() ||
|
|
553
|
+
(focusedElementRef.current !== null && focusedElementTouchY !== null)) {
|
|
524
554
|
return;
|
|
525
555
|
}
|
|
526
556
|
handleScroll(event.delta);
|
|
527
557
|
};
|
|
528
558
|
const onTouchEnd = () => {
|
|
559
|
+
if (focusedElementTouchY !== null) {
|
|
560
|
+
focusedElementTouchY = null;
|
|
561
|
+
}
|
|
529
562
|
if (stateRef.current.touchAction === 'scroll') {
|
|
530
563
|
stateRef.current.touchAction = null;
|
|
531
564
|
}
|
|
@@ -534,12 +567,24 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
|
|
|
534
567
|
if (stateRef.current.touchAction === 'complete') {
|
|
535
568
|
stateRef.current.touchAction = null;
|
|
536
569
|
}
|
|
537
|
-
|
|
570
|
+
if (event.target === focusedElementRef.current && focusedElementRef.current !== null) {
|
|
571
|
+
focusedElementTouchY = event.changedTouches[0].pageY;
|
|
572
|
+
}
|
|
573
|
+
else {
|
|
574
|
+
focusedElementTouchY = null;
|
|
575
|
+
swipeHandlers.onTouchStart(event);
|
|
576
|
+
}
|
|
538
577
|
};
|
|
539
578
|
const handleTouchMove = (event) => {
|
|
540
579
|
event.preventDefault();
|
|
541
580
|
event.stopPropagation();
|
|
542
|
-
|
|
581
|
+
if (focusedElementRef.current !== null && focusedElementTouchY !== null) {
|
|
582
|
+
focusedElementRef.current.scrollTop += focusedElementTouchY - event.changedTouches[0].pageY;
|
|
583
|
+
focusedElementTouchY = event.changedTouches[0].pageY;
|
|
584
|
+
}
|
|
585
|
+
else {
|
|
586
|
+
swipeHandlers.onTouchMove(event);
|
|
587
|
+
}
|
|
543
588
|
};
|
|
544
589
|
const removeScrollHandlers = initScrollHandlers({
|
|
545
590
|
axis: 'vertical',
|
|
@@ -570,7 +615,7 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
|
|
|
570
615
|
let prevContentHeight = 0;
|
|
571
616
|
let prevHeaderHeight = 0;
|
|
572
617
|
let prevFooterHeight = 0;
|
|
573
|
-
let
|
|
618
|
+
let prevVisibleContentHeight = 0;
|
|
574
619
|
let skipFirstResizeCallback = true;
|
|
575
620
|
let collapseResizeCallbacks = false;
|
|
576
621
|
const handleHeightChange = () => {
|
|
@@ -580,7 +625,7 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
|
|
|
580
625
|
prevHeaderHeight = LayoutMetrics.current.headerHeight;
|
|
581
626
|
prevContentHeight = LayoutMetrics.current.contentHeight;
|
|
582
627
|
prevFooterHeight = LayoutMetrics.current.footerHeight;
|
|
583
|
-
|
|
628
|
+
prevVisibleContentHeight = LayoutMetrics.current.visibleContentHeight;
|
|
584
629
|
skipFirstResizeCallback = false;
|
|
585
630
|
return;
|
|
586
631
|
}
|
|
@@ -598,9 +643,9 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
|
|
|
598
643
|
prevFooterHeight;
|
|
599
644
|
// предположим, что scrollContainer останется таким же или станет меньше
|
|
600
645
|
// тогда можем рассчитать минимальную видимую высоту контента как min(scrollContainer.height, contentHeight)
|
|
601
|
-
const
|
|
602
|
-
const newMinVisibleContentHeight = Math.min(
|
|
603
|
-
const minVisibleContentHeightDiff = newMinVisibleContentHeight -
|
|
646
|
+
const _prevVisibleContentHeight = Math.min(prevVisibleContentHeight, prevContentHeight);
|
|
647
|
+
const newMinVisibleContentHeight = Math.min(prevVisibleContentHeight - containersHeightDiff, LayoutMetrics.current.contentHeight);
|
|
648
|
+
const minVisibleContentHeightDiff = newMinVisibleContentHeight - _prevVisibleContentHeight;
|
|
604
649
|
// предположим, что scrollContainer станет больше
|
|
605
650
|
// тогда контент не может увеличиться больше, чем на расстояние между боттомшитом и верхним краем экрана
|
|
606
651
|
const maxVisibleContentHeightDiff = LayoutMetrics.current.remainingAvailableHeight - containersHeightDiff;
|
|
@@ -615,7 +660,7 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
|
|
|
615
660
|
// но в инлайн-стилях боттомшита остается старая высота
|
|
616
661
|
stateRef.current.heightAnimationDiff = heightAnimationDiff;
|
|
617
662
|
stateRef.current.heightAnimationCallback = () => {
|
|
618
|
-
|
|
663
|
+
prevVisibleContentHeight = LayoutMetrics.current.visibleContentHeight;
|
|
619
664
|
};
|
|
620
665
|
setHeightAnimationRunning(true);
|
|
621
666
|
collapseResizeCallbacks = true;
|
package/BottomSheet.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BottomSheet.js","sources":["../src/BottomSheet.tsx"],"sourcesContent":["import {\n FocusEventHandler,\n ForwardRefRenderFunction,\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n cloneElement,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { Transition, TransitionStatus } from 'react-transition-group';\nimport classnames from 'classnames';\n\nimport { disableOverscroll, disableScroll } from '@hh.ru/magritte-common-modal-helper';\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport { useNoBubbling } from '@hh.ru/magritte-common-use-no-bubbling';\nimport { useSwipeHandlers, SwipeEventHandler } from '@hh.ru/magritte-common-use-swipe';\nimport {\n ScrollGestureEvent,\n CustomScrollContextNotifier,\n CustomScrollContextProvider,\n initScrollHandlers,\n} from '@hh.ru/magritte-internal-custom-scroll';\nimport { InternalLayerName } from '@hh.ru/magritte-internal-layer-name';\nimport { isActionBarComponent } from '@hh.ru/magritte-ui-action-bar';\nimport { BottomSheetContext } from '@hh.ru/magritte-ui-bottom-sheet/BottomSheetContext';\nimport { ClickInterceptor } from '@hh.ru/magritte-ui-bottom-sheet/ClickInterceptor';\nimport { BottomSheetProps } from '@hh.ru/magritte-ui-bottom-sheet/types';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { Divider } from '@hh.ru/magritte-ui-divider';\nimport { Layer } from '@hh.ru/magritte-ui-layer';\nimport {\n NavigationBarComponent,\n NavigationBarComponentRef,\n isNavigationBarComponent,\n} from '@hh.ru/magritte-ui-navigation-bar';\nimport { isValidTreeSelectorWrapper } from '@hh.ru/magritte-ui-tree-selector';\n\nimport styles from './bottom-sheet.less';\n\nconst CSS_VAR_ENTER_ANIMATION_DURATION = '--enter-animation-duration';\nconst CSS_VAR_EXIT_ANIMATION_DURATION = '--exit-animation-duration';\nconst CSS_VAR_HEIGHT_ANIMATION_DURATION = '--height-transition-duration';\nconst CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET = '--virtual-keyboard-top-offset';\nconst CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET = '--virtual-keyboard-bottom-offset';\n\nconst hasSelectedText = () => {\n const selection = document.getSelection();\n return !!selection && !selection.isCollapsed;\n};\n\nconst isSafari = () => /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\nconst toNumber = (value: string) => {\n const result = parseInt(value, 10);\n return Number.isInteger(result) ? result : 0;\n};\n\nconst translateY = (value: number) => `translate3d(0, ${value}px, 0)`;\n\ntype AnimationTimeout = { [AnimationType in 'appear' | 'height']: { [AnimationStage in 'enter' | 'exit']: number } };\n\ntype State = {\n dividerVisible: boolean;\n // если боттомшит упирается в верхний край экрана, челка может перекрыть граббер и его нужно переместить в safe area\n grabberUnsafe: boolean;\n hasFocus: boolean;\n resizeRAFHandle: ReturnType<typeof requestAnimationFrame> | null;\n // translateY для эмуляции скролла, отрицательный либо меньше LayoutMetrics.current.initialOffset\n scrollOffset: number;\n // translateY для эмуляции свайпа, всегда положительный либо 0\n swipeOffset: number;\n // текущее действие, инициированное пользователем\n touchAction:\n | null // может быть начато любое действие\n | 'complete' // палец приложен, но действие завершено — не реагируем на тач, пока пользователь не отпустит палец\n | 'scroll' // палец приложен, скроллим контент внутри боттомшита\n | 'swipe'; // палец приложен, свайпаем весь боттомшит вниз, чтобы закрыть его, или вверх, чтобы отменить свайп\n exitHandlers: Array<VoidFunction>;\n // число, на которое нужно анимировать изменение высоты контента боттомшита\n heightAnimationDiff: number | null;\n heightAnimationCallback?: VoidFunction | null;\n};\n\nconst INITIAL_STATE: State = {\n dividerVisible: false,\n grabberUnsafe: false,\n hasFocus: false,\n resizeRAFHandle: null,\n scrollOffset: 0,\n swipeOffset: 0,\n touchAction: null,\n exitHandlers: [],\n heightAnimationDiff: null,\n};\n\ntype DeviceFlags = {\n isSafari?: boolean;\n useCustomScroll?: boolean;\n};\n\nconst BottomSheetRenderFunc: ForwardRefRenderFunction<HTMLElement, BottomSheetProps> = (\n {\n allowScrollWhileFocused,\n children,\n footer,\n header,\n height = 'content',\n interceptClickHandlers = true,\n keyboardOverlaysContent = true,\n onAppear,\n onBeforeExit,\n onAfterExit,\n onClose,\n showDivider = 'with-scroll',\n showOverlay = true,\n visible = false,\n withContentPaddings = true,\n },\n ref\n) => {\n const DOCUMENT_HEIGHT = useRef(0);\n const SWIPE_THRESHOLD = useRef({ max: Infinity });\n\n const contentRef = useRef<HTMLDivElement>(null);\n const contentOverlayRef = useRef<HTMLDivElement>(null);\n const cssVariablesContainerRef = useRef<HTMLDivElement>(null);\n const dividerRef = useRef<HTMLDivElement>(null);\n const footerRef = useRef<HTMLDivElement>(null);\n const grabberRef = useRef<HTMLDivElement>(null);\n const headerRef = useRef<NavigationBarComponentRef>(null);\n const overlayRef = useRef<HTMLDivElement>(null);\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const swipeContainerRef = useRef<HTMLDivElement>(null);\n const visualContainerRef = useRef<HTMLDivElement>(null);\n const bottomSheetRef = useMultipleRefs(ref, visualContainerRef);\n const scrollContextProviderRef = useRef<CustomScrollContextNotifier>(null);\n\n const currentVisible = useBreakpoint().isMobile && visible;\n const onAppearRef = useRef(onAppear);\n onAppearRef.current = onAppear;\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n const stateRef = useRef<State>({ ...INITIAL_STATE });\n const [animationTimeout, setAnimationTimeout] = useState<AnimationTimeout | null>(null);\n const [heightAnimationRunning, setHeightAnimationRunning] = useState(false);\n const bottomSheetContext = useMemo(() => ({ contentOverlayRef }), [contentOverlayRef]);\n const isContentSizedFullHeight = isValidTreeSelectorWrapper(children);\n const deviceFlagsRef = useRef<DeviceFlags>({});\n if (typeof deviceFlagsRef.current.isSafari !== 'boolean' && typeof navigator !== 'undefined') {\n deviceFlagsRef.current.isSafari = isSafari();\n }\n if (typeof deviceFlagsRef.current.useCustomScroll !== 'boolean' && typeof window !== 'undefined') {\n deviceFlagsRef.current.useCustomScroll = 'ontouchstart' in window;\n }\n\n const LayoutMetrics = useRef(\n (() => {\n let cache: Record<string, number> = {};\n return {\n get availableScrollHeight() {\n if (!('availableScrollHeight' in cache) && scrollContainerRef.current !== null) {\n cache.availableScrollHeight =\n scrollContainerRef.current.clientHeight - LayoutMetrics.current.headerHeight;\n }\n return cache.availableScrollHeight ?? 0;\n },\n get bottomSheetHeight() {\n if (!('bottomSheetHeight' in cache) && visualContainerRef.current !== null) {\n cache.bottomSheetHeight = visualContainerRef.current.clientHeight;\n }\n return cache.bottomSheetHeight ?? 0;\n },\n get contentHeight() {\n if (!('contentHeight' in cache) && contentRef.current !== null) {\n cache.contentHeight = contentRef.current.clientHeight;\n }\n return cache.contentHeight ?? 0;\n },\n get footerHeight() {\n if (!('footerHeight' in cache) && footerRef.current !== null) {\n cache.footerHeight = footerRef.current.clientHeight;\n }\n return cache.footerHeight ?? 0;\n },\n get headerHeight() {\n if (!('headerHeight' in cache) && headerRef.current !== null) {\n cache.headerHeight = headerRef.current.layoutHeight;\n }\n return cache.headerHeight ?? 0;\n },\n get initialOffset() {\n if (!('initialOffset' in cache)) {\n if (\n height === 'half-screen' &&\n deviceFlagsRef.current.useCustomScroll &&\n visualContainerRef.current !== null &&\n visualViewport !== null\n ) {\n const halfScreenOffset =\n visualContainerRef.current.clientHeight - visualViewport.height / 2;\n cache.initialOffset = Math.max(Math.round(halfScreenOffset), 0);\n } else {\n cache.initialOffset = 0;\n }\n }\n return cache.initialOffset ?? 0;\n },\n get remainingAvailableHeight() {\n if (!('remainingAvailableHeight' in cache) && grabberRef.current !== null) {\n cache.remainingAvailableHeight = grabberRef.current.offsetTop;\n }\n return cache.remainingAvailableHeight ?? 0;\n },\n invalidateCache() {\n cache = {};\n },\n };\n })()\n );\n\n const setCSSVariable = (name: string, value: string) =>\n cssVariablesContainerRef.current !== null && cssVariablesContainerRef.current.style.setProperty(name, value);\n\n useEffect(() => {\n if (!currentVisible) {\n return void 0;\n }\n\n DOCUMENT_HEIGHT.current = document.documentElement.clientHeight;\n if (visualViewport !== null) {\n SWIPE_THRESHOLD.current = { max: Math.round(visualViewport.height * 0.8) };\n }\n\n if (!showOverlay) {\n const enableOverscroll = disableOverscroll();\n return enableOverscroll;\n }\n\n const enableScroll = disableScroll();\n return enableScroll;\n }, [currentVisible, showOverlay]);\n\n useEffect(() => {\n const animationTimeoutElement = document.createElement('div');\n animationTimeoutElement.classList.add(styles.animationTimeout);\n document.body.appendChild(animationTimeoutElement);\n const style = window.getComputedStyle(animationTimeoutElement);\n const enter = toNumber(style.getPropertyValue(CSS_VAR_ENTER_ANIMATION_DURATION));\n const exit = toNumber(style.getPropertyValue(CSS_VAR_EXIT_ANIMATION_DURATION));\n const height = toNumber(style.getPropertyValue(CSS_VAR_HEIGHT_ANIMATION_DURATION));\n document.body.removeChild(animationTimeoutElement);\n setAnimationTimeout({ appear: { enter, exit }, height: { enter: height, exit } });\n }, [setAnimationTimeout]);\n\n useEffect(() => {\n if (!currentVisible || deviceFlagsRef.current.isSafari) {\n return;\n }\n\n // используем Virtual Keyboard API через meta-тег вместо navigator.virtualKeyboard,\n // потому что второй способ работает только на страницах, открытых через HTTPS, что мешает тестированию\n let meta = document.querySelector('meta[name=\"viewport\"]');\n if (!meta) {\n meta = document.createElement('meta');\n meta.setAttribute('name', 'viewport');\n document.head.appendChild(meta);\n }\n const attributesStr = meta.getAttribute('content');\n const attributes = (\n attributesStr !== null\n ? Object.fromEntries(attributesStr.split(',').map((keyValuePairStr) => keyValuePairStr.split('=')))\n : {}\n ) as Record<string, string>;\n attributes['interactive-widget'] = keyboardOverlaysContent ? 'resizes-visual' : 'resizes-content';\n const attributesStrUpdated = Object.entries(attributes)\n .map((keyValuePair) => keyValuePair.join('='))\n .join(',');\n meta.setAttribute('content', attributesStrUpdated);\n }, [currentVisible, keyboardOverlaysContent]);\n\n const recalcKeyboardOffsets = useCallback(() => {\n if (!headerRef.current || !overlayRef.current || !visualViewport) {\n return;\n }\n\n if (stateRef.current.hasFocus) {\n // терминология: https://developer.chrome.com/blog/viewport-resize-behavior/\n //\n // делим браузеры на три группы в зависимости от поведения при открытии виртуальной клавиатуры:\n // 1. Safari — ресайзит Visual Viewport, не меняет Layout Viewport.\n // В нем не нужно ничего корректировать при keyboardOverlaysContent=true,\n // а при keyboardOverlaysContent=false нужно сдвинуть НИЖНИЙ край контейнера ВВЕРХ,\n // чтобы он совпал с границей Visual Viewport\n // 2. Chrome < 108 & Chromium-based — ресайзит и Visual Viewport, и Layout Viewport.\n // В нем не нужно ничего корректировать при keyboardOverlaysContent=false,\n // а при keyboardOverlaysContent=true нужно сдвинуть НИЖНИЙ край контейнера ВНИЗ,\n // чтобы футер уехал под клавиатуру\n // 3. Chrome >= 108 — поддерживает Virtual Keyboard API и meta-тег interactive-widget.\n // Используем поведение `resizes-visual` (как в Safari) в случае keyboardOverlaysContent=true\n // и `resizes-content` (как в Chrome < 108 & Chromium-based) в случае keyboardOverlaysContent=false\n // Таким образом в нем ничего не нужно корректировать\n\n const overlayDOMRect = overlayRef.current.getBoundingClientRect();\n\n // любой браузер может сдвинуть Visual Viewport вверх, если фокусируемый инпут находится близко к нижней границе\n // из-за этого может возникнуть проблема, что ВЕРХНИЙ край контента уехал за границу Visual Viewport\n // сдвигаем ВЕРХНИЙ край контейнера ВНИЗ, чтобы он совпал с границей Visual Viewport\n const visualViewportShift = Math.round(-overlayDOMRect.top);\n\n // keyboardOverlaysContent=true, клавиатура ПОВЕРХ контента\n // этот кейс нужно корректировать только в Chrome < 108 & Chromium-based\n if (keyboardOverlaysContent) {\n // браузеры из этой группы меняют Layout Viewport\n const layoutViewportDiff = Math.round(DOCUMENT_HEIGHT.current - document.documentElement.clientHeight);\n if (layoutViewportDiff > 0) {\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET, `${visualViewportShift}px`);\n // сдвигаем НИЖНИЙ край контейнера ВНИЗ, чтобы футер уехал под клавиатуру\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET, `${-layoutViewportDiff}px`);\n\n // при этом может возникнуть проблема, что клавиатура перекрыла хедер\n // проверяем это и компенсируем величину перекрытия при необходимости\n const headerOutOfViewportHeight = Math.round(\n headerRef.current.bottom + layoutViewportDiff - DOCUMENT_HEIGHT.current\n );\n if (headerOutOfViewportHeight > 0) {\n setCSSVariable(\n CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET,\n `${headerOutOfViewportHeight - layoutViewportDiff}px`\n );\n }\n }\n }\n\n // keyboardOverlaysContent=false, клавиатура ПОД контентом\n // этот кейс нужно корректировать только в Safari\n if (!keyboardOverlaysContent && deviceFlagsRef.current.isSafari) {\n const visualViewportDiff = Math.round(overlayDOMRect.bottom - visualViewport.height);\n if (visualViewportDiff > 0) {\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET, `${visualViewportShift}px`);\n // сдвигаем НИЖНИЙ край контейнера ВВЕРХ, чтобы он совпал с границей Visual Viewport\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET, `${visualViewportDiff}px`);\n }\n }\n } else {\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET, `0px`);\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET, `0px`);\n }\n }, [keyboardOverlaysContent]);\n\n const handleFocus: FocusEventHandler = useCallback(\n (event) => {\n const focusedElement = event.target;\n const initialViewportHeight = visualViewport?.height;\n const resizeRAFStart = performance.now();\n\n if (!(focusedElement instanceof HTMLInputElement) || stateRef.current.resizeRAFHandle !== null) {\n return;\n }\n\n const handleResize = () => {\n if (stateRef.current.resizeRAFHandle !== null) {\n cancelAnimationFrame(stateRef.current.resizeRAFHandle);\n stateRef.current.resizeRAFHandle = null;\n }\n\n recalcKeyboardOffsets();\n\n if (!stateRef.current.hasFocus) {\n visualViewport?.removeEventListener('resize', handleResize);\n }\n };\n\n // если спамить фокус/блюр инпута, ивент visualViewport.resize может не долететь\n // поэтому проверяем изменение высоты в рекурсивном RAF\n const waitForResize = () => {\n if (performance.now() - resizeRAFStart > 1000 || visualViewport?.height !== initialViewportHeight) {\n visualViewport?.removeEventListener('resize', handleResize);\n stateRef.current.resizeRAFHandle = null;\n recalcKeyboardOffsets();\n } else {\n stateRef.current.resizeRAFHandle = requestAnimationFrame(waitForResize);\n }\n };\n\n const handleBlur = () => {\n if (deviceFlagsRef.current.isSafari) {\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET, `0px`);\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET, `0px`);\n }\n\n stateRef.current.hasFocus = false;\n if (stateRef.current.resizeRAFHandle !== null) {\n cancelAnimationFrame(stateRef.current.resizeRAFHandle);\n stateRef.current.resizeRAFHandle = null;\n }\n focusedElement.removeEventListener('blur', handleBlur);\n };\n\n stateRef.current.hasFocus = true;\n stateRef.current.resizeRAFHandle = requestAnimationFrame(waitForResize);\n visualViewport?.addEventListener('resize', handleResize);\n focusedElement.addEventListener('blur', handleBlur);\n },\n [recalcKeyboardOffsets]\n );\n\n // contentOverlay совпадает по границам с контентом боттомшита, но лежит вне боттомшита,\n // чтобы чайлды contentOverlay не обрезались границами боттомшита\n // например, снекбар, лежащий внутри contentOverlay, при смахивании может оказаться в любом месте экрана\n // поэтому позицию contentOverlay нужно синхронизировать\n const recalcContentOverlayPosition = useCallback(() => {\n if (\n contentOverlayRef.current !== null &&\n scrollContainerRef.current !== null &&\n visualContainerRef.current !== null\n ) {\n const visibleHeaderHeight = headerRef.current?.visibleHeight ?? 0;\n contentOverlayRef.current.style.top = `${\n scrollContainerRef.current.offsetTop + visualContainerRef.current.offsetTop + visibleHeaderHeight\n }px`;\n contentOverlayRef.current.style.height = `${LayoutMetrics.current.availableScrollHeight}px`;\n }\n }, []);\n\n const recalcScrollFlags = useCallback(() => {\n const scrollOffset = deviceFlagsRef.current.useCustomScroll\n ? stateRef.current.scrollOffset\n : -(scrollContainerRef.current?.scrollTop ?? 0);\n\n if (dividerRef.current !== null) {\n const prevDividerVisible = stateRef.current.dividerVisible;\n const isNotScrolledToEnd =\n LayoutMetrics.current.contentHeight + scrollOffset > LayoutMetrics.current.availableScrollHeight;\n stateRef.current.dividerVisible =\n showDivider === 'always' || (showDivider === 'with-scroll' && isNotScrolledToEnd);\n if (stateRef.current.dividerVisible !== prevDividerVisible) {\n dividerRef.current.classList.toggle(styles.dividerVisible, stateRef.current.dividerVisible);\n }\n }\n\n if (grabberRef.current !== null) {\n const prevGrabberUnsafe = stateRef.current.grabberUnsafe;\n stateRef.current.grabberUnsafe =\n Math.round(Math.max(scrollOffset, 0) + stateRef.current.swipeOffset) ===\n LayoutMetrics.current.remainingAvailableHeight;\n if (stateRef.current.grabberUnsafe !== prevGrabberUnsafe) {\n grabberRef.current.classList.toggle(styles.grabberEnsureSafe, stateRef.current.grabberUnsafe);\n }\n }\n }, [showDivider]);\n\n const resetScrollPosition = useCallback(() => {\n if (deviceFlagsRef.current.useCustomScroll) {\n scrollContextProviderRef.current?.notify({ scrollTop: 0 });\n } else {\n scrollContainerRef.current?.scrollTo({ top: 0 });\n }\n }, []);\n\n // помещает боттомшит в позицию вне экрана снизу, которая может быть начальной либо конечной точкой анимации\n const setTransformToInvisible = useCallback(() => {\n LayoutMetrics.current.invalidateCache();\n\n if (overlayRef.current !== null) {\n overlayRef.current.style.opacity = `0`;\n }\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.style.transform = translateY(LayoutMetrics.current.bottomSheetHeight);\n }\n\n requestAnimationFrame(recalcContentOverlayPosition);\n requestAnimationFrame(recalcScrollFlags);\n }, [recalcContentOverlayPosition, recalcScrollFlags]);\n\n // помещает боттомшит в дефолтную позицию на экране, которая может быть начальной либо конечной точкой анимации\n const setTransformToVisible = useCallback(() => {\n LayoutMetrics.current.invalidateCache();\n\n stateRef.current.scrollOffset = LayoutMetrics.current.initialOffset;\n\n if (overlayRef.current !== null) {\n overlayRef.current.style.opacity = `1`;\n }\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.style.transform = translateY(\n LayoutMetrics.current.initialOffset + stateRef.current.swipeOffset\n );\n }\n if (footerRef.current !== null) {\n footerRef.current.style.transform = translateY(-LayoutMetrics.current.initialOffset);\n }\n\n requestAnimationFrame(recalcContentOverlayPosition);\n requestAnimationFrame(recalcScrollFlags);\n resetScrollPosition();\n }, [recalcContentOverlayPosition, recalcScrollFlags, resetScrollPosition]);\n\n const handleExitAnimationStart = useCallback(() => {\n setTransformToVisible();\n onBeforeExit?.();\n }, [setTransformToVisible, onBeforeExit]);\n\n const handleExitAnimationEnd = useCallback(() => {\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET, `0px`);\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET, `0px`);\n\n stateRef.current.resizeRAFHandle !== null && cancelAnimationFrame(stateRef.current.resizeRAFHandle);\n stateRef.current = { ...INITIAL_STATE };\n\n stateRef.current.exitHandlers.forEach((handler) => handler());\n stateRef.current.exitHandlers = [];\n onAfterExit?.();\n }, [onAfterExit]);\n\n const handleHeightAnimationStart = useCallback(() => {\n LayoutMetrics.current.invalidateCache();\n\n stateRef.current.scrollOffset = LayoutMetrics.current.initialOffset;\n stateRef.current.swipeOffset = 0;\n\n if (contentRef.current !== null) {\n contentRef.current.style.transform = translateY(0);\n }\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.style.transform = translateY(LayoutMetrics.current.initialOffset);\n }\n if (stateRef.current.heightAnimationDiff !== null && visualContainerRef.current !== null) {\n visualContainerRef.current.style.height = `${\n LayoutMetrics.current.bottomSheetHeight + stateRef.current.heightAnimationDiff\n }px`;\n }\n }, []);\n\n const handleHeightAnimationEnd = useCallback(() => {\n LayoutMetrics.current.invalidateCache();\n\n if (visualContainerRef.current !== null) {\n visualContainerRef.current.style.height = `${LayoutMetrics.current.bottomSheetHeight}px`;\n }\n\n stateRef.current.heightAnimationDiff = null;\n stateRef.current.heightAnimationCallback && requestAnimationFrame(stateRef.current.heightAnimationCallback);\n stateRef.current.heightAnimationCallback = null;\n setHeightAnimationRunning(false);\n\n requestAnimationFrame(recalcContentOverlayPosition);\n requestAnimationFrame(recalcScrollFlags);\n resetScrollPosition();\n }, [setHeightAnimationRunning, recalcContentOverlayPosition, recalcScrollFlags, resetScrollPosition]);\n\n const handleSwipeMove: SwipeEventHandler = useCallback(\n (event) => {\n if (\n (stateRef.current.touchAction !== null && stateRef.current.touchAction !== 'swipe') ||\n hasSelectedText()\n ) {\n return;\n }\n\n // храним неокругленное значение для translateY, чтобы анимация была плавнее\n let newSwipeOffset = stateRef.current.swipeOffset + event.deltaY;\n if (Math.round(newSwipeOffset) <= 0) {\n // боттомшит уперся в верхний край экрана, не даем свайпать дальше\n newSwipeOffset = 0;\n if (stateRef.current.touchAction === 'swipe') {\n stateRef.current.touchAction = 'complete';\n }\n } else {\n // свайп в процессе\n stateRef.current.touchAction = 'swipe';\n }\n\n if (stateRef.current.swipeOffset !== newSwipeOffset) {\n stateRef.current.swipeOffset = newSwipeOffset;\n\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.style.transform = translateY(\n Math.max(stateRef.current.scrollOffset, 0) + newSwipeOffset\n );\n }\n\n recalcScrollFlags();\n }\n },\n [recalcScrollFlags]\n );\n\n const handleSwipeCancel: SwipeEventHandler = useCallback(() => {\n if (stateRef.current.touchAction === 'swipe') {\n stateRef.current.swipeOffset = 0;\n stateRef.current.touchAction = null;\n\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.classList.add(styles.swipeCancelAnimation);\n const swipeContainer = swipeContainerRef.current;\n setTimeout(() => swipeContainer.classList.remove(styles.swipeCancelAnimation), 100);\n swipeContainerRef.current.style.transform = translateY(Math.max(stateRef.current.scrollOffset, 0));\n }\n\n recalcScrollFlags();\n }\n }, [recalcScrollFlags]);\n\n const handleSwipeEnd: SwipeEventHandler = useCallback(() => {\n if (stateRef.current.touchAction === 'swipe') {\n onCloseRef.current();\n }\n }, []);\n\n const swipeHandlers = useSwipeHandlers({\n thresholdYRef: SWIPE_THRESHOLD,\n onSwipeMove: handleSwipeMove,\n onSwipeEnd: handleSwipeEnd,\n onSwipeCancel: handleSwipeCancel,\n });\n\n const initTransformHandlers = useCallback(() => {\n const visualContainer = visualContainerRef.current;\n if (!visualContainer) {\n return void 0;\n }\n\n const handleScroll = (delta: number) => {\n if (\n LayoutMetrics.current.initialOffset !== 0 ||\n LayoutMetrics.current.contentHeight > LayoutMetrics.current.availableScrollHeight\n ) {\n // храним неокругленное значение для translateY, чтобы анимация была плавнее\n let newScrollOffset = stateRef.current.scrollOffset + delta;\n const roundedNewScrollOffset = Math.round(newScrollOffset);\n\n if (roundedNewScrollOffset >= LayoutMetrics.current.initialOffset) {\n // скролла нет (touchAction is null)\n // либо контент проскроллен в начало, тогда не даем скроллить дальше\n newScrollOffset = LayoutMetrics.current.initialOffset;\n if (stateRef.current.touchAction === 'scroll') {\n stateRef.current.touchAction = 'complete';\n }\n } else if (\n LayoutMetrics.current.contentHeight + roundedNewScrollOffset <=\n LayoutMetrics.current.availableScrollHeight\n ) {\n // скролла нет (touchAction is null)\n // либо контент проскроллен до конца, тогда не даем скроллить дальше\n newScrollOffset = LayoutMetrics.current.availableScrollHeight - LayoutMetrics.current.contentHeight;\n if (stateRef.current.touchAction === 'scroll') {\n stateRef.current.touchAction = 'complete';\n }\n } else {\n // скролл в процессе\n stateRef.current.touchAction = 'scroll';\n }\n\n if (stateRef.current.scrollOffset !== newScrollOffset) {\n const offsetWasPositive = stateRef.current.scrollOffset > 0;\n stateRef.current.scrollOffset = newScrollOffset;\n\n if (contentRef.current !== null && swipeContainerRef.current !== null) {\n if (newScrollOffset > 0) {\n if (!offsetWasPositive) {\n contentRef.current.style.transform = translateY(0);\n }\n swipeContainerRef.current.style.transform = translateY(newScrollOffset);\n if (footerRef.current !== null) {\n footerRef.current.style.transform = translateY(-newScrollOffset);\n }\n } else {\n contentRef.current.style.transform = translateY(newScrollOffset);\n if (offsetWasPositive) {\n swipeContainerRef.current.style.transform = translateY(0);\n if (footerRef.current !== null) {\n footerRef.current.style.transform = translateY(0);\n }\n }\n }\n }\n\n recalcScrollFlags();\n scrollContextProviderRef.current?.notify({\n scrollTop: Math.max(-stateRef.current.scrollOffset, 0),\n });\n }\n }\n };\n\n const onTouchMove = (event: ScrollGestureEvent) => {\n if (\n (!allowScrollWhileFocused && stateRef.current.hasFocus) ||\n (stateRef.current.touchAction !== null && stateRef.current.touchAction !== 'scroll') ||\n hasSelectedText()\n ) {\n return;\n }\n handleScroll(event.delta);\n };\n\n const onTouchEnd = () => {\n if (stateRef.current.touchAction === 'scroll') {\n stateRef.current.touchAction = null;\n }\n };\n\n const handleTouchStart = (event: TouchEvent) => {\n if (stateRef.current.touchAction === 'complete') {\n stateRef.current.touchAction = null;\n }\n swipeHandlers.onTouchStart(event);\n };\n\n const handleTouchMove = (event: TouchEvent) => {\n event.preventDefault();\n event.stopPropagation();\n swipeHandlers.onTouchMove(event);\n };\n\n const removeScrollHandlers = initScrollHandlers({\n axis: 'vertical',\n wrapperRef: visualContainerRef,\n onTouchMove,\n onTouchEnd,\n });\n visualContainer.addEventListener('touchstart', handleTouchStart);\n visualContainer.addEventListener('touchmove', handleTouchMove);\n visualContainer.addEventListener('touchend', swipeHandlers.onTouchEnd);\n visualContainer.addEventListener('touchcancel', swipeHandlers.onTouchCancel);\n\n return () => {\n removeScrollHandlers();\n visualContainer.removeEventListener('touchstart', handleTouchStart);\n visualContainer.removeEventListener('touchmove', handleTouchMove);\n visualContainer.removeEventListener('touchend', swipeHandlers.onTouchEnd);\n visualContainer.removeEventListener('touchcancel', swipeHandlers.onTouchCancel);\n };\n }, [allowScrollWhileFocused, recalcScrollFlags, swipeHandlers]);\n\n // при изменении высоты контента анимируем ее\n // задаем боттомшиту фиксированную высоту и пересчитываем ее самостоятельно,\n // чтобы не было мерцания, когда новый контент отрисовался до срабатывания колбека ResizeObserver\n const initHeightObserver = useCallback(() => {\n const visualContainer = visualContainerRef.current;\n if (!visualContainer) {\n return void 0;\n }\n\n let prevContentHeight = 0;\n let prevHeaderHeight = 0;\n let prevFooterHeight = 0;\n let prevAvailableScrollHeight = 0;\n let skipFirstResizeCallback = true;\n let collapseResizeCallbacks = false;\n\n const handleHeightChange = () => {\n LayoutMetrics.current.invalidateCache();\n\n if (skipFirstResizeCallback) {\n visualContainer.style.height = `${LayoutMetrics.current.bottomSheetHeight}px`;\n prevHeaderHeight = LayoutMetrics.current.headerHeight;\n prevContentHeight = LayoutMetrics.current.contentHeight;\n prevFooterHeight = LayoutMetrics.current.footerHeight;\n prevAvailableScrollHeight = LayoutMetrics.current.availableScrollHeight;\n\n skipFirstResizeCallback = false;\n return;\n }\n\n if (stateRef.current.heightAnimationDiff !== null) {\n if (!collapseResizeCallbacks) {\n // если предыдущая анимация не завершилась, без анимации сбрасываем высоту на вычисленную браузером\n visualContainer.style.height = ``;\n }\n } else {\n const contentHeightDiff = LayoutMetrics.current.contentHeight - prevContentHeight;\n const containersHeightDiff =\n LayoutMetrics.current.headerHeight -\n prevHeaderHeight +\n LayoutMetrics.current.footerHeight -\n prevFooterHeight;\n\n // предположим, что scrollContainer останется таким же или станет меньше\n // тогда можем рассчитать минимальную видимую высоту контента как min(scrollContainer.height, contentHeight)\n const prevVisibleContentHeight = Math.min(prevAvailableScrollHeight, prevContentHeight);\n const newMinVisibleContentHeight = Math.min(\n prevAvailableScrollHeight - containersHeightDiff,\n LayoutMetrics.current.contentHeight\n );\n const minVisibleContentHeightDiff = newMinVisibleContentHeight - prevVisibleContentHeight;\n\n // предположим, что scrollContainer станет больше\n // тогда контент не может увеличиться больше, чем на расстояние между боттомшитом и верхним краем экрана\n const maxVisibleContentHeightDiff =\n LayoutMetrics.current.remainingAvailableHeight - containersHeightDiff;\n\n const visibleContentHeightDiff = Math.min(\n Math.max(contentHeightDiff, minVisibleContentHeightDiff),\n maxVisibleContentHeightDiff\n );\n if (visibleContentHeightDiff !== 0) {\n resetScrollPosition();\n }\n\n const heightAnimationDiff = visibleContentHeightDiff + containersHeightDiff;\n if (heightAnimationDiff !== 0) {\n // запоминаем высоту scrollContainer после того, как боттомшиту будет присвоена новая высота.\n // до этого значение некорректно, т.к. новый контент уже был отрендерен,\n // но в инлайн-стилях боттомшита остается старая высота\n stateRef.current.heightAnimationDiff = heightAnimationDiff;\n stateRef.current.heightAnimationCallback = () => {\n prevAvailableScrollHeight = LayoutMetrics.current.availableScrollHeight;\n };\n\n setHeightAnimationRunning(true);\n\n collapseResizeCallbacks = true;\n requestAnimationFrame(() => {\n collapseResizeCallbacks = false;\n });\n } else {\n recalcContentOverlayPosition();\n recalcScrollFlags();\n }\n }\n\n prevHeaderHeight = LayoutMetrics.current.headerHeight;\n prevContentHeight = LayoutMetrics.current.contentHeight;\n prevFooterHeight = LayoutMetrics.current.footerHeight;\n };\n\n const resizeObserver = new ResizeObserver(handleHeightChange);\n const content = contentRef.current;\n const footer = footerRef.current;\n const header = headerRef.current;\n\n content !== null && resizeObserver.observe(content);\n footer !== null && resizeObserver.observe(footer);\n header !== null && header.addHeightObserver(handleHeightChange);\n\n return () => {\n resizeObserver.disconnect();\n header !== null && header.removeHeightObserver(handleHeightChange);\n };\n }, [setHeightAnimationRunning, recalcScrollFlags, recalcContentOverlayPosition, resetScrollPosition]);\n\n const handleAppearAnimationEnd = useCallback(() => {\n const removeHeightObserver = initHeightObserver();\n removeHeightObserver && stateRef.current.exitHandlers.push(removeHeightObserver);\n\n const removeTransformHandlers = deviceFlagsRef.current.useCustomScroll && initTransformHandlers();\n removeTransformHandlers && stateRef.current.exitHandlers.push(removeTransformHandlers);\n\n onAppearRef.current?.();\n }, [initHeightObserver, initTransformHandlers]);\n\n const { onTouchEnd, ...eventHandlers } = useNoBubbling();\n\n if (!animationTimeout) {\n return null;\n }\n\n const renderFunc = (appearTransition: TransitionStatus, heightTransition: TransitionStatus) => {\n const navigationBar =\n header && isNavigationBarComponent(header) ? (\n <NavigationBarComponent {...header.props} forwardedRef={headerRef} />\n ) : null;\n\n const content = (\n <div\n className={classnames(styles.content, {\n [styles.contentFullScreen]: height === 'full-screen',\n [styles.contentWithPaddings]: withContentPaddings,\n [styles.contentWithoutHeader]: !header,\n [styles.contentSizedFullScreen]: isContentSizedFullHeight,\n })}\n ref={contentRef}\n >\n <BottomSheetContext.Provider value={bottomSheetContext}>{children}</BottomSheetContext.Provider>\n </div>\n );\n\n const scrollContainer = deviceFlagsRef.current.useCustomScroll ? (\n <CustomScrollContextProvider ref={scrollContextProviderRef}>\n <div className={styles.scrollContainer} onFocus={handleFocus} ref={scrollContainerRef}>\n {navigationBar}\n {content}\n </div>\n </CustomScrollContextProvider>\n ) : (\n <div\n className={classnames(styles.scrollContainer, styles.nativeScrollContainer)}\n onFocus={handleFocus}\n onScroll={recalcScrollFlags}\n ref={scrollContainerRef}\n >\n {navigationBar}\n {content}\n </div>\n );\n\n const clonedFooter =\n footer && isActionBarComponent(footer)\n ? cloneElement(footer, { type: footer.props.type || 'mobile', showDivider: false })\n : footer;\n\n return (\n <Layer layer={InternalLayerName.BottomSheet}>\n <div {...eventHandlers} className={styles.overlay}>\n <div\n className={classnames(styles.overlayBackground, {\n [styles.overlayBackgroundVisible]: showOverlay,\n [styles.appearAnimation]: appearTransition === 'entering',\n [styles.disappearAnimation]: appearTransition === 'exiting',\n })}\n {...(appearTransition === 'entered'\n ? { 'data-qa': 'bottom-sheet-overlay', onClick: onCloseRef.current }\n : {})}\n ref={overlayRef}\n />\n <div\n className={classnames(styles.swipeContainer, {\n [styles.appearAnimation]: appearTransition === 'entering',\n [styles.closeBySwipeAnimation]:\n appearTransition === 'exiting' && stateRef.current.touchAction === 'swipe',\n [styles.disappearAnimation]: appearTransition === 'exiting',\n })}\n data-qa={appearTransition === 'entered' ? 'bottom-sheet-container' : undefined}\n ref={swipeContainerRef}\n >\n <div\n className={classnames(styles.grabber, styles.grabberTransitionAnimation, {\n [styles.grabberEnsureSafe]: stateRef.current.grabberUnsafe,\n })}\n ref={grabberRef}\n />\n <div\n className={classnames(styles.visualContainer, {\n [styles.visualContainerFullScreen]: height === 'full-screen',\n [styles.heightTransitionAnimation]: heightTransition === 'entering',\n })}\n data-qa={appearTransition === 'entered' ? 'bottom-sheet-content' : undefined}\n ref={bottomSheetRef}\n >\n {scrollContainer}\n <div className={styles.footer} ref={footerRef}>\n {footer && (\n <div\n className={classnames(styles.divider, {\n [styles.dividerVisible]: stateRef.current.dividerVisible,\n })}\n ref={dividerRef}\n >\n <Divider />\n </div>\n )}\n {interceptClickHandlers ? (\n <ClickInterceptor>{clonedFooter}</ClickInterceptor>\n ) : (\n clonedFooter\n )}\n </div>\n </div>\n <div className={styles.contentOverlay} ref={contentOverlayRef} />\n </div>\n </div>\n </Layer>\n );\n };\n\n return createPortal(\n <div\n className={styles.cssVariablesContainer}\n data-qa=\"bottom-sheet-css-variables\"\n ref={cssVariablesContainerRef}\n >\n <Transition\n appear\n in={currentVisible}\n mountOnEnter\n onEnter={setTransformToInvisible}\n onEntering={setTransformToVisible}\n onEntered={handleAppearAnimationEnd}\n onExit={handleExitAnimationStart}\n onExiting={setTransformToInvisible}\n onExited={handleExitAnimationEnd}\n timeout={animationTimeout.appear}\n unmountOnExit\n nodeRef={contentRef}\n >\n {(appearTransition) => (\n <Transition\n in={heightAnimationRunning}\n onEnter={handleHeightAnimationStart}\n onEntered={handleHeightAnimationEnd}\n timeout={animationTimeout.height}\n nodeRef={contentRef}\n >\n {(heightTransition) => renderFunc(appearTransition, heightTransition)}\n </Transition>\n )}\n </Transition>\n </div>,\n document.body\n );\n};\n\nexport const BottomSheet = forwardRef(BottomSheetRenderFunc);\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BottomSheet.js","sources":["../src/BottomSheet.tsx"],"sourcesContent":["import {\n FocusEventHandler,\n ForwardRefRenderFunction,\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n cloneElement,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { Transition, TransitionStatus } from 'react-transition-group';\nimport classnames from 'classnames';\n\nimport { disableOverscroll, disableScroll } from '@hh.ru/magritte-common-modal-helper';\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport { useNoBubbling } from '@hh.ru/magritte-common-use-no-bubbling';\nimport { useSwipeHandlers, SwipeEventHandler } from '@hh.ru/magritte-common-use-swipe';\nimport {\n ScrollGestureEvent,\n CustomScrollContextNotifier,\n CustomScrollContextProvider,\n initScrollHandlers,\n} from '@hh.ru/magritte-internal-custom-scroll';\nimport { InternalLayerName } from '@hh.ru/magritte-internal-layer-name';\nimport { isActionBarComponent } from '@hh.ru/magritte-ui-action-bar';\nimport { BottomSheetContext } from '@hh.ru/magritte-ui-bottom-sheet/BottomSheetContext';\nimport { ClickInterceptor } from '@hh.ru/magritte-ui-bottom-sheet/ClickInterceptor';\nimport { BottomSheetProps } from '@hh.ru/magritte-ui-bottom-sheet/types';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { Divider } from '@hh.ru/magritte-ui-divider';\nimport { Layer } from '@hh.ru/magritte-ui-layer';\nimport {\n NavigationBarComponent,\n NavigationBarComponentRef,\n isNavigationBarComponent,\n} from '@hh.ru/magritte-ui-navigation-bar';\nimport { isValidTreeSelectorWrapper } from '@hh.ru/magritte-ui-tree-selector';\n\nimport styles from './bottom-sheet.less';\n\nconst CSS_VAR_ENTER_ANIMATION_DURATION = '--enter-animation-duration';\nconst CSS_VAR_EXIT_ANIMATION_DURATION = '--exit-animation-duration';\nconst CSS_VAR_HEIGHT_ANIMATION_DURATION = '--height-transition-duration';\nconst CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET = '--virtual-keyboard-top-offset';\nconst CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET = '--virtual-keyboard-bottom-offset';\n\nconst hasSelectedText = () => {\n const selection = document.getSelection();\n return !!selection && !selection.isCollapsed;\n};\n\nconst isSafari = () => /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\nconst toNumber = (value: string) => {\n const result = parseInt(value, 10);\n return Number.isInteger(result) ? result : 0;\n};\n\nconst translateY = (value: number) => `translate3d(0, ${value}px, 0)`;\n\ntype AnimationTimeout = { [AnimationType in 'appear' | 'height']: { [AnimationStage in 'enter' | 'exit']: number } };\n\ntype State = {\n dividerVisible: boolean;\n // если боттомшит упирается в верхний край экрана, челка может перекрыть граббер и его нужно переместить в safe area\n grabberUnsafe: boolean;\n hasFocus: boolean;\n resizeRAFHandle: ReturnType<typeof requestAnimationFrame> | null;\n // translateY для эмуляции скролла, отрицательный либо меньше LayoutMetrics.current.initialOffset\n scrollOffset: number;\n // translateY для эмуляции свайпа, всегда положительный либо 0\n swipeOffset: number;\n // текущее действие, инициированное пользователем\n touchAction:\n | null // может быть начато любое действие\n | 'complete' // палец приложен, но действие завершено — не реагируем на тач, пока пользователь не отпустит палец\n | 'scroll' // палец приложен, скроллим контент внутри боттомшита\n | 'swipe'; // палец приложен, свайпаем весь боттомшит вниз, чтобы закрыть его, или вверх, чтобы отменить свайп\n exitHandlers: Array<VoidFunction>;\n // число, на которое нужно анимировать изменение высоты контента боттомшита\n heightAnimationDiff: number | null;\n heightAnimationCallback?: VoidFunction | null;\n};\n\nconst INITIAL_STATE: State = {\n dividerVisible: false,\n grabberUnsafe: false,\n hasFocus: false,\n resizeRAFHandle: null,\n scrollOffset: 0,\n swipeOffset: 0,\n touchAction: null,\n exitHandlers: [],\n heightAnimationDiff: null,\n};\n\ntype DeviceFlags = {\n isSafari?: boolean;\n useCustomScroll?: boolean;\n};\n\nconst BottomSheetRenderFunc: ForwardRefRenderFunction<HTMLElement, BottomSheetProps> = (\n {\n allowScrollWhileFocused,\n children,\n footer,\n header,\n height = 'content',\n interceptClickHandlers = true,\n keyboardOverlaysContent = true,\n onAppear,\n onBeforeExit,\n onAfterExit,\n onClose,\n showDivider = 'with-scroll',\n showOverlay = true,\n visible = false,\n withContentPaddings = true,\n },\n ref\n) => {\n const DOCUMENT_HEIGHT = useRef(0);\n const SWIPE_THRESHOLD = useRef({ max: Infinity });\n\n const contentRef = useRef<HTMLDivElement>(null);\n const contentOverlayRef = useRef<HTMLDivElement>(null);\n const cssVariablesContainerRef = useRef<HTMLDivElement>(null);\n const dividerRef = useRef<HTMLDivElement>(null);\n const focusedElementRef = useRef<HTMLInputElement | HTMLTextAreaElement | null>(null);\n const footerRef = useRef<HTMLDivElement>(null);\n const grabberRef = useRef<HTMLDivElement>(null);\n const headerRef = useRef<NavigationBarComponentRef>(null);\n const overlayRef = useRef<HTMLDivElement>(null);\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const swipeContainerRef = useRef<HTMLDivElement>(null);\n const visualContainerRef = useRef<HTMLDivElement>(null);\n const bottomSheetRef = useMultipleRefs(ref, visualContainerRef);\n const scrollContextProviderRef = useRef<CustomScrollContextNotifier>(null);\n\n const currentVisible = useBreakpoint().isMobile && visible;\n const onAppearRef = useRef(onAppear);\n onAppearRef.current = onAppear;\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n const stateRef = useRef<State>({ ...INITIAL_STATE });\n const [animationTimeout, setAnimationTimeout] = useState<AnimationTimeout | null>(null);\n const [heightAnimationRunning, setHeightAnimationRunning] = useState(false);\n const bottomSheetContext = useMemo(() => ({ contentOverlayRef }), [contentOverlayRef]);\n const isContentSizedFullHeight = isValidTreeSelectorWrapper(children);\n const deviceFlagsRef = useRef<DeviceFlags>({});\n if (typeof deviceFlagsRef.current.isSafari !== 'boolean' && typeof navigator !== 'undefined') {\n deviceFlagsRef.current.isSafari = isSafari();\n }\n if (typeof deviceFlagsRef.current.useCustomScroll !== 'boolean' && typeof window !== 'undefined') {\n deviceFlagsRef.current.useCustomScroll = 'ontouchstart' in window;\n }\n\n const LayoutMetrics = useRef(\n (() => {\n let cache: Record<string, number> = {};\n return {\n get bottomSheetHeight() {\n if (!('bottomSheetHeight' in cache) && visualContainerRef.current !== null) {\n cache.bottomSheetHeight = visualContainerRef.current.clientHeight;\n }\n return cache.bottomSheetHeight ?? 0;\n },\n /**\n * Высота контента\n * Может превышать высоту контейнера из-за скролла\n */\n get contentHeight() {\n if (!('contentHeight' in cache) && contentRef.current !== null) {\n cache.contentHeight = contentRef.current.clientHeight;\n }\n return cache.contentHeight ?? 0;\n },\n /**\n * Высота видимой части контента\n */\n get visibleContentHeight() {\n if (!('visibleContentHeight' in cache) && scrollContainerRef.current !== null) {\n const layoutHeaderHeight = headerRef.current?.layoutHeight ?? 0;\n cache.visibleContentHeight = scrollContainerRef.current.clientHeight - layoutHeaderHeight;\n }\n return cache.visibleContentHeight ?? 0;\n },\n /**\n * Положение верхнего края видимой части контента относительно вьюпорта\n */\n get contentTop() {\n if (!('contentTop' in cache) && visualContainerRef.current !== null) {\n const visibleHeaderHeight = headerRef.current?.visibleHeight ?? 0;\n cache.contentTop = visualContainerRef.current.offsetTop + visibleHeaderHeight;\n }\n return cache.contentTop ?? 0;\n },\n get footerHeight() {\n if (!('footerHeight' in cache) && footerRef.current !== null) {\n cache.footerHeight = footerRef.current.clientHeight;\n }\n return cache.footerHeight ?? 0;\n },\n /**\n * Фактическая высота, которую NavigationBar занимает в боттомшите\n * Может отличаться от видимой высоты NavigationBar\n */\n get headerHeight() {\n if (!('headerHeight' in cache) && headerRef.current !== null) {\n cache.headerHeight = headerRef.current.layoutHeight;\n }\n return cache.headerHeight ?? 0;\n },\n get initialOffset() {\n if (!('initialOffset' in cache)) {\n if (\n height === 'half-screen' &&\n deviceFlagsRef.current.useCustomScroll &&\n visualContainerRef.current !== null &&\n visualViewport !== null\n ) {\n const halfScreenOffset =\n visualContainerRef.current.clientHeight - visualViewport.height / 2;\n cache.initialOffset = Math.max(Math.round(halfScreenOffset), 0);\n } else {\n cache.initialOffset = 0;\n }\n }\n return cache.initialOffset ?? 0;\n },\n /**\n * Расстояние между верхним краем боттомшита и границей вьюпорта\n */\n get remainingAvailableHeight() {\n if (!('remainingAvailableHeight' in cache) && grabberRef.current !== null) {\n cache.remainingAvailableHeight = grabberRef.current.offsetTop;\n }\n return cache.remainingAvailableHeight ?? 0;\n },\n invalidateCache() {\n cache = {};\n },\n };\n })()\n );\n\n const setCSSVariable = (name: string, value: string) =>\n cssVariablesContainerRef.current !== null && cssVariablesContainerRef.current.style.setProperty(name, value);\n\n useEffect(() => {\n if (!currentVisible) {\n return void 0;\n }\n\n DOCUMENT_HEIGHT.current = document.documentElement.clientHeight;\n if (visualViewport !== null) {\n SWIPE_THRESHOLD.current = { max: Math.round(visualViewport.height * 0.8) };\n }\n\n if (!showOverlay) {\n const enableOverscroll = disableOverscroll();\n return enableOverscroll;\n }\n\n const enableScroll = disableScroll();\n return enableScroll;\n }, [currentVisible, showOverlay]);\n\n useEffect(() => {\n const animationTimeoutElement = document.createElement('div');\n animationTimeoutElement.classList.add(styles.animationTimeout);\n document.body.appendChild(animationTimeoutElement);\n const style = window.getComputedStyle(animationTimeoutElement);\n const enter = toNumber(style.getPropertyValue(CSS_VAR_ENTER_ANIMATION_DURATION));\n const exit = toNumber(style.getPropertyValue(CSS_VAR_EXIT_ANIMATION_DURATION));\n const height = toNumber(style.getPropertyValue(CSS_VAR_HEIGHT_ANIMATION_DURATION));\n document.body.removeChild(animationTimeoutElement);\n setAnimationTimeout({ appear: { enter, exit }, height: { enter: height, exit } });\n }, [setAnimationTimeout]);\n\n useEffect(() => {\n if (!currentVisible || deviceFlagsRef.current.isSafari) {\n return;\n }\n\n // используем Virtual Keyboard API через meta-тег вместо navigator.virtualKeyboard,\n // потому что второй способ работает только на страницах, открытых через HTTPS, что мешает тестированию\n let meta = document.querySelector('meta[name=\"viewport\"]');\n if (!meta) {\n meta = document.createElement('meta');\n meta.setAttribute('name', 'viewport');\n document.head.appendChild(meta);\n }\n const attributesStr = meta.getAttribute('content');\n const attributes = (\n attributesStr !== null\n ? Object.fromEntries(attributesStr.split(',').map((keyValuePairStr) => keyValuePairStr.split('=')))\n : {}\n ) as Record<string, string>;\n attributes['interactive-widget'] = keyboardOverlaysContent ? 'resizes-visual' : 'resizes-content';\n const attributesStrUpdated = Object.entries(attributes)\n .map((keyValuePair) => keyValuePair.join('='))\n .join(',');\n meta.setAttribute('content', attributesStrUpdated);\n }, [currentVisible, keyboardOverlaysContent]);\n\n const recalcKeyboardOffsets = useCallback(() => {\n if (!overlayRef.current || !visualViewport) {\n return;\n }\n\n if (stateRef.current.hasFocus && focusedElementRef.current !== null) {\n // терминология: https://developer.chrome.com/blog/viewport-resize-behavior/\n //\n // делим браузеры на три группы в зависимости от поведения при открытии виртуальной клавиатуры:\n // 1. Safari — ресайзит Visual Viewport, не меняет Layout Viewport.\n // В нем не нужно ничего корректировать при keyboardOverlaysContent=true,\n // а при keyboardOverlaysContent=false нужно сдвинуть НИЖНИЙ край контейнера ВВЕРХ,\n // чтобы он совпал с границей Visual Viewport\n // 2. Chrome < 108 & Chromium-based — ресайзит и Visual Viewport, и Layout Viewport.\n // В нем не нужно ничего корректировать при keyboardOverlaysContent=false,\n // а при keyboardOverlaysContent=true нужно сдвинуть НИЖНИЙ край контейнера ВНИЗ,\n // чтобы футер уехал под клавиатуру\n // 3. Chrome >= 108 — поддерживает Virtual Keyboard API и meta-тег interactive-widget.\n // Используем поведение `resizes-visual` (как в Safari) в случае keyboardOverlaysContent=true\n // и `resizes-content` (как в Chrome < 108 & Chromium-based) в случае keyboardOverlaysContent=false\n // Таким образом в нем ничего не нужно корректировать\n\n const overlayDOMRect = overlayRef.current.getBoundingClientRect();\n\n // любой браузер может сдвинуть Visual Viewport вверх, если фокусируемый инпут находится близко к нижней границе\n // из-за этого может возникнуть проблема, что ВЕРХНИЙ край контента уехал за границу Visual Viewport\n // сдвигаем ВЕРХНИЙ край контейнера ВНИЗ, чтобы он совпал с границей Visual Viewport\n const visualViewportShift = Math.round(-overlayDOMRect.top);\n\n // keyboardOverlaysContent=true, клавиатура ПОВЕРХ контента\n // этот кейс нужно корректировать только в Chrome < 108 & Chromium-based\n if (keyboardOverlaysContent) {\n // браузеры из этой группы меняют Layout Viewport\n const layoutViewportDiff = Math.round(DOCUMENT_HEIGHT.current - document.documentElement.clientHeight);\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET, `${visualViewportShift}px`);\n if (layoutViewportDiff > 0) {\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET, `${visualViewportShift}px`);\n // сдвигаем НИЖНИЙ край контейнера ВНИЗ, чтобы футер уехал под клавиатуру\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET, `${-layoutViewportDiff}px`);\n\n // при этом может возникнуть проблема, что клавиатура перекрыла инпут\n // проверяем это и компенсируем величину перекрытия при необходимости\n const focusedElementOutOfViewportHeight = Math.round(\n focusedElementRef.current.getBoundingClientRect().bottom +\n layoutViewportDiff -\n DOCUMENT_HEIGHT.current\n );\n if (focusedElementOutOfViewportHeight > 0) {\n setCSSVariable(\n CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET,\n `${focusedElementOutOfViewportHeight - layoutViewportDiff}px`\n );\n }\n }\n }\n\n // keyboardOverlaysContent=false, клавиатура ПОД контентом\n // этот кейс нужно корректировать только в Safari\n if (!keyboardOverlaysContent && deviceFlagsRef.current.isSafari) {\n const visualViewportDiff = Math.round(overlayDOMRect.bottom - visualViewport.height);\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET, `${visualViewportShift}px`);\n if (visualViewportDiff > 0) {\n // сдвигаем НИЖНИЙ край контейнера ВВЕРХ, чтобы он совпал с границей Visual Viewport\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET, `${visualViewportDiff}px`);\n }\n }\n } else {\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET, `0px`);\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET, `0px`);\n }\n }, [keyboardOverlaysContent]);\n\n const handleFocus: FocusEventHandler = useCallback(\n (event) => {\n const focusedElement = event.target;\n const initialViewportHeight = visualViewport?.height;\n const resizeRAFStart = performance.now();\n\n if (\n !(focusedElement instanceof HTMLInputElement || focusedElement instanceof HTMLTextAreaElement) ||\n stateRef.current.resizeRAFHandle !== null\n ) {\n return;\n }\n\n const handleResize = () => {\n if (stateRef.current.resizeRAFHandle !== null) {\n cancelAnimationFrame(stateRef.current.resizeRAFHandle);\n stateRef.current.resizeRAFHandle = null;\n }\n\n recalcKeyboardOffsets();\n\n if (!stateRef.current.hasFocus) {\n visualViewport?.removeEventListener('resize', handleResize);\n }\n };\n\n // если спамить фокус/блюр инпута, ивент visualViewport.resize может не долететь\n // поэтому проверяем изменение высоты в рекурсивном RAF\n const waitForResize = () => {\n if (performance.now() - resizeRAFStart > 1000 || visualViewport?.height !== initialViewportHeight) {\n visualViewport?.removeEventListener('resize', handleResize);\n stateRef.current.resizeRAFHandle = null;\n recalcKeyboardOffsets();\n } else {\n stateRef.current.resizeRAFHandle = requestAnimationFrame(waitForResize);\n }\n };\n\n const handleBlur = () => {\n if (deviceFlagsRef.current.isSafari) {\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET, `0px`);\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET, `0px`);\n }\n\n stateRef.current.hasFocus = false;\n if (stateRef.current.resizeRAFHandle !== null) {\n cancelAnimationFrame(stateRef.current.resizeRAFHandle);\n stateRef.current.resizeRAFHandle = null;\n }\n focusedElement.removeEventListener('blur', handleBlur);\n focusedElementRef.current = null;\n };\n\n stateRef.current.hasFocus = true;\n stateRef.current.resizeRAFHandle = requestAnimationFrame(waitForResize);\n visualViewport?.addEventListener('resize', handleResize);\n focusedElement.addEventListener('blur', handleBlur);\n focusedElementRef.current = focusedElement;\n },\n [recalcKeyboardOffsets]\n );\n\n // contentOverlay совпадает по границам с контентом боттомшита, но лежит вне боттомшита,\n // чтобы чайлды contentOverlay не обрезались границами боттомшита\n // например, снекбар, лежащий внутри contentOverlay, при смахивании может оказаться в любом месте экрана\n // поэтому позицию contentOverlay нужно синхронизировать\n const recalcContentOverlayPosition = useCallback(() => {\n if (\n contentOverlayRef.current !== null &&\n scrollContainerRef.current !== null &&\n visualContainerRef.current !== null\n ) {\n contentOverlayRef.current.style.top = `${LayoutMetrics.current.contentTop}px`;\n contentOverlayRef.current.style.height = `${LayoutMetrics.current.visibleContentHeight}px`;\n }\n }, []);\n\n const recalcScrollFlags = useCallback(() => {\n const scrollOffset = deviceFlagsRef.current.useCustomScroll\n ? stateRef.current.scrollOffset\n : -(scrollContainerRef.current?.scrollTop ?? 0);\n\n if (dividerRef.current !== null) {\n const prevDividerVisible = stateRef.current.dividerVisible;\n const isNotScrolledToEnd =\n LayoutMetrics.current.contentHeight + scrollOffset > LayoutMetrics.current.visibleContentHeight;\n stateRef.current.dividerVisible =\n showDivider === 'always' || (showDivider === 'with-scroll' && isNotScrolledToEnd);\n if (stateRef.current.dividerVisible !== prevDividerVisible) {\n dividerRef.current.classList.toggle(styles.dividerVisible, stateRef.current.dividerVisible);\n }\n }\n\n if (grabberRef.current !== null) {\n const prevGrabberUnsafe = stateRef.current.grabberUnsafe;\n stateRef.current.grabberUnsafe =\n Math.round(Math.max(scrollOffset, 0) + stateRef.current.swipeOffset) ===\n LayoutMetrics.current.remainingAvailableHeight;\n if (stateRef.current.grabberUnsafe !== prevGrabberUnsafe) {\n grabberRef.current.classList.toggle(styles.grabberEnsureSafe, stateRef.current.grabberUnsafe);\n }\n }\n }, [showDivider]);\n\n // помещает боттомшит в позицию вне экрана снизу, которая может быть начальной либо конечной точкой анимации\n const setTransformToInvisible = useCallback(() => {\n LayoutMetrics.current.invalidateCache();\n\n if (overlayRef.current !== null) {\n overlayRef.current.style.opacity = `0`;\n }\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.style.transform = translateY(LayoutMetrics.current.bottomSheetHeight);\n }\n\n requestAnimationFrame(recalcContentOverlayPosition);\n requestAnimationFrame(recalcScrollFlags);\n }, [recalcContentOverlayPosition, recalcScrollFlags]);\n\n // помещает боттомшит в дефолтную позицию на экране, которая может быть начальной либо конечной точкой анимации\n const setTransformToVisible = useCallback(() => {\n LayoutMetrics.current.invalidateCache();\n\n stateRef.current.scrollOffset = LayoutMetrics.current.initialOffset;\n\n if (overlayRef.current !== null) {\n overlayRef.current.style.opacity = `1`;\n }\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.style.transform = translateY(\n LayoutMetrics.current.initialOffset + stateRef.current.swipeOffset\n );\n }\n if (footerRef.current !== null) {\n footerRef.current.style.transform = translateY(-LayoutMetrics.current.initialOffset);\n }\n\n requestAnimationFrame(recalcContentOverlayPosition);\n requestAnimationFrame(recalcScrollFlags);\n }, [recalcContentOverlayPosition, recalcScrollFlags]);\n\n const handleExitAnimationStart = useCallback(() => {\n setTransformToVisible();\n onBeforeExit?.();\n }, [setTransformToVisible, onBeforeExit]);\n\n const handleExitAnimationEnd = useCallback(() => {\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET, `0px`);\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET, `0px`);\n\n stateRef.current.resizeRAFHandle !== null && cancelAnimationFrame(stateRef.current.resizeRAFHandle);\n stateRef.current = { ...INITIAL_STATE };\n\n stateRef.current.exitHandlers.forEach((handler) => handler());\n stateRef.current.exitHandlers = [];\n onAfterExit?.();\n }, [onAfterExit]);\n\n const resetScrollPosition = useCallback(() => {\n if (deviceFlagsRef.current.useCustomScroll) {\n stateRef.current.scrollOffset = LayoutMetrics.current.initialOffset;\n stateRef.current.swipeOffset = 0;\n\n if (contentRef.current !== null) {\n contentRef.current.style.transform = translateY(0);\n }\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.style.transform = translateY(LayoutMetrics.current.initialOffset);\n }\n } else {\n scrollContainerRef.current?.scrollTo({ top: 0 });\n }\n }, []);\n\n const handleHeightAnimationStart = useCallback(() => {\n LayoutMetrics.current.invalidateCache();\n\n if (stateRef.current.heightAnimationDiff !== null && visualContainerRef.current !== null) {\n visualContainerRef.current.style.height = `${\n LayoutMetrics.current.bottomSheetHeight + stateRef.current.heightAnimationDiff\n }px`;\n }\n }, []);\n\n const handleHeightAnimationEnd = useCallback(() => {\n LayoutMetrics.current.invalidateCache();\n\n if (visualContainerRef.current !== null) {\n visualContainerRef.current.style.height = `${LayoutMetrics.current.bottomSheetHeight}px`;\n }\n\n stateRef.current.heightAnimationDiff = null;\n stateRef.current.heightAnimationCallback && requestAnimationFrame(stateRef.current.heightAnimationCallback);\n stateRef.current.heightAnimationCallback = null;\n setHeightAnimationRunning(false);\n\n requestAnimationFrame(recalcContentOverlayPosition);\n requestAnimationFrame(recalcScrollFlags);\n scrollContextProviderRef.current?.notify({ scrollTop: 0 });\n }, [setHeightAnimationRunning, recalcContentOverlayPosition, recalcScrollFlags]);\n\n const handleSwipeMove: SwipeEventHandler = useCallback(\n (event) => {\n if (\n (stateRef.current.touchAction !== null && stateRef.current.touchAction !== 'swipe') ||\n hasSelectedText()\n ) {\n return;\n }\n\n // храним неокругленное значение для translateY, чтобы анимация была плавнее\n let newSwipeOffset = stateRef.current.swipeOffset + event.deltaY;\n if (Math.round(newSwipeOffset) <= 0) {\n // боттомшит уперся в верхний край экрана, не даем свайпать дальше\n newSwipeOffset = 0;\n if (stateRef.current.touchAction === 'swipe') {\n stateRef.current.touchAction = 'complete';\n }\n } else {\n // свайп в процессе\n stateRef.current.touchAction = 'swipe';\n }\n\n if (stateRef.current.swipeOffset !== newSwipeOffset) {\n stateRef.current.swipeOffset = newSwipeOffset;\n\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.style.transform = translateY(\n Math.max(stateRef.current.scrollOffset, 0) + newSwipeOffset\n );\n }\n\n recalcScrollFlags();\n }\n },\n [recalcScrollFlags]\n );\n\n const handleSwipeCancel: SwipeEventHandler = useCallback(() => {\n if (stateRef.current.touchAction === 'swipe') {\n stateRef.current.swipeOffset = 0;\n stateRef.current.touchAction = null;\n\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.classList.add(styles.swipeCancelAnimation);\n const swipeContainer = swipeContainerRef.current;\n setTimeout(() => swipeContainer.classList.remove(styles.swipeCancelAnimation), 100);\n swipeContainerRef.current.style.transform = translateY(Math.max(stateRef.current.scrollOffset, 0));\n }\n\n recalcScrollFlags();\n }\n }, [recalcScrollFlags]);\n\n const handleSwipeEnd: SwipeEventHandler = useCallback(() => {\n if (stateRef.current.touchAction === 'swipe') {\n onCloseRef.current();\n }\n }, []);\n\n const swipeHandlers = useSwipeHandlers({\n thresholdYRef: SWIPE_THRESHOLD,\n onSwipeMove: handleSwipeMove,\n onSwipeEnd: handleSwipeEnd,\n onSwipeCancel: handleSwipeCancel,\n });\n\n const initTransformHandlers = useCallback(() => {\n const visualContainer = visualContainerRef.current;\n if (!visualContainer) {\n return void 0;\n }\n\n const handleScroll = (delta: number) => {\n if (\n LayoutMetrics.current.initialOffset !== 0 ||\n LayoutMetrics.current.contentHeight > LayoutMetrics.current.visibleContentHeight\n ) {\n // храним неокругленное значение для translateY, чтобы анимация была плавнее\n let newScrollOffset = stateRef.current.scrollOffset + delta;\n const roundedNewScrollOffset = Math.round(newScrollOffset);\n\n if (roundedNewScrollOffset >= LayoutMetrics.current.initialOffset) {\n // скролла нет (touchAction is null)\n // либо контент проскроллен в начало, тогда не даем скроллить дальше\n newScrollOffset = LayoutMetrics.current.initialOffset;\n if (stateRef.current.touchAction === 'scroll') {\n stateRef.current.touchAction = 'complete';\n }\n } else if (\n LayoutMetrics.current.contentHeight + roundedNewScrollOffset <=\n LayoutMetrics.current.visibleContentHeight\n ) {\n // скролла нет (touchAction is null)\n // либо контент проскроллен до конца, тогда не даем скроллить дальше\n newScrollOffset = LayoutMetrics.current.visibleContentHeight - LayoutMetrics.current.contentHeight;\n if (stateRef.current.touchAction === 'scroll') {\n stateRef.current.touchAction = 'complete';\n }\n } else {\n // скролл в процессе\n stateRef.current.touchAction = 'scroll';\n }\n\n if (stateRef.current.scrollOffset !== newScrollOffset) {\n const offsetWasPositive = stateRef.current.scrollOffset > 0;\n stateRef.current.scrollOffset = newScrollOffset;\n\n if (contentRef.current !== null && swipeContainerRef.current !== null) {\n if (newScrollOffset > 0) {\n if (!offsetWasPositive) {\n contentRef.current.style.transform = translateY(0);\n }\n swipeContainerRef.current.style.transform = translateY(newScrollOffset);\n if (footerRef.current !== null) {\n footerRef.current.style.transform = translateY(-newScrollOffset);\n }\n } else {\n contentRef.current.style.transform = translateY(newScrollOffset);\n if (offsetWasPositive) {\n swipeContainerRef.current.style.transform = translateY(0);\n if (footerRef.current !== null) {\n footerRef.current.style.transform = translateY(0);\n }\n }\n }\n }\n\n recalcScrollFlags();\n scrollContextProviderRef.current?.notify({\n scrollTop: Math.max(-stateRef.current.scrollOffset, 0),\n });\n }\n }\n };\n\n let focusedElementTouchY: number | null = null;\n\n const onTouchMove = (event: ScrollGestureEvent) => {\n if (\n (!allowScrollWhileFocused && stateRef.current.hasFocus) ||\n (stateRef.current.touchAction !== null && stateRef.current.touchAction !== 'scroll') ||\n hasSelectedText() ||\n (focusedElementRef.current !== null && focusedElementTouchY !== null)\n ) {\n return;\n }\n handleScroll(event.delta);\n };\n\n const onTouchEnd = () => {\n if (focusedElementTouchY !== null) {\n focusedElementTouchY = null;\n }\n if (stateRef.current.touchAction === 'scroll') {\n stateRef.current.touchAction = null;\n }\n };\n\n const handleTouchStart = (event: TouchEvent) => {\n if (stateRef.current.touchAction === 'complete') {\n stateRef.current.touchAction = null;\n }\n if (event.target === focusedElementRef.current && focusedElementRef.current !== null) {\n focusedElementTouchY = event.changedTouches[0].pageY;\n } else {\n focusedElementTouchY = null;\n swipeHandlers.onTouchStart(event);\n }\n };\n\n const handleTouchMove = (event: TouchEvent) => {\n event.preventDefault();\n event.stopPropagation();\n if (focusedElementRef.current !== null && focusedElementTouchY !== null) {\n focusedElementRef.current.scrollTop += focusedElementTouchY - event.changedTouches[0].pageY;\n focusedElementTouchY = event.changedTouches[0].pageY;\n } else {\n swipeHandlers.onTouchMove(event);\n }\n };\n\n const removeScrollHandlers = initScrollHandlers({\n axis: 'vertical',\n wrapperRef: visualContainerRef,\n onTouchMove,\n onTouchEnd,\n });\n visualContainer.addEventListener('touchstart', handleTouchStart);\n visualContainer.addEventListener('touchmove', handleTouchMove);\n visualContainer.addEventListener('touchend', swipeHandlers.onTouchEnd);\n visualContainer.addEventListener('touchcancel', swipeHandlers.onTouchCancel);\n\n return () => {\n removeScrollHandlers();\n visualContainer.removeEventListener('touchstart', handleTouchStart);\n visualContainer.removeEventListener('touchmove', handleTouchMove);\n visualContainer.removeEventListener('touchend', swipeHandlers.onTouchEnd);\n visualContainer.removeEventListener('touchcancel', swipeHandlers.onTouchCancel);\n };\n }, [allowScrollWhileFocused, recalcScrollFlags, swipeHandlers]);\n\n // при изменении высоты контента анимируем ее\n // задаем боттомшиту фиксированную высоту и пересчитываем ее самостоятельно,\n // чтобы не было мерцания, когда новый контент отрисовался до срабатывания колбека ResizeObserver\n const initHeightObserver = useCallback(() => {\n const visualContainer = visualContainerRef.current;\n if (!visualContainer) {\n return void 0;\n }\n\n let prevContentHeight = 0;\n let prevHeaderHeight = 0;\n let prevFooterHeight = 0;\n let prevVisibleContentHeight = 0;\n let skipFirstResizeCallback = true;\n let collapseResizeCallbacks = false;\n\n const handleHeightChange = () => {\n LayoutMetrics.current.invalidateCache();\n\n if (skipFirstResizeCallback) {\n visualContainer.style.height = `${LayoutMetrics.current.bottomSheetHeight}px`;\n prevHeaderHeight = LayoutMetrics.current.headerHeight;\n prevContentHeight = LayoutMetrics.current.contentHeight;\n prevFooterHeight = LayoutMetrics.current.footerHeight;\n prevVisibleContentHeight = LayoutMetrics.current.visibleContentHeight;\n\n skipFirstResizeCallback = false;\n return;\n }\n\n if (stateRef.current.heightAnimationDiff !== null) {\n if (!collapseResizeCallbacks) {\n // если предыдущая анимация не завершилась, без анимации сбрасываем высоту на вычисленную браузером\n visualContainer.style.height = ``;\n }\n } else {\n const contentHeightDiff = LayoutMetrics.current.contentHeight - prevContentHeight;\n const containersHeightDiff =\n LayoutMetrics.current.headerHeight -\n prevHeaderHeight +\n LayoutMetrics.current.footerHeight -\n prevFooterHeight;\n\n // предположим, что scrollContainer останется таким же или станет меньше\n // тогда можем рассчитать минимальную видимую высоту контента как min(scrollContainer.height, contentHeight)\n const _prevVisibleContentHeight = Math.min(prevVisibleContentHeight, prevContentHeight);\n const newMinVisibleContentHeight = Math.min(\n prevVisibleContentHeight - containersHeightDiff,\n LayoutMetrics.current.contentHeight\n );\n const minVisibleContentHeightDiff = newMinVisibleContentHeight - _prevVisibleContentHeight;\n\n // предположим, что scrollContainer станет больше\n // тогда контент не может увеличиться больше, чем на расстояние между боттомшитом и верхним краем экрана\n const maxVisibleContentHeightDiff =\n LayoutMetrics.current.remainingAvailableHeight - containersHeightDiff;\n\n const visibleContentHeightDiff = Math.min(\n Math.max(contentHeightDiff, minVisibleContentHeightDiff),\n maxVisibleContentHeightDiff\n );\n if (visibleContentHeightDiff !== 0) {\n resetScrollPosition();\n }\n\n const heightAnimationDiff = visibleContentHeightDiff + containersHeightDiff;\n if (heightAnimationDiff !== 0) {\n // запоминаем высоту scrollContainer после того, как боттомшиту будет присвоена новая высота.\n // до этого значение некорректно, т.к. новый контент уже был отрендерен,\n // но в инлайн-стилях боттомшита остается старая высота\n stateRef.current.heightAnimationDiff = heightAnimationDiff;\n stateRef.current.heightAnimationCallback = () => {\n prevVisibleContentHeight = LayoutMetrics.current.visibleContentHeight;\n };\n\n setHeightAnimationRunning(true);\n\n collapseResizeCallbacks = true;\n requestAnimationFrame(() => {\n collapseResizeCallbacks = false;\n });\n } else {\n recalcContentOverlayPosition();\n recalcScrollFlags();\n }\n }\n\n prevHeaderHeight = LayoutMetrics.current.headerHeight;\n prevContentHeight = LayoutMetrics.current.contentHeight;\n prevFooterHeight = LayoutMetrics.current.footerHeight;\n };\n\n const resizeObserver = new ResizeObserver(handleHeightChange);\n const content = contentRef.current;\n const footer = footerRef.current;\n const header = headerRef.current;\n\n content !== null && resizeObserver.observe(content);\n footer !== null && resizeObserver.observe(footer);\n header !== null && header.addHeightObserver(handleHeightChange);\n\n return () => {\n resizeObserver.disconnect();\n header !== null && header.removeHeightObserver(handleHeightChange);\n };\n }, [setHeightAnimationRunning, recalcScrollFlags, recalcContentOverlayPosition, resetScrollPosition]);\n\n const handleAppearAnimationEnd = useCallback(() => {\n const removeHeightObserver = initHeightObserver();\n removeHeightObserver && stateRef.current.exitHandlers.push(removeHeightObserver);\n\n const removeTransformHandlers = deviceFlagsRef.current.useCustomScroll && initTransformHandlers();\n removeTransformHandlers && stateRef.current.exitHandlers.push(removeTransformHandlers);\n\n onAppearRef.current?.();\n }, [initHeightObserver, initTransformHandlers]);\n\n const { onTouchEnd, ...eventHandlers } = useNoBubbling();\n\n if (!animationTimeout) {\n return null;\n }\n\n const renderFunc = (appearTransition: TransitionStatus, heightTransition: TransitionStatus) => {\n const navigationBar =\n header && isNavigationBarComponent(header) ? (\n <NavigationBarComponent {...header.props} forwardedRef={headerRef} />\n ) : null;\n\n const content = (\n <div\n className={classnames(styles.content, {\n [styles.contentFullScreen]: height === 'full-screen',\n [styles.contentWithPaddings]: withContentPaddings,\n [styles.contentWithoutHeader]: !header,\n [styles.contentSizedFullScreen]: isContentSizedFullHeight,\n })}\n ref={contentRef}\n >\n <BottomSheetContext.Provider value={bottomSheetContext}>{children}</BottomSheetContext.Provider>\n </div>\n );\n\n const scrollContainer = deviceFlagsRef.current.useCustomScroll ? (\n <CustomScrollContextProvider ref={scrollContextProviderRef}>\n <div className={styles.scrollContainer} onFocus={handleFocus} ref={scrollContainerRef}>\n {navigationBar}\n {content}\n </div>\n </CustomScrollContextProvider>\n ) : (\n <div\n className={classnames(styles.scrollContainer, styles.nativeScrollContainer)}\n onFocus={handleFocus}\n onScroll={recalcScrollFlags}\n ref={scrollContainerRef}\n >\n {navigationBar}\n {content}\n </div>\n );\n\n const clonedFooter =\n footer && isActionBarComponent(footer)\n ? cloneElement(footer, { type: footer.props.type || 'mobile', showDivider: false })\n : footer;\n\n return (\n <Layer layer={InternalLayerName.BottomSheet}>\n <div {...eventHandlers} className={styles.overlay}>\n <div\n className={classnames(styles.overlayBackground, {\n [styles.overlayBackgroundVisible]: showOverlay,\n [styles.appearAnimation]: appearTransition === 'entering',\n [styles.disappearAnimation]: appearTransition === 'exiting',\n })}\n {...(appearTransition === 'entered'\n ? { 'data-qa': 'bottom-sheet-overlay', onClick: onCloseRef.current }\n : {})}\n ref={overlayRef}\n />\n <div\n className={classnames(styles.swipeContainer, {\n [styles.appearAnimation]: appearTransition === 'entering',\n [styles.closeBySwipeAnimation]:\n appearTransition === 'exiting' && stateRef.current.touchAction === 'swipe',\n [styles.disappearAnimation]: appearTransition === 'exiting',\n })}\n data-qa={appearTransition === 'entered' ? 'bottom-sheet-container' : undefined}\n ref={swipeContainerRef}\n >\n <div\n className={classnames(styles.grabber, styles.grabberTransitionAnimation, {\n [styles.grabberEnsureSafe]: stateRef.current.grabberUnsafe,\n })}\n ref={grabberRef}\n />\n <div\n className={classnames(styles.visualContainer, {\n [styles.visualContainerFullScreen]: height === 'full-screen',\n [styles.heightTransitionAnimation]: heightTransition === 'entering',\n })}\n data-qa={appearTransition === 'entered' ? 'bottom-sheet-content' : undefined}\n ref={bottomSheetRef}\n >\n {scrollContainer}\n <div className={styles.footer} ref={footerRef}>\n {footer && (\n <div\n className={classnames(styles.divider, {\n [styles.dividerVisible]: stateRef.current.dividerVisible,\n })}\n ref={dividerRef}\n >\n <Divider />\n </div>\n )}\n {interceptClickHandlers ? (\n <ClickInterceptor>{clonedFooter}</ClickInterceptor>\n ) : (\n clonedFooter\n )}\n </div>\n </div>\n <div className={styles.contentOverlay} ref={contentOverlayRef} />\n </div>\n </div>\n </Layer>\n );\n };\n\n return createPortal(\n <div\n className={styles.cssVariablesContainer}\n data-qa=\"bottom-sheet-css-variables\"\n ref={cssVariablesContainerRef}\n >\n <Transition\n appear\n in={currentVisible}\n mountOnEnter\n onEnter={setTransformToInvisible}\n onEntering={setTransformToVisible}\n onEntered={handleAppearAnimationEnd}\n onExit={handleExitAnimationStart}\n onExiting={setTransformToInvisible}\n onExited={handleExitAnimationEnd}\n timeout={animationTimeout.appear}\n unmountOnExit\n nodeRef={contentRef}\n >\n {(appearTransition) => (\n <Transition\n in={heightAnimationRunning}\n onEnter={handleHeightAnimationStart}\n onEntered={handleHeightAnimationEnd}\n timeout={animationTimeout.height}\n nodeRef={contentRef}\n >\n {(heightTransition) => renderFunc(appearTransition, heightTransition)}\n </Transition>\n )}\n </Transition>\n </div>,\n document.body\n );\n};\n\nexport const BottomSheet = forwardRef(BottomSheetRenderFunc);\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
package/BottomSheetFooter.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import './index.css';
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
import { s as styles } from './bottom-sheet-
|
|
3
|
+
import { s as styles } from './bottom-sheet-DzLpRO8F.js';
|
|
4
4
|
|
|
5
5
|
const BottomSheetFooter = ({ children }) => (jsx("div", { className: styles.footerWithPadding, children: children }));
|
|
6
6
|
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import './index.css';
|
|
2
|
+
var styles = {"flex-container":"magritte-flex-container___muHAx_5-5-8","flexContainer":"magritte-flex-container___muHAx_5-5-8","animation-timeout":"magritte-animation-timeout___yd-SZ_5-5-8","animationTimeout":"magritte-animation-timeout___yd-SZ_5-5-8","css-variables-container":"magritte-css-variables-container___jBCr9_5-5-8","cssVariablesContainer":"magritte-css-variables-container___jBCr9_5-5-8","appear-animation":"magritte-appear-animation___P84Ln_5-5-8","appearAnimation":"magritte-appear-animation___P84Ln_5-5-8","disappear-animation":"magritte-disappear-animation___Putks_5-5-8","disappearAnimation":"magritte-disappear-animation___Putks_5-5-8","grabber-transition-animation":"magritte-grabber-transition-animation___s3Oh4_5-5-8","grabberTransitionAnimation":"magritte-grabber-transition-animation___s3Oh4_5-5-8","height-transition-animation":"magritte-height-transition-animation___xNprr_5-5-8","heightTransitionAnimation":"magritte-height-transition-animation___xNprr_5-5-8","close-by-swipe-animation":"magritte-close-by-swipe-animation___wdezY_5-5-8","closeBySwipeAnimation":"magritte-close-by-swipe-animation___wdezY_5-5-8","swipe-cancel-animation":"magritte-swipe-cancel-animation___AhYj5_5-5-8","swipeCancelAnimation":"magritte-swipe-cancel-animation___AhYj5_5-5-8","overlay":"magritte-overlay___5a2U-_5-5-8","overlay-background":"magritte-overlay-background___8Sd4V_5-5-8","overlayBackground":"magritte-overlay-background___8Sd4V_5-5-8","overlay-background_visible":"magritte-overlay-background_visible___FOJgj_5-5-8","overlayBackgroundVisible":"magritte-overlay-background_visible___FOJgj_5-5-8","swipe-container":"magritte-swipe-container___sZ2n5_5-5-8","swipeContainer":"magritte-swipe-container___sZ2n5_5-5-8","grabber":"magritte-grabber___A7SB-_5-5-8","grabber_ensure-safe":"magritte-grabber_ensure-safe___DR-dV_5-5-8","grabberEnsureSafe":"magritte-grabber_ensure-safe___DR-dV_5-5-8","visual-container":"magritte-visual-container___-VSuY_5-5-8","visualContainer":"magritte-visual-container___-VSuY_5-5-8","visual-container_full-screen":"magritte-visual-container_full-screen___jCCBb_5-5-8","visualContainerFullScreen":"magritte-visual-container_full-screen___jCCBb_5-5-8","scroll-container":"magritte-scroll-container___4ngNY_5-5-8","scrollContainer":"magritte-scroll-container___4ngNY_5-5-8","native-scroll-container":"magritte-native-scroll-container___JOlxE_5-5-8","nativeScrollContainer":"magritte-native-scroll-container___JOlxE_5-5-8","content":"magritte-content___1gAwP_5-5-8","content_full-screen":"magritte-content_full-screen___2SFaO_5-5-8","contentFullScreen":"magritte-content_full-screen___2SFaO_5-5-8","content_sized-full-screen":"magritte-content_sized-full-screen___45pa6_5-5-8","contentSizedFullScreen":"magritte-content_sized-full-screen___45pa6_5-5-8","content_with-paddings":"magritte-content_with-paddings___gIiAv_5-5-8","contentWithPaddings":"magritte-content_with-paddings___gIiAv_5-5-8","footer":"magritte-footer___RWslT_5-5-8","footer-with-padding":"magritte-footer-with-padding___KwkhC_5-5-8","footerWithPadding":"magritte-footer-with-padding___KwkhC_5-5-8","divider":"magritte-divider___0F8hh_5-5-8","divider_visible":"magritte-divider_visible___pAWZM_5-5-8","dividerVisible":"magritte-divider_visible___pAWZM_5-5-8","content-overlay":"magritte-content-overlay___HAyzL_5-5-8","contentOverlay":"magritte-content-overlay___HAyzL_5-5-8"};
|
|
3
|
+
|
|
4
|
+
export { styles as s };
|
|
5
|
+
//# sourceMappingURL=bottom-sheet-DzLpRO8F.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bottom-sheet-DzLpRO8F.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
package/index.css
CHANGED
|
@@ -19,13 +19,13 @@
|
|
|
19
19
|
--magritte-color-component-bottom-sheet-grabber-content-v19-1-2:#c6c6c68f;
|
|
20
20
|
--magritte-color-component-_overlay-background-content-v19-1-2:#26262699;
|
|
21
21
|
}
|
|
22
|
-
.magritte-flex-container___muHAx_5-5-
|
|
22
|
+
.magritte-flex-container___muHAx_5-5-8{
|
|
23
23
|
display:flex;
|
|
24
24
|
flex-direction:column;
|
|
25
25
|
align-items:stretch;
|
|
26
26
|
}
|
|
27
|
-
.magritte-animation-timeout___yd-SZ_5-5-
|
|
28
|
-
.magritte-css-variables-container___jBCr9_5-5-
|
|
27
|
+
.magritte-animation-timeout___yd-SZ_5-5-8,
|
|
28
|
+
.magritte-css-variables-container___jBCr9_5-5-8{
|
|
29
29
|
--virtual-keyboard-top-offset:0px;
|
|
30
30
|
--virtual-keyboard-bottom-offset:0px;
|
|
31
31
|
--enter-animation-duration:0ms;
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
--swipe-cancel-transition-duration:0ms;
|
|
36
36
|
}
|
|
37
37
|
@media (prefers-reduced-motion: no-preference){
|
|
38
|
-
.magritte-animation-timeout___yd-SZ_5-5-
|
|
39
|
-
.magritte-css-variables-container___jBCr9_5-5-
|
|
38
|
+
.magritte-animation-timeout___yd-SZ_5-5-8,
|
|
39
|
+
.magritte-css-variables-container___jBCr9_5-5-8{
|
|
40
40
|
--enter-animation-duration:var(--magritte-semantic-animation-ease-in-out-300-duration-v19-1-2);
|
|
41
41
|
--exit-animation-duration:var(--magritte-semantic-animation-ease-in-out-200-duration-v19-1-2);
|
|
42
42
|
--grabber-animation-duration:var(--magritte-semantic-animation-ease-in-out-200-duration-v19-1-2);
|
|
@@ -44,52 +44,52 @@
|
|
|
44
44
|
--swipe-cancel-transition-duration:var(--magritte-semantic-animation-ease-in-out-100-duration-v19-1-2);
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
|
-
.magritte-appear-animation___P84Ln_5-5-
|
|
47
|
+
.magritte-appear-animation___P84Ln_5-5-8{
|
|
48
48
|
transition-property:transform opacity;
|
|
49
49
|
transition-duration:var(--enter-animation-duration);
|
|
50
50
|
transition-timing-function:var(--magritte-semantic-animation-ease-in-out-300-timing-function-v19-1-2);
|
|
51
51
|
}
|
|
52
|
-
.magritte-disappear-animation___Putks_5-5-
|
|
52
|
+
.magritte-disappear-animation___Putks_5-5-8{
|
|
53
53
|
transition-property:transform opacity;
|
|
54
54
|
transition-duration:var(--exit-animation-duration);
|
|
55
55
|
transition-timing-function:var(--magritte-semantic-animation-ease-in-out-200-timing-function-v19-1-2);
|
|
56
56
|
}
|
|
57
|
-
.magritte-grabber-transition-animation___s3Oh4_5-5-
|
|
57
|
+
.magritte-grabber-transition-animation___s3Oh4_5-5-8::after{
|
|
58
58
|
transition-property:transform;
|
|
59
59
|
transition-duration:var(--grabber-animation-duration);
|
|
60
60
|
transition-timing-function:var(--magritte-semantic-animation-ease-in-out-200-timing-function-v19-1-2);
|
|
61
61
|
}
|
|
62
|
-
.magritte-height-transition-animation___xNprr_5-5-
|
|
62
|
+
.magritte-height-transition-animation___xNprr_5-5-8{
|
|
63
63
|
transition-property:height;
|
|
64
64
|
transition-duration:var(--height-transition-duration);
|
|
65
65
|
transition-timing-function:var(--magritte-semantic-animation-ease-in-out-400-timing-function-v19-1-2);
|
|
66
66
|
}
|
|
67
|
-
.magritte-close-by-swipe-animation___wdezY_5-5-
|
|
67
|
+
.magritte-close-by-swipe-animation___wdezY_5-5-8{
|
|
68
68
|
transition-property:transform;
|
|
69
69
|
transition-duration:var(--exit-animation-duration);
|
|
70
70
|
transition-timing-function:linear;
|
|
71
71
|
}
|
|
72
|
-
.magritte-swipe-cancel-animation___AhYj5_5-5-
|
|
72
|
+
.magritte-swipe-cancel-animation___AhYj5_5-5-8{
|
|
73
73
|
transition-property:transform;
|
|
74
74
|
transition-duration:var(--swipe-cancel-transition-duration);
|
|
75
75
|
transition-timing-function:var(--magritte-semantic-animation-ease-in-out-100-duration-v19-1-2);
|
|
76
76
|
}
|
|
77
|
-
.magritte-overlay___5a2U-_5-5-
|
|
77
|
+
.magritte-overlay___5a2U-_5-5-8{
|
|
78
78
|
pointer-events:none;
|
|
79
79
|
position:fixed;
|
|
80
80
|
inset:0;
|
|
81
81
|
}
|
|
82
|
-
.magritte-overlay-background___8Sd4V_5-5-
|
|
82
|
+
.magritte-overlay-background___8Sd4V_5-5-8{
|
|
83
83
|
position:absolute;
|
|
84
84
|
inset:0;
|
|
85
85
|
will-change:opacity;
|
|
86
86
|
transform:translate3d(0, 0, 0);
|
|
87
87
|
}
|
|
88
|
-
.magritte-overlay-background_visible___FOJgj_5-5-
|
|
88
|
+
.magritte-overlay-background_visible___FOJgj_5-5-8{
|
|
89
89
|
pointer-events:initial;
|
|
90
90
|
background-color:var(--magritte-color-component-_overlay-background-content-v19-1-2);
|
|
91
91
|
}
|
|
92
|
-
.magritte-swipe-container___sZ2n5_5-5-
|
|
92
|
+
.magritte-swipe-container___sZ2n5_5-5-8{
|
|
93
93
|
display:flex;
|
|
94
94
|
flex-direction:column;
|
|
95
95
|
align-items:stretch;
|
|
@@ -99,11 +99,11 @@
|
|
|
99
99
|
will-change:transform;
|
|
100
100
|
transform:translate3d(0, 0, 0);
|
|
101
101
|
}
|
|
102
|
-
.magritte-grabber___A7SB-_5-5-
|
|
102
|
+
.magritte-grabber___A7SB-_5-5-8{
|
|
103
103
|
flex:0 0 20px;
|
|
104
104
|
position:relative;
|
|
105
105
|
}
|
|
106
|
-
.magritte-grabber___A7SB-_5-5-
|
|
106
|
+
.magritte-grabber___A7SB-_5-5-8::after{
|
|
107
107
|
content:'';
|
|
108
108
|
position:absolute;
|
|
109
109
|
top:8px;
|
|
@@ -114,10 +114,10 @@
|
|
|
114
114
|
border-radius:var(--magritte-static-border-radius-50-v19-1-2);
|
|
115
115
|
z-index:3;
|
|
116
116
|
}
|
|
117
|
-
.magritte-grabber_ensure-safe___DR-dV_5-5-
|
|
117
|
+
.magritte-grabber_ensure-safe___DR-dV_5-5-8::after{
|
|
118
118
|
transform:translateY(20px);
|
|
119
119
|
}
|
|
120
|
-
.magritte-visual-container___-VSuY_5-5-
|
|
120
|
+
.magritte-visual-container___-VSuY_5-5-8{
|
|
121
121
|
display:flex;
|
|
122
122
|
flex-direction:column;
|
|
123
123
|
align-items:stretch;
|
|
@@ -130,11 +130,11 @@
|
|
|
130
130
|
overflow:clip;
|
|
131
131
|
user-select:text;
|
|
132
132
|
}
|
|
133
|
-
.magritte-visual-container_full-screen___jCCBb_5-5-
|
|
133
|
+
.magritte-visual-container_full-screen___jCCBb_5-5-8{
|
|
134
134
|
flex:1 1 auto;
|
|
135
135
|
min-height:1px;
|
|
136
136
|
}
|
|
137
|
-
.magritte-scroll-container___4ngNY_5-5-
|
|
137
|
+
.magritte-scroll-container___4ngNY_5-5-8{
|
|
138
138
|
--magritte-ui-navigation-bar-background-override:var(--magritte-color-component-bottom-sheet-background-content-v19-1-2);
|
|
139
139
|
--magritte-ui-navigation-bar-top-padding-override:16px;
|
|
140
140
|
display:flex;
|
|
@@ -144,14 +144,14 @@
|
|
|
144
144
|
min-height:1px;
|
|
145
145
|
z-index:1;
|
|
146
146
|
}
|
|
147
|
-
.magritte-native-scroll-container___JOlxE_5-5-
|
|
147
|
+
.magritte-native-scroll-container___JOlxE_5-5-8{
|
|
148
148
|
overflow:scroll;
|
|
149
149
|
scrollbar-width:none;
|
|
150
150
|
}
|
|
151
|
-
.magritte-native-scroll-container___JOlxE_5-5-
|
|
151
|
+
.magritte-native-scroll-container___JOlxE_5-5-8::-webkit-scrollbar{
|
|
152
152
|
display:none;
|
|
153
153
|
}
|
|
154
|
-
.magritte-content___1gAwP_5-5-
|
|
154
|
+
.magritte-content___1gAwP_5-5-8{
|
|
155
155
|
display:flex;
|
|
156
156
|
flex-direction:column;
|
|
157
157
|
align-items:stretch;
|
|
@@ -160,36 +160,36 @@
|
|
|
160
160
|
will-change:transform;
|
|
161
161
|
transform:translate3d(0, 0, 0);
|
|
162
162
|
}
|
|
163
|
-
.magritte-content_full-screen___2SFaO_5-5-
|
|
163
|
+
.magritte-content_full-screen___2SFaO_5-5-8{
|
|
164
164
|
flex:1 0 auto;
|
|
165
165
|
}
|
|
166
|
-
.magritte-content_sized-full-screen___45pa6_5-5-
|
|
166
|
+
.magritte-content_sized-full-screen___45pa6_5-5-8{
|
|
167
167
|
flex:1 1 auto;
|
|
168
168
|
min-height:1px;
|
|
169
169
|
}
|
|
170
|
-
.magritte-content_with-paddings___gIiAv_5-5-
|
|
170
|
+
.magritte-content_with-paddings___gIiAv_5-5-8{
|
|
171
171
|
padding:16px 16px 0;
|
|
172
172
|
}
|
|
173
|
-
.magritte-footer___RWslT_5-5-
|
|
173
|
+
.magritte-footer___RWslT_5-5-8{
|
|
174
174
|
flex:0 0 auto;
|
|
175
175
|
background-color:var(--magritte-color-component-bottom-sheet-background-content-v19-1-2);
|
|
176
176
|
z-index:2;
|
|
177
177
|
will-change:transform;
|
|
178
178
|
transform:translate3d(0, 0, 0);
|
|
179
179
|
}
|
|
180
|
-
.magritte-footer-with-padding___KwkhC_5-5-
|
|
180
|
+
.magritte-footer-with-padding___KwkhC_5-5-8{
|
|
181
181
|
display:flex;
|
|
182
182
|
flex-direction:column;
|
|
183
183
|
gap:12px;
|
|
184
184
|
padding:16px;
|
|
185
185
|
}
|
|
186
|
-
.magritte-divider___0F8hh_5-5-
|
|
186
|
+
.magritte-divider___0F8hh_5-5-8{
|
|
187
187
|
visibility:hidden;
|
|
188
188
|
}
|
|
189
|
-
.magritte-divider_visible___pAWZM_5-5-
|
|
189
|
+
.magritte-divider_visible___pAWZM_5-5-8{
|
|
190
190
|
visibility:visible;
|
|
191
191
|
}
|
|
192
|
-
.magritte-content-overlay___HAyzL_5-5-
|
|
192
|
+
.magritte-content-overlay___HAyzL_5-5-8{
|
|
193
193
|
pointer-events:none;
|
|
194
194
|
position:absolute;
|
|
195
195
|
inset:0;
|
package/index.js
CHANGED
|
@@ -22,5 +22,5 @@ import '@hh.ru/magritte-ui-divider';
|
|
|
22
22
|
import '@hh.ru/magritte-ui-layer';
|
|
23
23
|
import '@hh.ru/magritte-ui-navigation-bar';
|
|
24
24
|
import '@hh.ru/magritte-ui-tree-selector';
|
|
25
|
-
import './bottom-sheet-
|
|
25
|
+
import './bottom-sheet-DzLpRO8F.js';
|
|
26
26
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hh.ru/magritte-ui-bottom-sheet",
|
|
3
|
-
"version": "5.5.
|
|
3
|
+
"version": "5.5.8",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"types": "index.d.ts",
|
|
6
6
|
"sideEffects": [
|
|
@@ -33,9 +33,9 @@
|
|
|
33
33
|
"@hh.ru/magritte-ui-divider": "1.1.35",
|
|
34
34
|
"@hh.ru/magritte-ui-layer": "2.1.0",
|
|
35
35
|
"@hh.ru/magritte-ui-mock-component": "1.0.11",
|
|
36
|
-
"@hh.ru/magritte-ui-navigation-bar": "6.3.
|
|
36
|
+
"@hh.ru/magritte-ui-navigation-bar": "6.3.3",
|
|
37
37
|
"@hh.ru/magritte-ui-theme-provider": "1.1.31",
|
|
38
|
-
"@hh.ru/magritte-ui-tree-selector": "4.4.
|
|
38
|
+
"@hh.ru/magritte-ui-tree-selector": "4.4.16"
|
|
39
39
|
},
|
|
40
40
|
"peerDependencies": {
|
|
41
41
|
"classnames": ">=2.3.2",
|
|
@@ -46,5 +46,5 @@
|
|
|
46
46
|
"publishConfig": {
|
|
47
47
|
"access": "public"
|
|
48
48
|
},
|
|
49
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "dbc45b2e706faaa5274d3e9de158a37c5dce7125"
|
|
50
50
|
}
|
package/bottom-sheet-DP0QAW6i.js
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import './index.css';
|
|
2
|
-
var styles = {"flex-container":"magritte-flex-container___muHAx_5-5-6","flexContainer":"magritte-flex-container___muHAx_5-5-6","animation-timeout":"magritte-animation-timeout___yd-SZ_5-5-6","animationTimeout":"magritte-animation-timeout___yd-SZ_5-5-6","css-variables-container":"magritte-css-variables-container___jBCr9_5-5-6","cssVariablesContainer":"magritte-css-variables-container___jBCr9_5-5-6","appear-animation":"magritte-appear-animation___P84Ln_5-5-6","appearAnimation":"magritte-appear-animation___P84Ln_5-5-6","disappear-animation":"magritte-disappear-animation___Putks_5-5-6","disappearAnimation":"magritte-disappear-animation___Putks_5-5-6","grabber-transition-animation":"magritte-grabber-transition-animation___s3Oh4_5-5-6","grabberTransitionAnimation":"magritte-grabber-transition-animation___s3Oh4_5-5-6","height-transition-animation":"magritte-height-transition-animation___xNprr_5-5-6","heightTransitionAnimation":"magritte-height-transition-animation___xNprr_5-5-6","close-by-swipe-animation":"magritte-close-by-swipe-animation___wdezY_5-5-6","closeBySwipeAnimation":"magritte-close-by-swipe-animation___wdezY_5-5-6","swipe-cancel-animation":"magritte-swipe-cancel-animation___AhYj5_5-5-6","swipeCancelAnimation":"magritte-swipe-cancel-animation___AhYj5_5-5-6","overlay":"magritte-overlay___5a2U-_5-5-6","overlay-background":"magritte-overlay-background___8Sd4V_5-5-6","overlayBackground":"magritte-overlay-background___8Sd4V_5-5-6","overlay-background_visible":"magritte-overlay-background_visible___FOJgj_5-5-6","overlayBackgroundVisible":"magritte-overlay-background_visible___FOJgj_5-5-6","swipe-container":"magritte-swipe-container___sZ2n5_5-5-6","swipeContainer":"magritte-swipe-container___sZ2n5_5-5-6","grabber":"magritte-grabber___A7SB-_5-5-6","grabber_ensure-safe":"magritte-grabber_ensure-safe___DR-dV_5-5-6","grabberEnsureSafe":"magritte-grabber_ensure-safe___DR-dV_5-5-6","visual-container":"magritte-visual-container___-VSuY_5-5-6","visualContainer":"magritte-visual-container___-VSuY_5-5-6","visual-container_full-screen":"magritte-visual-container_full-screen___jCCBb_5-5-6","visualContainerFullScreen":"magritte-visual-container_full-screen___jCCBb_5-5-6","scroll-container":"magritte-scroll-container___4ngNY_5-5-6","scrollContainer":"magritte-scroll-container___4ngNY_5-5-6","native-scroll-container":"magritte-native-scroll-container___JOlxE_5-5-6","nativeScrollContainer":"magritte-native-scroll-container___JOlxE_5-5-6","content":"magritte-content___1gAwP_5-5-6","content_full-screen":"magritte-content_full-screen___2SFaO_5-5-6","contentFullScreen":"magritte-content_full-screen___2SFaO_5-5-6","content_sized-full-screen":"magritte-content_sized-full-screen___45pa6_5-5-6","contentSizedFullScreen":"magritte-content_sized-full-screen___45pa6_5-5-6","content_with-paddings":"magritte-content_with-paddings___gIiAv_5-5-6","contentWithPaddings":"magritte-content_with-paddings___gIiAv_5-5-6","footer":"magritte-footer___RWslT_5-5-6","footer-with-padding":"magritte-footer-with-padding___KwkhC_5-5-6","footerWithPadding":"magritte-footer-with-padding___KwkhC_5-5-6","divider":"magritte-divider___0F8hh_5-5-6","divider_visible":"magritte-divider_visible___pAWZM_5-5-6","dividerVisible":"magritte-divider_visible___pAWZM_5-5-6","content-overlay":"magritte-content-overlay___HAyzL_5-5-6","contentOverlay":"magritte-content-overlay___HAyzL_5-5-6"};
|
|
3
|
-
|
|
4
|
-
export { styles as s };
|
|
5
|
-
//# sourceMappingURL=bottom-sheet-DP0QAW6i.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bottom-sheet-DP0QAW6i.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|