feat(appel-offre): unification du module appel d'offre vers le design shadcn
Architecture & Navigation
- Module
dashboard/appel-offrealigné sur le design system unifié (purple gradient + neo-shadow) - Routes inchangées :
liste-appel-offre,historiques,recherche-avancee,documents - Fiche détail (
tender-details) et workspace de rédaction de réponse (tender-application) repensés
Module Features
- Liste des appels d'offre migrée vers le pattern shadcn unifié (TableHeadCustom + grid rows + scroll sync)
- Table historique des consultations migrée vers le même pattern
- Recherche avancée : hero violet, filtres iconifiés, Popover multi-select pour Type d'avis
- Espace documents : hero adaptatif (root vs dossier), toolbar shadcn, empty states contextuels
- Cartes dossier et fichier deux-zones (hero violet + bande blanche), pills colorées par type (PDF/DOCX/XLSX/IMG)
Components Architecture
-
liste-appel-offre/view/tender-details.tsx: hero gradient, cards à bandeau violet (bg-[hsl(var(--p-200))]), padding interne harmonisé -
tender-history/view/*: table shadcn + Select inline pour le statut, chips de type marché ring-bordered -
advanced-search/view/*: table shadcn + sections de filtres iconifiées -
staff/document/documents/components/{folder-card,document-card}.tsx: refonte cartes -
tender/application-for-tender/tender-application.tsx: empty states et tokens couleur projet -
tender/tender-docs-editor/*: header gradient + éditeur flat
Key Features
- Hero gradient cohérent :
linear-gradient(135deg, hsl(var(--primary)) → hsl(var(--p-500)) → hsl(var(--p-600))) - Hover 3D sur les cartes (
hover:-translate-y-0.5 hover:shadow-[var(--neo-shadow-md)]) - Empty states adaptatifs (filtre actif / dossier vide / racine vide)
- Tooltip Radix sur le bouton "Résumer avec IA" quand désactivé (label constant)
- Animations de collapse propres avec
overflow: hidden(plus de fuite de contenu) - Fix UX : champ Ancienneté de la fiche véhicule aligné sur le rendu read-only standard
Technical Implementation
- shadcn/ui + Tailwind + CSS variables (
--primary,--p-100..600,--neo-shadow-*) - Lucide React pour toutes les icônes (suppression FontAwesome / MUI icons sur les nouveaux composants)
- framer-motion pour les transitions hero / collapse
- Pattern grid unifié :
buildGridTemplate(COLUMN_MIN_WIDTHS)+useSyncedHorizontalScroll -
shrink-0sur hero + toolbar pour éviter le clipping dans les conteneurs flex à hauteur fixe
Closes VSN-2848