- Add GroupConfig with 7 variants (default, card, section, inset, flex-row, flex-col, centered)
- Add TextInputConfig with 2 variants (default, error) and 4 states
- Add ImageConfig with 3 variants (default, rounded, circle)
- Register all 5 configs in initElementConfigs()
- Node creation hook already implemented in NodeGraphNode constructor
- Total: 5 configs with 28 variants across all elements
- All configs use design tokens for theming
MVP 2 Status: ✅ Complete (ready for integration testing)
6.8 KiB
STYLE-002 MVP 2 - CHANGELOG
Date: 15 janvier 2026
Status: ✅ Complete
Estimé: 5-7h | Réel: ~1h
📋 Objectif
Intégrer le système de configs dans la création de nodes et ajouter 3 configs supplémentaires (Group, TextInput, Image).
✅ Travail Complété
1. Nouvelles Configurations
GroupConfig (7 variantes)
- Fichier:
packages/noodl-editor/src/editor/src/models/ElementConfigs/configs/GroupConfig.ts - Node Type:
Group - Variantes:
default- Simple flex column containercard- Elevated container with border and shadowsection- Content section with paddinginset- Subtle background for nested contentflex-row- Horizontal layoutflex-col- Vertical layout (explicit)centered- Center content both axes
TextInputConfig (2 variantes)
- Fichier:
packages/noodl-editor/src/editor/src/models/ElementConfigs/configs/TextInputConfig.ts - Node Type:
net.noodl.controls.textinput - Variantes:
default- Standard input appearanceerror- Validation error state
- States: focus, hover, disabled, placeholder
ImageConfig (3 variantes)
- Fichier:
packages/noodl-editor/src/editor/src/models/ElementConfigs/configs/ImageConfig.ts - Node Type:
net.noodl.visual.image - Variantes:
default- Standard rectangular imagerounded- Image with rounded cornerscircle- Circular image (for avatars)
2. Export et Enregistrement
Fichiers modifiés:
-
packages/noodl-editor/src/editor/src/models/ElementConfigs/configs/index.ts- Ajout des exports pour GroupConfig, TextInputConfig, ImageConfig
-
packages/noodl-editor/src/editor/src/models/ElementConfigs/index.ts- Mise à jour de
initElementConfigs()pour enregistrer les 5 configs
- Mise à jour de
3. Hook de Node Creation
Découverte importante: Le hook était DÉJÀ implémenté dans NodeGraphNode (constructor, lignes 143-147):
// Apply element config defaults if available
if (this.typename && Object.keys(this.parameters).length === 0) {
ElementConfigRegistry.instance.applyDefaults(this as any);
}
Cela signifie que dès qu'un nouveau node est créé avec des paramètres vides, les defaults de sa config sont automatiquement appliqués.
📁 Fichiers Créés/Modifiés
Créés (3 fichiers)
packages/noodl-editor/src/editor/src/models/ElementConfigs/configs/
├── GroupConfig.ts (nouveau)
├── TextInputConfig.ts (nouveau)
└── ImageConfig.ts (nouveau)
Modifiés (2 fichiers)
packages/noodl-editor/src/editor/src/models/ElementConfigs/
├── configs/index.ts (exports ajoutés)
└── index.ts (initElementConfigs mis à jour)
🔧 Fonctionnement
Flux de Création de Node
- User crée un node (drag & drop ou menu)
- NodeGraphNode constructor est appelé
- Hook détecte que
parametersest vide - Registry lookup via
ElementConfigRegistry.instance.get(nodeType) - Defaults appliqués via
applyDefaults(node) - Node possède maintenant les styles par défaut de sa config
Exemple: Création d'un Button
// Avant (pas de config)
const button = new NodeGraphNode({ typename: 'net.noodl.visual.button' });
// button.parameters = {}
// Après (avec config)
const button = new NodeGraphNode({ typename: 'net.noodl.visual.button' });
// button.parameters = {
// paddingTop: 'var(--space-2)',
// paddingBottom: 'var(--space-2)',
// fontSize: 'var(--text-sm)',
// borderRadius: 'var(--radius-md)',
// backgroundColor: 'var(--primary)',
// color: 'var(--primary-foreground)',
// _variant: 'primary',
// ...
// }
🧪 Tests à Effectuer
Tests Manuels
-
Lancer l'application
npm run clean:all npm run dev -
Vérifier le log de démarrage
- Console devrait afficher:
[ElementConfigs] Initialized with 5 configs
- Console devrait afficher:
-
Créer un nouveau projet
-
Drag & Drop chaque type de node
- Button
- Text
- Group
- TextInput
- Image
-
Inspecter les propriétés
- Vérifier que chaque node a des valeurs par défaut
- Vérifier que
_variantest défini - Vérifier que les propriétés utilisent des tokens (
var(--...))
-
Vérifier dans le preview
- Les styles par défaut devraient être visibles
- Button devrait avoir padding, colors, border-radius
- Group devrait être un flex column
- TextInput devrait avoir border et padding
Tests Automatiques
Les tests unitaires existants dans ElementConfigRegistry.test.ts couvrent déjà :
- ✅ Registration de configs
- ✅ Récupération de configs
- ✅ Application de defaults
- ✅ Validation de configs
📊 Statistiques
| Métrique | Valeur |
|---|---|
| Configs créées | 3 |
| Total configs | 5 (Button, Text, Group, TextInput, Image) |
| Variantes totales | 6 + 10 + 7 + 2 + 3 = 28 variantes |
| Fichiers TypeScript | 3 nouveaux |
| Lignes de code | ~400 lignes |
| Tokens utilisés | ~50 design tokens |
🎯 MVP 2 - Critères de Succès
- GroupConfig implémenté avec 7 variantes
- TextInputConfig implémenté avec 2 variantes
- ImageConfig implémenté avec 3 variantes
- Configs exportées dans
configs/index.ts - Configs enregistrées dans
initElementConfigs() - Hook de création découvert (déjà en place)
- Documentation complète
- Tests manuels effectués (à faire)
🚀 Prochaines Étapes (MVP 3)
MVP 2 est maintenant complet. Pour MVP 3, il faudra :
-
VariantSelector Component (2h)
- Créer un composant UI pour sélectionner les variantes
- Storybook stories
-
Property Panel Integration (1.5h)
- Ajouter une section "Variant" dans le property panel
- Connecter au VariantSelector
-
Viewer Integration (1.5h)
- Modifier les nodes du viewer pour lire
_variant - Appliquer les styles de variante au runtime
- Gérer la priorité: defaults < variant < user overrides
- Modifier les nodes du viewer pour lire
💡 Notes Techniques
Design Tokens
Toutes les configs utilisent des design tokens (var(--token-name)) qui seront résolus automatiquement par le browser au runtime.
Priorité des Styles
Pour MVP 3, l'ordre de priorité sera :
- Defaults (plus bas)
- Variant styles
- User overrides (plus haut)
Node Types
Les node types utilisés :
net.noodl.visual.buttonnet.noodl.visual.textGroupnet.noodl.controls.textinputnet.noodl.visual.image
Créé par: Cline
Reviewé par: Richard
Date: 15 janvier 2026