frontend: phase two of changes regarding text
Parents:
252758f54 file(s) changed
- frontend/app/(tabs)/history.tsx +1 -1
- frontend/app/(tabs)/new/entry.tsx +1 -0
- frontend/app/(tabs)/new/post-mood.tsx +1 -1
- frontend/app/(tabs)/settings.tsx +1 -1
- frontend/app/auth/activate.tsx +1 -1
- frontend/app/auth/forgot-password.tsx +1 -1
- frontend/app/auth/login.tsx +1 -1
- frontend/app/auth/reset-password.tsx +1 -1
- frontend/app/auth/signup.tsx +1 -1
- frontend/app/care-actions/[id].tsx +3 -2
- frontend/app/care-actions/activity.tsx +1 -1
- frontend/app/care-actions/appointment.tsx +1 -1
- frontend/app/care-actions/medicine-new.tsx +1 -1
- frontend/app/care-actions/medicine.tsx +1 -1
- frontend/app/care-actions/new.tsx +1 -1
- frontend/app/care-actions/post-appointment.tsx +2 -1
- frontend/app/entry/[id].tsx +2 -2
- frontend/app/entry/mood-components.tsx +2 -1
- frontend/app/medicine-regimens/[id].tsx +1 -1
- frontend/app/notifications.tsx +1 -1
- frontend/app/report.tsx +1 -1
- frontend/app/sleep/[id].tsx +2 -2
- frontend/app/sleep/edit/[id].tsx +1 -1
- frontend/app/sleep/index.tsx +0 -1
- frontend/app/sleep/new.tsx +1 -1
- frontend/app/triggers/[id].tsx +3 -2
- frontend/app/triggers/edit/[id].tsx +1 -1
- frontend/app/triggers/new.tsx +1 -1
- frontend/components/history/ActivityHistoryCard.tsx +2 -1
- frontend/components/history/AppointmentHistoryCard.tsx +3 -2
- frontend/components/history/MedicineHistoryCard.tsx +2 -1
- frontend/components/history/TriggerCard.tsx +2 -1
- frontend/components/insights/InsightCard.tsx +2 -1
- frontend/components/insights/MoodTrendWidget.tsx +2 -1
- frontend/components/insights/TriggerPatternWidget.tsx +2 -1
- frontend/components/insights/WeeklyResume.tsx +2 -1
- frontend/components/medicine/MedicineRegimenList.tsx +10 -9
- frontend/components/medicine/TodayMedicines.tsx +5 -1
- frontend/components/misc/NoLinkMessage.tsx +2 -1
- frontend/components/ui/AvatarUpload.tsx +1 -1
- frontend/components/ui/Badge.tsx +2 -2
- frontend/components/ui/Button.tsx +15 -1
- frontend/components/ui/CategoryChips.tsx +1 -1
- frontend/components/ui/DailyEnergyWidget.tsx +2 -1
- frontend/components/ui/DailySleepWidget.tsx +2 -1
- frontend/components/ui/DatePickerField.tsx +2 -1
- frontend/components/ui/EmojiSelectors.tsx +1 -1
- frontend/components/ui/EmptyState.tsx +2 -1
- frontend/components/ui/FilterPills.tsx +1 -1
- frontend/components/ui/Input.tsx +1 -1
- frontend/components/ui/LinkRow.tsx +2 -1
- frontend/components/ui/MoodTrendWidget.tsx +2 -1
- frontend/components/ui/ScaleSlider.tsx +1 -1
- frontend/components/ui/TimePicker.tsx +2 -1
frontend/app/(tabs)/history.tsx
1 1
import { useState } from "react";
2 -
import { ScrollView, View, Text } from "react-native";
2 +
import { ScrollView, View } from "react-native";
3 3
import { ScreenLayout } from "@/components/ui/ScreenLayout";
4 4
import { Section, SectionHeader } from "@/components/ui/Sections";
5 5
import { FilterPills } from "@/components/ui/FilterPills";
6 6
import { useAuth } from "@/context/AuthContext";
7 7
import { useHistoryFeed } from "@/hooks/useHistoryFeed";
▸ 64 unchanged lines
72 72
)}
73 73
</ScrollView>
74 74
</ScreenLayout>
75 75
);
76 76
}
frontend/app/(tabs)/new/entry.tsx
1 1
import { useState, useEffect } from "react";
2 2
import { Link, router, useLocalSearchParams } from "expo-router";
3 3
4 4
import { View, StyleSheet, ScrollView } from "react-native";
5 5
▸ 192 unchanged lines
198 198
marginBottom: 20,
199 199
fontWeight: "400" as const,
200 200
},
201 201
statusText: {
202 202
...Typography.headlineXg,
203 +
fontWeight: 900
203 204
},
204 205
statusPrefix: {
205 206
...Typography.bodyMd,
206 207
},
207 208
annotationsCard: {
▸ 1 unchanged lines
209 210
},
210 211
resumeCard: {
211 212
padding: Spacing.cardGap,
212 213
},
213 214
});
frontend/app/(tabs)/new/post-mood.tsx
1 1
import { useState } from "react";
2 2
import {
3 3
View,
4 -
Text,
5 4
StyleSheet,
6 5
TouchableOpacity,
7 6
Pressable,
8 7
ActivityIndicator,
9 8
} from "react-native";
9 +
import { Text } from '@/components/ui/Text';
10 10
import { router, useLocalSearchParams, Link } from "expo-router";
11 11
import { Ionicons, MaterialIcons } from "@expo/vector-icons";
12 12
13 13
import { ScreenLayout } from "@/components/ui/ScreenLayout";
14 14
import { Card } from "@/components/ui/Cards";
▸ 354 unchanged lines
369 369
},
370 370
concludeButton: {
371 371
marginTop: 8,
372 372
},
373 373
});
frontend/app/(tabs)/settings.tsx
1 1
import {
2 2
TouchableOpacity,
3 3
StyleSheet,
4 -
Text,
5 4
SectionList,
6 5
View,
7 6
Alert,
8 7
Switch,
9 8
Pressable,
10 9
} from "react-native";
10 +
import { Text } from '@/components/ui/Text';
11 11
import { useState } from "react";
12 12
import { router } from "expo-router";
13 13
import { Card } from "@/components/ui/Cards";
14 14
import ScreenLayout from "@/components/ui/ScreenLayout";
15 15
import { BorderRadius, Colors, Fonts, Spacing } from "@/constants/theme";
▸ 343 unchanged lines
359 359
height: StyleSheet.hairlineWidth,
360 360
backgroundColor: "#D1D5DB",
361 361
marginVertical: 16,
362 362
},
363 363
});
frontend/app/auth/activate.tsx
1 1
import React, { useState } from 'react';
2 2
import {
3 3
View,
4 -
Text,
5 4
StyleSheet,
6 5
ScrollView,
7 6
KeyboardAvoidingView,
8 7
} from 'react-native';
8 +
import { Text } from '@/components/ui/Text';
9 9
import { Link, useLocalSearchParams, router } from 'expo-router';
10 10
import { SafeAreaView } from 'react-native-safe-area-context';
11 11
import { useThemeColor } from '@/hooks/use-theme-color';
12 12
import { Button, Input } from '@/components/ui';
13 13
import { Colors } from '@/constants/theme'
▸ 143 unchanged lines
157 157
footerText: {
158 158
textAlign: 'center',
159 159
marginBottom: 10
160 160
}
161 161
});
frontend/app/auth/forgot-password.tsx
1 1
import React, { useState } from 'react';
2 2
import {
3 3
View,
4 -
Text,
5 4
StyleSheet,
6 5
ScrollView,
7 6
KeyboardAvoidingView,
8 7
} from 'react-native';
8 +
import { Text } from '@/components/ui/Text';
9 9
import { Link, router } from 'expo-router';
10 10
import { SafeAreaView } from 'react-native-safe-area-context';
11 11
import { useThemeColor } from '@/hooks/use-theme-color';
12 12
import { Button, Input } from '@/components/ui';
13 13
import { useAuth } from '@/context/AuthContext';
▸ 234 unchanged lines
248 248
},
249 249
footerText: {
250 250
fontSize: 14,
251 251
},
252 252
});
frontend/app/auth/login.tsx
1 1
import React, { useState, useEffect, useRef } from "react";
2 2
import {
3 3
View,
4 -
Text,
5 4
StyleSheet,
6 5
ScrollView,
7 6
KeyboardAvoidingView,
8 7
Animated,
9 8
Easing
10 9
} from "react-native";
10 +
import { Text } from "@/components/ui/Text";
11 11
import { Link, router } from "expo-router";
12 12
import { Image } from "react-native";
13 13
import { SafeAreaView } from "react-native-safe-area-context";
14 14
import { StatusBar } from "expo-status-bar";
15 15
import { useThemeColor } from "@/hooks/use-theme-color";
▸ 243 unchanged lines
259 259
},
260 260
footerText: {
261 261
fontSize: 14,
262 262
},
263 263
});
frontend/app/auth/reset-password.tsx
1 1
import React, { useState } from 'react';
2 2
import {
3 3
View,
4 -
Text,
5 4
StyleSheet,
6 5
ScrollView,
7 6
KeyboardAvoidingView,
8 7
} from 'react-native';
8 +
import { Text } from '@/components/ui/Text';
9 9
import { Link, useLocalSearchParams, router } from 'expo-router';
10 10
import { SafeAreaView } from 'react-native-safe-area-context';
11 11
import { useThemeColor } from '@/hooks/use-theme-color';
12 12
import { Button, Input } from '@/components/ui';
13 13
import { useAuth } from '@/context/AuthContext';
▸ 163 unchanged lines
177 177
},
178 178
footerText: {
179 179
fontSize: 14,
180 180
},
181 181
});
frontend/app/auth/signup.tsx
1 1
import React, { useState } from 'react';
2 2
import {
3 3
View,
4 -
Text,
5 4
StyleSheet,
6 5
ScrollView,
7 6
KeyboardAvoidingView,
8 7
} from 'react-native';
8 +
import { Text } from '@/components/ui/Text';
9 9
import { Link, router } from 'expo-router';
10 10
import { SafeAreaView } from 'react-native-safe-area-context';
11 11
import { useThemeColor } from '@/hooks/use-theme-color';
12 12
import { Button, Input } from '@/components/ui';
13 13
import { useAuth } from '@/context/AuthContext';
▸ 201 unchanged lines
215 215
},
216 216
footerText: {
217 217
fontSize: 14,
218 218
},
219 219
});
frontend/app/care-actions/[id].tsx
1 1
import { useState, useEffect } from "react";
2 2
import {
3 3
StyleSheet,
4 -
Text,
5 4
View,
6 5
ScrollView,
7 6
Pressable,
8 7
ActivityIndicator,
9 8
} from "react-native";
9 +
import { Text } from "@/components/ui/Text";
10 10
import { useLocalSearchParams, router, Stack } from "expo-router";
11 11
import { MaterialIcons, Ionicons } from "@expo/vector-icons";
12 12
import { Card, SubtleInfoCard } from "@/components/ui/Cards";
13 13
import { Button } from "@/components/ui/Button";
14 14
import { Col, Row } from "@/components/ui/LayoutHelpers";
▸ 165 unchanged lines
180 180
const header = resolveHeader(careAction);
181 181
182 182
// TODO: Componentize this as well? It's on each of the details screens
183 183
const deleteButtonMsg = () => {
184 184
const suffix = canDelete
185 -
? `(Disponível por ${minutesLeft < 1 ? "<1" : minutesLeft}:00)`
185 +
? `(Disp. por ${minutesLeft < 1 ? "<1" : minutesLeft}:00)`
186 186
: "(Expirado)";
187 187
return `Excluir Registro ${suffix}`;
188 188
};
189 189
190 190
const handleDelete = async () => {
▸ 259 unchanged lines
450 450
justifyContent: "center",
451 451
marginTop: 1,
452 452
},
453 453
title: {
454 454
...Typography.headlineLg,
455 +
fontWeight: 700,
455 456
color: Colors.light.text,
456 457
},
457 458
subtitle: {
458 459
fontSize: 13,
459 460
color: Colors.light.textSecondary,
▸ 77 unchanged lines
537 538
color: Colors.light.textSecondary,
538 539
fontStyle: "italic",
539 540
padding: 4,
540 541
},
541 542
});
frontend/app/care-actions/activity.tsx
1 1
import {
2 2
View,
3 -
Text,
4 3
StyleSheet,
5 4
KeyboardAvoidingView,
6 5
ScrollView,
7 6
} from "react-native";
7 +
import { Text } from "@/components/ui/Text";
8 8
import { useState } from "react";
9 9
import { router } from "expo-router";
10 10
11 11
import { Card } from "@/components/ui/Cards";
12 12
import { Input } from "@/components/ui/Input";
▸ 98 unchanged lines
111 111
headerSubtitle: {
112 112
...Typography.bodyMd,
113 113
color: Colors.light.textSecondary,
114 114
},
115 115
});
frontend/app/care-actions/appointment.tsx
1 1
import {
2 2
View,
3 -
Text,
4 3
StyleSheet,
5 4
KeyboardAvoidingView,
6 5
ScrollView,
7 6
TouchableOpacity,
8 7
} from "react-native";
8 +
import { Text } from "@/components/ui/Text";
9 9
import { useState } from "react";
10 10
import { router } from "expo-router";
11 11
12 12
import { Card } from "@/components/ui/Cards";
13 13
import { TextArea } from "@/components/ui/Input";
▸ 155 unchanged lines
169 169
},
170 170
durationLabelActive: {
171 171
color: Colors.light.text,
172 172
},
173 173
});
frontend/app/care-actions/medicine-new.tsx
1 1
import {
2 2
View,
3 -
Text,
4 3
StyleSheet,
5 4
KeyboardAvoidingView,
6 5
ScrollView,
7 6
TouchableOpacity,
8 7
} from "react-native";
8 +
import { Text } from "@/components/ui/Text";
9 9
import { useState } from "react";
10 10
import { router } from "expo-router";
11 11
12 12
import { Card } from "@/components/ui/Cards";
13 13
import { Input } from "@/components/ui/Input";
▸ 185 unchanged lines
199 199
periodicityChipLabelActive: {
200 200
fontWeight: '600',
201 201
color: Colors.light.text,
202 202
},
203 203
});
frontend/app/care-actions/medicine.tsx
1 1
import {
2 2
View,
3 -
Text,
4 3
StyleSheet,
5 4
KeyboardAvoidingView,
6 5
ScrollView,
7 6
TouchableOpacity,
8 7
} from "react-native";
8 +
import { Text } from "@/components/ui/Text";
9 9
import { router } from "expo-router";
10 10
11 11
import { Button } from "@/components/ui/Button";
12 12
import { Section, SectionHeader } from "@/components/ui/Sections";
13 13
import { Spacing, Typography, Colors, BorderRadius, Shadows } from "@/constants/theme";
▸ 111 unchanged lines
125 125
regimenChipDosage: {
126 126
...Typography.labelSm,
127 127
color: Colors.light.textSecondary,
128 128
},
129 129
});
frontend/app/care-actions/new.tsx
1 1
import {
2 2
View,
3 -
Text,
4 3
StyleSheet,
5 4
KeyboardAvoidingView,
6 5
ScrollView,
7 6
TouchableOpacity,
8 7
} from "react-native";
8 +
import { Text } from "@/components/ui/Text";
9 9
import { router } from "expo-router";
10 10
11 11
import { Spacing, Typography, Colors, BorderRadius, Shadows } from "@/constants/theme";
12 12
import { Ionicons } from "@expo/vector-icons";
13 13
▸ 107 unchanged lines
121 121
typeDesc: {
122 122
...Typography.labelSm,
123 123
color: Colors.light.textSecondary,
124 124
},
125 125
});
frontend/app/care-actions/post-appointment.tsx
1 -
import { View, Text, StyleSheet, TouchableOpacity, ScrollView } from "react-native";
1 +
import { View, StyleSheet, TouchableOpacity, ScrollView } from "react-native";
2 +
import { Text } from "@/components/ui/Text";
2 3
import { router } from "expo-router";
3 4
import { Ionicons } from "@expo/vector-icons";
4 5
import { SafeAreaView } from "react-native-safe-area-context";
5 6
6 7
import { Button } from "@/components/ui/Button";
▸ 177 unchanged lines
184 185
},
185 186
concludeButton: {
186 187
marginTop: 8,
187 188
},
188 189
});
frontend/app/entry/[id].tsx
1 1
import { useState, useEffect, use } from "react";
2 2
import {
3 3
StyleSheet,
4 -
Text,
5 4
View,
6 5
ScrollView,
7 6
Pressable,
8 7
ActivityIndicator,
9 8
} from "react-native";
9 +
import { Text } from "@/components/ui/Text";
10 10
import { useLocalSearchParams, router, Stack } from "expo-router";
11 11
import { format } from "date-fns";
12 12
import { ptBR } from "date-fns/locale";
13 13
14 14
import { Card, SubtleInfoCard } from "@/components/ui/Cards";
▸ 84 unchanged lines
99 99
router.back();
100 100
};
101 101
102 102
const deleteButtonMsg = () => {
103 103
const msg = "Excluir Registro";
104 -
const timeLeftStr = `(Disponível por ${minutesLeft < 1 ? "<1" : minutesLeft}:00)`;
104 +
const timeLeftStr = `(Disp. por ${minutesLeft < 1 ? "<1" : minutesLeft}:00)`;
105 105
const suffix = canDelete ? timeLeftStr : "(Expirado)";
106 106
107 107
return `${msg} ${suffix}`;
108 108
};
109 109
▸ 334 unchanged lines
444 444
height: "100%",
445 445
borderRadius: 99,
446 446
},
447 447
448 448
});
frontend/app/entry/mood-components.tsx
1 1
import React from "react";
2 -
import { View, Text, ScrollView, Pressable, StyleSheet } from "react-native";
2 +
import { View, ScrollView, Pressable, StyleSheet } from "react-native";
3 +
import { Text } from "@/components/ui/Text";
3 4
import { router } from "expo-router";
4 5
import { Ionicons } from "@expo/vector-icons";
5 6
6 7
import { ScaleSlider } from "@/components/ui/ScaleSlider";
7 8
import { Row, Grid } from "@/components/ui/LayoutHelpers";
▸ 232 unchanged lines
240 241
fontSize: Theme.typography.bodyMd.fontSize,
241 242
fontWeight: "500",
242 243
color: Theme.colors.light.text,
243 244
},
244 245
});
frontend/app/medicine-regimens/[id].tsx
1 1
import {
2 2
View,
3 -
Text,
4 3
StyleSheet,
5 4
KeyboardAvoidingView,
6 5
ScrollView,
7 6
TouchableOpacity,
8 7
ActivityIndicator,
9 8
} from "react-native";
9 +
import { Text } from "@/components/ui/Text";
10 10
import { useEffect, useState } from "react";
11 11
import { router, useLocalSearchParams } from "expo-router";
12 12
import { Card } from "@/components/ui/Cards";
13 13
import { Input } from "@/components/ui/Input";
14 14
import { Button } from "@/components/ui/Button";
▸ 215 unchanged lines
230 230
periodicityChipLabelActive: {
231 231
fontWeight: "600",
232 232
color: Colors.light.text,
233 233
},
234 234
});
frontend/app/notifications.tsx
1 1
import {
2 2
View,
3 -
Text,
4 3
StyleSheet,
5 4
ScrollView,
6 5
KeyboardAvoidingView,
7 6
Platform,
8 7
Alert,
9 8
} from "react-native";
9 +
import { Text } from "@/components/ui/Text";
10 10
11 11
import { useState, useEffect } from "react";
12 12
import * as Notifications from "expo-notifications";
13 13
import { useAuth } from "@/context/AuthContext";
14 14
import { useLocalSearchParams } from "expo-router";
▸ 109 unchanged lines
124 124
header: {
125 125
alignItems: "left",
126 126
marginBottom: 40,
127 127
},
128 128
});
frontend/app/report.tsx
1 1
import React, { useState } from 'react'
2 2
import {
3 3
View,
4 -
Text,
5 4
TouchableOpacity,
6 5
StyleSheet,
7 6
ScrollView,
8 7
} from 'react-native'
8 +
import { Text } from '@/components/ui/Text';
9 9
import { Stack } from 'expo-router'
10 10
import { format, subDays, startOfDay, endOfDay } from 'date-fns'
11 11
import { Paths, File } from 'expo-file-system'
12 12
import * as Sharing from 'expo-sharing'
13 13
import { SafeAreaView } from 'react-native-safe-area-context'
▸ 181 unchanged lines
195 195
},
196 196
chipTextActive: {
197 197
color: Colors.light.background,
198 198
},
199 199
})
frontend/app/sleep/[id].tsx
1 1
import { useState, useEffect, use } from "react";
2 2
import {
3 3
StyleSheet,
4 -
Text,
5 4
View,
6 5
ScrollView,
7 6
Pressable,
8 7
ActivityIndicator,
9 8
} from "react-native";
9 +
import { Text } from "@/components/ui/Text";
10 10
import { useLocalSearchParams, router, Stack } from "expo-router";
11 11
import { format } from "date-fns";
12 12
import { ptBR } from "date-fns/locale";
13 13
14 14
import { Card, SubtleInfoCard } from "@/components/ui/Cards";
▸ 68 unchanged lines
83 83
router.back();
84 84
};
85 85
86 86
const deleteButtonMsg = () => {
87 87
const msg = "Excluir Registro";
88 -
const timeLeftStr = `(Disponível por ${minutesLeft < 1 ? "<1" : minutesLeft}:00)`;
88 +
const timeLeftStr = `(Disp. por ${minutesLeft < 1 ? "<1" : minutesLeft}:00)`;
89 89
const suffix = canDelete ? timeLeftStr : "(Expirado)";
90 90
91 91
return `${msg} ${suffix}`;
92 92
};
93 93
▸ 194 unchanged lines
288 288
color: Colors.light.textSecondary,
289 289
fontStyle: "italic",
290 290
padding: 4,
291 291
},
292 292
});
frontend/app/sleep/edit/[id].tsx
1 1
import {
2 2
View,
3 -
Text,
4 3
StyleSheet,
5 4
KeyboardAvoidingView,
6 5
ScrollView,
7 6
} from "react-native";
7 +
import { Text } from "@/components/ui/Text";
8 8
import { useState, useEffect } from "react";
9 9
import { router, useLocalSearchParams, Stack } from "expo-router";
10 10
11 11
import { Card } from "@/components/ui/Cards";
12 12
import { TextArea } from "@/components/ui/Input";
▸ 159 unchanged lines
172 172
flex: 1,
173 173
justifyContent: "center",
174 174
alignItems: "center",
175 175
},
176 176
});
frontend/app/sleep/index.tsx
1 1
import {
2 2
View,
3 -
Text,
4 3
StyleSheet,
5 4
ScrollView
6 5
} from 'react-native';
7 6
8 7
import { Card } from '@/components/ui/Cards';
▸ 17 unchanged lines
26 25
gap: 24,
27 26
paddingHorizontal: Spacing.containerPadding,
28 27
paddingVertical: Spacing.sectionGap,
29 28
}
30 29
})
frontend/app/sleep/new.tsx
1 1
import {
2 2
View,
3 -
Text,
4 3
StyleSheet,
5 4
KeyboardAvoidingView,
6 5
ScrollView,
7 6
} from "react-native";
7 +
import { Text } from "@/components/ui/Text";
8 8
import { useState } from "react";
9 9
import { router } from "expo-router";
10 10
11 11
import { Card } from "@/components/ui/Cards";
12 12
import { TextArea } from "@/components/ui/Input";
▸ 134 unchanged lines
147 147
},
148 148
keyboardView: {
149 149
flex: 1,
150 150
},
151 151
});
frontend/app/triggers/[id].tsx
1 1
import { useState, useEffect, use } from "react";
2 2
import {
3 3
StyleSheet,
4 -
Text,
5 4
View,
6 5
ScrollView,
7 6
Pressable,
8 7
ActivityIndicator,
9 8
} from "react-native";
9 +
import { Text } from "@/components/ui/Text";
10 10
import { useLocalSearchParams, router, Stack } from "expo-router";
11 11
import { format } from "date-fns";
12 12
import { ptBR } from "date-fns/locale";
13 13
14 14
import { Card, SubtleInfoCard } from "@/components/ui/Cards";
▸ 95 unchanged lines
110 110
});
111 111
};
112 112
113 113
const deleteButtonMsg = () => {
114 114
const msg = "Excluir Registro";
115 -
const timeLeftStr = `(Disponível por ${minutesLeft < 1 ? "<1" : minutesLeft}:00)`;
115 +
const timeLeftStr = `(Disp. por ${minutesLeft < 1 ? "<1" : minutesLeft}:00)`;
116 116
const suffix = canDelete ? timeLeftStr : "(Expirado)";
117 117
118 118
return `${msg} ${suffix}`;
119 119
};
120 120
▸ 201 unchanged lines
322 322
alignItems: "center",
323 323
gap: 8,
324 324
},
325 325
triggerLabel: {
326 326
...Typography.headlineLg,
327 +
fontWeight: 700,
327 328
color: Colors.light.text,
328 329
},
329 330
centered: {
330 331
flex: 1,
331 332
justifyContent: "center",
▸ 102 unchanged lines
434 435
impactFill: {
435 436
height: "100%",
436 437
borderRadius: 99,
437 438
},
438 439
});
frontend/app/triggers/edit/[id].tsx
1 1
import {
2 2
View,
3 -
Text,
4 3
StyleSheet,
5 4
KeyboardAvoidingView,
6 5
ScrollView,
7 6
ActivityIndicator,
8 7
} from "react-native";
8 +
import { Text } from "@/components/ui/Text";
9 9
import { useState, useEffect } from "react";
10 10
import { router, useLocalSearchParams, Stack } from "expo-router";
11 11
12 12
import { Card } from "@/components/ui/Cards";
13 13
import { TextArea } from "@/components/ui/Input";
▸ 161 unchanged lines
175 175
flex: 1,
176 176
justifyContent: "center",
177 177
alignItems: "center",
178 178
},
179 179
});
frontend/app/triggers/new.tsx
1 1
import {
2 2
View,
3 -
Text,
4 3
StyleSheet,
5 4
KeyboardAvoidingView,
6 5
ScrollView,
7 6
} from "react-native";
7 +
import { Text } from "@/components/ui/Text";
8 8
import { useState } from "react";
9 9
import { router, useLocalSearchParams } from "expo-router";
10 10
11 11
import { Card } from "@/components/ui/Cards";
12 12
import { TextArea } from "@/components/ui/Input";
▸ 173 unchanged lines
186 186
alignItems: "center",
187 187
justifyContent: "center",
188 188
marginTop: 1,
189 189
},
190 190
});
frontend/components/history/ActivityHistoryCard.tsx
1 -
import { Text, View, StyleSheet } from "react-native";
1 +
import { View, StyleSheet } from "react-native";
2 +
import { Text } from "@/components/ui/Text";
2 3
import { MaterialIcons } from "@expo/vector-icons";
3 4
import { Card } from "@/components/ui/Cards";
4 5
import type { HistoryCard } from "@/lib/history/types";
5 6
import type { CareAction } from "@/lib/api";
6 7
import { Spacing } from "@/constants/theme";
▸ 52 unchanged lines
59 60
},
60 61
title: { fontSize: 15, fontWeight: "600" },
61 62
time: { fontSize: 13, opacity: 0.45 },
62 63
summary: { fontSize: 13, opacity: 0.6, lineHeight: 18 },
63 64
});
frontend/components/history/AppointmentHistoryCard.tsx
1 -
import { Text, View, StyleSheet } from "react-native";
1 +
import { View, StyleSheet } from "react-native";
2 +
import { Text } from "@/components/ui/Text";
2 3
import { MaterialIcons } from "@expo/vector-icons";
3 4
import { Card } from "@/components/ui/Cards";
4 5
import { Badge } from "@/components/ui/Badge";
5 6
import type { HistoryCard } from "@/lib/history/types";
6 7
import type { CareAction } from "@/lib/api";
▸ 57 unchanged lines
64 65
flexDirection: "row",
65 66
justifyContent: "space-between",
66 67
alignItems: "center",
67 68
marginBottom: 2,
68 69
},
69 -
title: { fontSize: 15, fontWeight: "600" },
70 +
title: { fontSize: 15, fontWeight: "400" },
70 71
time: { fontSize: 13, opacity: 0.45 },
71 72
summary: { fontSize: 13, opacity: 0.6, lineHeight: 18, marginBottom: 6 },
72 73
badge: { alignSelf: "flex-start", marginTop: 4 },
73 74
});
frontend/components/history/MedicineHistoryCard.tsx
1 -
import { Text, View, StyleSheet } from "react-native";
1 +
import { View, StyleSheet } from "react-native";
2 +
import { Text } from "@/components/ui/Text";
2 3
import { MaterialIcons } from "@expo/vector-icons";
3 4
import { Card } from "@/components/ui/Cards";
4 5
import type { HistoryCard } from "@/lib/history/types";
5 6
import type { CareAction } from "@/lib/api";
6 7
import { Spacing } from "@/constants/theme";
▸ 51 unchanged lines
58 59
},
59 60
title: { fontSize: 15, fontWeight: "600" },
60 61
time: { fontSize: 13, opacity: 0.45 },
61 62
summary: { fontSize: 13, opacity: 0.6, lineHeight: 18 },
62 63
});
frontend/components/history/TriggerCard.tsx
1 -
import { Text, View, StyleSheet } from "react-native";
1 +
import { View, StyleSheet } from "react-native";
2 +
import { Text } from '@/components/ui/Text';
2 3
import { MaterialIcons } from "@expo/vector-icons";
3 4
import { Card } from "@/components/ui/Cards";
4 5
import { Badge } from "@/components/ui/Badge";
5 6
import { HistoryCard } from "@/lib/history/types";
6 7
import { Trigger } from "@/lib/api";
▸ 60 unchanged lines
67 68
title: { fontSize: 15, fontWeight: "600" },
68 69
time: { fontSize: 13, opacity: 0.45 },
69 70
summary: { fontSize: 13, opacity: 0.6, lineHeight: 18, marginBottom: 6 },
70 71
badge: { alignSelf: "flex-start", marginTop: 4 },
71 72
});
frontend/components/insights/InsightCard.tsx
1 1
import React from "react";
2 -
import { View, Text, StyleSheet } from "react-native";
2 +
import { View, StyleSheet } from "react-native";
3 +
import { Text } from "@/components/ui/Text";
3 4
4 5
import { Card } from "@/components/ui/Cards";
5 6
import { Colors, Spacing, Typography } from "@/constants/theme";
6 7
7 8
export type MetricAccent = "green" | "purple" | "neutral";
▸ 92 unchanged lines
100 101
lineHeight: 15,
101 102
color: Colors.light.textSecondary,
102 103
fontStyle: "italic",
103 104
},
104 105
});
frontend/components/insights/MoodTrendWidget.tsx
1 1
import React from "react";
2 -
import { Text, StyleSheet, ActivityIndicator } from "react-native";
2 +
import { StyleSheet, ActivityIndicator } from "react-native";
3 +
import { Text } from "@/components/ui/Text";
3 4
import { Card } from "@/components/ui/Cards";
4 5
import { useInsight } from "@/hooks/useInsights.queries";
5 6
import { Colors, Spacing, Typography } from "@/constants/theme";
6 7
import { InsightCard } from "./InsightCard";
7 8
▸ 76 unchanged lines
84 85
empty: {
85 86
color: Colors.light.lightSlateGray,
86 87
marginTop: 4,
87 88
},
88 89
});
frontend/components/insights/TriggerPatternWidget.tsx
1 1
import React from "react";
2 -
import { Text, View, StyleSheet, ActivityIndicator } from "react-native";
2 +
import { View, StyleSheet, ActivityIndicator } from "react-native";
3 +
import { Text } from "@/components/ui/Text";
3 4
import { MaterialIcons } from "@expo/vector-icons";
4 5
import { Card } from "@/components/ui/Cards";
5 6
import { useInsight } from "@/hooks/useInsights.queries";
6 7
import { Colors, Spacing } from "@/constants/theme";
7 8
import { getTriggerCategory } from "@/constants/trigger-categories";
▸ 79 unchanged lines
87 88
empty: {
88 89
color: Colors.light.lightSlateGray,
89 90
marginTop: 4,
90 91
},
91 92
});
frontend/components/insights/WeeklyResume.tsx
1 1
import React from "react";
2 -
import { View, Text, StyleSheet } from "react-native";
2 +
import { View, StyleSheet } from "react-native";
3 +
import { Text } from "@/components/ui/Text";
3 4
import { Colors, Typography, Spacing, BorderRadius } from "@/constants/theme";
4 5
5 6
interface WeeklyResumeProps {
6 7
avgMood: string;
7 8
stats: { label: string; value: string }[];
▸ 75 unchanged lines
83 84
...Typography.bodyLg,
84 85
fontSize: 20,
85 86
color: "#ffffff",
86 87
},
87 88
});
frontend/components/medicine/MedicineRegimenList.tsx
1 -
import { View, Text, Switch, TouchableOpacity, StyleSheet, ActivityIndicator } from "react-native";
1 +
import { View, Switch, TouchableOpacity, StyleSheet, ActivityIndicator } from "react-native";
2 +
import { Text } from "@/components/ui/Text";
2 3
import { Ionicons } from "@expo/vector-icons";
3 4
import { router } from "expo-router";
5 +
import { Button } from "@/components/ui/Button";
4 6
import { Colors, Typography, Spacing, BorderRadius, Shadows } from "@/constants/theme";
5 7
import { useMedicineRegimens, useToggleMedicineRegimen } from "@/hooks";
6 8
import { MedicineRegimen } from "@/lib/api";
7 9
8 10
const PERIODICITY_LABELS: Record<string, string> = {
▸ 61 unchanged lines
70 72
/>
71 73
</TouchableOpacity>
72 74
))
73 75
)}
74 76
75 -
<TouchableOpacity
76 -
style={styles.addButton}
77 -
activeOpacity={0.7}
78 -
onPress={() => router.push("/care-actions/medicine-new")}
79 -
>
80 -
<Ionicons name="add-circle-outline" size={18} color={Colors.light.tint} />
81 -
<Text style={styles.addText}>Adicionar medicamento</Text>
82 -
</TouchableOpacity>
77 +
78 +
<Button
79 +
title="Cadastrar outro medicamento"
80 +
variant="dashed"
81 +
onPress={() => router.push('/care-actions/medicine-new')}
82 +
/>
83 83
</View>
84 84
);
85 85
}
86 86
87 87
const styles = StyleSheet.create({
▸ 7 unchanged lines
95 95
backgroundColor: "#fff",
96 96
padding: Spacing.cardGap,
97 97
gap: 12,
98 98
...Shadows.sm,
99 99
borderRadius: BorderRadius.lg,
100 +
marginBottom: 5
100 101
},
101 102
iconWrap: {
102 103
width: 32,
103 104
height: 32,
104 105
borderRadius: BorderRadius.md,
▸ 11 unchanged lines
116 117
paddingVertical: Spacing.cardGap,
117 118
paddingHorizontal: 4,
118 119
},
119 120
addText: { ...Typography.bodyMd, color: Colors.light.tint, fontWeight: "600" },
120 121
});
frontend/components/medicine/TodayMedicines.tsx
1 -
import { View, Text, TouchableOpacity, StyleSheet, ActivityIndicator } from "react-native";
1 +
import { View, TouchableOpacity, StyleSheet, ActivityIndicator } from "react-native";
2 +
import { Text } from "@/components/ui/Text";
2 3
import { Ionicons } from "@expo/vector-icons";
3 4
import { Colors, Typography, Spacing, BorderRadius, Shadows } from "@/constants/theme";
4 5
import { useMedicineToday, useCreateCareAction, medicineTodayKeys } from "@/hooks";
5 6
import { useQueryClient } from "@tanstack/react-query";
6 7
import { TodayMedicineEntry } from "@/lib/api";
▸ 34 unchanged lines
41 42
<Text style={styles.emptyText}>Nenhum medicamento agendado para hoje</Text>
42 43
</View>
43 44
);
44 45
}
45 46
47 +
console.log("today: ", JSON.stringify(entries))
48 +
46 49
const handleConfirm = async (regimenId: number) => {
47 50
await createCareAction.mutateAsync({
48 51
type: "MEDICINE",
49 52
moment: new Date(),
50 53
regimenId,
51 54
});
55 +
52 56
queryClient.invalidateQueries({ queryKey: medicineTodayKeys.list() });
53 57
};
54 58
55 59
return (
56 60
<View style={styles.container}>
▸ 86 unchanged lines
143 147
borderRadius: 10,
144 148
borderWidth: 2,
145 149
borderColor: Colors.light.divider,
146 150
},
147 151
});
frontend/components/misc/NoLinkMessage.tsx
1 1
import React from "react";
2 -
import { View, Text, StyleSheet } from "react-native";
2 +
import { View, StyleSheet } from "react-native";
3 +
import { Text } from "@/components/ui/Text";
3 4
import { Ionicons } from "@expo/vector-icons";
4 5
import { Colors, Typography, Spacing } from "@/constants/theme";
5 6
6 7
const styles = StyleSheet.create({
7 8
container: {
▸ 38 unchanged lines
46 47
<Ionicons name="information-circle-outline" size={20} color={Colors.light.textSecondary} />
47 48
<Text style={styles.text}>{MESSAGES[variant] ?? MESSAGES.general}</Text>
48 49
</View>
49 50
);
50 51
}
frontend/components/ui/AvatarUpload.tsx
1 1
import React, { useState, useRef } from 'react';
2 2
import {
3 3
View,
4 4
Image,
5 5
TouchableOpacity,
6 -
Text,
7 6
Alert,
8 7
ActivityIndicator,
9 8
Animated,
10 9
StyleSheet,
11 10
} from 'react-native';
11 +
import { Text } from '@/components/ui/Text';
12 12
import * as ImagePicker from 'expo-image-picker';
13 13
import { Ionicons } from '@expo/vector-icons';
14 14
import { apiClient, ApiError } from '@/lib/api';
15 15
import { useToast } from '@/context/ToastContext';
16 16
import { translateError } from '@/lib/errors/translations';
▸ 284 unchanged lines
301 301
textTransform: 'uppercase',
302 302
},
303 303
});
304 304
305 305
export default AvatarUpload;
frontend/components/ui/Badge.tsx
1 1
import {
2 2
StyleSheet,
3 -
View,
4 -
Text
3 +
View
5 4
} from 'react-native';
5 +
import { Text } from '@/components/ui/Text';
6 6
7 7
// Badge color palettes
8 8
export const badgeVariants = {
9 9
green: { bg: "#d4f5e2", text: "#1a7a48", dot: "#34c272" },
10 10
blue: { bg: "#dbeafe", text: "#1d4ed8", dot: "#3b82f6" },
▸ 37 unchanged lines
48 48
<View style={[styles.badgeDot, { backgroundColor: palette.dot }]} />
49 49
<Text style={[styles.badgeText, { color: palette.text }]}>{label}</Text>
50 50
</View>
51 51
);
52 52
}
frontend/components/ui/Button.tsx
1 1
import React from 'react';
2 2
import {
3 3
TouchableOpacity,
4 -
Text,
5 4
StyleSheet,
6 5
ActivityIndicator,
7 6
TouchableOpacityProps,
8 7
ViewStyle,
9 8
TextStyle,
10 9
} from 'react-native';
10 +
import { Text } from '@/components/ui/Text';
11 11
import { useThemeColor } from '@/hooks/use-theme-color';
12 12
13 13
interface ButtonProps extends TouchableOpacityProps {
14 14
title: string;
15 15
variant?: 'primary' | 'secondary' | 'outline' | 'ghost' | 'dashed' | 'danger';
▸ 108 unchanged lines
124 124
default:
125 125
return 16;
126 126
}
127 127
};
128 128
129 +
const getLineHeight = () => {
130 +
switch (size) {
131 +
case 'small':
132 +
return 18;
133 +
case 'medium':
134 +
return 20;
135 +
case 'large':
136 +
return 22;
137 +
default:
138 +
return 20;
139 +
}
140 +
};
141 +
129 142
return (
130 143
<TouchableOpacity
131 144
style={[
132 145
styles.button,
133 146
{
▸ 17 unchanged lines
151 164
style={[
152 165
styles.text,
153 166
{
154 167
color: getTextColor(),
155 168
fontSize: getFontSize(),
169 +
lineHeight: getLineHeight(),
156 170
},
157 171
textStyle,
158 172
]}
159 173
>
160 174
{title}
▸ 13 unchanged lines
174 188
},
175 189
text: {
176 190
fontWeight: '600',
177 191
},
178 192
});
frontend/components/ui/CategoryChips.tsx
1 1
import {
2 2
TouchableOpacity,
3 -
Text,
4 3
View,
5 4
StyleSheet,
6 5
} from 'react-native';
6 +
import { Text } from '@/components/ui/Text';
7 7
import { Colors } from '@/constants/theme';
8 8
9 9
export type CategoryOption<T extends string = string> = {
10 10
label: string;
11 11
value: T;
▸ 80 unchanged lines
92 92
},
93 93
labelActive: {
94 94
fontWeight: '600',
95 95
},
96 96
});
frontend/components/ui/DailyEnergyWidget.tsx
1 -
import { ActivityIndicator, StyleSheet, Text, View } from "react-native";
1 +
import { ActivityIndicator, StyleSheet, View } from "react-native";
2 +
import { Text } from "@/components/ui/Text";
2 3
import { Card } from "@/components/ui/Cards";
3 4
import { useInsight } from "@/hooks/useInsights.queries";
4 5
import { Ionicons } from "@expo/vector-icons";
5 6
import { Typography, Spacing, Colors, BorderRadius } from "@/constants/theme";
6 7
▸ 88 unchanged lines
95 96
fontSize: 11,
96 97
fontWeight: 600,
97 98
lineHeight: 16.5,
98 99
},
99 100
});
frontend/components/ui/DailySleepWidget.tsx
1 1
import React from "react";
2 -
import { View, Text, StyleSheet, ActivityIndicator } from "react-native";
2 +
import { View, StyleSheet, ActivityIndicator } from "react-native";
3 +
import { Text } from "@/components/ui/Text";
3 4
import { Card } from "./Cards";
4 5
import { Colors, Spacing, Typography } from "@/constants/theme";
5 6
import { Ionicons } from "@expo/vector-icons";
6 7
import { useInsight } from "@/hooks/useInsights.queries";
7 8
▸ 67 unchanged lines
75 76
empty: {
76 77
...Typography.labelSm,
77 78
opacity: 0.5,
78 79
},
79 80
});
frontend/components/ui/DatePickerField.tsx
1 1
import { useState, useEffect } from "react";
2 -
import { View, Text, Pressable, StyleSheet } from "react-native";
2 +
import { View, Pressable, StyleSheet } from "react-native";
3 +
import { Text } from "@/components/ui/Text";
3 4
import DateTimePicker, {
4 5
DateTimePickerEvent,
5 6
} from "@react-native-community/datetimepicker";
6 7
import { format } from "date-fns";
7 8
import { MaterialIcons } from "@expo/vector-icons";
▸ 89 unchanged lines
97 98
color: "#111827",
98 99
fontSize: 16,
99 100
fontWeight: "600",
100 101
},
101 102
});
frontend/components/ui/EmojiSelectors.tsx
1 1
import React from "react";
2 2
import {
3 3
View,
4 4
Pressable,
5 5
StyleSheet,
6 6
Image,
7 -
Text,
8 7
ImageSourcePropType,
9 8
ViewStyle,
10 9
} from "react-native";
10 +
import { Text } from "@/components/ui/Text";
11 11
import { Spacing, Typography, BorderRadius } from "@/constants/theme";
12 12
import { useThemeColor } from "@/hooks/use-theme-color";
13 13
14 14
type IconSource = string | ImageSourcePropType; // either string or a svg
15 15
▸ 105 unchanged lines
121 121
);
122 122
})}
123 123
</View>
124 124
);
125 125
};
frontend/components/ui/EmptyState.tsx
1 -
import { View, Text, StyleSheet } from "react-native";
1 +
import { View, StyleSheet } from "react-native";
2 +
import { Text } from "@/components/ui/Text";
2 3
import { Ionicons } from "@expo/vector-icons";
3 4
import { Colors, Typography, Spacing } from "@/constants/theme";
4 5
5 6
interface EmptyStateProps {
6 7
title: string;
▸ 30 unchanged lines
37 38
...Typography.bodyMd,
38 39
color: Colors.light.textSecondary,
39 40
textAlign: "center",
40 41
},
41 42
});
frontend/components/ui/FilterPills.tsx
1 1
import { useRef } from "react";
2 2
import {
3 3
ScrollView,
4 4
TouchableOpacity,
5 -
Text,
6 5
View,
7 6
StyleSheet,
8 7
Platform,
9 8
} from "react-native";
9 +
import { Text } from "@/components/ui/Text";
10 10
import { LinearGradient } from "expo-linear-gradient";
11 11
import type { HistoryCategory } from "@/lib/history/types";
12 12
import { Colors } from "@/constants/theme";
13 13
14 14
export type FilterOption = {
▸ 94 unchanged lines
109 109
top: 0,
110 110
bottom: 0,
111 111
width: 48,
112 112
},
113 113
});
frontend/components/ui/Input.tsx
1 1
import React, { useState } from 'react';
2 2
import {
3 3
TextInput,
4 4
TextInputProps,
5 5
StyleSheet,
6 6
View,
7 -
Text,
8 7
TouchableOpacity,
9 8
Platform,
10 9
} from 'react-native';
10 +
import { Text } from '@/components/ui/Text';
11 11
import { useThemeColor } from '@/hooks/use-theme-color';
12 12
import { Ionicons } from '@expo/vector-icons';
13 13
14 14
type InputVariant = 'default' | 'ghost' | 'darkGhost';
15 15
▸ 198 unchanged lines
214 214
errorText: {
215 215
fontSize: 12,
216 216
marginTop: 4,
217 217
},
218 218
});
frontend/components/ui/LinkRow.tsx
1 1
import React from "react";
2 -
import { StyleSheet, View, Text, Switch } from "react-native";
2 +
import { StyleSheet, View, Switch } from "react-native";
3 +
import { Text } from "@/components/ui/Text";
3 4
import { Card } from "@/components/ui/Cards";
4 5
import { Typography, Colors, Spacing } from "@/constants/theme";
5 6
6 7
const styles = StyleSheet.create({
7 8
linkRowCard: {
▸ 55 unchanged lines
63 64
onValueChange={onToggle}
64 65
/>
65 66
</Card>
66 67
);
67 68
};
frontend/components/ui/MoodTrendWidget.tsx
1 1
import React from "react";
2 -
import { View, Text, StyleSheet, ActivityIndicator } from "react-native";
2 +
import { View, StyleSheet, ActivityIndicator } from "react-native";
3 +
import { Text } from "@/components/ui/Text";
3 4
import { Ionicons } from "@expo/vector-icons";
4 5
import { Card } from "@/components/ui/Cards";
5 6
import { useInsight } from "@/hooks/useInsights.queries";
6 7
import { useThemeColor } from "@/hooks/use-theme-color";
7 8
import { Spacing, Typography, BorderRadius } from "@/constants/theme";
▸ 105 unchanged lines
113 114
...Typography.labelXs,
114 115
opacity: 0.5,
115 116
marginTop: 4,
116 117
},
117 118
});
frontend/components/ui/ScaleSlider.tsx
1 1
import React, { useState } from 'react';
2 2
import {
3 3
View,
4 -
Text,
5 4
StyleSheet,
6 5
ViewStyle,
7 6
} from 'react-native';
7 +
import { Text } from '@/components/ui/Text';
8 8
import Slider from '@react-native-community/slider';
9 9
import { useThemeColor } from '@/hooks/use-theme-color';
10 10
import { Theme } from '@/constants/theme';
11 11
12 12
type SliderVariant = 'rich' | 'compact';
▸ 167 unchanged lines
180 180
rangeLabel: {
181 181
...Theme.typography.labelXs,
182 182
fontWeight: 500,
183 183
},
184 184
});
frontend/components/ui/TimePicker.tsx
1 1
import { useState } from "react";
2 -
import { TouchableOpacity, Text, View, StyleSheet } from "react-native";
2 +
import { TouchableOpacity, View, StyleSheet } from "react-native";
3 +
import { Text } from "@/components/ui/Text";
3 4
import DateTimePicker, {
4 5
DateTimePickerEvent,
5 6
} from "@react-native-community/datetimepicker";
6 7
import { Ionicons } from "@expo/vector-icons";
7 8
▸ 72 unchanged lines
80 81
color: "#1C1C1E",
81 82
letterSpacing: 0.5,
82 83
fontVariant: ["tabular-nums"],
83 84
},
84 85
});