Feature #1280
Updated by Redmine Admin about 1 month ago
## Tutoriels de la fiche événement (coachmarks) — Spec
10 tutos coachmarks sur /EventDetails : T0 accueil (1re ouverture de n'importe quel événement) + T1→T9 (1re ouverture de chaque onglet). Déclenchement si tutorialState.seen[ctx]===false. Copy FR définitive §3 intégrée mot pour mot.
### Décisions techniques (réutilise l'épic onboarding #1262)
- **Moteur** : étendre ProductTour (src/components/onboarding/ProductTour.jsx) en Coachmark — ajouts : trigger par contexte (first_open_event/first_open_tab), condition par étape (evt.fdr.config après création FDR), clic-extérieur=Passer, a11y (focus, Échap, annonce, contraste AA, surbrillance non uniquement chromatique). Conserve filtrage des cibles data-tour absentes.
- **Persistance** : entité base44 TutorialState (par user×espace, workspace-scoped) modélée sur OnboardingState ; paire functions.invoke getTutorialState/updateTutorialState (GET/PATCH /tutorials/:workspaceId) ; hook useTutorial(). updateTutorialState marque un contexte seen sans toucher aux autres + reset (réactivation).
- **Ancres** : ~35 data-tour stables sur le header EventDetails + les 9 composants d'onglet ; déclencheur 1re ouverture par onglet via activeTab.
- **Réactivation** : HelpMenu « Revoir le tutoriel de cette page » + « Revoir tous les tutoriels » (reset des 10) ; item checklist « Créer votre premier événement » ouvre la fiche + déclenche T0.
### Découpage (4 sous-tâches, ordre de dépendance)
1. #1281 Backend TutorialState + get/updateTutorialState (fondation)
2. #1282 Moteur Coachmark + config des 10 tutos + réactivation
3. #1283 Ancres data-tour + triggers : header/T0 + Plateau/Budget/Régie/Contrat
4. #1284 Ancres data-tour + triggers : Gestion/Communication/FDR/Chat/Emails
DoD = §6 du cahier. Copy FR définitive intégrée mot pour mot.