@hanzogui/react-native-web-internals 2.0.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 (420) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/StyleSheet/__tests__/compiler-createReactDOMStyle-test.cjs +240 -0
  3. package/dist/cjs/StyleSheet/__tests__/compiler-test.cjs +407 -0
  4. package/dist/cjs/StyleSheet/__tests__/dom-createOrderedCSSStyleSheet-test.cjs +121 -0
  5. package/dist/cjs/StyleSheet/__tests__/index-test.cjs +404 -0
  6. package/dist/cjs/StyleSheet/__tests__/preprocess-test.cjs +108 -0
  7. package/dist/cjs/StyleSheet/__tests__/validate-test.cjs +36 -0
  8. package/dist/cjs/StyleSheet/compiler/createReactDOMStyle.cjs +87 -0
  9. package/dist/cjs/StyleSheet/compiler/hash.cjs +26 -0
  10. package/dist/cjs/StyleSheet/compiler/hyphenateStyleName.cjs +36 -0
  11. package/dist/cjs/StyleSheet/compiler/index.cjs +318 -0
  12. package/dist/cjs/StyleSheet/compiler/normalizeColor.cjs +40 -0
  13. package/dist/cjs/StyleSheet/compiler/normalizeValueWithProperty.cjs +43 -0
  14. package/dist/cjs/StyleSheet/compiler/resolveShadowValue.cjs +48 -0
  15. package/dist/cjs/StyleSheet/dom/createCSSStyleSheet.cjs +37 -0
  16. package/dist/cjs/StyleSheet/dom/createOrderedCSSStyleSheet.cjs +110 -0
  17. package/dist/cjs/StyleSheet/dom/index.cjs +67 -0
  18. package/dist/cjs/StyleSheet/index.cjs +57 -0
  19. package/dist/cjs/StyleSheet/preprocess.cjs +101 -0
  20. package/dist/cjs/StyleSheet/validate.cjs +69 -0
  21. package/dist/cjs/TextAncestorContext.cjs +27 -0
  22. package/dist/cjs/colorProps.cjs +37 -0
  23. package/dist/cjs/index.cjs +103 -0
  24. package/dist/cjs/modules/AccessibilityUtil/__tests__/propsToAccessibilityComponent-test.cjs +50 -0
  25. package/dist/cjs/modules/AccessibilityUtil/__tests__/propsToAriaRole-test.cjs +40 -0
  26. package/dist/cjs/modules/AccessibilityUtil/index.cjs +33 -0
  27. package/dist/cjs/modules/AccessibilityUtil/isDisabled.cjs +26 -0
  28. package/dist/cjs/modules/AccessibilityUtil/propsToAccessibilityComponent.cjs +57 -0
  29. package/dist/cjs/modules/AccessibilityUtil/propsToAriaRole.cjs +47 -0
  30. package/dist/cjs/modules/AssetRegistry/index.cjs +33 -0
  31. package/dist/cjs/modules/ImageLoader/index.cjs +111 -0
  32. package/dist/cjs/modules/InteractionManager.cjs +184 -0
  33. package/dist/cjs/modules/Platform/__tests__/index-test.cjs +48 -0
  34. package/dist/cjs/modules/Platform/index.cjs +30 -0
  35. package/dist/cjs/modules/TextInputState/index.cjs +55 -0
  36. package/dist/cjs/modules/UIManager/__tests__/index-test.cjs +90 -0
  37. package/dist/cjs/modules/UIManager/index.cjs +60 -0
  38. package/dist/cjs/modules/canUseDOM.cjs +26 -0
  39. package/dist/cjs/modules/createDOMProps/__tests__/index-test.cjs +156 -0
  40. package/dist/cjs/modules/createDOMProps/index.cjs +179 -0
  41. package/dist/cjs/modules/createEventHandle/__tests__/index-test.cjs +344 -0
  42. package/dist/cjs/modules/createEventHandle/index.cjs +67 -0
  43. package/dist/cjs/modules/dismissKeyboard/index.cjs +29 -0
  44. package/dist/cjs/modules/forwardedProps/index.cjs +161 -0
  45. package/dist/cjs/modules/getBoundingClientRect/index.cjs +28 -0
  46. package/dist/cjs/modules/invariant.cjs +36 -0
  47. package/dist/cjs/modules/isSelectionValid/index.cjs +35 -0
  48. package/dist/cjs/modules/isWebColor/index.cjs +26 -0
  49. package/dist/cjs/modules/mergeRefs/__tests__/index-test.cjs +42 -0
  50. package/dist/cjs/modules/mergeRefs/index.cjs +42 -0
  51. package/dist/cjs/modules/modality/__tests__/index-test.cjs +32 -0
  52. package/dist/cjs/modules/modality/index.cjs +135 -0
  53. package/dist/cjs/modules/multiplyStyleLengthValue/__tests__/index-test.cjs +30 -0
  54. package/dist/cjs/modules/multiplyStyleLengthValue/index.cjs +35 -0
  55. package/dist/cjs/modules/normalizeColor/index.cjs +39 -0
  56. package/dist/cjs/modules/pick/index.cjs +30 -0
  57. package/dist/cjs/modules/processColor/__tests__/index-test.cjs +66 -0
  58. package/dist/cjs/modules/processColor/index.cjs +42 -0
  59. package/dist/cjs/modules/requestIdleCallback/index.cjs +44 -0
  60. package/dist/cjs/modules/setValueForStyles/dangerousStyleValue.cjs +35 -0
  61. package/dist/cjs/modules/setValueForStyles/index.cjs +35 -0
  62. package/dist/cjs/modules/unitlessNumbers/index.cjs +85 -0
  63. package/dist/cjs/modules/useElementLayout/index.cjs +39 -0
  64. package/dist/cjs/modules/useEvent/__tests__/index-test.cjs +408 -0
  65. package/dist/cjs/modules/useEvent/index.cjs +45 -0
  66. package/dist/cjs/modules/useHover/__tests__/index-test.cjs +273 -0
  67. package/dist/cjs/modules/useHover/index.cjs +97 -0
  68. package/dist/cjs/modules/useLayoutEffect/index.cjs +39 -0
  69. package/dist/cjs/modules/useLocale/index.cjs +66 -0
  70. package/dist/cjs/modules/useLocale/isLocaleRTL.cjs +83 -0
  71. package/dist/cjs/modules/useMergeRefs/__tests__/index-test.cjs +102 -0
  72. package/dist/cjs/modules/useMergeRefs/index.cjs +43 -0
  73. package/dist/cjs/modules/usePlatformMethods/index.cjs +35 -0
  74. package/dist/cjs/modules/useStable/__tests__/index-test.cjs +92 -0
  75. package/dist/cjs/modules/useStable/index.cjs +42 -0
  76. package/dist/cjs/styleTypes.cjs +16 -0
  77. package/dist/cjs/types.cjs +16 -0
  78. package/dist/esm/StyleSheet/__tests__/compiler-createReactDOMStyle-test.mjs +219 -0
  79. package/dist/esm/StyleSheet/__tests__/compiler-createReactDOMStyle-test.mjs.map +1 -0
  80. package/dist/esm/StyleSheet/__tests__/compiler-test.mjs +408 -0
  81. package/dist/esm/StyleSheet/__tests__/compiler-test.mjs.map +1 -0
  82. package/dist/esm/StyleSheet/__tests__/dom-createOrderedCSSStyleSheet-test.mjs +100 -0
  83. package/dist/esm/StyleSheet/__tests__/dom-createOrderedCSSStyleSheet-test.mjs.map +1 -0
  84. package/dist/esm/StyleSheet/__tests__/index-test.mjs +383 -0
  85. package/dist/esm/StyleSheet/__tests__/index-test.mjs.map +1 -0
  86. package/dist/esm/StyleSheet/__tests__/preprocess-test.mjs +109 -0
  87. package/dist/esm/StyleSheet/__tests__/preprocess-test.mjs.map +1 -0
  88. package/dist/esm/StyleSheet/__tests__/validate-test.mjs +37 -0
  89. package/dist/esm/StyleSheet/__tests__/validate-test.mjs.map +1 -0
  90. package/dist/esm/StyleSheet/compiler/createReactDOMStyle.mjs +63 -0
  91. package/dist/esm/StyleSheet/compiler/createReactDOMStyle.mjs.map +1 -0
  92. package/dist/esm/StyleSheet/compiler/hash.mjs +3 -0
  93. package/dist/esm/StyleSheet/compiler/hash.mjs.map +1 -0
  94. package/dist/esm/StyleSheet/compiler/hyphenateStyleName.mjs +13 -0
  95. package/dist/esm/StyleSheet/compiler/hyphenateStyleName.mjs.map +1 -0
  96. package/dist/esm/StyleSheet/compiler/index.mjs +292 -0
  97. package/dist/esm/StyleSheet/compiler/index.mjs.map +1 -0
  98. package/dist/esm/StyleSheet/compiler/normalizeColor.mjs +17 -0
  99. package/dist/esm/StyleSheet/compiler/normalizeColor.mjs.map +1 -0
  100. package/dist/esm/StyleSheet/compiler/normalizeValueWithProperty.mjs +20 -0
  101. package/dist/esm/StyleSheet/compiler/normalizeValueWithProperty.mjs.map +1 -0
  102. package/dist/esm/StyleSheet/compiler/resolveShadowValue.mjs +25 -0
  103. package/dist/esm/StyleSheet/compiler/resolveShadowValue.mjs.map +1 -0
  104. package/dist/esm/StyleSheet/dom/createCSSStyleSheet.mjs +14 -0
  105. package/dist/esm/StyleSheet/dom/createCSSStyleSheet.mjs.map +1 -0
  106. package/dist/esm/StyleSheet/dom/createOrderedCSSStyleSheet.mjs +87 -0
  107. package/dist/esm/StyleSheet/dom/createOrderedCSSStyleSheet.mjs.map +1 -0
  108. package/dist/esm/StyleSheet/dom/index.mjs +44 -0
  109. package/dist/esm/StyleSheet/dom/index.mjs.map +1 -0
  110. package/dist/esm/StyleSheet/index.mjs +33 -0
  111. package/dist/esm/StyleSheet/index.mjs.map +1 -0
  112. package/dist/esm/StyleSheet/preprocess.mjs +75 -0
  113. package/dist/esm/StyleSheet/preprocess.mjs.map +1 -0
  114. package/dist/esm/StyleSheet/validate.mjs +46 -0
  115. package/dist/esm/StyleSheet/validate.mjs.map +1 -0
  116. package/dist/esm/TextAncestorContext.mjs +4 -0
  117. package/dist/esm/TextAncestorContext.mjs.map +1 -0
  118. package/dist/esm/colorProps.mjs +14 -0
  119. package/dist/esm/colorProps.mjs.map +1 -0
  120. package/dist/esm/index.js +45 -0
  121. package/dist/esm/index.js.map +1 -0
  122. package/dist/esm/index.mjs +45 -0
  123. package/dist/esm/index.mjs.map +1 -0
  124. package/dist/esm/modules/AccessibilityUtil/__tests__/propsToAccessibilityComponent-test.mjs +29 -0
  125. package/dist/esm/modules/AccessibilityUtil/__tests__/propsToAccessibilityComponent-test.mjs.map +1 -0
  126. package/dist/esm/modules/AccessibilityUtil/__tests__/propsToAriaRole-test.mjs +19 -0
  127. package/dist/esm/modules/AccessibilityUtil/__tests__/propsToAriaRole-test.mjs.map +1 -0
  128. package/dist/esm/modules/AccessibilityUtil/index.mjs +10 -0
  129. package/dist/esm/modules/AccessibilityUtil/index.mjs.map +1 -0
  130. package/dist/esm/modules/AccessibilityUtil/isDisabled.mjs +3 -0
  131. package/dist/esm/modules/AccessibilityUtil/isDisabled.mjs.map +1 -0
  132. package/dist/esm/modules/AccessibilityUtil/propsToAccessibilityComponent.mjs +34 -0
  133. package/dist/esm/modules/AccessibilityUtil/propsToAccessibilityComponent.mjs.map +1 -0
  134. package/dist/esm/modules/AccessibilityUtil/propsToAriaRole.mjs +24 -0
  135. package/dist/esm/modules/AccessibilityUtil/propsToAriaRole.mjs.map +1 -0
  136. package/dist/esm/modules/AssetRegistry/index.mjs +9 -0
  137. package/dist/esm/modules/AssetRegistry/index.mjs.map +1 -0
  138. package/dist/esm/modules/ImageLoader/index.mjs +87 -0
  139. package/dist/esm/modules/ImageLoader/index.mjs.map +1 -0
  140. package/dist/esm/modules/InteractionManager.mjs +161 -0
  141. package/dist/esm/modules/InteractionManager.mjs.map +1 -0
  142. package/dist/esm/modules/Platform/__tests__/index-test.mjs +27 -0
  143. package/dist/esm/modules/Platform/__tests__/index-test.mjs.map +1 -0
  144. package/dist/esm/modules/Platform/index.mjs +7 -0
  145. package/dist/esm/modules/Platform/index.mjs.map +1 -0
  146. package/dist/esm/modules/TextInputState/index.mjs +32 -0
  147. package/dist/esm/modules/TextInputState/index.mjs.map +1 -0
  148. package/dist/esm/modules/UIManager/__tests__/index-test.mjs +69 -0
  149. package/dist/esm/modules/UIManager/__tests__/index-test.mjs.map +1 -0
  150. package/dist/esm/modules/UIManager/index.mjs +37 -0
  151. package/dist/esm/modules/UIManager/index.mjs.map +1 -0
  152. package/dist/esm/modules/canUseDOM.mjs +3 -0
  153. package/dist/esm/modules/canUseDOM.mjs.map +1 -0
  154. package/dist/esm/modules/createDOMProps/__tests__/index-test.mjs +135 -0
  155. package/dist/esm/modules/createDOMProps/__tests__/index-test.mjs.map +1 -0
  156. package/dist/esm/modules/createDOMProps/index.mjs +155 -0
  157. package/dist/esm/modules/createDOMProps/index.mjs.map +1 -0
  158. package/dist/esm/modules/createEventHandle/__tests__/index-test.mjs +323 -0
  159. package/dist/esm/modules/createEventHandle/__tests__/index-test.mjs.map +1 -0
  160. package/dist/esm/modules/createEventHandle/index.mjs +42 -0
  161. package/dist/esm/modules/createEventHandle/index.mjs.map +1 -0
  162. package/dist/esm/modules/dismissKeyboard/index.mjs +6 -0
  163. package/dist/esm/modules/dismissKeyboard/index.mjs.map +1 -0
  164. package/dist/esm/modules/forwardedProps/index.mjs +128 -0
  165. package/dist/esm/modules/forwardedProps/index.mjs.map +1 -0
  166. package/dist/esm/modules/getBoundingClientRect/index.mjs +5 -0
  167. package/dist/esm/modules/getBoundingClientRect/index.mjs.map +1 -0
  168. package/dist/esm/modules/invariant.mjs +12 -0
  169. package/dist/esm/modules/invariant.mjs.map +1 -0
  170. package/dist/esm/modules/isSelectionValid/index.mjs +12 -0
  171. package/dist/esm/modules/isSelectionValid/index.mjs.map +1 -0
  172. package/dist/esm/modules/isWebColor/index.mjs +3 -0
  173. package/dist/esm/modules/isWebColor/index.mjs.map +1 -0
  174. package/dist/esm/modules/mergeRefs/__tests__/index-test.mjs +21 -0
  175. package/dist/esm/modules/mergeRefs/__tests__/index-test.mjs.map +1 -0
  176. package/dist/esm/modules/mergeRefs/index.mjs +19 -0
  177. package/dist/esm/modules/mergeRefs/index.mjs.map +1 -0
  178. package/dist/esm/modules/modality/__tests__/index-test.mjs +33 -0
  179. package/dist/esm/modules/modality/__tests__/index-test.mjs.map +1 -0
  180. package/dist/esm/modules/modality/index.mjs +109 -0
  181. package/dist/esm/modules/modality/index.mjs.map +1 -0
  182. package/dist/esm/modules/multiplyStyleLengthValue/__tests__/index-test.mjs +9 -0
  183. package/dist/esm/modules/multiplyStyleLengthValue/__tests__/index-test.mjs.map +1 -0
  184. package/dist/esm/modules/multiplyStyleLengthValue/index.mjs +12 -0
  185. package/dist/esm/modules/multiplyStyleLengthValue/index.mjs.map +1 -0
  186. package/dist/esm/modules/normalizeColor/index.mjs +16 -0
  187. package/dist/esm/modules/normalizeColor/index.mjs.map +1 -0
  188. package/dist/esm/modules/pick/index.mjs +7 -0
  189. package/dist/esm/modules/pick/index.mjs.map +1 -0
  190. package/dist/esm/modules/processColor/__tests__/index-test.mjs +45 -0
  191. package/dist/esm/modules/processColor/__tests__/index-test.mjs.map +1 -0
  192. package/dist/esm/modules/processColor/index.mjs +8 -0
  193. package/dist/esm/modules/processColor/index.mjs.map +1 -0
  194. package/dist/esm/modules/requestIdleCallback/index.mjs +20 -0
  195. package/dist/esm/modules/requestIdleCallback/index.mjs.map +1 -0
  196. package/dist/esm/modules/setValueForStyles/dangerousStyleValue.mjs +12 -0
  197. package/dist/esm/modules/setValueForStyles/dangerousStyleValue.mjs.map +1 -0
  198. package/dist/esm/modules/setValueForStyles/index.mjs +12 -0
  199. package/dist/esm/modules/setValueForStyles/index.mjs.map +1 -0
  200. package/dist/esm/modules/unitlessNumbers/index.mjs +62 -0
  201. package/dist/esm/modules/unitlessNumbers/index.mjs.map +1 -0
  202. package/dist/esm/modules/useElementLayout/index.mjs +16 -0
  203. package/dist/esm/modules/useElementLayout/index.mjs.map +1 -0
  204. package/dist/esm/modules/useEvent/__tests__/index-test.mjs +387 -0
  205. package/dist/esm/modules/useEvent/__tests__/index-test.mjs.map +1 -0
  206. package/dist/esm/modules/useEvent/index.mjs +22 -0
  207. package/dist/esm/modules/useEvent/index.mjs.map +1 -0
  208. package/dist/esm/modules/useHover/__tests__/index-test.mjs +252 -0
  209. package/dist/esm/modules/useHover/__tests__/index-test.mjs.map +1 -0
  210. package/dist/esm/modules/useHover/index.mjs +74 -0
  211. package/dist/esm/modules/useHover/index.mjs.map +1 -0
  212. package/dist/esm/modules/useLayoutEffect/index.mjs +5 -0
  213. package/dist/esm/modules/useLayoutEffect/index.mjs.map +1 -0
  214. package/dist/esm/modules/useLocale/index.mjs +30 -0
  215. package/dist/esm/modules/useLocale/index.mjs.map +1 -0
  216. package/dist/esm/modules/useLocale/isLocaleRTL.mjs +60 -0
  217. package/dist/esm/modules/useLocale/isLocaleRTL.mjs.map +1 -0
  218. package/dist/esm/modules/useMergeRefs/__tests__/index-test.mjs +81 -0
  219. package/dist/esm/modules/useMergeRefs/__tests__/index-test.mjs.map +1 -0
  220. package/dist/esm/modules/useMergeRefs/index.mjs +9 -0
  221. package/dist/esm/modules/useMergeRefs/index.mjs.map +1 -0
  222. package/dist/esm/modules/usePlatformMethods/index.mjs +12 -0
  223. package/dist/esm/modules/usePlatformMethods/index.mjs.map +1 -0
  224. package/dist/esm/modules/useStable/__tests__/index-test.mjs +71 -0
  225. package/dist/esm/modules/useStable/__tests__/index-test.mjs.map +1 -0
  226. package/dist/esm/modules/useStable/index.mjs +8 -0
  227. package/dist/esm/modules/useStable/index.mjs.map +1 -0
  228. package/dist/esm/styleTypes.mjs +2 -0
  229. package/dist/esm/styleTypes.mjs.map +1 -0
  230. package/dist/esm/types.mjs +2 -0
  231. package/dist/esm/types.mjs.map +1 -0
  232. package/package.json +58 -0
  233. package/src/StyleSheet/__tests__/compiler-createReactDOMStyle-test.tsx +236 -0
  234. package/src/StyleSheet/__tests__/compiler-test.tsx +426 -0
  235. package/src/StyleSheet/__tests__/dom-createOrderedCSSStyleSheet-test.tsx +169 -0
  236. package/src/StyleSheet/__tests__/index-test.tsx +406 -0
  237. package/src/StyleSheet/__tests__/preprocess-test.tsx +107 -0
  238. package/src/StyleSheet/__tests__/validate-test.tsx +42 -0
  239. package/src/StyleSheet/compiler/createReactDOMStyle.tsx +215 -0
  240. package/src/StyleSheet/compiler/hash.tsx +1 -0
  241. package/src/StyleSheet/compiler/hyphenateStyleName.tsx +25 -0
  242. package/src/StyleSheet/compiler/index.tsx +478 -0
  243. package/src/StyleSheet/compiler/normalizeColor.tsx +35 -0
  244. package/src/StyleSheet/compiler/normalizeValueWithProperty.tsx +34 -0
  245. package/src/StyleSheet/compiler/resolveShadowValue.tsx +26 -0
  246. package/src/StyleSheet/dom/createCSSStyleSheet.tsx +42 -0
  247. package/src/StyleSheet/dom/createOrderedCSSStyleSheet.tsx +195 -0
  248. package/src/StyleSheet/dom/index.tsx +92 -0
  249. package/src/StyleSheet/index.tsx +99 -0
  250. package/src/StyleSheet/preprocess.tsx +119 -0
  251. package/src/StyleSheet/validate.tsx +90 -0
  252. package/src/TextAncestorContext.tsx +13 -0
  253. package/src/colorProps.tsx +12 -0
  254. package/src/index.tsx +58 -0
  255. package/src/modules/AccessibilityUtil/__tests__/propsToAccessibilityComponent-test.tsx +44 -0
  256. package/src/modules/AccessibilityUtil/__tests__/propsToAriaRole-test.tsx +25 -0
  257. package/src/modules/AccessibilityUtil/index.tsx +18 -0
  258. package/src/modules/AccessibilityUtil/isDisabled.tsx +13 -0
  259. package/src/modules/AccessibilityUtil/propsToAccessibilityComponent.tsx +54 -0
  260. package/src/modules/AccessibilityUtil/propsToAriaRole.tsx +37 -0
  261. package/src/modules/AssetRegistry/index.tsx +32 -0
  262. package/src/modules/ImageLoader/index.tsx +165 -0
  263. package/src/modules/InteractionManager.tsx +315 -0
  264. package/src/modules/Platform/__tests__/index-test.tsx +45 -0
  265. package/src/modules/Platform/index.tsx +15 -0
  266. package/src/modules/TextInputState/index.tsx +62 -0
  267. package/src/modules/UIManager/__tests__/index-test.tsx +87 -0
  268. package/src/modules/UIManager/index.tsx +68 -0
  269. package/src/modules/canUseDOM.tsx +14 -0
  270. package/src/modules/createDOMProps/__tests__/index-test.tsx +138 -0
  271. package/src/modules/createDOMProps/index.tsx +436 -0
  272. package/src/modules/createEventHandle/__tests__/index-test.tsx +459 -0
  273. package/src/modules/createEventHandle/index.tsx +100 -0
  274. package/src/modules/dismissKeyboard/index.tsx +14 -0
  275. package/src/modules/forwardedProps/index.tsx +145 -0
  276. package/src/modules/getBoundingClientRect/index.tsx +17 -0
  277. package/src/modules/invariant.ts +23 -0
  278. package/src/modules/isSelectionValid/index.tsx +20 -0
  279. package/src/modules/isWebColor/index.tsx +14 -0
  280. package/src/modules/mergeRefs/__tests__/index-test.tsx +32 -0
  281. package/src/modules/mergeRefs/index.tsx +36 -0
  282. package/src/modules/modality/__tests__/index-test.tsx +66 -0
  283. package/src/modules/modality/index.tsx +228 -0
  284. package/src/modules/multiplyStyleLengthValue/__tests__/index-test.tsx +23 -0
  285. package/src/modules/multiplyStyleLengthValue/index.tsx +26 -0
  286. package/src/modules/normalizeColor/index.tsx +32 -0
  287. package/src/modules/pick/index.tsx +25 -0
  288. package/src/modules/processColor/__tests__/index-test.tsx +78 -0
  289. package/src/modules/processColor/index.tsx +28 -0
  290. package/src/modules/requestIdleCallback/index.tsx +35 -0
  291. package/src/modules/setValueForStyles/dangerousStyleValue.tsx +74 -0
  292. package/src/modules/setValueForStyles/index.tsx +39 -0
  293. package/src/modules/unitlessNumbers/index.tsx +77 -0
  294. package/src/modules/useElementLayout/index.tsx +28 -0
  295. package/src/modules/useEvent/__tests__/index-test.tsx +511 -0
  296. package/src/modules/useEvent/index.tsx +64 -0
  297. package/src/modules/useHover/__tests__/index-test.tsx +342 -0
  298. package/src/modules/useHover/index.tsx +181 -0
  299. package/src/modules/useLayoutEffect/index.ts +15 -0
  300. package/src/modules/useLocale/index.tsx +57 -0
  301. package/src/modules/useLocale/isLocaleRTL.tsx +74 -0
  302. package/src/modules/useMergeRefs/__tests__/index-test.tsx +91 -0
  303. package/src/modules/useMergeRefs/index.tsx +22 -0
  304. package/src/modules/usePlatformMethods/index.tsx +40 -0
  305. package/src/modules/useStable/__tests__/index-test.tsx +101 -0
  306. package/src/modules/useStable/index.tsx +24 -0
  307. package/src/styleTypes.ts +321 -0
  308. package/src/types.ts +77 -0
  309. package/types/StyleSheet/compiler/createReactDOMStyle.d.ts +18 -0
  310. package/types/StyleSheet/compiler/createReactDOMStyle.d.ts.map +1 -0
  311. package/types/StyleSheet/compiler/hash.d.ts +2 -0
  312. package/types/StyleSheet/compiler/hash.d.ts.map +1 -0
  313. package/types/StyleSheet/compiler/hyphenateStyleName.d.ts +10 -0
  314. package/types/StyleSheet/compiler/hyphenateStyleName.d.ts.map +1 -0
  315. package/types/StyleSheet/compiler/index.d.ts +39 -0
  316. package/types/StyleSheet/compiler/index.d.ts.map +1 -0
  317. package/types/StyleSheet/compiler/normalizeColor.d.ts +10 -0
  318. package/types/StyleSheet/compiler/normalizeColor.d.ts.map +1 -0
  319. package/types/StyleSheet/compiler/normalizeValueWithProperty.d.ts +10 -0
  320. package/types/StyleSheet/compiler/normalizeValueWithProperty.d.ts.map +1 -0
  321. package/types/StyleSheet/compiler/resolveShadowValue.d.ts +10 -0
  322. package/types/StyleSheet/compiler/resolveShadowValue.d.ts.map +1 -0
  323. package/types/StyleSheet/dom/createCSSStyleSheet.d.ts +10 -0
  324. package/types/StyleSheet/dom/createCSSStyleSheet.d.ts.map +1 -0
  325. package/types/StyleSheet/dom/createOrderedCSSStyleSheet.d.ts +29 -0
  326. package/types/StyleSheet/dom/createOrderedCSSStyleSheet.d.ts.map +1 -0
  327. package/types/StyleSheet/dom/index.d.ts +15 -0
  328. package/types/StyleSheet/dom/index.d.ts.map +1 -0
  329. package/types/StyleSheet/index.d.ts +69 -0
  330. package/types/StyleSheet/index.d.ts.map +1 -0
  331. package/types/StyleSheet/preprocess.d.ts +16 -0
  332. package/types/StyleSheet/preprocess.d.ts.map +1 -0
  333. package/types/StyleSheet/validate.d.ts +10 -0
  334. package/types/StyleSheet/validate.d.ts.map +1 -0
  335. package/types/TextAncestorContext.d.ts +11 -0
  336. package/types/TextAncestorContext.d.ts.map +1 -0
  337. package/types/colorProps.d.ts +13 -0
  338. package/types/colorProps.d.ts.map +1 -0
  339. package/types/index.d.ts +45 -0
  340. package/types/index.d.ts.map +1 -0
  341. package/types/modules/AccessibilityUtil/index.d.ts +16 -0
  342. package/types/modules/AccessibilityUtil/index.d.ts.map +1 -0
  343. package/types/modules/AccessibilityUtil/isDisabled.d.ts +10 -0
  344. package/types/modules/AccessibilityUtil/isDisabled.d.ts.map +1 -0
  345. package/types/modules/AccessibilityUtil/propsToAccessibilityComponent.d.ts +10 -0
  346. package/types/modules/AccessibilityUtil/propsToAccessibilityComponent.d.ts.map +1 -0
  347. package/types/modules/AccessibilityUtil/propsToAriaRole.d.ts +12 -0
  348. package/types/modules/AccessibilityUtil/propsToAriaRole.d.ts.map +1 -0
  349. package/types/modules/AssetRegistry/index.d.ts +22 -0
  350. package/types/modules/AssetRegistry/index.d.ts.map +1 -0
  351. package/types/modules/ImageLoader/index.d.ts +27 -0
  352. package/types/modules/ImageLoader/index.d.ts.map +1 -0
  353. package/types/modules/InteractionManager.d.ts +48 -0
  354. package/types/modules/InteractionManager.d.ts.map +1 -0
  355. package/types/modules/Platform/index.d.ts +15 -0
  356. package/types/modules/Platform/index.d.ts.map +1 -0
  357. package/types/modules/TextInputState/index.d.ts +38 -0
  358. package/types/modules/TextInputState/index.d.ts.map +1 -0
  359. package/types/modules/UIManager/index.d.ts +23 -0
  360. package/types/modules/UIManager/index.d.ts.map +1 -0
  361. package/types/modules/canUseDOM.d.ts +10 -0
  362. package/types/modules/canUseDOM.d.ts.map +1 -0
  363. package/types/modules/createDOMProps/index.d.ts +12 -0
  364. package/types/modules/createDOMProps/index.d.ts.map +1 -0
  365. package/types/modules/createEventHandle/index.d.ts +20 -0
  366. package/types/modules/createEventHandle/index.d.ts.map +1 -0
  367. package/types/modules/dismissKeyboard/index.d.ts +10 -0
  368. package/types/modules/dismissKeyboard/index.d.ts.map +1 -0
  369. package/types/modules/forwardedProps/index.d.ts +383 -0
  370. package/types/modules/forwardedProps/index.d.ts.map +1 -0
  371. package/types/modules/getBoundingClientRect/index.d.ts +10 -0
  372. package/types/modules/getBoundingClientRect/index.d.ts.map +1 -0
  373. package/types/modules/invariant.d.ts +3 -0
  374. package/types/modules/invariant.d.ts.map +1 -0
  375. package/types/modules/isSelectionValid/index.d.ts +10 -0
  376. package/types/modules/isSelectionValid/index.d.ts.map +1 -0
  377. package/types/modules/isWebColor/index.d.ts +10 -0
  378. package/types/modules/isWebColor/index.d.ts.map +1 -0
  379. package/types/modules/mergeRefs/index.d.ts +11 -0
  380. package/types/modules/mergeRefs/index.d.ts.map +1 -0
  381. package/types/modules/modality/index.d.ts +17 -0
  382. package/types/modules/modality/index.d.ts.map +1 -0
  383. package/types/modules/multiplyStyleLengthValue/index.d.ts +10 -0
  384. package/types/modules/multiplyStyleLengthValue/index.d.ts.map +1 -0
  385. package/types/modules/normalizeColor/index.d.ts +10 -0
  386. package/types/modules/normalizeColor/index.d.ts.map +1 -0
  387. package/types/modules/pick/index.d.ts +12 -0
  388. package/types/modules/pick/index.d.ts.map +1 -0
  389. package/types/modules/processColor/index.d.ts +11 -0
  390. package/types/modules/processColor/index.d.ts.map +1 -0
  391. package/types/modules/requestIdleCallback/index.d.ts +3 -0
  392. package/types/modules/requestIdleCallback/index.d.ts.map +1 -0
  393. package/types/modules/setValueForStyles/dangerousStyleValue.d.ts +11 -0
  394. package/types/modules/setValueForStyles/dangerousStyleValue.d.ts.map +1 -0
  395. package/types/modules/setValueForStyles/index.d.ts +9 -0
  396. package/types/modules/setValueForStyles/index.d.ts.map +1 -0
  397. package/types/modules/unitlessNumbers/index.d.ts +60 -0
  398. package/types/modules/unitlessNumbers/index.d.ts.map +1 -0
  399. package/types/modules/useElementLayout/index.d.ts +4 -0
  400. package/types/modules/useElementLayout/index.d.ts.map +1 -0
  401. package/types/modules/useEvent/index.d.ts +24 -0
  402. package/types/modules/useEvent/index.d.ts.map +1 -0
  403. package/types/modules/useHover/index.d.ts +21 -0
  404. package/types/modules/useHover/index.d.ts.map +1 -0
  405. package/types/modules/useLayoutEffect/index.d.ts +13 -0
  406. package/types/modules/useLayoutEffect/index.d.ts.map +1 -0
  407. package/types/modules/useLocale/index.d.ts +14 -0
  408. package/types/modules/useLocale/index.d.ts.map +1 -0
  409. package/types/modules/useLocale/isLocaleRTL.d.ts +13 -0
  410. package/types/modules/useLocale/isLocaleRTL.d.ts.map +1 -0
  411. package/types/modules/useMergeRefs/index.d.ts +11 -0
  412. package/types/modules/useMergeRefs/index.d.ts.map +1 -0
  413. package/types/modules/usePlatformMethods/index.d.ts +18 -0
  414. package/types/modules/usePlatformMethods/index.d.ts.map +1 -0
  415. package/types/modules/useStable/index.d.ts +10 -0
  416. package/types/modules/useStable/index.d.ts.map +1 -0
  417. package/types/styleTypes.d.ts +211 -0
  418. package/types/styleTypes.d.ts.map +1 -0
  419. package/types/types.d.ts +46 -0
  420. package/types/types.d.ts.map +1 -0
@@ -0,0 +1,342 @@
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
+
8
+ import {
9
+ clearPointers,
10
+ createEventTarget,
11
+ describeWithPointerEvent,
12
+ setPointerEvent,
13
+ } from 'dom-event-testing-library'
14
+ import * as React from 'react'
15
+ import * as ReactDOM from 'react-dom'
16
+ import { act } from 'react-dom/test-utils'
17
+
18
+ import { testOnly_resetActiveModality } from '../../modality/index'
19
+ import useHover from '..'
20
+
21
+ function createRoot(rootNode) {
22
+ return {
23
+ render(element) {
24
+ ReactDOM.render(element, rootNode)
25
+ },
26
+ }
27
+ }
28
+
29
+ describeWithPointerEvent('useHover', (hasPointerEvents) => {
30
+ let root
31
+ let rootNode
32
+
33
+ beforeEach(() => {
34
+ setPointerEvent(hasPointerEvents)
35
+ rootNode = document.createElement('div')
36
+ document.body.appendChild(rootNode)
37
+ root = createRoot(rootNode)
38
+ })
39
+
40
+ afterEach(() => {
41
+ root.render(null)
42
+ document.body.removeChild(rootNode)
43
+ rootNode = null
44
+ root = null
45
+ testOnly_resetActiveModality()
46
+ // make sure all tests reset state machine tracking pointers on the mock surface
47
+ clearPointers()
48
+ })
49
+
50
+ describe('contain', () => {
51
+ let onHoverChange, onHoverStart, onHoverUpdate, onHoverEnd, ref, childRef
52
+
53
+ const componentInit = () => {
54
+ onHoverChange = jest.fn()
55
+ onHoverStart = jest.fn()
56
+ onHoverUpdate = jest.fn()
57
+ onHoverEnd = jest.fn()
58
+ ref = React.createRef()
59
+ childRef = React.createRef()
60
+ const Component = () => {
61
+ useHover(ref, {
62
+ onHoverChange,
63
+ onHoverStart,
64
+ onHoverUpdate,
65
+ onHoverEnd,
66
+ })
67
+ useHover(childRef, { contain: true })
68
+ return (
69
+ <div ref={ref}>
70
+ <div ref={childRef} />
71
+ </div>
72
+ )
73
+ }
74
+ act(() => {
75
+ root.render(<Component />)
76
+ })
77
+ }
78
+
79
+ test('contains the hover gesture', () => {
80
+ componentInit()
81
+ const target = createEventTarget(ref.current)
82
+ const child = createEventTarget(childRef.current)
83
+ act(() => {
84
+ target.pointerover()
85
+ target.pointerout()
86
+ child.pointerover()
87
+ })
88
+ expect(onHoverEnd).toBeCalled()
89
+ act(() => {
90
+ child.pointerout()
91
+ })
92
+ expect(onHoverStart).toBeCalled()
93
+ })
94
+ })
95
+
96
+ describe('disabled', () => {
97
+ let onHoverChange, onHoverStart, onHoverUpdate, onHoverEnd, ref
98
+
99
+ const componentInit = () => {
100
+ onHoverChange = jest.fn()
101
+ onHoverStart = jest.fn()
102
+ onHoverUpdate = jest.fn()
103
+ onHoverEnd = jest.fn()
104
+ ref = React.createRef()
105
+ const Component = () => {
106
+ useHover(ref, {
107
+ disabled: true,
108
+ onHoverChange,
109
+ onHoverStart,
110
+ onHoverUpdate,
111
+ onHoverEnd,
112
+ })
113
+ return <div ref={ref} />
114
+ }
115
+ act(() => {
116
+ root.render(<Component />)
117
+ })
118
+ }
119
+
120
+ test('does not call callbacks', () => {
121
+ componentInit()
122
+ const target = createEventTarget(ref.current)
123
+ act(() => {
124
+ target.pointerover()
125
+ target.pointerout()
126
+ })
127
+ expect(onHoverChange).not.toBeCalled()
128
+ expect(onHoverStart).not.toBeCalled()
129
+ expect(onHoverUpdate).not.toBeCalled()
130
+ expect(onHoverEnd).not.toBeCalled()
131
+ })
132
+ })
133
+
134
+ describe('onHoverStart', () => {
135
+ let onHoverStart, ref
136
+
137
+ const componentInit = () => {
138
+ onHoverStart = jest.fn()
139
+ ref = React.createRef()
140
+ const Component = () => {
141
+ useHover(ref, { onHoverStart })
142
+ return <div ref={ref} />
143
+ }
144
+ act(() => {
145
+ root.render(<Component />)
146
+ })
147
+ }
148
+
149
+ test('is called for mouse pointers', () => {
150
+ componentInit()
151
+ const target = createEventTarget(ref.current)
152
+ act(() => {
153
+ target.pointerover({ pointerType: 'mouse' })
154
+ })
155
+ expect(onHoverStart).toBeCalledTimes(1)
156
+ })
157
+
158
+ test('is not called for touch pointers', () => {
159
+ componentInit()
160
+ const target = createEventTarget(ref.current)
161
+ act(() => {
162
+ target.pointerdown({ pointerType: 'touch' })
163
+ target.pointerup({ pointerType: 'touch' })
164
+ })
165
+ expect(onHoverStart).not.toBeCalled()
166
+ })
167
+
168
+ test('is called if a mouse pointer is used after a touch pointer', () => {
169
+ componentInit()
170
+ const target = createEventTarget(ref.current)
171
+ act(() => {
172
+ target.pointerdown({ pointerType: 'touch' })
173
+ target.pointerup({ pointerType: 'touch' })
174
+ target.pointerover({ pointerType: 'mouse' })
175
+ })
176
+ expect(onHoverStart).toBeCalledTimes(1)
177
+ })
178
+ })
179
+
180
+ describe('onHoverChange', () => {
181
+ let onHoverChange, ref
182
+
183
+ const componentInit = () => {
184
+ onHoverChange = jest.fn()
185
+ ref = React.createRef()
186
+ const Component = () => {
187
+ useHover(ref, { onHoverChange })
188
+ return <div ref={ref} />
189
+ }
190
+ act(() => {
191
+ root.render(<Component />)
192
+ })
193
+ }
194
+
195
+ test('is called for mouse pointers', () => {
196
+ componentInit()
197
+ const target = createEventTarget(ref.current)
198
+ act(() => {
199
+ target.pointerover()
200
+ })
201
+ expect(onHoverChange).toBeCalledTimes(1)
202
+ expect(onHoverChange).toBeCalledWith(true)
203
+ act(() => {
204
+ target.pointerout()
205
+ })
206
+ expect(onHoverChange).toBeCalledTimes(2)
207
+ expect(onHoverChange).toBeCalledWith(false)
208
+ })
209
+
210
+ test('is not called for touch pointers', () => {
211
+ componentInit()
212
+ const target = createEventTarget(ref.current)
213
+ act(() => {
214
+ target.pointerdown({ pointerType: 'touch' })
215
+ target.pointerup({ pointerType: 'touch' })
216
+ })
217
+ expect(onHoverChange).not.toBeCalled()
218
+ })
219
+ })
220
+
221
+ describe('onHoverEnd', () => {
222
+ let onHoverEnd, ref, childRef
223
+
224
+ const componentInit = () => {
225
+ onHoverEnd = jest.fn()
226
+ ref = React.createRef()
227
+ childRef = React.createRef()
228
+ const Component = () => {
229
+ useHover(ref, { onHoverEnd })
230
+ return (
231
+ <div ref={ref}>
232
+ <div ref={childRef} />
233
+ </div>
234
+ )
235
+ }
236
+ act(() => {
237
+ root.render(<Component />)
238
+ })
239
+ }
240
+
241
+ test('is called for mouse pointers', () => {
242
+ componentInit()
243
+ const target = createEventTarget(ref.current)
244
+ act(() => {
245
+ target.pointerover()
246
+ target.pointerout()
247
+ })
248
+ expect(onHoverEnd).toBeCalledTimes(1)
249
+ })
250
+
251
+ test('is not called for touch pointers', () => {
252
+ componentInit()
253
+ const target = createEventTarget(ref.current)
254
+ act(() => {
255
+ target.pointerdown({ pointerType: 'touch' })
256
+ target.pointerup({ pointerType: 'touch' })
257
+ })
258
+ expect(onHoverEnd).not.toBeCalled()
259
+ })
260
+
261
+ test('is not called when entering children of the target', () => {
262
+ componentInit()
263
+ const target = createEventTarget(ref.current)
264
+ const child = createEventTarget(childRef.current)
265
+ act(() => {
266
+ target.pointerover()
267
+ target.pointerout({ relatedTarget: childRef.current })
268
+ child.pointerover({ relatedTarget: target.node })
269
+ })
270
+ expect(onHoverEnd).not.toBeCalled()
271
+ })
272
+ })
273
+
274
+ describe('onHoverUpdate', () => {
275
+ test('is called after the active pointer moves"', () => {
276
+ const onHoverUpdate = jest.fn()
277
+ const ref = React.createRef()
278
+ const Component = () => {
279
+ useHover(ref, { onHoverUpdate })
280
+ return <div ref={ref} />
281
+ }
282
+ act(() => {
283
+ root.render(<Component />)
284
+ })
285
+
286
+ const target = createEventTarget(ref.current)
287
+ act(() => {
288
+ target.pointerover()
289
+ target.pointerhover({ x: 0, y: 0 })
290
+ target.pointerhover({ x: 1, y: 1 })
291
+ })
292
+ expect(onHoverUpdate).toBeCalledTimes(2)
293
+ })
294
+ })
295
+
296
+ describe('repeat use', () => {
297
+ let onHoverChange, onHoverStart, onHoverUpdate, onHoverEnd, ref
298
+
299
+ const componentInit = () => {
300
+ onHoverChange = jest.fn()
301
+ onHoverStart = jest.fn()
302
+ onHoverUpdate = jest.fn()
303
+ onHoverEnd = jest.fn()
304
+ ref = React.createRef()
305
+ const Component = () => {
306
+ useHover(ref, {
307
+ onHoverChange,
308
+ onHoverStart,
309
+ onHoverUpdate,
310
+ onHoverEnd,
311
+ })
312
+ return <div ref={ref} />
313
+ }
314
+ act(() => {
315
+ root.render(<Component />)
316
+ })
317
+ }
318
+
319
+ test('callbacks are called each time', () => {
320
+ componentInit()
321
+ const target = createEventTarget(ref.current)
322
+ act(() => {
323
+ target.pointerover()
324
+ target.pointerhover({ x: 1, y: 1 })
325
+ target.pointerout()
326
+ })
327
+ expect(onHoverStart).toBeCalledTimes(1)
328
+ expect(onHoverUpdate).toBeCalledTimes(1)
329
+ expect(onHoverEnd).toBeCalledTimes(1)
330
+ expect(onHoverChange).toBeCalledTimes(2)
331
+ act(() => {
332
+ target.pointerover()
333
+ target.pointerhover({ x: 1, y: 1 })
334
+ target.pointerout()
335
+ })
336
+ expect(onHoverStart).toBeCalledTimes(2)
337
+ expect(onHoverUpdate).toBeCalledTimes(2)
338
+ expect(onHoverEnd).toBeCalledTimes(2)
339
+ expect(onHoverChange).toBeCalledTimes(4)
340
+ })
341
+ })
342
+ })
@@ -0,0 +1,181 @@
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
8
+ */
9
+
10
+ import { getModality } from '../modality/index'
11
+ import { useEvent } from '../useEvent/index'
12
+ import { useLayoutEffectImpl as useLayoutEffect } from '../useLayoutEffect/index'
13
+
14
+ /**
15
+ * Types
16
+ */
17
+
18
+ export type HoverEventsConfig = {
19
+ contain?: boolean | null
20
+ disabled?: boolean | null
21
+ onHoverStart?: ((e: any) => void) | null
22
+ onHoverChange?: ((bool: boolean) => void) | null
23
+ onHoverUpdate?: ((e: any) => void) | null
24
+ onHoverEnd?: ((e: any) => void) | null
25
+ }
26
+
27
+ /**
28
+ * Implementation
29
+ */
30
+
31
+ const emptyObject = {} as any
32
+ const opts = { passive: true }
33
+ const lockEventType = 'react-gui:hover:lock'
34
+ const unlockEventType = 'react-gui:hover:unlock'
35
+ const supportsPointerEvent = () =>
36
+ !!(typeof window !== 'undefined' && window.PointerEvent != null)
37
+
38
+ function dispatchCustomEvent(
39
+ target: EventTarget,
40
+ type: string,
41
+ payload?: {
42
+ bubbles?: boolean
43
+ cancelable?: boolean
44
+ detail?: {
45
+ [K in string]: unknown
46
+ }
47
+ }
48
+ ) {
49
+ const event = document.createEvent('CustomEvent')
50
+ const { bubbles = true, cancelable = true, detail } = payload || emptyObject
51
+ event.initCustomEvent(type, bubbles, cancelable, detail)
52
+ target.dispatchEvent(event)
53
+ }
54
+
55
+ // This accounts for the non-PointerEvent fallback events.
56
+ function getPointerType(event) {
57
+ const { pointerType } = event
58
+ return pointerType != null ? pointerType : getModality()
59
+ }
60
+
61
+ export function useHover(targetRef: any, config: HoverEventsConfig): void {
62
+ const { contain, disabled, onHoverStart, onHoverChange, onHoverUpdate, onHoverEnd } =
63
+ config
64
+
65
+ const canUsePE = supportsPointerEvent()
66
+
67
+ const addMoveListener = useEvent(canUsePE ? 'pointermove' : 'mousemove', opts)
68
+ const addEnterListener = useEvent(canUsePE ? 'pointerenter' : 'mouseenter', opts)
69
+ const addLeaveListener = useEvent(canUsePE ? 'pointerleave' : 'mouseleave', opts)
70
+ // These custom events are used to implement the "contain" prop.
71
+ const addLockListener = useEvent(lockEventType, opts)
72
+ const addUnlockListener = useEvent(unlockEventType, opts)
73
+
74
+ useLayoutEffect(() => {
75
+ const target = targetRef.current
76
+ if (target !== null) {
77
+ /**
78
+ * End the hover gesture
79
+ */
80
+ const hoverEnd = function (e) {
81
+ if (onHoverEnd != null) {
82
+ onHoverEnd(e)
83
+ }
84
+ if (onHoverChange != null) {
85
+ onHoverChange(false)
86
+ }
87
+ // Remove the listeners once finished.
88
+ addMoveListener(target, null)
89
+ addLeaveListener(target, null)
90
+ }
91
+
92
+ /**
93
+ * Leave element
94
+ */
95
+ const leaveListener = function (e) {
96
+ const target = targetRef.current
97
+ if (target != null && getPointerType(e) !== 'touch') {
98
+ if (contain) {
99
+ dispatchCustomEvent(target, unlockEventType)
100
+ }
101
+ hoverEnd(e)
102
+ }
103
+ }
104
+
105
+ /**
106
+ * Move within element
107
+ */
108
+ const moveListener = function (e) {
109
+ if (getPointerType(e) !== 'touch') {
110
+ if (onHoverUpdate != null) {
111
+ // Not all browsers have these properties
112
+ if (e.x == null) {
113
+ e.x = e.clientX
114
+ }
115
+ if (e.y == null) {
116
+ e.y = e.clientY
117
+ }
118
+ onHoverUpdate(e)
119
+ }
120
+ }
121
+ }
122
+
123
+ /**
124
+ * Start the hover gesture
125
+ */
126
+ const hoverStart = function (e) {
127
+ if (onHoverStart != null) {
128
+ onHoverStart(e)
129
+ }
130
+ if (onHoverChange != null) {
131
+ onHoverChange(true)
132
+ }
133
+ // Set the listeners needed for the rest of the hover gesture.
134
+ if (onHoverUpdate != null) {
135
+ addMoveListener(target, !disabled ? moveListener : null)
136
+ }
137
+ addLeaveListener(target, !disabled ? leaveListener : null)
138
+ }
139
+
140
+ /**
141
+ * Enter element
142
+ */
143
+ const enterListener = function (e) {
144
+ const target = targetRef.current
145
+ if (target != null && getPointerType(e) !== 'touch') {
146
+ if (contain) {
147
+ dispatchCustomEvent(target, lockEventType)
148
+ }
149
+ hoverStart(e)
150
+ const lockListener = function (lockEvent) {
151
+ if (lockEvent.target !== target) {
152
+ hoverEnd(e)
153
+ }
154
+ }
155
+ const unlockListener = function (lockEvent) {
156
+ if (lockEvent.target !== target) {
157
+ hoverStart(e)
158
+ }
159
+ }
160
+ addLockListener(target, !disabled ? lockListener : null)
161
+ addUnlockListener(target, !disabled ? unlockListener : null)
162
+ }
163
+ }
164
+
165
+ addEnterListener(target, !disabled ? enterListener : null)
166
+ }
167
+ }, [
168
+ addEnterListener,
169
+ addMoveListener,
170
+ addLeaveListener,
171
+ addLockListener,
172
+ addUnlockListener,
173
+ contain,
174
+ disabled,
175
+ onHoverStart,
176
+ onHoverChange,
177
+ onHoverUpdate,
178
+ onHoverEnd,
179
+ targetRef,
180
+ ])
181
+ }
@@ -0,0 +1,15 @@
1
+ import React from 'react' /**
2
+ * Copyright (c) Nicolas Gallagher.
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
+ * useLayoutEffect throws an error on the server. On the few occasions where is
8
+ * problematic, use this hook.
9
+ *
10
+ * @flow
11
+ */
12
+
13
+ import { canUseDOM } from '../canUseDOM'
14
+
15
+ export const useLayoutEffectImpl = canUseDOM ? React.useLayoutEffect : React.useEffect
@@ -0,0 +1,57 @@
1
+ import React from 'react' /**
2
+ * Copyright (c) Nicolas Gallagher.
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
8
+ */
9
+
10
+ import { isLocaleRTL } from './isLocaleRTL'
11
+
12
+ type Locale = string
13
+ type WritingDirection = 'ltr' | 'rtl'
14
+
15
+ type LocaleValue = {
16
+ // Locale writing direction.
17
+ direction: WritingDirection
18
+ // Locale BCP47 language code: https://www.ietf.org/rfc/bcp/bcp47.txt
19
+ locale: Locale | null
20
+ }
21
+
22
+ type ProviderProps = {
23
+ children: any
24
+ } & LocaleValue
25
+
26
+ const defaultLocale = {
27
+ direction: 'ltr',
28
+ locale: 'en-US',
29
+ }
30
+
31
+ const LocaleContext = React.createContext<LocaleValue>(defaultLocale as any)
32
+
33
+ export function getLocaleDirection(locale: Locale): WritingDirection {
34
+ return isLocaleRTL(locale) ? 'rtl' : 'ltr'
35
+ }
36
+
37
+ export function LocaleProvider(props: ProviderProps) {
38
+ const { direction, locale, children } = props
39
+ const needsContext = direction || locale
40
+
41
+ return needsContext ? (
42
+ <LocaleContext.Provider
43
+ value={{
44
+ direction: locale ? getLocaleDirection(locale) : direction,
45
+ locale,
46
+ }}
47
+ >
48
+ {children}
49
+ </LocaleContext.Provider>
50
+ ) : (
51
+ children
52
+ )
53
+ }
54
+
55
+ export function useLocaleContext(): LocaleValue {
56
+ return React.useContext(LocaleContext)
57
+ }
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Copyright (c) Nicolas Gallagher.
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
8
+ */
9
+
10
+ const rtlScripts = new Set([
11
+ 'Arab',
12
+ 'Syrc',
13
+ 'Samr',
14
+ 'Mand',
15
+ 'Thaa',
16
+ 'Mend',
17
+ 'Nkoo',
18
+ 'Adlm',
19
+ 'Rohg',
20
+ 'Hebr',
21
+ ])
22
+
23
+ const rtlLangs = new Set([
24
+ 'ae', // Avestan
25
+ 'ar', // Arabic
26
+ 'arc', // Aramaic
27
+ 'bcc', // Southern Balochi
28
+ 'bqi', // Bakthiari
29
+ 'ckb', // Sorani
30
+ 'dv', // Dhivehi
31
+ 'fa',
32
+ 'far', // Persian
33
+ 'glk', // Gilaki
34
+ 'he',
35
+ 'iw', // Hebrew
36
+ 'khw', // Khowar
37
+ 'ks', // Kashmiri
38
+ 'ku', // Kurdish
39
+ 'mzn', // Mazanderani
40
+ 'nqo', // N'Ko
41
+ 'pnb', // Western Punjabi
42
+ 'ps', // Pashto
43
+ 'sd', // Sindhi
44
+ 'ug', // Uyghur
45
+ 'ur', // Urdu
46
+ 'yi', // Yiddish
47
+ ])
48
+
49
+ const cache = new Map()
50
+
51
+ /**
52
+ * Determine the writing direction of a locale
53
+ */
54
+ export function isLocaleRTL(locale: string): boolean {
55
+ const cachedRTL = cache.get(locale)
56
+ if (cachedRTL) {
57
+ return cachedRTL
58
+ }
59
+
60
+ let isRTL = false
61
+ // @ts-ignore
62
+ if (Intl.Locale) {
63
+ // @ts-ignore
64
+ const script = new Intl.Locale(locale).maximize().script
65
+ isRTL = rtlScripts.has(script as any)
66
+ } else {
67
+ // Fallback to inferring from language
68
+ const lang = locale.split('-')[0]
69
+ isRTL = rtlLangs.has(lang)
70
+ }
71
+
72
+ cache.set(locale, isRTL)
73
+ return isRTL
74
+ }