@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,18 +1,22 @@
1
1
  import React from 'react';
2
2
  import canUseDOM from "../canUseDOM.mjs";
3
3
  import { getRef } from "../ref.mjs";
4
- const useEventListener = (elementOrRef, eventName, handler, options = undefined) => {
5
- const savedHandler = React.useRef();
6
- React.useEffect(() => {
4
+ var useEventListener = function useEventListener(elementOrRef, eventName, handler) {
5
+ var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : undefined;
6
+ var savedHandler = React.useRef();
7
+ React.useEffect(function () {
7
8
  savedHandler.current = handler;
8
9
  }, [handler]);
9
- React.useEffect(() => {
10
+ React.useEffect(function () {
10
11
  if (!canUseDOM()) return;
11
- const eventListener = event => savedHandler.current?.(event);
12
- const node = getRef(elementOrRef);
12
+ var eventListener = function eventListener(event) {
13
+ var _savedHandler$current;
14
+ return (_savedHandler$current = savedHandler.current) === null || _savedHandler$current === void 0 ? void 0 : _savedHandler$current.call(savedHandler, event);
15
+ };
16
+ var node = getRef(elementOrRef);
13
17
  if (!(node instanceof Element)) return;
14
18
  node.addEventListener(eventName, eventListener, options);
15
- return () => {
19
+ return function () {
16
20
  node.removeEventListener(eventName, eventListener, options);
17
21
  };
18
22
  }, [eventName, elementOrRef]);
@@ -1 +1 @@
1
- {"version":3,"file":"useEventListener.mjs","names":["React","canUseDOM","getRef","useEventListener","elementOrRef","eventName","handler","options","undefined","savedHandler","useRef","useEffect","current","eventListener","event","node","Element","addEventListener","removeEventListener"],"sources":["../../../src/utils/use/useEventListener.ts"],"sourcesContent":["import React from 'react';\n\nimport canUseDOM from '../canUseDOM';\nimport { getRef } from '../ref';\n\nconst useEventListener = (\n elementOrRef: any,\n eventName: any,\n handler: any,\n options: any = undefined,\n) => {\n const savedHandler = React.useRef<(event: any) => {}>();\n\n React.useEffect(() => {\n savedHandler.current = handler;\n }, [handler]);\n\n React.useEffect(() => {\n if (!canUseDOM()) return;\n\n const eventListener = (event: any) => savedHandler.current?.(event);\n const node = getRef(elementOrRef);\n if (!(node instanceof Element)) return;\n node.addEventListener(eventName, eventListener, options);\n return () => {\n node.removeEventListener(eventName, eventListener, options);\n };\n }, [eventName, elementOrRef]);\n};\n\nexport default useEventListener;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,OAAOC,SAAS,MAAM,kBAAc;AACpC,SAASC,MAAM,QAAQ,YAAQ;AAE/B,MAAMC,gBAAgB,GAAGA,CACvBC,YAAiB,EACjBC,SAAc,EACdC,OAAY,EACZC,OAAY,GAAGC,SAAS,KACrB;EACH,MAAMC,YAAY,GAAGT,KAAK,CAACU,MAAM,CAAqB,CAAC;EAEvDV,KAAK,CAACW,SAAS,CAAC,MAAM;IACpBF,YAAY,CAACG,OAAO,GAAGN,OAAO;EAChC,CAAC,EAAE,CAACA,OAAO,CAAC,CAAC;EAEbN,KAAK,CAACW,SAAS,CAAC,MAAM;IACpB,IAAI,CAACV,SAAS,CAAC,CAAC,EAAE;IAElB,MAAMY,aAAa,GAAIC,KAAU,IAAKL,YAAY,CAACG,OAAO,GAAGE,KAAK,CAAC;IACnE,MAAMC,IAAI,GAAGb,MAAM,CAACE,YAAY,CAAC;IACjC,IAAI,EAAEW,IAAI,YAAYC,OAAO,CAAC,EAAE;IAChCD,IAAI,CAACE,gBAAgB,CAACZ,SAAS,EAAEQ,aAAa,EAAEN,OAAO,CAAC;IACxD,OAAO,MAAM;MACXQ,IAAI,CAACG,mBAAmB,CAACb,SAAS,EAAEQ,aAAa,EAAEN,OAAO,CAAC;IAC7D,CAAC;EACH,CAAC,EAAE,CAACF,SAAS,EAAED,YAAY,CAAC,CAAC;AAC/B,CAAC;AAED,eAAeD,gBAAgB","ignoreList":[]}
1
+ {"version":3,"file":"useEventListener.mjs","names":["React","canUseDOM","getRef","useEventListener","elementOrRef","eventName","handler","options","arguments","length","undefined","savedHandler","useRef","useEffect","current","eventListener","event","_savedHandler$current","call","node","Element","addEventListener","removeEventListener"],"sources":["../../../src/utils/use/useEventListener.ts"],"sourcesContent":["import React from 'react';\n\nimport canUseDOM from '../canUseDOM';\nimport { getRef } from '../ref';\n\nconst useEventListener = (\n elementOrRef: any,\n eventName: any,\n handler: any,\n options: any = undefined,\n) => {\n const savedHandler = React.useRef<(event: any) => {}>();\n\n React.useEffect(() => {\n savedHandler.current = handler;\n }, [handler]);\n\n React.useEffect(() => {\n if (!canUseDOM()) return;\n\n const eventListener = (event: any) => savedHandler.current?.(event);\n const node = getRef(elementOrRef);\n if (!(node instanceof Element)) return;\n node.addEventListener(eventName, eventListener, options);\n return () => {\n node.removeEventListener(eventName, eventListener, options);\n };\n }, [eventName, elementOrRef]);\n};\n\nexport default useEventListener;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,OAAOC,SAAS,MAAM,kBAAc;AACpC,SAASC,MAAM,QAAQ,YAAQ;AAE/B,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAgBA,CACpBC,YAAiB,EACjBC,SAAc,EACdC,OAAY,EAET;EAAA,IADHC,OAAY,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGE,SAAS;EAExB,IAAMC,YAAY,GAAGX,KAAK,CAACY,MAAM,CAAqB,CAAC;EAEvDZ,KAAK,CAACa,SAAS,CAAC,YAAM;IACpBF,YAAY,CAACG,OAAO,GAAGR,OAAO;EAChC,CAAC,EAAE,CAACA,OAAO,CAAC,CAAC;EAEbN,KAAK,CAACa,SAAS,CAAC,YAAM;IACpB,IAAI,CAACZ,SAAS,CAAC,CAAC,EAAE;IAElB,IAAMc,aAAa,GAAG,SAAhBA,aAAaA,CAAIC,KAAU;MAAA,IAAAC,qBAAA;MAAA,QAAAA,qBAAA,GAAKN,YAAY,CAACG,OAAO,cAAAG,qBAAA,uBAApBA,qBAAA,CAAAC,IAAA,CAAAP,YAAY,EAAWK,KAAK,CAAC;IAAA;IACnE,IAAMG,IAAI,GAAGjB,MAAM,CAACE,YAAY,CAAC;IACjC,IAAI,EAAEe,IAAI,YAAYC,OAAO,CAAC,EAAE;IAChCD,IAAI,CAACE,gBAAgB,CAAChB,SAAS,EAAEU,aAAa,EAAER,OAAO,CAAC;IACxD,OAAO,YAAM;MACXY,IAAI,CAACG,mBAAmB,CAACjB,SAAS,EAAEU,aAAa,EAAER,OAAO,CAAC;IAC7D,CAAC;EACH,CAAC,EAAE,CAACF,SAAS,EAAED,YAAY,CAAC,CAAC;AAC/B,CAAC;AAED,eAAeD,gBAAgB","ignoreList":[]}
@@ -1,24 +1,26 @@
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
7
  exports.hasFocusableIn = void 0;
8
8
  Object.defineProperty(exports, "isFocusInside", {
9
9
  enumerable: true,
10
- get: function () {
10
+ get: function get() {
11
11
  return _isFocusInside.isFocusInside;
12
12
  }
13
13
  });
14
14
  exports.makeFocusLockSyntheticEvent = void 0;
15
15
  Object.defineProperty(exports, "setFocus", {
16
16
  enumerable: true,
17
- get: function () {
17
+ get: function get() {
18
18
  return _setFocus.setFocus;
19
19
  }
20
20
  });
21
21
  exports.useFocusLock = void 0;
22
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
23
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
22
24
  var _react = _interopRequireDefault(require("react"));
23
25
  var _canUseDOM = _interopRequireDefault(require("../canUseDOM"));
24
26
  var _focusBorders = require("../focus-lock/focusBorders");
@@ -26,7 +28,7 @@ var _getFocusableIn = require("../focus-lock/getFocusableIn");
26
28
  var _isFocusInside = require("../focus-lock/isFocusInside");
27
29
  var _setFocus = require("../focus-lock/setFocus");
28
30
  var _hasParent = require("../hasParent");
29
- const syntheticEvents = {
31
+ var syntheticEvents = {
30
32
  blur: 'focusout-intergalactic-focus-lock-synthetic',
31
33
  keydown: 'keydown-intergalactic-focus-lock-synthetic'
32
34
  };
@@ -34,14 +36,14 @@ const syntheticEvents = {
34
36
  * Synthetic event are special events that always bypass all propagation guards and reaches focus lock event listeners.
35
37
  * You should always prevent native event propagation in order to prevent focus enforcing double calls.
36
38
  */
37
- const makeFocusLockSyntheticEvent = baseEvent => {
38
- const event = baseEvent;
39
- const type = event.type;
39
+ var makeFocusLockSyntheticEvent = exports.makeFocusLockSyntheticEvent = function makeFocusLockSyntheticEvent(baseEvent) {
40
+ var event = baseEvent;
41
+ var type = event.type;
40
42
  if (!(type in syntheticEvents)) {
41
- const supported = Object.keys(syntheticEvents).join(', ');
42
- throw new Error(`Unable to make synthetic event for ${type}, ${supported} are supported`);
43
+ var supported = Object.keys(syntheticEvents).join(', ');
44
+ throw new Error("Unable to make synthetic event for ".concat(type, ", ").concat(supported, " are supported"));
43
45
  }
44
- const syntheticEvent = new Event(syntheticEvents[type], {
46
+ var syntheticEvent = new Event(syntheticEvents[type], {
45
47
  bubbles: true
46
48
  });
47
49
  Object.defineProperty(syntheticEvent, 'target', {
@@ -54,23 +56,24 @@ const makeFocusLockSyntheticEvent = baseEvent => {
54
56
  });
55
57
  return syntheticEvent;
56
58
  };
57
- exports.makeFocusLockSyntheticEvent = makeFocusLockSyntheticEvent;
58
- const useFocusBorders = (React, disabled, trapRef) => {
59
+ var useFocusBorders = function useFocusBorders(React, disabled, trapRef) {
59
60
  useUniqueIdHookMock(React);
60
- React.useEffect(() => {
61
- const trapNode = trapRef?.current;
61
+ React.useEffect(function () {
62
+ var trapNode = trapRef === null || trapRef === void 0 ? void 0 : trapRef.current;
62
63
  if (trapNode && !disabled && (0, _getFocusableIn.getFocusableIn)(trapNode).length > 0) {
63
64
  (0, _focusBorders.addFocusBorders)(trapNode);
64
65
  }
65
- return () => {
66
+ return function () {
66
67
  if (trapNode) {
67
68
  (0, _focusBorders.removeFocusBorders)(trapNode);
68
69
  }
69
70
  };
70
71
  }, [disabled]);
71
72
  };
72
- let uniqueId = 0;
73
- const getUniqueId = prefix => `${prefix}-${Math.random().toString(36).slice(2)}-${uniqueId++}`;
73
+ var uniqueId = 0;
74
+ var getUniqueId = function getUniqueId(prefix) {
75
+ return "".concat(prefix, "-").concat(Math.random().toString(36).slice(2), "-").concat(uniqueId++);
76
+ };
74
77
 
75
78
  /**
76
79
  * # Focus lock hook merging
@@ -103,10 +106,10 @@ const getUniqueId = prefix => `${prefix}-${Math.random().toString(36).slice(2)}-
103
106
  * If new update requires to remove some hooks – add mocks instead of them.
104
107
  * 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.
105
108
  */
106
- const focusLockVersion = 5;
107
- const globalFocusLockHookKey = '__intergalactic_focus_lock_hook_react_v_respectful';
108
- const focusLockAllTraps = new Set();
109
- const focusLockUsedInMountedComponents = new Set();
109
+ var focusLockVersion = 5;
110
+ var globalFocusLockHookKey = '__intergalactic_focus_lock_hook_react_v_respectful';
111
+ var focusLockAllTraps = new Set();
112
+ var focusLockUsedInMountedComponents = new Set();
110
113
  /** Focus master is a special mode in which focus lock might work.
111
114
  * Normally, focus lock hook allows user focus to move freely between
112
115
  * all active focus traps. When component provides `focusMaster=true`
@@ -115,81 +118,86 @@ const focusLockUsedInMountedComponents = new Set();
115
118
  * also have some visual backdrop.
116
119
  * The last element in focus masters stack is considered as a current focus master.
117
120
  */
118
- const focusMastersStack = [];
119
- const noop = () => {};
120
- const useUniqueIdHookMock = React => {
121
+ var focusMastersStack = [];
122
+ var noop = function noop() {};
123
+ var useUniqueIdHookMock = function useUniqueIdHookMock(React) {
121
124
  React.useState(undefined);
122
- const useEnhancedEffect = (0, _canUseDOM.default)() ? React.useLayoutEffect : React.useEffect;
125
+ var useEnhancedEffect = (0, _canUseDOM["default"])() ? React.useLayoutEffect : React.useEffect;
123
126
  useEnhancedEffect(noop, []);
124
127
  };
125
- const useFocusLockHook = (React, trapRef, autoFocus, returnFocusTo, disabled = false, focusMaster = false, onFocusOut) => {
128
+ var useFocusLockHook = function useFocusLockHook(React, trapRef, autoFocus, returnFocusTo) {
129
+ var disabled = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
130
+ var focusMaster = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;
131
+ var onFocusOut = arguments.length > 6 ? arguments[6] : undefined;
126
132
  useFocusBorders(React, disabled, trapRef);
127
- const autoTriggerRef = React.useRef(null);
128
- const lastUserInteractionRef = React.useRef(undefined);
129
- const handleFocusOut = React.useCallback(event => {
130
- const focusCameFrom = event.target;
131
- const focusMovedTo = event.relatedTarget;
132
- setTimeout(() => {
133
+ var autoTriggerRef = React.useRef(null);
134
+ var lastUserInteractionRef = React.useRef(undefined);
135
+ var handleFocusOut = React.useCallback(function (event) {
136
+ var focusCameFrom = event.target;
137
+ var focusMovedTo = event.relatedTarget;
138
+ setTimeout(function () {
133
139
  if (!focusCameFrom) return;
134
140
  if (autoTriggerRef.current) return;
135
141
  autoTriggerRef.current = focusCameFrom;
136
142
  }, 0);
137
143
  if (lastUserInteractionRef.current === 'mouse') return;
138
- Promise.resolve().then(() => {
144
+ Promise.resolve().then(function () {
139
145
  if (!trapRef.current) return;
140
- const currentFocusMaster = focusMastersStack[focusMastersStack.length - 1];
146
+ var currentFocusMaster = focusMastersStack[focusMastersStack.length - 1];
141
147
  if (currentFocusMaster && currentFocusMaster !== trapRef.current) return;
142
- const trapNodes = currentFocusMaster ? [trapRef.current] : [trapRef.current, ...focusLockAllTraps];
148
+ var trapNodes = currentFocusMaster ? [trapRef.current] : [trapRef.current].concat((0, _toConsumableArray2["default"])(focusLockAllTraps));
143
149
  if ((0, _isFocusInside.isFocusInside)(trapNodes, focusMovedTo)) return;
144
- if (typeof returnFocusTo === 'object' && returnFocusTo?.current && (0, _hasParent.hasParent)(focusMovedTo, returnFocusTo.current)) return;
150
+ if ((0, _typeof2["default"])(returnFocusTo) === 'object' && returnFocusTo !== null && returnFocusTo !== void 0 && returnFocusTo.current && (0, _hasParent.hasParent)(focusMovedTo, returnFocusTo.current)) return;
145
151
  if (focusCameFrom && focusMovedTo) {
146
152
  (0, _setFocus.setFocus)(trapRef.current, focusCameFrom, focusMovedTo);
147
153
  }
148
- onFocusOut?.(event);
154
+ onFocusOut === null || onFocusOut === void 0 || onFocusOut(event);
149
155
  });
150
156
  }, [onFocusOut]);
151
- const handleMouseEvent = React.useCallback(() => {
157
+ var handleMouseEvent = React.useCallback(function () {
152
158
  lastUserInteractionRef.current = 'mouse';
153
159
  }, []);
154
- const handleKeyboardEvent = React.useCallback(() => {
160
+ var handleKeyboardEvent = React.useCallback(function () {
155
161
  lastUserInteractionRef.current = 'keyboard';
156
162
  }, []);
157
- const returnFocus = React.useCallback(() => {
158
- const trapNode = trapRef.current;
163
+ var returnFocus = React.useCallback(function () {
164
+ var trapNode = trapRef.current;
159
165
  if (trapNode && !(0, _isFocusInside.isFocusInside)(trapNode)) return;
160
- const focusMastersStackCount = focusMastersStack.length;
161
- if (typeof returnFocusTo === 'object' && returnFocusTo?.current) {
162
- const returnFocusNode = returnFocusTo?.current;
163
- setTimeout(() => {
166
+ var focusMastersStackCount = focusMastersStack.length;
167
+ if ((0, _typeof2["default"])(returnFocusTo) === 'object' && returnFocusTo !== null && returnFocusTo !== void 0 && returnFocusTo.current) {
168
+ var returnFocusNode = returnFocusTo === null || returnFocusTo === void 0 ? void 0 : returnFocusTo.current;
169
+ setTimeout(function () {
164
170
  if (focusMastersStackCount !== focusMastersStack.length) {
165
171
  (0, _setFocus.setFocus)(returnFocusNode, trapNode);
166
172
  }
167
173
  }, 0);
168
174
  }
169
175
  if (returnFocusTo === 'auto' && autoTriggerRef.current) {
170
- const autoTrigger = autoTriggerRef.current;
171
- setTimeout(() => {
176
+ var autoTrigger = autoTriggerRef.current;
177
+ setTimeout(function () {
172
178
  if (focusMastersStackCount !== focusMastersStack.length || autoFocus === 'enforced') {
173
179
  (0, _setFocus.setFocus)(autoTrigger, trapNode);
174
180
  }
175
181
  }, 0);
176
182
  }
177
183
  }, [returnFocusTo]);
178
- React.useEffect(() => {
179
- if (typeof trapRef !== 'object' || trapRef === null) return;
180
- const node = trapRef.current;
184
+ React.useEffect(function () {
185
+ if ((0, _typeof2["default"])(trapRef) !== 'object' || trapRef === null) return;
186
+ var node = trapRef.current;
181
187
  if (!node) return;
182
188
  focusLockAllTraps.add(node);
183
- return () => {
189
+ return function () {
184
190
  if (!node) return;
185
- focusLockAllTraps.delete(node);
191
+ focusLockAllTraps["delete"](node);
186
192
  };
187
193
  }, [disabled]);
188
- React.useEffect(() => {
194
+ React.useEffect(function () {
189
195
  if (disabled) return;
190
- if (!(0, _canUseDOM.default)()) return;
196
+ if (!(0, _canUseDOM["default"])()) return;
191
197
  if (!trapRef.current) return;
192
- const focusableChildren = Array.from(trapRef.current.children).flatMap(node => (0, _getFocusableIn.getFocusableIn)(node));
198
+ var focusableChildren = Array.from(trapRef.current.children).flatMap(function (node) {
199
+ return (0, _getFocusableIn.getFocusableIn)(node);
200
+ });
193
201
  if (focusableChildren.length === 0 && autoFocus !== 'enforced') return;
194
202
  document.body.addEventListener('focusout', handleFocusOut);
195
203
  document.body.addEventListener(syntheticEvents.blur, handleFocusOut);
@@ -198,15 +206,16 @@ const useFocusLockHook = (React, trapRef, autoFocus, returnFocusTo, disabled = f
198
206
  document.body.addEventListener('keydown', handleKeyboardEvent);
199
207
  document.body.addEventListener(syntheticEvents.keydown, handleKeyboardEvent);
200
208
  if (autoFocus) {
201
- setTimeout(() => {
209
+ setTimeout(function () {
202
210
  if (autoFocus === 'enforced' && focusableChildren.length === 0 && focusMaster) {
203
- trapRef.current?.focus();
211
+ var _trapRef$current;
212
+ (_trapRef$current = trapRef.current) === null || _trapRef$current === void 0 || _trapRef$current.focus();
204
213
  return;
205
214
  }
206
- (0, _setFocus.setFocus)(trapRef.current, typeof returnFocusTo === 'object' ? returnFocusTo?.current : document.body);
215
+ (0, _setFocus.setFocus)(trapRef.current, (0, _typeof2["default"])(returnFocusTo) === 'object' ? returnFocusTo === null || returnFocusTo === void 0 ? void 0 : returnFocusTo.current : document.body);
207
216
  }, 0);
208
217
  }
209
- return () => {
218
+ return function () {
210
219
  document.body.removeEventListener('focusout', handleFocusOut);
211
220
  document.body.removeEventListener(syntheticEvents.blur, handleFocusOut);
212
221
  document.body.removeEventListener('mousedown', handleMouseEvent);
@@ -217,17 +226,19 @@ const useFocusLockHook = (React, trapRef, autoFocus, returnFocusTo, disabled = f
217
226
  autoTriggerRef.current = null;
218
227
  };
219
228
  }, [disabled, autoFocus, returnFocusTo, returnFocus]);
220
- React.useEffect(() => {
221
- if (typeof trapRef !== 'object' || trapRef === null) return;
229
+ React.useEffect(function () {
230
+ if ((0, _typeof2["default"])(trapRef) !== 'object' || trapRef === null) return;
222
231
  if (disabled) return;
223
- if (!(0, _canUseDOM.default)()) return;
232
+ if (!(0, _canUseDOM["default"])()) return;
224
233
  if (!trapRef.current) return;
225
- const focusableChildren = Array.from(trapRef.current.children).flatMap(node => (0, _getFocusableIn.getFocusableIn)(node));
234
+ var focusableChildren = Array.from(trapRef.current.children).flatMap(function (node) {
235
+ return (0, _getFocusableIn.getFocusableIn)(node);
236
+ });
226
237
  if (focusableChildren.length === 0) return;
227
238
  if (focusMaster) {
228
239
  focusMastersStack.push(trapRef.current);
229
240
  }
230
- return () => {
241
+ return function () {
231
242
  if (!focusMaster) return;
232
243
  if (focusMastersStack[focusMastersStack.length - 1] === trapRef.current) {
233
244
  focusMastersStack.pop();
@@ -237,16 +248,16 @@ const useFocusLockHook = (React, trapRef, autoFocus, returnFocusTo, disabled = f
237
248
  };
238
249
  }, [disabled, focusMaster]);
239
250
  useUniqueIdHookMock(React);
240
- React.useEffect(() => {
241
- const id = getUniqueId('focus-lock-consumer');
251
+ React.useEffect(function () {
252
+ var id = getUniqueId('focus-lock-consumer');
242
253
  if (disabled) return;
243
254
  focusLockUsedInMountedComponents.add(id);
244
- return () => {
245
- focusLockUsedInMountedComponents.delete(id);
255
+ return function () {
256
+ focusLockUsedInMountedComponents["delete"](id);
246
257
  };
247
258
  }, [disabled]);
248
259
  };
249
- const establishHookAsGlobal = () => {
260
+ var establishHookAsGlobal = function establishHookAsGlobal() {
250
261
  globalThis[globalFocusLockHookKey] = {
251
262
  hook: useFocusLockHook,
252
263
  version: focusLockVersion,
@@ -258,21 +269,24 @@ if (!globalThis[globalFocusLockHookKey]) {
258
269
  } else if (typeof globalThis[globalFocusLockHookKey].version !== 'number') {
259
270
  establishHookAsGlobal();
260
271
  } else {
261
- const {
262
- version: theirVersion,
263
- usedInComponents
264
- } = globalThis[globalFocusLockHookKey];
272
+ var _globalFocusLockHookK = globalThis[globalFocusLockHookKey],
273
+ theirVersion = _globalFocusLockHookK.version,
274
+ usedInComponents = _globalFocusLockHookK.usedInComponents;
265
275
  if (focusLockVersion > theirVersion && usedInComponents.size === 0) {
266
276
  establishHookAsGlobal();
267
277
  }
268
278
  }
269
- const useFocusLock = (trapRef, autoFocus, returnFocusTo, disabled = false, focusMaster = false, onFocusOut) => {
270
- const hook = globalThis[globalFocusLockHookKey]?.hook ?? useFocusLockHook;
271
- return hook(_react.default, trapRef, autoFocus, returnFocusTo, disabled, focusMaster, onFocusOut);
279
+ var useFocusLock = exports.useFocusLock = function useFocusLock(trapRef, autoFocus, returnFocusTo) {
280
+ var _globalFocusLockHookK2, _globalFocusLockHookK3;
281
+ var disabled = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
282
+ var focusMaster = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
283
+ var onFocusOut = arguments.length > 5 ? arguments[5] : undefined;
284
+ var hook = (_globalFocusLockHookK2 = (_globalFocusLockHookK3 = globalThis[globalFocusLockHookKey]) === null || _globalFocusLockHookK3 === void 0 ? void 0 : _globalFocusLockHookK3.hook) !== null && _globalFocusLockHookK2 !== void 0 ? _globalFocusLockHookK2 : useFocusLockHook;
285
+ return hook(_react["default"], trapRef, autoFocus, returnFocusTo, disabled, focusMaster, onFocusOut);
272
286
  };
273
- exports.useFocusLock = useFocusLock;
274
- const hasFocusableIn = element => {
275
- return Array.from(element.children).flatMap(node => (0, _getFocusableIn.getFocusableIn)(node)).length > 0;
287
+ var hasFocusableIn = exports.hasFocusableIn = function hasFocusableIn(element) {
288
+ return Array.from(element.children).flatMap(function (node) {
289
+ return (0, _getFocusableIn.getFocusableIn)(node);
290
+ }).length > 0;
276
291
  };
277
- exports.hasFocusableIn = hasFocusableIn;
278
292
  //# sourceMappingURL=useFocusLock.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFocusLock.js","names":["_react","_interopRequireDefault","require","_canUseDOM","_focusBorders","_getFocusableIn","_isFocusInside","_setFocus","_hasParent","syntheticEvents","blur","keydown","makeFocusLockSyntheticEvent","baseEvent","event","type","supported","Object","keys","join","Error","syntheticEvent","Event","bubbles","defineProperty","writable","value","target","relatedTarget","exports","useFocusBorders","React","disabled","trapRef","useUniqueIdHookMock","useEffect","trapNode","current","getFocusableIn","length","addFocusBorders","removeFocusBorders","uniqueId","getUniqueId","prefix","Math","random","toString","slice","focusLockVersion","globalFocusLockHookKey","focusLockAllTraps","Set","focusLockUsedInMountedComponents","focusMastersStack","noop","useState","undefined","useEnhancedEffect","canUseDOM","useLayoutEffect","useFocusLockHook","autoFocus","returnFocusTo","focusMaster","onFocusOut","autoTriggerRef","useRef","lastUserInteractionRef","handleFocusOut","useCallback","focusCameFrom","focusMovedTo","setTimeout","Promise","resolve","then","currentFocusMaster","trapNodes","isFocusInside","hasParent","setFocus","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","LocalReact","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":";;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,aAAA,GAAAF,OAAA;AACA,IAAAG,eAAA,GAAAH,OAAA;AACA,IAAAI,cAAA,GAAAJ,OAAA;AACA,IAAAK,SAAA,GAAAL,OAAA;AACA,IAAAM,UAAA,GAAAN,OAAA;AAIA,MAAMO,eAAe,GAAG;EACtBC,IAAI,EAAE,6CAA6C;EACnDC,OAAO,EAAE;AACX,CAAC;AACD;AACA;AACA;AACA;AACO,MAAMC,2BAA2B,GAAIC,SAAgB,IAAK;EAC/D,MAAMC,KAAK,GAAGD,SAAgB;EAC9B,MAAME,IAAI,GAAGD,KAAK,CAACC,IAAoC;EACvD,IAAI,EAAEA,IAAI,IAAIN,eAAe,CAAC,EAAE;IAC9B,MAAMO,SAAS,GAAGC,MAAM,CAACC,IAAI,CAACT,eAAe,CAAC,CAACU,IAAI,CAAC,IAAI,CAAC;IACzD,MAAM,IAAIC,KAAK,CAAC,sCAAsCL,IAAI,KAAKC,SAAS,gBAAgB,CAAC;EAC3F;EACA,MAAMK,cAAc,GAAG,IAAIC,KAAK,CAACb,eAAe,CAACM,IAAI,CAAC,EAAE;IACtDQ,OAAO,EAAE;EACX,CAAC,CAAC;EACFN,MAAM,CAACO,cAAc,CAACH,cAAc,EAAE,QAAQ,EAAE;IAAEI,QAAQ,EAAE,KAAK;IAAEC,KAAK,EAAEZ,KAAK,CAACa;EAAO,CAAC,CAAC;EACzFV,MAAM,CAACO,cAAc,CAACH,cAAc,EAAE,eAAe,EAAE;IACrDI,QAAQ,EAAE,KAAK;IACfC,KAAK,EAAEZ,KAAK,CAACc;EACf,CAAC,CAAC;EACF,OAAOP,cAAc;AACvB,CAAC;AAACQ,OAAA,CAAAjB,2BAAA,GAAAA,2BAAA;AAEF,MAAMkB,eAAe,GAAGA,CACtBC,KAAa,EACbC,QAAkB,EAClBC,OAAsC,KACnC;EACHC,mBAAmB,CAACH,KAAK,CAAC;EAC1BA,KAAK,CAACI,SAAS,CAAC,MAAM;IACpB,MAAMC,QAAQ,GAAGH,OAAO,EAAEI,OAAO;IAEjC,IAAID,QAAQ,IAAI,CAACJ,QAAQ,IAAI,IAAAM,8BAAc,EAACF,QAAQ,CAAC,CAACG,MAAM,GAAG,CAAC,EAAE;MAChE,IAAAC,6BAAe,EAACJ,QAAQ,CAAC;IAC3B;IAEA,OAAO,MAAM;MACX,IAAIA,QAAQ,EAAE;QACZ,IAAAK,gCAAkB,EAACL,QAAQ,CAAC;MAC9B;IACF,CAAC;EACH,CAAC,EAAE,CAACJ,QAAQ,CAAC,CAAC;AAChB,CAAC;AAID,IAAIU,QAAQ,GAAG,CAAC;AAChB,MAAMC,WAAW,GAAIC,MAAc,IACjC,GAAGA,MAAM,IAAIC,IAAI,CAACC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,EAAE,CAAC,CAACC,KAAK,CAAC,CAAC,CAAC,IAAIN,QAAQ,EAAE,EAAE;;AAElE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMO,gBAAgB,GAAG,CAAC;AAC1B,MAAMC,sBAAsB,GAAG,oDAAoD;AAEnF,MAAMC,iBAAiB,GAAG,IAAIC,GAAG,CAAc,CAAC;AAChD,MAAMC,gCAAgC,GAAG,IAAID,GAAG,CAAS,CAAC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAME,iBAAgC,GAAG,EAAE;AAE3C,MAAMC,IAAI,GAAGA,CAAA,KAAM,CAAC,CAAC;AACrB,MAAMrB,mBAAmB,GAAIH,KAAa,IAAK;EAC7CA,KAAK,CAACyB,QAAQ,CAACC,SAAS,CAAC;EACzB,MAAMC,iBAAiB,GAAG,IAAAC,kBAAS,EAAC,CAAC,GAAG5B,KAAK,CAAC6B,eAAe,GAAG7B,KAAK,CAACI,SAAS;EAC/EuB,iBAAiB,CAACH,IAAI,EAAE,EAAE,CAAC;AAC7B,CAAC;AAED,MAAMM,gBAAgB,GAAGA,CACvB9B,KAAa,EACbE,OAAqC,EACrC6B,SAA+B,EAC/BC,aAA2D,EAC3D/B,QAAQ,GAAG,KAAK,EAChBgC,WAAW,GAAG,KAAK,EACnBC,UAAmC,KAChC;EACHnC,eAAe,CAACC,KAAK,EAAEC,QAAQ,EAAEC,OAAO,CAAC;EAEzC,MAAMiC,cAAc,GAAGnC,KAAK,CAACoC,MAAM,CAAqB,IAAI,CAAC;EAC7D,MAAMC,sBAAsB,GAAGrC,KAAK,CAACoC,MAAM,CAAmCV,SAAS,CAAC;EAExF,MAAMY,cAAc,GAAGtC,KAAK,CAACuC,WAAW,CACrCxD,KAAoE,IAAK;IACxE,MAAMyD,aAAa,GAAGzD,KAAK,CAACa,MAAM;IAClC,MAAM6C,YAAY,GAAG1D,KAAK,CAACc,aAAa;IACxC6C,UAAU,CAAC,MAAM;MACf,IAAI,CAACF,aAAa,EAAE;MACpB,IAAIL,cAAc,CAAC7B,OAAO,EAAE;MAC5B6B,cAAc,CAAC7B,OAAO,GAAGkC,aAAa;IACxC,CAAC,EAAE,CAAC,CAAC;IACL,IAAIH,sBAAsB,CAAC/B,OAAO,KAAK,OAAO,EAAE;IAChDqC,OAAO,CAACC,OAAO,CAAC,CAAC,CAACC,IAAI,CAAC,MAAM;MAC3B,IAAI,CAAC3C,OAAO,CAACI,OAAO,EAAE;MACtB,MAAMwC,kBAAkB,GAAGvB,iBAAiB,CAACA,iBAAiB,CAACf,MAAM,GAAG,CAAC,CAAC;MAC1E,IAAIsC,kBAAkB,IAAIA,kBAAkB,KAAK5C,OAAO,CAACI,OAAO,EAAE;MAClE,MAAMyC,SAAS,GAAGD,kBAAkB,GAChC,CAAC5C,OAAO,CAACI,OAAO,CAAC,GACjB,CAACJ,OAAO,CAACI,OAAO,EAAE,GAAGc,iBAAiB,CAAC;MAC3C,IAAI,IAAA4B,4BAAa,EAACD,SAAS,EAAEN,YAAY,CAAC,EAAE;MAC5C,IACE,OAAOT,aAAa,KAAK,QAAQ,IACjCA,aAAa,EAAE1B,OAAO,IACtB,IAAA2C,oBAAS,EAACR,YAAY,EAAET,aAAa,CAAC1B,OAAO,CAAC,EAE9C;MAEF,IAAIkC,aAAa,IAAIC,YAAY,EAAE;QACjC,IAAAS,kBAAQ,EAAChD,OAAO,CAACI,OAAO,EAAEkC,aAAa,EAAEC,YAAY,CAAC;MACxD;MAEAP,UAAU,GAAGnD,KAAK,CAAC;IACrB,CAAC,CAAC;EACJ,CAAC,EACD,CAACmD,UAAU,CACb,CAAC;EACD,MAAMiB,gBAAgB,GAAGnD,KAAK,CAACuC,WAAW,CAAC,MAAM;IAC/CF,sBAAsB,CAAC/B,OAAO,GAAG,OAAO;EAC1C,CAAC,EAAE,EAAE,CAAC;EACN,MAAM8C,mBAAmB,GAAGpD,KAAK,CAACuC,WAAW,CAAC,MAAM;IAClDF,sBAAsB,CAAC/B,OAAO,GAAG,UAAU;EAC7C,CAAC,EAAE,EAAE,CAAC;EACN,MAAM+C,WAAW,GAAGrD,KAAK,CAACuC,WAAW,CAAC,MAAM;IAC1C,MAAMlC,QAAQ,GAAGH,OAAO,CAACI,OAAO;IAChC,IAAID,QAAQ,IAAI,CAAC,IAAA2C,4BAAa,EAAC3C,QAAQ,CAAC,EAAE;IAC1C,MAAMiD,sBAAsB,GAAG/B,iBAAiB,CAACf,MAAM;IACvD,IAAI,OAAOwB,aAAa,KAAK,QAAQ,IAAIA,aAAa,EAAE1B,OAAO,EAAE;MAC/D,MAAMiD,eAAe,GAAGvB,aAAa,EAAE1B,OAAO;MAC9CoC,UAAU,CAAC,MAAM;QACf,IAAIY,sBAAsB,KAAK/B,iBAAiB,CAACf,MAAM,EAAE;UACvD,IAAA0C,kBAAQ,EAACK,eAAe,EAAElD,QAAQ,CAAC;QACrC;MACF,CAAC,EAAE,CAAC,CAAC;IACP;IACA,IAAI2B,aAAa,KAAK,MAAM,IAAIG,cAAc,CAAC7B,OAAO,EAAE;MACtD,MAAMkD,WAAW,GAAGrB,cAAc,CAAC7B,OAAO;MAC1CoC,UAAU,CAAC,MAAM;QACf,IAAIY,sBAAsB,KAAK/B,iBAAiB,CAACf,MAAM,IAAIuB,SAAS,KAAK,UAAU,EAAE;UACnF,IAAAmB,kBAAQ,EAACM,WAAW,EAAEnD,QAAQ,CAAC;QACjC;MACF,CAAC,EAAE,CAAC,CAAC;IACP;EACF,CAAC,EAAE,CAAC2B,aAAa,CAAC,CAAC;EACnBhC,KAAK,CAACI,SAAS,CAAC,MAAM;IACpB,IAAI,OAAOF,OAAO,KAAK,QAAQ,IAAIA,OAAO,KAAK,IAAI,EAAE;IACrD,MAAMuD,IAAI,GAAGvD,OAAO,CAACI,OAAO;IAC5B,IAAI,CAACmD,IAAI,EAAE;IACXrC,iBAAiB,CAACsC,GAAG,CAACD,IAAI,CAAC;IAC3B,OAAO,MAAM;MACX,IAAI,CAACA,IAAI,EAAE;MACXrC,iBAAiB,CAACuC,MAAM,CAACF,IAAI,CAAC;IAChC,CAAC;EACH,CAAC,EAAE,CAACxD,QAAQ,CAAC,CAAC;EAEdD,KAAK,CAACI,SAAS,CAAC,MAAM;IACpB,IAAIH,QAAQ,EAAE;IACd,IAAI,CAAC,IAAA2B,kBAAS,EAAC,CAAC,EAAE;IAClB,IAAI,CAAC1B,OAAO,CAACI,OAAO,EAAE;IACtB,MAAMsD,iBAAiB,GAAGC,KAAK,CAACC,IAAI,CAAC5D,OAAO,CAACI,OAAO,CAACyD,QAAQ,CAAC,CAACC,OAAO,CAAEP,IAAI,IAC1E,IAAAlD,8BAAc,EAACkD,IAAmB,CACpC,CAAC;IACD,IAAIG,iBAAiB,CAACpD,MAAM,KAAK,CAAC,IAAIuB,SAAS,KAAK,UAAU,EAAE;IAEhEkC,QAAQ,CAACC,IAAI,CAACC,gBAAgB,CAAC,UAAU,EAAE7B,cAAqB,CAAC;IACjE2B,QAAQ,CAACC,IAAI,CAACC,gBAAgB,CAACzF,eAAe,CAACC,IAAI,EAAE2D,cAAqB,CAAC;IAC3E2B,QAAQ,CAACC,IAAI,CAACC,gBAAgB,CAAC,WAAW,EAAEhB,gBAAgB,CAAC;IAC7Dc,QAAQ,CAACC,IAAI,CAACC,gBAAgB,CAAC,YAAY,EAAEhB,gBAAgB,CAAC;IAC9Dc,QAAQ,CAACC,IAAI,CAACC,gBAAgB,CAAC,SAAS,EAAEf,mBAAmB,CAAC;IAC9Da,QAAQ,CAACC,IAAI,CAACC,gBAAgB,CAACzF,eAAe,CAACE,OAAO,EAAEwE,mBAAmB,CAAC;IAE5E,IAAIrB,SAAS,EAAE;MACbW,UAAU,CAAC,MAAM;QACf,IAAIX,SAAS,KAAK,UAAU,IAAI6B,iBAAiB,CAACpD,MAAM,KAAK,CAAC,IAAIyB,WAAW,EAAE;UAC7E/B,OAAO,CAACI,OAAO,EAAE8D,KAAK,CAAC,CAAC;UACxB;QACF;QAEA,IAAAlB,kBAAQ,EACNhD,OAAO,CAACI,OAAO,EACf,OAAO0B,aAAa,KAAK,QAAQ,GAAGA,aAAa,EAAE1B,OAAO,GAAG2D,QAAQ,CAACC,IACxE,CAAC;MACH,CAAC,EAAE,CAAC,CAAC;IACP;IACA,OAAO,MAAM;MACXD,QAAQ,CAACC,IAAI,CAACG,mBAAmB,CAAC,UAAU,EAAE/B,cAAqB,CAAC;MACpE2B,QAAQ,CAACC,IAAI,CAACG,mBAAmB,CAAC3F,eAAe,CAACC,IAAI,EAAE2D,cAAqB,CAAC;MAC9E2B,QAAQ,CAACC,IAAI,CAACG,mBAAmB,CAAC,WAAW,EAAElB,gBAAgB,CAAC;MAChEc,QAAQ,CAACC,IAAI,CAACG,mBAAmB,CAAC,YAAY,EAAElB,gBAAgB,CAAC;MACjEc,QAAQ,CAACC,IAAI,CAACG,mBAAmB,CAAC,SAAS,EAAEjB,mBAAmB,CAAC;MACjEa,QAAQ,CAACC,IAAI,CAACG,mBAAmB,CAAC3F,eAAe,CAACE,OAAO,EAAEwE,mBAAmB,CAAC;MAC/EC,WAAW,CAAC,CAAC;MACblB,cAAc,CAAC7B,OAAO,GAAG,IAAI;IAC/B,CAAC;EACH,CAAC,EAAE,CAACL,QAAQ,EAAE8B,SAAS,EAAEC,aAAa,EAAEqB,WAAW,CAAC,CAAC;EAErDrD,KAAK,CAACI,SAAS,CAAC,MAAM;IACpB,IAAI,OAAOF,OAAO,KAAK,QAAQ,IAAIA,OAAO,KAAK,IAAI,EAAE;IACrD,IAAID,QAAQ,EAAE;IACd,IAAI,CAAC,IAAA2B,kBAAS,EAAC,CAAC,EAAE;IAClB,IAAI,CAAC1B,OAAO,CAACI,OAAO,EAAE;IACtB,MAAMsD,iBAAiB,GAAGC,KAAK,CAACC,IAAI,CAAC5D,OAAO,CAACI,OAAO,CAACyD,QAAQ,CAAC,CAACC,OAAO,CAAEP,IAAI,IAC1E,IAAAlD,8BAAc,EAACkD,IAAmB,CACpC,CAAC;IACD,IAAIG,iBAAiB,CAACpD,MAAM,KAAK,CAAC,EAAE;IAEpC,IAAIyB,WAAW,EAAE;MACfV,iBAAiB,CAAC+C,IAAI,CAACpE,OAAO,CAACI,OAAO,CAAC;IACzC;IAEA,OAAO,MAAM;MACX,IAAI,CAAC2B,WAAW,EAAE;MAClB,IAAIV,iBAAiB,CAACA,iBAAiB,CAACf,MAAM,GAAG,CAAC,CAAC,KAAKN,OAAO,CAACI,OAAO,EAAE;QACvEiB,iBAAiB,CAACgD,GAAG,CAAC,CAAC;MACzB,CAAC,MAAM;QACLhD,iBAAiB,CAACiD,MAAM,CAACjD,iBAAiB,CAACkD,OAAO,CAACvE,OAAO,CAACI,OAAQ,CAAC,EAAE,CAAC,CAAC;MAC1E;IACF,CAAC;EACH,CAAC,EAAE,CAACL,QAAQ,EAAEgC,WAAW,CAAC,CAAC;EAE3B9B,mBAAmB,CAACH,KAAK,CAAC;EAC1BA,KAAK,CAACI,SAAS,CAAC,MAAM;IACpB,MAAMsE,EAAE,GAAG9D,WAAW,CAAC,qBAAqB,CAAC;IAC7C,IAAIX,QAAQ,EAAE;IACdqB,gCAAgC,CAACoC,GAAG,CAACgB,EAAE,CAAC;IACxC,OAAO,MAAM;MACXpD,gCAAgC,CAACqC,MAAM,CAACe,EAAE,CAAC;IAC7C,CAAC;EACH,CAAC,EAAE,CAACzE,QAAQ,CAAC,CAAC;AAChB,CAAC;AACD,MAAM0E,qBAAqB,GAAGA,CAAA,KAAM;EACjCC,UAAU,CAASzD,sBAAsB,CAAC,GAAG;IAC5C0D,IAAI,EAAE/C,gBAAgB;IACtBgD,OAAO,EAAE5D,gBAAgB;IACzB6D,gBAAgB,EAAEzD;EACpB,CAAC;AACH,CAAC;AACD,IAAI,CAAEsD,UAAU,CAASzD,sBAAsB,CAAC,EAAE;EAChDwD,qBAAqB,CAAC,CAAC;AACzB,CAAC,MAAM,IAAI,OAAQC,UAAU,CAASzD,sBAAsB,CAAC,CAAC2D,OAAO,KAAK,QAAQ,EAAE;EAClFH,qBAAqB,CAAC,CAAC;AACzB,CAAC,MAAM;EACL,MAAM;IAAEG,OAAO,EAAEE,YAAY;IAAED;EAAiB,CAAC,GAAIH,UAAU,CAASzD,sBAAsB,CAAC;EAC/F,IAAID,gBAAgB,GAAG8D,YAAY,IAAID,gBAAgB,CAACE,IAAI,KAAK,CAAC,EAAE;IAClEN,qBAAqB,CAAC,CAAC;EACzB;AACF;AAEO,MAAMO,YAAY,GAAGA,CAC1BhF,OAAqC,EACrC6B,SAA+B,EAC/BC,aAA2D,EAC3D/B,QAAQ,GAAG,KAAK,EAChBgC,WAAW,GAAG,KAAK,EACnBC,UAAmC,KAChC;EACH,MAAM2C,IAAI,GAAID,UAAU,CAASzD,sBAAsB,CAAC,EAAE0D,IAAI,IAAI/C,gBAAgB;EAClF,OAAO+C,IAAI,CAACM,cAAU,EAAEjF,OAAO,EAAE6B,SAAS,EAAEC,aAAa,EAAE/B,QAAQ,EAAEgC,WAAW,EAAEC,UAAU,CAAC;AAC/F,CAAC;AAACpC,OAAA,CAAAoF,YAAA,GAAAA,YAAA;AAEK,MAAME,cAAc,GAAIC,OAAoB,IAAc;EAC/D,OACExB,KAAK,CAACC,IAAI,CAACuB,OAAO,CAACtB,QAAQ,CAAC,CAACC,OAAO,CAAEP,IAAI,IAAK,IAAAlD,8BAAc,EAACkD,IAAmB,CAAC,CAAC,CAACjD,MAAM,GAAG,CAAC;AAElG,CAAC;AAACV,OAAA,CAAAsF,cAAA,GAAAA,cAAA","ignoreList":[]}
1
+ {"version":3,"file":"useFocusLock.js","names":["_react","_interopRequireDefault","require","_canUseDOM","_focusBorders","_getFocusableIn","_isFocusInside","_setFocus","_hasParent","syntheticEvents","blur","keydown","makeFocusLockSyntheticEvent","exports","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","getFocusableIn","length","addFocusBorders","removeFocusBorders","uniqueId","getUniqueId","prefix","Math","random","toString","slice","focusLockVersion","globalFocusLockHookKey","focusLockAllTraps","Set","focusLockUsedInMountedComponents","focusMastersStack","noop","useState","undefined","useEnhancedEffect","canUseDOM","useLayoutEffect","useFocusLockHook","autoFocus","returnFocusTo","arguments","focusMaster","onFocusOut","autoTriggerRef","useRef","lastUserInteractionRef","handleFocusOut","useCallback","focusCameFrom","focusMovedTo","setTimeout","Promise","resolve","then","currentFocusMaster","trapNodes","_toConsumableArray2","isFocusInside","_typeof2","hasParent","setFocus","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","LocalReact","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":[]}