react-native-unistyles 3.0.0-beta.7 → 3.0.0-experimental-2025051401

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 (390) hide show
  1. package/README.md +41 -19
  2. package/Unistyles.podspec +1 -0
  3. package/android/CMakeLists.txt +2 -1
  4. package/android/src/main/cxx/NativeUnistylesModule.cpp +3 -7
  5. package/android/src/main/cxx/NativeUnistylesModule.h +0 -4
  6. package/android/src/main/java/com/unistyles/NativePlatform+android.kt +5 -1
  7. package/android/src/main/java/com/unistyles/NativePlatform+insets.kt +11 -4
  8. package/android/src/main/java/com/unistyles/NativePlatform+listener.kt +1 -1
  9. package/android/src/main/java/com/unistyles/UnistylesModule.kt +1 -7
  10. package/components/native/ActivityIndicator/package.json +1 -0
  11. package/components/native/Animated/package.json +1 -0
  12. package/components/native/FlatList/package.json +1 -0
  13. package/components/native/Image/package.json +2 -1
  14. package/components/native/ImageBackground/package.json +1 -0
  15. package/components/native/KeyboardAvoidingView/package.json +1 -0
  16. package/components/native/NativeText/package.json +1 -0
  17. package/components/native/NativeView/package.json +1 -0
  18. package/components/native/Pressable/package.json +1 -0
  19. package/components/native/RefreshControl/package.json +1 -0
  20. package/components/native/ScrollView/package.json +1 -0
  21. package/components/native/SectionList/package.json +1 -0
  22. package/components/native/Switch/package.json +1 -0
  23. package/components/native/Text/package.json +1 -0
  24. package/components/native/TextInput/package.json +1 -0
  25. package/components/native/TouchableHighlight/package.json +1 -0
  26. package/components/native/TouchableOpacity/package.json +1 -0
  27. package/components/native/View/package.json +1 -0
  28. package/components/native/VirtualizedList/package.json +1 -0
  29. package/cxx/common/Helpers.h +89 -0
  30. package/cxx/core/HostUnistyle.cpp +14 -5
  31. package/cxx/core/StyleSheet.h +1 -1
  32. package/cxx/core/UnistyleWrapper.h +1 -1
  33. package/cxx/core/UnistylesCommitShadowNode.h +0 -21
  34. package/cxx/core/UnistylesRegistry.cpp +74 -69
  35. package/cxx/core/UnistylesRegistry.h +1 -1
  36. package/cxx/hybridObjects/HybridShadowRegistry.cpp +2 -5
  37. package/cxx/hybridObjects/HybridStyleSheet.cpp +10 -19
  38. package/cxx/hybridObjects/HybridStyleSheet.h +3 -8
  39. package/cxx/hybridObjects/HybridUnistylesRuntime.cpp +5 -1
  40. package/cxx/parser/Parser.cpp +200 -89
  41. package/cxx/parser/Parser.h +1 -1
  42. package/cxx/shadowTree/ShadowTrafficController.h +13 -9
  43. package/cxx/shadowTree/ShadowTreeManager.cpp +64 -59
  44. package/cxx/shadowTree/ShadowTreeManager.h +0 -1
  45. package/ios/NativePlatform+ios.swift +1 -1
  46. package/ios/NativePlatformListener+ios.swift +12 -7
  47. package/ios/UnistylesModuleOnLoad.h +1 -5
  48. package/ios/UnistylesModuleOnLoad.mm +5 -13
  49. package/lib/commonjs/components/native/Image.js +27 -1
  50. package/lib/commonjs/components/native/Image.js.map +1 -1
  51. package/lib/commonjs/components/native/Image.native.js +10 -0
  52. package/lib/commonjs/components/native/Image.native.js.map +1 -0
  53. package/lib/commonjs/components/native/ImageBackground.js +21 -36
  54. package/lib/commonjs/components/native/ImageBackground.js.map +1 -1
  55. package/lib/commonjs/components/native/Pressable.native.js +16 -2
  56. package/lib/commonjs/components/native/Pressable.native.js.map +1 -1
  57. package/lib/commonjs/core/createUnistylesElement.js +17 -21
  58. package/lib/commonjs/core/createUnistylesElement.js.map +1 -1
  59. package/lib/commonjs/core/createUnistylesElement.native.js +7 -1
  60. package/lib/commonjs/core/createUnistylesElement.native.js.map +1 -1
  61. package/lib/commonjs/core/createUnistylesImageBackground.js +10 -4
  62. package/lib/commonjs/core/createUnistylesImageBackground.js.map +1 -1
  63. package/lib/commonjs/core/getClassname.js +11 -5
  64. package/lib/commonjs/core/getClassname.js.map +1 -1
  65. package/lib/commonjs/core/passForwardRef.js +3 -5
  66. package/lib/commonjs/core/passForwardRef.js.map +1 -1
  67. package/lib/commonjs/core/useProxifiedUnistyles/listener.js +5 -3
  68. package/lib/commonjs/core/useProxifiedUnistyles/listener.js.map +1 -1
  69. package/lib/commonjs/core/useProxifiedUnistyles/useProxifiedUnistyles.js +15 -2
  70. package/lib/commonjs/core/useProxifiedUnistyles/useProxifiedUnistyles.js.map +1 -1
  71. package/lib/commonjs/core/withUnistyles/withUnistyles.js +14 -5
  72. package/lib/commonjs/core/withUnistyles/withUnistyles.js.map +1 -1
  73. package/lib/commonjs/core/withUnistyles/withUnistyles.native.js +14 -7
  74. package/lib/commonjs/core/withUnistyles/withUnistyles.native.js.map +1 -1
  75. package/lib/commonjs/hooks/useMedia.js +4 -4
  76. package/lib/commonjs/hooks/useMedia.js.map +1 -1
  77. package/lib/commonjs/hooks/useMedia.native.js +4 -4
  78. package/lib/commonjs/hooks/useMedia.native.js.map +1 -1
  79. package/lib/commonjs/mocks.js +203 -0
  80. package/lib/commonjs/mocks.js.map +1 -0
  81. package/lib/commonjs/mq.js +1 -23
  82. package/lib/commonjs/mq.js.map +1 -1
  83. package/lib/commonjs/reanimated/index.js +13 -0
  84. package/lib/commonjs/reanimated/index.js.map +1 -0
  85. package/lib/commonjs/reanimated/useAnimatedTheme.js +22 -0
  86. package/lib/commonjs/reanimated/useAnimatedTheme.js.map +1 -0
  87. package/lib/commonjs/reanimated/useAnimatedTheme.native.js +24 -0
  88. package/lib/commonjs/reanimated/useAnimatedTheme.native.js.map +1 -0
  89. package/lib/commonjs/server/getServerUnistyles.js +9 -4
  90. package/lib/commonjs/server/getServerUnistyles.js.map +1 -1
  91. package/lib/commonjs/server/hydrateServerUnistyles.js +4 -2
  92. package/lib/commonjs/server/hydrateServerUnistyles.js.map +1 -1
  93. package/lib/commonjs/server/resetServerUnistyles.js +4 -2
  94. package/lib/commonjs/server/resetServerUnistyles.js.map +1 -1
  95. package/lib/commonjs/server/serialize.js +24 -0
  96. package/lib/commonjs/server/serialize.js.map +1 -0
  97. package/lib/commonjs/specs/NativePlatform/NativePlatform.nitro.js +1 -0
  98. package/lib/commonjs/specs/NativePlatform/NativePlatform.nitro.js.map +1 -1
  99. package/lib/commonjs/specs/ShadowRegistry/index.js +2 -2
  100. package/lib/commonjs/specs/ShadowRegistry/index.js.map +1 -1
  101. package/lib/commonjs/utils.js +23 -1
  102. package/lib/commonjs/utils.js.map +1 -1
  103. package/lib/commonjs/web/convert/index.js +4 -7
  104. package/lib/commonjs/web/convert/index.js.map +1 -1
  105. package/lib/commonjs/web/convert/object/filter.js +7 -8
  106. package/lib/commonjs/web/convert/object/filter.js.map +1 -1
  107. package/lib/commonjs/web/create.js +10 -2
  108. package/lib/commonjs/web/create.js.map +1 -1
  109. package/lib/commonjs/web/css/core.js +2 -2
  110. package/lib/commonjs/web/css/core.js.map +1 -1
  111. package/lib/commonjs/web/css/state.js +6 -3
  112. package/lib/commonjs/web/css/state.js.map +1 -1
  113. package/lib/commonjs/web/index.js +7 -12
  114. package/lib/commonjs/web/index.js.map +1 -1
  115. package/lib/commonjs/web/registry.js +11 -9
  116. package/lib/commonjs/web/registry.js.map +1 -1
  117. package/lib/commonjs/web/runtime.js +5 -1
  118. package/lib/commonjs/web/runtime.js.map +1 -1
  119. package/lib/commonjs/web/services.js +7 -2
  120. package/lib/commonjs/web/services.js.map +1 -1
  121. package/lib/commonjs/web/shadowRegistry.js +27 -10
  122. package/lib/commonjs/web/shadowRegistry.js.map +1 -1
  123. package/lib/commonjs/web/state.js +11 -2
  124. package/lib/commonjs/web/state.js.map +1 -1
  125. package/lib/commonjs/web/types.js +2 -0
  126. package/lib/commonjs/web/types.js.map +1 -1
  127. package/lib/commonjs/web/utils/createUnistylesRef.js +31 -0
  128. package/lib/commonjs/web/utils/createUnistylesRef.js.map +1 -0
  129. package/lib/commonjs/web/utils/unistyle.js +40 -14
  130. package/lib/commonjs/web/utils/unistyle.js.map +1 -1
  131. package/lib/commonjs/web-only/getWebProps.js +19 -0
  132. package/lib/commonjs/web-only/getWebProps.js.map +1 -0
  133. package/lib/commonjs/web-only/index.js +13 -0
  134. package/lib/commonjs/web-only/index.js.map +1 -0
  135. package/lib/module/components/native/Image.js +26 -2
  136. package/lib/module/components/native/Image.js.map +1 -1
  137. package/lib/module/components/native/Image.native.js +6 -0
  138. package/lib/module/components/native/Image.native.js.map +1 -0
  139. package/lib/module/components/native/ImageBackground.js +22 -37
  140. package/lib/module/components/native/ImageBackground.js.map +1 -1
  141. package/lib/module/components/native/Pressable.native.js +16 -2
  142. package/lib/module/components/native/Pressable.native.js.map +1 -1
  143. package/lib/module/core/createUnistylesElement.js +17 -21
  144. package/lib/module/core/createUnistylesElement.js.map +1 -1
  145. package/lib/module/core/createUnistylesElement.native.js +7 -1
  146. package/lib/module/core/createUnistylesElement.native.js.map +1 -1
  147. package/lib/module/core/createUnistylesImageBackground.js +10 -4
  148. package/lib/module/core/createUnistylesImageBackground.js.map +1 -1
  149. package/lib/module/core/getClassname.js +9 -5
  150. package/lib/module/core/getClassname.js.map +1 -1
  151. package/lib/module/core/passForwardRef.js +3 -5
  152. package/lib/module/core/passForwardRef.js.map +1 -1
  153. package/lib/module/core/useProxifiedUnistyles/listener.js +3 -3
  154. package/lib/module/core/useProxifiedUnistyles/listener.js.map +1 -1
  155. package/lib/module/core/useProxifiedUnistyles/useProxifiedUnistyles.js +15 -2
  156. package/lib/module/core/useProxifiedUnistyles/useProxifiedUnistyles.js.map +1 -1
  157. package/lib/module/core/withUnistyles/withUnistyles.js +14 -5
  158. package/lib/module/core/withUnistyles/withUnistyles.js.map +1 -1
  159. package/lib/module/core/withUnistyles/withUnistyles.native.js +14 -7
  160. package/lib/module/core/withUnistyles/withUnistyles.native.js.map +1 -1
  161. package/lib/module/hooks/useMedia.js +1 -1
  162. package/lib/module/hooks/useMedia.js.map +1 -1
  163. package/lib/module/hooks/useMedia.native.js +1 -1
  164. package/lib/module/hooks/useMedia.native.js.map +1 -1
  165. package/lib/module/mocks.js +201 -0
  166. package/lib/module/mocks.js.map +1 -0
  167. package/lib/module/mq.js +0 -19
  168. package/lib/module/mq.js.map +1 -1
  169. package/lib/module/reanimated/index.js +4 -0
  170. package/lib/module/reanimated/index.js.map +1 -0
  171. package/lib/module/reanimated/useAnimatedTheme.js +17 -0
  172. package/lib/module/reanimated/useAnimatedTheme.js.map +1 -0
  173. package/lib/module/reanimated/useAnimatedTheme.native.js +19 -0
  174. package/lib/module/reanimated/useAnimatedTheme.native.js.map +1 -0
  175. package/lib/module/server/getServerUnistyles.js +7 -4
  176. package/lib/module/server/getServerUnistyles.js.map +1 -1
  177. package/lib/module/server/hydrateServerUnistyles.js +2 -2
  178. package/lib/module/server/hydrateServerUnistyles.js.map +1 -1
  179. package/lib/module/server/resetServerUnistyles.js +2 -2
  180. package/lib/module/server/resetServerUnistyles.js.map +1 -1
  181. package/lib/module/server/serialize.js +19 -0
  182. package/lib/module/server/serialize.js.map +1 -0
  183. package/lib/module/specs/NativePlatform/NativePlatform.nitro.js +1 -0
  184. package/lib/module/specs/NativePlatform/NativePlatform.nitro.js.map +1 -1
  185. package/lib/module/specs/ShadowRegistry/index.js +2 -2
  186. package/lib/module/specs/ShadowRegistry/index.js.map +1 -1
  187. package/lib/module/utils.js +19 -0
  188. package/lib/module/utils.js.map +1 -1
  189. package/lib/module/web/convert/index.js +4 -7
  190. package/lib/module/web/convert/index.js.map +1 -1
  191. package/lib/module/web/convert/object/filter.js +3 -4
  192. package/lib/module/web/convert/object/filter.js.map +1 -1
  193. package/lib/module/web/create.js +9 -3
  194. package/lib/module/web/create.js.map +1 -1
  195. package/lib/module/web/css/core.js +2 -2
  196. package/lib/module/web/css/core.js.map +1 -1
  197. package/lib/module/web/css/state.js +6 -3
  198. package/lib/module/web/css/state.js.map +1 -1
  199. package/lib/module/web/index.js +4 -10
  200. package/lib/module/web/index.js.map +1 -1
  201. package/lib/module/web/registry.js +11 -9
  202. package/lib/module/web/registry.js.map +1 -1
  203. package/lib/module/web/runtime.js +5 -1
  204. package/lib/module/web/runtime.js.map +1 -1
  205. package/lib/module/web/services.js +7 -1
  206. package/lib/module/web/services.js.map +1 -1
  207. package/lib/module/web/shadowRegistry.js +27 -10
  208. package/lib/module/web/shadowRegistry.js.map +1 -1
  209. package/lib/module/web/state.js +11 -2
  210. package/lib/module/web/state.js.map +1 -1
  211. package/lib/module/web/types.js +1 -1
  212. package/lib/module/web/types.js.map +1 -1
  213. package/lib/module/web/utils/createUnistylesRef.js +24 -0
  214. package/lib/module/web/utils/createUnistylesRef.js.map +1 -0
  215. package/lib/module/web/utils/unistyle.js +32 -10
  216. package/lib/module/web/utils/unistyle.js.map +1 -1
  217. package/lib/module/web-only/getWebProps.js +14 -0
  218. package/lib/module/web-only/getWebProps.js.map +1 -0
  219. package/lib/module/web-only/index.js +4 -0
  220. package/lib/module/web-only/index.js.map +1 -0
  221. package/lib/typescript/src/components/native/Animated.d.ts.map +1 -1
  222. package/lib/typescript/src/components/native/Image.d.ts.map +1 -1
  223. package/lib/typescript/src/components/native/Image.native.d.ts +2 -0
  224. package/lib/typescript/src/components/native/Image.native.d.ts.map +1 -0
  225. package/lib/typescript/src/components/native/ImageBackground.d.ts.map +1 -1
  226. package/lib/typescript/src/components/native/Pressable.native.d.ts.map +1 -1
  227. package/lib/typescript/src/core/createUnistylesElement.d.ts.map +1 -1
  228. package/lib/typescript/src/core/createUnistylesElement.native.d.ts.map +1 -1
  229. package/lib/typescript/src/core/createUnistylesImageBackground.d.ts.map +1 -1
  230. package/lib/typescript/src/core/getClassname.d.ts +5 -5
  231. package/lib/typescript/src/core/getClassname.d.ts.map +1 -1
  232. package/lib/typescript/src/core/passForwardRef.d.ts +1 -1
  233. package/lib/typescript/src/core/passForwardRef.d.ts.map +1 -1
  234. package/lib/typescript/src/core/useProxifiedUnistyles/listener.d.ts.map +1 -1
  235. package/lib/typescript/src/core/useProxifiedUnistyles/listener.native.d.ts.map +1 -1
  236. package/lib/typescript/src/core/useProxifiedUnistyles/useProxifiedUnistyles.d.ts.map +1 -1
  237. package/lib/typescript/src/core/warn.d.ts.map +1 -1
  238. package/lib/typescript/src/core/withUnistyles/withUnistyles.d.ts +1 -1
  239. package/lib/typescript/src/core/withUnistyles/withUnistyles.d.ts.map +1 -1
  240. package/lib/typescript/src/core/withUnistyles/withUnistyles.native.d.ts +1 -3
  241. package/lib/typescript/src/core/withUnistyles/withUnistyles.native.d.ts.map +1 -1
  242. package/lib/typescript/src/hooks/useMedia.d.ts.map +1 -1
  243. package/lib/typescript/src/hooks/useMedia.native.d.ts.map +1 -1
  244. package/lib/typescript/src/mocks.d.ts +2 -0
  245. package/lib/typescript/src/mocks.d.ts.map +1 -0
  246. package/lib/typescript/src/mq.d.ts +0 -8
  247. package/lib/typescript/src/mq.d.ts.map +1 -1
  248. package/lib/typescript/src/reanimated/index.d.ts +2 -0
  249. package/lib/typescript/src/reanimated/index.d.ts.map +1 -0
  250. package/lib/typescript/src/reanimated/useAnimatedTheme.d.ts +4 -0
  251. package/lib/typescript/src/reanimated/useAnimatedTheme.d.ts.map +1 -0
  252. package/lib/typescript/src/reanimated/useAnimatedTheme.native.d.ts +4 -0
  253. package/lib/typescript/src/reanimated/useAnimatedTheme.native.d.ts.map +1 -0
  254. package/lib/typescript/src/server/getServerUnistyles.d.ts.map +1 -1
  255. package/lib/typescript/src/server/hydrateServerUnistyles.d.ts +0 -1
  256. package/lib/typescript/src/server/hydrateServerUnistyles.d.ts.map +1 -1
  257. package/lib/typescript/src/server/resetServerUnistyles.d.ts.map +1 -1
  258. package/lib/typescript/src/server/serialize.d.ts +2 -0
  259. package/lib/typescript/src/server/serialize.d.ts.map +1 -0
  260. package/lib/typescript/src/server/useServerUnistyles.d.ts.map +1 -1
  261. package/lib/typescript/src/specs/NativePlatform/NativePlatform.nitro.d.ts +2 -1
  262. package/lib/typescript/src/specs/NativePlatform/NativePlatform.nitro.d.ts.map +1 -1
  263. package/lib/typescript/src/specs/StatusBar/index.d.ts.map +1 -1
  264. package/lib/typescript/src/types/common.d.ts +0 -1
  265. package/lib/typescript/src/types/common.d.ts.map +1 -1
  266. package/lib/typescript/src/types/stylesheet.d.ts +1 -1
  267. package/lib/typescript/src/types/stylesheet.d.ts.map +1 -1
  268. package/lib/typescript/src/utils.d.ts +8 -0
  269. package/lib/typescript/src/utils.d.ts.map +1 -1
  270. package/lib/typescript/src/web/convert/index.d.ts +2 -1
  271. package/lib/typescript/src/web/convert/index.d.ts.map +1 -1
  272. package/lib/typescript/src/web/convert/object/boxShadow.d.ts.map +1 -1
  273. package/lib/typescript/src/web/convert/object/filter.d.ts +2 -1
  274. package/lib/typescript/src/web/convert/object/filter.d.ts.map +1 -1
  275. package/lib/typescript/src/web/convert/object/objectStyle.d.ts.map +1 -1
  276. package/lib/typescript/src/web/convert/object/transform.d.ts.map +1 -1
  277. package/lib/typescript/src/web/convert/pseudo.d.ts.map +1 -1
  278. package/lib/typescript/src/web/convert/shadow/boxShadow.d.ts.map +1 -1
  279. package/lib/typescript/src/web/convert/shadow/getShadowBreakpoints.d.ts.map +1 -1
  280. package/lib/typescript/src/web/convert/shadow/textShadow.d.ts.map +1 -1
  281. package/lib/typescript/src/web/convert/style.d.ts.map +1 -1
  282. package/lib/typescript/src/web/convert/utils.d.ts.map +1 -1
  283. package/lib/typescript/src/web/create.d.ts.map +1 -1
  284. package/lib/typescript/src/web/css/core.d.ts.map +1 -1
  285. package/lib/typescript/src/web/css/state.d.ts +4 -1
  286. package/lib/typescript/src/web/css/state.d.ts.map +1 -1
  287. package/lib/typescript/src/web/css/utils.d.ts.map +1 -1
  288. package/lib/typescript/src/web/index.d.ts +0 -5
  289. package/lib/typescript/src/web/index.d.ts.map +1 -1
  290. package/lib/typescript/src/web/listener.d.ts.map +1 -1
  291. package/lib/typescript/src/web/registry.d.ts +2 -2
  292. package/lib/typescript/src/web/registry.d.ts.map +1 -1
  293. package/lib/typescript/src/web/runtime.d.ts.map +1 -1
  294. package/lib/typescript/src/web/services.d.ts +6 -1
  295. package/lib/typescript/src/web/services.d.ts.map +1 -1
  296. package/lib/typescript/src/web/shadowRegistry.d.ts +2 -2
  297. package/lib/typescript/src/web/shadowRegistry.d.ts.map +1 -1
  298. package/lib/typescript/src/web/state.d.ts +2 -0
  299. package/lib/typescript/src/web/state.d.ts.map +1 -1
  300. package/lib/typescript/src/web/types.d.ts +3 -0
  301. package/lib/typescript/src/web/types.d.ts.map +1 -1
  302. package/lib/typescript/src/web/utils/common.d.ts.map +1 -1
  303. package/lib/typescript/src/web/utils/createUnistylesRef.d.ts +11 -0
  304. package/lib/typescript/src/web/utils/createUnistylesRef.d.ts.map +1 -0
  305. package/lib/typescript/src/web/utils/unistyle.d.ts +5 -2
  306. package/lib/typescript/src/web/utils/unistyle.d.ts.map +1 -1
  307. package/lib/typescript/src/web/variants.d.ts.map +1 -1
  308. package/lib/typescript/src/web-only/getWebProps.d.ts +7 -0
  309. package/lib/typescript/src/web-only/getWebProps.d.ts.map +1 -0
  310. package/lib/typescript/src/web-only/index.d.ts +2 -0
  311. package/lib/typescript/src/web-only/index.d.ts.map +1 -0
  312. package/nitrogen/generated/android/c++/JFunc_void_UnistylesNativeMiniRuntime.hpp +2 -2
  313. package/nitrogen/generated/android/c++/JFunc_void_std__vector_UnistyleDependency__UnistylesNativeMiniRuntime.hpp +2 -2
  314. package/nitrogen/generated/android/c++/JHybridNativePlatformSpec.cpp +19 -19
  315. package/nitrogen/generated/android/c++/JUnistyleDependency.hpp +3 -0
  316. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/Func_void_UnistylesNativeMiniRuntime.kt +7 -2
  317. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/Func_void_std__vector_UnistyleDependency__UnistylesNativeMiniRuntime.kt +7 -2
  318. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/HybridNativePlatformSpec.kt +22 -22
  319. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/UnistyleDependency.kt +2 -1
  320. package/nitrogen/generated/android/unistyles+autolinking.cmake +16 -0
  321. package/nitrogen/generated/ios/Unistyles-Swift-Cxx-Umbrella.hpp +0 -1
  322. package/nitrogen/generated/ios/swift/UnistyleDependency.swift +4 -0
  323. package/nitrogen/generated/shared/c++/Dimensions.hpp +1 -0
  324. package/nitrogen/generated/shared/c++/Insets.hpp +1 -0
  325. package/nitrogen/generated/shared/c++/UnistyleDependency.hpp +2 -1
  326. package/nitrogen/generated/shared/c++/UnistylesCxxMiniRuntime.hpp +1 -0
  327. package/nitrogen/generated/shared/c++/UnistylesNativeMiniRuntime.hpp +1 -0
  328. package/package.json +77 -33
  329. package/plugin/index.d.ts +51 -18
  330. package/plugin/index.js +878 -177
  331. package/reanimated/package.json +6 -0
  332. package/server/package.json +6 -0
  333. package/src/components/native/Image.native.tsx +4 -0
  334. package/src/components/native/Image.tsx +36 -3
  335. package/src/components/native/ImageBackground.tsx +20 -36
  336. package/src/components/native/Pressable.native.tsx +25 -2
  337. package/src/core/createUnistylesElement.native.tsx +13 -2
  338. package/src/core/createUnistylesElement.tsx +26 -27
  339. package/src/core/createUnistylesImageBackground.tsx +16 -5
  340. package/src/core/getClassname.ts +16 -5
  341. package/src/core/passForwardRef.ts +5 -5
  342. package/src/core/useProxifiedUnistyles/listener.ts +3 -3
  343. package/src/core/useProxifiedUnistyles/useProxifiedUnistyles.ts +18 -1
  344. package/src/core/withUnistyles/withUnistyles.native.tsx +42 -17
  345. package/src/core/withUnistyles/withUnistyles.tsx +23 -6
  346. package/src/hooks/useMedia.native.ts +1 -1
  347. package/src/hooks/useMedia.ts +1 -1
  348. package/src/mocks.ts +217 -0
  349. package/src/mq.ts +0 -24
  350. package/src/reanimated/index.ts +1 -0
  351. package/src/reanimated/useAnimatedTheme.native.ts +21 -0
  352. package/src/reanimated/useAnimatedTheme.ts +19 -0
  353. package/src/server/getServerUnistyles.tsx +15 -10
  354. package/src/server/hydrateServerUnistyles.ts +3 -2
  355. package/src/server/resetServerUnistyles.ts +4 -3
  356. package/src/server/serialize.ts +20 -0
  357. package/src/specs/NativePlatform/NativePlatform.nitro.ts +2 -1
  358. package/src/specs/ShadowRegistry/index.ts +2 -2
  359. package/src/types/common.ts +0 -1
  360. package/src/types/stylesheet.ts +1 -1
  361. package/src/utils.ts +25 -0
  362. package/src/web/convert/index.ts +5 -7
  363. package/src/web/convert/object/filter.ts +4 -4
  364. package/src/web/create.ts +10 -3
  365. package/src/web/css/core.ts +2 -2
  366. package/src/web/css/state.ts +5 -3
  367. package/src/web/index.ts +4 -16
  368. package/src/web/registry.ts +20 -11
  369. package/src/web/runtime.ts +6 -2
  370. package/src/web/services.ts +14 -1
  371. package/src/web/shadowRegistry.ts +35 -13
  372. package/src/web/state.ts +14 -2
  373. package/src/web/types.ts +9 -4
  374. package/src/web/utils/createUnistylesRef.ts +33 -0
  375. package/src/web/utils/unistyle.ts +55 -23
  376. package/src/web-only/getWebProps.ts +18 -0
  377. package/src/web-only/index.ts +2 -0
  378. package/web/package.json +6 -0
  379. package/cxx/core/UnistylesCommitHook.cpp +0 -49
  380. package/cxx/core/UnistylesCommitHook.h +0 -27
  381. package/cxx/core/UnistylesMountHook.cpp +0 -28
  382. package/cxx/core/UnistylesMountHook.h +0 -27
  383. package/lib/module/package.json +0 -1
  384. package/plugin/consts.js +0 -63
  385. package/plugin/exotic.js +0 -54
  386. package/plugin/import.js +0 -51
  387. package/plugin/ref.js +0 -11
  388. package/plugin/stylesheet.js +0 -565
  389. package/plugin/variants.js +0 -66
  390. /package/cxx/common/{Constants.h → UnistylesConstants.h} +0 -0
@@ -8,32 +8,11 @@ namespace margelo::nitro::unistyles::core {
8
8
  // React Native uses 0-10
9
9
  // Reanimated uses 27-28
10
10
  constexpr shadow::ShadowNodeTraits::Trait UnistylesCommitTrait{1 << 30};
11
- constexpr shadow::ShadowNodeTraits::Trait UnistylesMountTrait{1 << 31};
12
11
 
13
12
  struct UnistylesCommitShadowNode: public shadow::ShadowNode {
14
13
  inline void addUnistylesCommitTrait() {
15
14
  traits_.set(UnistylesCommitTrait);
16
15
  }
17
-
18
- inline void removeUnistylesCommitTrait() {
19
- traits_.unset(UnistylesCommitTrait);
20
- }
21
-
22
- inline bool hasUnistylesCommitTrait() {
23
- return traits_.check(UnistylesCommitTrait);
24
- }
25
-
26
- inline void addUnistylesMountTrait() {
27
- traits_.set(UnistylesMountTrait);
28
- }
29
-
30
- inline void removeUnistylesMountTrait() {
31
- traits_.unset(UnistylesMountTrait);
32
- }
33
-
34
- inline bool hasUnistylesMountTrait() {
35
- return traits_.check(UnistylesMountTrait);
36
- }
37
16
  };
38
17
 
39
18
  }
@@ -73,17 +73,19 @@ void core::UnistylesRegistry::linkShadowNodeWithUnistyle(
73
73
  const ShadowNodeFamily* shadowNodeFamily,
74
74
  std::vector<std::shared_ptr<UnistyleData>>& unistylesData
75
75
  ) {
76
- shadow::ShadowLeafUpdates updates;
77
- auto parser = parser::Parser(nullptr);
78
-
79
- std::for_each(unistylesData.begin(), unistylesData.end(), [this, &rt, shadowNodeFamily](std::shared_ptr<UnistyleData> unistyleData){
80
- this->_shadowRegistry[&rt][shadowNodeFamily].emplace_back(unistyleData);
76
+ this->trafficController.withLock([this, &rt, &unistylesData, shadowNodeFamily](){
77
+ shadow::ShadowLeafUpdates updates;
78
+ auto parser = parser::Parser(nullptr);
79
+
80
+ std::for_each(unistylesData.begin(), unistylesData.end(), [this, &rt, shadowNodeFamily](std::shared_ptr<UnistyleData> unistyleData){
81
+ this->_shadowRegistry[&rt][shadowNodeFamily].emplace_back(unistyleData);
82
+ });
83
+
84
+ updates[shadowNodeFamily] = parser.parseStylesToShadowTreeStyles(rt, unistylesData);
85
+
86
+ this->trafficController.setUpdates(updates);
87
+ this->trafficController.resumeUnistylesTraffic();
81
88
  });
82
-
83
- updates[shadowNodeFamily] = parser.parseStylesToShadowTreeStyles(rt, unistylesData);
84
-
85
- this->trafficController.setUpdates(updates);
86
- this->trafficController.resumeUnistylesTraffic();
87
89
  }
88
90
 
89
91
  void core::UnistylesRegistry::removeDuplicatedUnistyles(jsi::Runtime& rt, const ShadowNodeFamily *shadowNodeFamily, std::vector<core::Unistyle::Shared>& unistyles) {
@@ -108,12 +110,14 @@ void core::UnistylesRegistry::removeDuplicatedUnistyles(jsi::Runtime& rt, const
108
110
  }
109
111
 
110
112
  void core::UnistylesRegistry::unlinkShadowNodeWithUnistyles(jsi::Runtime& rt, const ShadowNodeFamily* shadowNodeFamily) {
111
- this->_shadowRegistry[&rt].erase(shadowNodeFamily);
112
- this->trafficController.removeShadowNode(shadowNodeFamily);
113
+ this->trafficController.withLock([this, &rt, shadowNodeFamily](){
114
+ this->_shadowRegistry[&rt].erase(shadowNodeFamily);
115
+ this->trafficController.removeShadowNode(shadowNodeFamily);
113
116
 
114
- if (this->_shadowRegistry[&rt].empty()) {
115
- this->_shadowRegistry.erase(&rt);
116
- }
117
+ if (this->_shadowRegistry[&rt].empty()) {
118
+ this->_shadowRegistry.erase(&rt);
119
+ }
120
+ });
117
121
  }
118
122
 
119
123
  std::shared_ptr<core::StyleSheet> core::UnistylesRegistry::addStyleSheet(jsi::Runtime& rt, int unid, core::StyleSheetType type, jsi::Object&& rawValue) {
@@ -123,31 +127,36 @@ std::shared_ptr<core::StyleSheet> core::UnistylesRegistry::addStyleSheet(jsi::Ru
123
127
  }
124
128
 
125
129
  core::DependencyMap core::UnistylesRegistry::buildDependencyMap(jsi::Runtime& rt, std::vector<UnistyleDependency>& deps) {
126
- DependencyMap dependencyMap;
127
- std::set<UnistyleDependency> uniqueDependencies(deps.begin(), deps.end());
130
+ core::DependencyMap dependencyMap;
131
+
132
+ std::unordered_set<UnistyleDependency> uniqueDependencies(deps.begin(), deps.end());
128
133
 
129
134
  for (const auto& [family, unistyles] : this->_shadowRegistry[&rt]) {
135
+ bool hasAnyOfDependencies = false;
136
+
137
+ // Check if any dependency matches
130
138
  for (const auto& unistyleData : unistyles) {
131
- bool hasAnyOfDependencies = std::any_of(
132
- unistyleData->unistyle->dependencies.begin(),
133
- unistyleData->unistyle->dependencies.end(),
134
- [&uniqueDependencies](UnistyleDependency dep) {
135
- return std::find(uniqueDependencies.begin(), uniqueDependencies.end(), dep) != uniqueDependencies.end();
139
+ for (const auto& dep : unistyleData->unistyle->dependencies) {
140
+ if (uniqueDependencies.count(dep)) {
141
+ hasAnyOfDependencies = true;
142
+ break;
136
143
  }
137
- );
138
-
139
- if (!hasAnyOfDependencies) {
140
- continue;
141
- }
142
-
143
- // we need to take in count all unistyles from the shadowNode
144
- // as user might be using spreads and not all of them may have dependencies
145
- for (const auto& unistyleData : unistyles) {
146
- dependencyMap[family].emplace_back(unistyleData);
147
144
  }
145
+
146
+ if (hasAnyOfDependencies) {
147
+ break;
148
+ };
149
+ }
148
150
 
149
- break;
151
+ if (!hasAnyOfDependencies) {
152
+ continue;
150
153
  }
154
+
155
+ dependencyMap[family].insert(
156
+ dependencyMap[family].end(),
157
+ unistyles.begin(),
158
+ unistyles.end()
159
+ );
151
160
  }
152
161
 
153
162
  return dependencyMap;
@@ -157,56 +166,49 @@ core::DependencyMap core::UnistylesRegistry::buildDependencyMap(jsi::Runtime& rt
157
166
  // so we need to rebuild all instances as they may have different variants
158
167
  void core::UnistylesRegistry::shadowLeafUpdateFromUnistyle(jsi::Runtime& rt, Unistyle::Shared unistyle, jsi::Value& maybePressableId) {
159
168
  shadow::ShadowLeafUpdates updates;
160
- auto parser = parser::Parser(nullptr);
161
- std::optional<std::string> pressableId = maybePressableId.isString()
162
- ? std::make_optional(maybePressableId.asString(rt).utf8(rt))
163
- : std::nullopt;
169
+ this->trafficController.withLock([this, &rt, &maybePressableId, unistyle, &updates](){
170
+ auto parser = parser::Parser(nullptr);
171
+ std::optional<std::string> pressableId = maybePressableId.isString()
172
+ ? std::make_optional(maybePressableId.asString(rt).utf8(rt))
173
+ : std::nullopt;
164
174
 
165
- for (const auto& [family, unistyles] : this->_shadowRegistry[&rt]) {
166
- for (const auto& unistyleData : unistyles) {
167
- if (unistyleData->unistyle == unistyle) {
168
- updates[family] = parser.parseStylesToShadowTreeStyles(rt, { unistyleData });
175
+ for (const auto& [family, unistyles] : this->_shadowRegistry[&rt]) {
176
+ for (const auto& unistyleData : unistyles) {
177
+ if (unistyleData->unistyle == unistyle) {
178
+ updates[family] = parser.parseStylesToShadowTreeStyles(rt, { unistyleData });
179
+ }
169
180
  }
170
181
  }
171
- }
172
182
 
173
- this->trafficController.setUpdates(updates);
183
+ this->trafficController.setUpdates(updates);
184
+ });
174
185
  }
175
186
 
176
- std::vector<std::shared_ptr<core::StyleSheet>> core::UnistylesRegistry::getStyleSheetsToRefresh(jsi::Runtime& rt, std::vector<UnistyleDependency>& unistylesDependencies) {
177
- std::vector<std::shared_ptr<core::StyleSheet>> stylesheetsToRefresh{};
178
- auto themeDidChangeIt = std::find(unistylesDependencies.begin(),
179
- unistylesDependencies.end(),
180
- UnistyleDependency::THEME);
181
- auto themeDidChange = themeDidChangeIt != unistylesDependencies.end();
182
- auto runtimeDidChange = (themeDidChange && unistylesDependencies.size() > 1) || unistylesDependencies.size() > 0;
187
+ std::vector<std::shared_ptr<core::StyleSheet>>core::UnistylesRegistry::getStyleSheetsToRefresh(jsi::Runtime& rt, std::vector<UnistyleDependency>& unistylesDependencies) {
188
+ std::vector<std::shared_ptr<core::StyleSheet>> stylesheetsToRefresh;
189
+ std::unordered_set<UnistyleDependency> depSet(
190
+ unistylesDependencies.begin(),
191
+ unistylesDependencies.end()
192
+ );
193
+
194
+ bool themeDidChange = depSet.count(UnistyleDependency::THEME) > 0;
195
+ bool runtimeDidChange = (themeDidChange && depSet.size() > 1) || !depSet.empty();
183
196
 
184
- // if nothing changed, skip further lookup
185
197
  if (!themeDidChange && !runtimeDidChange) {
186
198
  return stylesheetsToRefresh;
187
199
  }
188
200
 
189
201
  auto& styleSheets = this->_styleSheetRegistry[&rt];
190
202
 
191
- std::for_each(styleSheets.begin(), styleSheets.end(), [&](std::pair<int, std::shared_ptr<core::StyleSheet>> pair){
192
- auto& [_, styleSheet] = pair;
193
-
203
+ for (const auto& [_, styleSheet] : styleSheets) {
194
204
  if (styleSheet->type == StyleSheetType::ThemableWithMiniRuntime) {
195
- for (const auto& unistylePair: styleSheet->unistyles) {
196
- auto& [_, unistyle] = unistylePair;
197
-
198
- bool hasAnyOfDependencies = std::any_of(
199
- unistyle->dependencies.begin(),
200
- unistyle->dependencies.end(),
201
- [&unistylesDependencies](UnistyleDependency dep) {
202
- return std::find(unistylesDependencies.begin(), unistylesDependencies.end(), dep) != unistylesDependencies.end();
205
+ for (const auto& [__, unistyle] : styleSheet->unistyles) {
206
+ for (const auto& dep : unistyle->dependencies) {
207
+ if (depSet.count(dep)) {
208
+ stylesheetsToRefresh.emplace_back(styleSheet);
209
+
210
+ goto nextStyleSheet;
203
211
  }
204
- );
205
-
206
- if (hasAnyOfDependencies) {
207
- stylesheetsToRefresh.emplace_back(styleSheet);
208
-
209
- return;
210
212
  }
211
213
  }
212
214
  }
@@ -214,11 +216,14 @@ std::vector<std::shared_ptr<core::StyleSheet>> core::UnistylesRegistry::getStyle
214
216
  if (styleSheet->type == StyleSheetType::Themable && themeDidChange) {
215
217
  stylesheetsToRefresh.emplace_back(styleSheet);
216
218
  }
217
- });
219
+
220
+ nextStyleSheet:;
221
+ }
218
222
 
219
223
  return stylesheetsToRefresh;
220
224
  }
221
225
 
226
+
222
227
  core::Unistyle::Shared core::UnistylesRegistry::getUnistyleById(jsi::Runtime& rt, std::string unistyleID) {
223
228
  for (auto& pair: this->_styleSheetRegistry[&rt]) {
224
229
  auto [_, stylesheet] = pair;
@@ -56,7 +56,7 @@ private:
56
56
  std::optional<std::string> _scopedTheme{};
57
57
  std::unordered_map<jsi::Runtime*, UnistylesState> _states{};
58
58
  std::unordered_map<jsi::Runtime*, std::unordered_map<int, std::shared_ptr<core::StyleSheet>>> _styleSheetRegistry{};
59
- std::unordered_map<jsi::Runtime*, std::unordered_map<const ShadowNodeFamily*, std::vector<const std::shared_ptr<UnistyleData>>>> _shadowRegistry{};
59
+ std::unordered_map<jsi::Runtime*, std::unordered_map<const ShadowNodeFamily*, std::vector<std::shared_ptr<UnistyleData>>>> _shadowRegistry{};
60
60
  };
61
61
 
62
62
  inline UnistylesRegistry& UnistylesRegistry::get() {
@@ -49,7 +49,6 @@ jsi::Value HybridShadowRegistry::link(jsi::Runtime &rt, const jsi::Value &thisVa
49
49
  }
50
50
 
51
51
  auto parser = parser::Parser(this->_unistylesRuntime);
52
- auto parsedStyleSheet = jsi::Value::undefined();
53
52
  std::vector<std::shared_ptr<core::UnistyleData>> unistylesData{};
54
53
 
55
54
  // create unistyleData based on wrappers
@@ -77,10 +76,8 @@ jsi::Value HybridShadowRegistry::link(jsi::Runtime &rt, const jsi::Value &thisVa
77
76
  );
78
77
 
79
78
  // before linking we need to check if given unistyle is affected by scoped theme
80
- if (scopedTheme.has_value()) {
81
- if (parsedStyleSheet.isUndefined()) {
82
- parsedStyleSheet = parser.getParsedStyleSheetForScopedTheme(rt, unistyle, scopedTheme.value());
83
- }
79
+ if (scopedTheme.has_value() && unistyle->styleKey != helpers::EXOTIC_STYLE_KEY) {
80
+ auto parsedStyleSheet = parser.getParsedStyleSheetForScopedTheme(rt, unistyle, scopedTheme.value());
84
81
 
85
82
  // if so we need to force update
86
83
  parser.rebuildUnistyleWithScopedTheme(rt, parsedStyleSheet, unistyleData);
@@ -80,15 +80,14 @@ jsi::Value HybridStyleSheet::init(jsi::Runtime &rt, const jsi::Value &thisVal, c
80
80
  if (this->isInitialized) {
81
81
  return jsi::Value::undefined();
82
82
  }
83
-
83
+
84
84
  // create new state
85
85
  auto& registry = core::UnistylesRegistry::get();
86
86
 
87
87
  registry.createState(rt);
88
88
 
89
89
  loadExternalMethods(thisVal, rt);
90
- registerHooks(rt);
91
-
90
+
92
91
  this->isInitialized = true;
93
92
 
94
93
  return jsi::Value::undefined();
@@ -127,18 +126,18 @@ void HybridStyleSheet::parseSettings(jsi::Runtime &rt, jsi::Object settings) {
127
126
  if (propertyName == "CSSVars") {
128
127
  return;
129
128
  }
130
-
129
+
131
130
  if (propertyName == "nativeBreakpointsMode") {
132
131
  helpers::assertThat(rt, propertyValue.isString(), "StyleSheet.configure's nativeBreakpointsMode must be a string");
133
-
132
+
134
133
  auto mode = propertyValue.asString(rt).utf8(rt);
135
-
134
+
136
135
  helpers::assertThat(rt, mode == "pixels" || mode == "points", "StyleSheet.configure's nativeBreakpointsMode must be one of: pixels or points");
137
-
136
+
138
137
  if (mode == "points") {
139
138
  registry.shouldUsePointsForBreakpoints = true;
140
139
  }
141
-
140
+
142
141
  return;
143
142
  }
144
143
 
@@ -156,12 +155,12 @@ void HybridStyleSheet::parseBreakpoints(jsi::Runtime &rt, jsi::Object breakpoint
156
155
  auto& state = registry.getState(rt);
157
156
 
158
157
  registry.registerBreakpoints(rt, sortedBreakpoints);
159
-
158
+
160
159
  auto rawWidth = this->_unistylesRuntime->getScreen().width;
161
160
  auto width = registry.shouldUsePointsForBreakpoints
162
161
  ? rawWidth / this->_unistylesRuntime->getPixelRatio()
163
162
  : rawWidth;
164
-
163
+
165
164
  state.computeCurrentBreakpoint(width);
166
165
  }
167
166
 
@@ -256,14 +255,6 @@ void HybridStyleSheet::loadExternalMethods(const jsi::Value& thisValue, jsi::Run
256
255
  state.registerProcessColorFunction(std::move(processColorFn));
257
256
  }
258
257
 
259
- void HybridStyleSheet::registerHooks(jsi::Runtime& rt) {
260
- // cleanup Shadow updates
261
- core::UnistylesRegistry::get().trafficController.restore();
262
-
263
- this->_unistylesCommitHook = std::make_shared<core::UnistylesCommitHook>(this->_uiManager);
264
- this->_unistylesMountHook = std::make_shared<core::UnistylesMountHook>(this->_uiManager, this->_unistylesRuntime);
265
- }
266
-
267
258
  void HybridStyleSheet::onPlatformDependenciesChange(std::vector<UnistyleDependency> dependencies) {
268
259
  // this event listener is triggered from C++ module, and it's only about theme / adaptive theme changes
269
260
  if (dependencies.size() == 0) {
@@ -317,7 +308,7 @@ void HybridStyleSheet::onPlatformNativeDependenciesChange(std::vector<UnistyleDe
317
308
  auto width = registry.shouldUsePointsForBreakpoints
318
309
  ? rawWidth / this->_unistylesRuntime->getPixelRatio()
319
310
  : rawWidth;
320
-
311
+
321
312
  registry.getState(rt).computeCurrentBreakpoint(width);
322
313
  }
323
314
 
@@ -6,18 +6,16 @@
6
6
  #include "HybridUnistylesStyleSheetSpec.hpp"
7
7
  #include "RNStyle.h"
8
8
  #include "Helpers.h"
9
- #include "Constants.h"
9
+ #include "UnistylesConstants.h"
10
10
  #include "Breakpoints.h"
11
11
  #include "Parser.h"
12
- #include "UnistylesCommitHook.h"
13
- #include "UnistylesMountHook.h"
12
+ #include "ShadowTreeManager.h"
14
13
 
15
14
  using namespace margelo::nitro::unistyles;
16
15
  using namespace facebook::react;
17
16
 
18
17
  struct HybridStyleSheet: public HybridUnistylesStyleSheetSpec {
19
- HybridStyleSheet(std::shared_ptr<HybridUnistylesRuntime> unistylesRuntime, std::shared_ptr<UIManager> uiManager)
20
- : HybridObject(TAG), _unistylesRuntime{unistylesRuntime}, _uiManager{uiManager} {
18
+ HybridStyleSheet(std::shared_ptr<HybridUnistylesRuntime> unistylesRuntime): HybridObject(TAG), _unistylesRuntime{unistylesRuntime} {
21
19
  this->_unistylesRuntime->registerPlatformListener(
22
20
  std::bind(&HybridStyleSheet::onPlatformDependenciesChange, this, std::placeholders::_1)
23
21
  );
@@ -67,7 +65,6 @@ private:
67
65
  void verifyAndSelectTheme(jsi::Runtime &rt);
68
66
  void setThemeFromColorScheme(jsi::Runtime& rt);
69
67
  void loadExternalMethods(const jsi::Value& thisValue, jsi::Runtime& rt);
70
- void registerHooks(jsi::Runtime& rt);
71
68
  void onPlatformDependenciesChange(std::vector<UnistyleDependency> dependencies);
72
69
  void onPlatformNativeDependenciesChange(std::vector<UnistyleDependency> dependencies, UnistylesNativeMiniRuntime miniRuntime);
73
70
  void onImeChange(UnistylesNativeMiniRuntime miniRuntime);
@@ -77,8 +74,6 @@ private:
77
74
  double __unid = -1;
78
75
  std::vector<std::unique_ptr<const std::function<void(std::vector<UnistyleDependency>&)>>> _changeListeners{};
79
76
  std::shared_ptr<HybridUnistylesRuntime> _unistylesRuntime;
80
- std::shared_ptr<core::UnistylesCommitHook> _unistylesCommitHook;
81
- std::shared_ptr<core::UnistylesMountHook> _unistylesMountHook;
82
77
  std::shared_ptr<UIManager> _uiManager;
83
78
  };
84
79
 
@@ -73,9 +73,13 @@ void HybridUnistylesRuntime::setTheme(const std::string &themeName) {
73
73
  helpers::assertThat(*_rt, !this->getHasAdaptiveThemes(), "Unistyles: You're trying to set theme to: '" + themeName + "', but adaptiveThemes are enabled.");
74
74
 
75
75
  auto& state = core::UnistylesRegistry::get().getState(*_rt);
76
+ auto currentThemeName = state.getCurrentThemeName();
76
77
 
77
78
  state.setTheme(themeName);
78
- this->_onDependenciesChange({UnistyleDependency::THEME, UnistyleDependency::THEMENAME});
79
+
80
+ if (currentThemeName.value() != themeName) {
81
+ this->_onDependenciesChange({UnistyleDependency::THEME, UnistyleDependency::THEMENAME});
82
+ }
79
83
  };
80
84
 
81
85
  void HybridUnistylesRuntime::setAdaptiveThemes(bool isEnabled) {