react-native-unistyles 1.2.0 → 1.3.0

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 (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)