@tamagui/web 1.14.0 → 1.14.2
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 +76 -1
- package/dist/cjs/Tamagui.js.map +2 -2
- package/dist/cjs/addTheme.js +77 -2
- package/dist/cjs/addTheme.js.map +2 -2
- package/dist/cjs/config.js +122 -1
- package/dist/cjs/config.js.map +2 -2
- package/dist/cjs/constants/constants.js +48 -1
- package/dist/cjs/constants/constants.js.map +2 -2
- package/dist/cjs/constants/isDevTools.js +36 -1
- package/dist/cjs/constants/isDevTools.js.map +2 -2
- package/dist/cjs/contexts/AnimationDriverContext.js +29 -1
- package/dist/cjs/contexts/AnimationDriverContext.js.map +2 -2
- package/dist/cjs/contexts/ButtonNestingContext.js +29 -1
- package/dist/cjs/contexts/ButtonNestingContext.js.map +2 -2
- package/dist/cjs/contexts/FontLanguageContext.js +29 -1
- package/dist/cjs/contexts/FontLanguageContext.js.map +2 -2
- package/dist/cjs/contexts/TextAncestorContext.js +29 -1
- package/dist/cjs/contexts/TextAncestorContext.js.map +2 -2
- package/dist/cjs/createComponent.js +896 -2
- package/dist/cjs/createComponent.js.map +3 -3
- package/dist/cjs/createFont.js +68 -1
- package/dist/cjs/createFont.js.map +2 -2
- package/dist/cjs/createShorthands.js +30 -1
- package/dist/cjs/createShorthands.js.map +2 -2
- package/dist/cjs/createTamagui.js +202 -5
- package/dist/cjs/createTamagui.js.map +2 -2
- package/dist/cjs/createTheme.js +30 -1
- package/dist/cjs/createTheme.js.map +2 -2
- package/dist/cjs/createTokens.js +38 -1
- package/dist/cjs/createTokens.js.map +2 -2
- package/dist/cjs/createVariable.js +110 -1
- package/dist/cjs/createVariable.js.map +2 -2
- package/dist/cjs/createVariables.js +59 -1
- package/dist/cjs/createVariables.js.map +2 -2
- package/dist/cjs/helpers/ThemeManager.js +243 -1
- package/dist/cjs/helpers/ThemeManager.js.map +3 -3
- package/dist/cjs/helpers/ThemeManagerContext.js +29 -1
- package/dist/cjs/helpers/ThemeManagerContext.js.map +2 -2
- package/dist/cjs/helpers/createMediaStyle.js +66 -1
- package/dist/cjs/helpers/createMediaStyle.js.map +2 -2
- package/dist/cjs/helpers/createPropMapper.js +431 -2
- package/dist/cjs/helpers/createPropMapper.js.map +2 -2
- package/dist/cjs/helpers/createProxy.js +41 -2
- package/dist/cjs/helpers/createProxy.js.map +2 -2
- package/dist/cjs/helpers/defaultOffset.js +28 -1
- package/dist/cjs/helpers/defaultOffset.js.map +2 -2
- package/dist/cjs/helpers/expandStyle.js +85 -1
- package/dist/cjs/helpers/expandStyle.js.map +2 -2
- package/dist/cjs/helpers/expandStyles.js +76 -1
- package/dist/cjs/helpers/expandStyles.js.map +2 -2
- package/dist/cjs/helpers/extendStaticConfig.js +91 -1
- package/dist/cjs/helpers/extendStaticConfig.js.map +2 -2
- package/dist/cjs/helpers/getAnimationDriver.js +31 -1
- package/dist/cjs/helpers/getAnimationDriver.js.map +2 -2
- package/dist/cjs/helpers/getExpandedShorthands.js +38 -1
- package/dist/cjs/helpers/getExpandedShorthands.js.map +2 -2
- package/dist/cjs/helpers/getFontLanguage.js +28 -1
- package/dist/cjs/helpers/getFontLanguage.js.map +2 -2
- package/dist/cjs/helpers/getSplitStyles.js +858 -3
- package/dist/cjs/helpers/getSplitStyles.js.map +2 -2
- package/dist/cjs/helpers/getStylesAtomic.js +226 -1
- package/dist/cjs/helpers/getStylesAtomic.js.map +2 -2
- package/dist/cjs/helpers/getStylesAtomic.native.js +37 -1
- package/dist/cjs/helpers/getStylesAtomic.native.js.map +2 -2
- package/dist/cjs/helpers/getThemeCSSRules.js +126 -4
- package/dist/cjs/helpers/getThemeCSSRules.js.map +2 -2
- package/dist/cjs/helpers/getThemeCSSRules.native.js +30 -1
- package/dist/cjs/helpers/getThemeCSSRules.native.js.map +2 -2
- package/dist/cjs/helpers/getVariantExtras.js +91 -1
- package/dist/cjs/helpers/getVariantExtras.js.map +2 -2
- package/dist/cjs/helpers/insertStyleRule.js +222 -2
- package/dist/cjs/helpers/insertStyleRule.js.map +2 -2
- package/dist/cjs/helpers/isObj.js +28 -1
- package/dist/cjs/helpers/isObj.js.map +2 -2
- package/dist/cjs/helpers/isTamaguiComponent.js +31 -1
- package/dist/cjs/helpers/isTamaguiComponent.js.map +2 -2
- package/dist/cjs/helpers/isTamaguiElement.js +32 -1
- package/dist/cjs/helpers/isTamaguiElement.js.map +2 -2
- package/dist/cjs/helpers/matchMedia.js +41 -1
- package/dist/cjs/helpers/matchMedia.js.map +2 -2
- package/dist/cjs/helpers/matchMedia.native.js +47 -1
- package/dist/cjs/helpers/matchMedia.native.js.map +2 -2
- package/dist/cjs/helpers/mergeProps.js +53 -1
- package/dist/cjs/helpers/mergeProps.js.map +2 -2
- package/dist/cjs/helpers/normalizeColor.js +66 -1
- package/dist/cjs/helpers/normalizeColor.js.map +2 -2
- package/dist/cjs/helpers/normalizeShadow.js +46 -1
- package/dist/cjs/helpers/normalizeShadow.js.map +2 -2
- package/dist/cjs/helpers/normalizeShadow.native.js +54 -1
- package/dist/cjs/helpers/normalizeShadow.native.js.map +2 -2
- package/dist/cjs/helpers/normalizeStylePropKeys.js +28 -1
- package/dist/cjs/helpers/normalizeStylePropKeys.js.map +2 -2
- package/dist/cjs/helpers/normalizeStylePropKeys.native.js +39 -1
- package/dist/cjs/helpers/normalizeStylePropKeys.native.js.map +2 -2
- package/dist/cjs/helpers/normalizeValueWithProperty.js +125 -1
- package/dist/cjs/helpers/normalizeValueWithProperty.js.map +2 -2
- package/dist/cjs/helpers/proxyThemeVariables.js +39 -1
- package/dist/cjs/helpers/proxyThemeVariables.js.map +2 -2
- package/dist/cjs/helpers/pseudoDescriptors.js +52 -1
- package/dist/cjs/helpers/pseudoDescriptors.js.map +2 -2
- package/dist/cjs/helpers/registerCSSVariable.js +39 -1
- package/dist/cjs/helpers/registerCSSVariable.js.map +2 -2
- package/dist/cjs/helpers/themeable.js +61 -1
- package/dist/cjs/helpers/themeable.js.map +2 -2
- package/dist/cjs/helpers/themes.js +75 -1
- package/dist/cjs/helpers/themes.js.map +2 -2
- package/dist/cjs/helpers/timer.js +34 -1
- package/dist/cjs/helpers/timer.js.map +2 -2
- package/dist/cjs/helpers/useShallowSetState.js +58 -1
- package/dist/cjs/helpers/useShallowSetState.js.map +2 -2
- package/dist/cjs/helpers/warnOnce.js +37 -1
- package/dist/cjs/helpers/warnOnce.js.map +2 -2
- package/dist/cjs/helpers/withStaticProperties.js +32 -1
- package/dist/cjs/helpers/withStaticProperties.js.map +2 -2
- package/dist/cjs/hooks/getThemeUnwrapped.js +33 -1
- package/dist/cjs/hooks/getThemeUnwrapped.js.map +2 -2
- package/dist/cjs/hooks/useAnimationDriver.js +33 -1
- package/dist/cjs/hooks/useAnimationDriver.js.map +2 -2
- package/dist/cjs/hooks/useId.js +28 -1
- package/dist/cjs/hooks/useId.js.map +2 -2
- package/dist/cjs/hooks/useIsTouchDevice.js +32 -1
- package/dist/cjs/hooks/useIsTouchDevice.js.map +2 -2
- package/dist/cjs/hooks/useMedia.js +264 -1
- package/dist/cjs/hooks/useMedia.js.map +2 -2
- package/dist/cjs/hooks/useSafeRef.js +58 -1
- package/dist/cjs/hooks/useSafeRef.js.map +2 -2
- package/dist/cjs/hooks/useServerHooks.js +35 -1
- package/dist/cjs/hooks/useServerHooks.js.map +2 -2
- package/dist/cjs/hooks/useStyle.js +60 -1
- package/dist/cjs/hooks/useStyle.js.map +2 -2
- package/dist/cjs/hooks/useTheme.js +276 -1
- package/dist/cjs/hooks/useTheme.js.map +2 -2
- package/dist/cjs/hooks/useThemeName.js +51 -1
- package/dist/cjs/hooks/useThemeName.js.map +2 -2
- package/dist/cjs/index.js +110 -1
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/inject-styles.js +39 -1
- package/dist/cjs/inject-styles.js.map +2 -2
- package/dist/cjs/insertFont.js +92 -1
- package/dist/cjs/insertFont.js.map +2 -2
- package/dist/cjs/setupHooks.js +33 -1
- package/dist/cjs/setupHooks.js.map +2 -2
- package/dist/cjs/setupReactNative.js +50 -1
- package/dist/cjs/setupReactNative.js.map +2 -2
- package/dist/cjs/styled.js +93 -1
- package/dist/cjs/styled.js.map +2 -2
- package/dist/cjs/types.js +16 -1
- package/dist/cjs/types.js.map +2 -2
- package/dist/cjs/updateTheme.js +46 -1
- package/dist/cjs/updateTheme.js.map +2 -2
- package/dist/cjs/views/AnimationDriverProvider.js +32 -1
- package/dist/cjs/views/AnimationDriverProvider.js.map +2 -2
- package/dist/cjs/views/FontLanguage.js +40 -1
- package/dist/cjs/views/FontLanguage.js.map +2 -2
- package/dist/cjs/views/FontLanguage.native.js +34 -1
- package/dist/cjs/views/FontLanguage.native.js.map +2 -2
- package/dist/cjs/views/FontLanguage.types.js +16 -1
- package/dist/cjs/views/FontLanguage.types.js.map +2 -2
- package/dist/cjs/views/Slot.js +91 -1
- package/dist/cjs/views/Slot.js.map +2 -2
- package/dist/cjs/views/Stack.js +37 -1
- package/dist/cjs/views/Stack.js.map +2 -2
- package/dist/cjs/views/TamaguiProvider.js +90 -1
- package/dist/cjs/views/TamaguiProvider.js.map +2 -2
- package/dist/cjs/views/Text.js +95 -1
- package/dist/cjs/views/Text.js.map +2 -2
- package/dist/cjs/views/Theme.js +99 -1
- package/dist/cjs/views/Theme.js.map +3 -3
- package/dist/cjs/views/ThemeDebug.js +73 -0
- package/dist/cjs/views/ThemeDebug.js.map +7 -0
- package/dist/cjs/views/ThemeProvider.js +69 -1
- package/dist/cjs/views/ThemeProvider.js.map +2 -2
- package/dist/esm/Tamagui.js +44 -1
- package/dist/esm/Tamagui.js.map +2 -2
- package/dist/esm/Tamagui.mjs +44 -1
- package/dist/esm/Tamagui.mjs.map +2 -2
- package/dist/esm/addTheme.js +53 -2
- package/dist/esm/addTheme.js.map +2 -2
- package/dist/esm/addTheme.mjs +53 -2
- package/dist/esm/addTheme.mjs.map +2 -2
- package/dist/esm/config.js +89 -1
- package/dist/esm/config.js.map +2 -2
- package/dist/esm/config.mjs +89 -1
- package/dist/esm/config.mjs.map +2 -2
- package/dist/esm/constants/constants.js +21 -1
- package/dist/esm/constants/constants.js.map +2 -2
- package/dist/esm/constants/constants.mjs +21 -1
- package/dist/esm/constants/constants.mjs.map +2 -2
- package/dist/esm/constants/isDevTools.js +12 -1
- package/dist/esm/constants/isDevTools.js.map +2 -2
- package/dist/esm/constants/isDevTools.mjs +12 -1
- package/dist/esm/constants/isDevTools.mjs.map +2 -2
- package/dist/esm/contexts/AnimationDriverContext.js +5 -1
- package/dist/esm/contexts/AnimationDriverContext.js.map +2 -2
- package/dist/esm/contexts/AnimationDriverContext.mjs +5 -1
- package/dist/esm/contexts/AnimationDriverContext.mjs.map +2 -2
- package/dist/esm/contexts/ButtonNestingContext.js +5 -1
- package/dist/esm/contexts/ButtonNestingContext.js.map +2 -2
- package/dist/esm/contexts/ButtonNestingContext.mjs +5 -1
- package/dist/esm/contexts/ButtonNestingContext.mjs.map +2 -2
- package/dist/esm/contexts/FontLanguageContext.js +5 -1
- package/dist/esm/contexts/FontLanguageContext.js.map +2 -2
- package/dist/esm/contexts/FontLanguageContext.mjs +5 -1
- package/dist/esm/contexts/FontLanguageContext.mjs.map +2 -2
- package/dist/esm/contexts/TextAncestorContext.js +5 -1
- package/dist/esm/contexts/TextAncestorContext.js.map +2 -2
- package/dist/esm/contexts/TextAncestorContext.mjs +5 -1
- package/dist/esm/contexts/TextAncestorContext.mjs.map +2 -2
- package/dist/esm/createComponent.js +869 -2
- package/dist/esm/createComponent.js.map +3 -3
- package/dist/esm/createComponent.mjs +869 -2
- package/dist/esm/createComponent.mjs.map +3 -3
- package/dist/esm/createFont.js +44 -1
- package/dist/esm/createFont.js.map +2 -2
- package/dist/esm/createFont.mjs +44 -1
- package/dist/esm/createFont.mjs.map +2 -2
- package/dist/esm/createShorthands.js +6 -1
- package/dist/esm/createShorthands.js.map +2 -2
- package/dist/esm/createShorthands.mjs +6 -1
- package/dist/esm/createShorthands.mjs.map +2 -2
- package/dist/esm/createTamagui.js +186 -5
- package/dist/esm/createTamagui.js.map +2 -2
- package/dist/esm/createTamagui.mjs +186 -5
- package/dist/esm/createTamagui.mjs.map +2 -2
- package/dist/esm/createTheme.js +6 -1
- package/dist/esm/createTheme.js.map +2 -2
- package/dist/esm/createTheme.mjs +6 -1
- package/dist/esm/createTheme.mjs.map +2 -2
- package/dist/esm/createTokens.js +14 -1
- package/dist/esm/createTokens.js.map +2 -2
- package/dist/esm/createTokens.mjs +14 -1
- package/dist/esm/createTokens.mjs.map +2 -2
- package/dist/esm/createVariable.js +77 -1
- package/dist/esm/createVariable.js.map +2 -2
- package/dist/esm/createVariable.mjs +77 -1
- package/dist/esm/createVariable.mjs.map +2 -2
- package/dist/esm/createVariables.js +34 -1
- package/dist/esm/createVariables.js.map +2 -2
- package/dist/esm/createVariables.mjs +34 -1
- package/dist/esm/createVariables.mjs.map +2 -2
- package/dist/esm/helpers/ThemeManager.js +218 -1
- package/dist/esm/helpers/ThemeManager.js.map +3 -3
- package/dist/esm/helpers/ThemeManager.mjs +218 -1
- package/dist/esm/helpers/ThemeManager.mjs.map +3 -3
- package/dist/esm/helpers/ThemeManagerContext.js +5 -1
- package/dist/esm/helpers/ThemeManagerContext.js.map +2 -2
- package/dist/esm/helpers/ThemeManagerContext.mjs +5 -1
- package/dist/esm/helpers/ThemeManagerContext.mjs.map +2 -2
- package/dist/esm/helpers/createMediaStyle.js +41 -1
- package/dist/esm/helpers/createMediaStyle.js.map +2 -2
- package/dist/esm/helpers/createMediaStyle.mjs +41 -1
- package/dist/esm/helpers/createMediaStyle.mjs.map +2 -2
- package/dist/esm/helpers/createPropMapper.js +404 -2
- package/dist/esm/helpers/createPropMapper.js.map +2 -2
- package/dist/esm/helpers/createPropMapper.mjs +404 -2
- package/dist/esm/helpers/createPropMapper.mjs.map +2 -2
- package/dist/esm/helpers/createProxy.js +17 -2
- package/dist/esm/helpers/createProxy.js.map +2 -2
- package/dist/esm/helpers/createProxy.mjs +17 -2
- package/dist/esm/helpers/createProxy.mjs.map +2 -2
- package/dist/esm/helpers/defaultOffset.js +4 -1
- package/dist/esm/helpers/defaultOffset.js.map +2 -2
- package/dist/esm/helpers/defaultOffset.mjs +4 -1
- package/dist/esm/helpers/defaultOffset.mjs.map +2 -2
- package/dist/esm/helpers/expandStyle.js +61 -1
- package/dist/esm/helpers/expandStyle.js.map +2 -2
- package/dist/esm/helpers/expandStyle.mjs +61 -1
- package/dist/esm/helpers/expandStyle.mjs.map +2 -2
- package/dist/esm/helpers/expandStyles.js +51 -1
- package/dist/esm/helpers/expandStyles.js.map +2 -2
- package/dist/esm/helpers/expandStyles.mjs +51 -1
- package/dist/esm/helpers/expandStyles.mjs.map +2 -2
- package/dist/esm/helpers/extendStaticConfig.js +66 -1
- package/dist/esm/helpers/extendStaticConfig.js.map +2 -2
- package/dist/esm/helpers/extendStaticConfig.mjs +66 -1
- package/dist/esm/helpers/extendStaticConfig.mjs.map +2 -2
- package/dist/esm/helpers/getAnimationDriver.js +7 -1
- package/dist/esm/helpers/getAnimationDriver.js.map +2 -2
- package/dist/esm/helpers/getAnimationDriver.mjs +7 -1
- package/dist/esm/helpers/getAnimationDriver.mjs.map +2 -2
- package/dist/esm/helpers/getExpandedShorthands.js +14 -1
- package/dist/esm/helpers/getExpandedShorthands.js.map +2 -2
- package/dist/esm/helpers/getExpandedShorthands.mjs +14 -1
- package/dist/esm/helpers/getExpandedShorthands.mjs.map +2 -2
- package/dist/esm/helpers/getFontLanguage.js +4 -1
- package/dist/esm/helpers/getFontLanguage.js.map +2 -2
- package/dist/esm/helpers/getFontLanguage.mjs +4 -1
- package/dist/esm/helpers/getFontLanguage.mjs.map +2 -2
- package/dist/esm/helpers/getSplitStyles.js +859 -3
- package/dist/esm/helpers/getSplitStyles.js.map +2 -2
- package/dist/esm/helpers/getSplitStyles.mjs +859 -3
- package/dist/esm/helpers/getSplitStyles.mjs.map +2 -2
- package/dist/esm/helpers/getStylesAtomic.js +200 -1
- package/dist/esm/helpers/getStylesAtomic.js.map +2 -2
- package/dist/esm/helpers/getStylesAtomic.mjs +200 -1
- package/dist/esm/helpers/getStylesAtomic.mjs.map +2 -2
- package/dist/esm/helpers/getStylesAtomic.native.js +11 -1
- package/dist/esm/helpers/getStylesAtomic.native.js.map +2 -2
- package/dist/esm/helpers/getStylesAtomic.native.mjs +11 -1
- package/dist/esm/helpers/getStylesAtomic.native.mjs.map +2 -2
- package/dist/esm/helpers/getThemeCSSRules.js +102 -4
- package/dist/esm/helpers/getThemeCSSRules.js.map +2 -2
- package/dist/esm/helpers/getThemeCSSRules.mjs +102 -4
- package/dist/esm/helpers/getThemeCSSRules.mjs.map +2 -2
- package/dist/esm/helpers/getThemeCSSRules.native.js +6 -1
- package/dist/esm/helpers/getThemeCSSRules.native.js.map +2 -2
- package/dist/esm/helpers/getThemeCSSRules.native.mjs +6 -1
- package/dist/esm/helpers/getThemeCSSRules.native.mjs.map +2 -2
- package/dist/esm/helpers/getVariantExtras.js +66 -1
- package/dist/esm/helpers/getVariantExtras.js.map +2 -2
- package/dist/esm/helpers/getVariantExtras.mjs +66 -1
- package/dist/esm/helpers/getVariantExtras.mjs.map +2 -2
- package/dist/esm/helpers/insertStyleRule.js +190 -2
- package/dist/esm/helpers/insertStyleRule.js.map +2 -2
- package/dist/esm/helpers/insertStyleRule.mjs +190 -2
- package/dist/esm/helpers/insertStyleRule.mjs.map +2 -2
- package/dist/esm/helpers/isObj.js +4 -1
- package/dist/esm/helpers/isObj.js.map +2 -2
- package/dist/esm/helpers/isObj.mjs +4 -1
- package/dist/esm/helpers/isObj.mjs.map +2 -2
- package/dist/esm/helpers/isTamaguiComponent.js +7 -1
- package/dist/esm/helpers/isTamaguiComponent.js.map +2 -2
- package/dist/esm/helpers/isTamaguiComponent.mjs +7 -1
- package/dist/esm/helpers/isTamaguiComponent.mjs.map +2 -2
- package/dist/esm/helpers/isTamaguiElement.js +8 -1
- package/dist/esm/helpers/isTamaguiElement.js.map +2 -2
- package/dist/esm/helpers/isTamaguiElement.mjs +8 -1
- package/dist/esm/helpers/isTamaguiElement.mjs.map +2 -2
- package/dist/esm/helpers/matchMedia.js +16 -1
- package/dist/esm/helpers/matchMedia.js.map +2 -2
- package/dist/esm/helpers/matchMedia.mjs +16 -1
- package/dist/esm/helpers/matchMedia.mjs.map +2 -2
- package/dist/esm/helpers/matchMedia.native.js +22 -1
- package/dist/esm/helpers/matchMedia.native.js.map +2 -2
- package/dist/esm/helpers/matchMedia.native.mjs +22 -1
- package/dist/esm/helpers/matchMedia.native.mjs.map +2 -2
- package/dist/esm/helpers/mergeProps.js +29 -1
- package/dist/esm/helpers/mergeProps.js.map +2 -2
- package/dist/esm/helpers/mergeProps.mjs +29 -1
- package/dist/esm/helpers/mergeProps.mjs.map +2 -2
- package/dist/esm/helpers/normalizeColor.js +30 -1
- package/dist/esm/helpers/normalizeColor.js.map +2 -2
- package/dist/esm/helpers/normalizeColor.mjs +30 -1
- package/dist/esm/helpers/normalizeColor.mjs.map +2 -2
- package/dist/esm/helpers/normalizeShadow.js +22 -1
- package/dist/esm/helpers/normalizeShadow.js.map +2 -2
- package/dist/esm/helpers/normalizeShadow.mjs +22 -1
- package/dist/esm/helpers/normalizeShadow.mjs.map +2 -2
- package/dist/esm/helpers/normalizeShadow.native.js +30 -1
- package/dist/esm/helpers/normalizeShadow.native.js.map +2 -2
- package/dist/esm/helpers/normalizeShadow.native.mjs +30 -1
- package/dist/esm/helpers/normalizeShadow.native.mjs.map +2 -2
- package/dist/esm/helpers/normalizeStylePropKeys.js +4 -1
- package/dist/esm/helpers/normalizeStylePropKeys.js.map +2 -2
- package/dist/esm/helpers/normalizeStylePropKeys.mjs +4 -1
- package/dist/esm/helpers/normalizeStylePropKeys.mjs.map +2 -2
- package/dist/esm/helpers/normalizeStylePropKeys.native.js +15 -1
- package/dist/esm/helpers/normalizeStylePropKeys.native.js.map +2 -2
- package/dist/esm/helpers/normalizeStylePropKeys.native.mjs +15 -1
- package/dist/esm/helpers/normalizeStylePropKeys.native.mjs.map +2 -2
- package/dist/esm/helpers/normalizeValueWithProperty.js +100 -1
- package/dist/esm/helpers/normalizeValueWithProperty.js.map +2 -2
- package/dist/esm/helpers/normalizeValueWithProperty.mjs +100 -1
- package/dist/esm/helpers/normalizeValueWithProperty.mjs.map +2 -2
- package/dist/esm/helpers/proxyThemeVariables.js +15 -1
- package/dist/esm/helpers/proxyThemeVariables.js.map +2 -2
- package/dist/esm/helpers/proxyThemeVariables.mjs +15 -1
- package/dist/esm/helpers/proxyThemeVariables.mjs.map +2 -2
- package/dist/esm/helpers/pseudoDescriptors.js +28 -1
- package/dist/esm/helpers/pseudoDescriptors.js.map +2 -2
- package/dist/esm/helpers/pseudoDescriptors.mjs +28 -1
- package/dist/esm/helpers/pseudoDescriptors.mjs.map +2 -2
- package/dist/esm/helpers/registerCSSVariable.js +13 -1
- package/dist/esm/helpers/registerCSSVariable.js.map +2 -2
- package/dist/esm/helpers/registerCSSVariable.mjs +13 -1
- package/dist/esm/helpers/registerCSSVariable.mjs.map +2 -2
- package/dist/esm/helpers/themeable.js +27 -1
- package/dist/esm/helpers/themeable.js.map +2 -2
- package/dist/esm/helpers/themeable.mjs +27 -1
- package/dist/esm/helpers/themeable.mjs.map +2 -2
- package/dist/esm/helpers/themes.js +50 -1
- package/dist/esm/helpers/themes.js.map +2 -2
- package/dist/esm/helpers/themes.mjs +50 -1
- package/dist/esm/helpers/themes.mjs.map +2 -2
- package/dist/esm/helpers/timer.js +10 -1
- package/dist/esm/helpers/timer.js.map +2 -2
- package/dist/esm/helpers/timer.mjs +10 -1
- package/dist/esm/helpers/timer.mjs.map +2 -2
- package/dist/esm/helpers/useShallowSetState.js +34 -1
- package/dist/esm/helpers/useShallowSetState.js.map +2 -2
- package/dist/esm/helpers/useShallowSetState.mjs +34 -1
- package/dist/esm/helpers/useShallowSetState.mjs.map +2 -2
- package/dist/esm/helpers/warnOnce.js +13 -1
- package/dist/esm/helpers/warnOnce.js.map +2 -2
- package/dist/esm/helpers/warnOnce.mjs +13 -1
- package/dist/esm/helpers/warnOnce.mjs.map +2 -2
- package/dist/esm/helpers/withStaticProperties.js +8 -1
- package/dist/esm/helpers/withStaticProperties.js.map +2 -2
- package/dist/esm/helpers/withStaticProperties.mjs +8 -1
- package/dist/esm/helpers/withStaticProperties.mjs.map +2 -2
- package/dist/esm/hooks/getThemeUnwrapped.js +8 -1
- package/dist/esm/hooks/getThemeUnwrapped.js.map +2 -2
- package/dist/esm/hooks/getThemeUnwrapped.mjs +8 -1
- package/dist/esm/hooks/getThemeUnwrapped.mjs.map +2 -2
- package/dist/esm/hooks/useAnimationDriver.js +9 -1
- package/dist/esm/hooks/useAnimationDriver.js.map +2 -2
- package/dist/esm/hooks/useAnimationDriver.mjs +9 -1
- package/dist/esm/hooks/useAnimationDriver.mjs.map +2 -2
- package/dist/esm/hooks/useId.js +4 -1
- package/dist/esm/hooks/useId.js.map +2 -2
- package/dist/esm/hooks/useId.mjs +4 -1
- package/dist/esm/hooks/useId.mjs.map +2 -2
- package/dist/esm/hooks/useIsTouchDevice.js +8 -1
- package/dist/esm/hooks/useIsTouchDevice.js.map +2 -2
- package/dist/esm/hooks/useIsTouchDevice.mjs +8 -1
- package/dist/esm/hooks/useIsTouchDevice.mjs.map +2 -2
- package/dist/esm/hooks/useMedia.js +225 -1
- package/dist/esm/hooks/useMedia.js.map +2 -2
- package/dist/esm/hooks/useMedia.mjs +225 -1
- package/dist/esm/hooks/useMedia.mjs.map +2 -2
- package/dist/esm/hooks/useSafeRef.js +34 -1
- package/dist/esm/hooks/useSafeRef.js.map +2 -2
- package/dist/esm/hooks/useSafeRef.mjs +34 -1
- package/dist/esm/hooks/useSafeRef.mjs.map +2 -2
- package/dist/esm/hooks/useServerHooks.js +10 -1
- package/dist/esm/hooks/useServerHooks.js.map +2 -2
- package/dist/esm/hooks/useServerHooks.mjs +10 -1
- package/dist/esm/hooks/useServerHooks.mjs.map +2 -2
- package/dist/esm/hooks/useStyle.js +36 -1
- package/dist/esm/hooks/useStyle.js.map +2 -2
- package/dist/esm/hooks/useStyle.mjs +36 -1
- package/dist/esm/hooks/useStyle.mjs.map +2 -2
- package/dist/esm/hooks/useTheme.js +250 -1
- package/dist/esm/hooks/useTheme.js.map +2 -2
- package/dist/esm/hooks/useTheme.mjs +250 -1
- package/dist/esm/hooks/useTheme.mjs.map +2 -2
- package/dist/esm/hooks/useThemeName.js +27 -1
- package/dist/esm/hooks/useThemeName.js.map +2 -2
- package/dist/esm/hooks/useThemeName.mjs +27 -1
- package/dist/esm/hooks/useThemeName.mjs.map +2 -2
- package/dist/esm/index.js +88 -1
- package/dist/esm/index.js.map +2 -2
- package/dist/esm/index.mjs +88 -1
- package/dist/esm/index.mjs.map +2 -2
- package/dist/esm/inject-styles.js +15 -1
- package/dist/esm/inject-styles.js.map +2 -2
- package/dist/esm/inject-styles.mjs +15 -1
- package/dist/esm/inject-styles.mjs.map +2 -2
- package/dist/esm/insertFont.js +66 -1
- package/dist/esm/insertFont.js.map +2 -2
- package/dist/esm/insertFont.mjs +66 -1
- package/dist/esm/insertFont.mjs.map +2 -2
- package/dist/esm/setupHooks.js +8 -1
- package/dist/esm/setupHooks.js.map +2 -2
- package/dist/esm/setupHooks.mjs +8 -1
- package/dist/esm/setupHooks.mjs.map +2 -2
- package/dist/esm/setupReactNative.js +24 -1
- package/dist/esm/setupReactNative.js.map +2 -2
- package/dist/esm/setupReactNative.mjs +24 -1
- package/dist/esm/setupReactNative.mjs.map +2 -2
- package/dist/esm/styled.js +69 -1
- package/dist/esm/styled.js.map +2 -2
- package/dist/esm/styled.mjs +69 -1
- package/dist/esm/styled.mjs.map +2 -2
- package/dist/esm/updateTheme.js +22 -1
- package/dist/esm/updateTheme.js.map +2 -2
- package/dist/esm/updateTheme.mjs +22 -1
- package/dist/esm/updateTheme.mjs.map +2 -2
- package/dist/esm/views/AnimationDriverProvider.js +8 -1
- package/dist/esm/views/AnimationDriverProvider.js.map +2 -2
- package/dist/esm/views/AnimationDriverProvider.mjs +8 -1
- package/dist/esm/views/AnimationDriverProvider.mjs.map +2 -2
- package/dist/esm/views/FontLanguage.js +16 -1
- package/dist/esm/views/FontLanguage.js.map +2 -2
- package/dist/esm/views/FontLanguage.mjs +16 -1
- package/dist/esm/views/FontLanguage.mjs.map +2 -2
- package/dist/esm/views/FontLanguage.native.js +10 -1
- package/dist/esm/views/FontLanguage.native.js.map +2 -2
- package/dist/esm/views/FontLanguage.native.mjs +10 -1
- package/dist/esm/views/FontLanguage.native.mjs.map +2 -2
- package/dist/esm/views/Slot.js +65 -1
- package/dist/esm/views/Slot.js.map +2 -2
- package/dist/esm/views/Slot.mjs +65 -1
- package/dist/esm/views/Slot.mjs.map +2 -2
- package/dist/esm/views/Stack.js +13 -1
- package/dist/esm/views/Stack.js.map +2 -2
- package/dist/esm/views/Stack.mjs +13 -1
- package/dist/esm/views/Stack.mjs.map +2 -2
- package/dist/esm/views/TamaguiProvider.js +56 -1
- package/dist/esm/views/TamaguiProvider.js.map +2 -2
- package/dist/esm/views/TamaguiProvider.mjs +56 -1
- package/dist/esm/views/TamaguiProvider.mjs.map +2 -2
- package/dist/esm/views/Text.js +71 -1
- package/dist/esm/views/Text.js.map +2 -2
- package/dist/esm/views/Text.mjs +71 -1
- package/dist/esm/views/Text.mjs.map +2 -2
- package/dist/esm/views/Theme.js +74 -1
- package/dist/esm/views/Theme.js.map +3 -3
- package/dist/esm/views/Theme.mjs +74 -1
- package/dist/esm/views/Theme.mjs.map +3 -3
- package/dist/esm/views/ThemeDebug.js +49 -0
- package/dist/esm/views/ThemeDebug.js.map +7 -0
- package/dist/esm/views/ThemeDebug.mjs +49 -0
- package/dist/esm/views/ThemeDebug.mjs.map +7 -0
- package/dist/esm/views/ThemeProvider.js +44 -1
- package/dist/esm/views/ThemeProvider.js.map +2 -2
- package/dist/esm/views/ThemeProvider.mjs +44 -1
- package/dist/esm/views/ThemeProvider.mjs.map +2 -2
- package/package.json +9 -9
- package/src/createComponent.tsx +7 -14
- package/src/helpers/ThemeManager.tsx +3 -3
- package/src/views/Theme.tsx +10 -20
- package/src/views/ThemeDebug.tsx +49 -0
- package/types/createComponent.d.ts.map +1 -1
- package/types/views/Theme.d.ts +3 -2
- package/types/views/Theme.d.ts.map +1 -1
- package/types/views/ThemeDebug.d.ts +9 -0
- package/types/views/ThemeDebug.d.ts.map +1 -0
|
@@ -1,2 +1,201 @@
|
|
|
1
|
-
import{simpleHash
|
|
1
|
+
import { simpleHash } from "@tamagui/helpers";
|
|
2
|
+
import { getConfig } from "../config.js";
|
|
3
|
+
import { defaultOffset } from "./defaultOffset.js";
|
|
4
|
+
import { normalizeValueWithProperty } from "./normalizeValueWithProperty.js";
|
|
5
|
+
import { pseudoDescriptors } from "./pseudoDescriptors.js";
|
|
6
|
+
const pseudosOrdered = [
|
|
7
|
+
pseudoDescriptors.hoverStyle,
|
|
8
|
+
pseudoDescriptors.pressStyle,
|
|
9
|
+
pseudoDescriptors.focusStyle
|
|
10
|
+
];
|
|
11
|
+
function getStylesAtomic(stylesIn) {
|
|
12
|
+
if (!(stylesIn.hoverStyle || stylesIn.pressStyle || stylesIn.focusStyle)) {
|
|
13
|
+
return getAtomicStyle(stylesIn);
|
|
14
|
+
}
|
|
15
|
+
const { hoverStyle, pressStyle, focusStyle, ...base } = stylesIn;
|
|
16
|
+
let res = [];
|
|
17
|
+
for (const [index, style] of [hoverStyle, pressStyle, focusStyle, base].entries()) {
|
|
18
|
+
if (!style)
|
|
19
|
+
continue;
|
|
20
|
+
const pseudo = pseudosOrdered[index];
|
|
21
|
+
res = [...res, ...getAtomicStyle(style, pseudo)];
|
|
22
|
+
}
|
|
23
|
+
return res;
|
|
24
|
+
}
|
|
25
|
+
function getAtomicStyle(style, pseudo) {
|
|
26
|
+
if (!style)
|
|
27
|
+
return [];
|
|
28
|
+
if (process.env.NODE_ENV === "development") {
|
|
29
|
+
if (!style || typeof style !== "object") {
|
|
30
|
+
throw new Error(`Wrong style type: "${typeof style}": ${style}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return generateAtomicStyles(style, pseudo);
|
|
34
|
+
}
|
|
35
|
+
let conf;
|
|
36
|
+
const generateAtomicStyles = (styleIn, pseudo) => {
|
|
37
|
+
conf = conf || getConfig();
|
|
38
|
+
const style = styleIn;
|
|
39
|
+
if (style.transform && Array.isArray(style.transform)) {
|
|
40
|
+
style.transform = style.transform.map(
|
|
41
|
+
// { scale: 2 } => 'scale(2)'
|
|
42
|
+
// { translateX: 20 } => 'translateX(20px)'
|
|
43
|
+
// { matrix: [1,2,3,4,5,6] } => 'matrix(1,2,3,4,5,6)'
|
|
44
|
+
(transform) => {
|
|
45
|
+
const type = Object.keys(transform)[0];
|
|
46
|
+
const value = transform[type];
|
|
47
|
+
if (type === "matrix" || type === "matrix3d") {
|
|
48
|
+
return `${type}(${value.join(",")})`;
|
|
49
|
+
}
|
|
50
|
+
return `${type}(${normalizeValueWithProperty(value, type)})`;
|
|
51
|
+
}
|
|
52
|
+
).join(" ");
|
|
53
|
+
}
|
|
54
|
+
styleToCSS(style);
|
|
55
|
+
const out = [];
|
|
56
|
+
for (const key in style) {
|
|
57
|
+
const value = normalizeValueWithProperty(style[key], key);
|
|
58
|
+
if (value == null || value == void 0)
|
|
59
|
+
continue;
|
|
60
|
+
let hash;
|
|
61
|
+
if (presetHashes[value]) {
|
|
62
|
+
hash = value;
|
|
63
|
+
} else {
|
|
64
|
+
hash = simpleHash(`${value}`);
|
|
65
|
+
}
|
|
66
|
+
const pseudoPrefix = pseudo ? `0${pseudo.name}-` : "";
|
|
67
|
+
const shortProp = conf.inverseShorthands[key] || key;
|
|
68
|
+
const identifier = `_${shortProp}-${pseudoPrefix}${hash}`;
|
|
69
|
+
const rules = createAtomicRules(identifier, key, value, pseudo);
|
|
70
|
+
const styleObject = {
|
|
71
|
+
property: key,
|
|
72
|
+
pseudo: pseudo == null ? void 0 : pseudo.name,
|
|
73
|
+
value,
|
|
74
|
+
identifier,
|
|
75
|
+
rules
|
|
76
|
+
};
|
|
77
|
+
out.push(styleObject);
|
|
78
|
+
}
|
|
79
|
+
if (process.env.NODE_ENV === "development" && process.env.TAMAGUI_DEBUG) {
|
|
80
|
+
if (out.find((x) => x.property === "transform" && x.value.includes(`[object Object]`))) {
|
|
81
|
+
debugger;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return out;
|
|
85
|
+
};
|
|
86
|
+
const presetHashes = {
|
|
87
|
+
none: true
|
|
88
|
+
};
|
|
89
|
+
function styleToCSS(style) {
|
|
90
|
+
const { shadowOffset, shadowRadius, shadowColor } = style;
|
|
91
|
+
if (style.shadowRadius !== void 0) {
|
|
92
|
+
const offset = shadowOffset || defaultOffset;
|
|
93
|
+
const shadow = `${normalizeValueWithProperty(
|
|
94
|
+
offset.width
|
|
95
|
+
)} ${normalizeValueWithProperty(offset.height)} ${normalizeValueWithProperty(
|
|
96
|
+
shadowRadius
|
|
97
|
+
)} ${shadowColor}`;
|
|
98
|
+
style.boxShadow = style.boxShadow ? `${style.boxShadow}, ${shadow}` : shadow;
|
|
99
|
+
style.shadowOffset = void 0;
|
|
100
|
+
style.shadowRadius = void 0;
|
|
101
|
+
style.shadowColor = void 0;
|
|
102
|
+
}
|
|
103
|
+
const { textShadowColor, textShadowOffset, textShadowRadius } = style;
|
|
104
|
+
if (textShadowColor || textShadowOffset || textShadowRadius) {
|
|
105
|
+
const { height, width } = textShadowOffset || defaultOffset;
|
|
106
|
+
const radius = textShadowRadius || 0;
|
|
107
|
+
const color = normalizeValueWithProperty(textShadowColor, "textShadowColor");
|
|
108
|
+
if (color && (height !== 0 || width !== 0 || radius !== 0)) {
|
|
109
|
+
const blurRadius = normalizeValueWithProperty(radius);
|
|
110
|
+
const offsetX = normalizeValueWithProperty(width);
|
|
111
|
+
const offsetY = normalizeValueWithProperty(height);
|
|
112
|
+
style.textShadow = `${offsetX} ${offsetY} ${blurRadius} ${color}`;
|
|
113
|
+
}
|
|
114
|
+
style.textShadowColor = void 0;
|
|
115
|
+
style.textShadowOffset = void 0;
|
|
116
|
+
style.textShadowRadius = void 0;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
function createDeclarationBlock(style, important = false) {
|
|
120
|
+
let next = "";
|
|
121
|
+
for (const key in style) {
|
|
122
|
+
const prop = hyphenateStyleName(key);
|
|
123
|
+
const value = style[key];
|
|
124
|
+
next += `${prop}:${value}${important ? " !important" : ""};`;
|
|
125
|
+
}
|
|
126
|
+
return `{${next}}`;
|
|
127
|
+
}
|
|
128
|
+
const hcache = {};
|
|
129
|
+
const toHyphenLower = (match) => `-${match.toLowerCase()}`;
|
|
130
|
+
const hyphenateStyleName = (key) => {
|
|
131
|
+
let val = hcache[key];
|
|
132
|
+
if (val)
|
|
133
|
+
return val;
|
|
134
|
+
hcache[key] = val = key.replace(/[A-Z]/g, toHyphenLower);
|
|
135
|
+
return val;
|
|
136
|
+
};
|
|
137
|
+
const pseudoSelectorPrefixes = (() => {
|
|
138
|
+
const res = {};
|
|
139
|
+
for (const key in pseudoDescriptors) {
|
|
140
|
+
const pseudo = pseudoDescriptors[key];
|
|
141
|
+
res[pseudo.name] = `${[...Array(pseudo.priority)].map(() => ":root").join("")} `;
|
|
142
|
+
}
|
|
143
|
+
return res;
|
|
144
|
+
})();
|
|
145
|
+
function createAtomicRules(identifier, property, value, pseudo) {
|
|
146
|
+
const selector = pseudo ? `${pseudoSelectorPrefixes[pseudo.name]} .${identifier}:${pseudo.name}` : `.${identifier}`;
|
|
147
|
+
const important = !!pseudo;
|
|
148
|
+
let rules = [];
|
|
149
|
+
switch (property) {
|
|
150
|
+
case "placeholderTextColor": {
|
|
151
|
+
const block = createDeclarationBlock({ color: value, opacity: 1 }, important);
|
|
152
|
+
rules.push(`${selector}::placeholder${block}`);
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
case "backgroundClip":
|
|
156
|
+
case "userSelect": {
|
|
157
|
+
const propertyCapitalized = `${property[0].toUpperCase()}${property.slice(1)}`;
|
|
158
|
+
const webkitProperty = `Webkit${propertyCapitalized}`;
|
|
159
|
+
const block = createDeclarationBlock(
|
|
160
|
+
{ [property]: value, [webkitProperty]: value },
|
|
161
|
+
important
|
|
162
|
+
);
|
|
163
|
+
rules.push(`${selector}${block}`);
|
|
164
|
+
break;
|
|
165
|
+
}
|
|
166
|
+
case "pointerEvents": {
|
|
167
|
+
let finalValue = value;
|
|
168
|
+
if (value === "auto" || value === "box-only") {
|
|
169
|
+
finalValue = "auto";
|
|
170
|
+
if (value === "box-only") {
|
|
171
|
+
rules.push(`${selector}>*${boxOnly}`);
|
|
172
|
+
}
|
|
173
|
+
} else if (value === "none" || value === "box-none") {
|
|
174
|
+
finalValue = "none";
|
|
175
|
+
if (value === "box-none") {
|
|
176
|
+
rules.push(`${selector}>*${boxNone}`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
const block = createDeclarationBlock({ pointerEvents: finalValue }, true);
|
|
180
|
+
rules.push(`${selector}${block}`);
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
default: {
|
|
184
|
+
const block = createDeclarationBlock({ [property]: value }, important);
|
|
185
|
+
rules.push(`${selector}${block}`);
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
if (pseudo && pseudo.name === "hover") {
|
|
190
|
+
rules = rules.map((r) => `@media not all and (hover: none) { ${r} }`);
|
|
191
|
+
}
|
|
192
|
+
return rules;
|
|
193
|
+
}
|
|
194
|
+
const boxNone = createDeclarationBlock({ pointerEvents: "auto" }, true);
|
|
195
|
+
const boxOnly = createDeclarationBlock({ pointerEvents: "none" }, true);
|
|
196
|
+
export {
|
|
197
|
+
getAtomicStyle,
|
|
198
|
+
getStylesAtomic,
|
|
199
|
+
styleToCSS
|
|
200
|
+
};
|
|
2
201
|
//# sourceMappingURL=getStylesAtomic.mjs.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/helpers/getStylesAtomic.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * Some parts adapted from react-native-web\n * Copyright (c) Nicolas Gallagher licensed under the MIT license.\n */\n\nimport { StyleObject, simpleHash } from '@tamagui/helpers'\n\nimport { getConfig } from '../config.js'\nimport type { TamaguiInternalConfig, ViewStyleWithPseudos } from '../types.js'\nimport { defaultOffset } from './defaultOffset.js'\nimport { normalizeValueWithProperty } from './normalizeValueWithProperty.js'\nimport { PseudoDescriptor, pseudoDescriptors } from './pseudoDescriptors.js'\n\n// refactor this file away next...\n\n// matching order of the below *0\nconst pseudosOrdered = [\n pseudoDescriptors.hoverStyle,\n pseudoDescriptors.pressStyle,\n pseudoDescriptors.focusStyle,\n]\n\nexport function getStylesAtomic(stylesIn: ViewStyleWithPseudos) {\n // performance optimization\n if (!(stylesIn.hoverStyle || stylesIn.pressStyle || stylesIn.focusStyle)) {\n return getAtomicStyle(stylesIn)\n }\n\n // only for pseudos\n const { hoverStyle, pressStyle, focusStyle, ...base } = stylesIn\n let res: StyleObject[] = []\n // *1 order matched to *0\n for (const [index, style] of [hoverStyle, pressStyle, focusStyle, base].entries()) {\n if (!style) continue\n const pseudo = pseudosOrdered[index]\n res = [...res, ...getAtomicStyle(style, pseudo)]\n }\n return res\n}\n\nexport function getAtomicStyle(\n style: ViewStyleWithPseudos,\n pseudo?: PseudoDescriptor\n): StyleObject[] {\n if (!style) return []\n if (process.env.NODE_ENV === 'development') {\n if (!style || typeof style !== 'object') {\n throw new Error(`Wrong style type: \"${typeof style}\": ${style}`)\n }\n }\n return generateAtomicStyles(style, pseudo)\n}\n\nlet conf: TamaguiInternalConfig\n\nconst generateAtomicStyles = (\n styleIn: ViewStyleWithPseudos,\n pseudo?: PseudoDescriptor\n): StyleObject[] => {\n conf = conf || getConfig()\n\n // were converting to css styles\n const style = styleIn as Record<string, string | null | undefined>\n\n // transform\n if (style.transform && Array.isArray(style.transform)) {\n style.transform = style.transform\n .map(\n // { scale: 2 } => 'scale(2)'\n // { translateX: 20 } => 'translateX(20px)'\n // { matrix: [1,2,3,4,5,6] } => 'matrix(1,2,3,4,5,6)'\n (transform) => {\n const type = Object.keys(transform)[0]\n const value = transform[type]\n if (type === 'matrix' || type === 'matrix3d') {\n return `${type}(${value.join(',')})`\n }\n return `${type}(${normalizeValueWithProperty(value, type)})`\n }\n )\n .join(' ')\n }\n\n styleToCSS(style)\n\n const out: StyleObject[] = []\n for (const key in style) {\n const value = normalizeValueWithProperty(style[key], key)\n if (value == null || value == undefined) continue\n\n let hash: string\n if (presetHashes[value]) {\n hash = value as string\n } else {\n hash = simpleHash(`${value}`)\n }\n\n const pseudoPrefix = pseudo ? `0${pseudo.name}-` : ''\n const shortProp = conf.inverseShorthands[key] || key\n const identifier = `_${shortProp}-${pseudoPrefix}${hash}`\n const rules = createAtomicRules(identifier, key, value, pseudo)\n const styleObject: StyleObject = {\n property: key,\n pseudo: pseudo?.name as any,\n value,\n identifier,\n rules,\n }\n out.push(styleObject)\n }\n\n if (process.env.NODE_ENV === 'development' && process.env.TAMAGUI_DEBUG) {\n // when Animated.Value gets passed into Tamagui problems are caused this helps debug\n if (\n out.find((x) => x.property === 'transform' && x.value.includes(`[object Object]`))\n ) {\n // rome-ignore lint/suspicious/noDebugger: only dev\n debugger\n }\n }\n\n return out\n}\n\nconst presetHashes = {\n none: true,\n}\n\nexport function styleToCSS(style: Record<string, any>) {\n // box-shadow\n const { shadowOffset, shadowRadius, shadowColor } = style\n if (style.shadowRadius !== undefined) {\n const offset = shadowOffset || defaultOffset\n const shadow = `${normalizeValueWithProperty(\n offset.width\n )} ${normalizeValueWithProperty(offset.height)} ${normalizeValueWithProperty(\n shadowRadius\n )} ${shadowColor}`\n style.boxShadow = style.boxShadow ? `${style.boxShadow}, ${shadow}` : shadow\n style.shadowOffset = undefined\n style.shadowRadius = undefined\n style.shadowColor = undefined\n }\n\n // text-shadow\n const { textShadowColor, textShadowOffset, textShadowRadius } = style\n if (textShadowColor || textShadowOffset || textShadowRadius) {\n const { height, width } = textShadowOffset || defaultOffset\n const radius = textShadowRadius || 0\n const color = normalizeValueWithProperty(textShadowColor, 'textShadowColor')\n if (color && (height !== 0 || width !== 0 || radius !== 0)) {\n const blurRadius = normalizeValueWithProperty(radius)\n const offsetX = normalizeValueWithProperty(width)\n const offsetY = normalizeValueWithProperty(height)\n style.textShadow = `${offsetX} ${offsetY} ${blurRadius} ${color}`\n }\n style.textShadowColor = undefined\n style.textShadowOffset = undefined\n style.textShadowRadius = undefined\n }\n}\n\nfunction createDeclarationBlock(style: Record<string, any>, important = false) {\n let next = ''\n for (const key in style) {\n const prop = hyphenateStyleName(key)\n const value = style[key]\n next += `${prop}:${value}${important ? ' !important' : ''};`\n }\n return `{${next}}`\n}\n\nconst hcache = {}\nconst toHyphenLower = (match: string) => `-${match.toLowerCase()}`\nconst hyphenateStyleName = (key: string) => {\n let val = hcache[key]\n if (val) return val\n hcache[key] = val = key.replace(/[A-Z]/g, toHyphenLower)\n return val\n}\n\nconst pseudoSelectorPrefixes = (() => {\n const res: Record<string, string> = {}\n for (const key in pseudoDescriptors) {\n const pseudo = pseudoDescriptors[key]\n res[pseudo.name] = `${[...Array(pseudo.priority)].map(() => ':root').join('')} `\n }\n return res\n})()\n\nfunction createAtomicRules(\n identifier: string,\n property: string,\n value: any,\n pseudo?: PseudoDescriptor\n): string[] {\n const selector = pseudo\n ? `${pseudoSelectorPrefixes[pseudo.name]} .${identifier}:${pseudo.name}`\n : `.${identifier}`\n const important = !!pseudo\n\n let rules: string[] = []\n\n // Handle non-standard properties and object values that require multiple\n // CSS rules to be created.\n switch (property) {\n // Equivalent to using '::placeholder'\n case 'placeholderTextColor': {\n const block = createDeclarationBlock({ color: value, opacity: 1 }, important)\n rules.push(`${selector}::placeholder${block}`)\n break\n }\n\n // all webkit prefixed rules\n case 'backgroundClip':\n case 'userSelect': {\n const propertyCapitalized = `${property[0].toUpperCase()}${property.slice(1)}`\n const webkitProperty = `Webkit${propertyCapitalized}`\n const block = createDeclarationBlock(\n { [property]: value, [webkitProperty]: value },\n important\n )\n rules.push(`${selector}${block}`)\n break\n }\n\n // Polyfill for additional 'pointer-events' values\n case 'pointerEvents': {\n let finalValue = value\n if (value === 'auto' || value === 'box-only') {\n finalValue = 'auto'\n if (value === 'box-only') {\n rules.push(`${selector}>*${boxOnly}`)\n }\n } else if (value === 'none' || value === 'box-none') {\n finalValue = 'none'\n if (value === 'box-none') {\n rules.push(`${selector}>*${boxNone}`)\n }\n }\n const block = createDeclarationBlock({ pointerEvents: finalValue }, true)\n rules.push(`${selector}${block}`)\n break\n }\n\n default: {\n const block = createDeclarationBlock({ [property]: value }, important)\n rules.push(`${selector}${block}`)\n break\n }\n }\n\n // hover styles need to be conditional\n // perhaps this can be generalized but for now lets just shortcut\n // and hardcode for hover styles, if we need to later we can\n // WEIRD SYNTAX, SEE:\n // https://stackoverflow.com/questions/40532204/media-query-for-devices-supporting-hover\n if (pseudo && pseudo.name === 'hover') {\n rules = rules.map((r) => `@media not all and (hover: none) { ${r} }`)\n }\n\n return rules\n}\n\nconst boxNone = createDeclarationBlock({ pointerEvents: 'auto' }, true)\nconst boxOnly = createDeclarationBlock({ pointerEvents: 'none' }, true)\n"],
|
|
5
|
-
"mappings": "AAKA,
|
|
6
|
-
"names": [
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
7
|
}
|
|
@@ -1,2 +1,12 @@
|
|
|
1
|
-
const
|
|
1
|
+
const empty = () => {
|
|
2
|
+
console.warn("no-op native");
|
|
3
|
+
};
|
|
4
|
+
const getStylesAtomic = empty;
|
|
5
|
+
const getAtomicStyle = empty;
|
|
6
|
+
const styleToCSS = empty;
|
|
7
|
+
export {
|
|
8
|
+
getAtomicStyle,
|
|
9
|
+
getStylesAtomic,
|
|
10
|
+
styleToCSS
|
|
11
|
+
};
|
|
2
12
|
//# sourceMappingURL=getStylesAtomic.native.js.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/helpers/getStylesAtomic.native.ts"],
|
|
4
4
|
"sourcesContent": ["const empty = () => {\n // eslint-disable-next-line no-console\n console.warn('no-op native')\n}\n\nexport const getStylesAtomic = empty\nexport const getAtomicStyle = empty\nexport const styleToCSS = empty\n"],
|
|
5
|
-
"mappings": "AAAA,
|
|
6
|
-
"names": [
|
|
5
|
+
"mappings": "AAAA,MAAM,QAAQ,MAAM;AAElB,UAAQ,KAAK,cAAc;AAC7B;AAEO,MAAM,kBAAkB;AACxB,MAAM,iBAAiB;AACvB,MAAM,aAAa;",
|
|
6
|
+
"names": []
|
|
7
7
|
}
|
|
@@ -1,2 +1,12 @@
|
|
|
1
|
-
const
|
|
1
|
+
const empty = () => {
|
|
2
|
+
console.warn("no-op native");
|
|
3
|
+
};
|
|
4
|
+
const getStylesAtomic = empty;
|
|
5
|
+
const getAtomicStyle = empty;
|
|
6
|
+
const styleToCSS = empty;
|
|
7
|
+
export {
|
|
8
|
+
getAtomicStyle,
|
|
9
|
+
getStylesAtomic,
|
|
10
|
+
styleToCSS
|
|
11
|
+
};
|
|
2
12
|
//# sourceMappingURL=getStylesAtomic.native.mjs.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/helpers/getStylesAtomic.native.ts"],
|
|
4
4
|
"sourcesContent": ["const empty = () => {\n // eslint-disable-next-line no-console\n console.warn('no-op native')\n}\n\nexport const getStylesAtomic = empty\nexport const getAtomicStyle = empty\nexport const styleToCSS = empty\n"],
|
|
5
|
-
"mappings": "AAAA,
|
|
6
|
-
"names": [
|
|
5
|
+
"mappings": "AAAA,MAAM,QAAQ,MAAM;AAElB,UAAQ,KAAK,cAAc;AAC7B;AAEO,MAAM,kBAAkB;AACxB,MAAM,iBAAiB;AACvB,MAAM,aAAa;",
|
|
6
|
+
"names": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,103 @@
|
|
|
1
|
-
import{simpleHash
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { simpleHash } from "@tamagui/helpers";
|
|
2
|
+
import { THEME_CLASSNAME_PREFIX } from "../constants/constants.js";
|
|
3
|
+
import { variableToString } from "../createVariable.js";
|
|
4
|
+
import { tokensValueToVariable } from "./registerCSSVariable.js";
|
|
5
|
+
function getThemeCSSRules({
|
|
6
|
+
config,
|
|
7
|
+
themeName,
|
|
8
|
+
theme,
|
|
9
|
+
names
|
|
10
|
+
}) {
|
|
11
|
+
const cssRuleSets = [];
|
|
12
|
+
const hasDarkLight = "light" in config.themes && "dark" in config.themes;
|
|
13
|
+
const CNP = `.${THEME_CLASSNAME_PREFIX}`;
|
|
14
|
+
let vars = "";
|
|
15
|
+
for (const themeKey in theme) {
|
|
16
|
+
const variable = theme[themeKey];
|
|
17
|
+
let value = null;
|
|
18
|
+
if (!tokensValueToVariable.has(variable.val)) {
|
|
19
|
+
value = variable.val;
|
|
20
|
+
} else {
|
|
21
|
+
value = tokensValueToVariable.get(variable.val).variable;
|
|
22
|
+
}
|
|
23
|
+
vars += `--${simpleHash(themeKey, 40)}:${value};`;
|
|
24
|
+
}
|
|
25
|
+
const isDarkOrLightBase = themeName === "dark" || themeName === "light";
|
|
26
|
+
const selectorsSet = new Set(
|
|
27
|
+
names.map((name) => {
|
|
28
|
+
return `${CNP}${name}`;
|
|
29
|
+
})
|
|
30
|
+
);
|
|
31
|
+
if (hasDarkLight) {
|
|
32
|
+
for (const subName of names) {
|
|
33
|
+
const isDark = themeName === "dark" || subName.startsWith("dark_");
|
|
34
|
+
const maxDepth = config.maxDarkLightNesting ?? 3;
|
|
35
|
+
if (!(isDark || subName.startsWith("light_"))) {
|
|
36
|
+
selectorsSet.add(`:root:root ${CNP}${subName}`);
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
const childSelector = `${CNP}${subName.replace(isDark ? "dark_" : "light_", "")}`;
|
|
40
|
+
const [altLightDark, altSubTheme] = [
|
|
41
|
+
isDark ? ["dark", "light"] : ["light", "dark"],
|
|
42
|
+
isDark ? ["dark", "sub_theme"] : ["light", "sub_theme"]
|
|
43
|
+
];
|
|
44
|
+
for (const order of [altLightDark, altSubTheme]) {
|
|
45
|
+
if (isDarkOrLightBase) {
|
|
46
|
+
order.reverse();
|
|
47
|
+
}
|
|
48
|
+
const [stronger, weaker] = order;
|
|
49
|
+
const numSelectors = Math.round(maxDepth * 1.5);
|
|
50
|
+
for (let depth = 0; depth < numSelectors; depth++) {
|
|
51
|
+
const isOdd = depth % 2 === 1;
|
|
52
|
+
if (isOdd && depth < 3) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
const parents = new Array(depth + 1).fill(0).map((_, psi) => {
|
|
56
|
+
return `${CNP}${psi % 2 === 0 ? stronger : weaker}`;
|
|
57
|
+
});
|
|
58
|
+
let parentSelectors = parents.length > 1 ? parents.slice(1) : parents;
|
|
59
|
+
if (isOdd) {
|
|
60
|
+
const [_first, second, ...rest] = parentSelectors;
|
|
61
|
+
parentSelectors = [second, ...rest, second];
|
|
62
|
+
}
|
|
63
|
+
const lastParentSelector = parentSelectors[parentSelectors.length - 1];
|
|
64
|
+
const nextChildSelector = childSelector === lastParentSelector ? "" : childSelector;
|
|
65
|
+
selectorsSet.add(`${parentSelectors.join(" ")} ${nextChildSelector}`.trim());
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const selectors = [...selectorsSet];
|
|
71
|
+
const selectorsString = selectors.map((x) => {
|
|
72
|
+
const rootSep = isBaseTheme(x) && config.themeClassNameOnRoot ? "" : " ";
|
|
73
|
+
return `:root${rootSep}${x}`;
|
|
74
|
+
}).join(", ");
|
|
75
|
+
const css = `${selectorsString} {${vars}}`;
|
|
76
|
+
cssRuleSets.push(css);
|
|
77
|
+
if (config.shouldAddPrefersColorThemes) {
|
|
78
|
+
const bgString = variableToString(theme.background);
|
|
79
|
+
const fgString = variableToString(theme.color);
|
|
80
|
+
const bodyRules = `body{background:${bgString};color:${fgString};}`;
|
|
81
|
+
const isDark = themeName.startsWith("dark");
|
|
82
|
+
const baseName = isDark ? "dark" : "light";
|
|
83
|
+
const lessSpecificSelectors = selectors.map((x) => {
|
|
84
|
+
if (x == darkSelector || x === lightSelector)
|
|
85
|
+
return `:root`;
|
|
86
|
+
return x.replace(/^\.t_(dark|light) /, "").trim();
|
|
87
|
+
}).filter(Boolean).join(", ");
|
|
88
|
+
const themeRules = `${lessSpecificSelectors} {${vars}}`;
|
|
89
|
+
const prefersMediaSelectors = `@media(prefers-color-scheme:${baseName}){
|
|
90
|
+
${bodyRules}
|
|
91
|
+
${themeRules}
|
|
92
|
+
}`;
|
|
93
|
+
cssRuleSets.push(prefersMediaSelectors);
|
|
94
|
+
}
|
|
95
|
+
return cssRuleSets;
|
|
96
|
+
}
|
|
97
|
+
const darkSelector = ".t_dark";
|
|
98
|
+
const lightSelector = ".t_light";
|
|
99
|
+
const isBaseTheme = (x) => x === darkSelector || x === lightSelector || x.startsWith(".t_dark ") || x.startsWith(".t_light ");
|
|
100
|
+
export {
|
|
101
|
+
getThemeCSSRules
|
|
102
|
+
};
|
|
5
103
|
//# sourceMappingURL=getThemeCSSRules.js.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/helpers/getThemeCSSRules.ts"],
|
|
4
4
|
"sourcesContent": ["import { simpleHash } from '@tamagui/helpers'\n\nimport { THEME_CLASSNAME_PREFIX } from '../constants/constants.js'\nimport { Variable, variableToString } from '../createVariable.js'\nimport type { CreateTamaguiProps, ThemeParsed } from '../types.js'\nimport { tokensValueToVariable } from './registerCSSVariable.js'\n\nexport function getThemeCSSRules({\n config,\n themeName,\n theme,\n names,\n}: {\n config: CreateTamaguiProps\n themeName: string\n theme: ThemeParsed\n names: string[]\n}) {\n const cssRuleSets: string[] = []\n\n // special case for SSR\n const hasDarkLight = 'light' in config.themes && 'dark' in config.themes\n const CNP = `.${THEME_CLASSNAME_PREFIX}`\n let vars = ''\n\n // themeToVariableToValueMap.set(theme, {})\n // const varToValMap = themeToVariableToValueMap.get(theme)\n for (const themeKey in theme) {\n const variable = theme[themeKey] as Variable\n let value: any = null\n // if (varToValMap) {\n // varToValMap[variable.variable] = variable.val\n // }\n if (!tokensValueToVariable.has(variable.val)) {\n value = variable.val\n } else {\n value = tokensValueToVariable.get(variable.val)!.variable\n }\n // Hash themeKey in case it has invalid chars too\n vars += `--${simpleHash(themeKey, 40)}:${value};`\n }\n\n const isDarkOrLightBase = themeName === 'dark' || themeName === 'light'\n const selectorsSet = new Set(\n names.map((name) => {\n return `${CNP}${name}`\n })\n )\n\n // since we dont specify dark/light in classnames we have to do an awkward specificity war\n // use config.maxDarkLightNesting to determine how deep you can nest until it breaks\n if (hasDarkLight) {\n for (const subName of names) {\n const isDark = themeName === 'dark' || subName.startsWith('dark_')\n const maxDepth = config.maxDarkLightNesting ?? 3\n\n if (!(isDark || subName.startsWith('light_'))) {\n // neither light nor dark subtheme, just generate one selector with :root:root which\n // will override all :root light/dark selectors generated below\n selectorsSet.add(`:root:root ${CNP}${subName}`)\n continue\n }\n\n const childSelector = `${CNP}${subName.replace(isDark ? 'dark_' : 'light_', '')}`\n\n const [altLightDark, altSubTheme] = [\n isDark ? ['dark', 'light'] : ['light', 'dark'],\n isDark ? ['dark', 'sub_theme'] : ['light', 'sub_theme'],\n ]\n\n for (const order of [altLightDark, altSubTheme]) {\n if (isDarkOrLightBase) {\n order.reverse()\n }\n const [stronger, weaker] = order\n const numSelectors = Math.round(maxDepth * 1.5)\n\n for (let depth = 0; depth < numSelectors; depth++) {\n const isOdd = depth % 2 === 1\n\n // wtf is this continue:\n if (isOdd && depth < 3) {\n continue\n }\n\n const parents = new Array(depth + 1).fill(0).map((_, psi) => {\n return `${CNP}${psi % 2 === 0 ? stronger : weaker}`\n })\n\n let parentSelectors = parents.length > 1 ? parents.slice(1) : parents\n\n if (isOdd) {\n const [_first, second, ...rest] = parentSelectors\n parentSelectors = [second, ...rest, second]\n }\n\n const lastParentSelector = parentSelectors[parentSelectors.length - 1]\n const nextChildSelector =\n childSelector === lastParentSelector ? '' : childSelector\n\n // for light/dark/light:\n selectorsSet.add(`${parentSelectors.join(' ')} ${nextChildSelector}`.trim())\n }\n }\n }\n }\n\n const selectors = [...selectorsSet]\n\n // only do our :root attach if it's not light/dark - not support sub themes on root saves a lot of effort/size\n // this isBaseTheme logic could probably be done more efficiently above\n const selectorsString = selectors\n .map((x) => {\n const rootSep = isBaseTheme(x) && config.themeClassNameOnRoot ? '' : ' '\n return `:root${rootSep}${x}`\n })\n .join(', ')\n\n const css = `${selectorsString} {${vars}}`\n cssRuleSets.push(css)\n\n if (config.shouldAddPrefersColorThemes) {\n const bgString = variableToString(theme.background)\n const fgString = variableToString(theme.color)\n const bodyRules = `body{background:${bgString};color:${fgString};}`\n const isDark = themeName.startsWith('dark')\n const baseName = isDark ? 'dark' : 'light'\n const lessSpecificSelectors = selectors\n .map((x) => {\n if (x == darkSelector || x === lightSelector) return `:root`\n return x.replace(/^\\.t_(dark|light) /, '').trim()\n })\n .filter(Boolean)\n .join(', ')\n const themeRules = `${lessSpecificSelectors} {${vars}}`\n const prefersMediaSelectors = `@media(prefers-color-scheme:${baseName}){\n ${bodyRules}\n ${themeRules}\n}`\n cssRuleSets.push(prefersMediaSelectors)\n }\n\n return cssRuleSets\n}\n\nconst darkSelector = '.t_dark'\nconst lightSelector = '.t_light'\nconst isBaseTheme = (x: string) =>\n x === darkSelector ||\n x === lightSelector ||\n x.startsWith('.t_dark ') ||\n x.startsWith('.t_light ')\n"],
|
|
5
|
-
"mappings": "AAAA,
|
|
6
|
-
"names": [
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,103 @@
|
|
|
1
|
-
import{simpleHash
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { simpleHash } from "@tamagui/helpers";
|
|
2
|
+
import { THEME_CLASSNAME_PREFIX } from "../constants/constants.js";
|
|
3
|
+
import { variableToString } from "../createVariable.js";
|
|
4
|
+
import { tokensValueToVariable } from "./registerCSSVariable.js";
|
|
5
|
+
function getThemeCSSRules({
|
|
6
|
+
config,
|
|
7
|
+
themeName,
|
|
8
|
+
theme,
|
|
9
|
+
names
|
|
10
|
+
}) {
|
|
11
|
+
const cssRuleSets = [];
|
|
12
|
+
const hasDarkLight = "light" in config.themes && "dark" in config.themes;
|
|
13
|
+
const CNP = `.${THEME_CLASSNAME_PREFIX}`;
|
|
14
|
+
let vars = "";
|
|
15
|
+
for (const themeKey in theme) {
|
|
16
|
+
const variable = theme[themeKey];
|
|
17
|
+
let value = null;
|
|
18
|
+
if (!tokensValueToVariable.has(variable.val)) {
|
|
19
|
+
value = variable.val;
|
|
20
|
+
} else {
|
|
21
|
+
value = tokensValueToVariable.get(variable.val).variable;
|
|
22
|
+
}
|
|
23
|
+
vars += `--${simpleHash(themeKey, 40)}:${value};`;
|
|
24
|
+
}
|
|
25
|
+
const isDarkOrLightBase = themeName === "dark" || themeName === "light";
|
|
26
|
+
const selectorsSet = new Set(
|
|
27
|
+
names.map((name) => {
|
|
28
|
+
return `${CNP}${name}`;
|
|
29
|
+
})
|
|
30
|
+
);
|
|
31
|
+
if (hasDarkLight) {
|
|
32
|
+
for (const subName of names) {
|
|
33
|
+
const isDark = themeName === "dark" || subName.startsWith("dark_");
|
|
34
|
+
const maxDepth = config.maxDarkLightNesting ?? 3;
|
|
35
|
+
if (!(isDark || subName.startsWith("light_"))) {
|
|
36
|
+
selectorsSet.add(`:root:root ${CNP}${subName}`);
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
const childSelector = `${CNP}${subName.replace(isDark ? "dark_" : "light_", "")}`;
|
|
40
|
+
const [altLightDark, altSubTheme] = [
|
|
41
|
+
isDark ? ["dark", "light"] : ["light", "dark"],
|
|
42
|
+
isDark ? ["dark", "sub_theme"] : ["light", "sub_theme"]
|
|
43
|
+
];
|
|
44
|
+
for (const order of [altLightDark, altSubTheme]) {
|
|
45
|
+
if (isDarkOrLightBase) {
|
|
46
|
+
order.reverse();
|
|
47
|
+
}
|
|
48
|
+
const [stronger, weaker] = order;
|
|
49
|
+
const numSelectors = Math.round(maxDepth * 1.5);
|
|
50
|
+
for (let depth = 0; depth < numSelectors; depth++) {
|
|
51
|
+
const isOdd = depth % 2 === 1;
|
|
52
|
+
if (isOdd && depth < 3) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
const parents = new Array(depth + 1).fill(0).map((_, psi) => {
|
|
56
|
+
return `${CNP}${psi % 2 === 0 ? stronger : weaker}`;
|
|
57
|
+
});
|
|
58
|
+
let parentSelectors = parents.length > 1 ? parents.slice(1) : parents;
|
|
59
|
+
if (isOdd) {
|
|
60
|
+
const [_first, second, ...rest] = parentSelectors;
|
|
61
|
+
parentSelectors = [second, ...rest, second];
|
|
62
|
+
}
|
|
63
|
+
const lastParentSelector = parentSelectors[parentSelectors.length - 1];
|
|
64
|
+
const nextChildSelector = childSelector === lastParentSelector ? "" : childSelector;
|
|
65
|
+
selectorsSet.add(`${parentSelectors.join(" ")} ${nextChildSelector}`.trim());
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const selectors = [...selectorsSet];
|
|
71
|
+
const selectorsString = selectors.map((x) => {
|
|
72
|
+
const rootSep = isBaseTheme(x) && config.themeClassNameOnRoot ? "" : " ";
|
|
73
|
+
return `:root${rootSep}${x}`;
|
|
74
|
+
}).join(", ");
|
|
75
|
+
const css = `${selectorsString} {${vars}}`;
|
|
76
|
+
cssRuleSets.push(css);
|
|
77
|
+
if (config.shouldAddPrefersColorThemes) {
|
|
78
|
+
const bgString = variableToString(theme.background);
|
|
79
|
+
const fgString = variableToString(theme.color);
|
|
80
|
+
const bodyRules = `body{background:${bgString};color:${fgString};}`;
|
|
81
|
+
const isDark = themeName.startsWith("dark");
|
|
82
|
+
const baseName = isDark ? "dark" : "light";
|
|
83
|
+
const lessSpecificSelectors = selectors.map((x) => {
|
|
84
|
+
if (x == darkSelector || x === lightSelector)
|
|
85
|
+
return `:root`;
|
|
86
|
+
return x.replace(/^\.t_(dark|light) /, "").trim();
|
|
87
|
+
}).filter(Boolean).join(", ");
|
|
88
|
+
const themeRules = `${lessSpecificSelectors} {${vars}}`;
|
|
89
|
+
const prefersMediaSelectors = `@media(prefers-color-scheme:${baseName}){
|
|
90
|
+
${bodyRules}
|
|
91
|
+
${themeRules}
|
|
92
|
+
}`;
|
|
93
|
+
cssRuleSets.push(prefersMediaSelectors);
|
|
94
|
+
}
|
|
95
|
+
return cssRuleSets;
|
|
96
|
+
}
|
|
97
|
+
const darkSelector = ".t_dark";
|
|
98
|
+
const lightSelector = ".t_light";
|
|
99
|
+
const isBaseTheme = (x) => x === darkSelector || x === lightSelector || x.startsWith(".t_dark ") || x.startsWith(".t_light ");
|
|
100
|
+
export {
|
|
101
|
+
getThemeCSSRules
|
|
102
|
+
};
|
|
5
103
|
//# sourceMappingURL=getThemeCSSRules.mjs.map
|