react-native-unistyles 3.0.0-beta.3 → 3.0.0-beta.5

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 (496) hide show
  1. package/README.md +6 -3
  2. package/android/src/main/cxx/NativeUnistylesModule.cpp +1 -1
  3. package/android/src/main/cxx/NativeUnistylesModule.h +1 -1
  4. package/components/native/ActivityIndicator/package.json +2 -1
  5. package/components/native/FlatList/package.json +2 -1
  6. package/components/native/Image/package.json +2 -1
  7. package/components/native/ImageBackground/package.json +2 -1
  8. package/components/native/KeyboardAvoidingView/package.json +2 -1
  9. package/components/native/Pressable/package.json +1 -1
  10. package/components/native/RefreshControl/package.json +2 -1
  11. package/components/native/ScrollView/package.json +2 -1
  12. package/components/native/SectionList/package.json +2 -1
  13. package/components/native/Switch/package.json +2 -1
  14. package/components/native/Text/package.json +2 -1
  15. package/components/native/TextInput/package.json +2 -1
  16. package/components/native/TouchableHighlight/package.json +2 -1
  17. package/components/native/TouchableOpacity/package.json +2 -1
  18. package/components/native/View/package.json +2 -1
  19. package/components/native/VirtualizedList/package.json +2 -1
  20. package/cxx/common/Constants.h +4 -4
  21. package/cxx/common/Helpers.h +1 -1
  22. package/cxx/core/HashGenerator.cpp +23 -0
  23. package/cxx/core/HashGenerator.h +13 -0
  24. package/cxx/core/HostUnistyle.cpp +83 -0
  25. package/cxx/core/HostUnistyle.h +27 -0
  26. package/cxx/core/RNStyle.h +18 -0
  27. package/cxx/core/Unistyle.h +9 -4
  28. package/cxx/core/UnistyleWrapper.h +92 -47
  29. package/cxx/core/UnistylesRegistry.cpp +19 -11
  30. package/cxx/core/UnistylesRegistry.h +2 -4
  31. package/cxx/hybridObjects/HybridNavigationBar.cpp +3 -3
  32. package/cxx/hybridObjects/HybridNavigationBar.h +2 -2
  33. package/cxx/hybridObjects/HybridShadowRegistry.cpp +32 -45
  34. package/cxx/hybridObjects/HybridShadowRegistry.h +0 -10
  35. package/cxx/hybridObjects/HybridStatusBar.cpp +3 -3
  36. package/cxx/hybridObjects/HybridStatusBar.h +2 -2
  37. package/cxx/hybridObjects/HybridStyleSheet.cpp +25 -8
  38. package/cxx/hybridObjects/HybridStyleSheet.h +2 -1
  39. package/cxx/hybridObjects/HybridUnistylesRuntime.cpp +15 -15
  40. package/cxx/hybridObjects/HybridUnistylesRuntime.h +2 -2
  41. package/cxx/parser/Parser.cpp +17 -24
  42. package/cxx/parser/Parser.h +2 -1
  43. package/ios/NativePlatform+ios.swift +5 -7
  44. package/ios/NativePlatform.swift +2 -2
  45. package/ios/UnistylesModuleOnLoad.mm +2 -1
  46. package/lib/commonjs/components/ScopedTheme.js.map +1 -1
  47. package/lib/commonjs/components/index.js +0 -7
  48. package/lib/commonjs/components/index.js.map +1 -1
  49. package/lib/commonjs/components/native/ImageBackground.js +45 -1
  50. package/lib/commonjs/components/native/ImageBackground.js.map +1 -1
  51. package/lib/commonjs/components/native/ImageBackground.native.js +10 -0
  52. package/lib/commonjs/components/native/ImageBackground.native.js.map +1 -0
  53. package/lib/commonjs/components/native/Pressable.js +26 -51
  54. package/lib/commonjs/components/native/Pressable.js.map +1 -1
  55. package/lib/commonjs/components/native/Pressable.native.js +14 -11
  56. package/lib/commonjs/components/native/Pressable.native.js.map +1 -1
  57. package/lib/commonjs/core/createUnistylesElement.js +29 -5
  58. package/lib/commonjs/core/createUnistylesElement.js.map +1 -1
  59. package/lib/commonjs/core/createUnistylesElement.native.js +40 -0
  60. package/lib/commonjs/core/createUnistylesElement.native.js.map +1 -0
  61. package/lib/commonjs/core/createUnistylesImageBackground.js +36 -14
  62. package/lib/commonjs/core/createUnistylesImageBackground.js.map +1 -1
  63. package/lib/commonjs/core/getClassname.js +25 -0
  64. package/lib/commonjs/core/getClassname.js.map +1 -0
  65. package/lib/commonjs/core/getClassname.native.js +9 -0
  66. package/lib/commonjs/core/getClassname.native.js.map +1 -0
  67. package/lib/commonjs/core/index.js +14 -7
  68. package/lib/commonjs/core/index.js.map +1 -1
  69. package/lib/commonjs/core/passForwardRef.js +2 -2
  70. package/lib/commonjs/core/passForwardRef.js.map +1 -1
  71. package/lib/commonjs/core/useProxifiedUnistyles/index.js +13 -0
  72. package/lib/commonjs/core/useProxifiedUnistyles/index.js.map +1 -0
  73. package/lib/commonjs/core/useProxifiedUnistyles/listener.js +22 -0
  74. package/lib/commonjs/core/useProxifiedUnistyles/listener.js.map +1 -0
  75. package/lib/commonjs/core/useProxifiedUnistyles/listener.native.js +26 -0
  76. package/lib/commonjs/core/useProxifiedUnistyles/listener.native.js.map +1 -0
  77. package/lib/commonjs/core/useProxifiedUnistyles/types.js +6 -0
  78. package/lib/commonjs/core/useProxifiedUnistyles/types.js.map +1 -0
  79. package/lib/commonjs/core/{withUnistyles/useDependencies.js → useProxifiedUnistyles/useProxifiedUnistyles.js} +22 -22
  80. package/lib/commonjs/core/useProxifiedUnistyles/useProxifiedUnistyles.js.map +1 -0
  81. package/lib/commonjs/core/useUnistyles.js +19 -0
  82. package/lib/commonjs/core/useUnistyles.js.map +1 -0
  83. package/lib/commonjs/core/warn.js +16 -0
  84. package/lib/commonjs/core/warn.js.map +1 -0
  85. package/lib/commonjs/core/withUnistyles/withUnistyles.js +19 -55
  86. package/lib/commonjs/core/withUnistyles/withUnistyles.js.map +1 -1
  87. package/lib/commonjs/core/withUnistyles/withUnistyles.native.js +32 -65
  88. package/lib/commonjs/core/withUnistyles/withUnistyles.native.js.map +1 -1
  89. package/lib/commonjs/index.js +23 -4
  90. package/lib/commonjs/index.js.map +1 -1
  91. package/lib/commonjs/server/getServerUnistyles.js +38 -0
  92. package/lib/commonjs/server/getServerUnistyles.js.map +1 -0
  93. package/lib/commonjs/server/hydrateServerUnistyles.js +17 -0
  94. package/lib/commonjs/server/hydrateServerUnistyles.js.map +1 -0
  95. package/lib/commonjs/server/index.js +34 -0
  96. package/lib/commonjs/server/index.js.map +1 -0
  97. package/lib/commonjs/server/resetServerUnistyles.js +16 -0
  98. package/lib/commonjs/server/resetServerUnistyles.js.map +1 -0
  99. package/lib/commonjs/server/types.js +8 -0
  100. package/lib/commonjs/server/types.js.map +1 -0
  101. package/lib/commonjs/server/useServerUnistyles.js +27 -0
  102. package/lib/commonjs/server/useServerUnistyles.js.map +1 -0
  103. package/lib/commonjs/specs/ShadowRegistry/index.js +6 -3
  104. package/lib/commonjs/specs/ShadowRegistry/index.js.map +1 -1
  105. package/lib/commonjs/specs/StyleSheet/index.js.map +1 -1
  106. package/lib/commonjs/utils.js +4 -2
  107. package/lib/commonjs/utils.js.map +1 -1
  108. package/lib/commonjs/web/convert/object/filter.js +2 -2
  109. package/lib/commonjs/web/convert/object/filter.js.map +1 -1
  110. package/lib/commonjs/web/convert/style.js +4 -4
  111. package/lib/commonjs/web/convert/style.js.map +1 -1
  112. package/lib/commonjs/web/create.js +20 -15
  113. package/lib/commonjs/web/create.js.map +1 -1
  114. package/lib/commonjs/web/css/core.js +55 -0
  115. package/lib/commonjs/web/css/core.js.map +1 -0
  116. package/lib/commonjs/web/css/index.js +17 -0
  117. package/lib/commonjs/web/css/index.js.map +1 -0
  118. package/lib/commonjs/web/css/state.js +155 -0
  119. package/lib/commonjs/web/css/state.js.map +1 -0
  120. package/lib/commonjs/web/css/utils.js +47 -0
  121. package/lib/commonjs/web/css/utils.js.map +1 -0
  122. package/lib/commonjs/web/index.js +14 -18
  123. package/lib/commonjs/web/index.js.map +1 -1
  124. package/lib/commonjs/web/listener.js +9 -7
  125. package/lib/commonjs/web/listener.js.map +1 -1
  126. package/lib/commonjs/web/registry.js +44 -123
  127. package/lib/commonjs/web/registry.js.map +1 -1
  128. package/lib/commonjs/web/runtime.js +28 -21
  129. package/lib/commonjs/web/runtime.js.map +1 -1
  130. package/lib/commonjs/web/services.js +28 -0
  131. package/lib/commonjs/web/services.js.map +1 -0
  132. package/lib/commonjs/web/shadowRegistry.js +46 -93
  133. package/lib/commonjs/web/shadowRegistry.js.map +1 -1
  134. package/lib/commonjs/web/state.js +39 -9
  135. package/lib/commonjs/web/state.js.map +1 -1
  136. package/lib/commonjs/web/types.js +6 -0
  137. package/lib/commonjs/web/types.js.map +1 -0
  138. package/lib/commonjs/web/utils/common.js +29 -9
  139. package/lib/commonjs/web/utils/common.js.map +1 -1
  140. package/lib/commonjs/web/utils/unistyle.js +28 -19
  141. package/lib/commonjs/web/utils/unistyle.js.map +1 -1
  142. package/lib/commonjs/web/variants.js +25 -27
  143. package/lib/commonjs/web/variants.js.map +1 -1
  144. package/lib/module/components/ScopedTheme.js.map +1 -1
  145. package/lib/module/components/index.js +0 -1
  146. package/lib/module/components/index.js.map +1 -1
  147. package/lib/module/components/native/ImageBackground.js +45 -2
  148. package/lib/module/components/native/ImageBackground.js.map +1 -1
  149. package/lib/module/components/native/ImageBackground.native.js +6 -0
  150. package/lib/module/components/native/ImageBackground.native.js.map +1 -0
  151. package/lib/module/components/native/Pressable.js +27 -52
  152. package/lib/module/components/native/Pressable.js.map +1 -1
  153. package/lib/module/components/native/Pressable.native.js +15 -12
  154. package/lib/module/components/native/Pressable.native.js.map +1 -1
  155. package/lib/module/core/createUnistylesElement.js +29 -5
  156. package/lib/module/core/createUnistylesElement.js.map +1 -1
  157. package/lib/module/core/createUnistylesElement.native.js +33 -0
  158. package/lib/module/core/createUnistylesElement.native.js.map +1 -0
  159. package/lib/module/core/createUnistylesImageBackground.js +34 -13
  160. package/lib/module/core/createUnistylesImageBackground.js.map +1 -1
  161. package/lib/module/core/getClassname.js +20 -0
  162. package/lib/module/core/getClassname.js.map +1 -0
  163. package/lib/module/core/getClassname.native.js +4 -0
  164. package/lib/module/core/getClassname.native.js.map +1 -0
  165. package/lib/module/core/index.js +2 -1
  166. package/lib/module/core/index.js.map +1 -1
  167. package/lib/module/core/passForwardRef.js +2 -2
  168. package/lib/module/core/passForwardRef.js.map +1 -1
  169. package/lib/module/core/useProxifiedUnistyles/index.js +4 -0
  170. package/lib/module/core/useProxifiedUnistyles/index.js.map +1 -0
  171. package/lib/module/core/useProxifiedUnistyles/listener.js +17 -0
  172. package/lib/module/core/useProxifiedUnistyles/listener.js.map +1 -0
  173. package/lib/module/core/useProxifiedUnistyles/listener.native.js +21 -0
  174. package/lib/module/core/useProxifiedUnistyles/listener.native.js.map +1 -0
  175. package/lib/module/core/useProxifiedUnistyles/types.js +4 -0
  176. package/lib/module/core/useProxifiedUnistyles/types.js.map +1 -0
  177. package/lib/module/core/{withUnistyles/useDependencies.js → useProxifiedUnistyles/useProxifiedUnistyles.js} +19 -19
  178. package/lib/module/core/useProxifiedUnistyles/useProxifiedUnistyles.js.map +1 -0
  179. package/lib/module/core/useUnistyles.js +14 -0
  180. package/lib/module/core/useUnistyles.js.map +1 -0
  181. package/lib/module/core/warn.js +11 -0
  182. package/lib/module/core/warn.js.map +1 -0
  183. package/lib/module/core/withUnistyles/withUnistyles.js +19 -55
  184. package/lib/module/core/withUnistyles/withUnistyles.js.map +1 -1
  185. package/lib/module/core/withUnistyles/withUnistyles.native.js +33 -66
  186. package/lib/module/core/withUnistyles/withUnistyles.native.js.map +1 -1
  187. package/lib/module/index.js +3 -2
  188. package/lib/module/index.js.map +1 -1
  189. package/lib/module/server/getServerUnistyles.js +32 -0
  190. package/lib/module/server/getServerUnistyles.js.map +1 -0
  191. package/lib/module/server/hydrateServerUnistyles.js +12 -0
  192. package/lib/module/server/hydrateServerUnistyles.js.map +1 -0
  193. package/lib/module/server/index.js +7 -0
  194. package/lib/module/server/index.js.map +1 -0
  195. package/lib/module/server/resetServerUnistyles.js +11 -0
  196. package/lib/module/server/resetServerUnistyles.js.map +1 -0
  197. package/lib/module/server/types.js +4 -0
  198. package/lib/module/server/types.js.map +1 -0
  199. package/lib/module/server/useServerUnistyles.js +22 -0
  200. package/lib/module/server/useServerUnistyles.js.map +1 -0
  201. package/lib/module/specs/ShadowRegistry/index.js +6 -3
  202. package/lib/module/specs/ShadowRegistry/index.js.map +1 -1
  203. package/lib/module/specs/StyleSheet/index.js.map +1 -1
  204. package/lib/module/utils.js +2 -1
  205. package/lib/module/utils.js.map +1 -1
  206. package/lib/module/web/convert/object/filter.js +2 -2
  207. package/lib/module/web/convert/object/filter.js.map +1 -1
  208. package/lib/module/web/convert/style.js +4 -4
  209. package/lib/module/web/convert/style.js.map +1 -1
  210. package/lib/module/web/create.js +20 -15
  211. package/lib/module/web/create.js.map +1 -1
  212. package/lib/module/web/css/core.js +50 -0
  213. package/lib/module/web/css/core.js.map +1 -0
  214. package/lib/module/web/css/index.js +4 -0
  215. package/lib/module/web/css/index.js.map +1 -0
  216. package/lib/module/web/css/state.js +150 -0
  217. package/lib/module/web/css/state.js.map +1 -0
  218. package/lib/module/web/css/utils.js +41 -0
  219. package/lib/module/web/css/utils.js.map +1 -0
  220. package/lib/module/web/index.js +10 -5
  221. package/lib/module/web/index.js.map +1 -1
  222. package/lib/module/web/listener.js +8 -7
  223. package/lib/module/web/listener.js.map +1 -1
  224. package/lib/module/web/registry.js +44 -124
  225. package/lib/module/web/registry.js.map +1 -1
  226. package/lib/module/web/runtime.js +27 -21
  227. package/lib/module/web/runtime.js.map +1 -1
  228. package/lib/module/web/services.js +23 -0
  229. package/lib/module/web/services.js.map +1 -0
  230. package/lib/module/web/shadowRegistry.js +46 -94
  231. package/lib/module/web/shadowRegistry.js.map +1 -1
  232. package/lib/module/web/state.js +39 -10
  233. package/lib/module/web/state.js.map +1 -1
  234. package/lib/module/web/types.js +4 -0
  235. package/lib/module/web/types.js.map +1 -0
  236. package/lib/module/web/utils/common.js +26 -7
  237. package/lib/module/web/utils/common.js.map +1 -1
  238. package/lib/module/web/utils/unistyle.js +27 -17
  239. package/lib/module/web/utils/unistyle.js.map +1 -1
  240. package/lib/module/web/variants.js +25 -27
  241. package/lib/module/web/variants.js.map +1 -1
  242. package/lib/typescript/src/components/index.d.ts +0 -1
  243. package/lib/typescript/src/components/index.d.ts.map +1 -1
  244. package/lib/typescript/src/components/native/ActivityIndicator.d.ts +3 -1
  245. package/lib/typescript/src/components/native/ActivityIndicator.d.ts.map +1 -1
  246. package/lib/typescript/src/components/native/FlatList.d.ts +3 -1
  247. package/lib/typescript/src/components/native/FlatList.d.ts.map +1 -1
  248. package/lib/typescript/src/components/native/Image.d.ts +3 -1
  249. package/lib/typescript/src/components/native/Image.d.ts.map +1 -1
  250. package/lib/typescript/src/components/native/ImageBackground.d.ts +8 -2
  251. package/lib/typescript/src/components/native/ImageBackground.d.ts.map +1 -1
  252. package/lib/typescript/src/components/native/ImageBackground.native.d.ts +3 -0
  253. package/lib/typescript/src/components/native/ImageBackground.native.d.ts.map +1 -0
  254. package/lib/typescript/src/components/native/KeyboardAvoidingView.d.ts +3 -1
  255. package/lib/typescript/src/components/native/KeyboardAvoidingView.d.ts.map +1 -1
  256. package/lib/typescript/src/components/native/Pressable.d.ts +3 -2
  257. package/lib/typescript/src/components/native/Pressable.d.ts.map +1 -1
  258. package/lib/typescript/src/components/native/Pressable.native.d.ts.map +1 -1
  259. package/lib/typescript/src/components/native/RefreshControl.d.ts +3 -1
  260. package/lib/typescript/src/components/native/RefreshControl.d.ts.map +1 -1
  261. package/lib/typescript/src/components/native/ScrollView.d.ts +3 -1
  262. package/lib/typescript/src/components/native/ScrollView.d.ts.map +1 -1
  263. package/lib/typescript/src/components/native/SectionList.d.ts +3 -1
  264. package/lib/typescript/src/components/native/SectionList.d.ts.map +1 -1
  265. package/lib/typescript/src/components/native/Switch.d.ts +3 -1
  266. package/lib/typescript/src/components/native/Switch.d.ts.map +1 -1
  267. package/lib/typescript/src/components/native/Text.d.ts +3 -1
  268. package/lib/typescript/src/components/native/Text.d.ts.map +1 -1
  269. package/lib/typescript/src/components/native/TextInput.d.ts +3 -1
  270. package/lib/typescript/src/components/native/TextInput.d.ts.map +1 -1
  271. package/lib/typescript/src/components/native/TouchableHighlight.d.ts +3 -1
  272. package/lib/typescript/src/components/native/TouchableHighlight.d.ts.map +1 -1
  273. package/lib/typescript/src/components/native/TouchableOpacity.d.ts +3 -1
  274. package/lib/typescript/src/components/native/TouchableOpacity.d.ts.map +1 -1
  275. package/lib/typescript/src/components/native/View.d.ts +3 -1
  276. package/lib/typescript/src/components/native/View.d.ts.map +1 -1
  277. package/lib/typescript/src/components/native/VirtualizedList.d.ts +3 -1
  278. package/lib/typescript/src/components/native/VirtualizedList.d.ts.map +1 -1
  279. package/lib/typescript/src/core/createUnistylesElement.d.ts +6 -1
  280. package/lib/typescript/src/core/createUnistylesElement.d.ts.map +1 -1
  281. package/lib/typescript/src/core/createUnistylesElement.native.d.ts +3 -0
  282. package/lib/typescript/src/core/createUnistylesElement.native.d.ts.map +1 -0
  283. package/lib/typescript/src/core/createUnistylesImageBackground.d.ts.map +1 -1
  284. package/lib/typescript/src/core/getClassname.d.ts +7 -0
  285. package/lib/typescript/src/core/getClassname.d.ts.map +1 -0
  286. package/lib/typescript/src/core/getClassname.native.d.ts +2 -0
  287. package/lib/typescript/src/core/getClassname.native.d.ts.map +1 -0
  288. package/lib/typescript/src/core/index.d.ts +2 -1
  289. package/lib/typescript/src/core/index.d.ts.map +1 -1
  290. package/lib/typescript/src/core/passForwardRef.d.ts.map +1 -1
  291. package/lib/typescript/src/core/useProxifiedUnistyles/index.d.ts +2 -0
  292. package/lib/typescript/src/core/useProxifiedUnistyles/index.d.ts.map +1 -0
  293. package/lib/typescript/src/core/useProxifiedUnistyles/listener.d.ts +3 -0
  294. package/lib/typescript/src/core/useProxifiedUnistyles/listener.d.ts.map +1 -0
  295. package/lib/typescript/src/core/useProxifiedUnistyles/listener.native.d.ts +3 -0
  296. package/lib/typescript/src/core/useProxifiedUnistyles/listener.native.d.ts.map +1 -0
  297. package/lib/typescript/src/core/useProxifiedUnistyles/types.d.ts +7 -0
  298. package/lib/typescript/src/core/useProxifiedUnistyles/types.d.ts.map +1 -0
  299. package/lib/typescript/src/core/useProxifiedUnistyles/useProxifiedUnistyles.d.ts +8 -0
  300. package/lib/typescript/src/core/useProxifiedUnistyles/useProxifiedUnistyles.d.ts.map +1 -0
  301. package/lib/typescript/src/core/useUnistyles.d.ts +6 -0
  302. package/lib/typescript/src/core/useUnistyles.d.ts.map +1 -0
  303. package/lib/typescript/src/core/warn.d.ts +3 -0
  304. package/lib/typescript/src/core/warn.d.ts.map +1 -0
  305. package/lib/typescript/src/core/withUnistyles/withUnistyles.d.ts +0 -3
  306. package/lib/typescript/src/core/withUnistyles/withUnistyles.d.ts.map +1 -1
  307. package/lib/typescript/src/core/withUnistyles/withUnistyles.native.d.ts.map +1 -1
  308. package/lib/typescript/src/index.d.ts +3 -2
  309. package/lib/typescript/src/index.d.ts.map +1 -1
  310. package/lib/typescript/src/server/getServerUnistyles.d.ts +4 -0
  311. package/lib/typescript/src/server/getServerUnistyles.d.ts.map +1 -0
  312. package/lib/typescript/src/server/hydrateServerUnistyles.d.ts +8 -0
  313. package/lib/typescript/src/server/hydrateServerUnistyles.d.ts.map +1 -0
  314. package/lib/typescript/src/server/index.d.ts +5 -0
  315. package/lib/typescript/src/server/index.d.ts.map +1 -0
  316. package/lib/typescript/src/server/resetServerUnistyles.d.ts +2 -0
  317. package/lib/typescript/src/server/resetServerUnistyles.d.ts.map +1 -0
  318. package/lib/typescript/src/server/types.d.ts +5 -0
  319. package/lib/typescript/src/server/types.d.ts.map +1 -0
  320. package/lib/typescript/src/server/useServerUnistyles.d.ts +4 -0
  321. package/lib/typescript/src/server/useServerUnistyles.d.ts.map +1 -0
  322. package/lib/typescript/src/specs/ShadowRegistry/index.d.ts +0 -3
  323. package/lib/typescript/src/specs/ShadowRegistry/index.d.ts.map +1 -1
  324. package/lib/typescript/src/specs/StyleSheet/index.d.ts +4 -1
  325. package/lib/typescript/src/specs/StyleSheet/index.d.ts.map +1 -1
  326. package/lib/typescript/src/utils.d.ts +1 -0
  327. package/lib/typescript/src/utils.d.ts.map +1 -1
  328. package/lib/typescript/src/web/convert/style.d.ts.map +1 -1
  329. package/lib/typescript/src/web/create.d.ts.map +1 -1
  330. package/lib/typescript/src/web/css/core.d.ts +3 -0
  331. package/lib/typescript/src/web/css/core.d.ts.map +1 -0
  332. package/lib/typescript/src/web/css/index.d.ts +2 -0
  333. package/lib/typescript/src/web/css/index.d.ts.map +1 -0
  334. package/lib/typescript/src/web/css/state.d.ts +30 -0
  335. package/lib/typescript/src/web/css/state.d.ts.map +1 -0
  336. package/lib/typescript/src/web/css/utils.d.ts +4 -0
  337. package/lib/typescript/src/web/css/utils.d.ts.map +1 -0
  338. package/lib/typescript/src/web/index.d.ts +7 -1
  339. package/lib/typescript/src/web/index.d.ts.map +1 -1
  340. package/lib/typescript/src/web/listener.d.ts +4 -3
  341. package/lib/typescript/src/web/listener.d.ts.map +1 -1
  342. package/lib/typescript/src/web/registry.d.ts +11 -8
  343. package/lib/typescript/src/web/registry.d.ts.map +1 -1
  344. package/lib/typescript/src/web/runtime.d.ts +6 -4
  345. package/lib/typescript/src/web/runtime.d.ts.map +1 -1
  346. package/lib/typescript/src/web/services.d.ts +15 -0
  347. package/lib/typescript/src/web/services.d.ts.map +1 -0
  348. package/lib/typescript/src/web/shadowRegistry.d.ts +10 -13
  349. package/lib/typescript/src/web/shadowRegistry.d.ts.map +1 -1
  350. package/lib/typescript/src/web/state.d.ts +7 -3
  351. package/lib/typescript/src/web/state.d.ts.map +1 -1
  352. package/lib/typescript/src/web/types.d.ts +13 -0
  353. package/lib/typescript/src/web/types.d.ts.map +1 -0
  354. package/lib/typescript/src/web/utils/common.d.ts +2 -1
  355. package/lib/typescript/src/web/utils/common.d.ts.map +1 -1
  356. package/lib/typescript/src/web/utils/unistyle.d.ts +5 -4
  357. package/lib/typescript/src/web/utils/unistyle.d.ts.map +1 -1
  358. package/lib/typescript/src/web/variants.d.ts +2 -2
  359. package/lib/typescript/src/web/variants.d.ts.map +1 -1
  360. package/nitrogen/generated/android/c++/JColorScheme.hpp +2 -1
  361. package/nitrogen/generated/android/c++/JDimensions.hpp +2 -1
  362. package/nitrogen/generated/android/c++/JFunc_void_UnistylesNativeMiniRuntime.hpp +36 -10
  363. package/nitrogen/generated/android/c++/JFunc_void_std__vector_UnistyleDependency__UnistylesNativeMiniRuntime.hpp +53 -19
  364. package/nitrogen/generated/android/c++/JHybridNativePlatformSpec.cpp +5 -5
  365. package/nitrogen/generated/android/c++/JHybridNativePlatformSpec.hpp +1 -1
  366. package/nitrogen/generated/android/c++/JInsets.hpp +2 -1
  367. package/nitrogen/generated/android/c++/JOrientation.hpp +2 -1
  368. package/nitrogen/generated/android/c++/JUnistyleDependency.hpp +2 -1
  369. package/nitrogen/generated/android/c++/JUnistylesNativeMiniRuntime.hpp +2 -1
  370. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/ColorScheme.kt +1 -1
  371. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/Dimensions.kt +10 -5
  372. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/Func_void_UnistylesNativeMiniRuntime.kt +43 -14
  373. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/Func_void_std__vector_UnistyleDependency__UnistylesNativeMiniRuntime.kt +43 -14
  374. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/HybridNativePlatformSpec.kt +10 -10
  375. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/Insets.kt +13 -8
  376. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/Orientation.kt +1 -1
  377. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/UnistyleDependency.kt +1 -1
  378. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unistyles/UnistylesNativeMiniRuntime.kt +19 -14
  379. package/nitrogen/generated/android/unistyles+autolinking.cmake +4 -1
  380. package/nitrogen/generated/android/unistyles+autolinking.gradle +1 -1
  381. package/nitrogen/generated/android/unistylesOnLoad.cpp +7 -3
  382. package/nitrogen/generated/android/unistylesOnLoad.hpp +1 -1
  383. package/nitrogen/generated/ios/Unistyles+autolinking.rb +1 -1
  384. package/nitrogen/generated/ios/Unistyles-Swift-Cxx-Bridge.cpp +21 -6
  385. package/nitrogen/generated/ios/Unistyles-Swift-Cxx-Bridge.hpp +105 -27
  386. package/nitrogen/generated/ios/Unistyles-Swift-Cxx-Umbrella.hpp +5 -3
  387. package/nitrogen/generated/ios/c++/HybridNativePlatformSpecSwift.cpp +1 -1
  388. package/nitrogen/generated/ios/c++/HybridNativePlatformSpecSwift.hpp +92 -33
  389. package/nitrogen/generated/ios/swift/ColorScheme.swift +1 -1
  390. package/nitrogen/generated/ios/swift/Dimensions.swift +1 -1
  391. package/nitrogen/generated/ios/swift/Func_void_UnistylesNativeMiniRuntime.swift +46 -0
  392. package/nitrogen/generated/ios/swift/Func_void_std__vector_UnistyleDependency__UnistylesNativeMiniRuntime.swift +46 -0
  393. package/nitrogen/generated/ios/swift/HybridNativePlatformSpec.swift +36 -23
  394. package/nitrogen/generated/ios/swift/HybridNativePlatformSpec_cxx.swift +327 -0
  395. package/nitrogen/generated/ios/swift/Insets.swift +1 -1
  396. package/nitrogen/generated/ios/swift/Orientation.swift +1 -1
  397. package/nitrogen/generated/ios/swift/UnistyleDependency.swift +1 -1
  398. package/nitrogen/generated/ios/swift/UnistylesNativeMiniRuntime.swift +1 -1
  399. package/nitrogen/generated/shared/c++/ColorScheme.hpp +1 -1
  400. package/nitrogen/generated/shared/c++/Dimensions.hpp +1 -1
  401. package/nitrogen/generated/shared/c++/HybridNativePlatformSpec.cpp +1 -1
  402. package/nitrogen/generated/shared/c++/HybridNativePlatformSpec.hpp +1 -1
  403. package/nitrogen/generated/shared/c++/HybridUnistylesNavigationBarSpec.cpp +1 -1
  404. package/nitrogen/generated/shared/c++/HybridUnistylesNavigationBarSpec.hpp +1 -1
  405. package/nitrogen/generated/shared/c++/HybridUnistylesRuntimeSpec.cpp +1 -1
  406. package/nitrogen/generated/shared/c++/HybridUnistylesRuntimeSpec.hpp +1 -1
  407. package/nitrogen/generated/shared/c++/HybridUnistylesShadowRegistrySpec.cpp +1 -1
  408. package/nitrogen/generated/shared/c++/HybridUnistylesShadowRegistrySpec.hpp +1 -1
  409. package/nitrogen/generated/shared/c++/HybridUnistylesStatusBarSpec.cpp +1 -1
  410. package/nitrogen/generated/shared/c++/HybridUnistylesStatusBarSpec.hpp +1 -1
  411. package/nitrogen/generated/shared/c++/HybridUnistylesStyleSheetSpec.cpp +1 -1
  412. package/nitrogen/generated/shared/c++/HybridUnistylesStyleSheetSpec.hpp +1 -1
  413. package/nitrogen/generated/shared/c++/Insets.hpp +1 -1
  414. package/nitrogen/generated/shared/c++/Orientation.hpp +1 -1
  415. package/nitrogen/generated/shared/c++/UnistyleDependency.hpp +2 -2
  416. package/nitrogen/generated/shared/c++/UnistylesCxxMiniRuntime.hpp +1 -1
  417. package/nitrogen/generated/shared/c++/UnistylesNativeMiniRuntime.hpp +1 -1
  418. package/package.json +21 -12
  419. package/plugin/import.js +1 -21
  420. package/plugin/index.d.ts +41 -0
  421. package/plugin/index.js +44 -76
  422. package/plugin/stylesheet.js +17 -1
  423. package/plugin/variants.js +49 -75
  424. package/src/components/ScopedTheme.tsx +1 -1
  425. package/src/components/index.ts +0 -1
  426. package/src/components/native/ImageBackground.native.tsx +4 -0
  427. package/src/components/native/ImageBackground.tsx +54 -2
  428. package/src/components/native/Pressable.native.tsx +16 -17
  429. package/src/components/native/Pressable.tsx +35 -69
  430. package/src/core/createUnistylesElement.native.tsx +36 -0
  431. package/src/core/createUnistylesElement.tsx +42 -8
  432. package/src/core/createUnistylesImageBackground.tsx +40 -19
  433. package/src/core/getClassname.native.ts +1 -0
  434. package/src/core/getClassname.ts +13 -0
  435. package/src/core/index.ts +2 -1
  436. package/src/core/passForwardRef.ts +1 -2
  437. package/src/core/useProxifiedUnistyles/index.ts +1 -0
  438. package/src/core/useProxifiedUnistyles/listener.native.ts +18 -0
  439. package/src/core/useProxifiedUnistyles/listener.ts +13 -0
  440. package/src/core/useProxifiedUnistyles/types.ts +7 -0
  441. package/src/core/{withUnistyles/useDependencies.ts → useProxifiedUnistyles/useProxifiedUnistyles.ts} +19 -26
  442. package/src/core/useUnistyles.ts +11 -0
  443. package/src/core/warn.ts +13 -0
  444. package/src/core/withUnistyles/withUnistyles.native.tsx +39 -68
  445. package/src/core/withUnistyles/withUnistyles.tsx +19 -56
  446. package/src/index.ts +3 -2
  447. package/src/server/getServerUnistyles.tsx +20 -0
  448. package/src/server/hydrateServerUnistyles.ts +17 -0
  449. package/src/server/index.ts +5 -0
  450. package/src/server/resetServerUnistyles.ts +9 -0
  451. package/src/server/types.ts +4 -0
  452. package/src/server/useServerUnistyles.tsx +22 -0
  453. package/src/specs/ShadowRegistry/index.ts +12 -9
  454. package/src/specs/StyleSheet/index.ts +5 -1
  455. package/src/utils.ts +15 -11
  456. package/src/web/convert/object/filter.ts +2 -2
  457. package/src/web/convert/style.ts +8 -7
  458. package/src/web/create.ts +23 -18
  459. package/src/web/css/core.ts +58 -0
  460. package/src/web/css/index.ts +1 -0
  461. package/src/web/css/state.ts +191 -0
  462. package/src/web/css/utils.ts +54 -0
  463. package/src/web/index.ts +18 -5
  464. package/src/web/listener.ts +8 -8
  465. package/src/web/registry.ts +47 -152
  466. package/src/web/runtime.ts +32 -22
  467. package/src/web/services.ts +28 -0
  468. package/src/web/shadowRegistry.ts +46 -104
  469. package/src/web/state.ts +46 -11
  470. package/src/web/types.ts +13 -0
  471. package/src/web/utils/common.ts +32 -8
  472. package/src/web/utils/unistyle.ts +40 -25
  473. package/src/web/variants.ts +27 -27
  474. package/cxx/core/HostStyle.cpp +0 -73
  475. package/cxx/core/HostStyle.h +0 -34
  476. package/lib/commonjs/components/Variants.js +0 -36
  477. package/lib/commonjs/components/Variants.js.map +0 -1
  478. package/lib/commonjs/core/createUnistylesComponent.js +0 -16
  479. package/lib/commonjs/core/createUnistylesComponent.js.map +0 -1
  480. package/lib/commonjs/core/withUnistyles/useDependencies.js.map +0 -1
  481. package/lib/module/components/Variants.js +0 -29
  482. package/lib/module/components/Variants.js.map +0 -1
  483. package/lib/module/core/createUnistylesComponent.js +0 -11
  484. package/lib/module/core/createUnistylesComponent.js.map +0 -1
  485. package/lib/module/core/withUnistyles/useDependencies.js.map +0 -1
  486. package/lib/typescript/src/components/Variants.d.ts +0 -7
  487. package/lib/typescript/src/components/Variants.d.ts.map +0 -1
  488. package/lib/typescript/src/core/createUnistylesComponent.d.ts +0 -14
  489. package/lib/typescript/src/core/createUnistylesComponent.d.ts.map +0 -1
  490. package/lib/typescript/src/core/withUnistyles/useDependencies.d.ts +0 -13
  491. package/lib/typescript/src/core/withUnistyles/useDependencies.d.ts.map +0 -1
  492. package/nitrogen/generated/android/unistylesOnLoad.kt +0 -1
  493. package/nitrogen/generated/ios/swift/HybridNativePlatformSpecCxx.swift +0 -314
  494. package/plugin/style.js +0 -168
  495. package/src/components/Variants.tsx +0 -30
  496. package/src/core/createUnistylesComponent.tsx +0 -14
@@ -0,0 +1,191 @@
1
+ import type { UnistylesValues } from '../../types'
2
+ import { convertUnistyles } from '../convert'
3
+ import { hyphenate, isServer } from '../utils'
4
+ import { convertToCSS } from './core'
5
+
6
+ type MapType = Map<string, Map<string, Map<string, any>>>
7
+ type SetProps = {
8
+ mediaQuery?: string
9
+ className: string
10
+ isMq?: boolean
11
+ propertyKey: string
12
+ value: any
13
+ }
14
+ type HydrateState = Array<[ string, Array<[ string, Array<[ string, any ]> ]> ]>
15
+
16
+ const safeGetMap = (map: Map<string, Map<string, any>>, key: string) => {
17
+ const nextLevelMap = map.get(key)
18
+
19
+ if (!nextLevelMap) {
20
+ const newMap = new Map<string, any>()
21
+
22
+ map.set(key, newMap)
23
+
24
+ return newMap
25
+ }
26
+
27
+ return nextLevelMap
28
+ }
29
+
30
+ export class CSSState {
31
+ mainMap: MapType = new Map()
32
+ mqMap: MapType = new Map()
33
+ private styleTag: HTMLStyleElement | null = null
34
+ private CSS = ''
35
+
36
+ constructor() {
37
+ if (isServer()) {
38
+ return
39
+ }
40
+
41
+ const ssrTag = document.getElementById('unistyles-web')
42
+
43
+ if (ssrTag) {
44
+ this.styleTag = ssrTag as HTMLStyleElement
45
+
46
+ return
47
+ }
48
+
49
+ this.styleTag = document.createElement('style')
50
+ this.styleTag.id = 'unistyles-web'
51
+ document.head.appendChild(this.styleTag)
52
+ }
53
+
54
+ set = ({ className, propertyKey, value, mediaQuery = '', isMq }: SetProps) => {
55
+ const firstLevelMap = isMq ? this.mqMap : this.mainMap
56
+ const secondLevelMap = safeGetMap(firstLevelMap, mediaQuery)
57
+ const thirdLevelMap = safeGetMap(secondLevelMap, className)
58
+
59
+ thirdLevelMap.set(propertyKey, value)
60
+ }
61
+
62
+ add = (hash: string, values: UnistylesValues) => {
63
+ convertToCSS(hash, convertUnistyles(values), this)
64
+
65
+ if (this.styleTag) {
66
+ this.styleTag.innerText = this.getStyles()
67
+ }
68
+ }
69
+
70
+ addTheme = (theme: string, values: Record<string, any>) => {
71
+ let themeVars = ''
72
+
73
+ const convertToCSS = (key: string, value: any, prev = '-') => {
74
+ if (typeof value === 'object' && value !== null) {
75
+ Object.entries(value).forEach(([nestedKey, nestedValue]) => convertToCSS(nestedKey, nestedValue, `${prev}-${key}`))
76
+ }
77
+
78
+ if (typeof value === 'string') {
79
+ themeVars += `${prev}-${hyphenate(key)}:${value};`
80
+ }
81
+ }
82
+
83
+ Object.entries(values).forEach(([key, value]) => convertToCSS(key, value))
84
+
85
+ if (theme === 'light' || theme === 'dark') {
86
+ this.CSS += `@media (prefers-color-scheme: ${theme}){:root{${themeVars}}}`
87
+ }
88
+
89
+ this.CSS += `:root.${theme}{${themeVars}}`
90
+ }
91
+
92
+ remove = (hash: string) => {
93
+ this.mainMap.forEach(styles => {
94
+ styles.delete(hash)
95
+ })
96
+ this.mqMap.forEach(styles => {
97
+ styles.delete(hash)
98
+ })
99
+
100
+ if (this.styleTag) {
101
+ this.styleTag.innerText = this.getStyles()
102
+ }
103
+ }
104
+
105
+ getStyles = () => {
106
+ let styles = this.CSS
107
+
108
+ const generate = (mediaQuery: string, secondLevelMap: Map<string, Map<string, string>>) => {
109
+ if (mediaQuery) {
110
+ styles += `${mediaQuery}{`
111
+ }
112
+
113
+ for (const [className, thirdLevelMap] of secondLevelMap) {
114
+ styles += `.${className}{`
115
+
116
+ for (const [propertyKey, value] of thirdLevelMap) {
117
+ if (value === undefined) {
118
+ continue
119
+ }
120
+
121
+ styles += `${hyphenate(propertyKey)}:${value};`
122
+ }
123
+
124
+ styles += '}'
125
+ }
126
+
127
+ if (mediaQuery) {
128
+ styles += '}'
129
+ }
130
+ }
131
+
132
+ for (const [mediaQuery, secondLevelMap] of this.mainMap) {
133
+ generate(mediaQuery, secondLevelMap)
134
+ }
135
+
136
+ for (const [mediaQuery, secondLevelMap] of this.mqMap) {
137
+ generate(mediaQuery, secondLevelMap)
138
+ }
139
+
140
+ return styles
141
+ }
142
+
143
+ getState = () => {
144
+ const getState = (map: MapType) => {
145
+ return Array.from(map).map(([mediaQuery, classNames]) => {
146
+ return [
147
+ mediaQuery,
148
+ Array.from(classNames.entries()).map(([className, style]) => {
149
+ return [
150
+ className,
151
+ Array.from(style.entries()).map(([property, value]) => {
152
+ return [property, value]
153
+ })
154
+ ]
155
+ })
156
+ ]
157
+ }) as HydrateState
158
+ }
159
+
160
+ const mainState = getState(this.mainMap)
161
+ const mqState = getState(this.mqMap)
162
+
163
+ return { mainState, mqState }
164
+ }
165
+
166
+ hydrate = ({ mainState, mqState }: ReturnType<typeof this.getState>) => {
167
+ const hydrateState = (map: HydrateState, isMq = false) => {
168
+ map.forEach(([mediaQuery, classNames]) => {
169
+ classNames.forEach(([className, style]) => {
170
+ style.forEach(([propertyKey, value]) => {
171
+ this.set({
172
+ className,
173
+ propertyKey,
174
+ value,
175
+ mediaQuery,
176
+ isMq
177
+ })
178
+ })
179
+ })
180
+ })
181
+ }
182
+
183
+ hydrateState(mainState)
184
+ hydrateState(mqState, true)
185
+ }
186
+
187
+ reset = () => {
188
+ this.mqMap.clear()
189
+ this.mainMap.clear()
190
+ }
191
+ }
@@ -0,0 +1,54 @@
1
+ import { hyphenate } from '../utils'
2
+ import type { CSSState } from './state'
3
+
4
+ export const safeGetMap = (map: Map<string, Map<string, any>>, key: string) => {
5
+ const nextLevelMap = map.get(key)
6
+
7
+ if (!nextLevelMap) {
8
+ const newMap = new Map<string, any>()
9
+
10
+ map.set(key, newMap)
11
+
12
+ return newMap
13
+ }
14
+
15
+ return nextLevelMap
16
+ }
17
+
18
+ export const getStylesFromState = (state: CSSState) => {
19
+ let styles = ''
20
+
21
+ const generate = (mediaQuery: string, secondLevelMap: Map<string, Map<string, string>>) => {
22
+ if (mediaQuery) {
23
+ styles += `${mediaQuery}{`
24
+ }
25
+
26
+ for (const [className, thirdLevelMap] of secondLevelMap) {
27
+ styles += `.${className}{`
28
+
29
+ for (const [propertyKey, value] of thirdLevelMap) {
30
+ if (value === undefined) {
31
+ continue
32
+ }
33
+
34
+ styles += `${hyphenate(propertyKey)}:${value};`
35
+ }
36
+
37
+ styles += '}'
38
+ }
39
+
40
+ if (mediaQuery) {
41
+ styles += '}'
42
+ }
43
+ }
44
+
45
+ for (const [mediaQuery, secondLevelMap] of state.mainMap) {
46
+ generate(mediaQuery, secondLevelMap)
47
+ }
48
+
49
+ for (const [mediaQuery, secondLevelMap] of state.mqMap) {
50
+ generate(mediaQuery, secondLevelMap)
51
+ }
52
+
53
+ return styles
54
+ }
package/src/web/index.ts CHANGED
@@ -1,12 +1,24 @@
1
1
  import { create } from './create'
2
- import { UnistylesState } from './state'
3
2
  import { deepMergeObjects } from '../utils'
4
3
  import type { StyleSheet as NativeStyleSheet } from '../specs/StyleSheet'
5
- import { UnistylesRuntime as UnistylesRuntimeWeb } from './runtime'
6
4
  import type { Runtime as NativeUnistylesRuntime } from '../specs/UnistylesRuntime'
5
+ import type { UnistylesShadowRegistry as NativeUnistylesShadowRegistry } from '../specs/ShadowRegistry'
6
+ import { UnistylesServices } from './services'
7
+ import { isServer } from './utils'
7
8
 
9
+ declare global {
10
+ // @ts-ignore
11
+ var __unistyles__: UnistylesServices
12
+ }
13
+
14
+ if (isServer() && !globalThis.__unistyles__) {
15
+ // @ts-ignore
16
+ globalThis.__unistyles__ = new UnistylesServices()
17
+ }
18
+
19
+ export const UnistylesWeb = isServer() ? globalThis.__unistyles__ : new UnistylesServices()
8
20
  export const StyleSheet = {
9
- configure: UnistylesState.init,
21
+ configure: UnistylesWeb.state.init,
10
22
  create: create,
11
23
  absoluteFill: {
12
24
  position: 'absolute',
@@ -27,7 +39,8 @@ export const StyleSheet = {
27
39
  hairlineWidth: 1
28
40
  } as unknown as typeof NativeStyleSheet
29
41
 
30
- export const UnistylesRuntime = UnistylesRuntimeWeb as unknown as typeof NativeUnistylesRuntime
42
+ export const UnistylesRuntime = UnistylesWeb.runtime as unknown as typeof NativeUnistylesRuntime
43
+ export const UnistylesShadowRegistry = UnistylesWeb.shadowRegistry as unknown as typeof NativeUnistylesShadowRegistry
31
44
 
32
45
  export * from './mock'
33
- export * from './shadowRegistry'
46
+
@@ -1,11 +1,13 @@
1
1
  import { UnistyleDependency } from '../specs/NativePlatform'
2
- import { UnistylesRuntime } from './runtime'
2
+ import type { UnistylesServices } from './types'
3
3
 
4
- class UnistylesListenerBuilder {
4
+ export class UnistylesListener {
5
5
  private isInitialized = false
6
6
  private listeners = Array.from({ length: Object.keys(UnistyleDependency).length / 2 }, () => new Set<VoidFunction>())
7
7
  private stylesheetListeners = Array.from({ length: Object.keys(UnistyleDependency).length / 2 }, () => new Set<VoidFunction>())
8
8
 
9
+ constructor(private services: UnistylesServices) {}
10
+
9
11
  emitChange = (dependency: UnistyleDependency) => {
10
12
  this.stylesheetListeners[dependency]?.forEach(listener => listener())
11
13
  this.listeners[dependency]?.forEach(listener => listener())
@@ -18,25 +20,25 @@ class UnistylesListenerBuilder {
18
20
 
19
21
  this.isInitialized = true
20
22
 
21
- UnistylesRuntime.darkMedia?.addEventListener('change', event => {
23
+ this.services.runtime.darkMedia?.addEventListener('change', event => {
22
24
  if (!event.matches) {
23
25
  return
24
26
  }
25
27
 
26
28
  this.emitChange(UnistyleDependency.ColorScheme)
27
29
 
28
- if (UnistylesRuntime.hasAdaptiveThemes) {
30
+ if (this.services.runtime.hasAdaptiveThemes) {
29
31
  this.emitChange(UnistyleDependency.Theme)
30
32
  }
31
33
  })
32
- UnistylesRuntime.lightMedia?.addEventListener('change', event => {
34
+ this.services.runtime.lightMedia?.addEventListener('change', event => {
33
35
  if (!event.matches) {
34
36
  return
35
37
  }
36
38
 
37
39
  this.emitChange(UnistyleDependency.ColorScheme)
38
40
 
39
- if (UnistylesRuntime.hasAdaptiveThemes) {
41
+ if (this.services.runtime.hasAdaptiveThemes) {
40
42
  this.emitChange(UnistyleDependency.Theme)
41
43
  }
42
44
  })
@@ -61,5 +63,3 @@ class UnistylesListenerBuilder {
61
63
  }
62
64
  }
63
65
  }
64
-
65
- export const UnistylesListener = new UnistylesListenerBuilder()
@@ -1,42 +1,19 @@
1
1
  import type { UnistylesTheme, UnistylesValues } from '../types'
2
2
  import type { StyleSheet, StyleSheetWithSuperPowers } from '../types/stylesheet'
3
- import { UnistylesRuntime } from './runtime'
4
- import { extractMediaQueryValue, keyInObject, getMediaQuery, generateHash, extractUnistyleDependencies, error } from './utils'
5
- import { UnistylesListener } from './listener'
6
- import { convertUnistyles } from './convert'
3
+ import { generateHash, extractUnistyleDependencies, error } from './utils'
7
4
  import type { UnistylesMiniRuntime, UnistyleDependency } from '../specs'
5
+ import { CSSState } from './css'
6
+ import type { UnistylesServices } from './types'
8
7
 
9
- type ApplyRuleProps = {
10
- hash: string,
11
- key: string,
12
- value: any,
13
- sheet: CSSStyleSheet | CSSMediaRule
14
- }
15
-
16
- type RemoveReadonlyStyleKeys<T extends string> = T extends 'length' | 'parentRule' ? never : T
17
-
18
- class UnistylesRegistryBuilder {
8
+ export class UnistylesRegistry {
19
9
  private readonly stylesheets = new Map<StyleSheetWithSuperPowers<StyleSheet>, StyleSheet>()
20
- private readonly stylesCounter = new Map<string, Set<UnistylesValues>>()
21
- #styleTag: HTMLStyleElement | null = null
10
+ private readonly stylesCache = new Set<string>()
11
+ private readonly stylesCounter = new Map<string, Set<HTMLElement>>()
22
12
  private readonly disposeListenersMap = new Map<object, VoidFunction>()
23
13
  private readonly dependenciesMap = new Map<StyleSheetWithSuperPowers<StyleSheet>, Set<UnistyleDependency>>()
14
+ readonly css = new CSSState()
24
15
 
25
- private get styleTag() {
26
- const tag = this.#styleTag
27
-
28
- if (!tag) {
29
- const newTag = document.createElement('style')
30
-
31
- newTag.id = 'unistyles-web'
32
- this.#styleTag = newTag
33
- document.head.appendChild(newTag)
34
-
35
- return newTag
36
- }
37
-
38
- return tag
39
- }
16
+ constructor(private services: UnistylesServices) {}
40
17
 
41
18
  getComputedStylesheet = (stylesheet: StyleSheetWithSuperPowers<StyleSheet>, scopedThemeName?: UnistylesTheme) => {
42
19
  if (typeof stylesheet !== 'function') {
@@ -44,13 +21,13 @@ class UnistylesRegistryBuilder {
44
21
  }
45
22
 
46
23
  if (scopedThemeName) {
47
- const scopedTheme = UnistylesRuntime.getTheme(scopedThemeName)
24
+ const scopedTheme = this.services.runtime.getTheme(scopedThemeName, this.services.state.CSSVars)
48
25
 
49
26
  if (!scopedTheme) {
50
27
  throw error(`Unistyles: You're trying to use scoped theme '${scopedThemeName}' but it wasn't registered.`)
51
28
  }
52
29
 
53
- return stylesheet(scopedTheme, UnistylesRuntime.miniRuntime)
30
+ return stylesheet(scopedTheme, this.services.runtime.miniRuntime)
54
31
  }
55
32
 
56
33
  const computedStylesheet = this.stylesheets.get(stylesheet)
@@ -59,7 +36,8 @@ class UnistylesRegistryBuilder {
59
36
  return computedStylesheet
60
37
  }
61
38
 
62
- const createdStylesheet = stylesheet(UnistylesRuntime.theme, UnistylesRuntime.miniRuntime)
39
+ const currentTheme = this.services.runtime.getTheme(this.services.runtime.themeName, this.services.state.CSSVars)
40
+ const createdStylesheet = stylesheet(currentTheme, this.services.runtime.miniRuntime)
63
41
  const dependencies = Object.values(createdStylesheet).flatMap(value => extractUnistyleDependencies(value))
64
42
 
65
43
  this.addDependenciesToStylesheet(stylesheet, dependencies)
@@ -75,8 +53,8 @@ class UnistylesRegistryBuilder {
75
53
 
76
54
  dependencies.forEach(dependency => dependenciesMap.add(dependency))
77
55
 
78
- const dispose = UnistylesListener.addStylesheetListeners(Array.from(dependenciesMap), () => {
79
- const newComputedStylesheet = stylesheet(UnistylesRuntime.theme, UnistylesRuntime.miniRuntime)
56
+ const dispose = this.services.listener.addStylesheetListeners(Array.from(dependenciesMap), () => {
57
+ const newComputedStylesheet = stylesheet(this.services.runtime.theme, this.services.runtime.miniRuntime)
80
58
 
81
59
  this.stylesheets.set(stylesheet, newComputedStylesheet)
82
60
  })
@@ -85,140 +63,57 @@ class UnistylesRegistryBuilder {
85
63
  this.disposeListenersMap.set(stylesheet, dispose)
86
64
  }
87
65
 
88
- add = (value: UnistylesValues) => {
89
- const hash = generateHash(value)
90
- const existingCounter = this.stylesCounter.get(hash)
91
-
92
- if (!existingCounter || existingCounter.size === 0) {
93
- const counter = new Set<UnistylesValues>()
94
-
95
- counter.add(value)
96
- this.stylesCounter.set(hash, counter)
97
- this.applyStyles(hash, value)
98
-
99
- return { hash, existingHash: false }
100
- }
66
+ connect = (ref: HTMLElement, hash: string) => {
67
+ const stylesCounter = this.stylesCounter.get(hash) ?? new Set()
101
68
 
102
- existingCounter.add(value)
103
-
104
- return { hash, existingHash: true }
69
+ stylesCounter.add(ref)
70
+ this.stylesCounter.set(hash, stylesCounter)
105
71
  }
106
72
 
107
- applyStyles = (hash: string, styles: Record<string, any>) => {
108
- Object.entries(convertUnistyles(styles)).forEach(([key, value]) => {
109
- if (!this.styleTag.sheet) {
110
- return
111
- }
73
+ remove = (ref: HTMLElement, hash: string) => {
74
+ const stylesCounter = this.stylesCounter.get(hash) ?? new Set()
112
75
 
113
- if (typeof value === 'object' && !key.startsWith('_')) {
114
- const mediaQuery = getMediaQuery(key)
115
- const cssRules = Array.from(this.styleTag.sheet.cssRules)
116
- let queryRule = cssRules.find(rule => {
117
- if (!(rule instanceof CSSMediaRule)) {
118
- return false
119
- }
120
-
121
- return rule.media.item(0)?.includes(mediaQuery)
122
- }) ?? null
123
-
124
- if (!queryRule) {
125
- const mediaQueryValue = extractMediaQueryValue(mediaQuery)
126
- const ruleIndex = mediaQueryValue
127
- ? cssRules.reduce<number | undefined>((acc, rule, ruleIndex) => {
128
- if (!(rule instanceof CSSMediaRule)) {
129
- return acc
130
- }
131
-
132
- const ruleMediaQueryValue = extractMediaQueryValue(rule.conditionText)
133
-
134
- if (ruleMediaQueryValue === undefined) {
135
- return
136
- }
137
-
138
- return ruleMediaQueryValue > mediaQueryValue ? ruleIndex : acc
139
- }, cssRules.length)
140
- : undefined
141
- queryRule = this.styleTag.sheet.cssRules.item(this.styleTag.sheet.insertRule(`@media ${mediaQuery} {.${hash} {}}`, ruleIndex))
142
- }
76
+ stylesCounter.delete(ref)
143
77
 
144
- if (queryRule instanceof CSSMediaRule) {
145
- Object.entries(value).forEach(([mqKey, mqValue]) => {
146
- this.applyRule({
147
- hash,
148
- key: mqKey,
149
- value: mqValue,
150
- sheet: queryRule
151
- })
152
- })
78
+ if (stylesCounter.size === 0) {
79
+ // Move this to the end of the event loop so the element is removed from the DOM
80
+ Promise.resolve().then(() => {
81
+ if (document.querySelector(`.${hash}`)) {
82
+ return
153
83
  }
154
84
 
155
- return
156
- }
157
-
158
- // Pseudo
159
- if (typeof value === 'object') {
160
- Object.entries(value).forEach(([pseudoKey, pseudoValue]) => {
161
- this.applyRule({
162
- hash: `${hash}${key.replace('_', ':')}`,
163
- key: pseudoKey,
164
- value: pseudoValue,
165
- sheet: this.styleTag.sheet as CSSStyleSheet
166
- })
167
- })
168
-
169
- return
170
- }
171
-
172
- this.applyRule({
173
- hash,
174
- key,
175
- value,
176
- sheet: this.styleTag.sheet
85
+ this.css.remove(hash)
86
+ this.stylesCache.delete(hash)
177
87
  })
178
- })
179
- }
180
88
 
181
- private applyRule = ({ hash, key, value, sheet }: ApplyRuleProps) => {
182
- let rule = Array.from(sheet.cssRules).find(rule => {
183
- if (!(rule instanceof CSSStyleRule)) {
184
- return false
185
- }
186
-
187
- // In unistyles pseudos are prefixed with ':' but in css some of them are prefixed with '::'
188
- return rule.selectorText.replace('::', ':').includes(hash)
189
- }) ?? null
190
-
191
- if (!rule) {
192
- rule = sheet.cssRules.item(sheet.insertRule(`.${hash} {}`))
89
+ return true
193
90
  }
194
91
 
195
- if (!(rule instanceof CSSStyleRule) || !keyInObject(rule.style, key)) {
196
- return
197
- }
198
-
199
- rule.style[key as RemoveReadonlyStyleKeys<typeof key>] = value
92
+ return false
200
93
  }
201
94
 
202
- remove = (value: UnistylesValues) => {
95
+ add = (value: UnistylesValues) => {
203
96
  const hash = generateHash(value)
204
- const existingStyles = this.stylesCounter.get(hash)
205
97
 
206
- if (!existingStyles) {
207
- return
208
- }
98
+ if (!this.stylesCache.has(hash)) {
99
+ this.applyStyles(hash, value)
100
+ this.stylesCache.add(hash)
209
101
 
210
- existingStyles.delete(value)
102
+ return { hash, existingHash: false }
103
+ }
211
104
 
212
- if (existingStyles.size === 0) {
213
- const ruleIndex = Array.from(this.styleTag.sheet?.cssRules ?? []).findIndex(rule => rule.cssText.includes(`.${hash}`))
105
+ return { hash, existingHash: true }
106
+ }
214
107
 
215
- if (ruleIndex === -1) {
216
- return
217
- }
108
+ applyStyles = (hash: string, value: UnistylesValues) => {
109
+ this.css.add(hash, value)
110
+ }
218
111
 
219
- this.styleTag.sheet?.deleteRule(ruleIndex)
220
- }
112
+ reset = () => {
113
+ this.css.reset()
114
+ this.stylesCache.clear()
115
+ this.dependenciesMap.clear()
116
+ this.disposeListenersMap.clear()
117
+ this.stylesCounter.clear()
221
118
  }
222
119
  }
223
-
224
- export const UnistylesRegistry = new UnistylesRegistryBuilder()