tfrere's picture
tfrere HF Staff
first commit
eebc40f
raw
history blame
2.15 kB
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);
};