@tamagui/core 1.0.1-beta.138 → 1.0.1-beta.141

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 (519) hide show
  1. package/dist/cjs/Tamagui.js +0 -0
  2. package/dist/cjs/Tamagui.js.map +0 -0
  3. package/dist/cjs/addTheme.js +0 -0
  4. package/dist/cjs/addTheme.js.map +0 -0
  5. package/dist/cjs/conf.js +0 -0
  6. package/dist/cjs/conf.js.map +0 -0
  7. package/dist/cjs/constants/constants.js +0 -0
  8. package/dist/cjs/constants/constants.js.map +0 -0
  9. package/dist/cjs/constants/platform.js +0 -0
  10. package/dist/cjs/constants/platform.js.map +0 -0
  11. package/dist/cjs/contexts/ButtonInsideButtonContext.js +0 -0
  12. package/dist/cjs/contexts/ButtonInsideButtonContext.js.map +0 -0
  13. package/dist/cjs/contexts/FontLanguageContext.js +0 -0
  14. package/dist/cjs/contexts/FontLanguageContext.js.map +0 -0
  15. package/dist/cjs/contexts/TextAncestorContext.js +0 -0
  16. package/dist/cjs/contexts/TextAncestorContext.js.map +0 -0
  17. package/dist/cjs/contexts/ThemeContext.js +0 -0
  18. package/dist/cjs/contexts/ThemeContext.js.map +0 -0
  19. package/dist/cjs/createComponent.js +14 -28
  20. package/dist/cjs/createComponent.js.map +2 -2
  21. package/dist/cjs/createFont.js +0 -0
  22. package/dist/cjs/createFont.js.map +0 -0
  23. package/dist/cjs/createShorthands.js +0 -0
  24. package/dist/cjs/createShorthands.js.map +0 -0
  25. package/dist/cjs/createTamagui.js +24 -27
  26. package/dist/cjs/createTamagui.js.map +2 -2
  27. package/dist/cjs/createTheme.js +0 -0
  28. package/dist/cjs/createTheme.js.map +0 -0
  29. package/dist/cjs/createTokens.js +0 -0
  30. package/dist/cjs/createTokens.js.map +0 -0
  31. package/dist/cjs/createVariable.js +18 -26
  32. package/dist/cjs/createVariable.js.map +2 -2
  33. package/dist/cjs/createVariables.js +0 -0
  34. package/dist/cjs/createVariables.js.map +0 -0
  35. package/dist/cjs/helpers/RNComponents.js +0 -0
  36. package/dist/cjs/helpers/RNComponents.js.map +0 -0
  37. package/dist/cjs/helpers/ThemeManager.js +0 -0
  38. package/dist/cjs/helpers/ThemeManager.js.map +0 -0
  39. package/dist/cjs/helpers/areEqualSets.js +0 -0
  40. package/dist/cjs/helpers/areEqualSets.js.map +0 -0
  41. package/dist/cjs/helpers/assignNativePropsToWeb.js +1 -0
  42. package/dist/cjs/helpers/assignNativePropsToWeb.js.map +2 -2
  43. package/dist/cjs/helpers/assignNativePropsToWeb.native.js +0 -0
  44. package/dist/cjs/helpers/assignNativePropsToWeb.native.js.map +0 -0
  45. package/dist/cjs/helpers/calc.js +0 -0
  46. package/dist/cjs/helpers/calc.js.map +0 -0
  47. package/dist/cjs/helpers/createMediaStyle.js +0 -0
  48. package/dist/cjs/helpers/createMediaStyle.js.map +0 -0
  49. package/dist/cjs/helpers/createPropMapper.js +2 -3
  50. package/dist/cjs/helpers/createPropMapper.js.map +2 -2
  51. package/dist/cjs/helpers/createShallowUpdate.js +0 -0
  52. package/dist/cjs/helpers/createShallowUpdate.js.map +0 -0
  53. package/dist/cjs/helpers/cssHash.js +0 -0
  54. package/dist/cjs/helpers/cssHash.js.map +0 -0
  55. package/dist/cjs/helpers/expandStyle.js +0 -0
  56. package/dist/cjs/helpers/expandStyle.js.map +0 -0
  57. package/dist/cjs/helpers/expandStyles.js +0 -0
  58. package/dist/cjs/helpers/expandStyles.js.map +0 -0
  59. package/dist/cjs/helpers/extendStaticConfig.js +0 -0
  60. package/dist/cjs/helpers/extendStaticConfig.js.map +0 -0
  61. package/dist/cjs/helpers/fixNativeShadow.js +0 -0
  62. package/dist/cjs/helpers/fixNativeShadow.js.map +0 -0
  63. package/dist/cjs/helpers/getExpandedShorthands.js +0 -0
  64. package/dist/cjs/helpers/getExpandedShorthands.js.map +0 -0
  65. package/dist/cjs/helpers/getFont.js +0 -0
  66. package/dist/cjs/helpers/getFont.js.map +0 -0
  67. package/dist/cjs/helpers/getFontLanguage.js +0 -0
  68. package/dist/cjs/helpers/getFontLanguage.js.map +0 -0
  69. package/dist/cjs/helpers/getSize.js +0 -0
  70. package/dist/cjs/helpers/getSize.js.map +0 -0
  71. package/dist/cjs/helpers/getSplitStyles.js +11 -2
  72. package/dist/cjs/helpers/getSplitStyles.js.map +2 -2
  73. package/dist/cjs/helpers/getStackSize.js +0 -0
  74. package/dist/cjs/helpers/getStackSize.js.map +0 -0
  75. package/dist/cjs/helpers/getStylesAtomic.js +0 -0
  76. package/dist/cjs/helpers/getStylesAtomic.js.map +0 -0
  77. package/dist/cjs/helpers/getStylesAtomic.native.js +0 -0
  78. package/dist/cjs/helpers/getStylesAtomic.native.js.map +0 -0
  79. package/dist/cjs/helpers/getThemeCSSRules.js +0 -0
  80. package/dist/cjs/helpers/getThemeCSSRules.js.map +0 -0
  81. package/dist/cjs/helpers/getThemeCSSRules.native.js +0 -0
  82. package/dist/cjs/helpers/getThemeCSSRules.native.js.map +0 -0
  83. package/dist/cjs/helpers/getVariantExtras.js +6 -6
  84. package/dist/cjs/helpers/getVariantExtras.js.map +2 -2
  85. package/dist/cjs/helpers/insertStyleRule.js +6 -1
  86. package/dist/cjs/helpers/insertStyleRule.js.map +2 -2
  87. package/dist/cjs/helpers/isObj.js +0 -0
  88. package/dist/cjs/helpers/isObj.js.map +0 -0
  89. package/dist/cjs/helpers/isTamaguiComponent.js +0 -0
  90. package/dist/cjs/helpers/isTamaguiComponent.js.map +0 -0
  91. package/dist/cjs/helpers/isTamaguiElement.js +0 -0
  92. package/dist/cjs/helpers/isTamaguiElement.js.map +0 -0
  93. package/dist/cjs/helpers/matchMedia.js +0 -0
  94. package/dist/cjs/helpers/matchMedia.js.map +0 -0
  95. package/dist/cjs/helpers/matchMedia.native.js +0 -0
  96. package/dist/cjs/helpers/matchMedia.native.js.map +0 -0
  97. package/dist/cjs/helpers/mergeProps.js +18 -14
  98. package/dist/cjs/helpers/mergeProps.js.map +2 -2
  99. package/dist/cjs/helpers/mergeTransform.js +0 -0
  100. package/dist/cjs/helpers/mergeTransform.js.map +0 -0
  101. package/dist/cjs/helpers/normalizeColor.js +0 -0
  102. package/dist/cjs/helpers/normalizeColor.js.map +0 -0
  103. package/dist/cjs/helpers/normalizeValueWithProperty.js +0 -0
  104. package/dist/cjs/helpers/normalizeValueWithProperty.js.map +0 -0
  105. package/dist/cjs/helpers/proxyThemeVariables.js +0 -0
  106. package/dist/cjs/helpers/proxyThemeVariables.js.map +0 -0
  107. package/dist/cjs/helpers/pseudoDescriptors.js +0 -0
  108. package/dist/cjs/helpers/pseudoDescriptors.js.map +0 -0
  109. package/dist/cjs/helpers/registerCSSVariable.js +0 -0
  110. package/dist/cjs/helpers/registerCSSVariable.js.map +2 -2
  111. package/dist/cjs/helpers/startTransition.js +0 -0
  112. package/dist/cjs/helpers/startTransition.js.map +0 -0
  113. package/dist/cjs/helpers/themeable.js +0 -0
  114. package/dist/cjs/helpers/themeable.js.map +0 -0
  115. package/dist/cjs/helpers/themes.js +0 -0
  116. package/dist/cjs/helpers/themes.js.map +0 -0
  117. package/dist/cjs/helpers/validate.js +0 -0
  118. package/dist/cjs/helpers/validate.js.map +0 -0
  119. package/dist/cjs/helpers/withStaticProperties.js +0 -0
  120. package/dist/cjs/helpers/withStaticProperties.js.map +0 -0
  121. package/dist/cjs/hooks/getThemeUnwrapped.js +0 -0
  122. package/dist/cjs/hooks/getThemeUnwrapped.js.map +0 -0
  123. package/dist/cjs/hooks/useConstant.js +3 -0
  124. package/dist/cjs/hooks/useConstant.js.map +2 -2
  125. package/dist/cjs/hooks/useFeatures.js +8 -0
  126. package/dist/cjs/hooks/useFeatures.js.map +2 -2
  127. package/dist/cjs/hooks/useId.js +2 -32
  128. package/dist/cjs/hooks/useId.js.map +2 -2
  129. package/dist/cjs/hooks/useIsMounted.js +0 -0
  130. package/dist/cjs/hooks/useIsMounted.js.map +0 -0
  131. package/dist/cjs/hooks/useIsSSR.js +2 -2
  132. package/dist/cjs/hooks/useIsSSR.js.map +2 -2
  133. package/dist/cjs/hooks/useIsTouchDevice.js +0 -0
  134. package/dist/cjs/hooks/useIsTouchDevice.js.map +0 -0
  135. package/dist/cjs/hooks/useMedia.js +75 -92
  136. package/dist/cjs/hooks/useMedia.js.map +2 -2
  137. package/dist/cjs/hooks/usePressable.js +0 -0
  138. package/dist/cjs/hooks/usePressable.js.map +0 -0
  139. package/dist/cjs/hooks/useSafeRef.js +60 -0
  140. package/dist/cjs/hooks/useSafeRef.js.map +7 -0
  141. package/dist/cjs/hooks/useTheme.js +3 -5
  142. package/dist/cjs/hooks/useTheme.js.map +2 -2
  143. package/dist/cjs/hooks/useUnmountEffect.js +0 -0
  144. package/dist/cjs/hooks/useUnmountEffect.js.map +0 -0
  145. package/dist/cjs/index.js +21 -3
  146. package/dist/cjs/index.js.map +2 -2
  147. package/dist/cjs/insertFont.js +0 -0
  148. package/dist/cjs/insertFont.js.map +1 -1
  149. package/dist/cjs/static.js +0 -0
  150. package/dist/cjs/static.js.map +0 -0
  151. package/dist/cjs/styled.js +0 -0
  152. package/dist/cjs/styled.js.map +0 -0
  153. package/dist/cjs/types-rnw.js +0 -0
  154. package/dist/cjs/types-rnw.js.map +0 -0
  155. package/dist/cjs/types.js +0 -0
  156. package/dist/cjs/types.js.map +1 -1
  157. package/dist/cjs/updateTheme.js +0 -0
  158. package/dist/cjs/updateTheme.js.map +0 -0
  159. package/dist/cjs/vendor/Pressability.js +0 -0
  160. package/dist/cjs/vendor/Pressability.js.map +0 -0
  161. package/dist/cjs/vendor/Pressability.native.js +0 -0
  162. package/dist/cjs/vendor/Pressability.native.js.map +0 -0
  163. package/dist/cjs/views/FontLanguage.js +0 -0
  164. package/dist/cjs/views/FontLanguage.js.map +0 -0
  165. package/dist/cjs/views/FontLanguage.native.js +0 -0
  166. package/dist/cjs/views/FontLanguage.native.js.map +0 -0
  167. package/dist/cjs/views/FontLanguage.types.js +0 -0
  168. package/dist/cjs/views/FontLanguage.types.js.map +0 -0
  169. package/dist/cjs/views/Slot.js +2 -2
  170. package/dist/cjs/views/Slot.js.map +2 -2
  171. package/dist/cjs/views/Stack.js +0 -0
  172. package/dist/cjs/views/Stack.js.map +0 -0
  173. package/dist/cjs/{helpers/createTamaguiProvider.js → views/TamaguiProvider.js} +37 -34
  174. package/dist/cjs/views/TamaguiProvider.js.map +7 -0
  175. package/dist/cjs/views/Text.js +0 -0
  176. package/dist/cjs/views/Text.js.map +0 -0
  177. package/dist/cjs/views/Theme.js +4 -3
  178. package/dist/cjs/views/Theme.js.map +2 -2
  179. package/dist/cjs/views/ThemeInverse.js +0 -0
  180. package/dist/cjs/views/ThemeInverse.js.map +0 -0
  181. package/dist/cjs/views/ThemeProvider.js +2 -2
  182. package/dist/cjs/views/ThemeProvider.js.map +2 -2
  183. package/dist/cjs/views/ThemeReset.js +0 -0
  184. package/dist/cjs/views/ThemeReset.js.map +0 -0
  185. package/dist/esm/Tamagui.js +0 -0
  186. package/dist/esm/Tamagui.js.map +0 -0
  187. package/dist/esm/addTheme.js +0 -0
  188. package/dist/esm/addTheme.js.map +0 -0
  189. package/dist/esm/conf.js +0 -0
  190. package/dist/esm/conf.js.map +0 -0
  191. package/dist/esm/constants/constants.js +0 -0
  192. package/dist/esm/constants/constants.js.map +0 -0
  193. package/dist/esm/constants/platform.js +0 -0
  194. package/dist/esm/constants/platform.js.map +0 -0
  195. package/dist/esm/contexts/ButtonInsideButtonContext.js +0 -0
  196. package/dist/esm/contexts/ButtonInsideButtonContext.js.map +0 -0
  197. package/dist/esm/contexts/FontLanguageContext.js +0 -0
  198. package/dist/esm/contexts/FontLanguageContext.js.map +0 -0
  199. package/dist/esm/contexts/TextAncestorContext.js +0 -0
  200. package/dist/esm/contexts/TextAncestorContext.js.map +0 -0
  201. package/dist/esm/contexts/ThemeContext.js +0 -0
  202. package/dist/esm/contexts/ThemeContext.js.map +0 -0
  203. package/dist/esm/createComponent.js +15 -29
  204. package/dist/esm/createComponent.js.map +2 -2
  205. package/dist/esm/createFont.js +0 -0
  206. package/dist/esm/createFont.js.map +0 -0
  207. package/dist/esm/createShorthands.js +0 -0
  208. package/dist/esm/createShorthands.js.map +0 -0
  209. package/dist/esm/createTamagui.js +24 -27
  210. package/dist/esm/createTamagui.js.map +2 -2
  211. package/dist/esm/createTheme.js +0 -0
  212. package/dist/esm/createTheme.js.map +0 -0
  213. package/dist/esm/createTokens.js +0 -0
  214. package/dist/esm/createTokens.js.map +0 -0
  215. package/dist/esm/createVariable.js +16 -24
  216. package/dist/esm/createVariable.js.map +2 -2
  217. package/dist/esm/createVariables.js +0 -0
  218. package/dist/esm/createVariables.js.map +0 -0
  219. package/dist/esm/helpers/RNComponents.js +0 -0
  220. package/dist/esm/helpers/RNComponents.js.map +0 -0
  221. package/dist/esm/helpers/ThemeManager.js +0 -0
  222. package/dist/esm/helpers/ThemeManager.js.map +0 -0
  223. package/dist/esm/helpers/areEqualSets.js +0 -0
  224. package/dist/esm/helpers/areEqualSets.js.map +0 -0
  225. package/dist/esm/helpers/assignNativePropsToWeb.js +1 -0
  226. package/dist/esm/helpers/assignNativePropsToWeb.js.map +2 -2
  227. package/dist/esm/helpers/assignNativePropsToWeb.native.js +0 -0
  228. package/dist/esm/helpers/assignNativePropsToWeb.native.js.map +0 -0
  229. package/dist/esm/helpers/calc.js +0 -0
  230. package/dist/esm/helpers/calc.js.map +0 -0
  231. package/dist/esm/helpers/createMediaStyle.js +0 -0
  232. package/dist/esm/helpers/createMediaStyle.js.map +0 -0
  233. package/dist/esm/helpers/createPropMapper.js +2 -3
  234. package/dist/esm/helpers/createPropMapper.js.map +2 -2
  235. package/dist/esm/helpers/createShallowUpdate.js +0 -0
  236. package/dist/esm/helpers/createShallowUpdate.js.map +0 -0
  237. package/dist/esm/helpers/cssHash.js +0 -0
  238. package/dist/esm/helpers/cssHash.js.map +0 -0
  239. package/dist/esm/helpers/expandStyle.js +0 -0
  240. package/dist/esm/helpers/expandStyle.js.map +0 -0
  241. package/dist/esm/helpers/expandStyles.js +0 -0
  242. package/dist/esm/helpers/expandStyles.js.map +0 -0
  243. package/dist/esm/helpers/extendStaticConfig.js +0 -0
  244. package/dist/esm/helpers/extendStaticConfig.js.map +0 -0
  245. package/dist/esm/helpers/fixNativeShadow.js +0 -0
  246. package/dist/esm/helpers/fixNativeShadow.js.map +0 -0
  247. package/dist/esm/helpers/getExpandedShorthands.js +0 -0
  248. package/dist/esm/helpers/getExpandedShorthands.js.map +0 -0
  249. package/dist/esm/helpers/getFont.js +0 -0
  250. package/dist/esm/helpers/getFont.js.map +0 -0
  251. package/dist/esm/helpers/getFontLanguage.js +0 -0
  252. package/dist/esm/helpers/getFontLanguage.js.map +0 -0
  253. package/dist/esm/helpers/getSize.js +0 -0
  254. package/dist/esm/helpers/getSize.js.map +0 -0
  255. package/dist/esm/helpers/getSplitStyles.js +11 -2
  256. package/dist/esm/helpers/getSplitStyles.js.map +2 -2
  257. package/dist/esm/helpers/getStackSize.js +0 -0
  258. package/dist/esm/helpers/getStackSize.js.map +0 -0
  259. package/dist/esm/helpers/getStylesAtomic.js +0 -0
  260. package/dist/esm/helpers/getStylesAtomic.js.map +0 -0
  261. package/dist/esm/helpers/getStylesAtomic.native.js +0 -0
  262. package/dist/esm/helpers/getStylesAtomic.native.js.map +0 -0
  263. package/dist/esm/helpers/getThemeCSSRules.js +0 -0
  264. package/dist/esm/helpers/getThemeCSSRules.js.map +0 -0
  265. package/dist/esm/helpers/getThemeCSSRules.native.js +0 -0
  266. package/dist/esm/helpers/getThemeCSSRules.native.js.map +0 -0
  267. package/dist/esm/helpers/getVariantExtras.js +6 -6
  268. package/dist/esm/helpers/getVariantExtras.js.map +2 -2
  269. package/dist/esm/helpers/insertStyleRule.js +6 -1
  270. package/dist/esm/helpers/insertStyleRule.js.map +2 -2
  271. package/dist/esm/helpers/isObj.js +0 -0
  272. package/dist/esm/helpers/isObj.js.map +0 -0
  273. package/dist/esm/helpers/isTamaguiComponent.js +0 -0
  274. package/dist/esm/helpers/isTamaguiComponent.js.map +0 -0
  275. package/dist/esm/helpers/isTamaguiElement.js +0 -0
  276. package/dist/esm/helpers/isTamaguiElement.js.map +0 -0
  277. package/dist/esm/helpers/matchMedia.js +0 -0
  278. package/dist/esm/helpers/matchMedia.js.map +0 -0
  279. package/dist/esm/helpers/matchMedia.native.js +0 -0
  280. package/dist/esm/helpers/matchMedia.native.js.map +0 -0
  281. package/dist/esm/helpers/mergeProps.js +18 -14
  282. package/dist/esm/helpers/mergeProps.js.map +2 -2
  283. package/dist/esm/helpers/mergeTransform.js +0 -0
  284. package/dist/esm/helpers/mergeTransform.js.map +0 -0
  285. package/dist/esm/helpers/normalizeColor.js +0 -0
  286. package/dist/esm/helpers/normalizeColor.js.map +0 -0
  287. package/dist/esm/helpers/normalizeValueWithProperty.js +0 -0
  288. package/dist/esm/helpers/normalizeValueWithProperty.js.map +0 -0
  289. package/dist/esm/helpers/proxyThemeVariables.js +0 -0
  290. package/dist/esm/helpers/proxyThemeVariables.js.map +0 -0
  291. package/dist/esm/helpers/pseudoDescriptors.js +0 -0
  292. package/dist/esm/helpers/pseudoDescriptors.js.map +0 -0
  293. package/dist/esm/helpers/registerCSSVariable.js +0 -0
  294. package/dist/esm/helpers/registerCSSVariable.js.map +2 -2
  295. package/dist/esm/helpers/startTransition.js +0 -0
  296. package/dist/esm/helpers/startTransition.js.map +0 -0
  297. package/dist/esm/helpers/themeable.js +0 -0
  298. package/dist/esm/helpers/themeable.js.map +0 -0
  299. package/dist/esm/helpers/themes.js +0 -0
  300. package/dist/esm/helpers/themes.js.map +0 -0
  301. package/dist/esm/helpers/validate.js +0 -0
  302. package/dist/esm/helpers/validate.js.map +0 -0
  303. package/dist/esm/helpers/withStaticProperties.js +0 -0
  304. package/dist/esm/helpers/withStaticProperties.js.map +0 -0
  305. package/dist/esm/hooks/getThemeUnwrapped.js +0 -0
  306. package/dist/esm/hooks/getThemeUnwrapped.js.map +0 -0
  307. package/dist/esm/hooks/useConstant.js +4 -1
  308. package/dist/esm/hooks/useConstant.js.map +2 -2
  309. package/dist/esm/hooks/useFeatures.js +8 -0
  310. package/dist/esm/hooks/useFeatures.js.map +2 -2
  311. package/dist/esm/hooks/useId.js +1 -28
  312. package/dist/esm/hooks/useId.js.map +2 -2
  313. package/dist/esm/hooks/useIsMounted.js +0 -0
  314. package/dist/esm/hooks/useIsMounted.js.map +0 -0
  315. package/dist/esm/hooks/useIsSSR.js +4 -4
  316. package/dist/esm/hooks/useIsSSR.js.map +2 -2
  317. package/dist/esm/hooks/useIsTouchDevice.js +0 -0
  318. package/dist/esm/hooks/useIsTouchDevice.js.map +0 -0
  319. package/dist/esm/hooks/useMedia.js +74 -92
  320. package/dist/esm/hooks/useMedia.js.map +2 -2
  321. package/dist/esm/hooks/usePressable.js +0 -0
  322. package/dist/esm/hooks/usePressable.js.map +0 -0
  323. package/dist/esm/hooks/useSafeRef.js +36 -0
  324. package/dist/esm/hooks/useSafeRef.js.map +7 -0
  325. package/dist/esm/hooks/useTheme.js +4 -6
  326. package/dist/esm/hooks/useTheme.js.map +2 -2
  327. package/dist/esm/hooks/useUnmountEffect.js +0 -0
  328. package/dist/esm/hooks/useUnmountEffect.js.map +0 -0
  329. package/dist/esm/index.js +21 -2
  330. package/dist/esm/index.js.map +2 -2
  331. package/dist/esm/insertFont.js +0 -0
  332. package/dist/esm/insertFont.js.map +1 -1
  333. package/dist/esm/static.js +0 -0
  334. package/dist/esm/static.js.map +0 -0
  335. package/dist/esm/styled.js +0 -0
  336. package/dist/esm/styled.js.map +0 -0
  337. package/dist/esm/types-rnw.js +0 -0
  338. package/dist/esm/types-rnw.js.map +0 -0
  339. package/dist/esm/types.js +0 -0
  340. package/dist/esm/types.js.map +0 -0
  341. package/dist/esm/updateTheme.js +0 -0
  342. package/dist/esm/updateTheme.js.map +0 -0
  343. package/dist/esm/vendor/Pressability.js +0 -0
  344. package/dist/esm/vendor/Pressability.js.map +0 -0
  345. package/dist/esm/vendor/Pressability.native.js +0 -0
  346. package/dist/esm/vendor/Pressability.native.js.map +0 -0
  347. package/dist/esm/views/FontLanguage.js +0 -0
  348. package/dist/esm/views/FontLanguage.js.map +0 -0
  349. package/dist/esm/views/FontLanguage.native.js +0 -0
  350. package/dist/esm/views/FontLanguage.native.js.map +0 -0
  351. package/dist/esm/views/FontLanguage.types.js +0 -0
  352. package/dist/esm/views/FontLanguage.types.js.map +0 -0
  353. package/dist/esm/views/Slot.js +2 -2
  354. package/dist/esm/views/Slot.js.map +2 -2
  355. package/dist/esm/views/Stack.js +0 -0
  356. package/dist/esm/views/Stack.js.map +0 -0
  357. package/dist/esm/views/TamaguiProvider.js +41 -0
  358. package/dist/esm/views/TamaguiProvider.js.map +7 -0
  359. package/dist/esm/views/Text.js +0 -0
  360. package/dist/esm/views/Text.js.map +0 -0
  361. package/dist/esm/views/Theme.js +4 -3
  362. package/dist/esm/views/Theme.js.map +2 -2
  363. package/dist/esm/views/ThemeInverse.js +0 -0
  364. package/dist/esm/views/ThemeInverse.js.map +0 -0
  365. package/dist/esm/views/ThemeProvider.js +2 -2
  366. package/dist/esm/views/ThemeProvider.js.map +2 -2
  367. package/dist/esm/views/ThemeReset.js +0 -0
  368. package/dist/esm/views/ThemeReset.js.map +0 -0
  369. package/package.json +9 -8
  370. package/src/Tamagui.ts +44 -0
  371. package/src/addTheme.ts +54 -0
  372. package/src/conf.ts +34 -0
  373. package/src/constants/constants.ts +15 -0
  374. package/src/constants/platform.ts +13 -0
  375. package/src/contexts/ButtonInsideButtonContext.tsx +3 -0
  376. package/src/contexts/FontLanguageContext.tsx +5 -0
  377. package/src/contexts/TextAncestorContext.tsx +10 -0
  378. package/src/contexts/ThemeContext.tsx +5 -0
  379. package/src/createComponent.tsx +1322 -0
  380. package/src/createFont.ts +26 -0
  381. package/src/createShorthands.ts +5 -0
  382. package/src/createTamagui.ts +226 -0
  383. package/src/createTheme.ts +13 -0
  384. package/src/createTokens.ts +35 -0
  385. package/src/createVariable.ts +94 -0
  386. package/src/createVariables.ts +39 -0
  387. package/src/helpers/RNComponents.tsx +14 -0
  388. package/src/helpers/ThemeManager.tsx +226 -0
  389. package/src/helpers/areEqualSets.tsx +9 -0
  390. package/src/helpers/assignNativePropsToWeb.native.tsx +1 -0
  391. package/src/helpers/assignNativePropsToWeb.tsx +179 -0
  392. package/src/helpers/calc.ts +65 -0
  393. package/src/helpers/createMediaStyle.ts +48 -0
  394. package/src/helpers/createPropMapper.ts +457 -0
  395. package/src/helpers/createShallowUpdate.tsx +20 -0
  396. package/src/helpers/cssHash.ts +28 -0
  397. package/src/helpers/expandStyle.ts +81 -0
  398. package/src/helpers/expandStyles.ts +104 -0
  399. package/src/helpers/extendStaticConfig.ts +76 -0
  400. package/src/helpers/fixNativeShadow.tsx +2 -0
  401. package/src/helpers/getExpandedShorthands.ts +15 -0
  402. package/src/helpers/getFont.tsx +40 -0
  403. package/src/helpers/getFontLanguage.ts +2 -0
  404. package/src/helpers/getSize.ts +22 -0
  405. package/src/helpers/getSplitStyles.tsx +686 -0
  406. package/src/helpers/getStackSize.ts +22 -0
  407. package/src/helpers/getStylesAtomic.native.ts +3 -0
  408. package/src/helpers/getStylesAtomic.ts +289 -0
  409. package/src/helpers/getThemeCSSRules.native.ts +3 -0
  410. package/src/helpers/getThemeCSSRules.ts +105 -0
  411. package/src/helpers/getVariantExtras.tsx +83 -0
  412. package/src/helpers/insertStyleRule.tsx +150 -0
  413. package/src/helpers/isObj.ts +1 -0
  414. package/src/helpers/isTamaguiComponent.tsx +15 -0
  415. package/src/helpers/isTamaguiElement.tsx +14 -0
  416. package/src/helpers/matchMedia.native.ts +6 -0
  417. package/src/helpers/matchMedia.ts +16 -0
  418. package/src/helpers/mergeProps.ts +56 -0
  419. package/src/helpers/mergeTransform.ts +14 -0
  420. package/src/helpers/normalizeColor.ts +53 -0
  421. package/src/helpers/normalizeValueWithProperty.ts +76 -0
  422. package/src/helpers/proxyThemeVariables.tsx +13 -0
  423. package/src/helpers/pseudoDescriptors.ts +18 -0
  424. package/src/helpers/registerCSSVariable.ts +11 -0
  425. package/src/helpers/startTransition.ts +4 -0
  426. package/src/helpers/themeable.tsx +45 -0
  427. package/src/helpers/themes.ts +69 -0
  428. package/src/helpers/validate.ts +80 -0
  429. package/src/helpers/withStaticProperties.tsx +7 -0
  430. package/src/hooks/getThemeUnwrapped.tsx +7 -0
  431. package/src/hooks/useConstant.tsx +19 -0
  432. package/src/hooks/useFeatures.tsx +288 -0
  433. package/src/hooks/useId.tsx +1 -0
  434. package/src/hooks/useIsMounted.ts +17 -0
  435. package/src/hooks/useIsSSR.tsx +20 -0
  436. package/src/hooks/useIsTouchDevice.tsx +21 -0
  437. package/src/hooks/useMedia.tsx +167 -0
  438. package/src/hooks/usePressable.tsx +9 -0
  439. package/src/hooks/useSafeRef.ts +50 -0
  440. package/src/hooks/useTheme.tsx +218 -0
  441. package/src/hooks/useUnmountEffect.ts +5 -0
  442. package/src/index.ts +79 -0
  443. package/src/insertFont.ts +69 -0
  444. package/src/static.ts +15 -0
  445. package/src/styled.tsx +135 -0
  446. package/src/types-rnw.tsx +162 -0
  447. package/src/types.tsx +1234 -0
  448. package/src/updateTheme.ts +23 -0
  449. package/src/vendor/Pressability.native.tsx +3 -0
  450. package/src/vendor/Pressability.tsx +2 -0
  451. package/src/views/FontLanguage.native.tsx +9 -0
  452. package/src/views/FontLanguage.tsx +18 -0
  453. package/src/views/FontLanguage.types.ts +13 -0
  454. package/src/views/Slot.tsx +152 -0
  455. package/src/views/Stack.tsx +24 -0
  456. package/src/views/TamaguiProvider.tsx +50 -0
  457. package/src/views/Text.tsx +79 -0
  458. package/src/views/Theme.tsx +72 -0
  459. package/src/views/ThemeInverse.tsx +33 -0
  460. package/src/views/ThemeProvider.tsx +59 -0
  461. package/src/views/ThemeReset.tsx +43 -0
  462. package/types/conf.d.ts +1 -1
  463. package/types/createTamagui.d.ts +1 -1
  464. package/types/createTheme.d.ts +1 -1
  465. package/types/createVariable.d.ts +16 -12
  466. package/types/helpers/getSplitStyles.d.ts +1 -0
  467. package/types/helpers/mergeProps.d.ts +3 -1
  468. package/types/helpers/registerCSSVariable.d.ts +2 -2
  469. package/types/hooks/useId.d.ts +1 -8
  470. package/types/hooks/useMedia.d.ts +2 -1
  471. package/types/hooks/useSafeRef.d.ts +4 -0
  472. package/types/index.d.ts +3 -1
  473. package/types/types.d.ts +3 -3
  474. package/types/views/TamaguiProvider.d.ts +4 -0
  475. package/dist/cjs/Pressability.js +0 -32
  476. package/dist/cjs/Pressability.js.map +0 -7
  477. package/dist/cjs/Pressability.native.js +0 -32
  478. package/dist/cjs/Pressability.native.js.map +0 -7
  479. package/dist/cjs/ThemeContext.js +0 -30
  480. package/dist/cjs/ThemeContext.js.map +0 -7
  481. package/dist/cjs/ThemeManager.js +0 -211
  482. package/dist/cjs/ThemeManager.js.map +0 -7
  483. package/dist/cjs/defaultComponentState.js +0 -2
  484. package/dist/cjs/defaultComponentState.js.map +0 -7
  485. package/dist/cjs/ensureThemeVariable.js +0 -152
  486. package/dist/cjs/ensureThemeVariable.js.map +0 -7
  487. package/dist/cjs/helpers/createTamaguiProvider.js.map +0 -7
  488. package/dist/cjs/helpers/ensureThemeVariable.js +0 -152
  489. package/dist/cjs/helpers/ensureThemeVariable.js.map +0 -7
  490. package/dist/cjs/helpers/nativeGestureHandler.native.js +0 -19
  491. package/dist/cjs/helpers/nativeGestureHandler.native.js.map +0 -7
  492. package/dist/cjs/loadTheme.js +0 -64
  493. package/dist/cjs/loadTheme.js.map +0 -7
  494. package/dist/cjs/views/TextAncestorContext.js +0 -44
  495. package/dist/cjs/views/TextAncestorContext.js.map +0 -7
  496. package/dist/esm/Pressability.js +0 -7
  497. package/dist/esm/Pressability.js.map +0 -7
  498. package/dist/esm/Pressability.native.js +0 -7
  499. package/dist/esm/Pressability.native.js.map +0 -7
  500. package/dist/esm/ThemeContext.js +0 -6
  501. package/dist/esm/ThemeContext.js.map +0 -7
  502. package/dist/esm/ThemeManager.js +0 -185
  503. package/dist/esm/ThemeManager.js.map +0 -7
  504. package/dist/esm/defaultComponentState.js +0 -1
  505. package/dist/esm/defaultComponentState.js.map +0 -7
  506. package/dist/esm/ensureThemeVariable.js +0 -125
  507. package/dist/esm/ensureThemeVariable.js.map +0 -7
  508. package/dist/esm/helpers/createTamaguiProvider.js +0 -38
  509. package/dist/esm/helpers/createTamaguiProvider.js.map +0 -7
  510. package/dist/esm/helpers/ensureThemeVariable.js +0 -125
  511. package/dist/esm/helpers/ensureThemeVariable.js.map +0 -7
  512. package/dist/esm/helpers/nativeGestureHandler.native.js +0 -2
  513. package/dist/esm/helpers/nativeGestureHandler.native.js.map +0 -7
  514. package/dist/esm/loadTheme.js +0 -40
  515. package/dist/esm/loadTheme.js.map +0 -7
  516. package/dist/esm/views/TextAncestorContext.js +0 -15
  517. package/dist/esm/views/TextAncestorContext.js.map +0 -7
  518. package/types/helpers/createTamaguiProvider.d.ts +0 -4
  519. package/types/helpers/nativeGestureHandler.native.d.ts +0 -2
@@ -0,0 +1,26 @@
1
+ import { GenericFont } from './types'
2
+
3
+ export const createFont = <A extends GenericFont>(font: A): A => {
4
+ // fills in any missing values based on size keys being standard
5
+ const sizeKeys = Object.keys(font.size)
6
+
7
+ for (const key in font) {
8
+ if (key === 'size' || key === 'family') continue
9
+ const section = font[key] as Object
10
+ const keys = Object.keys(section)
11
+
12
+ // fill with first filled in value to start
13
+ let fillVal = section[keys[0]]
14
+
15
+ for (const sKey of sizeKeys) {
16
+ if (!(sKey in section)) {
17
+ section[sKey] = fillVal
18
+ } else {
19
+ // if exists, set as the fillVal
20
+ fillVal = section[sKey]
21
+ }
22
+ }
23
+ }
24
+
25
+ return Object.freeze(font)
26
+ }
@@ -0,0 +1,5 @@
1
+ // type helper
2
+
3
+ export function createShorthands<A extends Record<string, string>>(shorthands: A): A {
4
+ return Object.freeze(shorthands) as any
5
+ }
@@ -0,0 +1,226 @@
1
+ import { configListeners, setConfig } from './conf'
2
+ import { isWeb } from './constants/platform'
3
+ import { createVariables } from './createVariables'
4
+ import { getThemeCSSRules } from './helpers/getThemeCSSRules'
5
+ import { getAllRules } from './helpers/insertStyleRule'
6
+ import {
7
+ registerCSSVariable,
8
+ tokensValueToVariable,
9
+ variableToCSS,
10
+ } from './helpers/registerCSSVariable'
11
+ import { ensureThemeVariable, proxyThemeToParents } from './helpers/themes'
12
+ import { configureMedia } from './hooks/useMedia'
13
+ import { parseFont, registerFontVariables } from './insertFont'
14
+ import { Tamagui } from './Tamagui'
15
+ import { CreateTamaguiProps, InferTamaguiConfig, TamaguiInternalConfig, ThemeObject } from './types'
16
+
17
+ // config is re-run by the @tamagui/static, dont double validate
18
+ const createdConfigs = new WeakMap<any, boolean>()
19
+
20
+ export function createTamagui<Conf extends CreateTamaguiProps>(
21
+ configIn: Conf
22
+ ): InferTamaguiConfig<Conf> {
23
+ if (createdConfigs.has(configIn)) {
24
+ return configIn as any
25
+ }
26
+
27
+ if (process.env.NODE_ENV === 'development') {
28
+ if (!configIn.tokens) {
29
+ throw new Error(`Must define tokens`)
30
+ }
31
+ if (!configIn.themes) {
32
+ throw new Error(`Must define themes`)
33
+ }
34
+ if (!configIn.fonts) {
35
+ throw new Error(`Must define fonts`)
36
+ }
37
+ }
38
+
39
+ configureMedia({
40
+ queries: configIn.media as any,
41
+ defaultActive: configIn.mediaQueryDefaultActive,
42
+ })
43
+
44
+ const fontTokens = createVariables(configIn.fonts!, '', true)
45
+ const fontsParsed = (() => {
46
+ const res = {} as typeof fontTokens
47
+ for (const familyName in fontTokens) {
48
+ res[`$${familyName}`] = parseFont(fontTokens[familyName])
49
+ }
50
+ return res!
51
+ })()
52
+
53
+ const themeConfig = (() => {
54
+ const themes = { ...configIn.themes }
55
+ let cssRuleSets: string[] = []
56
+
57
+ if (isWeb) {
58
+ const declarations: string[] = []
59
+ const fontDeclarations: Record<
60
+ string,
61
+ { name: string; declarations: string[]; language?: string }
62
+ > = {}
63
+
64
+ for (const key in configIn.tokens) {
65
+ for (const skey in configIn.tokens[key]) {
66
+ const val = configIn.tokens[key][skey]
67
+ registerCSSVariable(val)
68
+ declarations.push(variableToCSS(val))
69
+ }
70
+ }
71
+
72
+ for (const key in fontsParsed) {
73
+ const fontParsed = fontsParsed[key]
74
+ const [name, language] = key.includes('_') ? key.split('_') : [key]
75
+ const fontVars = registerFontVariables(fontParsed)
76
+ fontDeclarations[key] = { name: name.slice(1), declarations: fontVars, language }
77
+ }
78
+
79
+ const sep = process.env.NODE_ENV === 'development' ? configIn.cssStyleSeparator || ' ' : ''
80
+
81
+ function declarationsToRuleSet(decs: string[], selector = '') {
82
+ return `:root${selector} {${sep}${[...decs].join(`;${sep}`)}${sep}}`
83
+ }
84
+
85
+ // non-font
86
+ cssRuleSets.push(declarationsToRuleSet(declarations))
87
+
88
+ // fonts
89
+ if (fontDeclarations) {
90
+ for (const key in fontDeclarations) {
91
+ const { name, declarations, language = 'default' } = fontDeclarations[key]
92
+ const fontSelector = `.font_${name}`
93
+ const langSelector = `:root .t_lang-${name}-${language} ${fontSelector}`
94
+ const selectors =
95
+ language === 'default' ? ` ${fontSelector}, ${langSelector}` : langSelector
96
+ const specificRuleSet = declarationsToRuleSet(declarations, selectors)
97
+ cssRuleSets.push(specificRuleSet)
98
+ }
99
+ }
100
+ }
101
+
102
+ // dedupe themes to avoid duplicate CSS generation
103
+ type DedupedTheme = {
104
+ names: string[]
105
+ theme: ThemeObject
106
+ }
107
+ const dedupedThemes: {
108
+ [key: string]: DedupedTheme
109
+ } = {}
110
+ const existing = new WeakMap<ThemeObject, DedupedTheme>()
111
+
112
+ // first, de-dupe and parse them
113
+ for (const themeName in themes) {
114
+ const rawTheme = themes[themeName]
115
+
116
+ // if existing, avoid
117
+ if (existing.has(rawTheme)) {
118
+ const e = existing.get(rawTheme)!
119
+ themes[themeName] = e.theme
120
+ e.names.push(themeName)
121
+ continue
122
+ }
123
+
124
+ // ensure each theme object unique for dedupe
125
+ const theme = { ...rawTheme }
126
+ // parse into variables
127
+ for (const key in theme) {
128
+ // make sure properly names theme variables
129
+ ensureThemeVariable(theme, key)
130
+ }
131
+ themes[themeName] = theme
132
+
133
+ // set deduped
134
+ dedupedThemes[themeName] = {
135
+ names: [themeName],
136
+ theme,
137
+ }
138
+ existing.set(rawTheme, dedupedThemes[themeName])
139
+ }
140
+
141
+ // then, generate CSS from de-duped
142
+ if (isWeb) {
143
+ for (const themeName in dedupedThemes) {
144
+ cssRuleSets = [
145
+ ...cssRuleSets,
146
+ ...getThemeCSSRules({
147
+ config: configIn,
148
+ themeName,
149
+ ...dedupedThemes[themeName],
150
+ }),
151
+ ]
152
+ }
153
+ }
154
+
155
+ // proxy upwards to get parent variables (themes are subset going down)
156
+ for (const themeName in themes) {
157
+ themes[themeName] = proxyThemeToParents(themeName, themes[themeName], themes)
158
+ }
159
+
160
+ tokensValueToVariable.clear()
161
+ Object.freeze(cssRuleSets)
162
+ const css = cssRuleSets.join('\n')
163
+
164
+ return {
165
+ themes,
166
+ cssRuleSets,
167
+ css,
168
+ }
169
+ })()
170
+
171
+ // faster lookups token keys become $keys to match input
172
+ const tokensParsed: any = parseTokens(configIn.tokens)
173
+
174
+ const getCSS = () => {
175
+ return `${themeConfig.css}\n${getAllRules().join('\n')}`
176
+ }
177
+
178
+ const shorthands = configIn.shorthands || {}
179
+
180
+ const config: TamaguiInternalConfig = {
181
+ fontLanguages: [],
182
+ defaultTheme: 'light',
183
+ animations: {} as any,
184
+ media: {},
185
+ ...configIn,
186
+ shorthands,
187
+ inverseShorthands: shorthands
188
+ ? Object.fromEntries(Object.entries(shorthands).map(([k, v]) => [v, k]))
189
+ : {},
190
+ themes: themeConfig.themes,
191
+ fontsParsed,
192
+ themeConfig,
193
+ tokensParsed,
194
+ parsed: true,
195
+ getCSS,
196
+ }
197
+
198
+ setConfig(config)
199
+
200
+ if (configListeners.size) {
201
+ configListeners.forEach((cb) => cb(config))
202
+ configListeners.clear()
203
+ }
204
+
205
+ createdConfigs.set(config, true)
206
+
207
+ if (process.env.NODE_ENV === 'development') {
208
+ if (!globalThis['Tamagui']) {
209
+ globalThis['Tamagui'] = Tamagui
210
+ }
211
+ }
212
+
213
+ // @ts-expect-error
214
+ return config
215
+ }
216
+
217
+ const parseTokens = (tokens: any) => {
218
+ const res: any = {}
219
+ for (const key in tokens) {
220
+ res[key] = {}
221
+ for (const skey in tokens[key]) {
222
+ res[key][`$${skey}`] = tokens[key][skey]
223
+ }
224
+ }
225
+ return res
226
+ }
@@ -0,0 +1,13 @@
1
+ import { Variable } from './createVariable'
2
+
3
+ type GenericTheme = { [key: string]: string | Variable }
4
+
5
+ // export const themeToVariableToValueMap = new WeakMap<any, Record<string, string>>()
6
+
7
+ export const createTheme = <Theme extends GenericTheme>(
8
+ theme: Theme
9
+ ): {
10
+ [K in keyof Theme]: Theme[K] | string | Variable
11
+ } => {
12
+ return theme
13
+ }
@@ -0,0 +1,35 @@
1
+ import { Variable } from './createVariable'
2
+ import { createVariables } from './createVariables'
3
+ import { CreateTokens } from './types'
4
+
5
+ // tokens.color.dark.red ===> { var: `color-dark-red`, val: '' }
6
+ export function createTokens<T extends CreateTokens>(tokens: T): MakeTokens<T> {
7
+ return createVariables(tokens as any) as any
8
+ }
9
+
10
+ // verbose but gives us nice types...
11
+ type MakeTokens<T> = T extends {
12
+ color: infer E
13
+ space: infer F
14
+ size: infer G
15
+ radius: infer H
16
+ zIndex: infer J
17
+ }
18
+ ? {
19
+ color: {
20
+ [key in keyof E]: Variable
21
+ }
22
+ space: {
23
+ [key in keyof F]: Variable
24
+ }
25
+ size: {
26
+ [key in keyof G]: Variable
27
+ }
28
+ radius: {
29
+ [key in keyof H]: Variable
30
+ }
31
+ zIndex: {
32
+ [key in keyof J]: Variable
33
+ }
34
+ }
35
+ : never
@@ -0,0 +1,94 @@
1
+ import { isWeb } from './constants/platform'
2
+ import { VariableColorVal } from './types'
3
+
4
+ /**
5
+ * Should rename this to Token
6
+ * Moving to objects for React Server Components support
7
+ */
8
+
9
+ const IS_VAR = '__isVar__'
10
+
11
+ export type VariableValue = string | number
12
+
13
+ type VariableIn<A extends VariableValue = VariableValue> = {
14
+ val: A
15
+ name: string
16
+ key: string
17
+ isFloating?: boolean
18
+ }
19
+
20
+ export type Variable<A extends VariableValue = VariableValue> = VariableIn<A> & {
21
+ [IS_VAR]?: true
22
+ variable?: string
23
+ }
24
+
25
+ export const createVariable = <A extends string | number = any>(props: VariableIn<A>) => {
26
+ if (isVariable(props)) {
27
+ return props
28
+ }
29
+ return {
30
+ [IS_VAR]: true,
31
+ // @ts-ignore
32
+ ...props,
33
+ variable: isWeb ? createCSSVariable(props.name) : '',
34
+ }
35
+ }
36
+
37
+ // on the client maybe we can change the prototype of variable object toString to keep backwards compat
38
+ export function variableToString(vrble?: Variable | VariableColorVal) {
39
+ if (!vrble) return ''
40
+ if (typeof vrble === 'string') return vrble
41
+ return `${isWeb ? vrble.variable : vrble.val}`
42
+ }
43
+
44
+ export function isVariable(v: Variable | any): v is Variable {
45
+ return !!(v && v[IS_VAR])
46
+ }
47
+
48
+ export function getVariableValue(v: Variable | any) {
49
+ if (isVariable(v)) return v.val
50
+ return v
51
+ }
52
+
53
+ export function getVariableName(v: Variable | any) {
54
+ if (isVariable(v)) return v.name
55
+ return v
56
+ }
57
+
58
+ export function getVariableVariable(v: Variable | any) {
59
+ if (isVariable(v)) return v.variable
60
+ return v
61
+ }
62
+
63
+ // bugfix { space: { 0.5: 10 } } was generating var(--space-0.5) (invalid CSS):
64
+ export const createCSSVariable = (nameProp: string, includeVar = true) => {
65
+ if (process.env.NODE_ENV === 'development') {
66
+ if (!nameProp || typeof nameProp !== 'string') {
67
+ // eslint-disable-next-line no-console
68
+ console.trace('createCSSVariable invalid name', nameProp)
69
+ return ``
70
+ }
71
+ }
72
+ let name = ''
73
+ for (let i = 0; i < nameProp.length; i++) {
74
+ const code = nameProp.charCodeAt(i)
75
+ if (
76
+ // A-Z
77
+ (code >= 65 && code <= 90) ||
78
+ // a-z
79
+ (code >= 97 && code <= 122) ||
80
+ // _
81
+ code == 95 ||
82
+ // -
83
+ code === 45 ||
84
+ // 0-9
85
+ (code >= 48 && code <= 57)
86
+ ) {
87
+ name += nameProp[i]
88
+ } else {
89
+ // allow any name but turn it into a stringified num
90
+ name += `-c${code}-`
91
+ }
92
+ }
93
+ return includeVar ? `var(--${name})` : name
94
+ }
@@ -0,0 +1,39 @@
1
+ import { Variable, createVariable, isVariable } from './createVariable'
2
+
3
+ type DeepTokenObject<Val extends string | number = any> = {
4
+ [key: string]: Val | DeepTokenObject<Val>
5
+ }
6
+
7
+ export type DeepVariableObject<A extends DeepTokenObject> = {
8
+ [Key in keyof A]: A[Key] extends string | number
9
+ ? Variable<A[Key]>
10
+ : A[Key] extends DeepTokenObject
11
+ ? DeepVariableObject<A[Key]>
12
+ : never
13
+ }
14
+
15
+ export const createVariables = <A extends DeepTokenObject>(
16
+ tokens: A,
17
+ parentPath = '',
18
+ isFont = false
19
+ ): DeepVariableObject<A> => {
20
+ const res: any = {}
21
+ for (const key in tokens) {
22
+ const val = tokens[key]
23
+ if (isVariable(val)) {
24
+ res[key] = val
25
+ continue
26
+ }
27
+ let name = parentPath ? `${parentPath}-${key}` : key
28
+ if (isFont && name.includes('_')) {
29
+ name = name.replace(/_[a-z0-9]+/i, '')
30
+ }
31
+ if (val && typeof val === 'object') {
32
+ // recurse
33
+ res[key] = createVariables(tokens[key] as any, isFont ? 'f' : name)
34
+ continue
35
+ }
36
+ res[key] = isVariable(val) ? val : createVariable({ val, name, key })
37
+ }
38
+ return res
39
+ }
@@ -0,0 +1,14 @@
1
+ import * as ReactNative from 'react-native'
2
+
3
+ // bye bye tree shaking... but only way to properly detect react-native components...
4
+ // also neither rnw nor react support tree shaking atm
5
+ export const RNComponents = new WeakMap()
6
+
7
+ // I was looping over all of them, but casuses deprecation warnings and there's only a few
8
+ // we realistically support - lets whitelist rather than blacklist
9
+ for (const key of ['Image', 'TextInput', 'Text', 'View']) {
10
+ const val = ReactNative[key]
11
+ if (val && typeof val === 'object') {
12
+ RNComponents.set(val, true)
13
+ }
14
+ }
@@ -0,0 +1,226 @@
1
+ import { createContext } from 'react'
2
+
3
+ import { getThemes } from '../conf'
4
+ import { THEME_CLASSNAME_PREFIX, THEME_NAME_SEPARATOR } from '../constants/constants'
5
+ import { getThemeUnwrapped } from '../hooks/getThemeUnwrapped'
6
+ import { ThemeObject, Themes } from '../types'
7
+
8
+ type ThemeListener = (name: string | null, themeManager: ThemeManager) => void
9
+
10
+ export type SetActiveThemeProps = {
11
+ className?: string
12
+ parentManager?: ThemeManager | null
13
+ name?: string | null
14
+ theme?: any
15
+ }
16
+
17
+ export type GetNextThemeProps = {
18
+ themes?: Themes
19
+ name?: string | null
20
+ componentName?: string | null
21
+ reset?: boolean
22
+ }
23
+
24
+ export class ThemeManager {
25
+ keys = new Map<any, Set<string>>()
26
+ listeners = new Map<any, Function>()
27
+ themeListeners = new Set<ThemeListener>()
28
+ className: string | null = null
29
+
30
+ constructor(
31
+ public name: string = '',
32
+ public theme: ThemeObject | null = null,
33
+ public parentManager: ThemeManager | null = null,
34
+ public reset: boolean = false
35
+ ) {
36
+ // find the nearest different parentManager
37
+ let parent = parentManager
38
+ let tries = 0
39
+ while (true) {
40
+ tries++
41
+ if (tries > 10) {
42
+ throw new Error(`Nested 10 of the same theme in a row, likely error`)
43
+ }
44
+ if (!parent) break
45
+ if (parent.name === name) {
46
+ // go up if same
47
+ parent = parent.parentManager
48
+ } else {
49
+ this.parentManager = parent
50
+ break
51
+ }
52
+ }
53
+ }
54
+
55
+ get didChangeTheme() {
56
+ return this.parentManager && this.name !== this.parentManager.fullName
57
+ }
58
+
59
+ get parentName() {
60
+ return this.parentManager?.name || null
61
+ }
62
+
63
+ get fullName(): string {
64
+ return this.getNextTheme().name || this.name || ''
65
+ // const parentName = this.parentManager?.fullName || ''
66
+ // const name = this.name || ''
67
+ // const parts = [...new Set([...`${parentName}_${name}`.split('_')])].filter(Boolean)
68
+ // return parts.join('_')
69
+ }
70
+
71
+ // gets value going up to parents
72
+ getValue(key: string) {
73
+ let theme = this.theme
74
+ let manager = this as ThemeManager | null
75
+ while (true) {
76
+ if (!theme) return
77
+ if (key in theme) {
78
+ return theme[key]
79
+ }
80
+ manager = this.parentManager
81
+ if (!manager || manager.theme === theme) {
82
+ return
83
+ }
84
+ theme = manager.theme
85
+ }
86
+ }
87
+
88
+ update({ name, theme, className }: SetActiveThemeProps = {}, force = false) {
89
+ if (!force) {
90
+ // className compare on web, avoids light/dark re-renders
91
+ const nameChanged = name !== this.name
92
+ if (!nameChanged) {
93
+ return false
94
+ }
95
+ }
96
+ this.className = className || null
97
+ this.name = name || ''
98
+ this.theme = theme
99
+ this.notifyListeners()
100
+ return true
101
+ }
102
+
103
+ getNextTheme(props: GetNextThemeProps = {}, debug?: any) {
104
+ const { themes = getThemes(), name, componentName } = props
105
+
106
+ if (props.reset && name) {
107
+ return {
108
+ name: name,
109
+ theme: themes[name],
110
+ className: this.getClassName(name),
111
+ }
112
+ }
113
+
114
+ const parentIsReset = this.parentManager?.reset
115
+
116
+ if (!name) {
117
+ if (componentName) {
118
+ // allow for _Card_Button or just _Button
119
+ const names = [
120
+ `${this.name}_${componentName}`,
121
+ `${withoutComponentName(this.name)}_${componentName}`,
122
+ ]
123
+ for (const name of names) {
124
+ if (name in themes) {
125
+ const className = this.getClassName(name)
126
+ return { name, theme: themes[name], className }
127
+ }
128
+ }
129
+ }
130
+ return {
131
+ name: this.name,
132
+ theme: this.theme,
133
+ }
134
+ }
135
+
136
+ let nextName = name || this.name || ''
137
+ let parentName = parentIsReset ? this.parentName || this.fullName : this.fullName
138
+
139
+ while (true) {
140
+ if (nextName in themes) {
141
+ break
142
+ }
143
+ nextName = `${parentName}_${name}`
144
+ if (nextName in themes) {
145
+ break
146
+ }
147
+ if (!parentName.includes(THEME_NAME_SEPARATOR)) {
148
+ // this is fine - some themes can not have parents
149
+ break
150
+ }
151
+ // go up one
152
+ parentName = parentName.slice(0, parentName.lastIndexOf(THEME_NAME_SEPARATOR))
153
+ }
154
+
155
+ if (componentName) {
156
+ // allow for _Card_Button or just _Button
157
+ const names = [
158
+ `${nextName}_${componentName}`,
159
+ `${withoutComponentName(nextName)}_${componentName}`,
160
+ ]
161
+ for (const name of names) {
162
+ if (name in themes) {
163
+ nextName = name
164
+ }
165
+ }
166
+ }
167
+
168
+ let theme = themes[nextName]
169
+ if (!theme) {
170
+ theme = themes[`light_${nextName}`]
171
+ }
172
+
173
+ if (process.env.NODE_ENV === 'development') {
174
+ if (debug) {
175
+ console.log('getNextTheme', this.getClassName(nextName), { props, nextName, parentName })
176
+ }
177
+ }
178
+
179
+ return {
180
+ name: nextName,
181
+ theme: getThemeUnwrapped(theme),
182
+ className: this.getClassName(nextName),
183
+ }
184
+ }
185
+
186
+ getClassName(name: string) {
187
+ return `${THEME_CLASSNAME_PREFIX}${name} t_Theme`.replace('light_', '').replace('dark_', '')
188
+ }
189
+
190
+ track(uuid: any, keys: Set<string>) {
191
+ if (!this.name) return
192
+ this.keys.set(uuid, keys)
193
+ }
194
+
195
+ notifyListeners() {
196
+ if (!this.name) {
197
+ this.keys.clear()
198
+ }
199
+ for (const [uuid, keys] of this.keys.entries()) {
200
+ if (keys.size) {
201
+ this.listeners.get(uuid)?.()
202
+ }
203
+ }
204
+ this.themeListeners.forEach((cb) => cb(this.name, this))
205
+ }
206
+
207
+ onChangeTheme(cb: ThemeListener) {
208
+ this.themeListeners.add(cb)
209
+ return () => {
210
+ this.themeListeners.delete(cb)
211
+ }
212
+ }
213
+
214
+ onUpdate(uuid: any, cb: Function) {
215
+ this.listeners.set(uuid, cb)
216
+ return () => {
217
+ this.listeners.delete(uuid)
218
+ this.keys.delete(uuid)
219
+ }
220
+ }
221
+ }
222
+
223
+ export const ThemeManagerContext = createContext<ThemeManager | null>(null)
224
+ export const emptyManager = new ThemeManager()
225
+
226
+ const withoutComponentName = (name: string) => name.replace(/(\_[A-Z][a-zA-Z]+)+$/g, '')
@@ -0,0 +1,9 @@
1
+ export const areEqualSets = (a: Set<string>, b: Set<string>) => {
2
+ if (a.size !== b.size) return false
3
+ for (const val in a) {
4
+ if (!b.has(val)) {
5
+ return false
6
+ }
7
+ }
8
+ return true
9
+ }
@@ -0,0 +1 @@
1
+ export function assignNativePropsToWeb(elementType: string, viewProps: any, nativeProps: any) {}