@semcore/core 17.0.0-prerelease.43 → 17.0.1-prerelease.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (354) hide show
  1. package/CHANGELOG.md +3 -111
  2. package/README.md +35 -5
  3. package/lib/LastInteractionType.js +36 -22
  4. package/lib/LastInteractionType.js.map +1 -1
  5. package/lib/LastInteractionType.mjs +33 -19
  6. package/lib/LastInteractionType.mjs.map +1 -1
  7. package/lib/core-types/Component.js +41 -25
  8. package/lib/core-types/Component.js.map +1 -1
  9. package/lib/core-types/Component.mjs +38 -18
  10. package/lib/core-types/Component.mjs.map +1 -1
  11. package/lib/core-types/symbols.js +9 -9
  12. package/lib/core-types/symbols.js.map +1 -1
  13. package/lib/core-types/symbols.mjs +9 -9
  14. package/lib/core-types/symbols.mjs.map +1 -1
  15. package/lib/coreFactory.js +238 -158
  16. package/lib/coreFactory.js.map +1 -1
  17. package/lib/coreFactory.mjs +189 -133
  18. package/lib/coreFactory.mjs.map +1 -1
  19. package/lib/decorators/propsObserver.js +64 -36
  20. package/lib/decorators/propsObserver.js.map +1 -1
  21. package/lib/decorators/propsObserver.mjs +61 -33
  22. package/lib/decorators/propsObserver.mjs.map +1 -1
  23. package/lib/decorators/reactive.js +17 -17
  24. package/lib/decorators/reactive.js.map +1 -1
  25. package/lib/decorators/reactive.mjs +15 -15
  26. package/lib/decorators/reactive.mjs.map +1 -1
  27. package/lib/enhancement/Children.js +59 -51
  28. package/lib/enhancement/Children.js.map +1 -1
  29. package/lib/enhancement/Children.mjs +41 -47
  30. package/lib/enhancement/Children.mjs.map +1 -1
  31. package/lib/enhancement/Root.js +37 -36
  32. package/lib/enhancement/Root.js.map +1 -1
  33. package/lib/enhancement/Root.mjs +18 -28
  34. package/lib/enhancement/Root.mjs.map +1 -1
  35. package/lib/enhancement/dataName.js +8 -7
  36. package/lib/enhancement/dataName.js.map +1 -1
  37. package/lib/enhancement/dataName.mjs +5 -5
  38. package/lib/enhancement/dataName.mjs.map +1 -1
  39. package/lib/enhancement/enhance.js +9 -6
  40. package/lib/enhancement/enhance.js.map +1 -1
  41. package/lib/enhancement/enhance.mjs +7 -4
  42. package/lib/enhancement/enhance.mjs.map +1 -1
  43. package/lib/enhancement/functionDefaultProps.js +6 -6
  44. package/lib/enhancement/functionDefaultProps.js.map +1 -1
  45. package/lib/enhancement/functionDefaultProps.mjs +4 -4
  46. package/lib/enhancement/functionDefaultProps.mjs.map +1 -1
  47. package/lib/enhancement/i18n.js +13 -13
  48. package/lib/enhancement/i18n.js.map +1 -1
  49. package/lib/enhancement/i18n.mjs +9 -10
  50. package/lib/enhancement/i18n.mjs.map +1 -1
  51. package/lib/enhancement/inheritedName.js +8 -7
  52. package/lib/enhancement/inheritedName.js.map +1 -1
  53. package/lib/enhancement/inheritedName.mjs +5 -5
  54. package/lib/enhancement/inheritedName.mjs.map +1 -1
  55. package/lib/enhancement/staticChildren.js +56 -47
  56. package/lib/enhancement/staticChildren.js.map +1 -1
  57. package/lib/enhancement/staticChildren.mjs +48 -43
  58. package/lib/enhancement/staticChildren.mjs.map +1 -1
  59. package/lib/enhancement/style.js +27 -29
  60. package/lib/enhancement/style.js.map +1 -1
  61. package/lib/enhancement/style.mjs +20 -26
  62. package/lib/enhancement/style.mjs.map +1 -1
  63. package/lib/enhancement/uncontrolledProps.js +65 -46
  64. package/lib/enhancement/uncontrolledProps.js.map +1 -1
  65. package/lib/enhancement/uncontrolledProps.mjs +52 -43
  66. package/lib/enhancement/uncontrolledProps.mjs.map +1 -1
  67. package/lib/esm/LastInteractionType.mjs +33 -19
  68. package/lib/esm/core-types/Component.mjs +38 -18
  69. package/lib/esm/core-types/symbols.mjs +9 -9
  70. package/lib/esm/coreFactory.mjs +189 -133
  71. package/lib/esm/enhancement/Children.mjs +41 -47
  72. package/lib/esm/enhancement/Root.mjs +18 -28
  73. package/lib/esm/enhancement/dataName.mjs +5 -5
  74. package/lib/esm/enhancement/enhance.mjs +7 -4
  75. package/lib/esm/enhancement/functionDefaultProps.mjs +4 -4
  76. package/lib/esm/enhancement/i18n.mjs +9 -10
  77. package/lib/esm/enhancement/inheritedName.mjs +5 -5
  78. package/lib/esm/enhancement/staticChildren.mjs +48 -43
  79. package/lib/esm/enhancement/style.mjs +20 -26
  80. package/lib/esm/enhancement/uncontrolledProps.mjs +52 -43
  81. package/lib/esm/register.mjs +20 -12
  82. package/lib/esm/styled/reshadow-core.mjs +111 -98
  83. package/lib/esm/styled/sstyled.mjs +41 -31
  84. package/lib/esm/utils/assignProps.mjs +36 -32
  85. package/lib/esm/utils/enhances/WithI18n.mjs +17 -15
  86. package/lib/esm/utils/enhances/i18nEnhance.mjs +61 -47
  87. package/lib/esm/utils/logger.mjs +21 -13
  88. package/lib/esm/utils/pick.mjs +4 -4
  89. package/lib/esm/utils/ref.mjs +43 -27
  90. package/lib/esm/utils/use/useEnhancedEffect.mjs +1 -1
  91. package/lib/index.js +17 -17
  92. package/lib/register.js +24 -17
  93. package/lib/register.js.map +1 -1
  94. package/lib/register.mjs +20 -12
  95. package/lib/register.mjs.map +1 -1
  96. package/lib/styled/index.js +4 -4
  97. package/lib/styled/reshadow-core.js +104 -102
  98. package/lib/styled/reshadow-core.js.map +1 -1
  99. package/lib/styled/reshadow-core.mjs +111 -98
  100. package/lib/styled/reshadow-core.mjs.map +1 -1
  101. package/lib/styled/sstyled.js +53 -31
  102. package/lib/styled/sstyled.js.map +1 -1
  103. package/lib/styled/sstyled.mjs +41 -31
  104. package/lib/styled/sstyled.mjs.map +1 -1
  105. package/lib/theme/themes/dark.js +2 -2
  106. package/lib/theme/themes/dark.js.map +1 -1
  107. package/lib/theme/themes/default.js +2 -2
  108. package/lib/theme/themes/default.js.map +1 -1
  109. package/lib/theme/themes/highlights-dark.js +2 -2
  110. package/lib/theme/themes/highlights-dark.js.map +1 -1
  111. package/lib/theme/themes/highlights-light.js +2 -2
  112. package/lib/theme/themes/highlights-light.js.map +1 -1
  113. package/lib/theme/themes/light.js +2 -2
  114. package/lib/theme/themes/light.js.map +1 -1
  115. package/lib/utils/CSSinJS.js +10 -8
  116. package/lib/utils/CSSinJS.js.map +1 -1
  117. package/lib/utils/CSSinJS.mjs +7 -6
  118. package/lib/utils/CSSinJS.mjs.map +1 -1
  119. package/lib/utils/ThemeProvider.js +51 -44
  120. package/lib/utils/ThemeProvider.js.map +1 -1
  121. package/lib/utils/ThemeProvider.mjs +47 -36
  122. package/lib/utils/ThemeProvider.mjs.map +1 -1
  123. package/lib/utils/addonText.js +7 -4
  124. package/lib/utils/addonText.js.map +1 -1
  125. package/lib/utils/addonText.mjs +5 -2
  126. package/lib/utils/addonText.mjs.map +1 -1
  127. package/lib/utils/addonTextChildren.js +21 -15
  128. package/lib/utils/addonTextChildren.js.map +1 -1
  129. package/lib/utils/addonTextChildren.mjs +13 -7
  130. package/lib/utils/addonTextChildren.mjs.map +1 -1
  131. package/lib/utils/ariaProps.js +5 -7
  132. package/lib/utils/ariaProps.js.map +1 -1
  133. package/lib/utils/ariaProps.mjs +5 -7
  134. package/lib/utils/ariaProps.mjs.map +1 -1
  135. package/lib/utils/assignProps.js +37 -33
  136. package/lib/utils/assignProps.js.map +1 -1
  137. package/lib/utils/assignProps.mjs +36 -32
  138. package/lib/utils/assignProps.mjs.map +1 -1
  139. package/lib/utils/canUseDOM.js +1 -1
  140. package/lib/utils/capitalizeFirstLetter.js +1 -1
  141. package/lib/utils/color.js +95 -72
  142. package/lib/utils/color.js.map +1 -1
  143. package/lib/utils/color.mjs +94 -71
  144. package/lib/utils/color.mjs.map +1 -1
  145. package/lib/utils/compose.js +12 -3
  146. package/lib/utils/compose.js.map +1 -1
  147. package/lib/utils/compose.mjs +11 -2
  148. package/lib/utils/compose.mjs.map +1 -1
  149. package/lib/utils/createUUID.js +5 -5
  150. package/lib/utils/createUUID.js.map +1 -1
  151. package/lib/utils/createUUID.mjs +4 -4
  152. package/lib/utils/createUUID.mjs.map +1 -1
  153. package/lib/utils/cssToIntDefault.js +4 -3
  154. package/lib/utils/cssToIntDefault.js.map +1 -1
  155. package/lib/utils/cssToIntDefault.mjs +3 -2
  156. package/lib/utils/cssToIntDefault.mjs.map +1 -1
  157. package/lib/utils/enhances/WithCSS.js +8 -10
  158. package/lib/utils/enhances/WithCSS.js.map +1 -1
  159. package/lib/utils/enhances/WithCSS.mjs +6 -7
  160. package/lib/utils/enhances/WithCSS.mjs.map +1 -1
  161. package/lib/utils/enhances/WithI18n.js +19 -19
  162. package/lib/utils/enhances/WithI18n.js.map +1 -1
  163. package/lib/utils/enhances/WithI18n.mjs +17 -15
  164. package/lib/utils/enhances/WithI18n.mjs.map +1 -1
  165. package/lib/utils/enhances/a11yEnhance.js +39 -34
  166. package/lib/utils/enhances/a11yEnhance.js.map +1 -1
  167. package/lib/utils/enhances/a11yEnhance.mjs +36 -32
  168. package/lib/utils/enhances/a11yEnhance.mjs.map +1 -1
  169. package/lib/utils/enhances/animatedSizeEnhance.js +63 -55
  170. package/lib/utils/enhances/animatedSizeEnhance.js.map +1 -1
  171. package/lib/utils/enhances/animatedSizeEnhance.mjs +58 -50
  172. package/lib/utils/enhances/animatedSizeEnhance.mjs.map +1 -1
  173. package/lib/utils/enhances/contextEnhance.js +11 -12
  174. package/lib/utils/enhances/contextEnhance.js.map +1 -1
  175. package/lib/utils/enhances/contextEnhance.mjs +8 -9
  176. package/lib/utils/enhances/contextEnhance.mjs.map +1 -1
  177. package/lib/utils/enhances/i18nEnhance.js +67 -51
  178. package/lib/utils/enhances/i18nEnhance.js.map +1 -1
  179. package/lib/utils/enhances/i18nEnhance.mjs +61 -47
  180. package/lib/utils/enhances/i18nEnhance.mjs.map +1 -1
  181. package/lib/utils/enhances/resolveColorEnhance.js +10 -12
  182. package/lib/utils/enhances/resolveColorEnhance.js.map +1 -1
  183. package/lib/utils/enhances/resolveColorEnhance.mjs +6 -8
  184. package/lib/utils/enhances/resolveColorEnhance.mjs.map +1 -1
  185. package/lib/utils/eventEmitter.js +57 -30
  186. package/lib/utils/eventEmitter.js.map +1 -1
  187. package/lib/utils/eventEmitter.mjs +55 -26
  188. package/lib/utils/eventEmitter.mjs.map +1 -1
  189. package/lib/utils/findComponent.js +42 -35
  190. package/lib/utils/findComponent.js.map +1 -1
  191. package/lib/utils/findComponent.mjs +33 -26
  192. package/lib/utils/findComponent.mjs.map +1 -1
  193. package/lib/utils/fire.js +13 -7
  194. package/lib/utils/fire.js.map +1 -1
  195. package/lib/utils/fire.mjs +11 -5
  196. package/lib/utils/fire.mjs.map +1 -1
  197. package/lib/utils/focus-lock/focusBorders.js +32 -28
  198. package/lib/utils/focus-lock/focusBorders.js.map +1 -1
  199. package/lib/utils/focus-lock/focusBorders.mjs +32 -26
  200. package/lib/utils/focus-lock/focusBorders.mjs.map +1 -1
  201. package/lib/utils/focus-lock/getFocusableIn.js +6 -4
  202. package/lib/utils/focus-lock/getFocusableIn.js.map +1 -1
  203. package/lib/utils/focus-lock/getFocusableIn.mjs +6 -3
  204. package/lib/utils/focus-lock/getFocusableIn.mjs.map +1 -1
  205. package/lib/utils/focus-lock/isFocusInside.js +6 -5
  206. package/lib/utils/focus-lock/isFocusInside.js.map +1 -1
  207. package/lib/utils/focus-lock/isFocusInside.mjs +6 -4
  208. package/lib/utils/focus-lock/isFocusInside.mjs.map +1 -1
  209. package/lib/utils/focus-lock/isFocusable.js +12 -9
  210. package/lib/utils/focus-lock/isFocusable.js.map +1 -1
  211. package/lib/utils/focus-lock/isFocusable.mjs +11 -8
  212. package/lib/utils/focus-lock/isFocusable.mjs.map +1 -1
  213. package/lib/utils/focus-lock/setFocus.js +27 -21
  214. package/lib/utils/focus-lock/setFocus.js.map +1 -1
  215. package/lib/utils/focus-lock/setFocus.mjs +25 -19
  216. package/lib/utils/focus-lock/setFocus.mjs.map +1 -1
  217. package/lib/utils/getAccessibleName.js +22 -10
  218. package/lib/utils/getAccessibleName.js.map +1 -1
  219. package/lib/utils/getAccessibleName.mjs +21 -10
  220. package/lib/utils/getAccessibleName.mjs.map +1 -1
  221. package/lib/utils/getDisplayName.js +1 -1
  222. package/lib/utils/getEventTarget.js +32 -13
  223. package/lib/utils/getEventTarget.js.map +1 -1
  224. package/lib/utils/getEventTarget.mjs +31 -12
  225. package/lib/utils/getEventTarget.mjs.map +1 -1
  226. package/lib/utils/getOriginChildren.js +4 -4
  227. package/lib/utils/getOriginChildren.js.map +1 -1
  228. package/lib/utils/getRandomInt.js +1 -1
  229. package/lib/utils/getValue.js +6 -4
  230. package/lib/utils/getValue.js.map +1 -1
  231. package/lib/utils/getValue.mjs +5 -3
  232. package/lib/utils/getValue.mjs.map +1 -1
  233. package/lib/utils/hasLabels.js +27 -16
  234. package/lib/utils/hasLabels.js.map +1 -1
  235. package/lib/utils/hasLabels.mjs +24 -14
  236. package/lib/utils/hasLabels.mjs.map +1 -1
  237. package/lib/utils/hasParent.js +2 -3
  238. package/lib/utils/hasParent.js.map +1 -1
  239. package/lib/utils/hasParent.mjs +3 -2
  240. package/lib/utils/hasParent.mjs.map +1 -1
  241. package/lib/utils/ifChildren.js +4 -6
  242. package/lib/utils/ifChildren.js.map +1 -1
  243. package/lib/utils/ifChildren.mjs +2 -4
  244. package/lib/utils/ifChildren.mjs.map +1 -1
  245. package/lib/utils/indentStyles.js +10 -5
  246. package/lib/utils/indentStyles.js.map +1 -1
  247. package/lib/utils/indentStyles.mjs +9 -5
  248. package/lib/utils/indentStyles.mjs.map +1 -1
  249. package/lib/utils/injectStyle.js +13 -11
  250. package/lib/utils/injectStyle.js.map +1 -1
  251. package/lib/utils/injectStyle.mjs +10 -9
  252. package/lib/utils/injectStyle.mjs.map +1 -1
  253. package/lib/utils/inputProps.js +5 -5
  254. package/lib/utils/inputProps.js.map +1 -1
  255. package/lib/utils/inputProps.mjs +4 -4
  256. package/lib/utils/inputProps.mjs.map +1 -1
  257. package/lib/utils/isInteractiveElement.js +9 -7
  258. package/lib/utils/isInteractiveElement.js.map +1 -1
  259. package/lib/utils/isInteractiveElement.mjs +9 -7
  260. package/lib/utils/isInteractiveElement.mjs.map +1 -1
  261. package/lib/utils/isNode.js +5 -4
  262. package/lib/utils/isNode.js.map +1 -1
  263. package/lib/utils/isNode.mjs +2 -1
  264. package/lib/utils/isNode.mjs.map +1 -1
  265. package/lib/utils/isPromise.js +1 -1
  266. package/lib/utils/isRetina.js +2 -7
  267. package/lib/utils/isRetina.js.map +1 -1
  268. package/lib/utils/isRetina.mjs +1 -6
  269. package/lib/utils/isRetina.mjs.map +1 -1
  270. package/lib/utils/logger.js +25 -18
  271. package/lib/utils/logger.js.map +1 -1
  272. package/lib/utils/logger.mjs +21 -13
  273. package/lib/utils/logger.mjs.map +1 -1
  274. package/lib/utils/numericChecker.js +18 -11
  275. package/lib/utils/numericChecker.js.map +1 -1
  276. package/lib/utils/numericChecker.mjs +17 -10
  277. package/lib/utils/numericChecker.mjs.map +1 -1
  278. package/lib/utils/ownerDocument.js +2 -2
  279. package/lib/utils/ownerDocument.js.map +1 -1
  280. package/lib/utils/ownerDocument.mjs +1 -1
  281. package/lib/utils/ownerDocument.mjs.map +1 -1
  282. package/lib/utils/pick.js +5 -5
  283. package/lib/utils/pick.js.map +1 -1
  284. package/lib/utils/pick.mjs +4 -4
  285. package/lib/utils/pick.mjs.map +1 -1
  286. package/lib/utils/propsForElement.js +12 -10
  287. package/lib/utils/propsForElement.js.map +1 -1
  288. package/lib/utils/propsForElement.mjs +10 -8
  289. package/lib/utils/propsForElement.mjs.map +1 -1
  290. package/lib/utils/rafTrottle.js +14 -9
  291. package/lib/utils/rafTrottle.js.map +1 -1
  292. package/lib/utils/rafTrottle.mjs +12 -7
  293. package/lib/utils/rafTrottle.mjs.map +1 -1
  294. package/lib/utils/reactToText.js +8 -5
  295. package/lib/utils/reactToText.js.map +1 -1
  296. package/lib/utils/reactToText.mjs +6 -3
  297. package/lib/utils/reactToText.mjs.map +1 -1
  298. package/lib/utils/ref.js +47 -29
  299. package/lib/utils/ref.js.map +1 -1
  300. package/lib/utils/ref.mjs +43 -27
  301. package/lib/utils/ref.mjs.map +1 -1
  302. package/lib/utils/setRef.js +2 -2
  303. package/lib/utils/setRef.js.map +1 -1
  304. package/lib/utils/syncScroll.js +24 -24
  305. package/lib/utils/syncScroll.js.map +1 -1
  306. package/lib/utils/syncScroll.mjs +21 -21
  307. package/lib/utils/syncScroll.mjs.map +1 -1
  308. package/lib/utils/uncontroll.js +18 -8
  309. package/lib/utils/uncontroll.js.map +1 -1
  310. package/lib/utils/uncontroll.mjs +17 -8
  311. package/lib/utils/uncontroll.mjs.map +1 -1
  312. package/lib/utils/uniqueID.js +27 -22
  313. package/lib/utils/uniqueID.js.map +1 -1
  314. package/lib/utils/uniqueID.mjs +25 -18
  315. package/lib/utils/uniqueID.mjs.map +1 -1
  316. package/lib/utils/use/useColorResolver.js +22 -21
  317. package/lib/utils/use/useColorResolver.js.map +1 -1
  318. package/lib/utils/use/useColorResolver.mjs +19 -17
  319. package/lib/utils/use/useColorResolver.mjs.map +1 -1
  320. package/lib/utils/use/useEnhancedEffect.js +4 -4
  321. package/lib/utils/use/useEnhancedEffect.js.map +1 -1
  322. package/lib/utils/use/useEnhancedEffect.mjs +1 -1
  323. package/lib/utils/use/useEnhancedEffect.mjs.map +1 -1
  324. package/lib/utils/use/useEventCallback.js +10 -5
  325. package/lib/utils/use/useEventCallback.js.map +1 -1
  326. package/lib/utils/use/useEventCallback.mjs +8 -3
  327. package/lib/utils/use/useEventCallback.mjs.map +1 -1
  328. package/lib/utils/use/useEventListener.js +15 -11
  329. package/lib/utils/use/useEventListener.js.map +1 -1
  330. package/lib/utils/use/useEventListener.mjs +11 -7
  331. package/lib/utils/use/useEventListener.mjs.map +1 -1
  332. package/lib/utils/use/useFocusLock.js +94 -80
  333. package/lib/utils/use/useFocusLock.js.map +1 -1
  334. package/lib/utils/use/useFocusLock.mjs +88 -71
  335. package/lib/utils/use/useFocusLock.mjs.map +1 -1
  336. package/lib/utils/use/usePreventScroll.js +26 -24
  337. package/lib/utils/use/usePreventScroll.js.map +1 -1
  338. package/lib/utils/use/usePreventScroll.mjs +21 -19
  339. package/lib/utils/use/usePreventScroll.mjs.map +1 -1
  340. package/lib/utils/use/useScrollBarWidth.js +14 -8
  341. package/lib/utils/use/useScrollBarWidth.js.map +1 -1
  342. package/lib/utils/use/useScrollBarWidth.mjs +13 -8
  343. package/lib/utils/use/useScrollBarWidth.mjs.map +1 -1
  344. package/lib/utils/useCssVariable.js +37 -32
  345. package/lib/utils/useCssVariable.js.map +1 -1
  346. package/lib/utils/useCssVariable.mjs +34 -27
  347. package/lib/utils/useCssVariable.mjs.map +1 -1
  348. package/lib/utils/zIndexStacking.js +24 -28
  349. package/lib/utils/zIndexStacking.js.map +1 -1
  350. package/lib/utils/zIndexStacking.mjs +22 -23
  351. package/lib/utils/zIndexStacking.mjs.map +1 -1
  352. package/package.json +12 -316
  353. package/vite.config.ts +0 -22
  354. package/tsconfig-utils.json +0 -4
@@ -1,3 +1,5 @@
1
+ import _typeof from "@babel/runtime/helpers/esm/typeof";
2
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
1
3
  import LocalReact from 'react';
2
4
  import canUseDOM from "../canUseDOM.mjs";
3
5
  import { addFocusBorders, removeFocusBorders } from "../focus-lock/focusBorders.mjs";
@@ -6,7 +8,7 @@ import { isFocusInside } from "../focus-lock/isFocusInside.mjs";
6
8
  import { setFocus } from "../focus-lock/setFocus.mjs";
7
9
  import { hasParent } from "../hasParent.mjs";
8
10
  export { isFocusInside, setFocus };
9
- const syntheticEvents = {
11
+ var syntheticEvents = {
10
12
  blur: 'focusout-intergalactic-focus-lock-synthetic',
11
13
  keydown: 'keydown-intergalactic-focus-lock-synthetic'
12
14
  };
@@ -14,14 +16,14 @@ const syntheticEvents = {
14
16
  * Synthetic event are special events that always bypass all propagation guards and reaches focus lock event listeners.
15
17
  * You should always prevent native event propagation in order to prevent focus enforcing double calls.
16
18
  */
17
- export const makeFocusLockSyntheticEvent = baseEvent => {
18
- const event = baseEvent;
19
- const type = event.type;
19
+ export var makeFocusLockSyntheticEvent = function makeFocusLockSyntheticEvent(baseEvent) {
20
+ var event = baseEvent;
21
+ var type = event.type;
20
22
  if (!(type in syntheticEvents)) {
21
- const supported = Object.keys(syntheticEvents).join(', ');
22
- throw new Error(`Unable to make synthetic event for ${type}, ${supported} are supported`);
23
+ var supported = Object.keys(syntheticEvents).join(', ');
24
+ throw new Error("Unable to make synthetic event for ".concat(type, ", ").concat(supported, " are supported"));
23
25
  }
24
- const syntheticEvent = new Event(syntheticEvents[type], {
26
+ var syntheticEvent = new Event(syntheticEvents[type], {
25
27
  bubbles: true
26
28
  });
27
29
  Object.defineProperty(syntheticEvent, 'target', {
@@ -34,22 +36,24 @@ export const makeFocusLockSyntheticEvent = baseEvent => {
34
36
  });
35
37
  return syntheticEvent;
36
38
  };
37
- const useFocusBorders = (React, disabled, trapRef) => {
39
+ var useFocusBorders = function useFocusBorders(React, disabled, trapRef) {
38
40
  useUniqueIdHookMock(React);
39
- React.useEffect(() => {
40
- const trapNode = trapRef?.current;
41
+ React.useEffect(function () {
42
+ var trapNode = trapRef === null || trapRef === void 0 ? void 0 : trapRef.current;
41
43
  if (trapNode && !disabled && getFocusableIn(trapNode).length > 0) {
42
44
  addFocusBorders(trapNode);
43
45
  }
44
- return () => {
46
+ return function () {
45
47
  if (trapNode) {
46
48
  removeFocusBorders(trapNode);
47
49
  }
48
50
  };
49
51
  }, [disabled]);
50
52
  };
51
- let uniqueId = 0;
52
- const getUniqueId = prefix => `${prefix}-${Math.random().toString(36).slice(2)}-${uniqueId++}`;
53
+ var uniqueId = 0;
54
+ var getUniqueId = function getUniqueId(prefix) {
55
+ return "".concat(prefix, "-").concat(Math.random().toString(36).slice(2), "-").concat(uniqueId++);
56
+ };
53
57
 
54
58
  /**
55
59
  * # Focus lock hook merging
@@ -82,10 +86,10 @@ const getUniqueId = prefix => `${prefix}-${Math.random().toString(36).slice(2)}-
82
86
  * If new update requires to remove some hooks – add mocks instead of them.
83
87
  * If new update requires to add some hooks and no workaround with current hooks list is possible – probably focus lock hook key should be changed.
84
88
  */
85
- const focusLockVersion = 5;
86
- const globalFocusLockHookKey = '__intergalactic_focus_lock_hook_react_v_respectful';
87
- const focusLockAllTraps = new Set();
88
- const focusLockUsedInMountedComponents = new Set();
89
+ var focusLockVersion = 5;
90
+ var globalFocusLockHookKey = '__intergalactic_focus_lock_hook_react_v_respectful';
91
+ var focusLockAllTraps = new Set();
92
+ var focusLockUsedInMountedComponents = new Set();
89
93
  /** Focus master is a special mode in which focus lock might work.
90
94
  * Normally, focus lock hook allows user focus to move freely between
91
95
  * all active focus traps. When component provides `focusMaster=true`
@@ -94,81 +98,86 @@ const focusLockUsedInMountedComponents = new Set();
94
98
  * also have some visual backdrop.
95
99
  * The last element in focus masters stack is considered as a current focus master.
96
100
  */
97
- const focusMastersStack = [];
98
- const noop = () => {};
99
- const useUniqueIdHookMock = React => {
101
+ var focusMastersStack = [];
102
+ var noop = function noop() {};
103
+ var useUniqueIdHookMock = function useUniqueIdHookMock(React) {
100
104
  React.useState(undefined);
101
- const useEnhancedEffect = canUseDOM() ? React.useLayoutEffect : React.useEffect;
105
+ var useEnhancedEffect = canUseDOM() ? React.useLayoutEffect : React.useEffect;
102
106
  useEnhancedEffect(noop, []);
103
107
  };
104
- const useFocusLockHook = (React, trapRef, autoFocus, returnFocusTo, disabled = false, focusMaster = false, onFocusOut) => {
108
+ var useFocusLockHook = function useFocusLockHook(React, trapRef, autoFocus, returnFocusTo) {
109
+ var disabled = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
110
+ var focusMaster = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;
111
+ var onFocusOut = arguments.length > 6 ? arguments[6] : undefined;
105
112
  useFocusBorders(React, disabled, trapRef);
106
- const autoTriggerRef = React.useRef(null);
107
- const lastUserInteractionRef = React.useRef(undefined);
108
- const handleFocusOut = React.useCallback(event => {
109
- const focusCameFrom = event.target;
110
- const focusMovedTo = event.relatedTarget;
111
- setTimeout(() => {
113
+ var autoTriggerRef = React.useRef(null);
114
+ var lastUserInteractionRef = React.useRef(undefined);
115
+ var handleFocusOut = React.useCallback(function (event) {
116
+ var focusCameFrom = event.target;
117
+ var focusMovedTo = event.relatedTarget;
118
+ setTimeout(function () {
112
119
  if (!focusCameFrom) return;
113
120
  if (autoTriggerRef.current) return;
114
121
  autoTriggerRef.current = focusCameFrom;
115
122
  }, 0);
116
123
  if (lastUserInteractionRef.current === 'mouse') return;
117
- Promise.resolve().then(() => {
124
+ Promise.resolve().then(function () {
118
125
  if (!trapRef.current) return;
119
- const currentFocusMaster = focusMastersStack[focusMastersStack.length - 1];
126
+ var currentFocusMaster = focusMastersStack[focusMastersStack.length - 1];
120
127
  if (currentFocusMaster && currentFocusMaster !== trapRef.current) return;
121
- const trapNodes = currentFocusMaster ? [trapRef.current] : [trapRef.current, ...focusLockAllTraps];
128
+ var trapNodes = currentFocusMaster ? [trapRef.current] : [trapRef.current].concat(_toConsumableArray(focusLockAllTraps));
122
129
  if (isFocusInside(trapNodes, focusMovedTo)) return;
123
- if (typeof returnFocusTo === 'object' && returnFocusTo?.current && hasParent(focusMovedTo, returnFocusTo.current)) return;
130
+ if (_typeof(returnFocusTo) === 'object' && returnFocusTo !== null && returnFocusTo !== void 0 && returnFocusTo.current && hasParent(focusMovedTo, returnFocusTo.current)) return;
124
131
  if (focusCameFrom && focusMovedTo) {
125
132
  setFocus(trapRef.current, focusCameFrom, focusMovedTo);
126
133
  }
127
- onFocusOut?.(event);
134
+ onFocusOut === null || onFocusOut === void 0 || onFocusOut(event);
128
135
  });
129
136
  }, [onFocusOut]);
130
- const handleMouseEvent = React.useCallback(() => {
137
+ var handleMouseEvent = React.useCallback(function () {
131
138
  lastUserInteractionRef.current = 'mouse';
132
139
  }, []);
133
- const handleKeyboardEvent = React.useCallback(() => {
140
+ var handleKeyboardEvent = React.useCallback(function () {
134
141
  lastUserInteractionRef.current = 'keyboard';
135
142
  }, []);
136
- const returnFocus = React.useCallback(() => {
137
- const trapNode = trapRef.current;
143
+ var returnFocus = React.useCallback(function () {
144
+ var trapNode = trapRef.current;
138
145
  if (trapNode && !isFocusInside(trapNode)) return;
139
- const focusMastersStackCount = focusMastersStack.length;
140
- if (typeof returnFocusTo === 'object' && returnFocusTo?.current) {
141
- const returnFocusNode = returnFocusTo?.current;
142
- setTimeout(() => {
146
+ var focusMastersStackCount = focusMastersStack.length;
147
+ if (_typeof(returnFocusTo) === 'object' && returnFocusTo !== null && returnFocusTo !== void 0 && returnFocusTo.current) {
148
+ var returnFocusNode = returnFocusTo === null || returnFocusTo === void 0 ? void 0 : returnFocusTo.current;
149
+ setTimeout(function () {
143
150
  if (focusMastersStackCount !== focusMastersStack.length) {
144
151
  setFocus(returnFocusNode, trapNode);
145
152
  }
146
153
  }, 0);
147
154
  }
148
155
  if (returnFocusTo === 'auto' && autoTriggerRef.current) {
149
- const autoTrigger = autoTriggerRef.current;
150
- setTimeout(() => {
156
+ var autoTrigger = autoTriggerRef.current;
157
+ setTimeout(function () {
151
158
  if (focusMastersStackCount !== focusMastersStack.length || autoFocus === 'enforced') {
152
159
  setFocus(autoTrigger, trapNode);
153
160
  }
154
161
  }, 0);
155
162
  }
156
163
  }, [returnFocusTo]);
157
- React.useEffect(() => {
158
- if (typeof trapRef !== 'object' || trapRef === null) return;
159
- const node = trapRef.current;
164
+ React.useEffect(function () {
165
+ if (_typeof(trapRef) !== 'object' || trapRef === null) return;
166
+ var node = trapRef.current;
160
167
  if (!node) return;
161
168
  focusLockAllTraps.add(node);
162
- return () => {
169
+ return function () {
163
170
  if (!node) return;
164
- focusLockAllTraps.delete(node);
171
+ focusLockAllTraps["delete"](node);
165
172
  };
166
173
  }, [disabled]);
167
- React.useEffect(() => {
174
+ React.useEffect(function () {
168
175
  if (disabled) return;
169
176
  if (!canUseDOM()) return;
170
177
  if (!trapRef.current) return;
171
- const focusableChildren = Array.from(trapRef.current.children).flatMap(node => getFocusableIn(node));
178
+ var focusableChildren = Array.from(trapRef.current.children).flatMap(function (node) {
179
+ return getFocusableIn(node);
180
+ });
172
181
  if (focusableChildren.length === 0 && autoFocus !== 'enforced') return;
173
182
  document.body.addEventListener('focusout', handleFocusOut);
174
183
  document.body.addEventListener(syntheticEvents.blur, handleFocusOut);
@@ -177,15 +186,16 @@ const useFocusLockHook = (React, trapRef, autoFocus, returnFocusTo, disabled = f
177
186
  document.body.addEventListener('keydown', handleKeyboardEvent);
178
187
  document.body.addEventListener(syntheticEvents.keydown, handleKeyboardEvent);
179
188
  if (autoFocus) {
180
- setTimeout(() => {
189
+ setTimeout(function () {
181
190
  if (autoFocus === 'enforced' && focusableChildren.length === 0 && focusMaster) {
182
- trapRef.current?.focus();
191
+ var _trapRef$current;
192
+ (_trapRef$current = trapRef.current) === null || _trapRef$current === void 0 || _trapRef$current.focus();
183
193
  return;
184
194
  }
185
- setFocus(trapRef.current, typeof returnFocusTo === 'object' ? returnFocusTo?.current : document.body);
195
+ setFocus(trapRef.current, _typeof(returnFocusTo) === 'object' ? returnFocusTo === null || returnFocusTo === void 0 ? void 0 : returnFocusTo.current : document.body);
186
196
  }, 0);
187
197
  }
188
- return () => {
198
+ return function () {
189
199
  document.body.removeEventListener('focusout', handleFocusOut);
190
200
  document.body.removeEventListener(syntheticEvents.blur, handleFocusOut);
191
201
  document.body.removeEventListener('mousedown', handleMouseEvent);
@@ -196,17 +206,19 @@ const useFocusLockHook = (React, trapRef, autoFocus, returnFocusTo, disabled = f
196
206
  autoTriggerRef.current = null;
197
207
  };
198
208
  }, [disabled, autoFocus, returnFocusTo, returnFocus]);
199
- React.useEffect(() => {
200
- if (typeof trapRef !== 'object' || trapRef === null) return;
209
+ React.useEffect(function () {
210
+ if (_typeof(trapRef) !== 'object' || trapRef === null) return;
201
211
  if (disabled) return;
202
212
  if (!canUseDOM()) return;
203
213
  if (!trapRef.current) return;
204
- const focusableChildren = Array.from(trapRef.current.children).flatMap(node => getFocusableIn(node));
214
+ var focusableChildren = Array.from(trapRef.current.children).flatMap(function (node) {
215
+ return getFocusableIn(node);
216
+ });
205
217
  if (focusableChildren.length === 0) return;
206
218
  if (focusMaster) {
207
219
  focusMastersStack.push(trapRef.current);
208
220
  }
209
- return () => {
221
+ return function () {
210
222
  if (!focusMaster) return;
211
223
  if (focusMastersStack[focusMastersStack.length - 1] === trapRef.current) {
212
224
  focusMastersStack.pop();
@@ -216,16 +228,16 @@ const useFocusLockHook = (React, trapRef, autoFocus, returnFocusTo, disabled = f
216
228
  };
217
229
  }, [disabled, focusMaster]);
218
230
  useUniqueIdHookMock(React);
219
- React.useEffect(() => {
220
- const id = getUniqueId('focus-lock-consumer');
231
+ React.useEffect(function () {
232
+ var id = getUniqueId('focus-lock-consumer');
221
233
  if (disabled) return;
222
234
  focusLockUsedInMountedComponents.add(id);
223
- return () => {
224
- focusLockUsedInMountedComponents.delete(id);
235
+ return function () {
236
+ focusLockUsedInMountedComponents["delete"](id);
225
237
  };
226
238
  }, [disabled]);
227
239
  };
228
- const establishHookAsGlobal = () => {
240
+ var establishHookAsGlobal = function establishHookAsGlobal() {
229
241
  globalThis[globalFocusLockHookKey] = {
230
242
  hook: useFocusLockHook,
231
243
  version: focusLockVersion,
@@ -237,19 +249,24 @@ if (!globalThis[globalFocusLockHookKey]) {
237
249
  } else if (typeof globalThis[globalFocusLockHookKey].version !== 'number') {
238
250
  establishHookAsGlobal();
239
251
  } else {
240
- const {
241
- version: theirVersion,
242
- usedInComponents
243
- } = globalThis[globalFocusLockHookKey];
252
+ var _globalFocusLockHookK = globalThis[globalFocusLockHookKey],
253
+ theirVersion = _globalFocusLockHookK.version,
254
+ usedInComponents = _globalFocusLockHookK.usedInComponents;
244
255
  if (focusLockVersion > theirVersion && usedInComponents.size === 0) {
245
256
  establishHookAsGlobal();
246
257
  }
247
258
  }
248
- export const useFocusLock = (trapRef, autoFocus, returnFocusTo, disabled = false, focusMaster = false, onFocusOut) => {
249
- const hook = globalThis[globalFocusLockHookKey]?.hook ?? useFocusLockHook;
259
+ export var useFocusLock = function useFocusLock(trapRef, autoFocus, returnFocusTo) {
260
+ var _globalFocusLockHookK2, _globalFocusLockHookK3;
261
+ var disabled = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
262
+ var focusMaster = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
263
+ var onFocusOut = arguments.length > 5 ? arguments[5] : undefined;
264
+ var hook = (_globalFocusLockHookK2 = (_globalFocusLockHookK3 = globalThis[globalFocusLockHookKey]) === null || _globalFocusLockHookK3 === void 0 ? void 0 : _globalFocusLockHookK3.hook) !== null && _globalFocusLockHookK2 !== void 0 ? _globalFocusLockHookK2 : useFocusLockHook;
250
265
  return hook(LocalReact, trapRef, autoFocus, returnFocusTo, disabled, focusMaster, onFocusOut);
251
266
  };
252
- export const hasFocusableIn = element => {
253
- return Array.from(element.children).flatMap(node => getFocusableIn(node)).length > 0;
267
+ export var hasFocusableIn = function hasFocusableIn(element) {
268
+ return Array.from(element.children).flatMap(function (node) {
269
+ return getFocusableIn(node);
270
+ }).length > 0;
254
271
  };
255
272
  //# sourceMappingURL=useFocusLock.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFocusLock.mjs","names":["LocalReact","canUseDOM","addFocusBorders","removeFocusBorders","getFocusableIn","isFocusInside","setFocus","hasParent","syntheticEvents","blur","keydown","makeFocusLockSyntheticEvent","baseEvent","event","type","supported","Object","keys","join","Error","syntheticEvent","Event","bubbles","defineProperty","writable","value","target","relatedTarget","useFocusBorders","React","disabled","trapRef","useUniqueIdHookMock","useEffect","trapNode","current","length","uniqueId","getUniqueId","prefix","Math","random","toString","slice","focusLockVersion","globalFocusLockHookKey","focusLockAllTraps","Set","focusLockUsedInMountedComponents","focusMastersStack","noop","useState","undefined","useEnhancedEffect","useLayoutEffect","useFocusLockHook","autoFocus","returnFocusTo","focusMaster","onFocusOut","autoTriggerRef","useRef","lastUserInteractionRef","handleFocusOut","useCallback","focusCameFrom","focusMovedTo","setTimeout","Promise","resolve","then","currentFocusMaster","trapNodes","handleMouseEvent","handleKeyboardEvent","returnFocus","focusMastersStackCount","returnFocusNode","autoTrigger","node","add","delete","focusableChildren","Array","from","children","flatMap","document","body","addEventListener","focus","removeEventListener","push","pop","splice","indexOf","id","establishHookAsGlobal","globalThis","hook","version","usedInComponents","theirVersion","size","useFocusLock","hasFocusableIn","element"],"sources":["../../../src/utils/use/useFocusLock.ts"],"sourcesContent":["import LocalReact from 'react';\n\nimport canUseDOM from '../canUseDOM';\nimport { addFocusBorders, removeFocusBorders } from '../focus-lock/focusBorders';\nimport { getFocusableIn } from '../focus-lock/getFocusableIn';\nimport { isFocusInside } from '../focus-lock/isFocusInside';\nimport { setFocus } from '../focus-lock/setFocus';\nimport { hasParent } from '../hasParent';\n\nexport { isFocusInside, setFocus };\n\nconst syntheticEvents = {\n blur: 'focusout-intergalactic-focus-lock-synthetic',\n keydown: 'keydown-intergalactic-focus-lock-synthetic',\n};\n/**\n * Synthetic event are special events that always bypass all propagation guards and reaches focus lock event listeners.\n * You should always prevent native event propagation in order to prevent focus enforcing double calls.\n */\nexport const makeFocusLockSyntheticEvent = (baseEvent: Event) => {\n const event = baseEvent as any;\n const type = event.type as keyof typeof syntheticEvents;\n if (!(type in syntheticEvents)) {\n const supported = Object.keys(syntheticEvents).join(', ');\n throw new Error(`Unable to make synthetic event for ${type}, ${supported} are supported`);\n }\n const syntheticEvent = new Event(syntheticEvents[type], {\n bubbles: true,\n });\n Object.defineProperty(syntheticEvent, 'target', { writable: false, value: event.target });\n Object.defineProperty(syntheticEvent, 'relatedTarget', {\n writable: false,\n value: event.relatedTarget,\n });\n return syntheticEvent;\n};\n\nconst useFocusBorders = (\n React: ReactT,\n disabled?: boolean,\n trapRef?: React.RefObject<HTMLElement>,\n) => {\n useUniqueIdHookMock(React);\n React.useEffect(() => {\n const trapNode = trapRef?.current;\n\n if (trapNode && !disabled && getFocusableIn(trapNode).length > 0) {\n addFocusBorders(trapNode);\n }\n\n return () => {\n if (trapNode) {\n removeFocusBorders(trapNode);\n }\n };\n }, [disabled]);\n};\n\ntype ReactT = typeof LocalReact;\n\nlet uniqueId = 0;\nconst getUniqueId = (prefix: string) =>\n `${prefix}-${Math.random().toString(36).slice(2)}-${uniqueId++}`;\n\n/**\n * # Focus lock hook merging\n * In some cases same page might contain different versions of components.\n * In such cases, we need to ensure that only one version of focus lock hook is used.\n * So, it's why we have `useFocusLockHook` function that is wrapped into `useFocusLock`.\n *\n * While evaluating this file code, we check if global focus lock hook is already defined.\n * If it's defined, we replace it ONLY if our version is higher and no components currently use it.\n * The last condition is very important because we are unable to replace React hook without reimplementing\n * React hooks lifecycle in some kind of wrapper.\n *\n * ## Versioning\n * Such versions merging requires us to keep hook api backward compatible.\n * When hook logic changes, the variable `focusLockVersion` should be incremented.\n *\n * Version update `1 -> 2`. Fixed call `safeMoveFocusInside` in `handleFocusIn` with correct second parameter (focusCameFrom instead of event.target)\n * Version update `2 -> 3`. Fixed React version isolation in nested hooks (`useFocusBorders`, `useUniqueId`).\n * Version update `3 -> 4`. Fixed lock for correct working with iframes in modal\n * Version update `4 -> 5`. Changed placements for border - now they wrap trap node\n *\n * Initially (for a several versions) key was `__intergalactic_focus_lock_hook_`.\n * Making it respect react version required to change key. So key was changed to `__intergalactic_focus_lock_hook_react_v_respectful`.\n *\n * ## React hooks order\n * When updating from version 2 to version 3 `useUniqueId` hook was removed.\n * Due to replacing useFocusLock hook in runtime, the order of hooks must be preserved.\n * So, useUniqueIdHookMock helps to preserve hooks order when hook is being replaced from version 2 to version 3.\n *\n * If new update requires to remove some hooks – add mocks instead of them.\n * If new update requires to add some hooks and no workaround with current hooks list is possible – probably focus lock hook key should be changed.\n */\nconst focusLockVersion = 5;\nconst globalFocusLockHookKey = '__intergalactic_focus_lock_hook_react_v_respectful';\n\nconst focusLockAllTraps = new Set<HTMLElement>();\nconst focusLockUsedInMountedComponents = new Set<string>();\n/** Focus master is a special mode in which focus lock might work.\n * Normally, focus lock hook allows user focus to move freely between\n * all active focus traps. When component provides `focusMaster=true`\n * parameter, it says that it doesn't want to share focus with other traps.\n * It is very useful for a big components like modals or side-bars that\n * also have some visual backdrop.\n * The last element in focus masters stack is considered as a current focus master.\n */\nconst focusMastersStack: HTMLElement[] = [];\n\nconst noop = () => {};\nconst useUniqueIdHookMock = (React: ReactT) => {\n React.useState(undefined);\n const useEnhancedEffect = canUseDOM() ? React.useLayoutEffect : React.useEffect;\n useEnhancedEffect(noop, []);\n};\n\nconst useFocusLockHook = (\n React: ReactT,\n trapRef: React.RefObject<HTMLElement>,\n autoFocus: boolean | 'enforced',\n returnFocusTo: React.RefObject<HTMLElement> | null | 'auto',\n disabled = false,\n focusMaster = false,\n onFocusOut?: (event: Event) => void,\n) => {\n useFocusBorders(React, disabled, trapRef);\n\n const autoTriggerRef = React.useRef<HTMLElement | null>(null);\n const lastUserInteractionRef = React.useRef<'mouse' | 'keyboard' | undefined>(undefined);\n\n const handleFocusOut = React.useCallback(\n (event: Event & { relatedTarget?: HTMLElement; target?: HTMLElement }) => {\n const focusCameFrom = event.target;\n const focusMovedTo = event.relatedTarget;\n setTimeout(() => {\n if (!focusCameFrom) return;\n if (autoTriggerRef.current) return;\n autoTriggerRef.current = focusCameFrom;\n }, 0);\n if (lastUserInteractionRef.current === 'mouse') return;\n Promise.resolve().then(() => {\n if (!trapRef.current) return;\n const currentFocusMaster = focusMastersStack[focusMastersStack.length - 1];\n if (currentFocusMaster && currentFocusMaster !== trapRef.current) return;\n const trapNodes = currentFocusMaster\n ? [trapRef.current]\n : [trapRef.current, ...focusLockAllTraps];\n if (isFocusInside(trapNodes, focusMovedTo)) return;\n if (\n typeof returnFocusTo === 'object' &&\n returnFocusTo?.current &&\n hasParent(focusMovedTo, returnFocusTo.current)\n )\n return;\n\n if (focusCameFrom && focusMovedTo) {\n setFocus(trapRef.current, focusCameFrom, focusMovedTo);\n }\n\n onFocusOut?.(event);\n });\n },\n [onFocusOut],\n );\n const handleMouseEvent = React.useCallback(() => {\n lastUserInteractionRef.current = 'mouse';\n }, []);\n const handleKeyboardEvent = React.useCallback(() => {\n lastUserInteractionRef.current = 'keyboard';\n }, []);\n const returnFocus = React.useCallback(() => {\n const trapNode = trapRef.current;\n if (trapNode && !isFocusInside(trapNode)) return;\n const focusMastersStackCount = focusMastersStack.length;\n if (typeof returnFocusTo === 'object' && returnFocusTo?.current) {\n const returnFocusNode = returnFocusTo?.current;\n setTimeout(() => {\n if (focusMastersStackCount !== focusMastersStack.length) {\n setFocus(returnFocusNode, trapNode);\n }\n }, 0);\n }\n if (returnFocusTo === 'auto' && autoTriggerRef.current) {\n const autoTrigger = autoTriggerRef.current;\n setTimeout(() => {\n if (focusMastersStackCount !== focusMastersStack.length || autoFocus === 'enforced') {\n setFocus(autoTrigger, trapNode);\n }\n }, 0);\n }\n }, [returnFocusTo]);\n React.useEffect(() => {\n if (typeof trapRef !== 'object' || trapRef === null) return;\n const node = trapRef.current;\n if (!node) return;\n focusLockAllTraps.add(node);\n return () => {\n if (!node) return;\n focusLockAllTraps.delete(node);\n };\n }, [disabled]);\n\n React.useEffect(() => {\n if (disabled) return;\n if (!canUseDOM()) return;\n if (!trapRef.current) return;\n const focusableChildren = Array.from(trapRef.current.children).flatMap((node) =>\n getFocusableIn(node as HTMLElement),\n );\n if (focusableChildren.length === 0 && autoFocus !== 'enforced') return;\n\n document.body.addEventListener('focusout', handleFocusOut as any);\n document.body.addEventListener(syntheticEvents.blur, handleFocusOut as any);\n document.body.addEventListener('mousedown', handleMouseEvent);\n document.body.addEventListener('touchstart', handleMouseEvent);\n document.body.addEventListener('keydown', handleKeyboardEvent);\n document.body.addEventListener(syntheticEvents.keydown, handleKeyboardEvent);\n\n if (autoFocus) {\n setTimeout(() => {\n if (autoFocus === 'enforced' && focusableChildren.length === 0 && focusMaster) {\n trapRef.current?.focus();\n return;\n }\n\n setFocus(\n trapRef.current!,\n typeof returnFocusTo === 'object' ? returnFocusTo?.current : document.body,\n );\n }, 0);\n }\n return () => {\n document.body.removeEventListener('focusout', handleFocusOut as any);\n document.body.removeEventListener(syntheticEvents.blur, handleFocusOut as any);\n document.body.removeEventListener('mousedown', handleMouseEvent);\n document.body.removeEventListener('touchstart', handleMouseEvent);\n document.body.removeEventListener('keydown', handleKeyboardEvent);\n document.body.removeEventListener(syntheticEvents.keydown, handleKeyboardEvent);\n returnFocus();\n autoTriggerRef.current = null;\n };\n }, [disabled, autoFocus, returnFocusTo, returnFocus]);\n\n React.useEffect(() => {\n if (typeof trapRef !== 'object' || trapRef === null) return;\n if (disabled) return;\n if (!canUseDOM()) return;\n if (!trapRef.current) return;\n const focusableChildren = Array.from(trapRef.current.children).flatMap((node) =>\n getFocusableIn(node as HTMLElement),\n );\n if (focusableChildren.length === 0) return;\n\n if (focusMaster) {\n focusMastersStack.push(trapRef.current);\n }\n\n return () => {\n if (!focusMaster) return;\n if (focusMastersStack[focusMastersStack.length - 1] === trapRef.current) {\n focusMastersStack.pop();\n } else {\n focusMastersStack.splice(focusMastersStack.indexOf(trapRef.current!), 1);\n }\n };\n }, [disabled, focusMaster]);\n\n useUniqueIdHookMock(React);\n React.useEffect(() => {\n const id = getUniqueId('focus-lock-consumer');\n if (disabled) return;\n focusLockUsedInMountedComponents.add(id);\n return () => {\n focusLockUsedInMountedComponents.delete(id);\n };\n }, [disabled]);\n};\nconst establishHookAsGlobal = () => {\n (globalThis as any)[globalFocusLockHookKey] = {\n hook: useFocusLockHook,\n version: focusLockVersion,\n usedInComponents: focusLockUsedInMountedComponents,\n };\n};\nif (!(globalThis as any)[globalFocusLockHookKey]) {\n establishHookAsGlobal();\n} else if (typeof (globalThis as any)[globalFocusLockHookKey].version !== 'number') {\n establishHookAsGlobal();\n} else {\n const { version: theirVersion, usedInComponents } = (globalThis as any)[globalFocusLockHookKey];\n if (focusLockVersion > theirVersion && usedInComponents.size === 0) {\n establishHookAsGlobal();\n }\n}\n\nexport const useFocusLock = (\n trapRef: React.RefObject<HTMLElement>,\n autoFocus: boolean | 'enforced',\n returnFocusTo: React.RefObject<HTMLElement> | null | 'auto',\n disabled = false,\n focusMaster = false,\n onFocusOut?: (event: Event) => void,\n) => {\n const hook = (globalThis as any)[globalFocusLockHookKey]?.hook ?? useFocusLockHook;\n return hook(LocalReact, trapRef, autoFocus, returnFocusTo, disabled, focusMaster, onFocusOut);\n};\n\nexport const hasFocusableIn = (element: HTMLElement): boolean => {\n return (\n Array.from(element.children).flatMap((node) => getFocusableIn(node as HTMLElement)).length > 0\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"useFocusLock.mjs","names":["LocalReact","canUseDOM","addFocusBorders","removeFocusBorders","getFocusableIn","isFocusInside","setFocus","hasParent","syntheticEvents","blur","keydown","makeFocusLockSyntheticEvent","baseEvent","event","type","supported","Object","keys","join","Error","concat","syntheticEvent","Event","bubbles","defineProperty","writable","value","target","relatedTarget","useFocusBorders","React","disabled","trapRef","useUniqueIdHookMock","useEffect","trapNode","current","length","uniqueId","getUniqueId","prefix","Math","random","toString","slice","focusLockVersion","globalFocusLockHookKey","focusLockAllTraps","Set","focusLockUsedInMountedComponents","focusMastersStack","noop","useState","undefined","useEnhancedEffect","useLayoutEffect","useFocusLockHook","autoFocus","returnFocusTo","arguments","focusMaster","onFocusOut","autoTriggerRef","useRef","lastUserInteractionRef","handleFocusOut","useCallback","focusCameFrom","focusMovedTo","setTimeout","Promise","resolve","then","currentFocusMaster","trapNodes","_toConsumableArray","_typeof","handleMouseEvent","handleKeyboardEvent","returnFocus","focusMastersStackCount","returnFocusNode","autoTrigger","node","add","focusableChildren","Array","from","children","flatMap","document","body","addEventListener","_trapRef$current","focus","removeEventListener","push","pop","splice","indexOf","id","establishHookAsGlobal","globalThis","hook","version","usedInComponents","_globalFocusLockHookK","theirVersion","size","useFocusLock","_globalFocusLockHookK2","_globalFocusLockHookK3","hasFocusableIn","element"],"sources":["../../../src/utils/use/useFocusLock.ts"],"sourcesContent":["import LocalReact from 'react';\n\nimport canUseDOM from '../canUseDOM';\nimport { addFocusBorders, removeFocusBorders } from '../focus-lock/focusBorders';\nimport { getFocusableIn } from '../focus-lock/getFocusableIn';\nimport { isFocusInside } from '../focus-lock/isFocusInside';\nimport { setFocus } from '../focus-lock/setFocus';\nimport { hasParent } from '../hasParent';\n\nexport { isFocusInside, setFocus };\n\nconst syntheticEvents = {\n blur: 'focusout-intergalactic-focus-lock-synthetic',\n keydown: 'keydown-intergalactic-focus-lock-synthetic',\n};\n/**\n * Synthetic event are special events that always bypass all propagation guards and reaches focus lock event listeners.\n * You should always prevent native event propagation in order to prevent focus enforcing double calls.\n */\nexport const makeFocusLockSyntheticEvent = (baseEvent: Event) => {\n const event = baseEvent as any;\n const type = event.type as keyof typeof syntheticEvents;\n if (!(type in syntheticEvents)) {\n const supported = Object.keys(syntheticEvents).join(', ');\n throw new Error(`Unable to make synthetic event for ${type}, ${supported} are supported`);\n }\n const syntheticEvent = new Event(syntheticEvents[type], {\n bubbles: true,\n });\n Object.defineProperty(syntheticEvent, 'target', { writable: false, value: event.target });\n Object.defineProperty(syntheticEvent, 'relatedTarget', {\n writable: false,\n value: event.relatedTarget,\n });\n return syntheticEvent;\n};\n\nconst useFocusBorders = (\n React: ReactT,\n disabled?: boolean,\n trapRef?: React.RefObject<HTMLElement>,\n) => {\n useUniqueIdHookMock(React);\n React.useEffect(() => {\n const trapNode = trapRef?.current;\n\n if (trapNode && !disabled && getFocusableIn(trapNode).length > 0) {\n addFocusBorders(trapNode);\n }\n\n return () => {\n if (trapNode) {\n removeFocusBorders(trapNode);\n }\n };\n }, [disabled]);\n};\n\ntype ReactT = typeof LocalReact;\n\nlet uniqueId = 0;\nconst getUniqueId = (prefix: string) =>\n `${prefix}-${Math.random().toString(36).slice(2)}-${uniqueId++}`;\n\n/**\n * # Focus lock hook merging\n * In some cases same page might contain different versions of components.\n * In such cases, we need to ensure that only one version of focus lock hook is used.\n * So, it's why we have `useFocusLockHook` function that is wrapped into `useFocusLock`.\n *\n * While evaluating this file code, we check if global focus lock hook is already defined.\n * If it's defined, we replace it ONLY if our version is higher and no components currently use it.\n * The last condition is very important because we are unable to replace React hook without reimplementing\n * React hooks lifecycle in some kind of wrapper.\n *\n * ## Versioning\n * Such versions merging requires us to keep hook api backward compatible.\n * When hook logic changes, the variable `focusLockVersion` should be incremented.\n *\n * Version update `1 -> 2`. Fixed call `safeMoveFocusInside` in `handleFocusIn` with correct second parameter (focusCameFrom instead of event.target)\n * Version update `2 -> 3`. Fixed React version isolation in nested hooks (`useFocusBorders`, `useUniqueId`).\n * Version update `3 -> 4`. Fixed lock for correct working with iframes in modal\n * Version update `4 -> 5`. Changed placements for border - now they wrap trap node\n *\n * Initially (for a several versions) key was `__intergalactic_focus_lock_hook_`.\n * Making it respect react version required to change key. So key was changed to `__intergalactic_focus_lock_hook_react_v_respectful`.\n *\n * ## React hooks order\n * When updating from version 2 to version 3 `useUniqueId` hook was removed.\n * Due to replacing useFocusLock hook in runtime, the order of hooks must be preserved.\n * So, useUniqueIdHookMock helps to preserve hooks order when hook is being replaced from version 2 to version 3.\n *\n * If new update requires to remove some hooks – add mocks instead of them.\n * If new update requires to add some hooks and no workaround with current hooks list is possible – probably focus lock hook key should be changed.\n */\nconst focusLockVersion = 5;\nconst globalFocusLockHookKey = '__intergalactic_focus_lock_hook_react_v_respectful';\n\nconst focusLockAllTraps = new Set<HTMLElement>();\nconst focusLockUsedInMountedComponents = new Set<string>();\n/** Focus master is a special mode in which focus lock might work.\n * Normally, focus lock hook allows user focus to move freely between\n * all active focus traps. When component provides `focusMaster=true`\n * parameter, it says that it doesn't want to share focus with other traps.\n * It is very useful for a big components like modals or side-bars that\n * also have some visual backdrop.\n * The last element in focus masters stack is considered as a current focus master.\n */\nconst focusMastersStack: HTMLElement[] = [];\n\nconst noop = () => {};\nconst useUniqueIdHookMock = (React: ReactT) => {\n React.useState(undefined);\n const useEnhancedEffect = canUseDOM() ? React.useLayoutEffect : React.useEffect;\n useEnhancedEffect(noop, []);\n};\n\nconst useFocusLockHook = (\n React: ReactT,\n trapRef: React.RefObject<HTMLElement>,\n autoFocus: boolean | 'enforced',\n returnFocusTo: React.RefObject<HTMLElement> | null | 'auto',\n disabled = false,\n focusMaster = false,\n onFocusOut?: (event: Event) => void,\n) => {\n useFocusBorders(React, disabled, trapRef);\n\n const autoTriggerRef = React.useRef<HTMLElement | null>(null);\n const lastUserInteractionRef = React.useRef<'mouse' | 'keyboard' | undefined>(undefined);\n\n const handleFocusOut = React.useCallback(\n (event: Event & { relatedTarget?: HTMLElement; target?: HTMLElement }) => {\n const focusCameFrom = event.target;\n const focusMovedTo = event.relatedTarget;\n setTimeout(() => {\n if (!focusCameFrom) return;\n if (autoTriggerRef.current) return;\n autoTriggerRef.current = focusCameFrom;\n }, 0);\n if (lastUserInteractionRef.current === 'mouse') return;\n Promise.resolve().then(() => {\n if (!trapRef.current) return;\n const currentFocusMaster = focusMastersStack[focusMastersStack.length - 1];\n if (currentFocusMaster && currentFocusMaster !== trapRef.current) return;\n const trapNodes = currentFocusMaster\n ? [trapRef.current]\n : [trapRef.current, ...focusLockAllTraps];\n if (isFocusInside(trapNodes, focusMovedTo)) return;\n if (\n typeof returnFocusTo === 'object' &&\n returnFocusTo?.current &&\n hasParent(focusMovedTo, returnFocusTo.current)\n )\n return;\n\n if (focusCameFrom && focusMovedTo) {\n setFocus(trapRef.current, focusCameFrom, focusMovedTo);\n }\n\n onFocusOut?.(event);\n });\n },\n [onFocusOut],\n );\n const handleMouseEvent = React.useCallback(() => {\n lastUserInteractionRef.current = 'mouse';\n }, []);\n const handleKeyboardEvent = React.useCallback(() => {\n lastUserInteractionRef.current = 'keyboard';\n }, []);\n const returnFocus = React.useCallback(() => {\n const trapNode = trapRef.current;\n if (trapNode && !isFocusInside(trapNode)) return;\n const focusMastersStackCount = focusMastersStack.length;\n if (typeof returnFocusTo === 'object' && returnFocusTo?.current) {\n const returnFocusNode = returnFocusTo?.current;\n setTimeout(() => {\n if (focusMastersStackCount !== focusMastersStack.length) {\n setFocus(returnFocusNode, trapNode);\n }\n }, 0);\n }\n if (returnFocusTo === 'auto' && autoTriggerRef.current) {\n const autoTrigger = autoTriggerRef.current;\n setTimeout(() => {\n if (focusMastersStackCount !== focusMastersStack.length || autoFocus === 'enforced') {\n setFocus(autoTrigger, trapNode);\n }\n }, 0);\n }\n }, [returnFocusTo]);\n React.useEffect(() => {\n if (typeof trapRef !== 'object' || trapRef === null) return;\n const node = trapRef.current;\n if (!node) return;\n focusLockAllTraps.add(node);\n return () => {\n if (!node) return;\n focusLockAllTraps.delete(node);\n };\n }, [disabled]);\n\n React.useEffect(() => {\n if (disabled) return;\n if (!canUseDOM()) return;\n if (!trapRef.current) return;\n const focusableChildren = Array.from(trapRef.current.children).flatMap((node) =>\n getFocusableIn(node as HTMLElement),\n );\n if (focusableChildren.length === 0 && autoFocus !== 'enforced') return;\n\n document.body.addEventListener('focusout', handleFocusOut as any);\n document.body.addEventListener(syntheticEvents.blur, handleFocusOut as any);\n document.body.addEventListener('mousedown', handleMouseEvent);\n document.body.addEventListener('touchstart', handleMouseEvent);\n document.body.addEventListener('keydown', handleKeyboardEvent);\n document.body.addEventListener(syntheticEvents.keydown, handleKeyboardEvent);\n\n if (autoFocus) {\n setTimeout(() => {\n if (autoFocus === 'enforced' && focusableChildren.length === 0 && focusMaster) {\n trapRef.current?.focus();\n return;\n }\n\n setFocus(\n trapRef.current!,\n typeof returnFocusTo === 'object' ? returnFocusTo?.current : document.body,\n );\n }, 0);\n }\n return () => {\n document.body.removeEventListener('focusout', handleFocusOut as any);\n document.body.removeEventListener(syntheticEvents.blur, handleFocusOut as any);\n document.body.removeEventListener('mousedown', handleMouseEvent);\n document.body.removeEventListener('touchstart', handleMouseEvent);\n document.body.removeEventListener('keydown', handleKeyboardEvent);\n document.body.removeEventListener(syntheticEvents.keydown, handleKeyboardEvent);\n returnFocus();\n autoTriggerRef.current = null;\n };\n }, [disabled, autoFocus, returnFocusTo, returnFocus]);\n\n React.useEffect(() => {\n if (typeof trapRef !== 'object' || trapRef === null) return;\n if (disabled) return;\n if (!canUseDOM()) return;\n if (!trapRef.current) return;\n const focusableChildren = Array.from(trapRef.current.children).flatMap((node) =>\n getFocusableIn(node as HTMLElement),\n );\n if (focusableChildren.length === 0) return;\n\n if (focusMaster) {\n focusMastersStack.push(trapRef.current);\n }\n\n return () => {\n if (!focusMaster) return;\n if (focusMastersStack[focusMastersStack.length - 1] === trapRef.current) {\n focusMastersStack.pop();\n } else {\n focusMastersStack.splice(focusMastersStack.indexOf(trapRef.current!), 1);\n }\n };\n }, [disabled, focusMaster]);\n\n useUniqueIdHookMock(React);\n React.useEffect(() => {\n const id = getUniqueId('focus-lock-consumer');\n if (disabled) return;\n focusLockUsedInMountedComponents.add(id);\n return () => {\n focusLockUsedInMountedComponents.delete(id);\n };\n }, [disabled]);\n};\nconst establishHookAsGlobal = () => {\n (globalThis as any)[globalFocusLockHookKey] = {\n hook: useFocusLockHook,\n version: focusLockVersion,\n usedInComponents: focusLockUsedInMountedComponents,\n };\n};\nif (!(globalThis as any)[globalFocusLockHookKey]) {\n establishHookAsGlobal();\n} else if (typeof (globalThis as any)[globalFocusLockHookKey].version !== 'number') {\n establishHookAsGlobal();\n} else {\n const { version: theirVersion, usedInComponents } = (globalThis as any)[globalFocusLockHookKey];\n if (focusLockVersion > theirVersion && usedInComponents.size === 0) {\n establishHookAsGlobal();\n }\n}\n\nexport const useFocusLock = (\n trapRef: React.RefObject<HTMLElement>,\n autoFocus: boolean | 'enforced',\n returnFocusTo: React.RefObject<HTMLElement> | null | 'auto',\n disabled = false,\n focusMaster = false,\n onFocusOut?: (event: Event) => void,\n) => {\n const hook = (globalThis as any)[globalFocusLockHookKey]?.hook ?? useFocusLockHook;\n return hook(LocalReact, trapRef, autoFocus, returnFocusTo, disabled, focusMaster, onFocusOut);\n};\n\nexport const hasFocusableIn = (element: HTMLElement): boolean => {\n return (\n Array.from(element.children).flatMap((node) => getFocusableIn(node as HTMLElement)).length > 0\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,56 +1,58 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.default = usePreventScroll;
7
+ exports["default"] = usePreventScroll;
8
8
  exports.getScrollbarWidth = getScrollbarWidth;
9
9
  var _react = _interopRequireDefault(require("react"));
10
10
  var _canUseDOM = _interopRequireDefault(require("../canUseDOM"));
11
11
  var _uniqueID = require("../uniqueID");
12
12
  function getScrollbarWidth() {
13
- if (!(0, _canUseDOM.default)()) return 0;
14
- const outer = document.createElement('div');
13
+ var _outer$parentNode;
14
+ if (!(0, _canUseDOM["default"])()) return 0;
15
+ var outer = document.createElement('div');
15
16
  outer.style.visibility = 'hidden';
16
17
  outer.style.width = '100px';
17
18
  // @ts-expect-error
18
19
  outer.style.msOverflowStyle = 'scrollbar'; // needed for WinJS apps
19
20
  document.body.appendChild(outer);
20
- const widthNoScroll = outer.offsetWidth;
21
+ var widthNoScroll = outer.offsetWidth;
21
22
  outer.style.overflow = 'scroll';
22
- const inner = document.createElement('div');
23
+ var inner = document.createElement('div');
23
24
  inner.style.width = '100%';
24
25
  outer.appendChild(inner);
25
- const widthWithScroll = inner.offsetWidth;
26
- outer.parentNode?.removeChild(outer);
26
+ var widthWithScroll = inner.offsetWidth;
27
+ (_outer$parentNode = outer.parentNode) === null || _outer$parentNode === void 0 || _outer$parentNode.removeChild(outer);
27
28
  return widthNoScroll - widthWithScroll;
28
29
  }
29
30
  function getIntValueFromCss(value) {
30
31
  return !Number.isNaN(Number(value)) ? Number(value) : Number.parseInt(value, 10);
31
32
  }
32
- const scrollPreventers = new Set();
33
- const lockedBodyStyles = {
33
+ var scrollPreventers = new Set();
34
+ var lockedBodyStyles = {
34
35
  paddingRight: '',
35
36
  overflow: '',
36
37
  boxSizing: ''
37
38
  };
38
- function usePreventScroll(visible = true, disabled = false) {
39
- const scrollbarWidth = _react.default.useMemo(getScrollbarWidth, [getScrollbarWidth]);
40
- const id = (0, _uniqueID.useUID)('scroll-preventer-');
41
- _react.default.useEffect(() => {
39
+ function usePreventScroll() {
40
+ var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
41
+ var disabled = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
42
+ var scrollbarWidth = _react["default"].useMemo(getScrollbarWidth, [getScrollbarWidth]);
43
+ var id = (0, _uniqueID.useUID)('scroll-preventer-');
44
+ _react["default"].useEffect(function () {
42
45
  if (disabled) return;
43
- if (!(0, _canUseDOM.default)() || !visible) return;
46
+ if (!(0, _canUseDOM["default"])() || !visible) return;
44
47
  scrollPreventers.add(id);
45
48
  if (scrollPreventers.size > 1) return;
46
- const {
47
- paddingRight
48
- } = window.getComputedStyle(document.body);
49
+ var _window$getComputedSt = window.getComputedStyle(document.body),
50
+ paddingRight = _window$getComputedSt.paddingRight;
49
51
  lockedBodyStyles.paddingRight = document.body.style.paddingRight;
50
52
  lockedBodyStyles.overflow = document.body.style.overflow;
51
53
  lockedBodyStyles.boxSizing = document.body.style.boxSizing;
52
- const intPaddingRight = getIntValueFromCss(paddingRight);
53
- let intPaddingRightFromStyle = getIntValueFromCss(document.body.style.paddingRight);
54
+ var intPaddingRight = getIntValueFromCss(paddingRight);
55
+ var intPaddingRightFromStyle = getIntValueFromCss(document.body.style.paddingRight);
54
56
  // Detected own style for window inside window
55
57
  if (intPaddingRightFromStyle !== scrollbarWidth) {
56
58
  intPaddingRightFromStyle = 0;
@@ -59,11 +61,11 @@ function usePreventScroll(visible = true, disabled = false) {
59
61
  document.body.style.paddingRight = scrollbarWidth + (intPaddingRight - intPaddingRightFromStyle) + 'px';
60
62
  document.body.style.boxSizing = 'border-box';
61
63
  }, [visible, id, disabled]);
62
- _react.default.useEffect(() => {
64
+ _react["default"].useEffect(function () {
63
65
  if (disabled) return;
64
- if (!(0, _canUseDOM.default)() || !visible) return;
65
- return () => {
66
- scrollPreventers.delete(id);
66
+ if (!(0, _canUseDOM["default"])() || !visible) return;
67
+ return function () {
68
+ scrollPreventers["delete"](id);
67
69
  if (scrollPreventers.size !== 0) return;
68
70
  document.body.style.overflow = lockedBodyStyles.overflow;
69
71
  document.body.style.paddingRight = lockedBodyStyles.paddingRight;
@@ -1 +1 @@
1
- {"version":3,"file":"usePreventScroll.js","names":["_react","_interopRequireDefault","require","_canUseDOM","_uniqueID","getScrollbarWidth","canUseDOM","outer","document","createElement","style","visibility","width","msOverflowStyle","body","appendChild","widthNoScroll","offsetWidth","overflow","inner","widthWithScroll","parentNode","removeChild","getIntValueFromCss","value","Number","isNaN","parseInt","scrollPreventers","Set","lockedBodyStyles","paddingRight","boxSizing","usePreventScroll","visible","disabled","scrollbarWidth","React","useMemo","id","useUID","useEffect","add","size","window","getComputedStyle","intPaddingRight","intPaddingRightFromStyle","delete"],"sources":["../../../src/utils/use/usePreventScroll.tsx"],"sourcesContent":["import React from 'react';\n\nimport canUseDOM from '../canUseDOM';\nimport { useUID } from '../uniqueID';\n\nexport function getScrollbarWidth(): number {\n if (!canUseDOM()) return 0;\n const outer = document.createElement('div');\n outer.style.visibility = 'hidden';\n outer.style.width = '100px';\n // @ts-expect-error\n outer.style.msOverflowStyle = 'scrollbar'; // needed for WinJS apps\n document.body.appendChild(outer);\n\n const widthNoScroll = outer.offsetWidth;\n outer.style.overflow = 'scroll';\n\n const inner = document.createElement('div');\n inner.style.width = '100%';\n outer.appendChild(inner);\n\n const widthWithScroll = inner.offsetWidth;\n\n outer.parentNode?.removeChild(outer);\n\n return widthNoScroll - widthWithScroll;\n}\n\nfunction getIntValueFromCss(value: any) {\n return !Number.isNaN(Number(value)) ? Number(value) : Number.parseInt(value, 10);\n}\n\nconst scrollPreventers = new Set<string>();\nconst lockedBodyStyles = {\n paddingRight: '',\n overflow: '',\n boxSizing: '',\n};\nexport default function usePreventScroll(visible = true, disabled = false) {\n const scrollbarWidth = React.useMemo(getScrollbarWidth, [getScrollbarWidth]);\n const id = useUID('scroll-preventer-');\n\n React.useEffect(() => {\n if (disabled) return;\n if (!canUseDOM() || !visible) return;\n scrollPreventers.add(id);\n if (scrollPreventers.size > 1) return;\n\n const { paddingRight } = window.getComputedStyle(document.body);\n\n lockedBodyStyles.paddingRight = document.body.style.paddingRight;\n lockedBodyStyles.overflow = document.body.style.overflow;\n lockedBodyStyles.boxSizing = document.body.style.boxSizing;\n\n const intPaddingRight = getIntValueFromCss(paddingRight);\n let intPaddingRightFromStyle = getIntValueFromCss(document.body.style.paddingRight);\n // Detected own style for window inside window\n if (intPaddingRightFromStyle !== scrollbarWidth) {\n intPaddingRightFromStyle = 0;\n }\n\n document.body.style.overflow = 'hidden';\n document.body.style.paddingRight =\n scrollbarWidth + (intPaddingRight - intPaddingRightFromStyle) + 'px';\n document.body.style.boxSizing = 'border-box';\n }, [visible, id, disabled]);\n\n React.useEffect(() => {\n if (disabled) return;\n if (!canUseDOM() || !visible) return;\n return () => {\n scrollPreventers.delete(id);\n if (scrollPreventers.size !== 0) return;\n document.body.style.overflow = lockedBodyStyles.overflow;\n document.body.style.paddingRight = lockedBodyStyles.paddingRight;\n document.body.style.boxSizing = lockedBodyStyles.boxSizing;\n };\n }, [visible, id, disabled]);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"usePreventScroll.js","names":["_react","_interopRequireDefault","require","_canUseDOM","_uniqueID","getScrollbarWidth","_outer$parentNode","canUseDOM","outer","document","createElement","style","visibility","width","msOverflowStyle","body","appendChild","widthNoScroll","offsetWidth","overflow","inner","widthWithScroll","parentNode","removeChild","getIntValueFromCss","value","Number","isNaN","parseInt","scrollPreventers","Set","lockedBodyStyles","paddingRight","boxSizing","usePreventScroll","visible","arguments","length","undefined","disabled","scrollbarWidth","React","useMemo","id","useUID","useEffect","add","size","_window$getComputedSt","window","getComputedStyle","intPaddingRight","intPaddingRightFromStyle"],"sources":["../../../src/utils/use/usePreventScroll.tsx"],"sourcesContent":["import React from 'react';\n\nimport canUseDOM from '../canUseDOM';\nimport { useUID } from '../uniqueID';\n\nexport function getScrollbarWidth(): number {\n if (!canUseDOM()) return 0;\n const outer = document.createElement('div');\n outer.style.visibility = 'hidden';\n outer.style.width = '100px';\n // @ts-expect-error\n outer.style.msOverflowStyle = 'scrollbar'; // needed for WinJS apps\n document.body.appendChild(outer);\n\n const widthNoScroll = outer.offsetWidth;\n outer.style.overflow = 'scroll';\n\n const inner = document.createElement('div');\n inner.style.width = '100%';\n outer.appendChild(inner);\n\n const widthWithScroll = inner.offsetWidth;\n\n outer.parentNode?.removeChild(outer);\n\n return widthNoScroll - widthWithScroll;\n}\n\nfunction getIntValueFromCss(value: any) {\n return !Number.isNaN(Number(value)) ? Number(value) : Number.parseInt(value, 10);\n}\n\nconst scrollPreventers = new Set<string>();\nconst lockedBodyStyles = {\n paddingRight: '',\n overflow: '',\n boxSizing: '',\n};\nexport default function usePreventScroll(visible = true, disabled = false) {\n const scrollbarWidth = React.useMemo(getScrollbarWidth, [getScrollbarWidth]);\n const id = useUID('scroll-preventer-');\n\n React.useEffect(() => {\n if (disabled) return;\n if (!canUseDOM() || !visible) return;\n scrollPreventers.add(id);\n if (scrollPreventers.size > 1) return;\n\n const { paddingRight } = window.getComputedStyle(document.body);\n\n lockedBodyStyles.paddingRight = document.body.style.paddingRight;\n lockedBodyStyles.overflow = document.body.style.overflow;\n lockedBodyStyles.boxSizing = document.body.style.boxSizing;\n\n const intPaddingRight = getIntValueFromCss(paddingRight);\n let intPaddingRightFromStyle = getIntValueFromCss(document.body.style.paddingRight);\n // Detected own style for window inside window\n if (intPaddingRightFromStyle !== scrollbarWidth) {\n intPaddingRightFromStyle = 0;\n }\n\n document.body.style.overflow = 'hidden';\n document.body.style.paddingRight =\n scrollbarWidth + (intPaddingRight - intPaddingRightFromStyle) + 'px';\n document.body.style.boxSizing = 'border-box';\n }, [visible, id, disabled]);\n\n React.useEffect(() => {\n if (disabled) return;\n if (!canUseDOM() || !visible) return;\n return () => {\n scrollPreventers.delete(id);\n if (scrollPreventers.size !== 0) return;\n document.body.style.overflow = lockedBodyStyles.overflow;\n document.body.style.paddingRight = lockedBodyStyles.paddingRight;\n document.body.style.boxSizing = lockedBodyStyles.boxSizing;\n };\n }, [visible, id, disabled]);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -2,47 +2,49 @@ import React from 'react';
2
2
  import canUseDOM from "../canUseDOM.mjs";
3
3
  import { useUID } from "../uniqueID.mjs";
4
4
  export function getScrollbarWidth() {
5
+ var _outer$parentNode;
5
6
  if (!canUseDOM()) return 0;
6
- const outer = document.createElement('div');
7
+ var outer = document.createElement('div');
7
8
  outer.style.visibility = 'hidden';
8
9
  outer.style.width = '100px';
9
10
  // @ts-expect-error
10
11
  outer.style.msOverflowStyle = 'scrollbar'; // needed for WinJS apps
11
12
  document.body.appendChild(outer);
12
- const widthNoScroll = outer.offsetWidth;
13
+ var widthNoScroll = outer.offsetWidth;
13
14
  outer.style.overflow = 'scroll';
14
- const inner = document.createElement('div');
15
+ var inner = document.createElement('div');
15
16
  inner.style.width = '100%';
16
17
  outer.appendChild(inner);
17
- const widthWithScroll = inner.offsetWidth;
18
- outer.parentNode?.removeChild(outer);
18
+ var widthWithScroll = inner.offsetWidth;
19
+ (_outer$parentNode = outer.parentNode) === null || _outer$parentNode === void 0 || _outer$parentNode.removeChild(outer);
19
20
  return widthNoScroll - widthWithScroll;
20
21
  }
21
22
  function getIntValueFromCss(value) {
22
23
  return !Number.isNaN(Number(value)) ? Number(value) : Number.parseInt(value, 10);
23
24
  }
24
- const scrollPreventers = new Set();
25
- const lockedBodyStyles = {
25
+ var scrollPreventers = new Set();
26
+ var lockedBodyStyles = {
26
27
  paddingRight: '',
27
28
  overflow: '',
28
29
  boxSizing: ''
29
30
  };
30
- export default function usePreventScroll(visible = true, disabled = false) {
31
- const scrollbarWidth = React.useMemo(getScrollbarWidth, [getScrollbarWidth]);
32
- const id = useUID('scroll-preventer-');
33
- React.useEffect(() => {
31
+ export default function usePreventScroll() {
32
+ var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
33
+ var disabled = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
34
+ var scrollbarWidth = React.useMemo(getScrollbarWidth, [getScrollbarWidth]);
35
+ var id = useUID('scroll-preventer-');
36
+ React.useEffect(function () {
34
37
  if (disabled) return;
35
38
  if (!canUseDOM() || !visible) return;
36
39
  scrollPreventers.add(id);
37
40
  if (scrollPreventers.size > 1) return;
38
- const {
39
- paddingRight
40
- } = window.getComputedStyle(document.body);
41
+ var _window$getComputedSt = window.getComputedStyle(document.body),
42
+ paddingRight = _window$getComputedSt.paddingRight;
41
43
  lockedBodyStyles.paddingRight = document.body.style.paddingRight;
42
44
  lockedBodyStyles.overflow = document.body.style.overflow;
43
45
  lockedBodyStyles.boxSizing = document.body.style.boxSizing;
44
- const intPaddingRight = getIntValueFromCss(paddingRight);
45
- let intPaddingRightFromStyle = getIntValueFromCss(document.body.style.paddingRight);
46
+ var intPaddingRight = getIntValueFromCss(paddingRight);
47
+ var intPaddingRightFromStyle = getIntValueFromCss(document.body.style.paddingRight);
46
48
  // Detected own style for window inside window
47
49
  if (intPaddingRightFromStyle !== scrollbarWidth) {
48
50
  intPaddingRightFromStyle = 0;
@@ -51,11 +53,11 @@ export default function usePreventScroll(visible = true, disabled = false) {
51
53
  document.body.style.paddingRight = scrollbarWidth + (intPaddingRight - intPaddingRightFromStyle) + 'px';
52
54
  document.body.style.boxSizing = 'border-box';
53
55
  }, [visible, id, disabled]);
54
- React.useEffect(() => {
56
+ React.useEffect(function () {
55
57
  if (disabled) return;
56
58
  if (!canUseDOM() || !visible) return;
57
- return () => {
58
- scrollPreventers.delete(id);
59
+ return function () {
60
+ scrollPreventers["delete"](id);
59
61
  if (scrollPreventers.size !== 0) return;
60
62
  document.body.style.overflow = lockedBodyStyles.overflow;
61
63
  document.body.style.paddingRight = lockedBodyStyles.paddingRight;