@semcore/core 17.0.1-prerelease.0 → 17.1.0-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 +123 -3
  2. package/README.md +5 -35
  3. package/lib/LastInteractionType.js +22 -36
  4. package/lib/LastInteractionType.js.map +1 -1
  5. package/lib/LastInteractionType.mjs +19 -33
  6. package/lib/LastInteractionType.mjs.map +1 -1
  7. package/lib/core-types/Component.js +25 -41
  8. package/lib/core-types/Component.js.map +1 -1
  9. package/lib/core-types/Component.mjs +18 -38
  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 +158 -238
  16. package/lib/coreFactory.js.map +1 -1
  17. package/lib/coreFactory.mjs +133 -189
  18. package/lib/coreFactory.mjs.map +1 -1
  19. package/lib/decorators/propsObserver.js +36 -64
  20. package/lib/decorators/propsObserver.js.map +1 -1
  21. package/lib/decorators/propsObserver.mjs +33 -61
  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 +51 -59
  28. package/lib/enhancement/Children.js.map +1 -1
  29. package/lib/enhancement/Children.mjs +47 -41
  30. package/lib/enhancement/Children.mjs.map +1 -1
  31. package/lib/enhancement/Root.js +36 -37
  32. package/lib/enhancement/Root.js.map +1 -1
  33. package/lib/enhancement/Root.mjs +28 -18
  34. package/lib/enhancement/Root.mjs.map +1 -1
  35. package/lib/enhancement/dataName.js +7 -8
  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 +6 -9
  40. package/lib/enhancement/enhance.js.map +1 -1
  41. package/lib/enhancement/enhance.mjs +4 -7
  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 +10 -9
  50. package/lib/enhancement/i18n.mjs.map +1 -1
  51. package/lib/enhancement/inheritedName.js +7 -8
  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 +47 -56
  56. package/lib/enhancement/staticChildren.js.map +1 -1
  57. package/lib/enhancement/staticChildren.mjs +43 -48
  58. package/lib/enhancement/staticChildren.mjs.map +1 -1
  59. package/lib/enhancement/style.js +29 -27
  60. package/lib/enhancement/style.js.map +1 -1
  61. package/lib/enhancement/style.mjs +26 -20
  62. package/lib/enhancement/style.mjs.map +1 -1
  63. package/lib/enhancement/uncontrolledProps.js +46 -65
  64. package/lib/enhancement/uncontrolledProps.js.map +1 -1
  65. package/lib/enhancement/uncontrolledProps.mjs +43 -52
  66. package/lib/enhancement/uncontrolledProps.mjs.map +1 -1
  67. package/lib/esm/LastInteractionType.mjs +19 -33
  68. package/lib/esm/core-types/Component.mjs +18 -38
  69. package/lib/esm/core-types/symbols.mjs +9 -9
  70. package/lib/esm/coreFactory.mjs +133 -189
  71. package/lib/esm/enhancement/Children.mjs +47 -41
  72. package/lib/esm/enhancement/Root.mjs +28 -18
  73. package/lib/esm/enhancement/dataName.mjs +5 -5
  74. package/lib/esm/enhancement/enhance.mjs +4 -7
  75. package/lib/esm/enhancement/functionDefaultProps.mjs +4 -4
  76. package/lib/esm/enhancement/i18n.mjs +10 -9
  77. package/lib/esm/enhancement/inheritedName.mjs +5 -5
  78. package/lib/esm/enhancement/staticChildren.mjs +43 -48
  79. package/lib/esm/enhancement/style.mjs +26 -20
  80. package/lib/esm/enhancement/uncontrolledProps.mjs +43 -52
  81. package/lib/esm/register.mjs +12 -20
  82. package/lib/esm/styled/reshadow-core.mjs +98 -111
  83. package/lib/esm/styled/sstyled.mjs +31 -41
  84. package/lib/esm/utils/assignProps.mjs +32 -36
  85. package/lib/esm/utils/enhances/WithI18n.mjs +15 -17
  86. package/lib/esm/utils/enhances/i18nEnhance.mjs +47 -61
  87. package/lib/esm/utils/logger.mjs +13 -21
  88. package/lib/esm/utils/pick.mjs +4 -4
  89. package/lib/esm/utils/ref.mjs +27 -43
  90. package/lib/esm/utils/use/useEnhancedEffect.mjs +1 -1
  91. package/lib/index.js +17 -17
  92. package/lib/register.js +17 -24
  93. package/lib/register.js.map +1 -1
  94. package/lib/register.mjs +12 -20
  95. package/lib/register.mjs.map +1 -1
  96. package/lib/styled/index.js +4 -4
  97. package/lib/styled/reshadow-core.js +102 -104
  98. package/lib/styled/reshadow-core.js.map +1 -1
  99. package/lib/styled/reshadow-core.mjs +98 -111
  100. package/lib/styled/reshadow-core.mjs.map +1 -1
  101. package/lib/styled/sstyled.js +31 -53
  102. package/lib/styled/sstyled.js.map +1 -1
  103. package/lib/styled/sstyled.mjs +31 -41
  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 +8 -10
  116. package/lib/utils/CSSinJS.js.map +1 -1
  117. package/lib/utils/CSSinJS.mjs +6 -7
  118. package/lib/utils/CSSinJS.mjs.map +1 -1
  119. package/lib/utils/ThemeProvider.js +44 -51
  120. package/lib/utils/ThemeProvider.js.map +1 -1
  121. package/lib/utils/ThemeProvider.mjs +36 -47
  122. package/lib/utils/ThemeProvider.mjs.map +1 -1
  123. package/lib/utils/addonText.js +4 -7
  124. package/lib/utils/addonText.js.map +1 -1
  125. package/lib/utils/addonText.mjs +2 -5
  126. package/lib/utils/addonText.mjs.map +1 -1
  127. package/lib/utils/addonTextChildren.js +15 -21
  128. package/lib/utils/addonTextChildren.js.map +1 -1
  129. package/lib/utils/addonTextChildren.mjs +7 -13
  130. package/lib/utils/addonTextChildren.mjs.map +1 -1
  131. package/lib/utils/ariaProps.js +7 -5
  132. package/lib/utils/ariaProps.js.map +1 -1
  133. package/lib/utils/ariaProps.mjs +7 -5
  134. package/lib/utils/ariaProps.mjs.map +1 -1
  135. package/lib/utils/assignProps.js +33 -37
  136. package/lib/utils/assignProps.js.map +1 -1
  137. package/lib/utils/assignProps.mjs +32 -36
  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 +72 -95
  142. package/lib/utils/color.js.map +1 -1
  143. package/lib/utils/color.mjs +71 -94
  144. package/lib/utils/color.mjs.map +1 -1
  145. package/lib/utils/compose.js +3 -12
  146. package/lib/utils/compose.js.map +1 -1
  147. package/lib/utils/compose.mjs +2 -11
  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 +3 -4
  154. package/lib/utils/cssToIntDefault.js.map +1 -1
  155. package/lib/utils/cssToIntDefault.mjs +2 -3
  156. package/lib/utils/cssToIntDefault.mjs.map +1 -1
  157. package/lib/utils/enhances/WithCSS.js +10 -8
  158. package/lib/utils/enhances/WithCSS.js.map +1 -1
  159. package/lib/utils/enhances/WithCSS.mjs +7 -6
  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 +15 -17
  164. package/lib/utils/enhances/WithI18n.mjs.map +1 -1
  165. package/lib/utils/enhances/a11yEnhance.js +34 -39
  166. package/lib/utils/enhances/a11yEnhance.js.map +1 -1
  167. package/lib/utils/enhances/a11yEnhance.mjs +32 -36
  168. package/lib/utils/enhances/a11yEnhance.mjs.map +1 -1
  169. package/lib/utils/enhances/animatedSizeEnhance.js +55 -63
  170. package/lib/utils/enhances/animatedSizeEnhance.js.map +1 -1
  171. package/lib/utils/enhances/animatedSizeEnhance.mjs +50 -58
  172. package/lib/utils/enhances/animatedSizeEnhance.mjs.map +1 -1
  173. package/lib/utils/enhances/contextEnhance.js +12 -11
  174. package/lib/utils/enhances/contextEnhance.js.map +1 -1
  175. package/lib/utils/enhances/contextEnhance.mjs +9 -8
  176. package/lib/utils/enhances/contextEnhance.mjs.map +1 -1
  177. package/lib/utils/enhances/i18nEnhance.js +51 -67
  178. package/lib/utils/enhances/i18nEnhance.js.map +1 -1
  179. package/lib/utils/enhances/i18nEnhance.mjs +47 -61
  180. package/lib/utils/enhances/i18nEnhance.mjs.map +1 -1
  181. package/lib/utils/enhances/resolveColorEnhance.js +12 -10
  182. package/lib/utils/enhances/resolveColorEnhance.js.map +1 -1
  183. package/lib/utils/enhances/resolveColorEnhance.mjs +8 -6
  184. package/lib/utils/enhances/resolveColorEnhance.mjs.map +1 -1
  185. package/lib/utils/eventEmitter.js +30 -57
  186. package/lib/utils/eventEmitter.js.map +1 -1
  187. package/lib/utils/eventEmitter.mjs +26 -55
  188. package/lib/utils/eventEmitter.mjs.map +1 -1
  189. package/lib/utils/findComponent.js +35 -42
  190. package/lib/utils/findComponent.js.map +1 -1
  191. package/lib/utils/findComponent.mjs +26 -33
  192. package/lib/utils/findComponent.mjs.map +1 -1
  193. package/lib/utils/fire.js +7 -13
  194. package/lib/utils/fire.js.map +1 -1
  195. package/lib/utils/fire.mjs +5 -11
  196. package/lib/utils/fire.mjs.map +1 -1
  197. package/lib/utils/focus-lock/focusBorders.js +28 -32
  198. package/lib/utils/focus-lock/focusBorders.js.map +1 -1
  199. package/lib/utils/focus-lock/focusBorders.mjs +26 -32
  200. package/lib/utils/focus-lock/focusBorders.mjs.map +1 -1
  201. package/lib/utils/focus-lock/getFocusableIn.js +4 -6
  202. package/lib/utils/focus-lock/getFocusableIn.js.map +1 -1
  203. package/lib/utils/focus-lock/getFocusableIn.mjs +3 -6
  204. package/lib/utils/focus-lock/getFocusableIn.mjs.map +1 -1
  205. package/lib/utils/focus-lock/isFocusInside.js +5 -6
  206. package/lib/utils/focus-lock/isFocusInside.js.map +1 -1
  207. package/lib/utils/focus-lock/isFocusInside.mjs +4 -6
  208. package/lib/utils/focus-lock/isFocusInside.mjs.map +1 -1
  209. package/lib/utils/focus-lock/isFocusable.js +9 -12
  210. package/lib/utils/focus-lock/isFocusable.js.map +1 -1
  211. package/lib/utils/focus-lock/isFocusable.mjs +8 -11
  212. package/lib/utils/focus-lock/isFocusable.mjs.map +1 -1
  213. package/lib/utils/focus-lock/setFocus.js +21 -27
  214. package/lib/utils/focus-lock/setFocus.js.map +1 -1
  215. package/lib/utils/focus-lock/setFocus.mjs +19 -25
  216. package/lib/utils/focus-lock/setFocus.mjs.map +1 -1
  217. package/lib/utils/getAccessibleName.js +10 -22
  218. package/lib/utils/getAccessibleName.js.map +1 -1
  219. package/lib/utils/getAccessibleName.mjs +10 -21
  220. package/lib/utils/getAccessibleName.mjs.map +1 -1
  221. package/lib/utils/getDisplayName.js +1 -1
  222. package/lib/utils/getEventTarget.js +13 -32
  223. package/lib/utils/getEventTarget.js.map +1 -1
  224. package/lib/utils/getEventTarget.mjs +12 -31
  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 +4 -6
  230. package/lib/utils/getValue.js.map +1 -1
  231. package/lib/utils/getValue.mjs +3 -5
  232. package/lib/utils/getValue.mjs.map +1 -1
  233. package/lib/utils/hasLabels.js +16 -27
  234. package/lib/utils/hasLabels.js.map +1 -1
  235. package/lib/utils/hasLabels.mjs +14 -24
  236. package/lib/utils/hasLabels.mjs.map +1 -1
  237. package/lib/utils/hasParent.js +3 -2
  238. package/lib/utils/hasParent.js.map +1 -1
  239. package/lib/utils/hasParent.mjs +2 -3
  240. package/lib/utils/hasParent.mjs.map +1 -1
  241. package/lib/utils/ifChildren.js +6 -4
  242. package/lib/utils/ifChildren.js.map +1 -1
  243. package/lib/utils/ifChildren.mjs +4 -2
  244. package/lib/utils/ifChildren.mjs.map +1 -1
  245. package/lib/utils/indentStyles.js +5 -10
  246. package/lib/utils/indentStyles.js.map +1 -1
  247. package/lib/utils/indentStyles.mjs +5 -9
  248. package/lib/utils/indentStyles.mjs.map +1 -1
  249. package/lib/utils/injectStyle.js +11 -13
  250. package/lib/utils/injectStyle.js.map +1 -1
  251. package/lib/utils/injectStyle.mjs +9 -10
  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 +7 -9
  258. package/lib/utils/isInteractiveElement.js.map +1 -1
  259. package/lib/utils/isInteractiveElement.mjs +7 -9
  260. package/lib/utils/isInteractiveElement.mjs.map +1 -1
  261. package/lib/utils/isNode.js +4 -5
  262. package/lib/utils/isNode.js.map +1 -1
  263. package/lib/utils/isNode.mjs +1 -2
  264. package/lib/utils/isNode.mjs.map +1 -1
  265. package/lib/utils/isPromise.js +1 -1
  266. package/lib/utils/isRetina.js +7 -2
  267. package/lib/utils/isRetina.js.map +1 -1
  268. package/lib/utils/isRetina.mjs +6 -1
  269. package/lib/utils/isRetina.mjs.map +1 -1
  270. package/lib/utils/logger.js +18 -25
  271. package/lib/utils/logger.js.map +1 -1
  272. package/lib/utils/logger.mjs +13 -21
  273. package/lib/utils/logger.mjs.map +1 -1
  274. package/lib/utils/numericChecker.js +11 -18
  275. package/lib/utils/numericChecker.js.map +1 -1
  276. package/lib/utils/numericChecker.mjs +10 -17
  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 +10 -12
  287. package/lib/utils/propsForElement.js.map +1 -1
  288. package/lib/utils/propsForElement.mjs +8 -10
  289. package/lib/utils/propsForElement.mjs.map +1 -1
  290. package/lib/utils/rafTrottle.js +9 -14
  291. package/lib/utils/rafTrottle.js.map +1 -1
  292. package/lib/utils/rafTrottle.mjs +7 -12
  293. package/lib/utils/rafTrottle.mjs.map +1 -1
  294. package/lib/utils/reactToText.js +5 -8
  295. package/lib/utils/reactToText.js.map +1 -1
  296. package/lib/utils/reactToText.mjs +3 -6
  297. package/lib/utils/reactToText.mjs.map +1 -1
  298. package/lib/utils/ref.js +29 -47
  299. package/lib/utils/ref.js.map +1 -1
  300. package/lib/utils/ref.mjs +27 -43
  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 +8 -18
  309. package/lib/utils/uncontroll.js.map +1 -1
  310. package/lib/utils/uncontroll.mjs +8 -17
  311. package/lib/utils/uncontroll.mjs.map +1 -1
  312. package/lib/utils/uniqueID.js +22 -27
  313. package/lib/utils/uniqueID.js.map +1 -1
  314. package/lib/utils/uniqueID.mjs +18 -25
  315. package/lib/utils/uniqueID.mjs.map +1 -1
  316. package/lib/utils/use/useColorResolver.js +20 -21
  317. package/lib/utils/use/useColorResolver.js.map +1 -1
  318. package/lib/utils/use/useColorResolver.mjs +16 -18
  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 +5 -10
  325. package/lib/utils/use/useEventCallback.js.map +1 -1
  326. package/lib/utils/use/useEventCallback.mjs +3 -8
  327. package/lib/utils/use/useEventCallback.mjs.map +1 -1
  328. package/lib/utils/use/useEventListener.js +11 -15
  329. package/lib/utils/use/useEventListener.js.map +1 -1
  330. package/lib/utils/use/useEventListener.mjs +7 -11
  331. package/lib/utils/use/useEventListener.mjs.map +1 -1
  332. package/lib/utils/use/useFocusLock.js +80 -94
  333. package/lib/utils/use/useFocusLock.js.map +1 -1
  334. package/lib/utils/use/useFocusLock.mjs +71 -88
  335. package/lib/utils/use/useFocusLock.mjs.map +1 -1
  336. package/lib/utils/use/usePreventScroll.js +24 -26
  337. package/lib/utils/use/usePreventScroll.js.map +1 -1
  338. package/lib/utils/use/usePreventScroll.mjs +19 -21
  339. package/lib/utils/use/usePreventScroll.mjs.map +1 -1
  340. package/lib/utils/use/useScrollBarWidth.js +8 -14
  341. package/lib/utils/use/useScrollBarWidth.js.map +1 -1
  342. package/lib/utils/use/useScrollBarWidth.mjs +8 -13
  343. package/lib/utils/use/useScrollBarWidth.mjs.map +1 -1
  344. package/lib/utils/useCssVariable.js +32 -37
  345. package/lib/utils/useCssVariable.js.map +1 -1
  346. package/lib/utils/useCssVariable.mjs +27 -34
  347. package/lib/utils/useCssVariable.mjs.map +1 -1
  348. package/lib/utils/zIndexStacking.js +28 -24
  349. package/lib/utils/zIndexStacking.js.map +1 -1
  350. package/lib/utils/zIndexStacking.mjs +23 -22
  351. package/lib/utils/zIndexStacking.mjs.map +1 -1
  352. package/package.json +316 -13
  353. package/tsconfig-utils.json +4 -0
  354. package/vite.config.ts +22 -0
@@ -1,22 +1,18 @@
1
1
  import React from 'react';
2
2
  import canUseDOM from "../canUseDOM.mjs";
3
3
  import { getRef } from "../ref.mjs";
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 () {
4
+ const useEventListener = (elementOrRef, eventName, handler, options = undefined) => {
5
+ const savedHandler = React.useRef();
6
+ React.useEffect(() => {
8
7
  savedHandler.current = handler;
9
8
  }, [handler]);
10
- React.useEffect(function () {
9
+ React.useEffect(() => {
11
10
  if (!canUseDOM()) return;
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);
11
+ const eventListener = event => savedHandler.current?.(event);
12
+ const node = getRef(elementOrRef);
17
13
  if (!(node instanceof Element)) return;
18
14
  node.addEventListener(eventName, eventListener, options);
19
- return function () {
15
+ return () => {
20
16
  node.removeEventListener(eventName, eventListener, options);
21
17
  };
22
18
  }, [eventName, elementOrRef]);
@@ -1 +1 @@
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
+ {"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,26 +1,24 @@
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 get() {
10
+ get: function () {
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 get() {
17
+ get: function () {
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"));
24
22
  var _react = _interopRequireDefault(require("react"));
25
23
  var _canUseDOM = _interopRequireDefault(require("../canUseDOM"));
26
24
  var _focusBorders = require("../focus-lock/focusBorders");
@@ -28,7 +26,7 @@ var _getFocusableIn = require("../focus-lock/getFocusableIn");
28
26
  var _isFocusInside = require("../focus-lock/isFocusInside");
29
27
  var _setFocus = require("../focus-lock/setFocus");
30
28
  var _hasParent = require("../hasParent");
31
- var syntheticEvents = {
29
+ const syntheticEvents = {
32
30
  blur: 'focusout-intergalactic-focus-lock-synthetic',
33
31
  keydown: 'keydown-intergalactic-focus-lock-synthetic'
34
32
  };
@@ -36,14 +34,14 @@ var syntheticEvents = {
36
34
  * Synthetic event are special events that always bypass all propagation guards and reaches focus lock event listeners.
37
35
  * You should always prevent native event propagation in order to prevent focus enforcing double calls.
38
36
  */
39
- var makeFocusLockSyntheticEvent = exports.makeFocusLockSyntheticEvent = function makeFocusLockSyntheticEvent(baseEvent) {
40
- var event = baseEvent;
41
- var type = event.type;
37
+ const makeFocusLockSyntheticEvent = baseEvent => {
38
+ const event = baseEvent;
39
+ const type = event.type;
42
40
  if (!(type in syntheticEvents)) {
43
- var supported = Object.keys(syntheticEvents).join(', ');
44
- throw new Error("Unable to make synthetic event for ".concat(type, ", ").concat(supported, " are supported"));
41
+ const supported = Object.keys(syntheticEvents).join(', ');
42
+ throw new Error(`Unable to make synthetic event for ${type}, ${supported} are supported`);
45
43
  }
46
- var syntheticEvent = new Event(syntheticEvents[type], {
44
+ const syntheticEvent = new Event(syntheticEvents[type], {
47
45
  bubbles: true
48
46
  });
49
47
  Object.defineProperty(syntheticEvent, 'target', {
@@ -56,24 +54,23 @@ var makeFocusLockSyntheticEvent = exports.makeFocusLockSyntheticEvent = function
56
54
  });
57
55
  return syntheticEvent;
58
56
  };
59
- var useFocusBorders = function useFocusBorders(React, disabled, trapRef) {
57
+ exports.makeFocusLockSyntheticEvent = makeFocusLockSyntheticEvent;
58
+ const useFocusBorders = (React, disabled, trapRef) => {
60
59
  useUniqueIdHookMock(React);
61
- React.useEffect(function () {
62
- var trapNode = trapRef === null || trapRef === void 0 ? void 0 : trapRef.current;
60
+ React.useEffect(() => {
61
+ const trapNode = trapRef?.current;
63
62
  if (trapNode && !disabled && (0, _getFocusableIn.getFocusableIn)(trapNode).length > 0) {
64
63
  (0, _focusBorders.addFocusBorders)(trapNode);
65
64
  }
66
- return function () {
65
+ return () => {
67
66
  if (trapNode) {
68
67
  (0, _focusBorders.removeFocusBorders)(trapNode);
69
68
  }
70
69
  };
71
70
  }, [disabled]);
72
71
  };
73
- var uniqueId = 0;
74
- var getUniqueId = function getUniqueId(prefix) {
75
- return "".concat(prefix, "-").concat(Math.random().toString(36).slice(2), "-").concat(uniqueId++);
76
- };
72
+ let uniqueId = 0;
73
+ const getUniqueId = prefix => `${prefix}-${Math.random().toString(36).slice(2)}-${uniqueId++}`;
77
74
 
78
75
  /**
79
76
  * # Focus lock hook merging
@@ -106,10 +103,10 @@ var getUniqueId = function getUniqueId(prefix) {
106
103
  * If new update requires to remove some hooks – add mocks instead of them.
107
104
  * 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.
108
105
  */
109
- var focusLockVersion = 5;
110
- var globalFocusLockHookKey = '__intergalactic_focus_lock_hook_react_v_respectful';
111
- var focusLockAllTraps = new Set();
112
- var focusLockUsedInMountedComponents = new Set();
106
+ const focusLockVersion = 5;
107
+ const globalFocusLockHookKey = '__intergalactic_focus_lock_hook_react_v_respectful';
108
+ const focusLockAllTraps = new Set();
109
+ const focusLockUsedInMountedComponents = new Set();
113
110
  /** Focus master is a special mode in which focus lock might work.
114
111
  * Normally, focus lock hook allows user focus to move freely between
115
112
  * all active focus traps. When component provides `focusMaster=true`
@@ -118,86 +115,81 @@ var focusLockUsedInMountedComponents = new Set();
118
115
  * also have some visual backdrop.
119
116
  * The last element in focus masters stack is considered as a current focus master.
120
117
  */
121
- var focusMastersStack = [];
122
- var noop = function noop() {};
123
- var useUniqueIdHookMock = function useUniqueIdHookMock(React) {
118
+ const focusMastersStack = [];
119
+ const noop = () => {};
120
+ const useUniqueIdHookMock = React => {
124
121
  React.useState(undefined);
125
- var useEnhancedEffect = (0, _canUseDOM["default"])() ? React.useLayoutEffect : React.useEffect;
122
+ const useEnhancedEffect = (0, _canUseDOM.default)() ? React.useLayoutEffect : React.useEffect;
126
123
  useEnhancedEffect(noop, []);
127
124
  };
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;
125
+ const useFocusLockHook = (React, trapRef, autoFocus, returnFocusTo, disabled = false, focusMaster = false, onFocusOut) => {
132
126
  useFocusBorders(React, disabled, trapRef);
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 () {
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(() => {
139
133
  if (!focusCameFrom) return;
140
134
  if (autoTriggerRef.current) return;
141
135
  autoTriggerRef.current = focusCameFrom;
142
136
  }, 0);
143
137
  if (lastUserInteractionRef.current === 'mouse') return;
144
- Promise.resolve().then(function () {
138
+ Promise.resolve().then(() => {
145
139
  if (!trapRef.current) return;
146
- var currentFocusMaster = focusMastersStack[focusMastersStack.length - 1];
140
+ const currentFocusMaster = focusMastersStack[focusMastersStack.length - 1];
147
141
  if (currentFocusMaster && currentFocusMaster !== trapRef.current) return;
148
- var trapNodes = currentFocusMaster ? [trapRef.current] : [trapRef.current].concat((0, _toConsumableArray2["default"])(focusLockAllTraps));
142
+ const trapNodes = currentFocusMaster ? [trapRef.current] : [trapRef.current, ...focusLockAllTraps];
149
143
  if ((0, _isFocusInside.isFocusInside)(trapNodes, focusMovedTo)) return;
150
- if ((0, _typeof2["default"])(returnFocusTo) === 'object' && returnFocusTo !== null && returnFocusTo !== void 0 && returnFocusTo.current && (0, _hasParent.hasParent)(focusMovedTo, returnFocusTo.current)) return;
144
+ if (typeof returnFocusTo === 'object' && returnFocusTo?.current && (0, _hasParent.hasParent)(focusMovedTo, returnFocusTo.current)) return;
151
145
  if (focusCameFrom && focusMovedTo) {
152
146
  (0, _setFocus.setFocus)(trapRef.current, focusCameFrom, focusMovedTo);
153
147
  }
154
- onFocusOut === null || onFocusOut === void 0 || onFocusOut(event);
148
+ onFocusOut?.(event);
155
149
  });
156
150
  }, [onFocusOut]);
157
- var handleMouseEvent = React.useCallback(function () {
151
+ const handleMouseEvent = React.useCallback(() => {
158
152
  lastUserInteractionRef.current = 'mouse';
159
153
  }, []);
160
- var handleKeyboardEvent = React.useCallback(function () {
154
+ const handleKeyboardEvent = React.useCallback(() => {
161
155
  lastUserInteractionRef.current = 'keyboard';
162
156
  }, []);
163
- var returnFocus = React.useCallback(function () {
164
- var trapNode = trapRef.current;
157
+ const returnFocus = React.useCallback(() => {
158
+ const trapNode = trapRef.current;
165
159
  if (trapNode && !(0, _isFocusInside.isFocusInside)(trapNode)) return;
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 () {
160
+ const focusMastersStackCount = focusMastersStack.length;
161
+ if (typeof returnFocusTo === 'object' && returnFocusTo?.current) {
162
+ const returnFocusNode = returnFocusTo?.current;
163
+ setTimeout(() => {
170
164
  if (focusMastersStackCount !== focusMastersStack.length) {
171
165
  (0, _setFocus.setFocus)(returnFocusNode, trapNode);
172
166
  }
173
167
  }, 0);
174
168
  }
175
169
  if (returnFocusTo === 'auto' && autoTriggerRef.current) {
176
- var autoTrigger = autoTriggerRef.current;
177
- setTimeout(function () {
170
+ const autoTrigger = autoTriggerRef.current;
171
+ setTimeout(() => {
178
172
  if (focusMastersStackCount !== focusMastersStack.length || autoFocus === 'enforced') {
179
173
  (0, _setFocus.setFocus)(autoTrigger, trapNode);
180
174
  }
181
175
  }, 0);
182
176
  }
183
177
  }, [returnFocusTo]);
184
- React.useEffect(function () {
185
- if ((0, _typeof2["default"])(trapRef) !== 'object' || trapRef === null) return;
186
- var node = trapRef.current;
178
+ React.useEffect(() => {
179
+ if (typeof trapRef !== 'object' || trapRef === null) return;
180
+ const node = trapRef.current;
187
181
  if (!node) return;
188
182
  focusLockAllTraps.add(node);
189
- return function () {
183
+ return () => {
190
184
  if (!node) return;
191
- focusLockAllTraps["delete"](node);
185
+ focusLockAllTraps.delete(node);
192
186
  };
193
187
  }, [disabled]);
194
- React.useEffect(function () {
188
+ React.useEffect(() => {
195
189
  if (disabled) return;
196
- if (!(0, _canUseDOM["default"])()) return;
190
+ if (!(0, _canUseDOM.default)()) return;
197
191
  if (!trapRef.current) return;
198
- var focusableChildren = Array.from(trapRef.current.children).flatMap(function (node) {
199
- return (0, _getFocusableIn.getFocusableIn)(node);
200
- });
192
+ const focusableChildren = Array.from(trapRef.current.children).flatMap(node => (0, _getFocusableIn.getFocusableIn)(node));
201
193
  if (focusableChildren.length === 0 && autoFocus !== 'enforced') return;
202
194
  document.body.addEventListener('focusout', handleFocusOut);
203
195
  document.body.addEventListener(syntheticEvents.blur, handleFocusOut);
@@ -206,16 +198,15 @@ var useFocusLockHook = function useFocusLockHook(React, trapRef, autoFocus, retu
206
198
  document.body.addEventListener('keydown', handleKeyboardEvent);
207
199
  document.body.addEventListener(syntheticEvents.keydown, handleKeyboardEvent);
208
200
  if (autoFocus) {
209
- setTimeout(function () {
201
+ setTimeout(() => {
210
202
  if (autoFocus === 'enforced' && focusableChildren.length === 0 && focusMaster) {
211
- var _trapRef$current;
212
- (_trapRef$current = trapRef.current) === null || _trapRef$current === void 0 || _trapRef$current.focus();
203
+ trapRef.current?.focus();
213
204
  return;
214
205
  }
215
- (0, _setFocus.setFocus)(trapRef.current, (0, _typeof2["default"])(returnFocusTo) === 'object' ? returnFocusTo === null || returnFocusTo === void 0 ? void 0 : returnFocusTo.current : document.body);
206
+ (0, _setFocus.setFocus)(trapRef.current, typeof returnFocusTo === 'object' ? returnFocusTo?.current : document.body);
216
207
  }, 0);
217
208
  }
218
- return function () {
209
+ return () => {
219
210
  document.body.removeEventListener('focusout', handleFocusOut);
220
211
  document.body.removeEventListener(syntheticEvents.blur, handleFocusOut);
221
212
  document.body.removeEventListener('mousedown', handleMouseEvent);
@@ -226,19 +217,17 @@ var useFocusLockHook = function useFocusLockHook(React, trapRef, autoFocus, retu
226
217
  autoTriggerRef.current = null;
227
218
  };
228
219
  }, [disabled, autoFocus, returnFocusTo, returnFocus]);
229
- React.useEffect(function () {
230
- if ((0, _typeof2["default"])(trapRef) !== 'object' || trapRef === null) return;
220
+ React.useEffect(() => {
221
+ if (typeof trapRef !== 'object' || trapRef === null) return;
231
222
  if (disabled) return;
232
- if (!(0, _canUseDOM["default"])()) return;
223
+ if (!(0, _canUseDOM.default)()) return;
233
224
  if (!trapRef.current) return;
234
- var focusableChildren = Array.from(trapRef.current.children).flatMap(function (node) {
235
- return (0, _getFocusableIn.getFocusableIn)(node);
236
- });
225
+ const focusableChildren = Array.from(trapRef.current.children).flatMap(node => (0, _getFocusableIn.getFocusableIn)(node));
237
226
  if (focusableChildren.length === 0) return;
238
227
  if (focusMaster) {
239
228
  focusMastersStack.push(trapRef.current);
240
229
  }
241
- return function () {
230
+ return () => {
242
231
  if (!focusMaster) return;
243
232
  if (focusMastersStack[focusMastersStack.length - 1] === trapRef.current) {
244
233
  focusMastersStack.pop();
@@ -248,16 +237,16 @@ var useFocusLockHook = function useFocusLockHook(React, trapRef, autoFocus, retu
248
237
  };
249
238
  }, [disabled, focusMaster]);
250
239
  useUniqueIdHookMock(React);
251
- React.useEffect(function () {
252
- var id = getUniqueId('focus-lock-consumer');
240
+ React.useEffect(() => {
241
+ const id = getUniqueId('focus-lock-consumer');
253
242
  if (disabled) return;
254
243
  focusLockUsedInMountedComponents.add(id);
255
- return function () {
256
- focusLockUsedInMountedComponents["delete"](id);
244
+ return () => {
245
+ focusLockUsedInMountedComponents.delete(id);
257
246
  };
258
247
  }, [disabled]);
259
248
  };
260
- var establishHookAsGlobal = function establishHookAsGlobal() {
249
+ const establishHookAsGlobal = () => {
261
250
  globalThis[globalFocusLockHookKey] = {
262
251
  hook: useFocusLockHook,
263
252
  version: focusLockVersion,
@@ -269,24 +258,21 @@ if (!globalThis[globalFocusLockHookKey]) {
269
258
  } else if (typeof globalThis[globalFocusLockHookKey].version !== 'number') {
270
259
  establishHookAsGlobal();
271
260
  } else {
272
- var _globalFocusLockHookK = globalThis[globalFocusLockHookKey],
273
- theirVersion = _globalFocusLockHookK.version,
274
- usedInComponents = _globalFocusLockHookK.usedInComponents;
261
+ const {
262
+ version: theirVersion,
263
+ usedInComponents
264
+ } = globalThis[globalFocusLockHookKey];
275
265
  if (focusLockVersion > theirVersion && usedInComponents.size === 0) {
276
266
  establishHookAsGlobal();
277
267
  }
278
268
  }
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);
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);
286
272
  };
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;
273
+ exports.useFocusLock = useFocusLock;
274
+ const hasFocusableIn = element => {
275
+ return Array.from(element.children).flatMap(node => (0, _getFocusableIn.getFocusableIn)(node)).length > 0;
291
276
  };
277
+ exports.hasFocusableIn = hasFocusableIn;
292
278
  //# 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","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":[]}
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":"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","ignoreList":[]}