react-native-css 3.0.7 → 3.1.0-rc.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 (476) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/commonjs/babel/import-plugin.js +9 -3
  3. package/dist/commonjs/babel/import-plugin.js.map +1 -1
  4. package/dist/commonjs/babel/react-native-web.js +16 -3
  5. package/dist/commonjs/babel/react-native-web.js.map +1 -1
  6. package/dist/commonjs/babel/react-native.js +7 -2
  7. package/dist/commonjs/babel/react-native.js.map +1 -1
  8. package/dist/commonjs/compiler/atRules.js +35 -0
  9. package/dist/commonjs/compiler/atRules.js.map +1 -1
  10. package/dist/commonjs/compiler/compiler.js +29 -27
  11. package/dist/commonjs/compiler/compiler.js.map +1 -1
  12. package/dist/commonjs/compiler/container-query.js +6 -1
  13. package/dist/commonjs/compiler/container-query.js.map +1 -1
  14. package/dist/commonjs/compiler/declarations.js +102 -61
  15. package/dist/commonjs/compiler/declarations.js.map +1 -1
  16. package/dist/commonjs/compiler/lightningcss-loader.js +11 -8
  17. package/dist/commonjs/compiler/lightningcss-loader.js.map +1 -1
  18. package/dist/commonjs/compiler/media-query.js +16 -6
  19. package/dist/commonjs/compiler/media-query.js.map +1 -1
  20. package/dist/commonjs/compiler/selector-builder.js +13 -3
  21. package/dist/commonjs/compiler/selector-builder.js.map +1 -1
  22. package/dist/commonjs/components/ImageBackground.js +2 -6
  23. package/dist/commonjs/components/ImageBackground.js.map +1 -1
  24. package/dist/commonjs/components/KeyboardAvoidingView.js +2 -3
  25. package/dist/commonjs/components/KeyboardAvoidingView.js.map +1 -1
  26. package/dist/commonjs/components/index.cjs +46 -1
  27. package/dist/commonjs/components/index.cjs.map +1 -1
  28. package/dist/commonjs/jest/index.js +1 -1
  29. package/dist/commonjs/jest/index.js.map +1 -1
  30. package/dist/commonjs/metro/cache-version.js +43 -0
  31. package/dist/commonjs/metro/cache-version.js.map +1 -0
  32. package/dist/commonjs/metro/index.js +2 -0
  33. package/dist/commonjs/metro/index.js.map +1 -1
  34. package/dist/commonjs/metro/metro-transformer.js +1 -1
  35. package/dist/commonjs/metro/metro-transformer.js.map +1 -1
  36. package/dist/commonjs/metro/typescript.js +26 -6
  37. package/dist/commonjs/metro/typescript.js.map +1 -1
  38. package/dist/commonjs/native/api.js +12 -8
  39. package/dist/commonjs/native/api.js.map +1 -1
  40. package/dist/commonjs/native/conditions/attributes.js +16 -9
  41. package/dist/commonjs/native/conditions/attributes.js.map +1 -1
  42. package/dist/commonjs/native/conditions/container-query.js +11 -11
  43. package/dist/commonjs/native/conditions/container-query.js.map +1 -1
  44. package/dist/commonjs/native/conditions/media-query.js +1 -1
  45. package/dist/commonjs/native/conditions/media-query.js.map +1 -1
  46. package/dist/commonjs/native/react/interaction.js +10 -5
  47. package/dist/commonjs/native/react/interaction.js.map +1 -1
  48. package/dist/commonjs/native/react/rules.js +12 -5
  49. package/dist/commonjs/native/react/rules.js.map +1 -1
  50. package/dist/commonjs/native/react/useNativeCss.js +48 -12
  51. package/dist/commonjs/native/react/useNativeCss.js.map +1 -1
  52. package/dist/commonjs/native/react/usePassthrough.js +5 -2
  53. package/dist/commonjs/native/react/usePassthrough.js.map +1 -1
  54. package/dist/commonjs/native/reactivity.js +32 -22
  55. package/dist/commonjs/native/reactivity.js.map +1 -1
  56. package/dist/commonjs/native/reanimated.js +15 -3
  57. package/dist/commonjs/native/reanimated.js.map +1 -1
  58. package/dist/commonjs/native/styles/functions/color-mix.js +43 -29
  59. package/dist/commonjs/native/styles/functions/color-mix.js.map +1 -1
  60. package/dist/commonjs/native/styles/functions/filters.js +14 -1
  61. package/dist/commonjs/native/styles/functions/filters.js.map +1 -1
  62. package/dist/commonjs/native/styles/functions/numeric-functions.js +4 -3
  63. package/dist/commonjs/native/styles/functions/numeric-functions.js.map +1 -1
  64. package/dist/commonjs/native/styles/functions/string-functions.js +16 -1
  65. package/dist/commonjs/native/styles/functions/string-functions.js.map +1 -1
  66. package/dist/commonjs/native/styles/functions/transform-functions.js +5 -4
  67. package/dist/commonjs/native/styles/functions/transform-functions.js.map +1 -1
  68. package/dist/commonjs/native/styles/index.js +95 -12
  69. package/dist/commonjs/native/styles/index.js.map +1 -1
  70. package/dist/commonjs/native/styles/resolve.js +10 -6
  71. package/dist/commonjs/native/styles/resolve.js.map +1 -1
  72. package/dist/commonjs/native/styles/scale-factor.js +13 -0
  73. package/dist/commonjs/native/styles/scale-factor.js.map +1 -0
  74. package/dist/commonjs/native/styles/shorthands/animation.js +6 -3
  75. package/dist/commonjs/native/styles/shorthands/animation.js.map +1 -1
  76. package/dist/commonjs/native/styles/shorthands/index.js +11 -0
  77. package/dist/commonjs/native/styles/shorthands/index.js.map +1 -1
  78. package/dist/commonjs/native/styles/shorthands/logical-border-width.js +22 -0
  79. package/dist/commonjs/native/styles/shorthands/logical-border-width.js.map +1 -0
  80. package/dist/commonjs/native/styles/variables.js +55 -43
  81. package/dist/commonjs/native/styles/variables.js.map +1 -1
  82. package/dist/commonjs/native-internal/style-collection.js +1 -1
  83. package/dist/commonjs/native-internal/style-collection.js.map +1 -1
  84. package/dist/commonjs/utilities/dot-notation.types.js +4 -0
  85. package/dist/commonjs/utilities/style-descriptor.js +4 -9
  86. package/dist/commonjs/utilities/style-descriptor.js.map +1 -1
  87. package/dist/commonjs/web/api.js +1 -1
  88. package/dist/commonjs/web/api.js.map +1 -1
  89. package/dist/commonjs/web/assign-style.js +4 -1
  90. package/dist/commonjs/web/assign-style.js.map +1 -1
  91. package/dist/module/babel/import-plugin.js +11 -5
  92. package/dist/module/babel/import-plugin.js.map +1 -1
  93. package/dist/module/babel/react-native-web.js +16 -4
  94. package/dist/module/babel/react-native-web.js.map +1 -1
  95. package/dist/module/babel/react-native.js +7 -2
  96. package/dist/module/babel/react-native.js.map +1 -1
  97. package/dist/module/compiler/atRules.js +33 -0
  98. package/dist/module/compiler/atRules.js.map +1 -1
  99. package/dist/module/compiler/compiler.js +30 -28
  100. package/dist/module/compiler/compiler.js.map +1 -1
  101. package/dist/module/compiler/container-query.js +6 -1
  102. package/dist/module/compiler/container-query.js.map +1 -1
  103. package/dist/module/compiler/declarations.js +102 -61
  104. package/dist/module/compiler/declarations.js.map +1 -1
  105. package/dist/module/compiler/lightningcss-loader.js +10 -8
  106. package/dist/module/compiler/lightningcss-loader.js.map +1 -1
  107. package/dist/module/compiler/media-query.js +16 -6
  108. package/dist/module/compiler/media-query.js.map +1 -1
  109. package/dist/module/compiler/selector-builder.js +13 -3
  110. package/dist/module/compiler/selector-builder.js.map +1 -1
  111. package/dist/module/components/ImageBackground.js +2 -6
  112. package/dist/module/components/ImageBackground.js.map +1 -1
  113. package/dist/module/components/KeyboardAvoidingView.js +2 -3
  114. package/dist/module/components/KeyboardAvoidingView.js.map +1 -1
  115. package/dist/module/components/index.cjs +46 -1
  116. package/dist/module/components/index.cjs.map +1 -1
  117. package/dist/module/jest/index.js +1 -1
  118. package/dist/module/jest/index.js.map +1 -1
  119. package/dist/module/metro/cache-version.js +39 -0
  120. package/dist/module/metro/cache-version.js.map +1 -0
  121. package/dist/module/metro/index.js +2 -0
  122. package/dist/module/metro/index.js.map +1 -1
  123. package/dist/module/metro/metro-transformer.js +1 -1
  124. package/dist/module/metro/metro-transformer.js.map +1 -1
  125. package/dist/module/metro/typescript.js +26 -6
  126. package/dist/module/metro/typescript.js.map +1 -1
  127. package/dist/module/native/api.js +14 -10
  128. package/dist/module/native/api.js.map +1 -1
  129. package/dist/module/native/conditions/attributes.js +16 -9
  130. package/dist/module/native/conditions/attributes.js.map +1 -1
  131. package/dist/module/native/conditions/container-query.js +11 -11
  132. package/dist/module/native/conditions/container-query.js.map +1 -1
  133. package/dist/module/native/conditions/media-query.js +1 -1
  134. package/dist/module/native/conditions/media-query.js.map +1 -1
  135. package/dist/module/native/react/interaction.js +10 -5
  136. package/dist/module/native/react/interaction.js.map +1 -1
  137. package/dist/module/native/react/rules.js +13 -6
  138. package/dist/module/native/react/rules.js.map +1 -1
  139. package/dist/module/native/react/useNativeCss.js +49 -13
  140. package/dist/module/native/react/useNativeCss.js.map +1 -1
  141. package/dist/module/native/react/usePassthrough.js +5 -2
  142. package/dist/module/native/react/usePassthrough.js.map +1 -1
  143. package/dist/module/native/reactivity.js +32 -22
  144. package/dist/module/native/reactivity.js.map +1 -1
  145. package/dist/module/native/reanimated.js +15 -3
  146. package/dist/module/native/reanimated.js.map +1 -1
  147. package/dist/module/native/styles/functions/color-mix.js +43 -29
  148. package/dist/module/native/styles/functions/color-mix.js.map +1 -1
  149. package/dist/module/native/styles/functions/filters.js +12 -0
  150. package/dist/module/native/styles/functions/filters.js.map +1 -1
  151. package/dist/module/native/styles/functions/numeric-functions.js +4 -3
  152. package/dist/module/native/styles/functions/numeric-functions.js.map +1 -1
  153. package/dist/module/native/styles/functions/string-functions.js +13 -0
  154. package/dist/module/native/styles/functions/string-functions.js.map +1 -1
  155. package/dist/module/native/styles/functions/transform-functions.js +5 -4
  156. package/dist/module/native/styles/functions/transform-functions.js.map +1 -1
  157. package/dist/module/native/styles/index.js +95 -12
  158. package/dist/module/native/styles/index.js.map +1 -1
  159. package/dist/module/native/styles/resolve.js +10 -6
  160. package/dist/module/native/styles/resolve.js.map +1 -1
  161. package/dist/module/native/styles/scale-factor.js +9 -0
  162. package/dist/module/native/styles/scale-factor.js.map +1 -0
  163. package/dist/module/native/styles/shorthands/animation.js +6 -3
  164. package/dist/module/native/styles/shorthands/animation.js.map +1 -1
  165. package/dist/module/native/styles/shorthands/index.js +1 -0
  166. package/dist/module/native/styles/shorthands/index.js.map +1 -1
  167. package/dist/module/native/styles/shorthands/logical-border-width.js +18 -0
  168. package/dist/module/native/styles/shorthands/logical-border-width.js.map +1 -0
  169. package/dist/module/native/styles/variables.js +55 -43
  170. package/dist/module/native/styles/variables.js.map +1 -1
  171. package/dist/module/native-internal/style-collection.js +1 -1
  172. package/dist/module/native-internal/style-collection.js.map +1 -1
  173. package/dist/module/utilities/dot-notation.types.js +2 -0
  174. package/dist/module/utilities/style-descriptor.js +4 -9
  175. package/dist/module/utilities/style-descriptor.js.map +1 -1
  176. package/dist/module/web/api.js +1 -1
  177. package/dist/module/web/api.js.map +1 -1
  178. package/dist/module/web/assign-style.js +4 -1
  179. package/dist/module/web/assign-style.js.map +1 -1
  180. package/dist/typescript/commonjs/src/babel/import-plugin.d.ts.map +1 -1
  181. package/dist/typescript/commonjs/src/babel/react-native-web.d.ts +2 -1
  182. package/dist/typescript/commonjs/src/babel/react-native-web.d.ts.map +1 -1
  183. package/dist/typescript/commonjs/src/babel/react-native.d.ts.map +1 -1
  184. package/dist/typescript/commonjs/src/compiler/atRules.d.ts +4 -1
  185. package/dist/typescript/commonjs/src/compiler/atRules.d.ts.map +1 -1
  186. package/dist/typescript/commonjs/src/compiler/compiler.d.ts.map +1 -1
  187. package/dist/typescript/commonjs/src/compiler/declarations.d.ts +2 -2
  188. package/dist/typescript/commonjs/src/compiler/declarations.d.ts.map +1 -1
  189. package/dist/typescript/commonjs/src/compiler/lightningcss-loader.d.ts.map +1 -1
  190. package/dist/typescript/commonjs/src/compiler/media-query.d.ts +1 -1
  191. package/dist/typescript/commonjs/src/compiler/media-query.d.ts.map +1 -1
  192. package/dist/typescript/commonjs/src/compiler/selector-builder.d.ts.map +1 -1
  193. package/dist/typescript/commonjs/src/components/ImageBackground.d.ts.map +1 -1
  194. package/dist/typescript/commonjs/src/components/KeyboardAvoidingView.d.ts.map +1 -1
  195. package/dist/typescript/commonjs/src/components/react-native-safe-area-context.native.d.ts +1 -1
  196. package/dist/typescript/commonjs/src/components/react-native-safe-area-context.native.d.ts.map +1 -1
  197. package/dist/typescript/commonjs/src/metro/cache-version.d.ts +8 -0
  198. package/dist/typescript/commonjs/src/metro/cache-version.d.ts.map +1 -0
  199. package/dist/typescript/commonjs/src/metro/index.d.ts.map +1 -1
  200. package/dist/typescript/commonjs/src/metro/metro-transformer.d.ts +5 -3
  201. package/dist/typescript/commonjs/src/metro/metro-transformer.d.ts.map +1 -1
  202. package/dist/typescript/commonjs/src/metro/typescript.d.ts.map +1 -1
  203. package/dist/typescript/commonjs/src/native/api.d.ts +4 -8
  204. package/dist/typescript/commonjs/src/native/api.d.ts.map +1 -1
  205. package/dist/typescript/commonjs/src/native/conditions/container-query.d.ts.map +1 -1
  206. package/dist/typescript/commonjs/src/native/react/interaction.d.ts +1 -1
  207. package/dist/typescript/commonjs/src/native/react/interaction.d.ts.map +1 -1
  208. package/dist/typescript/commonjs/src/native/react/rules.d.ts.map +1 -1
  209. package/dist/typescript/commonjs/src/native/react/useNativeCss.d.ts.map +1 -1
  210. package/dist/typescript/commonjs/src/native/react/usePassthrough.d.ts.map +1 -1
  211. package/dist/typescript/commonjs/src/native/reactivity.d.ts +7 -3
  212. package/dist/typescript/commonjs/src/native/reactivity.d.ts.map +1 -1
  213. package/dist/typescript/commonjs/src/native/reanimated.d.ts.map +1 -1
  214. package/dist/typescript/commonjs/src/native/styles/functions/color-mix.d.ts.map +1 -1
  215. package/dist/typescript/commonjs/src/native/styles/functions/filters.d.ts +2 -0
  216. package/dist/typescript/commonjs/src/native/styles/functions/filters.d.ts.map +1 -1
  217. package/dist/typescript/commonjs/src/native/styles/functions/numeric-functions.d.ts.map +1 -1
  218. package/dist/typescript/commonjs/src/native/styles/functions/string-functions.d.ts +2 -0
  219. package/dist/typescript/commonjs/src/native/styles/functions/string-functions.d.ts.map +1 -1
  220. package/dist/typescript/commonjs/src/native/styles/functions/transform-functions.d.ts.map +1 -1
  221. package/dist/typescript/commonjs/src/native/styles/index.d.ts +2 -2
  222. package/dist/typescript/commonjs/src/native/styles/index.d.ts.map +1 -1
  223. package/dist/typescript/commonjs/src/native/styles/resolve.d.ts +1 -0
  224. package/dist/typescript/commonjs/src/native/styles/resolve.d.ts.map +1 -1
  225. package/dist/typescript/commonjs/src/native/styles/scale-factor.d.ts +2 -0
  226. package/dist/typescript/commonjs/src/native/styles/scale-factor.d.ts.map +1 -0
  227. package/dist/typescript/commonjs/src/native/styles/shorthands/animation.d.ts.map +1 -1
  228. package/dist/typescript/commonjs/src/native/styles/shorthands/index.d.ts +1 -0
  229. package/dist/typescript/commonjs/src/native/styles/shorthands/index.d.ts.map +1 -1
  230. package/dist/typescript/commonjs/src/native/styles/shorthands/logical-border-width.d.ts +4 -0
  231. package/dist/typescript/commonjs/src/native/styles/shorthands/logical-border-width.d.ts.map +1 -0
  232. package/dist/typescript/commonjs/src/native/styles/variables.d.ts.map +1 -1
  233. package/dist/typescript/commonjs/src/native-internal/variables.d.ts +1 -1
  234. package/dist/typescript/commonjs/src/native-internal/variables.d.ts.map +1 -1
  235. package/dist/typescript/commonjs/src/runtime.types.d.ts +11 -6
  236. package/dist/typescript/commonjs/src/runtime.types.d.ts.map +1 -1
  237. package/dist/typescript/commonjs/src/utilities/dot-notation.types.d.ts +2 -1
  238. package/dist/typescript/commonjs/src/utilities/dot-notation.types.d.ts.map +1 -1
  239. package/dist/typescript/commonjs/src/utilities/style-descriptor.d.ts +1 -1
  240. package/dist/typescript/commonjs/src/utilities/style-descriptor.d.ts.map +1 -1
  241. package/dist/typescript/commonjs/src/web/api.d.ts +5 -5
  242. package/dist/typescript/commonjs/src/web/api.d.ts.map +1 -1
  243. package/dist/typescript/commonjs/src/web/assign-style.d.ts.map +1 -1
  244. package/dist/typescript/module/src/babel/import-plugin.d.ts +1 -1
  245. package/dist/typescript/module/src/babel/import-plugin.d.ts.map +1 -1
  246. package/dist/typescript/module/src/babel/react-native-web.d.ts +2 -1
  247. package/dist/typescript/module/src/babel/react-native-web.d.ts.map +1 -1
  248. package/dist/typescript/module/src/babel/react-native.d.ts.map +1 -1
  249. package/dist/typescript/module/src/compiler/atRules.d.ts +6 -3
  250. package/dist/typescript/module/src/compiler/atRules.d.ts.map +1 -1
  251. package/dist/typescript/module/src/compiler/compiler.d.ts +2 -2
  252. package/dist/typescript/module/src/compiler/compiler.d.ts.map +1 -1
  253. package/dist/typescript/module/src/compiler/compiler.types.d.ts +1 -1
  254. package/dist/typescript/module/src/compiler/compiler.types.d.ts.map +1 -1
  255. package/dist/typescript/module/src/compiler/container-query.d.ts +2 -2
  256. package/dist/typescript/module/src/compiler/container-query.d.ts.map +1 -1
  257. package/dist/typescript/module/src/compiler/declarations.d.ts +4 -4
  258. package/dist/typescript/module/src/compiler/declarations.d.ts.map +1 -1
  259. package/dist/typescript/module/src/compiler/index.d.ts +2 -2
  260. package/dist/typescript/module/src/compiler/index.d.ts.map +1 -1
  261. package/dist/typescript/module/src/compiler/inline-variables.d.ts +1 -1
  262. package/dist/typescript/module/src/compiler/inline-variables.d.ts.map +1 -1
  263. package/dist/typescript/module/src/compiler/keyframes.d.ts +2 -2
  264. package/dist/typescript/module/src/compiler/keyframes.d.ts.map +1 -1
  265. package/dist/typescript/module/src/compiler/lightningcss-loader.d.ts.map +1 -1
  266. package/dist/typescript/module/src/compiler/media-query.d.ts +3 -3
  267. package/dist/typescript/module/src/compiler/media-query.d.ts.map +1 -1
  268. package/dist/typescript/module/src/compiler/pseudo-elements.d.ts +1 -1
  269. package/dist/typescript/module/src/compiler/pseudo-elements.d.ts.map +1 -1
  270. package/dist/typescript/module/src/compiler/selector-builder.d.ts +1 -1
  271. package/dist/typescript/module/src/compiler/selector-builder.d.ts.map +1 -1
  272. package/dist/typescript/module/src/compiler/selectors.d.ts +2 -2
  273. package/dist/typescript/module/src/compiler/selectors.d.ts.map +1 -1
  274. package/dist/typescript/module/src/compiler/stylesheet.d.ts +1 -1
  275. package/dist/typescript/module/src/compiler/stylesheet.d.ts.map +1 -1
  276. package/dist/typescript/module/src/components/ImageBackground.d.ts.map +1 -1
  277. package/dist/typescript/module/src/components/KeyboardAvoidingView.d.ts.map +1 -1
  278. package/dist/typescript/module/src/components/index.d.ts +16 -16
  279. package/dist/typescript/module/src/components/index.d.ts.map +1 -1
  280. package/dist/typescript/module/src/components/react-native-safe-area-context.native.d.ts +1 -1
  281. package/dist/typescript/module/src/components/react-native-safe-area-context.native.d.ts.map +1 -1
  282. package/dist/typescript/module/src/metro/cache-version.d.ts +8 -0
  283. package/dist/typescript/module/src/metro/cache-version.d.ts.map +1 -0
  284. package/dist/typescript/module/src/metro/index.d.ts +1 -1
  285. package/dist/typescript/module/src/metro/index.d.ts.map +1 -1
  286. package/dist/typescript/module/src/metro/metro-transformer.d.ts +6 -4
  287. package/dist/typescript/module/src/metro/metro-transformer.d.ts.map +1 -1
  288. package/dist/typescript/module/src/metro/typescript.d.ts.map +1 -1
  289. package/dist/typescript/module/src/native/api.d.ts +5 -9
  290. package/dist/typescript/module/src/native/api.d.ts.map +1 -1
  291. package/dist/typescript/module/src/native/conditions/attributes.d.ts +1 -1
  292. package/dist/typescript/module/src/native/conditions/attributes.d.ts.map +1 -1
  293. package/dist/typescript/module/src/native/conditions/container-query.d.ts +2 -2
  294. package/dist/typescript/module/src/native/conditions/container-query.d.ts.map +1 -1
  295. package/dist/typescript/module/src/native/conditions/guards.d.ts +2 -2
  296. package/dist/typescript/module/src/native/conditions/guards.d.ts.map +1 -1
  297. package/dist/typescript/module/src/native/conditions/index.d.ts +3 -3
  298. package/dist/typescript/module/src/native/conditions/index.d.ts.map +1 -1
  299. package/dist/typescript/module/src/native/conditions/media-query.d.ts +1 -1
  300. package/dist/typescript/module/src/native/conditions/media-query.d.ts.map +1 -1
  301. package/dist/typescript/module/src/native/index.d.ts +3 -3
  302. package/dist/typescript/module/src/native/index.d.ts.map +1 -1
  303. package/dist/typescript/module/src/native/react/interaction.d.ts +2 -2
  304. package/dist/typescript/module/src/native/react/interaction.d.ts.map +1 -1
  305. package/dist/typescript/module/src/native/react/rules.d.ts +2 -2
  306. package/dist/typescript/module/src/native/react/rules.d.ts.map +1 -1
  307. package/dist/typescript/module/src/native/react/useNativeCss.d.ts +4 -4
  308. package/dist/typescript/module/src/native/react/useNativeCss.d.ts.map +1 -1
  309. package/dist/typescript/module/src/native/react/usePassthrough.d.ts +1 -1
  310. package/dist/typescript/module/src/native/react/usePassthrough.d.ts.map +1 -1
  311. package/dist/typescript/module/src/native/reactivity.d.ts +7 -3
  312. package/dist/typescript/module/src/native/reactivity.d.ts.map +1 -1
  313. package/dist/typescript/module/src/native/reanimated.d.ts.map +1 -1
  314. package/dist/typescript/module/src/native/styles/calculate-props.d.ts +2 -2
  315. package/dist/typescript/module/src/native/styles/calculate-props.d.ts.map +1 -1
  316. package/dist/typescript/module/src/native/styles/functions/animation-timing.d.ts +1 -1
  317. package/dist/typescript/module/src/native/styles/functions/animation-timing.d.ts.map +1 -1
  318. package/dist/typescript/module/src/native/styles/functions/calc.d.ts +1 -1
  319. package/dist/typescript/module/src/native/styles/functions/calc.d.ts.map +1 -1
  320. package/dist/typescript/module/src/native/styles/functions/color-mix.d.ts +1 -1
  321. package/dist/typescript/module/src/native/styles/functions/color-mix.d.ts.map +1 -1
  322. package/dist/typescript/module/src/native/styles/functions/filters.d.ts +3 -1
  323. package/dist/typescript/module/src/native/styles/functions/filters.d.ts.map +1 -1
  324. package/dist/typescript/module/src/native/styles/functions/index.d.ts +8 -8
  325. package/dist/typescript/module/src/native/styles/functions/index.d.ts.map +1 -1
  326. package/dist/typescript/module/src/native/styles/functions/numeric-functions.d.ts +1 -1
  327. package/dist/typescript/module/src/native/styles/functions/numeric-functions.d.ts.map +1 -1
  328. package/dist/typescript/module/src/native/styles/functions/platform-functions.d.ts +1 -1
  329. package/dist/typescript/module/src/native/styles/functions/platform-functions.d.ts.map +1 -1
  330. package/dist/typescript/module/src/native/styles/functions/string-functions.d.ts +3 -1
  331. package/dist/typescript/module/src/native/styles/functions/string-functions.d.ts.map +1 -1
  332. package/dist/typescript/module/src/native/styles/functions/transform-functions.d.ts +1 -1
  333. package/dist/typescript/module/src/native/styles/functions/transform-functions.d.ts.map +1 -1
  334. package/dist/typescript/module/src/native/styles/index.d.ts +7 -7
  335. package/dist/typescript/module/src/native/styles/index.d.ts.map +1 -1
  336. package/dist/typescript/module/src/native/styles/line-height.d.ts +1 -1
  337. package/dist/typescript/module/src/native/styles/line-height.d.ts.map +1 -1
  338. package/dist/typescript/module/src/native/styles/resolve.d.ts +4 -3
  339. package/dist/typescript/module/src/native/styles/resolve.d.ts.map +1 -1
  340. package/dist/typescript/module/src/native/styles/scale-factor.d.ts +2 -0
  341. package/dist/typescript/module/src/native/styles/scale-factor.d.ts.map +1 -0
  342. package/dist/typescript/module/src/native/styles/shorthands/_handler.d.ts +1 -1
  343. package/dist/typescript/module/src/native/styles/shorthands/_handler.d.ts.map +1 -1
  344. package/dist/typescript/module/src/native/styles/shorthands/animation.d.ts +2 -2
  345. package/dist/typescript/module/src/native/styles/shorthands/animation.d.ts.map +1 -1
  346. package/dist/typescript/module/src/native/styles/shorthands/border.d.ts +1 -1
  347. package/dist/typescript/module/src/native/styles/shorthands/border.d.ts.map +1 -1
  348. package/dist/typescript/module/src/native/styles/shorthands/box-shadow.d.ts +1 -1
  349. package/dist/typescript/module/src/native/styles/shorthands/box-shadow.d.ts.map +1 -1
  350. package/dist/typescript/module/src/native/styles/shorthands/index.d.ts +6 -5
  351. package/dist/typescript/module/src/native/styles/shorthands/index.d.ts.map +1 -1
  352. package/dist/typescript/module/src/native/styles/shorthands/logical-border-width.d.ts +4 -0
  353. package/dist/typescript/module/src/native/styles/shorthands/logical-border-width.d.ts.map +1 -0
  354. package/dist/typescript/module/src/native/styles/shorthands/text-shadow.d.ts +1 -1
  355. package/dist/typescript/module/src/native/styles/shorthands/text-shadow.d.ts.map +1 -1
  356. package/dist/typescript/module/src/native/styles/shorthands/transform.d.ts +1 -1
  357. package/dist/typescript/module/src/native/styles/shorthands/transform.d.ts.map +1 -1
  358. package/dist/typescript/module/src/native/styles/units.d.ts +1 -1
  359. package/dist/typescript/module/src/native/styles/units.d.ts.map +1 -1
  360. package/dist/typescript/module/src/native/styles/variables.d.ts +2 -2
  361. package/dist/typescript/module/src/native/styles/variables.d.ts.map +1 -1
  362. package/dist/typescript/module/src/native-internal/index.d.ts +3 -3
  363. package/dist/typescript/module/src/native-internal/index.d.ts.map +1 -1
  364. package/dist/typescript/module/src/native-internal/root.d.ts +1 -1
  365. package/dist/typescript/module/src/native-internal/root.d.ts.map +1 -1
  366. package/dist/typescript/module/src/native-internal/style-collection.d.ts +2 -2
  367. package/dist/typescript/module/src/native-internal/style-collection.d.ts.map +1 -1
  368. package/dist/typescript/module/src/native-internal/variables.d.ts +2 -2
  369. package/dist/typescript/module/src/native-internal/variables.d.ts.map +1 -1
  370. package/dist/typescript/module/src/runtime.d.ts +1 -1
  371. package/dist/typescript/module/src/runtime.d.ts.map +1 -1
  372. package/dist/typescript/module/src/runtime.native.d.ts +1 -1
  373. package/dist/typescript/module/src/runtime.native.d.ts.map +1 -1
  374. package/dist/typescript/module/src/runtime.types.d.ts +11 -6
  375. package/dist/typescript/module/src/runtime.types.d.ts.map +1 -1
  376. package/dist/typescript/module/src/utilities/dot-notation.types.d.ts +2 -1
  377. package/dist/typescript/module/src/utilities/dot-notation.types.d.ts.map +1 -1
  378. package/dist/typescript/module/src/utilities/index.d.ts +3 -3
  379. package/dist/typescript/module/src/utilities/index.d.ts.map +1 -1
  380. package/dist/typescript/module/src/utilities/specificity.d.ts +2 -2
  381. package/dist/typescript/module/src/utilities/specificity.d.ts.map +1 -1
  382. package/dist/typescript/module/src/utilities/style-descriptor.d.ts +1 -1
  383. package/dist/typescript/module/src/utilities/style-descriptor.d.ts.map +1 -1
  384. package/dist/typescript/module/src/web/api.d.ts +5 -5
  385. package/dist/typescript/module/src/web/api.d.ts.map +1 -1
  386. package/dist/typescript/module/src/web/assign-style.d.ts.map +1 -1
  387. package/dist/typescript/module/src/web/index.d.ts +3 -3
  388. package/dist/typescript/module/src/web/index.d.ts.map +1 -1
  389. package/node/babel.mjs +4 -0
  390. package/node/compiler.mjs +2 -0
  391. package/node/metro.mjs +2 -0
  392. package/package.json +61 -27
  393. package/src/babel/import-plugin.ts +15 -4
  394. package/src/babel/react-native-web.ts +32 -3
  395. package/src/babel/react-native.ts +7 -1
  396. package/src/compiler/atRules.ts +44 -0
  397. package/src/compiler/compiler.ts +59 -46
  398. package/src/compiler/container-query.ts +8 -3
  399. package/src/compiler/declarations.ts +189 -100
  400. package/src/compiler/lightningcss-loader.ts +16 -15
  401. package/src/compiler/media-query.ts +20 -9
  402. package/src/compiler/selector-builder.ts +29 -3
  403. package/src/components/ImageBackground.tsx +2 -6
  404. package/src/components/KeyboardAvoidingView.tsx +2 -3
  405. package/src/components/index.cts +46 -1
  406. package/src/jest/index.ts +1 -1
  407. package/src/metro/cache-version.ts +48 -0
  408. package/src/metro/index.ts +2 -0
  409. package/src/metro/metro-transformer.ts +9 -6
  410. package/src/metro/typescript.ts +53 -6
  411. package/src/native/api.tsx +20 -14
  412. package/src/native/conditions/attributes.ts +26 -9
  413. package/src/native/conditions/container-query.ts +11 -9
  414. package/src/native/conditions/media-query.ts +1 -1
  415. package/src/native/react/interaction.ts +11 -6
  416. package/src/native/react/rules.ts +13 -5
  417. package/src/native/react/useNativeCss.ts +54 -14
  418. package/src/native/react/usePassthrough.ts +3 -2
  419. package/src/native/reactivity.ts +42 -24
  420. package/src/native/reanimated.ts +24 -5
  421. package/src/native/styles/functions/color-mix.ts +45 -39
  422. package/src/native/styles/functions/filters.ts +14 -0
  423. package/src/native/styles/functions/numeric-functions.ts +7 -6
  424. package/src/native/styles/functions/string-functions.ts +18 -0
  425. package/src/native/styles/functions/transform-functions.ts +5 -4
  426. package/src/native/styles/index.ts +100 -13
  427. package/src/native/styles/resolve.ts +15 -11
  428. package/src/native/styles/scale-factor.ts +6 -0
  429. package/src/native/styles/shorthands/animation.ts +8 -2
  430. package/src/native/styles/shorthands/index.ts +1 -0
  431. package/src/native/styles/shorthands/logical-border-width.ts +32 -0
  432. package/src/native/styles/variables.ts +48 -38
  433. package/src/native-internal/style-collection.ts +1 -1
  434. package/src/runtime.types.ts +17 -15
  435. package/src/utilities/dot-notation.types.ts +4 -3
  436. package/src/utilities/style-descriptor.ts +11 -16
  437. package/src/web/api.tsx +6 -11
  438. package/src/web/assign-style.ts +2 -1
  439. package/types.d.ts +0 -20
  440. package/dist/commonjs/compiler/inheritance.test.js +0 -78
  441. package/dist/commonjs/compiler/inheritance.test.js.map +0 -1
  442. package/dist/module/compiler/inheritance.test.js +0 -78
  443. package/dist/module/compiler/inheritance.test.js.map +0 -1
  444. package/dist/typescript/commonjs/.config/eslint.config.d.mts +0 -3
  445. package/dist/typescript/commonjs/.config/eslint.config.d.mts.map +0 -1
  446. package/dist/typescript/commonjs/eslint.config.d.mts +0 -2
  447. package/dist/typescript/commonjs/eslint.config.d.mts.map +0 -1
  448. package/dist/typescript/commonjs/example/app.config.d.ts +0 -4
  449. package/dist/typescript/commonjs/example/app.config.d.ts.map +0 -1
  450. package/dist/typescript/commonjs/example/index.d.ts +0 -2
  451. package/dist/typescript/commonjs/example/index.d.ts.map +0 -1
  452. package/dist/typescript/commonjs/example/metro.config.d.ts +0 -3
  453. package/dist/typescript/commonjs/example/metro.config.d.ts.map +0 -1
  454. package/dist/typescript/commonjs/example/postcss.config.d.mts +0 -7
  455. package/dist/typescript/commonjs/example/postcss.config.d.mts.map +0 -1
  456. package/dist/typescript/commonjs/example/src/App.d.ts +0 -3
  457. package/dist/typescript/commonjs/example/src/App.d.ts.map +0 -1
  458. package/dist/typescript/commonjs/src/compiler/inheritance.test.d.ts +0 -2
  459. package/dist/typescript/commonjs/src/compiler/inheritance.test.d.ts.map +0 -1
  460. package/dist/typescript/module/.config/eslint.config.d.mts +0 -3
  461. package/dist/typescript/module/.config/eslint.config.d.mts.map +0 -1
  462. package/dist/typescript/module/eslint.config.d.mts +0 -2
  463. package/dist/typescript/module/eslint.config.d.mts.map +0 -1
  464. package/dist/typescript/module/example/app.config.d.ts +0 -4
  465. package/dist/typescript/module/example/app.config.d.ts.map +0 -1
  466. package/dist/typescript/module/example/index.d.ts +0 -2
  467. package/dist/typescript/module/example/index.d.ts.map +0 -1
  468. package/dist/typescript/module/example/metro.config.d.ts +0 -3
  469. package/dist/typescript/module/example/metro.config.d.ts.map +0 -1
  470. package/dist/typescript/module/example/postcss.config.d.mts +0 -7
  471. package/dist/typescript/module/example/postcss.config.d.mts.map +0 -1
  472. package/dist/typescript/module/example/src/App.d.ts +0 -3
  473. package/dist/typescript/module/example/src/App.d.ts.map +0 -1
  474. package/dist/typescript/module/src/compiler/inheritance.test.d.ts +0 -2
  475. package/dist/typescript/module/src/compiler/inheritance.test.d.ts.map +0 -1
  476. package/src/compiler/inheritance.test.ts +0 -121
@@ -7,7 +7,7 @@ import {
7
7
  useState,
8
8
  type ComponentType,
9
9
  } from "react";
10
- import { Pressable, View } from "react-native";
10
+ import { Image, Pressable, StyleSheet, View } from "react-native";
11
11
 
12
12
  import { VariableContext } from "react-native-css/native-internal";
13
13
 
@@ -69,9 +69,6 @@ export function useNativeCss(
69
69
  const inheritedContainers = useContext(ContainerContext);
70
70
 
71
71
  const [state, setState] = useState((): ComponentState => {
72
- // Both effects share the same observers to improve memory usage
73
- const observers = new Set<Effect>();
74
-
75
72
  /**
76
73
  * When fired, this effect will force the rules to be re-evaluated.
77
74
  * This will cause a re-render if there are different rules
@@ -79,7 +76,7 @@ export function useNativeCss(
79
76
  * Use this when a rule condition changes, e.g FastRefresh or media queries
80
77
  */
81
78
  const ruleEffect: Effect = {
82
- observers,
79
+ observers: new Set(),
83
80
  run: () => setState((state) => updateRules(state)),
84
81
  };
85
82
 
@@ -90,11 +87,11 @@ export function useNativeCss(
90
87
  * Use this when a value changes, e.g vm units or light / dark mode
91
88
  */
92
89
  const styleEffect: Effect = {
93
- observers,
90
+ observers: new Set(),
94
91
  run: () => setState((state) => ({ ...state })),
95
92
  };
96
93
 
97
- return updateRules(
94
+ const initialState = updateRules(
98
95
  {
99
96
  ruleEffect,
100
97
  ruleEffectGetter: (observable) => observable.get(ruleEffect),
@@ -110,10 +107,23 @@ export function useNativeCss(
110
107
  false,
111
108
  false,
112
109
  );
110
+ // State initializers may be discarded by React StrictMode. Subscribe once
111
+ // the component commits instead of retaining an abandoned initializer.
112
+ cleanupEffect(ruleEffect);
113
+ return initialState;
113
114
  });
114
115
 
115
- // Both effects share the same observers, so we only need to cleanup one of them
116
- useEffect(() => () => cleanupEffect(state.ruleEffect), [state.ruleEffect]);
116
+ useEffect(() => {
117
+ // Reconnect subscriptions after React replays an effect setup.
118
+ if (state.ruleEffect.observers.size === 0) {
119
+ state.ruleEffect.run();
120
+ state.styleEffect.run();
121
+ }
122
+ return () => {
123
+ cleanupEffect(state.ruleEffect);
124
+ cleanupEffect(state.styleEffect);
125
+ };
126
+ }, [state.ruleEffect, state.styleEffect]);
117
127
 
118
128
  // Check if our derived state has changed (e.g the className prop)
119
129
  if (
@@ -137,7 +147,11 @@ export function useNativeCss(
137
147
  return createElement(Fragment);
138
148
  }
139
149
 
140
- let props = getStyledProps(state, originalProps);
150
+ let props = getStyledProps(
151
+ state,
152
+ originalProps,
153
+ type === Image ? adaptImageProps : undefined,
154
+ );
141
155
 
142
156
  if (type === View && props?.onPress) {
143
157
  type = Pressable;
@@ -156,8 +170,18 @@ export function useNativeCss(
156
170
  }
157
171
 
158
172
  if (state.containers) {
173
+ // Publish a new props snapshot even when this component's own rules did not
174
+ // change. Descendants can depend on an ancestor attribute through a group.
175
+ const containers = Object.fromEntries(
176
+ Object.entries(state.containers).map(([name, container]) => [
177
+ name,
178
+ container.key === state.ruleEffectGetter
179
+ ? { key: container.key, props: originalProps }
180
+ : (inheritedContainers[name] ?? container),
181
+ ]),
182
+ );
159
183
  props = {
160
- value: state.containers,
184
+ value: containers,
161
185
  children: createElement(type, props),
162
186
  };
163
187
  type = ContainerContext.Provider;
@@ -181,9 +205,14 @@ export function mappingToConfig(mapping: StyledConfiguration<any>) {
181
205
  } else if (typeof value === "string") {
182
206
  return { source: key, target: value.split(".") };
183
207
  } else if (typeof value === "object") {
184
- const nativeStyleMapping = value.nativeStyleMapping as
185
- | Record<string, string>
186
- | undefined;
208
+ // Keep the declared deprecated alias working. The current spelling wins
209
+ // when both are provided, including an intentionally empty mapping.
210
+ const mapping = value.nativeStyleMapping ?? value.nativeStyleToProp;
211
+ const nativeStyleMapping = mapping
212
+ ? Object.fromEntries(
213
+ Object.entries(mapping).map(([k, v]) => [k, v === true ? k : v]),
214
+ )
215
+ : undefined;
187
216
 
188
217
  if (Array.isArray(value)) {
189
218
  return { source: key, target: value, nativeStyleMapping };
@@ -209,3 +238,14 @@ export function mappingToConfig(mapping: StyledConfiguration<any>) {
209
238
  throw new Error(`styled(): Invalid mapping for ${key}: ${value}`);
210
239
  });
211
240
  }
241
+
242
+ // Apply native Image fitting before normal, inline, and important props merge.
243
+ // The compiler's contentFit mapping remains available to Expo Image adapters.
244
+ function adaptImageProps(props: Record<string, any> | undefined) {
245
+ if (!props || !("contentFit" in props)) return props;
246
+ const { contentFit, style, ...rest } = props;
247
+ return {
248
+ ...rest,
249
+ style: { ...StyleSheet.flatten(style), objectFit: contentFit },
250
+ };
251
+ }
@@ -32,8 +32,9 @@ export function usePassthrough(
32
32
  if (Array.isArray(target)) {
33
33
  for (let i = 0; i < target.length - 1; i++) {
34
34
  const prop = target[i]!;
35
- props[prop] ??= {};
36
- targetProps = props[prop];
35
+ const value = targetProps[prop];
36
+ targetProps[prop] = Array.isArray(value) ? [...value] : { ...value };
37
+ targetProps = targetProps[prop];
37
38
  }
38
39
  target = target[target.length - 1]!;
39
40
  }
@@ -10,7 +10,7 @@ import {
10
10
  import type { StyleDescriptor } from "react-native-css/compiler";
11
11
 
12
12
  export type Effect = {
13
- observers: Set<Effect>;
13
+ observers: Set<Observable<any, any>>;
14
14
  run(): void;
15
15
  };
16
16
 
@@ -19,6 +19,7 @@ export type Observable<Value, Arg = Value> = {
19
19
  get: (effect?: Effect) => Value;
20
20
  set: (arg: Arg) => void;
21
21
  run: () => void;
22
+ unsubscribe: (effect: Effect) => void;
22
23
  };
23
24
  type Read<Value, Arg> = (get: Getter, arg?: Arg) => Value;
24
25
  export type Getter = <Value>(observable: Observable<Value, any>) => Value;
@@ -43,9 +44,10 @@ export function observable<Value, Arg = Value>(
43
44
 
44
45
  const observers = new Set<Effect>();
45
46
  const effect: Effect = {
46
- observers,
47
+ observers: new Set(),
47
48
  run: () => {
48
49
  if (!isStatic) {
50
+ cleanupEffect(effect);
49
51
  const nextValue = (init as Read<Value, Arg>)(getter, lastArg);
50
52
  if (equality(value, nextValue)) {
51
53
  return;
@@ -57,14 +59,19 @@ export function observable<Value, Arg = Value>(
57
59
  },
58
60
  };
59
61
 
60
- const getter: Getter = (observable) => observable.get(effect);
62
+ const getter: Getter = (observable) =>
63
+ observable.get(observers.size > 0 ? effect : undefined);
61
64
 
62
- function get(effect?: Effect) {
63
- if (effect) {
64
- observers.add(effect);
65
+ function get(subscriber?: Effect) {
66
+ if (subscriber) {
67
+ if (observers.size === 0 && !isStatic) didInit = false;
68
+ observers.add(subscriber);
69
+ subscriber.observers.add(obs);
65
70
  }
66
71
  if (!didInit) {
67
- value = (init as Read<Value, Arg>)(getter, undefined);
72
+ cleanupEffect(effect);
73
+ value = (init as Read<Value, Arg>)(getter, lastArg);
74
+ didInit = observers.size > 0;
68
75
  }
69
76
 
70
77
  return value;
@@ -77,9 +84,10 @@ export function observable<Value, Arg = Value>(
77
84
  }
78
85
  value = arg as unknown as Value;
79
86
  } else {
87
+ cleanupEffect(effect);
80
88
  const nextValue = (init as Read<Value, Arg>)(getter, arg);
81
89
 
82
- didInit = true;
90
+ didInit = observers.size > 0;
83
91
  lastArg = arg;
84
92
 
85
93
  if (equality(value, nextValue)) {
@@ -108,6 +116,13 @@ export function observable<Value, Arg = Value>(
108
116
  get,
109
117
  set,
110
118
  run: effect.run,
119
+ unsubscribe(subscriber) {
120
+ if (observers.delete(subscriber) && observers.size === 0 && !isStatic) {
121
+ cleanupEffect(effect);
122
+ didInit = false;
123
+ }
124
+ subscriber.observers.delete(obs);
125
+ },
111
126
  };
112
127
 
113
128
  return obs;
@@ -115,10 +130,11 @@ export function observable<Value, Arg = Value>(
115
130
 
116
131
  export function cleanupEffect(effect: Effect) {
117
132
  if (!effect) return;
118
- for (const dep of effect.observers) {
119
- dep.observers.delete(effect);
120
- }
133
+ const dependencies = Array.from(effect.observers);
121
134
  effect.observers.clear();
135
+ for (const dep of dependencies) {
136
+ dep.unsubscribe(effect);
137
+ }
122
138
  }
123
139
 
124
140
  /** Family Helpers ************************************************************/
@@ -129,11 +145,9 @@ export function family<Key, Result = Key, Args extends any = void>(
129
145
  const map = new Map<Key, Result>();
130
146
  return Object.assign(
131
147
  (key: Key, args: Args) => {
132
- let value = map.get(key);
133
- if (!value) {
134
- value = fn(key, args);
135
- map.set(key, value);
136
- }
148
+ if (map.has(key)) return map.get(key)!;
149
+ const value = fn(key, args);
150
+ map.set(key, value);
137
151
  return value;
138
152
  },
139
153
  {
@@ -166,11 +180,9 @@ export function weakFamily<Key extends WeakKey, Args = undefined, Result = Key>(
166
180
  const map = new WeakMap<Key, Result>();
167
181
  return Object.assign(
168
182
  (key: Key, args: Args) => {
169
- let value = map.get(key);
170
- if (!value) {
171
- value = fn(key, args);
172
- map.set(key, value);
173
- }
183
+ if (map.has(key)) return map.get(key)!;
184
+ const value = fn(key, args);
185
+ map.set(key, value);
174
186
  return value;
175
187
  },
176
188
  {
@@ -216,14 +228,20 @@ Dimensions.addEventListener("change", ({ window }) => {
216
228
 
217
229
  /** Color Scheme **************************************************************/
218
230
 
219
- export const colorScheme = observable<ColorSchemeName>(
231
+ export const colorScheme = observable<ColorSchemeName | null | undefined>(
220
232
  Appearance.getColorScheme(),
221
233
  );
222
234
  Appearance.addChangeListener((event) => colorScheme.set(event.colorScheme));
223
235
 
224
236
  /** Containers ****************************************************************/
225
237
 
226
- export type ContainerContextValue = Record<string, WeakKey>;
238
+ export type ContainerContextValue = Record<
239
+ string,
240
+ {
241
+ key: WeakKey;
242
+ props: Record<string, unknown> | null | undefined;
243
+ }
244
+ >;
227
245
  export const ContainerContext = createContext<ContainerContextValue>({});
228
246
 
229
247
  export const containerLayoutFamily = weakFamily(() => {
@@ -243,6 +261,6 @@ export const containerWidthFamily = weakFamily((key) => {
243
261
 
244
262
  export const containerHeightFamily = weakFamily((key) => {
245
263
  return observable((read) => {
246
- return read(containerLayoutFamily(key))?.width || 0;
264
+ return read(containerLayoutFamily(key))?.height || 0;
247
265
  });
248
266
  });
@@ -11,11 +11,30 @@ export const animatedComponentFamily = weakFamily(
11
11
  return component;
12
12
  }
13
13
 
14
- const createAnimatedComponent =
15
- // eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-unsafe-member-access
16
- require("react-native-reanimated").createAnimatedComponent as (
17
- component: ComponentType,
18
- ) => ComponentType;
14
+ // Reanimated 4.5 keeps the original component display name. Compare its
15
+ // public built-in components by identity instead of interpreting that name.
16
+ const reanimated =
17
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
18
+ require("react-native-reanimated") as typeof import("react-native-reanimated");
19
+ const animated = reanimated.default;
20
+ if (
21
+ [
22
+ animated.View,
23
+ animated.Text,
24
+ animated.Image,
25
+ animated.ScrollView,
26
+ animated.FlatList,
27
+ ].some((value) => value === component)
28
+ ) {
29
+ return component;
30
+ }
31
+
32
+ // This public constructor remains supported for arbitrary components; only
33
+ // its FlatList-specific overload is deprecated by Reanimated.
34
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
35
+ const createAnimatedComponent = reanimated.createAnimatedComponent as (
36
+ component: ComponentType,
37
+ ) => ComponentType;
19
38
 
20
39
  return createAnimatedComponent(component);
21
40
  },
@@ -1,5 +1,3 @@
1
- /* eslint-disable @typescript-eslint/no-unsafe-assignment */
2
- import type { PlainColorObject } from "colorjs.io";
3
1
  import {
4
2
  ColorSpace,
5
3
  to as convert,
@@ -8,7 +6,6 @@ import {
8
6
  P3,
9
7
  parse,
10
8
  sRGB,
11
- type ColorConstructor,
12
9
  } from "colorjs.io/fn";
13
10
 
14
11
  import type { StyleFunctionResolver } from "../resolve";
@@ -18,49 +15,58 @@ ColorSpace.register(P3);
18
15
  ColorSpace.register(OKLab);
19
16
 
20
17
  export const colorMix: StyleFunctionResolver = (resolveValue, value) => {
21
- const args = resolveValue(value[2]);
22
-
23
- if (!Array.isArray(args) || args.length < 3) {
24
- return;
25
- }
18
+ const resolved = resolveValue(value[2]);
19
+ if (!Array.isArray(resolved)) return;
26
20
 
21
+ // Resolved descriptors may be cached and shared by another styled component.
22
+ const args: unknown[] = [...(resolved as unknown[])];
27
23
  try {
28
24
  const space = args.shift();
25
+ const leftValue = args.shift();
26
+ if (typeof space !== "string" || typeof leftValue !== "string") return;
27
+ ColorSpace.get(space);
28
+ const left = parse(leftValue);
29
+ const percentage = () => {
30
+ const next = args[0];
31
+ if (typeof next !== "string" || !next.endsWith("%")) return undefined;
32
+ args.shift();
33
+ return Number(next.slice(0, -1)) / 100;
34
+ };
35
+ let leftWeight = percentage();
36
+ const rightValue = args.shift();
37
+ if (typeof rightValue !== "string") return;
38
+ const right = parse(rightValue);
39
+ let rightWeight = percentage();
40
+ if (args.length) return;
29
41
 
30
- let left: ColorConstructor | PlainColorObject = parse(
31
- args.shift() as string,
32
- );
33
-
34
- let next = args.shift();
35
-
36
- if (typeof next === "string" && next.endsWith("%")) {
37
- left.alpha = parseFloat(next) / 100;
38
- next = args.shift();
39
- }
40
-
41
- if (next === undefined) {
42
- if (left.spaceId !== "srgb") {
43
- left = convert(left, "srgb");
44
- }
45
-
46
- return `rgba(${(left.coords[0] ?? 0) * 255}, ${(left.coords[1] ?? 0) * 255}, ${(left.coords[2] ?? 0) * 255}, ${left.alpha})`;
47
- }
48
-
49
- if (typeof next !== "string") {
42
+ // CSS Color 5: omitted weights are complementary, then both are normalized.
43
+ leftWeight ??= rightWeight === undefined ? 0.5 : 1 - rightWeight;
44
+ rightWeight ??= 1 - leftWeight;
45
+ if (
46
+ ![leftWeight, rightWeight].every(
47
+ (weight) => Number.isFinite(weight) && weight >= 0 && weight <= 1,
48
+ )
49
+ )
50
50
  return;
51
- }
52
- const right = parse(next);
51
+ const sum = leftWeight + rightWeight;
52
+ if (sum === 0) return;
53
+ const alphaMultiplier = Math.min(sum, 1);
53
54
 
54
- next = args.shift();
55
- if (next && typeof next === "string" && next.endsWith("%")) {
56
- right.alpha = parseFloat(next) / 100;
55
+ let result;
56
+ if (right.alpha === 0 || left.alpha === 0) {
57
+ // A transparent endpoint contributes no premultiplied channels.
58
+ const source = right.alpha === 0 ? left : right;
59
+ const weight = right.alpha === 0 ? leftWeight : rightWeight;
60
+ result = convert(source, "srgb");
61
+ result.alpha = ((source.alpha ?? 1) * weight) / sum;
62
+ } else {
63
+ result = mix(left, right, rightWeight / sum, {
64
+ space,
65
+ outputSpace: "srgb",
66
+ premultiplied: true,
67
+ });
57
68
  }
58
-
59
- const result = mix(left, right, {
60
- space,
61
- outputSpace: "srgb",
62
- });
63
-
69
+ result.alpha = (result.alpha ?? 1) * alphaMultiplier;
64
70
  return `rgba(${(result.coords[0] ?? 0) * 255}, ${(result.coords[1] ?? 0) * 255}, ${(result.coords[2] ?? 0) * 255}, ${result.alpha})`;
65
71
  } catch {
66
72
  return;
@@ -97,3 +97,17 @@ export const dropShadow: StyleFunctionResolver = (
97
97
  }
98
98
  : undefined;
99
99
  };
100
+
101
+ /** CSS variables may expand to multiple filters; native filter arrays must be flat. */
102
+ export const filter: StyleFunctionResolver = (resolveValue, descriptor) => {
103
+ const value: unknown = resolveValue(descriptor[2]);
104
+ if (Array.isArray(value)) {
105
+ const filters: unknown[] = value.flat(Infinity);
106
+ return filters.filter(
107
+ (entry) => entry !== undefined && entry !== "initial",
108
+ );
109
+ }
110
+ if (value === undefined || value === "initial") return;
111
+ if (value === "none") return null;
112
+ return typeof value === "string" ? value : [value];
113
+ };
@@ -23,16 +23,17 @@ export const min: StyleFunctionResolver = (resolveValue, value) => {
23
23
  export const clamp: StyleFunctionResolver = (resolveValue, value) => {
24
24
  const args = resolveValue(value[2]);
25
25
 
26
- const [clampValue, min, max] = args as number[];
26
+ if (!Array.isArray(args)) return;
27
+
28
+ const [minimum, preferred, maximum] = args as unknown[];
27
29
 
28
30
  if (
29
- !Array.isArray(args) ||
30
- typeof clampValue !== "number" ||
31
- typeof min !== "number" ||
32
- typeof max !== "number"
31
+ typeof minimum !== "number" ||
32
+ typeof preferred !== "number" ||
33
+ typeof maximum !== "number"
33
34
  ) {
34
35
  return;
35
36
  }
36
37
 
37
- return Math.min(Math.max(clampValue, min), max);
38
+ return Math.max(minimum, Math.min(preferred, maximum));
38
39
  };
@@ -1,5 +1,23 @@
1
1
  import type { StyleFunctionResolver } from "../resolve";
2
2
 
3
+ export const gradientPosition: StyleFunctionResolver = (
4
+ resolveValue,
5
+ value,
6
+ ) => {
7
+ const position = resolveValue(value[2]);
8
+ return typeof position === "number" ? `${position}px` : position;
9
+ };
10
+
11
+ export const colorStop: StyleFunctionResolver = (resolveValue, value) => {
12
+ const args = resolveValue(value[2]);
13
+ if (!Array.isArray(args)) return args;
14
+ const [color, position] = args as unknown[];
15
+ if (typeof color !== "string") return;
16
+ if (position === undefined) return color;
17
+ if (typeof position !== "number" && typeof position !== "string") return;
18
+ return `${color} ${typeof position === "number" ? `${position}px` : position}`;
19
+ };
20
+
3
21
  export const join: StyleFunctionResolver = (resolveValue, value) => {
4
22
  const args = resolveValue(value[2]);
5
23
 
@@ -1,16 +1,17 @@
1
1
  import { isStyleDescriptorArray } from "react-native-css/utilities";
2
2
 
3
3
  import type { StyleFunctionResolver } from "../resolve";
4
+ import { scaleFactor } from "../scale-factor";
4
5
 
5
6
  export const scale: StyleFunctionResolver = (resolveValue, descriptor) => {
6
7
  const args = descriptor[2];
7
8
 
8
9
  if (!isStyleDescriptorArray(args)) {
9
- return { scale: resolveValue(args) };
10
+ return { scale: scaleFactor(resolveValue(args)) };
10
11
  }
11
12
 
12
- const x = resolveValue(args[0]);
13
- const y = resolveValue(args[1]);
13
+ const x = scaleFactor(resolveValue(args[0]));
14
+ const y = scaleFactor(resolveValue(args[1]));
14
15
 
15
16
  const isXValid = typeof x === "string" || typeof x === "number";
16
17
  const isYValid = typeof y === "string" || typeof y === "number";
@@ -18,7 +19,7 @@ export const scale: StyleFunctionResolver = (resolveValue, descriptor) => {
18
19
  if (isXValid && isYValid) {
19
20
  return x === y ? { scale: x } : [{ scaleX: x }, { scaleY: y }];
20
21
  } else if (isXValid) {
21
- return { scaleX: x };
22
+ return { scale: x };
22
23
  } else if (isYValid) {
23
24
  return { scaleY: y };
24
25
  }