@tamagui/core 1.0.0-alpha.0 → 1.0.0-alpha.12

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 (426) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/constants/constants.js +50 -0
  3. package/dist/cjs/constants/constants.js.map +7 -0
  4. package/dist/cjs/constants/platform.js +43 -0
  5. package/dist/cjs/constants/platform.js.map +7 -0
  6. package/dist/cjs/constants/pseudos.js +25 -0
  7. package/dist/cjs/constants/pseudos.js.map +7 -0
  8. package/dist/cjs/constants/rnw.js +28 -0
  9. package/dist/cjs/constants/rnw.js.map +7 -0
  10. package/dist/cjs/createComponent.js +532 -0
  11. package/dist/cjs/createComponent.js.map +7 -0
  12. package/dist/cjs/createFont.js +50 -0
  13. package/dist/cjs/createFont.js.map +7 -0
  14. package/dist/cjs/createShorthands.js +16 -0
  15. package/dist/cjs/createShorthands.js.map +7 -0
  16. package/dist/cjs/createTamagui.js +206 -0
  17. package/dist/cjs/createTamagui.js.map +7 -0
  18. package/dist/cjs/createTheme.js +42 -0
  19. package/dist/cjs/createTheme.js.map +7 -0
  20. package/dist/cjs/createTokens.js +55 -0
  21. package/dist/cjs/createTokens.js.map +7 -0
  22. package/dist/cjs/createVariable.js +47 -0
  23. package/dist/cjs/createVariable.js.map +7 -0
  24. package/dist/cjs/helpers/addStylesUsingClassname.js +79 -0
  25. package/dist/cjs/helpers/addStylesUsingClassname.js.map +7 -0
  26. package/dist/cjs/helpers/createMediaStyle.js +56 -0
  27. package/dist/cjs/helpers/createMediaStyle.js.map +7 -0
  28. package/dist/cjs/helpers/createPropMapper.js +197 -0
  29. package/dist/cjs/helpers/createPropMapper.js.map +7 -0
  30. package/dist/cjs/helpers/createTamaguiProvider.js +74 -0
  31. package/dist/cjs/helpers/createTamaguiProvider.js.map +7 -0
  32. package/dist/cjs/helpers/extendStaticConfig.js +82 -0
  33. package/dist/cjs/helpers/extendStaticConfig.js.map +7 -0
  34. package/dist/cjs/helpers/fixNativeShadow.js +14 -0
  35. package/dist/cjs/helpers/fixNativeShadow.js.map +7 -0
  36. package/dist/cjs/helpers/fixNativeShadow.native.js +36 -0
  37. package/dist/cjs/helpers/fixNativeShadow.native.js.map +7 -0
  38. package/dist/cjs/helpers/getSplitStyles.js +180 -0
  39. package/dist/cjs/helpers/getSplitStyles.js.map +7 -0
  40. package/dist/cjs/helpers/getStylesAtomic.js +117 -0
  41. package/dist/cjs/helpers/getStylesAtomic.js.map +7 -0
  42. package/dist/cjs/helpers/getStylesAtomic.native.js +16 -0
  43. package/dist/cjs/helpers/getStylesAtomic.native.js.map +7 -0
  44. package/dist/cjs/helpers/insertStyleRule.js +46 -0
  45. package/dist/cjs/helpers/insertStyleRule.js.map +7 -0
  46. package/dist/cjs/helpers/isObj.js +13 -0
  47. package/dist/cjs/helpers/isObj.js.map +7 -0
  48. package/dist/cjs/helpers/isTamaguiElement.js +33 -0
  49. package/dist/cjs/helpers/isTamaguiElement.js.map +7 -0
  50. package/dist/cjs/helpers/matchMedia.js +24 -0
  51. package/dist/cjs/helpers/matchMedia.js.map +7 -0
  52. package/dist/cjs/helpers/matchMedia.native.js +31 -0
  53. package/dist/cjs/helpers/matchMedia.native.js.map +7 -0
  54. package/dist/cjs/helpers/themeable.js +78 -0
  55. package/dist/cjs/helpers/themeable.js.map +7 -0
  56. package/dist/cjs/helpers/validate.js +82 -0
  57. package/dist/cjs/helpers/validate.js.map +7 -0
  58. package/dist/cjs/hooks/useConstant.js +37 -0
  59. package/dist/cjs/hooks/useConstant.js.map +7 -0
  60. package/dist/cjs/hooks/useFeatures.js +100 -0
  61. package/dist/cjs/hooks/useFeatures.js.map +7 -0
  62. package/dist/cjs/hooks/useMedia.js +206 -0
  63. package/dist/cjs/hooks/useMedia.js.map +7 -0
  64. package/dist/cjs/hooks/usePressable.js +50 -0
  65. package/dist/cjs/hooks/usePressable.js.map +7 -0
  66. package/dist/cjs/hooks/useTheme.js +111 -0
  67. package/dist/cjs/hooks/useTheme.js.map +7 -0
  68. package/dist/cjs/index.js +55 -0
  69. package/dist/cjs/index.js.map +7 -0
  70. package/dist/cjs/static/postProcessStyles.js +40 -0
  71. package/dist/cjs/static/postProcessStyles.js.map +7 -0
  72. package/dist/cjs/static.js +34 -0
  73. package/dist/cjs/static.js.map +7 -0
  74. package/dist/cjs/styled.js +72 -0
  75. package/dist/cjs/styled.js.map +7 -0
  76. package/dist/cjs/types.js +4 -0
  77. package/dist/cjs/types.js.map +7 -0
  78. package/dist/cjs/views/Animated.js +129 -0
  79. package/dist/cjs/views/Animated.js.map +7 -0
  80. package/dist/cjs/views/Stack.js +51 -0
  81. package/dist/cjs/views/Stack.js.map +7 -0
  82. package/dist/cjs/views/Text.js +93 -0
  83. package/dist/cjs/views/Text.js.map +7 -0
  84. package/dist/cjs/views/TextAncestorContext.js +41 -0
  85. package/dist/cjs/views/TextAncestorContext.js.map +7 -0
  86. package/dist/cjs/views/Theme.js +91 -0
  87. package/dist/cjs/views/Theme.js.map +7 -0
  88. package/dist/cjs/views/ThemeContext.js +29 -0
  89. package/dist/cjs/views/ThemeContext.js.map +7 -0
  90. package/dist/cjs/views/ThemeInverse.js +48 -0
  91. package/dist/cjs/views/ThemeInverse.js.map +7 -0
  92. package/dist/cjs/views/ThemeManagerContext.js +84 -0
  93. package/dist/cjs/views/ThemeManagerContext.js.map +7 -0
  94. package/dist/cjs/views/ThemeProvider.js +67 -0
  95. package/dist/cjs/views/ThemeProvider.js.map +7 -0
  96. package/dist/constants/platform.js +1 -1
  97. package/dist/constants/platform.js.map +2 -2
  98. package/dist/createComponent.js +51 -32
  99. package/dist/createComponent.js.map +2 -2
  100. package/dist/createFont.js +4 -0
  101. package/dist/createFont.js.map +2 -2
  102. package/dist/createTamagui.js +11 -2
  103. package/dist/createTamagui.js.map +2 -2
  104. package/dist/createTokens.js +4 -0
  105. package/dist/createTokens.js.map +2 -2
  106. package/dist/createVariable.js +3 -0
  107. package/dist/createVariable.js.map +2 -2
  108. package/{_ → dist/esm}/constants/constants.js +0 -0
  109. package/{_ → dist/esm}/constants/constants.js.map +1 -1
  110. package/{_ → dist/esm}/constants/platform.js +1 -2
  111. package/dist/esm/constants/platform.js.map +7 -0
  112. package/{_ → dist/esm}/constants/pseudos.js +0 -0
  113. package/{_ → dist/esm}/constants/pseudos.js.map +1 -1
  114. package/{_ → dist/esm}/constants/rnw.js +0 -0
  115. package/{_ → dist/esm}/constants/rnw.js.map +1 -1
  116. package/{_ → dist/esm}/createComponent.js +115 -78
  117. package/dist/esm/createComponent.js.map +7 -0
  118. package/dist/esm/createFont.js +28 -0
  119. package/dist/esm/createFont.js.map +7 -0
  120. package/{_ → dist/esm}/createShorthands.js +0 -0
  121. package/{_ → dist/esm}/createShorthands.js.map +1 -1
  122. package/{_ → dist/esm}/createTamagui.js +61 -15
  123. package/dist/esm/createTamagui.js.map +7 -0
  124. package/{_ → dist/esm}/createTheme.js +0 -0
  125. package/{_ → dist/esm}/createTheme.js.map +1 -1
  126. package/{_ → dist/esm}/createTokens.js +4 -0
  127. package/dist/esm/createTokens.js.map +7 -0
  128. package/{_ → dist/esm}/createVariable.js +3 -0
  129. package/{_ → dist/esm}/createVariable.js.map +3 -3
  130. package/dist/esm/helpers/addStylesUsingClassname.js +57 -0
  131. package/dist/esm/helpers/addStylesUsingClassname.js.map +7 -0
  132. package/{_ → dist/esm}/helpers/createMediaStyle.js +0 -0
  133. package/{_ → dist/esm}/helpers/createMediaStyle.js.map +1 -1
  134. package/dist/esm/helpers/createPropMapper.js +160 -0
  135. package/dist/esm/helpers/createPropMapper.js.map +7 -0
  136. package/{_ → dist/esm}/helpers/createTamaguiProvider.js +2 -19
  137. package/dist/esm/helpers/createTamaguiProvider.js.map +7 -0
  138. package/dist/esm/helpers/extendStaticConfig.js +59 -0
  139. package/dist/esm/helpers/extendStaticConfig.js.map +7 -0
  140. package/{_ → dist/esm}/helpers/fixNativeShadow.js +0 -0
  141. package/{_ → dist/esm}/helpers/fixNativeShadow.js.map +1 -1
  142. package/{_ → dist/esm}/helpers/fixNativeShadow.native.js +0 -0
  143. package/{_ → dist/esm}/helpers/fixNativeShadow.native.js.map +1 -1
  144. package/{_ → dist/esm}/helpers/getSplitStyles.js +18 -28
  145. package/dist/esm/helpers/getSplitStyles.js.map +7 -0
  146. package/{_ → dist/esm}/helpers/getStylesAtomic.js +1 -2
  147. package/{_ → dist/esm}/helpers/getStylesAtomic.js.map +2 -2
  148. package/{_ → dist/esm}/helpers/getStylesAtomic.native.js +0 -0
  149. package/{_ → dist/esm}/helpers/getStylesAtomic.native.js.map +1 -1
  150. package/{_ → dist/esm}/helpers/insertStyleRule.js +0 -0
  151. package/{_ → dist/esm}/helpers/insertStyleRule.js.map +1 -1
  152. package/dist/esm/helpers/isObj.js +7 -0
  153. package/dist/esm/helpers/isObj.js.map +7 -0
  154. package/dist/esm/helpers/isTamaguiElement.js +10 -0
  155. package/dist/esm/helpers/isTamaguiElement.js.map +7 -0
  156. package/{_ → dist/esm}/helpers/matchMedia.js +3 -0
  157. package/dist/esm/helpers/matchMedia.js.map +7 -0
  158. package/{_ → dist/esm}/helpers/matchMedia.native.js +1 -0
  159. package/{_ → dist/esm}/helpers/matchMedia.native.js.map +3 -3
  160. package/{_ → dist/esm}/helpers/themeable.js +1 -1
  161. package/{_ → dist/esm}/helpers/themeable.js.map +2 -2
  162. package/dist/esm/helpers/validate.js +60 -0
  163. package/dist/esm/helpers/validate.js.map +7 -0
  164. package/{_ → dist/esm}/hooks/useConstant.js +0 -0
  165. package/{_ → dist/esm}/hooks/useConstant.js.map +1 -1
  166. package/{_ → dist/esm}/hooks/useFeatures.js +39 -51
  167. package/dist/esm/hooks/useFeatures.js.map +7 -0
  168. package/{_ → dist/esm}/hooks/useMedia.js +7 -7
  169. package/dist/esm/hooks/useMedia.js.map +7 -0
  170. package/{_ → dist/esm}/hooks/usePressable.js +1 -2
  171. package/{_ → dist/esm}/hooks/usePressable.js.map +2 -2
  172. package/{_ → dist/esm}/hooks/useTheme.js +6 -11
  173. package/dist/esm/hooks/useTheme.js.map +7 -0
  174. package/{_ → dist/esm}/index.js +3 -1
  175. package/dist/esm/index.js.map +7 -0
  176. package/{_ → dist/esm}/static/postProcessStyles.js +0 -0
  177. package/{_ → dist/esm}/static/postProcessStyles.js.map +1 -1
  178. package/{_ → dist/esm}/static.js +3 -0
  179. package/dist/esm/static.js.map +7 -0
  180. package/{_ → dist/esm}/styled.js +2 -2
  181. package/dist/esm/styled.js.map +7 -0
  182. package/{_ → dist/esm}/types.js +0 -0
  183. package/{_ → dist/esm}/types.js.map +0 -0
  184. package/{_ → dist/esm}/views/Animated.js +0 -0
  185. package/{_ → dist/esm}/views/Animated.js.map +1 -1
  186. package/{_ → dist/esm}/views/Stack.js +0 -0
  187. package/{_ → dist/esm}/views/Stack.js.map +1 -1
  188. package/{_ → dist/esm}/views/Text.js +0 -0
  189. package/{_ → dist/esm}/views/Text.js.map +1 -1
  190. package/{_ → dist/esm}/views/TextAncestorContext.js +1 -2
  191. package/{_ → dist/esm}/views/TextAncestorContext.js.map +2 -2
  192. package/{_ → dist/esm}/views/Theme.js +25 -14
  193. package/dist/esm/views/Theme.js.map +7 -0
  194. package/{_ → dist/esm}/views/ThemeContext.js +0 -0
  195. package/{_ → dist/esm}/views/ThemeContext.js.map +1 -1
  196. package/{_ → dist/esm}/views/ThemeInverse.js +0 -1
  197. package/{_ → dist/esm}/views/ThemeInverse.js.map +3 -3
  198. package/{_ → dist/esm}/views/ThemeManagerContext.js +12 -7
  199. package/dist/esm/views/ThemeManagerContext.js.map +7 -0
  200. package/{_ → dist/esm}/views/ThemeProvider.js +0 -0
  201. package/{_ → dist/esm}/views/ThemeProvider.js.map +1 -1
  202. package/dist/helpers/createPropMapper.js +16 -9
  203. package/dist/helpers/createPropMapper.js.map +2 -2
  204. package/dist/helpers/getSplitStyles.js +13 -23
  205. package/dist/helpers/getSplitStyles.js.map +2 -2
  206. package/dist/helpers/isComponent.js +10 -0
  207. package/dist/helpers/isComponent.js.map +7 -0
  208. package/dist/helpers/isTamaguiComponent.js +10 -0
  209. package/dist/helpers/isTamaguiComponent.js.map +7 -0
  210. package/dist/helpers/isTamaguiElement.js +10 -0
  211. package/dist/helpers/isTamaguiElement.js.map +7 -0
  212. package/dist/helpers/matchMedia.js +3 -0
  213. package/dist/helpers/matchMedia.js.map +2 -2
  214. package/dist/helpers/matchMedia.native.js +1 -0
  215. package/dist/helpers/matchMedia.native.js.map +2 -2
  216. package/dist/helpers/validate.js +60 -0
  217. package/dist/helpers/validate.js.map +7 -0
  218. package/dist/helpers/validateConfig.js +46 -0
  219. package/dist/helpers/validateConfig.js.map +7 -0
  220. package/dist/helpers/validateTokens.js +29 -0
  221. package/dist/helpers/validateTokens.js.map +7 -0
  222. package/dist/hooks/useFeatures.js +39 -51
  223. package/dist/hooks/useFeatures.js.map +2 -2
  224. package/dist/hooks/useMedia.js +5 -3
  225. package/dist/hooks/useMedia.js.map +2 -2
  226. package/dist/hooks/useTheme.js +5 -9
  227. package/dist/hooks/useTheme.js.map +2 -2
  228. package/dist/index.cjs +274 -197
  229. package/dist/index.cjs.map +3 -3
  230. package/dist/index.js +1 -2
  231. package/dist/index.js.map +2 -2
  232. package/dist/jsx/constants/constants.js +13 -0
  233. package/dist/jsx/constants/platform.js +18 -0
  234. package/dist/jsx/constants/pseudos.js +17 -0
  235. package/dist/jsx/constants/rnw.js +21 -0
  236. package/dist/jsx/createComponent.js +458 -0
  237. package/dist/jsx/createFont.js +27 -0
  238. package/dist/jsx/createShorthands.js +9 -0
  239. package/dist/jsx/createTamagui.js +167 -0
  240. package/dist/jsx/createTheme.js +19 -0
  241. package/dist/jsx/createTokens.js +32 -0
  242. package/dist/jsx/createVariable.js +24 -0
  243. package/dist/jsx/helpers/addStylesUsingClassname.js +56 -0
  244. package/dist/jsx/helpers/createMediaStyle.js +33 -0
  245. package/dist/jsx/helpers/createPropMapper.js +159 -0
  246. package/dist/jsx/helpers/createTamaguiProvider.js +19 -0
  247. package/dist/jsx/helpers/extendStaticConfig.js +58 -0
  248. package/dist/jsx/helpers/fixNativeShadow.js +7 -0
  249. package/dist/jsx/helpers/fixNativeShadow.native.js +29 -0
  250. package/dist/jsx/helpers/getSplitStyles.js +149 -0
  251. package/dist/jsx/helpers/getStylesAtomic.js +82 -0
  252. package/dist/jsx/helpers/getStylesAtomic.native.js +9 -0
  253. package/dist/jsx/helpers/insertStyleRule.js +23 -0
  254. package/dist/jsx/helpers/isObj.js +6 -0
  255. package/dist/jsx/helpers/isTamaguiElement.js +9 -0
  256. package/dist/jsx/helpers/matchMedia.js +17 -0
  257. package/dist/jsx/helpers/matchMedia.native.js +8 -0
  258. package/dist/jsx/helpers/themeable.js +23 -0
  259. package/dist/jsx/helpers/validate.js +59 -0
  260. package/dist/jsx/hooks/useConstant.js +14 -0
  261. package/dist/jsx/hooks/useFeatures.js +57 -0
  262. package/dist/jsx/hooks/useMedia.js +172 -0
  263. package/dist/jsx/hooks/usePressable.js +12 -0
  264. package/dist/jsx/hooks/useTheme.js +88 -0
  265. package/dist/jsx/index.js +31 -0
  266. package/dist/jsx/static/postProcessStyles.js +17 -0
  267. package/dist/jsx/static.js +14 -0
  268. package/dist/jsx/styled.js +20 -0
  269. package/dist/jsx/types.js +0 -0
  270. package/dist/jsx/views/Animated.js +74 -0
  271. package/dist/jsx/views/Stack.js +11 -0
  272. package/dist/jsx/views/Text.js +59 -0
  273. package/dist/jsx/views/TextAncestorContext.js +14 -0
  274. package/dist/jsx/views/Theme.js +62 -0
  275. package/dist/jsx/views/ThemeContext.js +5 -0
  276. package/dist/jsx/views/ThemeInverse.js +22 -0
  277. package/dist/jsx/views/ThemeManagerContext.js +60 -0
  278. package/dist/jsx/views/ThemeProvider.js +39 -0
  279. package/dist/views/Theme.js +25 -13
  280. package/dist/views/Theme.js.map +2 -2
  281. package/dist/views/ThemeInverse.js +0 -1
  282. package/dist/views/ThemeInverse.js.map +2 -2
  283. package/dist/views/ThemeManagerContext.js +11 -5
  284. package/dist/views/ThemeManagerContext.js.map +2 -2
  285. package/package.json +17 -9
  286. package/src/constants/platform.ts +1 -1
  287. package/src/createComponent.tsx +59 -41
  288. package/src/createFont.ts +5 -0
  289. package/src/createTamagui.ts +11 -1
  290. package/src/createTokens.ts +6 -1
  291. package/src/createVariable.ts +4 -0
  292. package/src/helpers/createPropMapper.ts +16 -8
  293. package/src/helpers/getSplitStyles.tsx +16 -26
  294. package/src/helpers/isTamaguiElement.tsx +5 -0
  295. package/src/helpers/matchMedia.native.ts +3 -0
  296. package/src/helpers/matchMedia.ts +9 -1
  297. package/src/helpers/validate.ts +59 -0
  298. package/src/hooks/useFeatures.tsx +54 -53
  299. package/src/hooks/useMedia.tsx +5 -3
  300. package/src/hooks/useTheme.tsx +7 -8
  301. package/src/index.ts +1 -2
  302. package/src/types.tsx +9 -8
  303. package/src/views/Text.tsx +2 -1
  304. package/src/views/Theme.tsx +42 -21
  305. package/src/views/ThemeInverse.tsx +0 -1
  306. package/src/views/ThemeManagerContext.tsx +18 -6
  307. package/types/constants/constants.d.ts +8 -0
  308. package/types/constants/constants.d.ts.map +1 -0
  309. package/types/constants/platform.d.ts +9 -0
  310. package/types/constants/platform.d.ts.map +1 -0
  311. package/types/constants/pseudos.d.ts +15 -0
  312. package/types/constants/pseudos.d.ts.map +1 -0
  313. package/types/constants/rnw.d.ts +2 -0
  314. package/types/constants/rnw.d.ts.map +1 -0
  315. package/types/createComponent.d.ts +17 -0
  316. package/types/createComponent.d.ts.map +1 -0
  317. package/types/createFont.d.ts +3 -0
  318. package/types/createFont.d.ts.map +1 -0
  319. package/types/createShorthands.d.ts +2 -0
  320. package/types/createShorthands.d.ts.map +1 -0
  321. package/types/createTamagui.d.ts +38 -0
  322. package/types/createTamagui.d.ts.map +1 -0
  323. package/types/createTheme.d.ts +5 -0
  324. package/types/createTheme.d.ts.map +1 -0
  325. package/types/createTokens.d.ts +55 -0
  326. package/types/createTokens.d.ts.map +1 -0
  327. package/types/createVariable.d.ts +15 -0
  328. package/types/createVariable.d.ts.map +1 -0
  329. package/types/helpers/addStylesUsingClassname.d.ts +3 -0
  330. package/types/helpers/addStylesUsingClassname.d.ts.map +1 -0
  331. package/types/helpers/createMediaStyle.d.ts +8 -0
  332. package/types/helpers/createMediaStyle.d.ts.map +1 -0
  333. package/types/helpers/createPropMapper.d.ts +3 -0
  334. package/types/helpers/createPropMapper.d.ts.map +1 -0
  335. package/types/helpers/createTamaguiProvider.d.ts +5 -0
  336. package/types/helpers/createTamaguiProvider.d.ts.map +1 -0
  337. package/types/helpers/extendStaticConfig.d.ts +5 -0
  338. package/types/helpers/extendStaticConfig.d.ts.map +1 -0
  339. package/types/helpers/fixNativeShadow.d.ts +2 -0
  340. package/types/helpers/fixNativeShadow.d.ts.map +1 -0
  341. package/types/helpers/fixNativeShadow.native.d.ts +2 -0
  342. package/types/helpers/fixNativeShadow.native.d.ts.map +1 -0
  343. package/types/helpers/getSplitStyles.d.ts +15 -0
  344. package/types/helpers/getSplitStyles.d.ts.map +1 -0
  345. package/types/helpers/getStylesAtomic.d.ts +3 -0
  346. package/types/helpers/getStylesAtomic.d.ts.map +1 -0
  347. package/types/helpers/getStylesAtomic.native.d.ts +2 -0
  348. package/types/helpers/getStylesAtomic.native.d.ts.map +1 -0
  349. package/types/helpers/insertStyleRule.d.ts +2 -0
  350. package/types/helpers/insertStyleRule.d.ts.map +1 -0
  351. package/types/helpers/isObj.d.ts +2 -0
  352. package/types/helpers/isObj.d.ts.map +1 -0
  353. package/types/helpers/isTamaguiElement.d.ts +3 -0
  354. package/types/helpers/isTamaguiElement.d.ts.map +1 -0
  355. package/types/helpers/matchMedia.d.ts +2 -0
  356. package/types/helpers/matchMedia.d.ts.map +1 -0
  357. package/types/helpers/matchMedia.native.d.ts +3 -0
  358. package/types/helpers/matchMedia.native.d.ts.map +1 -0
  359. package/types/helpers/themeable.d.ts +10 -0
  360. package/types/helpers/themeable.d.ts.map +1 -0
  361. package/types/helpers/validate.d.ts +4 -0
  362. package/types/helpers/validate.d.ts.map +1 -0
  363. package/types/hooks/useConstant.d.ts +2 -0
  364. package/types/hooks/useConstant.d.ts.map +1 -0
  365. package/types/hooks/useFeatures.d.ts +5 -0
  366. package/types/hooks/useFeatures.d.ts.map +1 -0
  367. package/types/hooks/useMedia.d.ts +16 -0
  368. package/types/hooks/useMedia.d.ts.map +1 -0
  369. package/types/hooks/usePressable.d.ts +3 -0
  370. package/types/hooks/usePressable.d.ts.map +1 -0
  371. package/types/hooks/useTheme.d.ts +20 -0
  372. package/types/hooks/useTheme.d.ts.map +1 -0
  373. package/types/index.d.ts +29 -0
  374. package/types/index.d.ts.map +1 -0
  375. package/types/static/postProcessStyles.d.ts +7 -0
  376. package/types/static/postProcessStyles.d.ts.map +1 -0
  377. package/types/static.d.ts +15 -0
  378. package/types/static.d.ts.map +1 -0
  379. package/types/styled.d.ts +21 -0
  380. package/types/styled.d.ts.map +1 -0
  381. package/types/types.d.ts +306 -0
  382. package/types/types.d.ts.map +1 -0
  383. package/types/views/Animated.d.ts +15 -0
  384. package/types/views/Animated.d.ts.map +1 -0
  385. package/types/views/Stack.d.ts +3 -0
  386. package/types/views/Stack.d.ts.map +1 -0
  387. package/types/views/Text.d.ts +3 -0
  388. package/types/views/Text.d.ts.map +1 -0
  389. package/types/views/TextAncestorContext.d.ts +3 -0
  390. package/types/views/TextAncestorContext.d.ts.map +1 -0
  391. package/types/views/Theme.d.ts +8 -0
  392. package/types/views/Theme.d.ts.map +1 -0
  393. package/types/views/ThemeContext.d.ts +18 -0
  394. package/types/views/ThemeContext.d.ts.map +1 -0
  395. package/types/views/ThemeInverse.d.ts +10 -0
  396. package/types/views/ThemeInverse.d.ts.map +1 -0
  397. package/types/views/ThemeManagerContext.d.ts +22 -0
  398. package/types/views/ThemeManagerContext.d.ts.map +1 -0
  399. package/types/views/ThemeProvider.d.ts +10 -0
  400. package/types/views/ThemeProvider.d.ts.map +1 -0
  401. package/.ultra.cache.json +0 -1
  402. package/_/constants/platform.js.map +0 -7
  403. package/_/createComponent.js.map +0 -7
  404. package/_/createTamagui.js.map +0 -7
  405. package/_/createTokens.js.map +0 -7
  406. package/_/helpers/addStylesUsingClassname.js +0 -32
  407. package/_/helpers/addStylesUsingClassname.js.map +0 -7
  408. package/_/helpers/createTamaguiProvider.js.map +0 -7
  409. package/_/helpers/extendStaticConfig.js +0 -176
  410. package/_/helpers/extendStaticConfig.js.map +0 -7
  411. package/_/helpers/getSplitStyles.js.map +0 -7
  412. package/_/helpers/matchMedia.js.map +0 -7
  413. package/_/hooks/useFeatures.js.map +0 -7
  414. package/_/hooks/useForceUpdate.js +0 -28
  415. package/_/hooks/useForceUpdate.js.map +0 -7
  416. package/_/hooks/useMedia.js.map +0 -7
  417. package/_/hooks/useTheme.js.map +0 -7
  418. package/_/index.js.map +0 -7
  419. package/_/static.js.map +0 -7
  420. package/_/styled.js.map +0 -7
  421. package/_/views/Theme.js.map +0 -7
  422. package/_/views/ThemeManagerContext.js.map +0 -7
  423. package/src/hooks/useForceUpdate.tsx +0 -26
  424. package/src/views/SafeAreaProvider.tsx +0 -33
  425. package/tsconfig.json +0 -8
  426. package/types.d.ts +0 -558
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/createComponent.tsx"],
4
+ "sourcesContent": ["import { concatClassName, stylePropsView } from '@tamagui/helpers'\nimport { useForceUpdate } from '@tamagui/use-force-update'\nimport React, {\n Children,\n Fragment,\n createElement,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react'\nimport { StyleSheet, Text, View, ViewStyle } from 'react-native'\n\nimport { stackDefaultStyles } from './constants/constants'\nimport { isTouchDevice, isWeb } from './constants/platform'\nimport { rnw } from './constants/rnw'\nimport { onConfiguredOnce } from './createTamagui'\nimport { addStylesUsingClassname, useStylesAsClassname } from './helpers/addStylesUsingClassname'\nimport { extendStaticConfig, parseStaticConfig } from './helpers/extendStaticConfig'\nimport { getSplitStyles } from './helpers/getSplitStyles'\nimport { useFeatures } from './hooks/useFeatures'\nimport { usePressable } from './hooks/usePressable'\nimport {\n SpaceTokens,\n StaticComponent,\n StaticConfig,\n StaticConfigParsed,\n TamaguiInternalConfig,\n} from './types'\nimport { TextAncestorContext } from './views/TextAncestorContext'\nimport { ThemeManagerContext } from './views/ThemeManagerContext'\n\nexport const mouseUps = new Set<Function>()\n\nif (typeof document !== 'undefined') {\n document.addEventListener('mouseup', () => {\n mouseUps.forEach((x) => x())\n mouseUps.clear()\n })\n}\n\ntype DefaultProps = {}\n\nexport function createComponent<A extends Object = DefaultProps>(\n configIn: Partial<StaticConfig> | StaticConfigParsed\n) {\n let staticConfig: StaticConfigParsed\n if ('parsed' in configIn) {\n staticConfig = configIn\n } else {\n staticConfig = parseStaticConfig(configIn)\n }\n\n const { Component, validStyles, isText, isZStack } = staticConfig\n const validStyleProps = validStyles ?? stylePropsView\n\n // split out default styles vs props so we can assign it to component.defaultProps\n let defaultProps = null as any\n let tamaguiConfig: TamaguiInternalConfig\n\n // web uses className, native uses style\n let defaultsStyle: any\n let defaultsClassName = ''\n let initialTheme: any\n\n // see onConfiguredOnce below which attaches a name then to this component\n\n const component = forwardRef<View, A>((props: any, forwardedRef) => {\n const forceUpdate = useForceUpdate()\n const features = useFeatures(props, { forceUpdate })\n const manager = useContext(ThemeManagerContext)\n const [state, set_] = useState(() => ({\n hover: false,\n press: false,\n pressIn: false,\n theme: manager.name,\n }))\n const set = (next: Partial<typeof state>) =>\n set_((prev) => {\n for (const key in next) {\n if (prev[key] !== next[key]) {\n return { ...prev, ...next }\n }\n }\n return prev\n })\n\n // from react-native-web\n if (process.env.NODE_ENV === 'development' && !isText && isWeb) {\n Children.toArray(props.children).forEach((item) => {\n if (typeof item === 'string') {\n console.error(`Unexpected text node: ${item}. A text node cannot be a child of a <View>.`)\n }\n })\n }\n\n const hasTextAncestor = isWeb ? useContext(TextAncestorContext) : false\n const hostRef = useRef(null)\n\n const theme = (manager.theme as any) || initialTheme\n\n const {\n viewProps: viewPropsIn,\n pseudos,\n style,\n classNames,\n } = getSplitStyles(props, staticConfig, theme)\n\n const {\n tag,\n hitSlop,\n children,\n pointerEvents,\n onPress,\n onPressIn,\n onPressOut,\n onHoverIn,\n onHoverOut,\n space,\n disabled,\n onMouseEnter,\n onMouseLeave,\n hrefAttrs,\n onMoveShouldSetResponder,\n onMoveShouldSetResponderCapture,\n onResponderEnd,\n onResponderGrant,\n onResponderMove,\n onResponderReject,\n onResponderRelease,\n onResponderStart,\n onResponderTerminate,\n onResponderTerminationRequest,\n onScrollShouldSetResponder,\n onScrollShouldSetResponderCapture,\n onSelectionChangeShouldSetResponder,\n onSelectionChangeShouldSetResponderCapture,\n onStartShouldSetResponder,\n onStartShouldSetResponderCapture,\n onMouseDown,\n onClick,\n\n accessible,\n accessibilityRole,\n\n // TODO feature load layout hook\n onLayout,\n ...viewProps\n } = viewPropsIn\n\n if (!isWeb) {\n if (accessible) viewProps.accessible = accessible\n if (accessibilityRole) viewProps.accessibilityRole = accessibilityRole\n }\n\n if (isWeb) {\n // from react-native-web\n rnw.useResponderEvents(hostRef, {\n onMoveShouldSetResponder,\n onMoveShouldSetResponderCapture,\n onResponderEnd,\n onResponderGrant,\n onResponderMove,\n onResponderReject,\n onResponderRelease,\n onResponderStart,\n onResponderTerminate,\n onResponderTerminationRequest,\n onScrollShouldSetResponder,\n onScrollShouldSetResponderCapture,\n onSelectionChangeShouldSetResponder,\n onSelectionChangeShouldSetResponderCapture,\n onStartShouldSetResponder,\n onStartShouldSetResponderCapture,\n })\n }\n\n const isTracking = useRef(false)\n\n // hasEverHadEvents prevents repareting if you remove onPress or similar...\n const internal = useRef<{ isMounted: boolean; hasEverHadEvents?: boolean }>()\n if (!internal.current) {\n internal.current = {\n isMounted: true,\n }\n }\n\n useEffect(() => {\n internal.current!.isMounted = true\n const dispose = manager?.onChangeTheme((name) => {\n if (isTracking.current) {\n set({ theme: name })\n }\n })\n return () => {\n dispose()\n mouseUps.delete(unPress)\n isTracking.current = false\n internal.current!.isMounted = false\n }\n }, [manager])\n\n // element\n const element = isWeb\n ? !Component || typeof Component === 'string'\n ? // default to tag, fallback to component (when both strings)\n tag || Component\n : Component\n : Component\n const ReactView = !isWeb ? View : element || (hasTextAncestor ? 'span' : 'div')\n const ReactText = !isWeb ? Text : element || 'span'\n const ViewComponent = isText ? ReactText : ReactView\n\n // styles\n const isHovering = !isTouchDevice && !disabled && pseudos && state.hover\n const isPressing = !disabled && pseudos && state.press\n\n const styles = [\n // parity w react-native-web, only for text in text\n // TODO this should be able to be done w css to replicate after extraction:\n // (.text .text { display: inline-flex; }) (but if they set display we'd need stronger precendence)\n // isText && hasTextAncestor && isWeb ? { display: 'inline-flex' } : null,\n style,\n isHovering ? pseudos.hoverStyle || null : null,\n isPressing ? pseudos.pressStyle || null : null,\n ]\n\n if (isWeb) {\n const stylesClassNames = useStylesAsClassname(styles)\n const classList = isText\n ? [\n defaultsClassName,\n // hasTextAncestor === true && cssText.textHasAncestor,\n // TODO MOVE TO VARIANTS [number] [any]\n // numberOfLines != null && numberOfLines > 1 && cssText.textMultiLine,\n classNames,\n stylesClassNames,\n props.className,\n ]\n : [defaultsClassName, props.className, classNames, stylesClassNames]\n\n // @ts-expect-error\n const className = concatClassName(...classList)\n if (process.env.NODE_ENV === 'development') {\n if (props['debug']) {\n // prettier-ignore\n console.log('\uD83E\uDD5A className', { style, styles, classList, stylesClassNames, className })\n }\n }\n viewProps.className = className\n } else {\n viewProps.style = styles\n }\n\n if (pointerEvents) {\n viewProps.pointerEvents = pointerEvents\n }\n\n if (isWeb) {\n // from react-native-web\n const platformMethodsRef = rnw.usePlatformMethods(viewProps)\n const setRef = rnw.useMergeRefs(hostRef, platformMethodsRef, forwardedRef)\n viewProps.ref = setRef\n if (props.href != null && hrefAttrs != null) {\n const { download, rel, target } = hrefAttrs\n if (download != null) {\n viewProps.download = download\n }\n if (rel != null) {\n viewProps.rel = rel\n }\n if (typeof target === 'string') {\n viewProps.target = target.charAt(0) !== '_' ? '_' + target : target\n }\n }\n } else {\n if (forwardedRef) {\n viewProps.ref = forwardedRef\n }\n }\n\n const attachPress = !!(\n (pseudos && pseudos.pressStyle) ||\n onPress ||\n onPressOut ||\n onPressIn ||\n onClick\n )\n const attachHover =\n isWeb &&\n !isTouchDevice &&\n !!((pseudos && pseudos.hoverStyle) || onHoverIn || onHoverOut || onMouseEnter || onMouseLeave)\n\n // check presence to prevent reparenting bugs, allows for onPress={x ? function : undefined} usage\n // while avoiding reparenting...\n // once proper reparenting is supported, we can remove this and use that...\n const shouldAttach =\n internal.current.hasEverHadEvents ||\n attachPress ||\n attachHover ||\n 'pressStyle' in props ||\n 'onPress' in props ||\n 'onPressIn' in props ||\n 'onPressOut' in props ||\n (isWeb &&\n ('hoverStyle' in props ||\n 'onClick' in props ||\n 'onHoverIn' in props ||\n 'onHoverOut' in props ||\n 'onMouseEnter' in props ||\n 'onMouseLeave' in props))\n\n // never remove events as we wrap in a div (for now, may be able to remove..)\n if (shouldAttach) {\n internal.current.hasEverHadEvents = true\n }\n\n const unPress = useCallback(() => {\n if (!internal.current!.isMounted) return\n set({\n press: false,\n pressIn: false,\n })\n }, [])\n\n const events = shouldAttach\n ? {\n ...(!isWeb && {\n // non web\n onPressOut: (e) => {\n unPress()\n onPressOut?.(e)\n },\n }),\n ...(isWeb &&\n !isTouchDevice && {\n onMouseEnter:\n attachHover || attachPress\n ? (e) => {\n let next: Partial<typeof state> = {}\n if (attachHover) {\n next.hover = true\n }\n if (state.pressIn) {\n next.press = true\n }\n if (Object.keys(next).length) {\n set(next)\n }\n onHoverIn?.(e)\n onMouseEnter?.(e)\n }\n : undefined,\n onMouseLeave:\n attachHover || attachPress\n ? (e) => {\n let next: Partial<typeof state> = {}\n mouseUps.add(unPress)\n if (attachHover) {\n next.hover = false\n }\n if (state.pressIn) {\n next.press = false\n next.pressIn = false\n }\n if (Object.keys(next).length) {\n set(next)\n }\n onHoverOut?.(e)\n onMouseLeave?.(e)\n }\n : undefined,\n }),\n onMouseDown: attachPress\n ? (e) => {\n set({\n press: true,\n pressIn: true,\n })\n onPressIn?.(e)\n onMouseDown?.(e)\n }\n : (onPressIn as any),\n onClick: attachPress\n ? (e) => {\n // this caused issue with next.js passing href\n // e.preventDefault()\n onPress?.(e)\n onClick?.(e)\n unPress()\n onPressOut?.(e)\n }\n : (onPressOut as any),\n }\n : null\n\n if (events) {\n if (typeof ViewComponent !== 'string') {\n // TODO once we do the above we can then rely entirely on pressStyle returned here isntead of above pressStyle logic\n const [pressProps] = usePressable({\n disabled,\n hitSlop,\n onPressIn: events.onMouseDown,\n onPressOut: events.onPressOut,\n onPress: events.onClick,\n })\n Object.assign(viewProps, pressProps)\n } else {\n Object.assign(viewProps, events)\n }\n }\n\n const childEls = spacedChildren({\n children,\n space,\n flexDirection: props.flexDirection || defaultProps?.flexDirection,\n isZStack: isZStack,\n })\n\n let content: any\n\n // replicate react-native-web's `createElement`\n if (isWeb && rnw) {\n const domProps = rnw.createDOMProps(viewProps)\n const className =\n domProps.className && domProps.className !== viewProps.className\n ? `${domProps.className} ${viewProps.className}`\n : viewProps.className\n Object.assign(viewProps, domProps)\n viewProps.className = className\n content = createElement(ViewComponent, viewProps, childEls)\n } else {\n content = createElement(ViewComponent, viewProps, childEls)\n }\n\n const shouldWrapTextAncestor = isWeb && isText && !hasTextAncestor\n if (shouldWrapTextAncestor) {\n // from react-native-web\n // @ts-ignore\n content = createElement(TextAncestorContext.Provider, { value: true }, content)\n }\n\n if (process.env.NODE_ENV === 'development') {\n if (props['debug']) {\n viewProps['debug'] = true\n console.log('\uD83E\uDD5A props in:', props)\n console.log('\uD83E\uDD5A props out:', viewProps)\n console.log(props.onClick?.toString())\n // prettier-ignore\n console.log('\uD83E\uDD5A etc:', { shouldAttach, ViewComponent, viewProps, styles, pseudos, content, childEls })\n // only on browser because node expands it huge\n if (isWeb) {\n console.log('\uD83E\uDD5A component info', { staticConfig, tamaguiConfig })\n }\n }\n }\n\n return (\n <>\n {features}\n {content}\n </>\n )\n })\n\n // Once configuration is run and all components are registered\n // get default props + className and analyze styles\n onConfiguredOnce((conf) => {\n tamaguiConfig = conf\n initialTheme = conf.themes[conf.defaultTheme || Object.keys(conf.themes)[0]]\n const next = getSplitStyles(staticConfig.defaultProps, staticConfig, initialTheme, true)\n if (isWeb) {\n if (next.classNames) {\n defaultsClassName += next.classNames + ' '\n }\n defaultsClassName += addStylesUsingClassname([next.style, next.pseudos])\n } else {\n if (!hasWarnedOnce) {\n hasWarnedOnce = true\n console.log('\u26A0\uFE0F TODO account for default styles for media queries')\n }\n }\n // @ts-ignore\n component.defaultProps = {\n ...next.viewProps,\n ...component.defaultProps,\n }\n if (process.env.NODE_ENV === 'development') {\n if (staticConfig.defaultProps?.debug) {\n console.log('tamagui debug component:', next, defaultsClassName, component.defaultProps)\n }\n }\n })\n\n component['staticConfig'] = {\n validStyles: validStyleProps,\n ...staticConfig,\n }\n\n const res = component as any as StaticComponent<A, void>\n\n // add extractable HoC\n res['extractable'] = (Component: any, conf?: StaticConfig) => {\n Component['staticConfig'] = extendStaticConfig(res, {\n ...conf,\n neverFlatten: true,\n defaultProps: {\n ...Component.defaultProps,\n ...conf?.defaultProps,\n },\n })\n return Component\n }\n\n return res\n}\n\nlet hasWarnedOnce = false\n\n// dont used styled() here to avoid circular deps\n// keep inline to avoid circular deps\n\nexport const Spacer = createComponent<{ size?: number | SpaceTokens; flex?: boolean | number }>({\n defaultProps: {\n ...stackDefaultStyles,\n size: true,\n },\n variants: {\n size: {\n '...size': (size, { tokens }) => {\n size = size == true ? '$true' : size\n return {\n width: tokens.size[size] ?? size,\n height: tokens.size[size] ?? size,\n }\n },\n },\n\n direction: {\n horizontal: {\n height: 0,\n },\n vertical: {\n width: 0,\n },\n },\n },\n})\n\nexport function spacedChildren({\n isZStack,\n children,\n space,\n flexDirection,\n}: {\n isZStack?: boolean\n children: any\n space?: any\n flexDirection?: ViewStyle['flexDirection']\n}) {\n if (!space && !isZStack) {\n return children\n }\n const childrenList = Children.toArray(children)\n const len = childrenList.length\n if (len === 1) {\n return children\n }\n const next: any[] = []\n for (const [index, child] of childrenList.entries()) {\n if (child === null || child === undefined) {\n continue\n }\n\n const key = `${child?.['key'] ?? index}`\n\n next.push(<Fragment key={key}>{isZStack ? <Absolute>{child}</Absolute> : child}</Fragment>)\n\n // allows for custom visually hidden components that dont insert spacing\n if (child?.['type']?.['isVisuallyHidden']) {\n continue\n }\n\n if (index !== len - 1) {\n if (space) {\n next.push(\n <Spacer\n key={`${key}_spacer`}\n // @ts-ignore TODO\n direction={\n flexDirection === 'row' || flexDirection === 'row-reverse' ? 'horizontal' : 'vertical'\n }\n size={space}\n />\n )\n }\n }\n }\n return next\n}\n\n// for now not so \"tamagui-y\"\nconst Absolute = ({ children }) => <View style={sheet.fullscreen}>{children}</View>\nconst sheet = StyleSheet.create({\n fullscreen: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n },\n})\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,28 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import { validateFont } from "./helpers/validate";
4
+ const createFont = /* @__PURE__ */ __name((font) => {
5
+ if (process.env.NODE_ENV === "development") {
6
+ validateFont(font);
7
+ }
8
+ const sizeKeys = Object.keys(font.size);
9
+ for (const key in font) {
10
+ if (key === "size" || key === "family")
11
+ continue;
12
+ const section = font[key];
13
+ const keys = Object.keys(section);
14
+ let fillVal = section[keys[0]];
15
+ for (const sKey of sizeKeys) {
16
+ if (!(sKey in section)) {
17
+ section[sKey] = fillVal;
18
+ } else {
19
+ fillVal = section[sKey];
20
+ }
21
+ }
22
+ }
23
+ return Object.freeze(font);
24
+ }, "createFont");
25
+ export {
26
+ createFont
27
+ };
28
+ //# sourceMappingURL=createFont.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/createFont.ts"],
4
+ "sourcesContent": ["import { validateFont } from './helpers/validate'\nimport { GenericFont } from './types'\n\nexport const createFont = <A extends GenericFont>(font: A): A => {\n if (process.env.NODE_ENV === 'development') {\n validateFont(font)\n }\n\n // fills in any missing values based on size keys being standard\n const sizeKeys = Object.keys(font.size)\n\n for (const key in font) {\n if (key === 'size' || key === 'family') continue\n const section = font[key]\n const keys = Object.keys(section)\n\n // fill with first filled in value to start\n let fillVal = section[keys[0]]\n\n for (const sKey of sizeKeys) {\n if (!(sKey in section)) {\n section[sKey] = fillVal\n } else {\n // if exists, set as the fillVal\n fillVal = section[sKey]\n }\n }\n }\n\n return Object.freeze(font)\n}\n"],
5
+ "mappings": ";;AAAA;AAGO,MAAM,aAAa,wBAAwB,SAAe;AAC/D,MAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,iBAAa;AAAA;AAIf,QAAM,WAAW,OAAO,KAAK,KAAK;AAElC,aAAW,OAAO,MAAM;AACtB,QAAI,QAAQ,UAAU,QAAQ;AAAU;AACxC,UAAM,UAAU,KAAK;AACrB,UAAM,OAAO,OAAO,KAAK;AAGzB,QAAI,UAAU,QAAQ,KAAK;AAE3B,eAAW,QAAQ,UAAU;AAC3B,UAAI,CAAE,SAAQ,UAAU;AACtB,gBAAQ,QAAQ;AAAA,aACX;AAEL,kBAAU,QAAQ;AAAA;AAAA;AAAA;AAKxB,SAAO,OAAO,OAAO;AAAA,GA1BG;",
6
+ "names": []
7
+ }
File without changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/createShorthands.ts"],
3
+ "sources": ["../../src/createShorthands.ts"],
4
4
  "sourcesContent": ["// type helper\n\nexport function createShorthands<A extends Record<string, string>>(shorthands: A): A {\n return Object.freeze(shorthands) as any\n}\n"],
5
5
  "mappings": ";;AAEO,0BAA4D,YAAkB;AACnF,SAAO,OAAO,OAAO;AAAA;AADP;",
6
6
  "names": []
@@ -3,10 +3,12 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
3
3
  import { getStyleRules } from "@tamagui/helpers";
4
4
  import { Variable, createVariable, isVariable } from "./createVariable";
5
5
  import { createTamaguiProvider } from "./helpers/createTamaguiProvider";
6
+ import { validateConfig } from "./helpers/validate";
6
7
  import { configureMedia } from "./hooks/useMedia";
7
8
  let conf;
8
9
  const getHasConfigured = /* @__PURE__ */ __name(() => !!conf, "getHasConfigured");
9
- const getTamaguiConfig = /* @__PURE__ */ __name(() => conf, "getTamaguiConfig");
10
+ const getTamagui = /* @__PURE__ */ __name(() => conf, "getTamagui");
11
+ const getTokens = /* @__PURE__ */ __name(() => conf.tokensParsed, "getTokens");
10
12
  const configListeners = new Set();
11
13
  const onConfiguredOnce = /* @__PURE__ */ __name((cb) => {
12
14
  if (conf) {
@@ -17,8 +19,13 @@ const onConfiguredOnce = /* @__PURE__ */ __name((cb) => {
17
19
  }, "onConfiguredOnce");
18
20
  const PREFIX = `theme--`;
19
21
  function createTamagui(config) {
22
+ if (process.env.NODE_ENV === "development") {
23
+ if (!config["parsed"]) {
24
+ validateConfig(config);
25
+ }
26
+ }
20
27
  if (conf) {
21
- throw new Error(`#000 createTamagui called twice`);
28
+ console.warn("Called createTamagui twice! Should never do so");
22
29
  }
23
30
  configureMedia({
24
31
  queries: config.media,
@@ -28,11 +35,27 @@ function createTamagui(config) {
28
35
  let cssRules = [];
29
36
  let tokenRule = `:root {`;
30
37
  const varsByValue = new Map();
38
+ const addVar = /* @__PURE__ */ __name((v) => {
39
+ varsByValue[v.val] = v;
40
+ const rule = `--${v.name}:${typeof v.val === "number" ? `${v.val}px` : v.val};`;
41
+ tokenRule += rule;
42
+ }, "addVar");
31
43
  for (const key in config.tokens) {
32
44
  for (const skey in config.tokens[key]) {
33
- const v = config.tokens[key][skey];
34
- varsByValue[v.val] = v;
35
- tokenRule += `--${v.name}:${typeof v.val === "number" ? `${v.val}px` : v.val};`;
45
+ const val = config.tokens[key][skey];
46
+ if (key === "font") {
47
+ for (const fkey in val) {
48
+ if (fkey === "family") {
49
+ addVar(val[fkey]);
50
+ } else {
51
+ for (const fskey in val[fkey]) {
52
+ addVar(val[fkey][fskey]);
53
+ }
54
+ }
55
+ }
56
+ } else {
57
+ addVar(val);
58
+ }
36
59
  }
37
60
  }
38
61
  cssRules.push(`${tokenRule}
@@ -44,8 +67,7 @@ function createTamagui(config) {
44
67
  for (const themeKey in theme) {
45
68
  const val = theme[themeKey];
46
69
  const getVariableCSS = /* @__PURE__ */ __name((inv) => {
47
- var _a;
48
- const v = (_a = varsByValue[inv]) != null ? _a : inv;
70
+ const v = varsByValue[inv] ?? inv;
49
71
  return isVariable(v) ? `--${themeKey}:var(--${v.name});` : `--${themeKey}:${v};`;
50
72
  }, "getVariableCSS");
51
73
  vars += getVariableCSS(val);
@@ -72,13 +94,7 @@ ${vars}
72
94
  css: cssRules.join("\n")
73
95
  };
74
96
  })();
75
- const tokensParsed = {};
76
- for (const key in config.tokens) {
77
- tokensParsed[key] = {};
78
- for (const skey in config.tokens[key]) {
79
- tokensParsed[key][`$${skey}`] = config.tokens[key][skey];
80
- }
81
- }
97
+ const tokensParsed = parseTokens(config.tokens);
82
98
  const themeParsed = {};
83
99
  const firstKey = Object.keys(config.themes)[0];
84
100
  for (const key in config.themes[firstKey]) {
@@ -95,6 +111,7 @@ ${vars}
95
111
  themeConfig,
96
112
  themeParsed,
97
113
  tokensParsed,
114
+ parsed: true,
98
115
  getCSS() {
99
116
  return `${themeConfig.css}
100
117
  ${[...getStyleRules()].join("\n")}`;
@@ -112,11 +129,40 @@ function getThemeParentClassName(themeName) {
112
129
  return `theme-parent ${themeName ? `${PREFIX}${themeName}` : ""}`;
113
130
  }
114
131
  __name(getThemeParentClassName, "getThemeParentClassName");
132
+ const parseTokens = /* @__PURE__ */ __name((tokens) => {
133
+ const res = {};
134
+ for (const key in tokens) {
135
+ res[key] = {};
136
+ if (key === "font") {
137
+ for (const family in tokens.font) {
138
+ const obj = {};
139
+ res.font[`$${family}`] = obj;
140
+ for (const attrKey in tokens.font[family]) {
141
+ const attr = tokens.font[family][attrKey];
142
+ if (attrKey === "family") {
143
+ obj[attrKey] = attr;
144
+ continue;
145
+ }
146
+ obj[attrKey] = Object.keys(attr).reduce((acc, cur) => {
147
+ acc[`$${cur}`] = attr[cur];
148
+ return acc;
149
+ }, {});
150
+ }
151
+ }
152
+ continue;
153
+ }
154
+ for (const skey in tokens[key]) {
155
+ res[key][`$${skey}`] = tokens[key][skey];
156
+ }
157
+ }
158
+ return res;
159
+ }, "parseTokens");
115
160
  export {
116
161
  createTamagui,
117
162
  getHasConfigured,
118
- getTamaguiConfig,
163
+ getTamagui,
119
164
  getThemeParentClassName,
165
+ getTokens,
120
166
  onConfiguredOnce
121
167
  };
122
168
  //# sourceMappingURL=createTamagui.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/createTamagui.ts"],
4
+ "sourcesContent": ["import { getStyleRules } from '@tamagui/helpers'\n\nimport { Variable, createVariable, isVariable } from './createVariable'\nimport { createTamaguiProvider } from './helpers/createTamaguiProvider'\nimport { validateConfig } from './helpers/validate'\nimport { configureMedia } from './hooks/useMedia'\nimport {\n CreateTamaguiConfig,\n GenericTamaguiConfig,\n MediaQueryKey,\n TamaguiInternalConfig,\n TamaguiProviderProps,\n} from './types'\n\nexport type CreateTamaguiProps = TamaguiProviderProps &\n // we omit and re-declare it because we need to allow instantation types to be flexible\n // user then re-defines the types after createTamagui returns the typed object they want\n Omit<GenericTamaguiConfig, 'themes'> & {\n themes: {\n [key: string]: {\n [key: string]: string | number | Variable\n }\n }\n // for ssr/native, will default to active\n mediaQueryDefaultActive?: MediaQueryKey[]\n }\n\nlet conf: TamaguiInternalConfig | null\n\nexport const getHasConfigured = () => !!conf\n\nexport const getTamagui = () => conf!\nexport const getTokens = () => conf!.tokensParsed\n\ntype ConfigListener = (conf: TamaguiInternalConfig) => void\nconst configListeners = new Set<ConfigListener>()\nexport const onConfiguredOnce = (cb: ConfigListener) => {\n if (conf) {\n cb(conf)\n } else {\n configListeners.add(cb)\n }\n}\n\nconst PREFIX = `theme--`\n\nexport function createTamagui<Conf extends CreateTamaguiProps>(\n config: Conf\n): Conf extends CreateTamaguiConfig<infer A, infer B, infer C, infer D>\n ? TamaguiInternalConfig<A, B, C, D>\n : unknown {\n if (process.env.NODE_ENV === 'development') {\n // config is re-run by the @tamagui/static, dont double validate\n if (!config['parsed']) {\n validateConfig(config)\n }\n }\n // test env loads a few times as it runs diff tests\n if (conf) {\n console.warn('Called createTamagui twice! Should never do so')\n // throw new Error(`#000 createTamagui called twice`)\n }\n\n configureMedia({\n queries: config.media as any,\n defaultActive: config.mediaQueryDefaultActive,\n })\n\n // TODO can avoid some of this CSS creation on native\n const themeConfig = (() => {\n let cssRules: string[] = []\n\n // tokens\n let tokenRule = `:root {`\n const varsByValue = new Map<string, Variable>()\n const addVar = (v: Variable) => {\n varsByValue[v.val] = v\n const rule = `--${v.name}:${typeof v.val === 'number' ? `${v.val}px` : v.val};`\n tokenRule += rule\n }\n\n for (const key in config.tokens) {\n for (const skey in config.tokens[key]) {\n const val = config.tokens[key][skey]\n if (key === 'font') {\n for (const fkey in val) {\n if (fkey === 'family') {\n addVar(val[fkey])\n } else {\n for (const fskey in val[fkey]) {\n addVar(val[fkey][fskey])\n }\n }\n }\n } else {\n addVar(val)\n }\n }\n }\n cssRules.push(`${tokenRule}\\n}`)\n\n // themes\n for (const themeName in config.themes) {\n // to allow using the same theme with diff names, be sure we don't mutate!\n config.themes[themeName] = { ...config.themes[themeName] }\n const theme = config.themes[themeName]\n let vars = ''\n for (const themeKey in theme) {\n const val = theme[themeKey]\n const getVariableCSS = (inv: any) => {\n const v = varsByValue[inv] ?? inv\n return isVariable(v) ? `--${themeKey}:var(--${v.name});` : `--${themeKey}:${v};`\n }\n vars += getVariableCSS(val)\n // TODO sanity check is necessary\n // make everything a variable that gets put into css\n if (!isVariable(val)) {\n theme[themeKey] = createVariable({\n name: themeKey,\n val,\n })\n }\n }\n\n const [themeClassName, parentName] = themeName.includes('-')\n ? themeName.split('-')\n : [themeName, '']\n // tiny hack for now assuming light/dark are typical parentName\n const oppositeName = parentName === 'dark' ? 'light' : 'dark'\n const cssParentSel = parentName ? `.${PREFIX}${parentName}` : ''\n const cssChildSel = `.${PREFIX}${themeClassName}`\n const cssSel = `${cssParentSel} ${cssChildSel}`\n // we need to force specificity\n const cssRule = `${cssSel}, .${PREFIX}${oppositeName} ${cssSel} {\\n${vars}\\n}`\n cssRules.push(cssRule)\n }\n\n Object.freeze(cssRules)\n\n return {\n cssRules,\n css: cssRules.join('\\n'),\n }\n })()\n\n // faster lookups token keys become $keys to match input\n const tokensParsed: any = parseTokens(config.tokens)\n // all themes should match key and we just need variable name\n // TODO once w react native we'd want to have a reverse lookup back to value\n const themeParsed: any = {}\n const firstKey = Object.keys(config.themes)[0]\n for (const key in config.themes[firstKey]) {\n // themeParsed[`$${key}`] = config.themes[firstKey][key]\n const val = config.themes[firstKey][key].val\n themeParsed[`$${key}`] = new Variable({ val, name: key })\n }\n\n const next: TamaguiInternalConfig = {\n // @ts-ignore\n shorthands: {},\n ...config,\n Provider: createTamaguiProvider({\n defaultTheme: 'light',\n ...config,\n }),\n themeConfig,\n themeParsed,\n tokensParsed,\n parsed: true,\n getCSS() {\n return `${themeConfig.css}\\n${[...getStyleRules()].join('\\n')}`\n },\n }\n conf = next\n\n if (configListeners.size) {\n configListeners.forEach((cb) => cb(next))\n configListeners.clear()\n }\n\n // @ts-expect-error\n return next\n}\n\nexport function getThemeParentClassName(themeName?: string | null) {\n return `theme-parent ${themeName ? `${PREFIX}${themeName}` : ''}`\n}\n\nconst parseTokens = (tokens: any) => {\n const res: any = {}\n for (const key in tokens) {\n res[key] = {}\n if (key === 'font') {\n for (const family in tokens.font) {\n const obj = {}\n res.font[`$${family}`] = obj\n for (const attrKey in tokens.font[family]) {\n const attr = tokens.font[family][attrKey]\n if (attrKey === 'family') {\n obj[attrKey] = attr\n continue\n }\n obj[attrKey] = Object.keys(attr).reduce((acc, cur) => {\n acc[`$${cur}`] = attr[cur]\n return acc\n }, {})\n }\n }\n continue\n }\n for (const skey in tokens[key]) {\n res[key][`$${skey}`] = tokens[key][skey]\n }\n }\n\n return res\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
File without changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/createTheme.ts"],
3
+ "sources": ["../../src/createTheme.ts"],
4
4
  "sourcesContent": ["import { Variable, createVariable } from './createVariable'\n\nexport const createTheme = <Theme extends { [key: string]: string | Variable }>(\n theme: Theme\n): {\n [key in keyof Theme]: Variable\n} => {\n const res = {} as any\n for (const key in theme) {\n const val = theme[key]\n if (!(val instanceof Variable)) {\n res[key] = createVariable({\n name: key,\n val,\n })\n }\n }\n return res\n}\n"],
5
5
  "mappings": ";;AAAA;AAEO,MAAM,cAAc,wBACzB,UAGG;AACH,QAAM,MAAM;AACZ,aAAW,OAAO,OAAO;AACvB,UAAM,MAAM,MAAM;AAClB,QAAI,CAAE,gBAAe,WAAW;AAC9B,UAAI,OAAO,eAAe;AAAA,QACxB,MAAM;AAAA,QACN;AAAA;AAAA;AAAA;AAIN,SAAO;AAAA,GAfkB;",
6
6
  "names": []
@@ -1,7 +1,11 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
  import { createVariable } from "./createVariable";
4
+ import { validateTokens } from "./helpers/validate";
4
5
  function createTokens(tokens) {
6
+ if (process.env.NODE_ENV === "development") {
7
+ validateTokens(tokens);
8
+ }
5
9
  return setupTokens(tokens);
6
10
  }
7
11
  __name(createTokens, "createTokens");
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/createTokens.ts"],
4
+ "sourcesContent": ["import { Variable, createVariable } from './createVariable'\nimport { validateTokens } from './helpers/validate'\nimport { CreateTokens } from './types'\n\n// tokens.color.dark.red ===> { var: `color-dark-red`, val: '' }\n\nexport function createTokens<T extends CreateTokens>(tokens: T): MakeTokens<T> {\n if (process.env.NODE_ENV === 'development') {\n validateTokens(tokens)\n }\n\n return setupTokens(tokens) as any\n}\n\nfunction setupTokens(tokens: any) {\n return mapTokensToVariables(tokens)\n}\n\nexport const mapTokensToVariables = (\n tokens: CreateTokens,\n parentPath = ''\n): CreateTokens<Variable> => {\n const res = {}\n for (const key in tokens) {\n const val = tokens[key]\n const name = parentPath ? `${parentPath}-${key}` : key\n if (val && typeof val === 'object') {\n res[key] = mapTokensToVariables(tokens[key], name)\n } else {\n res[key] = createVariable({ val, name })\n }\n }\n // @ts-expect-error\n return res\n}\n\n// verbose but gives us nice types...\ntype MakeTokens<T> = T extends {\n font: {\n [key in infer A]: {\n size: infer B\n lineHeight: infer C\n letterSpacing: infer D\n weight: infer Z\n family: infer Y\n }\n }\n color: infer E\n space: infer F\n size: infer G\n radius: infer H\n zIndex: infer J\n}\n ? {\n font: {\n [key in A]: {\n size: {\n [key in keyof B]: Variable\n }\n lineHeight: {\n [key in keyof C]: Variable\n }\n letterSpacing: {\n [key in keyof D]: Variable\n }\n weight: {\n [key in keyof Z]: Variable\n }\n family: Y\n }\n }\n color: {\n [key in keyof E]: Variable\n }\n space: {\n [key in keyof F]: Variable\n }\n size: {\n [key in keyof G]: Variable\n }\n radius: {\n [key in keyof H]: Variable\n }\n zIndex: {\n [key in keyof J]: Variable\n }\n }\n : never\n"],
5
+ "mappings": ";;AAAA;AACA;AAKO,sBAA8C,QAA0B;AAC7E,MAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,mBAAe;AAAA;AAGjB,SAAO,YAAY;AAAA;AALL;AAQhB,qBAAqB,QAAa;AAChC,SAAO,qBAAqB;AAAA;AADrB;AAIF,MAAM,uBAAuB,wBAClC,QACA,aAAa,OACc;AAC3B,QAAM,MAAM;AACZ,aAAW,OAAO,QAAQ;AACxB,UAAM,MAAM,OAAO;AACnB,UAAM,OAAO,aAAa,GAAG,cAAc,QAAQ;AACnD,QAAI,OAAO,OAAO,QAAQ,UAAU;AAClC,UAAI,OAAO,qBAAqB,OAAO,MAAM;AAAA,WACxC;AACL,UAAI,OAAO,eAAe,EAAE,KAAK;AAAA;AAAA;AAIrC,SAAO;AAAA,GAf2B;",
6
+ "names": []
7
+ }
@@ -7,6 +7,9 @@ class Variable {
7
7
  this.name = name;
8
8
  this.variable = isWeb ? `var(--${name})` : this.val;
9
9
  }
10
+ toString() {
11
+ return isWeb ? this.variable : this.val;
12
+ }
10
13
  }
11
14
  __name(Variable, "Variable");
12
15
  const createVariable = /* @__PURE__ */ __name((props) => new Variable(props), "createVariable");
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/createVariable.ts"],
4
- "sourcesContent": ["import { isWeb } from './constants/platform'\n\nexport class Variable {\n name: string\n val: string | number\n variable: string | number\n\n constructor({ val, name }: VariableIn) {\n // converting to px breaks rn\n this.val = val //typeof val === 'string' ? val : `${val}px`\n this.name = name\n this.variable = isWeb ? `var(--${name})` : this.val\n }\n}\n\ntype VariableIn = { val: string | number; name: string }\n\nexport const createVariable = (props: VariableIn) => new Variable(props)\n\nexport function isVariable(v: Variable | any): v is Variable {\n return v instanceof Variable\n}\n"],
5
- "mappings": ";;AAAA;AAEO,eAAe;AAAA,EAKpB,YAAY,EAAE,KAAK,QAAoB;AAErC,SAAK,MAAM;AACX,SAAK,OAAO;AACZ,SAAK,WAAW,QAAQ,SAAS,UAAU,KAAK;AAAA;AAAA;AAT7C;AAeA,MAAM,iBAAiB,wBAAC,UAAsB,IAAI,SAAS,QAApC;AAEvB,oBAAoB,GAAkC;AAC3D,SAAO,aAAa;AAAA;AADN;",
3
+ "sources": ["../../src/createVariable.ts"],
4
+ "sourcesContent": ["import { isWeb } from './constants/platform'\n\nexport class Variable {\n name: string\n val: string | number\n variable: string | number\n\n constructor({ val, name }: VariableIn) {\n // converting to px breaks rn\n this.val = val //typeof val === 'string' ? val : `${val}px`\n this.name = name\n this.variable = isWeb ? `var(--${name})` : this.val\n }\n\n toString() {\n return isWeb ? this.variable : this.val\n }\n}\n\ntype VariableIn = { val: string | number; name: string }\n\nexport const createVariable = (props: VariableIn) => new Variable(props)\n\nexport function isVariable(v: Variable | any): v is Variable {\n return v instanceof Variable\n}\n"],
5
+ "mappings": ";;AAAA;AAEO,eAAe;AAAA,EAKpB,YAAY,EAAE,KAAK,QAAoB;AAErC,SAAK,MAAM;AACX,SAAK,OAAO;AACZ,SAAK,WAAW,QAAQ,SAAS,UAAU,KAAK;AAAA;AAAA,EAGlD,WAAW;AACT,WAAO,QAAQ,KAAK,WAAW,KAAK;AAAA;AAAA;AAbjC;AAmBA,MAAM,iBAAiB,wBAAC,UAAsB,IAAI,SAAS,QAApC;AAEvB,oBAAoB,GAAkC;AAC3D,SAAO,aAAa;AAAA;AADN;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,57 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import { useInsertionEffect } from "react";
4
+ import { getStylesAtomic } from "./getStylesAtomic";
5
+ import { insertStyleRule } from "./insertStyleRule";
6
+ let added = new Set();
7
+ function useStylesAsClassname(styles) {
8
+ if (!useInsertionEffect) {
9
+ return addStylesUsingClassname(styles);
10
+ } else {
11
+ const insertions = [];
12
+ const className = addStylesUsingClassname(styles, (_, rules) => {
13
+ for (const rule of rules) {
14
+ insertions.push(rule);
15
+ }
16
+ });
17
+ useInsertionEffect(() => {
18
+ for (const ruleset of insertions) {
19
+ insertStyleRule(ruleset);
20
+ }
21
+ });
22
+ return className;
23
+ }
24
+ }
25
+ __name(useStylesAsClassname, "useStylesAsClassname");
26
+ function addStylesUsingClassname(styles, onAdd) {
27
+ let className = "";
28
+ for (const style of styles) {
29
+ if (!style)
30
+ continue;
31
+ if (Array.isArray(style)) {
32
+ className += " " + addStylesUsingClassname(style);
33
+ continue;
34
+ }
35
+ for (const { identifier, rules } of getStylesAtomic(style)) {
36
+ className += ` ${identifier}`;
37
+ if (added.has(identifier)) {
38
+ continue;
39
+ }
40
+ added.add(identifier);
41
+ if (onAdd) {
42
+ onAdd(identifier, rules);
43
+ } else {
44
+ for (const rule of rules) {
45
+ insertStyleRule(rule);
46
+ }
47
+ }
48
+ }
49
+ }
50
+ return className;
51
+ }
52
+ __name(addStylesUsingClassname, "addStylesUsingClassname");
53
+ export {
54
+ addStylesUsingClassname,
55
+ useStylesAsClassname
56
+ };
57
+ //# sourceMappingURL=addStylesUsingClassname.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/helpers/addStylesUsingClassname.tsx"],
4
+ "sourcesContent": ["// @ts-ignore\nimport { useInsertionEffect } from 'react'\n\nimport { getStylesAtomic } from './getStylesAtomic'\nimport { insertStyleRule } from './insertStyleRule'\n\n// uses new useInsertionEffect for better perf if available\n\n// could be cleared occasionally\nlet added = new Set<string>()\n\nexport function useStylesAsClassname(styles: any[]) {\n if (!useInsertionEffect) {\n return addStylesUsingClassname(styles)\n } else {\n const insertions: any[] = []\n const className = addStylesUsingClassname(styles, (_, rules) => {\n for (const rule of rules) {\n insertions.push(rule)\n }\n })\n\n useInsertionEffect(() => {\n for (const ruleset of insertions) {\n insertStyleRule(ruleset)\n }\n })\n\n return className\n }\n}\n\nexport function addStylesUsingClassname(\n styles: any[],\n onAdd?: (identifier: string, rules: string[]) => any\n) {\n let className = ''\n for (const style of styles) {\n if (!style) continue\n if (Array.isArray(style)) {\n className += ' ' + addStylesUsingClassname(style)\n continue\n }\n for (const { identifier, rules } of getStylesAtomic(style)) {\n className += ` ${identifier}`\n if (added.has(identifier)) {\n continue\n }\n added.add(identifier)\n if (onAdd) {\n onAdd(identifier, rules)\n } else {\n for (const rule of rules) {\n insertStyleRule(rule)\n }\n }\n }\n }\n return className\n}\n"],
5
+ "mappings": ";;AACA;AAEA;AACA;AAKA,IAAI,QAAQ,IAAI;AAET,8BAA8B,QAAe;AAClD,MAAI,CAAC,oBAAoB;AACvB,WAAO,wBAAwB;AAAA,SAC1B;AACL,UAAM,aAAoB;AAC1B,UAAM,YAAY,wBAAwB,QAAQ,CAAC,GAAG,UAAU;AAC9D,iBAAW,QAAQ,OAAO;AACxB,mBAAW,KAAK;AAAA;AAAA;AAIpB,uBAAmB,MAAM;AACvB,iBAAW,WAAW,YAAY;AAChC,wBAAgB;AAAA;AAAA;AAIpB,WAAO;AAAA;AAAA;AAjBK;AAqBT,iCACL,QACA,OACA;AACA,MAAI,YAAY;AAChB,aAAW,SAAS,QAAQ;AAC1B,QAAI,CAAC;AAAO;AACZ,QAAI,MAAM,QAAQ,QAAQ;AACxB,mBAAa,MAAM,wBAAwB;AAC3C;AAAA;AAEF,eAAW,EAAE,YAAY,WAAW,gBAAgB,QAAQ;AAC1D,mBAAa,IAAI;AACjB,UAAI,MAAM,IAAI,aAAa;AACzB;AAAA;AAEF,YAAM,IAAI;AACV,UAAI,OAAO;AACT,cAAM,YAAY;AAAA,aACb;AACL,mBAAW,QAAQ,OAAO;AACxB,0BAAgB;AAAA;AAAA;AAAA;AAAA;AAKxB,SAAO;AAAA;AA1BO;",
6
+ "names": []
7
+ }
File without changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/helpers/createMediaStyle.ts"],
3
+ "sources": ["../../../src/helpers/createMediaStyle.ts"],
4
4
  "sourcesContent": ["import { StyleObject } from '@tamagui/helpers'\n\nimport { mediaObjectToString } from '../hooks/useMedia'\nimport { MediaQueries } from '../types'\n\n// TODO have this be used by extractMediaStyle in tamagui static\n\n// not synced to static/constants for now\nexport const MEDIA_SEP = '_'\n\nexport const createMediaStyle = (\n { identifier, rules }: StyleObject,\n mediaKey: string,\n mediaQueries: MediaQueries,\n negate?: boolean,\n importance = 0\n) => {\n const mediaKeys = Object.keys(mediaQueries)\n const mediaKeyPrecendence = mediaKeys.reduce((acc, cur, i) => {\n acc[cur] = new Array(importance + 1).fill(':root').join('')\n return acc\n }, {})\n const negKey = negate ? '0' : ''\n const ogPrefix = identifier.slice(0, identifier.indexOf('-') + 1)\n const nextIdentifier = `${identifier.replace(\n ogPrefix,\n `${ogPrefix}${MEDIA_SEP}${mediaKey}${negKey}${MEDIA_SEP}`\n )}`\n const screenStr = negate ? 'not all' : 'screen'\n const mediaSelector = mediaObjectToString(mediaQueries[mediaKey])\n const mediaQuery = `${screenStr} and ${mediaSelector}`\n const precendencePrefix = mediaKeyPrecendence[mediaKey]\n const styleInner = rules[0].replace(identifier, nextIdentifier)\n // combines media queries if they already exist\n let styleRule = ''\n if (styleInner.includes('@media')) {\n // combine\n styleRule = styleInner.replace('{', ` and ${mediaQuery} {`)\n } else {\n styleRule = `@media ${mediaQuery} { ${precendencePrefix} ${styleInner} }`\n }\n return {\n styleRule,\n identifier: nextIdentifier,\n }\n}\n"],
5
5
  "mappings": ";;AAEA;AAMO,MAAM,YAAY;AAElB,MAAM,mBAAmB,wBAC9B,EAAE,YAAY,SACd,UACA,cACA,QACA,aAAa,MACV;AACH,QAAM,YAAY,OAAO,KAAK;AAC9B,QAAM,sBAAsB,UAAU,OAAO,CAAC,KAAK,KAAK,MAAM;AAC5D,QAAI,OAAO,IAAI,MAAM,aAAa,GAAG,KAAK,SAAS,KAAK;AACxD,WAAO;AAAA,KACN;AACH,QAAM,SAAS,SAAS,MAAM;AAC9B,QAAM,WAAW,WAAW,MAAM,GAAG,WAAW,QAAQ,OAAO;AAC/D,QAAM,iBAAiB,GAAG,WAAW,QACnC,UACA,GAAG,WAAW,YAAY,WAAW,SAAS;AAEhD,QAAM,YAAY,SAAS,YAAY;AACvC,QAAM,gBAAgB,oBAAoB,aAAa;AACvD,QAAM,aAAa,GAAG,iBAAiB;AACvC,QAAM,oBAAoB,oBAAoB;AAC9C,QAAM,aAAa,MAAM,GAAG,QAAQ,YAAY;AAEhD,MAAI,YAAY;AAChB,MAAI,WAAW,SAAS,WAAW;AAEjC,gBAAY,WAAW,QAAQ,KAAK,QAAQ;AAAA,SACvC;AACL,gBAAY,UAAU,gBAAgB,qBAAqB;AAAA;AAE7D,SAAO;AAAA,IACL;AAAA,IACA,YAAY;AAAA;AAAA,GAjCgB;",
6
6
  "names": []
@@ -0,0 +1,160 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import { isWeb } from "../constants/platform";
4
+ import { getTamagui } from "../createTamagui";
5
+ import { Variable } from "../createVariable";
6
+ import { isObj } from "./isObj";
7
+ const createPropMapper = /* @__PURE__ */ __name((c) => {
8
+ const variants = c.variants;
9
+ let variantsParsed;
10
+ const defaultProps = c.defaultProps || {};
11
+ return (key, value, theme, props) => {
12
+ const conf = getTamagui();
13
+ if (!conf) {
14
+ console.trace("no conf! err");
15
+ return;
16
+ }
17
+ if (variants && !variantsParsed) {
18
+ variantsParsed = parseVariants(variants, conf);
19
+ }
20
+ let fontFamily = props.fontFamily || defaultProps.fontFamily || "$body";
21
+ const variant = variantsParsed?.[key];
22
+ if (variant && typeof value !== "undefined") {
23
+ const val = value === true ? variant["$true"] || variant["true"] : variant[value] ?? variant["..."] ?? value;
24
+ const res = typeof val === "function" ? val(value, { tokens: conf.tokensParsed, theme, props }) : isObj(val) ? { ...val } : val;
25
+ if (isObj(res)) {
26
+ resolveTokens(res, conf, theme, fontFamily);
27
+ }
28
+ return res;
29
+ }
30
+ let shouldReturn = false;
31
+ if (conf.shorthands[key]) {
32
+ shouldReturn = true;
33
+ key = conf.shorthands[key];
34
+ }
35
+ if (value && value[0] === "$") {
36
+ shouldReturn = true;
37
+ value = getToken(key, value, conf, theme, fontFamily);
38
+ }
39
+ if (value instanceof Variable) {
40
+ shouldReturn = true;
41
+ value = value.variable;
42
+ }
43
+ if (shouldReturn) {
44
+ return {
45
+ [key]: value
46
+ };
47
+ }
48
+ };
49
+ }, "createPropMapper");
50
+ const resolveTokens = /* @__PURE__ */ __name((res, conf, theme, fontFamily) => {
51
+ for (const rKey in res) {
52
+ const fKey = conf.shorthands[rKey] || rKey;
53
+ const val = res[rKey];
54
+ if (val instanceof Variable) {
55
+ res[fKey] = val.variable;
56
+ } else if (typeof val === "string") {
57
+ const fVal = val[0] === "$" ? getToken(fKey, val, conf, theme, fontFamily) : val;
58
+ res[fKey] = fVal;
59
+ } else {
60
+ if (isObj(val)) {
61
+ resolveTokens(val, conf, theme, fontFamily);
62
+ }
63
+ }
64
+ }
65
+ }, "resolveTokens");
66
+ const getToken = /* @__PURE__ */ __name((key, value, { tokensParsed, themeParsed }, theme, fontFamily = "$body") => {
67
+ if (themeParsed[value]) {
68
+ if (isWeb && themeParsed[value].variable) {
69
+ return themeParsed[value].variable;
70
+ } else {
71
+ if (value && value[0] === "$") {
72
+ return theme[`${value.slice(1)}`]?.val || themeParsed[value]?.val;
73
+ }
74
+ }
75
+ }
76
+ let valOrVar;
77
+ if (key === "fontFamily") {
78
+ valOrVar = tokensParsed.font[value]?.family || value;
79
+ }
80
+ if (key === "fontSize") {
81
+ valOrVar = tokensParsed.font[fontFamily]?.size[value] || value;
82
+ }
83
+ if (key === "lineHeight") {
84
+ valOrVar = tokensParsed.font[fontFamily]?.lineHeight[value] || value;
85
+ }
86
+ if (key === "letterSpacing") {
87
+ valOrVar = tokensParsed.font[fontFamily]?.letterSpacing[value] || value;
88
+ }
89
+ if (key === "fontWeight") {
90
+ valOrVar = tokensParsed.font[fontFamily]?.weight[value] || value;
91
+ }
92
+ if (typeof valOrVar !== "undefined") {
93
+ if (valOrVar instanceof Variable) {
94
+ return valOrVar.variable;
95
+ } else {
96
+ return valOrVar;
97
+ }
98
+ }
99
+ for (const cat in tokenCategories) {
100
+ if (tokenCategories[cat][key]) {
101
+ const res = tokensParsed[cat][value];
102
+ if (res) {
103
+ return res.variable;
104
+ } else {
105
+ const themeVar = themeParsed[value];
106
+ if (themeVar) {
107
+ return themeVar.variable;
108
+ }
109
+ }
110
+ }
111
+ }
112
+ const spaceVar = tokensParsed.space[value];
113
+ if (spaceVar) {
114
+ return spaceVar.variable;
115
+ }
116
+ return value;
117
+ }, "getToken");
118
+ const tokenCategories = {
119
+ size: {
120
+ width: true,
121
+ height: true,
122
+ minWidth: true,
123
+ minHeight: true,
124
+ maxWidth: true,
125
+ maxHeight: true
126
+ },
127
+ color: {
128
+ color: true,
129
+ backgroundColor: true,
130
+ borderColor: true,
131
+ borderBottomColor: true,
132
+ borderTopColor: true,
133
+ borderLeftColor: true,
134
+ borderRightColor: true
135
+ }
136
+ };
137
+ function parseVariants(variants, conf) {
138
+ return Object.keys(variants).reduce((acc, key) => {
139
+ acc[key] = Object.keys(variants[key]).reduce((vacc, vkey) => {
140
+ const variantVal = variants[key][vkey];
141
+ if (vkey.startsWith("...")) {
142
+ vacc["..."] = variantVal;
143
+ const tokenKey = vkey.slice(3);
144
+ const tokens = conf.tokens[tokenKey];
145
+ for (const tkey in tokens) {
146
+ vacc[`$${tkey}`] = variantVal;
147
+ }
148
+ } else {
149
+ vacc[vkey] = variantVal;
150
+ }
151
+ return vacc;
152
+ }, {});
153
+ return acc;
154
+ }, {});
155
+ }
156
+ __name(parseVariants, "parseVariants");
157
+ export {
158
+ createPropMapper
159
+ };
160
+ //# sourceMappingURL=createPropMapper.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/helpers/createPropMapper.ts"],
4
+ "sourcesContent": ["import { isWeb } from '../constants/platform'\nimport { getTamagui } from '../createTamagui'\nimport { Variable } from '../createVariable'\nimport { StaticConfig, TamaguiInternalConfig } from '../types'\nimport { isObj } from './isObj'\n\nexport const createPropMapper = (c: StaticConfig) => {\n const variants = c.variants\n let variantsParsed\n const defaultProps = c.defaultProps || {}\n\n return (key: string, value: any, theme: any, props: any) => {\n const conf = getTamagui()\n if (!conf) {\n console.trace('no conf! err')\n return\n }\n if (variants && !variantsParsed) {\n variantsParsed = parseVariants(variants, conf)\n }\n\n // handled here because we need to resolve this off tokens, its the only one-off like this\n let fontFamily = props.fontFamily || defaultProps.fontFamily || '$body'\n\n // expand variants\n const variant = variantsParsed?.[key]\n if (variant && typeof value !== 'undefined') {\n const val =\n value === true\n ? variant['$true'] || variant['true']\n : variant[value] ?? variant['...'] ?? value\n\n const res =\n typeof val === 'function'\n ? val(value, { tokens: conf.tokensParsed, theme, props })\n : isObj(val)\n ? { ...val }\n : val\n\n if (isObj(res)) {\n resolveTokens(res, conf, theme, fontFamily)\n }\n\n return res\n }\n\n let shouldReturn = false\n\n // handle shorthands\n if (conf.shorthands[key]) {\n shouldReturn = true\n key = conf.shorthands[key]\n }\n\n if (value && value[0] === '$') {\n shouldReturn = true\n value = getToken(key, value, conf, theme, fontFamily)\n }\n\n if (value instanceof Variable) {\n shouldReturn = true\n value = value.variable\n }\n\n if (shouldReturn) {\n return {\n [key]: value,\n }\n }\n }\n}\n\nconst resolveTokens = (res: any, conf: TamaguiInternalConfig, theme: any, fontFamily: any) => {\n for (const rKey in res) {\n const fKey = conf.shorthands[rKey] || rKey\n const val = res[rKey]\n if (val instanceof Variable) {\n res[fKey] = val.variable\n } else if (typeof val === 'string') {\n const fVal = val[0] === '$' ? getToken(fKey, val, conf, theme, fontFamily) : val\n res[fKey] = fVal\n } else {\n if (isObj(val)) {\n // for things like shadowOffset which is a sub-object\n resolveTokens(val, conf, theme, fontFamily)\n }\n // nullish values cant be tokens so need no exrta parsing\n }\n }\n}\n\nconst getToken = (\n key: string,\n value: string,\n { tokensParsed, themeParsed }: TamaguiInternalConfig,\n theme: any,\n fontFamily: string | undefined = '$body'\n) => {\n if (themeParsed[value]) {\n if (isWeb && themeParsed[value].variable) {\n return themeParsed[value].variable\n } else {\n if (value && value[0] === '$') {\n return theme[`${value.slice(1)}`]?.val || themeParsed[value]?.val\n }\n }\n }\n let valOrVar: any\n if (key === 'fontFamily') {\n valOrVar = tokensParsed.font[value]?.family || value\n }\n if (key === 'fontSize') {\n valOrVar = tokensParsed.font[fontFamily]?.size[value] || value\n }\n if (key === 'lineHeight') {\n valOrVar = tokensParsed.font[fontFamily]?.lineHeight[value] || value\n }\n if (key === 'letterSpacing') {\n valOrVar = tokensParsed.font[fontFamily]?.letterSpacing[value] || value\n }\n if (key === 'fontWeight') {\n valOrVar = tokensParsed.font[fontFamily]?.weight[value] || value\n }\n if (typeof valOrVar !== 'undefined') {\n if (valOrVar instanceof Variable) {\n return valOrVar.variable\n } else {\n return valOrVar\n }\n }\n for (const cat in tokenCategories) {\n if (tokenCategories[cat][key]) {\n const res = tokensParsed[cat][value]\n if (res) {\n return res.variable\n } else {\n const themeVar = themeParsed[value]\n if (themeVar) {\n return themeVar.variable\n }\n }\n }\n }\n const spaceVar = tokensParsed.space[value]\n if (spaceVar) {\n return spaceVar.variable\n }\n return value\n}\n\n// just specificy the least costly, all else go to `space` (most keys - we can exclude)\nconst tokenCategories = {\n size: {\n width: true,\n height: true,\n minWidth: true,\n minHeight: true,\n maxWidth: true,\n maxHeight: true,\n },\n color: {\n color: true,\n backgroundColor: true,\n borderColor: true,\n borderBottomColor: true,\n borderTopColor: true,\n borderLeftColor: true,\n borderRightColor: true,\n },\n}\n\n// turns variant spreads into individual lookups\nfunction parseVariants(variants: any, conf: TamaguiInternalConfig) {\n return Object.keys(variants).reduce((acc, key) => {\n acc[key] = Object.keys(variants[key]).reduce((vacc, vkey) => {\n const variantVal = variants[key][vkey]\n if (vkey.startsWith('...')) {\n // set the default one at '...' for easy fallback on non-exact-variant-match\n vacc['...'] = variantVal\n const tokenKey = vkey.slice(3)\n const tokens = conf.tokens[tokenKey]\n for (const tkey in tokens) {\n vacc[`$${tkey}`] = variantVal\n }\n } else {\n vacc[vkey] = variantVal\n }\n return vacc\n }, {})\n return acc\n }, {})\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }