@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.
Files changed (26) hide show
  1. package/dist/components/common/Drawer/index.d.ts +2 -2
  2. package/dist/components/common/Drawer/index.js +83 -15
  3. package/dist/components/common/Drawer/styles.d.ts +16 -694
  4. package/dist/components/common/Drawer/styles.js +51 -35
  5. package/dist/components/common/Dropdown/index.d.ts +2 -2
  6. package/dist/components/common/Dropdown/index.js +63 -13
  7. package/dist/components/common/Dropdown/styles.d.ts +2 -0
  8. package/dist/components/common/Dropdown/styles.js +17 -3
  9. package/dist/components/form/Autocomplete/components/Autocomplete/index.js +3 -1
  10. package/dist/components/form/CountrySelect/index.js +3 -1
  11. package/dist/components/form/DateInput/index.js +3 -1
  12. package/dist/components/form/DateTimeInput/index.js +3 -1
  13. package/dist/components/form/Select/index.js +3 -1
  14. package/dist/esm/components/common/Drawer/index.js +84 -16
  15. package/dist/esm/components/common/Drawer/styles.js +50 -34
  16. package/dist/esm/components/common/Dropdown/index.js +64 -14
  17. package/dist/esm/components/common/Dropdown/styles.js +16 -2
  18. package/dist/esm/components/form/Autocomplete/components/Autocomplete/index.js +3 -1
  19. package/dist/esm/components/form/CountrySelect/index.js +4 -2
  20. package/dist/esm/components/form/DateInput/index.js +3 -1
  21. package/dist/esm/components/form/DateTimeInput/index.js +3 -1
  22. package/dist/esm/components/form/Select/index.js +3 -1
  23. package/dist/esm/hooks/useOutsideClick/index.js +15 -4
  24. package/dist/hooks/useOutsideClick/index.d.ts +2 -2
  25. package/dist/hooks/useOutsideClick/index.js +14 -4
  26. package/package.json +2 -2
@@ -1,6 +1,5 @@
1
1
  import { FC, ReactNode } from 'react';
2
- import { SheetProps } from 'react-modal-sheet/src/types';
3
- export type TProps = Pick<SheetProps, 'onOpenEnd'> & {
2
+ export type TProps = {
4
3
  children: ReactNode;
5
4
  onClose: () => void;
6
5
  title?: string;
@@ -9,5 +8,6 @@ export type TProps = Pick<SheetProps, 'onOpenEnd'> & {
9
8
  isPadding?: boolean;
10
9
  borderColor?: string;
11
10
  overflow?: string;
11
+ onOpenEnd?: () => void;
12
12
  };
13
13
  export declare const Drawer: FC<TProps>;
@@ -9,7 +9,6 @@ var _react = _interopRequireWildcard(require("react"));
9
9
  var S = _interopRequireWildcard(require("./styles"));
10
10
  var _Typography = require("../Typography");
11
11
  var _palette = require("../../../palette");
12
- var _reactModalSheet = require("react-modal-sheet");
13
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); }
14
13
  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; }
15
14
  function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
@@ -18,6 +17,8 @@ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r)
18
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; }
19
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; } }
20
19
  function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
20
+ var ANIMATION_MS = 300;
21
+ var DRAG_CLOSE_THRESHOLD = 80;
21
22
  var Drawer = exports.Drawer = function Drawer(_ref) {
22
23
  var isOpen = _ref.isOpen,
23
24
  children = _ref.children,
@@ -34,32 +35,102 @@ var Drawer = exports.Drawer = function Drawer(_ref) {
34
35
  _useState2 = _slicedToArray(_useState, 2),
35
36
  shouldRender = _useState2[0],
36
37
  setShouldRender = _useState2[1];
38
+ var _useState3 = (0, _react.useState)(false),
39
+ _useState4 = _slicedToArray(_useState3, 2),
40
+ isEntered = _useState4[0],
41
+ setIsEntered = _useState4[1];
42
+ var _useState5 = (0, _react.useState)(0),
43
+ _useState6 = _slicedToArray(_useState5, 2),
44
+ dragOffset = _useState6[0],
45
+ setDragOffset = _useState6[1];
46
+ var dragStartYRef = (0, _react.useRef)(null);
47
+ var sheetRef = (0, _react.useRef)(null);
37
48
 
38
- // delay for close drawer and unmount
49
+ // Монтируем при открытии, размонтируем после анимации закрытия (как раньше — задержка 300мс).
39
50
  (0, _react.useEffect)(function () {
40
51
  if (isOpen) {
41
52
  setShouldRender(true);
42
53
  } else {
54
+ setIsEntered(false);
43
55
  var timer = setTimeout(function () {
44
56
  return setShouldRender(false);
45
- }, 300);
57
+ }, ANIMATION_MS);
46
58
  return function () {
47
59
  return clearTimeout(timer);
48
60
  };
49
61
  }
62
+ return undefined;
50
63
  }, [isOpen]);
64
+
65
+ // Запускаем enter-переход на кадр позже маунта: сначала лист за экраном (translateY 100%), затем 0.
66
+ (0, _react.useEffect)(function () {
67
+ if (!shouldRender || !isOpen) return undefined;
68
+ var raf = requestAnimationFrame(function () {
69
+ return setIsEntered(true);
70
+ });
71
+ return function () {
72
+ return cancelAnimationFrame(raf);
73
+ };
74
+ }, [shouldRender, isOpen]);
75
+
76
+ // Блокируем скролл фона, пока боттомшит открыт (как делал react-modal-sheet).
77
+ (0, _react.useEffect)(function () {
78
+ if (!shouldRender) return undefined;
79
+ var prev = document.body.style.overflow;
80
+ document.body.style.overflow = 'hidden';
81
+ return function () {
82
+ document.body.style.overflow = prev;
83
+ };
84
+ }, [shouldRender]);
85
+ var handleTransitionEnd = (0, _react.useCallback)(function (event) {
86
+ if (event.target !== sheetRef.current || event.propertyName !== 'transform') return;
87
+ if (isOpen && isEntered && onOpenEnd) onOpenEnd();
88
+ }, [isOpen, isEntered, onOpenEnd]);
89
+ var handlePointerDown = (0, _react.useCallback)(function (event) {
90
+ var _event$currentTarget$, _event$currentTarget;
91
+ dragStartYRef.current = event.clientY;
92
+ (_event$currentTarget$ = (_event$currentTarget = event.currentTarget).setPointerCapture) === null || _event$currentTarget$ === void 0 || _event$currentTarget$.call(_event$currentTarget, event.pointerId);
93
+ }, []);
94
+ var handlePointerMove = (0, _react.useCallback)(function (event) {
95
+ if (dragStartYRef.current === null) return;
96
+ var delta = event.clientY - dragStartYRef.current;
97
+ setDragOffset(delta > 0 ? delta : 0);
98
+ }, []);
99
+ var handlePointerUp = (0, _react.useCallback)(function () {
100
+ if (dragStartYRef.current === null) return;
101
+ var offset = dragOffset;
102
+ dragStartYRef.current = null;
103
+ setDragOffset(0);
104
+ if (offset > DRAG_CLOSE_THRESHOLD) onClose();
105
+ }, [dragOffset, onClose]);
51
106
  if (!shouldRender) return null;
52
- return /*#__PURE__*/_react["default"].createElement(_reactModalSheet.Sheet, {
53
- detent: "content",
54
- isOpen: isOpen,
55
- onClose: onClose,
56
- onOpenEnd: onOpenEnd
57
- }, /*#__PURE__*/_react["default"].createElement(S.StyledSheetContainer, {
107
+ var isDragging = dragOffset > 0;
108
+ var translateY = !isEntered ? '100%' : "".concat(dragOffset, "px");
109
+ return /*#__PURE__*/_react["default"].createElement(S.Root, {
110
+ role: "dialog",
111
+ "aria-modal": "true"
112
+ }, /*#__PURE__*/_react["default"].createElement(S.Backdrop, {
113
+ $bgColor: palette.backdropBg,
114
+ $isVisible: isEntered,
115
+ onClick: onClose
116
+ }), /*#__PURE__*/_react["default"].createElement(S.Sheet, {
117
+ ref: sheetRef,
118
+ style: {
119
+ transform: "translateY(".concat(translateY, ")")
120
+ },
121
+ $isDragging: isDragging,
58
122
  $isErrorBorder: isErrorBorder,
59
123
  $errorColor: palette.error,
60
124
  $borderColor: borderColor,
61
- $overflow: overflow
62
- }, /*#__PURE__*/_react["default"].createElement(_reactModalSheet.Sheet.Content, null, /*#__PURE__*/_react["default"].createElement(S.DragIndicatorWrapper, null, /*#__PURE__*/_react["default"].createElement(_reactModalSheet.Sheet.DragIndicator, null)), title && /*#__PURE__*/_react["default"].createElement(S.Title, {
125
+ $overflow: overflow,
126
+ onTransitionEnd: handleTransitionEnd
127
+ }, /*#__PURE__*/_react["default"].createElement(S.DragHandle, {
128
+ $bg: title ? palette.titleBg : palette.bg,
129
+ onPointerDown: handlePointerDown,
130
+ onPointerMove: handlePointerMove,
131
+ onPointerUp: handlePointerUp,
132
+ onPointerCancel: handlePointerUp
133
+ }, /*#__PURE__*/_react["default"].createElement(S.DragIndicator, null)), title && /*#__PURE__*/_react["default"].createElement(S.Title, {
63
134
  $bg: palette.titleBg
64
135
  }, /*#__PURE__*/_react["default"].createElement(_Typography.Typography, {
65
136
  variant: "headline4"
@@ -67,8 +138,5 @@ var Drawer = exports.Drawer = function Drawer(_ref) {
67
138
  $isBorderRadius: !title,
68
139
  $bgColor: palette.bg,
69
140
  $isPadding: isPadding
70
- }, children))), /*#__PURE__*/_react["default"].createElement(S.StyledSheetBackdrop, {
71
- onTap: onClose,
72
- $bgColor: palette.backdropBg
73
- }));
141
+ }, children)));
74
142
  };