Download apps/admin/src/components/MetaVerificationGuide.tsx from safetrack/edtech: direct link, hf CLI and curl.
- Browser
- Download file 6.09 kB
-
https://huggingface.co/spaces/safetrack/edtech/resolve/main/apps/admin/src/components/MetaVerificationGuide.tsx
- Command line
-
hf download hf://spaces/safetrack/edtech/apps/admin/src/components/MetaVerificationGuide.tsx
-
curl -L -o MetaVerificationGuide.tsx https://huggingface.co/spaces/safetrack/edtech/resolve/main/apps/admin/src/components/MetaVerificationGuide.tsx
6.09 kB
| import { useState } from 'react'; | |
| import { motion, AnimatePresence } from 'framer-motion'; | |
| import { ShieldCheck, FileText, Globe, Zap, ArrowRight, CheckCircle2, ChevronRight, HelpCircle } from 'lucide-react'; | |
| const STEPS = [ | |
| { | |
| id: 'identity', | |
| title: 'Identité de l\'Entreprise', | |
| description: 'Meta doit vérifier que votre école est une entité réelle.', | |
| icon: <FileText className="w-6 h-6" />, | |
| color: 'from-blue-500 to-indigo-600', | |
| details: [ | |
| 'Extrait Kbis ou Registre du Commerce', | |
| 'Facture d\'électricité ou téléphone au nom de l\'école', | |
| 'Le nom doit correspondre EXACTEMENT à celui sur Facebook' | |
| ] | |
| }, | |
| { | |
| id: 'domain', | |
| title: 'Vérification du Domaine', | |
| description: 'Prouvez que vous êtes propriétaire de votre site web.', | |
| icon: <Globe className="w-6 h-6" />, | |
| color: 'from-purple-500 to-pink-600', | |
| details: [ | |
| 'Ajout d\'un code TXT sur votre DNS (ex: Namecheap, LWS)', | |
| 'Ou ajout d\'un fichier HTML sur votre serveur', | |
| 'Indispensable pour la confiance des élèves' | |
| ] | |
| }, | |
| { | |
| id: 'approval', | |
| title: 'Explosion des Limites', | |
| description: 'Passez de 250 à 1000+ conversations par jour.', | |
| icon: <Zap className="w-6 h-6" />, | |
| color: 'from-amber-400 to-orange-500', | |
| details: [ | |
| 'Accès aux statistiques avancées de Meta', | |
| 'Possibilité de diffuser des notifications massives', | |
| 'Validation par Meta sous 48h à 7 jours' | |
| ] | |
| } | |
| ]; | |
| export default function MetaVerificationGuide() { | |
| const [activeStep, setActiveStep] = useState(0); | |
| return ( | |
| <div className="bg-white rounded-[2.5rem] p-10 border border-slate-100 shadow-2xl shadow-indigo-100/50"> | |
| <div className="flex items-center gap-4 mb-10"> | |
| <div className="w-14 h-14 bg-indigo-50 rounded-2xl flex items-center justify-center text-indigo-600"> | |
| <ShieldCheck className="w-8 h-8" /> | |
| </div> | |
| <div> | |
| <h2 className="text-3xl font-black text-slate-900 tracking-tight">Accélérateur de Croissance</h2> | |
| <p className="text-slate-500 font-medium">Guide interactif pour débloquer toute la puissance de WhatsApp</p> | |
| </div> | |
| </div> | |
| <div className="grid md:grid-cols-[1fr_1.5fr] gap-12"> | |
| {/* Sidebar Steps */} | |
| <div className="space-y-4"> | |
| {STEPS.map((step, idx) => ( | |
| <button | |
| key={step.id} | |
| onClick={() => setActiveStep(idx)} | |
| className={`w-full text-left p-6 rounded-3xl transition-all duration-300 relative overflow-hidden group ${ | |
| activeStep === idx | |
| ? 'bg-slate-900 text-white shadow-xl translate-x-2' | |
| : 'bg-slate-50 text-slate-400 hover:bg-slate-100' | |
| }`} | |
| > | |
| <div className="flex items-center gap-4 relative z-10"> | |
| <div className={`p-2 rounded-xl ${activeStep === idx ? 'bg-white/10' : 'bg-white shadow-sm'}`}> | |
| {step.icon} | |
| </div> | |
| <div className="flex-1"> | |
| <h4 className="font-bold text-sm">{step.title}</h4> | |
| {activeStep === idx && ( | |
| <motion.p | |
| initial={{ opacity: 0, height: 0 }} | |
| animate={{ opacity: 1, height: 'auto' }} | |
| className="text-xs text-slate-300 mt-1 font-medium" | |
| > | |
| {step.description} | |
| </motion.p> | |
| )} | |
| </div> | |
| <ChevronRight className={`w-5 h-5 transition-transform ${activeStep === idx ? 'rotate-90' : ''}`} /> | |
| </div> | |
| </button> | |
| ))} | |
| </div> | |
| {/* Content Area */} | |
| <div className="relative min-h-[400px]"> | |
| <AnimatePresence mode="wait"> | |
| <motion.div | |
| key={activeStep} | |
| initial={{ opacity: 0, x: 20 }} | |
| animate={{ opacity: 1, x: 0 }} | |
| exit={{ opacity: 0, x: -20 }} | |
| className="bg-slate-50/50 rounded-[3rem] p-12 border border-white h-full" | |
| > | |
| <div className={`w-20 h-20 bg-gradient-to-br ${STEPS[activeStep].color} rounded-3xl mb-8 flex items-center justify-center text-white shadow-lg`}> | |
| {STEPS[activeStep].icon} | |
| </div> | |
| <h3 className="text-2xl font-black text-slate-900 mb-6">{STEPS[activeStep].title}</h3> | |
| <div className="space-y-6"> | |
| {STEPS[activeStep].details.map((detail, i) => ( | |
| <motion.div | |
| initial={{ opacity: 0, y: 10 }} | |
| animate={{ opacity: 1, y: 0 }} | |
| transition={{ delay: i * 0.1 }} | |
| key={i} | |
| className="flex items-start gap-4" | |
| > | |
| <div className="mt-1 bg-white p-1 rounded-full shadow-sm text-emerald-500"> | |
| <CheckCircle2 className="w-4 h-4" /> | |
| </div> | |
| <p className="text-slate-600 font-medium leading-relaxed">{detail}</p> | |
| </motion.div> | |
| ))} | |
| </div> | |
| <div className="mt-12 pt-8 border-t border-slate-200/50 flex items-center justify-between"> | |
| <div className="flex items-center gap-2 text-indigo-600 font-bold text-sm"> | |
| <HelpCircle className="w-4 h-4" /> | |
| Besoin d'aide ? | |
| </div> | |
| <a | |
| href="https://business.facebook.com/settings/security" | |
| target="_blank" | |
| className={`flex items-center gap-2 bg-gradient-to-r ${STEPS[activeStep].color} text-white px-8 py-4 rounded-2xl font-bold hover:scale-105 transition shadow-lg`} | |
| > | |
| Ouvrir Meta Manager <ArrowRight className="w-4 h-4" /> | |
| </a> | |
| </div> | |
| </motion.div> | |
| </AnimatePresence> | |
| </div> | |
| </div> | |
| </div> | |
| ); | |
| } | |