Dampen UI Framework
Framework UI déclaratif pour Rust avec backend Iced, styling avancé, et génération de code.
Dampen permet de définir votre interface utilisateur en XML et de l'afficher via Iced.
Fonctionnalités
- ✅ Definitions XML déclaratives
- ✅ Systeme de styling avancé (themes, classes, styles etat)
- ✅ Design responsive avec breakpoints (mobile, tablet, desktop)
- ✅ Gestionnaires d'evenements type-safe
- ✅ Evaluation d'expressions dans les attributs XML
- ✅ Support complet des widgets Iced (text, buttons, inputs, layouts, etc.)
Installation
Prerequisites
- Rust 1.75 ou superieur (stable)
- Edition 2021 ou 2024
Configuration du projet
[]
= [
"crates/dampen-core",
"crates/dampen-macros",
"crates/dampen-iced",
"crates/dampen-runtime",
"crates/dampen-cli",
]
[]
= "my-app"
= "0.1.0"
= "2021"
[]
= { = "crates/dampen-core" }
= { = "crates/dampen-macros" }
= { = "crates/dampen-iced" }
= "0.14"
= { = "1.0", = ["derive"] }
= "1.0"
Structure du projet
my-app/
├── Cargo.toml
├── src/
│ ├── main.rs # Point d'entree de l'application
│ └── ui/
│ ├── mod.rs # Module UI avec AppState
│ ├── window.rs # Code de la fenêtre
│ └── window.dampen # Definition XML de l'interface
└── target/
Demarrage rapide
Creer un nouveau projet
Utilisez la commande CLI pour scaffold un nouveau projet Dampen :
# Creer un nouveau projet
# Naviguer vers le projet
# Lancer l'application
La commande dampen new cree une structure de projet complete :
my-app/
├── Cargo.toml # Dependencies du projet
├── README.md # Guide de demarrage
├── build.rs # Generation de code (XML → Rust)
├── src/
│ ├── main.rs # Point d'entree de l'application
│ └── ui/
│ ├── mod.rs # Exports du module UI
│ ├── window.rs # Model et handlers avec #[dampen_ui]
│ └── window.dampen # Definition UI declarative (XML)
└── tests/
└── integration.rs # Tests d'integration
Fichiers cles :
| Fichier | Description |
|---|---|
src/ui/window.dampen |
Definition UI XML avec widgets, bindings, handlers |
src/ui/window.rs |
Model avec #[derive(UiModel)], registre handlers |
src/main.rs |
Orchestration application (view, update) |
build.rs |
Compile les fichiers .dampen en code Rust |
Exemple UI genere :
Validation du projet
# Valider la syntaxe XML et les noms de widgets
# Construire le projet
# Inspecter l'IR genere
Structure du projet (manuelle)
Si vous preferez creer le projet manuellement :
my-app/
├── Cargo.toml
├── src/
│ ├── main.rs # Point d'entree de l'application
│ └── ui/
│ ├── mod.rs # Module UI avec AppState
│ ├── window.rs # Code de la fenetre
│ └── window.dampen # Definition XML de l'interface
└── target/
Fonctionnalites avancees
Liaison de donnees (Data Binding)
Gestionnaires d'evenements types
Systeme de theming avance
Classes de style reutilisables
Design responsive avec breakpoints
Widgets disponibles
| Widget | Description | Attributs principaux |
|---|---|---|
text |
Affichage de texte | value, size, weight, color |
button |
Bouton interactif | label, on_click, enabled, class |
text_input |
Champ de saisie | value, on_input, placeholder |
checkbox |
Case a cocher | checked, on_toggle |
toggler |
Interrupteur | active, on_toggle, label |
pick_list |
Liste deroulante | options, selected, on_select |
column |
Layout vertical | spacing, padding, align |
row |
Layout horizontal | spacing, padding, align |
scrollable |
Zone defilement | width, height |
container |
Conteneur | padding, width, height |
for |
Boucle dynamique | each, in |
grid |
Grille | columns, spacing |
progress_bar |
Barre de progression | min, max, value |
svg |
Image SVG | path, width, height |
tooltip |
Infobulle | message, position |
Architecture
Structure des crates
crates/
├── dampen-core/ # Parser XML, IR, traits (sans dependance Iced)
├── dampen-macros/ # Macros #[derive(UiModel)], #[dampen_ui]
├── dampen-runtime/ # Interpretation, gestion d'etat, erreurs
├── dampen-iced/ # Implementation backend Iced
└── dampen-cli/ # CLI developpeur (build, check, inspect)
examples/
├── hello-world/ # Application minimale
├── counter/ # Gestionnaires d'evenements interactifs
├── todo-app/ # Liaison de donnees complete
├── styling/ # Themes et classes de style
├── responsive/ # Design responsive
├── settings/ # Vues multiples
├── widget-showcase/ # Demonstration des widgets
└── builder-demo/ # Patterns widget custom
specs/
└── 001-006-*/ # Specifications techniques
Principes fondamentaux
- Declaratif-First: Le XML est la source de verite pour la structure UI
- Securite de type: Pas d'erasure de type pour les messages/etat
- Production Mode: Code generation statique pour les deploiements
- Backend-agnostic: Le crate core n'a pas de dependance Iced
- Test-First: TDD pour toutes les fonctionnalites
Flux de donnees
XML (main.dampen)
|
v
Parser XML
|
v
DampenDocument
|
v
DampenWidgetBuilder
|
v
Element<Iced>
Exemples
Voir le repertoire examples/ pour des demonstrations progressives :
| Exemple | Fonctionnalites |
|---|---|
| hello-world | Rendu UI statique minimal |
| counter | Gestionnaires d'evenements interactifs |
| todo-app | Liaison de donnees complete avec listes |
| styling | Themes, classes, styles etat |
| responsive | Design responsive avec breakpoints |
| settings | Vues multiples et navigation |
| widget-showcase | Demonstration de tous les widgets |
Commandes CLI
# Generer du code de production
# Valider les fichiers UI sans executer
# Inspecter l'IR ou le code genere
Performance
| Metrique | Cible |
|---|---|
| Parse XML | <10ms pour 1000 widgets |
| Generation de code | <5s pour une application typique |
| Memoire runtime | <50MB de base |
Documentation
- Documentation API - Rustdoc complet
- Reference Schema XML - Widgets et attributs
- Guide de style - Themes, classes, styles etat
- Exemples - Projets examples progressifs
Licence
Ce projet est sous licence Apache 2.0 ou MIT, au choix.
Build avec ❤️ utilisant Rust et Iced