@tamagui/core 1.0.0-alpha.2 → 1.0.0-alpha.20

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 (474) hide show
  1. package/dist/cjs/constants/constants.js +50 -0
  2. package/{_ → dist/cjs}/constants/constants.js.map +2 -2
  3. package/dist/cjs/constants/platform.js +43 -0
  4. package/dist/cjs/constants/platform.js.map +7 -0
  5. package/dist/cjs/constants/pseudos.js +25 -0
  6. package/dist/{constants → cjs/constants}/pseudos.js.map +2 -2
  7. package/dist/cjs/constants/rnw.js +28 -0
  8. package/{_ → dist/cjs}/constants/rnw.js.map +2 -2
  9. package/dist/cjs/createComponent.js +532 -0
  10. package/dist/cjs/createComponent.js.map +7 -0
  11. package/dist/cjs/createFont.js +50 -0
  12. package/dist/cjs/createFont.js.map +7 -0
  13. package/dist/cjs/createShorthands.js +16 -0
  14. package/{_ → dist/cjs}/createShorthands.js.map +2 -2
  15. package/dist/cjs/createTamagui.js +208 -0
  16. package/dist/cjs/createTamagui.js.map +7 -0
  17. package/dist/cjs/createTheme.js +44 -0
  18. package/dist/cjs/createTheme.js.map +7 -0
  19. package/dist/cjs/createTokens.js +55 -0
  20. package/dist/cjs/createTokens.js.map +7 -0
  21. package/dist/cjs/createVariable.js +47 -0
  22. package/dist/cjs/createVariable.js.map +7 -0
  23. package/dist/cjs/helpers/addStylesUsingClassname.js +79 -0
  24. package/dist/cjs/helpers/addStylesUsingClassname.js.map +7 -0
  25. package/dist/cjs/helpers/createMediaStyle.js +56 -0
  26. package/dist/{helpers → cjs/helpers}/createMediaStyle.js.map +2 -2
  27. package/dist/cjs/helpers/createPropMapper.js +197 -0
  28. package/dist/cjs/helpers/createPropMapper.js.map +7 -0
  29. package/dist/cjs/helpers/createTamaguiProvider.js +74 -0
  30. package/dist/cjs/helpers/createTamaguiProvider.js.map +7 -0
  31. package/dist/cjs/helpers/extendStaticConfig.js +82 -0
  32. package/dist/cjs/helpers/extendStaticConfig.js.map +7 -0
  33. package/dist/cjs/helpers/fixNativeShadow.js +14 -0
  34. package/dist/cjs/helpers/fixNativeShadow.js.map +7 -0
  35. package/dist/cjs/helpers/fixNativeShadow.native.js +36 -0
  36. package/{_ → dist/cjs}/helpers/fixNativeShadow.native.js.map +2 -2
  37. package/dist/cjs/helpers/getSplitStyles.js +180 -0
  38. package/dist/cjs/helpers/getSplitStyles.js.map +7 -0
  39. package/dist/cjs/helpers/getStylesAtomic.js +117 -0
  40. package/{_ → dist/cjs}/helpers/getStylesAtomic.js.map +2 -2
  41. package/dist/cjs/helpers/getStylesAtomic.native.js +16 -0
  42. package/dist/cjs/helpers/getStylesAtomic.native.js.map +7 -0
  43. package/dist/cjs/helpers/insertStyleRule.js +46 -0
  44. package/dist/{helpers → cjs/helpers}/insertStyleRule.js.map +2 -2
  45. package/dist/cjs/helpers/isObj.js +13 -0
  46. package/dist/cjs/helpers/isObj.js.map +7 -0
  47. package/dist/cjs/helpers/isTamaguiElement.js +33 -0
  48. package/dist/cjs/helpers/isTamaguiElement.js.map +7 -0
  49. package/dist/cjs/helpers/matchMedia.js +24 -0
  50. package/dist/cjs/helpers/matchMedia.js.map +7 -0
  51. package/dist/cjs/helpers/matchMedia.native.js +31 -0
  52. package/dist/cjs/helpers/matchMedia.native.js.map +7 -0
  53. package/dist/cjs/helpers/themeable.js +78 -0
  54. package/{_ → dist/cjs}/helpers/themeable.js.map +2 -2
  55. package/dist/cjs/helpers/validate.js +82 -0
  56. package/dist/cjs/helpers/validate.js.map +7 -0
  57. package/dist/cjs/hooks/useConstant.js +37 -0
  58. package/dist/{hooks → cjs/hooks}/useConstant.js.map +2 -2
  59. package/dist/cjs/hooks/useFeatures.js +100 -0
  60. package/dist/cjs/hooks/useFeatures.js.map +7 -0
  61. package/dist/cjs/hooks/useMedia.js +207 -0
  62. package/dist/cjs/hooks/useMedia.js.map +7 -0
  63. package/dist/cjs/hooks/usePressable.js +50 -0
  64. package/{_ → dist/cjs}/hooks/usePressable.js.map +2 -2
  65. package/dist/cjs/hooks/useTheme.js +112 -0
  66. package/dist/cjs/hooks/useTheme.js.map +7 -0
  67. package/dist/cjs/index.js +55 -0
  68. package/dist/cjs/index.js.map +7 -0
  69. package/dist/cjs/static/postProcessStyles.js +40 -0
  70. package/dist/{static → cjs/static}/postProcessStyles.js.map +2 -2
  71. package/dist/cjs/static.js +34 -0
  72. package/dist/cjs/static.js.map +7 -0
  73. package/dist/cjs/styled.js +72 -0
  74. package/dist/cjs/styled.js.map +7 -0
  75. package/dist/cjs/types.js +4 -0
  76. package/dist/cjs/types.js.map +7 -0
  77. package/dist/cjs/views/Animated.js +129 -0
  78. package/dist/{views → cjs/views}/Animated.js.map +2 -2
  79. package/dist/cjs/views/Stack.js +51 -0
  80. package/dist/{views → cjs/views}/Stack.js.map +2 -2
  81. package/dist/cjs/views/Text.js +93 -0
  82. package/dist/cjs/views/Text.js.map +7 -0
  83. package/dist/cjs/views/TextAncestorContext.js +40 -0
  84. package/dist/cjs/views/TextAncestorContext.js.map +7 -0
  85. package/dist/cjs/views/Theme.js +91 -0
  86. package/dist/cjs/views/Theme.js.map +7 -0
  87. package/dist/cjs/views/ThemeContext.js +29 -0
  88. package/dist/{views → cjs/views}/ThemeContext.js.map +2 -2
  89. package/dist/cjs/views/ThemeInverse.js +48 -0
  90. package/dist/{views → cjs/views}/ThemeInverse.js.map +3 -3
  91. package/dist/cjs/views/ThemeManagerContext.js +84 -0
  92. package/dist/cjs/views/ThemeManagerContext.js.map +7 -0
  93. package/dist/cjs/views/ThemeProvider.js +67 -0
  94. package/dist/{views → cjs/views}/ThemeProvider.js.map +2 -2
  95. package/{_ → dist/esm}/constants/constants.js +0 -0
  96. package/dist/{constants → esm/constants}/constants.js.map +1 -1
  97. package/dist/{constants → esm/constants}/platform.js +0 -0
  98. package/dist/{constants → esm/constants}/platform.js.map +1 -1
  99. package/{_ → dist/esm}/constants/pseudos.js +0 -0
  100. package/{_ → dist/esm}/constants/pseudos.js.map +1 -1
  101. package/{_ → dist/esm}/constants/rnw.js +0 -0
  102. package/dist/{constants → esm/constants}/rnw.js.map +1 -1
  103. package/dist/{createComponent.js → esm/createComponent.js} +51 -32
  104. package/dist/esm/createComponent.js.map +7 -0
  105. package/dist/{createFont.js → esm/createFont.js} +4 -0
  106. package/dist/esm/createFont.js.map +7 -0
  107. package/{_ → dist/esm}/createShorthands.js +0 -0
  108. package/dist/{createShorthands.js.map → esm/createShorthands.js.map} +1 -1
  109. package/dist/{createTamagui.js → esm/createTamagui.js} +13 -2
  110. package/dist/esm/createTamagui.js.map +7 -0
  111. package/dist/{createTheme.js → esm/createTheme.js} +2 -0
  112. package/dist/esm/createTheme.js.map +7 -0
  113. package/dist/{createTokens.js → esm/createTokens.js} +4 -0
  114. package/dist/esm/createTokens.js.map +7 -0
  115. package/dist/{createVariable.js → esm/createVariable.js} +3 -0
  116. package/dist/{createVariable.js.map → esm/createVariable.js.map} +3 -3
  117. package/dist/{helpers → esm/helpers}/addStylesUsingClassname.js +0 -0
  118. package/dist/{helpers → esm/helpers}/addStylesUsingClassname.js.map +1 -1
  119. package/{_ → dist/esm}/helpers/createMediaStyle.js +0 -0
  120. package/{_ → dist/esm}/helpers/createMediaStyle.js.map +1 -1
  121. package/dist/{helpers → esm/helpers}/createPropMapper.js +16 -9
  122. package/dist/esm/helpers/createPropMapper.js.map +7 -0
  123. package/dist/{helpers → esm/helpers}/createTamaguiProvider.js +0 -0
  124. package/dist/{helpers → esm/helpers}/createTamaguiProvider.js.map +1 -1
  125. package/dist/{helpers → esm/helpers}/extendStaticConfig.js +0 -0
  126. package/dist/{helpers → esm/helpers}/extendStaticConfig.js.map +1 -1
  127. package/{_ → dist/esm}/helpers/fixNativeShadow.js +0 -0
  128. package/dist/{helpers → esm/helpers}/fixNativeShadow.js.map +1 -1
  129. package/{_ → dist/esm}/helpers/fixNativeShadow.native.js +0 -0
  130. package/dist/{helpers → esm/helpers}/fixNativeShadow.native.js.map +1 -1
  131. package/dist/{helpers → esm/helpers}/getSplitStyles.js +13 -23
  132. package/dist/esm/helpers/getSplitStyles.js.map +7 -0
  133. package/dist/{helpers → esm/helpers}/getStylesAtomic.js +0 -0
  134. package/dist/{helpers → esm/helpers}/getStylesAtomic.js.map +1 -1
  135. package/{_ → dist/esm}/helpers/getStylesAtomic.native.js +0 -0
  136. package/{_ → dist/esm}/helpers/getStylesAtomic.native.js.map +1 -1
  137. package/{_ → dist/esm}/helpers/insertStyleRule.js +0 -0
  138. package/{_ → dist/esm}/helpers/insertStyleRule.js.map +1 -1
  139. package/dist/{helpers → esm/helpers}/isObj.js +0 -0
  140. package/dist/{helpers → esm/helpers}/isObj.js.map +1 -1
  141. package/dist/esm/helpers/isTamaguiElement.js +10 -0
  142. package/dist/esm/helpers/isTamaguiElement.js.map +7 -0
  143. package/{_ → dist/esm}/helpers/matchMedia.js +3 -0
  144. package/dist/esm/helpers/matchMedia.js.map +7 -0
  145. package/dist/{helpers → esm/helpers}/matchMedia.native.js +1 -0
  146. package/{_ → dist/esm}/helpers/matchMedia.native.js.map +3 -3
  147. package/dist/{helpers → esm/helpers}/themeable.js +0 -0
  148. package/dist/{helpers → esm/helpers}/themeable.js.map +1 -1
  149. package/dist/esm/helpers/validate.js +60 -0
  150. package/dist/esm/helpers/validate.js.map +7 -0
  151. package/{_ → dist/esm}/hooks/useConstant.js +0 -0
  152. package/{_ → dist/esm}/hooks/useConstant.js.map +1 -1
  153. package/{_ → dist/esm}/hooks/useFeatures.js +39 -51
  154. package/dist/esm/hooks/useFeatures.js.map +7 -0
  155. package/dist/{hooks → esm/hooks}/useMedia.js +6 -4
  156. package/dist/esm/hooks/useMedia.js.map +7 -0
  157. package/dist/{hooks → esm/hooks}/usePressable.js +0 -0
  158. package/dist/{hooks → esm/hooks}/usePressable.js.map +1 -1
  159. package/dist/{hooks → esm/hooks}/useTheme.js +7 -10
  160. package/dist/esm/hooks/useTheme.js.map +7 -0
  161. package/dist/{index.js → esm/index.js} +1 -2
  162. package/dist/{index.js.map → esm/index.js.map} +3 -3
  163. package/{_ → dist/esm}/static/postProcessStyles.js +0 -0
  164. package/{_ → dist/esm}/static/postProcessStyles.js.map +1 -1
  165. package/dist/{static.js → esm/static.js} +0 -0
  166. package/dist/{static.js.map → esm/static.js.map} +1 -1
  167. package/dist/{styled.js → esm/styled.js} +0 -0
  168. package/dist/{styled.js.map → esm/styled.js.map} +1 -1
  169. package/{_ → dist/esm}/types.js +0 -0
  170. package/{_ → dist/esm}/types.js.map +0 -0
  171. package/{_ → dist/esm}/views/Animated.js +0 -0
  172. package/{_ → dist/esm}/views/Animated.js.map +1 -1
  173. package/{_ → dist/esm}/views/Stack.js +0 -0
  174. package/{_ → dist/esm}/views/Stack.js.map +1 -1
  175. package/dist/{views → esm/views}/Text.js +1 -1
  176. package/dist/esm/views/Text.js.map +7 -0
  177. package/{_ → dist/esm}/views/TextAncestorContext.js +7 -9
  178. package/dist/esm/views/TextAncestorContext.js.map +7 -0
  179. package/dist/{views → esm/views}/Theme.js +25 -13
  180. package/dist/esm/views/Theme.js.map +7 -0
  181. package/{_ → dist/esm}/views/ThemeContext.js +0 -0
  182. package/{_ → dist/esm}/views/ThemeContext.js.map +1 -1
  183. package/{_ → dist/esm}/views/ThemeInverse.js +0 -1
  184. package/{_ → dist/esm}/views/ThemeInverse.js.map +3 -3
  185. package/dist/{views → esm/views}/ThemeManagerContext.js +11 -5
  186. package/dist/esm/views/ThemeManagerContext.js.map +7 -0
  187. package/{_ → dist/esm}/views/ThemeProvider.js +0 -0
  188. package/{_ → dist/esm}/views/ThemeProvider.js.map +1 -1
  189. package/dist/{constants → jsx/constants}/constants.js +0 -1
  190. package/{_ → dist/jsx}/constants/platform.js +1 -3
  191. package/dist/{constants → jsx/constants}/pseudos.js +0 -1
  192. package/dist/{constants → jsx/constants}/rnw.js +0 -1
  193. package/{_ → dist/jsx}/createComponent.js +114 -83
  194. package/dist/jsx/createFont.js +27 -0
  195. package/dist/{createShorthands.js → jsx/createShorthands.js} +0 -1
  196. package/{_ → dist/jsx}/createTamagui.js +63 -16
  197. package/{_ → dist/jsx}/createTheme.js +2 -1
  198. package/{_ → dist/jsx}/createTokens.js +4 -1
  199. package/{_ → dist/jsx}/createVariable.js +3 -1
  200. package/dist/jsx/helpers/addStylesUsingClassname.js +56 -0
  201. package/dist/{helpers → jsx/helpers}/createMediaStyle.js +0 -1
  202. package/dist/jsx/helpers/createPropMapper.js +159 -0
  203. package/dist/jsx/helpers/createTamaguiProvider.js +19 -0
  204. package/dist/jsx/helpers/extendStaticConfig.js +58 -0
  205. package/dist/{helpers → jsx/helpers}/fixNativeShadow.js +0 -1
  206. package/dist/{helpers → jsx/helpers}/fixNativeShadow.native.js +0 -1
  207. package/{_ → dist/jsx}/helpers/getSplitStyles.js +18 -29
  208. package/{_ → dist/jsx}/helpers/getStylesAtomic.js +1 -3
  209. package/dist/{helpers → jsx/helpers}/getStylesAtomic.native.js +0 -1
  210. package/dist/{helpers → jsx/helpers}/insertStyleRule.js +0 -1
  211. package/dist/jsx/helpers/isObj.js +6 -0
  212. package/dist/jsx/helpers/isTamaguiElement.js +9 -0
  213. package/dist/{helpers → jsx/helpers}/matchMedia.js +3 -1
  214. package/{_ → dist/jsx}/helpers/matchMedia.native.js +1 -1
  215. package/{_ → dist/jsx}/helpers/themeable.js +3 -6
  216. package/dist/jsx/helpers/validate.js +59 -0
  217. package/dist/{hooks → jsx/hooks}/useConstant.js +0 -1
  218. package/dist/jsx/hooks/useFeatures.js +57 -0
  219. package/{_ → dist/jsx}/hooks/useMedia.js +8 -9
  220. package/{_ → dist/jsx}/hooks/usePressable.js +1 -3
  221. package/{_ → dist/jsx}/hooks/useTheme.js +8 -13
  222. package/{_ → dist/jsx}/index.js +3 -2
  223. package/dist/{static → jsx/static}/postProcessStyles.js +0 -1
  224. package/{_ → dist/jsx}/static.js +3 -1
  225. package/{_ → dist/jsx}/styled.js +2 -3
  226. package/dist/jsx/types.js +0 -0
  227. package/dist/{views → jsx/views}/Animated.js +2 -7
  228. package/dist/{views → jsx/views}/Stack.js +0 -1
  229. package/{_ → dist/jsx}/views/Text.js +1 -2
  230. package/dist/{views → jsx/views}/TextAncestorContext.js +5 -9
  231. package/dist/jsx/views/Theme.js +62 -0
  232. package/dist/{views → jsx/views}/ThemeContext.js +0 -1
  233. package/dist/{views → jsx/views}/ThemeInverse.js +1 -6
  234. package/{_ → dist/jsx}/views/ThemeManagerContext.js +12 -8
  235. package/dist/{views → jsx/views}/ThemeProvider.js +2 -8
  236. package/package.json +18 -10
  237. package/src/createComponent.tsx +59 -42
  238. package/src/createFont.ts +5 -0
  239. package/src/createTamagui.ts +12 -1
  240. package/src/createTheme.ts +4 -1
  241. package/src/createTokens.ts +6 -1
  242. package/src/createVariable.ts +4 -0
  243. package/src/helpers/createPropMapper.ts +16 -8
  244. package/src/helpers/getSplitStyles.tsx +16 -26
  245. package/src/helpers/isTamaguiElement.tsx +5 -0
  246. package/src/helpers/matchMedia.native.ts +3 -0
  247. package/src/helpers/matchMedia.ts +9 -1
  248. package/src/helpers/validate.ts +59 -0
  249. package/src/hooks/useFeatures.tsx +54 -53
  250. package/src/hooks/useMedia.tsx +6 -4
  251. package/src/hooks/useTheme.tsx +9 -9
  252. package/src/index.ts +1 -2
  253. package/src/types.tsx +9 -8
  254. package/src/views/Text.tsx +2 -1
  255. package/src/views/TextAncestorContext.tsx +5 -6
  256. package/src/views/Theme.tsx +42 -21
  257. package/src/views/ThemeInverse.tsx +0 -1
  258. package/src/views/ThemeManagerContext.tsx +18 -6
  259. package/{dist/packages/core/src → types}/constants/constants.d.ts +0 -0
  260. package/types/constants/constants.d.ts.map +1 -0
  261. package/{dist/packages/core/src → types}/constants/platform.d.ts +0 -0
  262. package/types/constants/platform.d.ts.map +1 -0
  263. package/{dist/packages/core/src → types}/constants/pseudos.d.ts +0 -0
  264. package/types/constants/pseudos.d.ts.map +1 -0
  265. package/{dist/packages/core/src → types}/constants/rnw.d.ts +0 -0
  266. package/types/constants/rnw.d.ts.map +1 -0
  267. package/{dist/packages/core/src → types}/createComponent.d.ts +3 -2
  268. package/types/createComponent.d.ts.map +1 -0
  269. package/types/createFont.d.ts +3 -0
  270. package/types/createFont.d.ts.map +1 -0
  271. package/{dist/packages/core/src → types}/createShorthands.d.ts +0 -0
  272. package/types/createShorthands.d.ts.map +1 -0
  273. package/{dist/packages/core/src → types}/createTamagui.d.ts +18 -1
  274. package/types/createTamagui.d.ts.map +1 -0
  275. package/{dist/packages/core/src → types}/createTheme.d.ts +1 -1
  276. package/types/createTheme.d.ts.map +1 -0
  277. package/{dist/packages/core/src → types}/createTokens.d.ts +24 -14
  278. package/types/createTokens.d.ts.map +1 -0
  279. package/{dist/packages/core/src → types}/createVariable.d.ts +1 -0
  280. package/types/createVariable.d.ts.map +1 -0
  281. package/types/helpers/addStylesUsingClassname.d.ts +3 -0
  282. package/types/helpers/addStylesUsingClassname.d.ts.map +1 -0
  283. package/{dist/packages/core/src → types}/helpers/createMediaStyle.d.ts +0 -1
  284. package/types/helpers/createMediaStyle.d.ts.map +1 -0
  285. package/types/helpers/createPropMapper.d.ts +3 -0
  286. package/types/helpers/createPropMapper.d.ts.map +1 -0
  287. package/{dist/packages/core/src → types}/helpers/createTamaguiProvider.d.ts +0 -0
  288. package/types/helpers/createTamaguiProvider.d.ts.map +1 -0
  289. package/{dist/packages/core/src → types}/helpers/extendStaticConfig.d.ts +1 -1
  290. package/types/helpers/extendStaticConfig.d.ts.map +1 -0
  291. package/{dist/packages/core/src → types}/helpers/fixNativeShadow.d.ts +0 -0
  292. package/types/helpers/fixNativeShadow.d.ts.map +1 -0
  293. package/{dist/packages/core/src → types}/helpers/fixNativeShadow.native.d.ts +0 -0
  294. package/types/helpers/fixNativeShadow.native.d.ts.map +1 -0
  295. package/{dist/packages/core/src → types}/helpers/getSplitStyles.d.ts +0 -0
  296. package/types/helpers/getSplitStyles.d.ts.map +1 -0
  297. package/{dist/packages/core/src → types}/helpers/getStylesAtomic.d.ts +0 -1
  298. package/types/helpers/getStylesAtomic.d.ts.map +1 -0
  299. package/{dist/packages/core/src → types}/helpers/getStylesAtomic.native.d.ts +0 -0
  300. package/types/helpers/getStylesAtomic.native.d.ts.map +1 -0
  301. package/{dist/packages/core/src → types}/helpers/insertStyleRule.d.ts +0 -0
  302. package/types/helpers/insertStyleRule.d.ts.map +1 -0
  303. package/types/helpers/isObj.d.ts +2 -0
  304. package/types/helpers/isObj.d.ts.map +1 -0
  305. package/types/helpers/isTamaguiElement.d.ts +3 -0
  306. package/types/helpers/isTamaguiElement.d.ts.map +1 -0
  307. package/{dist/packages/core/src → types}/helpers/matchMedia.d.ts +0 -0
  308. package/types/helpers/matchMedia.d.ts.map +1 -0
  309. package/{dist/packages/core/src → types}/helpers/matchMedia.native.d.ts +0 -0
  310. package/types/helpers/matchMedia.native.d.ts.map +1 -0
  311. package/{dist/packages/core/src → types}/helpers/themeable.d.ts +0 -0
  312. package/types/helpers/themeable.d.ts.map +1 -0
  313. package/types/helpers/validate.d.ts +4 -0
  314. package/types/helpers/validate.d.ts.map +1 -0
  315. package/{dist/packages/core/src → types}/hooks/useConstant.d.ts +0 -0
  316. package/types/hooks/useConstant.d.ts.map +1 -0
  317. package/{dist/packages/core/src → types}/hooks/useFeatures.d.ts +0 -0
  318. package/types/hooks/useFeatures.d.ts.map +1 -0
  319. package/{dist/packages/core/src → types}/hooks/useMedia.d.ts +0 -0
  320. package/types/hooks/useMedia.d.ts.map +1 -0
  321. package/{dist/packages/core/src → types}/hooks/usePressable.d.ts +0 -0
  322. package/types/hooks/usePressable.d.ts.map +1 -0
  323. package/{dist/packages/core/src → types}/hooks/useTheme.d.ts +3 -1
  324. package/types/hooks/useTheme.d.ts.map +1 -0
  325. package/{dist/packages/core/src → types}/index.d.ts +3 -1
  326. package/types/index.d.ts.map +1 -0
  327. package/{dist/packages/core/src → types}/static/postProcessStyles.d.ts +0 -0
  328. package/types/static/postProcessStyles.d.ts.map +1 -0
  329. package/{dist/packages/core/src → types}/static.d.ts +3 -0
  330. package/types/static.d.ts.map +1 -0
  331. package/types/styled.d.ts +21 -0
  332. package/types/styled.d.ts.map +1 -0
  333. package/{dist/packages/core/src → types}/types.d.ts +71 -70
  334. package/types/types.d.ts.map +1 -0
  335. package/{dist/packages/core/src → types}/views/Animated.d.ts +0 -0
  336. package/types/views/Animated.d.ts.map +1 -0
  337. package/{dist/packages/core/src → types}/views/Stack.d.ts +0 -0
  338. package/types/views/Stack.d.ts.map +1 -0
  339. package/types/views/Text.d.ts +3 -0
  340. package/types/views/Text.d.ts.map +1 -0
  341. package/types/views/TextAncestorContext.d.ts +5 -0
  342. package/types/views/TextAncestorContext.d.ts.map +1 -0
  343. package/{dist/packages/core/src → types}/views/Theme.d.ts +1 -1
  344. package/types/views/Theme.d.ts.map +1 -0
  345. package/{dist/packages/core/src → types}/views/ThemeContext.d.ts +0 -0
  346. package/types/views/ThemeContext.d.ts.map +1 -0
  347. package/{dist/packages/core/src → types}/views/ThemeInverse.d.ts +0 -0
  348. package/types/views/ThemeInverse.d.ts.map +1 -0
  349. package/types/views/ThemeManagerContext.d.ts +22 -0
  350. package/types/views/ThemeManagerContext.d.ts.map +1 -0
  351. package/{dist/packages/core/src → types}/views/ThemeProvider.d.ts +0 -0
  352. package/types/views/ThemeProvider.d.ts.map +1 -0
  353. package/.ultra.cache.json +0 -1
  354. package/_/constants/platform.js.map +0 -7
  355. package/_/createComponent.js.map +0 -7
  356. package/_/createTamagui.js.map +0 -7
  357. package/_/createTheme.js.map +0 -7
  358. package/_/createTokens.js.map +0 -7
  359. package/_/createVariable.js.map +0 -7
  360. package/_/helpers/addStylesUsingClassname.js +0 -32
  361. package/_/helpers/addStylesUsingClassname.js.map +0 -7
  362. package/_/helpers/createTamaguiProvider.js +0 -42
  363. package/_/helpers/createTamaguiProvider.js.map +0 -7
  364. package/_/helpers/extendStaticConfig.js +0 -176
  365. package/_/helpers/extendStaticConfig.js.map +0 -7
  366. package/_/helpers/fixNativeShadow.js.map +0 -7
  367. package/_/helpers/getSplitStyles.js.map +0 -7
  368. package/_/helpers/matchMedia.js.map +0 -7
  369. package/_/hooks/useFeatures.js.map +0 -7
  370. package/_/hooks/useForceUpdate.js +0 -28
  371. package/_/hooks/useForceUpdate.js.map +0 -7
  372. package/_/hooks/useMedia.js.map +0 -7
  373. package/_/hooks/useTheme.js.map +0 -7
  374. package/_/index.js.map +0 -7
  375. package/_/static.js.map +0 -7
  376. package/_/styled.js.map +0 -7
  377. package/_/views/Text.js.map +0 -7
  378. package/_/views/TextAncestorContext.js.map +0 -7
  379. package/_/views/Theme.js +0 -57
  380. package/_/views/Theme.js.map +0 -7
  381. package/_/views/ThemeManagerContext.js.map +0 -7
  382. package/dist/constants/styleConstants.js +0 -46
  383. package/dist/constants/styleConstants.js.map +0 -7
  384. package/dist/createComponent.js.map +0 -7
  385. package/dist/createFont.js.map +0 -7
  386. package/dist/createTamagui.js.map +0 -7
  387. package/dist/createTheme.js.map +0 -7
  388. package/dist/createTokens.js.map +0 -7
  389. package/dist/helpers/createPropMapper.js.map +0 -7
  390. package/dist/helpers/getSplitStyles.js.map +0 -7
  391. package/dist/helpers/getStylesAtomic.native.js.map +0 -7
  392. package/dist/helpers/matchMedia.js.map +0 -7
  393. package/dist/helpers/matchMedia.native.js.map +0 -7
  394. package/dist/helpers/pseudos.js +0 -1
  395. package/dist/helpers/pseudos.js.map +0 -7
  396. package/dist/hooks/useFeatures.js +0 -75
  397. package/dist/hooks/useFeatures.js.map +0 -7
  398. package/dist/hooks/useForceUpdate.js +0 -28
  399. package/dist/hooks/useForceUpdate.js.map +0 -7
  400. package/dist/hooks/useMedia.js.map +0 -7
  401. package/dist/hooks/useTheme.js.map +0 -7
  402. package/dist/index.cjs +0 -2125
  403. package/dist/index.cjs.map +0 -7
  404. package/dist/packages/core/src/constants/constants.d.ts.map +0 -1
  405. package/dist/packages/core/src/constants/platform.d.ts.map +0 -1
  406. package/dist/packages/core/src/constants/pseudos.d.ts.map +0 -1
  407. package/dist/packages/core/src/constants/rnw.d.ts.map +0 -1
  408. package/dist/packages/core/src/createComponent.d.ts.map +0 -1
  409. package/dist/packages/core/src/createShorthands.d.ts.map +0 -1
  410. package/dist/packages/core/src/createTamagui.d.ts.map +0 -1
  411. package/dist/packages/core/src/createTheme.d.ts.map +0 -1
  412. package/dist/packages/core/src/createTokens.d.ts.map +0 -1
  413. package/dist/packages/core/src/createVariable.d.ts.map +0 -1
  414. package/dist/packages/core/src/helpers/addStylesUsingClassname.d.ts +0 -2
  415. package/dist/packages/core/src/helpers/addStylesUsingClassname.d.ts.map +0 -1
  416. package/dist/packages/core/src/helpers/createMediaStyle.d.ts.map +0 -1
  417. package/dist/packages/core/src/helpers/createTamaguiProvider.d.ts.map +0 -1
  418. package/dist/packages/core/src/helpers/extendStaticConfig.d.ts.map +0 -1
  419. package/dist/packages/core/src/helpers/fixNativeShadow.d.ts.map +0 -1
  420. package/dist/packages/core/src/helpers/fixNativeShadow.native.d.ts.map +0 -1
  421. package/dist/packages/core/src/helpers/getSplitStyles.d.ts.map +0 -1
  422. package/dist/packages/core/src/helpers/getStylesAtomic.d.ts.map +0 -1
  423. package/dist/packages/core/src/helpers/getStylesAtomic.native.d.ts.map +0 -1
  424. package/dist/packages/core/src/helpers/insertStyleRule.d.ts.map +0 -1
  425. package/dist/packages/core/src/helpers/matchMedia.d.ts.map +0 -1
  426. package/dist/packages/core/src/helpers/matchMedia.native.d.ts.map +0 -1
  427. package/dist/packages/core/src/helpers/themeable.d.ts.map +0 -1
  428. package/dist/packages/core/src/hooks/useConstant.d.ts.map +0 -1
  429. package/dist/packages/core/src/hooks/useFeatures.d.ts.map +0 -1
  430. package/dist/packages/core/src/hooks/useForceUpdate.d.ts +0 -2
  431. package/dist/packages/core/src/hooks/useForceUpdate.d.ts.map +0 -1
  432. package/dist/packages/core/src/hooks/useMedia.d.ts.map +0 -1
  433. package/dist/packages/core/src/hooks/usePressable.d.ts.map +0 -1
  434. package/dist/packages/core/src/hooks/useTheme.d.ts.map +0 -1
  435. package/dist/packages/core/src/index.d.ts.map +0 -1
  436. package/dist/packages/core/src/static/postProcessStyles.d.ts.map +0 -1
  437. package/dist/packages/core/src/static.d.ts.map +0 -1
  438. package/dist/packages/core/src/styled.d.ts +0 -16
  439. package/dist/packages/core/src/styled.d.ts.map +0 -1
  440. package/dist/packages/core/src/types.d.ts.map +0 -1
  441. package/dist/packages/core/src/views/Animated.d.ts.map +0 -1
  442. package/dist/packages/core/src/views/Stack.d.ts.map +0 -1
  443. package/dist/packages/core/src/views/Text.d.ts +0 -3
  444. package/dist/packages/core/src/views/Text.d.ts.map +0 -1
  445. package/dist/packages/core/src/views/TextAncestorContext.d.ts +0 -3
  446. package/dist/packages/core/src/views/TextAncestorContext.d.ts.map +0 -1
  447. package/dist/packages/core/src/views/Theme.d.ts.map +0 -1
  448. package/dist/packages/core/src/views/ThemeContext.d.ts.map +0 -1
  449. package/dist/packages/core/src/views/ThemeInverse.d.ts.map +0 -1
  450. package/dist/packages/core/src/views/ThemeManagerContext.d.ts +0 -15
  451. package/dist/packages/core/src/views/ThemeManagerContext.d.ts.map +0 -1
  452. package/dist/packages/core/src/views/ThemeProvider.d.ts.map +0 -1
  453. package/dist/packages/helpers/src/AllRules.d.ts +0 -3
  454. package/dist/packages/helpers/src/AllRules.d.ts.map +0 -1
  455. package/dist/packages/helpers/src/concatClassName.d.ts +0 -2
  456. package/dist/packages/helpers/src/concatClassName.d.ts.map +0 -1
  457. package/dist/packages/helpers/src/index.d.ts +0 -5
  458. package/dist/packages/helpers/src/index.d.ts.map +0 -1
  459. package/dist/packages/helpers/src/types.d.ts +0 -8
  460. package/dist/packages/helpers/src/types.d.ts.map +0 -1
  461. package/dist/packages/helpers/src/validStyleProps.d.ts +0 -475
  462. package/dist/packages/helpers/src/validStyleProps.d.ts.map +0 -1
  463. package/dist/types.js +0 -1
  464. package/dist/types.js.map +0 -7
  465. package/dist/views/SafeAreaProvider.js +0 -30
  466. package/dist/views/SafeAreaProvider.js.map +0 -7
  467. package/dist/views/Text.js.map +0 -7
  468. package/dist/views/TextAncestorContext.js.map +0 -7
  469. package/dist/views/Theme.js.map +0 -7
  470. package/dist/views/ThemeManagerContext.js.map +0 -7
  471. package/src/hooks/useForceUpdate.tsx +0 -26
  472. package/src/views/SafeAreaProvider.tsx +0 -33
  473. package/tsconfig.json +0 -8
  474. package/types.d.ts +0 -558
@@ -1,4 +1,5 @@
1
1
  import { concatClassName, stylePropsView } from '@tamagui/helpers'
2
+ import { useForceUpdate } from '@tamagui/use-force-update'
2
3
  import React, {
3
4
  Children,
4
5
  Fragment,
@@ -20,7 +21,6 @@ import { addStylesUsingClassname, useStylesAsClassname } from './helpers/addStyl
20
21
  import { extendStaticConfig, parseStaticConfig } from './helpers/extendStaticConfig'
21
22
  import { getSplitStyles } from './helpers/getSplitStyles'
22
23
  import { useFeatures } from './hooks/useFeatures'
23
- import { useForceUpdate } from './hooks/useForceUpdate'
24
24
  import { usePressable } from './hooks/usePressable'
25
25
  import {
26
26
  SpaceTokens,
@@ -68,6 +68,46 @@ export function createComponent<A extends Object = DefaultProps>(
68
68
  // see onConfiguredOnce below which attaches a name then to this component
69
69
 
70
70
  const component = forwardRef<View, A>((props: any, forwardedRef) => {
71
+ const forceUpdate = useForceUpdate()
72
+ const features = useFeatures(props, { forceUpdate })
73
+ const manager = useContext(ThemeManagerContext)
74
+ const [state, set_] = useState(() => ({
75
+ hover: false,
76
+ press: false,
77
+ pressIn: false,
78
+ theme: manager.name,
79
+ }))
80
+ const set = (next: Partial<typeof state>) =>
81
+ set_((prev) => {
82
+ for (const key in next) {
83
+ if (prev[key] !== next[key]) {
84
+ return { ...prev, ...next }
85
+ }
86
+ }
87
+ return prev
88
+ })
89
+
90
+ // from react-native-web
91
+ if (process.env.NODE_ENV === 'development' && !isText && isWeb) {
92
+ Children.toArray(props.children).forEach((item) => {
93
+ if (typeof item === 'string') {
94
+ console.error(`Unexpected text node: ${item}. A text node cannot be a child of a <View>.`)
95
+ }
96
+ })
97
+ }
98
+
99
+ const hasTextAncestor = isWeb ? useContext(TextAncestorContext) : false
100
+ const hostRef = useRef(null)
101
+
102
+ const theme = (manager.theme as any) || initialTheme
103
+
104
+ const {
105
+ viewProps: viewPropsIn,
106
+ pseudos,
107
+ style,
108
+ classNames,
109
+ } = getSplitStyles(props, staticConfig, theme)
110
+
71
111
  const {
72
112
  tag,
73
113
  hitSlop,
@@ -101,40 +141,19 @@ export function createComponent<A extends Object = DefaultProps>(
101
141
  onStartShouldSetResponderCapture,
102
142
  onMouseDown,
103
143
  onClick,
104
- // TODO feature load layou hook
105
- onLayout,
106
- } = props
107
144
 
108
- const forceUpdate = useForceUpdate()
109
- const features = useFeatures(props, { forceUpdate })
110
- const manager = useContext(ThemeManagerContext)
111
- const [state, set_] = useState(() => ({
112
- hover: false,
113
- press: false,
114
- pressIn: false,
115
- theme: manager.name,
116
- }))
117
- const set = (next: Partial<typeof state>) =>
118
- set_((prev) => {
119
- for (const key in next) {
120
- if (prev[key] !== next[key]) {
121
- return { ...prev, ...next }
122
- }
123
- }
124
- return prev
125
- })
145
+ accessible,
146
+ accessibilityRole,
126
147
 
127
- // from react-native-web
128
- if (process.env.NODE_ENV === 'development' && !isText && isWeb) {
129
- Children.toArray(props.children).forEach((item) => {
130
- if (typeof item === 'string') {
131
- console.error(`Unexpected text node: ${item}. A text node cannot be a child of a <View>.`)
132
- }
133
- })
134
- }
148
+ // TODO feature load layout hook
149
+ onLayout,
150
+ ...viewProps
151
+ } = viewPropsIn
135
152
 
136
- const hasTextAncestor = isWeb ? useContext(TextAncestorContext) : false
137
- const hostRef = useRef(null)
153
+ if (!isWeb) {
154
+ if (accessible) viewProps.accessible = accessible
155
+ if (accessibilityRole) viewProps.accessibilityRole = accessibilityRole
156
+ }
138
157
 
139
158
  if (isWeb) {
140
159
  // from react-native-web
@@ -160,12 +179,6 @@ export function createComponent<A extends Object = DefaultProps>(
160
179
 
161
180
  const isTracking = useRef(false)
162
181
 
163
- const { viewProps, pseudos, style, classNames } = getSplitStyles(
164
- props,
165
- staticConfig,
166
- (manager.theme as any) || initialTheme
167
- )
168
-
169
182
  // hasEverHadEvents prevents repareting if you remove onPress or similar...
170
183
  const internal = useRef<{ isMounted: boolean; hasEverHadEvents?: boolean }>()
171
184
  if (!internal.current) {
@@ -228,7 +241,7 @@ export function createComponent<A extends Object = DefaultProps>(
228
241
  ]
229
242
  : [defaultsClassName, props.className, classNames, stylesClassNames]
230
243
 
231
- // @ts-expect-error
244
+ // @ts-ignore we are optimizing using arguments
232
245
  const className = concatClassName(...classList)
233
246
  if (process.env.NODE_ENV === 'development') {
234
247
  if (props['debug']) {
@@ -466,7 +479,7 @@ export function createComponent<A extends Object = DefaultProps>(
466
479
  } else {
467
480
  if (!hasWarnedOnce) {
468
481
  hasWarnedOnce = true
469
- console.log('⚠️ we need to account for default styles for media queries')
482
+ console.log('⚠️ TODO account for default styles for media queries')
470
483
  }
471
484
  }
472
485
  // @ts-ignore
@@ -489,10 +502,14 @@ export function createComponent<A extends Object = DefaultProps>(
489
502
  const res = component as any as StaticComponent<A, void>
490
503
 
491
504
  // add extractable HoC
492
- res['extractable'] = (Component: any) => {
505
+ res['extractable'] = (Component: any, conf?: StaticConfig) => {
493
506
  Component['staticConfig'] = extendStaticConfig(res, {
507
+ ...conf,
494
508
  neverFlatten: true,
495
- defaultProps: Component.defaultProps,
509
+ defaultProps: {
510
+ ...Component.defaultProps,
511
+ ...conf?.defaultProps,
512
+ },
496
513
  })
497
514
  return Component
498
515
  }
package/src/createFont.ts CHANGED
@@ -1,6 +1,11 @@
1
+ import { validateFont } from './helpers/validate'
1
2
  import { GenericFont } from './types'
2
3
 
3
4
  export const createFont = <A extends GenericFont>(font: A): A => {
5
+ if (process.env.NODE_ENV === 'development') {
6
+ validateFont(font)
7
+ }
8
+
4
9
  // fills in any missing values based on size keys being standard
5
10
  const sizeKeys = Object.keys(font.size)
6
11
 
@@ -2,6 +2,7 @@ import { getStyleRules } from '@tamagui/helpers'
2
2
 
3
3
  import { Variable, createVariable, isVariable } from './createVariable'
4
4
  import { createTamaguiProvider } from './helpers/createTamaguiProvider'
5
+ import { validateConfig } from './helpers/validate'
5
6
  import { configureMedia } from './hooks/useMedia'
6
7
  import {
7
8
  CreateTamaguiConfig,
@@ -27,7 +28,10 @@ export type CreateTamaguiProps = TamaguiProviderProps &
27
28
  let conf: TamaguiInternalConfig | null
28
29
 
29
30
  export const getHasConfigured = () => !!conf
30
- export const getTamaguiConfig = () => conf!
31
+
32
+ export const getTamagui = () => conf!
33
+ export const getTokens = () => conf!.tokensParsed
34
+ export const getThemes = () => conf!.themes
31
35
 
32
36
  type ConfigListener = (conf: TamaguiInternalConfig) => void
33
37
  const configListeners = new Set<ConfigListener>()
@@ -46,6 +50,12 @@ export function createTamagui<Conf extends CreateTamaguiProps>(
46
50
  ): Conf extends CreateTamaguiConfig<infer A, infer B, infer C, infer D>
47
51
  ? TamaguiInternalConfig<A, B, C, D>
48
52
  : unknown {
53
+ if (process.env.NODE_ENV === 'development') {
54
+ // config is re-run by the @tamagui/static, dont double validate
55
+ if (!config['parsed']) {
56
+ validateConfig(config)
57
+ }
58
+ }
49
59
  // test env loads a few times as it runs diff tests
50
60
  if (conf) {
51
61
  console.warn('Called createTamagui twice! Should never do so')
@@ -157,6 +167,7 @@ export function createTamagui<Conf extends CreateTamaguiProps>(
157
167
  themeConfig,
158
168
  themeParsed,
159
169
  tokensParsed,
170
+ parsed: true,
160
171
  getCSS() {
161
172
  return `${themeConfig.css}\n${[...getStyleRules()].join('\n')}`
162
173
  },
@@ -3,7 +3,8 @@ import { Variable, createVariable } from './createVariable'
3
3
  export const createTheme = <Theme extends { [key: string]: string | Variable }>(
4
4
  theme: Theme
5
5
  ): {
6
- [key in keyof Theme]: Variable
6
+ // allow string | Variable
7
+ [key in keyof Theme]: Variable | string
7
8
  } => {
8
9
  const res = {} as any
9
10
  for (const key in theme) {
@@ -13,6 +14,8 @@ export const createTheme = <Theme extends { [key: string]: string | Variable }>(
13
14
  name: key,
14
15
  val,
15
16
  })
17
+ } else {
18
+ res[key] = val
16
19
  }
17
20
  }
18
21
  return res
@@ -1,9 +1,14 @@
1
1
  import { Variable, createVariable } from './createVariable'
2
+ import { validateTokens } from './helpers/validate'
2
3
  import { CreateTokens } from './types'
3
4
 
4
- // tokens.color.dark.red ===>{ var: `color-dark-red`, val: '' }
5
+ // tokens.color.dark.red ===> { var: `color-dark-red`, val: '' }
5
6
 
6
7
  export function createTokens<T extends CreateTokens>(tokens: T): MakeTokens<T> {
8
+ if (process.env.NODE_ENV === 'development') {
9
+ validateTokens(tokens)
10
+ }
11
+
7
12
  return setupTokens(tokens) as any
8
13
  }
9
14
 
@@ -11,6 +11,10 @@ export class Variable {
11
11
  this.name = name
12
12
  this.variable = isWeb ? `var(--${name})` : this.val
13
13
  }
14
+
15
+ toString() {
16
+ return `${isWeb ? this.variable : this.val}`
17
+ }
14
18
  }
15
19
 
16
20
  type VariableIn = { val: string | number; name: string }
@@ -1,4 +1,5 @@
1
- import { getTamaguiConfig } from '../createTamagui'
1
+ import { isWeb } from '../constants/platform'
2
+ import { getTamagui } from '../createTamagui'
2
3
  import { Variable } from '../createVariable'
3
4
  import { StaticConfig, TamaguiInternalConfig } from '../types'
4
5
  import { isObj } from './isObj'
@@ -9,7 +10,7 @@ export const createPropMapper = (c: StaticConfig) => {
9
10
  const defaultProps = c.defaultProps || {}
10
11
 
11
12
  return (key: string, value: any, theme: any, props: any) => {
12
- const conf = getTamaguiConfig()
13
+ const conf = getTamagui()
13
14
  if (!conf) {
14
15
  console.trace('no conf! err')
15
16
  return
@@ -37,7 +38,7 @@ export const createPropMapper = (c: StaticConfig) => {
37
38
  : val
38
39
 
39
40
  if (isObj(res)) {
40
- resolveTokens(res, conf, fontFamily)
41
+ resolveTokens(res, conf, theme, fontFamily)
41
42
  }
42
43
 
43
44
  return res
@@ -53,7 +54,7 @@ export const createPropMapper = (c: StaticConfig) => {
53
54
 
54
55
  if (value && value[0] === '$') {
55
56
  shouldReturn = true
56
- value = getToken(key, value, conf, fontFamily)
57
+ value = getToken(key, value, conf, theme, fontFamily)
57
58
  }
58
59
 
59
60
  if (value instanceof Variable) {
@@ -69,19 +70,19 @@ export const createPropMapper = (c: StaticConfig) => {
69
70
  }
70
71
  }
71
72
 
72
- const resolveTokens = (res: any, conf: TamaguiInternalConfig, fontFamily: any) => {
73
+ const resolveTokens = (res: any, conf: TamaguiInternalConfig, theme: any, fontFamily: any) => {
73
74
  for (const rKey in res) {
74
75
  const fKey = conf.shorthands[rKey] || rKey
75
76
  const val = res[rKey]
76
77
  if (val instanceof Variable) {
77
78
  res[fKey] = val.variable
78
79
  } else if (typeof val === 'string') {
79
- const fVal = val[0] === '$' ? getToken(fKey, val, conf, fontFamily) : val
80
+ const fVal = val[0] === '$' ? getToken(fKey, val, conf, theme, fontFamily) : val
80
81
  res[fKey] = fVal
81
82
  } else {
82
83
  if (isObj(val)) {
83
84
  // for things like shadowOffset which is a sub-object
84
- resolveTokens(val, conf, fontFamily)
85
+ resolveTokens(val, conf, theme, fontFamily)
85
86
  }
86
87
  // nullish values cant be tokens so need no exrta parsing
87
88
  }
@@ -92,10 +93,17 @@ const getToken = (
92
93
  key: string,
93
94
  value: string,
94
95
  { tokensParsed, themeParsed }: TamaguiInternalConfig,
96
+ theme: any,
95
97
  fontFamily: string | undefined = '$body'
96
98
  ) => {
97
99
  if (themeParsed[value]) {
98
- return themeParsed[value].variable
100
+ if (isWeb && themeParsed[value].variable) {
101
+ return themeParsed[value].variable
102
+ } else {
103
+ if (value && value[0] === '$') {
104
+ return theme[`${value.slice(1)}`]?.val || themeParsed[value]?.val
105
+ }
106
+ }
99
107
  }
100
108
  let valOrVar: any
101
109
  if (key === 'fontFamily') {
@@ -8,7 +8,7 @@ import {
8
8
  import { ViewStyle } from 'react-native'
9
9
 
10
10
  import { isWeb } from '../constants/platform'
11
- import { mediaQueryConfig } from '../hooks/useMedia'
11
+ import { mediaQueryConfig, mediaState } from '../hooks/useMedia'
12
12
  import { StaticConfigParsed, ThemeObject } from '../types'
13
13
  import { createMediaStyle } from './createMediaStyle'
14
14
  import { fixNativeShadow } from './fixNativeShadow'
@@ -28,7 +28,6 @@ export const getSplitStyles = (
28
28
  const validStyleProps = staticConfig.isText ? stylePropsText : validStyles
29
29
  const viewProps: Record<string, any> = {}
30
30
  const style: any[] = []
31
- const blacklistProps = isSplittingDefaultProps ? blacklistDefaultProps : blacklistFinalProps
32
31
 
33
32
  let pseudos: { hoverStyle?: ViewStyle; pressStyle?: ViewStyle } | null = null
34
33
  let cur: ViewStyle | null = null
@@ -54,14 +53,15 @@ export const getSplitStyles = (
54
53
  const mediaProps = { ...props, ...valInit }
55
54
  // TODO media + hover
56
55
  const mediaStyle = getSubStyle(valInit, staticConfig, theme, props)
57
- const mediaStyles = getStylesAtomic(mediaStyle)
58
- if (process.env.NODE_ENV === 'development') {
59
- if (props['debug']) {
60
- console.log('mediaStyles', keyInit, { mediaProps, mediaStyle, mediaStyles })
56
+
57
+ if (isWeb) {
58
+ const mediaStyles = getStylesAtomic(mediaStyle)
59
+ if (process.env.NODE_ENV === 'development') {
60
+ if (props['debug']) {
61
+ console.log('mediaStyles', keyInit, { mediaProps, mediaStyle, mediaStyles })
62
+ }
61
63
  }
62
- }
63
- for (const style of mediaStyles) {
64
- if (isWeb) {
64
+ for (const style of mediaStyles) {
65
65
  const out = createMediaStyle(style, mediaKey, mediaQueryConfig)
66
66
  classNames = classNames || []
67
67
  classNames.push(out.identifier)
@@ -70,8 +70,10 @@ export const getSplitStyles = (
70
70
  if (process.env.NODE_ENV === 'development' && props['debug']) {
71
71
  console.log('mediaProp', style.identifier, out, mediaProps, mediaStyle, mediaStyles)
72
72
  }
73
- } else {
74
- console.log('TODO native media style logic')
73
+ }
74
+ } else {
75
+ if (mediaState[mediaKey]) {
76
+ style.push(mediaStyle)
75
77
  }
76
78
  }
77
79
  continue
@@ -130,8 +132,9 @@ export const getSplitStyles = (
130
132
  cur[key] = val
131
133
  continue
132
134
  }
133
- // TODO this blacklist should be configurable + better set up
134
- if (!blacklistProps[key]) {
135
+
136
+ // pass to view props
137
+ if (!staticConfig.variants || !(key in staticConfig.variants)) {
135
138
  viewProps[key] = val
136
139
  }
137
140
  }
@@ -181,19 +184,6 @@ const getSubStyle = (
181
184
  return styleOut
182
185
  }
183
186
 
184
- const blacklistDefaultProps = {
185
- ...validStyles,
186
- ...stylePropsText,
187
- }
188
-
189
- const blacklistFinalProps = {
190
- ...blacklistDefaultProps,
191
- tag: true,
192
- debug: true,
193
- space: true,
194
- hitSlop: true,
195
- }
196
-
197
187
  const mapTransformKeys = {
198
188
  x: 'translateX',
199
189
  y: 'translateY',
@@ -0,0 +1,5 @@
1
+ import React, { isValidElement } from 'react'
2
+
3
+ export const isTamaguiElement = (child: any): child is React.ReactElement => {
4
+ return isValidElement(child) && !!child.type['staticConfig']?.parsed
5
+ }
@@ -1,3 +1,6 @@
1
1
  import MediaQueryList from '@expo/match-media/build/MediaQueryList.js'
2
2
 
3
3
  export const matchMedia = (media: string) => new MediaQueryList(media)
4
+
5
+ // @ts-ignore
6
+ globalThis['matchMedia'] = matchMedia
@@ -2,7 +2,15 @@ export const matchMedia =
2
2
  (typeof window !== 'undefined' && window.matchMedia) ||
3
3
  (function matchMediaFallback(query: string) {
4
4
  return {
5
- addListener() {},
5
+ addListener() {
6
+ if (
7
+ process.env.NODE_ENV === 'development' &&
8
+ !process.env.IS_STATIC &&
9
+ process.env.TAMAGUI_TARGET !== 'web'
10
+ ) {
11
+ console.log('warning: matchMedia not loading! Is native picking up .native.js files?')
12
+ }
13
+ },
6
14
  removeListener() {},
7
15
  matches: false,
8
16
  }
@@ -0,0 +1,59 @@
1
+ // published a patched version that works on native
2
+ import ow from '@tamagui/ow'
3
+
4
+ export const validateConfig = (conf: any) => {
5
+ if (!conf) {
6
+ console.warn('no conf?')
7
+ return
8
+ }
9
+ try {
10
+ ow(conf, validConfig)
11
+ } catch (err: any) {
12
+ console.log('Given config:\n', JSON.stringify(conf, null, 2))
13
+ throw err
14
+ }
15
+ }
16
+
17
+ const validConfig = ow.object.exactShape({
18
+ defaultTheme: ow.optional.string,
19
+ disableRootThemeClass: ow.optional.boolean,
20
+ shorthands: ow.optional.object.valuesOfType(ow.string),
21
+ themes: ow.object.valuesOfType(ow.object),
22
+ tokens: ow.object.valuesOfType(ow.object),
23
+ media: ow.object.valuesOfType(ow.object),
24
+ })
25
+
26
+ const validFont = ow.object.exactShape({
27
+ family: ow.string,
28
+ size: ow.object.nonEmpty.valuesOfType(ow.number),
29
+ lineHeight: ow.object.nonEmpty.valuesOfType(ow.number),
30
+ weight: ow.object.nonEmpty.valuesOfType(ow.string),
31
+ letterSpacing: ow.object.nonEmpty.valuesOfType(ow.number),
32
+ })
33
+
34
+ const validTokens = ow.object.exactShape({
35
+ font: ow.object.valuesOfType(validFont),
36
+ size: ow.object.nonEmpty.valuesOfType(ow.number),
37
+ space: ow.object.nonEmpty.valuesOfType(ow.number),
38
+ zIndex: ow.object.nonEmpty.valuesOfType(ow.number),
39
+ radius: ow.object.nonEmpty.valuesOfType(ow.number),
40
+ color: ow.object.nonEmpty.valuesOfType(ow.string),
41
+ })
42
+
43
+ export const validateTokens = (tokens: any) => {
44
+ try {
45
+ ow(tokens, validTokens)
46
+ } catch (err: any) {
47
+ console.log('Given tokens:\n', JSON.stringify(tokens, null, 2))
48
+ throw err
49
+ }
50
+ }
51
+
52
+ export const validateFont = (font: any) => {
53
+ try {
54
+ ow(font, validFont)
55
+ } catch (err: any) {
56
+ console.log('Given font:\n', JSON.stringify(font, null, 2))
57
+ throw err
58
+ }
59
+ }
@@ -1,51 +1,66 @@
1
1
  import React from 'react'
2
2
 
3
3
  import { isWeb, useIsomorphicLayoutEffect } from '../constants/platform'
4
- import { addMediaQueryListener, removeMediaQueryListener } from './useMedia'
4
+ import { addMediaQueryListener, mediaState, removeMediaQueryListener } from './useMedia'
5
5
 
6
- // only needed on native
7
- // dynamic loading of features to avoid heavy views
6
+ type FeatureDefinition = {
7
+ isEnabled: (props: any) => boolean
8
+ Component: any
9
+ }
8
10
 
9
- const createDefinition = ({ Component, propNames }: { Component; propNames: string[] }) => ({
11
+ const createDefinition = ({
12
+ Component,
13
+ propNames,
14
+ }: {
15
+ Component: any
16
+ propNames: string[]
17
+ }): FeatureDefinition => ({
10
18
  isEnabled: (props: any) => propNames.some((name) => !!props[name]),
11
19
  Component,
12
20
  })
13
21
 
14
- const mediaQueryPropNames = [
15
- '$xs',
16
- '$sm',
17
- '$md',
18
- '$lg',
19
- '$xl',
20
- '$xxl',
21
- '$pointerCoarse',
22
- '$hoverNone',
23
- '$tall',
24
- '$short',
25
- '$gtSm',
26
- '$notXs',
27
- '$gtMd',
28
- '$gtLg',
29
- ]
22
+ let featureDefinitions: Record<string, FeatureDefinition> | null = null
30
23
 
31
- const featureDefinitions = {
32
- measureLayout: createDefinition({
33
- Component: (props) => {
34
- console.log('measure', props)
35
- return null
36
- },
37
- propNames: ['onLayout'],
38
- }),
24
+ export const useFeatures = (props: any, utils?: { forceUpdate?: Function }) => {
25
+ if (!featureDefinitions) {
26
+ featureDefinitions = loadFeatures()
27
+ }
28
+ const features: JSX.Element[] = []
29
+ for (const name in featureDefinitions) {
30
+ const { isEnabled, Component } = featureDefinitions[name]
31
+ if (isEnabled(props) && Component) {
32
+ features.push(<Component key={name} {...props} _utils={utils} />)
33
+ }
34
+ }
35
+ return features
36
+ }
39
37
 
40
- // will update the parent whenever media query changes
41
- mediaQuery: createDefinition({
42
- Component: (props) => {
43
- if (isWeb) {
44
- // no need for media queries are inserted and run in css
45
- return
46
- }
38
+ function loadFeatures(): Record<string, FeatureDefinition> {
39
+ return {
40
+ // TODO
41
+ // measureLayout: createDefinition({
42
+ // Component: (props) => {
43
+ // console.log('measure', props)
44
+ // return null
45
+ // },
46
+ // propNames: ['onLayout'],
47
+ // }),
48
+
49
+ // will update the parent whenever media query changes
50
+ // no need on web, media queries are inserted and run in css
51
+ ...(!isWeb && {
52
+ mediaQuery: loadMediaQueryFeature(),
53
+ }),
54
+ }
55
+ }
56
+
57
+ function loadMediaQueryFeature() {
58
+ const mediaPropNames = Object.keys(mediaState)
59
+
60
+ return createDefinition({
61
+ Component: (props: any) => {
62
+ const keys = mediaPropNames.flatMap((x) => (x in props ? x.slice(1) : []))
47
63
 
48
- const keys = mediaQueryPropNames.flatMap((x) => (x in props ? x.slice(1) : []))
49
64
  useIsomorphicLayoutEffect(() => {
50
65
  for (const key of keys) {
51
66
  addMediaQueryListener(key, props._utils.forceUpdate)
@@ -56,23 +71,9 @@ const featureDefinitions = {
56
71
  }
57
72
  }
58
73
  }, [keys.join(',')])
74
+
59
75
  return null
60
76
  },
61
- propNames: mediaQueryPropNames,
62
- }),
63
- }
64
-
65
- const featureNames = Object.keys(featureDefinitions)
66
- const numFeatures = featureNames.length
67
-
68
- export const useFeatures = (props: any, utils?: { forceUpdate?: Function }) => {
69
- const features: JSX.Element[] = []
70
- for (let i = 0; i < numFeatures; i++) {
71
- const name = featureNames[i]
72
- const { isEnabled, Component } = featureDefinitions[name] as any //FeatureDefinition
73
- if (isEnabled(props) && Component) {
74
- features.push(<Component key={name} {...props} _utils={utils} />)
75
- }
76
- }
77
- return features
77
+ propNames: mediaPropNames,
78
+ })
78
79
  }
@@ -1,3 +1,4 @@
1
+ import { useForceUpdate } from '@tamagui/use-force-update'
1
2
  import { useRef } from 'react'
2
3
 
3
4
  import { useIsomorphicLayoutEffect } from '../constants/platform'
@@ -9,7 +10,6 @@ import {
9
10
  MediaQueryState,
10
11
  } from '../types'
11
12
  import { useConstant } from './useConstant'
12
- import { useForceUpdate } from './useForceUpdate'
13
13
 
14
14
  export const mediaState: { [key in keyof MediaQueryState]: boolean } = {} as any
15
15
  const mediaQueryListeners: { [key: string]: Set<Function> } = {}
@@ -20,7 +20,7 @@ export const addMediaQueryListener = (key: string, cb: any) => {
20
20
  }
21
21
 
22
22
  export const removeMediaQueryListener = (key: string, cb: any) => {
23
- mediaQueryListeners[key].delete(cb)
23
+ mediaQueryListeners[key]?.delete(cb)
24
24
  }
25
25
 
26
26
  let conf: MediaQueries | null = null
@@ -28,13 +28,15 @@ let conf: MediaQueries | null = null
28
28
  export const mediaQueryConfig = new Proxy<MediaQueries>({} as any, {
29
29
  get(target, key) {
30
30
  if (!conf) {
31
- throw new Error(`Be sure to run configureMedia before accessing mediaQueryConfig`)
31
+ console.warn('Warning: accessing media query before init')
32
+ return null
32
33
  }
33
34
  return Reflect.get(conf, key)
34
35
  },
35
36
  ownKeys() {
36
37
  if (!conf) {
37
- throw new Error(`Be sure to run configureMedia before accessing mediaQueryConfig`)
38
+ console.warn('Warning: accessing media query before init')
39
+ return []
38
40
  }
39
41
  return Object.keys(conf)
40
42
  },