File size: 2,526 Bytes
eebc40f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# FontMap Component
## Structure
```
src/components/FontMap/
├── index.js # Point d'entrée principal
├── FontMap.js # Composant principal unifié
├── hooks/
│ ├── useFontData.js # Gestion des données de polices
│ ├── useD3Visualization.js # Logique D3 unifiée
│ └── useTooltip.js # Gestion des tooltips
├── components/
│ └── controls/
│ ├── DarkModeToggle.js
│ ├── DatasetSelector.js
│ ├── FilterControls.js
│ ├── SearchBar.js
│ └── ZoomControls.js
├── utils/
│ └── fontUtils.js # Utilitaires pour les polices
└── styles/
└── FontMap.css # Styles principaux
```
## Utilisation
```jsx
import { FontMap } from './components/FontMap';
function App() {
return <FontMap />;
}
```
## Composants
### FontMap (Principal)
Composant principal qui orchestre tous les autres composants et hooks.
### Hooks
#### useFontData
- Gère le chargement des données de polices
- Supporte les datasets 'original' et 'extended'
- Retourne : `{ fonts, loading, fontMapping, error }`
#### useD3Visualization
- Gère toute la logique D3 pour la visualisation
- Inclut le zoom, la magnification, les interactions
- Retourne : `svgRef`
#### useTooltip
- Gère l'affichage et le positionnement des tooltips
- Gère les tooltips hover et sélection avec positionnement intelligent
- Retourne : `{ handleFontSelect, handleFontHover, handleFontUnhover, updateTransform, updatePositions }`
### Contrôles
Tous les composants de contrôles suivent le même pattern :
- Props : `{ value, onChange, darkMode? }`
- Styles cohérents avec le système de design
### Utilitaires
#### fontUtils.js
- `getFontSymbolId()` : Obtient l'ID du symbole SVG
- `matchesSearch()` : Vérifie si une police correspond à une recherche
- `filterFonts()` : Filtre les polices selon les critères
- `calculatePositions()` : Calcule les positions avec simulation Voronoi
- `applyVoronoiRelaxation()` : Applique la relaxation de Voronoi
## Améliorations apportées
1. **Structure claire** : Séparation logique des responsabilités
2. **Pas de duplication** : Un seul composant principal
3. **Hooks réutilisables** : Logique métier extraite
4. **Composants modulaires** : Contrôles indépendants
5. **Utilitaires centralisés** : Fonctions communes dans un module
6. **Exports cohérents** : API claire et prévisible
|