ConfirmDialog (nouveau composant ui réutilisable) :
- Modal RN avec backdrop noir 50%, card rounded-3xl + shadow
- Variant 'destructive' (icône AlertTriangle rouge) ou 'default' (Check vert)
- Boutons côte-à-côte avec icônes X/Trash2/Check, minHeight 52px,
ghost grisé bordé + primary/destructive avec shadow
- Tap backdrop = cancel, tap dialog = no-op via stopPropagation
ScanListItem :
- Remplace Alert.alert natif par ConfirmDialog stylé pour la suppression
- Le swipe gauche → bouton Supprimer → un seul modal ConfirmDialog → confirm
MyPlantsScreen :
- Suppression du DOUBLE modal (Alert dans handleDeleteScan était redondant
avec celui de ScanListItem → 2 modals successifs avant suppression)
→ handleDeleteScan appelle directement deleteScan(id)
- FadeInDown.springify().damping(18) sur header / SearchBar / chaque
date group avec stagger index*60
- Skeleton loading state : 2 groupes simulés (header bar + 3
ScanListItemSkeleton dans une card-loading sans elevation)
DateGroupAccordion :
- Retrait de l'elevation Android sur styles.card → fix le flash "rectangle
blanc + ombre" pendant l'animation FadeInDown du parent. iOS shadow
conservée (composite layer respecte l'opacité)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>