@alfalab/core-components-base-modal 3.1.0 → 3.2.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/CHANGELOG.md CHANGED
@@ -3,6 +3,18 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [3.2.0](https://github.com/alfa-laboratory/core-components/compare/@alfalab/core-components-base-modal@3.1.0...@alfalab/core-components-base-modal@3.2.0) (2022-03-01)
7
+
8
+
9
+ ### Features
10
+
11
+ * **base-modal:** add component ref for base modal ([#1008](https://github.com/alfa-laboratory/core-components/issues/1008)) ([fb13dbd](https://github.com/alfa-laboratory/core-components/commit/fb13dbdf6352b10b80a74fa87edfcb1f54b76d5a))
12
+ * Исправить импорты в сторях. ([#998](https://github.com/alfa-laboratory/core-components/issues/998)) ([e6a654a](https://github.com/alfa-laboratory/core-components/commit/e6a654a0599451c7d149484cb61d8067eed083b7))
13
+
14
+
15
+
16
+
17
+
6
18
  # [3.1.0](https://github.com/alfa-laboratory/core-components/compare/@alfalab/core-components-base-modal@3.0.2...@alfalab/core-components-base-modal@3.1.0) (2022-01-17)
7
19
 
8
20
 
@@ -108,6 +108,10 @@ type BaseModalProps = {
108
108
  * z-index компонента
109
109
  */
110
110
  zIndex?: number;
111
+ /**
112
+ * Реф, который должен быть установлен компонентной области
113
+ */
114
+ componentRef?: MutableRefObject<HTMLDivElement | null>;
111
115
  };
112
116
  type BaseModalContext = {
113
117
  hasFooter?: boolean;
package/dist/Component.js CHANGED
@@ -48,7 +48,7 @@ var __assign = function () {
48
48
  return __assign.apply(this, arguments);
49
49
  };
50
50
 
51
- var styles = {"component":"base-modal__component_rp8e5","wrapper":"base-modal__wrapper_rp8e5","content":"base-modal__content_rp8e5","hidden":"base-modal__hidden_rp8e5","backdrop":"base-modal__backdrop_rp8e5","appear":"base-modal__appear_rp8e5","enter":"base-modal__enter_rp8e5","appearActive":"base-modal__appearActive_rp8e5","enterActive":"base-modal__enterActive_rp8e5","exit":"base-modal__exit_rp8e5","exitActive":"base-modal__exitActive_rp8e5","exitDone":"base-modal__exitDone_rp8e5"};
51
+ var styles = {"component":"base-modal__component_pvkw5","wrapper":"base-modal__wrapper_pvkw5","content":"base-modal__content_pvkw5","hidden":"base-modal__hidden_pvkw5","backdrop":"base-modal__backdrop_pvkw5","appear":"base-modal__appear_pvkw5","enter":"base-modal__enter_pvkw5","appearActive":"base-modal__appearActive_pvkw5","enterActive":"base-modal__enterActive_pvkw5","exit":"base-modal__exit_pvkw5","exitActive":"base-modal__exitActive_pvkw5","exitDone":"base-modal__exitDone_pvkw5"};
52
52
  require('./index.css')
53
53
 
54
54
  var BaseModalContext = React__default['default'].createContext({
@@ -63,14 +63,14 @@ var BaseModalContext = React__default['default'].createContext({
63
63
  onClose: function () { return null; },
64
64
  });
65
65
  var BaseModal = React.forwardRef(function (_a, ref) {
66
- var open = _a.open, container = _a.container, children = _a.children, _b = _a.scrollHandler, scrollHandler = _b === void 0 ? 'wrapper' : _b, _c = _a.Backdrop, Backdrop = _c === void 0 ? coreComponentsBackdrop.Backdrop : _c, _d = _a.backdropProps, backdropProps = _d === void 0 ? {} : _d, _e = _a.transitionProps, transitionProps = _e === void 0 ? {} : _e, disableBackdropClick = _a.disableBackdropClick, _f = _a.disableAutoFocus, disableAutoFocus = _f === void 0 ? false : _f, _g = _a.disableFocusLock, disableFocusLock = _g === void 0 ? false : _g, _h = _a.disableEscapeKeyDown, disableEscapeKeyDown = _h === void 0 ? false : _h, _j = _a.disableRestoreFocus, disableRestoreFocus = _j === void 0 ? false : _j, _k = _a.keepMounted, keepMounted = _k === void 0 ? false : _k, className = _a.className, contentClassName = _a.contentClassName, wrapperClassName = _a.wrapperClassName, onBackdropClick = _a.onBackdropClick, onClose = _a.onClose, onEscapeKeyDown = _a.onEscapeKeyDown, onMount = _a.onMount, onUnmount = _a.onUnmount, dataTestId = _a.dataTestId, _l = _a.zIndex, zIndex = _l === void 0 ? coreComponentsStack.stackingOrder.MODAL : _l;
67
- var _m = React.useState(!open), exited = _m[0], setExited = _m[1];
68
- var _o = React.useState(false), hasScroll = _o[0], setHasScroll = _o[1];
69
- var _p = React.useState(false), hasHeader = _p[0], setHasHeader = _p[1];
70
- var _q = React.useState(false), hasFooter = _q[0], setHasFooter = _q[1];
71
- var _r = React.useState(false), headerHighlighted = _r[0], setHeaderHighlighted = _r[1];
72
- var _s = React.useState(false), footerHighlighted = _s[0], setFooterHighlighted = _s[1];
73
- var componentRef = React.useRef(null);
66
+ var open = _a.open, container = _a.container, children = _a.children, _b = _a.scrollHandler, scrollHandler = _b === void 0 ? 'wrapper' : _b, _c = _a.Backdrop, Backdrop = _c === void 0 ? coreComponentsBackdrop.Backdrop : _c, _d = _a.backdropProps, backdropProps = _d === void 0 ? {} : _d, _e = _a.transitionProps, transitionProps = _e === void 0 ? {} : _e, disableBackdropClick = _a.disableBackdropClick, _f = _a.disableAutoFocus, disableAutoFocus = _f === void 0 ? false : _f, _g = _a.disableFocusLock, disableFocusLock = _g === void 0 ? false : _g, _h = _a.disableEscapeKeyDown, disableEscapeKeyDown = _h === void 0 ? false : _h, _j = _a.disableRestoreFocus, disableRestoreFocus = _j === void 0 ? false : _j, _k = _a.keepMounted, keepMounted = _k === void 0 ? false : _k, className = _a.className, contentClassName = _a.contentClassName, wrapperClassName = _a.wrapperClassName, onBackdropClick = _a.onBackdropClick, onClose = _a.onClose, onEscapeKeyDown = _a.onEscapeKeyDown, onMount = _a.onMount, onUnmount = _a.onUnmount, dataTestId = _a.dataTestId, _l = _a.zIndex, zIndex = _l === void 0 ? coreComponentsStack.stackingOrder.MODAL : _l, _m = _a.componentRef, componentRef = _m === void 0 ? null : _m;
67
+ var _o = React.useState(!open), exited = _o[0], setExited = _o[1];
68
+ var _p = React.useState(false), hasScroll = _p[0], setHasScroll = _p[1];
69
+ var _q = React.useState(false), hasHeader = _q[0], setHasHeader = _q[1];
70
+ var _r = React.useState(false), hasFooter = _r[0], setHasFooter = _r[1];
71
+ var _s = React.useState(false), headerHighlighted = _s[0], setHeaderHighlighted = _s[1];
72
+ var _t = React.useState(false), footerHighlighted = _t[0], setFooterHighlighted = _t[1];
73
+ var componentNodeRef = React.useRef(null);
74
74
  var wrapperRef = React.useRef(null);
75
75
  var scrollableNodeRef = React.useRef(null);
76
76
  var contentNodeRef = React.useRef(null);
@@ -104,15 +104,16 @@ var BaseModal = React.forwardRef(function (_a, ref) {
104
104
  }
105
105
  }, [resizeObserver$1]);
106
106
  var handleScroll = React.useCallback(function () {
107
- if (!scrollableNodeRef.current || !componentRef.current)
107
+ if (!scrollableNodeRef.current || !componentNodeRef.current)
108
108
  return;
109
109
  if (hasHeader) {
110
110
  setHeaderHighlighted(!utils.isScrolledToTop(scrollableNodeRef.current) &&
111
- componentRef.current.getBoundingClientRect().top <= 0);
111
+ componentNodeRef.current.getBoundingClientRect().top <= 0);
112
112
  }
113
113
  if (hasFooter) {
114
114
  setFooterHighlighted(!utils.isScrolledToBottom(scrollableNodeRef.current) &&
115
- componentRef.current.getBoundingClientRect().bottom >= window.innerHeight);
115
+ componentNodeRef.current.getBoundingClientRect().bottom >=
116
+ window.innerHeight);
116
117
  }
117
118
  }, [hasFooter, hasHeader]);
118
119
  var handleClose = React.useCallback(function (event, reason) {
@@ -150,7 +151,7 @@ var BaseModal = React.forwardRef(function (_a, ref) {
150
151
  if (scrollHandler === 'wrapper')
151
152
  return wrapperRef.current;
152
153
  if (scrollHandler === 'content')
153
- return componentRef.current;
154
+ return componentNodeRef.current;
154
155
  return scrollHandler.current || wrapperRef.current;
155
156
  }, [scrollHandler]);
156
157
  var handleEntered = React.useCallback(function (node, isAppearing) {
@@ -238,7 +239,7 @@ var BaseModal = React.forwardRef(function (_a, ref) {
238
239
  zIndex: computedZIndex,
239
240
  } },
240
241
  React__default['default'].createElement(reactTransitionGroup.CSSTransition, __assign({ appear: true, timeout: 200, classNames: styles }, transitionProps, { in: open, onEntered: handleEntered, onExited: handleExited }),
241
- React__default['default'].createElement("div", { className: cn__default['default'](styles.component, className), ref: componentRef },
242
+ React__default['default'].createElement("div", { className: cn__default['default'](styles.component, className), ref: mergeRefs__default['default']([componentRef, componentNodeRef]) },
242
243
  React__default['default'].createElement("div", { className: cn__default['default'](styles.content, contentClassName) }, children))))))));
243
244
  }));
244
245
  });
@@ -108,6 +108,10 @@ type BaseModalProps = {
108
108
  * z-index компонента
109
109
  */
110
110
  zIndex?: number;
111
+ /**
112
+ * Реф, который должен быть установлен компонентной области
113
+ */
114
+ componentRef?: MutableRefObject<HTMLDivElement | null>;
111
115
  };
112
116
  type BaseModalContext = {
113
117
  hasFooter?: boolean;
@@ -62,14 +62,14 @@ var BaseModalContext = React__default['default'].createContext({
62
62
  onClose: function () { return null; },
63
63
  });
64
64
  var BaseModal = React.forwardRef(function (_a, ref) {
65
- var open = _a.open, container = _a.container, children = _a.children, _b = _a.scrollHandler, scrollHandler = _b === void 0 ? 'wrapper' : _b, _c = _a.Backdrop, Backdrop = _c === void 0 ? coreComponentsBackdrop.Backdrop : _c, _d = _a.backdropProps, backdropProps = _d === void 0 ? {} : _d, _e = _a.transitionProps, transitionProps = _e === void 0 ? {} : _e, disableBackdropClick = _a.disableBackdropClick, _f = _a.disableAutoFocus, disableAutoFocus = _f === void 0 ? false : _f, _g = _a.disableFocusLock, disableFocusLock = _g === void 0 ? false : _g, _h = _a.disableEscapeKeyDown, disableEscapeKeyDown = _h === void 0 ? false : _h, _j = _a.disableRestoreFocus, disableRestoreFocus = _j === void 0 ? false : _j, _k = _a.keepMounted, keepMounted = _k === void 0 ? false : _k, className = _a.className, contentClassName = _a.contentClassName, wrapperClassName = _a.wrapperClassName, onBackdropClick = _a.onBackdropClick, onClose = _a.onClose, onEscapeKeyDown = _a.onEscapeKeyDown, onMount = _a.onMount, onUnmount = _a.onUnmount, dataTestId = _a.dataTestId, _l = _a.zIndex, zIndex = _l === void 0 ? coreComponentsStack.stackingOrder.MODAL : _l;
66
- var _m = React.useState(!open), exited = _m[0], setExited = _m[1];
67
- var _o = React.useState(false), hasScroll = _o[0], setHasScroll = _o[1];
68
- var _p = React.useState(false), hasHeader = _p[0], setHasHeader = _p[1];
69
- var _q = React.useState(false), hasFooter = _q[0], setHasFooter = _q[1];
70
- var _r = React.useState(false), headerHighlighted = _r[0], setHeaderHighlighted = _r[1];
71
- var _s = React.useState(false), footerHighlighted = _s[0], setFooterHighlighted = _s[1];
72
- var componentRef = React.useRef(null);
65
+ var open = _a.open, container = _a.container, children = _a.children, _b = _a.scrollHandler, scrollHandler = _b === void 0 ? 'wrapper' : _b, _c = _a.Backdrop, Backdrop = _c === void 0 ? coreComponentsBackdrop.Backdrop : _c, _d = _a.backdropProps, backdropProps = _d === void 0 ? {} : _d, _e = _a.transitionProps, transitionProps = _e === void 0 ? {} : _e, disableBackdropClick = _a.disableBackdropClick, _f = _a.disableAutoFocus, disableAutoFocus = _f === void 0 ? false : _f, _g = _a.disableFocusLock, disableFocusLock = _g === void 0 ? false : _g, _h = _a.disableEscapeKeyDown, disableEscapeKeyDown = _h === void 0 ? false : _h, _j = _a.disableRestoreFocus, disableRestoreFocus = _j === void 0 ? false : _j, _k = _a.keepMounted, keepMounted = _k === void 0 ? false : _k, className = _a.className, contentClassName = _a.contentClassName, wrapperClassName = _a.wrapperClassName, onBackdropClick = _a.onBackdropClick, onClose = _a.onClose, onEscapeKeyDown = _a.onEscapeKeyDown, onMount = _a.onMount, onUnmount = _a.onUnmount, dataTestId = _a.dataTestId, _l = _a.zIndex, zIndex = _l === void 0 ? coreComponentsStack.stackingOrder.MODAL : _l, _m = _a.componentRef, componentRef = _m === void 0 ? null : _m;
66
+ var _o = React.useState(!open), exited = _o[0], setExited = _o[1];
67
+ var _p = React.useState(false), hasScroll = _p[0], setHasScroll = _p[1];
68
+ var _q = React.useState(false), hasHeader = _q[0], setHasHeader = _q[1];
69
+ var _r = React.useState(false), hasFooter = _r[0], setHasFooter = _r[1];
70
+ var _s = React.useState(false), headerHighlighted = _s[0], setHeaderHighlighted = _s[1];
71
+ var _t = React.useState(false), footerHighlighted = _t[0], setFooterHighlighted = _t[1];
72
+ var componentNodeRef = React.useRef(null);
73
73
  var wrapperRef = React.useRef(null);
74
74
  var scrollableNodeRef = React.useRef(null);
75
75
  var contentNodeRef = React.useRef(null);
@@ -103,15 +103,16 @@ var BaseModal = React.forwardRef(function (_a, ref) {
103
103
  }
104
104
  }, [resizeObserver$1]);
105
105
  var handleScroll = React.useCallback(function () {
106
- if (!scrollableNodeRef.current || !componentRef.current)
106
+ if (!scrollableNodeRef.current || !componentNodeRef.current)
107
107
  return;
108
108
  if (hasHeader) {
109
109
  setHeaderHighlighted(!utils.isScrolledToTop(scrollableNodeRef.current) &&
110
- componentRef.current.getBoundingClientRect().top <= 0);
110
+ componentNodeRef.current.getBoundingClientRect().top <= 0);
111
111
  }
112
112
  if (hasFooter) {
113
113
  setFooterHighlighted(!utils.isScrolledToBottom(scrollableNodeRef.current) &&
114
- componentRef.current.getBoundingClientRect().bottom >= window.innerHeight);
114
+ componentNodeRef.current.getBoundingClientRect().bottom >=
115
+ window.innerHeight);
115
116
  }
116
117
  }, [hasFooter, hasHeader]);
117
118
  var handleClose = React.useCallback(function (event, reason) {
@@ -149,7 +150,7 @@ var BaseModal = React.forwardRef(function (_a, ref) {
149
150
  if (scrollHandler === 'wrapper')
150
151
  return wrapperRef.current;
151
152
  if (scrollHandler === 'content')
152
- return componentRef.current;
153
+ return componentNodeRef.current;
153
154
  return scrollHandler.current || wrapperRef.current;
154
155
  }, [scrollHandler]);
155
156
  var handleEntered = React.useCallback(function (node, isAppearing) {
@@ -237,7 +238,7 @@ var BaseModal = React.forwardRef(function (_a, ref) {
237
238
  zIndex: computedZIndex,
238
239
  } },
239
240
  React__default['default'].createElement(reactTransitionGroup.CSSTransition, __assign({ appear: true, timeout: 200, classNames: styles__default['default'] }, transitionProps, { in: open, onEntered: handleEntered, onExited: handleExited }),
240
- React__default['default'].createElement("div", { className: cn__default['default'](styles__default['default'].component, className), ref: componentRef },
241
+ React__default['default'].createElement("div", { className: cn__default['default'](styles__default['default'].component, className), ref: mergeRefs__default['default']([componentRef, componentNodeRef]) },
241
242
  React__default['default'].createElement("div", { className: cn__default['default'](styles__default['default'].content, contentClassName) }, children))))))));
242
243
  }));
243
244
  });
@@ -108,6 +108,10 @@ type BaseModalProps = {
108
108
  * z-index компонента
109
109
  */
110
110
  zIndex?: number;
111
+ /**
112
+ * Реф, который должен быть установлен компонентной области
113
+ */
114
+ componentRef?: MutableRefObject<HTMLDivElement | null>;
111
115
  };
112
116
  type BaseModalContext = {
113
117
  hasFooter?: boolean;
@@ -37,7 +37,7 @@ var __assign = function () {
37
37
  return __assign.apply(this, arguments);
38
38
  };
39
39
 
40
- var styles = {"component":"base-modal__component_rp8e5","wrapper":"base-modal__wrapper_rp8e5","content":"base-modal__content_rp8e5","hidden":"base-modal__hidden_rp8e5","backdrop":"base-modal__backdrop_rp8e5","appear":"base-modal__appear_rp8e5","enter":"base-modal__enter_rp8e5","appearActive":"base-modal__appearActive_rp8e5","enterActive":"base-modal__enterActive_rp8e5","exit":"base-modal__exit_rp8e5","exitActive":"base-modal__exitActive_rp8e5","exitDone":"base-modal__exitDone_rp8e5"};
40
+ var styles = {"component":"base-modal__component_pvkw5","wrapper":"base-modal__wrapper_pvkw5","content":"base-modal__content_pvkw5","hidden":"base-modal__hidden_pvkw5","backdrop":"base-modal__backdrop_pvkw5","appear":"base-modal__appear_pvkw5","enter":"base-modal__enter_pvkw5","appearActive":"base-modal__appearActive_pvkw5","enterActive":"base-modal__enterActive_pvkw5","exit":"base-modal__exit_pvkw5","exitActive":"base-modal__exitActive_pvkw5","exitDone":"base-modal__exitDone_pvkw5"};
41
41
  require('./index.css')
42
42
 
43
43
  var BaseModalContext = React.createContext({
@@ -52,14 +52,14 @@ var BaseModalContext = React.createContext({
52
52
  onClose: function () { return null; },
53
53
  });
54
54
  var BaseModal = forwardRef(function (_a, ref) {
55
- var open = _a.open, container = _a.container, children = _a.children, _b = _a.scrollHandler, scrollHandler = _b === void 0 ? 'wrapper' : _b, _c = _a.Backdrop, Backdrop$1 = _c === void 0 ? Backdrop : _c, _d = _a.backdropProps, backdropProps = _d === void 0 ? {} : _d, _e = _a.transitionProps, transitionProps = _e === void 0 ? {} : _e, disableBackdropClick = _a.disableBackdropClick, _f = _a.disableAutoFocus, disableAutoFocus = _f === void 0 ? false : _f, _g = _a.disableFocusLock, disableFocusLock = _g === void 0 ? false : _g, _h = _a.disableEscapeKeyDown, disableEscapeKeyDown = _h === void 0 ? false : _h, _j = _a.disableRestoreFocus, disableRestoreFocus = _j === void 0 ? false : _j, _k = _a.keepMounted, keepMounted = _k === void 0 ? false : _k, className = _a.className, contentClassName = _a.contentClassName, wrapperClassName = _a.wrapperClassName, onBackdropClick = _a.onBackdropClick, onClose = _a.onClose, onEscapeKeyDown = _a.onEscapeKeyDown, onMount = _a.onMount, onUnmount = _a.onUnmount, dataTestId = _a.dataTestId, _l = _a.zIndex, zIndex = _l === void 0 ? stackingOrder.MODAL : _l;
56
- var _m = useState(!open), exited = _m[0], setExited = _m[1];
57
- var _o = useState(false), hasScroll = _o[0], setHasScroll = _o[1];
58
- var _p = useState(false), hasHeader = _p[0], setHasHeader = _p[1];
59
- var _q = useState(false), hasFooter = _q[0], setHasFooter = _q[1];
60
- var _r = useState(false), headerHighlighted = _r[0], setHeaderHighlighted = _r[1];
61
- var _s = useState(false), footerHighlighted = _s[0], setFooterHighlighted = _s[1];
62
- var componentRef = useRef(null);
55
+ var open = _a.open, container = _a.container, children = _a.children, _b = _a.scrollHandler, scrollHandler = _b === void 0 ? 'wrapper' : _b, _c = _a.Backdrop, Backdrop$1 = _c === void 0 ? Backdrop : _c, _d = _a.backdropProps, backdropProps = _d === void 0 ? {} : _d, _e = _a.transitionProps, transitionProps = _e === void 0 ? {} : _e, disableBackdropClick = _a.disableBackdropClick, _f = _a.disableAutoFocus, disableAutoFocus = _f === void 0 ? false : _f, _g = _a.disableFocusLock, disableFocusLock = _g === void 0 ? false : _g, _h = _a.disableEscapeKeyDown, disableEscapeKeyDown = _h === void 0 ? false : _h, _j = _a.disableRestoreFocus, disableRestoreFocus = _j === void 0 ? false : _j, _k = _a.keepMounted, keepMounted = _k === void 0 ? false : _k, className = _a.className, contentClassName = _a.contentClassName, wrapperClassName = _a.wrapperClassName, onBackdropClick = _a.onBackdropClick, onClose = _a.onClose, onEscapeKeyDown = _a.onEscapeKeyDown, onMount = _a.onMount, onUnmount = _a.onUnmount, dataTestId = _a.dataTestId, _l = _a.zIndex, zIndex = _l === void 0 ? stackingOrder.MODAL : _l, _m = _a.componentRef, componentRef = _m === void 0 ? null : _m;
56
+ var _o = useState(!open), exited = _o[0], setExited = _o[1];
57
+ var _p = useState(false), hasScroll = _p[0], setHasScroll = _p[1];
58
+ var _q = useState(false), hasHeader = _q[0], setHasHeader = _q[1];
59
+ var _r = useState(false), hasFooter = _r[0], setHasFooter = _r[1];
60
+ var _s = useState(false), headerHighlighted = _s[0], setHeaderHighlighted = _s[1];
61
+ var _t = useState(false), footerHighlighted = _t[0], setFooterHighlighted = _t[1];
62
+ var componentNodeRef = useRef(null);
63
63
  var wrapperRef = useRef(null);
64
64
  var scrollableNodeRef = useRef(null);
65
65
  var contentNodeRef = useRef(null);
@@ -93,15 +93,16 @@ var BaseModal = forwardRef(function (_a, ref) {
93
93
  }
94
94
  }, [resizeObserver]);
95
95
  var handleScroll = useCallback(function () {
96
- if (!scrollableNodeRef.current || !componentRef.current)
96
+ if (!scrollableNodeRef.current || !componentNodeRef.current)
97
97
  return;
98
98
  if (hasHeader) {
99
99
  setHeaderHighlighted(!isScrolledToTop(scrollableNodeRef.current) &&
100
- componentRef.current.getBoundingClientRect().top <= 0);
100
+ componentNodeRef.current.getBoundingClientRect().top <= 0);
101
101
  }
102
102
  if (hasFooter) {
103
103
  setFooterHighlighted(!isScrolledToBottom(scrollableNodeRef.current) &&
104
- componentRef.current.getBoundingClientRect().bottom >= window.innerHeight);
104
+ componentNodeRef.current.getBoundingClientRect().bottom >=
105
+ window.innerHeight);
105
106
  }
106
107
  }, [hasFooter, hasHeader]);
107
108
  var handleClose = useCallback(function (event, reason) {
@@ -139,7 +140,7 @@ var BaseModal = forwardRef(function (_a, ref) {
139
140
  if (scrollHandler === 'wrapper')
140
141
  return wrapperRef.current;
141
142
  if (scrollHandler === 'content')
142
- return componentRef.current;
143
+ return componentNodeRef.current;
143
144
  return scrollHandler.current || wrapperRef.current;
144
145
  }, [scrollHandler]);
145
146
  var handleEntered = useCallback(function (node, isAppearing) {
@@ -227,7 +228,7 @@ var BaseModal = forwardRef(function (_a, ref) {
227
228
  zIndex: computedZIndex,
228
229
  } },
229
230
  React.createElement(CSSTransition, __assign({ appear: true, timeout: 200, classNames: styles }, transitionProps, { in: open, onEntered: handleEntered, onExited: handleExited }),
230
- React.createElement("div", { className: cn(styles.component, className), ref: componentRef },
231
+ React.createElement("div", { className: cn(styles.component, className), ref: mergeRefs([componentRef, componentNodeRef]) },
231
232
  React.createElement("div", { className: cn(styles.content, contentClassName) }, children))))))));
232
233
  }));
233
234
  });
@@ -1,4 +1,4 @@
1
- /* hash: 1pbe4 */
1
+ /* hash: zuxb3 */
2
2
  :root {
3
3
  --color-light-bg-primary: #fff;
4
4
  }
@@ -10,14 +10,14 @@
10
10
 
11
11
  /* Hard up */
12
12
  }
13
- .base-modal__component_rp8e5 {
13
+ .base-modal__component_pvkw5 {
14
14
  position: relative;
15
15
  box-sizing: border-box;
16
16
  background: var(--color-light-bg-primary);
17
17
  margin: auto;
18
18
  flex-shrink: 0;
19
19
  }
20
- .base-modal__wrapper_rp8e5 {
20
+ .base-modal__wrapper_pvkw5 {
21
21
  position: fixed;
22
22
  top: 0;
23
23
  left: 0;
@@ -30,33 +30,33 @@
30
30
  align-items: center;
31
31
  outline: 0;
32
32
  }
33
- .base-modal__content_rp8e5 {
33
+ .base-modal__content_pvkw5 {
34
34
  width: 100%;
35
35
  height: 100%;
36
36
  display: flex;
37
37
  flex-direction: column;
38
38
  flex: 1;
39
39
  }
40
- .base-modal__hidden_rp8e5 {
40
+ .base-modal__hidden_pvkw5 {
41
41
  display: none;
42
42
  }
43
- .base-modal__backdrop_rp8e5 {
43
+ .base-modal__backdrop_pvkw5 {
44
44
  z-index: 0;
45
45
  }
46
- .base-modal__appear_rp8e5,
47
- .base-modal__enter_rp8e5 {
46
+ .base-modal__appear_pvkw5,
47
+ .base-modal__enter_pvkw5 {
48
48
  opacity: 0;
49
49
  }
50
- .base-modal__appearActive_rp8e5,
51
- .base-modal__enterActive_rp8e5 {
50
+ .base-modal__appearActive_pvkw5,
51
+ .base-modal__enterActive_pvkw5 {
52
52
  opacity: 1;
53
53
  transition: opacity 200ms ease-in;
54
54
  }
55
- .base-modal__exit_rp8e5 {
55
+ .base-modal__exit_pvkw5 {
56
56
  opacity: 1;
57
57
  }
58
- .base-modal__exitActive_rp8e5,
59
- .base-modal__exitDone_rp8e5 {
58
+ .base-modal__exitActive_pvkw5,
59
+ .base-modal__exitDone_pvkw5 {
60
60
  opacity: 0;
61
61
  transition: opacity 200ms ease-out;
62
62
  }
package/dist/index.css CHANGED
@@ -1,4 +1,4 @@
1
- /* hash: 1pbe4 */
1
+ /* hash: zuxb3 */
2
2
  :root {
3
3
  --color-light-bg-primary: #fff;
4
4
  }
@@ -10,14 +10,14 @@
10
10
 
11
11
  /* Hard up */
12
12
  }
13
- .base-modal__component_rp8e5 {
13
+ .base-modal__component_pvkw5 {
14
14
  position: relative;
15
15
  box-sizing: border-box;
16
16
  background: var(--color-light-bg-primary);
17
17
  margin: auto;
18
18
  flex-shrink: 0;
19
19
  }
20
- .base-modal__wrapper_rp8e5 {
20
+ .base-modal__wrapper_pvkw5 {
21
21
  position: fixed;
22
22
  top: 0;
23
23
  left: 0;
@@ -30,33 +30,33 @@
30
30
  align-items: center;
31
31
  outline: 0;
32
32
  }
33
- .base-modal__content_rp8e5 {
33
+ .base-modal__content_pvkw5 {
34
34
  width: 100%;
35
35
  height: 100%;
36
36
  display: flex;
37
37
  flex-direction: column;
38
38
  flex: 1;
39
39
  }
40
- .base-modal__hidden_rp8e5 {
40
+ .base-modal__hidden_pvkw5 {
41
41
  display: none;
42
42
  }
43
- .base-modal__backdrop_rp8e5 {
43
+ .base-modal__backdrop_pvkw5 {
44
44
  z-index: 0;
45
45
  }
46
- .base-modal__appear_rp8e5,
47
- .base-modal__enter_rp8e5 {
46
+ .base-modal__appear_pvkw5,
47
+ .base-modal__enter_pvkw5 {
48
48
  opacity: 0;
49
49
  }
50
- .base-modal__appearActive_rp8e5,
51
- .base-modal__enterActive_rp8e5 {
50
+ .base-modal__appearActive_pvkw5,
51
+ .base-modal__enterActive_pvkw5 {
52
52
  opacity: 1;
53
53
  transition: opacity 200ms ease-in;
54
54
  }
55
- .base-modal__exit_rp8e5 {
55
+ .base-modal__exit_pvkw5 {
56
56
  opacity: 1;
57
57
  }
58
- .base-modal__exitActive_rp8e5,
59
- .base-modal__exitDone_rp8e5 {
58
+ .base-modal__exitActive_pvkw5,
59
+ .base-modal__exitDone_pvkw5 {
60
60
  opacity: 0;
61
61
  transition: opacity 200ms ease-out;
62
62
  }
@@ -108,6 +108,10 @@ type BaseModalProps = {
108
108
  * z-index компонента
109
109
  */
110
110
  zIndex?: number;
111
+ /**
112
+ * Реф, который должен быть установлен компонентной области
113
+ */
114
+ componentRef?: MutableRefObject<HTMLDivElement | null>;
111
115
  };
112
116
  type BaseModalContext = {
113
117
  hasFooter?: boolean;
@@ -10,7 +10,7 @@ import { stackingOrder, Stack } from '@alfalab/core-components-stack/dist/modern
10
10
  import '@alfalab/core-components-global-store/dist/modern';
11
11
  import { isScrolledToTop, isScrolledToBottom, handleContainer, restoreContainerStyles, hasScrollbar } from './utils.js';
12
12
 
13
- var styles = {"component":"base-modal__component_rp8e5","wrapper":"base-modal__wrapper_rp8e5","content":"base-modal__content_rp8e5","hidden":"base-modal__hidden_rp8e5","backdrop":"base-modal__backdrop_rp8e5","appear":"base-modal__appear_rp8e5","enter":"base-modal__enter_rp8e5","appearActive":"base-modal__appearActive_rp8e5","enterActive":"base-modal__enterActive_rp8e5","exit":"base-modal__exit_rp8e5","exitActive":"base-modal__exitActive_rp8e5","exitDone":"base-modal__exitDone_rp8e5"};
13
+ var styles = {"component":"base-modal__component_pvkw5","wrapper":"base-modal__wrapper_pvkw5","content":"base-modal__content_pvkw5","hidden":"base-modal__hidden_pvkw5","backdrop":"base-modal__backdrop_pvkw5","appear":"base-modal__appear_pvkw5","enter":"base-modal__enter_pvkw5","appearActive":"base-modal__appearActive_pvkw5","enterActive":"base-modal__enterActive_pvkw5","exit":"base-modal__exit_pvkw5","exitActive":"base-modal__exitActive_pvkw5","exitDone":"base-modal__exitDone_pvkw5"};
14
14
  require('./index.css')
15
15
 
16
16
  /* eslint-disable jsx-a11y/no-noninteractive-element-interactions */
@@ -25,14 +25,14 @@ const BaseModalContext = React.createContext({
25
25
  setHasFooter: () => null,
26
26
  onClose: () => null,
27
27
  });
28
- const BaseModal = forwardRef(({ open, container, children, scrollHandler = 'wrapper', Backdrop: Backdrop$1 = Backdrop, backdropProps = {}, transitionProps = {}, disableBackdropClick, disableAutoFocus = false, disableFocusLock = false, disableEscapeKeyDown = false, disableRestoreFocus = false, keepMounted = false, className, contentClassName, wrapperClassName, onBackdropClick, onClose, onEscapeKeyDown, onMount, onUnmount, dataTestId, zIndex = stackingOrder.MODAL, }, ref) => {
28
+ const BaseModal = forwardRef(({ open, container, children, scrollHandler = 'wrapper', Backdrop: Backdrop$1 = Backdrop, backdropProps = {}, transitionProps = {}, disableBackdropClick, disableAutoFocus = false, disableFocusLock = false, disableEscapeKeyDown = false, disableRestoreFocus = false, keepMounted = false, className, contentClassName, wrapperClassName, onBackdropClick, onClose, onEscapeKeyDown, onMount, onUnmount, dataTestId, zIndex = stackingOrder.MODAL, componentRef = null, }, ref) => {
29
29
  const [exited, setExited] = useState(!open);
30
30
  const [hasScroll, setHasScroll] = useState(false);
31
31
  const [hasHeader, setHasHeader] = useState(false);
32
32
  const [hasFooter, setHasFooter] = useState(false);
33
33
  const [headerHighlighted, setHeaderHighlighted] = useState(false);
34
34
  const [footerHighlighted, setFooterHighlighted] = useState(false);
35
- const componentRef = useRef(null);
35
+ const componentNodeRef = useRef(null);
36
36
  const wrapperRef = useRef(null);
37
37
  const scrollableNodeRef = useRef(null);
38
38
  const contentNodeRef = useRef(null);
@@ -66,15 +66,16 @@ const BaseModal = forwardRef(({ open, container, children, scrollHandler = 'wrap
66
66
  }
67
67
  }, [resizeObserver]);
68
68
  const handleScroll = useCallback(() => {
69
- if (!scrollableNodeRef.current || !componentRef.current)
69
+ if (!scrollableNodeRef.current || !componentNodeRef.current)
70
70
  return;
71
71
  if (hasHeader) {
72
72
  setHeaderHighlighted(!isScrolledToTop(scrollableNodeRef.current) &&
73
- componentRef.current.getBoundingClientRect().top <= 0);
73
+ componentNodeRef.current.getBoundingClientRect().top <= 0);
74
74
  }
75
75
  if (hasFooter) {
76
76
  setFooterHighlighted(!isScrolledToBottom(scrollableNodeRef.current) &&
77
- componentRef.current.getBoundingClientRect().bottom >= window.innerHeight);
77
+ componentNodeRef.current.getBoundingClientRect().bottom >=
78
+ window.innerHeight);
78
79
  }
79
80
  }, [hasFooter, hasHeader]);
80
81
  const handleClose = useCallback((event, reason) => {
@@ -112,7 +113,7 @@ const BaseModal = forwardRef(({ open, container, children, scrollHandler = 'wrap
112
113
  if (scrollHandler === 'wrapper')
113
114
  return wrapperRef.current;
114
115
  if (scrollHandler === 'content')
115
- return componentRef.current;
116
+ return componentNodeRef.current;
116
117
  return scrollHandler.current || wrapperRef.current;
117
118
  }, [scrollHandler]);
118
119
  const handleEntered = useCallback((node, isAppearing) => {
@@ -198,7 +199,7 @@ const BaseModal = forwardRef(({ open, container, children, scrollHandler = 'wrap
198
199
  zIndex: computedZIndex,
199
200
  } },
200
201
  React.createElement(CSSTransition, Object.assign({ appear: true, timeout: 200, classNames: styles }, transitionProps, { in: open, onEntered: handleEntered, onExited: handleExited }),
201
- React.createElement("div", { className: cn(styles.component, className), ref: componentRef },
202
+ React.createElement("div", { className: cn(styles.component, className), ref: mergeRefs([componentRef, componentNodeRef]) },
202
203
  React.createElement("div", { className: cn(styles.content, contentClassName) }, children))))))))));
203
204
  });
204
205
 
@@ -1,4 +1,4 @@
1
- /* hash: 1pbe4 */
1
+ /* hash: zuxb3 */
2
2
  :root {
3
3
  --color-light-bg-primary: #fff;
4
4
  }
@@ -10,14 +10,14 @@
10
10
 
11
11
  /* Hard up */
12
12
  }
13
- .base-modal__component_rp8e5 {
13
+ .base-modal__component_pvkw5 {
14
14
  position: relative;
15
15
  box-sizing: border-box;
16
16
  background: var(--color-light-bg-primary);
17
17
  margin: auto;
18
18
  flex-shrink: 0;
19
19
  }
20
- .base-modal__wrapper_rp8e5 {
20
+ .base-modal__wrapper_pvkw5 {
21
21
  position: fixed;
22
22
  top: 0;
23
23
  left: 0;
@@ -30,33 +30,33 @@
30
30
  align-items: center;
31
31
  outline: 0;
32
32
  }
33
- .base-modal__content_rp8e5 {
33
+ .base-modal__content_pvkw5 {
34
34
  width: 100%;
35
35
  height: 100%;
36
36
  display: flex;
37
37
  flex-direction: column;
38
38
  flex: 1;
39
39
  }
40
- .base-modal__hidden_rp8e5 {
40
+ .base-modal__hidden_pvkw5 {
41
41
  display: none;
42
42
  }
43
- .base-modal__backdrop_rp8e5 {
43
+ .base-modal__backdrop_pvkw5 {
44
44
  z-index: 0;
45
45
  }
46
- .base-modal__appear_rp8e5,
47
- .base-modal__enter_rp8e5 {
46
+ .base-modal__appear_pvkw5,
47
+ .base-modal__enter_pvkw5 {
48
48
  opacity: 0;
49
49
  }
50
- .base-modal__appearActive_rp8e5,
51
- .base-modal__enterActive_rp8e5 {
50
+ .base-modal__appearActive_pvkw5,
51
+ .base-modal__enterActive_pvkw5 {
52
52
  opacity: 1;
53
53
  transition: opacity 200ms ease-in;
54
54
  }
55
- .base-modal__exit_rp8e5 {
55
+ .base-modal__exit_pvkw5 {
56
56
  opacity: 1;
57
57
  }
58
- .base-modal__exitActive_rp8e5,
59
- .base-modal__exitDone_rp8e5 {
58
+ .base-modal__exitActive_pvkw5,
59
+ .base-modal__exitDone_pvkw5 {
60
60
  opacity: 0;
61
61
  transition: opacity 200ms ease-out;
62
62
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alfalab/core-components-base-modal",
3
- "version": "3.1.0",
3
+ "version": "3.2.0",
4
4
  "description": "BaseModal component",
5
5
  "keywords": [],
6
6
  "license": "MIT",
@@ -31,5 +31,5 @@
31
31
  "peerDependencies": {
32
32
  "react": "^16.9.0 || ^17.0.1"
33
33
  },
34
- "gitHead": "d35b2d43cbc90ecb7665c682a2de13733bc03eb0"
34
+ "gitHead": "ddf4fab6035139cf412e0acb7174ef388f23e4f2"
35
35
  }