@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.
- package/.ultra.cache.json +1 -0
- package/_/constants/constants.js +14 -0
- package/_/constants/constants.js.map +7 -0
- package/_/constants/platform.js +20 -0
- package/_/constants/platform.js.map +7 -0
- package/_/constants/pseudos.js +18 -0
- package/_/constants/pseudos.js.map +7 -0
- package/_/constants/rnw.js +22 -0
- package/_/constants/rnw.js.map +7 -0
- package/_/createComponent.js +427 -0
- package/_/createComponent.js.map +7 -0
- package/_/createShorthands.js +10 -0
- package/_/createShorthands.js.map +7 -0
- package/_/createTamagui.js +122 -0
- package/_/createTamagui.js.map +7 -0
- package/_/createTheme.js +20 -0
- package/_/createTheme.js.map +7 -0
- package/_/createTokens.js +29 -0
- package/_/createTokens.js.map +7 -0
- package/_/createVariable.js +22 -0
- package/_/createVariable.js.map +7 -0
- package/_/helpers/addStylesUsingClassname.js +32 -0
- package/_/helpers/addStylesUsingClassname.js.map +7 -0
- package/_/helpers/createMediaStyle.js +34 -0
- package/_/helpers/createMediaStyle.js.map +7 -0
- package/_/helpers/createTamaguiProvider.js +42 -0
- package/_/helpers/createTamaguiProvider.js.map +7 -0
- package/_/helpers/extendStaticConfig.js +176 -0
- package/_/helpers/extendStaticConfig.js.map +7 -0
- package/_/helpers/fixNativeShadow.js +8 -0
- package/_/helpers/fixNativeShadow.js.map +7 -0
- package/_/helpers/fixNativeShadow.native.js +30 -0
- package/_/helpers/fixNativeShadow.native.js.map +7 -0
- package/_/helpers/getSplitStyles.js +160 -0
- package/_/helpers/getSplitStyles.js.map +7 -0
- package/_/helpers/getStylesAtomic.js +84 -0
- package/_/helpers/getStylesAtomic.js.map +7 -0
- package/_/helpers/getStylesAtomic.native.js +10 -0
- package/_/helpers/getStylesAtomic.native.js.map +7 -0
- package/_/helpers/insertStyleRule.js +24 -0
- package/_/helpers/insertStyleRule.js.map +7 -0
- package/_/helpers/matchMedia.js +15 -0
- package/_/helpers/matchMedia.js.map +7 -0
- package/_/helpers/matchMedia.native.js +8 -0
- package/_/helpers/matchMedia.native.js.map +7 -0
- package/_/helpers/themeable.js +26 -0
- package/_/helpers/themeable.js.map +7 -0
- package/_/hooks/useConstant.js +15 -0
- package/_/hooks/useConstant.js.map +7 -0
- package/_/hooks/useFeatures.js +75 -0
- package/_/hooks/useFeatures.js.map +7 -0
- package/_/hooks/useForceUpdate.js +28 -0
- package/_/hooks/useForceUpdate.js.map +7 -0
- package/_/hooks/useMedia.js +173 -0
- package/_/hooks/useMedia.js.map +7 -0
- package/_/hooks/usePressable.js +14 -0
- package/_/hooks/usePressable.js.map +7 -0
- package/_/hooks/useTheme.js +94 -0
- package/_/hooks/useTheme.js.map +7 -0
- package/_/index.js +30 -0
- package/_/index.js.map +7 -0
- package/_/static/postProcessStyles.js +18 -0
- package/_/static/postProcessStyles.js.map +7 -0
- package/_/static.js +12 -0
- package/_/static.js.map +7 -0
- package/_/styled.js +21 -0
- package/_/styled.js.map +7 -0
- package/_/types.js +1 -0
- package/_/types.js.map +7 -0
- package/_/views/Animated.js +79 -0
- package/_/views/Animated.js.map +7 -0
- package/_/views/Stack.js +12 -0
- package/_/views/Stack.js.map +7 -0
- package/_/views/Text.js +60 -0
- package/_/views/Text.js.map +7 -0
- package/_/views/TextAncestorContext.js +19 -0
- package/_/views/TextAncestorContext.js.map +7 -0
- package/_/views/Theme.js +57 -0
- package/_/views/Theme.js.map +7 -0
- package/_/views/ThemeContext.js +6 -0
- package/_/views/ThemeContext.js.map +7 -0
- package/_/views/ThemeInverse.js +27 -0
- package/_/views/ThemeInverse.js.map +7 -0
- package/_/views/ThemeManagerContext.js +56 -0
- package/_/views/ThemeManagerContext.js.map +7 -0
- package/_/views/ThemeProvider.js +45 -0
- package/_/views/ThemeProvider.js.map +7 -0
- package/dist/constants/constants.js +14 -0
- package/dist/constants/constants.js.map +7 -0
- package/dist/constants/platform.js +19 -0
- package/dist/constants/platform.js.map +7 -0
- package/dist/constants/pseudos.js +18 -0
- package/dist/constants/pseudos.js.map +7 -0
- package/dist/constants/rnw.js +22 -0
- package/dist/constants/rnw.js.map +7 -0
- package/dist/constants/styleConstants.js +46 -0
- package/dist/constants/styleConstants.js.map +7 -0
- package/dist/createComponent.js +445 -0
- package/dist/createComponent.js.map +7 -0
- package/dist/createFont.js +24 -0
- package/dist/createFont.js.map +7 -0
- package/dist/createShorthands.js +10 -0
- package/dist/createShorthands.js.map +7 -0
- package/dist/createTamagui.js +159 -0
- package/dist/createTamagui.js.map +7 -0
- package/dist/createTheme.js +20 -0
- package/dist/createTheme.js.map +7 -0
- package/dist/createTokens.js +29 -0
- package/dist/createTokens.js.map +7 -0
- package/dist/createVariable.js +22 -0
- package/dist/createVariable.js.map +7 -0
- package/dist/helpers/addStylesUsingClassname.js +57 -0
- package/dist/helpers/addStylesUsingClassname.js.map +7 -0
- package/dist/helpers/createMediaStyle.js +34 -0
- package/dist/helpers/createMediaStyle.js.map +7 -0
- package/dist/helpers/createPropMapper.js +153 -0
- package/dist/helpers/createPropMapper.js.map +7 -0
- package/dist/helpers/createTamaguiProvider.js +25 -0
- package/dist/helpers/createTamaguiProvider.js.map +7 -0
- package/dist/helpers/extendStaticConfig.js +59 -0
- package/dist/helpers/extendStaticConfig.js.map +7 -0
- package/dist/helpers/fixNativeShadow.js +8 -0
- package/dist/helpers/fixNativeShadow.js.map +7 -0
- package/dist/helpers/fixNativeShadow.native.js +30 -0
- package/dist/helpers/fixNativeShadow.native.js.map +7 -0
- package/dist/helpers/getSplitStyles.js +160 -0
- package/dist/helpers/getSplitStyles.js.map +7 -0
- package/dist/helpers/getStylesAtomic.js +83 -0
- package/dist/helpers/getStylesAtomic.js.map +7 -0
- package/dist/helpers/getStylesAtomic.native.js +10 -0
- package/dist/helpers/getStylesAtomic.native.js.map +7 -0
- package/dist/helpers/insertStyleRule.js +24 -0
- package/dist/helpers/insertStyleRule.js.map +7 -0
- package/dist/helpers/isObj.js +7 -0
- package/dist/helpers/isObj.js.map +7 -0
- package/dist/helpers/matchMedia.js +15 -0
- package/dist/helpers/matchMedia.js.map +7 -0
- package/dist/helpers/matchMedia.native.js +8 -0
- package/dist/helpers/matchMedia.native.js.map +7 -0
- package/dist/helpers/pseudos.js +1 -0
- package/dist/helpers/pseudos.js.map +7 -0
- package/dist/helpers/themeable.js +26 -0
- package/dist/helpers/themeable.js.map +7 -0
- package/dist/hooks/useConstant.js +15 -0
- package/dist/hooks/useConstant.js.map +7 -0
- package/dist/hooks/useFeatures.js +75 -0
- package/dist/hooks/useFeatures.js.map +7 -0
- package/dist/hooks/useForceUpdate.js +28 -0
- package/dist/hooks/useForceUpdate.js.map +7 -0
- package/dist/hooks/useMedia.js +171 -0
- package/dist/hooks/useMedia.js.map +7 -0
- package/dist/hooks/usePressable.js +13 -0
- package/dist/hooks/usePressable.js.map +7 -0
- package/dist/hooks/useTheme.js +93 -0
- package/dist/hooks/useTheme.js.map +7 -0
- package/dist/index.cjs +2125 -0
- package/dist/index.cjs.map +7 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +7 -0
- package/dist/packages/core/src/constants/constants.d.ts +8 -0
- package/dist/packages/core/src/constants/constants.d.ts.map +1 -0
- package/dist/packages/core/src/constants/platform.d.ts +9 -0
- package/dist/packages/core/src/constants/platform.d.ts.map +1 -0
- package/dist/packages/core/src/constants/pseudos.d.ts +15 -0
- package/dist/packages/core/src/constants/pseudos.d.ts.map +1 -0
- package/dist/packages/core/src/constants/rnw.d.ts +2 -0
- package/dist/packages/core/src/constants/rnw.d.ts.map +1 -0
- package/dist/packages/core/src/createComponent.d.ts +16 -0
- package/dist/packages/core/src/createComponent.d.ts.map +1 -0
- package/dist/packages/core/src/createShorthands.d.ts +2 -0
- package/dist/packages/core/src/createShorthands.d.ts.map +1 -0
- package/dist/packages/core/src/createTamagui.d.ts +37 -0
- package/dist/packages/core/src/createTamagui.d.ts.map +1 -0
- package/dist/packages/core/src/createTheme.d.ts +5 -0
- package/dist/packages/core/src/createTheme.d.ts.map +1 -0
- package/dist/packages/core/src/createTokens.d.ts +45 -0
- package/dist/packages/core/src/createTokens.d.ts.map +1 -0
- package/dist/packages/core/src/createVariable.d.ts +14 -0
- package/dist/packages/core/src/createVariable.d.ts.map +1 -0
- package/dist/packages/core/src/helpers/addStylesUsingClassname.d.ts +2 -0
- package/dist/packages/core/src/helpers/addStylesUsingClassname.d.ts.map +1 -0
- package/dist/packages/core/src/helpers/createMediaStyle.d.ts +8 -0
- package/dist/packages/core/src/helpers/createMediaStyle.d.ts.map +1 -0
- package/dist/packages/core/src/helpers/createTamaguiProvider.d.ts +5 -0
- package/dist/packages/core/src/helpers/createTamaguiProvider.d.ts.map +1 -0
- package/dist/packages/core/src/helpers/extendStaticConfig.d.ts +5 -0
- package/dist/packages/core/src/helpers/extendStaticConfig.d.ts.map +1 -0
- package/dist/packages/core/src/helpers/fixNativeShadow.d.ts +2 -0
- package/dist/packages/core/src/helpers/fixNativeShadow.d.ts.map +1 -0
- package/dist/packages/core/src/helpers/fixNativeShadow.native.d.ts +2 -0
- package/dist/packages/core/src/helpers/fixNativeShadow.native.d.ts.map +1 -0
- package/dist/packages/core/src/helpers/getSplitStyles.d.ts +15 -0
- package/dist/packages/core/src/helpers/getSplitStyles.d.ts.map +1 -0
- package/dist/packages/core/src/helpers/getStylesAtomic.d.ts +3 -0
- package/dist/packages/core/src/helpers/getStylesAtomic.d.ts.map +1 -0
- package/dist/packages/core/src/helpers/getStylesAtomic.native.d.ts +2 -0
- package/dist/packages/core/src/helpers/getStylesAtomic.native.d.ts.map +1 -0
- package/dist/packages/core/src/helpers/insertStyleRule.d.ts +2 -0
- package/dist/packages/core/src/helpers/insertStyleRule.d.ts.map +1 -0
- package/dist/packages/core/src/helpers/matchMedia.d.ts +2 -0
- package/dist/packages/core/src/helpers/matchMedia.d.ts.map +1 -0
- package/dist/packages/core/src/helpers/matchMedia.native.d.ts +3 -0
- package/dist/packages/core/src/helpers/matchMedia.native.d.ts.map +1 -0
- package/dist/packages/core/src/helpers/themeable.d.ts +10 -0
- package/dist/packages/core/src/helpers/themeable.d.ts.map +1 -0
- package/dist/packages/core/src/hooks/useConstant.d.ts +2 -0
- package/dist/packages/core/src/hooks/useConstant.d.ts.map +1 -0
- package/dist/packages/core/src/hooks/useFeatures.d.ts +5 -0
- package/dist/packages/core/src/hooks/useFeatures.d.ts.map +1 -0
- package/dist/packages/core/src/hooks/useForceUpdate.d.ts +2 -0
- package/dist/packages/core/src/hooks/useForceUpdate.d.ts.map +1 -0
- package/dist/packages/core/src/hooks/useMedia.d.ts +16 -0
- package/dist/packages/core/src/hooks/useMedia.d.ts.map +1 -0
- package/dist/packages/core/src/hooks/usePressable.d.ts +3 -0
- package/dist/packages/core/src/hooks/usePressable.d.ts.map +1 -0
- package/dist/packages/core/src/hooks/useTheme.d.ts +18 -0
- package/dist/packages/core/src/hooks/useTheme.d.ts.map +1 -0
- package/dist/packages/core/src/index.d.ts +27 -0
- package/dist/packages/core/src/index.d.ts.map +1 -0
- package/dist/packages/core/src/static/postProcessStyles.d.ts +7 -0
- package/dist/packages/core/src/static/postProcessStyles.d.ts.map +1 -0
- package/dist/packages/core/src/static.d.ts +12 -0
- package/dist/packages/core/src/static.d.ts.map +1 -0
- package/dist/packages/core/src/styled.d.ts +16 -0
- package/dist/packages/core/src/styled.d.ts.map +1 -0
- package/dist/packages/core/src/types.d.ts +305 -0
- package/dist/packages/core/src/types.d.ts.map +1 -0
- package/dist/packages/core/src/views/Animated.d.ts +15 -0
- package/dist/packages/core/src/views/Animated.d.ts.map +1 -0
- package/dist/packages/core/src/views/Stack.d.ts +3 -0
- package/dist/packages/core/src/views/Stack.d.ts.map +1 -0
- package/dist/packages/core/src/views/Text.d.ts +3 -0
- package/dist/packages/core/src/views/Text.d.ts.map +1 -0
- package/dist/packages/core/src/views/TextAncestorContext.d.ts +3 -0
- package/dist/packages/core/src/views/TextAncestorContext.d.ts.map +1 -0
- package/dist/packages/core/src/views/Theme.d.ts +8 -0
- package/dist/packages/core/src/views/Theme.d.ts.map +1 -0
- package/dist/packages/core/src/views/ThemeContext.d.ts +18 -0
- package/dist/packages/core/src/views/ThemeContext.d.ts.map +1 -0
- package/dist/packages/core/src/views/ThemeInverse.d.ts +10 -0
- package/dist/packages/core/src/views/ThemeInverse.d.ts.map +1 -0
- package/dist/packages/core/src/views/ThemeManagerContext.d.ts +15 -0
- package/dist/packages/core/src/views/ThemeManagerContext.d.ts.map +1 -0
- package/dist/packages/core/src/views/ThemeProvider.d.ts +10 -0
- package/dist/packages/core/src/views/ThemeProvider.d.ts.map +1 -0
- package/dist/packages/helpers/src/AllRules.d.ts +3 -0
- package/dist/packages/helpers/src/AllRules.d.ts.map +1 -0
- package/dist/packages/helpers/src/concatClassName.d.ts +2 -0
- package/dist/packages/helpers/src/concatClassName.d.ts.map +1 -0
- package/dist/packages/helpers/src/index.d.ts +5 -0
- package/dist/packages/helpers/src/index.d.ts.map +1 -0
- package/dist/packages/helpers/src/types.d.ts +8 -0
- package/dist/packages/helpers/src/types.d.ts.map +1 -0
- package/dist/packages/helpers/src/validStyleProps.d.ts +475 -0
- package/dist/packages/helpers/src/validStyleProps.d.ts.map +1 -0
- package/dist/static/postProcessStyles.js +18 -0
- package/dist/static/postProcessStyles.js.map +7 -0
- package/dist/static.js +15 -0
- package/dist/static.js.map +7 -0
- package/dist/styled.js +21 -0
- package/dist/styled.js.map +7 -0
- package/dist/types.js +1 -0
- package/dist/types.js.map +7 -0
- package/dist/views/Animated.js +79 -0
- package/dist/views/Animated.js.map +7 -0
- package/dist/views/SafeAreaProvider.js +30 -0
- package/dist/views/SafeAreaProvider.js.map +7 -0
- package/dist/views/Stack.js +12 -0
- package/dist/views/Stack.js.map +7 -0
- package/dist/views/Text.js +60 -0
- package/dist/views/Text.js.map +7 -0
- package/dist/views/TextAncestorContext.js +18 -0
- package/dist/views/TextAncestorContext.js.map +7 -0
- package/dist/views/Theme.js +56 -0
- package/dist/views/Theme.js.map +7 -0
- package/dist/views/ThemeContext.js +6 -0
- package/dist/views/ThemeContext.js.map +7 -0
- package/dist/views/ThemeInverse.js +27 -0
- package/dist/views/ThemeInverse.js.map +7 -0
- package/dist/views/ThemeManagerContext.js +55 -0
- package/dist/views/ThemeManagerContext.js.map +7 -0
- package/dist/views/ThemeProvider.js +45 -0
- package/dist/views/ThemeProvider.js.map +7 -0
- package/package.json +33 -0
- package/src/constants/constants.ts +12 -0
- package/src/constants/platform.ts +15 -0
- package/src/constants/pseudos.ts +14 -0
- package/src/constants/rnw.tsx +20 -0
- package/src/createComponent.tsx +596 -0
- package/src/createFont.ts +26 -0
- package/src/createShorthands.ts +5 -0
- package/src/createTamagui.ts +207 -0
- package/src/createTheme.ts +19 -0
- package/src/createTokens.ts +83 -0
- package/src/createVariable.ts +22 -0
- package/src/helpers/addStylesUsingClassname.tsx +60 -0
- package/src/helpers/createMediaStyle.ts +46 -0
- package/src/helpers/createPropMapper.ts +184 -0
- package/src/helpers/createTamaguiProvider.tsx +22 -0
- package/src/helpers/extendStaticConfig.ts +68 -0
- package/src/helpers/fixNativeShadow.native.tsx +27 -0
- package/src/helpers/fixNativeShadow.tsx +2 -0
- package/src/helpers/getSplitStyles.tsx +210 -0
- package/src/helpers/getStylesAtomic.native.ts +3 -0
- package/src/helpers/getStylesAtomic.ts +103 -0
- package/src/helpers/insertStyleRule.tsx +18 -0
- package/src/helpers/isObj.ts +1 -0
- package/src/helpers/matchMedia.native.ts +3 -0
- package/src/helpers/matchMedia.ts +9 -0
- package/src/helpers/themeable.tsx +42 -0
- package/src/hooks/useConstant.tsx +10 -0
- package/src/hooks/useFeatures.tsx +78 -0
- package/src/hooks/useForceUpdate.tsx +26 -0
- package/src/hooks/useMedia.tsx +194 -0
- package/src/hooks/usePressable.tsx +9 -0
- package/src/hooks/useTheme.tsx +107 -0
- package/src/index.ts +33 -0
- package/src/static/postProcessStyles.tsx +20 -0
- package/src/static.ts +22 -0
- package/src/styled.ts +82 -0
- package/src/types.tsx +561 -0
- package/src/views/Animated.tsx +121 -0
- package/src/views/SafeAreaProvider.tsx +33 -0
- package/src/views/Stack.tsx +21 -0
- package/src/views/Text.tsx +66 -0
- package/src/views/TextAncestorContext.tsx +12 -0
- package/src/views/Theme.tsx +73 -0
- package/src/views/ThemeContext.tsx +5 -0
- package/src/views/ThemeInverse.tsx +23 -0
- package/src/views/ThemeManagerContext.tsx +50 -0
- package/src/views/ThemeProvider.tsx +52 -0
- package/tsconfig.json +8 -0
- 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,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
|
+
}
|