71 lines
1.7 KiB
TypeScript
71 lines
1.7 KiB
TypeScript
|
|
'use client';
|
||
|
|
|
||
|
|
const FAVORITES_KEY = 'figlet-ui-favorites';
|
||
|
|
const RECENT_FONTS_KEY = 'figlet-ui-recent-fonts';
|
||
|
|
const MAX_RECENT = 10;
|
||
|
|
|
||
|
|
export function getFavorites(): string[] {
|
||
|
|
if (typeof window === 'undefined') return [];
|
||
|
|
|
||
|
|
try {
|
||
|
|
const stored = localStorage.getItem(FAVORITES_KEY);
|
||
|
|
return stored ? JSON.parse(stored) : [];
|
||
|
|
} catch {
|
||
|
|
return [];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
export function addFavorite(fontName: string): void {
|
||
|
|
const favorites = getFavorites();
|
||
|
|
if (!favorites.includes(fontName)) {
|
||
|
|
favorites.push(fontName);
|
||
|
|
localStorage.setItem(FAVORITES_KEY, JSON.stringify(favorites));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
export function removeFavorite(fontName: string): void {
|
||
|
|
const favorites = getFavorites();
|
||
|
|
const filtered = favorites.filter(f => f !== fontName);
|
||
|
|
localStorage.setItem(FAVORITES_KEY, JSON.stringify(filtered));
|
||
|
|
}
|
||
|
|
|
||
|
|
export function isFavorite(fontName: string): boolean {
|
||
|
|
return getFavorites().includes(fontName);
|
||
|
|
}
|
||
|
|
|
||
|
|
export function toggleFavorite(fontName: string): boolean {
|
||
|
|
const isCurrentlyFavorite = isFavorite(fontName);
|
||
|
|
if (isCurrentlyFavorite) {
|
||
|
|
removeFavorite(fontName);
|
||
|
|
} else {
|
||
|
|
addFavorite(fontName);
|
||
|
|
}
|
||
|
|
return !isCurrentlyFavorite;
|
||
|
|
}
|
||
|
|
|
||
|
|
export function getRecentFonts(): string[] {
|
||
|
|
if (typeof window === 'undefined') return [];
|
||
|
|
|
||
|
|
try {
|
||
|
|
const stored = localStorage.getItem(RECENT_FONTS_KEY);
|
||
|
|
return stored ? JSON.parse(stored) : [];
|
||
|
|
} catch {
|
||
|
|
return [];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
export function addRecentFont(fontName: string): void {
|
||
|
|
let recent = getRecentFonts();
|
||
|
|
|
||
|
|
// Remove if already exists
|
||
|
|
recent = recent.filter(f => f !== fontName);
|
||
|
|
|
||
|
|
// Add to beginning
|
||
|
|
recent.unshift(fontName);
|
||
|
|
|
||
|
|
// Keep only MAX_RECENT items
|
||
|
|
recent = recent.slice(0, MAX_RECENT);
|
||
|
|
|
||
|
|
localStorage.setItem(RECENT_FONTS_KEY, JSON.stringify(recent));
|
||
|
|
}
|