@alfalab/core-components 45.8.0-beta.0 → 45.8.0-beta.2

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 (284) hide show
  1. package/base-modal/Component.d.ts +4 -0
  2. package/base-modal/Component.js +28 -11
  3. package/base-modal/cssm/Component.d.ts +4 -0
  4. package/base-modal/cssm/Component.js +28 -11
  5. package/base-modal/cssm/helpers/lockScroll.d.ts +4 -0
  6. package/base-modal/cssm/helpers/lockScroll.js +18 -0
  7. package/base-modal/cssm/utils.d.ts +1 -1
  8. package/base-modal/cssm/utils.js +5 -2
  9. package/base-modal/esm/Component.d.ts +4 -0
  10. package/base-modal/esm/Component.js +29 -12
  11. package/base-modal/esm/helpers/lockScroll.d.ts +4 -0
  12. package/base-modal/esm/helpers/lockScroll.js +14 -0
  13. package/base-modal/esm/index.js +1 -0
  14. package/base-modal/esm/utils.d.ts +1 -1
  15. package/base-modal/esm/utils.js +5 -2
  16. package/base-modal/helpers/lockScroll.d.ts +4 -0
  17. package/base-modal/helpers/lockScroll.js +18 -0
  18. package/base-modal/modern/Component.d.ts +4 -0
  19. package/base-modal/modern/Component.js +22 -5
  20. package/base-modal/modern/helpers/lockScroll.d.ts +4 -0
  21. package/base-modal/modern/helpers/lockScroll.js +14 -0
  22. package/base-modal/modern/index.js +1 -0
  23. package/base-modal/modern/utils.d.ts +1 -1
  24. package/base-modal/modern/utils.js +4 -2
  25. package/base-modal/utils.d.ts +1 -1
  26. package/base-modal/utils.js +5 -2
  27. package/confirmation/components/screens/initial/component.js +1 -1
  28. package/confirmation/components/screens/initial/countdown-section.js +1 -1
  29. package/confirmation/esm/component.responsive.js +1 -1
  30. package/confirmation/esm/components/base-confirmation/component.js +1 -1
  31. package/confirmation/esm/components/base-confirmation/index.js +1 -1
  32. package/confirmation/esm/components/index.js +1 -1
  33. package/confirmation/esm/components/screens/index.js +1 -1
  34. package/confirmation/esm/components/screens/initial/component.js +1 -1
  35. package/confirmation/esm/components/screens/initial/countdown-section.js +1 -1
  36. package/confirmation/esm/components/screens/initial/index.js +1 -1
  37. package/confirmation/esm/desktop/component.desktop.js +1 -1
  38. package/confirmation/esm/desktop/index.js +1 -1
  39. package/confirmation/esm/index.js +1 -1
  40. package/confirmation/esm/mobile/component.mobile.js +1 -1
  41. package/confirmation/esm/mobile/index.js +1 -1
  42. package/confirmation/esm/shared/index.js +1 -1
  43. package/confirmation/modern/component.responsive.js +1 -1
  44. package/confirmation/modern/components/base-confirmation/component.js +1 -1
  45. package/confirmation/modern/components/base-confirmation/index.js +1 -1
  46. package/confirmation/modern/components/index.js +1 -1
  47. package/confirmation/modern/components/screens/index.js +1 -1
  48. package/confirmation/modern/components/screens/initial/component.js +1 -1
  49. package/confirmation/modern/components/screens/initial/countdown-section.js +1 -1
  50. package/confirmation/modern/components/screens/initial/index.js +1 -1
  51. package/confirmation/modern/desktop/component.desktop.js +1 -1
  52. package/confirmation/modern/desktop/index.js +1 -1
  53. package/confirmation/modern/index.js +1 -1
  54. package/confirmation/modern/mobile/component.mobile.js +1 -1
  55. package/confirmation/modern/mobile/index.js +1 -1
  56. package/confirmation/modern/shared/index.js +1 -1
  57. package/gallery/components/header/Component.js +1 -1
  58. package/gallery/components/header/buttons.js +1 -1
  59. package/gallery/components/image-viewer/component.js +1 -1
  60. package/gallery/components/image-viewer/slide.js +1 -1
  61. package/gallery/esm/Component.js +2 -2
  62. package/gallery/esm/components/header/Component.js +1 -1
  63. package/gallery/esm/components/header/buttons.js +1 -1
  64. package/gallery/esm/components/header/index.js +1 -1
  65. package/gallery/esm/components/image-preview/Component.js +1 -1
  66. package/gallery/esm/components/image-preview/index.js +1 -1
  67. package/gallery/esm/components/image-viewer/component.js +1 -1
  68. package/gallery/esm/components/image-viewer/index.js +1 -1
  69. package/gallery/esm/components/image-viewer/slide.js +1 -1
  70. package/gallery/esm/components/index.js +2 -2
  71. package/gallery/esm/components/navigation-bar/Component.js +1 -1
  72. package/gallery/esm/components/navigation-bar/index.js +1 -1
  73. package/gallery/esm/index.js +2 -2
  74. package/gallery/modern/Component.js +2 -2
  75. package/gallery/modern/components/header/Component.js +1 -1
  76. package/gallery/modern/components/header/buttons.js +1 -1
  77. package/gallery/modern/components/header/index.js +1 -1
  78. package/gallery/modern/components/image-preview/Component.js +1 -1
  79. package/gallery/modern/components/image-preview/index.js +1 -1
  80. package/gallery/modern/components/image-viewer/component.js +1 -1
  81. package/gallery/modern/components/image-viewer/index.js +1 -1
  82. package/gallery/modern/components/image-viewer/slide.js +1 -1
  83. package/gallery/modern/components/index.js +2 -2
  84. package/gallery/modern/components/navigation-bar/Component.js +1 -1
  85. package/gallery/modern/components/navigation-bar/index.js +1 -1
  86. package/gallery/modern/index.js +2 -2
  87. package/international-phone-input/cssm/index-bdb4c6b9.d.ts +9 -2
  88. package/international-phone-input/esm/index-bdb4c6b9.d.ts +9 -2
  89. package/international-phone-input/index-bdb4c6b9.d.ts +9 -2
  90. package/international-phone-input/modern/index-bdb4c6b9.d.ts +9 -2
  91. package/modal/components/controls/Component.js +1 -1
  92. package/modal/components/footer/Component.js +1 -1
  93. package/modal/esm/Component.responsive.js +1 -1
  94. package/modal/esm/components/controls/Component.js +1 -1
  95. package/modal/esm/components/controls/index.js +1 -1
  96. package/modal/esm/components/footer/Component.js +1 -1
  97. package/modal/esm/desktop/Component.desktop.js +1 -1
  98. package/modal/esm/desktop/index.js +1 -1
  99. package/modal/esm/index.js +1 -1
  100. package/modal/esm/mobile/Component.mobile.js +1 -1
  101. package/modal/esm/mobile/index.js +1 -1
  102. package/modal/modern/Component.responsive.js +1 -1
  103. package/modal/modern/components/controls/Component.js +1 -1
  104. package/modal/modern/components/controls/index.js +1 -1
  105. package/modal/modern/components/footer/Component.js +1 -1
  106. package/modal/modern/desktop/Component.desktop.js +1 -1
  107. package/modal/modern/desktop/index.js +1 -1
  108. package/modal/modern/index.js +1 -1
  109. package/modal/modern/mobile/Component.mobile.js +1 -1
  110. package/modal/modern/mobile/index.js +1 -1
  111. package/package.json +1 -1
  112. package/picker-button/cssm/index-bdb4c6b9.d.ts +9 -2
  113. package/picker-button/esm/index-bdb4c6b9.d.ts +9 -2
  114. package/picker-button/index-bdb4c6b9.d.ts +9 -2
  115. package/picker-button/modern/index-bdb4c6b9.d.ts +9 -2
  116. package/pure-cell/component.js +1 -1
  117. package/pure-cell/components/addon/component.js +1 -1
  118. package/pure-cell/components/addon/index.d.ts +1 -1
  119. package/pure-cell/components/addon/index.js +1 -1
  120. package/pure-cell/components/amount/component.js +1 -1
  121. package/pure-cell/components/amount/index.d.ts +1 -1
  122. package/pure-cell/components/amount/index.js +1 -1
  123. package/pure-cell/components/amount-title/component.js +1 -1
  124. package/pure-cell/components/amount-title/index.d.ts +1 -1
  125. package/pure-cell/components/amount-title/index.js +1 -1
  126. package/pure-cell/components/category/component.js +1 -1
  127. package/pure-cell/components/category/index.d.ts +1 -1
  128. package/pure-cell/components/category/index.js +1 -1
  129. package/pure-cell/components/content/component.js +1 -1
  130. package/pure-cell/components/content/index.d.ts +1 -1
  131. package/pure-cell/components/content/index.js +1 -1
  132. package/pure-cell/components/footer/component.js +1 -1
  133. package/pure-cell/components/footer/index.d.ts +1 -1
  134. package/pure-cell/components/footer/index.js +1 -1
  135. package/pure-cell/components/footer-button/component.js +1 -1
  136. package/pure-cell/components/footer-button/index.d.ts +1 -1
  137. package/pure-cell/components/footer-button/index.js +1 -1
  138. package/pure-cell/components/footer-text/component.js +1 -1
  139. package/pure-cell/components/footer-text/index.d.ts +1 -1
  140. package/pure-cell/components/footer-text/index.js +1 -1
  141. package/pure-cell/components/graphics/component.js +1 -1
  142. package/pure-cell/components/graphics/index.d.ts +1 -1
  143. package/pure-cell/components/graphics/index.js +1 -1
  144. package/pure-cell/components/main/component.js +1 -1
  145. package/pure-cell/components/main/index.d.ts +1 -1
  146. package/pure-cell/components/main/index.js +1 -1
  147. package/pure-cell/components/text/component.js +1 -1
  148. package/pure-cell/components/text/index.d.ts +1 -1
  149. package/pure-cell/components/text/index.js +1 -1
  150. package/pure-cell/esm/component.js +1 -1
  151. package/pure-cell/esm/components/addon/component.js +1 -1
  152. package/pure-cell/esm/components/addon/index.d.ts +1 -1
  153. package/pure-cell/esm/components/addon/index.js +1 -1
  154. package/pure-cell/esm/components/amount/component.js +1 -1
  155. package/pure-cell/esm/components/amount/index.d.ts +1 -1
  156. package/pure-cell/esm/components/amount/index.js +1 -1
  157. package/pure-cell/esm/components/amount-title/component.js +1 -1
  158. package/pure-cell/esm/components/amount-title/index.d.ts +1 -1
  159. package/pure-cell/esm/components/amount-title/index.js +1 -1
  160. package/pure-cell/esm/components/category/component.js +1 -1
  161. package/pure-cell/esm/components/category/index.d.ts +1 -1
  162. package/pure-cell/esm/components/category/index.js +1 -1
  163. package/pure-cell/esm/components/content/component.js +1 -1
  164. package/pure-cell/esm/components/content/index.d.ts +1 -1
  165. package/pure-cell/esm/components/content/index.js +1 -1
  166. package/pure-cell/esm/components/footer/component.js +1 -1
  167. package/pure-cell/esm/components/footer/index.d.ts +1 -1
  168. package/pure-cell/esm/components/footer/index.js +1 -1
  169. package/pure-cell/esm/components/footer-button/component.js +1 -1
  170. package/pure-cell/esm/components/footer-button/index.d.ts +1 -1
  171. package/pure-cell/esm/components/footer-button/index.js +1 -1
  172. package/pure-cell/esm/components/footer-text/component.js +1 -1
  173. package/pure-cell/esm/components/footer-text/index.d.ts +1 -1
  174. package/pure-cell/esm/components/footer-text/index.js +1 -1
  175. package/pure-cell/esm/components/graphics/component.js +1 -1
  176. package/pure-cell/esm/components/graphics/index.d.ts +1 -1
  177. package/pure-cell/esm/components/graphics/index.js +1 -1
  178. package/pure-cell/esm/components/main/component.js +1 -1
  179. package/pure-cell/esm/components/main/index.d.ts +1 -1
  180. package/pure-cell/esm/components/main/index.js +1 -1
  181. package/pure-cell/esm/components/text/component.js +1 -1
  182. package/pure-cell/esm/components/text/index.d.ts +1 -1
  183. package/pure-cell/esm/components/text/index.js +1 -1
  184. package/pure-cell/esm/index.js +1 -1
  185. package/pure-cell/index.js +1 -1
  186. package/pure-cell/modern/component.js +1 -1
  187. package/pure-cell/modern/components/addon/component.js +1 -1
  188. package/pure-cell/modern/components/addon/index.d.ts +1 -1
  189. package/pure-cell/modern/components/addon/index.js +1 -1
  190. package/pure-cell/modern/components/amount/component.js +1 -1
  191. package/pure-cell/modern/components/amount/index.d.ts +1 -1
  192. package/pure-cell/modern/components/amount/index.js +1 -1
  193. package/pure-cell/modern/components/amount-title/component.js +1 -1
  194. package/pure-cell/modern/components/amount-title/index.d.ts +1 -1
  195. package/pure-cell/modern/components/amount-title/index.js +1 -1
  196. package/pure-cell/modern/components/category/component.js +1 -1
  197. package/pure-cell/modern/components/category/index.d.ts +1 -1
  198. package/pure-cell/modern/components/category/index.js +1 -1
  199. package/pure-cell/modern/components/content/component.js +1 -1
  200. package/pure-cell/modern/components/content/index.d.ts +1 -1
  201. package/pure-cell/modern/components/content/index.js +1 -1
  202. package/pure-cell/modern/components/footer/component.js +1 -1
  203. package/pure-cell/modern/components/footer/index.d.ts +1 -1
  204. package/pure-cell/modern/components/footer/index.js +1 -1
  205. package/pure-cell/modern/components/footer-button/component.js +1 -1
  206. package/pure-cell/modern/components/footer-button/index.d.ts +1 -1
  207. package/pure-cell/modern/components/footer-button/index.js +1 -1
  208. package/pure-cell/modern/components/footer-text/component.js +1 -1
  209. package/pure-cell/modern/components/footer-text/index.d.ts +1 -1
  210. package/pure-cell/modern/components/footer-text/index.js +1 -1
  211. package/pure-cell/modern/components/graphics/component.js +1 -1
  212. package/pure-cell/modern/components/graphics/index.d.ts +1 -1
  213. package/pure-cell/modern/components/graphics/index.js +1 -1
  214. package/pure-cell/modern/components/main/component.js +1 -1
  215. package/pure-cell/modern/components/main/index.d.ts +1 -1
  216. package/pure-cell/modern/components/main/index.js +1 -1
  217. package/pure-cell/modern/components/text/component.js +1 -1
  218. package/pure-cell/modern/components/text/index.d.ts +1 -1
  219. package/pure-cell/modern/components/text/index.js +1 -1
  220. package/pure-cell/modern/index.js +1 -1
  221. package/side-panel/components/controls/Component.js +1 -1
  222. package/side-panel/components/footer/Component.js +1 -1
  223. package/side-panel/esm/Component.responsive.js +1 -1
  224. package/side-panel/esm/components/controls/Component.js +1 -1
  225. package/side-panel/esm/components/controls/index.js +1 -1
  226. package/side-panel/esm/components/footer/Component.desktop.js +1 -1
  227. package/side-panel/esm/components/footer/Component.js +1 -1
  228. package/side-panel/esm/components/footer/Component.mobile.js +1 -1
  229. package/side-panel/esm/desktop/Component.desktop.js +1 -1
  230. package/side-panel/esm/desktop/index.js +1 -1
  231. package/side-panel/esm/index.js +1 -1
  232. package/side-panel/esm/mobile/Component.mobile.js +1 -1
  233. package/side-panel/esm/mobile/index.js +1 -1
  234. package/side-panel/modern/Component.responsive.js +1 -1
  235. package/side-panel/modern/components/controls/Component.js +1 -1
  236. package/side-panel/modern/components/controls/index.js +1 -1
  237. package/side-panel/modern/components/footer/Component.desktop.js +1 -1
  238. package/side-panel/modern/components/footer/Component.js +1 -1
  239. package/side-panel/modern/components/footer/Component.mobile.js +1 -1
  240. package/side-panel/modern/desktop/Component.desktop.js +1 -1
  241. package/side-panel/modern/desktop/index.js +1 -1
  242. package/side-panel/modern/index.js +1 -1
  243. package/side-panel/modern/mobile/Component.mobile.js +1 -1
  244. package/side-panel/modern/mobile/index.js +1 -1
  245. package/themes/click.css +1515 -0
  246. package/themes/compiled/mobile-dark-bluetint.css +10 -10
  247. package/themes/corp.css +1515 -0
  248. package/themes/intranet.css +1515 -0
  249. package/themes/mobile.css +1515 -0
  250. package/themes/site.css +1515 -0
  251. package/universal-date-input/cssm/index-5712fce2.d.ts +8 -1
  252. package/universal-date-input/esm/index-5712fce2.d.ts +8 -1
  253. package/universal-date-input/index-5712fce2.d.ts +8 -1
  254. package/universal-date-input/modern/index-5712fce2.d.ts +8 -1
  255. /package/confirmation/{countdown-section-ea52770e.d.ts → countdown-section-9194293e.d.ts} +0 -0
  256. /package/confirmation/{countdown-section-ea52770e.js → countdown-section-9194293e.js} +0 -0
  257. /package/confirmation/esm/{countdown-section-95b6b929.d.ts → countdown-section-fc384721.d.ts} +0 -0
  258. /package/confirmation/esm/{countdown-section-95b6b929.js → countdown-section-fc384721.js} +0 -0
  259. /package/confirmation/modern/{countdown-section-bfef8483.d.ts → countdown-section-f33e01b7.d.ts} +0 -0
  260. /package/confirmation/modern/{countdown-section-bfef8483.js → countdown-section-f33e01b7.js} +0 -0
  261. /package/gallery/{buttons-c863bfdb.d.ts → buttons-160fdb5a.d.ts} +0 -0
  262. /package/gallery/{buttons-c863bfdb.js → buttons-160fdb5a.js} +0 -0
  263. /package/gallery/esm/{buttons-7955bd19.d.ts → buttons-f951e5ce.d.ts} +0 -0
  264. /package/gallery/esm/{buttons-7955bd19.js → buttons-f951e5ce.js} +0 -0
  265. /package/gallery/esm/{slide-ccf09eda.d.ts → slide-3595abb4.d.ts} +0 -0
  266. /package/gallery/esm/{slide-ccf09eda.js → slide-3595abb4.js} +0 -0
  267. /package/gallery/modern/{buttons-a7c365d3.d.ts → buttons-a3ff616b.d.ts} +0 -0
  268. /package/gallery/modern/{buttons-a7c365d3.js → buttons-a3ff616b.js} +0 -0
  269. /package/gallery/modern/{slide-8098a08f.d.ts → slide-acb49e8e.d.ts} +0 -0
  270. /package/gallery/modern/{slide-8098a08f.js → slide-acb49e8e.js} +0 -0
  271. /package/gallery/{slide-11daaf82.d.ts → slide-2268997b.d.ts} +0 -0
  272. /package/gallery/{slide-11daaf82.js → slide-2268997b.js} +0 -0
  273. /package/modal/esm/{layout.module-b635b128.js → layout.module-2fe04090.js} +0 -0
  274. /package/modal/{layout.module-34149103.js → layout.module-8adfa2ca.js} +0 -0
  275. /package/modal/modern/{layout.module-41e8947b.js → layout.module-5847d827.js} +0 -0
  276. /package/pure-cell/{component-5e8acf12.d.ts → component-41907143.d.ts} +0 -0
  277. /package/pure-cell/{component-5e8acf12.js → component-41907143.js} +0 -0
  278. /package/pure-cell/esm/{component-f28a5631.d.ts → component-e23350f5.d.ts} +0 -0
  279. /package/pure-cell/esm/{component-f28a5631.js → component-e23350f5.js} +0 -0
  280. /package/pure-cell/modern/{component-10bc9276.d.ts → component-b9194169.d.ts} +0 -0
  281. /package/pure-cell/modern/{component-10bc9276.js → component-b9194169.js} +0 -0
  282. /package/side-panel/esm/{layout.module-82f2a2ed.js → layout.module-a9e68775.js} +0 -0
  283. /package/side-panel/{layout.module-cda730eb.js → layout.module-df4fedc9.js} +0 -0
  284. /package/side-panel/modern/{layout.module-2b3f98d0.js → layout.module-d348cc57.js} +0 -0
@@ -134,6 +134,10 @@ type BaseModalProps = {
134
134
  * Реф, который должен быть установлен компонентной области
135
135
  */
136
136
  componentRef?: MutableRefObject<HTMLDivElement | null>;
137
+ /**
138
+ * Блокирует скролл когда модальное окно открыто. Работает только на iOS.
139
+ */
140
+ iOSLock?: boolean;
137
141
  };
138
142
  type BaseModalContext = {
139
143
  parentRef: React.RefObject<HTMLDivElement>;
@@ -11,6 +11,7 @@ var coreComponentsBackdrop = require('../backdrop');
11
11
  var coreComponentsPortal = require('../portal');
12
12
  var coreComponentsShared = require('../shared');
13
13
  var coreComponentsStack = require('../stack');
14
+ var helpers_lockScroll = require('./helpers/lockScroll.js');
14
15
  var utils = require('./utils.js');
15
16
  require('./matches-polyfill.js');
16
17
 
@@ -41,14 +42,14 @@ var BaseModalContext = React__default.default.createContext({
41
42
  onClose: function () { return null; },
42
43
  });
43
44
  var BaseModal = React.forwardRef(function (_a, ref) {
44
- 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.disableBlockingScroll, disableBlockingScroll = _k === void 0 ? false : _k, _l = _a.keepMounted, keepMounted = _l === void 0 ? false : _l, className = _a.className, contentClassName = _a.contentClassName, wrapperProps = _a.wrapperProps, contentProps = _a.contentProps, componentDivProps = _a.componentDivProps, wrapperClassName = _a.wrapperClassName, onBackdropClick = _a.onBackdropClick, onClose = _a.onClose, onEscapeKeyDown = _a.onEscapeKeyDown, onMount = _a.onMount, onUnmount = _a.onUnmount, dataTestId = _a.dataTestId, _m = _a.zIndex, zIndex = _m === void 0 ? coreComponentsStack.stackingOrder.MODAL : _m, _o = _a.componentRef, componentRef = _o === void 0 ? null : _o, _p = _a.usePortal, usePortal = _p === void 0 ? true : _p;
45
- var _q = React.useState(null), exited = _q[0], setExited = _q[1];
46
- var _r = React.useState(false), hasScroll = _r[0], setHasScroll = _r[1];
47
- var _s = React.useState(false), hasHeader = _s[0], setHasHeader = _s[1];
48
- var _t = React.useState(false), hasFooter = _t[0], setHasFooter = _t[1];
49
- var _u = React.useState(false), headerHighlighted = _u[0], setHeaderHighlighted = _u[1];
50
- var _v = React.useState(false), footerHighlighted = _v[0], setFooterHighlighted = _v[1];
51
- var _w = React.useState(0), headerOffset = _w[0], setHeaderOffset = _w[1];
45
+ 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.disableBlockingScroll, disableBlockingScroll = _k === void 0 ? false : _k, _l = _a.keepMounted, keepMounted = _l === void 0 ? false : _l, className = _a.className, contentClassName = _a.contentClassName, wrapperProps = _a.wrapperProps, contentProps = _a.contentProps, componentDivProps = _a.componentDivProps, wrapperClassName = _a.wrapperClassName, onBackdropClick = _a.onBackdropClick, onClose = _a.onClose, onEscapeKeyDown = _a.onEscapeKeyDown, onMount = _a.onMount, onUnmount = _a.onUnmount, dataTestId = _a.dataTestId, _m = _a.zIndex, zIndex = _m === void 0 ? coreComponentsStack.stackingOrder.MODAL : _m, _o = _a.componentRef, componentRef = _o === void 0 ? null : _o, _p = _a.usePortal, usePortal = _p === void 0 ? true : _p, _q = _a.iOSLock, iOSLock = _q === void 0 ? false : _q;
46
+ var _r = React.useState(null), exited = _r[0], setExited = _r[1];
47
+ var _s = React.useState(false), hasScroll = _s[0], setHasScroll = _s[1];
48
+ var _t = React.useState(false), hasHeader = _t[0], setHasHeader = _t[1];
49
+ var _u = React.useState(false), hasFooter = _u[0], setHasFooter = _u[1];
50
+ var _v = React.useState(false), headerHighlighted = _v[0], setHeaderHighlighted = _v[1];
51
+ var _w = React.useState(false), footerHighlighted = _w[0], setFooterHighlighted = _w[1];
52
+ var _x = React.useState(0), headerOffset = _x[0], setHeaderOffset = _x[1];
52
53
  var componentNodeRef = React.useRef(null);
53
54
  var wrapperRef = React.useRef(null);
54
55
  var scrollableNodeRef = React.useRef(null);
@@ -100,6 +101,9 @@ var BaseModal = React.forwardRef(function (_a, ref) {
100
101
  }
101
102
  }, [hasFooter, hasHeader, headerOffset]);
102
103
  var handleClose = React.useCallback(function (event, reason) {
104
+ if (iOSLock && coreComponentsShared.os.isIOS()) {
105
+ helpers_lockScroll.unlockScroll();
106
+ }
103
107
  if (onClose) {
104
108
  onClose(event, reason);
105
109
  }
@@ -110,7 +114,7 @@ var BaseModal = React.forwardRef(function (_a, ref) {
110
114
  onEscapeKeyDown(event);
111
115
  }
112
116
  return null;
113
- }, [onBackdropClick, onClose, onEscapeKeyDown]);
117
+ }, [onBackdropClick, onClose, onEscapeKeyDown, iOSLock]);
114
118
  var handleBackdropMouseDown = function (event) {
115
119
  var _a;
116
120
  var clickedOnScrollbar = false;
@@ -185,7 +189,10 @@ var BaseModal = React.forwardRef(function (_a, ref) {
185
189
  if (open && isExited) {
186
190
  if (!disableBlockingScroll) {
187
191
  var el_1 = getContainer();
188
- utils.handleContainer(el_1);
192
+ utils.handleContainer(el_1, coreComponentsShared.os.isIOS());
193
+ if (iOSLock && coreComponentsShared.os.isIOS()) {
194
+ helpers_lockScroll.lockScroll();
195
+ }
189
196
  restoreContainerStylesRef.current = function () {
190
197
  restoreContainerStylesRef.current = null;
191
198
  utils.restoreContainerStyles(el_1);
@@ -193,7 +200,7 @@ var BaseModal = React.forwardRef(function (_a, ref) {
193
200
  }
194
201
  setExited(false);
195
202
  }
196
- }, [getContainer, open, disableBlockingScroll, isExited]);
203
+ }, [getContainer, open, disableBlockingScroll, isExited, iOSLock]);
197
204
  React.useEffect(function () {
198
205
  var ResizeObserver = window.ResizeObserver || resizeObserver.ResizeObserver;
199
206
  resizeObserverRef.current = new ResizeObserver(checkToHasScrollBar);
@@ -206,6 +213,16 @@ var BaseModal = React.forwardRef(function (_a, ref) {
206
213
  }
207
214
  };
208
215
  }, []);
216
+ React.useEffect(function () {
217
+ if (iOSLock && coreComponentsShared.os.isIOS()) {
218
+ window.addEventListener('resize', helpers_lockScroll.syncHeight);
219
+ }
220
+ return function () {
221
+ if (iOSLock && coreComponentsShared.os.isIOS()) {
222
+ window.removeEventListener('resize', helpers_lockScroll.syncHeight);
223
+ }
224
+ };
225
+ }, [iOSLock]);
209
226
  var contextValue = React.useMemo(function () { return ({
210
227
  parentRef: wrapperRef,
211
228
  componentRef: componentNodeRef,
@@ -134,6 +134,10 @@ type BaseModalProps = {
134
134
  * Реф, который должен быть установлен компонентной области
135
135
  */
136
136
  componentRef?: MutableRefObject<HTMLDivElement | null>;
137
+ /**
138
+ * Блокирует скролл когда модальное окно открыто. Работает только на iOS.
139
+ */
140
+ iOSLock?: boolean;
137
141
  };
138
142
  type BaseModalContext = {
139
143
  parentRef: React.RefObject<HTMLDivElement>;
@@ -11,6 +11,7 @@ var coreComponentsBackdrop = require('../../backdrop/cssm');
11
11
  var coreComponentsPortal = require('../../portal/cssm');
12
12
  var coreComponentsShared = require('../../shared/cssm');
13
13
  var coreComponentsStack = require('../../stack/cssm');
14
+ var helpers_lockScroll = require('./helpers/lockScroll.js');
14
15
  var utils = require('./utils.js');
15
16
  var styles = require('./index.module.css');
16
17
  require('./matches-polyfill.js');
@@ -40,14 +41,14 @@ var BaseModalContext = React__default.default.createContext({
40
41
  onClose: function () { return null; },
41
42
  });
42
43
  var BaseModal = React.forwardRef(function (_a, ref) {
43
- 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.disableBlockingScroll, disableBlockingScroll = _k === void 0 ? false : _k, _l = _a.keepMounted, keepMounted = _l === void 0 ? false : _l, className = _a.className, contentClassName = _a.contentClassName, wrapperProps = _a.wrapperProps, contentProps = _a.contentProps, componentDivProps = _a.componentDivProps, wrapperClassName = _a.wrapperClassName, onBackdropClick = _a.onBackdropClick, onClose = _a.onClose, onEscapeKeyDown = _a.onEscapeKeyDown, onMount = _a.onMount, onUnmount = _a.onUnmount, dataTestId = _a.dataTestId, _m = _a.zIndex, zIndex = _m === void 0 ? coreComponentsStack.stackingOrder.MODAL : _m, _o = _a.componentRef, componentRef = _o === void 0 ? null : _o, _p = _a.usePortal, usePortal = _p === void 0 ? true : _p;
44
- var _q = React.useState(null), exited = _q[0], setExited = _q[1];
45
- var _r = React.useState(false), hasScroll = _r[0], setHasScroll = _r[1];
46
- var _s = React.useState(false), hasHeader = _s[0], setHasHeader = _s[1];
47
- var _t = React.useState(false), hasFooter = _t[0], setHasFooter = _t[1];
48
- var _u = React.useState(false), headerHighlighted = _u[0], setHeaderHighlighted = _u[1];
49
- var _v = React.useState(false), footerHighlighted = _v[0], setFooterHighlighted = _v[1];
50
- var _w = React.useState(0), headerOffset = _w[0], setHeaderOffset = _w[1];
44
+ 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.disableBlockingScroll, disableBlockingScroll = _k === void 0 ? false : _k, _l = _a.keepMounted, keepMounted = _l === void 0 ? false : _l, className = _a.className, contentClassName = _a.contentClassName, wrapperProps = _a.wrapperProps, contentProps = _a.contentProps, componentDivProps = _a.componentDivProps, wrapperClassName = _a.wrapperClassName, onBackdropClick = _a.onBackdropClick, onClose = _a.onClose, onEscapeKeyDown = _a.onEscapeKeyDown, onMount = _a.onMount, onUnmount = _a.onUnmount, dataTestId = _a.dataTestId, _m = _a.zIndex, zIndex = _m === void 0 ? coreComponentsStack.stackingOrder.MODAL : _m, _o = _a.componentRef, componentRef = _o === void 0 ? null : _o, _p = _a.usePortal, usePortal = _p === void 0 ? true : _p, _q = _a.iOSLock, iOSLock = _q === void 0 ? false : _q;
45
+ var _r = React.useState(null), exited = _r[0], setExited = _r[1];
46
+ var _s = React.useState(false), hasScroll = _s[0], setHasScroll = _s[1];
47
+ var _t = React.useState(false), hasHeader = _t[0], setHasHeader = _t[1];
48
+ var _u = React.useState(false), hasFooter = _u[0], setHasFooter = _u[1];
49
+ var _v = React.useState(false), headerHighlighted = _v[0], setHeaderHighlighted = _v[1];
50
+ var _w = React.useState(false), footerHighlighted = _w[0], setFooterHighlighted = _w[1];
51
+ var _x = React.useState(0), headerOffset = _x[0], setHeaderOffset = _x[1];
51
52
  var componentNodeRef = React.useRef(null);
52
53
  var wrapperRef = React.useRef(null);
53
54
  var scrollableNodeRef = React.useRef(null);
@@ -99,6 +100,9 @@ var BaseModal = React.forwardRef(function (_a, ref) {
99
100
  }
100
101
  }, [hasFooter, hasHeader, headerOffset]);
101
102
  var handleClose = React.useCallback(function (event, reason) {
103
+ if (iOSLock && coreComponentsShared.os.isIOS()) {
104
+ helpers_lockScroll.unlockScroll();
105
+ }
102
106
  if (onClose) {
103
107
  onClose(event, reason);
104
108
  }
@@ -109,7 +113,7 @@ var BaseModal = React.forwardRef(function (_a, ref) {
109
113
  onEscapeKeyDown(event);
110
114
  }
111
115
  return null;
112
- }, [onBackdropClick, onClose, onEscapeKeyDown]);
116
+ }, [onBackdropClick, onClose, onEscapeKeyDown, iOSLock]);
113
117
  var handleBackdropMouseDown = function (event) {
114
118
  var _a;
115
119
  var clickedOnScrollbar = false;
@@ -184,7 +188,10 @@ var BaseModal = React.forwardRef(function (_a, ref) {
184
188
  if (open && isExited) {
185
189
  if (!disableBlockingScroll) {
186
190
  var el_1 = getContainer();
187
- utils.handleContainer(el_1);
191
+ utils.handleContainer(el_1, coreComponentsShared.os.isIOS());
192
+ if (iOSLock && coreComponentsShared.os.isIOS()) {
193
+ helpers_lockScroll.lockScroll();
194
+ }
188
195
  restoreContainerStylesRef.current = function () {
189
196
  restoreContainerStylesRef.current = null;
190
197
  utils.restoreContainerStyles(el_1);
@@ -192,7 +199,7 @@ var BaseModal = React.forwardRef(function (_a, ref) {
192
199
  }
193
200
  setExited(false);
194
201
  }
195
- }, [getContainer, open, disableBlockingScroll, isExited]);
202
+ }, [getContainer, open, disableBlockingScroll, isExited, iOSLock]);
196
203
  React.useEffect(function () {
197
204
  var ResizeObserver = window.ResizeObserver || resizeObserver.ResizeObserver;
198
205
  resizeObserverRef.current = new ResizeObserver(checkToHasScrollBar);
@@ -205,6 +212,16 @@ var BaseModal = React.forwardRef(function (_a, ref) {
205
212
  }
206
213
  };
207
214
  }, []);
215
+ React.useEffect(function () {
216
+ if (iOSLock && coreComponentsShared.os.isIOS()) {
217
+ window.addEventListener('resize', helpers_lockScroll.syncHeight);
218
+ }
219
+ return function () {
220
+ if (iOSLock && coreComponentsShared.os.isIOS()) {
221
+ window.removeEventListener('resize', helpers_lockScroll.syncHeight);
222
+ }
223
+ };
224
+ }, [iOSLock]);
208
225
  var contextValue = React.useMemo(function () { return ({
209
226
  parentRef: wrapperRef,
210
227
  componentRef: componentNodeRef,
@@ -0,0 +1,4 @@
1
+ declare const lockScroll: () => void;
2
+ declare const unlockScroll: () => void;
3
+ declare const syncHeight: () => void;
4
+ export { lockScroll, unlockScroll, syncHeight };
@@ -0,0 +1,18 @@
1
+ Object.defineProperty(exports, '__esModule', { value: true });
2
+
3
+ var scrollY;
4
+ var lockScroll = function () {
5
+ scrollY = window.scrollY;
6
+ document.documentElement.classList.add('is-locked');
7
+ };
8
+ var unlockScroll = function () {
9
+ document.documentElement.classList.remove('is-locked');
10
+ window.scrollTo(0, scrollY);
11
+ };
12
+ var syncHeight = function () {
13
+ document.documentElement.style.setProperty('--window-inner-height', "".concat(window.innerHeight, "px"));
14
+ };
15
+
16
+ exports.lockScroll = lockScroll;
17
+ exports.syncHeight = syncHeight;
18
+ exports.unlockScroll = unlockScroll;
@@ -2,5 +2,5 @@ declare function isScrolledToTop(target: HTMLElement): boolean;
2
2
  declare function isScrolledToBottom(target: HTMLElement): boolean;
3
3
  declare function hasScrollbar(target: HTMLElement): boolean;
4
4
  declare const restoreContainerStyles: (container: HTMLElement) => void;
5
- declare const handleContainer: (container?: HTMLElement) => void;
5
+ declare const handleContainer: (container?: HTMLElement, isIOS?: boolean) => void;
6
6
  export { isScrolledToTop, isScrolledToBottom, hasScrollbar, restoreContainerStyles, handleContainer };
@@ -41,7 +41,8 @@ var restoreContainerStyles = function (container) {
41
41
  });
42
42
  }
43
43
  };
44
- var handleContainer = function (container) {
44
+ var handleContainer = function (container, isIOS) {
45
+ if (isIOS === void 0) { isIOS = false; }
45
46
  if (!container)
46
47
  return;
47
48
  var modalRestoreStyles = coreComponentsGlobalStore.getModalStore().getRestoreStyles();
@@ -79,7 +80,9 @@ var handleContainer = function (container) {
79
80
  el: scrollContainer,
80
81
  });
81
82
  }
82
- scrollContainer.style.overflow = 'hidden';
83
+ if (!isIOS) {
84
+ scrollContainer.style.overflow = 'hidden';
85
+ }
83
86
  modalRestoreStyles.push({
84
87
  container: container,
85
88
  modals: 1,
@@ -134,6 +134,10 @@ type BaseModalProps = {
134
134
  * Реф, который должен быть установлен компонентной области
135
135
  */
136
136
  componentRef?: MutableRefObject<HTMLDivElement | null>;
137
+ /**
138
+ * Блокирует скролл когда модальное окно открыто. Работает только на iOS.
139
+ */
140
+ iOSLock?: boolean;
137
141
  };
138
142
  type BaseModalContext = {
139
143
  parentRef: React.RefObject<HTMLDivElement>;
@@ -7,8 +7,9 @@ import { ResizeObserver } from '@juggle/resize-observer';
7
7
  import cn from 'classnames';
8
8
  import { Backdrop } from '../../backdrop/esm';
9
9
  import { Portal } from '../../portal/esm';
10
- import { browser } from '../../shared/esm';
10
+ import { os, browser } from '../../shared/esm';
11
11
  import { stackingOrder, Stack } from '../../stack/esm';
12
+ import { unlockScroll, lockScroll, syncHeight } from './helpers/lockScroll.js';
12
13
  import { isScrolledToTop, isScrolledToBottom, handleContainer, restoreContainerStyles, hasScrollbar } from './utils.js';
13
14
  import './matches-polyfill.js';
14
15
  import '../../global-store/esm';
@@ -33,14 +34,14 @@ var BaseModalContext = React.createContext({
33
34
  onClose: function () { return null; },
34
35
  });
35
36
  var BaseModal = forwardRef(function (_a, ref) {
36
- 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.disableBlockingScroll, disableBlockingScroll = _k === void 0 ? false : _k, _l = _a.keepMounted, keepMounted = _l === void 0 ? false : _l, className = _a.className, contentClassName = _a.contentClassName, wrapperProps = _a.wrapperProps, contentProps = _a.contentProps, componentDivProps = _a.componentDivProps, wrapperClassName = _a.wrapperClassName, onBackdropClick = _a.onBackdropClick, onClose = _a.onClose, onEscapeKeyDown = _a.onEscapeKeyDown, onMount = _a.onMount, onUnmount = _a.onUnmount, dataTestId = _a.dataTestId, _m = _a.zIndex, zIndex = _m === void 0 ? stackingOrder.MODAL : _m, _o = _a.componentRef, componentRef = _o === void 0 ? null : _o, _p = _a.usePortal, usePortal = _p === void 0 ? true : _p;
37
- var _q = useState(null), exited = _q[0], setExited = _q[1];
38
- var _r = useState(false), hasScroll = _r[0], setHasScroll = _r[1];
39
- var _s = useState(false), hasHeader = _s[0], setHasHeader = _s[1];
40
- var _t = useState(false), hasFooter = _t[0], setHasFooter = _t[1];
41
- var _u = useState(false), headerHighlighted = _u[0], setHeaderHighlighted = _u[1];
42
- var _v = useState(false), footerHighlighted = _v[0], setFooterHighlighted = _v[1];
43
- var _w = useState(0), headerOffset = _w[0], setHeaderOffset = _w[1];
37
+ 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.disableBlockingScroll, disableBlockingScroll = _k === void 0 ? false : _k, _l = _a.keepMounted, keepMounted = _l === void 0 ? false : _l, className = _a.className, contentClassName = _a.contentClassName, wrapperProps = _a.wrapperProps, contentProps = _a.contentProps, componentDivProps = _a.componentDivProps, wrapperClassName = _a.wrapperClassName, onBackdropClick = _a.onBackdropClick, onClose = _a.onClose, onEscapeKeyDown = _a.onEscapeKeyDown, onMount = _a.onMount, onUnmount = _a.onUnmount, dataTestId = _a.dataTestId, _m = _a.zIndex, zIndex = _m === void 0 ? stackingOrder.MODAL : _m, _o = _a.componentRef, componentRef = _o === void 0 ? null : _o, _p = _a.usePortal, usePortal = _p === void 0 ? true : _p, _q = _a.iOSLock, iOSLock = _q === void 0 ? false : _q;
38
+ var _r = useState(null), exited = _r[0], setExited = _r[1];
39
+ var _s = useState(false), hasScroll = _s[0], setHasScroll = _s[1];
40
+ var _t = useState(false), hasHeader = _t[0], setHasHeader = _t[1];
41
+ var _u = useState(false), hasFooter = _u[0], setHasFooter = _u[1];
42
+ var _v = useState(false), headerHighlighted = _v[0], setHeaderHighlighted = _v[1];
43
+ var _w = useState(false), footerHighlighted = _w[0], setFooterHighlighted = _w[1];
44
+ var _x = useState(0), headerOffset = _x[0], setHeaderOffset = _x[1];
44
45
  var componentNodeRef = useRef(null);
45
46
  var wrapperRef = useRef(null);
46
47
  var scrollableNodeRef = useRef(null);
@@ -92,6 +93,9 @@ var BaseModal = forwardRef(function (_a, ref) {
92
93
  }
93
94
  }, [hasFooter, hasHeader, headerOffset]);
94
95
  var handleClose = useCallback(function (event, reason) {
96
+ if (iOSLock && os.isIOS()) {
97
+ unlockScroll();
98
+ }
95
99
  if (onClose) {
96
100
  onClose(event, reason);
97
101
  }
@@ -102,7 +106,7 @@ var BaseModal = forwardRef(function (_a, ref) {
102
106
  onEscapeKeyDown(event);
103
107
  }
104
108
  return null;
105
- }, [onBackdropClick, onClose, onEscapeKeyDown]);
109
+ }, [onBackdropClick, onClose, onEscapeKeyDown, iOSLock]);
106
110
  var handleBackdropMouseDown = function (event) {
107
111
  var _a;
108
112
  var clickedOnScrollbar = false;
@@ -177,7 +181,10 @@ var BaseModal = forwardRef(function (_a, ref) {
177
181
  if (open && isExited) {
178
182
  if (!disableBlockingScroll) {
179
183
  var el_1 = getContainer();
180
- handleContainer(el_1);
184
+ handleContainer(el_1, os.isIOS());
185
+ if (iOSLock && os.isIOS()) {
186
+ lockScroll();
187
+ }
181
188
  restoreContainerStylesRef.current = function () {
182
189
  restoreContainerStylesRef.current = null;
183
190
  restoreContainerStyles(el_1);
@@ -185,7 +192,7 @@ var BaseModal = forwardRef(function (_a, ref) {
185
192
  }
186
193
  setExited(false);
187
194
  }
188
- }, [getContainer, open, disableBlockingScroll, isExited]);
195
+ }, [getContainer, open, disableBlockingScroll, isExited, iOSLock]);
189
196
  useEffect(function () {
190
197
  var ResizeObserver$1 = window.ResizeObserver || ResizeObserver;
191
198
  resizeObserverRef.current = new ResizeObserver$1(checkToHasScrollBar);
@@ -198,6 +205,16 @@ var BaseModal = forwardRef(function (_a, ref) {
198
205
  }
199
206
  };
200
207
  }, []);
208
+ useEffect(function () {
209
+ if (iOSLock && os.isIOS()) {
210
+ window.addEventListener('resize', syncHeight);
211
+ }
212
+ return function () {
213
+ if (iOSLock && os.isIOS()) {
214
+ window.removeEventListener('resize', syncHeight);
215
+ }
216
+ };
217
+ }, [iOSLock]);
201
218
  var contextValue = useMemo(function () { return ({
202
219
  parentRef: wrapperRef,
203
220
  componentRef: componentNodeRef,
@@ -0,0 +1,4 @@
1
+ declare const lockScroll: () => void;
2
+ declare const unlockScroll: () => void;
3
+ declare const syncHeight: () => void;
4
+ export { lockScroll, unlockScroll, syncHeight };
@@ -0,0 +1,14 @@
1
+ var scrollY;
2
+ var lockScroll = function () {
3
+ scrollY = window.scrollY;
4
+ document.documentElement.classList.add('is-locked');
5
+ };
6
+ var unlockScroll = function () {
7
+ document.documentElement.classList.remove('is-locked');
8
+ window.scrollTo(0, scrollY);
9
+ };
10
+ var syncHeight = function () {
11
+ document.documentElement.style.setProperty('--window-inner-height', "".concat(window.innerHeight, "px"));
12
+ };
13
+
14
+ export { lockScroll, syncHeight, unlockScroll };
@@ -11,5 +11,6 @@ import '../../backdrop/esm';
11
11
  import '../../portal/esm';
12
12
  import '../../shared/esm';
13
13
  import '../../stack/esm';
14
+ import './helpers/lockScroll.js';
14
15
  import './matches-polyfill.js';
15
16
  import '../../global-store/esm';
@@ -2,5 +2,5 @@ declare function isScrolledToTop(target: HTMLElement): boolean;
2
2
  declare function isScrolledToBottom(target: HTMLElement): boolean;
3
3
  declare function hasScrollbar(target: HTMLElement): boolean;
4
4
  declare const restoreContainerStyles: (container: HTMLElement) => void;
5
- declare const handleContainer: (container?: HTMLElement) => void;
5
+ declare const handleContainer: (container?: HTMLElement, isIOS?: boolean) => void;
6
6
  export { isScrolledToTop, isScrolledToBottom, hasScrollbar, restoreContainerStyles, handleContainer };
@@ -39,7 +39,8 @@ var restoreContainerStyles = function (container) {
39
39
  });
40
40
  }
41
41
  };
42
- var handleContainer = function (container) {
42
+ var handleContainer = function (container, isIOS) {
43
+ if (isIOS === void 0) { isIOS = false; }
43
44
  if (!container)
44
45
  return;
45
46
  var modalRestoreStyles = getModalStore().getRestoreStyles();
@@ -77,7 +78,9 @@ var handleContainer = function (container) {
77
78
  el: scrollContainer,
78
79
  });
79
80
  }
80
- scrollContainer.style.overflow = 'hidden';
81
+ if (!isIOS) {
82
+ scrollContainer.style.overflow = 'hidden';
83
+ }
81
84
  modalRestoreStyles.push({
82
85
  container: container,
83
86
  modals: 1,
@@ -0,0 +1,4 @@
1
+ declare const lockScroll: () => void;
2
+ declare const unlockScroll: () => void;
3
+ declare const syncHeight: () => void;
4
+ export { lockScroll, unlockScroll, syncHeight };
@@ -0,0 +1,18 @@
1
+ Object.defineProperty(exports, '__esModule', { value: true });
2
+
3
+ var scrollY;
4
+ var lockScroll = function () {
5
+ scrollY = window.scrollY;
6
+ document.documentElement.classList.add('is-locked');
7
+ };
8
+ var unlockScroll = function () {
9
+ document.documentElement.classList.remove('is-locked');
10
+ window.scrollTo(0, scrollY);
11
+ };
12
+ var syncHeight = function () {
13
+ document.documentElement.style.setProperty('--window-inner-height', "".concat(window.innerHeight, "px"));
14
+ };
15
+
16
+ exports.lockScroll = lockScroll;
17
+ exports.syncHeight = syncHeight;
18
+ exports.unlockScroll = unlockScroll;
@@ -134,6 +134,10 @@ type BaseModalProps = {
134
134
  * Реф, который должен быть установлен компонентной области
135
135
  */
136
136
  componentRef?: MutableRefObject<HTMLDivElement | null>;
137
+ /**
138
+ * Блокирует скролл когда модальное окно открыто. Работает только на iOS.
139
+ */
140
+ iOSLock?: boolean;
137
141
  };
138
142
  type BaseModalContext = {
139
143
  parentRef: React.RefObject<HTMLDivElement>;
@@ -6,8 +6,9 @@ import { ResizeObserver } from '@juggle/resize-observer';
6
6
  import cn from 'classnames';
7
7
  import { Backdrop } from '../../backdrop/modern';
8
8
  import { Portal } from '../../portal/modern';
9
- import { browser } from '../../shared/modern';
9
+ import { os, browser } from '../../shared/modern';
10
10
  import { stackingOrder, Stack } from '../../stack/modern';
11
+ import { unlockScroll, lockScroll, syncHeight } from './helpers/lockScroll.js';
11
12
  import { isScrolledToTop, isScrolledToBottom, handleContainer, restoreContainerStyles, hasScrollbar } from './utils.js';
12
13
  import './matches-polyfill.js';
13
14
  import '../../global-store/modern';
@@ -32,7 +33,7 @@ const BaseModalContext = React.createContext({
32
33
  setHasFooter: () => null,
33
34
  onClose: () => null,
34
35
  });
35
- const BaseModal = forwardRef(({ open, container, children, scrollHandler = 'wrapper', Backdrop: Backdrop$1 = Backdrop, backdropProps = {}, transitionProps = {}, disableBackdropClick, disableAutoFocus = false, disableFocusLock = false, disableEscapeKeyDown = false, disableRestoreFocus = false, disableBlockingScroll = false, keepMounted = false, className, contentClassName, wrapperProps, contentProps, componentDivProps, wrapperClassName, onBackdropClick, onClose, onEscapeKeyDown, onMount, onUnmount, dataTestId, zIndex = stackingOrder.MODAL, componentRef = null, usePortal = true, }, ref) => {
36
+ const BaseModal = forwardRef(({ open, container, children, scrollHandler = 'wrapper', Backdrop: Backdrop$1 = Backdrop, backdropProps = {}, transitionProps = {}, disableBackdropClick, disableAutoFocus = false, disableFocusLock = false, disableEscapeKeyDown = false, disableRestoreFocus = false, disableBlockingScroll = false, keepMounted = false, className, contentClassName, wrapperProps, contentProps, componentDivProps, wrapperClassName, onBackdropClick, onClose, onEscapeKeyDown, onMount, onUnmount, dataTestId, zIndex = stackingOrder.MODAL, componentRef = null, usePortal = true, iOSLock = false, }, ref) => {
36
37
  const [exited, setExited] = useState(null);
37
38
  const [hasScroll, setHasScroll] = useState(false);
38
39
  const [hasHeader, setHasHeader] = useState(false);
@@ -91,6 +92,9 @@ const BaseModal = forwardRef(({ open, container, children, scrollHandler = 'wrap
91
92
  }
92
93
  }, [hasFooter, hasHeader, headerOffset]);
93
94
  const handleClose = useCallback((event, reason) => {
95
+ if (iOSLock && os.isIOS()) {
96
+ unlockScroll();
97
+ }
94
98
  if (onClose) {
95
99
  onClose(event, reason);
96
100
  }
@@ -101,7 +105,7 @@ const BaseModal = forwardRef(({ open, container, children, scrollHandler = 'wrap
101
105
  onEscapeKeyDown(event);
102
106
  }
103
107
  return null;
104
- }, [onBackdropClick, onClose, onEscapeKeyDown]);
108
+ }, [onBackdropClick, onClose, onEscapeKeyDown, iOSLock]);
105
109
  const handleBackdropMouseDown = (event) => {
106
110
  let clickedOnScrollbar = false;
107
111
  const clientWidth = event.target?.clientWidth;
@@ -175,7 +179,10 @@ const BaseModal = forwardRef(({ open, container, children, scrollHandler = 'wrap
175
179
  if (open && isExited) {
176
180
  if (!disableBlockingScroll) {
177
181
  const el = getContainer();
178
- handleContainer(el);
182
+ handleContainer(el, os.isIOS());
183
+ if (iOSLock && os.isIOS()) {
184
+ lockScroll();
185
+ }
179
186
  restoreContainerStylesRef.current = () => {
180
187
  restoreContainerStylesRef.current = null;
181
188
  restoreContainerStyles(el);
@@ -183,7 +190,7 @@ const BaseModal = forwardRef(({ open, container, children, scrollHandler = 'wrap
183
190
  }
184
191
  setExited(false);
185
192
  }
186
- }, [getContainer, open, disableBlockingScroll, isExited]);
193
+ }, [getContainer, open, disableBlockingScroll, isExited, iOSLock]);
187
194
  useEffect(() => {
188
195
  const ResizeObserver$1 = window.ResizeObserver || ResizeObserver;
189
196
  resizeObserverRef.current = new ResizeObserver$1(checkToHasScrollBar);
@@ -196,6 +203,16 @@ const BaseModal = forwardRef(({ open, container, children, scrollHandler = 'wrap
196
203
  }
197
204
  };
198
205
  }, []);
206
+ useEffect(() => {
207
+ if (iOSLock && os.isIOS()) {
208
+ window.addEventListener('resize', syncHeight);
209
+ }
210
+ return () => {
211
+ if (iOSLock && os.isIOS()) {
212
+ window.removeEventListener('resize', syncHeight);
213
+ }
214
+ };
215
+ }, [iOSLock]);
199
216
  const contextValue = useMemo(() => ({
200
217
  parentRef: wrapperRef,
201
218
  componentRef: componentNodeRef,
@@ -0,0 +1,4 @@
1
+ declare const lockScroll: () => void;
2
+ declare const unlockScroll: () => void;
3
+ declare const syncHeight: () => void;
4
+ export { lockScroll, unlockScroll, syncHeight };
@@ -0,0 +1,14 @@
1
+ let scrollY;
2
+ const lockScroll = () => {
3
+ scrollY = window.scrollY;
4
+ document.documentElement.classList.add('is-locked');
5
+ };
6
+ const unlockScroll = () => {
7
+ document.documentElement.classList.remove('is-locked');
8
+ window.scrollTo(0, scrollY);
9
+ };
10
+ const syncHeight = () => {
11
+ document.documentElement.style.setProperty('--window-inner-height', `${window.innerHeight}px`);
12
+ };
13
+
14
+ export { lockScroll, syncHeight, unlockScroll };
@@ -10,5 +10,6 @@ import '../../backdrop/modern';
10
10
  import '../../portal/modern';
11
11
  import '../../shared/modern';
12
12
  import '../../stack/modern';
13
+ import './helpers/lockScroll.js';
13
14
  import './matches-polyfill.js';
14
15
  import '../../global-store/modern';
@@ -2,5 +2,5 @@ declare function isScrolledToTop(target: HTMLElement): boolean;
2
2
  declare function isScrolledToBottom(target: HTMLElement): boolean;
3
3
  declare function hasScrollbar(target: HTMLElement): boolean;
4
4
  declare const restoreContainerStyles: (container: HTMLElement) => void;
5
- declare const handleContainer: (container?: HTMLElement) => void;
5
+ declare const handleContainer: (container?: HTMLElement, isIOS?: boolean) => void;
6
6
  export { isScrolledToTop, isScrolledToBottom, hasScrollbar, restoreContainerStyles, handleContainer };
@@ -36,7 +36,7 @@ const restoreContainerStyles = (container) => {
36
36
  });
37
37
  }
38
38
  };
39
- const handleContainer = (container) => {
39
+ const handleContainer = (container, isIOS = false) => {
40
40
  if (!container)
41
41
  return;
42
42
  const modalRestoreStyles = getModalStore().getRestoreStyles();
@@ -74,7 +74,9 @@ const handleContainer = (container) => {
74
74
  el: scrollContainer,
75
75
  });
76
76
  }
77
- scrollContainer.style.overflow = 'hidden';
77
+ if (!isIOS) {
78
+ scrollContainer.style.overflow = 'hidden';
79
+ }
78
80
  modalRestoreStyles.push({
79
81
  container,
80
82
  modals: 1,
@@ -2,5 +2,5 @@ declare function isScrolledToTop(target: HTMLElement): boolean;
2
2
  declare function isScrolledToBottom(target: HTMLElement): boolean;
3
3
  declare function hasScrollbar(target: HTMLElement): boolean;
4
4
  declare const restoreContainerStyles: (container: HTMLElement) => void;
5
- declare const handleContainer: (container?: HTMLElement) => void;
5
+ declare const handleContainer: (container?: HTMLElement, isIOS?: boolean) => void;
6
6
  export { isScrolledToTop, isScrolledToBottom, hasScrollbar, restoreContainerStyles, handleContainer };
@@ -41,7 +41,8 @@ var restoreContainerStyles = function (container) {
41
41
  });
42
42
  }
43
43
  };
44
- var handleContainer = function (container) {
44
+ var handleContainer = function (container, isIOS) {
45
+ if (isIOS === void 0) { isIOS = false; }
45
46
  if (!container)
46
47
  return;
47
48
  var modalRestoreStyles = coreComponentsGlobalStore.getModalStore().getRestoreStyles();
@@ -79,7 +80,9 @@ var handleContainer = function (container) {
79
80
  el: scrollContainer,
80
81
  });
81
82
  }
82
- scrollContainer.style.overflow = 'hidden';
83
+ if (!isIOS) {
84
+ scrollContainer.style.overflow = 'hidden';
85
+ }
83
86
  modalRestoreStyles.push({
84
87
  container: container,
85
88
  modals: 1,
@@ -10,7 +10,7 @@ var coreComponentsTypography = require('../../../../typography');
10
10
  var hooks = require('@alfalab/hooks');
11
11
  var context = require('../../../context.js');
12
12
  var components_header_component = require('../../header/component.js');
13
- var components_screens_initial_countdownSection = require('../../../countdown-section-ea52770e.js');
13
+ var components_screens_initial_countdownSection = require('../../../countdown-section-9194293e.js');
14
14
 
15
15
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
16
16