feat(TextComponent): enhance text styling with dynamic font weights and improved layout
- Updated Text component to support dynamic font weights, allowing for more flexible text styling. - Refactored variant styles to utilize new font weight constants for better consistency across text variants. - Introduced letter spacing adjustments for improved readability and visual appeal. - Added font family configuration for iOS and Android to optimize typography across platforms.
This commit is contained in:
@@ -4,8 +4,8 @@
|
||||
*/
|
||||
|
||||
import React from 'react';
|
||||
import { Text as RNText, TextProps, StyleSheet, TextStyle, ViewStyle } from 'react-native';
|
||||
import { useAppColors, fontSizes } from '../../theme';
|
||||
import { Text as RNText, TextProps, StyleSheet, TextStyle, ViewStyle, Platform } from 'react-native';
|
||||
import { useAppColors, fontSizes, fontWeights } from '../../theme';
|
||||
|
||||
type TextVariant = 'h1' | 'h2' | 'h3' | 'body' | 'caption' | 'label';
|
||||
|
||||
@@ -16,38 +16,45 @@ interface CustomTextProps extends Omit<TextProps, 'style'> {
|
||||
numberOfLines?: number;
|
||||
onPress?: () => void;
|
||||
style?: TextStyle | TextStyle[];
|
||||
weight?: 'regular' | 'medium' | 'semibold' | 'bold';
|
||||
}
|
||||
|
||||
const variantStyles: Record<TextVariant, object> = {
|
||||
h1: {
|
||||
fontSize: fontSizes['4xl'],
|
||||
fontWeight: '700',
|
||||
lineHeight: fontSizes['4xl'] * 1.4,
|
||||
fontWeight: fontWeights.bold,
|
||||
lineHeight: fontSizes['4xl'] * 1.3,
|
||||
letterSpacing: -0.5,
|
||||
},
|
||||
h2: {
|
||||
fontSize: fontSizes['3xl'],
|
||||
fontWeight: '600',
|
||||
lineHeight: fontSizes['3xl'] * 1.4,
|
||||
fontWeight: fontWeights.semibold,
|
||||
lineHeight: fontSizes['3xl'] * 1.3,
|
||||
letterSpacing: -0.3,
|
||||
},
|
||||
h3: {
|
||||
fontSize: fontSizes['2xl'],
|
||||
fontWeight: '600',
|
||||
fontWeight: fontWeights.semibold,
|
||||
lineHeight: fontSizes['2xl'] * 1.3,
|
||||
letterSpacing: -0.2,
|
||||
},
|
||||
body: {
|
||||
fontSize: fontSizes.md,
|
||||
fontWeight: '400',
|
||||
lineHeight: fontSizes.md * 1.5,
|
||||
fontWeight: fontWeights.regular,
|
||||
lineHeight: fontSizes.md * 1.6,
|
||||
letterSpacing: 0.1,
|
||||
},
|
||||
caption: {
|
||||
fontSize: fontSizes.sm,
|
||||
fontWeight: '400',
|
||||
lineHeight: fontSizes.sm * 1.4,
|
||||
fontWeight: fontWeights.regular,
|
||||
lineHeight: fontSizes.sm * 1.5,
|
||||
letterSpacing: 0.2,
|
||||
},
|
||||
label: {
|
||||
fontSize: fontSizes.xs,
|
||||
fontWeight: '500',
|
||||
fontWeight: fontWeights.medium,
|
||||
lineHeight: fontSizes.xs * 1.4,
|
||||
letterSpacing: 0.3,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -55,6 +62,7 @@ const Text: React.FC<CustomTextProps> = ({
|
||||
children,
|
||||
variant = 'body',
|
||||
color,
|
||||
weight,
|
||||
numberOfLines,
|
||||
onPress,
|
||||
style,
|
||||
@@ -64,6 +72,7 @@ const Text: React.FC<CustomTextProps> = ({
|
||||
const textStyle = [
|
||||
styles.base,
|
||||
variantStyles[variant],
|
||||
weight ? { fontWeight: fontWeights[weight] } : null,
|
||||
color ? { color } : { color: colors.text.primary },
|
||||
style,
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user