feature-showcase.tsx 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. "use client"
  2. import { useState } from "react"
  3. import { Card, CardContent } from "@/components/ui/card"
  4. import { Badge } from "@/components/ui/badge"
  5. import { Users, BarChart3, Clock, Shield } from "lucide-react"
  6. const features = [
  7. {
  8. id: "dashboard",
  9. title: "Dashboard Administrativo",
  10. description: "Panel de control completo con métricas en tiempo real",
  11. icon: BarChart3,
  12. image: "/university-admin-dashboard.png",
  13. badge: "Más Popular",
  14. },
  15. {
  16. id: "attendance",
  17. title: "Control de Asistencia",
  18. description: "Registro intuitivo y seguimiento detallado de asistencia",
  19. icon: Clock,
  20. image: "/attendance-interface.png",
  21. badge: "Nuevo",
  22. },
  23. {
  24. id: "users",
  25. title: "Gestión de Usuarios",
  26. description: "Administración completa de estudiantes y docentes",
  27. icon: Users,
  28. image: "/user-management-interface.png",
  29. badge: null,
  30. },
  31. {
  32. id: "security",
  33. title: "Seguridad Avanzada",
  34. description: "Sistema de roles y permisos granulares",
  35. icon: Shield,
  36. image: "/security-settings-interface.png",
  37. badge: "Empresarial",
  38. },
  39. ]
  40. export function FeatureShowcase() {
  41. const [activeFeature, setActiveFeature] = useState("dashboard")
  42. const currentFeature = features.find((f) => f.id === activeFeature) || features[0]
  43. return (
  44. <div className="grid lg:grid-cols-2 gap-12 items-center">
  45. <div className="space-y-6">
  46. <div className="space-y-4">
  47. {features.map((feature) => {
  48. const Icon = feature.icon
  49. const isActive = activeFeature === feature.id
  50. return (
  51. <Card
  52. key={feature.id}
  53. className={`cursor-pointer transition-all duration-300 hover:shadow-lg ${
  54. isActive ? "ring-2 ring-primary shadow-lg" : ""
  55. }`}
  56. onClick={() => setActiveFeature(feature.id)}
  57. >
  58. <CardContent className="p-6">
  59. <div className="flex items-start gap-4">
  60. <div
  61. className={`p-3 rounded-lg transition-colors ${
  62. isActive ? "bg-primary text-primary-foreground" : "bg-muted"
  63. }`}
  64. >
  65. <Icon className="w-6 h-6" />
  66. </div>
  67. <div className="flex-1">
  68. <div className="flex items-center gap-2 mb-2">
  69. <h3 className="font-semibold text-lg">{feature.title}</h3>
  70. {feature.badge && (
  71. <Badge variant={isActive ? "default" : "secondary"} className="text-xs">
  72. {feature.badge}
  73. </Badge>
  74. )}
  75. </div>
  76. <p className="text-muted-foreground">{feature.description}</p>
  77. </div>
  78. </div>
  79. </CardContent>
  80. </Card>
  81. )
  82. })}
  83. </div>
  84. </div>
  85. <div className="relative">
  86. <div className="relative overflow-hidden rounded-xl shadow-2xl bg-gradient-to-br from-primary/5 to-accent/5 p-1">
  87. <img
  88. src={currentFeature.image || "/placeholder.svg"}
  89. alt={currentFeature.title}
  90. className="w-full h-auto rounded-lg transition-all duration-500"
  91. />
  92. <div className="absolute inset-0 bg-gradient-to-t from-black/20 to-transparent rounded-lg" />
  93. </div>
  94. {/* Floating elements for visual appeal */}
  95. <div className="absolute -top-4 -right-4 w-20 h-20 bg-primary/10 rounded-full blur-xl animate-pulse" />
  96. <div className="absolute -bottom-4 -left-4 w-16 h-16 bg-accent/10 rounded-full blur-xl animate-pulse delay-1000" />
  97. </div>
  98. </div>
  99. )
  100. }