react-native-unistyles 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (396) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +30 -38
  3. package/android/CMakeLists.txt +27 -0
  4. package/android/build.gradle +75 -0
  5. package/android/src/main/cxx/cpp-adapter.cpp +132 -0
  6. package/android/src/main/java/com/unistyles/UnistylesModule.kt +189 -0
  7. package/android/src/main/java/com/unistyles/UnistylesPackage.kt +18 -0
  8. package/cxx/UnistylesRuntime.cpp +318 -0
  9. package/cxx/UnistylesRuntime.h +74 -0
  10. package/ios/UnistylesHelpers.h +3 -0
  11. package/ios/UnistylesHelpers.mm +5 -0
  12. package/ios/UnistylesModule.h +16 -0
  13. package/ios/UnistylesModule.mm +138 -0
  14. package/ios/platform/Platform_iOS.h +21 -0
  15. package/ios/platform/Platform_iOS.mm +132 -0
  16. package/ios/platform/Platform_macOS.h +20 -0
  17. package/ios/platform/Platform_macOS.mm +83 -0
  18. package/lib/commonjs/common.js +60 -0
  19. package/lib/commonjs/common.js.map +1 -0
  20. package/lib/commonjs/core/UnistyleRegistry.js +94 -0
  21. package/lib/commonjs/core/UnistyleRegistry.js.map +1 -0
  22. package/lib/commonjs/core/Unistyles.js +32 -0
  23. package/lib/commonjs/core/Unistyles.js.map +1 -0
  24. package/lib/commonjs/core/UnistylesModule.js +197 -0
  25. package/lib/commonjs/core/UnistylesModule.js.map +1 -0
  26. package/lib/commonjs/core/UnistylesModule.native.js +9 -0
  27. package/lib/commonjs/core/UnistylesModule.native.js.map +1 -0
  28. package/lib/commonjs/core/UnistylesRuntime.js +140 -0
  29. package/lib/commonjs/core/UnistylesRuntime.js.map +1 -0
  30. package/lib/commonjs/core/index.js +13 -0
  31. package/lib/commonjs/core/index.js.map +1 -0
  32. package/lib/commonjs/createStyleSheet.js +14 -0
  33. package/lib/commonjs/createStyleSheet.js.map +1 -0
  34. package/lib/commonjs/global.js +2 -0
  35. package/lib/commonjs/global.js.map +1 -0
  36. package/lib/commonjs/hooks/index.js +24 -3
  37. package/lib/commonjs/hooks/index.js.map +1 -1
  38. package/lib/commonjs/hooks/useCSS.js +44 -0
  39. package/lib/commonjs/hooks/useCSS.js.map +1 -0
  40. package/lib/commonjs/hooks/useCSS.native.js +9 -0
  41. package/lib/commonjs/hooks/useCSS.native.js.map +1 -0
  42. package/lib/commonjs/hooks/useInitialTheme.js +17 -0
  43. package/lib/commonjs/hooks/useInitialTheme.js.map +1 -0
  44. package/lib/commonjs/hooks/useUnistyles.js +64 -0
  45. package/lib/commonjs/hooks/useUnistyles.js.map +1 -0
  46. package/lib/commonjs/hooks/useVariants.js +14 -0
  47. package/lib/commonjs/hooks/useVariants.js.map +1 -0
  48. package/lib/commonjs/index.js +63 -6
  49. package/lib/commonjs/index.js.map +1 -1
  50. package/lib/commonjs/normalizer/index.js +32 -0
  51. package/lib/commonjs/normalizer/index.js.map +1 -0
  52. package/lib/commonjs/normalizer/module.d.js.map +1 -0
  53. package/lib/commonjs/{utils/normalizeStyles.web.js → normalizer/normalizeStyle.js} +5 -5
  54. package/lib/commonjs/normalizer/normalizeStyle.js.map +1 -0
  55. package/lib/commonjs/{utils → normalizer}/normalizer.js +2 -3
  56. package/lib/commonjs/normalizer/normalizer.js.map +1 -0
  57. package/lib/commonjs/normalizer/normalizer.macos.js +3 -0
  58. package/lib/commonjs/normalizer/normalizer.macos.js.map +1 -0
  59. package/lib/commonjs/plugins/cssMediaQueriesPlugin.js +14 -0
  60. package/lib/commonjs/plugins/cssMediaQueriesPlugin.js.map +1 -0
  61. package/lib/commonjs/plugins/index.js +20 -0
  62. package/lib/commonjs/plugins/index.js.map +1 -0
  63. package/lib/commonjs/plugins/normalizeWebStylesPlugin.js +12 -0
  64. package/lib/commonjs/plugins/normalizeWebStylesPlugin.js.map +1 -0
  65. package/lib/commonjs/types/common.js +2 -0
  66. package/lib/{module/utils/module.d.js.map → commonjs/types/common.js.map} +1 -1
  67. package/lib/commonjs/types/index.js +11 -0
  68. package/lib/commonjs/types/index.js.map +1 -1
  69. package/lib/commonjs/types/plugin.js +6 -0
  70. package/lib/commonjs/{utils/module.d.js.map → types/plugin.js.map} +1 -1
  71. package/lib/commonjs/types/stylesheet.js +6 -0
  72. package/lib/commonjs/types/{mediaQueries.js.map → stylesheet.js.map} +1 -1
  73. package/lib/commonjs/types/unistyles.js +6 -0
  74. package/lib/{module/types/mediaQueries.js.map → commonjs/types/unistyles.js.map} +1 -1
  75. package/lib/commonjs/types/variants.js +2 -0
  76. package/lib/commonjs/types/variants.js.map +1 -0
  77. package/lib/commonjs/useStyles.js +47 -0
  78. package/lib/commonjs/useStyles.js.map +1 -0
  79. package/lib/commonjs/utils/breakpoints.js +20 -122
  80. package/lib/commonjs/utils/breakpoints.js.map +1 -1
  81. package/lib/commonjs/utils/cssMediaQuery.js +244 -0
  82. package/lib/commonjs/utils/cssMediaQuery.js.map +1 -0
  83. package/lib/commonjs/utils/generateId.js +15 -0
  84. package/lib/commonjs/utils/generateId.js.map +1 -0
  85. package/lib/commonjs/utils/hash32.js +43 -0
  86. package/lib/commonjs/utils/hash32.js.map +1 -0
  87. package/lib/commonjs/utils/index.js +22 -54
  88. package/lib/commonjs/utils/index.js.map +1 -1
  89. package/lib/commonjs/utils/mq.js +38 -0
  90. package/lib/commonjs/utils/mq.js.map +1 -0
  91. package/lib/commonjs/utils/mqParser.js +89 -0
  92. package/lib/commonjs/utils/mqParser.js.map +1 -0
  93. package/lib/commonjs/utils/styles.js +45 -72
  94. package/lib/commonjs/utils/styles.js.map +1 -1
  95. package/lib/commonjs/utils/withPlugins.js +15 -0
  96. package/lib/commonjs/utils/withPlugins.js.map +1 -0
  97. package/lib/module/common.js +53 -0
  98. package/lib/module/common.js.map +1 -0
  99. package/lib/module/core/UnistyleRegistry.js +87 -0
  100. package/lib/module/core/UnistyleRegistry.js.map +1 -0
  101. package/lib/module/core/Unistyles.js +26 -0
  102. package/lib/module/core/Unistyles.js.map +1 -0
  103. package/lib/module/core/UnistylesModule.js +190 -0
  104. package/lib/module/core/UnistylesModule.js.map +1 -0
  105. package/lib/module/core/UnistylesModule.native.js +3 -0
  106. package/lib/module/core/UnistylesModule.native.js.map +1 -0
  107. package/lib/module/core/UnistylesRuntime.js +133 -0
  108. package/lib/module/core/UnistylesRuntime.js.map +1 -0
  109. package/lib/module/core/index.js +2 -0
  110. package/lib/module/core/index.js.map +1 -0
  111. package/lib/module/createStyleSheet.js +7 -0
  112. package/lib/module/createStyleSheet.js.map +1 -0
  113. package/lib/module/global.js +2 -0
  114. package/lib/module/global.js.map +1 -0
  115. package/lib/module/hooks/index.js +4 -1
  116. package/lib/module/hooks/index.js.map +1 -1
  117. package/lib/module/hooks/useCSS.js +37 -0
  118. package/lib/module/hooks/useCSS.js.map +1 -0
  119. package/lib/module/hooks/useCSS.native.js +2 -0
  120. package/lib/module/hooks/useCSS.native.js.map +1 -0
  121. package/lib/module/hooks/useInitialTheme.js +10 -0
  122. package/lib/module/hooks/useInitialTheme.js.map +1 -0
  123. package/lib/module/hooks/useUnistyles.js +57 -0
  124. package/lib/module/hooks/useUnistyles.js.map +1 -0
  125. package/lib/module/hooks/useVariants.js +7 -0
  126. package/lib/module/hooks/useVariants.js.map +1 -0
  127. package/lib/module/index.js +30 -2
  128. package/lib/module/index.js.map +1 -1
  129. package/lib/module/normalizer/index.js +3 -0
  130. package/lib/module/normalizer/index.js.map +1 -0
  131. package/lib/module/normalizer/module.d.js.map +1 -0
  132. package/lib/module/{utils/normalizeStyles.web.js → normalizer/normalizeStyle.js} +3 -3
  133. package/lib/module/normalizer/normalizeStyle.js.map +1 -0
  134. package/lib/module/{utils → normalizer}/normalizer.js +2 -3
  135. package/lib/module/normalizer/normalizer.js.map +1 -0
  136. package/lib/module/normalizer/normalizer.macos.js +2 -0
  137. package/lib/module/normalizer/normalizer.macos.js.map +1 -0
  138. package/lib/module/plugins/cssMediaQueriesPlugin.js +7 -0
  139. package/lib/module/plugins/cssMediaQueriesPlugin.js.map +1 -0
  140. package/lib/module/plugins/index.js +3 -0
  141. package/lib/module/plugins/index.js.map +1 -0
  142. package/lib/module/plugins/normalizeWebStylesPlugin.js +6 -0
  143. package/lib/module/plugins/normalizeWebStylesPlugin.js.map +1 -0
  144. package/lib/module/types/common.js +2 -0
  145. package/lib/module/types/common.js.map +1 -0
  146. package/lib/module/types/index.js +1 -0
  147. package/lib/module/types/index.js.map +1 -1
  148. package/lib/module/types/plugin.js +2 -0
  149. package/lib/module/types/plugin.js.map +1 -0
  150. package/lib/module/types/stylesheet.js +2 -0
  151. package/lib/module/types/stylesheet.js.map +1 -0
  152. package/lib/module/types/unistyles.js +2 -0
  153. package/lib/module/types/unistyles.js.map +1 -0
  154. package/lib/module/types/variants.js +2 -0
  155. package/lib/module/types/variants.js.map +1 -0
  156. package/lib/module/useStyles.js +40 -0
  157. package/lib/module/useStyles.js.map +1 -0
  158. package/lib/module/utils/breakpoints.js +19 -120
  159. package/lib/module/utils/breakpoints.js.map +1 -1
  160. package/lib/module/utils/cssMediaQuery.js +237 -0
  161. package/lib/module/utils/cssMediaQuery.js.map +1 -0
  162. package/lib/module/utils/generateId.js +7 -0
  163. package/lib/module/utils/generateId.js.map +1 -0
  164. package/lib/module/utils/hash32.js +36 -0
  165. package/lib/module/utils/hash32.js.map +1 -0
  166. package/lib/module/utils/index.js +6 -6
  167. package/lib/module/utils/index.js.map +1 -1
  168. package/lib/module/utils/mq.js +32 -0
  169. package/lib/module/utils/mq.js.map +1 -0
  170. package/lib/module/utils/mqParser.js +78 -0
  171. package/lib/module/utils/mqParser.js.map +1 -0
  172. package/lib/module/utils/styles.js +44 -72
  173. package/lib/module/utils/styles.js.map +1 -1
  174. package/lib/module/utils/withPlugins.js +8 -0
  175. package/lib/module/utils/withPlugins.js.map +1 -0
  176. package/lib/typescript/src/common.d.ts +46 -0
  177. package/lib/typescript/src/common.d.ts.map +1 -0
  178. package/lib/typescript/src/core/UnistyleRegistry.d.ts +56 -0
  179. package/lib/typescript/src/core/UnistyleRegistry.d.ts.map +1 -0
  180. package/lib/typescript/src/core/Unistyles.d.ts +13 -0
  181. package/lib/typescript/src/core/Unistyles.d.ts.map +1 -0
  182. package/lib/typescript/src/core/UnistylesModule.d.ts +19 -0
  183. package/lib/typescript/src/core/UnistylesModule.d.ts.map +1 -0
  184. package/lib/typescript/src/core/UnistylesModule.native.d.ts +6 -0
  185. package/lib/typescript/src/core/UnistylesModule.native.d.ts.map +1 -0
  186. package/lib/typescript/src/core/UnistylesRuntime.d.ts +81 -0
  187. package/lib/typescript/src/core/UnistylesRuntime.d.ts.map +1 -0
  188. package/lib/typescript/src/core/index.d.ts +3 -0
  189. package/lib/typescript/src/core/index.d.ts.map +1 -0
  190. package/lib/typescript/src/createStyleSheet.d.ts +8 -0
  191. package/lib/typescript/src/createStyleSheet.d.ts.map +1 -0
  192. package/lib/typescript/src/global.d.ts +7 -0
  193. package/lib/typescript/src/global.d.ts.map +1 -0
  194. package/lib/typescript/src/hooks/index.d.ts +4 -1
  195. package/lib/typescript/src/hooks/index.d.ts.map +1 -1
  196. package/lib/typescript/src/hooks/useCSS.d.ts +3 -0
  197. package/lib/typescript/src/hooks/useCSS.d.ts.map +1 -0
  198. package/lib/typescript/src/hooks/useCSS.native.d.ts +3 -0
  199. package/lib/typescript/src/hooks/useCSS.native.d.ts.map +1 -0
  200. package/lib/typescript/src/hooks/useInitialTheme.d.ts +3 -0
  201. package/lib/typescript/src/hooks/useInitialTheme.d.ts.map +1 -0
  202. package/lib/typescript/src/hooks/useUnistyles.d.ts +14 -0
  203. package/lib/typescript/src/hooks/useUnistyles.d.ts.map +1 -0
  204. package/lib/typescript/src/hooks/useVariants.d.ts +3 -0
  205. package/lib/typescript/src/hooks/useVariants.d.ts.map +1 -0
  206. package/lib/typescript/src/index.d.ts +76 -2
  207. package/lib/typescript/src/index.d.ts.map +1 -1
  208. package/lib/typescript/src/normalizer/index.d.ts +3 -0
  209. package/lib/typescript/src/normalizer/index.d.ts.map +1 -0
  210. package/lib/typescript/src/normalizer/normalizeStyle.d.ts +3 -0
  211. package/lib/typescript/src/normalizer/normalizeStyle.d.ts.map +1 -0
  212. package/lib/typescript/src/normalizer/normalizer.d.ts.map +1 -0
  213. package/lib/typescript/src/normalizer/normalizer.macos.d.ts +1 -0
  214. package/lib/typescript/src/normalizer/normalizer.macos.d.ts.map +1 -0
  215. package/lib/typescript/src/plugins/cssMediaQueriesPlugin.d.ts +3 -0
  216. package/lib/typescript/src/plugins/cssMediaQueriesPlugin.d.ts.map +1 -0
  217. package/lib/typescript/src/plugins/index.d.ts +3 -0
  218. package/lib/typescript/src/plugins/index.d.ts.map +1 -0
  219. package/lib/typescript/src/plugins/normalizeWebStylesPlugin.d.ts +3 -0
  220. package/lib/typescript/src/plugins/normalizeWebStylesPlugin.d.ts.map +1 -0
  221. package/lib/typescript/src/types/breakpoints.d.ts +25 -17
  222. package/lib/typescript/src/types/breakpoints.d.ts.map +1 -1
  223. package/lib/typescript/src/types/common.d.ts +3 -0
  224. package/lib/typescript/src/types/common.d.ts.map +1 -0
  225. package/lib/typescript/src/types/core.d.ts +11 -25
  226. package/lib/typescript/src/types/core.d.ts.map +1 -1
  227. package/lib/typescript/src/types/index.d.ts +7 -2
  228. package/lib/typescript/src/types/index.d.ts.map +1 -1
  229. package/lib/typescript/src/types/plugin.d.ts +7 -0
  230. package/lib/typescript/src/types/plugin.d.ts.map +1 -0
  231. package/lib/typescript/src/types/stylesheet.d.ts +40 -0
  232. package/lib/typescript/src/types/stylesheet.d.ts.map +1 -0
  233. package/lib/typescript/src/types/unistyles.d.ts +53 -0
  234. package/lib/typescript/src/types/unistyles.d.ts.map +1 -0
  235. package/lib/typescript/src/types/variants.d.ts +14 -0
  236. package/lib/typescript/src/types/variants.d.ts.map +1 -0
  237. package/lib/typescript/src/useStyles.d.ts +16 -0
  238. package/lib/typescript/src/useStyles.d.ts.map +1 -0
  239. package/lib/typescript/src/utils/breakpoints.d.ts +2 -62
  240. package/lib/typescript/src/utils/breakpoints.d.ts.map +1 -1
  241. package/lib/typescript/src/utils/cssMediaQuery.d.ts +4 -0
  242. package/lib/typescript/src/utils/cssMediaQuery.d.ts.map +1 -0
  243. package/lib/typescript/src/utils/generateId.d.ts +2 -0
  244. package/lib/typescript/src/utils/generateId.d.ts.map +1 -0
  245. package/lib/typescript/src/utils/hash32.d.ts +2 -0
  246. package/lib/typescript/src/utils/hash32.d.ts.map +1 -0
  247. package/lib/typescript/src/utils/index.d.ts +7 -6
  248. package/lib/typescript/src/utils/index.d.ts.map +1 -1
  249. package/lib/typescript/src/utils/mq.d.ts +26 -0
  250. package/lib/typescript/src/utils/mq.d.ts.map +1 -0
  251. package/lib/typescript/src/utils/mqParser.d.ts +16 -0
  252. package/lib/typescript/src/utils/mqParser.d.ts.map +1 -0
  253. package/lib/typescript/src/utils/styles.d.ts +3 -49
  254. package/lib/typescript/src/utils/styles.d.ts.map +1 -1
  255. package/lib/typescript/src/utils/withPlugins.d.ts +3 -0
  256. package/lib/typescript/src/utils/withPlugins.d.ts.map +1 -0
  257. package/package.json +46 -25
  258. package/react-native-unistyles.podspec +22 -0
  259. package/src/__tests__/mocks.ts +24 -0
  260. package/src/common.ts +55 -0
  261. package/src/core/UnistyleRegistry.ts +108 -0
  262. package/src/core/Unistyles.ts +35 -0
  263. package/src/core/UnistylesModule.native.ts +7 -0
  264. package/src/core/UnistylesModule.ts +230 -0
  265. package/src/core/UnistylesRuntime.ts +135 -0
  266. package/src/core/index.ts +2 -0
  267. package/src/createStyleSheet.ts +8 -0
  268. package/src/global.ts +6 -0
  269. package/src/hooks/index.ts +4 -1
  270. package/src/hooks/useCSS.native.ts +3 -0
  271. package/src/hooks/useCSS.ts +51 -0
  272. package/src/hooks/useInitialTheme.ts +11 -0
  273. package/src/hooks/useUnistyles.ts +64 -0
  274. package/src/hooks/useVariants.ts +10 -0
  275. package/src/index.ts +50 -2
  276. package/src/normalizer/index.ts +2 -0
  277. package/src/{utils/normalizeStyles.web.ts → normalizer/normalizeStyle.ts} +3 -3
  278. package/src/normalizer/normalizer.macos.ts +1 -0
  279. package/src/{utils → normalizer}/normalizer.ts +5 -4
  280. package/src/plugins/cssMediaQueriesPlugin.ts +8 -0
  281. package/src/plugins/index.ts +2 -0
  282. package/src/plugins/normalizeWebStylesPlugin.ts +7 -0
  283. package/src/types/breakpoints.ts +58 -33
  284. package/src/types/common.ts +2 -0
  285. package/src/types/core.ts +11 -36
  286. package/src/types/index.ts +12 -7
  287. package/src/types/plugin.ts +7 -0
  288. package/src/types/stylesheet.ts +49 -0
  289. package/src/types/unistyles.ts +63 -0
  290. package/src/types/variants.ts +19 -0
  291. package/src/useStyles.ts +60 -0
  292. package/src/utils/breakpoints.ts +28 -124
  293. package/src/utils/cssMediaQuery.ts +268 -0
  294. package/src/utils/generateId.ts +10 -0
  295. package/src/utils/hash32.ts +53 -0
  296. package/src/utils/index.ts +7 -13
  297. package/src/utils/mq.ts +57 -0
  298. package/src/utils/mqParser.ts +99 -0
  299. package/src/utils/styles.ts +54 -102
  300. package/src/utils/withPlugins.ts +13 -0
  301. package/lib/commonjs/UnistylesTheme.js +0 -21
  302. package/lib/commonjs/UnistylesTheme.js.map +0 -1
  303. package/lib/commonjs/createUnistyles.js +0 -57
  304. package/lib/commonjs/createUnistyles.js.map +0 -1
  305. package/lib/commonjs/hooks/useDimensions.js +0 -10
  306. package/lib/commonjs/hooks/useDimensions.js.map +0 -1
  307. package/lib/commonjs/hooks/useDimensions.web.js +0 -34
  308. package/lib/commonjs/hooks/useDimensions.web.js.map +0 -1
  309. package/lib/commonjs/types/mediaQueries.js +0 -2
  310. package/lib/commonjs/utils/common.js +0 -20
  311. package/lib/commonjs/utils/common.js.map +0 -1
  312. package/lib/commonjs/utils/mediaQueries.js +0 -189
  313. package/lib/commonjs/utils/mediaQueries.js.map +0 -1
  314. package/lib/commonjs/utils/normalizeStyles.js +0 -10
  315. package/lib/commonjs/utils/normalizeStyles.js.map +0 -1
  316. package/lib/commonjs/utils/normalizeStyles.web.js.map +0 -1
  317. package/lib/commonjs/utils/normalizer.js.map +0 -1
  318. package/lib/module/UnistylesTheme.js +0 -12
  319. package/lib/module/UnistylesTheme.js.map +0 -1
  320. package/lib/module/createUnistyles.js +0 -50
  321. package/lib/module/createUnistyles.js.map +0 -1
  322. package/lib/module/hooks/useDimensions.js +0 -3
  323. package/lib/module/hooks/useDimensions.js.map +0 -1
  324. package/lib/module/hooks/useDimensions.web.js +0 -27
  325. package/lib/module/hooks/useDimensions.web.js.map +0 -1
  326. package/lib/module/types/mediaQueries.js +0 -2
  327. package/lib/module/utils/common.js +0 -12
  328. package/lib/module/utils/common.js.map +0 -1
  329. package/lib/module/utils/mediaQueries.js +0 -176
  330. package/lib/module/utils/mediaQueries.js.map +0 -1
  331. package/lib/module/utils/normalizeStyles.js +0 -3
  332. package/lib/module/utils/normalizeStyles.js.map +0 -1
  333. package/lib/module/utils/normalizeStyles.web.js.map +0 -1
  334. package/lib/module/utils/normalizer.js.map +0 -1
  335. package/lib/typescript/examples/expo/src/App.d.ts +0 -3
  336. package/lib/typescript/examples/expo/src/App.d.ts.map +0 -1
  337. package/lib/typescript/examples/expo/src/examples/Breakpoints.d.ts +0 -3
  338. package/lib/typescript/examples/expo/src/examples/Breakpoints.d.ts.map +0 -1
  339. package/lib/typescript/examples/expo/src/examples/EmptyStyles.d.ts +0 -3
  340. package/lib/typescript/examples/expo/src/examples/EmptyStyles.d.ts.map +0 -1
  341. package/lib/typescript/examples/expo/src/examples/Extreme.d.ts +0 -7
  342. package/lib/typescript/examples/expo/src/examples/Extreme.d.ts.map +0 -1
  343. package/lib/typescript/examples/expo/src/examples/MediaQueries.d.ts +0 -3
  344. package/lib/typescript/examples/expo/src/examples/MediaQueries.d.ts.map +0 -1
  345. package/lib/typescript/examples/expo/src/examples/Memoization.d.ts +0 -3
  346. package/lib/typescript/examples/expo/src/examples/Memoization.d.ts.map +0 -1
  347. package/lib/typescript/examples/expo/src/examples/Minimal.d.ts +0 -3
  348. package/lib/typescript/examples/expo/src/examples/Minimal.d.ts.map +0 -1
  349. package/lib/typescript/examples/expo/src/examples/MinimalWithCreateStyleSheet.d.ts +0 -3
  350. package/lib/typescript/examples/expo/src/examples/MinimalWithCreateStyleSheet.d.ts.map +0 -1
  351. package/lib/typescript/examples/expo/src/examples/PlatformColors.d.ts +0 -3
  352. package/lib/typescript/examples/expo/src/examples/PlatformColors.d.ts.map +0 -1
  353. package/lib/typescript/examples/expo/src/examples/Theme.d.ts +0 -3
  354. package/lib/typescript/examples/expo/src/examples/Theme.d.ts.map +0 -1
  355. package/lib/typescript/examples/expo/src/examples/index.d.ts +0 -9
  356. package/lib/typescript/examples/expo/src/examples/index.d.ts.map +0 -1
  357. package/lib/typescript/examples/expo/src/index.d.ts +0 -2
  358. package/lib/typescript/examples/expo/src/index.d.ts.map +0 -1
  359. package/lib/typescript/examples/expo/src/styles/breakpoints.d.ts +0 -8
  360. package/lib/typescript/examples/expo/src/styles/breakpoints.d.ts.map +0 -1
  361. package/lib/typescript/examples/expo/src/styles/index.d.ts +0 -46
  362. package/lib/typescript/examples/expo/src/styles/index.d.ts.map +0 -1
  363. package/lib/typescript/examples/expo/src/styles/theme.d.ts +0 -24
  364. package/lib/typescript/examples/expo/src/styles/theme.d.ts.map +0 -1
  365. package/lib/typescript/src/UnistylesTheme.d.ts +0 -9
  366. package/lib/typescript/src/UnistylesTheme.d.ts.map +0 -1
  367. package/lib/typescript/src/createUnistyles.d.ts +0 -10
  368. package/lib/typescript/src/createUnistyles.d.ts.map +0 -1
  369. package/lib/typescript/src/hooks/useDimensions.d.ts +0 -3
  370. package/lib/typescript/src/hooks/useDimensions.d.ts.map +0 -1
  371. package/lib/typescript/src/hooks/useDimensions.web.d.ts +0 -3
  372. package/lib/typescript/src/hooks/useDimensions.web.d.ts.map +0 -1
  373. package/lib/typescript/src/types/mediaQueries.d.ts +0 -8
  374. package/lib/typescript/src/types/mediaQueries.d.ts.map +0 -1
  375. package/lib/typescript/src/utils/common.d.ts +0 -7
  376. package/lib/typescript/src/utils/common.d.ts.map +0 -1
  377. package/lib/typescript/src/utils/mediaQueries.d.ts +0 -130
  378. package/lib/typescript/src/utils/mediaQueries.d.ts.map +0 -1
  379. package/lib/typescript/src/utils/normalizeStyles.d.ts +0 -2
  380. package/lib/typescript/src/utils/normalizeStyles.d.ts.map +0 -1
  381. package/lib/typescript/src/utils/normalizeStyles.web.d.ts +0 -5
  382. package/lib/typescript/src/utils/normalizeStyles.web.d.ts.map +0 -1
  383. package/lib/typescript/src/utils/normalizer.d.ts.map +0 -1
  384. package/src/UnistylesTheme.tsx +0 -17
  385. package/src/__tests__/createUnistyles.spec.tsx +0 -192
  386. package/src/createUnistyles.ts +0 -70
  387. package/src/hooks/useDimensions.ts +0 -4
  388. package/src/hooks/useDimensions.web.ts +0 -34
  389. package/src/types/mediaQueries.ts +0 -10
  390. package/src/utils/common.ts +0 -14
  391. package/src/utils/mediaQueries.ts +0 -201
  392. package/src/utils/normalizeStyles.ts +0 -2
  393. /package/lib/commonjs/{utils → normalizer}/module.d.js +0 -0
  394. /package/lib/module/{utils → normalizer}/module.d.js +0 -0
  395. /package/lib/typescript/src/{utils → normalizer}/normalizer.d.ts +0 -0
  396. /package/src/{utils → normalizer}/module.d.ts +0 -0
@@ -0,0 +1,268 @@
1
+ import { normalizeColor } from '../normalizer'
2
+ import { isUnistylesMq, isValidMq, parseMq, type UnistylesParsedMq } from './mqParser'
3
+ import type { RNStyle, RNValue } from '../types'
4
+ import { generateReactNativeWebId } from './generateId'
5
+ import type { UnistylesRuntime } from '../core'
6
+
7
+ export const createMediaQueryForStyles = (styles: RNStyle, runtime: UnistylesRuntime): RNStyle => {
8
+ const withMediaQueries = Object
9
+ .entries(styles)
10
+ .filter(([, value]) => typeof value === 'object')
11
+ .reduce((acc, [prop, value]) => {
12
+ const objectKeys = Object.keys(value)
13
+ const mediaQueries = objectKeys.filter(key => isUnistylesMq(key))
14
+ const breakpoints = objectKeys.filter(key => runtime.breakpoints[key as keyof typeof runtime.breakpoints])
15
+
16
+ if (mediaQueries.length === 0 && breakpoints.length === 0) {
17
+ return acc
18
+ }
19
+
20
+ const className = generateReactNativeWebId(prop, '""')
21
+ const breakpointsStyles = getBreakpointsStyles(prop, value as Record<string, RNValue>, runtime, className)
22
+ const mediaQueriesStyles = getMediaQueriesFromMQ(prop, value as Record<string, RNValue>, className)
23
+
24
+ return {
25
+ ...acc,
26
+ [prop]: `
27
+ ${breakpointsStyles}
28
+ ${mediaQueriesStyles}
29
+ `.trim()
30
+ }
31
+ }, {})
32
+
33
+ return {
34
+ ...styles,
35
+ ...withMediaQueries
36
+ }
37
+ }
38
+
39
+ const getMaxWidthMediaQuery = (width: UnistylesParsedMq['width']): string => {
40
+ if (!width) {
41
+ return ''
42
+ }
43
+
44
+ if (width.to === Infinity) {
45
+ return ''
46
+ }
47
+
48
+ return `and (max-width: ${width.to}px)`
49
+ }
50
+
51
+ const getMaxHeightMediaQuery = (height: UnistylesParsedMq['height']): string => {
52
+ if (!height) {
53
+ return ''
54
+ }
55
+
56
+ if (height.to === Infinity) {
57
+ return ''
58
+ }
59
+
60
+ return `and (max-height: ${height.to}px)`
61
+ }
62
+
63
+ const getMediaQueriesFromMQ = (prop: string, value: Record<string, RNValue>, className: string): string => Object
64
+ .entries(value)
65
+ .reduce((acc, [key, value]) => {
66
+ const result = parseMq(key)
67
+
68
+ if (!isValidMq(result)) {
69
+ return acc
70
+ }
71
+
72
+ if (result.width && result.height) {
73
+ return `${acc}
74
+
75
+ @media screen and (min-width: ${result.width.from}px) and (min-height: ${result.height.from}px) ${getMaxWidthMediaQuery(result.width)} ${getMaxHeightMediaQuery(result.height)} {
76
+ .${className} {
77
+ ${normalizePropName(prop)}: ${normalizeWebValue(prop, value)};
78
+ }
79
+ }
80
+ `
81
+ }
82
+
83
+ if (result.width) {
84
+ return `${acc}
85
+
86
+ @media screen and (min-width: ${result.width.from}px) ${getMaxWidthMediaQuery(result.width)} {
87
+ .${className} {
88
+ ${normalizePropName(prop)}: ${normalizeWebValue(prop, value)};
89
+ }
90
+ }
91
+ `
92
+ }
93
+
94
+ if (result.height) {
95
+ return `${acc}
96
+
97
+ @media screen and (min-height: ${result.height.from}px) ${getMaxHeightMediaQuery(result.height)} {
98
+ .${className} {
99
+ ${normalizePropName(prop)}: ${normalizeWebValue(prop, value)};
100
+ }
101
+ }
102
+ `
103
+ }
104
+
105
+ return acc
106
+ }, '')
107
+
108
+ const getBreakpointsStyles = (prop: string, value: Record<string, RNValue>, runtime: UnistylesRuntime, className: string): string => Object
109
+ .entries(value)
110
+ .reduce((acc, [key, value]) => {
111
+ const breakpoint = runtime.breakpoints[key as keyof typeof runtime.breakpoints]
112
+
113
+ if (breakpoint === undefined) {
114
+ return acc
115
+ }
116
+
117
+ return `${acc}
118
+
119
+ @media screen and (min-width: ${breakpoint}px) {
120
+ .${className} {
121
+ ${normalizePropName(prop)}: ${normalizeWebValue(prop, value)};
122
+ }
123
+ }
124
+ `
125
+ }, '')
126
+
127
+ const normalizePropName = (prop: string) => prop.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()
128
+
129
+ const normalizeWebValue = (prop: string, value: RNValue): string => {
130
+ if (value === undefined) {
131
+ return 'unset'
132
+ }
133
+
134
+ switch (prop) {
135
+ // colors
136
+ case 'color':
137
+ case 'backgroundColor':
138
+ case 'borderColor':
139
+ case 'borderBottomColor':
140
+ case 'borderLeftColor':
141
+ case 'borderRightColor':
142
+ case 'borderTopColor':
143
+ case 'borderBlockColor':
144
+ case 'borderBlockEndColor':
145
+ case 'borderBlockStartColor':
146
+ case 'textDecorationColor':
147
+ return normalizeColor(value as string)
148
+
149
+ // dimensions
150
+ case 'width':
151
+ case 'height':
152
+ case 'minWidth':
153
+ case 'minHeight':
154
+ case 'maxWidth':
155
+ case 'maxHeight':
156
+ case 'borderRadius':
157
+ case 'borderWidth':
158
+ case 'borderBottomLeftRadius':
159
+ case 'borderBottomRightRadius':
160
+ case 'borderEndEndRadius':
161
+ case 'borderEndStartRadius':
162
+ case 'borderStartEndRadius':
163
+ case 'borderStartStartRadius':
164
+ case 'borderTopLeftRadius':
165
+ case 'borderTopRightRadius':
166
+ case 'borderBottomWidth':
167
+ case 'borderLeftWidth':
168
+ case 'borderRightWidth':
169
+ case 'borderTopWidth':
170
+ case 'bottom':
171
+ case 'left':
172
+ case 'right':
173
+ case 'top':
174
+ case 'marginTop':
175
+ case 'marginBottom':
176
+ case 'marginLeft':
177
+ case 'marginRight':
178
+ case 'paddingTop':
179
+ case 'paddingBottom':
180
+ case 'paddingLeft':
181
+ case 'paddingRight':
182
+ case 'flexBasis':
183
+ case 'rowGap':
184
+ case 'columnGap':
185
+ case 'gap':
186
+ case 'margin':
187
+ case 'padding':
188
+ case 'fontSize':
189
+ case 'letterSpacing':
190
+ return `${value as string}px`
191
+
192
+ // without unit
193
+ case 'borderStyle':
194
+ case 'pointerEvents':
195
+ case 'backfaceVisibility':
196
+ case 'alignContent':
197
+ case 'alignItems':
198
+ case 'alignSelf':
199
+ case 'flexDirection':
200
+ case 'flexWrap':
201
+ case 'flex':
202
+ case 'aspectRatio':
203
+ case 'opacity':
204
+ case 'direction':
205
+ case 'zIndex':
206
+ case 'justifyContent':
207
+ case 'overflow':
208
+ case 'display':
209
+ case 'position':
210
+ case 'flexGrow':
211
+ case 'flexShrink':
212
+ case 'fontFamily':
213
+ case 'fontStyle':
214
+ case 'textDecorationLine':
215
+ case 'textAlign':
216
+ case 'textDecorationStyle':
217
+ case 'lineHeight':
218
+ case 'textTransform':
219
+ case 'fontVariant':
220
+ case 'verticalAlign':
221
+ case 'objectFit':
222
+ return value as string
223
+
224
+ // to be transformed for now
225
+ // not supported
226
+ case 'marginHorizontal':
227
+ case 'paddingHorizontal':
228
+ case 'marginVertical':
229
+ case 'paddingVertical':
230
+ case 'shadowColor':
231
+ case 'shadowOffset':
232
+ case 'shadowOpacity':
233
+ case 'shadowRadius':
234
+ case 'transform':
235
+ case 'transformMatrix':
236
+ case 'fontWeight':
237
+ case 'textShadowOffset':
238
+ case 'textShadowRadius':
239
+ case 'textShadowColor':
240
+ return ''
241
+
242
+ // unsupported
243
+ case 'borderStartColor':
244
+ case 'borderEndColor':
245
+ case 'borderEndWidth':
246
+ case 'borderBottomEndRadius':
247
+ case 'borderBottomStartRadius':
248
+ case 'borderCurve':
249
+ case 'elevation':
250
+ case 'borderTopEndRadius':
251
+ case 'borderTopStartRadius':
252
+ case 'borderStartWidth':
253
+ case 'start':
254
+ case 'end':
255
+ case 'margin-end':
256
+ case 'margin-start':
257
+ case 'padding-end':
258
+ case 'padding-start':
259
+ case 'writingDirection':
260
+ case 'textAlignVertical':
261
+ case 'includeFontPadding':
262
+ case 'resizeMode':
263
+ case 'overlayColor':
264
+ case 'tintColor':
265
+ default:
266
+ return ''
267
+ }
268
+ }
@@ -0,0 +1,10 @@
1
+ // eslint-disable-next-line camelcase
2
+ import { murmurhash2_32_gc } from './hash32'
3
+
4
+ export const generateReactNativeWebId = (key: string, value: string): string => {
5
+ const hashedString = murmurhash2_32_gc(key + value, 1).toString(36)
6
+
7
+ return process.env.NODE_ENV !== 'production'
8
+ ? `r-${key}-${hashedString}`
9
+ : `r-${hashedString}`
10
+ }
@@ -0,0 +1,53 @@
1
+ /*
2
+ Authors: Gary Court and Austin Appleby
3
+ Compatible with React Native Web
4
+ https://github.com/necolas/react-native-web/blob/master/packages/react-native-web/src/exports/StyleSheet/compiler/hash.js#L65
5
+ */
6
+ export const murmurhash2_32_gc = (str: string, seed: number) => {
7
+ let l = str.length
8
+ let h = seed ^ l
9
+ let i = 0
10
+ let k
11
+
12
+ while (l >= 4) {
13
+ k =
14
+ (str.charCodeAt(i) & 0xff) |
15
+ ((str.charCodeAt(++i) & 0xff) << 8) |
16
+ ((str.charCodeAt(++i) & 0xff) << 16) |
17
+ ((str.charCodeAt(++i) & 0xff) << 24)
18
+
19
+ k =
20
+ (k & 0xffff) * 0x5bd1e995 + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16)
21
+ k ^= k >>> 24
22
+ k =
23
+ (k & 0xffff) * 0x5bd1e995 + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16)
24
+
25
+ h =
26
+ ((h & 0xffff) * 0x5bd1e995 +
27
+ ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16)) ^
28
+ k
29
+
30
+ l -= 4
31
+ ++i
32
+ }
33
+
34
+ switch (l) {
35
+ // @ts-ignore
36
+ case 3:
37
+ h ^= (str.charCodeAt(i + 2) & 0xff) << 16
38
+ // @ts-ignore
39
+ case 2:
40
+ h ^= (str.charCodeAt(i + 1) & 0xff) << 8
41
+ case 1:
42
+ h ^= str.charCodeAt(i) & 0xff
43
+ h =
44
+ (h & 0xffff) * 0x5bd1e995 +
45
+ ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16)
46
+ }
47
+
48
+ h ^= h >>> 13
49
+ h = (h & 0xffff) * 0x5bd1e995 + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16)
50
+ h ^= h >>> 15
51
+
52
+ return h >>> 0
53
+ }
@@ -1,13 +1,7 @@
1
- export { normalizeStyles } from './normalizeStyles'
2
- export * from './normalizer'
3
- export { getBreakpointFromScreenWidth, sortAndValidateBreakpoints, getValueForBreakpoint } from './breakpoints'
4
- export { proxifyFunction, parseStyle } from './styles'
5
- export { isServer } from './common'
6
- export {
7
- extractValues,
8
- getKeyForCustomMediaQuery,
9
- isMediaQuery,
10
- isWithinTheHeight,
11
- isWithinTheWidth,
12
- isWithinTheWidthAndHeight
13
- } from './mediaQueries'
1
+ export { mq } from './mq'
2
+ export type { UnistylesParsedMq } from './mqParser'
3
+ export { getKeyForUnistylesMediaQuery, isWithinTheWidthAndHeight, isValidMq, parseMq, isUnistylesMq } from './mqParser'
4
+ export { getValueForBreakpoint } from './breakpoints'
5
+ export { proxifyFunction, parseStyle, isPlatformColor } from './styles'
6
+ export { withPlugins } from './withPlugins'
7
+ export { generateReactNativeWebId } from './generateId'
@@ -0,0 +1,57 @@
1
+ import type { Nullable } from '../types'
2
+ import type { UnistylesBreakpoints } from '../global'
3
+ import { unistyles } from '../core'
4
+
5
+ type MQValue = keyof UnistylesBreakpoints | number
6
+
7
+ type MQHandler = {
8
+ only: {
9
+ width(wMin?: Nullable<MQValue>, wMax?: MQValue): symbol,
10
+ height(hMin?: Nullable<MQValue>, hMax?: MQValue): symbol,
11
+ },
12
+ width(wMin?: Nullable<MQValue>, wMax?: MQValue): {
13
+ and: {
14
+ height(hMin?: Nullable<MQValue>, hMax?: MQValue): symbol
15
+ }
16
+ },
17
+ height(hMin?: Nullable<MQValue>, hMax?: MQValue): {
18
+ and: {
19
+ width(wMin?: Nullable<MQValue>, wMax?: MQValue): symbol
20
+ }
21
+ }
22
+ }
23
+
24
+ const getMQValue = (value: Nullable<MQValue>) => {
25
+ if (typeof value === 'number') {
26
+ return value
27
+ }
28
+
29
+ if (value === null) {
30
+ return 0
31
+ }
32
+
33
+ return unistyles.registry.breakpoints[value] ?? 0
34
+ }
35
+
36
+ /**
37
+ * Utility to create cross-platform media queries
38
+ * @returns - JavaScript symbol to be used in your stylesheet
39
+ */
40
+ export const mq: MQHandler = {
41
+ only: {
42
+ width: (wMin: Nullable<MQValue> = 0, wMax: MQValue = Infinity) => (`:w[${getMQValue(wMin)}, ${getMQValue(wMax)}]` as unknown as symbol),
43
+ height: (hMin: Nullable<MQValue> = 0, hMax: MQValue = Infinity) => (`:h[${getMQValue(hMin)}, ${getMQValue(hMax)}]` as unknown as symbol)
44
+ },
45
+ width: (wMin: Nullable<MQValue> = 0, wMax: MQValue = Infinity) => ({
46
+ and: {
47
+ height: (hMin: Nullable<MQValue> = 0, hMax: MQValue = Infinity) =>
48
+ (`:w[${getMQValue(wMin)}, ${getMQValue(wMax)}]:h[${getMQValue(hMin)}, ${getMQValue(hMax)}]` as unknown as symbol)
49
+ }
50
+ }),
51
+ height: (hMin: Nullable<MQValue> = 0, hMax: MQValue = Infinity) => ({
52
+ and: {
53
+ width: (wMin: Nullable<MQValue> = 0, wMax: MQValue = Infinity) =>
54
+ (`:w[${getMQValue(wMin)}, ${getMQValue(wMax)}]:h[${getMQValue(hMin)}, ${getMQValue(hMax)}]` as unknown as symbol)
55
+ }
56
+ })
57
+ }
@@ -0,0 +1,99 @@
1
+ import type { Optional, RNValue, ScreenSize } from '../types'
2
+
3
+ const IS_UNISTYLES_REGEX = /:([hw])\[(\d+)(?:,\s*(\d+|Infinity))?]/
4
+ const UNISTYLES_WIDTH_REGEX = /:(w)\[(\d+)(?:,\s*(\d+|Infinity))?]/
5
+ const UNISTYLES_HEIGHT_REGEX = /:(h)\[(\d+)(?:,\s*(\d+|Infinity))?]/
6
+
7
+ type ParsedMqDimension = {
8
+ from: number,
9
+ to: number
10
+ }
11
+
12
+ export type UnistylesParsedMq = {
13
+ width?: ParsedMqDimension,
14
+ height?: ParsedMqDimension
15
+ }
16
+
17
+ export const parseMq = (mq: string): UnistylesParsedMq => {
18
+ const [, width, fromW, toW] = UNISTYLES_WIDTH_REGEX.exec(mq) || []
19
+ const [, height, fromH, toH] = UNISTYLES_HEIGHT_REGEX.exec(mq) || []
20
+
21
+ return {
22
+ width: width ? {
23
+ from: Number(fromW),
24
+ to: Number(toW)
25
+ } : undefined,
26
+ height: height ? {
27
+ from: Number(fromH),
28
+ to: Number(toH)
29
+ } : undefined
30
+ }
31
+ }
32
+
33
+ export const isUnistylesMq = (mq: string) => IS_UNISTYLES_REGEX.test(mq)
34
+
35
+ export const isValidMq = (parsedMq: UnistylesParsedMq) => {
36
+ const { width, height } = parsedMq
37
+
38
+ if (width && height) {
39
+ return width.from <= width.to && height.from <= height.to
40
+ }
41
+
42
+ if (width) {
43
+ return width.from <= width.to
44
+ }
45
+
46
+ if (height) {
47
+ return height.from <= height.to
48
+ }
49
+
50
+ return false
51
+ }
52
+
53
+ export const isWithinTheWidthAndHeight = (parsedMq: UnistylesParsedMq, screenSize: ScreenSize): boolean => {
54
+ const { width, height } = parsedMq
55
+
56
+ if (width && height) {
57
+ return isWithinTheWidth(width, screenSize.width) && isWithinTheHeight(height, screenSize.height)
58
+ }
59
+
60
+ if (width) {
61
+ return isWithinTheWidth(width, screenSize.width)
62
+ }
63
+
64
+ if (height) {
65
+ return isWithinTheHeight(height, screenSize.height)
66
+ }
67
+
68
+ return false
69
+ }
70
+
71
+ const isWithinTheWidth = (width: UnistylesParsedMq['width'], screenWidth: number): boolean => {
72
+ const { from, to } = width as ParsedMqDimension
73
+
74
+ return screenWidth >= from && screenWidth <= to
75
+ }
76
+
77
+ const isWithinTheHeight = (height: UnistylesParsedMq['height'], screenHeight: number): boolean => {
78
+ const { from, to } = height as ParsedMqDimension
79
+
80
+ return screenHeight >= from && screenHeight <= to
81
+ }
82
+
83
+ export const getKeyForUnistylesMediaQuery = (mediaQueries: Array<[string, RNValue]>, screenSize: ScreenSize): Optional<string> => {
84
+ const mq = mediaQueries.find(([key]) => {
85
+ if (!isUnistylesMq(key as string)) {
86
+ return false
87
+ }
88
+
89
+ const parsedMq = parseMq(key as string)
90
+
91
+ if (!isValidMq(parsedMq)) {
92
+ return false
93
+ }
94
+
95
+ return isWithinTheWidthAndHeight(parsedMq, screenSize)
96
+ })
97
+
98
+ return mq?.at(0) as Optional<string>
99
+ }
@@ -1,36 +1,14 @@
1
- import type { Breakpoints, CustomNamedStyles, ScreenSize, SortedBreakpointEntries } from '../types'
1
+ import type { Optional, RNStyle, RNValue } from '../types'
2
2
  import { getValueForBreakpoint } from './breakpoints'
3
- import { normalizeStyles } from './normalizeStyles'
4
- import { isAndroid, isIOS, isWeb } from './common'
3
+ import { isAndroid, isIOS } from '../common'
4
+ import { withPlugins } from './withPlugins'
5
5
 
6
- /**
7
- * Proxies a function to parse its return value for custom media queries or breakpoints.
8
- *
9
- * @template B - An object type where keys represent breakpoint names and values represent breakpoint values.
10
- *
11
- * @param {Function} fn - The function to be proxified.
12
- * @param {keyof B & string} breakpoint - The breakpoint name to check against.
13
- * @param {ScreenSize} screenSize - An object representing the screen size to be checked against the media queries.
14
- * @param breakpointPairs - sorted pairs of breakpoints
15
- *
16
- * @returns {Function} Returns the proxified function
17
- *
18
- * @example
19
- *
20
- * const myFunction = () => ({ ':w[200]': 'value1', sm: 'value2' })
21
- * const screenSize = { width: 250, height: 400 }
22
- * const breakpoints = { sm: 300, md: 600 }
23
- *
24
- * const proxifiedFunction = proxifyFunction(myFunction, 'sm', screenSize, breakpoints)
25
- * proxifiedFunction() // parsed style based on screenSize and breakpoints
26
- */
27
- export const proxifyFunction = <B extends Breakpoints>(
28
- fn: Function, breakpoint: keyof B & string,
29
- screenSize: ScreenSize,
30
- breakpointPairs: SortedBreakpointEntries<B>
6
+ export const proxifyFunction = (
7
+ key: string,
8
+ fn: Function,
9
+ variant?: Record<string, Optional<string>>
31
10
  ): Function => new Proxy(fn, {
32
- apply: (target, thisArg, argumentsList) =>
33
- parseStyle(target.apply(thisArg, argumentsList), breakpoint, screenSize, breakpointPairs)
11
+ apply: (target, thisArg, argumentsList) => withPlugins(key, parseStyle(target.apply(thisArg, argumentsList), variant))
34
12
  })
35
13
 
36
14
  export const isPlatformColor = <T extends {}>(value: T): boolean => {
@@ -41,83 +19,57 @@ export const isPlatformColor = <T extends {}>(value: T): boolean => {
41
19
  return isAndroid && 'resource_paths' in value && typeof value.resource_paths === 'object'
42
20
  }
43
21
 
44
- /**
45
- * Parses a style object to resolve custom media queries or breakpoints based on the provided screen size and breakpoints.
46
- *
47
- * The function processes each key-value pair in the style object. If the value is a function or a valid style (not an object or a 'transform' key),
48
- * it is returned as-is. Otherwise, the function attempts to resolve the value based on the provided breakpoint, screen size, and defined breakpoints.
49
- *
50
- * @template T - The type of the style object.
51
- * @template B - An object type where keys represent breakpoint names and values represent breakpoint values.
52
- *
53
- * @param {CustomNamedStyles<T, B>} style - The style object to be parsed.
54
- * @param {keyof B & string} breakpoint - The breakpoint name to check against.
55
- * @param {ScreenSize} screenSize - An object representing the screen size to be checked against the media queries.
56
- * @param breakpointPairs - sorted pairs of breakpoints
57
- *
58
- * @returns {Record<string, string | number | Function>} Returns the parsed style object with resolved custom media queries or breakpoints.
59
- *
60
- * @example
61
- *
62
- * const style = { fontSize: { sm: '12px', md: '16px' } }
63
- * const screenSize = { width: 300, height: 400 }
64
- * const breakpoints = { xs: 0, sm: 300, md: 600 }
65
- *
66
- * const parsedStyle = parseStyle(style, 'sm', screenSize, breakpoints)
67
- * // { fontSize: '12px' }
68
- */
69
- export const parseStyle = <T, B extends Breakpoints>(
70
- style: CustomNamedStyles<T, B>,
71
- breakpoint: keyof B & string,
72
- screenSize: ScreenSize,
73
- breakpointPairs: SortedBreakpointEntries<B>
74
- ): T => {
75
- const entries = Object.entries(style || {}) as [[
76
- keyof T,
77
- CustomNamedStyles<T, B> | Record<keyof B & string, string | number | undefined>]
78
- ]
22
+ export const parseStyle = <T extends RNStyle>(
23
+ style: T,
24
+ variant: Record<string, Optional<string>> = {},
25
+ parseMediaQueries = true
26
+ ): T => Object
27
+ .entries(style || {})
28
+ .reduce((acc, [key, value]) => {
29
+ // nested objects
30
+ if (key === 'shadowOffset' || key === 'textShadowOffset') {
31
+ acc[key] = parseStyle(value, variant)
79
32
 
80
- const parsedStyles = Object
81
- .fromEntries(entries
82
- .map(([key, value]) => {
83
- const hasNestedProperties = key === 'shadowOffset' || key === 'textShadowOffset'
33
+ return acc
34
+ }
84
35
 
85
- if (hasNestedProperties) {
86
- return [
87
- key,
88
- parseStyle(value as CustomNamedStyles<T, B>, breakpoint, screenSize, breakpointPairs)
89
- ]
90
- }
36
+ // transforms
37
+ if (key === 'transform' && Array.isArray(value)) {
38
+ acc[key] = value.map(value => parseStyle(value, variant))
91
39
 
92
- const isTransform = key === 'transform'
40
+ return acc
41
+ }
93
42
 
94
- if (isTransform && Array.isArray(value)) {
95
- return [
96
- key,
97
- value.map(value => parseStyle(value, breakpoint, screenSize, breakpointPairs))
98
- ]
99
- }
43
+ // values or platform colors
44
+ if (typeof value !== 'object' || isPlatformColor(value)) {
45
+ acc[key as keyof T] = value
100
46
 
101
- const isDynamicFunction = typeof value === 'function'
102
- const isValidStyle = typeof value !== 'object' || isPlatformColor(value)
47
+ return acc
48
+ }
103
49
 
104
- if (isDynamicFunction || isValidStyle) {
105
- return [key, value]
106
- }
50
+ if (key === 'variants') {
51
+ return {
52
+ ...acc,
53
+ ...(Object
54
+ .keys(value) as Array<keyof typeof value>)
55
+ .reduce((acc, key) => ({
56
+ ...acc,
57
+ // this will parse the styles of the selected variant (or default if it is undefined), if selected variant has no styles then it will fallback to default styles
58
+ ...parseStyle((value)[key][variant[key as keyof typeof variant] || 'default'] ?? (value)[key].default ?? {})
59
+ }), {})
60
+ }
61
+ }
107
62
 
108
- return [
109
- key,
110
- getValueForBreakpoint<B>(
111
- value as Record<keyof B & string, string | number | undefined>,
112
- breakpoint,
113
- screenSize,
114
- breakpointPairs
115
- )
116
- ]
117
- })
118
- )
63
+ // don't parse media queries and breakpoints
64
+ if (!parseMediaQueries) {
65
+ return {
66
+ ...acc,
67
+ [key]: value
68
+ }
69
+ }
119
70
 
120
- return isWeb
121
- ? normalizeStyles(parsedStyles)
122
- : parsedStyles
123
- }
71
+ return {
72
+ ...acc,
73
+ [key]: getValueForBreakpoint(value as Record<string, RNValue>)
74
+ }
75
+ }, {} as T)