@alfalab/core-components-base-modal 5.8.2 → 5.8.3

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.js CHANGED
@@ -25,7 +25,7 @@ var FocusLock__default = /*#__PURE__*/_interopDefaultCompat(FocusLock);
25
25
  var mergeRefs__default = /*#__PURE__*/_interopDefaultCompat(mergeRefs);
26
26
  var cn__default = /*#__PURE__*/_interopDefaultCompat(cn);
27
27
 
28
- var styles = {"component":"base-modal__component_1c78w","wrapper":"base-modal__wrapper_1c78w","content":"base-modal__content_1c78w","hidden":"base-modal__hidden_1c78w","backdrop":"base-modal__backdrop_1c78w","appear":"base-modal__appear_1c78w","enter":"base-modal__enter_1c78w","appearActive":"base-modal__appearActive_1c78w","enterActive":"base-modal__enterActive_1c78w","exit":"base-modal__exit_1c78w","exitActive":"base-modal__exitActive_1c78w","exitDone":"base-modal__exitDone_1c78w"};
28
+ var styles = {"component":"base-modal__component_1tfil","wrapper":"base-modal__wrapper_1tfil","content":"base-modal__content_1tfil","hidden":"base-modal__hidden_1tfil","backdrop":"base-modal__backdrop_1tfil","appear":"base-modal__appear_1tfil","enter":"base-modal__enter_1tfil","appearActive":"base-modal__appearActive_1tfil","enterActive":"base-modal__enterActive_1tfil","exit":"base-modal__exit_1tfil","exitActive":"base-modal__exitActive_1tfil","exitDone":"base-modal__exitDone_1tfil"};
29
29
  require('./index.css')
30
30
 
31
31
  // eslint-disable-next-line @typescript-eslint/no-redeclare
@@ -205,6 +205,9 @@ var BaseModal = React.forwardRef(function (_a, ref) {
205
205
  }
206
206
  setExited(false);
207
207
  }
208
+ if (!open) {
209
+ helpers_lockScroll.unlockScroll();
210
+ }
208
211
  }, [getContainer, open, disableBlockingScroll, isExited, iOSLock]);
209
212
  React.useEffect(function () {
210
213
  var ResizeObserver = window.ResizeObserver || resizeObserver.ResizeObserver;
package/cssm/Component.js CHANGED
@@ -204,6 +204,9 @@ var BaseModal = React.forwardRef(function (_a, ref) {
204
204
  }
205
205
  setExited(false);
206
206
  }
207
+ if (!open) {
208
+ helpers_lockScroll.unlockScroll();
209
+ }
207
210
  }, [getContainer, open, disableBlockingScroll, isExited, iOSLock]);
208
211
  React.useEffect(function () {
209
212
  var ResizeObserver = window.ResizeObserver || resizeObserver.ResizeObserver;
@@ -1,4 +1,5 @@
1
+ declare const isScrollLocked: () => boolean;
1
2
  declare const lockScroll: () => void;
2
3
  declare const unlockScroll: () => void;
3
4
  declare const syncHeight: () => void;
4
- export { lockScroll, unlockScroll, syncHeight };
5
+ export { isScrollLocked, lockScroll, unlockScroll, syncHeight };
@@ -7,11 +7,14 @@ Object.defineProperty(exports, '__esModule', { value: true });
7
7
  * В проекте используется overflow: hidden для блокировки, но в некоторых случаях этого недостаточно. Данный хелпер призван решать эту проблему
8
8
  */
9
9
  var scrollY;
10
+ var isScrollLocked = function () { return document.body.classList.contains('is-locked'); };
10
11
  var lockScroll = function () {
11
12
  scrollY = window.scrollY;
12
13
  document.body.classList.add('is-locked');
13
14
  };
14
15
  var unlockScroll = function () {
16
+ if (!isScrollLocked())
17
+ return;
15
18
  document.body.classList.remove('is-locked');
16
19
  window.scrollTo(0, scrollY);
17
20
  };
@@ -19,6 +22,7 @@ var syncHeight = function () {
19
22
  document.body.style.setProperty('--window-inner-scrollY', "".concat(window.scrollY, "px"));
20
23
  };
21
24
 
25
+ exports.isScrollLocked = isScrollLocked;
22
26
  exports.lockScroll = lockScroll;
23
27
  exports.syncHeight = syncHeight;
24
28
  exports.unlockScroll = unlockScroll;
package/cssm/index.js CHANGED
@@ -15,6 +15,7 @@ exports.hasScrollbar = utils.hasScrollbar;
15
15
  exports.isScrolledToBottom = utils.isScrolledToBottom;
16
16
  exports.isScrolledToTop = utils.isScrolledToTop;
17
17
  exports.restoreContainerStyles = utils.restoreContainerStyles;
18
+ exports.isScrollLocked = helpers_lockScroll.isScrollLocked;
18
19
  exports.lockScroll = helpers_lockScroll.lockScroll;
19
20
  exports.syncHeight = helpers_lockScroll.syncHeight;
20
21
  exports.unlockScroll = helpers_lockScroll.unlockScroll;
package/esm/Component.js CHANGED
@@ -14,7 +14,7 @@ import { unlockScroll, syncHeight, lockScroll } from './helpers/lockScroll.js';
14
14
  import { isScrolledToTop, isScrolledToBottom, handleContainer, restoreContainerStyles, hasScrollbar } from './utils.js';
15
15
  import './matches-polyfill.js';
16
16
 
17
- var styles = {"component":"base-modal__component_1c78w","wrapper":"base-modal__wrapper_1c78w","content":"base-modal__content_1c78w","hidden":"base-modal__hidden_1c78w","backdrop":"base-modal__backdrop_1c78w","appear":"base-modal__appear_1c78w","enter":"base-modal__enter_1c78w","appearActive":"base-modal__appearActive_1c78w","enterActive":"base-modal__enterActive_1c78w","exit":"base-modal__exit_1c78w","exitActive":"base-modal__exitActive_1c78w","exitDone":"base-modal__exitDone_1c78w"};
17
+ var styles = {"component":"base-modal__component_1tfil","wrapper":"base-modal__wrapper_1tfil","content":"base-modal__content_1tfil","hidden":"base-modal__hidden_1tfil","backdrop":"base-modal__backdrop_1tfil","appear":"base-modal__appear_1tfil","enter":"base-modal__enter_1tfil","appearActive":"base-modal__appearActive_1tfil","enterActive":"base-modal__enterActive_1tfil","exit":"base-modal__exit_1tfil","exitActive":"base-modal__exitActive_1tfil","exitDone":"base-modal__exitDone_1tfil"};
18
18
  require('./index.css')
19
19
 
20
20
  // eslint-disable-next-line @typescript-eslint/no-redeclare
@@ -194,6 +194,9 @@ var BaseModal = forwardRef(function (_a, ref) {
194
194
  }
195
195
  setExited(false);
196
196
  }
197
+ if (!open) {
198
+ unlockScroll();
199
+ }
197
200
  }, [getContainer, open, disableBlockingScroll, isExited, iOSLock]);
198
201
  useEffect(function () {
199
202
  var ResizeObserver$1 = window.ResizeObserver || ResizeObserver;
@@ -1,4 +1,5 @@
1
+ declare const isScrollLocked: () => boolean;
1
2
  declare const lockScroll: () => void;
2
3
  declare const unlockScroll: () => void;
3
4
  declare const syncHeight: () => void;
4
- export { lockScroll, unlockScroll, syncHeight };
5
+ export { isScrollLocked, lockScroll, unlockScroll, syncHeight };
@@ -3,11 +3,14 @@
3
3
  * В проекте используется overflow: hidden для блокировки, но в некоторых случаях этого недостаточно. Данный хелпер призван решать эту проблему
4
4
  */
5
5
  var scrollY;
6
+ var isScrollLocked = function () { return document.body.classList.contains('is-locked'); };
6
7
  var lockScroll = function () {
7
8
  scrollY = window.scrollY;
8
9
  document.body.classList.add('is-locked');
9
10
  };
10
11
  var unlockScroll = function () {
12
+ if (!isScrollLocked())
13
+ return;
11
14
  document.body.classList.remove('is-locked');
12
15
  window.scrollTo(0, scrollY);
13
16
  };
@@ -15,4 +18,4 @@ var syncHeight = function () {
15
18
  document.body.style.setProperty('--window-inner-scrollY', "".concat(window.scrollY, "px"));
16
19
  };
17
20
 
18
- export { lockScroll, syncHeight, unlockScroll };
21
+ export { isScrollLocked, lockScroll, syncHeight, unlockScroll };
package/esm/index.css CHANGED
@@ -1,4 +1,4 @@
1
- /* hash: kn51w */
1
+ /* hash: mo6a5 */
2
2
  :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 */ /* 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 */ /* deprecated */ /* deprecated */
3
3
  } /* deprecated */ :root {
4
4
  --color-light-modal-bg-primary: #fff; /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */
@@ -26,13 +26,13 @@
26
26
  margin-top: calc(var(--window-inner-scrollY) * -1);
27
27
  position: fixed;
28
28
  overflow: hidden;
29
- } .base-modal__component_1c78w {
29
+ } .base-modal__component_1tfil {
30
30
  position: relative;
31
31
  box-sizing: border-box;
32
32
  background: var(--color-light-modal-bg-primary);
33
33
  margin: auto;
34
34
  flex-shrink: 0;
35
- } .base-modal__wrapper_1c78w {
35
+ } .base-modal__wrapper_1tfil {
36
36
  position: fixed;
37
37
  top: var(--gap-0);
38
38
  left: var(--gap-0);
@@ -45,27 +45,27 @@
45
45
  align-items: center;
46
46
  outline: 0;
47
47
  overscroll-behavior: none;
48
- } .base-modal__content_1c78w {
48
+ } .base-modal__content_1tfil {
49
49
  width: 100%;
50
50
  height: 100%;
51
51
  display: flex;
52
52
  flex-direction: column;
53
53
  flex: 1;
54
- } .base-modal__hidden_1c78w {
54
+ } .base-modal__hidden_1tfil {
55
55
  display: none;
56
- } .base-modal__backdrop_1c78w {
56
+ } .base-modal__backdrop_1tfil {
57
57
  z-index: 0;
58
- } .base-modal__appear_1c78w,
59
- .base-modal__enter_1c78w {
58
+ } .base-modal__appear_1tfil,
59
+ .base-modal__enter_1tfil {
60
60
  opacity: 0;
61
- } .base-modal__appearActive_1c78w,
62
- .base-modal__enterActive_1c78w {
61
+ } .base-modal__appearActive_1tfil,
62
+ .base-modal__enterActive_1tfil {
63
63
  opacity: 1;
64
64
  transition: opacity 200ms ease-in;
65
- } .base-modal__exit_1c78w {
65
+ } .base-modal__exit_1tfil {
66
66
  opacity: 1;
67
- } .base-modal__exitActive_1c78w,
68
- .base-modal__exitDone_1c78w {
67
+ } .base-modal__exitActive_1tfil,
68
+ .base-modal__exitDone_1tfil {
69
69
  opacity: 0;
70
70
  transition: opacity 200ms ease-out;
71
71
  }
package/esm/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  export { BaseModal, BaseModalContext } from './Component.js';
2
2
  export { handleContainer, hasScrollbar, isScrolledToBottom, isScrolledToTop, restoreContainerStyles } from './utils.js';
3
- export { lockScroll, syncHeight, unlockScroll } from './helpers/lockScroll.js';
3
+ export { isScrollLocked, lockScroll, syncHeight, unlockScroll } from './helpers/lockScroll.js';
@@ -1,4 +1,5 @@
1
+ declare const isScrollLocked: () => boolean;
1
2
  declare const lockScroll: () => void;
2
3
  declare const unlockScroll: () => void;
3
4
  declare const syncHeight: () => void;
4
- export { lockScroll, unlockScroll, syncHeight };
5
+ export { isScrollLocked, lockScroll, unlockScroll, syncHeight };
@@ -7,11 +7,14 @@ Object.defineProperty(exports, '__esModule', { value: true });
7
7
  * В проекте используется overflow: hidden для блокировки, но в некоторых случаях этого недостаточно. Данный хелпер призван решать эту проблему
8
8
  */
9
9
  var scrollY;
10
+ var isScrollLocked = function () { return document.body.classList.contains('is-locked'); };
10
11
  var lockScroll = function () {
11
12
  scrollY = window.scrollY;
12
13
  document.body.classList.add('is-locked');
13
14
  };
14
15
  var unlockScroll = function () {
16
+ if (!isScrollLocked())
17
+ return;
15
18
  document.body.classList.remove('is-locked');
16
19
  window.scrollTo(0, scrollY);
17
20
  };
@@ -19,6 +22,7 @@ var syncHeight = function () {
19
22
  document.body.style.setProperty('--window-inner-scrollY', "".concat(window.scrollY, "px"));
20
23
  };
21
24
 
25
+ exports.isScrollLocked = isScrollLocked;
22
26
  exports.lockScroll = lockScroll;
23
27
  exports.syncHeight = syncHeight;
24
28
  exports.unlockScroll = unlockScroll;
package/index.css CHANGED
@@ -1,4 +1,4 @@
1
- /* hash: kn51w */
1
+ /* hash: mo6a5 */
2
2
  :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 */ /* 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 */ /* deprecated */ /* deprecated */
3
3
  } /* deprecated */ :root {
4
4
  --color-light-modal-bg-primary: #fff; /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */
@@ -26,13 +26,13 @@
26
26
  margin-top: calc(var(--window-inner-scrollY) * -1);
27
27
  position: fixed;
28
28
  overflow: hidden;
29
- } .base-modal__component_1c78w {
29
+ } .base-modal__component_1tfil {
30
30
  position: relative;
31
31
  box-sizing: border-box;
32
32
  background: var(--color-light-modal-bg-primary);
33
33
  margin: auto;
34
34
  flex-shrink: 0;
35
- } .base-modal__wrapper_1c78w {
35
+ } .base-modal__wrapper_1tfil {
36
36
  position: fixed;
37
37
  top: var(--gap-0);
38
38
  left: var(--gap-0);
@@ -45,27 +45,27 @@
45
45
  align-items: center;
46
46
  outline: 0;
47
47
  overscroll-behavior: none;
48
- } .base-modal__content_1c78w {
48
+ } .base-modal__content_1tfil {
49
49
  width: 100%;
50
50
  height: 100%;
51
51
  display: flex;
52
52
  flex-direction: column;
53
53
  flex: 1;
54
- } .base-modal__hidden_1c78w {
54
+ } .base-modal__hidden_1tfil {
55
55
  display: none;
56
- } .base-modal__backdrop_1c78w {
56
+ } .base-modal__backdrop_1tfil {
57
57
  z-index: 0;
58
- } .base-modal__appear_1c78w,
59
- .base-modal__enter_1c78w {
58
+ } .base-modal__appear_1tfil,
59
+ .base-modal__enter_1tfil {
60
60
  opacity: 0;
61
- } .base-modal__appearActive_1c78w,
62
- .base-modal__enterActive_1c78w {
61
+ } .base-modal__appearActive_1tfil,
62
+ .base-modal__enterActive_1tfil {
63
63
  opacity: 1;
64
64
  transition: opacity 200ms ease-in;
65
- } .base-modal__exit_1c78w {
65
+ } .base-modal__exit_1tfil {
66
66
  opacity: 1;
67
- } .base-modal__exitActive_1c78w,
68
- .base-modal__exitDone_1c78w {
67
+ } .base-modal__exitActive_1tfil,
68
+ .base-modal__exitDone_1tfil {
69
69
  opacity: 0;
70
70
  transition: opacity 200ms ease-out;
71
71
  }
package/index.js CHANGED
@@ -15,6 +15,7 @@ exports.hasScrollbar = utils.hasScrollbar;
15
15
  exports.isScrolledToBottom = utils.isScrolledToBottom;
16
16
  exports.isScrolledToTop = utils.isScrolledToTop;
17
17
  exports.restoreContainerStyles = utils.restoreContainerStyles;
18
+ exports.isScrollLocked = helpers_lockScroll.isScrollLocked;
18
19
  exports.lockScroll = helpers_lockScroll.lockScroll;
19
20
  exports.syncHeight = helpers_lockScroll.syncHeight;
20
21
  exports.unlockScroll = helpers_lockScroll.unlockScroll;
@@ -13,7 +13,7 @@ import { unlockScroll, syncHeight, lockScroll } from './helpers/lockScroll.js';
13
13
  import { isScrolledToTop, isScrolledToBottom, handleContainer, restoreContainerStyles, hasScrollbar } from './utils.js';
14
14
  import './matches-polyfill.js';
15
15
 
16
- const styles = {"component":"base-modal__component_1c78w","wrapper":"base-modal__wrapper_1c78w","content":"base-modal__content_1c78w","hidden":"base-modal__hidden_1c78w","backdrop":"base-modal__backdrop_1c78w","appear":"base-modal__appear_1c78w","enter":"base-modal__enter_1c78w","appearActive":"base-modal__appearActive_1c78w","enterActive":"base-modal__enterActive_1c78w","exit":"base-modal__exit_1c78w","exitActive":"base-modal__exitActive_1c78w","exitDone":"base-modal__exitDone_1c78w"};
16
+ const styles = {"component":"base-modal__component_1tfil","wrapper":"base-modal__wrapper_1tfil","content":"base-modal__content_1tfil","hidden":"base-modal__hidden_1tfil","backdrop":"base-modal__backdrop_1tfil","appear":"base-modal__appear_1tfil","enter":"base-modal__enter_1tfil","appearActive":"base-modal__appearActive_1tfil","enterActive":"base-modal__enterActive_1tfil","exit":"base-modal__exit_1tfil","exitActive":"base-modal__exitActive_1tfil","exitDone":"base-modal__exitDone_1tfil"};
17
17
  require('./index.css')
18
18
 
19
19
  /* eslint-disable jsx-a11y/no-noninteractive-element-interactions */
@@ -192,6 +192,9 @@ const BaseModal = forwardRef(({ open, container, children, scrollHandler = 'wrap
192
192
  }
193
193
  setExited(false);
194
194
  }
195
+ if (!open) {
196
+ unlockScroll();
197
+ }
195
198
  }, [getContainer, open, disableBlockingScroll, isExited, iOSLock]);
196
199
  useEffect(() => {
197
200
  const ResizeObserver$1 = window.ResizeObserver || ResizeObserver;
@@ -1,4 +1,5 @@
1
+ declare const isScrollLocked: () => boolean;
1
2
  declare const lockScroll: () => void;
2
3
  declare const unlockScroll: () => void;
3
4
  declare const syncHeight: () => void;
4
- export { lockScroll, unlockScroll, syncHeight };
5
+ export { isScrollLocked, lockScroll, unlockScroll, syncHeight };
@@ -3,11 +3,14 @@
3
3
  * В проекте используется overflow: hidden для блокировки, но в некоторых случаях этого недостаточно. Данный хелпер призван решать эту проблему
4
4
  */
5
5
  let scrollY;
6
+ const isScrollLocked = () => document.body.classList.contains('is-locked');
6
7
  const lockScroll = () => {
7
8
  scrollY = window.scrollY;
8
9
  document.body.classList.add('is-locked');
9
10
  };
10
11
  const unlockScroll = () => {
12
+ if (!isScrollLocked())
13
+ return;
11
14
  document.body.classList.remove('is-locked');
12
15
  window.scrollTo(0, scrollY);
13
16
  };
@@ -15,4 +18,4 @@ const syncHeight = () => {
15
18
  document.body.style.setProperty('--window-inner-scrollY', `${window.scrollY}px`);
16
19
  };
17
20
 
18
- export { lockScroll, syncHeight, unlockScroll };
21
+ export { isScrollLocked, lockScroll, syncHeight, unlockScroll };
package/modern/index.css CHANGED
@@ -1,4 +1,4 @@
1
- /* hash: kn51w */
1
+ /* hash: mo6a5 */
2
2
  :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 */ /* 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 */ /* deprecated */ /* deprecated */
3
3
  } /* deprecated */ :root {
4
4
  --color-light-modal-bg-primary: #fff; /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */ /* 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 */
@@ -26,13 +26,13 @@
26
26
  margin-top: calc(var(--window-inner-scrollY) * -1);
27
27
  position: fixed;
28
28
  overflow: hidden;
29
- } .base-modal__component_1c78w {
29
+ } .base-modal__component_1tfil {
30
30
  position: relative;
31
31
  box-sizing: border-box;
32
32
  background: var(--color-light-modal-bg-primary);
33
33
  margin: auto;
34
34
  flex-shrink: 0;
35
- } .base-modal__wrapper_1c78w {
35
+ } .base-modal__wrapper_1tfil {
36
36
  position: fixed;
37
37
  top: var(--gap-0);
38
38
  left: var(--gap-0);
@@ -45,27 +45,27 @@
45
45
  align-items: center;
46
46
  outline: 0;
47
47
  overscroll-behavior: none;
48
- } .base-modal__content_1c78w {
48
+ } .base-modal__content_1tfil {
49
49
  width: 100%;
50
50
  height: 100%;
51
51
  display: flex;
52
52
  flex-direction: column;
53
53
  flex: 1;
54
- } .base-modal__hidden_1c78w {
54
+ } .base-modal__hidden_1tfil {
55
55
  display: none;
56
- } .base-modal__backdrop_1c78w {
56
+ } .base-modal__backdrop_1tfil {
57
57
  z-index: 0;
58
- } .base-modal__appear_1c78w,
59
- .base-modal__enter_1c78w {
58
+ } .base-modal__appear_1tfil,
59
+ .base-modal__enter_1tfil {
60
60
  opacity: 0;
61
- } .base-modal__appearActive_1c78w,
62
- .base-modal__enterActive_1c78w {
61
+ } .base-modal__appearActive_1tfil,
62
+ .base-modal__enterActive_1tfil {
63
63
  opacity: 1;
64
64
  transition: opacity 200ms ease-in;
65
- } .base-modal__exit_1c78w {
65
+ } .base-modal__exit_1tfil {
66
66
  opacity: 1;
67
- } .base-modal__exitActive_1c78w,
68
- .base-modal__exitDone_1c78w {
67
+ } .base-modal__exitActive_1tfil,
68
+ .base-modal__exitDone_1tfil {
69
69
  opacity: 0;
70
70
  transition: opacity 200ms ease-out;
71
71
  }
package/modern/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  export { BaseModal, BaseModalContext } from './Component.js';
2
2
  export { handleContainer, hasScrollbar, isScrolledToBottom, isScrolledToTop, restoreContainerStyles } from './utils.js';
3
- export { lockScroll, syncHeight, unlockScroll } from './helpers/lockScroll.js';
3
+ export { isScrollLocked, lockScroll, syncHeight, unlockScroll } from './helpers/lockScroll.js';
@@ -190,6 +190,9 @@ const BaseModal = forwardRef(({ open, container, children, scrollHandler = 'wrap
190
190
  }
191
191
  setExited(false);
192
192
  }
193
+ if (!open) {
194
+ unlockScroll();
195
+ }
193
196
  }, [getContainer, open, disableBlockingScroll, isExited, iOSLock]);
194
197
  useEffect(() => {
195
198
  const ResizeObserver$1 = window.ResizeObserver || ResizeObserver;
@@ -1,4 +1,5 @@
1
+ declare const isScrollLocked: () => boolean;
1
2
  declare const lockScroll: () => void;
2
3
  declare const unlockScroll: () => void;
3
4
  declare const syncHeight: () => void;
4
- export { lockScroll, unlockScroll, syncHeight };
5
+ export { isScrollLocked, lockScroll, unlockScroll, syncHeight };
@@ -3,11 +3,14 @@
3
3
  * В проекте используется overflow: hidden для блокировки, но в некоторых случаях этого недостаточно. Данный хелпер призван решать эту проблему
4
4
  */
5
5
  let scrollY;
6
+ const isScrollLocked = () => document.body.classList.contains('is-locked');
6
7
  const lockScroll = () => {
7
8
  scrollY = window.scrollY;
8
9
  document.body.classList.add('is-locked');
9
10
  };
10
11
  const unlockScroll = () => {
12
+ if (!isScrollLocked())
13
+ return;
11
14
  document.body.classList.remove('is-locked');
12
15
  window.scrollTo(0, scrollY);
13
16
  };
@@ -15,4 +18,4 @@ const syncHeight = () => {
15
18
  document.body.style.setProperty('--window-inner-scrollY', `${window.scrollY}px`);
16
19
  };
17
20
 
18
- export { lockScroll, syncHeight, unlockScroll };
21
+ export { isScrollLocked, lockScroll, syncHeight, unlockScroll };
@@ -1,3 +1,3 @@
1
1
  export { BaseModal, BaseModalContext } from './Component.js';
2
2
  export { handleContainer, hasScrollbar, isScrolledToBottom, isScrolledToTop, restoreContainerStyles } from './utils.js';
3
- export { lockScroll, syncHeight, unlockScroll } from './helpers/lockScroll.js';
3
+ export { isScrollLocked, lockScroll, syncHeight, unlockScroll } from './helpers/lockScroll.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alfalab/core-components-base-modal",
3
- "version": "5.8.2",
3
+ "version": "5.8.3",
4
4
  "description": "BaseModal component",
5
5
  "keywords": [],
6
6
  "license": "MIT",
@@ -29,6 +29,6 @@
29
29
  "peerDependencies": {
30
30
  "react": "^16.9.0 || ^17.0.1 || ^18.0.0"
31
31
  },
32
- "themesVersion": "13.4.0",
33
- "varsVersion": "9.13.1"
32
+ "themesVersion": "13.5.0",
33
+ "varsVersion": "9.15.0"
34
34
  }
package/src/Component.tsx CHANGED
@@ -496,6 +496,10 @@ export const BaseModal = forwardRef<HTMLDivElement, BaseModalProps>(
496
496
 
497
497
  setExited(false);
498
498
  }
499
+
500
+ if (!open) {
501
+ unlockScroll();
502
+ }
499
503
  }, [getContainer, open, disableBlockingScroll, isExited, iOSLock]);
500
504
 
501
505
  useEffect(() => {
@@ -5,12 +5,16 @@
5
5
 
6
6
  let scrollY: number;
7
7
 
8
+ export const isScrollLocked = () => document.body.classList.contains('is-locked');
9
+
8
10
  export const lockScroll = () => {
9
11
  scrollY = window.scrollY;
10
12
  document.body.classList.add('is-locked');
11
13
  };
12
14
 
13
15
  export const unlockScroll = () => {
16
+ if (!isScrollLocked()) return;
17
+
14
18
  document.body.classList.remove('is-locked');
15
19
  window.scrollTo(0, scrollY);
16
20
  };