+ {/* View mode toggle (edit mode only) */}
+ {isEditMode && (
+
+
+
+
+ )}
+
+ {/* Status messages */}
+ {loading && (
+
{t('favorites.loading')}
+ )}
+ {error && (
+
{error}
+ )}
+
+ {/* Favorites list / grid */}
+ {!loading && sortedFavorites.length === 0 && (
+
{t('favorites.empty')}
+ )}
+
+ {!loading && sortedFavorites.length > 0 && (
+ viewMode === 'grid' ? (
+
+ {sortedFavorites.map((fav) => (
+
+ ))}
+
+ ) : (
+
+ {sortedFavorites.map((fav) => (
+
+ ))}
+
+ )
+ )}
+
+ {/* Add form (edit mode only, D-04) */}
+ {isEditMode && (
+
+ )}
+
+ );
+}
+
+// --- FavoriteTile sub-component ---
+
+type FavoriteTileProps = {
+ fav: FavoriteLink;
+ isEditMode: boolean;
+ editingId: string | null;
+ editTitle: string;
+ editUrl: string;
+ editIconUrl: string;
+ getFallbackLetter: (title: string) => string;
+ onStartEdit: (fav: FavoriteLink) => void;
+ onCancelEdit: () => void;
+ onSaveEdit: (id: string) => Promise