react-native-unistyles 3.0.0-alpha.4 → 3.0.0-alpha.41

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 (540) hide show
  1. package/README.md +7 -0
  2. package/Unistyles.podspec +1 -1
  3. package/android/CMakeLists.txt +22 -45
  4. package/android/build.gradle +16 -5
  5. package/android/src/main/cxx/NativeUnistylesModule.cpp +71 -0
  6. package/android/src/main/cxx/NativeUnistylesModule.h +42 -0
  7. package/android/src/main/cxx/cpp-adapter.cpp +8 -86
  8. package/android/src/main/java/com/unistyles/Equatable.kt +61 -0
  9. package/android/src/main/java/com/unistyles/NativePlatform+android.kt +294 -0
  10. package/android/src/main/java/com/unistyles/NativePlatform+insets.kt +152 -0
  11. package/android/src/main/java/com/unistyles/NativePlatform+listener.kt +59 -0
  12. package/android/src/main/java/com/unistyles/UnistylesModule.kt +51 -0
  13. package/android/src/main/java/com/unistyles/UnistylesPackage.kt +16 -14
  14. package/cxx/NativePlatform.h +11 -0
  15. package/cxx/common/Constants.h +4 -0
  16. package/cxx/common/Helpers.h +140 -5
  17. package/cxx/core/HostStyle.cpp +10 -6
  18. package/cxx/core/HostStyle.h +4 -0
  19. package/cxx/core/StyleSheet.h +0 -2
  20. package/cxx/core/StyleSheetRegistry.cpp +9 -17
  21. package/cxx/core/StyleSheetRegistry.h +3 -4
  22. package/cxx/core/Unistyle.h +8 -11
  23. package/cxx/core/UnistyleData.h +24 -0
  24. package/cxx/core/UnistyleWrapper.h +108 -13
  25. package/cxx/core/UnistylesCommitHook.cpp +14 -15
  26. package/cxx/core/UnistylesCommitHook.h +6 -11
  27. package/cxx/core/UnistylesCommitShadowNode.h +13 -0
  28. package/cxx/core/UnistylesMountHook.cpp +28 -0
  29. package/cxx/core/UnistylesMountHook.h +27 -0
  30. package/cxx/core/UnistylesRegistry.cpp +123 -83
  31. package/cxx/core/UnistylesRegistry.h +16 -14
  32. package/cxx/core/UnistylesState.cpp +29 -8
  33. package/cxx/core/UnistylesState.h +5 -2
  34. package/cxx/hybridObjects/HybridNavigationBar.cpp +0 -4
  35. package/cxx/hybridObjects/HybridNavigationBar.h +3 -4
  36. package/cxx/hybridObjects/HybridShadowRegistry.cpp +19 -11
  37. package/cxx/hybridObjects/HybridStatusBar.cpp +0 -4
  38. package/cxx/hybridObjects/HybridStatusBar.h +3 -4
  39. package/cxx/hybridObjects/HybridStyleSheet.cpp +154 -23
  40. package/cxx/hybridObjects/HybridStyleSheet.h +27 -5
  41. package/cxx/hybridObjects/HybridUnistylesRuntime.cpp +96 -14
  42. package/cxx/hybridObjects/HybridUnistylesRuntime.h +19 -3
  43. package/cxx/parser/Parser.cpp +249 -177
  44. package/cxx/parser/Parser.h +12 -15
  45. package/cxx/shadowTree/ShadowLeafUpdate.h +3 -1
  46. package/cxx/shadowTree/ShadowTrafficController.h +71 -0
  47. package/cxx/shadowTree/ShadowTreeManager.cpp +28 -19
  48. package/cxx/shadowTree/ShadowTreeManager.h +3 -2
  49. package/ios/Equatable.swift +2 -1
  50. package/ios/Extensions.swift +3 -1
  51. package/ios/NativePlatform+ios.swift +34 -9
  52. package/ios/NativePlatform+keyboard.swift +83 -0
  53. package/ios/NativePlatformListener+ios.swift +36 -24
  54. package/ios/Unistyles.h +1 -0
  55. package/ios/UnistylesModuleOnLoad.h +8 -2
  56. package/ios/UnistylesModuleOnLoad.mm +9 -1
  57. package/lib/commonjs/components/Display.js +18 -0
  58. package/lib/commonjs/components/Display.js.map +1 -0
  59. package/lib/commonjs/components/Hide.js +18 -0
  60. package/lib/commonjs/components/Hide.js.map +1 -0
  61. package/lib/commonjs/components/index.js +20 -0
  62. package/lib/commonjs/components/index.js.map +1 -0
  63. package/lib/commonjs/components/useMedia.js +59 -0
  64. package/lib/commonjs/components/useMedia.js.map +1 -0
  65. package/lib/commonjs/components/useMedia.web.js +43 -0
  66. package/lib/commonjs/components/useMedia.web.js.map +1 -0
  67. package/lib/commonjs/core/createUnistylesComponent.js +79 -0
  68. package/lib/commonjs/core/createUnistylesComponent.js.map +1 -0
  69. package/lib/commonjs/core/createUnistylesComponent.native.js +82 -0
  70. package/lib/commonjs/core/createUnistylesComponent.native.js.map +1 -0
  71. package/lib/commonjs/core/index.js +13 -0
  72. package/lib/commonjs/core/index.js.map +1 -0
  73. package/lib/commonjs/index.js +21 -11
  74. package/lib/commonjs/index.js.map +1 -1
  75. package/lib/commonjs/mq.js +25 -12
  76. package/lib/commonjs/mq.js.map +1 -1
  77. package/lib/commonjs/specs/NativePlatform/NativePlatform.nitro.js +1 -0
  78. package/lib/commonjs/specs/NativePlatform/NativePlatform.nitro.js.map +1 -1
  79. package/lib/commonjs/specs/NavigtionBar/index.js +0 -15
  80. package/lib/commonjs/specs/NavigtionBar/index.js.map +1 -1
  81. package/lib/commonjs/specs/ShadowRegistry/index.js +10 -6
  82. package/lib/commonjs/specs/ShadowRegistry/index.js.map +1 -1
  83. package/lib/commonjs/specs/StatusBar/index.js +0 -5
  84. package/lib/commonjs/specs/StatusBar/index.js.map +1 -1
  85. package/lib/commonjs/specs/StyleSheet/index.js +1 -0
  86. package/lib/commonjs/specs/StyleSheet/index.js.map +1 -1
  87. package/lib/commonjs/specs/UnistylesRuntime/index.js +1 -3
  88. package/lib/commonjs/specs/UnistylesRuntime/index.js.map +1 -1
  89. package/lib/commonjs/specs/index.js +7 -0
  90. package/lib/commonjs/specs/index.js.map +1 -1
  91. package/lib/commonjs/specs/index.web.js +1 -1
  92. package/lib/commonjs/types/stylesheet.js.map +1 -1
  93. package/lib/commonjs/utils.js +26 -0
  94. package/lib/commonjs/utils.js.map +1 -0
  95. package/lib/commonjs/web/convert/index.js +79 -0
  96. package/lib/commonjs/web/convert/index.js.map +1 -0
  97. package/lib/commonjs/web/convert/module.d.js +2 -0
  98. package/lib/commonjs/web/convert/module.d.js.map +1 -0
  99. package/lib/commonjs/web/convert/object/boxShadow.js +59 -0
  100. package/lib/commonjs/web/convert/object/boxShadow.js.map +1 -0
  101. package/lib/commonjs/web/convert/object/filter.js +42 -0
  102. package/lib/commonjs/web/convert/object/filter.js.map +1 -0
  103. package/lib/commonjs/web/convert/object/index.js +39 -0
  104. package/lib/commonjs/web/convert/object/index.js.map +1 -0
  105. package/lib/commonjs/web/convert/object/objectStyle.js +56 -0
  106. package/lib/commonjs/web/convert/object/objectStyle.js.map +1 -0
  107. package/lib/commonjs/web/convert/object/transform.js +27 -0
  108. package/lib/commonjs/web/convert/object/transform.js.map +1 -0
  109. package/lib/commonjs/web/convert/pseudo.js +10 -0
  110. package/lib/commonjs/web/convert/pseudo.js.map +1 -0
  111. package/lib/commonjs/web/convert/shadow/boxShadow.js +62 -0
  112. package/lib/commonjs/web/convert/shadow/boxShadow.js.map +1 -0
  113. package/lib/commonjs/web/convert/shadow/getShadowBreakpoints.js +38 -0
  114. package/lib/commonjs/web/convert/shadow/getShadowBreakpoints.js.map +1 -0
  115. package/lib/commonjs/web/convert/shadow/index.js +28 -0
  116. package/lib/commonjs/web/convert/shadow/index.js.map +1 -0
  117. package/lib/commonjs/web/convert/shadow/textShadow.js +59 -0
  118. package/lib/commonjs/web/convert/shadow/textShadow.js.map +1 -0
  119. package/lib/commonjs/web/convert/style.js +93 -0
  120. package/lib/commonjs/web/convert/style.js.map +1 -0
  121. package/lib/commonjs/web/convert/types.js +9 -0
  122. package/lib/commonjs/web/convert/types.js.map +1 -0
  123. package/lib/commonjs/web/convert/utils.js +59 -0
  124. package/lib/commonjs/web/convert/utils.js.map +1 -0
  125. package/lib/commonjs/web/create.js +49 -0
  126. package/lib/commonjs/web/create.js.map +1 -0
  127. package/lib/commonjs/web/index.js +60 -0
  128. package/lib/commonjs/web/index.js.map +1 -0
  129. package/lib/commonjs/web/listener.js +61 -0
  130. package/lib/commonjs/web/listener.js.map +1 -0
  131. package/lib/commonjs/web/mock.js +27 -0
  132. package/lib/commonjs/web/mock.js.map +1 -0
  133. package/lib/commonjs/web/registry.js +172 -0
  134. package/lib/commonjs/web/registry.js.map +1 -0
  135. package/lib/commonjs/web/runtime.js +173 -0
  136. package/lib/commonjs/web/runtime.js.map +1 -0
  137. package/lib/commonjs/web/shadowRegistry.js +142 -0
  138. package/lib/commonjs/web/shadowRegistry.js.map +1 -0
  139. package/lib/commonjs/web/state.js +73 -0
  140. package/lib/commonjs/web/state.js.map +1 -0
  141. package/lib/commonjs/web/utils/common.js +39 -0
  142. package/lib/commonjs/web/utils/common.js.map +1 -0
  143. package/lib/commonjs/web/utils/index.js +28 -0
  144. package/lib/commonjs/web/utils/index.js.map +1 -0
  145. package/lib/commonjs/web/utils/unistyle.js +85 -0
  146. package/lib/commonjs/web/utils/unistyle.js.map +1 -0
  147. package/lib/commonjs/web/variants/getVariants.js +39 -0
  148. package/lib/commonjs/web/variants/getVariants.js.map +1 -0
  149. package/lib/commonjs/web/variants/index.js +28 -0
  150. package/lib/commonjs/web/variants/index.js.map +1 -0
  151. package/lib/commonjs/web/variants/useVariants.js +59 -0
  152. package/lib/commonjs/web/variants/useVariants.js.map +1 -0
  153. package/lib/module/components/Display.js +13 -0
  154. package/lib/module/components/Display.js.map +1 -0
  155. package/lib/module/components/Hide.js +13 -0
  156. package/lib/module/components/Hide.js.map +1 -0
  157. package/lib/module/components/index.js +5 -0
  158. package/lib/module/components/index.js.map +1 -0
  159. package/lib/module/components/useMedia.js +54 -0
  160. package/lib/module/components/useMedia.js.map +1 -0
  161. package/lib/module/components/useMedia.web.js +38 -0
  162. package/lib/module/components/useMedia.web.js.map +1 -0
  163. package/lib/module/core/createUnistylesComponent.js +72 -0
  164. package/lib/module/core/createUnistylesComponent.js.map +1 -0
  165. package/lib/module/core/createUnistylesComponent.native.js +75 -0
  166. package/lib/module/core/createUnistylesComponent.native.js.map +1 -0
  167. package/lib/module/core/index.js +4 -0
  168. package/lib/module/core/index.js.map +1 -0
  169. package/lib/module/index.js +2 -9
  170. package/lib/module/index.js.map +1 -1
  171. package/lib/module/mq.js +21 -11
  172. package/lib/module/mq.js.map +1 -1
  173. package/lib/module/specs/NativePlatform/NativePlatform.nitro.js +1 -0
  174. package/lib/module/specs/NativePlatform/NativePlatform.nitro.js.map +1 -1
  175. package/lib/module/specs/NavigtionBar/index.js +0 -10
  176. package/lib/module/specs/NavigtionBar/index.js.map +1 -1
  177. package/lib/module/specs/ShadowRegistry/index.js +10 -6
  178. package/lib/module/specs/ShadowRegistry/index.js.map +1 -1
  179. package/lib/module/specs/StatusBar/index.js +1 -6
  180. package/lib/module/specs/StatusBar/index.js.map +1 -1
  181. package/lib/module/specs/StyleSheet/index.js +1 -0
  182. package/lib/module/specs/StyleSheet/index.js.map +1 -1
  183. package/lib/module/specs/UnistylesRuntime/index.js +1 -3
  184. package/lib/module/specs/UnistylesRuntime/index.js.map +1 -1
  185. package/lib/module/specs/index.js +2 -1
  186. package/lib/module/specs/index.js.map +1 -1
  187. package/lib/module/specs/index.web.js +1 -1
  188. package/lib/module/specs/index.web.js.map +1 -1
  189. package/lib/module/types/stylesheet.js.map +1 -1
  190. package/lib/module/utils.js +21 -0
  191. package/lib/module/utils.js.map +1 -0
  192. package/lib/module/web/convert/index.js +74 -0
  193. package/lib/module/web/convert/index.js.map +1 -0
  194. package/lib/module/web/convert/module.d.js +2 -0
  195. package/lib/module/web/convert/module.d.js.map +1 -0
  196. package/lib/module/web/convert/object/boxShadow.js +54 -0
  197. package/lib/module/web/convert/object/boxShadow.js.map +1 -0
  198. package/lib/module/web/convert/object/filter.js +37 -0
  199. package/lib/module/web/convert/object/filter.js.map +1 -0
  200. package/lib/module/web/convert/object/index.js +6 -0
  201. package/lib/module/web/convert/object/index.js.map +1 -0
  202. package/lib/module/web/convert/object/objectStyle.js +51 -0
  203. package/lib/module/web/convert/object/objectStyle.js.map +1 -0
  204. package/lib/module/web/convert/object/transform.js +22 -0
  205. package/lib/module/web/convert/object/transform.js.map +1 -0
  206. package/lib/module/web/convert/pseudo.js +5 -0
  207. package/lib/module/web/convert/pseudo.js.map +1 -0
  208. package/lib/module/web/convert/shadow/boxShadow.js +57 -0
  209. package/lib/module/web/convert/shadow/boxShadow.js.map +1 -0
  210. package/lib/module/web/convert/shadow/getShadowBreakpoints.js +33 -0
  211. package/lib/module/web/convert/shadow/getShadowBreakpoints.js.map +1 -0
  212. package/lib/module/web/convert/shadow/index.js +5 -0
  213. package/lib/module/web/convert/shadow/index.js.map +1 -0
  214. package/lib/module/web/convert/shadow/textShadow.js +54 -0
  215. package/lib/module/web/convert/shadow/textShadow.js.map +1 -0
  216. package/lib/module/web/convert/style.js +88 -0
  217. package/lib/module/web/convert/style.js.map +1 -0
  218. package/lib/module/web/convert/types.js +5 -0
  219. package/lib/module/web/convert/types.js.map +1 -0
  220. package/lib/module/web/convert/utils.js +45 -0
  221. package/lib/module/web/convert/utils.js.map +1 -0
  222. package/lib/module/web/create.js +44 -0
  223. package/lib/module/web/create.js.map +1 -0
  224. package/lib/module/web/index.js +26 -0
  225. package/lib/module/web/index.js.map +1 -0
  226. package/lib/module/web/listener.js +57 -0
  227. package/lib/module/web/listener.js.map +1 -0
  228. package/lib/module/web/mock.js +23 -0
  229. package/lib/module/web/mock.js.map +1 -0
  230. package/lib/module/web/registry.js +168 -0
  231. package/lib/module/web/registry.js.map +1 -0
  232. package/lib/module/web/runtime.js +169 -0
  233. package/lib/module/web/runtime.js.map +1 -0
  234. package/lib/module/web/shadowRegistry.js +138 -0
  235. package/lib/module/web/shadowRegistry.js.map +1 -0
  236. package/lib/module/web/state.js +69 -0
  237. package/lib/module/web/state.js.map +1 -0
  238. package/lib/module/web/utils/common.js +28 -0
  239. package/lib/module/web/utils/common.js.map +1 -0
  240. package/lib/module/web/utils/index.js +5 -0
  241. package/lib/module/web/utils/index.js.map +1 -0
  242. package/lib/module/web/utils/unistyle.js +72 -0
  243. package/lib/module/web/utils/unistyle.js.map +1 -0
  244. package/lib/module/web/variants/getVariants.js +34 -0
  245. package/lib/module/web/variants/getVariants.js.map +1 -0
  246. package/lib/module/web/variants/index.js +5 -0
  247. package/lib/module/web/variants/index.js.map +1 -0
  248. package/lib/module/web/variants/useVariants.js +54 -0
  249. package/lib/module/web/variants/useVariants.js.map +1 -0
  250. package/lib/typescript/src/components/Display.d.ts +7 -0
  251. package/lib/typescript/src/components/Display.d.ts.map +1 -0
  252. package/lib/typescript/src/components/Hide.d.ts +7 -0
  253. package/lib/typescript/src/components/Hide.d.ts.map +1 -0
  254. package/lib/typescript/src/components/index.d.ts +3 -0
  255. package/lib/typescript/src/components/index.d.ts.map +1 -0
  256. package/lib/typescript/src/components/useMedia.d.ts +6 -0
  257. package/lib/typescript/src/components/useMedia.d.ts.map +1 -0
  258. package/lib/typescript/src/components/useMedia.web.d.ts +6 -0
  259. package/lib/typescript/src/components/useMedia.web.d.ts.map +1 -0
  260. package/lib/typescript/src/core/createUnistylesComponent.d.ts +8 -0
  261. package/lib/typescript/src/core/createUnistylesComponent.d.ts.map +1 -0
  262. package/lib/typescript/src/core/createUnistylesComponent.native.d.ts +8 -0
  263. package/lib/typescript/src/core/createUnistylesComponent.native.d.ts.map +1 -0
  264. package/lib/typescript/src/core/index.d.ts +2 -0
  265. package/lib/typescript/src/core/index.d.ts.map +1 -0
  266. package/lib/typescript/src/index.d.ts +3 -0
  267. package/lib/typescript/src/index.d.ts.map +1 -1
  268. package/lib/typescript/src/mq.d.ts +8 -0
  269. package/lib/typescript/src/mq.d.ts.map +1 -1
  270. package/lib/typescript/src/specs/NativePlatform/NativePlatform.nitro.d.ts +7 -5
  271. package/lib/typescript/src/specs/NativePlatform/NativePlatform.nitro.d.ts.map +1 -1
  272. package/lib/typescript/src/specs/NavigtionBar/UnistylesNavigationBar.nitro.d.ts +0 -1
  273. package/lib/typescript/src/specs/NavigtionBar/UnistylesNavigationBar.nitro.d.ts.map +1 -1
  274. package/lib/typescript/src/specs/NavigtionBar/index.d.ts +1 -10
  275. package/lib/typescript/src/specs/NavigtionBar/index.d.ts.map +1 -1
  276. package/lib/typescript/src/specs/ShadowRegistry/index.d.ts +4 -4
  277. package/lib/typescript/src/specs/ShadowRegistry/index.d.ts.map +1 -1
  278. package/lib/typescript/src/specs/ShadowRegistry/types.d.ts +3 -0
  279. package/lib/typescript/src/specs/ShadowRegistry/types.d.ts.map +1 -1
  280. package/lib/typescript/src/specs/StatusBar/UnistylesStatusBar.nitro.d.ts +0 -1
  281. package/lib/typescript/src/specs/StatusBar/UnistylesStatusBar.nitro.d.ts.map +1 -1
  282. package/lib/typescript/src/specs/StatusBar/index.d.ts +2 -4
  283. package/lib/typescript/src/specs/StatusBar/index.d.ts.map +1 -1
  284. package/lib/typescript/src/specs/StyleSheet/UnistylesStyleSheet.nitro.d.ts +3 -1
  285. package/lib/typescript/src/specs/StyleSheet/UnistylesStyleSheet.nitro.d.ts.map +1 -1
  286. package/lib/typescript/src/specs/StyleSheet/index.d.ts +3 -1
  287. package/lib/typescript/src/specs/StyleSheet/index.d.ts.map +1 -1
  288. package/lib/typescript/src/specs/UnistylesRuntime/UnistylesRuntime.nitro.d.ts +1 -1
  289. package/lib/typescript/src/specs/UnistylesRuntime/UnistylesRuntime.nitro.d.ts.map +1 -1
  290. package/lib/typescript/src/specs/UnistylesRuntime/index.d.ts +3 -1
  291. package/lib/typescript/src/specs/UnistylesRuntime/index.d.ts.map +1 -1
  292. package/lib/typescript/src/specs/index.d.ts +4 -2
  293. package/lib/typescript/src/specs/index.d.ts.map +1 -1
  294. package/lib/typescript/src/specs/index.web.d.ts +1 -1
  295. package/lib/typescript/src/specs/index.web.d.ts.map +1 -1
  296. package/lib/typescript/src/types/breakpoints.d.ts +11 -11
  297. package/lib/typescript/src/types/breakpoints.d.ts.map +1 -1
  298. package/lib/typescript/src/types/common.d.ts +1 -0
  299. package/lib/typescript/src/types/common.d.ts.map +1 -1
  300. package/lib/typescript/src/types/index.d.ts +1 -1
  301. package/lib/typescript/src/types/index.d.ts.map +1 -1
  302. package/lib/typescript/src/types/stylesheet.d.ts +6 -4
  303. package/lib/typescript/src/types/stylesheet.d.ts.map +1 -1
  304. package/lib/typescript/src/types/variants.d.ts +4 -1
  305. package/lib/typescript/src/types/variants.d.ts.map +1 -1
  306. package/lib/typescript/src/utils.d.ts +2 -0
  307. package/lib/typescript/src/utils.d.ts.map +1 -0
  308. package/lib/typescript/src/web/convert/index.d.ts +3 -0
  309. package/lib/typescript/src/web/convert/index.d.ts.map +1 -0
  310. package/lib/typescript/src/web/convert/object/boxShadow.d.ts +9 -0
  311. package/lib/typescript/src/web/convert/object/boxShadow.d.ts.map +1 -0
  312. package/lib/typescript/src/web/convert/object/filter.d.ts +3 -0
  313. package/lib/typescript/src/web/convert/object/filter.d.ts.map +1 -0
  314. package/lib/typescript/src/web/convert/object/index.d.ts +4 -0
  315. package/lib/typescript/src/web/convert/object/index.d.ts.map +1 -0
  316. package/lib/typescript/src/web/convert/object/objectStyle.d.ts +5 -0
  317. package/lib/typescript/src/web/convert/object/objectStyle.d.ts.map +1 -0
  318. package/lib/typescript/src/web/convert/object/transform.d.ts +3 -0
  319. package/lib/typescript/src/web/convert/object/transform.d.ts.map +1 -0
  320. package/lib/typescript/src/web/convert/pseudo.d.ts +6 -0
  321. package/lib/typescript/src/web/convert/pseudo.d.ts.map +1 -0
  322. package/lib/typescript/src/web/convert/shadow/boxShadow.d.ts +8 -0
  323. package/lib/typescript/src/web/convert/shadow/boxShadow.d.ts.map +1 -0
  324. package/lib/typescript/src/web/convert/shadow/getShadowBreakpoints.d.ts +2 -0
  325. package/lib/typescript/src/web/convert/shadow/getShadowBreakpoints.d.ts.map +1 -0
  326. package/lib/typescript/src/web/convert/shadow/index.d.ts +3 -0
  327. package/lib/typescript/src/web/convert/shadow/index.d.ts.map +1 -0
  328. package/lib/typescript/src/web/convert/shadow/textShadow.d.ts +8 -0
  329. package/lib/typescript/src/web/convert/shadow/textShadow.d.ts.map +1 -0
  330. package/lib/typescript/src/web/convert/style.d.ts +2 -0
  331. package/lib/typescript/src/web/convert/style.d.ts.map +1 -0
  332. package/lib/typescript/{web → src/web}/convert/types.d.ts +8 -2
  333. package/lib/typescript/src/web/convert/types.d.ts.map +1 -0
  334. package/lib/typescript/src/web/convert/utils.d.ts +12 -0
  335. package/lib/typescript/src/web/convert/utils.d.ts.map +1 -0
  336. package/lib/typescript/src/web/create.d.ts +1443 -0
  337. package/lib/typescript/{web → src/web}/create.d.ts.map +1 -1
  338. package/lib/typescript/src/web/index.d.ts +1459 -0
  339. package/lib/typescript/{web → src/web}/index.d.ts.map +1 -1
  340. package/lib/typescript/{web/listener → src/web}/listener.d.ts +5 -2
  341. package/lib/typescript/src/web/listener.d.ts.map +1 -0
  342. package/lib/typescript/src/web/mock.d.ts +5 -0
  343. package/lib/typescript/src/web/mock.d.ts.map +1 -0
  344. package/lib/typescript/src/web/registry.d.ts +24 -0
  345. package/lib/typescript/src/web/registry.d.ts.map +1 -0
  346. package/lib/typescript/{web → src/web}/runtime.d.ts +11 -10
  347. package/lib/typescript/src/web/runtime.d.ts.map +1 -0
  348. package/lib/typescript/src/web/shadowRegistry.d.ts +17 -0
  349. package/lib/typescript/src/web/shadowRegistry.d.ts.map +1 -0
  350. package/lib/typescript/src/web/state.d.ts +18 -0
  351. package/lib/typescript/src/web/state.d.ts.map +1 -0
  352. package/lib/typescript/src/web/utils/common.d.ts +8 -0
  353. package/lib/typescript/src/web/utils/common.d.ts.map +1 -0
  354. package/lib/typescript/src/web/utils/index.d.ts +3 -0
  355. package/lib/typescript/src/web/utils/index.d.ts.map +1 -0
  356. package/lib/typescript/src/web/utils/unistyle.d.ts +20 -0
  357. package/lib/typescript/src/web/utils/unistyle.d.ts.map +1 -0
  358. package/lib/typescript/src/web/variants/getVariants.d.ts +3 -0
  359. package/lib/typescript/src/web/variants/getVariants.d.ts.map +1 -0
  360. package/lib/typescript/src/web/variants/index.d.ts +3 -0
  361. package/lib/typescript/src/web/variants/index.d.ts.map +1 -0
  362. package/lib/typescript/src/web/variants/useVariants.d.ts +3 -0
  363. package/lib/typescript/src/web/variants/useVariants.d.ts.map +1 -0
  364. package/nitrogen/generated/android/c++/JColorScheme.hpp +1 -1
  365. package/nitrogen/generated/android/c++/JFunc_void_UnistylesNativeMiniRuntime.hpp +57 -0
  366. package/nitrogen/generated/android/c++/JFunc_void_std__vector_UnistyleDependency__UnistylesNativeMiniRuntime.hpp +69 -0
  367. package/nitrogen/generated/android/c++/JHybridNativePlatformSpec.cpp +35 -34
  368. package/nitrogen/generated/android/c++/JHybridNativePlatformSpec.hpp +15 -6
  369. package/nitrogen/generated/android/c++/JOrientation.hpp +1 -1
  370. package/nitrogen/generated/android/c++/JUnistyleDependency.hpp +4 -1
  371. package/nitrogen/generated/android/c++/JUnistylesNativeMiniRuntime.hpp +9 -7
  372. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/Dimensions.kt +1 -0
  373. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/{Func_void_std__vector_UnistyleDependency_.kt → Func_void_UnistylesNativeMiniRuntime.kt} +6 -5
  374. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/Func_void_std__vector_UnistyleDependency__UnistylesNativeMiniRuntime.kt +46 -0
  375. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/HybridNativePlatformSpec.kt +25 -13
  376. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/Insets.kt +1 -0
  377. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/UnistyleDependency.kt +2 -1
  378. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/UnistylesNativeMiniRuntime.kt +3 -1
  379. package/nitrogen/generated/android/unistyles+autolinking.cmake +13 -1
  380. package/nitrogen/generated/android/unistyles+autolinking.gradle +2 -0
  381. package/nitrogen/generated/android/{UnistylesOnLoad.cpp → unistylesOnLoad.cpp} +6 -4
  382. package/nitrogen/generated/android/{UnistylesOnLoad.hpp → unistylesOnLoad.hpp} +1 -1
  383. package/nitrogen/generated/ios/Unistyles+autolinking.rb +6 -4
  384. package/nitrogen/generated/ios/Unistyles-Swift-Cxx-Bridge.cpp +25 -0
  385. package/nitrogen/generated/ios/Unistyles-Swift-Cxx-Bridge.hpp +73 -38
  386. package/nitrogen/generated/ios/Unistyles-Swift-Cxx-Umbrella.hpp +1 -30
  387. package/nitrogen/generated/ios/c++/HybridNativePlatformSpecSwift.hpp +8 -8
  388. package/nitrogen/generated/ios/swift/HybridNativePlatformSpec.swift +4 -16
  389. package/nitrogen/generated/ios/swift/HybridNativePlatformSpecCxx.swift +156 -115
  390. package/nitrogen/generated/ios/swift/UnistyleDependency.swift +4 -0
  391. package/nitrogen/generated/ios/swift/UnistylesNativeMiniRuntime.swift +16 -5
  392. package/nitrogen/generated/shared/c++/ColorScheme.hpp +2 -2
  393. package/nitrogen/generated/shared/c++/HybridNativePlatformSpec.cpp +2 -2
  394. package/nitrogen/generated/shared/c++/HybridNativePlatformSpec.hpp +6 -3
  395. package/nitrogen/generated/shared/c++/HybridUnistylesNavigationBarSpec.cpp +0 -1
  396. package/nitrogen/generated/shared/c++/HybridUnistylesNavigationBarSpec.hpp +3 -1
  397. package/nitrogen/generated/shared/c++/HybridUnistylesRuntimeSpec.cpp +1 -0
  398. package/nitrogen/generated/shared/c++/HybridUnistylesRuntimeSpec.hpp +5 -0
  399. package/nitrogen/generated/shared/c++/HybridUnistylesShadowRegistrySpec.hpp +3 -0
  400. package/nitrogen/generated/shared/c++/HybridUnistylesStatusBarSpec.cpp +0 -1
  401. package/nitrogen/generated/shared/c++/HybridUnistylesStatusBarSpec.hpp +3 -1
  402. package/nitrogen/generated/shared/c++/HybridUnistylesStyleSheetSpec.cpp +2 -1
  403. package/nitrogen/generated/shared/c++/HybridUnistylesStyleSheetSpec.hpp +10 -4
  404. package/nitrogen/generated/shared/c++/Orientation.hpp +2 -2
  405. package/nitrogen/generated/shared/c++/UnistyleDependency.hpp +2 -1
  406. package/nitrogen/generated/shared/c++/UnistylesCxxMiniRuntime.hpp +10 -9
  407. package/nitrogen/generated/shared/c++/UnistylesNativeMiniRuntime.hpp +9 -8
  408. package/package.json +20 -30
  409. package/plugin/common.js +31 -3
  410. package/plugin/index.js +107 -18
  411. package/plugin/ref.js +140 -14
  412. package/plugin/style.js +208 -22
  413. package/plugin/stylesheet.js +53 -3
  414. package/plugin/variants.js +33 -0
  415. package/src/components/Display.tsx +12 -0
  416. package/src/components/Hide.tsx +12 -0
  417. package/src/components/index.ts +2 -0
  418. package/src/components/useMedia.ts +64 -0
  419. package/src/components/useMedia.web.ts +47 -0
  420. package/src/core/createUnistylesComponent.native.tsx +83 -0
  421. package/src/core/createUnistylesComponent.tsx +84 -0
  422. package/src/core/index.ts +1 -0
  423. package/src/index.ts +3 -12
  424. package/src/mq.ts +27 -9
  425. package/src/specs/NativePlatform/NativePlatform.nitro.ts +7 -5
  426. package/src/specs/NavigtionBar/UnistylesNavigationBar.nitro.ts +0 -1
  427. package/src/specs/NavigtionBar/index.ts +1 -25
  428. package/src/specs/ShadowRegistry/index.ts +16 -10
  429. package/src/specs/ShadowRegistry/types.ts +4 -1
  430. package/src/specs/StatusBar/UnistylesStatusBar.nitro.ts +0 -1
  431. package/src/specs/StatusBar/index.ts +2 -12
  432. package/src/specs/StyleSheet/UnistylesStyleSheet.nitro.ts +4 -1
  433. package/src/specs/StyleSheet/index.ts +6 -1
  434. package/src/specs/UnistylesRuntime/UnistylesRuntime.nitro.ts +1 -1
  435. package/src/specs/UnistylesRuntime/index.ts +5 -4
  436. package/src/specs/index.ts +6 -2
  437. package/src/specs/index.web.ts +1 -1
  438. package/src/types/breakpoints.ts +25 -13
  439. package/src/types/common.ts +1 -0
  440. package/src/types/index.ts +1 -1
  441. package/src/types/stylesheet.ts +7 -5
  442. package/src/types/variants.ts +7 -1
  443. package/src/utils.ts +22 -0
  444. package/{web → src/web}/convert/index.ts +25 -25
  445. package/src/web/convert/object/boxShadow.ts +55 -0
  446. package/src/web/convert/object/filter.ts +39 -0
  447. package/src/web/convert/object/index.ts +3 -0
  448. package/src/web/convert/object/objectStyle.ts +69 -0
  449. package/src/web/convert/object/transform.ts +24 -0
  450. package/src/web/convert/pseudo.ts +137 -0
  451. package/src/web/convert/shadow/boxShadow.ts +50 -0
  452. package/src/web/convert/shadow/getShadowBreakpoints.ts +34 -0
  453. package/src/web/convert/shadow/index.ts +2 -0
  454. package/src/web/convert/shadow/textShadow.ts +48 -0
  455. package/{web → src/web}/convert/style.ts +61 -10
  456. package/{web → src/web}/convert/types.ts +9 -2
  457. package/{web → src/web}/convert/utils.ts +11 -5
  458. package/src/web/create.ts +48 -0
  459. package/{web → src/web}/index.ts +4 -3
  460. package/src/web/listener.ts +63 -0
  461. package/{web → src/web}/mock.ts +3 -14
  462. package/src/web/registry.ts +215 -0
  463. package/{web → src/web}/runtime.ts +32 -21
  464. package/src/web/shadowRegistry.ts +145 -0
  465. package/src/web/state.ts +94 -0
  466. package/src/web/utils/common.ts +45 -0
  467. package/src/web/utils/index.ts +2 -0
  468. package/src/web/utils/unistyle.ts +108 -0
  469. package/src/web/variants/getVariants.ts +42 -0
  470. package/src/web/variants/index.ts +2 -0
  471. package/src/web/variants/useVariants.ts +65 -0
  472. package/android/src/main/cxx/helpers.cpp +0 -105
  473. package/android/src/main/cxx/helpers.h +0 -16
  474. package/android/src/main/cxx/platform.cpp +0 -170
  475. package/android/src/main/cxx/platform.h +0 -20
  476. package/lib/typescript/example/App.d.ts +0 -4
  477. package/lib/typescript/example/App.d.ts.map +0 -1
  478. package/lib/typescript/example/unistyles.d.ts +0 -63
  479. package/lib/typescript/example/unistyles.d.ts.map +0 -1
  480. package/lib/typescript/expo-example/App.d.ts +0 -4
  481. package/lib/typescript/expo-example/App.d.ts.map +0 -1
  482. package/lib/typescript/expo-example/unistyles.d.ts +0 -63
  483. package/lib/typescript/expo-example/unistyles.d.ts.map +0 -1
  484. package/lib/typescript/web/convert/boxShadow.d.ts +0 -3
  485. package/lib/typescript/web/convert/boxShadow.d.ts.map +0 -1
  486. package/lib/typescript/web/convert/breakpoint.d.ts +0 -3
  487. package/lib/typescript/web/convert/breakpoint.d.ts.map +0 -1
  488. package/lib/typescript/web/convert/index.d.ts +0 -4
  489. package/lib/typescript/web/convert/index.d.ts.map +0 -1
  490. package/lib/typescript/web/convert/shadow.d.ts +0 -2
  491. package/lib/typescript/web/convert/shadow.d.ts.map +0 -1
  492. package/lib/typescript/web/convert/style.d.ts +0 -3
  493. package/lib/typescript/web/convert/style.d.ts.map +0 -1
  494. package/lib/typescript/web/convert/textShadow.d.ts +0 -3
  495. package/lib/typescript/web/convert/textShadow.d.ts.map +0 -1
  496. package/lib/typescript/web/convert/transform.d.ts +0 -5
  497. package/lib/typescript/web/convert/transform.d.ts.map +0 -1
  498. package/lib/typescript/web/convert/types.d.ts.map +0 -1
  499. package/lib/typescript/web/convert/utils.d.ts +0 -8
  500. package/lib/typescript/web/convert/utils.d.ts.map +0 -1
  501. package/lib/typescript/web/create.d.ts +0 -2449
  502. package/lib/typescript/web/index.d.ts +0 -2464
  503. package/lib/typescript/web/listener/index.d.ts +0 -2
  504. package/lib/typescript/web/listener/index.d.ts.map +0 -1
  505. package/lib/typescript/web/listener/listener.d.ts.map +0 -1
  506. package/lib/typescript/web/mock.d.ts +0 -14
  507. package/lib/typescript/web/mock.d.ts.map +0 -1
  508. package/lib/typescript/web/mq.d.ts +0 -4
  509. package/lib/typescript/web/mq.d.ts.map +0 -1
  510. package/lib/typescript/web/pseudo.d.ts +0 -4
  511. package/lib/typescript/web/pseudo.d.ts.map +0 -1
  512. package/lib/typescript/web/registry.d.ts +0 -12
  513. package/lib/typescript/web/registry.d.ts.map +0 -1
  514. package/lib/typescript/web/runtime.d.ts.map +0 -1
  515. package/lib/typescript/web/state.d.ts +0 -24
  516. package/lib/typescript/web/state.d.ts.map +0 -1
  517. package/lib/typescript/web/useVariants.d.ts +0 -3
  518. package/lib/typescript/web/useVariants.d.ts.map +0 -1
  519. package/lib/typescript/web/utils.d.ts +0 -18
  520. package/lib/typescript/web/utils.d.ts.map +0 -1
  521. package/nitrogen/generated/android/c++/JFunc_void_std__vector_UnistyleDependency_.hpp +0 -60
  522. package/plugin/__tests__/dependencies.spec.js +0 -360
  523. package/plugin/__tests__/ref.spec.js +0 -991
  524. package/plugin/__tests__/stylesheet.spec.js +0 -396
  525. package/web/convert/boxShadow.ts +0 -72
  526. package/web/convert/breakpoint.ts +0 -21
  527. package/web/convert/shadow.ts +0 -68
  528. package/web/convert/textShadow.ts +0 -69
  529. package/web/convert/transform.ts +0 -89
  530. package/web/create.ts +0 -102
  531. package/web/listener/index.ts +0 -1
  532. package/web/listener/listener.ts +0 -33
  533. package/web/mq.ts +0 -19
  534. package/web/pseudo.ts +0 -11
  535. package/web/registry.ts +0 -41
  536. package/web/state.ts +0 -148
  537. package/web/useVariants.ts +0 -99
  538. package/web/utils.ts +0 -95
  539. /package/nitrogen/generated/android/{UnistylesOnLoad.kt → unistylesOnLoad.kt} +0 -0
  540. /package/{web → src/web}/convert/module.d.ts +0 -0
package/plugin/style.js CHANGED
@@ -1,44 +1,79 @@
1
- function getStyleObjectPath(t, node, state) {
1
+ const { PRESSABLE_STATE_NAME } = require('./common')
2
+ const { generateUniqueId } = require('./ref')
3
+
4
+ function getStyleMetadata(t, node, dynamicFunction = null) {
2
5
  // {styles.container}
3
6
  if (t.isMemberExpression(node)) {
4
- return [node.object.name, node.property.name]
7
+ const members = t.isMemberExpression(node.object)
8
+ ? [node.object.object.name, node.object.property.name, node.property.name]
9
+ : [node.object.name, node.property.name]
10
+
11
+ return [
12
+ {
13
+ members: members.filter(Boolean),
14
+ inlineStyle: undefined,
15
+ dynamicFunction,
16
+ conditionalExpression: undefined
17
+ }
18
+ ]
5
19
  }
6
20
 
7
21
  // [styles.container]
8
22
  if (t.isArrayExpression(node)) {
9
- return node.elements.flatMap(element => getStyleObjectPath(t, element, state))
23
+ return node.elements.flatMap(element => getStyleMetadata(t, element))
10
24
  }
11
25
 
12
26
  // [...styles.container]
13
27
  if (t.isSpreadElement(node)) {
14
- return getStyleObjectPath(t, node.argument, state)
28
+ return getStyleMetadata(t, node.argument)
15
29
  }
16
30
 
17
31
  // {{ ...styles.container }}
18
32
  if (t.isObjectExpression(node)) {
19
- return node.properties.flatMap(prop => getStyleObjectPath(t, prop.argument, state))
33
+ return node
34
+ .properties
35
+ .flatMap(prop => {
36
+ // handle inline styles
37
+ if (t.isObjectProperty(prop)) {
38
+ return [{
39
+ members: [],
40
+ inlineStyle: t.objectExpression([prop]),
41
+ dynamicFunction: undefined,
42
+ conditionalExpression: undefined
43
+ }]
44
+ }
45
+
46
+ return getStyleMetadata(t, prop.argument)
47
+ })
48
+ .filter(Boolean)
20
49
  }
21
50
 
22
51
  // {styles.container(arg1, arg2)}
23
52
  if (t.isCallExpression(node)) {
24
- const path = getStyleObjectPath(t, node.callee, state)
25
- const lastPart = path.slice(-1)
26
-
27
- if (!lastPart) {
28
- return path
29
- }
30
-
31
- // for web increment counter for dynamic functions
32
- if (state.file.webDynamicFunctions[lastPart]) {
33
- node.arguments.push(t.numericLiteral(++state.file.webDynamicFunctions[lastPart]))
53
+ return getStyleMetadata(t, node.callee, node)
54
+ }
34
55
 
35
- return path
36
- }
56
+ if (t.isIdentifier(node)) {
57
+ return [{
58
+ members: [node.name],
59
+ inlineStyle: undefined,
60
+ dynamicFunction: undefined,
61
+ conditionalExpression: undefined
62
+ }]
63
+ }
37
64
 
38
- state.file.webDynamicFunctions[lastPart] = 1
39
- node.arguments.push(t.numericLiteral(1))
65
+ if (t.isConditionalExpression(node)) {
66
+ return [{
67
+ members: [],
68
+ inlineStyle: undefined,
69
+ dynamicFunction: undefined,
70
+ conditionalExpression: node
71
+ }]
72
+ }
40
73
 
41
- return path
74
+ // pressable
75
+ if (t.isArrowFunctionExpression(node)) {
76
+ return getStyleMetadata(t, node.body, node)
42
77
  }
43
78
 
44
79
  return []
@@ -52,7 +87,158 @@ function getStyleAttribute(t, path) {
52
87
  )
53
88
  }
54
89
 
90
+ function styleAttributeToArray(t, path) {
91
+ const styleAttribute = getStyleAttribute(t, path)
92
+
93
+ // special case for pressable
94
+ // {state => styles.pressable(state)}
95
+ if (t.isArrowFunctionExpression(styleAttribute.value.expression)) {
96
+ return
97
+ }
98
+
99
+ // {{...style.container, ...style.container}}
100
+ if (t.isObjectExpression(styleAttribute.value.expression)) {
101
+ const properties = styleAttribute.value.expression.properties
102
+ .map(property => t.isSpreadElement(property)
103
+ ? property.argument
104
+ : t.objectExpression([property])
105
+ )
106
+
107
+ styleAttribute.value.expression = t.arrayExpression(properties)
108
+
109
+ return
110
+ }
111
+
112
+ // [{...style.container, ...style.container}]
113
+ if (t.isArrayExpression(styleAttribute.value.expression)) {
114
+ const properties = styleAttribute.value.expression.elements
115
+ .flatMap(property => {
116
+ if (t.isSpreadElement(property)) {
117
+ return property.argument
118
+ }
119
+ return property
120
+ })
121
+
122
+ styleAttribute.value.expression = t.arrayExpression(properties)
123
+
124
+ return
125
+ }
126
+
127
+ styleAttribute.value.expression = t.arrayExpression([styleAttribute.value.expression])
128
+ }
129
+
130
+ function handlePressable(t, path, styleAttr, metadata) {
131
+ const styleExpression = styleAttr.value.expression
132
+
133
+ // {style.pressable}
134
+ // the worst case, we don't know if user rely on state
135
+ if (t.isMemberExpression(styleExpression)) {
136
+ const members = metadata.at(0).members
137
+
138
+ if (members.length === 0) {
139
+ return
140
+ }
141
+
142
+ const stylePath = members.slice(1).reduce(
143
+ (acc, property) => t.memberExpression(acc, t.identifier(property)),
144
+ t.identifier(members[0])
145
+ )
146
+
147
+ const uniquePressableId = generateUniqueId()
148
+
149
+ // state => typeof style.pressable === 'function' ? style.pressable(state) : style.pressable
150
+ styleAttr.value.expression = t.arrowFunctionExpression(
151
+ [t.identifier("state")],
152
+ t.conditionalExpression(
153
+ t.binaryExpression(
154
+ "===",
155
+ t.unaryExpression(
156
+ "typeof",
157
+ stylePath
158
+ ),
159
+ t.stringLiteral("function")
160
+ ),
161
+ t.callExpression(
162
+ stylePath,
163
+ [t.identifier("state"), t.objectExpression([
164
+ t.objectProperty(
165
+ t.identifier("__uni_pressable_id"),
166
+ t.stringLiteral(uniquePressableId)
167
+ )
168
+ ])]
169
+ ),
170
+ stylePath
171
+ )
172
+ )
173
+
174
+ return uniquePressableId
175
+ }
176
+
177
+ // {style.pressable(1, 2)}
178
+ if (t.isCallExpression(styleExpression)) {
179
+ // user already called dynamic function
180
+ // there is no work to do
181
+ return
182
+ }
183
+
184
+ // {() => style.pressable(1, 2)}
185
+ if (t.isArrowFunctionExpression(styleExpression) && styleExpression.params.length === 0) {
186
+ // user doesn't care about the state
187
+ // we can safely unwrap the function
188
+ styleAttr.value.expression = styleExpression.body
189
+
190
+ return
191
+ }
192
+
193
+ // {state => style.pressable(state, 1, 2)}
194
+ if (t.isArrowFunctionExpression(styleExpression) && styleExpression.params.length > 0) {
195
+ // already a function, we need to set state to false
196
+ // and pass it to C++ as in background it will never be true
197
+ const args = metadata.at(0).dynamicFunction
198
+
199
+ if (!t.isCallExpression(args) || args.arguments.length === 0) {
200
+ return
201
+ }
202
+
203
+ // get state local name
204
+ const stateIdentifier = styleExpression.params[0]
205
+
206
+ if (!stateIdentifier || !t.isIdentifier(stateIdentifier)) {
207
+ return
208
+ }
209
+
210
+ // replace state name with matching identifier
211
+ args.arguments.map(arg => {
212
+ if (t.isIdentifier(arg) && arg.name === stateIdentifier.name) {
213
+ arg.name = PRESSABLE_STATE_NAME
214
+ }
215
+
216
+ if (t.isMemberExpression(arg) && arg.object.name === stateIdentifier.name) {
217
+ arg.object.name = PRESSABLE_STATE_NAME
218
+ }
219
+
220
+ return arg
221
+ })
222
+
223
+ const uniquePressableId = generateUniqueId()
224
+
225
+ args.arguments.push(t.objectExpression([
226
+ t.objectProperty(
227
+ t.identifier("__uni_pressable_id"),
228
+ t.stringLiteral(uniquePressableId)
229
+ )
230
+ ]))
231
+
232
+ // update arrow function arg name
233
+ styleExpression.params[0].name = PRESSABLE_STATE_NAME
234
+
235
+ return uniquePressableId
236
+ }
237
+ }
238
+
55
239
  module.exports = {
56
- getStyleObjectPath,
57
- getStyleAttribute
240
+ getStyleMetadata,
241
+ getStyleAttribute,
242
+ styleAttributeToArray,
243
+ handlePressable
58
244
  }
@@ -14,7 +14,21 @@ const UnistyleDependency = {
14
14
  PixelRatio: 10,
15
15
  FontScale: 11,
16
16
  StatusBar: 12,
17
- NavigationBar: 13
17
+ NavigationBar: 13,
18
+ Ime: 14
19
+ }
20
+
21
+ function stringToUniqueId(str) {
22
+ let hash = 0;
23
+
24
+ for (let i = 0; i < str.length; i++) {
25
+ hash = (hash << 5) - hash + str.charCodeAt(i)
26
+ hash |= 0
27
+ }
28
+
29
+ const absHash = Math.abs(hash)
30
+
31
+ return absHash % 1000000000
18
32
  }
19
33
 
20
34
  function isUnistylesStyleSheet(t, path, state) {
@@ -28,6 +42,13 @@ function isUnistylesStyleSheet(t, path, state) {
28
42
  )
29
43
  }
30
44
 
45
+ function addStyleSheetTag(t, path, state) {
46
+ const callee = path.get('callee')
47
+ const uniqueId = stringToUniqueId(state.filename) + ++state.file.tagNumber
48
+
49
+ callee.container.arguments.push(t.numericLiteral(uniqueId))
50
+ }
51
+
31
52
  function analyzeDependencies(t, state, name, unistyleObj, themeName, rtName) {
32
53
  const debugMessage = deps => {
33
54
  if (state.opts.debug) {
@@ -80,7 +101,8 @@ function analyzeDependencies(t, state, name, unistyleObj, themeName, rtName) {
80
101
 
81
102
  return
82
103
  }
83
- case 'orientation': {
104
+ case 'isPortrait':
105
+ case 'isLandscape': {
84
106
  dependencies.push(UnistyleDependency.Orientation)
85
107
 
86
108
  return
@@ -90,6 +112,11 @@ function analyzeDependencies(t, state, name, unistyleObj, themeName, rtName) {
90
112
 
91
113
  return
92
114
  }
115
+ case 'ime': {
116
+ dependencies.push(UnistyleDependency.Ime)
117
+
118
+ return
119
+ }
93
120
  case 'insets': {
94
121
  dependencies.push(UnistyleDependency.Insets)
95
122
 
@@ -141,7 +168,30 @@ function analyzeDependencies(t, state, name, unistyleObj, themeName, rtName) {
141
168
  }
142
169
  }
143
170
 
171
+ function getUnistyle(t, property) {
172
+ const propertyValue = t.isArrowFunctionExpression(property.value)
173
+ ? property.value.body
174
+ : property.value
175
+
176
+ if (t.isObjectExpression(propertyValue)) {
177
+ return propertyValue
178
+ }
179
+
180
+ if (t.isBlockStatement(propertyValue)) {
181
+ const returnStatement = propertyValue.body
182
+ .find(value => t.isReturnStatement(value))
183
+
184
+ return returnStatement
185
+ ? returnStatement.argument
186
+ : null
187
+ }
188
+
189
+ return null
190
+ }
191
+
144
192
  module.exports = {
145
193
  isUnistylesStyleSheet,
146
- analyzeDependencies
194
+ analyzeDependencies,
195
+ addStyleSheetTag,
196
+ getUnistyle
147
197
  }
@@ -0,0 +1,33 @@
1
+ function isUsingVariants(t, path) {
2
+ const callee = path.get('callee')
3
+
4
+ return (
5
+ t.isMemberExpression(callee) &&
6
+ t.isIdentifier(callee.node.object, { name: 'styles' }) &&
7
+ t.isIdentifier(callee.node.property, { name: 'useVariants' }) &&
8
+ t.isObjectExpression(path.node.arguments[0])
9
+ )
10
+ }
11
+
12
+ function extractVariants(t, path, state) {
13
+ const arg = path.node.arguments[0]
14
+
15
+ const variantDeclaration = t.variableDeclaration('const', [
16
+ t.variableDeclarator(
17
+ t.identifier('__uni__variants'),
18
+ arg
19
+ )
20
+ ])
21
+
22
+ // Replace useVariants argument with __uni__variants
23
+ path.node.arguments[0] = t.identifier('__uni__variants')
24
+
25
+ path.insertBefore(variantDeclaration)
26
+
27
+ state.file.hasVariants = true
28
+ }
29
+
30
+ module.exports = {
31
+ isUsingVariants,
32
+ extractVariants
33
+ }
@@ -0,0 +1,12 @@
1
+ import React, { type PropsWithChildren } from 'react'
2
+ import { useMedia } from './useMedia'
3
+
4
+ type DisplayProps = { mq: symbol } & PropsWithChildren
5
+
6
+ export const Display: React.FunctionComponent<DisplayProps> = ({ children, ...props }) => {
7
+ const { isVisible } = useMedia(props)
8
+
9
+ return isVisible
10
+ ? children
11
+ : null
12
+ }
@@ -0,0 +1,12 @@
1
+ import React, { type PropsWithChildren } from 'react'
2
+ import { useMedia } from './useMedia'
3
+
4
+ type HideProps = { mq: symbol } & PropsWithChildren
5
+
6
+ export const Hide: React.FunctionComponent<HideProps> = ({ children, ...props }) => {
7
+ const { isVisible } = useMedia(props)
8
+
9
+ return !isVisible
10
+ ? children
11
+ : null
12
+ }
@@ -0,0 +1,2 @@
1
+ export { Hide } from './Hide'
2
+ export { Display } from './Display'
@@ -0,0 +1,64 @@
1
+ import { useEffect, useLayoutEffect, useState } from 'react'
2
+ import { StyleSheet, UnistyleDependency, UnistylesRuntime, type UnistylesStyleSheet } from '../specs'
3
+ import { isValidMq, parseMq, isUnistylesMq } from '../mq'
4
+
5
+ export const useMedia = (config: { mq: symbol }) => {
6
+ const computeIsVisible = (): boolean => {
7
+ const maybeMq = config.mq as unknown as string
8
+
9
+ if (!isUnistylesMq(maybeMq)) {
10
+ console.error(`🦄 Unistyles: Received invalid mq: ${maybeMq}`)
11
+
12
+ return false
13
+ }
14
+
15
+ const parsedMq = parseMq(maybeMq)
16
+
17
+ if (!isValidMq(parsedMq)) {
18
+ console.error(`🦄 Unistyles: Received invalid mq where min is greater than max: ${maybeMq}`)
19
+
20
+ return false
21
+ }
22
+
23
+ const { width, height } = UnistylesRuntime.screen
24
+
25
+ if (parsedMq.minWidth !== undefined && width < parsedMq.minWidth) {
26
+ return false
27
+ }
28
+
29
+ if (parsedMq.maxWidth !== undefined && width > parsedMq.maxWidth) {
30
+ return false
31
+ }
32
+
33
+ if (parsedMq.minHeight !== undefined && height < parsedMq.minHeight) {
34
+ return false
35
+ }
36
+
37
+ if (parsedMq.maxHeight !== undefined && height > parsedMq.maxHeight) {
38
+ return false
39
+ }
40
+
41
+ return true
42
+ }
43
+ const [isVisible, setIsVisible] = useState<boolean | null>(computeIsVisible())
44
+
45
+ useEffect(() => {
46
+ setIsVisible(computeIsVisible())
47
+ }, [config.mq])
48
+
49
+ useLayoutEffect(() => {
50
+ const removeChangeListener = (StyleSheet as UnistylesStyleSheet).addChangeListener(dependencies => {
51
+ if (dependencies.includes(UnistyleDependency.Breakpoints)) {
52
+ setIsVisible(computeIsVisible())
53
+ }
54
+ })
55
+
56
+ return () => {
57
+ removeChangeListener()
58
+ }
59
+ }, [config.mq])
60
+
61
+ return {
62
+ isVisible
63
+ }
64
+ }
@@ -0,0 +1,47 @@
1
+ import { useEffect, useRef, useState } from 'react'
2
+ import { isUnistylesMq, isValidMq, parseMq } from '../mq'
3
+
4
+ export const useMedia = (config: { mq: symbol }) => {
5
+ const disposeRef = useRef(() => {})
6
+ const [isVisible, setIsVisible] = useState(() => {
7
+ const maybeMq = config.mq as unknown as string
8
+
9
+ if (!isUnistylesMq(maybeMq)) {
10
+ console.error(`🦄 Unistyles: Received invalid mq: ${maybeMq}`)
11
+
12
+ return false
13
+ }
14
+
15
+ const parsedMq = parseMq(maybeMq)
16
+
17
+ if (!isValidMq(parsedMq)) {
18
+ console.error(`🦄 Unistyles: Received invalid mq where min is greater than max: ${maybeMq}`)
19
+
20
+ return false
21
+ }
22
+
23
+ const { minWidth, maxWidth, minHeight, maxHeight } = parsedMq
24
+
25
+ const mediaQuery = [
26
+ minWidth !== undefined ? `(min-width: ${minWidth}px)` : undefined,
27
+ maxWidth !== undefined ? `(max-width: ${maxWidth}px)` : undefined,
28
+ minHeight !== undefined ? `(min-height: ${minHeight}px)` : undefined,
29
+ maxHeight !== undefined ? `(max-height: ${maxHeight}px)` : undefined
30
+ ].filter(Boolean).join(' and ')
31
+
32
+ const media = window.matchMedia(mediaQuery)
33
+ const handler = (event: MediaQueryListEvent) => setIsVisible(event.matches)
34
+
35
+ media.addEventListener('change', handler)
36
+ disposeRef.current = () => media.removeEventListener('change', handler)
37
+
38
+ return media.matches
39
+ })
40
+
41
+ // Unmount
42
+ useEffect(() => () => disposeRef.current(), [])
43
+
44
+ return {
45
+ isVisible
46
+ }
47
+ }
@@ -0,0 +1,83 @@
1
+ import React, { type ComponentType, forwardRef, useEffect, useRef, useState } from 'react'
2
+ import type { UnistylesTheme } from '../types'
3
+ import { StyleSheet, UnistyleDependency, UnistylesRuntime, type UnistylesStyleSheet } from '../specs'
4
+ import type { PartialBy } from '../types/common'
5
+ import { deepMergeObjects } from '../utils'
6
+
7
+ const SUPPORTED_STYLE_PROPS = ['style', 'contentContainerStyle'] as const
8
+ type SupportedStyleProps = typeof SUPPORTED_STYLE_PROPS[number]
9
+
10
+ export const createUnistylesComponent = <TProps extends Record<string, any>, TMappings extends Partial<Omit<TProps, SupportedStyleProps>>>(Component: ComponentType<TProps>, mappings?: (theme: UnistylesTheme) => TMappings) => {
11
+ return forwardRef<unknown, PartialBy<TProps, keyof TMappings | SupportedStyleProps>>((props, ref) => {
12
+ const narrowedProps = props as PartialBy<TProps, keyof TMappings | SupportedStyleProps>
13
+ const [theme, setTheme] = useState<UnistylesTheme>(UnistylesRuntime.getTheme())
14
+ const [, setRt] = useState(0)
15
+ const stylesRef = useRef<Record<string, any>>({})
16
+ const isForcedRef = useRef(false)
17
+
18
+ if (!isForcedRef.current) {
19
+ SUPPORTED_STYLE_PROPS.forEach(propName => {
20
+ if (narrowedProps?.[propName]) {
21
+ if (Array.isArray(narrowedProps[propName])) {
22
+ console.error(`🦄 Unistyles: createUnistylesComponent requires ${propName} to be an object. Please check props for component: ${Component.displayName}`)
23
+ }
24
+
25
+ // @ts-expect-error - this is hidden from TS
26
+ if (props[propName].__unistyles_name && !props[propName].__proto__?.getStyle) {
27
+ console.error(`🦄 Unistyles: createUnistylesComponent received style that is not bound. You likely used the spread operator on a Unistyle style. Please check props for component: ${Component.displayName}`)
28
+ }
29
+
30
+ stylesRef.current = {
31
+ ...stylesRef.current,
32
+ [propName]: narrowedProps[propName]
33
+ }
34
+ }
35
+ })
36
+ }
37
+
38
+ useEffect(() => {
39
+ const removeChangeListener = (StyleSheet as UnistylesStyleSheet).addChangeListener(dependencies => {
40
+ const componentDependencies = (narrowedProps.style?.__proto__.uni__dependencies || mappings?.(theme).style?.__proto__.uni__dependencies) as Array<UnistyleDependency>
41
+
42
+ if (dependencies.includes(UnistyleDependency.Theme) && (!componentDependencies ||componentDependencies.includes(UnistyleDependency.Theme))) {
43
+ setTheme(UnistylesRuntime.getTheme())
44
+
45
+ // override with Unistyles styles
46
+ SUPPORTED_STYLE_PROPS.forEach(propName => {
47
+ if (narrowedProps?.[propName]) {
48
+ stylesRef.current = {
49
+ ...stylesRef.current,
50
+ // @ts-expect-error - this is hidden from TS
51
+ [propName]: props[propName].__proto__?.getStyle?.() || props[propName]
52
+ }
53
+ }
54
+ })
55
+
56
+ isForcedRef.current = true
57
+ }
58
+
59
+ if (dependencies.some(dependency => dependency >= 2) && (!componentDependencies || componentDependencies.some(dependency => dependency >= 2))) {
60
+ setRt(prevState => prevState + 1)
61
+ }
62
+ })
63
+
64
+ return () => {
65
+ removeChangeListener()
66
+ }
67
+ }, [])
68
+
69
+ const mergedProps = mappings?.(theme) as Record<string, any> ?? {}
70
+ const finalProps = deepMergeObjects(mergedProps, props)
71
+
72
+ // override with Unistyles styles
73
+ SUPPORTED_STYLE_PROPS.forEach(propName => {
74
+ if (finalProps[propName]) {
75
+ finalProps[propName] = stylesRef.current[propName]
76
+ }
77
+ })
78
+
79
+ isForcedRef.current = false
80
+
81
+ return <Component {...finalProps as TProps} ref={ref} />
82
+ })
83
+ }
@@ -0,0 +1,84 @@
1
+ import React, { useEffect, useState, type ComponentType, forwardRef, useRef, useMemo } from 'react'
2
+ import type { UnistylesTheme } from '../types'
3
+ import { UnistylesRuntime } from '../specs'
4
+ import { UnistyleDependency } from '../specs/NativePlatform'
5
+ import type { PartialBy } from '../types/common'
6
+ import { UnistylesListener } from '../web/listener'
7
+ import { UnistylesShadowRegistry } from '../web'
8
+ import { equal } from '../web/utils'
9
+ import { deepMergeObjects } from '../utils'
10
+
11
+ const SUPPORTED_STYLE_PROPS = ['style', 'contentContainerStyle'] as const
12
+ const ALL_DEPENDENCIES = Object.values(UnistyleDependency).filter((dependency): dependency is UnistyleDependency => typeof dependency === 'number')
13
+
14
+ type SupportedStyleProps = typeof SUPPORTED_STYLE_PROPS[number]
15
+
16
+ const useShadowRegistry = (style?: Record<string, any>) => {
17
+ const [ref] = useState(document.createElement('div'))
18
+ const oldClassNames = useRef<Array<string>>([])
19
+ const classNames = useMemo(() => {
20
+ if (!style) {
21
+ return []
22
+ }
23
+
24
+ const newClassNames = UnistylesShadowRegistry.add(ref, [style], undefined, []) ?? []
25
+
26
+ if (equal(oldClassNames.current, newClassNames)) {
27
+ return oldClassNames.current
28
+ }
29
+
30
+ oldClassNames.current = newClassNames
31
+
32
+ return newClassNames
33
+ }, [style])
34
+
35
+ useEffect(() => () => {
36
+ // Remove styles on unmount
37
+ if (style) {
38
+ UnistylesShadowRegistry.add(null, [style], undefined, [])
39
+ }
40
+ })
41
+
42
+ return classNames
43
+ }
44
+
45
+ export const createUnistylesComponent = <TProps extends Record<string, any>, TMappings extends Partial<Omit<TProps, SupportedStyleProps>>>(Component: ComponentType<TProps>, mappings?: (theme: UnistylesTheme) => TMappings) => {
46
+ return forwardRef<unknown, PartialBy<TProps, keyof TMappings | SupportedStyleProps>>((props, ref) => {
47
+ const narrowedProps = props as PartialBy<TProps, keyof TMappings | SupportedStyleProps>
48
+ const [mappingsProps, setMappingsProps] = useState(mappings?.(UnistylesRuntime.getTheme()))
49
+ const styleClassNames = useShadowRegistry(narrowedProps.style)
50
+ const contentContainerStyleClassNames = useShadowRegistry(narrowedProps.contentContainerStyle)
51
+
52
+ useEffect(() => {
53
+ const disposeMappings = UnistylesListener.addListeners(ALL_DEPENDENCIES, () => {
54
+ if (!mappings) {
55
+ disposeMappings()
56
+
57
+ return
58
+ }
59
+
60
+ return setMappingsProps(mappings(UnistylesRuntime.getTheme()))
61
+ })
62
+
63
+ return () => disposeMappings()
64
+ }, [mappingsProps, narrowedProps.style])
65
+
66
+ const combinedProps = {
67
+ ...deepMergeObjects(props, (mappingsProps ?? {}) as object),
68
+ ...narrowedProps.style ? {
69
+ style: {
70
+ $$css: true,
71
+ 'unistyles': styleClassNames.join(' ')
72
+ },
73
+ } : {},
74
+ ...narrowedProps.contentContainerStyle ? {
75
+ style: {
76
+ $$css: true,
77
+ 'unistyles': contentContainerStyleClassNames.join(' ')
78
+ },
79
+ } : {},
80
+ } as unknown as TProps
81
+
82
+ return <Component {...combinedProps} ref={ref} />
83
+ })
84
+ }