react-native-unistyles 3.0.0-alpha.3 → 3.0.0-alpha.31

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 (536) hide show
  1. package/README.md +7 -0
  2. package/android/CMakeLists.txt +12 -21
  3. package/cxx/common/Constants.h +3 -0
  4. package/cxx/common/Helpers.h +118 -5
  5. package/cxx/core/HostStyle.cpp +12 -8
  6. package/cxx/core/HostStyle.h +4 -0
  7. package/cxx/core/StyleSheet.h +0 -2
  8. package/cxx/core/StyleSheetRegistry.cpp +10 -13
  9. package/cxx/core/StyleSheetRegistry.h +4 -4
  10. package/cxx/core/Unistyle.h +7 -10
  11. package/cxx/core/UnistyleData.h +23 -0
  12. package/cxx/core/UnistyleWrapper.h +61 -12
  13. package/cxx/core/UnistylesCommitHook.cpp +14 -15
  14. package/cxx/core/UnistylesCommitHook.h +6 -11
  15. package/cxx/core/UnistylesCommitShadowNode.h +13 -0
  16. package/cxx/core/UnistylesMountHook.cpp +28 -0
  17. package/cxx/core/UnistylesMountHook.h +25 -0
  18. package/cxx/core/UnistylesRegistry.cpp +104 -89
  19. package/cxx/core/UnistylesRegistry.h +16 -13
  20. package/cxx/core/UnistylesState.cpp +29 -11
  21. package/cxx/core/UnistylesState.h +5 -2
  22. package/cxx/hybridObjects/HybridShadowRegistry.cpp +15 -13
  23. package/cxx/hybridObjects/HybridStyleSheet.cpp +136 -46
  24. package/cxx/hybridObjects/HybridStyleSheet.h +23 -5
  25. package/cxx/hybridObjects/HybridUnistylesRuntime.cpp +51 -8
  26. package/cxx/hybridObjects/HybridUnistylesRuntime.h +12 -1
  27. package/cxx/parser/Parser.cpp +236 -165
  28. package/cxx/parser/Parser.h +11 -14
  29. package/cxx/shadowTree/ShadowLeafUpdate.h +2 -1
  30. package/cxx/shadowTree/ShadowTrafficController.h +60 -0
  31. package/cxx/shadowTree/ShadowTreeManager.cpp +17 -17
  32. package/cxx/shadowTree/ShadowTreeManager.h +3 -2
  33. package/ios/Equatable.swift +2 -1
  34. package/ios/NativePlatform+ios.swift +21 -5
  35. package/ios/NativePlatform+keyboard.swift +83 -0
  36. package/ios/NativePlatformListener+ios.swift +36 -23
  37. package/ios/Unistyles.h +1 -0
  38. package/ios/UnistylesModuleOnLoad.h +13 -2
  39. package/ios/UnistylesModuleOnLoad.mm +9 -1
  40. package/lib/commonjs/core/createUnistylesComponent.js +18 -0
  41. package/lib/commonjs/core/createUnistylesComponent.js.map +1 -0
  42. package/lib/commonjs/core/createUnistylesComponent.native.js +46 -0
  43. package/lib/commonjs/core/createUnistylesComponent.native.js.map +1 -0
  44. package/lib/commonjs/core/index.js +27 -0
  45. package/lib/commonjs/core/index.js.map +1 -0
  46. package/lib/commonjs/core/useBreakpoint.js +22 -0
  47. package/lib/commonjs/core/useBreakpoint.js.map +1 -0
  48. package/lib/commonjs/core/useBreakpoint.native.js +24 -0
  49. package/lib/commonjs/core/useBreakpoint.native.js.map +1 -0
  50. package/lib/commonjs/core/useTheme.js +22 -0
  51. package/lib/commonjs/core/useTheme.js.map +1 -0
  52. package/lib/commonjs/core/useTheme.native.js +24 -0
  53. package/lib/commonjs/core/useTheme.native.js.map +1 -0
  54. package/lib/commonjs/global.js +3 -0
  55. package/lib/commonjs/index.js +23 -11
  56. package/lib/commonjs/index.js.map +1 -1
  57. package/lib/commonjs/mq.js +1 -4
  58. package/lib/commonjs/mq.js.map +2 -1
  59. package/lib/commonjs/specs/NativePlatform/NativePlatform.nitro.js +1 -0
  60. package/lib/commonjs/specs/NativePlatform/NativePlatform.nitro.js.map +2 -1
  61. package/lib/commonjs/specs/NativePlatform/index.js.map +1 -1
  62. package/lib/commonjs/specs/NavigtionBar/index.js +1 -1
  63. package/lib/commonjs/specs/NavigtionBar/index.js.map +1 -1
  64. package/lib/commonjs/specs/ShadowRegistry/index.js +7 -6
  65. package/lib/commonjs/specs/ShadowRegistry/index.js.map +1 -1
  66. package/lib/commonjs/specs/ShadowRegistry/types.js +3 -0
  67. package/lib/commonjs/specs/StatusBar/index.js +1 -1
  68. package/lib/commonjs/specs/StatusBar/index.js.map +1 -1
  69. package/lib/commonjs/specs/StyleSheet/UnistylesStyleSheet.nitro.js +2 -4
  70. package/lib/commonjs/specs/StyleSheet/UnistylesStyleSheet.nitro.js.map +1 -1
  71. package/lib/commonjs/specs/StyleSheet/index.js +1 -0
  72. package/lib/commonjs/specs/StyleSheet/index.js.map +2 -1
  73. package/lib/commonjs/specs/UnistylesRuntime/index.js +1 -1
  74. package/lib/commonjs/specs/UnistylesRuntime/index.js.map +1 -1
  75. package/lib/commonjs/specs/index.js +7 -0
  76. package/lib/commonjs/specs/index.js.map +1 -1
  77. package/lib/commonjs/specs/index.web.js +1 -1
  78. package/lib/commonjs/specs/index.web.js.map +2 -1
  79. package/lib/commonjs/specs/types.js +10 -10
  80. package/lib/commonjs/specs/types.js.map +1 -0
  81. package/lib/commonjs/types/accessibility.js +1 -1
  82. package/lib/commonjs/types/accessibility.js.map +1 -0
  83. package/lib/commonjs/types/common.js +3 -0
  84. package/lib/commonjs/types/stylesheet.js.map +1 -1
  85. package/lib/commonjs/types/variants.js.map +1 -1
  86. package/lib/commonjs/web/convert/boxShadow.js +74 -0
  87. package/lib/commonjs/web/convert/boxShadow.js.map +2 -0
  88. package/lib/commonjs/web/convert/index.js +68 -0
  89. package/lib/commonjs/web/convert/index.js.map +2 -0
  90. package/lib/commonjs/web/convert/module.d.js +2 -0
  91. package/lib/commonjs/web/convert/module.d.js.map +1 -0
  92. package/lib/commonjs/web/convert/pseudo.js +10 -0
  93. package/lib/commonjs/web/convert/pseudo.js.map +2 -0
  94. package/lib/commonjs/web/convert/shadow.js +64 -0
  95. package/lib/commonjs/web/convert/shadow.js.map +1 -0
  96. package/lib/commonjs/web/convert/style.js +93 -0
  97. package/lib/commonjs/web/convert/style.js.map +2 -0
  98. package/lib/commonjs/web/convert/textShadow.js +73 -0
  99. package/lib/commonjs/web/convert/textShadow.js.map +1 -0
  100. package/lib/commonjs/web/convert/transform.js +72 -0
  101. package/lib/commonjs/web/convert/transform.js.map +2 -0
  102. package/lib/commonjs/web/convert/types.js +9 -0
  103. package/lib/commonjs/web/convert/types.js.map +1 -0
  104. package/lib/commonjs/web/convert/utils.js +54 -0
  105. package/lib/commonjs/web/convert/utils.js.map +2 -0
  106. package/lib/commonjs/web/create.js +48 -0
  107. package/lib/commonjs/web/create.js.map +1 -0
  108. package/lib/commonjs/web/index.js +60 -0
  109. package/lib/commonjs/web/index.js.map +1 -0
  110. package/lib/commonjs/web/listener.js +35 -0
  111. package/lib/commonjs/web/listener.js.map +1 -0
  112. package/lib/commonjs/web/mock.js +28 -0
  113. package/lib/commonjs/web/mock.js.map +1 -0
  114. package/lib/commonjs/web/mq.js +23 -0
  115. package/lib/commonjs/web/mq.js.map +1 -0
  116. package/lib/commonjs/web/registry.js +183 -0
  117. package/lib/commonjs/web/registry.js.map +2 -0
  118. package/lib/commonjs/web/runtime.js +167 -0
  119. package/lib/commonjs/web/runtime.js.map +2 -0
  120. package/lib/commonjs/web/shadowRegistry.js +114 -0
  121. package/lib/commonjs/web/shadowRegistry.js.map +2 -0
  122. package/lib/commonjs/web/state.js +69 -0
  123. package/lib/commonjs/web/state.js.map +2 -0
  124. package/lib/commonjs/web/utils/common.js +92 -0
  125. package/lib/commonjs/web/utils/common.js.map +1 -0
  126. package/lib/commonjs/web/utils/index.js +28 -0
  127. package/lib/commonjs/web/utils/index.js.map +1 -0
  128. package/lib/commonjs/web/utils/unistyle.js +82 -0
  129. package/lib/commonjs/web/utils/unistyle.js.map +2 -0
  130. package/lib/commonjs/web/variants/getVariants.js +39 -0
  131. package/lib/commonjs/web/variants/getVariants.js.map +2 -0
  132. package/lib/commonjs/web/variants/index.js +28 -0
  133. package/lib/commonjs/web/variants/index.js.map +1 -0
  134. package/lib/commonjs/web/variants/useVariants.js +58 -0
  135. package/lib/commonjs/web/variants/useVariants.js.map +2 -0
  136. package/lib/module/common.js.map +1 -1
  137. package/lib/module/core/createUnistylesComponent.js +12 -0
  138. package/lib/module/core/createUnistylesComponent.js.map +1 -0
  139. package/lib/module/core/createUnistylesComponent.native.js +39 -0
  140. package/lib/module/core/createUnistylesComponent.native.js.map +1 -0
  141. package/lib/module/core/index.js +6 -0
  142. package/lib/module/core/index.js.map +1 -0
  143. package/lib/module/core/useBreakpoint.js +17 -0
  144. package/lib/module/core/useBreakpoint.js.map +1 -0
  145. package/lib/module/core/useBreakpoint.native.js +19 -0
  146. package/lib/module/core/useBreakpoint.native.js.map +2 -0
  147. package/lib/module/core/useTheme.js +17 -0
  148. package/lib/module/core/useTheme.js.map +1 -0
  149. package/lib/module/core/useTheme.native.js +19 -0
  150. package/lib/module/core/useTheme.native.js.map +1 -0
  151. package/lib/module/global.js +1 -1
  152. package/lib/module/global.js.map +1 -0
  153. package/lib/module/index.js +1 -9
  154. package/lib/module/index.js.map +1 -1
  155. package/lib/module/mq.js +1 -4
  156. package/lib/module/mq.js.map +2 -1
  157. package/lib/module/specs/NativePlatform/NativePlatform.nitro.js +1 -0
  158. package/lib/module/specs/NativePlatform/NativePlatform.nitro.js.map +2 -1
  159. package/lib/module/specs/NavigtionBar/UnistylesNavigationBar.nitro.js.map +1 -1
  160. package/lib/module/specs/NavigtionBar/index.js +1 -1
  161. package/lib/module/specs/NavigtionBar/index.js.map +1 -1
  162. package/lib/module/specs/ShadowRegistry/ShadowRegistry.nitro.js.map +1 -0
  163. package/lib/module/specs/ShadowRegistry/index.js +7 -6
  164. package/lib/module/specs/ShadowRegistry/index.js.map +1 -1
  165. package/lib/module/specs/ShadowRegistry/types.js +2 -0
  166. package/lib/module/specs/ShadowRegistry/types.js.map +1 -1
  167. package/lib/module/specs/StatusBar/UnistylesStatusBar.nitro.js.map +1 -0
  168. package/lib/module/specs/StatusBar/index.js +1 -1
  169. package/lib/module/specs/StatusBar/index.js.map +1 -1
  170. package/lib/module/specs/StyleSheet/UnistylesStyleSheet.nitro.js +1 -1
  171. package/lib/module/specs/StyleSheet/UnistylesStyleSheet.nitro.js.map +1 -1
  172. package/lib/module/specs/StyleSheet/index.js +1 -0
  173. package/lib/module/specs/StyleSheet/index.js.map +2 -1
  174. package/lib/module/specs/UnistylesRuntime/UnistylesRuntime.nitro.js.map +1 -1
  175. package/lib/module/specs/UnistylesRuntime/index.js +1 -1
  176. package/lib/module/specs/UnistylesRuntime/index.js.map +2 -1
  177. package/lib/module/specs/index.js +2 -1
  178. package/lib/module/specs/index.js.map +1 -1
  179. package/lib/module/specs/index.web.js +1 -1
  180. package/lib/module/specs/index.web.js.map +2 -1
  181. package/lib/module/specs/types.js.map +1 -0
  182. package/lib/module/types/accessibility.js +1 -1
  183. package/lib/module/types/accessibility.js.map +1 -0
  184. package/lib/module/types/breakpoints.js.map +1 -1
  185. package/lib/module/types/common.js +1 -1
  186. package/lib/module/types/common.js.map +1 -0
  187. package/lib/module/types/core.js.map +1 -0
  188. package/lib/module/types/index.js.map +2 -1
  189. package/lib/module/types/stylesheet.js.map +1 -1
  190. package/lib/module/types/variants.js.map +1 -0
  191. package/lib/module/web/convert/boxShadow.js +72 -0
  192. package/lib/module/web/convert/boxShadow.js.map +1 -0
  193. package/lib/module/web/convert/index.js +69 -0
  194. package/lib/module/web/convert/index.js.map +1 -0
  195. package/lib/module/web/convert/module.d.js +2 -0
  196. package/lib/module/web/convert/module.d.js.map +1 -0
  197. package/lib/module/web/convert/pseudo.js +5 -0
  198. package/lib/module/web/convert/pseudo.js.map +1 -0
  199. package/lib/module/web/convert/shadow.js +63 -0
  200. package/lib/module/web/convert/shadow.js.map +1 -0
  201. package/lib/module/web/convert/style.js +88 -0
  202. package/lib/module/web/convert/style.js.map +1 -0
  203. package/lib/module/web/convert/textShadow.js +65 -0
  204. package/lib/module/web/convert/textShadow.js.map +2 -0
  205. package/lib/module/web/convert/transform.js +67 -0
  206. package/lib/module/web/convert/transform.js.map +1 -0
  207. package/lib/module/web/convert/types.js +5 -0
  208. package/lib/module/web/convert/types.js.map +1 -0
  209. package/lib/module/web/convert/utils.js +42 -0
  210. package/lib/module/web/convert/utils.js.map +2 -0
  211. package/lib/module/web/create.js +39 -0
  212. package/lib/module/web/create.js.map +2 -0
  213. package/lib/module/web/index.js +25 -0
  214. package/lib/module/web/index.js.map +1 -0
  215. package/lib/module/web/listener.js +31 -0
  216. package/lib/module/web/listener.js.map +2 -0
  217. package/lib/module/web/mock.js +24 -0
  218. package/lib/module/web/mock.js.map +1 -0
  219. package/lib/module/web/mq.js +17 -0
  220. package/lib/module/web/mq.js.map +1 -0
  221. package/lib/module/web/registry.js +179 -0
  222. package/lib/module/web/registry.js.map +1 -0
  223. package/lib/module/web/runtime.js +163 -0
  224. package/lib/module/web/runtime.js.map +1 -0
  225. package/lib/module/web/shadowRegistry.js +118 -0
  226. package/lib/module/web/shadowRegistry.js.map +1 -0
  227. package/lib/module/web/state.js +65 -0
  228. package/lib/module/web/state.js.map +2 -0
  229. package/lib/module/web/utils/common.js +78 -0
  230. package/lib/module/web/utils/common.js.map +2 -0
  231. package/lib/module/web/utils/index.js +5 -0
  232. package/lib/module/web/utils/index.js.map +1 -0
  233. package/lib/module/web/utils/unistyle.js +69 -0
  234. package/lib/module/web/utils/unistyle.js.map +2 -0
  235. package/lib/module/web/variants/getVariants.js +34 -0
  236. package/lib/module/web/variants/getVariants.js.map +1 -0
  237. package/lib/module/web/variants/index.js +5 -0
  238. package/lib/module/web/variants/index.js.map +1 -0
  239. package/lib/module/web/variants/useVariants.js +53 -0
  240. package/lib/module/web/variants/useVariants.js.map +1 -0
  241. package/lib/typescript/src/core/createUnistylesComponent.d.ts +6 -0
  242. package/lib/typescript/src/core/createUnistylesComponent.d.ts.map +1 -0
  243. package/lib/typescript/src/core/createUnistylesComponent.native.d.ts +6 -0
  244. package/lib/typescript/src/core/createUnistylesComponent.native.d.ts.map +1 -0
  245. package/lib/typescript/src/core/index.d.ts +4 -0
  246. package/lib/typescript/src/core/index.d.ts.map +1 -0
  247. package/lib/typescript/src/core/useBreakpoint.d.ts +2 -0
  248. package/lib/typescript/src/core/useBreakpoint.d.ts.map +1 -0
  249. package/lib/typescript/src/core/useBreakpoint.native.d.ts +2 -0
  250. package/lib/typescript/src/core/useBreakpoint.native.d.ts.map +1 -0
  251. package/lib/typescript/src/core/useTheme.d.ts +3 -0
  252. package/lib/typescript/src/core/useTheme.d.ts.map +1 -0
  253. package/lib/typescript/src/core/useTheme.native.d.ts +3 -0
  254. package/lib/typescript/src/core/useTheme.native.d.ts.map +1 -0
  255. package/lib/typescript/src/index.d.ts +2 -0
  256. package/lib/typescript/src/index.d.ts.map +1 -1
  257. package/lib/typescript/src/specs/NativePlatform/NativePlatform.nitro.d.ts +6 -2
  258. package/lib/typescript/src/specs/NativePlatform/NativePlatform.nitro.d.ts.map +1 -1
  259. package/lib/typescript/src/specs/NavigtionBar/index.d.ts +5 -0
  260. package/lib/typescript/src/specs/NavigtionBar/index.d.ts.map +1 -1
  261. package/lib/typescript/src/specs/ShadowRegistry/index.d.ts +3 -3
  262. package/lib/typescript/src/specs/ShadowRegistry/index.d.ts.map +1 -1
  263. package/lib/typescript/src/specs/StatusBar/index.d.ts +5 -0
  264. package/lib/typescript/src/specs/StatusBar/index.d.ts.map +1 -1
  265. package/lib/typescript/src/specs/StyleSheet/UnistylesStyleSheet.nitro.d.ts +3 -1
  266. package/lib/typescript/src/specs/StyleSheet/UnistylesStyleSheet.nitro.d.ts.map +1 -1
  267. package/lib/typescript/src/specs/StyleSheet/index.d.ts +3 -1
  268. package/lib/typescript/src/specs/StyleSheet/index.d.ts.map +1 -1
  269. package/lib/typescript/src/specs/UnistylesRuntime/UnistylesRuntime.nitro.d.ts +0 -1
  270. package/lib/typescript/src/specs/UnistylesRuntime/UnistylesRuntime.nitro.d.ts.map +1 -1
  271. package/lib/typescript/src/specs/UnistylesRuntime/index.d.ts +3 -1
  272. package/lib/typescript/src/specs/UnistylesRuntime/index.d.ts.map +1 -1
  273. package/lib/typescript/src/specs/index.d.ts +4 -2
  274. package/lib/typescript/src/specs/index.d.ts.map +1 -1
  275. package/lib/typescript/src/specs/index.web.d.ts +1 -1
  276. package/lib/typescript/src/specs/index.web.d.ts.map +1 -1
  277. package/lib/typescript/src/types/breakpoints.d.ts +11 -11
  278. package/lib/typescript/src/types/breakpoints.d.ts.map +1 -1
  279. package/lib/typescript/src/types/index.d.ts +1 -1
  280. package/lib/typescript/src/types/index.d.ts.map +1 -1
  281. package/lib/typescript/src/types/stylesheet.d.ts +6 -4
  282. package/lib/typescript/src/types/stylesheet.d.ts.map +1 -1
  283. package/lib/typescript/src/types/variants.d.ts +4 -1
  284. package/lib/typescript/src/types/variants.d.ts.map +1 -1
  285. package/lib/typescript/src/web/convert/boxShadow.d.ts +8 -0
  286. package/lib/typescript/src/web/convert/boxShadow.d.ts.map +1 -0
  287. package/lib/typescript/src/web/convert/index.d.ts +3 -0
  288. package/lib/typescript/src/web/convert/index.d.ts.map +1 -0
  289. package/lib/typescript/src/web/convert/pseudo.d.ts +6 -0
  290. package/lib/typescript/src/web/convert/pseudo.d.ts.map +1 -0
  291. package/lib/typescript/src/web/convert/shadow.d.ts.map +1 -0
  292. package/lib/typescript/src/web/convert/style.d.ts +2 -0
  293. package/lib/typescript/src/web/convert/style.d.ts.map +1 -0
  294. package/lib/typescript/src/web/convert/textShadow.d.ts +8 -0
  295. package/lib/typescript/src/web/convert/textShadow.d.ts.map +1 -0
  296. package/lib/typescript/src/web/convert/transform.d.ts +4 -0
  297. package/lib/typescript/src/web/convert/transform.d.ts.map +1 -0
  298. package/lib/typescript/{web → src/web}/convert/types.d.ts +1 -1
  299. package/lib/typescript/src/web/convert/types.d.ts.map +1 -0
  300. package/lib/typescript/src/web/convert/utils.d.ts.map +1 -0
  301. package/lib/typescript/src/web/create.d.ts +1443 -0
  302. package/lib/typescript/{web → src/web}/create.d.ts.map +1 -1
  303. package/lib/typescript/src/web/index.d.ts +1459 -0
  304. package/lib/typescript/{web → src/web}/index.d.ts.map +1 -1
  305. package/lib/typescript/{web/listener → src/web}/listener.d.ts +3 -2
  306. package/lib/typescript/src/web/listener.d.ts.map +1 -0
  307. package/lib/typescript/src/web/mock.d.ts +5 -0
  308. package/lib/typescript/src/web/mock.d.ts.map +1 -0
  309. package/lib/typescript/src/web/mq.d.ts +8 -0
  310. package/lib/typescript/src/web/mq.d.ts.map +1 -0
  311. package/lib/typescript/src/web/registry.d.ts +28 -0
  312. package/lib/typescript/src/web/registry.d.ts.map +1 -0
  313. package/lib/typescript/{web → src/web}/runtime.d.ts +9 -9
  314. package/lib/typescript/src/web/runtime.d.ts.map +1 -0
  315. package/lib/typescript/src/web/shadowRegistry.d.ts +16 -0
  316. package/lib/typescript/src/web/shadowRegistry.d.ts.map +1 -0
  317. package/lib/typescript/src/web/state.d.ts +18 -0
  318. package/lib/typescript/src/web/state.d.ts.map +1 -0
  319. package/lib/typescript/{web/utils.d.ts → src/web/utils/common.d.ts} +8 -9
  320. package/lib/typescript/src/web/utils/common.d.ts.map +1 -0
  321. package/lib/typescript/src/web/utils/index.d.ts +3 -0
  322. package/lib/typescript/src/web/utils/index.d.ts.map +1 -0
  323. package/lib/typescript/src/web/utils/unistyle.d.ts +20 -0
  324. package/lib/typescript/src/web/utils/unistyle.d.ts.map +1 -0
  325. package/lib/typescript/src/web/variants/getVariants.d.ts +3 -0
  326. package/lib/typescript/src/web/variants/getVariants.d.ts.map +1 -0
  327. package/lib/typescript/src/web/variants/index.d.ts +3 -0
  328. package/lib/typescript/src/web/variants/index.d.ts.map +1 -0
  329. package/lib/typescript/src/web/variants/useVariants.d.ts +3 -0
  330. package/lib/typescript/src/web/variants/useVariants.d.ts.map +1 -0
  331. package/nitrogen/generated/android/c++/JColorScheme.hpp +1 -1
  332. package/nitrogen/generated/android/c++/JFunc_void.hpp +48 -0
  333. package/nitrogen/generated/android/c++/JFunc_void_std__vector_UnistyleDependency_.hpp +8 -8
  334. package/nitrogen/generated/android/c++/JHybridNativePlatformSpec.cpp +31 -22
  335. package/nitrogen/generated/android/c++/JHybridNativePlatformSpec.hpp +8 -3
  336. package/nitrogen/generated/android/c++/JOrientation.hpp +1 -1
  337. package/nitrogen/generated/android/c++/JUnistyleDependency.hpp +4 -1
  338. package/nitrogen/generated/android/c++/JUnistylesNativeMiniRuntime.hpp +9 -7
  339. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/Func_void.kt +45 -0
  340. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/HybridNativePlatformSpec.kt +25 -5
  341. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/UnistyleDependency.kt +2 -1
  342. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/UnistylesNativeMiniRuntime.kt +2 -1
  343. package/nitrogen/generated/android/unistyles+autolinking.cmake +13 -1
  344. package/nitrogen/generated/android/{UnistylesOnLoad.cpp → unistylesOnLoad.cpp} +4 -2
  345. package/nitrogen/generated/android/{UnistylesOnLoad.hpp → unistylesOnLoad.hpp} +1 -1
  346. package/nitrogen/generated/ios/Unistyles+autolinking.rb +5 -3
  347. package/nitrogen/generated/ios/Unistyles-Swift-Cxx-Bridge.cpp +25 -0
  348. package/nitrogen/generated/ios/Unistyles-Swift-Cxx-Bridge.hpp +53 -31
  349. package/nitrogen/generated/ios/Unistyles-Swift-Cxx-Umbrella.hpp +0 -29
  350. package/nitrogen/generated/ios/c++/HybridNativePlatformSpecSwift.hpp +7 -1
  351. package/nitrogen/generated/ios/swift/HybridNativePlatformSpec.swift +3 -13
  352. package/nitrogen/generated/ios/swift/HybridNativePlatformSpecCxx.swift +167 -104
  353. package/nitrogen/generated/ios/swift/UnistyleDependency.swift +4 -0
  354. package/nitrogen/generated/ios/swift/UnistylesNativeMiniRuntime.swift +16 -5
  355. package/nitrogen/generated/shared/c++/ColorScheme.hpp +2 -2
  356. package/nitrogen/generated/shared/c++/HybridNativePlatformSpec.cpp +2 -0
  357. package/nitrogen/generated/shared/c++/HybridNativePlatformSpec.hpp +5 -0
  358. package/nitrogen/generated/shared/c++/HybridUnistylesNavigationBarSpec.hpp +3 -0
  359. package/nitrogen/generated/shared/c++/HybridUnistylesRuntimeSpec.hpp +3 -0
  360. package/nitrogen/generated/shared/c++/HybridUnistylesShadowRegistrySpec.hpp +3 -0
  361. package/nitrogen/generated/shared/c++/HybridUnistylesStatusBarSpec.hpp +3 -0
  362. package/nitrogen/generated/shared/c++/HybridUnistylesStyleSheetSpec.cpp +2 -1
  363. package/nitrogen/generated/shared/c++/HybridUnistylesStyleSheetSpec.hpp +10 -4
  364. package/nitrogen/generated/shared/c++/Orientation.hpp +2 -2
  365. package/nitrogen/generated/shared/c++/UnistyleDependency.hpp +2 -1
  366. package/nitrogen/generated/shared/c++/UnistylesCxxMiniRuntime.hpp +10 -9
  367. package/nitrogen/generated/shared/c++/UnistylesNativeMiniRuntime.hpp +9 -8
  368. package/package.json +18 -30
  369. package/plugin/common.js +12 -1
  370. package/plugin/index.js +110 -23
  371. package/plugin/ref.js +64 -13
  372. package/plugin/style.js +82 -22
  373. package/plugin/stylesheet.js +53 -3
  374. package/plugin/variants.js +33 -0
  375. package/src/common.js +4 -0
  376. package/src/core/createUnistylesComponent.js +6 -0
  377. package/src/core/createUnistylesComponent.native.js +31 -0
  378. package/src/core/createUnistylesComponent.native.tsx +44 -0
  379. package/src/core/createUnistylesComponent.tsx +10 -0
  380. package/src/core/index.js +3 -0
  381. package/src/core/index.ts +3 -0
  382. package/src/core/useBreakpoint.js +14 -0
  383. package/src/core/useBreakpoint.native.js +16 -0
  384. package/src/core/useBreakpoint.native.ts +21 -0
  385. package/src/core/useBreakpoint.ts +18 -0
  386. package/src/core/useTheme.js +14 -0
  387. package/src/core/useTheme.native.js +16 -0
  388. package/src/core/useTheme.native.ts +22 -0
  389. package/src/core/useTheme.ts +19 -0
  390. package/src/global.js +1 -0
  391. package/src/index.js +3 -0
  392. package/src/index.ts +2 -12
  393. package/src/mq.js +38 -0
  394. package/src/specs/NativePlatform/NativePlatform.nitro.js +19 -0
  395. package/src/specs/NativePlatform/NativePlatform.nitro.ts +7 -3
  396. package/src/specs/NativePlatform/index.js +1 -0
  397. package/src/specs/NavigtionBar/UnistylesNavigationBar.nitro.js +1 -0
  398. package/src/specs/NavigtionBar/index.js +9 -0
  399. package/src/specs/NavigtionBar/index.ts +6 -1
  400. package/src/specs/ShadowRegistry/ShadowRegistry.nitro.js +1 -0
  401. package/src/specs/ShadowRegistry/index.js +26 -0
  402. package/src/specs/ShadowRegistry/index.ts +10 -9
  403. package/src/specs/ShadowRegistry/types.js +1 -0
  404. package/src/specs/StatusBar/UnistylesStatusBar.nitro.js +1 -0
  405. package/src/specs/StatusBar/index.js +25 -0
  406. package/src/specs/StatusBar/index.ts +6 -1
  407. package/src/specs/StyleSheet/UnistylesStyleSheet.nitro.js +1 -0
  408. package/src/specs/StyleSheet/UnistylesStyleSheet.nitro.ts +4 -1
  409. package/src/specs/StyleSheet/index.js +13 -0
  410. package/src/specs/StyleSheet/index.ts +6 -1
  411. package/src/specs/TurboUnistyles/NativeTurboUnistyles.js +2 -0
  412. package/src/specs/TurboUnistyles/index.js +1 -0
  413. package/src/specs/UnistylesRuntime/UnistylesRuntime.nitro.js +1 -0
  414. package/src/specs/UnistylesRuntime/UnistylesRuntime.nitro.ts +0 -1
  415. package/src/specs/UnistylesRuntime/index.js +20 -0
  416. package/src/specs/UnistylesRuntime/index.ts +4 -2
  417. package/src/specs/index.js +8 -0
  418. package/src/specs/index.ts +6 -2
  419. package/src/specs/index.web.js +2 -0
  420. package/src/specs/index.web.ts +1 -1
  421. package/src/specs/types.js +17 -0
  422. package/src/types/accessibility.js +30 -0
  423. package/src/types/breakpoints.js +1 -0
  424. package/src/types/breakpoints.ts +25 -13
  425. package/src/types/common.js +1 -0
  426. package/src/types/core.js +1 -0
  427. package/src/types/index.js +1 -0
  428. package/src/types/index.ts +1 -1
  429. package/src/types/stylesheet.js +2 -0
  430. package/src/types/stylesheet.ts +7 -5
  431. package/src/types/variants.js +1 -0
  432. package/src/types/variants.ts +7 -1
  433. package/src/web/convert/boxShadow.js +59 -0
  434. package/{web → src/web}/convert/boxShadow.ts +14 -15
  435. package/src/web/convert/index.js +56 -0
  436. package/{web → src/web}/convert/index.ts +8 -15
  437. package/src/web/convert/pseudo.js +131 -0
  438. package/src/web/convert/pseudo.ts +137 -0
  439. package/src/web/convert/shadow.js +50 -0
  440. package/src/web/convert/style.js +137 -0
  441. package/{web → src/web}/convert/style.ts +61 -10
  442. package/src/web/convert/textShadow.js +56 -0
  443. package/{web → src/web}/convert/textShadow.ts +13 -14
  444. package/src/web/convert/transform.js +65 -0
  445. package/{web → src/web}/convert/transform.ts +7 -8
  446. package/src/web/convert/types.js +2 -0
  447. package/{web → src/web}/convert/types.ts +1 -1
  448. package/src/web/convert/utils.js +39 -0
  449. package/src/web/create.js +36 -0
  450. package/src/web/create.ts +47 -0
  451. package/src/web/index.js +22 -0
  452. package/{web → src/web}/index.ts +3 -2
  453. package/src/web/listener.js +26 -0
  454. package/{web/listener → src/web}/listener.ts +3 -3
  455. package/src/web/mock.js +21 -0
  456. package/{web → src/web}/mock.ts +2 -12
  457. package/src/web/mq.js +14 -0
  458. package/{web → src/web}/mq.ts +1 -3
  459. package/src/web/registry.js +165 -0
  460. package/src/web/registry.ts +236 -0
  461. package/src/web/runtime.js +160 -0
  462. package/{web → src/web}/runtime.ts +21 -18
  463. package/src/web/shadowRegistry.js +96 -0
  464. package/src/web/shadowRegistry.ts +121 -0
  465. package/src/web/state.js +68 -0
  466. package/src/web/state.ts +94 -0
  467. package/src/web/utils/common.js +79 -0
  468. package/{web/utils.ts → src/web/utils/common.ts} +48 -36
  469. package/src/web/utils/index.js +2 -0
  470. package/src/web/utils/index.ts +2 -0
  471. package/src/web/utils/unistyle.js +72 -0
  472. package/src/web/utils/unistyle.ts +104 -0
  473. package/src/web/variants/getVariants.js +26 -0
  474. package/src/web/variants/getVariants.ts +42 -0
  475. package/src/web/variants/index.js +2 -0
  476. package/src/web/variants/index.ts +2 -0
  477. package/src/web/variants/useVariants.js +50 -0
  478. package/src/web/variants/useVariants.ts +65 -0
  479. package/lib/typescript/example/App.d.ts +0 -4
  480. package/lib/typescript/example/App.d.ts.map +0 -1
  481. package/lib/typescript/example/unistyles.d.ts +0 -63
  482. package/lib/typescript/example/unistyles.d.ts.map +0 -1
  483. package/lib/typescript/expo-example/App.d.ts +0 -4
  484. package/lib/typescript/expo-example/App.d.ts.map +0 -1
  485. package/lib/typescript/expo-example/unistyles.d.ts +0 -63
  486. package/lib/typescript/expo-example/unistyles.d.ts.map +0 -1
  487. package/lib/typescript/web/convert/boxShadow.d.ts +0 -3
  488. package/lib/typescript/web/convert/boxShadow.d.ts.map +0 -1
  489. package/lib/typescript/web/convert/breakpoint.d.ts +0 -3
  490. package/lib/typescript/web/convert/breakpoint.d.ts.map +0 -1
  491. package/lib/typescript/web/convert/index.d.ts +0 -4
  492. package/lib/typescript/web/convert/index.d.ts.map +0 -1
  493. package/lib/typescript/web/convert/shadow.d.ts.map +0 -1
  494. package/lib/typescript/web/convert/style.d.ts +0 -3
  495. package/lib/typescript/web/convert/style.d.ts.map +0 -1
  496. package/lib/typescript/web/convert/textShadow.d.ts +0 -3
  497. package/lib/typescript/web/convert/textShadow.d.ts.map +0 -1
  498. package/lib/typescript/web/convert/transform.d.ts +0 -5
  499. package/lib/typescript/web/convert/transform.d.ts.map +0 -1
  500. package/lib/typescript/web/convert/types.d.ts.map +0 -1
  501. package/lib/typescript/web/convert/utils.d.ts.map +0 -1
  502. package/lib/typescript/web/create.d.ts +0 -2449
  503. package/lib/typescript/web/index.d.ts +0 -2464
  504. package/lib/typescript/web/listener/index.d.ts +0 -2
  505. package/lib/typescript/web/listener/index.d.ts.map +0 -1
  506. package/lib/typescript/web/listener/listener.d.ts.map +0 -1
  507. package/lib/typescript/web/mock.d.ts +0 -14
  508. package/lib/typescript/web/mock.d.ts.map +0 -1
  509. package/lib/typescript/web/mq.d.ts +0 -4
  510. package/lib/typescript/web/mq.d.ts.map +0 -1
  511. package/lib/typescript/web/pseudo.d.ts +0 -4
  512. package/lib/typescript/web/pseudo.d.ts.map +0 -1
  513. package/lib/typescript/web/registry.d.ts +0 -12
  514. package/lib/typescript/web/registry.d.ts.map +0 -1
  515. package/lib/typescript/web/runtime.d.ts.map +0 -1
  516. package/lib/typescript/web/state.d.ts +0 -24
  517. package/lib/typescript/web/state.d.ts.map +0 -1
  518. package/lib/typescript/web/useVariants.d.ts +0 -3
  519. package/lib/typescript/web/useVariants.d.ts.map +0 -1
  520. package/lib/typescript/web/utils.d.ts.map +0 -1
  521. package/plugin/__tests__/dependencies.spec.js +0 -360
  522. package/plugin/__tests__/ref.spec.js +0 -991
  523. package/plugin/__tests__/stylesheet.spec.js +0 -396
  524. package/web/convert/breakpoint.ts +0 -21
  525. package/web/create.ts +0 -102
  526. package/web/listener/index.ts +0 -1
  527. package/web/pseudo.ts +0 -11
  528. package/web/registry.ts +0 -41
  529. package/web/state.ts +0 -148
  530. package/web/useVariants.ts +0 -99
  531. /package/lib/typescript/{web → src/web}/convert/shadow.d.ts +0 -0
  532. /package/lib/typescript/{web → src/web}/convert/utils.d.ts +0 -0
  533. /package/nitrogen/generated/android/{UnistylesOnLoad.kt → unistylesOnLoad.kt} +0 -0
  534. /package/{web → src/web}/convert/module.d.ts +0 -0
  535. /package/{web → src/web}/convert/shadow.ts +0 -0
  536. /package/{web → src/web}/convert/utils.ts +0 -0
@@ -11,16 +11,16 @@ void parser::Parser::buildUnistyles(jsi::Runtime& rt, std::shared_ptr<StyleSheet
11
11
  jsi::Object unwrappedStyleSheet = this->unwrapStyleSheet(rt, styleSheet);
12
12
 
13
13
  helpers::enumerateJSIObject(rt, unwrappedStyleSheet, [&](const std::string& styleKey, jsi::Value& propertyValue){
14
- helpers::assertThat(rt, propertyValue.isObject(), "style with name '" + styleKey + "' is not a function or object.");
14
+ helpers::assertThat(rt, propertyValue.isObject(), "Unistyles: Style with name '" + styleKey + "' is not a function or object.");
15
15
 
16
16
  jsi::Object styleValue = propertyValue.asObject(rt);
17
17
 
18
-
19
18
  if (styleValue.isFunction(rt)) {
20
19
  styleSheet->unistyles[styleKey] = std::make_shared<UnistyleDynamicFunction>(
21
20
  UnistyleType::DynamicFunction,
22
21
  styleKey,
23
- styleValue
22
+ styleValue,
23
+ styleSheet
24
24
  );
25
25
 
26
26
  return;
@@ -29,7 +29,8 @@ void parser::Parser::buildUnistyles(jsi::Runtime& rt, std::shared_ptr<StyleSheet
29
29
  styleSheet->unistyles[styleKey] = std::make_shared<Unistyle>(
30
30
  UnistyleType::Object,
31
31
  styleKey,
32
- styleValue
32
+ styleValue,
33
+ styleSheet
33
34
  );
34
35
  });
35
36
  }
@@ -45,7 +46,7 @@ jsi::Object parser::Parser::unwrapStyleSheet(jsi::Runtime& rt, std::shared_ptr<S
45
46
 
46
47
  // StyleSheet is a function
47
48
  auto& state = core::UnistylesRegistry::get().getState(rt);
48
- auto theme = state.getJSTheme();
49
+ auto theme = state.getCurrentJSTheme();
49
50
 
50
51
  if (styleSheet->type == StyleSheetType::Themable) {
51
52
  return styleSheet->rawValue
@@ -68,14 +69,14 @@ jsi::Object parser::Parser::unwrapStyleSheet(jsi::Runtime& rt, std::shared_ptr<S
68
69
  void parser::Parser::parseUnistyles(jsi::Runtime& rt, std::shared_ptr<StyleSheet> styleSheet) {
69
70
  for (const auto& [_, unistyle] : styleSheet->unistyles) {
70
71
  if (unistyle->type == core::UnistyleType::Object) {
71
- auto result = this->parseFirstLevel(rt, unistyle, styleSheet->variants);
72
+ auto result = this->parseFirstLevel(rt, unistyle, std::nullopt);
72
73
 
73
74
  unistyle->parsedStyle = std::move(result);
74
75
  unistyle->seal();
75
76
  }
76
77
 
77
78
  if (unistyle->type == core::UnistyleType::DynamicFunction) {
78
- auto hostFn = this->createDynamicFunctionProxy(rt, unistyle, styleSheet->variants);
79
+ auto hostFn = this->createDynamicFunctionProxy(rt, unistyle);
79
80
  auto unistyleFn = std::dynamic_pointer_cast<UnistyleDynamicFunction>(unistyle);
80
81
 
81
82
  // defer parsing dynamic functions
@@ -85,59 +86,108 @@ void parser::Parser::parseUnistyles(jsi::Runtime& rt, std::shared_ptr<StyleSheet
85
86
  }
86
87
 
87
88
  // rebuild all unistyles in StyleSheet that depends on variants
88
- void parser::Parser::rebuildUnistylesWithVariants(jsi::Runtime& rt, std::shared_ptr<StyleSheet> styleSheet) {
89
+ void parser::Parser::rebuildUnistylesWithVariants(jsi::Runtime& rt, std::shared_ptr<StyleSheet> styleSheet, Variants& variants) {
89
90
  for (const auto& [_, unistyle] : styleSheet->unistyles) {
90
91
  if (!unistyle->dependsOn(UnistyleDependency::VARIANTS)) {
91
92
  continue;
92
93
  }
93
94
 
94
- this->rebuildUnistyle(rt, styleSheet, unistyle);
95
+ // todo skip dynamic functions
96
+ this->rebuildUnistyle(rt, styleSheet, unistyle, variants, std::nullopt);
95
97
  }
96
98
  }
97
99
 
98
100
  // rebuild all unistyles that are affected by platform event
99
- void parser::Parser::rebuildUnistylesInDependencyMap(jsi::Runtime& rt, DependencyMap& dependencyMap) {
100
- for (const auto& [styleSheet, map] : dependencyMap) {
101
- jsi::Object unwrappedStyleSheet = this->unwrapStyleSheet(rt, styleSheet);
102
-
103
- for (const auto& [shadowNode, unistyles] : map) {
104
- for (const auto& unistyle : unistyles) {
105
- // StyleSheet might have styles that are not affected
106
- if (!unwrappedStyleSheet.hasProperty(rt, unistyle->styleKey.c_str())) {
107
- continue;
101
+ void parser::Parser::rebuildUnistylesInDependencyMap(jsi::Runtime& rt, DependencyMap& dependencyMap, std::vector<std::shared_ptr<core::StyleSheet>> styleSheets) {
102
+ std::unordered_map<std::shared_ptr<StyleSheet>, jsi::Value> parsedStyleSheets{};
103
+ std::unordered_map<std::shared_ptr<core::Unistyle>, bool> parsedUnistyles{};
104
+
105
+ // parse all stylesheets that depends on changes
106
+ for (auto styleSheet : styleSheets) {
107
+ parsedStyleSheets.emplace(styleSheet, this->unwrapStyleSheet(rt, styleSheet));
108
+ }
109
+
110
+ // then parse all visible Unistyles
111
+ for (auto& [shadowNode, unistyles] : dependencyMap) {
112
+ auto styleSheet = unistyles.begin()->get()->unistyle->parent;
113
+
114
+ // stylesheet may be optional for exotic unistyles
115
+ if (styleSheet != nullptr && !parsedStyleSheets.contains(styleSheet)) {
116
+ parsedStyleSheets.emplace(styleSheet, this->unwrapStyleSheet(rt, styleSheet));
117
+ }
118
+
119
+ for (auto& unistyleData : unistyles) {
120
+ auto& unistyle = unistyleData->unistyle;
121
+
122
+ // for RN styles or inline styles, compute styles only once
123
+ if (unistyle->styleKey == helpers::EXOTIC_STYLE_KEY.c_str()) {
124
+ if (!unistyleData->parsedStyle.has_value()) {
125
+ unistyleData->parsedStyle = jsi::Value(rt, unistyle->rawValue).asObject(rt);
126
+
127
+ if (!parsedUnistyles.contains(unistyle)) {
128
+ parsedUnistyles.emplace(unistyle, true);
129
+ }
108
130
  }
109
131
 
110
- unistyle->rawValue = unwrappedStyleSheet.getProperty(rt, unistyle->styleKey.c_str()).asObject(rt);
111
- this->rebuildUnistyle(rt, styleSheet, unistyle);
132
+ continue;
133
+ }
134
+
135
+ // reference Unistyles StyleSheet as we may mix them for one style
136
+ auto unistyleStyleSheet = unistyle->parent;
137
+
138
+ // we may hit now other StyleSheets that are referenced from affected nodes
139
+ if (unistyleStyleSheet != nullptr && !parsedStyleSheets.contains(unistyleStyleSheet)) {
140
+ parsedStyleSheets.emplace(unistyleStyleSheet, this->unwrapStyleSheet(rt, unistyleStyleSheet));
141
+ }
142
+
143
+ // StyleSheet might have styles that are not affected
144
+ if (!parsedStyleSheets[unistyleStyleSheet].asObject(rt).hasProperty(rt, unistyle->styleKey.c_str())) {
145
+ continue;
146
+ }
147
+
148
+ unistyle->rawValue = parsedStyleSheets[unistyleStyleSheet].asObject(rt).getProperty(rt, unistyle->styleKey.c_str()).asObject(rt);
149
+ this->rebuildUnistyle(rt, unistyleStyleSheet, unistyle, unistyleData->variants, unistyleData->dynamicFunctionMetadata);
150
+ unistyleData->parsedStyle = jsi::Value(rt, unistyle->parsedStyle.value()).asObject(rt);
151
+
152
+ if (!parsedUnistyles.contains(unistyle)) {
153
+ parsedUnistyles.emplace(unistyle, true);
154
+ }
155
+ }
156
+ }
157
+
158
+ // parse whatever left in StyleSheets
159
+ for (auto styleSheet : styleSheets) {
160
+ for (auto& [_, unistyle] : styleSheet->unistyles) {
161
+ if (!parsedUnistyles.contains(unistyle)) {
162
+ parsedUnistyles.emplace(unistyle, true);
163
+ unistyle->rawValue = parsedStyleSheets[styleSheet].asObject(rt).getProperty(rt, unistyle->styleKey.c_str()).asObject(rt);
164
+ this->rebuildUnistyle(rt, styleSheet, unistyle, {}, std::nullopt);
112
165
  }
113
166
  }
114
167
  }
115
168
  }
116
169
 
117
170
  // rebuild single unistyle
118
- void parser::Parser::rebuildUnistyle(jsi::Runtime& rt, std::shared_ptr<StyleSheet> styleSheet, Unistyle::Shared unistyle) {
171
+ void parser::Parser::rebuildUnistyle(jsi::Runtime& rt, std::shared_ptr<StyleSheet> styleSheet, Unistyle::Shared unistyle, const Variants& variants, std::optional<std::vector<folly::dynamic>> metadata) {
119
172
  if (unistyle->type == core::UnistyleType::Object) {
120
- auto result = this->parseFirstLevel(rt, unistyle, styleSheet->variants);
173
+ auto result = this->parseFirstLevel(rt, unistyle, variants);
121
174
 
122
175
  unistyle->parsedStyle = std::move(result);
123
176
  }
124
177
 
125
178
  // for functions we need to call memoized function
126
179
  // with last know arguments and parse it with new theme and mini runtime
127
- if (unistyle->type == core::UnistyleType::DynamicFunction) {
180
+ if (unistyle->type == core::UnistyleType::DynamicFunction && metadata.has_value()) {
128
181
  auto unistyleFn = std::dynamic_pointer_cast<UnistyleDynamicFunction>(unistyle);
129
- auto maybeMetadata = unistyleFn->dynamicFunctionMetadata;
130
-
131
- helpers::assertThat(rt, maybeMetadata.has_value(), "Your dynamic function '" + unistyleFn->styleKey + "' has no metadata and can't be processed.");
132
182
 
133
183
  // convert arguments to jsi::Value
134
- auto metadata = unistyleFn->dynamicFunctionMetadata.value();
184
+ auto dynamicFunctionMetadata = metadata.value();
135
185
  std::vector<jsi::Value> args{};
136
-
137
- args.reserve(3);
138
186
 
139
- for (int i = 0; i < metadata.count; i++) {
140
- folly::dynamic& arg = metadata.arguments.at(i);
187
+ args.reserve(dynamicFunctionMetadata.size());
188
+
189
+ for (int i = 0; i < dynamicFunctionMetadata.size(); i++) {
190
+ folly::dynamic& arg = dynamicFunctionMetadata.at(i);
141
191
 
142
192
  args.emplace_back(jsi::valueFromDynamic(rt, arg));
143
193
  }
@@ -145,96 +195,37 @@ void parser::Parser::rebuildUnistyle(jsi::Runtime& rt, std::shared_ptr<StyleShee
145
195
  const jsi::Value *argStart = args.data();
146
196
 
147
197
  // call cached function with memoized arguments
148
- auto functionResult = unistyleFn->proxiedFunction.value().callAsConstructor(rt, argStart, metadata.count).asObject(rt);
198
+ auto functionResult = unistyleFn->rawValue
199
+ .asFunction(rt)
200
+ .call(rt, argStart, dynamicFunctionMetadata.size())
201
+ .asObject(rt);
149
202
 
150
203
  unistyleFn->unprocessedValue = std::move(functionResult);
151
- unistyleFn->parsedStyle = this->parseFirstLevel(rt, unistyleFn, styleSheet->variants);
204
+ unistyleFn->parsedStyle = this->parseFirstLevel(rt, unistyleFn, variants);
152
205
  }
153
206
  }
154
207
 
155
208
  // convert dependency map to shadow tree updates
156
- shadow::ShadowLeafUpdates parser::Parser::dependencyMapToShadowLeafUpdates(DependencyMap& dependencyMap) {
209
+ void parser::Parser::rebuildShadowLeafUpdates(core::DependencyMap& dependencyMap) {
157
210
  shadow::ShadowLeafUpdates updates;
211
+ auto& registry = core::UnistylesRegistry::get();
158
212
  auto& rt = this->_unistylesRuntime->getRuntime();
159
213
 
160
- for (const auto& [styleSheet, map] : dependencyMap) {
161
- for (const auto& [shadowNode, unistyles] : map) {
162
- for (const auto& unistyle : unistyles) {
163
- auto rawProps = this->parseStylesToShadowTreeStyles(rt, unistyle->parsedStyle.value());
164
-
165
- if (updates.contains(shadowNode)) {
166
- updates[shadowNode].emplace_back(std::move(rawProps));
167
-
168
- continue;
169
- }
214
+ for (const auto& [shadowNode, unistyles] : dependencyMap) {
215
+ auto rawProps = this->parseStylesToShadowTreeStyles(rt, unistyles);
170
216
 
171
- updates.emplace(shadowNode, std::vector<RawProps>{std::move(rawProps)});
172
- }
173
- }
217
+ updates.emplace(shadowNode, std::move(rawProps));
174
218
  }
175
219
 
176
- return updates;
177
- }
178
-
179
- // convert jsi::Value arguments to folly::dynamic
180
- std::vector<folly::dynamic> parser::Parser::parseDynamicFunctionArguments(jsi::Runtime& rt, size_t count, const jsi::Value* arguments) {
181
- std::vector<folly::dynamic> parsedArgument{};
182
-
183
- parsedArgument.reserve(3);
184
-
185
- for (size_t i = 0; i < count; i++) {
186
- auto& arg = arguments[i];
187
-
188
- if (arg.isBool()) {
189
- parsedArgument.push_back(folly::dynamic(arg.asBool()));
190
-
191
- continue;
192
- }
193
-
194
- if (arg.isNumber()) {
195
- parsedArgument.push_back(folly::dynamic(arg.asNumber()));
196
-
197
- continue;
198
- }
199
-
200
- if (arg.isString()) {
201
- parsedArgument.push_back(folly::dynamic(arg.asString(rt).utf8(rt)));
202
-
203
- continue;
204
- }
205
-
206
- if (arg.isUndefined()) {
207
- parsedArgument.push_back(folly::dynamic());
208
-
209
- continue;
210
- }
211
-
212
- if (arg.isNull()) {
213
- parsedArgument.push_back(folly::dynamic(nullptr));
214
-
215
- continue;
216
- }
217
-
218
- if (!arg.isObject()) {
219
- continue;;
220
- }
220
+ registry.trafficController.setUpdates(rt, updates);
221
221
 
222
- auto argObj = arg.asObject(rt);
223
-
224
- // allow arrays and objects too
225
- if (!argObj.isFunction(rt) && !argObj.isArrayBuffer(rt)) {
226
- parsedArgument.push_back(jsi::dynamicFromValue(rt, arg));
227
-
228
- continue;
229
- }
230
- }
231
-
232
- return parsedArgument;
222
+ // this is required, we need to indicate that there are new changes
223
+ registry.trafficController.resumeUnistylesTraffic();
233
224
  }
234
225
 
235
226
  // first level of StyleSheet, we can expect here different properties than on second level
236
227
  // eg. variants, compoundVariants, mq, breakpoints etc.
237
- jsi::Object parser::Parser::parseFirstLevel(jsi::Runtime& rt, Unistyle::Shared unistyle, Variants& variants) {
228
+ jsi::Object parser::Parser::parseFirstLevel(jsi::Runtime& rt, Unistyle::Shared unistyle, std::optional<Variants> variants) {
238
229
  // for objects - we simply operate on them
239
230
  // for functions we need to work on the unprocessed result (object)
240
231
  auto& style = unistyle->type == core::UnistyleType::Object
@@ -293,6 +284,18 @@ jsi::Object parser::Parser::parseFirstLevel(jsi::Runtime& rt, Unistyle::Shared u
293
284
  return;
294
285
  }
295
286
 
287
+ if (propertyName == "boxShadow" && propertyValueObject.isArray(rt)) {
288
+ parsedStyle.setProperty(rt, jsi::PropNameID::forUtf8(rt, propertyName), parseBoxShadow(rt, unistyle, propertyValueObject));
289
+
290
+ return;
291
+ }
292
+
293
+ if (propertyName == "filter" && propertyValueObject.isArray(rt)) {
294
+ parsedStyle.setProperty(rt, jsi::PropNameID::forUtf8(rt, propertyName), parseFilters(rt, unistyle, propertyValueObject));
295
+
296
+ return;
297
+ }
298
+
296
299
  if (propertyName == "fontVariant" && propertyValueObject.isArray(rt)) {
297
300
  parsedStyle.setProperty(rt, jsi::PropNameID::forUtf8(rt, propertyName), propertyValue);
298
301
 
@@ -316,20 +319,16 @@ jsi::Object parser::Parser::parseFirstLevel(jsi::Runtime& rt, Unistyle::Shared u
316
319
 
317
320
  parsedStyle.setProperty(rt, jsi::PropNameID::forUtf8(rt, propertyName), this->parseSecondLevel(rt, unistyle, valueFromBreakpoint));
318
321
  });
319
-
320
- if (shouldParseVariants) {
321
- unistyle->addDependency(UnistyleDependency::VARIANTS);
322
- }
323
322
 
324
- if (shouldParseVariants && !variants.empty()) {
323
+ if (shouldParseVariants && variants.has_value() && !variants.value().empty()) {
325
324
  auto propertyValueObject = style.getProperty(rt, "variants").asObject(rt);
326
- auto parsedVariant = this->parseVariants(rt, unistyle, propertyValueObject, variants);
325
+ auto parsedVariant = this->parseVariants(rt, unistyle, propertyValueObject, variants.value());
327
326
 
328
327
  helpers::mergeJSIObjects(rt, parsedStyle, parsedVariant);
329
328
 
330
329
  if (shouldParseCompoundVariants) {
331
330
  auto compoundVariants = style.getProperty(rt, "compoundVariants").asObject(rt);
332
- auto parsedCompoundVariants = this->parseCompoundVariants(rt, unistyle, compoundVariants, variants);
331
+ auto parsedCompoundVariants = this->parseCompoundVariants(rt, unistyle, compoundVariants, variants.value());
333
332
 
334
333
  helpers::mergeJSIObjects(rt, parsedStyle, parsedCompoundVariants);
335
334
  }
@@ -339,14 +338,14 @@ jsi::Object parser::Parser::parseFirstLevel(jsi::Runtime& rt, Unistyle::Shared u
339
338
  }
340
339
 
341
340
  // function replaces original user dynamic function with additional logic to memoize arguments
342
- jsi::Function parser::Parser::createDynamicFunctionProxy(jsi::Runtime& rt, Unistyle::Shared unistyle, Variants& variants) {
341
+ jsi::Function parser::Parser::createDynamicFunctionProxy(jsi::Runtime& rt, Unistyle::Shared unistyle) {
343
342
  auto unistylesRuntime = this->_unistylesRuntime;
344
343
 
345
344
  return jsi::Function::createFromHostFunction(
346
345
  rt,
347
346
  jsi::PropNameID::forUtf8(rt, unistyle->styleKey),
348
347
  1,
349
- [this, unistylesRuntime, unistyle, &variants](jsi::Runtime& rt, const jsi::Value& thisVal, const jsi::Value* args, size_t count) {
348
+ [this, unistylesRuntime, unistyle](jsi::Runtime& rt, const jsi::Value& thisVal, const jsi::Value* args, size_t count) {
350
349
  auto thisObject = thisVal.asObject(rt);
351
350
  auto parser = parser::Parser(unistylesRuntime);
352
351
 
@@ -356,25 +355,38 @@ jsi::Function parser::Parser::createDynamicFunctionProxy(jsi::Runtime& rt, Unist
356
355
  // memoize metadata to call it later
357
356
  auto unistyleFn = std::dynamic_pointer_cast<UnistyleDynamicFunction>(unistyle);
358
357
 
359
- unistyleFn->dynamicFunctionMetadata = core::DynamicFunctionMetadata{
360
- count,
361
- this->parseDynamicFunctionArguments(rt, count, args)
362
- };
363
-
364
358
  unistyleFn->unprocessedValue = jsi::Value(rt, result).asObject(rt);
359
+
360
+ jsi::Value rawVariants = thisObject.hasProperty(rt, helpers::STYLE_VARIANTS.c_str())
361
+ ? thisObject.getProperty(rt, helpers::STYLE_VARIANTS.c_str())
362
+ : jsi::Value::undefined();
363
+ std::optional<Variants> variants = rawVariants.isUndefined()
364
+ ? std::nullopt
365
+ : std::optional<Variants>(helpers::variantsToPairs(rt, rawVariants.asObject(rt)));
366
+
365
367
  unistyleFn->parsedStyle = this->parseFirstLevel(rt, unistyleFn, variants);
366
368
  unistyleFn->seal();
367
369
 
368
- return jsi::Value(rt, unistyleFn->parsedStyle.value());
370
+ // include dependencies for createUnistylesComponent
371
+ jsi::Object style = jsi::Value(rt, unistyleFn->parsedStyle.value()).asObject(rt);
372
+
373
+ helpers::defineHiddenProperty(rt, style, helpers::STYLE_DEPENDENCIES, helpers::dependenciesToJSIArray(rt, unistyle->dependencies));
374
+
375
+ // update shadow leaf updates to indicate newest changes
376
+ auto& registry = core::UnistylesRegistry::get();
377
+
378
+ registry.shadowLeafUpdateFromUnistyle(rt, unistyle);
379
+
380
+ return style;
369
381
  });
370
382
  }
371
383
 
372
384
  // function convert babel generated dependencies to C++ dependencies
373
385
  std::vector<UnistyleDependency> parser::Parser::parseDependencies(jsi::Runtime &rt, jsi::Object&& dependencies) {
374
- helpers::assertThat(rt, dependencies.isArray(rt), "babel transform is invalid. Unexpected type for dependencies. Please report new Github issue.");
386
+ helpers::assertThat(rt, dependencies.isArray(rt), "Unistyles: Babel transform is invalid - unexpected type for dependencies.");
375
387
 
376
388
  std::vector<UnistyleDependency> parsedDependencies{};
377
-
389
+
378
390
  parsedDependencies.reserve(5);
379
391
 
380
392
  helpers::iterateJSIArray(rt, dependencies.asArray(rt), [&](size_t i, jsi::Value& value){
@@ -388,12 +400,8 @@ std::vector<UnistyleDependency> parser::Parser::parseDependencies(jsi::Runtime &
388
400
 
389
401
  // eg. [{ scale: 2 }, { translateX: 100 }]
390
402
  jsi::Value parser::Parser::parseTransforms(jsi::Runtime& rt, Unistyle::Shared unistyle, jsi::Object& obj) {
391
- if (!obj.isArray(rt)) {
392
- return jsi::Value::undefined();
393
- }
394
-
395
403
  std::vector<jsi::Value> parsedTransforms{};
396
-
404
+
397
405
  parsedTransforms.reserve(2);
398
406
 
399
407
  helpers::iterateJSIArray(rt, obj.asArray(rt), [&](size_t i, jsi::Value& value){
@@ -421,6 +429,67 @@ jsi::Value parser::Parser::parseTransforms(jsi::Runtime& rt, Unistyle::Shared un
421
429
  return result;
422
430
  }
423
431
 
432
+ // eg [{offsetX: 5, offsetY: 5, blurRadius: 5, spreadDistance: 0, color: ‘rgba(255, 0, 0, 0.5)’}]
433
+ jsi::Value parser::Parser::parseBoxShadow(jsi::Runtime &rt, Unistyle::Shared unistyle, jsi::Object &obj) {
434
+ std::vector<jsi::Value> parsedBoxShadows{};
435
+
436
+ parsedBoxShadows.reserve(2);
437
+
438
+ helpers::iterateJSIArray(rt, obj.asArray(rt), [&](size_t i, jsi::Value& value){
439
+ if (!value.isObject()) {
440
+ return;
441
+ }
442
+
443
+ auto parsedResult = this->parseSecondLevel(rt, unistyle, value);
444
+
445
+ parsedBoxShadows.emplace_back(std::move(parsedResult));
446
+ });
447
+
448
+ // create jsi::Array result with correct box shadows
449
+ jsi::Array result = jsi::Array(rt, parsedBoxShadows.size());
450
+
451
+ for (size_t i = 0; i < parsedBoxShadows.size(); i++) {
452
+ result.setValueAtIndex(rt, i, parsedBoxShadows[i]);
453
+ }
454
+
455
+ return result;
456
+ }
457
+
458
+ // eg. [{ brightness: 0.5 }, { opacity: 0.25 }]
459
+ jsi::Value parser::Parser::parseFilters(jsi::Runtime &rt, Unistyle::Shared unistyle, jsi::Object &obj) {
460
+ std::vector<jsi::Value> parsedFilters{};
461
+
462
+ parsedFilters.reserve(2);
463
+
464
+ helpers::iterateJSIArray(rt, obj.asArray(rt), [&](size_t i, jsi::Value& value){
465
+ if (!value.isObject()) {
466
+ return;
467
+ }
468
+
469
+ auto parsedResult = this->parseSecondLevel(rt, unistyle, value);
470
+
471
+ // take only one filter per object
472
+ jsi::Array propertyNames = parsedResult.asObject(rt).getPropertyNames(rt);
473
+ size_t length = propertyNames.size(rt);
474
+
475
+ // ignore no filters
476
+ if (length == 0) {
477
+ return;
478
+ }
479
+
480
+ parsedFilters.emplace_back(std::move(parsedResult));
481
+ });
482
+
483
+ // create jsi::Array result with correct filters
484
+ jsi::Array result = jsi::Array(rt, parsedFilters.size());
485
+
486
+ for (size_t i = 0; i < parsedFilters.size(); i++) {
487
+ result.setValueAtIndex(rt, i, parsedFilters[i]);
488
+ }
489
+
490
+ return result;
491
+ }
492
+
424
493
  // find value based on breakpoints and mq
425
494
  jsi::Value parser::Parser::getValueFromBreakpoints(jsi::Runtime& rt, Unistyle::Shared unistyle, jsi::Object& obj) {
426
495
  auto& registry = core::UnistylesRegistry::get();
@@ -442,7 +511,7 @@ jsi::Value parser::Parser::getValueFromBreakpoints(jsi::Runtime& rt, Unistyle::S
442
511
  auto propertyName = propertyNames.getValueAtIndex(rt, i).asString(rt).utf8(rt);
443
512
  auto propertyValue = obj.getProperty(rt, propertyName.c_str());
444
513
  auto mq = core::UnistylesMQ{propertyName};
445
-
514
+
446
515
  if (mq.isMQ()) {
447
516
  unistyle->addDependency(UnistyleDependency::BREAKPOINTS);
448
517
  }
@@ -455,11 +524,11 @@ jsi::Value parser::Parser::getValueFromBreakpoints(jsi::Runtime& rt, Unistyle::S
455
524
 
456
525
  // check orientation breakpoints if user didn't register own breakpoint
457
526
  bool hasOrientationBreakpoint = obj.hasProperty(rt, currentOrientation);
458
-
527
+
459
528
  if (hasOrientationBreakpoint) {
460
529
  unistyle->addDependency(UnistyleDependency::BREAKPOINTS);
461
530
  }
462
-
531
+
463
532
  if (!hasBreakpoints && hasOrientationBreakpoint) {
464
533
  return obj.getProperty(rt, currentOrientation);
465
534
  }
@@ -467,7 +536,7 @@ jsi::Value parser::Parser::getValueFromBreakpoints(jsi::Runtime& rt, Unistyle::S
467
536
  if (!currentBreakpoint.has_value()) {
468
537
  return jsi::Value::undefined();
469
538
  }
470
-
539
+
471
540
  unistyle->addDependency(UnistyleDependency::BREAKPOINTS);
472
541
 
473
542
  // if you're still here it means that there is no
@@ -513,7 +582,7 @@ jsi::Object parser::Parser::parseVariants(jsi::Runtime& rt, Unistyle::Shared uni
513
582
  : std::nullopt;
514
583
 
515
584
  // we've got a match, but we need to check some condition
516
- auto styles = this->getStylesForVariant(rt, groupValue.asObject(rt), selectedVariant);
585
+ auto styles = this->getStylesForVariant(rt, groupName, groupValue.asObject(rt), selectedVariant, variants);
517
586
 
518
587
  // oops, invalid variant
519
588
  if (styles.isUndefined() || !styles.isObject()) {
@@ -529,13 +598,19 @@ jsi::Object parser::Parser::parseVariants(jsi::Runtime& rt, Unistyle::Shared uni
529
598
  }
530
599
 
531
600
  // helpers function to support 'default' variants
532
- jsi::Value parser::Parser::getStylesForVariant(jsi::Runtime& rt, jsi::Object&& groupValue, std::optional<std::string> selectedVariant) {
601
+ jsi::Value parser::Parser::getStylesForVariant(jsi::Runtime& rt, const std::string groupName, jsi::Object&& groupValue, std::optional<std::string> selectedVariant, Variants& variants) {
533
602
  // if there is no value, let's try 'default'
534
603
  auto selectedVariantKey = selectedVariant.has_value()
535
604
  ? selectedVariant.value().c_str()
536
605
  : "default";
606
+ auto hasKey = groupValue.hasProperty(rt, selectedVariantKey);
537
607
 
538
- if (groupValue.hasProperty(rt, selectedVariantKey)) {
608
+ if (!hasKey || !selectedVariant.has_value()) {
609
+ // for no key, add 'default' selection to variants map
610
+ variants.emplace_back(groupName, selectedVariantKey);
611
+ }
612
+
613
+ if (hasKey) {
539
614
  return groupValue.getProperty(rt, selectedVariantKey);
540
615
  }
541
616
 
@@ -575,28 +650,20 @@ bool parser::Parser::shouldApplyCompoundVariants(jsi::Runtime& rt, const Variant
575
650
  return false;
576
651
  }
577
652
 
578
- jsi::Array propertyNames = compoundVariant.getPropertyNames(rt);
579
- size_t length = propertyNames.size(rt);
580
- size_t allConditions = compoundVariant.hasProperty(rt, "styles")
581
- ? length - 1
582
- : length;
583
-
584
- if (allConditions != variants.size()) {
585
- return false;
586
- }
587
-
588
653
  for (auto it = variants.cbegin(); it != variants.cend(); ++it) {
589
654
  auto variantKey = it->first;
590
655
  auto variantValue = it->second;
591
656
 
592
657
  if (!compoundVariant.hasProperty(rt, variantKey.c_str())) {
593
- return false;
658
+ continue;
594
659
  }
595
660
 
596
661
  auto property = compoundVariant.getProperty(rt, variantKey.c_str());
597
662
  auto propertyName = property.isBool()
598
663
  ? (property.asBool() ? "true" : "false")
599
- : property.asString(rt).utf8(rt);
664
+ : property.isString()
665
+ ? property.asString(rt).utf8(rt)
666
+ : "";
600
667
 
601
668
  if (propertyName != variantValue) {
602
669
  return false;
@@ -674,35 +741,39 @@ jsi::Value parser::Parser::parseSecondLevel(jsi::Runtime &rt, Unistyle::Shared u
674
741
  return parsedStyle;
675
742
  }
676
743
 
677
- // helpers function that convert variants from JS to C++ variants
678
- Variants parser::Parser::variantsToPairs(jsi::Runtime& rt, jsi::Object&& variants) {
679
- Variants pairs{};
744
+ // convert unistyles to folly with int colors
745
+ folly::dynamic parser::Parser::parseStylesToShadowTreeStyles(jsi::Runtime& rt, const std::vector<std::shared_ptr<UnistyleData>>& unistyles) {
746
+ jsi::Object convertedStyles = jsi::Object(rt);
747
+ auto& state = core::UnistylesRegistry::get().getState(rt);
680
748
 
681
- helpers::enumerateJSIObject(rt, variants, [&](const std::string& variantName, jsi::Value& variantValue){
682
- if (variantValue.isUndefined() || variantValue.isNull()) {
683
- return;
749
+ for (const auto& unistyleData : unistyles) {
750
+ // this can happen for exotic stylesheets
751
+ if (!unistyleData->parsedStyle.has_value()) {
752
+ unistyleData->parsedStyle = jsi::Value(rt, unistyleData->unistyle->rawValue).asObject(rt);
684
753
  }
685
754
 
686
- if (variantValue.isBool()) {
687
- pairs.emplace_back(std::make_pair(variantName, variantValue.asBool() ? "true" : "false"));
688
-
689
- return;
690
- }
755
+ helpers::enumerateJSIObject(rt, unistyleData->parsedStyle.value(), [&](const std::string& propertyName, jsi::Value& propertyValue){
756
+ if (this->isColor(propertyName)) {
757
+ return convertedStyles.setProperty(rt, propertyName.c_str(), jsi::Value(state.parseColor(propertyValue)));
758
+ }
691
759
 
692
- if (variantValue.isString()) {
693
- pairs.emplace_back(std::make_pair(variantName, variantValue.asString(rt).utf8(rt)));
694
- }
695
- });
760
+ convertedStyles.setProperty(rt, propertyName.c_str(), propertyValue);
761
+ });
762
+ }
696
763
 
697
- return pairs;
764
+ return jsi::dynamicFromValue(rt, std::move(convertedStyles));
698
765
  }
699
766
 
700
- // convert jsi::Object to RawValue with int colors
701
- RawProps parser::Parser::parseStylesToShadowTreeStyles(jsi::Runtime& rt, jsi::Object& styles) {
767
+ folly::dynamic parser::Parser::parseUnistyleToShadowTreeStyles(jsi::Runtime& rt, const Unistyle::Shared unistyle) {
702
768
  jsi::Object convertedStyles = jsi::Object(rt);
703
769
  auto& state = core::UnistylesRegistry::get().getState(rt);
704
770
 
705
- helpers::enumerateJSIObject(rt, styles, [&](const std::string& propertyName, jsi::Value& propertyValue){
771
+ // can happen for exotic styles
772
+ if (!unistyle->parsedStyle.has_value()) {
773
+ unistyle->parsedStyle = jsi::Value(rt, unistyle->rawValue).asObject(rt);
774
+ }
775
+
776
+ helpers::enumerateJSIObject(rt, unistyle->parsedStyle.value(), [&](const std::string& propertyName, jsi::Value& propertyValue){
706
777
  if (this->isColor(propertyName)) {
707
778
  return convertedStyles.setProperty(rt, propertyName.c_str(), jsi::Value(state.parseColor(propertyValue)));
708
779
  }
@@ -710,7 +781,7 @@ RawProps parser::Parser::parseStylesToShadowTreeStyles(jsi::Runtime& rt, jsi::Ob
710
781
  convertedStyles.setProperty(rt, propertyName.c_str(), propertyValue);
711
782
  });
712
783
 
713
- return RawProps(rt, std::move(convertedStyles));
784
+ return jsi::dynamicFromValue(rt, std::move(convertedStyles));
714
785
  }
715
786
 
716
787
  // check is styleKey contains color