@tamagui/core 1.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (333) hide show
  1. package/.ultra.cache.json +1 -0
  2. package/_/constants/constants.js +14 -0
  3. package/_/constants/constants.js.map +7 -0
  4. package/_/constants/platform.js +20 -0
  5. package/_/constants/platform.js.map +7 -0
  6. package/_/constants/pseudos.js +18 -0
  7. package/_/constants/pseudos.js.map +7 -0
  8. package/_/constants/rnw.js +22 -0
  9. package/_/constants/rnw.js.map +7 -0
  10. package/_/createComponent.js +427 -0
  11. package/_/createComponent.js.map +7 -0
  12. package/_/createShorthands.js +10 -0
  13. package/_/createShorthands.js.map +7 -0
  14. package/_/createTamagui.js +122 -0
  15. package/_/createTamagui.js.map +7 -0
  16. package/_/createTheme.js +20 -0
  17. package/_/createTheme.js.map +7 -0
  18. package/_/createTokens.js +29 -0
  19. package/_/createTokens.js.map +7 -0
  20. package/_/createVariable.js +22 -0
  21. package/_/createVariable.js.map +7 -0
  22. package/_/helpers/addStylesUsingClassname.js +32 -0
  23. package/_/helpers/addStylesUsingClassname.js.map +7 -0
  24. package/_/helpers/createMediaStyle.js +34 -0
  25. package/_/helpers/createMediaStyle.js.map +7 -0
  26. package/_/helpers/createTamaguiProvider.js +42 -0
  27. package/_/helpers/createTamaguiProvider.js.map +7 -0
  28. package/_/helpers/extendStaticConfig.js +176 -0
  29. package/_/helpers/extendStaticConfig.js.map +7 -0
  30. package/_/helpers/fixNativeShadow.js +8 -0
  31. package/_/helpers/fixNativeShadow.js.map +7 -0
  32. package/_/helpers/fixNativeShadow.native.js +30 -0
  33. package/_/helpers/fixNativeShadow.native.js.map +7 -0
  34. package/_/helpers/getSplitStyles.js +160 -0
  35. package/_/helpers/getSplitStyles.js.map +7 -0
  36. package/_/helpers/getStylesAtomic.js +84 -0
  37. package/_/helpers/getStylesAtomic.js.map +7 -0
  38. package/_/helpers/getStylesAtomic.native.js +10 -0
  39. package/_/helpers/getStylesAtomic.native.js.map +7 -0
  40. package/_/helpers/insertStyleRule.js +24 -0
  41. package/_/helpers/insertStyleRule.js.map +7 -0
  42. package/_/helpers/matchMedia.js +15 -0
  43. package/_/helpers/matchMedia.js.map +7 -0
  44. package/_/helpers/matchMedia.native.js +8 -0
  45. package/_/helpers/matchMedia.native.js.map +7 -0
  46. package/_/helpers/themeable.js +26 -0
  47. package/_/helpers/themeable.js.map +7 -0
  48. package/_/hooks/useConstant.js +15 -0
  49. package/_/hooks/useConstant.js.map +7 -0
  50. package/_/hooks/useFeatures.js +75 -0
  51. package/_/hooks/useFeatures.js.map +7 -0
  52. package/_/hooks/useForceUpdate.js +28 -0
  53. package/_/hooks/useForceUpdate.js.map +7 -0
  54. package/_/hooks/useMedia.js +173 -0
  55. package/_/hooks/useMedia.js.map +7 -0
  56. package/_/hooks/usePressable.js +14 -0
  57. package/_/hooks/usePressable.js.map +7 -0
  58. package/_/hooks/useTheme.js +94 -0
  59. package/_/hooks/useTheme.js.map +7 -0
  60. package/_/index.js +30 -0
  61. package/_/index.js.map +7 -0
  62. package/_/static/postProcessStyles.js +18 -0
  63. package/_/static/postProcessStyles.js.map +7 -0
  64. package/_/static.js +12 -0
  65. package/_/static.js.map +7 -0
  66. package/_/styled.js +21 -0
  67. package/_/styled.js.map +7 -0
  68. package/_/types.js +1 -0
  69. package/_/types.js.map +7 -0
  70. package/_/views/Animated.js +79 -0
  71. package/_/views/Animated.js.map +7 -0
  72. package/_/views/Stack.js +12 -0
  73. package/_/views/Stack.js.map +7 -0
  74. package/_/views/Text.js +60 -0
  75. package/_/views/Text.js.map +7 -0
  76. package/_/views/TextAncestorContext.js +19 -0
  77. package/_/views/TextAncestorContext.js.map +7 -0
  78. package/_/views/Theme.js +57 -0
  79. package/_/views/Theme.js.map +7 -0
  80. package/_/views/ThemeContext.js +6 -0
  81. package/_/views/ThemeContext.js.map +7 -0
  82. package/_/views/ThemeInverse.js +27 -0
  83. package/_/views/ThemeInverse.js.map +7 -0
  84. package/_/views/ThemeManagerContext.js +56 -0
  85. package/_/views/ThemeManagerContext.js.map +7 -0
  86. package/_/views/ThemeProvider.js +45 -0
  87. package/_/views/ThemeProvider.js.map +7 -0
  88. package/dist/constants/constants.js +14 -0
  89. package/dist/constants/constants.js.map +7 -0
  90. package/dist/constants/platform.js +19 -0
  91. package/dist/constants/platform.js.map +7 -0
  92. package/dist/constants/pseudos.js +18 -0
  93. package/dist/constants/pseudos.js.map +7 -0
  94. package/dist/constants/rnw.js +22 -0
  95. package/dist/constants/rnw.js.map +7 -0
  96. package/dist/constants/styleConstants.js +46 -0
  97. package/dist/constants/styleConstants.js.map +7 -0
  98. package/dist/createComponent.js +445 -0
  99. package/dist/createComponent.js.map +7 -0
  100. package/dist/createFont.js +24 -0
  101. package/dist/createFont.js.map +7 -0
  102. package/dist/createShorthands.js +10 -0
  103. package/dist/createShorthands.js.map +7 -0
  104. package/dist/createTamagui.js +159 -0
  105. package/dist/createTamagui.js.map +7 -0
  106. package/dist/createTheme.js +20 -0
  107. package/dist/createTheme.js.map +7 -0
  108. package/dist/createTokens.js +29 -0
  109. package/dist/createTokens.js.map +7 -0
  110. package/dist/createVariable.js +22 -0
  111. package/dist/createVariable.js.map +7 -0
  112. package/dist/helpers/addStylesUsingClassname.js +57 -0
  113. package/dist/helpers/addStylesUsingClassname.js.map +7 -0
  114. package/dist/helpers/createMediaStyle.js +34 -0
  115. package/dist/helpers/createMediaStyle.js.map +7 -0
  116. package/dist/helpers/createPropMapper.js +153 -0
  117. package/dist/helpers/createPropMapper.js.map +7 -0
  118. package/dist/helpers/createTamaguiProvider.js +25 -0
  119. package/dist/helpers/createTamaguiProvider.js.map +7 -0
  120. package/dist/helpers/extendStaticConfig.js +59 -0
  121. package/dist/helpers/extendStaticConfig.js.map +7 -0
  122. package/dist/helpers/fixNativeShadow.js +8 -0
  123. package/dist/helpers/fixNativeShadow.js.map +7 -0
  124. package/dist/helpers/fixNativeShadow.native.js +30 -0
  125. package/dist/helpers/fixNativeShadow.native.js.map +7 -0
  126. package/dist/helpers/getSplitStyles.js +160 -0
  127. package/dist/helpers/getSplitStyles.js.map +7 -0
  128. package/dist/helpers/getStylesAtomic.js +83 -0
  129. package/dist/helpers/getStylesAtomic.js.map +7 -0
  130. package/dist/helpers/getStylesAtomic.native.js +10 -0
  131. package/dist/helpers/getStylesAtomic.native.js.map +7 -0
  132. package/dist/helpers/insertStyleRule.js +24 -0
  133. package/dist/helpers/insertStyleRule.js.map +7 -0
  134. package/dist/helpers/isObj.js +7 -0
  135. package/dist/helpers/isObj.js.map +7 -0
  136. package/dist/helpers/matchMedia.js +15 -0
  137. package/dist/helpers/matchMedia.js.map +7 -0
  138. package/dist/helpers/matchMedia.native.js +8 -0
  139. package/dist/helpers/matchMedia.native.js.map +7 -0
  140. package/dist/helpers/pseudos.js +1 -0
  141. package/dist/helpers/pseudos.js.map +7 -0
  142. package/dist/helpers/themeable.js +26 -0
  143. package/dist/helpers/themeable.js.map +7 -0
  144. package/dist/hooks/useConstant.js +15 -0
  145. package/dist/hooks/useConstant.js.map +7 -0
  146. package/dist/hooks/useFeatures.js +75 -0
  147. package/dist/hooks/useFeatures.js.map +7 -0
  148. package/dist/hooks/useForceUpdate.js +28 -0
  149. package/dist/hooks/useForceUpdate.js.map +7 -0
  150. package/dist/hooks/useMedia.js +171 -0
  151. package/dist/hooks/useMedia.js.map +7 -0
  152. package/dist/hooks/usePressable.js +13 -0
  153. package/dist/hooks/usePressable.js.map +7 -0
  154. package/dist/hooks/useTheme.js +93 -0
  155. package/dist/hooks/useTheme.js.map +7 -0
  156. package/dist/index.cjs +2125 -0
  157. package/dist/index.cjs.map +7 -0
  158. package/dist/index.js +33 -0
  159. package/dist/index.js.map +7 -0
  160. package/dist/packages/core/src/constants/constants.d.ts +8 -0
  161. package/dist/packages/core/src/constants/constants.d.ts.map +1 -0
  162. package/dist/packages/core/src/constants/platform.d.ts +9 -0
  163. package/dist/packages/core/src/constants/platform.d.ts.map +1 -0
  164. package/dist/packages/core/src/constants/pseudos.d.ts +15 -0
  165. package/dist/packages/core/src/constants/pseudos.d.ts.map +1 -0
  166. package/dist/packages/core/src/constants/rnw.d.ts +2 -0
  167. package/dist/packages/core/src/constants/rnw.d.ts.map +1 -0
  168. package/dist/packages/core/src/createComponent.d.ts +16 -0
  169. package/dist/packages/core/src/createComponent.d.ts.map +1 -0
  170. package/dist/packages/core/src/createShorthands.d.ts +2 -0
  171. package/dist/packages/core/src/createShorthands.d.ts.map +1 -0
  172. package/dist/packages/core/src/createTamagui.d.ts +37 -0
  173. package/dist/packages/core/src/createTamagui.d.ts.map +1 -0
  174. package/dist/packages/core/src/createTheme.d.ts +5 -0
  175. package/dist/packages/core/src/createTheme.d.ts.map +1 -0
  176. package/dist/packages/core/src/createTokens.d.ts +45 -0
  177. package/dist/packages/core/src/createTokens.d.ts.map +1 -0
  178. package/dist/packages/core/src/createVariable.d.ts +14 -0
  179. package/dist/packages/core/src/createVariable.d.ts.map +1 -0
  180. package/dist/packages/core/src/helpers/addStylesUsingClassname.d.ts +2 -0
  181. package/dist/packages/core/src/helpers/addStylesUsingClassname.d.ts.map +1 -0
  182. package/dist/packages/core/src/helpers/createMediaStyle.d.ts +8 -0
  183. package/dist/packages/core/src/helpers/createMediaStyle.d.ts.map +1 -0
  184. package/dist/packages/core/src/helpers/createTamaguiProvider.d.ts +5 -0
  185. package/dist/packages/core/src/helpers/createTamaguiProvider.d.ts.map +1 -0
  186. package/dist/packages/core/src/helpers/extendStaticConfig.d.ts +5 -0
  187. package/dist/packages/core/src/helpers/extendStaticConfig.d.ts.map +1 -0
  188. package/dist/packages/core/src/helpers/fixNativeShadow.d.ts +2 -0
  189. package/dist/packages/core/src/helpers/fixNativeShadow.d.ts.map +1 -0
  190. package/dist/packages/core/src/helpers/fixNativeShadow.native.d.ts +2 -0
  191. package/dist/packages/core/src/helpers/fixNativeShadow.native.d.ts.map +1 -0
  192. package/dist/packages/core/src/helpers/getSplitStyles.d.ts +15 -0
  193. package/dist/packages/core/src/helpers/getSplitStyles.d.ts.map +1 -0
  194. package/dist/packages/core/src/helpers/getStylesAtomic.d.ts +3 -0
  195. package/dist/packages/core/src/helpers/getStylesAtomic.d.ts.map +1 -0
  196. package/dist/packages/core/src/helpers/getStylesAtomic.native.d.ts +2 -0
  197. package/dist/packages/core/src/helpers/getStylesAtomic.native.d.ts.map +1 -0
  198. package/dist/packages/core/src/helpers/insertStyleRule.d.ts +2 -0
  199. package/dist/packages/core/src/helpers/insertStyleRule.d.ts.map +1 -0
  200. package/dist/packages/core/src/helpers/matchMedia.d.ts +2 -0
  201. package/dist/packages/core/src/helpers/matchMedia.d.ts.map +1 -0
  202. package/dist/packages/core/src/helpers/matchMedia.native.d.ts +3 -0
  203. package/dist/packages/core/src/helpers/matchMedia.native.d.ts.map +1 -0
  204. package/dist/packages/core/src/helpers/themeable.d.ts +10 -0
  205. package/dist/packages/core/src/helpers/themeable.d.ts.map +1 -0
  206. package/dist/packages/core/src/hooks/useConstant.d.ts +2 -0
  207. package/dist/packages/core/src/hooks/useConstant.d.ts.map +1 -0
  208. package/dist/packages/core/src/hooks/useFeatures.d.ts +5 -0
  209. package/dist/packages/core/src/hooks/useFeatures.d.ts.map +1 -0
  210. package/dist/packages/core/src/hooks/useForceUpdate.d.ts +2 -0
  211. package/dist/packages/core/src/hooks/useForceUpdate.d.ts.map +1 -0
  212. package/dist/packages/core/src/hooks/useMedia.d.ts +16 -0
  213. package/dist/packages/core/src/hooks/useMedia.d.ts.map +1 -0
  214. package/dist/packages/core/src/hooks/usePressable.d.ts +3 -0
  215. package/dist/packages/core/src/hooks/usePressable.d.ts.map +1 -0
  216. package/dist/packages/core/src/hooks/useTheme.d.ts +18 -0
  217. package/dist/packages/core/src/hooks/useTheme.d.ts.map +1 -0
  218. package/dist/packages/core/src/index.d.ts +27 -0
  219. package/dist/packages/core/src/index.d.ts.map +1 -0
  220. package/dist/packages/core/src/static/postProcessStyles.d.ts +7 -0
  221. package/dist/packages/core/src/static/postProcessStyles.d.ts.map +1 -0
  222. package/dist/packages/core/src/static.d.ts +12 -0
  223. package/dist/packages/core/src/static.d.ts.map +1 -0
  224. package/dist/packages/core/src/styled.d.ts +16 -0
  225. package/dist/packages/core/src/styled.d.ts.map +1 -0
  226. package/dist/packages/core/src/types.d.ts +305 -0
  227. package/dist/packages/core/src/types.d.ts.map +1 -0
  228. package/dist/packages/core/src/views/Animated.d.ts +15 -0
  229. package/dist/packages/core/src/views/Animated.d.ts.map +1 -0
  230. package/dist/packages/core/src/views/Stack.d.ts +3 -0
  231. package/dist/packages/core/src/views/Stack.d.ts.map +1 -0
  232. package/dist/packages/core/src/views/Text.d.ts +3 -0
  233. package/dist/packages/core/src/views/Text.d.ts.map +1 -0
  234. package/dist/packages/core/src/views/TextAncestorContext.d.ts +3 -0
  235. package/dist/packages/core/src/views/TextAncestorContext.d.ts.map +1 -0
  236. package/dist/packages/core/src/views/Theme.d.ts +8 -0
  237. package/dist/packages/core/src/views/Theme.d.ts.map +1 -0
  238. package/dist/packages/core/src/views/ThemeContext.d.ts +18 -0
  239. package/dist/packages/core/src/views/ThemeContext.d.ts.map +1 -0
  240. package/dist/packages/core/src/views/ThemeInverse.d.ts +10 -0
  241. package/dist/packages/core/src/views/ThemeInverse.d.ts.map +1 -0
  242. package/dist/packages/core/src/views/ThemeManagerContext.d.ts +15 -0
  243. package/dist/packages/core/src/views/ThemeManagerContext.d.ts.map +1 -0
  244. package/dist/packages/core/src/views/ThemeProvider.d.ts +10 -0
  245. package/dist/packages/core/src/views/ThemeProvider.d.ts.map +1 -0
  246. package/dist/packages/helpers/src/AllRules.d.ts +3 -0
  247. package/dist/packages/helpers/src/AllRules.d.ts.map +1 -0
  248. package/dist/packages/helpers/src/concatClassName.d.ts +2 -0
  249. package/dist/packages/helpers/src/concatClassName.d.ts.map +1 -0
  250. package/dist/packages/helpers/src/index.d.ts +5 -0
  251. package/dist/packages/helpers/src/index.d.ts.map +1 -0
  252. package/dist/packages/helpers/src/types.d.ts +8 -0
  253. package/dist/packages/helpers/src/types.d.ts.map +1 -0
  254. package/dist/packages/helpers/src/validStyleProps.d.ts +475 -0
  255. package/dist/packages/helpers/src/validStyleProps.d.ts.map +1 -0
  256. package/dist/static/postProcessStyles.js +18 -0
  257. package/dist/static/postProcessStyles.js.map +7 -0
  258. package/dist/static.js +15 -0
  259. package/dist/static.js.map +7 -0
  260. package/dist/styled.js +21 -0
  261. package/dist/styled.js.map +7 -0
  262. package/dist/types.js +1 -0
  263. package/dist/types.js.map +7 -0
  264. package/dist/views/Animated.js +79 -0
  265. package/dist/views/Animated.js.map +7 -0
  266. package/dist/views/SafeAreaProvider.js +30 -0
  267. package/dist/views/SafeAreaProvider.js.map +7 -0
  268. package/dist/views/Stack.js +12 -0
  269. package/dist/views/Stack.js.map +7 -0
  270. package/dist/views/Text.js +60 -0
  271. package/dist/views/Text.js.map +7 -0
  272. package/dist/views/TextAncestorContext.js +18 -0
  273. package/dist/views/TextAncestorContext.js.map +7 -0
  274. package/dist/views/Theme.js +56 -0
  275. package/dist/views/Theme.js.map +7 -0
  276. package/dist/views/ThemeContext.js +6 -0
  277. package/dist/views/ThemeContext.js.map +7 -0
  278. package/dist/views/ThemeInverse.js +27 -0
  279. package/dist/views/ThemeInverse.js.map +7 -0
  280. package/dist/views/ThemeManagerContext.js +55 -0
  281. package/dist/views/ThemeManagerContext.js.map +7 -0
  282. package/dist/views/ThemeProvider.js +45 -0
  283. package/dist/views/ThemeProvider.js.map +7 -0
  284. package/package.json +33 -0
  285. package/src/constants/constants.ts +12 -0
  286. package/src/constants/platform.ts +15 -0
  287. package/src/constants/pseudos.ts +14 -0
  288. package/src/constants/rnw.tsx +20 -0
  289. package/src/createComponent.tsx +596 -0
  290. package/src/createFont.ts +26 -0
  291. package/src/createShorthands.ts +5 -0
  292. package/src/createTamagui.ts +207 -0
  293. package/src/createTheme.ts +19 -0
  294. package/src/createTokens.ts +83 -0
  295. package/src/createVariable.ts +22 -0
  296. package/src/helpers/addStylesUsingClassname.tsx +60 -0
  297. package/src/helpers/createMediaStyle.ts +46 -0
  298. package/src/helpers/createPropMapper.ts +184 -0
  299. package/src/helpers/createTamaguiProvider.tsx +22 -0
  300. package/src/helpers/extendStaticConfig.ts +68 -0
  301. package/src/helpers/fixNativeShadow.native.tsx +27 -0
  302. package/src/helpers/fixNativeShadow.tsx +2 -0
  303. package/src/helpers/getSplitStyles.tsx +210 -0
  304. package/src/helpers/getStylesAtomic.native.ts +3 -0
  305. package/src/helpers/getStylesAtomic.ts +103 -0
  306. package/src/helpers/insertStyleRule.tsx +18 -0
  307. package/src/helpers/isObj.ts +1 -0
  308. package/src/helpers/matchMedia.native.ts +3 -0
  309. package/src/helpers/matchMedia.ts +9 -0
  310. package/src/helpers/themeable.tsx +42 -0
  311. package/src/hooks/useConstant.tsx +10 -0
  312. package/src/hooks/useFeatures.tsx +78 -0
  313. package/src/hooks/useForceUpdate.tsx +26 -0
  314. package/src/hooks/useMedia.tsx +194 -0
  315. package/src/hooks/usePressable.tsx +9 -0
  316. package/src/hooks/useTheme.tsx +107 -0
  317. package/src/index.ts +33 -0
  318. package/src/static/postProcessStyles.tsx +20 -0
  319. package/src/static.ts +22 -0
  320. package/src/styled.ts +82 -0
  321. package/src/types.tsx +561 -0
  322. package/src/views/Animated.tsx +121 -0
  323. package/src/views/SafeAreaProvider.tsx +33 -0
  324. package/src/views/Stack.tsx +21 -0
  325. package/src/views/Text.tsx +66 -0
  326. package/src/views/TextAncestorContext.tsx +12 -0
  327. package/src/views/Theme.tsx +73 -0
  328. package/src/views/ThemeContext.tsx +5 -0
  329. package/src/views/ThemeInverse.tsx +23 -0
  330. package/src/views/ThemeManagerContext.tsx +50 -0
  331. package/src/views/ThemeProvider.tsx +52 -0
  332. package/tsconfig.json +8 -0
  333. package/types.d.ts +558 -0
@@ -0,0 +1,21 @@
1
+ import { stackDefaultStyles } from '../constants/constants'
2
+ import { createComponent } from '../createComponent'
3
+ import { StackProps } from '../types'
4
+
5
+ export const Stack = createComponent<StackProps>({
6
+ defaultProps: {
7
+ ...stackDefaultStyles,
8
+ flexDirection: 'column',
9
+ },
10
+ })
11
+
12
+ // test types
13
+ // export const YStack = styled(Stack, {
14
+ // flexDirection: 'column',
15
+ // })
16
+ // // test types
17
+ // const x00 = <Stack missing={0} /> // should err
18
+ // const x0 = <YStack missing={0} /> // should err
19
+ // const x1 = (props: StackProps) => <YStack {...props} />
20
+ // type ys = typeof YStack
21
+ // type ysv = ys extends StaticComponent<any, infer V> ? V : unknown
@@ -0,0 +1,66 @@
1
+ import { isWeb } from '../constants/platform'
2
+ import { createComponent } from '../createComponent'
3
+ import { stylePropsTextOnly, validStyles } from '../static'
4
+ import { TextProps } from '../types'
5
+
6
+ const ellipseStyle = {
7
+ maxWidth: '100%',
8
+ overflow: 'hidden',
9
+ textOverflow: 'ellipsis',
10
+ whiteSpace: 'nowrap',
11
+ }
12
+
13
+ export const Text = createComponent<TextProps>({
14
+ isText: true,
15
+ defaultProps: {
16
+ display: isWeb ? 'inline' : 'inline-flex',
17
+ boxSizing: 'border-box',
18
+ fontFamily: 'System',
19
+ wordWrap: 'break-word',
20
+ },
21
+ variants: {
22
+ numberOfLines: {
23
+ 1: ellipseStyle,
24
+ // TODO imply fn, test 1, could do types `>1` `<2`
25
+ '[number]': (lines) => (lines > 1 ? { WebkitLineClamp: 1 } : null),
26
+ },
27
+
28
+ selectable: {
29
+ true: {
30
+ userSelect: 'text',
31
+ },
32
+ false: {
33
+ userSelect: 'none',
34
+ },
35
+ },
36
+
37
+ pressable: {
38
+ true: {
39
+ cursor: 'pointer',
40
+ },
41
+ },
42
+
43
+ ellipse: {
44
+ true: isWeb
45
+ ? ellipseStyle
46
+ : {
47
+ numberOfLines: 1,
48
+ lineBreakMode: 'clip',
49
+ },
50
+ },
51
+ },
52
+ // TODO document
53
+ deoptProps: new Set(isWeb ? [] : ['ellipse']),
54
+ validStyles: {
55
+ ...validStyles,
56
+ ...stylePropsTextOnly,
57
+ ...(isWeb && {
58
+ userSelect: true,
59
+ textOverflow: true,
60
+ whiteSpace: true,
61
+ wordWrap: true,
62
+ selectable: true,
63
+ cursor: true,
64
+ }),
65
+ },
66
+ })
@@ -0,0 +1,12 @@
1
+ import React from 'react'
2
+
3
+ import { rnw } from '../constants/rnw'
4
+
5
+ export const TextAncestorContext = rnw?.TextAncestorContext
6
+
7
+ export const TextAncestorProvider = (props) => {
8
+ if (TextAncestorContext) {
9
+ return <TextAncestorContext.Provider value={false}>{props.children}</TextAncestorContext.Provider>
10
+ }
11
+ return props.children
12
+ }
@@ -0,0 +1,73 @@
1
+ import React, { useContext, useState } from 'react'
2
+
3
+ import { isWeb, useIsomorphicLayoutEffect } from '../constants/platform'
4
+ import { getThemeParentClassName } from '../createTamagui'
5
+ import { useConstant } from '../hooks/useConstant'
6
+ import { ThemeName, Themes } from '../types'
7
+ import { ThemeContext } from './ThemeContext'
8
+ import { ThemeManager, ThemeManagerContext } from './ThemeManagerContext'
9
+
10
+ export type ThemeProps = {
11
+ disableThemeClass?: boolean
12
+ name: ThemeName | null
13
+ children?: any
14
+ }
15
+
16
+ export const Theme = (props: ThemeProps) => {
17
+ const parent = useContext(ThemeManagerContext)
18
+ const themes = useContext(ThemeContext)
19
+ const [parentName, setParentName] = useState(parent.name || 'light')
20
+ if (!themes) {
21
+ console.warn('no themes???', props)
22
+ return props.children
23
+ }
24
+ const name = props.name as string
25
+ const theme = themes[name] || themes[`${name}-${parentName}`]
26
+ const themeManager = useConstant<ThemeManager>(() => {
27
+ const manager = new ThemeManager()
28
+ if (name) {
29
+ manager.setActiveTheme(name, themes[name])
30
+ }
31
+ return manager
32
+ })
33
+
34
+ useIsomorphicLayoutEffect(() => {
35
+ themeManager.setActiveTheme(name, theme)
36
+ return parent.onChangeTheme((next) => {
37
+ if (next) {
38
+ themeManager.setActiveTheme(next, themes[next])
39
+ setParentName(next)
40
+ }
41
+ })
42
+ }, [themes, name])
43
+
44
+ if (!name) {
45
+ return props.children
46
+ }
47
+
48
+ const contents = themeManager ? (
49
+ <ThemeManagerContext.Provider value={themeManager}>
50
+ {props.children}
51
+ </ThemeManagerContext.Provider>
52
+ ) : (
53
+ props.children
54
+ )
55
+
56
+ if (isWeb) {
57
+ if (props.disableThemeClass) {
58
+ return contents
59
+ }
60
+ const color = themes[name]?.['color']?.['variable']
61
+ return (
62
+ <div
63
+ className={getThemeParentClassName(name)}
64
+ // in order to provide currentColor, set color by default
65
+ style={{ display: 'contents', color }}
66
+ >
67
+ {contents}
68
+ </div>
69
+ )
70
+ }
71
+
72
+ return contents
73
+ }
@@ -0,0 +1,5 @@
1
+ import { createContext } from 'react'
2
+
3
+ import { Themes } from '../types'
4
+
5
+ export const ThemeContext = createContext<Themes>(null as any)
@@ -0,0 +1,23 @@
1
+ import React from 'react'
2
+
3
+ import { useDefaultThemeName, useThemeName } from '../hooks/useTheme'
4
+ import { Theme } from './Theme'
5
+
6
+ type StringRecord = { [key: string]: string }
7
+
8
+ let inversions: StringRecord = {
9
+ light: 'dark',
10
+ dark: 'light',
11
+ }
12
+
13
+ export function setThemeInversions(next: StringRecord) {
14
+ inversions = next
15
+ }
16
+
17
+ export const ThemeInverse = (props: { children: any }) => {
18
+ const themeName = useThemeName()
19
+ const defaultTheme = useDefaultThemeName()
20
+ const name = inversions[themeName] || inversions[defaultTheme] || null
21
+ console.log('todo fixme invert', { themeName, defaultTheme, next: name })
22
+ return <Theme name={name}>{props.children}</Theme>
23
+ }
@@ -0,0 +1,50 @@
1
+ import { createContext } from 'react'
2
+
3
+ export class ThemeManager {
4
+ name: string | null = 'light'
5
+ keys = new Map<any, Set<string>>()
6
+ listeners = new Map<any, Function>()
7
+ callbacks = new Set<Function>()
8
+ theme = null
9
+
10
+ setActiveTheme(name: string | null, theme?: any) {
11
+ if (name === this.name) return
12
+ this.name = name
13
+ this.theme = theme
14
+ this.update()
15
+ }
16
+
17
+ track(uuid: any, keys: Set<string>) {
18
+ if (!this.name) return
19
+ this.keys.set(uuid, keys)
20
+ }
21
+
22
+ update() {
23
+ if (!this.name) {
24
+ this.keys.clear()
25
+ }
26
+ for (const [uuid, keys] of this.keys.entries()) {
27
+ if (keys.size) {
28
+ this.listeners.get(uuid)?.()
29
+ }
30
+ }
31
+ this.callbacks.forEach((cb) => cb(this.name))
32
+ }
33
+
34
+ onChangeTheme(cb: (name: string | null) => void) {
35
+ this.callbacks.add(cb)
36
+ return () => {
37
+ this.callbacks.delete(cb)
38
+ }
39
+ }
40
+
41
+ onUpdate(uuid: any, cb: Function) {
42
+ this.listeners.set(uuid, cb)
43
+ return () => {
44
+ this.listeners.delete(uuid)
45
+ this.keys.delete(uuid)
46
+ }
47
+ }
48
+ }
49
+
50
+ export const ThemeManagerContext = createContext<ThemeManager>(new ThemeManager())
@@ -0,0 +1,52 @@
1
+ import React, { useMemo } from 'react'
2
+
3
+ import { useIsomorphicLayoutEffect } from '../constants/platform'
4
+ import { getHasConfigured, getThemeParentClassName } from '../createTamagui'
5
+ import { Theme } from './Theme'
6
+ import { ThemeContext } from './ThemeContext'
7
+
8
+ export type ThemeProviderProps = {
9
+ themes: any
10
+ defaultTheme: string
11
+ disableRootThemeClass?: boolean
12
+ children?: any
13
+ }
14
+
15
+ export const GET_DEFAULT_THEME = '___TGUI'
16
+
17
+ export const ThemeProvider = (props: ThemeProviderProps) => {
18
+ if (!getHasConfigured()) {
19
+ throw new Error(`Missing configureThemes() call, add to your root file`)
20
+ }
21
+
22
+ // ensure theme is attached to root body node as well to work with modals by default
23
+ useIsomorphicLayoutEffect(() => {
24
+ if (props.disableRootThemeClass) {
25
+ return
26
+ }
27
+ if (typeof document !== 'undefined') {
28
+ const cns = getThemeParentClassName(`${props.defaultTheme}`).split(' ')
29
+ cns.forEach((cn) => document.body.classList.add(cn))
30
+ return () => {
31
+ cns.forEach((cn) => document.body.classList.remove(cn))
32
+ }
33
+ }
34
+ }, [])
35
+
36
+ const themeContext = useMemo(() => {
37
+ return new Proxy(props.themes, {
38
+ get(target, key) {
39
+ if (key === GET_DEFAULT_THEME) return props.defaultTheme
40
+ return Reflect.get(target, key)
41
+ },
42
+ })
43
+ }, [props.themes])
44
+
45
+ return (
46
+ <ThemeContext.Provider value={themeContext}>
47
+ <Theme name={props.defaultTheme} disableThemeClass={props.disableRootThemeClass}>
48
+ {props.children}
49
+ </Theme>
50
+ </ThemeContext.Provider>
51
+ )
52
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,8 @@
1
+ {
2
+ "extends": "../../tsconfig",
3
+ "compilerOptions": {
4
+ "rootDir": "../..",
5
+ "jsx": "preserve"
6
+ },
7
+ "include": ["src"]
8
+ }