eletrotupi / tcc/ commit / 5307cc7

frontend: phase two of changes regarding text

Pedro Lucas Porcellis porcellis@eletrotupi.com 29 days ago 5307cc7eac61d37523a83076514ddabf1d84621d
Parents: 252758f
54 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
});