# PrimeFaces Freya Extension
Extension Quarkus fournissant **43 composants composites** optimisés pour simplifier l'utilisation de PrimeFaces avec le thème **Freya**.
---
## 🎯 Philosophie
Cette extension suit une approche **complète et moderne** :
- ✅ **43 composants prêts à l'emploi** : Formulaires, données, navigation, feedback, layout, etc.
- ✅ **PrimeFaces standard** : Utilise les composants PrimeFaces natifs sous le capot
- ✅ **Réduction du boilerplate** : ~80% moins de code pour les formulaires
- ✅ **Pattern Freya automatique** : Structure `field` appliquée systématiquement
- ✅ **100% Compatible** : Fonctionne avec tout projet Quarkus + PrimeFaces
- ✅ **Optimal** : Correction des bugs d'accessibilité et d'affichage (indicateurs requis)
- ✅ **Design moderne** : Interface responsive avec Tailwind CSS intégré
> **Note importante** : Freya est un **thème**, pas une bibliothèque de composants. Il fournit uniquement FreyaMenu (Java) et des classes CSS. Cette extension ajoute 43 composants composites pour simplifier l'usage des patterns Freya.
---
## 📦 Installation
### Dans un Projet Quarkus
Ajoutez la dépendance dans votre `pom.xml` :
```xml
dev.lions
primefaces-freya-extension
1.0.0-SNAPSHOT
```
### Configuration
Dans `application.properties` :
```properties
# PrimeFaces Configuration
primefaces.THEME=freya
primefaces.FONT_AWESOME=true
primefaces.CLIENT_SIDE_VALIDATION=true
primefaces.MOVE_SCRIPTS_TO_BOTTOM=true
```
---
## 🚀 Utilisation Rapide
### 1. Déclarer le Namespace
```xml
```
### 2. Utiliser les Composants
**Avant (PrimeFaces standard) :**
```xml
` + label + input + message
- Gestion manuelle de l'astérisque requis
**Avec extension :**
- 1 ligne par champ
- Pattern Freya automatique
- Astérisque requis automatique
### 2. Maintenabilité
Si le pattern Freya change (par exemple structure HTML différente), **un seul fichier à modifier** au lieu de centaines de pages.
### 3. Cohérence
Tous les formulaires utilisent **exactement le même pattern**, garantissant une UX uniforme.
### 4. Compatibilité Totale
Les composants utilisent les composants PrimeFaces standards sous le capot, donc :
- ✅ Toutes les fonctionnalités PrimeFaces disponibles
- ✅ Bean Validation supporté
- ✅ AJAX natif
- ✅ Binding bidirectionnel
---
## 🔧 Personnalisation
### Attributs Communs
Tous les composants `fr:field*` supportent :
| Attribut | Type | Défaut | Description |
|----------|------|--------|-------------|
| `id` | String | - | Identifiant du composant |
| `label` | String | - | Label affiché |
| `value` | Object | - | Valeur liée (two-way binding) |
| `required` | Boolean | `false` | Champ obligatoire (affiche astérisque) |
| `disabled` | Boolean | `false` | Désactive le champ |
| `readonly` | Boolean | `false` | Lecture seule |
| `styleClass` | String | - | Classes CSS additionnelles |
### Attributs Spécifiques
Chaque composant a des attributs spécifiques (voir [COMPOSANTS_GUIDE.md](COMPOSANTS_GUIDE.md)) :
- `fr:fieldInput` : `placeholder`, `maxlength`
- `fr:fieldTextarea` : `rows`, `cols`, `autoResize`
- `fr:fieldPassword` : `feedback`, `toggleMask`
- `fr:fieldSelect` : `filter`, `filterMatchMode`
- `fr:fieldCalendar` : `showIcon`, `pattern`, `yearRange`, `mindate`, `maxdate`
- `fr:actionDialog` : `widgetVar`, `header`, `confirmAction`, `confirmUpdate`
---
## 🔄 Intégration Bean Validation
Les composants supportent pleinement Jakarta Bean Validation :
```java
public class User {
@NotBlank(message = "Le nom est obligatoire")
@Size(min = 2, max = 50)
private String nom;
@Email(message = "Email invalide")
private String email;
@Past(message = "Doit être dans le passé")
private LocalDate dateNaissance;
}
```
```xml
```
Les messages de validation s'affichent automatiquement via `
`.
---
## 📋 Technologies
- **Quarkus** : 3.15.1
- **Java** : 17+
- **PrimeFaces** : 14.0.0 (Jakarta)
- **Freya Theme** : 5.0.0
- **Jakarta Faces** : 4.0 (Composite Components)
- **PrimeFlex** : 3.3.1 (Grid système)
---
## 🎯 Bonnes Pratiques
### ✅ DO
- Utiliser `fr:field*` pour tous les champs de formulaire
- Combiner avec PrimeFlex grid (`grid`, `col-*`)
- Grouper les champs dans ``
- Utiliser `fr:actionDialog` pour les dialogs CRUD standard
### ❌ DON'T
- Ne pas imbriquer les composants `fr:field*`
- Ne pas dupliquer les labels (le composant le gère)
- Ne pas oublier `widgetVar` sur `fr:actionDialog`
- Ne pas essayer de wrapper tous les composants PrimeFaces (utiliser les composants natifs quand c'est plus simple)
---
## 🚀 Démarrage Rapide
### 1. Cloner le Projet
```bash
git clone
cd primefaces-freya-extension
```
### 2. Installer Localement
```bash
mvn clean install
```
### 3. Utiliser dans un Projet
```xml
dev.lions
primefaces-freya-extension
1.0.0-SNAPSHOT
```
### 4. Tester la Démo
```bash
cd demo
mvn quarkus:dev
# Ouvrez http://localhost:8080/components-demo.xhtml
```
---
## 📖 Ressources
### Documentation Interne
- [Guide Complet des Composants](COMPOSANTS_GUIDE.md)
- [Analyse Officielle Freya](ANALYSE_OFFICIELLE.md)
- [Guide d'Usage Freya](FREYA_USAGE_GUIDE.md)
### Documentation Externe
- [PrimeFaces 14.0.0](https://primefaces.github.io/primefaces/14_0_0/)
- [Freya Theme](https://freya.primefaces.org/)
- [Jakarta Faces Composite Components](https://jakarta.ee/learn/docs/jakartaee-tutorial/current/web/faces-advanced-cc/)
- [PrimeFlex](https://primeflex.org/)
---
## 📝 License
Le thème Freya est sous **PrimeFaces Commercial License**.
Vérifiez votre licence avant utilisation en production.
---
## 🤝 Contribution
Cette extension a été créée pour l'écosystème Lions mais peut être réutilisée dans tout projet Quarkus + PrimeFaces.
Pour toute question ou suggestion, consultez la documentation complète dans `COMPOSANTS_GUIDE.md`.
---
**Version:** 1.0.0-SNAPSHOT
**Dernière mise à jour:** 2025-12-26
**Composants:** 43 composants composites (Formulaires, Données, Navigation, Actions, Feedback, Utilitaires, Layout, Dialogs)
**Réduction de code:** ~80% sur les formulaires