Contient les tokens, composants et exemples adaptés au mobile, à utiliser comme référence lors du développement des vues smartphone. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
11 KiB
mon design system — Package Smartphone (iOS / Android)
Adaptation mobile complète de mon design system Gruvbox seventies. 45+ composants nommés, optimisés tactile (hit targets ≥ 44px), animations fluides, dark + light, gestes nommés et testables, contrôle complet du clavier virtuel.
Version 1.0 · iOS & Android
🚀 Démarrage rapide
<!DOCTYPE html>
<html data-theme="dark">
<head>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&family=Share+Tech+Mono&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
<link rel="stylesheet" href="tokens/tokens.css">
<script src="https://unpkg.com/react@18.3.1/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@18.3.1/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/@babel/standalone@7.29.0/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
<!-- Base UI -->
<script type="text/babel" src="components/ui-kit.jsx"></script>
<!-- Mobile -->
<script type="text/babel" src="components/mobile-kit.jsx"></script>
<script type="text/babel" src="components/mobile-sheets.jsx"></script>
<script type="text/babel" src="components/mobile-gestures.jsx"></script>
<script type="text/babel" src="components/mobile-swipeable.jsx"></script>
<script type="text/babel" src="components/mobile-forms.jsx"></script>
<script type="text/babel" src="components/mobile-apps.jsx"></script>
<script type="text/babel">
// Ton app ici
</script>
</body>
</html>
📂 Contenu du package
package-smartphone/
├── README.md ← Ce fichier (guide humain)
├── consigne_mobile.md ← Brief pour agents IA
├── tokens/
│ ├── tokens.css ← Variables CSS web (dark + light)
│ ├── tokens.gnome.css ← Pour apps GTK
│ └── tokens.json ← Format générique
├── components/
│ ├── ui-kit.jsx ← Base (Button, Icon, Popup, gauges…)
│ ├── mobile-kit.jsx ← StatusBar, NavBar, TabBar, ActionCard…
│ ├── mobile-sheets.jsx ← BottomSheet, ActionSheet, AlertDialog, Toast, FAB, PullToRefresh
│ ├── mobile-gestures.jsx ← useGesture, GestureZone (9 gestes nommés)
│ ├── mobile-swipeable.jsx ← SwipeableRow (swipe-to-reveal actions)
│ ├── mobile-forms.jsx ← TextInput, DateInput, Dropdown, Checkbox, Radio, MediaInsert…
│ └── mobile-apps.jsx ← Avatar+menu, Onboarding, Chat, Calendar, Maps, Scanner, Caméra, Files
└── examples/
├── exemple-mobile.html ← Vue d'ensemble + gestes interactifs
├── exemple-mobile-saisie.html ← Login, profil, formulaire complet, clavier virtuel
└── exemple-mobile-apps.html ← 10 écrans : onboarding, chat, calendrier, maps, scanner, caméra, fichiers, settings
Tous les exemples ont leurs composants copiés à côté pour fonctionner sans navigation ../. Ouvre n'importe lequel directement dans le navigateur.
🧩 Tous les composants nommés
Structure d'écran
StatusBar— barre de statut iOS (heure, signal, batterie)NavBar— barre titre, mode compact ou large, bouton retour, actions à droiteTabBar— barre d'onglets en bas (3-5 sections)
Boutons & contrôles
PrimaryButton— gros bouton plein largeur (primary, ghost, danger)IconButton— bouton icône seul avec tooltipToggle— switch on/offSegmentedControl— sélecteur 2-4 options exclusivesButton— bouton générique (depuis ui-kit)
Listes
ListSection / ListRow— liste de réglages iOS-styleActionCard— grosse tuile tactile pour grille d'appsSwipeableRow— ligne révélant des actions au swipe (Mail/Things)FileExplorer— liste de fichiers avec icônes par type + actions swipe
Saisie
FormField— wrapper avec label + hint + erreurTextInput— champ texte avec contrôle complet du clavier virtuelDateInput— picker date/heure/datetime natif mobileDropdown— select avec sélecteur natifCheckboxItem— case à cocher avec label + descriptionRadioGroup— options exclusives empiléesMediaInsert— grille pour ajouter photo/image/vidéo/audio/fichier/GPSSearchBar— recherche tactile avec icône loupeFilterChips— chips horizontaux multi-sélection
Fenêtres / Dialogues
BottomSheet— feuille modale qui monte du bas (swipe-down pour fermer)ActionSheet— menu d'actions iOS (2-6 choix)AlertDialog— alerte centrée bloquante (confirmation destructive)Toast— notification éphémère 2.5sPopup— modale glassmorphism (depuis ui-kit)
Identité utilisateur
Avatar— bouton rond avec initiales (haut-droite de chaque écran)AvatarMenu— popup descendant : Profil / Paramètres / Aide / DéconnexionAvatarLogo— gros logo carré arrondi (login, profil)BiometricButton— Face ID / Touch ID
Patterns d'app
OnboardingSlider— slides + dots + suivant/passerChatBubble— bulle message (envoyé/reçu, statut ✓ ✓✓)ChatComposer— barre d'envoi avec joindre + audio + sendCalendarMonth— vue mois avec évènementsMapView— carte avec pins colorésQrScannerView— viseur scanner avec ligne animéeCameraView— viseur photo avec règle des tiers
Gestes
useGesture— hook qui détecte 9 gestes nommésGestureZone— zone interactive qui affiche le geste détecté
Datavis (mobile-friendly)
RadialGauge,BatteryGauge(compact ou standard),BigRadialGauge,Sparkline,LineChart,StatusLed
✋ Gestes nommés
9 gestes détectables par useGesture() :
| Nom | Geste | Usage typique |
|---|---|---|
Tap |
Pression rapide | Action principale (équiv. clic) |
DoubleTap |
Deux Tap rapprochés (< 300 ms) | Zoomer, liker |
LongPress |
Pression maintenue ≥ 500 ms | Menu contextuel, sélection |
SwipeLeft |
Glisser vers la gauche | Écran suivant, supprimer une ligne |
SwipeRight |
Glisser vers la droite | Écran précédent, archiver |
SwipeUp |
Glisser vers le haut | Plus de détails, fermer popup |
SwipeDown |
Glisser vers le bas | Rafraîchir, fermer BottomSheet |
Pan |
Glisser en continu | Déplacer un élément, scroll horizontal |
Pinch |
Écarter / rapprocher 2 doigts | Zoomer carte ou image |
⌨️ Clavier virtuel — paramètres
TextInput accepte 4 props clés pour contrôler le clavier mobile :
keyboard (inputmode) — quel clavier afficher
text— clavier standardnumeric— pavé 0-9 (codes, OTP)decimal— pavé + virgule (prix, mesures)tel— pavé téléphoneemail— clavier texte + @ et . directsurl— clavier texte + / et .comsearch— clavier standard, touche Entrée = "Rechercher"none— aucun clavier (picker custom)
autocomplete — aide à la saisie système
email·tel·name·given-name·family-nameaddress-line1·postal-code·countrycurrent-password·new-passwordone-time-code(auto-lecture SMS sur iOS/Android !)off
enterHint — texte de la touche Entrée
send·search·go·done·next·previous
autocapitalize — majuscules auto
sentences·words·characters·off
Combinaisons usuelles
| Cas | Réglages |
|---|---|
keyboard="email" autocomplete="email" autocapitalize="off" |
|
| Mot de passe | type="password" autocomplete="current-password" (ou new-password) |
| Code OTP SMS | keyboard="numeric" autocomplete="one-time-code" maxLength={6} |
| Téléphone | keyboard="tel" autocomplete="tel" |
| Recherche | keyboard="search" enterHint="search" |
| Prix / mesure | keyboard="decimal" |
| Adresse postale | autocomplete="address-line1", puis postal-code, country |
| Texte libre | autocapitalize="sentences" spellCheck={true} |
🪟 Types de fenêtres mobile
| Type | Quand l'utiliser | Geste pour fermer |
|---|---|---|
BottomSheet |
Action contextuelle, formulaire court, choix dans une liste | SwipeDown ↓ |
ActionSheet |
Menu d'actions (2-6 choix) sur un élément | Tap "Annuler" ou hors |
AlertDialog |
Confirmation destructive (suppression, déconnexion) | Volontairement bloquant |
Toast |
Feedback succès/erreur après une action | Auto 2.5s |
Popup |
Modale centrée plus large (form de config avancé) | ✕ ou clic extérieur |
📱 3 pages d'exemples (à ouvrir)
examples/exemple-mobile.html— vue d'ensemble, gestes interactifs, premières patternsexamples/exemple-mobile-saisie.html— login, profil, formulaire complet, clavier virtuelexamples/exemple-mobile-apps.html— 10 patterns d'app : onboarding, chat, calendrier, maps, scanner QR, caméra, fichiers, settings, avatar menu
Chaque page affiche un smartphone à gauche (basculable iOS/Android, sombre/clair) et la doc commentée à droite avec mini-visuels SVG sous chaque composant et écran.
⚙️ Paramétrage
Tout fonctionne avec les mêmes tokens CSS que le package desktop. Pour changer une couleur, édite tokens/tokens.css :
:root[data-theme="dark"] {
--accent: #fe8019; /* Orange Gruvbox */
--bg-1: #2a231d; /* Fond app */
--ok: #4dbb26;
--warn: #fabd2f;
--err: #fb4934;
--blue: #3db0d1;
--purple: #c882c8;
}
Bascule de thème :
document.documentElement.dataset.theme = 'light'; // ou 'dark'
✅ Checklist d'intégration
- Polices chargées (Inter, JetBrains Mono, Share Tech Mono)
- Font Awesome 6 chargé
tokens/tokens.csschargédata-theme="dark"(ou "light") sur<html>- React 18 + Babel chargés
ui-kit.jsxchargé en premier- Modules mobile chargés dans l'ordre : kit → sheets → gestures → swipeable → forms → apps
🤖 Pour les agents IA
Lire consigne_mobile.md pour les règles d'utilisation et conventions.