/
This commit is contained in:
41
.gemini/skills/frontend-creator/SKILL.md
Normal file
41
.gemini/skills/frontend-creator/SKILL.md
Normal file
@@ -0,0 +1,41 @@
|
||||
---
|
||||
name: frontend-creator
|
||||
description: Spécialisé dans la création et l'amélioration du frontend (HTML/CSS/JS Vanilla) de Linux BenchTools. Utilisez ce skill pour ajouter des fonctionnalités UI, améliorer le design (Monokai), corriger des bugs JS ou intégrer des endpoints API dans l'interface.
|
||||
---
|
||||
|
||||
# Frontend Creator - Linux BenchTools
|
||||
|
||||
Ce skill guide la modification et l'évolution de l'interface utilisateur de Linux BenchTools.
|
||||
|
||||
## Principes de Développement
|
||||
|
||||
1. **Vanilla JS uniquement** : Ne pas introduire de frameworks lourds (React, Vue, etc.). Utiliser les API standard du navigateur.
|
||||
2. **Rendu par template strings** : Le HTML est généré dynamiquement en JS via des template strings.
|
||||
3. **Thème Monokai** : Respecter les variables de couleur et le style "Dark Mode" établi.
|
||||
4. **Modularité** : Utiliser les classes globales partagées (`window.BenchAPI`, `window.BenchUtils`, `window.IconManager`).
|
||||
|
||||
## Ressources de Référence
|
||||
|
||||
Consultez ces fichiers pour des détails spécifiques :
|
||||
|
||||
- **Design & Styles** : Voir [css_variables.md](references/css_variables.md) pour les couleurs et variables de layout.
|
||||
- **Communication API** : Voir [api_usage.md](references/api_usage.md) pour savoir comment appeler le backend.
|
||||
- **Patterns UI** : Voir [ui_patterns.md](references/ui_patterns.md) pour les fonctions de rendu et la gestion des icônes.
|
||||
|
||||
## Workflows Typiques
|
||||
|
||||
### Ajouter un bouton d'action
|
||||
1. Localiser la fonction `render...` appropriée dans le fichier JS (ex: `devices.js`).
|
||||
2. Ajouter le HTML du bouton dans le template string (utiliser les classes `.icon-btn` ou `.btn`).
|
||||
3. Ajouter un `addEventListener` dans la fonction d'initialisation (souvent `bindDetailActions` ou similaire).
|
||||
|
||||
### Créer une nouvelle page
|
||||
1. Créer le fichier HTML dans `frontend/`.
|
||||
2. Inclure les CSS de base (`main.css`, `monokai.css`, `variables.css`).
|
||||
3. Inclure les JS globaux (`js/api.js`, `js/utils.js`, `js/icon-manager.js`).
|
||||
4. Créer un fichier JS dédié pour la logique de la page.
|
||||
|
||||
## Vérifications Post-Modification
|
||||
- Vérifier que les icônes s'affichent (appel à `IconManager.inlineSvgIcons`).
|
||||
- Vérifier la compatibilité mobile (responsive).
|
||||
- Tester les cas d'erreur API (affichage de toast ou message d'erreur).
|
||||
29
.gemini/skills/frontend-creator/references/api_usage.md
Normal file
29
.gemini/skills/frontend-creator/references/api_usage.md
Normal file
@@ -0,0 +1,29 @@
|
||||
# Utilisation de l'API (Client JS)
|
||||
|
||||
Le frontend utilise une classe globale `BenchAPI` (instanciée sous `window.BenchAPI` ou `apiClient`).
|
||||
|
||||
## Client API Global
|
||||
Le client est défini dans `js/api.js`.
|
||||
|
||||
### Méthodes Communes
|
||||
- `getDevices(params)` : Liste les appareils.
|
||||
- `getDevice(deviceId)` : Détails d'un appareil.
|
||||
- `updateDevice(deviceId, data)` : Met à jour un appareil.
|
||||
- `getDeviceBenchmarks(deviceId, params)` : Historique des benchmarks.
|
||||
- `uploadDocument(deviceId, file, docType)` : Upload d'image ou PDF.
|
||||
|
||||
### Exemple d'appel
|
||||
```javascript
|
||||
const apiClient = window.BenchAPI;
|
||||
|
||||
try {
|
||||
const devices = await apiClient.getDevices();
|
||||
// Traiter les données
|
||||
} catch (error) {
|
||||
console.error("Erreur API:", error);
|
||||
}
|
||||
```
|
||||
|
||||
## Gestion des Erreurs
|
||||
L'API renvoie des erreurs détaillées. Utilisez `error.message` pour l'affichage à l'utilisateur.
|
||||
Le module `utils.js` (sous `window.BenchUtils`) propose des méthodes comme `showToast` ou `showError`.
|
||||
46
.gemini/skills/frontend-creator/references/css_variables.md
Normal file
46
.gemini/skills/frontend-creator/references/css_variables.md
Normal file
@@ -0,0 +1,46 @@
|
||||
# Variables CSS (Thème)
|
||||
|
||||
Le projet utilise des variables CSS pour maintenir une cohérence visuelle.
|
||||
|
||||
## Variables de Layout
|
||||
```css
|
||||
:root {
|
||||
/* Spacing */
|
||||
--spacing-xs: 0.25rem;
|
||||
--spacing-sm: 0.5rem;
|
||||
--spacing-md: 1rem;
|
||||
--spacing-lg: 1.5rem;
|
||||
--spacing-xl: 2rem;
|
||||
|
||||
/* Border Radius */
|
||||
--radius-sm: 4px;
|
||||
--radius-md: 8px;
|
||||
--radius-lg: 12px;
|
||||
|
||||
/* Transitions */
|
||||
--transition-fast: 0.15s ease;
|
||||
--transition-normal: 0.2s ease;
|
||||
--transition-slow: 0.3s ease;
|
||||
|
||||
/* Font */
|
||||
--font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
|
||||
--font-mono: 'Courier New', Courier, monospace;
|
||||
|
||||
/* Icon sizing */
|
||||
--section-icon-size: 32px;
|
||||
--button-icon-size: 24px;
|
||||
--icon-btn-size: 42px;
|
||||
--icon-btn-icon-size: 26px;
|
||||
}
|
||||
```
|
||||
|
||||
## Thème Monokai (exemple de couleurs courantes)
|
||||
Les couleurs du thème sont définies dans `monokai.css` et `themes/`.
|
||||
Généralement :
|
||||
- `--bg-primary` : Fond principal.
|
||||
- `--bg-secondary` : Fond des cartes/sections.
|
||||
- `--text-primary` : Texte principal.
|
||||
- `--color-primary` : Couleur d'accentuation (souvent jaune/orange Monokai).
|
||||
- `--border-color` : Couleur des bordures.
|
||||
- `--color-danger` : Rouge pour les erreurs/suppression.
|
||||
- `--color-success` : Vert pour les succès.
|
||||
38
.gemini/skills/frontend-creator/references/ui_patterns.md
Normal file
38
.gemini/skills/frontend-creator/references/ui_patterns.md
Normal file
@@ -0,0 +1,38 @@
|
||||
# Patterns UI et Rendu
|
||||
|
||||
Le projet utilise du JavaScript Vanilla avec des gabarits de chaînes de caractères (template strings) pour le rendu du DOM.
|
||||
|
||||
## Rendu de Section
|
||||
La fonction `createSection` est souvent utilisée pour générer le HTML d'une section de détail.
|
||||
|
||||
```javascript
|
||||
function createSection(id, icon, title, content, options = {}) {
|
||||
// icon est souvent un span avec data-icon pour IconManager
|
||||
return `
|
||||
<section class="device-section" id="${id}">
|
||||
<div class="section-header">
|
||||
<h3>${icon}<span class="section-title">${title}</span></h3>
|
||||
${options.actionsHtml || ''}
|
||||
</div>
|
||||
<div class="section-body">
|
||||
${content}
|
||||
</div>
|
||||
</section>
|
||||
`;
|
||||
}
|
||||
```
|
||||
|
||||
## Gestion des Icônes
|
||||
Le système utilise `IconManager` pour injecter des SVG à partir d'attributs `data-icon`.
|
||||
Après avoir injecté du HTML contenant des `data-icon`, il faut appeler :
|
||||
```javascript
|
||||
if (window.IconManager) {
|
||||
window.IconManager.inlineSvgIcons(containerElement);
|
||||
}
|
||||
```
|
||||
|
||||
## Échappement HTML
|
||||
Utilisez toujours `window.BenchUtils.escapeHtml()` pour les données venant de l'API afin d'éviter les failles XSS.
|
||||
|
||||
## Interaction et État
|
||||
Les pages utilisent souvent des variables d'état globales simples (ex: `isEditing`, `currentDevice`) et re-rendent la section entière lors d'un changement d'état.
|
||||
Reference in New Issue
Block a user