react-native-unistyles 2.4.0-rc.2 → 2.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (266) hide show
  1. package/README.md +72 -26
  2. package/android/CMakeLists.txt +18 -2
  3. package/android/build.gradle +5 -1
  4. package/android/src/main/cxx/cpp-adapter.cpp +16 -80
  5. package/android/src/main/cxx/helpers.cpp +61 -0
  6. package/android/src/main/cxx/helpers.h +7 -0
  7. package/android/src/main/cxx/platform.cpp +170 -0
  8. package/android/src/main/cxx/platform.h +20 -0
  9. package/android/src/main/java/com/unistyles/Models.kt +12 -70
  10. package/android/src/main/java/com/unistyles/Platform.kt +311 -10
  11. package/android/src/main/java/com/unistyles/UnistylesModule.kt +145 -153
  12. package/cxx/Macros.h +11 -0
  13. package/cxx/UnistylesImpl.cpp +310 -0
  14. package/cxx/UnistylesModel.cpp +234 -0
  15. package/cxx/UnistylesModel.h +141 -0
  16. package/cxx/UnistylesRuntime.cpp +17 -356
  17. package/cxx/UnistylesRuntime.h +71 -87
  18. package/ios/UnistylesModule.h +13 -0
  19. package/ios/UnistylesModule.mm +20 -90
  20. package/ios/platform/Platform_Shared.h +8 -0
  21. package/ios/platform/Platform_Shared.mm +160 -0
  22. package/ios/platform/Platform_iOS.h +6 -10
  23. package/ios/platform/Platform_iOS.mm +143 -93
  24. package/ios/platform/Platform_macOS.h +3 -7
  25. package/ios/platform/Platform_macOS.mm +52 -34
  26. package/ios/platform/Platform_tvOS.h +17 -0
  27. package/ios/platform/Platform_tvOS.mm +96 -0
  28. package/ios/platform/Platform_visionOS.h +20 -0
  29. package/ios/platform/Platform_visionOS.mm +120 -0
  30. package/lib/commonjs/UnistylesProvider.js +32 -0
  31. package/lib/commonjs/UnistylesProvider.js.map +1 -0
  32. package/lib/commonjs/common.js +3 -2
  33. package/lib/commonjs/common.js.map +1 -1
  34. package/lib/commonjs/core/UnistyleRegistry.js +14 -4
  35. package/lib/commonjs/core/UnistyleRegistry.js.map +1 -1
  36. package/lib/commonjs/core/Unistyles.js +7 -0
  37. package/lib/commonjs/core/Unistyles.js.map +1 -1
  38. package/lib/commonjs/core/UnistylesModule.js +52 -8
  39. package/lib/commonjs/core/UnistylesModule.js.map +1 -1
  40. package/lib/commonjs/core/UnistylesModule.native.js.map +1 -1
  41. package/lib/commonjs/core/UnistylesModule.windows.js.map +1 -1
  42. package/lib/commonjs/core/UnistylesRuntime.js +114 -4
  43. package/lib/commonjs/core/UnistylesRuntime.js.map +1 -1
  44. package/lib/commonjs/core/index.js.map +1 -1
  45. package/lib/commonjs/core/mocks/UnistylesMockedBridge.js +36 -0
  46. package/lib/commonjs/core/mocks/UnistylesMockedBridge.js.map +1 -0
  47. package/lib/commonjs/core/mocks/UnistylesMockedRegistry.js +46 -0
  48. package/lib/commonjs/core/mocks/UnistylesMockedRegistry.js.map +1 -0
  49. package/lib/commonjs/core/mocks/UnistylesMockedRuntime.js +122 -0
  50. package/lib/commonjs/core/mocks/UnistylesMockedRuntime.js.map +1 -0
  51. package/lib/commonjs/core/mocks/index.js +27 -0
  52. package/lib/commonjs/core/mocks/index.js.map +1 -0
  53. package/lib/commonjs/createStyleSheet.js.map +1 -1
  54. package/lib/commonjs/global.js.map +1 -1
  55. package/lib/commonjs/hooks/index.js.map +1 -1
  56. package/lib/commonjs/hooks/useCSS.js.map +1 -1
  57. package/lib/commonjs/hooks/useCSS.native.js.map +1 -1
  58. package/lib/commonjs/hooks/useInitialTheme.js.map +1 -1
  59. package/lib/commonjs/hooks/useSharedContext.js +77 -0
  60. package/lib/commonjs/hooks/useSharedContext.js.map +1 -0
  61. package/lib/commonjs/hooks/useUnistyles.js +18 -65
  62. package/lib/commonjs/hooks/useUnistyles.js.map +1 -1
  63. package/lib/commonjs/hooks/useVariants.js.map +1 -1
  64. package/lib/commonjs/index.js +7 -0
  65. package/lib/commonjs/index.js.map +1 -1
  66. package/lib/commonjs/normalizer/index.js.map +1 -1
  67. package/lib/commonjs/normalizer/module.d.js.map +1 -1
  68. package/lib/commonjs/normalizer/normalizeStyle.js.map +1 -1
  69. package/lib/commonjs/normalizer/normalizer.js +1 -1
  70. package/lib/commonjs/normalizer/normalizer.js.map +1 -1
  71. package/lib/commonjs/normalizer/normalizer.macos.js.map +1 -1
  72. package/lib/commonjs/plugins/cssMediaQueriesPlugin.js.map +1 -1
  73. package/lib/commonjs/plugins/index.js.map +1 -1
  74. package/lib/commonjs/plugins/normalizeWebStylesPlugin.js.map +1 -1
  75. package/lib/commonjs/types/breakpoints.js.map +1 -1
  76. package/lib/commonjs/types/color.js +2 -0
  77. package/lib/commonjs/types/color.js.map +1 -0
  78. package/lib/commonjs/types/common.js.map +1 -1
  79. package/lib/commonjs/types/core.js.map +1 -1
  80. package/lib/commonjs/types/index.js +11 -0
  81. package/lib/commonjs/types/index.js.map +1 -1
  82. package/lib/commonjs/types/normalizer.js.map +1 -1
  83. package/lib/commonjs/types/plugin.js.map +1 -1
  84. package/lib/commonjs/types/stylesheet.js.map +1 -1
  85. package/lib/commonjs/types/unistyles.js.map +1 -1
  86. package/lib/commonjs/types/variants.js.map +1 -1
  87. package/lib/commonjs/useStyles.js +1 -1
  88. package/lib/commonjs/useStyles.js.map +1 -1
  89. package/lib/commonjs/utils/breakpoints.js.map +1 -1
  90. package/lib/commonjs/utils/cssMediaQuery.js.map +1 -1
  91. package/lib/commonjs/utils/generateId.js.map +1 -1
  92. package/lib/commonjs/utils/hash32.js.map +1 -1
  93. package/lib/commonjs/utils/index.js +7 -0
  94. package/lib/commonjs/utils/index.js.map +1 -1
  95. package/lib/commonjs/utils/mq.js.map +1 -1
  96. package/lib/commonjs/utils/mqParser.js.map +1 -1
  97. package/lib/commonjs/utils/parseColor.js +35 -0
  98. package/lib/commonjs/utils/parseColor.js.map +1 -0
  99. package/lib/commonjs/utils/styles.js +15 -1
  100. package/lib/commonjs/utils/styles.js.map +1 -1
  101. package/lib/commonjs/utils/withPlugins.js.map +1 -1
  102. package/lib/module/UnistylesProvider.js +24 -0
  103. package/lib/module/UnistylesProvider.js.map +1 -0
  104. package/lib/module/common.js +2 -1
  105. package/lib/module/common.js.map +1 -1
  106. package/lib/module/core/UnistyleRegistry.js +15 -5
  107. package/lib/module/core/UnistyleRegistry.js.map +1 -1
  108. package/lib/module/core/Unistyles.js +8 -1
  109. package/lib/module/core/Unistyles.js.map +1 -1
  110. package/lib/module/core/UnistylesModule.js +52 -8
  111. package/lib/module/core/UnistylesModule.js.map +1 -1
  112. package/lib/module/core/UnistylesModule.native.js.map +1 -1
  113. package/lib/module/core/UnistylesModule.windows.js.map +1 -1
  114. package/lib/module/core/UnistylesRuntime.js +115 -4
  115. package/lib/module/core/UnistylesRuntime.js.map +1 -1
  116. package/lib/module/core/index.js +2 -1
  117. package/lib/module/core/index.js.map +1 -1
  118. package/lib/module/core/mocks/UnistylesMockedBridge.js +29 -0
  119. package/lib/module/core/mocks/UnistylesMockedBridge.js.map +1 -0
  120. package/lib/module/core/mocks/UnistylesMockedRegistry.js +39 -0
  121. package/lib/module/core/mocks/UnistylesMockedRegistry.js.map +1 -0
  122. package/lib/module/core/mocks/UnistylesMockedRuntime.js +114 -0
  123. package/lib/module/core/mocks/UnistylesMockedRuntime.js.map +1 -0
  124. package/lib/module/core/mocks/index.js +4 -0
  125. package/lib/module/core/mocks/index.js.map +1 -0
  126. package/lib/module/createStyleSheet.js.map +1 -1
  127. package/lib/module/global.js.map +1 -1
  128. package/lib/module/hooks/index.js.map +1 -1
  129. package/lib/module/hooks/useCSS.js.map +1 -1
  130. package/lib/module/hooks/useCSS.native.js.map +1 -1
  131. package/lib/module/hooks/useInitialTheme.js.map +1 -1
  132. package/lib/module/hooks/useSharedContext.js +70 -0
  133. package/lib/module/hooks/useSharedContext.js.map +1 -0
  134. package/lib/module/hooks/useUnistyles.js +19 -66
  135. package/lib/module/hooks/useUnistyles.js.map +1 -1
  136. package/lib/module/hooks/useVariants.js.map +1 -1
  137. package/lib/module/index.js +2 -2
  138. package/lib/module/index.js.map +1 -1
  139. package/lib/module/normalizer/index.js.map +1 -1
  140. package/lib/module/normalizer/module.d.js.map +1 -1
  141. package/lib/module/normalizer/normalizeStyle.js.map +1 -1
  142. package/lib/module/normalizer/normalizer.js.map +1 -1
  143. package/lib/module/normalizer/normalizer.macos.js.map +1 -1
  144. package/lib/module/plugins/cssMediaQueriesPlugin.js.map +1 -1
  145. package/lib/module/plugins/index.js.map +1 -1
  146. package/lib/module/plugins/normalizeWebStylesPlugin.js.map +1 -1
  147. package/lib/module/types/breakpoints.js.map +1 -1
  148. package/lib/module/types/color.js +2 -0
  149. package/lib/module/types/color.js.map +1 -0
  150. package/lib/module/types/common.js.map +1 -1
  151. package/lib/module/types/core.js.map +1 -1
  152. package/lib/module/types/index.js +1 -0
  153. package/lib/module/types/index.js.map +1 -1
  154. package/lib/module/types/normalizer.js.map +1 -1
  155. package/lib/module/types/plugin.js.map +1 -1
  156. package/lib/module/types/stylesheet.js.map +1 -1
  157. package/lib/module/types/unistyles.js.map +1 -1
  158. package/lib/module/types/variants.js.map +1 -1
  159. package/lib/module/useStyles.js +1 -1
  160. package/lib/module/useStyles.js.map +1 -1
  161. package/lib/module/utils/breakpoints.js.map +1 -1
  162. package/lib/module/utils/cssMediaQuery.js.map +1 -1
  163. package/lib/module/utils/generateId.js.map +1 -1
  164. package/lib/module/utils/hash32.js.map +1 -1
  165. package/lib/module/utils/index.js +1 -0
  166. package/lib/module/utils/index.js.map +1 -1
  167. package/lib/module/utils/mq.js.map +1 -1
  168. package/lib/module/utils/mqParser.js.map +1 -1
  169. package/lib/module/utils/parseColor.js +28 -0
  170. package/lib/module/utils/parseColor.js.map +1 -0
  171. package/lib/module/utils/styles.js +15 -1
  172. package/lib/module/utils/styles.js.map +1 -1
  173. package/lib/module/utils/withPlugins.js.map +1 -1
  174. package/lib/typescript/src/UnistylesProvider.d.ts +20 -0
  175. package/lib/typescript/src/UnistylesProvider.d.ts.map +1 -0
  176. package/lib/typescript/src/common.d.ts +3 -2
  177. package/lib/typescript/src/common.d.ts.map +1 -1
  178. package/lib/typescript/src/core/UnistyleRegistry.d.ts.map +1 -1
  179. package/lib/typescript/src/core/Unistyles.d.ts.map +1 -1
  180. package/lib/typescript/src/core/UnistylesModule.d.ts +1 -0
  181. package/lib/typescript/src/core/UnistylesModule.d.ts.map +1 -1
  182. package/lib/typescript/src/core/UnistylesModule.native.d.ts.map +1 -1
  183. package/lib/typescript/src/core/UnistylesModule.windows.d.ts.map +1 -1
  184. package/lib/typescript/src/core/UnistylesRuntime.d.ts +84 -8
  185. package/lib/typescript/src/core/UnistylesRuntime.d.ts.map +1 -1
  186. package/lib/typescript/src/core/index.d.ts +3 -1
  187. package/lib/typescript/src/core/index.d.ts.map +1 -1
  188. package/lib/typescript/src/core/mocks/UnistylesMockedBridge.d.ts +28 -0
  189. package/lib/typescript/src/core/mocks/UnistylesMockedBridge.d.ts.map +1 -0
  190. package/lib/typescript/src/core/mocks/UnistylesMockedRegistry.d.ts +21 -0
  191. package/lib/typescript/src/core/mocks/UnistylesMockedRegistry.d.ts.map +1 -0
  192. package/lib/typescript/src/core/mocks/UnistylesMockedRuntime.d.ts +79 -0
  193. package/lib/typescript/src/core/mocks/UnistylesMockedRuntime.d.ts.map +1 -0
  194. package/lib/typescript/src/core/mocks/index.d.ts +4 -0
  195. package/lib/typescript/src/core/mocks/index.d.ts.map +1 -0
  196. package/lib/typescript/src/createStyleSheet.d.ts.map +1 -1
  197. package/lib/typescript/src/hooks/useCSS.d.ts.map +1 -1
  198. package/lib/typescript/src/hooks/useCSS.native.d.ts.map +1 -1
  199. package/lib/typescript/src/hooks/useSharedContext.d.ts +33 -0
  200. package/lib/typescript/src/hooks/useSharedContext.d.ts.map +1 -0
  201. package/lib/typescript/src/hooks/useUnistyles.d.ts +4 -19
  202. package/lib/typescript/src/hooks/useUnistyles.d.ts.map +1 -1
  203. package/lib/typescript/src/hooks/useVariants.d.ts.map +1 -1
  204. package/lib/typescript/src/index.d.ts +7 -15
  205. package/lib/typescript/src/index.d.ts.map +1 -1
  206. package/lib/typescript/src/normalizer/normalizeStyle.d.ts.map +1 -1
  207. package/lib/typescript/src/types/breakpoints.d.ts +9 -8
  208. package/lib/typescript/src/types/breakpoints.d.ts.map +1 -1
  209. package/lib/typescript/src/types/color.d.ts +4 -0
  210. package/lib/typescript/src/types/color.d.ts.map +1 -0
  211. package/lib/typescript/src/types/core.d.ts +2 -2
  212. package/lib/typescript/src/types/core.d.ts.map +1 -1
  213. package/lib/typescript/src/types/index.d.ts +2 -1
  214. package/lib/typescript/src/types/index.d.ts.map +1 -1
  215. package/lib/typescript/src/types/normalizer.d.ts +1 -1
  216. package/lib/typescript/src/types/normalizer.d.ts.map +1 -1
  217. package/lib/typescript/src/types/stylesheet.d.ts +9 -6
  218. package/lib/typescript/src/types/stylesheet.d.ts.map +1 -1
  219. package/lib/typescript/src/types/unistyles.d.ts +20 -9
  220. package/lib/typescript/src/types/unistyles.d.ts.map +1 -1
  221. package/lib/typescript/src/useStyles.d.ts +1 -1
  222. package/lib/typescript/src/useStyles.d.ts.map +1 -1
  223. package/lib/typescript/src/utils/breakpoints.d.ts.map +1 -1
  224. package/lib/typescript/src/utils/index.d.ts +1 -0
  225. package/lib/typescript/src/utils/index.d.ts.map +1 -1
  226. package/lib/typescript/src/utils/mqParser.d.ts.map +1 -1
  227. package/lib/typescript/src/utils/parseColor.d.ts +3 -0
  228. package/lib/typescript/src/utils/parseColor.d.ts.map +1 -0
  229. package/lib/typescript/src/utils/styles.d.ts.map +1 -1
  230. package/package.json +38 -25
  231. package/react-native-unistyles.podspec +4 -1
  232. package/src/UnistylesProvider.tsx +33 -0
  233. package/src/common.ts +3 -2
  234. package/src/core/UnistyleRegistry.ts +19 -5
  235. package/src/core/Unistyles.ts +10 -1
  236. package/src/core/UnistylesModule.ts +61 -14
  237. package/src/core/UnistylesRuntime.ts +120 -5
  238. package/src/core/index.ts +7 -1
  239. package/src/core/mocks/UnistylesMockedBridge.ts +30 -0
  240. package/src/core/mocks/UnistylesMockedRegistry.ts +47 -0
  241. package/src/core/mocks/UnistylesMockedRuntime.ts +144 -0
  242. package/src/core/mocks/index.ts +3 -0
  243. package/src/hooks/useSharedContext.ts +83 -0
  244. package/src/hooks/useUnistyles.ts +15 -71
  245. package/src/index.ts +10 -4
  246. package/src/types/breakpoints.ts +19 -9
  247. package/src/types/color.ts +26 -0
  248. package/src/types/core.ts +2 -2
  249. package/src/types/index.ts +5 -1
  250. package/src/types/normalizer.ts +1 -1
  251. package/src/types/stylesheet.ts +10 -7
  252. package/src/types/unistyles.ts +28 -12
  253. package/src/useStyles.ts +1 -1
  254. package/src/utils/index.ts +1 -0
  255. package/src/utils/parseColor.ts +33 -0
  256. package/src/utils/styles.ts +24 -1
  257. package/windows/ExperimentalFeatures.props +4 -4
  258. package/windows/NuGet.Config +0 -1
  259. package/windows/ReactNativeUnistyles/ReactNativeUnistyles.h +42 -112
  260. package/windows/ReactNativeUnistyles/ReactNativeUnistyles.vcxproj +7 -2
  261. package/windows/ReactNativeUnistyles/ReactNativeUnistyles.vcxproj.filters +6 -1
  262. package/windows/ReactNativeUnistyles/packages.lock.json +31 -31
  263. package/android/src/main/java/com/unistyles/Config.kt +0 -116
  264. package/android/src/main/java/com/unistyles/Insets.kt +0 -138
  265. package/ios/UnistylesHelpers.h +0 -3
  266. package/ios/UnistylesHelpers.mm +0 -5
package/README.md CHANGED
@@ -1,4 +1,6 @@
1
1
  [<img alt="react-native-unistyles" src="assets/banner.png">](https://reactnativeunistyles.vercel.app/)
2
+ [<img alt="react-native-unistyles-3.0" src="assets/v3.jpg">](https://github.com/jpudysz/react-native-unistyles/discussions/191)
3
+
2
4
 
3
5
  ![GitHub package.json version](https://img.shields.io/github/package-json/v/jpudysz/react-native-unistyles?style=for-the-badge)
4
6
  [![npm downloads](https://img.shields.io/npm/dm/react-native-unistyles?style=for-the-badge)](https://www.npmjs.com/package/react-native-unistyles)
@@ -9,35 +11,43 @@
9
11
  [![platform - web](https://img.shields.io/badge/React_Native_Web-white?logo=react&logoColor=57BDDA&style=for-the-badge)](https://www.w3.org/)
10
12
  [![platform - ios](https://img.shields.io/badge/iOS-000?logo=apple&style=for-the-badge)](https://developer.apple.com/ios/)
11
13
  [![platform - macos](https://img.shields.io/badge/macOS-000?logo=apple&style=for-the-badge)](https://developer.apple.com/macos/)
14
+ [![platform - appletv](https://img.shields.io/badge/Apple_TV-000?logo=apple&style=for-the-badge)](https://developer.apple.com/tvos/)
15
+ [![platform - visionos](https://img.shields.io/badge/visionos-000?logo=apple&style=for-the-badge)](https://developer.apple.com/visionos/)
16
+ [![platform - android](https://img.shields.io/badge/Android-44CD11?style=for-the-badge&logo=android&logoColor=white)](https://developer.android.com/)
17
+ [![platform - androidtv](https://img.shields.io/badge/Android_TV-44CD11?style=for-the-badge&logo=android&logoColor=white)](https://www.android.com/intl/pl_pl/tv/)
12
18
  [![platform - windows](https://img.shields.io/badge/windows-00a2ed?logo=windows&style=for-the-badge)](https://microsoft.github.io/react-native-windows/docs/getting-started)
13
19
  [![platform - ssr](https://img.shields.io/badge/SSR-black?style=for-the-badge&logo=next.js&logoColor=white)](https://nextjs.org/)
14
- [![platform - android](https://img.shields.io/badge/Android-44CD11?style=for-the-badge&logo=android&logoColor=white)](https://developer.android.com/)
15
20
 
16
- <a href="https://github.com/jpudysz?tab=followers">
17
- <img src="https://img.shields.io/github/followers/jpudysz?label=Follow%20%40jpudysz&style=social" />
18
- </a>
19
- <br/>
20
- <a href="https://twitter.com/jpudysz">
21
- <img src="https://img.shields.io/twitter/follow/jpudysz?label=Follow%20%40jpudysz&style=social" />
22
- </a>
23
21
 
22
+ ## Installation
23
+
24
+ ```shell
25
+ yarn add react-native-unistyles
26
+ ```
27
+ Install CocoaPods dependencies / generate native folders with Expo:
28
+
29
+ ```shell
30
+ pod install
31
+ or
32
+ npx expo prebuild
33
+ ```
24
34
 
25
35
  ## [Documentation](https://reactnativeunistyles.vercel.app/)
26
36
  - [Start here](https://reactnativeunistyles.vercel.app/start/introduction/)
27
37
  - [API](https://reactnativeunistyles.vercel.app/reference/create-stylesheet/)
28
- - [Show case](https://reactnativeunistyles.vercel.app/show-case/projects/)
38
+ - [Migration from StyleSheet](https://reactnativeunistyles.vercel.app/start/migration-from-stylesheet/)
29
39
  - [Examples](https://reactnativeunistyles.vercel.app/examples/all/)
30
40
 
31
41
  ## Features
32
42
  - 🚀 Shared core with C++ and JSI bindings
33
- - 🌉 Supports new architecture
43
+ - 🌉 Supports new architecture and bridgeless mode
34
44
  - 🔥 Crazy performance, adds under 0.1 ms to your StyleSheet
35
45
  - 🎳 Share up to 100% of your styles across platforms in monorepo
36
46
  - 🎯 Doesn't introduce new components, everything is packed in one hook
37
- - ⚛️ No React Context
47
+ - ⚛️ No React Context, no React Native events
38
48
  - 🖥️ Supports custom breakpoints, css-like media queries and variants
39
49
  - 🎨 Register multiple themes and change them with single function call
40
- - 🥳 Compatible with most popular platforms
50
+ - 🥳 Compatible with all React Native platforms
41
51
  - 🛡️ ~99% Test coverage
42
52
  - 🔌 Extend stylesheets with your own plugins
43
53
  - ⚔️ No 3rd party dependencies
@@ -53,36 +63,72 @@
53
63
  <a href="https://galaxies.dev">
54
64
  <img src="https://avatars.githubusercontent.com/u/118431096?s=200&v=4" height="70px" width="70px" alt="galaxies-dev" />
55
65
  </a>
66
+ <a href="https://github.com/mobily">
67
+ <img src="https://avatars.githubusercontent.com/u/1467712?v=4" height="70px" width="70px" alt="mobily" />
68
+ </a>
69
+ <a href="https://github.com/mwarger">
70
+ <img src="https://avatars.githubusercontent.com/u/686823?v=4" height="70px" width="70px" alt="mwarger" />
71
+ </a>
72
+ <a href="https://github.com/biw">
73
+ <img src="https://avatars.githubusercontent.com/u/6139501?v=4" height="70px" width="70px" alt="biw" />
74
+ </a>
75
+ <a href="https://github.com/happyfloat">
76
+ <img src="https://avatars.githubusercontent.com/u/186333704?s=200&v=4" height="70px" width="70px" alt="happyfloat" />
77
+ </a>
78
+ <a href="https://github.com">
79
+ <img src="https://avatars.githubusercontent.com/u/138339?v=4" height="70px" width="70px" alt="anonymous" />
80
+ </a>
81
+ <a href="https://github.com/hyoban">
82
+ <img src="https://avatars.githubusercontent.com/u/38493346?v=4" height="70px" width="70px" alt="hyoban" />
83
+ </a>
84
+
85
+ ## Past sponsors
86
+
56
87
  <a href="https://github.com/kmartinezmedia">
57
88
  <img src="https://avatars.githubusercontent.com/u/6308123?s=200&v=4" height="70px" width="70px" alt="kmartinezmedia" />
58
89
  </a>
90
+ <a href="https://github.com/levibuzolic">
91
+ <img src="https://avatars.githubusercontent.com/u/721323?v=4" height="70px" width="70px" alt="levibuzolic" />
92
+ </a>
93
+ <a href="https://github.com/claudesortwell">
94
+ <img src="https://avatars.githubusercontent.com/u/41422239?v=4" height="70px" width="70px" alt="claudesortwell" />
95
+ </a>
96
+ <a href="https://github.com/luoxuhai">
97
+ <img src="https://avatars.githubusercontent.com/u/37284154?v=4" height="70px" width="70px" alt="luoxuhai" />
98
+ </a>
99
+ <a href="https://github.com">
100
+ <img src="https://avatars.githubusercontent.com/u/113348625?v=4" height="70px" width="70px" alt="anonymous" />
101
+ </a>
102
+ <a href="https://github.com/abanobboles">
103
+ <img src="https://avatars.githubusercontent.com/u/9078953?v=4" height="70px" width="70px" alt="abanobboles" />
104
+ </a>
59
105
 
106
+ ## Sponsor my work
60
107
 
61
- ## Installation
108
+ If you found the `react-native-unistyles` time-saving and valuable, please consider sponsoring my work. Your support enables me to continue creating libraries with a fresh approach.
62
109
 
63
- ```shell
64
- yarn add react-native-unistyles
65
- ```
110
+ Github: https://github.com/sponsors/jpudysz
66
111
 
67
- ## Benchmarks
112
+ Ko-fi: https://ko-fi.com/jpudysz
68
113
 
69
- <img src="https://reactnativeunistyles.vercel.app/_astro/benchmark-2.jAtWyu0v.png" />
114
+ Your support is greatly appreciated and helps me dedicate more time and resources to creating quality libraries. Thank you for all the support!
70
115
 
71
116
 
72
- ## Discord
73
- Looking for help or you want to chat with me?
117
+ ## UI Kits
74
118
 
75
- [Join Discord](https://discord.gg/akGHf27P4C)
119
+ <a href="https://stacks.grapp.dev/">
120
+ <img src="https://raw.githubusercontent.com/grapp-dev/stacks/main/assets/stacks-logo.png" height="70px" width="70px" alt="Stacks" />
121
+ </a>
76
122
 
77
- ## Sponsor my work
123
+ ## Plugins
78
124
 
79
- If you found the `react-native-unistyles` time-saving and valuable, please consider sponsoring my work. Your support enables me to continue creating libraries with a fresh approach.
125
+ [eslint-plugin-react-native-unistyles](https://github.com/RodSarhan/eslint-plugin-react-native-unistyles)
80
126
 
81
- Github: https://github.com/sponsors/jpudysz
127
+ ## Discord
128
+ Looking for help or you want to chat with me?
82
129
 
83
- Ko-fi: https://ko-fi.com/jpudysz
130
+ [Join Discord](https://discord.gg/akGHf27P4C)
84
131
 
85
- Your support is greatly appreciated and helps me dedicate more time and resources to creating quality libraries. Thank you for all the support!
86
132
 
87
133
  ## License
88
134
 
@@ -5,8 +5,11 @@ project(unistyles)
5
5
  add_library(unistyles
6
6
  SHARED
7
7
  ../cxx/UnistylesRuntime.cpp
8
+ ../cxx/UnistylesModel.cpp
9
+ ../cxx/UnistylesImpl.cpp
8
10
  ./src/main/cxx/cpp-adapter.cpp
9
11
  ./src/main/cxx/helpers.cpp
12
+ ./src/main/cxx/platform.cpp
10
13
  )
11
14
 
12
15
  include_directories(
@@ -14,15 +17,28 @@ include_directories(
14
17
  )
15
18
 
16
19
  set_target_properties(unistyles PROPERTIES
17
- CXX_STANDARD 17
20
+ CXX_STANDARD 20
18
21
  CXX_STANDARD_REQUIRED ON
19
22
  CXX_EXTENSIONS OFF
20
23
  POSITION_INDEPENDENT_CODE ON
21
24
  )
22
25
 
23
26
  find_package(ReactAndroid REQUIRED CONFIG)
27
+ find_package(fbjni REQUIRED CONFIG)
28
+
29
+ # REACTNATIVE_MERGED_SO doesnt work as of RN 0.76.0-rc.3
30
+ if (ReactAndroid_VERSION_MINOR GREATER_EQUAL 76)
31
+ target_link_libraries(unistyles ReactAndroid::reactnative)
32
+ else()
33
+ target_link_libraries(unistyles
34
+ ReactAndroid::turbomodulejsijni
35
+ ReactAndroid::react_nativemodule_core
36
+ android
37
+ fbjni::fbjni
38
+ )
39
+ endif()
24
40
 
25
41
  target_link_libraries(unistyles
26
42
  ReactAndroid::jsi
27
- android
43
+ fbjni::fbjni
28
44
  )
@@ -60,7 +60,11 @@ android {
60
60
  "META-INF",
61
61
  "META-INF/**",
62
62
  "**/libjsi.so",
63
- "**/libc++_shared.so"
63
+ "**/libc++_shared.so",
64
+ "**/libreactnative.so",
65
+ "**/libreact_nativemodule_core.so",
66
+ "**/libturbomodulejsijni.so",
67
+ "**/libfbjni.so"
64
68
  ]
65
69
  }
66
70
  }
@@ -1,8 +1,10 @@
1
1
  #include <jni.h>
2
2
  #include <jsi/jsi.h>
3
3
  #include <map>
4
+ #include <ReactCommon/CallInvokerHolder.h>
4
5
  #include "UnistylesRuntime.h"
5
6
  #include "helpers.h"
7
+ #include "platform.h"
6
8
 
7
9
  using namespace facebook;
8
10
 
@@ -11,96 +13,30 @@ std::shared_ptr<UnistylesRuntime> unistylesRuntime = nullptr;
11
13
 
12
14
  extern "C"
13
15
  JNIEXPORT void JNICALL
14
- Java_com_unistyles_UnistylesModule_nativeInstall(
15
- JNIEnv *env,
16
- jobject thiz,
17
- jlong jsi,
18
- jobject screen,
19
- jstring colorScheme,
20
- jstring contentSizeCategory,
21
- jobject insets,
22
- jobject statusBar,
23
- jobject navigationBar
24
- ) {
25
- auto runtime = reinterpret_cast<facebook::jsi::Runtime *>(jsi);
16
+ Java_com_unistyles_UnistylesModule_nativeInstall(JNIEnv *env, jobject thiz, jlong jsi, jobject callInvokerHolder) {
17
+ auto runtime = reinterpret_cast<jsi::Runtime *>(jsi);
18
+ auto callInvoker{
19
+ jni::alias_ref<react::CallInvokerHolder::javaobject>{ reinterpret_cast<react::CallInvokerHolder::javaobject>(callInvokerHolder)} -> cthis() ->getCallInvoker()
20
+ };
26
21
 
27
22
  if (unistylesModule == nullptr) {
28
23
  unistylesModule = env->NewGlobalRef(thiz);
29
24
  }
30
25
 
31
- if (runtime == nullptr || unistylesModule == nullptr) {
26
+ if (unistylesModule == nullptr) {
32
27
  return throwKotlinException(env, "Something went wrong while initializing UnistylesModule");
33
28
  }
34
29
 
35
- const char *colorSchemeChars = env->GetStringUTFChars(colorScheme, nullptr);
36
- std::string colorSchemeStr(colorSchemeChars);
37
- env->ReleaseStringUTFChars(colorScheme, colorSchemeChars);
38
-
39
- const char *contentSizeCategoryChars = env->GetStringUTFChars(contentSizeCategory, nullptr);
40
- std::string contentSizeCategoryStr(contentSizeCategoryChars);
41
- env->ReleaseStringUTFChars(contentSizeCategory, contentSizeCategoryChars);
42
-
43
- unistylesRuntime = std::make_shared<UnistylesRuntime>(
44
- jobjectToDimensions(env, screen),
45
- colorSchemeStr,
46
- contentSizeCategoryStr,
47
- jobjectToInsets(env, insets),
48
- jobjectToDimensions(env, statusBar),
49
- jobjectToDimensions(env, navigationBar)
50
- );
51
-
52
- unistylesRuntime->onThemeChange([=](const std::string &theme) {
53
- jstring themeStr = env->NewStringUTF(theme.c_str());
54
- jclass cls = env->GetObjectClass(unistylesModule);
55
- jmethodID methodId = env->GetMethodID(cls, "onThemeChange", "(Ljava/lang/String;)V");
56
-
57
- env->CallVoidMethod(unistylesModule, methodId, themeStr);
58
- env->DeleteLocalRef(themeStr);
59
- env->DeleteLocalRef(cls);
60
- });
61
-
62
- unistylesRuntime->onLayoutChange([=](const std::string &breakpoint, const std::string &orientation, Dimensions& screen, Dimensions& statusBar, Insets& insets, Dimensions& navigationBar) {
63
- jstring breakpointStr = env->NewStringUTF(breakpoint.c_str());
64
- jstring orientationStr = env->NewStringUTF(orientation.c_str());
65
- jclass cls = env->GetObjectClass(unistylesModule);
66
- jclass dimensionsClass = env->FindClass("com/unistyles/Dimensions");
67
- jmethodID dimensionsConstructor = env->GetMethodID(dimensionsClass, "<init>", "(II)V");
68
- jobject screenObj = env->NewObject(dimensionsClass, dimensionsConstructor, screen.width, screen.height);
69
- jobject statusBarObj = env->NewObject(dimensionsClass, dimensionsConstructor, statusBar.width, statusBar.height);
70
- jobject navigationBarObj = env->NewObject(dimensionsClass, dimensionsConstructor, navigationBar.width, navigationBar.height);
30
+ auto runOnJSThread = [callInvoker](std::function<void(jsi::Runtime&)>&& callback) {
31
+ callInvoker->invokeAsync([callback = std::move(callback)](jsi::Runtime &rt) {
32
+ callback(rt);
33
+ });
34
+ };
71
35
 
72
- jclass insetsClass = env->FindClass("com/unistyles/Insets");
73
- jmethodID insetsConstructor = env->GetMethodID(insetsClass, "<init>", "(IIII)V");
74
- jobject insetsObj = env->NewObject(insetsClass, insetsConstructor, insets.left, insets.top, insets.right, insets.bottom);
75
- jmethodID methodId = env->GetMethodID(cls, "onLayoutChange",
76
- "(Ljava/lang/String;Ljava/lang/String;Lcom/unistyles/Dimensions;Lcom/unistyles/Dimensions;Lcom/unistyles/Insets;Lcom/unistyles/Dimensions;)V");
77
-
78
- env->CallVoidMethod(unistylesModule, methodId, breakpointStr, orientationStr, screenObj, statusBarObj, insetsObj, navigationBarObj);
79
- env->DeleteLocalRef(breakpointStr);
80
- env->DeleteLocalRef(orientationStr);
81
- env->DeleteLocalRef(cls);
82
- });
83
-
84
- unistylesRuntime->onPluginChange([=]() {
85
- jclass cls = env->GetObjectClass(unistylesModule);
86
- jmethodID methodId = env->GetMethodID(cls, "onPluginChange", "()V");
87
-
88
- env->CallVoidMethod(unistylesModule, methodId);
89
- env->DeleteLocalRef(cls);
90
- });
91
-
92
- unistylesRuntime->onContentSizeCategoryChange([=](const std::string &contentSizeCategory) {
93
- jstring contentSizeCategoryStr = env->NewStringUTF(contentSizeCategory.c_str());
94
- jclass cls = env->GetObjectClass(unistylesModule);
95
- jmethodID methodId = env->GetMethodID(cls, "onContentSizeCategoryChange", "(Ljava/lang/String;)V");
96
-
97
- env->CallVoidMethod(unistylesModule, methodId, contentSizeCategoryStr);
98
- env->DeleteLocalRef(contentSizeCategoryStr);
99
- env->DeleteLocalRef(cls);
100
- });
36
+ unistylesRuntime = std::make_shared<UnistylesRuntime>(runOnJSThread);
37
+ makeShared(env, unistylesModule, unistylesRuntime);
101
38
 
102
39
  jsi::Object hostObject = jsi::Object::createFromHostObject(*runtime, unistylesRuntime);
103
-
104
40
  runtime->global().setProperty(*runtime, "__UNISTYLES__", std::move(hostObject));
105
41
  }
106
42
 
@@ -115,7 +51,7 @@ extern "C"
115
51
  JNIEXPORT void JNICALL
116
52
  Java_com_unistyles_UnistylesModule_nativeOnOrientationChange(JNIEnv *env, jobject thiz, jobject screen, jobject insets, jobject statusBar, jobject navigationBar) {
117
53
  if (unistylesRuntime != nullptr) {
118
- Dimensions screenDimensions = jobjectToDimensions(env, screen);
54
+ Screen screenDimensions = jobjectToScreen(env, screen);
119
55
  Dimensions statusBarDimensions = jobjectToDimensions(env, statusBar);
120
56
  Insets screenInsets = jobjectToInsets(env, insets);
121
57
  Dimensions navigationBarDimensions = jobjectToDimensions(env, navigationBar);
@@ -14,6 +14,23 @@ Dimensions jobjectToDimensions(JNIEnv *env, jobject dimensionObj) {
14
14
  return Dimensions{width, height};
15
15
  }
16
16
 
17
+ Screen jobjectToScreen(JNIEnv *env, jobject screenObj) {
18
+ jclass screenClass = env->FindClass("com/unistyles/Screen");
19
+ jfieldID widthFieldID = env->GetFieldID(screenClass, "width", "I");
20
+ jfieldID heightFieldID = env->GetFieldID(screenClass, "height", "I");
21
+ jfieldID pixelRatioFieldID = env->GetFieldID(screenClass, "pixelRatio", "F");
22
+ jfieldID scaleFieldID = env->GetFieldID(screenClass, "fontScale", "F");
23
+
24
+ int width = env->GetIntField(screenObj, widthFieldID);
25
+ int height = env->GetIntField(screenObj, heightFieldID);
26
+ float pixelRatio = env->GetFloatField(screenObj, pixelRatioFieldID);
27
+ float fontScale = env->GetFloatField(screenObj, scaleFieldID);
28
+
29
+ env->DeleteLocalRef(screenClass);
30
+
31
+ return Screen{width, height, pixelRatio, fontScale};
32
+ }
33
+
17
34
  Insets jobjectToInsets(JNIEnv *env, jobject insetsObj) {
18
35
  jclass insetsClass = env->FindClass("com/unistyles/Insets");
19
36
  jfieldID leftFieldID = env->GetFieldID(insetsClass, "left", "I");
@@ -31,6 +48,50 @@ Insets jobjectToInsets(JNIEnv *env, jobject insetsObj) {
31
48
  return Insets{top, bottom, left, right};
32
49
  }
33
50
 
51
+ void JNI_callPlatformWithColor(JNIEnv *env, jobject unistylesModule, std::string name, std::string sig, std::string param, float alpha) {
52
+ jclass cls = env->GetObjectClass(unistylesModule);
53
+ jfieldID platformFieldId = env->GetFieldID(cls, "platform", "Lcom/unistyles/Platform;");
54
+ jobject platformInstance = env->GetObjectField(unistylesModule, platformFieldId);
55
+ jclass platformClass = env->GetObjectClass(platformInstance);
56
+ jstring strParam = env->NewStringUTF(param.c_str());
57
+ jmethodID methodId = env->GetMethodID(platformClass, name.c_str(), sig.c_str());
58
+
59
+ env->CallVoidMethod(platformInstance, methodId, strParam, static_cast<jfloat>(alpha));
60
+
61
+ env->DeleteLocalRef(cls);
62
+ env->DeleteLocalRef(platformInstance);
63
+ env->DeleteLocalRef(platformClass);
64
+ env->DeleteLocalRef(strParam);
65
+ }
66
+
67
+ void JNI_callPlatformWithBool(JNIEnv *env, jobject unistylesModule, std::string name, std::string sig, bool param) {
68
+ jclass cls = env->GetObjectClass(unistylesModule);
69
+ jfieldID platformFieldId = env->GetFieldID(cls, "platform", "Lcom/unistyles/Platform;");
70
+ jobject platformInstance = env->GetObjectField(unistylesModule, platformFieldId);
71
+ jclass platformClass = env->GetObjectClass(platformInstance);
72
+ jmethodID methodId = env->GetMethodID(platformClass, name.c_str(), sig.c_str());
73
+
74
+ env->CallVoidMethod(platformInstance, methodId, param);
75
+ env->DeleteLocalRef(cls);
76
+ env->DeleteLocalRef(platformInstance);
77
+ env->DeleteLocalRef(platformClass);
78
+ }
79
+
80
+ jobject JNI_callPlatform(JNIEnv *env, jobject unistylesModule, std::string name, std::string sig) {
81
+ jclass cls = env->GetObjectClass(unistylesModule);
82
+ jfieldID platformFieldId = env->GetFieldID(cls, "platform", "Lcom/unistyles/Platform;");
83
+ jobject platformInstance = env->GetObjectField(unistylesModule, platformFieldId);
84
+ jclass platformClass = env->GetObjectClass(platformInstance);
85
+ jmethodID methodId = env->GetMethodID(platformClass, name.c_str(), sig.c_str());
86
+ jobject result = env->CallObjectMethod(platformInstance, methodId);
87
+
88
+ env->DeleteLocalRef(cls);
89
+ env->DeleteLocalRef(platformInstance);
90
+ env->DeleteLocalRef(platformClass);
91
+
92
+ return result;
93
+ }
94
+
34
95
  void throwKotlinException(
35
96
  JNIEnv *env,
36
97
  const char *message
@@ -1,9 +1,16 @@
1
+ #pragma once
2
+
1
3
  #include <jni.h>
2
4
  #include <string>
3
5
  #include <map>
4
6
  #include <UnistylesRuntime.h>
5
7
 
6
8
  Dimensions jobjectToDimensions(JNIEnv *env, jobject dimensionObj);
9
+ Screen jobjectToScreen(JNIEnv *env, jobject screenObj);
7
10
  Insets jobjectToInsets(JNIEnv *env, jobject insetsObj);
8
11
 
12
+ void JNI_callPlatformWithColor(JNIEnv *env, jobject unistylesModule, std::string name, std::string sig, std::string param, float alpha);
13
+ jobject JNI_callPlatform(JNIEnv *env, jobject unistylesModule, std::string name, std::string sig);
14
+ void JNI_callPlatformWithBool(JNIEnv *env, jobject unistylesModule, std::string name, std::string sig, bool param);
15
+
9
16
  void throwKotlinException(JNIEnv *env, const char *message);
@@ -0,0 +1,170 @@
1
+ #include "platform.h"
2
+
3
+ void makeShared(JNIEnv *env, jobject unistylesModule, std::shared_ptr<UnistylesRuntime> unistylesRuntime) {
4
+ unistylesRuntime->setScreenDimensionsCallback([&](){
5
+ return getScreenDimensions(env, unistylesModule);
6
+ });
7
+
8
+ unistylesRuntime->setColorSchemeCallback([&](){
9
+ return getColorScheme(env, unistylesModule);
10
+ });
11
+
12
+ unistylesRuntime->setStatusBarDimensionsCallback([&](){
13
+ return getStatusBarDimensions(env, unistylesModule);
14
+ });
15
+
16
+ unistylesRuntime->setNavigationBarDimensionsCallback([&](){
17
+ return getNavigationBarDimensions(env, unistylesModule);
18
+ });
19
+
20
+ unistylesRuntime->setInsetsCallback([&](){
21
+ return getInsets(env, unistylesModule);
22
+ });
23
+
24
+ unistylesRuntime->setContentSizeCategoryCallback([&](){
25
+ return getContentSizeCategory(env, unistylesModule);
26
+ });
27
+
28
+ unistylesRuntime->setNavigationBarColorCallback([=](const std::string &color, float alpha) {
29
+ setNavigationBarColor(env, unistylesModule, color, alpha);
30
+ });
31
+
32
+ unistylesRuntime->setStatusBarColorCallback([=](const std::string &color, float alpha) {
33
+ setStatusBarColor(env, unistylesModule, color, alpha);
34
+ });
35
+
36
+ unistylesRuntime->setNavigationBarHiddenCallback([=](bool hidden) {
37
+ setNavigationBarHidden(env, unistylesModule, hidden);
38
+ });
39
+
40
+ unistylesRuntime->setStatusBarHiddenCallback([=](bool hidden) {
41
+ setStatusBarHidden(env, unistylesModule, hidden);
42
+ });
43
+
44
+ unistylesRuntime->setImmersiveModeCallback([=](bool enabled) {
45
+ setImmersiveMode(env, unistylesModule, enabled);
46
+ });
47
+
48
+ unistylesRuntime->setRootViewBackgroundColorCallback([=](const std::string &color, float alpha) {
49
+ setRootViewBackgroundColor(env, unistylesModule, color, alpha);
50
+ });
51
+
52
+ unistylesRuntime->setDisableAnimatedInsetsAndroidCallback([=]() {
53
+ disableAnimatedInsets(env, unistylesModule);
54
+ });
55
+
56
+ Screen screen = getScreenDimensions(env, unistylesModule);
57
+
58
+ unistylesRuntime->screen = Dimensions{screen.width, screen.height};
59
+ unistylesRuntime->contentSizeCategory = getContentSizeCategory(env, unistylesModule);
60
+ unistylesRuntime->colorScheme = getColorScheme(env, unistylesModule);
61
+ unistylesRuntime->statusBar = getStatusBarDimensions(env, unistylesModule);
62
+ unistylesRuntime->insets = getInsets(env, unistylesModule);
63
+ unistylesRuntime->navigationBar = getNavigationBarDimensions(env, unistylesModule);
64
+ unistylesRuntime->fontScale = screen.fontScale;
65
+ unistylesRuntime->pixelRatio = screen.pixelRatio;
66
+ unistylesRuntime->rtl = getIsRTL(env, unistylesModule);
67
+ }
68
+
69
+ void disableAnimatedInsets(JNIEnv *env, jobject unistylesModule) {
70
+ jclass cls = env->GetObjectClass(unistylesModule);
71
+ jfieldID platformFieldId = env->GetFieldID(cls, "platform", "Lcom/unistyles/Platform;");
72
+ jobject platformInstance = env->GetObjectField(unistylesModule, platformFieldId);
73
+ jclass platformClass = env->GetObjectClass(platformInstance);
74
+ jmethodID methodId = env->GetMethodID(platformClass, "disableAnimatedInsets", "()V");
75
+
76
+ env->CallVoidMethod(platformInstance, methodId);
77
+
78
+ env->DeleteLocalRef(cls);
79
+ env->DeleteLocalRef(platformInstance);
80
+ env->DeleteLocalRef(platformClass);
81
+ }
82
+
83
+ Screen getScreenDimensions(JNIEnv *env, jobject unistylesModule) {
84
+ jobject result = JNI_callPlatform(env, unistylesModule, "getScreenDimensions", "()Lcom/unistyles/Screen;");
85
+ Screen screenDimensions = jobjectToScreen(env, result);
86
+
87
+ return screenDimensions;
88
+ }
89
+
90
+ std::string getColorScheme(JNIEnv *env, jobject unistylesModule) {
91
+ jstring colorScheme = (jstring) JNI_callPlatform(env, unistylesModule, "getColorScheme", "()Ljava/lang/String;");
92
+ const char *colorSchemeChars = env->GetStringUTFChars(colorScheme, nullptr);
93
+ std::string colorSchemeStr = std::string(colorSchemeChars);
94
+
95
+ env->ReleaseStringUTFChars(colorScheme, colorSchemeChars);
96
+ env->DeleteLocalRef(colorScheme);
97
+
98
+ return colorSchemeStr;
99
+ }
100
+
101
+ bool getIsRTL(JNIEnv *env, jobject unistylesModule) {
102
+ jclass cls = env->GetObjectClass(unistylesModule);
103
+ jfieldID platformFieldId = env->GetFieldID(cls, "platform", "Lcom/unistyles/Platform;");
104
+ jobject platformInstance = env->GetObjectField(unistylesModule, platformFieldId);
105
+ jclass platformClass = env->GetObjectClass(platformInstance);
106
+ jmethodID methodId = env->GetMethodID(platformClass, "getIsRTL", "()Z");
107
+ jboolean result = env->CallBooleanMethod(platformInstance, methodId);
108
+
109
+ env->DeleteLocalRef(cls);
110
+ env->DeleteLocalRef(platformInstance);
111
+ env->DeleteLocalRef(platformClass);
112
+
113
+ return result;
114
+ }
115
+
116
+ Dimensions getStatusBarDimensions(JNIEnv *env, jobject unistylesModule) {
117
+ jobject dimensionsObj = JNI_callPlatform(env, unistylesModule, "getStatusBarDimensions", "()Lcom/unistyles/Dimensions;");
118
+ Dimensions statusBarDimensions = jobjectToDimensions(env, dimensionsObj);
119
+
120
+ return statusBarDimensions;
121
+ }
122
+
123
+ Dimensions getNavigationBarDimensions(JNIEnv *env, jobject unistylesModule) {
124
+ jobject dimensionsObj = JNI_callPlatform(env, unistylesModule, "getNavigationBarDimensions", "()Lcom/unistyles/Dimensions;");
125
+ Dimensions navigationBarDimensions = jobjectToDimensions(env, dimensionsObj);
126
+
127
+ return navigationBarDimensions;
128
+ }
129
+
130
+ Insets getInsets(JNIEnv *env, jobject unistylesModule) {
131
+ jobject insetsObj = JNI_callPlatform(env, unistylesModule, "getInsets", "()Lcom/unistyles/Insets;");
132
+ Insets insets = jobjectToInsets(env, insetsObj);
133
+
134
+ return insets;
135
+ }
136
+
137
+ std::string getContentSizeCategory(JNIEnv *env, jobject unistylesModule) {
138
+ jstring contentSizeCategory = (jstring) JNI_callPlatform(env, unistylesModule, "getContentSizeCategory", "()Ljava/lang/String;");
139
+ const char *contentSizeCategoryChars = env->GetStringUTFChars(contentSizeCategory, nullptr);
140
+ std::string contentSizeCategoryStr = std::string(contentSizeCategoryChars);
141
+
142
+ env->ReleaseStringUTFChars(contentSizeCategory, contentSizeCategoryChars);
143
+ env->DeleteLocalRef(contentSizeCategory);
144
+
145
+ return contentSizeCategoryStr;
146
+ }
147
+
148
+ void setStatusBarColor(JNIEnv *env, jobject unistylesModule, std::string color, float alpha) {
149
+ JNI_callPlatformWithColor(env, unistylesModule, "onSetStatusBarColor", "(Ljava/lang/String;F)V", color, alpha);
150
+ }
151
+
152
+ void setNavigationBarColor(JNIEnv *env, jobject unistylesModule, std::string color, float alpha) {
153
+ JNI_callPlatformWithColor(env, unistylesModule, "onSetNavigationBarColor", "(Ljava/lang/String;F)V", color, alpha);
154
+ }
155
+
156
+ void setNavigationBarHidden(JNIEnv *env, jobject unistylesModule, bool hidden) {
157
+ JNI_callPlatformWithBool(env, unistylesModule, "onSetNavigationBarHidden", "(Z)V", hidden);
158
+ }
159
+
160
+ void setStatusBarHidden(JNIEnv *env, jobject unistylesModule, bool hidden) {
161
+ JNI_callPlatformWithBool(env, unistylesModule, "onSetStatusBarHidden", "(Z)V", hidden);
162
+ }
163
+
164
+ void setImmersiveMode(JNIEnv *env, jobject unistylesModule, bool enabled) {
165
+ JNI_callPlatformWithBool(env, unistylesModule, "onSetImmersiveMode", "(Z)V", enabled);
166
+ }
167
+
168
+ void setRootViewBackgroundColor(JNIEnv *env, jobject unistylesModule, std::string color, float alpha) {
169
+ JNI_callPlatformWithColor(env, unistylesModule, "onSetRootViewBackgroundColor", "(Ljava/lang/String;F)V", color, alpha);
170
+ }
@@ -0,0 +1,20 @@
1
+ #pragma once
2
+
3
+ #include "UnistylesRuntime.h"
4
+ #include "helpers.h"
5
+
6
+ void makeShared(JNIEnv *env, jobject unistylesModule, std::shared_ptr<UnistylesRuntime> unistylesRuntime);
7
+ Screen getScreenDimensions(JNIEnv *env, jobject unistylesModule);
8
+ std::string getColorScheme(JNIEnv *env, jobject unistylesModule);
9
+ Dimensions getStatusBarDimensions(JNIEnv *env, jobject unistylesModule);
10
+ Dimensions getNavigationBarDimensions(JNIEnv *env, jobject unistylesModule);
11
+ void setNavigationBarHidden(JNIEnv *env, jobject unistylesModule, bool hidden);
12
+ void setStatusBarHidden(JNIEnv *env, jobject unistylesModule, bool hidden);
13
+ void setImmersiveMode(JNIEnv *env, jobject unistylesModule, bool hidden);
14
+ void setRootViewBackgroundColor(JNIEnv *env, jobject unistylesModule, std::string color, float alpha);
15
+ Insets getInsets(JNIEnv *env, jobject unistylesModule);
16
+ bool getIsRTL(JNIEnv *env, jobject unistylesModule);
17
+ std::string getContentSizeCategory(JNIEnv *env, jobject unistylesModule);
18
+ void setNavigationBarColor(JNIEnv *env, jobject unistylesModule, std::string color, float alpha);
19
+ void setStatusBarColor(JNIEnv *env, jobject unistylesModule, std::string color, float alpha);
20
+ void disableAnimatedInsets(JNIEnv *env, jobject unistylesModule);