react-native-css 0.0.0-nightly.d6f42ab → 0.0.0-nightly.eda2b28

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 (524) hide show
  1. package/README.md +5 -5
  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 +92 -31
  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 +148 -56
  15. package/dist/commonjs/compiler/declarations.js.map +1 -1
  16. package/dist/commonjs/compiler/lightningcss-loader.js +15 -2
  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/compiler/stylesheet.js +5 -0
  23. package/dist/commonjs/compiler/stylesheet.js.map +1 -1
  24. package/dist/commonjs/compiler/supports.js +2 -2
  25. package/dist/commonjs/compiler/supports.js.map +1 -1
  26. package/dist/commonjs/components/FlatList.js +1 -0
  27. package/dist/commonjs/components/FlatList.js.map +1 -1
  28. package/dist/commonjs/components/ImageBackground.js +2 -6
  29. package/dist/commonjs/components/ImageBackground.js.map +1 -1
  30. package/dist/commonjs/components/KeyboardAvoidingView.js +2 -3
  31. package/dist/commonjs/components/KeyboardAvoidingView.js.map +1 -1
  32. package/dist/commonjs/components/SafeAreaProvider.js +13 -0
  33. package/dist/commonjs/components/SafeAreaProvider.js.map +1 -0
  34. package/dist/commonjs/components/index.cjs +46 -1
  35. package/dist/commonjs/components/index.cjs.map +1 -1
  36. package/dist/commonjs/jest/index.js +1 -1
  37. package/dist/commonjs/jest/index.js.map +1 -1
  38. package/dist/commonjs/metro/cache-version.js +43 -0
  39. package/dist/commonjs/metro/cache-version.js.map +1 -0
  40. package/dist/commonjs/metro/index.js +2 -0
  41. package/dist/commonjs/metro/index.js.map +1 -1
  42. package/dist/commonjs/metro/metro-transformer.js +1 -1
  43. package/dist/commonjs/metro/metro-transformer.js.map +1 -1
  44. package/dist/commonjs/metro/typescript.js +26 -6
  45. package/dist/commonjs/metro/typescript.js.map +1 -1
  46. package/dist/commonjs/native/api.js +12 -8
  47. package/dist/commonjs/native/api.js.map +1 -1
  48. package/dist/commonjs/native/conditions/attributes.js +16 -9
  49. package/dist/commonjs/native/conditions/attributes.js.map +1 -1
  50. package/dist/commonjs/native/conditions/container-query.js +11 -11
  51. package/dist/commonjs/native/conditions/container-query.js.map +1 -1
  52. package/dist/commonjs/native/conditions/media-query.js +1 -1
  53. package/dist/commonjs/native/conditions/media-query.js.map +1 -1
  54. package/dist/commonjs/native/react/interaction.js +10 -5
  55. package/dist/commonjs/native/react/interaction.js.map +1 -1
  56. package/dist/commonjs/native/react/rules.js +12 -5
  57. package/dist/commonjs/native/react/rules.js.map +1 -1
  58. package/dist/commonjs/native/react/useNativeCss.js +70 -15
  59. package/dist/commonjs/native/react/useNativeCss.js.map +1 -1
  60. package/dist/commonjs/native/react/usePassthrough.js +5 -2
  61. package/dist/commonjs/native/react/usePassthrough.js.map +1 -1
  62. package/dist/commonjs/native/reactivity.js +47 -23
  63. package/dist/commonjs/native/reactivity.js.map +1 -1
  64. package/dist/commonjs/native/reanimated.js +15 -3
  65. package/dist/commonjs/native/reanimated.js.map +1 -1
  66. package/dist/commonjs/native/styles/functions/color-mix.js +64 -0
  67. package/dist/commonjs/native/styles/functions/color-mix.js.map +1 -0
  68. package/dist/commonjs/native/styles/functions/filters.js +18 -5
  69. package/dist/commonjs/native/styles/functions/filters.js.map +1 -1
  70. package/dist/commonjs/native/styles/functions/index.js +11 -0
  71. package/dist/commonjs/native/styles/functions/index.js.map +1 -1
  72. package/dist/commonjs/native/styles/functions/numeric-functions.js +4 -3
  73. package/dist/commonjs/native/styles/functions/numeric-functions.js.map +1 -1
  74. package/dist/commonjs/native/styles/functions/string-functions.js +16 -1
  75. package/dist/commonjs/native/styles/functions/string-functions.js.map +1 -1
  76. package/dist/commonjs/native/styles/functions/transform-functions.js +5 -4
  77. package/dist/commonjs/native/styles/functions/transform-functions.js.map +1 -1
  78. package/dist/commonjs/native/styles/index.js +382 -28
  79. package/dist/commonjs/native/styles/index.js.map +1 -1
  80. package/dist/commonjs/native/styles/resolve.js +10 -6
  81. package/dist/commonjs/native/styles/resolve.js.map +1 -1
  82. package/dist/commonjs/native/styles/scale-factor.js +13 -0
  83. package/dist/commonjs/native/styles/scale-factor.js.map +1 -0
  84. package/dist/commonjs/native/styles/shorthands/_handler.js +10 -0
  85. package/dist/commonjs/native/styles/shorthands/_handler.js.map +1 -1
  86. package/dist/commonjs/native/styles/shorthands/animation.js +6 -3
  87. package/dist/commonjs/native/styles/shorthands/animation.js.map +1 -1
  88. package/dist/commonjs/native/styles/shorthands/box-shadow.js +45 -12
  89. package/dist/commonjs/native/styles/shorthands/box-shadow.js.map +1 -1
  90. package/dist/commonjs/native/styles/shorthands/index.js +11 -0
  91. package/dist/commonjs/native/styles/shorthands/index.js.map +1 -1
  92. package/dist/commonjs/native/styles/shorthands/logical-border-width.js +22 -0
  93. package/dist/commonjs/native/styles/shorthands/logical-border-width.js.map +1 -0
  94. package/dist/commonjs/native/styles/variables.js +55 -43
  95. package/dist/commonjs/native/styles/variables.js.map +1 -1
  96. package/dist/commonjs/native-internal/style-collection.js +1 -1
  97. package/dist/commonjs/native-internal/style-collection.js.map +1 -1
  98. package/dist/commonjs/utilities/dot-notation.types.js +4 -0
  99. package/dist/commonjs/utilities/style-descriptor.js +4 -9
  100. package/dist/commonjs/utilities/style-descriptor.js.map +1 -1
  101. package/dist/commonjs/web/api.js +2 -2
  102. package/dist/commonjs/web/api.js.map +1 -1
  103. package/dist/commonjs/web/assign-style.js +4 -1
  104. package/dist/commonjs/web/assign-style.js.map +1 -1
  105. package/dist/module/babel/import-plugin.js +11 -5
  106. package/dist/module/babel/import-plugin.js.map +1 -1
  107. package/dist/module/babel/react-native-web.js +16 -4
  108. package/dist/module/babel/react-native-web.js.map +1 -1
  109. package/dist/module/babel/react-native.js +7 -2
  110. package/dist/module/babel/react-native.js.map +1 -1
  111. package/dist/module/compiler/atRules.js +33 -0
  112. package/dist/module/compiler/atRules.js.map +1 -1
  113. package/dist/module/compiler/compiler.js +94 -33
  114. package/dist/module/compiler/compiler.js.map +1 -1
  115. package/dist/module/compiler/container-query.js +6 -1
  116. package/dist/module/compiler/container-query.js.map +1 -1
  117. package/dist/module/compiler/declarations.js +147 -56
  118. package/dist/module/compiler/declarations.js.map +1 -1
  119. package/dist/module/compiler/lightningcss-loader.js +14 -2
  120. package/dist/module/compiler/lightningcss-loader.js.map +1 -1
  121. package/dist/module/compiler/media-query.js +16 -6
  122. package/dist/module/compiler/media-query.js.map +1 -1
  123. package/dist/module/compiler/selector-builder.js +13 -3
  124. package/dist/module/compiler/selector-builder.js.map +1 -1
  125. package/dist/module/compiler/stylesheet.js +5 -0
  126. package/dist/module/compiler/stylesheet.js.map +1 -1
  127. package/dist/module/compiler/supports.js +2 -2
  128. package/dist/module/compiler/supports.js.map +1 -1
  129. package/dist/module/components/FlatList.js +1 -0
  130. package/dist/module/components/FlatList.js.map +1 -1
  131. package/dist/module/components/ImageBackground.js +2 -6
  132. package/dist/module/components/ImageBackground.js.map +1 -1
  133. package/dist/module/components/KeyboardAvoidingView.js +2 -3
  134. package/dist/module/components/KeyboardAvoidingView.js.map +1 -1
  135. package/dist/module/components/SafeAreaProvider.js +4 -0
  136. package/dist/module/components/SafeAreaProvider.js.map +1 -0
  137. package/dist/module/components/index.cjs +46 -1
  138. package/dist/module/components/index.cjs.map +1 -1
  139. package/dist/module/jest/index.js +1 -1
  140. package/dist/module/jest/index.js.map +1 -1
  141. package/dist/module/metro/cache-version.js +39 -0
  142. package/dist/module/metro/cache-version.js.map +1 -0
  143. package/dist/module/metro/index.js +2 -0
  144. package/dist/module/metro/index.js.map +1 -1
  145. package/dist/module/metro/metro-transformer.js +1 -1
  146. package/dist/module/metro/metro-transformer.js.map +1 -1
  147. package/dist/module/metro/typescript.js +26 -6
  148. package/dist/module/metro/typescript.js.map +1 -1
  149. package/dist/module/native/api.js +14 -10
  150. package/dist/module/native/api.js.map +1 -1
  151. package/dist/module/native/conditions/attributes.js +16 -9
  152. package/dist/module/native/conditions/attributes.js.map +1 -1
  153. package/dist/module/native/conditions/container-query.js +11 -11
  154. package/dist/module/native/conditions/container-query.js.map +1 -1
  155. package/dist/module/native/conditions/media-query.js +1 -1
  156. package/dist/module/native/conditions/media-query.js.map +1 -1
  157. package/dist/module/native/react/interaction.js +10 -5
  158. package/dist/module/native/react/interaction.js.map +1 -1
  159. package/dist/module/native/react/rules.js +13 -6
  160. package/dist/module/native/react/rules.js.map +1 -1
  161. package/dist/module/native/react/useNativeCss.js +73 -18
  162. package/dist/module/native/react/useNativeCss.js.map +1 -1
  163. package/dist/module/native/react/usePassthrough.js +5 -2
  164. package/dist/module/native/react/usePassthrough.js.map +1 -1
  165. package/dist/module/native/reactivity.js +44 -22
  166. package/dist/module/native/reactivity.js.map +1 -1
  167. package/dist/module/native/reanimated.js +15 -3
  168. package/dist/module/native/reanimated.js.map +1 -1
  169. package/dist/module/native/styles/functions/color-mix.js +59 -0
  170. package/dist/module/native/styles/functions/color-mix.js.map +1 -0
  171. package/dist/module/native/styles/functions/filters.js +16 -4
  172. package/dist/module/native/styles/functions/filters.js.map +1 -1
  173. package/dist/module/native/styles/functions/index.js +1 -0
  174. package/dist/module/native/styles/functions/index.js.map +1 -1
  175. package/dist/module/native/styles/functions/numeric-functions.js +4 -3
  176. package/dist/module/native/styles/functions/numeric-functions.js.map +1 -1
  177. package/dist/module/native/styles/functions/string-functions.js +13 -0
  178. package/dist/module/native/styles/functions/string-functions.js.map +1 -1
  179. package/dist/module/native/styles/functions/transform-functions.js +5 -4
  180. package/dist/module/native/styles/functions/transform-functions.js.map +1 -1
  181. package/dist/module/native/styles/index.js +383 -28
  182. package/dist/module/native/styles/index.js.map +1 -1
  183. package/dist/module/native/styles/resolve.js +10 -6
  184. package/dist/module/native/styles/resolve.js.map +1 -1
  185. package/dist/module/native/styles/scale-factor.js +9 -0
  186. package/dist/module/native/styles/scale-factor.js.map +1 -0
  187. package/dist/module/native/styles/shorthands/_handler.js +11 -1
  188. package/dist/module/native/styles/shorthands/_handler.js.map +1 -1
  189. package/dist/module/native/styles/shorthands/animation.js +6 -3
  190. package/dist/module/native/styles/shorthands/animation.js.map +1 -1
  191. package/dist/module/native/styles/shorthands/box-shadow.js +46 -12
  192. package/dist/module/native/styles/shorthands/box-shadow.js.map +1 -1
  193. package/dist/module/native/styles/shorthands/index.js +1 -0
  194. package/dist/module/native/styles/shorthands/index.js.map +1 -1
  195. package/dist/module/native/styles/shorthands/logical-border-width.js +18 -0
  196. package/dist/module/native/styles/shorthands/logical-border-width.js.map +1 -0
  197. package/dist/module/native/styles/variables.js +55 -43
  198. package/dist/module/native/styles/variables.js.map +1 -1
  199. package/dist/module/native-internal/style-collection.js +1 -1
  200. package/dist/module/native-internal/style-collection.js.map +1 -1
  201. package/dist/module/utilities/dot-notation.types.js +2 -0
  202. package/dist/module/utilities/style-descriptor.js +4 -9
  203. package/dist/module/utilities/style-descriptor.js.map +1 -1
  204. package/dist/module/web/api.js +2 -2
  205. package/dist/module/web/api.js.map +1 -1
  206. package/dist/module/web/assign-style.js +4 -1
  207. package/dist/module/web/assign-style.js.map +1 -1
  208. package/dist/typescript/commonjs/src/babel/import-plugin.d.ts.map +1 -1
  209. package/dist/typescript/commonjs/src/babel/react-native-web.d.ts +2 -1
  210. package/dist/typescript/commonjs/src/babel/react-native-web.d.ts.map +1 -1
  211. package/dist/typescript/commonjs/src/babel/react-native.d.ts.map +1 -1
  212. package/dist/typescript/commonjs/src/compiler/atRules.d.ts +4 -1
  213. package/dist/typescript/commonjs/src/compiler/atRules.d.ts.map +1 -1
  214. package/dist/typescript/commonjs/src/compiler/compiler.d.ts.map +1 -1
  215. package/dist/typescript/commonjs/src/compiler/declarations.d.ts +3 -2
  216. package/dist/typescript/commonjs/src/compiler/declarations.d.ts.map +1 -1
  217. package/dist/typescript/commonjs/src/compiler/lightningcss-loader.d.ts.map +1 -1
  218. package/dist/typescript/commonjs/src/compiler/media-query.d.ts +1 -1
  219. package/dist/typescript/commonjs/src/compiler/media-query.d.ts.map +1 -1
  220. package/dist/typescript/commonjs/src/compiler/selector-builder.d.ts.map +1 -1
  221. package/dist/typescript/commonjs/src/compiler/stylesheet.d.ts +1 -0
  222. package/dist/typescript/commonjs/src/compiler/stylesheet.d.ts.map +1 -1
  223. package/dist/typescript/commonjs/src/components/FlatList.d.ts.map +1 -1
  224. package/dist/typescript/commonjs/src/components/ImageBackground.d.ts.map +1 -1
  225. package/dist/typescript/commonjs/src/components/KeyboardAvoidingView.d.ts.map +1 -1
  226. package/dist/typescript/commonjs/src/components/SafeAreaProvider.d.ts +2 -0
  227. package/dist/typescript/commonjs/src/components/SafeAreaProvider.d.ts.map +1 -0
  228. package/dist/typescript/commonjs/src/components/react-native-safe-area-context.native.d.ts +1 -1
  229. package/dist/typescript/commonjs/src/components/react-native-safe-area-context.native.d.ts.map +1 -1
  230. package/dist/typescript/commonjs/src/metro/cache-version.d.ts +8 -0
  231. package/dist/typescript/commonjs/src/metro/cache-version.d.ts.map +1 -0
  232. package/dist/typescript/commonjs/src/metro/index.d.ts.map +1 -1
  233. package/dist/typescript/commonjs/src/metro/metro-transformer.d.ts +5 -3
  234. package/dist/typescript/commonjs/src/metro/metro-transformer.d.ts.map +1 -1
  235. package/dist/typescript/commonjs/src/metro/typescript.d.ts.map +1 -1
  236. package/dist/typescript/commonjs/src/native/api.d.ts +4 -8
  237. package/dist/typescript/commonjs/src/native/api.d.ts.map +1 -1
  238. package/dist/typescript/commonjs/src/native/conditions/container-query.d.ts.map +1 -1
  239. package/dist/typescript/commonjs/src/native/react/interaction.d.ts +1 -1
  240. package/dist/typescript/commonjs/src/native/react/interaction.d.ts.map +1 -1
  241. package/dist/typescript/commonjs/src/native/react/rules.d.ts.map +1 -1
  242. package/dist/typescript/commonjs/src/native/react/useNativeCss.d.ts.map +1 -1
  243. package/dist/typescript/commonjs/src/native/react/usePassthrough.d.ts.map +1 -1
  244. package/dist/typescript/commonjs/src/native/reactivity.d.ts +13 -3
  245. package/dist/typescript/commonjs/src/native/reactivity.d.ts.map +1 -1
  246. package/dist/typescript/commonjs/src/native/reanimated.d.ts.map +1 -1
  247. package/dist/typescript/commonjs/src/native/styles/functions/color-mix.d.ts +3 -0
  248. package/dist/typescript/commonjs/src/native/styles/functions/color-mix.d.ts.map +1 -0
  249. package/dist/typescript/commonjs/src/native/styles/functions/filters.d.ts +2 -0
  250. package/dist/typescript/commonjs/src/native/styles/functions/filters.d.ts.map +1 -1
  251. package/dist/typescript/commonjs/src/native/styles/functions/index.d.ts +1 -0
  252. package/dist/typescript/commonjs/src/native/styles/functions/index.d.ts.map +1 -1
  253. package/dist/typescript/commonjs/src/native/styles/functions/numeric-functions.d.ts.map +1 -1
  254. package/dist/typescript/commonjs/src/native/styles/functions/string-functions.d.ts +2 -0
  255. package/dist/typescript/commonjs/src/native/styles/functions/string-functions.d.ts.map +1 -1
  256. package/dist/typescript/commonjs/src/native/styles/functions/transform-functions.d.ts.map +1 -1
  257. package/dist/typescript/commonjs/src/native/styles/index.d.ts +2 -2
  258. package/dist/typescript/commonjs/src/native/styles/index.d.ts.map +1 -1
  259. package/dist/typescript/commonjs/src/native/styles/resolve.d.ts +1 -0
  260. package/dist/typescript/commonjs/src/native/styles/resolve.d.ts.map +1 -1
  261. package/dist/typescript/commonjs/src/native/styles/scale-factor.d.ts +2 -0
  262. package/dist/typescript/commonjs/src/native/styles/scale-factor.d.ts.map +1 -0
  263. package/dist/typescript/commonjs/src/native/styles/shorthands/_handler.d.ts.map +1 -1
  264. package/dist/typescript/commonjs/src/native/styles/shorthands/animation.d.ts.map +1 -1
  265. package/dist/typescript/commonjs/src/native/styles/shorthands/box-shadow.d.ts.map +1 -1
  266. package/dist/typescript/commonjs/src/native/styles/shorthands/index.d.ts +1 -0
  267. package/dist/typescript/commonjs/src/native/styles/shorthands/index.d.ts.map +1 -1
  268. package/dist/typescript/commonjs/src/native/styles/shorthands/logical-border-width.d.ts +4 -0
  269. package/dist/typescript/commonjs/src/native/styles/shorthands/logical-border-width.d.ts.map +1 -0
  270. package/dist/typescript/commonjs/src/native/styles/variables.d.ts.map +1 -1
  271. package/dist/typescript/commonjs/src/native-internal/variables.d.ts +1 -1
  272. package/dist/typescript/commonjs/src/native-internal/variables.d.ts.map +1 -1
  273. package/dist/typescript/commonjs/src/runtime.types.d.ts +11 -6
  274. package/dist/typescript/commonjs/src/runtime.types.d.ts.map +1 -1
  275. package/dist/typescript/commonjs/src/utilities/dot-notation.types.d.ts +2 -1
  276. package/dist/typescript/commonjs/src/utilities/dot-notation.types.d.ts.map +1 -1
  277. package/dist/typescript/commonjs/src/utilities/style-descriptor.d.ts +1 -1
  278. package/dist/typescript/commonjs/src/utilities/style-descriptor.d.ts.map +1 -1
  279. package/dist/typescript/commonjs/src/web/api.d.ts +5 -5
  280. package/dist/typescript/commonjs/src/web/api.d.ts.map +1 -1
  281. package/dist/typescript/commonjs/src/web/assign-style.d.ts.map +1 -1
  282. package/dist/typescript/module/src/babel/import-plugin.d.ts +1 -1
  283. package/dist/typescript/module/src/babel/import-plugin.d.ts.map +1 -1
  284. package/dist/typescript/module/src/babel/react-native-web.d.ts +2 -1
  285. package/dist/typescript/module/src/babel/react-native-web.d.ts.map +1 -1
  286. package/dist/typescript/module/src/babel/react-native.d.ts.map +1 -1
  287. package/dist/typescript/module/src/compiler/atRules.d.ts +6 -3
  288. package/dist/typescript/module/src/compiler/atRules.d.ts.map +1 -1
  289. package/dist/typescript/module/src/compiler/compiler.d.ts +2 -2
  290. package/dist/typescript/module/src/compiler/compiler.d.ts.map +1 -1
  291. package/dist/typescript/module/src/compiler/compiler.types.d.ts +1 -1
  292. package/dist/typescript/module/src/compiler/compiler.types.d.ts.map +1 -1
  293. package/dist/typescript/module/src/compiler/container-query.d.ts +2 -2
  294. package/dist/typescript/module/src/compiler/container-query.d.ts.map +1 -1
  295. package/dist/typescript/module/src/compiler/declarations.d.ts +5 -4
  296. package/dist/typescript/module/src/compiler/declarations.d.ts.map +1 -1
  297. package/dist/typescript/module/src/compiler/index.d.ts +2 -2
  298. package/dist/typescript/module/src/compiler/index.d.ts.map +1 -1
  299. package/dist/typescript/module/src/compiler/inline-variables.d.ts +1 -1
  300. package/dist/typescript/module/src/compiler/inline-variables.d.ts.map +1 -1
  301. package/dist/typescript/module/src/compiler/keyframes.d.ts +2 -2
  302. package/dist/typescript/module/src/compiler/keyframes.d.ts.map +1 -1
  303. package/dist/typescript/module/src/compiler/lightningcss-loader.d.ts.map +1 -1
  304. package/dist/typescript/module/src/compiler/media-query.d.ts +3 -3
  305. package/dist/typescript/module/src/compiler/media-query.d.ts.map +1 -1
  306. package/dist/typescript/module/src/compiler/pseudo-elements.d.ts +1 -1
  307. package/dist/typescript/module/src/compiler/pseudo-elements.d.ts.map +1 -1
  308. package/dist/typescript/module/src/compiler/selector-builder.d.ts +1 -1
  309. package/dist/typescript/module/src/compiler/selector-builder.d.ts.map +1 -1
  310. package/dist/typescript/module/src/compiler/selectors.d.ts +2 -2
  311. package/dist/typescript/module/src/compiler/selectors.d.ts.map +1 -1
  312. package/dist/typescript/module/src/compiler/stylesheet.d.ts +2 -1
  313. package/dist/typescript/module/src/compiler/stylesheet.d.ts.map +1 -1
  314. package/dist/typescript/module/src/components/FlatList.d.ts.map +1 -1
  315. package/dist/typescript/module/src/components/ImageBackground.d.ts.map +1 -1
  316. package/dist/typescript/module/src/components/KeyboardAvoidingView.d.ts.map +1 -1
  317. package/dist/typescript/module/src/components/SafeAreaProvider.d.ts +2 -0
  318. package/dist/typescript/module/src/components/SafeAreaProvider.d.ts.map +1 -0
  319. package/dist/typescript/module/src/components/index.d.ts +16 -16
  320. package/dist/typescript/module/src/components/index.d.ts.map +1 -1
  321. package/dist/typescript/module/src/components/react-native-safe-area-context.native.d.ts +1 -1
  322. package/dist/typescript/module/src/components/react-native-safe-area-context.native.d.ts.map +1 -1
  323. package/dist/typescript/module/src/metro/cache-version.d.ts +8 -0
  324. package/dist/typescript/module/src/metro/cache-version.d.ts.map +1 -0
  325. package/dist/typescript/module/src/metro/index.d.ts +1 -1
  326. package/dist/typescript/module/src/metro/index.d.ts.map +1 -1
  327. package/dist/typescript/module/src/metro/metro-transformer.d.ts +6 -4
  328. package/dist/typescript/module/src/metro/metro-transformer.d.ts.map +1 -1
  329. package/dist/typescript/module/src/metro/typescript.d.ts.map +1 -1
  330. package/dist/typescript/module/src/native/api.d.ts +5 -9
  331. package/dist/typescript/module/src/native/api.d.ts.map +1 -1
  332. package/dist/typescript/module/src/native/conditions/attributes.d.ts +1 -1
  333. package/dist/typescript/module/src/native/conditions/attributes.d.ts.map +1 -1
  334. package/dist/typescript/module/src/native/conditions/container-query.d.ts +2 -2
  335. package/dist/typescript/module/src/native/conditions/container-query.d.ts.map +1 -1
  336. package/dist/typescript/module/src/native/conditions/guards.d.ts +2 -2
  337. package/dist/typescript/module/src/native/conditions/guards.d.ts.map +1 -1
  338. package/dist/typescript/module/src/native/conditions/index.d.ts +3 -3
  339. package/dist/typescript/module/src/native/conditions/index.d.ts.map +1 -1
  340. package/dist/typescript/module/src/native/conditions/media-query.d.ts +1 -1
  341. package/dist/typescript/module/src/native/conditions/media-query.d.ts.map +1 -1
  342. package/dist/typescript/module/src/native/index.d.ts +3 -3
  343. package/dist/typescript/module/src/native/index.d.ts.map +1 -1
  344. package/dist/typescript/module/src/native/react/interaction.d.ts +2 -2
  345. package/dist/typescript/module/src/native/react/interaction.d.ts.map +1 -1
  346. package/dist/typescript/module/src/native/react/rules.d.ts +2 -2
  347. package/dist/typescript/module/src/native/react/rules.d.ts.map +1 -1
  348. package/dist/typescript/module/src/native/react/useNativeCss.d.ts +4 -4
  349. package/dist/typescript/module/src/native/react/useNativeCss.d.ts.map +1 -1
  350. package/dist/typescript/module/src/native/react/usePassthrough.d.ts +1 -1
  351. package/dist/typescript/module/src/native/react/usePassthrough.d.ts.map +1 -1
  352. package/dist/typescript/module/src/native/reactivity.d.ts +13 -3
  353. package/dist/typescript/module/src/native/reactivity.d.ts.map +1 -1
  354. package/dist/typescript/module/src/native/reanimated.d.ts.map +1 -1
  355. package/dist/typescript/module/src/native/styles/calculate-props.d.ts +2 -2
  356. package/dist/typescript/module/src/native/styles/calculate-props.d.ts.map +1 -1
  357. package/dist/typescript/module/src/native/styles/functions/animation-timing.d.ts +1 -1
  358. package/dist/typescript/module/src/native/styles/functions/animation-timing.d.ts.map +1 -1
  359. package/dist/typescript/module/src/native/styles/functions/calc.d.ts +1 -1
  360. package/dist/typescript/module/src/native/styles/functions/calc.d.ts.map +1 -1
  361. package/dist/typescript/module/src/native/styles/functions/color-mix.d.ts +3 -0
  362. package/dist/typescript/module/src/native/styles/functions/color-mix.d.ts.map +1 -0
  363. package/dist/typescript/module/src/native/styles/functions/filters.d.ts +3 -1
  364. package/dist/typescript/module/src/native/styles/functions/filters.d.ts.map +1 -1
  365. package/dist/typescript/module/src/native/styles/functions/index.d.ts +8 -7
  366. package/dist/typescript/module/src/native/styles/functions/index.d.ts.map +1 -1
  367. package/dist/typescript/module/src/native/styles/functions/numeric-functions.d.ts +1 -1
  368. package/dist/typescript/module/src/native/styles/functions/numeric-functions.d.ts.map +1 -1
  369. package/dist/typescript/module/src/native/styles/functions/platform-functions.d.ts +1 -1
  370. package/dist/typescript/module/src/native/styles/functions/platform-functions.d.ts.map +1 -1
  371. package/dist/typescript/module/src/native/styles/functions/string-functions.d.ts +3 -1
  372. package/dist/typescript/module/src/native/styles/functions/string-functions.d.ts.map +1 -1
  373. package/dist/typescript/module/src/native/styles/functions/transform-functions.d.ts +1 -1
  374. package/dist/typescript/module/src/native/styles/functions/transform-functions.d.ts.map +1 -1
  375. package/dist/typescript/module/src/native/styles/index.d.ts +7 -7
  376. package/dist/typescript/module/src/native/styles/index.d.ts.map +1 -1
  377. package/dist/typescript/module/src/native/styles/line-height.d.ts +1 -1
  378. package/dist/typescript/module/src/native/styles/line-height.d.ts.map +1 -1
  379. package/dist/typescript/module/src/native/styles/resolve.d.ts +4 -3
  380. package/dist/typescript/module/src/native/styles/resolve.d.ts.map +1 -1
  381. package/dist/typescript/module/src/native/styles/scale-factor.d.ts +2 -0
  382. package/dist/typescript/module/src/native/styles/scale-factor.d.ts.map +1 -0
  383. package/dist/typescript/module/src/native/styles/shorthands/_handler.d.ts +1 -1
  384. package/dist/typescript/module/src/native/styles/shorthands/_handler.d.ts.map +1 -1
  385. package/dist/typescript/module/src/native/styles/shorthands/animation.d.ts +2 -2
  386. package/dist/typescript/module/src/native/styles/shorthands/animation.d.ts.map +1 -1
  387. package/dist/typescript/module/src/native/styles/shorthands/border.d.ts +1 -1
  388. package/dist/typescript/module/src/native/styles/shorthands/border.d.ts.map +1 -1
  389. package/dist/typescript/module/src/native/styles/shorthands/box-shadow.d.ts +1 -1
  390. package/dist/typescript/module/src/native/styles/shorthands/box-shadow.d.ts.map +1 -1
  391. package/dist/typescript/module/src/native/styles/shorthands/index.d.ts +6 -5
  392. package/dist/typescript/module/src/native/styles/shorthands/index.d.ts.map +1 -1
  393. package/dist/typescript/module/src/native/styles/shorthands/logical-border-width.d.ts +4 -0
  394. package/dist/typescript/module/src/native/styles/shorthands/logical-border-width.d.ts.map +1 -0
  395. package/dist/typescript/module/src/native/styles/shorthands/text-shadow.d.ts +1 -1
  396. package/dist/typescript/module/src/native/styles/shorthands/text-shadow.d.ts.map +1 -1
  397. package/dist/typescript/module/src/native/styles/shorthands/transform.d.ts +1 -1
  398. package/dist/typescript/module/src/native/styles/shorthands/transform.d.ts.map +1 -1
  399. package/dist/typescript/module/src/native/styles/units.d.ts +1 -1
  400. package/dist/typescript/module/src/native/styles/units.d.ts.map +1 -1
  401. package/dist/typescript/module/src/native/styles/variables.d.ts +2 -2
  402. package/dist/typescript/module/src/native/styles/variables.d.ts.map +1 -1
  403. package/dist/typescript/module/src/native-internal/index.d.ts +3 -3
  404. package/dist/typescript/module/src/native-internal/index.d.ts.map +1 -1
  405. package/dist/typescript/module/src/native-internal/root.d.ts +1 -1
  406. package/dist/typescript/module/src/native-internal/root.d.ts.map +1 -1
  407. package/dist/typescript/module/src/native-internal/style-collection.d.ts +2 -2
  408. package/dist/typescript/module/src/native-internal/style-collection.d.ts.map +1 -1
  409. package/dist/typescript/module/src/native-internal/variables.d.ts +2 -2
  410. package/dist/typescript/module/src/native-internal/variables.d.ts.map +1 -1
  411. package/dist/typescript/module/src/runtime.d.ts +1 -1
  412. package/dist/typescript/module/src/runtime.d.ts.map +1 -1
  413. package/dist/typescript/module/src/runtime.native.d.ts +1 -1
  414. package/dist/typescript/module/src/runtime.native.d.ts.map +1 -1
  415. package/dist/typescript/module/src/runtime.types.d.ts +11 -6
  416. package/dist/typescript/module/src/runtime.types.d.ts.map +1 -1
  417. package/dist/typescript/module/src/utilities/dot-notation.types.d.ts +2 -1
  418. package/dist/typescript/module/src/utilities/dot-notation.types.d.ts.map +1 -1
  419. package/dist/typescript/module/src/utilities/index.d.ts +3 -3
  420. package/dist/typescript/module/src/utilities/index.d.ts.map +1 -1
  421. package/dist/typescript/module/src/utilities/specificity.d.ts +2 -2
  422. package/dist/typescript/module/src/utilities/specificity.d.ts.map +1 -1
  423. package/dist/typescript/module/src/utilities/style-descriptor.d.ts +1 -1
  424. package/dist/typescript/module/src/utilities/style-descriptor.d.ts.map +1 -1
  425. package/dist/typescript/module/src/web/api.d.ts +5 -5
  426. package/dist/typescript/module/src/web/api.d.ts.map +1 -1
  427. package/dist/typescript/module/src/web/assign-style.d.ts.map +1 -1
  428. package/dist/typescript/module/src/web/index.d.ts +3 -3
  429. package/dist/typescript/module/src/web/index.d.ts.map +1 -1
  430. package/node/babel.mjs +4 -0
  431. package/node/compiler.mjs +2 -0
  432. package/node/metro.mjs +2 -0
  433. package/package.json +78 -29
  434. package/src/babel/import-plugin.ts +15 -4
  435. package/src/babel/react-native-web.ts +32 -3
  436. package/src/babel/react-native.ts +7 -1
  437. package/src/compiler/atRules.ts +44 -0
  438. package/src/compiler/compiler.ts +140 -42
  439. package/src/compiler/container-query.ts +8 -3
  440. package/src/compiler/declarations.ts +279 -94
  441. package/src/compiler/lightningcss-loader.ts +21 -1
  442. package/src/compiler/media-query.ts +20 -9
  443. package/src/compiler/selector-builder.ts +29 -3
  444. package/src/compiler/stylesheet.ts +6 -0
  445. package/src/compiler/supports.ts +2 -2
  446. package/src/components/FlatList.tsx +1 -0
  447. package/src/components/ImageBackground.tsx +2 -6
  448. package/src/components/KeyboardAvoidingView.tsx +2 -3
  449. package/src/components/SafeAreaProvider.tsx +1 -0
  450. package/src/components/index.cts +46 -1
  451. package/src/jest/index.ts +1 -1
  452. package/src/metro/cache-version.ts +48 -0
  453. package/src/metro/index.ts +2 -0
  454. package/src/metro/metro-transformer.ts +9 -6
  455. package/src/metro/typescript.ts +53 -6
  456. package/src/native/api.tsx +20 -14
  457. package/src/native/conditions/attributes.ts +26 -9
  458. package/src/native/conditions/container-query.ts +11 -9
  459. package/src/native/conditions/media-query.ts +1 -1
  460. package/src/native/react/interaction.ts +11 -6
  461. package/src/native/react/rules.ts +13 -5
  462. package/src/native/react/useNativeCss.ts +79 -17
  463. package/src/native/react/usePassthrough.ts +3 -2
  464. package/src/native/reactivity.ts +61 -24
  465. package/src/native/reanimated.ts +24 -5
  466. package/src/native/styles/functions/color-mix.ts +74 -0
  467. package/src/native/styles/functions/filters.ts +20 -6
  468. package/src/native/styles/functions/index.ts +1 -0
  469. package/src/native/styles/functions/numeric-functions.ts +7 -6
  470. package/src/native/styles/functions/string-functions.ts +18 -0
  471. package/src/native/styles/functions/transform-functions.ts +5 -4
  472. package/src/native/styles/index.ts +443 -36
  473. package/src/native/styles/resolve.ts +15 -11
  474. package/src/native/styles/scale-factor.ts +6 -0
  475. package/src/native/styles/shorthands/_handler.ts +14 -1
  476. package/src/native/styles/shorthands/animation.ts +8 -2
  477. package/src/native/styles/shorthands/box-shadow.ts +50 -15
  478. package/src/native/styles/shorthands/index.ts +1 -0
  479. package/src/native/styles/shorthands/logical-border-width.ts +32 -0
  480. package/src/native/styles/variables.ts +48 -38
  481. package/src/native-internal/style-collection.ts +1 -1
  482. package/src/runtime.types.ts +17 -15
  483. package/src/utilities/dot-notation.types.ts +4 -3
  484. package/src/utilities/style-descriptor.ts +11 -16
  485. package/src/web/api.tsx +7 -12
  486. package/src/web/assign-style.ts +2 -1
  487. package/types.d.ts +3 -20
  488. package/dist/commonjs/compiler/inheritance.test.js +0 -78
  489. package/dist/commonjs/compiler/inheritance.test.js.map +0 -1
  490. package/dist/module/compiler/inheritance.test.js +0 -78
  491. package/dist/module/compiler/inheritance.test.js.map +0 -1
  492. package/dist/typescript/commonjs/.config/eslint.config.d.mts +0 -3
  493. package/dist/typescript/commonjs/.config/eslint.config.d.mts.map +0 -1
  494. package/dist/typescript/commonjs/eslint.config.d.mts +0 -2
  495. package/dist/typescript/commonjs/eslint.config.d.mts.map +0 -1
  496. package/dist/typescript/commonjs/example/app.config.d.ts +0 -4
  497. package/dist/typescript/commonjs/example/app.config.d.ts.map +0 -1
  498. package/dist/typescript/commonjs/example/index.d.ts +0 -2
  499. package/dist/typescript/commonjs/example/index.d.ts.map +0 -1
  500. package/dist/typescript/commonjs/example/metro.config.d.ts +0 -3
  501. package/dist/typescript/commonjs/example/metro.config.d.ts.map +0 -1
  502. package/dist/typescript/commonjs/example/postcss.config.d.mts +0 -7
  503. package/dist/typescript/commonjs/example/postcss.config.d.mts.map +0 -1
  504. package/dist/typescript/commonjs/example/src/App.d.ts +0 -3
  505. package/dist/typescript/commonjs/example/src/App.d.ts.map +0 -1
  506. package/dist/typescript/commonjs/src/compiler/inheritance.test.d.ts +0 -2
  507. package/dist/typescript/commonjs/src/compiler/inheritance.test.d.ts.map +0 -1
  508. package/dist/typescript/module/.config/eslint.config.d.mts +0 -3
  509. package/dist/typescript/module/.config/eslint.config.d.mts.map +0 -1
  510. package/dist/typescript/module/eslint.config.d.mts +0 -2
  511. package/dist/typescript/module/eslint.config.d.mts.map +0 -1
  512. package/dist/typescript/module/example/app.config.d.ts +0 -4
  513. package/dist/typescript/module/example/app.config.d.ts.map +0 -1
  514. package/dist/typescript/module/example/index.d.ts +0 -2
  515. package/dist/typescript/module/example/index.d.ts.map +0 -1
  516. package/dist/typescript/module/example/metro.config.d.ts +0 -3
  517. package/dist/typescript/module/example/metro.config.d.ts.map +0 -1
  518. package/dist/typescript/module/example/postcss.config.d.mts +0 -7
  519. package/dist/typescript/module/example/postcss.config.d.mts.map +0 -1
  520. package/dist/typescript/module/example/src/App.d.ts +0 -3
  521. package/dist/typescript/module/example/src/App.d.ts.map +0 -1
  522. package/dist/typescript/module/src/compiler/inheritance.test.d.ts +0 -2
  523. package/dist/typescript/module/src/compiler/inheritance.test.d.ts.map +0 -1
  524. package/src/compiler/inheritance.test.ts +0 -121
@@ -39,7 +39,7 @@ function testComparison(mediaQuery: MediaCondition, get: Getter): Boolean {
39
39
 
40
40
  switch (mediaQuery[1]) {
41
41
  case "dir":
42
- return (I18nManager.isRTL && value === "rtl") || value === "ltr";
42
+ return value === (I18nManager.isRTL ? "rtl" : "ltr");
43
43
  case "hover":
44
44
  return true;
45
45
  case "platform":
@@ -11,7 +11,7 @@ import {
11
11
 
12
12
  const mainCache = new WeakMap<
13
13
  WeakKey,
14
- WeakMap<Function, (event: any) => void>
14
+ Map<InteractionType, WeakMap<Function, (event: any) => void>>
15
15
  >();
16
16
 
17
17
  type Handler = (event: unknown) => void;
@@ -40,14 +40,19 @@ const defaultHandlers: Record<InteractionType, Handler> = {
40
40
  export function getInteractionHandler(
41
41
  weakKey: WeakKey,
42
42
  type: InteractionType,
43
- handler = defaultHandlers[type],
43
+ handler?: Handler | null,
44
44
  ) {
45
- let cache = mainCache.get(weakKey);
46
- if (!cache) {
47
- cache = new WeakMap();
48
- mainCache.set(weakKey, cache);
45
+ handler ??= defaultHandlers[type];
46
+ let interactions = mainCache.get(weakKey);
47
+ if (!interactions) {
48
+ interactions = new Map();
49
+ mainCache.set(weakKey, interactions);
49
50
  }
50
51
 
52
+ // A caller may reuse one callback for events that update opposite states.
53
+ let cache = interactions.get(type);
54
+ if (!cache) interactions.set(type, (cache = new WeakMap()));
55
+
51
56
  let cached = cache.get(handler);
52
57
  if (!cached) {
53
58
  cached = (event: any) => {
@@ -8,6 +8,7 @@ import type { RenderGuard } from "../conditions/guards";
8
8
  import { getDeepPath } from "../objects";
9
9
  import {
10
10
  activeFamily,
11
+ cleanupEffect,
11
12
  containerLayoutFamily,
12
13
  focusFamily,
13
14
  hoverFamily,
@@ -30,6 +31,7 @@ export function updateRules(
30
31
  forceUpdate = false,
31
32
  isRerender = true,
32
33
  ): ComponentState {
34
+ cleanupEffect(state.ruleEffect);
33
35
  const guards: RenderGuard[] = [];
34
36
  const rules = new Set<StyleRule | InlineVariable | VariableContextValue>();
35
37
  if (forceUpdate) {
@@ -144,13 +146,19 @@ export function updateRules(
144
146
  containers = {
145
147
  ...inheritedContainers,
146
148
  // This container becomes the default container
147
- [DEFAULT_CONTAINER_NAME]: state.ruleEffectGetter,
149
+ [DEFAULT_CONTAINER_NAME]: {
150
+ key: state.ruleEffectGetter,
151
+ props: currentProps,
152
+ },
148
153
  };
149
154
  }
150
155
 
151
156
  // This this component as the named container
152
157
  for (const name of rule.c) {
153
- containers![name] = state.ruleEffectGetter;
158
+ containers![name] = {
159
+ key: state.ruleEffectGetter,
160
+ props: currentProps,
161
+ };
154
162
  }
155
163
 
156
164
  // Enable hover/active/focus/layout handlers
@@ -212,14 +220,14 @@ export function updateRules(
212
220
  };
213
221
  }
214
222
 
215
- if (usesVariables || variables) {
223
+ if (usesVariables || variables || inlineVariables.size) {
216
224
  rules.add(inheritedVariables);
217
225
 
218
226
  if (inlineVariables.size) {
219
227
  variables = Object.assign(
220
228
  {},
221
- variables,
222
229
  inheritedVariables,
230
+ variables,
223
231
  ...Array.from(inlineVariables),
224
232
  { [VAR_SYMBOL]: true },
225
233
  );
@@ -243,7 +251,7 @@ export function updateRules(
243
251
  }
244
252
 
245
253
  // Remove this component from the old observer
246
- state.stylesObs?.cleanup(state.ruleEffect);
254
+ state.stylesObs?.unsubscribe(state.styleEffect);
247
255
 
248
256
  return {
249
257
  ...state,
@@ -4,10 +4,11 @@ import {
4
4
  Fragment,
5
5
  useContext,
6
6
  useEffect,
7
+ useRef,
7
8
  useState,
8
9
  type ComponentType,
9
10
  } from "react";
10
- import { Pressable, View } from "react-native";
11
+ import { Image, Pressable, StyleSheet, View } from "react-native";
11
12
 
12
13
  import { VariableContext } from "react-native-css/native-internal";
13
14
 
@@ -16,6 +17,7 @@ import { testGuards, type RenderGuard } from "../conditions/guards";
16
17
  import {
17
18
  cleanupEffect,
18
19
  ContainerContext,
20
+ hasChangedDependencies,
19
21
  type ContainerContextValue,
20
22
  type Effect,
21
23
  type Getter,
@@ -69,9 +71,6 @@ export function useNativeCss(
69
71
  const inheritedContainers = useContext(ContainerContext);
70
72
 
71
73
  const [state, setState] = useState((): ComponentState => {
72
- // Both effects share the same observers to improve memory usage
73
- const observers = new Set<Effect>();
74
-
75
74
  /**
76
75
  * When fired, this effect will force the rules to be re-evaluated.
77
76
  * This will cause a re-render if there are different rules
@@ -79,7 +78,7 @@ export function useNativeCss(
79
78
  * Use this when a rule condition changes, e.g FastRefresh or media queries
80
79
  */
81
80
  const ruleEffect: Effect = {
82
- observers,
81
+ observers: new Set(),
83
82
  run: () => setState((state) => updateRules(state)),
84
83
  };
85
84
 
@@ -90,11 +89,11 @@ export function useNativeCss(
90
89
  * Use this when a value changes, e.g vm units or light / dark mode
91
90
  */
92
91
  const styleEffect: Effect = {
93
- observers,
92
+ observers: new Set(),
94
93
  run: () => setState((state) => ({ ...state })),
95
94
  };
96
95
 
97
- return updateRules(
96
+ const initialState = updateRules(
98
97
  {
99
98
  ruleEffect,
100
99
  ruleEffectGetter: (observable) => observable.get(ruleEffect),
@@ -110,10 +109,36 @@ export function useNativeCss(
110
109
  false,
111
110
  false,
112
111
  );
112
+ // State initializers may be discarded by React StrictMode. Subscribe once
113
+ // the component commits instead of retaining an abandoned initializer.
114
+ cleanupEffect(ruleEffect);
115
+ return initialState;
113
116
  });
114
117
 
115
- // Both effects share the same observers, so we only need to cleanup one of them
116
- useEffect(() => () => cleanupEffect(state.ruleEffect), [state.ruleEffect]);
118
+ // Distinguishes a fresh mount from an effect replay (Activity, StrictMode)
119
+ const hasCommittedRef = useRef(false);
120
+
121
+ useEffect(() => {
122
+ // Reconnect subscriptions after React replays an effect setup.
123
+ if (state.ruleEffect.observers.size === 0) {
124
+ if (hasCommittedRef.current || hasChangedDependencies(state.ruleEffect)) {
125
+ // Replay, or conditions changed since the initializer: recalculate.
126
+ state.ruleEffect.run();
127
+ state.styleEffect.run();
128
+ } else {
129
+ // Fresh mount: resubscribe to the initializer's dependencies.
130
+ // styleEffect resubscribes itself during render.
131
+ for (const observable of state.ruleEffect.dependencies ?? []) {
132
+ observable.get(state.ruleEffect);
133
+ }
134
+ }
135
+ }
136
+ hasCommittedRef.current = true;
137
+ return () => {
138
+ cleanupEffect(state.ruleEffect);
139
+ cleanupEffect(state.styleEffect);
140
+ };
141
+ }, [state.ruleEffect, state.styleEffect]);
117
142
 
118
143
  // Check if our derived state has changed (e.g the className prop)
119
144
  if (
@@ -137,7 +162,11 @@ export function useNativeCss(
137
162
  return createElement(Fragment);
138
163
  }
139
164
 
140
- let props = getStyledProps(state, originalProps);
165
+ let props = getStyledProps(
166
+ state,
167
+ originalProps,
168
+ type === Image ? adaptImageProps : undefined,
169
+ );
141
170
 
142
171
  if (type === View && props?.onPress) {
143
172
  type = Pressable;
@@ -156,8 +185,18 @@ export function useNativeCss(
156
185
  }
157
186
 
158
187
  if (state.containers) {
188
+ // Publish a new props snapshot even when this component's own rules did not
189
+ // change. Descendants can depend on an ancestor attribute through a group.
190
+ const containers = Object.fromEntries(
191
+ Object.entries(state.containers).map(([name, container]) => [
192
+ name,
193
+ container.key === state.ruleEffectGetter
194
+ ? { key: container.key, props: originalProps }
195
+ : (inheritedContainers[name] ?? container),
196
+ ]),
197
+ );
159
198
  props = {
160
- value: state.containers,
199
+ value: containers,
161
200
  children: createElement(type, props),
162
201
  };
163
202
  type = ContainerContext.Provider;
@@ -172,29 +211,41 @@ export function useNativeCss(
172
211
  export function mappingToConfig(mapping: StyledConfiguration<any>) {
173
212
  return Object.entries(mapping).flatMap(([key, value]): Config => {
174
213
  if (value === true) {
175
- return { source: key, target: key };
214
+ return {
215
+ source: key,
216
+ target: key,
217
+ };
176
218
  } else if (value === false) {
177
219
  return { source: key, target: false };
178
220
  } else if (typeof value === "string") {
179
221
  return { source: key, target: value.split(".") };
180
222
  } else if (typeof value === "object") {
223
+ // Keep the declared deprecated alias working. The current spelling wins
224
+ // when both are provided, including an intentionally empty mapping.
225
+ const mapping = value.nativeStyleMapping ?? value.nativeStyleToProp;
226
+ const nativeStyleMapping = mapping
227
+ ? Object.fromEntries(
228
+ Object.entries(mapping).map(([k, v]) => [k, v === true ? k : v]),
229
+ )
230
+ : undefined;
231
+
181
232
  if (Array.isArray(value)) {
182
- return { source: key, target: value };
233
+ return { source: key, target: value, nativeStyleMapping };
183
234
  }
184
235
 
185
236
  if ("target" in value) {
186
237
  if (value.target === false) {
187
- return { source: key, target: false };
238
+ return { source: key, target: false, nativeStyleMapping };
188
239
  } else if (typeof value.target === "string") {
189
240
  const target = value.target.split(".");
190
241
 
191
242
  if (target.length === 1) {
192
- return { source: key, target: target[0]! };
243
+ return { source: key, target: target[0]!, nativeStyleMapping };
193
244
  } else {
194
- return { source: key, target };
245
+ return { source: key, target, nativeStyleMapping };
195
246
  }
196
247
  } else if (Array.isArray(value.target)) {
197
- return { source: key, target: value.target };
248
+ return { source: key, target: value.target, nativeStyleMapping };
198
249
  }
199
250
  }
200
251
  }
@@ -202,3 +253,14 @@ export function mappingToConfig(mapping: StyledConfiguration<any>) {
202
253
  throw new Error(`styled(): Invalid mapping for ${key}: ${value}`);
203
254
  });
204
255
  }
256
+
257
+ // Apply native Image fitting before normal, inline, and important props merge.
258
+ // The compiler's contentFit mapping remains available to Expo Image adapters.
259
+ function adaptImageProps(props: Record<string, any> | undefined) {
260
+ if (!props || !("contentFit" in props)) return props;
261
+ const { contentFit, style, ...rest } = props;
262
+ return {
263
+ ...rest,
264
+ style: { ...StyleSheet.flatten(style), objectFit: contentFit },
265
+ };
266
+ }
@@ -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,8 +10,12 @@ 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
+ /** Dependencies recorded by the last cleanupEffect() */
16
+ dependencies?: Observable<any, any>[];
17
+ /** Dependency values recorded by the last cleanupEffect() */
18
+ snapshots?: [Observable<any, any>, unknown][];
15
19
  };
16
20
 
17
21
  export type Observable<Value, Arg = Value> = {
@@ -19,6 +23,7 @@ export type Observable<Value, Arg = Value> = {
19
23
  get: (effect?: Effect) => Value;
20
24
  set: (arg: Arg) => void;
21
25
  run: () => void;
26
+ unsubscribe: (effect: Effect) => void;
22
27
  };
23
28
  type Read<Value, Arg> = (get: Getter, arg?: Arg) => Value;
24
29
  export type Getter = <Value>(observable: Observable<Value, any>) => Value;
@@ -43,9 +48,10 @@ export function observable<Value, Arg = Value>(
43
48
 
44
49
  const observers = new Set<Effect>();
45
50
  const effect: Effect = {
46
- observers,
51
+ observers: new Set(),
47
52
  run: () => {
48
53
  if (!isStatic) {
54
+ cleanupEffect(effect);
49
55
  const nextValue = (init as Read<Value, Arg>)(getter, lastArg);
50
56
  if (equality(value, nextValue)) {
51
57
  return;
@@ -57,14 +63,19 @@ export function observable<Value, Arg = Value>(
57
63
  },
58
64
  };
59
65
 
60
- const getter: Getter = (observable) => observable.get(effect);
66
+ const getter: Getter = (observable) =>
67
+ observable.get(observers.size > 0 ? effect : undefined);
61
68
 
62
- function get(effect?: Effect) {
63
- if (effect) {
64
- observers.add(effect);
69
+ function get(subscriber?: Effect) {
70
+ if (subscriber) {
71
+ if (observers.size === 0 && !isStatic) didInit = false;
72
+ observers.add(subscriber);
73
+ subscriber.observers.add(obs);
65
74
  }
66
75
  if (!didInit) {
67
- value = (init as Read<Value, Arg>)(getter, undefined);
76
+ cleanupEffect(effect);
77
+ value = (init as Read<Value, Arg>)(getter, lastArg);
78
+ didInit = observers.size > 0;
68
79
  }
69
80
 
70
81
  return value;
@@ -77,9 +88,10 @@ export function observable<Value, Arg = Value>(
77
88
  }
78
89
  value = arg as unknown as Value;
79
90
  } else {
91
+ cleanupEffect(effect);
80
92
  const nextValue = (init as Read<Value, Arg>)(getter, arg);
81
93
 
82
- didInit = true;
94
+ didInit = observers.size > 0;
83
95
  lastArg = arg;
84
96
 
85
97
  if (equality(value, nextValue)) {
@@ -108,6 +120,13 @@ export function observable<Value, Arg = Value>(
108
120
  get,
109
121
  set,
110
122
  run: effect.run,
123
+ unsubscribe(subscriber) {
124
+ if (observers.delete(subscriber) && observers.size === 0 && !isStatic) {
125
+ cleanupEffect(effect);
126
+ didInit = false;
127
+ }
128
+ subscriber.observers.delete(obs);
129
+ },
111
130
  };
112
131
 
113
132
  return obs;
@@ -115,10 +134,26 @@ export function observable<Value, Arg = Value>(
115
134
 
116
135
  export function cleanupEffect(effect: Effect) {
117
136
  if (!effect) return;
118
- for (const dep of effect.observers) {
119
- dep.observers.delete(effect);
120
- }
137
+ const dependencies = (effect.dependencies = Array.from(effect.observers));
138
+ // Snapshot before detaching so computed observables return cached values
139
+ effect.snapshots = dependencies.map(
140
+ (observable) =>
141
+ [observable, observable.get()] as [Observable<any, any>, unknown],
142
+ );
121
143
  effect.observers.clear();
144
+ for (const dep of dependencies) {
145
+ dep.unsubscribe(effect);
146
+ }
147
+ }
148
+
149
+ /** Whether any of the effect's dependencies changed since cleanupEffect() */
150
+ export function hasChangedDependencies(effect: Effect): boolean {
151
+ const snapshots = effect.snapshots;
152
+ if (!snapshots) return false;
153
+ for (const [observable, value] of snapshots) {
154
+ if (!Object.is(observable.get(), value)) return true;
155
+ }
156
+ return false;
122
157
  }
123
158
 
124
159
  /** Family Helpers ************************************************************/
@@ -129,11 +164,9 @@ export function family<Key, Result = Key, Args extends any = void>(
129
164
  const map = new Map<Key, Result>();
130
165
  return Object.assign(
131
166
  (key: Key, args: Args) => {
132
- let value = map.get(key);
133
- if (!value) {
134
- value = fn(key, args);
135
- map.set(key, value);
136
- }
167
+ if (map.has(key)) return map.get(key)!;
168
+ const value = fn(key, args);
169
+ map.set(key, value);
137
170
  return value;
138
171
  },
139
172
  {
@@ -166,11 +199,9 @@ export function weakFamily<Key extends WeakKey, Args = undefined, Result = Key>(
166
199
  const map = new WeakMap<Key, Result>();
167
200
  return Object.assign(
168
201
  (key: Key, args: Args) => {
169
- let value = map.get(key);
170
- if (!value) {
171
- value = fn(key, args);
172
- map.set(key, value);
173
- }
202
+ if (map.has(key)) return map.get(key)!;
203
+ const value = fn(key, args);
204
+ map.set(key, value);
174
205
  return value;
175
206
  },
176
207
  {
@@ -216,14 +247,20 @@ Dimensions.addEventListener("change", ({ window }) => {
216
247
 
217
248
  /** Color Scheme **************************************************************/
218
249
 
219
- export const colorScheme = observable<ColorSchemeName>(
250
+ export const colorScheme = observable<ColorSchemeName | null | undefined>(
220
251
  Appearance.getColorScheme(),
221
252
  );
222
253
  Appearance.addChangeListener((event) => colorScheme.set(event.colorScheme));
223
254
 
224
255
  /** Containers ****************************************************************/
225
256
 
226
- export type ContainerContextValue = Record<string, WeakKey>;
257
+ export type ContainerContextValue = Record<
258
+ string,
259
+ {
260
+ key: WeakKey;
261
+ props: Record<string, unknown> | null | undefined;
262
+ }
263
+ >;
227
264
  export const ContainerContext = createContext<ContainerContextValue>({});
228
265
 
229
266
  export const containerLayoutFamily = weakFamily(() => {
@@ -243,6 +280,6 @@ export const containerWidthFamily = weakFamily((key) => {
243
280
 
244
281
  export const containerHeightFamily = weakFamily((key) => {
245
282
  return observable((read) => {
246
- return read(containerLayoutFamily(key))?.width || 0;
283
+ return read(containerLayoutFamily(key))?.height || 0;
247
284
  });
248
285
  });
@@ -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
  },
@@ -0,0 +1,74 @@
1
+ import {
2
+ ColorSpace,
3
+ to as convert,
4
+ mix,
5
+ OKLab,
6
+ P3,
7
+ parse,
8
+ sRGB,
9
+ } from "colorjs.io/fn";
10
+
11
+ import type { StyleFunctionResolver } from "../resolve";
12
+
13
+ ColorSpace.register(sRGB);
14
+ ColorSpace.register(P3);
15
+ ColorSpace.register(OKLab);
16
+
17
+ export const colorMix: StyleFunctionResolver = (resolveValue, value) => {
18
+ const resolved = resolveValue(value[2]);
19
+ if (!Array.isArray(resolved)) return;
20
+
21
+ // Resolved descriptors may be cached and shared by another styled component.
22
+ const args: unknown[] = [...(resolved as unknown[])];
23
+ try {
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;
41
+
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
+ return;
51
+ const sum = leftWeight + rightWeight;
52
+ if (sum === 0) return;
53
+ const alphaMultiplier = Math.min(sum, 1);
54
+
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
+ });
68
+ }
69
+ result.alpha = (result.alpha ?? 1) * alphaMultiplier;
70
+ return `rgba(${(result.coords[0] ?? 0) * 255}, ${(result.coords[1] ?? 0) * 255}, ${(result.coords[2] ?? 0) * 255}, ${result.alpha})`;
71
+ } catch {
72
+ return;
73
+ }
74
+ };
@@ -62,22 +62,22 @@ export const saturate: StyleFunctionResolver = (resolveValue, value) => {
62
62
  export const opacity: StyleFunctionResolver = (resolveValue, value) => {
63
63
  const args = resolveValue(value[2]);
64
64
  return {
65
- hueRotate: (Array.isArray(args) ? args[0] : args) as unknown,
65
+ opacity: (Array.isArray(args) ? args[0] : args) as unknown,
66
66
  };
67
67
  };
68
68
 
69
- const color = ["color", "string"] as const;
69
+ const color = ["color", "color"] as const;
70
70
  const offsetX = ["offsetX", "number"] as const;
71
71
  const offsetY = ["offsetY", "number"] as const;
72
- const blurRadius = ["blurRadius", "number"] as const;
72
+ const standardDeviation = ["standardDeviation", "number"] as const;
73
73
 
74
74
  const handler = shorthandHandler(
75
75
  [
76
- [offsetX, offsetY, blurRadius, color],
76
+ [offsetX, offsetY, standardDeviation, color],
77
77
  [color, offsetX, offsetY],
78
- [color, offsetX, offsetY, blurRadius],
78
+ [color, offsetX, offsetY, standardDeviation],
79
79
  [offsetX, offsetY, color],
80
- [offsetX, offsetY, blurRadius, color],
80
+ [offsetX, offsetY, standardDeviation, color],
81
81
  ],
82
82
  [],
83
83
  "object",
@@ -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
+ };
@@ -5,3 +5,4 @@ export * from "./numeric-functions";
5
5
  export * from "./platform-functions";
6
6
  export * from "./string-functions";
7
7
  export * from "./transform-functions";
8
+ export * from "./color-mix";
@@ -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
  };