@tamagui/core 1.0.1-beta.140 → 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.
- package/dist/cjs/Tamagui.js +0 -0
- package/dist/cjs/Tamagui.js.map +0 -0
- package/dist/cjs/addTheme.js +0 -0
- package/dist/cjs/addTheme.js.map +0 -0
- package/dist/cjs/conf.js +0 -0
- package/dist/cjs/conf.js.map +0 -0
- package/dist/cjs/constants/constants.js +0 -0
- package/dist/cjs/constants/constants.js.map +0 -0
- package/dist/cjs/constants/platform.js +0 -0
- package/dist/cjs/constants/platform.js.map +0 -0
- package/dist/cjs/contexts/ButtonInsideButtonContext.js +0 -0
- package/dist/cjs/contexts/ButtonInsideButtonContext.js.map +0 -0
- package/dist/cjs/contexts/FontLanguageContext.js +0 -0
- package/dist/cjs/contexts/FontLanguageContext.js.map +0 -0
- package/dist/cjs/contexts/TextAncestorContext.js +0 -0
- package/dist/cjs/contexts/TextAncestorContext.js.map +0 -0
- package/dist/cjs/contexts/ThemeContext.js +0 -0
- package/dist/cjs/contexts/ThemeContext.js.map +0 -0
- package/dist/cjs/createComponent.js +6 -13
- package/dist/cjs/createComponent.js.map +2 -2
- package/dist/cjs/createFont.js +0 -0
- package/dist/cjs/createFont.js.map +0 -0
- package/dist/cjs/createShorthands.js +0 -0
- package/dist/cjs/createShorthands.js.map +0 -0
- package/dist/cjs/createTamagui.js +24 -27
- package/dist/cjs/createTamagui.js.map +2 -2
- package/dist/cjs/createTheme.js +0 -0
- package/dist/cjs/createTheme.js.map +0 -0
- package/dist/cjs/createTokens.js +0 -0
- package/dist/cjs/createTokens.js.map +0 -0
- package/dist/cjs/createVariable.js +18 -26
- package/dist/cjs/createVariable.js.map +2 -2
- package/dist/cjs/createVariables.js +0 -0
- package/dist/cjs/createVariables.js.map +0 -0
- package/dist/cjs/helpers/RNComponents.js +0 -0
- package/dist/cjs/helpers/RNComponents.js.map +0 -0
- package/dist/cjs/helpers/ThemeManager.js +0 -0
- package/dist/cjs/helpers/ThemeManager.js.map +0 -0
- package/dist/cjs/helpers/areEqualSets.js +0 -0
- package/dist/cjs/helpers/areEqualSets.js.map +0 -0
- package/dist/cjs/helpers/assignNativePropsToWeb.js +0 -0
- package/dist/cjs/helpers/assignNativePropsToWeb.js.map +0 -0
- package/dist/cjs/helpers/assignNativePropsToWeb.native.js +0 -0
- package/dist/cjs/helpers/assignNativePropsToWeb.native.js.map +0 -0
- package/dist/cjs/helpers/calc.js +0 -0
- package/dist/cjs/helpers/calc.js.map +0 -0
- package/dist/cjs/helpers/createMediaStyle.js +0 -0
- package/dist/cjs/helpers/createMediaStyle.js.map +0 -0
- package/dist/cjs/helpers/createPropMapper.js +0 -0
- package/dist/cjs/helpers/createPropMapper.js.map +0 -0
- package/dist/cjs/helpers/createShallowUpdate.js +0 -0
- package/dist/cjs/helpers/createShallowUpdate.js.map +0 -0
- package/dist/cjs/helpers/cssHash.js +0 -0
- package/dist/cjs/helpers/cssHash.js.map +0 -0
- package/dist/cjs/helpers/expandStyle.js +0 -0
- package/dist/cjs/helpers/expandStyle.js.map +0 -0
- package/dist/cjs/helpers/expandStyles.js +0 -0
- package/dist/cjs/helpers/expandStyles.js.map +0 -0
- package/dist/cjs/helpers/extendStaticConfig.js +0 -0
- package/dist/cjs/helpers/extendStaticConfig.js.map +0 -0
- package/dist/cjs/helpers/fixNativeShadow.js +0 -0
- package/dist/cjs/helpers/fixNativeShadow.js.map +0 -0
- package/dist/cjs/helpers/getExpandedShorthands.js +0 -0
- package/dist/cjs/helpers/getExpandedShorthands.js.map +0 -0
- package/dist/cjs/helpers/getFont.js +0 -0
- package/dist/cjs/helpers/getFont.js.map +0 -0
- package/dist/cjs/helpers/getFontLanguage.js +0 -0
- package/dist/cjs/helpers/getFontLanguage.js.map +0 -0
- package/dist/cjs/helpers/getSize.js +0 -0
- package/dist/cjs/helpers/getSize.js.map +0 -0
- package/dist/cjs/helpers/getSplitStyles.js +0 -0
- package/dist/cjs/helpers/getSplitStyles.js.map +0 -0
- package/dist/cjs/helpers/getStackSize.js +0 -0
- package/dist/cjs/helpers/getStackSize.js.map +0 -0
- package/dist/cjs/helpers/getStylesAtomic.js +0 -0
- package/dist/cjs/helpers/getStylesAtomic.js.map +0 -0
- package/dist/cjs/helpers/getStylesAtomic.native.js +0 -0
- package/dist/cjs/helpers/getStylesAtomic.native.js.map +0 -0
- package/dist/cjs/helpers/getThemeCSSRules.js +0 -0
- package/dist/cjs/helpers/getThemeCSSRules.js.map +0 -0
- package/dist/cjs/helpers/getThemeCSSRules.native.js +0 -0
- package/dist/cjs/helpers/getThemeCSSRules.native.js.map +0 -0
- package/dist/cjs/helpers/getVariantExtras.js +0 -0
- package/dist/cjs/helpers/getVariantExtras.js.map +0 -0
- package/dist/cjs/helpers/insertStyleRule.js +0 -0
- package/dist/cjs/helpers/insertStyleRule.js.map +0 -0
- package/dist/cjs/helpers/isObj.js +0 -0
- package/dist/cjs/helpers/isObj.js.map +0 -0
- package/dist/cjs/helpers/isTamaguiComponent.js +0 -0
- package/dist/cjs/helpers/isTamaguiComponent.js.map +0 -0
- package/dist/cjs/helpers/isTamaguiElement.js +0 -0
- package/dist/cjs/helpers/isTamaguiElement.js.map +0 -0
- package/dist/cjs/helpers/matchMedia.js +0 -0
- package/dist/cjs/helpers/matchMedia.js.map +0 -0
- package/dist/cjs/helpers/matchMedia.native.js +0 -0
- package/dist/cjs/helpers/matchMedia.native.js.map +0 -0
- package/dist/cjs/helpers/mergeProps.js +0 -0
- package/dist/cjs/helpers/mergeProps.js.map +0 -0
- package/dist/cjs/helpers/mergeTransform.js +0 -0
- package/dist/cjs/helpers/mergeTransform.js.map +0 -0
- package/dist/cjs/helpers/normalizeColor.js +0 -0
- package/dist/cjs/helpers/normalizeColor.js.map +0 -0
- package/dist/cjs/helpers/normalizeValueWithProperty.js +0 -0
- package/dist/cjs/helpers/normalizeValueWithProperty.js.map +0 -0
- package/dist/cjs/helpers/proxyThemeVariables.js +0 -0
- package/dist/cjs/helpers/proxyThemeVariables.js.map +0 -0
- package/dist/cjs/helpers/pseudoDescriptors.js +0 -0
- package/dist/cjs/helpers/pseudoDescriptors.js.map +0 -0
- package/dist/cjs/helpers/registerCSSVariable.js +0 -0
- package/dist/cjs/helpers/registerCSSVariable.js.map +2 -2
- package/dist/cjs/helpers/startTransition.js +0 -0
- package/dist/cjs/helpers/startTransition.js.map +0 -0
- package/dist/cjs/helpers/themeable.js +0 -0
- package/dist/cjs/helpers/themeable.js.map +0 -0
- package/dist/cjs/helpers/themes.js +0 -0
- package/dist/cjs/helpers/themes.js.map +0 -0
- package/dist/cjs/helpers/validate.js +0 -0
- package/dist/cjs/helpers/validate.js.map +0 -0
- package/dist/cjs/helpers/withStaticProperties.js +0 -0
- package/dist/cjs/helpers/withStaticProperties.js.map +0 -0
- package/dist/cjs/hooks/getThemeUnwrapped.js +0 -0
- package/dist/cjs/hooks/getThemeUnwrapped.js.map +0 -0
- package/dist/cjs/hooks/useConstant.js +3 -0
- package/dist/cjs/hooks/useConstant.js.map +2 -2
- package/dist/cjs/hooks/useFeatures.js +8 -0
- package/dist/cjs/hooks/useFeatures.js.map +2 -2
- package/dist/cjs/hooks/useId.js +0 -0
- package/dist/cjs/hooks/useId.js.map +0 -0
- package/dist/cjs/hooks/useIsMounted.js +0 -0
- package/dist/cjs/hooks/useIsMounted.js.map +0 -0
- package/dist/cjs/hooks/useIsSSR.js +2 -2
- package/dist/cjs/hooks/useIsSSR.js.map +2 -2
- package/dist/cjs/hooks/useIsTouchDevice.js +0 -0
- package/dist/cjs/hooks/useIsTouchDevice.js.map +0 -0
- package/dist/cjs/hooks/useMedia.js +0 -0
- package/dist/cjs/hooks/useMedia.js.map +0 -0
- package/dist/cjs/hooks/usePressable.js +0 -0
- package/dist/cjs/hooks/usePressable.js.map +0 -0
- package/dist/cjs/hooks/useSafeRef.js +0 -0
- package/dist/cjs/hooks/useSafeRef.js.map +0 -0
- package/dist/cjs/hooks/useTheme.js +1 -3
- package/dist/cjs/hooks/useTheme.js.map +2 -2
- package/dist/cjs/hooks/useUnmountEffect.js +0 -0
- package/dist/cjs/hooks/useUnmountEffect.js.map +0 -0
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/insertFont.js +0 -0
- package/dist/cjs/insertFont.js.map +1 -1
- package/dist/cjs/static.js +0 -0
- package/dist/cjs/static.js.map +0 -0
- package/dist/cjs/styled.js +0 -0
- package/dist/cjs/styled.js.map +0 -0
- package/dist/cjs/types-rnw.js +0 -0
- package/dist/cjs/types-rnw.js.map +0 -0
- package/dist/cjs/types.js +0 -0
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/updateTheme.js +0 -0
- package/dist/cjs/updateTheme.js.map +0 -0
- package/dist/cjs/vendor/Pressability.js +0 -0
- package/dist/cjs/vendor/Pressability.js.map +0 -0
- package/dist/cjs/vendor/Pressability.native.js +0 -0
- package/dist/cjs/vendor/Pressability.native.js.map +0 -0
- package/dist/cjs/views/FontLanguage.js +0 -0
- package/dist/cjs/views/FontLanguage.js.map +0 -0
- package/dist/cjs/views/FontLanguage.native.js +0 -0
- package/dist/cjs/views/FontLanguage.native.js.map +0 -0
- package/dist/cjs/views/FontLanguage.types.js +0 -0
- package/dist/cjs/views/FontLanguage.types.js.map +0 -0
- package/dist/cjs/views/Slot.js +0 -0
- package/dist/cjs/views/Slot.js.map +0 -0
- package/dist/cjs/views/Stack.js +0 -0
- package/dist/cjs/views/Stack.js.map +0 -0
- package/dist/cjs/{helpers/createTamaguiProvider.js → views/TamaguiProvider.js} +36 -37
- package/dist/cjs/views/TamaguiProvider.js.map +7 -0
- package/dist/cjs/views/Text.js +0 -0
- package/dist/cjs/views/Text.js.map +0 -0
- package/dist/cjs/views/Theme.js +4 -3
- package/dist/cjs/views/Theme.js.map +2 -2
- package/dist/cjs/views/ThemeInverse.js +0 -0
- package/dist/cjs/views/ThemeInverse.js.map +0 -0
- package/dist/cjs/views/ThemeProvider.js +2 -2
- package/dist/cjs/views/ThemeProvider.js.map +2 -2
- package/dist/cjs/views/ThemeReset.js +0 -0
- package/dist/cjs/views/ThemeReset.js.map +0 -0
- package/dist/esm/Tamagui.js +0 -0
- package/dist/esm/Tamagui.js.map +0 -0
- package/dist/esm/addTheme.js +0 -0
- package/dist/esm/addTheme.js.map +0 -0
- package/dist/esm/conf.js +0 -0
- package/dist/esm/conf.js.map +0 -0
- package/dist/esm/constants/constants.js +0 -0
- package/dist/esm/constants/constants.js.map +0 -0
- package/dist/esm/constants/platform.js +0 -0
- package/dist/esm/constants/platform.js.map +0 -0
- package/dist/esm/contexts/ButtonInsideButtonContext.js +0 -0
- package/dist/esm/contexts/ButtonInsideButtonContext.js.map +0 -0
- package/dist/esm/contexts/FontLanguageContext.js +0 -0
- package/dist/esm/contexts/FontLanguageContext.js.map +0 -0
- package/dist/esm/contexts/TextAncestorContext.js +0 -0
- package/dist/esm/contexts/TextAncestorContext.js.map +0 -0
- package/dist/esm/contexts/ThemeContext.js +0 -0
- package/dist/esm/contexts/ThemeContext.js.map +0 -0
- package/dist/esm/createComponent.js +7 -14
- package/dist/esm/createComponent.js.map +2 -2
- package/dist/esm/createFont.js +0 -0
- package/dist/esm/createFont.js.map +0 -0
- package/dist/esm/createShorthands.js +0 -0
- package/dist/esm/createShorthands.js.map +0 -0
- package/dist/esm/createTamagui.js +24 -27
- package/dist/esm/createTamagui.js.map +2 -2
- package/dist/esm/createTheme.js +0 -0
- package/dist/esm/createTheme.js.map +0 -0
- package/dist/esm/createTokens.js +0 -0
- package/dist/esm/createTokens.js.map +0 -0
- package/dist/esm/createVariable.js +16 -24
- package/dist/esm/createVariable.js.map +2 -2
- package/dist/esm/createVariables.js +0 -0
- package/dist/esm/createVariables.js.map +0 -0
- package/dist/esm/helpers/RNComponents.js +0 -0
- package/dist/esm/helpers/RNComponents.js.map +0 -0
- package/dist/esm/helpers/ThemeManager.js +0 -0
- package/dist/esm/helpers/ThemeManager.js.map +0 -0
- package/dist/esm/helpers/areEqualSets.js +0 -0
- package/dist/esm/helpers/areEqualSets.js.map +0 -0
- package/dist/esm/helpers/assignNativePropsToWeb.js +0 -0
- package/dist/esm/helpers/assignNativePropsToWeb.js.map +0 -0
- package/dist/esm/helpers/assignNativePropsToWeb.native.js +0 -0
- package/dist/esm/helpers/assignNativePropsToWeb.native.js.map +0 -0
- package/dist/esm/helpers/calc.js +0 -0
- package/dist/esm/helpers/calc.js.map +0 -0
- package/dist/esm/helpers/createMediaStyle.js +0 -0
- package/dist/esm/helpers/createMediaStyle.js.map +0 -0
- package/dist/esm/helpers/createPropMapper.js +0 -0
- package/dist/esm/helpers/createPropMapper.js.map +0 -0
- package/dist/esm/helpers/createShallowUpdate.js +0 -0
- package/dist/esm/helpers/createShallowUpdate.js.map +0 -0
- package/dist/esm/helpers/cssHash.js +0 -0
- package/dist/esm/helpers/cssHash.js.map +0 -0
- package/dist/esm/helpers/expandStyle.js +0 -0
- package/dist/esm/helpers/expandStyle.js.map +0 -0
- package/dist/esm/helpers/expandStyles.js +0 -0
- package/dist/esm/helpers/expandStyles.js.map +0 -0
- package/dist/esm/helpers/extendStaticConfig.js +0 -0
- package/dist/esm/helpers/extendStaticConfig.js.map +0 -0
- package/dist/esm/helpers/fixNativeShadow.js +0 -0
- package/dist/esm/helpers/fixNativeShadow.js.map +0 -0
- package/dist/esm/helpers/getExpandedShorthands.js +0 -0
- package/dist/esm/helpers/getExpandedShorthands.js.map +0 -0
- package/dist/esm/helpers/getFont.js +0 -0
- package/dist/esm/helpers/getFont.js.map +0 -0
- package/dist/esm/helpers/getFontLanguage.js +0 -0
- package/dist/esm/helpers/getFontLanguage.js.map +0 -0
- package/dist/esm/helpers/getSize.js +0 -0
- package/dist/esm/helpers/getSize.js.map +0 -0
- package/dist/esm/helpers/getSplitStyles.js +0 -0
- package/dist/esm/helpers/getSplitStyles.js.map +0 -0
- package/dist/esm/helpers/getStackSize.js +0 -0
- package/dist/esm/helpers/getStackSize.js.map +0 -0
- package/dist/esm/helpers/getStylesAtomic.js +0 -0
- package/dist/esm/helpers/getStylesAtomic.js.map +0 -0
- package/dist/esm/helpers/getStylesAtomic.native.js +0 -0
- package/dist/esm/helpers/getStylesAtomic.native.js.map +0 -0
- package/dist/esm/helpers/getThemeCSSRules.js +0 -0
- package/dist/esm/helpers/getThemeCSSRules.js.map +0 -0
- package/dist/esm/helpers/getThemeCSSRules.native.js +0 -0
- package/dist/esm/helpers/getThemeCSSRules.native.js.map +0 -0
- package/dist/esm/helpers/getVariantExtras.js +0 -0
- package/dist/esm/helpers/getVariantExtras.js.map +0 -0
- package/dist/esm/helpers/insertStyleRule.js +0 -0
- package/dist/esm/helpers/insertStyleRule.js.map +0 -0
- package/dist/esm/helpers/isObj.js +0 -0
- package/dist/esm/helpers/isObj.js.map +0 -0
- package/dist/esm/helpers/isTamaguiComponent.js +0 -0
- package/dist/esm/helpers/isTamaguiComponent.js.map +0 -0
- package/dist/esm/helpers/isTamaguiElement.js +0 -0
- package/dist/esm/helpers/isTamaguiElement.js.map +0 -0
- package/dist/esm/helpers/matchMedia.js +0 -0
- package/dist/esm/helpers/matchMedia.js.map +0 -0
- package/dist/esm/helpers/matchMedia.native.js +0 -0
- package/dist/esm/helpers/matchMedia.native.js.map +0 -0
- package/dist/esm/helpers/mergeProps.js +0 -0
- package/dist/esm/helpers/mergeProps.js.map +0 -0
- package/dist/esm/helpers/mergeTransform.js +0 -0
- package/dist/esm/helpers/mergeTransform.js.map +0 -0
- package/dist/esm/helpers/normalizeColor.js +0 -0
- package/dist/esm/helpers/normalizeColor.js.map +0 -0
- package/dist/esm/helpers/normalizeValueWithProperty.js +0 -0
- package/dist/esm/helpers/normalizeValueWithProperty.js.map +0 -0
- package/dist/esm/helpers/proxyThemeVariables.js +0 -0
- package/dist/esm/helpers/proxyThemeVariables.js.map +0 -0
- package/dist/esm/helpers/pseudoDescriptors.js +0 -0
- package/dist/esm/helpers/pseudoDescriptors.js.map +0 -0
- package/dist/esm/helpers/registerCSSVariable.js +0 -0
- package/dist/esm/helpers/registerCSSVariable.js.map +2 -2
- package/dist/esm/helpers/startTransition.js +0 -0
- package/dist/esm/helpers/startTransition.js.map +0 -0
- package/dist/esm/helpers/themeable.js +0 -0
- package/dist/esm/helpers/themeable.js.map +0 -0
- package/dist/esm/helpers/themes.js +0 -0
- package/dist/esm/helpers/themes.js.map +0 -0
- package/dist/esm/helpers/validate.js +0 -0
- package/dist/esm/helpers/validate.js.map +0 -0
- package/dist/esm/helpers/withStaticProperties.js +0 -0
- package/dist/esm/helpers/withStaticProperties.js.map +0 -0
- package/dist/esm/hooks/getThemeUnwrapped.js +0 -0
- package/dist/esm/hooks/getThemeUnwrapped.js.map +0 -0
- package/dist/esm/hooks/useConstant.js +4 -1
- package/dist/esm/hooks/useConstant.js.map +2 -2
- package/dist/esm/hooks/useFeatures.js +8 -0
- package/dist/esm/hooks/useFeatures.js.map +2 -2
- package/dist/esm/hooks/useId.js +0 -0
- package/dist/esm/hooks/useId.js.map +0 -0
- package/dist/esm/hooks/useIsMounted.js +0 -0
- package/dist/esm/hooks/useIsMounted.js.map +0 -0
- package/dist/esm/hooks/useIsSSR.js +4 -4
- package/dist/esm/hooks/useIsSSR.js.map +2 -2
- package/dist/esm/hooks/useIsTouchDevice.js +0 -0
- package/dist/esm/hooks/useIsTouchDevice.js.map +0 -0
- package/dist/esm/hooks/useMedia.js +0 -0
- package/dist/esm/hooks/useMedia.js.map +0 -0
- package/dist/esm/hooks/usePressable.js +0 -0
- package/dist/esm/hooks/usePressable.js.map +0 -0
- package/dist/esm/hooks/useSafeRef.js +0 -0
- package/dist/esm/hooks/useSafeRef.js.map +0 -0
- package/dist/esm/hooks/useTheme.js +2 -4
- package/dist/esm/hooks/useTheme.js.map +2 -2
- package/dist/esm/hooks/useUnmountEffect.js +0 -0
- package/dist/esm/hooks/useUnmountEffect.js.map +0 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +2 -2
- package/dist/esm/insertFont.js +0 -0
- package/dist/esm/insertFont.js.map +1 -1
- package/dist/esm/static.js +0 -0
- package/dist/esm/static.js.map +0 -0
- package/dist/esm/styled.js +0 -0
- package/dist/esm/styled.js.map +0 -0
- package/dist/esm/types-rnw.js +0 -0
- package/dist/esm/types-rnw.js.map +0 -0
- package/dist/esm/types.js +0 -0
- package/dist/esm/types.js.map +0 -0
- package/dist/esm/updateTheme.js +0 -0
- package/dist/esm/updateTheme.js.map +0 -0
- package/dist/esm/vendor/Pressability.js +0 -0
- package/dist/esm/vendor/Pressability.js.map +0 -0
- package/dist/esm/vendor/Pressability.native.js +0 -0
- package/dist/esm/vendor/Pressability.native.js.map +0 -0
- package/dist/esm/views/FontLanguage.js +0 -0
- package/dist/esm/views/FontLanguage.js.map +0 -0
- package/dist/esm/views/FontLanguage.native.js +0 -0
- package/dist/esm/views/FontLanguage.native.js.map +0 -0
- package/dist/esm/views/FontLanguage.types.js +0 -0
- package/dist/esm/views/FontLanguage.types.js.map +0 -0
- package/dist/esm/views/Slot.js +0 -0
- package/dist/esm/views/Slot.js.map +0 -0
- package/dist/esm/views/Stack.js +0 -0
- package/dist/esm/views/Stack.js.map +0 -0
- package/dist/esm/views/TamaguiProvider.js +41 -0
- package/dist/esm/views/TamaguiProvider.js.map +7 -0
- package/dist/esm/views/Text.js +0 -0
- package/dist/esm/views/Text.js.map +0 -0
- package/dist/esm/views/Theme.js +4 -3
- package/dist/esm/views/Theme.js.map +2 -2
- package/dist/esm/views/ThemeInverse.js +0 -0
- package/dist/esm/views/ThemeInverse.js.map +0 -0
- package/dist/esm/views/ThemeProvider.js +2 -2
- package/dist/esm/views/ThemeProvider.js.map +2 -2
- package/dist/esm/views/ThemeReset.js +0 -0
- package/dist/esm/views/ThemeReset.js.map +0 -0
- package/package.json +9 -8
- package/src/Tamagui.ts +44 -0
- package/src/addTheme.ts +54 -0
- package/src/conf.ts +34 -0
- package/src/constants/constants.ts +15 -0
- package/src/constants/platform.ts +13 -0
- package/src/contexts/ButtonInsideButtonContext.tsx +3 -0
- package/src/contexts/FontLanguageContext.tsx +5 -0
- package/src/contexts/TextAncestorContext.tsx +10 -0
- package/src/contexts/ThemeContext.tsx +5 -0
- package/src/createComponent.tsx +1322 -0
- package/src/createFont.ts +26 -0
- package/src/createShorthands.ts +5 -0
- package/src/createTamagui.ts +226 -0
- package/src/createTheme.ts +13 -0
- package/src/createTokens.ts +35 -0
- package/src/createVariable.ts +94 -0
- package/src/createVariables.ts +39 -0
- package/src/helpers/RNComponents.tsx +14 -0
- package/src/helpers/ThemeManager.tsx +226 -0
- package/src/helpers/areEqualSets.tsx +9 -0
- package/src/helpers/assignNativePropsToWeb.native.tsx +1 -0
- package/src/helpers/assignNativePropsToWeb.tsx +179 -0
- package/src/helpers/calc.ts +65 -0
- package/src/helpers/createMediaStyle.ts +48 -0
- package/src/helpers/createPropMapper.ts +457 -0
- package/src/helpers/createShallowUpdate.tsx +20 -0
- package/src/helpers/cssHash.ts +28 -0
- package/src/helpers/expandStyle.ts +81 -0
- package/src/helpers/expandStyles.ts +104 -0
- package/src/helpers/extendStaticConfig.ts +76 -0
- package/src/helpers/fixNativeShadow.tsx +2 -0
- package/src/helpers/getExpandedShorthands.ts +15 -0
- package/src/helpers/getFont.tsx +40 -0
- package/src/helpers/getFontLanguage.ts +2 -0
- package/src/helpers/getSize.ts +22 -0
- package/src/helpers/getSplitStyles.tsx +686 -0
- package/src/helpers/getStackSize.ts +22 -0
- package/src/helpers/getStylesAtomic.native.ts +3 -0
- package/src/helpers/getStylesAtomic.ts +289 -0
- package/src/helpers/getThemeCSSRules.native.ts +3 -0
- package/src/helpers/getThemeCSSRules.ts +105 -0
- package/src/helpers/getVariantExtras.tsx +83 -0
- package/src/helpers/insertStyleRule.tsx +150 -0
- package/src/helpers/isObj.ts +1 -0
- package/src/helpers/isTamaguiComponent.tsx +15 -0
- package/src/helpers/isTamaguiElement.tsx +14 -0
- package/src/helpers/matchMedia.native.ts +6 -0
- package/src/helpers/matchMedia.ts +16 -0
- package/src/helpers/mergeProps.ts +56 -0
- package/src/helpers/mergeTransform.ts +14 -0
- package/src/helpers/normalizeColor.ts +53 -0
- package/src/helpers/normalizeValueWithProperty.ts +76 -0
- package/src/helpers/proxyThemeVariables.tsx +13 -0
- package/src/helpers/pseudoDescriptors.ts +18 -0
- package/src/helpers/registerCSSVariable.ts +11 -0
- package/src/helpers/startTransition.ts +4 -0
- package/src/helpers/themeable.tsx +45 -0
- package/src/helpers/themes.ts +69 -0
- package/src/helpers/validate.ts +80 -0
- package/src/helpers/withStaticProperties.tsx +7 -0
- package/src/hooks/getThemeUnwrapped.tsx +7 -0
- package/src/hooks/useConstant.tsx +19 -0
- package/src/hooks/useFeatures.tsx +288 -0
- package/src/hooks/useId.tsx +1 -0
- package/src/hooks/useIsMounted.ts +17 -0
- package/src/hooks/useIsSSR.tsx +20 -0
- package/src/hooks/useIsTouchDevice.tsx +21 -0
- package/src/hooks/useMedia.tsx +167 -0
- package/src/hooks/usePressable.tsx +9 -0
- package/src/hooks/useSafeRef.ts +50 -0
- package/src/hooks/useTheme.tsx +218 -0
- package/src/hooks/useUnmountEffect.ts +5 -0
- package/src/index.ts +79 -0
- package/src/insertFont.ts +69 -0
- package/src/static.ts +15 -0
- package/src/styled.tsx +135 -0
- package/src/types-rnw.tsx +162 -0
- package/src/types.tsx +1234 -0
- package/src/updateTheme.ts +23 -0
- package/src/vendor/Pressability.native.tsx +3 -0
- package/src/vendor/Pressability.tsx +2 -0
- package/src/views/FontLanguage.native.tsx +9 -0
- package/src/views/FontLanguage.tsx +18 -0
- package/src/views/FontLanguage.types.ts +13 -0
- package/src/views/Slot.tsx +152 -0
- package/src/views/Stack.tsx +24 -0
- package/src/views/TamaguiProvider.tsx +50 -0
- package/src/views/Text.tsx +79 -0
- package/src/views/Theme.tsx +72 -0
- package/src/views/ThemeInverse.tsx +33 -0
- package/src/views/ThemeProvider.tsx +59 -0
- package/src/views/ThemeReset.tsx +43 -0
- package/types/conf.d.ts +1 -1
- package/types/constants/platform.d.ts +2 -2
- package/types/createTamagui.d.ts +1 -1
- package/types/createTheme.d.ts +1 -1
- package/types/createVariable.d.ts +16 -12
- package/types/helpers/registerCSSVariable.d.ts +2 -2
- package/types/index.d.ts +1 -0
- package/types/types.d.ts +1 -1
- package/types/views/TamaguiProvider.d.ts +4 -0
- package/dist/cjs/Pressability.js +0 -32
- package/dist/cjs/Pressability.js.map +0 -7
- package/dist/cjs/Pressability.native.js +0 -32
- package/dist/cjs/Pressability.native.js.map +0 -7
- package/dist/cjs/ThemeContext.js +0 -30
- package/dist/cjs/ThemeContext.js.map +0 -7
- package/dist/cjs/ThemeManager.js +0 -211
- package/dist/cjs/ThemeManager.js.map +0 -7
- package/dist/cjs/defaultComponentState.js +0 -2
- package/dist/cjs/defaultComponentState.js.map +0 -7
- package/dist/cjs/ensureThemeVariable.js +0 -152
- package/dist/cjs/ensureThemeVariable.js.map +0 -7
- package/dist/cjs/helpers/createTamaguiProvider.js.map +0 -7
- package/dist/cjs/helpers/ensureThemeVariable.js +0 -152
- package/dist/cjs/helpers/ensureThemeVariable.js.map +0 -7
- package/dist/cjs/helpers/nativeGestureHandler.native.js +0 -19
- package/dist/cjs/helpers/nativeGestureHandler.native.js.map +0 -7
- package/dist/cjs/loadTheme.js +0 -64
- package/dist/cjs/loadTheme.js.map +0 -7
- package/dist/cjs/views/TextAncestorContext.js +0 -44
- package/dist/cjs/views/TextAncestorContext.js.map +0 -7
- package/dist/esm/Pressability.js +0 -7
- package/dist/esm/Pressability.js.map +0 -7
- package/dist/esm/Pressability.native.js +0 -7
- package/dist/esm/Pressability.native.js.map +0 -7
- package/dist/esm/ThemeContext.js +0 -6
- package/dist/esm/ThemeContext.js.map +0 -7
- package/dist/esm/ThemeManager.js +0 -185
- package/dist/esm/ThemeManager.js.map +0 -7
- package/dist/esm/defaultComponentState.js +0 -1
- package/dist/esm/defaultComponentState.js.map +0 -7
- package/dist/esm/ensureThemeVariable.js +0 -125
- package/dist/esm/ensureThemeVariable.js.map +0 -7
- package/dist/esm/helpers/createTamaguiProvider.js +0 -42
- package/dist/esm/helpers/createTamaguiProvider.js.map +0 -7
- package/dist/esm/helpers/ensureThemeVariable.js +0 -125
- package/dist/esm/helpers/ensureThemeVariable.js.map +0 -7
- package/dist/esm/helpers/nativeGestureHandler.native.js +0 -2
- package/dist/esm/helpers/nativeGestureHandler.native.js.map +0 -7
- package/dist/esm/loadTheme.js +0 -40
- package/dist/esm/loadTheme.js.map +0 -7
- package/dist/esm/views/TextAncestorContext.js +0 -15
- package/dist/esm/views/TextAncestorContext.js.map +0 -7
- package/types/helpers/createTamaguiProvider.d.ts +0 -3
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Some parts adapted from react-native-web
|
|
3
|
+
* Copyright (c) Nicolas Gallagher licensed under the MIT license.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { StyleObject, simpleHash } from '@tamagui/helpers'
|
|
7
|
+
import hyphenateStyleName from 'hyphenate-style-name'
|
|
8
|
+
import { TextStyle, ViewStyle } from 'react-native'
|
|
9
|
+
|
|
10
|
+
import { getConfig } from '../conf'
|
|
11
|
+
import { TamaguiInternalConfig } from '../types'
|
|
12
|
+
import { defaultOffset } from './expandStyles'
|
|
13
|
+
import { normalizeValueWithProperty } from './normalizeValueWithProperty'
|
|
14
|
+
import { PseudoDescriptor, pseudoDescriptors } from './pseudoDescriptors'
|
|
15
|
+
|
|
16
|
+
// refactor this file away next...
|
|
17
|
+
|
|
18
|
+
type ViewOrTextStyle = ViewStyle | TextStyle
|
|
19
|
+
|
|
20
|
+
export type ViewStyleWithPseudos = ViewOrTextStyle & {
|
|
21
|
+
hoverStyle?: ViewOrTextStyle
|
|
22
|
+
pressStyle?: ViewOrTextStyle
|
|
23
|
+
focusStyle?: ViewOrTextStyle
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const pseudosOrdered = Object.values(pseudoDescriptors)
|
|
27
|
+
|
|
28
|
+
export function getStylesAtomic(stylesIn: ViewStyleWithPseudos) {
|
|
29
|
+
// performance optimization
|
|
30
|
+
if (!stylesIn.hoverStyle && !stylesIn.pressStyle && !stylesIn.focusStyle) {
|
|
31
|
+
return getAtomicStyle(stylesIn)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// only for pseudos
|
|
35
|
+
const { hoverStyle, pressStyle, focusStyle, ...base } = stylesIn
|
|
36
|
+
let res: StyleObject[] = []
|
|
37
|
+
// *1 order matched to *0
|
|
38
|
+
for (const [index, style] of [hoverStyle, pressStyle, focusStyle, base].entries()) {
|
|
39
|
+
if (!style) continue
|
|
40
|
+
const pseudo = pseudosOrdered[index]
|
|
41
|
+
res = [...res, ...getAtomicStyle(style, pseudo)]
|
|
42
|
+
}
|
|
43
|
+
return res
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function getAtomicStyle(style: ViewOrTextStyle, pseudo?: PseudoDescriptor): StyleObject[] {
|
|
47
|
+
if (process.env.NODE_ENV === 'development') {
|
|
48
|
+
if (!style || typeof style !== 'object') {
|
|
49
|
+
throw new Error(`Wrong style type: "${typeof style}": ${style}`)
|
|
50
|
+
}
|
|
51
|
+
} else {
|
|
52
|
+
if (!style) {
|
|
53
|
+
console.warn(`Invalid style`)
|
|
54
|
+
return []
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return generateAtomicStyles(style, pseudo)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
let conf: TamaguiInternalConfig
|
|
62
|
+
|
|
63
|
+
const generateAtomicStyles = (
|
|
64
|
+
styleIn: ViewStyle & TextStyle,
|
|
65
|
+
pseudo?: PseudoDescriptor
|
|
66
|
+
): StyleObject[] => {
|
|
67
|
+
conf = conf || getConfig()
|
|
68
|
+
|
|
69
|
+
// were converting to css styles
|
|
70
|
+
const style = styleIn as Record<string, string | null | undefined>
|
|
71
|
+
|
|
72
|
+
// transform
|
|
73
|
+
if (style.transform) {
|
|
74
|
+
if (Array.isArray(style.transform)) {
|
|
75
|
+
style.transform = style.transform.map(mapTransform).join(' ')
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
styleToCSS(style)
|
|
80
|
+
|
|
81
|
+
const out: StyleObject[] = []
|
|
82
|
+
for (const key in style) {
|
|
83
|
+
const value = style[key]
|
|
84
|
+
if (value != null && value != undefined) {
|
|
85
|
+
const uid = key + (pseudo?.name || '')
|
|
86
|
+
const cachedResult = cache.get(uid, value)
|
|
87
|
+
if (cachedResult != undefined) {
|
|
88
|
+
out.push(cachedResult)
|
|
89
|
+
} else {
|
|
90
|
+
const hash = presetHashes[value]
|
|
91
|
+
? value
|
|
92
|
+
: typeof value === 'string'
|
|
93
|
+
? simpleHash(value)
|
|
94
|
+
: `${value}`.replace('.', 'dot')
|
|
95
|
+
|
|
96
|
+
const pseudoPrefix = pseudo ? `0${pseudo.name}-` : ''
|
|
97
|
+
const shortProp = conf.inverseShorthands[key] || key
|
|
98
|
+
const identifier = `_${shortProp}-${pseudoPrefix}${hash}`
|
|
99
|
+
const rules = createAtomicRules(identifier, key, value, pseudo)
|
|
100
|
+
const styleObject: StyleObject = {
|
|
101
|
+
property: key,
|
|
102
|
+
pseudo: pseudo?.name,
|
|
103
|
+
value,
|
|
104
|
+
identifier,
|
|
105
|
+
rules,
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
cache.set(uid, value, styleObject)
|
|
109
|
+
out.push(styleObject)
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return out
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
const presetHashes = {
|
|
117
|
+
none: true,
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const n = (val: any) => normalizeValueWithProperty(val)
|
|
121
|
+
|
|
122
|
+
export function styleToCSS(style: Record<string, any>) {
|
|
123
|
+
// box-shadow
|
|
124
|
+
const { shadowOffset, shadowRadius, shadowColor } = style
|
|
125
|
+
if (style.shadowRadius !== undefined) {
|
|
126
|
+
const offset = shadowOffset || defaultOffset
|
|
127
|
+
const shadow = `${n(offset.width)} ${n(offset.height)} ${n(shadowRadius)} ${shadowColor}`
|
|
128
|
+
style.boxShadow = style.boxShadow ? `${style.boxShadow}, ${shadow}` : shadow
|
|
129
|
+
delete style.shadowOffset
|
|
130
|
+
delete style.shadowRadius
|
|
131
|
+
delete style.shadowColor
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// text-shadow
|
|
135
|
+
const { textShadowColor, textShadowOffset, textShadowRadius } = style
|
|
136
|
+
if (textShadowColor || textShadowOffset || textShadowRadius) {
|
|
137
|
+
const { height, width } = textShadowOffset || defaultOffset
|
|
138
|
+
const radius = textShadowRadius || 0
|
|
139
|
+
const color = normalizeValueWithProperty(textShadowColor, 'textShadowColor')
|
|
140
|
+
if (color && (height !== 0 || width !== 0 || radius !== 0)) {
|
|
141
|
+
const blurRadius = normalizeValueWithProperty(radius)
|
|
142
|
+
const offsetX = normalizeValueWithProperty(width)
|
|
143
|
+
const offsetY = normalizeValueWithProperty(height)
|
|
144
|
+
style.textShadow = `${offsetX} ${offsetY} ${blurRadius} ${color}`
|
|
145
|
+
}
|
|
146
|
+
delete style.textShadowColor
|
|
147
|
+
delete style.textShadowOffset
|
|
148
|
+
delete style.textShadowRadius
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// { scale: 2 } => 'scale(2)'
|
|
153
|
+
// { translateX: 20 } => 'translateX(20px)'
|
|
154
|
+
// { matrix: [1,2,3,4,5,6] } => 'matrix(1,2,3,4,5,6)'
|
|
155
|
+
const mapTransform = (transform) => {
|
|
156
|
+
const type = Object.keys(transform)[0]
|
|
157
|
+
const value = transform[type]
|
|
158
|
+
if (type === 'matrix' || type === 'matrix3d') {
|
|
159
|
+
return `${type}(${value.join(',')})`
|
|
160
|
+
} else {
|
|
161
|
+
const normalizedValue = normalizeValueWithProperty(value, type)
|
|
162
|
+
return `${type}(${normalizedValue})`
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// cache
|
|
167
|
+
type Value = Object | Array<any> | string | number
|
|
168
|
+
export type Style = { [key: string]: Value }
|
|
169
|
+
class Cache {
|
|
170
|
+
values: Record<string, any> = {}
|
|
171
|
+
|
|
172
|
+
get(key: string, valStr: string) {
|
|
173
|
+
return this.values[key]?.[valStr]
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
set(key: string, valStr: string, object: any) {
|
|
177
|
+
this.values[key] ??= {}
|
|
178
|
+
this.values[key][valStr] = object
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
const cache = new Cache()
|
|
182
|
+
|
|
183
|
+
function createDeclarationBlock(style: Style, important = false) {
|
|
184
|
+
let declarations = ''
|
|
185
|
+
for (const key in style) {
|
|
186
|
+
const prop = hyphenateStyleName(key)
|
|
187
|
+
const value = style[key]
|
|
188
|
+
declarations += `${prop}:${value}${important ? ` !important` : ''};`
|
|
189
|
+
}
|
|
190
|
+
return `{${declarations}}`
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
const pseudoSelectorPrefixes = (() => {
|
|
194
|
+
const res: Record<string, string> = {}
|
|
195
|
+
for (const key in pseudoDescriptors) {
|
|
196
|
+
const pseudo = pseudoDescriptors[key]
|
|
197
|
+
res[pseudo.name] = [...Array(pseudo.priority)].map(() => ':root').join('') + ' '
|
|
198
|
+
}
|
|
199
|
+
return res
|
|
200
|
+
})()
|
|
201
|
+
|
|
202
|
+
function createAtomicRules(
|
|
203
|
+
identifier: string,
|
|
204
|
+
property: string,
|
|
205
|
+
value: any,
|
|
206
|
+
pseudo?: PseudoDescriptor
|
|
207
|
+
): string[] {
|
|
208
|
+
const selector = pseudo
|
|
209
|
+
? `${pseudoSelectorPrefixes[pseudo.name]} .${identifier}:${pseudo.name}`
|
|
210
|
+
: `.${identifier}`
|
|
211
|
+
const important = !!pseudo
|
|
212
|
+
|
|
213
|
+
let rules: string[] = []
|
|
214
|
+
|
|
215
|
+
// Handle non-standard properties and object values that require multiple
|
|
216
|
+
// CSS rules to be created.
|
|
217
|
+
switch (property) {
|
|
218
|
+
// Equivalent to using '::placeholder'
|
|
219
|
+
case 'placeholderTextColor': {
|
|
220
|
+
const block = createDeclarationBlock({ color: value, opacity: 1 }, important)
|
|
221
|
+
rules.push(`${selector}::placeholder${block}`)
|
|
222
|
+
break
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// all webkit prefixed rules
|
|
226
|
+
case 'backgroundClip':
|
|
227
|
+
case 'userSelect': {
|
|
228
|
+
const propertyCapitalized = `${property[0].toUpperCase()}${property.slice(1)}`
|
|
229
|
+
const webkitProperty = `Webkit${propertyCapitalized}`
|
|
230
|
+
const block = createDeclarationBlock(
|
|
231
|
+
{ [property]: value, [webkitProperty]: value },
|
|
232
|
+
important
|
|
233
|
+
)
|
|
234
|
+
rules.push(`${selector}${block}`)
|
|
235
|
+
break
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// Polyfill for additional 'pointer-events' values
|
|
239
|
+
// See d13f78622b233a0afc0c7a200c0a0792c8ca9e58
|
|
240
|
+
case 'pointerEvents': {
|
|
241
|
+
let finalValue = value
|
|
242
|
+
if (value === 'auto' || value === 'box-only') {
|
|
243
|
+
finalValue = 'auto'
|
|
244
|
+
if (value === 'box-only') {
|
|
245
|
+
rules.push(`${selector}>*${boxOnly}`)
|
|
246
|
+
}
|
|
247
|
+
} else if (value === 'none' || value === 'box-none') {
|
|
248
|
+
finalValue = 'none'
|
|
249
|
+
if (value === 'box-none') {
|
|
250
|
+
rules.push(`${selector}>*${boxNone}`)
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
const block = createDeclarationBlock({ pointerEvents: finalValue }, true)
|
|
254
|
+
rules.push(`${selector}${block}`)
|
|
255
|
+
break
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// Polyfill for draft spec
|
|
259
|
+
// https://drafts.csswg.org/css-scrollbars-1/
|
|
260
|
+
case 'scrollbarWidth': {
|
|
261
|
+
if (value === 'none') {
|
|
262
|
+
rules.push(`${selector}::-webkit-scrollbar{display:none}`)
|
|
263
|
+
}
|
|
264
|
+
const block = createDeclarationBlock({ scrollbarWidth: value }, important)
|
|
265
|
+
rules.push(`${selector}${block}`)
|
|
266
|
+
break
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
default: {
|
|
270
|
+
const block = createDeclarationBlock({ [property]: value }, important)
|
|
271
|
+
rules.push(`${selector}${block}`)
|
|
272
|
+
break
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
// hover styles need to be conditional
|
|
277
|
+
// perhaps this can be generalized but for now lets just shortcut
|
|
278
|
+
// and hardcode for hover styles, if we need to later we can
|
|
279
|
+
// WEIRD SYNTAX, SEE:
|
|
280
|
+
// https://stackoverflow.com/questions/40532204/media-query-for-devices-supporting-hover
|
|
281
|
+
if (pseudo && pseudo.name === 'hover') {
|
|
282
|
+
rules = rules.map((r) => `@media not all and (hover: none) { ${r} }`)
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
return rules
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
const boxNone = createDeclarationBlock({ pointerEvents: 'auto' }, true)
|
|
289
|
+
const boxOnly = createDeclarationBlock({ pointerEvents: 'none' }, true)
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { THEME_CLASSNAME_PREFIX } from '../constants/constants'
|
|
2
|
+
import { Variable } from '../createVariable'
|
|
3
|
+
import { CreateTamaguiProps, ThemeObject } from '../types'
|
|
4
|
+
import { tokensValueToVariable } from './registerCSSVariable'
|
|
5
|
+
|
|
6
|
+
export function getThemeCSSRules({
|
|
7
|
+
config,
|
|
8
|
+
themeName,
|
|
9
|
+
theme,
|
|
10
|
+
names,
|
|
11
|
+
}: {
|
|
12
|
+
config: CreateTamaguiProps
|
|
13
|
+
themeName: string
|
|
14
|
+
theme: ThemeObject
|
|
15
|
+
names: string[]
|
|
16
|
+
}) {
|
|
17
|
+
const cssRuleSets: string[] = []
|
|
18
|
+
|
|
19
|
+
// special case for SSR
|
|
20
|
+
const hasDarkLight = 'light' in config.themes && 'dark' in config.themes
|
|
21
|
+
const CNP = `.${THEME_CLASSNAME_PREFIX}`
|
|
22
|
+
let vars = ''
|
|
23
|
+
|
|
24
|
+
// themeToVariableToValueMap.set(theme, {})
|
|
25
|
+
// const varToValMap = themeToVariableToValueMap.get(theme)
|
|
26
|
+
for (const themeKey in theme) {
|
|
27
|
+
const variable = theme[themeKey] as Variable
|
|
28
|
+
let value: any = null
|
|
29
|
+
// if (varToValMap) {
|
|
30
|
+
// varToValMap[variable.variable] = variable.val
|
|
31
|
+
// }
|
|
32
|
+
if (variable.isFloating || !tokensValueToVariable.has(variable.val)) {
|
|
33
|
+
value = variable.val
|
|
34
|
+
} else {
|
|
35
|
+
value = tokensValueToVariable.get(variable.val)!.variable
|
|
36
|
+
}
|
|
37
|
+
vars += `--${themeKey}:${value};`
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const isDarkOrLightBase = themeName === 'dark' || themeName === 'light'
|
|
41
|
+
const selectors = names.map((name) => {
|
|
42
|
+
return `${CNP}${name}`
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
// since we dont specify dark/light in classnames we have to do an awkward specificity war
|
|
46
|
+
// use config.maxDarkLightNesting to determine how deep you can nest until it breaks
|
|
47
|
+
if (hasDarkLight) {
|
|
48
|
+
for (const subName of names) {
|
|
49
|
+
const isDark = isDarkOrLightBase || subName.startsWith('dark_')
|
|
50
|
+
const max = config.maxDarkLightNesting ?? 3
|
|
51
|
+
|
|
52
|
+
if (!isDark && !subName.startsWith('light_')) {
|
|
53
|
+
// neither light nor dark subtheme, just generate one selector with :root:root which
|
|
54
|
+
// will override all :root light/dark selectors generated below
|
|
55
|
+
selectors.push(`:root:root ${CNP}${subName}`)
|
|
56
|
+
continue
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const childSelector = `${CNP}${subName.replace(isDark ? 'dark_' : 'light_', '')}`
|
|
60
|
+
const order = isDark ? ['dark', 'light'] : ['light', 'dark']
|
|
61
|
+
if (isDarkOrLightBase) {
|
|
62
|
+
order.reverse()
|
|
63
|
+
}
|
|
64
|
+
const [stronger, weaker] = order
|
|
65
|
+
const numSelectors = Math.round(max * 1.5)
|
|
66
|
+
|
|
67
|
+
for (let pi = 0; pi < numSelectors; pi++) {
|
|
68
|
+
const isOdd = pi % 2 === 1
|
|
69
|
+
if (isOdd && pi < 3) continue
|
|
70
|
+
const parents = new Array(pi + 1).fill(undefined).map((_, psi) => {
|
|
71
|
+
return `${CNP}${psi % 2 === 0 ? stronger : weaker}`
|
|
72
|
+
})
|
|
73
|
+
let parentSelectors = parents.length > 1 ? parents.slice(1) : parents
|
|
74
|
+
if (isOdd) {
|
|
75
|
+
const [_first, second, ...rest] = parentSelectors
|
|
76
|
+
parentSelectors = [second, ...rest, second]
|
|
77
|
+
}
|
|
78
|
+
// avoid .t_light .t_light at the end (make sure child is unique from last parent)
|
|
79
|
+
const lastParentSelector = parentSelectors[parentSelectors.length - 1]
|
|
80
|
+
selectors.push(
|
|
81
|
+
`${parentSelectors.join(' ')} ${
|
|
82
|
+
childSelector === lastParentSelector ? '' : childSelector
|
|
83
|
+
}`
|
|
84
|
+
)
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const rootSep = config.themeClassNameOnRoot ? '' : ' '
|
|
90
|
+
const css = `${selectors.map((x) => `:root${rootSep}${x}`).join(', ')} {${vars}}`
|
|
91
|
+
cssRuleSets.push(css)
|
|
92
|
+
|
|
93
|
+
if (config.shouldAddPrefersColorThemes && isDarkOrLightBase) {
|
|
94
|
+
// add media prefers for dark/light base
|
|
95
|
+
const isDark = themeName.startsWith('dark')
|
|
96
|
+
cssRuleSets.push(
|
|
97
|
+
`@media(prefers-color-scheme: ${isDark ? 'dark' : 'light'}) {
|
|
98
|
+
body { background:${theme.background}; color: ${theme.color} }
|
|
99
|
+
:root {${vars} }
|
|
100
|
+
}`
|
|
101
|
+
)
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return cssRuleSets
|
|
105
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { getConfig } from '../conf'
|
|
2
|
+
import { GenericFonts } from '../types'
|
|
3
|
+
import { LanguageContextType } from '../views/FontLanguage.types'
|
|
4
|
+
|
|
5
|
+
const extrasCache = new WeakMap()
|
|
6
|
+
|
|
7
|
+
export function getVariantExtras(
|
|
8
|
+
props: any,
|
|
9
|
+
languageContext?: LanguageContextType,
|
|
10
|
+
theme?: any,
|
|
11
|
+
defaultProps?: any,
|
|
12
|
+
avoidDefaultProps = false
|
|
13
|
+
) {
|
|
14
|
+
const conf = getConfig()
|
|
15
|
+
|
|
16
|
+
if (extrasCache.has(props)) {
|
|
17
|
+
return extrasCache.get(props)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const fonts = languageContext
|
|
21
|
+
? getFontsForLanguage(conf.fontsParsed, languageContext)
|
|
22
|
+
: conf.fontsParsed
|
|
23
|
+
|
|
24
|
+
const next = {
|
|
25
|
+
fonts,
|
|
26
|
+
tokens: conf.tokensParsed,
|
|
27
|
+
theme,
|
|
28
|
+
// TODO do this in splitstlye
|
|
29
|
+
// we avoid passing in default props for media queries because that would confuse things like SizableText.size:
|
|
30
|
+
props: avoidDefaultProps
|
|
31
|
+
? props
|
|
32
|
+
: new Proxy(props, {
|
|
33
|
+
// handles shorthands
|
|
34
|
+
get(target, key) {
|
|
35
|
+
const shorthand = conf.inverseShorthands[key as any]
|
|
36
|
+
// shorthands before longhand because a styled() with longhand combined with inline shorthand
|
|
37
|
+
// shorthand will always be the overriding key
|
|
38
|
+
if (shorthand && Reflect.has(target, shorthand)) {
|
|
39
|
+
return Reflect.get(target, shorthand)
|
|
40
|
+
}
|
|
41
|
+
if (Reflect.has(target, key)) {
|
|
42
|
+
return Reflect.get(target, key)
|
|
43
|
+
}
|
|
44
|
+
// these props may be extracted into classNames, but we still want to access them
|
|
45
|
+
// at runtime, so we proxy back to defaultProps but don't pass them
|
|
46
|
+
if (defaultProps) {
|
|
47
|
+
if (shorthand && Reflect.has(defaultProps, shorthand)) {
|
|
48
|
+
return Reflect.get(defaultProps, shorthand)
|
|
49
|
+
}
|
|
50
|
+
if (Reflect.has(defaultProps, key)) {
|
|
51
|
+
return Reflect.get(defaultProps, key)
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
}),
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
extrasCache.set(props, next)
|
|
59
|
+
|
|
60
|
+
return next
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const fontLanguageCache = new WeakMap()
|
|
64
|
+
|
|
65
|
+
export function getFontsForLanguage(fonts: GenericFonts, language: LanguageContextType) {
|
|
66
|
+
if (fontLanguageCache.has(language)) {
|
|
67
|
+
return fontLanguageCache.get(language)
|
|
68
|
+
}
|
|
69
|
+
const next = {
|
|
70
|
+
...fonts,
|
|
71
|
+
...Object.fromEntries(
|
|
72
|
+
Object.entries(language).map(([name, lang]) => {
|
|
73
|
+
if (lang === 'default') {
|
|
74
|
+
return []
|
|
75
|
+
}
|
|
76
|
+
const langKey = `$${name}_${lang}`
|
|
77
|
+
return [`$${name}`, fonts[langKey]]
|
|
78
|
+
})
|
|
79
|
+
),
|
|
80
|
+
}
|
|
81
|
+
fontLanguageCache.set(language, next)
|
|
82
|
+
return next
|
|
83
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
// this needs to check if its inserted already? 99% of the time it is
|
|
2
|
+
// this should avoid re-inserts, but need to test the perf trade-offs
|
|
3
|
+
// i tested with the site itself and the initial insert was trivial
|
|
4
|
+
|
|
5
|
+
import { StyleObject } from '@tamagui/helpers'
|
|
6
|
+
|
|
7
|
+
const allSelectors = {}
|
|
8
|
+
const allRules = {}
|
|
9
|
+
export const insertedTransforms = {}
|
|
10
|
+
|
|
11
|
+
export const getAllSelectors = () => allSelectors
|
|
12
|
+
export const getAllRules = () => Object.values(allRules)
|
|
13
|
+
export const getAllTransforms = () => insertedTransforms
|
|
14
|
+
|
|
15
|
+
// keep transforms in map for merging later
|
|
16
|
+
function addTransform(identifier: string, css: string, rule?: CSSRule) {
|
|
17
|
+
const s = css.indexOf('transform:')
|
|
18
|
+
if (s === -1) {
|
|
19
|
+
if (process.env.NODE_ENV === 'development') {
|
|
20
|
+
// sometimes getting empty style rules from webpack... :/ only in dev
|
|
21
|
+
if (css.indexOf('{ }')) {
|
|
22
|
+
console.log('wah wah')
|
|
23
|
+
return false
|
|
24
|
+
}
|
|
25
|
+
console.groupCollapsed(`❌ Invalid transform, likely used deg/% improperly ${identifier}`)
|
|
26
|
+
console.log('rule:', rule)
|
|
27
|
+
console.trace()
|
|
28
|
+
console.groupEnd()
|
|
29
|
+
} else {
|
|
30
|
+
console.warn(`Missing transform`, identifier, css, rule)
|
|
31
|
+
}
|
|
32
|
+
return false
|
|
33
|
+
}
|
|
34
|
+
const startI = s + 'transform:'.length
|
|
35
|
+
const endI = css.indexOf(';')
|
|
36
|
+
const value = css.slice(startI, endI)
|
|
37
|
+
if (!insertedTransforms[identifier]) {
|
|
38
|
+
insertedTransforms[identifier] = value
|
|
39
|
+
return true
|
|
40
|
+
}
|
|
41
|
+
return false
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const isClient = typeof document !== 'undefined'
|
|
45
|
+
|
|
46
|
+
// gets existing ones (client side)
|
|
47
|
+
// takes ~0.1ms for a fairly large page
|
|
48
|
+
// used now for three things:
|
|
49
|
+
// 1. debugging at dev time
|
|
50
|
+
// 2. avoid duplicate insert styles at runtime
|
|
51
|
+
// 3. used now for merging transforms atomically
|
|
52
|
+
const scannedNum = new WeakMap<CSSStyleSheet, number>()
|
|
53
|
+
|
|
54
|
+
export function updateInserted() {
|
|
55
|
+
if (process.env.NODE_ENV === 'test') return
|
|
56
|
+
if (!isClient) return
|
|
57
|
+
const sheets = document.styleSheets
|
|
58
|
+
if (!sheets) return
|
|
59
|
+
for (let i = 0; i < sheets.length; i++) {
|
|
60
|
+
const sheet = sheets[i]
|
|
61
|
+
if (!sheet) continue
|
|
62
|
+
|
|
63
|
+
// avoid errors on cross origin sheets
|
|
64
|
+
// https://stackoverflow.com/questions/49993633/uncaught-domexception-failed-to-read-the-cssrules-property
|
|
65
|
+
let rules: CSSRuleList
|
|
66
|
+
try {
|
|
67
|
+
rules = sheet.cssRules
|
|
68
|
+
} catch {
|
|
69
|
+
continue
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const len = rules.length
|
|
73
|
+
const lastScanned = scannedNum.get(sheet) ?? 0
|
|
74
|
+
if (lastScanned === len) {
|
|
75
|
+
continue
|
|
76
|
+
}
|
|
77
|
+
for (let i = lastScanned; i < len; i++) {
|
|
78
|
+
const rule = rules[i]
|
|
79
|
+
const response = getTamaguiSelector(rule)
|
|
80
|
+
if (!response) {
|
|
81
|
+
continue
|
|
82
|
+
}
|
|
83
|
+
const [identifier, cssRule] = response
|
|
84
|
+
if (!allSelectors[identifier]) {
|
|
85
|
+
const isTransform = identifier.startsWith('_transform')
|
|
86
|
+
const shouldInsert = isTransform ? addTransform(identifier, cssRule.cssText, cssRule) : true
|
|
87
|
+
if (shouldInsert) {
|
|
88
|
+
allSelectors[identifier] = process.env.NODE_ENV === 'development' ? cssRule.cssText : true
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
scannedNum.set(sheet, i)
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function getTamaguiSelector(rule: CSSRule | null): readonly [string, CSSStyleRule] | null {
|
|
97
|
+
if (rule instanceof CSSStyleRule) {
|
|
98
|
+
if (rule.selectorText.startsWith('._')) {
|
|
99
|
+
return [rule.selectorText.slice(1), rule]
|
|
100
|
+
}
|
|
101
|
+
if (rule.selectorText.startsWith(':root') && rule.selectorText.includes('._')) {
|
|
102
|
+
return [getIdentifierFromTamaguiSelector(rule.selectorText), rule]
|
|
103
|
+
}
|
|
104
|
+
} else if (rule instanceof CSSMediaRule) {
|
|
105
|
+
// tamagui only ever inserts 1 rule per media
|
|
106
|
+
if (rule.cssRules.length > 1) return null
|
|
107
|
+
return getTamaguiSelector(rule.cssRules[0])
|
|
108
|
+
}
|
|
109
|
+
return null
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const getIdentifierFromTamaguiSelector = (selector: string) =>
|
|
113
|
+
selector
|
|
114
|
+
.replace(/(:root)+\s+/, '')
|
|
115
|
+
.replace(/:[a-z]+$/, '')
|
|
116
|
+
.slice(1)
|
|
117
|
+
|
|
118
|
+
// move this to probably inside createTamagui
|
|
119
|
+
updateInserted()
|
|
120
|
+
|
|
121
|
+
const sheet = isClient ? document.head.appendChild(document.createElement('style')).sheet : null
|
|
122
|
+
|
|
123
|
+
export function updateRules(identifier: string, rules: string[]) {
|
|
124
|
+
if (allRules[identifier]) return false
|
|
125
|
+
allRules[identifier] = rules
|
|
126
|
+
if (identifier.startsWith('_transform')) {
|
|
127
|
+
return addTransform(identifier, rules[0])
|
|
128
|
+
}
|
|
129
|
+
return true
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// [property, identifier, rules]
|
|
133
|
+
export type PartialStyleObject = Pick<StyleObject, 'identifier' | 'property' | 'rules'>
|
|
134
|
+
export type RulesToInsert = PartialStyleObject[]
|
|
135
|
+
|
|
136
|
+
export function insertStyleRules(rulesToInsert: RulesToInsert) {
|
|
137
|
+
// // pointerevents can have more than one, others could to needs some refactor
|
|
138
|
+
for (const { identifier, rules } of rulesToInsert) {
|
|
139
|
+
if (allSelectors[identifier] || !sheet) return
|
|
140
|
+
allSelectors[identifier] = process.env.NODE_ENV === 'development' ? rules : true
|
|
141
|
+
updateRules(identifier, rules)
|
|
142
|
+
for (const rule of rules) {
|
|
143
|
+
sheet.insertRule(rule, sheet.cssRules.length)
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export function shouldInsertStyleRules(styleObject: PartialStyleObject) {
|
|
149
|
+
return !allSelectors[styleObject.identifier]
|
|
150
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const isObj = (x: any) => x && !Array.isArray(x) && typeof x === 'object'
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { StaticConfig, StaticConfigParsed } from '../types'
|
|
2
|
+
|
|
3
|
+
export function isTamaguiComponent<A>(
|
|
4
|
+
comp: A,
|
|
5
|
+
name?: string
|
|
6
|
+
): comp is A & {
|
|
7
|
+
staticConfig: StaticConfig
|
|
8
|
+
} {
|
|
9
|
+
const config = comp && (comp['staticConfig'] as StaticConfigParsed | undefined)
|
|
10
|
+
if (!config || !config.parsed) return false
|
|
11
|
+
if (name) {
|
|
12
|
+
return name === config.componentName
|
|
13
|
+
}
|
|
14
|
+
return true
|
|
15
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React, { isValidElement } from 'react'
|
|
2
|
+
|
|
3
|
+
import { StaticConfig } from '../types'
|
|
4
|
+
import { isTamaguiComponent } from './isTamaguiComponent'
|
|
5
|
+
|
|
6
|
+
export type TamaguiReactElement = React.ReactElement & {
|
|
7
|
+
type: {
|
|
8
|
+
staticConfig: StaticConfig
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export const isTamaguiElement = (child: any, name?: string): child is TamaguiReactElement => {
|
|
13
|
+
return isValidElement(child) && isTamaguiComponent(child.type, name)
|
|
14
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export const matchMedia = (typeof window !== 'undefined' && window.matchMedia) || matchMediaFallback
|
|
2
|
+
|
|
3
|
+
function matchMediaFallback(query: string): MediaQueryList {
|
|
4
|
+
if (
|
|
5
|
+
process.env.NODE_ENV === 'development' &&
|
|
6
|
+
!process.env.IS_STATIC &&
|
|
7
|
+
process.env.TAMAGUI_TARGET !== 'web'
|
|
8
|
+
) {
|
|
9
|
+
console.log('warning: matchMedia not loading! Native not picking up .native.js files?')
|
|
10
|
+
}
|
|
11
|
+
return {
|
|
12
|
+
addListener() {},
|
|
13
|
+
removeListener() {},
|
|
14
|
+
matches: false,
|
|
15
|
+
} as any
|
|
16
|
+
}
|