Bibliothèques
Toutes les dépendances sont dans timemanager-mobile/package.json. Voici celles que le code utilise directement, regroupées par rôle.
Le socle
| Paquet | Rôle | Où on le voit |
|---|---|---|
expo | La boîte à outils : serveur de développement, build, modules natifs | partout |
react | Les composants et les hooks | partout |
react-native | Les composants mobiles (View, Text, Pressable, TextInput, ScrollView, Animated...) | partout |
typescript | Le typage | partout |
Navigation
| Paquet | Rôle | Où on le voit |
|---|---|---|
expo-router | Une route par fichier, Stack, Tabs, router.push, useLocalSearchParams, useFocusEffect, useIsFocused | src/app/, src/hooks/use-query.ts, src/hooks/use-now.ts |
react-native-safe-area-context | Les marges autour de l'encoche et de la barre du bas | src/app/_layout.tsx, src/components/navigation/tab-bar.tsx, src/components/ui/toast.tsx |
Fonctions du téléphone
| Paquet | Rôle | Où on le voit |
|---|---|---|
expo-secure-store | Stockage chiffré (Keychain sur iOS, Keystore sur Android) : jeton CSRF et « présentation déjà vue » | src/api/client.ts, src/state/onboarding.tsx |
expo-haptics | Les vibrations pendant l'appui long sur le bouton de pointage | src/components/clock/clock-button.tsx |
expo-file-system | Écrire l'export JSON dans un fichier | src/app/(tabs)/your-data.tsx |
expo-sharing | Ouvrir la feuille de partage native (AirDrop, mail, Fichiers...) | src/app/(tabs)/your-data.tsx |
expo-web-browser | Ouvrir un lien dans un navigateur intégré à l'app | src/app/(tabs)/account.tsx |
expo-localization | Lire la langue du téléphone | src/i18n/index.ts |
Affichage
| Paquet | Rôle | Où on le voit |
|---|---|---|
react-native-svg | Le dessin vectoriel : icônes, logo, graphiques, anneau de progression | src/components/ui/icon.tsx, src/components/ui/logo.tsx, src/components/charts/*, src/components/clock/* |
expo-font | Le chargement des polices | src/app/_layout.tsx |
@expo-google-fonts/inter | La police Inter de la maquette (5 graisses) | src/theme/typography.ts |
@expo-google-fonts/share-tech-mono | La police Share Tech Mono (initiales, chiffres) | src/theme/typography.ts |
expo-splash-screen | Garder l'écran de lancement tant que l'app n'est pas prête | src/app/_layout.tsx |
expo-status-bar | La couleur des icônes de la barre d'état | src/app/_layout.tsx |
Textes
| Paquet | Rôle | Où on le voit |
|---|---|---|
i18next | Le moteur de traduction | src/i18n/index.ts |
react-i18next | Le hook useTranslation() qui donne la fonction t | tous les écrans |
Les autres paquets
Le package.json contient aussi react-native-reanimated, react-native-gesture-handler, react-native-screens, react-native-worklets, expo-image, expo-symbols, expo-glass-effect, expo-linking, expo-constants, expo-device, expo-system-ui, @expo/ui, react-dom et react-native-web.
Ils viennent du modèle de projet Expo. Certains sont utilisés en interne par expo-router (screens, gesture-handler, reanimated, linking, constants). Le code de l'app ne les importe pas directement.
Ce qu'il n'y a pas, volontairement
| Absent | Pourquoi |
|---|---|
| Une bibliothèque de requêtes (axios, React Query) | fetch suffit, et client.ts + useQuery font en 150 lignes ce dont l'app a besoin |
| Une bibliothèque d'état (Redux, Zustand) | Trois contextes React suffisent : session, annuaire, présentation |
| Une bibliothèque de dates (moment, date-fns) | Les quelques calculs sont dans src/api/dates.ts et src/utils/time.ts, l'affichage passe par toLocaleDateString |
| Une bibliothèque de composants (React Native Paper...) | L'interface suit exactement la maquette Figma, avec un kit maison dans src/components/ui/ |
| Une bibliothèque de graphiques | Les trois graphiques sont dessinés directement en SVG |