From 1a05b22242c6f95727cf8c8fba078ae1b27e0fe7 Mon Sep 17 00:00:00 2001 From: Julien Froidefond Date: Fri, 22 Aug 2025 14:03:45 +0200 Subject: [PATCH] style: update UI components for improved visual consistency and interactivity - Enhanced AdminOverviewCards with gradient backgrounds and updated hover effects for better user engagement. - Introduced a utility function to dynamically assign colors based on direction in DirectionOverview, improving maintainability. - Updated TeamStatsRow with gradient backgrounds and refined text colors for better readability and aesthetics. - Overall improvements to component styling for a more cohesive look across the admin interface. --- .../admin/overview/admin-overview-cards.tsx | 50 ++++---- .../admin/overview/direction-overview.tsx | 107 +++++++++++++----- .../admin/team-detail/team-stats-row.tsx | 28 ++--- 3 files changed, 116 insertions(+), 69 deletions(-) diff --git a/components/admin/overview/admin-overview-cards.tsx b/components/admin/overview/admin-overview-cards.tsx index 58d6fe6..ce0d11a 100644 --- a/components/admin/overview/admin-overview-cards.tsx +++ b/components/admin/overview/admin-overview-cards.tsx @@ -29,12 +29,12 @@ export function AdminOverviewCards({ return (
-
+
-
- +
+
-
+
{hasFilters ? "FILTRÉES" : "TOTAL"}
@@ -42,23 +42,21 @@ export function AdminOverviewCards({

{hasFilters ? getFilteredTeamStats().length : teams.length}

-

+

{hasFilters ? "Équipes filtrées" : "Équipes"}

{hasFilters && ( -

- sur {teams.length} au total -

+

sur {teams.length} au total

)}
-
+
-
- +
+
-
+
{hasFilters ? "FILTRÉS" : "TOTAL"}
@@ -71,11 +69,11 @@ export function AdminOverviewCards({ ) : teamStats.reduce((sum, t) => sum + t.totalMembers, 0)}

-

+

{hasFilters ? "Membres filtrés" : "Membres"}

{hasFilters && ( -

+

sur {teamStats.reduce((sum, t) => sum + t.totalMembers, 0)} au total

@@ -83,12 +81,12 @@ export function AdminOverviewCards({
-
+
-
- +
+
-
+
{hasFilters ? "FILTRÉES" : "TOTAL"}
@@ -98,23 +96,23 @@ export function AdminOverviewCards({ ? getFilteredDirectionStats().length : directionStats.length}

-

+

{hasFilters ? "Directions filtrées" : "Directions"}

{hasFilters && ( -

+

sur {directionStats.length} au total

)}
-
+
-
- +
+
-
RÉFÉRENTIEL
+
RÉFÉRENTIEL

@@ -123,8 +121,8 @@ export function AdminOverviewCards({ 0 )}

-

Compétences suivies

-

+

Compétences suivies

+

{skillCategories.length} catégories

diff --git a/components/admin/overview/direction-overview.tsx b/components/admin/overview/direction-overview.tsx index 98cc564..1baa7ec 100644 --- a/components/admin/overview/direction-overview.tsx +++ b/components/admin/overview/direction-overview.tsx @@ -25,6 +25,51 @@ interface DirectionOverviewProps { onExportTeamReport?: (team: any) => void; } +// Fonction pour obtenir les couleurs de direction +function getDirectionColors(direction: string) { + const directionLower = direction.toLowerCase(); + if (directionLower.includes("tech") || directionLower.includes("dev")) { + return { + header: "from-blue-600/30 to-cyan-600/30", + border: "border-blue-500/40", + icon: "bg-blue-500/20 border-blue-500/30", + }; + } else if ( + directionLower.includes("design") || + directionLower.includes("ux") + ) { + return { + header: "from-purple-600/30 to-pink-600/30", + border: "border-purple-500/40", + icon: "bg-purple-500/20 border-purple-500/30", + }; + } else if ( + directionLower.includes("data") || + directionLower.includes("analytics") + ) { + return { + header: "from-emerald-600/30 to-teal-600/30", + border: "border-emerald-500/40", + icon: "bg-emerald-500/20 border-emerald-500/30", + }; + } else if ( + directionLower.includes("security") || + directionLower.includes("sec") + ) { + return { + header: "from-red-600/30 to-orange-600/30", + border: "border-red-500/40", + icon: "bg-red-500/20 border-red-500/30", + }; + } else { + return { + header: "from-purple-600/30 to-blue-600/30", + border: "border-purple-500/40", + icon: "bg-purple-500/20 border-purple-500/30", + }; + } +} + export function DirectionOverview({ direction, teams, @@ -34,27 +79,31 @@ export function DirectionOverview({ onViewTeamDetails = () => {}, onExportTeamReport = () => {}, }: DirectionOverviewProps) { + const colors = getDirectionColors(direction); + return ( -
-
+
+
-
- +
+

Direction {direction}

-
- - +
+ + {totalMembers}
-
- +
+ Niveau: {getSkillLevelLabel(averageSkillLevel)}
@@ -66,10 +115,10 @@ export function DirectionOverview({ {/* Direction Metrics */}
{/* Top Categories */} -
+
- -

+ +

Top Catégories

@@ -77,7 +126,7 @@ export function DirectionOverview({ {topCategories.slice(0, 4).map((cat, idx) => (
{cat.category}
@@ -86,7 +135,7 @@ export function DirectionOverview({ cat.averageLevel )}`} /> - + {cat.averageLevel.toFixed(1)}
@@ -96,41 +145,41 @@ export function DirectionOverview({
{/* Overall Progress */} -
+
- -

+ +

Progression Globale

- + Maîtrise globale: {((averageSkillLevel / 3) * 100).toFixed(0)}%
-
+
-
+
Basé sur {teams.length} équipes
{/* Team Distribution */} -
+
- -

+ +

Répartition

@@ -139,17 +188,17 @@ export function DirectionOverview({
{teams.length}
-
équipes actives
+
équipes actives
- Membres par équipe: + Membres par équipe: {(totalMembers / teams.length).toFixed(1)}
- Équipes performantes: + Équipes performantes: {teams.filter((t) => t.averageSkillLevel > 2).length} @@ -162,8 +211,8 @@ export function DirectionOverview({ {/* Teams List */}
-
- +
+

Équipes de la direction diff --git a/components/admin/team-detail/team-stats-row.tsx b/components/admin/team-detail/team-stats-row.tsx index 22fbe7d..48392fb 100644 --- a/components/admin/team-detail/team-stats-row.tsx +++ b/components/admin/team-detail/team-stats-row.tsx @@ -81,7 +81,7 @@ export function TeamStatsRow({ onViewReport, }: TeamStatsRowProps) { return ( -
+
{/* Layout horizontal compact */}
{/* Informations de base */} @@ -90,10 +90,10 @@ export function TeamStatsRow({

{teamName}

-
+
- - {totalMembers} + + {totalMembers}
@@ -101,14 +101,14 @@ export function TeamStatsRow({ {/* Mini barre de progression */}
- Niveau - + Niveau + {((averageSkillLevel / 3) * 100).toFixed(0)}%
-
+
{averageSkillLevel.toFixed(1)}
-
/ 3.0
+
/ 3.0
{skillCoverage.toFixed(0)}%
-
Couv.
+
Couv.
@@ -172,7 +172,7 @@ export function TeamStatsRow({ {topSkills.slice(0, 3).map((skill, idx) => (
@@ -192,7 +192,7 @@ export function TeamStatsRow({ variant="outline" size="sm" onClick={onViewReport} - className="h-8 px-3 bg-white/5 border-white/20 text-white hover:bg-white/10 hover:border-white/30" + className="h-8 px-3 bg-slate-700/50 border-slate-500/40 text-white hover:bg-slate-600/60 hover:border-slate-400/50 shadow-sm" > @@ -200,7 +200,7 @@ export function TeamStatsRow({ variant="outline" size="sm" onClick={onViewDetails} - className="h-8 px-3 bg-white/5 border-white/20 text-white hover:bg-white/10 hover:border-white/30" + className="h-8 px-3 bg-slate-700/50 border-slate-500/40 text-white hover:bg-slate-600/60 hover:border-slate-400/50 shadow-sm" >