@invoicebox/ui 0.1.0-alpha.294 → 0.1.0-alpha.295
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/dist/components/common/Drawer/index.d.ts +2 -2
- package/dist/components/common/Drawer/index.js +83 -15
- package/dist/components/common/Drawer/styles.d.ts +16 -694
- package/dist/components/common/Drawer/styles.js +51 -35
- package/dist/components/common/Dropdown/index.d.ts +2 -2
- package/dist/components/common/Dropdown/index.js +63 -13
- package/dist/components/common/Dropdown/styles.d.ts +2 -0
- package/dist/components/common/Dropdown/styles.js +17 -3
- package/dist/components/form/Autocomplete/components/Autocomplete/index.js +3 -1
- package/dist/components/form/CountrySelect/index.js +3 -1
- package/dist/components/form/DateInput/index.js +3 -1
- package/dist/components/form/DateTimeInput/index.js +3 -1
- package/dist/components/form/Select/index.js +3 -1
- package/dist/esm/components/common/Drawer/index.js +84 -16
- package/dist/esm/components/common/Drawer/styles.js +50 -34
- package/dist/esm/components/common/Dropdown/index.js +64 -14
- package/dist/esm/components/common/Dropdown/styles.js +16 -2
- package/dist/esm/components/form/Autocomplete/components/Autocomplete/index.js +3 -1
- package/dist/esm/components/form/CountrySelect/index.js +4 -2
- package/dist/esm/components/form/DateInput/index.js +3 -1
- package/dist/esm/components/form/DateTimeInput/index.js +3 -1
- package/dist/esm/components/form/Select/index.js +3 -1
- package/dist/esm/hooks/useOutsideClick/index.js +15 -4
- package/dist/hooks/useOutsideClick/index.d.ts +2 -2
- package/dist/hooks/useOutsideClick/index.js +14 -4
- package/package.json +2 -2
|
@@ -4,51 +4,67 @@ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" ==
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.Title = exports.
|
|
7
|
+
exports.Title = exports.Sheet = exports.Root = exports.DragIndicator = exports.DragHandle = exports.ChildrenWrapper = exports.Backdrop = void 0;
|
|
8
8
|
var _styledComponents = _interopRequireWildcard(require("styled-components"));
|
|
9
|
-
var _reactModalSheet = require("react-modal-sheet");
|
|
10
9
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
11
10
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
12
|
-
var
|
|
13
|
-
displayName: "
|
|
11
|
+
var Root = exports.Root = _styledComponents["default"].div.withConfig({
|
|
12
|
+
displayName: "styles__Root",
|
|
14
13
|
componentId: "sc-1kysg49-0"
|
|
15
|
-
})(["
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
});
|
|
19
|
-
var DragIndicatorWrapper = exports.DragIndicatorWrapper = _styledComponents["default"].div.withConfig({
|
|
20
|
-
displayName: "styles__DragIndicatorWrapper",
|
|
14
|
+
})(["position:fixed;inset:0;z-index:1000;display:flex;align-items:flex-end;justify-content:center;"]);
|
|
15
|
+
var Backdrop = exports.Backdrop = _styledComponents["default"].div.withConfig({
|
|
16
|
+
displayName: "styles__Backdrop",
|
|
21
17
|
componentId: "sc-1kysg49-1"
|
|
22
|
-
})(["position:absolute;
|
|
23
|
-
var
|
|
24
|
-
displayName: "styles__ChildrenWrapper",
|
|
25
|
-
componentId: "sc-1kysg49-2"
|
|
26
|
-
})(["", ";background-color:", ";", ""], function (_ref2) {
|
|
27
|
-
var $isPadding = _ref2.$isPadding;
|
|
28
|
-
return $isPadding && 'padding: 32px 16px 36px';
|
|
29
|
-
}, function (_ref3) {
|
|
30
|
-
var $bgColor = _ref3.$bgColor;
|
|
18
|
+
})(["position:absolute;inset:0;background-color:", ";opacity:", ";transition:opacity 300ms ease;"], function (_ref) {
|
|
19
|
+
var $bgColor = _ref.$bgColor;
|
|
31
20
|
return $bgColor;
|
|
21
|
+
}, function (_ref2) {
|
|
22
|
+
var $isVisible = _ref2.$isVisible;
|
|
23
|
+
return $isVisible ? 1 : 0;
|
|
24
|
+
});
|
|
25
|
+
var Sheet = exports.Sheet = _styledComponents["default"].div.withConfig({
|
|
26
|
+
displayName: "styles__Sheet",
|
|
27
|
+
componentId: "sc-1kysg49-2"
|
|
28
|
+
})(["position:relative;width:100%;max-height:90vh;display:flex;flex-direction:column;box-shadow:none;border-radius:10px 10px 0 0;will-change:transform;transition:transform 300ms cubic-bezier(0.32,0.72,0,1);", " ", " ", ""], function (_ref3) {
|
|
29
|
+
var $isDragging = _ref3.$isDragging;
|
|
30
|
+
return $isDragging && (0, _styledComponents.css)(["transition:none;"]);
|
|
32
31
|
}, function (_ref4) {
|
|
33
|
-
var $
|
|
34
|
-
|
|
32
|
+
var $isErrorBorder = _ref4.$isErrorBorder,
|
|
33
|
+
$errorColor = _ref4.$errorColor,
|
|
34
|
+
$borderColor = _ref4.$borderColor;
|
|
35
|
+
return ($isErrorBorder || $borderColor) && (0, _styledComponents.css)(["border-top:2px solid ", ";"], $borderColor || $errorColor);
|
|
36
|
+
}, function (_ref5) {
|
|
37
|
+
var $overflow = _ref5.$overflow;
|
|
38
|
+
return $overflow === 'visible' ? (0, _styledComponents.css)(["overflow:visible;"]) : (0, _styledComponents.css)(["overflow-y:auto;"]);
|
|
35
39
|
});
|
|
36
|
-
var
|
|
37
|
-
displayName: "
|
|
40
|
+
var DragHandle = exports.DragHandle = _styledComponents["default"].div.withConfig({
|
|
41
|
+
displayName: "styles__DragHandle",
|
|
38
42
|
componentId: "sc-1kysg49-3"
|
|
39
|
-
})(["
|
|
40
|
-
var $
|
|
41
|
-
|
|
42
|
-
$borderColor = _ref5.$borderColor;
|
|
43
|
-
return ($isErrorBorder || $borderColor) && (0, _styledComponents.css)(["border-top:2px solid ", ";"], $borderColor || $errorColor);
|
|
44
|
-
}, function (_ref6) {
|
|
45
|
-
var $overflow = _ref6.$overflow;
|
|
46
|
-
return $overflow === 'visible' && (0, _styledComponents.css)(["overflow:visible;.react-modal-sheet-content-scroller{overflow-y:visible !important;}"]);
|
|
43
|
+
})(["position:relative;flex:0 0 auto;height:28px;background-color:", ";border-radius:10px 10px 0 0;touch-action:none;cursor:grab;&:active{cursor:grabbing;}"], function (_ref6) {
|
|
44
|
+
var $bg = _ref6.$bg;
|
|
45
|
+
return $bg;
|
|
47
46
|
});
|
|
48
|
-
var
|
|
49
|
-
displayName: "
|
|
47
|
+
var DragIndicator = exports.DragIndicator = _styledComponents["default"].div.withConfig({
|
|
48
|
+
displayName: "styles__DragIndicator",
|
|
50
49
|
componentId: "sc-1kysg49-4"
|
|
51
|
-
})(["background-color:
|
|
52
|
-
|
|
50
|
+
})(["position:absolute;top:12px;left:50%;transform:translateX(-50%);width:40px;height:4px;border-radius:99px;background-color:rgba(53,63,71,0.2);"]);
|
|
51
|
+
var Title = exports.Title = _styledComponents["default"].div.withConfig({
|
|
52
|
+
displayName: "styles__Title",
|
|
53
|
+
componentId: "sc-1kysg49-5"
|
|
54
|
+
})(["background-color:", ";padding:30px;position:relative;text-align:center;border-radius:10px 10px 0 0;"], function (_ref7) {
|
|
55
|
+
var $bg = _ref7.$bg;
|
|
56
|
+
return $bg;
|
|
57
|
+
});
|
|
58
|
+
var ChildrenWrapper = exports.ChildrenWrapper = _styledComponents["default"].div.withConfig({
|
|
59
|
+
displayName: "styles__ChildrenWrapper",
|
|
60
|
+
componentId: "sc-1kysg49-6"
|
|
61
|
+
})(["", ";background-color:", ";", ""], function (_ref8) {
|
|
62
|
+
var $isPadding = _ref8.$isPadding;
|
|
63
|
+
return $isPadding && 'padding: 32px 16px 36px';
|
|
64
|
+
}, function (_ref9) {
|
|
65
|
+
var $bgColor = _ref9.$bgColor;
|
|
53
66
|
return $bgColor;
|
|
67
|
+
}, function (_ref10) {
|
|
68
|
+
var $isBorderRadius = _ref10.$isBorderRadius;
|
|
69
|
+
return $isBorderRadius && (0, _styledComponents.css)(["border-radius:10px 10px 0 0;"]);
|
|
54
70
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import React, { ReactNode } from 'react';
|
|
2
2
|
export type TProps = {
|
|
3
3
|
children: ReactNode;
|
|
4
4
|
isOpen: boolean;
|
|
@@ -13,4 +13,4 @@ export type TProps = {
|
|
|
13
13
|
isTopPosition?: boolean;
|
|
14
14
|
usePadding?: boolean;
|
|
15
15
|
};
|
|
16
|
-
export declare const Dropdown:
|
|
16
|
+
export declare const Dropdown: React.ForwardRefExoticComponent<TProps & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.Dropdown = void 0;
|
|
8
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
var _reactDom = require("react-dom");
|
|
9
10
|
var S = _interopRequireWildcard(require("./styles"));
|
|
10
11
|
var _palette = require("../../../palette");
|
|
11
12
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
@@ -16,7 +17,7 @@ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r)
|
|
|
16
17
|
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
17
18
|
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
18
19
|
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
19
|
-
var Dropdown = exports.Dropdown = function
|
|
20
|
+
var Dropdown = exports.Dropdown = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, forwardedRef) {
|
|
20
21
|
var children = _ref.children,
|
|
21
22
|
isOpen = _ref.isOpen,
|
|
22
23
|
_ref$isAutoPosition = _ref.isAutoPosition,
|
|
@@ -46,6 +47,42 @@ var Dropdown = exports.Dropdown = function Dropdown(_ref) {
|
|
|
46
47
|
_useState2 = _slicedToArray(_useState, 2),
|
|
47
48
|
elRef = _useState2[0],
|
|
48
49
|
setElRef = _useState2[1];
|
|
50
|
+
|
|
51
|
+
// Якорь остаётся в потоке на месте поля-триггера; по его родителю (само поле) считаем,
|
|
52
|
+
// куда поставить вынесенный порталом дропдаун.
|
|
53
|
+
var anchorRef = (0, _react.useRef)(null);
|
|
54
|
+
var _useState3 = (0, _react.useState)(null),
|
|
55
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
56
|
+
layerRect = _useState4[0],
|
|
57
|
+
setLayerRect = _useState4[1];
|
|
58
|
+
|
|
59
|
+
// Дропдаун вынесён в body порталом и спозиционирован `fixed` → НЕ растит документ (баг с
|
|
60
|
+
// пустой полосой внизу) и не зависит от `overflow`/`transform` предков. Слой-обёртка
|
|
61
|
+
// (`PositionLayer`) `fixed` точно над полем: внутренний `Wrapper` остаётся `absolute`
|
|
62
|
+
// относительно него, поэтому ВСЯ старая логика позиционирования (top/bottom/left/right/
|
|
63
|
+
// translateY) и измерения работают без изменений. Пересчёт на скролл/resize, пока открыт.
|
|
64
|
+
(0, _react.useLayoutEffect)(function () {
|
|
65
|
+
var updateRect = function updateRect() {
|
|
66
|
+
var _anchorRef$current;
|
|
67
|
+
var field = (_anchorRef$current = anchorRef.current) === null || _anchorRef$current === void 0 ? void 0 : _anchorRef$current.parentElement;
|
|
68
|
+
if (!field) return;
|
|
69
|
+
var rect = field.getBoundingClientRect();
|
|
70
|
+
setLayerRect({
|
|
71
|
+
top: rect.top,
|
|
72
|
+
left: rect.left,
|
|
73
|
+
width: rect.width,
|
|
74
|
+
height: rect.height
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
updateRect();
|
|
78
|
+
if (!isOpen) return undefined;
|
|
79
|
+
window.addEventListener('scroll', updateRect, true);
|
|
80
|
+
window.addEventListener('resize', updateRect);
|
|
81
|
+
return function () {
|
|
82
|
+
window.removeEventListener('scroll', updateRect, true);
|
|
83
|
+
window.removeEventListener('resize', updateRect);
|
|
84
|
+
};
|
|
85
|
+
}, [isOpen]);
|
|
49
86
|
var handleCloseTransitionEnd = (0, _react.useCallback)(function (event) {
|
|
50
87
|
if (event.propertyName !== 'opacity') return;
|
|
51
88
|
if (isOpen) return;
|
|
@@ -68,18 +105,17 @@ var Dropdown = exports.Dropdown = function Dropdown(_ref) {
|
|
|
68
105
|
};
|
|
69
106
|
var isMoreSpaceBelowThanAbove = belowHeight >= aboveHeight;
|
|
70
107
|
if (isMoreSpaceBelowThanAbove) {
|
|
71
|
-
var
|
|
108
|
+
var _outOfViewPortHeight = dropdownHeight + dropdownIndent - belowHeight;
|
|
72
109
|
return {
|
|
73
110
|
isAbove: false,
|
|
74
|
-
translateY: "-".concat(
|
|
75
|
-
};
|
|
76
|
-
} else {
|
|
77
|
-
var _outOfViewPortHeight = dropdownHeight + dropdownIndent - aboveHeight;
|
|
78
|
-
return {
|
|
79
|
-
isAbove: true,
|
|
80
|
-
translateY: "".concat(_outOfViewPortHeight, "px")
|
|
111
|
+
translateY: "-".concat(_outOfViewPortHeight, "px")
|
|
81
112
|
};
|
|
82
113
|
}
|
|
114
|
+
var outOfViewPortHeight = dropdownHeight + dropdownIndent - aboveHeight;
|
|
115
|
+
return {
|
|
116
|
+
isAbove: true,
|
|
117
|
+
translateY: "".concat(outOfViewPortHeight, "px")
|
|
118
|
+
};
|
|
83
119
|
}, []);
|
|
84
120
|
var openFlagCache = (0, _react.useRef)(null);
|
|
85
121
|
if (elRef) {
|
|
@@ -104,8 +140,21 @@ var Dropdown = exports.Dropdown = function Dropdown(_ref) {
|
|
|
104
140
|
};
|
|
105
141
|
}
|
|
106
142
|
}
|
|
107
|
-
|
|
108
|
-
|
|
143
|
+
var setWrapperRef = (0, _react.useCallback)(function (node) {
|
|
144
|
+
setElRef(node);
|
|
145
|
+
if (typeof forwardedRef === 'function') forwardedRef(node);else if (forwardedRef) forwardedRef.current = node;
|
|
146
|
+
}, [forwardedRef]);
|
|
147
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(S.Anchor, {
|
|
148
|
+
ref: anchorRef
|
|
149
|
+
}), layerRect && /*#__PURE__*/(0, _reactDom.createPortal)(/*#__PURE__*/_react["default"].createElement(S.PositionLayer, {
|
|
150
|
+
style: {
|
|
151
|
+
top: layerRect.top,
|
|
152
|
+
left: layerRect.left,
|
|
153
|
+
width: layerRect.width,
|
|
154
|
+
height: layerRect.height
|
|
155
|
+
}
|
|
156
|
+
}, /*#__PURE__*/_react["default"].createElement(S.Wrapper, {
|
|
157
|
+
ref: setWrapperRef,
|
|
109
158
|
$isVisible: isOpen,
|
|
110
159
|
$isAbove: position.current.isAbove,
|
|
111
160
|
$translateY: position.current.translateY,
|
|
@@ -118,5 +167,6 @@ var Dropdown = exports.Dropdown = function Dropdown(_ref) {
|
|
|
118
167
|
onTransitionEnd: handleCloseTransitionEnd,
|
|
119
168
|
$palette: palette,
|
|
120
169
|
$usePadding: usePadding
|
|
121
|
-
}, children);
|
|
122
|
-
};
|
|
170
|
+
}, children)), document.body));
|
|
171
|
+
});
|
|
172
|
+
Dropdown.displayName = 'Dropdown';
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { TDropdownPalette } from './palette';
|
|
3
|
+
export declare const Anchor: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
|
|
4
|
+
export declare const PositionLayer: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
3
5
|
export declare const Wrapper: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
|
|
4
6
|
$isVisible: boolean;
|
|
5
7
|
$isAbove: boolean;
|
|
@@ -4,16 +4,30 @@ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" ==
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.Wrapper = void 0;
|
|
7
|
+
exports.Wrapper = exports.PositionLayer = exports.Anchor = void 0;
|
|
8
8
|
var _styledComponents = _interopRequireWildcard(require("styled-components"));
|
|
9
9
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
10
10
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
11
|
+
// Невидимый якорь в потоке: по его родителю (поле-триггер) считаем позицию портал-дропдауна.
|
|
12
|
+
// display:none — не влияет на вёрстку, но parentElement (само поле) доступен для измерений.
|
|
13
|
+
var Anchor = exports.Anchor = _styledComponents["default"].span.withConfig({
|
|
14
|
+
displayName: "styles__Anchor",
|
|
15
|
+
componentId: "sc-1f1enhf-0"
|
|
16
|
+
})(["display:none;"]);
|
|
17
|
+
|
|
18
|
+
// Слой-обёртка дропдауна: вынесена порталом в body и спозиционирована fixed точно над полем
|
|
19
|
+
// (через inline top/left/width/height). pointer-events:none — сам слой не перехватывает клики
|
|
20
|
+
// (его площадь = полю), кликабелен только внутренний Wrapper.
|
|
21
|
+
var PositionLayer = exports.PositionLayer = _styledComponents["default"].div.withConfig({
|
|
22
|
+
displayName: "styles__PositionLayer",
|
|
23
|
+
componentId: "sc-1f1enhf-1"
|
|
24
|
+
})(["position:fixed;z-index:1000;pointer-events:none;"]);
|
|
11
25
|
var hidden = (0, _styledComponents.css)(["visibility:hidden;opacity:0;transition:visibility 0ms 200ms,opacity 200ms 0ms ease;"]);
|
|
12
26
|
var visible = (0, _styledComponents.css)(["visibility:visible;opacity:1;transition:visibility 0ms 0ms,opacity 200ms 0ms ease;"]);
|
|
13
27
|
var Wrapper = exports.Wrapper = _styledComponents["default"].div.withConfig({
|
|
14
28
|
displayName: "styles__Wrapper",
|
|
15
|
-
componentId: "sc-1f1enhf-
|
|
16
|
-
})(["padding:", ";overflow:hidden;border-radius:20px;box-shadow:0 4px 50px 0 ", ";background:", ";outline:1px solid ", ";min-width:", ";width:", ";position:absolute;left:", ";right:", ";z-index:", ";", ";", ";", ";"], function (_ref) {
|
|
29
|
+
componentId: "sc-1f1enhf-2"
|
|
30
|
+
})(["pointer-events:auto;padding:", ";overflow:hidden;border-radius:20px;box-shadow:0 4px 50px 0 ", ";background:", ";outline:1px solid ", ";min-width:", ";width:", ";position:absolute;left:", ";right:", ";z-index:", ";", ";", ";", ";"], function (_ref) {
|
|
17
31
|
var $usePadding = _ref.$usePadding;
|
|
18
32
|
return $usePadding ? '8px 0;' : 'none';
|
|
19
33
|
}, function (_ref2) {
|
|
@@ -96,7 +96,8 @@ var Autocomplete = exports.Autocomplete = /*#__PURE__*/(0, _react.forwardRef)(fu
|
|
|
96
96
|
setIsOpen(false);
|
|
97
97
|
setActiveIndex(-1);
|
|
98
98
|
}, []);
|
|
99
|
-
var
|
|
99
|
+
var dropdownRef = (0, _react.useRef)(null);
|
|
100
|
+
var wrapperRef = (0, _useOutsideClick.useOutsideClick)(handleClose, [dropdownRef]);
|
|
100
101
|
var handleChange = (0, _react.useCallback)(function (event) {
|
|
101
102
|
// Ввод нового запроса сбрасывает клавиатурную подсветку (результаты сменятся).
|
|
102
103
|
setActiveIndex(-1);
|
|
@@ -232,6 +233,7 @@ var Autocomplete = exports.Autocomplete = /*#__PURE__*/(0, _react.forwardRef)(fu
|
|
|
232
233
|
"aria-autocomplete": "list",
|
|
233
234
|
"aria-activedescendant": isDropdownOpen && activeIndex >= 0 ? getOptionId(activeIndex) : undefined
|
|
234
235
|
}, paddingOptions)))), /*#__PURE__*/_react["default"].createElement(_Dropdown.Dropdown, {
|
|
236
|
+
ref: dropdownRef,
|
|
235
237
|
isOpen: isOpen && (!!options.length || !!isLoading),
|
|
236
238
|
isAutoPosition: true,
|
|
237
239
|
width: dropdownWidth || '100%',
|
|
@@ -66,7 +66,8 @@ var CountrySelect = exports.CountrySelect = function CountrySelect(_ref) {
|
|
|
66
66
|
return !flag;
|
|
67
67
|
});
|
|
68
68
|
}, []);
|
|
69
|
-
var
|
|
69
|
+
var dropdownRef = (0, _react.useRef)(null);
|
|
70
|
+
var wrapperRef = (0, _useOutsideClick.useOutsideClick)(handleDropdownClose, [dropdownRef]);
|
|
70
71
|
var sortedOptions = (0, _react.useMemo)(function () {
|
|
71
72
|
return [selectedOption].concat(_toConsumableArray(options.filter(function (option) {
|
|
72
73
|
return option !== selectedOption;
|
|
@@ -93,6 +94,7 @@ var CountrySelect = exports.CountrySelect = function CountrySelect(_ref) {
|
|
|
93
94
|
}), !disabled && /*#__PURE__*/_react["default"].createElement(_Arrow.Arrow, {
|
|
94
95
|
isOpen: isOpen
|
|
95
96
|
})), /*#__PURE__*/_react["default"].createElement(_Dropdown.Dropdown, _extends({
|
|
97
|
+
ref: dropdownRef,
|
|
96
98
|
isOpen: isOpen,
|
|
97
99
|
onCloseTransitionEnd: handleClear,
|
|
98
100
|
zIndex: 6,
|
|
@@ -63,7 +63,8 @@ var DateInput = exports.DateInput = function DateInput(_ref) {
|
|
|
63
63
|
var handleClose = (0, _react.useCallback)(function () {
|
|
64
64
|
return setOpenFlag(false);
|
|
65
65
|
}, []);
|
|
66
|
-
var
|
|
66
|
+
var dropdownRef = (0, _react.useRef)(null);
|
|
67
|
+
var elRef = (0, _useOutsideClick.useOutsideClick)(handleClose, [dropdownRef]);
|
|
67
68
|
var _useInputFocus = (0, _useInputFocus2.useInputFocus)({
|
|
68
69
|
onFocus: onFocus,
|
|
69
70
|
onBlur: onBlur
|
|
@@ -169,6 +170,7 @@ var DateInput = exports.DateInput = function DateInput(_ref) {
|
|
|
169
170
|
minDate: minDate,
|
|
170
171
|
maxDate: maxDate
|
|
171
172
|
}) : /*#__PURE__*/_react["default"].createElement(_Dropdown.Dropdown, _extends({
|
|
173
|
+
ref: dropdownRef,
|
|
172
174
|
isOpen: isOpen,
|
|
173
175
|
isAutoPosition: true
|
|
174
176
|
}, dropdownProps), /*#__PURE__*/_react["default"].createElement(S.CalendarWrapper, null, /*#__PURE__*/_react["default"].createElement(_Calendar.Calendar, {
|
|
@@ -78,7 +78,8 @@ var DateTimeInput = exports.DateTimeInput = function DateTimeInput(_ref) {
|
|
|
78
78
|
var handleTrigger = (0, _react.useCallback)(function () {
|
|
79
79
|
return isOpen ? handleCloseAndSkipDropdownValue() : setOpenFlag(true);
|
|
80
80
|
}, [handleCloseAndSkipDropdownValue, isOpen]);
|
|
81
|
-
var
|
|
81
|
+
var dropdownRef = (0, _react.useRef)(null);
|
|
82
|
+
var elRef = (0, _useOutsideClick.useOutsideClick)(handleCloseAndSkipDropdownValue, [dropdownRef]);
|
|
82
83
|
var _useTimePickerHeight = (0, _useTimePickerHeight2.useTimePickerHeight)(isOpen),
|
|
83
84
|
calendarRef = _useTimePickerHeight.calendarRef,
|
|
84
85
|
handleTimePickerSetHeight = _useTimePickerHeight.handleTimePickerSetHeight,
|
|
@@ -189,6 +190,7 @@ var DateTimeInput = exports.DateTimeInput = function DateTimeInput(_ref) {
|
|
|
189
190
|
onClick: handleTrigger,
|
|
190
191
|
$color: palette.icon
|
|
191
192
|
}, /*#__PURE__*/_react["default"].createElement(_CalendarIcon.CalendarIcon, null)))), !isMobile ? /*#__PURE__*/_react["default"].createElement(_Dropdown.Dropdown, _extends({
|
|
193
|
+
ref: dropdownRef,
|
|
192
194
|
isOpen: isOpen,
|
|
193
195
|
isAutoPosition: true
|
|
194
196
|
}, dropdownProps), /*#__PURE__*/_react["default"].createElement(S.CalendarWithTimePicker, {
|
|
@@ -95,7 +95,8 @@ var Select = exports.Select = function Select(_ref) {
|
|
|
95
95
|
var handleHide = (0, _react.useCallback)(function () {
|
|
96
96
|
return setIsOpen(false);
|
|
97
97
|
}, []);
|
|
98
|
-
var
|
|
98
|
+
var dropdownRef = (0, _react.useRef)(null);
|
|
99
|
+
var wrapperRef = (0, _useOutsideClick.useOutsideClick)(handleHide, [dropdownRef]);
|
|
99
100
|
var handleFocus = (0, _react.useCallback)(function (event) {
|
|
100
101
|
handleShow();
|
|
101
102
|
focusHandler(event);
|
|
@@ -244,6 +245,7 @@ var Select = exports.Select = function Select(_ref) {
|
|
|
244
245
|
isOpen: isOpen,
|
|
245
246
|
isPadding: false
|
|
246
247
|
}, /*#__PURE__*/_react["default"].createElement(S.DrawerContent, null, handleDrawerContentRender())) : /*#__PURE__*/_react["default"].createElement(_Dropdown.Dropdown, {
|
|
248
|
+
ref: dropdownRef,
|
|
247
249
|
isOpen: isOpen,
|
|
248
250
|
isAutoPosition: true,
|
|
249
251
|
width: dropdownWidth || '100%',
|
|
@@ -4,11 +4,12 @@ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r)
|
|
|
4
4
|
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
5
5
|
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
6
6
|
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
7
|
-
import React, { useEffect, useState } from 'react';
|
|
7
|
+
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
|
8
8
|
import * as S from './styles';
|
|
9
9
|
import { Typography } from '../Typography';
|
|
10
10
|
import { useComponentPalette } from '../../../palette';
|
|
11
|
-
|
|
11
|
+
var ANIMATION_MS = 300;
|
|
12
|
+
var DRAG_CLOSE_THRESHOLD = 80;
|
|
12
13
|
export var Drawer = function Drawer(_ref) {
|
|
13
14
|
var isOpen = _ref.isOpen,
|
|
14
15
|
children = _ref.children,
|
|
@@ -25,32 +26,102 @@ export var Drawer = function Drawer(_ref) {
|
|
|
25
26
|
_useState2 = _slicedToArray(_useState, 2),
|
|
26
27
|
shouldRender = _useState2[0],
|
|
27
28
|
setShouldRender = _useState2[1];
|
|
29
|
+
var _useState3 = useState(false),
|
|
30
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
31
|
+
isEntered = _useState4[0],
|
|
32
|
+
setIsEntered = _useState4[1];
|
|
33
|
+
var _useState5 = useState(0),
|
|
34
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
35
|
+
dragOffset = _useState6[0],
|
|
36
|
+
setDragOffset = _useState6[1];
|
|
37
|
+
var dragStartYRef = useRef(null);
|
|
38
|
+
var sheetRef = useRef(null);
|
|
28
39
|
|
|
29
|
-
//
|
|
40
|
+
// Монтируем при открытии, размонтируем после анимации закрытия (как раньше — задержка 300мс).
|
|
30
41
|
useEffect(function () {
|
|
31
42
|
if (isOpen) {
|
|
32
43
|
setShouldRender(true);
|
|
33
44
|
} else {
|
|
45
|
+
setIsEntered(false);
|
|
34
46
|
var timer = setTimeout(function () {
|
|
35
47
|
return setShouldRender(false);
|
|
36
|
-
},
|
|
48
|
+
}, ANIMATION_MS);
|
|
37
49
|
return function () {
|
|
38
50
|
return clearTimeout(timer);
|
|
39
51
|
};
|
|
40
52
|
}
|
|
53
|
+
return undefined;
|
|
41
54
|
}, [isOpen]);
|
|
55
|
+
|
|
56
|
+
// Запускаем enter-переход на кадр позже маунта: сначала лист за экраном (translateY 100%), затем 0.
|
|
57
|
+
useEffect(function () {
|
|
58
|
+
if (!shouldRender || !isOpen) return undefined;
|
|
59
|
+
var raf = requestAnimationFrame(function () {
|
|
60
|
+
return setIsEntered(true);
|
|
61
|
+
});
|
|
62
|
+
return function () {
|
|
63
|
+
return cancelAnimationFrame(raf);
|
|
64
|
+
};
|
|
65
|
+
}, [shouldRender, isOpen]);
|
|
66
|
+
|
|
67
|
+
// Блокируем скролл фона, пока боттомшит открыт (как делал react-modal-sheet).
|
|
68
|
+
useEffect(function () {
|
|
69
|
+
if (!shouldRender) return undefined;
|
|
70
|
+
var prev = document.body.style.overflow;
|
|
71
|
+
document.body.style.overflow = 'hidden';
|
|
72
|
+
return function () {
|
|
73
|
+
document.body.style.overflow = prev;
|
|
74
|
+
};
|
|
75
|
+
}, [shouldRender]);
|
|
76
|
+
var handleTransitionEnd = useCallback(function (event) {
|
|
77
|
+
if (event.target !== sheetRef.current || event.propertyName !== 'transform') return;
|
|
78
|
+
if (isOpen && isEntered && onOpenEnd) onOpenEnd();
|
|
79
|
+
}, [isOpen, isEntered, onOpenEnd]);
|
|
80
|
+
var handlePointerDown = useCallback(function (event) {
|
|
81
|
+
var _event$currentTarget$, _event$currentTarget;
|
|
82
|
+
dragStartYRef.current = event.clientY;
|
|
83
|
+
(_event$currentTarget$ = (_event$currentTarget = event.currentTarget).setPointerCapture) === null || _event$currentTarget$ === void 0 || _event$currentTarget$.call(_event$currentTarget, event.pointerId);
|
|
84
|
+
}, []);
|
|
85
|
+
var handlePointerMove = useCallback(function (event) {
|
|
86
|
+
if (dragStartYRef.current === null) return;
|
|
87
|
+
var delta = event.clientY - dragStartYRef.current;
|
|
88
|
+
setDragOffset(delta > 0 ? delta : 0);
|
|
89
|
+
}, []);
|
|
90
|
+
var handlePointerUp = useCallback(function () {
|
|
91
|
+
if (dragStartYRef.current === null) return;
|
|
92
|
+
var offset = dragOffset;
|
|
93
|
+
dragStartYRef.current = null;
|
|
94
|
+
setDragOffset(0);
|
|
95
|
+
if (offset > DRAG_CLOSE_THRESHOLD) onClose();
|
|
96
|
+
}, [dragOffset, onClose]);
|
|
42
97
|
if (!shouldRender) return null;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}, /*#__PURE__*/React.createElement(S.
|
|
98
|
+
var isDragging = dragOffset > 0;
|
|
99
|
+
var translateY = !isEntered ? '100%' : "".concat(dragOffset, "px");
|
|
100
|
+
return /*#__PURE__*/React.createElement(S.Root, {
|
|
101
|
+
role: "dialog",
|
|
102
|
+
"aria-modal": "true"
|
|
103
|
+
}, /*#__PURE__*/React.createElement(S.Backdrop, {
|
|
104
|
+
$bgColor: palette.backdropBg,
|
|
105
|
+
$isVisible: isEntered,
|
|
106
|
+
onClick: onClose
|
|
107
|
+
}), /*#__PURE__*/React.createElement(S.Sheet, {
|
|
108
|
+
ref: sheetRef,
|
|
109
|
+
style: {
|
|
110
|
+
transform: "translateY(".concat(translateY, ")")
|
|
111
|
+
},
|
|
112
|
+
$isDragging: isDragging,
|
|
49
113
|
$isErrorBorder: isErrorBorder,
|
|
50
114
|
$errorColor: palette.error,
|
|
51
115
|
$borderColor: borderColor,
|
|
52
|
-
$overflow: overflow
|
|
53
|
-
|
|
116
|
+
$overflow: overflow,
|
|
117
|
+
onTransitionEnd: handleTransitionEnd
|
|
118
|
+
}, /*#__PURE__*/React.createElement(S.DragHandle, {
|
|
119
|
+
$bg: title ? palette.titleBg : palette.bg,
|
|
120
|
+
onPointerDown: handlePointerDown,
|
|
121
|
+
onPointerMove: handlePointerMove,
|
|
122
|
+
onPointerUp: handlePointerUp,
|
|
123
|
+
onPointerCancel: handlePointerUp
|
|
124
|
+
}, /*#__PURE__*/React.createElement(S.DragIndicator, null)), title && /*#__PURE__*/React.createElement(S.Title, {
|
|
54
125
|
$bg: palette.titleBg
|
|
55
126
|
}, /*#__PURE__*/React.createElement(Typography, {
|
|
56
127
|
variant: "headline4"
|
|
@@ -58,8 +129,5 @@ export var Drawer = function Drawer(_ref) {
|
|
|
58
129
|
$isBorderRadius: !title,
|
|
59
130
|
$bgColor: palette.bg,
|
|
60
131
|
$isPadding: isPadding
|
|
61
|
-
}, children)))
|
|
62
|
-
onTap: onClose,
|
|
63
|
-
$bgColor: palette.backdropBg
|
|
64
|
-
}));
|
|
132
|
+
}, children)));
|
|
65
133
|
};
|
|
@@ -1,45 +1,61 @@
|
|
|
1
1
|
import styled, { css } from 'styled-components';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
displayName: "styles__Title",
|
|
2
|
+
export var Root = styled.div.withConfig({
|
|
3
|
+
displayName: "styles__Root",
|
|
5
4
|
componentId: "sc-1kysg49-0"
|
|
6
|
-
})(["
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
});
|
|
10
|
-
export var DragIndicatorWrapper = styled.div.withConfig({
|
|
11
|
-
displayName: "styles__DragIndicatorWrapper",
|
|
5
|
+
})(["position:fixed;inset:0;z-index:1000;display:flex;align-items:flex-end;justify-content:center;"]);
|
|
6
|
+
export var Backdrop = styled.div.withConfig({
|
|
7
|
+
displayName: "styles__Backdrop",
|
|
12
8
|
componentId: "sc-1kysg49-1"
|
|
13
|
-
})(["position:absolute;
|
|
14
|
-
|
|
15
|
-
displayName: "styles__ChildrenWrapper",
|
|
16
|
-
componentId: "sc-1kysg49-2"
|
|
17
|
-
})(["", ";background-color:", ";", ""], function (_ref2) {
|
|
18
|
-
var $isPadding = _ref2.$isPadding;
|
|
19
|
-
return $isPadding && 'padding: 32px 16px 36px';
|
|
20
|
-
}, function (_ref3) {
|
|
21
|
-
var $bgColor = _ref3.$bgColor;
|
|
9
|
+
})(["position:absolute;inset:0;background-color:", ";opacity:", ";transition:opacity 300ms ease;"], function (_ref) {
|
|
10
|
+
var $bgColor = _ref.$bgColor;
|
|
22
11
|
return $bgColor;
|
|
12
|
+
}, function (_ref2) {
|
|
13
|
+
var $isVisible = _ref2.$isVisible;
|
|
14
|
+
return $isVisible ? 1 : 0;
|
|
15
|
+
});
|
|
16
|
+
export var Sheet = styled.div.withConfig({
|
|
17
|
+
displayName: "styles__Sheet",
|
|
18
|
+
componentId: "sc-1kysg49-2"
|
|
19
|
+
})(["position:relative;width:100%;max-height:90vh;display:flex;flex-direction:column;box-shadow:none;border-radius:10px 10px 0 0;will-change:transform;transition:transform 300ms cubic-bezier(0.32,0.72,0,1);", " ", " ", ""], function (_ref3) {
|
|
20
|
+
var $isDragging = _ref3.$isDragging;
|
|
21
|
+
return $isDragging && css(["transition:none;"]);
|
|
23
22
|
}, function (_ref4) {
|
|
24
|
-
var $
|
|
25
|
-
|
|
23
|
+
var $isErrorBorder = _ref4.$isErrorBorder,
|
|
24
|
+
$errorColor = _ref4.$errorColor,
|
|
25
|
+
$borderColor = _ref4.$borderColor;
|
|
26
|
+
return ($isErrorBorder || $borderColor) && css(["border-top:2px solid ", ";"], $borderColor || $errorColor);
|
|
27
|
+
}, function (_ref5) {
|
|
28
|
+
var $overflow = _ref5.$overflow;
|
|
29
|
+
return $overflow === 'visible' ? css(["overflow:visible;"]) : css(["overflow-y:auto;"]);
|
|
26
30
|
});
|
|
27
|
-
export var
|
|
28
|
-
displayName: "
|
|
31
|
+
export var DragHandle = styled.div.withConfig({
|
|
32
|
+
displayName: "styles__DragHandle",
|
|
29
33
|
componentId: "sc-1kysg49-3"
|
|
30
|
-
})(["
|
|
31
|
-
var $
|
|
32
|
-
|
|
33
|
-
$borderColor = _ref5.$borderColor;
|
|
34
|
-
return ($isErrorBorder || $borderColor) && css(["border-top:2px solid ", ";"], $borderColor || $errorColor);
|
|
35
|
-
}, function (_ref6) {
|
|
36
|
-
var $overflow = _ref6.$overflow;
|
|
37
|
-
return $overflow === 'visible' && css(["overflow:visible;.react-modal-sheet-content-scroller{overflow-y:visible !important;}"]);
|
|
34
|
+
})(["position:relative;flex:0 0 auto;height:28px;background-color:", ";border-radius:10px 10px 0 0;touch-action:none;cursor:grab;&:active{cursor:grabbing;}"], function (_ref6) {
|
|
35
|
+
var $bg = _ref6.$bg;
|
|
36
|
+
return $bg;
|
|
38
37
|
});
|
|
39
|
-
export var
|
|
40
|
-
displayName: "
|
|
38
|
+
export var DragIndicator = styled.div.withConfig({
|
|
39
|
+
displayName: "styles__DragIndicator",
|
|
41
40
|
componentId: "sc-1kysg49-4"
|
|
42
|
-
})(["background-color:
|
|
43
|
-
|
|
41
|
+
})(["position:absolute;top:12px;left:50%;transform:translateX(-50%);width:40px;height:4px;border-radius:99px;background-color:rgba(53,63,71,0.2);"]);
|
|
42
|
+
export var Title = styled.div.withConfig({
|
|
43
|
+
displayName: "styles__Title",
|
|
44
|
+
componentId: "sc-1kysg49-5"
|
|
45
|
+
})(["background-color:", ";padding:30px;position:relative;text-align:center;border-radius:10px 10px 0 0;"], function (_ref7) {
|
|
46
|
+
var $bg = _ref7.$bg;
|
|
47
|
+
return $bg;
|
|
48
|
+
});
|
|
49
|
+
export var ChildrenWrapper = styled.div.withConfig({
|
|
50
|
+
displayName: "styles__ChildrenWrapper",
|
|
51
|
+
componentId: "sc-1kysg49-6"
|
|
52
|
+
})(["", ";background-color:", ";", ""], function (_ref8) {
|
|
53
|
+
var $isPadding = _ref8.$isPadding;
|
|
54
|
+
return $isPadding && 'padding: 32px 16px 36px';
|
|
55
|
+
}, function (_ref9) {
|
|
56
|
+
var $bgColor = _ref9.$bgColor;
|
|
44
57
|
return $bgColor;
|
|
58
|
+
}, function (_ref10) {
|
|
59
|
+
var $isBorderRadius = _ref10.$isBorderRadius;
|
|
60
|
+
return $isBorderRadius && css(["border-radius:10px 10px 0 0;"]);
|
|
45
61
|
});
|