File size: 2,151 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 |
import * as d3 from 'd3';
import { calculatePositions as calculateVoronoiPositions } from './voronoiDilation';
/**
* Utilitaires pour la gestion des polices
*/
/**
* Obtient l'ID du symbole SVG pour une police donnée
* Utilise directement l'ID de la police + "_a" (plus besoin de mapping)
*/
export const getFontSymbolId = (fontName) => {
if (!fontName) return 'fallback_a';
// Utiliser directement l'ID de la police + "_a"
// L'ID est déjà normalisé dans font-index.json
return fontName.toLowerCase() + '_a';
};
/**
* Vérifie si une police correspond à un terme de recherche
*/
export const matchesSearch = (font, searchTerm) => {
if (!searchTerm) return true;
const searchLower = searchTerm.toLowerCase();
return font.name.toLowerCase().includes(searchLower) ||
font.family.toLowerCase().includes(searchLower);
};
/**
* Forge une URL Google Fonts pour une police donnée
* Gère correctement les espaces, majuscules et caractères spéciaux
*/
export const generateGoogleFontsUrl = (fontName) => {
if (!fontName) return null;
// Nettoyer et formater le nom de police pour l'URL Google Fonts
const formattedName = fontName
.trim()
.replace(/\s+/g, '+') // Remplacer les espaces par des +
.replace(/[^\w\s+]/g, '') // Supprimer les caractères spéciaux sauf +
.replace(/\s+/g, '+'); // S'assurer que tous les espaces sont des +
return `https://fonts.google.com/specimen/${formattedName}`;
};
/**
* Filtre les polices selon les critères donnés
*/
export const filterFonts = (fonts, filter, searchTerm) => {
return fonts.filter(font => {
// Filtrage par famille
const familyMatch = filter === 'all' || font.family === filter;
// Filtrage par recherche
const searchMatch = matchesSearch(font, searchTerm);
return familyMatch && searchMatch;
});
};
/**
* Calcule les positions avec simulation de relaxation de Voronoi
* Délègue le calcul complexe au module voronoiDilation
*/
export const calculatePositions = (fonts, width, height, dilationFactor) => {
return calculateVoronoiPositions(fonts, width, height, dilationFactor);
};
|