- README : fonctionnalités, installation, build, tests (302 + 20 E2E), couverture 94%, workflow mise à jour latest.yml, changelog v1.1.6 - CLAUDE.md : règles de collaboration, architecture, conventions - Plans de conception : DDD, electron-updater, accouplement, toast Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
336 lines
10 KiB
Markdown
336 lines
10 KiB
Markdown
# Fonctionnalités par écran — Minuteur Dragodinde
|
||
|
||
---
|
||
|
||
## 1. Shell principal (App)
|
||
|
||
### Header
|
||
- Bouton hamburger (☰) pour ouvrir/fermer la sidebar
|
||
- Logo "⚔ MINUTEUR DRAGODINDE"
|
||
- Sous-titre "Dofus 3 · Gestion multi-enclos en temps réel · vX.X.X"
|
||
- Version injectée dynamiquement via Electron API
|
||
- Badge "DEV" en mode développement
|
||
|
||
### Barre d'onglets
|
||
- Onglet Dashboard (📊)
|
||
- Un onglet par enclos :
|
||
- Icône 🐉 + nom de l'enclos
|
||
- Dot animé : vert pulsant si timer en cours, gris si inactif
|
||
- Bouton supprimer (✕), visible si plus d'1 enclos
|
||
- Drag-and-drop pour réordonner les onglets
|
||
- Bouton "+ Enclos" (désactivé si max atteint)
|
||
|
||
### Bannière de mise à jour
|
||
- États : disponible → téléchargement (barre de progression %) → prête → erreur
|
||
- Bouton "Installer et redémarrer"
|
||
- Bouton fermer (✕) sur erreur
|
||
|
||
### Zoom clavier
|
||
- Ctrl + (+) : zoom avant
|
||
- Ctrl + (-) : zoom arrière
|
||
- Ctrl + 0 : reset 100%
|
||
|
||
---
|
||
|
||
## 2. Sidebar — Navigation latérale
|
||
|
||
- **Dashboard** (📊)
|
||
- **Section "Enclos"** : liste dynamique de chaque enclos
|
||
- Icône 🐉 + nom + dot coloré (vert=running, gris=idle)
|
||
- **Section "Outils"** :
|
||
- Accouplement (💑)
|
||
- Réappro (🧬)
|
||
- Inventaire (📦)
|
||
- Workflows (📋)
|
||
- **Paramètres** (⚙)
|
||
- Indicateur visuel de la vue active
|
||
- Fermeture auto au clic sur l'overlay
|
||
|
||
---
|
||
|
||
## 3. Dashboard — Vue d'ensemble
|
||
|
||
### Cartes des enclos
|
||
Pour chaque enclos :
|
||
- Nom de l'enclos
|
||
- Dot animé + statut textuel ("En cours" / "Pause" / "Inactif")
|
||
- Liste des jauges actives (badges colorés avec icônes)
|
||
- Nombre de dragodindes + terminées (ex: "5 DD · 3/5 ✅")
|
||
- Temps restant (countdown live) ou "✅ Terminé !"
|
||
- Temps écoulé (live)
|
||
- Bouton "→ Gérer cet enclos" (navigation)
|
||
|
||
### Statistiques globales
|
||
- **KPI** :
|
||
- Bébés au total
|
||
- Dragodindes actives
|
||
- Couples accouplés
|
||
- Taux de réussite (%)
|
||
- Races obtenues
|
||
- **Histogramme des races** : barres horizontales triées par quantité, colorées par race
|
||
- **Bouton "Réinitialiser"** : efface stats et accouplements
|
||
|
||
### Temps réel
|
||
- Countdowns et temps écoulés mis à jour en continu
|
||
- Dots animés sur les enclos en cours
|
||
|
||
---
|
||
|
||
## 4. Enclos — Vue timer principale
|
||
|
||
### En-tête
|
||
- **Nom de l'enclos** : input éditable (focus vide, blur sauvegarde, Escape annule, Enter valide)
|
||
- **Bouton "🗑 Vider l'enclos"** : supprime toutes les DD et reset
|
||
|
||
### Carte Jauges (max 2 actives)
|
||
- **6 boutons toggle** : Baffeur (➖), Caresseur (➕), Foudroyeur (⚡), Abreuvoir (💧), Dragofesse (❤), Mangeoire (🍖)
|
||
- État actif : bordure colorée
|
||
- Verrouillé si timer en cours
|
||
- **Exclusion mutuelle** baffeur ↔ caresseur (l'un bloque l'autre)
|
||
- **Par jauge active** :
|
||
- Icône + nom + badge Tier ("Tier X · ±Y/tick")
|
||
- Input niveau (0–100 000, step 1000)
|
||
- Avant timer : modifie le niveau
|
||
- Pendant timer : recharge la jauge (style visuel distinct)
|
||
- Barre de progression (% de remplissage)
|
||
- Info : "Jauge : {niveau} · Vide en {durée}"
|
||
|
||
### Barre timer
|
||
- **Bouton** : "▶ Démarrer" / "⏸ Pause" / "▶ Reprendre"
|
||
- **Temps écoulé** (gauche) : HH:MM:SS live
|
||
- **Alarme dans** (droite) : countdown global ou "✅" ou "--:--:--"
|
||
|
||
### Bannière de fin
|
||
- "✅ Session terminée !" (visible quand toutes les cibles atteintes)
|
||
- Bouton "🔄 Nouvelle fournée" (reset timer, conserve les niveaux de jauges)
|
||
|
||
### Section Dragodindes
|
||
- Compteur "X/10"
|
||
- Bouton "+ Ajouter une Dragodinde" (désactivé si 10 atteint)
|
||
- Grille de cartes DD (drag-and-drop pour réordonner)
|
||
|
||
---
|
||
|
||
## 5. Carte Dragodinde (sous-composant d'Enclos)
|
||
|
||
### En-tête
|
||
- Poignée de drag (⠿)
|
||
- Nom éditable (même comportement focus/blur)
|
||
- Bouton supprimer (✕)
|
||
|
||
### Pilules de stats (5)
|
||
| Stat | Icône | Plage | Couleur |
|
||
|------|-------|-------|---------|
|
||
| Sérénité | 😊 | -5000 à +5000 | Violet |
|
||
| Endurance | ⚡ | 0 à 20 000 | Jaune |
|
||
| Maturité | 💧 | 0 à 20 000 | Cyan |
|
||
| Amour | ❤️ | 0 à 20 000 | Rouge |
|
||
| XP (niveau) | ⭐ | 1 à 200 | Orange |
|
||
|
||
- Input éditable par pilule (focus/blur)
|
||
- Mise à jour live pendant le timer
|
||
- Effet lumineux (glow) quand la stat atteint un cap
|
||
- Animation delta (+X / -X) qui pop à chaque tick de 10s
|
||
|
||
### Cible sérénité (😊)
|
||
- Input numérique (bornes selon jauge active : négatif si baffeur, positif si caresseur)
|
||
- Bouton effacer (✕)
|
||
- ETA affiché : "~Xm XXs" ou "✅" ou "➕/➖" (si jauge nécessaire non active)
|
||
- Placeholder dynamique ("-5000 à 0" ou "0 à 5000")
|
||
|
||
### Cible niveau (⭐)
|
||
- Input numérique (1–200)
|
||
- Bouton effacer (✕)
|
||
- ETA affiché
|
||
|
||
### Blocs jauges actives
|
||
**Pour chaque jauge active :**
|
||
|
||
**Mangeoire (XP) — bloc spécial :**
|
||
- En-tête : icône + "XP / NIVEAU"
|
||
- ETA niveau 200 : "→ NIV. 200 : ~Xj Xh"
|
||
- Barre de progression vers 200 + pourcentage
|
||
- Valeur live (NIV. X), delta (+X xp), countdown
|
||
|
||
**Autres jauges :**
|
||
- En-tête : icône + nom (coloré)
|
||
- Valeur live, delta (pop animé), countdown
|
||
- Barre de progression vers la cible
|
||
|
||
### Badge "✓ TERMINÉ"
|
||
- Affiché quand toutes les jauges actives de cette DD ont atteint leur cible
|
||
|
||
---
|
||
|
||
## 6. Accouplement — Enregistrement de croisements
|
||
|
||
### Étape 1 : Sélection du parent 1
|
||
- Barre de recherche (🔍) avec bouton effacer
|
||
- Filtres par génération (onglets colorés : Toutes, Gen 1–10)
|
||
- Grille de cartes race (image, nom, badge gen)
|
||
- Message vide si aucun résultat
|
||
|
||
### Étape 2 : Sélection du parent 2
|
||
- Bouton "← Retour"
|
||
- Carte du parent 1 affichée (non cliquable)
|
||
- Label "Choisir le partenaire :"
|
||
- Grille des partenaires compatibles uniquement
|
||
- Chaque carte montre "→ {bébé}" en dessous
|
||
|
||
### Étape 3 : Résultat
|
||
- Bouton "← Retour"
|
||
- Affichage en ligne : Parent 1 + Parent 2 = Bébé (cartes avec images et badges gen)
|
||
- Input "Couples" (nombre)
|
||
- Input "Bébés obtenus" (nombre)
|
||
- Bouton "Enregistrer" → commande `register-accouplement`
|
||
|
||
---
|
||
|
||
## 7. Réapprovisionnement — Calcul de plan d'élevage
|
||
|
||
### Étape 1 : Sélection de la race cible
|
||
- Barre de recherche (🔍) avec bouton effacer
|
||
- Filtres par génération (Gen 2–10 uniquement)
|
||
- Grille de cartes race (gen 2+ seulement)
|
||
|
||
### Étape 2 : Plan d'élevage
|
||
- Bouton "← Retour"
|
||
- Carte cible + input quantité (mise à jour live du plan)
|
||
|
||
**Matériaux (Gen 1) :**
|
||
- Mini-cartes par race de base : image, nom, badge gen, ♂X ♀Y
|
||
|
||
**Étapes (Gen 2+) :**
|
||
Par génération, pour chaque croisement :
|
||
- En-tête "Étape X — Gen Y" (coloré)
|
||
- Affichage : Parent A + Parent B → Bébé (mini-cartes)
|
||
- Input "Reproducteurs" (nombre, par croisement)
|
||
- Bouton inversion ♂/♀ (swap la direction de reproduction)
|
||
|
||
**Actions :**
|
||
- Bouton "Sauvegarder le workflow"
|
||
|
||
---
|
||
|
||
## 8. Inventaire — Gestion du stock & simulation
|
||
|
||
### Saisie du stock
|
||
- Résumé : "X DD en stock (Y races)"
|
||
- Bouton "Réinitialiser" (remet tout à 0)
|
||
- Bouton "Calculer les bébés" (lance la simulation)
|
||
- Barre de recherche (🔍)
|
||
- Filtres par génération (Gen 1–10)
|
||
- Grille de cartes race :
|
||
- Image, nom, badge gen
|
||
- Input ♂ (mâles) + input ♀ (femelles)
|
||
- Mise à jour du résumé en temps réel pendant la saisie
|
||
- Persistance automatique du stock entre les changements d'écran
|
||
|
||
### Résultats de simulation
|
||
- En-tête global : "{N} bébés possibles sur {G} génération(s)"
|
||
- Bouton "Sauvegarder le workflow"
|
||
- Par génération :
|
||
- Badge gen + total bébés
|
||
- Par croisement : Parent A (♂X ♀Y) + Parent B (♂X ♀Y) → Bébé (×Z)
|
||
- Section "DD restantes (non utilisées)" : mini-cartes du stock inutilisé
|
||
|
||
### Algorithme
|
||
- Allocation proportionnelle (pas glouton) : chaque parent est réparti équitablement entre les croisements qui l'utilisent
|
||
- Cascade multi-générations (Gen 2 → Gen 10)
|
||
|
||
---
|
||
|
||
## 9. Workflows — Suivi des plans d'élevage
|
||
|
||
### Vue liste
|
||
- Titre "Plans d'élevage"
|
||
- Barre de recherche (🔍)
|
||
- Filtres par génération (uniquement les gens qui ont des workflows)
|
||
- Message vide si aucun workflow
|
||
|
||
**Par carte workflow :**
|
||
- Image de la race cible + badge gen
|
||
- Nom du workflow (tronqué)
|
||
- "Cible × Quantité — Date de création"
|
||
- Barre de progression globale (colorée) + "X/Y — Z%"
|
||
- Bouton supprimer (✕)
|
||
- Clic → vue détail
|
||
|
||
### Vue détail
|
||
- Bouton "← Retour"
|
||
- **Carte d'en-tête** :
|
||
- Image + badge gen
|
||
- Nom, cible × quantité, date
|
||
- Barre de progression globale + pourcentage
|
||
|
||
**Section Matériaux de base (si présents) :**
|
||
- Par matériau :
|
||
- Nom de la race (coloré)
|
||
- Mini barre de progression
|
||
- Input de progression (nombre)
|
||
- Label "X / Y"
|
||
|
||
**Sections par génération :**
|
||
- En-tête "Génération X" (coloré)
|
||
- Par croisement :
|
||
- Nom race (coloré)
|
||
- "ParentA × ParentB — X couples, repro ×Y"
|
||
- Input de progression (nombre)
|
||
- Label "X / Y"
|
||
- Mini barre de progression
|
||
|
||
### Temps réel
|
||
- La barre de progression globale se met à jour pendant la saisie
|
||
- Les barres individuelles se mettent à jour en direct
|
||
|
||
---
|
||
|
||
## 10. Paramètres
|
||
|
||
### Carte 🔊 Son d'alarme
|
||
- Select : Arpège, Pulsation, Fanfare, Cloche
|
||
- Bouton ▶ (test du son sélectionné, joue directement via WebAudio)
|
||
|
||
### Carte 🔔 Notifications
|
||
- **Bouton Notifs PC** : "🔔 Notifs PC activées" / "🔕 Notifs PC désactivées" (toggle)
|
||
- **Bouton Mobile** : "📱 Mobile activé" / "📱 Activer mobile" (ouvre la modal)
|
||
|
||
### Modal ntfy (notifications mobiles)
|
||
**Si non activé :**
|
||
- Texte explicatif
|
||
- Bouton "🔔 Activer les notifications mobiles" (génère un topic automatique)
|
||
|
||
**Si activé :**
|
||
- ① QR code pour télécharger l'app ntfy (Play Store / App Store)
|
||
- ② QR code pour s'abonner automatiquement aux notifications
|
||
- Bouton "🔔 Tester" (envoie une notification de test)
|
||
- Bouton "✕ Désactiver" (supprime le topic)
|
||
- Bouton "Fermer"
|
||
|
||
---
|
||
|
||
## Comportements transversaux
|
||
|
||
### Focus/blur des inputs (tous les écrans)
|
||
- Focus : vide le champ, sauvegarde la valeur précédente
|
||
- Blur sans valeur : restaure la valeur précédente
|
||
- Blur avec valeur : applique et sauvegarde
|
||
- Escape : annule et restaure
|
||
- Enter : valide (blur)
|
||
|
||
### Système de timer
|
||
- Snapshot des jauges et stats au démarrage
|
||
- Calcul par segments (recharges en cours de session)
|
||
- Gel au cap absolu de chaque stat
|
||
- Alarme unique quand toutes les cibles sont atteintes (son + notification PC + ntfy mobile)
|
||
- Temps réel : requestAnimationFrame continu
|
||
|
||
### Persistance
|
||
- Sauvegarde automatique après chaque mutation d'état
|
||
- LocalStorage (web) ou fichier JSON (Electron userData)
|
||
- Isolation des données DEV / production
|
||
|
||
### Drag-and-drop
|
||
- Onglets enclos : réordonnancement par glisser-déposer
|
||
- Cartes dragodindes : réordonnancement dans le même enclos
|