@alfalab/core-components-popup-sheet 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Component-9211a437.d.ts +38 -0
- package/Component.d.ts +47 -0
- package/Component.desktop-2e2b2125.d.ts +6 -0
- package/Component.js +139 -0
- package/components/backdrop/Component.d.ts +14 -0
- package/components/backdrop/Component.js +22 -0
- package/components/backdrop/index.css +36 -0
- package/components/backdrop/index.d.ts +1 -0
- package/components/backdrop/index.js +12 -0
- package/cssm/Component-9211a437.d.ts +38 -0
- package/cssm/Component.d.ts +47 -0
- package/cssm/Component.desktop-2e2b2125.d.ts +6 -0
- package/cssm/Component.js +139 -0
- package/cssm/components/backdrop/Component.d.ts +14 -0
- package/cssm/components/backdrop/Component.js +21 -0
- package/cssm/components/backdrop/index.d.ts +1 -0
- package/cssm/components/backdrop/index.js +13 -0
- package/cssm/components/backdrop/index.module.css +35 -0
- package/cssm/desktop-2e2b2125.d.ts +2 -0
- package/cssm/index-ebda875c.d.ts +1 -0
- package/cssm/index.d.ts +1 -0
- package/cssm/index.js +20 -0
- package/cssm/index.module.css +52 -0
- package/cssm/typings-9211a437.d.ts +95 -0
- package/desktop-2e2b2125.d.ts +2 -0
- package/esm/Component-9211a437.d.ts +38 -0
- package/esm/Component.d.ts +47 -0
- package/esm/Component.desktop-2e2b2125.d.ts +6 -0
- package/esm/Component.js +130 -0
- package/esm/components/backdrop/Component.d.ts +14 -0
- package/esm/components/backdrop/Component.js +14 -0
- package/esm/components/backdrop/index.css +36 -0
- package/esm/components/backdrop/index.d.ts +1 -0
- package/esm/components/backdrop/index.js +4 -0
- package/esm/desktop-2e2b2125.d.ts +2 -0
- package/esm/index-ebda875c.d.ts +1 -0
- package/esm/index.css +53 -0
- package/esm/index.d.ts +1 -0
- package/esm/index.js +10 -0
- package/esm/typings-9211a437.d.ts +95 -0
- package/index-ebda875c.d.ts +1 -0
- package/index.css +53 -0
- package/index.d.ts +1 -0
- package/index.js +18 -0
- package/modern/Component-9211a437.d.ts +38 -0
- package/modern/Component.d.ts +47 -0
- package/modern/Component.desktop-2e2b2125.d.ts +6 -0
- package/modern/Component.js +136 -0
- package/modern/components/backdrop/Component.d.ts +14 -0
- package/modern/components/backdrop/Component.js +15 -0
- package/modern/components/backdrop/index.css +36 -0
- package/modern/components/backdrop/index.d.ts +1 -0
- package/modern/components/backdrop/index.js +3 -0
- package/modern/desktop-2e2b2125.d.ts +2 -0
- package/modern/index-ebda875c.d.ts +1 -0
- package/modern/index.css +53 -0
- package/modern/index.d.ts +1 -0
- package/modern/index.js +9 -0
- package/modern/typings-9211a437.d.ts +95 -0
- package/package.json +26 -0
- package/src/Component.tsx +229 -0
- package/src/components/backdrop/Component.tsx +35 -0
- package/src/components/backdrop/index.module.css +25 -0
- package/src/components/backdrop/index.tsx +1 -0
- package/src/index.module.css +56 -0
- package/src/index.ts +1 -0
- package/typings-9211a437.d.ts +95 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { FC } from "react";
|
|
4
|
+
import { BaseButtonProps } from "./typings-9211a437";
|
|
5
|
+
type SpinnerProps = {
|
|
6
|
+
/**
|
|
7
|
+
* Управление видимостью компонента
|
|
8
|
+
*/
|
|
9
|
+
visible?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Размер компонента
|
|
12
|
+
*/
|
|
13
|
+
size?: "xs" | "s" | "m";
|
|
14
|
+
/**
|
|
15
|
+
* Дополнительный класс
|
|
16
|
+
*/
|
|
17
|
+
className?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Идентификатор компонента в DOM
|
|
20
|
+
*/
|
|
21
|
+
id?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Идентификатор для систем автоматизированного тестирования
|
|
24
|
+
*/
|
|
25
|
+
dataTestId?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Палитра, в контексте которой используется спиннер
|
|
28
|
+
*/
|
|
29
|
+
colors?: "default" | "inverted";
|
|
30
|
+
};
|
|
31
|
+
declare const Spinner: FC<SpinnerProps>;
|
|
32
|
+
/**
|
|
33
|
+
* Минимальное время отображения лоадера - 500мс,
|
|
34
|
+
* чтобы при быстрых ответах от сервера кнопка не «моргала».
|
|
35
|
+
*/
|
|
36
|
+
declare const LOADER_MIN_DISPLAY_INTERVAL = 500;
|
|
37
|
+
declare const BaseButton: React.ForwardRefExoticComponent<BaseButtonProps & React.RefAttributes<HTMLAnchorElement | HTMLButtonElement>>;
|
|
38
|
+
export { SpinnerProps, Spinner, LOADER_MIN_DISPLAY_INTERVAL, BaseButton };
|
package/Component.d.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { KeyboardEvent, MouseEvent } from "react";
|
|
4
|
+
import { BaseModalProps } from "@alfalab/core-components-base-modal";
|
|
5
|
+
type PaddingType = number | string | {
|
|
6
|
+
top?: number;
|
|
7
|
+
right?: number;
|
|
8
|
+
bottom?: number;
|
|
9
|
+
left?: number;
|
|
10
|
+
};
|
|
11
|
+
type PopupSheetProps = Omit<BaseModalProps, 'onClose'> & {
|
|
12
|
+
/**
|
|
13
|
+
* Наличие кнопки закрытия
|
|
14
|
+
*/
|
|
15
|
+
hasCloser?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Будет ли свайпаться шторка
|
|
18
|
+
*/
|
|
19
|
+
swipeable?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Отступы
|
|
22
|
+
*/
|
|
23
|
+
padding?: PaddingType;
|
|
24
|
+
/**
|
|
25
|
+
* Обработчик закрытия
|
|
26
|
+
*/
|
|
27
|
+
onClose?: (event: MouseEvent<HTMLElement> | KeyboardEvent<HTMLElement>, reason?: 'backdropClick' | 'escapeKeyDown' | 'closerClick' | 'swipe') => void;
|
|
28
|
+
};
|
|
29
|
+
declare const PopupSheet: React.ForwardRefExoticComponent<Omit<BaseModalProps, "onClose"> & {
|
|
30
|
+
/**
|
|
31
|
+
* Наличие кнопки закрытия
|
|
32
|
+
*/
|
|
33
|
+
hasCloser?: boolean | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* Будет ли свайпаться шторка
|
|
36
|
+
*/
|
|
37
|
+
swipeable?: boolean | undefined;
|
|
38
|
+
/**
|
|
39
|
+
* Отступы
|
|
40
|
+
*/
|
|
41
|
+
padding?: PaddingType | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* Обработчик закрытия
|
|
44
|
+
*/
|
|
45
|
+
onClose?: ((event: MouseEvent<HTMLElement> | KeyboardEvent<HTMLElement>, reason?: 'backdropClick' | 'escapeKeyDown' | 'closerClick' | 'swipe') => void) | undefined;
|
|
46
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
47
|
+
export { PopupSheetProps, PopupSheet };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { AnchorButtonProps, NativeButtonProps } from "./typings-9211a437";
|
|
4
|
+
type ButtonDesktopProps = Partial<AnchorButtonProps | NativeButtonProps>;
|
|
5
|
+
declare const ButtonDesktop: React.ForwardRefExoticComponent<ButtonDesktopProps & React.RefAttributes<HTMLAnchorElement | HTMLButtonElement>>;
|
|
6
|
+
export { ButtonDesktopProps, ButtonDesktop };
|
package/Component.js
ADDED
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var tslib = require('tslib');
|
|
6
|
+
var React = require('react');
|
|
7
|
+
var reactSwipeable = require('react-swipeable');
|
|
8
|
+
var cn = require('classnames');
|
|
9
|
+
var coreComponentsBaseModal = require('@alfalab/core-components-base-modal');
|
|
10
|
+
var shared = require('@alfalab/core-components-navigation-bar/shared');
|
|
11
|
+
var coreComponentsShared = require('@alfalab/core-components-shared');
|
|
12
|
+
var components_backdrop_Component = require('./components/backdrop/Component.js');
|
|
13
|
+
require('@alfalab/core-components-backdrop');
|
|
14
|
+
|
|
15
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
16
|
+
|
|
17
|
+
var React__default = /*#__PURE__*/_interopDefaultCompat(React);
|
|
18
|
+
var cn__default = /*#__PURE__*/_interopDefaultCompat(cn);
|
|
19
|
+
|
|
20
|
+
var styles = {"component":"popup-sheet__component_18ukp","closer":"popup-sheet__closer_18ukp","content":"popup-sheet__content_18ukp","appear":"popup-sheet__appear_18ukp","enter":"popup-sheet__enter_18ukp","appearActive":"popup-sheet__appearActive_18ukp","enterActive":"popup-sheet__enterActive_18ukp","exit":"popup-sheet__exit_18ukp","exitBySwipe":"popup-sheet__exitBySwipe_18ukp","exitActiveBySwipe":"popup-sheet__exitActiveBySwipe_18ukp","exitActive":"popup-sheet__exitActive_18ukp","exitDone":"popup-sheet__exitDone_18ukp"};
|
|
21
|
+
require('./index.css')
|
|
22
|
+
|
|
23
|
+
var SWIPE_VELOCITY = 0.3;
|
|
24
|
+
var CLOSE_OFFSET = 0.3;
|
|
25
|
+
var ANIMATION_DURATION = 350;
|
|
26
|
+
var DEFAULT_PADDING = 32;
|
|
27
|
+
var PopupSheet = React.forwardRef(function (_a, ref) {
|
|
28
|
+
var children = _a.children, hasCloser = _a.hasCloser, className = _a.className, onClose = _a.onClose, transitionProps = _a.transitionProps, contentProps = _a.contentProps, swipeable = _a.swipeable, dataTestId = _a.dataTestId, backdropProps = _a.backdropProps, _b = _a.padding, padding = _b === void 0 ? DEFAULT_PADDING : _b, restProps = tslib.__rest(_a, ["children", "hasCloser", "className", "onClose", "transitionProps", "contentProps", "swipeable", "dataTestId", "backdropProps", "padding"]);
|
|
29
|
+
var _c = React.useState(0), sheetOffset = _c[0], setSheetOffset = _c[1];
|
|
30
|
+
var _d = React.useState(1), backdropOpacity = _d[0], setBackdropOpacity = _d[1];
|
|
31
|
+
var sheetHeight = React.useRef(0);
|
|
32
|
+
var sheetRef = React.useRef(null);
|
|
33
|
+
var bySwipeCloseAnimation = React.useRef(false);
|
|
34
|
+
var getSheetOffset = function (deltaY) { return Math.max(0, deltaY); };
|
|
35
|
+
var getBackdropOpacity = function (offset) {
|
|
36
|
+
return Math.max(0, 1 - offset / sheetHeight.current);
|
|
37
|
+
};
|
|
38
|
+
var getSwipeStyles = function () {
|
|
39
|
+
return sheetOffset ? { transform: "translateY(".concat(sheetOffset, "px)") } : {};
|
|
40
|
+
};
|
|
41
|
+
var handleSwiping = function (_a) {
|
|
42
|
+
var deltaY = _a.deltaY;
|
|
43
|
+
var offset = getSheetOffset(deltaY);
|
|
44
|
+
setSheetOffset(offset);
|
|
45
|
+
setBackdropOpacity(getBackdropOpacity(offset));
|
|
46
|
+
};
|
|
47
|
+
var handleSwiped = function (_a) {
|
|
48
|
+
var deltaY = _a.deltaY, velocity = _a.velocity, event = _a.event;
|
|
49
|
+
var shouldCloseByVelocity = deltaY >= 0 && velocity >= SWIPE_VELOCITY;
|
|
50
|
+
var shouldCloseByOffset = deltaY >= sheetHeight.current * CLOSE_OFFSET;
|
|
51
|
+
var offset = sheetOffset;
|
|
52
|
+
var animDuration = ANIMATION_DURATION / 2;
|
|
53
|
+
var start;
|
|
54
|
+
if (shouldCloseByVelocity || shouldCloseByOffset) {
|
|
55
|
+
bySwipeCloseAnimation.current = true;
|
|
56
|
+
onClose === null || onClose === void 0 ? void 0 : onClose(event, 'swipe');
|
|
57
|
+
var runLoop_1 = function (timeStamp) {
|
|
58
|
+
if (!start)
|
|
59
|
+
start = timeStamp;
|
|
60
|
+
var elapsedTime = timeStamp - start;
|
|
61
|
+
if (elapsedTime <= animDuration) {
|
|
62
|
+
var nextOffset = offset +
|
|
63
|
+
(sheetHeight.current - offset) *
|
|
64
|
+
coreComponentsShared.easingFns.easeInOutQuad(elapsedTime / animDuration);
|
|
65
|
+
if (nextOffset > 0) {
|
|
66
|
+
setSheetOffset(nextOffset);
|
|
67
|
+
}
|
|
68
|
+
requestAnimationFrame(runLoop_1);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
setSheetOffset(0);
|
|
72
|
+
bySwipeCloseAnimation.current = false;
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
requestAnimationFrame(runLoop_1);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
var runLoop_2 = function (timeStamp) {
|
|
79
|
+
if (!start)
|
|
80
|
+
start = timeStamp;
|
|
81
|
+
var elapsedTime = timeStamp - start;
|
|
82
|
+
if (elapsedTime <= animDuration) {
|
|
83
|
+
var nextOffset = offset - offset * coreComponentsShared.easingFns.easeInOutQuad(elapsedTime / animDuration);
|
|
84
|
+
if (nextOffset > 0) {
|
|
85
|
+
setSheetOffset(nextOffset);
|
|
86
|
+
setBackdropOpacity(getBackdropOpacity(nextOffset));
|
|
87
|
+
}
|
|
88
|
+
requestAnimationFrame(runLoop_2);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
setSheetOffset(0);
|
|
92
|
+
setBackdropOpacity(1);
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
requestAnimationFrame(runLoop_2);
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
var handleEntered = function (node, isAppearing) {
|
|
99
|
+
bySwipeCloseAnimation.current = false;
|
|
100
|
+
if (sheetRef.current) {
|
|
101
|
+
sheetHeight.current = sheetRef.current.offsetHeight;
|
|
102
|
+
}
|
|
103
|
+
if (transitionProps === null || transitionProps === void 0 ? void 0 : transitionProps.onEntered) {
|
|
104
|
+
transitionProps.onEntered(node, isAppearing);
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
var handleExited = function (node) {
|
|
108
|
+
bySwipeCloseAnimation.current = false;
|
|
109
|
+
setSheetOffset(0);
|
|
110
|
+
setBackdropOpacity(1);
|
|
111
|
+
if (transitionProps === null || transitionProps === void 0 ? void 0 : transitionProps.onExited) {
|
|
112
|
+
transitionProps.onExited(node);
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
var sheetSwipeableHandlers = reactSwipeable.useSwipeable({
|
|
116
|
+
onSwiping: handleSwiping,
|
|
117
|
+
onSwiped: handleSwiped,
|
|
118
|
+
trackMouse: swipeable,
|
|
119
|
+
trackTouch: swipeable,
|
|
120
|
+
delta: 5,
|
|
121
|
+
});
|
|
122
|
+
return (React__default.default.createElement(coreComponentsBaseModal.BaseModal, tslib.__assign({}, restProps, { onClose: onClose, ref: ref, className: cn__default.default(styles.component, className), dataTestId: dataTestId, Backdrop: components_backdrop_Component.PopupBackdrop, backdropProps: tslib.__assign(tslib.__assign({}, backdropProps), { opacity: backdropOpacity }), transitionProps: tslib.__assign(tslib.__assign({ classNames: {
|
|
123
|
+
enter: styles.enter,
|
|
124
|
+
appear: styles.appear,
|
|
125
|
+
enterActive: styles.enterActive,
|
|
126
|
+
appearActive: styles.appearActive,
|
|
127
|
+
exit: bySwipeCloseAnimation.current ? styles.exitBySwipe : styles.exit,
|
|
128
|
+
exitActive: bySwipeCloseAnimation.current
|
|
129
|
+
? styles.exitActiveBySwipe
|
|
130
|
+
: styles.exitActive,
|
|
131
|
+
}, timeout: ANIMATION_DURATION }, transitionProps), { onEntered: handleEntered, onExited: handleExited }), componentDivProps: {
|
|
132
|
+
ref: sheetRef,
|
|
133
|
+
style: getSwipeStyles(),
|
|
134
|
+
}, contentProps: tslib.__assign(tslib.__assign(tslib.__assign({ style: coreComponentsShared.createPaddingStyle(padding) }, contentProps), sheetSwipeableHandlers), { className: cn__default.default(styles.content, contentProps === null || contentProps === void 0 ? void 0 : contentProps.className) }) }),
|
|
135
|
+
hasCloser && (React__default.default.createElement(shared.Closer, { view: 'mobile', className: styles.closer, onClick: onClose, dataTestId: coreComponentsShared.getDataTestId(dataTestId, 'closer') })),
|
|
136
|
+
children));
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
exports.PopupSheet = PopupSheet;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { BackdropProps } from "@alfalab/core-components-backdrop";
|
|
3
|
+
type PopupBackdropProps = BackdropProps & {
|
|
4
|
+
/**
|
|
5
|
+
* Прозрачность бэкдропа
|
|
6
|
+
*/
|
|
7
|
+
opacity?: number;
|
|
8
|
+
/**
|
|
9
|
+
* Время анимации opacity
|
|
10
|
+
*/
|
|
11
|
+
opacityTimeout?: number;
|
|
12
|
+
};
|
|
13
|
+
declare const PopupBackdrop: FC<BackdropProps>;
|
|
14
|
+
export { PopupBackdropProps, PopupBackdrop };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var tslib = require('tslib');
|
|
6
|
+
var React = require('react');
|
|
7
|
+
var coreComponentsBackdrop = require('@alfalab/core-components-backdrop');
|
|
8
|
+
|
|
9
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
10
|
+
|
|
11
|
+
var React__default = /*#__PURE__*/_interopDefaultCompat(React);
|
|
12
|
+
|
|
13
|
+
var styles = {"appear":"popup-sheet__appear_1kdlf","enter":"popup-sheet__enter_1kdlf","appearActive":"popup-sheet__appearActive_1kdlf","enterActive":"popup-sheet__enterActive_1kdlf","appearDone":"popup-sheet__appearDone_1kdlf","enterDone":"popup-sheet__enterDone_1kdlf","exit":"popup-sheet__exit_1kdlf","exitActive":"popup-sheet__exitActive_1kdlf","exitDone":"popup-sheet__exitDone_1kdlf"};
|
|
14
|
+
require('./index.css')
|
|
15
|
+
|
|
16
|
+
var PopupBackdrop = function (_a) {
|
|
17
|
+
var opacity = _a.opacity, opacityTimeout = _a.opacityTimeout, style = _a.style, backdropProps = tslib.__rest(_a, ["opacity", "opacityTimeout", "style"]);
|
|
18
|
+
return (React__default.default.createElement("div", { style: tslib.__assign({ opacity: opacity, transition: opacity === 1 ? "opacity ".concat(opacityTimeout, "ms ease-in-out") : '', position: 'relative' }, style) },
|
|
19
|
+
React__default.default.createElement(coreComponentsBackdrop.Backdrop, tslib.__assign({ transitionClassNames: styles }, backdropProps))));
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
exports.PopupBackdrop = PopupBackdrop;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/* hash: 19vqu */
|
|
2
|
+
:root {
|
|
3
|
+
} /* deprecated */ :root {
|
|
4
|
+
--color-light-bg-overlay: rgba(0, 0, 0, 0.6); /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
|
|
5
|
+
} :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
|
|
6
|
+
} :root {
|
|
7
|
+
} :root {
|
|
8
|
+
|
|
9
|
+
/* Hard */
|
|
10
|
+
|
|
11
|
+
/* Up */
|
|
12
|
+
|
|
13
|
+
/* Hard up */
|
|
14
|
+
} :root {
|
|
15
|
+
} :root {
|
|
16
|
+
} :root {
|
|
17
|
+
} :root {
|
|
18
|
+
} :root {
|
|
19
|
+
--backdrop-visible-background: var(--color-light-bg-overlay);
|
|
20
|
+
--backdrop-hidden-background: transparent;
|
|
21
|
+
} .popup-sheet__appear_1kdlf,
|
|
22
|
+
.popup-sheet__enter_1kdlf {
|
|
23
|
+
background-color: var(--backdrop-hidden-background);
|
|
24
|
+
} .popup-sheet__appearActive_1kdlf,
|
|
25
|
+
.popup-sheet__enterActive_1kdlf,
|
|
26
|
+
.popup-sheet__appearDone_1kdlf,
|
|
27
|
+
.popup-sheet__enterDone_1kdlf {
|
|
28
|
+
background-color: var(--backdrop-visible-background);
|
|
29
|
+
transition: background-color 300ms cubic-bezier(0.65, 0, 0.35, 1);
|
|
30
|
+
} .popup-sheet__exit_1kdlf {
|
|
31
|
+
background-color: var(--backdrop-visible-background);
|
|
32
|
+
} .popup-sheet__exitActive_1kdlf,
|
|
33
|
+
.popup-sheet__exitDone_1kdlf {
|
|
34
|
+
background-color: var(--backdrop-hidden-background);
|
|
35
|
+
transition: background-color 300ms cubic-bezier(0.65, 0, 0.35, 1);
|
|
36
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { PopupBackdrop } from "./Component";
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var components_backdrop_Component = require('./Component.js');
|
|
6
|
+
require('tslib');
|
|
7
|
+
require('react');
|
|
8
|
+
require('@alfalab/core-components-backdrop');
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
exports.PopupBackdrop = components_backdrop_Component.PopupBackdrop;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { FC } from "react";
|
|
4
|
+
import { BaseButtonProps } from "./typings-9211a437";
|
|
5
|
+
type SpinnerProps = {
|
|
6
|
+
/**
|
|
7
|
+
* Управление видимостью компонента
|
|
8
|
+
*/
|
|
9
|
+
visible?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Размер компонента
|
|
12
|
+
*/
|
|
13
|
+
size?: "xs" | "s" | "m";
|
|
14
|
+
/**
|
|
15
|
+
* Дополнительный класс
|
|
16
|
+
*/
|
|
17
|
+
className?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Идентификатор компонента в DOM
|
|
20
|
+
*/
|
|
21
|
+
id?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Идентификатор для систем автоматизированного тестирования
|
|
24
|
+
*/
|
|
25
|
+
dataTestId?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Палитра, в контексте которой используется спиннер
|
|
28
|
+
*/
|
|
29
|
+
colors?: "default" | "inverted";
|
|
30
|
+
};
|
|
31
|
+
declare const Spinner: FC<SpinnerProps>;
|
|
32
|
+
/**
|
|
33
|
+
* Минимальное время отображения лоадера - 500мс,
|
|
34
|
+
* чтобы при быстрых ответах от сервера кнопка не «моргала».
|
|
35
|
+
*/
|
|
36
|
+
declare const LOADER_MIN_DISPLAY_INTERVAL = 500;
|
|
37
|
+
declare const BaseButton: React.ForwardRefExoticComponent<BaseButtonProps & React.RefAttributes<HTMLAnchorElement | HTMLButtonElement>>;
|
|
38
|
+
export { SpinnerProps, Spinner, LOADER_MIN_DISPLAY_INTERVAL, BaseButton };
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { KeyboardEvent, MouseEvent } from "react";
|
|
4
|
+
import { BaseModalProps } from "@alfalab/core-components-base-modal";
|
|
5
|
+
type PaddingType = number | string | {
|
|
6
|
+
top?: number;
|
|
7
|
+
right?: number;
|
|
8
|
+
bottom?: number;
|
|
9
|
+
left?: number;
|
|
10
|
+
};
|
|
11
|
+
type PopupSheetProps = Omit<BaseModalProps, 'onClose'> & {
|
|
12
|
+
/**
|
|
13
|
+
* Наличие кнопки закрытия
|
|
14
|
+
*/
|
|
15
|
+
hasCloser?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Будет ли свайпаться шторка
|
|
18
|
+
*/
|
|
19
|
+
swipeable?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Отступы
|
|
22
|
+
*/
|
|
23
|
+
padding?: PaddingType;
|
|
24
|
+
/**
|
|
25
|
+
* Обработчик закрытия
|
|
26
|
+
*/
|
|
27
|
+
onClose?: (event: MouseEvent<HTMLElement> | KeyboardEvent<HTMLElement>, reason?: 'backdropClick' | 'escapeKeyDown' | 'closerClick' | 'swipe') => void;
|
|
28
|
+
};
|
|
29
|
+
declare const PopupSheet: React.ForwardRefExoticComponent<Omit<BaseModalProps, "onClose"> & {
|
|
30
|
+
/**
|
|
31
|
+
* Наличие кнопки закрытия
|
|
32
|
+
*/
|
|
33
|
+
hasCloser?: boolean | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* Будет ли свайпаться шторка
|
|
36
|
+
*/
|
|
37
|
+
swipeable?: boolean | undefined;
|
|
38
|
+
/**
|
|
39
|
+
* Отступы
|
|
40
|
+
*/
|
|
41
|
+
padding?: PaddingType | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* Обработчик закрытия
|
|
44
|
+
*/
|
|
45
|
+
onClose?: ((event: MouseEvent<HTMLElement> | KeyboardEvent<HTMLElement>, reason?: 'backdropClick' | 'escapeKeyDown' | 'closerClick' | 'swipe') => void) | undefined;
|
|
46
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
47
|
+
export { PopupSheetProps, PopupSheet };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { AnchorButtonProps, NativeButtonProps } from "./typings-9211a437";
|
|
4
|
+
type ButtonDesktopProps = Partial<AnchorButtonProps | NativeButtonProps>;
|
|
5
|
+
declare const ButtonDesktop: React.ForwardRefExoticComponent<ButtonDesktopProps & React.RefAttributes<HTMLAnchorElement | HTMLButtonElement>>;
|
|
6
|
+
export { ButtonDesktopProps, ButtonDesktop };
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var tslib = require('tslib');
|
|
6
|
+
var React = require('react');
|
|
7
|
+
var reactSwipeable = require('react-swipeable');
|
|
8
|
+
var cn = require('classnames');
|
|
9
|
+
var coreComponentsBaseModal = require('@alfalab/core-components-base-modal/cssm');
|
|
10
|
+
var shared = require('@alfalab/core-components-navigation-bar/cssm/shared');
|
|
11
|
+
var coreComponentsShared = require('@alfalab/core-components-shared/cssm');
|
|
12
|
+
var components_backdrop_Component = require('./components/backdrop/Component.js');
|
|
13
|
+
var styles = require('./index.module.css');
|
|
14
|
+
require('@alfalab/core-components-backdrop/cssm');
|
|
15
|
+
require('./components/backdrop/index.module.css');
|
|
16
|
+
|
|
17
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
18
|
+
|
|
19
|
+
var React__default = /*#__PURE__*/_interopDefaultCompat(React);
|
|
20
|
+
var cn__default = /*#__PURE__*/_interopDefaultCompat(cn);
|
|
21
|
+
var styles__default = /*#__PURE__*/_interopDefaultCompat(styles);
|
|
22
|
+
|
|
23
|
+
var SWIPE_VELOCITY = 0.3;
|
|
24
|
+
var CLOSE_OFFSET = 0.3;
|
|
25
|
+
var ANIMATION_DURATION = 350;
|
|
26
|
+
var DEFAULT_PADDING = 32;
|
|
27
|
+
var PopupSheet = React.forwardRef(function (_a, ref) {
|
|
28
|
+
var children = _a.children, hasCloser = _a.hasCloser, className = _a.className, onClose = _a.onClose, transitionProps = _a.transitionProps, contentProps = _a.contentProps, swipeable = _a.swipeable, dataTestId = _a.dataTestId, backdropProps = _a.backdropProps, _b = _a.padding, padding = _b === void 0 ? DEFAULT_PADDING : _b, restProps = tslib.__rest(_a, ["children", "hasCloser", "className", "onClose", "transitionProps", "contentProps", "swipeable", "dataTestId", "backdropProps", "padding"]);
|
|
29
|
+
var _c = React.useState(0), sheetOffset = _c[0], setSheetOffset = _c[1];
|
|
30
|
+
var _d = React.useState(1), backdropOpacity = _d[0], setBackdropOpacity = _d[1];
|
|
31
|
+
var sheetHeight = React.useRef(0);
|
|
32
|
+
var sheetRef = React.useRef(null);
|
|
33
|
+
var bySwipeCloseAnimation = React.useRef(false);
|
|
34
|
+
var getSheetOffset = function (deltaY) { return Math.max(0, deltaY); };
|
|
35
|
+
var getBackdropOpacity = function (offset) {
|
|
36
|
+
return Math.max(0, 1 - offset / sheetHeight.current);
|
|
37
|
+
};
|
|
38
|
+
var getSwipeStyles = function () {
|
|
39
|
+
return sheetOffset ? { transform: "translateY(".concat(sheetOffset, "px)") } : {};
|
|
40
|
+
};
|
|
41
|
+
var handleSwiping = function (_a) {
|
|
42
|
+
var deltaY = _a.deltaY;
|
|
43
|
+
var offset = getSheetOffset(deltaY);
|
|
44
|
+
setSheetOffset(offset);
|
|
45
|
+
setBackdropOpacity(getBackdropOpacity(offset));
|
|
46
|
+
};
|
|
47
|
+
var handleSwiped = function (_a) {
|
|
48
|
+
var deltaY = _a.deltaY, velocity = _a.velocity, event = _a.event;
|
|
49
|
+
var shouldCloseByVelocity = deltaY >= 0 && velocity >= SWIPE_VELOCITY;
|
|
50
|
+
var shouldCloseByOffset = deltaY >= sheetHeight.current * CLOSE_OFFSET;
|
|
51
|
+
var offset = sheetOffset;
|
|
52
|
+
var animDuration = ANIMATION_DURATION / 2;
|
|
53
|
+
var start;
|
|
54
|
+
if (shouldCloseByVelocity || shouldCloseByOffset) {
|
|
55
|
+
bySwipeCloseAnimation.current = true;
|
|
56
|
+
onClose === null || onClose === void 0 ? void 0 : onClose(event, 'swipe');
|
|
57
|
+
var runLoop_1 = function (timeStamp) {
|
|
58
|
+
if (!start)
|
|
59
|
+
start = timeStamp;
|
|
60
|
+
var elapsedTime = timeStamp - start;
|
|
61
|
+
if (elapsedTime <= animDuration) {
|
|
62
|
+
var nextOffset = offset +
|
|
63
|
+
(sheetHeight.current - offset) *
|
|
64
|
+
coreComponentsShared.easingFns.easeInOutQuad(elapsedTime / animDuration);
|
|
65
|
+
if (nextOffset > 0) {
|
|
66
|
+
setSheetOffset(nextOffset);
|
|
67
|
+
}
|
|
68
|
+
requestAnimationFrame(runLoop_1);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
setSheetOffset(0);
|
|
72
|
+
bySwipeCloseAnimation.current = false;
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
requestAnimationFrame(runLoop_1);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
var runLoop_2 = function (timeStamp) {
|
|
79
|
+
if (!start)
|
|
80
|
+
start = timeStamp;
|
|
81
|
+
var elapsedTime = timeStamp - start;
|
|
82
|
+
if (elapsedTime <= animDuration) {
|
|
83
|
+
var nextOffset = offset - offset * coreComponentsShared.easingFns.easeInOutQuad(elapsedTime / animDuration);
|
|
84
|
+
if (nextOffset > 0) {
|
|
85
|
+
setSheetOffset(nextOffset);
|
|
86
|
+
setBackdropOpacity(getBackdropOpacity(nextOffset));
|
|
87
|
+
}
|
|
88
|
+
requestAnimationFrame(runLoop_2);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
setSheetOffset(0);
|
|
92
|
+
setBackdropOpacity(1);
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
requestAnimationFrame(runLoop_2);
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
var handleEntered = function (node, isAppearing) {
|
|
99
|
+
bySwipeCloseAnimation.current = false;
|
|
100
|
+
if (sheetRef.current) {
|
|
101
|
+
sheetHeight.current = sheetRef.current.offsetHeight;
|
|
102
|
+
}
|
|
103
|
+
if (transitionProps === null || transitionProps === void 0 ? void 0 : transitionProps.onEntered) {
|
|
104
|
+
transitionProps.onEntered(node, isAppearing);
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
var handleExited = function (node) {
|
|
108
|
+
bySwipeCloseAnimation.current = false;
|
|
109
|
+
setSheetOffset(0);
|
|
110
|
+
setBackdropOpacity(1);
|
|
111
|
+
if (transitionProps === null || transitionProps === void 0 ? void 0 : transitionProps.onExited) {
|
|
112
|
+
transitionProps.onExited(node);
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
var sheetSwipeableHandlers = reactSwipeable.useSwipeable({
|
|
116
|
+
onSwiping: handleSwiping,
|
|
117
|
+
onSwiped: handleSwiped,
|
|
118
|
+
trackMouse: swipeable,
|
|
119
|
+
trackTouch: swipeable,
|
|
120
|
+
delta: 5,
|
|
121
|
+
});
|
|
122
|
+
return (React__default.default.createElement(coreComponentsBaseModal.BaseModal, tslib.__assign({}, restProps, { onClose: onClose, ref: ref, className: cn__default.default(styles__default.default.component, className), dataTestId: dataTestId, Backdrop: components_backdrop_Component.PopupBackdrop, backdropProps: tslib.__assign(tslib.__assign({}, backdropProps), { opacity: backdropOpacity }), transitionProps: tslib.__assign(tslib.__assign({ classNames: {
|
|
123
|
+
enter: styles__default.default.enter,
|
|
124
|
+
appear: styles__default.default.appear,
|
|
125
|
+
enterActive: styles__default.default.enterActive,
|
|
126
|
+
appearActive: styles__default.default.appearActive,
|
|
127
|
+
exit: bySwipeCloseAnimation.current ? styles__default.default.exitBySwipe : styles__default.default.exit,
|
|
128
|
+
exitActive: bySwipeCloseAnimation.current
|
|
129
|
+
? styles__default.default.exitActiveBySwipe
|
|
130
|
+
: styles__default.default.exitActive,
|
|
131
|
+
}, timeout: ANIMATION_DURATION }, transitionProps), { onEntered: handleEntered, onExited: handleExited }), componentDivProps: {
|
|
132
|
+
ref: sheetRef,
|
|
133
|
+
style: getSwipeStyles(),
|
|
134
|
+
}, contentProps: tslib.__assign(tslib.__assign(tslib.__assign({ style: coreComponentsShared.createPaddingStyle(padding) }, contentProps), sheetSwipeableHandlers), { className: cn__default.default(styles__default.default.content, contentProps === null || contentProps === void 0 ? void 0 : contentProps.className) }) }),
|
|
135
|
+
hasCloser && (React__default.default.createElement(shared.Closer, { view: 'mobile', className: styles__default.default.closer, onClick: onClose, dataTestId: coreComponentsShared.getDataTestId(dataTestId, 'closer') })),
|
|
136
|
+
children));
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
exports.PopupSheet = PopupSheet;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { BackdropProps } from "@alfalab/core-components-backdrop";
|
|
3
|
+
type PopupBackdropProps = BackdropProps & {
|
|
4
|
+
/**
|
|
5
|
+
* Прозрачность бэкдропа
|
|
6
|
+
*/
|
|
7
|
+
opacity?: number;
|
|
8
|
+
/**
|
|
9
|
+
* Время анимации opacity
|
|
10
|
+
*/
|
|
11
|
+
opacityTimeout?: number;
|
|
12
|
+
};
|
|
13
|
+
declare const PopupBackdrop: FC<BackdropProps>;
|
|
14
|
+
export { PopupBackdropProps, PopupBackdrop };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var tslib = require('tslib');
|
|
6
|
+
var React = require('react');
|
|
7
|
+
var coreComponentsBackdrop = require('@alfalab/core-components-backdrop/cssm');
|
|
8
|
+
var styles = require('./index.module.css');
|
|
9
|
+
|
|
10
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
11
|
+
|
|
12
|
+
var React__default = /*#__PURE__*/_interopDefaultCompat(React);
|
|
13
|
+
var styles__default = /*#__PURE__*/_interopDefaultCompat(styles);
|
|
14
|
+
|
|
15
|
+
var PopupBackdrop = function (_a) {
|
|
16
|
+
var opacity = _a.opacity, opacityTimeout = _a.opacityTimeout, style = _a.style, backdropProps = tslib.__rest(_a, ["opacity", "opacityTimeout", "style"]);
|
|
17
|
+
return (React__default.default.createElement("div", { style: tslib.__assign({ opacity: opacity, transition: opacity === 1 ? "opacity ".concat(opacityTimeout, "ms ease-in-out") : '', position: 'relative' }, style) },
|
|
18
|
+
React__default.default.createElement(coreComponentsBackdrop.Backdrop, tslib.__assign({ transitionClassNames: styles__default.default }, backdropProps))));
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
exports.PopupBackdrop = PopupBackdrop;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { PopupBackdrop } from "./Component";
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var components_backdrop_Component = require('./Component.js');
|
|
6
|
+
require('tslib');
|
|
7
|
+
require('react');
|
|
8
|
+
require('@alfalab/core-components-backdrop/cssm');
|
|
9
|
+
require('./index.module.css');
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
exports.PopupBackdrop = components_backdrop_Component.PopupBackdrop;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
} /* deprecated */ :root {
|
|
3
|
+
--color-light-bg-overlay: rgba(0, 0, 0, 0.6); /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
|
|
4
|
+
} :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
|
|
5
|
+
} :root {
|
|
6
|
+
} :root {
|
|
7
|
+
|
|
8
|
+
/* Hard */
|
|
9
|
+
|
|
10
|
+
/* Up */
|
|
11
|
+
|
|
12
|
+
/* Hard up */
|
|
13
|
+
} :root {
|
|
14
|
+
} :root {
|
|
15
|
+
} :root {
|
|
16
|
+
} :root {
|
|
17
|
+
} :root {
|
|
18
|
+
--backdrop-visible-background: var(--color-light-bg-overlay);
|
|
19
|
+
--backdrop-hidden-background: transparent;
|
|
20
|
+
} .appear,
|
|
21
|
+
.enter {
|
|
22
|
+
background-color: var(--backdrop-hidden-background);
|
|
23
|
+
} .appearActive,
|
|
24
|
+
.enterActive,
|
|
25
|
+
.appearDone,
|
|
26
|
+
.enterDone {
|
|
27
|
+
background-color: var(--backdrop-visible-background);
|
|
28
|
+
transition: background-color 300ms cubic-bezier(0.65, 0, 0.35, 1);
|
|
29
|
+
} .exit {
|
|
30
|
+
background-color: var(--backdrop-visible-background);
|
|
31
|
+
} .exitActive,
|
|
32
|
+
.exitDone {
|
|
33
|
+
background-color: var(--backdrop-hidden-background);
|
|
34
|
+
transition: background-color 300ms cubic-bezier(0.65, 0, 0.35, 1);
|
|
35
|
+
}
|