@umituz/react-native-settings 4.19.6 → 4.20.1
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/package.json +14 -12
- package/src/domains/about/presentation/components/AboutContent.tsx +12 -9
- package/src/domains/about/presentation/components/AboutHeader.tsx +12 -11
- package/src/domains/about/presentation/components/AboutSettingItem.tsx +18 -17
- package/src/domains/about/presentation/screens/AboutScreen.tsx +13 -12
- package/src/domains/appearance/presentation/components/AppearanceHeader.tsx +2 -2
- package/src/domains/appearance/presentation/components/AppearancePreview.tsx +11 -11
- package/src/domains/appearance/presentation/components/ColorPicker.tsx +3 -3
- package/src/domains/appearance/presentation/components/CustomColorsSection.tsx +4 -4
- package/src/domains/appearance/presentation/components/ThemeModeSection.tsx +3 -3
- package/src/domains/appearance/presentation/components/ThemeOption.tsx +20 -20
- package/src/domains/appearance/presentation/screens/AppearanceScreen.tsx +5 -5
- package/src/domains/disclaimer/presentation/components/DisclaimerCard.tsx +15 -15
- package/src/domains/disclaimer/presentation/components/DisclaimerModal.tsx +5 -5
- package/src/domains/disclaimer/presentation/screens/DisclaimerScreen.tsx +9 -9
- package/src/domains/faqs/presentation/components/FAQCategory.tsx +17 -8
- package/src/domains/faqs/presentation/components/FAQEmptyState.tsx +2 -2
- package/src/domains/faqs/presentation/components/FAQItem.tsx +37 -22
- package/src/domains/faqs/presentation/components/FAQSearchBar.tsx +13 -12
- package/src/domains/faqs/presentation/screens/FAQScreen.tsx +38 -28
- package/src/domains/feedback/presentation/components/FeedbackForm.tsx +21 -19
- package/src/domains/feedback/presentation/components/FeedbackModal.tsx +11 -9
- package/src/domains/legal/presentation/screens/LegalScreen.tsx +8 -8
- package/src/domains/legal/presentation/screens/PrivacyPolicyScreen.tsx +15 -12
- package/src/domains/legal/presentation/screens/TermsOfServiceScreen.tsx +15 -12
- package/src/domains/rating/presentation/components/StarRating.tsx +9 -4
- package/src/domains/video-tutorials/index.ts +1 -0
- package/src/domains/video-tutorials/infrastructure/services/video-tutorial.service.ts +2 -2
- package/src/domains/video-tutorials/presentation/components/VideoTutorialCard.tsx +35 -31
- package/src/domains/video-tutorials/presentation/screens/VideoTutorialsScreen.tsx +11 -9
- package/src/presentation/components/DevSettingsSection.tsx +2 -2
- package/src/presentation/components/SettingItem.tsx +2 -2
- package/src/presentation/components/SettingsErrorBoundary.tsx +2 -2
- package/src/presentation/components/SettingsFooter.tsx +2 -2
- package/src/presentation/components/SettingsItemCard.tsx +2 -2
- package/src/presentation/components/SettingsSection.tsx +2 -2
- package/src/presentation/navigation/SettingsStackNavigator.tsx +2 -2
- package/src/presentation/screens/SettingsScreen.tsx +2 -2
- package/src/presentation/screens/components/SettingsContent.tsx +2 -2
- package/src/presentation/screens/components/SettingsHeader.tsx +2 -2
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@umituz/react-native-settings",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.20.1",
|
|
4
4
|
"description": "Complete settings hub for React Native apps - consolidated package with settings, about, legal, appearance, feedback, FAQs, and rating",
|
|
5
5
|
"main": "./src/index.ts",
|
|
6
6
|
"types": "./src/index.ts",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"typecheck": "tsc --noEmit",
|
|
9
|
-
"lint": "eslint src
|
|
10
|
-
"lint:fix": "eslint src --
|
|
9
|
+
"lint": "eslint src",
|
|
10
|
+
"lint:fix": "eslint src --fix",
|
|
11
11
|
"version:patch": "npm version patch -m 'chore: release v%s'",
|
|
12
12
|
"version:minor": "npm version minor -m 'chore: release v%s'",
|
|
13
13
|
"version:major": "npm version major -m 'chore: release v%s'"
|
|
@@ -58,28 +58,30 @@
|
|
|
58
58
|
"@gorhom/bottom-sheet": "^5.2.8",
|
|
59
59
|
"@react-native-community/datetimepicker": "^8.5.1",
|
|
60
60
|
"@react-navigation/bottom-tabs": "^7.9.0",
|
|
61
|
-
"@react-navigation/native": "^
|
|
62
|
-
"@react-navigation/stack": "^6.
|
|
61
|
+
"@react-navigation/native": "^7.1.26",
|
|
62
|
+
"@react-navigation/stack": "^7.6.13",
|
|
63
63
|
"@sentry/react-native": "^7.8.0",
|
|
64
64
|
"@sentry/types": "^10.32.1",
|
|
65
65
|
"@tanstack/react-query": "^5.0.0",
|
|
66
66
|
"@types/jest": "^29.5.14",
|
|
67
67
|
"@types/react": "~19.1.10",
|
|
68
|
-
"@typescript-eslint/eslint-plugin": "^7.
|
|
69
|
-
"@typescript-eslint/parser": "^7.
|
|
68
|
+
"@typescript-eslint/eslint-plugin": "^7.18.0",
|
|
69
|
+
"@typescript-eslint/parser": "^7.18.0",
|
|
70
70
|
"@umituz/react-native-auth": "latest",
|
|
71
71
|
"@umituz/react-native-design-system": "latest",
|
|
72
|
-
"@umituz/react-native-filesystem": "
|
|
73
|
-
"@umituz/react-native-firebase": "
|
|
74
|
-
"@umituz/react-native-haptics": "
|
|
72
|
+
"@umituz/react-native-filesystem": "latest",
|
|
73
|
+
"@umituz/react-native-firebase": "latest",
|
|
74
|
+
"@umituz/react-native-haptics": "latest",
|
|
75
75
|
"@umituz/react-native-localization": "latest",
|
|
76
76
|
"@umituz/react-native-notifications": "latest",
|
|
77
77
|
"@umituz/react-native-onboarding": "latest",
|
|
78
|
-
"@umituz/react-native-sentry": "
|
|
78
|
+
"@umituz/react-native-sentry": "latest",
|
|
79
79
|
"@umituz/react-native-storage": "latest",
|
|
80
80
|
"@umituz/react-native-tanstack": "latest",
|
|
81
|
-
"@umituz/react-native-uuid": "
|
|
81
|
+
"@umituz/react-native-uuid": "latest",
|
|
82
82
|
"eslint": "^8.57.0",
|
|
83
|
+
"eslint-plugin-react": "^7.37.5",
|
|
84
|
+
"eslint-plugin-react-native": "^5.0.0",
|
|
83
85
|
"expo-apple-authentication": "^8.0.8",
|
|
84
86
|
"expo-application": "^7.0.8",
|
|
85
87
|
"expo-clipboard": "^8.0.8",
|
|
@@ -8,7 +8,7 @@ import { AboutSettingItem } from './AboutSettingItem';
|
|
|
8
8
|
import { AppInfo } from '../../domain/entities/AppInfo';
|
|
9
9
|
import { AboutConfig } from '../../domain/entities/AppInfo';
|
|
10
10
|
|
|
11
|
-
import {
|
|
11
|
+
import { useAppDesignTokens } from '@umituz/react-native-design-system';
|
|
12
12
|
|
|
13
13
|
export interface AboutContentProps {
|
|
14
14
|
/** App information to display */
|
|
@@ -18,7 +18,8 @@ export interface AboutContentProps {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
const AboutSectionHeader: React.FC<{ title: string }> = ({ title }) => {
|
|
21
|
-
const tokens =
|
|
21
|
+
const tokens = useAppDesignTokens();
|
|
22
|
+
const styles = getStyles(tokens);
|
|
22
23
|
const colors = tokens.colors;
|
|
23
24
|
|
|
24
25
|
return (
|
|
@@ -30,6 +31,8 @@ export const AboutContent: React.FC<AboutContentProps> = ({
|
|
|
30
31
|
appInfo,
|
|
31
32
|
config,
|
|
32
33
|
}) => {
|
|
34
|
+
const tokens = useAppDesignTokens();
|
|
35
|
+
const styles = getStyles(tokens);
|
|
33
36
|
const hasContactInfo = appInfo.developer || appInfo.contactEmail || appInfo.websiteUrl;
|
|
34
37
|
const hasMoreInfo = appInfo.moreAppsUrl;
|
|
35
38
|
|
|
@@ -86,19 +89,19 @@ export const AboutContent: React.FC<AboutContentProps> = ({
|
|
|
86
89
|
);
|
|
87
90
|
};
|
|
88
91
|
|
|
89
|
-
const
|
|
92
|
+
const getStyles = (tokens: any) => StyleSheet.create({
|
|
90
93
|
content: {
|
|
91
|
-
paddingVertical: 8,
|
|
94
|
+
paddingVertical: 8 * tokens.spacingMultiplier,
|
|
92
95
|
},
|
|
93
96
|
section: {
|
|
94
|
-
marginBottom: 24,
|
|
97
|
+
marginBottom: 24 * tokens.spacingMultiplier,
|
|
95
98
|
},
|
|
96
99
|
sectionHeader: {
|
|
97
|
-
fontSize:
|
|
100
|
+
fontSize: tokens.typography.labelSmall.responsiveFontSize,
|
|
98
101
|
fontWeight: '600',
|
|
99
|
-
marginBottom: 8,
|
|
100
|
-
paddingHorizontal: 16,
|
|
102
|
+
marginBottom: 8 * tokens.spacingMultiplier,
|
|
103
|
+
paddingHorizontal: 16 * tokens.spacingMultiplier,
|
|
101
104
|
textTransform: 'uppercase',
|
|
102
|
-
letterSpacing: 0.5,
|
|
105
|
+
letterSpacing: 0.5 * tokens.spacingMultiplier,
|
|
103
106
|
},
|
|
104
107
|
});
|
|
@@ -26,7 +26,7 @@ export interface AboutHeaderProps {
|
|
|
26
26
|
testID?: string;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
import {
|
|
29
|
+
import { useAppDesignTokens } from '@umituz/react-native-design-system';
|
|
30
30
|
|
|
31
31
|
export const AboutHeader: React.FC<AboutHeaderProps> = ({
|
|
32
32
|
appInfo,
|
|
@@ -37,7 +37,8 @@ export const AboutHeader: React.FC<AboutHeaderProps> = ({
|
|
|
37
37
|
versionPrefix = "Version",
|
|
38
38
|
testID,
|
|
39
39
|
}) => {
|
|
40
|
-
const tokens =
|
|
40
|
+
const tokens = useAppDesignTokens();
|
|
41
|
+
const styles = getStyles(tokens);
|
|
41
42
|
const colors = tokens.colors;
|
|
42
43
|
|
|
43
44
|
return (
|
|
@@ -55,25 +56,25 @@ export const AboutHeader: React.FC<AboutHeaderProps> = ({
|
|
|
55
56
|
);
|
|
56
57
|
};
|
|
57
58
|
|
|
58
|
-
const
|
|
59
|
+
const getStyles = (tokens: any) => StyleSheet.create({
|
|
59
60
|
header: {
|
|
60
61
|
alignItems: 'center',
|
|
61
|
-
paddingVertical: 24,
|
|
62
|
-
paddingHorizontal: 16,
|
|
62
|
+
paddingVertical: 24 * tokens.spacingMultiplier,
|
|
63
|
+
paddingHorizontal: 16 * tokens.spacingMultiplier,
|
|
63
64
|
borderBottomWidth: 1,
|
|
64
65
|
},
|
|
65
66
|
appName: {
|
|
66
|
-
fontSize:
|
|
67
|
+
fontSize: tokens.typography.headlineMedium.responsiveFontSize,
|
|
67
68
|
fontWeight: 'bold',
|
|
68
|
-
marginBottom: 4,
|
|
69
|
+
marginBottom: 4 * tokens.spacingMultiplier,
|
|
69
70
|
},
|
|
70
71
|
version: {
|
|
71
|
-
fontSize:
|
|
72
|
-
marginBottom: 8,
|
|
72
|
+
fontSize: tokens.typography.bodyLarge.responsiveFontSize,
|
|
73
|
+
marginBottom: 8 * tokens.spacingMultiplier,
|
|
73
74
|
},
|
|
74
75
|
description: {
|
|
75
|
-
fontSize:
|
|
76
|
+
fontSize: tokens.typography.bodyMedium.responsiveFontSize,
|
|
76
77
|
textAlign: 'center',
|
|
77
|
-
lineHeight: 20,
|
|
78
|
+
lineHeight: 20 * tokens.spacingMultiplier,
|
|
78
79
|
},
|
|
79
80
|
});
|
|
@@ -45,7 +45,7 @@ export interface AboutSettingItemProps {
|
|
|
45
45
|
chevronColor?: string;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
import {
|
|
48
|
+
import { useAppDesignTokens } from '@umituz/react-native-design-system';
|
|
49
49
|
|
|
50
50
|
export const AboutSettingItem: React.FC<AboutSettingItemProps> = ({
|
|
51
51
|
icon,
|
|
@@ -63,7 +63,8 @@ export const AboutSettingItem: React.FC<AboutSettingItemProps> = ({
|
|
|
63
63
|
testID,
|
|
64
64
|
chevronColor,
|
|
65
65
|
}) => {
|
|
66
|
-
const tokens =
|
|
66
|
+
const tokens = useAppDesignTokens();
|
|
67
|
+
const styles = getStyles(tokens);
|
|
67
68
|
const colors = tokens.colors;
|
|
68
69
|
|
|
69
70
|
// Memoize container type to prevent unnecessary re-renders
|
|
@@ -79,7 +80,7 @@ export const AboutSettingItem: React.FC<AboutSettingItemProps> = ({
|
|
|
79
80
|
disabled && styles.disabled,
|
|
80
81
|
containerStyle
|
|
81
82
|
];
|
|
82
|
-
}, [disabled, containerStyle, colors.surface]);
|
|
83
|
+
}, [disabled, containerStyle, colors.surface, styles]);
|
|
83
84
|
|
|
84
85
|
// Memoize icon container styles
|
|
85
86
|
const iconContainerStyles = useMemo(() => {
|
|
@@ -87,7 +88,7 @@ export const AboutSettingItem: React.FC<AboutSettingItemProps> = ({
|
|
|
87
88
|
styles.iconContainer,
|
|
88
89
|
iconContainerStyle
|
|
89
90
|
];
|
|
90
|
-
}, [iconContainerStyle]);
|
|
91
|
+
}, [iconContainerStyle, styles]);
|
|
91
92
|
|
|
92
93
|
// Memoize chevron styles
|
|
93
94
|
const chevronStyles = useMemo(() => {
|
|
@@ -95,7 +96,7 @@ export const AboutSettingItem: React.FC<AboutSettingItemProps> = ({
|
|
|
95
96
|
styles.chevron,
|
|
96
97
|
{ color: chevronColor || colors.textSecondary }
|
|
97
98
|
];
|
|
98
|
-
}, [chevronColor, colors.textSecondary]);
|
|
99
|
+
}, [chevronColor, colors.textSecondary, styles]);
|
|
99
100
|
|
|
100
101
|
// Memoize press handler to prevent unnecessary re-renders
|
|
101
102
|
const handlePress = useCallback(() => {
|
|
@@ -129,7 +130,7 @@ export const AboutSettingItem: React.FC<AboutSettingItemProps> = ({
|
|
|
129
130
|
)}
|
|
130
131
|
</View>
|
|
131
132
|
);
|
|
132
|
-
}, [title, description, titleStyle, descriptionStyle, colors.textPrimary, colors.textSecondary]);
|
|
133
|
+
}, [title, description, titleStyle, descriptionStyle, colors.textPrimary, colors.textSecondary, styles]);
|
|
133
134
|
|
|
134
135
|
// Memoize value rendering
|
|
135
136
|
const renderValue = useMemo(() => {
|
|
@@ -140,7 +141,7 @@ export const AboutSettingItem: React.FC<AboutSettingItemProps> = ({
|
|
|
140
141
|
return (
|
|
141
142
|
<Text style={[styles.value, { color: colors.textSecondary }, valueStyle]}>{value}</Text>
|
|
142
143
|
);
|
|
143
|
-
}, [value, valueStyle, colors.textSecondary]);
|
|
144
|
+
}, [value, valueStyle, colors.textSecondary, styles]);
|
|
144
145
|
|
|
145
146
|
// Memoize chevron rendering
|
|
146
147
|
const renderChevron = useMemo(() => {
|
|
@@ -168,18 +169,18 @@ export const AboutSettingItem: React.FC<AboutSettingItemProps> = ({
|
|
|
168
169
|
);
|
|
169
170
|
};
|
|
170
171
|
|
|
171
|
-
const
|
|
172
|
+
const getStyles = (tokens: any) => StyleSheet.create({
|
|
172
173
|
container: {
|
|
173
174
|
flexDirection: 'row',
|
|
174
175
|
alignItems: 'center',
|
|
175
|
-
paddingVertical: 12,
|
|
176
|
-
paddingHorizontal: 16,
|
|
176
|
+
paddingVertical: 12 * tokens.spacingMultiplier,
|
|
177
|
+
paddingHorizontal: 16 * tokens.spacingMultiplier,
|
|
177
178
|
},
|
|
178
179
|
disabled: {
|
|
179
180
|
opacity: 0.5,
|
|
180
181
|
},
|
|
181
182
|
iconContainer: {
|
|
182
|
-
marginRight: 12,
|
|
183
|
+
marginRight: 12 * tokens.spacingMultiplier,
|
|
183
184
|
alignItems: 'center',
|
|
184
185
|
justifyContent: 'center',
|
|
185
186
|
},
|
|
@@ -187,22 +188,22 @@ const styles = StyleSheet.create({
|
|
|
187
188
|
flex: 1,
|
|
188
189
|
},
|
|
189
190
|
title: {
|
|
190
|
-
fontSize:
|
|
191
|
+
fontSize: tokens.typography.bodyLarge.responsiveFontSize,
|
|
191
192
|
fontWeight: '500',
|
|
192
193
|
},
|
|
193
194
|
description: {
|
|
194
|
-
fontSize:
|
|
195
|
-
marginTop: 2,
|
|
195
|
+
fontSize: tokens.typography.bodySmall.responsiveFontSize,
|
|
196
|
+
marginTop: 2 * tokens.spacingMultiplier,
|
|
196
197
|
},
|
|
197
198
|
value: {
|
|
198
|
-
fontSize:
|
|
199
|
-
marginRight: 8,
|
|
199
|
+
fontSize: tokens.typography.bodyLarge.responsiveFontSize,
|
|
200
|
+
marginRight: 8 * tokens.spacingMultiplier,
|
|
200
201
|
flexShrink: 1,
|
|
201
202
|
textAlign: 'right',
|
|
202
203
|
maxWidth: '60%',
|
|
203
204
|
},
|
|
204
205
|
chevron: {
|
|
205
|
-
fontSize: 20,
|
|
206
|
+
fontSize: 20 * tokens.spacingMultiplier,
|
|
206
207
|
fontWeight: '300',
|
|
207
208
|
},
|
|
208
209
|
});
|
|
@@ -38,7 +38,7 @@ export interface AboutScreenProps {
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
import { useAboutInfo } from '../hooks/useAboutInfo';
|
|
41
|
-
import {
|
|
41
|
+
import { useAppDesignTokens, AtomicText } from '@umituz/react-native-design-system';
|
|
42
42
|
|
|
43
43
|
export const AboutScreen: React.FC<AboutScreenProps> = ({
|
|
44
44
|
config,
|
|
@@ -51,7 +51,8 @@ export const AboutScreen: React.FC<AboutScreenProps> = ({
|
|
|
51
51
|
footerComponent,
|
|
52
52
|
testID,
|
|
53
53
|
}) => {
|
|
54
|
-
const tokens =
|
|
54
|
+
const tokens = useAppDesignTokens();
|
|
55
|
+
const styles = getStyles(tokens);
|
|
55
56
|
const colors = tokens.colors;
|
|
56
57
|
|
|
57
58
|
const { appInfo, loading, error } = useAboutInfo({
|
|
@@ -91,7 +92,7 @@ export const AboutScreen: React.FC<AboutScreenProps> = ({
|
|
|
91
92
|
{footerComponent}
|
|
92
93
|
</View>
|
|
93
94
|
);
|
|
94
|
-
}, [footerComponent, colors.border]);
|
|
95
|
+
}, [footerComponent, colors.border, styles]);
|
|
95
96
|
|
|
96
97
|
// Memoize content rendering
|
|
97
98
|
const renderContent = useCallback(() => {
|
|
@@ -114,7 +115,7 @@ export const AboutScreen: React.FC<AboutScreenProps> = ({
|
|
|
114
115
|
{ backgroundColor: colors.backgroundPrimary },
|
|
115
116
|
containerStyle
|
|
116
117
|
];
|
|
117
|
-
}, [containerStyle, colors.backgroundPrimary]);
|
|
118
|
+
}, [containerStyle, colors.backgroundPrimary, styles]);
|
|
118
119
|
|
|
119
120
|
const texts = config.texts || {};
|
|
120
121
|
|
|
@@ -164,7 +165,7 @@ export const AboutScreen: React.FC<AboutScreenProps> = ({
|
|
|
164
165
|
<ScrollView
|
|
165
166
|
style={containerStyles}
|
|
166
167
|
testID={testID}
|
|
167
|
-
contentContainerStyle={{ paddingBottom: 32 }}
|
|
168
|
+
contentContainerStyle={{ paddingBottom: 32 * tokens.spacingMultiplier }}
|
|
168
169
|
>
|
|
169
170
|
{renderHeader()}
|
|
170
171
|
{renderContent()}
|
|
@@ -173,23 +174,23 @@ export const AboutScreen: React.FC<AboutScreenProps> = ({
|
|
|
173
174
|
);
|
|
174
175
|
};
|
|
175
176
|
|
|
176
|
-
const
|
|
177
|
+
const getStyles = (tokens: any) => StyleSheet.create({
|
|
177
178
|
container: {
|
|
178
179
|
flex: 1,
|
|
179
180
|
},
|
|
180
181
|
footer: {
|
|
181
|
-
paddingVertical: 16,
|
|
182
|
-
paddingHorizontal: 16,
|
|
182
|
+
paddingVertical: 16 * tokens.spacingMultiplier,
|
|
183
|
+
paddingHorizontal: 16 * tokens.spacingMultiplier,
|
|
183
184
|
borderTopWidth: 1,
|
|
184
185
|
},
|
|
185
186
|
loadingText: {
|
|
186
187
|
textAlign: 'center',
|
|
187
|
-
fontSize:
|
|
188
|
-
marginTop: 20,
|
|
188
|
+
fontSize: tokens.typography.bodyMedium.responsiveFontSize,
|
|
189
|
+
marginTop: 20 * tokens.spacingMultiplier,
|
|
189
190
|
},
|
|
190
191
|
errorText: {
|
|
191
192
|
textAlign: 'center',
|
|
192
|
-
fontSize:
|
|
193
|
-
marginTop: 20,
|
|
193
|
+
fontSize: tokens.typography.bodyMedium.responsiveFontSize,
|
|
194
|
+
marginTop: 20 * tokens.spacingMultiplier,
|
|
194
195
|
},
|
|
195
196
|
});
|
|
@@ -59,9 +59,9 @@ export const AppearanceHeader: React.FC<AppearanceHeaderProps> = ({
|
|
|
59
59
|
const getStyles = (tokens: DesignTokens) =>
|
|
60
60
|
StyleSheet.create({
|
|
61
61
|
header: {
|
|
62
|
-
marginBottom: tokens.spacing.lg,
|
|
62
|
+
marginBottom: tokens.spacing.lg * tokens.spacingMultiplier,
|
|
63
63
|
},
|
|
64
64
|
headerSubtitle: {
|
|
65
|
-
marginTop: tokens.spacing.sm,
|
|
65
|
+
marginTop: tokens.spacing.sm * tokens.spacingMultiplier,
|
|
66
66
|
},
|
|
67
67
|
});
|
|
@@ -106,35 +106,35 @@ export const AppearancePreview: React.FC<AppearancePreviewProps> = ({
|
|
|
106
106
|
const getStyles = (tokens: DesignTokens) =>
|
|
107
107
|
StyleSheet.create({
|
|
108
108
|
previewSection: {
|
|
109
|
-
marginBottom: tokens.spacing.lg,
|
|
109
|
+
marginBottom: tokens.spacing.lg * tokens.spacingMultiplier,
|
|
110
110
|
},
|
|
111
111
|
sectionTitle: {
|
|
112
|
-
marginBottom: tokens.spacing.xs,
|
|
112
|
+
marginBottom: tokens.spacing.xs * tokens.spacingMultiplier,
|
|
113
113
|
},
|
|
114
114
|
sectionDescription: {
|
|
115
|
-
marginBottom: tokens.spacing.md,
|
|
115
|
+
marginBottom: tokens.spacing.md * tokens.spacingMultiplier,
|
|
116
116
|
},
|
|
117
117
|
previewContainer: {
|
|
118
118
|
backgroundColor: tokens.colors.surface,
|
|
119
|
-
borderRadius: 12,
|
|
120
|
-
padding: tokens.spacing.md,
|
|
119
|
+
borderRadius: 12 * tokens.spacingMultiplier,
|
|
120
|
+
padding: tokens.spacing.md * tokens.spacingMultiplier,
|
|
121
121
|
borderLeftWidth: 4,
|
|
122
122
|
borderLeftColor: tokens.colors.primary,
|
|
123
123
|
},
|
|
124
124
|
previewColorRow: {
|
|
125
125
|
flexDirection: "row",
|
|
126
126
|
flexWrap: "wrap",
|
|
127
|
-
gap: tokens.spacing.md,
|
|
128
|
-
marginTop: tokens.spacing.sm,
|
|
127
|
+
gap: tokens.spacing.md * tokens.spacingMultiplier,
|
|
128
|
+
marginTop: tokens.spacing.sm * tokens.spacingMultiplier,
|
|
129
129
|
},
|
|
130
130
|
previewColorItem: {
|
|
131
131
|
alignItems: "center",
|
|
132
132
|
},
|
|
133
133
|
previewColorCircle: {
|
|
134
|
-
width: 32,
|
|
135
|
-
height: 32,
|
|
136
|
-
borderRadius: 16,
|
|
137
|
-
marginBottom: tokens.spacing.xs,
|
|
134
|
+
width: 32 * tokens.spacingMultiplier,
|
|
135
|
+
height: 32 * tokens.spacingMultiplier,
|
|
136
|
+
borderRadius: 16 * tokens.spacingMultiplier,
|
|
137
|
+
marginBottom: tokens.spacing.xs * tokens.spacingMultiplier,
|
|
138
138
|
borderWidth: 1,
|
|
139
139
|
borderColor: tokens.colors.border,
|
|
140
140
|
},
|
|
@@ -10,7 +10,7 @@ import { View, TouchableOpacity, StyleSheet } from "react-native";
|
|
|
10
10
|
import {
|
|
11
11
|
AtomicIcon,
|
|
12
12
|
AtomicText,
|
|
13
|
-
|
|
13
|
+
useAppDesignTokens,
|
|
14
14
|
} from "@umituz/react-native-design-system";
|
|
15
15
|
|
|
16
16
|
interface ColorPickerProps {
|
|
@@ -26,7 +26,7 @@ export const ColorPicker: React.FC<ColorPickerProps> = ({
|
|
|
26
26
|
onValueChange,
|
|
27
27
|
colors,
|
|
28
28
|
}) => {
|
|
29
|
-
const tokens =
|
|
29
|
+
const tokens = useAppDesignTokens();
|
|
30
30
|
|
|
31
31
|
// Memoize styles to prevent unnecessary re-creation
|
|
32
32
|
const styles = useMemo(() => getStyles(tokens), [tokens]);
|
|
@@ -84,7 +84,7 @@ export const ColorPicker: React.FC<ColorPickerProps> = ({
|
|
|
84
84
|
);
|
|
85
85
|
};
|
|
86
86
|
|
|
87
|
-
const getStyles = (tokens: ReturnType<typeof
|
|
87
|
+
const getStyles = (tokens: ReturnType<typeof useAppDesignTokens>) =>
|
|
88
88
|
StyleSheet.create({
|
|
89
89
|
container: {
|
|
90
90
|
marginBottom: 16,
|
|
@@ -166,21 +166,21 @@ export const CustomColorsSection: React.FC<CustomColorsSectionProps> = ({
|
|
|
166
166
|
const getStyles = (tokens: DesignTokens) =>
|
|
167
167
|
StyleSheet.create({
|
|
168
168
|
section: {
|
|
169
|
-
marginBottom: tokens.spacing.xl,
|
|
169
|
+
marginBottom: tokens.spacing.xl * tokens.spacingMultiplier,
|
|
170
170
|
},
|
|
171
171
|
sectionHeader: {
|
|
172
172
|
flexDirection: "row",
|
|
173
173
|
justifyContent: "space-between",
|
|
174
174
|
alignItems: "flex-start",
|
|
175
|
-
marginBottom: tokens.spacing.md,
|
|
175
|
+
marginBottom: tokens.spacing.md * tokens.spacingMultiplier,
|
|
176
176
|
},
|
|
177
177
|
titleContainer: {
|
|
178
178
|
flex: 1,
|
|
179
179
|
},
|
|
180
180
|
sectionTitle: {
|
|
181
|
-
marginBottom: tokens.spacing.xs,
|
|
181
|
+
marginBottom: tokens.spacing.xs * tokens.spacingMultiplier,
|
|
182
182
|
},
|
|
183
183
|
sectionDescription: {
|
|
184
|
-
marginBottom: tokens.spacing.md,
|
|
184
|
+
marginBottom: tokens.spacing.md * tokens.spacingMultiplier,
|
|
185
185
|
},
|
|
186
186
|
});
|
|
@@ -99,12 +99,12 @@ export const ThemeModeSection: React.FC<ThemeModeSectionProps> = ({
|
|
|
99
99
|
const getStyles = (tokens: DesignTokens) =>
|
|
100
100
|
StyleSheet.create({
|
|
101
101
|
section: {
|
|
102
|
-
marginBottom: tokens.spacing.xl,
|
|
102
|
+
marginBottom: tokens.spacing.xl * tokens.spacingMultiplier,
|
|
103
103
|
},
|
|
104
104
|
sectionTitle: {
|
|
105
|
-
marginBottom: tokens.spacing.xs,
|
|
105
|
+
marginBottom: tokens.spacing.xs * tokens.spacingMultiplier,
|
|
106
106
|
},
|
|
107
107
|
sectionDescription: {
|
|
108
|
-
marginBottom: tokens.spacing.md,
|
|
108
|
+
marginBottom: tokens.spacing.md * tokens.spacingMultiplier,
|
|
109
109
|
},
|
|
110
110
|
});
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import React from "react";
|
|
9
9
|
import { View, TouchableOpacity, StyleSheet } from "react-native";
|
|
10
10
|
import { AtomicText, AtomicIcon } from "@umituz/react-native-design-system";
|
|
11
|
-
import {
|
|
11
|
+
import { useAppDesignTokens } from "@umituz/react-native-design-system";
|
|
12
12
|
import type { ThemeMode } from "../../types";
|
|
13
13
|
|
|
14
14
|
interface ThemeOptionProps {
|
|
@@ -30,7 +30,7 @@ export const ThemeOption: React.FC<ThemeOptionProps> = ({
|
|
|
30
30
|
isSelected,
|
|
31
31
|
onSelect,
|
|
32
32
|
}) => {
|
|
33
|
-
const tokens =
|
|
33
|
+
const tokens = useAppDesignTokens();
|
|
34
34
|
const styles = getStyles(tokens);
|
|
35
35
|
const iconName = mode === "dark" ? "moon-outline" : mode === "light" ? "sunny-outline" : "desktop-outline";
|
|
36
36
|
|
|
@@ -41,7 +41,7 @@ export const ThemeOption: React.FC<ThemeOptionProps> = ({
|
|
|
41
41
|
>
|
|
42
42
|
<View style={styles.header}>
|
|
43
43
|
<View style={styles.iconContainer}>
|
|
44
|
-
<AtomicIcon name={iconName} customSize={24} customColor={tokens.colors.primary} />
|
|
44
|
+
<AtomicIcon name={iconName} customSize={24 * tokens.spacingMultiplier} customColor={tokens.colors.primary} />
|
|
45
45
|
</View>
|
|
46
46
|
<View style={styles.textContainer}>
|
|
47
47
|
<AtomicText type="titleLarge" color="primary">
|
|
@@ -53,7 +53,7 @@ export const ThemeOption: React.FC<ThemeOptionProps> = ({
|
|
|
53
53
|
</View>
|
|
54
54
|
<AtomicIcon
|
|
55
55
|
name={isSelected ? "checkmark-circle-outline" : "ellipse-outline"}
|
|
56
|
-
customSize={24}
|
|
56
|
+
customSize={24 * tokens.spacingMultiplier}
|
|
57
57
|
customColor={isSelected ? tokens.colors.primary : tokens.colors.secondary}
|
|
58
58
|
/>
|
|
59
59
|
</View>
|
|
@@ -89,13 +89,13 @@ export const ThemeOption: React.FC<ThemeOptionProps> = ({
|
|
|
89
89
|
);
|
|
90
90
|
};
|
|
91
91
|
|
|
92
|
-
const getStyles = (tokens: ReturnType<typeof
|
|
92
|
+
const getStyles = (tokens: ReturnType<typeof useAppDesignTokens>) =>
|
|
93
93
|
StyleSheet.create({
|
|
94
94
|
container: {
|
|
95
95
|
backgroundColor: tokens.colors.surface,
|
|
96
|
-
borderRadius: 12,
|
|
97
|
-
padding: 16,
|
|
98
|
-
marginBottom: 16,
|
|
96
|
+
borderRadius: 12 * tokens.spacingMultiplier,
|
|
97
|
+
padding: 16 * tokens.spacingMultiplier,
|
|
98
|
+
marginBottom: 16 * tokens.spacingMultiplier,
|
|
99
99
|
borderWidth: 2,
|
|
100
100
|
borderColor: tokens.colors.border,
|
|
101
101
|
},
|
|
@@ -105,34 +105,34 @@ const getStyles = (tokens: ReturnType<typeof useResponsiveDesignTokens>) =>
|
|
|
105
105
|
header: {
|
|
106
106
|
flexDirection: "row",
|
|
107
107
|
alignItems: "center",
|
|
108
|
-
marginBottom: 12,
|
|
108
|
+
marginBottom: 12 * tokens.spacingMultiplier,
|
|
109
109
|
},
|
|
110
110
|
iconContainer: {
|
|
111
|
-
width: 48,
|
|
112
|
-
height: 48,
|
|
113
|
-
borderRadius: 24,
|
|
111
|
+
width: 48 * tokens.spacingMultiplier,
|
|
112
|
+
height: 48 * tokens.spacingMultiplier,
|
|
113
|
+
borderRadius: 24 * tokens.spacingMultiplier,
|
|
114
114
|
backgroundColor: `${tokens.colors.primary}15`,
|
|
115
115
|
justifyContent: "center",
|
|
116
116
|
alignItems: "center",
|
|
117
|
-
marginRight: 12,
|
|
117
|
+
marginRight: 12 * tokens.spacingMultiplier,
|
|
118
118
|
},
|
|
119
119
|
textContainer: {
|
|
120
120
|
flex: 1,
|
|
121
121
|
},
|
|
122
122
|
description: {
|
|
123
|
-
marginBottom: 12,
|
|
124
|
-
lineHeight: 20,
|
|
123
|
+
marginBottom: 12 * tokens.spacingMultiplier,
|
|
124
|
+
lineHeight: 20 * tokens.spacingMultiplier,
|
|
125
125
|
},
|
|
126
126
|
featuresContainer: {
|
|
127
127
|
backgroundColor: `${tokens.colors.primary}08`,
|
|
128
|
-
borderRadius: 8,
|
|
129
|
-
padding: 12,
|
|
128
|
+
borderRadius: 8 * tokens.spacingMultiplier,
|
|
129
|
+
padding: 12 * tokens.spacingMultiplier,
|
|
130
130
|
},
|
|
131
131
|
featuresTitle: {
|
|
132
|
-
marginBottom: 8,
|
|
132
|
+
marginBottom: 8 * tokens.spacingMultiplier,
|
|
133
133
|
},
|
|
134
134
|
feature: {
|
|
135
|
-
marginBottom: 4,
|
|
136
|
-
lineHeight: 18,
|
|
135
|
+
marginBottom: 4 * tokens.spacingMultiplier,
|
|
136
|
+
lineHeight: 18 * tokens.spacingMultiplier,
|
|
137
137
|
},
|
|
138
138
|
});
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
import React, { useMemo, useCallback } from "react";
|
|
9
9
|
import { ScrollView, StyleSheet, View } from "react-native";
|
|
10
|
-
import {
|
|
10
|
+
import { useAppDesignTokens } from "@umituz/react-native-design-system";
|
|
11
11
|
import { useAppearance, useAppearanceActions } from "../../hooks";
|
|
12
12
|
import {
|
|
13
13
|
AppearanceHeader,
|
|
@@ -63,7 +63,7 @@ export const AppearanceScreen: React.FC<AppearanceScreenProps> = ({
|
|
|
63
63
|
containerStyle,
|
|
64
64
|
contentContainerStyle,
|
|
65
65
|
}) => {
|
|
66
|
-
const tokens =
|
|
66
|
+
const tokens = useAppDesignTokens();
|
|
67
67
|
const { themeMode } = useAppearance();
|
|
68
68
|
const {
|
|
69
69
|
localCustomColors,
|
|
@@ -211,7 +211,7 @@ export const AppearanceScreen: React.FC<AppearanceScreenProps> = ({
|
|
|
211
211
|
);
|
|
212
212
|
};
|
|
213
213
|
|
|
214
|
-
const getStyles = (tokens: ReturnType<typeof
|
|
214
|
+
const getStyles = (tokens: ReturnType<typeof useAppDesignTokens>) =>
|
|
215
215
|
StyleSheet.create({
|
|
216
216
|
container: {
|
|
217
217
|
flex: 1,
|
|
@@ -221,7 +221,7 @@ const getStyles = (tokens: ReturnType<typeof useResponsiveDesignTokens>) =>
|
|
|
221
221
|
flex: 1,
|
|
222
222
|
},
|
|
223
223
|
scrollContent: {
|
|
224
|
-
padding: tokens.spacing.md,
|
|
225
|
-
paddingBottom: tokens.spacing.xl,
|
|
224
|
+
padding: tokens.spacing.md * tokens.spacingMultiplier,
|
|
225
|
+
paddingBottom: tokens.spacing.xl * tokens.spacingMultiplier,
|
|
226
226
|
},
|
|
227
227
|
});
|