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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (540) hide show
  1. package/README.md +7 -0
  2. package/Unistyles.podspec +1 -1
  3. package/android/CMakeLists.txt +22 -45
  4. package/android/build.gradle +16 -5
  5. package/android/src/main/cxx/NativeUnistylesModule.cpp +71 -0
  6. package/android/src/main/cxx/NativeUnistylesModule.h +42 -0
  7. package/android/src/main/cxx/cpp-adapter.cpp +8 -86
  8. package/android/src/main/java/com/unistyles/Equatable.kt +61 -0
  9. package/android/src/main/java/com/unistyles/NativePlatform+android.kt +294 -0
  10. package/android/src/main/java/com/unistyles/NativePlatform+insets.kt +152 -0
  11. package/android/src/main/java/com/unistyles/NativePlatform+listener.kt +59 -0
  12. package/android/src/main/java/com/unistyles/UnistylesModule.kt +51 -0
  13. package/android/src/main/java/com/unistyles/UnistylesPackage.kt +16 -14
  14. package/cxx/NativePlatform.h +11 -0
  15. package/cxx/common/Constants.h +4 -0
  16. package/cxx/common/Helpers.h +140 -5
  17. package/cxx/core/HostStyle.cpp +10 -6
  18. package/cxx/core/HostStyle.h +4 -0
  19. package/cxx/core/StyleSheet.h +0 -2
  20. package/cxx/core/StyleSheetRegistry.cpp +9 -17
  21. package/cxx/core/StyleSheetRegistry.h +3 -4
  22. package/cxx/core/Unistyle.h +8 -11
  23. package/cxx/core/UnistyleData.h +24 -0
  24. package/cxx/core/UnistyleWrapper.h +108 -13
  25. package/cxx/core/UnistylesCommitHook.cpp +14 -15
  26. package/cxx/core/UnistylesCommitHook.h +6 -11
  27. package/cxx/core/UnistylesCommitShadowNode.h +13 -0
  28. package/cxx/core/UnistylesMountHook.cpp +28 -0
  29. package/cxx/core/UnistylesMountHook.h +27 -0
  30. package/cxx/core/UnistylesRegistry.cpp +123 -83
  31. package/cxx/core/UnistylesRegistry.h +16 -14
  32. package/cxx/core/UnistylesState.cpp +29 -8
  33. package/cxx/core/UnistylesState.h +5 -2
  34. package/cxx/hybridObjects/HybridNavigationBar.cpp +0 -4
  35. package/cxx/hybridObjects/HybridNavigationBar.h +3 -4
  36. package/cxx/hybridObjects/HybridShadowRegistry.cpp +19 -11
  37. package/cxx/hybridObjects/HybridStatusBar.cpp +0 -4
  38. package/cxx/hybridObjects/HybridStatusBar.h +3 -4
  39. package/cxx/hybridObjects/HybridStyleSheet.cpp +154 -23
  40. package/cxx/hybridObjects/HybridStyleSheet.h +27 -5
  41. package/cxx/hybridObjects/HybridUnistylesRuntime.cpp +96 -14
  42. package/cxx/hybridObjects/HybridUnistylesRuntime.h +19 -3
  43. package/cxx/parser/Parser.cpp +249 -177
  44. package/cxx/parser/Parser.h +12 -15
  45. package/cxx/shadowTree/ShadowLeafUpdate.h +3 -1
  46. package/cxx/shadowTree/ShadowTrafficController.h +71 -0
  47. package/cxx/shadowTree/ShadowTreeManager.cpp +28 -19
  48. package/cxx/shadowTree/ShadowTreeManager.h +3 -2
  49. package/ios/Equatable.swift +2 -1
  50. package/ios/Extensions.swift +3 -1
  51. package/ios/NativePlatform+ios.swift +34 -9
  52. package/ios/NativePlatform+keyboard.swift +83 -0
  53. package/ios/NativePlatformListener+ios.swift +36 -24
  54. package/ios/Unistyles.h +1 -0
  55. package/ios/UnistylesModuleOnLoad.h +8 -2
  56. package/ios/UnistylesModuleOnLoad.mm +9 -1
  57. package/lib/commonjs/components/Display.js +18 -0
  58. package/lib/commonjs/components/Display.js.map +1 -0
  59. package/lib/commonjs/components/Hide.js +18 -0
  60. package/lib/commonjs/components/Hide.js.map +1 -0
  61. package/lib/commonjs/components/index.js +20 -0
  62. package/lib/commonjs/components/index.js.map +1 -0
  63. package/lib/commonjs/components/useMedia.js +59 -0
  64. package/lib/commonjs/components/useMedia.js.map +1 -0
  65. package/lib/commonjs/components/useMedia.web.js +43 -0
  66. package/lib/commonjs/components/useMedia.web.js.map +1 -0
  67. package/lib/commonjs/core/createUnistylesComponent.js +79 -0
  68. package/lib/commonjs/core/createUnistylesComponent.js.map +1 -0
  69. package/lib/commonjs/core/createUnistylesComponent.native.js +82 -0
  70. package/lib/commonjs/core/createUnistylesComponent.native.js.map +1 -0
  71. package/lib/commonjs/core/index.js +13 -0
  72. package/lib/commonjs/core/index.js.map +1 -0
  73. package/lib/commonjs/index.js +21 -11
  74. package/lib/commonjs/index.js.map +1 -1
  75. package/lib/commonjs/mq.js +25 -12
  76. package/lib/commonjs/mq.js.map +1 -1
  77. package/lib/commonjs/specs/NativePlatform/NativePlatform.nitro.js +1 -0
  78. package/lib/commonjs/specs/NativePlatform/NativePlatform.nitro.js.map +1 -1
  79. package/lib/commonjs/specs/NavigtionBar/index.js +0 -15
  80. package/lib/commonjs/specs/NavigtionBar/index.js.map +1 -1
  81. package/lib/commonjs/specs/ShadowRegistry/index.js +10 -6
  82. package/lib/commonjs/specs/ShadowRegistry/index.js.map +1 -1
  83. package/lib/commonjs/specs/StatusBar/index.js +0 -5
  84. package/lib/commonjs/specs/StatusBar/index.js.map +1 -1
  85. package/lib/commonjs/specs/StyleSheet/index.js +1 -0
  86. package/lib/commonjs/specs/StyleSheet/index.js.map +1 -1
  87. package/lib/commonjs/specs/UnistylesRuntime/index.js +1 -3
  88. package/lib/commonjs/specs/UnistylesRuntime/index.js.map +1 -1
  89. package/lib/commonjs/specs/index.js +7 -0
  90. package/lib/commonjs/specs/index.js.map +1 -1
  91. package/lib/commonjs/specs/index.web.js +1 -1
  92. package/lib/commonjs/types/stylesheet.js.map +1 -1
  93. package/lib/commonjs/utils.js +26 -0
  94. package/lib/commonjs/utils.js.map +1 -0
  95. package/lib/commonjs/web/convert/index.js +79 -0
  96. package/lib/commonjs/web/convert/index.js.map +1 -0
  97. package/lib/commonjs/web/convert/module.d.js +2 -0
  98. package/lib/commonjs/web/convert/module.d.js.map +1 -0
  99. package/lib/commonjs/web/convert/object/boxShadow.js +59 -0
  100. package/lib/commonjs/web/convert/object/boxShadow.js.map +1 -0
  101. package/lib/commonjs/web/convert/object/filter.js +42 -0
  102. package/lib/commonjs/web/convert/object/filter.js.map +1 -0
  103. package/lib/commonjs/web/convert/object/index.js +39 -0
  104. package/lib/commonjs/web/convert/object/index.js.map +1 -0
  105. package/lib/commonjs/web/convert/object/objectStyle.js +56 -0
  106. package/lib/commonjs/web/convert/object/objectStyle.js.map +1 -0
  107. package/lib/commonjs/web/convert/object/transform.js +27 -0
  108. package/lib/commonjs/web/convert/object/transform.js.map +1 -0
  109. package/lib/commonjs/web/convert/pseudo.js +10 -0
  110. package/lib/commonjs/web/convert/pseudo.js.map +1 -0
  111. package/lib/commonjs/web/convert/shadow/boxShadow.js +62 -0
  112. package/lib/commonjs/web/convert/shadow/boxShadow.js.map +1 -0
  113. package/lib/commonjs/web/convert/shadow/getShadowBreakpoints.js +38 -0
  114. package/lib/commonjs/web/convert/shadow/getShadowBreakpoints.js.map +1 -0
  115. package/lib/commonjs/web/convert/shadow/index.js +28 -0
  116. package/lib/commonjs/web/convert/shadow/index.js.map +1 -0
  117. package/lib/commonjs/web/convert/shadow/textShadow.js +59 -0
  118. package/lib/commonjs/web/convert/shadow/textShadow.js.map +1 -0
  119. package/lib/commonjs/web/convert/style.js +93 -0
  120. package/lib/commonjs/web/convert/style.js.map +1 -0
  121. package/lib/commonjs/web/convert/types.js +9 -0
  122. package/lib/commonjs/web/convert/types.js.map +1 -0
  123. package/lib/commonjs/web/convert/utils.js +59 -0
  124. package/lib/commonjs/web/convert/utils.js.map +1 -0
  125. package/lib/commonjs/web/create.js +49 -0
  126. package/lib/commonjs/web/create.js.map +1 -0
  127. package/lib/commonjs/web/index.js +60 -0
  128. package/lib/commonjs/web/index.js.map +1 -0
  129. package/lib/commonjs/web/listener.js +61 -0
  130. package/lib/commonjs/web/listener.js.map +1 -0
  131. package/lib/commonjs/web/mock.js +27 -0
  132. package/lib/commonjs/web/mock.js.map +1 -0
  133. package/lib/commonjs/web/registry.js +172 -0
  134. package/lib/commonjs/web/registry.js.map +1 -0
  135. package/lib/commonjs/web/runtime.js +173 -0
  136. package/lib/commonjs/web/runtime.js.map +1 -0
  137. package/lib/commonjs/web/shadowRegistry.js +142 -0
  138. package/lib/commonjs/web/shadowRegistry.js.map +1 -0
  139. package/lib/commonjs/web/state.js +73 -0
  140. package/lib/commonjs/web/state.js.map +1 -0
  141. package/lib/commonjs/web/utils/common.js +39 -0
  142. package/lib/commonjs/web/utils/common.js.map +1 -0
  143. package/lib/commonjs/web/utils/index.js +28 -0
  144. package/lib/commonjs/web/utils/index.js.map +1 -0
  145. package/lib/commonjs/web/utils/unistyle.js +85 -0
  146. package/lib/commonjs/web/utils/unistyle.js.map +1 -0
  147. package/lib/commonjs/web/variants/getVariants.js +39 -0
  148. package/lib/commonjs/web/variants/getVariants.js.map +1 -0
  149. package/lib/commonjs/web/variants/index.js +28 -0
  150. package/lib/commonjs/web/variants/index.js.map +1 -0
  151. package/lib/commonjs/web/variants/useVariants.js +59 -0
  152. package/lib/commonjs/web/variants/useVariants.js.map +1 -0
  153. package/lib/module/components/Display.js +13 -0
  154. package/lib/module/components/Display.js.map +1 -0
  155. package/lib/module/components/Hide.js +13 -0
  156. package/lib/module/components/Hide.js.map +1 -0
  157. package/lib/module/components/index.js +5 -0
  158. package/lib/module/components/index.js.map +1 -0
  159. package/lib/module/components/useMedia.js +54 -0
  160. package/lib/module/components/useMedia.js.map +1 -0
  161. package/lib/module/components/useMedia.web.js +38 -0
  162. package/lib/module/components/useMedia.web.js.map +1 -0
  163. package/lib/module/core/createUnistylesComponent.js +72 -0
  164. package/lib/module/core/createUnistylesComponent.js.map +1 -0
  165. package/lib/module/core/createUnistylesComponent.native.js +75 -0
  166. package/lib/module/core/createUnistylesComponent.native.js.map +1 -0
  167. package/lib/module/core/index.js +4 -0
  168. package/lib/module/core/index.js.map +1 -0
  169. package/lib/module/index.js +2 -9
  170. package/lib/module/index.js.map +1 -1
  171. package/lib/module/mq.js +21 -11
  172. package/lib/module/mq.js.map +1 -1
  173. package/lib/module/specs/NativePlatform/NativePlatform.nitro.js +1 -0
  174. package/lib/module/specs/NativePlatform/NativePlatform.nitro.js.map +1 -1
  175. package/lib/module/specs/NavigtionBar/index.js +0 -10
  176. package/lib/module/specs/NavigtionBar/index.js.map +1 -1
  177. package/lib/module/specs/ShadowRegistry/index.js +10 -6
  178. package/lib/module/specs/ShadowRegistry/index.js.map +1 -1
  179. package/lib/module/specs/StatusBar/index.js +1 -6
  180. package/lib/module/specs/StatusBar/index.js.map +1 -1
  181. package/lib/module/specs/StyleSheet/index.js +1 -0
  182. package/lib/module/specs/StyleSheet/index.js.map +1 -1
  183. package/lib/module/specs/UnistylesRuntime/index.js +1 -3
  184. package/lib/module/specs/UnistylesRuntime/index.js.map +1 -1
  185. package/lib/module/specs/index.js +2 -1
  186. package/lib/module/specs/index.js.map +1 -1
  187. package/lib/module/specs/index.web.js +1 -1
  188. package/lib/module/specs/index.web.js.map +1 -1
  189. package/lib/module/types/stylesheet.js.map +1 -1
  190. package/lib/module/utils.js +21 -0
  191. package/lib/module/utils.js.map +1 -0
  192. package/lib/module/web/convert/index.js +74 -0
  193. package/lib/module/web/convert/index.js.map +1 -0
  194. package/lib/module/web/convert/module.d.js +2 -0
  195. package/lib/module/web/convert/module.d.js.map +1 -0
  196. package/lib/module/web/convert/object/boxShadow.js +54 -0
  197. package/lib/module/web/convert/object/boxShadow.js.map +1 -0
  198. package/lib/module/web/convert/object/filter.js +37 -0
  199. package/lib/module/web/convert/object/filter.js.map +1 -0
  200. package/lib/module/web/convert/object/index.js +6 -0
  201. package/lib/module/web/convert/object/index.js.map +1 -0
  202. package/lib/module/web/convert/object/objectStyle.js +51 -0
  203. package/lib/module/web/convert/object/objectStyle.js.map +1 -0
  204. package/lib/module/web/convert/object/transform.js +22 -0
  205. package/lib/module/web/convert/object/transform.js.map +1 -0
  206. package/lib/module/web/convert/pseudo.js +5 -0
  207. package/lib/module/web/convert/pseudo.js.map +1 -0
  208. package/lib/module/web/convert/shadow/boxShadow.js +57 -0
  209. package/lib/module/web/convert/shadow/boxShadow.js.map +1 -0
  210. package/lib/module/web/convert/shadow/getShadowBreakpoints.js +33 -0
  211. package/lib/module/web/convert/shadow/getShadowBreakpoints.js.map +1 -0
  212. package/lib/module/web/convert/shadow/index.js +5 -0
  213. package/lib/module/web/convert/shadow/index.js.map +1 -0
  214. package/lib/module/web/convert/shadow/textShadow.js +54 -0
  215. package/lib/module/web/convert/shadow/textShadow.js.map +1 -0
  216. package/lib/module/web/convert/style.js +88 -0
  217. package/lib/module/web/convert/style.js.map +1 -0
  218. package/lib/module/web/convert/types.js +5 -0
  219. package/lib/module/web/convert/types.js.map +1 -0
  220. package/lib/module/web/convert/utils.js +45 -0
  221. package/lib/module/web/convert/utils.js.map +1 -0
  222. package/lib/module/web/create.js +44 -0
  223. package/lib/module/web/create.js.map +1 -0
  224. package/lib/module/web/index.js +26 -0
  225. package/lib/module/web/index.js.map +1 -0
  226. package/lib/module/web/listener.js +57 -0
  227. package/lib/module/web/listener.js.map +1 -0
  228. package/lib/module/web/mock.js +23 -0
  229. package/lib/module/web/mock.js.map +1 -0
  230. package/lib/module/web/registry.js +168 -0
  231. package/lib/module/web/registry.js.map +1 -0
  232. package/lib/module/web/runtime.js +169 -0
  233. package/lib/module/web/runtime.js.map +1 -0
  234. package/lib/module/web/shadowRegistry.js +138 -0
  235. package/lib/module/web/shadowRegistry.js.map +1 -0
  236. package/lib/module/web/state.js +69 -0
  237. package/lib/module/web/state.js.map +1 -0
  238. package/lib/module/web/utils/common.js +28 -0
  239. package/lib/module/web/utils/common.js.map +1 -0
  240. package/lib/module/web/utils/index.js +5 -0
  241. package/lib/module/web/utils/index.js.map +1 -0
  242. package/lib/module/web/utils/unistyle.js +72 -0
  243. package/lib/module/web/utils/unistyle.js.map +1 -0
  244. package/lib/module/web/variants/getVariants.js +34 -0
  245. package/lib/module/web/variants/getVariants.js.map +1 -0
  246. package/lib/module/web/variants/index.js +5 -0
  247. package/lib/module/web/variants/index.js.map +1 -0
  248. package/lib/module/web/variants/useVariants.js +54 -0
  249. package/lib/module/web/variants/useVariants.js.map +1 -0
  250. package/lib/typescript/src/components/Display.d.ts +7 -0
  251. package/lib/typescript/src/components/Display.d.ts.map +1 -0
  252. package/lib/typescript/src/components/Hide.d.ts +7 -0
  253. package/lib/typescript/src/components/Hide.d.ts.map +1 -0
  254. package/lib/typescript/src/components/index.d.ts +3 -0
  255. package/lib/typescript/src/components/index.d.ts.map +1 -0
  256. package/lib/typescript/src/components/useMedia.d.ts +6 -0
  257. package/lib/typescript/src/components/useMedia.d.ts.map +1 -0
  258. package/lib/typescript/src/components/useMedia.web.d.ts +6 -0
  259. package/lib/typescript/src/components/useMedia.web.d.ts.map +1 -0
  260. package/lib/typescript/src/core/createUnistylesComponent.d.ts +8 -0
  261. package/lib/typescript/src/core/createUnistylesComponent.d.ts.map +1 -0
  262. package/lib/typescript/src/core/createUnistylesComponent.native.d.ts +8 -0
  263. package/lib/typescript/src/core/createUnistylesComponent.native.d.ts.map +1 -0
  264. package/lib/typescript/src/core/index.d.ts +2 -0
  265. package/lib/typescript/src/core/index.d.ts.map +1 -0
  266. package/lib/typescript/src/index.d.ts +3 -0
  267. package/lib/typescript/src/index.d.ts.map +1 -1
  268. package/lib/typescript/src/mq.d.ts +8 -0
  269. package/lib/typescript/src/mq.d.ts.map +1 -1
  270. package/lib/typescript/src/specs/NativePlatform/NativePlatform.nitro.d.ts +7 -5
  271. package/lib/typescript/src/specs/NativePlatform/NativePlatform.nitro.d.ts.map +1 -1
  272. package/lib/typescript/src/specs/NavigtionBar/UnistylesNavigationBar.nitro.d.ts +0 -1
  273. package/lib/typescript/src/specs/NavigtionBar/UnistylesNavigationBar.nitro.d.ts.map +1 -1
  274. package/lib/typescript/src/specs/NavigtionBar/index.d.ts +1 -10
  275. package/lib/typescript/src/specs/NavigtionBar/index.d.ts.map +1 -1
  276. package/lib/typescript/src/specs/ShadowRegistry/index.d.ts +4 -4
  277. package/lib/typescript/src/specs/ShadowRegistry/index.d.ts.map +1 -1
  278. package/lib/typescript/src/specs/ShadowRegistry/types.d.ts +3 -0
  279. package/lib/typescript/src/specs/ShadowRegistry/types.d.ts.map +1 -1
  280. package/lib/typescript/src/specs/StatusBar/UnistylesStatusBar.nitro.d.ts +0 -1
  281. package/lib/typescript/src/specs/StatusBar/UnistylesStatusBar.nitro.d.ts.map +1 -1
  282. package/lib/typescript/src/specs/StatusBar/index.d.ts +2 -4
  283. package/lib/typescript/src/specs/StatusBar/index.d.ts.map +1 -1
  284. package/lib/typescript/src/specs/StyleSheet/UnistylesStyleSheet.nitro.d.ts +3 -1
  285. package/lib/typescript/src/specs/StyleSheet/UnistylesStyleSheet.nitro.d.ts.map +1 -1
  286. package/lib/typescript/src/specs/StyleSheet/index.d.ts +3 -1
  287. package/lib/typescript/src/specs/StyleSheet/index.d.ts.map +1 -1
  288. package/lib/typescript/src/specs/UnistylesRuntime/UnistylesRuntime.nitro.d.ts +1 -1
  289. package/lib/typescript/src/specs/UnistylesRuntime/UnistylesRuntime.nitro.d.ts.map +1 -1
  290. package/lib/typescript/src/specs/UnistylesRuntime/index.d.ts +3 -1
  291. package/lib/typescript/src/specs/UnistylesRuntime/index.d.ts.map +1 -1
  292. package/lib/typescript/src/specs/index.d.ts +4 -2
  293. package/lib/typescript/src/specs/index.d.ts.map +1 -1
  294. package/lib/typescript/src/specs/index.web.d.ts +1 -1
  295. package/lib/typescript/src/specs/index.web.d.ts.map +1 -1
  296. package/lib/typescript/src/types/breakpoints.d.ts +11 -11
  297. package/lib/typescript/src/types/breakpoints.d.ts.map +1 -1
  298. package/lib/typescript/src/types/common.d.ts +1 -0
  299. package/lib/typescript/src/types/common.d.ts.map +1 -1
  300. package/lib/typescript/src/types/index.d.ts +1 -1
  301. package/lib/typescript/src/types/index.d.ts.map +1 -1
  302. package/lib/typescript/src/types/stylesheet.d.ts +6 -4
  303. package/lib/typescript/src/types/stylesheet.d.ts.map +1 -1
  304. package/lib/typescript/src/types/variants.d.ts +4 -1
  305. package/lib/typescript/src/types/variants.d.ts.map +1 -1
  306. package/lib/typescript/src/utils.d.ts +2 -0
  307. package/lib/typescript/src/utils.d.ts.map +1 -0
  308. package/lib/typescript/src/web/convert/index.d.ts +3 -0
  309. package/lib/typescript/src/web/convert/index.d.ts.map +1 -0
  310. package/lib/typescript/src/web/convert/object/boxShadow.d.ts +9 -0
  311. package/lib/typescript/src/web/convert/object/boxShadow.d.ts.map +1 -0
  312. package/lib/typescript/src/web/convert/object/filter.d.ts +3 -0
  313. package/lib/typescript/src/web/convert/object/filter.d.ts.map +1 -0
  314. package/lib/typescript/src/web/convert/object/index.d.ts +4 -0
  315. package/lib/typescript/src/web/convert/object/index.d.ts.map +1 -0
  316. package/lib/typescript/src/web/convert/object/objectStyle.d.ts +5 -0
  317. package/lib/typescript/src/web/convert/object/objectStyle.d.ts.map +1 -0
  318. package/lib/typescript/src/web/convert/object/transform.d.ts +3 -0
  319. package/lib/typescript/src/web/convert/object/transform.d.ts.map +1 -0
  320. package/lib/typescript/src/web/convert/pseudo.d.ts +6 -0
  321. package/lib/typescript/src/web/convert/pseudo.d.ts.map +1 -0
  322. package/lib/typescript/src/web/convert/shadow/boxShadow.d.ts +8 -0
  323. package/lib/typescript/src/web/convert/shadow/boxShadow.d.ts.map +1 -0
  324. package/lib/typescript/src/web/convert/shadow/getShadowBreakpoints.d.ts +2 -0
  325. package/lib/typescript/src/web/convert/shadow/getShadowBreakpoints.d.ts.map +1 -0
  326. package/lib/typescript/src/web/convert/shadow/index.d.ts +3 -0
  327. package/lib/typescript/src/web/convert/shadow/index.d.ts.map +1 -0
  328. package/lib/typescript/src/web/convert/shadow/textShadow.d.ts +8 -0
  329. package/lib/typescript/src/web/convert/shadow/textShadow.d.ts.map +1 -0
  330. package/lib/typescript/src/web/convert/style.d.ts +2 -0
  331. package/lib/typescript/src/web/convert/style.d.ts.map +1 -0
  332. package/lib/typescript/{web → src/web}/convert/types.d.ts +8 -2
  333. package/lib/typescript/src/web/convert/types.d.ts.map +1 -0
  334. package/lib/typescript/src/web/convert/utils.d.ts +12 -0
  335. package/lib/typescript/src/web/convert/utils.d.ts.map +1 -0
  336. package/lib/typescript/src/web/create.d.ts +1443 -0
  337. package/lib/typescript/{web → src/web}/create.d.ts.map +1 -1
  338. package/lib/typescript/src/web/index.d.ts +1459 -0
  339. package/lib/typescript/{web → src/web}/index.d.ts.map +1 -1
  340. package/lib/typescript/{web/listener → src/web}/listener.d.ts +5 -2
  341. package/lib/typescript/src/web/listener.d.ts.map +1 -0
  342. package/lib/typescript/src/web/mock.d.ts +5 -0
  343. package/lib/typescript/src/web/mock.d.ts.map +1 -0
  344. package/lib/typescript/src/web/registry.d.ts +24 -0
  345. package/lib/typescript/src/web/registry.d.ts.map +1 -0
  346. package/lib/typescript/{web → src/web}/runtime.d.ts +11 -10
  347. package/lib/typescript/src/web/runtime.d.ts.map +1 -0
  348. package/lib/typescript/src/web/shadowRegistry.d.ts +17 -0
  349. package/lib/typescript/src/web/shadowRegistry.d.ts.map +1 -0
  350. package/lib/typescript/src/web/state.d.ts +18 -0
  351. package/lib/typescript/src/web/state.d.ts.map +1 -0
  352. package/lib/typescript/src/web/utils/common.d.ts +8 -0
  353. package/lib/typescript/src/web/utils/common.d.ts.map +1 -0
  354. package/lib/typescript/src/web/utils/index.d.ts +3 -0
  355. package/lib/typescript/src/web/utils/index.d.ts.map +1 -0
  356. package/lib/typescript/src/web/utils/unistyle.d.ts +20 -0
  357. package/lib/typescript/src/web/utils/unistyle.d.ts.map +1 -0
  358. package/lib/typescript/src/web/variants/getVariants.d.ts +3 -0
  359. package/lib/typescript/src/web/variants/getVariants.d.ts.map +1 -0
  360. package/lib/typescript/src/web/variants/index.d.ts +3 -0
  361. package/lib/typescript/src/web/variants/index.d.ts.map +1 -0
  362. package/lib/typescript/src/web/variants/useVariants.d.ts +3 -0
  363. package/lib/typescript/src/web/variants/useVariants.d.ts.map +1 -0
  364. package/nitrogen/generated/android/c++/JColorScheme.hpp +1 -1
  365. package/nitrogen/generated/android/c++/JFunc_void_UnistylesNativeMiniRuntime.hpp +57 -0
  366. package/nitrogen/generated/android/c++/JFunc_void_std__vector_UnistyleDependency__UnistylesNativeMiniRuntime.hpp +69 -0
  367. package/nitrogen/generated/android/c++/JHybridNativePlatformSpec.cpp +35 -34
  368. package/nitrogen/generated/android/c++/JHybridNativePlatformSpec.hpp +15 -6
  369. package/nitrogen/generated/android/c++/JOrientation.hpp +1 -1
  370. package/nitrogen/generated/android/c++/JUnistyleDependency.hpp +4 -1
  371. package/nitrogen/generated/android/c++/JUnistylesNativeMiniRuntime.hpp +9 -7
  372. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/Dimensions.kt +1 -0
  373. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/{Func_void_std__vector_UnistyleDependency_.kt → Func_void_UnistylesNativeMiniRuntime.kt} +6 -5
  374. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/Func_void_std__vector_UnistyleDependency__UnistylesNativeMiniRuntime.kt +46 -0
  375. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/HybridNativePlatformSpec.kt +25 -13
  376. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/Insets.kt +1 -0
  377. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/UnistyleDependency.kt +2 -1
  378. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/UnistylesNativeMiniRuntime.kt +3 -1
  379. package/nitrogen/generated/android/unistyles+autolinking.cmake +13 -1
  380. package/nitrogen/generated/android/unistyles+autolinking.gradle +2 -0
  381. package/nitrogen/generated/android/{UnistylesOnLoad.cpp → unistylesOnLoad.cpp} +6 -4
  382. package/nitrogen/generated/android/{UnistylesOnLoad.hpp → unistylesOnLoad.hpp} +1 -1
  383. package/nitrogen/generated/ios/Unistyles+autolinking.rb +6 -4
  384. package/nitrogen/generated/ios/Unistyles-Swift-Cxx-Bridge.cpp +25 -0
  385. package/nitrogen/generated/ios/Unistyles-Swift-Cxx-Bridge.hpp +73 -38
  386. package/nitrogen/generated/ios/Unistyles-Swift-Cxx-Umbrella.hpp +1 -30
  387. package/nitrogen/generated/ios/c++/HybridNativePlatformSpecSwift.hpp +8 -8
  388. package/nitrogen/generated/ios/swift/HybridNativePlatformSpec.swift +4 -16
  389. package/nitrogen/generated/ios/swift/HybridNativePlatformSpecCxx.swift +156 -115
  390. package/nitrogen/generated/ios/swift/UnistyleDependency.swift +4 -0
  391. package/nitrogen/generated/ios/swift/UnistylesNativeMiniRuntime.swift +16 -5
  392. package/nitrogen/generated/shared/c++/ColorScheme.hpp +2 -2
  393. package/nitrogen/generated/shared/c++/HybridNativePlatformSpec.cpp +2 -2
  394. package/nitrogen/generated/shared/c++/HybridNativePlatformSpec.hpp +6 -3
  395. package/nitrogen/generated/shared/c++/HybridUnistylesNavigationBarSpec.cpp +0 -1
  396. package/nitrogen/generated/shared/c++/HybridUnistylesNavigationBarSpec.hpp +3 -1
  397. package/nitrogen/generated/shared/c++/HybridUnistylesRuntimeSpec.cpp +1 -0
  398. package/nitrogen/generated/shared/c++/HybridUnistylesRuntimeSpec.hpp +5 -0
  399. package/nitrogen/generated/shared/c++/HybridUnistylesShadowRegistrySpec.hpp +3 -0
  400. package/nitrogen/generated/shared/c++/HybridUnistylesStatusBarSpec.cpp +0 -1
  401. package/nitrogen/generated/shared/c++/HybridUnistylesStatusBarSpec.hpp +3 -1
  402. package/nitrogen/generated/shared/c++/HybridUnistylesStyleSheetSpec.cpp +2 -1
  403. package/nitrogen/generated/shared/c++/HybridUnistylesStyleSheetSpec.hpp +10 -4
  404. package/nitrogen/generated/shared/c++/Orientation.hpp +2 -2
  405. package/nitrogen/generated/shared/c++/UnistyleDependency.hpp +2 -1
  406. package/nitrogen/generated/shared/c++/UnistylesCxxMiniRuntime.hpp +10 -9
  407. package/nitrogen/generated/shared/c++/UnistylesNativeMiniRuntime.hpp +9 -8
  408. package/package.json +20 -30
  409. package/plugin/common.js +31 -3
  410. package/plugin/index.js +107 -18
  411. package/plugin/ref.js +140 -14
  412. package/plugin/style.js +208 -22
  413. package/plugin/stylesheet.js +53 -3
  414. package/plugin/variants.js +33 -0
  415. package/src/components/Display.tsx +12 -0
  416. package/src/components/Hide.tsx +12 -0
  417. package/src/components/index.ts +2 -0
  418. package/src/components/useMedia.ts +64 -0
  419. package/src/components/useMedia.web.ts +47 -0
  420. package/src/core/createUnistylesComponent.native.tsx +83 -0
  421. package/src/core/createUnistylesComponent.tsx +84 -0
  422. package/src/core/index.ts +1 -0
  423. package/src/index.ts +3 -12
  424. package/src/mq.ts +27 -9
  425. package/src/specs/NativePlatform/NativePlatform.nitro.ts +7 -5
  426. package/src/specs/NavigtionBar/UnistylesNavigationBar.nitro.ts +0 -1
  427. package/src/specs/NavigtionBar/index.ts +1 -25
  428. package/src/specs/ShadowRegistry/index.ts +16 -10
  429. package/src/specs/ShadowRegistry/types.ts +4 -1
  430. package/src/specs/StatusBar/UnistylesStatusBar.nitro.ts +0 -1
  431. package/src/specs/StatusBar/index.ts +2 -12
  432. package/src/specs/StyleSheet/UnistylesStyleSheet.nitro.ts +4 -1
  433. package/src/specs/StyleSheet/index.ts +6 -1
  434. package/src/specs/UnistylesRuntime/UnistylesRuntime.nitro.ts +1 -1
  435. package/src/specs/UnistylesRuntime/index.ts +5 -4
  436. package/src/specs/index.ts +6 -2
  437. package/src/specs/index.web.ts +1 -1
  438. package/src/types/breakpoints.ts +25 -13
  439. package/src/types/common.ts +1 -0
  440. package/src/types/index.ts +1 -1
  441. package/src/types/stylesheet.ts +7 -5
  442. package/src/types/variants.ts +7 -1
  443. package/src/utils.ts +22 -0
  444. package/{web → src/web}/convert/index.ts +25 -25
  445. package/src/web/convert/object/boxShadow.ts +55 -0
  446. package/src/web/convert/object/filter.ts +39 -0
  447. package/src/web/convert/object/index.ts +3 -0
  448. package/src/web/convert/object/objectStyle.ts +69 -0
  449. package/src/web/convert/object/transform.ts +24 -0
  450. package/src/web/convert/pseudo.ts +137 -0
  451. package/src/web/convert/shadow/boxShadow.ts +50 -0
  452. package/src/web/convert/shadow/getShadowBreakpoints.ts +34 -0
  453. package/src/web/convert/shadow/index.ts +2 -0
  454. package/src/web/convert/shadow/textShadow.ts +48 -0
  455. package/{web → src/web}/convert/style.ts +61 -10
  456. package/{web → src/web}/convert/types.ts +9 -2
  457. package/{web → src/web}/convert/utils.ts +11 -5
  458. package/src/web/create.ts +48 -0
  459. package/{web → src/web}/index.ts +4 -3
  460. package/src/web/listener.ts +63 -0
  461. package/{web → src/web}/mock.ts +3 -14
  462. package/src/web/registry.ts +215 -0
  463. package/{web → src/web}/runtime.ts +32 -21
  464. package/src/web/shadowRegistry.ts +145 -0
  465. package/src/web/state.ts +94 -0
  466. package/src/web/utils/common.ts +45 -0
  467. package/src/web/utils/index.ts +2 -0
  468. package/src/web/utils/unistyle.ts +108 -0
  469. package/src/web/variants/getVariants.ts +42 -0
  470. package/src/web/variants/index.ts +2 -0
  471. package/src/web/variants/useVariants.ts +65 -0
  472. package/android/src/main/cxx/helpers.cpp +0 -105
  473. package/android/src/main/cxx/helpers.h +0 -16
  474. package/android/src/main/cxx/platform.cpp +0 -170
  475. package/android/src/main/cxx/platform.h +0 -20
  476. package/lib/typescript/example/App.d.ts +0 -4
  477. package/lib/typescript/example/App.d.ts.map +0 -1
  478. package/lib/typescript/example/unistyles.d.ts +0 -63
  479. package/lib/typescript/example/unistyles.d.ts.map +0 -1
  480. package/lib/typescript/expo-example/App.d.ts +0 -4
  481. package/lib/typescript/expo-example/App.d.ts.map +0 -1
  482. package/lib/typescript/expo-example/unistyles.d.ts +0 -63
  483. package/lib/typescript/expo-example/unistyles.d.ts.map +0 -1
  484. package/lib/typescript/web/convert/boxShadow.d.ts +0 -3
  485. package/lib/typescript/web/convert/boxShadow.d.ts.map +0 -1
  486. package/lib/typescript/web/convert/breakpoint.d.ts +0 -3
  487. package/lib/typescript/web/convert/breakpoint.d.ts.map +0 -1
  488. package/lib/typescript/web/convert/index.d.ts +0 -4
  489. package/lib/typescript/web/convert/index.d.ts.map +0 -1
  490. package/lib/typescript/web/convert/shadow.d.ts +0 -2
  491. package/lib/typescript/web/convert/shadow.d.ts.map +0 -1
  492. package/lib/typescript/web/convert/style.d.ts +0 -3
  493. package/lib/typescript/web/convert/style.d.ts.map +0 -1
  494. package/lib/typescript/web/convert/textShadow.d.ts +0 -3
  495. package/lib/typescript/web/convert/textShadow.d.ts.map +0 -1
  496. package/lib/typescript/web/convert/transform.d.ts +0 -5
  497. package/lib/typescript/web/convert/transform.d.ts.map +0 -1
  498. package/lib/typescript/web/convert/types.d.ts.map +0 -1
  499. package/lib/typescript/web/convert/utils.d.ts +0 -8
  500. package/lib/typescript/web/convert/utils.d.ts.map +0 -1
  501. package/lib/typescript/web/create.d.ts +0 -2449
  502. package/lib/typescript/web/index.d.ts +0 -2464
  503. package/lib/typescript/web/listener/index.d.ts +0 -2
  504. package/lib/typescript/web/listener/index.d.ts.map +0 -1
  505. package/lib/typescript/web/listener/listener.d.ts.map +0 -1
  506. package/lib/typescript/web/mock.d.ts +0 -14
  507. package/lib/typescript/web/mock.d.ts.map +0 -1
  508. package/lib/typescript/web/mq.d.ts +0 -4
  509. package/lib/typescript/web/mq.d.ts.map +0 -1
  510. package/lib/typescript/web/pseudo.d.ts +0 -4
  511. package/lib/typescript/web/pseudo.d.ts.map +0 -1
  512. package/lib/typescript/web/registry.d.ts +0 -12
  513. package/lib/typescript/web/registry.d.ts.map +0 -1
  514. package/lib/typescript/web/runtime.d.ts.map +0 -1
  515. package/lib/typescript/web/state.d.ts +0 -24
  516. package/lib/typescript/web/state.d.ts.map +0 -1
  517. package/lib/typescript/web/useVariants.d.ts +0 -3
  518. package/lib/typescript/web/useVariants.d.ts.map +0 -1
  519. package/lib/typescript/web/utils.d.ts +0 -18
  520. package/lib/typescript/web/utils.d.ts.map +0 -1
  521. package/nitrogen/generated/android/c++/JFunc_void_std__vector_UnistyleDependency_.hpp +0 -60
  522. package/plugin/__tests__/dependencies.spec.js +0 -360
  523. package/plugin/__tests__/ref.spec.js +0 -991
  524. package/plugin/__tests__/stylesheet.spec.js +0 -396
  525. package/web/convert/boxShadow.ts +0 -72
  526. package/web/convert/breakpoint.ts +0 -21
  527. package/web/convert/shadow.ts +0 -68
  528. package/web/convert/textShadow.ts +0 -69
  529. package/web/convert/transform.ts +0 -89
  530. package/web/create.ts +0 -102
  531. package/web/listener/index.ts +0 -1
  532. package/web/listener/listener.ts +0 -33
  533. package/web/mq.ts +0 -19
  534. package/web/pseudo.ts +0 -11
  535. package/web/registry.ts +0 -41
  536. package/web/state.ts +0 -148
  537. package/web/useVariants.ts +0 -99
  538. package/web/utils.ts +0 -95
  539. /package/nitrogen/generated/android/{UnistylesOnLoad.kt → unistylesOnLoad.kt} +0 -0
  540. /package/{web → src/web}/convert/module.d.ts +0 -0
@@ -1,7 +1,6 @@
1
1
  import { create } from './create'
2
- import { UnistylesRuntime } from './runtime'
3
2
  import { UnistylesState } from './state'
4
- import { deepMergeObjects } from './utils'
3
+ import { deepMergeObjects } from '../utils'
5
4
 
6
5
  export const StyleSheet = {
7
6
  configure: UnistylesState.init,
@@ -19,6 +18,8 @@ export const StyleSheet = {
19
18
  }
20
19
 
21
20
  export { UnistylesRuntime } from './runtime'
21
+ export { UnistylesShadowRegistry } from './shadowRegistry'
22
22
  export * from './mock'
23
23
 
24
- export const getSSRUnistyles = () => UnistylesRuntime.getSSRUnistyles()
24
+ // TODO: Work on SSR
25
+ export const getSSRUnistyles = () => []
@@ -0,0 +1,63 @@
1
+ import { UnistyleDependency } from '../specs/NativePlatform'
2
+ import { UnistylesRuntime } from './runtime'
3
+
4
+ class UnistylesListenerBuilder {
5
+ private isInitialized = false
6
+ private listeners = Array.from({ length: Object.keys(UnistyleDependency).length / 2 }, () => new Set<VoidFunction>())
7
+ private stylesheetListeners = Array.from({ length: Object.keys(UnistyleDependency).length / 2 }, () => new Set<VoidFunction>())
8
+
9
+ emitChange = (dependency: UnistyleDependency) => {
10
+ this.stylesheetListeners[dependency]?.forEach(listener => listener())
11
+ this.listeners[dependency]?.forEach(listener => listener())
12
+ }
13
+
14
+ initListeners = () => {
15
+ if (this.isInitialized) {
16
+ return
17
+ }
18
+
19
+ this.isInitialized = true
20
+ UnistylesRuntime.darkMedia?.addEventListener('change', event => {
21
+ if (!event.matches) {
22
+ return
23
+ }
24
+
25
+ this.emitChange(UnistyleDependency.ColorScheme)
26
+
27
+ if (UnistylesRuntime.hasAdaptiveThemes) {
28
+ this.emitChange(UnistyleDependency.Theme)
29
+ }
30
+ })
31
+ UnistylesRuntime.lightMedia?.addEventListener('change', event => {
32
+ if (!event.matches) {
33
+ return
34
+ }
35
+
36
+ this.emitChange(UnistyleDependency.ColorScheme)
37
+
38
+ if (UnistylesRuntime.hasAdaptiveThemes) {
39
+ this.emitChange(UnistyleDependency.Theme)
40
+ }
41
+ })
42
+ window.addEventListener('orientationchange', () => this.emitChange(UnistyleDependency.Orientation))
43
+ window.addEventListener('resize', () => this.emitChange(UnistyleDependency.Dimensions))
44
+ }
45
+
46
+ addListeners = (dependencies: Array<UnistyleDependency>, listener: VoidFunction) => {
47
+ dependencies.forEach(dependency => this.listeners[dependency]?.add(listener))
48
+
49
+ return () => {
50
+ dependencies.forEach(dependency => this.listeners[dependency]?.delete(listener))
51
+ }
52
+ }
53
+
54
+ addStylesheetListeners = (dependencies: Array<UnistyleDependency>, listener: VoidFunction) => {
55
+ dependencies.forEach(dependency => this.stylesheetListeners[dependency]?.add(listener))
56
+
57
+ return () => {
58
+ dependencies.forEach(dependency => this.stylesheetListeners[dependency]?.delete(listener))
59
+ }
60
+ }
61
+ }
62
+
63
+ export const UnistylesListener = new UnistylesListenerBuilder()
@@ -1,12 +1,11 @@
1
- import type { UnistylesNavigationBar as NavigationBarSpec } from '../src/specs/NavigtionBar'
2
- import type { UnistylesStatusBar as StatusBarSpec } from '../src/specs/StatusBar'
1
+ import type { UnistylesNavigationBar as NavigationBarSpec } from '../specs/NavigtionBar'
2
+ import type { UnistylesStatusBar as StatusBarSpec } from '../specs/StatusBar'
3
3
 
4
4
  export const StatusBar: StatusBarSpec = {
5
5
  width: 0,
6
6
  height: 0,
7
7
  setStyle: () => {},
8
8
  setHidden: () => {},
9
- setBackgroundColor: () => {},
10
9
  equals: () => true,
11
10
  toString: () => 'StatusBar',
12
11
  __type: 'web',
@@ -17,19 +16,9 @@ export const NavigationBar: NavigationBarSpec = {
17
16
  width: 0,
18
17
  height: 0,
19
18
  setHidden: () => {},
20
- setBackgroundColor: () => {},
21
19
  equals: () => true,
20
+ dispose: () => {},
22
21
  toString: () => 'NavigationBar',
23
22
  __type: 'web',
24
23
  name: 'NavigationBar'
25
24
  }
26
-
27
- export const UnistylesShadowRegistry = {
28
- name: 'UnistylesShadowRegistry',
29
- __type: 'web',
30
- equals: () => true,
31
- toString: () => 'UnistylesShadowRegistry',
32
- dispose: () => {},
33
- add: () => {},
34
- remove: () => {},
35
- }
@@ -0,0 +1,215 @@
1
+ import type { UnistylesTheme, UnistylesValues } from '../types'
2
+ import type { StyleSheet, StyleSheetWithSuperPowers } from '../types/stylesheet'
3
+ import { UnistylesRuntime } from './runtime'
4
+ import { extractMediaQueryValue, keyInObject, getMediaQuery, generateHash, extractUnistyleDependencies } from './utils'
5
+ import { UnistylesListener } from './listener'
6
+ import { convertUnistyles } from './convert'
7
+ import type { UnistyleDependency } from '../specs/NativePlatform'
8
+ import type { UnistylesMiniRuntime } from '../specs'
9
+
10
+ type ApplyRuleProps = {
11
+ hash: string,
12
+ key: string,
13
+ value: any,
14
+ sheet: CSSStyleSheet | CSSMediaRule
15
+ }
16
+
17
+ type RemoveReadonlyStyleKeys<T extends string> = T extends 'length' | 'parentRule' ? never : T
18
+
19
+ class UnistylesRegistryBuilder {
20
+ private readonly stylesheets = new Map<StyleSheetWithSuperPowers<StyleSheet>, StyleSheet>()
21
+ private readonly stylesCounter = new Map<string, Set<UnistylesValues>>()
22
+ #styleTag: HTMLStyleElement | null = null
23
+ private readonly disposeListenersMap = new Map<object, VoidFunction>()
24
+ private readonly dependenciesMap = new Map<StyleSheetWithSuperPowers<StyleSheet>, Set<UnistyleDependency>>()
25
+
26
+ private get styleTag() {
27
+ const tag = this.#styleTag
28
+
29
+ if (!tag) {
30
+ const newTag = document.createElement('style')
31
+
32
+ newTag.id = 'unistyles-web'
33
+ this.#styleTag = newTag
34
+ document.head.appendChild(newTag)
35
+
36
+ return newTag
37
+ }
38
+
39
+ return tag
40
+ }
41
+
42
+ getComputedStylesheet = (stylesheet: StyleSheetWithSuperPowers<StyleSheet>) => {
43
+ if (typeof stylesheet !== 'function') {
44
+ return stylesheet
45
+ }
46
+
47
+ const computedStylesheet = this.stylesheets.get(stylesheet)
48
+
49
+ if (computedStylesheet) {
50
+ return computedStylesheet
51
+ }
52
+
53
+ const createdStylesheet = stylesheet(UnistylesRuntime.theme, UnistylesRuntime.miniRuntime)
54
+ const dependencies = Object.values(createdStylesheet).flatMap(value => extractUnistyleDependencies(value))
55
+
56
+ this.addDependenciesToStylesheet(stylesheet, dependencies)
57
+ this.stylesheets.set(stylesheet, createdStylesheet)
58
+
59
+ return createdStylesheet
60
+ }
61
+
62
+ addDependenciesToStylesheet = (stylesheet: (theme: UnistylesTheme, miniRuntime: UnistylesMiniRuntime) => StyleSheet, dependencies: Array<UnistyleDependency>) => {
63
+ this.disposeListenersMap.get(stylesheet)?.()
64
+
65
+ const dependenciesMap = this.dependenciesMap.get(stylesheet) ?? new Set(dependencies)
66
+
67
+ dependencies.forEach(dependency => dependenciesMap.add(dependency))
68
+
69
+ const dispose = UnistylesListener.addStylesheetListeners(Array.from(dependenciesMap), () => {
70
+ const newComputedStylesheet = stylesheet(UnistylesRuntime.theme, UnistylesRuntime.miniRuntime)
71
+
72
+ this.stylesheets.set(stylesheet, newComputedStylesheet)
73
+ })
74
+
75
+ this.dependenciesMap.set(stylesheet, dependenciesMap)
76
+ this.disposeListenersMap.set(stylesheet, dispose)
77
+ }
78
+
79
+ add = (value: UnistylesValues) => {
80
+ const hash = generateHash(value)
81
+ const existingCounter = this.stylesCounter.get(hash)
82
+
83
+ if (!existingCounter || existingCounter.size === 0) {
84
+ const counter = new Set<UnistylesValues>()
85
+
86
+ counter.add(value)
87
+ this.stylesCounter.set(hash, counter)
88
+ this.applyStyles(hash, convertUnistyles(value))
89
+
90
+ return { hash, existingHash: false }
91
+ }
92
+
93
+ existingCounter.add(value)
94
+
95
+ return { hash, existingHash: true }
96
+ }
97
+
98
+ applyStyles = (hash: string, styles: Record<string, any>) => {
99
+ Object.entries(styles).forEach(([key, value]) => {
100
+ if (!this.styleTag.sheet) {
101
+ return
102
+ }
103
+
104
+ if (typeof value === 'object' && !key.startsWith('_')) {
105
+ const mediaQuery = getMediaQuery(key)
106
+ const cssRules = Array.from(this.styleTag.sheet.cssRules)
107
+ let queryRule = cssRules.find(rule => {
108
+ if (!(rule instanceof CSSMediaRule)) {
109
+ return false
110
+ }
111
+
112
+ return rule.media.item(0)?.includes(mediaQuery)
113
+ }) ?? null
114
+
115
+ if (!queryRule) {
116
+ const mediaQueryValue = extractMediaQueryValue(mediaQuery)
117
+ const ruleIndex = mediaQueryValue
118
+ ? cssRules.reduce<number | undefined>((acc, rule, ruleIndex) => {
119
+ if (!(rule instanceof CSSMediaRule)) {
120
+ return acc
121
+ }
122
+
123
+ const ruleMediaQueryValue = extractMediaQueryValue(rule.conditionText)
124
+
125
+ if (ruleMediaQueryValue === undefined) {
126
+ return
127
+ }
128
+
129
+ return ruleMediaQueryValue > mediaQueryValue ? ruleIndex : acc
130
+ }, cssRules.length)
131
+ : undefined
132
+ queryRule = this.styleTag.sheet.cssRules.item(this.styleTag.sheet.insertRule(`@media ${mediaQuery} {.${hash} {}}`, ruleIndex))
133
+ }
134
+
135
+ if (queryRule instanceof CSSMediaRule) {
136
+ Object.entries(value).forEach(([mqKey, mqValue]) => {
137
+ this.applyRule({
138
+ hash,
139
+ key: mqKey,
140
+ value: mqValue,
141
+ sheet: queryRule
142
+ })
143
+ })
144
+ }
145
+
146
+ return
147
+ }
148
+
149
+ // Pseudo
150
+ if (typeof value === 'object') {
151
+ Object.entries(value).forEach(([pseudoKey, pseudoValue]) => {
152
+ this.applyRule({
153
+ hash: `${hash}${key.replace('_', ':')}`,
154
+ key: pseudoKey,
155
+ value: pseudoValue,
156
+ sheet: this.styleTag.sheet!
157
+ })
158
+ })
159
+
160
+ return
161
+ }
162
+
163
+ this.applyRule({
164
+ hash,
165
+ key,
166
+ value,
167
+ sheet: this.styleTag.sheet
168
+ })
169
+ })
170
+ }
171
+
172
+ private applyRule = ({ hash, key, value, sheet }: ApplyRuleProps) => {
173
+ let rule = Array.from(sheet.cssRules).find(rule => {
174
+ if (!(rule instanceof CSSStyleRule)) {
175
+ return false
176
+ }
177
+
178
+ // In unistyles pseudos are prefixed with ':' but in css some of them are prefixed with '::'
179
+ return rule.selectorText.replace('::', ':').includes(hash)
180
+ }) ?? null
181
+
182
+ if (!rule) {
183
+ rule = sheet.cssRules.item(sheet.insertRule(`.${hash} {}`))
184
+ }
185
+
186
+ if (!(rule instanceof CSSStyleRule) || !keyInObject(rule.style, key)) {
187
+ return
188
+ }
189
+
190
+ rule.style[key as RemoveReadonlyStyleKeys<typeof key>] = value
191
+ }
192
+
193
+ remove = (value: UnistylesValues) => {
194
+ const hash = generateHash(value)
195
+ const existingStyles = this.stylesCounter.get(hash)
196
+
197
+ if (!existingStyles) {
198
+ return
199
+ }
200
+
201
+ existingStyles.delete(value)
202
+
203
+ if (existingStyles.size === 0) {
204
+ const ruleIndex = Array.from(this.styleTag.sheet?.cssRules ?? []).findIndex(rule => rule.cssText.includes(`.${hash}`))
205
+
206
+ if (ruleIndex === -1) {
207
+ return
208
+ }
209
+
210
+ this.styleTag.sheet?.deleteRule(ruleIndex)
211
+ }
212
+ }
213
+ }
214
+
215
+ export const UnistylesRegistry = new UnistylesRegistryBuilder()
@@ -1,11 +1,11 @@
1
- import { UnistyleDependency } from '../src/specs/NativePlatform'
2
- import { ColorScheme, Orientation, type AppTheme, type AppThemeName } from '../src/specs/types'
3
- import type { UnistylesMiniRuntime } from '../src/specs/UnistylesRuntime'
4
- import { WebContentSizeCategory } from '../src/types'
1
+ import { UnistyleDependency } from '../specs/NativePlatform'
2
+ import { ColorScheme, Orientation, type AppTheme, type AppThemeName } from '../specs/types'
3
+ import type { UnistylesMiniRuntime } from '../specs/UnistylesRuntime'
4
+ import { WebContentSizeCategory } from '../types'
5
5
  import { UnistylesListener } from './listener'
6
6
  import { NavigationBar, StatusBar } from './mock'
7
7
  import { UnistylesState } from './state'
8
- import { hexToRGBA, isServer, schemeToTheme } from './utils'
8
+ import { isServer, schemeToTheme } from './utils'
9
9
 
10
10
  class UnistylesRuntimeBuilder {
11
11
  lightMedia = this.getLightMedia()
@@ -47,6 +47,10 @@ class UnistylesRuntimeBuilder {
47
47
  }
48
48
 
49
49
  get themeName() {
50
+ if (UnistylesState.hasAdaptiveThemes) {
51
+ return schemeToTheme(this.colorScheme) as AppThemeName
52
+ }
53
+
50
54
  return UnistylesState.themeName
51
55
  }
52
56
 
@@ -54,6 +58,10 @@ class UnistylesRuntimeBuilder {
54
58
  return WebContentSizeCategory.Unspecified
55
59
  }
56
60
 
61
+ get breakpoints() {
62
+ return UnistylesState.breakpoints ?? {}
63
+ }
64
+
57
65
  get breakpoint() {
58
66
  return UnistylesState.breakpoint
59
67
  }
@@ -67,17 +75,7 @@ class UnistylesRuntimeBuilder {
67
75
  }
68
76
 
69
77
  get theme() {
70
- if (!this.themeName) {
71
- throw new Error('🦄 No theme selected!')
72
- }
73
-
74
- const theme = UnistylesState.themes.get(this.themeName)
75
-
76
- if (!theme) {
77
- throw new Error(`🦄 Theme "${this.themeName}" is not registered!`)
78
- }
79
-
80
- return theme
78
+ return this.getTheme(this.themeName)
81
79
  }
82
80
 
83
81
  get pixelRatio() {
@@ -134,7 +132,8 @@ class UnistylesRuntimeBuilder {
134
132
  themeName: this.themeName,
135
133
  contentSizeCategory: this.contentSizeCategory,
136
134
  breakpoint: this.breakpoint,
137
- orientation: this.orientation,
135
+ isLandscape: this.orientation === Orientation.Landscape,
136
+ isPortrait: this.orientation === Orientation.Portrait,
138
137
  pixelRatio: this.pixelRatio,
139
138
  screen: this.screen,
140
139
  fontScale: this.fontScale,
@@ -169,15 +168,15 @@ class UnistylesRuntimeBuilder {
169
168
  return
170
169
  }
171
170
 
172
- this.setTheme(schemeToTheme(UnistylesRuntime.colorScheme))
171
+ this.setTheme(schemeToTheme(UnistylesRuntime.colorScheme) as AppThemeName)
173
172
  }
174
173
 
175
- setRootViewBackgroundColor = (hex: string, alpha?: number) => {
174
+ setRootViewBackgroundColor = (color: string) => {
176
175
  if (isServer()) {
177
176
  return
178
177
  }
179
178
 
180
- document.documentElement.style.backgroundColor = alpha ? hexToRGBA(hex, alpha) : hex
179
+ document.documentElement.style.backgroundColor = color
181
180
  }
182
181
 
183
182
  setImmersiveMode = () => {}
@@ -192,7 +191,19 @@ class UnistylesRuntimeBuilder {
192
191
  UnistylesState.themes.set(themeName, updater(oldTheme))
193
192
  }
194
193
 
195
- getSSRUnistyles = () => UnistylesState.tags
194
+ getTheme = (themeName = this.themeName) => {
195
+ if (!themeName) {
196
+ throw new Error('🦄 No theme selected!')
197
+ }
198
+
199
+ const theme = UnistylesState.themes.get(themeName)
200
+
201
+ if (!theme) {
202
+ throw new Error(`🦄 Theme "${this.themeName}" is not registered!`)
203
+ }
204
+
205
+ return theme
206
+ }
196
207
  }
197
208
 
198
209
  export const UnistylesRuntime = new UnistylesRuntimeBuilder()
@@ -0,0 +1,145 @@
1
+ import type { UnistylesValues } from '../types'
2
+ import { convertUnistyles } from './convert'
3
+ import { UnistylesListener } from './listener'
4
+ import { UnistylesRegistry } from './registry'
5
+ import { deepMergeObjects } from '../utils'
6
+ import { equal, extractSecrets, extractUnistyleDependencies, isInDocument } from './utils'
7
+ import { getVariants } from './variants'
8
+
9
+ type Style = UnistylesValues | ((...args: Array<any>) => UnistylesValues)
10
+
11
+ class UnistylesShadowRegistryBuilder {
12
+ // MOCKS
13
+ name = 'UnistylesShadowRegistry'
14
+ __type = 'web'
15
+ equals = () => true
16
+ toString = () => 'UnistylesShadowRegistry'
17
+ dispose = () => {}
18
+ // END MOCKS
19
+
20
+ private resultsMap = new Map<HTMLElement, UnistylesValues>()
21
+ private hashMap = new Map<HTMLElement, string>()
22
+ private classNamesMap = new Map<HTMLElement, Array<string>>()
23
+
24
+ add = (ref: any, _style: Array<Style>, _variants: Record<string, any> | undefined, _args: Array<Array<any>>) => {
25
+ // Style is not provided
26
+ if (!_style) {
27
+ return
28
+ }
29
+
30
+ // Ref is unmounted, remove style tags from the document
31
+ if (ref === null) {
32
+ const secrets = extractSecrets(_style)
33
+
34
+ secrets.forEach(({ __uni__refs }) => {
35
+ __uni__refs.forEach(ref => {
36
+ if (isInDocument(ref)) {
37
+ return
38
+ }
39
+
40
+ const oldResult = this.resultsMap.get(ref)
41
+ this.resultsMap.delete(ref)
42
+ this.classNamesMap.delete(ref)
43
+
44
+ if (oldResult) {
45
+ UnistylesRegistry.remove(oldResult)
46
+ }
47
+ })
48
+ })
49
+
50
+ return
51
+ }
52
+
53
+ // Ref is not an HTMLElement
54
+ if (!(ref instanceof HTMLElement)) {
55
+ return
56
+ }
57
+
58
+ const styles = _style.filter(style => Object.keys(style ?? {}).some(key => key.startsWith('__uni__')))
59
+
60
+ // No unistyles
61
+ if (styles.length === 0) {
62
+ return
63
+ }
64
+
65
+ const parsedStyles = styles.flatMap((style, styleIndex) => extractSecrets(style).map(secret => {
66
+ const { __uni__key, __uni__stylesheet, __uni__variants, __uni__args = [], __uni__refs } = secret
67
+ const newComputedStylesheet = UnistylesRegistry.getComputedStylesheet(__uni__stylesheet)
68
+ const style = newComputedStylesheet[__uni__key]!
69
+ const variants = _variants && Object.keys(_variants).length > 0 ? _variants : __uni__variants
70
+ const args = _args[styleIndex] ? _args[styleIndex] : __uni__args
71
+ const result = typeof style === 'function'
72
+ ? style(...args)
73
+ : style
74
+ const { variantsResult } = Object.fromEntries(getVariants({ variantsResult: result }, variants))
75
+ const resultWithVariants = deepMergeObjects(result, variantsResult ?? {})
76
+ const dependencies = extractUnistyleDependencies(resultWithVariants)
77
+
78
+ if (typeof __uni__stylesheet === 'function') {
79
+ // Add dependencies from dynamic styles to stylesheet
80
+ UnistylesRegistry.addDependenciesToStylesheet(__uni__stylesheet, dependencies)
81
+ }
82
+
83
+ __uni__refs.add(ref)
84
+
85
+ const dispose = UnistylesListener.addListeners(extractUnistyleDependencies(resultWithVariants), () => {
86
+ const hash = this.hashMap.get(ref)
87
+
88
+ // Dispose listener if there is no hash
89
+ if (!hash) {
90
+ dispose()
91
+
92
+ return
93
+ }
94
+
95
+ const newComputedStyleSheet = UnistylesRegistry.getComputedStylesheet(__uni__stylesheet)
96
+ const newValue = newComputedStyleSheet[__uni__key]!
97
+ const result = typeof newValue === 'function'
98
+ ? newValue(...args)
99
+ : newValue
100
+ const { variantsResult } = Object.fromEntries(getVariants({ variantsResult: result }, variants))
101
+ const resultWithVariants = deepMergeObjects(result, variantsResult ?? {})
102
+
103
+ UnistylesRegistry.applyStyles(hash, convertUnistyles(resultWithVariants))
104
+ })
105
+
106
+ return resultWithVariants as UnistylesValues
107
+ }))
108
+ const combinedStyles = deepMergeObjects(...parsedStyles)
109
+ const oldStyles = this.resultsMap.get(ref)
110
+
111
+ if (equal(combinedStyles, oldStyles)) {
112
+ return
113
+ }
114
+
115
+ const oldClassNames = this.classNamesMap.get(ref)
116
+
117
+ // Remove old styles
118
+ if (oldStyles) {
119
+ UnistylesRegistry.remove(oldStyles)
120
+ }
121
+
122
+ // Remove old classnames from the ref
123
+ oldClassNames?.forEach(className => ref.classList.remove(className))
124
+ this.resultsMap.set(ref, combinedStyles)
125
+
126
+ const { hash, existingHash } = UnistylesRegistry.add(combinedStyles)
127
+ const injectedClassNames = combinedStyles?._web?._classNames ?? []
128
+ const newClassNames = (Array.isArray(injectedClassNames) ? injectedClassNames : [injectedClassNames]).concat(hash)
129
+
130
+ this.classNamesMap.set(ref, newClassNames)
131
+ // Add new classnames to the ref
132
+ ref.classList.add(...newClassNames)
133
+
134
+ // If it is new hash add it to the map to use for the listener
135
+ if (!existingHash) {
136
+ this.hashMap.set(ref, hash)
137
+ }
138
+
139
+ return newClassNames
140
+ }
141
+
142
+ remove = () => {}
143
+ }
144
+
145
+ export const UnistylesShadowRegistry = new UnistylesShadowRegistryBuilder()
@@ -0,0 +1,94 @@
1
+ import type { UnistylesTheme } from '../types'
2
+ import type { UnistylesConfig } from '../specs/StyleSheet'
3
+ import type { AppBreakpoint, AppTheme, AppThemeName } from '../specs/types'
4
+ import type { UnistylesBreakpoints, UnistylesThemes } from '../global'
5
+ import { UnistylesRuntime } from './runtime'
6
+ import { isServer, schemeToTheme } from './utils'
7
+ import { UnistylesListener } from './listener'
8
+ import { UnistyleDependency } from '../specs/NativePlatform'
9
+
10
+ class UnistylesStateBuilder {
11
+ themes = new Map<string, UnistylesTheme>()
12
+ themeName?: AppThemeName
13
+
14
+ private matchingBreakpoints = new Map<string, boolean>()
15
+
16
+ get breakpoint() {
17
+ const [currentBreakpoint] = Array.from(this.matchingBreakpoints)
18
+ .reverse()
19
+ .find(([_key, value]) => value) ?? []
20
+
21
+ return currentBreakpoint as AppBreakpoint | undefined
22
+ }
23
+
24
+ breakpoints?: UnistylesBreakpoints
25
+
26
+ hasAdaptiveThemes = false
27
+
28
+ init = (config: UnistylesConfig) => {
29
+ this.initThemes(config.themes)
30
+ this.initBreakpoints(config.breakpoints)
31
+ this.initSettings(config.settings)
32
+
33
+ if (isServer()) {
34
+ return
35
+ }
36
+
37
+ UnistylesListener.initListeners()
38
+ }
39
+
40
+ private initThemes = (themes = {} as UnistylesThemes) => {
41
+ Object.entries(themes).forEach(([themeName, theme]) => {
42
+ this.themes.set(themeName, theme as AppTheme)
43
+ })
44
+ }
45
+
46
+ private initSettings = (settings: UnistylesConfig['settings']) => {
47
+ this.hasAdaptiveThemes = settings?.adaptiveThemes ?? false
48
+ const themeNames = Array.from(this.themes.keys()) as Array<AppThemeName>
49
+
50
+ // Single theme + no settings
51
+ if (!settings?.adaptiveThemes && !settings?.initialTheme && themeNames.length === 1) {
52
+ this.themeName = themeNames[0]
53
+
54
+ return
55
+ }
56
+
57
+ // No settings
58
+ if (!settings?.adaptiveThemes && !settings?.initialTheme) {
59
+ throw new Error('🦄 You need to specify either "initialTheme" or "adaptiveThemes" in your config')
60
+ }
61
+
62
+ // Adaptive themes
63
+ if (settings.adaptiveThemes) {
64
+ this.themeName = schemeToTheme(UnistylesRuntime.colorScheme) as AppThemeName
65
+
66
+ return
67
+ }
68
+
69
+ // Initial theme
70
+ this.themeName = typeof settings.initialTheme === 'function' ? settings.initialTheme() : settings.initialTheme
71
+ }
72
+
73
+ private initBreakpoints = (breakpoints = {} as UnistylesBreakpoints) => {
74
+ this.breakpoints = breakpoints
75
+
76
+ Object.entries(breakpoints)
77
+ .sort(([, a], [, b]) => a - b)
78
+ .forEach(([breakpoint, value]) => {
79
+ if (isServer()) {
80
+ return
81
+ }
82
+
83
+ const mediaQuery = window.matchMedia(`(min-width: ${value}px)`)
84
+ this.matchingBreakpoints.set(breakpoint, mediaQuery.matches)
85
+
86
+ mediaQuery.addEventListener('change', event => {
87
+ this.matchingBreakpoints.set(breakpoint, event.matches)
88
+ UnistylesListener.emitChange(UnistyleDependency.Breakpoints)
89
+ })
90
+ })
91
+ }
92
+ }
93
+
94
+ export const UnistylesState = new UnistylesStateBuilder()