12 KiB
12 KiB
| id | title | sidebar_label |
|---|---|---|
| design-system-summary | 🎨 Design System Veza - Résumé Complet | 🎨 Design System Veza - Résumé Complet |
NOTE: Cette page décrit la CIBLE (but visé).
🎨 Design System Veza - Résumé Complet
Système de design unifié et cohérent pour toutes les interfaces Veza Platform
✅ Livraison Complète
📋 Fichiers Créés
DESIGN_SYSTEM.md- Documentation complète du design systemveza-frontend/tailwind.config.js- Configuration Tailwind avec toutes les variablesveza-frontend/src/components/DesignSystem/- Kit de composants ReactButton.tsx- Composant bouton avec toutes les variantesInput.tsx- Composant input avec tous les types et étatsCard.tsx- Composant carte avec options avancéesModal.tsx- Composant modal avec gestion complèteDesignSystemDemo.tsx- Page de démonstration interactiveindex.ts- Export centralisé des composantsREADME.md- Guide d'utilisation détaillé
🎯 Identité Visuelle Veza
Vision
- Plateforme musicale collaborative moderne
- Interface créative pour artistes et producteurs
- Technologies avancées (IA, streaming temps réel)
- Accessibilité et inclusivité
Inspiration
- Spotify - Interface audio moderne et intuitive
- Discord - Collaboration temps réel et communauté
- SoundCloud - Découverte et partage musical
- Figma - Outils créatifs professionnels
🎨 Palette de Couleurs
Mode Sombre (Principal)
/* Couleurs Principales */
--veza-primary-500: #0ea5e9; /* Bleu/Violet créatif */
--veza-secondary-500: #d946ef; /* Violet/Purple créatif */
--veza-accent-500: #f97316; /* Orange/Ambre énergique */
/* Couleurs de Fond */
--veza-bg-primary: #0f0f23; /* Fond principal */
--veza-bg-secondary: #1a1a2e; /* Fond secondaire */
--veza-bg-surface: #1f2937; /* Surfaces (cards) */
--veza-bg-elevated: #374151; /* Surfaces élevées */
/* Couleurs de Texte */
--veza-text-primary: #ffffff; /* Texte principal */
--veza-text-secondary: #e5e7eb; /* Texte secondaire */
--veza-text-muted: #6b7280; /* Texte atténué */
/* Couleurs d'État */
--veza-success-500: #10b981; /* Succès */
--veza-warning-500: #f59e0b; /* Avertissement */
--veza-error-500: #ef4444; /* Erreur */
--veza-info-500: #3b82f6; /* Information */
Mode Clair (Alternative)
/* Couleurs de Fond */
--veza-light-bg-primary: #ffffff;
--veza-light-bg-secondary: #f9fafb;
--veza-light-bg-surface: #ffffff;
/* Couleurs de Texte */
--veza-light-text-primary: #111827;
--veza-light-text-secondary: #374151;
--veza-light-text-muted: #9ca3af;
🖋 Typographie
Police Principale
font-family: 'Inter', system-ui, -apple-system, sans-serif;
Hiérarchie Typographique
/* Titres */
.text-veza-h1 /* 3rem / 700 / -0.025em */
.text-veza-h2 /* 2.25rem / 600 / -0.025em */
.text-veza-h3 /* 1.875rem / 600 */
.text-veza-h4 /* 1.5rem / 600 */
.text-veza-h5 /* 1.25rem / 600 */
.text-veza-h6 /* 1.125rem / 600 */
/* Corps de Texte */
.text-veza-body /* 1rem / 400 / 1.6 */
.text-veza-body-large /* 1.125rem / 400 / 1.6 */
.text-veza-body-small /* 0.875rem / 400 / 1.5 */
.text-veza-caption /* 0.75rem / 400 / 1.4 */
/* Interface */
.text-veza-button /* 0.875rem / 500 / 1.4 */
.text-veza-input /* 0.875rem / 400 / 1.4 */
.text-veza-label /* 0.875rem / 500 / 1.4 */
🔲 Composants UI
Button
// Variantes
<Button variant="primary">Primary</Button>
<Button variant="secondary">Secondary</Button>
<Button variant="ghost">Ghost</Button>
<Button variant="danger">Danger</Button>
<Button variant="success">Success</Button>
<Button variant="warning">Warning</Button>
// Tailles
<Button size="sm">Small</Button>
<Button size="md">Medium</Button>
<Button size="lg">Large</Button>
<Button size="xl">Extra Large</Button>
// États
<Button disabled>Disabled</Button>
<Button loading>Loading</Button>
// Avec icône
<Button icon="🎵">With Icon</Button>
<Button icon="🎵" iconPosition="right">Icon Right</Button>
Input
// Types
<Input type="text" placeholder="Texte simple" />
<Input type="email" placeholder="email@exemple.com" />
<Input type="password" placeholder="Mot de passe" />
<Input type="search" placeholder="Rechercher..." />
// Avec label et icône
<Input
label="Email"
type="email"
placeholder="email@exemple.com"
icon="📧"
/>
// États
<Input error="Ce champ est requis" />
<Input success helperText="Champ validé" />
<Input disabled />
<Input required />
Card
// Card de base
<Card title="Titre" subtitle="Sous-titre">
<p>Contenu de la carte</p>
</Card>
// Card interactive
<Card
title="Interactive"
interactive
onClick={() => console.log('Clicked!')}
>
<p>Cliquez pour voir l'effet</p>
</Card>
// Card avec gradient
<Card title="Gradient" gradient>
<p>Card avec dégradé</p>
</Card>
// Card avec header/footer personnalisés
<Card
header={<div>Header personnalisé</div>}
footer={<div>Footer personnalisé</div>}
>
<p>Contenu</p>
</Card>
Modal
const [isOpen, setIsOpen] = useState(false);
<Modal
isOpen={isOpen}
onClose={() => setIsOpen(false)}
title="Titre de la modal"
size="lg"
footer={
<div className="flex justify-end space-x-2">
<Button variant="ghost" onClick={() => setIsOpen(false)}>
Annuler
</Button>
<Button onClick={() => setIsOpen(false)}>
Confirmer
</Button>
</div>
}
>
<p>Contenu de la modal</p>
</Modal>
🎛 Animations et Micro-interactions
Animations CSS
/* Apparition */
@keyframes fadeIn {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
/* Glissement */
@keyframes slideIn {
from { opacity: 0; transform: translateX(-20px); }
to { opacity: 1; transform: translateX(0); }
}
/* Vague */
@keyframes wave {
0%, 100% { transform: rotate(0deg); }
25% { transform: rotate(20deg); }
75% { transform: rotate(-20deg); }
}
/* Flottement */
@keyframes float {
0%, 100% { transform: translateY(0px); }
50% { transform: translateY(-10px); }
}
/* Lueur */
@keyframes glow {
0% { box-shadow: 0 0 5px rgba(14, 165, 233, 0.5); }
100% { box-shadow: 0 0 20px rgba(14, 165, 233, 0.8); }
}
Classes d'Animation
.animate-fade-in /* Apparition en fondu */
.animate-slide-in /* Glissement depuis la gauche */
.animate-pulse /* Pulsation */
.animate-wave /* Animation de vague */
.animate-float /* Flottement */
.animate-glow /* Effet de lueur */
Transitions
.transition-veza /* Transition générale */
.transition-veza-colors /* Transition des couleurs */
.transition-veza-transform /* Transition des transformations */
🌗 Thèmes et Modes
Variables CSS pour les Thèmes
/* Mode Sombre (Par défaut) */
[data-theme="dark"] {
--veza-bg-primary: #0f0f23;
--veza-bg-secondary: #1a1a2e;
--veza-bg-surface: #1f2937;
--veza-text-primary: #ffffff;
--veza-text-secondary: #e5e7eb;
--veza-border-color: #374151;
}
/* Mode Clair */
[data-theme="light"] {
--veza-bg-primary: #ffffff;
--veza-bg-secondary: #f9fafb;
--veza-bg-surface: #ffffff;
--veza-text-primary: #111827;
--veza-text-secondary: #374151;
--veza-border-color: #e5e7eb;
}
Composant de Toggle de Thème
const ThemeToggle: React.FC = () => {
const [theme, setTheme] = useState<'light' | 'dark'>('dark');
const toggleTheme = () => {
const newTheme = theme === 'dark' ? 'light' : 'dark';
setTheme(newTheme);
document.documentElement.setAttribute('data-theme', newTheme);
};
return (
<button
onClick={toggleTheme}
className="p-2 rounded-lg bg-veza-bg-surface border border-veza-border-color text-veza-text-primary hover:bg-veza-bg-elevated transition-colors duration-200"
>
{theme === 'dark' ? '☀️' : '🌙'}
</button>
);
};
📱 Responsive Design
Breakpoints
xs: 475px
sm: 640px
md: 768px
lg: 1024px
xl: 1280px
2xl: 1536px
3xl: 1600px
4xl: 1920px
Classes Utilitaires
.container-responsive /* Container responsive */
.grid-responsive /* Grid responsive */
.flex-responsive /* Flex responsive */
🎯 Principes de Design
1. Cohérence
- Utilisez toujours les composants du design system
- Respectez la hiérarchie typographique
- Maintenez les espacements cohérents
2. Accessibilité
- Utilisez les contrastes appropriés
- Ajoutez des états de focus
- Incluez des labels et descriptions
3. Performance
- Optimisez les animations
- Utilisez les transitions CSS
- Évitez les re-renders inutiles
4. Responsive
- Testez sur tous les écrans
- Utilisez les breakpoints appropriés
- Adaptez le contenu mobile
🚀 Utilisation
Import des Composants
import { Button, Input, Card, Modal } from '@/components/DesignSystem';
Exemple d'Utilisation
function MyComponent() {
const [isModalOpen, setIsModalOpen] = useState(false);
return (
<div className="p-6 bg-veza-gradient-primary min-h-screen">
<Card title="Mon Composant" subtitle="Exemple d'utilisation">
<div className="space-y-4">
<Input
label="Nom"
placeholder="Entrez votre nom"
icon="👤"
/>
<Input
label="Email"
type="email"
placeholder="email@exemple.com"
icon="📧"
required
/>
<div className="flex justify-end space-x-2">
<Button variant="ghost" onClick={() => setIsModalOpen(false)}>
Annuler
</Button>
<Button variant="primary" onClick={() => setIsModalOpen(true)}>
Confirmer
</Button>
</div>
</div>
</Card>
<Modal
isOpen={isModalOpen}
onClose={() => setIsModalOpen(false)}
title="Confirmation"
size="md"
>
<p className="text-veza-body text-veza-text-secondary">
Êtes-vous sûr de vouloir continuer ?
</p>
</Modal>
</div>
);
}
📚 Documentation
Fichiers de Documentation
DESIGN_SYSTEM.md- Documentation complèteveza-frontend/src/components/DesignSystem/README.md- Guide d'utilisationveza-frontend/src/components/DesignSystem/DesignSystemDemo.tsx- Démonstration interactive
Configuration
veza-frontend/tailwind.config.js- Configuration Tailwind avec toutes les variables
🧪 Tests et Validation
Tests Visuels
- Page de démonstration interactive
- Tous les composants testés
- Responsive design validé
- Animations optimisées
Tests d'Accessibilité
- Contrastes respectés
- États de focus définis
- Labels et descriptions inclus
- Navigation clavier supportée
🔄 Maintenance
Mise à Jour des Composants
- Modifier le composant dans
src/components/DesignSystem/ - Mettre à jour la documentation
- Tester sur tous les projets
- Déployer les changements
Ajout de Nouveaux Composants
- Créer le composant dans
src/components/DesignSystem/ - Ajouter les types TypeScript
- Documenter l'utilisation
- Ajouter aux tests
- Mettre à jour l'index
✅ Statut Final
✅ Complété
- Design System complet avec palette de couleurs
- Typographie hiérarchisée avec toutes les tailles
- Composants React (Button, Input, Card, Modal)
- Animations CSS optimisées
- Configuration Tailwind avec toutes les variables
- Documentation complète avec exemples
- Page de démonstration interactive
- Modes clair/sombre supportés
- Responsive design validé
- Accessibilité respectée
🎯 Prêt pour la Refonte UI
Le design system est maintenant 100% prêt pour être utilisé comme base absolue pour toute la refonte UI/UX de Veza Platform. Toutes les interfaces (web, desktop, mobile) peuvent maintenant s'appuyer sur ce système cohérent.
Dernière mise à jour : $(date) Version : 1.0.0 Statut : ✅ Design System Complet et Prêt