# 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 ```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 à droite - **`TabBar`** — 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 tooltip - **`Toggle`** — switch on/off - **`SegmentedControl`** — sélecteur 2-4 options exclusives - **`Button`** — bouton générique (depuis ui-kit) ### Listes - **`ListSection / ListRow`** — liste de réglages iOS-style - **`ActionCard`** — grosse tuile tactile pour grille d'apps - **`SwipeableRow`** — 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 + erreur - **`TextInput`** — champ texte avec contrôle complet du clavier virtuel - **`DateInput`** — picker date/heure/datetime natif mobile - **`Dropdown`** — select avec sélecteur natif - **`CheckboxItem`** — case à cocher avec label + description - **`RadioGroup`** — options exclusives empilées - **`MediaInsert`** — grille pour ajouter photo/image/vidéo/audio/fichier/GPS - **`SearchBar`** — recherche tactile avec icône loupe - **`FilterChips`** — 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.5s - **`Popup`** — 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éconnexion - **`AvatarLogo`** — gros logo carré arrondi (login, profil) - **`BiometricButton`** — Face ID / Touch ID ### Patterns d'app - **`OnboardingSlider`** — slides + dots + suivant/passer - **`ChatBubble`** — bulle message (envoyé/reçu, statut ✓ ✓✓) - **`ChatComposer`** — barre d'envoi avec joindre + audio + send - **`CalendarMonth`** — vue mois avec évènements - **`MapView`** — carte avec pins colorés - **`QrScannerView`** — viseur scanner avec ligne animée - **`CameraView`** — viseur photo avec règle des tiers ### Gestes - **`useGesture`** — hook qui détecte 9 gestes nommés - **`GestureZone`** — 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 standard - `numeric` — pavé 0-9 (codes, OTP) - `decimal` — pavé + virgule (prix, mesures) - `tel` — pavé téléphone - `email` — clavier texte + @ et . directs - `url` — clavier texte + / et .com - `search` — clavier standard, touche Entrée = "Rechercher" - `none` — aucun clavier (picker custom) ### `autocomplete` — aide à la saisie système - `email` · `tel` · `name` · `given-name` · `family-name` - `address-line1` · `postal-code` · `country` - `current-password` · `new-password` - `one-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 | |--------------------|-------------------------------------------------------------------| | Email | `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) 1. **`examples/exemple-mobile.html`** — vue d'ensemble, gestes interactifs, premières patterns 2. **`examples/exemple-mobile-saisie.html`** — login, profil, formulaire complet, clavier virtuel 3. **`examples/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` : ```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 : ```js 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.css` chargé - [ ] `data-theme="dark"` (ou "light") sur `` - [ ] React 18 + Babel chargés - [ ] `ui-kit.jsx` chargé 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.