@tamagui/react-native-web-internals 2.7.7 → 3.0.0-beta.643.1

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 (286) hide show
  1. package/dist/cjs/StyleSheet/compiler/createReactDOMStyle.cjs +151 -136
  2. package/dist/cjs/StyleSheet/compiler/hash.cjs +15 -18
  3. package/dist/cjs/StyleSheet/compiler/hyphenateStyleName.cjs +21 -24
  4. package/dist/cjs/StyleSheet/compiler/index.cjs +295 -321
  5. package/dist/cjs/StyleSheet/compiler/normalizeColor.cjs +20 -23
  6. package/dist/cjs/StyleSheet/compiler/normalizeValueWithProperty.cjs +32 -35
  7. package/dist/cjs/StyleSheet/compiler/resolveShadowValue.cjs +27 -38
  8. package/dist/cjs/StyleSheet/dom/createCSSStyleSheet.cjs +37 -40
  9. package/dist/cjs/StyleSheet/dom/createOrderedCSSStyleSheet.cjs +108 -111
  10. package/dist/cjs/StyleSheet/dom/index.cjs +70 -72
  11. package/dist/cjs/StyleSheet/index.cjs +33 -34
  12. package/dist/cjs/StyleSheet/preprocess.cjs +74 -94
  13. package/dist/cjs/StyleSheet/validate.cjs +72 -75
  14. package/dist/cjs/TextAncestorContext.cjs +15 -18
  15. package/dist/cjs/colorProps.cjs +25 -28
  16. package/dist/cjs/index.cjs +49 -50
  17. package/dist/cjs/modules/AccessibilityUtil/index.cjs +18 -21
  18. package/dist/cjs/modules/AccessibilityUtil/isDisabled.cjs +15 -18
  19. package/dist/cjs/modules/AccessibilityUtil/propsToAccessibilityComponent.cjs +46 -49
  20. package/dist/cjs/modules/AccessibilityUtil/propsToAriaRole.cjs +34 -39
  21. package/dist/cjs/modules/AssetRegistry/index.cjs +18 -19
  22. package/dist/cjs/modules/ImageLoader/index.cjs +135 -141
  23. package/dist/cjs/modules/InteractionManager.cjs +212 -219
  24. package/dist/cjs/modules/Platform/index.cjs +18 -21
  25. package/dist/cjs/modules/TextInputState/index.cjs +55 -58
  26. package/dist/cjs/modules/UIManager/index.cjs +46 -51
  27. package/dist/cjs/modules/canUseDOM.cjs +15 -18
  28. package/dist/cjs/modules/createDOMProps/index.cjs +289 -358
  29. package/dist/cjs/modules/createEventHandle/index.cjs +57 -62
  30. package/dist/cjs/modules/dismissKeyboard/index.cjs +16 -19
  31. package/dist/cjs/modules/forwardedProps/index.cjs +128 -130
  32. package/dist/cjs/modules/getBoundingClientRect/index.cjs +22 -25
  33. package/dist/cjs/modules/invariant.cjs +26 -27
  34. package/dist/cjs/modules/isSelectionValid/index.cjs +22 -25
  35. package/dist/cjs/modules/isWebColor/index.cjs +15 -18
  36. package/dist/cjs/modules/mergeRefs/index.cjs +31 -34
  37. package/dist/cjs/modules/modality/index.cjs +131 -134
  38. package/dist/cjs/modules/multiplyStyleLengthValue/index.cjs +25 -28
  39. package/dist/cjs/modules/normalizeColor/index.cjs +28 -31
  40. package/dist/cjs/modules/pick/index.cjs +24 -27
  41. package/dist/cjs/modules/processColor/index.cjs +28 -36
  42. package/dist/cjs/modules/requestIdleCallback/index.cjs +28 -29
  43. package/dist/cjs/modules/setValueForStyles/dangerousStyleValue.cjs +39 -42
  44. package/dist/cjs/modules/setValueForStyles/index.cjs +31 -34
  45. package/dist/cjs/modules/unitlessNumbers/index.cjs +74 -75
  46. package/dist/cjs/modules/useElementLayout/index.cjs +24 -31
  47. package/dist/cjs/modules/useEvent/index.cjs +40 -43
  48. package/dist/cjs/modules/useHover/index.cjs +113 -118
  49. package/dist/cjs/modules/useLayoutEffect/index.cjs +18 -26
  50. package/dist/cjs/modules/useLocale/index.cjs +33 -43
  51. package/dist/cjs/modules/useLocale/isLocaleRTL.cjs +66 -76
  52. package/dist/cjs/modules/useMergeRefs/index.cjs +19 -29
  53. package/dist/cjs/modules/usePlatformMethods/index.cjs +24 -30
  54. package/dist/cjs/modules/useStable/index.cjs +24 -32
  55. package/dist/cjs/styleTypes.cjs +10 -11
  56. package/dist/cjs/types.cjs +10 -11
  57. package/dist/esm/StyleSheet/compiler/createReactDOMStyle.mjs +137 -119
  58. package/dist/esm/StyleSheet/compiler/createReactDOMStyle.mjs.map +1 -1
  59. package/dist/esm/StyleSheet/compiler/hash.mjs +2 -2
  60. package/dist/esm/StyleSheet/compiler/hyphenateStyleName.mjs +7 -6
  61. package/dist/esm/StyleSheet/compiler/hyphenateStyleName.mjs.map +1 -1
  62. package/dist/esm/StyleSheet/compiler/index.mjs +279 -302
  63. package/dist/esm/StyleSheet/compiler/index.mjs.map +1 -1
  64. package/dist/esm/StyleSheet/compiler/normalizeColor.mjs +7 -5
  65. package/dist/esm/StyleSheet/compiler/normalizeColor.mjs.map +1 -1
  66. package/dist/esm/StyleSheet/compiler/normalizeValueWithProperty.mjs +19 -17
  67. package/dist/esm/StyleSheet/compiler/normalizeValueWithProperty.mjs.map +1 -1
  68. package/dist/esm/StyleSheet/compiler/resolveShadowValue.mjs +14 -20
  69. package/dist/esm/StyleSheet/compiler/resolveShadowValue.mjs.map +1 -1
  70. package/dist/esm/StyleSheet/dom/createCSSStyleSheet.mjs +24 -22
  71. package/dist/esm/StyleSheet/dom/createCSSStyleSheet.mjs.map +1 -1
  72. package/dist/esm/StyleSheet/dom/createOrderedCSSStyleSheet.mjs +94 -93
  73. package/dist/esm/StyleSheet/dom/createOrderedCSSStyleSheet.mjs.map +1 -1
  74. package/dist/esm/StyleSheet/dom/index.mjs +57 -54
  75. package/dist/esm/StyleSheet/dom/index.mjs.map +1 -1
  76. package/dist/esm/StyleSheet/index.mjs +18 -17
  77. package/dist/esm/StyleSheet/index.mjs.map +1 -1
  78. package/dist/esm/StyleSheet/preprocess.mjs +58 -75
  79. package/dist/esm/StyleSheet/preprocess.mjs.map +1 -1
  80. package/dist/esm/StyleSheet/validate.mjs +58 -57
  81. package/dist/esm/StyleSheet/validate.mjs.map +1 -1
  82. package/dist/esm/TextAncestorContext.mjs +2 -0
  83. package/dist/esm/TextAncestorContext.mjs.map +1 -1
  84. package/dist/esm/colorProps.mjs +11 -10
  85. package/dist/esm/colorProps.mjs.map +1 -1
  86. package/dist/esm/index.js +22 -15
  87. package/dist/esm/index.mjs +22 -15
  88. package/dist/esm/modules/AccessibilityUtil/index.mjs +5 -3
  89. package/dist/esm/modules/AccessibilityUtil/index.mjs.map +1 -1
  90. package/dist/esm/modules/AccessibilityUtil/isDisabled.mjs +2 -1
  91. package/dist/esm/modules/AccessibilityUtil/isDisabled.mjs.map +1 -1
  92. package/dist/esm/modules/AccessibilityUtil/propsToAccessibilityComponent.mjs +33 -31
  93. package/dist/esm/modules/AccessibilityUtil/propsToAccessibilityComponent.mjs.map +1 -1
  94. package/dist/esm/modules/AccessibilityUtil/propsToAriaRole.mjs +20 -21
  95. package/dist/esm/modules/AccessibilityUtil/propsToAriaRole.mjs.map +1 -1
  96. package/dist/esm/modules/AssetRegistry/index.mjs +3 -2
  97. package/dist/esm/modules/AssetRegistry/index.mjs.map +1 -1
  98. package/dist/esm/modules/ImageLoader/index.mjs +120 -124
  99. package/dist/esm/modules/ImageLoader/index.mjs.map +1 -1
  100. package/dist/esm/modules/InteractionManager.mjs +199 -201
  101. package/dist/esm/modules/InteractionManager.mjs.map +1 -1
  102. package/dist/esm/modules/Platform/index.mjs +4 -3
  103. package/dist/esm/modules/Platform/index.mjs.map +1 -1
  104. package/dist/esm/modules/TextInputState/index.mjs +42 -40
  105. package/dist/esm/modules/TextInputState/index.mjs.map +1 -1
  106. package/dist/esm/modules/UIManager/index.mjs +33 -33
  107. package/dist/esm/modules/UIManager/index.mjs.map +1 -1
  108. package/dist/esm/modules/canUseDOM.mjs +1 -0
  109. package/dist/esm/modules/canUseDOM.mjs.map +1 -1
  110. package/dist/esm/modules/createDOMProps/index.mjs +275 -341
  111. package/dist/esm/modules/createDOMProps/index.mjs.map +1 -1
  112. package/dist/esm/modules/createEventHandle/index.mjs +44 -44
  113. package/dist/esm/modules/createEventHandle/index.mjs.map +1 -1
  114. package/dist/esm/modules/dismissKeyboard/index.mjs +3 -1
  115. package/dist/esm/modules/dismissKeyboard/index.mjs.map +1 -1
  116. package/dist/esm/modules/forwardedProps/index.mjs +104 -104
  117. package/dist/esm/modules/forwardedProps/index.mjs.map +1 -1
  118. package/dist/esm/modules/getBoundingClientRect/index.mjs +8 -7
  119. package/dist/esm/modules/getBoundingClientRect/index.mjs.map +1 -1
  120. package/dist/esm/modules/invariant.mjs +11 -10
  121. package/dist/esm/modules/invariant.mjs.map +1 -1
  122. package/dist/esm/modules/isSelectionValid/index.mjs +8 -7
  123. package/dist/esm/modules/isSelectionValid/index.mjs.map +1 -1
  124. package/dist/esm/modules/isWebColor/index.mjs +2 -1
  125. package/dist/esm/modules/isWebColor/index.mjs.map +1 -1
  126. package/dist/esm/modules/mergeRefs/index.mjs +17 -16
  127. package/dist/esm/modules/mergeRefs/index.mjs.map +1 -1
  128. package/dist/esm/modules/modality/index.mjs +115 -115
  129. package/dist/esm/modules/modality/index.mjs.map +1 -1
  130. package/dist/esm/modules/multiplyStyleLengthValue/index.mjs +11 -10
  131. package/dist/esm/modules/multiplyStyleLengthValue/index.mjs.map +1 -1
  132. package/dist/esm/modules/normalizeColor/index.mjs +15 -13
  133. package/dist/esm/modules/normalizeColor/index.mjs.map +1 -1
  134. package/dist/esm/modules/pick/index.mjs +10 -9
  135. package/dist/esm/modules/pick/index.mjs.map +1 -1
  136. package/dist/esm/modules/processColor/index.mjs +12 -10
  137. package/dist/esm/modules/processColor/index.mjs.map +1 -1
  138. package/dist/esm/modules/requestIdleCallback/index.mjs +14 -12
  139. package/dist/esm/modules/requestIdleCallback/index.mjs.map +1 -1
  140. package/dist/esm/modules/setValueForStyles/dangerousStyleValue.mjs +27 -25
  141. package/dist/esm/modules/setValueForStyles/dangerousStyleValue.mjs.map +1 -1
  142. package/dist/esm/modules/setValueForStyles/index.mjs +18 -16
  143. package/dist/esm/modules/setValueForStyles/index.mjs.map +1 -1
  144. package/dist/esm/modules/unitlessNumbers/index.mjs +60 -57
  145. package/dist/esm/modules/unitlessNumbers/index.mjs.map +1 -1
  146. package/dist/esm/modules/useElementLayout/index.mjs +12 -14
  147. package/dist/esm/modules/useElementLayout/index.mjs.map +1 -1
  148. package/dist/esm/modules/useEvent/index.mjs +28 -26
  149. package/dist/esm/modules/useEvent/index.mjs.map +1 -1
  150. package/dist/esm/modules/useHover/index.mjs +101 -101
  151. package/dist/esm/modules/useHover/index.mjs.map +1 -1
  152. package/dist/esm/modules/useLayoutEffect/index.mjs +2 -0
  153. package/dist/esm/modules/useLayoutEffect/index.mjs.map +1 -1
  154. package/dist/esm/modules/useLocale/index.mjs +15 -17
  155. package/dist/esm/modules/useLocale/index.mjs.map +1 -1
  156. package/dist/esm/modules/useLocale/isLocaleRTL.mjs +52 -58
  157. package/dist/esm/modules/useLocale/isLocaleRTL.mjs.map +1 -1
  158. package/dist/esm/modules/useMergeRefs/index.mjs +3 -3
  159. package/dist/esm/modules/useMergeRefs/index.mjs.map +1 -1
  160. package/dist/esm/modules/usePlatformMethods/index.mjs +11 -12
  161. package/dist/esm/modules/usePlatformMethods/index.mjs.map +1 -1
  162. package/dist/esm/modules/useStable/index.mjs +8 -6
  163. package/dist/esm/modules/useStable/index.mjs.map +1 -1
  164. package/dist/esm/styleTypes.mjs +0 -2
  165. package/dist/esm/types.mjs +0 -2
  166. package/package.json +8 -8
  167. package/src/modules/createDOMProps/index.tsx +3 -12
  168. package/src/modules/forwardedProps/index.tsx +0 -1
  169. package/src/modules/mergeRefs/index.tsx +1 -1
  170. package/types/StyleSheet/compiler/createReactDOMStyle.d.ts.map +1 -1
  171. package/types/StyleSheet/compiler/normalizeColor.d.ts.map +1 -1
  172. package/types/StyleSheet/compiler/resolveShadowValue.d.ts.map +1 -1
  173. package/types/StyleSheet/index.d.ts +15 -16
  174. package/types/StyleSheet/index.d.ts.map +1 -1
  175. package/types/StyleSheet/preprocess.d.ts +1 -1
  176. package/types/StyleSheet/preprocess.d.ts.map +1 -1
  177. package/types/colorProps.d.ts.map +1 -1
  178. package/types/modules/AccessibilityUtil/index.d.ts +6 -5
  179. package/types/modules/AccessibilityUtil/index.d.ts.map +1 -1
  180. package/types/modules/AccessibilityUtil/isDisabled.d.ts.map +1 -1
  181. package/types/modules/AccessibilityUtil/propsToAccessibilityComponent.d.ts.map +1 -1
  182. package/types/modules/AccessibilityUtil/propsToAriaRole.d.ts.map +1 -1
  183. package/types/modules/ImageLoader/index.d.ts +1 -1
  184. package/types/modules/ImageLoader/index.d.ts.map +1 -1
  185. package/types/modules/InteractionManager.d.ts +3 -3
  186. package/types/modules/InteractionManager.d.ts.map +1 -1
  187. package/types/modules/Platform/index.d.ts.map +1 -1
  188. package/types/modules/TextInputState/index.d.ts.map +1 -1
  189. package/types/modules/createDOMProps/index.d.ts.map +1 -1
  190. package/types/modules/forwardedProps/index.d.ts +70 -74
  191. package/types/modules/forwardedProps/index.d.ts.map +1 -1
  192. package/types/modules/getBoundingClientRect/index.d.ts.map +1 -1
  193. package/types/modules/isWebColor/index.d.ts.map +1 -1
  194. package/types/modules/multiplyStyleLengthValue/index.d.ts.map +1 -1
  195. package/types/modules/normalizeColor/index.d.ts.map +1 -1
  196. package/types/modules/processColor/index.d.ts.map +1 -1
  197. package/types/modules/requestIdleCallback/index.d.ts +3 -1
  198. package/types/modules/requestIdleCallback/index.d.ts.map +1 -1
  199. package/types/modules/unitlessNumbers/index.d.ts.map +1 -1
  200. package/types/modules/useLayoutEffect/index.d.ts +1 -1
  201. package/types/modules/useLayoutEffect/index.d.ts.map +1 -1
  202. package/dist/cjs/StyleSheet/__tests__/compiler-createReactDOMStyle-test.cjs +0 -265
  203. package/dist/cjs/StyleSheet/__tests__/compiler-test.cjs +0 -419
  204. package/dist/cjs/StyleSheet/__tests__/dom-createOrderedCSSStyleSheet-test.cjs +0 -160
  205. package/dist/cjs/StyleSheet/__tests__/index-test.cjs +0 -436
  206. package/dist/cjs/StyleSheet/__tests__/preprocess-test.cjs +0 -121
  207. package/dist/cjs/StyleSheet/__tests__/validate-test.cjs +0 -51
  208. package/dist/cjs/modules/AccessibilityUtil/__tests__/propsToAccessibilityComponent-test.cjs +0 -57
  209. package/dist/cjs/modules/AccessibilityUtil/__tests__/propsToAriaRole-test.cjs +0 -46
  210. package/dist/cjs/modules/Platform/__tests__/index-test.cjs +0 -56
  211. package/dist/cjs/modules/UIManager/__tests__/index-test.cjs +0 -111
  212. package/dist/cjs/modules/createDOMProps/__tests__/index-test.cjs +0 -177
  213. package/dist/cjs/modules/createEventHandle/__tests__/index-test.cjs +0 -422
  214. package/dist/cjs/modules/mergeRefs/__tests__/index-test.cjs +0 -48
  215. package/dist/cjs/modules/modality/__tests__/index-test.cjs +0 -59
  216. package/dist/cjs/modules/multiplyStyleLengthValue/__tests__/index-test.cjs +0 -38
  217. package/dist/cjs/modules/processColor/__tests__/index-test.cjs +0 -85
  218. package/dist/cjs/modules/useEvent/__tests__/index-test.cjs +0 -490
  219. package/dist/cjs/modules/useHover/__tests__/index-test.cjs +0 -382
  220. package/dist/cjs/modules/useMergeRefs/__tests__/index-test.cjs +0 -125
  221. package/dist/cjs/modules/useStable/__tests__/index-test.cjs +0 -122
  222. package/dist/esm/StyleSheet/__tests__/compiler-createReactDOMStyle-test.mjs +0 -242
  223. package/dist/esm/StyleSheet/__tests__/compiler-createReactDOMStyle-test.mjs.map +0 -1
  224. package/dist/esm/StyleSheet/__tests__/compiler-test.mjs +0 -420
  225. package/dist/esm/StyleSheet/__tests__/compiler-test.mjs.map +0 -1
  226. package/dist/esm/StyleSheet/__tests__/dom-createOrderedCSSStyleSheet-test.mjs +0 -137
  227. package/dist/esm/StyleSheet/__tests__/dom-createOrderedCSSStyleSheet-test.mjs.map +0 -1
  228. package/dist/esm/StyleSheet/__tests__/index-test.mjs +0 -413
  229. package/dist/esm/StyleSheet/__tests__/index-test.mjs.map +0 -1
  230. package/dist/esm/StyleSheet/__tests__/preprocess-test.mjs +0 -122
  231. package/dist/esm/StyleSheet/__tests__/preprocess-test.mjs.map +0 -1
  232. package/dist/esm/StyleSheet/__tests__/validate-test.mjs +0 -52
  233. package/dist/esm/StyleSheet/__tests__/validate-test.mjs.map +0 -1
  234. package/dist/esm/StyleSheet/compiler/hash.mjs.map +0 -1
  235. package/dist/esm/index.js.map +0 -1
  236. package/dist/esm/index.mjs.map +0 -1
  237. package/dist/esm/modules/AccessibilityUtil/__tests__/propsToAccessibilityComponent-test.mjs +0 -34
  238. package/dist/esm/modules/AccessibilityUtil/__tests__/propsToAccessibilityComponent-test.mjs.map +0 -1
  239. package/dist/esm/modules/AccessibilityUtil/__tests__/propsToAriaRole-test.mjs +0 -23
  240. package/dist/esm/modules/AccessibilityUtil/__tests__/propsToAriaRole-test.mjs.map +0 -1
  241. package/dist/esm/modules/Platform/__tests__/index-test.mjs +0 -33
  242. package/dist/esm/modules/Platform/__tests__/index-test.mjs.map +0 -1
  243. package/dist/esm/modules/UIManager/__tests__/index-test.mjs +0 -88
  244. package/dist/esm/modules/UIManager/__tests__/index-test.mjs.map +0 -1
  245. package/dist/esm/modules/createDOMProps/__tests__/index-test.mjs +0 -154
  246. package/dist/esm/modules/createDOMProps/__tests__/index-test.mjs.map +0 -1
  247. package/dist/esm/modules/createEventHandle/__tests__/index-test.mjs +0 -399
  248. package/dist/esm/modules/createEventHandle/__tests__/index-test.mjs.map +0 -1
  249. package/dist/esm/modules/mergeRefs/__tests__/index-test.mjs +0 -25
  250. package/dist/esm/modules/mergeRefs/__tests__/index-test.mjs.map +0 -1
  251. package/dist/esm/modules/modality/__tests__/index-test.mjs +0 -60
  252. package/dist/esm/modules/modality/__tests__/index-test.mjs.map +0 -1
  253. package/dist/esm/modules/multiplyStyleLengthValue/__tests__/index-test.mjs +0 -15
  254. package/dist/esm/modules/multiplyStyleLengthValue/__tests__/index-test.mjs.map +0 -1
  255. package/dist/esm/modules/processColor/__tests__/index-test.mjs +0 -62
  256. package/dist/esm/modules/processColor/__tests__/index-test.mjs.map +0 -1
  257. package/dist/esm/modules/useEvent/__tests__/index-test.mjs +0 -467
  258. package/dist/esm/modules/useEvent/__tests__/index-test.mjs.map +0 -1
  259. package/dist/esm/modules/useHover/__tests__/index-test.mjs +0 -359
  260. package/dist/esm/modules/useHover/__tests__/index-test.mjs.map +0 -1
  261. package/dist/esm/modules/useMergeRefs/__tests__/index-test.mjs +0 -102
  262. package/dist/esm/modules/useMergeRefs/__tests__/index-test.mjs.map +0 -1
  263. package/dist/esm/modules/useStable/__tests__/index-test.mjs +0 -99
  264. package/dist/esm/modules/useStable/__tests__/index-test.mjs.map +0 -1
  265. package/dist/esm/styleTypes.mjs.map +0 -1
  266. package/dist/esm/types.mjs.map +0 -1
  267. package/src/StyleSheet/__tests__/compiler-createReactDOMStyle-test.tsx +0 -236
  268. package/src/StyleSheet/__tests__/compiler-test.tsx +0 -426
  269. package/src/StyleSheet/__tests__/dom-createOrderedCSSStyleSheet-test.tsx +0 -169
  270. package/src/StyleSheet/__tests__/index-test.tsx +0 -406
  271. package/src/StyleSheet/__tests__/preprocess-test.tsx +0 -107
  272. package/src/StyleSheet/__tests__/validate-test.tsx +0 -42
  273. package/src/modules/AccessibilityUtil/__tests__/propsToAccessibilityComponent-test.tsx +0 -44
  274. package/src/modules/AccessibilityUtil/__tests__/propsToAriaRole-test.tsx +0 -25
  275. package/src/modules/Platform/__tests__/index-test.tsx +0 -45
  276. package/src/modules/UIManager/__tests__/index-test.tsx +0 -87
  277. package/src/modules/createDOMProps/__tests__/index-test.tsx +0 -138
  278. package/src/modules/createEventHandle/__tests__/index-test.tsx +0 -459
  279. package/src/modules/mergeRefs/__tests__/index-test.tsx +0 -32
  280. package/src/modules/modality/__tests__/index-test.tsx +0 -66
  281. package/src/modules/multiplyStyleLengthValue/__tests__/index-test.tsx +0 -23
  282. package/src/modules/processColor/__tests__/index-test.tsx +0 -78
  283. package/src/modules/useEvent/__tests__/index-test.tsx +0 -511
  284. package/src/modules/useHover/__tests__/index-test.tsx +0 -342
  285. package/src/modules/useMergeRefs/__tests__/index-test.tsx +0 -91
  286. package/src/modules/useStable/__tests__/index-test.tsx +0 -101
@@ -1,511 +0,0 @@
1
- /**
2
- * Copyright (c) Meta Platforms, Inc. and affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- *
7
- * @flow strict-local
8
- */
9
-
10
- import { createEventTarget } from 'dom-event-testing-library'
11
- import * as React from 'react'
12
- import * as ReactDOM from 'react-dom'
13
- import { act } from 'react-dom/test-utils'
14
-
15
- import useEvent from '..'
16
-
17
- function createRoot(rootNode) {
18
- return {
19
- render(element) {
20
- ReactDOM.render(element, rootNode)
21
- },
22
- }
23
- }
24
-
25
- describe('use-event', () => {
26
- let root
27
- let rootNode
28
-
29
- beforeEach(() => {
30
- rootNode = document.createElement('div')
31
- document.body.appendChild(rootNode)
32
- root = createRoot(rootNode)
33
- })
34
-
35
- afterEach(() => {
36
- root.render(null)
37
- document.body.removeChild(rootNode)
38
- rootNode = null
39
- root = null
40
- })
41
-
42
- describe('setListener()', () => {
43
- test('event dispatched on target', () => {
44
- const listener = jest.fn()
45
- const targetRef = React.createRef()
46
-
47
- function Component() {
48
- const addClickListener = useEvent('click')
49
- React.useEffect(() => {
50
- addClickListener(targetRef.current, listener)
51
- })
52
- return <div ref={targetRef} />
53
- }
54
-
55
- act(() => {
56
- root.render(<Component />)
57
- })
58
-
59
- const target = createEventTarget(targetRef.current)
60
-
61
- act(() => {
62
- target.click()
63
- })
64
-
65
- expect(listener).toBeCalledTimes(1)
66
- })
67
-
68
- test('event dispatched on parent', () => {
69
- const listener = jest.fn()
70
- const listenerCapture = jest.fn()
71
- const targetRef = React.createRef()
72
- const parentRef = React.createRef()
73
-
74
- function Component() {
75
- const addClickListener = useEvent('click')
76
- const addClickCaptureListener = useEvent('click', { capture: true })
77
-
78
- React.useEffect(() => {
79
- addClickListener(targetRef.current, listener)
80
- addClickCaptureListener(targetRef.current, listenerCapture)
81
- })
82
- return (
83
- <div ref={parentRef}>
84
- <div ref={targetRef} />
85
- </div>
86
- )
87
- }
88
-
89
- act(() => {
90
- root.render(<Component />)
91
- })
92
-
93
- const parent = createEventTarget(parentRef.current)
94
-
95
- act(() => {
96
- parent.click()
97
- })
98
-
99
- expect(listener).toBeCalledTimes(0)
100
- expect(listenerCapture).toBeCalledTimes(0)
101
- })
102
-
103
- test('event dispatched on child', () => {
104
- const log = []
105
- const listener = jest.fn(() => {
106
- log.push('bubble')
107
- })
108
- const listenerCapture = jest.fn(() => {
109
- log.push('capture')
110
- })
111
- const targetRef = React.createRef()
112
- const childRef = React.createRef()
113
-
114
- function Component() {
115
- const addClickListener = useEvent('click')
116
- const addClickCaptureListener = useEvent('click', { capture: true })
117
-
118
- React.useEffect(() => {
119
- addClickListener(targetRef.current, listener)
120
- addClickCaptureListener(targetRef.current, listenerCapture)
121
- })
122
- return (
123
- <div ref={targetRef}>
124
- <div ref={childRef} />
125
- </div>
126
- )
127
- }
128
-
129
- act(() => {
130
- root.render(<Component />)
131
- })
132
-
133
- const child = createEventTarget(childRef.current)
134
-
135
- act(() => {
136
- child.click()
137
- })
138
-
139
- expect(listenerCapture).toBeCalledTimes(1)
140
- expect(listener).toBeCalledTimes(1)
141
- expect(log).toEqual(['capture', 'bubble'])
142
- })
143
-
144
- test('event dispatched on text node', () => {
145
- const listener = jest.fn()
146
- const targetRef = React.createRef()
147
- const childRef = React.createRef()
148
-
149
- function Component() {
150
- const addClickListener = useEvent('click')
151
- React.useEffect(() => {
152
- addClickListener(targetRef.current, listener)
153
- })
154
- return (
155
- <div ref={targetRef}>
156
- <div ref={childRef}>text</div>
157
- </div>
158
- )
159
- }
160
-
161
- act(() => {
162
- root.render(<Component />)
163
- })
164
-
165
- const text = createEventTarget(childRef.current.firstChild)
166
-
167
- act(() => {
168
- text.click()
169
- })
170
-
171
- expect(listener).toBeCalledTimes(1)
172
- })
173
-
174
- test('listener can be attached to document ', () => {
175
- const listener = jest.fn()
176
- const targetRef = React.createRef()
177
-
178
- function Component({ target }) {
179
- const addClickListener = useEvent('click')
180
- React.useEffect(() => {
181
- addClickListener(target, listener)
182
- })
183
- return <div ref={targetRef} />
184
- }
185
-
186
- act(() => {
187
- root.render(<Component target={document} />)
188
- })
189
- const target = createEventTarget(targetRef.current)
190
- act(() => {
191
- target.click()
192
- })
193
-
194
- expect(listener).toBeCalledTimes(1)
195
- })
196
-
197
- test('listener can be attached to window ', () => {
198
- const listener = jest.fn()
199
- const targetRef = React.createRef()
200
-
201
- function Component({ target }) {
202
- const addClickListener = useEvent('click')
203
- React.useEffect(() => {
204
- addClickListener(target, listener)
205
- })
206
- return <div ref={targetRef} />
207
- }
208
-
209
- act(() => {
210
- root.render(<Component target={window} />)
211
- })
212
- const target = createEventTarget(targetRef.current)
213
- act(() => {
214
- target.click()
215
- })
216
-
217
- expect(listener).toBeCalledTimes(1)
218
- })
219
-
220
- test('listener is replaceable', () => {
221
- const listener = jest.fn()
222
- const listenerAlt = jest.fn()
223
- const targetRef = React.createRef()
224
-
225
- function Component({ onClick }) {
226
- const addClickListener = useEvent('click')
227
- React.useEffect(() => {
228
- addClickListener(targetRef.current, onClick)
229
- })
230
- return <div ref={targetRef} />
231
- }
232
-
233
- act(() => {
234
- root.render(<Component onClick={listener} />)
235
- })
236
- const target = createEventTarget(targetRef.current)
237
- act(() => {
238
- target.click()
239
- })
240
- expect(listener).toBeCalledTimes(1)
241
- act(() => {
242
- // this should replace the listener
243
- root.render(<Component onClick={listenerAlt} />)
244
- })
245
- act(() => {
246
- target.click()
247
- })
248
- expect(listener).toBeCalledTimes(1)
249
- expect(listenerAlt).toBeCalledTimes(1)
250
- })
251
-
252
- test('listener is removed when value is null', () => {
253
- const listener = jest.fn()
254
- const targetRef = React.createRef()
255
-
256
- function Component({ off }) {
257
- const addClickListener = useEvent('click')
258
- React.useEffect(() => {
259
- addClickListener(targetRef.current, off ? null : listener)
260
- })
261
- return <div ref={targetRef} />
262
- }
263
-
264
- act(() => {
265
- root.render(<Component off={false} />)
266
- })
267
- const target = createEventTarget(targetRef.current)
268
- act(() => {
269
- target.click()
270
- })
271
- expect(listener).toBeCalledTimes(1)
272
- act(() => {
273
- // this should unset the listener
274
- root.render(<Component off={true} />)
275
- })
276
- listener.mockClear()
277
- act(() => {
278
- target.click()
279
- })
280
- expect(listener).toBeCalledTimes(0)
281
- })
282
-
283
- test('custom event dispatched on target', () => {
284
- const listener = jest.fn()
285
- const targetRef = React.createRef()
286
-
287
- function Component() {
288
- const addMagicEventListener = useEvent('magic-event')
289
- React.useEffect(() => {
290
- addMagicEventListener(targetRef.current, listener)
291
- })
292
- return <div ref={targetRef} />
293
- }
294
-
295
- act(() => {
296
- root.render(<Component />)
297
- })
298
-
299
- act(() => {
300
- const event = new CustomEvent('magic-event', { bubbles: true })
301
- targetRef.current.dispatchEvent(event)
302
- })
303
-
304
- expect(listener).toBeCalledTimes(1)
305
- })
306
-
307
- test('listeners can be set on multiple targets simultaneously', () => {
308
- const log = []
309
- const targetRef = React.createRef()
310
- const parentRef = React.createRef()
311
- const childRef = React.createRef()
312
-
313
- const listener = jest.fn((e) => {
314
- log.push(['bubble', e.currentTarget.id])
315
- })
316
- const listenerCapture = jest.fn((e) => {
317
- log.push(['capture', e.currentTarget.id])
318
- })
319
-
320
- function Component() {
321
- const addClickListener = useEvent('click')
322
- const addClickCaptureListener = useEvent('click', { capture: true })
323
- React.useEffect(() => {
324
- // the same event handle is used to set listeners on different targets
325
- addClickListener(targetRef.current, listener)
326
- addClickListener(parentRef.current, listener)
327
- addClickCaptureListener(targetRef.current, listenerCapture)
328
- addClickCaptureListener(parentRef.current, listenerCapture)
329
- })
330
- return (
331
- <div id="parent" ref={parentRef}>
332
- <div id="target" ref={targetRef}>
333
- <div ref={childRef} />
334
- </div>
335
- </div>
336
- )
337
- }
338
-
339
- act(() => {
340
- root.render(<Component />)
341
- })
342
-
343
- const child = createEventTarget(childRef.current)
344
-
345
- act(() => {
346
- child.click()
347
- })
348
-
349
- expect(listenerCapture).toBeCalledTimes(2)
350
- expect(listener).toBeCalledTimes(2)
351
- expect(log).toEqual([
352
- ['capture', 'parent'],
353
- ['capture', 'target'],
354
- ['bubble', 'target'],
355
- ['bubble', 'parent'],
356
- ])
357
- })
358
-
359
- test('listeners are specific to each event handle', () => {
360
- const log = []
361
- const targetRef = React.createRef()
362
- const childRef = React.createRef()
363
-
364
- const listener = jest.fn((e) => {
365
- log.push(['bubble', 'target'])
366
- })
367
- const listenerAlt = jest.fn((e) => {
368
- log.push(['bubble', 'target-alt'])
369
- })
370
- const listenerCapture = jest.fn((e) => {
371
- log.push(['capture', 'target'])
372
- })
373
- const listenerCaptureAlt = jest.fn((e) => {
374
- log.push(['capture', 'target-alt'])
375
- })
376
-
377
- function Component() {
378
- const addClickListener = useEvent('click')
379
- const addClickAltListener = useEvent('click')
380
- const addClickCaptureListener = useEvent('click', { capture: true })
381
- const addClickCaptureAltListener = useEvent('click', { capture: true })
382
- React.useEffect(() => {
383
- addClickListener(targetRef.current, listener)
384
- addClickAltListener(targetRef.current, listenerAlt)
385
- addClickCaptureListener(targetRef.current, listenerCapture)
386
- addClickCaptureAltListener(targetRef.current, listenerCaptureAlt)
387
- })
388
- return (
389
- <div id="target" ref={targetRef}>
390
- <div ref={childRef} />
391
- </div>
392
- )
393
- }
394
-
395
- act(() => {
396
- root.render(<Component />)
397
- })
398
-
399
- const child = createEventTarget(childRef.current)
400
-
401
- act(() => {
402
- child.click()
403
- })
404
-
405
- expect(listenerCapture).toBeCalledTimes(1)
406
- expect(listenerCaptureAlt).toBeCalledTimes(1)
407
- expect(listener).toBeCalledTimes(1)
408
- expect(listenerAlt).toBeCalledTimes(1)
409
- expect(log).toEqual([
410
- ['capture', 'target'],
411
- ['capture', 'target-alt'],
412
- ['bubble', 'target'],
413
- ['bubble', 'target-alt'],
414
- ])
415
- })
416
- })
417
-
418
- describe('cleanup', () => {
419
- test('removes all listeners for given event type from targets', () => {
420
- const clickListener = jest.fn()
421
- function Component() {
422
- const addClickListener = useEvent('click')
423
- React.useEffect(() => {
424
- addClickListener(document, clickListener)
425
- })
426
- return <div />
427
- }
428
-
429
- act(() => {
430
- root.render(<Component />)
431
- root.render(null)
432
- })
433
-
434
- const target = createEventTarget(document)
435
-
436
- act(() => {
437
- target.click()
438
- })
439
-
440
- expect(clickListener).toBeCalledTimes(0)
441
- })
442
- })
443
-
444
- describe('stopPropagation and stopImmediatePropagation', () => {
445
- test('stopPropagation works as expected', () => {
446
- const childListener = jest.fn((e) => {
447
- e.stopPropagation()
448
- })
449
- const targetListener = jest.fn()
450
- const targetRef = React.createRef()
451
- const childRef = React.createRef()
452
-
453
- function Component() {
454
- const addClickListener = useEvent('click')
455
- React.useEffect(() => {
456
- addClickListener(childRef.current, childListener)
457
- addClickListener(targetRef.current, targetListener)
458
- })
459
- return (
460
- <div ref={targetRef}>
461
- <div ref={childRef} />
462
- </div>
463
- )
464
- }
465
-
466
- act(() => {
467
- root.render(<Component />)
468
- })
469
-
470
- const child = createEventTarget(childRef.current)
471
-
472
- act(() => {
473
- child.click()
474
- })
475
-
476
- expect(childListener).toBeCalledTimes(1)
477
- expect(targetListener).toBeCalledTimes(0)
478
- })
479
-
480
- test('stopImmediatePropagation works as expected', () => {
481
- const firstListener = jest.fn((e) => {
482
- e.stopImmediatePropagation()
483
- })
484
- const secondListener = jest.fn()
485
- const targetRef = React.createRef()
486
-
487
- function Component() {
488
- const addFirstClickListener = useEvent('click')
489
- const addSecondClickListener = useEvent('click')
490
- React.useEffect(() => {
491
- addFirstClickListener(targetRef.current, firstListener)
492
- addSecondClickListener(targetRef.current, secondListener)
493
- })
494
- return <div ref={targetRef} />
495
- }
496
-
497
- act(() => {
498
- root.render(<Component />)
499
- })
500
-
501
- const target = createEventTarget(targetRef.current)
502
-
503
- act(() => {
504
- target.click()
505
- })
506
-
507
- expect(firstListener).toBeCalledTimes(1)
508
- expect(secondListener).toBeCalledTimes(0)
509
- })
510
- })
511
- })